drilldown

Configuration Structure

drilldown: {
enabled: boolean,
series: ApexDrilldownSeries[],
id: string | number,
name: string,
data: any[],
series: ApexAxisChartSeries,
name: string,
type: string,
color: string,
group: string,
hidden: boolean,
zIndex: number,
parsing: ApexParsing,
x: string,
y: string | string[],
z: string,
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',
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: { ... },
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[],
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,
max: number,
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. Requires the tree-shakeable Drilldown feature (import 'apexcharts/features/drilldown'; already included in the full build). Works with bar, column, line, area, pie, donut, treemap, and heatmap. See the Drilldown guide for a walkthrough.

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.

onDrillDown

Default: undefined

Async resolver called when a drillable point has no matching entry in series. Receives { point, seriesIndex, dataPointIndex } and returns (or resolves to) the child level to open, so levels can be fetched on demand. If it throws or rejects, the drillDownError event fires and the chart stays put.