# Change Log

All notable changes to this project will be documented in this file.

The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).

## [Unreleased] - yyyy-mm-dd

### Added

### Changed

### Removed

### Fixed

### Deprecated

## [8.2.1] - 2026-03-09

### Changed

-   Upgraded dependency of `immutable` from 4.0.0 to 4.3.8 in response to https://github.com/advisories/GHSA-wf6x-7x77-mvgw

## [8.2.0] - 2026-02-04

### Added

-   Added `LinearGaugeChart`
-   Added high precision axis support to `Chart3D`
-   Added `AxisTickStrategy.setCustomTickPlacement`
    -   Allows specifying custom logic to override placement of axis ticks.
-   Added `PointLineAreaSeries.setRenderTransform`
    -   New beta feature targeted to use cases where application often requires applying an affine transformation (scale+offset) to XY visualizations
    -   Render transform can be changed very rapidly and doesn't require any heavy recalculations.
-   Added `nonNumeric` option to `DataSetXY` schema
    -   Allows storing arbitrary string values within library's internal data storage
-   Added API for adjusting sensitivity of points appearing with zooming of `PointLineAreaSeries`
-   Added `Chart.setPauseRendering`
-   Added `DataSetXYOptions.useSharedArrayBuffers`
-   Added new map types for Nordic countries, Middle East, and Southeast Asia

### Fixed

-   Fixed BarChart value axis title positioned incorrectly when logarithmic
-   Fixed creating ZoomBandChart with candlesticks shown as line shows dataset warning
-   Fixed `PointLineAreaSeries` render error with progressive data when zoomed out extremely far, no data is shown at all
-   Fixed `PointLineAreaSeries` render error when axis has large margins, sometimes data is not rendered around the margin edge area even if there is data there
-   Fixed Polar printing out warnings to console
-   Fixed `ChartXY` pan interaction not working on mobile
    -   Bug introduced in v7.1.0
-   Fixed data mapping having value `undefined` resulting in "data supply error" Error

## [8.1.1] - 2025-11-25

### Added

-   Added `FigureSeries.getFigures` convenient method

### Fixed

-   Fixed `DataSetXY` degradation introduced in v8.0.0, where `start` parameter is not respected if data set already has existing data
-   Fixed performance issue with html text rendering + large number of custom ticks

## [8.1.0] - 2025-11-12

### Added

-   Added new method overrides to `HeatmapGridSeries.invalidateIntensityValues`
    -   Allows inputting data in flat number format instead of number matrix. i.e. number[], Float32Array, etc.
-   Added `HeatmapGridSeriesIntensityValues.setAggregation` (and same for scrolling variant)
    -   Allows enabling automatic min/max aggregation for use cases where heatmaps are so dense that 
-   Added `HeatmapGridSeries.setContours`, `SurfaceGridSeries3D.setContours` and `contoursFromLUT`
-   Added `HeatmapGridSeriesOptions.maxTileSize`
-   Added new optional `scale` parameter to `captureFrame` and `saveToFile` methodsseveral heatmap cells are under single pixel on screen
-   Added `cursor` parameters to `ChartXYUserInteractions`
    -   Allows configuring or disabling applied cursor property when interacting with an XY chart
-   Added `MouseStyles.Grab`, `Grabbing`
-   Added `LineSeriesOptions3D.individualLookupValuesEnabled`
    -   Allows inputting per data point lookup values for dynamic coloring
-   Added `labelAlignment` options to `BarChart` category and value labels
-   Added `CustomTick.setTickLabelAlignment`
-   Added `chart` property to most series classes for convenience
-   Added `axisX`, `axisY`, `axisZ` properties to 3D series for convenience
-   Added `RectangleSeriesOptions.solvePlane`
-   Added `getData` for `PolarPolarLineSeries`, `PolarPointSeries`, `PolarPointLineSeries`, and `PolarAreaSeries`
-   Added `clear` for `BoxSeries3D`
-   Added `getCustomTicks` for `Axis`, `Axis3D`, and `ParallelCoordinateAxis`

### Changed

-   Changed `RectangleSeries` default cursor and solve nearest behavior
    -   If rectangle dimensions are progressive along X or Y plane, then cursor behavior is adjusted to work similarly as in other XY series (considering only progressive plane)
    -   Previous behavior can be reverted by setting `solvePlane: 'xy'` when creating the series

### Fixed

-   Fixed `PointLineAreaSeries` line rendering when using `DashedLine` and data has `NaN` values
-   Fixed capture APIs (`captureFrame`, `saveToFile`) not capturing latest changes sometimes if chart is not actually visible on the page
-   Fixed `CursorXY.setKeepWithinAxisBoundaries` not working
-   Prevented crash when combining `DashedLine` stroke with logarithmic scale
    -   Combination is still not supported but application crash is prevented.
-   Fixed `Band.removeEventListener` type issue not accepting all event types that are supported by addEventListener
-   Fixed `FigureSeries.setPointerEvents` doesn't work after first rendered frame
-   Fixed `ChartXY` user interaction rmb pan (default) end triggering also other interactions that should be fired on rmb click
-   Fixed `PolarPointSeries` not working with `IndividualPointFill` style
-   Fixed `BarChart` logarithmic value axis not working if orientation is horizontal
-   Fixed user interactions API issue where wheel triggered interaction is not triggered if lmb is not explicitly set to `true`
-   Fixed `BarChart` issue where repeatedly setting data could result in legend showing duplicate entries

## [8.0.2] - 2025-09-05

### Changed

-   Legends with LUT are now default positioned on right side of chart rather than bottom.
    - This was done because Legend LUTs don't look very good in horizontal orientation
-   `ZoomBandChart` now automatically copies secondary axis type (linear, high precision, logarithmic)
-   Changed `DataSetXY` to allow schema entry being `undefined`
-   Improved legend entry positioning slightly (utilize more space rather than always positioning entries starting from corner)
-   Improved custom cursor performance in use cases with large number of series

### Fixed

-   Fixed label positioning problems with funnel and pyramid charts
-   Fixed default cursor formatting with percentage LUT showing values as % incorrectly
-   Fixed `RectangleSeries` crash when using `DashedLine` and high precision axis
-   Fixed `DataSetXY.appendSamples` `offset` parameter not working if dataset is previously empty
-   Fixed some legend display errors when HTML text rendering is used
-   Fixed `PointLineAreaSeries` bug when inputting several samples with `appendSample` to a previously empty dataset, where one of the data points would receive same value as another one
-   Fixed scrolling heatmap grid series working incorrectly if `setStart` is called when the series has data inside it
-   Fixed `DataSetXY.appendSamples` crashing if data record has key with `undefined` value

## [8.0.1] - 2025-08-20

### Added

-   Added support for `DataSetXY.appendJSON` as list of tuples

### Fixed

-   Fixed `ChartXY` axis rectangle zoom interaction sometimes prevents panning interaction from working (and other similar situations)
-   Fixed `ZoomBandChart` bug that can happen when FPS is very low. When dragging time window knobs, 'click' interaction can fire after drag interaction is finished.
-   Fixed `DataSetXY.appendJSON` color input not working
-   Fixed `scaleTheme` not working

## [8.0.0] - 2025-08-06

### Added

-   Added point stroke style APIs to XY point series, Polar point series, buttons, legend entries and cursor point markers
    -   Allows drawing line stroke along edges of points.
    -   For example, `PointLineAreaSeries.setPointStrokeStyle`
-   Added `ChartWithCursor.setCursorDynamicBehavior`
-   Added new `ChartXY` axis title position option: `"center-chart"`
    -   Positions axis title to center of whole chart, rather than center of the axis only.
    -   Useful for aligning axis title nicely relative to chart title or legend
-   Added `HighlightModes.onHoverIndividual`
    -   Relevant only for `FigureSeries`, allowing individual highlighting of figure that is under pointer.
-   Added `LUT.formatter`
    -   New convenient way to specify formatting rules for LUT values, affecting both cursors and legends at once.
-   Added `Axis` support for negative tick lengths and paddings + new label alignment option, effectively adding support for inverted axis labels (displayed inside series area rather than outside)

### Changed

-   Reworked legends.
    -   For more information and migration instructions, please read migration guide in developer documentation.
-   Changed `DataSetXY` and `PointLineAreaSeries` APIs to allow more functionalities and optimizations.
    -   Please read migration guide for more detailed information.
-   Changed `ChartXY.addLineSeries`, `addPointSeries`, `addPointLineSeries`, `addStepSeries`, `addSplineSeries`, `addAreaSeries` to return `PointLineAreaSeries` instead of previous deprecated series.
    -   More details can be found in migration guide.
-   Significant CPU performance optimizations for scrolling or otherwise updating ChartXY applications.
-   Point series now draw borders around points by default.
    -   Previous behavior can be restored with `PointLineAreaSeries.setPointStrokeStyle(emptyLine)`
-   Improved default cursor auto fitting to work better with small charts.
-   Series entries in legends and cursor result tables now include borders.
-   Reworked default cursor point marker styles.
-   Changed default `ChartXY` axis title position from `"center"` to `"center-chart"`
    -   This change is only applied for axes that don't have any stacks (several axes adjacent to each other)
-   Improved Funnel and Pyramid chart label positioning
-   Default cursor formatters no longer display "X" or "Y" in case of axis without titles.
-   Optimized loading speed and memory consumption of majority of 3D series by ~20%
-   Wrapped `Axis.addBand` parameter to an object parameter. See migration guide for more details.
-   Wrapped `Axis.addConstantLine` parameter to an object parameter. See migration guide for more details.
-   Slightly changed default positioning of X axis titles in `ChartXY`
    -   Changed from "center of axis" to "center of chart" to better align with new legends and chart titles.
    -   Previous behavior can be restored with `chart.axisX.setTitlePosition('center')`
-   Added few new required properties to `Theme` definition
-   Tweaked built-in cursor formatting in situations with only 1 series with some data pattern. Previously shown like "series, x, y" now shown with same pattern as when there are several series "x, series: y" to avoid discrepancies between the two common scenarios

### Removed

-   Removed `AxisScrollStrategies.regressive`, `fittingStart`, `fittingEnd`
    -   See migration guide for more details.
-   Removed `Cursor.setAutoFitStrategy`, `AutoFitStrategy`, `AutoFitStrategyFactory`, `AutoFitStrategies`
    -   These APIs were simplified to just a boolean flag "auto fit enabled" on cursors.
-   Removed 

### Fixed

-   Fixed `DataSetXYEventMap` events not firing if subscription is done via `PointLineAreaSeries`
-   Fixed scrolling heatmap sometimes throwing unhandled errors when using `invalidateIntensityValues` for time-series scrolling use cases after running for a while.
-   Fixed sometimes license error messages remaining even after successful license verification afterwards.
-   Fixed `LegendOptions` not working on `TextSeries`.
-   Fixed `FigureSeries` changing figure dimensions sometimes changing draw order between figures belonging to the same series

## [7.1.2] - 2025-07-14

### Fixed

-   Fix performance issue when interacting on one ChartXY axis, then creating a new axis and interacting with it

## [7.1.1] - 2025-05-07

### Fixed

-   Fixed "License invalid" error sometimes produced even though license is valid.

## [7.1.0] - 2025-05-07

### Added

-   Added `scaleThemeFontSize`
    -   Convenience function to up or downscale font sizes as well as tick lengths, element paddings, etc. to make font sizes sit in nicely.
-   Added `Axis.getSeriesDataRange`
    -   Quality of life method to get data extents of all series attached to an Axis
-   Added new capabilities to `AxisScrollStrategies`.
    -   For `fitting`, `expansion` and `fittingStepped` you can now specify whether it should affect axis start and/or end. By default affects both sides.
    -   Added `scrolling`. This is the replacement to now deprecated `progressive` and `regressive`. It also has a new feature for real-time scrolling in use cases where data arrives infrequently (every 1s etc.)
-   Introduced HTML text rendering option (beta)
    -   Can be enabled for sharper text display where required with drawback of weaker performance.
    -   For more information refer to HTML text rendering section in developer documentation.
-   Added `singleClick` option to `setUserInteractions` `restoreDefault` and `restorePrevious` interactions.
    -   Allows firing the interactions on single click (lmb/rmb/mmb)
-   Added `Axis.setScrollMargins` method for controlling automatic spacing between axis edges and series.
-   Added `ZoomBandChart.setStopAxisOnInteraction`
-   Added some missing APIs to `ZoomBandChart`
    -   `getLayout`
    -   `chart`
    -   Some events to `addEventListener`
-   Added optional `skipIntervalRestrictions` parameter to `Axis.setDefaultInterval`
    -   Situationally useful as previously setting axis default interval always ignored any interval restrictions

### Changed

-   Improved zoom capabilities of `AxisTickStrategies.DateTime`
    -   Now allows zooming up to individual nanoseconds.
    -   Nanosecond timestamps must be loaded to charts as Float64 after shifting to start from 0 and converting to milliseconds.
-   Improved radial gradient quality
-   Domain locked license keys now allow running charts inside same origin iframes
-   LightningChart JS now adds `overflow: hidden` to its container DIV style always.
-   `ChartXY` default cursor formatter now displays axis titles (if any) instead of "X" or "Y".

### Fixed

-   Fixed cursor performance degradation (CPU use is increased after cursor is shown with a lot of content, even if cursor is hidden afterwards)
-   Fixed `Axis.setTitleRotation` sometimes not updating title display.
-   Fixed `PointLineAreaSeries` render error when zoomed out and coordinates are larger than 10^16
-   Fixed `ZoomBandChart` not automatically adjusting if connected to an inverted axis.
-   Fixed `PyramidChart`, `PieChart`, `FunnelChart` not being able to display negative values.
-   Fixed some small effect rendering errors
    -   Glows becoming "dashed" in `Chart3D` bounding box borders sometimes.
    -   Glows cutting off slightly before `ChartXY` series area edges.
    -   `ChartXY` series background border drawn above glow effects.

### Deprecated

-   Deprecated `AxisScrollStrategy`, `AxisScrollStrategies.progressive`, `AxisScrollStrategies.regressive`, `AxisScrollStrategies.fittingStart`, `AxisScrollStrategies.fittingEnd`
    -   `AxisScrollStrategy` -> `AxisScrollStrategyNew`
    -   `AxisScrollStrategies.progressive` -> `AxisScrollStrategies.scrolling`
    -   `AxisScrollStrategies.regressive` -> `AxisScrollStrategies.scrolling({ progressive: false })`
    -   `AxisScrollStrategies.fittingStart` -> `AxisScrollStrategies.fitting({ end: false })`
    -   `AxisScrollStrategies.fittingEnd` -> `AxisScrollStrategies.fitting({ start: false })`
-   Deprecated `Axis.setAutoRegionsEnabled` in favour of `Axis.setScrollMargins`

## [7.0.4] - 2025-04-24

### Changed

-   Disabled `ChartXY` paginate user interaction by default always.

### Fixed

-   Fixed `'click'` events not firing on touch devices
-   Fixed cursor sometimes not displaying pointed data point color of `PointLineAreaSeries`
-   Fixed `Axis.setThickness` sometimes not updating the chart layout immediately
-   Fixed `ChartXY` parallel axis ticks sometimes overlapping after mouse wheel or other operation
-   Fixed `ZoomBandChart` aligning itself to hidden axes
-   Fixed `ChartXY` manual cursor gridlines randomly not being shown when positioning them on user interaction

## [7.0.3] - 2025-03-25

### Added

-   Added Uint32 precision to `MeshModel3D.setModelGeometry` indices. Previously only Uint16 was available.

### Changed

-   Reverted change introduced in v7.0.0 where important default CSS values for chart container DIV where applied only if computed style didn't have any value.
    -   This approach was not valid and resulted in these configurations never being applied.
    -   Comparing to previous v7.0.x versions, this can show as different CSS for touch-action, position and box-sizing properties. If you want to override their default values, use !important syntax.

### Fixed

-   Fixed numeric tick placement bug when extreme ticks are enabled and axis is physically very small, where major and extreme ticks could overlap.
-   Fixed a performance degradation on `PointLineAreaSeries`
-   Fixed `PointSeries3D` crash when changing from simple shading style to phong shading
-   Fixed `BoxSeries3D` not working when fill style was `PalettedFill` with `'value'` look up property.
-   Fixed chart resize flickering when using individual canvas mode

## [7.0.2] - 2025-02-18

### Added

-   Added `BarChart.setLabelFittingMargins`
    -   Allows controlling spacing of bar chart labels when auto fitting is enabled.
-   Added `DataSetXYOptions.includesNaN`
    -   Can be set to `false` if you know that data will never include NaN values for slight performance increase.

### Removed

-   Removed `ConstantLine.setInteractionMoveByDragging`
    -   This was supposed to have been removed already in v7.0.1. It was replaced by `setUserInteractions`

### Fixed

-   Fixed `PointLineAreaSeries` with ProgressiveX pattern points appearing too early in applications with large data gaps.
-   Fixed creating UI `ButtonBox` resulting in crash.
-   Fixed interaction APIs missing from `PointMarker`
-   Fixed `BarChart` positive and negative variants rendering being cut off.
-   Fixed `BarChart` value axis title sometimes mispositioned for 1 frame or until chart is interacted with.
-   Fixed cursor showing white color sometimes when pointing at dynamically colored series.
-   Fixed `PointLineAreaSeries` sometimes not displaying anything when data set contains a lot of data gaps (`NaN`) and view is zoomed out.
-   Fixed `ChartXY` axis title position being off on 1st frame
-   Fixed `ZoomBandChart` sometimes not aligning itself to attached charts until interacted with.

