visuddhinanda 4 лет назад
Родитель
Сommit
e9c13cd099
100 измененных файлов с 3010 добавлено и 2384 удалено
  1. 2 0
      app/sync/sync.js
  2. 1 1
      app/sync/table_article.php
  3. 0 49
      app/sync/table_user_wbw_block.php
  4. 15 14
      app/sync/table_wbw_block.php
  5. 1 1
      node_modules/highcharts/bower.json
  6. 3 0
      node_modules/highcharts/css/highcharts.css
  7. 5 2
      node_modules/highcharts/css/highcharts.scss
  8. 4 0
      node_modules/highcharts/css/stocktools/gui.css
  9. 5 1
      node_modules/highcharts/css/stocktools/gui.scss
  10. 3 0
      node_modules/highcharts/css/themes/dark-unica.css
  11. 3 0
      node_modules/highcharts/css/themes/grid-light.css
  12. 3 0
      node_modules/highcharts/css/themes/sand-signika.css
  13. 5 3
      node_modules/highcharts/es-modules/Accessibility/A11yI18n.js
  14. 13 8
      node_modules/highcharts/es-modules/Accessibility/AccessibilityComponent.js
  15. 22 11
      node_modules/highcharts/es-modules/Accessibility/Components/AnnotationsA11y.js
  16. 20 0
      node_modules/highcharts/es-modules/Accessibility/Components/ContainerComponent.js
  17. 24 16
      node_modules/highcharts/es-modules/Accessibility/Components/InfoRegionsComponent.js
  18. 10 4
      node_modules/highcharts/es-modules/Accessibility/Components/LegendComponent.js
  19. 1 1
      node_modules/highcharts/es-modules/Accessibility/Components/MenuComponent.js
  20. 41 28
      node_modules/highcharts/es-modules/Accessibility/Components/RangeSelectorComponent.js
  21. 7 4
      node_modules/highcharts/es-modules/Accessibility/Components/SeriesComponent/SeriesDescriber.js
  22. 24 8
      node_modules/highcharts/es-modules/Accessibility/Components/SeriesComponent/SeriesKeyboardNavigation.js
  23. 10 9
      node_modules/highcharts/es-modules/Accessibility/FocusBorder.js
  24. 6 4
      node_modules/highcharts/es-modules/Accessibility/KeyboardNavigation.js
  25. 1 1
      node_modules/highcharts/es-modules/Accessibility/Options/DeprecatedOptions.js
  26. 8 5
      node_modules/highcharts/es-modules/Accessibility/Options/Options.js
  27. 10 7
      node_modules/highcharts/es-modules/Accessibility/Utils/ChartUtilities.js
  28. 12 13
      node_modules/highcharts/es-modules/Core/Animation/AnimationUtilities.js
  29. 16 18
      node_modules/highcharts/es-modules/Core/Animation/Fx.js
  30. 195 207
      node_modules/highcharts/es-modules/Core/Axis/Axis.js
  31. 5 5
      node_modules/highcharts/es-modules/Core/Axis/Axis3D.js
  32. 72 75
      node_modules/highcharts/es-modules/Core/Axis/BrokenAxis.js
  33. 14 8
      node_modules/highcharts/es-modules/Core/Axis/ColorAxis.js
  34. 45 43
      node_modules/highcharts/es-modules/Core/Axis/GridAxis.js
  35. 1 1
      node_modules/highcharts/es-modules/Core/Axis/LogarithmicAxis.js
  36. 20 11
      node_modules/highcharts/es-modules/Core/Axis/OrdinalAxis.js
  37. 5 3
      node_modules/highcharts/es-modules/Core/Axis/PlotLineOrBand.js
  38. 10 9
      node_modules/highcharts/es-modules/Core/Axis/RadialAxis.js
  39. 1 7
      node_modules/highcharts/es-modules/Core/Axis/ScrollbarAxis.js
  40. 10 10
      node_modules/highcharts/es-modules/Core/Axis/StackingAxis.js
  41. 52 23
      node_modules/highcharts/es-modules/Core/Axis/Tick.js
  42. 5 6
      node_modules/highcharts/es-modules/Core/Axis/TreeGridAxis.js
  43. 9 12
      node_modules/highcharts/es-modules/Core/Axis/TreeGridTick.js
  44. 3 5
      node_modules/highcharts/es-modules/Core/Axis/ZAxis.js
  45. 91 46
      node_modules/highcharts/es-modules/Core/Chart/Chart.js
  46. 1 1
      node_modules/highcharts/es-modules/Core/Chart/Chart3D.js
  47. 146 91
      node_modules/highcharts/es-modules/Core/Chart/GanttChart.js
  48. 283 154
      node_modules/highcharts/es-modules/Core/Chart/StockChart.js
  49. 2 2
      node_modules/highcharts/es-modules/Core/Color/Palette.js
  50. 71 66
      node_modules/highcharts/es-modules/Core/Globals.js
  51. 17 5
      node_modules/highcharts/es-modules/Core/Legend.js
  52. 19 15
      node_modules/highcharts/es-modules/Core/Navigator.js
  53. 94 91
      node_modules/highcharts/es-modules/Core/Options.js
  54. 67 44
      node_modules/highcharts/es-modules/Core/Pointer.js
  55. 3 2
      node_modules/highcharts/es-modules/Core/Renderer/HTML/AST.js
  56. 19 8
      node_modules/highcharts/es-modules/Core/Renderer/HTML/HTMLElement.js
  57. 4 20
      node_modules/highcharts/es-modules/Core/Renderer/HTML/HTMLRenderer.js
  58. 229 238
      node_modules/highcharts/es-modules/Core/Renderer/SVG/SVGElement.js
  59. 17 20
      node_modules/highcharts/es-modules/Core/Renderer/SVG/SVGLabel.js
  60. 68 46
      node_modules/highcharts/es-modules/Core/Renderer/SVG/SVGRenderer.js
  61. 11 11
      node_modules/highcharts/es-modules/Core/Renderer/SVG/SVGRenderer3D.js
  62. 19 2
      node_modules/highcharts/es-modules/Core/Scrollbar.js
  63. 33 14
      node_modules/highcharts/es-modules/Core/Series/DataLabels.js
  64. 22 18
      node_modules/highcharts/es-modules/Core/Series/Point.js
  65. 127 75
      node_modules/highcharts/es-modules/Core/Series/Series.js
  66. 5 2
      node_modules/highcharts/es-modules/Core/Series/SeriesRegistry.js
  67. 5 4
      node_modules/highcharts/es-modules/Core/Time.js
  68. 125 62
      node_modules/highcharts/es-modules/Core/Tooltip.js
  69. 64 258
      node_modules/highcharts/es-modules/Core/Utilities.js
  70. 15 7
      node_modules/highcharts/es-modules/Extensions/Annotations/Annotations.js
  71. 13 10
      node_modules/highcharts/es-modules/Extensions/Annotations/Controllables/ControllableLabel.js
  72. 1 1
      node_modules/highcharts/es-modules/Extensions/Annotations/Mixins/ControllableMixin.js
  73. 9 7
      node_modules/highcharts/es-modules/Extensions/Annotations/Mixins/EventEmitterMixin.js
  74. 16 15
      node_modules/highcharts/es-modules/Extensions/Annotations/Mixins/MarkerMixin.js
  75. 1 1
      node_modules/highcharts/es-modules/Extensions/Annotations/MockPoint.js
  76. 175 78
      node_modules/highcharts/es-modules/Extensions/Annotations/NavigationBindings.js
  77. 41 45
      node_modules/highcharts/es-modules/Extensions/Annotations/Popup.js
  78. 3 1
      node_modules/highcharts/es-modules/Extensions/Annotations/Types/CrookedLine.js
  79. 6 3
      node_modules/highcharts/es-modules/Extensions/Annotations/Types/Fibonacci.js
  80. 13 20
      node_modules/highcharts/es-modules/Extensions/Annotations/Types/InfinityLine.js
  81. 3 3
      node_modules/highcharts/es-modules/Extensions/Annotations/Types/Measure.js
  82. 6 2
      node_modules/highcharts/es-modules/Extensions/Annotations/Types/Tunnel.js
  83. 7 8
      node_modules/highcharts/es-modules/Extensions/Annotations/Types/VerticalLine.js
  84. 21 0
      node_modules/highcharts/es-modules/Extensions/Boost/BoostInit.js
  85. 9 5
      node_modules/highcharts/es-modules/Extensions/Boost/BoostOverrides.js
  86. 34 15
      node_modules/highcharts/es-modules/Extensions/Boost/WGLRenderer.js
  87. 6 5
      node_modules/highcharts/es-modules/Extensions/BoostCanvas.js
  88. 32 28
      node_modules/highcharts/es-modules/Extensions/CurrentDateIndication.js
  89. 1 1
      node_modules/highcharts/es-modules/Extensions/Data.js
  90. 210 31
      node_modules/highcharts/es-modules/Extensions/DataGrouping.js
  91. 0 86
      node_modules/highcharts/es-modules/Extensions/Debugger.js
  92. 30 27
      node_modules/highcharts/es-modules/Extensions/DraggablePoints.js
  93. 26 20
      node_modules/highcharts/es-modules/Extensions/Drilldown.js
  94. 9 4
      node_modules/highcharts/es-modules/Extensions/ExportData.js
  95. 27 12
      node_modules/highcharts/es-modules/Extensions/Exporting.js
  96. 16 10
      node_modules/highcharts/es-modules/Extensions/FullScreen.js
  97. 6 4
      node_modules/highcharts/es-modules/Extensions/GeoJSON.js
  98. 2 2
      node_modules/highcharts/es-modules/Extensions/MarkerClusters.js
  99. 3 1
      node_modules/highcharts/es-modules/Extensions/NoDataToDisplay.js
  100. 5 4
      node_modules/highcharts/es-modules/Extensions/OfflineExporting.js

+ 2 - 0
app/sync/sync.js

@@ -5,6 +5,8 @@ var sync_db_list = [
 	{ script: "sync/table_term_channel.php", count: -1, finished: 0, enable: false },
 	{ script: "sync/table_term_channel.php", count: -1, finished: 0, enable: false },
 	{ script: "sync/table_term_editor.php", count: -1, finished: 0, enable: false },
 	{ script: "sync/table_term_editor.php", count: -1, finished: 0, enable: false },
 	{ script: "sync/table_sentence.php", count: -1, finished: 0, enable: true },
 	{ script: "sync/table_sentence.php", count: -1, finished: 0, enable: true },
+	{ script: "sync/table_wbw_block.php", count: -1, finished: 0, enable: false },
+	{ script: "sync/table_wbw.php", count: -1, finished: 0, enable: false },
 ];
 ];
 var isStop = false;
 var isStop = false;
 var sync_curr_do_db = 0;
 var sync_curr_do_db = 0;

+ 1 - 1
app/sync/table_article.php

@@ -37,7 +37,7 @@ $input = (object) [
 		'status',
 		'status',
 		'modify_time',
 		'modify_time',
 		'receive_time'
 		'receive_time'
-    ]    
+    ]
 ];
 ];
 
 
 $result = do_sync($input);
 $result = do_sync($input);

+ 0 - 49
app/sync/table_user_wbw_block.php

@@ -1,49 +0,0 @@
-<?php
-//header('Content-type: application/json; charset=utf8');
-
-require_once "../path.php";
-require_once "../sync/function.php";
-
-$input = (object) [
-    "database" =>  _FILE_DB_TERM_,
-    "table" =>  "term",
-    "uuid" =>  "guid",
-    "sync_id" =>  ["pali","tag","channal"],
-    "modify_time" =>  "modify_time",
-    "receive_time" =>  "receive_time",
-	"where"=>" and ( (channal IS NOT NULL) or channal <> '') ",
-    "insert" => [
-        'guid',
-		'word',
-		'word_en',
-		'meaning',
-		'other_meaning',
-		'note',
-		'tag',
-		'create_time',
-		'owner',
-		'hit',
-		'language',
-		'receive_time',
-		'modify_time'
-    ],
-    "update" =>  [
-        "word",
-        "word_en",
-        "meaning",
-        "other_meaning",
-        "note",
-        "tag",
-        "owner",
-        "hit",
-        "language",
-        "create_time",
-		"modify_time",
-        "receive_time" 
-    ]    
-];
-
-$result = do_sync($input);
-echo json_encode($result, JSON_UNESCAPED_UNICODE);
-
-?>

+ 15 - 14
app/sync/table_wbw_block.php

@@ -1,40 +1,41 @@
 <?php
 <?php
+//header('Content-type: application/json; charset=utf8');
 
 
 require_once "../path.php";
 require_once "../path.php";
 require_once "../sync/function.php";
 require_once "../sync/function.php";
 
 
 $input = (object) [
 $input = (object) [
     "database" =>  _FILE_DB_USER_WBW_,
     "database" =>  _FILE_DB_USER_WBW_,
-    "table" =>  "wbw",
+    "table" =>  "wbw_block",
     "uuid" =>  "id",
     "uuid" =>  "id",
-    "sync_id" =>  ["block_id","wid"],
+    "sync_id" =>  ["id"],
     "modify_time" =>  "modify_time",
     "modify_time" =>  "modify_time",
     "receive_time" =>  "receive_time",
     "receive_time" =>  "receive_time",
-	"where"=>" and ( (channal IS NOT NULL ) or channal <> '' )",
+	"where"=>" and ( (channal IS NOT NULL) or channal <> '') ",
     "insert" => [
     "insert" => [
         'id',
         'id',
-		'block_id',
+		'parent_id',
+		'channal',
+		'owner',
 		'book',
 		'book',
 		'paragraph',
 		'paragraph',
-		'wid',
-		'word',
-		'data',
+		'style',
+		'lang',
 		'status',
 		'status',
-		'owner',
 		'receive_time',
 		'receive_time',
 		'modify_time'
 		'modify_time'
     ],
     ],
     "update" =>  [
     "update" =>  [
-        'id',
+		'parent_id',
+		'channal',
+		'owner',
 		'book',
 		'book',
 		'paragraph',
 		'paragraph',
-		'word',
-		'data',
+		'style',
+		'lang',
 		'status',
 		'status',
-		'owner',
-		'receive_time',
 		'modify_time'
 		'modify_time'
-    ]    
+    ]
 ];
 ];
 
 
 $result = do_sync($input);
 $result = do_sync($input);

+ 1 - 1
node_modules/highcharts/bower.json

@@ -1,6 +1,6 @@
 {
 {
   "name": "highcharts",
   "name": "highcharts",
-  "version": "9.0.1",
+  "version": "9.1.0",
   "main": "highcharts.js",
   "main": "highcharts.js",
   "license": "https://www.highcharts.com/license",
   "license": "https://www.highcharts.com/license",
   "types": "highcharts.d.ts"
   "types": "highcharts.d.ts"

+ 3 - 0
node_modules/highcharts/css/highcharts.css

@@ -18,6 +18,8 @@
   font-family: "Lucida Grande", "Lucida Sans Unicode", Arial, Helvetica, sans-serif;
   font-family: "Lucida Grande", "Lucida Sans Unicode", Arial, Helvetica, sans-serif;
   font-size: 12px;
   font-size: 12px;
   user-select: none;
   user-select: none;
+  touch-action: manipulation;
+  outline: none;
 }
 }
 
 
 .highcharts-root {
 .highcharts-root {
@@ -76,6 +78,7 @@
 
 
 .highcharts-subtitle {
 .highcharts-subtitle {
   fill: #666666;
   fill: #666666;
+  font-size: 1em;
 }
 }
 
 
 /* Axes */
 /* Axes */

+ 5 - 2
node_modules/highcharts/css/highcharts.scss

@@ -76,8 +76,8 @@ $scrollbar-track-background: $neutral-color-5 !default;
 $scrollbar-track-border: $neutral-color-5 !default;
 $scrollbar-track-border: $neutral-color-5 !default;
 
 
 // Indicators
 // Indicators
-$indicator-positive-line: #06b535; // Positive indicator color
-$indicator-negative-line: #f21313; // Negative indicator color
+$positive-color: #06b535; // Positive indicator color
+$negative-color: #f21313; // Negative indicator color
 
 
 .highcharts-container {
 .highcharts-container {
     position: relative;
     position: relative;
@@ -91,6 +91,8 @@ $indicator-negative-line: #f21313; // Negative indicator color
     font-family: $font-family;
     font-family: $font-family;
     font-size: 12px;
     font-size: 12px;
     user-select: none;
     user-select: none;
+    touch-action: manipulation;
+    outline: none;
 }
 }
 .highcharts-root {
 .highcharts-root {
     display: block;
     display: block;
@@ -137,6 +139,7 @@ $indicator-negative-line: #f21313; // Negative indicator color
 }
 }
 .highcharts-subtitle {
 .highcharts-subtitle {
     fill: $neutral-color-60;
     fill: $neutral-color-60;
+    font-size: $subtitle-font-size;
 }
 }
 
 
 /* Axes */
 /* Axes */

+ 4 - 0
node_modules/highcharts/css/stocktools/gui.css

@@ -263,3 +263,7 @@
   height: 20px;
   height: 20px;
   float: left;
   float: left;
 }
 }
+
+li.highcharts-disabled-btn:hover, .highcharts-disabled-btn .highcharts-submenu-item-arrow:hover {
+  background-color: #f7f7f7;
+}

+ 5 - 1
node_modules/highcharts/css/stocktools/gui.scss

@@ -262,4 +262,8 @@ $button-hover-color: #e6ebf5;
   width: 50%;
   width: 50%;
   height: 20px;
   height: 20px;
   float: left;
   float: left;
-}
+}
+
+li.highcharts-disabled-btn:hover, .highcharts-disabled-btn .highcharts-submenu-item-arrow:hover {
+  background-color: $button-background-color;
+}

+ 3 - 0
node_modules/highcharts/css/themes/dark-unica.css

@@ -74,6 +74,8 @@
   font-family: "Unica One", Arial, Helvetica, sans-serif;
   font-family: "Unica One", Arial, Helvetica, sans-serif;
   font-size: 12px;
   font-size: 12px;
   user-select: none;
   user-select: none;
+  touch-action: manipulation;
+  outline: none;
 }
 }
 
 
 .highcharts-root {
 .highcharts-root {
@@ -132,6 +134,7 @@
 
 
 .highcharts-subtitle {
 .highcharts-subtitle {
   fill: #E0E0E3;
   fill: #E0E0E3;
+  font-size: 1em;
 }
 }
 
 
 /* Axes */
 /* Axes */

+ 3 - 0
node_modules/highcharts/css/themes/grid-light.css

@@ -27,6 +27,8 @@
   font-family: "Dosis", Arial, Helvetica, sans-serif;
   font-family: "Dosis", Arial, Helvetica, sans-serif;
   font-size: 12px;
   font-size: 12px;
   user-select: none;
   user-select: none;
+  touch-action: manipulation;
+  outline: none;
 }
 }
 
 
 .highcharts-root {
 .highcharts-root {
@@ -85,6 +87,7 @@
 
 
 .highcharts-subtitle {
 .highcharts-subtitle {
   fill: #666666;
   fill: #666666;
+  font-size: 1em;
 }
 }
 
 
 /* Axes */
 /* Axes */

+ 3 - 0
node_modules/highcharts/css/themes/sand-signika.css

@@ -43,6 +43,8 @@
   font-family: "Signika", Arial, Helvetica, sans-serif;
   font-family: "Signika", Arial, Helvetica, sans-serif;
   font-size: 12px;
   font-size: 12px;
   user-select: none;
   user-select: none;
+  touch-action: manipulation;
+  outline: none;
 }
 }
 
 
 .highcharts-root {
 .highcharts-root {
@@ -101,6 +103,7 @@
 
 
 .highcharts-subtitle {
 .highcharts-subtitle {
   fill: #666666;
   fill: #666666;
+  font-size: 1em;
 }
 }
 
 
 /* Axes */
 /* Axes */

+ 5 - 3
node_modules/highcharts/es-modules/Accessibility/A11yI18n.js

@@ -12,8 +12,10 @@
  * */
  * */
 'use strict';
 'use strict';
 import H from '../Core/Globals.js';
 import H from '../Core/Globals.js';
+import F from '../Core/FormatUtilities.js';
+var format = F.format;
 import U from '../Core/Utilities.js';
 import U from '../Core/Utilities.js';
-var format = U.format, pick = U.pick;
+var pick = U.pick;
 /* eslint-disable valid-jsdoc */
 /* eslint-disable valid-jsdoc */
 /**
 /**
  * String trim that works for IE6-8 as well.
  * String trim that works for IE6-8 as well.
@@ -49,7 +51,7 @@ function formatExtendedStatement(statement, ctx) {
     var eachStart = statement.indexOf('#each('), pluralStart = statement.indexOf('#plural('), indexStart = statement.indexOf('['), indexEnd = statement.indexOf(']'), arr, result;
     var eachStart = statement.indexOf('#each('), pluralStart = statement.indexOf('#plural('), indexStart = statement.indexOf('['), indexEnd = statement.indexOf(']'), arr, result;
     // Dealing with an each-function?
     // Dealing with an each-function?
     if (eachStart > -1) {
     if (eachStart > -1) {
-        var eachEnd = statement.slice(eachStart).indexOf(')') + eachStart, preEach = statement.substring(0, eachStart), postEach = statement.substring(eachEnd + 1), eachStatement = statement.substring(eachStart + 6, eachEnd), eachArguments = eachStatement.split(','), lenArg = Number(eachArguments[1]), len;
+        var eachEnd = statement.slice(eachStart).indexOf(')') + eachStart, preEach = statement.substring(0, eachStart), postEach = statement.substring(eachEnd + 1), eachStatement = statement.substring(eachStart + 6, eachEnd), eachArguments = eachStatement.split(','), lenArg = Number(eachArguments[1]), len = void 0;
         result = '';
         result = '';
         arr = ctx[eachArguments[0]];
         arr = ctx[eachArguments[0]];
         if (arr) {
         if (arr) {
@@ -84,7 +86,7 @@ function formatExtendedStatement(statement, ctx) {
     }
     }
     // Array index
     // Array index
     if (indexStart > -1) {
     if (indexStart > -1) {
-        var arrayName = statement.substring(0, indexStart), ix = Number(statement.substring(indexStart + 1, indexEnd)), val;
+        var arrayName = statement.substring(0, indexStart), ix = Number(statement.substring(indexStart + 1, indexEnd)), val = void 0;
         arr = ctx[arrayName];
         arr = ctx[arrayName];
         if (!isNaN(ix) && arr) {
         if (!isNaN(ix) && arr) {
             if (ix < 0) {
             if (ix < 0) {

+ 13 - 8
node_modules/highcharts/es-modules/Accessibility/AccessibilityComponent.js

@@ -247,20 +247,21 @@ AccessibilityComponent.prototype = {
      */
      */
     setProxyButtonStyle: function (button) {
     setProxyButtonStyle: function (button) {
         merge(true, button.style, {
         merge(true, button.style, {
-            'border-width': 0,
-            'background-color': 'transparent',
+            borderWidth: '0',
+            backgroundColor: 'transparent',
             cursor: 'pointer',
             cursor: 'pointer',
             outline: 'none',
             outline: 'none',
-            opacity: 0.001,
+            opacity: '0.001',
             filter: 'alpha(opacity=1)',
             filter: 'alpha(opacity=1)',
-            '-ms-filter': 'progid:DXImageTransform.Microsoft.Alpha(Opacity=1)',
-            zIndex: 999,
+            zIndex: '999',
             overflow: 'hidden',
             overflow: 'hidden',
-            padding: 0,
-            margin: 0,
+            padding: '0',
+            margin: '0',
             display: 'block',
             display: 'block',
             position: 'absolute'
             position: 'absolute'
         });
         });
+        button.style['-ms-filter'] =
+            'progid:DXImageTransform.Microsoft.Alpha(Opacity=1)';
     },
     },
     /**
     /**
      * @private
      * @private
@@ -297,7 +298,11 @@ AccessibilityComponent.prototype = {
                     component.fireEventOnWrappedOrUnwrappedElement(source, clonedEvent);
                     component.fireEventOnWrappedOrUnwrappedElement(source, clonedEvent);
                 }
                 }
                 e.stopPropagation();
                 e.stopPropagation();
-                e.preventDefault();
+                // #9682, #15318: Touch scrolling didnt work when touching a
+                // component
+                if (evtType !== 'touchstart' && evtType !== 'touchmove' && evtType !== 'touchend') {
+                    e.preventDefault();
+                }
             }, { passive: false });
             }, { passive: false });
         });
         });
     },
     },

+ 22 - 11
node_modules/highcharts/es-modules/Accessibility/Components/AnnotationsA11y.js

@@ -22,8 +22,8 @@ var escapeStringForHTML = HTMLUtilities.escapeStringForHTML, stripHTMLTagsFromSt
 function getChartAnnotationLabels(chart) {
 function getChartAnnotationLabels(chart) {
     var annotations = chart.annotations || [];
     var annotations = chart.annotations || [];
     return annotations.reduce(function (acc, cur) {
     return annotations.reduce(function (acc, cur) {
-        var _a;
-        if (((_a = cur.options) === null || _a === void 0 ? void 0 : _a.visible) !== false) {
+        if (cur.options &&
+            cur.options.visible !== false) {
             acc = acc.concat(cur.labels);
             acc = acc.concat(cur.labels);
         }
         }
         return acc;
         return acc;
@@ -37,9 +37,13 @@ function getChartAnnotationLabels(chart) {
  * @return {string} The text in the label.
  * @return {string} The text in the label.
  */
  */
 function getLabelText(label) {
 function getLabelText(label) {
-    var _a, _b, _c, _d;
-    var a11yDesc = (_b = (_a = label.options) === null || _a === void 0 ? void 0 : _a.accessibility) === null || _b === void 0 ? void 0 : _b.description;
-    return a11yDesc ? a11yDesc : ((_d = (_c = label.graphic) === null || _c === void 0 ? void 0 : _c.text) === null || _d === void 0 ? void 0 : _d.textStr) || '';
+    return ((label.options &&
+        label.options.accessibility &&
+        label.options.accessibility.description) ||
+        (label.graphic &&
+            label.graphic.text &&
+            label.graphic.text.textStr) ||
+        '');
 }
 }
 /**
 /**
  * Describe an annotation label.
  * Describe an annotation label.
@@ -49,19 +53,26 @@ function getLabelText(label) {
  * @return {string} The description for the label.
  * @return {string} The description for the label.
  */
  */
 function getAnnotationLabelDescription(label) {
 function getAnnotationLabelDescription(label) {
-    var _a, _b;
-    var a11yDesc = (_b = (_a = label.options) === null || _a === void 0 ? void 0 : _a.accessibility) === null || _b === void 0 ? void 0 : _b.description;
+    var a11yDesc = (label.options &&
+        label.options.accessibility &&
+        label.options.accessibility.description);
     if (a11yDesc) {
     if (a11yDesc) {
         return a11yDesc;
         return a11yDesc;
     }
     }
     var chart = label.chart;
     var chart = label.chart;
     var labelText = getLabelText(label);
     var labelText = getLabelText(label);
     var points = label.points;
     var points = label.points;
-    var getAriaLabel = function (point) { var _a, _b; return ((_b = (_a = point === null || point === void 0 ? void 0 : point.graphic) === null || _a === void 0 ? void 0 : _a.element) === null || _b === void 0 ? void 0 : _b.getAttribute('aria-label')) || ''; };
+    var getAriaLabel = function (point) { return (point.graphic &&
+        point.graphic.element &&
+        point.graphic.element.getAttribute('aria-label') ||
+        ''); };
     var getValueDesc = function (point) {
     var getValueDesc = function (point) {
-        var _a;
-        var valDesc = ((_a = point === null || point === void 0 ? void 0 : point.accessibility) === null || _a === void 0 ? void 0 : _a.valueDescription) || getAriaLabel(point);
-        var seriesName = (point === null || point === void 0 ? void 0 : point.series.name) || '';
+        var valDesc = (point.accessibility &&
+            point.accessibility.valueDescription ||
+            getAriaLabel(point));
+        var seriesName = (point &&
+            point.series.name ||
+            '');
         return (seriesName ? seriesName + ', ' : '') + 'data point ' + valDesc;
         return (seriesName ? seriesName + ', ' : '') + 'data point ' + valDesc;
     };
     };
     var pointValueDescriptions = points
     var pointValueDescriptions = points

+ 20 - 0
node_modules/highcharts/es-modules/Accessibility/Components/ContainerComponent.js

@@ -10,6 +10,7 @@
  *
  *
  * */
  * */
 import AccessibilityComponent from '../AccessibilityComponent.js';
 import AccessibilityComponent from '../AccessibilityComponent.js';
+import KeyboardNavigationHandler from '../KeyboardNavigationHandler.js';
 import ChartUtilities from '../Utils/ChartUtilities.js';
 import ChartUtilities from '../Utils/ChartUtilities.js';
 var unhideChartElementFromAT = ChartUtilities.unhideChartElementFromAT, getChartTitle = ChartUtilities.getChartTitle;
 var unhideChartElementFromAT = ChartUtilities.unhideChartElementFromAT, getChartTitle = ChartUtilities.getChartTitle;
 import H from '../../Core/Globals.js';
 import H from '../../Core/Globals.js';
@@ -104,6 +105,25 @@ extend(ContainerComponent.prototype, /** @lends Highcharts.ContainerComponent */
             unhideChartElementFromAT(chart, credits.element);
             unhideChartElementFromAT(chart, credits.element);
         }
         }
     },
     },
+    /**
+     * Empty handler to just set focus on chart
+     * @return {Highcharts.KeyboardNavigationHandler}
+     */
+    getKeyboardNavigation: function () {
+        var chart = this.chart;
+        return new KeyboardNavigationHandler(chart, {
+            keyCodeMap: [],
+            validate: function () {
+                return true;
+            },
+            init: function () {
+                var a11y = chart.accessibility;
+                if (a11y) {
+                    a11y.keyboardNavigation.tabindexContainer.focus();
+                }
+            }
+        });
+    },
     /**
     /**
      * Accessibility disabled/chart destroyed.
      * Accessibility disabled/chart destroyed.
      */
      */

+ 24 - 16
node_modules/highcharts/es-modules/Accessibility/Components/InfoRegionsComponent.js

@@ -9,11 +9,13 @@
  *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!
  *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!
  *
  *
  * */
  * */
+import AST from '../../Core/Renderer/HTML/AST.js';
+import F from '../../Core/FormatUtilities.js';
+var format = F.format;
 import H from '../../Core/Globals.js';
 import H from '../../Core/Globals.js';
 var doc = H.doc;
 var doc = H.doc;
-import AST from '../../Core/Renderer/HTML/AST.js';
 import U from '../../Core/Utilities.js';
 import U from '../../Core/Utilities.js';
-var extend = U.extend, format = U.format, pick = U.pick;
+var extend = U.extend, pick = U.pick;
 import AccessibilityComponent from '../AccessibilityComponent.js';
 import AccessibilityComponent from '../AccessibilityComponent.js';
 import Announcer from '../Utils/Announcer.js';
 import Announcer from '../Utils/Announcer.js';
 import AnnotationsA11y from './AnnotationsA11y.js';
 import AnnotationsA11y from './AnnotationsA11y.js';
@@ -239,9 +241,10 @@ extend(InfoRegionsComponent.prototype, /** @lends Highcharts.InfoRegionsComponen
      * @return {string}
      * @return {string}
      */
      */
     defaultBeforeChartFormatter: function () {
     defaultBeforeChartFormatter: function () {
-        var _a;
         var chart = this.chart, format = chart.options.accessibility
         var chart = this.chart, format = chart.options.accessibility
-            .screenReaderSection.beforeChartFormat, axesDesc = this.getAxesDescription(), shouldHaveSonifyBtn = chart.sonify && ((_a = chart.options.sonification) === null || _a === void 0 ? void 0 : _a.enabled), sonifyButtonId = 'highcharts-a11y-sonify-data-btn-' +
+            .screenReaderSection.beforeChartFormat, axesDesc = this.getAxesDescription(), shouldHaveSonifyBtn = (chart.sonify &&
+            chart.options.sonification &&
+            chart.options.sonification.enabled), sonifyButtonId = 'highcharts-a11y-sonify-data-btn-' +
             chart.index, dataTableButtonId = 'hc-linkto-highcharts-data-table-' +
             chart.index, dataTableButtonId = 'hc-linkto-highcharts-data-table-' +
             chart.index, annotationsList = getAnnotationsInfoHTML(chart), annotationsTitleStr = chart.langFormat('accessibility.screenReaderSection.annotations.heading', { chart: chart }), context = {
             chart.index, annotationsList = getAnnotationsInfoHTML(chart), annotationsTitleStr = chart.langFormat('accessibility.screenReaderSection.annotations.heading', { chart: chart }), context = {
             headingTagName: getHeadingTagNameForElement(chart.renderTo),
             headingTagName: getHeadingTagNameForElement(chart.renderTo),
@@ -317,9 +320,9 @@ extend(InfoRegionsComponent.prototype, /** @lends Highcharts.InfoRegionsComponen
      * @return {string}
      * @return {string}
      */
      */
     getSonifyButtonText: function (buttonId) {
     getSonifyButtonText: function (buttonId) {
-        var _a;
         var chart = this.chart;
         var chart = this.chart;
-        if (((_a = chart.options.sonification) === null || _a === void 0 ? void 0 : _a.enabled) === false) {
+        if (chart.options.sonification &&
+            chart.options.sonification.enabled === false) {
             return '';
             return '';
         }
         }
         var buttonText = chart.langFormat('accessibility.sonification.playAsSoundButtonText', { chart: chart, chartTitle: getChartTitle(chart) });
         var buttonText = chart.langFormat('accessibility.sonification.playAsSoundButtonText', { chart: chart, chartTitle: getChartTitle(chart) });
@@ -375,15 +378,19 @@ extend(InfoRegionsComponent.prototype, /** @lends Highcharts.InfoRegionsComponen
         var el = this.sonifyButton = getElement(sonifyButtonId);
         var el = this.sonifyButton = getElement(sonifyButtonId);
         var chart = this.chart;
         var chart = this.chart;
         var defaultHandler = function (e) {
         var defaultHandler = function (e) {
-            el === null || el === void 0 ? void 0 : el.setAttribute('aria-hidden', 'true');
-            el === null || el === void 0 ? void 0 : el.setAttribute('aria-label', '');
+            if (el) {
+                el.setAttribute('aria-hidden', 'true');
+                el.setAttribute('aria-label', '');
+            }
             e.preventDefault();
             e.preventDefault();
             e.stopPropagation();
             e.stopPropagation();
             var announceMsg = chart.langFormat('accessibility.sonification.playAsSoundClickAnnouncement', { chart: chart });
             var announceMsg = chart.langFormat('accessibility.sonification.playAsSoundClickAnnouncement', { chart: chart });
             _this.announcer.announce(announceMsg);
             _this.announcer.announce(announceMsg);
             setTimeout(function () {
             setTimeout(function () {
-                el === null || el === void 0 ? void 0 : el.removeAttribute('aria-hidden');
-                el === null || el === void 0 ? void 0 : el.removeAttribute('aria-label');
+                if (el) {
+                    el.removeAttribute('aria-hidden');
+                    el.removeAttribute('aria-label');
+                }
                 if (chart.sonify) {
                 if (chart.sonify) {
                     chart.sonify();
                     chart.sonify();
                 }
                 }
@@ -391,11 +398,11 @@ extend(InfoRegionsComponent.prototype, /** @lends Highcharts.InfoRegionsComponen
         };
         };
         if (el && chart) {
         if (el && chart) {
             setElAttrs(el, {
             setElAttrs(el, {
-                tabindex: '-1'
+                tabindex: -1
             });
             });
             el.onclick = function (e) {
             el.onclick = function (e) {
-                var _a;
-                var onPlayAsSoundClick = (_a = chart.options.accessibility) === null || _a === void 0 ? void 0 : _a.screenReaderSection.onPlayAsSoundClick;
+                var onPlayAsSoundClick = (chart.options.accessibility &&
+                    chart.options.accessibility.screenReaderSection.onPlayAsSoundClick);
                 (onPlayAsSoundClick || defaultHandler).call(this, e, chart);
                 (onPlayAsSoundClick || defaultHandler).call(this, e, chart);
             };
             };
         }
         }
@@ -409,7 +416,7 @@ extend(InfoRegionsComponent.prototype, /** @lends Highcharts.InfoRegionsComponen
         var el = this.viewDataTableButton = getElement(tableButtonId), chart = this.chart, tableId = tableButtonId.replace('hc-linkto-', '');
         var el = this.viewDataTableButton = getElement(tableButtonId), chart = this.chart, tableId = tableButtonId.replace('hc-linkto-', '');
         if (el) {
         if (el) {
             setElAttrs(el, {
             setElAttrs(el, {
-                tabindex: '-1',
+                tabindex: -1,
                 'aria-expanded': !!getElement(tableId)
                 'aria-expanded': !!getElement(tableId)
             });
             });
             el.onclick = chart.options.accessibility
             el.onclick = chart.options.accessibility
@@ -462,8 +469,9 @@ extend(InfoRegionsComponent.prototype, /** @lends Highcharts.InfoRegionsComponen
      * Remove component traces
      * Remove component traces
      */
      */
     destroy: function () {
     destroy: function () {
-        var _a;
-        (_a = this.announcer) === null || _a === void 0 ? void 0 : _a.destroy();
+        if (this.announcer) {
+            this.announcer.destroy();
+        }
     }
     }
 });
 });
 export default InfoRegionsComponent;
 export default InfoRegionsComponent;

+ 10 - 4
node_modules/highcharts/es-modules/Accessibility/Components/LegendComponent.js

@@ -171,9 +171,11 @@ extend(LegendComponent.prototype, /** @lends Highcharts.LegendComponent */ {
      * @private
      * @private
      */
      */
     updateLegendTitle: function () {
     updateLegendTitle: function () {
-        var _a, _b;
         var chart = this.chart;
         var chart = this.chart;
-        var legendTitle = stripHTMLTags((((_b = (_a = chart.legend) === null || _a === void 0 ? void 0 : _a.options.title) === null || _b === void 0 ? void 0 : _b.text) || '').replace(/<br ?\/?>/g, ' '));
+        var legendTitle = stripHTMLTags((chart.legend &&
+            chart.legend.options.title &&
+            chart.legend.options.title.text ||
+            '').replace(/<br ?\/?>/g, ' '));
         var legendLabel = chart.langFormat('accessibility.legend.legendLabel' + (legendTitle ? '' : 'NoTitle'), {
         var legendLabel = chart.langFormat('accessibility.legend.legendLabel' + (legendTitle ? '' : 'NoTitle'), {
             chart: chart,
             chart: chart,
             legendTitle: legendTitle
             legendTitle: legendTitle
@@ -215,7 +217,8 @@ extend(LegendComponent.prototype, /** @lends Highcharts.LegendComponent */ {
         }
         }
         var itemLabel = this.chart.langFormat('accessibility.legend.legendItem', {
         var itemLabel = this.chart.langFormat('accessibility.legend.legendItem', {
             chart: this.chart,
             chart: this.chart,
-            itemName: stripHTMLTags(item.name)
+            itemName: stripHTMLTags(item.name),
+            item: item
         }), attribs = {
         }), attribs = {
             tabindex: -1,
             tabindex: -1,
             'aria-pressed': item.visible,
             'aria-pressed': item.visible,
@@ -247,7 +250,10 @@ extend(LegendComponent.prototype, /** @lends Highcharts.LegendComponent */ {
                 ],
                 ],
                 [
                 [
                     [keys.enter, keys.space],
                     [keys.enter, keys.space],
-                    function () {
+                    function (keyCode) {
+                        if (H.isFirefox && keyCode === keys.space) { // #15520
+                            return this.response.success;
+                        }
                         return component.onKbdClick(this);
                         return component.onKbdClick(this);
                     }
                     }
                 ]
                 ]

+ 1 - 1
node_modules/highcharts/es-modules/Accessibility/Components/MenuComponent.js

@@ -206,7 +206,7 @@ extend(MenuComponent.prototype, /** @lends Highcharts.MenuComponent */ {
             var button = getExportMenuButtonElement(this.chart);
             var button = getExportMenuButtonElement(this.chart);
             this.exportButtonProxy = this.createProxyButton(button, this.exportProxyGroup, {
             this.exportButtonProxy = this.createProxyButton(button, this.exportProxyGroup, {
                 'aria-label': chart.langFormat('accessibility.exporting.menuButtonLabel', { chart: chart }),
                 'aria-label': chart.langFormat('accessibility.exporting.menuButtonLabel', { chart: chart }),
-                'aria-expanded': 'false'
+                'aria-expanded': false
             });
             });
         }
         }
     },
     },

+ 41 - 28
node_modules/highcharts/es-modules/Accessibility/Components/RangeSelectorComponent.js

@@ -45,10 +45,12 @@ function shouldRunInputNavigation(chart) {
  * @return {boolean}
  * @return {boolean}
  */
  */
 H.Chart.prototype.highlightRangeSelectorButton = function (ix) {
 H.Chart.prototype.highlightRangeSelectorButton = function (ix) {
-    var _a, _b;
-    var buttons = ((_a = this.rangeSelector) === null || _a === void 0 ? void 0 : _a.buttons) || [];
+    var buttons = (this.rangeSelector &&
+        this.rangeSelector.buttons ||
+        []);
     var curHighlightedIx = this.highlightedRangeSelectorItemIx;
     var curHighlightedIx = this.highlightedRangeSelectorItemIx;
-    var curSelectedIx = (_b = this.rangeSelector) === null || _b === void 0 ? void 0 : _b.selected;
+    var curSelectedIx = (this.rangeSelector &&
+        this.rangeSelector.selected);
     // Deselect old
     // Deselect old
     if (typeof curHighlightedIx !== 'undefined' &&
     if (typeof curHighlightedIx !== 'undefined' &&
         buttons[curHighlightedIx] &&
         buttons[curHighlightedIx] &&
@@ -70,9 +72,10 @@ H.Chart.prototype.highlightRangeSelectorButton = function (ix) {
 // Range selector does not have destroy-setup for class instance events - so
 // Range selector does not have destroy-setup for class instance events - so
 // we set it on the class and call the component from here.
 // we set it on the class and call the component from here.
 addEvent(RangeSelector, 'afterBtnClick', function () {
 addEvent(RangeSelector, 'afterBtnClick', function () {
-    var _a;
-    var component = (_a = this.chart.accessibility) === null || _a === void 0 ? void 0 : _a.components.rangeSelector;
-    return component === null || component === void 0 ? void 0 : component.onAfterBtnClick();
+    if (this.chart.accessibility &&
+        this.chart.accessibility.components.rangeSelector) {
+        return this.chart.accessibility.components.rangeSelector.onAfterBtnClick();
+    }
 });
 });
 /**
 /**
  * The RangeSelectorComponent class
  * The RangeSelectorComponent class
@@ -96,14 +99,14 @@ extend(RangeSelectorComponent.prototype, /** @lends Highcharts.RangeSelectorComp
      * Called on first render/updates to the chart, including options changes.
      * Called on first render/updates to the chart, including options changes.
      */
      */
     onChartUpdate: function () {
     onChartUpdate: function () {
-        var _a;
         var chart = this.chart, component = this, rangeSelector = chart.rangeSelector;
         var chart = this.chart, component = this, rangeSelector = chart.rangeSelector;
         if (!rangeSelector) {
         if (!rangeSelector) {
             return;
             return;
         }
         }
         this.updateSelectorVisibility();
         this.updateSelectorVisibility();
         this.setDropdownAttrs();
         this.setDropdownAttrs();
-        if ((_a = rangeSelector.buttons) === null || _a === void 0 ? void 0 : _a.length) {
+        if (rangeSelector.buttons &&
+            rangeSelector.buttons.length) {
             rangeSelector.buttons.forEach(function (button) {
             rangeSelector.buttons.forEach(function (button) {
                 component.setRangeButtonAttrs(button);
                 component.setRangeButtonAttrs(button);
             });
             });
@@ -127,10 +130,15 @@ extend(RangeSelectorComponent.prototype, /** @lends Highcharts.RangeSelectorComp
     updateSelectorVisibility: function () {
     updateSelectorVisibility: function () {
         var chart = this.chart;
         var chart = this.chart;
         var rangeSelector = chart.rangeSelector;
         var rangeSelector = chart.rangeSelector;
-        var dropdown = rangeSelector === null || rangeSelector === void 0 ? void 0 : rangeSelector.dropdown;
-        var buttons = (rangeSelector === null || rangeSelector === void 0 ? void 0 : rangeSelector.buttons) || [];
+        var dropdown = (rangeSelector &&
+            rangeSelector.dropdown);
+        var buttons = (rangeSelector &&
+            rangeSelector.buttons ||
+            []);
         var hideFromAT = function (el) { return el.setAttribute('aria-hidden', true); };
         var hideFromAT = function (el) { return el.setAttribute('aria-hidden', true); };
-        if ((rangeSelector === null || rangeSelector === void 0 ? void 0 : rangeSelector.hasVisibleDropdown) && dropdown) {
+        if (rangeSelector &&
+            rangeSelector.hasVisibleDropdown &&
+            dropdown) {
             unhideChartElementFromAT(chart, dropdown);
             unhideChartElementFromAT(chart, dropdown);
             buttons.forEach(function (btn) { return hideFromAT(btn.element); });
             buttons.forEach(function (btn) { return hideFromAT(btn.element); });
         }
         }
@@ -146,9 +154,9 @@ extend(RangeSelectorComponent.prototype, /** @lends Highcharts.RangeSelectorComp
      * @private
      * @private
      */
      */
     setDropdownAttrs: function () {
     setDropdownAttrs: function () {
-        var _a;
         var chart = this.chart;
         var chart = this.chart;
-        var dropdown = (_a = chart.rangeSelector) === null || _a === void 0 ? void 0 : _a.dropdown;
+        var dropdown = (chart.rangeSelector &&
+            chart.rangeSelector.dropdown);
         if (dropdown) {
         if (dropdown) {
             var label = chart.langFormat('accessibility.rangeSelector.dropdownLabel', { rangeTitle: chart.options.lang.rangeSelectorZoom });
             var label = chart.langFormat('accessibility.rangeSelector.dropdownLabel', { rangeTitle: chart.options.lang.rangeSelectorZoom });
             dropdown.setAttribute('aria-label', label);
             dropdown.setAttribute('aria-label', label);
@@ -220,14 +228,15 @@ extend(RangeSelectorComponent.prototype, /** @lends Highcharts.RangeSelectorComp
      * @private
      * @private
      */
      */
     onInputKbdMove: function (direction) {
     onInputKbdMove: function (direction) {
-        var _a, _b;
         var chart = this.chart;
         var chart = this.chart;
         var rangeSel = chart.rangeSelector;
         var rangeSel = chart.rangeSelector;
         var newIx = chart.highlightedInputRangeIx = (chart.highlightedInputRangeIx || 0) + direction;
         var newIx = chart.highlightedInputRangeIx = (chart.highlightedInputRangeIx || 0) + direction;
         var newIxOutOfRange = newIx > 1 || newIx < 0;
         var newIxOutOfRange = newIx > 1 || newIx < 0;
         if (newIxOutOfRange) {
         if (newIxOutOfRange) {
-            (_a = chart.accessibility) === null || _a === void 0 ? void 0 : _a.keyboardNavigation.tabindexContainer.focus();
-            (_b = chart.accessibility) === null || _b === void 0 ? void 0 : _b.keyboardNavigation[direction < 0 ? 'prev' : 'next']();
+            if (chart.accessibility) {
+                chart.accessibility.keyboardNavigation.tabindexContainer.focus();
+                chart.accessibility.keyboardNavigation[direction < 0 ? 'prev' : 'next']();
+            }
         }
         }
         else if (rangeSel) {
         else if (rangeSel) {
             var svgEl = rangeSel[newIx ? 'maxDateBox' : 'minDateBox'];
             var svgEl = rangeSel[newIx ? 'maxDateBox' : 'minDateBox'];
@@ -247,9 +256,10 @@ extend(RangeSelectorComponent.prototype, /** @lends Highcharts.RangeSelectorComp
         var chart = this.chart;
         var chart = this.chart;
         var buttonIxToHighlight = direction > 0 ? 0 : 1;
         var buttonIxToHighlight = direction > 0 ? 0 : 1;
         var rangeSel = chart.rangeSelector;
         var rangeSel = chart.rangeSelector;
-        var svgEl = rangeSel === null || rangeSel === void 0 ? void 0 : rangeSel[buttonIxToHighlight ? 'maxDateBox' : 'minDateBox'];
-        var minInput = rangeSel === null || rangeSel === void 0 ? void 0 : rangeSel.minInput;
-        var maxInput = rangeSel === null || rangeSel === void 0 ? void 0 : rangeSel.maxInput;
+        var svgEl = (rangeSel &&
+            rangeSel[buttonIxToHighlight ? 'maxDateBox' : 'minDateBox']);
+        var minInput = (rangeSel && rangeSel.minInput);
+        var maxInput = (rangeSel && rangeSel.maxInput);
         var inputEl = buttonIxToHighlight ? maxInput : minInput;
         var inputEl = buttonIxToHighlight ? maxInput : minInput;
         chart.highlightedInputRangeIx = buttonIxToHighlight;
         chart.highlightedInputRangeIx = buttonIxToHighlight;
         if (svgEl && minInput && maxInput) {
         if (svgEl && minInput && maxInput) {
@@ -298,7 +308,7 @@ extend(RangeSelectorComponent.prototype, /** @lends Highcharts.RangeSelectorComp
         var _this = this;
         var _this = this;
         var chart = this.chart;
         var chart = this.chart;
         var rangeSelector = chart.rangeSelector;
         var rangeSelector = chart.rangeSelector;
-        var dropdown = rangeSelector === null || rangeSelector === void 0 ? void 0 : rangeSelector.dropdown;
+        var dropdown = (rangeSelector && rangeSelector.dropdown);
         if (rangeSelector && dropdown) {
         if (rangeSelector && dropdown) {
             chart.setFocusToElement(rangeSelector.buttonGroup, dropdown);
             chart.setFocusToElement(rangeSelector.buttonGroup, dropdown);
             if (this.removeDropdownKeydownHandler) {
             if (this.removeDropdownKeydownHandler) {
@@ -307,13 +317,14 @@ extend(RangeSelectorComponent.prototype, /** @lends Highcharts.RangeSelectorComp
             // Tab-press with dropdown focused does not propagate to chart
             // Tab-press with dropdown focused does not propagate to chart
             // automatically, so we manually catch and handle it when relevant.
             // automatically, so we manually catch and handle it when relevant.
             this.removeDropdownKeydownHandler = addEvent(dropdown, 'keydown', function (e) {
             this.removeDropdownKeydownHandler = addEvent(dropdown, 'keydown', function (e) {
-                var _a, _b;
                 var isTab = (e.which || e.keyCode) === _this.keyCodes.tab;
                 var isTab = (e.which || e.keyCode) === _this.keyCodes.tab;
                 if (isTab) {
                 if (isTab) {
                     e.preventDefault();
                     e.preventDefault();
                     e.stopPropagation();
                     e.stopPropagation();
-                    (_a = chart.accessibility) === null || _a === void 0 ? void 0 : _a.keyboardNavigation.tabindexContainer.focus();
-                    (_b = chart.accessibility) === null || _b === void 0 ? void 0 : _b.keyboardNavigation[e.shiftKey ? 'prev' : 'next']();
+                    if (chart.accessibility) {
+                        chart.accessibility.keyboardNavigation.tabindexContainer.focus();
+                        chart.accessibility.keyboardNavigation[e.shiftKey ? 'prev' : 'next']();
+                    }
                 }
                 }
             });
             });
         }
         }
@@ -343,12 +354,13 @@ extend(RangeSelectorComponent.prototype, /** @lends Highcharts.RangeSelectorComp
                 ]
                 ]
             ],
             ],
             validate: function () {
             validate: function () {
-                var _a, _b;
-                return !!((_b = (_a = chart.rangeSelector) === null || _a === void 0 ? void 0 : _a.buttons) === null || _b === void 0 ? void 0 : _b.length);
+                return !!(chart.rangeSelector &&
+                    chart.rangeSelector.buttons &&
+                    chart.rangeSelector.buttons.length);
             },
             },
             init: function (direction) {
             init: function (direction) {
                 var rangeSelector = chart.rangeSelector;
                 var rangeSelector = chart.rangeSelector;
-                if (rangeSelector === null || rangeSelector === void 0 ? void 0 : rangeSelector.hasVisibleDropdown) {
+                if (rangeSelector && rangeSelector.hasVisibleDropdown) {
                     component.initDropdownNav();
                     component.initDropdownNav();
                 }
                 }
                 else if (rangeSelector) {
                 else if (rangeSelector) {
@@ -401,14 +413,15 @@ extend(RangeSelectorComponent.prototype, /** @lends Highcharts.RangeSelectorComp
      * Remove component traces
      * Remove component traces
      */
      */
     destroy: function () {
     destroy: function () {
-        var _a;
         if (this.removeDropdownKeydownHandler) {
         if (this.removeDropdownKeydownHandler) {
             this.removeDropdownKeydownHandler();
             this.removeDropdownKeydownHandler();
         }
         }
         if (this.removeInputKeydownHandler) {
         if (this.removeInputKeydownHandler) {
             this.removeInputKeydownHandler();
             this.removeInputKeydownHandler();
         }
         }
-        (_a = this.announcer) === null || _a === void 0 ? void 0 : _a.destroy();
+        if (this.announcer) {
+            this.announcer.destroy();
+        }
     }
     }
 });
 });
 export default RangeSelectorComponent;
 export default RangeSelectorComponent;

+ 7 - 4
node_modules/highcharts/es-modules/Accessibility/Components/SeriesComponent/SeriesDescriber.js

@@ -14,11 +14,13 @@ import AnnotationsA11y from '../AnnotationsA11y.js';
 var getPointAnnotationTexts = AnnotationsA11y.getPointAnnotationTexts;
 var getPointAnnotationTexts = AnnotationsA11y.getPointAnnotationTexts;
 import ChartUtilities from '../../Utils/ChartUtilities.js';
 import ChartUtilities from '../../Utils/ChartUtilities.js';
 var getAxisDescription = ChartUtilities.getAxisDescription, getSeriesFirstPointElement = ChartUtilities.getSeriesFirstPointElement, getSeriesA11yElement = ChartUtilities.getSeriesA11yElement, unhideChartElementFromAT = ChartUtilities.unhideChartElementFromAT;
 var getAxisDescription = ChartUtilities.getAxisDescription, getSeriesFirstPointElement = ChartUtilities.getSeriesFirstPointElement, getSeriesA11yElement = ChartUtilities.getSeriesA11yElement, unhideChartElementFromAT = ChartUtilities.unhideChartElementFromAT;
+import F from '../../../Core/FormatUtilities.js';
+var format = F.format, numberFormat = F.numberFormat;
 import HTMLUtilities from '../../Utils/HTMLUtilities.js';
 import HTMLUtilities from '../../Utils/HTMLUtilities.js';
 var reverseChildNodes = HTMLUtilities.reverseChildNodes, stripHTMLTags = HTMLUtilities.stripHTMLTagsFromString;
 var reverseChildNodes = HTMLUtilities.reverseChildNodes, stripHTMLTags = HTMLUtilities.stripHTMLTagsFromString;
 import Tooltip from '../../../Core/Tooltip.js';
 import Tooltip from '../../../Core/Tooltip.js';
 import U from '../../../Core/Utilities.js';
 import U from '../../../Core/Utilities.js';
-var find = U.find, format = U.format, isNumber = U.isNumber, numberFormat = U.numberFormat, pick = U.pick, defined = U.defined;
+var find = U.find, isNumber = U.isNumber, pick = U.pick, defined = U.defined;
 /* eslint-disable valid-jsdoc */
 /* eslint-disable valid-jsdoc */
 /**
 /**
  * @private
  * @private
@@ -121,7 +123,7 @@ function shouldSetKeyboardNavPropsOnPoints(series) {
  * @return {boolean}
  * @return {boolean}
  */
  */
 function shouldDescribeSeriesElement(series) {
 function shouldDescribeSeriesElement(series) {
-    var chart = series.chart, chartOptions = chart.options.chart || {}, chartHas3d = chartOptions.options3d && chartOptions.options3d.enabled, hasMultipleSeries = chart.series.length > 1, describeSingleSeriesOption = chart.options.accessibility.series.describeSingleSeries, exposeAsGroupOnlyOption = (series.options.accessibility || {}).exposeAsGroupOnly, noDescribe3D = chartHas3d && hasMultipleSeries;
+    var chart = series.chart, chartOptions = chart.options.chart, chartHas3d = chartOptions.options3d && chartOptions.options3d.enabled, hasMultipleSeries = chart.series.length > 1, describeSingleSeriesOption = chart.options.accessibility.series.describeSingleSeries, exposeAsGroupOnlyOption = (series.options.accessibility || {}).exposeAsGroupOnly, noDescribe3D = chartHas3d && hasMultipleSeries;
     return !noDescribe3D && (hasMultipleSeries || describeSingleSeriesOption ||
     return !noDescribe3D && (hasMultipleSeries || describeSingleSeriesOption ||
         exposeAsGroupOnlyOption || hasMorePointsThanDescriptionThreshold(series));
         exposeAsGroupOnlyOption || hasMorePointsThanDescriptionThreshold(series));
 }
 }
@@ -305,10 +307,11 @@ function describePointsInSeries(series) {
     var setScreenReaderProps = shouldSetScreenReaderPropsOnPoints(series), setKeyboardProps = shouldSetKeyboardNavPropsOnPoints(series);
     var setScreenReaderProps = shouldSetScreenReaderPropsOnPoints(series), setKeyboardProps = shouldSetKeyboardNavPropsOnPoints(series);
     if (setScreenReaderProps || setKeyboardProps) {
     if (setScreenReaderProps || setKeyboardProps) {
         series.points.forEach(function (point) {
         series.points.forEach(function (point) {
-            var _a, _b;
             var pointEl = point.graphic && point.graphic.element ||
             var pointEl = point.graphic && point.graphic.element ||
                 shouldAddDummyPoint(point) && addDummyPointElement(point);
                 shouldAddDummyPoint(point) && addDummyPointElement(point);
-            var pointA11yDisabled = ((_b = (_a = point.options) === null || _a === void 0 ? void 0 : _a.accessibility) === null || _b === void 0 ? void 0 : _b.enabled) === false;
+            var pointA11yDisabled = (point.options &&
+                point.options.accessibility &&
+                point.options.accessibility.enabled === false);
             if (pointEl) {
             if (pointEl) {
                 // We always set tabindex, as long as we are setting props.
                 // We always set tabindex, as long as we are setting props.
                 // When setting tabindex, also remove default outline to
                 // When setting tabindex, also remove default outline to

+ 24 - 8
node_modules/highcharts/es-modules/Accessibility/Components/SeriesComponent/SeriesKeyboardNavigation.js

@@ -15,6 +15,8 @@ import Point from '../../../Core/Series/Point.js';
 import Series from '../../../Core/Series/Series.js';
 import Series from '../../../Core/Series/Series.js';
 import SeriesRegistry from '../../../Core/Series/SeriesRegistry.js';
 import SeriesRegistry from '../../../Core/Series/SeriesRegistry.js';
 var seriesTypes = SeriesRegistry.seriesTypes;
 var seriesTypes = SeriesRegistry.seriesTypes;
+import H from '../../../Core/Globals.js';
+var doc = H.doc;
 import U from '../../../Core/Utilities.js';
 import U from '../../../Core/Utilities.js';
 var defined = U.defined, extend = U.extend, fireEvent = U.fireEvent;
 var defined = U.defined, extend = U.extend, fireEvent = U.fireEvent;
 import KeyboardNavigationHandler from '../../KeyboardNavigationHandler.js';
 import KeyboardNavigationHandler from '../../KeyboardNavigationHandler.js';
@@ -93,9 +95,9 @@ function isSkipSeries(series) {
  * @return {boolean|number|undefined}
  * @return {boolean|number|undefined}
  */
  */
 function isSkipPoint(point) {
 function isSkipPoint(point) {
-    var _a;
     var a11yOptions = point.series.chart.options.accessibility;
     var a11yOptions = point.series.chart.options.accessibility;
-    var pointA11yDisabled = ((_a = point.options.accessibility) === null || _a === void 0 ? void 0 : _a.enabled) === false;
+    var pointA11yDisabled = (point.options.accessibility &&
+        point.options.accessibility.enabled === false);
     return point.isNull &&
     return point.isNull &&
         a11yOptions.keyboardNavigation.seriesNavigation.skipNullPoints ||
         a11yOptions.keyboardNavigation.seriesNavigation.skipNullPoints ||
         point.visible === false ||
         point.visible === false ||
@@ -425,6 +427,18 @@ extend(SeriesKeyboardNavigation.prototype, /** @lends Highcharts.SeriesKeyboardN
                 keyboardNavigation.onDrillupAll();
                 keyboardNavigation.onDrillupAll();
             }, 10);
             }, 10);
         });
         });
+        // Heatmaps et al. alter z-index in setState, causing elements
+        // to lose focus
+        e.addEvent(Point, 'afterSetState', function () {
+            var point = this;
+            var pointEl = point.graphic && point.graphic.element;
+            if (chart.highlightedPoint === point &&
+                doc.activeElement !== pointEl &&
+                pointEl &&
+                pointEl.focus) {
+                pointEl.focus();
+            }
+        });
     },
     },
     onDrillupAll: function () {
     onDrillupAll: function () {
         // After drillup we want to find the point that was drilled down to and
         // After drillup we want to find the point that was drilled down to and
@@ -460,9 +474,8 @@ extend(SeriesKeyboardNavigation.prototype, /** @lends Highcharts.SeriesKeyboardN
                 [[keys.enter, keys.space], function (keyCode, event) {
                 [[keys.enter, keys.space], function (keyCode, event) {
                         var point = chart.highlightedPoint;
                         var point = chart.highlightedPoint;
                         if (point) {
                         if (point) {
-                            fireEvent(point.series, 'click', extend(event, {
-                                point: point
-                            }));
+                            event.point = point;
+                            fireEvent(point.series, 'click', event);
                             point.firePointEvent('click');
                             point.firePointEvent('click');
                         }
                         }
                         return this.response.success;
                         return this.response.success;
@@ -530,11 +543,14 @@ extend(SeriesKeyboardNavigation.prototype, /** @lends Highcharts.SeriesKeyboardN
      * @private
      * @private
      */
      */
     onHandlerTerminate: function () {
     onHandlerTerminate: function () {
-        var _a, _b;
         var chart = this.chart;
         var chart = this.chart;
         var curPoint = chart.highlightedPoint;
         var curPoint = chart.highlightedPoint;
-        (_a = chart.tooltip) === null || _a === void 0 ? void 0 : _a.hide(0);
-        (_b = curPoint === null || curPoint === void 0 ? void 0 : curPoint.onMouseOut) === null || _b === void 0 ? void 0 : _b.call(curPoint);
+        if (chart.tooltip) {
+            chart.tooltip.hide(0);
+        }
+        if (chart.highlightedPoint && chart.highlightedPoint.onMouseOut) {
+            chart.highlightedPoint.onMouseOut();
+        }
         delete chart.highlightedPoint;
         delete chart.highlightedPoint;
     },
     },
     /**
     /**

+ 10 - 9
node_modules/highcharts/es-modules/Accessibility/FocusBorder.js

@@ -32,8 +32,9 @@ function addDestroyFocusBorderHook(el) {
     }
     }
     var origDestroy = el.destroy;
     var origDestroy = el.destroy;
     el.destroy = function () {
     el.destroy = function () {
-        var _a, _b;
-        (_b = (_a = el.focusBorder) === null || _a === void 0 ? void 0 : _a.destroy) === null || _b === void 0 ? void 0 : _b.call(_a);
+        if (el.focusBorder && el.focusBorder.destroy) {
+            el.focusBorder.destroy();
+        }
         return origDestroy.apply(el, arguments);
         return origDestroy.apply(el, arguments);
     };
     };
     el.focusBorderDestroyHook = origDestroy;
     el.focusBorderDestroyHook = origDestroy;
@@ -110,9 +111,9 @@ extend(SVGElement.prototype, {
      *
      *
      * @param {number} margin
      * @param {number} margin
      *
      *
-     * @param {Highcharts.CSSObject} style
+     * @param {SVGAttributes} attribs
      */
      */
-    addFocusBorder: function (margin, style) {
+    addFocusBorder: function (margin, attribs) {
         // Allow updating by just adding new border
         // Allow updating by just adding new border
         if (this.focusBorder) {
         if (this.focusBorder) {
             this.removeFocusBorder();
             this.removeFocusBorder();
@@ -176,7 +177,7 @@ extend(SVGElement.prototype, {
                 }
                 }
             }
             }
         }
         }
-        this.focusBorder = this.renderer.rect(borderPosX, borderPosY, borderWidth, borderHeight, parseInt((style && style.borderRadius || 0).toString(), 10))
+        this.focusBorder = this.renderer.rect(borderPosX, borderPosY, borderWidth, borderHeight, parseInt((attribs && attribs.r || 0).toString(), 10))
             .addClass('highcharts-focus-border')
             .addClass('highcharts-focus-border')
             .attr({
             .attr({
             zIndex: 99
             zIndex: 99
@@ -184,11 +185,11 @@ extend(SVGElement.prototype, {
             .add(this.parentGroup);
             .add(this.parentGroup);
         if (!this.renderer.styledMode) {
         if (!this.renderer.styledMode) {
             this.focusBorder.attr({
             this.focusBorder.attr({
-                stroke: style && style.stroke,
-                'stroke-width': style && style.strokeWidth
+                stroke: attribs && attribs.stroke,
+                'stroke-width': attribs && attribs.strokeWidth
             });
             });
         }
         }
-        addUpdateFocusBorderHooks(this, margin, style);
+        addUpdateFocusBorderHooks(this, margin, attribs);
         addDestroyFocusBorderHook(this);
         addDestroyFocusBorderHook(this);
     },
     },
     /**
     /**
@@ -218,7 +219,7 @@ H.Chart.prototype.renderFocusBorder = function () {
             focusElement.addFocusBorder(focusBorderOptions.margin, {
             focusElement.addFocusBorder(focusBorderOptions.margin, {
                 stroke: focusBorderOptions.style.color,
                 stroke: focusBorderOptions.style.color,
                 strokeWidth: focusBorderOptions.style.lineWidth,
                 strokeWidth: focusBorderOptions.style.lineWidth,
-                borderRadius: focusBorderOptions.style.borderRadius
+                r: focusBorderOptions.style.borderRadius
             });
             });
         }
         }
     }
     }

+ 6 - 4
node_modules/highcharts/es-modules/Accessibility/KeyboardNavigation.js

@@ -130,14 +130,14 @@ KeyboardNavigation.prototype = {
      * @param {global.FocusEvent} e Browser focus event.
      * @param {global.FocusEvent} e Browser focus event.
      */
      */
     onFocus: function (e) {
     onFocus: function (e) {
-        var _a;
         var chart = this.chart;
         var chart = this.chart;
         var focusComesFromChart = (e.relatedTarget &&
         var focusComesFromChart = (e.relatedTarget &&
             chart.container.contains(e.relatedTarget));
             chart.container.contains(e.relatedTarget));
         // Init keyboard nav if tabbing into chart
         // Init keyboard nav if tabbing into chart
-        if (!this.isClickingChart && !focusComesFromChart) {
-            (_a = this.modules[0]) === null || _a === void 0 ? void 0 : _a.init(1);
+        if (!this.exiting && !this.isClickingChart && !focusComesFromChart && this.modules[0]) {
+            this.modules[0].init(1);
         }
         }
+        this.exiting = false;
     },
     },
     /**
     /**
      * Reset chart navigation state if we click outside the chart and it's
      * Reset chart navigation state if we click outside the chart and it's
@@ -169,6 +169,8 @@ KeyboardNavigation.prototype = {
             this.modules[this.currentModuleIx];
             this.modules[this.currentModuleIx];
         // Used for resetting nav state when clicking outside chart
         // Used for resetting nav state when clicking outside chart
         this.keyboardReset = false;
         this.keyboardReset = false;
+        // Used for sending focus out of the chart by the modules.
+        this.exiting = false;
         // If there is a nav module for the current index, run it.
         // If there is a nav module for the current index, run it.
         // Otherwise, we are outside of the chart in some direction.
         // Otherwise, we are outside of the chart in some direction.
         if (curNavModule) {
         if (curNavModule) {
@@ -233,8 +235,8 @@ KeyboardNavigation.prototype = {
         // No module
         // No module
         this.currentModuleIx = 0; // Reset counter
         this.currentModuleIx = 0; // Reset counter
         // Set focus to chart or exit anchor depending on direction
         // Set focus to chart or exit anchor depending on direction
+        this.exiting = true;
         if (direction > 0) {
         if (direction > 0) {
-            this.exiting = true;
             this.exitAnchor.focus();
             this.exitAnchor.focus();
         }
         }
         else {
         else {

+ 1 - 1
node_modules/highcharts/es-modules/Accessibility/Options/DeprecatedOptions.js

@@ -107,7 +107,7 @@ function deprecateFromOptionsMap(chart, rootOldAsArray, rootNewAsArray, mapToNew
  * @private
  * @private
  */
  */
 function copyDeprecatedChartOptions(chart) {
 function copyDeprecatedChartOptions(chart) {
-    var chartOptions = chart.options.chart || {}, a11yOptions = chart.options.accessibility || {};
+    var chartOptions = chart.options.chart, a11yOptions = chart.options.accessibility || {};
     ['description', 'typeDescription'].forEach(function (prop) {
     ['description', 'typeDescription'].forEach(function (prop) {
         var _a;
         var _a;
         if (chartOptions[prop]) {
         if (chartOptions[prop]) {

+ 8 - 5
node_modules/highcharts/es-modules/Accessibility/Options/Options.js

@@ -180,7 +180,7 @@ var options = {
              * Date format to use to describe range of datetime axes.
              * Date format to use to describe range of datetime axes.
              *
              *
              * For an overview of the replacement codes, see
              * For an overview of the replacement codes, see
-             * [dateFormat](/class-reference/Highcharts#dateFormat).
+             * [dateFormat](/class-reference/Highcharts#.dateFormat).
              *
              *
              * @see [point.dateFormat](#accessibility.point.dateFormat)
              * @see [point.dateFormat](#accessibility.point.dateFormat)
              *
              *
@@ -240,7 +240,7 @@ var options = {
              * Defaults to the same format as in tooltip.
              * Defaults to the same format as in tooltip.
              *
              *
              * For an overview of the replacement codes, see
              * For an overview of the replacement codes, see
-             * [dateFormat](/class-reference/Highcharts#dateFormat).
+             * [dateFormat](/class-reference/Highcharts#.dateFormat).
              *
              *
              * @see [dateFormatter](#accessibility.point.dateFormatter)
              * @see [dateFormatter](#accessibility.point.dateFormatter)
              *
              *
@@ -253,7 +253,7 @@ var options = {
              * points on datetime axes when describing them to screen reader
              * points on datetime axes when describing them to screen reader
              * users. Receives one argument, `point`, referring to the point
              * users. Receives one argument, `point`, referring to the point
              * to describe. Should return a date format string compatible with
              * to describe. Should return a date format string compatible with
-             * [dateFormat](/class-reference/Highcharts#dateFormat).
+             * [dateFormat](/class-reference/Highcharts#.dateFormat).
              *
              *
              * @see [dateFormat](#accessibility.point.dateFormat)
              * @see [dateFormat](#accessibility.point.dateFormat)
              *
              *
@@ -507,8 +507,11 @@ var options = {
             /**
             /**
              * Order of tab navigation in the chart. Determines which elements
              * Order of tab navigation in the chart. Determines which elements
              * are tabbed to first. Available elements are: `series`, `zoom`,
              * are tabbed to first. Available elements are: `series`, `zoom`,
-             * `rangeSelector`, `chartMenu`, `legend`. In addition, any custom
-             * components can be added here.
+             * `rangeSelector`, `chartMenu`, `legend` and `container`. In
+             * addition, any custom components can be added here. Adding
+             * `container` first in order will make the keyboard focus stop on
+             * the chart container first, requiring the user to tab again to
+             * enter the chart.
              *
              *
              * @type  {Array<string>}
              * @type  {Array<string>}
              * @since 7.1.0
              * @since 7.1.0

+ 10 - 7
node_modules/highcharts/es-modules/Accessibility/Utils/ChartUtilities.js

@@ -110,9 +110,11 @@ function getAxisTimeLengthDesc(axis) {
  * @return {string}
  * @return {string}
  */
  */
 function getAxisFromToDescription(axis) {
 function getAxisFromToDescription(axis) {
-    var _a, _b;
     var chart = axis.chart;
     var chart = axis.chart;
-    var dateRangeFormat = ((_b = (_a = chart.options) === null || _a === void 0 ? void 0 : _a.accessibility) === null || _b === void 0 ? void 0 : _b.screenReaderSection.axisRangeDateFormat) || '';
+    var dateRangeFormat = (chart.options &&
+        chart.options.accessibility &&
+        chart.options.accessibility.screenReaderSection.axisRangeDateFormat ||
+        '');
     var format = function (axisKey) {
     var format = function (axisKey) {
         return axis.dateTime ? chart.time.dateFormat(dateRangeFormat, axis[axisKey]) : axis[axisKey];
         return axis.dateTime ? chart.time.dateFormat(dateRangeFormat, axis[axisKey]) : axis[axisKey];
     };
     };
@@ -132,10 +134,11 @@ function getAxisFromToDescription(axis) {
  * The DOM element for the point.
  * The DOM element for the point.
  */
  */
 function getSeriesFirstPointElement(series) {
 function getSeriesFirstPointElement(series) {
-    var _a, _b;
-    if ((_a = series.points) === null || _a === void 0 ? void 0 : _a.length) {
+    if (series.points && series.points.length) {
         var firstPointWithGraphic = find(series.points, function (p) { return !!p.graphic; });
         var firstPointWithGraphic = find(series.points, function (p) { return !!p.graphic; });
-        return (_b = firstPointWithGraphic === null || firstPointWithGraphic === void 0 ? void 0 : firstPointWithGraphic.graphic) === null || _b === void 0 ? void 0 : _b.element;
+        return (firstPointWithGraphic &&
+            firstPointWithGraphic.graphic &&
+            firstPointWithGraphic.graphic.element);
     }
     }
 }
 }
 /**
 /**
@@ -247,8 +250,8 @@ function getRelativePointAxisPosition(axis, point) {
 function scrollToPoint(point) {
 function scrollToPoint(point) {
     var xAxis = point.series.xAxis;
     var xAxis = point.series.xAxis;
     var yAxis = point.series.yAxis;
     var yAxis = point.series.yAxis;
-    var axis = (xAxis === null || xAxis === void 0 ? void 0 : xAxis.scrollbar) ? xAxis : yAxis;
-    var scrollbar = axis === null || axis === void 0 ? void 0 : axis.scrollbar;
+    var axis = (xAxis && xAxis.scrollbar ? xAxis : yAxis);
+    var scrollbar = (axis && axis.scrollbar);
     if (scrollbar && defined(scrollbar.to) && defined(scrollbar.from)) {
     if (scrollbar && defined(scrollbar.to) && defined(scrollbar.from)) {
         var range = scrollbar.to - scrollbar.from;
         var range = scrollbar.to - scrollbar.from;
         var pos = getRelativePointAxisPosition(axis, point);
         var pos = getRelativePointAxisPosition(axis, point);

+ 12 - 13
node_modules/highcharts/es-modules/Core/Animation/AnimationUtilities.js

@@ -9,7 +9,6 @@
  * */
  * */
 'use strict';
 'use strict';
 import Fx from './Fx.js';
 import Fx from './Fx.js';
-import H from '../Globals.js';
 import U from '../Utilities.js';
 import U from '../Utilities.js';
 var defined = U.defined, getStyle = U.getStyle, isArray = U.isArray, isNumber = U.isNumber, isObject = U.isObject, merge = U.merge, objectEach = U.objectEach, pick = U.pick;
 var defined = U.defined, getStyle = U.getStyle, isArray = U.isArray, isNumber = U.isNumber, isObject = U.isObject, merge = U.merge, objectEach = U.objectEach, pick = U.pick;
 /**
 /**
@@ -28,9 +27,9 @@ var defined = U.defined, getStyle = U.getStyle, isArray = U.isArray, isNumber =
  * This function always relates to a chart, and sets a property on the renderer,
  * This function always relates to a chart, and sets a property on the renderer,
  * so it should be moved to the SVGRenderer.
  * so it should be moved to the SVGRenderer.
  */
  */
-var setAnimation = H.setAnimation = function setAnimation(animation, chart) {
+function setAnimation(animation, chart) {
     chart.renderer.globalAnimation = pick(animation, chart.options.chart.animation, true);
     chart.renderer.globalAnimation = pick(animation, chart.options.chart.animation, true);
-};
+}
 /**
 /**
  * Get the animation in object form, where a disabled animation is always
  * Get the animation in object form, where a disabled animation is always
  * returned as `{ duration: 0 }`.
  * returned as `{ duration: 0 }`.
@@ -44,11 +43,11 @@ var setAnimation = H.setAnimation = function setAnimation(animation, chart) {
  * @return {Highcharts.AnimationOptionsObject}
  * @return {Highcharts.AnimationOptionsObject}
  *         An object with at least a duration property.
  *         An object with at least a duration property.
  */
  */
-var animObject = H.animObject = function animObject(animation) {
+function animObject(animation) {
     return isObject(animation) ?
     return isObject(animation) ?
         merge({ duration: 500, defer: 0 }, animation) :
         merge({ duration: 500, defer: 0 }, animation) :
         { duration: animation ? 500 : 0, defer: 0 };
         { duration: animation ? 500 : 0, defer: 0 };
-};
+}
 /**
 /**
  * Get the defer as a number value from series animation options.
  * Get the defer as a number value from series animation options.
  *
  *
@@ -67,7 +66,7 @@ var animObject = H.animObject = function animObject(animation) {
  * @return {number}
  * @return {number}
  *        The numeric value.
  *        The numeric value.
  */
  */
-var getDeferredAnimation = H.getDeferredAnimation = function (chart, animation, series) {
+function getDeferredAnimation(chart, animation, series) {
     var labelAnimation = animObject(animation);
     var labelAnimation = animObject(animation);
     var s = series ? [series] : chart.series;
     var s = series ? [series] : chart.series;
     var defer = 0;
     var defer = 0;
@@ -88,7 +87,7 @@ var getDeferredAnimation = H.getDeferredAnimation = function (chart, animation,
         duration: Math.min(defer, duration)
         duration: Math.min(defer, duration)
     };
     };
     return anim;
     return anim;
-};
+}
 /**
 /**
  * The global animate method, which uses Fx to create individual animators.
  * The global animate method, which uses Fx to create individual animators.
  *
  *
@@ -107,7 +106,7 @@ var getDeferredAnimation = H.getDeferredAnimation = function (chart, animation,
  *
  *
  * @return {void}
  * @return {void}
  */
  */
-var animate = function (el, params, opt) {
+function animate(el, params, opt) {
     var start, unit = '', end, fx, args;
     var start, unit = '', end, fx, args;
     if (!isObject(opt)) { // Number or undefined/null
     if (!isObject(opt)) { // Number or undefined/null
         args = arguments;
         args = arguments;
@@ -128,7 +127,7 @@ var animate = function (el, params, opt) {
         // Stop current running animation of this property
         // Stop current running animation of this property
         stop(el, prop);
         stop(el, prop);
         fx = new Fx(el, opt, prop);
         fx = new Fx(el, opt, prop);
-        end = null;
+        end = void 0;
         if (prop === 'd' && isArray(params.d)) {
         if (prop === 'd' && isArray(params.d)) {
             fx.paths = fx.initPath(el, el.pathArray, params.d);
             fx.paths = fx.initPath(el, el.pathArray, params.d);
             fx.toD = params.d;
             fx.toD = params.d;
@@ -147,12 +146,12 @@ var animate = function (el, params, opt) {
         if (!end) {
         if (!end) {
             end = val;
             end = val;
         }
         }
-        if (end && end.match && end.match('px')) {
+        if (typeof end === 'string' && end.match('px')) {
             end = end.replace(/px/g, ''); // #4351
             end = end.replace(/px/g, ''); // #4351
         }
         }
         fx.run(start, end, unit);
         fx.run(start, end, unit);
     });
     });
-};
+}
 /**
 /**
  * Stop running animation.
  * Stop running animation.
  *
  *
@@ -174,7 +173,7 @@ var animate = function (el, params, opt) {
  * improvement in all cases where we stop the animation from .attr. Instead of
  * improvement in all cases where we stop the animation from .attr. Instead of
  * stopping everything, we can just stop the actual attributes we're setting.
  * stopping everything, we can just stop the actual attributes we're setting.
  */
  */
-var stop = H.stop = function (el, prop) {
+function stop(el, prop) {
     var i = Fx.timers.length;
     var i = Fx.timers.length;
     // Remove timers related to this element (#4519)
     // Remove timers related to this element (#4519)
     while (i--) {
     while (i--) {
@@ -182,7 +181,7 @@ var stop = H.stop = function (el, prop) {
             Fx.timers[i].stopped = true; // #4667
             Fx.timers[i].stopped = true; // #4667
         }
         }
     }
     }
-};
+}
 var animationExports = {
 var animationExports = {
     animate: animate,
     animate: animate,
     animObject: animObject,
     animObject: animObject,

+ 16 - 18
node_modules/highcharts/es-modules/Core/Animation/Fx.js

@@ -8,6 +8,8 @@
  *
  *
  * */
  * */
 'use strict';
 'use strict';
+import Color from '../Color/Color.js';
+var color = Color.parse;
 import H from '../Globals.js';
 import H from '../Globals.js';
 var win = H.win;
 var win = H.win;
 import U from '../Utilities.js';
 import U from '../Utilities.js';
@@ -19,7 +21,7 @@ var isNumber = U.isNumber, objectEach = U.objectEach;
  * through {@link SVGElement#animate}.
  * through {@link SVGElement#animate}.
  *
  *
  * @example
  * @example
- * var rect = renderer.rect(0, 0, 10, 10).add();
+ * let rect = renderer.rect(0, 0, 10, 10).add();
  * rect.animate({ width: 100 });
  * rect.animate({ width: 100 });
  *
  *
  * @private
  * @private
@@ -62,7 +64,8 @@ var Fx = /** @class */ (function () {
      * @return {void}
      * @return {void}
      */
      */
     Fx.prototype.dSetter = function () {
     Fx.prototype.dSetter = function () {
-        var paths = this.paths, start = paths && paths[0], end = paths && paths[1], path = [], now = this.now || 0;
+        var paths = this.paths, start = paths && paths[0], end = paths && paths[1], now = this.now || 0;
+        var path = [];
         // Land on the final path without adjustment points appended in the ends
         // Land on the final path without adjustment points appended in the ends
         if (now === 1 || !start || !end) {
         if (now === 1 || !start || !end) {
             path = this.toD || [];
             path = this.toD || [];
@@ -191,7 +194,8 @@ var Fx = /** @class */ (function () {
      *         Returns `true` if animation continues.
      *         Returns `true` if animation continues.
      */
      */
     Fx.prototype.step = function (gotoEnd) {
     Fx.prototype.step = function (gotoEnd) {
-        var t = +new Date(), ret, done, options = this.options, elem = this.elem, complete = options.complete, duration = options.duration, curAnim = options.curAnim;
+        var t = +new Date(), options = this.options, elem = this.elem, complete = options.complete, duration = options.duration, curAnim = options.curAnim;
+        var ret, done;
         if (elem.attr && !elem.element) { // #2616, element is destroyed
         if (elem.attr && !elem.element) { // #2616, element is destroyed
             ret = false;
             ret = false;
         }
         }
@@ -238,9 +242,9 @@ var Fx = /** @class */ (function () {
      *         they can be animated in parallel.
      *         they can be animated in parallel.
      */
      */
     Fx.prototype.initPath = function (elem, fromD, toD) {
     Fx.prototype.initPath = function (elem, fromD, toD) {
-        var shift, startX = elem.startX, endX = elem.endX, fullLength, i, start = fromD && fromD.slice(), // copy
-        end = toD.slice(), // copy
-        isArea = elem.isArea, positionFactor = isArea ? 2 : 1, reverse;
+        var startX = elem.startX, endX = elem.endX, end = toD.slice(), // copy
+        isArea = elem.isArea, positionFactor = isArea ? 2 : 1;
+        var shift, fullLength, i, reverse, start = fromD && fromD.slice(); // copy
         if (!start) {
         if (!start) {
             return [end, end];
             return [end, end];
         }
         }
@@ -276,7 +280,8 @@ var Fx = /** @class */ (function () {
                 // For areas, the bottom path goes back again to the left, so we
                 // For areas, the bottom path goes back again to the left, so we
                 // need to append a copy of the last point.
                 // need to append a copy of the last point.
                 if (isArea) {
                 if (isArea) {
-                    arr.push(arr[arr.length - 1]);
+                    var z = arr.pop();
+                    arr.push(arr[arr.length - 1], z); // append point and the Z
                 }
                 }
             }
             }
         }
         }
@@ -295,7 +300,7 @@ var Fx = /** @class */ (function () {
                 // causing the middle two points to be sliced out, since an area
                 // causing the middle two points to be sliced out, since an area
                 // path starts at left, follows the upper path then turns and
                 // path starts at left, follows the upper path then turns and
                 // follows the bottom back.
                 // follows the bottom back.
-                var segmentToAdd = arr[arr.length / positionFactor - 1].slice();
+                var segmentToAdd = arr[Math.floor(arr.length / positionFactor) - 1].slice();
                 // Disable the first control point of curve segments
                 // Disable the first control point of curve segments
                 if (segmentToAdd[0] === 'C') {
                 if (segmentToAdd[0] === 'C') {
                     segmentToAdd[1] = segmentToAdd[5];
                     segmentToAdd[1] = segmentToAdd[5];
@@ -305,14 +310,14 @@ var Fx = /** @class */ (function () {
                     arr.push(segmentToAdd);
                     arr.push(segmentToAdd);
                 }
                 }
                 else {
                 else {
-                    var lowerSegmentToAdd = arr[arr.length / positionFactor].slice();
+                    var lowerSegmentToAdd = arr[Math.floor(arr.length / positionFactor)].slice();
                     arr.splice(arr.length / 2, 0, segmentToAdd, lowerSegmentToAdd);
                     arr.splice(arr.length / 2, 0, segmentToAdd, lowerSegmentToAdd);
                 }
                 }
             }
             }
         }
         }
         // For sideways animation, find out how much we need to shift to get the
         // For sideways animation, find out how much we need to shift to get the
         // start path Xs to match the end path Xs.
         // start path Xs to match the end path Xs.
-        if (startX && endX) {
+        if (startX && endX && endX.length) {
             for (i = 0; i < startX.length; i++) {
             for (i = 0; i < startX.length; i++) {
                 // Moving left, new points coming in on right
                 // Moving left, new points coming in on right
                 if (startX[i] === endX[0]) {
                 if (startX[i] === endX[0]) {
@@ -370,7 +375,7 @@ var Fx = /** @class */ (function () {
      * @return {void}
      * @return {void}
      */
      */
     Fx.prototype.strokeSetter = function () {
     Fx.prototype.strokeSetter = function () {
-        this.elem.attr(this.prop, H.color(this.start).tweenTo(H.color(this.end), this.pos), null, true);
+        this.elem.attr(this.prop, color(this.start).tweenTo(color(this.end), this.pos), null, true);
     };
     };
     /* *
     /* *
      *
      *
@@ -380,13 +385,6 @@ var Fx = /** @class */ (function () {
     Fx.timers = [];
     Fx.timers = [];
     return Fx;
     return Fx;
 }());
 }());
-/* *
- *
- *  Compatibility
- *
- * */
-H.Fx = Fx;
-H.timers = Fx.timers;
 /* *
 /* *
  *
  *
  *  Default Export
  *  Default Export

Разница между файлами не показана из-за своего большого размера
+ 195 - 207
node_modules/highcharts/es-modules/Core/Axis/Axis.js


+ 5 - 5
node_modules/highcharts/es-modules/Core/Axis/Axis3D.js

@@ -442,12 +442,12 @@ var Axis3D = /** @class */ (function () {
             gridGroup &&
             gridGroup &&
             tick &&
             tick &&
             tick.label) {
             tick.label) {
-            var firstGridLine = gridGroup.element.childNodes[0].getBBox(), frame3DLeft = chart.frameShapes.left.getBBox(), options3d = chart.options.chart.options3d, origin = {
+            var firstGridLine = gridGroup.element.childNodes[0].getBBox(), frame3DLeft = chart.frameShapes.left.getBBox(), options3d = chart.options.chart.options3d, origin_1 = {
                 x: chart.plotWidth / 2,
                 x: chart.plotWidth / 2,
                 y: chart.plotHeight / 2,
                 y: chart.plotHeight / 2,
                 z: options3d.depth / 2,
                 z: options3d.depth / 2,
                 vd: pick(options3d.depth, 1) * pick(options3d.viewDistance, 0)
                 vd: pick(options3d.depth, 1) * pick(options3d.viewDistance, 0)
-            }, labelPos, prevLabelPos, nextLabelPos, slotWidth, tickId = tick.pos, prevTick = ticks[tickId - 1], nextTick = ticks[tickId + 1];
+            }, labelPos = void 0, prevLabelPos = void 0, nextLabelPos = void 0, slotWidth = void 0, tickId = tick.pos, prevTick = ticks[tickId - 1], nextTick = ticks[tickId + 1];
             // Check whether the tick is not the first one and previous tick
             // Check whether the tick is not the first one and previous tick
             // exists, then calculate position of previous label.
             // exists, then calculate position of previous label.
             if (tickId !== 0 && prevTick && prevTick.label && prevTick.label.xy) {
             if (tickId !== 0 && prevTick && prevTick.label && prevTick.label.xy) {
@@ -455,7 +455,7 @@ var Axis3D = /** @class */ (function () {
                     x: prevTick.label.xy.x,
                     x: prevTick.label.xy.x,
                     y: prevTick.label.xy.y,
                     y: prevTick.label.xy.y,
                     z: null
                     z: null
-                }, origin, origin.vd);
+                }, origin_1, origin_1.vd);
             }
             }
             // If next label position is defined, then recalculate its position
             // If next label position is defined, then recalculate its position
             // basing on the perspective.
             // basing on the perspective.
@@ -464,14 +464,14 @@ var Axis3D = /** @class */ (function () {
                     x: nextTick.label.xy.x,
                     x: nextTick.label.xy.x,
                     y: nextTick.label.xy.y,
                     y: nextTick.label.xy.y,
                     z: null
                     z: null
-                }, origin, origin.vd);
+                }, origin_1, origin_1.vd);
             }
             }
             labelPos = {
             labelPos = {
                 x: tick.label.xy.x,
                 x: tick.label.xy.x,
                 y: tick.label.xy.y,
                 y: tick.label.xy.y,
                 z: null
                 z: null
             };
             };
-            labelPos = perspective3D(labelPos, origin, origin.vd);
+            labelPos = perspective3D(labelPos, origin_1, origin_1.vd);
             // If tick is first one, check whether next label position is
             // If tick is first one, check whether next label position is
             // already calculated, then return difference between the first and
             // already calculated, then return difference between the first and
             // the second label. If there is no next label position calculated,
             // the second label. If there is no next label position calculated,

+ 72 - 75
node_modules/highcharts/es-modules/Core/Axis/BrokenAxis.js

@@ -56,7 +56,7 @@ var BrokenAxisAdditions = /** @class */ (function () {
         var axis = this;
         var axis = this;
         var brokenAxis = axis.brokenAxis;
         var brokenAxis = axis.brokenAxis;
         var breakArray = brokenAxis && brokenAxis.breakArray;
         var breakArray = brokenAxis && brokenAxis.breakArray;
-        if (!breakArray) {
+        if (!breakArray || !isNumber(val)) {
             return val;
             return val;
         }
         }
         var nval = val, brk, i;
         var nval = val, brk, i;
@@ -81,7 +81,7 @@ var BrokenAxisAdditions = /** @class */ (function () {
         var axis = this;
         var axis = this;
         var brokenAxis = axis.brokenAxis;
         var brokenAxis = axis.brokenAxis;
         var breakArray = brokenAxis && brokenAxis.breakArray;
         var breakArray = brokenAxis && brokenAxis.breakArray;
-        if (!breakArray) {
+        if (!breakArray || !isNumber(val)) {
             return val;
             return val;
         }
         }
         var nval = val, brk, i;
         var nval = val, brk, i;
@@ -130,8 +130,8 @@ var BrokenAxisAdditions = /** @class */ (function () {
     BrokenAxisAdditions.prototype.isInAnyBreak = function (val, testKeep) {
     BrokenAxisAdditions.prototype.isInAnyBreak = function (val, testKeep) {
         var brokenAxis = this;
         var brokenAxis = this;
         var axis = brokenAxis.axis;
         var axis = brokenAxis.axis;
-        var breaks = axis.options.breaks, i = breaks && breaks.length, inbrk, keep, ret;
-        if (i) {
+        var breaks = axis.options.breaks || [], i = breaks.length, inbrk, keep, ret;
+        if (i && isNumber(val)) {
             while (i--) {
             while (i--) {
                 if (BrokenAxisAdditions.isInBreak(breaks[i], val)) {
                 if (BrokenAxisAdditions.isInBreak(breaks[i], val)) {
                     inbrk = true;
                     inbrk = true;
@@ -189,11 +189,11 @@ var BrokenAxisAdditions = /** @class */ (function () {
                 // If trying to set extremes inside a break, extend min to
                 // If trying to set extremes inside a break, extend min to
                 // after, and max to before the break ( #3857 )
                 // after, and max to before the break ( #3857 )
                 if (brokenAxis.hasBreaks) {
                 if (brokenAxis.hasBreaks) {
-                    var axisBreak, breaks = this.options.breaks;
-                    while ((axisBreak = brokenAxis.findBreakAt(newMin, breaks))) {
+                    var axisBreak = void 0, breaks_1 = this.options.breaks;
+                    while ((axisBreak = brokenAxis.findBreakAt(newMin, breaks_1))) {
                         newMin = axisBreak.to;
                         newMin = axisBreak.to;
                     }
                     }
-                    while ((axisBreak = brokenAxis.findBreakAt(newMax, breaks))) {
+                    while ((axisBreak = brokenAxis.findBreakAt(newMax, breaks_1))) {
                         newMax = axisBreak.from;
                         newMax = axisBreak.from;
                     }
                     }
                     // If both min and max is within the same break.
                     // If both min and max is within the same break.
@@ -205,95 +205,92 @@ var BrokenAxisAdditions = /** @class */ (function () {
             };
             };
             axis.setAxisTranslation = function () {
             axis.setAxisTranslation = function () {
                 Axis.prototype.setAxisTranslation.call(this);
                 Axis.prototype.setAxisTranslation.call(this);
-                brokenAxis.unitLength = null;
+                brokenAxis.unitLength = void 0;
                 if (brokenAxis.hasBreaks) {
                 if (brokenAxis.hasBreaks) {
-                    var breaks = axis.options.breaks || [], 
+                    var breaks_2 = axis.options.breaks || [], 
                     // Temporary one:
                     // Temporary one:
-                    breakArrayT = [], breakArray = [], length = 0, inBrk, repeat, min = axis.userMin || axis.min, max = axis.userMax || axis.max, pointRangePadding = pick(axis.pointRangePadding, 0), start, i;
+                    breakArrayT_1 = [], breakArray_1 = [], length_1 = 0, inBrk_1, repeat_1, min_1 = axis.userMin || axis.min, max_1 = axis.userMax || axis.max, pointRangePadding = pick(axis.pointRangePadding, 0), start_1, i_1;
                     // Min & max check (#4247)
                     // Min & max check (#4247)
-                    breaks.forEach(function (brk) {
-                        repeat = brk.repeat || Infinity;
-                        if (BrokenAxisAdditions.isInBreak(brk, min)) {
-                            min +=
-                                (brk.to % repeat) -
-                                    (min % repeat);
-                        }
-                        if (BrokenAxisAdditions.isInBreak(brk, max)) {
-                            max -=
-                                (max % repeat) -
-                                    (brk.from % repeat);
+                    breaks_2.forEach(function (brk) {
+                        repeat_1 = brk.repeat || Infinity;
+                        if (isNumber(min_1) && isNumber(max_1)) {
+                            if (BrokenAxisAdditions.isInBreak(brk, min_1)) {
+                                min_1 += (brk.to % repeat_1) - (min_1 % repeat_1);
+                            }
+                            if (BrokenAxisAdditions.isInBreak(brk, max_1)) {
+                                max_1 -= (max_1 % repeat_1) - (brk.from % repeat_1);
+                            }
                         }
                         }
                     });
                     });
                     // Construct an array holding all breaks in the axis
                     // Construct an array holding all breaks in the axis
-                    breaks.forEach(function (brk) {
-                        start = brk.from;
-                        repeat = brk.repeat || Infinity;
-                        while (start - repeat > min) {
-                            start -= repeat;
-                        }
-                        while (start < min) {
-                            start += repeat;
-                        }
-                        for (i = start; i < max; i += repeat) {
-                            breakArrayT.push({
-                                value: i,
-                                move: 'in'
-                            });
-                            breakArrayT.push({
-                                value: i + (brk.to - brk.from),
-                                move: 'out',
-                                size: brk.breakSize
-                            });
+                    breaks_2.forEach(function (brk) {
+                        start_1 = brk.from;
+                        repeat_1 = brk.repeat || Infinity;
+                        if (isNumber(min_1) && isNumber(max_1)) {
+                            while (start_1 - repeat_1 > min_1) {
+                                start_1 -= repeat_1;
+                            }
+                            while (start_1 < min_1) {
+                                start_1 += repeat_1;
+                            }
+                            for (i_1 = start_1; i_1 < max_1; i_1 += repeat_1) {
+                                breakArrayT_1.push({
+                                    value: i_1,
+                                    move: 'in'
+                                });
+                                breakArrayT_1.push({
+                                    value: i_1 + brk.to - brk.from,
+                                    move: 'out',
+                                    size: brk.breakSize
+                                });
+                            }
                         }
                         }
                     });
                     });
-                    breakArrayT.sort(function (a, b) {
+                    breakArrayT_1.sort(function (a, b) {
                         return ((a.value === b.value) ?
                         return ((a.value === b.value) ?
                             ((a.move === 'in' ? 0 : 1) -
                             ((a.move === 'in' ? 0 : 1) -
                                 (b.move === 'in' ? 0 : 1)) :
                                 (b.move === 'in' ? 0 : 1)) :
                             a.value - b.value);
                             a.value - b.value);
                     });
                     });
                     // Simplify the breaks
                     // Simplify the breaks
-                    inBrk = 0;
-                    start = min;
-                    breakArrayT.forEach(function (brk) {
-                        inBrk += (brk.move === 'in' ? 1 : -1);
-                        if (inBrk === 1 && brk.move === 'in') {
-                            start = brk.value;
+                    inBrk_1 = 0;
+                    start_1 = min_1;
+                    breakArrayT_1.forEach(function (brk) {
+                        inBrk_1 += (brk.move === 'in' ? 1 : -1);
+                        if (inBrk_1 === 1 && brk.move === 'in') {
+                            start_1 = brk.value;
                         }
                         }
-                        if (inBrk === 0) {
-                            breakArray.push({
-                                from: start,
+                        if (inBrk_1 === 0 && isNumber(start_1)) {
+                            breakArray_1.push({
+                                from: start_1,
                                 to: brk.value,
                                 to: brk.value,
-                                len: brk.value - start - (brk.size || 0)
+                                len: brk.value - start_1 - (brk.size || 0)
                             });
                             });
-                            length += brk.value - start - (brk.size || 0);
+                            length_1 += brk.value - start_1 - (brk.size || 0);
                         }
                         }
                     });
                     });
-                    /**
-                     * HC <= 8 backwards compatibility, used by demo samples.
-                     * @deprecated
-                     * @private
-                     * @requires modules/broken-axis
-                     */
-                    axis.breakArray = brokenAxis.breakArray = breakArray;
+                    brokenAxis.breakArray = breakArray_1;
                     // Used with staticScale, and below the actual axis length,
                     // Used with staticScale, and below the actual axis length,
                     // when breaks are substracted.
                     // when breaks are substracted.
-                    brokenAxis.unitLength = max - min - length + pointRangePadding;
-                    fireEvent(axis, 'afterBreaks');
-                    if (axis.staticScale) {
-                        axis.transA = axis.staticScale;
-                    }
-                    else if (brokenAxis.unitLength) {
-                        axis.transA *=
-                            (max - axis.min + pointRangePadding) /
-                                brokenAxis.unitLength;
-                    }
-                    if (pointRangePadding) {
-                        axis.minPixelPadding =
-                            axis.transA * axis.minPointOffset;
+                    if (isNumber(min_1) && isNumber(max_1) && isNumber(axis.min)) {
+                        brokenAxis.unitLength = max_1 - min_1 - length_1 +
+                            pointRangePadding;
+                        fireEvent(axis, 'afterBreaks');
+                        if (axis.staticScale) {
+                            axis.transA = axis.staticScale;
+                        }
+                        else if (brokenAxis.unitLength) {
+                            axis.transA *=
+                                (max_1 - axis.min + pointRangePadding) /
+                                    brokenAxis.unitLength;
+                        }
+                        if (pointRangePadding) {
+                            axis.minPixelPadding =
+                                axis.transA * (axis.minPointOffset || 0);
+                        }
+                        axis.min = min_1;
+                        axis.max = max_1;
                     }
                     }
-                    axis.min = min;
-                    axis.max = max;
                 }
                 }
             };
             };
         }
         }
@@ -482,7 +479,7 @@ var BrokenAxis = /** @class */ (function () {
             var brokenAxis = axis.brokenAxis;
             var brokenAxis = axis.brokenAxis;
             if (brokenAxis &&
             if (brokenAxis &&
                 brokenAxis.hasBreaks) {
                 brokenAxis.hasBreaks) {
-                var tickPositions = this.tickPositions, info = this.tickPositions.info, newPositions = [], i;
+                var tickPositions = this.tickPositions, info = this.tickPositions.info, newPositions = [], i = void 0;
                 for (i = 0; i < tickPositions.length; i++) {
                 for (i = 0; i < tickPositions.length; i++) {
                     if (!brokenAxis.isInAnyBreak(tickPositions[i])) {
                     if (!brokenAxis.isInAnyBreak(tickPositions[i])) {
                         newPositions.push(tickPositions[i]);
                         newPositions.push(tickPositions[i]);

+ 14 - 8
node_modules/highcharts/es-modules/Core/Axis/ColorAxis.js

@@ -107,7 +107,7 @@ var ColorAxis = /** @class */ (function (_super) {
         var legend = chart.options.legend || {}, horiz = userOptions.layout ?
         var legend = chart.options.legend || {}, horiz = userOptions.layout ?
             userOptions.layout !== 'vertical' :
             userOptions.layout !== 'vertical' :
             legend.layout !== 'vertical';
             legend.layout !== 'vertical';
-        var options = merge(ColorAxis.defaultOptions, userOptions, {
+        var options = merge(ColorAxis.defaultColorAxisOptions, userOptions, {
             showEmpty: false,
             showEmpty: false,
             title: null,
             title: null,
             visible: legend.enabled &&
             visible: legend.enabled &&
@@ -117,9 +117,6 @@ var ColorAxis = /** @class */ (function (_super) {
         axis.side = userOptions.side || horiz ? 2 : 1;
         axis.side = userOptions.side || horiz ? 2 : 1;
         axis.reversed = userOptions.reversed || !horiz;
         axis.reversed = userOptions.reversed || !horiz;
         axis.opposite = !horiz;
         axis.opposite = !horiz;
-        // Keep the options structure updated for export. Unlike xAxis and
-        // yAxis, the colorAxis is not an array. (#3207)
-        chart.options[axis.coll] = options;
         _super.prototype.init.call(this, chart, options);
         _super.prototype.init.call(this, chart, options);
         // Base init() pushes it to the xAxis array, now pop it again
         // Base init() pushes it to the xAxis array, now pop it again
         // chart[this.isXAxis ? 'xAxis' : 'yAxis'].pop();
         // chart[this.isXAxis ? 'xAxis' : 'yAxis'].pop();
@@ -467,7 +464,7 @@ var ColorAxis = /** @class */ (function (_super) {
                     .add(axis.legendGroup);
                     .add(axis.legendGroup);
                 axis.cross.addedToColorAxis = true;
                 axis.cross.addedToColorAxis = true;
                 if (!axis.chart.styledMode &&
                 if (!axis.chart.styledMode &&
-                    axis.crosshair) {
+                    typeof axis.crosshair === 'object') {
                     axis.cross.attr({
                     axis.cross.attr({
                         fill: axis.crosshair.color
                         fill: axis.crosshair.color
                     });
                     });
@@ -682,7 +679,7 @@ var ColorAxis = /** @class */ (function (_super) {
      * @optionparent colorAxis
      * @optionparent colorAxis
      * @ignore
      * @ignore
      */
      */
-    ColorAxis.defaultOptions = {
+    ColorAxis.defaultColorAxisOptions = {
         /**
         /**
          * Whether to allow decimals on the color axis.
          * Whether to allow decimals on the color axis.
          * @type      {boolean}
          * @type      {boolean}
@@ -1097,7 +1094,16 @@ addEvent(Series, 'bindAxes', function () {
 // Add the color axis. This also removes the axis' own series to prevent
 // Add the color axis. This also removes the axis' own series to prevent
 // them from showing up individually.
 // them from showing up individually.
 addEvent(Legend, 'afterGetAllItems', function (e) {
 addEvent(Legend, 'afterGetAllItems', function (e) {
+    var _this = this;
     var colorAxisItems = [], colorAxes = this.chart.colorAxis || [], options, i;
     var colorAxisItems = [], colorAxes = this.chart.colorAxis || [], options, i;
+    var destroyItem = function (item) {
+        var i = e.allItems.indexOf(item);
+        if (i !== -1) {
+            // #15436
+            _this.destroyItem(e.allItems[i]);
+            e.allItems.splice(i, 1);
+        }
+    };
     colorAxes.forEach(function (colorAxis) {
     colorAxes.forEach(function (colorAxis) {
         options = colorAxis.options;
         options = colorAxis.options;
         if (options && options.showInLegend) {
         if (options && options.showInLegend) {
@@ -1116,11 +1122,11 @@ addEvent(Legend, 'afterGetAllItems', function (e) {
                 if (!series.options.showInLegend || options.dataClasses) {
                 if (!series.options.showInLegend || options.dataClasses) {
                     if (series.options.legendType === 'point') {
                     if (series.options.legendType === 'point') {
                         series.points.forEach(function (point) {
                         series.points.forEach(function (point) {
-                            erase(e.allItems, point);
+                            destroyItem(point);
                         });
                         });
                     }
                     }
                     else {
                     else {
-                        erase(e.allItems, series);
+                        destroyItem(series);
                     }
                     }
                 }
                 }
             });
             });

+ 45 - 43
node_modules/highcharts/es-modules/Core/Axis/GridAxis.js

@@ -23,9 +23,11 @@ var argsToArray = function (args) {
 var applyGridOptions = function applyGridOptions(axis) {
 var applyGridOptions = function applyGridOptions(axis) {
     var options = axis.options;
     var options = axis.options;
     // Center-align by default
     // Center-align by default
+    /*
     if (!options.labels) {
     if (!options.labels) {
         options.labels = {};
         options.labels = {};
     }
     }
+    */
     options.labels.align = pick(options.labels.align, 'center');
     options.labels.align = pick(options.labels.align, 'center');
     // @todo: Check against tickLabelPlacement between/on etc
     // @todo: Check against tickLabelPlacement between/on etc
     /* Prevents adding the last tick label if the axis is not a category
     /* Prevents adding the last tick label if the axis is not a category
@@ -260,6 +262,32 @@ addEvent(Tick, 'afterGetLabelPosition', function (e) {
         e.pos.x += (axis.horiz && labelOpts.x || 0);
         e.pos.x += (axis.horiz && labelOpts.x || 0);
     }
     }
 });
 });
+addEvent(Tick, 'labelFormat', function (ctx) {
+    var axis = ctx.axis, value = ctx.value;
+    if (axis.options.grid &&
+        axis.options.grid.enabled) {
+        var tickPos = axis.tickPositions;
+        var series = (axis.linkedParent || axis).series[0];
+        var isFirst = value === tickPos[0];
+        var isLast = value === tickPos[tickPos.length - 1];
+        var point = series && find(series.options.data, function (p) {
+            return p[axis.isXAxis ? 'x' : 'y'] === value;
+        });
+        var pointCopy = void 0;
+        if (point && series.is('gantt')) {
+            // For the Gantt set point aliases to the pointCopy
+            // to do not change the original point
+            pointCopy = merge(point);
+            H.seriesTypes.gantt.prototype.pointClass
+                .setGanttPointAliases(pointCopy);
+        }
+        // Make additional properties available for the
+        // formatter
+        ctx.isFirst = isFirst;
+        ctx.isLast = isLast;
+        ctx.point = pointCopy;
+    }
+});
 /* eslint-enable no-invalid-this */
 /* eslint-enable no-invalid-this */
 /**
 /**
  * Additions for grid axes.
  * Additions for grid axes.
@@ -394,14 +422,13 @@ var GridAxis = /** @class */ (function () {
         var gridOptions = options.grid || {};
         var gridOptions = options.grid || {};
         if (gridOptions.enabled === true) {
         if (gridOptions.enabled === true) {
             // compute anchor points for each of the title align options
             // compute anchor points for each of the title align options
-            var title = axis.axisTitle, axisHeight = axis.height, horiz = axis.horiz, axisLeft = axis.left, offset = axis.offset, opposite = axis.opposite, _a = axis.options.title, axisTitleOptions = _a === void 0 ? {} : _a, axisTop = axis.top, axisWidth = axis.width;
+            var axisTitle = axis.axisTitle, axisHeight = axis.height, horiz = axis.horiz, axisLeft = axis.left, offset = axis.offset, opposite = axis.opposite, options_1 = axis.options, axisTop = axis.top, axisWidth = axis.width;
             var tickSize = axis.tickSize();
             var tickSize = axis.tickSize();
-            var titleWidth = title && title.getBBox().width;
-            var xOption = axisTitleOptions.x || 0;
-            var yOption = axisTitleOptions.y || 0;
-            var titleMargin = pick(axisTitleOptions.margin, horiz ? 5 : 10);
-            var titleFontSize = axis.chart.renderer.fontMetrics(axisTitleOptions.style &&
-                axisTitleOptions.style.fontSize, title).f;
+            var titleWidth = axisTitle && axisTitle.getBBox().width;
+            var xOption = options_1.title.x;
+            var yOption = options_1.title.y;
+            var titleMargin = pick(options_1.title.margin, horiz ? 5 : 10);
+            var titleFontSize = axis.chart.renderer.fontMetrics(options_1.title.style.fontSize, axisTitle).f;
             var crispCorr = tickSize ? tickSize[0] / 2 : 0;
             var crispCorr = tickSize ? tickSize[0] / 2 : 0;
             // TODO account for alignment
             // TODO account for alignment
             // the position in the perpendicular direction of the axis
             // the position in the perpendicular direction of the axis
@@ -411,7 +438,7 @@ var GridAxis = /** @class */ (function () {
                     crispCorr +
                     crispCorr +
                 (axis.side === GridAxis.Side.bottom ? titleFontSize : 0));
                 (axis.side === GridAxis.Side.bottom ? titleFontSize : 0));
             e.titlePosition.x = horiz ?
             e.titlePosition.x = horiz ?
-                axisLeft - titleWidth / 2 - titleMargin + xOption :
+                axisLeft - (titleWidth || 0) / 2 - titleMargin + xOption :
                 offAxis + (opposite ? axisWidth : 0) + offset + xOption;
                 offAxis + (opposite ? axisWidth : 0) + offset + xOption;
             e.titlePosition.y = horiz ?
             e.titlePosition.y = horiz ?
                 (offAxis -
                 (offAxis -
@@ -430,35 +457,6 @@ var GridAxis = /** @class */ (function () {
         var chart = axis.chart, _a = axis.options.grid, gridOptions = _a === void 0 ? {} : _a, userOptions = axis.userOptions;
         var chart = axis.chart, _a = axis.options.grid, gridOptions = _a === void 0 ? {} : _a, userOptions = axis.userOptions;
         if (gridOptions.enabled) {
         if (gridOptions.enabled) {
             applyGridOptions(axis);
             applyGridOptions(axis);
-            /* eslint-disable no-invalid-this */
-            // TODO: wrap the axis instead
-            wrap(axis, 'labelFormatter', function (proceed) {
-                var _a = this, axis = _a.axis, value = _a.value;
-                var tickPos = axis.tickPositions;
-                var series = (axis.isLinked ?
-                    axis.linkedParent :
-                    axis).series[0];
-                var isFirst = value === tickPos[0];
-                var isLast = value === tickPos[tickPos.length - 1];
-                var point = series && find(series.options.data, function (p) {
-                    return p[axis.isXAxis ? 'x' : 'y'] === value;
-                });
-                var pointCopy;
-                if (point && series.is('gantt')) {
-                    // For the Gantt set point aliases to the pointCopy
-                    // to do not change the original point
-                    pointCopy = merge(point);
-                    H.seriesTypes.gantt.prototype.pointClass.setGanttPointAliases(pointCopy);
-                }
-                // Make additional properties available for the
-                // formatter
-                this.isFirst = isFirst;
-                this.isLast = isLast;
-                this.point = pointCopy;
-                // Call original labelFormatter
-                return proceed.call(this);
-            });
-            /* eslint-enable no-invalid-this */
         }
         }
         if (gridOptions.columns) {
         if (gridOptions.columns) {
             var columns = axis.grid.columns = [], columnIndex = axis.grid.columnIndex = 0;
             var columns = axis.grid.columns = [], columnIndex = axis.grid.columnIndex = 0;
@@ -499,7 +497,6 @@ var GridAxis = /** @class */ (function () {
      * @private
      * @private
      */
      */
     GridAxis.onAfterRender = function () {
     GridAxis.onAfterRender = function () {
-        var _a;
         var axis = this, grid = axis.grid, options = axis.options, gridOptions = options.grid || {};
         var axis = this, grid = axis.grid, options = axis.options, gridOptions = options.grid || {};
         if (gridOptions.enabled === true) {
         if (gridOptions.enabled === true) {
             // @todo acutual label padding (top, bottom, left, right)
             // @todo acutual label padding (top, bottom, left, right)
@@ -576,7 +573,10 @@ var GridAxis = /** @class */ (function () {
             });
             });
             // Manipulate the tick mark visibility
             // Manipulate the tick mark visibility
             // based on the axis.max- allows smooth scrolling.
             // based on the axis.max- allows smooth scrolling.
-            if (!axis.horiz && axis.chart.hasRendered && (axis.scrollbar || ((_a = axis.linkedParent) === null || _a === void 0 ? void 0 : _a.scrollbar))) {
+            if (!axis.horiz &&
+                axis.chart.hasRendered &&
+                (axis.scrollbar ||
+                    (axis.linkedParent && axis.linkedParent.scrollbar))) {
                 var max = axis.max, min = axis.min, tickmarkOffset = axis.tickmarkOffset, lastTick = axis.tickPositions[axis.tickPositions.length - 1], firstTick = axis.tickPositions[0];
                 var max = axis.max, min = axis.min, tickmarkOffset = axis.tickmarkOffset, lastTick = axis.tickPositions[axis.tickPositions.length - 1], firstTick = axis.tickPositions[0];
                 // Hide/show firts tick label.
                 // Hide/show firts tick label.
                 if (min - firstTick > tickmarkOffset) {
                 if (min - firstTick > tickmarkOffset) {
@@ -605,7 +605,6 @@ var GridAxis = /** @class */ (function () {
      * @private
      * @private
      */
      */
     GridAxis.onAfterSetAxisTranslation = function () {
     GridAxis.onAfterSetAxisTranslation = function () {
-        var _a;
         var axis = this;
         var axis = this;
         var tickInfo = axis.tickPositions && axis.tickPositions.info;
         var tickInfo = axis.tickPositions && axis.tickPositions.info;
         var options = axis.options;
         var options = axis.options;
@@ -637,7 +636,9 @@ var GridAxis = /** @class */ (function () {
             else {
             else {
                 // Don't trim ticks which not in min/max range but
                 // Don't trim ticks which not in min/max range but
                 // they are still in the min/max plus tickInterval.
                 // they are still in the min/max plus tickInterval.
-                if (this.options.type !== 'treegrid' && ((_a = axis.grid) === null || _a === void 0 ? void 0 : _a.columns)) {
+                if (this.options.type !== 'treegrid' &&
+                    axis.grid &&
+                    axis.grid.columns) {
                     this.minPointOffset = this.tickInterval;
                     this.minPointOffset = this.tickInterval;
                 }
                 }
             }
             }
@@ -739,7 +740,7 @@ var GridAxis = /** @class */ (function () {
                             this.linkedParent.tickPositions &&
                             this.linkedParent.tickPositions &&
                             this.linkedParent.tickPositions.info);
                             this.linkedParent.tickPositions.info);
                         if (parentInfo) {
                         if (parentInfo) {
-                            var unitIdx, count, unitName, i, units = gridAxisOptions.units, unitRange;
+                            var unitIdx = void 0, count = void 0, unitName = void 0, i = void 0, units = gridAxisOptions.units, unitRange = void 0;
                             for (i = 0; i < units.length; i++) {
                             for (i = 0; i < units.length; i++) {
                                 if (units[i][0] ===
                                 if (units[i][0] ===
                                     parentInfo.unitName) {
                                     parentInfo.unitName) {
@@ -787,7 +788,8 @@ var GridAxis = /** @class */ (function () {
             // If borderWidth is set, then use its value for tick and
             // If borderWidth is set, then use its value for tick and
             // line width.
             // line width.
             if (isNumber(options.grid.borderWidth)) {
             if (isNumber(options.grid.borderWidth)) {
-                options.tickWidth = options.lineWidth = gridOptions.borderWidth;
+                options.tickWidth = options.lineWidth =
+                    gridOptions.borderWidth;
             }
             }
         }
         }
     };
     };

+ 1 - 1
node_modules/highcharts/es-modules/Core/Axis/LogarithmicAxis.js

@@ -55,7 +55,7 @@ var LogarithmicAxisAdditions = /** @class */ (function () {
             // 1, 2, 4, 6, 8, 10, 20, 40 etc.
             // 1, 2, 4, 6, 8, 10, 20, 40 etc.
         }
         }
         else if (interval >= 0.08) {
         else if (interval >= 0.08) {
-            var roundedMin = Math.floor(min), intermediate, i, j, len, pos, lastPos, break2;
+            var roundedMin = Math.floor(min), intermediate = void 0, i = void 0, j = void 0, len = void 0, pos = void 0, lastPos = void 0, break2 = void 0;
             if (interval > 0.3) {
             if (interval > 0.3) {
                 intermediate = [1, 2, 4];
                 intermediate = [1, 2, 4];
                 // 0.2 equals five minor ticks per 1, 10, 100 etc
                 // 0.2 equals five minor ticks per 1, 10, 100 etc

+ 20 - 11
node_modules/highcharts/es-modules/Core/Axis/OrdinalAxis.js

@@ -143,7 +143,7 @@ var OrdinalAxis;
                 // the array index. Since the ordinal positions may exceed the
                 // the array index. Since the ordinal positions may exceed the
                 // current range, get the start and end positions within it
                 // current range, get the start and end positions within it
                 // (#719, #665b)
                 // (#719, #665b)
-                if (useOrdinal) {
+                if (useOrdinal || axis.forceOrdinal) {
                     if (axis.options.overscroll) {
                     if (axis.options.overscroll) {
                         ordinal.overscrollPointsRange = overscrollPointsRange;
                         ordinal.overscrollPointsRange = overscrollPointsRange;
                         ordinalPositions = ordinalPositions.concat(ordinal.getOverscrollPositions());
                         ordinalPositions = ordinalPositions.concat(ordinal.getOverscrollPositions());
@@ -196,16 +196,21 @@ var OrdinalAxis;
                 fakeAxis = {
                 fakeAxis = {
                     series: [],
                     series: [],
                     chart: chart,
                     chart: chart,
+                    forceOrdinal: false,
                     getExtremes: function () {
                     getExtremes: function () {
                         return {
                         return {
                             min: extremes.dataMin,
                             min: extremes.dataMin,
                             max: extremes.dataMax + overscroll
                             max: extremes.dataMax + overscroll
                         };
                         };
                     },
                     },
+                    getGroupPixelWidth: axisProto.getGroupPixelWidth,
+                    getTimeTicks: axisProto.getTimeTicks,
                     options: {
                     options: {
                         ordinal: true
                         ordinal: true
                     },
                     },
-                    ordinal: {},
+                    ordinal: {
+                        getGroupIntervalFactor: this.getGroupIntervalFactor
+                    },
                     ordinal2lin: axisProto.ordinal2lin,
                     ordinal2lin: axisProto.ordinal2lin,
                     val2lin: axisProto.val2lin // #2590
                     val2lin: axisProto.val2lin // #2590
                 };
                 };
@@ -235,8 +240,13 @@ var OrdinalAxis;
                             enabled: false
                             enabled: false
                         }
                         }
                     };
                     };
-                    series.processData.apply(fakeSeries);
                     fakeAxis.series.push(fakeSeries);
                     fakeAxis.series.push(fakeSeries);
+                    series.processData.apply(fakeSeries);
+                    // Force to use the ordinal when points are evenly spaced
+                    // (e.g. weeks), #3825.
+                    if (fakeSeries.closestPointRange !== fakeSeries.basePointRange && fakeSeries.currentDataGrouping) {
+                        fakeAxis.forceOrdinal = true;
+                    }
                 });
                 });
                 // Run beforeSetTickPositions to compute the ordinalPositions
                 // Run beforeSetTickPositions to compute the ordinalPositions
                 axis.ordinal.beforeSetTickPositions.apply({ axis: fakeAxis });
                 axis.ordinal.beforeSetTickPositions.apply({ axis: fakeAxis });
@@ -466,7 +476,7 @@ var OrdinalAxis;
             // space between two points is greater than a portion of the tick
             // space between two points is greater than a portion of the tick
             // pixel interval
             // pixel interval
             if (findHigherRanks && defined(tickPixelIntervalOption)) {
             if (findHigherRanks && defined(tickPixelIntervalOption)) {
-                var length = groupPositions.length, i = length, itemToRemove, translated, translatedArr = [], lastTranslated, medianDistance, distance, distances = [];
+                var length_1 = groupPositions.length, i = length_1, itemToRemove = void 0, translated = void 0, translatedArr = [], lastTranslated = void 0, medianDistance = void 0, distance = void 0, distances = [];
                 // Find median pixel distance in order to keep a reasonably even
                 // Find median pixel distance in order to keep a reasonably even
                 // distance between ticks (#748)
                 // distance between ticks (#748)
                 while (i--) {
                 while (i--) {
@@ -482,7 +492,7 @@ var OrdinalAxis;
                     medianDistance = null;
                     medianDistance = null;
                 }
                 }
                 // Now loop over again and remove ticks where needed
                 // Now loop over again and remove ticks where needed
-                i = groupPositions[length - 1] > max ? length - 1 : length; // #817
+                i = groupPositions[length_1 - 1] > max ? length_1 - 1 : length_1; // #817
                 lastTranslated = void 0;
                 lastTranslated = void 0;
                 while (i--) {
                 while (i--) {
                     translated = translatedArr[i];
                     translated = translatedArr[i];
@@ -540,7 +550,7 @@ var OrdinalAxis;
                 ret = val;
                 ret = val;
             }
             }
             else {
             else {
-                var ordinalSlope = ordinal.slope, ordinalOffset = ordinal.offset, i = ordinalPositions.length - 1, linearEquivalentLeft, linearEquivalentRight, distance;
+                var ordinalSlope = ordinal.slope, ordinalOffset = ordinal.offset, i = ordinalPositions.length - 1, linearEquivalentLeft = void 0, linearEquivalentRight = void 0, distance = void 0;
                 // Handle the case where we translate from the index directly,
                 // Handle the case where we translate from the index directly,
                 // used only when panning an ordinal axis
                 // used only when panning an ordinal axis
                 if (fromIndex) {
                 if (fromIndex) {
@@ -610,7 +620,7 @@ var OrdinalAxis;
                 ret = val;
                 ret = val;
             }
             }
             else {
             else {
-                var ordinalLength = ordinalPositions.length, i, distance, ordinalIndex;
+                var ordinalLength = ordinalPositions.length, i = void 0, distance = void 0, ordinalIndex = void 0;
                 // first look for an exact match in the ordinalpositions array
                 // first look for an exact match in the ordinalpositions array
                 i = ordinalLength;
                 i = ordinalLength;
                 while (i--) {
                 while (i--) {
@@ -688,19 +698,18 @@ var OrdinalAxis;
         });
         });
         // Extending the Chart.pan method for ordinal axes
         // Extending the Chart.pan method for ordinal axes
         addEvent(ChartClass, 'pan', function (e) {
         addEvent(ChartClass, 'pan', function (e) {
-            var chart = this, xAxis = chart.xAxis[0], overscroll = xAxis.options.overscroll, chartX = e.originalEvent.chartX, panning = chart.options.chart &&
-                chart.options.chart.panning, runBase = false;
+            var chart = this, xAxis = chart.xAxis[0], overscroll = xAxis.options.overscroll, chartX = e.originalEvent.chartX, panning = chart.options.chart.panning, runBase = false;
             if (panning &&
             if (panning &&
                 panning.type !== 'y' &&
                 panning.type !== 'y' &&
                 xAxis.options.ordinal &&
                 xAxis.options.ordinal &&
                 xAxis.series.length) {
                 xAxis.series.length) {
-                var mouseDownX = chart.mouseDownX, extremes = xAxis.getExtremes(), dataMax = extremes.dataMax, min = extremes.min, max = extremes.max, trimmedRange, hoverPoints = chart.hoverPoints, closestPointRange = (xAxis.closestPointRange ||
+                var mouseDownX = chart.mouseDownX, extremes = xAxis.getExtremes(), dataMax = extremes.dataMax, min = extremes.min, max = extremes.max, trimmedRange = void 0, hoverPoints = chart.hoverPoints, closestPointRange = (xAxis.closestPointRange ||
                     (xAxis.ordinal && xAxis.ordinal.overscrollPointsRange)), pointPixelWidth = (xAxis.translationSlope *
                     (xAxis.ordinal && xAxis.ordinal.overscrollPointsRange)), pointPixelWidth = (xAxis.translationSlope *
                     (xAxis.ordinal.slope || closestPointRange)), 
                     (xAxis.ordinal.slope || closestPointRange)), 
                 // how many ordinal units did we move?
                 // how many ordinal units did we move?
                 movedUnits = (mouseDownX - chartX) / pointPixelWidth, 
                 movedUnits = (mouseDownX - chartX) / pointPixelWidth, 
                 // get index of all the chart's points
                 // get index of all the chart's points
-                extendedAxis = { ordinal: { positions: xAxis.ordinal.getExtendedPositions() } }, ordinalPositions, searchAxisLeft, lin2val = xAxis.lin2val, val2lin = xAxis.val2lin, searchAxisRight;
+                extendedAxis = { ordinal: { positions: xAxis.ordinal.getExtendedPositions() } }, ordinalPositions = void 0, searchAxisLeft = void 0, lin2val = xAxis.lin2val, val2lin = xAxis.val2lin, searchAxisRight = void 0;
                 // we have an ordinal axis, but the data is equally spaced
                 // we have an ordinal axis, but the data is equally spaced
                 if (!extendedAxis.ordinal.positions) {
                 if (!extendedAxis.ordinal.positions) {
                     runBase = true;
                     runBase = true;

+ 5 - 3
node_modules/highcharts/es-modules/Core/Axis/PlotLineOrBand.js

@@ -32,7 +32,7 @@ import palette from '../../Core/Color/Palette.js';
  * @typedef {Highcharts.XAxisPlotLinesLabelOptions|Highcharts.YAxisPlotLinesLabelOptions|Highcharts.ZAxisPlotLinesLabelOptions} Highcharts.AxisPlotLinesLabelOptions
  * @typedef {Highcharts.XAxisPlotLinesLabelOptions|Highcharts.YAxisPlotLinesLabelOptions|Highcharts.ZAxisPlotLinesLabelOptions} Highcharts.AxisPlotLinesLabelOptions
  */
  */
 import U from '../Utilities.js';
 import U from '../Utilities.js';
-var arrayMax = U.arrayMax, arrayMin = U.arrayMin, defined = U.defined, destroyObjectProperties = U.destroyObjectProperties, erase = U.erase, extend = U.extend, fireEvent = U.fireEvent, merge = U.merge, objectEach = U.objectEach, pick = U.pick;
+var arrayMax = U.arrayMax, arrayMin = U.arrayMin, defined = U.defined, destroyObjectProperties = U.destroyObjectProperties, erase = U.erase, extend = U.extend, fireEvent = U.fireEvent, isNumber = U.isNumber, merge = U.merge, objectEach = U.objectEach, pick = U.pick;
 /* eslint-disable no-invalid-this, valid-jsdoc */
 /* eslint-disable no-invalid-this, valid-jsdoc */
 /**
 /**
  * The object wrapper for plot lines and plot bands
  * The object wrapper for plot lines and plot bands
@@ -865,7 +865,9 @@ extend(Axis.prototype, /** @lends Highcharts.Axis.prototype */ {
             acrossPanes: options.acrossPanes
             acrossPanes: options.acrossPanes
         }), result = [], i, 
         }), result = [], i, 
         // #4964 check if chart is inverted or plotband is on yAxis
         // #4964 check if chart is inverted or plotband is on yAxis
-        horiz = this.horiz, plus = 1, isFlat, outside = (from < this.min && to < this.min) ||
+        horiz = this.horiz, plus = 1, isFlat, outside = !isNumber(this.min) ||
+            !isNumber(this.max) ||
+            (from < this.min && to < this.min) ||
             (from > this.max && to > this.max);
             (from > this.max && to > this.max);
         if (path && toPath) {
         if (path && toPath) {
             // Flat paths don't need labels (#3836)
             // Flat paths don't need labels (#3836)
@@ -873,7 +875,7 @@ extend(Axis.prototype, /** @lends Highcharts.Axis.prototype */ {
                 isFlat = path.toString() === toPath.toString();
                 isFlat = path.toString() === toPath.toString();
                 plus = 0;
                 plus = 0;
             }
             }
-            // Go over each subpath - for panes in Highstock
+            // Go over each subpath - for panes in Highcharts Stock
             for (i = 0; i < path.length; i += 2) {
             for (i = 0; i < path.length; i += 2) {
                 var pathStart = path[i], pathEnd = path[i + 1], toPathStart = toPath[i], toPathEnd = toPath[i + 1];
                 var pathStart = path[i], pathEnd = path[i + 1], toPathStart = toPath[i], toPathEnd = toPath[i + 1];
                 // Type checking all affected path segments. Consider something
                 // Type checking all affected path segments. Consider something

+ 10 - 9
node_modules/highcharts/es-modules/Core/Axis/RadialAxis.js

@@ -165,7 +165,7 @@ var RadialAxis = /** @class */ (function () {
                 this.pane.updateCenter(this);
                 this.pane.updateCenter(this);
                 // In case when the innerSize is set in a polar chart, the axis'
                 // In case when the innerSize is set in a polar chart, the axis'
                 // center cannot be a reference to pane's center
                 // center cannot be a reference to pane's center
-                center = this.center = extend([], this.pane.center);
+                center = this.center = this.pane.center.slice();
                 // The sector is used in Axis.translate to compute the
                 // The sector is used in Axis.translate to compute the
                 // translation of reversed axis points (#2570)
                 // translation of reversed axis points (#2570)
                 if (this.isCircular) {
                 if (this.isCircular) {
@@ -537,6 +537,7 @@ var RadialAxis = /** @class */ (function () {
                 // Apply the stack labels for yAxis in case of inverted chart
                 // Apply the stack labels for yAxis in case of inverted chart
                 if (inverted && coll === 'yAxis') {
                 if (inverted && coll === 'yAxis') {
                     axis.defaultPolarOptions.stackLabels = AxisClass.defaultYAxisOptions.stackLabels;
                     axis.defaultPolarOptions.stackLabels = AxisClass.defaultYAxisOptions.stackLabels;
+                    axis.defaultPolarOptions.reversedStacks = true;
                 }
                 }
             }
             }
             // Disable certain features on angular and polar axes
             // Disable certain features on angular and polar axes
@@ -622,7 +623,7 @@ var RadialAxis = /** @class */ (function () {
             align = labelOptions.align, angle = ((axis.translate(this.pos) + axis.startAngleRad +
             align = labelOptions.align, angle = ((axis.translate(this.pos) + axis.startAngleRad +
                 Math.PI / 2) / Math.PI * 180) % 360, correctAngle = Math.round(angle), labelDir = 'end', // Direction of the label 'start' or 'end'
                 Math.PI / 2) / Math.PI * 180) % 360, correctAngle = Math.round(angle), labelDir = 'end', // Direction of the label 'start' or 'end'
             reducedAngle1 = correctAngle < 0 ?
             reducedAngle1 = correctAngle < 0 ?
-                correctAngle + 360 : correctAngle, reducedAngle2 = reducedAngle1, translateY = 0, translateX = 0, labelYPosCorrection = labelOptions.y === null ? -labelBBox.height * 0.3 : 0;
+                correctAngle + 360 : correctAngle, reducedAngle2 = reducedAngle1, translateY = 0, translateX = 0, labelYPosCorrection = !defined(optionsY) ? -labelBBox.height * 0.3 : 0;
             if (axis.isRadial) { // Both X and Y axes in a polar chart
             if (axis.isRadial) { // Both X and Y axes in a polar chart
                 ret = axis.getPosition(this.pos, (axis.center[2] / 2) +
                 ret = axis.getPosition(this.pos, (axis.center[2] / 2) +
                     relativeLength(pick(labelOptions.distance, -25), axis.center[2] / 2, -axis.center[2] / 2));
                     relativeLength(pick(labelOptions.distance, -25), axis.center[2] / 2, -axis.center[2] / 2));
@@ -633,13 +634,13 @@ var RadialAxis = /** @class */ (function () {
                     });
                     });
                     // Vertically centered
                     // Vertically centered
                 }
                 }
-                else if (optionsY === null) {
+                else if (!defined(optionsY)) {
                     optionsY = (axis.chart.renderer
                     optionsY = (axis.chart.renderer
                         .fontMetrics(label.styles && label.styles.fontSize).b -
                         .fontMetrics(label.styles && label.styles.fontSize).b -
                         labelBBox.height / 2);
                         labelBBox.height / 2);
                 }
                 }
                 // Automatic alignment
                 // Automatic alignment
-                if (align === null) {
+                if (!defined(align)) {
                     if (axis.isCircular) { // Y axis
                     if (axis.isCircular) { // Y axis
                         if (labelBBox.width >
                         if (labelBBox.width >
                             axis.len * axis.tickInterval / (axis.max - axis.min)) { // #3506
                             axis.len * axis.tickInterval / (axis.max - axis.min)) { // #3506
@@ -728,8 +729,8 @@ var RadialAxis = /** @class */ (function () {
                     label.attr({ align: align });
                     label.attr({ align: align });
                     label.translate(translateX, translateY + labelYPosCorrection);
                     label.translate(translateX, translateY + labelYPosCorrection);
                 }
                 }
-                e.pos.x = ret.x + labelOptions.x;
-                e.pos.y = ret.y + optionsY;
+                e.pos.x = ret.x + (labelOptions.x || 0);
+                e.pos.y = ret.y + (optionsY || 0);
             }
             }
         });
         });
         // Wrap the getMarkPath function to return the path of the radial marker
         // Wrap the getMarkPath function to return the path of the radial marker
@@ -766,10 +767,10 @@ var RadialAxis = /** @class */ (function () {
     RadialAxis.defaultCircularOptions = {
     RadialAxis.defaultCircularOptions = {
         gridLineWidth: 1,
         gridLineWidth: 1,
         labels: {
         labels: {
-            align: null,
+            align: void 0,
             distance: 15,
             distance: 15,
             x: 0,
             x: 0,
-            y: null,
+            y: void 0,
             style: {
             style: {
                 textOverflow: 'none' // wrap lines by default (#7248)
                 textOverflow: 'none' // wrap lines by default (#7248)
             }
             }
@@ -787,7 +788,7 @@ var RadialAxis = /** @class */ (function () {
         labels: {
         labels: {
             align: 'center',
             align: 'center',
             x: 0,
             x: 0,
-            y: null // auto
+            y: void 0 // auto
         },
         },
         minorGridLineWidth: 0,
         minorGridLineWidth: 0,
         minorTickInterval: 'auto',
         minorTickInterval: 'auto',

+ 1 - 7
node_modules/highcharts/es-modules/Core/Axis/ScrollbarAxis.js

@@ -7,7 +7,6 @@
  *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!
  *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!
  *
  *
  * */
  * */
-import H from '../Globals.js';
 import U from '../Utilities.js';
 import U from '../Utilities.js';
 var addEvent = U.addEvent, defined = U.defined, pick = U.pick;
 var addEvent = U.addEvent, defined = U.defined, pick = U.pick;
 /* eslint-disable no-invalid-this, valid-jsdoc */
 /* eslint-disable no-invalid-this, valid-jsdoc */
@@ -70,12 +69,7 @@ var ScrollbarAxis = /** @class */ (function () {
                         to = unitedMin + range * (1 - this.from);
                         to = unitedMin + range * (1 - this.from);
                         from = unitedMin + range * (1 - this.to);
                         from = unitedMin + range * (1 - this.to);
                     }
                     }
-                    if (pick(this.options.liveRedraw, H.svg && !H.isTouchDevice && !this.chart.isBoosting) ||
-                        // Mouseup always should change extremes
-                        e.DOMType === 'mouseup' ||
-                        e.DOMType === 'touchend' ||
-                        // Internal events
-                        !defined(e.DOMType)) {
+                    if (this.shouldUpdateExtremes(e.DOMType)) {
                         axis.setExtremes(from, to, true, e.DOMType !== 'mousemove' && e.DOMType !== 'touchmove', e);
                         axis.setExtremes(from, to, true, e.DOMType !== 'mousemove' && e.DOMType !== 'touchmove', e);
                     }
                     }
                     else {
                     else {

+ 10 - 10
node_modules/highcharts/es-modules/Core/Axis/StackingAxis.js

@@ -11,7 +11,7 @@
 import A from '../Animation/AnimationUtilities.js';
 import A from '../Animation/AnimationUtilities.js';
 var getDeferredAnimation = A.getDeferredAnimation;
 var getDeferredAnimation = A.getDeferredAnimation;
 import U from '../Utilities.js';
 import U from '../Utilities.js';
-var addEvent = U.addEvent, destroyObjectProperties = U.destroyObjectProperties, fireEvent = U.fireEvent, objectEach = U.objectEach, pick = U.pick;
+var addEvent = U.addEvent, destroyObjectProperties = U.destroyObjectProperties, fireEvent = U.fireEvent, isNumber = U.isNumber, objectEach = U.objectEach, pick = U.pick;
 /* eslint-disable valid-jsdoc */
 /* eslint-disable valid-jsdoc */
 /**
 /**
  * Adds stacking support to axes.
  * Adds stacking support to axes.
@@ -43,7 +43,7 @@ var StackingAxisAdditions = /** @class */ (function () {
         var stacking = this;
         var stacking = this;
         var axis = stacking.axis;
         var axis = stacking.axis;
         var axisSeries = axis.series;
         var axisSeries = axis.series;
-        var reversedStacks = pick(axis.options.reversedStacks, true);
+        var reversedStacks = axis.options.reversedStacks;
         var len = axisSeries.length;
         var len = axisSeries.length;
         var actualSeries, i;
         var actualSeries, i;
         if (!axis.isXAxis) {
         if (!axis.isXAxis) {
@@ -85,16 +85,16 @@ var StackingAxisAdditions = /** @class */ (function () {
      * @private
      * @private
      */
      */
     StackingAxisAdditions.prototype.resetStacks = function () {
     StackingAxisAdditions.prototype.resetStacks = function () {
-        var stacking = this;
-        var axis = stacking.axis;
-        var stacks = stacking.stacks;
+        var _this = this;
+        var _a = this, axis = _a.axis, stacks = _a.stacks;
         if (!axis.isXAxis) {
         if (!axis.isXAxis) {
             objectEach(stacks, function (type) {
             objectEach(stacks, function (type) {
-                objectEach(type, function (stack, key) {
+                objectEach(type, function (stack, x) {
                     // Clean up memory after point deletion (#1044, #4320)
                     // Clean up memory after point deletion (#1044, #4320)
-                    if (stack.touched < stacking.stacksTouched) {
+                    if (isNumber(stack.touched) &&
+                        stack.touched < _this.stacksTouched) {
                         stack.destroy();
                         stack.destroy();
-                        delete type[key];
+                        delete type[x];
                         // Reset stacks
                         // Reset stacks
                     }
                     }
                     else {
                     else {
@@ -114,8 +114,8 @@ var StackingAxisAdditions = /** @class */ (function () {
         var chart = axis.chart;
         var chart = axis.chart;
         var renderer = chart.renderer;
         var renderer = chart.renderer;
         var stacks = stacking.stacks;
         var stacks = stacking.stacks;
-        var stackLabelsAnim = axis.options.stackLabels.animation;
-        var animationConfig = getDeferredAnimation(chart, stackLabelsAnim);
+        var stackLabelsAnim = axis.options.stackLabels && axis.options.stackLabels.animation;
+        var animationConfig = getDeferredAnimation(chart, stackLabelsAnim || false);
         var stackTotalGroup = stacking.stackTotalGroup = (stacking.stackTotalGroup ||
         var stackTotalGroup = stacking.stackTotalGroup = (stacking.stackTotalGroup ||
             renderer
             renderer
                 .g('stack-labels')
                 .g('stack-labels')

+ 52 - 23
node_modules/highcharts/es-modules/Core/Axis/Tick.js

@@ -8,6 +8,7 @@
  *
  *
  * */
  * */
 'use strict';
 'use strict';
+import F from '../FormatUtilities.js';
 import H from '../Globals.js';
 import H from '../Globals.js';
 var deg2rad = H.deg2rad;
 var deg2rad = H.deg2rad;
 import U from '../Utilities.js';
 import U from '../Utilities.js';
@@ -117,10 +118,15 @@ var Tick = /** @class */ (function () {
      * @return {void}
      * @return {void}
      */
      */
     Tick.prototype.addLabel = function () {
     Tick.prototype.addLabel = function () {
-        var tick = this, axis = tick.axis, options = axis.options, chart = axis.chart, categories = axis.categories, log = axis.logarithmic, names = axis.names, pos = tick.pos, labelOptions = pick(tick.options && tick.options.labels, options.labels), str, tickPositions = axis.tickPositions, isFirst = pos === tickPositions[0], isLast = pos === tickPositions[tickPositions.length - 1], value = this.parameters.category || (categories ?
-            pick(categories[pos], names[pos], pos) :
-            pos), label = tick.label, animateLabels = (!labelOptions.step || labelOptions.step === 1) &&
+        var tick = this, axis = tick.axis, options = axis.options, chart = axis.chart, categories = axis.categories, log = axis.logarithmic, names = axis.names, pos = tick.pos, labelOptions = pick(tick.options && tick.options.labels, options.labels), str, tickPositions = axis.tickPositions, isFirst = pos === tickPositions[0], isLast = pos === tickPositions[tickPositions.length - 1], label = tick.label, animateLabels = (!labelOptions.step || labelOptions.step === 1) &&
             axis.tickInterval === 1, tickPositionInfo = tickPositions.info, dateTimeLabelFormat, dateTimeLabelFormats, i, list;
             axis.tickInterval === 1, tickPositionInfo = tickPositions.info, dateTimeLabelFormat, dateTimeLabelFormats, i, list;
+        // The context value
+        var value = this.parameters.category || (categories ?
+            pick(categories[pos], names[pos], pos) :
+            pos);
+        if (log && isNumber(value)) {
+            value = correctFloat(log.lin2log(value));
+        }
         // Set the datetime label format. If a higher rank is set for this
         // Set the datetime label format. If a higher rank is set for this
         // position, use that. If not, use the general format.
         // position, use that. If not, use the general format.
         if (axis.dateTime && tickPositionInfo) {
         if (axis.dateTime && tickPositionInfo) {
@@ -145,28 +151,47 @@ var Tick = /** @class */ (function () {
          */
          */
         tick.isLast = isLast;
         tick.isLast = isLast;
         // Get the string
         // Get the string
-        tick.formatCtx = {
+        var ctx = {
             axis: axis,
             axis: axis,
             chart: chart,
             chart: chart,
+            dateTimeLabelFormat: dateTimeLabelFormat,
             isFirst: isFirst,
             isFirst: isFirst,
             isLast: isLast,
             isLast: isLast,
-            dateTimeLabelFormat: dateTimeLabelFormat,
+            pos: pos,
+            tick: tick,
             tickPositionInfo: tickPositionInfo,
             tickPositionInfo: tickPositionInfo,
-            value: log ? correctFloat(log.lin2log(value)) : value,
-            pos: pos
+            value: value
         };
         };
-        str = axis.labelFormatter.call(tick.formatCtx, this.formatCtx);
+        // Fire an event that allows modifying the context for use in
+        // `labels.format` and `labels.formatter`.
+        fireEvent(this, 'labelFormat', ctx);
+        // Label formatting. When `labels.format` is given, we first run the
+        // defaultFormatter and append the result to the context as `text`.
+        // Handy for adding prefix or suffix while keeping default number
+        // formatting.
+        var labelFormatter = function (ctx) {
+            if (labelOptions.formatter) {
+                return labelOptions.formatter.call(ctx, ctx);
+            }
+            if (labelOptions.format) {
+                ctx.text = axis.defaultLabelFormatter.call(ctx);
+                return F.format(labelOptions.format, ctx, chart);
+            }
+            return axis.defaultLabelFormatter.call(ctx, ctx);
+        };
+        str = labelFormatter.call(ctx, ctx);
         // Set up conditional formatting based on the format list if existing.
         // Set up conditional formatting based on the format list if existing.
         list = dateTimeLabelFormats && dateTimeLabelFormats.list;
         list = dateTimeLabelFormats && dateTimeLabelFormats.list;
         if (list) {
         if (list) {
             tick.shortenLabel = function () {
             tick.shortenLabel = function () {
                 for (i = 0; i < list.length; i++) {
                 for (i = 0; i < list.length; i++) {
+                    extend(ctx, { dateTimeLabelFormat: list[i] });
                     label.attr({
                     label.attr({
-                        text: axis.labelFormatter.call(extend(tick.formatCtx, { dateTimeLabelFormat: list[i] }))
+                        text: labelFormatter.call(ctx, ctx)
                     });
                     });
                     if (label.getBBox().width <
                     if (label.getBBox().width <
                         axis.getSlotWidth(tick) - 2 *
                         axis.getSlotWidth(tick) - 2 *
-                            pick(labelOptions.padding, 5)) {
+                            labelOptions.padding) {
                         return;
                         return;
                     }
                     }
                 }
                 }
@@ -195,7 +220,7 @@ var Tick = /** @class */ (function () {
             // When resetting text, also reset the width if dynamically set
             // When resetting text, also reset the width if dynamically set
             // (#8809)
             // (#8809)
             if (label.textWidth &&
             if (label.textWidth &&
-                !(labelOptions.style && labelOptions.style.width) &&
+                !labelOptions.style.width &&
                 !label.styles.width) {
                 !label.styles.width) {
                 label.css({ width: null });
                 label.css({ width: null });
             }
             }
@@ -386,8 +411,7 @@ var Tick = /** @class */ (function () {
         }[axis.labelAlign || label.attr('align')], labelWidth = label.getBBox().width, slotWidth = axis.getSlotWidth(tick), modifiedSlotWidth = slotWidth, xCorrection = factor, goRight = 1, leftPos, rightPos, textWidth, css = {};
         }[axis.labelAlign || label.attr('align')], labelWidth = label.getBBox().width, slotWidth = axis.getSlotWidth(tick), modifiedSlotWidth = slotWidth, xCorrection = factor, goRight = 1, leftPos, rightPos, textWidth, css = {};
         // Check if the label overshoots the chart spacing box. If it does, move
         // Check if the label overshoots the chart spacing box. If it does, move
         // it. If it now overshoots the slotWidth, add ellipsis.
         // it. If it now overshoots the slotWidth, add ellipsis.
-        if (!rotation &&
-            pick(labelOptions.overflow, 'justify') === 'justify') {
+        if (!rotation && labelOptions.overflow === 'justify') {
             leftPos = pxPos - factor * labelWidth;
             leftPos = pxPos - factor * labelWidth;
             rightPos = pxPos + (1 - factor) * labelWidth;
             rightPos = pxPos + (1 - factor) * labelWidth;
             if (leftPos < leftBound) {
             if (leftPos < leftBound) {
@@ -496,6 +520,8 @@ var Tick = /** @class */ (function () {
     Tick.prototype.render = function (index, old, opacity) {
     Tick.prototype.render = function (index, old, opacity) {
         var tick = this, axis = tick.axis, horiz = axis.horiz, pos = tick.pos, tickmarkOffset = pick(tick.tickmarkOffset, axis.tickmarkOffset), xy = tick.getPosition(horiz, pos, tickmarkOffset, old), x = xy.x, y = xy.y, reverseCrisp = ((horiz && x === axis.pos + axis.len) ||
         var tick = this, axis = tick.axis, horiz = axis.horiz, pos = tick.pos, tickmarkOffset = pick(tick.tickmarkOffset, axis.tickmarkOffset), xy = tick.getPosition(horiz, pos, tickmarkOffset, old), x = xy.x, y = xy.y, reverseCrisp = ((horiz && x === axis.pos + axis.len) ||
             (!horiz && y === axis.pos)) ? -1 : 1; // #1480, #1687
             (!horiz && y === axis.pos)) ? -1 : 1; // #1480, #1687
+        var labelOpacity = pick(opacity, tick.label && tick.label.newOpacity, // #15528
+        1);
         opacity = pick(opacity, 1);
         opacity = pick(opacity, 1);
         this.isActive = true;
         this.isActive = true;
         // Create the grid line
         // Create the grid line
@@ -503,7 +529,7 @@ var Tick = /** @class */ (function () {
         // create the tick mark
         // create the tick mark
         this.renderMark(xy, opacity, reverseCrisp);
         this.renderMark(xy, opacity, reverseCrisp);
         // the label is created on init - now move it into place
         // the label is created on init - now move it into place
-        this.renderLabel(xy, old, opacity, index);
+        this.renderLabel(xy, old, labelOpacity, index);
         tick.isNew = false;
         tick.isNew = false;
         fireEvent(this, 'afterRender');
         fireEvent(this, 'afterRender');
     };
     };
@@ -517,14 +543,17 @@ var Tick = /** @class */ (function () {
      * @return {void}
      * @return {void}
      */
      */
     Tick.prototype.renderGridLine = function (old, opacity, reverseCrisp) {
     Tick.prototype.renderGridLine = function (old, opacity, reverseCrisp) {
-        var tick = this, axis = tick.axis, options = axis.options, gridLine = tick.gridLine, gridLinePath, attribs = {}, pos = tick.pos, type = tick.type, tickmarkOffset = pick(tick.tickmarkOffset, axis.tickmarkOffset), renderer = axis.chart.renderer, gridPrefix = type ? type + 'Grid' : 'grid', gridLineWidth = options[gridPrefix + 'LineWidth'], gridLineColor = options[gridPrefix + 'LineColor'], dashStyle = options[gridPrefix + 'LineDashStyle'];
+        var tick = this, axis = tick.axis, options = axis.options, gridLine = tick.gridLine, gridLinePath, attribs = {}, pos = tick.pos, type = tick.type, tickmarkOffset = pick(tick.tickmarkOffset, axis.tickmarkOffset), renderer = axis.chart.renderer, gridLineWidth = options.gridLineWidth, gridLineColor = options.gridLineColor, dashStyle = options.gridLineDashStyle;
+        if (tick.type === 'minor') {
+            gridLineWidth = options.minorGridLineWidth;
+            gridLineColor = options.minorGridLineColor;
+            dashStyle = options.minorGridLineDashStyle;
+        }
         if (!gridLine) {
         if (!gridLine) {
             if (!axis.chart.styledMode) {
             if (!axis.chart.styledMode) {
                 attribs.stroke = gridLineColor;
                 attribs.stroke = gridLineColor;
-                attribs['stroke-width'] = gridLineWidth;
-                if (dashStyle) {
-                    attribs.dashstyle = dashStyle;
-                }
+                attribs['stroke-width'] = gridLineWidth || 0;
+                attribs.dashstyle = dashStyle;
             }
             }
             if (!type) {
             if (!type) {
                 attribs.zIndex = 1;
                 attribs.zIndex = 1;
@@ -569,8 +598,8 @@ var Tick = /** @class */ (function () {
      * @return {void}
      * @return {void}
      */
      */
     Tick.prototype.renderMark = function (xy, opacity, reverseCrisp) {
     Tick.prototype.renderMark = function (xy, opacity, reverseCrisp) {
-        var tick = this, axis = tick.axis, options = axis.options, renderer = axis.chart.renderer, type = tick.type, tickPrefix = type ? type + 'Tick' : 'tick', tickSize = axis.tickSize(tickPrefix), mark = tick.mark, isNewMark = !mark, x = xy.x, y = xy.y, tickWidth = pick(options[tickPrefix + 'Width'], !type && axis.isXAxis ? 1 : 0), // X axis defaults to 1
-        tickColor = options[tickPrefix + 'Color'];
+        var tick = this, axis = tick.axis, options = axis.options, renderer = axis.chart.renderer, type = tick.type, tickSize = axis.tickSize(type ? type + 'Tick' : 'tick'), mark = tick.mark, isNewMark = !mark, x = xy.x, y = xy.y, tickWidth = pick(options[type !== 'minor' ? 'tickWidth' : 'minorTickWidth'], !type && axis.isXAxis ? 1 : 0), // X axis defaults to 1
+        tickColor = options[type !== 'minor' ? 'tickColor' : 'minorTickColor'];
         if (tickSize) {
         if (tickSize) {
             // negate the length
             // negate the length
             if (axis.opposite) {
             if (axis.opposite) {
@@ -620,10 +649,10 @@ var Tick = /** @class */ (function () {
             // label anyway (#2100).
             // label anyway (#2100).
             if ((tick.isFirst &&
             if ((tick.isFirst &&
                 !tick.isLast &&
                 !tick.isLast &&
-                !pick(options.showFirstLabel, 1)) ||
+                !options.showFirstLabel) ||
                 (tick.isLast &&
                 (tick.isLast &&
                     !tick.isFirst &&
                     !tick.isFirst &&
-                    !pick(options.showLastLabel, 1))) {
+                    !options.showLastLabel)) {
                 show = false;
                 show = false;
                 // Handle label overflow and show or hide accordingly
                 // Handle label overflow and show or hide accordingly
             }
             }

+ 5 - 6
node_modules/highcharts/es-modules/Core/Axis/TreeGridAxis.js

@@ -362,13 +362,11 @@ var TreeGridAxis;
      * The original function
      * The original function
      */
      */
     function wrapGetMaxLabelDimensions(proceed) {
     function wrapGetMaxLabelDimensions(proceed) {
-        var axis = this, options = axis.options, labelOptions = options && options.labels, indentation = (labelOptions && isNumber(labelOptions.indentation) ?
-            labelOptions.indentation :
-            0), retVal = proceed.apply(axis, Array.prototype.slice.call(arguments, 1)), isTreeGrid = axis.options.type === 'treegrid';
+        var axis = this, options = axis.options, retVal = proceed.apply(axis, Array.prototype.slice.call(arguments, 1)), isTreeGrid = options.type === 'treegrid';
         var treeDepth;
         var treeDepth;
         if (isTreeGrid && axis.treeGrid.mapOfPosToGridNode) {
         if (isTreeGrid && axis.treeGrid.mapOfPosToGridNode) {
             treeDepth = axis.treeGrid.mapOfPosToGridNode[-1].height || 0;
             treeDepth = axis.treeGrid.mapOfPosToGridNode[-1].height || 0;
-            retVal.width += indentation * (treeDepth - 1);
+            retVal.width += options.labels.indentation * (treeDepth - 1);
         }
         }
         return retVal;
         return retVal;
     }
     }
@@ -416,8 +414,9 @@ var TreeGridAxis;
             // and chart height is set, set axis.isDirty
             // and chart height is set, set axis.isDirty
             // to ensure collapsing works (#12012)
             // to ensure collapsing works (#12012)
             addEvent(axis, 'afterBreaks', function () {
             addEvent(axis, 'afterBreaks', function () {
-                var _a;
-                if (axis.coll === 'yAxis' && !axis.staticScale && ((_a = axis.chart.options.chart) === null || _a === void 0 ? void 0 : _a.height)) {
+                if (axis.coll === 'yAxis' &&
+                    !axis.staticScale &&
+                    axis.chart.options.chart.height) {
                     axis.isDirty = true;
                     axis.isDirty = true;
                 }
                 }
             });
             });

+ 9 - 12
node_modules/highcharts/es-modules/Core/Axis/TreeGridTick.js

@@ -89,32 +89,28 @@ var TreeGridTick;
      * @private
      * @private
      */
      */
     function renderLabelIcon(tick, params) {
     function renderLabelIcon(tick, params) {
-        var treeGrid = tick.treeGrid, isNew = !treeGrid.labelIcon, renderer = params.renderer, labelBox = params.xy, options = params.options, width = options.width, height = options.height, iconCenter = {
-            x: labelBox.x - (width / 2) - options.padding,
+        var treeGrid = tick.treeGrid, isNew = !treeGrid.labelIcon, renderer = params.renderer, labelBox = params.xy, options = params.options, width = options.width || 0, height = options.height || 0, iconCenter = {
+            x: labelBox.x - (width / 2) - (options.padding || 0),
             y: labelBox.y - (height / 2)
             y: labelBox.y - (height / 2)
         }, rotation = params.collapsed ? 90 : 180, shouldRender = params.show && isNumber(iconCenter.y);
         }, rotation = params.collapsed ? 90 : 180, shouldRender = params.show && isNumber(iconCenter.y);
         var icon = treeGrid.labelIcon;
         var icon = treeGrid.labelIcon;
         if (!icon) {
         if (!icon) {
             treeGrid.labelIcon = icon = renderer
             treeGrid.labelIcon = icon = renderer
-                .path(renderer.symbols[options.type](options.x, options.y, width, height))
+                .path(renderer.symbols[options.type](options.x || 0, options.y || 0, width, height))
                 .addClass('highcharts-label-icon')
                 .addClass('highcharts-label-icon')
                 .add(params.group);
                 .add(params.group);
         }
         }
         // Set the new position, and show or hide
         // Set the new position, and show or hide
-        if (!shouldRender) {
-            icon.attr({ y: -9999 }); // #1338
-        }
+        icon.attr({ y: shouldRender ? 0 : -9999 }); // #14904, #1338
         // Presentational attributes
         // Presentational attributes
         if (!renderer.styledMode) {
         if (!renderer.styledMode) {
             icon
             icon
                 .attr({
                 .attr({
-                'stroke-width': 1,
-                'fill': pick(params.color, palette.neutralColor60)
-            })
-                .css({
                 cursor: 'pointer',
                 cursor: 'pointer',
+                'fill': pick(params.color, palette.neutralColor60),
+                'stroke-width': 1,
                 stroke: options.lineColor,
                 stroke: options.lineColor,
-                strokeWidth: options.lineWidth
+                strokeWidth: options.lineWidth || 0
             });
             });
         }
         }
         // Update the icon positions
         // Update the icon positions
@@ -142,7 +138,8 @@ var TreeGridTick;
             level = (node && node.depth) || 1;
             level = (node && node.depth) || 1;
             result.x += (
             result.x += (
             // Add space for symbols
             // Add space for symbols
-            ((symbolOptions.width) + (symbolOptions.padding * 2)) +
+            ((symbolOptions.width || 0) +
+                ((symbolOptions.padding || 0) * 2)) +
                 // Apply indentation
                 // Apply indentation
                 ((level - 1) * indentation));
                 ((level - 1) * indentation));
         }
         }

+ 3 - 5
node_modules/highcharts/es-modules/Core/Axis/ZAxis.js

@@ -105,9 +105,8 @@ var ZAxis = /** @class */ (function (_super) {
         // loop through this axis' series
         // loop through this axis' series
         axis.series.forEach(function (series) {
         axis.series.forEach(function (series) {
             if (series.visible ||
             if (series.visible ||
-                !(chart.options.chart &&
-                    chart.options.chart.ignoreHiddenSeries)) {
-                var seriesOptions = series.options, zData, threshold = seriesOptions.threshold;
+                !chart.options.chart.ignoreHiddenSeries) {
+                var seriesOptions = series.options, zData = void 0, threshold = seriesOptions.threshold;
                 axis.hasVisibleSeries = true;
                 axis.hasVisibleSeries = true;
                 // Validate threshold in logarithmic axes
                 // Validate threshold in logarithmic axes
                 if (axis.positiveValuesOnly && threshold <= 0) {
                 if (axis.positiveValuesOnly && threshold <= 0) {
@@ -128,8 +127,7 @@ var ZAxis = /** @class */ (function (_super) {
         var axis = this;
         var axis = this;
         var chart = axis.chart;
         var chart = axis.chart;
         _super.prototype.setAxisSize.call(this);
         _super.prototype.setAxisSize.call(this);
-        axis.width = axis.len = (chart.options.chart &&
-            chart.options.chart.options3d &&
+        axis.width = axis.len = (chart.options.chart.options3d &&
             chart.options.chart.options3d.depth) || 0;
             chart.options.chart.options3d.depth) || 0;
         axis.right = chart.chartWidth - axis.width - axis.left;
         axis.right = chart.chartWidth - axis.width - axis.left;
     };
     };

+ 91 - 46
node_modules/highcharts/es-modules/Core/Chart/Chart.js

@@ -11,12 +11,14 @@
 import A from '../Animation/AnimationUtilities.js';
 import A from '../Animation/AnimationUtilities.js';
 var animate = A.animate, animObject = A.animObject, setAnimation = A.setAnimation;
 var animate = A.animate, animObject = A.animObject, setAnimation = A.setAnimation;
 import Axis from '../Axis/Axis.js';
 import Axis from '../Axis/Axis.js';
+import F from '../FormatUtilities.js';
+var numberFormat = F.numberFormat;
 import H from '../Globals.js';
 import H from '../Globals.js';
 var charts = H.charts, doc = H.doc, win = H.win;
 var charts = H.charts, doc = H.doc, win = H.win;
 import Legend from '../Legend.js';
 import Legend from '../Legend.js';
 import MSPointer from '../MSPointer.js';
 import MSPointer from '../MSPointer.js';
 import O from '../Options.js';
 import O from '../Options.js';
-var defaultOptions = O.defaultOptions, time = O.time;
+var defaultOptions = O.defaultOptions, defaultTime = O.defaultTime;
 import palette from '../../Core/Color/Palette.js';
 import palette from '../../Core/Color/Palette.js';
 import Pointer from '../Pointer.js';
 import Pointer from '../Pointer.js';
 import SeriesRegistry from '../Series/SeriesRegistry.js';
 import SeriesRegistry from '../Series/SeriesRegistry.js';
@@ -24,14 +26,14 @@ var seriesTypes = SeriesRegistry.seriesTypes;
 import Time from '../Time.js';
 import Time from '../Time.js';
 import U from '../Utilities.js';
 import U from '../Utilities.js';
 import AST from '../Renderer/HTML/AST.js';
 import AST from '../Renderer/HTML/AST.js';
-var addEvent = U.addEvent, attr = U.attr, cleanRecursively = U.cleanRecursively, createElement = U.createElement, css = U.css, defined = U.defined, discardElement = U.discardElement, erase = U.erase, error = U.error, extend = U.extend, find = U.find, fireEvent = U.fireEvent, getStyle = U.getStyle, isArray = U.isArray, isFunction = U.isFunction, isNumber = U.isNumber, isObject = U.isObject, isString = U.isString, merge = U.merge, numberFormat = U.numberFormat, objectEach = U.objectEach, pick = U.pick, pInt = U.pInt, relativeLength = U.relativeLength, removeEvent = U.removeEvent, splat = U.splat, syncTimeout = U.syncTimeout, uniqueKey = U.uniqueKey;
+var addEvent = U.addEvent, attr = U.attr, cleanRecursively = U.cleanRecursively, createElement = U.createElement, css = U.css, defined = U.defined, discardElement = U.discardElement, erase = U.erase, error = U.error, extend = U.extend, find = U.find, fireEvent = U.fireEvent, getStyle = U.getStyle, isArray = U.isArray, isFunction = U.isFunction, isNumber = U.isNumber, isObject = U.isObject, isString = U.isString, merge = U.merge, objectEach = U.objectEach, pick = U.pick, pInt = U.pInt, relativeLength = U.relativeLength, removeEvent = U.removeEvent, splat = U.splat, syncTimeout = U.syncTimeout, uniqueKey = U.uniqueKey;
 var marginNames = H.marginNames;
 var marginNames = H.marginNames;
 /* eslint-disable no-invalid-this, valid-jsdoc */
 /* eslint-disable no-invalid-this, valid-jsdoc */
 /**
 /**
  * The Chart class. The recommended constructor is {@link Highcharts#chart}.
  * The Chart class. The recommended constructor is {@link Highcharts#chart}.
  *
  *
  * @example
  * @example
- * var chart = Highcharts.chart('container', {
+ * let chart = Highcharts.chart('container', {
  *        title: {
  *        title: {
  *               text: 'My chart'
  *               text: 'My chart'
  *        },
  *        },
@@ -82,6 +84,7 @@ var Chart = /** @class */ (function () {
         this.renderer = void 0;
         this.renderer = void 0;
         this.renderTo = void 0;
         this.renderTo = void 0;
         this.series = void 0;
         this.series = void 0;
+        this.sharedClips = {};
         this.spacing = void 0;
         this.spacing = void 0;
         this.spacingBox = void 0;
         this.spacingBox = void 0;
         this.symbolCounter = void 0;
         this.symbolCounter = void 0;
@@ -140,14 +143,11 @@ var Chart = /** @class */ (function () {
      */
      */
     Chart.prototype.init = function (userOptions, callback) {
     Chart.prototype.init = function (userOptions, callback) {
         // Handle regular options
         // Handle regular options
-        var options, 
-        // skip merging data points to increase performance
-        seriesOptions = userOptions.series, userPlotOptions = userOptions.plotOptions || {};
+        var userPlotOptions = userOptions.plotOptions || {};
         // Fire the event with a default function
         // Fire the event with a default function
         fireEvent(this, 'init', { args: arguments }, function () {
         fireEvent(this, 'init', { args: arguments }, function () {
-            userOptions.series = null;
-            options = merge(defaultOptions, userOptions); // do the merge
-            var optionsChart = options.chart || {};
+            var options = merge(defaultOptions, userOptions); // do the merge
+            var optionsChart = options.chart;
             // Override (by copy of user options) or clear tooltip options
             // Override (by copy of user options) or clear tooltip options
             // in chart.options.plotOptions (#6218)
             // in chart.options.plotOptions (#6218)
             objectEach(options.plotOptions, function (typeOptions, type) {
             objectEach(options.plotOptions, function (typeOptions, type) {
@@ -161,8 +161,6 @@ var Chart = /** @class */ (function () {
             options.tooltip.userOptions = (userOptions.chart &&
             options.tooltip.userOptions = (userOptions.chart &&
                 userOptions.chart.forExport &&
                 userOptions.chart.forExport &&
                 userOptions.tooltip.userOptions) || userOptions.tooltip;
                 userOptions.tooltip.userOptions) || userOptions.tooltip;
-            // set back the series data
-            options.series = userOptions.series = seriesOptions;
             /**
             /**
              * The original options given to the constructor or a chart factory
              * The original options given to the constructor or a chart factory
              * like {@link Highcharts.chart} and {@link Highcharts.stockChart}.
              * like {@link Highcharts.chart} and {@link Highcharts.stockChart}.
@@ -369,21 +367,49 @@ var Chart = /** @class */ (function () {
      * @param {number} plotY
      * @param {number} plotY
      * Pixel y relative to the plot area.
      * Pixel y relative to the plot area.
      *
      *
-     * @param {boolean} [inverted]
-     * Whether the chart is inverted.
+     * @param {Highcharts.ChartIsInsideOptionsObject} [options]
+     * Options object.
      *
      *
      * @return {boolean}
      * @return {boolean}
      * Returns true if the given point is inside the plot area.
      * Returns true if the given point is inside the plot area.
      */
      */
-    Chart.prototype.isInsidePlot = function (plotX, plotY, inverted) {
-        var x = inverted ? plotY : plotX, y = inverted ? plotX : plotY, e = {
+    Chart.prototype.isInsidePlot = function (plotX, plotY, options) {
+        if (options === void 0) { options = {}; }
+        var _a = this, inverted = _a.inverted, plotBox = _a.plotBox, plotLeft = _a.plotLeft, plotTop = _a.plotTop, scrollablePlotBox = _a.scrollablePlotBox, _b = _a.scrollingContainer, _c = _b === void 0 ? {
+            scrollLeft: 0,
+            scrollTop: 0
+        } : _b, scrollLeft = _c.scrollLeft, scrollTop = _c.scrollTop;
+        var series = options.series;
+        var box = (options.visiblePlotOnly && scrollablePlotBox) || plotBox;
+        var x = options.inverted ? plotY : plotX;
+        var y = options.inverted ? plotX : plotY;
+        var e = {
             x: x,
             x: x,
             y: y,
             y: y,
-            isInsidePlot: x >= 0 &&
-                x <= this.plotWidth &&
-                y >= 0 &&
-                y <= this.plotHeight
+            isInsidePlot: true
         };
         };
+        if (!options.ignoreX) {
+            var xAxis = (series && (inverted ? series.yAxis : series.xAxis)) || {
+                pos: plotLeft,
+                len: Infinity
+            };
+            var chartX = options.paneCoordinates ? xAxis.pos + x : plotLeft + x;
+            if (!(chartX >= Math.max(scrollLeft + plotLeft, xAxis.pos) &&
+                chartX <= Math.min(scrollLeft + plotLeft + box.width, xAxis.pos + xAxis.len))) {
+                e.isInsidePlot = false;
+            }
+        }
+        if (!options.ignoreY && e.isInsidePlot) {
+            var yAxis = (series && (inverted ? series.xAxis : series.yAxis)) || {
+                pos: plotTop,
+                len: Infinity
+            };
+            var chartY = options.paneCoordinates ? yAxis.pos + y : plotTop + y;
+            if (!(chartY >= Math.max(scrollTop + plotTop, yAxis.pos) &&
+                chartY <= Math.min(scrollTop + plotTop + box.height, yAxis.pos + yAxis.len))) {
+                e.isInsidePlot = false;
+            }
+        }
         fireEvent(this, 'afterIsInsidePlot', e);
         fireEvent(this, 'afterIsInsidePlot', e);
         return e.isInsidePlot;
         return e.isInsidePlot;
     };
     };
@@ -993,8 +1019,10 @@ var Chart = /** @class */ (function () {
                 lineHeight: 'normal',
                 lineHeight: 'normal',
                 zIndex: 0,
                 zIndex: 0,
                 '-webkit-tap-highlight-color': 'rgba(0,0,0,0)',
                 '-webkit-tap-highlight-color': 'rgba(0,0,0,0)',
-                userSelect: 'none' // #13503
-            }, optionsChart.style);
+                userSelect: 'none',
+                'touch-action': 'manipulation',
+                outline: 'none'
+            }, optionsChart.style || {});
         }
         }
         /**
         /**
          * The containing HTML element of the chart. The container is
          * The containing HTML element of the chart. The container is
@@ -1185,7 +1213,7 @@ var Chart = /** @class */ (function () {
      * @sample highcharts/members/chart-setsize-jquery-resizable/
      * @sample highcharts/members/chart-setsize-jquery-resizable/
      *         Add a jQuery UI resizable
      *         Add a jQuery UI resizable
      * @sample stock/members/chart-setsize/
      * @sample stock/members/chart-setsize/
-     *         Highstock with UI resizable
+     *         Highcharts Stock with UI resizable
      *
      *
      * @function Highcharts.Chart#setSize
      * @function Highcharts.Chart#setSize
      *
      *
@@ -1328,6 +1356,7 @@ var Chart = /** @class */ (function () {
                 axis.setAxisSize();
                 axis.setAxisSize();
                 axis.setAxisTranslation();
                 axis.setAxisTranslation();
             });
             });
+            renderer.alignElements();
         }
         }
         fireEvent(chart, 'afterSetChartSize', { skipAxes: skipAxes });
         fireEvent(chart, 'afterSetChartSize', { skipAxes: skipAxes });
     };
     };
@@ -1727,7 +1756,7 @@ var Chart = /** @class */ (function () {
      * @sample highcharts/members/chart-destroy/
      * @sample highcharts/members/chart-destroy/
      *         Destroy the chart from a button
      *         Destroy the chart from a button
      * @sample stock/members/chart-destroy/
      * @sample stock/members/chart-destroy/
-     *         Destroy with Highstock
+     *         Destroy with Highcharts Stock
      *
      *
      * @function Highcharts.Chart#destroy
      * @function Highcharts.Chart#destroy
      *
      *
@@ -1821,7 +1850,7 @@ var Chart = /** @class */ (function () {
         // Run an event after axes and series are initialized, but before
         // Run an event after axes and series are initialized, but before
         // render. At this stage, the series data is indexed and cached in the
         // render. At this stage, the series data is indexed and cached in the
         // xData and yData arrays, so we can access those before rendering. Used
         // xData and yData arrays, so we can access those before rendering. Used
-        // in Highstock.
+        // in Highcharts Stock.
         fireEvent(chart, 'beforeRender');
         fireEvent(chart, 'beforeRender');
         // depends on inverted and on margins being set
         // depends on inverted and on margins being set
         if (Pointer) {
         if (Pointer) {
@@ -1887,7 +1916,7 @@ var Chart = /** @class */ (function () {
      * @sample highcharts/members/chart-addseries/
      * @sample highcharts/members/chart-addseries/
      *         Add a series from a button
      *         Add a series from a button
      * @sample stock/members/chart-addseries/
      * @sample stock/members/chart-addseries/
-     *         Add a series in Highstock
+     *         Add a series in Highcharts Stock
      *
      *
      * @function Highcharts.Chart#addSeries
      * @function Highcharts.Chart#addSeries
      *
      *
@@ -2010,9 +2039,6 @@ var Chart = /** @class */ (function () {
         else {
         else {
             axis = new Axis(this, userOptions);
             axis = new Axis(this, userOptions);
         }
         }
-        // Push the new axis options to the chart options
-        chartOptions[type] = splat(chartOptions[type] || {});
-        chartOptions[type].push(userOptions);
         if (isColorAxis) {
         if (isColorAxis) {
             this.isDirtyLegend = true;
             this.isDirtyLegend = true;
             // Clear before 'bindAxes' (#11924)
             // Clear before 'bindAxes' (#11924)
@@ -2039,7 +2065,7 @@ var Chart = /** @class */ (function () {
      * @sample highcharts/members/chart-showloading/
      * @sample highcharts/members/chart-showloading/
      *         Apply different text labels
      *         Apply different text labels
      * @sample stock/members/chart-show-hide-loading/
      * @sample stock/members/chart-show-hide-loading/
-     *         Toggle loading in Highstock
+     *         Toggle loading in Highcharts Stock
      *
      *
      * @function Highcharts.Chart#showLoading
      * @function Highcharts.Chart#showLoading
      *
      *
@@ -2102,7 +2128,7 @@ var Chart = /** @class */ (function () {
      * @sample highcharts/members/chart-hideloading/
      * @sample highcharts/members/chart-hideloading/
      *         Show and hide loading from a button
      *         Show and hide loading from a button
      * @sample stock/members/chart-show-hide-loading/
      * @sample stock/members/chart-show-hide-loading/
-     *         Toggle loading in Highstock
+     *         Toggle loading in Highcharts Stock
      *
      *
      * @function Highcharts.Chart#hideLoading
      * @function Highcharts.Chart#hideLoading
      */
      */
@@ -2250,7 +2276,7 @@ var Chart = /** @class */ (function () {
             // first with global time, then updated with time options, we need
             // first with global time, then updated with time options, we need
             // to create a new Time instance to avoid mutating the global time
             // to create a new Time instance to avoid mutating the global time
             // (#10536).
             // (#10536).
-            if (this.time === time) {
+            if (this.time === defaultTime) {
                 this.time = new Time(options.time);
                 this.time = new Time(options.time);
             }
             }
             // If we're updating, the time class is different from other chart
             // If we're updating, the time class is different from other chart
@@ -2281,7 +2307,7 @@ var Chart = /** @class */ (function () {
                 // Else, just merge the options. For nodes like loading, noData,
                 // Else, just merge the options. For nodes like loading, noData,
                 // plotOptions
                 // plotOptions
             }
             }
-            else if (key !== 'color' &&
+            else if (key !== 'colors' &&
                 chart.collectionsWithUpdate.indexOf(key) === -1) {
                 chart.collectionsWithUpdate.indexOf(key) === -1) {
                 merge(true, chart.options[key], options[key]);
                 merge(true, chart.options[key], options[key]);
             }
             }
@@ -2301,15 +2327,13 @@ var Chart = /** @class */ (function () {
             if (options[coll]) {
             if (options[coll]) {
                 // In stock charts, the navigator series are also part of the
                 // In stock charts, the navigator series are also part of the
                 // chart.series array, but those series should not be handled
                 // chart.series array, but those series should not be handled
-                // here (#8196).
-                if (coll === 'series') {
-                    indexMap = [];
-                    chart[coll].forEach(function (s, i) {
-                        if (!s.options.isInternal) {
-                            indexMap.push(pick(s.options.index, i));
-                        }
-                    });
-                }
+                // here (#8196) and neither should the navigator axis (#9671).
+                indexMap = [];
+                chart[coll].forEach(function (s, i) {
+                    if (!s.options.isInternal) {
+                        indexMap.push(pick(s.options.index, i));
+                    }
+                });
                 splat(options[coll]).forEach(function (newOptions, i) {
                 splat(options[coll]).forEach(function (newOptions, i) {
                     var hasId = defined(newOptions.id);
                     var hasId = defined(newOptions.id);
                     var item;
                     var item;
@@ -2442,9 +2466,9 @@ var Chart = /** @class */ (function () {
      */
      */
     Chart.prototype.showResetZoom = function () {
     Chart.prototype.showResetZoom = function () {
         var chart = this, lang = defaultOptions.lang, btnOptions = chart.options.chart.resetZoomButton, theme = btnOptions.theme, states = theme.states, alignTo = (btnOptions.relativeTo === 'chart' ||
         var chart = this, lang = defaultOptions.lang, btnOptions = chart.options.chart.resetZoomButton, theme = btnOptions.theme, states = theme.states, alignTo = (btnOptions.relativeTo === 'chart' ||
-            btnOptions.relativeTo === 'spaceBox' ?
+            btnOptions.relativeTo === 'spacingBox' ?
             null :
             null :
-            this.scrollablePlotBox || 'plotBox');
+            'scrollablePlotBox');
         /**
         /**
          * @private
          * @private
          */
          */
@@ -2593,11 +2617,11 @@ var Chart = /** @class */ (function () {
                         }
                         }
                     });
                     });
                 }
                 }
-                paddedMin = Math.min(pick(panningState === null || panningState === void 0 ? void 0 : panningState.startMin, extremes.dataMin), halfPointRange ?
+                paddedMin = Math.min(pick(panningState && panningState.startMin, extremes.dataMin), halfPointRange ?
                     extremes.min :
                     extremes.min :
                     axis.toValue(axis.toPixels(extremes.min) -
                     axis.toValue(axis.toPixels(extremes.min) -
                         axis.minPixelPadding));
                         axis.minPixelPadding));
-                paddedMax = Math.max(pick(panningState === null || panningState === void 0 ? void 0 : panningState.startMax, extremes.dataMax), halfPointRange ?
+                paddedMax = Math.max(pick(panningState && panningState.startMax, extremes.dataMax), halfPointRange ?
                     extremes.max :
                     extremes.max :
                     axis.toValue(axis.toPixels(extremes.max) +
                     axis.toValue(axis.toPixels(extremes.max) +
                         axis.minPixelPadding));
                         axis.minPixelPadding));
@@ -2729,7 +2753,7 @@ extend(Chart.prototype, {
  *
  *
  * @example
  * @example
  * // Render a chart in to div#container
  * // Render a chart in to div#container
- * var chart = Highcharts.chart('container', {
+ * let chart = Highcharts.chart('container', {
  *     title: {
  *     title: {
  *         text: 'My chart'
  *         text: 'My chart'
  *     },
  *     },
@@ -2860,4 +2884,25 @@ export default Chart;
 *        more operations on the chart, it is a good idea to set redraw to false
 *        more operations on the chart, it is a good idea to set redraw to false
 *        and call {@link Chart#redraw} after.
 *        and call {@link Chart#redraw} after.
 */
 */
+/**
+ * @interface Highcharts.ChartIsInsideOptionsObject
+ */ /**
+* @name Highcharts.ChartIsInsideOptionsObject#ignoreX
+* @type {boolean|undefined}
+*/ /**
+* @name Highcharts.ChartIsInsideOptionsObject#ignoreY
+* @type {boolean|undefined}
+*/ /**
+* @name Highcharts.ChartIsInsideOptionsObject#inverted
+* @type {boolean|undefined}
+*/ /**
+* @name Highcharts.ChartIsInsideOptionsObject#paneCoordinates
+* @type {boolean|undefined}
+*/ /**
+* @name Highcharts.ChartIsInsideOptionsObject#series
+* @type {Highcharts.Series|undefined}
+*/ /**
+* @name Highcharts.ChartIsInsideOptionsObject#visiblePlotOnly
+* @type {boolean|undefined}
+*/
 ''; // include doclets above in transpilat
 ''; // include doclets above in transpilat

+ 1 - 1
node_modules/highcharts/es-modules/Core/Chart/Chart3D.js

@@ -631,7 +631,7 @@ var Chart3D;
          * Whether it is a 3D chart.
          * Whether it is a 3D chart.
          */
          */
         chartProto.is3d = function () {
         chartProto.is3d = function () {
-            return (this.options.chart.options3d &&
+            return Boolean(this.options.chart.options3d &&
                 this.options.chart.options3d.enabled); // #4280
                 this.options.chart.options3d.enabled); // #4280
         };
         };
         chartProto.propsRequireDirtyBox.push('chart.options3d');
         chartProto.propsRequireDirtyBox.push('chart.options3d');

+ 146 - 91
node_modules/highcharts/es-modules/Core/Chart/GanttChart.js

@@ -9,106 +9,161 @@
  *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!
  *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!
  *
  *
  * */
  * */
+var __extends = (this && this.__extends) || (function () {
+    var extendStatics = function (d, b) {
+        extendStatics = Object.setPrototypeOf ||
+            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
+            function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
+        return extendStatics(d, b);
+    };
+    return function (d, b) {
+        extendStatics(d, b);
+        function __() { this.constructor = d; }
+        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
+    };
+})();
 import Chart from './Chart.js';
 import Chart from './Chart.js';
-import H from '../Globals.js';
+import O from '../../Core/Options.js';
+var getOptions = O.getOptions;
 import U from '../Utilities.js';
 import U from '../Utilities.js';
-var getOptions = U.getOptions, isArray = U.isArray, merge = U.merge, splat = U.splat;
+var isArray = U.isArray, merge = U.merge, splat = U.splat;
 import '../../Series/Gantt/GanttSeries.js';
 import '../../Series/Gantt/GanttSeries.js';
 /**
 /**
- * Factory function for Gantt charts.
+ * Gantt-optimized chart. Use {@link Highcharts.Chart|Chart} for common charts.
  *
  *
- * @example
- * // Render a chart in to div#container
- * var chart = Highcharts.ganttChart('container', {
- *     title: {
- *         text: 'My chart'
- *     },
- *     series: [{
- *         data: ...
- *     }]
- * });
+ * @requires modules/gantt
  *
  *
- * @function Highcharts.ganttChart
- *
- * @param {string|Highcharts.HTMLDOMElement} renderTo
- *        The DOM element to render to, or its id.
- *
- * @param {Highcharts.Options} options
- *        The chart options structure.
- *
- * @param {Highcharts.ChartCallbackFunction} [callback]
- *        Function to run when the chart has loaded and and all external images
- *        are loaded. Defining a
- *        [chart.events.load](https://api.highcharts.com/highcharts/chart.events.load)
- *        handler is equivalent.
- *
- * @return {Highcharts.Chart}
- *         Returns the Chart object.
+ * @class
+ * @name Highcharts.GanttChart
+ * @extends Highcharts.Chart
  */
  */
-H.ganttChart = function (renderTo, options, callback) {
-    var hasRenderToArg = typeof renderTo === 'string' || renderTo.nodeName, seriesOptions = options.series, defaultOptions = getOptions(), defaultLinkedTo, userOptions = options;
-    options = arguments[hasRenderToArg ? 1 : 0];
-    // If user hasn't defined axes as array, make it into an array and add a
-    // second axis by default.
-    if (!isArray(options.xAxis)) {
-        options.xAxis = [options.xAxis || {}, {}];
+var GanttChart = /** @class */ (function (_super) {
+    __extends(GanttChart, _super);
+    function GanttChart() {
+        return _super !== null && _super.apply(this, arguments) || this;
     }
     }
-    // apply X axis options to both single and multi x axes
-    options.xAxis = options.xAxis.map(function (xAxisOptions, i) {
-        if (i === 1) { // Second xAxis
-            defaultLinkedTo = 0;
+    /**
+     * Initializes the chart. The constructor's arguments are passed on
+     * directly.
+     *
+     * @function Highcharts.GanttChart#init
+     *
+     * @param {Highcharts.Options} userOptions
+     *        Custom options.
+     *
+     * @param {Function} [callback]
+     *        Function to run when the chart has loaded and and all external
+     *        images are loaded.
+     *
+     * @return {void}
+     *
+     * @fires Highcharts.GanttChart#event:init
+     * @fires Highcharts.GanttChart#event:afterInit
+     */
+    GanttChart.prototype.init = function (userOptions, callback) {
+        var seriesOptions = userOptions.series, defaultOptions = getOptions(), defaultLinkedTo;
+        // If user hasn't defined axes as array, make it into an array and add a
+        // second axis by default.
+        if (!isArray(userOptions.xAxis)) {
+            userOptions.xAxis = [userOptions.xAxis || {}, {}];
         }
         }
-        return merge(defaultOptions.xAxis, {
-            grid: {
-                enabled: true
-            },
-            opposite: true,
-            linkedTo: defaultLinkedTo
-        }, xAxisOptions, // user options
-        {
-            type: 'datetime'
+        // apply X axis options to both single and multi x axes
+        userOptions.xAxis = userOptions.xAxis.map(function (xAxisOptions, i) {
+            if (i === 1) { // Second xAxis
+                defaultLinkedTo = 0;
+            }
+            return merge(defaultOptions.xAxis, {
+                grid: {
+                    enabled: true
+                },
+                opposite: true,
+                linkedTo: defaultLinkedTo
+            }, xAxisOptions, // user options
+            {
+                type: 'datetime'
+            });
         });
         });
-    });
-    // apply Y axis options to both single and multi y axes
-    options.yAxis = (splat(options.yAxis || {})).map(function (yAxisOptions) {
-        return merge(defaultOptions.yAxis, // #3802
-        {
-            grid: {
-                enabled: true
+        // apply Y axis options to both single and multi y axes
+        userOptions.yAxis = (splat(userOptions.yAxis || {})).map(function (yAxisOptions) {
+            return merge(defaultOptions.yAxis, // #3802
+            {
+                grid: {
+                    enabled: true
+                },
+                staticScale: 50,
+                reversed: true,
+                // Set default type treegrid, but only if 'categories' is
+                // undefined
+                type: yAxisOptions.categories ? yAxisOptions.type : 'treegrid'
+            }, yAxisOptions // user options
+            );
+        });
+        delete userOptions.series;
+        userOptions = merge(true, {
+            chart: {
+                type: 'gantt'
+            },
+            title: {
+                text: null
             },
             },
-            staticScale: 50,
-            reversed: true,
-            // Set default type treegrid, but only if 'categories' is
-            // undefined
-            type: yAxisOptions.categories ? yAxisOptions.type : 'treegrid'
-        }, yAxisOptions // user options
-        );
-    });
-    options.series = null;
-    options = merge(true, {
-        chart: {
-            type: 'gantt'
-        },
-        title: {
-            text: null
-        },
-        legend: {
-            enabled: false
-        },
-        navigator: {
-            series: { type: 'gantt' },
-            // Bars were clipped, #14060.
-            yAxis: {
-                type: 'category'
+            legend: {
+                enabled: false
+            },
+            navigator: {
+                series: { type: 'gantt' },
+                // Bars were clipped, #14060.
+                yAxis: {
+                    type: 'category'
+                }
             }
             }
-        }
-    }, options, // user's options
-    // forced options
-    {
-        isGantt: true
-    });
-    options.series = userOptions.series = seriesOptions;
-    return hasRenderToArg ?
-        new Chart(renderTo, options, callback) :
-        new Chart(options, options); // @todo does not look correct
-};
+        }, userOptions, // user's options
+        // forced options
+        {
+            isGantt: true
+        });
+        userOptions.series = seriesOptions;
+        _super.prototype.init.call(this, userOptions, callback);
+    };
+    return GanttChart;
+}(Chart));
+/* eslint-disable valid-jsdoc */
+(function (GanttChart) {
+    /**
+     * The factory function for creating new gantt charts. Creates a new {@link
+     * Highcharts.GanttChart|GanttChart} object with different default options
+     * than the basic Chart.
+     *
+     * @example
+     * // Render a chart in to div#container
+     * let chart = Highcharts.ganttChart('container', {
+     *     title: {
+     *         text: 'My chart'
+     *     },
+     *     series: [{
+     *         data: ...
+     *     }]
+     * });
+     *
+     * @function Highcharts.ganttChart
+     *
+     * @param {string|Highcharts.HTMLDOMElement} renderTo
+     *        The DOM element to render to, or its id.
+     *
+     * @param {Highcharts.Options} options
+     *        The chart options structure.
+     *
+     * @param {Highcharts.ChartCallbackFunction} [callback]
+     *        Function to run when the chart has loaded and and all external
+     *        images are loaded. Defining a
+     *        [chart.events.load](https://api.highcharts.com/highcharts/chart.events.load)
+     *        handler is equivalent.
+     *
+     * @return {Highcharts.GanttChart}
+     *         Returns the Chart object.
+     */
+    function ganttChart(a, b, c) {
+        return new GanttChart(a, b, c);
+    }
+    GanttChart.ganttChart = ganttChart;
+})(GanttChart || (GanttChart = {}));
+export default GanttChart;

+ 283 - 154
node_modules/highcharts/es-modules/Core/Chart/StockChart.js

@@ -8,9 +8,27 @@
  *
  *
  * */
  * */
 'use strict';
 'use strict';
+var __extends = (this && this.__extends) || (function () {
+    var extendStatics = function (d, b) {
+        extendStatics = Object.setPrototypeOf ||
+            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
+            function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
+        return extendStatics(d, b);
+    };
+    return function (d, b) {
+        extendStatics(d, b);
+        function __() { this.constructor = d; }
+        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
+    };
+})();
+import A from '../Animation/AnimationUtilities.js';
+var animObject = A.animObject;
 import Axis from '../Axis/Axis.js';
 import Axis from '../Axis/Axis.js';
 import Chart from '../Chart/Chart.js';
 import Chart from '../Chart/Chart.js';
-import H from '../Globals.js';
+import F from '../../Core/FormatUtilities.js';
+var format = F.format;
+import O from '../../Core/Options.js';
+var getOptions = O.getOptions;
 import palette from '../../Core/Color/Palette.js';
 import palette from '../../Core/Color/Palette.js';
 import Point from '../Series/Point.js';
 import Point from '../Series/Point.js';
 var pointTooltipFormatter = Point.prototype.tooltipFormatter;
 var pointTooltipFormatter = Point.prototype.tooltipFormatter;
@@ -18,7 +36,7 @@ import Series from '../Series/Series.js';
 var _a = Series.prototype, seriesInit = _a.init, seriesProcessData = _a.processData;
 var _a = Series.prototype, seriesInit = _a.init, seriesProcessData = _a.processData;
 import SVGRenderer from '../Renderer/SVG/SVGRenderer.js';
 import SVGRenderer from '../Renderer/SVG/SVGRenderer.js';
 import U from '../Utilities.js';
 import U from '../Utilities.js';
-var addEvent = U.addEvent, arrayMax = U.arrayMax, arrayMin = U.arrayMin, clamp = U.clamp, defined = U.defined, extend = U.extend, find = U.find, format = U.format, getOptions = U.getOptions, isNumber = U.isNumber, isString = U.isString, merge = U.merge, pick = U.pick, splat = U.splat;
+var addEvent = U.addEvent, arrayMax = U.arrayMax, arrayMin = U.arrayMin, clamp = U.clamp, defined = U.defined, extend = U.extend, find = U.find, isNumber = U.isNumber, isString = U.isString, merge = U.merge, pick = U.pick, splat = U.splat;
 import '../Pointer.js';
 import '../Pointer.js';
 // Has a dependency on Navigator due to the use of
 // Has a dependency on Navigator due to the use of
 // defaultOptions.navigator
 // defaultOptions.navigator
@@ -29,58 +47,172 @@ import '../Scrollbar.js';
 // Has a dependency on RangeSelector due to the use of
 // Has a dependency on RangeSelector due to the use of
 // defaultOptions.rangeSelector
 // defaultOptions.rangeSelector
 import '../../Extensions/RangeSelector.js';
 import '../../Extensions/RangeSelector.js';
-/* eslint-disable no-invalid-this, valid-jsdoc */
-/* *
+/**
+ * Stock-optimized chart. Use {@link Highcharts.Chart|Chart} for common charts.
  *
  *
- *  Factory
+ * @requires modules/stock
  *
  *
- * */
+ * @class
+ * @name Highcharts.StockChart
+ * @extends Highcharts.Chart
+ */
+var StockChart = /** @class */ (function (_super) {
+    __extends(StockChart, _super);
+    function StockChart() {
+        return _super !== null && _super.apply(this, arguments) || this;
+    }
+    /**
+     * Initializes the chart. The constructor's arguments are passed on
+     * directly.
+     *
+     * @function Highcharts.StockChart#init
+     *
+     * @param {Highcharts.Options} userOptions
+     *        Custom options.
+     *
+     * @param {Function} [callback]
+     *        Function to run when the chart has loaded and and all external
+     *        images are loaded.
+     *
+     * @return {void}
+     *
+     * @fires Highcharts.StockChart#event:init
+     * @fires Highcharts.StockChart#event:afterInit
+     */
+    StockChart.prototype.init = function (userOptions, callback) {
+        var defaultOptions = getOptions(), xAxisOptions = userOptions.xAxis, yAxisOptions = userOptions.yAxis, 
+        // Always disable startOnTick:true on the main axis when the
+        // navigator is enabled (#1090)
+        navigatorEnabled = pick(userOptions.navigator && userOptions.navigator.enabled, defaultOptions.navigator.enabled, true);
+        // Avoid doing these twice
+        userOptions.xAxis = userOptions.yAxis = void 0;
+        var options = merge({
+            chart: {
+                panning: {
+                    enabled: true,
+                    type: 'x'
+                },
+                pinchType: 'x'
+            },
+            navigator: {
+                enabled: navigatorEnabled
+            },
+            scrollbar: {
+                // #4988 - check if setOptions was called
+                enabled: pick(defaultOptions.scrollbar.enabled, true)
+            },
+            rangeSelector: {
+                // #4988 - check if setOptions was called
+                enabled: pick(defaultOptions.rangeSelector.enabled, true)
+            },
+            title: {
+                text: null
+            },
+            tooltip: {
+                split: pick(defaultOptions.tooltip.split, true),
+                crosshairs: true
+            },
+            legend: {
+                enabled: false
+            }
+        }, userOptions, // user's options
+        {
+            isStock: true // internal flag
+        });
+        userOptions.xAxis = xAxisOptions;
+        userOptions.yAxis = yAxisOptions;
+        // apply X axis options to both single and multi y axes
+        options.xAxis = splat(userOptions.xAxis || {}).map(function (xAxisOptions, i) {
+            return merge(getDefaultAxisOptions('xAxis', xAxisOptions), defaultOptions.xAxis, // #3802
+            defaultOptions.xAxis && defaultOptions.xAxis[i], // #7690
+            xAxisOptions, // user options
+            getForcedAxisOptions('xAxis', userOptions));
+        });
+        // apply Y axis options to both single and multi y axes
+        options.yAxis = splat(userOptions.yAxis || {}).map(function (yAxisOptions, i) {
+            return merge(getDefaultAxisOptions('yAxis', yAxisOptions), defaultOptions.yAxis, // #3802
+            defaultOptions.yAxis && defaultOptions.yAxis[i], // #7690
+            yAxisOptions // user options
+            );
+        });
+        _super.prototype.init.call(this, options, callback);
+    };
+    /**
+     * Factory for creating different axis types.
+     * Extended to add stock defaults.
+     *
+     * @private
+     * @function Highcharts.StockChart#createAxis
+     *
+     * @param {string} type
+     *        An axis type.
+     *
+     * @param {Chart.CreateAxisOptionsObject} options
+     *        The axis creation options.
+     *
+     * @return {Highcharts.Axis | Highcharts.ColorAxis}
+     */
+    StockChart.prototype.createAxis = function (type, options) {
+        options.axis = merge(getDefaultAxisOptions(type, options.axis), options.axis, getForcedAxisOptions(type, this.userOptions));
+        return _super.prototype.createAxis.call(this, type, options);
+    };
+    return StockChart;
+}(Chart));
+/* eslint-disable no-invalid-this, valid-jsdoc */
+(function (StockChart) {
+    /**
+     * Factory function for creating new stock charts. Creates a new
+     * {@link Highcharts.StockChart|StockChart} object with different default
+     * options than the basic Chart.
+     *
+     * @example
+     * let chart = Highcharts.stockChart('container', {
+     *     series: [{
+     *         data: [1, 2, 3, 4, 5, 6, 7, 8, 9],
+     *         pointInterval: 24 * 60 * 60 * 1000
+     *     }]
+     * });
+     *
+     * @function Highcharts.stockChart
+     *
+     * @param {string|Highcharts.HTMLDOMElement} [renderTo]
+     *        The DOM element to render to, or its id.
+     *
+     * @param {Highcharts.Options} options
+     *        The chart options structure as described in the
+     *        [options reference](https://api.highcharts.com/highstock).
+     *
+     * @param {Highcharts.ChartCallbackFunction} [callback]
+     *        A function to execute when the chart object is finished loading
+     *        and rendering. In most cases the chart is built in one thread,
+     *        but in Internet Explorer version 8 or less the chart is sometimes
+     *        initialized before the document is ready, and in these cases the
+     *        chart object will not be finished synchronously. As a
+     *        consequence, code that relies on the newly built Chart object
+     *        should always run in the callback. Defining a
+     *        [chart.events.load](https://api.highcharts.com/highstock/chart.events.load)
+     *        handler is equivalent.
+     *
+     * @return {Highcharts.StockChart}
+     *         The chart object.
+     */
+    function stockChart(a, b, c) {
+        return new StockChart(a, b, c);
+    }
+    StockChart.stockChart = stockChart;
+})(StockChart || (StockChart = {}));
 /**
 /**
- * Factory function for creating new stock charts. Creates a new
- * {@link Highcharts.Chart|Chart} object with different default options than the
- * basic Chart.
- *
- * @example
- * var chart = Highcharts.stockChart('container', {
- *     series: [{
- *         data: [1, 2, 3, 4, 5, 6, 7, 8, 9],
- *         pointInterval: 24 * 60 * 60 * 1000
- *     }]
- * });
- *
- * @function Highcharts.stockChart
- *
- * @param {string|Highcharts.HTMLDOMElement} [renderTo]
- *        The DOM element to render to, or its id.
- *
- * @param {Highcharts.Options} options
- *        The chart options structure as described in the
- *        [options reference](https://api.highcharts.com/highstock).
- *
- * @param {Highcharts.ChartCallbackFunction} [callback]
- *        A function to execute when the chart object is finished loading and
- *        rendering. In most cases the chart is built in one thread, but in
- *        Internet Explorer version 8 or less the chart is sometimes
- *        initialized before the document is ready, and in these cases the
- *        chart object will not be finished synchronously. As a consequence,
- *        code that relies on the newly built Chart object should always run in
- *        the callback. Defining a
- *        [chart.events.load](https://api.highcharts.com/highstock/chart.events.load)
- *        handler is equivalent.
- *
- * @return {Highcharts.Chart}
- *         The chart object.
+ * Get stock-specific default axis options.
+ *
+ * @private
+ * @function getDefaultAxisOptions
+ * @param {string} type
+ * @param {Highcharts.AxisOptions} options
+ * @return {Highcharts.AxisOptions}
  */
  */
-function stockChart(a, b, c) {
-    var hasRenderToArg = isString(a) || a.nodeName, options = arguments[hasRenderToArg ? 1 : 0], userOptions = options, 
-    // to increase performance, don't merge the data
-    seriesOptions = options.series, defaultOptions = getOptions(), opposite, 
-    // Always disable startOnTick:true on the main axis when the navigator
-    // is enabled (#1090)
-    navigatorEnabled = pick(options.navigator && options.navigator.enabled, defaultOptions.navigator.enabled, true);
-    // apply X axis options to both single and multi y axes
-    options.xAxis = splat(options.xAxis || {}).map(function (xAxisOptions, i) {
-        return merge({
+function getDefaultAxisOptions(type, options) {
+    if (type === 'xAxis') {
+        return {
             minPadding: 0,
             minPadding: 0,
             maxPadding: 0,
             maxPadding: 0,
             overscroll: 0,
             overscroll: 0,
@@ -92,25 +224,14 @@ function stockChart(a, b, c) {
                 overflow: 'justify'
                 overflow: 'justify'
             },
             },
             showLastLabel: true
             showLastLabel: true
-        }, defaultOptions.xAxis, // #3802
-        defaultOptions.xAxis && defaultOptions.xAxis[i], // #7690
-        xAxisOptions, // user options
-        {
-            type: 'datetime',
-            categories: null
-        }, (navigatorEnabled ? {
-            startOnTick: false,
-            endOnTick: false
-        } : null));
-    });
-    // apply Y axis options to both single and multi y axes
-    options.yAxis = splat(options.yAxis || {}).map(function (yAxisOptions, i) {
-        opposite = pick(yAxisOptions.opposite, true);
-        return merge({
+        };
+    }
+    if (type === 'yAxis') {
+        return {
             labels: {
             labels: {
                 y: -2
                 y: -2
             },
             },
-            opposite: opposite,
+            opposite: pick(options.opposite, true),
             /**
             /**
              * @default {highcharts} true
              * @default {highcharts} true
              * @default {highstock} false
              * @default {highstock} false
@@ -120,54 +241,41 @@ function stockChart(a, b, c) {
              */
              */
             showLastLabel: !!(
             showLastLabel: !!(
             // #6104, show last label by default for category axes
             // #6104, show last label by default for category axes
-            yAxisOptions.categories ||
-                yAxisOptions.type === 'category'),
+            options.categories ||
+                options.type === 'category'),
             title: {
             title: {
                 text: null
                 text: null
             }
             }
-        }, defaultOptions.yAxis, // #3802
-        defaultOptions.yAxis && defaultOptions.yAxis[i], // #7690
-        yAxisOptions // user options
-        );
-    });
-    options.series = null;
-    options = merge({
-        chart: {
-            panning: {
-                enabled: true,
-                type: 'x'
-            },
-            pinchType: 'x'
-        },
-        navigator: {
-            enabled: navigatorEnabled
-        },
-        scrollbar: {
-            // #4988 - check if setOptions was called
-            enabled: pick(defaultOptions.scrollbar.enabled, true)
-        },
-        rangeSelector: {
-            // #4988 - check if setOptions was called
-            enabled: pick(defaultOptions.rangeSelector.enabled, true)
-        },
-        title: {
-            text: null
-        },
-        tooltip: {
-            split: pick(defaultOptions.tooltip.split, true),
-            crosshairs: true
-        },
-        legend: {
-            enabled: false
+        };
+    }
+    return {};
+}
+/**
+ * Get stock-specific forced axis options.
+ *
+ * @private
+ * @function getForcedAxisOptions
+ * @param {string} type
+ * @param {Highcharts.Options} chartOptions
+ * @return {Highcharts.AxisOptions}
+ */
+function getForcedAxisOptions(type, chartOptions) {
+    if (type === 'xAxis') {
+        var defaultOptions = getOptions(), 
+        // Always disable startOnTick:true on the main axis when the
+        // navigator is enabled (#1090)
+        navigatorEnabled = pick(chartOptions.navigator && chartOptions.navigator.enabled, defaultOptions.navigator.enabled, true);
+        var axisOptions = {
+            type: 'datetime',
+            categories: void 0
+        };
+        if (navigatorEnabled) {
+            axisOptions.startOnTick = false;
+            axisOptions.endOnTick = false;
         }
         }
-    }, options, // user's options
-    {
-        isStock: true // internal flag
-    });
-    options.series = userOptions.series = seriesOptions;
-    return hasRenderToArg ?
-        new Chart(a, options, c) :
-        new Chart(options, b);
+        return axisOptions;
+    }
+    return {};
 }
 }
 /* *
 /* *
  *
  *
@@ -375,18 +483,21 @@ addEvent(Axis, 'afterHideCrosshair', function () {
 // Extend crosshairs to also draw the label
 // Extend crosshairs to also draw the label
 addEvent(Axis, 'afterDrawCrosshair', function (event) {
 addEvent(Axis, 'afterDrawCrosshair', function (event) {
     // Check if the label has to be drawn
     // Check if the label has to be drawn
-    if (!defined(this.crosshair.label) ||
+    if (!this.crosshair ||
+        !this.crosshair.label ||
         !this.crosshair.label.enabled ||
         !this.crosshair.label.enabled ||
-        !this.cross) {
+        !this.cross ||
+        !isNumber(this.min) ||
+        !isNumber(this.max)) {
         return;
         return;
     }
     }
-    var chart = this.chart, log = this.logarithmic, options = this.options.crosshair.label, // the label's options
+    var chart = this.chart, log = this.logarithmic, options = this.crosshair.label, // the label's options
     horiz = this.horiz, // axis orientation
     horiz = this.horiz, // axis orientation
     opposite = this.opposite, // axis position
     opposite = this.opposite, // axis position
     left = this.left, // left position
     left = this.left, // left position
     top = this.top, // top position
     top = this.top, // top position
     crossLabel = this.crossLabel, // the svgElement
     crossLabel = this.crossLabel, // the svgElement
-    posx, posy, crossBox, formatOption = options.format, formatFormat = '', limit, align, tickInside = this.options.tickPosition === 'inside', snap = this.crosshair.snap !== false, value, offset = 0, 
+    posx, posy, crossBox, formatOption = options.format, formatFormat = '', limit, align, tickInside = this.options.tickPosition === 'inside', snap = this.crosshair.snap !== false, offset = 0, 
     // Use last available event (#5287)
     // Use last available event (#5287)
     e = event.e || (this.cross && this.cross.e), point = event.point, min = this.min, max = this.max;
     e = event.e || (this.cross && this.cross.e), point = event.point, min = this.min, max = this.max;
     if (log) {
     if (log) {
@@ -399,7 +510,7 @@ addEvent(Axis, 'afterDrawCrosshair', function (event) {
     // If the label does not exist yet, create it.
     // If the label does not exist yet, create it.
     if (!crossLabel) {
     if (!crossLabel) {
         crossLabel = this.crossLabel = chart.renderer
         crossLabel = this.crossLabel = chart.renderer
-            .label(null, null, null, options.shape || 'callout')
+            .label('', 0, void 0, options.shape || 'callout')
             .addClass('highcharts-crosshair-label' + (this.series[0] &&
             .addClass('highcharts-crosshair-label' + (this.series[0] &&
             ' highcharts-color-' + this.series[0].colorIndex))
             ' highcharts-color-' + this.series[0].colorIndex))
             .attr({
             .attr({
@@ -414,7 +525,7 @@ addEvent(Axis, 'afterDrawCrosshair', function (event) {
             crossLabel
             crossLabel
                 .attr({
                 .attr({
                 fill: options.backgroundColor ||
                 fill: options.backgroundColor ||
-                    (this.series[0] && this.series[0].color) ||
+                    point && point.series && point.series.color || // #14888
                     palette.neutralColor60,
                     palette.neutralColor60,
                 stroke: options.borderColor || '',
                 stroke: options.borderColor || '',
                 'stroke-width': options.borderWidth || 0
                 'stroke-width': options.borderWidth || 0
@@ -424,16 +535,16 @@ addEvent(Axis, 'afterDrawCrosshair', function (event) {
                 fontWeight: 'normal',
                 fontWeight: 'normal',
                 fontSize: '11px',
                 fontSize: '11px',
                 textAlign: 'center'
                 textAlign: 'center'
-            }, options.style));
+            }, options.style || {}));
         }
         }
     }
     }
     if (horiz) {
     if (horiz) {
-        posx = snap ? point.plotX + left : e.chartX;
+        posx = snap ? (point.plotX || 0) + left : e.chartX;
         posy = top + (opposite ? 0 : this.height);
         posy = top + (opposite ? 0 : this.height);
     }
     }
     else {
     else {
         posx = opposite ? this.width + left : 0;
         posx = opposite ? this.width + left : 0;
-        posy = snap ? point.plotY + top : e.chartY;
+        posy = snap ? (point.plotY || 0) + top : e.chartY;
     }
     }
     if (!formatOption && !options.formatter) {
     if (!formatOption && !options.formatter) {
         if (this.dateTime) {
         if (this.dateTime) {
@@ -443,19 +554,26 @@ addEvent(Axis, 'afterDrawCrosshair', function (event) {
             '{value' + (formatFormat ? ':' + formatFormat : '') + '}';
             '{value' + (formatFormat ? ':' + formatFormat : '') + '}';
     }
     }
     // Show the label
     // Show the label
-    value = snap ?
-        point[this.isXAxis ? 'x' : 'y'] :
+    var value = snap ?
+        (this.isXAxis ? point.x : point.y) :
         this.toValue(horiz ? e.chartX : e.chartY);
         this.toValue(horiz ? e.chartX : e.chartY);
+    // Crosshair should be rendered within Axis range (#7219). Also, the point
+    // of currentPriceIndicator should be inside the plot area, #14879.
+    var isInside = point ?
+        point.series.isPointInside(point) :
+        (isNumber(value) && value > min && value < max);
+    var text = '';
+    if (formatOption) {
+        text = format(formatOption, { value: value }, chart);
+    }
+    else if (options.formatter && isNumber(value)) {
+        text = options.formatter.call(this, value);
+    }
     crossLabel.attr({
     crossLabel.attr({
-        text: formatOption ?
-            format(formatOption, { value: value }, chart) :
-            options.formatter.call(this, value),
+        text: text,
         x: posx,
         x: posx,
         y: posy,
         y: posy,
-        // Crosshair should be rendered within Axis range (#7219)
-        visibility: value < min || value > max ?
-            'hidden' :
-            'visible'
+        visibility: isInside ? 'visible' : 'hidden'
     });
     });
     crossBox = crossLabel.getBBox();
     crossBox = crossLabel.getBBox();
     // now it is placed we can correct its position
     // now it is placed we can correct its position
@@ -524,7 +642,7 @@ Series.prototype.init = function () {
     this.initCompare(this.options.compare);
     this.initCompare(this.options.compare);
 };
 };
 /**
 /**
- * Highstock only. Set the
+ * Highcharts Stock only. Set the
  * [compare](https://api.highcharts.com/highstock/plotOptions.series.compare)
  * [compare](https://api.highcharts.com/highstock/plotOptions.series.compare)
  * mode of the series after render time. In most cases it is more useful running
  * mode of the series after render time. In most cases it is more useful running
  * {@link Axis#setCompare} on the X axis to update all its series.
  * {@link Axis#setCompare} on the X axis to update all its series.
@@ -626,8 +744,8 @@ addEvent(Series, 'afterGetExtremes', function (e) {
     }
     }
 });
 });
 /**
 /**
- * Highstock only. Set the compare mode on all series belonging to an Y axis
- * after render time.
+ * Highcharts Stock only. Set the compare mode on all series
+ * belonging to an Y axis after render time.
  *
  *
  * @see [series.plotOptions.compare](https://api.highcharts.com/highstock/series.plotOptions.compare)
  * @see [series.plotOptions.compare](https://api.highcharts.com/highstock/series.plotOptions.compare)
  *
  *
@@ -682,7 +800,8 @@ addEvent(Series, 'render', function () {
     if (!(chart.is3d && chart.is3d()) &&
     if (!(chart.is3d && chart.is3d()) &&
         !chart.polar &&
         !chart.polar &&
         this.xAxis &&
         this.xAxis &&
-        !this.xAxis.isRadial // Gauge, #6192
+        !this.xAxis.isRadial && // Gauge, #6192
+        this.options.clip !== false // #15128
     ) {
     ) {
         clipHeight = this.yAxis.len;
         clipHeight = this.yAxis.len;
         // Include xAxis line width (#8031) but only if the Y axis ends on the
         // Include xAxis line width (#8031) but only if the Y axis ends on the
@@ -694,25 +813,41 @@ addEvent(Series, 'render', function () {
                 clipHeight -= Math.max(lineHeightCorrection - dist, 0);
                 clipHeight -= Math.max(lineHeightCorrection - dist, 0);
             }
             }
         }
         }
-        // First render, initial clip box
-        if (!this.clipBox && this.isDirty && !this.isDirtyData) {
-            this.clipBox = merge(chart.clipBox);
+        // First render, initial clip box. clipBox also needs to be updated if
+        // the series is rendered again before starting animating, in
+        // compliance with a responsive rule (#13858).
+        if (!chart.hasRendered || (!this.clipBox && this.isDirty && !this.isDirtyData)) {
+            this.clipBox = this.clipBox || merge(chart.clipBox);
             this.clipBox.width = this.xAxis.len;
             this.clipBox.width = this.xAxis.len;
             this.clipBox.height = clipHeight;
             this.clipBox.height = clipHeight;
-            // On redrawing, resizing etc, update the clip rectangle
         }
         }
-        else if (chart[this.sharedClipKey]) {
-            // animate in case resize is done during initial animation
-            chart[this.sharedClipKey].animate({
-                width: this.xAxis.len,
-                height: clipHeight
-            });
-            // also change markers clip animation for consistency
-            // (marker clip rects should exist only on chart init)
-            if (chart[this.sharedClipKey + 'm']) {
-                chart[this.sharedClipKey + 'm'].animate({
-                    width: this.xAxis.len
+        if (chart.hasRendered) {
+            var animation = animObject(this.options.animation);
+            // #15435: this.sharedClipKey might not have been set yet, for
+            // example when updating the series, so we need to use this
+            // function instead
+            var sharedClipKey = this.getSharedClipKey(animation);
+            var clipRect = chart.sharedClips[sharedClipKey];
+            // On redrawing, resizing etc, update the clip rectangle.
+            //
+            // #15435: Update it even when we are creating/updating clipBox,
+            // since there could be series updating and pane size changes
+            // happening at the same time and we dont destroy shared clips in
+            // stock.
+            if (clipRect) {
+                // animate in case resize is done during initial animation
+                clipRect.animate({
+                    width: this.xAxis.len,
+                    height: clipHeight
                 });
                 });
+                var markerClipRect = chart.sharedClips[sharedClipKey + 'm'];
+                // also change markers clip animation for consistency
+                // (marker clip rects should exist only on chart init)
+                if (markerClipRect) {
+                    markerClipRect.animate({
+                        width: this.xAxis.len
+                    });
+                }
             }
             }
         }
         }
     }
     }
@@ -728,18 +863,12 @@ addEvent(Chart, 'update', function (e) {
         delete options.scrollbar;
         delete options.scrollbar;
     }
     }
 });
 });
-/* *
- *
- *  Compatibility
- *
- * */
-H.StockChart = H.stockChart = stockChart;
 /* *
 /* *
  *
  *
  *  Default Export
  *  Default Export
  *
  *
  * */
  * */
-export default stockChart;
+export default StockChart;
 /* *
 /* *
  *
  *
  *  API Options
  *  API Options

+ 2 - 2
node_modules/highcharts/es-modules/Core/Color/Palette.js

@@ -73,10 +73,10 @@ var palette = {
     /**
     /**
      * Positive indicator color
      * Positive indicator color
      */
      */
-    indicatorPositiveLine: '#06b535',
+    positiveColor: '#06b535',
     /**
     /**
      * Negative indicator color
      * Negative indicator color
      */
      */
-    indicatorNegativeLine: '#f21313'
+    negativeColor: '#f21313'
 };
 };
 export default palette;
 export default palette;

+ 71 - 66
node_modules/highcharts/es-modules/Core/Globals.js

@@ -8,75 +8,65 @@
  *
  *
  * */
  * */
 'use strict';
 'use strict';
-/* globals Image, window */
-/**
- * Reference to the global SVGElement class as a workaround for a name conflict
- * in the Highcharts namespace.
+/* *
  *
  *
- * @global
- * @typedef {global.SVGElement} GlobalSVGElement
+ *  Constants
  *
  *
- * @see https://developer.mozilla.org/en-US/docs/Web/API/SVGElement
+ * */
+/**
+ * @private
+ * @deprecated
+ * @todo Rename UMD argument `win` to `window`; move code to `Globals.win`
  */
  */
-// glob is a temporary fix to allow our es-modules to work.
-var glob = ( // @todo UMD variable named `window`, and glob named `win`
-typeof win !== 'undefined' ?
+var w = (typeof win !== 'undefined' ?
     win :
     win :
     typeof window !== 'undefined' ?
     typeof window !== 'undefined' ?
         window :
         window :
-        {}), doc = glob.document, SVG_NS = 'http://www.w3.org/2000/svg', userAgent = (glob.navigator && glob.navigator.userAgent) || '', svg = (doc &&
-    doc.createElementNS &&
-    !!doc.createElementNS(SVG_NS, 'svg').createSVGRect), isMS = /(edge|msie|trident)/i.test(userAgent) && !glob.opera, isFirefox = userAgent.indexOf('Firefox') !== -1, isChrome = userAgent.indexOf('Chrome') !== -1, hasBidiBug = (isFirefox &&
-    parseInt(userAgent.split('Firefox/')[1], 10) < 4 // issue #38
-), noop = function () { }, 
-// Checks whether the browser supports passive events, (#11353).
-checkPassiveEvents = function () {
-    var supportsPassive = false;
-    // Object.defineProperty doesn't work on IE as well as passive events -
-    // instead of using polyfill, we can exclude IE totally.
-    if (!isMS) {
-        var opts = Object.defineProperty({}, 'passive', {
-            get: function () {
-                supportsPassive = true;
+        {}
+// eslint-disable-next-line node/no-unsupported-features/es-builtins
+);
+/* *
+ *
+ *  Namespace
+ *
+ * */
+/**
+ * Shared Highcharts properties.
+ */
+var Globals;
+(function (Globals) {
+    /* *
+     *
+     *  Constants
+     *
+     * */
+    Globals.SVG_NS = 'http://www.w3.org/2000/svg', Globals.product = 'Highcharts', Globals.version = '9.1.0', Globals.win = w, Globals.doc = Globals.win.document, Globals.svg = (Globals.doc &&
+        Globals.doc.createElementNS &&
+        !!Globals.doc.createElementNS(Globals.SVG_NS, 'svg').createSVGRect), Globals.userAgent = (Globals.win.navigator && Globals.win.navigator.userAgent) || '', Globals.isChrome = Globals.userAgent.indexOf('Chrome') !== -1, Globals.isFirefox = Globals.userAgent.indexOf('Firefox') !== -1, Globals.isMS = /(edge|msie|trident)/i.test(Globals.userAgent) && !Globals.win.opera, Globals.isSafari = !Globals.isChrome && Globals.userAgent.indexOf('Safari') !== -1, Globals.isTouchDevice = /(Mobile|Android|Windows Phone)/.test(Globals.userAgent), Globals.isWebKit = Globals.userAgent.indexOf('AppleWebKit') !== -1, Globals.deg2rad = Math.PI * 2 / 360, Globals.hasBidiBug = (Globals.isFirefox &&
+        parseInt(Globals.userAgent.split('Firefox/')[1], 10) < 4 // issue #38
+    ), Globals.hasTouch = !!Globals.win.TouchEvent, Globals.marginNames = [
+        'plotTop',
+        'marginRight',
+        'marginBottom',
+        'plotLeft'
+    ], Globals.noop = function () { }, Globals.supportsPassiveEvents = (function () {
+        // Checks whether the browser supports passive events, (#11353).
+        var supportsPassive = false;
+        // Object.defineProperty doesn't work on IE as well as passive
+        // events - instead of using polyfill, we can exclude IE totally.
+        if (!Globals.isMS) {
+            var opts = Object.defineProperty({}, 'passive', {
+                get: function () {
+                    supportsPassive = true;
+                }
+            });
+            if (Globals.win.addEventListener && Globals.win.removeEventListener) {
+                Globals.win.addEventListener('testPassive', Globals.noop, opts);
+                Globals.win.removeEventListener('testPassive', Globals.noop, opts);
             }
             }
-        });
-        if (glob.addEventListener && glob.removeEventListener) {
-            glob.addEventListener('testPassive', noop, opts);
-            glob.removeEventListener('testPassive', noop, opts);
         }
         }
-    }
-    return supportsPassive;
-};
-var H = {
-    product: 'Highcharts',
-    version: '9.0.1',
-    deg2rad: Math.PI * 2 / 360,
-    doc: doc,
-    hasBidiBug: hasBidiBug,
-    hasTouch: !!glob.TouchEvent,
-    isMS: isMS,
-    isWebKit: userAgent.indexOf('AppleWebKit') !== -1,
-    isFirefox: isFirefox,
-    isChrome: isChrome,
-    isSafari: !isChrome && userAgent.indexOf('Safari') !== -1,
-    isTouchDevice: /(Mobile|Android|Windows Phone)/.test(userAgent),
-    SVG_NS: SVG_NS,
-    chartCount: 0,
-    seriesTypes: {},
-    supportsPassiveEvents: checkPassiveEvents(),
-    symbolSizes: {},
-    svg: svg,
-    win: glob,
-    marginNames: ['plotTop', 'marginRight', 'marginBottom', 'plotLeft'],
-    noop: noop,
-    /**
-     * Theme options that should get applied to the chart. In module mode it
-     * might not be possible to change this property because of read-only
-     * restrictions, instead use {@link Highcharts.setOptions}.
-     *
-     * @name Highcharts.theme
-     * @type {Highcharts.Options}
-     */
+        return supportsPassive;
+    }());
     /**
     /**
      * An array containing the current chart objects in the page. A chart's
      * An array containing the current chart objects in the page. A chart's
      * position in the array is preserved throughout the page's lifetime. When
      * position in the array is preserved throughout the page's lifetime. When
@@ -85,7 +75,7 @@ var H = {
      * @name Highcharts.charts
      * @name Highcharts.charts
      * @type {Array<Highcharts.Chart|undefined>}
      * @type {Array<Highcharts.Chart|undefined>}
      */
      */
-    charts: [],
+    Globals.charts = [];
     /**
     /**
      * A hook for defining additional date format specifiers. New
      * A hook for defining additional date format specifiers. New
      * specifiers are defined as key-value pairs by using the
      * specifiers are defined as key-value pairs by using the
@@ -97,8 +87,23 @@ var H = {
      *         Adding support for week number
      *         Adding support for week number
      *
      *
      * @name Highcharts.dateFormats
      * @name Highcharts.dateFormats
-     * @type {Highcharts.Dictionary<Highcharts.TimeFormatCallbackFunction>}
+     * @type {Record<string, Highcharts.TimeFormatCallbackFunction>}
      */
      */
-    dateFormats: {}
-};
-export default H;
+    Globals.dateFormats = {};
+    /**
+     * @private
+     * @deprecated
+     * @todo Use only `Core/Series/SeriesRegistry.seriesTypes`
+     */
+    Globals.seriesTypes = {};
+    /**
+     * @private
+     */
+    Globals.symbolSizes = {};
+})(Globals || (Globals = {}));
+/* *
+ *
+ *  Default Export
+ *
+ * */
+export default Globals;

+ 17 - 5
node_modules/highcharts/es-modules/Core/Legend.js

@@ -10,11 +10,13 @@
 'use strict';
 'use strict';
 import A from './Animation/AnimationUtilities.js';
 import A from './Animation/AnimationUtilities.js';
 var animObject = A.animObject, setAnimation = A.setAnimation;
 var animObject = A.animObject, setAnimation = A.setAnimation;
+import F from './FormatUtilities.js';
+var format = F.format;
 import H from './Globals.js';
 import H from './Globals.js';
 var isFirefox = H.isFirefox, marginNames = H.marginNames, win = H.win;
 var isFirefox = H.isFirefox, marginNames = H.marginNames, win = H.win;
 import Point from './Series/Point.js';
 import Point from './Series/Point.js';
 import U from './Utilities.js';
 import U from './Utilities.js';
-var addEvent = U.addEvent, createElement = U.createElement, css = U.css, defined = U.defined, discardElement = U.discardElement, find = U.find, fireEvent = U.fireEvent, format = U.format, isNumber = U.isNumber, merge = U.merge, pick = U.pick, relativeLength = U.relativeLength, stableSort = U.stableSort, syncTimeout = U.syncTimeout, wrap = U.wrap;
+var addEvent = U.addEvent, createElement = U.createElement, css = U.css, defined = U.defined, discardElement = U.discardElement, find = U.find, fireEvent = U.fireEvent, isNumber = U.isNumber, merge = U.merge, pick = U.pick, relativeLength = U.relativeLength, stableSort = U.stableSort, syncTimeout = U.syncTimeout, wrap = U.wrap;
 /**
 /**
  * Gets fired when the legend item belonging to a point is clicked. The default
  * Gets fired when the legend item belonging to a point is clicked. The default
  * action is to toggle the visibility of the point. This can be prevented by
  * action is to toggle the visibility of the point. This can be prevented by
@@ -478,7 +480,7 @@ var Legend = /** @class */ (function () {
      * The item to render.
      * The item to render.
      */
      */
     Legend.prototype.renderItem = function (item) {
     Legend.prototype.renderItem = function (item) {
-        var legend = this, chart = legend.chart, renderer = chart.renderer, options = legend.options, horizontal = options.layout === 'horizontal', symbolWidth = legend.symbolWidth, symbolPadding = options.symbolPadding, itemStyle = legend.itemStyle, itemHiddenStyle = legend.itemHiddenStyle, itemDistance = horizontal ? pick(options.itemDistance, 20) : 0, ltr = !options.rtl, bBox, li = item.legendItem, isSeries = !item.series, series = !isSeries && item.series.drawLegendSymbol ?
+        var legend = this, chart = legend.chart, renderer = chart.renderer, options = legend.options, horizontal = options.layout === 'horizontal', symbolWidth = legend.symbolWidth, symbolPadding = options.symbolPadding || 0, itemStyle = legend.itemStyle, itemHiddenStyle = legend.itemHiddenStyle, itemDistance = horizontal ? pick(options.itemDistance, 20) : 0, ltr = !options.rtl, bBox, li = item.legendItem, isSeries = !item.series, series = !isSeries && item.series.drawLegendSymbol ?
             item.series :
             item.series :
             item, seriesOptions = series.options, showCheckbox = legend.createCheckboxForItem &&
             item, seriesOptions = series.options, showCheckbox = legend.createCheckboxForItem &&
             seriesOptions &&
             seriesOptions &&
@@ -522,10 +524,18 @@ var Legend = /** @class */ (function () {
                 legend.baseline =
                 legend.baseline =
                     legend.fontMetrics.f + 3 + legend.itemMarginTop;
                     legend.fontMetrics.f + 3 + legend.itemMarginTop;
                 li.attr('y', legend.baseline);
                 li.attr('y', legend.baseline);
+                legend.symbolHeight =
+                    options.symbolHeight || legend.fontMetrics.f;
+                if (options.squareSymbol) {
+                    legend.symbolWidth = pick(options.symbolWidth, Math.max(legend.symbolHeight, 16));
+                    itemExtraWidth = legend.symbolWidth + symbolPadding +
+                        itemDistance + (showCheckbox ? 20 : 0);
+                    if (ltr) {
+                        li.attr('x', legend.symbolWidth + symbolPadding);
+                    }
+                }
             }
             }
             // Draw the legend symbol inside the group box
             // Draw the legend symbol inside the group box
-            legend.symbolHeight =
-                options.symbolHeight || legend.fontMetrics.f;
             series.drawLegendSymbol(legend, item);
             series.drawLegendSymbol(legend, item);
             if (legend.setItemEvents) {
             if (legend.setItemEvents) {
                 legend.setItemEvents(item, li, useHTML);
                 legend.setItemEvents(item, li, useHTML);
@@ -935,7 +945,9 @@ var Legend = /** @class */ (function () {
         }
         }
         // Reset the legend height and adjust the clipping rectangle
         // Reset the legend height and adjust the clipping rectangle
         pages.length = 0;
         pages.length = 0;
-        if (legendHeight > spaceHeight &&
+        if (legendHeight &&
+            spaceHeight > 0 &&
+            legendHeight > spaceHeight &&
             navOptions.enabled !== false) {
             navOptions.enabled !== false) {
             this.clipHeight = clipHeight =
             this.clipHeight = clipHeight =
                 Math.max(spaceHeight - 20 - this.titleHeight - padding, 0);
                 Math.max(spaceHeight - 20 - this.titleHeight - padding, 0);

+ 19 - 15
node_modules/highcharts/es-modules/Core/Navigator.js

@@ -127,7 +127,7 @@ extend(defaultOptions, {
         margin: 25,
         margin: 25,
         /**
         /**
          * Whether the mask should be inside the range marking the zoomed
          * Whether the mask should be inside the range marking the zoomed
-         * range, or outside. In Highstock 1.x it was always `false`.
+         * range, or outside. In Highcharts Stock 1.x it was always `false`.
          *
          *
          * @sample {highstock} stock/navigator/maskinside-false/
          * @sample {highstock} stock/navigator/maskinside-false/
          *         False, mask outside
          *         False, mask outside
@@ -328,7 +328,10 @@ extend(defaultOptions, {
                 approximation: 'average',
                 approximation: 'average',
                 enabled: true,
                 enabled: true,
                 groupPixelWidth: 2,
                 groupPixelWidth: 2,
-                smoothed: true,
+                // Replace smoothed property by anchors, #12455.
+                firstAnchor: 'firstPoint',
+                anchor: 'middle',
+                lastAnchor: 'lastPoint',
                 // Day and week differs from plotOptions.series.dataGrouping
                 // Day and week differs from plotOptions.series.dataGrouping
                 units: [
                 units: [
                     ['millisecond', [1, 2, 5, 10, 20, 25, 50, 100, 200, 500]],
                     ['millisecond', [1, 2, 5, 10, 20, 25, 50, 100, 200, 500]],
@@ -370,11 +373,11 @@ extend(defaultOptions, {
                 enabled: false
                 enabled: false
             },
             },
             /**
             /**
-             * Since Highstock v8, default value is the same as default
+             * Since Highcharts Stock v8, default value is the same as default
              * `pointRange` defined for a specific type (e.g. `null` for
              * `pointRange` defined for a specific type (e.g. `null` for
              * column type).
              * column type).
              *
              *
-             * In Highstock version < 8, defaults to 0.
+             * In Highcharts Stock version < 8, defaults to 0.
              *
              *
              * @extends plotOptions.series.pointRange
              * @extends plotOptions.series.pointRange
              * @type {number|null}
              * @type {number|null}
@@ -1360,9 +1363,7 @@ var Navigator = /** @class */ (function () {
                 var range = navigator.size, to = range * this.to, from = range * this.from;
                 var range = navigator.size, to = range * this.to, from = range * this.from;
                 navigator.hasDragged = navigator.scrollbar.hasDragged;
                 navigator.hasDragged = navigator.scrollbar.hasDragged;
                 navigator.render(0, 0, from, to);
                 navigator.render(0, 0, from, to);
-                if (chart.options.scrollbar.liveRedraw ||
-                    (e.DOMType !== 'mousemove' &&
-                        e.DOMType !== 'touchmove')) {
+                if (this.shouldUpdateExtremes(e.DOMType)) {
                     setTimeout(function () {
                     setTimeout(function () {
                         navigator.onMouseUp(e);
                         navigator.onMouseUp(e);
                     });
                     });
@@ -1505,6 +1506,9 @@ var Navigator = /** @class */ (function () {
                 navSeriesMixin.name = 'Navigator ' + baseSeries.length;
                 navSeriesMixin.name = 'Navigator ' + baseSeries.length;
                 baseOptions = base.options || {};
                 baseOptions = base.options || {};
                 baseNavigatorOptions = baseOptions.navigatorOptions || {};
                 baseNavigatorOptions = baseOptions.navigatorOptions || {};
+                // The dataLabels options are not merged correctly
+                // if the settings are an array, #13847.
+                userNavOptions.dataLabels = splat(userNavOptions.dataLabels);
                 mergedNavSeriesOptions = merge(baseOptions, navSeriesMixin, userNavOptions, baseNavigatorOptions);
                 mergedNavSeriesOptions = merge(baseOptions, navSeriesMixin, userNavOptions, baseNavigatorOptions);
                 // Once nav series type is resolved, pick correct pointRange
                 // Once nav series type is resolved, pick correct pointRange
                 mergedNavSeriesOptions.pointRange = pick(
                 mergedNavSeriesOptions.pointRange = pick(
@@ -1583,29 +1587,29 @@ var Navigator = /** @class */ (function () {
         // Adding this multiple times to the same axis is no problem, as
         // Adding this multiple times to the same axis is no problem, as
         // duplicates should be discarded by the browser.
         // duplicates should be discarded by the browser.
         if (baseSeries[0] && baseSeries[0].xAxis) {
         if (baseSeries[0] && baseSeries[0].xAxis) {
-            addEvent(baseSeries[0].xAxis, 'foundExtremes', this.modifyBaseAxisExtremes);
+            baseSeries[0].eventsToUnbind.push(addEvent(baseSeries[0].xAxis, 'foundExtremes', this.modifyBaseAxisExtremes));
         }
         }
         baseSeries.forEach(function (base) {
         baseSeries.forEach(function (base) {
             // Link base series show/hide to navigator series visibility
             // Link base series show/hide to navigator series visibility
-            addEvent(base, 'show', function () {
+            base.eventsToUnbind.push(addEvent(base, 'show', function () {
                 if (this.navigatorSeries) {
                 if (this.navigatorSeries) {
                     this.navigatorSeries.setVisible(true, false);
                     this.navigatorSeries.setVisible(true, false);
                 }
                 }
-            });
-            addEvent(base, 'hide', function () {
+            }));
+            base.eventsToUnbind.push(addEvent(base, 'hide', function () {
                 if (this.navigatorSeries) {
                 if (this.navigatorSeries) {
                     this.navigatorSeries.setVisible(false, false);
                     this.navigatorSeries.setVisible(false, false);
                 }
                 }
-            });
+            }));
             // Respond to updated data in the base series, unless explicitily
             // Respond to updated data in the base series, unless explicitily
             // not adapting to data changes.
             // not adapting to data changes.
             if (this.navigatorOptions.adaptToUpdatedData !== false) {
             if (this.navigatorOptions.adaptToUpdatedData !== false) {
                 if (base.xAxis) {
                 if (base.xAxis) {
-                    addEvent(base, 'updatedData', this.updatedDataHandler);
+                    base.eventsToUnbind.push(addEvent(base, 'updatedData', this.updatedDataHandler));
                 }
                 }
             }
             }
             // Handle series removal
             // Handle series removal
-            addEvent(base, 'remove', function () {
+            base.eventsToUnbind.push(addEvent(base, 'remove', function () {
                 if (this.navigatorSeries) {
                 if (this.navigatorSeries) {
                     erase(navigator.series, this.navigatorSeries);
                     erase(navigator.series, this.navigatorSeries);
                     if (defined(this.navigatorSeries.options)) {
                     if (defined(this.navigatorSeries.options)) {
@@ -1613,7 +1617,7 @@ var Navigator = /** @class */ (function () {
                     }
                     }
                     delete this.navigatorSeries;
                     delete this.navigatorSeries;
                 }
                 }
-            });
+            }));
         }, this);
         }, this);
     };
     };
     /**
     /**

+ 94 - 91
node_modules/highcharts/es-modules/Core/Options.js

@@ -15,7 +15,12 @@ var color = Color.parse;
 import palette from './Color/Palette.js';
 import palette from './Color/Palette.js';
 import Time from './Time.js';
 import Time from './Time.js';
 import U from './Utilities.js';
 import U from './Utilities.js';
-var merge = U.merge;
+var getNestedProperty = U.getNestedProperty, isNumber = U.isNumber, merge = U.merge, pick = U.pick, pInt = U.pInt;
+/* *
+ *
+ *  API Declarations
+ *
+ * */
 /**
 /**
  * @typedef {"plotBox"|"spacingBox"} Highcharts.ButtonRelativeToValue
  * @typedef {"plotBox"|"spacingBox"} Highcharts.ButtonRelativeToValue
  */
  */
@@ -182,10 +187,12 @@ var merge = U.merge;
 * @name Highcharts.ChartSelectionAxisContextObject#min
 * @name Highcharts.ChartSelectionAxisContextObject#min
 * @type {number}
 * @type {number}
 */
 */
-''; // detach doclets above
-/* ************************************************************************** *
- * Handle the options                                                         *
- * ************************************************************************** */
+(''); // detach doclets above
+/* *
+ *
+ *  API Options
+ *
+ * */
 /**
 /**
  * Global default settings.
  * Global default settings.
  *
  *
@@ -194,7 +201,7 @@ var merge = U.merge;
  */ /**
  */ /**
 * @optionparent
 * @optionparent
 */
 */
-H.defaultOptions = {
+var defaultOptions = {
     /**
     /**
      * An array containing the default colors for the chart's series. When
      * An array containing the default colors for the chart's series. When
      * all colors are used, new colors are pulled from the start again.
      * all colors are used, new colors are pulled from the start again.
@@ -496,7 +503,7 @@ H.defaultOptions = {
      * settings affect how `datetime` axes are laid out, how tooltips are
      * settings affect how `datetime` axes are laid out, how tooltips are
      * formatted, how series
      * formatted, how series
      * [pointIntervalUnit](#plotOptions.series.pointIntervalUnit) works and how
      * [pointIntervalUnit](#plotOptions.series.pointIntervalUnit) works and how
-     * the Highstock range selector handles time.
+     * the Highcharts Stock range selector handles time.
      *
      *
      * The common use case is that all charts in the same Highcharts object
      * The common use case is that all charts in the same Highcharts object
      * share the same time settings, in which case the global settings are set
      * share the same time settings, in which case the global settings are set
@@ -510,7 +517,7 @@ H.defaultOptions = {
      *     }
      *     }
      * });
      * });
      * // Apply time settings by instance
      * // Apply time settings by instance
-     * var chart = Highcharts.chart('container', {
+     * let chart = Highcharts.chart('container', {
      *     time: {
      *     time: {
      *         timezone: 'America/New_York'
      *         timezone: 'America/New_York'
      *     },
      *     },
@@ -992,30 +999,30 @@ H.defaultOptions = {
          *
          *
          * @sample  {highcharts} highcharts/chart/pankey/ Zooming and panning
          * @sample  {highcharts} highcharts/chart/pankey/ Zooming and panning
          * @sample  {highstock} stock/chart/panning/ Zooming and xy panning
          * @sample  {highstock} stock/chart/panning/ Zooming and xy panning
-         *
-         * @product highcharts highstock gantt
-         * @apioption chart.panning
-         */
-        /**
-         * Enable or disable chart panning.
-         *
-         * @type      {boolean}
-         * @default   {highcharts} false
-         * @default   {highstock} true
-         * @apioption chart.panning.enabled
-         */
-        /**
-         * Decides in what dimensions the user can pan the chart. Can be
-         * one of `x`, `y`, or `xy`.
-         *
-         * @sample {highcharts} highcharts/chart/panning-type
-         *         Zooming and xy panning
-         *
-         * @type    {string}
-         * @validvalue ["x", "y", "xy"]
-         * @default x
-         * @apioption chart.panning.type
          */
          */
+        panning: {
+            /**
+             * Enable or disable chart panning.
+             *
+             * @type      {boolean}
+             * @default   {highcharts} false
+             * @default   {highstock|highmaps} true
+             */
+            enabled: false,
+            /**
+             * Decides in what dimensions the user can pan the chart. Can be
+             * one of `x`, `y`, or `xy`.
+             *
+             * @sample {highcharts} highcharts/chart/panning-type
+             *         Zooming and xy panning
+             *
+             * @type       {string}
+             * @validvalue ["x", "y", "xy"]
+             * @default    {highcharts|highstock} x
+             * @default    {highmaps} xy
+             */
+            type: 'x'
+        },
         /**
         /**
          * Equivalent to [zoomType](#chart.zoomType), but for multitouch
          * Equivalent to [zoomType](#chart.zoomType), but for multitouch
          * gestures only. By default, the `pinchType` is the same as the
          * gestures only. By default, the `pinchType` is the same as the
@@ -2493,7 +2500,7 @@ H.defaultOptions = {
          */
          */
         /**
         /**
          * Whether to show the symbol on the right side of the text rather than
          * Whether to show the symbol on the right side of the text rather than
-         * the left side. This is common in Arabic and Hebraic.
+         * the left side. This is common in Arabic and Hebrew.
          *
          *
          * @sample {highcharts} highcharts/legend/rtl/
          * @sample {highcharts} highcharts/legend/rtl/
          *         Symbol to the right
          *         Symbol to the right
@@ -2969,6 +2976,8 @@ H.defaultOptions = {
          * and wordcloud series by override in the `plotOptions`
          * and wordcloud series by override in the `plotOptions`
          * for those series types.
          * for those series types.
          *
          *
+         * Does not apply if [split](#tooltip.split) is `true`.
+         *
          * For touch moves to behave the same way, [followTouchMove](
          * For touch moves to behave the same way, [followTouchMove](
          * #tooltip.followTouchMove) must be `true` also.
          * #tooltip.followTouchMove) must be `true` also.
          *
          *
@@ -3146,7 +3155,7 @@ H.defaultOptions = {
          */
          */
         /**
         /**
          * The name of a symbol to use for the border around the tooltip. Can
          * The name of a symbol to use for the border around the tooltip. Can
-         * be one of: `"callout"`, `"circle"`, or `"square"`. When
+         * be one of: `"callout"`, `"circle"` or `"rect"`. When
          * [tooltip.split](#tooltip.split)
          * [tooltip.split](#tooltip.split)
          * option is enabled, shape is applied to all boxes except header, which
          * option is enabled, shape is applied to all boxes except header, which
          * is controlled by
          * is controlled by
@@ -3213,9 +3222,10 @@ H.defaultOptions = {
          * tooltips for charts with multiple line series, generally making them
          * tooltips for charts with multiple line series, generally making them
          * easier to read. This option takes precedence over `tooltip.shared`.
          * easier to read. This option takes precedence over `tooltip.shared`.
          *
          *
-         * @productdesc {highstock} In Highstock, tooltips are split by default
-         * since v6.0.0. Stock charts typically contain multi-dimension points
-         * and multiple panes, making split tooltips the preferred layout over
+         * @productdesc {highstock} In Highcharts Stock, tooltips are split
+         * by default since v6.0.0. Stock charts typically contain
+         * multi-dimension points and multiple panes, making split tooltips
+         * the preferred layout over
          * the previous `shared` tooltip.
          * the previous `shared` tooltip.
          *
          *
          * @sample highcharts/tooltip/split/
          * @sample highcharts/tooltip/split/
@@ -3354,7 +3364,7 @@ H.defaultOptions = {
          * header will by default be guessed based on the closest data points.
          * header will by default be guessed based on the closest data points.
          * This member gives the default string representations used for
          * This member gives the default string representations used for
          * each unit. For an overview of the replacement codes, see
          * each unit. For an overview of the replacement codes, see
-         * [dateFormat](/class-reference/Highcharts#dateFormat).
+         * [dateFormat](/class-reference/Highcharts#.dateFormat).
          *
          *
          * @see [xAxis.dateTimeLabelFormats](#xAxis.dateTimeLabelFormats)
          * @see [xAxis.dateTimeLabelFormats](#xAxis.dateTimeLabelFormats)
          *
          *
@@ -3665,71 +3675,64 @@ H.defaultOptions = {
 };
 };
 /* eslint-disable spaced-comment */
 /* eslint-disable spaced-comment */
 
 
-H.defaultOptions.chart.styledMode = false;
+defaultOptions.chart.styledMode = false;
 
 
 '';
 '';
+var defaultTime = new Time(merge(defaultOptions.global, defaultOptions.time));
 /**
 /**
- * Global `Time` object with default options. Since v6.0.5, time settings can be
- * applied individually for each chart. If no individual settings apply, this
- * `Time` object is shared by all instances.
+ * Get the updated default options. Until 3.0.7, merely exposing defaultOptions
+ * for outside modules wasn't enough because the setOptions method created a new
+ * object.
+ *
+ * @function Highcharts.getOptions
  *
  *
- * @name Highcharts.time
- * @type {Highcharts.Time}
+ * @return {Highcharts.Options}
  */
  */
-H.time = new Time(merge(H.defaultOptions.global, H.defaultOptions.time));
+function getOptions() {
+    return defaultOptions;
+}
 /**
 /**
- * Formats a JavaScript date timestamp (milliseconds since Jan 1st 1970) into a
- * human readable date string. The format is a subset of the formats for PHP's
- * [strftime](https://www.php.net/manual/en/function.strftime.php) function.
- * Additional formats can be given in the {@link Highcharts.dateFormats} hook.
+ * Merge the default options with custom options and return the new options
+ * structure. Commonly used for defining reusable templates.
  *
  *
- * Since v6.0.5, all internal dates are formatted through the
- * {@link Highcharts.Chart#time} instance to respect chart-level time settings.
- * The `Highcharts.dateFormat` function only reflects global time settings set
- * with `setOptions`.
+ * @sample highcharts/global/useutc-false Setting a global option
+ * @sample highcharts/members/setoptions Applying a global theme
  *
  *
- * Supported format keys:
- * - `%a`: Short weekday, like 'Mon'
- * - `%A`: Long weekday, like 'Monday'
- * - `%d`: Two digit day of the month, 01 to 31
- * - `%e`: Day of the month, 1 through 31
- * - `%w`: Day of the week, 0 through 6
- * - `%b`: Short month, like 'Jan'
- * - `%B`: Long month, like 'January'
- * - `%m`: Two digit month number, 01 through 12
- * - `%y`: Two digits year, like 09 for 2009
- * - `%Y`: Four digits year, like 2009
- * - `%H`: Two digits hours in 24h format, 00 through 23
- * - `%k`: Hours in 24h format, 0 through 23
- * - `%I`: Two digits hours in 12h format, 00 through 11
- * - `%l`: Hours in 12h format, 1 through 12
- * - `%M`: Two digits minutes, 00 through 59
- * - `%p`: Upper case AM or PM
- * - `%P`: Lower case AM or PM
- * - `%S`: Two digits seconds, 00 through 59
- * - `%L`: Milliseconds (naming from Ruby)
+ * @function Highcharts.setOptions
  *
  *
- * @function Highcharts.dateFormat
+ * @param {Highcharts.Options} options
+ *        The new custom chart options.
  *
  *
- * @param {string} format
- *        The desired format where various time representations are prefixed
- *        with `%`.
- *
- * @param {number} timestamp
- *        The JavaScript timestamp.
- *
- * @param {boolean} [capitalize=false]
- *        Upper case first letter in the return.
- *
- * @return {string}
- *         The formatted date.
+ * @return {Highcharts.Options}
+ *         Updated options.
  */
  */
-H.dateFormat = function (format, timestamp, capitalize) {
-    return H.time.dateFormat(format, timestamp, capitalize);
-};
+function setOptions(options) {
+    // Copy in the default options
+    merge(true, defaultOptions, options);
+    // Update the time object
+    if (options.time || options.global) {
+        if (H.time) {
+            H.time.update(merge(defaultOptions.global, defaultOptions.time, options.global, options.time));
+        }
+        else {
+            /**
+             * Global `Time` object with default options. Since v6.0.5, time
+             * settings can be applied individually for each chart. If no
+             * individual settings apply, this `Time` object is shared by all
+             * instances.
+             *
+             * @name Highcharts.time
+             * @type {Highcharts.Time}
+             */
+            H.time = defaultTime;
+        }
+    }
+    return defaultOptions;
+}
 var optionsModule = {
 var optionsModule = {
-    dateFormat: H.dateFormat,
-    defaultOptions: H.defaultOptions,
-    time: H.time
+    defaultOptions: defaultOptions,
+    defaultTime: defaultTime,
+    getOptions: getOptions,
+    setOptions: setOptions
 };
 };
 export default optionsModule;
 export default optionsModule;

+ 67 - 44
node_modules/highcharts/es-modules/Core/Pointer.js

@@ -144,11 +144,10 @@ var Pointer = /** @class */ (function () {
         this.lastValidTouch = {};
         this.lastValidTouch = {};
         this.pinchDown = [];
         this.pinchDown = [];
         this.runChartClick = false;
         this.runChartClick = false;
+        this.eventsToUnbind = [];
         this.chart = chart;
         this.chart = chart;
         this.hasDragged = false;
         this.hasDragged = false;
         this.options = options;
         this.options = options;
-        this.unbindContainerMouseLeave = function () { };
-        this.unbindContainerMouseEnter = function () { };
         this.init(chart, options);
         this.init(chart, options);
     }
     }
     /* *
     /* *
@@ -205,10 +204,8 @@ var Pointer = /** @class */ (function () {
      */
      */
     Pointer.prototype.destroy = function () {
     Pointer.prototype.destroy = function () {
         var pointer = this;
         var pointer = this;
-        if (typeof pointer.unDocMouseMove !== 'undefined') {
-            pointer.unDocMouseMove();
-        }
-        this.unbindContainerMouseLeave();
+        this.eventsToUnbind.forEach(function (unbind) { return unbind(); });
+        this.eventsToUnbind = [];
         if (!H.chartCount) {
         if (!H.chartCount) {
             if (H.unbindDocumentMouseUp) {
             if (H.unbindDocumentMouseUp) {
                 H.unbindDocumentMouseUp = H.unbindDocumentMouseUp();
                 H.unbindDocumentMouseUp = H.unbindDocumentMouseUp();
@@ -258,7 +255,9 @@ var Pointer = /** @class */ (function () {
         this.hasDragged = Math.sqrt(Math.pow(mouseDownX - chartX, 2) +
         this.hasDragged = Math.sqrt(Math.pow(mouseDownX - chartX, 2) +
             Math.pow(mouseDownY - chartY, 2));
             Math.pow(mouseDownY - chartY, 2));
         if (this.hasDragged > 10) {
         if (this.hasDragged > 10) {
-            clickedInside = chart.isInsidePlot(mouseDownX - plotLeft, mouseDownY - plotTop);
+            clickedInside = chart.isInsidePlot(mouseDownX - plotLeft, mouseDownY - plotTop, {
+                visiblePlotOnly: true
+            });
             // make a selection
             // make a selection
             if (chart.hasCartesianSeries &&
             if (chart.hasCartesianSeries &&
                 (this.zoomX || this.zoomY) &&
                 (this.zoomX || this.zoomY) &&
@@ -330,19 +329,19 @@ var Pointer = /** @class */ (function () {
     Pointer.prototype.drop = function (e) {
     Pointer.prototype.drop = function (e) {
         var pointer = this, chart = this.chart, hasPinched = this.hasPinched;
         var pointer = this, chart = this.chart, hasPinched = this.hasPinched;
         if (this.selectionMarker) {
         if (this.selectionMarker) {
-            var selectionData = {
+            var selectionData_1 = {
                 originalEvent: e,
                 originalEvent: e,
                 xAxis: [],
                 xAxis: [],
                 yAxis: []
                 yAxis: []
-            }, selectionBox = this.selectionMarker, selectionLeft = selectionBox.attr ?
+            }, selectionBox = this.selectionMarker, selectionLeft_1 = selectionBox.attr ?
                 selectionBox.attr('x') :
                 selectionBox.attr('x') :
-                selectionBox.x, selectionTop = selectionBox.attr ?
+                selectionBox.x, selectionTop_1 = selectionBox.attr ?
                 selectionBox.attr('y') :
                 selectionBox.attr('y') :
-                selectionBox.y, selectionWidth = selectionBox.attr ?
+                selectionBox.y, selectionWidth_1 = selectionBox.attr ?
                 selectionBox.attr('width') :
                 selectionBox.attr('width') :
-                selectionBox.width, selectionHeight = selectionBox.attr ?
+                selectionBox.width, selectionHeight_1 = selectionBox.attr ?
                 selectionBox.attr('height') :
                 selectionBox.attr('height') :
-                selectionBox.height, runZoom;
+                selectionBox.height, runZoom_1;
             // a selection has been made
             // a selection has been made
             if (this.hasDragged || hasPinched) {
             if (this.hasDragged || hasPinched) {
                 // record each axis' min and max
                 // record each axis' min and max
@@ -354,26 +353,26 @@ var Pointer = /** @class */ (function () {
                                 xAxis: 'zoomX',
                                 xAxis: 'zoomX',
                                 yAxis: 'zoomY'
                                 yAxis: 'zoomY'
                             }[axis.coll]]) &&
                             }[axis.coll]]) &&
-                        isNumber(selectionLeft) &&
-                        isNumber(selectionTop)) { // #859, #3569
+                        isNumber(selectionLeft_1) &&
+                        isNumber(selectionTop_1)) { // #859, #3569
                         var horiz = axis.horiz, minPixelPadding = e.type === 'touchend' ?
                         var horiz = axis.horiz, minPixelPadding = e.type === 'touchend' ?
                             axis.minPixelPadding :
                             axis.minPixelPadding :
                             0, // #1207, #3075
                             0, // #1207, #3075
-                        selectionMin = axis.toValue((horiz ? selectionLeft : selectionTop) +
+                        selectionMin = axis.toValue((horiz ? selectionLeft_1 : selectionTop_1) +
                             minPixelPadding), selectionMax = axis.toValue((horiz ?
                             minPixelPadding), selectionMax = axis.toValue((horiz ?
-                            selectionLeft + selectionWidth :
-                            selectionTop + selectionHeight) - minPixelPadding);
-                        selectionData[axis.coll].push({
+                            selectionLeft_1 + selectionWidth_1 :
+                            selectionTop_1 + selectionHeight_1) - minPixelPadding);
+                        selectionData_1[axis.coll].push({
                             axis: axis,
                             axis: axis,
                             // Min/max for reversed axes
                             // Min/max for reversed axes
                             min: Math.min(selectionMin, selectionMax),
                             min: Math.min(selectionMin, selectionMax),
                             max: Math.max(selectionMin, selectionMax)
                             max: Math.max(selectionMin, selectionMax)
                         });
                         });
-                        runZoom = true;
+                        runZoom_1 = true;
                     }
                     }
                 });
                 });
-                if (runZoom) {
-                    fireEvent(chart, 'selection', selectionData, function (args) {
+                if (runZoom_1) {
+                    fireEvent(chart, 'selection', selectionData_1, function (args) {
                         chart.zoom(extend(args, hasPinched ?
                         chart.zoom(extend(args, hasPinched ?
                             { animation: false } :
                             { animation: false } :
                             null));
                             null));
@@ -473,14 +472,23 @@ var Pointer = /** @class */ (function () {
      * @return {Highcharts.PointerCoordinatesObject|undefined}
      * @return {Highcharts.PointerCoordinatesObject|undefined}
      */
      */
     Pointer.prototype.getChartCoordinatesFromPoint = function (point, inverted) {
     Pointer.prototype.getChartCoordinatesFromPoint = function (point, inverted) {
-        var series = point.series, xAxis = series.xAxis, yAxis = series.yAxis, plotX = pick(point.clientX, point.plotX), shapeArgs = point.shapeArgs;
+        var series = point.series, xAxis = series.xAxis, yAxis = series.yAxis, shapeArgs = point.shapeArgs;
         if (xAxis && yAxis) {
         if (xAxis && yAxis) {
+            var x = pick(point.clientX, point.plotX);
+            var y = point.plotY || 0;
+            if (point.isNode &&
+                shapeArgs &&
+                isNumber(shapeArgs.x) &&
+                isNumber(shapeArgs.y)) {
+                x = shapeArgs.x;
+                y = shapeArgs.y;
+            }
             return inverted ? {
             return inverted ? {
-                chartX: xAxis.len + xAxis.pos - plotX,
-                chartY: yAxis.len + yAxis.pos - point.plotY
+                chartX: yAxis.len + yAxis.pos - y,
+                chartY: xAxis.len + xAxis.pos - x
             } : {
             } : {
-                chartX: plotX + xAxis.pos,
-                chartY: point.plotY + yAxis.pos
+                chartX: x + xAxis.pos,
+                chartY: y + yAxis.pos
             };
             };
         }
         }
         if (shapeArgs && shapeArgs.x && shapeArgs.y) {
         if (shapeArgs && shapeArgs.x && shapeArgs.y) {
@@ -730,9 +738,7 @@ var Pointer = /** @class */ (function () {
         this.options = options;
         this.options = options;
         this.chart = chart;
         this.chart = chart;
         // Do we need to handle click on a touch device?
         // Do we need to handle click on a touch device?
-        this.runChartClick =
-            options.chart.events &&
-                !!options.chart.events.click;
+        this.runChartClick = Boolean(options.chart.events && options.chart.events.click);
         this.pinchDown = [];
         this.pinchDown = [];
         this.lastValidTouch = {};
         this.lastValidTouch = {};
         if (Tooltip) {
         if (Tooltip) {
@@ -813,7 +819,9 @@ var Pointer = /** @class */ (function () {
             else {
             else {
                 extend(pEvt, this.getCoordinates(pEvt));
                 extend(pEvt, this.getCoordinates(pEvt));
                 // fire a click event in the chart
                 // fire a click event in the chart
-                if (chart.isInsidePlot((pEvt.chartX - plotLeft), (pEvt.chartY - plotTop))) {
+                if (chart.isInsidePlot(pEvt.chartX - plotLeft, pEvt.chartY - plotTop, {
+                    visiblePlotOnly: true
+                })) {
                     fireEvent(chart, 'click', pEvt);
                     fireEvent(chart, 'click', pEvt);
                 }
                 }
             }
             }
@@ -914,7 +922,9 @@ var Pointer = /** @class */ (function () {
         // Show the tooltip and run mouse over events (#977)
         // Show the tooltip and run mouse over events (#977)
         if (!chart.openMenu &&
         if (!chart.openMenu &&
             (this.inClass(pEvt.target, 'highcharts-tracker') ||
             (this.inClass(pEvt.target, 'highcharts-tracker') ||
-                chart.isInsidePlot((pEvt.chartX - chart.plotLeft), (pEvt.chartY - chart.plotTop)))) {
+                chart.isInsidePlot(pEvt.chartX - chart.plotLeft, pEvt.chartY - chart.plotTop, {
+                    visiblePlotOnly: true
+                }))) {
             this.runPointActions(pEvt);
             this.runPointActions(pEvt);
         }
         }
     };
     };
@@ -985,7 +995,9 @@ var Pointer = /** @class */ (function () {
         if (chartPosition &&
         if (chartPosition &&
             (!tooltip ||
             (!tooltip ||
                 !tooltip.isStickyOnContact()) &&
                 !tooltip.isStickyOnContact()) &&
-            !chart.isInsidePlot(pEvt.chartX - chart.plotLeft, pEvt.chartY - chart.plotTop) &&
+            !chart.isInsidePlot(pEvt.chartX - chart.plotLeft, pEvt.chartY - chart.plotTop, {
+                visiblePlotOnly: true
+            }) &&
             !this.inClass(pEvt.target, 'highcharts-tracker')) {
             !this.inClass(pEvt.target, 'highcharts-tracker')) {
             this.reset();
             this.reset();
         }
         }
@@ -1062,6 +1074,8 @@ var Pointer = /** @class */ (function () {
             // fires first
             // fires first
             // Set the marker
             // Set the marker
             if (!selectionMarker) {
             if (!selectionMarker) {
+                // @todo It's a mock object, so maybe we need a separate
+                // interface
                 self.selectionMarker = selectionMarker = extend({
                 self.selectionMarker = selectionMarker = extend({
                     destroy: noop,
                     destroy: noop,
                     touch: true
                     touch: true
@@ -1289,12 +1303,14 @@ var Pointer = /** @class */ (function () {
             false), hoverPoint = p || chart.hoverPoint, hoverSeries = hoverPoint && hoverPoint.series || chart.hoverSeries, 
             false), hoverPoint = p || chart.hoverPoint, hoverSeries = hoverPoint && hoverPoint.series || chart.hoverSeries, 
         // onMouseOver or already hovering a series with directTouch
         // onMouseOver or already hovering a series with directTouch
         isDirectTouch = (!e || e.type !== 'touchmove') && (!!p || ((hoverSeries && hoverSeries.directTouch) &&
         isDirectTouch = (!e || e.type !== 'touchmove') && (!!p || ((hoverSeries && hoverSeries.directTouch) &&
-            pointer.isDirectTouch)), hoverData = this.getHoverData(hoverPoint, hoverSeries, series, isDirectTouch, shared, e), useSharedTooltip, followPointer, anchor, points;
+            pointer.isDirectTouch)), hoverData = this.getHoverData(hoverPoint, hoverSeries, series, isDirectTouch, shared, e), useSharedTooltip, followPointer, points;
         // Update variables from hoverData.
         // Update variables from hoverData.
         hoverPoint = hoverData.hoverPoint;
         hoverPoint = hoverData.hoverPoint;
         points = hoverData.hoverPoints;
         points = hoverData.hoverPoints;
         hoverSeries = hoverData.hoverSeries;
         hoverSeries = hoverData.hoverSeries;
-        followPointer = hoverSeries && hoverSeries.tooltipOptions.followPointer;
+        followPointer = hoverSeries &&
+            hoverSeries.tooltipOptions.followPointer &&
+            !hoverSeries.tooltipOptions.split;
         useSharedTooltip = (shared &&
         useSharedTooltip = (shared &&
             hoverSeries &&
             hoverSeries &&
             !hoverSeries.noSharedTooltip);
             !hoverSeries.noSharedTooltip);
@@ -1355,8 +1371,12 @@ var Pointer = /** @class */ (function () {
             // Update positions (regardless of kdpoint or hoverPoint)
             // Update positions (regardless of kdpoint or hoverPoint)
         }
         }
         else if (followPointer && tooltip && !tooltip.isHidden) {
         else if (followPointer && tooltip && !tooltip.isHidden) {
-            anchor = tooltip.getAnchor([{}], e);
-            tooltip.updatePosition({ plotX: anchor[0], plotY: anchor[1] });
+            var anchor = tooltip.getAnchor([{}], e);
+            if (chart.isInsidePlot(anchor[0], anchor[1], {
+                visiblePlotOnly: true
+            })) {
+                tooltip.updatePosition({ plotX: anchor[0], plotY: anchor[1] });
+            }
         }
         }
         // Start the event listener to pick up the tooltip and crosshairs
         // Start the event listener to pick up the tooltip and crosshairs
         if (!pointer.unDocMouseMove) {
         if (!pointer.unDocMouseMove) {
@@ -1366,6 +1386,7 @@ var Pointer = /** @class */ (function () {
                     chart.pointer.onDocumentMouseMove(e);
                     chart.pointer.onDocumentMouseMove(e);
                 }
                 }
             });
             });
+            pointer.eventsToUnbind.push(pointer.unDocMouseMove);
         }
         }
         // Issues related to crosshair #4927, #5269 #5066, #5658
         // Issues related to crosshair #4927, #5269 #5066, #5658
         chart.axes.forEach(function drawAxisCrosshair(axis) {
         chart.axes.forEach(function drawAxisCrosshair(axis) {
@@ -1430,8 +1451,8 @@ var Pointer = /** @class */ (function () {
         container.onmousedown = this.onContainerMouseDown.bind(this);
         container.onmousedown = this.onContainerMouseDown.bind(this);
         container.onmousemove = this.onContainerMouseMove.bind(this);
         container.onmousemove = this.onContainerMouseMove.bind(this);
         container.onclick = this.onContainerClick.bind(this);
         container.onclick = this.onContainerClick.bind(this);
-        this.unbindContainerMouseEnter = addEvent(container, 'mouseenter', this.onContainerMouseEnter.bind(this));
-        this.unbindContainerMouseLeave = addEvent(container, 'mouseleave', this.onContainerMouseLeave.bind(this));
+        this.eventsToUnbind.push(addEvent(container, 'mouseenter', this.onContainerMouseEnter.bind(this)));
+        this.eventsToUnbind.push(addEvent(container, 'mouseleave', this.onContainerMouseLeave.bind(this)));
         if (!H.unbindDocumentMouseUp) {
         if (!H.unbindDocumentMouseUp) {
             H.unbindDocumentMouseUp = addEvent(ownerDoc, 'mouseup', this.onDocumentMouseUp.bind(this));
             H.unbindDocumentMouseUp = addEvent(ownerDoc, 'mouseup', this.onDocumentMouseUp.bind(this));
         }
         }
@@ -1439,14 +1460,14 @@ var Pointer = /** @class */ (function () {
         // scrolling parent elements
         // scrolling parent elements
         var parent = this.chart.renderTo.parentElement;
         var parent = this.chart.renderTo.parentElement;
         while (parent && parent.tagName !== 'BODY') {
         while (parent && parent.tagName !== 'BODY') {
-            addEvent(parent, 'scroll', function () {
+            this.eventsToUnbind.push(addEvent(parent, 'scroll', function () {
                 delete _this.chartPosition;
                 delete _this.chartPosition;
-            });
+            }));
             parent = parent.parentElement;
             parent = parent.parentElement;
         }
         }
         if (H.hasTouch) {
         if (H.hasTouch) {
-            addEvent(container, 'touchstart', this.onContainerTouchStart.bind(this), { passive: false });
-            addEvent(container, 'touchmove', this.onContainerTouchMove.bind(this), { passive: false });
+            this.eventsToUnbind.push(addEvent(container, 'touchstart', this.onContainerTouchStart.bind(this), { passive: false }));
+            this.eventsToUnbind.push(addEvent(container, 'touchmove', this.onContainerTouchMove.bind(this), { passive: false }));
             if (!H.unbindDocumentTouchEnd) {
             if (!H.unbindDocumentTouchEnd) {
                 H.unbindDocumentTouchEnd = addEvent(ownerDoc, 'touchend', this.onDocumentTouchEnd.bind(this), { passive: false });
                 H.unbindDocumentTouchEnd = addEvent(ownerDoc, 'touchend', this.onDocumentTouchEnd.bind(this), { passive: false });
             }
             }
@@ -1482,7 +1503,9 @@ var Pointer = /** @class */ (function () {
         this.setHoverChartIndex();
         this.setHoverChartIndex();
         if (e.touches.length === 1) {
         if (e.touches.length === 1) {
             e = this.normalize(e);
             e = this.normalize(e);
-            isInside = chart.isInsidePlot(e.chartX - chart.plotLeft, e.chartY - chart.plotTop);
+            isInside = chart.isInsidePlot(e.chartX - chart.plotLeft, e.chartY - chart.plotTop, {
+                visiblePlotOnly: true
+            });
             if (isInside && !chart.openMenu) {
             if (isInside && !chart.openMenu) {
                 // Run mouse events and display tooltip etc
                 // Run mouse events and display tooltip etc
                 if (start) {
                 if (start) {

+ 3 - 2
node_modules/highcharts/es-modules/Core/Renderer/HTML/AST.js

@@ -306,6 +306,7 @@ var AST = /** @class */ (function () {
         'td',
         'td',
         'th',
         'th',
         'tr',
         'tr',
+        'u',
         'ul',
         'ul',
         '#text'
         '#text'
     ];
     ];
@@ -318,7 +319,7 @@ var AST = /** @class */ (function () {
      * // Allow a custom, trusted attribute
      * // Allow a custom, trusted attribute
      * Highcharts.AST.allowedAttributes.push('data-value');
      * Highcharts.AST.allowedAttributes.push('data-value');
      *
      *
-     * @name Highcharts.AST.allowedTags
+     * @name Highcharts.AST.allowedAttributes
      * @static
      * @static
      */
      */
     AST.allowedAttributes = [
     AST.allowedAttributes = [
@@ -383,7 +384,7 @@ var AST = /** @class */ (function () {
         'width',
         'width',
         'x',
         'x',
         'x1',
         'x1',
-        'xy',
+        'x2',
         'y',
         'y',
         'y1',
         'y1',
         'y2',
         'y2',

+ 19 - 8
node_modules/highcharts/es-modules/Core/Renderer/HTML/HTMLElement.js

@@ -8,6 +8,7 @@
  *
  *
  * */
  * */
 import H from '../../Globals.js';
 import H from '../../Globals.js';
+var isFirefox = H.isFirefox, isMS = H.isMS, isWebKit = H.isWebKit, win = H.win;
 import SVGElement from '../SVG/SVGElement.js';
 import SVGElement from '../SVG/SVGElement.js';
 import U from '../../Utilities.js';
 import U from '../../Utilities.js';
 var css = U.css, defined = U.defined, extend = U.extend, pick = U.pick, pInt = U.pInt;
 var css = U.css, defined = U.defined, extend = U.extend, pick = U.pick, pInt = U.pInt;
@@ -16,7 +17,6 @@ var css = U.css, defined = U.defined, extend = U.extend, pick = U.pick, pInt = U
  * @private
  * @private
  */
  */
 var HTMLElement = SVGElement;
 var HTMLElement = SVGElement;
-var isFirefox = H.isFirefox;
 /* eslint-disable valid-jsdoc */
 /* eslint-disable valid-jsdoc */
 // Extend SvgElement for useHTML option.
 // Extend SvgElement for useHTML option.
 extend(HTMLElement.prototype, /** @lends SVGElement.prototype */ {
 extend(HTMLElement.prototype, /** @lends SVGElement.prototype */ {
@@ -127,7 +127,7 @@ extend(HTMLElement.prototype, /** @lends SVGElement.prototype */ {
             });
             });
         }
         }
         if (elem.tagName === 'SPAN') {
         if (elem.tagName === 'SPAN') {
-            var rotation = wrapper.rotation, baseline, textWidth = wrapper.textWidth && pInt(wrapper.textWidth), currentTextTransform = [
+            var rotation = wrapper.rotation, baseline = void 0, textWidth = wrapper.textWidth && pInt(wrapper.textWidth), currentTextTransform = [
                 rotation,
                 rotation,
                 align,
                 align,
                 elem.innerHTML,
                 elem.innerHTML,
@@ -194,13 +194,24 @@ extend(HTMLElement.prototype, /** @lends SVGElement.prototype */ {
      * @return {void}
      * @return {void}
      */
      */
     setSpanRotation: function (rotation, alignCorrection, baseline) {
     setSpanRotation: function (rotation, alignCorrection, baseline) {
-        var rotationStyle = {}, cssTransformKey = this.renderer.getTransformKey();
-        rotationStyle[cssTransformKey] = rotationStyle.transform =
-            'rotate(' + rotation + 'deg)';
-        rotationStyle[cssTransformKey + (isFirefox ? 'Origin' : '-origin')] =
-            rotationStyle.transformOrigin =
+        var getTransformKey = function () { return (isMS &&
+            !/Edge/.test(win.navigator.userAgent) ?
+            '-ms-transform' :
+            isWebKit ?
+                '-webkit-transform' :
+                isFirefox ?
+                    'MozTransform' :
+                    win.opera ?
+                        '-o-transform' :
+                        void 0); };
+        var rotationStyle = {}, cssTransformKey = getTransformKey();
+        if (cssTransformKey) {
+            rotationStyle[cssTransformKey] = rotationStyle.transform =
+                'rotate(' + rotation + 'deg)';
+            rotationStyle[cssTransformKey + (isFirefox ? 'Origin' : '-origin')] = rotationStyle.transformOrigin =
                 (alignCorrection * 100) + '% ' + baseline + 'px';
                 (alignCorrection * 100) + '% ' + baseline + 'px';
-        css(this.element, rotationStyle);
+            css(this.element, rotationStyle);
+        }
     },
     },
     /**
     /**
      * Get the correction in X and Y positioning as the element is rotated.
      * Get the correction in X and Y positioning as the element is rotated.

+ 4 - 20
node_modules/highcharts/es-modules/Core/Renderer/HTML/HTMLRenderer.js

@@ -7,8 +7,6 @@
  *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!
  *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!
  *
  *
  * */
  * */
-import H from '../../Globals.js';
-var isFirefox = H.isFirefox, isMS = H.isMS, isWebKit = H.isWebKit, win = H.win;
 import AST from './AST.js';
 import AST from './AST.js';
 import SVGElement from '../SVG/SVGElement.js';
 import SVGElement from '../SVG/SVGElement.js';
 import SVGRenderer from '../SVG/SVGRenderer.js';
 import SVGRenderer from '../SVG/SVGRenderer.js';
@@ -22,23 +20,6 @@ var HTMLRenderer = SVGRenderer;
 /* eslint-disable valid-jsdoc */
 /* eslint-disable valid-jsdoc */
 // Extend SvgRenderer for useHTML option.
 // Extend SvgRenderer for useHTML option.
 extend(SVGRenderer.prototype, /** @lends SVGRenderer.prototype */ {
 extend(SVGRenderer.prototype, /** @lends SVGRenderer.prototype */ {
-    /**
-     * @private
-     * @function Highcharts.SVGRenderer#getTransformKey
-     *
-     * @return {string}
-     */
-    getTransformKey: function () {
-        return isMS && !/Edge/.test(win.navigator.userAgent) ?
-            '-ms-transform' :
-            isWebKit ?
-                '-webkit-transform' :
-                isFirefox ?
-                    'MozTransform' :
-                    win.opera ?
-                        '-o-transform' :
-                        '';
-    },
     /**
     /**
      * Create HTML text node. This is used by the VML renderer as well as the
      * Create HTML text node. This is used by the VML renderer as well as the
      * SVG renderer through the useHTML option.
      * SVG renderer through the useHTML option.
@@ -204,7 +185,10 @@ extend(SVGRenderer.prototype, /** @lends SVGRenderer.prototype */ {
                                 }(htmlGroup)),
                                 }(htmlGroup)),
                                 on: function () {
                                 on: function () {
                                     if (parents[0].div) { // #6418
                                     if (parents[0].div) { // #6418
-                                        wrapper.on.apply({ element: parents[0].div }, arguments);
+                                        wrapper.on.apply({
+                                            element: parents[0].div,
+                                            onEvents: wrapper.onEvents
+                                        }, arguments);
                                     }
                                     }
                                     return parentGroup;
                                     return parentGroup;
                                 },
                                 },

+ 229 - 238
node_modules/highcharts/es-modules/Core/Renderer/SVG/SVGElement.js

@@ -15,156 +15,12 @@ import H from '../../Globals.js';
 var deg2rad = H.deg2rad, doc = H.doc, hasTouch = H.hasTouch, noop = H.noop, svg = H.svg, SVG_NS = H.SVG_NS, win = H.win;
 var deg2rad = H.deg2rad, doc = H.doc, hasTouch = H.hasTouch, noop = H.noop, svg = H.svg, SVG_NS = H.SVG_NS, win = H.win;
 import palette from '../../Color/Palette.js';
 import palette from '../../Color/Palette.js';
 import U from '../../Utilities.js';
 import U from '../../Utilities.js';
-var attr = U.attr, createElement = U.createElement, css = U.css, defined = U.defined, erase = U.erase, extend = U.extend, fireEvent = U.fireEvent, isArray = U.isArray, isFunction = U.isFunction, isNumber = U.isNumber, isString = U.isString, merge = U.merge, objectEach = U.objectEach, pick = U.pick, pInt = U.pInt, syncTimeout = U.syncTimeout, uniqueKey = U.uniqueKey;
-/**
- * The horizontal alignment of an element.
- *
- * @typedef {"center"|"left"|"right"} Highcharts.AlignValue
- */
-/**
- * Options to align the element relative to the chart or another box.
- *
- * @interface Highcharts.AlignObject
- */ /**
-* Horizontal alignment. Can be one of `left`, `center` and `right`.
-*
-* @name Highcharts.AlignObject#align
-* @type {Highcharts.AlignValue|undefined}
-*
-* @default left
-*/ /**
-* Vertical alignment. Can be one of `top`, `middle` and `bottom`.
-*
-* @name Highcharts.AlignObject#verticalAlign
-* @type {Highcharts.VerticalAlignValue|undefined}
-*
-* @default top
-*/ /**
-* Horizontal pixel offset from alignment.
-*
-* @name Highcharts.AlignObject#x
-* @type {number|undefined}
-*
-* @default 0
-*/ /**
-* Vertical pixel offset from alignment.
-*
-* @name Highcharts.AlignObject#y
-* @type {number|undefined}
-*
-* @default 0
-*/ /**
-* Use the `transform` attribute with translateX and translateY custom
-* attributes to align this elements rather than `x` and `y` attributes.
-*
-* @name Highcharts.AlignObject#alignByTranslate
-* @type {boolean|undefined}
-*
-* @default false
-*/
-/**
- * Bounding box of an element.
- *
- * @interface Highcharts.BBoxObject
- * @extends Highcharts.PositionObject
- */ /**
-* Height of the bounding box.
-*
-* @name Highcharts.BBoxObject#height
-* @type {number}
-*/ /**
-* Width of the bounding box.
-*
-* @name Highcharts.BBoxObject#width
-* @type {number}
-*/ /**
-* Horizontal position of the bounding box.
-*
-* @name Highcharts.BBoxObject#x
-* @type {number}
-*/ /**
-* Vertical position of the bounding box.
-*
-* @name Highcharts.BBoxObject#y
-* @type {number}
-*/
-/**
- * An object of key-value pairs for SVG attributes. Attributes in Highcharts
- * elements for the most parts correspond to SVG, but some are specific to
- * Highcharts, like `zIndex`, `rotation`, `rotationOriginX`,
- * `rotationOriginY`, `translateX`, `translateY`, `scaleX` and `scaleY`. SVG
- * attributes containing a hyphen are _not_ camel-cased, they should be
- * quoted to preserve the hyphen.
- *
- * @example
- * {
- *     'stroke': '#ff0000', // basic
- *     'stroke-width': 2, // hyphenated
- *     'rotation': 45 // custom
- *     'd': ['M', 10, 10, 'L', 30, 30, 'z'] // path definition, note format
- * }
- *
- * @interface Highcharts.SVGAttributes
- */ /**
-* @name Highcharts.SVGAttributes#[key:string]
-* @type {*}
-*/ /**
-* @name Highcharts.SVGAttributes#d
-* @type {string|Highcharts.SVGPathArray|undefined}
-*/ /**
-* @name Highcharts.SVGAttributes#fill
-* @type {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject|undefined}
-*/ /**
-* @name Highcharts.SVGAttributes#inverted
-* @type {boolean|undefined}
-*/ /**
-* @name Highcharts.SVGAttributes#matrix
-* @type {Array<number>|undefined}
-*/ /**
-* @name Highcharts.SVGAttributes#rotation
-* @type {number|undefined}
-*/ /**
-* @name Highcharts.SVGAttributes#rotationOriginX
-* @type {number|undefined}
-*/ /**
-* @name Highcharts.SVGAttributes#rotationOriginY
-* @type {number|undefined}
-*/ /**
-* @name Highcharts.SVGAttributes#scaleX
-* @type {number|undefined}
-*/ /**
-* @name Highcharts.SVGAttributes#scaleY
-* @type {number|undefined}
-*/ /**
-* @name Highcharts.SVGAttributes#stroke
-* @type {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject|undefined}
-*/ /**
-* @name Highcharts.SVGAttributes#style
-* @type {string|Highcharts.CSSObject|undefined}
-*/ /**
-* @name Highcharts.SVGAttributes#translateX
-* @type {number|undefined}
-*/ /**
-* @name Highcharts.SVGAttributes#translateY
-* @type {number|undefined}
-*/ /**
-* @name Highcharts.SVGAttributes#zIndex
-* @type {number|undefined}
-*/
-/**
- * An SVG DOM element. The type is a reference to the regular SVGElement in the
- * global scope.
- *
- * @typedef {globals.GlobalSVGElement} Highcharts.SVGDOMElement
+var addEvent = U.addEvent, attr = U.attr, createElement = U.createElement, css = U.css, defined = U.defined, erase = U.erase, extend = U.extend, fireEvent = U.fireEvent, isArray = U.isArray, isFunction = U.isFunction, isNumber = U.isNumber, isString = U.isString, merge = U.merge, objectEach = U.objectEach, pick = U.pick, pInt = U.pInt, syncTimeout = U.syncTimeout, uniqueKey = U.uniqueKey;
+/* *
  *
  *
- * @see https://developer.mozilla.org/en-US/docs/Web/API/SVGElement
- */
-/**
- * The vertical alignment of an element.
+ *  Class
  *
  *
- * @typedef {"bottom"|"middle"|"top"} Highcharts.VerticalAlignValue
- */
-''; // detach doclets above
+ * */
 /* eslint-disable no-invalid-this, valid-jsdoc */
 /* eslint-disable no-invalid-this, valid-jsdoc */
 /**
 /**
  * The SVGElement prototype is a JavaScript wrapper for SVG elements used in the
  * The SVGElement prototype is a JavaScript wrapper for SVG elements used in the
@@ -196,7 +52,7 @@ var SVGElement = /** @class */ (function () {
          *
          *
          * */
          * */
         this.element = void 0;
         this.element = void 0;
-        this.height = void 0;
+        this.onEvents = {};
         this.opacity = 1; // Default base for animation
         this.opacity = 1; // Default base for animation
         this.renderer = void 0;
         this.renderer = void 0;
         this.SVG_NS = SVG_NS;
         this.SVG_NS = SVG_NS;
@@ -215,8 +71,8 @@ var SVGElement = /** @class */ (function () {
             'anchorY',
             'anchorY',
             'rounded'
             'rounded'
         ];
         ];
-        this.width = void 0;
     }
     }
+    // @todo public zIndex?: number;
     /* *
     /* *
      *
      *
      *  Functions
      *  Functions
@@ -275,7 +131,8 @@ var SVGElement = /** @class */ (function () {
      *         Returns the SVGElement for chaining.
      *         Returns the SVGElement for chaining.
      */
      */
     SVGElement.prototype.add = function (parent) {
     SVGElement.prototype.add = function (parent) {
-        var renderer = this.renderer, element = this.element, inserted;
+        var renderer = this.renderer, element = this.element;
+        var inserted;
         if (parent) {
         if (parent) {
             this.parentGroup = parent;
             this.parentGroup = parent;
         }
         }
@@ -379,7 +236,8 @@ var SVGElement = /** @class */ (function () {
      * @return {Highcharts.SVGElement} Returns the SVGElement for chaining.
      * @return {Highcharts.SVGElement} Returns the SVGElement for chaining.
      */
      */
     SVGElement.prototype.align = function (alignOptions, alignByTranslate, box) {
     SVGElement.prototype.align = function (alignOptions, alignByTranslate, box) {
-        var align, vAlign, x, y, attribs = {}, alignTo, renderer = this.renderer, alignedObjects = renderer.alignedObjects, alignFactor, vAlignFactor;
+        var attribs = {}, renderer = this.renderer, alignedObjects = renderer.alignedObjects;
+        var x, y, alignTo, alignFactor, vAlignFactor;
         // First call on instanciate
         // First call on instanciate
         if (alignOptions) {
         if (alignOptions) {
             this.alignOptions = alignOptions;
             this.alignOptions = alignOptions;
@@ -398,10 +256,9 @@ var SVGElement = /** @class */ (function () {
             alignByTranslate = this.alignByTranslate;
             alignByTranslate = this.alignByTranslate;
             alignTo = this.alignTo;
             alignTo = this.alignTo;
         }
         }
-        box = pick(box, renderer[alignTo], renderer);
+        box = pick(box, renderer[alignTo], alignTo === 'scrollablePlotBox' ? renderer.plotBox : void 0, renderer);
         // Assign variables
         // Assign variables
-        align = alignOptions.align;
-        vAlign = alignOptions.verticalAlign;
+        var align = alignOptions.align, vAlign = alignOptions.verticalAlign;
         // default: left align
         // default: left align
         x = (box.x || 0) + (alignOptions.x || 0);
         x = (box.x || 0) + (alignOptions.x || 0);
         // default: top align
         // default: top align
@@ -569,14 +426,17 @@ var SVGElement = /** @class */ (function () {
             });
             });
             // Insert an absolutely positioned break before the original text
             // Insert an absolutely positioned break before the original text
             // to keep it in place
             // to keep it in place
-            var br = doc.createElementNS(SVG_NS, 'tspan');
-            br.textContent = '\u200B';
-            attr(br, {
-                x: elem.getAttribute('x'),
-                y: elem.getAttribute('y')
+            var br_1 = doc.createElementNS(SVG_NS, 'tspan');
+            br_1.textContent = '\u200B';
+            // Copy x and y if not null
+            ['x', 'y'].forEach(function (key) {
+                var value = elem.getAttribute(key);
+                if (value) {
+                    br_1.setAttribute(key, value);
+                }
             });
             });
             // Insert the outline
             // Insert the outline
-            outline_1.appendChild(br);
+            outline_1.appendChild(br_1);
             elem.insertBefore(outline_1, elem.firstChild);
             elem.insertBefore(outline_1, elem.firstChild);
         }
         }
     };
     };
@@ -640,7 +500,8 @@ var SVGElement = /** @class */ (function () {
     *         used as a getter, the current value of the attribute is returned.
     *         used as a getter, the current value of the attribute is returned.
     */
     */
     SVGElement.prototype.attr = function (hash, val, complete, continueAnimation) {
     SVGElement.prototype.attr = function (hash, val, complete, continueAnimation) {
-        var key, element = this.element, hasSetSymbolSize, ret = this, skipAttr, setter, symbolCustomAttribs = this.symbolCustomAttribs;
+        var element = this.element, symbolCustomAttribs = this.symbolCustomAttribs;
+        var key, hasSetSymbolSize, ret = this, skipAttr, setter;
         // single key-value pair
         // single key-value pair
         if (typeof hash === 'string' && typeof val !== 'undefined') {
         if (typeof hash === 'string' && typeof val !== 'undefined') {
             key = hash;
             key = hash;
@@ -726,10 +587,10 @@ var SVGElement = /** @class */ (function () {
      * The modified rectangle arguments.
      * The modified rectangle arguments.
      */
      */
     SVGElement.prototype.crisp = function (rect, strokeWidth) {
     SVGElement.prototype.crisp = function (rect, strokeWidth) {
-        var wrapper = this, normalizer;
+        var wrapper = this;
         strokeWidth = strokeWidth || rect.strokeWidth || 0;
         strokeWidth = strokeWidth || rect.strokeWidth || 0;
         // Math.round because strokeWidth can sometimes have roundoff errors
         // Math.round because strokeWidth can sometimes have roundoff errors
-        normalizer = Math.round(strokeWidth) % 2 / 2;
+        var normalizer = Math.round(strokeWidth) % 2 / 2;
         // normalize for crisp edges
         // normalize for crisp edges
         rect.x = Math.floor(rect.x || wrapper.x || 0) + normalizer;
         rect.x = Math.floor(rect.x || wrapper.x || 0) + normalizer;
         rect.y = Math.floor(rect.y || wrapper.y || 0) + normalizer;
         rect.y = Math.floor(rect.y || wrapper.y || 0) + normalizer;
@@ -758,7 +619,8 @@ var SVGElement = /** @class */ (function () {
      * SVG element to apply the gradient on.
      * SVG element to apply the gradient on.
      */
      */
     SVGElement.prototype.complexColor = function (colorOptions, prop, elem) {
     SVGElement.prototype.complexColor = function (colorOptions, prop, elem) {
-        var renderer = this.renderer, colorObject, gradName, gradAttr, radAttr, gradients, stops, stopColor, stopOpacity, radialReference, id, key = [], value;
+        var renderer = this.renderer;
+        var colorObject, gradName, gradAttr, radAttr, gradients, stops, stopColor, stopOpacity, radialReference, id, key = [], value;
         fireEvent(this.renderer, 'complexColor', {
         fireEvent(this.renderer, 'complexColor', {
             args: arguments
             args: arguments
         }, function () {
         }, function () {
@@ -794,9 +656,9 @@ var SVGElement = /** @class */ (function () {
                 }
                 }
                 // Build the unique key to detect whether we need to create a
                 // Build the unique key to detect whether we need to create a
                 // new element (#1282)
                 // new element (#1282)
-                objectEach(gradAttr, function (val, n) {
+                objectEach(gradAttr, function (value, n) {
                     if (n !== 'id') {
                     if (n !== 'id') {
-                        key.push(n, val);
+                        key.push(n, value);
                     }
                     }
                 });
                 });
                 objectEach(stops, function (val) {
                 objectEach(stops, function (val) {
@@ -820,7 +682,6 @@ var SVGElement = /** @class */ (function () {
                     // destroy them
                     // destroy them
                     gradientObject_1.stops = [];
                     gradientObject_1.stops = [];
                     stops.forEach(function (stop) {
                     stops.forEach(function (stop) {
-                        var stopObject;
                         if (stop[1].indexOf('rgba') === 0) {
                         if (stop[1].indexOf('rgba') === 0) {
                             colorObject = Color.parse(stop[1]);
                             colorObject = Color.parse(stop[1]);
                             stopColor = colorObject.get('rgb');
                             stopColor = colorObject.get('rgb');
@@ -830,7 +691,7 @@ var SVGElement = /** @class */ (function () {
                             stopColor = stop[1];
                             stopColor = stop[1];
                             stopOpacity = 1;
                             stopOpacity = 1;
                         }
                         }
-                        stopObject = renderer.createElement('stop').attr({
+                        var stopObject = renderer.createElement('stop').attr({
                             offset: stop[0],
                             offset: stop[0],
                             'stop-color': stopColor,
                             'stop-color': stopColor,
                             'stop-opacity': stopOpacity
                             'stop-opacity': stopOpacity
@@ -869,12 +730,13 @@ var SVGElement = /** @class */ (function () {
      *         Return the SVG element for chaining.
      *         Return the SVG element for chaining.
      */
      */
     SVGElement.prototype.css = function (styles) {
     SVGElement.prototype.css = function (styles) {
-        var oldStyles = this.styles, newStyles = {}, elem = this.element, textWidth, serializedCss = '', hyphenate, hasNew = !oldStyles, 
+        var oldStyles = this.styles, newStyles = {}, elem = this.element, 
         // These CSS properties are interpreted internally by the SVG
         // These CSS properties are interpreted internally by the SVG
         // renderer, but are not supported by SVG and should not be added to
         // renderer, but are not supported by SVG and should not be added to
         // the DOM. In styled mode, no CSS should find its way to the DOM
         // the DOM. In styled mode, no CSS should find its way to the DOM
         // whatsoever (#6173, #6474).
         // whatsoever (#6173, #6474).
         svgPseudoProps = ['textOutline', 'textOverflow', 'width'];
         svgPseudoProps = ['textOutline', 'textOverflow', 'width'];
+        var textWidth, serializedCss = '', hyphenate, hasNew = !oldStyles;
         // convert legacy
         // convert legacy
         if (styles && styles.color) {
         if (styles && styles.color) {
             styles.fill = styles.color;
             styles.fill = styles.color;
@@ -982,10 +844,11 @@ var SVGElement = /** @class */ (function () {
      * @function Highcharts.SVGElement#destroy
      * @function Highcharts.SVGElement#destroy
      */
      */
     SVGElement.prototype.destroy = function () {
     SVGElement.prototype.destroy = function () {
-        var wrapper = this, element = wrapper.element || {}, renderer = wrapper.renderer, parentToClean = (renderer.isSVG &&
+        var wrapper = this, element = wrapper.element || {}, renderer = wrapper.renderer, ownerSVGElement = element.ownerSVGElement;
+        var parentToClean = (renderer.isSVG &&
             element.nodeName === 'SPAN' &&
             element.nodeName === 'SPAN' &&
             wrapper.parentGroup ||
             wrapper.parentGroup ||
-            void 0), grandParent, ownerSVGElement = element.ownerSVGElement, i;
+            void 0), grandParent, i;
         // remove events
         // remove events
         element.onclick = element.onmouseout = element.onmouseover =
         element.onclick = element.onmouseout = element.onmouseover =
             element.onmousemove = element.point = null;
             element.onmousemove = element.point = null;
@@ -996,8 +859,7 @@ var SVGElement = /** @class */ (function () {
             // before destroying the element (#6196).
             // before destroying the element (#6196).
             // The upper case version is for Edge
             // The upper case version is for Edge
             [].forEach.call(ownerSVGElement.querySelectorAll('[clip-path],[CLIP-PATH]'), function (el) {
             [].forEach.call(ownerSVGElement.querySelectorAll('[clip-path],[CLIP-PATH]'), function (el) {
-                var clipPathAttr = el.getAttribute('clip-path');
-                if (clipPathAttr.indexOf(clipPath_1.element.id) > -1) {
+                if (el.getAttribute('clip-path').indexOf(clipPath_1.element.id) > -1) {
                     el.removeAttribute('clip-path');
                     el.removeAttribute('clip-path');
                 }
                 }
             });
             });
@@ -1186,11 +1048,10 @@ var SVGElement = /** @class */ (function () {
      *         The bounding box with `x`, `y`, `width` and `height` properties.
      *         The bounding box with `x`, `y`, `width` and `height` properties.
      */
      */
     SVGElement.prototype.getBBox = function (reload, rot) {
     SVGElement.prototype.getBBox = function (reload, rot) {
-        var wrapper = this, bBox, // = wrapper.bBox,
-        renderer = wrapper.renderer, width, height, element = wrapper.element, styles = wrapper.styles, fontSize, textStr = wrapper.textStr, toggleTextShadowShim, cache = renderer.cache, cacheKeys = renderer.cacheKeys, isSVG = element.namespaceURI === wrapper.SVG_NS, cacheKey;
-        var rotation = pick(rot, wrapper.rotation, 0);
-        fontSize = renderer.styledMode ? (element &&
+        var wrapper = this, renderer = wrapper.renderer, element = wrapper.element, styles = wrapper.styles, textStr = wrapper.textStr, cache = renderer.cache, cacheKeys = renderer.cacheKeys, isSVG = element.namespaceURI === wrapper.SVG_NS, rotation = pick(rot, wrapper.rotation, 0), fontSize = renderer.styledMode ? (element &&
             SVGElement.prototype.getStyle.call(element, 'font-size')) : (styles && styles.fontSize);
             SVGElement.prototype.getStyle.call(element, 'font-size')) : (styles && styles.fontSize);
+        var bBox, // = wrapper.bBox,
+        width, height, toggleTextShadowShim, cacheKey;
         // Avoid undefined and null (#7316)
         // Avoid undefined and null (#7316)
         if (defined(textStr)) {
         if (defined(textStr)) {
             cacheKey = textStr.toString();
             cacheKey = textStr.toString();
@@ -1414,15 +1275,14 @@ var SVGElement = /** @class */ (function () {
      *         Return the SVGElement for chaining.
      *         Return the SVGElement for chaining.
      */
      */
     SVGElement.prototype.invert = function (inverted) {
     SVGElement.prototype.invert = function (inverted) {
-        var wrapper = this;
-        wrapper.inverted = inverted;
-        wrapper.updateTransform();
-        return wrapper;
+        this.inverted = inverted;
+        this.updateTransform();
+        return this;
     };
     };
     /**
     /**
-     * Add an event listener. This is a simple setter that replaces all other
-     * events of the same type, opposed to the {@link Highcharts#addEvent}
-     * function.
+     * Add an event listener. This is a simple setter that replaces the
+     * previous event of the same type added by this function, as opposed to
+     * the {@link Highcharts#addEvent} function.
      *
      *
      * @sample highcharts/members/element-on/
      * @sample highcharts/members/element-on/
      *         A clickable rectangle
      *         A clickable rectangle
@@ -1430,9 +1290,7 @@ var SVGElement = /** @class */ (function () {
      * @function Highcharts.SVGElement#on
      * @function Highcharts.SVGElement#on
      *
      *
      * @param {string} eventType
      * @param {string} eventType
-     * The event type. If the type is `click`, Highcharts will internally
-     * translate it to a `touchstart` event on touch devices, to prevent the
-     * browser from waiting for a click event from firing.
+     * The event type.
      *
      *
      * @param {Function} handler
      * @param {Function} handler
      * The handler callback.
      * The handler callback.
@@ -1441,44 +1299,12 @@ var SVGElement = /** @class */ (function () {
      * The SVGElement for chaining.
      * The SVGElement for chaining.
      */
      */
     SVGElement.prototype.on = function (eventType, handler) {
     SVGElement.prototype.on = function (eventType, handler) {
-        var svgElement = this, element = svgElement.element, touchStartPos, touchEventFired;
-        // touch
-        if (hasTouch && eventType === 'click') {
-            element.ontouchstart = function (e) {
-                // save touch position for later calculation
-                touchStartPos = {
-                    clientX: e.touches[0].clientX,
-                    clientY: e.touches[0].clientY
-                };
-            };
-            // Instead of ontouchstart, event handlers should be called
-            // on touchend - similar to how current mouseup events are called
-            element.ontouchend = function (e) {
-                // hasMoved is a boolean variable containing logic if page
-                // was scrolled, so if touch position changed more than
-                // ~4px (value borrowed from general touch handler)
-                var hasMoved = touchStartPos.clientX ? Math.sqrt(Math.pow(touchStartPos.clientX - e.changedTouches[0].clientX, 2) +
-                    Math.pow(touchStartPos.clientY - e.changedTouches[0].clientY, 2)) >= 4 : false;
-                if (!hasMoved) { // only call handlers if page was not scrolled
-                    handler.call(element, e);
-                }
-                touchEventFired = true;
-                if (e.cancelable !== false) {
-                    // prevent other events from being fired. #9682
-                    e.preventDefault();
-                }
-            };
-            element.onclick = function (e) {
-                // Do not call onclick handler if touch event was fired already.
-                if (!touchEventFired) {
-                    handler.call(element, e);
-                }
-            };
-        }
-        else {
-            // simplest possible event model for internal use
-            element['on' + eventType] = handler;
+        var onEvents = this.onEvents;
+        if (onEvents[eventType]) {
+            // Unbind existing event
+            onEvents[eventType]();
         }
         }
+        onEvents[eventType] = addEvent(this.element, eventType, handler);
         return this;
         return this;
     };
     };
     /**
     /**
@@ -1577,7 +1403,8 @@ var SVGElement = /** @class */ (function () {
     SVGElement.prototype.setTextPath = function (path, textPathOptions) {
     SVGElement.prototype.setTextPath = function (path, textPathOptions) {
         var elem = this.element, textNode = this.text ? this.text.element : elem, attribsMap = {
         var elem = this.element, textNode = this.text ? this.text.element : elem, attribsMap = {
             textAnchor: 'text-anchor'
             textAnchor: 'text-anchor'
-        }, attrs, adder = false, textPathElement, textPathId, textPathWrapper = this.textPathWrapper, firstTime = !textPathWrapper;
+        };
+        var adder = false, textPathElement, textPathId, textPathWrapper = this.textPathWrapper, firstTime = !textPathWrapper;
         // Defaults
         // Defaults
         textPathOptions = merge(true, {
         textPathOptions = merge(true, {
             enabled: true,
             enabled: true,
@@ -1587,7 +1414,7 @@ var SVGElement = /** @class */ (function () {
                 textAnchor: 'middle'
                 textAnchor: 'middle'
             }
             }
         }, textPathOptions);
         }, textPathOptions);
-        attrs = AST.filterUserAttributes(textPathOptions.attributes);
+        var attrs = AST.filterUserAttributes(textPathOptions.attributes);
         if (path && textPathOptions && textPathOptions.enabled) {
         if (path && textPathOptions && textPathOptions.enabled) {
             // In case of fixed width for a text, string is rebuilt
             // In case of fixed width for a text, string is rebuilt
             // (e.g. ellipsis is applied), so we need to rebuild textPath too
             // (e.g. ellipsis is applied), so we need to rebuild textPath too
@@ -1722,17 +1549,16 @@ var SVGElement = /** @class */ (function () {
      *         Returns the SVGElement for chaining.
      *         Returns the SVGElement for chaining.
      */
      */
     SVGElement.prototype.shadow = function (shadowOptions, group, cutOff) {
     SVGElement.prototype.shadow = function (shadowOptions, group, cutOff) {
-        var shadows = [], i, shadow, element = this.element, strokeWidth, shadowElementOpacity, update = false, oldShadowOptions = this.oldShadowOptions, 
-        // compensate for inverted plot area
-        transform;
-        var defaultShadowOptions = {
+        var shadows = [], element = this.element, oldShadowOptions = this.oldShadowOptions, defaultShadowOptions = {
             color: palette.neutralColor100,
             color: palette.neutralColor100,
             offsetX: 1,
             offsetX: 1,
             offsetY: 1,
             offsetY: 1,
             opacity: 0.15,
             opacity: 0.15,
             width: 3
             width: 3
         };
         };
-        var options;
+        var i, shadow, strokeWidth, shadowElementOpacity, update = false, 
+        // compensate for inverted plot area
+        transform, options;
         if (shadowOptions === true) {
         if (shadowOptions === true) {
             options = defaultShadowOptions;
             options = defaultShadowOptions;
         }
         }
@@ -1863,7 +1689,8 @@ var SVGElement = /** @class */ (function () {
             return this['stroke-width'] || 0;
             return this['stroke-width'] || 0;
         }
         }
         // In styled mode, read computed stroke width
         // In styled mode, read computed stroke width
-        var val = this.getStyle('stroke-width'), ret = 0, dummy;
+        var val = this.getStyle('stroke-width');
+        var ret = 0, dummy;
         // Read pixel values directly
         // Read pixel values directly
         if (val.indexOf('px') === val.length - 2) {
         if (val.indexOf('px') === val.length - 2) {
             ret = pInt(val);
             ret = pInt(val);
@@ -2023,7 +1850,8 @@ var SVGElement = /** @class */ (function () {
      * @function Highcharts.SVGElement#updateTransform
      * @function Highcharts.SVGElement#updateTransform
      */
      */
     SVGElement.prototype.updateTransform = function () {
     SVGElement.prototype.updateTransform = function () {
-        var wrapper = this, translateX = wrapper.translateX || 0, translateY = wrapper.translateY || 0, scaleX = wrapper.scaleX, scaleY = wrapper.scaleY, inverted = wrapper.inverted, rotation = wrapper.rotation, matrix = wrapper.matrix, element = wrapper.element, transform;
+        var wrapper = this, scaleX = wrapper.scaleX, scaleY = wrapper.scaleY, inverted = wrapper.inverted, rotation = wrapper.rotation, matrix = wrapper.matrix, element = wrapper.element;
+        var translateX = wrapper.translateX || 0, translateY = wrapper.translateY || 0;
         // Flipping affects translate as adjustment for flipping around the
         // Flipping affects translate as adjustment for flipping around the
         // group's axis
         // group's axis
         if (inverted) {
         if (inverted) {
@@ -2033,7 +1861,7 @@ var SVGElement = /** @class */ (function () {
         // Apply translate. Nearly all transformed elements have translation,
         // Apply translate. Nearly all transformed elements have translation,
         // so instead of checking for translate = 0, do it always (#1767,
         // so instead of checking for translate = 0, do it always (#1767,
         // #1846).
         // #1846).
-        transform = ['translate(' + translateX + ',' + translateY + ')'];
+        var transform = ['translate(' + translateX + ',' + translateY + ')'];
         // apply matrix
         // apply matrix
         if (defined(matrix)) {
         if (defined(matrix)) {
             transform.push('matrix(' + matrix.join(',') + ')');
             transform.push('matrix(' + matrix.join(',') + ')');
@@ -2106,7 +1934,8 @@ var SVGElement = /** @class */ (function () {
      * @return {boolean}
      * @return {boolean}
      */
      */
     SVGElement.prototype.zIndexSetter = function (value, key) {
     SVGElement.prototype.zIndexSetter = function (value, key) {
-        var renderer = this.renderer, parentGroup = this.parentGroup, parentWrapper = parentGroup || renderer, parentNode = parentWrapper.element || renderer.box, childNodes, otherElement, otherZIndex, element = this.element, inserted = false, undefinedOtherZIndex, svgParent = parentNode === renderer.box, run = this.added, i;
+        var renderer = this.renderer, parentGroup = this.parentGroup, parentWrapper = parentGroup || renderer, parentNode = parentWrapper.element || renderer.box, element = this.element, svgParent = parentNode === renderer.box;
+        var childNodes, otherElement, otherZIndex, inserted = false, undefinedOtherZIndex, run = this.added, i;
         if (defined(value)) {
         if (defined(value)) {
             // So we can read it for other elements in the group
             // So we can read it for other elements in the group
             element.setAttribute('data-z-index', value);
             element.setAttribute('data-z-index', value);
@@ -2184,5 +2013,167 @@ SVGElement.prototype.matrixSetter =
                                     this[key] = value;
                                     this[key] = value;
                                     this.doTransform = true;
                                     this.doTransform = true;
                                 };
                                 };
-H.SVGElement = SVGElement;
-export default H.SVGElement;
+export default SVGElement;
+/* *
+ *
+ *  API Declarations
+ *
+ * */
+/**
+ * Reference to the global SVGElement class as a workaround for a name conflict
+ * in the Highcharts namespace.
+ *
+ * @global
+ * @typedef {global.SVGElement} GlobalSVGElement
+ *
+ * @see https://developer.mozilla.org/en-US/docs/Web/API/SVGElement
+ */
+/**
+ * The horizontal alignment of an element.
+ *
+ * @typedef {"center"|"left"|"right"} Highcharts.AlignValue
+ */
+/**
+ * Options to align the element relative to the chart or another box.
+ *
+ * @interface Highcharts.AlignObject
+ */ /**
+* Horizontal alignment. Can be one of `left`, `center` and `right`.
+*
+* @name Highcharts.AlignObject#align
+* @type {Highcharts.AlignValue|undefined}
+*
+* @default left
+*/ /**
+* Vertical alignment. Can be one of `top`, `middle` and `bottom`.
+*
+* @name Highcharts.AlignObject#verticalAlign
+* @type {Highcharts.VerticalAlignValue|undefined}
+*
+* @default top
+*/ /**
+* Horizontal pixel offset from alignment.
+*
+* @name Highcharts.AlignObject#x
+* @type {number|undefined}
+*
+* @default 0
+*/ /**
+* Vertical pixel offset from alignment.
+*
+* @name Highcharts.AlignObject#y
+* @type {number|undefined}
+*
+* @default 0
+*/ /**
+* Use the `transform` attribute with translateX and translateY custom
+* attributes to align this elements rather than `x` and `y` attributes.
+*
+* @name Highcharts.AlignObject#alignByTranslate
+* @type {boolean|undefined}
+*
+* @default false
+*/
+/**
+ * Bounding box of an element.
+ *
+ * @interface Highcharts.BBoxObject
+ * @extends Highcharts.PositionObject
+ */ /**
+* Height of the bounding box.
+*
+* @name Highcharts.BBoxObject#height
+* @type {number}
+*/ /**
+* Width of the bounding box.
+*
+* @name Highcharts.BBoxObject#width
+* @type {number}
+*/ /**
+* Horizontal position of the bounding box.
+*
+* @name Highcharts.BBoxObject#x
+* @type {number}
+*/ /**
+* Vertical position of the bounding box.
+*
+* @name Highcharts.BBoxObject#y
+* @type {number}
+*/
+/**
+ * An object of key-value pairs for SVG attributes. Attributes in Highcharts
+ * elements for the most parts correspond to SVG, but some are specific to
+ * Highcharts, like `zIndex`, `rotation`, `rotationOriginX`,
+ * `rotationOriginY`, `translateX`, `translateY`, `scaleX` and `scaleY`. SVG
+ * attributes containing a hyphen are _not_ camel-cased, they should be
+ * quoted to preserve the hyphen.
+ *
+ * @example
+ * {
+ *     'stroke': '#ff0000', // basic
+ *     'stroke-width': 2, // hyphenated
+ *     'rotation': 45 // custom
+ *     'd': ['M', 10, 10, 'L', 30, 30, 'z'] // path definition, note format
+ * }
+ *
+ * @interface Highcharts.SVGAttributes
+ */ /**
+* @name Highcharts.SVGAttributes#[key:string]
+* @type {*}
+*/ /**
+* @name Highcharts.SVGAttributes#d
+* @type {string|Highcharts.SVGPathArray|undefined}
+*/ /**
+* @name Highcharts.SVGAttributes#fill
+* @type {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject|undefined}
+*/ /**
+* @name Highcharts.SVGAttributes#inverted
+* @type {boolean|undefined}
+*/ /**
+* @name Highcharts.SVGAttributes#matrix
+* @type {Array<number>|undefined}
+*/ /**
+* @name Highcharts.SVGAttributes#rotation
+* @type {number|undefined}
+*/ /**
+* @name Highcharts.SVGAttributes#rotationOriginX
+* @type {number|undefined}
+*/ /**
+* @name Highcharts.SVGAttributes#rotationOriginY
+* @type {number|undefined}
+*/ /**
+* @name Highcharts.SVGAttributes#scaleX
+* @type {number|undefined}
+*/ /**
+* @name Highcharts.SVGAttributes#scaleY
+* @type {number|undefined}
+*/ /**
+* @name Highcharts.SVGAttributes#stroke
+* @type {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject|undefined}
+*/ /**
+* @name Highcharts.SVGAttributes#style
+* @type {string|Highcharts.CSSObject|undefined}
+*/ /**
+* @name Highcharts.SVGAttributes#translateX
+* @type {number|undefined}
+*/ /**
+* @name Highcharts.SVGAttributes#translateY
+* @type {number|undefined}
+*/ /**
+* @name Highcharts.SVGAttributes#zIndex
+* @type {number|undefined}
+*/
+/**
+ * An SVG DOM element. The type is a reference to the regular SVGElement in the
+ * global scope.
+ *
+ * @typedef {globals.GlobalSVGElement} Highcharts.SVGDOMElement
+ *
+ * @see https://developer.mozilla.org/en-US/docs/Web/API/SVGElement
+ */
+/**
+ * The vertical alignment of an element.
+ *
+ * @typedef {"bottom"|"middle"|"top"} Highcharts.VerticalAlignValue
+ */
+''; // detach doclets above

+ 17 - 20
node_modules/highcharts/es-modules/Core/Renderer/SVG/SVGLabel.js

@@ -66,10 +66,7 @@ var SVGLabel = /** @class */ (function (_super) {
         if (className) {
         if (className) {
             _this.addClass('highcharts-' + className);
             _this.addClass('highcharts-' + className);
         }
         }
-        _this.text = renderer.text('', 0, 0, useHTML)
-            .attr({
-            zIndex: 1
-        });
+        _this.text = renderer.text('', 0, 0, useHTML).attr({ zIndex: 1 });
         // Validate the shape argument
         // Validate the shape argument
         var hasBGImage;
         var hasBGImage;
         if (typeof shape === 'string') {
         if (typeof shape === 'string') {
@@ -92,11 +89,11 @@ var SVGLabel = /** @class */ (function (_super) {
      *
      *
      * */
      * */
     SVGLabel.prototype.alignSetter = function (value) {
     SVGLabel.prototype.alignSetter = function (value) {
-        var alignFactor = {
+        var alignFactor = ({
             left: 0,
             left: 0,
             center: 0.5,
             center: 0.5,
             right: 1
             right: 1
-        }[value];
+        })[value];
         if (alignFactor !== this.alignFactor) {
         if (alignFactor !== this.alignFactor) {
             this.alignFactor = alignFactor;
             this.alignFactor = alignFactor;
             // Bounding box exists, means we're dynamically changing
             // Bounding box exists, means we're dynamically changing
@@ -130,20 +127,20 @@ var SVGLabel = /** @class */ (function (_super) {
      */
      */
     SVGLabel.prototype.css = function (styles) {
     SVGLabel.prototype.css = function (styles) {
         if (styles) {
         if (styles) {
-            var textStyles = {}, isWidth, isFontStyle;
+            var textStyles_1 = {}, isWidth = void 0, isFontStyle = void 0;
             // Create a copy to avoid altering the original object
             // Create a copy to avoid altering the original object
             // (#537)
             // (#537)
             styles = merge(styles);
             styles = merge(styles);
             SVGLabel.textProps.forEach(function (prop) {
             SVGLabel.textProps.forEach(function (prop) {
                 if (typeof styles[prop] !== 'undefined') {
                 if (typeof styles[prop] !== 'undefined') {
-                    textStyles[prop] = styles[prop];
+                    textStyles_1[prop] = styles[prop];
                     delete styles[prop];
                     delete styles[prop];
                 }
                 }
             });
             });
-            this.text.css(textStyles);
-            isWidth = 'width' in textStyles;
-            isFontStyle = 'fontSize' in textStyles ||
-                'fontWeight' in textStyles;
+            this.text.css(textStyles_1);
+            isWidth = 'width' in textStyles_1;
+            isFontStyle = 'fontSize' in textStyles_1 ||
+                'fontWeight' in textStyles_1;
             // Update existing text, box (#9400, #12163)
             // Update existing text, box (#9400, #12163)
             if (isFontStyle) {
             if (isFontStyle) {
                 this.updateTextPadding();
                 this.updateTextPadding();
@@ -183,14 +180,19 @@ var SVGLabel = /** @class */ (function (_super) {
      * Return the bounding box of the box, not the group.
      * Return the bounding box of the box, not the group.
      */
      */
     SVGLabel.prototype.getBBox = function () {
     SVGLabel.prototype.getBBox = function () {
-        var bBox = this.bBox;
+        // If we have a text string and the DOM bBox was 0, it typically means
+        // that the label was first rendered hidden, so we need to update the
+        // bBox (#15246)
+        if (this.textStr && this.bBox.width === 0 && this.bBox.height === 0) {
+            this.updateBoxSize();
+        }
         var padding = this.padding;
         var padding = this.padding;
         var paddingLeft = pick(this.paddingLeft, padding);
         var paddingLeft = pick(this.paddingLeft, padding);
         return {
         return {
             width: this.width,
             width: this.width,
             height: this.height,
             height: this.height,
-            x: bBox.x - paddingLeft,
-            y: bBox.y - padding
+            x: this.bBox.x - paddingLeft,
+            y: this.bBox.y - padding
         };
         };
     };
     };
     SVGLabel.prototype.getCrispAdjust = function () {
     SVGLabel.prototype.getCrispAdjust = function () {
@@ -390,11 +392,6 @@ var SVGLabel = /** @class */ (function (_super) {
      *
      *
      * */
      * */
     SVGLabel.emptyBBox = { width: 0, height: 0, x: 0, y: 0 };
     SVGLabel.emptyBBox = { width: 0, height: 0, x: 0, y: 0 };
-    /* *
-     *
-     *  Properties
-     *
-     * */
     /**
     /**
      * For labels, these CSS properties are applied to the `text` node directly.
      * For labels, these CSS properties are applied to the `text` node directly.
      *
      *

+ 68 - 46
node_modules/highcharts/es-modules/Core/Renderer/SVG/SVGRenderer.js

@@ -23,10 +23,10 @@ var addEvent = U.addEvent, attr = U.attr, createElement = U.createElement, css =
  * and applied with the {@link SVGElement#clip} function.
  * and applied with the {@link SVGElement#clip} function.
  *
  *
  * @example
  * @example
- * var circle = renderer.circle(100, 100, 100)
+ * let circle = renderer.circle(100, 100, 100)
  *     .attr({ fill: 'red' })
  *     .attr({ fill: 'red' })
  *     .add();
  *     .add();
- * var clipRect = renderer.clipRect(100, 100, 100, 100);
+ * let clipRect = renderer.clipRect(100, 100, 100, 100);
  *
  *
  * // Leave only the lower right quarter visible
  * // Leave only the lower right quarter visible
  * circle.clip(clipRect);
  * circle.clip(clipRect);
@@ -233,7 +233,7 @@ var charts = H.charts, deg2rad = H.deg2rad, doc = H.doc, isFirefox = H.isFirefox
  *
  *
  * @example
  * @example
  * // Use directly without a chart object.
  * // Use directly without a chart object.
- * var renderer = new Highcharts.Renderer(parentNode, 600, 400);
+ * let renderer = new Highcharts.Renderer(parentNode, 600, 400);
  *
  *
  * @class
  * @class
  * @name Highcharts.SVGRenderer
  * @name Highcharts.SVGRenderer
@@ -379,7 +379,7 @@ var SVGRenderer = /** @class */ (function () {
         this.url = this.getReferenceURL();
         this.url = this.getReferenceURL();
         // Add description
         // Add description
         desc = this.createElement('desc').add();
         desc = this.createElement('desc').add();
-        desc.element.appendChild(doc.createTextNode('Created with Highcharts 9.0.1'));
+        desc.element.appendChild(doc.createTextNode('Created with Highcharts 9.1.0'));
         renderer.defs = this.createElement('defs').add();
         renderer.defs = this.createElement('defs').add();
         renderer.allowHTML = allowHTML;
         renderer.allowHTML = allowHTML;
         renderer.forExport = forExport;
         renderer.forExport = forExport;
@@ -621,10 +621,10 @@ var SVGRenderer = /** @class */ (function () {
     SVGRenderer.prototype.getRadialAttr = function (radialReference, gradAttr) {
     SVGRenderer.prototype.getRadialAttr = function (radialReference, gradAttr) {
         return {
         return {
             cx: (radialReference[0] - radialReference[2] / 2) +
             cx: (radialReference[0] - radialReference[2] / 2) +
-                gradAttr.cx * radialReference[2],
+                (gradAttr.cx || 0) * radialReference[2],
             cy: (radialReference[1] - radialReference[2] / 2) +
             cy: (radialReference[1] - radialReference[2] / 2) +
-                gradAttr.cy * radialReference[2],
-            r: gradAttr.r * radialReference[2]
+                (gradAttr.cy || 0) * radialReference[2],
+            r: (gradAttr.r || 0) * radialReference[2]
         };
         };
     };
     };
     /**
     /**
@@ -712,9 +712,9 @@ var SVGRenderer = /** @class */ (function () {
         normalState = AST.filterUserAttributes(normalState);
         normalState = AST.filterUserAttributes(normalState);
         // Default, non-stylable attributes
         // Default, non-stylable attributes
         label.attr(merge({ padding: 8, r: 2 }, normalState));
         label.attr(merge({ padding: 8, r: 2 }, normalState));
+        // Presentational
+        var normalStyle, hoverStyle, pressedStyle, disabledStyle;
         if (!styledMode) {
         if (!styledMode) {
-            // Presentational
-            var normalStyle, hoverStyle, pressedStyle, disabledStyle;
             // Normal state - prepare the attributes
             // Normal state - prepare the attributes
             normalState = merge({
             normalState = merge({
                 fill: palette.neutralColor3,
                 fill: palette.neutralColor3,
@@ -800,6 +800,7 @@ var SVGRenderer = /** @class */ (function () {
                 .css(extend({ cursor: 'default' }, normalStyle));
                 .css(extend({ cursor: 'default' }, normalStyle));
         }
         }
         return label
         return label
+            .on('touchstart', function (e) { return e.stopPropagation(); })
             .on('click', function (e) {
             .on('click', function (e) {
             if (curState !== 3) {
             if (curState !== 3) {
                 callback.call(label, e);
                 callback.call(label, e);
@@ -850,7 +851,7 @@ var SVGRenderer = /** @class */ (function () {
      *         Draw a path independent from a chart
      *         Draw a path independent from a chart
      *
      *
      * @example
      * @example
-     * var path = renderer.path(['M', 10, 10, 'L', 30, 30, 'z'])
+     * let path = renderer.path(['M', 10, 10, 'L', 30, 30, 'z'])
      *     .attr({ stroke: '#ff00ff' })
      *     .attr({ stroke: '#ff00ff' })
      *     .add();
      *     .add();
      *
      *
@@ -1045,7 +1046,7 @@ var SVGRenderer = /** @class */ (function () {
                 };
                 };
         if (!this.styledMode) {
         if (!this.styledMode) {
             if (typeof strokeWidth !== 'undefined') {
             if (typeof strokeWidth !== 'undefined') {
-                attribs.strokeWidth = strokeWidth;
+                attribs['stroke-width'] = strokeWidth;
                 attribs = wrapper.crisp(attribs);
                 attribs = wrapper.crisp(attribs);
             }
             }
             attribs.fill = 'none';
             attribs.fill = 'none';
@@ -1061,7 +1062,7 @@ var SVGRenderer = /** @class */ (function () {
             });
             });
         };
         };
         wrapper.rGetter = function () {
         wrapper.rGetter = function () {
-            return wrapper.r;
+            return wrapper.r || 0;
         };
         };
         return wrapper.attr(attribs);
         return wrapper.attr(attribs);
     };
     };
@@ -1084,7 +1085,7 @@ var SVGRenderer = /** @class */ (function () {
      * Whether and how to animate.
      * Whether and how to animate.
      */
      */
     SVGRenderer.prototype.setSize = function (width, height, animate) {
     SVGRenderer.prototype.setSize = function (width, height, animate) {
-        var renderer = this, alignedObjects = renderer.alignedObjects, i = alignedObjects.length;
+        var renderer = this;
         renderer.width = width;
         renderer.width = width;
         renderer.height = height;
         renderer.height = height;
         renderer.boxWrapper.animate({
         renderer.boxWrapper.animate({
@@ -1099,9 +1100,7 @@ var SVGRenderer = /** @class */ (function () {
             },
             },
             duration: pick(animate, true) ? void 0 : 0
             duration: pick(animate, true) ? void 0 : 0
         });
         });
-        while (i--) {
-            alignedObjects[i].align();
-        }
+        renderer.alignElements();
     };
     };
     /**
     /**
      * Create and return an svg group element. Child
      * Create and return an svg group element. Child
@@ -1278,7 +1277,7 @@ var SVGRenderer = /** @class */ (function () {
              */
              */
             ['width', 'height'].forEach(function (key) {
             ['width', 'height'].forEach(function (key) {
                 obj[key + 'Setter'] = function (value, key) {
                 obj[key + 'Setter'] = function (value, key) {
-                    var attribs = {}, imgSize = this['img' + key], trans = key === 'width' ? 'translateX' : 'translateY';
+                    var imgSize = this['img' + key];
                     this[key] = value;
                     this[key] = value;
                     if (defined(imgSize)) {
                     if (defined(imgSize)) {
                         // Scale and center the image within its container.
                         // Scale and center the image within its container.
@@ -1296,7 +1295,10 @@ var SVGRenderer = /** @class */ (function () {
                             this.element.setAttribute(key, imgSize);
                             this.element.setAttribute(key, imgSize);
                         }
                         }
                         if (!this.alignByTranslate) {
                         if (!this.alignByTranslate) {
-                            attribs[trans] = ((this[key] || 0) - imgSize) / 2;
+                            var translate = ((this[key] || 0) - imgSize) / 2;
+                            var attribs = key === 'width' ?
+                                { translateX: translate } :
+                                { translateY: translate };
                             this.attr(attribs);
                             this.attr(attribs);
                         }
                         }
                     }
                     }
@@ -1364,10 +1366,10 @@ var SVGRenderer = /** @class */ (function () {
      * function.
      * function.
      *
      *
      * @example
      * @example
-     * var circle = renderer.circle(100, 100, 100)
+     * let circle = renderer.circle(100, 100, 100)
      *     .attr({ fill: 'red' })
      *     .attr({ fill: 'red' })
      *     .add();
      *     .add();
-     * var clipRect = renderer.clipRect(100, 100, 100, 100);
+     * let clipRect = renderer.clipRect(100, 100, 100, 100);
      *
      *
      * // Leave only the lower right quarter visible
      * // Leave only the lower right quarter visible
      * circle.clip(clipRect);
      * circle.clip(clipRect);
@@ -1818,6 +1820,16 @@ var SVGRenderer = /** @class */ (function () {
     SVGRenderer.prototype.label = function (str, x, y, shape, anchorX, anchorY, useHTML, baseline, className) {
     SVGRenderer.prototype.label = function (str, x, y, shape, anchorX, anchorY, useHTML, baseline, className) {
         return new SVGLabel(this, str, x, y, shape, anchorX, anchorY, useHTML, baseline, className);
         return new SVGLabel(this, str, x, y, shape, anchorX, anchorY, useHTML, baseline, className);
     };
     };
+    /**
+     * Re-align all aligned elements.
+     *
+     * @private
+     * @function Highcharts.SVGRenderer#alignElements
+     * @return {void}
+     */
+    SVGRenderer.prototype.alignElements = function () {
+        this.alignedObjects.forEach(function (el) { return el.align(); });
+    };
     return SVGRenderer;
     return SVGRenderer;
 }());
 }());
 /**
 /**
@@ -1860,6 +1872,33 @@ SVGRenderer.prototype.escapes = {
     "'": '&#39;',
     "'": '&#39;',
     '"': '&quot;'
     '"': '&quot;'
 };
 };
+var roundedRect = function (x, y, w, h, options) {
+    var r = (options && options.r) || 0;
+    return [
+        ['M', x + r, y],
+        ['L', x + w - r, y],
+        ['C', x + w, y, x + w, y, x + w, y + r],
+        ['L', x + w, y + h - r],
+        ['C', x + w, y + h, x + w, y + h, x + w - r, y + h],
+        ['L', x + r, y + h],
+        ['C', x, y + h, x, y + h, x, y + h - r],
+        ['L', x, y + r],
+        ['C', x, y, x, y, x + r, y] // top-left corner
+    ];
+};
+// #15291
+var rect = function (x, y, w, h, options) {
+    if (options && options.r) {
+        return roundedRect(x, y, w, h, options);
+    }
+    return [
+        ['M', x, y],
+        ['L', x + w, y],
+        ['L', x + w, y + h],
+        ['L', x, y + h],
+        ['Z']
+    ];
+};
 /**
 /**
  * An extendable collection of functions for defining symbol paths.
  * An extendable collection of functions for defining symbol paths.
  *
  *
@@ -1875,15 +1914,8 @@ SVGRenderer.prototype.symbols = {
             open: false
             open: false
         });
         });
     },
     },
-    square: function (x, y, w, h) {
-        return [
-            ['M', x, y],
-            ['L', x + w, y],
-            ['L', x + w, y + h],
-            ['L', x, y + h],
-            ['Z']
-        ];
-    },
+    rect: rect,
+    square: rect,
     triangle: function (x, y, w, h) {
     triangle: function (x, y, w, h) {
         return [
         return [
             ['M', x + w / 2, y],
             ['M', x + w / 2, y],
@@ -1912,11 +1944,11 @@ SVGRenderer.prototype.symbols = {
     arc: function (x, y, w, h, options) {
     arc: function (x, y, w, h, options) {
         var arc = [];
         var arc = [];
         if (options) {
         if (options) {
-            var start = options.start || 0, end = options.end || 0, rx = options.r || w, ry = options.r || h || w, proximity = 0.001, fullCircle = Math.abs(end - start - 2 * Math.PI) <
-                proximity, 
+            var start = options.start || 0, rx = pick(options.r, w), ry = pick(options.r, h || w), proximity = 0.001, fullCircle = (Math.abs((options.end || 0) - start - 2 * Math.PI) <
+                proximity), 
             // Substract a small number to prevent cos and sin of start and
             // Substract a small number to prevent cos and sin of start and
             // end from becoming equal on 360 arcs (related: #1561)
             // end from becoming equal on 360 arcs (related: #1561)
-            end = end - proximity, innerRadius = options.innerR, open = pick(options.open, fullCircle), cosStart = Math.cos(start), sinStart = Math.sin(start), cosEnd = Math.cos(end), sinEnd = Math.sin(end), 
+            end = (options.end || 0) - proximity, innerRadius = options.innerR, open_1 = pick(options.open, fullCircle), cosStart = Math.cos(start), sinStart = Math.sin(start), cosEnd = Math.cos(end), sinEnd = Math.sin(end), 
             // Proximity takes care of rounding errors around PI (#6971)
             // Proximity takes care of rounding errors around PI (#6971)
             longArc = pick(options.longArc, end - start - Math.PI < proximity ? 0 : 1);
             longArc = pick(options.longArc, end - start - Math.PI < proximity ? 0 : 1);
             arc.push([
             arc.push([
@@ -1934,7 +1966,7 @@ SVGRenderer.prototype.symbols = {
                 y + ry * sinEnd
                 y + ry * sinEnd
             ]);
             ]);
             if (defined(innerRadius)) {
             if (defined(innerRadius)) {
-                arc.push(open ?
+                arc.push(open_1 ?
                     [
                     [
                         'M',
                         'M',
                         x + innerRadius * cosEnd,
                         x + innerRadius * cosEnd,
@@ -1955,7 +1987,7 @@ SVGRenderer.prototype.symbols = {
                     y + innerRadius * sinStart
                     y + innerRadius * sinStart
                 ]);
                 ]);
             }
             }
-            if (!open) {
+            if (!open_1) {
                 arc.push(['Z']);
                 arc.push(['Z']);
             }
             }
         }
         }
@@ -1966,18 +1998,8 @@ SVGRenderer.prototype.symbols = {
      * rectangles in VML
      * rectangles in VML
      */
      */
     callout: function (x, y, w, h, options) {
     callout: function (x, y, w, h, options) {
-        var arrowLength = 6, halfDistance = 6, r = Math.min((options && options.r) || 0, w, h), safeDistance = r + halfDistance, anchorX = options && options.anchorX, anchorY = options && options.anchorY || 0, path;
-        path = [
-            ['M', x + r, y],
-            ['L', x + w - r, y],
-            ['C', x + w, y, x + w, y, x + w, y + r],
-            ['L', x + w, y + h - r],
-            ['C', x + w, y + h, x + w, y + h, x + w - r, y + h],
-            ['L', x + r, y + h],
-            ['C', x, y + h, x, y + h, x, y + h - r],
-            ['L', x, y + r],
-            ['C', x, y, x, y, x + r, y] // top-left corner
-        ];
+        var arrowLength = 6, halfDistance = 6, r = Math.min((options && options.r) || 0, w, h), safeDistance = r + halfDistance, anchorX = options && options.anchorX, anchorY = options && options.anchorY || 0;
+        var path = roundedRect(x, y, w, h, { r: r });
         if (!isNumber(anchorX)) {
         if (!isNumber(anchorX)) {
             return path;
             return path;
         }
         }

+ 11 - 11
node_modules/highcharts/es-modules/Core/Renderer/SVG/SVGRenderer3D.js

@@ -115,9 +115,9 @@ SVGRenderer.prototype.face3d = function (args) {
             delete hash.enabled;
             delete hash.enabled;
             delete hash.vertexes;
             delete hash.vertexes;
             delete hash.insidePlotArea;
             delete hash.insidePlotArea;
-            var chart = charts[renderer.chartIndex], vertexes2d = perspective(this.vertexes, chart, this.insidePlotArea), path = renderer.toLinePath(vertexes2d, true), area = shapeArea(vertexes2d), visibility = (this.enabled && area > 0) ? 'visible' : 'hidden';
+            var chart = charts[renderer.chartIndex], vertexes2d = perspective(this.vertexes, chart, this.insidePlotArea), path = renderer.toLinePath(vertexes2d, true), area = shapeArea(vertexes2d);
             hash.d = path;
             hash.d = path;
-            hash.visibility = visibility;
+            hash.visibility = (this.enabled && area > 0) ? 'visible' : 'hidden';
         }
         }
         return SVGElement.prototype.attr.apply(this, arguments);
         return SVGElement.prototype.attr.apply(this, arguments);
     };
     };
@@ -217,11 +217,11 @@ SVGRenderer.prototype.cuboid = function (shapeArgs) {
 };
 };
 // Generates a cuboid path and zIndexes
 // Generates a cuboid path and zIndexes
 SVGRenderer.prototype.cuboidPath = function (shapeArgs) {
 SVGRenderer.prototype.cuboidPath = function (shapeArgs) {
-    var x = shapeArgs.x, y = shapeArgs.y, z = shapeArgs.z || 0, 
+    var x = shapeArgs.x || 0, y = shapeArgs.y || 0, z = shapeArgs.z || 0, 
     // For side calculation (right/left)
     // For side calculation (right/left)
     // there is a need for height (and other shapeArgs arguments)
     // there is a need for height (and other shapeArgs arguments)
     // to be at least 1px
     // to be at least 1px
-    h = shapeArgs.height, w = shapeArgs.width, d = shapeArgs.depth, chart = charts[this.chartIndex], front, back, top, bottom, left, right, shape, path1, path2, path3, isFront, isTop, isRight, options3d = chart.options.chart.options3d, alpha = options3d.alpha, 
+    h = shapeArgs.height || 0, w = shapeArgs.width || 0, d = shapeArgs.depth || 0, chart = charts[this.chartIndex], front, back, top, bottom, left, right, shape, path1, path2, path3, isFront, isTop, isRight, options3d = chart.options.chart.options3d, alpha = options3d.alpha, 
     // Priority for x axis is the biggest,
     // Priority for x axis is the biggest,
     // because of x direction has biggest influence on zIndex
     // because of x direction has biggest influence on zIndex
     incrementX = 1000000, 
     incrementX = 1000000, 
@@ -596,15 +596,15 @@ SVGRenderer.prototype.arc3d = function (attribs) {
 };
 };
 // Generate the paths required to draw a 3D arc
 // Generate the paths required to draw a 3D arc
 SVGRenderer.prototype.arc3dPath = function (shapeArgs) {
 SVGRenderer.prototype.arc3dPath = function (shapeArgs) {
-    var cx = shapeArgs.x, // x coordinate of the center
-    cy = shapeArgs.y, // y coordinate of the center
-    start = shapeArgs.start, // start angle
-    end = shapeArgs.end - 0.00001, // end angle
-    r = shapeArgs.r, // radius
+    var cx = shapeArgs.x || 0, // x coordinate of the center
+    cy = shapeArgs.y || 0, // y coordinate of the center
+    start = shapeArgs.start || 0, // start angle
+    end = (shapeArgs.end || 0) - 0.00001, // end angle
+    r = shapeArgs.r || 0, // radius
     ir = shapeArgs.innerR || 0, // inner radius
     ir = shapeArgs.innerR || 0, // inner radius
     d = shapeArgs.depth || 0, // depth
     d = shapeArgs.depth || 0, // depth
-    alpha = shapeArgs.alpha, // alpha rotation of the chart
-    beta = shapeArgs.beta; // beta rotation of the chart
+    alpha = shapeArgs.alpha || 0, // alpha rotation of the chart
+    beta = shapeArgs.beta || 0; // beta rotation of the chart
     // Derived Variables
     // Derived Variables
     var cs = Math.cos(start), // cosinus of the start angle
     var cs = Math.cos(start), // cosinus of the start angle
     ss = Math.sin(start), // sinus of the start angle
     ss = Math.sin(start), // sinus of the start angle

+ 19 - 2
node_modules/highcharts/es-modules/Core/Scrollbar.js

@@ -52,8 +52,8 @@ var swapXY = H.swapXY = function (path, vertical) {
 };
 };
 /* eslint-disable no-invalid-this, valid-jsdoc */
 /* eslint-disable no-invalid-this, valid-jsdoc */
 /**
 /**
- * A reusable scrollbar, internally used in Highstock's navigator and optionally
- * on individual axes.
+ * A reusable scrollbar, internally used in Highcharts Stock's
+ * navigator and optionally on individual axes.
  *
  *
  * @private
  * @private
  * @class
  * @class
@@ -554,6 +554,23 @@ var Scrollbar = /** @class */ (function () {
         }
         }
         scroller.rendered = true;
         scroller.rendered = true;
     };
     };
+    /**
+     * Checks if the extremes should be updated in response to a scrollbar
+     * change event.
+     *
+     * @private
+     * @function Highcharts.Scrollbar#shouldUpdateExtremes
+     * @param  {string} eventType
+     * @return {boolean}
+     */
+    Scrollbar.prototype.shouldUpdateExtremes = function (eventType) {
+        return (pick(this.options.liveRedraw, H.svg && !H.isTouchDevice && !this.chart.isBoosting) ||
+            // Mouseup always should change extremes
+            eventType === 'mouseup' ||
+            eventType === 'touchend' ||
+            // Internal events
+            !defined(eventType));
+    };
     Scrollbar.prototype.trackClick = function (e) {
     Scrollbar.prototype.trackClick = function (e) {
         var scroller = this;
         var scroller = this;
         var normalizedEvent = scroller.chart.pointer.normalize(e), range = scroller.to - scroller.from, top = scroller.y + scroller.scrollbarTop, left = scroller.x + scroller.scrollbarLeft;
         var normalizedEvent = scroller.chart.pointer.normalize(e), range = scroller.to - scroller.from, top = scroller.y + scroller.scrollbarTop, left = scroller.x + scroller.scrollbarLeft;

+ 33 - 14
node_modules/highcharts/es-modules/Core/Series/DataLabels.js

@@ -10,6 +10,8 @@
 'use strict';
 'use strict';
 import A from '../Animation/AnimationUtilities.js';
 import A from '../Animation/AnimationUtilities.js';
 var getDeferredAnimation = A.getDeferredAnimation;
 var getDeferredAnimation = A.getDeferredAnimation;
+import F from '../FormatUtilities.js';
+var format = F.format;
 import H from '../Globals.js';
 import H from '../Globals.js';
 var noop = H.noop;
 var noop = H.noop;
 import palette from '../Color/Palette.js';
 import palette from '../Color/Palette.js';
@@ -17,7 +19,7 @@ import Series from '../Series/Series.js';
 import SeriesRegistry from './SeriesRegistry.js';
 import SeriesRegistry from './SeriesRegistry.js';
 var seriesTypes = SeriesRegistry.seriesTypes;
 var seriesTypes = SeriesRegistry.seriesTypes;
 import U from '../Utilities.js';
 import U from '../Utilities.js';
-var arrayMax = U.arrayMax, clamp = U.clamp, defined = U.defined, extend = U.extend, fireEvent = U.fireEvent, format = U.format, isArray = U.isArray, merge = U.merge, objectEach = U.objectEach, pick = U.pick, relativeLength = U.relativeLength, splat = U.splat, stableSort = U.stableSort;
+var arrayMax = U.arrayMax, clamp = U.clamp, defined = U.defined, extend = U.extend, fireEvent = U.fireEvent, isArray = U.isArray, merge = U.merge, objectEach = U.objectEach, pick = U.pick, relativeLength = U.relativeLength, splat = U.splat, stableSort = U.stableSort;
 /**
 /**
  * Callback JavaScript function to format the data label as a string. Note that
  * Callback JavaScript function to format the data label as a string. Note that
  * if a `format` is defined, the format takes precedence and the formatter is
  * if a `format` is defined, the format takes precedence and the formatter is
@@ -417,7 +419,11 @@ Series.prototype.drawDataLabels = function () {
  */
  */
 Series.prototype.alignDataLabel = function (point, dataLabel, options, alignTo, isNew) {
 Series.prototype.alignDataLabel = function (point, dataLabel, options, alignTo, isNew) {
     var series = this, chart = this.chart, inverted = this.isCartesian && chart.inverted, enabledDataSorting = this.enabledDataSorting, plotX = pick(point.dlBox && point.dlBox.centerX, point.plotX, -9999), plotY = pick(point.plotY, -9999), bBox = dataLabel.getBBox(), baseline, rotation = options.rotation, normRotation, negRotation, align = options.align, rotCorr, // rotation correction
     var series = this, chart = this.chart, inverted = this.isCartesian && chart.inverted, enabledDataSorting = this.enabledDataSorting, plotX = pick(point.dlBox && point.dlBox.centerX, point.plotX, -9999), plotY = pick(point.plotY, -9999), bBox = dataLabel.getBBox(), baseline, rotation = options.rotation, normRotation, negRotation, align = options.align, rotCorr, // rotation correction
-    isInsidePlot = chart.isInsidePlot(plotX, Math.round(plotY), inverted), 
+    isInsidePlot = chart.isInsidePlot(plotX, Math.round(plotY), {
+        inverted: inverted,
+        paneCoordinates: true,
+        series: series
+    }), 
     // Math.round for rounding errors (#2683), alignTo to allow column
     // Math.round for rounding errors (#2683), alignTo to allow column
     // labels (#2700)
     // labels (#2700)
     alignAttr, // the final position;
     alignAttr, // the final position;
@@ -429,10 +435,17 @@ Series.prototype.alignDataLabel = function (point, dataLabel, options, alignTo,
             (
             (
             // If the data label is inside the align box, it is enough
             // If the data label is inside the align box, it is enough
             // that parts of the align box is inside the plot area
             // that parts of the align box is inside the plot area
-            // (#12370)
-            options.inside && alignTo && chart.isInsidePlot(plotX, inverted ?
-                alignTo.x + 1 :
-                alignTo.y + alignTo.height - 1, inverted))), setStartPos = function (alignOptions) {
+            // (#12370). When stacking, it is always inside regardless
+            // of the option (#15148).
+            pick(options.inside, !!this.options.stacking) &&
+                alignTo &&
+                chart.isInsidePlot(plotX, inverted ?
+                    alignTo.x + 1 :
+                    alignTo.y + alignTo.height - 1, {
+                    inverted: inverted,
+                    paneCoordinates: true,
+                    series: series
+                }))), setStartPos = function (alignOptions) {
         if (enabledDataSorting && series.xAxis && !justify) {
         if (enabledDataSorting && series.xAxis && !justify) {
             series.setDataLabelStartPos(point, dataLabel, isNew, isInsidePlot, alignOptions);
             series.setDataLabelStartPos(point, dataLabel, isNew, isInsidePlot, alignOptions);
         }
         }
@@ -490,7 +503,7 @@ Series.prototype.alignDataLabel = function (point, dataLabel, options, alignTo,
         }
         }
         else {
         else {
             setStartPos(alignTo); // data sorting
             setStartPos(alignTo); // data sorting
-            dataLabel.align(options, null, alignTo);
+            dataLabel.align(options, void 0, alignTo);
             alignAttr = dataLabel.alignAttr;
             alignAttr = dataLabel.alignAttr;
         }
         }
         // Handle justify or crop
         // Handle justify or crop
@@ -500,8 +513,14 @@ Series.prototype.alignDataLabel = function (point, dataLabel, options, alignTo,
         }
         }
         else if (pick(options.crop, true)) {
         else if (pick(options.crop, true)) {
             visible =
             visible =
-                chart.isInsidePlot(alignAttr.x, alignAttr.y) &&
-                    chart.isInsidePlot(alignAttr.x + bBox.width, alignAttr.y + bBox.height);
+                chart.isInsidePlot(alignAttr.x, alignAttr.y, {
+                    paneCoordinates: true,
+                    series: series
+                }) &&
+                    chart.isInsidePlot(alignAttr.x + bBox.width, alignAttr.y + bBox.height, {
+                        paneCoordinates: true,
+                        series: series
+                    });
         }
         }
         // When we're using a shape, make it possible with a connector or an
         // When we're using a shape, make it possible with a connector or an
         // arrow pointing to thie point
         // arrow pointing to thie point
@@ -592,7 +611,7 @@ Series.prototype.justifyDataLabel = function (dataLabel, options, alignAttr, bBo
     var chart = this.chart, align = options.align, verticalAlign = options.verticalAlign, off, justified, padding = dataLabel.box ? 0 : (dataLabel.padding || 0);
     var chart = this.chart, align = options.align, verticalAlign = options.verticalAlign, off, justified, padding = dataLabel.box ? 0 : (dataLabel.padding || 0);
     var _a = options.x, x = _a === void 0 ? 0 : _a, _b = options.y, y = _b === void 0 ? 0 : _b;
     var _a = options.x, x = _a === void 0 ? 0 : _a, _b = options.y, y = _b === void 0 ? 0 : _b;
     // Off left
     // Off left
-    off = alignAttr.x + padding;
+    off = (alignAttr.x || 0) + padding;
     if (off < 0) {
     if (off < 0) {
         if (align === 'right' && x >= 0) {
         if (align === 'right' && x >= 0) {
             options.align = 'left';
             options.align = 'left';
@@ -604,7 +623,7 @@ Series.prototype.justifyDataLabel = function (dataLabel, options, alignAttr, bBo
         justified = true;
         justified = true;
     }
     }
     // Off right
     // Off right
-    off = alignAttr.x + bBox.width - padding;
+    off = (alignAttr.x || 0) + bBox.width - padding;
     if (off > chart.plotWidth) {
     if (off > chart.plotWidth) {
         if (align === 'left' && x <= 0) {
         if (align === 'left' && x <= 0) {
             options.align = 'right';
             options.align = 'right';
@@ -628,7 +647,7 @@ Series.prototype.justifyDataLabel = function (dataLabel, options, alignAttr, bBo
         justified = true;
         justified = true;
     }
     }
     // Off bottom
     // Off bottom
-    off = alignAttr.y + bBox.height - padding;
+    off = (alignAttr.y || 0) + bBox.height - padding;
     if (off > chart.plotHeight) {
     if (off > chart.plotHeight) {
         if (verticalAlign === 'top' && y <= 0) {
         if (verticalAlign === 'top' && y <= 0) {
             options.verticalAlign = 'bottom';
             options.verticalAlign = 'bottom';
@@ -907,7 +926,7 @@ if (seriesTypes.pie) {
                     pick(pointDataLabelsOptions.connectorWidth, 1);
                     pick(pointDataLabelsOptions.connectorWidth, 1);
                 // Draw the connector
                 // Draw the connector
                 if (connectorWidth) {
                 if (connectorWidth) {
-                    var isNew;
+                    var isNew = void 0;
                     connector = point.connector;
                     connector = point.connector;
                     dataLabel = point.dataLabel;
                     dataLabel = point.dataLabel;
                     if (dataLabel &&
                     if (dataLabel &&
@@ -960,7 +979,7 @@ if (seriesTypes.pie) {
     // TODO: depracated - remove it
     // TODO: depracated - remove it
     /*
     /*
     seriesTypes.pie.prototype.connectorPath = function (labelPos) {
     seriesTypes.pie.prototype.connectorPath = function (labelPos) {
-        var x = labelPos.x,
+        let x = labelPos.x,
             y = labelPos.y;
             y = labelPos.y;
         return pick(this.options.dataLabels.softConnector, true) ? [
         return pick(this.options.dataLabels.softConnector, true) ? [
             'M',
             'M',

+ 22 - 18
node_modules/highcharts/es-modules/Core/Series/Point.js

@@ -11,11 +11,13 @@
 import AST from '../Renderer/HTML/AST.js';
 import AST from '../Renderer/HTML/AST.js';
 import A from '../Animation/AnimationUtilities.js';
 import A from '../Animation/AnimationUtilities.js';
 var animObject = A.animObject;
 var animObject = A.animObject;
+import F from '../FormatUtilities.js';
+var format = F.format;
 import H from '../Globals.js';
 import H from '../Globals.js';
 import O from '../Options.js';
 import O from '../Options.js';
 var defaultOptions = O.defaultOptions;
 var defaultOptions = O.defaultOptions;
 import U from '../Utilities.js';
 import U from '../Utilities.js';
-var addEvent = U.addEvent, defined = U.defined, erase = U.erase, extend = U.extend, fireEvent = U.fireEvent, format = U.format, getNestedProperty = U.getNestedProperty, isArray = U.isArray, isFunction = U.isFunction, isNumber = U.isNumber, isObject = U.isObject, merge = U.merge, objectEach = U.objectEach, pick = U.pick, syncTimeout = U.syncTimeout, removeEvent = U.removeEvent, uniqueKey = U.uniqueKey;
+var addEvent = U.addEvent, defined = U.defined, erase = U.erase, extend = U.extend, fireEvent = U.fireEvent, getNestedProperty = U.getNestedProperty, isArray = U.isArray, isFunction = U.isFunction, isNumber = U.isNumber, isObject = U.isObject, merge = U.merge, objectEach = U.objectEach, pick = U.pick, syncTimeout = U.syncTimeout, removeEvent = U.removeEvent, uniqueKey = U.uniqueKey;
 /**
 /**
  * Function callback when a series point is clicked. Return false to cancel the
  * Function callback when a series point is clicked. Return false to cancel the
  * action.
  * action.
@@ -754,22 +756,13 @@ var Point = /** @class */ (function () {
      * @return {void}
      * @return {void}
      */
      */
     Point.prototype.resolveColor = function () {
     Point.prototype.resolveColor = function () {
-        var series = this.series, colors, optionsChart = series.chart.options.chart, colorCount = optionsChart.colorCount, styledMode = series.chart.styledMode, colorIndex;
+        var series = this.series, colors, optionsChart = series.chart.options.chart, colorCount = optionsChart.colorCount, styledMode = series.chart.styledMode, colorIndex, color;
         // remove points nonZonedColor for later recalculation
         // remove points nonZonedColor for later recalculation
         delete this.nonZonedColor;
         delete this.nonZonedColor;
-        /**
-         * The point's current color.
-         *
-         * @name Highcharts.Point#color
-         * @type {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject|undefined}
-         */
-        if (!styledMode && !this.options.color) {
-            this.color = series.color; // #3445
-        }
         if (series.options.colorByPoint) {
         if (series.options.colorByPoint) {
             if (!styledMode) {
             if (!styledMode) {
                 colors = series.options.colors || series.chart.options.colors;
                 colors = series.options.colors || series.chart.options.colors;
-                this.color = this.color || colors[series.colorCounter];
+                color = colors[series.colorCounter];
                 colorCount = colors.length;
                 colorCount = colors.length;
             }
             }
             colorIndex = series.colorCounter;
             colorIndex = series.colorCounter;
@@ -780,9 +773,19 @@ var Point = /** @class */ (function () {
             }
             }
         }
         }
         else {
         else {
+            if (!styledMode) {
+                color = series.color;
+            }
             colorIndex = series.colorIndex;
             colorIndex = series.colorIndex;
         }
         }
         this.colorIndex = pick(this.options.colorIndex, colorIndex);
         this.colorIndex = pick(this.options.colorIndex, colorIndex);
+        /**
+         * The point's current color.
+         *
+         * @name Highcharts.Point#color
+         * @type {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject|undefined}
+         */
+        this.color = pick(this.options.color, color);
     };
     };
     /**
     /**
      * Set a value in an object, on the property defined by key. The key
      * Set a value in an object, on the property defined by key. The key
@@ -1081,11 +1084,11 @@ var Point = /** @class */ (function () {
      */
      */
     Point.prototype.importEvents = function () {
     Point.prototype.importEvents = function () {
         if (!this.hasImportedEvents) {
         if (!this.hasImportedEvents) {
-            var point = this, options = merge(point.series.options.point, point.options), events = options.events;
-            point.events = events;
+            var point_1 = this, options = merge(point_1.series.options.point, point_1.options), events = options.events;
+            point_1.events = events;
             objectEach(events, function (event, eventType) {
             objectEach(events, function (event, eventType) {
                 if (isFunction(event)) {
                 if (isFunction(event)) {
-                    addEvent(point, eventType, event);
+                    addEvent(point_1, eventType, event);
                 }
                 }
             });
             });
             this.hasImportedEvents = true;
             this.hasImportedEvents = true;
@@ -1136,7 +1139,8 @@ var Point = /** @class */ (function () {
             markerAttribs = series.markerAttribs(point, state);
             markerAttribs = series.markerAttribs(point, state);
         }
         }
         // Apply hover styles to the existing point
         // Apply hover styles to the existing point
-        if (point.graphic) {
+        // Prevent from dummy null points (#14966)
+        if (point.graphic && !point.hasDummyGraphic) {
             if (previousState) {
             if (previousState) {
                 point.graphic.removeClass('highcharts-point-' + previousState);
                 point.graphic.removeClass('highcharts-point-' + previousState);
             }
             }
@@ -1148,7 +1152,7 @@ var Point = /** @class */ (function () {
                 pointAttribsAnimation = pick(chart.options.chart.animation, stateOptions.animation);
                 pointAttribsAnimation = pick(chart.options.chart.animation, stateOptions.animation);
                 // Some inactive points (e.g. slices in pie) should apply
                 // Some inactive points (e.g. slices in pie) should apply
                 // oppacity also for it's labels
                 // oppacity also for it's labels
-                if (series.options.inactiveOtherPoints && pointAttribs.opacity) {
+                if (series.options.inactiveOtherPoints && isNumber(pointAttribs.opacity)) {
                     (point.dataLabels || []).forEach(function (label) {
                     (point.dataLabels || []).forEach(function (label) {
                         if (label) {
                         if (label) {
                             label.animate({
                             label.animate({
@@ -1252,7 +1256,7 @@ var Point = /** @class */ (function () {
             // halo's context (#7681).
             // halo's context (#7681).
             halo.hide);
             halo.hide);
         }
         }
-        fireEvent(point, 'afterSetState');
+        fireEvent(point, 'afterSetState', { state: state });
     };
     };
     /**
     /**
      * Get the path definition for the halo, which is usually a shadow-like
      * Get the path definition for the halo, which is usually a shadow-like

+ 127 - 75
node_modules/highcharts/es-modules/Core/Series/Series.js

@@ -114,8 +114,8 @@ var Series = /** @class */ (function () {
      *
      *
      * */
      * */
     /* eslint-disable valid-jsdoc */
     /* eslint-disable valid-jsdoc */
-    Series.prototype.init = function (chart, options) {
-        fireEvent(this, 'init', { options: options });
+    Series.prototype.init = function (chart, userOptions) {
+        fireEvent(this, 'init', { options: userOptions });
         var series = this, events, chartSeries = chart.series, lastSeries;
         var series = this, events, chartSeries = chart.series, lastSeries;
         // A lookup over those events that are added by _options_ (not
         // A lookup over those events that are added by _options_ (not
         // programmatically). These are updated through Series.update()
         // programmatically). These are updated through Series.update()
@@ -147,11 +147,11 @@ var Series = /** @class */ (function () {
          * @name Highcharts.Series#options
          * @name Highcharts.Series#options
          * @type {Highcharts.SeriesOptionsType}
          * @type {Highcharts.SeriesOptionsType}
          */
          */
-        series.options = options = series.setOptions(options);
+        series.options = series.setOptions(userOptions);
+        var options = series.options;
         series.linkedSeries = [];
         series.linkedSeries = [];
         // bind the axes
         // bind the axes
         series.bindAxes();
         series.bindAxes();
-        // set some variables
         extend(series, {
         extend(series, {
             /**
             /**
              * The series name as given in the options. Defaults to
              * The series name as given in the options. Defaults to
@@ -296,14 +296,15 @@ var Series = /** @class */ (function () {
         fireEvent(this, 'bindAxes', null, function () {
         fireEvent(this, 'bindAxes', null, function () {
             // repeat for xAxis and yAxis
             // repeat for xAxis and yAxis
             (series.axisTypes || []).forEach(function (AXIS) {
             (series.axisTypes || []).forEach(function (AXIS) {
+                var index = 0;
                 // loop through the chart's axis objects
                 // loop through the chart's axis objects
                 chart[AXIS].forEach(function (axis) {
                 chart[AXIS].forEach(function (axis) {
                     axisOptions = axis.options;
                     axisOptions = axis.options;
                     // apply if the series xAxis or yAxis option mathches
                     // apply if the series xAxis or yAxis option mathches
                     // the number of the axis, or if undefined, use the
                     // the number of the axis, or if undefined, use the
                     // first axis
                     // first axis
-                    if (seriesOptions[AXIS] ===
-                        axisOptions.index ||
+                    if ((seriesOptions[AXIS] === index &&
+                        !axisOptions.isInternal) ||
                         (typeof seriesOptions[AXIS] !==
                         (typeof seriesOptions[AXIS] !==
                             'undefined' &&
                             'undefined' &&
                             seriesOptions[AXIS] === axisOptions.id) ||
                             seriesOptions[AXIS] === axisOptions.id) ||
@@ -331,6 +332,9 @@ var Series = /** @class */ (function () {
                         // mark dirty for redraw
                         // mark dirty for redraw
                         axis.isDirty = true;
                         axis.isDirty = true;
                     }
                     }
+                    if (!axisOptions.isInternal) {
+                        index++;
+                    }
                 });
                 });
                 // The series needs an X and an Y axis
                 // The series needs an X and an Y axis
                 if (!series[AXIS] &&
                 if (!series[AXIS] &&
@@ -580,9 +584,7 @@ var Series = /** @class */ (function () {
             this.getCyclic('color');
             this.getCyclic('color');
         }
         }
         else if (this.options.colorByPoint) {
         else if (this.options.colorByPoint) {
-            // #4359, selected slice got series.color even when colorByPoint
-            // was set.
-            this.options.color = null;
+            this.color = palette.neutralColor20;
         }
         }
         else {
         else {
             this.getCyclic('color', this.options.color ||
             this.getCyclic('color', this.options.color ||
@@ -789,7 +791,7 @@ var Series = /** @class */ (function () {
      * @sample highcharts/members/series-setdata-pie/
      * @sample highcharts/members/series-setdata-pie/
      *         Set data in a pie
      *         Set data in a pie
      * @sample stock/members/series-setdata/
      * @sample stock/members/series-setdata/
-     *         Set new data in Highstock
+     *         Set new data in Highcharts Stock
      * @sample maps/members/series-setdata/
      * @sample maps/members/series-setdata/
      *         Set new data in Highmaps
      *         Set new data in Highmaps
      *
      *
@@ -1068,7 +1070,7 @@ var Series = /** @class */ (function () {
     };
     };
     /**
     /**
      * Internal function to apply processed data.
      * Internal function to apply processed data.
-     * In Highstock, this function is extended to provide data grouping.
+     * In Highcharts Stock, this function is extended to provide data grouping.
      *
      *
      * @private
      * @private
      * @function Highcharts.Series#processData
      * @function Highcharts.Series#processData
@@ -1143,7 +1145,10 @@ var Series = /** @class */ (function () {
      * @function Highcharts.Series#generatePoints
      * @function Highcharts.Series#generatePoints
      */
      */
     Series.prototype.generatePoints = function () {
     Series.prototype.generatePoints = function () {
-        var series = this, options = series.options, dataOptions = options.data, data = series.data, dataLength, processedXData = series.processedXData, processedYData = series.processedYData, PointClass = series.pointClass, processedDataLength = processedXData.length, cropStart = series.cropStart || 0, cursor, hasGroupedData = series.hasGroupedData, keys = options.keys, point, points = [], i;
+        var series = this, options = series.options, dataOptions = options.data, data = series.data, dataLength, processedXData = series.processedXData, processedYData = series.processedYData, PointClass = series.pointClass, processedDataLength = processedXData.length, cropStart = series.cropStart || 0, cursor, hasGroupedData = series.hasGroupedData, keys = options.keys, point, points = [], i, groupCropStartIndex = (options.dataGrouping &&
+            options.dataGrouping.groupAll ?
+            cropStart :
+            0);
         if (!data && !hasGroupedData) {
         if (!data && !hasGroupedData) {
             var arr = [];
             var arr = [];
             arr.length = dataOptions.length;
             arr.length = dataOptions.length;
@@ -1167,7 +1172,7 @@ var Series = /** @class */ (function () {
                 // splat the y data in case of ohlc data array
                 // splat the y data in case of ohlc data array
                 point = (new PointClass()).init(series, [processedXData[i]].concat(splat(processedYData[i])));
                 point = (new PointClass()).init(series, [processedXData[i]].concat(splat(processedYData[i])));
                 /**
                 /**
-                 * Highstock only. If a point object is created by data
+                 * Highcharts Stock only. If a point object is created by data
                  * grouping, it doesn't reflect actual points in the raw
                  * grouping, it doesn't reflect actual points in the raw
                  * data. In this case, the `dataGroup` property holds
                  * data. In this case, the `dataGroup` property holds
                  * information that points back to the raw data.
                  * information that points back to the raw data.
@@ -1183,7 +1188,7 @@ var Series = /** @class */ (function () {
                  * @name Highcharts.Point#dataGroup
                  * @name Highcharts.Point#dataGroup
                  * @type {Highcharts.DataGroupingInfoObject|undefined}
                  * @type {Highcharts.DataGroupingInfoObject|undefined}
                  */
                  */
-                point.dataGroup = series.groupMap[i];
+                point.dataGroup = series.groupMap[groupCropStartIndex + i];
                 if (point.dataGroup.options) {
                 if (point.dataGroup.options) {
                     point.options = point.dataGroup.options;
                     point.options = point.dataGroup.options;
                     extend(point, point.dataGroup.options);
                     extend(point, point.dataGroup.options);
@@ -1199,7 +1204,8 @@ var Series = /** @class */ (function () {
                  * @type {number}
                  * @type {number}
                  * @readonly
                  * @readonly
                  */
                  */
-                point.index = cursor; // For faster access in Point.update
+                // For faster access in Point.update
+                point.index = hasGroupedData ? (groupCropStartIndex + i) : cursor;
                 points[i] = point;
                 points[i] = point;
             }
             }
         }
         }
@@ -1417,7 +1423,7 @@ var Series = /** @class */ (function () {
                 yValue <
                 yValue <
                     (stackThreshold ? 0 : threshold) ?
                     (stackThreshold ? 0 : threshold) ?
                 '-' :
                 '-' :
-                '') + series.stackKey], pointStack, stackValues;
+                '') + series.stackKey], pointStack = void 0, stackValues = void 0;
             if (yAxis.positiveValuesOnly && !yAxis.validatePositiveValue(yValue) ||
             if (yAxis.positiveValuesOnly && !yAxis.validatePositiveValue(yValue) ||
                 xAxis.positiveValuesOnly && !xAxis.validatePositiveValue(xValue)) {
                 xAxis.positiveValuesOnly && !xAxis.validatePositiveValue(xValue)) {
                 point.isNull = true;
                 point.isNull = true;
@@ -1470,7 +1476,7 @@ var Series = /** @class */ (function () {
             point.yBottom = defined(yBottom) ?
             point.yBottom = defined(yBottom) ?
                 limitedRange(yAxis.translate(yBottom, 0, 1, 0, 1)) :
                 limitedRange(yAxis.translate(yBottom, 0, 1, 0, 1)) :
                 null;
                 null;
-            // general hook, used for Highstock compare mode
+            // general hook, used for Highcharts Stock compare mode
             if (hasModifyValue) {
             if (hasModifyValue) {
                 yValue = series.modifyValue(yValue, point);
                 yValue = series.modifyValue(yValue, point);
             }
             }
@@ -1536,7 +1542,7 @@ var Series = /** @class */ (function () {
         var chart = this.chart;
         var chart = this.chart;
         // #3916, #5029, #5085
         // #3916, #5029, #5085
         return (points || this.points || []).filter(function (point) {
         return (points || this.points || []).filter(function (point) {
-            if (insideOnly && !chart.isInsidePlot(point.plotX, point.plotY, chart.inverted)) {
+            if (insideOnly && !chart.isInsidePlot(point.plotX, point.plotY, { inverted: chart.inverted })) {
                 return false;
                 return false;
             }
             }
             return point.visible !== false &&
             return point.visible !== false &&
@@ -1590,6 +1596,29 @@ var Series = /** @class */ (function () {
             x: clipBox.x
             x: clipBox.x
         };
         };
     };
     };
+    /**
+     * Get the shared clip key, creating it if it doesn't exist.
+     *
+     * @private
+     * @function Highcharts.Series#getSharedClipKey
+     */
+    Series.prototype.getSharedClipKey = function (animation) {
+        if (this.sharedClipKey) {
+            return this.sharedClipKey;
+        }
+        var sharedClipKey = [
+            animation && animation.duration,
+            animation && animation.easing,
+            animation && animation.defer,
+            this.getClipBox(animation).height,
+            this.options.xAxis,
+            this.options.yAxis
+        ].join(',');
+        if (this.options.clip !== false || animation) {
+            this.sharedClipKey = sharedClipKey;
+        }
+        return sharedClipKey;
+    };
     /**
     /**
      * Set the clipping for the series. For animated series it is called
      * Set the clipping for the series. For animated series it is called
      * twice, first to initiate animating the clip then the second time
      * twice, first to initiate animating the clip then the second time
@@ -1599,17 +1628,8 @@ var Series = /** @class */ (function () {
      * @function Highcharts.Series#setClip
      * @function Highcharts.Series#setClip
      */
      */
     Series.prototype.setClip = function (animation) {
     Series.prototype.setClip = function (animation) {
-        var chart = this.chart, options = this.options, renderer = chart.renderer, inverted = chart.inverted, seriesClipBox = this.clipBox, clipBox = this.getClipBox(animation), sharedClipKey = this.sharedClipKey ||
-            [
-                '_sharedClip',
-                animation && animation.duration,
-                animation && animation.easing,
-                animation && animation.defer,
-                clipBox.height,
-                options.xAxis,
-                options.yAxis
-            ].join(','), // #4526
-        clipRect = chart[sharedClipKey], markerClipRect = chart[sharedClipKey + 'm'];
+        var chart = this.chart, options = this.options, renderer = chart.renderer, inverted = chart.inverted, seriesClipBox = this.clipBox, clipBox = this.getClipBox(animation), sharedClipKey = this.getSharedClipKey(animation), // #4526
+        clipRect = chart.sharedClips[sharedClipKey], markerClipRect = chart.sharedClips[sharedClipKey + 'm'];
         if (animation) {
         if (animation) {
             clipBox.width = 0;
             clipBox.width = 0;
             if (inverted) {
             if (inverted) {
@@ -1622,12 +1642,12 @@ var Series = /** @class */ (function () {
         if (!clipRect) {
         if (!clipRect) {
             // When animation is set, prepare the initial positions
             // When animation is set, prepare the initial positions
             if (animation) {
             if (animation) {
-                chart[sharedClipKey + 'm'] = markerClipRect =
+                chart.sharedClips[sharedClipKey + 'm'] = markerClipRect =
                     renderer.clipRect(
                     renderer.clipRect(
                     // include the width of the first marker
                     // include the width of the first marker
-                    inverted ? chart.plotSizeX + 99 : -99, inverted ? -chart.plotLeft : -chart.plotTop, 99, inverted ? chart.chartWidth : chart.chartHeight);
+                    inverted ? (chart.plotSizeX || 0) + 99 : -99, inverted ? -chart.plotLeft : -chart.plotTop, 99, inverted ? chart.chartWidth : chart.chartHeight);
             }
             }
-            chart[sharedClipKey] = clipRect = renderer.clipRect(clipBox);
+            chart.sharedClips[sharedClipKey] = clipRect = renderer.clipRect(clipBox);
             // Create hashmap for series indexes
             // Create hashmap for series indexes
             clipRect.count = { length: 0 };
             clipRect.count = { length: 0 };
             // When the series is rendered again before starting animating, in
             // When the series is rendered again before starting animating, in
@@ -1645,7 +1665,6 @@ var Series = /** @class */ (function () {
         if (options.clip !== false || animation) {
         if (options.clip !== false || animation) {
             this.group.clip(animation || seriesClipBox ? clipRect : chart.clipRect);
             this.group.clip(animation || seriesClipBox ? clipRect : chart.clipRect);
             this.markerGroup.clip(markerClipRect);
             this.markerGroup.clip(markerClipRect);
-            this.sharedClipKey = sharedClipKey;
         }
         }
         // Remove the shared clipping rectangle when all series are shown
         // Remove the shared clipping rectangle when all series are shown
         if (!animation) {
         if (!animation) {
@@ -1653,16 +1672,12 @@ var Series = /** @class */ (function () {
                 delete clipRect.count[this.index];
                 delete clipRect.count[this.index];
                 clipRect.count.length -= 1;
                 clipRect.count.length -= 1;
             }
             }
-            if (clipRect.count.length === 0 &&
-                sharedClipKey &&
-                chart[sharedClipKey]) {
+            if (clipRect.count.length === 0) {
                 if (!seriesClipBox) {
                 if (!seriesClipBox) {
-                    chart[sharedClipKey] =
-                        chart[sharedClipKey].destroy();
+                    chart.sharedClips[sharedClipKey] = clipRect.destroy();
                 }
                 }
-                if (chart[sharedClipKey + 'm']) {
-                    chart[sharedClipKey + 'm'] =
-                        chart[sharedClipKey + 'm'].destroy();
+                if (markerClipRect) {
+                    chart.sharedClips[sharedClipKey + 'm'] = markerClipRect.destroy();
                 }
                 }
             }
             }
         }
         }
@@ -1680,21 +1695,21 @@ var Series = /** @class */ (function () {
      * Initialize the animation.
      * Initialize the animation.
      */
      */
     Series.prototype.animate = function (init) {
     Series.prototype.animate = function (init) {
-        var series = this, chart = series.chart, animation = animObject(series.options.animation), clipRect, sharedClipKey, finalBox;
+        var series = this, chart = series.chart, animation = animObject(series.options.animation), sharedClipKey = this.sharedClipKey;
         // Initialize the animation. Set up the clipping rectangle.
         // Initialize the animation. Set up the clipping rectangle.
         if (init) {
         if (init) {
             series.setClip(animation);
             series.setClip(animation);
             // Run the animation
             // Run the animation
         }
         }
-        else {
-            sharedClipKey = this.sharedClipKey;
-            clipRect = chart[sharedClipKey];
-            finalBox = series.getClipBox(animation, true);
+        else if (sharedClipKey) {
+            var clipRect = chart.sharedClips[sharedClipKey];
+            var markerClipRect = chart.sharedClips[sharedClipKey + 'm'];
+            var finalBox = series.getClipBox(animation, true);
             if (clipRect) {
             if (clipRect) {
                 clipRect.animate(finalBox, animation);
                 clipRect.animate(finalBox, animation);
             }
             }
-            if (chart[sharedClipKey + 'm']) {
-                chart[sharedClipKey + 'm'].animate({
+            if (markerClipRect) {
+                markerClipRect.animate({
                     width: finalBox.width + 99,
                     width: finalBox.width + 99,
                     x: finalBox.x - (chart.inverted ? 0 : 99)
                     x: finalBox.x - (chart.inverted ? 0 : 99)
                 }, animation);
                 }, animation);
@@ -1747,7 +1762,7 @@ var Series = /** @class */ (function () {
                     // Set starting position for point sliding animation.
                     // Set starting position for point sliding animation.
                     if (series.enabledDataSorting) {
                     if (series.enabledDataSorting) {
                         point.startXPos = xAxis.reversed ?
                         point.startXPos = xAxis.reversed ?
-                            -markerAttribs.width :
+                            -(markerAttribs.width || 0) :
                             xAxis.width;
                             xAxis.width;
                     }
                     }
                     var isInside = point.isInside !== false;
                     var isInside = point.isInside !== false;
@@ -1758,7 +1773,7 @@ var Series = /** @class */ (function () {
                             .animate(markerAttribs);
                             .animate(markerAttribs);
                     }
                     }
                     else if (isInside &&
                     else if (isInside &&
-                        (markerAttribs.width > 0 || point.hasImage)) {
+                        ((markerAttribs.width || 0) > 0 || point.hasImage)) {
                         /**
                         /**
                          * The graphic representation of the point.
                          * The graphic representation of the point.
                          * Typically this is a simple shape, like a `rect`
                          * Typically this is a simple shape, like a `rect`
@@ -1842,7 +1857,7 @@ var Series = /** @class */ (function () {
         attribs = {
         attribs = {
             // Math.floor for #1843:
             // Math.floor for #1843:
             x: seriesOptions.crisp ?
             x: seriesOptions.crisp ?
-                Math.floor(point.plotX) - radius :
+                Math.floor(point.plotX - radius) :
                 point.plotX - radius,
                 point.plotX - radius,
             y: point.plotY - radius
             y: point.plotY - radius
         };
         };
@@ -1938,7 +1953,9 @@ var Series = /** @class */ (function () {
                 point.destroy();
                 point.destroy();
             }
             }
         }
         }
-        series.points = null;
+        if (series.clips) {
+            series.clips.forEach(function (clip) { return clip.destroy(); });
+        }
         // Clear the animation timeout if we are destroying the series
         // Clear the animation timeout if we are destroying the series
         // during initial animation
         // during initial animation
         U.clearTimeout(series.animationTimeout);
         U.clearTimeout(series.animationTimeout);
@@ -1955,7 +1972,7 @@ var Series = /** @class */ (function () {
         });
         });
         // remove from hoverSeries
         // remove from hoverSeries
         if (chart.hoverSeries === series) {
         if (chart.hoverSeries === series) {
-            chart.hoverSeries = null;
+            chart.hoverSeries = void 0;
         }
         }
         erase(chart.series, series);
         erase(chart.series, series);
         chart.orderSeries();
         chart.orderSeries();
@@ -2223,7 +2240,8 @@ var Series = /** @class */ (function () {
         // hidden, and looks bad in other oldIE
         // hidden, and looks bad in other oldIE
         animDuration = (!series.finishedAnimating &&
         animDuration = (!series.finishedAnimating &&
             chart.renderer.isSVG &&
             chart.renderer.isSVG &&
-            animOptions.duration), visibility = series.visible ? 'inherit' : 'hidden', // #2597
+            animOptions.duration), visibility = series.visible ?
+            'inherit' : 'hidden', // #2597
         zIndex = options.zIndex, hasRendered = series.hasRendered, chartSeriesGroup = chart.seriesGroup, inverted = chart.inverted;
         zIndex = options.zIndex, hasRendered = series.hasRendered, chartSeriesGroup = chart.seriesGroup, inverted = chart.inverted;
         fireEvent(this, 'render');
         fireEvent(this, 'render');
         // the group
         // the group
@@ -2543,17 +2561,23 @@ var Series = /** @class */ (function () {
             // The tracker is added to the series group, which is clipped, but
             // The tracker is added to the series group, which is clipped, but
             // is covered by the marker group. So the marker group also needs to
             // is covered by the marker group. So the marker group also needs to
             // capture events.
             // capture events.
-            [series.tracker, series.markerGroup].forEach(function (tracker) {
-                tracker.addClass('highcharts-tracker')
-                    .on('mouseover', onMouseOver)
-                    .on('mouseout', function (e) {
-                    pointer.onTrackerMouseOut(e);
-                });
-                if (options.cursor && !chart.styledMode) {
-                    tracker.css({ cursor: options.cursor });
-                }
-                if (hasTouch) {
-                    tracker.on('touchstart', onMouseOver);
+            [
+                series.tracker,
+                series.markerGroup,
+                series.dataLabelsGroup
+            ].forEach(function (tracker) {
+                if (tracker) {
+                    tracker.addClass('highcharts-tracker')
+                        .on('mouseover', onMouseOver)
+                        .on('mouseout', function (e) {
+                        pointer.onTrackerMouseOut(e);
+                    });
+                    if (options.cursor && !chart.styledMode) {
+                        tracker.css({ cursor: options.cursor });
+                    }
+                    if (hasTouch) {
+                        tracker.on('touchstart', onMouseOver);
+                    }
                 }
                 }
             });
             });
         }
         }
@@ -2573,9 +2597,9 @@ var Series = /** @class */ (function () {
      * @sample highcharts/members/series-addpoint-pie/
      * @sample highcharts/members/series-addpoint-pie/
      *         Append pie slice
      *         Append pie slice
      * @sample stock/members/series-addpoint/
      * @sample stock/members/series-addpoint/
-     *         Append 100 points in Highstock
+     *         Append 100 points in Highcharts Stock
      * @sample stock/members/series-addpoint-shift/
      * @sample stock/members/series-addpoint-shift/
-     *         Append and shift in Highstock
+     *         Append and shift in Highcharts Stock
      * @sample maps/members/series-addpoint/
      * @sample maps/members/series-addpoint/
      *         Add a point in Highmaps
      *         Add a point in Highmaps
      *
      *
@@ -2668,7 +2692,7 @@ var Series = /** @class */ (function () {
      * Remove a point from the series. Unlike the
      * Remove a point from the series. Unlike the
      * {@link Highcharts.Point#remove} method, this can also be done on a point
      * {@link Highcharts.Point#remove} method, this can also be done on a point
      * that is not instanciated because it is outside the view or subject to
      * that is not instanciated because it is outside the view or subject to
-     * Highstock data grouping.
+     * Highcharts Stock data grouping.
      *
      *
      * @sample highcharts/members/series-removepoint/
      * @sample highcharts/members/series-removepoint/
      *         Remove cropped point
      *         Remove cropped point
@@ -2827,8 +2851,9 @@ var Series = /** @class */ (function () {
         // directly after chart initialization, or when applying responsive
         // directly after chart initialization, or when applying responsive
         // rules (#6912).
         // rules (#6912).
         animation = series.finishedAnimating && { animation: false }, kinds = {};
         animation = series.finishedAnimating && { animation: false }, kinds = {};
+        newType = newType || initialType;
         if (keepPoints) {
         if (keepPoints) {
-            preserve.push('data', 'isDirtyData', 'points', 'processedXData', 'processedYData', 'xIncrement', 'cropped', '_hasPointMarkers', '_hasPointLabels', 
+            preserve.push('data', 'isDirtyData', 'points', 'processedXData', 'processedYData', 'xIncrement', 'cropped', '_hasPointMarkers', '_hasPointLabels', 'clips', // #15420
             // Networkgraph (#14397)
             // Networkgraph (#14397)
             'nodes', 'layout', 
             'nodes', 'layout', 
             // Map specific, consider moving it to series-specific preserve-
             // Map specific, consider moving it to series-specific preserve-
@@ -2872,15 +2897,18 @@ var Series = /** @class */ (function () {
             preserve[prop] = series[prop];
             preserve[prop] = series[prop];
             delete series[prop];
             delete series[prop];
         });
         });
-        if (seriesTypes[newType || initialType]) {
-            var casting = newType !== series.type;
+        var casting = false;
+        if (seriesTypes[newType]) {
+            casting = newType !== series.type;
             // Destroy the series and delete all properties, it will be
             // Destroy the series and delete all properties, it will be
             // reinserted within the `init` call below
             // reinserted within the `init` call below
             series.remove(false, false, false, true);
             series.remove(false, false, false, true);
             if (casting) {
             if (casting) {
                 // Modern browsers including IE11
                 // Modern browsers including IE11
+                // @todo slow, consider alternatives mentioned:
+                // https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object/setPrototypeOf
                 if (Object.setPrototypeOf) {
                 if (Object.setPrototypeOf) {
-                    Object.setPrototypeOf(series, seriesTypes[newType || initialType].prototype);
+                    Object.setPrototypeOf(series, seriesTypes[newType].prototype);
                     // Legacy (IE < 11)
                     // Legacy (IE < 11)
                 }
                 }
                 else {
                 else {
@@ -2891,7 +2919,7 @@ var Series = /** @class */ (function () {
                     }
                     }
                     // Reinsert all methods and properties from the new type
                     // Reinsert all methods and properties from the new type
                     // prototype (#2270, #3719).
                     // prototype (#2270, #3719).
-                    extend(series, seriesTypes[newType || initialType].prototype);
+                    extend(series, seriesTypes[newType].prototype);
                     // The events are tied to the prototype chain, don't copy if
                     // The events are tied to the prototype chain, don't copy if
                     // they're not the series' own
                     // they're not the series' own
                     if (ownEvents) {
                     if (ownEvents) {
@@ -2904,7 +2932,7 @@ var Series = /** @class */ (function () {
             }
             }
         }
         }
         else {
         else {
-            error(17, true, chart, { missingModuleFor: (newType || initialType) });
+            error(17, true, chart, { missingModuleFor: newType });
         }
         }
         // Re-register groups (#3094) and other preserved properties
         // Re-register groups (#3094) and other preserved properties
         preserve.forEach(function (prop) {
         preserve.forEach(function (prop) {
@@ -2950,6 +2978,11 @@ var Series = /** @class */ (function () {
         }
         }
         series.initialType = initialType;
         series.initialType = initialType;
         chart.linkSeries(); // Links are lost in series.remove (#3028)
         chart.linkSeries(); // Links are lost in series.remove (#3028)
+        // #15383: Fire updatedData if the type has changed to keep linked
+        // series such as indicators updated
+        if (casting && series.linkedSeries.length) {
+            series.isDirtyData = true;
+        }
         fireEvent(this, 'afterUpdate');
         fireEvent(this, 'afterUpdate');
         if (pick(redraw, true)) {
         if (pick(redraw, true)) {
             chart.redraw(keepPoints ? void 0 : false);
             chart.redraw(keepPoints ? void 0 : false);
@@ -3261,6 +3294,21 @@ var Series = /** @class */ (function () {
         }
         }
         fireEvent(series, selected ? 'select' : 'unselect');
         fireEvent(series, selected ? 'select' : 'unselect');
     };
     };
+    /**
+     * Checks if a tooltip should be shown for a given point.
+     *
+     * @private
+     * @param {number} plotX
+     * @param {number} plotY
+     * @param {Highcharts.ChartIsInsideOptionsObject} [options]
+     * @return {boolean}
+     */
+    Series.prototype.shouldShowTooltip = function (plotX, plotY, options) {
+        if (options === void 0) { options = {}; }
+        options.series = this;
+        options.visiblePlotOnly = true;
+        return this.chart.isInsidePlot(plotX, plotY, options);
+    };
     /**
     /**
      * General options for all series types.
      * General options for all series types.
      *
      *
@@ -4208,6 +4256,8 @@ var Series = /** @class */ (function () {
              *         Bigger markers
              *         Bigger markers
              *
              *
              * @default {highstock} 2
              * @default {highstock} 2
+             * @default {highcharts} 4
+             *
              */
              */
             radius: 4,
             radius: 4,
             /**
             /**
@@ -4710,11 +4760,13 @@ var Series = /** @class */ (function () {
              * series animation has finished. Setting to `false` renders the
              * series animation has finished. Setting to `false` renders the
              * data label immediately. If set to `true` inherits the defer
              * data label immediately. If set to `true` inherits the defer
              * time set in [plotOptions.series.animation](#plotOptions.series.animation).
              * time set in [plotOptions.series.animation](#plotOptions.series.animation).
+             * If set to a number, a defer time is specified in milliseconds.
              *
              *
              * @sample highcharts/plotoptions/animation-defer
              * @sample highcharts/plotoptions/animation-defer
              *         Set defer time
              *         Set defer time
              *
              *
              * @since     4.0.0
              * @since     4.0.0
+             * @type      {boolean|number}
              * @product   highcharts highstock gantt
              * @product   highcharts highstock gantt
              */
              */
             defer: true,
             defer: true,
@@ -5529,7 +5581,7 @@ export default Series;
  * */
  * */
 /**
 /**
  * This is a placeholder type of the possible series options for
  * This is a placeholder type of the possible series options for
- * [Highcharts](../highcharts/series), [Highstock](../highstock/series),
+ * [Highcharts](../highcharts/series), [Highcharts Stock](../highstock/series),
  * [Highmaps](../highmaps/series), and [Gantt](../gantt/series).
  * [Highmaps](../highmaps/series), and [Gantt](../gantt/series).
  *
  *
  * In TypeScript is this dynamically generated to reference all possible types
  * In TypeScript is this dynamically generated to reference all possible types

+ 5 - 2
node_modules/highcharts/es-modules/Core/Series/SeriesRegistry.js

@@ -26,7 +26,11 @@ var SeriesRegistry;
      *  Static Properties
      *  Static Properties
      *
      *
      * */
      * */
-    SeriesRegistry.seriesTypes = {};
+    /**
+     * @internal
+     * @todo Move `Globals.seriesTypes` code to her.
+     */
+    SeriesRegistry.seriesTypes = H.seriesTypes;
     /* *
     /* *
      *
      *
      *  Static Functions
      *  Static Functions
@@ -122,7 +126,6 @@ var SeriesRegistry;
  *
  *
  * */
  * */
 H.seriesType = SeriesRegistry.seriesType;
 H.seriesType = SeriesRegistry.seriesType;
-H.seriesTypes = SeriesRegistry.seriesTypes;
 /* *
 /* *
  *
  *
  *  Export
  *  Export

+ 5 - 4
node_modules/highcharts/es-modules/Core/Time.js

@@ -92,7 +92,7 @@ var defined = U.defined, error = U.error, extend = U.extend, isObject = U.isObje
  * });
  * });
  *
  *
  * // Apply time settings by instance
  * // Apply time settings by instance
- * var chart = Highcharts.chart('container', {
+ * let chart = Highcharts.chart('container', {
  *     time: {
  *     time: {
  *         timezone: 'America/New_York'
  *         timezone: 'America/New_York'
  *     },
  *     },
@@ -402,14 +402,15 @@ var Time = /** @class */ (function () {
      *         The formatted date.
      *         The formatted date.
      */
      */
     Time.prototype.dateFormat = function (format, timestamp, capitalize) {
     Time.prototype.dateFormat = function (format, timestamp, capitalize) {
-        var _a;
         if (!defined(timestamp) || isNaN(timestamp)) {
         if (!defined(timestamp) || isNaN(timestamp)) {
-            return ((_a = H.defaultOptions.lang) === null || _a === void 0 ? void 0 : _a.invalidDate) || '';
+            return (H.defaultOptions.lang &&
+                H.defaultOptions.lang.invalidDate ||
+                '');
         }
         }
         format = pick(format, '%Y-%m-%d %H:%M:%S');
         format = pick(format, '%Y-%m-%d %H:%M:%S');
         var time = this, date = new this.Date(timestamp), 
         var time = this, date = new this.Date(timestamp), 
         // get the basic time values
         // get the basic time values
-        hours = this.get('Hours', date), day = this.get('Day', date), dayOfMonth = this.get('Date', date), month = this.get('Month', date), fullYear = this.get('FullYear', date), lang = H.defaultOptions.lang, langWeekdays = lang === null || lang === void 0 ? void 0 : lang.weekdays, shortWeekdays = lang === null || lang === void 0 ? void 0 : lang.shortWeekdays, 
+        hours = this.get('Hours', date), day = this.get('Day', date), dayOfMonth = this.get('Date', date), month = this.get('Month', date), fullYear = this.get('FullYear', date), lang = H.defaultOptions.lang, langWeekdays = (lang && lang.weekdays), shortWeekdays = (lang && lang.shortWeekdays), 
         // List all format keys. Custom formats can be added from the
         // List all format keys. Custom formats can be added from the
         // outside.
         // outside.
         replacements = extend({
         replacements = extend({

+ 125 - 62
node_modules/highcharts/es-modules/Core/Tooltip.js

@@ -8,11 +8,13 @@
  *
  *
  * */
  * */
 'use strict';
 'use strict';
+import F from './FormatUtilities.js';
+var format = F.format;
 import H from './Globals.js';
 import H from './Globals.js';
 var doc = H.doc;
 var doc = H.doc;
 import palette from './Color/Palette.js';
 import palette from './Color/Palette.js';
 import U from './Utilities.js';
 import U from './Utilities.js';
-var clamp = U.clamp, css = U.css, defined = U.defined, discardElement = U.discardElement, extend = U.extend, fireEvent = U.fireEvent, format = U.format, isNumber = U.isNumber, isString = U.isString, merge = U.merge, pick = U.pick, splat = U.splat, syncTimeout = U.syncTimeout, timeUnits = U.timeUnits;
+var clamp = U.clamp, css = U.css, defined = U.defined, discardElement = U.discardElement, extend = U.extend, fireEvent = U.fireEvent, isArray = U.isArray, isNumber = U.isNumber, isString = U.isString, merge = U.merge, pick = U.pick, splat = U.splat, syncTimeout = U.syncTimeout, timeUnits = U.timeUnits;
 /**
 /**
  * Callback function to format the text of the tooltip from scratch.
  * Callback function to format the text of the tooltip from scratch.
  *
  *
@@ -424,10 +426,9 @@ var Tooltip = /** @class */ (function () {
      * @return {Highcharts.SVGElement}
      * @return {Highcharts.SVGElement}
      */
      */
     Tooltip.prototype.getLabel = function () {
     Tooltip.prototype.getLabel = function () {
-        var _a, _b, _c;
         var tooltip = this, renderer = this.chart.renderer, styledMode = this.chart.styledMode, options = this.options, className = ('tooltip' + (defined(options.className) ?
         var tooltip = this, renderer = this.chart.renderer, styledMode = this.chart.styledMode, options = this.options, className = ('tooltip' + (defined(options.className) ?
             ' ' + options.className :
             ' ' + options.className :
-            '')), pointerEvents = (((_a = options.style) === null || _a === void 0 ? void 0 : _a.pointerEvents) ||
+            '')), pointerEvents = ((options.style && options.style.pointerEvents) ||
             (!this.followPointer && options.stickOnContact ? 'auto' : 'none')), container, onMouseEnter = function () {
             (!this.followPointer && options.stickOnContact ? 'auto' : 'none')), container, onMouseEnter = function () {
             tooltip.inContact = true;
             tooltip.inContact = true;
         }, onMouseLeave = function () {
         }, onMouseLeave = function () {
@@ -440,7 +441,7 @@ var Tooltip = /** @class */ (function () {
         };
         };
         if (!this.label) {
         if (!this.label) {
             if (this.outside) {
             if (this.outside) {
-                var chartStyle = (_b = this.chart.options.chart) === null || _b === void 0 ? void 0 : _b.style;
+                var chartStyle = this.chart.options.chart.style;
                 /**
                 /**
                  * Reference to the tooltip's container, when
                  * Reference to the tooltip's container, when
                  * [Highcharts.Tooltip#outside] is set to true, otherwise
                  * [Highcharts.Tooltip#outside] is set to true, otherwise
@@ -455,7 +456,7 @@ var Tooltip = /** @class */ (function () {
                     position: 'absolute',
                     position: 'absolute',
                     top: '1px',
                     top: '1px',
                     pointerEvents: pointerEvents,
                     pointerEvents: pointerEvents,
-                    zIndex: Math.max((((_c = this.options.style) === null || _c === void 0 ? void 0 : _c.zIndex) || 0), ((chartStyle === null || chartStyle === void 0 ? void 0 : chartStyle.zIndex) || 0) + 3)
+                    zIndex: Math.max((this.options.style && this.options.style.zIndex || 0), (chartStyle && chartStyle.zIndex || 0) + 3)
                 });
                 });
                 H.doc.body.appendChild(container);
                 H.doc.body.appendChild(container);
                 /**
                 /**
@@ -871,33 +872,32 @@ var Tooltip = /** @class */ (function () {
      *        used for the tooltip update.
      *        used for the tooltip update.
      */
      */
     Tooltip.prototype.refresh = function (pointOrPoints, mouseEvent) {
     Tooltip.prototype.refresh = function (pointOrPoints, mouseEvent) {
-        var tooltip = this, chart = this.chart, options = tooltip.options, x, y, point = pointOrPoints, anchor, textConfig = {}, text, pointConfig = [], formatter = options.formatter || tooltip.defaultFormatter, shared = tooltip.shared, currentSeries, styledMode = chart.styledMode;
+        var tooltip = this, chart = this.chart, options = tooltip.options, x, y, points = splat(pointOrPoints), point = points[0], anchor, textConfig = {}, text, pointConfig = [], formatter = options.formatter || tooltip.defaultFormatter, shared = tooltip.shared, styledMode = chart.styledMode;
         if (!options.enabled) {
         if (!options.enabled) {
             return;
             return;
         }
         }
         U.clearTimeout(this.hideTimer);
         U.clearTimeout(this.hideTimer);
         // get the reference point coordinates (pie charts use tooltipPos)
         // get the reference point coordinates (pie charts use tooltipPos)
-        tooltip.followPointer = splat(point)[0].series.tooltipOptions
-            .followPointer;
-        anchor = tooltip.getAnchor(point, mouseEvent);
+        tooltip.followPointer = !tooltip.split && point.series.tooltipOptions.followPointer;
+        anchor = tooltip.getAnchor(pointOrPoints, mouseEvent);
         x = anchor[0];
         x = anchor[0];
         y = anchor[1];
         y = anchor[1];
         // shared tooltip, array is sent over
         // shared tooltip, array is sent over
         if (shared &&
         if (shared &&
-            !(point.series &&
-                point.series.noSharedTooltip)) {
-            chart.pointer.applyInactiveState(point);
+            !(!isArray(pointOrPoints) &&
+                pointOrPoints.series &&
+                pointOrPoints.series.noSharedTooltip)) {
+            chart.pointer.applyInactiveState(points);
             // Now set hover state for the choosen ones:
             // Now set hover state for the choosen ones:
-            point.forEach(function (item) {
+            points.forEach(function (item) {
                 item.setState('hover');
                 item.setState('hover');
                 pointConfig.push(item.getLabelConfig());
                 pointConfig.push(item.getLabelConfig());
             });
             });
             textConfig = {
             textConfig = {
-                x: point[0].category,
-                y: point[0].y
+                x: point.category,
+                y: point.y
             };
             };
             textConfig.points = pointConfig;
             textConfig.points = pointConfig;
-            point = point[0];
             // single point tooltip
             // single point tooltip
         }
         }
         else {
         else {
@@ -906,7 +906,7 @@ var Tooltip = /** @class */ (function () {
         this.len = pointConfig.length; // #6128
         this.len = pointConfig.length; // #6128
         text = formatter.call(textConfig, tooltip);
         text = formatter.call(textConfig, tooltip);
         // register the current series
         // register the current series
-        currentSeries = point.series;
+        var currentSeries = point.series;
         this.distance = pick(currentSeries.tooltipOptions.distance, 16);
         this.distance = pick(currentSeries.tooltipOptions.distance, 16);
         // update the inner HTML
         // update the inner HTML
         if (text === false) {
         if (text === false) {
@@ -915,40 +915,56 @@ var Tooltip = /** @class */ (function () {
         else {
         else {
             // update text
             // update text
             if (tooltip.split) {
             if (tooltip.split) {
-                this.renderSplit(text, splat(pointOrPoints));
+                this.renderSplit(text, points);
             }
             }
             else {
             else {
-                var label = tooltip.getLabel();
-                // Prevent the tooltip from flowing over the chart box (#6659)
-                if (!options.style.width || styledMode) {
-                    label.css({
-                        width: this.chart.spacingBox.width + 'px'
-                    });
+                var checkX = x;
+                var checkY = y;
+                if (mouseEvent && chart.pointer.isDirectTouch) {
+                    checkX = mouseEvent.chartX - chart.plotLeft;
+                    checkY = mouseEvent.chartY - chart.plotTop;
                 }
                 }
-                label.attr({
-                    text: text && text.join ?
-                        text.join('') :
-                        text
-                });
-                // Set the stroke color of the box to reflect the point
-                label.removeClass(/highcharts-color-[\d]+/g)
-                    .addClass('highcharts-color-' +
-                    pick(point.colorIndex, currentSeries.colorIndex));
-                if (!styledMode) {
+                // #11493, #13095
+                if (chart.polar ||
+                    currentSeries.options.clip === false ||
+                    currentSeries.shouldShowTooltip(checkX, checkY)) {
+                    var label = tooltip.getLabel();
+                    // Prevent the tooltip from flowing over the chart box
+                    // (#6659)
+                    if (!options.style.width || styledMode) {
+                        label.css({
+                            width: this.chart.spacingBox.width + 'px'
+                        });
+                    }
                     label.attr({
                     label.attr({
-                        stroke: (options.borderColor ||
-                            point.color ||
-                            currentSeries.color ||
-                            palette.neutralColor60)
+                        text: text && text.join ?
+                            text.join('') :
+                            text
+                    });
+                    // Set the stroke color of the box to reflect the point
+                    label.removeClass(/highcharts-color-[\d]+/g)
+                        .addClass('highcharts-color-' +
+                        pick(point.colorIndex, currentSeries.colorIndex));
+                    if (!styledMode) {
+                        label.attr({
+                            stroke: (options.borderColor ||
+                                point.color ||
+                                currentSeries.color ||
+                                palette.neutralColor60)
+                        });
+                    }
+                    tooltip.updatePosition({
+                        plotX: x,
+                        plotY: y,
+                        negative: point.negative,
+                        ttBelow: point.ttBelow,
+                        h: anchor[2] || 0
                     });
                     });
                 }
                 }
-                tooltip.updatePosition({
-                    plotX: x,
-                    plotY: y,
-                    negative: point.negative,
-                    ttBelow: point.ttBelow,
-                    h: anchor[2] || 0
-                });
+                else {
+                    tooltip.hide();
+                    return;
+                }
             }
             }
             // show it
             // show it
             if (tooltip.isHidden && tooltip.label) {
             if (tooltip.isHidden && tooltip.label) {
@@ -974,17 +990,21 @@ var Tooltip = /** @class */ (function () {
      */
      */
     Tooltip.prototype.renderSplit = function (labels, points) {
     Tooltip.prototype.renderSplit = function (labels, points) {
         var tooltip = this;
         var tooltip = this;
-        var chart = tooltip.chart, _a = tooltip.chart, chartWidth = _a.chartWidth, chartHeight = _a.chartHeight, plotHeight = _a.plotHeight, plotLeft = _a.plotLeft, plotTop = _a.plotTop, pointer = _a.pointer, ren = _a.renderer, _b = _a.scrollablePixelsY, scrollablePixelsY = _b === void 0 ? 0 : _b, _c = _a.scrollingContainer, _d = _c === void 0 ? { scrollLeft: 0, scrollTop: 0 } : _c, scrollLeft = _d.scrollLeft, scrollTop = _d.scrollTop, styledMode = _a.styledMode, distance = tooltip.distance, options = tooltip.options, positioner = tooltip.options.positioner;
+        var chart = tooltip.chart, _a = tooltip.chart, chartWidth = _a.chartWidth, chartHeight = _a.chartHeight, plotHeight = _a.plotHeight, plotLeft = _a.plotLeft, plotTop = _a.plotTop, pointer = _a.pointer, _b = _a.scrollablePixelsY, scrollablePixelsY = _b === void 0 ? 0 : _b, scrollablePixelsX = _a.scrollablePixelsX, _c = _a.scrollingContainer, _d = _c === void 0 ? { scrollLeft: 0, scrollTop: 0 } : _c, scrollLeft = _d.scrollLeft, scrollTop = _d.scrollTop, styledMode = _a.styledMode, distance = tooltip.distance, options = tooltip.options, positioner = tooltip.options.positioner;
         // The area which the tooltip should be limited to. Limit to scrollable
         // The area which the tooltip should be limited to. Limit to scrollable
         // plot area if enabled, otherwise limit to the chart container.
         // plot area if enabled, otherwise limit to the chart container.
-        var bounds = {
+        // If outside is true it should be the whole viewport
+        var bounds = tooltip.outside && typeof scrollablePixelsX !== 'number' ?
+            doc.documentElement.getBoundingClientRect() : {
             left: scrollLeft,
             left: scrollLeft,
             right: scrollLeft + chartWidth,
             right: scrollLeft + chartWidth,
             top: scrollTop,
             top: scrollTop,
             bottom: scrollTop + chartHeight
             bottom: scrollTop + chartHeight
         };
         };
         var tooltipLabel = tooltip.getLabel();
         var tooltipLabel = tooltip.getLabel();
+        var ren = this.renderer || chart.renderer;
         var headerTop = Boolean(chart.xAxis[0] && chart.xAxis[0].opposite);
         var headerTop = Boolean(chart.xAxis[0] && chart.xAxis[0].opposite);
+        var _e = pointer.getChartPosition(), chartLeft = _e.left, chartTop = _e.top;
         var distributionBoxTop = plotTop + scrollTop;
         var distributionBoxTop = plotTop + scrollTop;
         var headerHeight = 0;
         var headerHeight = 0;
         var adjustedPlotHeight = plotHeight - scrollablePixelsY;
         var adjustedPlotHeight = plotHeight - scrollablePixelsY;
@@ -1010,8 +1030,9 @@ var Tooltip = /** @class */ (function () {
                 // Set anchorX to plotX. Limit to within xAxis.
                 // Set anchorX to plotX. Limit to within xAxis.
                 anchorX = xAxis.pos + clamp(plotX, -distance, xAxis.len + distance);
                 anchorX = xAxis.pos + clamp(plotX, -distance, xAxis.len + distance);
                 // Set anchorY, limit to the scrollable plot area
                 // Set anchorY, limit to the scrollable plot area
-                if (yAxis.pos + plotY >= scrollTop + plotTop &&
-                    yAxis.pos + plotY <= scrollTop + plotTop + plotHeight - scrollablePixelsY) {
+                if (series.shouldShowTooltip(0, yAxis.pos - plotTop + plotY, {
+                    ignoreX: true
+                })) {
                     anchorY = yAxis.pos + plotY;
                     anchorY = yAxis.pos + plotY;
                 }
                 }
             }
             }
@@ -1036,7 +1057,7 @@ var Tooltip = /** @class */ (function () {
             var x;
             var x;
             if (isHeader) {
             if (isHeader) {
                 y = headerTop ? 0 : adjustedPlotHeight;
                 y = headerTop ? 0 : adjustedPlotHeight;
-                x = clamp(anchorX - (boxWidth / 2), bounds.left, bounds.right - boxWidth);
+                x = clamp(anchorX - (boxWidth / 2), bounds.left, bounds.right - boxWidth - (tooltip.outside ? chartLeft : 0));
             }
             }
             else {
             else {
                 y = anchorY - distributionBoxTop;
                 y = anchorY - distributionBoxTop;
@@ -1117,7 +1138,7 @@ var Tooltip = /** @class */ (function () {
                 var isHeader = point.isHeader;
                 var isHeader = point.isHeader;
                 // Store the tooltip label referance on the series
                 // Store the tooltip label referance on the series
                 var owner = isHeader ? tooltip : point.series;
                 var owner = isHeader ? tooltip : point.series;
-                var tt = owner.tt = updatePartialTooltip(owner.tt, point, str);
+                var tt = owner.tt = updatePartialTooltip(owner.tt, point, str.toString());
                 // Get X position now, so we can move all to the other side in
                 // Get X position now, so we can move all to the other side in
                 // case of overflow
                 // case of overflow
                 var bBox = tt.getBBox();
                 var bBox = tt.getBBox();
@@ -1157,8 +1178,19 @@ var Tooltip = /** @class */ (function () {
             }
             }
             return boxes;
             return boxes;
         }, []);
         }, []);
-        // If overflow left then align all labels to the right
-        if (!positioner && boxes.some(function (box) { return box.x < bounds.left; })) {
+        // Realign the tooltips towards the right if there is not enough
+        // space to the left and there is space to to the right
+        if (!positioner && boxes.some(function (box) {
+            // Always realign if the beginning of a label is outside bounds
+            var outside = tooltip.outside;
+            var boxStart = (outside ? chartLeft : 0) + box.anchorX;
+            if (boxStart < bounds.left && boxStart + box.boxWidth < bounds.right) {
+                return true;
+            }
+            // Otherwise, check if there is more space available to the right
+            return boxStart < (chartLeft - bounds.left) + box.boxWidth &&
+                bounds.right - boxStart > boxStart;
+        })) {
             boxes = boxes.map(function (box) {
             boxes = boxes.map(function (box) {
                 var _a = defaultPositioner(box.anchorX, box.anchorY, box.point.isHeader, box.boxWidth, false), x = _a.x, y = _a.y;
                 var _a = defaultPositioner(box.anchorX, box.anchorY, box.point.isHeader, box.boxWidth, false), x = _a.x, y = _a.y;
                 return extend(box, {
                 return extend(box, {
@@ -1171,10 +1203,25 @@ var Tooltip = /** @class */ (function () {
         tooltip.cleanSplit();
         tooltip.cleanSplit();
         // Distribute and put in place
         // Distribute and put in place
         H.distribute(boxes, adjustedPlotHeight);
         H.distribute(boxes, adjustedPlotHeight);
+        var boxExtremes = {
+            left: chartLeft,
+            right: chartLeft
+        };
+        // Get the extremes from series tooltips
         boxes.forEach(function (box) {
         boxes.forEach(function (box) {
-            var anchorX = box.anchorX, anchorY = box.anchorY, pos = box.pos, x = box.x;
-            // Put the label in place
-            box.tt.attr({
+            var x = box.x, boxWidth = box.boxWidth, isHeader = box.isHeader;
+            if (!isHeader) {
+                if (tooltip.outside && chartLeft + x < boxExtremes.left) {
+                    boxExtremes.left = chartLeft + x;
+                }
+                if (!isHeader && tooltip.outside && boxExtremes.left + boxWidth > boxExtremes.right) {
+                    boxExtremes.right = chartLeft + x;
+                }
+            }
+        });
+        boxes.forEach(function (box) {
+            var x = box.x, anchorX = box.anchorX, anchorY = box.anchorY, pos = box.pos, isHeader = box.point.isHeader;
+            var attributes = {
                 visibility: typeof pos === 'undefined' ? 'hidden' : 'inherit',
                 visibility: typeof pos === 'undefined' ? 'hidden' : 'inherit',
                 x: x,
                 x: x,
                 /* NOTE: y should equal pos to be consistent with !split
                 /* NOTE: y should equal pos to be consistent with !split
@@ -1185,7 +1232,24 @@ var Tooltip = /** @class */ (function () {
                 y: pos + distributionBoxTop,
                 y: pos + distributionBoxTop,
                 anchorX: anchorX,
                 anchorX: anchorX,
                 anchorY: anchorY
                 anchorY: anchorY
-            });
+            };
+            // Handle left-aligned tooltips overflowing the chart area
+            if (tooltip.outside && x < anchorX) {
+                var offset = chartLeft - boxExtremes.left;
+                // Skip this if there is no overflow
+                if (offset > 0) {
+                    if (!isHeader) {
+                        attributes.x = x + offset;
+                        attributes.anchorX = anchorX + offset;
+                    }
+                    if (isHeader) {
+                        attributes.x = (boxExtremes.right - boxExtremes.left) / 2;
+                        attributes.anchorX = anchorX + offset;
+                    }
+                }
+            }
+            // Put the label in place
+            box.tt.attr(attributes);
         });
         });
         /* If we have a seperate tooltip container, then update the necessary
         /* If we have a seperate tooltip container, then update the necessary
          * container properties.
          * container properties.
@@ -1194,13 +1258,12 @@ var Tooltip = /** @class */ (function () {
          */
          */
         var container = tooltip.container, outside = tooltip.outside, renderer = tooltip.renderer;
         var container = tooltip.container, outside = tooltip.outside, renderer = tooltip.renderer;
         if (outside && container && renderer) {
         if (outside && container && renderer) {
-            // Set container size to fit the tooltip
-            var _e = tooltipLabel.getBBox(), width = _e.width, height = _e.height, x = _e.x, y = _e.y;
+            // Set container size to fit the bounds
+            var _f = tooltipLabel.getBBox(), width = _f.width, height = _f.height, x = _f.x, y = _f.y;
             renderer.setSize(width + x, height + y, false);
             renderer.setSize(width + x, height + y, false);
             // Position the tooltip container to the chart container
             // Position the tooltip container to the chart container
-            var chartPosition = pointer.getChartPosition();
-            container.style.left = chartPosition.left + 'px';
-            container.style.top = chartPosition.top + 'px';
+            container.style.left = boxExtremes.left + 'px';
+            container.style.top = chartTop + 'px';
         }
         }
     };
     };
     /**
     /**

+ 64 - 258
node_modules/highcharts/es-modules/Core/Utilities.js

@@ -186,7 +186,7 @@ var charts = H.charts, doc = H.doc, win = H.win;
  */
  */
 /**
 /**
  * Generic dictionary in TypeScript notation.
  * Generic dictionary in TypeScript notation.
- * Use the native `Record<string, any>` instead.
+ * Use the native `AnyRecord` instead.
  *
  *
  * @deprecated
  * @deprecated
  * @interface Highcharts.Dictionary<T>
  * @interface Highcharts.Dictionary<T>
@@ -326,7 +326,7 @@ var charts = H.charts, doc = H.doc, win = H.win;
  * chart constructor.
  * chart constructor.
  *
  *
  * @example
  * @example
- * var chart = Highcharts.chart('container', { ... });
+ * let chart = Highcharts.chart('container', { ... });
  *
  *
  * @namespace Highcharts
  * @namespace Highcharts
  */
  */
@@ -353,7 +353,8 @@ var charts = H.charts, doc = H.doc, win = H.win;
  *        Reference to the chart that causes the error. Used in 'debugger'
  *        Reference to the chart that causes the error. Used in 'debugger'
  *        module to display errors directly on the chart.
  *        module to display errors directly on the chart.
  *        Important note: This argument is undefined for errors that lack
  *        Important note: This argument is undefined for errors that lack
- *        access to the Chart instance.
+ *        access to the Chart instance. In such case, the error will be
+ *        displayed on the last created chart.
  *
  *
  * @param {Highcharts.Dictionary<string>} [params]
  * @param {Highcharts.Dictionary<string>} [params]
  *        Additional parameters for the generated message.
  *        Additional parameters for the generated message.
@@ -365,9 +366,11 @@ function error(code, stop, chart, params) {
     if (code === 32) {
     if (code === 32) {
         code = severity + ": Deprecated member";
         code = severity + ": Deprecated member";
     }
     }
-    var isCode = isNumber(code), message = isCode ?
+    var isCode = isNumber(code);
+    var message = isCode ?
         severity + " #" + code + ": www.highcharts.com/errors/" + code + "/" :
         severity + " #" + code + ": www.highcharts.com/errors/" + code + "/" :
-        code.toString(), defaultHandler = function () {
+        code.toString();
+    var defaultHandler = function () {
         if (stop) {
         if (stop) {
             throw new Error(message);
             throw new Error(message);
         }
         }
@@ -391,12 +394,7 @@ function error(code, stop, chart, params) {
         });
         });
         message += additionalMessages_1;
         message += additionalMessages_1;
     }
     }
-    if (chart) {
-        fireEvent(chart, 'displayError', { code: code, message: message, params: params }, defaultHandler);
-    }
-    else {
-        defaultHandler();
-    }
+    fireEvent(Highcharts, 'displayError', { chart: chart, code: code, message: message, params: params }, defaultHandler);
     error.messages.push(message);
     error.messages.push(message);
 }
 }
 (function (error) {
 (function (error) {
@@ -445,7 +443,8 @@ function error(code, stop, chart, params) {
 */
 */
 function merge() {
 function merge() {
     /* eslint-enable valid-jsdoc */
     /* eslint-enable valid-jsdoc */
-    var i, args = arguments, len, ret = {}, doCopy = function (copy, original) {
+    var i, args = arguments, ret = {};
+    var doCopy = function (copy, original) {
         // An object is replacing a primitive
         // An object is replacing a primitive
         if (typeof copy !== 'object') {
         if (typeof copy !== 'object') {
             copy = {};
             copy = {};
@@ -475,7 +474,7 @@ function merge() {
         args = Array.prototype.slice.call(args, 2);
         args = Array.prototype.slice.call(args, 2);
     }
     }
     // For each argument, extend the return
     // For each argument, extend the return
-    len = args.length;
+    var len = args.length;
     for (i = 0; i < len; i++) {
     for (i = 0; i < len; i++) {
         ret = doCopy(ret, args[i]);
         ret = doCopy(ret, args[i]);
     }
     }
@@ -778,7 +777,7 @@ function internalClearTimeout(id) {
  * @param {T|undefined} a
  * @param {T|undefined} a
  *        The object to be extended.
  *        The object to be extended.
  *
  *
- * @param {object} b
+ * @param {Partial<T>} b
  *        The object to add to the first one.
  *        The object to add to the first one.
  *
  *
  * @return {T}
  * @return {T}
@@ -967,84 +966,16 @@ function relativeLength(value, base, offset) {
 function wrap(obj, method, func) {
 function wrap(obj, method, func) {
     var proceed = obj[method];
     var proceed = obj[method];
     obj[method] = function () {
     obj[method] = function () {
-        var args = Array.prototype.slice.call(arguments), outerArgs = arguments, ctx = this, ret;
+        var args = Array.prototype.slice.call(arguments), outerArgs = arguments, ctx = this;
         ctx.proceed = function () {
         ctx.proceed = function () {
             proceed.apply(ctx, arguments.length ? arguments : outerArgs);
             proceed.apply(ctx, arguments.length ? arguments : outerArgs);
         };
         };
         args.unshift(proceed);
         args.unshift(proceed);
-        ret = func.apply(this, args);
+        var ret = func.apply(this, args);
         ctx.proceed = null;
         ctx.proceed = null;
         return ret;
         return ret;
     };
     };
 }
 }
-/**
- * Format a string according to a subset of the rules of Python's String.format
- * method.
- *
- * @example
- * var s = Highcharts.format(
- *     'The {color} fox was {len:.2f} feet long',
- *     { color: 'red', len: Math.PI }
- * );
- * // => The red fox was 3.14 feet long
- *
- * @function Highcharts.format
- *
- * @param {string} str
- *        The string to format.
- *
- * @param {Record<string, *>} ctx
- *        The context, a collection of key-value pairs where each key is
- *        replaced by its value.
- *
- * @param {Highcharts.Chart} [chart]
- *        A `Chart` instance used to get numberFormatter and time.
- *
- * @return {string}
- *         The formatted string.
- */
-function format(str, ctx, chart) {
-    var splitter = '{', isInside = false, segment, valueAndFormat, ret = [], val, index;
-    var floatRegex = /f$/;
-    var decRegex = /\.([0-9])/;
-    var lang = H.defaultOptions.lang;
-    var time = chart && chart.time || H.time;
-    var numberFormatter = chart && chart.numberFormatter || numberFormat;
-    while (str) {
-        index = str.indexOf(splitter);
-        if (index === -1) {
-            break;
-        }
-        segment = str.slice(0, index);
-        if (isInside) { // we're on the closing bracket looking back
-            valueAndFormat = segment.split(':');
-            val = getNestedProperty(valueAndFormat.shift() || '', ctx);
-            // Format the replacement
-            if (valueAndFormat.length && typeof val === 'number') {
-                segment = valueAndFormat.join(':');
-                if (floatRegex.test(segment)) { // float
-                    var decimals = parseInt((segment.match(decRegex) || ['', '-1'])[1], 10);
-                    if (val !== null) {
-                        val = numberFormatter(val, decimals, lang.decimalPoint, segment.indexOf(',') > -1 ? lang.thousandsSep : '');
-                    }
-                }
-                else {
-                    val = time.dateFormat(segment, val);
-                }
-            }
-            // Push the result and advance the cursor
-            ret.push(val);
-        }
-        else {
-            ret.push(segment);
-        }
-        str = str.slice(index + 1); // the rest
-        isInside = !isInside; // toggle
-        splitter = isInside ? '}' : '{'; // now look for next matching bracket
-    }
-    ret.push(str);
-    return ret.join('');
-}
 /**
 /**
  * Get the magnitude of a number.
  * Get the magnitude of a number.
  *
  *
@@ -1089,10 +1020,10 @@ function getMagnitude(num) {
  * reasons.
  * reasons.
  */
  */
 function normalizeTickInterval(interval, multiples, magnitude, allowDecimals, hasTickAmount) {
 function normalizeTickInterval(interval, multiples, magnitude, allowDecimals, hasTickAmount) {
-    var normalized, i, retInterval = interval;
+    var i, retInterval = interval;
     // round to a tenfold of 1, 2, 2.5 or 5
     // round to a tenfold of 1, 2, 2.5 or 5
     magnitude = pick(magnitude, 1);
     magnitude = pick(magnitude, 1);
-    normalized = interval / magnitude;
+    var normalized = interval / magnitude;
     // multiples for a linear scale
     // multiples for a linear scale
     if (!multiples) {
     if (!multiples) {
         multiples = hasTickAmount ?
         multiples = hasTickAmount ?
@@ -1149,7 +1080,8 @@ function stableSort(arr, sortFunction) {
     // @todo It seems like Chrome since v70 sorts in a stable way internally,
     // @todo It seems like Chrome since v70 sorts in a stable way internally,
     // plus all other browsers do it, so over time we may be able to remove this
     // plus all other browsers do it, so over time we may be able to remove this
     // function
     // function
-    var length = arr.length, sortValue, i;
+    var length = arr.length;
+    var sortValue, i;
     // Add index to each item
     // Add index to each item
     for (i = 0; i < length; i++) {
     for (i = 0; i < length; i++) {
         arr[i].safeI = i; // stable sort index
         arr[i].safeI = i; // stable sort index
@@ -1283,102 +1215,6 @@ var timeUnits = {
     month: 28 * 24 * 3600000,
     month: 28 * 24 * 3600000,
     year: 364 * 24 * 3600000
     year: 364 * 24 * 3600000
 };
 };
-/**
- * Format a number and return a string based on input settings.
- *
- * @sample highcharts/members/highcharts-numberformat/
- *         Custom number format
- *
- * @function Highcharts.numberFormat
- *
- * @param {number} number
- *        The input number to format.
- *
- * @param {number} decimals
- *        The amount of decimals. A value of -1 preserves the amount in the
- *        input number.
- *
- * @param {string} [decimalPoint]
- *        The decimal point, defaults to the one given in the lang options, or
- *        a dot.
- *
- * @param {string} [thousandsSep]
- *        The thousands separator, defaults to the one given in the lang
- *        options, or a space character.
- *
- * @return {string}
- *         The formatted number.
- */
-function numberFormat(number, decimals, decimalPoint, thousandsSep) {
-    number = +number || 0;
-    decimals = +decimals;
-    var lang = H.defaultOptions.lang, origDec = (number.toString().split('.')[1] || '').split('e')[0].length, strinteger, thousands, ret, roundedNumber, exponent = number.toString().split('e'), fractionDigits, firstDecimals = decimals;
-    if (decimals === -1) {
-        // Preserve decimals. Not huge numbers (#3793).
-        decimals = Math.min(origDec, 20);
-    }
-    else if (!isNumber(decimals)) {
-        decimals = 2;
-    }
-    else if (decimals && exponent[1] && exponent[1] < 0) {
-        // Expose decimals from exponential notation (#7042)
-        fractionDigits = decimals + +exponent[1];
-        if (fractionDigits >= 0) {
-            // remove too small part of the number while keeping the notation
-            exponent[0] = (+exponent[0]).toExponential(fractionDigits)
-                .split('e')[0];
-            decimals = fractionDigits;
-        }
-        else {
-            // fractionDigits < 0
-            exponent[0] = exponent[0].split('.')[0] || 0;
-            if (decimals < 20) {
-                // use number instead of exponential notation (#7405)
-                number = (exponent[0] * Math.pow(10, exponent[1]))
-                    .toFixed(decimals);
-            }
-            else {
-                // or zero
-                number = 0;
-            }
-            exponent[1] = 0;
-        }
-    }
-    // Add another decimal to avoid rounding errors of float numbers. (#4573)
-    // Then use toFixed to handle rounding.
-    roundedNumber = (Math.abs(exponent[1] ? exponent[0] : number) +
-        Math.pow(10, -Math.max(decimals, origDec) - 1)).toFixed(decimals);
-    // A string containing the positive integer component of the number
-    strinteger = String(pInt(roundedNumber));
-    // Leftover after grouping into thousands. Can be 0, 1 or 2.
-    thousands = strinteger.length > 3 ? strinteger.length % 3 : 0;
-    // Language
-    decimalPoint = pick(decimalPoint, lang.decimalPoint);
-    thousandsSep = pick(thousandsSep, lang.thousandsSep);
-    // Start building the return
-    ret = number < 0 ? '-' : '';
-    // Add the leftover after grouping into thousands. For example, in the
-    // number 42 000 000, this line adds 42.
-    ret += thousands ? strinteger.substr(0, thousands) + thousandsSep : '';
-    if (+exponent[1] < 0 && !firstDecimals) {
-        ret = '0';
-    }
-    else {
-        // Add the remaining thousands groups, joined by the thousands separator
-        ret += strinteger
-            .substr(thousands)
-            .replace(/(\d{3})(?=\d)/g, '$1' + thousandsSep);
-    }
-    // Add the decimal point and the decimal component
-    if (decimals) {
-        // Get the decimal component
-        ret += decimalPoint + roundedNumber.slice(-decimals);
-    }
-    if (exponent[1] && +ret !== 0) {
-        ret += 'e' + exponent[1];
-    }
-    return ret;
-}
 /**
 /**
  * Easing definition
  * Easing definition
  *
  *
@@ -1409,23 +1245,27 @@ Math.easeInOutSine = function (pos) {
  * @return {unknown}
  * @return {unknown}
  * The unknown property value.
  * The unknown property value.
  */
  */
-function getNestedProperty(path, obj) {
-    if (!path) {
-        return obj;
-    }
-    var pathElements = path.split('.').reverse();
-    var subProperty = obj;
-    if (pathElements.length === 1) {
-        return subProperty[path];
-    }
-    var pathElement = pathElements.pop();
-    while (typeof pathElement !== 'undefined' &&
-        typeof subProperty !== 'undefined' &&
-        subProperty !== null) {
-        subProperty = subProperty[pathElement];
-        pathElement = pathElements.pop();
+function getNestedProperty(path, parent) {
+    var pathElements = path.split('.');
+    while (pathElements.length && defined(parent)) {
+        var pathElement = pathElements.shift();
+        // Filter on the key
+        if (typeof pathElement === 'undefined' ||
+            pathElement === '__proto__') {
+            return; // undefined
+        }
+        var child = parent[pathElement];
+        // Filter on the child
+        if (!defined(child) ||
+            typeof child === 'function' ||
+            typeof child.nodeType === 'number' ||
+            child === win) {
+            return; // undefined
+        }
+        // Else, proceed
+        parent = child;
     }
     }
-    return subProperty;
+    return parent;
 }
 }
 /**
 /**
  * Get the computed CSS value for given element and property, only for numerical
  * Get the computed CSS value for given element and property, only for numerical
@@ -1435,18 +1275,20 @@ function getNestedProperty(path, obj) {
  * @function Highcharts.getStyle
  * @function Highcharts.getStyle
  *
  *
  * @param {Highcharts.HTMLDOMElement} el
  * @param {Highcharts.HTMLDOMElement} el
- *        An HTML element.
+ * An HTML element.
  *
  *
  * @param {string} prop
  * @param {string} prop
- *        The property name.
+ * The property name.
  *
  *
  * @param {boolean} [toInt=true]
  * @param {boolean} [toInt=true]
- *        Parse to integer.
+ * Parse to integer.
  *
  *
- * @return {number|string}
- *         The numeric value.
+ * @return {number|string|undefined}
+ * The style value.
  */
  */
 function getStyle(el, prop, toInt) {
 function getStyle(el, prop, toInt) {
+    var customGetStyle = (H.getStyle || // oldie getStyle
+        getStyle);
     var style;
     var style;
     // For width and height, return the actual inner pixel size (#4913)
     // For width and height, return the actual inner pixel size (#4913)
     if (prop === 'width') {
     if (prop === 'width') {
@@ -1464,23 +1306,23 @@ function getStyle(el, prop, toInt) {
         }
         }
         return Math.max(0, // #8377
         return Math.max(0, // #8377
         (offsetWidth -
         (offsetWidth -
-            H.getStyle(el, 'padding-left') -
-            H.getStyle(el, 'padding-right')));
+            (customGetStyle(el, 'padding-left', true) || 0) -
+            (customGetStyle(el, 'padding-right', true) || 0)));
     }
     }
     if (prop === 'height') {
     if (prop === 'height') {
         return Math.max(0, // #8377
         return Math.max(0, // #8377
-        Math.min(el.offsetHeight, el.scrollHeight) -
-            H.getStyle(el, 'padding-top') -
-            H.getStyle(el, 'padding-bottom'));
+        (Math.min(el.offsetHeight, el.scrollHeight) -
+            (customGetStyle(el, 'padding-top', true) || 0) -
+            (customGetStyle(el, 'padding-bottom', true) || 0)));
     }
     }
     if (!win.getComputedStyle) {
     if (!win.getComputedStyle) {
         // SVG not supported, forgot to load oldie.js?
         // SVG not supported, forgot to load oldie.js?
         error(27, true);
         error(27, true);
     }
     }
     // Otherwise, get the computed style
     // Otherwise, get the computed style
-    style = win.getComputedStyle(el, undefined); // eslint-disable-line no-undefined
-    if (style) {
-        style = style.getPropertyValue(prop);
+    var css = win.getComputedStyle(el, undefined); // eslint-disable-line no-undefined
+    if (css) {
+        style = css.getPropertyValue(prop);
         if (pick(toInt, prop !== 'opacity')) {
         if (pick(toInt, prop !== 'opacity')) {
             style = pInt(style);
             style = pInt(style);
         }
         }
@@ -1534,7 +1376,8 @@ var find = Array.prototype.find ?
     } :
     } :
     // Legacy implementation. PhantomJS, IE <= 11 etc. #7223.
     // Legacy implementation. PhantomJS, IE <= 11 etc. #7223.
     function (arr, callback) {
     function (arr, callback) {
-        var i, length = arr.length;
+        var i;
+        var length = arr.length;
         for (i = 0; i < length; i++) {
         for (i = 0; i < length; i++) {
             if (callback(arr[i], i)) { // eslint-disable-line callback-return
             if (callback(arr[i], i)) { // eslint-disable-line callback-return
                 return arr[i];
                 return arr[i];
@@ -1890,15 +1733,18 @@ function fireEvent(el, type, eventArguments, defaultFunction) {
     var e, i;
     var e, i;
     eventArguments = eventArguments || {};
     eventArguments = eventArguments || {};
     if (doc.createEvent &&
     if (doc.createEvent &&
-        (el.dispatchEvent || el.fireEvent)) {
+        (el.dispatchEvent ||
+            (el.fireEvent &&
+                // Enable firing events on Highcharts instance.
+                el !== H))) {
         e = doc.createEvent('Events');
         e = doc.createEvent('Events');
         e.initEvent(type, true, true);
         e.initEvent(type, true, true);
-        extend(e, eventArguments);
+        eventArguments = extend(e, eventArguments);
         if (el.dispatchEvent) {
         if (el.dispatchEvent) {
-            el.dispatchEvent(e);
+            el.dispatchEvent(eventArguments);
         }
         }
         else {
         else {
-            el.fireEvent(type, e);
+            el.fireEvent(type, eventArguments);
         }
         }
     }
     }
     else if (el.hcEvents) {
     else if (el.hcEvents) {
@@ -1963,7 +1809,7 @@ var serialMode;
  * counter.
  * counter.
  *
  *
  * @example
  * @example
- * var id = uniqueKey(); // => 'highcharts-x45f6hp-0'
+ * let id = uniqueKey(); // => 'highcharts-x45f6hp-0'
  *
  *
  * @function Highcharts.uniqueKey
  * @function Highcharts.uniqueKey
  *
  *
@@ -2007,42 +1853,6 @@ function useSerialIds(mode) {
 function isFunction(obj) {
 function isFunction(obj) {
     return typeof obj === 'function';
     return typeof obj === 'function';
 }
 }
-/**
- * Get the updated default options. Until 3.0.7, merely exposing defaultOptions
- * for outside modules wasn't enough because the setOptions method created a new
- * object.
- *
- * @function Highcharts.getOptions
- *
- * @return {Highcharts.Options}
- */
-var getOptions = H.getOptions = function () {
-    return H.defaultOptions;
-};
-/**
- * Merge the default options with custom options and return the new options
- * structure. Commonly used for defining reusable templates.
- *
- * @sample highcharts/global/useutc-false Setting a global option
- * @sample highcharts/members/setoptions Applying a global theme
- *
- * @function Highcharts.setOptions
- *
- * @param {Highcharts.Options} options
- *        The new custom chart options.
- *
- * @return {Highcharts.Options}
- *         Updated options.
- */
-var setOptions = H.setOptions = function (options) {
-    // Copy in the default options
-    H.defaultOptions = merge(true, H.defaultOptions, options);
-    // Update the time object
-    if (options.time || options.global) {
-        H.time.update(merge(H.defaultOptions.global, H.defaultOptions.time, options.global, options.time));
-    }
-    return H.defaultOptions;
-};
 // Register Highcharts as a plugin in jQuery
 // Register Highcharts as a plugin in jQuery
 if (win.jQuery) {
 if (win.jQuery) {
     /**
     /**
@@ -2116,10 +1926,8 @@ var utilitiesModule = {
     extendClass: extendClass,
     extendClass: extendClass,
     find: find,
     find: find,
     fireEvent: fireEvent,
     fireEvent: fireEvent,
-    format: format,
     getMagnitude: getMagnitude,
     getMagnitude: getMagnitude,
     getNestedProperty: getNestedProperty,
     getNestedProperty: getNestedProperty,
-    getOptions: getOptions,
     getStyle: getStyle,
     getStyle: getStyle,
     inArray: inArray,
     inArray: inArray,
     isArray: isArray,
     isArray: isArray,
@@ -2132,7 +1940,6 @@ var utilitiesModule = {
     keys: keys,
     keys: keys,
     merge: merge,
     merge: merge,
     normalizeTickInterval: normalizeTickInterval,
     normalizeTickInterval: normalizeTickInterval,
-    numberFormat: numberFormat,
     objectEach: objectEach,
     objectEach: objectEach,
     offset: offset,
     offset: offset,
     pad: pad,
     pad: pad,
@@ -2140,7 +1947,6 @@ var utilitiesModule = {
     pInt: pInt,
     pInt: pInt,
     relativeLength: relativeLength,
     relativeLength: relativeLength,
     removeEvent: removeEvent,
     removeEvent: removeEvent,
-    setOptions: setOptions,
     splat: splat,
     splat: splat,
     stableSort: stableSort,
     stableSort: stableSort,
     syncTimeout: syncTimeout,
     syncTimeout: syncTimeout,

+ 15 - 7
node_modules/highcharts/es-modules/Extensions/Annotations/Annotations.js

@@ -24,6 +24,7 @@ import H from '../../Core/Globals.js';
 import MockPoint from './MockPoint.js';
 import MockPoint from './MockPoint.js';
 import Pointer from '../../Core/Pointer.js';
 import Pointer from '../../Core/Pointer.js';
 import U from '../../Core/Utilities.js';
 import U from '../../Core/Utilities.js';
+import palette from '../../Core/Color/Palette.js';
 var addEvent = U.addEvent, defined = U.defined, destroyObjectProperties = U.destroyObjectProperties, erase = U.erase, extend = U.extend, find = U.find, fireEvent = U.fireEvent, merge = U.merge, pick = U.pick, splat = U.splat, wrap = U.wrap;
 var addEvent = U.addEvent, defined = U.defined, destroyObjectProperties = U.destroyObjectProperties, erase = U.erase, extend = U.extend, find = U.find, fireEvent = U.fireEvent, merge = U.merge, pick = U.pick, splat = U.splat, wrap = U.wrap;
 /* *********************************************************************
 /* *********************************************************************
  *
  *
@@ -659,7 +660,7 @@ merge(Annotation.prototype,
              *
              *
              * @type {Highcharts.ColorString}
              * @type {Highcharts.ColorString}
              */
              */
-            borderColor: 'black',
+            borderColor: palette.neutralColor100,
             /**
             /**
              * The border radius in pixels for the annotaiton's label.
              * The border radius in pixels for the annotaiton's label.
              *
              *
@@ -1077,9 +1078,9 @@ merge(Annotation.prototype,
             width: 10,
             width: 10,
             height: 10,
             height: 10,
             style: {
             style: {
-                stroke: 'black',
+                stroke: palette.neutralColor100,
                 'stroke-width': 2,
                 'stroke-width': 2,
-                fill: 'white'
+                fill: palette.backgroundColor
             },
             },
             visible: false,
             visible: false,
             events: {}
             events: {}
@@ -1120,7 +1121,7 @@ merge(Annotation.prototype,
 }));
 }));
 H.extendAnnotation = function (Constructor, BaseConstructor, prototype, defaultOptions) {
 H.extendAnnotation = function (Constructor, BaseConstructor, prototype, defaultOptions) {
     BaseConstructor = BaseConstructor || Annotation;
     BaseConstructor = BaseConstructor || Annotation;
-    merge(true, Constructor.prototype, BaseConstructor.prototype, prototype);
+    extend(Constructor.prototype, merge(BaseConstructor.prototype, prototype));
     Constructor.prototype.defaultOptions = merge(Constructor.prototype.defaultOptions, defaultOptions || {});
     Constructor.prototype.defaultOptions = merge(Constructor.prototype.defaultOptions, defaultOptions || {});
 };
 };
 /* *********************************************************************
 /* *********************************************************************
@@ -1218,13 +1219,14 @@ chartProto.callbacks.push(function (chart) {
         chart.controlPointsGroup.destroy();
         chart.controlPointsGroup.destroy();
     });
     });
     addEvent(chart, 'exportData', function (event) {
     addEvent(chart, 'exportData', function (event) {
-        var _a, _b, _c, _d, _e, _f, _g, _h;
         var annotations = chart.annotations, csvColumnHeaderFormatter = ((this.options.exporting &&
         var annotations = chart.annotations, csvColumnHeaderFormatter = ((this.options.exporting &&
             this.options.exporting.csv) ||
             this.options.exporting.csv) ||
             {}).columnHeaderFormatter, 
             {}).columnHeaderFormatter, 
         // If second row doesn't have xValues
         // If second row doesn't have xValues
         // then it is a title row thus multiple level header is in use.
         // then it is a title row thus multiple level header is in use.
-        multiLevelHeaders = !event.dataRows[1].xValues, annotationHeader = (_b = (_a = chart.options.lang) === null || _a === void 0 ? void 0 : _a.exportData) === null || _b === void 0 ? void 0 : _b.annotationHeader, columnHeaderFormatter = function (index) {
+        multiLevelHeaders = !event.dataRows[1].xValues, annotationHeader = (chart.options.lang &&
+            chart.options.lang.exportData &&
+            chart.options.lang.exportData.annotationHeader), columnHeaderFormatter = function (index) {
             var s;
             var s;
             if (csvColumnHeaderFormatter) {
             if (csvColumnHeaderFormatter) {
                 s = csvColumnHeaderFormatter(index);
                 s = csvColumnHeaderFormatter(index);
@@ -1240,7 +1242,13 @@ chartProto.callbacks.push(function (chart) {
                 };
                 };
             }
             }
             return s;
             return s;
-        }, startRowLength = event.dataRows[0].length, annotationSeparator = (_e = (_d = (_c = chart.options.exporting) === null || _c === void 0 ? void 0 : _c.csv) === null || _d === void 0 ? void 0 : _d.annotations) === null || _e === void 0 ? void 0 : _e.itemDelimiter, joinAnnotations = (_h = (_g = (_f = chart.options.exporting) === null || _f === void 0 ? void 0 : _f.csv) === null || _g === void 0 ? void 0 : _g.annotations) === null || _h === void 0 ? void 0 : _h.join;
+        }, startRowLength = event.dataRows[0].length, annotationSeparator = (chart.options.exporting &&
+            chart.options.exporting.csv &&
+            chart.options.exporting.csv.annotations &&
+            chart.options.exporting.csv.annotations.itemDelimiter), joinAnnotations = (chart.options.exporting &&
+            chart.options.exporting.csv &&
+            chart.options.exporting.csv.annotations &&
+            chart.options.exporting.csv.annotations.join);
         annotations.forEach(function (annotation) {
         annotations.forEach(function (annotation) {
             if (annotation.options.labelOptions.includeInDataExport) {
             if (annotation.options.labelOptions.includeInDataExport) {
                 annotation.labels.forEach(function (label) {
                 annotation.labels.forEach(function (label) {

+ 13 - 10
node_modules/highcharts/es-modules/Extensions/Annotations/Controllables/ControllableLabel.js

@@ -5,11 +5,13 @@
  * */
  * */
 'use strict';
 'use strict';
 import ControllableMixin from '../Mixins/ControllableMixin.js';
 import ControllableMixin from '../Mixins/ControllableMixin.js';
+import F from '../../../Core/FormatUtilities.js';
+var format = F.format;
 import MockPoint from '../MockPoint.js';
 import MockPoint from '../MockPoint.js';
 import SVGRenderer from '../../../Core/Renderer/SVG/SVGRenderer.js';
 import SVGRenderer from '../../../Core/Renderer/SVG/SVGRenderer.js';
 import Tooltip from '../../../Core/Tooltip.js';
 import Tooltip from '../../../Core/Tooltip.js';
 import U from '../../../Core/Utilities.js';
 import U from '../../../Core/Utilities.js';
-var extend = U.extend, format = U.format, isNumber = U.isNumber, pick = U.pick;
+var extend = U.extend, isNumber = U.isNumber, pick = U.pick;
 import '../../../Core/Renderer/SVG/SVGRenderer.js';
 import '../../../Core/Renderer/SVG/SVGRenderer.js';
 /* eslint-disable no-invalid-this, valid-jsdoc */
 /* eslint-disable no-invalid-this, valid-jsdoc */
 /**
 /**
@@ -119,7 +121,7 @@ var ControllableLabel = /** @class */ (function () {
             height: label.height
             height: label.height
         }, 
         }, 
         //
         //
-        x = alignAttr.x - chart.plotLeft, y = alignAttr.y - chart.plotTop;
+        x = (alignAttr.x || 0) - chart.plotLeft, y = (alignAttr.y || 0) - chart.plotTop;
         // Off left
         // Off left
         off = x + padding;
         off = x + padding;
         if (off < 0) {
         if (off < 0) {
@@ -127,7 +129,7 @@ var ControllableLabel = /** @class */ (function () {
                 options.align = 'left';
                 options.align = 'left';
             }
             }
             else {
             else {
-                options.x = -off;
+                options.x = (options.x || 0) - off;
             }
             }
         }
         }
         // Off right
         // Off right
@@ -137,7 +139,7 @@ var ControllableLabel = /** @class */ (function () {
                 options.align = 'right';
                 options.align = 'right';
             }
             }
             else {
             else {
-                options.x = chart.plotWidth - off;
+                options.x = (options.x || 0) + chart.plotWidth - off;
             }
             }
         }
         }
         // Off top
         // Off top
@@ -147,7 +149,7 @@ var ControllableLabel = /** @class */ (function () {
                 options.verticalAlign = 'top';
                 options.verticalAlign = 'top';
             }
             }
             else {
             else {
-                options.y = -off;
+                options.y = (options.y || 0) - off;
             }
             }
         }
         }
         // Off bottom
         // Off bottom
@@ -157,7 +159,7 @@ var ControllableLabel = /** @class */ (function () {
                 options.verticalAlign = 'bottom';
                 options.verticalAlign = 'bottom';
             }
             }
             else {
             else {
-                options.y = chart.plotHeight - off;
+                options.y = (options.y || 0) + chart.plotHeight - off;
             }
             }
         }
         }
         return options;
         return options;
@@ -271,12 +273,13 @@ var ControllableLabel = /** @class */ (function () {
     ControllableLabel.prototype.position = function (anchor) {
     ControllableLabel.prototype.position = function (anchor) {
         var item = this.graphic, chart = this.annotation.chart, point = this.points[0], itemOptions = this.options, anchorAbsolutePosition = anchor.absolutePosition, anchorRelativePosition = anchor.relativePosition, itemPosition, alignTo, itemPosRelativeX, itemPosRelativeY, showItem = point.series.visible &&
         var item = this.graphic, chart = this.annotation.chart, point = this.points[0], itemOptions = this.options, anchorAbsolutePosition = anchor.absolutePosition, anchorRelativePosition = anchor.relativePosition, itemPosition, alignTo, itemPosRelativeX, itemPosRelativeY, showItem = point.series.visible &&
             MockPoint.prototype.isInsidePlot.call(point);
             MockPoint.prototype.isInsidePlot.call(point);
+        var _a = item.width, width = _a === void 0 ? 0 : _a, _b = item.height, height = _b === void 0 ? 0 : _b;
         if (showItem) {
         if (showItem) {
             if (itemOptions.distance) {
             if (itemOptions.distance) {
                 itemPosition = Tooltip.prototype.getPosition.call({
                 itemPosition = Tooltip.prototype.getPosition.call({
                     chart: chart,
                     chart: chart,
                     distance: pick(itemOptions.distance, 16)
                     distance: pick(itemOptions.distance, 16)
-                }, item.width, item.height, {
+                }, width, height, {
                     plotX: anchorRelativePosition.x,
                     plotX: anchorRelativePosition.x,
                     plotY: anchorRelativePosition.y,
                     plotY: anchorRelativePosition.y,
                     negative: point.negative,
                     negative: point.negative,
@@ -295,8 +298,8 @@ var ControllableLabel = /** @class */ (function () {
                     height: 0
                     height: 0
                 };
                 };
                 itemPosition = ControllableLabel.alignedPosition(extend(itemOptions, {
                 itemPosition = ControllableLabel.alignedPosition(extend(itemOptions, {
-                    width: item.width,
-                    height: item.height
+                    width: width,
+                    height: height
                 }), alignTo);
                 }), alignTo);
                 if (this.options.overflow === 'justify') {
                 if (this.options.overflow === 'justify') {
                     itemPosition = ControllableLabel.alignedPosition(ControllableLabel.justifiedOptions(chart, item, itemOptions, itemPosition), alignTo);
                     itemPosition = ControllableLabel.alignedPosition(ControllableLabel.justifiedOptions(chart, item, itemOptions, itemPosition), alignTo);
@@ -307,7 +310,7 @@ var ControllableLabel = /** @class */ (function () {
                 itemPosRelativeY = itemPosition.y - chart.plotTop;
                 itemPosRelativeY = itemPosition.y - chart.plotTop;
                 showItem =
                 showItem =
                     chart.isInsidePlot(itemPosRelativeX, itemPosRelativeY) &&
                     chart.isInsidePlot(itemPosRelativeX, itemPosRelativeY) &&
-                        chart.isInsidePlot(itemPosRelativeX + item.width, itemPosRelativeY + item.height);
+                        chart.isInsidePlot(itemPosRelativeX + width, itemPosRelativeY + height);
             }
             }
         }
         }
         return showItem ? itemPosition : null;
         return showItem ? itemPosition : null;

+ 1 - 1
node_modules/highcharts/es-modules/Extensions/Annotations/Mixins/ControllableMixin.js

@@ -361,7 +361,7 @@ var controllableMixin = {
     update: function (newOptions) {
     update: function (newOptions) {
         var annotation = this.annotation, options = merge(true, this.options, newOptions), parentGroup = this.graphic.parentGroup;
         var annotation = this.annotation, options = merge(true, this.options, newOptions), parentGroup = this.graphic.parentGroup;
         this.destroy();
         this.destroy();
-        this.constructor(annotation, options);
+        this.constructor(annotation, options, this.index);
         this.render(parentGroup);
         this.render(parentGroup);
         this.redraw();
         this.redraw();
     }
     }

+ 9 - 7
node_modules/highcharts/es-modules/Extensions/Annotations/Mixins/EventEmitterMixin.js

@@ -129,23 +129,25 @@ var eventEmitterMixin = {
      * capability as well as the extended ones.
      * capability as well as the extended ones.
      */
      */
     onDrag: function (e) {
     onDrag: function (e) {
-        if (this.chart.isInsidePlot(e.chartX - this.chart.plotLeft, e.chartY - this.chart.plotTop)) {
-            var translation = this.mouseMoveToTranslation(e);
+        if (this.chart.isInsidePlot(e.chartX - this.chart.plotLeft, e.chartY - this.chart.plotTop, {
+            visiblePlotOnly: true
+        })) {
+            var translation_1 = this.mouseMoveToTranslation(e);
             if (this.options.draggable === 'x') {
             if (this.options.draggable === 'x') {
-                translation.y = 0;
+                translation_1.y = 0;
             }
             }
             if (this.options.draggable === 'y') {
             if (this.options.draggable === 'y') {
-                translation.x = 0;
+                translation_1.x = 0;
             }
             }
             if (this.points.length) {
             if (this.points.length) {
-                this.translate(translation.x, translation.y);
+                this.translate(translation_1.x, translation_1.y);
             }
             }
             else {
             else {
                 this.shapes.forEach(function (shape) {
                 this.shapes.forEach(function (shape) {
-                    shape.translate(translation.x, translation.y);
+                    shape.translate(translation_1.x, translation_1.y);
                 });
                 });
                 this.labels.forEach(function (label) {
                 this.labels.forEach(function (label) {
-                    label.translate(translation.x, translation.y);
+                    label.translate(translation_1.x, translation_1.y);
                 });
                 });
             }
             }
             this.redraw(false);
             this.redraw(false);

+ 16 - 15
node_modules/highcharts/es-modules/Extensions/Annotations/Mixins/MarkerMixin.js

@@ -49,7 +49,6 @@ var defaultMarkers = {
     arrow: {
     arrow: {
         tagName: 'marker',
         tagName: 'marker',
         attributes: {
         attributes: {
-            display: 'none',
             id: 'arrow',
             id: 'arrow',
             refY: 5,
             refY: 5,
             refX: 9,
             refX: 9,
@@ -73,7 +72,6 @@ var defaultMarkers = {
     'reverse-arrow': {
     'reverse-arrow': {
         tagName: 'marker',
         tagName: 'marker',
         attributes: {
         attributes: {
-            display: 'none',
             id: 'reverse-arrow',
             id: 'reverse-arrow',
             refY: 5,
             refY: 5,
             refX: 1,
             refX: 1,
@@ -96,9 +94,10 @@ SVGRenderer.prototype.addMarker = function (id, markerOptions) {
         stroke: markerOptions.color || 'none',
         stroke: markerOptions.color || 'none',
         fill: markerOptions.color || 'rgba(0, 0, 0, 0.75)'
         fill: markerOptions.color || 'rgba(0, 0, 0, 0.75)'
     };
     };
-    options.children = markerOptions.children.map(function (child) {
-        return merge(attrs, child);
-    });
+    options.children = (markerOptions.children &&
+        markerOptions.children.map(function (child) {
+            return merge(attrs, child);
+        }));
     var ast = merge(true, {
     var ast = merge(true, {
         attributes: {
         attributes: {
             markerWidth: 20,
             markerWidth: 20,
@@ -138,12 +137,11 @@ var markerMixin = {
         var itemOptions = item.options, chart = item.chart, defs = chart.options.defs, fill = itemOptions.fill, color = defined(fill) && fill !== 'none' ?
         var itemOptions = item.options, chart = item.chart, defs = chart.options.defs, fill = itemOptions.fill, color = defined(fill) && fill !== 'none' ?
             fill :
             fill :
             itemOptions.stroke, setMarker = function (markerType) {
             itemOptions.stroke, setMarker = function (markerType) {
-            var _a;
             var markerId = itemOptions[markerType], def, predefinedMarker, key, marker;
             var markerId = itemOptions[markerType], def, predefinedMarker, key, marker;
             if (markerId) {
             if (markerId) {
                 for (key in defs) { // eslint-disable-line guard-for-in
                 for (key in defs) { // eslint-disable-line guard-for-in
                     def = defs[key];
                     def = defs[key];
-                    if ((markerId === ((_a = def.attributes) === null || _a === void 0 ? void 0 : _a.id) ||
+                    if ((markerId === (def.attributes && def.attributes.id) ||
                         // Legacy, for
                         // Legacy, for
                         // unit-tests/annotations/annotations-shapes
                         // unit-tests/annotations/annotations-shapes
                         markerId === def.id) &&
                         markerId === def.id) &&
@@ -165,13 +163,16 @@ var markerMixin = {
 };
 };
 addEvent(Chart, 'afterGetContainer', function () {
 addEvent(Chart, 'afterGetContainer', function () {
     this.options.defs = merge(defaultMarkers, this.options.defs || {});
     this.options.defs = merge(defaultMarkers, this.options.defs || {});
-    objectEach(this.options.defs, function (def) {
-        var attributes = def.attributes;
-        if (def.tagName === 'marker' &&
-            attributes &&
-            attributes.display !== 'none') {
-            this.renderer.addMarker(attributes.id, def);
-        }
-    }, this);
+    // objectEach(this.options.defs, function (def): void {
+    //     const attributes = def.attributes;
+    //     if (
+    //         def.tagName === 'marker' &&
+    //         attributes &&
+    //         attributes.id &&
+    //         attributes.display !== 'none'
+    //     ) {
+    //         this.renderer.addMarker(attributes.id, def);
+    //     }
+    // }, this);
 });
 });
 export default markerMixin;
 export default markerMixin;

+ 1 - 1
node_modules/highcharts/es-modules/Extensions/Annotations/MockPoint.js

@@ -398,7 +398,7 @@ var MockPoint = /** @class */ (function () {
      */
      */
     MockPoint.prototype.rotate = function (cx, cy, radians) {
     MockPoint.prototype.rotate = function (cx, cy, radians) {
         if (!this.hasDynamicOptions()) {
         if (!this.hasDynamicOptions()) {
-            var cos = Math.cos(radians), sin = Math.sin(radians), x = this.plotX, y = this.plotY, tx, ty;
+            var cos = Math.cos(radians), sin = Math.sin(radians), x = this.plotX, y = this.plotY, tx = void 0, ty = void 0;
             x -= cx;
             x -= cx;
             y -= cy;
             y -= cy;
             tx = x * cos - y * sin;
             tx = x * cos - y * sin;

+ 175 - 78
node_modules/highcharts/es-modules/Extensions/Annotations/NavigationBindings.js

@@ -11,9 +11,13 @@
 import Annotation from './Annotations.js';
 import Annotation from './Annotations.js';
 import Chart from '../../Core/Chart/Chart.js';
 import Chart from '../../Core/Chart/Chart.js';
 import chartNavigationMixin from '../../Mixins/Navigation.js';
 import chartNavigationMixin from '../../Mixins/Navigation.js';
+import F from '../../Core/FormatUtilities.js';
+var format = F.format;
 import H from '../../Core/Globals.js';
 import H from '../../Core/Globals.js';
+import O from '../../Core/Options.js';
+var setOptions = O.setOptions;
 import U from '../../Core/Utilities.js';
 import U from '../../Core/Utilities.js';
-var addEvent = U.addEvent, attr = U.attr, extend = U.extend, format = U.format, fireEvent = U.fireEvent, isArray = U.isArray, isFunction = U.isFunction, isNumber = U.isNumber, isObject = U.isObject, merge = U.merge, objectEach = U.objectEach, pick = U.pick, setOptions = U.setOptions;
+var addEvent = U.addEvent, attr = U.attr, fireEvent = U.fireEvent, isArray = U.isArray, isFunction = U.isFunction, isNumber = U.isNumber, isObject = U.isObject, merge = U.merge, objectEach = U.objectEach, pick = U.pick;
 /**
 /**
  * A config object for navigation bindings in annotations.
  * A config object for navigation bindings in annotations.
  *
  *
@@ -68,6 +72,25 @@ function closestPolyfill(el, s) {
  * @interface bindingsUtils
  * @interface bindingsUtils
  */
  */
 var bindingsUtils = {
 var bindingsUtils = {
+    /**
+     * Get field type according to value
+     *
+     * @private
+     * @function Highcharts.NavigationBindingsUtilsObject.getFieldType
+     *
+     * @param {'boolean'|'number'|'string'} value
+     * Atomic type (one of: string, number, boolean)
+     *
+     * @return {'checkbox'|'number'|'text'}
+     * Field type (one of: text, number, checkbox)
+     */
+    getFieldType: function (value) {
+        return {
+            'string': 'text',
+            'number': 'number',
+            'boolean': 'checkbox'
+        }[typeof value];
+    },
     /**
     /**
      * Update size of background (rect) in some annotations: Measure, Simple
      * Update size of background (rect) in some annotations: Measure, Simple
      * Rect.
      * Rect.
@@ -82,34 +105,45 @@ var bindingsUtils = {
      * Annotation to be updated
      * Annotation to be updated
      */
      */
     updateRectSize: function (event, annotation) {
     updateRectSize: function (event, annotation) {
-        var chart = annotation.chart, options = annotation.options.typeOptions, coords = chart.pointer.getCoordinates(event), width = coords.xAxis[0].value - options.point.x, height = options.point.y - coords.yAxis[0].value;
-        annotation.update({
-            typeOptions: {
-                background: {
-                    width: chart.inverted ? height : width,
-                    height: chart.inverted ? width : height
+        var chart = annotation.chart, options = annotation.options.typeOptions, coords = chart.pointer.getCoordinates(event), coordsX = chart.navigationBindings.utils.getAssignedAxis(coords.xAxis), coordsY = chart.navigationBindings.utils.getAssignedAxis(coords.yAxis), width, height;
+        if (coordsX && coordsY) {
+            width = coordsX.value - options.point.x;
+            height = options.point.y - coordsY.value;
+            annotation.update({
+                typeOptions: {
+                    background: {
+                        width: chart.inverted ? height : width,
+                        height: chart.inverted ? width : height
+                    }
                 }
                 }
-            }
-        });
+            });
+        }
     },
     },
     /**
     /**
-     * Get field type according to value
+     * Returns the first xAxis or yAxis that was clicked with its value.
      *
      *
      * @private
      * @private
-     * @function Highcharts.NavigationBindingsUtilsObject.getFieldType
+     * @function Highcharts.NavigationBindingsUtilsObject#getAssignedAxis
      *
      *
-     * @param {'boolean'|'number'|'string'} value
-     * Atomic type (one of: string, number, boolean)
+     * @param {Array<Highcharts.PointerAxisCoordinateObject>} coords
+     *        All the chart's x or y axes with a current pointer's axis value.
      *
      *
-     * @return {'checkbox'|'number'|'text'}
-     * Field type (one of: text, number, checkbox)
+     * @return {Highcharts.PointerAxisCoordinateObject}
+     *         Object with a first found axis and its value that pointer
+     *         is currently pointing.
      */
      */
-    getFieldType: function (value) {
-        return {
-            'string': 'text',
-            'number': 'number',
-            'boolean': 'checkbox'
-        }[typeof value];
+    getAssignedAxis: function (coords) {
+        return coords.filter(function (coord) {
+            var axisMin = coord.axis.min, axisMax = coord.axis.max, 
+            // Correct axis edges when axis has series
+            // with pointRange (like column)
+            minPointOffset = pick(coord.axis.minPointOffset, 0);
+            return isNumber(axisMin) && isNumber(axisMax) &&
+                coord.value >= (axisMin - minPointOffset) &&
+                coord.value <= (axisMax + minPointOffset) &&
+                // don't count navigator axis
+                !coord.axis.options.isInternal;
+        })[0]; // If the axes overlap, return the first axis that was found.
     }
     }
 };
 };
 /**
 /**
@@ -167,7 +201,7 @@ var NavigationBindings = /** @class */ (function () {
         [].forEach.call(bindingsContainer, function (subContainer) {
         [].forEach.call(bindingsContainer, function (subContainer) {
             navigation.eventsToUnbind.push(addEvent(subContainer, 'click', function (event) {
             navigation.eventsToUnbind.push(addEvent(subContainer, 'click', function (event) {
                 var bindings = navigation.getButtonEvents(subContainer, event);
                 var bindings = navigation.getButtonEvents(subContainer, event);
-                if (bindings) {
+                if (bindings && bindings.button.className.indexOf('highcharts-disabled-btn') === -1) {
                     navigation.bindingsButtonClick(bindings.button, bindings.events, event);
                     navigation.bindingsButtonClick(bindings.button, bindings.events, event);
                 }
                 }
             }));
             }));
@@ -179,7 +213,9 @@ var NavigationBindings = /** @class */ (function () {
         });
         });
         navigation.eventsToUnbind.push(addEvent(chart.container, 'click', function (e) {
         navigation.eventsToUnbind.push(addEvent(chart.container, 'click', function (e) {
             if (!chart.cancelClick &&
             if (!chart.cancelClick &&
-                chart.isInsidePlot(e.chartX - chart.plotLeft, e.chartY - chart.plotTop)) {
+                chart.isInsidePlot(e.chartX - chart.plotLeft, e.chartY - chart.plotTop, {
+                    visiblePlotOnly: true
+                })) {
                 navigation.bindingsChartClick(this, e);
                 navigation.bindingsChartClick(this, e);
             }
             }
         }));
         }));
@@ -254,7 +290,8 @@ var NavigationBindings = /** @class */ (function () {
      *        Browser's click event.
      *        Browser's click event.
      */
      */
     NavigationBindings.prototype.bindingsChartClick = function (chart, clickEvent) {
     NavigationBindings.prototype.bindingsChartClick = function (chart, clickEvent) {
-        var navigation = this, chart = navigation.chart, selectedButton = navigation.selectedButton, svgContainer = chart.renderer.boxWrapper;
+        chart = this.chart;
+        var navigation = this, selectedButton = navigation.selectedButton, svgContainer = chart.renderer.boxWrapper;
         // Click outside popups, should close them and deselect the annotation
         // Click outside popups, should close them and deselect the annotation
         if (navigation.activeAnnotation &&
         if (navigation.activeAnnotation &&
             !clickEvent.activeAnnotation &&
             !clickEvent.activeAnnotation &&
@@ -271,7 +308,7 @@ var NavigationBindings = /** @class */ (function () {
             // Call init method:
             // Call init method:
             navigation.currentUserDetails = selectedButton.start.call(navigation, clickEvent);
             navigation.currentUserDetails = selectedButton.start.call(navigation, clickEvent);
             // If steps exists (e.g. Annotations), bind them:
             // If steps exists (e.g. Annotations), bind them:
-            if (selectedButton.steps) {
+            if (navigation.currentUserDetails && selectedButton.steps) {
                 navigation.stepIndex = 0;
                 navigation.stepIndex = 0;
                 navigation.steps = true;
                 navigation.steps = true;
                 navigation.mouseMoveEvent = navigation.nextEvent =
                 navigation.mouseMoveEvent = navigation.nextEvent =
@@ -674,10 +711,10 @@ function selectableAnnotation(annotationType) {
     /**
     /**
      * @private
      * @private
      */
      */
-    function selectAndshowPopup(event) {
+    function selectAndShowPopup(eventArguments) {
         var annotation = this, navigation = annotation.chart.navigationBindings, prevAnnotation = navigation.activeAnnotation;
         var annotation = this, navigation = annotation.chart.navigationBindings, prevAnnotation = navigation.activeAnnotation;
         if (originalClick) {
         if (originalClick) {
-            originalClick.call(annotation, event);
+            originalClick.call(annotation, eventArguments);
         }
         }
         if (prevAnnotation !== annotation) {
         if (prevAnnotation !== annotation) {
             // Select current:
             // Select current:
@@ -716,10 +753,10 @@ function selectableAnnotation(annotationType) {
             fireEvent(navigation, 'closePopup');
             fireEvent(navigation, 'closePopup');
         }
         }
         // Let bubble event to chart.click:
         // Let bubble event to chart.click:
-        event.activeAnnotation = true;
+        eventArguments.activeAnnotation = true;
     }
     }
     merge(true, annotationType.prototype.defaultOptions.events, {
     merge(true, annotationType.prototype.defaultOptions.events, {
-        click: selectAndshowPopup
+        click: selectAndShowPopup
     });
     });
 }
 }
 if (H.Annotation) {
 if (H.Annotation) {
@@ -816,7 +853,7 @@ setOptions({
          *
          *
          * @type         {Highcharts.Dictionary<Highcharts.NavigationBindingsOptionsObject>|*}
          * @type         {Highcharts.Dictionary<Highcharts.NavigationBindingsOptionsObject>|*}
          * @sample       stock/stocktools/stocktools-thresholds
          * @sample       stock/stocktools/stocktools-thresholds
-         *               Custom bindings in Highstock
+         *               Custom bindings in Highcharts Stock
          * @since        7.0.0
          * @since        7.0.0
          * @product      highcharts highstock
          * @product      highcharts highstock
          */
          */
@@ -833,17 +870,21 @@ setOptions({
                 className: 'highcharts-circle-annotation',
                 className: 'highcharts-circle-annotation',
                 /** @ignore-option */
                 /** @ignore-option */
                 start: function (e) {
                 start: function (e) {
-                    var coords = this.chart.pointer.getCoordinates(e), navigation = this.chart.options.navigation;
+                    var coords = this.chart.pointer.getCoordinates(e), coordsX = this.utils.getAssignedAxis(coords.xAxis), coordsY = this.utils.getAssignedAxis(coords.yAxis), navigation = this.chart.options.navigation;
+                    // Exit if clicked out of axes area
+                    if (!coordsX || !coordsY) {
+                        return;
+                    }
                     return this.chart.addAnnotation(merge({
                     return this.chart.addAnnotation(merge({
                         langKey: 'circle',
                         langKey: 'circle',
                         type: 'basicAnnotation',
                         type: 'basicAnnotation',
                         shapes: [{
                         shapes: [{
                                 type: 'circle',
                                 type: 'circle',
                                 point: {
                                 point: {
-                                    xAxis: 0,
-                                    yAxis: 0,
-                                    x: coords.xAxis[0].value,
-                                    y: coords.yAxis[0].value
+                                    x: coordsX.value,
+                                    y: coordsY.value,
+                                    xAxis: coordsX.axis.options.index,
+                                    yAxis: coordsY.axis.options.index
                                 },
                                 },
                                 r: 5
                                 r: 5
                             }]
                             }]
@@ -856,8 +897,17 @@ setOptions({
                 /** @ignore-option */
                 /** @ignore-option */
                 steps: [
                 steps: [
                     function (e, annotation) {
                     function (e, annotation) {
-                        var point = annotation.options.shapes[0].point, x = this.chart.xAxis[0].toPixels(point.x), y = this.chart.yAxis[0].toPixels(point.y), inverted = this.chart.inverted, distance = Math.max(Math.sqrt(Math.pow(inverted ? y - e.chartX : x - e.chartX, 2) +
-                            Math.pow(inverted ? x - e.chartY : y - e.chartY, 2)), 5);
+                        var mockPointOpts = annotation.options.shapes[0]
+                            .point, inverted = this.chart.inverted, x, y, distance;
+                        if (isNumber(mockPointOpts.xAxis) &&
+                            isNumber(mockPointOpts.yAxis)) {
+                            x = this.chart.xAxis[mockPointOpts.xAxis]
+                                .toPixels(mockPointOpts.x);
+                            y = this.chart.yAxis[mockPointOpts.yAxis]
+                                .toPixels(mockPointOpts.y);
+                            distance = Math.max(Math.sqrt(Math.pow(inverted ? y - e.chartX : x - e.chartX, 2) +
+                                Math.pow(inverted ? x - e.chartY : y - e.chartY, 2)), 5);
+                        }
                         annotation.update({
                         annotation.update({
                             shapes: [{
                             shapes: [{
                                     r: distance
                                     r: distance
@@ -878,33 +928,23 @@ setOptions({
                 className: 'highcharts-rectangle-annotation',
                 className: 'highcharts-rectangle-annotation',
                 /** @ignore-option */
                 /** @ignore-option */
                 start: function (e) {
                 start: function (e) {
-                    var coords = this.chart.pointer.getCoordinates(e), navigation = this.chart.options.navigation, x = coords.xAxis[0].value, y = coords.yAxis[0].value;
+                    var coords = this.chart.pointer.getCoordinates(e), coordsX = this.utils.getAssignedAxis(coords.xAxis), coordsY = this.utils.getAssignedAxis(coords.yAxis);
+                    // Exit if clicked out of axes area
+                    if (!coordsX || !coordsY) {
+                        return;
+                    }
+                    var x = coordsX.value, y = coordsY.value, xAxis = coordsX.axis.options.index, yAxis = coordsY.axis.options.index, navigation = this.chart.options.navigation;
                     return this.chart.addAnnotation(merge({
                     return this.chart.addAnnotation(merge({
                         langKey: 'rectangle',
                         langKey: 'rectangle',
                         type: 'basicAnnotation',
                         type: 'basicAnnotation',
                         shapes: [{
                         shapes: [{
                                 type: 'path',
                                 type: 'path',
-                                points: [{
-                                        xAxis: 0,
-                                        yAxis: 0,
-                                        x: x,
-                                        y: y
-                                    }, {
-                                        xAxis: 0,
-                                        yAxis: 0,
-                                        x: x,
-                                        y: y
-                                    }, {
-                                        xAxis: 0,
-                                        yAxis: 0,
-                                        x: x,
-                                        y: y
-                                    }, {
-                                        xAxis: 0,
-                                        yAxis: 0,
-                                        x: x,
-                                        y: y
-                                    }]
+                                points: [
+                                    { xAxis: xAxis, yAxis: yAxis, x: x, y: y },
+                                    { xAxis: xAxis, yAxis: yAxis, x: x, y: y },
+                                    { xAxis: xAxis, yAxis: yAxis, x: x, y: y },
+                                    { xAxis: xAxis, yAxis: yAxis, x: x, y: y }
+                                ]
                             }]
                             }]
                     }, navigation
                     }, navigation
                         .annotationsOptions, navigation
                         .annotationsOptions, navigation
@@ -915,19 +955,23 @@ setOptions({
                 /** @ignore-option */
                 /** @ignore-option */
                 steps: [
                 steps: [
                     function (e, annotation) {
                     function (e, annotation) {
-                        var points = annotation.options.shapes[0].points, coords = this.chart.pointer.getCoordinates(e), x = coords.xAxis[0].value, y = coords.yAxis[0].value;
-                        // Top right point
-                        points[1].x = x;
-                        // Bottom right point (cursor position)
-                        points[2].x = x;
-                        points[2].y = y;
-                        // Bottom left
-                        points[3].y = y;
-                        annotation.update({
-                            shapes: [{
-                                    points: points
-                                }]
-                        });
+                        var points = annotation.options.shapes[0].points, coords = this.chart.pointer.getCoordinates(e), coordsX = this.utils.getAssignedAxis(coords.xAxis), coordsY = this.utils.getAssignedAxis(coords.yAxis), x, y;
+                        if (coordsX && coordsY) {
+                            x = coordsX.value;
+                            y = coordsY.value;
+                            // Top right point
+                            points[1].x = x;
+                            // Bottom right point (cursor position)
+                            points[2].x = x;
+                            points[2].y = y;
+                            // Bottom left
+                            points[3].y = y;
+                            annotation.update({
+                                shapes: [{
+                                        points: points
+                                    }]
+                            });
+                        }
                     }
                     }
                 ]
                 ]
             },
             },
@@ -942,7 +986,11 @@ setOptions({
                 className: 'highcharts-label-annotation',
                 className: 'highcharts-label-annotation',
                 /** @ignore-option */
                 /** @ignore-option */
                 start: function (e) {
                 start: function (e) {
-                    var coords = this.chart.pointer.getCoordinates(e), navigation = this.chart.options.navigation;
+                    var coords = this.chart.pointer.getCoordinates(e), coordsX = this.utils.getAssignedAxis(coords.xAxis), coordsY = this.utils.getAssignedAxis(coords.yAxis), navigation = this.chart.options.navigation;
+                    // Exit if clicked out of axes area
+                    if (!coordsX || !coordsY) {
+                        return;
+                    }
                     return this.chart.addAnnotation(merge({
                     return this.chart.addAnnotation(merge({
                         langKey: 'label',
                         langKey: 'label',
                         type: 'basicAnnotation',
                         type: 'basicAnnotation',
@@ -951,10 +999,10 @@ setOptions({
                         },
                         },
                         labels: [{
                         labels: [{
                                 point: {
                                 point: {
-                                    xAxis: 0,
-                                    yAxis: 0,
-                                    x: coords.xAxis[0].value,
-                                    y: coords.yAxis[0].value
+                                    xAxis: coordsX.axis.options.index,
+                                    yAxis: coordsY.axis.options.index,
+                                    x: coordsX.value,
+                                    y: coordsY.value
                                 },
                                 },
                                 overflow: 'none',
                                 overflow: 'none',
                                 crop: true
                                 crop: true
@@ -972,7 +1020,7 @@ setOptions({
          * from a different server.
          * from a different server.
          *
          *
          * @type      {string}
          * @type      {string}
-         * @default   https://code.highcharts.com/9.0.1/gfx/stock-icons/
+         * @default   https://code.highcharts.com/9.1.0/gfx/stock-icons/
          * @since     7.1.3
          * @since     7.1.3
          * @apioption navigation.iconsURL
          * @apioption navigation.iconsURL
          */
          */
@@ -1037,6 +1085,55 @@ setOptions({
         }
         }
     }
     }
 });
 });
+addEvent(H.Chart, 'render', function () {
+    var chart = this, navigationBindings = chart.navigationBindings, disabledClassName = 'highcharts-disabled-btn';
+    if (chart && navigationBindings) {
+        // Check if the buttons should be enabled/disabled based on
+        // visible series.
+        var buttonsEnabled_1 = false;
+        chart.series.forEach(function (series) {
+            if (!series.options.isInternal && series.visible) {
+                buttonsEnabled_1 = true;
+            }
+        });
+        objectEach(navigationBindings.boundClassNames, function (value, key) {
+            if (chart.navigationBindings &&
+                chart.navigationBindings.container &&
+                chart.navigationBindings.container[0]) {
+                // Get the HTML element coresponding to the
+                // className taken from StockToolsBindings.
+                var buttonNode = chart.navigationBindings.container[0].querySelectorAll('.' + key);
+                if (buttonNode) {
+                    if (value.noDataState === 'normal') {
+                        buttonNode.forEach(function (button) {
+                            // If button has noDataState: 'normal',
+                            // and has disabledClassName,
+                            // remove this className.
+                            if (button.className.indexOf(disabledClassName) !== -1) {
+                                button.classList.remove(disabledClassName);
+                            }
+                        });
+                    }
+                    else if (!buttonsEnabled_1) {
+                        buttonNode.forEach(function (button) {
+                            if (button.className.indexOf(disabledClassName) === -1) {
+                                button.className += ' ' + disabledClassName;
+                            }
+                        });
+                    }
+                    else {
+                        buttonNode.forEach(function (button) {
+                            // Enable all buttons by deleting the className.
+                            if (button.className.indexOf(disabledClassName) !== -1) {
+                                button.classList.remove(disabledClassName);
+                            }
+                        });
+                    }
+                }
+            }
+        });
+    }
+});
 addEvent(NavigationBindings, 'closePopup', function () {
 addEvent(NavigationBindings, 'closePopup', function () {
     this.deselectAnnotation();
     this.deselectAnnotation();
 });
 });

+ 41 - 45
node_modules/highcharts/es-modules/Extensions/Annotations/Popup.js

@@ -10,11 +10,13 @@
  *
  *
  * */
  * */
 import H from '../../Core/Globals.js';
 import H from '../../Core/Globals.js';
-var isFirefox = H.isFirefox;
+var doc = H.doc, isFirefox = H.isFirefox;
 import NavigationBindings from './NavigationBindings.js';
 import NavigationBindings from './NavigationBindings.js';
+import O from '../../Core/Options.js';
+var getOptions = O.getOptions;
 import Pointer from '../../Core/Pointer.js';
 import Pointer from '../../Core/Pointer.js';
 import U from '../../Core/Utilities.js';
 import U from '../../Core/Utilities.js';
-var addEvent = U.addEvent, createElement = U.createElement, defined = U.defined, fireEvent = U.fireEvent, getOptions = U.getOptions, isArray = U.isArray, isObject = U.isObject, isString = U.isString, objectEach = U.objectEach, pick = U.pick, stableSort = U.stableSort, wrap = U.wrap;
+var addEvent = U.addEvent, createElement = U.createElement, defined = U.defined, fireEvent = U.fireEvent, isArray = U.isArray, isObject = U.isObject, isString = U.isString, objectEach = U.objectEach, pick = U.pick, stableSort = U.stableSort, wrap = U.wrap;
 var indexFilter = /\d/g, PREFIX = 'highcharts-', DIV = 'div', INPUT = 'input', LABEL = 'label', BUTTON = 'button', SELECT = 'select', OPTION = 'option', SPAN = 'span', UL = 'ul', LI = 'li', H3 = 'h3';
 var indexFilter = /\d/g, PREFIX = 'highcharts-', DIV = 'div', INPUT = 'input', LABEL = 'label', BUTTON = 'button', SELECT = 'select', OPTION = 'option', SPAN = 'span', UL = 'ul', LI = 'li', H3 = 'h3';
 /* eslint-disable no-invalid-this, valid-jsdoc */
 /* eslint-disable no-invalid-this, valid-jsdoc */
 // onContainerMouseDown blocks internal popup events, due to e.preventDefault.
 // onContainerMouseDown blocks internal popup events, due to e.preventDefault.
@@ -113,9 +115,8 @@ H.Popup.prototype = {
         if (!inputName.match(indexFilter)) {
         if (!inputName.match(indexFilter)) {
             // add label
             // add label
             createElement(LABEL, {
             createElement(LABEL, {
-                innerHTML: lang[optionName] || optionName,
                 htmlFor: inputName
                 htmlFor: inputName
-            }, null, parentDiv);
+            }, void 0, parentDiv).appendChild(doc.createTextNode(lang[optionName] || optionName));
         }
         }
         // add input
         // add input
         createElement(INPUT, {
         createElement(INPUT, {
@@ -123,7 +124,7 @@ H.Popup.prototype = {
             value: value[0],
             value: value[0],
             type: value[1],
             type: value[1],
             className: PREFIX + 'popup-field'
             className: PREFIX + 'popup-field'
-        }, null, parentDiv).setAttribute(PREFIX + 'data-name', option);
+        }, void 0, parentDiv).setAttribute(PREFIX + 'data-name', option);
     },
     },
     /**
     /**
      * Create button.
      * Create button.
@@ -143,9 +144,8 @@ H.Popup.prototype = {
      */
      */
     addButton: function (parentDiv, label, type, callback, fieldsDiv) {
     addButton: function (parentDiv, label, type, callback, fieldsDiv) {
         var _self = this, closePopup = this.closePopup, getFields = this.getFields, button;
         var _self = this, closePopup = this.closePopup, getFields = this.getFields, button;
-        button = createElement(BUTTON, {
-            innerHTML: label
-        }, null, parentDiv);
+        button = createElement(BUTTON, void 0, void 0, parentDiv);
+        button.appendChild(doc.createTextNode(label));
         ['click', 'touchstart'].forEach(function (eventName) {
         ['click', 'touchstart'].forEach(function (eventName) {
             addEvent(button, eventName, function () {
             addEvent(button, eventName, function () {
                 closePopup.call(_self);
                 closePopup.call(_self);
@@ -269,13 +269,11 @@ H.Popup.prototype = {
             // set position
             // set position
             popupDiv.style.top = chart.plotTop + 10 + 'px';
             popupDiv.style.top = chart.plotTop + 10 + 'px';
             // create label
             // create label
-            createElement(SPAN, {
-                innerHTML: pick(
-                // Advanced annotations:
-                lang[options.langKey] || options.langKey, 
-                // Basic shapes:
-                options.shapes && options.shapes[0].type)
-            }, null, popupDiv);
+            createElement(SPAN, void 0, void 0, popupDiv).appendChild(doc.createTextNode(pick(
+            // Advanced annotations:
+            lang[options.langKey] || options.langKey, 
+            // Basic shapes:
+            options.shapes && options.shapes[0].type)));
             // add buttons
             // add buttons
             button = this.addButton(popupDiv, lang.removeButton || 'remove', 'remove', callback, popupDiv);
             button = this.addButton(popupDiv, lang.removeButton || 'remove', 'remove', callback, popupDiv);
             button.className += ' ' + PREFIX + 'annotation-remove-button';
             button.className += ' ' + PREFIX + 'annotation-remove-button';
@@ -305,9 +303,9 @@ H.Popup.prototype = {
             var popupDiv = this.popup.container, lang = this.lang, bottomRow, lhsCol;
             var popupDiv = this.popup.container, lang = this.lang, bottomRow, lhsCol;
             // create title of annotations
             // create title of annotations
             lhsCol = createElement('h2', {
             lhsCol = createElement('h2', {
-                innerHTML: lang[options.langKey] || options.langKey,
                 className: PREFIX + 'popup-main-title'
                 className: PREFIX + 'popup-main-title'
-            }, null, popupDiv);
+            }, void 0, popupDiv);
+            lhsCol.appendChild(doc.createTextNode(lang[options.langKey] || options.langKey || ''));
             // left column
             // left column
             lhsCol = createElement(DIV, {
             lhsCol = createElement(DIV, {
                 className: PREFIX + 'popup-lhs-col ' + PREFIX + 'popup-lhs-full'
                 className: PREFIX + 'popup-lhs-col ' + PREFIX + 'popup-lhs-full'
@@ -379,9 +377,8 @@ H.Popup.prototype = {
                 storage.forEach(function (genInput) {
                 storage.forEach(function (genInput) {
                     if (genInput[0] === true) {
                     if (genInput[0] === true) {
                         createElement(SPAN, {
                         createElement(SPAN, {
-                            className: PREFIX + 'annotation-title',
-                            innerHTML: genInput[1]
-                        }, null, genInput[2]);
+                            className: PREFIX + 'annotation-title'
+                        }, void 0, genInput[2]).appendChild(doc.createTextNode(genInput[1]));
                     }
                     }
                     else {
                     else {
                         addInput.apply(genInput[0], genInput.splice(1));
                         addInput.apply(genInput[0], genInput.splice(1));
@@ -437,19 +434,19 @@ H.Popup.prototype = {
                 var seriesOptions = serie.options;
                 var seriesOptions = serie.options;
                 if (serie.params ||
                 if (serie.params ||
                     seriesOptions && seriesOptions.params) {
                     seriesOptions && seriesOptions.params) {
-                    var indicatorNameType = _self.indicators.getNameType(serie, value), indicatorType = indicatorNameType.type;
+                    var indicatorNameType_1 = _self.indicators.getNameType(serie, value), indicatorType_1 = indicatorNameType_1.type;
                     item = createElement(LI, {
                     item = createElement(LI, {
-                        className: PREFIX + 'indicator-list',
-                        innerHTML: indicatorNameType.name
-                    }, null, indicatorList);
+                        className: PREFIX + 'indicator-list'
+                    }, void 0, indicatorList);
+                    item.appendChild(doc.createTextNode(indicatorNameType_1.name));
                     ['click', 'touchstart'].forEach(function (eventName) {
                     ['click', 'touchstart'].forEach(function (eventName) {
                         addEvent(item, eventName, function () {
                         addEvent(item, eventName, function () {
-                            addFormFields.call(_self, chart, isEdit ? serie : series[indicatorType], indicatorNameType.type, rhsColWrapper);
+                            addFormFields.call(_self, chart, isEdit ? serie : series[indicatorType_1], indicatorNameType_1.type, rhsColWrapper);
                             // add hidden input with series.id
                             // add hidden input with series.id
                             if (isEdit && serie.options) {
                             if (isEdit && serie.options) {
                                 createElement(INPUT, {
                                 createElement(INPUT, {
                                     type: 'hidden',
                                     type: 'hidden',
-                                    name: PREFIX + 'id-' + indicatorType,
+                                    name: PREFIX + 'id-' + indicatorType_1,
                                     value: serie.options.id
                                     value: serie.options.id
                                 }, null, rhsColWrapper)
                                 }, null, rhsColWrapper)
                                     .setAttribute(PREFIX + 'data-series-id', serie.options.id);
                                     .setAttribute(PREFIX + 'data-series-id', serie.options.id);
@@ -505,9 +502,8 @@ H.Popup.prototype = {
         listAllSeries: function (type, optionName, chart, parentDiv, selectedOption) {
         listAllSeries: function (type, optionName, chart, parentDiv, selectedOption) {
             var selectName = PREFIX + optionName + '-type-' + type, lang = this.lang, selectBox, seriesOptions;
             var selectName = PREFIX + optionName + '-type-' + type, lang = this.lang, selectBox, seriesOptions;
             createElement(LABEL, {
             createElement(LABEL, {
-                innerHTML: lang[optionName] || optionName,
                 htmlFor: selectName
                 htmlFor: selectName
-            }, null, parentDiv);
+            }, null, parentDiv).appendChild(doc.createTextNode(lang[optionName] || optionName));
             // select type
             // select type
             selectBox = createElement(SELECT, {
             selectBox = createElement(SELECT, {
                 name: selectName,
                 name: selectName,
@@ -521,9 +517,8 @@ H.Popup.prototype = {
                     seriesOptions.id &&
                     seriesOptions.id &&
                     seriesOptions.id !== PREFIX + 'navigator-series') {
                     seriesOptions.id !== PREFIX + 'navigator-series') {
                     createElement(OPTION, {
                     createElement(OPTION, {
-                        innerHTML: seriesOptions.name || seriesOptions.id,
                         value: seriesOptions.id
                         value: seriesOptions.id
-                    }, null, selectBox);
+                    }, null, selectBox).appendChild(doc.createTextNode(seriesOptions.name || seriesOptions.id));
                 }
                 }
             });
             });
             if (defined(selectedOption)) {
             if (defined(selectedOption)) {
@@ -552,9 +547,8 @@ H.Popup.prototype = {
             rhsColWrapper.innerHTML = '';
             rhsColWrapper.innerHTML = '';
             // create title (indicator name in the right column)
             // create title (indicator name in the right column)
             createElement(H3, {
             createElement(H3, {
-                className: PREFIX + 'indicator-title',
-                innerHTML: getNameType(series, seriesType).name
-            }, null, rhsColWrapper);
+                className: PREFIX + 'indicator-title'
+            }, void 0, rhsColWrapper).appendChild(doc.createTextNode(getNameType(series, seriesType).name));
             // input type
             // input type
             createElement(INPUT, {
             createElement(INPUT, {
                 type: 'hidden',
                 type: 'hidden',
@@ -590,14 +584,16 @@ H.Popup.prototype = {
             objectEach(fields, function (value, fieldName) {
             objectEach(fields, function (value, fieldName) {
                 // create name like params.styles.fontSize
                 // create name like params.styles.fontSize
                 parentFullName = parentNode + '.' + fieldName;
                 parentFullName = parentNode + '.' + fieldName;
-                if (isObject(value)) {
-                    addParamInputs.call(_self, chart, parentFullName, value, type, parentDiv);
-                }
-                else if (
-                // skip volume field which is created by addFormFields
-                parentFullName !== 'params.volumeSeriesID') {
-                    addInput.call(_self, parentFullName, type, parentDiv, [value, 'text'] // all inputs are text type
-                    );
+                if (value !== void 0) { // skip if field is unnecessary, #15362
+                    if (isObject(value)) {
+                        addParamInputs.call(_self, chart, parentFullName, value, type, parentDiv);
+                    }
+                    else if (
+                    // skip volume field which is created by addFormFields
+                    parentFullName !== 'params.volumeSeriesID') {
+                        addInput.call(_self, parentFullName, type, parentDiv, [value, 'text'] // all inputs are text type
+                        );
+                    }
                 }
                 }
             });
             });
         },
         },
@@ -654,9 +650,9 @@ H.Popup.prototype = {
             }
             }
             // tab 1
             // tab 1
             menuItem = createElement(SPAN, {
             menuItem = createElement(SPAN, {
-                innerHTML: lang[tabName + 'Button'] || tabName,
                 className: className
                 className: className
-            }, null, popupDiv);
+            }, void 0, popupDiv);
+            menuItem.appendChild(doc.createTextNode(lang[tabName + 'Button'] || tabName));
             menuItem.setAttribute(PREFIX + 'data-tab-type', tabName);
             menuItem.setAttribute(PREFIX + 'data-tab-type', tabName);
             return menuItem;
             return menuItem;
         },
         },
@@ -668,7 +664,7 @@ H.Popup.prototype = {
         addContentItem: function () {
         addContentItem: function () {
             var popupDiv = this.popup.container;
             var popupDiv = this.popup.container;
             return createElement(DIV, {
             return createElement(DIV, {
-                className: PREFIX + 'tab-item-content'
+                className: PREFIX + 'tab-item-content ' + PREFIX + 'no-mousewheel' // #12100
             }, null, popupDiv);
             }, null, popupDiv);
         },
         },
         /**
         /**
@@ -726,7 +722,7 @@ addEvent(NavigationBindings, 'showPopup', function (config) {
         this.popup = new H.Popup(this.chart.container, (this.chart.options.navigation.iconsURL ||
         this.popup = new H.Popup(this.chart.container, (this.chart.options.navigation.iconsURL ||
             (this.chart.options.stockTools &&
             (this.chart.options.stockTools &&
                 this.chart.options.stockTools.gui.iconsURL) ||
                 this.chart.options.stockTools.gui.iconsURL) ||
-            'https://code.highcharts.com/9.0.1/gfx/stock-icons/'), this.chart);
+            'https://code.highcharts.com/9.1.0/gfx/stock-icons/'), this.chart);
     }
     }
     this.popup.showForm(config.formType, this.chart, config.options, config.onSubmit);
     this.popup.showForm(config.formType, this.chart, config.options, config.onSubmit);
 });
 });

+ 3 - 1
node_modules/highcharts/es-modules/Extensions/Annotations/Types/CrookedLine.js

@@ -155,7 +155,9 @@ CrookedLine.prototype.defaultOptions = merge(Annotation.prototype.defaultOptions
         },
         },
         events: {
         events: {
             drag: function (e, target) {
             drag: function (e, target) {
-                if (target.chart.isInsidePlot(e.chartX - target.chart.plotLeft, e.chartY - target.chart.plotTop)) {
+                if (target.chart.isInsidePlot(e.chartX - target.chart.plotLeft, e.chartY - target.chart.plotTop, {
+                    visiblePlotOnly: true
+                })) {
                     var translation = this.mouseMoveToTranslation(e);
                     var translation = this.mouseMoveToTranslation(e);
                     target.translatePoint(translation.x, translation.y, this.index);
                     target.translatePoint(translation.x, translation.y, this.index);
                     // Update options:
                     // Update options:

+ 6 - 3
node_modules/highcharts/es-modules/Extensions/Annotations/Types/Fibonacci.js

@@ -21,6 +21,7 @@ import Annotation from '../Annotations.js';
 import MockPoint from '../MockPoint.js';
 import MockPoint from '../MockPoint.js';
 import Tunnel from './Tunnel.js';
 import Tunnel from './Tunnel.js';
 import U from '../../../Core/Utilities.js';
 import U from '../../../Core/Utilities.js';
+import palette from '../../../Core/Color/Palette.js';
 var merge = U.merge;
 var merge = U.merge;
 /* eslint-disable no-invalid-this, valid-jsdoc */
 /* eslint-disable no-invalid-this, valid-jsdoc */
 var createPathDGenerator = function (retracementIndex, isBackground) {
 var createPathDGenerator = function (retracementIndex, isBackground) {
@@ -85,14 +86,16 @@ var Fibonacci = /** @class */ (function (_super) {
     };
     };
     Fibonacci.prototype.addShapes = function () {
     Fibonacci.prototype.addShapes = function () {
         Fibonacci.levels.forEach(function (_level, i) {
         Fibonacci.levels.forEach(function (_level, i) {
+            var _a = this.options.typeOptions, backgroundColors = _a.backgroundColors, lineColor = _a.lineColor, lineColors = _a.lineColors;
             this.initShape({
             this.initShape({
                 type: 'path',
                 type: 'path',
-                d: createPathDGenerator(i)
+                d: createPathDGenerator(i),
+                stroke: lineColors[i] || lineColor
             }, false);
             }, false);
             if (i > 0) {
             if (i > 0) {
                 this.initShape({
                 this.initShape({
                     type: 'path',
                     type: 'path',
-                    fill: this.options.typeOptions.backgroundColors[i - 1],
+                    fill: backgroundColors[i - 1],
                     strokeWidth: 0,
                     strokeWidth: 0,
                     d: createPathDGenerator(i, true)
                     d: createPathDGenerator(i, true)
                 });
                 });
@@ -161,7 +164,7 @@ Fibonacci.prototype.defaultOptions = merge(Tunnel.prototype.defaultOptions,
         /**
         /**
          * The color of line.
          * The color of line.
          */
          */
-        lineColor: 'grey',
+        lineColor: palette.neutralColor40,
         /**
         /**
          * An array of colors for the lines.
          * An array of colors for the lines.
          */
          */

+ 13 - 20
node_modules/highcharts/es-modules/Extensions/Annotations/Types/InfinityLine.js

@@ -41,26 +41,15 @@ var InfinityLine = /** @class */ (function (_super) {
     InfinityLine.edgePoint = function (startIndex, endIndex) {
     InfinityLine.edgePoint = function (startIndex, endIndex) {
         return function (target) {
         return function (target) {
             var annotation = target.annotation, points = annotation.points, type = annotation.options.typeOptions.type;
             var annotation = target.annotation, points = annotation.points, type = annotation.options.typeOptions.type;
-            if (type === 'horizontalLine') {
-                // Horizontal line has only one point,
+            if (type === 'horizontalLine' || type === 'verticalLine') {
+                // Horizontal and vertical lines have only one point,
                 // make a copy of it:
                 // make a copy of it:
                 points = [
                 points = [
                     points[0],
                     points[0],
                     new MockPoint(annotation.chart, points[0].target, {
                     new MockPoint(annotation.chart, points[0].target, {
-                        x: points[0].x + 1,
-                        y: points[0].y,
-                        xAxis: points[0].options.xAxis,
-                        yAxis: points[0].options.yAxis
-                    })
-                ];
-            }
-            else if (type === 'verticalLine') {
-                // The same for verticalLine type:
-                points = [
-                    points[0],
-                    new MockPoint(annotation.chart, points[0].target, {
-                        x: points[0].x,
-                        y: points[0].y + 1,
+                        // add 0 or 1 to x or y depending on type
+                        x: points[0].x + +(type === 'horizontalLine'),
+                        y: points[0].y + +(type === 'verticalLine'),
                         xAxis: points[0].options.xAxis,
                         xAxis: points[0].options.xAxis,
                         yAxis: points[0].options.yAxis
                         yAxis: points[0].options.yAxis
                     })
                     })
@@ -79,7 +68,7 @@ var InfinityLine = /** @class */ (function (_super) {
             firstPoint[xOrY]);
             firstPoint[xOrY]);
     };
     };
     InfinityLine.findEdgePoint = function (firstPoint, secondPoint) {
     InfinityLine.findEdgePoint = function (firstPoint, secondPoint) {
-        var xAxis = firstPoint.series.xAxis, yAxis = secondPoint.series.yAxis, firstPointPixels = MockPoint.pointToPixels(firstPoint), secondPointPixels = MockPoint.pointToPixels(secondPoint), deltaX = secondPointPixels.x - firstPointPixels.x, deltaY = secondPointPixels.y - firstPointPixels.y, xAxisMin = xAxis.left, xAxisMax = xAxisMin + xAxis.width, yAxisMin = yAxis.top, yAxisMax = yAxisMin + yAxis.height, xLimit = deltaX < 0 ? xAxisMin : xAxisMax, yLimit = deltaY < 0 ? yAxisMin : yAxisMax, edgePoint = {
+        var chart = firstPoint.series.chart, xAxis = firstPoint.series.xAxis, yAxis = secondPoint.series.yAxis, firstPointPixels = MockPoint.pointToPixels(firstPoint), secondPointPixels = MockPoint.pointToPixels(secondPoint), deltaX = secondPointPixels.x - firstPointPixels.x, deltaY = secondPointPixels.y - firstPointPixels.y, xAxisMin = xAxis.left, xAxisMax = xAxisMin + xAxis.width, yAxisMin = yAxis.top, yAxisMax = yAxisMin + yAxis.height, xLimit = deltaX < 0 ? xAxisMin : xAxisMax, yLimit = deltaY < 0 ? yAxisMin : yAxisMax, edgePoint = {
             x: deltaX === 0 ? firstPointPixels.x : xLimit,
             x: deltaX === 0 ? firstPointPixels.x : xLimit,
             y: deltaY === 0 ? firstPointPixels.y : yLimit
             y: deltaY === 0 ? firstPointPixels.y : yLimit
         }, edgePointX, edgePointY, swap;
         }, edgePointX, edgePointY, swap;
@@ -95,8 +84,8 @@ var InfinityLine = /** @class */ (function (_super) {
                 edgePoint.y = yLimit;
                 edgePoint.y = yLimit;
             }
             }
         }
         }
-        edgePoint.x -= xAxisMin;
-        edgePoint.y -= yAxisMin;
+        edgePoint.x -= chart.plotLeft;
+        edgePoint.y -= chart.plotTop;
         if (firstPoint.series.chart.inverted) {
         if (firstPoint.series.chart.inverted) {
             swap = edgePoint.x;
             swap = edgePoint.x;
             edgePoint.x = edgePoint.y;
             edgePoint.x = edgePoint.y;
@@ -114,7 +103,11 @@ var InfinityLine = /** @class */ (function (_super) {
             this.points[0],
             this.points[0],
             InfinityLine.endEdgePoint
             InfinityLine.endEdgePoint
         ];
         ];
-        if (typeOptions.type.match(/Line/g)) {
+        // Be case-insensitive (#15155) e.g.:
+        // - line
+        // - horizontalLine
+        // - verticalLine
+        if (typeOptions.type.match(/line/gi)) {
             points[0] = InfinityLine.startEdgePoint;
             points[0] = InfinityLine.startEdgePoint;
         }
         }
         var line = this.initShape(merge(typeOptions.line, {
         var line = this.initShape(merge(typeOptions.line, {

+ 3 - 3
node_modules/highcharts/es-modules/Extensions/Annotations/Types/Measure.js

@@ -134,8 +134,8 @@ var Measure = /** @class */ (function (_super) {
                 backgroundColor: 'none',
                 backgroundColor: 'none',
                 color: 'black',
                 color: 'black',
                 borderWidth: 0,
                 borderWidth: 0,
-                dashStyle: 'dash',
-                overflow: 'none',
+                dashStyle: 'Dash',
+                overflow: 'allow',
                 align: 'left',
                 align: 'left',
                 vertical: 'top',
                 vertical: 'top',
                 crop: true,
                 crop: true,
@@ -150,7 +150,7 @@ var Measure = /** @class */ (function (_super) {
                 },
                 },
                 text: (formatter && formatter.call(this)) ||
                 text: (formatter && formatter.call(this)) ||
                     Measure.calculations.defaultFormatter.call(this)
                     Measure.calculations.defaultFormatter.call(this)
-            }, typeOptions.label));
+            }, typeOptions.label), void 0);
         }
         }
     };
     };
     /**
     /**

+ 6 - 2
node_modules/highcharts/es-modules/Extensions/Annotations/Types/Tunnel.js

@@ -166,7 +166,9 @@ Tunnel.prototype.defaultOptions = merge(CrookedLine.prototype.defaultOptions,
             },
             },
             events: {
             events: {
                 drag: function (e, target) {
                 drag: function (e, target) {
-                    if (target.chart.isInsidePlot(e.chartX - target.chart.plotLeft, e.chartY - target.chart.plotTop)) {
+                    if (target.chart.isInsidePlot(e.chartX - target.chart.plotLeft, e.chartY - target.chart.plotTop, {
+                        visiblePlotOnly: true
+                    })) {
                         target.translateHeight(this.mouseMoveToTranslation(e).y);
                         target.translateHeight(this.mouseMoveToTranslation(e).y);
                         target.redraw(false);
                         target.redraw(false);
                     }
                     }
@@ -181,7 +183,9 @@ Tunnel.prototype.defaultOptions = merge(CrookedLine.prototype.defaultOptions,
     controlPointOptions: {
     controlPointOptions: {
         events: {
         events: {
             drag: function (e, target) {
             drag: function (e, target) {
-                if (target.chart.isInsidePlot(e.chartX - target.chart.plotLeft, e.chartY - target.chart.plotTop)) {
+                if (target.chart.isInsidePlot(e.chartX - target.chart.plotLeft, e.chartY - target.chart.plotTop, {
+                    visiblePlotOnly: true
+                })) {
                     var translation = this.mouseMoveToTranslation(e);
                     var translation = this.mouseMoveToTranslation(e);
                     target.translateSide(translation.x, translation.y, this.index);
                     target.translateSide(translation.x, translation.y, this.index);
                     target.redraw(false);
                     target.redraw(false);

+ 7 - 8
node_modules/highcharts/es-modules/Extensions/Annotations/Types/VerticalLine.js

@@ -20,7 +20,7 @@ var __extends = (this && this.__extends) || (function () {
 import Annotation from '../Annotations.js';
 import Annotation from '../Annotations.js';
 import MockPoint from '../MockPoint.js';
 import MockPoint from '../MockPoint.js';
 import U from '../../../Core/Utilities.js';
 import U from '../../../Core/Utilities.js';
-var merge = U.merge;
+var merge = U.merge, pick = U.pick;
 /* eslint-disable no-invalid-this, valid-jsdoc */
 /* eslint-disable no-invalid-this, valid-jsdoc */
 var VerticalLine = /** @class */ (function (_super) {
 var VerticalLine = /** @class */ (function (_super) {
     __extends(VerticalLine, _super);
     __extends(VerticalLine, _super);
@@ -38,25 +38,24 @@ var VerticalLine = /** @class */ (function (_super) {
      *
      *
      * */
      * */
     VerticalLine.connectorFirstPoint = function (target) {
     VerticalLine.connectorFirstPoint = function (target) {
-        var annotation = target.annotation, point = annotation.points[0], xy = MockPoint.pointToPixels(point, true), y = xy.y, offset = annotation.options.typeOptions.label.offset;
-        if (annotation.chart.inverted) {
-            y = xy.x;
-        }
+        var annotation = target.annotation, chart = annotation.chart, inverted = chart.inverted, point = annotation.points[0], left = pick(point.series.yAxis && point.series.yAxis.left, 0), top = pick(point.series.yAxis && point.series.yAxis.top, 0), offset = annotation.options.typeOptions.label.offset, y = MockPoint.pointToPixels(point, true)[inverted ? 'x' : 'y'];
         return {
         return {
             x: point.x,
             x: point.x,
             xAxis: point.series.xAxis,
             xAxis: point.series.xAxis,
-            y: y + offset
+            y: y + offset +
+                (inverted ? (left - chart.plotLeft) : (top - chart.plotTop))
         };
         };
     };
     };
     VerticalLine.connectorSecondPoint = function (target) {
     VerticalLine.connectorSecondPoint = function (target) {
-        var annotation = target.annotation, typeOptions = annotation.options.typeOptions, point = annotation.points[0], yOffset = typeOptions.yOffset, xy = MockPoint.pointToPixels(point, true), y = xy[annotation.chart.inverted ? 'x' : 'y'];
+        var annotation = target.annotation, chart = annotation.chart, inverted = chart.inverted, typeOptions = annotation.options.typeOptions, point = annotation.points[0], left = pick(point.series.yAxis && point.series.yAxis.left, 0), top = pick(point.series.yAxis && point.series.yAxis.top, 0), yOffset = typeOptions.yOffset, y = MockPoint.pointToPixels(point, true)[inverted ? 'x' : 'y'];
         if (typeOptions.label.offset < 0) {
         if (typeOptions.label.offset < 0) {
             yOffset *= -1;
             yOffset *= -1;
         }
         }
         return {
         return {
             x: point.x,
             x: point.x,
             xAxis: point.series.xAxis,
             xAxis: point.series.xAxis,
-            y: y + yOffset
+            y: y + yOffset +
+                (inverted ? (left - chart.plotLeft) : (top - chart.plotTop))
         };
         };
     };
     };
     /* *
     /* *

+ 21 - 0
node_modules/highcharts/es-modules/Extensions/Boost/BoostInit.js

@@ -115,6 +115,9 @@ function init() {
              */
              */
             function processPoint(d, i) {
             function processPoint(d, i) {
                 var x, y, clientX, plotY, isNull, low = false, chartDestroyed = typeof chart.index === 'undefined', isYInside = true;
                 var x, y, clientX, plotY, isNull, low = false, chartDestroyed = typeof chart.index === 'undefined', isYInside = true;
+                if (typeof d === 'undefined') {
+                    return true;
+                }
                 if (!chartDestroyed) {
                 if (!chartDestroyed) {
                     if (useRaw) {
                     if (useRaw) {
                         x = d[0];
                         x = d[0];
@@ -291,6 +294,24 @@ function init() {
         //     chart.boostForceChartBoost =
         //     chart.boostForceChartBoost =
         //         shouldForceChartSeriesBoosting(chart);
         //         shouldForceChartSeriesBoosting(chart);
         // });
         // });
+        var prevX = -1;
+        var prevY = -1;
+        addEvent(chart.pointer, 'afterGetHoverData', function () {
+            var series = chart.hoverSeries;
+            if (chart.markerGroup && series) {
+                var xAxis = chart.inverted ? series.yAxis : series.xAxis;
+                var yAxis = chart.inverted ? series.xAxis : series.yAxis;
+                if ((xAxis && xAxis.pos !== prevX) ||
+                    (yAxis && yAxis.pos !== prevY)) {
+                    // #10464: Keep the marker group position in sync with the
+                    // position of the hovered series axes since there is only
+                    // one shared marker group when boosting.
+                    chart.markerGroup.translate(xAxis.pos, yAxis.pos);
+                    prevX = xAxis.pos;
+                    prevY = yAxis.pos;
+                }
+            }
+        });
     });
     });
     /* eslint-enable no-invalid-this */
     /* eslint-enable no-invalid-this */
 }
 }

+ 9 - 5
node_modules/highcharts/es-modules/Extensions/Boost/BoostOverrides.js

@@ -11,12 +11,14 @@
  * */
  * */
 'use strict';
 'use strict';
 import Chart from '../../Core/Chart/Chart.js';
 import Chart from '../../Core/Chart/Chart.js';
+import O from '../../Core/Options.js';
+var getOptions = O.getOptions;
 import Point from '../../Core/Series/Point.js';
 import Point from '../../Core/Series/Point.js';
 import Series from '../../Core/Series/Series.js';
 import Series from '../../Core/Series/Series.js';
 import SeriesRegistry from '../../Core/Series/SeriesRegistry.js';
 import SeriesRegistry from '../../Core/Series/SeriesRegistry.js';
 var seriesTypes = SeriesRegistry.seriesTypes;
 var seriesTypes = SeriesRegistry.seriesTypes;
 import U from '../../Core/Utilities.js';
 import U from '../../Core/Utilities.js';
-var addEvent = U.addEvent, error = U.error, getOptions = U.getOptions, isArray = U.isArray, isNumber = U.isNumber, pick = U.pick, wrap = U.wrap;
+var addEvent = U.addEvent, error = U.error, isArray = U.isArray, isNumber = U.isNumber, pick = U.pick, wrap = U.wrap;
 import '../../Core/Options.js';
 import '../../Core/Options.js';
 import butils from './BoostUtils.js';
 import butils from './BoostUtils.js';
 import boostable from './Boostables.js';
 import boostable from './Boostables.js';
@@ -43,7 +45,7 @@ Chart.prototype.isChartSeriesBoosting = function () {
 /**
 /**
  * Get the clip rectangle for a target, either a series or the chart. For the
  * Get the clip rectangle for a target, either a series or the chart. For the
  * chart, we need to consider the maximum extent of its Y axes, in case of
  * chart, we need to consider the maximum extent of its Y axes, in case of
- * Highstock panes and navigator.
+ * Highcharts Stock panes and navigator.
  *
  *
  * @private
  * @private
  * @function Highcharts.Chart#getBoostClipRect
  * @function Highcharts.Chart#getBoostClipRect
@@ -248,9 +250,11 @@ wrap(Series.prototype, 'processData', function (proceed) {
         // Enter or exit boost mode
         // Enter or exit boost mode
         if (this.isSeriesBoosting) {
         if (this.isSeriesBoosting) {
             // Force turbo-mode:
             // Force turbo-mode:
-            firstPoint = this.getFirstValidPoint(this.options.data);
-            if (!isNumber(firstPoint) && !isArray(firstPoint)) {
-                error(12, false, this.chart);
+            if (this.options.data && this.options.data.length) {
+                firstPoint = this.getFirstValidPoint(this.options.data);
+                if (!isNumber(firstPoint) && !isArray(firstPoint)) {
+                    error(12, false, this.chart);
+                }
             }
             }
             this.enterBoost();
             this.enterBoost();
         }
         }

+ 34 - 15
node_modules/highcharts/es-modules/Extensions/Boost/WGLRenderer.js

@@ -201,13 +201,13 @@ function GLRenderer(postRenderCallback) {
         // For some reason eslint/TypeScript don't pick up that this is
         // For some reason eslint/TypeScript don't pick up that this is
         // actually used: --- bre1470: it is never read, just set
         // actually used: --- bre1470: it is never read, just set
         // maxVal: (number|undefined), // eslint-disable-line no-unused-vars
         // maxVal: (number|undefined), // eslint-disable-line no-unused-vars
-        points = series.points || false, lastX = false, lastY = false, minVal, pcolor, scolor, sdata = isStacked ? series.data : (xData || rawData), closestLeft = { x: Number.MAX_VALUE, y: 0 }, closestRight = { x: -Number.MAX_VALUE, y: 0 }, 
+        points = series.points || false, lastX = false, lastY = false, minVal, scolor, sdata = isStacked ? series.data : (xData || rawData), closestLeft = { x: Number.MAX_VALUE, y: 0 }, closestRight = { x: -Number.MAX_VALUE, y: 0 }, 
         //
         //
         skipped = 0, hadPoints = false, 
         skipped = 0, hadPoints = false, 
         //
         //
         cullXThreshold = 1, cullYThreshold = 1, 
         cullXThreshold = 1, cullYThreshold = 1, 
         // The following are used in the builder while loop
         // The following are used in the builder while loop
-        x, y, d, z, i = -1, px = false, nx = false, low, chartDestroyed = typeof chart.index === 'undefined', nextInside = false, prevInside = false, pcolor = false, drawAsBar = asBar[series.type], isXInside = false, isYInside = true, firstPoint = true, zones = options.zones || false, zoneDefColor = false, threshold = options.threshold, gapSize = false;
+        x, y, d, z, i = -1, px = false, nx = false, low, chartDestroyed = typeof chart.index === 'undefined', nextInside = false, prevInside = false, pcolor = false, drawAsBar = asBar[series.type], isXInside = false, isYInside = true, firstPoint = true, zoneAxis = options.zoneAxis || 'y', zones = options.zones || false, zoneDefColor = false, threshold = options.threshold, gapSize = false;
         if (options.boostData && options.boostData.length > 0) {
         if (options.boostData && options.boostData.length > 0) {
             return;
             return;
         }
         }
@@ -334,11 +334,12 @@ function GLRenderer(postRenderCallback) {
                 });
                 });
             }
             }
             points.forEach(function (point) {
             points.forEach(function (point) {
-                var plotY = point.plotY, shapeArgs, swidth, pointAttr;
+                var plotY = point.plotY, swidth, pointAttr;
                 if (typeof plotY !== 'undefined' &&
                 if (typeof plotY !== 'undefined' &&
                     !isNaN(plotY) &&
                     !isNaN(plotY) &&
-                    point.y !== null) {
-                    shapeArgs = point.shapeArgs;
+                    point.y !== null &&
+                    point.shapeArgs) {
+                    var _a = point.shapeArgs, _b = _a.x, x_1 = _b === void 0 ? 0 : _b, _c = _a.y, y_1 = _c === void 0 ? 0 : _c, _d = _a.width, width_1 = _d === void 0 ? 0 : _d, _e = _a.height, height_1 = _e === void 0 ? 0 : _e;
                     pointAttr = chart.styledMode ?
                     pointAttr = chart.styledMode ?
                         point.series
                         point.series
                             .colorAttribs(point) :
                             .colorAttribs(point) :
@@ -362,7 +363,7 @@ function GLRenderer(postRenderCallback) {
                         scolor[0] /= 255.0;
                         scolor[0] /= 255.0;
                         scolor[1] /= 255.0;
                         scolor[1] /= 255.0;
                         scolor[2] /= 255.0;
                         scolor[2] /= 255.0;
-                        pushRect(shapeArgs.x, shapeArgs.y, shapeArgs.width, shapeArgs.height, scolor);
+                        pushRect(x_1, y_1, width_1, height_1, scolor);
                         swidth /= 2;
                         swidth /= 2;
                     }
                     }
                     // } else {
                     // } else {
@@ -374,12 +375,12 @@ function GLRenderer(postRenderCallback) {
                     // bottom-right. This causes a vertical and horizontal flip
                     // bottom-right. This causes a vertical and horizontal flip
                     // in the resulting image, making it rotated 180 degrees.
                     // in the resulting image, making it rotated 180 degrees.
                     if (series.type === 'heatmap' && chart.inverted) {
                     if (series.type === 'heatmap' && chart.inverted) {
-                        shapeArgs.x = xAxis.len - shapeArgs.x;
-                        shapeArgs.y = yAxis.len - shapeArgs.y;
-                        shapeArgs.width = -shapeArgs.width;
-                        shapeArgs.height = -shapeArgs.height;
+                        x_1 = xAxis.len - x_1;
+                        y_1 = yAxis.len - y_1;
+                        width_1 = -width_1;
+                        height_1 = -height_1;
                     }
                     }
-                    pushRect(shapeArgs.x + swidth, shapeArgs.y + swidth, shapeArgs.width - (swidth * 2), shapeArgs.height - (swidth * 2), pcolor);
+                    pushRect(x_1 + swidth, y_1 + swidth, width_1 - (swidth * 2), height_1 - (swidth * 2), pcolor);
                 }
                 }
             });
             });
             closeSegment();
             closeSegment();
@@ -393,6 +394,9 @@ function GLRenderer(postRenderCallback) {
         // });
         // });
         while (i < sdata.length - 1) {
         while (i < sdata.length - 1) {
             d = sdata[++i];
             d = sdata[++i];
+            if (typeof d === 'undefined') {
+                continue;
+            }
             // px = x = y = z = nx = low = false;
             // px = x = y = z = nx = low = false;
             // chartDestroyed = typeof chart.index === 'undefined';
             // chartDestroyed = typeof chart.index === 'undefined';
             // nextInside = prevInside = pcolor = isXInside = isYInside = false;
             // nextInside = prevInside = pcolor = isXInside = isYInside = false;
@@ -518,10 +522,19 @@ function GLRenderer(postRenderCallback) {
             }
             }
             // Note: Boost requires that zones are sorted!
             // Note: Boost requires that zones are sorted!
             if (zones) {
             if (zones) {
-                pcolor = zoneDefColor.rgba;
+                pcolor = zoneDefColor.rgba.slice();
                 zones.some(function (// eslint-disable-line no-loop-func
                 zones.some(function (// eslint-disable-line no-loop-func
                 zone, i) {
                 zone, i) {
                     var last = zones[i - 1];
                     var last = zones[i - 1];
+                    if (zoneAxis === 'x') {
+                        if (typeof zone.value !== 'undefined' && x <= zone.value) {
+                            if (!last || x >= last.value) {
+                                pcolor = color(zone.color).rgba;
+                            }
+                            return true;
+                        }
+                        return false;
+                    }
                     if (typeof zone.value !== 'undefined' && y <= zone.value) {
                     if (typeof zone.value !== 'undefined' && y <= zone.value) {
                         if (!last || y >= last.value) {
                         if (!last || y >= last.value) {
                             pcolor = color(zone.color).rgba;
                             pcolor = color(zone.color).rgba;
@@ -678,7 +691,7 @@ function GLRenderer(postRenderCallback) {
         if (settings.debug.timeSeriesProcessing) {
         if (settings.debug.timeSeriesProcessing) {
             console.time('building ' + s.type + ' series'); // eslint-disable-line no-console
             console.time('building ' + s.type + ' series'); // eslint-disable-line no-console
         }
         }
-        series.push({
+        var obj = {
             segments: [],
             segments: [],
             // from: data.length,
             // from: data.length,
             markerFrom: markerData.length,
             markerFrom: markerData.length,
@@ -706,9 +719,15 @@ function GLRenderer(postRenderCallback) {
                 'treemap': 'triangles',
                 'treemap': 'triangles',
                 'bubble': 'points'
                 'bubble': 'points'
             }[s.type] || 'line_strip'
             }[s.type] || 'line_strip'
-        });
+        };
+        if (s.index >= series.length) {
+            series.push(obj);
+        }
+        else {
+            series[s.index] = obj;
+        }
         // Add the series data to our buffer(s)
         // Add the series data to our buffer(s)
-        pushSeriesData(s, series[series.length - 1]);
+        pushSeriesData(s, obj);
         if (settings.debug.timeSeriesProcessing) {
         if (settings.debug.timeSeriesProcessing) {
             console.timeEnd('building ' + s.type + ' series'); // eslint-disable-line no-console
             console.timeEnd('building ' + s.type + ' series'); // eslint-disable-line no-console
         }
         }

+ 6 - 5
node_modules/highcharts/es-modules/Extensions/BoostCanvas.js

@@ -38,11 +38,12 @@ var initCanvasBoost = function () {
             if (ctx) {
             if (ctx) {
                 // draw the columns
                 // draw the columns
                 this.points.forEach(function (point) {
                 this.points.forEach(function (point) {
-                    var plotY = point.plotY, shapeArgs, pointAttr;
+                    var plotY = point.plotY, pointAttr;
                     if (typeof plotY !== 'undefined' &&
                     if (typeof plotY !== 'undefined' &&
                         !isNaN(plotY) &&
                         !isNaN(plotY) &&
-                        point.y !== null) {
-                        shapeArgs = point.shapeArgs;
+                        point.y !== null &&
+                        ctx) {
+                        var _a = point.shapeArgs || {}, _b = _a.x, x = _b === void 0 ? 0 : _b, _c = _a.y, y = _c === void 0 ? 0 : _c, _d = _a.width, width = _d === void 0 ? 0 : _d, _e = _a.height, height = _e === void 0 ? 0 : _e;
                         if (!chart.styledMode) {
                         if (!chart.styledMode) {
                             pointAttr = point.series.pointAttribs(point);
                             pointAttr = point.series.pointAttribs(point);
                         }
                         }
@@ -51,10 +52,10 @@ var initCanvasBoost = function () {
                         }
                         }
                         ctx.fillStyle = pointAttr.fill;
                         ctx.fillStyle = pointAttr.fill;
                         if (inverted) {
                         if (inverted) {
-                            ctx.fillRect(yAxis.len - shapeArgs.y + xAxis.left, xAxis.len - shapeArgs.x + yAxis.top, -shapeArgs.height, -shapeArgs.width);
+                            ctx.fillRect(yAxis.len - y + xAxis.left, xAxis.len - x + yAxis.top, -height, -width);
                         }
                         }
                         else {
                         else {
-                            ctx.fillRect(shapeArgs.x + xAxis.left, shapeArgs.y + yAxis.top, shapeArgs.width, shapeArgs.height);
+                            ctx.fillRect(x + xAxis.left, y + yAxis.top, width, height);
                         }
                         }
                     }
                     }
                 });
                 });

+ 32 - 28
node_modules/highcharts/es-modules/Extensions/CurrentDateIndication.js

@@ -15,26 +15,25 @@ import palette from '../Core/Color/Palette.js';
 import U from '../Core/Utilities.js';
 import U from '../Core/Utilities.js';
 var addEvent = U.addEvent, merge = U.merge, wrap = U.wrap;
 var addEvent = U.addEvent, merge = U.merge, wrap = U.wrap;
 import PlotLineOrBand from '../Core/Axis/PlotLineOrBand.js';
 import PlotLineOrBand from '../Core/Axis/PlotLineOrBand.js';
-var defaultConfig = {
-    /**
-     * Show an indicator on the axis for the current date and time. Can be a
-     * boolean or a configuration object similar to
-     * [xAxis.plotLines](#xAxis.plotLines).
-     *
-     * @sample gantt/current-date-indicator/demo
-     *         Current date indicator enabled
-     * @sample gantt/current-date-indicator/object-config
-     *         Current date indicator with custom options
-     *
-     * @declare   Highcharts.AxisCurrentDateIndicatorOptions
-     * @type      {boolean|*}
-     * @default   true
-     * @extends   xAxis.plotLines
-     * @excluding value
-     * @product   gantt
-     * @apioption xAxis.currentDateIndicator
-     */
-    currentDateIndicator: true,
+/**
+ * Show an indicator on the axis for the current date and time. Can be a
+ * boolean or a configuration object similar to
+ * [xAxis.plotLines](#xAxis.plotLines).
+ *
+ * @sample gantt/current-date-indicator/demo
+ *         Current date indicator enabled
+ * @sample gantt/current-date-indicator/object-config
+ *         Current date indicator with custom options
+ *
+ * @declare   Highcharts.CurrentDateIndicatorOptions
+ * @type      {boolean|CurrentDateIndicatorOptions}
+ * @default   true
+ * @extends   xAxis.plotLines
+ * @excluding value
+ * @product   gantt
+ * @apioption xAxis.currentDateIndicator
+ */
+var defaultOptions = {
     color: palette.highlightColor20,
     color: palette.highlightColor20,
     width: 2,
     width: 2,
     /**
     /**
@@ -43,7 +42,7 @@ var defaultConfig = {
     label: {
     label: {
         /**
         /**
          * Format of the label. This options is passed as the fist argument to
          * Format of the label. This options is passed as the fist argument to
-         * [dateFormat](/class-reference/Highcharts#dateFormat) function.
+         * [dateFormat](/class-reference/Highcharts#.dateFormat) function.
          *
          *
          * @type      {string}
          * @type      {string}
          * @default   %a, %b %d %Y, %H:%M
          * @default   %a, %b %d %Y, %H:%M
@@ -52,7 +51,7 @@ var defaultConfig = {
          */
          */
         format: '%a, %b %d %Y, %H:%M',
         format: '%a, %b %d %Y, %H:%M',
         formatter: function (value, format) {
         formatter: function (value, format) {
-            return this.axis.chart.time.dateFormat(format, value);
+            return this.axis.chart.time.dateFormat(format || '', value);
         },
         },
         rotation: 0,
         rotation: 0,
         /**
         /**
@@ -68,13 +67,15 @@ var defaultConfig = {
 addEvent(Axis, 'afterSetOptions', function () {
 addEvent(Axis, 'afterSetOptions', function () {
     var options = this.options, cdiOptions = options.currentDateIndicator;
     var options = this.options, cdiOptions = options.currentDateIndicator;
     if (cdiOptions) {
     if (cdiOptions) {
-        cdiOptions = typeof cdiOptions === 'object' ?
-            merge(defaultConfig, cdiOptions) : merge(defaultConfig);
-        cdiOptions.value = new Date();
+        var plotLineOptions = typeof cdiOptions === 'object' ?
+            merge(defaultOptions, cdiOptions) :
+            merge(defaultOptions);
+        plotLineOptions.value = Date.now();
+        plotLineOptions.className = 'highcharts-current-date-indicator';
         if (!options.plotLines) {
         if (!options.plotLines) {
             options.plotLines = [];
             options.plotLines = [];
         }
         }
-        options.plotLines.push(cdiOptions);
+        options.plotLines.push(plotLineOptions);
     }
     }
 });
 });
 addEvent(PlotLineOrBand, 'render', function () {
 addEvent(PlotLineOrBand, 'render', function () {
@@ -87,9 +88,12 @@ addEvent(PlotLineOrBand, 'render', function () {
 });
 });
 wrap(PlotLineOrBand.prototype, 'getLabelText', function (defaultMethod, defaultLabelOptions) {
 wrap(PlotLineOrBand.prototype, 'getLabelText', function (defaultMethod, defaultLabelOptions) {
     var options = this.options;
     var options = this.options;
-    if (options.currentDateIndicator && options.label &&
+    if (options &&
+        options.className &&
+        options.className.indexOf('highcharts-current-date-indicator') !== -1 &&
+        options.label &&
         typeof options.label.formatter === 'function') {
         typeof options.label.formatter === 'function') {
-        options.value = new Date();
+        options.value = Date.now();
         return options.label.formatter
         return options.label.formatter
             .call(this, options.value, options.label.format);
             .call(this, options.value, options.label.format);
     }
     }

+ 1 - 1
node_modules/highcharts/es-modules/Extensions/Data.js

@@ -1118,7 +1118,7 @@ var Data = /** @class */ (function () {
                 options.dateFormat = deduceDateFormat(columns[0]);
                 options.dateFormat = deduceDateFormat(columns[0]);
             }
             }
             // lines.forEach(function (line, rowNo) {
             // lines.forEach(function (line, rowNo) {
-            //    var trimmed = self.trim(line),
+            //    let trimmed = self.trim(line),
             //        isComment = trimmed.indexOf('#') === 0,
             //        isComment = trimmed.indexOf('#') === 0,
             //        isBlank = trimmed === '',
             //        isBlank = trimmed === '',
             //        items;
             //        items;

+ 210 - 31
node_modules/highcharts/es-modules/Extensions/DataGrouping.js

@@ -10,17 +10,29 @@
 'use strict';
 'use strict';
 import Axis from '../Core/Axis/Axis.js';
 import Axis from '../Core/Axis/Axis.js';
 import DateTimeAxis from '../Core/Axis/DateTimeAxis.js';
 import DateTimeAxis from '../Core/Axis/DateTimeAxis.js';
+import F from '../Core/FormatUtilities.js';
+var format = F.format;
 import H from '../Core/Globals.js';
 import H from '../Core/Globals.js';
-import O from '../Core/Options.js';
 import Point from '../Core/Series/Point.js';
 import Point from '../Core/Series/Point.js';
 import Series from '../Core/Series/Series.js';
 import Series from '../Core/Series/Series.js';
 var seriesProto = Series.prototype;
 var seriesProto = Series.prototype;
 import Tooltip from '../Core/Tooltip.js';
 import Tooltip from '../Core/Tooltip.js';
+import O from '../Core/Options.js';
 import U from '../Core/Utilities.js';
 import U from '../Core/Utilities.js';
-var addEvent = U.addEvent, arrayMax = U.arrayMax, arrayMin = U.arrayMin, correctFloat = U.correctFloat, defined = U.defined, error = U.error, extend = U.extend, format = U.format, isNumber = U.isNumber, merge = U.merge, pick = U.pick;
+var addEvent = U.addEvent, arrayMax = U.arrayMax, arrayMin = U.arrayMin, correctFloat = U.correctFloat, defined = U.defined, error = U.error, extend = U.extend, isNumber = U.isNumber, merge = U.merge, pick = U.pick;
 /**
 /**
  * @typedef {"average"|"averages"|"open"|"high"|"low"|"close"|"sum"} Highcharts.DataGroupingApproximationValue
  * @typedef {"average"|"averages"|"open"|"high"|"low"|"close"|"sum"} Highcharts.DataGroupingApproximationValue
  */
  */
+/**
+ * The position of the point inside the group.
+ *
+ * @typedef    {"start"|"middle"|"end"} Highcharts.DataGroupingAnchor
+ */
+/**
+ * The position of the first or last point in the series inside the group.
+ *
+ * @typedef    {"start"|"middle"|"end"|"firstPoint"|"lastPoint"} Highcharts.DataGroupingAnchorExtremes
+ */
 /**
 /**
  * @interface Highcharts.DataGroupingInfoObject
  * @interface Highcharts.DataGroupingInfoObject
  */ /**
  */ /**
@@ -139,7 +151,7 @@ var groupData = function (xData, yData, groupPositions, approximation) {
     var series = this, data = series.data, dataOptions = series.options && series.options.data, groupedXData = [], groupedYData = [], groupMap = [], dataLength = xData.length, pointX, pointY, groupedY, 
     var series = this, data = series.data, dataOptions = series.options && series.options.data, groupedXData = [], groupedYData = [], groupMap = [], dataLength = xData.length, pointX, pointY, groupedY, 
     // when grouping the fake extended axis for panning,
     // when grouping the fake extended axis for panning,
     // we don't need to consider y
     // we don't need to consider y
-    handleYData = !!yData, values = [], approximationFn, pointArrayMap = series.pointArrayMap, pointArrayMapLength = pointArrayMap && pointArrayMap.length, extendedPointArrayMap = ['x'].concat(pointArrayMap || ['y']), pos = 0, start = 0, valuesLen, i, j;
+    handleYData = !!yData, values = [], approximationFn, pointArrayMap = series.pointArrayMap, pointArrayMapLength = pointArrayMap && pointArrayMap.length, extendedPointArrayMap = ['x'].concat(pointArrayMap || ['y']), groupAll = this.options.dataGrouping && this.options.dataGrouping.groupAll, pos = 0, start = 0, valuesLen, i, j;
     /**
     /**
      * @private
      * @private
      */
      */
@@ -179,7 +191,7 @@ var groupData = function (xData, yData, groupPositions, approximation) {
             // get group x and y
             // get group x and y
             pointX = groupPositions[pos];
             pointX = groupPositions[pos];
             series.dataGroupInfo = {
             series.dataGroupInfo = {
-                start: series.cropStart + start,
+                start: groupAll ? start : (series.cropStart + start),
                 length: values[0].length
                 length: values[0].length
             };
             };
             groupedY = approximationFn.apply(series, values);
             groupedY = approximationFn.apply(series, values);
@@ -224,10 +236,12 @@ var groupData = function (xData, yData, groupPositions, approximation) {
         // for each raw data point, push it to an array that contains all values
         // for each raw data point, push it to an array that contains all values
         // for this specific group
         // for this specific group
         if (pointArrayMap) {
         if (pointArrayMap) {
-            var index = series.cropStart + i, point = (data && data[index]) ||
+            var index = (series.options.dataGrouping &&
+                series.options.dataGrouping.groupAll ?
+                i : series.cropStart + i), point = (data && data[index]) ||
                 series.pointClass.prototype.applyOptions.apply({
                 series.pointClass.prototype.applyOptions.apply({
                     series: series
                     series: series
-                }, [dataOptions[index]]), val;
+                }, [dataOptions[index]]), val = void 0;
             for (j = 0; j < pointArrayMapLength; j++) {
             for (j = 0; j < pointArrayMapLength; j++) {
                 val = point[pointArrayMap[j]];
                 val = point[pointArrayMap[j]];
                 if (isNumber(val)) {
                 if (isNumber(val)) {
@@ -254,6 +268,82 @@ var groupData = function (xData, yData, groupPositions, approximation) {
         groupMap: groupMap
         groupMap: groupMap
     };
     };
 };
 };
+var anchorPoints = function (series, groupedXData, xMax) {
+    var options = series.options, dataGroupingOptions = options.dataGrouping, totalRange = series.currentDataGrouping && series.currentDataGrouping.gapSize;
+    var i;
+    // DataGrouping x-coordinates.
+    if (dataGroupingOptions && series.xData && totalRange && series.groupMap) {
+        var groupedDataLength = groupedXData.length - 1, anchor = dataGroupingOptions.anchor, firstAnchor = pick(dataGroupingOptions.firstAnchor, anchor), lastAnchor = pick(dataGroupingOptions.lastAnchor, anchor);
+        // Anchor points that are not extremes.
+        if (anchor && anchor !== 'start') {
+            var shiftInterval = totalRange *
+                { middle: 0.5, end: 1 }[anchor];
+            i = groupedXData.length - 1;
+            while (i-- && i > 0) {
+                groupedXData[i] += shiftInterval;
+            }
+        }
+        // Change the first point position, but only when it is
+        // the first point in the data set not in the current zoom.
+        if (firstAnchor &&
+            firstAnchor !== 'start' &&
+            series.xData[0] >= groupedXData[0]) {
+            var groupStart = series.groupMap[0].start, groupLength = series.groupMap[0].length;
+            var firstGroupstEnd = void 0;
+            if (isNumber(groupStart) && isNumber(groupLength)) {
+                firstGroupstEnd = groupStart + (groupLength - 1);
+            }
+            groupedXData[0] = {
+                middle: groupedXData[0] + 0.5 * totalRange,
+                end: groupedXData[0] + totalRange,
+                firstPoint: series.xData[0],
+                lastPoint: firstGroupstEnd && series.xData[firstGroupstEnd]
+            }[firstAnchor];
+        }
+        // Change the last point position but only when it is
+        // the last point in the data set not in the current zoom.
+        if (lastAnchor &&
+            lastAnchor !== 'start' &&
+            totalRange &&
+            groupedXData[groupedDataLength] >= xMax - totalRange) {
+            var lastGroupStart = series.groupMap[series.groupMap.length - 1].start;
+            groupedXData[groupedDataLength] = {
+                middle: groupedXData[groupedDataLength] + 0.5 * totalRange,
+                end: groupedXData[groupedDataLength] + totalRange,
+                firstPoint: lastGroupStart && series.xData[lastGroupStart],
+                lastPoint: series.xData[series.xData.length - 1]
+            }[lastAnchor];
+        }
+    }
+};
+var adjustExtremes = function (xAxis, groupedXData) {
+    // Make sure the X axis extends to show the first group (#2533)
+    // But only for visible series (#5493, #6393)
+    if (defined(groupedXData[0]) &&
+        isNumber(xAxis.min) &&
+        isNumber(xAxis.dataMin) &&
+        groupedXData[0] < xAxis.min) {
+        if ((!defined(xAxis.options.min) &&
+            xAxis.min <= xAxis.dataMin) ||
+            xAxis.min === xAxis.dataMin) {
+            xAxis.min = Math.min(groupedXData[0], xAxis.min);
+        }
+        xAxis.dataMin = Math.min(groupedXData[0], xAxis.dataMin);
+    }
+    // When the last anchor set, change the extremes that
+    // the last point is visible (#12455).
+    if (defined(groupedXData[groupedXData.length - 1]) &&
+        isNumber(xAxis.max) &&
+        isNumber(xAxis.dataMax) &&
+        groupedXData[groupedXData.length - 1] > xAxis.max) {
+        if ((!defined(xAxis.options.max) &&
+            isNumber(xAxis.dataMax) &&
+            xAxis.max >= xAxis.dataMax) || xAxis.max === xAxis.dataMax) {
+            xAxis.max = Math.max(groupedXData[groupedXData.length - 1], xAxis.max);
+        }
+        xAxis.dataMax = Math.max(groupedXData[groupedXData.length - 1], xAxis.dataMax);
+    }
+};
 var dataGrouping = {
 var dataGrouping = {
     approximations: approximations,
     approximations: approximations,
     groupData: groupData
     groupData: groupData
@@ -415,7 +505,7 @@ seriesProto.processData = function () {
     }
     }
     if (!skip) {
     if (!skip) {
         series.destroyGroupedData();
         series.destroyGroupedData();
-        var i, processedXData = dataGroupingOptions.groupAll ?
+        var i = void 0, processedXData = dataGroupingOptions.groupAll ?
             series.xData :
             series.xData :
             series.processedXData, processedYData = dataGroupingOptions.groupAll ?
             series.processedXData, processedYData = dataGroupingOptions.groupAll ?
             series.yData :
             series.yData :
@@ -423,7 +513,9 @@ seriesProto.processData = function () {
             xAxis.getGroupPixelWidth && xAxis.getGroupPixelWidth();
             xAxis.getGroupPixelWidth && xAxis.getGroupPixelWidth();
         // Execute grouping if the amount of points is greater than the limit
         // Execute grouping if the amount of points is greater than the limit
         // defined in groupPixelWidth
         // defined in groupPixelWidth
-        if (groupPixelWidth) {
+        if (groupPixelWidth &&
+            processedXData &&
+            processedXData.length) {
             hasGroupedData = true;
             hasGroupedData = true;
             // Force recreation of point instances in series.translate, #5699
             // Force recreation of point instances in series.translate, #5699
             series.isDirty = true;
             series.isDirty = true;
@@ -440,16 +532,15 @@ seriesProto.processData = function () {
                 groupPositions,
                 groupPositions,
                 dataGroupingOptions.approximation
                 dataGroupingOptions.approximation
             ]), groupedXData = groupedData.groupedXData, groupedYData = groupedData.groupedYData, gapSize = 0;
             ]), groupedXData = groupedData.groupedXData, groupedYData = groupedData.groupedYData, gapSize = 0;
-            // Prevent the smoothed data to spill out left and right, and make
-            // sure data is not shifted to the left
-            if (dataGroupingOptions.smoothed && groupedXData.length) {
-                i = groupedXData.length - 1;
-                groupedXData[i] = Math.min(groupedXData[i], xMax);
-                while (i-- && i > 0) {
-                    groupedXData[i] += interval / 2;
-                }
-                groupedXData[0] = Math.max(groupedXData[0], xMin);
+            // The smoothed option is deprecated, instead,
+            // there is a fallback to the new anchoring mechanism. #12455.
+            if (dataGroupingOptions && dataGroupingOptions.smoothed && groupedXData.length) {
+                dataGroupingOptions.firstAnchor = 'firstPoint';
+                dataGroupingOptions.anchor = 'middle';
+                dataGroupingOptions.lastAnchor = 'lastPoint';
+                error(32, false, chart, { 'dataGrouping.smoothed': 'use dataGrouping.anchor' });
             }
             }
+            anchorPoints(series, groupedXData, xMax);
             // Record what data grouping values were used
             // Record what data grouping values were used
             for (i = 1; i < groupPositions.length; i++) {
             for (i = 1; i < groupPositions.length; i++) {
                 // The grouped gapSize needs to be the largest distance between
                 // The grouped gapSize needs to be the largest distance between
@@ -465,17 +556,8 @@ seriesProto.processData = function () {
             currentDataGrouping.gapSize = gapSize;
             currentDataGrouping.gapSize = gapSize;
             series.closestPointRange = groupPositions.info.totalRange;
             series.closestPointRange = groupPositions.info.totalRange;
             series.groupMap = groupedData.groupMap;
             series.groupMap = groupedData.groupMap;
-            // Make sure the X axis extends to show the first group (#2533)
-            // But only for visible series (#5493, #6393)
-            if (defined(groupedXData[0]) &&
-                groupedXData[0] < xAxis.min &&
-                visible) {
-                if ((!defined(xAxis.options.min) &&
-                    xAxis.min <= xAxis.dataMin) ||
-                    xAxis.min === xAxis.dataMin) {
-                    xAxis.min = Math.min(groupedXData[0], xAxis.min);
-                }
-                xAxis.dataMin = Math.min(groupedXData[0], xAxis.dataMin);
+            if (visible) {
+                adjustExtremes(xAxis, groupedXData);
             }
             }
             // We calculated all group positions but we should render
             // We calculated all group positions but we should render
             // only the ones within the visible range
             // only the ones within the visible range
@@ -484,6 +566,7 @@ seriesProto.processData = function () {
                 );
                 );
                 groupedXData = croppedData.xData;
                 groupedXData = croppedData.xData;
                 groupedYData = croppedData.yData;
                 groupedYData = croppedData.yData;
+                series.cropStart = croppedData.start; // #15005
             }
             }
             // Set series props
             // Set series props
             series.processedXData = groupedXData;
             series.processedXData = groupedXData;
@@ -595,9 +678,13 @@ addEvent(Series, 'afterSetOptions', function (e) {
         if (!defaultOptions) {
         if (!defaultOptions) {
             defaultOptions = merge(commonOptions, specificOptions[type]);
             defaultOptions = merge(commonOptions, specificOptions[type]);
         }
         }
+        var rangeSelector = this.chart.rangeSelector;
         options.dataGrouping = merge(baseOptions, defaultOptions, plotOptions.series && plotOptions.series.dataGrouping, // #1228
         options.dataGrouping = merge(baseOptions, defaultOptions, plotOptions.series && plotOptions.series.dataGrouping, // #1228
         // Set by the StockChart constructor:
         // Set by the StockChart constructor:
-        plotOptions[type].dataGrouping, this.userOptions.dataGrouping);
+        plotOptions[type].dataGrouping, this.userOptions.dataGrouping, !options.isInternal &&
+            rangeSelector &&
+            isNumber(rangeSelector.selected) &&
+            rangeSelector.buttonOptions[rangeSelector.selected].dataGrouping);
     }
     }
 });
 });
 // When resetting the scale reset the hasProccessed flag to avoid taking
 // When resetting the scale reset the hasProccessed flag to avoid taking
@@ -642,7 +729,7 @@ Axis.prototype.getGroupPixelWidth = function () {
     return doGrouping ? groupPixelWidth : 0;
     return doGrouping ? groupPixelWidth : 0;
 };
 };
 /**
 /**
- * Highstock only. Force data grouping on all the axis' series.
+ * Highcharts Stock only. Force data grouping on all the axis' series.
  *
  *
  * @product highstock
  * @product highstock
  *
  *
@@ -697,7 +784,7 @@ export default dataGrouping;
 /**
 /**
  * Data grouping is the concept of sampling the data values into larger
  * Data grouping is the concept of sampling the data values into larger
  * blocks in order to ease readability and increase performance of the
  * blocks in order to ease readability and increase performance of the
- * JavaScript charts. Highstock by default applies data grouping when
+ * JavaScript charts. Highcharts Stock by default applies data grouping when
  * the points become closer than a certain pixel value, determined by
  * the points become closer than a certain pixel value, determined by
  * the `groupPixelWidth` option.
  * the `groupPixelWidth` option.
  *
  *
@@ -715,6 +802,30 @@ export default dataGrouping;
  * @requires  module:modules/datagrouping
  * @requires  module:modules/datagrouping
  * @apioption plotOptions.series.dataGrouping
  * @apioption plotOptions.series.dataGrouping
  */
  */
+/**
+ * Specifies how the points should be located on the X axis inside the group.
+ * Points that are extremes can be set separately. Available options:
+ *
+ * - `start` places the point at the beginning of the group
+ * (e.g. range 00:00:00 - 23:59:59 -> 00:00:00)
+ *
+ * - `middle` places the point in the middle of the group
+ * (e.g. range 00:00:00 - 23:59:59 -> 12:00:00)
+ *
+ * - `end` places the point at the end of the group
+ * (e.g. range 00:00:00 - 23:59:59 -> 23:59:59)
+ *
+ * @sample {highstock} stock/plotoptions/series-datagrouping-anchor
+ *         Changing the point x-coordinate inside the group.
+ *
+ * @see [dataGrouping.firstAnchor](#plotOptions.series.dataGrouping.firstAnchor)
+ * @see [dataGrouping.lastAnchor](#plotOptions.series.dataGrouping.lastAnchor)
+ *
+ * @type       {Highcharts.DataGroupingAnchor}
+ * @since 9.1.0
+ * @default    start
+ * @apioption  plotOptions.series.dataGrouping.anchor
+ */
 /**
 /**
  * The method of approximation inside a group. When for example 30 days
  * The method of approximation inside a group. When for example 30 days
  * are grouped into one month, this determines what value should represent
  * are grouped into one month, this determines what value should represent
@@ -745,6 +856,8 @@ export default dataGrouping;
  *
  *
  * @sample {highstock} stock/plotoptions/series-datagrouping-approximation
  * @sample {highstock} stock/plotoptions/series-datagrouping-approximation
  *         Approximation callback with custom data
  *         Approximation callback with custom data
+ * @sample {highstock} stock/plotoptions/series-datagrouping-simple-approximation
+ *         Simple approximation demo
  *
  *
  * @type       {Highcharts.DataGroupingApproximationValue|Function}
  * @type       {Highcharts.DataGroupingApproximationValue|Function}
  * @apioption  plotOptions.series.dataGrouping.approximation
  * @apioption  plotOptions.series.dataGrouping.approximation
@@ -788,6 +901,37 @@ export default dataGrouping;
  * @default   true
  * @default   true
  * @apioption plotOptions.series.dataGrouping.enabled
  * @apioption plotOptions.series.dataGrouping.enabled
  */
  */
+/**
+ * Specifies how the first grouped point is positioned on the xAxis.
+ * If firstAnchor and/or lastAnchor are defined, then those options take
+ * precedence over anchor for the first and/or last grouped points.
+ * Available options:
+ *
+ * -`start` places the point at the beginning of the group
+ * (e.g. range 00:00:00 - 23:59:59 -> 00:00:00)
+ *
+ * -`middle` places the point in the middle of the group
+ * (e.g. range 00:00:00 - 23:59:59 -> 12:00:00)
+ *
+ * -`end` places the point at the end of the group
+ * (e.g. range 00:00:00 - 23:59:59 -> 23:59:59)
+ *
+ * -`firstPoint` the first point in the group
+ * (e.g. points at 00:13, 00:35, 00:59 -> 00:13)
+ *
+ * -`lastPoint` the last point in the group
+ * (e.g. points at 00:13, 00:35, 00:59 -> 00:59)
+ *
+ * @sample {highstock} stock/plotoptions/series-datagrouping-first-anchor
+ *         Applying first and last anchor.
+ *
+ * @see [dataGrouping.anchor](#plotOptions.series.dataGrouping.anchor)
+ *
+ * @type       {Highcharts.DataGroupingAnchorExtremes}
+ * @since 9.1.0
+ * @default    start
+ * @apioption  plotOptions.series.dataGrouping.firstAnchor
+ */
 /**
 /**
  * When data grouping is forced, it runs no matter how small the intervals
  * When data grouping is forced, it runs no matter how small the intervals
  * are. This can be handy for example when the sum should be calculated
  * are. This can be handy for example when the sum should be calculated
@@ -829,6 +973,40 @@ export default dataGrouping;
  * @since     6.1.0
  * @since     6.1.0
  * @apioption plotOptions.series.dataGrouping.groupAll
  * @apioption plotOptions.series.dataGrouping.groupAll
  */
  */
+/**
+ * Specifies how the last grouped point is positioned on the xAxis.
+ * If firstAnchor and/or lastAnchor are defined, then those options take
+ * precedence over anchor for the first and/or last grouped points.
+ * Available options:
+ *
+ * -`start` places the point at the beginning of the group
+ * (e.g. range 00:00:00 - 23:59:59 -> 00:00:00)
+ *
+ * -`middle` places the point in the middle of the group
+ * (e.g. range 00:00:00 - 23:59:59 -> 12:00:00)
+ *
+ * -`end` places the point at the end of the group
+ * (e.g. range 00:00:00 - 23:59:59 -> 23:59:59)
+ *
+ * -`firstPoint` the first point in the group
+ * (e.g. points at 00:13, 00:35, 00:59 -> 00:13)
+ *
+ * -`lastPoint` the last point in the group
+ * (e.g. points at 00:13, 00:35, 00:59 -> 00:59)
+ *
+ * @sample {highstock} stock/plotoptions/series-datagrouping-first-anchor
+ *         Applying first and last anchor.
+ *
+ * @sample {highstock} stock/plotoptions/series-datagrouping-last-anchor
+ *         Applying the last anchor in the chart with live data.
+ *
+ * @see [dataGrouping.anchor](#plotOptions.series.dataGrouping.anchor)
+ *
+ * @type       {Highcharts.DataGroupingAnchorExtremes}
+ * @since 9.1.0
+ * @default    start
+ * @apioption  plotOptions.series.dataGrouping.lastAnchor
+ */
 /**
 /**
  * Normally, a group is indexed by the start of that group, so for example
  * Normally, a group is indexed by the start of that group, so for example
  * when 30 daily values are grouped into one month, that month's x value
  * when 30 daily values are grouped into one month, that month's x value
@@ -839,6 +1017,7 @@ export default dataGrouping;
  *
  *
  * @type      {boolean}
  * @type      {boolean}
  * @default   false
  * @default   false
+ * @deprecated
  * @apioption plotOptions.series.dataGrouping.smoothed
  * @apioption plotOptions.series.dataGrouping.smoothed
  */
  */
 /**
 /**

+ 0 - 86
node_modules/highcharts/es-modules/Extensions/Debugger.js

@@ -1,86 +0,0 @@
-/* *
- *
- *  (c) 2010-2021 Torstein Honsi
- *
- *  License: www.highcharts.com/license
- *
- *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!
- *
- * */
-'use strict';
-import H from '../Core/Globals.js';
-import Chart from '../Core/Chart/Chart.js';
-import U from '../Core/Utilities.js';
-var addEvent = U.addEvent, isNumber = U.isNumber, setOptions = U.setOptions;
-setOptions({
-    /**
-     * @optionparent chart
-     */
-    chart: {
-        /**
-         * Whether to display errors on the chart. When `false`, the errors will
-         * be shown only in the console.
-         *
-         * @sample highcharts/chart/display-errors/
-         *         Show errors on chart
-         *
-         * @since    7.0.0
-         * @requires modules/debugger
-         */
-        displayErrors: true
-    }
-});
-/* eslint-disable no-invalid-this */
-addEvent(Chart, 'displayError', function (e) {
-    var chart = this, code = e.code, msg, options = chart.options.chart, renderer = chart.renderer, chartWidth, chartHeight;
-    if (chart.errorElements) {
-        (chart.errorElements).forEach(function (el) {
-            if (el) {
-                el.destroy();
-            }
-        });
-    }
-    if (options && options.displayErrors && renderer) {
-        chart.errorElements = [];
-        msg = isNumber(code) ?
-            ('Highcharts error #' + code + ': ' +
-                H.errorMessages[code].text) :
-            code;
-        chartWidth = chart.chartWidth;
-        chartHeight = chart.chartHeight;
-        // Format msg so SVGRenderer can handle it
-        msg = msg
-            .replace(/<h1>(.*)<\/h1>/g, '<br><span style="font-size: 24px">$1</span><br>')
-            .replace(/<p>/g, '')
-            .replace(/<\/p>/g, '<br>');
-        // Render red chart frame.
-        chart.errorElements[0] = renderer.rect(2, 2, chartWidth - 4, chartHeight - 4).attr({
-            'stroke-width': 4,
-            stroke: '#ff0000',
-            zIndex: 3
-        }).add();
-        // Render error message
-        chart.errorElements[1] = renderer.label(msg, 0, 0, 'rect', void 0, void 0, void 0, void 0, 'debugger').css({
-            color: '#ffffff',
-            width: (chartWidth - 16) + 'px',
-            padding: 0
-        }).attr({
-            fill: 'rgba(255, 0, 0, 0.9)',
-            width: chartWidth,
-            padding: 8,
-            zIndex: 10
-        }).add();
-        chart.errorElements[1].attr({
-            y: chartHeight - this.errorElements[1].getBBox().height
-        });
-    }
-});
-addEvent(Chart, 'beforeRedraw', function () {
-    var errorElements = this.errorElements;
-    if (errorElements && errorElements.length) {
-        errorElements.forEach(function (el) {
-            el.destroy();
-        });
-    }
-    this.errorElements = null;
-});

+ 30 - 27
node_modules/highcharts/es-modules/Extensions/DraggablePoints.js

@@ -10,6 +10,8 @@
  *
  *
  * */
  * */
 'use strict';
 'use strict';
+import A from '../Core/Animation/AnimationUtilities.js';
+var animObject = A.animObject;
 import Chart from '../Core/Chart/Chart.js';
 import Chart from '../Core/Chart/Chart.js';
 import H from '../Core/Globals.js';
 import H from '../Core/Globals.js';
 import Point from '../Core/Series/Point.js';
 import Point from '../Core/Series/Point.js';
@@ -161,11 +163,13 @@ var columnDragDropProps = seriesTypes.column.prototype.dragDropProps = {
         },
         },
         // Position handle at bottom if column is below threshold
         // Position handle at bottom if column is below threshold
         handlePositioner: function (point) {
         handlePositioner: function (point) {
-            var bBox = point.shapeArgs || point.graphic.getBBox();
+            var bBox = (point.shapeArgs ||
+                (point.graphic && point.graphic.getBBox()) ||
+                {}), reversed = point.series.yAxis.reversed, threshold = point.series.options.threshold || 0, y = point.y || 0, bottom = (!reversed && y >= threshold) ||
+                (reversed && y < threshold);
             return {
             return {
-                x: bBox.x,
-                y: point.y >= (point.series.options.threshold || 0) ?
-                    bBox.y : bBox.y + bBox.height
+                x: bBox.x || 0,
+                y: bottom ? (bBox.y || 0) : (bBox.y || 0) + (bBox.height || 0)
             };
             };
         },
         },
         // Horizontal handle
         // Horizontal handle
@@ -240,8 +244,8 @@ if (seriesTypes.columnrange) {
             handlePositioner: function (point) {
             handlePositioner: function (point) {
                 var bBox = point.shapeArgs || point.graphic.getBBox();
                 var bBox = point.shapeArgs || point.graphic.getBBox();
                 return {
                 return {
-                    x: bBox.x,
-                    y: bBox.y + bBox.height
+                    x: bBox.x || 0,
+                    y: (bBox.y || 0) + (bBox.height || 0)
                 };
                 };
             },
             },
             handleFormatter: columnDragDropProps.y.handleFormatter,
             handleFormatter: columnDragDropProps.y.handleFormatter,
@@ -266,8 +270,8 @@ if (seriesTypes.columnrange) {
             handlePositioner: function (point) {
             handlePositioner: function (point) {
                 var bBox = point.shapeArgs || point.graphic.getBBox();
                 var bBox = point.shapeArgs || point.graphic.getBBox();
                 return {
                 return {
-                    x: bBox.x,
-                    y: bBox.y
+                    x: bBox.x || 0,
+                    y: bBox.y || 0
                 };
                 };
             },
             },
             handleFormatter: columnDragDropProps.y.handleFormatter,
             handleFormatter: columnDragDropProps.y.handleFormatter,
@@ -297,7 +301,7 @@ if (seriesTypes.boxplot) {
             resizeSide: 'bottom',
             resizeSide: 'bottom',
             handlePositioner: function (point) {
             handlePositioner: function (point) {
                 return {
                 return {
-                    x: point.shapeArgs.x,
+                    x: point.shapeArgs.x || 0,
                     y: point.lowPlot
                     y: point.lowPlot
                 };
                 };
             },
             },
@@ -322,7 +326,7 @@ if (seriesTypes.boxplot) {
             resizeSide: 'bottom',
             resizeSide: 'bottom',
             handlePositioner: function (point) {
             handlePositioner: function (point) {
                 return {
                 return {
-                    x: point.shapeArgs.x,
+                    x: point.shapeArgs.x || 0,
                     y: point.q1Plot
                     y: point.q1Plot
                 };
                 };
             },
             },
@@ -353,7 +357,7 @@ if (seriesTypes.boxplot) {
             resizeSide: 'top',
             resizeSide: 'top',
             handlePositioner: function (point) {
             handlePositioner: function (point) {
                 return {
                 return {
-                    x: point.shapeArgs.x,
+                    x: point.shapeArgs.x || 0,
                     y: point.q3Plot
                     y: point.q3Plot
                 };
                 };
             },
             },
@@ -378,7 +382,7 @@ if (seriesTypes.boxplot) {
             resizeSide: 'top',
             resizeSide: 'top',
             handlePositioner: function (point) {
             handlePositioner: function (point) {
                 return {
                 return {
-                    x: point.shapeArgs.x,
+                    x: point.shapeArgs.x || 0,
                     y: point.highPlot
                     y: point.highPlot
                 };
                 };
             },
             },
@@ -582,7 +586,7 @@ if (seriesTypes.xrange) {
     // Handle positioner logic is the same for x and x2 apart from the
     // Handle positioner logic is the same for x and x2 apart from the
     // x value. shapeArgs does not take yAxis reversed etc into account, so we
     // x value. shapeArgs does not take yAxis reversed etc into account, so we
     // use axis.toPixels to handle positioning.
     // use axis.toPixels to handle positioning.
-    var xrangeHandlePositioner = function (point, xProp) {
+    var xrangeHandlePositioner_1 = function (point, xProp) {
         var series = point.series, xAxis = series.xAxis, yAxis = series.yAxis, inverted = series.chart.inverted, 
         var series = point.series, xAxis = series.xAxis, yAxis = series.yAxis, inverted = series.chart.inverted, 
         // Using toPixels handles axis.reversed, but doesn't take
         // Using toPixels handles axis.reversed, but doesn't take
         // chart.inverted into account.
         // chart.inverted into account.
@@ -618,7 +622,7 @@ if (seriesTypes.xrange) {
             resize: true,
             resize: true,
             resizeSide: 'left',
             resizeSide: 'left',
             handlePositioner: function (point) {
             handlePositioner: function (point) {
-                return xrangeHandlePositioner(point, 'x');
+                return xrangeHandlePositioner_1(point, 'x');
             },
             },
             handleFormatter: horizHandleFormatter,
             handleFormatter: horizHandleFormatter,
             propValidate: function (val, point) {
             propValidate: function (val, point) {
@@ -640,7 +644,7 @@ if (seriesTypes.xrange) {
             resize: true,
             resize: true,
             resizeSide: 'right',
             resizeSide: 'right',
             handlePositioner: function (point) {
             handlePositioner: function (point) {
-                return xrangeHandlePositioner(point, 'x2');
+                return xrangeHandlePositioner_1(point, 'x2');
             },
             },
             handleFormatter: horizHandleFormatter,
             handleFormatter: horizHandleFormatter,
             propValidate: function (val, point) {
             propValidate: function (val, point) {
@@ -1414,13 +1418,11 @@ function getNewPoints(dragDropData, newPos) {
  * @function updatePoints
  * @function updatePoints
  * @param {Highcharts.Chart} chart
  * @param {Highcharts.Chart} chart
  *        A chart with dragDropData.newPoints.
  *        A chart with dragDropData.newPoints.
- * @param {boolean} [animate=true]
+ * @param {boolean} [animation=true]
  *        Animate updating points?
  *        Animate updating points?
  */
  */
-function updatePoints(chart, animate) {
-    var newPoints = chart.dragDropData.newPoints, animOptions = animate === false ? false : merge({
-        duration: 400 // 400 is the default in animate
-    }, chart.options.chart.animation);
+function updatePoints(chart, animation) {
+    var newPoints = chart.dragDropData.newPoints, animOptions = animObject(animation);
     chart.isDragDropAnimating = true;
     chart.isDragDropAnimating = true;
     // Update the points
     // Update the points
     objectEach(newPoints, function (newPoint) {
     objectEach(newPoints, function (newPoint) {
@@ -1631,10 +1633,10 @@ Series.prototype.getGuideBox = function (points) {
         var bBox = point.graphic && point.graphic.getBBox() || point.shapeArgs;
         var bBox = point.graphic && point.graphic.getBBox() || point.shapeArgs;
         if (bBox && (bBox.width || bBox.height || bBox.x || bBox.y)) {
         if (bBox && (bBox.width || bBox.height || bBox.x || bBox.y)) {
             changed = true;
             changed = true;
-            minX = Math.min(bBox.x, minX);
-            maxX = Math.max(bBox.x + bBox.width, maxX);
-            minY = Math.min(bBox.y, minY);
-            maxY = Math.max(bBox.y + bBox.height, maxY);
+            minX = Math.min(bBox.x || 0, minX);
+            maxX = Math.max((bBox.x || 0) + (bBox.width || 0), maxX);
+            minY = Math.min(bBox.y || 0, minY);
+            maxY = Math.max((bBox.y || 0) + (bBox.height || 0), maxY);
         }
         }
     });
     });
     return changed ? chart.renderer.rect(minX, minY, maxX - minX, maxY - minY) : chart.renderer.g();
     return changed ? chart.renderer.rect(minX, minY, maxX - minX, maxY - minY) : chart.renderer.g();
@@ -1719,7 +1721,7 @@ Point.prototype.showDragHandles = function () {
     // for it.
     // for it.
     objectEach(series.dragDropProps, function (val, key) {
     objectEach(series.dragDropProps, function (val, key) {
         var handleOptions = merge(defaultDragHandleOptions, val.handleOptions, options.dragHandle), handleAttrs = {
         var handleOptions = merge(defaultDragHandleOptions, val.handleOptions, options.dragHandle), handleAttrs = {
-            className: handleOptions.className,
+            'class': handleOptions.className,
             'stroke-width': handleOptions.lineWidth,
             'stroke-width': handleOptions.lineWidth,
             fill: handleOptions.color,
             fill: handleOptions.color,
             stroke: handleOptions.lineColor
             stroke: handleOptions.lineColor
@@ -1880,7 +1882,7 @@ function mouseMove(e, chart) {
         return;
         return;
     }
     }
     var dragDropData = chart.dragDropData, point, seriesDragDropOpts, newPoints, numNewPoints = 0, newPoint;
     var dragDropData = chart.dragDropData, point, seriesDragDropOpts, newPoints, numNewPoints = 0, newPoint;
-    if (dragDropData && dragDropData.isDragging) {
+    if (dragDropData && dragDropData.isDragging && dragDropData.point.series) {
         point = dragDropData.point;
         point = dragDropData.point;
         seriesDragDropOpts = point.series.options.dragDrop;
         seriesDragDropOpts = point.series.options.dragDrop;
         // No tooltip for dragging
         // No tooltip for dragging
@@ -1931,7 +1933,8 @@ function mouseUp(e, chart) {
     var dragDropData = chart.dragDropData;
     var dragDropData = chart.dragDropData;
     if (dragDropData &&
     if (dragDropData &&
         dragDropData.isDragging &&
         dragDropData.isDragging &&
-        dragDropData.draggedPastSensitivity) {
+        dragDropData.draggedPastSensitivity &&
+        dragDropData.point.series) {
         var point = dragDropData.point, newPoints = dragDropData.newPoints, numNewPoints = countProps(newPoints), newPoint = numNewPoints === 1 ?
         var point = dragDropData.point, newPoints = dragDropData.newPoints, numNewPoints = countProps(newPoints), newPoint = numNewPoints === 1 ?
             getFirstProp(newPoints) :
             getFirstProp(newPoints) :
             null;
             null;

+ 26 - 20
node_modules/highcharts/es-modules/Extensions/Drilldown.js

@@ -16,6 +16,8 @@ import Axis from '../Core/Axis/Axis.js';
 import Chart from '../Core/Chart/Chart.js';
 import Chart from '../Core/Chart/Chart.js';
 import Color from '../Core/Color/Color.js';
 import Color from '../Core/Color/Color.js';
 import ColumnSeries from '../Series/Column/ColumnSeries.js';
 import ColumnSeries from '../Series/Column/ColumnSeries.js';
+import F from '../Core/FormatUtilities.js';
+var format = F.format;
 import H from '../Core/Globals.js';
 import H from '../Core/Globals.js';
 var noop = H.noop;
 var noop = H.noop;
 import O from '../Core/Options.js';
 import O from '../Core/Options.js';
@@ -28,7 +30,7 @@ var seriesTypes = SeriesRegistry.seriesTypes;
 import SVGRenderer from '../Core/Renderer/SVG/SVGRenderer.js';
 import SVGRenderer from '../Core/Renderer/SVG/SVGRenderer.js';
 import Tick from '../Core/Axis/Tick.js';
 import Tick from '../Core/Axis/Tick.js';
 import U from '../Core/Utilities.js';
 import U from '../Core/Utilities.js';
-var addEvent = U.addEvent, removeEvent = U.removeEvent, extend = U.extend, fireEvent = U.fireEvent, format = U.format, merge = U.merge, objectEach = U.objectEach, pick = U.pick, syncTimeout = U.syncTimeout;
+var addEvent = U.addEvent, removeEvent = U.removeEvent, extend = U.extend, fireEvent = U.fireEvent, merge = U.merge, objectEach = U.objectEach, pick = U.pick, syncTimeout = U.syncTimeout;
 /**
 /**
  * Gets fired when a drilldown point is clicked, before the new series is added.
  * Gets fired when a drilldown point is clicked, before the new series is added.
  * Note that when clicking a category label to trigger multiple series
  * Note that when clicking a category label to trigger multiple series
@@ -547,7 +549,7 @@ Chart.prototype.addSingleSeriesAsDrilldown = function (point, ddOptions) {
     }
     }
     // Run fancy cross-animation on supported and equal types
     // Run fancy cross-animation on supported and equal types
     if (oldSeries.type === newSeries.type) {
     if (oldSeries.type === newSeries.type) {
-        newSeries.animate = newSeries.animateDrilldown || noop;
+        newSeries.animate = (newSeries.animateDrilldown || noop);
         newSeries.options.animation = true;
         newSeries.options.animation = true;
     }
     }
 };
 };
@@ -588,11 +590,15 @@ Chart.prototype.getDrilldownBackText = function () {
     }
     }
 };
 };
 Chart.prototype.showDrillUpButton = function () {
 Chart.prototype.showDrillUpButton = function () {
-    var chart = this, backText = this.getDrilldownBackText(), buttonOptions = chart.options.drilldown.drillUpButton, attr, states;
+    var chart = this, backText = this.getDrilldownBackText(), buttonOptions = chart.options.drilldown.drillUpButton, attr, states, alignTo = (buttonOptions.relativeTo === 'chart' ||
+        buttonOptions.relativeTo === 'spacingBox' ?
+        null :
+        'scrollablePlotBox');
     if (!this.drillUpButton) {
     if (!this.drillUpButton) {
         attr = buttonOptions.theme;
         attr = buttonOptions.theme;
         states = attr && attr.states;
         states = attr && attr.states;
-        this.drillUpButton = this.renderer.button(backText, null, null, function () {
+        this.drillUpButton = this.renderer
+            .button(backText, null, null, function () {
             chart.drillUp();
             chart.drillUp();
         }, attr, states && states.hover, states && states.select)
         }, attr, states && states.hover, states && states.select)
             .addClass('highcharts-drillup-button')
             .addClass('highcharts-drillup-button')
@@ -601,7 +607,7 @@ Chart.prototype.showDrillUpButton = function () {
             zIndex: 7
             zIndex: 7
         })
         })
             .add()
             .add()
-            .align(buttonOptions.position, false, buttonOptions.relativeTo || 'plotBox');
+            .align(buttonOptions.position, false, alignTo);
     }
     }
     else {
     else {
         this.drillUpButton.attr({
         this.drillUpButton.attr({
@@ -764,7 +770,7 @@ addEvent(Chart, 'render', function () {
  */
  */
 ColumnSeries.prototype.animateDrillupTo = function (init) {
 ColumnSeries.prototype.animateDrillupTo = function (init) {
     if (!init) {
     if (!init) {
-        var newSeries = this, level = newSeries.drilldownLevel;
+        var newSeries_1 = this, level_1 = newSeries_1.drilldownLevel;
         // First hide all items before animating in again
         // First hide all items before animating in again
         this.points.forEach(function (point) {
         this.points.forEach(function (point) {
             var dataLabel = point.dataLabel;
             var dataLabel = point.dataLabel;
@@ -785,18 +791,18 @@ ColumnSeries.prototype.animateDrillupTo = function (init) {
         });
         });
         // Do dummy animation on first point to get to complete
         // Do dummy animation on first point to get to complete
         syncTimeout(function () {
         syncTimeout(function () {
-            if (newSeries.points) { // May be destroyed in the meantime, #3389
+            if (newSeries_1.points) { // May be destroyed in the meantime, #3389
                 // Unable to drillup with nodes, #13711
                 // Unable to drillup with nodes, #13711
-                var pointsWithNodes = [];
-                newSeries.data.forEach(function (el) {
-                    pointsWithNodes.push(el);
+                var pointsWithNodes_1 = [];
+                newSeries_1.data.forEach(function (el) {
+                    pointsWithNodes_1.push(el);
                 });
                 });
-                if (newSeries.nodes) {
-                    pointsWithNodes = pointsWithNodes.concat(newSeries.nodes);
+                if (newSeries_1.nodes) {
+                    pointsWithNodes_1 = pointsWithNodes_1.concat(newSeries_1.nodes);
                 }
                 }
-                pointsWithNodes.forEach(function (point, i) {
+                pointsWithNodes_1.forEach(function (point, i) {
                     // Fade in other points
                     // Fade in other points
-                    var verb = i === (level && level.pointIndex) ? 'show' : 'fadeIn', inherit = verb === 'show' ? true : void 0, dataLabel = point.dataLabel;
+                    var verb = i === (level_1 && level_1.pointIndex) ? 'show' : 'fadeIn', inherit = verb === 'show' ? true : void 0, dataLabel = point.dataLabel;
                     if (point.graphic) { // #3407
                     if (point.graphic) { // #3407
                         point.graphic[verb](inherit);
                         point.graphic[verb](inherit);
                     }
                     }
@@ -903,19 +909,19 @@ if (PieSeries) {
             }
             }
             // Unable to drill down in the horizontal item series #13372
             // Unable to drill down in the horizontal item series #13372
             if (this.center) {
             if (this.center) {
-                var animateFrom = level.shapeArgs, start = animateFrom.start, angle = animateFrom.end - start, startAngle = angle / this.points.length, styledMode = this.chart.styledMode;
+                var animateFrom_1 = level.shapeArgs, start_1 = animateFrom_1.start, angle = animateFrom_1.end - start_1, startAngle_1 = angle / this.points.length, styledMode_1 = this.chart.styledMode;
                 if (!init) {
                 if (!init) {
                     this.points.forEach(function (point, i) {
                     this.points.forEach(function (point, i) {
                         var animateTo = point.shapeArgs;
                         var animateTo = point.shapeArgs;
-                        if (!styledMode) {
-                            animateFrom.fill = level.color;
+                        if (!styledMode_1) {
+                            animateFrom_1.fill = level.color;
                             animateTo.fill = point.color;
                             animateTo.fill = point.color;
                         }
                         }
                         if (point.graphic) {
                         if (point.graphic) {
                             point.graphic
                             point.graphic
-                                .attr(merge(animateFrom, {
-                                start: start + i * startAngle,
-                                end: start + (i + 1) * startAngle
+                                .attr(merge(animateFrom_1, {
+                                start: start_1 + i * startAngle_1,
+                                end: start_1 + (i + 1) * startAngle_1
                             }))[animationOptions ? 'animate' : 'attr'](animateTo, animationOptions);
                             }))[animationOptions ? 'animate' : 'attr'](animateTo, animationOptions);
                         }
                         }
                     });
                     });

+ 9 - 4
node_modules/highcharts/es-modules/Extensions/ExportData.js

@@ -18,8 +18,10 @@ import Chart from '../Core/Chart/Chart.js';
 import AST from '../Core/Renderer/HTML/AST.js';
 import AST from '../Core/Renderer/HTML/AST.js';
 import H from '../Core/Globals.js';
 import H from '../Core/Globals.js';
 var doc = H.doc, seriesTypes = H.seriesTypes, win = H.win;
 var doc = H.doc, seriesTypes = H.seriesTypes, win = H.win;
+import O from '../Core/Options.js';
+var getOptions = O.getOptions, setOptions = O.setOptions;
 import U from '../Core/Utilities.js';
 import U from '../Core/Utilities.js';
-var addEvent = U.addEvent, defined = U.defined, extend = U.extend, find = U.find, fireEvent = U.fireEvent, getOptions = U.getOptions, isNumber = U.isNumber, pick = U.pick, setOptions = U.setOptions;
+var addEvent = U.addEvent, defined = U.defined, extend = U.extend, find = U.find, fireEvent = U.fireEvent, isNumber = U.isNumber, pick = U.pick;
 /**
 /**
  * Function callback to execute while data rows are processed for exporting.
  * Function callback to execute while data rows are processed for exporting.
  * This allows the modification of data rows before processed into the final
  * This allows the modification of data rows before processed into the final
@@ -114,7 +116,7 @@ setOptions({
          * converter, as demonstrated in the sample below.
          * converter, as demonstrated in the sample below.
          *
          *
          * @sample  highcharts/export-data/categorized/ Categorized data
          * @sample  highcharts/export-data/categorized/ Categorized data
-         * @sample  highcharts/export-data/stock-timeaxis/ Highstock time axis
+         * @sample  highcharts/export-data/stock-timeaxis/ Highcharts Stock time axis
          * @sample  highcharts/export-data/xlsx/
          * @sample  highcharts/export-data/xlsx/
          *          Using a third party XLSX converter
          *          Using a third party XLSX converter
          *
          *
@@ -637,7 +639,8 @@ Chart.prototype.getTable = function (useLocalDecimalPoint) {
         var html = "<" + node.tagName;
         var html = "<" + node.tagName;
         if (attributes) {
         if (attributes) {
             Object.keys(attributes).forEach(function (key) {
             Object.keys(attributes).forEach(function (key) {
-                html += " " + key + "=\"" + attributes[key] + "\"";
+                var value = attributes[key];
+                html += " " + key + "=\"" + value + "\"";
             });
             });
         }
         }
         html += '>';
         html += '>';
@@ -954,7 +957,9 @@ Chart.prototype.toggleDataTable = function (show) {
         options.buttons &&
         options.buttons &&
         options.buttons.contextButton.menuItems, lang = this.options.lang;
         options.buttons.contextButton.menuItems, lang = this.options.lang;
     if (exportingOptions &&
     if (exportingOptions &&
-        exportingOptions.menuItemDefinitions && (lang === null || lang === void 0 ? void 0 : lang.viewData) &&
+        exportingOptions.menuItemDefinitions &&
+        lang &&
+        lang.viewData &&
         lang.hideData &&
         lang.hideData &&
         menuItems &&
         menuItems &&
         exportDivElements &&
         exportDivElements &&

+ 27 - 12
node_modules/highcharts/es-modules/Extensions/Exporting.js

@@ -298,14 +298,14 @@ merge(true, defaultOptions.navigation, {
     }
     }
 });
 });
 // Presentational attributes
 // Presentational attributes
-merge(true, defaultOptions.navigation
+merge(true, defaultOptions.navigation, 
 /**
 /**
  * A collection of options for buttons and menus appearing in the exporting
  * A collection of options for buttons and menus appearing in the exporting
  * module.
  * module.
  *
  *
  * @optionparent navigation
  * @optionparent navigation
  */
  */
-, {
+{
     /**
     /**
      * CSS styles for the popup menu appearing by default when the export
      * CSS styles for the popup menu appearing by default when the export
      * icon is clicked. This menu is rendered in HTML.
      * icon is clicked. This menu is rendered in HTML.
@@ -1109,11 +1109,21 @@ extend(Chart.prototype, /** @lends Highcharts.Chart.prototype */ {
                 options.series.push(seriesOptions);
                 options.series.push(seriesOptions);
             }
             }
         });
         });
-        // Assign an internal key to ensure a one-to-one mapping (#5924)
+        var colls = {};
         chart.axes.forEach(function (axis) {
         chart.axes.forEach(function (axis) {
+            // Assign an internal key to ensure a one-to-one mapping (#5924)
             if (!axis.userOptions.internalKey) { // #6444
             if (!axis.userOptions.internalKey) { // #6444
                 axis.userOptions.internalKey = uniqueKey();
                 axis.userOptions.internalKey = uniqueKey();
             }
             }
+            if (!axis.options.isInternal) {
+                if (!colls[axis.coll]) {
+                    colls[axis.coll] = true;
+                    options[axis.coll] = [];
+                }
+                options[axis.coll].push(merge(axis.userOptions, {
+                    visible: axis.visible
+                }));
+            }
         });
         });
         // generate the chart copy
         // generate the chart copy
         chartCopy = new Chart(options, chart.callback);
         chartCopy = new Chart(options, chart.callback);
@@ -1211,7 +1221,7 @@ extend(Chart.prototype, /** @lends Highcharts.Chart.prototype */ {
      * @sample highcharts/members/chart-exportchart-custom-background/
      * @sample highcharts/members/chart-exportchart-custom-background/
      *         Different chart background in export
      *         Different chart background in export
      * @sample stock/members/chart-exportchart/
      * @sample stock/members/chart-exportchart/
-     *         Export with Highstock
+     *         Export with Highcharts Stock
      *
      *
      * @function Highcharts.Chart#exportChart
      * @function Highcharts.Chart#exportChart
      *
      *
@@ -1435,7 +1445,9 @@ extend(Chart.prototype, /** @lends Highcharts.Chart.prototype */ {
                     button.setState(0);
                     button.setState(0);
                 }
                 }
                 chart.openMenu = false;
                 chart.openMenu = false;
-                css(chart.renderTo, { overflow: 'hidden' }); // #10361
+                // #10361, #9998
+                css(chart.renderTo, { overflow: 'hidden' });
+                css(chart.container, { overflow: 'hidden' });
                 U.clearTimeout(menu.hideTimer);
                 U.clearTimeout(menu.hideTimer);
                 fireEvent(chart, 'exportMenuHidden');
                 fireEvent(chart, 'exportMenuHidden');
             };
             };
@@ -1463,7 +1475,7 @@ extend(Chart.prototype, /** @lends Highcharts.Chart.prototype */ {
                         .menuItemDefinitions[item];
                         .menuItemDefinitions[item];
                 }
                 }
                 if (isObject(item, true)) {
                 if (isObject(item, true)) {
-                    var element;
+                    var element = void 0;
                     if (item.separator) {
                     if (item.separator) {
                         element = createElement('hr', null, null, innerMenu);
                         element = createElement('hr', null, null, innerMenu);
                     }
                     }
@@ -1527,7 +1539,9 @@ extend(Chart.prototype, /** @lends Highcharts.Chart.prototype */ {
             menuStyle.top = (y + height - menuPadding) + 'px';
             menuStyle.top = (y + height - menuPadding) + 'px';
         }
         }
         css(menu, menuStyle);
         css(menu, menuStyle);
-        css(chart.renderTo, { overflow: '' }); // #10361
+        // #10361, #9998
+        css(chart.renderTo, { overflow: '' });
+        css(chart.container, { overflow: '' });
         chart.openMenu = true;
         chart.openMenu = true;
         fireEvent(chart, 'exportMenuShown');
         fireEvent(chart, 'exportMenuShown');
     },
     },
@@ -1550,7 +1564,7 @@ extend(Chart.prototype, /** @lends Highcharts.Chart.prototype */ {
             chart.exportDivElements = [];
             chart.exportDivElements = [];
             chart.exportSVGElements = [];
             chart.exportSVGElements = [];
         }
         }
-        if (btnOptions.enabled === false) {
+        if (btnOptions.enabled === false || !btnOptions.theme) {
             return;
             return;
         }
         }
         var attr = btnOptions.theme, states = attr.states, hover = states && states.hover, select = states && states.select, callback;
         var attr = btnOptions.theme, states = attr.states, hover = states && states.hover, select = states && states.select, callback;
@@ -1801,7 +1815,8 @@ Chart.prototype.inlineStyles = function () {
                 // If parent node has the same style, it gets inherited, no need
                 // If parent node has the same style, it gets inherited, no need
                 // to inline it. Top-level props should be diffed against parent
                 // to inline it. Top-level props should be diffed against parent
                 // (#7687).
                 // (#7687).
-                if ((parentStyles[prop] !== val || node.nodeName === 'svg') &&
+                if ((parentStyles[prop] !== val ||
+                    node.nodeName === 'svg') &&
                     defaultStyles[node.nodeName][prop] !== val) {
                     defaultStyles[node.nodeName][prop] !== val) {
                     // Attributes
                     // Attributes
                     if (!inlineToAttributes ||
                     if (!inlineToAttributes ||
@@ -1969,16 +1984,16 @@ Chart.prototype.callbacks.push(function (chart) {
     // Uncomment this to see a button directly below the chart, for quick
     // Uncomment this to see a button directly below the chart, for quick
     // testing of export
     // testing of export
     /*
     /*
-    var button, viewImage, viewSource;
+    let button, viewImage, viewSource;
     if (!chart.renderer.forExport) {
     if (!chart.renderer.forExport) {
         viewImage = function () {
         viewImage = function () {
-            var div = doc.createElement('div');
+            let div = doc.createElement('div');
             div.innerHTML = chart.getSVGForExport();
             div.innerHTML = chart.getSVGForExport();
             chart.renderTo.parentNode.appendChild(div);
             chart.renderTo.parentNode.appendChild(div);
         };
         };
 
 
         viewSource = function () {
         viewSource = function () {
-            var pre = doc.createElement('pre');
+            let pre = doc.createElement('pre');
             pre.innerHTML = chart.getSVGForExport()
             pre.innerHTML = chart.getSVGForExport()
                 .replace(/</g, '\n&lt;')
                 .replace(/</g, '\n&lt;')
                 .replace(/>/g, '&gt;');
                 .replace(/>/g, '&gt;');

+ 16 - 10
node_modules/highcharts/es-modules/Extensions/FullScreen.js

@@ -109,15 +109,13 @@ var Fullscreen = /** @class */ (function () {
         }
         }
         // Unbind event as it's necessary only before exiting from fullscreen.
         // Unbind event as it's necessary only before exiting from fullscreen.
         if (fullscreen.unbindFullscreenEvent) {
         if (fullscreen.unbindFullscreenEvent) {
-            fullscreen.unbindFullscreenEvent();
+            fullscreen.unbindFullscreenEvent = fullscreen.unbindFullscreenEvent();
         }
         }
         chart.setSize(fullscreen.origWidth, fullscreen.origHeight, false);
         chart.setSize(fullscreen.origWidth, fullscreen.origHeight, false);
         fullscreen.origWidth = void 0;
         fullscreen.origWidth = void 0;
         fullscreen.origHeight = void 0;
         fullscreen.origHeight = void 0;
-        if (optionsChart) {
-            optionsChart.width = fullscreen.origWidthOption;
-            optionsChart.height = fullscreen.origHeightOption;
-        }
+        optionsChart.width = fullscreen.origWidthOption;
+        optionsChart.height = fullscreen.origHeightOption;
         fullscreen.origWidthOption = void 0;
         fullscreen.origWidthOption = void 0;
         fullscreen.origHeightOption = void 0;
         fullscreen.origHeightOption = void 0;
         fullscreen.isOpen = false;
         fullscreen.isOpen = false;
@@ -145,7 +143,7 @@ var Fullscreen = /** @class */ (function () {
         fullscreen.origHeight = chart.chartHeight;
         fullscreen.origHeight = chart.chartHeight;
         // Handle exitFullscreen() method when user clicks 'Escape' button.
         // Handle exitFullscreen() method when user clicks 'Escape' button.
         if (fullscreen.browserProps) {
         if (fullscreen.browserProps) {
-            fullscreen.unbindFullscreenEvent = addEvent(chart.container.ownerDocument, // chart's document
+            var unbindChange_1 = addEvent(chart.container.ownerDocument, // chart's document
             fullscreen.browserProps.fullscreenChange, function () {
             fullscreen.browserProps.fullscreenChange, function () {
                 // Handle lack of async of browser's fullScreenChange event.
                 // Handle lack of async of browser's fullScreenChange event.
                 if (fullscreen.isOpen) {
                 if (fullscreen.isOpen) {
@@ -158,6 +156,11 @@ var Fullscreen = /** @class */ (function () {
                     fullscreen.setButtonText();
                     fullscreen.setButtonText();
                 }
                 }
             });
             });
+            var unbindDestroy_1 = addEvent(chart, 'destroy', unbindChange_1);
+            fullscreen.unbindFullscreenEvent = function () {
+                unbindChange_1();
+                unbindDestroy_1();
+            };
             var promise = chart.renderTo[fullscreen.browserProps.requestFullscreen]();
             var promise = chart.renderTo[fullscreen.browserProps.requestFullscreen]();
             if (promise) {
             if (promise) {
                 // No dot notation because of IE8 compatibility
                 // No dot notation because of IE8 compatibility
@@ -166,7 +169,6 @@ var Fullscreen = /** @class */ (function () {
                     'Full screen is not supported inside a frame.');
                     'Full screen is not supported inside a frame.');
                 });
                 });
             }
             }
-            addEvent(chart, 'destroy', fullscreen.unbindFullscreenEvent);
         }
         }
     };
     };
     /**
     /**
@@ -181,9 +183,13 @@ var Fullscreen = /** @class */ (function () {
      * @return {void}
      * @return {void}
      */
      */
     Fullscreen.prototype.setButtonText = function () {
     Fullscreen.prototype.setButtonText = function () {
-        var _a;
-        var chart = this.chart, exportDivElements = chart.exportDivElements, exportingOptions = chart.options.exporting, menuItems = (_a = exportingOptions === null || exportingOptions === void 0 ? void 0 : exportingOptions.buttons) === null || _a === void 0 ? void 0 : _a.contextButton.menuItems, lang = chart.options.lang;
-        if ((exportingOptions === null || exportingOptions === void 0 ? void 0 : exportingOptions.menuItemDefinitions) && (lang === null || lang === void 0 ? void 0 : lang.exitFullscreen) &&
+        var chart = this.chart, exportDivElements = chart.exportDivElements, exportingOptions = chart.options.exporting, menuItems = (exportingOptions &&
+            exportingOptions.buttons &&
+            exportingOptions.buttons.contextButton.menuItems), lang = chart.options.lang;
+        if (exportingOptions &&
+            exportingOptions.menuItemDefinitions &&
+            lang &&
+            lang.exitFullscreen &&
             lang.viewFullscreen &&
             lang.viewFullscreen &&
             menuItems &&
             menuItems &&
             exportDivElements &&
             exportDivElements &&

+ 6 - 4
node_modules/highcharts/es-modules/Extensions/GeoJSON.js

@@ -9,11 +9,12 @@
  * */
  * */
 'use strict';
 'use strict';
 import Chart from '../Core/Chart/Chart.js';
 import Chart from '../Core/Chart/Chart.js';
+import F from '../Core/FormatUtilities.js';
+var format = F.format;
 import H from '../Core/Globals.js';
 import H from '../Core/Globals.js';
 var win = H.win;
 var win = H.win;
-import '../Core/Options.js';
 import U from '../Core/Utilities.js';
 import U from '../Core/Utilities.js';
-var error = U.error, extend = U.extend, format = U.format, merge = U.merge, wrap = U.wrap;
+var error = U.error, extend = U.extend, merge = U.merge, wrap = U.wrap;
 /**
 /**
  * Represents the loose structure of a geographic JSON file.
  * Represents the loose structure of a geographic JSON file.
  *
  *
@@ -197,8 +198,9 @@ Chart.prototype.transformFromLatLon = function (latLon, transform) {
      * @product    highmaps
      * @product    highmaps
      * @apioption  chart.proj4
      * @apioption  chart.proj4
      */
      */
-    var _a;
-    var proj4 = (((_a = this.userOptions.chart) === null || _a === void 0 ? void 0 : _a.proj4) || win.proj4);
+    var proj4 = (this.userOptions.chart &&
+        this.userOptions.chart.proj4 ||
+        win.proj4);
     if (!proj4) {
     if (!proj4) {
         error(21, false, this);
         error(21, false, this);
         return {
         return {

+ 2 - 2
node_modules/highcharts/es-modules/Extensions/MarkerClusters.js

@@ -439,7 +439,7 @@ function getStateId() {
 //     series: Highcharts.Series,
 //     series: Highcharts.Series,
 //     options: Highcharts.MarkerClusterLayoutAlgorithmOptions
 //     options: Highcharts.MarkerClusterLayoutAlgorithmOptions
 // ): void {
 // ): void {
-//     var chart = series.chart,
+//     let chart = series.chart,
 //         xAxis = series.xAxis,
 //         xAxis = series.xAxis,
 //         yAxis = series.yAxis,
 //         yAxis = series.yAxis,
 //         xAxisLen = series.xAxis.len,
 //         xAxisLen = series.xAxis.len,
@@ -484,7 +484,7 @@ function getStateId() {
 //                     gridOffset.plotTop + currentY < yAxisLen
 //                     gridOffset.plotTop + currentY < yAxisLen
 //                 ) {
 //                 ) {
 //                     if (j % 2 === 0 && i % 2 === 0) {
 //                     if (j % 2 === 0 && i % 2 === 0) {
-//                         var rect = chart.renderer
+//                         let rect = chart.renderer
 //                             .rect(
 //                             .rect(
 //                                 gridOffset.plotLeft + currentX,
 //                                 gridOffset.plotLeft + currentX,
 //                                 gridOffset.plotTop + currentY,
 //                                 gridOffset.plotTop + currentY,

+ 3 - 1
node_modules/highcharts/es-modules/Extensions/NoDataToDisplay.js

@@ -13,9 +13,11 @@
  * */
  * */
 import AST from '../Core/Renderer/HTML/AST.js';
 import AST from '../Core/Renderer/HTML/AST.js';
 import Chart from '../Core/Chart/Chart.js';
 import Chart from '../Core/Chart/Chart.js';
+import O from '../Core/Options.js';
+var getOptions = O.getOptions;
 import palette from '../Core/Color/Palette.js';
 import palette from '../Core/Color/Palette.js';
 import U from '../Core/Utilities.js';
 import U from '../Core/Utilities.js';
-var addEvent = U.addEvent, extend = U.extend, getOptions = U.getOptions;
+var addEvent = U.addEvent, extend = U.extend;
 var chartPrototype = Chart.prototype, defaultOptions = getOptions();
 var chartPrototype = Chart.prototype, defaultOptions = getOptions();
 // Add language option
 // Add language option
 extend(defaultOptions.lang, 
 extend(defaultOptions.lang, 

+ 5 - 4
node_modules/highcharts/es-modules/Extensions/OfflineExporting.js

@@ -12,10 +12,11 @@
 import Chart from '../Core/Chart/Chart.js';
 import Chart from '../Core/Chart/Chart.js';
 import H from '../Core/Globals.js';
 import H from '../Core/Globals.js';
 var win = H.win, doc = H.doc;
 var win = H.win, doc = H.doc;
-import '../Core/Options.js';
+import O from '../Core/Options.js';
+var getOptions = O.getOptions;
 import SVGRenderer from '../Core/Renderer/SVG/SVGRenderer.js';
 import SVGRenderer from '../Core/Renderer/SVG/SVGRenderer.js';
 import U from '../Core/Utilities.js';
 import U from '../Core/Utilities.js';
-var addEvent = U.addEvent, error = U.error, extend = U.extend, fireEvent = U.fireEvent, getOptions = U.getOptions, merge = U.merge;
+var addEvent = U.addEvent, error = U.error, extend = U.extend, fireEvent = U.fireEvent, merge = U.merge;
 import DownloadURL from '../Extensions/DownloadURL.js';
 import DownloadURL from '../Extensions/DownloadURL.js';
 var downloadURL = DownloadURL.downloadURL;
 var downloadURL = DownloadURL.downloadURL;
 var domurl = win.URL || win.webkitURL || win, 
 var domurl = win.URL || win.webkitURL || win, 
@@ -575,11 +576,11 @@ Chart.prototype.exportChartLocal = function (exportingOptions, chartOptions) {
         fallbackToExportServer('Image type not supported for this chart/browser.');
         fallbackToExportServer('Image type not supported for this chart/browser.');
         return;
         return;
     }
     }
-    chart.getSVGForLocalExport(options, chartOptions, fallbackToExportServer, svgSuccess);
+    chart.getSVGForLocalExport(options, chartOptions || {}, fallbackToExportServer, svgSuccess);
 };
 };
 // Extend the default options to use the local exporter logic
 // Extend the default options to use the local exporter logic
 merge(true, getOptions().exporting, {
 merge(true, getOptions().exporting, {
-    libURL: 'https://code.highcharts.com/9.0.1/lib/',
+    libURL: 'https://code.highcharts.com/9.1.0/lib/',
     // When offline-exporting is loaded, redefine the menu item definitions
     // When offline-exporting is loaded, redefine the menu item definitions
     // related to download.
     // related to download.
     menuItemDefinitions: {
     menuItemDefinitions: {

Некоторые файлы не были показаны из-за большого количества измененных файлов