drilldown

Configuration Structure

drilldown: {
enabled: boolean,
series: ApexDrilldownSeries[],
id: string | number,
name: string,
data: any[],
series: ApexAxisChartSeries,
name: string | number,
type: string,
color: string,
group: string,
hidden: boolean,
zIndex: number,
parsing: ApexParsing,
x: string,
y: string | string[],
z: string,
highlightData: ((number | null))[],
facet: string | number,
data: Array,
chart: Pick,
plotOptions: ApexPlotOptions,
line: { ... },
isSlopeChart: boolean,
colors: { ... },
threshold: number,
colorAboveThreshold: string,
colorBelowThreshold: string,
area: { ... },
fillTo: 'origin' | 'end',
bar: { ... },
horizontal: boolean,
columnWidth: string | number,
barHeight: string | number,
distributed: boolean,
borderRadius: number,
borderRadiusApplication: 'around' | 'end',
borderRadiusWhenStacked: 'all' | 'last',
rangeBarOverlap: boolean,
rangeBarGroupRows: boolean,
isDumbbell: boolean,
dumbbellColors: string[][],
dumbbell: ApexPlotOptionsDumbbell,
connector: { ... },
color: string,
opacity: number,
dataLabels: { ... },
enabled: boolean,
offset: number,
colorFromMarker: boolean,
formatter: Function,
style: { ... },
fontSize: string,
fontFamily: string,
fontWeight: string | number,
colors: string[],
tooltip: { ... },
differenceLabel: string,
isFunnel: boolean,
isFunnel3d: boolean,
colors: { ... },
ranges: Array,
from: number,
to: number,
color: string,
backgroundBarColors: string[],
backgroundBarRadius: number,
dataLabels: { ... },
maxItems: number,
hideOverflowingLabels: boolean,
position: string,
orientation: 'horizontal' | 'vertical',
total: { ... },
enabled: boolean,
formatter: Function,
offsetX: number,
offsetY: number,
style: { ... },
color: string,
fontSize: string,
fontFamily: string,
fontWeight: number | string,
bubble: { ... },
zScaling: boolean,
minBubbleRadius: number,
maxBubbleRadius: number,
minZ: number,
maxZ: number,
scatter: { ... },
jitter: { ... },
enabled: boolean,
x: number,
y: number,
distributed: boolean,
maxPoints: number,
candlestick: { ... },
type: string,
colors: { ... },
upward: string | string[],
downward: string | string[],
wick: { ... },
useFillColor: boolean,
boxPlot: { ... },
colors: { ... },
upper: string | string[],
lower: string | string[],
whiskers: 'minmax' | 'tukey',
points: { ... },
show: boolean,
shape: 'circle' | 'square',
size: number,
jitter: number,
maxPoints: number,
opacity: number,
fillColor: string,
strokeColor: string,
strokeWidth: number,
colorScale: { ... },
colors: string[],
min: number,
max: number,
steps: number,
violin: { ... },
bandwidthScale: number,
kde: { ... },
bandwidth: number,
resolution: number,
normalize: 'individual' | 'group',
side: 'both' | 'left' | ...,
box: { ... },
show: boolean,
width: string | number,
whiskers: 'minmax' | 'tukey',
strokeWidth: number,
fillColor: string,
capWidth: number,
points: { ... },
show: boolean,
shape: 'circle' | 'square',
size: number,
jitter: number,
constrainToViolin: boolean,
position: 'center' | 'left' | ...,
laneWidth: string | number,
maxPoints: number,
opacity: number,
fillColor: string,
strokeColor: string,
strokeWidth: number,
colorScale: { ... },
colors: string[],
min: number,
max: number,
steps: number,
histogram: { ... },
bins: 'auto' | 'fd' | ...,
binWidth: number,
range: number[],
normalize: 'count' | 'relative' | ...,
cumulative: boolean,
overlap: boolean,
heatmap: { ... },
shape: 'rect' | 'hexagon' | ...,
radius: number,
enableShades: boolean,
shadeIntensity: number,
reverseNegativeShade: boolean,
distributed: boolean,
useFillColorAsStroke: boolean,
colorScale: { ... },
ranges: Array,
from: number,
to: number,
color: string,
foreColor: string,
name: string,
inverse: boolean,
min: number,
max: number,
gradientLegend: ApexGradientLegend,
enabled: boolean,
width: number | string,
height: number | string,
thickness: number,
align: 'start' | 'center' | 'end',
stops: number,
showLabels: boolean,
showHoverValue: boolean,
labelStyle: { ... },
fontSize: string,
fontFamily: string,
colors: string,
arrow: { ... },
size: number,
color: string,
formatter: Function,
waterfall: { ... },
colors: { ... },
positive: string,
negative: string,
subtotal: string,
total: string,
connectors: { ... },
show: boolean,
color: string,
strokeWidth: number,
strokeDashArray: number,
streamgraph: { ... },
offset: 'wiggle' | 'silhouette' | ...,
order: 'inside-out' | 'inverse' | ...,
hover: { ... },
show: boolean,
opacity: number,
labels: { ... },
show: boolean,
minWidth: number,
minFontSize: number,
maxFontSize: number,
style: { ... },
fontSize: string,
fontFamily: string,
fontWeight: string | number,
colors: string[],
funnel: { ... },
shape: 'rectangle' | 'trapezoid',
lastShape: 'flat' | 'taper',
treemap: { ... },
enableShades: boolean,
shadeIntensity: number,
distributed: boolean,
reverseNegativeShade: boolean,
useFillColorAsStroke: boolean,
dataLabels: { ... },
format: 'scale' | 'truncate',
minFontSize: number,
borderRadius: number,
colorScale: { ... },
inverse: boolean,
ranges: Array,
from: number,
to: number,
color: string,
foreColor: string,
name: string,
min: number,
max: number,
colorValue: string | ((datum: any, opts: object) => number),
gradient: { ... },
enabled: boolean,
min: number,
max: number,
midpoint: number | null,
symmetric: boolean,
colors: string[],
stops: Array,
value: number,
color: string,
gradientLegend: ApexGradientLegend,
enabled: boolean,
width: number | string,
height: number | string,
thickness: number,
align: 'start' | 'center' | 'end',
stops: number,
showLabels: boolean,
showHoverValue: boolean,
labelStyle: { ... },
fontSize: string,
fontFamily: string,
colors: string,
arrow: { ... },
size: number,
color: string,
formatter: Function,
nested: { ... },
enabled: boolean,
drilldownAsLevels: boolean,
parents: { ... },
padding: number,
fill: string,
fillOpacity: number,
borderColor: string,
borderWidth: number,
borderRadius: number,
hover: { ... },
show: boolean,
color: string,
width: number,
header: { ... },
show: boolean,
height: number,
minWidth: number,
align: 'left' | 'center' | 'right',
offsetX: number,
offsetY: number,
showValue: boolean,
formatter: Function,
style: { ... },
fontSize: string,
fontFamily: string,
fontWeight: number | string,
color: string,
background: string,
cssClass: string,
show: boolean | 'auto',
tooltip: { ... },
formatter: Function,
levels: ApexTreemapLevel[],
padding: number,
fill: string,
fillOpacity: number,
borderColor: string,
borderWidth: number,
borderRadius: number,
hover: { ... },
show: boolean,
color: string,
width: number,
header: { ... },
show: boolean,
height: number,
minWidth: number,
align: 'left' | 'center' | 'right',
offsetX: number,
offsetY: number,
showValue: boolean,
formatter: Function,
style: { ... },
fontSize: string,
fontFamily: string,
fontWeight: number | string,
color: string,
background: string,
cssClass: string,
zoom: { ... },
enabled: boolean,
breadcrumb: ApexBreadcrumb,
show: boolean,
position: 'top-left' | 'top-right',
separator: string,
rootLabel: string,
offsetX: number,
offsetY: number,
formatter: Function,
seriesTitle: { ... },
show: boolean,
offsetY: number,
offsetX: number,
borderColor: string,
borderWidth: number,
borderRadius: number,
style: { ... },
background: string,
color: string,
fontSize: string,
fontFamily: string,
fontWeight: number | string,
cssClass: string,
padding: { ... },
left: number,
right: number,
top: number,
bottom: number,
unit: { ... },
layout: 'grouped' | 'packed' | ...,
positions: string | ApexUnitLayout,
transition: 'group' | 'flow' | 'identity',
shape: 'circle' | 'square' | ...,
pictogram: { ... },
mark: Array,
fit: 'contain' | 'width' | 'height',
scale: number,
padding: number,
fallback: 'circle' | 'square',
image: { ... },
src: string,
width: number,
height: number,
tint: boolean,
size: number | 'auto',
columns: { ... },
size: 'inherit' | 'auto' | number,
grid: { ... },
columns: number,
total: number,
fillFrom: 'bottom' | 'top',
split: boolean,
tileColumns: number,
max: number,
trackColor: string,
scatter: { ... },
y: 'lanes' | 'value',
spread: 'swarm' | 'jitter',
orientation: 'horizontal' | 'vertical',
tickAmount: number,
xMin: number,
xMax: number,
xTitle: string,
xFormatter: Function,
yTickAmount: number,
yMin: number,
yMax: number,
yTitle: string,
yFormatter: Function,
sizeField: string,
sizeRange: [number, number],
laneLabelWidth: number,
gridlines: boolean,
sizeByValue: { ... },
enabled: boolean,
maxRadius: number | 'auto',
minRadius: number,
scale: 'area' | 'linear',
spacing: number,
gather: { ... },
motion: 'auto' | 'spring' | 'tween',
spring: 'crisp' | 'gentle' | 'snappy',
easing: 'outCubic' | 'inOutCubic' | ...,
overshoot: number,
enter: 'burst' | 'fade' | 'rise',
arc: { ... },
startAngle: number,
endAngle: number,
innerRadiusRatio: number,
rows: number | 'auto',
borderRadius: number,
unitValue: number,
maxUnits: number,
sortByGroup: boolean,
clusterLabels: { ... },
show: boolean,
position: 'top' | 'bottom',
curved: boolean,
fontSize: string,
fontFamily: string,
fontWeight: number | string,
color: string,
offsetY: number,
formatter: Function,
external: { ... },
show: boolean,
connector: { ... },
show: boolean,
width: number,
color: string,
gap: number,
length: number,
offsetX: number,
offsetY: number,
tooltip: { ... },
formatter: Function,
pie: { ... },
startAngle: number,
endAngle: number,
customScale: number,
offsetX: number,
offsetY: number,
expandOnClick: boolean,
expandOffset: number,
hoverOutline: { ... },
show: boolean,
size: number,
gap: number,
opacity: number,
color: string,
borderRadius: number,
spacing: number,
dataLabels: { ... },
offset: number,
minAngleToShowLabel: number,
external: { ... },
show: boolean,
offsetX: number,
offsetY: number,
fontSize: string,
fontFamily: string,
fontWeight: string | number,
color: string,
formatter: Function,
connector: { ... },
show: boolean,
width: number,
color: string,
length: number,
gap: number,
donut: { ... },
size: string,
background: string,
labels: { ... },
show: boolean,
name: { ... },
show: boolean,
fontSize: string,
fontFamily: string,
fontWeight: string | number,
color: string,
offsetY: number,
formatter: Function,
value: { ... },
show: boolean,
fontSize: string,
fontFamily: string,
fontWeight: string | number,
color: string,
offsetY: number,
formatter: Function,
total: { ... },
show: boolean,
showAlways: boolean,
fontFamily: string,
fontWeight: string | number,
fontSize: string,
label: string,
color: string,
formatter: Function,
polarArea: { ... },
rings: { ... },
strokeWidth: number,
strokeColor: string,
spokes: { ... },
strokeWidth: number,
connectorColors: string | string[],
icicle: { ... },
direction: 'down' | 'up' | ...,
levelSize: 'equal' | number | string,
maxDepth: 'auto' | number,
spacing: number,
borderRadius: number,
leaf: 'extend' | 'stop',
partition: 'normalize' | 'strict',
sort: 'none' | 'value' | 'name',
tint: number,
zoomOnClick: boolean,
zoomType: 'value' | 'both',
dataLabels: { ... },
show: boolean,
minSizeToShow: number,
align: 'left' | 'center' | 'right',
rotate: 'auto' | 'always' | 'never',
showValue: boolean,
style: { ... },
fontSize: string,
fontFamily: string,
fontWeight: string | number,
colors: string[],
sunburst: { ... },
offsetX: number,
offsetY: number,
startAngle: number,
endAngle: number,
innerSize: string,
borderRadius: number,
spacing: number,
leaf: 'extend' | 'stop',
partition: 'normalize' | 'strict',
tint: number,
zoomOnClick: boolean,
dataLabels: { ... },
show: boolean,
minAngleToShow: number,
style: { ... },
fontSize: string,
fontFamily: string,
fontWeight: string | number,
colors: string[],
radar: { ... },
size: number,
offsetX: number,
offsetY: number,
polygons: { ... },
strokeColors: string | string[],
strokeWidth: Array,
connectorColors: string | string[],
fill: { ... },
colors: string[],
radialBar: { ... },
inverseOrder: boolean,
startAngle: number,
endAngle: number,
offsetX: number,
offsetY: number,
shape: 'arc' | 'needle',
min: number,
max: number,
bands: Array,
bandsStyle: { ... },
strokeWidth: string,
gap: number,
hideTrackWhenPresent: boolean,
linecap: 'butt' | 'round' | 'square',
ticks: { ... },
show: boolean,
major: { ... },
count: number,
length: number,
width: number,
color: string,
placement: 'inside' | 'outside',
minor: { ... },
count: number,
length: number,
width: number,
color: string,
placement: 'inside' | 'outside',
labels: { ... },
show: boolean,
offset: number,
fontSize: string,
fontFamily: string,
fontWeight: string | number,
color: string,
formatter: Function,
needle: { ... },
color: string,
length: string | number,
baseWidth: number,
tipWidth: number,
showValueArc: boolean,
offsetY: number,
animation: { ... },
enabled: boolean,
duration: number,
easing: string,
hollow: { ... },
margin: number,
size: string,
background: string,
image: string,
imageWidth: number,
imageHeight: number,
imageOffsetX: number,
imageOffsetY: number,
imageClipped: boolean,
position: 'front' | 'back',
stroke: string,
strokeWidth: number,
strokeDasharray: string | number,
dropShadow: ApexDropShadow,
enabled: boolean,
top: number,
left: number,
blur: number,
opacity: number,
color: string | string[],
track: { ... },
show: boolean,
startAngle: number,
endAngle: number,
background: string | string[],
strokeWidth: string,
opacity: number,
margin: number,
dropShadow: ApexDropShadow,
enabled: boolean,
top: number,
left: number,
blur: number,
opacity: number,
color: string | string[],
dataLabels: { ... },
show: boolean,
name: { ... },
show: boolean,
fontFamily: string,
fontWeight: string | number,
fontSize: string,
color: string,
offsetY: number,
formatter: Function,
value: { ... },
show: boolean,
fontFamily: string,
fontSize: string,
fontWeight: string | number,
color: string,
offsetY: number,
formatter: Function,
total: { ... },
show: boolean,
label: string,
color: string,
fontFamily: string,
fontWeight: string | number,
fontSize: string,
formatter: Function,
barLabels: { ... },
enabled: boolean,
offsetX: number,
offsetY: number,
useSeriesColors: boolean,
fontFamily: string,
fontWeight: string | number,
fontSize: string,
formatter: Function,
onClick: Function,
xaxis: ApexXAxis,
type: 'category' | 'datetime' | ...,
categories: Array<string | number> | ...,
overwriteCategories: number[] | string[] | ...,
offsetX: number,
offsetY: number,
sorted: boolean,
labels: { ... },
show: boolean,
rotate: number,
rotateAlways: boolean,
hideOverlappingLabels: boolean,
showDuplicates: boolean,
trim: boolean,
minHeight: number,
maxHeight: number,
style: { ... },
colors: string | string[],
fontSize: string,
fontFamily: string,
fontWeight: string | number,
cssClass: string,
offsetX: number,
offsetY: number,
format: string,
formatter: Function,
datetimeUTC: boolean,
datetimeFormatter: { ... },
year: string,
month: string,
day: string,
hour: string,
minute: string,
second: string,
group: { ... },
groups: Array,
title: string,
cols: number,
style: { ... },
colors: string | string[],
fontSize: string,
fontFamily: string,
fontWeight: string | number,
cssClass: string,
axisBorder: { ... },
show: boolean,
color: string,
width: string | number,
height: number,
offsetX: number,
offsetY: number,
axisTicks: { ... },
show: boolean,
borderType: 'solid' | 'dotted' | 'dashed',
color: string,
height: number,
offsetX: number,
offsetY: number,
tickPlacement: string,
tickAmount: number | 'dataPoints',
stepSize: number,
min: number | string | Date,
max: number | string | Date,
range: number,
floating: boolean,
decimalsInFloat: number,
position: string,
title: { ... },
text: string,
offsetX: number,
offsetY: number,
style: { ... },
color: string,
fontFamily: string,
fontWeight: string | number,
fontSize: string,
cssClass: string,
crosshairs: { ... },
show: boolean,
width: number | string,
position: string,
opacity: number,
stroke: { ... },
color: string,
width: number,
dashArray: number,
fill: { ... },
type: string,
color: string,
gradient: { ... },
colorFrom: string,
colorTo: string,
stops: number[],
opacityFrom: number,
opacityTo: number,
dropShadow: ApexDropShadow,
enabled: boolean,
top: number,
left: number,
blur: number,
opacity: number,
color: string | string[],
tooltip: { ... },
enabled: boolean,
offsetY: number,
formatter: Function,
style: { ... },
fontSize: string,
fontFamily: string,
yaxis: Array,
colors: Array,
fill: ApexFill,
colors: string[],
opacity: number | number[],
type: string | string[],
gradient: { ... },
shade: string,
type: string,
shadeIntensity: number,
gradientToColors: string[],
inverseColors: boolean,
opacityFrom: number | number[],
opacityTo: number | number[],
stops: number[],
colorStops: Array,
image: { ... },
src: string | string[],
width: number,
height: number,
pattern: { ... },
style: string | string[],
width: number,
height: number,
strokeWidth: number,
legend: ApexLegend,
show: boolean,
showForSingleSeries: boolean,
showForNullSeries: boolean,
showForZeroSeries: boolean,
floating: boolean,
inverseOrder: boolean,
position: 'top' | 'right' | ...,
horizontalAlign: 'left' | 'center' | 'right',
fontSize: string,
fontFamily: string,
fontWeight: string | number,
width: number,
height: number,
offsetX: number,
offsetY: number,
formatter: Function,
tooltipHoverFormatter: Function,
customLegendItems: string[],
clusterGroupedSeries: boolean,
clusterGroupedSeriesOrientation: 'vertical' | 'horizontal',
labels: { ... },
colors: string | string[],
useSeriesColors: boolean,
markers: { ... },
size: number,
strokeWidth: number,
fillColors: string[],
shape: ApexMarkerShape,
offsetX: number,
offsetY: number,
customHTML: Function,
onClick: Function,
itemMargin: { ... },
horizontal: number,
vertical: number,
onItemClick: { ... },
toggleDataSeries: boolean,
onItemHover: { ... },
highlightDataSeries: boolean,
breadcrumb: false | object,
animation: { ... },
enabled: boolean,
zoomFromPoint: boolean,
speed: number,
marker: { ... },
show: boolean,
size: number,
shape: 'circle' | 'square' | 'rect',
fillColor: string,
strokeColor: string,
onDrillDown: Function,
loading: false | object,
cache: boolean,
}

