teechart.js 4.0.4 → 5.0.0-beta.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/3D-COMPATIBILITY.md +45 -0
- package/README.md +463 -27
- package/dist/chunks/chart-p639xVyw.js +16 -0
- package/dist/chunks/chart-p639xVyw.js.map +1 -0
- package/dist/chunks/palette-series-DfyYptK1.js +16 -0
- package/dist/chunks/palette-series-DfyYptK1.js.map +1 -0
- package/dist/chunks/series-DeozLXIv.js +16 -0
- package/dist/chunks/series-DeozLXIv.js.map +1 -0
- package/dist/teechart.3d.esm.js +27 -0
- package/dist/teechart.3d.esm.js.map +1 -0
- package/dist/teechart.auto.esm.js +16 -0
- package/dist/teechart.auto.esm.js.map +1 -0
- package/dist/teechart.core.esm.js +16 -0
- package/dist/teechart.core.esm.js.map +1 -0
- package/dist/teechart.esm.js +16 -0
- package/dist/teechart.esm.js.map +1 -0
- package/dist/teechart.js +14 -3
- package/dist/teechart.js.map +1 -1
- package/dist/teechart.maps.esm.js +16 -0
- package/dist/teechart.maps.esm.js.map +1 -0
- package/dist/types/accessibility.d.ts +29 -0
- package/dist/types/accessibility.d.ts.map +1 -0
- package/dist/types/auto.d.ts +4 -0
- package/dist/types/auto.d.ts.map +1 -0
- package/dist/types/chart-options.d.ts +826 -0
- package/dist/types/chart-options.d.ts.map +1 -0
- package/dist/types/chart.d.ts +252 -0
- package/dist/types/chart.d.ts.map +1 -0
- package/dist/types/checkbox.d.ts +12 -0
- package/dist/types/checkbox.d.ts.map +1 -0
- package/dist/types/core/elements/axes.d.ts +17 -0
- package/dist/types/core/elements/axes.d.ts.map +1 -0
- package/dist/types/core/elements/axis-grid.d.ts +20 -0
- package/dist/types/core/elements/axis-grid.d.ts.map +1 -0
- package/dist/types/core/elements/axis-labels.d.ts +54 -0
- package/dist/types/core/elements/axis-labels.d.ts.map +1 -0
- package/dist/types/core/elements/axis-ticks.d.ts +19 -0
- package/dist/types/core/elements/axis-ticks.d.ts.map +1 -0
- package/dist/types/core/elements/axis-title.d.ts +16 -0
- package/dist/types/core/elements/axis-title.d.ts.map +1 -0
- package/dist/types/core/elements/axis.d.ts +125 -0
- package/dist/types/core/elements/axis.d.ts.map +1 -0
- package/dist/types/core/elements/chart-image.d.ts +13 -0
- package/dist/types/core/elements/chart-image.d.ts.map +1 -0
- package/dist/types/core/elements/font.d.ts +28 -0
- package/dist/types/core/elements/font.d.ts.map +1 -0
- package/dist/types/core/elements/format.d.ts +125 -0
- package/dist/types/core/elements/format.d.ts.map +1 -0
- package/dist/types/core/elements/gradient.d.ts +23 -0
- package/dist/types/core/elements/gradient.d.ts.map +1 -0
- package/dist/types/core/elements/legend-symbol.d.ts +49 -0
- package/dist/types/core/elements/legend-symbol.d.ts.map +1 -0
- package/dist/types/core/elements/legend.d.ts +131 -0
- package/dist/types/core/elements/legend.d.ts.map +1 -0
- package/dist/types/core/elements/margins.d.ts +9 -0
- package/dist/types/core/elements/margins.d.ts.map +1 -0
- package/dist/types/core/elements/panel.d.ts +13 -0
- package/dist/types/core/elements/panel.d.ts.map +1 -0
- package/dist/types/core/elements/scroll.d.ts +14 -0
- package/dist/types/core/elements/scroll.d.ts.map +1 -0
- package/dist/types/core/elements/shadow.d.ts +14 -0
- package/dist/types/core/elements/shadow.d.ts.map +1 -0
- package/dist/types/core/elements/stroke.d.ts +19 -0
- package/dist/types/core/elements/stroke.d.ts.map +1 -0
- package/dist/types/core/elements/wall.d.ts +13 -0
- package/dist/types/core/elements/wall.d.ts.map +1 -0
- package/dist/types/core/elements/zoom.d.ts +33 -0
- package/dist/types/core/elements/zoom.d.ts.map +1 -0
- package/dist/types/core/primitives.d.ts +33 -0
- package/dist/types/core/primitives.d.ts.map +1 -0
- package/dist/types/core.d.ts +96 -0
- package/dist/types/core.d.ts.map +1 -0
- package/dist/types/data/data-engine.d.ts +245 -0
- package/dist/types/data/data-engine.d.ts.map +1 -0
- package/dist/types/date.format.d.ts +5 -0
- package/dist/types/date.format.d.ts.map +1 -0
- package/dist/types/declarative-tools.d.ts +6 -0
- package/dist/types/declarative-tools.d.ts.map +1 -0
- package/dist/types/do-http-request.d.ts +2 -0
- package/dist/types/do-http-request.d.ts.map +1 -0
- package/dist/types/dom-tip.d.ts +41 -0
- package/dist/types/dom-tip.d.ts.map +1 -0
- package/dist/types/events.d.ts +82 -0
- package/dist/types/events.d.ts.map +1 -0
- package/dist/types/extras.d.ts +18 -0
- package/dist/types/extras.d.ts.map +1 -0
- package/dist/types/index.d.ts +5 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/interaction.d.ts +67 -0
- package/dist/types/interaction.d.ts.map +1 -0
- package/dist/types/map-series-definition.d.ts +5 -0
- package/dist/types/map-series-definition.d.ts.map +1 -0
- package/dist/types/maps/africa-map.d.ts +10 -0
- package/dist/types/maps/africa-map.d.ts.map +1 -0
- package/dist/types/maps/asia-map.d.ts +10 -0
- package/dist/types/maps/asia-map.d.ts.map +1 -0
- package/dist/types/maps/australia-map.d.ts +10 -0
- package/dist/types/maps/australia-map.d.ts.map +1 -0
- package/dist/types/maps/europe-map.d.ts +10 -0
- package/dist/types/maps/europe-map.d.ts.map +1 -0
- package/dist/types/maps/europe27-map.d.ts +10 -0
- package/dist/types/maps/europe27-map.d.ts.map +1 -0
- package/dist/types/maps/layout-map.d.ts +51 -0
- package/dist/types/maps/layout-map.d.ts.map +1 -0
- package/dist/types/maps/map-types.d.ts +19 -0
- package/dist/types/maps/map-types.d.ts.map +1 -0
- package/dist/types/maps/south-america-map.d.ts +10 -0
- package/dist/types/maps/south-america-map.d.ts.map +1 -0
- package/dist/types/maps/spain-map.d.ts +11 -0
- package/dist/types/maps/spain-map.d.ts.map +1 -0
- package/dist/types/maps/svg-map.d.ts +37 -0
- package/dist/types/maps/svg-map.d.ts.map +1 -0
- package/dist/types/maps/usa-map.d.ts +12 -0
- package/dist/types/maps/usa-map.d.ts.map +1 -0
- package/dist/types/maps/world-map.d.ts +14 -0
- package/dist/types/maps/world-map.d.ts.map +1 -0
- package/dist/types/maps.d.ts +15 -0
- package/dist/types/maps.d.ts.map +1 -0
- package/dist/types/marks-animation.d.ts +16 -0
- package/dist/types/marks-animation.d.ts.map +1 -0
- package/dist/types/modern-theme.d.ts +14 -0
- package/dist/types/modern-theme.d.ts.map +1 -0
- package/dist/types/optional-options.d.ts +6 -0
- package/dist/types/optional-options.d.ts.map +1 -0
- package/dist/types/palette.d.ts +11 -0
- package/dist/types/palette.d.ts.map +1 -0
- package/dist/types/platform.d.ts +27 -0
- package/dist/types/platform.d.ts.map +1 -0
- package/dist/types/plugin.d.ts +80 -0
- package/dist/types/plugin.d.ts.map +1 -0
- package/dist/types/quadrants-plugin.d.ts +45 -0
- package/dist/types/quadrants-plugin.d.ts.map +1 -0
- package/dist/types/register-all.d.ts +3 -0
- package/dist/types/register-all.d.ts.map +1 -0
- package/dist/types/rendering/canvas-graphics.d.ts +65 -0
- package/dist/types/rendering/canvas-graphics.d.ts.map +1 -0
- package/dist/types/rendering/graphics.d.ts +59 -0
- package/dist/types/rendering/graphics.d.ts.map +1 -0
- package/dist/types/rendering/renderer.d.ts +58 -0
- package/dist/types/rendering/renderer.d.ts.map +1 -0
- package/dist/types/rendering/three-graphics.d.ts +22 -0
- package/dist/types/rendering/three-graphics.d.ts.map +1 -0
- package/dist/types/responsive.d.ts +8 -0
- package/dist/types/responsive.d.ts.map +1 -0
- package/dist/types/series/activity-gauge.d.ts +18 -0
- package/dist/types/series/activity-gauge.d.ts.map +1 -0
- package/dist/types/series/arc-gauge.d.ts +74 -0
- package/dist/types/series/arc-gauge.d.ts.map +1 -0
- package/dist/types/series/area.d.ts +24 -0
- package/dist/types/series/area.d.ts.map +1 -0
- package/dist/types/series/bar.d.ts +17 -0
- package/dist/types/series/bar.d.ts.map +1 -0
- package/dist/types/series/box-plot.d.ts +140 -0
- package/dist/types/series/box-plot.d.ts.map +1 -0
- package/dist/types/series/bubble.d.ts +25 -0
- package/dist/types/series/bubble.d.ts.map +1 -0
- package/dist/types/series/bullet.d.ts +86 -0
- package/dist/types/series/bullet.d.ts.map +1 -0
- package/dist/types/series/candle.d.ts +27 -0
- package/dist/types/series/candle.d.ts.map +1 -0
- package/dist/types/series/circular-gauge.d.ts +100 -0
- package/dist/types/series/circular-gauge.d.ts.map +1 -0
- package/dist/types/series/color-series.d.ts +59 -0
- package/dist/types/series/color-series.d.ts.map +1 -0
- package/dist/types/series/composed-series.d.ts +76 -0
- package/dist/types/series/composed-series.d.ts.map +1 -0
- package/dist/types/series/custom-bar.d.ts +63 -0
- package/dist/types/series/custom-bar.d.ts.map +1 -0
- package/dist/types/series/custom-series.d.ts +74 -0
- package/dist/types/series/custom-series.d.ts.map +1 -0
- package/dist/types/series/donut.d.ts +17 -0
- package/dist/types/series/donut.d.ts.map +1 -0
- package/dist/types/series/gantt.d.ts +47 -0
- package/dist/types/series/gantt.d.ts.map +1 -0
- package/dist/types/series/high-low-bar.d.ts +24 -0
- package/dist/types/series/high-low-bar.d.ts.map +1 -0
- package/dist/types/series/histogram.d.ts +36 -0
- package/dist/types/series/histogram.d.ts.map +1 -0
- package/dist/types/series/horiz-area.d.ts +11 -0
- package/dist/types/series/horiz-area.d.ts.map +1 -0
- package/dist/types/series/horiz-bar.d.ts +23 -0
- package/dist/types/series/horiz-bar.d.ts.map +1 -0
- package/dist/types/series/line.d.ts +22 -0
- package/dist/types/series/line.d.ts.map +1 -0
- package/dist/types/series/linear-gauge.d.ts +73 -0
- package/dist/types/series/linear-gauge.d.ts.map +1 -0
- package/dist/types/series/map-series.d.ts +82 -0
- package/dist/types/series/map-series.d.ts.map +1 -0
- package/dist/types/series/numeric-gauge.d.ts +96 -0
- package/dist/types/series/numeric-gauge.d.ts.map +1 -0
- package/dist/types/series/palette-series.d.ts +39 -0
- package/dist/types/series/palette-series.d.ts.map +1 -0
- package/dist/types/series/pie.d.ts +81 -0
- package/dist/types/series/pie.d.ts.map +1 -0
- package/dist/types/series/point-xy.d.ts +13 -0
- package/dist/types/series/point-xy.d.ts.map +1 -0
- package/dist/types/series/polar.d.ts +37 -0
- package/dist/types/series/polar.d.ts.map +1 -0
- package/dist/types/series/sankey.d.ts +90 -0
- package/dist/types/series/sankey.d.ts.map +1 -0
- package/dist/types/series/series-list.d.ts +127 -0
- package/dist/types/series/series-list.d.ts.map +1 -0
- package/dist/types/series/series-list.types.d.ts +43 -0
- package/dist/types/series/series-list.types.d.ts.map +1 -0
- package/dist/types/series/sliced.d.ts +13 -0
- package/dist/types/series/sliced.d.ts.map +1 -0
- package/dist/types/series/surface.d.ts +24 -0
- package/dist/types/series/surface.d.ts.map +1 -0
- package/dist/types/series/treemap.d.ts +107 -0
- package/dist/types/series/treemap.d.ts.map +1 -0
- package/dist/types/series/violin.d.ts +105 -0
- package/dist/types/series/violin.d.ts.map +1 -0
- package/dist/types/series/volume.d.ts +11 -0
- package/dist/types/series/volume.d.ts.map +1 -0
- package/dist/types/series-definitions.d.ts +30 -0
- package/dist/types/series-definitions.d.ts.map +1 -0
- package/dist/types/series-registry.d.ts +37 -0
- package/dist/types/series-registry.d.ts.map +1 -0
- package/dist/types/series-utils.d.ts +29 -0
- package/dist/types/series-utils.d.ts.map +1 -0
- package/dist/types/series.d.ts +342 -0
- package/dist/types/series.d.ts.map +1 -0
- package/dist/types/slider.d.ts +49 -0
- package/dist/types/slider.d.ts.map +1 -0
- package/dist/types/spline.d.ts +2 -0
- package/dist/types/spline.d.ts.map +1 -0
- package/dist/types/table/chart-table.d.ts +27 -0
- package/dist/types/table/chart-table.d.ts.map +1 -0
- package/dist/types/teechart-3d.d.ts +4 -0
- package/dist/types/teechart-3d.d.ts.map +1 -0
- package/dist/types/theme.d.ts +41 -0
- package/dist/types/theme.d.ts.map +1 -0
- package/dist/types/three/chart-3d.d.ts +77 -0
- package/dist/types/three/chart-3d.d.ts.map +1 -0
- package/dist/types/three/chart-options-3d.d.ts +5 -0
- package/dist/types/three/chart-options-3d.d.ts.map +1 -0
- package/dist/types/three/teechart-3d.d.ts +25 -0
- package/dist/types/three/teechart-3d.d.ts.map +1 -0
- package/dist/types/three-context.d.ts +184 -0
- package/dist/types/three-context.d.ts.map +1 -0
- package/dist/types/three-context.types.d.ts +177 -0
- package/dist/types/three-context.types.d.ts.map +1 -0
- package/dist/types/three-parametric-geometry.d.ts +7 -0
- package/dist/types/three-parametric-geometry.d.ts.map +1 -0
- package/dist/types/three.d.ts +6 -0
- package/dist/types/three.d.ts.map +1 -0
- package/dist/types/tools/animate-hover.d.ts +13 -0
- package/dist/types/tools/animate-hover.d.ts.map +1 -0
- package/dist/types/tools/annotation.d.ts +169 -0
- package/dist/types/tools/annotation.d.ts.map +1 -0
- package/dist/types/tools/base-animation.d.ts +83 -0
- package/dist/types/tools/base-animation.d.ts.map +1 -0
- package/dist/types/tools/cursor-tool.d.ts +51 -0
- package/dist/types/tools/cursor-tool.d.ts.map +1 -0
- package/dist/types/tools/drag-tool.d.ts +28 -0
- package/dist/types/tools/drag-tool.d.ts.map +1 -0
- package/dist/types/tools/index.d.ts +8 -0
- package/dist/types/tools/index.d.ts.map +1 -0
- package/dist/types/tools/tool.d.ts +27 -0
- package/dist/types/tools/tool.d.ts.map +1 -0
- package/dist/types/tools/tools.d.ts +33 -0
- package/dist/types/tools/tools.d.ts.map +1 -0
- package/dist/types/utils.d.ts +23 -0
- package/dist/types/utils.d.ts.map +1 -0
- package/dist/types/worker.d.ts +92 -0
- package/dist/types/worker.d.ts.map +1 -0
- package/package.json +74 -27
- package/dist/Tween.js +0 -13
- package/dist/date.format.js +0 -145
- package/dist/excanvas/canvas.text.js +0 -489
- package/dist/excanvas/excanvas.compiled.js +0 -35
- package/dist/excanvas/excanvas.js +0 -924
- package/dist/excanvas/excanvas_text.js +0 -1416
- package/dist/three.js +0 -990
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
# Native 3D compatibility and implementation contract
|
|
2
|
+
|
|
3
|
+
`TeeChart3D` runs the canonical `Chart` engine and full `ChartOptions` API through the existing Three.js
|
|
4
|
+
drawing context. It covers the registered series, axis, legend, theme, palette, plugin and tool APIs
|
|
5
|
+
through the same code paths as a 2D chart. `Chart3D` and `createChart3DScene` are separate low-level,
|
|
6
|
+
data-only scene APIs. This matrix tracks their direct `Chart3DOptions` geometry coverage; it does not
|
|
7
|
+
limit the complete `TeeChart3D` API. A native-scene feature is complete only when its behavior, public
|
|
8
|
+
types, tests and an example are present.
|
|
9
|
+
|
|
10
|
+
| Capability | Status | Contract or outstanding work |
|
|
11
|
+
| --- | --- | --- |
|
|
12
|
+
| Lifecycle | Partial | Create, replace scene, resize, destroy; test WebGL and resource ownership in browser. |
|
|
13
|
+
| Full `ChartOptions` adapter | Supported | `TeeChart3D` applies normal `ChartOptions` to `Chart`, forces `aspect.view3d`, redraws through the Three context and cleans up chart, renderer and resize observer. Optional built-ins follow `Chart` and require `registerAll()` or individual registration. |
|
|
14
|
+
| Camera and interaction | Partial | Perspective or orthographic projection, position updates, orbit controls and click picking for bar, point, line, area, circular and surface points; other events pending. |
|
|
15
|
+
| Scene and lighting | Partial | Background, dimensions, ambient and directional lights, optional back wall and floor; configurable lights and wall styles pending. |
|
|
16
|
+
| Axes and grids | Partial | Linear vertical range, inversion, grid, ticks, numeric and category labels; log/date axes, clipping and multiple axes pending. |
|
|
17
|
+
| Title, subtitle, footer | Partial | Plain title, subtitle and footer text, plus title visibility; typography and layout options pending. |
|
|
18
|
+
| Legend | Partial | Plain series labels; layout, symbols, style and interactions pending. |
|
|
19
|
+
| Marks | Partial | Cartesian value labels and visibility; placement, connectors, styles and circular/surface marks pending. |
|
|
20
|
+
| Series styles | Partial | Color, visibility and transparency; stroke, gradients, textures and palette pending. |
|
|
21
|
+
| Bar | Partial | Signed values, depth rows and absolute or percentage stacking; horizontal bars and sizing options pending. |
|
|
22
|
+
| Line | Partial | Numeric values, explicit numeric/date X positions and gaps; null modes, interpolation, pointers and styles pending. |
|
|
23
|
+
| Point | Partial | Numeric points and visibility; pointer options, x coordinates and hit testing pending. |
|
|
24
|
+
| Area | Partial | Numeric values, gaps and zero crossings; stacking, x coordinates and styles pending. |
|
|
25
|
+
| Bubble | Partial | Cartesian X/Y points and relative 3D radii from object data; full pointer styling and radius axis semantics pending. |
|
|
26
|
+
| Volume | Partial | Signed narrow volume columns; financial volume row semantics and styling pending. |
|
|
27
|
+
| Pie, donut | Partial | Extruded slices and point identity; labels, placement and series options pending. |
|
|
28
|
+
| Sliced | Partial | Proportional extruded blocks and point identity; labels and layout options pending. |
|
|
29
|
+
| Activity gauge | Pending | Gauge geometry, labels, hit testing and options. |
|
|
30
|
+
| Surface | Partial | Rectangular numeric grids, wireframe and nearest-vertex picking; palettes and existing options mapping pending. |
|
|
31
|
+
| Color grid | Partial | Rectangular numeric grids render as individually colored, pickable 3D cells; palette integration and cell labels remain pending. |
|
|
32
|
+
| Polar, financial, statistical, Gantt, histogram, bullet | Pending | Geometry, data semantics and options for each registered series type. |
|
|
33
|
+
| Circular, linear, numeric and arc gauges | Pending | Gauge geometry and configuration. |
|
|
34
|
+
| Treemap, Sankey, map | Pending | Hierarchical, flow and geographic geometry and options. |
|
|
35
|
+
| Tools | Pending | Tooltip, cursor, drag, annotations and animations; decide 3D behavior per tool. |
|
|
36
|
+
| `ChartOptions` | Partial | Explicit conversion of a small subset; unsupported settings are rejected. |
|
|
37
|
+
| Plugins, themes and palettes | Pending | Establish scene lifecycle hooks and reuse applicable chart configuration. |
|
|
38
|
+
| Bundles and public types | Partial | Root and `/3d` exports; `/core` must not include Three.js. |
|
|
39
|
+
| Demos and migration | Pending | Replace existing demos and document breaking changes before removing the bridge. |
|
|
40
|
+
|
|
41
|
+
The canonical inventory is `src/chart-options.ts` (`ChartOptions`, `AxisOptions`,
|
|
42
|
+
`SeriesOptionsRegistry`, `ToolsOptions`) plus the public imperative objects exported from
|
|
43
|
+
`src/core.ts`. Each option needs either implemented behavior with a test or a documented,
|
|
44
|
+
explicit rejection/alternative. The renderer must never silently approximate a complete
|
|
45
|
+
TeeChart chart while presenting itself as compatible with those options.
|
package/README.md
CHANGED
|
@@ -1,42 +1,478 @@
|
|
|
1
1
|
# TeeChart.js
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
<img align="right" src="http://www.steema.com/img/logos/teechart_html5.png">
|
|
5
|
-
</a>
|
|
3
|
+
JavaScript charting with Canvas, TypeScript declarations, maps, gauges and optional 3D rendering.
|
|
6
4
|
|
|
7
|
-
|
|
5
|
+
## Installation
|
|
8
6
|
|
|
9
|
-
|
|
10
|
-
|
|
7
|
+
```sh
|
|
8
|
+
pnpm add teechart.js
|
|
9
|
+
```
|
|
11
10
|
|
|
12
|
-
##
|
|
11
|
+
## Usage
|
|
13
12
|
|
|
14
|
-
|
|
13
|
+
Create a canvas in your page:
|
|
15
14
|
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
15
|
+
```html
|
|
16
|
+
<canvas id="chart" width="640" height="400"></canvas>
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
Create the chart with a declarative configuration. The chart type, data and common
|
|
20
|
+
presentation options live together. Call `draw()` to render the initial state;
|
|
21
|
+
`setOptions()` applies later changes and redraws automatically:
|
|
22
|
+
|
|
23
|
+
```js
|
|
24
|
+
import { Chart } from "teechart.js"
|
|
25
|
+
|
|
26
|
+
const chart = new Chart("chart", {
|
|
27
|
+
title: { text: "Weekly sales", visible: true },
|
|
28
|
+
data: {
|
|
29
|
+
labels: ["Mon", "Tue", "Wed", "Thu"],
|
|
30
|
+
series: [{ type: "line", data: [10, 20, 15, 30], label: "Sales" }]
|
|
31
|
+
}
|
|
32
|
+
})
|
|
33
|
+
chart.draw()
|
|
34
|
+
|
|
35
|
+
// Update the chart later without rebuilding it:
|
|
36
|
+
chart.setOptions({
|
|
37
|
+
data: {
|
|
38
|
+
labels: ["Mon", "Tue", "Wed", "Thu"],
|
|
39
|
+
series: [{ type: "line", data: [12, 18, 22, 28], label: "Sales" }]
|
|
40
|
+
}
|
|
41
|
+
})
|
|
42
|
+
|
|
43
|
+
// When the host component or page is removed:
|
|
44
|
+
// chart.destroy()
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
Axes can also be configured and updated declaratively. For example,
|
|
48
|
+
`axes: { left: { position: 50, innerTicksVisible: true, minorTicksVisible: true,
|
|
49
|
+
grid: { bandColor: "#ffffe6" } } }` positions the left axis at 50% and styles its ticks
|
|
50
|
+
and alternating grid bands. Set `bandColor` to an empty string to remove the fill.
|
|
51
|
+
|
|
52
|
+
Cartesian series also accept point objects when each value has its own position. This is
|
|
53
|
+
useful for irregularly spaced or date-based data:
|
|
54
|
+
|
|
55
|
+
```js
|
|
56
|
+
const chart = new Chart("chart", {
|
|
57
|
+
data: {
|
|
58
|
+
series: [
|
|
59
|
+
{
|
|
60
|
+
type: "line",
|
|
61
|
+
data: [
|
|
62
|
+
{ x: new Date("2026-04-01"), y: 12 },
|
|
63
|
+
{ x: new Date("2026-04-08"), y: 18 },
|
|
64
|
+
{ x: new Date("2026-04-20"), y: 15 }
|
|
65
|
+
]
|
|
66
|
+
}
|
|
67
|
+
]
|
|
68
|
+
}
|
|
69
|
+
})
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
Pie and donut marks can be styled and positioned in the same declarative series options.
|
|
73
|
+
`maxRadius` controls the pie size; `marks` supports label placement, connector, fill,
|
|
74
|
+
border, text color and size, corner radius, and margins:
|
|
75
|
+
|
|
76
|
+
```js
|
|
77
|
+
const chart = new Chart("chart", {
|
|
78
|
+
type: "pie",
|
|
79
|
+
data: {
|
|
80
|
+
labels: ["Apples", "Pears", "Plums"],
|
|
81
|
+
series: [{
|
|
82
|
+
data: [15, 10, 8],
|
|
83
|
+
maxRadius: 85,
|
|
84
|
+
marks: {
|
|
85
|
+
visible: true,
|
|
86
|
+
style: "labelvalue",
|
|
87
|
+
placement: "outside",
|
|
88
|
+
connector: "straight",
|
|
89
|
+
backgroundColor: "#f8fafc",
|
|
90
|
+
borderColor: "",
|
|
91
|
+
fontSize: 11,
|
|
92
|
+
fontColor: "#0f172a",
|
|
93
|
+
borderRadius: 7,
|
|
94
|
+
margins: { left: 7, right: 7, top: 4, bottom: 4 }
|
|
95
|
+
}
|
|
96
|
+
}]
|
|
97
|
+
}
|
|
98
|
+
})
|
|
99
|
+
chart.draw()
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
`registerAllSeriesTypes()` also enables `colorGrid` and `surface` with a matrix of
|
|
103
|
+
numbers (one array per row), and `linearGauge` with a numeric `data` value and optional
|
|
104
|
+
`min` and `max`. Matrix rows are copied, so updating a chart does not mutate your data.
|
|
105
|
+
Surface options accept `wireFrame`; rendering in WebGL still requires a `Three` adapter.
|
|
106
|
+
|
|
107
|
+
Canvas maps are registered separately to keep SVG maps outside the core runtime graph.
|
|
108
|
+
The map data is a factory, called when the chart creates or updates its series. This
|
|
109
|
+
lets React applications declare the options before browser APIs are available:
|
|
110
|
+
|
|
111
|
+
```js
|
|
112
|
+
import { Chart, registerSeriesType } from "teechart.js/core"
|
|
113
|
+
import { mapSeriesType, WorldMap } from "teechart.js/maps"
|
|
114
|
+
|
|
115
|
+
registerSeriesType("map", mapSeriesType)
|
|
116
|
+
const chart = new Chart("chart", {
|
|
117
|
+
data: { series: [{ type: "map", data: () => new WorldMap() }] },
|
|
118
|
+
tooltip: { enabled: true }
|
|
119
|
+
})
|
|
120
|
+
chart.draw()
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
For applications that prefer every built-in optional series and chart option, the
|
|
124
|
+
`registerAll()` function registers them, including the map series type. It also leaves the Three
|
|
125
|
+
integration available through its regular direct API:
|
|
126
|
+
|
|
127
|
+
```js
|
|
128
|
+
import { Chart, WorldMap, registerAll } from "teechart.js"
|
|
129
|
+
|
|
130
|
+
registerAll()
|
|
131
|
+
|
|
132
|
+
const chart = new Chart("chart", {
|
|
133
|
+
data: { series: [{ type: "map", data: () => new WorldMap() }] },
|
|
134
|
+
responsive: true
|
|
135
|
+
})
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
Use the regular `teechart.js` or `teechart.js/core` entry and register selected features
|
|
139
|
+
manually when bundle size is a priority. The `auto` entry includes optional features in
|
|
140
|
+
the consuming application's bundle.
|
|
141
|
+
|
|
142
|
+
The React demos use `options` for their chart data and supported settings. They keep
|
|
143
|
+
`configure` for custom canvas drawing, additional gauge hands, geographic projections,
|
|
144
|
+
data-source adapters and animation controls that need the live chart instance.
|
|
145
|
+
|
|
146
|
+
For application data that uses different property names, set `xKey` and `yKey` on the
|
|
147
|
+
series. They default to `x` and `y`:
|
|
148
|
+
|
|
149
|
+
```js
|
|
150
|
+
const chart = new Chart("chart", {
|
|
151
|
+
data: {
|
|
152
|
+
series: [{
|
|
153
|
+
type: "line",
|
|
154
|
+
data: [{ date: new Date("2026-04-01"), revenue: 12 }],
|
|
155
|
+
xKey: "date",
|
|
156
|
+
yKey: "revenue"
|
|
157
|
+
}]
|
|
158
|
+
}
|
|
159
|
+
})
|
|
160
|
+
```
|
|
161
|
+
|
|
162
|
+
The existing `number[]` form with a parallel `x` array remains supported. Do not provide
|
|
163
|
+
both forms of horizontal position in the same series. These keys apply to Cartesian series
|
|
164
|
+
using object rows; specialized series keep their own data shapes.
|
|
165
|
+
|
|
166
|
+
`setOptions()` is a patch: omitted options keep their current values, and removing an
|
|
167
|
+
option from a later object does not reset it to its default. When `data.series` is
|
|
168
|
+
provided, it describes the complete series list and entries missing from the new list
|
|
169
|
+
are removed. Give series an `id` to keep their instances matched across reordering and
|
|
170
|
+
updates; series without an `id` continue to match by position. The `plugins` option is
|
|
171
|
+
creation-only, so changing plugin definitions requires destroying and recreating the chart.
|
|
172
|
+
Toggle an attached plugin in place with `chart.setPluginEnabled(id, enabled)`. Its init and
|
|
173
|
+
cleanup hooks run on each transition, and its configured options are retained when toggled
|
|
174
|
+
through this method.
|
|
175
|
+
|
|
176
|
+
Use `resetOptions()` to restore every resettable declarative section to TeeChart.js defaults,
|
|
177
|
+
or pass section names to reset only those parts. Plugin definitions are fixed when the chart
|
|
178
|
+
is created and cannot be reset:
|
|
179
|
+
|
|
180
|
+
```js
|
|
181
|
+
chart.resetOptions(["title", "data"])
|
|
182
|
+
chart.resetOptions() // reset all supported sections
|
|
183
|
+
```
|
|
184
|
+
|
|
185
|
+
Use `compareChartOptions()` when an integration needs to decide whether new declarative
|
|
186
|
+
options can be patched or require a new chart:
|
|
187
|
+
|
|
188
|
+
```js
|
|
189
|
+
import { Chart, compareChartOptions } from "teechart.js"
|
|
190
|
+
|
|
191
|
+
let chart = new Chart("chart", {
|
|
192
|
+
type: "line",
|
|
193
|
+
data: { series: [{ data: [10, 20, 15, 30] }] }
|
|
194
|
+
})
|
|
195
|
+
chart.draw()
|
|
196
|
+
|
|
197
|
+
const nextOptions = { title: { text: "Updated", visible: true }, data: { series: [{ type: "line", data: [12, 18, 22, 28] }] } }
|
|
198
|
+
const change = compareChartOptions(chart.getOptions(), nextOptions)
|
|
199
|
+
|
|
200
|
+
if (change.change === "patch") chart.setOptions(change.patch)
|
|
201
|
+
if (change.change === "recreate") {
|
|
202
|
+
chart.destroy()
|
|
203
|
+
chart = new Chart("chart", change.patch)
|
|
204
|
+
chart.draw()
|
|
205
|
+
}
|
|
206
|
+
```
|
|
207
|
+
|
|
208
|
+
The comparison returns `"none"` when the applied options already match, `"patch"`
|
|
209
|
+
when `setOptions()` can apply the changes, and `"recreate"` when an option value was
|
|
210
|
+
removed, the plugin list changed, or a plugin's enabled state changed. Series with ids
|
|
211
|
+
can be reordered in a patch without replacing their instances. For `"recreate"`, `patch`
|
|
212
|
+
contains the complete new configuration for the replacement chart.
|
|
213
|
+
|
|
214
|
+
Plugins can provide `defaults` and receive their resolved options after the hook's chart
|
|
215
|
+
arguments. A plugin can create state for each chart with `create`; that state is passed
|
|
216
|
+
to every hook and `destroy`. An `afterInit` hook can also return a cleanup function.
|
|
217
|
+
Use `order` to control execution when plugins depend on one another; lower values run
|
|
218
|
+
first and ties retain registration order. Configure a plugin by id with `pluginOptions`;
|
|
219
|
+
use `false` to disable a registered plugin for one chart:
|
|
220
|
+
|
|
221
|
+
```js
|
|
222
|
+
const chart = new Chart("chart", {
|
|
223
|
+
pluginOptions: { watermark: { text: "Internal preview" } }
|
|
224
|
+
})
|
|
225
|
+
```
|
|
226
|
+
|
|
227
|
+
Applications can add known plugin ids to `PluginOptionsRegistry` for option autocomplete
|
|
228
|
+
and type checking while keeping other ids available for dynamic plugins:
|
|
229
|
+
|
|
230
|
+
```ts
|
|
231
|
+
import { Chart } from "teechart.js"
|
|
232
|
+
|
|
233
|
+
declare module "teechart.js" {
|
|
234
|
+
interface PluginOptionsRegistry {
|
|
235
|
+
watermark: { text?: string; opacity?: number }
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
|
|
239
|
+
new Chart("chart", {
|
|
240
|
+
pluginOptions: { watermark: { text: "Internal preview", opacity: 0.5 } }
|
|
241
|
+
})
|
|
242
|
+
```
|
|
23
243
|
|
|
24
|
-
|
|
244
|
+
The core includes a built-in `quadrants` plugin that stays inert until configured. It paints
|
|
245
|
+
four background regions behind the series, split at `split.x` and `split.y` (axis values, or `"mean"` /
|
|
246
|
+
`"median"` of the chart data). Areas (`topLeft`, `topRight`, `bottomLeft`, `bottomRight`)
|
|
247
|
+
take a `backgroundColor` and a corner `text`; `divider` styles the split lines:
|
|
25
248
|
|
|
26
|
-
|
|
27
|
-
|
|
249
|
+
```js
|
|
250
|
+
const chart = new Chart("chart", {
|
|
251
|
+
pluginOptions: {
|
|
252
|
+
quadrants: {
|
|
253
|
+
split: { x: 0, y: "mean" },
|
|
254
|
+
areas: {
|
|
255
|
+
topLeft: { backgroundColor: "rgba(255, 99, 132, 0.2)", text: "Q2" },
|
|
256
|
+
bottomRight: { backgroundColor: "rgba(75, 192, 192, 0.2)", text: "Q4" }
|
|
257
|
+
},
|
|
258
|
+
divider: { color: "#888", width: 1 }
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
})
|
|
262
|
+
```
|
|
28
263
|
|
|
29
|
-
|
|
264
|
+
Global plugin registration is keyed by `id`. Registering another plugin object with an
|
|
265
|
+
existing id replaces its definition for newly created charts. Existing charts retain
|
|
266
|
+
their original plugin lifecycle until destruction. Unregister the currently registered
|
|
267
|
+
object to remove its hooks and owned themes or palettes; when multiple plugins provide
|
|
268
|
+
the same resource name, the previous owner or base registry becomes active again after
|
|
269
|
+
unregistration. Plugins passed in `ChartOptions.plugins` keep their hooks, themes, and
|
|
270
|
+
palettes scoped to that chart. Their resources are available while the initial options
|
|
271
|
+
are applied, and never enter the global theme or palette registry.
|
|
30
272
|
|
|
31
|
-
|
|
273
|
+
The imperative API is also available when you need to work directly with series and
|
|
274
|
+
chart components:
|
|
275
|
+
|
|
276
|
+
```js
|
|
277
|
+
import { Chart, Line } from "teechart.js"
|
|
278
|
+
|
|
279
|
+
const chart = new Chart("chart")
|
|
280
|
+
chart.addSeries(new Line([10, 20, 15, 30]))
|
|
281
|
+
chart.draw()
|
|
282
|
+
|
|
283
|
+
const series = chart.series.items[0]
|
|
284
|
+
const pointPosition = series.getPointPosition(2) // canvas pixel coordinates
|
|
285
|
+
```
|
|
286
|
+
|
|
287
|
+
`getPointPosition(index, point?)` uses the series' axes and point calculation to return
|
|
288
|
+
canvas coordinates. Call it after the chart has calculated its axes, such as inside
|
|
289
|
+
`afterSeriesDraw`; pass a reusable `Point` when querying many positions.
|
|
290
|
+
`getCanvasBounds(rectangle?)` returns the series bounds in canvas coordinates and can
|
|
291
|
+
reuse a supplied `Rectangle`. The legacy `bounds(rectangle)` method remains available;
|
|
292
|
+
Gantt's `bounds(index, rectangle?)` overload still calculates an individual task's bounds.
|
|
293
|
+
|
|
294
|
+
Destroying a chart releases its slider touch handlers, tooltip callbacks and
|
|
295
|
+
pointer animations, including sliders created without `chart.tools.add`.
|
|
296
|
+
Use `chart.tools.remove(tool, true)` to dispose a slider or tooltip earlier.
|
|
297
|
+
Each `Series` belongs to one chart at a time; `chart.addSeries(series)` transfers it
|
|
298
|
+
from its previous chart. Tools are bound to the chart passed to their constructor and
|
|
299
|
+
cannot be added to another chart; create a new tool for the destination chart.
|
|
300
|
+
Hiding or destroying a tooltip discards pending asynchronous text updates.
|
|
301
|
+
DOM tooltips preserve application-owned `document.onmousemove` handlers and
|
|
302
|
+
listeners. Canvas cleanup restores application handlers even when chart lifetimes
|
|
303
|
+
overlap on the same canvas.
|
|
304
|
+
The legacy DOM renderer still shares one active tooltip across charts.
|
|
305
|
+
|
|
306
|
+
The package exports constructors and helpers as named ESM exports. For namespace-style
|
|
307
|
+
usage, write `import * as Tee from "teechart.js"`. There is no default export.
|
|
308
|
+
TypeScript declarations are included; no separate TeeChart types package is needed.
|
|
309
|
+
|
|
310
|
+
Known `Series` properties such as visibility, axis selectors, date formats and
|
|
311
|
+
animation hooks have explicit types. `SeriesData.source` is `unknown`; narrow it
|
|
312
|
+
to the expected source element before accessing its properties.
|
|
313
|
+
`DataEngine.onclickseries` is typed as a callback accepting a `Series` and a
|
|
314
|
+
numeric point index, or `null`/`undefined` when unset. Check it before calling it.
|
|
315
|
+
`Series` and `SeriesData` no longer have an index signature: reading or assigning a property
|
|
316
|
+
that the class does not declare is a compile-time error. Series types declare the properties
|
|
317
|
+
they use, and `SeriesData` lists the arrays that specific series fill (`x`, `open`, `high`,
|
|
318
|
+
`low`, `close`, `start`, `end`...). Series constructors accept `number[]`, a chart or a data
|
|
319
|
+
source object, and an optional labels array, instead of `unknown`.
|
|
320
|
+
|
|
321
|
+
### Updating data
|
|
322
|
+
|
|
323
|
+
`series.append(value, label)` associates the label with the appended point's index,
|
|
324
|
+
including when earlier points have no labels. Numeric text rows with a value of
|
|
325
|
+
zero retain their labels. `DataDimension.selected` accepts scalar values or arrays,
|
|
326
|
+
including `0`, `false`, and `""`. Set `selectedInclude = false` to exclude the selected
|
|
327
|
+
categories; use `null`, `undefined`, or `[]` to clear a selection. Queries preserve the
|
|
328
|
+
selection and filter mode, including when a metric throws. With `nulls = false`, zero
|
|
329
|
+
and false remain valid categories, while missing and empty categories are hidden.
|
|
330
|
+
Empty categories are removed after considering all metrics; numeric array indices
|
|
331
|
+
and string object keys retain their types. Query charts retain zero group titles and
|
|
332
|
+
use primitive category ids as labels when later series introduce new categories.
|
|
333
|
+
|
|
334
|
+
### Bullet orientation
|
|
335
|
+
|
|
336
|
+
`Bullet` is horizontal by default. Set `yMandatory = true` for vertical bullets:
|
|
337
|
+
|
|
338
|
+
```js
|
|
339
|
+
import { Bullet } from "teechart.js"
|
|
340
|
+
|
|
341
|
+
const bullet = new Bullet([85], ["Revenue"])
|
|
342
|
+
bullet.yMandatory = true
|
|
343
|
+
bullet.states.values = [70, 20, 40] // consecutive range widths from the origin
|
|
344
|
+
bullet.limit.origin = 100 // target, relative to the origin
|
|
345
|
+
chart.addSeries(bullet)
|
|
346
|
+
chart.draw()
|
|
347
|
+
```
|
|
348
|
+
|
|
349
|
+
Each point occupies its own row (horizontal) or column (vertical), grouped by category
|
|
350
|
+
axis across visible Bullet series. Ranges, measures, target markers and tooltips follow
|
|
351
|
+
the orientation. `states.barSize`, `barSize` and `limit.height` are percentages of the
|
|
352
|
+
slot perpendicular to the value axis; `limit.width` is the marker thickness along the
|
|
353
|
+
value axis, in axis units. Use `minValue()` and `maxValue()` for the value range in
|
|
354
|
+
either orientation. Change `yMandatory` and call `chart.draw()` to switch orientation;
|
|
355
|
+
move any manually configured value-axis range to the new value axis as well.
|
|
356
|
+
|
|
357
|
+
## Optional ESM entries
|
|
358
|
+
|
|
359
|
+
```js
|
|
360
|
+
import { Chart, Line } from "teechart.js/core"
|
|
361
|
+
import { Map as MapSeries, WorldMap } from "teechart.js/maps"
|
|
362
|
+
import { Three } from "teechart.js/3d"
|
|
363
|
+
```
|
|
364
|
+
|
|
365
|
+
`/core` contains the engine, series and utilities without loading maps or Three.js.
|
|
366
|
+
`/maps` provides SVG/geographic maps and the map series; `/3d` provides the Three.js
|
|
367
|
+
bridge and parametric geometry. The root entry keeps the complete API. All ESM entries
|
|
368
|
+
share their base classes and plugin/theme registries and include TypeScript declarations.
|
|
369
|
+
`registerAll()` from the root entry registers built-in optional series and chart options when
|
|
370
|
+
called, including the map series type. Its optional feature code is included in the consumer's
|
|
371
|
+
bundle when the function is used.
|
|
372
|
+
|
|
373
|
+
The new native 3D renderer is available alongside the existing `Three` bridge:
|
|
374
|
+
|
|
375
|
+
```js
|
|
376
|
+
import { TeeChart3D } from "teechart.js/3d"
|
|
377
|
+
|
|
378
|
+
const chart = new TeeChart3D(document.querySelector("canvas"), {
|
|
379
|
+
theme: "modernDark",
|
|
380
|
+
palette: "excel",
|
|
381
|
+
type: "bar",
|
|
382
|
+
data: { labels: ["North", "South", "West"], series: [{ data: [2, -1, 4] }] },
|
|
383
|
+
axes: { left: { minimum: -2, maximum: 5 }, bottom: { visible: true } },
|
|
384
|
+
legend: { visible: true, position: "right" },
|
|
385
|
+
tooltip: { enabled: true }
|
|
386
|
+
})
|
|
387
|
+
|
|
388
|
+
// TeeChart3D.chart exposes the complete imperative Chart API.
|
|
389
|
+
chart.setOptions({ theme: "modern", data: { labels: ["North", "South", "West"], series: [{ data: [4, 2, 1] }] } })
|
|
390
|
+
chart.destroy()
|
|
391
|
+
```
|
|
392
|
+
|
|
393
|
+
`TeeChart3D` runs the regular TeeChart chart engine and its full `ChartOptions` through the Three.js
|
|
394
|
+
drawing context. Series, axes, themes, palettes, plugins, tools, tooltips and chart events therefore
|
|
395
|
+
use the same public APIs as a 2D `Chart`. `chart.chart` exposes the underlying `Chart` instance and
|
|
396
|
+
all imperative methods. As with `Chart`, call `registerAll()` when using optional built-in series
|
|
397
|
+
types or option sections such as annotations and animation. `TeeChart3D` forces `aspect.view3d` on
|
|
398
|
+
and observes canvas resizing by default.
|
|
399
|
+
|
|
400
|
+
`Chart3D` and `createChart3DScene` remain lower-level, data-only scene APIs. Their supported subset
|
|
401
|
+
and outstanding native geometry work are tracked in [3D-COMPATIBILITY.md](3D-COMPATIBILITY.md).
|
|
402
|
+
`chart3DOptionsFromChartOptions` is a strict converter for that subset; use `TeeChart3D` when you need
|
|
403
|
+
the complete TeeChart options and series registry.
|
|
404
|
+
|
|
405
|
+
Cartesian series can show value marks with `marks: true` and accept a `transparency` from 0
|
|
406
|
+
to 1. Set `camera.projection` to `"perspective"` or `"orthographic"`, and optionally provide
|
|
407
|
+
`camera.position` as an `[x, y, z]` tuple. `setOptions()` can update the projection and position.
|
|
408
|
+
Bar series can use positive and negative stacks with `stacked: true`, or percentage stacks
|
|
409
|
+
with `stacked: "100"`. The `ChartOptions` converter accepts `"yes"` and `"100"` respectively.
|
|
410
|
+
The vertical `axis` supports `inverted`, `increment`, `decimals` and `fixedDecimals` in addition
|
|
411
|
+
to its range and visibility options.
|
|
412
|
+
Cartesian series also accept numeric `x` positions. The `ChartOptions` converter accepts numeric
|
|
413
|
+
positions or JavaScript `Date` values and converts dates to timestamps. It also accepts object
|
|
414
|
+
points with `x` and `y` fields or custom `xKey` and `yKey` fields. Date-axis label formatting is
|
|
415
|
+
not yet implemented.
|
|
416
|
+
|
|
417
|
+
ESM uses shared chunks. If you serve the files directly, copy all of `dist`, including
|
|
418
|
+
`dist/chunks`, and preserve relative paths. Optional imports reduce the JavaScript loaded
|
|
419
|
+
by the application; they do not change the npm package's installed dependencies.
|
|
420
|
+
|
|
421
|
+
The browser bundle `dist/teechart.js` exposes the global `Tee` namespace when loaded
|
|
422
|
+
with a classic script tag. ESM consumers should use the root or documented optional entries;
|
|
423
|
+
deep imports into `teechart.js/src` are unsupported.
|
|
424
|
+
|
|
425
|
+
## Grouping remaining values
|
|
426
|
+
|
|
427
|
+
`DataEngine.groupRemaining(data, max, label)` and charts created by
|
|
428
|
+
`DataEngine.createChart()` using `groupOther(max)` limit each series in place,
|
|
429
|
+
reserving the last slot for the sum of all remaining values. For example,
|
|
430
|
+
`[10, 8, 5, 2]` with a limit of `3` becomes `[10, 8, 7]`. Labels and codes stay
|
|
431
|
+
aligned; the aggregate code is `null`. Series at or below the limit stay unchanged.
|
|
432
|
+
|
|
433
|
+
Use a positive integer limit, including the aggregate item; a limit of `1` groups
|
|
434
|
+
all values into that item when the series has more than one value. Grouping keeps
|
|
435
|
+
the current order, so sort the chart by values in descending order first to retain
|
|
436
|
+
the largest values.
|
|
437
|
+
`groupRemaining()` returns the original length minus the limit when grouping,
|
|
438
|
+
or `-1` when the series is unchanged.
|
|
439
|
+
|
|
440
|
+
## Shared tooltips
|
|
441
|
+
|
|
442
|
+
Set `tooltip: { enabled: true, shared: true }` in `ChartOptions` to show the visible
|
|
443
|
+
cartesian series at the hovered category or x value together. The default DOM
|
|
444
|
+
tooltip keeps each series' color, name and formatted value. Numeric and date x
|
|
445
|
+
values are matched by value, so a missing point is omitted instead of showing a
|
|
446
|
+
different category. Hidden series and null or non-finite values are omitted.
|
|
447
|
+
Series must share the category axis and orientation. Canvas tooltips show one
|
|
448
|
+
text line per matching series. A custom `tooltip.format` still overrides the body.
|
|
449
|
+
The imperative equivalent is `toolTip.shared = true`.
|
|
450
|
+
|
|
451
|
+
## Cursor rendering
|
|
452
|
+
|
|
453
|
+
`CursorTool` uses `render = "copy"` by default. It saves the chart bitmap and
|
|
454
|
+
restores it when the cursor moves, including transparent pixels. Each chart redraw
|
|
455
|
+
replaces the saved bitmap so animation frames do not accumulate. The snapshot
|
|
456
|
+
follows the canvas backing size when the chart is resized or its pixel ratio changes.
|
|
457
|
+
|
|
458
|
+
## Documentation
|
|
459
|
+
|
|
460
|
+
- [Getting started](https://teechartjs.steema.com/getting-started)
|
|
461
|
+
- [Demos](https://teechartjs.steema.com/demos)
|
|
462
|
+
- [Framework integrations](https://teechartjs.steema.com/integrations)
|
|
463
|
+
- [Migration guide](https://teechartjs.steema.com/migration)
|
|
464
|
+
- [Release notes](https://teechartjs.steema.com/release-notes)
|
|
465
|
+
- [Support](https://www.steema.com/support)
|
|
32
466
|
|
|
33
467
|
## License
|
|
34
468
|
|
|
35
|
-
Copyright (c) 2012-2026 Steema Software SL. All Rights Reserved.
|
|
36
|
-
|
|
469
|
+
Copyright (c) 2012-2026 Steema Software SL. All Rights Reserved.
|
|
470
|
+
|
|
471
|
+
See [LICENSE.md](LICENSE.md) for the Steema non-commercial license.
|
|
472
|
+
Commercial use requires authorization from Steema; see the
|
|
473
|
+
[licensing details](https://www.steema.com/licensing/js).
|
|
474
|
+
|
|
475
|
+
## Native 3D compatibility
|
|
37
476
|
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
<img src="https://raw.githubusercontent.com/wiki/Steema/TeeChartJS/logo-steema.png">
|
|
41
|
-
</a>
|
|
42
|
-
</p>
|
|
477
|
+
The current native renderer is experimental. See [3D-COMPATIBILITY.md](3D-COMPATIBILITY.md)
|
|
478
|
+
for the feature matrix and the work required before it can replace the existing bridge.
|