@lightningchart/lcjs
Version:
A high-performance charting library.
802 lines (639 loc) • 148 kB
Markdown
# 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.3.2] - 2026-06-16
### Added
- Added `isUITick` and `isUIPointableTextBox` type guards
### Changed
- Changed recommended approach for realizing nano/microsecond timestamp use cases
- Should use new dedicated method `setDateOriginNanos`. See dev docs for latest instructions
### Fixed
- Fixed high resolution displays sometimes showing white border around charts
- Fixed default heatmap cursor formatter always referring to charts default axis (title, units, etc.)
- Fixed DateTime label formatting sometimes wrong in microsecond zoom level
## [8.3.1] - 2026-05-29
### Fixed
- Fixed `ChartXY` preventing use of normal Ctrl+C, Ctrl+V and other standard key bindings on the page
- Fixed `DateTime` Axis formatting hours/minutes/seconds wrong in cursor. Bug was introduced in v8.3.0
- Fixed some performance degradations on GPU usage on chart rendering especially with high resolution screens. Introduced in v8.3.0
- Fixed XY series being able to show even while one of their axes is hidden with `setVisible`
- Fixed `htmlTextRenderer` not showing text shadows (actually more like text borders)
- Fixed visible range only axis fitting not working properly in case where same axis has several series and one of them is completely outside view
## [8.3.0] - 2026-05-06
### Added
- Added `SunBurstChart`
- Added `axis.setZebraStripes` to help visually distinguish different regions of the chart based on axis values
- Added `useAxisLayouts` option to `ZoomBandChart` for mirroring axis layout from attached charts
- Added `RectangleSeries.setCursorBehavior`
- Added `MapChart.setSeparateRegionVisible` method to change visibility of separate regions on the `MapChart`.
- Added new `alterSamplesByMatch` syntax for altering all samples with specific property=value match
- Added `BarChart.setBaseline`
- Added `PublicEngine.setOpacity`, `getOpacity`
### Changed
- Bumped minimum TypeScript requirement from v4.1 to v4.9.3 (released Nov 15 2022).
- Optimized chart resize operations to be more efficient
- Reworked default theme styles and text shadow rendering for improved color contrast out of box
- Improved `ChartXY` auto layout with limited space.
- Improved default colors for Light theme axis gridstrokes
### Removed
- Removed `appendSamples` `offsetLookupValues` and other equivalent parameters as well as `readBack` `ids`. These were replaced with `offset` back in v8.0 but some non-functioning references were mistakenly left in the typings.
### Fixed
- Fixed microseconds not included in DateTime cursor formatting until zooming to nanoseconds level
- Fixed issues where cursor can stay visible after mouse moves away from chart (Pie chart, Funnel chart, Pyramid chart, Parallel coordinate chart)
- Fixed low resolution point borders with Circle point shape and point sizes larger than 100 pixels.
- Fixed date time cursor formatting errors on millisecond zoom level showing wrong hour depending on time zone
- Fixed `scaleTheme` not affecting legend paddings and spacing between entries correctly
- Fixed clicking on browser auto suggestion input field options sometimes firing restoreDefault interaction in charts
- Fixed `SurfaceScrollingGridSeries3D` sometimes throwing unhandled errors with `addValues` and `invalidateValues`
## [8.2.2] - 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 not