## [7.0.1] - 2025-02-05

### Added

-   **Added rounded corners**. Enabled by default.
    -   Reverting back to non-rounded corners can be done by setting `Theme.legendBorderRadius` / `Theme.cursorResultTableBorderRadius` to `undefined`
-   **Added `TextSeries`**
    -   New powerful and more convenient feature for displaying text objects inside `ChartXY`
    -   Compared to old approach of using UI elements, is more performant, supports clipping text outside axis view and exposes handy methods for interacting with text boundaries and size.
-   Added text shadows (beta)
    -   Improves text readability by displaying a different colored shadow under it
    -   For dark built-in Themes enabled by default. Can be disabled with `disableTextShadows`
-   Added high precision axis support to XY heatmap series.
    -   This makes using heatmaps in time series applications that require zooming up to hours, minutes, seconds or lower significantly easier.
-   Added new `PointLineAreaSeries.solveNearest` signature
    -   Allows solving nearest data point from an axis coordinate, rather than client coordinate
-   Added ability to style cursor row backgrounds separately to highlight headers or other rows
    -   For demonstration, see cursors in online examples.
    -   Can be used via default cursor formatters or by using `rowFillStyle` property from `ResultTableCellContent`
-   Added ability for cursors to display the color of pointed data point even in dynamically colored applications (such as heatmaps, color look up, etc.)
    -   Can be used via default cursor formatters or with `useCursorDataPointColor`.
-   Added `SurfaceScrollingGridSeries3D.invalidateValues, getSampleCount`
    -   Equivalent API that was previously introduced for 2D heatmap series to be used in time-series applications.
-   Added `ChartXYLayoutChangedEvent`, `ChartXY.getLayout`
    -   These are new function concepts aimed to help with static aspect ratio apps and other use cases that require knowing the dimensions of ChartXY axis sizes, viewport sizes, etc.
    -   Released as @beta - the APIs might change based on user feedback.
-   Added `MeshModel3D.setModelFromObj`
    -   Built-in OBJ parsing was implemented due to issues of open source alternatives not loading many files properly.
    -   Compared to before also supports automatic normal calculation if missing from source.
-   Added `undefined` parameter option to `Axis.setIntervalRestrictions` for removing any previously added restriction
-   Added `Axis.setHighlightOnHover`, `Axis.getHighlightOnHover`
-   Added couple new experimental scroll strategy options
    -   `AxisScrollStrategies.fittingStart`, `fittingEnd`, `nextPowerOf10`
-   Added ability to control text font and fillstyle even when supplying a `Series` or other chart component to cursor result table content. This was previously not possible
-   Added `Axis.isX`, `isY`
    -   Simple convenience flags for end user utilization
-   Added `MeshModel3D.setModelMaterial`
    -   Allows reading .mtl (material) files for per-part coloring and shading.
-   Added new "stacked sum label" functionality to BarChart (stacked variant)
    -   Enabled by default. Shows the sum of all subcategory values of a category.
    -   Please see migration guide if you want to restore previous behavior.
-   Added `PolarAxisRadial.setMarginAfterTicks`

### Changed

-   **`ChartXY` axis by default sets interval restriction to prevent zooming outside attached data.**
    -   Can be reverted using `Axis.setIntervalRestrictions(undefined)`
    -   This behavior is also automatically disabled if axis interval is explicitly configured in application code.
-   **Reworked all user interaction APIs.**
    -   For more information, see migration guide.
-   **Reworked all Event APIs.**
    -   For more information see migration guide
-   **`ChartXY` Axes now automatically ensure that their tick labels don't leak outside the axis bounds** (for example, outside chart render area or inside other stacked axes)
    -   Previous behavior can be restored with `Axis.setKeepTickLabelsInAxisBounds`
    -   This change makes it easier to fit charts into small containers without having to be afraid of labels cutting off. For this reason, the default `right` padding of ChartXY has been reduced from 24 to 15 pixels.
-   **Various improvements to built-in tick placement behavior**
    -   Prevent situations where there is only 1 tick visible
    -   Prevent situations where there are too many ticks visible, resulting in cluttered look
    -   Improved readability of date-time and time minor ticks
    -   Fix situations where chart layout would be slightly off during 1st displayed frame
    -   Performance improvements from reduced number of ticks in many cases
-   LightningChart JS now adds `touch-action: none` to its container div style when a chart is created
    -   This is required for touch interactions to work as expected.
    -   As a side effect, native touch interactions such as scrolling page up/down no longer work when interacting directly on the charts.
    -   Previous behavior can be restored by adding CSS `touch-action: auto` to the container div
-   `AxisTickStrategies.DateTime` now defaults to great ticks disabled.
    -   These refer to additional labels that display year or month on certain zoom levels.
    -   Previous behavior can be restored with `chart.axisX.setTickStrategy(AxisTickStrategies.DateTime, (strategy) => strategy.setGreatTickStyle(strategy.getMajorTickStyle().setTickLength(28).setTickStyle(emptyLine)))`
-   Reworked `appendJSON` method type definition to be more relaxed.
    -   Issue previously was that some specific TypeScript syntaxes did not satisfy the type even though the idea was completely valid.
-   Removed dependency to `@lightningchart/eventer`
-   Reworked `SpiderChart`
    -   Supports different axis intervals within a single chart.
    -   Chart will automatically scale and format axis intervals if not overridden.
    -   Please refer to migration guide for full changelog.
-   Changed `Band` default `valueEnd` value from `0` to `1`
-   Changed default button look slightly (legends/cursors)
    -   Now vertical linear gradient instead of previous radial gradient
-   Improved BarChart label fitting algorithm to display labels more aggressively as long as they don't collide with other labels
-   Type changes to `BarChartValueLabels` and `BarChartLabelFormatter` to accommodate new functionality of displaying stack sum labels.
    -   Please see migration guide for details.
-   Changed type definition of `FormattingRange`
    -   Previous type definition was unnecessarily complicated. This is a backwards incompatible change, more information can be found in migration guide.
-   Changed `AxisTickStrategies.Numeric` extreme tick placement behavior slightly. It now ignores axis regions always, meaning extreme ticks may be a few pixels away from visible axis start/end.
    -   Change was made for manual configured axis interval use cases as otherwise extreme ticks would display different values than configured extremes
-   Slightly changed progressive `DataSetXY` behavior. Now later coordinate having same value as previous is accepted. Previously had to be at least slightly larger (or smaller depending on pattern)
-   `PolarChart` radial axis ticks are no longer hidden when they are positioned where radial axis title would be, if axis title is hidden
-   Changed `PolarAreaSeries.setConnectDataAutomaticallyEnabled(true)` behavior. Removed amplitude interpolation, now directly connected to first data point.

### Removed

-   Removed `Figure.getBoundaries`
    -   The method was widely unused and misleading. It was mainly introduced for internal purposes but accidentally included in end user API
-   Removed `MapChart.getRegionUnderMouse`
    -   Replaced by `MapChart.regions` which allows following interactions above all MapChart regions
-   Removed `isDateTimeTickStrategy`, `isNumericTickStrategy`, `isTimeTickStrategy`, `isEmptyTickStrategy`
    -   These did not work and there is no identified use case for them even if they did work

### Fixed

-   Fixed `ChartXY` animated zoom to fit sometimes resulting in first X axis animation and only afterwards Y axis animation
-   Fixed `PointLineAreaSeries.getYMin, getYMax, getXMin, getXMax` not returning up to date value when used immediately after data is pushed in.
-   Fixed `PointLineAreaSeries.getYMin`, `getYMax`, `getXMin`, `getXMax` returning only visible data ranges rather than full data set ranges.
    -   For example, for case ProgressiveX, if only part of series was visible `getYMax` would only consider data points that are visible.
-   Fixed `AxisTickStrategies.Time` displaying milliseconds in major ticks at ~10 second time interval.
    -   Completely redundant information because every major tick is displayed at :000
-   Improved chart position tracking on scrollable web pages to alleviate issues where chart would not be interactable after its position would be changed.
    -   https://lightningchart.com/js-charts/docs/troubleshooting/chart-is-not-interactable/
-   Fixed theme effect leaking incorrectly inside `DataGrid`
-   Fix `ParallelCoordinateChart` series also rendered outside series area if axis interval is manually set
-   Fixed `BarChart` axes not visible when no data present.
-   Fixed `ParallelCoordinateChart.setCustomCursor` and cursor target change event not working.
-   Fixed bug where hovering mouse over `PointLineAreaSeries` with data gaps could break cursor result table from being displayed.
-   Fixed minor memory leak in `ChartXY`
-   Fixed minor performance overhead in `PointLineAreaSeries` when points rendering is enabled.
-   Fixed `PolarSector` angle restrictions preventing for example displaying a sector from 350 deg to 10 deg.
-   Fixed `PointLineAreaSeries` render error where entire series could temporarily be invisible.
    -   Happened in very specific circumstances, where there was a large gap between two data points and zoom level was changed very particularly.
-   Fix `PointLineAreaSeries` not working properly with `RegressiveY` data pattern in scrolling applications.
-   Fixed performance issue on inverted `ChartXY` axes (end < start). Caused chart to re-render even though nothing had changed.
-   Fixed `PointLineAreaSeries` render error where line trend would ignore actual data provided and draw a straight line.
    -   Happened in streaming applications with very time-specific zoom level changes.
-   Fixed all LCJS chart types assigning `position` and `boxSizing` CSS properties to container DIV even if they are explicitly defined in user applications CSS.
-   Fixed FPS problem when using `GaugeChart` with small container size
-   Fixed incorrect `GaugeChart` unit label position when animations are disabled.
-   Fixed some glow effect rendering issues related to browser zooming.
-   Fixed incorrect data gap rendering for `PointLineAreaSeries` with spline
    -   Some segments were not rendered

## [6.1.4] - 2025-08-05

### Fixed

-   Fixed `BoxSeries` interaction events not firing under median line

## [6.1.3] - 2025-02-26

### Fixed

-   Fixed `PointLineAreaSeries` render error where entire series could temporarily be invisible.
    -   Happened in very specific circumstances, where there was a large gap between two data points and zoom level was changed very particularly.

## [6.1.2] - 2025-01-07

### Added

-   Added `Axis.setThickness` allowed parameter `undefined` to disable any previous configured thickness.

### Changed

-   Changed `Axis.setDefaultInterval` to accept `undefined`. This restores default state.

### Fixed

-   Fixed `ZoomBandChart.setPadding` not doing anything.
    -   This method can now be used to disable automatic alignment feature of zoom band chart.
-   Fixed `ZoomBandChart` crash when adding series with options `xAxis` or `yAxis`
-   Fixed `ParallelCoordinateChart` series also rendered outside series area if axis interval is manually set
-   Fixed `BarChart` (stacked and grouped) crash if legend is recreated and highlighting is enabled
-   Improved v6.1.0 workaround for Intel Iris Xe and Apple Silicon Chip M1/M2/M3 graphics error
    -   Issue was still visible when using rotated series (e.g. high precision Y axis)
-   Fixed Polar chart radial axis tick labels being hidden around where axis title would be, even if title is hidden.

### Deprecated