Opt-in navigation that lets a reader click a data point to open a child level, with a breadcrumb trail and back navigation. Works with bar, column, line, area, pie, donut, treemap, and heatmap. See the Drilldown guide for a walkthrough.

Requires the Drilldown feature, which is not in the default bundle since 8.0: add import 'apexcharts/features/drilldown' next to import ApexCharts from 'apexcharts', or add dist/features/drilldown.js on a script-tag page. The full bundle (apexcharts/full, apexcharts.full.min.js) has it. Without it, a chart with drilldown.enabled warns once in the console and draws its root level, which does not navigate. A sunburst or icicle reads a drilldown.series block as plain data and needs no drilldown feature.

enabled

Default: false

Master switch. When false the feature stays inert even if it was imported.

series

Default: []

The child levels, each referenced by a data point's drilldown id. A level is an object shaped like this:

{
  id: 'mobile',            // matches a point's `drilldown` id
  name: 'Mobile by OS',    // breadcrumb label and single-series name
  data: [                  // single-series data (use this OR `series`)
    { x: 'iOS', y: 30, drilldown: 'mobile-ios' },
    { x: 'Android', y: 23 }
  ]
}

A level may also override the presentation applied while it is shown: chart (type, stacked, stackType), xaxis, yaxis, colors, plotOptions, fill, and legend.

