highcharts 9.2.1 → 9.3.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +13 -6
- package/bower.json +1 -1
- package/css/annotations/popup.css +48 -8
- package/css/annotations/popup.scss +70 -22
- package/css/highcharts.css +46 -1
- package/css/highcharts.scss +40 -0
- package/css/stocktools/gui.css +1 -1
- package/css/themes/dark-unica.css +46 -1
- package/css/themes/grid-light.css +46 -1
- package/css/themes/sand-signika.css +46 -1
- package/es-modules/Accessibility/A11yI18n.js +269 -224
- package/es-modules/Accessibility/Accessibility.js +244 -129
- package/es-modules/Accessibility/AccessibilityComponent.js +78 -313
- package/es-modules/Accessibility/Components/AnnotationsA11y.js +19 -5
- package/es-modules/Accessibility/Components/ContainerComponent.js +53 -28
- package/es-modules/Accessibility/Components/InfoRegionsComponent.js +178 -120
- package/es-modules/Accessibility/Components/LegendComponent.js +251 -129
- package/es-modules/Accessibility/Components/MenuComponent.js +239 -154
- package/es-modules/Accessibility/Components/RangeSelectorComponent.js +172 -93
- package/es-modules/Accessibility/Components/SeriesComponent/ForcedMarkers.js +161 -115
- package/es-modules/Accessibility/Components/SeriesComponent/NewDataAnnouncer.js +138 -69
- package/es-modules/Accessibility/Components/SeriesComponent/SeriesComponent.js +67 -28
- package/es-modules/Accessibility/Components/SeriesComponent/SeriesDescriber.js +48 -56
- package/es-modules/Accessibility/Components/SeriesComponent/SeriesKeyboardNavigation.js +387 -343
- package/es-modules/Accessibility/Components/ZoomComponent.js +156 -70
- package/es-modules/Accessibility/FocusBorder.js +192 -152
- package/es-modules/Accessibility/HighContrastMode.js +79 -66
- package/es-modules/Accessibility/HighContrastTheme.js +10 -0
- package/es-modules/Accessibility/KeyboardNavigation.js +151 -75
- package/es-modules/Accessibility/KeyboardNavigationHandler.js +71 -44
- package/es-modules/Accessibility/Options/DeprecatedOptions.js +21 -4
- package/es-modules/Accessibility/Options/LangOptions.js +4 -5
- package/es-modules/Accessibility/Options/Options.js +32 -17
- package/es-modules/Accessibility/ProxyElement.js +218 -0
- package/es-modules/Accessibility/ProxyProvider.js +302 -0
- package/es-modules/Accessibility/Utils/Announcer.js +17 -10
- package/es-modules/Accessibility/Utils/ChartUtilities.js +55 -45
- package/es-modules/Accessibility/Utils/DOMElementProvider.js +27 -15
- package/es-modules/Accessibility/Utils/EventProvider.js +27 -17
- package/es-modules/Accessibility/Utils/HTMLUtilities.js +125 -42
- package/es-modules/Core/Animation/Fx.js +5 -14
- package/es-modules/Core/Axis/Axis.js +77 -96
- package/es-modules/Core/Axis/Axis3D.js +10 -4
- package/es-modules/Core/Axis/AxisDefaults.js +35 -24
- package/es-modules/Core/Axis/BrokenAxis.js +17 -11
- package/es-modules/Core/Axis/Color/ColorAxis.js +7 -4
- package/es-modules/Core/Axis/Color/ColorAxisComposition.js +55 -5
- package/es-modules/Core/Axis/Color/ColorAxisDefaults.js +5 -5
- package/es-modules/Core/Axis/DateTimeAxis.js +3 -14
- package/es-modules/Core/Axis/GridAxis.js +26 -16
- package/es-modules/Core/Axis/NavigatorAxis.js +0 -5
- package/es-modules/Core/Axis/OrdinalAxis.js +88 -92
- package/es-modules/Core/Axis/PlotLineOrBand/PlotLineOrBand.js +4 -5
- package/es-modules/Core/Axis/PlotLineOrBand/PlotLineOrBandAxis.js +0 -5
- package/es-modules/Core/Axis/RadialAxis.js +7 -28
- package/es-modules/Core/Axis/ScrollbarAxis.js +27 -12
- package/es-modules/Core/Axis/StackingAxis.js +2 -1
- package/es-modules/Core/Axis/Tick.js +2 -4
- package/es-modules/Core/Axis/TreeGridAxis.js +28 -19
- package/es-modules/Core/Axis/TreeGridTick.js +5 -3
- package/es-modules/Core/Axis/WaterfallAxis.js +1 -1
- package/es-modules/Core/Axis/ZAxis.js +1 -1
- package/es-modules/Core/Chart/Chart.js +44 -47
- package/es-modules/Core/Chart/Chart3D.js +23 -10
- package/es-modules/Core/Chart/ChartDefaults.js +3 -4
- package/es-modules/Core/Chart/ChartNavigationComposition.js +92 -0
- package/es-modules/Core/Chart/GanttChart.js +4 -4
- package/es-modules/Core/Chart/MapChart.js +13 -25
- package/es-modules/Core/Chart/StockChart.js +13 -316
- package/es-modules/Core/Color/Palettes.js +22 -0
- package/es-modules/Core/DefaultOptions.js +22 -19
- package/es-modules/Core/Foundation.js +39 -31
- package/es-modules/Core/Geometry/CircleUtilities.js +2 -1
- package/es-modules/Core/Globals.js +1 -1
- package/es-modules/Core/HttpUtilities.js +8 -7
- package/es-modules/Core/Legend/Legend.js +19 -16
- package/es-modules/Core/Navigator.js +41 -30
- package/es-modules/Core/Pointer.js +52 -45
- package/es-modules/Core/Renderer/HTML/AST.js +29 -14
- package/es-modules/Core/Renderer/HTML/HTMLElement.js +27 -20
- package/es-modules/Core/Renderer/HTML/HTMLRenderer.js +8 -6
- package/es-modules/Core/Renderer/RendererUtilities.js +2 -2
- package/es-modules/Core/Renderer/SVG/SVGElement.js +11 -20
- package/es-modules/Core/Renderer/SVG/SVGLabel.js +17 -8
- package/es-modules/Core/Renderer/SVG/SVGRenderer.js +25 -29
- package/es-modules/Core/Renderer/SVG/SVGRenderer3D.js +12 -5
- package/es-modules/Core/Renderer/SVG/TextBuilder.js +18 -12
- package/es-modules/Core/Responsive.js +2 -3
- package/es-modules/Core/Scrollbar.js +14 -12
- package/es-modules/Core/ScrollbarDefaults.js +10 -9
- package/es-modules/Core/Series/DataLabel.js +19 -15
- package/es-modules/Core/Series/Point.js +22 -19
- package/es-modules/Core/Series/Series.js +200 -235
- package/es-modules/Core/Series/SeriesDefaults.js +8 -8
- package/es-modules/Core/Series/SeriesRegistry.js +1 -2
- package/es-modules/Core/Time.js +14 -11
- package/es-modules/Core/Tooltip.js +63 -53
- package/es-modules/Core/Utilities.js +20 -24
- package/es-modules/Data/DataConverter.js +483 -0
- package/es-modules/Data/DataPromise.js +252 -0
- package/es-modules/Data/DataSeriesConverter.js +207 -0
- package/es-modules/Data/DataTable.js +1205 -0
- package/es-modules/Data/Modifiers/ChainModifier.js +299 -0
- package/es-modules/Data/Modifiers/DataModifier.js +303 -0
- package/es-modules/Data/Modifiers/GroupModifier.js +144 -0
- package/es-modules/Data/Modifiers/InvertModifier.js +254 -0
- package/es-modules/Data/Modifiers/RangeModifier.js +143 -0
- package/es-modules/Data/Modifiers/SeriesPointsModifier.js +110 -0
- package/es-modules/Data/Modifiers/SortModifier.js +249 -0
- package/es-modules/Data/Parsers/CSVParser.js +400 -0
- package/es-modules/Data/Parsers/DataParser.js +101 -0
- package/es-modules/Data/Parsers/GoogleSheetsParser.js +223 -0
- package/es-modules/Data/Parsers/HTMLTableParser.js +213 -0
- package/es-modules/Data/Stores/CSVStore.js +317 -0
- package/es-modules/Data/Stores/DataStore.js +276 -0
- package/es-modules/Data/Stores/GoogleSheetsStore.js +169 -0
- package/es-modules/Data/Stores/HTMLTableStore.js +353 -0
- package/es-modules/Extensions/Annotations/Annotations.js +69 -18
- package/es-modules/Extensions/Annotations/ControlPoint.js +1 -3
- package/es-modules/Extensions/Annotations/Controllables/ControllableCircle.js +1 -1
- package/es-modules/Extensions/Annotations/Controllables/ControllableEllipse.js +199 -0
- package/es-modules/Extensions/Annotations/Controllables/ControllableImage.js +1 -1
- package/es-modules/Extensions/Annotations/Controllables/ControllableLabel.js +3 -6
- package/es-modules/Extensions/Annotations/Controllables/ControllablePath.js +3 -2
- package/es-modules/Extensions/Annotations/Controllables/ControllableRect.js +1 -1
- package/es-modules/Extensions/Annotations/Mixins/ControllableMixin.js +13 -4
- package/es-modules/Extensions/Annotations/Mixins/EventEmitterMixin.js +0 -1
- package/es-modules/Extensions/Annotations/Mixins/MarkerMixin.js +5 -4
- package/es-modules/Extensions/Annotations/NavigationBindings.js +120 -53
- package/es-modules/Extensions/Annotations/Popup.js +494 -148
- package/es-modules/Extensions/Annotations/Types/BasicAnnotation.js +51 -2
- package/es-modules/Extensions/Annotations/Types/CrookedLine.js +5 -3
- package/es-modules/Extensions/Annotations/Types/ElliottWave.js +1 -1
- package/es-modules/Extensions/Annotations/Types/Fibonacci.js +2 -3
- package/es-modules/Extensions/Annotations/Types/FibonacciTimeZones.js +219 -0
- package/es-modules/Extensions/Annotations/Types/InfinityLine.js +1 -1
- package/es-modules/Extensions/Annotations/Types/Measure.js +29 -19
- package/es-modules/Extensions/Annotations/Types/Pitchfork.js +7 -6
- package/es-modules/Extensions/Annotations/Types/TimeCycles.js +211 -0
- package/es-modules/Extensions/Annotations/Types/Tunnel.js +13 -10
- package/es-modules/Extensions/Annotations/Types/VerticalLine.js +1 -1
- package/es-modules/Extensions/Boost/BoostOptions.js +2 -2
- package/es-modules/Extensions/Boost/BoostOverrides.js +6 -10
- package/es-modules/Extensions/Boost/BoostUtils.js +0 -6
- package/es-modules/Extensions/Boost/WGLRenderer.js +16 -12
- package/es-modules/Extensions/Boost/WGLShader.js +13 -11
- package/es-modules/Extensions/Boost/WGLVBuffer.js +4 -7
- package/es-modules/Extensions/BoostCanvas.js +1 -2
- package/es-modules/Extensions/CurrentDateIndication.js +2 -3
- package/es-modules/Extensions/Data.js +77 -115
- package/es-modules/Extensions/DataGrouping.js +54 -32
- package/es-modules/Extensions/Debugger/ErrorMessages.js +2 -2
- package/es-modules/Extensions/DownloadURL.js +2 -2
- package/es-modules/Extensions/DragPanes.js +1 -2
- package/es-modules/Extensions/DraggablePoints.js +7 -8
- package/es-modules/Extensions/Drilldown.js +11 -7
- package/es-modules/Extensions/ExportData.js +6 -5
- package/es-modules/Extensions/Exporting/Exporting.js +35 -48
- package/es-modules/Extensions/Exporting/ExportingDefaults.js +8 -15
- package/es-modules/Extensions/FullScreen.js +4 -3
- package/es-modules/Extensions/GeoJSON.js +42 -66
- package/es-modules/Extensions/MarkerClusters.js +118 -98
- package/es-modules/Extensions/Math3D.js +4 -4
- package/es-modules/Extensions/NoDataToDisplay.js +1 -2
- package/es-modules/Extensions/OfflineExporting/OfflineExporting.js +33 -33
- package/es-modules/Extensions/OfflineExporting/OfflineExportingDefaults.js +1 -1
- package/es-modules/Extensions/Oldie/Oldie.js +14 -79
- package/es-modules/Extensions/Oldie/VMLAxis3D.js +5 -1
- package/es-modules/Extensions/OverlappingDataLabels.js +10 -6
- package/es-modules/Extensions/Pane.js +11 -12
- package/es-modules/Extensions/ParallelCoordinates.js +5 -3
- package/es-modules/Extensions/PatternFill.js +17 -11
- package/es-modules/Extensions/Polar.js +7 -4
- package/es-modules/Extensions/PriceIndication.js +2 -1
- package/es-modules/Extensions/RangeSelector.js +22 -59
- package/es-modules/Extensions/ScrollablePlotArea.js +2 -2
- package/es-modules/Extensions/SeriesLabel.js +1 -1
- package/es-modules/Extensions/Sonification/ChartSonify.js +279 -663
- package/es-modules/Extensions/Sonification/Earcon.js +136 -102
- package/es-modules/Extensions/Sonification/Instrument.js +493 -426
- package/es-modules/Extensions/Sonification/MusicalFrequencies.js +10 -0
- package/es-modules/Extensions/Sonification/Options.js +10 -0
- package/es-modules/Extensions/Sonification/PointSonify.js +207 -152
- package/es-modules/Extensions/Sonification/SeriesSonify.js +474 -0
- package/es-modules/Extensions/Sonification/SignalHandler.js +122 -0
- package/es-modules/Extensions/Sonification/Sonification.js +27 -53
- package/es-modules/Extensions/Sonification/{Utilities.js → SonificationUtilities.js} +70 -88
- package/es-modules/Extensions/Sonification/Timeline.js +250 -567
- package/es-modules/Extensions/Sonification/TimelineEvent.js +157 -0
- package/es-modules/Extensions/Sonification/TimelinePath.js +311 -0
- package/es-modules/Extensions/Stacking.js +5 -23
- package/es-modules/Extensions/Themes/BrandDark.js +293 -0
- package/es-modules/Extensions/Themes/BrandLight.js +259 -0
- package/es-modules/Extensions/Themes/DarkUnica.js +4 -2
- package/es-modules/Extensions/Themes/Grid.js +4 -2
- package/es-modules/Extensions/Themes/GridLight.js +4 -2
- package/es-modules/Gantt/Connection.js +2 -2
- package/es-modules/Gantt/Pathfinder.js +6 -5
- package/es-modules/Gantt/PathfinderAlgorithms.js +12 -12
- package/es-modules/Maps/MapNavigation.js +30 -68
- package/es-modules/Maps/MapNavigationOptionsDefault.js +3 -0
- package/es-modules/Maps/MapPointer.js +8 -5
- package/es-modules/Maps/MapSymbols.js +23 -3
- package/es-modules/Maps/MapView.js +450 -0
- package/es-modules/Maps/MapViewOptionsDefault.js +97 -0
- package/es-modules/Maps/Projection.js +436 -0
- package/es-modules/Maps/ProjectionDefinition.js +9 -0
- package/es-modules/Maps/Projections/EqualEarth.js +42 -0
- package/es-modules/Maps/Projections/LambertConformalConic.js +52 -0
- package/es-modules/Maps/Projections/Miller.js +16 -0
- package/es-modules/Maps/Projections/Orthographic.js +26 -0
- package/es-modules/Maps/Projections/ProjectionRegistry.js +19 -0
- package/es-modules/Maps/Projections/WebMercator.js +24 -0
- package/es-modules/Series/Area/AreaSeries.js +13 -13
- package/es-modules/Series/Area3DSeries.js +4 -2
- package/es-modules/Series/AreaRange/AreaRangeSeries.js +28 -17
- package/es-modules/Series/Bellcurve/BellcurveSeries.js +4 -9
- package/es-modules/Series/BoxPlot/BoxPlotSeries.js +1 -2
- package/es-modules/Series/Bubble/BubbleLegendDefaults.js +1 -2
- package/es-modules/Series/Bubble/BubbleLegendItem.js +5 -15
- package/es-modules/Series/Bubble/BubblePoint.js +5 -0
- package/es-modules/Series/Bubble/BubbleSeries.js +90 -50
- package/es-modules/Series/Candlestick/CandlestickSeries.js +10 -19
- package/es-modules/{Mixins/CenteredSeries.js → Series/CenteredUtilities.js} +45 -23
- package/es-modules/{Mixins/ColorMapSeries.js → Series/ColorMapMixin.js} +10 -8
- package/es-modules/Series/Column/ColumnDataLabel.js +5 -5
- package/es-modules/Series/Column/ColumnSeries.js +19 -18
- package/es-modules/Series/Column3D/Column3DComposition.js +1 -2
- package/es-modules/Series/ColumnPyramid/ColumnPyramidSeries.js +11 -8
- package/es-modules/Series/ColumnRange/ColumnRangeSeries.js +2 -1
- package/es-modules/Series/Cylinder/CylinderComposition.js +36 -4
- package/es-modules/Series/DataModifyComposition.js +539 -0
- package/es-modules/Series/DependencyWheel/DependencyWheelPoint.js +2 -6
- package/es-modules/Series/DependencyWheel/DependencyWheelSeries.js +1 -1
- package/es-modules/Series/DerivedComposition.js +137 -0
- package/es-modules/Series/DrawPointComposition.js +111 -0
- package/es-modules/Series/Dumbbell/DumbbellPoint.js +0 -1
- package/es-modules/Series/Dumbbell/DumbbellSeries.js +2 -6
- package/es-modules/Series/ErrorBar/ErrorBarSeries.js +1 -2
- package/es-modules/Series/Flags/FlagsSeries.js +18 -25
- package/es-modules/Series/Flags/FlagsSymbols.js +2 -2
- package/es-modules/Series/Funnel/FunnelSeries.js +6 -5
- package/es-modules/Series/Funnel3D/Funnel3DComposition.js +14 -8
- package/es-modules/Series/Funnel3D/Funnel3DSeries.js +2 -1
- package/es-modules/Series/Gantt/GanttPoint.js +1 -1
- package/es-modules/Series/Gantt/GanttSeries.js +3 -3
- package/es-modules/Series/Gauge/GaugePoint.js +1 -1
- package/es-modules/Series/Gauge/GaugeSeries.js +7 -7
- package/es-modules/Series/HLC/HLCPoint.js +55 -0
- package/es-modules/Series/HLC/HLCSeries.js +378 -0
- package/es-modules/Series/Heatmap/HeatmapPoint.js +13 -14
- package/es-modules/Series/Heatmap/HeatmapSeries.js +24 -12
- package/es-modules/Series/HeikinAshi/HeikinAshiSeries.js +10 -9
- package/es-modules/Series/Histogram/HistogramSeries.js +7 -11
- package/es-modules/Series/HollowCandlestick/HollowCandlestickPoint.js +1 -4
- package/es-modules/Series/HollowCandlestick/HollowCandlestickSeries.js +28 -30
- package/es-modules/Series/Item/ItemSeries.js +4 -5
- package/es-modules/Series/Line/LineSeries.js +1 -2
- package/es-modules/Series/Map/MapPoint.js +27 -14
- package/es-modules/Series/Map/MapSeries.js +283 -322
- package/es-modules/Series/MapBubble/MapBubblePoint.js +0 -3
- package/es-modules/Series/MapBubble/MapBubbleSeries.js +10 -1
- package/es-modules/Series/MapLine/MapLineSeries.js +2 -4
- package/es-modules/Series/MapPoint/MapPointPoint.js +5 -1
- package/es-modules/Series/MapPoint/MapPointSeries.js +99 -14
- package/es-modules/Series/Networkgraph/DraggableNodes.js +0 -4
- package/es-modules/Series/Networkgraph/Integrations.js +8 -22
- package/es-modules/Series/Networkgraph/Networkgraph.js +6 -10
- package/es-modules/Series/Networkgraph/QuadTree.js +1 -3
- package/es-modules/{Mixins/Nodes.js → Series/NodesComposition.js} +78 -30
- package/es-modules/Series/OHLC/OHLCPoint.js +2 -7
- package/es-modules/Series/OHLC/OHLCSeries.js +55 -183
- package/es-modules/{Mixins/OnSeries.js → Series/OnSeriesComposition.js} +53 -21
- package/es-modules/Series/Organization/OrganizationSeries.js +6 -5
- package/es-modules/Series/PackedBubble/PackedBubbleComposition.js +1 -0
- package/es-modules/Series/PackedBubble/PackedBubblePoint.js +1 -1
- package/es-modules/Series/PackedBubble/PackedBubbleSeries.js +48 -10
- package/es-modules/Series/ParetoSeries/ParetoSeries.js +3 -7
- package/es-modules/Series/Pie/PieDataLabel.js +1 -2
- package/es-modules/Series/Pie/PiePoint.js +2 -2
- package/es-modules/Series/Pie/PieSeries.js +7 -8
- package/es-modules/Series/Pie3D/Pie3DComposition.js +2 -1
- package/es-modules/Series/Pie3D/Pie3DPoint.js +2 -1
- package/es-modules/Series/Pie3D/Pie3DSeries.js +1 -1
- package/es-modules/Series/Pyramid3D/Pyramid3DSeries.js +2 -1
- package/es-modules/Series/Sankey/SankeyPoint.js +0 -4
- package/es-modules/Series/Sankey/SankeySeries.js +92 -22
- package/es-modules/Series/SolidGauge/SolidGaugeComposition.js +3 -1
- package/es-modules/Series/Spline/SplineSeries.js +0 -8
- package/es-modules/Series/Sunburst/SunburstPoint.js +2 -3
- package/es-modules/Series/Sunburst/SunburstSeries.js +6 -6
- package/es-modules/Series/Sunburst/SunburstUtilities.js +3 -2
- package/es-modules/Series/Tilemap/TilemapPoint.js +2 -5
- package/es-modules/Series/Tilemap/TilemapShapes.js +0 -7
- package/es-modules/Series/Timeline/TimelineSeries.js +3 -4
- package/es-modules/{Mixins/TreeSeries.js → Series/TreeUtilities.js} +88 -78
- package/es-modules/Series/Treemap/TreemapPoint.js +2 -2
- package/es-modules/Series/Treemap/TreemapSeries.js +22 -25
- package/es-modules/Series/Variwide/VariwideSeries.js +5 -1
- package/es-modules/Series/Venn/VennPoint.js +16 -7
- package/es-modules/Series/Venn/VennSeries.js +11 -17
- package/es-modules/Series/Venn/VennUtils.js +551 -439
- package/es-modules/Series/Waterfall/WaterfallSeries.js +8 -6
- package/es-modules/Series/Windbarb/WindbarbSeries.js +23 -24
- package/es-modules/Series/Wordcloud/WordcloudPoint.js +8 -6
- package/es-modules/Series/Wordcloud/WordcloudSeries.js +26 -22
- package/es-modules/Series/Wordcloud/WordcloudUtils.js +669 -484
- package/es-modules/Series/XRange/XRangePoint.js +7 -12
- package/es-modules/Series/XRange/XRangeSeries.js +4 -20
- package/es-modules/Stock/Indicators/ABands/ABandsIndicator.js +15 -6
- package/es-modules/Stock/Indicators/AO/AOIndicator.js +2 -3
- package/es-modules/Stock/Indicators/APO/APOIndicator.js +14 -20
- package/es-modules/Stock/Indicators/Aroon/AroonIndicator.js +4 -6
- package/es-modules/Stock/Indicators/AroonOscillator/AroonOscillatorIndicator.js +11 -13
- package/es-modules/Stock/Indicators/ArrayUtilities.js +47 -0
- package/es-modules/Stock/Indicators/BB/BBIndicator.js +39 -11
- package/es-modules/Stock/Indicators/CMF/CMFIndicator.js +35 -15
- package/es-modules/Stock/Indicators/Chaikin/ChaikinIndicator.js +6 -12
- package/es-modules/Stock/Indicators/DEMA/DEMAIndicator.js +1 -11
- package/es-modules/Stock/Indicators/DMI/DMIIndicator.js +28 -16
- package/es-modules/Stock/Indicators/DisparityIndex/DisparityIndexIndicator.js +18 -11
- package/es-modules/Stock/Indicators/EMA/EMAIndicator.js +1 -3
- package/es-modules/Stock/Indicators/IKH/IKHIndicator.js +6 -6
- package/es-modules/Stock/Indicators/KeltnerChannels/KeltnerChannelsIndicator.js +23 -9
- package/es-modules/Stock/Indicators/Klinger/KlingerIndicator.js +16 -19
- package/es-modules/Stock/Indicators/LinearRegression/LinearRegression.js +32 -14
- package/es-modules/Stock/Indicators/LinearRegressionAngle/LinearRegressionAngle.js +2 -2
- package/es-modules/Stock/Indicators/LinearRegressionIntercept/LinearRegressionIntercept.js +2 -2
- package/es-modules/Stock/Indicators/LinearRegressionSlopes/LinearRegressionSlopes.js +2 -2
- package/es-modules/Stock/Indicators/MACD/MACDIndicator.js +2 -3
- package/es-modules/Stock/Indicators/MultipleLinesComposition.js +294 -0
- package/es-modules/Stock/Indicators/NATR/NATRIndicator.js +1 -3
- package/es-modules/Stock/Indicators/PC/PCIndicator.js +25 -13
- package/es-modules/Stock/Indicators/PPO/PPOIndicator.js +1 -11
- package/es-modules/Stock/Indicators/PivotPoints/PivotPointsIndicator.js +2 -1
- package/es-modules/Stock/Indicators/RSI/RSIIndicator.js +2 -1
- package/es-modules/Stock/Indicators/SMA/SMAComposition.js +0 -26
- package/es-modules/Stock/Indicators/SMA/SMAIndicator.js +32 -50
- package/es-modules/Stock/Indicators/SlowStochastic/SlowStochasticIndicator.js +0 -8
- package/es-modules/Stock/Indicators/Stochastic/StochasticIndicator.js +18 -9
- package/es-modules/Stock/Indicators/Supertrend/SupertrendIndicator.js +4 -6
- package/es-modules/Stock/Indicators/TEMA/TEMAIndicator.js +26 -11
- package/es-modules/Stock/Indicators/TRIX/TRIXIndicator.js +6 -12
- package/es-modules/Stock/Indicators/VBP/VBPIndicator.js +26 -10
- package/es-modules/Stock/Indicators/VWAP/VWAPIndicator.js +19 -7
- package/es-modules/Stock/Indicators/WilliamsR/WilliamsRIndicator.js +2 -3
- package/es-modules/Stock/StockToolsBindings.js +156 -47
- package/es-modules/Stock/StockToolsGui.js +442 -37
- package/es-modules/masters/highcharts-3d.src.js +1 -1
- package/es-modules/masters/highcharts-gantt.src.js +1 -1
- package/es-modules/masters/highcharts-more.src.js +1 -1
- package/es-modules/masters/highcharts.src.js +1 -1
- package/es-modules/masters/highmaps.src.js +1 -1
- package/es-modules/masters/highstock.src.js +1 -1
- package/es-modules/masters/indicators/acceleration-bands.src.js +1 -1
- package/es-modules/masters/indicators/accumulation-distribution.src.js +1 -1
- package/es-modules/masters/indicators/ao.src.js +1 -1
- package/es-modules/masters/indicators/apo.src.js +1 -1
- package/es-modules/masters/indicators/aroon-oscillator.src.js +1 -1
- package/es-modules/masters/indicators/aroon.src.js +1 -1
- package/es-modules/masters/indicators/atr.src.js +1 -1
- package/es-modules/masters/indicators/bollinger-bands.src.js +1 -1
- package/es-modules/masters/indicators/cci.src.js +1 -1
- package/es-modules/masters/indicators/chaikin.src.js +1 -1
- package/es-modules/masters/indicators/cmf.src.js +1 -1
- package/es-modules/masters/indicators/cmo.src.js +1 -1
- package/es-modules/masters/indicators/dema.src.js +1 -1
- package/es-modules/masters/indicators/disparity-index.src.js +1 -1
- package/es-modules/masters/indicators/dmi.src.js +1 -1
- package/es-modules/masters/indicators/dpo.src.js +1 -1
- package/es-modules/masters/indicators/ema.src.js +4 -10
- package/es-modules/masters/indicators/ichimoku-kinko-hyo.src.js +1 -1
- package/es-modules/masters/indicators/indicators-all.src.js +2 -2
- package/es-modules/masters/indicators/indicators.src.js +2 -1
- package/es-modules/masters/indicators/keltner-channels.src.js +1 -1
- package/es-modules/masters/indicators/klinger.src.js +1 -1
- package/es-modules/masters/indicators/macd.src.js +1 -1
- package/es-modules/masters/indicators/mfi.src.js +1 -1
- package/es-modules/masters/indicators/momentum.src.js +1 -1
- package/es-modules/masters/indicators/natr.src.js +1 -1
- package/es-modules/masters/indicators/obv.src.js +1 -1
- package/es-modules/masters/indicators/pivot-points.src.js +1 -1
- package/es-modules/masters/indicators/ppo.src.js +1 -1
- package/es-modules/masters/indicators/price-channel.src.js +1 -1
- package/es-modules/masters/indicators/price-envelopes.src.js +1 -1
- package/es-modules/masters/indicators/psar.src.js +1 -1
- package/es-modules/masters/indicators/regressions.src.js +1 -1
- package/es-modules/masters/indicators/roc.src.js +1 -1
- package/es-modules/masters/indicators/rsi.src.js +1 -1
- package/es-modules/masters/indicators/slow-stochastic.src.js +1 -1
- package/es-modules/masters/indicators/stochastic.src.js +1 -1
- package/es-modules/masters/indicators/supertrend.src.js +1 -1
- package/es-modules/masters/indicators/tema.src.js +1 -1
- package/es-modules/masters/indicators/trendline.src.js +1 -1
- package/es-modules/masters/indicators/trix.src.js +1 -1
- package/es-modules/masters/indicators/volume-by-price.src.js +1 -1
- package/es-modules/masters/indicators/vwap.src.js +1 -1
- package/es-modules/masters/indicators/williams-r.src.js +1 -1
- package/es-modules/masters/indicators/wma.src.js +1 -1
- package/es-modules/masters/indicators/zigzag.src.js +1 -1
- package/es-modules/masters/modules/accessibility.src.js +16 -2
- package/es-modules/masters/modules/annotations-advanced.src.js +3 -1
- package/es-modules/masters/modules/annotations.src.js +1 -1
- package/es-modules/masters/modules/arrow-symbols.src.js +1 -1
- package/es-modules/masters/modules/boost-canvas.src.js +1 -1
- package/es-modules/masters/modules/boost.src.js +1 -1
- package/es-modules/masters/modules/broken-axis.src.js +1 -1
- package/es-modules/masters/modules/bullet.src.js +1 -1
- package/es-modules/masters/modules/coloraxis.src.js +1 -1
- package/es-modules/masters/modules/current-date-indicator.src.js +1 -1
- package/es-modules/masters/modules/cylinder.src.js +1 -1
- package/es-modules/masters/modules/data.src.js +6 -3
- package/es-modules/masters/modules/datagrouping.src.js +1 -1
- package/es-modules/masters/modules/debugger.src.js +1 -1
- package/es-modules/masters/modules/dependency-wheel.src.js +1 -1
- package/es-modules/masters/modules/dotplot.src.js +1 -1
- package/es-modules/masters/modules/drag-panes.src.js +1 -1
- package/es-modules/masters/modules/draggable-points.src.js +1 -1
- package/es-modules/masters/modules/drilldown.src.js +1 -1
- package/es-modules/masters/modules/dumbbell.src.js +1 -1
- package/es-modules/masters/modules/export-data.src.js +1 -1
- package/es-modules/masters/modules/exporting.src.js +1 -1
- package/es-modules/masters/modules/full-screen.src.js +1 -1
- package/es-modules/masters/modules/funnel.src.js +1 -1
- package/es-modules/masters/modules/funnel3d.src.js +1 -1
- package/es-modules/masters/modules/gantt.src.js +1 -1
- package/es-modules/masters/modules/grid-axis.src.js +1 -1
- package/es-modules/masters/modules/heatmap.src.js +1 -2
- package/es-modules/masters/modules/heikinashi.src.js +1 -1
- package/es-modules/masters/modules/histogram-bellcurve.src.js +1 -1
- package/es-modules/masters/modules/hollowcandlestick.src.js +1 -1
- package/es-modules/masters/modules/item-series.src.js +1 -1
- package/es-modules/masters/modules/lollipop.src.js +1 -1
- package/es-modules/masters/modules/map.src.js +1 -3
- package/es-modules/masters/modules/marker-clusters.src.js +1 -1
- package/es-modules/masters/modules/networkgraph.src.js +1 -1
- package/es-modules/masters/modules/no-data-to-display.src.js +1 -1
- package/es-modules/masters/modules/offline-exporting.src.js +1 -1
- package/es-modules/masters/modules/oldie-polyfills.src.js +1 -1
- package/es-modules/masters/modules/oldie.src.js +1 -1
- package/es-modules/masters/modules/organization.src.js +1 -1
- package/es-modules/masters/modules/overlapping-datalabels.src.js +1 -1
- package/es-modules/masters/modules/parallel-coordinates.src.js +1 -1
- package/es-modules/masters/modules/pareto.src.js +1 -1
- package/es-modules/masters/modules/pathfinder.src.js +1 -1
- package/es-modules/masters/modules/pattern-fill.src.js +1 -1
- package/es-modules/masters/modules/price-indicator.src.js +1 -1
- package/es-modules/masters/modules/pyramid3d.src.js +1 -1
- package/es-modules/masters/modules/sankey.src.js +1 -1
- package/es-modules/masters/modules/series-label.src.js +1 -1
- package/es-modules/masters/modules/solid-gauge.src.js +1 -1
- package/es-modules/masters/modules/sonification.src.js +33 -2
- package/es-modules/masters/modules/static-scale.src.js +1 -1
- package/es-modules/masters/modules/stock-tools.src.js +1 -1
- package/es-modules/masters/modules/stock.src.js +4 -1
- package/es-modules/masters/modules/streamgraph.src.js +1 -1
- package/es-modules/masters/modules/sunburst.src.js +1 -1
- package/es-modules/masters/modules/tilemap.src.js +1 -1
- package/es-modules/masters/modules/timeline.src.js +1 -1
- package/es-modules/masters/modules/treegrid.src.js +1 -1
- package/es-modules/masters/modules/treemap.src.js +1 -1
- package/es-modules/masters/modules/variable-pie.src.js +1 -1
- package/es-modules/masters/modules/variwide.src.js +1 -1
- package/es-modules/masters/modules/vector.src.js +1 -1
- package/es-modules/masters/modules/venn.src.js +1 -1
- package/es-modules/masters/modules/windbarb.src.js +1 -1
- package/es-modules/masters/modules/wordcloud.src.js +1 -1
- package/es-modules/masters/modules/xrange.src.js +1 -1
- package/es-modules/masters/themes/avocado.src.js +1 -1
- package/es-modules/masters/themes/brand-dark.src.js +14 -0
- package/es-modules/masters/themes/brand-light.src.js +14 -0
- package/es-modules/masters/themes/dark-blue.src.js +1 -1
- package/es-modules/masters/themes/dark-green.src.js +1 -1
- package/es-modules/masters/themes/dark-unica.src.js +1 -1
- package/es-modules/masters/themes/gray.src.js +1 -1
- package/es-modules/masters/themes/grid-light.src.js +1 -1
- package/es-modules/masters/themes/grid.src.js +1 -1
- package/es-modules/masters/themes/high-contrast-dark.src.js +1 -1
- package/es-modules/masters/themes/high-contrast-light.src.js +1 -1
- package/es-modules/masters/themes/sand-signika.src.js +1 -1
- package/es-modules/masters/themes/skies.src.js +1 -1
- package/es-modules/masters/themes/sunset.src.js +1 -1
- package/highcharts-3d.js +1 -1
- package/highcharts-3d.js.map +1 -1
- package/highcharts-3d.src.js +65 -35
- package/highcharts-gantt.js +800 -803
- package/highcharts-gantt.js.map +1 -1
- package/highcharts-gantt.src.js +1359 -1429
- package/highcharts-more.js +194 -193
- package/highcharts-more.js.map +1 -1
- package/highcharts-more.src.js +280 -222
- package/highcharts.d.ts +10228 -768
- package/highcharts.js +585 -588
- package/highcharts.js.map +1 -1
- package/highcharts.src.d.ts +10228 -768
- package/highcharts.src.js +995 -1066
- package/highmaps.js +727 -707
- package/highmaps.js.map +1 -1
- package/highmaps.src.js +3243 -2135
- package/highstock.js +788 -783
- package/highstock.js.map +1 -1
- package/highstock.src.js +2492 -1981
- package/indicators/acceleration-bands.d.ts +17 -1
- package/indicators/acceleration-bands.js +11 -9
- package/indicators/acceleration-bands.js.map +1 -1
- package/indicators/acceleration-bands.src.d.ts +17 -1
- package/indicators/acceleration-bands.src.js +238 -112
- package/indicators/accumulation-distribution.js +1 -1
- package/indicators/accumulation-distribution.src.js +1 -1
- package/indicators/ao.js +6 -6
- package/indicators/ao.js.map +1 -1
- package/indicators/ao.src.js +4 -4
- package/indicators/apo.js +5 -6
- package/indicators/apo.js.map +1 -1
- package/indicators/apo.src.js +16 -84
- package/indicators/aroon-oscillator.d.ts +17 -1
- package/indicators/aroon-oscillator.js +10 -9
- package/indicators/aroon-oscillator.js.map +1 -1
- package/indicators/aroon-oscillator.src.d.ts +17 -1
- package/indicators/aroon-oscillator.src.js +230 -177
- package/indicators/aroon.d.ts +17 -1
- package/indicators/aroon.js +11 -9
- package/indicators/aroon.js.map +1 -1
- package/indicators/aroon.src.d.ts +17 -1
- package/indicators/aroon.src.js +227 -112
- package/indicators/atr.js +1 -1
- package/indicators/atr.src.js +1 -1
- package/indicators/bollinger-bands.d.ts +17 -1
- package/indicators/bollinger-bands.js +12 -9
- package/indicators/bollinger-bands.js.map +1 -1
- package/indicators/bollinger-bands.src.d.ts +17 -1
- package/indicators/bollinger-bands.src.js +262 -117
- package/indicators/cci.js +1 -1
- package/indicators/cci.src.js +1 -1
- package/indicators/chaikin.js +8 -9
- package/indicators/chaikin.js.map +1 -1
- package/indicators/chaikin.src.js +8 -76
- package/indicators/cmf.js +1 -1
- package/indicators/cmf.js.map +1 -1
- package/indicators/cmf.src.js +36 -16
- package/indicators/cmo.js +1 -1
- package/indicators/cmo.src.js +1 -1
- package/indicators/dema.js +5 -6
- package/indicators/dema.js.map +1 -1
- package/indicators/dema.src.js +3 -75
- package/indicators/disparity-index.js +6 -7
- package/indicators/disparity-index.js.map +1 -1
- package/indicators/disparity-index.src.js +20 -74
- package/indicators/dmi.js +12 -11
- package/indicators/dmi.js.map +1 -1
- package/indicators/dmi.src.js +252 -121
- package/indicators/dpo.js +1 -1
- package/indicators/dpo.src.js +1 -1
- package/indicators/ema.js +1 -13
- package/indicators/ema.js.map +1 -1
- package/indicators/ema.src.js +7 -188
- package/indicators/ichimoku-kinko-hyo.js +1 -1
- package/indicators/ichimoku-kinko-hyo.js.map +1 -1
- package/indicators/ichimoku-kinko-hyo.src.js +7 -7
- package/indicators/indicators-all.d.ts +17 -1
- package/indicators/indicators-all.js +198 -203
- package/indicators/indicators-all.js.map +1 -1
- package/indicators/indicators-all.src.d.ts +17 -1
- package/indicators/indicators-all.src.js +892 -777
- package/indicators/indicators.js +12 -12
- package/indicators/indicators.js.map +1 -1
- package/indicators/indicators.src.js +213 -144
- package/indicators/keltner-channels.d.ts +17 -1
- package/indicators/keltner-channels.js +11 -10
- package/indicators/keltner-channels.js.map +1 -1
- package/indicators/keltner-channels.src.d.ts +17 -1
- package/indicators/keltner-channels.src.js +246 -118
- package/indicators/klinger.js +14 -13
- package/indicators/klinger.js.map +1 -1
- package/indicators/klinger.src.js +239 -187
- package/indicators/macd.js +2 -2
- package/indicators/macd.js.map +1 -1
- package/indicators/macd.src.js +3 -4
- package/indicators/mfi.js +1 -1
- package/indicators/mfi.src.js +1 -1
- package/indicators/momentum.js +1 -1
- package/indicators/momentum.src.js +1 -1
- package/indicators/natr.js +3 -3
- package/indicators/natr.js.map +1 -1
- package/indicators/natr.src.js +2 -4
- package/indicators/obv.js +1 -1
- package/indicators/obv.src.js +1 -1
- package/indicators/pivot-points.js +1 -1
- package/indicators/pivot-points.js.map +1 -1
- package/indicators/pivot-points.src.js +3 -2
- package/indicators/ppo.js +5 -6
- package/indicators/ppo.js.map +1 -1
- package/indicators/ppo.src.js +3 -75
- package/indicators/price-channel.d.ts +17 -1
- package/indicators/price-channel.js +11 -9
- package/indicators/price-channel.js.map +1 -1
- package/indicators/price-channel.src.d.ts +17 -1
- package/indicators/price-channel.src.js +288 -168
- package/indicators/price-envelopes.js +1 -1
- package/indicators/price-envelopes.src.js +1 -1
- package/indicators/psar.js +1 -1
- package/indicators/psar.src.js +1 -1
- package/indicators/regressions.js +1 -1
- package/indicators/regressions.js.map +1 -1
- package/indicators/regressions.src.js +39 -21
- package/indicators/roc.js +1 -1
- package/indicators/roc.src.js +1 -1
- package/indicators/rsi.js +1 -1
- package/indicators/rsi.js.map +1 -1
- package/indicators/rsi.src.js +3 -2
- package/indicators/slow-stochastic.js +5 -6
- package/indicators/slow-stochastic.js.map +1 -1
- package/indicators/slow-stochastic.src.js +2 -72
- package/indicators/stochastic.d.ts +17 -1
- package/indicators/stochastic.js +12 -10
- package/indicators/stochastic.js.map +1 -1
- package/indicators/stochastic.src.d.ts +17 -1
- package/indicators/stochastic.src.js +282 -165
- package/indicators/supertrend.js +10 -10
- package/indicators/supertrend.js.map +1 -1
- package/indicators/supertrend.src.js +6 -7
- package/indicators/tema.js +6 -7
- package/indicators/tema.js.map +1 -1
- package/indicators/tema.src.js +28 -75
- package/indicators/trendline.js +1 -1
- package/indicators/trendline.src.js +1 -1
- package/indicators/trix.js +4 -5
- package/indicators/trix.js.map +1 -1
- package/indicators/trix.src.js +8 -76
- package/indicators/volume-by-price.js +16 -16
- package/indicators/volume-by-price.js.map +1 -1
- package/indicators/volume-by-price.src.js +27 -10
- package/indicators/vwap.js +1 -1
- package/indicators/vwap.js.map +1 -1
- package/indicators/vwap.src.js +20 -8
- package/indicators/williams-r.js +5 -6
- package/indicators/williams-r.js.map +1 -1
- package/indicators/williams-r.src.js +41 -51
- package/indicators/wma.js +1 -1
- package/indicators/wma.src.js +1 -1
- package/indicators/zigzag.js +1 -1
- package/indicators/zigzag.src.js +1 -1
- package/modules/accessibility.d.ts +0 -30
- package/modules/accessibility.js +240 -216
- package/modules/accessibility.js.map +1 -1
- package/modules/accessibility.src.d.ts +0 -30
- package/modules/accessibility.src.js +7807 -6400
- package/modules/annotations-advanced.d.ts +30 -0
- package/modules/annotations-advanced.js +192 -165
- package/modules/annotations-advanced.js.map +1 -1
- package/modules/annotations-advanced.src.d.ts +30 -0
- package/modules/annotations-advanced.src.js +1716 -416
- package/modules/annotations.js +125 -110
- package/modules/annotations.js.map +1 -1
- package/modules/annotations.src.js +1059 -304
- package/modules/arrow-symbols.js +1 -1
- package/modules/arrow-symbols.src.js +1 -1
- package/modules/boost-canvas.js +15 -15
- package/modules/boost-canvas.js.map +1 -1
- package/modules/boost-canvas.src.js +3 -3
- package/modules/boost.js +79 -79
- package/modules/boost.js.map +1 -1
- package/modules/boost.src.js +42 -51
- package/modules/broken-axis.js +1 -1
- package/modules/broken-axis.js.map +1 -1
- package/modules/broken-axis.src.js +18 -12
- package/modules/bullet.js +1 -1
- package/modules/bullet.src.js +1 -1
- package/modules/coloraxis.js +24 -24
- package/modules/coloraxis.js.map +1 -1
- package/modules/coloraxis.src.js +77 -103
- package/modules/current-date-indicator.js +4 -4
- package/modules/current-date-indicator.js.map +1 -1
- package/modules/current-date-indicator.src.js +4 -4
- package/modules/cylinder.js +1 -1
- package/modules/cylinder.js.map +1 -1
- package/modules/cylinder.src.js +37 -5
- package/modules/data.d.ts +6 -6
- package/modules/data.js +32 -32
- package/modules/data.js.map +1 -1
- package/modules/data.src.d.ts +6 -6
- package/modules/data.src.js +94 -140
- package/modules/datagrouping.js +20 -20
- package/modules/datagrouping.js.map +1 -1
- package/modules/datagrouping.src.js +56 -33
- package/modules/debugger.js +3 -3
- package/modules/debugger.js.map +1 -1
- package/modules/debugger.src.js +3 -3
- package/modules/dependency-wheel.js +11 -11
- package/modules/dependency-wheel.js.map +1 -1
- package/modules/dependency-wheel.src.js +5 -8
- package/modules/dotplot.js +1 -1
- package/modules/dotplot.src.js +1 -1
- package/modules/drag-panes.js +8 -8
- package/modules/drag-panes.js.map +1 -1
- package/modules/drag-panes.src.js +3 -3
- package/modules/draggable-points.js +1 -1
- package/modules/draggable-points.js.map +1 -1
- package/modules/draggable-points.src.js +8 -9
- package/modules/drilldown.js +24 -24
- package/modules/drilldown.js.map +1 -1
- package/modules/drilldown.src.js +13 -8
- package/modules/dumbbell.js +17 -17
- package/modules/dumbbell.js.map +1 -1
- package/modules/dumbbell.src.js +4 -8
- package/modules/export-data.js +19 -19
- package/modules/export-data.js.map +1 -1
- package/modules/export-data.src.js +9 -8
- package/modules/exporting.js +39 -38
- package/modules/exporting.js.map +1 -1
- package/modules/exporting.src.js +134 -116
- package/modules/full-screen.js +1 -1
- package/modules/full-screen.js.map +1 -1
- package/modules/full-screen.src.js +5 -4
- package/modules/funnel.js +12 -12
- package/modules/funnel.js.map +1 -1
- package/modules/funnel.src.js +9 -6
- package/modules/funnel3d.js +1 -1
- package/modules/funnel3d.js.map +1 -1
- package/modules/funnel3d.src.js +17 -10
- package/modules/gantt.js +217 -218
- package/modules/gantt.js.map +1 -1
- package/modules/gantt.src.js +364 -363
- package/modules/grid-axis.js +1 -1
- package/modules/grid-axis.js.map +1 -1
- package/modules/grid-axis.src.js +27 -19
- package/modules/heatmap.js +39 -39
- package/modules/heatmap.js.map +1 -1
- package/modules/heatmap.src.js +132 -141
- package/modules/heikinashi.js +1 -1
- package/modules/heikinashi.js.map +1 -1
- package/modules/heikinashi.src.js +12 -10
- package/modules/histogram-bellcurve.js +13 -13
- package/modules/histogram-bellcurve.js.map +1 -1
- package/modules/histogram-bellcurve.src.js +97 -91
- package/modules/hollowcandlestick.js +9 -9
- package/modules/hollowcandlestick.js.map +1 -1
- package/modules/hollowcandlestick.src.js +31 -35
- package/modules/item-series.js +6 -6
- package/modules/item-series.js.map +1 -1
- package/modules/item-series.src.js +6 -6
- package/modules/lollipop.js +1 -1
- package/modules/lollipop.src.js +1 -1
- package/modules/map.d.ts +138 -14
- package/modules/map.js +144 -122
- package/modules/map.js.map +1 -1
- package/modules/map.src.d.ts +138 -14
- package/modules/map.src.js +2253 -1074
- package/modules/marker-clusters.js +36 -36
- package/modules/marker-clusters.js.map +1 -1
- package/modules/marker-clusters.src.js +176 -143
- package/modules/networkgraph.d.ts +12 -1
- package/modules/networkgraph.js +49 -49
- package/modules/networkgraph.js.map +1 -1
- package/modules/networkgraph.src.d.ts +12 -1
- package/modules/networkgraph.src.js +103 -78
- package/modules/no-data-to-display.js +5 -5
- package/modules/no-data-to-display.js.map +1 -1
- package/modules/no-data-to-display.src.js +3 -3
- package/modules/offline-exporting.js +18 -17
- package/modules/offline-exporting.js.map +1 -1
- package/modules/offline-exporting.src.js +39 -44
- package/modules/oldie-polyfills.js +1 -1
- package/modules/oldie-polyfills.src.js +1 -1
- package/modules/oldie.js +26 -26
- package/modules/oldie.js.map +1 -1
- package/modules/oldie.src.js +21 -81
- package/modules/organization.js +13 -13
- package/modules/organization.js.map +1 -1
- package/modules/organization.src.js +8 -6
- package/modules/overlapping-datalabels.js +1 -1
- package/modules/overlapping-datalabels.src.js +1 -1
- package/modules/parallel-coordinates.js +1 -1
- package/modules/parallel-coordinates.js.map +1 -1
- package/modules/parallel-coordinates.src.js +6 -4
- package/modules/pareto.js +7 -7
- package/modules/pareto.js.map +1 -1
- package/modules/pareto.src.js +89 -78
- package/modules/pathfinder.js +1 -1
- package/modules/pathfinder.js.map +1 -1
- package/modules/pathfinder.src.js +21 -20
- package/modules/pattern-fill.js +1 -1
- package/modules/pattern-fill.js.map +1 -1
- package/modules/pattern-fill.src.js +18 -12
- package/modules/price-indicator.js +1 -1
- package/modules/price-indicator.js.map +1 -1
- package/modules/price-indicator.src.js +3 -2
- package/modules/pyramid3d.js +1 -1
- package/modules/pyramid3d.js.map +1 -1
- package/modules/pyramid3d.src.js +3 -2
- package/modules/sankey.d.ts +12 -1
- package/modules/sankey.js +29 -29
- package/modules/sankey.js.map +1 -1
- package/modules/sankey.src.d.ts +12 -1
- package/modules/sankey.src.js +307 -181
- package/modules/series-label.js +1 -1
- package/modules/series-label.js.map +1 -1
- package/modules/series-label.src.js +2 -2
- package/modules/solid-gauge.js +1 -1
- package/modules/solid-gauge.js.map +1 -1
- package/modules/solid-gauge.src.js +17 -2
- package/modules/sonification.js +59 -55
- package/modules/sonification.js.map +1 -1
- package/modules/sonification.src.js +3093 -2594
- package/modules/static-scale.js +1 -1
- package/modules/static-scale.src.js +1 -1
- package/modules/stock-tools.js +178 -163
- package/modules/stock-tools.js.map +1 -1
- package/modules/stock-tools.src.js +1136 -229
- package/modules/stock.d.ts +39 -6
- package/modules/stock.js +204 -196
- package/modules/stock.js.map +1 -1
- package/modules/stock.src.d.ts +39 -6
- package/modules/stock.src.js +1822 -1240
- package/modules/streamgraph.js +1 -1
- package/modules/streamgraph.src.js +1 -1
- package/modules/sunburst.js +60 -60
- package/modules/sunburst.js.map +1 -1
- package/modules/sunburst.src.js +281 -248
- package/modules/tilemap.js +17 -17
- package/modules/tilemap.js.map +1 -1
- package/modules/tilemap.src.js +3 -13
- package/modules/timeline.js +18 -18
- package/modules/timeline.js.map +1 -1
- package/modules/timeline.src.js +5 -5
- package/modules/treegrid.js +56 -57
- package/modules/treegrid.js.map +1 -1
- package/modules/treegrid.src.js +201 -169
- package/modules/treemap.js +41 -41
- package/modules/treemap.js.map +1 -1
- package/modules/treemap.src.js +266 -232
- package/modules/variable-pie.js +1 -1
- package/modules/variable-pie.src.js +1 -1
- package/modules/variwide.js +1 -1
- package/modules/variwide.js.map +1 -1
- package/modules/variwide.src.js +7 -3
- package/modules/vector.js +1 -1
- package/modules/vector.src.js +1 -1
- package/modules/venn.js +31 -31
- package/modules/venn.js.map +1 -1
- package/modules/venn.src.js +740 -731
- package/modules/windbarb.js +15 -15
- package/modules/windbarb.js.map +1 -1
- package/modules/windbarb.src.js +90 -62
- package/modules/wordcloud.js +23 -24
- package/modules/wordcloud.js.map +1 -1
- package/modules/wordcloud.src.js +898 -954
- package/modules/xrange.js +2 -2
- package/modules/xrange.js.map +1 -1
- package/modules/xrange.src.js +12 -33
- package/package.json +1 -1
- package/themes/avocado.js +1 -1
- package/themes/avocado.src.js +1 -1
- package/themes/brand-dark.js +15 -0
- package/themes/brand-dark.js.map +1 -0
- package/themes/brand-dark.src.js +328 -0
- package/themes/brand-light.js +15 -0
- package/themes/brand-light.js.map +1 -0
- package/themes/brand-light.src.js +294 -0
- package/themes/dark-blue.js +1 -1
- package/themes/dark-blue.src.js +1 -1
- package/themes/dark-green.js +1 -1
- package/themes/dark-green.src.js +1 -1
- package/themes/dark-unica.js +1 -1
- package/themes/dark-unica.js.map +1 -1
- package/themes/dark-unica.src.js +5 -3
- package/themes/gray.js +1 -1
- package/themes/gray.src.js +1 -1
- package/themes/grid-light.js +1 -1
- package/themes/grid-light.js.map +1 -1
- package/themes/grid-light.src.js +5 -3
- package/themes/grid.js +1 -1
- package/themes/grid.js.map +1 -1
- package/themes/grid.src.js +5 -3
- package/themes/high-contrast-dark.js +1 -1
- package/themes/high-contrast-dark.src.js +1 -1
- package/themes/high-contrast-light.js +1 -1
- package/themes/high-contrast-light.src.js +1 -1
- package/themes/sand-signika.js +1 -1
- package/themes/sand-signika.src.js +1 -1
- package/themes/skies.js +1 -1
- package/themes/skies.src.js +1 -1
- package/themes/sunset.js +1 -1
- package/themes/sunset.src.js +1 -1
- package/es-modules/Core/Axis/MapAxis.js +0 -157
- package/es-modules/Core/Color/Palette.js +0 -82
- package/es-modules/Extensions/Sonification/InstrumentDefinitions.js +0 -32
- package/es-modules/Mixins/ColorSeries.js +0 -77
- package/es-modules/Mixins/DerivedSeries.js +0 -118
- package/es-modules/Mixins/DrawPoint.js +0 -81
- package/es-modules/Mixins/IndicatorRequired.js +0 -56
- package/es-modules/Mixins/MultipleLines.js +0 -181
- package/es-modules/Mixins/Navigation.js +0 -54
- package/es-modules/Mixins/NelderMead.js +0 -132
- package/es-modules/Mixins/Polygon.js +0 -259
- package/es-modules/Mixins/ReduceArray.js +0 -54
|
@@ -9,525 +9,710 @@
|
|
|
9
9
|
*
|
|
10
10
|
* !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!
|
|
11
11
|
* */
|
|
12
|
-
|
|
13
|
-
|
|
12
|
+
'use strict';
|
|
13
|
+
import H from '../../Core/Globals.js';
|
|
14
|
+
var deg2rad = H.deg2rad;
|
|
14
15
|
import U from '../../Core/Utilities.js';
|
|
15
16
|
var extend = U.extend, find = U.find, isNumber = U.isNumber, isObject = U.isObject, merge = U.merge;
|
|
16
17
|
/* *
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
18
|
+
*
|
|
19
|
+
* Functions
|
|
20
|
+
*
|
|
21
|
+
* */
|
|
22
|
+
/* eslint-disable valid-jsdoc */
|
|
23
|
+
/**
|
|
24
|
+
* Detects if there is a collision between two rectangles.
|
|
25
|
+
*
|
|
26
|
+
* @private
|
|
27
|
+
* @function isRectanglesIntersecting
|
|
28
|
+
*
|
|
29
|
+
* @param {Highcharts.PolygonBoxObject} r1
|
|
30
|
+
* First rectangle.
|
|
31
|
+
*
|
|
32
|
+
* @param {Highcharts.PolygonBoxObject} r2
|
|
33
|
+
* Second rectangle.
|
|
34
|
+
*
|
|
35
|
+
* @return {boolean}
|
|
36
|
+
* Returns true if the rectangles overlap.
|
|
37
|
+
*/
|
|
38
|
+
function isRectanglesIntersecting(r1, r2) {
|
|
39
|
+
return !(r2.left > r1.right ||
|
|
40
|
+
r2.right < r1.left ||
|
|
41
|
+
r2.top > r1.bottom ||
|
|
42
|
+
r2.bottom < r1.top);
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Calculates the normals to a line between two points.
|
|
46
|
+
*
|
|
47
|
+
* @private
|
|
48
|
+
* @function getNormals
|
|
49
|
+
* @param {Highcharts.PolygonPointObject} p1
|
|
50
|
+
* Start point for the line. Array of x and y value.
|
|
51
|
+
* @param {Highcharts.PolygonPointObject} p2
|
|
52
|
+
* End point for the line. Array of x and y value.
|
|
53
|
+
* @return {Highcharts.PolygonObject}
|
|
54
|
+
* Returns the two normals in an array.
|
|
55
|
+
*/
|
|
56
|
+
function getNormals(p1, p2) {
|
|
57
|
+
var dx = p2[0] - p1[0], // x2 - x1
|
|
58
|
+
dy = p2[1] - p1[1]; // y2 - y1
|
|
59
|
+
return [
|
|
60
|
+
[-dy, dx],
|
|
61
|
+
[dy, -dx]
|
|
62
|
+
];
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* @private
|
|
66
|
+
*/
|
|
67
|
+
function getAxesFromPolygon(polygon) {
|
|
68
|
+
var points, axes = polygon.axes || [];
|
|
69
|
+
if (!axes.length) {
|
|
70
|
+
axes = [];
|
|
71
|
+
points = points = polygon.concat([polygon[0]]);
|
|
72
|
+
points.reduce(function findAxis(p1, p2) {
|
|
73
|
+
var normals = getNormals(p1, p2), axis = normals[0]; // Use the left normal as axis.
|
|
74
|
+
// Check that the axis is unique.
|
|
75
|
+
if (!find(axes, function (existing) {
|
|
76
|
+
return existing[0] === axis[0] &&
|
|
77
|
+
existing[1] === axis[1];
|
|
78
|
+
})) {
|
|
79
|
+
axes.push(axis);
|
|
80
|
+
}
|
|
81
|
+
// Return p2 to be used as p1 in next iteration.
|
|
82
|
+
return p2;
|
|
83
|
+
});
|
|
84
|
+
polygon.axes = axes;
|
|
48
85
|
}
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
86
|
+
return axes;
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Projects a polygon onto a coordinate.
|
|
90
|
+
*
|
|
91
|
+
* @private
|
|
92
|
+
* @function project
|
|
93
|
+
* @param {Highcharts.PolygonObject} polygon
|
|
94
|
+
* Array of points in a polygon.
|
|
95
|
+
* @param {Highcharts.PolygonPointObject} target
|
|
96
|
+
* The coordinate of pr
|
|
97
|
+
*/
|
|
98
|
+
function project(polygon, target) {
|
|
99
|
+
var products = polygon.map(function (point) {
|
|
100
|
+
var ax = point[0], ay = point[1], bx = target[0], by = target[1];
|
|
101
|
+
return ax * bx + ay * by;
|
|
102
|
+
});
|
|
103
|
+
return {
|
|
104
|
+
min: Math.min.apply(this, products),
|
|
105
|
+
max: Math.max.apply(this, products)
|
|
106
|
+
};
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* @private
|
|
110
|
+
*/
|
|
111
|
+
function isPolygonsOverlappingOnAxis(axis, polygon1, polygon2) {
|
|
112
|
+
var projection1 = project(polygon1, axis), projection2 = project(polygon2, axis), isOverlapping = !(projection2.min > projection1.max ||
|
|
113
|
+
projection2.max < projection1.min);
|
|
114
|
+
return !isOverlapping;
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* Checks wether two convex polygons are colliding by using the Separating
|
|
118
|
+
* Axis Theorem.
|
|
119
|
+
*
|
|
120
|
+
* @private
|
|
121
|
+
* @function isPolygonsColliding
|
|
122
|
+
* @param {Highcharts.PolygonObject} polygon1
|
|
123
|
+
* First polygon.
|
|
124
|
+
*
|
|
125
|
+
* @param {Highcharts.PolygonObject} polygon2
|
|
126
|
+
* Second polygon.
|
|
127
|
+
*
|
|
128
|
+
* @return {boolean}
|
|
129
|
+
* Returns true if they are colliding, otherwise false.
|
|
130
|
+
*/
|
|
131
|
+
function isPolygonsColliding(polygon1, polygon2) {
|
|
132
|
+
// Get the axis from both polygons.
|
|
133
|
+
var axes1 = getAxesFromPolygon(polygon1), axes2 = getAxesFromPolygon(polygon2), axes = axes1.concat(axes2), overlappingOnAllAxes = !find(axes, function (axis) { return isPolygonsOverlappingOnAxis(axis, polygon1, polygon2); });
|
|
134
|
+
return overlappingOnAllAxes;
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* Detects if a word collides with any previously placed words.
|
|
138
|
+
*
|
|
139
|
+
* @private
|
|
140
|
+
* @function intersectsAnyWord
|
|
141
|
+
*
|
|
142
|
+
* @param {Highcharts.Point} point
|
|
143
|
+
* Point which the word is connected to.
|
|
144
|
+
*
|
|
145
|
+
* @param {Array<Highcharts.Point>} points
|
|
146
|
+
* Previously placed points to check against.
|
|
147
|
+
*
|
|
148
|
+
* @return {boolean}
|
|
149
|
+
* Returns true if there is collision.
|
|
150
|
+
*/
|
|
151
|
+
function intersectsAnyWord(point, points) {
|
|
152
|
+
var intersects = false, rect = point.rect, polygon = point.polygon, lastCollidedWith = point.lastCollidedWith, isIntersecting = function (p) {
|
|
153
|
+
var result = isRectanglesIntersecting(rect, p.rect);
|
|
154
|
+
if (result &&
|
|
155
|
+
(point.rotation % 90 || p.rotation % 90)) {
|
|
156
|
+
result = isPolygonsColliding(polygon, p.polygon);
|
|
157
|
+
}
|
|
158
|
+
return result;
|
|
159
|
+
};
|
|
160
|
+
// If the point has already intersected a different point, chances are
|
|
161
|
+
// they are still intersecting. So as an enhancement we check this
|
|
162
|
+
// first.
|
|
163
|
+
if (lastCollidedWith) {
|
|
164
|
+
intersects = isIntersecting(lastCollidedWith);
|
|
165
|
+
// If they no longer intersects, remove the cache from the point.
|
|
166
|
+
if (!intersects) {
|
|
167
|
+
delete point.lastCollidedWith;
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
// If not already found, then check if we can find a point that is
|
|
171
|
+
// intersecting.
|
|
172
|
+
if (!intersects) {
|
|
173
|
+
intersects = !!find(points, function (p) {
|
|
174
|
+
var result = isIntersecting(p);
|
|
175
|
+
if (result) {
|
|
176
|
+
point.lastCollidedWith = p;
|
|
71
177
|
}
|
|
72
178
|
return result;
|
|
179
|
+
});
|
|
180
|
+
}
|
|
181
|
+
return intersects;
|
|
182
|
+
}
|
|
183
|
+
/**
|
|
184
|
+
* Gives a set of cordinates for an Archimedian Spiral.
|
|
185
|
+
*
|
|
186
|
+
* @private
|
|
187
|
+
* @function archimedeanSpiral
|
|
188
|
+
*
|
|
189
|
+
* @param {number} attempt
|
|
190
|
+
* How far along the spiral we have traversed.
|
|
191
|
+
*
|
|
192
|
+
* @param {Highcharts.WordcloudSpiralParamsObject} [params]
|
|
193
|
+
* Additional parameters.
|
|
194
|
+
*
|
|
195
|
+
* @return {boolean|Highcharts.PositionObject}
|
|
196
|
+
* Resulting coordinates, x and y. False if the word should be dropped from
|
|
197
|
+
* the visualization.
|
|
198
|
+
*/
|
|
199
|
+
function archimedeanSpiral(attempt, params) {
|
|
200
|
+
var field = params.field, result = false, maxDelta = (field.width * field.width) + (field.height * field.height), t = attempt * 0.8; // 0.2 * 4 = 0.8. Enlarging the spiral.
|
|
201
|
+
// Emergency brake. TODO make spiralling logic more foolproof.
|
|
202
|
+
if (attempt <= 10000) {
|
|
203
|
+
result = {
|
|
204
|
+
x: t * Math.cos(t),
|
|
205
|
+
y: t * Math.sin(t)
|
|
73
206
|
};
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
// first.
|
|
77
|
-
if (lastCollidedWith) {
|
|
78
|
-
intersects = isIntersecting(lastCollidedWith);
|
|
79
|
-
// If they no longer intersects, remove the cache from the point.
|
|
80
|
-
if (!intersects) {
|
|
81
|
-
delete point.lastCollidedWith;
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
// If not already found, then check if we can find a point that is
|
|
85
|
-
// intersecting.
|
|
86
|
-
if (!intersects) {
|
|
87
|
-
intersects = !!find(points, function (p) {
|
|
88
|
-
var result = isIntersecting(p);
|
|
89
|
-
if (result) {
|
|
90
|
-
point.lastCollidedWith = p;
|
|
91
|
-
}
|
|
92
|
-
return result;
|
|
93
|
-
});
|
|
207
|
+
if (!(Math.min(Math.abs(result.x), Math.abs(result.y)) < maxDelta)) {
|
|
208
|
+
result = false;
|
|
94
209
|
}
|
|
95
|
-
return intersects;
|
|
96
210
|
}
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
211
|
+
return result;
|
|
212
|
+
}
|
|
213
|
+
/**
|
|
214
|
+
* Gives a set of cordinates for an rectangular spiral.
|
|
215
|
+
*
|
|
216
|
+
* @private
|
|
217
|
+
* @function squareSpiral
|
|
218
|
+
*
|
|
219
|
+
* @param {number} attempt
|
|
220
|
+
* How far along the spiral we have traversed.
|
|
221
|
+
*
|
|
222
|
+
* @param {Highcharts.WordcloudSpiralParamsObject} [params]
|
|
223
|
+
* Additional parameters.
|
|
224
|
+
*
|
|
225
|
+
* @return {boolean|Highcharts.PositionObject}
|
|
226
|
+
* Resulting coordinates, x and y. False if the word should be dropped from
|
|
227
|
+
* the visualization.
|
|
228
|
+
*/
|
|
229
|
+
function squareSpiral(attempt, params) {
|
|
230
|
+
var a = attempt * 4, k = Math.ceil((Math.sqrt(a) - 1) / 2), t = 2 * k + 1, m = Math.pow(t, 2), isBoolean = function (x) {
|
|
231
|
+
return typeof x === 'boolean';
|
|
232
|
+
}, result = false;
|
|
233
|
+
t -= 1;
|
|
234
|
+
if (attempt <= 10000) {
|
|
235
|
+
if (isBoolean(result) && a >= m - t) {
|
|
118
236
|
result = {
|
|
119
|
-
x:
|
|
120
|
-
y:
|
|
237
|
+
x: k - (m - a),
|
|
238
|
+
y: -k
|
|
121
239
|
};
|
|
122
|
-
if (!(Math.min(Math.abs(result.x), Math.abs(result.y)) < maxDelta)) {
|
|
123
|
-
result = false;
|
|
124
|
-
}
|
|
125
240
|
}
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
* How far along the spiral we have traversed.
|
|
137
|
-
*
|
|
138
|
-
* @param {Highcharts.WordcloudSpiralParamsObject} [params]
|
|
139
|
-
* Additional parameters.
|
|
140
|
-
*
|
|
141
|
-
* @return {boolean|Highcharts.PositionObject}
|
|
142
|
-
* Resulting coordinates, x and y. False if the word should be dropped from
|
|
143
|
-
* the visualization.
|
|
144
|
-
*/
|
|
145
|
-
function squareSpiral(attempt, params) {
|
|
146
|
-
var a = attempt * 4, k = Math.ceil((Math.sqrt(a) - 1) / 2), t = 2 * k + 1, m = Math.pow(t, 2), isBoolean = function (x) {
|
|
147
|
-
return typeof x === 'boolean';
|
|
148
|
-
}, result = false;
|
|
149
|
-
t -= 1;
|
|
150
|
-
if (attempt <= 10000) {
|
|
151
|
-
if (isBoolean(result) && a >= m - t) {
|
|
241
|
+
m -= t;
|
|
242
|
+
if (isBoolean(result) && a >= m - t) {
|
|
243
|
+
result = {
|
|
244
|
+
x: -k,
|
|
245
|
+
y: -k + (m - a)
|
|
246
|
+
};
|
|
247
|
+
}
|
|
248
|
+
m -= t;
|
|
249
|
+
if (isBoolean(result)) {
|
|
250
|
+
if (a >= m - t) {
|
|
152
251
|
result = {
|
|
153
|
-
x: k
|
|
154
|
-
y:
|
|
252
|
+
x: -k + (m - a),
|
|
253
|
+
y: k
|
|
155
254
|
};
|
|
156
255
|
}
|
|
157
|
-
|
|
158
|
-
if (isBoolean(result) && a >= m - t) {
|
|
256
|
+
else {
|
|
159
257
|
result = {
|
|
160
|
-
x:
|
|
161
|
-
y:
|
|
258
|
+
x: k,
|
|
259
|
+
y: k - (m - a - t)
|
|
162
260
|
};
|
|
163
261
|
}
|
|
164
|
-
m -= t;
|
|
165
|
-
if (isBoolean(result)) {
|
|
166
|
-
if (a >= m - t) {
|
|
167
|
-
result = {
|
|
168
|
-
x: -k + (m - a),
|
|
169
|
-
y: k
|
|
170
|
-
};
|
|
171
|
-
}
|
|
172
|
-
else {
|
|
173
|
-
result = {
|
|
174
|
-
x: k,
|
|
175
|
-
y: k - (m - a - t)
|
|
176
|
-
};
|
|
177
|
-
}
|
|
178
|
-
}
|
|
179
|
-
result.x *= 5;
|
|
180
|
-
result.y *= 5;
|
|
181
262
|
}
|
|
182
|
-
|
|
263
|
+
result.x *= 5;
|
|
264
|
+
result.y *= 5;
|
|
183
265
|
}
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
return result;
|
|
208
|
-
}
|
|
209
|
-
WordcloudUtils.rectangularSpiral = rectangularSpiral;
|
|
210
|
-
/**
|
|
211
|
-
* @private
|
|
212
|
-
* @function getRandomPosition
|
|
213
|
-
*
|
|
214
|
-
* @param {number} size
|
|
215
|
-
* Random factor.
|
|
216
|
-
*
|
|
217
|
-
* @return {number}
|
|
218
|
-
* Random position.
|
|
219
|
-
*/
|
|
220
|
-
function getRandomPosition(size) {
|
|
221
|
-
return Math.round((size * (Math.random() + 0.5)) / 2);
|
|
266
|
+
return result;
|
|
267
|
+
}
|
|
268
|
+
/**
|
|
269
|
+
* Gives a set of cordinates for an rectangular spiral.
|
|
270
|
+
*
|
|
271
|
+
* @private
|
|
272
|
+
* @function rectangularSpiral
|
|
273
|
+
*
|
|
274
|
+
* @param {number} attempt
|
|
275
|
+
* How far along the spiral we have traversed.
|
|
276
|
+
*
|
|
277
|
+
* @param {Highcharts.WordcloudSpiralParamsObject} [params]
|
|
278
|
+
* Additional parameters.
|
|
279
|
+
*
|
|
280
|
+
* @return {boolean|Higcharts.PositionObject}
|
|
281
|
+
* Resulting coordinates, x and y. False if the word should be dropped from
|
|
282
|
+
* the visualization.
|
|
283
|
+
*/
|
|
284
|
+
function rectangularSpiral(attempt, params) {
|
|
285
|
+
var result = squareSpiral(attempt, params), field = params.field;
|
|
286
|
+
if (result) {
|
|
287
|
+
result.x *= field.ratioX;
|
|
288
|
+
result.y *= field.ratioY;
|
|
222
289
|
}
|
|
223
|
-
|
|
290
|
+
return result;
|
|
291
|
+
}
|
|
292
|
+
/**
|
|
293
|
+
* @private
|
|
294
|
+
* @function getRandomPosition
|
|
295
|
+
*
|
|
296
|
+
* @param {number} size
|
|
297
|
+
* Random factor.
|
|
298
|
+
*
|
|
299
|
+
* @return {number}
|
|
300
|
+
* Random position.
|
|
301
|
+
*/
|
|
302
|
+
function getRandomPosition(size) {
|
|
303
|
+
return Math.round((size * (Math.random() + 0.5)) / 2);
|
|
304
|
+
}
|
|
305
|
+
/**
|
|
306
|
+
* Calculates the proper scale to fit the cloud inside the plotting area.
|
|
307
|
+
*
|
|
308
|
+
* @private
|
|
309
|
+
* @function getScale
|
|
310
|
+
*
|
|
311
|
+
* @param {number} targetWidth
|
|
312
|
+
* Width of target area.
|
|
313
|
+
*
|
|
314
|
+
* @param {number} targetHeight
|
|
315
|
+
* Height of target area.
|
|
316
|
+
*
|
|
317
|
+
* @param {Object} field
|
|
318
|
+
* The playing field.
|
|
319
|
+
*
|
|
320
|
+
* @param {Highcharts.Series} series
|
|
321
|
+
* Series object.
|
|
322
|
+
*
|
|
323
|
+
* @return {number}
|
|
324
|
+
* Returns the value to scale the playing field up to the size of the target
|
|
325
|
+
* area.
|
|
326
|
+
*/
|
|
327
|
+
function getScale(targetWidth, targetHeight, field) {
|
|
328
|
+
var height = Math.max(Math.abs(field.top), Math.abs(field.bottom)) * 2, width = Math.max(Math.abs(field.left), Math.abs(field.right)) * 2, scaleX = width > 0 ? 1 / width * targetWidth : 1, scaleY = height > 0 ? 1 / height * targetHeight : 1;
|
|
329
|
+
return Math.min(scaleX, scaleY);
|
|
330
|
+
}
|
|
331
|
+
/**
|
|
332
|
+
* Calculates what is called the playing field. The field is the area which
|
|
333
|
+
* all the words are allowed to be positioned within. The area is
|
|
334
|
+
* proportioned to match the target aspect ratio.
|
|
335
|
+
*
|
|
336
|
+
* @private
|
|
337
|
+
* @function getPlayingField
|
|
338
|
+
*
|
|
339
|
+
* @param {number} targetWidth
|
|
340
|
+
* Width of the target area.
|
|
341
|
+
*
|
|
342
|
+
* @param {number} targetHeight
|
|
343
|
+
* Height of the target area.
|
|
344
|
+
*
|
|
345
|
+
* @param {Array<Highcharts.Point>} data
|
|
346
|
+
* Array of points.
|
|
347
|
+
*
|
|
348
|
+
* @param {Object} data.dimensions
|
|
349
|
+
* The height and width of the word.
|
|
350
|
+
*
|
|
351
|
+
* @return {Object}
|
|
352
|
+
* The width and height of the playing field.
|
|
353
|
+
*/
|
|
354
|
+
function getPlayingField(targetWidth, targetHeight, data) {
|
|
355
|
+
var info = data.reduce(function (obj, point) {
|
|
356
|
+
var dimensions = point.dimensions, x = Math.max(dimensions.width, dimensions.height);
|
|
357
|
+
// Find largest height.
|
|
358
|
+
obj.maxHeight = Math.max(obj.maxHeight, dimensions.height);
|
|
359
|
+
// Find largest width.
|
|
360
|
+
obj.maxWidth = Math.max(obj.maxWidth, dimensions.width);
|
|
361
|
+
// Sum up the total maximum area of all the words.
|
|
362
|
+
obj.area += x * x;
|
|
363
|
+
return obj;
|
|
364
|
+
}, {
|
|
365
|
+
maxHeight: 0,
|
|
366
|
+
maxWidth: 0,
|
|
367
|
+
area: 0
|
|
368
|
+
}),
|
|
224
369
|
/**
|
|
225
|
-
*
|
|
226
|
-
*
|
|
227
|
-
* @private
|
|
228
|
-
* @function getScale
|
|
229
|
-
*
|
|
230
|
-
* @param {number} targetWidth
|
|
231
|
-
* Width of target area.
|
|
232
|
-
*
|
|
233
|
-
* @param {number} targetHeight
|
|
234
|
-
* Height of target area.
|
|
235
|
-
*
|
|
236
|
-
* @param {object} field
|
|
237
|
-
* The playing field.
|
|
238
|
-
*
|
|
239
|
-
* @param {Highcharts.Series} series
|
|
240
|
-
* Series object.
|
|
241
|
-
*
|
|
242
|
-
* @return {number}
|
|
243
|
-
* Returns the value to scale the playing field up to the size of the target
|
|
244
|
-
* area.
|
|
370
|
+
* Use largest width, largest height, or root of total area to give
|
|
371
|
+
* size to the playing field.
|
|
245
372
|
*/
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
373
|
+
x = Math.max(info.maxHeight, // Have enough space for the tallest word
|
|
374
|
+
info.maxWidth, // Have enough space for the broadest word
|
|
375
|
+
// Adjust 15% to account for close packing of words
|
|
376
|
+
Math.sqrt(info.area) * 0.85), ratioX = targetWidth > targetHeight ? targetWidth / targetHeight : 1, ratioY = targetHeight > targetWidth ? targetHeight / targetWidth : 1;
|
|
377
|
+
return {
|
|
378
|
+
width: x * ratioX,
|
|
379
|
+
height: x * ratioY,
|
|
380
|
+
ratioX: ratioX,
|
|
381
|
+
ratioY: ratioY
|
|
382
|
+
};
|
|
383
|
+
}
|
|
384
|
+
/**
|
|
385
|
+
* Calculates a number of degrees to rotate, based upon a number of
|
|
386
|
+
* orientations within a range from-to.
|
|
387
|
+
*
|
|
388
|
+
* @private
|
|
389
|
+
* @function getRotation
|
|
390
|
+
*
|
|
391
|
+
* @param {number} [orientations]
|
|
392
|
+
* Number of orientations.
|
|
393
|
+
*
|
|
394
|
+
* @param {number} [index]
|
|
395
|
+
* Index of point, used to decide orientation.
|
|
396
|
+
*
|
|
397
|
+
* @param {number} [from]
|
|
398
|
+
* The smallest degree of rotation.
|
|
399
|
+
*
|
|
400
|
+
* @param {number} [to]
|
|
401
|
+
* The largest degree of rotation.
|
|
402
|
+
*
|
|
403
|
+
* @return {boolean|number}
|
|
404
|
+
* Returns the resulting rotation for the word. Returns false if invalid
|
|
405
|
+
* input parameters.
|
|
406
|
+
*/
|
|
407
|
+
function getRotation(orientations, index, from, to) {
|
|
408
|
+
var result = false, // Default to false
|
|
409
|
+
range, intervals, orientation;
|
|
410
|
+
// Check if we have valid input parameters.
|
|
411
|
+
if (isNumber(orientations) &&
|
|
412
|
+
isNumber(index) &&
|
|
413
|
+
isNumber(from) &&
|
|
414
|
+
isNumber(to) &&
|
|
415
|
+
orientations > 0 &&
|
|
416
|
+
index > -1 &&
|
|
417
|
+
to > from) {
|
|
418
|
+
range = to - from;
|
|
419
|
+
intervals = range / (orientations - 1 || 1);
|
|
420
|
+
orientation = index % orientations;
|
|
421
|
+
result = from + (orientation * intervals);
|
|
249
422
|
}
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
* The width and height of the playing field.
|
|
273
|
-
*/
|
|
274
|
-
function getPlayingField(targetWidth, targetHeight, data) {
|
|
275
|
-
var info = data.reduce(function (obj, point) {
|
|
276
|
-
var dimensions = point.dimensions, x = Math.max(dimensions.width, dimensions.height);
|
|
277
|
-
// Find largest height.
|
|
278
|
-
obj.maxHeight = Math.max(obj.maxHeight, dimensions.height);
|
|
279
|
-
// Find largest width.
|
|
280
|
-
obj.maxWidth = Math.max(obj.maxWidth, dimensions.width);
|
|
281
|
-
// Sum up the total maximum area of all the words.
|
|
282
|
-
obj.area += x * x;
|
|
283
|
-
return obj;
|
|
284
|
-
}, {
|
|
285
|
-
maxHeight: 0,
|
|
286
|
-
maxWidth: 0,
|
|
287
|
-
area: 0
|
|
288
|
-
}),
|
|
289
|
-
/**
|
|
290
|
-
* Use largest width, largest height, or root of total area to give
|
|
291
|
-
* size to the playing field.
|
|
292
|
-
*/
|
|
293
|
-
x = Math.max(info.maxHeight, // Have enough space for the tallest word
|
|
294
|
-
info.maxWidth, // Have enough space for the broadest word
|
|
295
|
-
// Adjust 15% to account for close packing of words
|
|
296
|
-
Math.sqrt(info.area) * 0.85), ratioX = targetWidth > targetHeight ? targetWidth / targetHeight : 1, ratioY = targetHeight > targetWidth ? targetHeight / targetWidth : 1;
|
|
297
|
-
return {
|
|
298
|
-
width: x * ratioX,
|
|
299
|
-
height: x * ratioY,
|
|
300
|
-
ratioX: ratioX,
|
|
301
|
-
ratioY: ratioY
|
|
302
|
-
};
|
|
423
|
+
return result;
|
|
424
|
+
}
|
|
425
|
+
/**
|
|
426
|
+
* Calculates the spiral positions and store them in scope for quick access.
|
|
427
|
+
*
|
|
428
|
+
* @private
|
|
429
|
+
* @function getSpiral
|
|
430
|
+
*
|
|
431
|
+
* @param {Function} fn
|
|
432
|
+
* The spiral function.
|
|
433
|
+
*
|
|
434
|
+
* @param {Object} params
|
|
435
|
+
* Additional parameters for the spiral.
|
|
436
|
+
*
|
|
437
|
+
* @return {Function}
|
|
438
|
+
* Function with access to spiral positions.
|
|
439
|
+
*/
|
|
440
|
+
function getSpiral(fn, params) {
|
|
441
|
+
var length = 10000, i, arr = [];
|
|
442
|
+
for (i = 1; i < length; i++) {
|
|
443
|
+
// @todo unnecessary amount of precaclulation
|
|
444
|
+
arr.push(fn(i, params));
|
|
303
445
|
}
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
446
|
+
return function (attempt) {
|
|
447
|
+
return attempt <= length ? arr[attempt - 1] : false;
|
|
448
|
+
};
|
|
449
|
+
}
|
|
450
|
+
/**
|
|
451
|
+
* Detects if a word is placed outside the playing field.
|
|
452
|
+
*
|
|
453
|
+
* @private
|
|
454
|
+
* @function outsidePlayingField
|
|
455
|
+
*
|
|
456
|
+
* @param {Highcharts.PolygonBoxObject} rect
|
|
457
|
+
* The word box.
|
|
458
|
+
*
|
|
459
|
+
* @param {Highcharts.WordcloudFieldObject} field
|
|
460
|
+
* The width and height of the playing field.
|
|
461
|
+
*
|
|
462
|
+
* @return {boolean}
|
|
463
|
+
* Returns true if the word is placed outside the field.
|
|
464
|
+
*/
|
|
465
|
+
function outsidePlayingField(rect, field) {
|
|
466
|
+
var playingField = {
|
|
467
|
+
left: -(field.width / 2),
|
|
468
|
+
right: field.width / 2,
|
|
469
|
+
top: -(field.height / 2),
|
|
470
|
+
bottom: field.height / 2
|
|
471
|
+
};
|
|
472
|
+
return !(playingField.left < rect.left &&
|
|
473
|
+
playingField.right > rect.right &&
|
|
474
|
+
playingField.top < rect.top &&
|
|
475
|
+
playingField.bottom > rect.bottom);
|
|
476
|
+
}
|
|
477
|
+
/**
|
|
478
|
+
* @private
|
|
479
|
+
*/
|
|
480
|
+
function movePolygon(deltaX, deltaY, polygon) {
|
|
481
|
+
return polygon.map(function (point) {
|
|
482
|
+
return [
|
|
483
|
+
point[0] + deltaX,
|
|
484
|
+
point[1] + deltaY
|
|
485
|
+
];
|
|
486
|
+
});
|
|
487
|
+
}
|
|
488
|
+
/**
|
|
489
|
+
* Check if a point intersects with previously placed words, or if it goes
|
|
490
|
+
* outside the field boundaries. If a collision, then try to adjusts the
|
|
491
|
+
* position.
|
|
492
|
+
*
|
|
493
|
+
* @private
|
|
494
|
+
* @function intersectionTesting
|
|
495
|
+
*
|
|
496
|
+
* @param {Highcharts.Point} point
|
|
497
|
+
* Point to test for intersections.
|
|
498
|
+
*
|
|
499
|
+
* @param {Highcharts.WordcloudTestOptionsObject} options
|
|
500
|
+
* Options object.
|
|
501
|
+
*
|
|
502
|
+
* @return {boolean|Highcharts.PositionObject}
|
|
503
|
+
* Returns an object with how much to correct the positions. Returns false
|
|
504
|
+
* if the word should not be placed at all.
|
|
505
|
+
*/
|
|
506
|
+
function intersectionTesting(point, options) {
|
|
507
|
+
var placed = options.placed, field = options.field, rectangle = options.rectangle, polygon = options.polygon, spiral = options.spiral, attempt = 1, delta = {
|
|
508
|
+
x: 0,
|
|
509
|
+
y: 0
|
|
510
|
+
},
|
|
511
|
+
// Make a copy to update values during intersection testing.
|
|
512
|
+
rect = point.rect = extend({}, rectangle);
|
|
513
|
+
point.polygon = polygon;
|
|
514
|
+
point.rotation = options.rotation;
|
|
515
|
+
/* while w intersects any previously placed words:
|
|
516
|
+
do {
|
|
517
|
+
move w a little bit along a spiral path
|
|
518
|
+
} while any part of w is outside the playing field and
|
|
519
|
+
the spiral radius is still smallish */
|
|
520
|
+
while (delta !== false &&
|
|
521
|
+
(intersectsAnyWord(point, placed) ||
|
|
522
|
+
outsidePlayingField(rect, field))) {
|
|
523
|
+
delta = spiral(attempt);
|
|
524
|
+
if (isObject(delta)) {
|
|
525
|
+
// Update the DOMRect with new positions.
|
|
526
|
+
rect.left = rectangle.left + delta.x;
|
|
527
|
+
rect.right = rectangle.right + delta.x;
|
|
528
|
+
rect.top = rectangle.top + delta.y;
|
|
529
|
+
rect.bottom = rectangle.bottom + delta.y;
|
|
530
|
+
point.polygon = movePolygon(delta.x, delta.y, polygon);
|
|
343
531
|
}
|
|
344
|
-
|
|
532
|
+
attempt++;
|
|
345
533
|
}
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
534
|
+
return delta;
|
|
535
|
+
}
|
|
536
|
+
/**
|
|
537
|
+
* Extends the playing field to have enough space to fit a given word.
|
|
538
|
+
*
|
|
539
|
+
* @private
|
|
540
|
+
* @function extendPlayingField
|
|
541
|
+
*
|
|
542
|
+
* @param {Highcharts.WordcloudFieldObject} field
|
|
543
|
+
* The width, height and ratios of a playing field.
|
|
544
|
+
*
|
|
545
|
+
* @param {Highcharts.PolygonBoxObject} rectangle
|
|
546
|
+
* The bounding box of the word to add space for.
|
|
547
|
+
*
|
|
548
|
+
* @return {Highcharts.WordcloudFieldObject}
|
|
549
|
+
* Returns the extended playing field with updated height and width.
|
|
550
|
+
*/
|
|
551
|
+
function extendPlayingField(field, rectangle) {
|
|
552
|
+
var height, width, ratioX, ratioY, x, extendWidth, extendHeight, result;
|
|
553
|
+
if (isObject(field) && isObject(rectangle)) {
|
|
554
|
+
height = (rectangle.bottom - rectangle.top);
|
|
555
|
+
width = (rectangle.right - rectangle.left);
|
|
556
|
+
ratioX = field.ratioX;
|
|
557
|
+
ratioY = field.ratioY;
|
|
558
|
+
// Use the same variable to extend both the height and width.
|
|
559
|
+
x = ((width * ratioX) > (height * ratioY)) ? width : height;
|
|
560
|
+
// Multiply variable with ratios to preserve aspect ratio.
|
|
561
|
+
extendWidth = x * ratioX;
|
|
562
|
+
extendHeight = x * ratioY;
|
|
563
|
+
// Calculate the size of the new field after adding
|
|
564
|
+
// space for the word.
|
|
565
|
+
result = merge(field, {
|
|
566
|
+
// Add space on the left and right.
|
|
567
|
+
width: field.width + (extendWidth * 2),
|
|
568
|
+
// Add space on the top and bottom.
|
|
569
|
+
height: field.height + (extendHeight * 2)
|
|
570
|
+
});
|
|
371
571
|
}
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
* Detects if a word is placed outside the playing field.
|
|
375
|
-
*
|
|
376
|
-
* @private
|
|
377
|
-
* @function outsidePlayingField
|
|
378
|
-
*
|
|
379
|
-
* @param {Highcharts.PolygonBoxObject} rect
|
|
380
|
-
* The word box.
|
|
381
|
-
*
|
|
382
|
-
* @param {Highcharts.WordcloudFieldObject} field
|
|
383
|
-
* The width and height of the playing field.
|
|
384
|
-
*
|
|
385
|
-
* @return {boolean}
|
|
386
|
-
* Returns true if the word is placed outside the field.
|
|
387
|
-
*/
|
|
388
|
-
function outsidePlayingField(rect, field) {
|
|
389
|
-
var playingField = {
|
|
390
|
-
left: -(field.width / 2),
|
|
391
|
-
right: field.width / 2,
|
|
392
|
-
top: -(field.height / 2),
|
|
393
|
-
bottom: field.height / 2
|
|
394
|
-
};
|
|
395
|
-
return !(playingField.left < rect.left &&
|
|
396
|
-
playingField.right > rect.right &&
|
|
397
|
-
playingField.top < rect.top &&
|
|
398
|
-
playingField.bottom > rect.bottom);
|
|
572
|
+
else {
|
|
573
|
+
result = field;
|
|
399
574
|
}
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
// Make a copy to update values during intersection testing.
|
|
425
|
-
rect = point.rect = extend({}, rectangle);
|
|
426
|
-
point.polygon = polygon;
|
|
427
|
-
point.rotation = options.rotation;
|
|
428
|
-
/* while w intersects any previously placed words:
|
|
429
|
-
do {
|
|
430
|
-
move w a little bit along a spiral path
|
|
431
|
-
} while any part of w is outside the playing field and
|
|
432
|
-
the spiral radius is still smallish */
|
|
433
|
-
while (delta !== false &&
|
|
434
|
-
(intersectsAnyWord(point, placed) ||
|
|
435
|
-
outsidePlayingField(rect, field))) {
|
|
436
|
-
delta = spiral(attempt);
|
|
437
|
-
if (isObject(delta)) {
|
|
438
|
-
// Update the DOMRect with new positions.
|
|
439
|
-
rect.left = rectangle.left + delta.x;
|
|
440
|
-
rect.right = rectangle.right + delta.x;
|
|
441
|
-
rect.top = rectangle.top + delta.y;
|
|
442
|
-
rect.bottom = rectangle.bottom + delta.y;
|
|
443
|
-
point.polygon = movePolygon(delta.x, delta.y, polygon);
|
|
444
|
-
}
|
|
445
|
-
attempt++;
|
|
446
|
-
}
|
|
447
|
-
return delta;
|
|
575
|
+
// Return the new extended field.
|
|
576
|
+
return result;
|
|
577
|
+
}
|
|
578
|
+
/**
|
|
579
|
+
* If a rectangle is outside a give field, then the boundaries of the field
|
|
580
|
+
* is adjusted accordingly. Modifies the field object which is passed as the
|
|
581
|
+
* first parameter.
|
|
582
|
+
*
|
|
583
|
+
* @private
|
|
584
|
+
* @function updateFieldBoundaries
|
|
585
|
+
*
|
|
586
|
+
* @param {Highcharts.WordcloudFieldObject} field
|
|
587
|
+
* The bounding box of a playing field.
|
|
588
|
+
*
|
|
589
|
+
* @param {Highcharts.PolygonBoxObject} rectangle
|
|
590
|
+
* The bounding box for a placed point.
|
|
591
|
+
*
|
|
592
|
+
* @return {Highcharts.WordcloudFieldObject}
|
|
593
|
+
* Returns a modified field object.
|
|
594
|
+
*/
|
|
595
|
+
function updateFieldBoundaries(field, rectangle) {
|
|
596
|
+
// @todo improve type checking.
|
|
597
|
+
if (!isNumber(field.left) || field.left > rectangle.left) {
|
|
598
|
+
field.left = rectangle.left;
|
|
448
599
|
}
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
* Extends the playing field to have enough space to fit a given word.
|
|
452
|
-
*
|
|
453
|
-
* @private
|
|
454
|
-
* @function extendPlayingField
|
|
455
|
-
*
|
|
456
|
-
* @param {Highcharts.WordcloudFieldObject} field
|
|
457
|
-
* The width, height and ratios of a playing field.
|
|
458
|
-
*
|
|
459
|
-
* @param {Highcharts.PolygonBoxObject} rectangle
|
|
460
|
-
* The bounding box of the word to add space for.
|
|
461
|
-
*
|
|
462
|
-
* @return {Highcharts.WordcloudFieldObject}
|
|
463
|
-
* Returns the extended playing field with updated height and width.
|
|
464
|
-
*/
|
|
465
|
-
function extendPlayingField(field, rectangle) {
|
|
466
|
-
var height, width, ratioX, ratioY, x, extendWidth, extendHeight, result;
|
|
467
|
-
if (isObject(field) && isObject(rectangle)) {
|
|
468
|
-
height = (rectangle.bottom - rectangle.top);
|
|
469
|
-
width = (rectangle.right - rectangle.left);
|
|
470
|
-
ratioX = field.ratioX;
|
|
471
|
-
ratioY = field.ratioY;
|
|
472
|
-
// Use the same variable to extend both the height and width.
|
|
473
|
-
x = ((width * ratioX) > (height * ratioY)) ? width : height;
|
|
474
|
-
// Multiply variable with ratios to preserve aspect ratio.
|
|
475
|
-
extendWidth = x * ratioX;
|
|
476
|
-
extendHeight = x * ratioY;
|
|
477
|
-
// Calculate the size of the new field after adding
|
|
478
|
-
// space for the word.
|
|
479
|
-
result = merge(field, {
|
|
480
|
-
// Add space on the left and right.
|
|
481
|
-
width: field.width + (extendWidth * 2),
|
|
482
|
-
// Add space on the top and bottom.
|
|
483
|
-
height: field.height + (extendHeight * 2)
|
|
484
|
-
});
|
|
485
|
-
}
|
|
486
|
-
else {
|
|
487
|
-
result = field;
|
|
488
|
-
}
|
|
489
|
-
// Return the new extended field.
|
|
490
|
-
return result;
|
|
600
|
+
if (!isNumber(field.right) || field.right < rectangle.right) {
|
|
601
|
+
field.right = rectangle.right;
|
|
491
602
|
}
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
* If a rectangle is outside a give field, then the boundaries of the field
|
|
495
|
-
* is adjusted accordingly. Modifies the field object which is passed as the
|
|
496
|
-
* first parameter.
|
|
497
|
-
*
|
|
498
|
-
* @private
|
|
499
|
-
* @function updateFieldBoundaries
|
|
500
|
-
*
|
|
501
|
-
* @param {Highcharts.WordcloudFieldObject} field
|
|
502
|
-
* The bounding box of a playing field.
|
|
503
|
-
*
|
|
504
|
-
* @param {Highcharts.PolygonBoxObject} rectangle
|
|
505
|
-
* The bounding box for a placed point.
|
|
506
|
-
*
|
|
507
|
-
* @return {Highcharts.WordcloudFieldObject}
|
|
508
|
-
* Returns a modified field object.
|
|
509
|
-
*/
|
|
510
|
-
function updateFieldBoundaries(field, rectangle) {
|
|
511
|
-
// @todo improve type checking.
|
|
512
|
-
if (!isNumber(field.left) || field.left > rectangle.left) {
|
|
513
|
-
field.left = rectangle.left;
|
|
514
|
-
}
|
|
515
|
-
if (!isNumber(field.right) || field.right < rectangle.right) {
|
|
516
|
-
field.right = rectangle.right;
|
|
517
|
-
}
|
|
518
|
-
if (!isNumber(field.top) || field.top > rectangle.top) {
|
|
519
|
-
field.top = rectangle.top;
|
|
520
|
-
}
|
|
521
|
-
if (!isNumber(field.bottom) || field.bottom < rectangle.bottom) {
|
|
522
|
-
field.bottom = rectangle.bottom;
|
|
523
|
-
}
|
|
524
|
-
return field;
|
|
603
|
+
if (!isNumber(field.top) || field.top > rectangle.top) {
|
|
604
|
+
field.top = rectangle.top;
|
|
525
605
|
}
|
|
526
|
-
|
|
527
|
-
|
|
606
|
+
if (!isNumber(field.bottom) || field.bottom < rectangle.bottom) {
|
|
607
|
+
field.bottom = rectangle.bottom;
|
|
608
|
+
}
|
|
609
|
+
return field;
|
|
610
|
+
}
|
|
611
|
+
/**
|
|
612
|
+
* Alternative solution to correctFloat.
|
|
613
|
+
* E.g Highcharts.correctFloat(123, 2) returns 120, when it should be 123.
|
|
614
|
+
*
|
|
615
|
+
* @private
|
|
616
|
+
* @function correctFloat
|
|
617
|
+
*/
|
|
618
|
+
function correctFloat(number, precision) {
|
|
619
|
+
var p = isNumber(precision) ? precision : 14, magnitude = Math.pow(10, p);
|
|
620
|
+
return Math.round(number * magnitude) / magnitude;
|
|
621
|
+
}
|
|
622
|
+
/**
|
|
623
|
+
* @private
|
|
624
|
+
*/
|
|
625
|
+
function getBoundingBoxFromPolygon(points) {
|
|
626
|
+
return points.reduce(function (obj, point) {
|
|
627
|
+
var x = point[0], y = point[1];
|
|
628
|
+
obj.left = Math.min(x, obj.left);
|
|
629
|
+
obj.right = Math.max(x, obj.right);
|
|
630
|
+
obj.bottom = Math.max(y, obj.bottom);
|
|
631
|
+
obj.top = Math.min(y, obj.top);
|
|
632
|
+
return obj;
|
|
633
|
+
}, {
|
|
634
|
+
left: Number.MAX_VALUE,
|
|
635
|
+
right: -Number.MAX_VALUE,
|
|
636
|
+
bottom: -Number.MAX_VALUE,
|
|
637
|
+
top: Number.MAX_VALUE
|
|
638
|
+
});
|
|
639
|
+
}
|
|
640
|
+
/**
|
|
641
|
+
* @private
|
|
642
|
+
*/
|
|
643
|
+
function getPolygon(x, y, width, height, rotation) {
|
|
644
|
+
var origin = [x, y], left = x - (width / 2), right = x + (width / 2), top = y - (height / 2), bottom = y + (height / 2), polygon = [
|
|
645
|
+
[left, top],
|
|
646
|
+
[right, top],
|
|
647
|
+
[right, bottom],
|
|
648
|
+
[left, bottom]
|
|
649
|
+
];
|
|
650
|
+
return polygon.map(function (point) {
|
|
651
|
+
return rotate2DToPoint(point, origin, -rotation);
|
|
652
|
+
});
|
|
653
|
+
}
|
|
654
|
+
/**
|
|
655
|
+
* Rotates a point clockwise around the origin.
|
|
656
|
+
*
|
|
657
|
+
* @private
|
|
658
|
+
* @function rotate2DToOrigin
|
|
659
|
+
* @param {Highcharts.PolygonPointObject} point
|
|
660
|
+
* The x and y coordinates for the point.
|
|
661
|
+
* @param {number} angle
|
|
662
|
+
* The angle of rotation.
|
|
663
|
+
* @return {Highcharts.PolygonPointObject}
|
|
664
|
+
* The x and y coordinate for the rotated point.
|
|
665
|
+
*/
|
|
666
|
+
function rotate2DToOrigin(point, angle) {
|
|
667
|
+
var x = point[0], y = point[1], rad = deg2rad * -angle, cosAngle = Math.cos(rad), sinAngle = Math.sin(rad);
|
|
668
|
+
return [
|
|
669
|
+
correctFloat(x * cosAngle - y * sinAngle),
|
|
670
|
+
correctFloat(x * sinAngle + y * cosAngle)
|
|
671
|
+
];
|
|
672
|
+
}
|
|
673
|
+
/**
|
|
674
|
+
* Rotate a point clockwise around another point.
|
|
675
|
+
*
|
|
676
|
+
* @private
|
|
677
|
+
* @function rotate2DToPoint
|
|
678
|
+
* @param {Highcharts.PolygonPointObject} point
|
|
679
|
+
* The x and y coordinates for the point.
|
|
680
|
+
* @param {Highcharts.PolygonPointObject} origin
|
|
681
|
+
* The point to rotate around.
|
|
682
|
+
* @param {number} angle
|
|
683
|
+
* The angle of rotation.
|
|
684
|
+
* @return {Highcharts.PolygonPointObject}
|
|
685
|
+
* The x and y coordinate for the rotated point.
|
|
686
|
+
*/
|
|
687
|
+
function rotate2DToPoint(point, origin, angle) {
|
|
688
|
+
var x = point[0] - origin[0], y = point[1] - origin[1], rotated = rotate2DToOrigin([x, y], angle);
|
|
689
|
+
return [
|
|
690
|
+
rotated[0] + origin[0],
|
|
691
|
+
rotated[1] + origin[1]
|
|
692
|
+
];
|
|
693
|
+
}
|
|
528
694
|
/* *
|
|
529
695
|
*
|
|
530
696
|
* Default export
|
|
531
697
|
*
|
|
532
698
|
* */
|
|
699
|
+
var WordcloudUtils = {
|
|
700
|
+
archimedeanSpiral: archimedeanSpiral,
|
|
701
|
+
extendPlayingField: extendPlayingField,
|
|
702
|
+
getBoundingBoxFromPolygon: getBoundingBoxFromPolygon,
|
|
703
|
+
getPlayingField: getPlayingField,
|
|
704
|
+
getPolygon: getPolygon,
|
|
705
|
+
getRandomPosition: getRandomPosition,
|
|
706
|
+
getRotation: getRotation,
|
|
707
|
+
getScale: getScale,
|
|
708
|
+
getSpiral: getSpiral,
|
|
709
|
+
intersectionTesting: intersectionTesting,
|
|
710
|
+
isPolygonsColliding: isPolygonsColliding,
|
|
711
|
+
isRectanglesIntersecting: isRectanglesIntersecting,
|
|
712
|
+
rectangularSpiral: rectangularSpiral,
|
|
713
|
+
rotate2DToOrigin: rotate2DToOrigin,
|
|
714
|
+
rotate2DToPoint: rotate2DToPoint,
|
|
715
|
+
squareSpiral: squareSpiral,
|
|
716
|
+
updateFieldBoundaries: updateFieldBoundaries
|
|
717
|
+
};
|
|
533
718
|
export default WordcloudUtils;
|