-   Deprecated `PointLineAreaSeries.add` and `addArraysXY`.
    -   Replacements `appendJSON` and ´appendSamples` were already added almost year before but due to build error, deprecation was not marked correctly.

## [6.1.1] - 2024-11-19

### Fixed

-   Fixed `PointLineAreaSeries` affecting scrolling and fitting even if its invisible.
    -   Bug introduced in v6.1.0
-   Fixed bug where `PointLineAreaSeries` can temporarily disappear when max sample count is reached and displaying time series data.
-   Fixed `MapChart` separate regions backgrounds wrong draw order
-   Fixed `isImageFill` missing from API

## [6.1.0] - 2024-11-06

### Added

-   Added `ParallelCoordinateChart`
-   Added `AxisScrollStrategies.fittingStepped`
-   Added `DashedLine` support to `RectangleFigure.setStrokeStyle`, `PolygonFigure.setStrokeStyle`, `EllipseFigure.setStrokeStyle`, `BoxFigure.setBodyStrokeStyle`, `BarChartBar.setStrokeStyle`, `MapChart.setStrokeStyle`, `TreeMapChart.setNodeBorderStyle`
-   Added `CursorXY.setKeepWithinAxisBoundaries`
    -   Slight behavior improvement in stacked axis use cases with HTML overlays between axes
-   Added `MeshModel3D.setModelRotationQuaternion`

### Changed

-   LightningChart JS now falls back to a publicly hosted asset folder when using select features (zoom band chart, map chart, some themes, onscreen menu)
    -   This mainly helps resolve some visual issues when crafting very first prototypes with LCJS. Does not affect existing production applications.
-   Changed return type of `Axis.getIntervalRestrictions`
    -   Before returned exact value set by user, which could be a generally useless callback function.
    -   Now returns currently active axis restrictions.
-   Supplying XY data points as `String` numbers now throws an error.
    -   Previously, the data visualization "might" be correct, but for example, cursors would often not work, or the visualization might randomly disappear.
    -   Input as `String` numbers has NEVER been supported, but during the years has lead to difficult bugs in user applications.
-   `ChartXY.getAxes` now sorts results based on `iStack`
    -   Returned axes are always in increasing `iStack` order
-   Slightly modified cursor auto fit behavior
    -   Previously cursor was flipped if it would extend outside series area
    -   Now cursor is flipped if it would extend outside chart container
-   `Axis.setDefaultInterval` with callback option is now not triggered before some attached series has data
    -   This seemingly small change fixes some normal applications of default intervals that didn't function before
-   Improved logarithmic axis minimum interval limit (smallest displayed value)

### Fixed

-   Worked around Apple Silicon Chip M1/M2/M3 issues with High precision axis feature
    -   With this specific hardware the high precision axis rendering did not work (result was same as with normal axis)
-   Worked around Intel Iris Xe issues with High precision axis feature
    -   With this specific hardware the high precision axis rendering did not work (lines appeared all janky and jumping all over the place)
-   Fixed effect rendering issue with horizontal bar charts.
-   Fixed grouped bar chart not displaying all sub categories if sorting is disabled after inputting data
-   Fixed `PointLineAreaSeries` not rendering markers when area and stroke is disabled and data is progressive and view is zoomed out
-   Fixed `PointLineAreaSeries` not working with inverted X axis
-   Fixed `PointLineAreaSeries` area gradient behaving unexpectedly with inverted Y axis
-   Fixed cursor point markers having higher draw order than result tables
-   Fixed `TreeMapChart` flat coloring, instead of different depths having varying colors
-   Fixed logarithmic axis regions applied wrong
    -   Resulted in points being clipped by axis view, etc.
-   Fixed `GaugeChart` automatic color not applied if value is outside gauge interval range.
-   Fixed type error not allowing user to supply Colors with `appendJSON` methods.
-   Fixed `Chart3D.setProjection('orthographic')` still resulting in perspective projection
-   Fixed Polar heatmap sometimes crashing when accessing solve result properties in user interaction handlers along edges of heatmap.

### Deprecated

-   Deprecated `LineSeries`, `PointSeries`, `PointLineSeries`, `StepSeries`, `SplineSeries`, `AreaSeries`
    -   This is part of a long term feature transition which started from v5.1.0 towards newer `PointLineAreaSeries`. At present time, `PointLineAreaSeries` should support all use cases of the older features, thus we deprecate the older features before finally removing them.
-   Deprecated `MeshModel3D.setModelRotation` over `setModelRotationEuler`

## [6.0.3] - 2024-09-06

### Fixed

-   Fixed XY cursor result table not positioned at mouse location in multi-series use cases
-   Fixed sliced chart cursors not working (pie, funnel, pyramid)
-   Removed console logging coming from production build when using some specific features.

## [6.0.2] - 2024-08-27

### Changed

-   `BarChart` now restores original user supplied data order when sorting is disabled after data specification.
    -   Previously this operation would have kept any previously sorted order.

### Fixed

-   Fixed manual XY cursor not sticking to axis location configured using `setPosition`
-   Fixed `PolarHeatmapSeries` crash if fill style is not set to a `PalettedFill`
-   Fixed Result Table font not being configurable for cells that are displayed by passing a series reference
-   Fixed `AreaSeries` and `AreaRangeSeries` clipping configuration not working properly
    -   Default mode was `false` instead of expected `true`
    -   `setClipping` did not do anything
-   Fixed `LineSeries` skipping rendering if its entirely outside its axis range, even when it should be visible in stacked axis use cases with clipping disabled

## [6.0.1] - 2024-08-13

### Added

-   Added `Band.setClipping`, `ConstantLine.setClipping`

### Changed

-   `Band` and `ConstantLine` rendering is now clipped against their owning axis.
    -   Previous behavior can be achieved with `setClipping(false)`

### Fixed

-   Fixed `PointLineAreaSeries` RangeError: Maximum call stack size exceeded when using auto max sample count and supplying data that exceeds initial data set size * 2
-   Fixed `PolarChart.radialAxis`, `axisRadial` not working

## [6.0.0] - 2024-08-06

### Added

-   Added new, refactored `Cursor` API
    -   Added new functionalities, such as multi-series cursors, 3D cursors and more.
    -   Please refer to migration guide and docs > Features > Cursors for more information.
-   Added new, fully reworked `GaugeChart`
    -   Improved default look, improved adaptibility to different user interfaces, added built-in value indicators functionality, added built-in Needle functionality, added value based background glows and gauge bar coloring.
    -   API is completely changed. Please refer to migration guide if you are migrating from old gauge chart API (https://lightningchart.com/js-charts/docs/migration-guides/)
-   Added new, simplified `SolveNearest` API
    -   Refer to migration guide and developer documentation for more details.
-   Added `SeriesXY.setClipping`
    -   Allows reverting back to previous behavior, where series rendering could leak outside its owning axes in stacked axis applications. Defaults to enabled (`true`)
-   Added `PointShape.HollowCircle`
-   Added `Chart3D.setProjection` (beta)
-   Added event API for tracking user interactions on Axis titles
    -   `Axis.onTitleMouseEnter`, ...
-   Added `Axis.setTitlePosition`
    -   Allows changing axis title position between pre-determined key locations.
-   Added `x` and `y` options to `DataSetXY.alterSamples`
    -   Slightly more convenient way to alter 1 sample at specific index with specific X and Y values.
-   `DataSetXY` and `PointLineAreaSeries` can now directly consume `x` and `y` coordinates from `Date` objects or valid date-time strings.
    -   Rather than user having to map them to `Date` object and use `getTime()` method.
-   Added `FormattingFunctions.Scientific`
    -   Formats numbers like '0.00e+3'
-   Added `EmptyTickStrategy.setCursorFormatter`
    -   Useful in use cases of manual tick placement. Instead of specifying formatting with `CustomTick.setTextFormatter`, you can specify a cursor formatter, which is automatically utilized by cursor result tables as well.
-   Added `CursorXY.setTickMarkersAllocateAxisSpace`
-   Added `CustomTick3D.setBackgroundFillStyle`, `setBackgroundStrokeStyle`, `setPadding`
-   Added `Chart3D.translateCoordinate` capability to translate 3D axis coordinate to client and relative coordinate systems.

### Changed

-   XY series connected to stacked axes are now clipped so rendering doesn't leak outside the owning axes.
    -   Previous behavior can be restored per series using `SeriesXY.setClipping` method
-   Enhanced the layout of `Pie`, `Funnel`, and `Pyramid` charts.
    -   Labels are now hidden for Pie charts with a radius smaller than 50px.
    -   For Funnel and Pyramid chart labels are hidden when the chart width or height is smaller than 250px
-   Tweaked default area series fill styles to utilize more transparency for a more modern look.
-   Improved `DateTime` Axis tick strategy zoom range
    -   Previous min interval ~1 second. Now ~1 millisecond.
    -   Also improved default formatting at minute/second zoom levels.
-   Tweaked darkGold and light themes cursor gridlines to have more contrast.
-   LCJS drag events are now stopped whenever any `draggable` HTML event is dragged on the web page.
    -   Change made because of use case where user could not interact with HTML event even when it had pointer event priority.
-   Disabled DateTime great ticks ticklines by default
    -   Frequently requested by users
-   Inverted sorting order of the TreeMap chart

### Removed

-   Removed `DashboardOptions.disableAnimations`, `DashboardCellOptions.disableAnimations`, `CommonChartOptions.disableAnimations`
    -   Use `animationsEnabled` instead
-   Removed `Dashboard.pixelScale`, `Panel.pixelScale`
    -   Use `coordsRelative` instead
-   Removed `HeatmapScrollingGridSeriesOptions.start`, `step`
    -   Use `setStart`, `setStep` instead
-   Removed `translatePoint`, `translatePoint3D`
    -   Use `chart.translateCoordinate` instead
-   Removed `LightningChartOptions.sharedContextOptions.webgl`
    -   API was never functional
-   Removed `PublicEngine.scale`
    -   Use `chart.coordsRelative` instead
-   Removed `PublicEngine.clientLocation2Engine`, `engineLocation2Client`
    -   Use `chart.translateCoordinate` instead
-   Removed `Chart3D.axes`
    -   Use `coordAxis` instead
-   Removed `Chart3D.world`
    -   Use `coordsWorld` instead
-   Removed `SurfaceGridSeries3DOptions.start`, `step`, `end`
    -   Use `setStart`, `setStep`, `setEnd` instead
-   Removed `SurfaceScrollingGridSeries3DOptions.start`, `step`
    -   Use `setStart`, `setStep` instead
-   Removed `TickStyleProperties.labelPadding`
    -   Use `Axis.setMarginAfterTicks` instead
-   Removed deprecated signature of `SpiderChart.addSeries` which accepted a `pointShape` parameter
-   Removed `Axis.setTitleMargin`, `getTitleMargin`
    -   Use `setMarginAfterTitle` instead
-   Removed `HeatmapGridSeriesOptions.start`, `step`, `end`
    -   Use `setStart`, `setStep`, `setEnd` instead

### Fixed

-   Fixed charts sometimes not adjusting to browser zoom level change before something changes in chart.
-   Fixed series sometimes leaking 1 or 2 pixels outside series background in ChartXY
-   Fixed crash with `PointLineAreaSeries` automatic max sample count control.
-   Fixed `RectangleSeries` render errors with high precision axis. Errors happened very inconsistently with very specific rectangle coordinates.
-   Fixed text rendering issue sometimes present for 1st frame in apps with relative large number of text objects, where text is rendered as strange symbols
-   Fixed `MapChart` coloring regions with no data with first LUT color, instead of using fallback color.
-   Fixed crash with `ZoomBandChart` inside `Dashboard` "Cannot compare node with itself"
-   Fixed `PointLineAreaSeries` Y axis scrolling 1 frame behind.
-   Fixed XY heatmap and scrolling heatmap series not accepting `axisX` or `axisY` options
-   Fixed `ZoomBandChart` misalignment when connected to multiple stacked axes
-   Fixed custom tick label padding sometimes wrong.
-   Fixed `PointLineAreaSeries` hiding points when zoomed out even if both stroke + area are disabled.
    -   Essentially it was not possible to use progressive scatter visualization
-   Fixed `ZoomBandChart` not mimicking `PointLineAreaSeries` point style fully (rotation, shape, size)
-   Fixed `PointLineAreaSeries` crash when supplied only data points with exact same `x`
-   Fixed `DataSetXY` append methods not working correctly with `start` and `step` options

## [5.2.0] - 2024-05-07

### Added

-   Added **Stacked Axes** (beta)
    -   Accessed via `AxisOptions.iStack`, `Axis.setLength`, `Axis.setMargins`
    -   See online examples and/or Developer documentation (Features > Axis) for latest updates to stacked axis use cases.
-   Added `TreeMapChart`
-   Added `ChartXY.swapAxes` (beta)
    - Can be used to swap the position of two stacked Axes.
-   Added `ImageFill` support for `PointLineAreaSeries` and `PolarPointSeries` marker fill styles
    -   Allows displaying custom picture assets in axis coordinates with axis clipping.
-   Added `PointLineAreaSeries.setPointAlignment`, `getPointAlignment`
    -   Allows display of non-centered points. For example, position points by vertical bottom.
-   Added convenience axis getter properties
    -   `ChartXY.axisX`, `xAxis`, `axisY`, `yAxis`
    -   `Chart3D.axisX`, `xAxis`, `axisY`, `yAxis`, `axisZ`, `zAxis`
    -   `PolarChart.axisRadial`, `axisAmplitude`, `radialAxis`, `amplitudeAxis`
    -   These behave exactly same as `getDefaultAxisX()` or equivalents, but simply look more neat.
-   Added `SeriesOptions.axisX`, `SeriesOptions.axisY`
    -   Convenience properties that do exactly same as existing `xAxis` and `yAxis`
-   Added convenience properties `SeriesXY.xAxis`, `SeriesXY.yAxis`
-   Added `DisposableEvents.isDisposed`
    -   This simple getter is added to basically all charts, series, etc. objects
    -   Introduced mainly to workaround some issues in React run-time crashes
-   Added `LightningChart.layout`
    -   Required for React applications which use shared LC context and include charts inside scrollable DIVs which are not the document body. Used to notify charts that their position on the webpage may have changed.
-   Added `ChartComponent.setIcon` (beta)
    -   This can be used to associate a chart component with a icon graphic. For many series types this results in automatically displaying that Icon in legends and cursors.
-   Added ability to use `Icon` anywhere `PointShape` can be used.
    -   XY point series, Polar point series, Point markers, Legend entries, Checkboxes
    -   Additionally, Icons can now be used as part of Result table content
-   Added `DataSetXY.fill`, `PointLineAreaSeries.fill` methods
    -   Convenient way to set same value to all existing samples. Especially useful for implementing custom interactions, like highlighting selected data 
-   Added `setTickStyle` convenience methods to all tick strategies.
    -   This does the same as existing `setMajorTickStyle` and `setMinorTickStyle` but applies both with just 1 method call.points with different color/size etc.
-   Added more optional parameters to `DataSetXY.alterSamplesByID` and `PointLineAreaSeries.alterSamplesByID`: `x`, `y`, `lookupValue`, `color`, `rotation`
    -   Can be used to load same value for all specified sample IDs.
-   Added `Axis.setTitleMarginBefore`, `getTitleMarginBefore`
-   Added `Axis.setAutoRegionsEnabled`
    -   Can be used to disable built-in functionality that adds extra gaps around axis interval to make sure that attached series fit inside. In some specific cases this is necessary.
-   Added `hasUIElementBackground` type guard.
-   Added `Color.toUint32`
-   Added slice parameter to sliced chart slice styling APIs
    -   Allows referencing slice label and other properties in custom style use cases

### Removed

-   Removed `EngineSettings.webgl`
    -   This property was faulty since v5.0.0, and didn't actually do anything. Use `LightningChartOptions.webgl` instead

### Fixed

-   Fixed bug `synchronizeAxisIntervals` resulting in axes not being zoomable or pannable.
-   Fixed `PointLineAreaSeries` run-time crash "invalid array length" sometimes when using time-series data and zooming in/out.
-   Fixed long scroll animations in time-series use cases when first data points are added.
-   Fixed charts not following changes to window devicePixelRatio after chart is created
    -   This can be observed by text staying sharp and thicknesses/point sizes adjusting when using browser zooming
    -   Note that in order for this to work, web site needs to have meta tag meta[name="viewport"] width=device-width
-   Made `PointLineAreaSeries` more robust to common invalid data supply patterns in data streaming test setups.
    -   e.g. data points sharing same time coordinate, or even having slightly incorrect order.
-   Fixed `PointLineAreaSeries` individual point sizes low resolution with circle shape.
-   Fixed `PointLineAreaSeries.clear` resulting in series not being visible under specific circumstances.
-   Fixed axis gridlines invisible with light theme.
-   Fixed extreme ticklines not visible.
-   Fixed crash when attempting to dispose same chart twice.
-   Fixed sliced charts (pie, pyramid, funnel) auto cursors not updating on mouse move when highlight on hover is disabled.
-   Fixed legend button not showing if legend is added while attached component is invisible.
-   Fixed `alterSamples` not doing anything if only `sizes` or `rotations` were altered.
-   Fixed Legend entry hiding itself even when toggleVisibilityOnClick is false
-   Fixed BarChart sometimes disabling animations even if they are explicitly enabled or not disabled at least.

### Deprecated

-   Deprecated `LightningChartOptions.sharedContextOptions.webgl` in favour of `LightningChartOptions.webgl`
-   Deprecated `Axis.setTitleMargin`, `getTitleMargin`
    -   For clearer distinction should use `Axis.setMarginAfterTitle` instead

## [5.1.1] - 2024-02-19

### Fixed

-   Fixed `PointLineAreaSeries` defaulting to float 32 data storage instead of float 64
    -   Mainly showed as issues in time series use cases.

## [5.1.0] - 2024-02-06

### Added

-   Added `MeshModel3D`
    -   New 3D series type for rendering 3D Models inside 3D charts.
    -   Main features: dynamic coloring from separate data set in real-time
-   Added `BarChart.setDataStacked`, `setDataGrouped`
    -   Allows creation of stacked and grouped bar charts
-   Added `LUT.percentageValues`
    -   Adds to user convenience when you want to color a data set between min/max value range, as opposed to a fixed value range.
    -   Not optimized yet for real-time data updates
-   Added `Axis.setDefaultInterval` (beta)
-   Added `Axis.setIntervalRestrictions` (beta)
-   Added `Band.setDefaultMouseInteractions`, `ConstantLine.setDefaultMouseInteractions`
    -   Enables use cases where user needs to implement custom interactions for Band/ConstantLine
-   Added `Control.getLegendBoxes`
    -   Recommended especially in scrolling applications to set scrolling Axis interval
-   Added `setStart`, `setEnd` and `setStep` methods to `HeatmapGridSeries` and `SurfaceGridSeries3D`
    -   Allows modifying heatmap location and scale after creation.
-   Added `setStart` and `setStep` methods to `HeatmapScrollingGridSeries` and `SurfaceScrollingGridSeries3D`
    -   Allows modifying heatmap location and scale after creation.
-   Added `PublicEngine.onRenderFrame`, `offRenderFrame`
    -   mainly added for performance and FPS measurement
-   Added `uint32ColorFromRGBA`, `uint32ColorFromObject`, `ColorUint32`
-   Added `PointLineAreaSeries`, `DataSetXY` (beta)
-   Added `UICheckBox.setButtonShape`, `UILutCheckBox.setButtonShape`
    -   Allows modification of button shape during run-time. Previously had to be specified before creating checkbox
-   Added beta feature `DateTimeTickStrategy.setUTC`
    -   Allows tick placement to be done in UTC (instead of clients local region), removing any region specific day light saving and time zone offsets

### Changed

-   `ChartXY.getDefaultAxisX` and `getDefaultAxisY` methods now return the first Axis that is visible.
    -   Previously even invisible Axis may be returned.
-   `ChartXY` rectangle zoom interaction now works regardless of mouse gesture direction if rectangle fit interaction is disabled (setMouseInteractionRectangleFit(false))
-   Tweaked built-in themes for `BarChart`
    -   Changed gradients to solid fills
    -   Added subtle borders
    -   This was done to accommodate for new Grouped and Stacked BarCharts that are contained within the same chart type.
-   `PolygonSeries` can now be attached to logarithmic and high precision axes

### Removed

-   Removed redundant `UIButtonPicture` and `UIButtonPictures` exports
    -   Replaced by `PointShape`

### Fixed

-   Fixed `ChartXY` mouse wheel interaction stopping Axis even if mouse wheel zoom interaction is disabled
-   Fixed FigureSeries style changes and dimension changes resetting mouse interaction state (under mouse, drag, etc.)
    -   Issue can however still happen by style changes under very specific circumstances!
-   Fixed hidden axis taking space
-   Fixed `ChartXY` animationsEnabled and disableAnimations options being applied opposite to afterwards added Axis
-   Greatly improved LUT precision
    -   Previously some users were facing issues with LUT picking wrong color when the value was very close to a threshold. For example, couple decimals off, or sometimes when the magnitude of the numbers was very large.
-   Improved DataGrid performance with large number of text and most of it outside view.
-   Fixed minor memory leak when using Dashboard and disposing charts inside it
    -   Introduced in v5.0.0
-   Fixed crash on `LegendBox.setVisible(false)` when a LUT is attached.
-   Fixed drag stop, mouse leave, mouse up events firing when mouse leaves chart area
-   Fixed warning about not supported WebGL extensions being displayed even if `warnings` options is `false`

### Deprecated

-   Deprecated `start`, `step` and `end` options when creating Heatmap or Surface grids.
    -   Usage should be replaced with `setStart`, `setStep` and `setEnd` methods respectively.

## [5.0.7] - 2024-01-19

### Fixed

-   Fixed typings issue when using library from NPM.
    -   Reported at least from React and Vite frameworks, types were not found from package.

## [5.0.6] - 2024-01-08

### Fixed

-   Fixed auto cursor not updating when moving mouse over a heatmap
-   Fixed ChartXY.solveNearest and other equivalent methods missing.

## [5.0.5] - 2023-12-13

### Changed

-   Improved license validation errors to not throw errors that crash applications.
    -   This makes it easier to work with applications where not every person running it will need charts to be visible.

### Fixed

-   Fixed CSS issue where chart starts expanding height infinitely, shows as white and uses a lot of CPU
-   Fixed ChartXY animationsEnabled and disableAnimations options being applied opposite to afterwards added Axis

## [5.0.4] - 2023-12-01

### Added

-   Added `formatNumberAsUnicodeSuperscript`
-   Added new file to release bundle: `dist/lcjs.iife.d.ts`
    -   This contains typings compatible with the IIFE distribution (`dist/lcjs.iife.js`)
    -   Can be used to get basic intellisense in simplistic applications that are directly utilizing the IIFE library.
    -   For example, see https://lightningchart.com/js-charts/docs/frameworks/aaa-vanilla/

### Changed

-   Tweaked axis restrictions on logarithmic axis to prevent situations where 0 axis ticks are visible
-   Added new alternate, built-in option for logarithmic tick formatting
    -   Formats values like 10¹, 10², 10³, ...
    -   See `FormattingFunctions.LogarithmicNoExponentsRounded)`

### Fixed

-   Fixed extra jitter in ChartXY zoom to fit animation
-   Fixed all log axis ticks being hidden if any major tick collides with another
    -   Now only colliding ticks are hidden.
-   Fixed BarChart license error even though license was valid
-   Fixed tick behavior issue when either numeric extreme tick or date time great tick collided with another tick.
    -   Instead of hiding colliding tick, the entire tick level was sometimes not displayed

## [5.0.3] - 2023-11-10

### Fixed

-   Fixed ZoomBand Chart resources not included in package
-   Fixed crash when using sandbox licensing and initiating `lightningChart()` several times.

## [5.0.0] - 2023-11-08

### Added

-   Shared WebGL Context rendering.
    -   Removes the old 16 chart limit. Now you can have 1000+ charts on a single page depending on the hardware running the page.
    -   Has two modes:
        -    Individual canvas mode. In this mode each chart is render to it's own canvas. This is the default mode.
        -    Shared canvas mode. All charts are render to a single shared canvas. Can have better performance than the individual canvas mode.
    -   See Developer Documentation "Grouping charts" for more information
    -   Starting with LCJS v5.0.0, it's important to do only one call to the `lightningChart()` library entry point function. You should call this function once and create all of the charts from the same returned object
-   Added automatic sandbox licensing.
    -   When charts are used in specific, popular sandbox sites (like Stack Overflow, Codepen, JSFiddle), the charts work automatically, without passing any license.
-   New event `isInView`
    -   This event is triggered when a chart becomes visible in the browser viewport.
-   `dispose()` to the library entry point interface (`lightningChart()`)`
    -   This can be used to dispose the shared WebGL context and all charts that have been created with it.
