apexcharts-skill 3.0.0 → 4.0.0
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/.cursorrules +71 -44
- package/README.md +8 -8
- package/SKILL.md +126 -82
- package/package.json +1 -1
- package/references/bar-charts.md +26 -8
- package/references/cartesian-charts.md +27 -1
- package/references/circular-charts.md +24 -7
- package/references/feature-platform.md +195 -29
- package/references/financial-charts.md +28 -12
- package/references/framework-wrappers.md +36 -6
- package/references/grid-charts.md +97 -4
- package/references/ssr.md +40 -19
- package/references/tree-shaking.md +78 -43
package/SKILL.md
CHANGED
|
@@ -1,22 +1,22 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: apexcharts
|
|
3
3
|
description: >
|
|
4
|
-
AI skill for building ApexCharts.js charts and data visualizations (targets
|
|
4
|
+
AI skill for building ApexCharts.js charts and data visualizations (targets v8).
|
|
5
5
|
Use when the user asks to create, configure, or troubleshoot any chart using ApexCharts
|
|
6
6
|
(line, area, bar, pie, donut, radialBar, scatter, bubble, heatmap, candlestick, boxPlot,
|
|
7
7
|
violin, histogram, radar, polarArea, rangeBar, rangeArea, treemap, funnel, pyramid, gauge,
|
|
8
|
-
sunburst, unit, waffle, waterfall, dumbbell, streamgraph, raincloud). Covers
|
|
8
|
+
sunburst, icicle, unit, waffle, waterfall, dumbbell, streamgraph, raincloud). Covers
|
|
9
9
|
correct data formats, lifecycle, formatters, tree-shaking, SSR, and the feature
|
|
10
10
|
platform (plugins, canvas renderer, custom series, small multiples, undo/redo,
|
|
11
11
|
shareable views, themes, crossfilter, annotation authoring, storyboard, streaming,
|
|
12
|
-
drilldown). Knows which features ship in the
|
|
13
|
-
explicit import. In React /
|
|
12
|
+
drilldown, highlight filter). Knows which chart types and features ship in the
|
|
13
|
+
default v8 bundle and which need an explicit import or the full bundle. In React /
|
|
14
14
|
Vue / Angular projects, prefer the framework wrapper packages
|
|
15
15
|
(`react-apexcharts`, `vue3-apexcharts`, `ng-apexcharts`) over the core API.
|
|
16
16
|
metadata:
|
|
17
17
|
author: ApexCharts
|
|
18
|
-
version: "
|
|
19
|
-
library_version: "
|
|
18
|
+
version: "4.0.0"
|
|
19
|
+
library_version: "8.0.0"
|
|
20
20
|
category: data-visualization
|
|
21
21
|
tags: [charts, visualization, javascript, typescript, svg, apexcharts]
|
|
22
22
|
docs: https://apexcharts.com/docs/
|
|
@@ -33,40 +33,43 @@ metadata:
|
|
|
33
33
|
>
|
|
34
34
|
> Wrappers handle `destroy()` automatically on unmount, accept reactive props, and forward events as idiomatic framework events. Use the core API directly only when no framework is detected, or when the user explicitly asks for vanilla. See `references/framework-wrappers.md`.
|
|
35
35
|
|
|
36
|
-
> **Targets ApexCharts
|
|
36
|
+
> **Targets ApexCharts v8.** Read the next box before writing any chart or feature code: the default bundle does not contain every chart type or feature.
|
|
37
37
|
>
|
|
38
|
-
> **⚠️
|
|
38
|
+
> **⚠️ v8.0 breaking change: three chart types and four features left the default bundle.** `import ApexCharts from 'apexcharts'` (script tag: `dist/apexcharts.min.js`) registers line, area, scatter, bubble, rangeArea, bar (and `column`), rangeBar, candlestick, boxPlot, histogram, funnel, pyramid, pie, donut, polarArea, radialBar, gauge, radar, heatmap and treemap, plus axes, tooltips and the **Tier 1** features: exports, legend, toolbar, annotations, keyboard navigation, morph, stats, themes (Facet), plugins (Weave) and custom series (Marks). Everything else is **Tier 2**: present in the package, absent from the default bundle, and reachable through its own import next to it.
|
|
39
39
|
>
|
|
40
40
|
> ```js
|
|
41
41
|
> import ApexCharts from 'apexcharts'
|
|
42
|
-
> import 'apexcharts/
|
|
42
|
+
> import 'apexcharts/sunburst' // a Tier 2 chart type
|
|
43
|
+
> import 'apexcharts/features/drilldown' // a Tier 2 feature
|
|
43
44
|
> ```
|
|
44
45
|
> ```html
|
|
45
|
-
> <script src=".../dist/apexcharts.js"></script>
|
|
46
|
-
> <script src=".../dist/
|
|
46
|
+
> <script src=".../dist/apexcharts.min.js"></script>
|
|
47
|
+
> <script src=".../dist/sunburst.js"></script>
|
|
48
|
+
> <script src=".../dist/features/drilldown.js"></script>
|
|
47
49
|
> ```
|
|
48
50
|
>
|
|
49
|
-
> | Tier 2
|
|
50
|
-
>
|
|
51
|
-
> |
|
|
52
|
-
> |
|
|
53
|
-
> |
|
|
54
|
-
> |
|
|
55
|
-
> |
|
|
56
|
-
> |
|
|
57
|
-
> |
|
|
58
|
-
> |
|
|
59
|
-
> | Context menu | `apexcharts/features/context-menu` | 2.3 KB |
|
|
51
|
+
> | Tier 2 | Import next to `apexcharts` | Script tag | Tier 2 since |
|
|
52
|
+
> |---|---|---|---|
|
|
53
|
+
> | `unit` and its `waffle` alias | `apexcharts/unit` | `dist/unit.js` | 8.0 |
|
|
54
|
+
> | `sunburst` | `apexcharts/sunburst` | `dist/sunburst.js` | 8.0 |
|
|
55
|
+
> | `violin` | `apexcharts/violin` | `dist/violin.js` | 8.0 |
|
|
56
|
+
> | `icicle` | `apexcharts/icicle` | `dist/icicle.js` | 7.6 (new) |
|
|
57
|
+
> | `raincloud` | `apexcharts/raincloud` (the violin renderer plus the raincloud feature) | `dist/violin.js`, then `dist/features/raincloud.js` | 7.1 (new); needs violin since 8.0 |
|
|
58
|
+
> | `drilldown`, and the `waterfall`, `dumbbell` and `streamgraph` chart types | `apexcharts/features/<name>` | `dist/features/<name>.js` | 8.0 |
|
|
59
|
+
> | `highlight-filter` (`highlightFilter`) | `apexcharts/features/highlight-filter` | `dist/features/highlight-filter.js` | 7.9 (new) |
|
|
60
|
+
> | `trellis`, `storyboard`, `perspectives`, `ink`, `renderer-canvas`, `link`, `measure`, `history`, `context-menu` | `apexcharts/features/<name>` | `dist/features/<name>.js` | 7.0 |
|
|
60
61
|
>
|
|
61
|
-
>
|
|
62
|
+
> Waterfall and dumbbell draw through rangeBar and streamgraph through rangeArea, which the default bundle has, so next to it you add only the feature. Storyboard registers Perspectives, so importing both costs no more than Storyboard alone.
|
|
62
63
|
>
|
|
63
|
-
>
|
|
64
|
+
> **The full bundle** (v8.0) loads everything at once: `import ApexCharts from 'apexcharts/full'` in a bundler, `dist/apexcharts.full.min.js` from a script tag. It carries every chart type and feature plus the unit-shapes and pictograms catalogs, and needs no add-on import (premium items stay license-gated). Gzipped at 8.0.0: default bundle 263,188 B, full bundle 381,135 B.
|
|
64
65
|
>
|
|
65
|
-
> **
|
|
66
|
+
> **Nothing fails silently**: when the import is missing, the console names it. A Tier 2 chart type makes `render()` reject; a `waterfall`, `dumbbell` or `streamgraph` draws an empty plot; a Tier 2 feature degrades where it can (a trellis renders as one chart; `renderer: 'canvas'` falls back to SVG). Unversioned CDN URLs serve 8.0; pin `apexcharts@7` to stay on 7, where unit, sunburst, violin, drilldown, waterfall, dumbbell and streamgraph are still in the default bundle. The split began in v7.0, which moved the nine features in the last table row out of a default bundle that had carried every feature. See `references/tree-shaking.md` for the full tier table and `references/feature-platform.md` for each feature's API.
|
|
66
67
|
>
|
|
67
|
-
> **
|
|
68
|
+
> **Other v7.0 breaking changes.** (1) `plotOptions.bar.borderRadiusWhenStacked` was dropped as dead config in v7.0 and is a **working option again in v7.4**: `'all'` (the default) rounds both stack ends, `'last'` rounds only the far end and leaves the baseline square. Do not delete it from a config. (2) `dataLabels.animate.enabled` now defaults to `true` (bar/column only): labels ride to their new position on a data update instead of snapping. Set `dataLabels: { animate: { enabled: false } }` for the old behavior. Everything else from v5 and v6 keeps working unchanged.
|
|
68
69
|
>
|
|
69
|
-
> **
|
|
70
|
+
> **Behaviors that are on by default** (both respect `prefers-reduced-motion`): data updates that add/remove points animate coherently, and one-finger kinetic pan is enabled (`chart.pan.inertia`). Since v7.8, data labels that land on each other are nudged apart (`dataLabels.avoidOverlap`, see section 5). The two-finger gestures, pinch-zoom and two-finger pan, sit behind `chart.zoom.pinch`, which defaults to `'auto'`: **on only where the toolbar reset button is present**, so an unintended zoom is always undoable. `chart.zoom.allowMouseWheelZoom` is gated the same way. Set `pinch: true` to force the gestures on a toolbar-less chart, or see `chart.zoom.resetControl` (v7.4) for the other way to satisfy the gate.
|
|
71
|
+
>
|
|
72
|
+
> **Premium features and licensing.** Nine features are premium: `trellis` (small multiples, 7.0), `storyboard`, `link` (crossfilter / linked views), `ink` (annotation authoring), `measure`, `context-menu`, `perspectives` (shareable views), `history` (undo/redo) and `highlight-filter` (`highlightFilter`, 7.9). Two chart types are premium: `unit` / `waffle`, and `raincloud` (7.1). These still function fully, but render an `APEXCHARTS` trial watermark until an entitled license is set via `ApexCharts.setLicense(key)` (static) or per-chart `chart.license`. They require a `premium` or `enterprise` plan; a `pro` key or the free tier keeps the watermark. Every other chart type and free module is never gated. Premium and Tier 2 are separate axes: since 8.0 every premium item is Tier 2, but not every Tier 2 item is premium (`renderer-canvas`, `drilldown`, `waterfall`, `dumbbell`, `streamgraph`, `sunburst`, `violin` and `icicle` are free and need an import). See the Licensing section in `references/feature-platform.md`.
|
|
70
73
|
|
|
71
74
|
## 1. Critical Rules
|
|
72
75
|
|
|
@@ -76,20 +79,21 @@ metadata:
|
|
|
76
79
|
4. **`yaxis` must be an array** when using multiple y-axes. Each entry needs a `seriesName` to map to the correct series.
|
|
77
80
|
5. **`tooltip.shared` and `tooltip.intersect` are mutually exclusive.** `shared: true` shows all series at an x-position. `intersect: true` shows only the hovered point.
|
|
78
81
|
6. **Use `null` (not `undefined` or empty string)** for missing data points. `undefined` is silently ignored and breaks the chart.
|
|
79
|
-
7. **`chart.stacked: true`**
|
|
82
|
+
7. **`chart.stacked: true`** stacks `bar`, `area` and `line` series. In a mixed chart only the bar series stack by default (`chart.stackOnlyBar` defaults to `true`); set `stackOnlyBar: false` to stack its line and area series too. `waterfall`, `dumbbell` and `streamgraph` force it off, since they do their own accumulation.
|
|
80
83
|
8. **Responsive breakpoints** must be in ascending order in the `responsive` array.
|
|
81
84
|
9. **For mixed/combo charts**, set `type` on each individual series object, not just on `chart.type`.
|
|
82
|
-
10. **RadialBar values
|
|
85
|
+
10. **RadialBar values sit on the `plotOptions.radialBar.min` to `max` domain** (default 0 to 100, so percentages by default). Set `min` / `max` to plot raw values; a value outside the domain is clamped to the end of the arc.
|
|
83
86
|
11. **Color hex values must include the `#` prefix** (e.g., `'#FF5733'`, not `'FF5733'`).
|
|
84
|
-
12. **
|
|
87
|
+
12. **The default `apexcharts` bundle is not everything (v8).** Next to `import ApexCharts from 'apexcharts'`, add `import 'apexcharts/unit'` (also for `waffle`), `'apexcharts/sunburst'`, `'apexcharts/violin'`, `'apexcharts/icicle'` or `'apexcharts/raincloud'` before writing that chart type. Add `import 'apexcharts/features/<name>'` before writing a `waterfall`, `dumbbell` or `streamgraph` chart, or using `drilldown`, `highlightFilter` (`highlight-filter`), `trellis`, `storyboard`, `perspectives`, `ink`, `renderer: 'canvas'` (`renderer-canvas`), `link`, `measure`, `history` or the context menu (`context-menu`). `import ApexCharts from 'apexcharts/full'` (script tag: `dist/apexcharts.full.min.js`) is the one entry that needs none of these. See the box above.
|
|
85
88
|
13. **Tree-shaking**: importing `apexcharts/core` gives you a bare class, and you must also import chart-type entries and feature entries separately.
|
|
86
89
|
14. **First-class aliases**: `funnel` and `pyramid` render through the bar engine; `gauge` renders through radialBar. Use them as `chart.type` directly (no `plotOptions.bar.isFunnel` needed). They are covered by the `apexcharts/bar` and `apexcharts/radialBar` tree-shaking entries respectively.
|
|
87
90
|
15. **`violin` (statistical)** uses a per-point density profile: `data: [{ x, y: { density: [[value, weight], ...], points?: [number] } }]`, not a plain number. Since v6.9 a datum may instead supply only raw observations (`points: [number]`, no `y`) and the library derives the density via KDE (needs `apexcharts/features/stats` when tree-shaking).
|
|
88
91
|
16. **`render()` is idempotent**: calling `render()` twice on the same instance returns the same promise instead of building a duplicate chart. You still must `destroy()` before creating a *new* instance on the same element.
|
|
89
|
-
17. **`histogram` (v6.9)** series carry **raw observations** (one number per event), not pre-aggregated counts; the chart chooses bin edges and counts them. Binning ships behind the stats feature: use the `apexcharts/histogram` entry, or `import 'apexcharts/features/stats'` alongside `apexcharts/bar` (the
|
|
92
|
+
17. **`histogram` (v6.9)** series carry **raw observations** (one number per event), not pre-aggregated counts; the chart chooses bin edges and counts them. Binning ships behind the stats feature: use the `apexcharts/histogram` entry, or `import 'apexcharts/features/stats'` alongside `apexcharts/bar` (the default `apexcharts` bundle already includes it).
|
|
90
93
|
18. **`waterfall` (v7.1) accumulates for you.** The series carries the **deltas**, not the running total. A row that should show the running total carries `isSubtotal` or `isTotal` and **no `y`**; the library measures it. Do not pre-compute cumulative values.
|
|
91
94
|
19. **`dumbbell` (v7.1) takes one series per measure**, each with the same `x` categories: `[{ name: '2020', data: [{ x, y }] }, { name: '2025', data: [{ x, y }] }]`. Do **not** zip the values into `y: [low, high]` pairs; that is the older `plotOptions.bar.isDumbbell` range-bar form, which still works but is a different chart.
|
|
92
95
|
20. **`raincloud` (v7.1) takes the raw sample**, one datum per category: `data: [{ x, points: [number] }]`. It is a premium Tier 2 type, so it needs `import 'apexcharts/raincloud'` on top of the default bundle.
|
|
96
|
+
21. **Unknown names fail loudly (v7.9).** An unknown `chart.type` throws when the chart is constructed or updated, and the message names the closest real type (`'column'` is valid, a synonym for `'bar'`; `''` and `null` draw a line chart). An unknown top-level option key is kept but never read. Numeric-string axis bounds such as `yaxis.min: '10'` work, and a bound that cannot be parsed is ignored (the axis scales to the data). Both cases log a console warning, except in `apexcharts.min.js` and the CommonJS builds (the `*.common.js` files `require('apexcharts')` loads), which strip `console.warn`.
|
|
93
97
|
|
|
94
98
|
---
|
|
95
99
|
|
|
@@ -103,23 +107,23 @@ This is the most critical reference. Using the wrong data format is the #1 cause
|
|
|
103
107
|
|---|---|---|---|
|
|
104
108
|
| Line | `'line'` | `[{ name, data: [number \| null] }]` or `[{ name, data: [{ x, y }] }]` | `series: [{ name: 'Sales', data: [30, 40, null, 50] }]` |
|
|
105
109
|
| Area | `'area'` | Same as line | `series: [{ name: 'Views', data: [10, 20, 30] }]` |
|
|
106
|
-
| Bar / Column | `'bar'` | Same as line. Defaults to **vertical columns**; set `plotOptions.bar.horizontal: true` for horizontal bars. | `series: [{ name: 'Revenue', data: [44, 55, 41] }]` |
|
|
110
|
+
| Bar / Column | `'bar'` (or `'column'`, a synonym since v7.9) | Same as line. Defaults to **vertical columns**; set `plotOptions.bar.horizontal: true` for horizontal bars. | `series: [{ name: 'Revenue', data: [44, 55, 41] }]` |
|
|
107
111
|
| Scatter | `'scatter'` | `[{ name, data: [{ x, y }] }]` — always use XY format | `series: [{ name: 'Points', data: [{ x: 1, y: 5 }, { x: 2, y: 10 }] }]` |
|
|
108
112
|
| Bubble | `'bubble'` | `[{ name, data: [{ x, y, z }] }]` — **z is required** (bubble size) | `series: [{ name: 'Data', data: [{ x: 1, y: 30, z: 10 }] }]` |
|
|
109
113
|
| Range Area | `'rangeArea'` | `[{ name, data: [{ x, y: [low, high] }] }]` | `series: [{ name: 'Temp', data: [{ x: 'Jan', y: [5, 15] }] }]` |
|
|
110
114
|
| Range Bar | `'rangeBar'` | `[{ name, data: [{ x, y: [start, end] }] }]` — for timeline/Gantt, use timestamps | `series: [{ name: 'Tasks', data: [{ x: 'Design', y: [1, 5] }] }]` |
|
|
111
115
|
| Candlestick | `'candlestick'` | `[{ data: [{ x, y: [O, H, L, C] }] }]` — array of 4: Open, High, Low, Close | `series: [{ data: [{ x: new Date('2024-01-01'), y: [51, 56, 48, 53] }] }]` |
|
|
112
116
|
| Box Plot | `'boxPlot'` | `[{ data: [{ x, y: [min, Q1, median, Q3, max] }] }]` — array of 5. *(v6.9)* Or supply the raw sample instead: `[{ data: [{ x, points: [number] }] }]` and the quartiles are computed (R type 7; needs the stats feature). | `series: [{ data: [{ x: 'Group A', y: [10, 20, 30, 40, 50] }] }]` |
|
|
113
|
-
| Violin *(v6)* | `'violin'` | `[{ name, data: [{ x, y: { density: [[value, weight], ...], points?: [number] } }] }]`. *(v6.9)* Or supply the raw sample instead: `[{ name, data: [{ x, points: [number] }] }]` and the density is derived via KDE (needs the stats feature). | `series: [{ name: 'Sessions', data: [{ x: 'A', y: { density: [[20, 0.1], [30, 0.2]], points: [21, 29] } }] }]` |
|
|
117
|
+
| Violin *(v6, Tier 2 since v8)* | `'violin'` | `[{ name, data: [{ x, y: { density: [[value, weight], ...], points?: [number] } }] }]`. *(v6.9)* Or supply the raw sample instead: `[{ name, data: [{ x, points: [number] }] }]` and the density is derived via KDE (needs the stats feature). Needs `import 'apexcharts/violin'`. | `series: [{ name: 'Sessions', data: [{ x: 'A', y: { density: [[20, 0.1], [30, 0.2]], points: [21, 29] } }] }]` |
|
|
114
118
|
| Histogram *(v6.9)* | `'histogram'` | `[{ name, data: [number] }]`: **raw observations**, one number per event, NOT pre-binned counts. The chart bins them (needs the stats feature). | `series: [{ name: 'Latency', data: [102, 87, 143, 91] }]` |
|
|
115
119
|
| Heatmap | `'heatmap'` | `[{ name, data: [{ x, y: number }] }]` — y is the intensity value | `series: [{ name: 'Mon', data: [{ x: '10am', y: 45 }] }]` |
|
|
116
120
|
| Treemap | `'treemap'` | `[{ data: [{ x, y: number }] }]` — y is the area/value. *(v6.9)* A datum may carry `children` to any depth for a nested treemap (see `references/grid-charts.md`). | `series: [{ data: [{ x: 'Item A', y: 100 }, { x: 'Item B', y: 60 }] }]` |
|
|
117
121
|
| Radar | `'radar'` | `[{ name, data: [number] }]` + `xaxis: { categories: [...] }` | `series: [{ name: 'Skill', data: [80, 50, 30, 40, 100] }]` |
|
|
118
122
|
| Funnel *(v6)* | `'funnel'` | `[{ name, data: [number] }]` + `xaxis: { categories: [...] }`. Order values **largest→smallest**. | `series: [{ data: [1380, 990, 548, 200] }]` |
|
|
119
123
|
| Pyramid *(v6)* | `'pyramid'` | Same as funnel; order values **smallest→largest** (wide base at bottom). | `series: [{ data: [200, 548, 990, 1380] }]` |
|
|
120
|
-
| Waterfall *(v7.1)* | `'waterfall'` | `[{ name, data: [{ x, y }] }]` where **`y` is the signed delta**, not a running total. A running-total row carries `isSubtotal` (sum since the last cut) or `isTotal` (sum from zero) and **omits `y`**. | `series: [{ data: [{ x: 'Revenue', y: 8786 }, { x: 'Costs', y: -2786 }, { x: 'Gross', isSubtotal: true }] }]` |
|
|
121
|
-
| Dumbbell *(v7.1)* | `'dumbbell'` | **One series per measure**, sharing x categories: `[{ name, data: [{ x, y }] }, ...]`. Not `[low, high]` pairs. | `series: [{ name: '2020', data: [{ x: 'Backend', y: 92 }] }, { name: '2025', data: [{ x: 'Backend', y: 118 }] }]` |
|
|
122
|
-
| Streamgraph *(v7.1)* | `'streamgraph'` | Same as area: `[{ name, data: [{ x, y }] }]`. Stacking, baseline and band order are the chart's job, so do **not** set `chart.stacked`. | `series: [{ name: 'Drama', data: [{ x: '2024-01-01', y: 32 }] }]` |
|
|
124
|
+
| Waterfall *(v7.1, Tier 2 since v8)* | `'waterfall'` | `[{ name, data: [{ x, y }] }]` where **`y` is the signed delta**, not a running total. A running-total row carries `isSubtotal` (sum since the last cut) or `isTotal` (sum from zero) and **omits `y`**. Needs `import 'apexcharts/features/waterfall'`. | `series: [{ data: [{ x: 'Revenue', y: 8786 }, { x: 'Costs', y: -2786 }, { x: 'Gross', isSubtotal: true }] }]` |
|
|
125
|
+
| Dumbbell *(v7.1, Tier 2 since v8)* | `'dumbbell'` | **One series per measure**, sharing x categories: `[{ name, data: [{ x, y }] }, ...]`. Not `[low, high]` pairs. Needs `import 'apexcharts/features/dumbbell'`. | `series: [{ name: '2020', data: [{ x: 'Backend', y: 92 }] }, { name: '2025', data: [{ x: 'Backend', y: 118 }] }]` |
|
|
126
|
+
| Streamgraph *(v7.1, Tier 2 since v8)* | `'streamgraph'` | Same as area: `[{ name, data: [{ x, y }] }]`. Stacking, baseline and band order are the chart's job, so do **not** set `chart.stacked`. Needs `import 'apexcharts/features/streamgraph'`. | `series: [{ name: 'Drama', data: [{ x: '2024-01-01', y: 32 }] }]` |
|
|
123
127
|
| Raincloud *(v7.1, premium, Tier 2)* | `'raincloud'` | `[{ name, data: [{ x, points: [number] }] }]`: the **raw sample** per category; the density, box and rain are derived. Needs `import 'apexcharts/raincloud'`. | `series: [{ name: 'Weight gain', data: [{ x: 'Control', points: [3.1, 4.7, 2.9] }] }]` |
|
|
124
128
|
|
|
125
129
|
### Non-Axis Charts (pie, donut, radialBar, polarArea, gauge, unit, waffle)
|
|
@@ -137,11 +141,13 @@ These use a **flat number array** for `series`, NOT the object format:
|
|
|
137
141
|
|
|
138
142
|
**Gauge *(v6)*** is a single-value radialBar alias: `series: [72]`, `labels: ['Progress']`. Configure the arc/needle, colored bands, ticks, and `min`/`max` domain through `plotOptions.radialBar` (see `references/circular-charts.md`).
|
|
139
143
|
|
|
140
|
-
**Unit / Waffle *(v6.6, premium)*** render one mark per unit of value (dot clusters, pictograms, waffles, beeswarms). Same flat-array + `labels` shape as pie; layout is chosen through `plotOptions.unit.layout`. A per-mark object form (`series: [{ name, data: [{ value, x, z, name, fillColor, id }] }]`) gives each mark its own color, position, size, and tooltip. `waffle` is a preset alias of `unit` (grid layout). Both render an `APEXCHARTS` watermark until an entitled license is set. See `references/circular-charts.md`.
|
|
144
|
+
**Unit / Waffle *(v6.6, premium, Tier 2 since v8)*** need `import 'apexcharts/unit'` (both types). They render one mark per unit of value (dot clusters, pictograms, waffles, beeswarms). Same flat-array + `labels` shape as pie; layout is chosen through `plotOptions.unit.layout`. A per-mark object form (`series: [{ name, data: [{ value, x, z, name, fillColor, id }] }]`) gives each mark its own color, position, size, and tooltip. `waffle` is a preset alias of `unit` (grid layout). Both render an `APEXCHARTS` watermark until an entitled license is set. See `references/circular-charts.md`.
|
|
145
|
+
|
|
146
|
+
### Hierarchical Charts (sunburst, icicle)
|
|
141
147
|
|
|
142
|
-
|
|
148
|
+
Both take the same tree, and the choice between them is a layout one: a sunburst spends the plot radially, an icicle spends it along a straight axis.
|
|
143
149
|
|
|
144
|
-
**Sunburst *(v6.7, free)*** draws tree-structured data as concentric rings (a nested pie / donut)
|
|
150
|
+
**Sunburst *(v6.7, free, Tier 2 since v8)*** draws tree-structured data as concentric rings (a nested pie / donut) and needs `import 'apexcharts/sunburst'`. It uses the axis-style `[{ data: [...] }]` wrapper, but each datum is an `{ x, y, children }` node nested to any depth:
|
|
145
151
|
|
|
146
152
|
```js
|
|
147
153
|
{
|
|
@@ -160,18 +166,38 @@ These use a **flat number array** for `series`, NOT the object format:
|
|
|
160
166
|
|
|
161
167
|
Configure the centre hole, corner rounding, and inter-arc gap through `plotOptions.sunburst` (see `references/circular-charts.md`).
|
|
162
168
|
|
|
169
|
+
**Icicle *(v7.6, free, Tier 2)*** is the same partition in cartesian coordinates: one band per depth level, each child sized inside its parent's extent. Same data shape as the sunburst, and it also reads an existing `drilldown` config as plain data (no drilldown runtime needed). Labels stay horizontal at every depth and same-depth siblings line up across branches, which is what makes it the better pick for deep trees, call stacks and path funnels.
|
|
170
|
+
|
|
171
|
+
```js
|
|
172
|
+
import ApexCharts from 'apexcharts'
|
|
173
|
+
import 'apexcharts/icicle' // Tier 2: NOT in the default bundle
|
|
174
|
+
|
|
175
|
+
{
|
|
176
|
+
chart: { type: 'icicle' },
|
|
177
|
+
series: [{ data: [ /* the same { x, y, children } tree as above */ ] }],
|
|
178
|
+
plotOptions: { icicle: { direction: 'up' } } // flame-graph orientation
|
|
179
|
+
}
|
|
180
|
+
```
|
|
181
|
+
|
|
182
|
+
A branch may omit its own `y` and be the sum of its children *(fixed in v7.6 for both partition types)*. Configure depth direction, band thickness, leaf behaviour and zoom through `plotOptions.icicle` (see `references/grid-charts.md`).
|
|
183
|
+
|
|
163
184
|
---
|
|
164
185
|
|
|
165
186
|
## 3. Package / Module Map
|
|
166
187
|
|
|
167
188
|
```
|
|
168
|
-
# Default bundle (
|
|
189
|
+
# Default bundle (the standard chart types plus the Tier 1 features; see the box at the top)
|
|
169
190
|
import ApexCharts from 'apexcharts'
|
|
170
191
|
|
|
192
|
+
# Full bundle (v8.0): every chart type and feature, plus the unit-shapes and pictograms catalogs. No add-on needed.
|
|
193
|
+
import ApexCharts from 'apexcharts/full'
|
|
194
|
+
|
|
171
195
|
# Bare core (no chart types, no optional features — must register manually)
|
|
172
196
|
import ApexCharts from 'apexcharts/core'
|
|
173
197
|
|
|
174
|
-
# Per-type entry points (registers specific chart types + core)
|
|
198
|
+
# Per-type entry points (registers specific chart types + core, plus any feature the type needs; no legend, toolbar or exports unless you import them).
|
|
199
|
+
# For a Tier 2 type (unit, sunburst, violin, icicle, raincloud) the usual form is
|
|
200
|
+
# import 'apexcharts/<type>' next to the default bundle.
|
|
175
201
|
import ApexCharts from 'apexcharts/line' # line, area, scatter, bubble, rangeArea
|
|
176
202
|
import ApexCharts from 'apexcharts/area' # same as /line
|
|
177
203
|
import ApexCharts from 'apexcharts/scatter' # same as /line
|
|
@@ -185,8 +211,8 @@ import ApexCharts from 'apexcharts/dumbbell' # dumbbell (v7.1): bar engine
|
|
|
185
211
|
import ApexCharts from 'apexcharts/streamgraph' # streamgraph (v7.1): rangeArea engine + the streamgraph feature
|
|
186
212
|
import ApexCharts from 'apexcharts/candlestick' # candlestick, boxPlot
|
|
187
213
|
import ApexCharts from 'apexcharts/boxPlot' # same as /candlestick
|
|
188
|
-
import ApexCharts from 'apexcharts/violin' # violin
|
|
189
|
-
import ApexCharts from 'apexcharts/raincloud' # raincloud (v7.1, premium): violin
|
|
214
|
+
import ApexCharts from 'apexcharts/violin' # violin (Tier 2 since v8). Carries no bar renderer: on this lean path also import 'apexcharts/bar'
|
|
215
|
+
import ApexCharts from 'apexcharts/raincloud' # raincloud (v7.1, premium): violin + the raincloud feature; on this lean path also import 'apexcharts/bar'
|
|
190
216
|
import ApexCharts from 'apexcharts/histogram' # histogram (v6.9): bar engine + the stats feature
|
|
191
217
|
import ApexCharts from 'apexcharts/pie' # pie, donut, polarArea
|
|
192
218
|
import ApexCharts from 'apexcharts/donut' # same as /pie
|
|
@@ -195,8 +221,9 @@ import ApexCharts from 'apexcharts/radialBar' # radialBar + gauge
|
|
|
195
221
|
import ApexCharts from 'apexcharts/radar' # radar only
|
|
196
222
|
import ApexCharts from 'apexcharts/heatmap' # heatmap only
|
|
197
223
|
import ApexCharts from 'apexcharts/treemap' # treemap only
|
|
198
|
-
import ApexCharts from 'apexcharts/sunburst' # sunburst (v6.7, hierarchical)
|
|
199
|
-
import ApexCharts from 'apexcharts/
|
|
224
|
+
import ApexCharts from 'apexcharts/sunburst' # sunburst (v6.7, hierarchical): Tier 2 since v8
|
|
225
|
+
import ApexCharts from 'apexcharts/icicle' # icicle (v7.6, hierarchical): Tier 2, NOT in the default bundle
|
|
226
|
+
import ApexCharts from 'apexcharts/unit' # unit + waffle (v6.6, premium): Tier 2 since v8
|
|
200
227
|
# funnel + pyramid render through the bar engine; use apexcharts/bar
|
|
201
228
|
|
|
202
229
|
# Unit-chart shape kit (v6.10): named exports, tree-shaken per shape (~4 KB gzipped each)
|
|
@@ -214,15 +241,16 @@ import 'apexcharts/features/annotations' # X/Y/point/text/image annotations
|
|
|
214
241
|
import 'apexcharts/features/keyboard' # Keyboard navigation (accessibility)
|
|
215
242
|
import 'apexcharts/features/stats' # Statistics (v6.9): histogram binning, boxPlot/violin raw samples, rowSeries()
|
|
216
243
|
import 'apexcharts/features/morph' # Animated chart-type morphs
|
|
217
|
-
import 'apexcharts/features/drilldown' # Hierarchical drill-down
|
|
218
244
|
import 'apexcharts/features/facet' # Design tokens + OS-aware themes
|
|
219
245
|
import 'apexcharts/features/weave' # Public plugin platform
|
|
220
246
|
import 'apexcharts/features/marks' # Custom series types (registerSeriesType)
|
|
221
|
-
import 'apexcharts/features/waterfall' # (v7.1) waterfall chart type
|
|
222
|
-
import 'apexcharts/features/dumbbell' # (v7.1) dumbbell chart type
|
|
223
|
-
import 'apexcharts/features/streamgraph' # (v7.1) streamgraph chart type
|
|
224
247
|
|
|
225
|
-
# TIER 2
|
|
248
|
+
# TIER 2: NOT in the default bundle (all are in apexcharts/full).
|
|
249
|
+
import 'apexcharts/features/drilldown' # Hierarchical drill-down (Tier 2 since v8)
|
|
250
|
+
import 'apexcharts/features/waterfall' # (v7.1) waterfall chart type (Tier 2 since v8)
|
|
251
|
+
import 'apexcharts/features/dumbbell' # (v7.1) dumbbell chart type (Tier 2 since v8)
|
|
252
|
+
import 'apexcharts/features/streamgraph' # (v7.1) streamgraph chart type (Tier 2 since v8)
|
|
253
|
+
import 'apexcharts/features/highlight-filter' # (v7.9) Part-of-whole highlight, highlightFilter (premium)
|
|
226
254
|
import 'apexcharts/features/trellis' # (v7.0) Small multiples (premium)
|
|
227
255
|
import 'apexcharts/features/storyboard' # Scrollytelling (premium; registers perspectives)
|
|
228
256
|
import 'apexcharts/features/perspectives' # Shareable view state (premium)
|
|
@@ -232,16 +260,16 @@ import 'apexcharts/features/link' # Crossfilter / linked views (premi
|
|
|
232
260
|
import 'apexcharts/features/measure' # Measure / delta ruler (premium)
|
|
233
261
|
import 'apexcharts/features/history' # Undo/redo (Rewind, premium)
|
|
234
262
|
import 'apexcharts/features/context-menu' # Right-click / long-press context menu (premium)
|
|
235
|
-
import 'apexcharts/
|
|
263
|
+
import 'apexcharts/raincloud' # (v7.1) raincloud (premium): the violin renderer plus the raincloud feature. features/raincloud alone works only where violin is already registered (v8)
|
|
236
264
|
|
|
237
265
|
import 'apexcharts/features/all' # Tier 1 only. Does NOT pull in Tier 2.
|
|
238
266
|
|
|
239
267
|
# SSR (server-side rendering)
|
|
240
|
-
import ApexCharts from 'apexcharts/ssr' # Node.js: renderToString, renderToHTML
|
|
241
|
-
import ApexCharts from 'apexcharts/client' # Browser
|
|
268
|
+
import ApexCharts from 'apexcharts/ssr' # Node.js: renderToString, renderToHTML. Also the only entry with hydrate() (browser-safe)
|
|
269
|
+
import ApexCharts from 'apexcharts/client' # Browser build, explicitly. No hydrate(): hydrate from apexcharts/ssr
|
|
242
270
|
```
|
|
243
271
|
|
|
244
|
-
**Note (
|
|
272
|
+
**Note (v8):** `apexcharts` gives you the standard chart types and the Tier 1 features. The Tier 2 chart types (`unit` / `waffle`, `sunburst`, `violin`, `icicle`, `raincloud`) and Tier 2 features need their own import **unless you started from `apexcharts/full`**. `apexcharts/features/all` is the Tier 1 set, so it is not a shortcut past this. Tree-shaking entries (`/core`, `/line`, etc.) are for reducing bundle size below the default. On the lean core, `violin` and `raincloud` also need `apexcharts/bar`, and a boxPlot or violin of raw observations needs `apexcharts/features/stats` (the console says so).
|
|
245
273
|
|
|
246
274
|
**Note (v6.9):** ApexCharts is no longer dependency-free: it depends on `apex-commons` at runtime. npm resolves it automatically and the browser (script-tag) bundles inline it, so no action is needed; it only matters for tooling that assumed zero dependencies.
|
|
247
275
|
|
|
@@ -297,7 +325,7 @@ chart.destroy()
|
|
|
297
325
|
| `xaxis.labels.formatter` | `(value: string \| number, timestamp?: number, opts?) => string` | Formatted x-axis tick label |
|
|
298
326
|
| `yaxis.labels.formatter` | `(value: number, opts?) => string` | Formatted y-axis tick label |
|
|
299
327
|
| `tooltip.x.formatter` | `(value: number, opts?) => string` | Tooltip x-value text |
|
|
300
|
-
| `tooltip.y.formatter` | `(value: number, opts?) => string` | Tooltip y-value text |
|
|
328
|
+
| `tooltip.y.formatter` | `(value: number \| null, opts?) => string` | Tooltip y-value text. `value` is `null` at a gap, so guard before a number method: `(val) => val == null ? 'n/a' : val.toFixed(2)` |
|
|
301
329
|
| `tooltip.y.title.formatter` | `(seriesName: string, opts?) => string` | Tooltip series title |
|
|
302
330
|
| `tooltip.z.formatter` | `(value: number) => string` | Tooltip z-value (bubble) |
|
|
303
331
|
| `dataLabels.formatter` | `(value: number \| string \| number[], opts?) => string \| number` | Data label text |
|
|
@@ -308,7 +336,7 @@ chart.destroy()
|
|
|
308
336
|
|
|
309
337
|
**Important:** All formatters must return a `string` (or `number` for `dataLabels.formatter`). Never return `undefined`.
|
|
310
338
|
|
|
311
|
-
**Per-point data label offsets (v6.8):** `dataLabels.offsetX` and `dataLabels.offsetY` accept `number | ((opts) => number)`. The function receives `{ series, seriesIndex, dataPointIndex, w }` (same signature as `dataLabels.style.colors` functions)
|
|
339
|
+
**Per-point data label offsets (v6.8):** `dataLabels.offsetX` and `dataLabels.offsetY` accept `number | ((opts) => number)`. The function receives `{ series, seriesIndex, dataPointIndex, w }` (same signature as `dataLabels.style.colors` functions). Use it for deliberate placement; keep it pure, since it may be called more than once per label. Collisions do not need it: since v7.8 `dataLabels.avoidOverlap` (on by default) nudges labels that land on each other apart along the value axis, across series as well as within one, after the offsets are applied (radial types keep their own placement). Tune it with `{ gap, maxShift, hide }`, or set `avoidOverlap: false` to keep each label exactly at its mark and offset.
|
|
312
340
|
|
|
313
341
|
---
|
|
314
342
|
|
|
@@ -416,6 +444,12 @@ Also: do NOT use `xaxis.categories` when your data already has `{ x, y }` format
|
|
|
416
444
|
{ tooltip: { shared: false, intersect: true } }
|
|
417
445
|
```
|
|
418
446
|
|
|
447
|
+
**Reaching content inside a `custom` tooltip *(v7.6)***: a tooltip closes as the pointer leaves the data point, so a link or button returned by `custom` can never be clicked. `tooltip.interactive: true` holds it open while the pointer is over it. It is off by default, and while it is on `followCursor` is **ignored** (a tooltip that trails the cursor retreats from every approach); the configured `followCursor` value is left alone and applies again the moment `interactive` goes back off.
|
|
448
|
+
|
|
449
|
+
```js
|
|
450
|
+
{ tooltip: { interactive: true, custom: ({ seriesIndex }) => `<a href="/detail/${seriesIndex}">Open</a>` } }
|
|
451
|
+
```
|
|
452
|
+
|
|
419
453
|
### Pitfall 7: Wrong formatter signatures
|
|
420
454
|
|
|
421
455
|
❌ **WRONG** — using y-axis formatter signature for tooltip:
|
|
@@ -452,11 +486,13 @@ Also: do NOT use `xaxis.categories` when your data already has `{ x, y }` format
|
|
|
452
486
|
{ chart: { type: 'scatter', stacked: true } }
|
|
453
487
|
```
|
|
454
488
|
|
|
455
|
-
✅ **CORRECT
|
|
489
|
+
✅ **CORRECT**: stacking works on bar, area and line:
|
|
456
490
|
```js
|
|
457
491
|
{ chart: { type: 'bar', stacked: true } }
|
|
458
492
|
// or
|
|
459
493
|
{ chart: { type: 'area', stacked: true } }
|
|
494
|
+
// or
|
|
495
|
+
{ chart: { type: 'line', stacked: true } }
|
|
460
496
|
```
|
|
461
497
|
|
|
462
498
|
### Pitfall 10: Mixed/combo charts missing per-series type
|
|
@@ -483,16 +519,19 @@ Also: do NOT use `xaxis.categories` when your data already has `{ x, y }` format
|
|
|
483
519
|
}
|
|
484
520
|
```
|
|
485
521
|
|
|
486
|
-
### Pitfall 11: RadialBar values
|
|
522
|
+
### Pitfall 11: RadialBar values outside the min/max domain
|
|
487
523
|
|
|
488
|
-
❌ **WRONG
|
|
524
|
+
❌ **WRONG**: raw values on the default 0 to 100 domain (each arc is clamped to full):
|
|
489
525
|
```js
|
|
490
526
|
{ chart: { type: 'radialBar' }, series: [340, 520, 190] }
|
|
491
527
|
```
|
|
492
528
|
|
|
493
|
-
✅ **CORRECT
|
|
529
|
+
✅ **CORRECT**: use percentages, or set the domain to fit the raw values:
|
|
494
530
|
```js
|
|
495
531
|
{ chart: { type: 'radialBar' }, series: [76, 67, 61], labels: ['A', 'B', 'C'] }
|
|
532
|
+
// or
|
|
533
|
+
{ chart: { type: 'radialBar' }, series: [340, 520, 190], labels: ['A', 'B', 'C'],
|
|
534
|
+
plotOptions: { radialBar: { min: 0, max: 600 } } }
|
|
496
535
|
```
|
|
497
536
|
|
|
498
537
|
### Pitfall 12: Colors without # prefix
|
|
@@ -537,42 +576,44 @@ import 'apexcharts/features/toolbar'
|
|
|
537
576
|
import 'apexcharts/features/annotations'
|
|
538
577
|
```
|
|
539
578
|
|
|
540
|
-
**(b) *(
|
|
579
|
+
**(b) *(v8)* The default bundle does not carry the Tier 2 chart types and features.** This one catches people who never tree-shook anything. It is the most common upgrade failure: v6 to v7 for the nine 7.0 features, v7 to v8 for unit, sunburst, violin, drilldown, waterfall, dumbbell and streamgraph.
|
|
541
580
|
|
|
542
|
-
❌ **WRONG**: the config is right, the module is absent, so
|
|
581
|
+
❌ **WRONG**: the config is right, the module is absent, so `render()` rejects and nothing draws:
|
|
543
582
|
```js
|
|
544
583
|
import ApexCharts from 'apexcharts'
|
|
545
|
-
new ApexCharts(el, { chart: { type: '
|
|
584
|
+
new ApexCharts(el, { chart: { type: 'sunburst' }, series }).render()
|
|
546
585
|
```
|
|
547
586
|
|
|
548
587
|
✅ **CORRECT**:
|
|
549
588
|
```js
|
|
550
589
|
import ApexCharts from 'apexcharts'
|
|
551
|
-
import 'apexcharts/
|
|
590
|
+
import 'apexcharts/sunburst'
|
|
552
591
|
```
|
|
553
592
|
|
|
554
|
-
|
|
593
|
+
The console names the import in every case (since 7.9.1 the minified bundle prints it too), but what the chart does depends on what is missing:
|
|
555
594
|
|
|
556
|
-
|
|
595
|
+
- **A Tier 2 chart type** (`unit`, `waffle`, `sunburst`, `violin`, `icicle`, and `raincloud`, which draws through violin): `render()` rejects and nothing draws. An `updateOptions`, `updateSeries` or `appendSeries` that asks for one is refused, and the chart stays as it was.
|
|
596
|
+
- **`waterfall`, `dumbbell` or `streamgraph`** without its feature (or a `raincloud` on a page that has violin but not the raincloud feature): one warning and an empty plot.
|
|
597
|
+
- **A Tier 2 feature** (`drilldown`, `highlightFilter`, `trellis`, `storyboard`, `perspectives`, `ink`, `renderer: 'canvas'`, `link`, `measure`, `history`, `contextMenu`): the chart draws without it, with a warning when its config is present. A trellis renders as one plain chart; a drilldown chart draws its root level and never navigates, and `chart.drillDown()` throws.
|
|
557
598
|
|
|
558
|
-
|
|
559
|
-
```js
|
|
560
|
-
// On server:
|
|
561
|
-
import ApexCharts from 'apexcharts'
|
|
562
|
-
await ApexCharts.renderToString(options) // renderToString doesn't exist!
|
|
563
|
-
```
|
|
599
|
+
Or start from `import ApexCharts from 'apexcharts/full'`, which needs none of these.
|
|
564
600
|
|
|
565
|
-
|
|
601
|
+
### Pitfall 15: SSR — wrong import path
|
|
602
|
+
|
|
603
|
+
`apexcharts` resolves by environment: the `"."` export's `node` condition points at the SSR bundle, so `import ApexCharts from 'apexcharts'` on a server **does** carry `renderToString` / `renderToHTML`. Import `apexcharts/ssr` explicitly anyway, so the intent survives a bundler that resolves the `browser` condition while targeting Node:
|
|
566
604
|
```js
|
|
567
605
|
// On server:
|
|
568
606
|
import ApexCharts from 'apexcharts/ssr'
|
|
569
607
|
const svg = await ApexCharts.renderToString(options)
|
|
570
608
|
|
|
571
|
-
// On client (for hydration):
|
|
572
|
-
|
|
573
|
-
ApexCharts
|
|
609
|
+
// On client (for hydration): target the wrapper renderToHTML emitted,
|
|
610
|
+
// which carries data-apexcharts-hydrate and NO id.
|
|
611
|
+
import ApexCharts from 'apexcharts/ssr' // hydrate() lives only on this entry; it is browser-safe
|
|
612
|
+
ApexCharts.hydrateAll() // or hydrate(document.querySelector('[data-apexcharts-hydrate]'))
|
|
574
613
|
```
|
|
575
614
|
|
|
615
|
+
In a browser, `apexcharts`, `apexcharts/client` and `apexcharts/full` have no `hydrate` / `hydrateAll`, and the types declare them on every entry, so TypeScript does not catch the mistake.
|
|
616
|
+
|
|
576
617
|
### Pitfall 16: updateOptions vs updateSeries vs appendData
|
|
577
618
|
|
|
578
619
|
❌ **WRONG** — full updateOptions just to change data:
|
|
@@ -621,7 +662,7 @@ await chart.updateOptions({ title: { text: 'New Title' } })
|
|
|
621
662
|
| `exportToCSV(options?)` | Trigger CSV download. |
|
|
622
663
|
| `setLocale(localeName)` | Switch locale. |
|
|
623
664
|
| `toggleDataPointSelection(seriesIndex, dataPointIndex?)` | Select/deselect data point. |
|
|
624
|
-
| `rowSeries(opts?)` | *(v6.9)* Returns the raw rows behind this chart's marks as a unit-chart series (one cluster per mark), or `null` when the type has no row source (works for histogram / boxPlot / violin, needs `apexcharts/features/stats`). `opts.maxRows` caps the output (default 3000). |
|
|
665
|
+
| `rowSeries(opts?)` | *(v6.9)* Returns the raw rows behind this chart's marks as a unit-chart series (one cluster per mark), or `null` when the type has no row source (works for histogram / boxPlot / violin, needs `apexcharts/features/stats`). `opts.maxRows` caps the output (default 3000). Drawing the result needs the `unit` type, Tier 2 since v8 (`import 'apexcharts/unit'`). |
|
|
625
666
|
| `getState()` | Returns snapshot of chart state. |
|
|
626
667
|
| `addEventListener(name, handler)` | Subscribe to chart event. |
|
|
627
668
|
| `removeEventListener(name, handler)` | Unsubscribe from chart event. |
|
|
@@ -640,6 +681,7 @@ await chart.updateOptions({ title: { text: 'New Title' } })
|
|
|
640
681
|
| `chart.storyboard.bind({ beats }) / goTo() / unbind()` | storyboard | Scroll-driven choreography. |
|
|
641
682
|
| `chart.drillDown(id) / drillUp() / drillToRoot()` | drilldown | Navigate the drill-down hierarchy. |
|
|
642
683
|
| `chart.clearCrossfilter()` | link | Clear active crossfilter selections. |
|
|
684
|
+
| `chart.highlightFilter.set(parts) / clear() / valueAt(i, j) / isActive()` | highlight-filter | *(v7.9)* Set or remove the highlighted parts (each resolves when drawn), read one part. `chart.highlightFilter` is `null` without the feature. |
|
|
643
685
|
|
|
644
686
|
### Static Methods
|
|
645
687
|
|
|
@@ -658,7 +700,7 @@ await chart.updateOptions({ title: { text: 'New Title' } })
|
|
|
658
700
|
| `ApexCharts.registerUnitLayout(name, fn) / unregisterUnitLayout(name)` | *(v6.9)* Register a named unit-chart layout, referenceable via `plotOptions.unit.positions: '<name>'` with `layout: 'custom'`. |
|
|
659
701
|
| `ApexCharts.crossfilter({ id, records }) / getCrossfilter(id)` | *(v6, Link)* Create / fetch a crossfilter engine. |
|
|
660
702
|
| `ApexCharts.perspectives.fromURL(href)` | *(v6)* Decode a perspective token from a URL. |
|
|
661
|
-
| `ApexCharts.trellis(el, options)` | *(v7.0, Trellis)* Imperative entry point: creates a trellis host (options must carry `trellis.by`).
|
|
703
|
+
| `ApexCharts.trellis(el, options)` | *(v7.0, Trellis)* Imperative entry point: creates a trellis host (options must carry `trellis.by`) and starts rendering it. Returns `null`, with a console warning, when the trellis feature is not loaded. |
|
|
662
704
|
| `registerMarks(defs) / definePictogram(meta)` from `apexcharts/pictograms` | *(v7.0)* Register glyphs so `plotOptions.unit.pictogram.mark: 'person'` resolves. |
|
|
663
705
|
|
|
664
706
|
### SSR Static Methods (available with `apexcharts/ssr`)
|
|
@@ -716,6 +758,7 @@ await chart.updateOptions({ title: { text: 'New Title' } })
|
|
|
716
758
|
drillDownEnd: (info, chart, options) => {}, // drilldown
|
|
717
759
|
drillUp: (info, chart, options) => {}, // drilldown
|
|
718
760
|
drillDownError: ({ id, error }, chart, options) => {}, // drilldown (v6.9): async level failed; view unchanged
|
|
761
|
+
highlightFilterChanged: (chart, { active, phase }) => {}, // highlight-filter (v7.9): phase is 'enter', 'update' or 'clear'
|
|
719
762
|
}
|
|
720
763
|
}
|
|
721
764
|
}
|
|
@@ -725,20 +768,21 @@ await chart.updateOptions({ title: { text: 'New Title' } })
|
|
|
725
768
|
|
|
726
769
|
## 9. Feature Platform
|
|
727
770
|
|
|
728
|
-
Every feature below is off by default in config terms. The **Tier** column is about the *bundle*: Tier 1 is already in `import ApexCharts from 'apexcharts'` and needs a `features/*` import only if you started from `/core` or a per-type entry; **Tier 2 needs its import
|
|
771
|
+
Every feature below is off by default in config terms. The **Tier** column is about the *bundle*: Tier 1 is already in `import ApexCharts from 'apexcharts'` and needs a `features/*` import only if you started from `/core` or a per-type entry; **Tier 2 needs its import whatever entry point you used, except `apexcharts/full`, which carries every feature**. Full config shapes, APIs, and examples are in `references/feature-platform.md`.
|
|
729
772
|
|
|
730
773
|
| Feature | Tier | Import | One-liner |
|
|
731
774
|
|---|---|---|---|
|
|
732
|
-
| **Weave** (plugins) | 1 | `apexcharts/features/weave` | Publish reusable chart plugins against a stable `ApexCharts.registerPlugin({ name, setup })` API; activate per chart with `plugins: [{ name }]`. |
|
|
775
|
+
| **Weave** (plugins) | 1 | `apexcharts/features/weave` | Publish reusable chart plugins against a stable `ApexCharts.registerPlugin({ name, setup })` API; activate per chart with `plugins: [{ name }]`. Contract is at **v6** (v7.5): `info`/`categories`/`markDerived` (v2), `reserve` (v3), `pointer` (v4), `claim`/`drawn`/`declare`/`can` (v6). Declare the **lowest** `apiVersion` you can run on and feature-detect the rest: a host older than the version you declare skips your plugin outright. |
|
|
733
776
|
| **Marks** (custom series) | 1 | `apexcharts/features/marks` | `ApexCharts.registerSeriesType(name, { renderItem })` for first-class custom marks (lollipop, bullet). Baseline is `scales.y(0)`, **not** `api.zeroY`. |
|
|
734
777
|
| **Facet** (themes/tokens) | 1 | `apexcharts/features/facet` | `theme: { follow: 'os', name }`, `--apx-*` CSS custom props, `ApexCharts.registerTheme`. |
|
|
735
|
-
| **Drilldown** | 1 | `apexcharts/features/drilldown` | `drilldown: { enabled, series }` + a `drilldown` id on data points; `chart.drillDown()/drillUp()`. v6.9 adds line/area support, async levels (`onDrillDown` may return a Promise), a loading overlay, and the `drillDownError` event. |
|
|
736
778
|
| **Morph** | 1 | `apexcharts/features/morph` | Animated transitions between chart types. |
|
|
737
779
|
| **Stats** | 1 | `apexcharts/features/stats` | *(v6.9)* Statistics behind histogram binning, boxPlot/violin raw-sample summaries (R type 7 quartiles, KDE), and `chart.rowSeries()`. The `apexcharts/histogram` entry includes it. |
|
|
738
780
|
| **Cadence** (easing) | core | none | `chart.animations.easing` accepts a named curve, cubic-bezier array, or function; `ApexCharts.registerEasing`. |
|
|
739
781
|
| **Streaming** | core | none | `chart: { streaming: { enabled, maxPoints } }` for constant-velocity rolling-window scroll. |
|
|
740
782
|
| **Print layout** | core | none | *(v7.1)* `chart: { print: { enabled, width } }`. The paper box cannot be measured from JS (`clientWidth` and `matchMedia` both report the screen during `beforeprint`), so the chart is re-laid out at a known width for the sheet and restored after. **On by default** at `width: 700` (suits A4 / Letter portrait); a chart already narrower is left alone. `print: false` restores the pre-7.1 behavior. |
|
|
741
783
|
| **Marker batching** | core | none | *(v7.0)* `markers: { largeDatasetThreshold: n }`. Above `n` points, a series' markers are drawn as one path per marker size instead of one element per point. **Opt-in, default `0` (off)**, because merged marker paths are not pixel-identical: overlapping markers lose their individual outlines and dense clusters read flatter. Also covers the markers `showNullDataPoints` adds, which is what makes a null-heavy series slow even at `size: 0`. |
|
|
784
|
+
| **Drilldown** | **2** | `apexcharts/features/drilldown` | *(Tier 2 since v8.0)* `drilldown: { enabled, series }` + a `drilldown` id on data points; `chart.drillDown()/drillUp()`. v6.9 adds line/area support, async levels (`onDrillDown` may return a Promise), a loading overlay, and the `drillDownError` event. |
|
|
785
|
+
| **Highlight filter** | **2** | `apexcharts/features/highlight-filter` | *(v7.9, premium)* `highlightFilter` draws each value faded with a part of it solid in front, from the same baseline. The part travels with the data: `series[].highlightData` (parallel to `data`) or `{ x, y, highlight }` per point, `highlightFilter.data` on pie / donut / polarArea / radialBar; `chart.highlightFilter.set(parts)` / `clear()`. Bar, column, funnel, line, area, pie, donut, polarArea, radialBar (and gauge), treemap. See "Highlight filter" in `references/feature-platform.md`. |
|
|
742
786
|
| **Trellis** (small multiples) | **2** | `apexcharts/features/trellis` | *(v7.0, premium)* `trellis: { by: 'region', minPanelWidth }` splits the series into a grid of real charts sharing one scale, legend, toolbar and crosshair. Also `row` × `column` for 2-D grids. |
|
|
743
787
|
| **Strata** (canvas) | **2** | `apexcharts/features/renderer-canvas` | `chart: { renderer: 'auto', rendererThreshold }` paints the dense series layer to canvas while axes/tooltips/exports stay SVG. Falls back to SVG if the module is missing. |
|
|
744
788
|
| **Rewind** (undo/redo) | **2** | `apexcharts/features/history` | *(premium)* `chart: { history: { enabled: true } }`, then `chart.history.undo()/redo()/jump()/transaction()`. |
|
|
@@ -759,7 +803,7 @@ For detailed chart-family-specific options, data format variants, and full worki
|
|
|
759
803
|
| Bar, Column, Range Bar, Timeline/Gantt, Funnel, Pyramid, Waterfall, Dumbbell | `references/bar-charts.md` |
|
|
760
804
|
| Candlestick, Box Plot, Violin, Histogram, Raincloud | `references/financial-charts.md` |
|
|
761
805
|
| Pie, Donut, Polar Area, Radial Bar, Gauge, Sunburst, Unit, Waffle, Pictograms | `references/circular-charts.md` |
|
|
762
|
-
| Heatmap, Treemap | `references/grid-charts.md` |
|
|
806
|
+
| Heatmap (incl. cell shapes), Treemap, Icicle | `references/grid-charts.md` |
|
|
763
807
|
| Radar | `references/radar-charts.md` |
|
|
764
808
|
| Feature platform (small multiples, plugins, canvas, undo/redo, themes, crossfilter, storyboard, ...) | `references/feature-platform.md` |
|
|
765
809
|
| Bundle tiers, Tree-shaking, Bundle optimization | `references/tree-shaking.md` |
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "apexcharts-skill",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "4.0.0",
|
|
4
4
|
"description": "AI coding skill for ApexCharts.js — structured reference docs that help AI assistants (Claude, Cursor, Copilot, etc.) generate correct ApexCharts code.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"apexcharts",
|