id

drilldown.series.id

Unique id referenced by a data point's drilldown field.

name

drilldown.series.name

Display name used by the breadcrumb and as the single-series child series name.

data

drilldown.series.data

Child data points for a single-series level. Use this or series, not both.

series

drilldown.series.series

Full multi-series array for a grouped or stacked child level. Use this or data, not both.

onDrillDown

Default: undefined

Async resolver, called when a drillable point has no matching level in series. It receives a context object and returns a level, or a promise of one.

drilldown: {
  enabled: true,
  onDrillDown: async ({ id }) => {
    const res = await fetch(`/api/breakdown/${id}`)
    return { id, name: 'By region', data: await res.json() }
  }
}

A failed fetch is ordinary, not exceptional, so it never strands the view. On a throw, a rejection, or a resolved value without a data array, the chart stays exactly where it was, the breadcrumb is untouched, nothing is cached, and drillDownError fires. That last case previously no-opped in silence, which is indistinguishable from "the click did nothing".

A second click while one request is in flight is ignored rather than starting a second request.

loading

Overlay shown while an async level resolves. Set to false to suppress it entirely.

It is theme-aware, carries role="status" with aria-live="polite", and its spinner flattens to a pulse under prefers-reduced-motion.

show

Available Options:

  • true (default)
  • false