-   Added option to have different fonts and fill styles within result table content.
    -   See changes to `ResultTableContent` and `TableContentBuilder.addRow`
-   Added `PointShape.Arrow`, `Cross`, `Diamond`, `Minus`, `Plus`, `Star`
-   Added `HeatmapScrollingGridSeriesIntensityValues.invalidateIntensityValues`, `getSampleCount` methods
    -   Allows backwards invalidation of previously added samples and pushing data by sample index.
    -   Directed to make heatmap time series applications more convenient.
-   Added `MapChart.getRegionUnderMouse`
-   Added `ResultTable.setPadding`, `ResultTable.getPadding`
-   Added auto cursors to `PieChart`, `FunnelChart` and `PyramidChart`
    -   New methods: `setAutoCursor`, `getAutoCursor`, `setAutoCursorMode`, `getAutoCursorMode`, `setCursorResultTableFormatter`
-   Added optional `matchStyleExactly` flag when adding components to legend box to match button color exactly to attached components rather than making default gradient
-   Added `PieChartWithLabelsOnSides.setLabelSliceOffset`, `getLabelSliceOffset`, `setLabelConnectorGapStart`, `getLabelConnectorGapStart`, `setLabelConnectorEndLength`, `getLabelConnectorEndLength`
-   Added option to `captureFrame` method to return the result as a Data URL.
    -   See LegendBoxAddOptions in API reference to learn more.
-   Added `UICheckBox.setTextFillStyleHidden`, `getTextFillStyleHidden` methods

### Changed

-   Changed non-commercial license terms
    -   Before, omitting license key meant approving to non-commercial use terms
    -   Now, license key is always required. Get a license at `https://lightningchart.com/js-charts/#license-key`
-   Reworked `OHLCSeries`.
    -   Performance massively improved. Loading time 40x faster, data capacity 200x more (average desktop GPU).
    -   See migration guide for instructions of using reworked feature.
-   Reworked `ZoomBandChart`
    -   The feature has been reimplemented from scratch with two goals: better UX + simpler API.
    -   See migration guide for details.
-   Refactored `FigureSeries` (`RectangleSeries`, `SegmentSeries`, `PolygonSeries`, `BoxSeries`, `EllipseSeries`)
    -   Main motivation to improve performance greatly, enabling use cases that need large numbers of figures.
    -   New implementation is much more performance efficient, on average ~50x more powerful or even more.
-   Changed visual look of `LegendBox` buttons.
    -   Now the text and button are dimmed when series is hidden, rather than the previous "check box ticked" approach.
-   Built-in `Themes` cursor gridstroke style changed to `DashedLine`
-   Changed interfaces around tick styles.
    -   `TickStyle` should now be only needed interface. It has all APIs necessary for styling axis ticks.
    -   `emptyTick` can be used as convenience to hide ticks completely.
    -   `VisibleTicks` and `EmptyTicks` classes are removed.
    -   When mutating a tick style, there is no longer a need to check `isVisibleTicks` in TypeScript applications.
    -   This should mainly remove type errors, rather than introduce them.
-   Changed `Theme` properties:
    -   Some deprecated `Theme` properties have been removed, and new ones introduced and made non-optional to accommodate for new features.
    -   For details, see migration guide.
-   `LegendBox` buttons now match the shape of attached point-based series.
    -   Concerns following series: `PointSeries`, `PointLineSeries`, `StepSeries`, `SplineSeries`, `PolarPointSeries`, `PolarPointLineSeries` and `SpiderSeries`.
    -   If this behavior is undesirable, it can be prevented like: `LegendBox.add(component, { builder: UIElementBuilders.CheckBox })`
    -   This also let's you choose any shape from `PointShape` collection. See `LegendBoxAddOptions` in API reference for more information.
-   Changed parameters of `onHighlight` methods.
    -   First parameter is now reference to object itself. Other parameters shifted right.
    -   Change done to be symmetrical with other event APIs.
-   Changed parameters of `CustomTick.onValueChange` method.
    -   First parameter is now reference to object itself. Other parameters shifted right.
    -   Change done to be symmetrical with other event APIs.
-   Changed `PointMarker` API
    -   Removed `setStrokeStyle`, `getStrokeStyle`
    -   Added `setShape`, `getShape`, `setRotation`, `getRotation`
    -   PointMarkers can no longer have borders, but their shape and rotation can be easily changed.
-   Changed default look of cursor PointMarkers
    -   Previously was not visible, now it is a small crosshair
    -   To restore previous look you can either use `chart.setAutoCursor((cursor) => cursor.setPointMarkerVisible(false))` or `theme: { ...Themes.darkGold, cursorPointMarkerFillStyle: emptyFill }`
-   `CursorPoint.series` property name changed to `owner` and type to `unknown`.
-   `PieChartWithLabelsOnSides` visual look changed.
    -   Labels are now next to labels rather than at left/right edges of chart area.
-   Moved `SpiderChart` axis nibs draw order behind series.
    -   This was causing some cursor interaction issues due to the nibs having priority over series

### Removed

-   Removed `BoxAndWhiskers`, `BoxFigureConstructor`, `CustomizableFigure`, `SimpleFigureSeries`
    -   Can be replaced with `BoxSeries`, `BoxFigure`
-   Removed `Figure.setHighlight`, `getHighlight`, `onHighlight`, `offHighlight` methods
    -   They can still be used via the `FigureSeries` (same value shared for all figures)
-   Removed `VisibleTicks`, `isVisibleTicks`
    -   Can be replaced with `TickStyle`, `isTickStyle`
-   Removed `MarkerBuilders.XY`
    -   Can be replaced with `MarkerBuilders.ChartMarkerXY` or `MarkerBuilders.SeriesMarkerXY` instead
-   Removed `PointMarkers`, `EmptyPointMarker`, all generic type parameters related to `PointMarkers`
    -   `PointMarker` concept still exists, but has been simplified. See `PointMarker` in API reference for more information.
-   Removed `PieChartWithLabelsOnSides.getLabelConnectorGap`, `getLabelConnectorLength`, `setLabelConnectorGap`, `setLabelConnectorLength`
-   Removed `UICheckBoxBuilder.setPictureOff`, `setPictureOn` methods
    -   Replaced by `setButtonShape` method
-   Removed `UICheckBox.setButtonOffSize`, `setButtonOnSize` methods
    -   Replaced by `setButtonSize` method
-   Removed `UICheckBox.setButtonOnStrokeStyle`, `setButtonOffStrokeStyle` methods
    -   No equivalent method exists, check boxes no longer have borders, only fill style.

### Fixed

-   Fixed some Firefox specific render and console warning issues
    -   `MapChart` stroke not rendered and potentially other unidentified occurences.
-   Fixed `ChartXY` series background border sometimes being clipped 1 pixel on some sides
-   Fixed `ChartXY` axis stroke not aligning with series background border
    -   Before axis stroke was offset by half its thickness so they partially overlapped.
-   Fixed effects leaking outside series area
-   Fixed `PieChartWithLabelsOnSides` pushing labels out of view.
-   Minor CPU performance optimizations for all chart types.
-   Fixed `BarChart` category axis title mispositioned with bipolar data set
-   Improved some situations where `BarChart` looked off when it had not been supplied data yet
-   Fixed `BarChart` value axis gridstroke plotted in wrong direction
-   Fixed `ZoomBandChart` missing series background style API

### Deprecated

-   Deprecated all `disableAnimations` readonly configurations.
    -   Added new `animationsEnabled` option to replace these.

## [4.2.1] - 2023-09-22

### Fixed

-   Fix DataGrid UI elements not working.

## [4.2.0] - 2023-08-08

### Added

-   Added `PolarHeatmapSeries`, `PolarHeatmapSeriesFormatter`, `PolarHeatmapSeriesOptions`
-   Added `BarChart`
    -   Dedicated chart type for visualizing categorical data with convenient high level end user API.
    -   Features (to mention some): cursor, sorting, animations, overlapping label hiding, different label position options, events API, high performance, support for large number of bars, logarithmic value axis, vertical + horizontal bars.
-   `Control.translateCoordinate`
    -   This method is present on all chart types and Dashboard
    -   It replaces `translatePoint` and similar previous APIs.
-   Added TimeTickStrategy.setFormattingFunction, setMajorFormattingFunction, setMinorFormattingFunction
-   Added convenience function: `DateTimeTickStrategy.setFormatting`
    -   Easier way of configuring date time ticks formatting for cases with simple requirements.
-   Added `Control.getSizePixels(): Point`
    -   Simple method for getting size of a chart in pixels.
-   Added `Control.onResize`, `Control.offResize`
    -   Methods were missing for `Dashboard` and `ZoomBandChart`
-   Added type guards for all style objects.
    -   `isSolidFill`, `isSolidLine`, `isFontSettings`, etc.

### Fixed

-   Fixed `FormattingFunctions.NumericUnits` sometimes not adding decimal places where necessary.
-   Fixed errors and crashes when supplying LCJS with style objects created from separate ES module based library.
    -   Problem appeared when using `lcjs-themes`, for example.
-   Fixed PolarChart radial axis stroke having clearly visible angle steps especially on large monitors.
-   Fixed issue where axis didn't scroll to show data if all coordinates were same.
-   Fixed LineSeries with DashedLine visualization error when appending 1 or very few data points at a time.
-   Fixed slight performance degradation with static Line Series
    -   Introduced in v4.1.0
    -   With 1 million data points, about 1 millisecond of extra loading time
-   Fixed DateTime tick display error in major = months range
    -   Sometimes right side great tick would display next year even if its not in axis range.

### Deprecated

-   Deprecated `translatePoint`, `translatePoint3D`, `PublicEngine.scale`, `PublicEngine.clientLocation2Engine`, `PublicEngine.engineLocation2Client`
    -   See `Control.translateCoordinate` for newer syntax of coordinate translations
-   Deprecated previous method signature of `solveNearestFromScreen`
    -   New signature was added to replace it. It expects object with { clientX: number, clientY: number } properties, instead of { x: number, y: number }. These values should be proper HTML client coordinates rather than internal LCJS engine coordinates like before.
-   Deprecated `pixelScale` properties.
    -   Use `coordsRelative` property instead, it works exactly same.
-   Deprecated Chart3D.world, Chart3D.axes over Chart3D.coordsWorld, Chart3D.coordsAxis

## [4.1.2] - 2023-06-22

### Fixed

-   Fixed memory leak when using `PalettedFill` repeatedly in `setFillStyle` or equivalent methods.
-   Fixed high precision axis not fitting to visible data on first attempt sometimes
-   Fixed gridlines not visible sometimes on high precision axis

## [4.1.1] - 2023-06-14

### Fixed

-   Fixed 2D heatmap crash when interpolation disabled
-   Fixed some cases where DateTime ticks were missing
-   Fixed Pie label connectors sometimes overlapping labels

## [4.1.0] - 2023-05-16

### Added

-   Added `automaticColorIndex` for 3D and spider series
    -   `SpiderSeries` got optional object with configuration arguments
-   Added `MapChart` highlighting.
    -   Hovering mouse on attached legend entry highlights the whole map.
    -   Hovering mouse over a region highlights that region. This can be disabled with `MapChart.setHighlightOnHover`
-   Added `CustomTick3D`
-   Added `DashedLine`
    -   Type of `LineStyle`
    -   Supported by selected features: Axis, ConstantLine, Ticks, CustomTick, SegmentSeries, LineSeries, PointLineSeries, StepSeries, SplineSeries, AreaSeries, AreaRangeSeries

### Changed

-   `SeriesOptions` was renamed to `SeriesOptionsXY`.
    -   `SeriesOptions` was re-added as options interface for all series from all chart types.
-   Greatly improved `MapChart` performance (CPU & GPU use reduced)
-   Logarithmic axis no longer throws errors and alerts if data is in invalid log range.
    -   May lead to apps having log axes with impossible intervals. In this case, visualization will not make sense or might behave weird.
-   Improved 2D Point Series loading speed.

### Fixed

-   Fixed `PointSeries` and `PointSeries3D` not supporting `LUT.color` when using value palette coloring.
-   Fixed `Axis.setVisible(false)` not properly hiding the Axis and it's ticks.
-   Fixed chart titles and some other internal UI components being drawn above legend box.
-   Fixed `AreaRangeSeries` and all types of `AreaSeries` not working with high precision axis.

### Deprecated

-   Deprecated old method signature of `SpiderChart.addSeries` over newer one

## [4.0.2] - 2023-02-21

### Fixed

-   Fixed GaugeChart allocating a bit excessive amount of space along Y direction.
-   Fixed CSS display 'none' breaking chart rendering even if restored afterwards to visible.

## [4.0.1] - 2023-02-13

### Fixed

-   Reduced amount of WebGL warnings thrown by FireFox.
    -   "ClientWaitSync must return TIMEOUT_EXPIRED" warning is now shown less.
-   Fixed LightningChart Logo showing up as a black box when only WebGL 1 was available.
-   Fixed WebGL warning for deprecated Alpha-premult for non-DOM-element uploads.

## [4.0.0] - 2023-02-06

### Added

-   Added `isThemeDark(Theme)` function to check if selected theme is dark or light
    -   Intended to be used on default library themes only, not custom user themes.
-   Added `EngineSettings.pickingPrecision` for modifying user interactions precision.
    -   This should not be required in normal use cases, but exists just in case.
-   Added `EngineSettings.interactable` for disabling all user interactions.
    -   This can be useful in server side rendering applications, or otherwise when user interactions are not needed.
-   Added new API `ChartXY.setAutoCursorEnabledDuringAxisAnimation`
    -   Supported by ChartXY
    -   Replaces functionality of removed APIs `Chart.setMouseInteractionsWhileScrolling` and `Chart.setMouseInteractionsWhileZooming`
-   Added `Chart.getTitleSize` method to get title size (width and height) in pixels
-   Added Dashboard.pixelScale property
-   Added `ChartXY.setTitlePosition` and `Chart.setTitleMargin` methods
-   Added `setVisible` and `getVisible` API to all visible elements.
    -   This API can be used to hide an element from rendering but still keep updating it in the background.
-   Added `onVisibleStateChanged` / `offVisibleStateChanged` event listener to most elements that support `setVisible`.
    -   This event will be triggered when the visibility of an element is actually changed.
-   Added `Hideable` interface.
    -   This interface is implemented by everything that can be hidden with `setVisible`.
-   Added `HideableEvents` interface.
    -   This interface is implemented by everything that has event listeners available for visibility state changes.
-   Added `setAnimationHighlight` and `getAnimationHighlight` methods to chart components.
-   AreaSeries and AreaRangeSeries now support `emptyFill` style
-   AreaSeries and AreaRangeSeries now support PalettedFill (x and y lookup properties)
-   `regularColorSteps` convenience function
-   Added `SolidGauge.setIntervalLabelsFillStyle`
-   Added `onDispose` and `offDispose` methods for all components that have `dispose()`. This event triggers whenever the object is disposed.
-   Added `isDisposed()` for Dashboard and all Chart types.
-   Added `UIElementBuilders.AxisTickMinor` type for CustomTick. This type has style of default minor tick
-   Added `isLUTCheckBox`
-   Added `UILUTCheckBox.setLUTDisplayProportionalSteps`
-   Added `Axis.onStoppedStateChanged`, `Axis.offStoppedStateChanged`
    -   Event API for tracking when Axis scrolling/fitting is stopped and unstopped.
-   Added `setInteractionMoveByDragging` API to ConstantLine. Now ConstantLine interactions can be disabled without disabling entire mouse interactions
-   Added `SeriesXY.setDrawOrder` method.
    -   This method can be used to explicitly configure drawing order of series in 1 chart.
