UNPKG

@lightningchart/lcjs

Version:

A high-performance charting library.

802 lines (639 loc) 148 kB
# 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