text

Optional caption beside the spinner. With none, the spinner shows alone and carries "Loading" as its accessible name, so the default ships no user-visible English for you to translate.

cache

Default: true

Cache levels resolved by onDrillDown, keyed by id, so drilling back down a branch does not re-fetch.

Clear it with clearDrilldownCache() when the underlying data changes.

Available Options:

  • true (default)
  • false

marker

The dot marking a drillable point on a line or area chart drawn without markers.

A bar, slice, tile or cell is already a visible, clickable mark; a line point is not. With markers.size: 0 there is no element to click at all, and even with markers shown, core marks line and area markers no-pointer-events so the shared tooltip can track the plot. So the feature supplies a markers.discrete entry per drillable point: only those points carry a dot, and it reads as "these open".

Set show: false to supply your own affordance. Omitted colours inherit the series marker defaults.

show

drilldown.marker.show
Default: true

Available Options:

  • true (default)
  • false

size

drilldown.marker.size
Default: 6

Radius in pixels.

shape

drilldown.marker.shape
Default: undefined

Available Options:

  • 'circle'
  • 'square'
  • 'rect'

Defaults to the series marker shape.

fillColor

drilldown.marker.fillColor
Default: undefined

Defaults to the series colour.

strokeColor

drilldown.marker.strokeColor
Default: '#fff'

Colour of the ring around the dot.

animation

Controls the drill transition.

enabled

drilldown.animation.enabled
Default: true

Gate whether the drill transition animates at all.

zoomFromPoint

drilldown.animation.zoomFromPoint
Default: false

Anchor the transition at the clicked point so the child unfolds outward from it (and settles back on drill-up) instead of re-rendering. A gentle scale layered on the SVG.

speed

drilldown.animation.speed
Default: 260

Base transition duration in milliseconds, used only when zoomFromPoint is true.