-   Added common UI element API's to LegendBox
-   Chart3D event API for series background.
    -   `onSeriesBackgroundMouseEnter`, etc.
-   Started tracking minimum required TypeScript version.
    -   This information is available in API documentation https://lightningchart.com/js-charts/api-documentation
    -   Currently minimum TypeScript version is 4.1
-   Added new API `disableThemeEffects`
    -   New convenience API to easily disable the new glow and shadow effects from any given theme.
-   `Dashboard.getCells`
    -   Returns all defined dashboard cells with content.
-   EngineSettings.textPixelSnappingEnabled
    -   Can be used to toggle new text pixel snapping feature, which is enabled by default.
    -   If you encounter issues with text "moving" or "bouncing" undesirably, consider testing with disabling this experimental flag.
-   Icon, IconProperties
    -   Currently only supported by Data Grid.
-   Theme.legendTitleFont
-   Added GlowEffects
    -   Controlled with `Theme.effect`
    -   Individual component effects controlled with `set...Effect` methods
-   Added `ImageFitMode.Tile`
-   Added new Theme properties:
    -   `dataGridFont`, `dataGridTextFillStyle`, `dataGridCellStrokeStyle`, `dataGridBackgroundFillStyle`
-   Added `ValueGrid`
    -   New high level component type that can be placed in a Dashboard or used standalone.
    -   Provides a variety of frontend and data visualization methods inside a grid layout.

### Changed

-   Changed end user APIs that accepted rotations as radians to work with degrees instead:
    -   Data point `rotation` property was previously interpreted as radian, now as degrees
-   ChartXY and Chart3D default interactions now also work over series, instead of just series background
-   Theme interface now requires `isDark` property.
    -   For user defined Themes, you may set this to any value safely. It only interacts with `isThemeDark` convenience function.
-   Improved some default user interactions on trackpad
    -   Affects: ChartXY zoom, Axis zoom, Chart3D zoom
    -   Zooming now responds better according to user interaction behavior (small movement = small effect, etc.)
-   Changed Chart3D zoom animation to be smoother
-   Creating LightningChart component on user supplied DIV no longer overrides `style.position` if it was previously assigned by user
-   Renamed `setHighlighted` -> `setHighlight` and `getHighlighted` -> `getHighlight`
    -   New method now accepts boolean or a number between 0 and 1, meaning that the intensity of highlighting can be configured instead of just being ON/OFF
    -   `getHighlighted()` previously returned Boolean, now `getHighlight()` returns Number
-   Auto cursor now works when mouse is over a series with mouse interactions enabled.
    -   Previously this required user to disable mouse interactions with `series.setMouseInteractions(false)`
-   `onHighlight` parameter can now be `number` or `boolean`. Previously it was always `boolean`.
-   Changed AutoCursor default behavior.
    -   AutoCursor is no longer disabled during Axis Animations (zooming, scrolling) by default
    -   To restore this behavior, use `ChartXY.setAutoCursorEnabledDuringAxisAnimation(false)`
-   Following components default mouse interactions enabled state changes from false to true:
    -   LineSeries, HeatmapSeries, all 3D series
    -   This will not affect performance in any way. By default this will result in these series highlighting when interacted above.
    -   To disable this, use setHighlightOnHover(false)
-   Now axis interactions area expands when axis nibs are disabled.
    -   Axis nibs can be disabled with `axis.setNibInteractionScaleByDragging(false).setNibInteractionScaleByWheeling(false)`
-   Removed `LineStyle.thickness`, please use `LineStyle.getThickness()` instead.
-   `forEachAxis` method now returns `this` instead of `void`
-   UICheckBox 'switch' event is no longer triggered when `setOn()` is called and the state is actually unchanged.
-   Component highlighting is now animated by default.
    -   Animation can be disabled with `setAnimationHighlight(false)`
-   Changed look of LightningChart JS logo that is visible when not using a license.
-   highlighting doesn't touch the alpha channel anymore
-   Changed `LegendBoxAddOptions.disposeOnClick` to `toggleVisibilityOnClick`.
    -   Functionality is also changed to use setVisible internally, rather than dispose
-   Disposing a component can no longer be reverted.
    -   `dispose()` now permanently removes the component.
    -   To temporarily hide a component, use `setVisible(false)` instead
-   Changed default cursor result table formatter of most series types.
    -   Use `series.setCursorResultTableFormatter` method to alter this behavior.
-   Changed default CustomTick type from `UIElementBuilders.PointableTextBox` to `UIElementBuilders.AxisTickMajor`
-   Renamed NewSurfaceGridSeries3D -> SurfaceGridSeries3D, NewSurfaceGridSeries3DOptions -> SurfaceGridSeries3DOptions
-   Changed LegendBox LUTs to not display relative distances between step values. This was done to improve use of space and avoid overlapping labels in cases where LUT steps deltas increase exponentially.
    -   The previous display behavior can be restored with `UILUTCheckBox.setLUTDisplayProportionalSteps` method
-   LegendBoxes are now not draggable by default.
    -   To revert to previous behavior add `legend.setDraggingMode(UIDraggingModes.draggable)` after LB is created.
-   Renamed `Axis.isStopped` to `Axis.getStopped`
-   Slightly altered behavior of `Axis.setInterval` 4th parameter `disableScrolling`
    -   Renamed to `stopAxisAfter`
    -   Before, the method released the Axis unless the `disableScrolling = true`
    -   Now, the method stops the Axis unless `stopAxisAfter = false`
    -   Essentially very similar behavior, but now works a little bit more logically. Usage should not be affected by this change
-   Axis API 'onScaleChange' was changed to 'onIntervalChange' and accepts a callback function with 3 parameters that return axis itself, start and end values
    -   Previous event accepted only 2 parameters, start and end
-   Wrapped parameters of `Axis.setInterval` method in an object
    -   Previous use: `Axis.setInterval(start, end)` -> `Axis.setInterval({ start, end })`
    -   Parameter `disableScrolling` was renamed to `stopAxisAfter` and has a 'true' value by default
-   Library now targets ES6 version instead of ES5.
-   Previously optional `Theme` properties are no longer optional.
    -   `uiTickFont`
    -   `uiTickStrokeStyle`
    -   `uiTickTextFillStyle`
    -   `uiPointableTextBoxFont`
    -   `uiPointableTextBoxStrokeStyle`
    -   `uiPointableTextBoxTextFillStyle`
    -   `uiPointableTextBoxFillStyle`
    -   `lcjsBackgroundFillStyle`
    -   `lcjsBackgroundStrokeStyle`
    -   `heatmapGridSeriesFillStyle`
    -   `heatmapGridSeriesWireframeStyle`
    -   `surfaceSeriesWireframeStyle`
    -   `resultTableTextFont`
    -   `polarAreaSeriesStrokeStyle`
    -   `polarAreaSeriesFillStyle`
-   Loosened types of `LineStyle` and `emptyLine`. This should not cause any issues with existing applications, but should make it easier to use the library with type safety.
-   ImageFill.sourceMissingColor default value changed from opaque black to completely transparent black.
-   Slightly tweaked default legend, checkbox and lut checkbox style and layout.
-   Changed UI layout behavior (UIElementColumn/UIElementRow)
    -   Before layout was "center oriented", its members were aligned around the entire layouts center.
    -   Now, members are aligned to the start of layout (top for Row and left for Column). This should feel more logical than before.

### Removed

-   Removed all highlight style methods. This removes the ability to apply different style of highlighted components (all highlighted components now behave the same, always). To change highlighted style differently, change component style in event handlers.
    -   `setSplitterStyleHighlight`
    -   `getSplitterStyleHighlight`
    -   `setStrokeStyleHighlight`
    -   `getStrokeStyleHighlight`
    -   `setLineStyleHighlight`
    -   `getLineStyleHighlight`
    -   `setPointStyleHighlight`
    -   `getPointStyleHighlight`
    -   `setPointFillStyleHighlight`
    -   `getPointFillStyleHighlight`
    -   `setFillStyleHighlighted(PolarSector)`
    -   `getFillStyleHighlighted(PolarSector)`
    -   `setFillStyleHighlight`
    -   `getFillStyleHighlight`
    -   `setBodyFillStyleHighlight`
    -   `getBodyFillStyleHighlight`
    -   `setMedianStrokeStyleHighlight`
    -   `getMedianStrokeStyleHighlight`
    -   `setBodyStrokeStyleHighlight`
    -   `getBodyStrokeStyleHighlight`
    -   `setHighFillStyleHighlight`
    -   `setLowFillStyleHighlight`
    -   `setHighStrokeStyleHighlight`
    -   `setLowStrokeStyleHighlight`
    -   `setPositiveFillStyleHighlight`
    -   `getPositiveFillStyleHighlight`
    -   `setNegativeFillStyleHighlight`
    -   `getNegativeFillStyleHighlight`
    -   `setPositiveStrokeStyleHighlight`
    -   `getPositiveStrokeStyleHighlight`
    -   `setNegativeStrokeStyleHighlight`
    -   `getNegativeStrokeStyleHighlight`
    -   `createDefaultHighlightStyle`
    -   `getDefaultHighlightStyle`
-   Removed `Series.solveNearestFromSegment`, use `solveNearestFromScreen` instead
-   Removed `Series.onHover`, `Series.offHover`
-   Removed `Chart.setMouseInteractionsWhileScrolling`
    -   Use `ChartXY.setAutoCursorEnabledDuringAxisAnimation` instead
-   Removed `Chart.setMouseInteractionsWhileZooming`
    -   Use `ChartXY.setAutoCursorEnabledDuringAxisAnimation` instead
-   Removed Chart.setTitleMarginTop, Chart.setTitleMarginBottom and respective getters.
    -   Use Chart.setTitleMargin instead.
-   Removed all `restore()` methods
    -   To show temporarily hidden components, use `setVisible(true)`
-   Removed all `getDisposed()` methods.
    -   Disposing a component can no longer be reverted. If a component is disposed by user, then that component should no longer be interacted with in any way.
-   Removed several built-in Themes.
-   Removed some custom theme utilities included in library
    -   Types: CustomFillStyle, CustomLineStyle, CustomStyle
    -   `customTheme`, `customSimpleTheme`, `customComplexTheme`
-   Removed `SpiderSeries.setDisposeAnimation()`
    -   Replaced with `setVisibleStateChangedAnimation`
-   Removed `Axis.stop()`
    -   Replaced with `Axis.setStopped(true)`
-   Removed `Axis.release()`
    -   Replaced with `Axis.setStopped(false)`
-   Removed type `UILegendBox`
    -   Should be replaced as just `LegendBox`
-   Removed ability to specify Theme when adding a component to `Dashboard`.
    -   Theme must be specified when creating the Dashboard and thus must also be same for all components inside the Dashboard.
-   Old themes.
    -   `dark`
    -   `light`
    -   `darkGradient`
    -   `lightGradient`
    -   `auroraBorealis`
    -   `sunset`
    -   `blueSciFi`
    -   `monochrome`
    -   `lavender`
    -   `lavenderGradient`
    -   `classic`
    -   `night`
    -   `raspberry`
    -   `lipstick`
    -   `green`
    -   `lightGreen`
    -   `red`
    -   `lightRed`
    -   `purple`
    -   `lightPurple`
    -   `rainbow`
-   `Chart.disableAnimations()` method. Use `Chart.setAnimationsEnabled(false)` instead.
-   `ChartXY.addHeatmapSeries`
    -   Use `ChartXY.addHeatmapGridSeries` or `ChartXY.addHeatmapScrollingGridSeries` instead.
    -   Heatmap Mesh type is temporarily removed and is planned to be reintroduced in future. If you require this feature, please contact us and let us know your use case so that we can provide possible alternative methods or timeline on when this is reintroduced.
-   `ZoomBandChart.attachedAxis`
    -   Use `ZoomBandChart.attachedAxes` instead.
-   `HeatmapGridSeries.setPixelInterpolationMode`
    -   Use `HeatmapGridSeries.setIntensityInterpolation` instead
-   `Chart3D.addSurfaceMeshSeries`
    -   3D Surface Mesh Series is temporarily removed and is planned to be reintroduced in future. If you require this feature, please contact us and let us know your use case so that we can provide possible alternative methods or timeline when this is reintroduced.
-   `Axis.getHeight()`
-   `Dashboard.mapCharts` and `Dashboard.forEachChart`
    -   Use `Dashboard.getCells` and filter for `Chart` instances to replace these methods.
-   Renamed axis event handlers.
    -   `onAxisAreaMouseDragStart`
    -   `onAxisAreaMouseDrag`
    -   `onAxisAreaMouseDragStop`
    -   `onAxisInteractionAreaMouseTouchStart`
    -   `onAxisInteractionAreaMouseTouch`
    -   `onAxisInteractionAreaMouseTouchStop`
    -   `offAxisInteractionAreaMouseTouchStart`
    -   `offAxisInteractionAreaMouseTouch`
    -   `offAxisInteractionAreaMouseTouchStop`
-   3D Line Style methods.
    -   `LineSeries3D.setLineStyle`
    -   `LineSeries3D.getLineStyle`
    -   `PointLineSeries3D.setLineStyle`
-   `Chart3D.addSurfaceSeries`
    -   Use `Chart3D.addSurfaceGridSeries` or `Chart3D.addSurfaceScrollingGridSeries` instead.
    -   Surface Mesh type is temporarily removed and is planned to be reintroduced in future. If you require this feature, please contact us and let us know your use case so that we can provide possible alternative methods or timeline on when this is reintroduced.
