@lightningchart/lcjs
Version:
A high-performance charting library.
789 lines (641 loc) • 133 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
## [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.3] - 2025-02-26
### Fixed
- Fixed `PointLineAreaSeries` render error where entire series could temporarily be invisible.
- Happened in very specific circumstances, where there was a large gap between two data points and zoom level was changed very particularly.
## [6.1.2] - 2025-01-07
### Added
- Added `Axis.setThickness` allowed parameter `undefined` to disable any previous configured thickness.
### Changed
- Changed `Axis.setDefaultInterval` to accept `undefined`. This restores default state.
### Fixed
- Fixed `ZoomBandChart.setPadding` not doing anything.
- This method can now be used to disable automatic alignment feature of zoom band chart.
- Fixed `ZoomBandChart` crash when adding series with options `xAxis` or `yAxis`
- Fixed `ParallelCoordinateChart` series also rendered outside series area if axis interval is manually set
- Fixed `BarChart` (stacked and grouped) crash if legend is recreated and highlighting is enabled
- Improved v6.1.0 workaround for Intel Iris Xe and Apple Silicon Chip M1/M2/M3 graphics error
- Issue was still visible when using rotated series (e.g. high precision Y axis)
- Fixed Polar chart radial axis tick labels being hidden around where axis title would be, even if title is hidden.
### Deprecated
- Deprecated `PointLineAreaSeries.add` and `addArraysXY`.
- Replacements `appendJSON` and ´appendSamples` were already added almost year before but due to build error, deprecation was not marked correctly.
## [6.1.1] - 2024-11-19
### Fixed
- Fixed `PointLineAreaSeries` affecting scrolling and fitting even if its invisible.
- Bug introduced in v6.1.0
- Fixed bug where `PointLineAreaSeries` can temporarily disappear when max sample count is reached and displaying time series data.
- Fixed `MapChart` separate regions backgrounds wrong draw order
- Fixed `isImageFill` missing from API
## [6.1.0] - 2024-11-06
### Added
- Added `ParallelCoordinateChart`
- Added `AxisScrollStrategies.fittingStepped`
- Added `DashedLine` support to `RectangleFigure.setStrokeStyle`, `PolygonFigure.setStrokeStyle`, `EllipseFigure.setStrokeStyle`, `BoxFigure.setBodyStrokeStyle`, `BarChartBar.setStrokeStyle`, `MapChart.setStrokeStyle`, `TreeMapChart.setNodeBorderStyle`
- Added `CursorXY.setKeepWithinAxisBoundaries`
- Slight behavior improvement in stacked axis use cases with HTML overlays between axes
- Added `MeshModel3D.setModelRotationQuaternion`
### Changed
- LightningChart JS now falls back to a publicly hosted asset folder when using select features (zoom band chart, map chart, some themes, onscreen menu)
- This mainly helps resolve some visual issues when crafting very first prototypes with LCJS. Does not affect existing production applications.
- Changed return type of `Axis.getIntervalRestrictions`
- Before returned exact value set by user, which could be a generally useless callback function.
- Now returns currently active axis restrictions.
- Supplying XY data points as `String` numbers now throws an error.
- Previously, the data visualization "might" be correct, but for example, cursors would often not work, or the visualization might randomly disappear.
- Input as `String` numbers has NEVER been supported, but during the years has lead to difficult bugs in user applications.
- `ChartXY.getAxes` now sorts results based on `iStack`
- Returned axes are always in increasing `iStack` order
- Slightly modified cursor auto fit behavior
- Previously cursor was flipped if it would extend outside series area
- Now cursor is flipped if it would extend outside chart container
- `Axis.setDefaultInterval` with callback option is now not triggered before some attached series has data
- This seemingly small change fixes some normal applications of default intervals that didn't function before
- Improved logarithmic axis minimum interval limit (smallest displayed value)
### Fixed
- Worked around Apple Silicon Chip M1/M2/M3 issues with High precision axis feature
- With this specific hardware the high precision axis rendering did not work (result was same as with normal axis)
- Worked around Intel Iris Xe issues with High precision axis feature
- With this specific hardware the high precision axis rendering did not work (lines appeared all janky and jumping all over the place)
- Fixed effect rendering issue with horizontal bar charts.
- Fixed grouped bar chart not displaying all sub categories if sorting is disabled after inputting data
- Fixed `PointLineAreaSeries` not rendering markers when area and stroke is disabled and data is progressive and view is zoomed out
- Fixed `PointLineAreaSeries` not working with inverted X axis
- Fixed `PointLineAreaSeries` area gradient behaving unexpectedly with inverted Y axis
- Fixed cursor point markers having higher draw order than result tables
- Fixed `TreeMapChart` flat coloring, instead of different depths having varying colors
- Fixed logarithmic axis regions applied wrong
- Resulted in points being clipped by axis view, etc.
- Fixed `GaugeChart` automatic color not applied if value is outside gauge interval range.
- Fixed type error not allowing user to supply Colors with `appendJSON` methods.
- Fixed `Chart3D.setProjection('orthographic')` still resulting in perspective projection
- Fixed Polar heatmap sometimes crashing when accessing solve result properties in user interaction handlers along edges of heatmap.
### Deprecated
- Deprecated `LineSeries`, `PointSeries`, `PointLineSeries`, `StepSeries`, `SplineSeries`, `AreaSeries`
- This is part of a long term feature transition which started from v5.1.0 towards newer `PointLineAreaSeries`. At present time, `PointLineAreaSeries` should support all use cases of the older features, thus we deprecate the older features before finally removing them.
- Deprecated `MeshModel3D.setModelRotation` over `setModelRotationEuler`
## [6.0.3] - 2024-09-06
### Fixed
- Fixed XY cursor result table not positioned at mouse location in multi-series use cases
- Fixed sliced chart cursors not working (pie, funnel, pyramid)
- Removed console logging coming from production build when using some specific features.
## [6.0.2] - 2024-08-27
### Changed
- `BarChart` now restores original user supplied data order when sorting is disabled after data specification.
- Previously this operation would have kept any previously sorted order.
### Fixed
- Fixed manual XY cursor not sticking to axis location configured using `setPosition`
- Fixed `PolarHeatmapSeries` crash if fill style is not set to a `PalettedFill`
- Fixed Result Table font not being configurable for cells that are displayed by passing a series reference
- Fixed `AreaSeries` and `AreaRangeSeries` clipping configuration not working properly
- Default mode was `false` instead of expected `true`
- `setClipping` did not do anything
- Fixed `LineSeries` skipping rendering if its entirely outside its axis range, even when it should be visible in stacked axis use cases with clipping disabled
## [6.0.1] - 2024-08-13
### Added
- Added `Band.setClipping`, `ConstantLine.setClipping`
### Changed
- `Band` and `ConstantLine` rendering is now clipped against their owning axis.
- Previous behavior can be achieved with `setClipping(false)`
### Fixed
- Fixed `PointLineAreaSeries` RangeError: Maximum call stack size exceeded when using auto max sample count and supplying data that exceeds initial data set size * 2
- Fixed `PolarChart.radialAxis`, `axisRadial` not working
## [6.0.0] - 2024-08-06
### Added
- Added new, refactored `Cursor` API
- Added new functionalities, such as multi-series cursors, 3D cursors and more.
- Please refer to migration guide and docs > Features > Cursors for more information.
- Added new, fully reworked `GaugeChart`
- Improved default look, improved adaptibility to different user interfaces, added built-in value indicators functionality, added built-in Needle functionality, added value based background glows and gauge bar coloring.
- API is completely changed. Please refer to migration guide if you are migrating from old gauge chart API (https://lightningchart.com/js-charts/docs/migration-guides/)
- Added new, simplified `SolveNearest` API
- Refer to migration guide and developer documentation for more details.
- Added `SeriesXY.setClipping`
- Allows reverting back to previous behavior, where series rendering could leak outside its owning axes in stacked axis applications. Defaults to enabled (`true`)
- Added `PointShape.HollowCircle`
- Added `Chart3D.setProjection` (beta)
- Added event API for tracking user interactions on Axis titles
- `Axis.onTitleMouseEnter`, ...
- Added `Axis.setTitlePosition`
- Allows changing axis title position between pre-determined key locations.
- Added `x` and `y` options to `DataSetXY.alterSamples`
- Slightly more convenient way to alter 1 sample at specific index with specific X and Y values.
- `DataSetXY` and `PointLineAreaSeries` can now directly consume `x` and `y` coordinates from `Date` objects or valid date-time strings.
- Rather than user having to map them to `Date` object and use `getTime()` method.
- Added `FormattingFunctions.Scientific`
- Formats numbers like '0.00e+3'
- Added `EmptyTickStrategy.setCursorFormatter`
- Useful in use cases of manual tick placement. Instead of specifying formatting with `CustomTick.setTextFormatter`, you can specify a cursor formatter, which is automatically utilized by cursor result tables as well.
- Added `CursorXY.setTickMarkersAllocateAxisSpace`
- Added `CustomTick3D.setBackgroundFillStyle`, `setBackgroundStrokeStyle`, `setPadding`
- Added `Chart3D.translateCoordinate` capability to translate 3D axis coordinate to client and relative coordinate systems.
### Changed
- XY series connected to stacked axes are now clipped so rendering doesn't leak outside the owning axes.
- Previous behavior can be restored per series using `SeriesXY.setClipping` method
- Enhanced the layout of `Pie`, `Funnel`, and `Pyramid` charts.
- Labels are now hidden for Pie charts with a radius smaller than 50px.
- For Funnel and Pyramid chart labels are hidden when the chart width or height is smaller than 250px
- Tweaked default area series fill styles to utilize more transparency for a more modern look.
- Improved `DateTime` Axis tick strategy zoom range
- Previous min interval ~1 second. Now ~1 millisecond.
- Also improved default formatting at minute/second zoom levels.
- Tweaked darkGold and light themes cursor gridlines to have more contrast.
- LCJS drag events are now stopped whenever any `draggable` HTML event is dragged on the web page.
- Change made because of use case where user could not interact with HTML event even when it had pointer event priority.
- Disabled DateTime great ticks ticklines by default
- Frequently requested by users
- Inverted sorting order of the TreeMap chart
### Removed
- Removed `DashboardOptions.disableAnimations`, `DashboardCellOptions.disableAnimations`, `CommonChartOptions.disableAnimations`
- Use `animationsEnabled` instead
- Removed `Dashboard.pixelScale`, `Panel.pixelScale`
- Use `coordsRelative` instead
- Removed `HeatmapScrollingGridSeriesOptions.start`, `step`
- Use `setStart`, `setStep` instead
- Removed `translatePoint`, `translatePoint3D`
- Use `chart.translateCoordinate` instead
- Removed `LightningChartOptions.sharedContextOptions.webgl`
- API was never functional
- Removed `PublicEngine.scale`
- Use `chart.coordsRelative` instead
- Removed `PublicEngine.clientLocation2Engine`, `engineLocation2Client`
- Use `chart.translateCoordinate` instead
- Removed `Chart3D.axes`
- Use `coordAxis` instead
- Removed `Chart3D.world`
- Use `coordsWorld` instead
- Removed `SurfaceGridSeries3DOptions.start`, `step`, `end`
- Use `setStart`, `setStep`, `setEnd` instead
- Removed `SurfaceScrollingGridSeries3DOptions.start`, `step`
- Use `setStart`, `setStep` instead
- Removed `TickStyleProperties.labelPadding`
- Use `Axis.setMarginAfterTicks` instead
- Removed deprecated signature of `SpiderChart.addSeries` which accepted a `pointShape` parameter
- Removed `Axis.setTitleMargin`, `getTitleMargin`
- Use `setMarginAfterTitle` instead
- Removed `HeatmapGridSeriesOptions.start`, `step`, `end`
- Use `setStart`, `setStep`, `setEnd` instead
### Fixed
- Fixed charts sometimes not adjusting to browser zoom level change before something changes in chart.
- Fixed series sometimes leaking 1 or 2 pixels outside series background in ChartXY
- Fixed crash with `PointLineAreaSeries` automatic max sample count control.
- Fixed `RectangleSeries` render errors with high precision axis. Errors happened very inconsistently with very specific rectangle coordinates.
- Fixed text rendering issue sometimes present for 1st frame in apps with relative large number of text objects, where text is rendered as strange symbols
- Fixed `MapChart` coloring regions with no data with first LUT color, instead of using fallback color.
- Fixed crash with `ZoomBandChart` inside `Dashboard` "Cannot compare node with itself"
- Fixed `PointLineAreaSeries` Y axis scrolling 1 frame behind.
- Fixed XY heatmap and scrolling heatmap series not accepting `axisX` or `axisY` options
- Fixed `ZoomBandChart` misalignment when connected to multiple stacked axes
- Fixed custom tick label padding sometimes wrong.
- Fixed `PointLineAreaSeries` hiding points when zoomed out even if both stroke + area are disabled.
- Essentially it was not possible to use progressive scatter visualization
- Fixed `ZoomBandChart` not mimicking `PointLineAreaSeries` point style fully (rotation, shape, size)
- Fixed `PointLineAreaSeries` crash when supplied only data points with exact same `x`
- Fixed `DataSetXY` append methods not working correctly with `start` and `step` options
## [5.2.0] - 2024-05-07
### Added
- Added **Stacked Axes** (beta)
- Accessed via `AxisOptions.iStack`, `Axis.setLength`, `Axis.setMargins`
- See online examples and/or Developer documentation (Features > Axis) for latest updates to stacked axis use cases.
- Added `TreeMapChart`
- Added `ChartXY.swapAxes` (beta)
- Can be used to swap the position of two stacked Axes.
- Added `ImageFill` support for `PointLineAreaSeries` and `PolarPointSeries` marker fill styles
- Allows displaying custom picture assets in axis coordinates with axis clipping.
- Added `PointLineAreaSeries.setPointAlignment`, `getPointAlignment`
- Allows display of non-centered points. For example, position points by vertical bottom.
- Added convenience axis getter properties
- `ChartXY.axisX`, `xAxis`, `axisY`, `yAxis`
- `Chart3D.axisX`, `xAxis`, `axisY`, `yAxis`, `axisZ`, `zAxis`
- `PolarChart.axisRadial`, `axisAmplitude`, `radialAxis`, `amplitudeAxis`
- These behave exactly same as `getDefaultAxisX()` or equivalents, but simply look more neat.
- Added `SeriesOptions.axisX`, `SeriesOptions.axisY`
- Convenience properties that do exactly same as existing `xAxis` and `yAxis`
- Added convenience properties `SeriesXY.xAxis`, `SeriesXY.yAxis`
- Added `DisposableEvents.isDisposed`
- This simple getter is added to basically all charts, series, etc. objects
- Introduced mainly to workaround some issues in React run-time crashes
- Added `LightningChart.layout`
- Required for React applications which use shared LC context and include charts inside scrollable DIVs which are not the document body. Used to notify charts that their position on the webpage may have changed.
- Added `ChartComponent.setIcon` (beta)
- This can be used to associate a chart component with a icon graphic. For many series types this results in automatically displaying that Icon in legends and cursors.
- Added ability to use `Icon` anywhere `PointShape` can be used.
- XY point series, Polar point series, Point markers, Legend entries, Checkboxes
- Additionally, Icons can now be used as part of Result table content
- Added `DataSetXY.fill`, `PointLineAreaSeries.fill` methods
- Convenient way to set same value to all existing samples. Especially useful for implementing custom interactions, like highlighting selected data
- Added `setTickStyle` convenience methods to all tick strategies.
- This does the same as existing `setMajorTickStyle` and `setMinorTickStyle` but applies both with just 1 method call.points with different color/size etc.
- Added more optional parameters to `DataSetXY.alterSamplesByID` and `PointLineAreaSeries.alterSamplesByID`: `x`, `y`, `lookupValue`, `color`, `rotation`
- Can be used to load same value for all specified sample IDs.
- Added `Axis.setTitleMarginBefore`, `getTitleMarginBefore`
- Added `Axis.setAutoRegionsEnabled`
- Can be used to disable built-in functionality that adds extra gaps around axis interval to make sure that attached series fit inside. In some specific cases this is necessary.
- Added `hasUIElementBackground` type guard.
- Added `Color.toUint32`
- Added slice parameter to sliced chart slice styling APIs
- Allows referencing slice label and other properties in custom style use cases
### Removed
- Removed `EngineSettings.webgl`
- This property was faulty since v5.0.0, and didn't actually do anything. Use `LightningChartOptions.webgl` instead
### Fixed
- Fixed bug `synchronizeAxisIntervals` resulting in axes not being zoomable or pannable.
- Fixed `PointLineAreaSeries` run-time crash "invalid array length" sometimes when using time-series data and zooming in/out.
- Fixed long scroll animations in time-series use cases when first data points are added.
- Fixed charts not following changes to window devicePixelRatio after chart is created
- This can be observed by text staying sharp and thicknesses/point sizes adjusting when using browser zooming
- Note that in order for this to work, web site needs to have meta tag meta[name="viewport"] width=device-width
- Made `PointLineAreaSeries` more robust to common invalid data supply patterns in data streaming test setups.
- e.g. data points sharing same time coordinate, or even having slightly incorrect order.
- Fixed `PointLineAreaSeries` individual point sizes low resolution with circle shape.
- Fixed `PointLineAreaSeries.clear` resulting in series not being visible under specific circumstances.
- Fixed axis gridlines invisible with light theme.
- Fixed extreme ticklines not visible.
- Fixed crash when attempting to dispose same chart twice.
- Fixed sliced charts (pie, pyramid, funnel) auto cursors not updating on mouse move when highlight on hover is disabled.
- Fixed legend button not showing if legend is added while attached component is invisible.
- Fixed `alterSamples` not doing anything if only `sizes` or `rotations` were altered.
- Fixed Legend entry hiding itself even when toggleVisibilityOnClick is false
- Fixed BarChart sometimes disabling animations even if they are explicitly enabled or not disabled at least.
### Deprecated
- Deprecated `LightningChartOptions.sharedContextOptions.webgl` in favour of `LightningChartOptions.webgl`
- Deprecated `Axis.setTitleMargin`, `getTitleMargin`
- For clearer distinction should use `Axis.setMarginAfterTitle` instead
## [5.1.1] - 2024-02-19
### Fixed
- Fixed `PointLineAreaSeries` defaulting to float 32 data storage instead of float 64
- Mainly showed as issues in time series use cases.
## [5.1.0] - 2024-02-06
### Added
- Added `MeshModel3D`
- New 3D series type for rendering 3D Models inside 3D charts.
- Main features: dynamic coloring from separate data set in real-time
- Added `BarChart.setDataStacked`, `setDataGrouped`
- Allows creation of stacked and grouped bar charts
- Added `LUT.percentageValues`
- Adds to user convenience when you want to color a data set between min/max value range, as opposed to a fixed value range.
- Not optimized yet for real-time data updates
- Added `Axis.setDefaultInterval` (beta)
- Added `Axis.setIntervalRestrictions` (beta)
- Added `Band.setDefaultMouseInteractions`, `ConstantLine.setDefaultMouseInteractions`
- Enables use cases where user needs to implement custom interactions for Band/ConstantLine
- Added `Control.getLegendBoxes`
- Recommended especially in scrolling applications to set scrolling Axis interval
- Added `setStart`, `setEnd` and `setStep` methods to `HeatmapGridSeries` and `SurfaceGridSeries3D`
- Allows modifying heatmap location and scale after creation.
- Added `setStart` and `setStep` methods to `HeatmapScrollingGridSeries` and `SurfaceScrollingGridSeries3D`
- Allows modifying heatmap location and scale after creation.
- Added `PublicEngine.onRenderFrame`, `offRenderFrame`
- mainly added for performance and FPS measurement
- Added `uint32ColorFromRGBA`, `uint32ColorFromObject`, `ColorUint32`
- Added `PointLineAreaSeries`, `DataSetXY` (beta)
- Added `UICheckBox.setButtonShape`, `UILutCheckBox.setButtonShape`
- Allows modification of button shape during run-time. Previously had to be specified before creating checkbox
- Added beta feature `DateTimeTickStrategy.setUTC`
- Allows tick placement to be done in UTC (instead of clients local region), removing any region specific day light saving and time zone offsets
### Changed
- `ChartXY.getDefaultAxisX` and `getDefaultAxisY` methods now return the first Axis that is visible.
- Previously even invisible Axis may be returned.
- `ChartXY` rectangle zoom interaction now works regardless of mouse gesture direction if rectangle fit interaction is disabled (setMouseInteractionRectangleFit(false))
- Tweaked built-in themes for `BarChart`
- Changed gradients to solid fills
- Added subtle borders
- This was done to accommodate for new Grouped and Stacked BarCharts that are contained within the same chart type.
- `PolygonSeries` can now be attached to logarithmic and high precision axes
### Removed
- Removed redundant `UIButtonPicture` and `UIButtonPictures` exports
- Replaced by `PointShape`
### Fixed
- Fixed `ChartXY` mouse wheel interaction stopping Axis even if mouse wheel zoom interaction is disabled
- Fixed FigureSeries style changes and dimension changes resetting mouse interaction state (under mouse, drag, etc.)
- Issue can however still happen by style changes under very specific circumstances!
- Fixed hidden axis taking space
- Fixed `ChartXY` animationsEnabled and disableAnimations options being applied opposite to afterwards added Axis
- Greatly improved LUT precision
- Previously some users were facing issues with LUT picking wrong color when the value was very close to a threshold. For example, couple decimals off, or sometimes when the magnitude of the numbers was very large.
- Improved DataGrid performance with large number of text and most of it outside view.
- Fixed minor memory leak when using Dashboard and disposing charts inside it
- Introduced in v5.0.0
- Fixed crash on `LegendBox.setVisible(false)` when a LUT is attached.
- Fixed drag stop, mouse leave, mouse up events firing when mouse leaves chart area
- Fixed warning about not supported WebGL extensions being displayed even if `warnings` options is `false`
### Deprecated
- Deprecated `start`, `step` and `end` options when creating Heatmap or Surface grids.
- Usage should be replaced with `setStart`, `setStep` and `setEnd` methods respectively.
## [5.0.7] - 2024-01-19
### Fixed
- Fixed typings issue when using library from NPM.
- Reported at least from React and Vite frameworks, types were not found from package.
## [5.0.6] - 2024-01-08
### Fixed
- Fixed auto cursor not updating when moving mouse over a heatmap
- Fixed ChartXY.solveNearest and other equivalent methods missing.
## [5.0.5] - 2023-12-13
### Changed
- Improved license validation errors to not throw errors that crash applications.
- This makes it easier to work with applications where not every person running it will need charts to be visible.
### Fixed
- Fixed CSS issue where chart starts expanding height infinitely, shows as white and uses a lot of CPU
- Fixed ChartXY animationsEnabled and disableAnimations options being applied opposite to afterwards added Axis
## [5.0.4] - 2023-12-01
### Added
- Added `formatNumberAsUnicodeSuperscript`
- Added new file to release bundle: `dist/lcjs.iife.d.ts`
- This contains typings compatible with the IIFE distribution (`dist/lcjs.iife.js`)
- Can be used to get basic intellisense in simplistic applications that are directly utilizing the IIFE library.
- For example, see https://lightningchart.com/js-charts/docs/frameworks/aaa-vanilla/
### Changed
- Tweaked axis restrictions on logarithmic axis to prevent situations where 0 axis ticks are visible
- Added new alternate, built-in option for logarithmic tick formatting
- Formats values like 10¹, 10², 10³, ...
- See `FormattingFunctions.LogarithmicNoExponentsRounded)`
### Fixed
- Fixed extra jitter in ChartXY zoom to fit animation
- Fixed all log axis ticks being hidden if any major tick collides with another
- Now only colliding ticks are hidden.
- Fixed BarChart license error even though license was valid
- Fixed tick behavior issue when either numeric extreme tick or date time great tick collided with another tick.
- Instead of hiding colliding tick, the entire tick level was sometimes not displayed
## [5.0.3] - 2023-11-10
### Fixed
- Fixed ZoomBand Chart resources not included in package
- Fixed crash when using sandbox licensing and initiating `lightningChart()` several times.
## [5.0.0] - 2023-11-08
### Added
- Shared WebGL Context rendering.
- Removes the old 16 chart limit. Now you can have 1000+ charts on a single page depending on the hardware running the page.
- Has two modes:
- Individual canvas mode. In this mode each chart is render to it's own canvas. This is the default mode.
- Shared canvas mode. All charts are render to a single shared canvas. Can have better performance than the individual canvas mode.
- See Developer Documentation "Grouping charts" for more information
- Starting with LCJS v5.0.0, it's important to do only one call to the `lightningChart()` library entry point function. You should call this function once and create all of the charts from the same returned object
- Added automatic sandbox licensing.
- When charts are used in specific, popular sandbox sites (like Stack Overflow, Codepen, JSFiddle), the charts work automatically, without passing any license.
- New event `isInView`
- This event is triggered when a chart becomes visible in the browser viewport.
- `dispose()` to the library entry point interface (`lightningChart()`)`
- This can be used to dispose the shared WebGL context and all charts that have been created with it.
- Added option to have different fonts and fill styles within result table content.
- See changes to `ResultTableContent` and `TableContentBuilder.addRow`
- Added `PointShape.Arrow`, `Cross`, `Diamond`, `Minus`, `Plus`, `Star`
- Added `HeatmapScrollingGridSeriesIntensityValues.invalidateIntensityValues`, `getSampleCount` methods
- Allows backwards invalidation of previously added samples and pushing data by sample index.
- Directed to make heatmap time series applications more convenient.
- Added `MapChart.getRegionUnderMouse`
- Added `ResultTable.setPadding`, `ResultTable.getPadding`
- Added auto cursors to `PieChart`, `FunnelChart` and `PyramidChart`
- New methods: `setAutoCursor`, `getAutoCursor`, `setAutoCursorMode`, `getAutoCursorMode`, `setCursorResultTableFormatter`
- Added optional `matchStyleExactly` flag when adding components to legend box to match button color exactly to attached components rather than making default gradient
- Added `PieChartWithLabelsOnSides.setLabelSliceOffset`, `getLabelSliceOffset`, `setLabelConnectorGapStart`, `getLabelConnectorGapStart`, `setLabelConnectorEndLength`, `getLabelConnectorEndLength`
- Added option to `captureFrame` method to return the result as a Data URL.
- See LegendBoxAddOptions in API reference to learn more.
- Added `UICheckBox.setTextFillStyleHidden`, `getTextFillStyleHidden` methods
### Changed
- Changed non-commercial license terms
- Before, omitting license key meant approving to non-commercial use terms
- Now, license key is always required. Get a license at `https://lightningchart.com/js-charts/#license-key`
- Reworked `OHLCSeries`.
- Performance massively improved. Loading time 40x faster, data capacity 200x more (average desktop GPU).
- See migration guide for instructions of using reworked feature.
- Reworked `ZoomBandChart`
- The feature has been reimplemented from scratch with two goals: better UX + simpler API.
- See migration guide for details.
- Refactored `FigureSeries` (`RectangleSeries`, `SegmentSeries`, `PolygonSeries`, `BoxSeries`, `EllipseSeries`)
- Main motivation to improve performance greatly, enabling use cases that need large numbers of figures.
- New implementation is much more performance efficient, on average ~50x more powerful or even more.
- Changed visual look of `LegendBox` buttons.
- Now the text and button are dimmed when series is hidden, rather than the previous "check box ticked" approach.
- Built-in `Themes` cursor gridstroke style changed to `DashedLine`
- Changed interfaces around tick styles.
- `TickStyle` should now be only needed interface. It has all APIs necessary for styling axis ticks.
- `emptyTick` can be used as convenience to hide ticks completely.
- `VisibleTicks` and `EmptyTicks` classes are removed.
- When mutating a tick style, there is no longer a need to check `isVisibleTicks` in TypeScript applications.
- This should mainly remove type errors, rather than introduce them.
- Changed `Theme` properties:
- Some deprecated `Theme` properties have been removed, and new ones introduced and made non-optional to accom