-   Removed deprecated Theme properties.
    -   `dashboardBackgroundFillStyle
    -   `dashboardBackgroundStrokeStyle
    -   `axisLabelFillStyle
    -   `axisLabelFont
    -   `customTickMarkerFillStyle
    -   `customTickMarkerTextFillStyle
    -   `customTickMarkerStrokeStyle
    -   `customTickMarkerFont
    -   `seriesStrokeStyle3D
    -   `seriesTriangulatedPointStyle3D
    -   `seriesNonTriangulatedPointStyle3D
    -   `OHLCBarPositiveHighlightStyle
    -   `OHLCBarNegativeHighlightStyle
    -   `candleStickStyleHighlight
    -   `candleStickPositiveStyleHighlight
    -   `candleStickPositiveStrokeStyleHighlight
    -   `candleStickNegativeStyleHighlight
    -   `candleStickNegativeStrokeStyleHighlight
    -   `pointMarkerHorizontalGridStrokeStyle
    -   `pointMarkerVerticalGridStrokeStyle
    -   `pointMarkerTextFillStyle
-   `Axis.setTickStyle` Use `Axis.setTickStrategy` instead.
-   `Series.setMaxPointCount`, `Series.getMaxPointCount`
    -   Use `Series.setDataCleaning` instead.
-   `setDataCleaningThreshold`
    -   Use `setDataCleaning` instead.
-   `LUTOptions.valueRangeMin` and `LUTOptions.valueRangeMax`
-   Removed HighlightModes and setHighlightMode methods
    -   Usually should use setHighlightOnHover instead
    -   Previous use of onHoverIndividual option is no longer supported. Instead, components should be separated into different series or custom events should be used.

### Fixed

-   Fixed FigureSeries mouse drag stop event receiving wrong parameters
-   Fixed Chart3D zoom animation being more sensitive with low FPS
-   Crash when invalid point shape was provided.
-   Fixed `PointLineSeries3D` point style `wireframe` option not working.
-   Fixed `SurfaceGridSeries3D` wireframe being invisible when `thickness` < 0
-   Fixed ConstantLine RadialGradient when thickness = 1
-   Fixed `PointSeries3D` wireframe being invisible when `thickness` is < 0
-   Fixed visual error when trying to add entry to a disposed legend box.
-   Fixed Candlesticks being invisible when close is equal to open
-   Fixed LegendBox.setEntries() affecting all LegendBoxes instead of just one.
-   Fixed ChartXY fitting rectangle sometimes looking like zooming rectangle (no crosses)
-   Fixed ticklines and gridlines being hidden if label fill style is set to `emptyFill`
-   Fixed crash when using Surface 3D Series on some mobile devices.
-   Fixed StepSeries cursor picking on non-real data points some times.
-   Fixed Numeric ticks performance issue that sometimes occured when axis interval is less than 1.
-   Fixed PointLineSeries3D crash when points are styled as PalettedFill but stroke not.
-   Fixed PointSeries3D crash with emptyFill but visible wireframe
-   Fixed Line series some data points not being solvable by cursor when using data gaps
-   Fixed crash when creating zoom band chart on an Axis that contained an area series
-   Fixed MapChart incorrect PalettedFill color interpolation when interpolation disabled
-   Fixed `SolidGauge.setDataLabelFillStyle` also affecting interval labels fill style
-   Fixed hiding components using LegendBox sometimes changing render order of components.
-   Fixed visibility rendering issue in spline series
-   Fixed LineSeries -1 thickness resulting in axis regions shrinking and possibly partly clipping lines
        -   1 thickness can be used for most optimal line rendering mode, especially useful for low end devices.
-   Fixed `synchronizeAxisIntervals` sometimes stopping scrolling if 1 of many series are hidden via LegendBox.
-   Fixed application crash in a specific scenario when RectangleFigure style is changed to emptyFill during run-time
-   Fixed GaugeChart animations sometimes doing quirky unanimated jumps when value is changed more rapidly than animation finishes.
-   Fixed mouse enter and leave events sometimes being fired in wrong order when moving mouse between two objects
    -   Correct order is always LEAVE, ENTER
-   Fixed performance issue when ZBC is used with large line chart (over 1 million data points).
-   Fixed rendering line shapes after styling visible style to empty style and then to SolidLine
-   Fixed issues with gradient fill during streaming data in LineSeries
-   Fixed AreaSeriesBipolar wrong rendering sometimes when data crosses over baseline.
-   Fixed console warning: "Canvas2D: Multiple readback operations using getImageData are faster with the willReadFrequently attribute set to true."
-   Fixed UICircle background sometimes not rendering properly when chart viewport changes.
-   Fixed MapChart Turkey having incorrect ISO_A3 code
-   Fixed chart mouse interactions and coordinate translation messing up if chart is scrolled in a non-body div that is also not the charts container.
    -   This fix does not work out of the box. In this kind of use case, you'll have to inform the chart when it is scrolled with `chart.engine.layout()`
-   Fixed `ChartXY` rectangle zoom/fit sometimes failing randomly (not doing anything)
-   Fixed chart flickering sometimes when resizing
-   Fixed occasional crash / memory leak issue related to use of `ZoomBandChart.dispose`
-   Fixed some warnings not being disabled by `warnings` LCJS option.
    -   "Uint8ClampedArray is not supported as texture data..."
    -   "WebGL extensions could not be loaded..."
-   Fixed Axis interaction events not triggered if the default interaction is disabled.
    -   This effectively prevented defining custom interactions over Axis.
-   Fixed series with auto scrolling disabled still affecting axis regions.
-   Fixed Axis.setChartInteractionZoomByWheel(false) not working
-   Fixed massive performance issue with LineSeries3D and PointLineSeries3D
    -   Introduced in v3.4.0
-   Fixed logarithmic minor ticks hidden when no major tick is visible
-   Fixed AutoCursor sometimes being below UI elements
-   Fixed incorrect LUT color lookup in some specific use cases
    -   Map, Funnel, Gauge, Pie, Pyramid when LUT with interpolation disabled is used.

### Deprecated

-   LightningChart JS no longer officially supports Internet Explorer 11.

## [3.4.0] - 2022-02-02

### Added

-   Added `PalettedFill` support to Line and PointLine Series (2D and 3D)
    -   2D series support all available lookup properties: `'x'`, `'y'` and `'value'`
    -   3D series support `'x'`, `'y'` and `'z'` lookup properties
-   Added MapChart.onViewChange
    -   Allows laying ChartXY over MapChart for powerful and convenient geographical data visualization
-   Added `Dashboard.getRowHeight`, `Dashboard.getColumnWidth`
-   Added `PalettedFill` support to 2D and 3D axis strokes
    -   Axes can now be colored dynamically based on `x`, `y` or `z` coordinate using `setStrokeStyle` method
-   Added `CustomTick.onValueChange`
-   Added `onDispose` method to all stand-alone chart components (`Dashboard`, `ChartXY`, `Chart3D`, etc.)
-   Added support for data gaps in most XY series
    -   Number.NaN can be used to specify a data gap
    -   Supported by LineSeries, PointLineSeries, StepSeries, AreaSeries and AreaRangeSeries
-   Added support for supplying data as typed arrays for most XY chart features
    -   Affects following data methods: `addArrayX`, `addArrayY`, `addArraysXY`
    -   At this time, this does not increase performance, when compared to any previous method of supplying data

### Changed

-   Significantly improved LineSeries visual quality when using progressive data pattern.
    -   Line looks clearly sharper and smoother.

### Fixed

-   Fixed `ZoomBandChart` displaying step series as line series
-   Fixed Point Line Series incorrect fitting on first frame when scroll strategy is `undefined`.
-   Fixed CustomTicks being rendered above series.
-   Fixed `LineSeries` with progressive data pattern looking slightly off in some very specific scenarios
-   Fixed auto cursor flickering when moved above series with rapidly clearing data
    -   Applies to use cases that do `Series.clear().add(...)` very rapidly
    -   Also applies to use of `Chart.solveNearest` if used in above scenario
-   Fixed CustomTick gridline sometimes spanning outside the chart area
-   Fixed `ChartXY.dispose()` not removing bands and some other components when used inside Dashboard.
-   Fixed `MapChart.setAutoCursorMode(AutoCursorModes.disabled)` not hiding cursor
-   Fixed `PointSeries.clear()` still showing cleared data until new data is added.
-   Fixed crash when disposing and recreating Chart3D
-   Fixed surface series crash when phong shading style is enabled

## [3.3.3] - 2021-12-14

### Fixed

-   Fixed StepSeries crash after clear + add

## [3.3.2] - 2021-12-08

### Fixed

-   Fixed Chart size being incorrect when using explicit chart width and/or height.
    -   This mainly affected scenarios where chart was placed in automatically generated container.

## [3.3.1] - 2021-12-08

### Fixed

-   Fixed case where chart size would grow indefinitely.
    -   Changes to Chart container default CSS
        -   boxSizing: 'content-box'

## [3.3.0] - 2021-12-01

### Added

-   Added Chart3D zoom animation
    -   This is present when using mouse wheel or trackpad
    -   Can be disabled with `Chart3D.setAnimationZoom(false)`
-   Added `NewSurfaceGridSeries3D`
    -   Optimized version of previous surface grid series feature
    -   This new feature has even up to 1000x better performance. Usage is almost exactly same
-   Added `SurfaceScrollingGridSeries3D`
    -   Specially designed series type for scrolling surface applications
    -   Compared to previous surface grid series feature, has up to 1000x better performance
-   Added `Theme.surfaceSeriesWireframeStyle`
-   Added `CullMode3D`. This can be used with new 3D surface series
-   Added `TriangulatedPoints3DProperties.wireframeStyle`. This allows drawing wireframe for 3D points. Disabled by default.
-   Added `ChartXY.getDefaultAxes`, `Chart3D.getDefaultAxes`
    -   Convenience methods for applying same operations to several axes
-   Added `ZoomBandChartOptions.bandAboveSeries` to indicate whether band should be displayed above or below series.
    -   Previously band was always under series.
    -   Defaults to `true`, to display similarly as before set to `false`.
-   Added `SpiderChart.setScaleLabelFormatter`
-   Added optional `automaticColorIndex` property to all XY series options
    -   This allows interacting with the default themes automatic coloring of several series
-   Added `CustomTick.setAllocatesAxisSpace()`
    -   Can be used to disable axis allocating space for particular custom ticks.
-   Added `lineAntiAlias` EngineOption.
    -   This can be used to explicitly disable line anti-aliasing.
-   Added `Chart3D.onCameraChange`, `Chart3D.offCameraChange`.
-   Added `TimeTickStrategy.setTimeOrigin` option, works similarly to `DateTimeTickStrategy.setDateOrigin`
-   Added `ImageFill` style.
    -   Allows filling any rectangular shape in chart based on external image or video.
-   Added `EngineSettings.webgl` to allow specifying used WebGL (graphics framework) version.

### Changed

-   Webpack 5 no longer requires additional configuration for Node JS core modules.
-   `ZoomBandChart` now automatically matches the TickStrategy of first attached axis.
    -   ZBC axis can be manually modified using `getDefaultAxisX` and `getDefaultAxisY` methods, just like `ChartXY`
-   Significant optimizations to `HeatmapGridSeriesIntensityValues` and `HeatmapScrollingGridSeriesIntensityValues`
    -   Load-up speed increased by ~250%
    -   Load-up speed of empty heatmap increased by 10x
    -   Memory usage decreased by ~60%
    -   Intensity data update speed increased significantly
    -   Find latest conclusive performance updates at our web site https://www.arction.com/high-performance-javascript-charts/
-   Added default wireframe style to heatmap grid series
    -   To disable wireframe, use `setWireframeStyle(emptyLine)`
-   Heatmap grid series legend entries are no longer colored based on wireframe style
-   Changed default Chart3D bounding box stroke style to `emptyLine`
    -   Use `Chart3D.setBoundingBoxStrokeStyle` to specify bounding box stroke style.
-   Added little bit of default left padding to `UICheckBox` and `UIButtonBox`
-   Changed default right padding in XY chart from 10px to 24px
    -   To change right padding, use ChartXY.setPadding({ right: 10 })
-   Enabled Axis3D scroll animation by default.
    -   To restore previous behavior, use `Axis3D.setAnimationScroll(false)` for each 3D axis.
    -   Axes can be referenced like this `Chart3D.getDefaultAxisX()`.
-   Improved line anti-aliasing quality.
    -   Primitive lines, with only hardware anti-aliasing, can now be drawn by setting the line thickness to `-1`.
    -   Previously primitive lines were used when line thickness was set to `1`, now to use primitive lines you will need to use `-1` as the thickness.
    -   By default lines with thickness of `1` are now rendered with higher quality anti-aliasing.
-   Improved track-pad interactions with ChartXY and Chart3D (previously it was much too sensitive).
    -   Known issue: track-pad is still too sensitive on Safari.
-   LightningChart JS now uses `WebGL 2` whenever supported. This shouldn't introduce any major difference to existing applications and users. If anything, `WebGL 2` should work better.
-   `DateTimeTickStrategy.setFormatting...` methods now allow supplying `undefined` for any value (only overriding particular settings).
-   `DateTimeTickStrategy.setFormattingSecond` now allows configuring formatting of minor ticks at that level.
    -   This option was incorrectly missing before.
-   Charts now automatically trigger layout operation when chart container is resized.
    -   This is done by using a ResizeObserver if the browser has support for it.
-   `TriangulatedPoints3DProperties.size` can now be `Coord3D`. This allows drawing 3D points with sizes on X, Y and Z Axes.
-   `ZoomBandChart` band is now drawn above series.
-   `ZoomBandChart` now supports Heatmap series (non-scrolling variant only).
-   `ZoomBandChart` can now be attached to several axis by supplying an array instead of just one axis when it is created.
-   `ZoomBandChart` now automatically aligns its right side according to reference charts.
    -   Previously only left side was aligned.
-   Tweaks to default Axis ticks
    -   In XY charts, ticks that do not fit no longer display their tickline and gridline. Previously, only the label was hidden.
    -   Fixed Numeric major ticks sometimes behaving strange when there is little axis space available. For example, showing 1, 3, 5 instead of 0, 2, 4, 6.
    -   Numeric minor ticks are no longer displayed if the axis is shorter than 50 pixels.
    -   Slightly adjusted the selection of Numeric tick level. Larger tick levels are now activated slightly less eagerly.
-   ChartXY title no longer allocates top & bottom margins when title length is ''

### Fixed

-   Fixed spline series mouse interactions being triggered when mouse was outside of spline.
-   Fixed Map Charts not properly stopping mouse and touch events.
-   Fixed dashboard series sometimes not rendering after disposing and creating several charts
-   Fixed Test Domain being prioritized over Deployment Domain.
    -   Resulted in "Deployment Test" watermark being rendered in a valid Deployment Domain.
-   Fixed bad performance when repeatedly triggering `clear` + `add` methods for `LineSeries` or `PointSeries`.
-   Fixed heatmap series not updating palette if configured after intensity data.
-   Fixed GaugeChart disableAnimations flag not working when inside Dashboard.
-   Fixed GaugeChart behaving strange when animations are enabled and slice value is changed rapidly.
-   Improved high CPU usage in Chart3D when camera is rotated with automatic fitting enabled.
-   Fixed 3D pixelated points having different visible size with different device pixel ratio monitors.
-   Fixed chart interaction not properly canceled when interaction goes over OSM element.
-   Fixed 3D chart centering after resize -`LinearGradientFill` and `RadialGradientFill` now properly thrown an error when color stop definition doesn't contain enough color stops.
-   Fixed `IntensityGrid` and `IntensityMesh` not rendering after restored when using `IndividualPointFill`.
-   Fixed `Axis` event API having some incorrect typings (wheel, drag & touch events) and callback not receiving all arguments.
-   Fixed `HeatmapScrollingGridSeriesIntensityValues` scrolling sometimes behaving strangely (pausing or skipping ahead).
-   Fixed `Axis` animations sometimes not disabled even if chart animations are disabled.
-   Fixed touch events not properly cancelled when touch event goes over OSM.
-   Fixed XY and Polar Axis sometimes rendering incorrectly for 1 frame after window resize.

### Deprecated

-   Deprecated `Chart3D.addSurfaceSeries`
    -   To keep using surface grid series, use `Chart3D.addSurfaceGridSeries`.
        -   This is a new series type with slightly changed API and greatly increased performance
    -   To keep using surface mesh series, use `Chart3D.addSurfaceMeshSeries`
-   Deprecated `Axis.setTickStyle`. Use `setTickStrategy` instead.
-   Deprecated `LUT.valueRangeMin`, `LUT.valueRangeMax`. They do not affect anything anymore
-   Deprecated `HeatmapGridSeries.setPixelInterpolationMode`, use `setIntensityInterpolation` instead
-   Deprecated some inconsistently named methods of `Axis`:
    -   `onAxisAreaMouseDragStart` -> `onAxisInteractionAreaMouseDragStart`
    -   `onAxisAreaMouseDrag` -> `onAxisInteractionAreaMouseDrag`
    -   `onAxisAreaMouseDragStop` -> `onAxisInteractionAreaMouseDragStop`
    -   `onAxisInteractionAreaMouseTouchStart` -> `onAxisInteractionAreaTouchStart`
    -   `onAxisInteractionAreaMouseTouch` -> `onAxisInteractionAreaTouch`
    -   `onAxisInteractionAreaMouseTouchStop` -> `onAxisInteractionAreaTouchStop`
    -   `offAxisInteractionAreaMouseTouchStart` -> `offAxisInteractionAreaTouchStart`
    -   `offAxisInteractionAreaMouseTouch` -> `offAxisInteractionAreaTouch`
    -   `offAxisInteractionAreaMouseTouchStop` -> `offAxisInteractionAreaTouchStop`
-   `ZoomBandChart.attachedAxis`, use `attachedAxes` (array property) instead.

## [3.2.0] - 2021-09-22

### Added

-   Added `DateTimeTickStrategy.setCursorFormatter` for easy modification of cursor ticks formatting.
-   Added `NumericTickStrategy.setCursorFormatter` for easy modification of cursor ticks formatting.
-   Added `TimeTickStrategy.setCursorFormatter` for modification of cursor ticks formatting.
-   Added `translatePoint3D`, `Chart3D.axes`, `Chart3D.world` for translating coordinates between 3D _world space_ and _axis coordinates_. This can be used for depth sorting.
-   Added `Series3D.setDepthTestEnabled`. This gives more configuration options for drawing 3D transparent objects.
-   Added `PointSeriesOptions3D.individualPointSizeAxisEnabled`. This allows drawing 3D points with individual sizes on X, Y and Z Axes.
-   Added `Axis.setThickness`.
    -   This can be used to control the width or height of axis depending on is the axis Y or X axis.
-   Added primitive draw mode to `LineSeries3D` and `PointLineSeries3D`.
    -   This feature can be used for improved performance by reducing line depth perception.
    -   See `setStrokeStyle` method for more information.
-   Added `series.setAutoScrollingEnabled` for disabling scrolling and fitting of specific series.
-   Added `synchronizeAxisIntervals`. Utility for synchronizing intervals of one or more axis.

### Changed

-   Improved default Date time cursor formatting to display Year, month, day, hour and minute information. This can be modified with new method `DateTimeTickStrategy.setCursorFormatter`.
-   Added `dataPoint` parameter to `SeriesXYFormatter`. This allows using `value`, `size`, `color`, `rotation` and custom values in cursor result table formatters.
-   `ZoomBandChart` now automatically aligns itself with the reference chart.
-   Community version no longer has performance penalty.
-   `NumericTickStrategy.setFormattingFunction` now also affects default cursor result table formatting and cursor ticks formatting.
-   `SolidGauge.setIntervalLabelFormatter` and `setDataLabelFormatter` now also accept callback functions which can be used to display text that is not strictly numbers.
-   Improved axis tick rendering performance.

### Fixed

-   Fixed ChartXY UI element positioning on axis.
-   Fixed map chart AutoCursor not usable with touch.
-   Fixed `ZoomBandChart` not reacting to `Dashboard` `theme` or `disableAnimations` options.
-   `PointSeries3D` no longer crashes when styled with `PalettedFill`.
-   `PointSeries3D` now displays color lookup table range when attached to a legend box and styled with paletted fill.
-   Fixed edge case in text rendering when creating text with large font size.
-   Fixed occasional error message when zooming in and out line series rapidly.
-   Fixed incorrect rendering behavior when chart is transitioned to fullscreen on Safari.
-   Fixed incorrect legend box entry alignment after restoring the legend box entry.
-   Fixed `OHLCSeries` sometimes not being visible, especially when chart is created and animations are disabled.
-   Fixed point, line and range series `getPointAmount` not counting points that were added just before.
-   Fixed empty series affecting automatic fitting of series.
-   LightningChart JS logo now renders properly on high DPI devices with `window.devicePixelRatio` greater than 1.
-   Fixed poor performance when adding new points to charts with 1 million or more points in some cases.
-   Fixed `HeatmapGridSeries.getWireframeStyle` returning `FillStyle` instead of `LineStyle`.
-   Fixed TypeScript issue with being able to pass `LineStyle` as `FillStyle` or vice versa.
-   Fixed `HeatmapScrollingGridSeries` not attaching to any other axis than default chart axis.
-   Fixed `IntensityGridSeries` and `IntensityMeshSeries` not rendering after it has been restored.

## [3.1.0] - 2021-07-28

### Added

-   Added new chart type, `MapChart`.
    -   `MapChart` has multiple views for visualizing data in different regions of world.
    -   Supports real-time data updates with high FPS.
-   Added new series type, `PolygonSeries`.
    -   This series can be created with `ChartXY.addPolygonSeries`.
    -   `PolygonSeries.add` returns you a `PolygonFigure` object which can be used to style the polygon.
-   Added improved series type `HeatmapGridSeries`.
    -   This series can be created with `ChartXY.addHeatmapGridSeries`.
    -   Replaces the existing `IntensityGridSeries` (`ChartXY.addHeatmapSeries`) which is now considered deprecated and will be removed in next major release.
    -   This new series type provides considerably better performance compared to the previous version.
-   Added new series type `HeatmapScrollingGridSeries`.
    -   This series can be created with `ChartXY.addHeatmapScrollingGridSeries`.
    -   Provides a way to create scrolling heatmap with data cleaning support.
-   Added new methods to help to make better experience on devices with smaller screens.
    -   `UIElement.setAutoDispose`, `UIElement.getAutoDispose`
-   Added `High precision XY Axis`.
    -   New XY Axis type that allows zooming to smaller axis intervals with drawback of decreased performance. Refer to `AxisOptions` documentation for instructions.
    -   This is considered an experimental feature and might be changed in a minor or major release with no backwards compatibility.
-   Added `AxisTickStrategies.Time`.
    -   New automatic ticks strategy for depicting axis intervals between hundreds of hours and individual nanoseconds.
-   Added `TimeFormattingFunctions` helper methods for formatting millisecond time stamps to different time string formats.
-   Added `LUT` parameter to `UILUTCheckBox.setLUTStepValueFormatter` callback.
-   Added new options to `LUT`, `LUT.valueRangeMin` and `LUT.valueRangeMax`.
-   Added new control for suppressing warnings that are mostly useful when developing, `LightningChartOptions.warnings`.
-   Added `NumericTickStrategy.formattingOffset`, works similarly to `DateTimeTickStrategy.setDateOrigin`.
-   Ability to rotate all texts.
    -   `Chart.setTitleRotation`
    -   `Axis.setTitleRotation`
    -   `VisibleTicks.setLabelRotation`
    -   `ResultTable.setTextRotation`
    -   `CustomTick.setTickLabelRotation`
    -   `LegendBox.setTitleRotation`
    -   `UITextBox.setTextRotation`
-   Added helper method `Chart.zoom`.
-   Added helper method `Chart.pan`.
-   Added missing API `PolarChart.getSeries`.
-   Added missing API `Chart3D.getSeries`.
-   Added ability to control mouse and touch interaction state to 3D Chart.
    -   `Chart3D.setMouseInteractions`
    -   `Chart3D.setMouseInteractionZoom`, `Chart3D.getMouseInteractionZoom`
    -   `Chart3D.setMouseInteractionRotate`, `Chart3D.getMouseInteractionRotate`
-   Added `LineSeries3D.setStrokeStyle, getStrokeStyle, setStrokeStyleHighlight, getStrokeStyleHighlight`.
    -   These replace the similarly named `LineSeries3D.setLineStyle, getLineStyle, setLineStyleHighlight, getLineStyleHighlight`.
-   Added `PointLineSeries3D.setStrokeStyle, getStrokeStyle, setStrokeStyleHighlight, getStrokeStyleHighlight`
    -   These replace the similarly named `PointLineSeries3D.setLineStyle, getLineStyle, setLineStyleHighlight, getLineStyleHighlight`.
-   Added `individualPointColorEnabled`, `individualPointSizeEnabled` and `individualLookupValuesEnabled` to `PointSeriesOptions3D`.
-   Added `UIElementBuilders.LUTRange`.
-   Added more control to how 3D series are shaded.
    -   `Series3D.setColorShadingStyle`, `Series3D.getColorShadingStyle`
-   Added new Shading style `ColorShadingStyles.Simple`.
    -   This shading style can make some 3D visualizations look better by removing all shading and using the object colors directly.
    -   Using this shading style can improve performance on low end devices.
-   Added new Shading style `ColorShadingStyles.Phong`.
    -   This has been the default shading style for all 3D features since the 3D features were introduced.
    -   You can now control `ambientColor`, `ambientReflection`, `diffuseReflection`, `specularReflection`, `specularColor` and `shininess` options.
-   Added `ChartXY.addOnScreenMenu`.
    -   `OnScreenMenu` can be used to create UI controls over the chart.
    -   This is considered an experimental feature and might be changed in a minor or major release with no backwards compatibility.
-   Added new theme styling options.
    -   `Theme.lineSeries3DStrokeStyle`
    -   `Theme.pointSeries3DPointStyle`
    -   `Theme.pointLineSeries3DStrokeStyle`
    -   `Theme.pointLineSeries3DPointStyle`
    -   `Theme.pointCloudSeries3DPointStyle`
    -   `Theme.polygonSeriesFillStyle`
    -   `Theme.polygonSeriesStrokeStyle`
    -   `Theme.heatmapFillStyle`
    -   `Theme.heatmapWireframeStyle`
    -   `Theme.heatmapGridSeriesFillStyle`
    -   `Theme.heatmapGridSeriesWireframeStyle`
    -   `Theme.rectangleSeriesFillStyle`
    -   `Theme.rectangleSeriesStrokeStyle`
    -   `Theme.polarAreaSeriesFillStyle`
    -   `Theme.polarAreaSeriesStrokeStyle`
    -   `Theme.polarAreaSeriesStrokeStyle`
    -   `Theme.uiPointableTextBoxFillStyle`
    -   `Theme.uiPointableTextBoxTextFillStyle`
    -   `Theme.uiPointableTextBoxStrokeStyle`
    -   `Theme.uiPointableTextBoxFont`
    -   `Theme.uiTickTextFillStyle`
    -   `Theme.uiTickStrokeStyle`
    -   `Theme.uiTickFont`
-   Added new themes.
    -   `Themes.darkGold`
    -   `Themes.darkGreen`
    -   `Themes.darkLime`
    -   `Themes.darkMagenta`
    -   `Themes.darkRed`
    -   `Themes.darkTurquoise`
    -   `Themes.blueSciFiNew`
    -   `Themes.glacier`
    -   `Themes.lightNew`
    -   `Themes.lightNature`
    -   `Themes.darkNature`
    -   `Themes.duskInLapland`
    -   `Themes.auroraBorealisNew`
    -   `Themes.cyberSpace`
    -   Themes that end with suffix `New` will replace similarly named theme with no `New` suffix.
-   Most Theme series style properties now support Palette definition optionally as well.

### Changed

-   `FormattingFunctions.Numeric` now also works for more than 3 decimal parts.
-   `PointSeries3D` now supports `IndividualPointFill` style and `PalettedFill` style.
-   `PointSeries3D` performance has been greatly improved overall.
-   `LineSeries3D` performance has been greatly improved overall.
-   `PointLineSeries3D` performance has been greatly improved overall.
-   Removed _empty UI backgrounds_ from all default UI builders. This makes it easier to style UI backgrounds - afterwards, only using `setBackground(bg => bg.setFillStyle(...))` will always be enough.
-   Changed UI default background behavior - now ALL UI elements will always have background styled according to Theme by default. To hide background, use `setBackground(bg => bg.setFillStyle(...))`, etc.
-   `DateTimeTickStrategy` default cursor formatting now falls back to major ticks formatting if minor ticks are disabled.
-   Improved LUT precision.

### Fixed

-   Improved 3D color shading, and fixed some cases with incorrect lighting.
-   Fixed some scenarios where GPU memory wasn't freed when it could have been freed.
-   WebGL context wasn't marked as 'lost' when chart/dashboard was completely disposed.
-   Fixed `GL_INVALID_VALUE : glScissor` warning.
-   Fixed crash when Pie chart of type `PieChartTypes.LabelsOnSides` was created with only one slice.
-   Fixed 3D Point Line Series point size not updated to match highlight size when highlighted.
-   Fixed 3D Point Line Series point size could be smaller than line thickness, after changing line thickness, resulting in visible gaps in line.

### Deprecated

-   `Theme.seriesNonTriangulatedPointStyle3D`. Use `Theme.pointCloudSeries3DPointStyle` instead.
-   `Theme.seriesTriangulatedPointStyle3D`. Use `Theme.pointSeries3DPointStyle` instead.
-   `Theme.customTickMarkerFillStyle`. Use `Theme.uiPointableTextBoxFillStyle` instead.
-   `Theme.customTickMarkerTextFillStyle`. Use either `customTickMarkerTextFillStyle` or `uiTickTextFillStyle`.
-   `Theme.customTickMarkerStrokeStyle`. Use either `uiPointableTextBoxStrokeStyle` or `uiTickStrokeStyle`.
-   `Theme.pointMarkerHorizontalGridStrokeStyle`. Use `customTickGridStrokeStyle` instead.
-   `Theme.pointMarkerVerticalGridStrokeStyle`. Use `customTickGridStrokeStyle` instead.
-   `Theme.axisLabelFillStyle`. Use `numericTickStrategy` or other _tick strategy_ property instead.
-   `Theme.axisLabelFont`. Use `numericTickStrategy` or other _tick strategy_ property instead.
-   `Theme.pointMarkerTextFillStyle`. Use `uiPointableTextBoxTextFillStyle` or `uiTickTextFillStyle` instead.
-   `Theme.seriesStrokeStyle3D`. Use `Theme.lineSeries3DStrokeStyle` instead.
-   `Theme.seriesNonTriangulatedPointStyle3D`. Use `Theme.pointCloudSeries3DPointStyle` instead.
-   `Theme.seriesTriangulatedPointStyle3D`. Use `Theme.pointSeries3DPointStyle` instead.
-   `LineSeries3D.setLineStyle`. Use `setStrokeStyle` instead.
-   `LineSeries3D.getLineStyle`. Use `getStrokeStyle` instead.
-   `LineSeries3D.setLineStyleHighlight`. Use `setStrokeStyleHighlight` instead.
-   `LineSeries3D.getLineStyleHighlight`. Use `getStrokeStyleHighlight` instead.
-   `PointLineSeries3D.setLineStyle`. Use `setStrokeStyle` instead.
-   `PointLineSeries3D.getLineStyle`. Use `getStrokeStyle` instead.
-   `PointLineSeries3D.setLineStyleHighlight`. Use `setStrokeStyleHighlight` instead.
-   `PointLineSeries3D.getLineStyleHighlight`. Use `getStrokeStyleHighlight` instead.
-   `ChartXY.disableAnimations()` use `ChartXY.setAnimationsEnabled(false)` instead.
-   `Axis.disableAnimations()` use `Axis.setAnimationsEnabled(false)` instead.
-   `Dashboard.disableAnimations()` use `Dashboard.setAnimationsEnabled(false)` instead.
-   `Spider.disableAnimations()` use `Spider.setAnimationsEnabled(false)` instead.
-   `Polar.disableAnimations()` use `Polar.setAnimationsEnabled(false)` instead.
-   `Pie.disableAnimations()` use `Pie.setAnimationsEnabled(false)` instead.
-   `Gauge.disableAnimations()` use `Gauge.setAnimationsEnabled(false)` instead.
-   `Funnel.disableAnimations()` use `Funnel.setAnimationsEnabled(false)` instead.
-   `Pyramid.disableAnimations()` use `Pyramid.setAnimationsEnabled(false)` instead.
-   `Map.disableAnimations()` use `Map.setAnimationsEnabled(false)` instead.
-   `Chart3D.disableAnimations()` use `Chart3D.setAnimationsEnabled(false)` instead.
-   `Series.setMaxPointCount()` use `Series.setDataCleaning()` instead.
-   `Series.setDataCleaningThreshold()` use `Series.setDataCleaning()` instead.

## [3.0.1] - 2021-05-26

### Added

-   PointSeries, PointLineSeries, SplineSeries and StepSeries now support data point 'value' paletted coloring.

### Fixed

-   PointSeries, PointLineSeries, SplineSeries and StepSeries now properly interact with Legend LUT UI element if styled with PalettedFill.
-   LineSeries and AreaSeries stroke gradient stroke style sometimes would render incorrectly.
-   WebGL Errors in some scenarios when running 3D charts on Android Chrome.
-   Fixed LUT Unit label clipping out of legend box in some configurations.
-   Rectangle gradient stroke style not working properly.
-   Chart would try to zoom out when zooming in with touch gesture.
-   Surface 3D theme style only applied after the series was highlighted or style was explicitly set.
-   Box Series 3D legend box entry not styled according to the series fill style.
-   Axis pan direction could be reversed when chart was in dashboard and the chart was resized using a splitter and the axis was reversed.
-   Axis interval selection visual incorrect height in some scenarios.
-   Opposite axis positioning was incorrect before first update after the axis was added.
-   Polar Sector low resolution in some cases.
-   Fixed missing LineSeries mouse interactions.
    -   LineSeries Mouse interactions are disabled by default for performance reasons regarding freeform line series.
    -   Call LineSeries.setMouseInteractions(true) to enable mouse interactions if interactions are needed.
-   Fixed minor grid lines sometimes rendering over major grid lines

## [3.0.0] - 2020-05-05

### Added

-   PolarChart
-   PolarAxisAmplitude
-   PolarAxisRadial
-   PolarPoint
-   PolarPointSeries
-   PolarLineSeries
-   PolarPointLineSeries
-   PolarAreaSeries
-   PolarPolygonSeries
-   PolarSector
-   Logarithmic axis support for XY charts
-   BoxSeries3D now supports PalettedFill by x, y or z
-   LineSeries.setDataCleaningThreshold, getDataCleaningThreshold
-   LineSeries.setCursorSolveBasis, getCursorSolveBasis
-   PointLineSeries.setCursorSolveBasis, getCursorSolveBasis
-   SplineSeries.setCursorSolveBasis, getCursorSolveBasis
-   StepSeries.setCursorSolveBasis, getCursorSolveBasis
-   UILUTCheckBox
-   API for Axis mouse and touch events
-   UITick
-   UITickBuilder
-   UIElementBuilders.AxisTick
-   Configuration options for changing mouse interactions to different mouse buttons
-   `UILegendBoxPanel.setLegendBoxes`
-   NumericTickStrategy.setExtremeFormattingFunction
-   NumericTickStrategy.setMajorFormattingFunction
-   NumericTickStrategy.setMinorFormattingFunction
-   API for subscribing to mouse and touch events on chart background
-   Dependency to earcut (https://github.com/mapbox/earcut). Used for Polygon triangulation.

### Changed

-   Attaching a series with color lookup table (LUT) now automatically visualizes the color steps with a LUTUICheckBox component.
-   LegendBox title is no longer automatically set to match chart title. Title can be set with new method `LegendBox.setTitle`.
-   Tweaked LegendBox default style to look a bit nicer.
-   `LegendBox.add` API has changed. Refer to migration guide for details.
-   LegendBoxEntry is now styled accordingly with series `PalettedFill`.
-   Nib mouse wheel behavior is now more intuitive
-   Default style of XY Markers was changed to same as AutoCursor
-   Renamed CustomTick.setTopPadding -> setTickLabelPadding
-   Renamed PointableTextBox -> UIPointableTextBox
-   Major improvements to text rendering performance
-   Changed default CheckBox button picture to UIButtonPictures.Circle
-   Renamed `ResultTable.setFont` to `setTextFont`
-   Renamed `UITextBox.setFont` to `setTextFont`
-   Renamed `UICheckBox.setFont` to `setTextFont`
-   Renamed `LegendBoxEntry.setFont` to `setTextFont`
-   Theme.chartBackgroundFillStyle renamed to seriesBackgroundFillStyle
-   Theme.chartBackgroundStrokeStyle renamed to seriesBackgroundStrokeStyle
-   on/offChartBackground... event methods were renamed to on/offSeriesBackground...
-   setChartBackgroundFillStyle methods renamed to setSeriesBackgroundFillStyle
-   getChartBackgroundFillStyle methods renamed to getSeriesBackgroundFillStyle
-   setChartBackgroundStrokeStyle methods renamed to setSeriesBackgroundStrokeStyle
-   getChartBackgroundStrokeStyle methods renamed to getSeriesBackgroundStrokeStyle
-   Changed default CheckBox button picture to `UIButtonPictures.Circle`
-   `UILegendBoxPanel.add` no longer accepts series, or other _attachables_. Only chart or dashboard can be supplied.
-   Default LegendBox alignment changed from horizontal to vertical.
-   Improved default LegendBox positioning.
-   Changed default cursor solve basis of all line series' to `'nearest-x'`. This can be changed with new method: `setCursorSolveBasis`
-   Improved Line Series rendering algorithms for progressive and real-time rendering, to perform much faster and look better.
-   Heavily optimized progressive Line Series with user zooming in/out and automatic scrolling
-   Significantly improved Line Series memory usage in scrolling applications with data cleaning enabled
-   `AreaSeries` and `AreaRangeSeries` cursor now behaves as expected, by picking closest data point along X dimension. Cursor now also performs better.
-   All `dataPattern` options have been changed. Instead of selecting an option from `DataPatterns` export, use object format instead, for example `{ pattern: 'ProgressiveX' }`. See documentation/migration guide for details.
-   `onPanelBackground...` -methods were renamed to `onBackground...`
-   Renamed `setResultTableFormatter`, and `getResultTableFormatter` methods to `setCursorResultTableFormatter`, and `getCursorResultTableFormatter` respectively.
-   Improved API documentation

### Removed

-   `DefaultLibraryStyle` - Use Themes.dark or any other Theme instead.
-   `UILegendBoxPanel` title API (`setTitle`, `getTitle`, `setTitleFillStyle`, `getTitleFillStyle`, `setTitleFont`, `getTitleFont`).
-   `UILegendBoxPanel.setEntries`, use `UILegendBoxPanel.setLegendBoxes` for same functionality.
-   Boolean parameter to ChartXY.addAxisX and addAxisY. Replaced with object syntax
-   NumericAxisTickStrategy.setFormattingFunction. Replaced with individual setters for each tick level.
-   CustomTick.setPaddingBottom (can be accessed via TickMarker background)
-   CustomTick.setSidePaddings (can be accessed via TickMarker background)
-   CursorBuilderXY.setTickMarkerXBackground
-   CursorBuilderXY.setTickMarkerYBackground
-   `PointSeriesOptions3D.pointShape`, use `PointSeries3D.setPointStyle` instead.
-   `PointLineSeriesOptions3D.pointShape`, use `PointLineSeries3D.setPointStyle` instead.
-   Theme.numericTickStrategy3D use Theme.numericTickStrategy instead.
-   Theme.dateTimeTickStrategy3D use Theme.dateTimeTickStrategy instead.
-   `DataPatterns`. Use object format instead, for example `{ pattern: 'ProgressiveX' }`. See documentation/migration guide for details.

### Fixed

-   Fixed ticks overlapping other ticks in some cases
-   Fixed LUT unexpected color step behavior when interpolation is disabled
-   Fixed Axis.fit() when Series points are in a straight line
-   Fixed progressive Axis scrolling sometimes getting ahead of series
-   Fixed scenario where chart rendered with 1px x 1px canvas
-   Fixed Constant line and Band touch events not working inside dashboard.
-   Fixed mouse leave event not fired correctly in all cases
-   Fixed missing configuration for 3D chart creation inside dashboard, theme and disableAnimations can now be properly set
-   Fixed improper dispose behavior of ChartXY
-   IntensitySeries now supports highlighting when styled with SolidFill
-   IntensitySeries style is now properly matched in LegendBox
-   SurfaceSeries3D style is now properly matched in LegendBox
-   SurfaceSeries3D is now properly highlighted when hovering over respective LegendBoxEntry
-   Fixed some cases where series boundaries were one frame behind actual boundaries
-   Resolved some Z-fighting issues with `SurfaceSeries3D` wireframe and surface.
-   Fixed SurfaceSeries3D and HeatmapMeshSeries not accounting boundaries of first and last column & row.
-   Fixed axis nib mouse wheel scroll event wasn't properly stopped when interaction happened.
-   Fixed IntensitySeries not updating when using `addColumn` to add only values
-   Fixed type issues when using strict type checking mode with TypeScript
-   Fixed linear gradient interpolation being incorrect when devicePixelRatio wasn't exactly 1.
-   Fixed NumericTickStrategy formatting in very low value range (1e-6 and below)

## [2.2.1] - 2020-01-28

### Fixed

-   License verification error when using a valid license

## [2.2.0] - 2020-01-27

### Added

-   Chart3D series background
    -   Chart3D.setSeriesBackgroundFillStyle
    -   Chart3D.setSeriesBackgroundStrokeStyle
-   3D BoundingBox style API
    -   Chart3D.setBoundingBoxStrokeStyle
    -   Chart3D.getBoundingBoxStrokeStyle
-   3D camera behavior control
    -   Chart3D.setCameraAutomaticFittingEnabled
    -   Chart3D.getCameraAutomaticFittingEnabled
-   New color palettes for palettes that match with the themes added in 2.1.0
    -   auroraBorealis
    -   blueSciFi
    -   light
    -   monochrome
    -   night
    -   sunset2
-   Add get/setResultTableFormatter for IntensitySeries
-   Intensity series wireframe. This was included in 2.1.0 release but was missing from the changelog. Changelog for 2.1.0 has also been updated to include this change.

### Changed

-   Major improvements to 3D Point Series and 3D Line Series performance
-   Improved 3D Box Series performance
-   Improved Axis3D tick and grid line rendering performance
-   General performance improvements
-   Tweaked Axis3D joint style with thick line style
-   Inconsistent RangeSeries max point count value to be consistent (0) with other series types.
-   Improved default Chart3D camera behavior to fit data into visible viewport better
-   Improved default themes paletted color behavior
-   Improved 3D Line Series visual style
-   Added 'shape' option to PointStyle3D.Triangulated for changing 3D points shape during runtime.
-   Tweaked themes

### Fixed

-   3D theme inconsistencies
-   `Axis.setScrollStrategy` TS type not accepting `undefined`
-   IntensitySeries zooming and panning did unnecessary calculation

### Deprecated

-   Theme.numericTickStrategy3D use Theme.numericTickStrategy instead.
-   Theme.dateTimeTickStrategy3D use Theme.dateTimeTickStrategy instead.
-   ChartXY.setChartBackgroundFillStyle renamed to setSeriesBackgroundFillStyle
-   ChartXY.setChartBackgroundStrokeStyle renamed to setSeriesBackgroundStrokeStyle
-   PointSeries3D 'pointShape' initialization configuration. Use PointSeries3D.setPointStyle instead.
-   PointLineSeries3D 'pointShape' initialization configuration. Use PointLineSeries3D.setPointStyle instead.

## [2.1.0] - 2020-11-30

### Added

-   3D Surface Series
-   3D Box Series
-   Added 3D Tick gridlines.
-   Heatmap cursor support
-   Custom Theme API to create your own Themes.
    -   customSimpleTheme()
    -   customComplexTheme()
    -   customTheme()
-   New themes
    -   AuroraBorealis
    -   BlueSciFi
    -   Classy
    -   DarkGradient
    -   Lavender
    -   LavenderGradient
    -   LightGradient
    -   Lipstick
    -   Monochrome
    -   Night
    -   Raspberry
    -   Sunset
-   Series.onHighlight / Series.offHighlight
-   `Axis.getInterval()` method for retrieving the currently applied axis scale interval.
-   Added `vec3utils`. A collection of 3-dimensional vector math functions.
-   Intensity series wireframe

### Changed

-   Highlighting a Series on a Chart also highlights corresponding Series in attached Zoom Band Chart

### Removed

### Fixed

-   Fix not being able to style 3D Tick lines.
-   Fixed error when running the charts in Node JS. (With the lcjs-headless package)
-   Pie, Funnel and Spider charts animation speed inconsistency with ChartXY animation speed.
-   Rendering error on first frame.

### Deprecated

-   `DefaultLibraryStyle` - Use Themes.dark or any other Theme instead.

## [2.0.3] - 2020-10-15

### Fixed

-   Rendering error after chart with PointSeries had been disposed once and recreated with a new PointSeries.

## [2.0.2] - 2020-09-17

### Fixed

-   Fixed issue with PointSeries in Mac systems.
-   Fixed AutoCursor being out of sync with actual position.
-   Fixed issues with AngularJS related to typings.

## [2.0.1] - 2020-09-07

### Fixed

-   Fixed new example links in readme file

## [2.0.0] - 2020-09-04

### Added

-   Add public API to get Highlighters for Axis
-   Added onPositionChange event to ChartMarker and SeriesMarker
-   Added more mouse and touch events to chart background
-   layout() method to PublicEngine interface.
-   Add LinearGradientFill and RadialGradientFill fill styles.
-   Added Axis _setTickStrategy_ method.
-   Added AxisTickStrategies.Empty (replaces Axis.setTickStyle( emptyTick ))
-   Added VisibleTicks.setLabelAlignment()
-   Chart3D
-   Axis3D
-   Point3D
-   PointSeries3D
-   PointCloudSeries3D
-   PointStyle3D
-   LineSeries3D
-   PointLineSeries3D

### Changed

-   Refactored thick line rendering.
    -   Improves the visual style of the line when a semi-transparent fill style is used.
    -   Improves GL memory usage. Same line now takes 40 to 70% less GL memory depending on the line.
-   PointSeries now uses faster rendering methods on supported devices.
    -   Major performance improvement
    -   Uses less GL memory
-   columnSpan and rowSpan Dashboard options are now optional and default to 1.
-   Chart options when creating a chart inside dashboard are simplified.
    -   Options are no longer behind a separate object but are instead given in same object as the dashboard options.
-   Reduced zooming animation duration
-   Made transparent backgrounds possible.
-   LightningChart JS now requires the following WebGL extensions to work properly
    -   ANGLE_instanced_arrays
    -   EXT_blend_minmax
    -   OES_element_index_uint
    -   OES_standard_derivatives
    -   OES_vertex_array_object
    -   WEBGL_lose_context
    -   If any of these extensions is missing, then a dismissible warning will be shown to notify users of possibly incorrectly working features.
-   Changed seriesBackground mouse and touch event naming to chartBackground mouse and touch events.
    -   e.g. onSeriesBackgroundMouseDown was changed to onChartBackgroundMouseDown
-   `requestAnimationFrame` and `cancelAnimationFrame` are no longer polyfilled automatically.
    -   The methods should be polyfilled if support for environments where the methods don't exist is needed.
-   Numeric Axis ticks have been reworked
-   DateTime Axis ticks have been reworked
-   Mouse and touch events are properly handled to allow normal browser interactions when chart does no action for the event
-   Changed ColorHEX factory color syntax to follow CSS color syntax, #RRGGBB\[AA\]
-   Changed default highlight behavior of Series.
    -   Series is no longer highlighted by default when hovering over it. Use `series.setHighlightOnHover()` or `chart.setSeriesHighlightOnHover()` to highlight on hover.
-   Improved styles for default themes.

### Removed

-   AxisTickStrategies.NumericWithUnits
-   Passing AxisTickStrategy of default Axes upon creating a ChartXY
-   Passing AxisTickStrategy as parameter of ChartXY.addAxisX() or ChartXY.addAxisY()
-   Removed APIs that were previously marked deprecated.
    -   `Chart.setDataLabelFormater`
    -   `Chart.getDataLabelFormater`
    -   `Chart.setChartBackgroundStroke`
    -   `Chart.getChartBackgroundStroke`
    -   `Series.setMaxPointsCount`
    -   `containerId` option

### Fixed

-   Fix legend box item checkbox looking bad when stroke style is other than 1.
-   Fix touch events triggering outside chart area

## [1.3.1] - 2020-05-29

### Fixed

-   Inconsistent cursor style changing when moving from hovering element to hovering one element to hovering over another element.
-   Fixed a crash when adding data to OHLCSeries
-   Hovering over the Arction logo for long enough caused the chart to freeze itself instead of allowing clicking a link to go to the Arction website.
-   Incorrect resolution and interactions when opening a chart in fullscreen mode

## [1.3.0] - 2020-04-28

### Added

-   Heatmap
-   ChartXY.addHeatmapSeries()
-   IntensityGridSeries can be used for visualization of magnitude in two dimensions.
-   IntensityMeshSeries can be used for visualization of magnitude in two dimensions, where the geometry of the series can be edited.
-   Dashboard.createZoomBandChart()
-   Added Axis _Bands_ and _ConstantLines_.
-   Application/Intranet Deployment key support
-   A way to disable all animations at once.
    -   Call `disableAnimations()` on any chart or specify `disableAnimations: true` as a chart creation option.
-   Added series._addArrayX()_, ._addArrayY()_, ._addArrayXY()_ to basic Series types in XY Charts for user convenience.
    -   These methods cause some overhead when used, so using the series._add()_ is still recommended for best performance.
-   Added _.addArrayY()_ to _OHLCSeriesWithAutomaticPacking_ for user convenience.
    -   This method causes some overhead when used, using _.add()_ method is still recommended for best performance.
-   getSeries() method to XY Charts and Spider chart.
-   Support for rendering in Node JS environment with the help of "@arction/lcjs-headless" package.
-   `renderFrame()` method to engine.
-   Added getDataLabelFillStyle and setDataLabelFillStyle to SolidGauge.

### Changed

-   _FitEngineToDiv.container_ to pass DOM Element to Engine. Users can pass either DOM Element itself, or its ID.
-   Mouse and touch interaction handling to add support for pen and PC touch screen interactions.
    -   All interactions still work the same way, interactions just has better support for more interaction methods.

### Fixed

-   Rendering error on some GPU's where GPU received some vertices as NaN instead of a valid vertex.
-   Inconsistent style for SeriesMarker tick X and Y labels
-   Fixed a TypeError on pyramid chart
-   LightningChart JS logo failing to render correctly when high-dpi mode is used and devicePixelRatio is less than 1
-   LightningChart JS logo duplication in LegendBoxPanel
-   Incorrect cursor styles when hovering over axis or other element with resize cursor style
-   PointSeries.add method requiring added points to be of `ColorPoint` type when `Point` is a valid type for it.

### Deprecated

-   Deprecated use of _FitEngineToDiv.containerId_ in EngineOptions. Use _FitEngineToDiv.container_ instead.
-   Deprecated use of _setChartBackgroundStroke_ in SpiderChart, ChartXY. Use _setChartBackgroundStrokeStyle_ instead.
-   Deprecated use of _getChartBackgroundStroke_ in SpiderChart, ChartXY. Use _getChartBackgroundStrokeStyle_ instead.

## [1.2.2] - 2020-01-07

### Changed

-   Error message when trying to create a chart in container that doesn't exist

### Fixed

-   Mouse interactions permanently disabled when interactions disabled while interaction is in-progress
-   Multiple Slice Explosion restriction not always working

## [1.2.1] - 2019-12-18

### Fixed

-   TypeScript typings duplicate identifier

## [1.2.0] - 2019-12-10

### Added

-   Added Axis _Bands_ and _ConstantLines_.
-   ColorHEX supports format with '0x' prefix.
-   Dashboard.setSplitterStyle()
-   Dashboard.setSplitterStyleHighlight()
-   Dashboard.setBackgroundFillStyle()
-   Dashboard.setBackgroundStrokeStyle()
-   High DPI rendering support with 'devicePixelRatio' engine option
-   Themes, with 'dark' and 'light' preset themes available.
-   LUT (ValueRangePalette)
-   series.getPointAmount() in XY Charts
-   ChartXY.setMouseInteractionsWhileScrolling()
-   ChartXY.setMouseInteractionsWhileZooming()
-   New option when creating lines: highlightThicknessMultiplier can be used to specify thickness of highlighted lines
-   Progressive DataPatterns precision

### Changed

-   Chart examples linked in the readme
-   Mouse interactions are disabled by default when scrolling / zooming. This behavior can be changed with methods in XY Charts.

### Fixed

-   GL errors with Pyramid Chart
-   AutoCursor working incorrectly with touch displays

## [1.1.1] - 2019-10-11

### Changed

-   Chart examples linked in the readme

### Fixed

-   Typo in the readme
-   Missing typings
-   Performance issue found in the trading showcase

## [1.1.0] - 2019-10-03

### Added

-   Dispose API for Charts, Dashboard
-   Add OHLCSeries.set/getFigureAutofitting()

### Changed

-   Removed dependency to crc package.
-   Removed dependency to collections package.

### Deprecated

-   SolidGauge.setDataLabelFormater in favor of SolidGauge.setDataLabelFormatter
-   SolidGauge.getDataLabelFormater in favor of SolidGauge.getDataLabelFormatter
-   OHLCSeries.setMaxPointsCount in favor of OHLCSeries.setMaxPointCount

### Fixed

-   Fixed crash when adding points to step series.
-   PointableTextBox incompatibility with axis custom tick.
-   Empty StrokeStyle not working with Axis Nibs

## [1.0.3] - 2019-08-26

### Added

-   More keywords for npm

### Changed

-   Readme file contents present the package better

## [1.0.1] - 2019-08-14

### Added

-   CHANGELOG.md included in the npm package
-   More keywords for npm

### Fixed

-   Pyramid Chart
    -   Added missing API documentation for `get/setAnimationsEnabled`
-   Funnel Chart
    -   Added missing API documentation for `get/setAnimationsEnabled`

## [1.0.0] - 2019-08-05

### Added

-   2-Dimensional Charts
    -   ChartXY (Cartesian Chart)
        -   Line Series
        -   Point Series
        -   Point Line Series
        -   Spline Series
        -   Step Series
        -   Rectangle Series
        -   Ellipse Series
        -   Box Series
        -   OHLC Series
        -   Area Series (BiPolar, Monopolar, AreaRange)
        -   Axes
    -   Spider Chart
    -   Pie Chart
    -   Gauge Chart
    -   Funnel Chart
    -   Pyramid Chart
-   Markers (for Series / Chart)
-   Cursor
-   Mouse Interactions
-   Touch Support
-   Animations
-   Dashboard
-   LegendBox
-   UI Elements (Buttons, CheckBoxes, Labels, TextBoxes)
