Premium options reference

Options of the premium chart types (plotOptions.sankey, .gantt, .radialColumn, ...).

View .md Agent setup

Options and runtime commands of the west-coast-charts/premium chart types. For the concepts behind them see Premium and licensing and the Radial column guide.

Every premium type also takes plotOptions.<type>.plugins (see The premium plugin object).

Contents

plotOptions.sankey

Chart type sankey (WccSankeyOptions).

Option Type Description
plotOptions.sankey.plugins WccPremiumPluginRef[] Plugins of this chart: plugin objects, registered names, or [nameOrPlugin, options].
plotOptions.sankey.plugins[].name string Plugin id (state key and warnings); not set uses plugin-&lt;index&gt;.
plotOptions.sankey.plugins[].defaults object Default options of the plugin; the [nameOrPlugin, options] form overrides them.
plotOptions.sankey.plugins[].reserve() (p: any): { top?: number; right?: number; bottom?: number; left?: number } | void (p) =&gt; { top, right, bottom, left }: space in px taken from the plot before layout.
plotOptions.sankey.plugins[].afterRender() (p: any): void (p): called after each render; draw into p.layer() and bind events with p.on().
plotOptions.sankey.plugins[].event() (name: string, e: Event | null, payload: any, p: any): boolean | void (name, e, payload, p): called for every chart event; returning false cancels a cancelable one.
plotOptions.sankey.plugins[].tooltip() (content: any, p: any): any (content, p) =&gt; content: changes the tooltip content (rows, footer, …).
plotOptions.sankey.plugins[].describe() (p: any): string (p) =&gt; string appended to the screen-reader summary.
plotOptions.sankey.plugins[].destroy() (p: any): void (p): called before each redraw and on destroy.
plotOptions.sankey.orientation 'horizontal' | 'vertical' 'horizontal' lets the flow run left to right; 'vertical' runs it top to bottom. Default: 'horizontal'.
plotOptions.sankey.nodeWidth number Node bar thickness in px. Default: 12.
plotOptions.sankey.nodePadding number Gap between nodes of a column in px. Default: 16.
plotOptions.sankey.nodeAlign 'left' | 'right' | 'center' | 'justify' Column of nodes without outgoing links: 'justify' moves them to the last column, 'left' keeps them at their depth, 'right' aligns everything to the end, 'center' puts sources next to their first target. Default: 'justify'.
plotOptions.sankey.nodeBorderRadius number Corner radius of the node bars in px. Default: 3.
plotOptions.sankey.minNodeHeight number Smallest node length in px, so tiny values stay visible. Default: 2.
plotOptions.sankey.iterations number Relaxation passes that reduce link crossings (ignored with sort: 'input'). Default: 32.
plotOptions.sankey.sort 'auto' | 'input' 'input' keeps the node order of the data; 'auto' reorders nodes to reduce crossings. Default: 'auto'.
plotOptions.sankey.cycles 'error' | 'break' | 'circular' Data with a cycle: 'error' shows an error and emits an error event, 'break' drops the closing links (with a console warning), 'circular' draws them as return loops. Default: 'error'.
plotOptions.sankey.nodes object[] Node definitions that set names, colours or fixed columns. Default: [].
plotOptions.sankey.nodes[].id string | number Node id used in the links.
plotOptions.sankey.nodes[].name string Shown name; not set uses the id.
plotOptions.sankey.nodes[].color WccColor Node colour.
plotOptions.sankey.nodes[].column number Fixed column (0 is the first).
plotOptions.sankey.draggable boolean Lets the user drag nodes across the flow; positions survive updates. Default: false.
plotOptions.sankey.rtl 'auto' | boolean Mirrored layout, the flow runs right to left; 'auto' follows the CSS direction. Default: 'auto'.
plotOptions.sankey.link object Link ribbons.
plotOptions.sankey.link.colorMode 'source' | 'target' | 'gradient' Ribbon colour from the 'source' node, the 'target' node, or a 'gradient' between both. Default: 'gradient'.
plotOptions.sankey.link.color WccColor One colour for all ribbons (a link's own color still wins).
plotOptions.sankey.link.opacity number Ribbon opacity; not set uses 0.34 (0.5 in dark mode).
plotOptions.sankey.link.curvature number Bend of the ribbons, 0 straight. Default: 0.5.
plotOptions.sankey.link.minWidth number Thinnest ribbon in px. Default: 1.
plotOptions.sankey.link.circularWidth number Width factor (0.1 to 1) of return loops with cycles: 'circular'. Default: 0.4.
plotOptions.sankey.link.particles object Animated dots flowing along the links.
plotOptions.sankey.link.particles.enabled boolean Turns the particles on (not with motion off). Default: false.
plotOptions.sankey.link.particles.density number Factor on the number of particles. Default: 1.
plotOptions.sankey.link.particles.speed number Factor on the particle speed. Default: 1.
plotOptions.sankey.link.particles.size number Particle radius in px. Default: 2.2.
plotOptions.sankey.link.particles.color WccColor Particle colour; not set uses the target node colour (white in dark mode).
plotOptions.sankey.alluvial object Alluvial mode: data points { from, to, value, stage } link the same categories across stages.
plotOptions.sankey.alluvial.enabled boolean Turns alluvial mode on (input node order, a gradient link colour becomes source). Default: false.
plotOptions.sankey.alluvial.stages string[] Stage labels; not set numbers the stages from 1. Default: [].
plotOptions.sankey.alluvial.showStageLabels boolean Shows the stage labels over the columns. Default: true.
plotOptions.sankey.playback object Animated playback of several data frames.
plotOptions.sankey.playback.frames object[] Frames { label, data }; two or more start the playback. Default: [].
plotOptions.sankey.playback.frames[].label string Frame label (series name, playback button and playbackFrame event).
plotOptions.sankey.playback.frames[].data any[] Link data of the frame.
plotOptions.sankey.playback.interval number Time per frame in ms (at least 300). Default: 2400.
plotOptions.sankey.playback.autoplay boolean Starts playing on render. Default: true.
plotOptions.sankey.playback.loop boolean Starts again after the last frame. Default: true.
plotOptions.sankey.playback.controls boolean Shows play and frame buttons. Default: true.
plotOptions.sankey.labels object Node labels.
plotOptions.sankey.labels.show boolean Shows the node labels. Default: true.
plotOptions.sankey.labels.position 'auto' | 'outside' 'outside' puts first-column labels on the outer side too; 'auto' places them next to the node, inside the flow. Default: 'auto'.
plotOptions.sankey.labels.showValue boolean Shows the node value under the name. Default: true.
plotOptions.sankey.labels.fontSize number | string Label font size; not set uses the theme font size.
plotOptions.sankey.labels.fontWeight number | string Label font weight. Default: 600.
plotOptions.sankey.labels.formatter WccCallback (name, { node, value, w }) =&gt; string for the label name.
plotOptions.sankey.labels.valueFormatter WccCallback (value, { node, w }) =&gt; string for values in labels and tooltips; not set uses tooltip.y.formatter or a number format.
plotOptions.sankey.drilldown WccPremiumDrilldown Drill-down into nodes.
plotOptions.sankey.drilldown.enabled boolean false switches drill-down off. Default: true.
plotOptions.sankey.drilldown.breadcrumb boolean Shows the breadcrumb of the opened levels. Default: true.
plotOptions.sankey.drilldown.rootLabel string Breadcrumb label of the top level; not set uses 'Overview' (sankey) or the map name.
plotOptions.sankey.drilldown.load (item: any, info: any) => any load(item, info) returns a level or a Promise of one
plotOptions.sankey.drilldown.drillable (string | number)[] | ((item: any) => boolean) ids that can be opened, or a test; default: every item when only load is set
plotOptions.sankey.drilldown.nodes object Levels per node id: link data, { data, label, nodes }, or true to load the level via load.

plotOptions.chord

Chart type chord (WccChordOptions).

Option Type Description
plotOptions.chord.plugins WccPremiumPluginRef[] Plugins of this chart: plugin objects, registered names, or [nameOrPlugin, options].
plotOptions.chord.plugins[].name string Plugin id (state key and warnings); not set uses plugin-&lt;index&gt;.
plotOptions.chord.plugins[].defaults object Default options of the plugin; the [nameOrPlugin, options] form overrides them.
plotOptions.chord.plugins[].reserve() (p: any): { top?: number; right?: number; bottom?: number; left?: number } | void (p) =&gt; { top, right, bottom, left }: space in px taken from the plot before layout.
plotOptions.chord.plugins[].afterRender() (p: any): void (p): called after each render; draw into p.layer() and bind events with p.on().
plotOptions.chord.plugins[].event() (name: string, e: Event | null, payload: any, p: any): boolean | void (name, e, payload, p): called for every chart event; returning false cancels a cancelable one.
plotOptions.chord.plugins[].tooltip() (content: any, p: any): any (content, p) =&gt; content: changes the tooltip content (rows, footer, …).
plotOptions.chord.plugins[].describe() (p: any): string (p) =&gt; string appended to the screen-reader summary.
plotOptions.chord.plugins[].destroy() (p: any): void (p): called before each redraw and on destroy.
plotOptions.chord.matrix number[][] | null Flow matrix instead of series data: rows are the sources, columns the targets (names from labels). Default: null.
plotOptions.chord.labels string[] Group names for the matrix rows and columns; missing names become Group 1, Group 2, …. Default: [].
plotOptions.chord.directed 'auto' | boolean true sizes each arc by what the group sends plus what it receives; false by what it sends only (each flow is drawn once); 'auto' uses false when every flow has an equal reverse flow. Default: 'auto'.
plotOptions.chord.padAngle number Gap between neighbouring groups in radians. Default: 0.03.
plotOptions.chord.sort 'none' | 'asc' | 'desc' Group order around the circle: data order ('none'), or by size 'asc' / 'desc'. Default: 'none'.
plotOptions.chord.ringWidth number Thickness of the group ring in px (4 px up to a third of the radius). Default: 12.
plotOptions.chord.ribbon object Flow ribbons.
plotOptions.chord.ribbon.opacity number Ribbon opacity; not set uses 0.5 (0.58 in dark mode).
plotOptions.chord.ribbon.colorMode 'source' | 'target' | 'gradient' Ribbon colour from the 'source' group, the 'target' group, or a 'gradient' between both. Default: 'source'.
plotOptions.chord.ribbon.padding number Gap between the ring and the ribbon ends in px. Default: 2.
plotOptions.chord.groups object[] Group definitions that set names and colours. Default: [].
plotOptions.chord.groups[].id string | number Group id used in the data.
plotOptions.chord.groups[].name string Shown name; not set uses the id.
plotOptions.chord.groups[].color WccColor Group colour.
plotOptions.chord.ticks object Value ticks along the outside of the ring.
plotOptions.chord.ticks.show boolean Shows the ticks. Default: false.
plotOptions.chord.ticks.step 'auto' | number Value step of the minor ticks; 'auto' keeps them about 9 px apart. Default: 'auto'.
plotOptions.chord.ticks.labelStep 'auto' | number Value step of the labelled ticks; 'auto' uses a 1/2/5/10 multiple of step about 44 px apart. Default: 'auto'.
plotOptions.chord.ticks.formatter WccCallback (value, { w }) =&gt; string for tick labels; not set uses a compact number.
plotOptions.chord.dataLabels object Group labels outside the ring.
plotOptions.chord.dataLabels.show boolean Shows the group labels. Default: true.
plotOptions.chord.dataLabels.showValue boolean Shows the group size under the name. Default: true.
plotOptions.chord.dataLabels.formatter WccCallback (name, { node, w }) =&gt; string for the label name.

plotOptions.gantt

Chart type gantt (WccGanttOptions).

Option Type Description
plotOptions.gantt.plugins WccPremiumPluginRef[] Plugins of this chart: plugin objects, registered names, or [nameOrPlugin, options].
plotOptions.gantt.plugins[].name string Plugin id (state key and warnings); not set uses plugin-&lt;index&gt;.
plotOptions.gantt.plugins[].defaults object Default options of the plugin; the [nameOrPlugin, options] form overrides them.
plotOptions.gantt.plugins[].reserve() (p: any): { top?: number; right?: number; bottom?: number; left?: number } | void (p) =&gt; { top, right, bottom, left }: space in px taken from the plot before layout.
plotOptions.gantt.plugins[].afterRender() (p: any): void (p): called after each render; draw into p.layer() and bind events with p.on().
plotOptions.gantt.plugins[].event() (name: string, e: Event | null, payload: any, p: any): boolean | void (name, e, payload, p): called for every chart event; returning false cancels a cancelable one.
plotOptions.gantt.plugins[].tooltip() (content: any, p: any): any (content, p) =&gt; content: changes the tooltip content (rows, footer, …).
plotOptions.gantt.plugins[].describe() (p: any): string (p) =&gt; string appended to the screen-reader summary.
plotOptions.gantt.plugins[].destroy() (p: any): void (p): called before each redraw and on destroy.
plotOptions.gantt.rowHeight number Height of one task row in px. Default: 36.
plotOptions.gantt.barHeight number fraction of the row
plotOptions.gantt.barRadius number Corner radius of the task bars in px. Default: 5.
plotOptions.gantt.sort 'input' | 'start' | 'end' | 'name' 'input' keeps the series order; 'start' sorts the tasks of each group by start, then end. 'end' sorts by end time; 'name' sorts by locale-aware task name. Equal keys retain input order. Group order is unchanged. Default: 'input'.
plotOptions.gantt.grid object Task table to the left of the timeline (right in RTL).
plotOptions.gantt.grid.show boolean false hides the table and gives the timeline the full width. Default: true.
plotOptions.gantt.grid.width number Table width in px, capped at 42 % of the plot width. Default: 260.
plotOptions.gantt.grid.columns Array<'name' | 'start' | 'end' | 'duration' | 'progress' | 'assignee' | 'wbs' | 'ring' | WccGanttColumnDef> Columns of the table in order. Default: ['name', 'start', 'duration'].
plotOptions.gantt.grid.headers { [column in 'name' | 'start' | 'end' | 'duration' | 'progress' | 'assignee' | 'wbs' | 'ring']?: string } Header text per column. Default: { name: 'Task', start: 'Start', end: 'End', duration: 'Days', progress: '%', assignee: 'Owner', wbs: 'WBS', ring: '' }.
plotOptions.gantt.groups object Group rows (one group per series name).
plotOptions.gantt.groups.show boolean Draws a header row per group when there are several groups or the group is named. Default: true.
plotOptions.gantt.groups.collapsible boolean Lets a click on a group row collapse or expand its tasks. Default: true.
plotOptions.gantt.labels object Task name labels on the bars.
plotOptions.gantt.labels.show boolean false draws the bars without name labels. Default: true.
plotOptions.gantt.labels.position 'right' | 'left' | 'inside' Preferred side of the label: 'right' or 'left' outside the bar, or 'inside' when it fits (falls back outside on narrow bars). Default: 'right'.
plotOptions.gantt.labels.formatter WccCallback (name, { task, w }) =&gt; string returns the label text; not set shows the name (plus the assignee when no assignee column is shown).
plotOptions.gantt.progress object Progress fill of the bars.
plotOptions.gantt.progress.show boolean Fills each bar to its progress and adds the percentage to the label. Default: true.
plotOptions.gantt.dependencies object Dependency links between tasks.
plotOptions.gantt.dependencies.show boolean false hides the links (and link editing). Default: true.
plotOptions.gantt.dependencies.color WccColor Link colour; not set uses a muted theme colour (critical links use the critical-path colour).
plotOptions.gantt.dependencies.radius number Corner radius of the link elbows in px. Default: 6.
plotOptions.gantt.dependencies.arrowSize number Size of the arrow head in px. Default: 5.
plotOptions.gantt.dependencies.lagLabels boolean Writes a link's lag or lead (e.g. "+2d") on the link. Default: true.
plotOptions.gantt.dependencies.violations boolean Dashes and marks links whose successor starts before the dependency allows. Default: false.
plotOptions.gantt.dependencies.edit boolean Lets the user draw links from the handle at a bar's end and delete a selected link. Default: false.
plotOptions.gantt.today object Today marker.
plotOptions.gantt.today.show boolean Draws a vertical line at today. Default: true.
plotOptions.gantt.today.date WccDate Date used as "today"; not set uses the current time.
plotOptions.gantt.today.label string Text of the today marker and its control button. Default: 'Today'.
plotOptions.gantt.weekends object Weekend shading (used when no working calendar is set).
plotOptions.gantt.weekends.show boolean Shades Saturdays and Sundays once a day is at least 10 px wide. Default: true.
plotOptions.gantt.calendar object Working calendar: durations, moves and resizes count working days. Not set: calendar days.
plotOptions.gantt.calendar.workingDays number[] Working weekdays, 0 = Sunday ... 6 = Saturday. Default: [1, 2, 3, 4, 5].
plotOptions.gantt.calendar.holidays object[] Non-working dates: a date, { date, name } or a range { from, to, name }.
plotOptions.gantt.calendar.holidays[].date WccDate Date of the holiday.
plotOptions.gantt.calendar.holidays[].name string Name shown for the holiday.
plotOptions.gantt.calendar.holidays[].from WccDate First day of the holiday range.
plotOptions.gantt.calendar.holidays[].to WccDate Last day of the holiday range (inclusive).
plotOptions.gantt.calendar.shade boolean false stops shading non-working days. Default: true.
plotOptions.gantt.criticalPath object Critical path highlighting.
plotOptions.gantt.criticalPath.show boolean Outlines the tasks without float (a delay moves the project end) and the links between them. Default: false.
plotOptions.gantt.criticalPath.color WccColor Colour of the critical path; not set uses the theme's negative colour.
plotOptions.gantt.baselines object Planned (baseline) bars.
plotOptions.gantt.baselines.show boolean Draws a task's baseline dates as a thin bar under it and adds it to the legend. Default: true.
plotOptions.gantt.zoom object Zoom of the time axis.
plotOptions.gantt.zoom.enabled boolean false disables zooming. Default: true.
plotOptions.gantt.zoom.wheel 'ctrl' | boolean | string false turns off Ctrl/Cmd + wheel zoom; any other value keeps it (a plain wheel always scrolls). Default: 'ctrl'.
plotOptions.gantt.zoom.minDays number Smallest visible span in days. Default: 3.
plotOptions.gantt.zoom.maxDays number Largest visible span in days. Default: 3650.
plotOptions.gantt.drag object Moving and resizing tasks with the pointer.
plotOptions.gantt.drag.enabled boolean Lets the user move bars (and enables the editing options). Default: false.
plotOptions.gantt.drag.resize boolean Adds resize handles at the bar ends while dragging is on. Default: true.
plotOptions.gantt.drag.snap 'day' | 'hour' | false Snap of moved dates: 'day', 'hour', a step in ms, or false for none. Default: 'day'.
plotOptions.gantt.drag.draw boolean Lets the user draw new tasks on empty rows and shows the "+ Add task" row. Default: false.
plotOptions.gantt.edit object Editing behaviour (needs drag.enabled).
plotOptions.gantt.edit.undo boolean Keeps an undo / redo history of edits. Default: true.
plotOptions.gantt.edit.keyboard boolean Allows keyboard edits of the focused task. Default: true.
plotOptions.gantt.edit.remove boolean Lets Delete / Backspace remove the focused task. Default: true.
plotOptions.gantt.edit.rename boolean Lets a double click on a task name rename it inline. Default: true.
plotOptions.gantt.edit.newName string Name given to a newly created task. Default: 'New task'.
plotOptions.gantt.edit.newDays number Length in days of a task created with the add button or keyboard. Default: 3.
plotOptions.gantt.edit.addLabel string Text of the add row (shown after "+ "). Default: 'Add task'.
plotOptions.gantt.range object Fixed time range of the timeline.
plotOptions.gantt.range.min WccDate Start of the timeline; not set fits the tasks.
plotOptions.gantt.range.max WccDate End of the timeline; not set fits the tasks (with room for labels).
plotOptions.gantt.boundary object Project boundary: dashed start / deadline lines; tasks outside it are flagged.
plotOptions.gantt.boundary.start WccDate Project start date.
plotOptions.gantt.boundary.end WccDate Project end date (deadline).
plotOptions.gantt.boundary.startLabel string Label of the start line. Default: 'Start'.
plotOptions.gantt.boundary.endLabel string Label of the deadline line. Default: 'Deadline'.
plotOptions.gantt.boundary.shade boolean false stops shading the time outside the boundary. Default: true.
plotOptions.gantt.annotations object[] Timeline annotations: a marker line, a range (x2), or a note on a task's bar (task). Default: [].
plotOptions.gantt.annotations[].x WccDate Date of the marker, or start of the range.
plotOptions.gantt.annotations[].x2 WccDate End of the range; set draws a shaded band.
plotOptions.gantt.annotations[].label string Text of the chip or note.
plotOptions.gantt.annotations[].color WccColor Colour; not set cycles through theme colours.
plotOptions.gantt.annotations[].dash boolean false draws the marker solid; any other value keeps it dashed.
plotOptions.gantt.annotations[].task string | number Task id: draws the annotation as a note on that task's row.
plotOptions.gantt.persist object | string Saves the view to localStorage under this key (a string) or { key, ... }; not set saves nothing.
plotOptions.gantt.persist.key string localStorage key.
plotOptions.gantt.persist.view boolean Saves the visible time range. Default: true.
plotOptions.gantt.persist.collapsed boolean Saves the collapsed groups. Default: true.
plotOptions.gantt.persist.selection boolean Saves the selected tasks. Default: false.
plotOptions.gantt.controls object On-chart buttons (today, zoom).
plotOptions.gantt.controls.show boolean false hides the control buttons. Default: true.
plotOptions.gantt.selection object Task selection.
plotOptions.gantt.selection.enabled boolean Lets a click select a task. Default: true.
plotOptions.gantt.selection.multiple boolean Lets Ctrl/Cmd/Shift + click add to the selection. Default: true.
plotOptions.gantt.crosshair object Time crosshair.
plotOptions.gantt.crosshair.show boolean Draws a vertical line with the date under the pointer. Default: false.
plotOptions.gantt.rtl 'auto' | boolean Mirrored layout (table on the right, time runs right to left); 'auto' follows the CSS direction. Default: 'auto'.

plotOptions.tree

Chart type tree (WccTreeOptions).

Option Type Description
plotOptions.tree.plugins WccPremiumPluginRef[] Plugins of this chart: plugin objects, registered names, or [nameOrPlugin, options].
plotOptions.tree.plugins[].name string Plugin id (state key and warnings); not set uses plugin-&lt;index&gt;.
plotOptions.tree.plugins[].defaults object Default options of the plugin; the [nameOrPlugin, options] form overrides them.
plotOptions.tree.plugins[].reserve() (p: any): { top?: number; right?: number; bottom?: number; left?: number } | void (p) =&gt; { top, right, bottom, left }: space in px taken from the plot before layout.
plotOptions.tree.plugins[].afterRender() (p: any): void (p): called after each render; draw into p.layer() and bind events with p.on().
plotOptions.tree.plugins[].event() (name: string, e: Event | null, payload: any, p: any): boolean | void (name, e, payload, p): called for every chart event; returning false cancels a cancelable one.
plotOptions.tree.plugins[].tooltip() (content: any, p: any): any (content, p) =&gt; content: changes the tooltip content (rows, footer, …).
plotOptions.tree.plugins[].describe() (p: any): string (p) =&gt; string appended to the screen-reader summary.
plotOptions.tree.plugins[].destroy() (p: any): void (p): called before each redraw and on destroy.
plotOptions.tree.layout 'tidy' | 'dendrogram' 'tidy' places parents over their children; 'dendrogram' puts all leaves on the last level. Default: 'tidy'.
plotOptions.tree.orientation 'vertical' | 'horizontal' | 'radial' | 'top-to-bottom' | 'bottom-to-top' | 'left-to-right' | 'right-to-left' Growth direction; 'radial' places levels on rings. The aliases 'top-to-bottom', 'bottom-to-top', 'left-to-right' and 'right-to-left' also set direction. Default: 'vertical'.
plotOptions.tree.direction 'forward' | 'reverse' 'reverse' puts the root at the bottom (vertical) or right (horizontal). Default: 'forward'.
plotOptions.tree.rtl 'auto' | boolean Mirrored layout (first child on the right, horizontal trees grow leftwards, card text right-aligned); 'auto' follows the CSS direction. Default: 'auto'.
plotOptions.tree.node object Node drawing.
plotOptions.tree.node.template 'auto' | 'card' | 'compact' | 'dot' 'card', 'compact' or 'dot'; 'auto' uses dots for radial trees and dendrograms, otherwise cards. Default: 'auto'.
plotOptions.tree.node.width number Card width in px. Default: 196.
plotOptions.tree.node.height number Card height in px. Default: 60.
plotOptions.tree.node.radius number Card corner radius in px. Default: 10.
plotOptions.tree.node.avatar boolean Shows the avatar circle on cards at least 44 px high. Default: true.
plotOptions.tree.node.dotSize number Dot radius of the dot template in px. Default: 5.
plotOptions.tree.node.stackLeaves 'auto' | boolean Stacks the leaf children of a vertical card tree in a column; 'auto' keeps a plain row when that fits the plot better, false never stacks. Default: 'auto'.
plotOptions.tree.node.formatter WccCallback returns text fields only, never HTML
plotOptions.tree.node.size (data: any, info: { node: any; depth: number; children: any[] }) => { width?: number; height?: number } (data, { node, depth, children }) =&gt; { width, height } sets a node's own card size (a size in the data also works).
plotOptions.tree.node.autoHeight boolean Wraps long titles and subtitles (up to maxLines) and grows the card to fit. Default: false.
plotOptions.tree.node.maxLines number Most lines of a wrapped text with autoHeight. Default: 3.
plotOptions.tree.wrappers object[] Frames around a node and its visible descendants (cards only, not radial); a node's data wrapper: true | { label, color } also adds one. Default: [].
plotOptions.tree.wrappers[].id string | number Id of the framed node.
plotOptions.tree.wrappers[].label string Label of the frame.
plotOptions.tree.wrappers[].color WccColor Frame colour.
plotOptions.tree.wrappers[].dashed boolean Dashes the frame outline. Default: false.
plotOptions.tree.spacing object Gaps of the layout in px.
plotOptions.tree.spacing.sibling number Gap between neighbouring cards. Default: 16.
plotOptions.tree.spacing.level number Gap between levels. Default: 56.
plotOptions.tree.spacing.dot number Distance between neighbouring dots. Default: 22.
plotOptions.tree.radial object Radial layout.
plotOptions.tree.radial.startAngle number Start angle in degrees clockwise from 12 o'clock; not set is fitted to the plot.
plotOptions.tree.radial.stretch 'auto' | boolean false keeps a true circle; 'auto' stretches it (up to 1.45 x) along the plot's long side. Default: 'auto'.
plotOptions.tree.links object Parent-child links.
plotOptions.tree.links.style 'auto' | 'elbow' | 'curve' | 'straight' 'elbow', 'curve' or 'straight'; 'auto' uses curves for dot trees (not dendrograms), otherwise elbows. Default: 'auto'.
plotOptions.tree.links.color WccColor Link colour; not set uses a muted tone (a branch tint for dot trees).
plotOptions.tree.links.width number Link width in px. Default: 1.25.
plotOptions.tree.colorBy 'branch' | 'depth' | 'none' Node tint: one colour per top-level 'branch', per 'depth', or the accent for 'none'. Default: 'branch'.
plotOptions.tree.collapse object Folding of subtrees.
plotOptions.tree.collapse.enabled boolean Lets the user fold and unfold subtrees. Default: true.
plotOptions.tree.collapse.initialDepth number Folds nodes at this depth and deeper on the first render; not set opens everything (nodes with collapsed: true start folded).
plotOptions.tree.zoom WccZoomOptions Zoom and pan (scale 0.05 to 3 by default).
plotOptions.tree.zoom.enabled boolean Enables zoom and pan of the view. Default: true.
plotOptions.tree.zoom.wheel 'ctrl' | boolean | string Wheel zoom: 'ctrl' zooms only while Ctrl or Cmd is held, true on every wheel event, false never. Default: 'ctrl'.
plotOptions.tree.zoom.min number Smallest zoom factor. Default: 0.25 for the network, 0.05 for the tree.
plotOptions.tree.zoom.max number Largest zoom factor. Default: 8 for the network, 3 for the tree.
plotOptions.tree.zoom.fitMin number Smallest scale of the initial fit; not set uses the scale where the smallest text is readableFont px.
plotOptions.tree.zoom.fitMax number Largest scale of the initial fit. Default: 1.5.
plotOptions.tree.zoom.readableFont number Text size in px the initial view keeps readable. Default: 11.
plotOptions.tree.zoom.overviewFont number | false A tree too big for the readable scale still opens whole while its smallest text stays at least this size; false starts readable at the root instead. Default: 8.
plotOptions.tree.controls object On-chart zoom buttons.
plotOptions.tree.controls.show boolean false hides the zoom buttons. Default: true.
plotOptions.tree.lod object Level of detail.
plotOptions.tree.lod.threshold number Below this zoom scale card texts are hidden and cards drawn as plain shapes. Default: 0.42.
plotOptions.tree.lazy object Lazy children for nodes with hasChildren: true and no children.
plotOptions.tree.lazy.load (node: any, info: { w: any; id: any; name: string; depth: number }) => any (node, { w, id, name, depth }) =&gt; children[] | Promise, called when such a node is first expanded.
plotOptions.tree.lazy.loadingText string Text of the placeholder while loading. Default: 'Loading…'.
plotOptions.tree.lazy.errorText string Text when the load fails (a click retries). Default: 'Could not load · retry'.

plotOptions.stock

Chart type stock (WccStockOptions).

Option Type Description
plotOptions.stock.plugins WccPremiumPluginRef[] Plugins of this chart: plugin objects, registered names, or [nameOrPlugin, options].
plotOptions.stock.plugins[].name string Plugin id (state key and warnings); not set uses plugin-&lt;index&gt;.
plotOptions.stock.plugins[].defaults object Default options of the plugin; the [nameOrPlugin, options] form overrides them.
plotOptions.stock.plugins[].reserve() (p: any): { top?: number; right?: number; bottom?: number; left?: number } | void (p) =&gt; { top, right, bottom, left }: space in px taken from the plot before layout.
plotOptions.stock.plugins[].afterRender() (p: any): void (p): called after each render; draw into p.layer() and bind events with p.on().
plotOptions.stock.plugins[].event() (name: string, e: Event | null, payload: any, p: any): boolean | void (name, e, payload, p): called for every chart event; returning false cancels a cancelable one.
plotOptions.stock.plugins[].tooltip() (content: any, p: any): any (content, p) =&gt; content: changes the tooltip content (rows, footer, …).
plotOptions.stock.plugins[].describe() (p: any): string (p) =&gt; string appended to the screen-reader summary.
plotOptions.stock.plugins[].destroy() (p: any): void (p): called before each redraw and on destroy.
plotOptions.stock.enabled boolean with chart.type 'candlestick': draw it with the stock renderer
plotOptions.stock.style 'candlestick' | 'ohlc' | 'line' | 'area' Price display: candles, OHLC bars, a close line or a close area. Default: 'candlestick'.
plotOptions.stock.colors object Colours of rising and falling candles.
plotOptions.stock.colors.up WccColor Rising candle colour; not set uses the theme's positive colour.
plotOptions.stock.colors.down WccColor Falling candle colour; not set uses the theme's negative colour.
plotOptions.stock.volume object Volume bars at the bottom of the price pane (drawn when the data has volume).
plotOptions.stock.volume.show boolean false hides the volume bars. Default: true.
plotOptions.stock.volume.height number Share of the price pane used by volume (0.05 to 0.5). Default: 0.2.
plotOptions.stock.overlays object[] Price overlays: SMA, EMA or Bollinger bands. Default: [].
plotOptions.stock.overlays[].type 'sma' | 'ema' | 'bollinger' Overlay kind ('bb' is accepted for Bollinger).
plotOptions.stock.overlays[].period number Period in candles. Default: 20.
plotOptions.stock.overlays[].k number Bollinger band width in standard deviations. Default: 2.
plotOptions.stock.overlays[].color WccColor Line colour; not set cycles through theme colours.
plotOptions.stock.indicators object[] Indicator panes under the price pane: RSI or MACD. Default: [].
plotOptions.stock.indicators[].type 'rsi' Indicator kind.
plotOptions.stock.indicators[].period number RSI period in candles. Default: 14.
plotOptions.stock.indicators[].type 'macd' Indicator kind.
plotOptions.stock.indicators[].fast number MACD fast EMA period. Default: 12.
plotOptions.stock.indicators[].slow number MACD slow EMA period. Default: 26.
plotOptions.stock.indicators[].signal number MACD signal EMA period. Default: 9.
plotOptions.stock.rangeSelector object Range buttons above the chart.
plotOptions.stock.rangeSelector.show boolean false hides the range buttons. Default: true.
plotOptions.stock.rangeSelector.buttons object[] Buttons, each spanning months, days, the year to date (ytd) or all. Default: 1M, 3M, 6M, YTD, 1Y, All.
plotOptions.stock.rangeSelector.buttons[].label string Button text; also the value of selected.
plotOptions.stock.rangeSelector.buttons[].months number Months back from the last candle.
plotOptions.stock.rangeSelector.buttons[].days number Days back from the last candle.
plotOptions.stock.rangeSelector.buttons[].ytd boolean Spans from 1 January of the last candle's year.
plotOptions.stock.rangeSelector.buttons[].all boolean Spans all candles.
plotOptions.stock.rangeSelector.selected string Label of the initial range; not set picks 6M (over 400 days of data), 3M (over 120 days) or All.
plotOptions.stock.navigator object Overview strip with a draggable window under the chart.
plotOptions.stock.navigator.show boolean false hides the navigator. Default: true.
plotOptions.stock.navigator.height number Navigator height in px. Default: 46.
plotOptions.stock.crosshair object Crosshair across all panes.
plotOptions.stock.crosshair.show boolean false hides the crosshair lines. Default: true.
plotOptions.stock.readout object OHLC and overlay values written at the top of the price pane.
plotOptions.stock.readout.show boolean false hides the readout and its reserved space. Default: true.
plotOptions.stock.realtime object Behaviour when candles are added.
plotOptions.stock.realtime.follow boolean Keeps the view at the newest candle when new ones arrive while the view is at the end. Default: true.
plotOptions.stock.zoom object Zoom and pan of the time axis.
plotOptions.stock.zoom.enabled boolean false disables wheel zoom and drag panning. Default: true.
plotOptions.stock.zoom.wheel 'ctrl' | boolean | string 'ctrl' zooms while Ctrl or Cmd is held, true on every wheel event; other values never. Default: 'ctrl'.
plotOptions.stock.zoom.minCandles number Fewest candles in view (at least 2). Default: 8.
plotOptions.stock.yaxis object Price axis.
plotOptions.stock.yaxis.decimals number Decimals of prices; not set uses 0 from 1000, 2 from 1, otherwise 4.
plotOptions.stock.yaxis.formatter WccCallback (price, { w }) =&gt; string for axis labels and readouts.
plotOptions.stock.yaxis.type 'linear' | 'log' | 'percent' 'log' uses a logarithmic scale, 'percent' shows the change against the first visible close. Default: 'linear'.
plotOptions.stock.timeframe 'day' | 'week' | 'month' Candle size; 'week' and 'month' aggregate the input candles. Default: 'day'.
plotOptions.stock.priceLines object[] Horizontal price levels (orders, targets, stops) with an axis label. Default: [].
plotOptions.stock.priceLines[].y number Price of the line.
plotOptions.stock.priceLines[].label string Text chip at the left end of the line.
plotOptions.stock.priceLines[].color WccColor Line colour; not set cycles through theme colours.
plotOptions.stock.priceLines[].dash boolean false draws the line solid; otherwise it is dashed.
plotOptions.stock.priceLines[].width number Line width in px. Default: 1.2.
plotOptions.stock.markers object[] Event flags (earnings, dividends, splits) on the candle of their date. Default: [].
plotOptions.stock.markers[].x WccDate Date of the event.
plotOptions.stock.markers[].label string One or two characters inside the flag. Default: '•'.
plotOptions.stock.markers[].text string Hover text of the flag (after the date).
plotOptions.stock.markers[].color WccColor Flag colour; not set cycles through theme colours.
plotOptions.stock.markers[].position 'below' | 'above' 'below' the candle's low or 'above' its high. Default: 'below'.
plotOptions.stock.drawings object Drawing tools for the user (opt-in).
plotOptions.stock.drawings.enabled boolean Turns the drawing tools on. Default: false.
plotOptions.stock.drawings.tools ('trendline' | 'ray' | 'fib' | 'rect')[] Tools in the toolbar. Default: ['trendline', 'ray', 'fib', 'rect'].
plotOptions.stock.drawings.items WccStockDrawing[] Initial drawings. Default: [].
plotOptions.stock.drawings.items[].id string | number Id of the drawing; not set gets 'd1', 'd2', ...
plotOptions.stock.drawings.items[].type 'trendline' | 'ray' | 'fib' | 'rect' | string 'trendline' (2 points), 'ray' (horizontal, 1 point), 'fib' (retracement, 2 points) or 'rect' (2 corners); aliases such as 'line' or 'box' are accepted.
plotOptions.stock.drawings.items[].points object[] Anchors as { t, y } or [t, y] (time, price); invalid drawings are skipped.
plotOptions.stock.drawings.items[].points[].t WccDate Time of the anchor.
plotOptions.stock.drawings.items[].points[].y number Price of the anchor.
plotOptions.stock.drawings.items[].color WccColor Colour; not set uses drawings.colors or the palette.
plotOptions.stock.drawings.items[].label string Text written along the drawing.
plotOptions.stock.drawings.items[].width number Line width in px. Default: 1.6.
plotOptions.stock.drawings.items[].extend boolean | 'left' | 'right' | 'both' Trend line: extends to the plot edge (true or 'both' both ways, 'left', 'right'); fib: false ends the levels at the second point.
plotOptions.stock.drawings.items[].dash boolean | string true dashes the line; a string is used as SVG dash array; not set draws it solid.
plotOptions.stock.drawings.items[].fill string Fill of a rectangle; not set uses a faint tint of the colour.
plotOptions.stock.drawings.items[].levels number[] Fibonacci levels as fractions. Default: [0, 0.236, 0.382, 0.5, 0.618, 0.786, 1].
plotOptions.stock.drawings.items[].locked boolean true stops the user from moving or editing the drawing.
plotOptions.stock.drawings.items[].labelPosition 'above' | 'below' Side of the trend line label. Default: 'above'.
plotOptions.stock.drawings.toolbar boolean false hides the tool buttons (drawings stay visible). Default: true.
plotOptions.stock.drawings.magnet boolean Snaps anchors to the open, high, low or close within 10 px of the pointer. Default: true.
plotOptions.stock.drawings.keepTool boolean Keeps the tool active after a drawing is finished. Default: false.
plotOptions.stock.drawings.storageKey string localStorage key; set saves and restores the drawings.
plotOptions.stock.drawings.palette 'muted' | 'vivid' 'muted' uses the accent for trend lines and a muted tone for the rest; 'vivid' gives every tool its own colour. Default: 'muted'.
plotOptions.stock.drawings.colors object Colour per tool; wins over the palette.
plotOptions.stock.drawings.colors.trendline WccColor Trend line colour.
plotOptions.stock.drawings.colors.ray WccColor Horizontal ray colour.
plotOptions.stock.drawings.colors.fib WccColor Fibonacci retracement colour.
plotOptions.stock.drawings.colors.rect WccColor Rectangle colour.

plotOptions.map

Chart type map (WccMapOptions).

Option Type Description
plotOptions.map.plugins WccPremiumPluginRef[] Plugins of this chart: plugin objects, registered names, or [nameOrPlugin, options].
plotOptions.map.plugins[].name string Plugin id (state key and warnings); not set uses plugin-&lt;index&gt;.
plotOptions.map.plugins[].defaults object Default options of the plugin; the [nameOrPlugin, options] form overrides them.
plotOptions.map.plugins[].reserve() (p: any): { top?: number; right?: number; bottom?: number; left?: number } | void (p) =&gt; { top, right, bottom, left }: space in px taken from the plot before layout.
plotOptions.map.plugins[].afterRender() (p: any): void (p): called after each render; draw into p.layer() and bind events with p.on().
plotOptions.map.plugins[].event() (name: string, e: Event | null, payload: any, p: any): boolean | void (name, e, payload, p): called for every chart event; returning false cancels a cancelable one.
plotOptions.map.plugins[].tooltip() (content: any, p: any): any (content, p) =&gt; content: changes the tooltip content (rows, footer, …).
plotOptions.map.plugins[].describe() (p: any): string (p) =&gt; string appended to the screen-reader summary.
plotOptions.map.plugins[].destroy() (p: any): void (p): called before each redraw and on destroy.
plotOptions.map.map string | object a registered map name, or TopoJSON / GeoJSON
plotOptions.map.object string | null TopoJSON object name, when there are several
plotOptions.map.projection 'auto' | 'equalEarth' | 'mercator' | 'equirectangular' | 'albers' | 'albersUsa' | 'orthographic' Projection; 'auto' uses the map's own projection hint or 'equalEarth'. Default: 'auto'.
plotOptions.map.rotate [number, number] globe centre [lon, lat]
plotOptions.map.normalize object Per-unit choropleth values: value / by * per (e.g. per capita).
plotOptions.map.normalize.by string | ((item: any) => number) | null Denominator: a key of the data item or of the region's properties, or (item, { feature }) =&gt; number; not set: no normalisation.
plotOptions.map.normalize.per number Multiplier of the ratio (e.g. 100000 for "per 100k"). Default: 1.
plotOptions.map.normalize.label string | null Tooltip label of the raw total next to the normalised value. Default: 'Total'.
plotOptions.map.exclude string[] Region ids or names left out of the map (case-insensitive). Default: ['ATA'].
plotOptions.map.style 'fill' | 'dots' | 'tiles' Region drawing: 'fill' (shapes), 'dots' (a dot grid clipped to the land) or 'tiles' (one equal tile per region). Default: 'fill'.
plotOptions.map.dots object Dot grid of style: 'dots'.
plotOptions.map.dots.spacing number Distance between dot centres in px (at least 3). Default: 7.
plotOptions.map.dots.size number Dot diameter as a fraction of the spacing (0.2 to 1). Default: 0.72.
plotOptions.map.tiles object Tile cartogram of style: 'tiles'.
plotOptions.map.tiles.shape 'hex' | 'square' 'hex' or 'square' tiles. Default: 'hex'.
plotOptions.map.tiles.gap number Gap between tiles in px. Default: 2.5.
plotOptions.map.tiles.labels boolean | ((region: any) => string) false hides the tile labels; a function ({ id, name, value, properties }) =&gt; string sets them. Default: true (region id).
plotOptions.map.tiles.layout object | string Grid placement: a built-in layout name (e.g. 'us-states') or { id: [col, row] }; not set uses the built-in layout of the map.
plotOptions.map.sphere boolean Draws the globe outline with a faint 30° graticule behind equalEarth and equirectangular maps. Default: true.
plotOptions.map.colorScale object Colour scale of choropleth values.
plotOptions.map.colorScale.type 'linear' | 'log' | 'quantize' | 'diverging' 'linear', 'log', 'quantize' (stepped buckets) or 'diverging' (around mid); a diverging palette implies 'diverging'. Default: 'linear'.
plotOptions.map.colorScale.palette string Named palette: blue, green, teal, purple, orange, red, gray, heat, viridis, or diverging blue-red, green-purple, teal-orange; not set derives a ramp from the theme accent.
plotOptions.map.colorScale.reverse boolean Reverses the named palette. Default: false.
plotOptions.map.colorScale.colors string[] | null Own colour stops; win over palette.
plotOptions.map.colorScale.min number Lower end of the scale; not set uses the data minimum.
plotOptions.map.colorScale.max number Upper end of the scale; not set uses the data maximum.
plotOptions.map.colorScale.mid number Neutral value of a diverging scale. Default: 0.
plotOptions.map.colorScale.steps number Number of buckets of a quantize scale (2 to 12). Default: 5.
plotOptions.map.colorScale.ranges object[] | null Explicit value ranges, each with its own colour (and legend entry); win over the scale type.
plotOptions.map.colorScale.ranges[].from number Lowest value of the range (inclusive); not set: open below.
plotOptions.map.colorScale.ranges[].to number Highest value of the range (inclusive); not set: open above.
plotOptions.map.colorScale.ranges[].color WccColor Colour of the range; not set takes the next scale colour.
plotOptions.map.colorScale.ranges[].name string Legend name of the range.
plotOptions.map.colorScale.ranges[].pattern WccMapPattern Pattern drawn over the range's regions.
plotOptions.map.colorScale.ranges[].pattern.type string Pattern: 'hatch', 'hatch-reverse', 'cross', 'dots', 'grid', 'vertical' or 'horizontal'; other values draw no pattern.
plotOptions.map.colorScale.ranges[].pattern.color WccColor Ink of the lines or dots; not set uses a contrasting theme ink.
plotOptions.map.colorScale.ranges[].pattern.background WccColor Fill behind the pattern; not set uses the region colour.
plotOptions.map.colorScale.ranges[].pattern.size number Pattern cell in px (3 to 40). Default: 6, 7 for dots.
plotOptions.map.colorScale.ranges[].pattern.width number Line width or dot radius in px (0.3 to 10). Default: 1.1, 1.4 for dots.
plotOptions.map.colorScale.ranges[].pattern.angle number Rotation in degrees. Default: 45 for hatch, -45 for hatch-reverse, otherwise 0.
plotOptions.map.colorScale.nullColor WccColor | null Fill of regions without a value; not set uses a light theme grey.
plotOptions.map.colorScale.patterns boolean Adds automatic patterns to every bucket but the first (ranges and quantize scales), for print and colour-blind readers. Default: false.
plotOptions.map.borders object Region outlines.
plotOptions.map.borders.width number Outline width in px. Default: 0.6 (0.5 on dark themes).
plotOptions.map.borders.color WccColor | null Outline colour; not set uses the surface colour (none for dots).
plotOptions.map.bubble object Bubble layers sized by value.
plotOptions.map.bubble.minRadius number Smallest bubble radius in px. Default: 3.
plotOptions.map.bubble.maxRadius number Largest bubble radius in px. Default: 26.
plotOptions.map.bubble.opacity number Fill opacity of bubbles. Default: 0.62.
plotOptions.map.hexbin object Hexbin layers that bin points into hexagons.
plotOptions.map.hexbin.radius 'auto' | number Hexagon radius in px; 'auto' uses 1/60 of the map width (5 to 14 px). Default: 'auto'.
plotOptions.map.hexbin.scaleSize boolean Scales each hexagon by its count as well as colouring it. Default: true.
plotOptions.map.hexbin.colors string[] | null Colour stops of the count ramp; not set derives three stops from the layer colour.
plotOptions.map.arcs object Flow arc layers (from, to, value).
plotOptions.map.arcs.curvature number Bulge of the arcs relative to their length. Default: 0.28.
plotOptions.map.arcs.width [number, number] [min, max] stroke width in px, scaled by the square root of the value. Default: [1, 3.5].
plotOptions.map.arcs.flow boolean Animates a moving dash along each arc while animations are on. Default: true.
plotOptions.map.arcs.endpoints boolean Draws dots at both ends of each arc. Default: true.
plotOptions.map.markers object Fixed-size point markers.
plotOptions.map.markers.shape 'pin' | 'circle' | 'square' | 'diamond' | 'triangle' | 'star' Marker shape. Default: 'pin'.
plotOptions.map.markers.size number Marker size in px. Default: 24.
plotOptions.map.markers.labels boolean Writes the point name next to each marker (a layer or point setting wins). Default: false.
plotOptions.map.routes object Route layers through ordered stops.
plotOptions.map.routes.width number Line width in px (a layer or route setting wins). Default: 2.5.
plotOptions.map.routes.geodesic boolean Follows great circles between stops instead of straight lines. Default: true.
plotOptions.map.routes.stops boolean Draws a dot at each stop. Default: true.
plotOptions.map.routes.arrows boolean Adds direction arrows along the route. Default: true.
plotOptions.map.routes.labels boolean Writes the stop names. Default: false.
plotOptions.map.routes.dash number | string | null SVG dash array of the route line; not set draws it solid.
plotOptions.map.annotations object[] Callouts, free text and region notes, placed by region, at: [lon, lat] or lon/lat; kept at screen size while zooming. Default: [].
plotOptions.map.legend object Colour or size legend under the map.
plotOptions.map.legend.show boolean false hides the legend. Default: true.
plotOptions.map.legend.title string | null Legend title; not set uses the layer name.
plotOptions.map.fit 'auto' | 'data' | 'map' Framing: 'map' shows the whole map, 'data' frames the data, 'auto' frames point, arc and route layers but shows the whole map for choropleths. Default: 'auto'.
plotOptions.map.fitParts 'all' | 'largest' Geometry used only for data framing: all region polygons, or each region's largest polygon. Drawing retains every polygon. Default: 'all'.
plotOptions.map.zoom WccZoomOptions Zoom and pan (scale 1 to 16 by default).
plotOptions.map.zoom.enabled boolean Enables zoom and pan of the view. Default: true.
plotOptions.map.zoom.wheel 'ctrl' | boolean | string Wheel zoom: 'ctrl' zooms only while Ctrl or Cmd is held, true on every wheel event, false never. Default: 'ctrl'.
plotOptions.map.zoom.min number Smallest zoom factor. Default: 0.25 for the network, 0.05 for the tree.
plotOptions.map.zoom.max number Largest zoom factor. Default: 8 for the network, 3 for the tree.
plotOptions.map.zoom.toRegion boolean A double click on a region zooms to that region (instead of zooming in one step). Default: true.
plotOptions.map.controls object On-map zoom buttons.
plotOptions.map.controls.show boolean false hides the zoom buttons. Default: true.
plotOptions.map.formatter ((value: number) => string) | null (value) =&gt; string for values in tooltips and legend; not set uses tooltip.y.formatter or a compact number.
plotOptions.map.drilldown WccPremiumDrilldown Drill-down into regions.
plotOptions.map.drilldown.enabled boolean false switches drill-down off. Default: true.
plotOptions.map.drilldown.breadcrumb boolean Shows the breadcrumb of the opened levels. Default: true.
plotOptions.map.drilldown.rootLabel string Breadcrumb label of the top level; not set uses 'Overview' (sankey) or the map name.
plotOptions.map.drilldown.load (item: any, info: any) => any load(item, info) returns a level or a Promise of one
plotOptions.map.drilldown.drillable (string | number)[] | ((item: any) => boolean) ids that can be opened, or a test; default: every item when only load is set
plotOptions.map.drilldown.regions object Levels per region id: { map, series, label, colorScale }, or true to load the level via load.

plotOptions.marimekko

Chart type marimekko (WccMarimekkoOptions).

Option Type Description
plotOptions.marimekko.plugins WccPremiumPluginRef[] Plugins of this chart: plugin objects, registered names, or [nameOrPlugin, options].
plotOptions.marimekko.plugins[].name string Plugin id (state key and warnings); not set uses plugin-&lt;index&gt;.
plotOptions.marimekko.plugins[].defaults object Default options of the plugin; the [nameOrPlugin, options] form overrides them.
plotOptions.marimekko.plugins[].reserve() (p: any): { top?: number; right?: number; bottom?: number; left?: number } | void (p) =&gt; { top, right, bottom, left }: space in px taken from the plot before layout.
plotOptions.marimekko.plugins[].afterRender() (p: any): void (p): called after each render; draw into p.layer() and bind events with p.on().
plotOptions.marimekko.plugins[].event() (name: string, e: Event | null, payload: any, p: any): boolean | void (name, e, payload, p): called for every chart event; returning false cancels a cancelable one.
plotOptions.marimekko.plugins[].tooltip() (content: any, p: any): any (content, p) =&gt; content: changes the tooltip content (rows, footer, …).
plotOptions.marimekko.plugins[].describe() (p: any): string (p) =&gt; string appended to the screen-reader summary.
plotOptions.marimekko.plugins[].destroy() (p: any): void (p): called before each redraw and on destroy.
plotOptions.marimekko.gap number Gap between columns in px (0 to 12). Default: 2.
plotOptions.marimekko.radius number Corner radius of the cells in px (0 to 8). Default: 3.
plotOptions.marimekko.fill 'soft' | 'solid' 'soft' uses calmer tones of the palette for the large cells, 'solid' the palette as is (a series color is always kept). Default: 'soft'.
plotOptions.marimekko.widths 'total' | number[] Column widths: 'total' follows the column totals; an array sets explicit column weights. Default: 'total'.
plotOptions.marimekko.sort 'none' | 'asc' | 'desc' Column order: data order ('none'), or by column width 'asc' / 'desc'. Default: 'none'.
plotOptions.marimekko.dataLabels object Labels inside the cells.
plotOptions.marimekko.dataLabels.show boolean Shows the cell labels. Default: true.
plotOptions.marimekko.dataLabels.showName boolean Adds the series name to the cell label when it fits. Default: true.
plotOptions.marimekko.dataLabels.showPercent boolean Shows the cell's share of its column; false shows the cell value instead. Default: true.
plotOptions.marimekko.dataLabels.minWidth number Narrowest cell in px that gets a label. Default: 34.
plotOptions.marimekko.dataLabels.minHeight number Lowest cell in px that gets a label. Default: 18.
plotOptions.marimekko.dataLabels.outside boolean A last column too narrow for its labels gets them in a gutter right of the plot. Default: true.
plotOptions.marimekko.dataLabels.formatter WccCallback (share, { seriesIndex, category, value, w }) =&gt; string for the value text of a cell.
plotOptions.marimekko.columnLabels object Column names under the plot.
plotOptions.marimekko.columnLabels.show boolean Shows the column names. Default: true.
plotOptions.marimekko.columnLabels.showTotal boolean Adds the column total under the name. Default: true.
plotOptions.marimekko.columnLabels.showShare boolean Adds the column's share of the whole under the name. Default: true.
plotOptions.marimekko.columnLabels.wrap boolean Wraps a name that does not fit onto two lines at a word break. Default: true.
plotOptions.marimekko.columnLabels.abbreviate boolean Abbreviates a name that still does not fit (initials; the full name is the hover title). Default: true.
plotOptions.marimekko.columnLabels.abbreviations object Own abbreviations per column name, e.g. { 'North America': 'NA' }.
plotOptions.marimekko.yAxis object Percentage axis on the left.
plotOptions.marimekko.yAxis.show boolean Shows the 0 to 100 % axis. Default: true.
plotOptions.marimekko.legend object Series legend.
plotOptions.marimekko.legend.show boolean Shows the legend (with two or more series). Default: true.

plotOptions.network

Chart type network (WccNetworkOptions).

Option Type Description
plotOptions.network.plugins WccPremiumPluginRef[] Plugins of this chart: plugin objects, registered names, or [nameOrPlugin, options].
plotOptions.network.plugins[].name string Plugin id (state key and warnings); not set uses plugin-&lt;index&gt;.
plotOptions.network.plugins[].defaults object Default options of the plugin; the [nameOrPlugin, options] form overrides them.
plotOptions.network.plugins[].reserve() (p: any): { top?: number; right?: number; bottom?: number; left?: number } | void (p) =&gt; { top, right, bottom, left }: space in px taken from the plot before layout.
plotOptions.network.plugins[].afterRender() (p: any): void (p): called after each render; draw into p.layer() and bind events with p.on().
plotOptions.network.plugins[].event() (name: string, e: Event | null, payload: any, p: any): boolean | void (name, e, payload, p): called for every chart event; returning false cancels a cancelable one.
plotOptions.network.plugins[].tooltip() (content: any, p: any): any (content, p) =&gt; content: changes the tooltip content (rows, footer, …).
plotOptions.network.plugins[].describe() (p: any): string (p) =&gt; string appended to the screen-reader summary.
plotOptions.network.plugins[].destroy() (p: any): void (p): called before each redraw and on destroy.
plotOptions.network.renderer 'auto' | 'svg' | 'canvas' 'svg' or 'canvas'; 'auto' uses canvas from canvasThreshold nodes. Default: 'auto'.
plotOptions.network.canvasThreshold number Node count above which renderer: 'auto' switches to canvas. Default: 1200.
plotOptions.network.nodes object Node circles.
plotOptions.network.nodes.minRadius number Smallest node radius in px. Default: 4.
plotOptions.network.nodes.maxRadius number Largest node radius in px (graphs over 1000 nodes cap it at 8). Default: 16.
plotOptions.network.nodes.sizeBy 'auto' | 'value' | 'degree' | 'none' Node size from 'value', 'degree' (number of links) or 'none'; 'auto' uses value when a node has one, else degree. Default: 'auto'.
plotOptions.network.nodes.strokeWidth number Width of the ring around each node in px. Default: 1.5.
plotOptions.network.edges object Edge lines.
plotOptions.network.edges.width [number, number] [min, max] line width in px, scaled by edge weight. Default: [0.8, 3].
plotOptions.network.edges.opacity number Edge opacity; not set uses 0.3 (0.34 in dark mode, 0.16 over 1000 nodes).
plotOptions.network.edges.bundle boolean Bundles edges between groups through the group centres. Default: false.
plotOptions.network.edges.bundleStrength number How tightly bundled edges follow the group centres (0 to 1). Default: 0.85.
plotOptions.network.edges.curvature number Bend of the edges, 0 straight. Default: 0.
plotOptions.network.layout object Force layout.
plotOptions.network.layout.type 'force' | 'facet' | 'preset' 'force': the force simulation. 'facet': a deterministic projection on concentric regular polygon shells (core in the centre, groups as filled facet sectors, causal paths across; options under facet). Default: 'force'.
plotOptions.network.layout.linkDistance 'auto' | number Target edge length; 'auto' derives it from the node sizes. Default: 'auto'.
plotOptions.network.layout.charge 'auto' | number Repulsion between nodes; 'auto' derives it from the node sizes. Default: 'auto'.
plotOptions.network.layout.groupStrength number Pull of nodes towards their group centre (with two or more groups). Default: 0.1.
plotOptions.network.layout.iterations 'auto' | number Simulation steps; 'auto' runs until the layout has cooled down. Default: 'auto'.
plotOptions.network.layout.warmup 'auto' | number Steps computed before the first paint; 'auto' uses 40 from 600 nodes and 90 from 2000. Default: 'auto'.
plotOptions.network.groups object Node groups (group in the node data).
plotOptions.network.groups.show boolean false treats all nodes as one group: no group colours, clustering or legend. Default: true.
plotOptions.network.groups.hulls boolean Draws a soft rounded hull behind each group (svg renderer, two or more groups). Default: false.
plotOptions.network.labels object Node labels.
plotOptions.network.labels.show boolean Shows labels, biggest nodes first, without overlaps. Default: true.
plotOptions.network.labels.max number Most labels at the fit zoom (fewer in dense graphs, more when zoomed in). Default: 40.
plotOptions.network.labels.minZoom number Zoom from which small nodes get labels too. Default: 1.6.
plotOptions.network.labels.formatter WccCallback (name, { node, w }) =&gt; string for the label text.
plotOptions.network.labels.readability WccReadability Facet layout: treatment of labels over facets and shell lines (pill by default; full options with features/readability). Default: 'auto'.
plotOptions.network.labels.readability.mode 'none' | 'halo' | 'pill' | 'auto' | 'hide' 'auto' (default where on): nothing for labels off the marks, a contrasting text colour over one fill, a pill over mixed fills; 'hide' = skip labels that sit on marks
plotOptions.network.labels.readability.fallback 'pill' | 'halo' | 'hide' what 'auto' escalates to over mixed fills or when no text colour reaches minRatio. Default 'pill'
plotOptions.network.labels.readability.enabled boolean false switches the treatment off for this label kind
plotOptions.network.labels.readability.contrast boolean swap the text to light/dark when it misses minRatio against what is under it (any mode)
plotOptions.network.labels.readability.minRatio number WCAG 2 contrast ratio to reach. Default 4.5
plotOptions.network.labels.readability.light string text/backdrop colour pair used by contrast and 'auto' fills. Defaults '#ffffff' / '#111827'
plotOptions.network.labels.readability.dark string Dark colour of the pair. Default: '#111827'.
plotOptions.network.labels.readability.background 'auto' | string colour under the chart; 'auto' = chart.background, else the first opaque ancestor
plotOptions.network.labels.readability.halo object outline behind the glyphs; blur > 0 makes it a soft glow. Defaults width 3, color 'auto' (chart background), opacity 0.92
plotOptions.network.labels.readability.halo.width number Outline width in pixels. Default: 3.
plotOptions.network.labels.readability.halo.color 'auto' | string Outline colour; 'auto' uses the colour under the label or a contrasting one. Default: 'auto'.
plotOptions.network.labels.readability.halo.opacity number Outline opacity (0 to 1). Default: 0.92.
plotOptions.network.labels.readability.halo.blur number Blur in pixels; above 0 the outline becomes a soft glow. Default: 0.
plotOptions.network.labels.readability.pill object backdrop box. padding = [vertical, horizontal]; offset = [dx, dy] px. Defaults fill 'auto', opacity 0.9, radius 4, padding [1, 4]
plotOptions.network.labels.readability.pill.fill 'auto' | string Box colour; 'auto' uses the colour under the label or a contrasting one. Default: 'auto'.
plotOptions.network.labels.readability.pill.opacity number Box opacity (0 to 1). Default: 0.9.
plotOptions.network.labels.readability.pill.radius number Corner radius in pixels. Default: 4.
plotOptions.network.labels.readability.pill.padding number | [number, number] Space around the text in pixels: one number, or [vertical, horizontal]. Default: [1, 4].
plotOptions.network.labels.readability.pill.stroke string Outline colour of the box. Default: 'none'.
plotOptions.network.labels.readability.pill.strokeWidth number Outline width in pixels. Default: 1.
plotOptions.network.labels.readability.pill.offset [number, number] Shift of the box as [dx, dy] in pixels. Default: [0, 0].
plotOptions.network.labels.readability.shadow object | boolean drop shadow on the pill (on the text in halo mode)
plotOptions.network.labels.readability.shadow.dx number Horizontal shadow offset in pixels. Default: 0.
plotOptions.network.labels.readability.shadow.dy number Vertical shadow offset in pixels. Default: 1.
plotOptions.network.labels.readability.shadow.blur number Shadow blur in pixels. Default: 2.
plotOptions.network.labels.readability.shadow.color string Shadow colour. Default: '#000000'.
plotOptions.network.labels.readability.shadow.opacity number Shadow opacity (0 to 1). Default: 0.35.
plotOptions.network.labels.readability.raise boolean axis labels sitting on marks are moved above the series (default true)
plotOptions.network.labels.readability.each (info: WccReadabilityInfo) => WccReadability | null | undefined per label: return an override (or 'none') for this one label; called only when set
plotOptions.network.drag object Dragging nodes.
plotOptions.network.drag.enabled boolean Lets the user drag nodes. Default: true.
plotOptions.network.drag.pin boolean Keeps a dragged node where it was dropped. Default: false.
plotOptions.network.zoom WccZoomOptions Zoom and pan of the network view.
plotOptions.network.zoom.enabled boolean Enables zoom and pan of the view. Default: true.
plotOptions.network.zoom.wheel 'ctrl' | boolean | string Wheel zoom: 'ctrl' zooms only while Ctrl or Cmd is held, true on every wheel event, false never. Default: 'ctrl'.
plotOptions.network.zoom.min number Smallest zoom factor. Default: 0.25 for the network, 0.05 for the tree.
plotOptions.network.zoom.max number Largest zoom factor. Default: 8 for the network, 3 for the tree.
plotOptions.network.legend object Group legend.
plotOptions.network.legend.show boolean Shows the group legend (with two or more groups). Default: true.
plotOptions.network.controls object On-chart zoom buttons.
plotOptions.network.controls.show boolean false hides the zoom buttons. Default: true.
plotOptions.network.facet WccNetworkFacetOptions Facet layout (layout.type: 'facet'). Node data may carry level (0 = centre), severity ('critical' | 'warning' | 'info' | 'ok'), anomaly (true or a short text), badge, labelPriority (true: always labelled, like warnings) and keys. Label priority (any network layout): highlighted, then critical, then warning / anomaly / labelPriority – these labels are never dropped for the label budget or the zoom threshold. Edges causal: true; a series paths: [{ name, nodes, severity, color }].
plotOptions.network.facet.levels object[] | 'auto' Level names, centre first (['Core', 'Services', …] or { name, description }); 'auto' names them Core, Level 1, Level 2 … Default: 'auto'.
plotOptions.network.facet.levels[].name string
plotOptions.network.facet.levels[].description string
plotOptions.network.facet.core string[] Node ids of the core when no node has level: 0; not set uses the most connected node.
plotOptions.network.facet.sides 'auto' | number Polygon sides; 'auto' = the group count for 5–12 groups, twice it for 2–4, 6 for one group. Default: 'auto'.
plotOptions.network.facet.rotation number Turns the shells, degrees; 0 puts a vertex at 12 o'clock. Default: 0.
plotOptions.network.facet.sectors 'auto' | 'equal' | 'weighted' Sector size per group: 'equal', 'weighted' (by its most crowded shell) or 'auto'. Default: 'auto'.
plotOptions.network.facet.order 'crossings' | 'data' 'crossings' reorders nodes inside a facet (barycentric sweeps) to reduce crossings; 'data' keeps the data order. Default: 'crossings'.
plotOptions.network.facet.coreRadius number Level-1 radius as a fraction of the outer radius. Default: 0.24.
plotOptions.network.facet.bundle number Pull of plain edges towards the centre, 0 (straight) to 1; edges between two facets route through both facets' anchors. Default: 0.65.
plotOptions.network.facet.edges object Plain edge rendering in dense estates.
plotOptions.network.facet.edges.degreeAlpha boolean Fades edges of hubs: opacity × clamp(2 / √(max endpoint degree), 0.35, 1). Default: true.
plotOptions.network.facet.edges.lod boolean | 'auto' Level of detail for cross-facet edges, 'auto' from 300 nodes: at overview zoom they fade (ribbons stand for them); zoomed in, only those with an end in view are drawn (hover / highlight still show all of a node's links). Default: 'auto'.
plotOptions.network.facet.edges.lodZoom number Zoom factor from which the individual cross-facet edges come back. Default: 1.8.
plotOptions.network.facet.edges.ribbons boolean With lod at overview zoom: one ribbon per facet pair, width by its link count (title: A – B: n links). Default: true.
plotOptions.network.facet.shells object Shell polygons.
plotOptions.network.facet.shells.show boolean Draws the shell outlines. Default: true.
plotOptions.network.facet.shells.labels boolean Writes the level name on each shell. Default: true.
plotOptions.network.facet.shells.opacity 'auto' | number Outline opacity; 'auto' follows the theme. Default: 'auto'.
plotOptions.network.facet.facets object Filled facet sectors, one per group.
plotOptions.network.facet.facets.show boolean Draws the facets. Default: true.
plotOptions.network.facet.facets.opacity 'auto' | number Fill opacity; 'auto' = 0.07 light, 0.11 dark. Default: 'auto'.
plotOptions.network.facet.facets.labels boolean Writes the group names outside the outer shell. Default: true.
plotOptions.network.facet.paths object Causal edges and paths.
plotOptions.network.facet.paths.show boolean Draws causal edges and paths. Default: true.
plotOptions.network.facet.paths.width number Line width in px. Default: 2.
plotOptions.network.facet.paths.dash [number, number] Dash pattern [dash, gap] in px. Default: [6, 5].
plotOptions.network.facet.paths.curvature number Sideways bow of a hop (fraction of its length). Default: 0.22.
plotOptions.network.facet.paths.arrows boolean Arrow heads at the effect end. Default: true.
plotOptions.network.facet.paths.flow boolean Dashes flow from cause to effect (off under reduced motion). Default: true.
plotOptions.network.facet.markers object Severity / anomaly markers and badges.
plotOptions.network.facet.markers.show boolean Draws markers and badges. Default: true.
plotOptions.network.facet.markers.colors object Colours per severity; not set uses the theme's negative / warning / accent / positive.
plotOptions.network.facet.markers.colors.critical string
plotOptions.network.facet.markers.colors.warning string
plotOptions.network.facet.markers.colors.info string
plotOptions.network.facet.markers.colors.ok string
plotOptions.network.facet.legend object Level legend in the legend row above the plot (replaces the group legend; needs legend.show of the network too).
plotOptions.network.facet.legend.show boolean Shows the level legend. Default: true.
plotOptions.network.facet.legend.title string Leads the legend row (e.g. your word for "Levels").

Stock drawing items

plotOptions.stock.drawings.items[] and the stock drawing commands (WccStockDrawing).

Option Type Description
drawing.id string | number Id of the drawing; not set gets 'd1', 'd2', ...
drawing.type 'trendline' | 'ray' | 'fib' | 'rect' | string 'trendline' (2 points), 'ray' (horizontal, 1 point), 'fib' (retracement, 2 points) or 'rect' (2 corners); aliases such as 'line' or 'box' are accepted.
drawing.points object[] Anchors as { t, y } or [t, y] (time, price); invalid drawings are skipped.
drawing.points[].t WccDate Time of the anchor.
drawing.points[].y number Price of the anchor.
drawing.color WccColor Colour; not set uses drawings.colors or the palette.
drawing.label string Text written along the drawing.
drawing.width number Line width in px. Default: 1.6.
drawing.extend boolean | 'left' | 'right' | 'both' Trend line: extends to the plot edge (true or 'both' both ways, 'left', 'right'); fib: false ends the levels at the second point.
drawing.dash boolean | string true dashes the line; a string is used as SVG dash array; not set draws it solid.
drawing.fill string Fill of a rectangle; not set uses a faint tint of the colour.
drawing.levels number[] Fibonacci levels as fractions. Default: [0, 0.236, 0.382, 0.5, 0.618, 0.786, 1].
drawing.locked boolean true stops the user from moving or editing the drawing.
drawing.labelPosition 'above' | 'below' Side of the trend line label. Default: 'above'.

plotOptions.radialColumn

Chart type radialColumn (RadialColumnOptions).

Option Type Description
plotOptions.radialColumn.readabilityWarnings boolean Warn once if inner rings are thinner than 8 px or heat cells below 2 px per slot. No values/layers are removed. Default: true.
plotOptions.radialColumn.aggregate 'sum' | 'mean' | 'max' | 'min' | 'none' how the column values combine in the centre, the generated description, tooltip footers and the filter note. 'sum' (default) adds them into a Total — right for counts and amounts only. Use 'max' / 'min' for latencies and percentiles ('Highest p95 latency (ms): 412 (Matching · 20:00)'), 'mean' for rates, percentages and scores, 'none' to name no combined number at all.
plotOptions.radialColumn.link RadialColumnLink | RadialLinkMode links between inner layers and the column ring (a mode string or options)
plotOptions.radialColumn.link.mode 'none' | 'category' | 'angle' | 'map' | 'auto' auto (default): a datum's own link, else matching category names, else the angle span
plotOptions.radialColumn.link.map ((segment: RadialLinkSegment) => Array<number | string> | null | undefined) | Record<string, Array<number | string>> map mode: a function or an object keyed by 'A › B' path or name; values are category indices or names
plotOptions.radialColumn.link.interaction 'highlight' | 'filter' | 'both' highlight on hover, filter (cross-filter / values) on click, or both. Default 'highlight'
plotOptions.radialColumn.link.bidirectional boolean hovering a bar also lights its segments (default true)
plotOptions.radialColumn.link.align boolean segments span exactly the angle of their linked bars (default false)
plotOptions.radialColumn.link.indicator boolean bracket arc on the outer edge over the linked bars (default true)
plotOptions.radialColumn.link.unit string what a category is, for tooltips and announcements ('18 of 72 time slots'). Default 'categories'. Name the real unit: categories that combine several things (service × day) are 'service-days', not 'days'.
plotOptions.radialColumn.link.basis string how the categories are composed, appended in brackets ('18 of 140 service-days (10 services × 14 days)'). Default: none
plotOptions.radialColumn.encode RadialColumnEncode bind colour / delta / length to separate metrics
plotOptions.radialColumn.encode.angle string name of the angular dimension for the guide (default: xaxis.title.text or 'Category')
plotOptions.radialColumn.encode.length 'value' | string bar length: 'value' (default) or a datum field
plotOptions.radialColumn.encode.color RadialEncodeChannel | string bar colour = a separate metric
plotOptions.radialColumn.encode.color.field string Datum field of the metric (datum.meta[field] or datum[field]).
plotOptions.radialColumn.encode.color.values Array<number | null> One value per category instead of a field.
plotOptions.radialColumn.encode.color.name string legend / tooltip name (default: the field)
plotOptions.radialColumn.encode.color.unit string appended to values: '%' sticks, other units get a space
plotOptions.radialColumn.encode.color.decimals number Decimals of the shown values; not set uses 0 from 100, 1 from 10, else 2.
plotOptions.radialColumn.encode.color.format (value: number) => string (value) =&gt; string for the shown values (wins over decimals and unit).
plotOptions.radialColumn.encode.color.legend boolean false: no key in the strip under the ring (default true)
plotOptions.radialColumn.encode.color.show boolean false switches the channel off. Default: true.
plotOptions.radialColumn.encode.color.scale 'sequential' | 'diverging' 'sequential' (low to high) or 'diverging' around mid. Default: 'sequential'.
plotOptions.radialColumn.encode.color.domain number[] [lo, hi] or [lo, mid, hi]; default: data extent (diverging: symmetric around mid)
plotOptions.radialColumn.encode.color.mid number diverging centre (default 0)
plotOptions.radialColumn.encode.color.stops string[] Colour stops; not set uses ['#2dd4bf', '#facc15', '#f43f5e'] (diverging: blue, a neutral tone, orange).
plotOptions.radialColumn.encode.color.reverse boolean Reverses the colour stops. Default: false.
plotOptions.radialColumn.encode.delta RadialEncodeChannel | string change vs a previous period outside the bars
plotOptions.radialColumn.encode.delta.field string Datum field of the metric (datum.meta[field] or datum[field]).
plotOptions.radialColumn.encode.delta.values Array<number | null> One value per category instead of a field.
plotOptions.radialColumn.encode.delta.name string legend / tooltip name (default: the field)
plotOptions.radialColumn.encode.delta.unit string appended to values: '%' sticks, other units get a space
plotOptions.radialColumn.encode.delta.decimals number Decimals of the shown values; not set uses 0 from 100, 1 from 10, else 2.
plotOptions.radialColumn.encode.delta.format (value: number) => string (value) =&gt; string for the shown values (wins over decimals and unit).
plotOptions.radialColumn.encode.delta.legend boolean false: no key in the strip under the ring (default true)
plotOptions.radialColumn.encode.delta.show boolean false switches the channel off. Default: true.
plotOptions.radialColumn.encode.delta.style 'band' | 'ticks' | 'bars' band: thin coloured ring; ticks: marks at the bar tips; bars: signed mini bars (out = up, in = down)
plotOptions.radialColumn.encode.delta.colors object Colours of increases and decreases.
plotOptions.radialColumn.encode.delta.colors.up string Colour of increases. Default: '#22c55e'.
plotOptions.radialColumn.encode.delta.colors.down string Colour of decreases. Default: '#f43f5e'.
plotOptions.radialColumn.encode.delta.max number |value| of full intensity / length (default: largest |value|)
plotOptions.radialColumn.encode.guide object | boolean '?' button with a 'how to read' panel listing every bound channel
plotOptions.radialColumn.encode.guide.show boolean false hides the guide button. Default: true.
plotOptions.radialColumn.encode.guide.open boolean | 'always' start open (true: only when the chart is >= 560 px wide; 'always')
plotOptions.radialColumn.markers Array<{ at: number | string label?: string kind?: string color?: string shape?: 'dot' | 'diamond' }> rim marks (deploys, pipeline runs, incidents): a small glyph outside the bars at a slot, a tooltip row on that slot and a guide row
plotOptions.radialColumn.startAngle number degrees, 0 = 12 o'clock, clockwise; a partial range gives a gauge
plotOptions.radialColumn.endAngle number End of the range in degrees (same convention as startAngle). Default: 360.
plotOptions.radialColumn.innerRadius 'auto' | number | string base radius of the bars: 'auto', px, '40%' or a fraction of the outer radius
plotOptions.radialColumn.barPadding 'auto' | number gap between neighbouring slots: 'auto' or a fraction of the slot (0..0.9)
plotOptions.radialColumn.groupPadding number gap between the bars of one slot when grouped (fraction)
plotOptions.radialColumn.stacked boolean stack series outward (falls back to chart.stacked)
plotOptions.radialColumn.stackGap number Gap between stacked segments in px. Default: 1.
plotOptions.radialColumn.rounded boolean rounded bar ends
plotOptions.radialColumn.fill object Bar colours.
plotOptions.radialColumn.fill.type 'auto' | 'spectrum' | 'series' | 'value' auto: spectrum for one uncoloured series, else series colours
plotOptions.radialColumn.fill.stops string[] gradient stops (spectrum by angle, value by magnitude)
plotOptions.radialColumn.fill.ranges object[] type 'value': fixed colours for value ranges (inclusive); values outside every range use the stops
plotOptions.radialColumn.fill.ranges[].from number Lowest value of the range (inclusive).
plotOptions.radialColumn.fill.ranges[].to number Highest value of the range (inclusive).
plotOptions.radialColumn.fill.ranges[].color string Colour of bars in the range.
plotOptions.radialColumn.fill.fade number inner fade of the bars, 0..1 (0 = off)
plotOptions.radialColumn.track object Background track behind the bars.
plotOptions.radialColumn.track.show boolean Shows the track. Default: false.
plotOptions.radialColumn.track.color string Track colour; not set uses a faint text tone.
plotOptions.radialColumn.baseline object Zero ring.
plotOptions.radialColumn.baseline.show boolean Draws the ring at value 0. Default: true.
plotOptions.radialColumn.valueAxis object Value scale of the bars.
plotOptions.radialColumn.valueAxis.show boolean false hides the grid rings and value labels. Default: true.
plotOptions.radialColumn.valueAxis.min number Fixed lower end; not set uses the data.
plotOptions.radialColumn.valueAxis.max number Fixed upper end; not set uses the data.
plotOptions.radialColumn.valueAxis.tickAmount number Target number of tick steps. Default: 4.
plotOptions.radialColumn.valueAxis.nice boolean round free ends to the tightest whole tick step (3-6 ticks); false = data extent. Default true
plotOptions.radialColumn.valueAxis.rings boolean Draws the grid rings at the ticks (the value labels sit on them). Default: true.
plotOptions.radialColumn.valueAxis.labels object Tick labels of the value scale.
plotOptions.radialColumn.valueAxis.labels.show boolean Shows the tick labels. Default: true.
plotOptions.radialColumn.valueAxis.labels.formatter (value: number) => string (value, { w }) =&gt; string; not set uses a compact number.
plotOptions.radialColumn.valueAxis.labels.readability RadialReadability labels that sit on bars: 'auto' (default) = untouched off the bars, contrasting colour over one fill, pill over mixed fills; 'none' = off. Layered over chart.readability
plotOptions.radialColumn.valueAxis.labels.readability.mode 'none' | 'halo' | 'pill' | 'auto' | 'hide' 'auto' (default where on): nothing for labels off the marks, a contrasting text colour over one fill, a pill over mixed fills; 'hide' = skip labels that sit on marks
plotOptions.radialColumn.valueAxis.labels.readability.fallback 'pill' | 'halo' | 'hide' what 'auto' escalates to over mixed fills or when no text colour reaches minRatio. Default 'pill'
plotOptions.radialColumn.valueAxis.labels.readability.enabled boolean false switches the treatment off for this label kind
plotOptions.radialColumn.valueAxis.labels.readability.contrast boolean swap the text to light/dark when it misses minRatio against what is under it (any mode)
plotOptions.radialColumn.valueAxis.labels.readability.minRatio number WCAG 2 contrast ratio to reach. Default 4.5
plotOptions.radialColumn.valueAxis.labels.readability.light string text/backdrop colour pair used by contrast and 'auto' fills. Defaults '#ffffff' / '#111827'
plotOptions.radialColumn.valueAxis.labels.readability.dark string Dark colour of the pair. Default: '#111827'.
plotOptions.radialColumn.valueAxis.labels.readability.background 'auto' | string colour under the chart; 'auto' = chart.background, else the first opaque ancestor
plotOptions.radialColumn.valueAxis.labels.readability.halo object outline behind the glyphs; blur > 0 makes it a soft glow. Defaults width 3, color 'auto' (chart background), opacity 0.92
plotOptions.radialColumn.valueAxis.labels.readability.halo.width number Outline width in pixels. Default: 3.
plotOptions.radialColumn.valueAxis.labels.readability.halo.color 'auto' | string Outline colour; 'auto' uses the colour under the label or a contrasting one. Default: 'auto'.
plotOptions.radialColumn.valueAxis.labels.readability.halo.opacity number Outline opacity (0 to 1). Default: 0.92.
plotOptions.radialColumn.valueAxis.labels.readability.halo.blur number Blur in pixels; above 0 the outline becomes a soft glow. Default: 0.
plotOptions.radialColumn.valueAxis.labels.readability.pill object backdrop box. padding = [vertical, horizontal]; offset = [dx, dy] px. Defaults fill 'auto', opacity 0.9, radius 4, padding [1, 4]
plotOptions.radialColumn.valueAxis.labels.readability.pill.fill 'auto' | string Box colour; 'auto' uses the colour under the label or a contrasting one. Default: 'auto'.
plotOptions.radialColumn.valueAxis.labels.readability.pill.opacity number Box opacity (0 to 1). Default: 0.9.
plotOptions.radialColumn.valueAxis.labels.readability.pill.radius number Corner radius in pixels. Default: 4.
plotOptions.radialColumn.valueAxis.labels.readability.pill.padding number | [number, number] Space around the text in pixels: one number, or [vertical, horizontal]. Default: [1, 4].
plotOptions.radialColumn.valueAxis.labels.readability.pill.stroke string Outline colour of the box. Default: 'none'.
plotOptions.radialColumn.valueAxis.labels.readability.pill.strokeWidth number Outline width in pixels. Default: 1.
plotOptions.radialColumn.valueAxis.labels.readability.pill.offset [number, number] Shift of the box as [dx, dy] in pixels. Default: [0, 0].
plotOptions.radialColumn.valueAxis.labels.readability.shadow object | boolean drop shadow on the pill (on the text in halo mode)
plotOptions.radialColumn.valueAxis.labels.readability.shadow.dx number Horizontal shadow offset in pixels. Default: 0.
plotOptions.radialColumn.valueAxis.labels.readability.shadow.dy number Vertical shadow offset in pixels. Default: 1.
plotOptions.radialColumn.valueAxis.labels.readability.shadow.blur number Shadow blur in pixels. Default: 2.
plotOptions.radialColumn.valueAxis.labels.readability.shadow.color string Shadow colour. Default: '#000000'.
plotOptions.radialColumn.valueAxis.labels.readability.shadow.opacity number Shadow opacity (0 to 1). Default: 0.35.
plotOptions.radialColumn.valueAxis.labels.readability.raise boolean axis labels sitting on marks are moved above the series (default true)
plotOptions.radialColumn.valueAxis.labels.readability.each (info: WccReadabilityInfo) => WccReadability | null | undefined per label: return an override (or 'none') for this one label; called only when set
plotOptions.radialColumn.valueAxis.labels.angle number | 'auto' where the scale sits: degrees (startAngle convention, 0 = 12 o'clock) or 'auto' = the slot boundary with the shortest bars on both sides. Default: the start of the range
plotOptions.radialColumn.valueAxis.labels.pinAngle boolean 'auto' keeps the first angle it found across updates (no jumping scale). Default true
plotOptions.radialColumn.categoryLabels object Category names around the ring.
plotOptions.radialColumn.categoryLabels.show boolean Shows the category names. Default: true.
plotOptions.radialColumn.categoryLabels.orientation 'auto' | 'horizontal' | 'radial' 'horizontal' or along the 'radial' direction; 'auto' keeps names horizontal when they fit their slot. Default: 'auto'.
plotOptions.radialColumn.categoryLabels.offset number Distance from the bars in px. Default: 8.
plotOptions.radialColumn.categoryLabels.maxWidth number Longest name in px before it is shortened. Default: 110.
plotOptions.radialColumn.categoryLabels.step number label every n-th category (disables automatic thinning)
plotOptions.radialColumn.categoryLabels.maxCount number most labels to show; default from the ring length (one per ~4 font sizes, 4-24)
plotOptions.radialColumn.categoryLabels.formatter (category: string, opts: { index: number }) => string (category, { index }) =&gt; string for the name.
plotOptions.radialColumn.center object Value and label in the hole.
plotOptions.radialColumn.center.readability RadialReadability centre value + label readability (explicit modes; default none)
plotOptions.radialColumn.center.readability.mode 'none' | 'halo' | 'pill' | 'auto' | 'hide' 'auto' (default where on): nothing for labels off the marks, a contrasting text colour over one fill, a pill over mixed fills; 'hide' = skip labels that sit on marks
plotOptions.radialColumn.center.readability.fallback 'pill' | 'halo' | 'hide' what 'auto' escalates to over mixed fills or when no text colour reaches minRatio. Default 'pill'
plotOptions.radialColumn.center.readability.enabled boolean false switches the treatment off for this label kind
plotOptions.radialColumn.center.readability.contrast boolean swap the text to light/dark when it misses minRatio against what is under it (any mode)
plotOptions.radialColumn.center.readability.minRatio number WCAG 2 contrast ratio to reach. Default 4.5
plotOptions.radialColumn.center.readability.light string text/backdrop colour pair used by contrast and 'auto' fills. Defaults '#ffffff' / '#111827'
plotOptions.radialColumn.center.readability.dark string Dark colour of the pair. Default: '#111827'.
plotOptions.radialColumn.center.readability.background 'auto' | string colour under the chart; 'auto' = chart.background, else the first opaque ancestor
plotOptions.radialColumn.center.readability.halo object outline behind the glyphs; blur > 0 makes it a soft glow. Defaults width 3, color 'auto' (chart background), opacity 0.92
plotOptions.radialColumn.center.readability.halo.width number Outline width in pixels. Default: 3.
plotOptions.radialColumn.center.readability.halo.color 'auto' | string Outline colour; 'auto' uses the colour under the label or a contrasting one. Default: 'auto'.
plotOptions.radialColumn.center.readability.halo.opacity number Outline opacity (0 to 1). Default: 0.92.
plotOptions.radialColumn.center.readability.halo.blur number Blur in pixels; above 0 the outline becomes a soft glow. Default: 0.
plotOptions.radialColumn.center.readability.pill object backdrop box. padding = [vertical, horizontal]; offset = [dx, dy] px. Defaults fill 'auto', opacity 0.9, radius 4, padding [1, 4]
plotOptions.radialColumn.center.readability.pill.fill 'auto' | string Box colour; 'auto' uses the colour under the label or a contrasting one. Default: 'auto'.
plotOptions.radialColumn.center.readability.pill.opacity number Box opacity (0 to 1). Default: 0.9.
plotOptions.radialColumn.center.readability.pill.radius number Corner radius in pixels. Default: 4.
plotOptions.radialColumn.center.readability.pill.padding number | [number, number] Space around the text in pixels: one number, or [vertical, horizontal]. Default: [1, 4].
plotOptions.radialColumn.center.readability.pill.stroke string Outline colour of the box. Default: 'none'.
plotOptions.radialColumn.center.readability.pill.strokeWidth number Outline width in pixels. Default: 1.
plotOptions.radialColumn.center.readability.pill.offset [number, number] Shift of the box as [dx, dy] in pixels. Default: [0, 0].
plotOptions.radialColumn.center.readability.shadow object | boolean drop shadow on the pill (on the text in halo mode)
plotOptions.radialColumn.center.readability.shadow.dx number Horizontal shadow offset in pixels. Default: 0.
plotOptions.radialColumn.center.readability.shadow.dy number Vertical shadow offset in pixels. Default: 1.
plotOptions.radialColumn.center.readability.shadow.blur number Shadow blur in pixels. Default: 2.
plotOptions.radialColumn.center.readability.shadow.color string Shadow colour. Default: '#000000'.
plotOptions.radialColumn.center.readability.shadow.opacity number Shadow opacity (0 to 1). Default: 0.35.
plotOptions.radialColumn.center.readability.raise boolean axis labels sitting on marks are moved above the series (default true)
plotOptions.radialColumn.center.readability.each (info: WccReadabilityInfo) => WccReadability | null | undefined per label: return an override (or 'none') for this one label; called only when set
plotOptions.radialColumn.center.show boolean | 'auto' true always shows the centre; 'auto' shows it when the hole is at least 34 px. Default: 'auto'.
plotOptions.radialColumn.center.label string Label under the value; not set uses the gauge layer name, 'Total' with columns, or the first layer name.
plotOptions.radialColumn.center.value number | string | (() => string) Fixed value or text, or a function returning text; not set uses the gauge value or the total.
plotOptions.radialColumn.center.formatter (value: number) => string (value, { w }) =&gt; string for a numeric centre value.
plotOptions.radialColumn.center.hover boolean show the hovered slot / segment in the centre
plotOptions.radialColumn.layers RadialColumnLayer[] Inner layers, innermost first. Default: [].
plotOptions.radialColumn.layers[].type 'pie' | 'donut' | 'nestedDonut' | 'sunburst' | 'arc' | 'radialBar' | 'polarArea' | 'heatmap' | 'chord' | 'goals' | 'gauge' | 'wave' | 'matrix' | 'incident' | 'bands' | 'trace' | 'span' | 'vitalsNow' 'radialBar' is an alias of 'arc'; 'chord' is best as the innermost layer (its ribbons fill the centre)
plotOptions.radialColumn.layers[].name string Layer name (legend, tooltip, centre label of a gauge).
plotOptions.radialColumn.layers[].data RadialLayerDatum[] | Array<{ /** Ring name. / name?: string /* Segments or cells of the ring (inner first). */ data: Array<RadialLayerDatum | null> }> | Ar… pie/donut/arc/polarArea: segments; nestedDonut and heatmap: rings [{ name, data }] or number[][] (innermost first, heatmap cells may be null); sunburst: a node tree; chord: flows [from, to, value] or { from, to, value }; wave: rows RadialWaveSeries[] (or one plain number array = one row) matrix: rows × cols values or status names, flows [row, col, value], or RadialMatrixCell objects incident (west-coast-charts/layers/quint): RadialIncident windows, a wedge across every ring each
plotOptions.radialColumn.layers[].data[].x string Name of the segment (alias of name).
plotOptions.radialColumn.layers[].data[].name string Name of the segment.
plotOptions.radialColumn.layers[].data[].y number Value of the segment (alias of value).
plotOptions.radialColumn.layers[].data[].value number Value of the segment.
plotOptions.radialColumn.layers[].data[].color string Colour of the segment.
plotOptions.radialColumn.layers[].data[].max number Arc and goals layers: value of a full arc for this point.
plotOptions.radialColumn.layers[].data[].target number goals: the ring's target (alias of max)
plotOptions.radialColumn.layers[].data[].trackColor string goals: track colour of this ring (default: derived from the ring colour)
plotOptions.radialColumn.layers[].data[].label string goals: ring label (default: the name)
plotOptions.radialColumn.layers[].data[].children RadialLayerDatum[] Sunburst: child segments on the next ring.
plotOptions.radialColumn.layers[].data[].link Array<number | string> linked categories (indices or names)
plotOptions.radialColumn.layers[].data[].keys string[] semantic keys (e.g. a service id): marks of other layers sharing a key light together; a sunburst parent takes the union of its children
plotOptions.radialColumn.layers[].data[].values Array<number | null> this segment's own outer values (filter interaction)
plotOptions.radialColumn.layers[].data[].from string Source group id.
plotOptions.radialColumn.layers[].data[].to string Target group id.
plotOptions.radialColumn.layers[].data[].data Array<number | null | [unknown, number | null] | { y: number | null }> One value per point; null = gap. Numbers, [x, y] or { y }.
plotOptions.radialColumn.layers[].data[].envelope object Normal range per point: a soft band behind the wave; points outside it are anomalies.
plotOptions.radialColumn.layers[].data[].envelope.lo Array<number | null> Lower bound per point.
plotOptions.radialColumn.layers[].data[].envelope.hi Array<number | null> Upper bound per point.
plotOptions.radialColumn.layers[].data[].forecast object Forecast per point (usually null up to now): dashed crest, optional hatched range.
plotOptions.radialColumn.layers[].data[].forecast.data Array<number | null> Forecast values.
plotOptions.radialColumn.layers[].data[].forecast.lo Array<number | null> Lower bound of the forecast range.
plotOptions.radialColumn.layers[].data[].forecast.hi Array<number | null> Upper bound of the forecast range.
plotOptions.radialColumn.layers[].data[].anomalies RadialWaveAnomaly[] Anomalies of this row (as layer anomalies, without series).
plotOptions.radialColumn.layers[].data[].anomalies[].series string Row name (layer-level lists; not set = every row).
plotOptions.radialColumn.layers[].data[].anomalies[].at number | string Point index, or a point label (e.g. 'Wed 18:00').
plotOptions.radialColumn.layers[].data[].anomalies[].label string Text in the tooltip, data table and rim marks.
plotOptions.radialColumn.layers[].data[].anomalies[].kind string Kind shown when there is no label. Default: 'Anomaly' ('Above normal' / 'Below normal' for automatic ones).
plotOptions.radialColumn.layers[].data[].anomalies[].color string Spike colour. Default: a rose red (lighter in dark mode).
plotOptions.radialColumn.layers[].data[].row string Row id (or name).
plotOptions.radialColumn.layers[].data[].col string Column id (or name).
plotOptions.radialColumn.layers[].data[].status string Status name (ok, info, warn, crit, unknown or one of statuses).
plotOptions.radialColumn.layers[].series number | string take the data from config.series (index or name) instead; that series leaves the column ring
plotOptions.radialColumn.layers[].labels string[] segment names for plain number data; wave: point labels, one per point (e.g. '14:00 Tue') or one per sector point ('14:00', shown as 'Tue 14:00')
plotOptions.radialColumn.layers[].thickness number | string ring thickness: px, '30%' of the available radius, or a fraction (0..1)
plotOptions.radialColumn.layers[].gap number px between this layer and the one inside it (default 6)
plotOptions.radialColumn.layers[].ringGap number px between the rings of a nestedDonut / sunburst / arc layer (default 2)
plotOptions.radialColumn.layers[].padding number constant px gap between neighbouring segments
plotOptions.radialColumn.layers[].corner number corner radius of segment ends, px
plotOptions.radialColumn.layers[].colors string[] Own palette of the layer; heatmap: two or more colours are the ramp stops, low to high.
plotOptions.radialColumn.layers[].colorBy 'spectrum' colour segments from the column ring's spectrum by angle
plotOptions.radialColumn.layers[].legend boolean keep this layer's segments out of the legend
plotOptions.radialColumn.layers[].link RadialColumnLink | boolean | RadialLinkMode link to the column ring for this layer: false = none, a mode, or options overriding plotOptions.radialColumn.link
plotOptions.radialColumn.layers[].link.mode 'none' | 'category' | 'angle' | 'map' | 'auto' auto (default): a datum's own link, else matching category names, else the angle span
plotOptions.radialColumn.layers[].link.map ((segment: RadialLinkSegment) => Array<number | string> | null | undefined) | Record<string, Array<number | string>> map mode: a function or an object keyed by 'A › B' path or name; values are category indices or names
plotOptions.radialColumn.layers[].link.interaction 'highlight' | 'filter' | 'both' highlight on hover, filter (cross-filter / values) on click, or both. Default 'highlight'
plotOptions.radialColumn.layers[].link.bidirectional boolean hovering a bar also lights its segments (default true)
plotOptions.radialColumn.layers[].link.align boolean segments span exactly the angle of their linked bars (default false)
plotOptions.radialColumn.layers[].link.indicator boolean bracket arc on the outer edge over the linked bars (default true)
plotOptions.radialColumn.layers[].link.unit string what a category is, for tooltips and announcements ('18 of 72 time slots'). Default 'categories'. Name the real unit: categories that combine several things (service × day) are 'service-days', not 'days'.
plotOptions.radialColumn.layers[].link.basis string how the categories are composed, appended in brackets ('18 of 140 service-days (10 services × 14 days)'). Default: none
plotOptions.radialColumn.layers[].align boolean shorthand for link.align
plotOptions.radialColumn.layers[].trackColor string Track colour of arc, goals and gauge layers; not set uses a faint text tone (goals: a tone of the ring colour).
plotOptions.radialColumn.layers[].startAngle number degrees, 0 = 12 o'clock, clockwise; default: the chart's range
plotOptions.radialColumn.layers[].endAngle number End angle in degrees (same convention as startAngle); not set uses the chart's range.
plotOptions.radialColumn.layers[].min number arc layers: value range of a full arc (default 0..100; per point via datum.max); wave: base of the height scale (default min(0, data))
plotOptions.radialColumn.layers[].max number Arc layers: value of a full arc. Default: 100. Wave: top of the height scale (default: the data, envelopes and forecasts rounded up to a nice tick).
plotOptions.radialColumn.layers[].color RadialMatrixScale | string heatmap / matrix: base colour of the default ramp (surface tone -> colour -> towards the text colour); colors (2+) overrides the ramp. matrix (value mode) also takes a colour scale.
plotOptions.radialColumn.layers[].color.scale 'sequential' | 'diverging' 'sequential' (low to high) or 'diverging' around mid. Default: 'sequential'.
plotOptions.radialColumn.layers[].color.domain number[] [lo, hi] or [lo, mid, hi]; default: data extent.
plotOptions.radialColumn.layers[].color.mid number Diverging centre. Default: 0.
plotOptions.radialColumn.layers[].color.stops string[] Colour stops, low to high.
plotOptions.radialColumn.layers[].color.reverse boolean Reverses the colour stops. Default: false.
plotOptions.radialColumn.layers[].groups RadialChordGroup[] chord: group definitions (order, names, colours, linked categories)
plotOptions.radialColumn.layers[].groups[].id string Group id used in the flows.
plotOptions.radialColumn.layers[].groups[].name string Shown name; not set uses the id.
plotOptions.radialColumn.layers[].groups[].color string Group colour.
plotOptions.radialColumn.layers[].groups[].values number[] per-group values (shown in its tooltip)
plotOptions.radialColumn.layers[].groups[].link string | number | Array<string | number> categories (names or indices) of the column ring this group links to (overrides link.map)
plotOptions.radialColumn.layers[].matrix number[][] chord: a square flow matrix instead of data; row = source, column = target (with labels)
plotOptions.radialColumn.layers[].directed boolean chord: directed flows give each end its own share (A->B and B->A differ)
plotOptions.radialColumn.layers[].sort 'none' | 'asc' | 'desc' chord: order of the groups around the ring (default: as given)
plotOptions.radialColumn.layers[].ringWidth number chord: px width of the group arcs (default: the layer thickness)
plotOptions.radialColumn.layers[].ribbon object chord ribbons
plotOptions.radialColumn.layers[].ribbon.opacity number Ribbon opacity; not set uses 0.52 (0.6 in dark mode).
plotOptions.radialColumn.layers[].ribbon.colorMode 'source' | 'target' | 'gradient' Ribbon colour from the 'source' group, the 'target' group, or a 'gradient' between both. Default: 'source'.
plotOptions.radialColumn.layers[].ribbon.padding number Gap between the group arcs and the ribbon ends in px. Default: 2.
plotOptions.radialColumn.layers[].target number goals: default target of every ring (datum target/max wins; default 100)
plotOptions.radialColumn.layers[].maxLaps number goals: laps drawn past 100 % (default 2, i.e. up to 300 %)
plotOptions.radialColumn.layers[].ringLabels boolean curved labels on the segments: goals from the ring start (default true); any other layer centred on each segment, upright in the lower half (default false)
plotOptions.radialColumn.layers[].ringTitles boolean incident: name the heatmap rings (curved, in the gap outside each ring, at 12 o'clock) and add their colour scales to the key under the ring (default true)
plotOptions.radialColumn.layers[].legendTitle string header of this layer's entries in a right-hand legend (e.g. 'Regions'); entries of consecutive layers sharing a title form one group
plotOptions.radialColumn.layers[].rows Array<string | RadialMatrixHeader | RadialVitalsRow> matrix: row headers (ids, or definitions with keys / link); default: the ids used in flow data
plotOptions.radialColumn.layers[].cols Array<string | RadialMatrixHeader> matrix: column headers; default: the rows (square adjacency matrix)
plotOptions.radialColumn.layers[].statuses Record<string, RadialMatrixStatus> matrix: adds or overrides statuses (built in: ok, info, warn, crit, unknown)
plotOptions.radialColumn.layers[].headers object | boolean matrix: row / column header labels (false hides them)
plotOptions.radialColumn.layers[].headers.show boolean false hides the headers. Default: true.
plotOptions.radialColumn.layers[].headers.fontSize number Largest header font size in px; it shrinks to 9 px before labels are cut. Default: theme font size − 1.
plotOptions.radialColumn.layers[].headers.readability RadialReadability Label readability of the headers (explicit modes only, e.g. 'pill' / 'halo').
plotOptions.radialColumn.layers[].headers.readability.mode 'none' | 'halo' | 'pill' | 'auto' | 'hide' 'auto' (default where on): nothing for labels off the marks, a contrasting text colour over one fill, a pill over mixed fills; 'hide' = skip labels that sit on marks
plotOptions.radialColumn.layers[].headers.readability.fallback 'pill' | 'halo' | 'hide' what 'auto' escalates to over mixed fills or when no text colour reaches minRatio. Default 'pill'
plotOptions.radialColumn.layers[].headers.readability.enabled boolean false switches the treatment off for this label kind
plotOptions.radialColumn.layers[].headers.readability.contrast boolean swap the text to light/dark when it misses minRatio against what is under it (any mode)
plotOptions.radialColumn.layers[].headers.readability.minRatio number WCAG 2 contrast ratio to reach. Default 4.5
plotOptions.radialColumn.layers[].headers.readability.light string text/backdrop colour pair used by contrast and 'auto' fills. Defaults '#ffffff' / '#111827'
plotOptions.radialColumn.layers[].headers.readability.dark string Dark colour of the pair. Default: '#111827'.
plotOptions.radialColumn.layers[].headers.readability.background 'auto' | string colour under the chart; 'auto' = chart.background, else the first opaque ancestor
plotOptions.radialColumn.layers[].headers.readability.halo object outline behind the glyphs; blur > 0 makes it a soft glow. Defaults width 3, color 'auto' (chart background), opacity 0.92
plotOptions.radialColumn.layers[].headers.readability.halo.width number Outline width in pixels. Default: 3.
plotOptions.radialColumn.layers[].headers.readability.halo.color 'auto' | string Outline colour; 'auto' uses the colour under the label or a contrasting one. Default: 'auto'.
plotOptions.radialColumn.layers[].headers.readability.halo.opacity number Outline opacity (0 to 1). Default: 0.92.
plotOptions.radialColumn.layers[].headers.readability.halo.blur number Blur in pixels; above 0 the outline becomes a soft glow. Default: 0.
plotOptions.radialColumn.layers[].headers.readability.pill object backdrop box. padding = [vertical, horizontal]; offset = [dx, dy] px. Defaults fill 'auto', opacity 0.9, radius 4, padding [1, 4]
plotOptions.radialColumn.layers[].headers.readability.pill.fill 'auto' | string Box colour; 'auto' uses the colour under the label or a contrasting one. Default: 'auto'.
plotOptions.radialColumn.layers[].headers.readability.pill.opacity number Box opacity (0 to 1). Default: 0.9.
plotOptions.radialColumn.layers[].headers.readability.pill.radius number Corner radius in pixels. Default: 4.
plotOptions.radialColumn.layers[].headers.readability.pill.padding number | [number, number] Space around the text in pixels: one number, or [vertical, horizontal]. Default: [1, 4].
plotOptions.radialColumn.layers[].headers.readability.pill.stroke string Outline colour of the box. Default: 'none'.
plotOptions.radialColumn.layers[].headers.readability.pill.strokeWidth number Outline width in pixels. Default: 1.
plotOptions.radialColumn.layers[].headers.readability.pill.offset [number, number] Shift of the box as [dx, dy] in pixels. Default: [0, 0].
plotOptions.radialColumn.layers[].headers.readability.shadow object | boolean drop shadow on the pill (on the text in halo mode)
plotOptions.radialColumn.layers[].headers.readability.shadow.dx number Horizontal shadow offset in pixels. Default: 0.
plotOptions.radialColumn.layers[].headers.readability.shadow.dy number Vertical shadow offset in pixels. Default: 1.
plotOptions.radialColumn.layers[].headers.readability.shadow.blur number Shadow blur in pixels. Default: 2.
plotOptions.radialColumn.layers[].headers.readability.shadow.color string Shadow colour. Default: '#000000'.
plotOptions.radialColumn.layers[].headers.readability.shadow.opacity number Shadow opacity (0 to 1). Default: 0.35.
plotOptions.radialColumn.layers[].headers.readability.raise boolean axis labels sitting on marks are moved above the series (default true)
plotOptions.radialColumn.layers[].headers.readability.each (info: WccReadabilityInfo) => WccReadability | null | undefined per label: return an override (or 'none') for this one label; called only when set
plotOptions.radialColumn.layers[].values boolean | 'auto' matrix: print the value inside a cell ('auto': when it fits). Default: 'auto'.
plotOptions.radialColumn.layers[].minCell number matrix: smallest cell in px before rows / columns are merged or dropped. Default: 6.
plotOptions.radialColumn.layers[].overflow 'aggregate' | 'truncate' matrix: rows / columns past minCell merge into one '+N' row / column ('aggregate'), or are dropped with a '+N' note ('truncate'). Default: 'aggregate'.
plotOptions.radialColumn.layers[].aggregate 'sum' | 'max' | 'mean' | 'min' | 'median' | 'last' matrix: how merged cells and row / column headers combine values (statuses: always the worst). Default: 'sum' (header tooltip 'Total'); use 'max' / 'mean' / 'min' for non-additive cells such as latencies or rates ('Highest', 'Average', 'Lowest').
plotOptions.radialColumn.layers[].inset number matrix: px between the grid (with its headers) and the edge of the centre disc. Default: 6.
plotOptions.radialColumn.layers[].unit string matrix: appended to values in cells, tooltip and table; heatmap: appended to the value in the slot tooltip
plotOptions.radialColumn.layers[].value number gauge: the value (else data[0])
plotOptions.radialColumn.layers[].follow string | number | boolean gauge: take the latest value of this column series (name, index or true = first); it stays in the ring
plotOptions.radialColumn.layers[].bandsLow RadialVitalsBand[] gauge: colour by value band, ascending: [{ to: 60, color }] Span lower-value bands. Missing keeps the generic shared fallback; choose a policy explicitly to avoid a warning.
plotOptions.radialColumn.layers[].bandsLow[].to number Upper value of the band (inclusive); omitted on the last band.
plotOptions.radialColumn.layers[].bandsLow[].level 0 | 1 | 2 | 3 0 = normal ... 3 = highest; colour + pattern.
plotOptions.radialColumn.layers[].bandsLow[].label string Text of the band in tooltip and table.
plotOptions.radialColumn.layers[].bandsLowPolicy 'high-only' | 'shared' Span classification when bandsLow is absent; generic span default is shared, VitalsClock defaults high-only.
plotOptions.radialColumn.layers[].bands RadialVitalsBand[] | Array<{ /** Upper value of the band (inclusive). / to: number /* Arc colour for values in the band. */ color: string }>
plotOptions.radialColumn.layers[].bands[].to number Upper value of the band (inclusive); omitted on the last band.
plotOptions.radialColumn.layers[].bands[].level 0 | 1 | 2 | 3 0 = normal ... 3 = highest; colour + pattern.
plotOptions.radialColumn.layers[].bands[].label string Text of the band in tooltip and table.
plotOptions.radialColumn.layers[].formatter (value: number) => string gauge: value formatter (centre, min/max ticks, tooltip)
plotOptions.radialColumn.layers[].center boolean gauge: show the value in the chart centre (default true)
plotOptions.radialColumn.layers[].scale boolean | 'linear' | 'log' gauge: min/max labels at the ends of a partial arc (boolean, default true); heatmap: colour scale, 'log' spaces the ramp by ratio (positive values; default 'linear')
plotOptions.radialColumn.layers[].now object | boolean | number | string gauge with follow: the 'now' tick over the newest slot (default true)
plotOptions.radialColumn.layers[].now.label string Text of the tick. Default: 'now'.
plotOptions.radialColumn.layers[].now.color string Tick colour; not set uses the gauge colour.
plotOptions.radialColumn.layers[].time object trace / span / vitalsNow (layers/vitals): the window the ring shows, ms or ISO.
plotOptions.radialColumn.layers[].time.start number | string
plotOptions.radialColumn.layers[].time.end number | string
plotOptions.radialColumn.layers[].upto number bands / trace / span (layers/vitals): index of the current slot; later slots are "no data yet".
plotOptions.radialColumn.layers[].endLabel string bands (layers/vitals): end label of the last slot (e.g. '24:00'); not set uses the last slot label.
plotOptions.radialColumn.layers[].gapAfter number trace / span (layers/vitals): a gap longer than this many minutes breaks the line. Default: 3 slots.
plotOptions.radialColumn.layers[].alarms Array<{ from: number | string, to?: number | string, label?: string }> vitalsNow (layers/vitals): caller alarm windows, drawn as wedges.
plotOptions.radialColumn.layers[].status Array<{ name: string, text: string, ago?: number, stale?: boolean }> vitalsNow (layers/vitals): last value per parameter in the strip under the ring.
plotOptions.radialColumn.layers[].note string vitalsNow (layers/vitals): a note in the strip, e.g. 'Demo data'.
plotOptions.radialColumn.layers[].mode 'ridge' | 'overlay' | 'stack' | 'auto' | 'value' | 'status' wave: 'ridge' (default) staggers the rows in lanes that rise into the lane behind them; 'overlay' shares one translucent band; 'stack' piles the rows. matrix: 'status' colours cells by severity with patterns; 'auto' (default) = status once any cell has one; 'value' = value scale.
plotOptions.radialColumn.layers[].overlap number wave ridge: how far a wave may rise into the lanes behind it, in lane steps (default 0.8; 0 = no overlap)
plotOptions.radialColumn.layers[].sectors number | Array<string | RadialWaveSector> wave: the equal sectors (cycles) of the ring - a count, or names / objects in order (default 1)
plotOptions.radialColumn.layers[].sectorLabels boolean wave: curved sector names on a band at the inner edge (default true when there are 2+ sectors and room)
plotOptions.radialColumn.layers[].depth number wave: shading from crest to base, 0 = flat .. 1 = deep (default 0.55)
plotOptions.radialColumn.layers[].curve 'smooth' | 'linear' wave: 'smooth' monotone cubic that never overshoots the data (default) or 'linear'
plotOptions.radialColumn.layers[].anomalies RadialWaveAnomaly | false wave: anomaly spikes. Default: points outside their envelope. A list adds or relabels points; false = none; { color } recolours the automatic ones
plotOptions.radialColumn.layers[].anomalies.series string Row name (layer-level lists; not set = every row).
plotOptions.radialColumn.layers[].anomalies.at number | string Point index, or a point label (e.g. 'Wed 18:00').
plotOptions.radialColumn.layers[].anomalies.label string Text in the tooltip, data table and rim marks.
plotOptions.radialColumn.layers[].anomalies.kind string Kind shown when there is no label. Default: 'Anomaly' ('Above normal' / 'Below normal' for automatic ones).
plotOptions.radialColumn.layers[].anomalies.color string Spike colour. Default: a rose red (lighter in dark mode).
plotOptions.radialColumn.layerGap number px between the outermost inner layer and the column ring
plotOptions.radialColumn.hole 'auto' | number | string radius of the empty centre: 'auto', px, '%' or fraction of the space inside the column ring
plotOptions.radialColumn.legend object Legend of series and layer items.
plotOptions.radialColumn.legend.show boolean | 'auto' true always shows it; 'auto' from two items. Default: 'auto'.
plotOptions.radialColumn.legend.position 'auto' | 'right' | 'bottom' 'right' or 'bottom'; 'auto' uses the right on wide plots. Default: 'auto'.

plotOptions.radialColumn.layers[]

One inner layer (RadialColumnLayer), innermost first.

Option Type Description
plotOptions.radialColumn.layers[].type 'pie' | 'donut' | 'nestedDonut' | 'sunburst' | 'arc' | 'radialBar' | 'polarArea' | 'heatmap' | 'chord' | 'goals' | 'gauge' | 'wave' | 'matrix' | 'incident' | 'bands' | 'trace' | 'span' | 'vitalsNow' 'radialBar' is an alias of 'arc'; 'chord' is best as the innermost layer (its ribbons fill the centre)
plotOptions.radialColumn.layers[].name string Layer name (legend, tooltip, centre label of a gauge).
plotOptions.radialColumn.layers[].data RadialLayerDatum[] | Array<{ /** Ring name. / name?: string /* Segments or cells of the ring (inner first). */ data: Array<RadialLayerDatum | null> }> | Ar… pie/donut/arc/polarArea: segments; nestedDonut and heatmap: rings [{ name, data }] or number[][] (innermost first, heatmap cells may be null); sunburst: a node tree; chord: flows [from, to, value] or { from, to, value }; wave: rows RadialWaveSeries[] (or one plain number array = one row) matrix: rows × cols values or status names, flows [row, col, value], or RadialMatrixCell objects incident (west-coast-charts/layers/quint): RadialIncident windows, a wedge across every ring each
plotOptions.radialColumn.layers[].data[].x string Name of the segment (alias of name).
plotOptions.radialColumn.layers[].data[].name string Name of the segment.
plotOptions.radialColumn.layers[].data[].y number Value of the segment (alias of value).
plotOptions.radialColumn.layers[].data[].value number Value of the segment.
plotOptions.radialColumn.layers[].data[].color string Colour of the segment.
plotOptions.radialColumn.layers[].data[].max number Arc and goals layers: value of a full arc for this point.
plotOptions.radialColumn.layers[].data[].target number goals: the ring's target (alias of max)
plotOptions.radialColumn.layers[].data[].trackColor string goals: track colour of this ring (default: derived from the ring colour)
plotOptions.radialColumn.layers[].data[].label string goals: ring label (default: the name)
plotOptions.radialColumn.layers[].data[].children RadialLayerDatum[] Sunburst: child segments on the next ring.
plotOptions.radialColumn.layers[].data[].link Array<number | string> linked categories (indices or names)
plotOptions.radialColumn.layers[].data[].keys string[] semantic keys (e.g. a service id): marks of other layers sharing a key light together; a sunburst parent takes the union of its children
plotOptions.radialColumn.layers[].data[].values Array<number | null> this segment's own outer values (filter interaction)
plotOptions.radialColumn.layers[].data[].from string Source group id.
plotOptions.radialColumn.layers[].data[].to string Target group id.
plotOptions.radialColumn.layers[].data[].data Array<number | null | [unknown, number | null] | { y: number | null }> One value per point; null = gap. Numbers, [x, y] or { y }.
plotOptions.radialColumn.layers[].data[].envelope object Normal range per point: a soft band behind the wave; points outside it are anomalies.
plotOptions.radialColumn.layers[].data[].envelope.lo Array<number | null> Lower bound per point.
plotOptions.radialColumn.layers[].data[].envelope.hi Array<number | null> Upper bound per point.
plotOptions.radialColumn.layers[].data[].forecast object Forecast per point (usually null up to now): dashed crest, optional hatched range.
plotOptions.radialColumn.layers[].data[].forecast.data Array<number | null> Forecast values.
plotOptions.radialColumn.layers[].data[].forecast.lo Array<number | null> Lower bound of the forecast range.
plotOptions.radialColumn.layers[].data[].forecast.hi Array<number | null> Upper bound of the forecast range.
plotOptions.radialColumn.layers[].data[].anomalies RadialWaveAnomaly[] Anomalies of this row (as layer anomalies, without series).
plotOptions.radialColumn.layers[].data[].anomalies[].series string Row name (layer-level lists; not set = every row).
plotOptions.radialColumn.layers[].data[].anomalies[].at number | string Point index, or a point label (e.g. 'Wed 18:00').
plotOptions.radialColumn.layers[].data[].anomalies[].label string Text in the tooltip, data table and rim marks.
plotOptions.radialColumn.layers[].data[].anomalies[].kind string Kind shown when there is no label. Default: 'Anomaly' ('Above normal' / 'Below normal' for automatic ones).
plotOptions.radialColumn.layers[].data[].anomalies[].color string Spike colour. Default: a rose red (lighter in dark mode).
plotOptions.radialColumn.layers[].data[].row string Row id (or name).
plotOptions.radialColumn.layers[].data[].col string Column id (or name).
plotOptions.radialColumn.layers[].data[].status string Status name (ok, info, warn, crit, unknown or one of statuses).
plotOptions.radialColumn.layers[].series number | string take the data from config.series (index or name) instead; that series leaves the column ring
plotOptions.radialColumn.layers[].labels string[] segment names for plain number data; wave: point labels, one per point (e.g. '14:00 Tue') or one per sector point ('14:00', shown as 'Tue 14:00')
plotOptions.radialColumn.layers[].thickness number | string ring thickness: px, '30%' of the available radius, or a fraction (0..1)
plotOptions.radialColumn.layers[].gap number px between this layer and the one inside it (default 6)
plotOptions.radialColumn.layers[].ringGap number px between the rings of a nestedDonut / sunburst / arc layer (default 2)
plotOptions.radialColumn.layers[].padding number constant px gap between neighbouring segments
plotOptions.radialColumn.layers[].corner number corner radius of segment ends, px
plotOptions.radialColumn.layers[].colors string[] Own palette of the layer; heatmap: two or more colours are the ramp stops, low to high.
plotOptions.radialColumn.layers[].colorBy 'spectrum' colour segments from the column ring's spectrum by angle
plotOptions.radialColumn.layers[].legend boolean keep this layer's segments out of the legend
plotOptions.radialColumn.layers[].link RadialColumnLink | boolean | RadialLinkMode link to the column ring for this layer: false = none, a mode, or options overriding plotOptions.radialColumn.link
plotOptions.radialColumn.layers[].link.mode 'none' | 'category' | 'angle' | 'map' | 'auto' auto (default): a datum's own link, else matching category names, else the angle span
plotOptions.radialColumn.layers[].link.map ((segment: RadialLinkSegment) => Array<number | string> | null | undefined) | Record<string, Array<number | string>> map mode: a function or an object keyed by 'A › B' path or name; values are category indices or names
plotOptions.radialColumn.layers[].link.interaction 'highlight' | 'filter' | 'both' highlight on hover, filter (cross-filter / values) on click, or both. Default 'highlight'
plotOptions.radialColumn.layers[].link.bidirectional boolean hovering a bar also lights its segments (default true)
plotOptions.radialColumn.layers[].link.align boolean segments span exactly the angle of their linked bars (default false)
plotOptions.radialColumn.layers[].link.indicator boolean bracket arc on the outer edge over the linked bars (default true)
plotOptions.radialColumn.layers[].link.unit string what a category is, for tooltips and announcements ('18 of 72 time slots'). Default 'categories'. Name the real unit: categories that combine several things (service × day) are 'service-days', not 'days'.
plotOptions.radialColumn.layers[].link.basis string how the categories are composed, appended in brackets ('18 of 140 service-days (10 services × 14 days)'). Default: none
plotOptions.radialColumn.layers[].align boolean shorthand for link.align
plotOptions.radialColumn.layers[].trackColor string Track colour of arc, goals and gauge layers; not set uses a faint text tone (goals: a tone of the ring colour).
plotOptions.radialColumn.layers[].startAngle number degrees, 0 = 12 o'clock, clockwise; default: the chart's range
plotOptions.radialColumn.layers[].endAngle number End angle in degrees (same convention as startAngle); not set uses the chart's range.
plotOptions.radialColumn.layers[].min number arc layers: value range of a full arc (default 0..100; per point via datum.max); wave: base of the height scale (default min(0, data))
plotOptions.radialColumn.layers[].max number Arc layers: value of a full arc. Default: 100. Wave: top of the height scale (default: the data, envelopes and forecasts rounded up to a nice tick).
plotOptions.radialColumn.layers[].color RadialMatrixScale | string heatmap / matrix: base colour of the default ramp (surface tone -> colour -> towards the text colour); colors (2+) overrides the ramp. matrix (value mode) also takes a colour scale.
plotOptions.radialColumn.layers[].color.scale 'sequential' | 'diverging' 'sequential' (low to high) or 'diverging' around mid. Default: 'sequential'.
plotOptions.radialColumn.layers[].color.domain number[] [lo, hi] or [lo, mid, hi]; default: data extent.
plotOptions.radialColumn.layers[].color.mid number Diverging centre. Default: 0.
plotOptions.radialColumn.layers[].color.stops string[] Colour stops, low to high.
plotOptions.radialColumn.layers[].color.reverse boolean Reverses the colour stops. Default: false.
plotOptions.radialColumn.layers[].groups RadialChordGroup[] chord: group definitions (order, names, colours, linked categories)
plotOptions.radialColumn.layers[].groups[].id string Group id used in the flows.
plotOptions.radialColumn.layers[].groups[].name string Shown name; not set uses the id.
plotOptions.radialColumn.layers[].groups[].color string Group colour.
plotOptions.radialColumn.layers[].groups[].values number[] per-group values (shown in its tooltip)
plotOptions.radialColumn.layers[].groups[].link string | number | Array<string | number> categories (names or indices) of the column ring this group links to (overrides link.map)
plotOptions.radialColumn.layers[].matrix number[][] chord: a square flow matrix instead of data; row = source, column = target (with labels)
plotOptions.radialColumn.layers[].directed boolean chord: directed flows give each end its own share (A->B and B->A differ)
plotOptions.radialColumn.layers[].sort 'none' | 'asc' | 'desc' chord: order of the groups around the ring (default: as given)
plotOptions.radialColumn.layers[].ringWidth number chord: px width of the group arcs (default: the layer thickness)
plotOptions.radialColumn.layers[].ribbon object chord ribbons
plotOptions.radialColumn.layers[].ribbon.opacity number Ribbon opacity; not set uses 0.52 (0.6 in dark mode).
plotOptions.radialColumn.layers[].ribbon.colorMode 'source' | 'target' | 'gradient' Ribbon colour from the 'source' group, the 'target' group, or a 'gradient' between both. Default: 'source'.
plotOptions.radialColumn.layers[].ribbon.padding number Gap between the group arcs and the ribbon ends in px. Default: 2.
plotOptions.radialColumn.layers[].target number goals: default target of every ring (datum target/max wins; default 100)
plotOptions.radialColumn.layers[].maxLaps number goals: laps drawn past 100 % (default 2, i.e. up to 300 %)
plotOptions.radialColumn.layers[].ringLabels boolean curved labels on the segments: goals from the ring start (default true); any other layer centred on each segment, upright in the lower half (default false)
plotOptions.radialColumn.layers[].ringTitles boolean incident: name the heatmap rings (curved, in the gap outside each ring, at 12 o'clock) and add their colour scales to the key under the ring (default true)
plotOptions.radialColumn.layers[].legendTitle string header of this layer's entries in a right-hand legend (e.g. 'Regions'); entries of consecutive layers sharing a title form one group
plotOptions.radialColumn.layers[].rows Array<string | RadialMatrixHeader | RadialVitalsRow> matrix: row headers (ids, or definitions with keys / link); default: the ids used in flow data
plotOptions.radialColumn.layers[].cols Array<string | RadialMatrixHeader> matrix: column headers; default: the rows (square adjacency matrix)
plotOptions.radialColumn.layers[].statuses Record<string, RadialMatrixStatus> matrix: adds or overrides statuses (built in: ok, info, warn, crit, unknown)
plotOptions.radialColumn.layers[].headers object | boolean matrix: row / column header labels (false hides them)
plotOptions.radialColumn.layers[].headers.show boolean false hides the headers. Default: true.
plotOptions.radialColumn.layers[].headers.fontSize number Largest header font size in px; it shrinks to 9 px before labels are cut. Default: theme font size − 1.
plotOptions.radialColumn.layers[].headers.readability RadialReadability Label readability of the headers (explicit modes only, e.g. 'pill' / 'halo').
plotOptions.radialColumn.layers[].headers.readability.mode 'none' | 'halo' | 'pill' | 'auto' | 'hide' 'auto' (default where on): nothing for labels off the marks, a contrasting text colour over one fill, a pill over mixed fills; 'hide' = skip labels that sit on marks
plotOptions.radialColumn.layers[].headers.readability.fallback 'pill' | 'halo' | 'hide' what 'auto' escalates to over mixed fills or when no text colour reaches minRatio. Default 'pill'
plotOptions.radialColumn.layers[].headers.readability.enabled boolean false switches the treatment off for this label kind
plotOptions.radialColumn.layers[].headers.readability.contrast boolean swap the text to light/dark when it misses minRatio against what is under it (any mode)
plotOptions.radialColumn.layers[].headers.readability.minRatio number WCAG 2 contrast ratio to reach. Default 4.5
plotOptions.radialColumn.layers[].headers.readability.light string text/backdrop colour pair used by contrast and 'auto' fills. Defaults '#ffffff' / '#111827'
plotOptions.radialColumn.layers[].headers.readability.dark string Dark colour of the pair. Default: '#111827'.
plotOptions.radialColumn.layers[].headers.readability.background 'auto' | string colour under the chart; 'auto' = chart.background, else the first opaque ancestor
plotOptions.radialColumn.layers[].headers.readability.halo object outline behind the glyphs; blur > 0 makes it a soft glow. Defaults width 3, color 'auto' (chart background), opacity 0.92
plotOptions.radialColumn.layers[].headers.readability.halo.width number Outline width in pixels. Default: 3.
plotOptions.radialColumn.layers[].headers.readability.halo.color 'auto' | string Outline colour; 'auto' uses the colour under the label or a contrasting one. Default: 'auto'.
plotOptions.radialColumn.layers[].headers.readability.halo.opacity number Outline opacity (0 to 1). Default: 0.92.
plotOptions.radialColumn.layers[].headers.readability.halo.blur number Blur in pixels; above 0 the outline becomes a soft glow. Default: 0.
plotOptions.radialColumn.layers[].headers.readability.pill object backdrop box. padding = [vertical, horizontal]; offset = [dx, dy] px. Defaults fill 'auto', opacity 0.9, radius 4, padding [1, 4]
plotOptions.radialColumn.layers[].headers.readability.pill.fill 'auto' | string Box colour; 'auto' uses the colour under the label or a contrasting one. Default: 'auto'.
plotOptions.radialColumn.layers[].headers.readability.pill.opacity number Box opacity (0 to 1). Default: 0.9.
plotOptions.radialColumn.layers[].headers.readability.pill.radius number Corner radius in pixels. Default: 4.
plotOptions.radialColumn.layers[].headers.readability.pill.padding number | [number, number] Space around the text in pixels: one number, or [vertical, horizontal]. Default: [1, 4].
plotOptions.radialColumn.layers[].headers.readability.pill.stroke string Outline colour of the box. Default: 'none'.
plotOptions.radialColumn.layers[].headers.readability.pill.strokeWidth number Outline width in pixels. Default: 1.
plotOptions.radialColumn.layers[].headers.readability.pill.offset [number, number] Shift of the box as [dx, dy] in pixels. Default: [0, 0].
plotOptions.radialColumn.layers[].headers.readability.shadow object | boolean drop shadow on the pill (on the text in halo mode)
plotOptions.radialColumn.layers[].headers.readability.shadow.dx number Horizontal shadow offset in pixels. Default: 0.
plotOptions.radialColumn.layers[].headers.readability.shadow.dy number Vertical shadow offset in pixels. Default: 1.
plotOptions.radialColumn.layers[].headers.readability.shadow.blur number Shadow blur in pixels. Default: 2.
plotOptions.radialColumn.layers[].headers.readability.shadow.color string Shadow colour. Default: '#000000'.
plotOptions.radialColumn.layers[].headers.readability.shadow.opacity number Shadow opacity (0 to 1). Default: 0.35.
plotOptions.radialColumn.layers[].headers.readability.raise boolean axis labels sitting on marks are moved above the series (default true)
plotOptions.radialColumn.layers[].headers.readability.each (info: WccReadabilityInfo) => WccReadability | null | undefined per label: return an override (or 'none') for this one label; called only when set
plotOptions.radialColumn.layers[].values boolean | 'auto' matrix: print the value inside a cell ('auto': when it fits). Default: 'auto'.
plotOptions.radialColumn.layers[].minCell number matrix: smallest cell in px before rows / columns are merged or dropped. Default: 6.
plotOptions.radialColumn.layers[].overflow 'aggregate' | 'truncate' matrix: rows / columns past minCell merge into one '+N' row / column ('aggregate'), or are dropped with a '+N' note ('truncate'). Default: 'aggregate'.
plotOptions.radialColumn.layers[].aggregate 'sum' | 'max' | 'mean' | 'min' | 'median' | 'last' matrix: how merged cells and row / column headers combine values (statuses: always the worst). Default: 'sum' (header tooltip 'Total'); use 'max' / 'mean' / 'min' for non-additive cells such as latencies or rates ('Highest', 'Average', 'Lowest').
plotOptions.radialColumn.layers[].inset number matrix: px between the grid (with its headers) and the edge of the centre disc. Default: 6.
plotOptions.radialColumn.layers[].unit string matrix: appended to values in cells, tooltip and table; heatmap: appended to the value in the slot tooltip
plotOptions.radialColumn.layers[].value number gauge: the value (else data[0])
plotOptions.radialColumn.layers[].follow string | number | boolean gauge: take the latest value of this column series (name, index or true = first); it stays in the ring
plotOptions.radialColumn.layers[].bandsLow RadialVitalsBand[] gauge: colour by value band, ascending: [{ to: 60, color }] Span lower-value bands. Missing keeps the generic shared fallback; choose a policy explicitly to avoid a warning.
plotOptions.radialColumn.layers[].bandsLow[].to number Upper value of the band (inclusive); omitted on the last band.
plotOptions.radialColumn.layers[].bandsLow[].level 0 | 1 | 2 | 3 0 = normal ... 3 = highest; colour + pattern.
plotOptions.radialColumn.layers[].bandsLow[].label string Text of the band in tooltip and table.
plotOptions.radialColumn.layers[].bandsLowPolicy 'high-only' | 'shared' Span classification when bandsLow is absent; generic span default is shared, VitalsClock defaults high-only.
plotOptions.radialColumn.layers[].bands RadialVitalsBand[] | Array<{ /** Upper value of the band (inclusive). / to: number /* Arc colour for values in the band. */ color: string }>
plotOptions.radialColumn.layers[].bands[].to number Upper value of the band (inclusive); omitted on the last band.
plotOptions.radialColumn.layers[].bands[].level 0 | 1 | 2 | 3 0 = normal ... 3 = highest; colour + pattern.
plotOptions.radialColumn.layers[].bands[].label string Text of the band in tooltip and table.
plotOptions.radialColumn.layers[].formatter (value: number) => string gauge: value formatter (centre, min/max ticks, tooltip)
plotOptions.radialColumn.layers[].center boolean gauge: show the value in the chart centre (default true)
plotOptions.radialColumn.layers[].scale boolean | 'linear' | 'log' gauge: min/max labels at the ends of a partial arc (boolean, default true); heatmap: colour scale, 'log' spaces the ramp by ratio (positive values; default 'linear')
plotOptions.radialColumn.layers[].now object | boolean | number | string gauge with follow: the 'now' tick over the newest slot (default true)
plotOptions.radialColumn.layers[].now.label string Text of the tick. Default: 'now'.
plotOptions.radialColumn.layers[].now.color string Tick colour; not set uses the gauge colour.
plotOptions.radialColumn.layers[].time object trace / span / vitalsNow (layers/vitals): the window the ring shows, ms or ISO.
plotOptions.radialColumn.layers[].time.start number | string
plotOptions.radialColumn.layers[].time.end number | string
plotOptions.radialColumn.layers[].upto number bands / trace / span (layers/vitals): index of the current slot; later slots are "no data yet".
plotOptions.radialColumn.layers[].endLabel string bands (layers/vitals): end label of the last slot (e.g. '24:00'); not set uses the last slot label.
plotOptions.radialColumn.layers[].gapAfter number trace / span (layers/vitals): a gap longer than this many minutes breaks the line. Default: 3 slots.
plotOptions.radialColumn.layers[].alarms Array<{ from: number | string, to?: number | string, label?: string }> vitalsNow (layers/vitals): caller alarm windows, drawn as wedges.
plotOptions.radialColumn.layers[].status Array<{ name: string, text: string, ago?: number, stale?: boolean }> vitalsNow (layers/vitals): last value per parameter in the strip under the ring.
plotOptions.radialColumn.layers[].note string vitalsNow (layers/vitals): a note in the strip, e.g. 'Demo data'.
plotOptions.radialColumn.layers[].mode 'ridge' | 'overlay' | 'stack' | 'auto' | 'value' | 'status' wave: 'ridge' (default) staggers the rows in lanes that rise into the lane behind them; 'overlay' shares one translucent band; 'stack' piles the rows. matrix: 'status' colours cells by severity with patterns; 'auto' (default) = status once any cell has one; 'value' = value scale.
plotOptions.radialColumn.layers[].overlap number wave ridge: how far a wave may rise into the lanes behind it, in lane steps (default 0.8; 0 = no overlap)
plotOptions.radialColumn.layers[].sectors number | Array<string | RadialWaveSector> wave: the equal sectors (cycles) of the ring - a count, or names / objects in order (default 1)
plotOptions.radialColumn.layers[].sectorLabels boolean wave: curved sector names on a band at the inner edge (default true when there are 2+ sectors and room)
plotOptions.radialColumn.layers[].depth number wave: shading from crest to base, 0 = flat .. 1 = deep (default 0.55)
plotOptions.radialColumn.layers[].curve 'smooth' | 'linear' wave: 'smooth' monotone cubic that never overshoots the data (default) or 'linear'
plotOptions.radialColumn.layers[].anomalies RadialWaveAnomaly | false wave: anomaly spikes. Default: points outside their envelope. A list adds or relabels points; false = none; { color } recolours the automatic ones
plotOptions.radialColumn.layers[].anomalies.series string Row name (layer-level lists; not set = every row).
plotOptions.radialColumn.layers[].anomalies.at number | string Point index, or a point label (e.g. 'Wed 18:00').
plotOptions.radialColumn.layers[].anomalies.label string Text in the tooltip, data table and rim marks.
plotOptions.radialColumn.layers[].anomalies.kind string Kind shown when there is no label. Default: 'Anomaly' ('Above normal' / 'Below normal' for automatic ones).
plotOptions.radialColumn.layers[].anomalies.color string Spike colour. Default: a rose red (lighter in dark mode).

Layer data

A segment datum of an inner layer (RadialLayerDatum, object form).

Option Type Description
datum.x string Name of the segment (alias of name).
datum.name string Name of the segment.
datum.y number Value of the segment (alias of value).
datum.value number Value of the segment.
datum.color string Colour of the segment.
datum.max number Arc and goals layers: value of a full arc for this point.
datum.target number goals: the ring's target (alias of max)
datum.trackColor string goals: track colour of this ring (default: derived from the ring colour)
datum.label string goals: ring label (default: the name)
datum.children RadialLayerDatum[] Sunburst: child segments on the next ring.
datum.link Array<number | string> linked categories (indices or names)
datum.keys string[] semantic keys (e.g. a service id): marks of other layers sharing a key light together; a sunburst parent takes the union of its children
datum.values Array<number | null> this segment's own outer values (filter interaction)

Chord groups

layers[].groups[] of a chord layer (RadialChordGroup).

Option Type Description
groups[].id string Group id used in the flows.
groups[].name string Shown name; not set uses the id.
groups[].color string Group colour.
groups[].values number[] per-group values (shown in its tooltip)
groups[].link string | number | Array<string | number> categories (names or indices) of the column ring this group links to (overrides link.map)

plotOptions.quint

Chart types quintTimeline and quintConvergence (WccQuintOptions), premium type module west-coast-charts/layers/quint.

Option Type Description
plotOptions.quint.plugins WccPremiumPluginRef[] Plugins of this chart: plugin objects, registered names, or [nameOrPlugin, options].
plotOptions.quint.plugins[].name string Plugin id (state key and warnings); not set uses plugin-&lt;index&gt;.
plotOptions.quint.plugins[].defaults object Default options of the plugin; the [nameOrPlugin, options] form overrides them.
plotOptions.quint.plugins[].reserve() (p: any): { top?: number; right?: number; bottom?: number; left?: number } | void (p) =&gt; { top, right, bottom, left }: space in px taken from the plot before layout.
plotOptions.quint.plugins[].afterRender() (p: any): void (p): called after each render; draw into p.layer() and bind events with p.on().
plotOptions.quint.plugins[].event() (name: string, e: Event | null, payload: any, p: any): boolean | void (name, e, payload, p): called for every chart event; returning false cancels a cancelable one.
plotOptions.quint.plugins[].tooltip() (content: any, p: any): any (content, p) =&gt; content: changes the tooltip content (rows, footer, …).
plotOptions.quint.plugins[].describe() (p: any): string (p) =&gt; string appended to the screen-reader summary.
plotOptions.quint.plugins[].destroy() (p: any): void (p): called before each redraw and on destroy.
plotOptions.quint.time object The slots: slot i covers start + i × step to start + (i + 1) × step.
plotOptions.quint.time.start string | number First slot: ISO string or ms.
plotOptions.quint.time.step number Slot length in ms.
plotOptions.quint.lanes WccQuintLane[] The lanes, top to bottom.
plotOptions.quint.lanes[].id string Lane id; series name it in lane.
plotOptions.quint.lanes[].kind 'events' | 'heatmap' | 'budget' | 'lines' | 'stacked' 'events' columns (counts per slot, colour = error rate), 'heatmap' one strip per series, 'budget' error budget left per series (%), 'lines', 'stacked' areas.
plotOptions.quint.lanes[].title string Lane title. Default: the kind's name.
plotOptions.quint.lanes[].unit string Unit of the values, used on the lane, in tooltips, the CSV export and describe(): 'requests / 10 min', '€ / h', 'ms', '%'.
plotOptions.quint.lanes[].aggregate 'sum' | 'mean' | 'max' | 'min' | 'last' How the values add up over time in describe() and the a11y items. Default: events 'sum', budget 'last', others 'mean'.
plotOptions.quint.lanes[].color string Lane colour (events columns without errorRate, heatmap ramp).
plotOptions.quint.lanes[].max number Upper end of the value axis; not set uses the data.
plotOptions.quint.lanes[].height number Lane height in px; not set shares the free height (events 1, lines 1.25, stacked 1).
plotOptions.quint.markers object[] Deploys (◆) and pipeline runs (●) on the events lane. The deploy within 2 h before the first incident that shares one of its keys is marked as the likely cause.
plotOptions.quint.markers[].time string | number
plotOptions.quint.markers[].kind 'deploy' | 'pipeline'
plotOptions.quint.markers[].label string
plotOptions.quint.markers[].keys string[] | string
plotOptions.quint.markers[].emphasis boolean
plotOptions.quint.incidents object[] Incident bands across all lanes.
plotOptions.quint.incidents[].from string | number
plotOptions.quint.incidents[].to string | number
plotOptions.quint.incidents[].label string
plotOptions.quint.incidents[].keys string[] | string
plotOptions.quint.utc boolean Time labels in UTC (with "UTC" in the export header) or local time. Default: true.
plotOptions.quint.errorRate object Error-rate classes of the events columns in %: below warn, warn–critical, above. Default: { warn: 1, critical: 5 }.
plotOptions.quint.errorRate.warn number
plotOptions.quint.errorRate.critical number
plotOptions.quint.lens object Focus lens: magnifies the time axis between from and to (default: the first incident ± max(3 slots, 30 min)) by factor relative to the rest of the axis (1.5–12, default 4). Values are never changed. Shown as a header chip (a button: click or L toggles it), on the axis and in describe(). Default: on for quintConvergence, off for quintTimeline.
plotOptions.quint.lens.enabled boolean
plotOptions.quint.lens.factor number
plotOptions.quint.lens.from string | number
plotOptions.quint.lens.to string | number
plotOptions.quint.lens.pad number
plotOptions.quint.focus object Incident callouts: one value per lane at the incident, wired to its start. Default: on for quintConvergence.
plotOptions.quint.focus.enabled boolean
plotOptions.quint.crosshair boolean Shared crosshair over all lanes. Default: true.
plotOptions.quint.legend object Legend below the lanes. Default: { show: true }.
plotOptions.quint.legend.show boolean

plotOptions.quint.lanes[]

One lane (WccQuintLane), top to bottom.

Option Type Description
plotOptions.quint.lanes[].id string Lane id; series name it in lane.
plotOptions.quint.lanes[].kind 'events' | 'heatmap' | 'budget' | 'lines' | 'stacked' 'events' columns (counts per slot, colour = error rate), 'heatmap' one strip per series, 'budget' error budget left per series (%), 'lines', 'stacked' areas.
plotOptions.quint.lanes[].title string Lane title. Default: the kind's name.
plotOptions.quint.lanes[].unit string Unit of the values, used on the lane, in tooltips, the CSV export and describe(): 'requests / 10 min', '€ / h', 'ms', '%'.
plotOptions.quint.lanes[].aggregate 'sum' | 'mean' | 'max' | 'min' | 'last' How the values add up over time in describe() and the a11y items. Default: events 'sum', budget 'last', others 'mean'.
plotOptions.quint.lanes[].color string Lane colour (events columns without errorRate, heatmap ramp).
plotOptions.quint.lanes[].max number Upper end of the value axis; not set uses the data.
plotOptions.quint.lanes[].height number Lane height in px; not set shares the free height (events 1, lines 1.25, stacked 1).

plotOptions.vitalsClock

Chart type vitalsClock (WccVitalsClockOptions), premium type module west-coast-charts/layers/vitals (guide).

Option Type Description
plotOptions.vitalsClock.plugins WccPremiumPluginRef[] Plugins of this chart: plugin objects, registered names, or [nameOrPlugin, options].
plotOptions.vitalsClock.plugins[].name string Plugin id (state key and warnings); not set uses plugin-&lt;index&gt;.
plotOptions.vitalsClock.plugins[].defaults object Default options of the plugin; the [nameOrPlugin, options] form overrides them.
plotOptions.vitalsClock.plugins[].reserve() (p: any): { top?: number; right?: number; bottom?: number; left?: number } | void (p) =&gt; { top, right, bottom, left }: space in px taken from the plot before layout.
plotOptions.vitalsClock.plugins[].afterRender() (p: any): void (p): called after each render; draw into p.layer() and bind events with p.on().
plotOptions.vitalsClock.plugins[].event() (name: string, e: Event | null, payload: any, p: any): boolean | void (name, e, payload, p): called for every chart event; returning false cancels a cancelable one.
plotOptions.vitalsClock.plugins[].tooltip() (content: any, p: any): any (content, p) =&gt; content: changes the tooltip content (rows, footer, …).
plotOptions.vitalsClock.plugins[].describe() (p: any): string (p) =&gt; string appended to the screen-reader summary.
plotOptions.vitalsClock.plugins[].destroy() (p: any): void (p): called before each redraw and on destroy.
plotOptions.vitalsClock.time object The window: start (ms or ISO), span ('24h', '12h') and slot length ('60min').
plotOptions.vitalsClock.time.start number | string
plotOptions.vitalsClock.time.span string
plotOptions.vitalsClock.time.step string
plotOptions.vitalsClock.now number | string Snapshot cutoff for all measurement channels; future measurements are excluded.
plotOptions.vitalsClock.followNow boolean Advance now to later appended measurements. Historical arrivals never move it backwards. Default: false.
plotOptions.vitalsClock.timeZone string IANA zone of the labels. Default: the runtime's zone.
plotOptions.vitalsClock.params WccVitalsParam[] The parameters, outermost ring first.
plotOptions.vitalsClock.params[].id string Parameter id.
plotOptions.vitalsClock.params[].title string Ring title, e.g. 'Herzfrequenz'.
plotOptions.vitalsClock.params[].short string Short name in the status strip and describe(), e.g. 'HF'.
plotOptions.vitalsClock.params[].unit string Unit, e.g. '/min', '%', 'mmHg'.
plotOptions.vitalsClock.params[].kind 'columns' | 'cells' | 'trace' | 'range' 'columns' = the column ring (median per slot), 'cells' = band cells, 'trace' = line at true times, 'range' = high / low pairs.
plotOptions.vitalsClock.params[].aggregate 'median' | 'min' | 'max' | 'last' | 'mean' Per-slot aggregation for columns and cells. Default: 'median'.
plotOptions.vitalsClock.params[].bands RadialVitalsBand[] The caller's threshold bands (no built-in clinical thresholds).
plotOptions.vitalsClock.params[].bands[].to number Upper value of the band (inclusive); omitted on the last band.
plotOptions.vitalsClock.params[].bands[].level 0 | 1 | 2 | 3 0 = normal ... 3 = highest; colour + pattern.
plotOptions.vitalsClock.params[].bands[].label string Text of the band in tooltip and table.
plotOptions.vitalsClock.params[].data Array<[number | string, number] | [number | string, number, number]> Measurements: [time, value] or, for 'range', [time, high, low]; time = ms or ISO.
plotOptions.vitalsClock.params[].staleAfter number | string After this long the last value is shown as stale: minutes, or a duration such as '4h'.
plotOptions.vitalsClock.params[].decimals number Decimals at most in labels and tooltips. Default: 1.
plotOptions.vitalsClock.params[].color string Ring colour; not set uses the palette.
plotOptions.vitalsClock.params[].bandsLow RadialVitalsBand[] 'range': caller-supplied bands for the low value, independent of the high-value bands.
plotOptions.vitalsClock.params[].bandsLow[].to number Upper value of the band (inclusive); omitted on the last band.
plotOptions.vitalsClock.params[].bandsLow[].level 0 | 1 | 2 | 3 0 = normal ... 3 = highest; colour + pattern.
plotOptions.vitalsClock.params[].bandsLow[].label string Text of the band in tooltip and table.
plotOptions.vitalsClock.params[].bandsLowPolicy 'high-only' | 'shared' Missing low bands: classify only high (default) or explicitly share high bands. An implicit high-only fallback warns once.
plotOptions.vitalsClock.params[].gapAfter number 'trace' / 'range': a gap longer than this many minutes breaks the line. Default: 3 slots.
plotOptions.vitalsClock.params[].min number Lower end of the value scale.
plotOptions.vitalsClock.params[].max number Upper end of the value scale.
plotOptions.vitalsClock.events Array<{ at: number | string, kind?: string, label?: string }> Event markers on the dial, e.g. medication.
plotOptions.vitalsClock.alarms Array<{ from: number | string, to?: number | string, label?: string }> Caller alarm windows (wedges); never computed by the chart.
plotOptions.vitalsClock.core RadialColumnLayer Any radialColumn layer from the caller for the centre, e.g. a 'matrix' of the caller's own scores.
plotOptions.vitalsClock.core.type 'pie' | 'donut' | 'nestedDonut' | 'sunburst' | 'arc' | 'radialBar' | 'polarArea' | 'heatmap' | 'chord' | 'goals' | 'gauge' | 'wave' | 'matrix' | 'incident' | 'bands' | 'trace' | 'span' | 'vitalsNow' 'radialBar' is an alias of 'arc'; 'chord' is best as the innermost layer (its ribbons fill the centre)
plotOptions.vitalsClock.core.name string Layer name (legend, tooltip, centre label of a gauge).
plotOptions.vitalsClock.core.data RadialLayerDatum[] | Array<{ /** Ring name. / name?: string /* Segments or cells of the ring (inner first). */ data: Array<RadialLayerDatum | null> }> | Ar… pie/donut/arc/polarArea: segments; nestedDonut and heatmap: rings [{ name, data }] or number[][] (innermost first, heatmap cells may be null); sunburst: a node tree; chord: flows [from, to, value] or { from, to, value }; wave: rows RadialWaveSeries[] (or one plain number array = one row) matrix: rows × cols values or status names, flows [row, col, value], or RadialMatrixCell objects incident (west-coast-charts/layers/quint): RadialIncident windows, a wedge across every ring each
plotOptions.vitalsClock.core.data[].x string Name of the segment (alias of name).
plotOptions.vitalsClock.core.data[].name string Name of the segment.
plotOptions.vitalsClock.core.data[].y number Value of the segment (alias of value).
plotOptions.vitalsClock.core.data[].value number Value of the segment.
plotOptions.vitalsClock.core.data[].color string Colour of the segment.
plotOptions.vitalsClock.core.data[].max number Arc and goals layers: value of a full arc for this point.
plotOptions.vitalsClock.core.data[].target number goals: the ring's target (alias of max)
plotOptions.vitalsClock.core.data[].trackColor string goals: track colour of this ring (default: derived from the ring colour)
plotOptions.vitalsClock.core.data[].label string goals: ring label (default: the name)
plotOptions.vitalsClock.core.data[].children RadialLayerDatum[] Sunburst: child segments on the next ring.
plotOptions.vitalsClock.core.data[].link Array<number | string> linked categories (indices or names)
plotOptions.vitalsClock.core.data[].keys string[] semantic keys (e.g. a service id): marks of other layers sharing a key light together; a sunburst parent takes the union of its children
plotOptions.vitalsClock.core.data[].values Array<number | null> this segment's own outer values (filter interaction)
plotOptions.vitalsClock.core.data[].from string Source group id.
plotOptions.vitalsClock.core.data[].to string Target group id.
plotOptions.vitalsClock.core.data[].data Array<number | null | [unknown, number | null] | { y: number | null }> One value per point; null = gap. Numbers, [x, y] or { y }.
plotOptions.vitalsClock.core.data[].envelope object Normal range per point: a soft band behind the wave; points outside it are anomalies.
plotOptions.vitalsClock.core.data[].envelope.lo Array<number | null> Lower bound per point.
plotOptions.vitalsClock.core.data[].envelope.hi Array<number | null> Upper bound per point.
plotOptions.vitalsClock.core.data[].forecast object Forecast per point (usually null up to now): dashed crest, optional hatched range.
plotOptions.vitalsClock.core.data[].forecast.data Array<number | null> Forecast values.
plotOptions.vitalsClock.core.data[].forecast.lo Array<number | null> Lower bound of the forecast range.
plotOptions.vitalsClock.core.data[].forecast.hi Array<number | null> Upper bound of the forecast range.
plotOptions.vitalsClock.core.data[].anomalies RadialWaveAnomaly[] Anomalies of this row (as layer anomalies, without series).
plotOptions.vitalsClock.core.data[].anomalies[].series string Row name (layer-level lists; not set = every row).
plotOptions.vitalsClock.core.data[].anomalies[].at number | string Point index, or a point label (e.g. 'Wed 18:00').
plotOptions.vitalsClock.core.data[].anomalies[].label string Text in the tooltip, data table and rim marks.
plotOptions.vitalsClock.core.data[].anomalies[].kind string Kind shown when there is no label. Default: 'Anomaly' ('Above normal' / 'Below normal' for automatic ones).
plotOptions.vitalsClock.core.data[].anomalies[].color string Spike colour. Default: a rose red (lighter in dark mode).
plotOptions.vitalsClock.core.data[].row string Row id (or name).
plotOptions.vitalsClock.core.data[].col string Column id (or name).
plotOptions.vitalsClock.core.data[].status string Status name (ok, info, warn, crit, unknown or one of statuses).
plotOptions.vitalsClock.core.series number | string take the data from config.series (index or name) instead; that series leaves the column ring
plotOptions.vitalsClock.core.labels string[] segment names for plain number data; wave: point labels, one per point (e.g. '14:00 Tue') or one per sector point ('14:00', shown as 'Tue 14:00')
plotOptions.vitalsClock.core.thickness number | string ring thickness: px, '30%' of the available radius, or a fraction (0..1)
plotOptions.vitalsClock.core.gap number px between this layer and the one inside it (default 6)
plotOptions.vitalsClock.core.ringGap number px between the rings of a nestedDonut / sunburst / arc layer (default 2)
plotOptions.vitalsClock.core.padding number constant px gap between neighbouring segments
plotOptions.vitalsClock.core.corner number corner radius of segment ends, px
plotOptions.vitalsClock.core.colors string[] Own palette of the layer; heatmap: two or more colours are the ramp stops, low to high.
plotOptions.vitalsClock.core.colorBy 'spectrum' colour segments from the column ring's spectrum by angle
plotOptions.vitalsClock.core.legend boolean keep this layer's segments out of the legend
plotOptions.vitalsClock.core.link RadialColumnLink | boolean | RadialLinkMode link to the column ring for this layer: false = none, a mode, or options overriding plotOptions.radialColumn.link
plotOptions.vitalsClock.core.link.mode 'none' | 'category' | 'angle' | 'map' | 'auto' auto (default): a datum's own link, else matching category names, else the angle span
plotOptions.vitalsClock.core.link.map ((segment: RadialLinkSegment) => Array<number | string> | null | undefined) | Record<string, Array<number | string>> map mode: a function or an object keyed by 'A › B' path or name; values are category indices or names
plotOptions.vitalsClock.core.link.interaction 'highlight' | 'filter' | 'both' highlight on hover, filter (cross-filter / values) on click, or both. Default 'highlight'
plotOptions.vitalsClock.core.link.bidirectional boolean hovering a bar also lights its segments (default true)
plotOptions.vitalsClock.core.link.align boolean segments span exactly the angle of their linked bars (default false)
plotOptions.vitalsClock.core.link.indicator boolean bracket arc on the outer edge over the linked bars (default true)
plotOptions.vitalsClock.core.link.unit string what a category is, for tooltips and announcements ('18 of 72 time slots'). Default 'categories'. Name the real unit: categories that combine several things (service × day) are 'service-days', not 'days'.
plotOptions.vitalsClock.core.link.basis string how the categories are composed, appended in brackets ('18 of 140 service-days (10 services × 14 days)'). Default: none
plotOptions.vitalsClock.core.align boolean shorthand for link.align
plotOptions.vitalsClock.core.trackColor string Track colour of arc, goals and gauge layers; not set uses a faint text tone (goals: a tone of the ring colour).
plotOptions.vitalsClock.core.startAngle number degrees, 0 = 12 o'clock, clockwise; default: the chart's range
plotOptions.vitalsClock.core.endAngle number End angle in degrees (same convention as startAngle); not set uses the chart's range.
plotOptions.vitalsClock.core.min number arc layers: value range of a full arc (default 0..100; per point via datum.max); wave: base of the height scale (default min(0, data))
plotOptions.vitalsClock.core.max number Arc layers: value of a full arc. Default: 100. Wave: top of the height scale (default: the data, envelopes and forecasts rounded up to a nice tick).
plotOptions.vitalsClock.core.color RadialMatrixScale | string heatmap / matrix: base colour of the default ramp (surface tone -> colour -> towards the text colour); colors (2+) overrides the ramp. matrix (value mode) also takes a colour scale.
plotOptions.vitalsClock.core.color.scale 'sequential' | 'diverging' 'sequential' (low to high) or 'diverging' around mid. Default: 'sequential'.
plotOptions.vitalsClock.core.color.domain number[] [lo, hi] or [lo, mid, hi]; default: data extent.
plotOptions.vitalsClock.core.color.mid number Diverging centre. Default: 0.
plotOptions.vitalsClock.core.color.stops string[] Colour stops, low to high.
plotOptions.vitalsClock.core.color.reverse boolean Reverses the colour stops. Default: false.
plotOptions.vitalsClock.core.groups RadialChordGroup[] chord: group definitions (order, names, colours, linked categories)
plotOptions.vitalsClock.core.groups[].id string Group id used in the flows.
plotOptions.vitalsClock.core.groups[].name string Shown name; not set uses the id.
plotOptions.vitalsClock.core.groups[].color string Group colour.
plotOptions.vitalsClock.core.groups[].values number[] per-group values (shown in its tooltip)
plotOptions.vitalsClock.core.groups[].link string | number | Array<string | number> categories (names or indices) of the column ring this group links to (overrides link.map)
plotOptions.vitalsClock.core.matrix number[][] chord: a square flow matrix instead of data; row = source, column = target (with labels)
plotOptions.vitalsClock.core.directed boolean chord: directed flows give each end its own share (A->B and B->A differ)
plotOptions.vitalsClock.core.sort 'none' | 'asc' | 'desc' chord: order of the groups around the ring (default: as given)
plotOptions.vitalsClock.core.ringWidth number chord: px width of the group arcs (default: the layer thickness)
plotOptions.vitalsClock.core.ribbon object chord ribbons
plotOptions.vitalsClock.core.ribbon.opacity number Ribbon opacity; not set uses 0.52 (0.6 in dark mode).
plotOptions.vitalsClock.core.ribbon.colorMode 'source' | 'target' | 'gradient' Ribbon colour from the 'source' group, the 'target' group, or a 'gradient' between both. Default: 'source'.
plotOptions.vitalsClock.core.ribbon.padding number Gap between the group arcs and the ribbon ends in px. Default: 2.
plotOptions.vitalsClock.core.target number goals: default target of every ring (datum target/max wins; default 100)
plotOptions.vitalsClock.core.maxLaps number goals: laps drawn past 100 % (default 2, i.e. up to 300 %)
plotOptions.vitalsClock.core.ringLabels boolean curved labels on the segments: goals from the ring start (default true); any other layer centred on each segment, upright in the lower half (default false)
plotOptions.vitalsClock.core.ringTitles boolean incident: name the heatmap rings (curved, in the gap outside each ring, at 12 o'clock) and add their colour scales to the key under the ring (default true)
plotOptions.vitalsClock.core.legendTitle string header of this layer's entries in a right-hand legend (e.g. 'Regions'); entries of consecutive layers sharing a title form one group
plotOptions.vitalsClock.core.rows Array<string | RadialMatrixHeader | RadialVitalsRow> matrix: row headers (ids, or definitions with keys / link); default: the ids used in flow data
plotOptions.vitalsClock.core.cols Array<string | RadialMatrixHeader> matrix: column headers; default: the rows (square adjacency matrix)
plotOptions.vitalsClock.core.statuses Record<string, RadialMatrixStatus> matrix: adds or overrides statuses (built in: ok, info, warn, crit, unknown)
plotOptions.vitalsClock.core.headers object | boolean matrix: row / column header labels (false hides them)
plotOptions.vitalsClock.core.headers.show boolean false hides the headers. Default: true.
plotOptions.vitalsClock.core.headers.fontSize number Largest header font size in px; it shrinks to 9 px before labels are cut. Default: theme font size − 1.
plotOptions.vitalsClock.core.headers.readability RadialReadability Label readability of the headers (explicit modes only, e.g. 'pill' / 'halo').
plotOptions.vitalsClock.core.headers.readability.mode 'none' | 'halo' | 'pill' | 'auto' | 'hide' 'auto' (default where on): nothing for labels off the marks, a contrasting text colour over one fill, a pill over mixed fills; 'hide' = skip labels that sit on marks
plotOptions.vitalsClock.core.headers.readability.fallback 'pill' | 'halo' | 'hide' what 'auto' escalates to over mixed fills or when no text colour reaches minRatio. Default 'pill'
plotOptions.vitalsClock.core.headers.readability.enabled boolean false switches the treatment off for this label kind
plotOptions.vitalsClock.core.headers.readability.contrast boolean swap the text to light/dark when it misses minRatio against what is under it (any mode)
plotOptions.vitalsClock.core.headers.readability.minRatio number WCAG 2 contrast ratio to reach. Default 4.5
plotOptions.vitalsClock.core.headers.readability.light string text/backdrop colour pair used by contrast and 'auto' fills. Defaults '#ffffff' / '#111827'
plotOptions.vitalsClock.core.headers.readability.dark string Dark colour of the pair. Default: '#111827'.
plotOptions.vitalsClock.core.headers.readability.background 'auto' | string colour under the chart; 'auto' = chart.background, else the first opaque ancestor
plotOptions.vitalsClock.core.headers.readability.halo object outline behind the glyphs; blur > 0 makes it a soft glow. Defaults width 3, color 'auto' (chart background), opacity 0.92
plotOptions.vitalsClock.core.headers.readability.halo.width number Outline width in pixels. Default: 3.
plotOptions.vitalsClock.core.headers.readability.halo.color 'auto' | string Outline colour; 'auto' uses the colour under the label or a contrasting one. Default: 'auto'.
plotOptions.vitalsClock.core.headers.readability.halo.opacity number Outline opacity (0 to 1). Default: 0.92.
plotOptions.vitalsClock.core.headers.readability.halo.blur number Blur in pixels; above 0 the outline becomes a soft glow. Default: 0.
plotOptions.vitalsClock.core.headers.readability.pill object backdrop box. padding = [vertical, horizontal]; offset = [dx, dy] px. Defaults fill 'auto', opacity 0.9, radius 4, padding [1, 4]
plotOptions.vitalsClock.core.headers.readability.pill.fill 'auto' | string Box colour; 'auto' uses the colour under the label or a contrasting one. Default: 'auto'.
plotOptions.vitalsClock.core.headers.readability.pill.opacity number Box opacity (0 to 1). Default: 0.9.
plotOptions.vitalsClock.core.headers.readability.pill.radius number Corner radius in pixels. Default: 4.
plotOptions.vitalsClock.core.headers.readability.pill.padding number | [number, number] Space around the text in pixels: one number, or [vertical, horizontal]. Default: [1, 4].
plotOptions.vitalsClock.core.headers.readability.pill.stroke string Outline colour of the box. Default: 'none'.
plotOptions.vitalsClock.core.headers.readability.pill.strokeWidth number Outline width in pixels. Default: 1.
plotOptions.vitalsClock.core.headers.readability.pill.offset [number, number] Shift of the box as [dx, dy] in pixels. Default: [0, 0].
plotOptions.vitalsClock.core.headers.readability.shadow object | boolean drop shadow on the pill (on the text in halo mode)
plotOptions.vitalsClock.core.headers.readability.shadow.dx number Horizontal shadow offset in pixels. Default: 0.
plotOptions.vitalsClock.core.headers.readability.shadow.dy number Vertical shadow offset in pixels. Default: 1.
plotOptions.vitalsClock.core.headers.readability.shadow.blur number Shadow blur in pixels. Default: 2.
plotOptions.vitalsClock.core.headers.readability.shadow.color string Shadow colour. Default: '#000000'.
plotOptions.vitalsClock.core.headers.readability.shadow.opacity number Shadow opacity (0 to 1). Default: 0.35.
plotOptions.vitalsClock.core.headers.readability.raise boolean axis labels sitting on marks are moved above the series (default true)
plotOptions.vitalsClock.core.headers.readability.each (info: WccReadabilityInfo) => WccReadability | null | undefined per label: return an override (or 'none') for this one label; called only when set
plotOptions.vitalsClock.core.values boolean | 'auto' matrix: print the value inside a cell ('auto': when it fits). Default: 'auto'.
plotOptions.vitalsClock.core.minCell number matrix: smallest cell in px before rows / columns are merged or dropped. Default: 6.
plotOptions.vitalsClock.core.overflow 'aggregate' | 'truncate' matrix: rows / columns past minCell merge into one '+N' row / column ('aggregate'), or are dropped with a '+N' note ('truncate'). Default: 'aggregate'.
plotOptions.vitalsClock.core.aggregate 'sum' | 'max' | 'mean' | 'min' | 'median' | 'last' matrix: how merged cells and row / column headers combine values (statuses: always the worst). Default: 'sum' (header tooltip 'Total'); use 'max' / 'mean' / 'min' for non-additive cells such as latencies or rates ('Highest', 'Average', 'Lowest').
plotOptions.vitalsClock.core.inset number matrix: px between the grid (with its headers) and the edge of the centre disc. Default: 6.
plotOptions.vitalsClock.core.unit string matrix: appended to values in cells, tooltip and table; heatmap: appended to the value in the slot tooltip
plotOptions.vitalsClock.core.value number gauge: the value (else data[0])
plotOptions.vitalsClock.core.follow string | number | boolean gauge: take the latest value of this column series (name, index or true = first); it stays in the ring
plotOptions.vitalsClock.core.bandsLow RadialVitalsBand[] gauge: colour by value band, ascending: [{ to: 60, color }] Span lower-value bands. Missing keeps the generic shared fallback; choose a policy explicitly to avoid a warning.
plotOptions.vitalsClock.core.bandsLow[].to number Upper value of the band (inclusive); omitted on the last band.
plotOptions.vitalsClock.core.bandsLow[].level 0 | 1 | 2 | 3 0 = normal ... 3 = highest; colour + pattern.
plotOptions.vitalsClock.core.bandsLow[].label string Text of the band in tooltip and table.
plotOptions.vitalsClock.core.bandsLowPolicy 'high-only' | 'shared' Span classification when bandsLow is absent; generic span default is shared, VitalsClock defaults high-only.
plotOptions.vitalsClock.core.bands RadialVitalsBand[] | Array<{ /** Upper value of the band (inclusive). / to: number /* Arc colour for values in the band. */ color: string }>
plotOptions.vitalsClock.core.bands[].to number Upper value of the band (inclusive); omitted on the last band.
plotOptions.vitalsClock.core.bands[].level 0 | 1 | 2 | 3 0 = normal ... 3 = highest; colour + pattern.
plotOptions.vitalsClock.core.bands[].label string Text of the band in tooltip and table.
plotOptions.vitalsClock.core.formatter (value: number) => string gauge: value formatter (centre, min/max ticks, tooltip)
plotOptions.vitalsClock.core.center boolean gauge: show the value in the chart centre (default true)
plotOptions.vitalsClock.core.scale boolean | 'linear' | 'log' gauge: min/max labels at the ends of a partial arc (boolean, default true); heatmap: colour scale, 'log' spaces the ramp by ratio (positive values; default 'linear')
plotOptions.vitalsClock.core.now object | boolean | number | string gauge with follow: the 'now' tick over the newest slot (default true)
plotOptions.vitalsClock.core.now.label string Text of the tick. Default: 'now'.
plotOptions.vitalsClock.core.now.color string Tick colour; not set uses the gauge colour.
plotOptions.vitalsClock.core.time object trace / span / vitalsNow (layers/vitals): the window the ring shows, ms or ISO.
plotOptions.vitalsClock.core.time.start number | string
plotOptions.vitalsClock.core.time.end number | string
plotOptions.vitalsClock.core.upto number bands / trace / span (layers/vitals): index of the current slot; later slots are "no data yet".
plotOptions.vitalsClock.core.endLabel string bands (layers/vitals): end label of the last slot (e.g. '24:00'); not set uses the last slot label.
plotOptions.vitalsClock.core.gapAfter number trace / span (layers/vitals): a gap longer than this many minutes breaks the line. Default: 3 slots.
plotOptions.vitalsClock.core.alarms Array<{ from: number | string, to?: number | string, label?: string }> vitalsNow (layers/vitals): caller alarm windows, drawn as wedges.
plotOptions.vitalsClock.core.status Array<{ name: string, text: string, ago?: number, stale?: boolean }> vitalsNow (layers/vitals): last value per parameter in the strip under the ring.
plotOptions.vitalsClock.core.note string vitalsNow (layers/vitals): a note in the strip, e.g. 'Demo data'.
plotOptions.vitalsClock.core.mode 'ridge' | 'overlay' | 'stack' | 'auto' | 'value' | 'status' wave: 'ridge' (default) staggers the rows in lanes that rise into the lane behind them; 'overlay' shares one translucent band; 'stack' piles the rows. matrix: 'status' colours cells by severity with patterns; 'auto' (default) = status once any cell has one; 'value' = value scale.
plotOptions.vitalsClock.core.overlap number wave ridge: how far a wave may rise into the lanes behind it, in lane steps (default 0.8; 0 = no overlap)
plotOptions.vitalsClock.core.sectors number | Array<string | RadialWaveSector> wave: the equal sectors (cycles) of the ring - a count, or names / objects in order (default 1)
plotOptions.vitalsClock.core.sectorLabels boolean wave: curved sector names on a band at the inner edge (default true when there are 2+ sectors and room)
plotOptions.vitalsClock.core.depth number wave: shading from crest to base, 0 = flat .. 1 = deep (default 0.55)
plotOptions.vitalsClock.core.curve 'smooth' | 'linear' wave: 'smooth' monotone cubic that never overshoots the data (default) or 'linear'
plotOptions.vitalsClock.core.anomalies RadialWaveAnomaly | false wave: anomaly spikes. Default: points outside their envelope. A list adds or relabels points; false = none; { color } recolours the automatic ones
plotOptions.vitalsClock.core.anomalies.series string Row name (layer-level lists; not set = every row).
plotOptions.vitalsClock.core.anomalies.at number | string Point index, or a point label (e.g. 'Wed 18:00').
plotOptions.vitalsClock.core.anomalies.label string Text in the tooltip, data table and rim marks.
plotOptions.vitalsClock.core.anomalies.kind string Kind shown when there is no label. Default: 'Anomaly' ('Above normal' / 'Below normal' for automatic ones).
plotOptions.vitalsClock.core.anomalies.color string Spike colour. Default: a rose red (lighter in dark mode).
plotOptions.vitalsClock.demo boolean | string Marks the chart as demo data (status strip and describe()).
plotOptions.vitalsClock.radialColumn RadialColumnOptions radialColumn options passed through.
plotOptions.vitalsClock.radialColumn.readabilityWarnings boolean Warn once if inner rings are thinner than 8 px or heat cells below 2 px per slot. No values/layers are removed. Default: true.
plotOptions.vitalsClock.radialColumn.aggregate 'sum' | 'mean' | 'max' | 'min' | 'none' how the column values combine in the centre, the generated description, tooltip footers and the filter note. 'sum' (default) adds them into a Total — right for counts and amounts only. Use 'max' / 'min' for latencies and percentiles ('Highest p95 latency (ms): 412 (Matching · 20:00)'), 'mean' for rates, percentages and scores, 'none' to name no combined number at all.
plotOptions.vitalsClock.radialColumn.link RadialColumnLink | RadialLinkMode links between inner layers and the column ring (a mode string or options)
plotOptions.vitalsClock.radialColumn.link.mode 'none' | 'category' | 'angle' | 'map' | 'auto' auto (default): a datum's own link, else matching category names, else the angle span
plotOptions.vitalsClock.radialColumn.link.map ((segment: RadialLinkSegment) => Array<number | string> | null | undefined) | Record<string, Array<number | string>> map mode: a function or an object keyed by 'A › B' path or name; values are category indices or names
plotOptions.vitalsClock.radialColumn.link.interaction 'highlight' | 'filter' | 'both' highlight on hover, filter (cross-filter / values) on click, or both. Default 'highlight'
plotOptions.vitalsClock.radialColumn.link.bidirectional boolean hovering a bar also lights its segments (default true)
plotOptions.vitalsClock.radialColumn.link.align boolean segments span exactly the angle of their linked bars (default false)
plotOptions.vitalsClock.radialColumn.link.indicator boolean bracket arc on the outer edge over the linked bars (default true)
plotOptions.vitalsClock.radialColumn.link.unit string what a category is, for tooltips and announcements ('18 of 72 time slots'). Default 'categories'. Name the real unit: categories that combine several things (service × day) are 'service-days', not 'days'.
plotOptions.vitalsClock.radialColumn.link.basis string how the categories are composed, appended in brackets ('18 of 140 service-days (10 services × 14 days)'). Default: none
plotOptions.vitalsClock.radialColumn.encode RadialColumnEncode bind colour / delta / length to separate metrics
plotOptions.vitalsClock.radialColumn.encode.angle string name of the angular dimension for the guide (default: xaxis.title.text or 'Category')
plotOptions.vitalsClock.radialColumn.encode.length 'value' | string bar length: 'value' (default) or a datum field
plotOptions.vitalsClock.radialColumn.encode.color RadialEncodeChannel | string bar colour = a separate metric
plotOptions.vitalsClock.radialColumn.encode.color.field string Datum field of the metric (datum.meta[field] or datum[field]).
plotOptions.vitalsClock.radialColumn.encode.color.values Array<number | null> One value per category instead of a field.
plotOptions.vitalsClock.radialColumn.encode.color.name string legend / tooltip name (default: the field)
plotOptions.vitalsClock.radialColumn.encode.color.unit string appended to values: '%' sticks, other units get a space
plotOptions.vitalsClock.radialColumn.encode.color.decimals number Decimals of the shown values; not set uses 0 from 100, 1 from 10, else 2.
plotOptions.vitalsClock.radialColumn.encode.color.format (value: number) => string (value) =&gt; string for the shown values (wins over decimals and unit).
plotOptions.vitalsClock.radialColumn.encode.color.legend boolean false: no key in the strip under the ring (default true)
plotOptions.vitalsClock.radialColumn.encode.color.show boolean false switches the channel off. Default: true.
plotOptions.vitalsClock.radialColumn.encode.color.scale 'sequential' | 'diverging' 'sequential' (low to high) or 'diverging' around mid. Default: 'sequential'.
plotOptions.vitalsClock.radialColumn.encode.color.domain number[] [lo, hi] or [lo, mid, hi]; default: data extent (diverging: symmetric around mid)
plotOptions.vitalsClock.radialColumn.encode.color.mid number diverging centre (default 0)
plotOptions.vitalsClock.radialColumn.encode.color.stops string[] Colour stops; not set uses ['#2dd4bf', '#facc15', '#f43f5e'] (diverging: blue, a neutral tone, orange).
plotOptions.vitalsClock.radialColumn.encode.color.reverse boolean Reverses the colour stops. Default: false.
plotOptions.vitalsClock.radialColumn.encode.delta RadialEncodeChannel | string change vs a previous period outside the bars
plotOptions.vitalsClock.radialColumn.encode.delta.field string Datum field of the metric (datum.meta[field] or datum[field]).
plotOptions.vitalsClock.radialColumn.encode.delta.values Array<number | null> One value per category instead of a field.
plotOptions.vitalsClock.radialColumn.encode.delta.name string legend / tooltip name (default: the field)
plotOptions.vitalsClock.radialColumn.encode.delta.unit string appended to values: '%' sticks, other units get a space
plotOptions.vitalsClock.radialColumn.encode.delta.decimals number Decimals of the shown values; not set uses 0 from 100, 1 from 10, else 2.
plotOptions.vitalsClock.radialColumn.encode.delta.format (value: number) => string (value) =&gt; string for the shown values (wins over decimals and unit).
plotOptions.vitalsClock.radialColumn.encode.delta.legend boolean false: no key in the strip under the ring (default true)
plotOptions.vitalsClock.radialColumn.encode.delta.show boolean false switches the channel off. Default: true.
plotOptions.vitalsClock.radialColumn.encode.delta.style 'band' | 'ticks' | 'bars' band: thin coloured ring; ticks: marks at the bar tips; bars: signed mini bars (out = up, in = down)
plotOptions.vitalsClock.radialColumn.encode.delta.colors object Colours of increases and decreases.
plotOptions.vitalsClock.radialColumn.encode.delta.colors.up string Colour of increases. Default: '#22c55e'.
plotOptions.vitalsClock.radialColumn.encode.delta.colors.down string Colour of decreases. Default: '#f43f5e'.
plotOptions.vitalsClock.radialColumn.encode.delta.max number |value| of full intensity / length (default: largest |value|)
plotOptions.vitalsClock.radialColumn.encode.guide object | boolean '?' button with a 'how to read' panel listing every bound channel
plotOptions.vitalsClock.radialColumn.encode.guide.show boolean false hides the guide button. Default: true.
plotOptions.vitalsClock.radialColumn.encode.guide.open boolean | 'always' start open (true: only when the chart is >= 560 px wide; 'always')
plotOptions.vitalsClock.radialColumn.markers Array<{ at: number | string label?: string kind?: string color?: string shape?: 'dot' | 'diamond' }> rim marks (deploys, pipeline runs, incidents): a small glyph outside the bars at a slot, a tooltip row on that slot and a guide row
plotOptions.vitalsClock.radialColumn.startAngle number degrees, 0 = 12 o'clock, clockwise; a partial range gives a gauge
plotOptions.vitalsClock.radialColumn.endAngle number End of the range in degrees (same convention as startAngle). Default: 360.
plotOptions.vitalsClock.radialColumn.innerRadius 'auto' | number | string base radius of the bars: 'auto', px, '40%' or a fraction of the outer radius
plotOptions.vitalsClock.radialColumn.barPadding 'auto' | number gap between neighbouring slots: 'auto' or a fraction of the slot (0..0.9)
plotOptions.vitalsClock.radialColumn.groupPadding number gap between the bars of one slot when grouped (fraction)
plotOptions.vitalsClock.radialColumn.stacked boolean stack series outward (falls back to chart.stacked)
plotOptions.vitalsClock.radialColumn.stackGap number Gap between stacked segments in px. Default: 1.
plotOptions.vitalsClock.radialColumn.rounded boolean rounded bar ends
plotOptions.vitalsClock.radialColumn.fill object Bar colours.
plotOptions.vitalsClock.radialColumn.fill.type 'auto' | 'spectrum' | 'series' | 'value' auto: spectrum for one uncoloured series, else series colours
plotOptions.vitalsClock.radialColumn.fill.stops string[] gradient stops (spectrum by angle, value by magnitude)
plotOptions.vitalsClock.radialColumn.fill.ranges object[] type 'value': fixed colours for value ranges (inclusive); values outside every range use the stops
plotOptions.vitalsClock.radialColumn.fill.ranges[].from number Lowest value of the range (inclusive).
plotOptions.vitalsClock.radialColumn.fill.ranges[].to number Highest value of the range (inclusive).
plotOptions.vitalsClock.radialColumn.fill.ranges[].color string Colour of bars in the range.
plotOptions.vitalsClock.radialColumn.fill.fade number inner fade of the bars, 0..1 (0 = off)
plotOptions.vitalsClock.radialColumn.track object Background track behind the bars.
plotOptions.vitalsClock.radialColumn.track.show boolean Shows the track. Default: false.
plotOptions.vitalsClock.radialColumn.track.color string Track colour; not set uses a faint text tone.
plotOptions.vitalsClock.radialColumn.baseline object Zero ring.
plotOptions.vitalsClock.radialColumn.baseline.show boolean Draws the ring at value 0. Default: true.
plotOptions.vitalsClock.radialColumn.valueAxis object Value scale of the bars.
plotOptions.vitalsClock.radialColumn.valueAxis.show boolean false hides the grid rings and value labels. Default: true.
plotOptions.vitalsClock.radialColumn.valueAxis.min number Fixed lower end; not set uses the data.
plotOptions.vitalsClock.radialColumn.valueAxis.max number Fixed upper end; not set uses the data.
plotOptions.vitalsClock.radialColumn.valueAxis.tickAmount number Target number of tick steps. Default: 4.
plotOptions.vitalsClock.radialColumn.valueAxis.nice boolean round free ends to the tightest whole tick step (3-6 ticks); false = data extent. Default true
plotOptions.vitalsClock.radialColumn.valueAxis.rings boolean Draws the grid rings at the ticks (the value labels sit on them). Default: true.
plotOptions.vitalsClock.radialColumn.valueAxis.labels object Tick labels of the value scale.
plotOptions.vitalsClock.radialColumn.valueAxis.labels.show boolean Shows the tick labels. Default: true.
plotOptions.vitalsClock.radialColumn.valueAxis.labels.formatter (value: number) => string (value, { w }) =&gt; string; not set uses a compact number.
plotOptions.vitalsClock.radialColumn.valueAxis.labels.readability RadialReadability labels that sit on bars: 'auto' (default) = untouched off the bars, contrasting colour over one fill, pill over mixed fills; 'none' = off. Layered over chart.readability
plotOptions.vitalsClock.radialColumn.valueAxis.labels.readability.mode 'none' | 'halo' | 'pill' | 'auto' | 'hide' 'auto' (default where on): nothing for labels off the marks, a contrasting text colour over one fill, a pill over mixed fills; 'hide' = skip labels that sit on marks
plotOptions.vitalsClock.radialColumn.valueAxis.labels.readability.fallback 'pill' | 'halo' | 'hide' what 'auto' escalates to over mixed fills or when no text colour reaches minRatio. Default 'pill'
plotOptions.vitalsClock.radialColumn.valueAxis.labels.readability.enabled boolean false switches the treatment off for this label kind
plotOptions.vitalsClock.radialColumn.valueAxis.labels.readability.contrast boolean swap the text to light/dark when it misses minRatio against what is under it (any mode)
plotOptions.vitalsClock.radialColumn.valueAxis.labels.readability.minRatio number WCAG 2 contrast ratio to reach. Default 4.5
plotOptions.vitalsClock.radialColumn.valueAxis.labels.readability.light string text/backdrop colour pair used by contrast and 'auto' fills. Defaults '#ffffff' / '#111827'
plotOptions.vitalsClock.radialColumn.valueAxis.labels.readability.dark string Dark colour of the pair. Default: '#111827'.
plotOptions.vitalsClock.radialColumn.valueAxis.labels.readability.background 'auto' | string colour under the chart; 'auto' = chart.background, else the first opaque ancestor
plotOptions.vitalsClock.radialColumn.valueAxis.labels.readability.halo object outline behind the glyphs; blur > 0 makes it a soft glow. Defaults width 3, color 'auto' (chart background), opacity 0.92
plotOptions.vitalsClock.radialColumn.valueAxis.labels.readability.halo.width number Outline width in pixels. Default: 3.
plotOptions.vitalsClock.radialColumn.valueAxis.labels.readability.halo.color 'auto' | string Outline colour; 'auto' uses the colour under the label or a contrasting one. Default: 'auto'.
plotOptions.vitalsClock.radialColumn.valueAxis.labels.readability.halo.opacity number Outline opacity (0 to 1). Default: 0.92.
plotOptions.vitalsClock.radialColumn.valueAxis.labels.readability.halo.blur number Blur in pixels; above 0 the outline becomes a soft glow. Default: 0.
plotOptions.vitalsClock.radialColumn.valueAxis.labels.readability.pill object backdrop box. padding = [vertical, horizontal]; offset = [dx, dy] px. Defaults fill 'auto', opacity 0.9, radius 4, padding [1, 4]
plotOptions.vitalsClock.radialColumn.valueAxis.labels.readability.pill.fill 'auto' | string Box colour; 'auto' uses the colour under the label or a contrasting one. Default: 'auto'.
plotOptions.vitalsClock.radialColumn.valueAxis.labels.readability.pill.opacity number Box opacity (0 to 1). Default: 0.9.
plotOptions.vitalsClock.radialColumn.valueAxis.labels.readability.pill.radius number Corner radius in pixels. Default: 4.
plotOptions.vitalsClock.radialColumn.valueAxis.labels.readability.pill.padding number | [number, number] Space around the text in pixels: one number, or [vertical, horizontal]. Default: [1, 4].
plotOptions.vitalsClock.radialColumn.valueAxis.labels.readability.pill.stroke string Outline colour of the box. Default: 'none'.
plotOptions.vitalsClock.radialColumn.valueAxis.labels.readability.pill.strokeWidth number Outline width in pixels. Default: 1.
plotOptions.vitalsClock.radialColumn.valueAxis.labels.readability.pill.offset [number, number] Shift of the box as [dx, dy] in pixels. Default: [0, 0].
plotOptions.vitalsClock.radialColumn.valueAxis.labels.readability.shadow object | boolean drop shadow on the pill (on the text in halo mode)
plotOptions.vitalsClock.radialColumn.valueAxis.labels.readability.shadow.dx number Horizontal shadow offset in pixels. Default: 0.
plotOptions.vitalsClock.radialColumn.valueAxis.labels.readability.shadow.dy number Vertical shadow offset in pixels. Default: 1.
plotOptions.vitalsClock.radialColumn.valueAxis.labels.readability.shadow.blur number Shadow blur in pixels. Default: 2.
plotOptions.vitalsClock.radialColumn.valueAxis.labels.readability.shadow.color string Shadow colour. Default: '#000000'.
plotOptions.vitalsClock.radialColumn.valueAxis.labels.readability.shadow.opacity number Shadow opacity (0 to 1). Default: 0.35.
plotOptions.vitalsClock.radialColumn.valueAxis.labels.readability.raise boolean axis labels sitting on marks are moved above the series (default true)
plotOptions.vitalsClock.radialColumn.valueAxis.labels.readability.each (info: WccReadabilityInfo) => WccReadability | null | undefined per label: return an override (or 'none') for this one label; called only when set
plotOptions.vitalsClock.radialColumn.valueAxis.labels.angle number | 'auto' where the scale sits: degrees (startAngle convention, 0 = 12 o'clock) or 'auto' = the slot boundary with the shortest bars on both sides. Default: the start of the range
plotOptions.vitalsClock.radialColumn.valueAxis.labels.pinAngle boolean 'auto' keeps the first angle it found across updates (no jumping scale). Default true
plotOptions.vitalsClock.radialColumn.categoryLabels object Category names around the ring.
plotOptions.vitalsClock.radialColumn.categoryLabels.show boolean Shows the category names. Default: true.
plotOptions.vitalsClock.radialColumn.categoryLabels.orientation 'auto' | 'horizontal' | 'radial' 'horizontal' or along the 'radial' direction; 'auto' keeps names horizontal when they fit their slot. Default: 'auto'.
plotOptions.vitalsClock.radialColumn.categoryLabels.offset number Distance from the bars in px. Default: 8.
plotOptions.vitalsClock.radialColumn.categoryLabels.maxWidth number Longest name in px before it is shortened. Default: 110.
plotOptions.vitalsClock.radialColumn.categoryLabels.step number label every n-th category (disables automatic thinning)
plotOptions.vitalsClock.radialColumn.categoryLabels.maxCount number most labels to show; default from the ring length (one per ~4 font sizes, 4-24)
plotOptions.vitalsClock.radialColumn.categoryLabels.formatter (category: string, opts: { index: number }) => string (category, { index }) =&gt; string for the name.
plotOptions.vitalsClock.radialColumn.center object Value and label in the hole.
plotOptions.vitalsClock.radialColumn.center.readability RadialReadability centre value + label readability (explicit modes; default none)
plotOptions.vitalsClock.radialColumn.center.readability.mode 'none' | 'halo' | 'pill' | 'auto' | 'hide' 'auto' (default where on): nothing for labels off the marks, a contrasting text colour over one fill, a pill over mixed fills; 'hide' = skip labels that sit on marks
plotOptions.vitalsClock.radialColumn.center.readability.fallback 'pill' | 'halo' | 'hide' what 'auto' escalates to over mixed fills or when no text colour reaches minRatio. Default 'pill'
plotOptions.vitalsClock.radialColumn.center.readability.enabled boolean false switches the treatment off for this label kind
plotOptions.vitalsClock.radialColumn.center.readability.contrast boolean swap the text to light/dark when it misses minRatio against what is under it (any mode)
plotOptions.vitalsClock.radialColumn.center.readability.minRatio number WCAG 2 contrast ratio to reach. Default 4.5
plotOptions.vitalsClock.radialColumn.center.readability.light string text/backdrop colour pair used by contrast and 'auto' fills. Defaults '#ffffff' / '#111827'
plotOptions.vitalsClock.radialColumn.center.readability.dark string Dark colour of the pair. Default: '#111827'.
plotOptions.vitalsClock.radialColumn.center.readability.background 'auto' | string colour under the chart; 'auto' = chart.background, else the first opaque ancestor
plotOptions.vitalsClock.radialColumn.center.readability.halo object outline behind the glyphs; blur > 0 makes it a soft glow. Defaults width 3, color 'auto' (chart background), opacity 0.92
plotOptions.vitalsClock.radialColumn.center.readability.halo.width number Outline width in pixels. Default: 3.
plotOptions.vitalsClock.radialColumn.center.readability.halo.color 'auto' | string Outline colour; 'auto' uses the colour under the label or a contrasting one. Default: 'auto'.
plotOptions.vitalsClock.radialColumn.center.readability.halo.opacity number Outline opacity (0 to 1). Default: 0.92.
plotOptions.vitalsClock.radialColumn.center.readability.halo.blur number Blur in pixels; above 0 the outline becomes a soft glow. Default: 0.
plotOptions.vitalsClock.radialColumn.center.readability.pill object backdrop box. padding = [vertical, horizontal]; offset = [dx, dy] px. Defaults fill 'auto', opacity 0.9, radius 4, padding [1, 4]
plotOptions.vitalsClock.radialColumn.center.readability.pill.fill 'auto' | string Box colour; 'auto' uses the colour under the label or a contrasting one. Default: 'auto'.
plotOptions.vitalsClock.radialColumn.center.readability.pill.opacity number Box opacity (0 to 1). Default: 0.9.
plotOptions.vitalsClock.radialColumn.center.readability.pill.radius number Corner radius in pixels. Default: 4.
plotOptions.vitalsClock.radialColumn.center.readability.pill.padding number | [number, number] Space around the text in pixels: one number, or [vertical, horizontal]. Default: [1, 4].
plotOptions.vitalsClock.radialColumn.center.readability.pill.stroke string Outline colour of the box. Default: 'none'.
plotOptions.vitalsClock.radialColumn.center.readability.pill.strokeWidth number Outline width in pixels. Default: 1.
plotOptions.vitalsClock.radialColumn.center.readability.pill.offset [number, number] Shift of the box as [dx, dy] in pixels. Default: [0, 0].
plotOptions.vitalsClock.radialColumn.center.readability.shadow object | boolean drop shadow on the pill (on the text in halo mode)
plotOptions.vitalsClock.radialColumn.center.readability.shadow.dx number Horizontal shadow offset in pixels. Default: 0.
plotOptions.vitalsClock.radialColumn.center.readability.shadow.dy number Vertical shadow offset in pixels. Default: 1.
plotOptions.vitalsClock.radialColumn.center.readability.shadow.blur number Shadow blur in pixels. Default: 2.
plotOptions.vitalsClock.radialColumn.center.readability.shadow.color string Shadow colour. Default: '#000000'.
plotOptions.vitalsClock.radialColumn.center.readability.shadow.opacity number Shadow opacity (0 to 1). Default: 0.35.
plotOptions.vitalsClock.radialColumn.center.readability.raise boolean axis labels sitting on marks are moved above the series (default true)
plotOptions.vitalsClock.radialColumn.center.readability.each (info: WccReadabilityInfo) => WccReadability | null | undefined per label: return an override (or 'none') for this one label; called only when set
plotOptions.vitalsClock.radialColumn.center.show boolean | 'auto' true always shows the centre; 'auto' shows it when the hole is at least 34 px. Default: 'auto'.
plotOptions.vitalsClock.radialColumn.center.label string Label under the value; not set uses the gauge layer name, 'Total' with columns, or the first layer name.
plotOptions.vitalsClock.radialColumn.center.value number | string | (() => string) Fixed value or text, or a function returning text; not set uses the gauge value or the total.
plotOptions.vitalsClock.radialColumn.center.formatter (value: number) => string (value, { w }) =&gt; string for a numeric centre value.
plotOptions.vitalsClock.radialColumn.center.hover boolean show the hovered slot / segment in the centre
plotOptions.vitalsClock.radialColumn.layers RadialColumnLayer[] Inner layers, innermost first. Default: [].
plotOptions.vitalsClock.radialColumn.layers[].type 'pie' | 'donut' | 'nestedDonut' | 'sunburst' | 'arc' | 'radialBar' | 'polarArea' | 'heatmap' | 'chord' | 'goals' | 'gauge' | 'wave' | 'matrix' | 'incident' | 'bands' | 'trace' | 'span' | 'vitalsNow' 'radialBar' is an alias of 'arc'; 'chord' is best as the innermost layer (its ribbons fill the centre)
plotOptions.vitalsClock.radialColumn.layers[].name string Layer name (legend, tooltip, centre label of a gauge).
plotOptions.vitalsClock.radialColumn.layers[].data RadialLayerDatum[] | Array<{ /** Ring name. / name?: string /* Segments or cells of the ring (inner first). */ data: Array<RadialLayerDatum | null> }> | Ar… pie/donut/arc/polarArea: segments; nestedDonut and heatmap: rings [{ name, data }] or number[][] (innermost first, heatmap cells may be null); sunburst: a node tree; chord: flows [from, to, value] or { from, to, value }; wave: rows RadialWaveSeries[] (or one plain number array = one row) matrix: rows × cols values or status names, flows [row, col, value], or RadialMatrixCell objects incident (west-coast-charts/layers/quint): RadialIncident windows, a wedge across every ring each
plotOptions.vitalsClock.radialColumn.layers[].data[].x string Name of the segment (alias of name).
plotOptions.vitalsClock.radialColumn.layers[].data[].name string Name of the segment.
plotOptions.vitalsClock.radialColumn.layers[].data[].y number Value of the segment (alias of value).
plotOptions.vitalsClock.radialColumn.layers[].data[].value number Value of the segment.
plotOptions.vitalsClock.radialColumn.layers[].data[].color string Colour of the segment.
plotOptions.vitalsClock.radialColumn.layers[].data[].max number Arc and goals layers: value of a full arc for this point.
plotOptions.vitalsClock.radialColumn.layers[].data[].target number goals: the ring's target (alias of max)
plotOptions.vitalsClock.radialColumn.layers[].data[].trackColor string goals: track colour of this ring (default: derived from the ring colour)
plotOptions.vitalsClock.radialColumn.layers[].data[].label string goals: ring label (default: the name)
plotOptions.vitalsClock.radialColumn.layers[].data[].children RadialLayerDatum[] Sunburst: child segments on the next ring.
plotOptions.vitalsClock.radialColumn.layers[].data[].link Array<number | string> linked categories (indices or names)
plotOptions.vitalsClock.radialColumn.layers[].data[].keys string[] semantic keys (e.g. a service id): marks of other layers sharing a key light together; a sunburst parent takes the union of its children
plotOptions.vitalsClock.radialColumn.layers[].data[].values Array<number | null> this segment's own outer values (filter interaction)
plotOptions.vitalsClock.radialColumn.layers[].data[].from string Source group id.
plotOptions.vitalsClock.radialColumn.layers[].data[].to string Target group id.
plotOptions.vitalsClock.radialColumn.layers[].data[].data Array<number | null | [unknown, number | null] | { y: number | null }> One value per point; null = gap. Numbers, [x, y] or { y }.
plotOptions.vitalsClock.radialColumn.layers[].data[].envelope object Normal range per point: a soft band behind the wave; points outside it are anomalies.
plotOptions.vitalsClock.radialColumn.layers[].data[].envelope.lo Array<number | null> Lower bound per point.
plotOptions.vitalsClock.radialColumn.layers[].data[].envelope.hi Array<number | null> Upper bound per point.
plotOptions.vitalsClock.radialColumn.layers[].data[].forecast object Forecast per point (usually null up to now): dashed crest, optional hatched range.
plotOptions.vitalsClock.radialColumn.layers[].data[].forecast.data Array<number | null> Forecast values.
plotOptions.vitalsClock.radialColumn.layers[].data[].forecast.lo Array<number | null> Lower bound of the forecast range.
plotOptions.vitalsClock.radialColumn.layers[].data[].forecast.hi Array<number | null> Upper bound of the forecast range.
plotOptions.vitalsClock.radialColumn.layers[].data[].anomalies RadialWaveAnomaly[] Anomalies of this row (as layer anomalies, without series).
plotOptions.vitalsClock.radialColumn.layers[].data[].anomalies[].series string Row name (layer-level lists; not set = every row).
plotOptions.vitalsClock.radialColumn.layers[].data[].anomalies[].at number | string Point index, or a point label (e.g. 'Wed 18:00').
plotOptions.vitalsClock.radialColumn.layers[].data[].anomalies[].label string Text in the tooltip, data table and rim marks.
plotOptions.vitalsClock.radialColumn.layers[].data[].anomalies[].kind string Kind shown when there is no label. Default: 'Anomaly' ('Above normal' / 'Below normal' for automatic ones).
plotOptions.vitalsClock.radialColumn.layers[].data[].anomalies[].color string Spike colour. Default: a rose red (lighter in dark mode).
plotOptions.vitalsClock.radialColumn.layers[].data[].row string Row id (or name).
plotOptions.vitalsClock.radialColumn.layers[].data[].col string Column id (or name).
plotOptions.vitalsClock.radialColumn.layers[].data[].status string Status name (ok, info, warn, crit, unknown or one of statuses).
plotOptions.vitalsClock.radialColumn.layers[].series number | string take the data from config.series (index or name) instead; that series leaves the column ring
plotOptions.vitalsClock.radialColumn.layers[].labels string[] segment names for plain number data; wave: point labels, one per point (e.g. '14:00 Tue') or one per sector point ('14:00', shown as 'Tue 14:00')
plotOptions.vitalsClock.radialColumn.layers[].thickness number | string ring thickness: px, '30%' of the available radius, or a fraction (0..1)
plotOptions.vitalsClock.radialColumn.layers[].gap number px between this layer and the one inside it (default 6)
plotOptions.vitalsClock.radialColumn.layers[].ringGap number px between the rings of a nestedDonut / sunburst / arc layer (default 2)
plotOptions.vitalsClock.radialColumn.layers[].padding number constant px gap between neighbouring segments
plotOptions.vitalsClock.radialColumn.layers[].corner number corner radius of segment ends, px
plotOptions.vitalsClock.radialColumn.layers[].colors string[] Own palette of the layer; heatmap: two or more colours are the ramp stops, low to high.
plotOptions.vitalsClock.radialColumn.layers[].colorBy 'spectrum' colour segments from the column ring's spectrum by angle
plotOptions.vitalsClock.radialColumn.layers[].legend boolean keep this layer's segments out of the legend
plotOptions.vitalsClock.radialColumn.layers[].link RadialColumnLink | boolean | RadialLinkMode link to the column ring for this layer: false = none, a mode, or options overriding plotOptions.radialColumn.link
plotOptions.vitalsClock.radialColumn.layers[].link.mode 'none' | 'category' | 'angle' | 'map' | 'auto' auto (default): a datum's own link, else matching category names, else the angle span
plotOptions.vitalsClock.radialColumn.layers[].link.map ((segment: RadialLinkSegment) => Array<number | string> | null | undefined) | Record<string, Array<number | string>> map mode: a function or an object keyed by 'A › B' path or name; values are category indices or names
plotOptions.vitalsClock.radialColumn.layers[].link.interaction 'highlight' | 'filter' | 'both' highlight on hover, filter (cross-filter / values) on click, or both. Default 'highlight'
plotOptions.vitalsClock.radialColumn.layers[].link.bidirectional boolean hovering a bar also lights its segments (default true)
plotOptions.vitalsClock.radialColumn.layers[].link.align boolean segments span exactly the angle of their linked bars (default false)
plotOptions.vitalsClock.radialColumn.layers[].link.indicator boolean bracket arc on the outer edge over the linked bars (default true)
plotOptions.vitalsClock.radialColumn.layers[].link.unit string what a category is, for tooltips and announcements ('18 of 72 time slots'). Default 'categories'. Name the real unit: categories that combine several things (service × day) are 'service-days', not 'days'.
plotOptions.vitalsClock.radialColumn.layers[].link.basis string how the categories are composed, appended in brackets ('18 of 140 service-days (10 services × 14 days)'). Default: none
plotOptions.vitalsClock.radialColumn.layers[].align boolean shorthand for link.align
plotOptions.vitalsClock.radialColumn.layers[].trackColor string Track colour of arc, goals and gauge layers; not set uses a faint text tone (goals: a tone of the ring colour).
plotOptions.vitalsClock.radialColumn.layers[].startAngle number degrees, 0 = 12 o'clock, clockwise; default: the chart's range
plotOptions.vitalsClock.radialColumn.layers[].endAngle number End angle in degrees (same convention as startAngle); not set uses the chart's range.
plotOptions.vitalsClock.radialColumn.layers[].min number arc layers: value range of a full arc (default 0..100; per point via datum.max); wave: base of the height scale (default min(0, data))
plotOptions.vitalsClock.radialColumn.layers[].max number Arc layers: value of a full arc. Default: 100. Wave: top of the height scale (default: the data, envelopes and forecasts rounded up to a nice tick).
plotOptions.vitalsClock.radialColumn.layers[].color RadialMatrixScale | string heatmap / matrix: base colour of the default ramp (surface tone -> colour -> towards the text colour); colors (2+) overrides the ramp. matrix (value mode) also takes a colour scale.
plotOptions.vitalsClock.radialColumn.layers[].color.scale 'sequential' | 'diverging' 'sequential' (low to high) or 'diverging' around mid. Default: 'sequential'.
plotOptions.vitalsClock.radialColumn.layers[].color.domain number[] [lo, hi] or [lo, mid, hi]; default: data extent.
plotOptions.vitalsClock.radialColumn.layers[].color.mid number Diverging centre. Default: 0.
plotOptions.vitalsClock.radialColumn.layers[].color.stops string[] Colour stops, low to high.
plotOptions.vitalsClock.radialColumn.layers[].color.reverse boolean Reverses the colour stops. Default: false.
plotOptions.vitalsClock.radialColumn.layers[].groups RadialChordGroup[] chord: group definitions (order, names, colours, linked categories)
plotOptions.vitalsClock.radialColumn.layers[].groups[].id string Group id used in the flows.
plotOptions.vitalsClock.radialColumn.layers[].groups[].name string Shown name; not set uses the id.
plotOptions.vitalsClock.radialColumn.layers[].groups[].color string Group colour.
plotOptions.vitalsClock.radialColumn.layers[].groups[].values number[] per-group values (shown in its tooltip)
plotOptions.vitalsClock.radialColumn.layers[].groups[].link string | number | Array<string | number> categories (names or indices) of the column ring this group links to (overrides link.map)
plotOptions.vitalsClock.radialColumn.layers[].matrix number[][] chord: a square flow matrix instead of data; row = source, column = target (with labels)
plotOptions.vitalsClock.radialColumn.layers[].directed boolean chord: directed flows give each end its own share (A->B and B->A differ)
plotOptions.vitalsClock.radialColumn.layers[].sort 'none' | 'asc' | 'desc' chord: order of the groups around the ring (default: as given)
plotOptions.vitalsClock.radialColumn.layers[].ringWidth number chord: px width of the group arcs (default: the layer thickness)
plotOptions.vitalsClock.radialColumn.layers[].ribbon object chord ribbons
plotOptions.vitalsClock.radialColumn.layers[].ribbon.opacity number Ribbon opacity; not set uses 0.52 (0.6 in dark mode).
plotOptions.vitalsClock.radialColumn.layers[].ribbon.colorMode 'source' | 'target' | 'gradient' Ribbon colour from the 'source' group, the 'target' group, or a 'gradient' between both. Default: 'source'.
plotOptions.vitalsClock.radialColumn.layers[].ribbon.padding number Gap between the group arcs and the ribbon ends in px. Default: 2.
plotOptions.vitalsClock.radialColumn.layers[].target number goals: default target of every ring (datum target/max wins; default 100)
plotOptions.vitalsClock.radialColumn.layers[].maxLaps number goals: laps drawn past 100 % (default 2, i.e. up to 300 %)
plotOptions.vitalsClock.radialColumn.layers[].ringLabels boolean curved labels on the segments: goals from the ring start (default true); any other layer centred on each segment, upright in the lower half (default false)
plotOptions.vitalsClock.radialColumn.layers[].ringTitles boolean incident: name the heatmap rings (curved, in the gap outside each ring, at 12 o'clock) and add their colour scales to the key under the ring (default true)
plotOptions.vitalsClock.radialColumn.layers[].legendTitle string header of this layer's entries in a right-hand legend (e.g. 'Regions'); entries of consecutive layers sharing a title form one group
plotOptions.vitalsClock.radialColumn.layers[].rows Array<string | RadialMatrixHeader | RadialVitalsRow> matrix: row headers (ids, or definitions with keys / link); default: the ids used in flow data
plotOptions.vitalsClock.radialColumn.layers[].cols Array<string | RadialMatrixHeader> matrix: column headers; default: the rows (square adjacency matrix)
plotOptions.vitalsClock.radialColumn.layers[].statuses Record<string, RadialMatrixStatus> matrix: adds or overrides statuses (built in: ok, info, warn, crit, unknown)
plotOptions.vitalsClock.radialColumn.layers[].headers object | boolean matrix: row / column header labels (false hides them)
plotOptions.vitalsClock.radialColumn.layers[].headers.show boolean false hides the headers. Default: true.
plotOptions.vitalsClock.radialColumn.layers[].headers.fontSize number Largest header font size in px; it shrinks to 9 px before labels are cut. Default: theme font size − 1.
plotOptions.vitalsClock.radialColumn.layers[].headers.readability RadialReadability Label readability of the headers (explicit modes only, e.g. 'pill' / 'halo').
plotOptions.vitalsClock.radialColumn.layers[].headers.readability.mode 'none' | 'halo' | 'pill' | 'auto' | 'hide' 'auto' (default where on): nothing for labels off the marks, a contrasting text colour over one fill, a pill over mixed fills; 'hide' = skip labels that sit on marks
plotOptions.vitalsClock.radialColumn.layers[].headers.readability.fallback 'pill' | 'halo' | 'hide' what 'auto' escalates to over mixed fills or when no text colour reaches minRatio. Default 'pill'
plotOptions.vitalsClock.radialColumn.layers[].headers.readability.enabled boolean false switches the treatment off for this label kind
plotOptions.vitalsClock.radialColumn.layers[].headers.readability.contrast boolean swap the text to light/dark when it misses minRatio against what is under it (any mode)
plotOptions.vitalsClock.radialColumn.layers[].headers.readability.minRatio number WCAG 2 contrast ratio to reach. Default 4.5
plotOptions.vitalsClock.radialColumn.layers[].headers.readability.light string text/backdrop colour pair used by contrast and 'auto' fills. Defaults '#ffffff' / '#111827'
plotOptions.vitalsClock.radialColumn.layers[].headers.readability.dark string Dark colour of the pair. Default: '#111827'.
plotOptions.vitalsClock.radialColumn.layers[].headers.readability.background 'auto' | string colour under the chart; 'auto' = chart.background, else the first opaque ancestor
plotOptions.vitalsClock.radialColumn.layers[].headers.readability.halo object outline behind the glyphs; blur > 0 makes it a soft glow. Defaults width 3, color 'auto' (chart background), opacity 0.92
plotOptions.vitalsClock.radialColumn.layers[].headers.readability.halo.width number Outline width in pixels. Default: 3.
plotOptions.vitalsClock.radialColumn.layers[].headers.readability.halo.color 'auto' | string Outline colour; 'auto' uses the colour under the label or a contrasting one. Default: 'auto'.
plotOptions.vitalsClock.radialColumn.layers[].headers.readability.halo.opacity number Outline opacity (0 to 1). Default: 0.92.
plotOptions.vitalsClock.radialColumn.layers[].headers.readability.halo.blur number Blur in pixels; above 0 the outline becomes a soft glow. Default: 0.
plotOptions.vitalsClock.radialColumn.layers[].headers.readability.pill object backdrop box. padding = [vertical, horizontal]; offset = [dx, dy] px. Defaults fill 'auto', opacity 0.9, radius 4, padding [1, 4]
plotOptions.vitalsClock.radialColumn.layers[].headers.readability.pill.fill 'auto' | string Box colour; 'auto' uses the colour under the label or a contrasting one. Default: 'auto'.
plotOptions.vitalsClock.radialColumn.layers[].headers.readability.pill.opacity number Box opacity (0 to 1). Default: 0.9.
plotOptions.vitalsClock.radialColumn.layers[].headers.readability.pill.radius number Corner radius in pixels. Default: 4.
plotOptions.vitalsClock.radialColumn.layers[].headers.readability.pill.padding number | [number, number] Space around the text in pixels: one number, or [vertical, horizontal]. Default: [1, 4].
plotOptions.vitalsClock.radialColumn.layers[].headers.readability.pill.stroke string Outline colour of the box. Default: 'none'.
plotOptions.vitalsClock.radialColumn.layers[].headers.readability.pill.strokeWidth number Outline width in pixels. Default: 1.
plotOptions.vitalsClock.radialColumn.layers[].headers.readability.pill.offset [number, number] Shift of the box as [dx, dy] in pixels. Default: [0, 0].
plotOptions.vitalsClock.radialColumn.layers[].headers.readability.shadow object | boolean drop shadow on the pill (on the text in halo mode)
plotOptions.vitalsClock.radialColumn.layers[].headers.readability.shadow.dx number Horizontal shadow offset in pixels. Default: 0.
plotOptions.vitalsClock.radialColumn.layers[].headers.readability.shadow.dy number Vertical shadow offset in pixels. Default: 1.
plotOptions.vitalsClock.radialColumn.layers[].headers.readability.shadow.blur number Shadow blur in pixels. Default: 2.
plotOptions.vitalsClock.radialColumn.layers[].headers.readability.shadow.color string Shadow colour. Default: '#000000'.
plotOptions.vitalsClock.radialColumn.layers[].headers.readability.shadow.opacity number Shadow opacity (0 to 1). Default: 0.35.
plotOptions.vitalsClock.radialColumn.layers[].headers.readability.raise boolean axis labels sitting on marks are moved above the series (default true)
plotOptions.vitalsClock.radialColumn.layers[].headers.readability.each (info: WccReadabilityInfo) => WccReadability | null | undefined per label: return an override (or 'none') for this one label; called only when set
plotOptions.vitalsClock.radialColumn.layers[].values boolean | 'auto' matrix: print the value inside a cell ('auto': when it fits). Default: 'auto'.
plotOptions.vitalsClock.radialColumn.layers[].minCell number matrix: smallest cell in px before rows / columns are merged or dropped. Default: 6.
plotOptions.vitalsClock.radialColumn.layers[].overflow 'aggregate' | 'truncate' matrix: rows / columns past minCell merge into one '+N' row / column ('aggregate'), or are dropped with a '+N' note ('truncate'). Default: 'aggregate'.
plotOptions.vitalsClock.radialColumn.layers[].aggregate 'sum' | 'max' | 'mean' | 'min' | 'median' | 'last' matrix: how merged cells and row / column headers combine values (statuses: always the worst). Default: 'sum' (header tooltip 'Total'); use 'max' / 'mean' / 'min' for non-additive cells such as latencies or rates ('Highest', 'Average', 'Lowest').
plotOptions.vitalsClock.radialColumn.layers[].inset number matrix: px between the grid (with its headers) and the edge of the centre disc. Default: 6.
plotOptions.vitalsClock.radialColumn.layers[].unit string matrix: appended to values in cells, tooltip and table; heatmap: appended to the value in the slot tooltip
plotOptions.vitalsClock.radialColumn.layers[].value number gauge: the value (else data[0])
plotOptions.vitalsClock.radialColumn.layers[].follow string | number | boolean gauge: take the latest value of this column series (name, index or true = first); it stays in the ring
plotOptions.vitalsClock.radialColumn.layers[].bandsLow RadialVitalsBand[] gauge: colour by value band, ascending: [{ to: 60, color }] Span lower-value bands. Missing keeps the generic shared fallback; choose a policy explicitly to avoid a warning.
plotOptions.vitalsClock.radialColumn.layers[].bandsLow[].to number Upper value of the band (inclusive); omitted on the last band.
plotOptions.vitalsClock.radialColumn.layers[].bandsLow[].level 0 | 1 | 2 | 3 0 = normal ... 3 = highest; colour + pattern.
plotOptions.vitalsClock.radialColumn.layers[].bandsLow[].label string Text of the band in tooltip and table.
plotOptions.vitalsClock.radialColumn.layers[].bandsLowPolicy 'high-only' | 'shared' Span classification when bandsLow is absent; generic span default is shared, VitalsClock defaults high-only.
plotOptions.vitalsClock.radialColumn.layers[].bands RadialVitalsBand[] | Array<{ /** Upper value of the band (inclusive). / to: number /* Arc colour for values in the band. */ color: string }>
plotOptions.vitalsClock.radialColumn.layers[].bands[].to number Upper value of the band (inclusive); omitted on the last band.
plotOptions.vitalsClock.radialColumn.layers[].bands[].level 0 | 1 | 2 | 3 0 = normal ... 3 = highest; colour + pattern.
plotOptions.vitalsClock.radialColumn.layers[].bands[].label string Text of the band in tooltip and table.
plotOptions.vitalsClock.radialColumn.layers[].formatter (value: number) => string gauge: value formatter (centre, min/max ticks, tooltip)
plotOptions.vitalsClock.radialColumn.layers[].center boolean gauge: show the value in the chart centre (default true)
plotOptions.vitalsClock.radialColumn.layers[].scale boolean | 'linear' | 'log' gauge: min/max labels at the ends of a partial arc (boolean, default true); heatmap: colour scale, 'log' spaces the ramp by ratio (positive values; default 'linear')
plotOptions.vitalsClock.radialColumn.layers[].now object | boolean | number | string gauge with follow: the 'now' tick over the newest slot (default true)
plotOptions.vitalsClock.radialColumn.layers[].now.label string Text of the tick. Default: 'now'.
plotOptions.vitalsClock.radialColumn.layers[].now.color string Tick colour; not set uses the gauge colour.
plotOptions.vitalsClock.radialColumn.layers[].time object trace / span / vitalsNow (layers/vitals): the window the ring shows, ms or ISO.
plotOptions.vitalsClock.radialColumn.layers[].time.start number | string
plotOptions.vitalsClock.radialColumn.layers[].time.end number | string
plotOptions.vitalsClock.radialColumn.layers[].upto number bands / trace / span (layers/vitals): index of the current slot; later slots are "no data yet".
plotOptions.vitalsClock.radialColumn.layers[].endLabel string bands (layers/vitals): end label of the last slot (e.g. '24:00'); not set uses the last slot label.
plotOptions.vitalsClock.radialColumn.layers[].gapAfter number trace / span (layers/vitals): a gap longer than this many minutes breaks the line. Default: 3 slots.
plotOptions.vitalsClock.radialColumn.layers[].alarms Array<{ from: number | string, to?: number | string, label?: string }> vitalsNow (layers/vitals): caller alarm windows, drawn as wedges.
plotOptions.vitalsClock.radialColumn.layers[].status Array<{ name: string, text: string, ago?: number, stale?: boolean }> vitalsNow (layers/vitals): last value per parameter in the strip under the ring.
plotOptions.vitalsClock.radialColumn.layers[].note string vitalsNow (layers/vitals): a note in the strip, e.g. 'Demo data'.
plotOptions.vitalsClock.radialColumn.layers[].mode 'ridge' | 'overlay' | 'stack' | 'auto' | 'value' | 'status' wave: 'ridge' (default) staggers the rows in lanes that rise into the lane behind them; 'overlay' shares one translucent band; 'stack' piles the rows. matrix: 'status' colours cells by severity with patterns; 'auto' (default) = status once any cell has one; 'value' = value scale.
plotOptions.vitalsClock.radialColumn.layers[].overlap number wave ridge: how far a wave may rise into the lanes behind it, in lane steps (default 0.8; 0 = no overlap)
plotOptions.vitalsClock.radialColumn.layers[].sectors number | Array<string | RadialWaveSector> wave: the equal sectors (cycles) of the ring - a count, or names / objects in order (default 1)
plotOptions.vitalsClock.radialColumn.layers[].sectorLabels boolean wave: curved sector names on a band at the inner edge (default true when there are 2+ sectors and room)
plotOptions.vitalsClock.radialColumn.layers[].depth number wave: shading from crest to base, 0 = flat .. 1 = deep (default 0.55)
plotOptions.vitalsClock.radialColumn.layers[].curve 'smooth' | 'linear' wave: 'smooth' monotone cubic that never overshoots the data (default) or 'linear'
plotOptions.vitalsClock.radialColumn.layers[].anomalies RadialWaveAnomaly | false wave: anomaly spikes. Default: points outside their envelope. A list adds or relabels points; false = none; { color } recolours the automatic ones
plotOptions.vitalsClock.radialColumn.layers[].anomalies.series string Row name (layer-level lists; not set = every row).
plotOptions.vitalsClock.radialColumn.layers[].anomalies.at number | string Point index, or a point label (e.g. 'Wed 18:00').
plotOptions.vitalsClock.radialColumn.layers[].anomalies.label string Text in the tooltip, data table and rim marks.
plotOptions.vitalsClock.radialColumn.layers[].anomalies.kind string Kind shown when there is no label. Default: 'Anomaly' ('Above normal' / 'Below normal' for automatic ones).
plotOptions.vitalsClock.radialColumn.layers[].anomalies.color string Spike colour. Default: a rose red (lighter in dark mode).
plotOptions.vitalsClock.radialColumn.layerGap number px between the outermost inner layer and the column ring
plotOptions.vitalsClock.radialColumn.hole 'auto' | number | string radius of the empty centre: 'auto', px, '%' or fraction of the space inside the column ring
plotOptions.vitalsClock.radialColumn.legend object Legend of series and layer items.
plotOptions.vitalsClock.radialColumn.legend.show boolean | 'auto' true always shows it; 'auto' from two items. Default: 'auto'.
plotOptions.vitalsClock.radialColumn.legend.position 'auto' | 'right' | 'bottom' 'right' or 'bottom'; 'auto' uses the right on wide plots. Default: 'auto'.

plotOptions.vitalsClock.params[]

One parameter (WccVitalsParam), outermost ring first.

Option Type Description
plotOptions.vitalsClock.params[].id string Parameter id.
plotOptions.vitalsClock.params[].title string Ring title, e.g. 'Herzfrequenz'.
plotOptions.vitalsClock.params[].short string Short name in the status strip and describe(), e.g. 'HF'.
plotOptions.vitalsClock.params[].unit string Unit, e.g. '/min', '%', 'mmHg'.
plotOptions.vitalsClock.params[].kind 'columns' | 'cells' | 'trace' | 'range' 'columns' = the column ring (median per slot), 'cells' = band cells, 'trace' = line at true times, 'range' = high / low pairs.
plotOptions.vitalsClock.params[].aggregate 'median' | 'min' | 'max' | 'last' | 'mean' Per-slot aggregation for columns and cells. Default: 'median'.
plotOptions.vitalsClock.params[].bands RadialVitalsBand[] The caller's threshold bands (no built-in clinical thresholds).
plotOptions.vitalsClock.params[].bands[].to number Upper value of the band (inclusive); omitted on the last band.
plotOptions.vitalsClock.params[].bands[].level 0 | 1 | 2 | 3 0 = normal ... 3 = highest; colour + pattern.
plotOptions.vitalsClock.params[].bands[].label string Text of the band in tooltip and table.
plotOptions.vitalsClock.params[].data Array<[number | string, number] | [number | string, number, number]> Measurements: [time, value] or, for 'range', [time, high, low]; time = ms or ISO.
plotOptions.vitalsClock.params[].staleAfter number | string After this long the last value is shown as stale: minutes, or a duration such as '4h'.
plotOptions.vitalsClock.params[].decimals number Decimals at most in labels and tooltips. Default: 1.
plotOptions.vitalsClock.params[].color string Ring colour; not set uses the palette.
plotOptions.vitalsClock.params[].bandsLow RadialVitalsBand[] 'range': caller-supplied bands for the low value, independent of the high-value bands.
plotOptions.vitalsClock.params[].bandsLow[].to number Upper value of the band (inclusive); omitted on the last band.
plotOptions.vitalsClock.params[].bandsLow[].level 0 | 1 | 2 | 3 0 = normal ... 3 = highest; colour + pattern.
plotOptions.vitalsClock.params[].bandsLow[].label string Text of the band in tooltip and table.
plotOptions.vitalsClock.params[].bandsLowPolicy 'high-only' | 'shared' Missing low bands: classify only high (default) or explicitly share high bands. An implicit high-only fallback warns once.
plotOptions.vitalsClock.params[].gapAfter number 'trace' / 'range': a gap longer than this many minutes breaks the line. Default: 3 slots.
plotOptions.vitalsClock.params[].min number Lower end of the value scale.
plotOptions.vitalsClock.params[].max number Upper end of the value scale.

plotOptions.schedule

Chart type schedule (WccScheduleOptions), premium type module west-coast-charts/layers/schedule (guide).

Option Type Description
plotOptions.schedule.plugins WccPremiumPluginRef[] Plugins of this chart: plugin objects, registered names, or [nameOrPlugin, options].
plotOptions.schedule.plugins[].name string Plugin id (state key and warnings); not set uses plugin-&lt;index&gt;.
plotOptions.schedule.plugins[].defaults object Default options of the plugin; the [nameOrPlugin, options] form overrides them.
plotOptions.schedule.plugins[].reserve() (p: any): { top?: number; right?: number; bottom?: number; left?: number } | void (p) =&gt; { top, right, bottom, left }: space in px taken from the plot before layout.
plotOptions.schedule.plugins[].afterRender() (p: any): void (p): called after each render; draw into p.layer() and bind events with p.on().
plotOptions.schedule.plugins[].event() (name: string, e: Event | null, payload: any, p: any): boolean | void (name, e, payload, p): called for every chart event; returning false cancels a cancelable one.
plotOptions.schedule.plugins[].tooltip() (content: any, p: any): any (content, p) =&gt; content: changes the tooltip content (rows, footer, …).
plotOptions.schedule.plugins[].describe() (p: any): string (p) =&gt; string appended to the screen-reader summary.
plotOptions.schedule.plugins[].destroy() (p: any): void (p): called before each redraw and on destroy.
plotOptions.schedule.date string The day shown (YYYY-MM-DD in timeZone; a week starts on its Monday).
plotOptions.schedule.range 'day' | 'week' Default: 'day'.
plotOptions.schedule.timeZone string IANA zone of the wall-clock times.
plotOptions.schedule.now number | string The current time (now line).
plotOptions.schedule.resources Array<{ id: string, name?: string, kind?: 'room' | 'device' | 'staff' }>
plotOptions.schedule.people Array<{ id: string, name?: string, role?: string, color?: string, dash?: string }> Doctors and staff: colour + dash identify a person's route.
plotOptions.schedule.items Array<{ id: string, resource: string, start: number | string, end: number | string, people?: string[], patient?: string, label?: string, status?: 'confirmed'… Appointments; start / end as ms, ISO or 'HH:MM' on date. patient is a pseudonymous id, hidden unless redact: false.
plotOptions.schedule.hours object Opening hours: closed time and breaks are hatched; appointments outside are a warning.
plotOptions.schedule.hours.open string
plotOptions.schedule.hours.close string
plotOptions.schedule.hours.days number[]
plotOptions.schedule.hours.breaks Array<[string, string]>
plotOptions.schedule.rules object A changeover between two rooms below minTransfer is a warning. Default: '5min'.
plotOptions.schedule.rules.minTransfer string | number
plotOptions.schedule.view 'auto' | 'lanes' | 'board' 'lanes' (horizontal), 'board' (vertical), 'auto' = board below 560 px. Default: 'auto'.
plotOptions.schedule.lanes 'resources' | 'people' Lanes per resource or per person. Default: 'resources'.
plotOptions.schedule.routes boolean Draw a route per person. Default: true.
plotOptions.schedule.snap number Snap of drag / keyboard moves in minutes. Default: 15.
plotOptions.schedule.editable boolean Drag / resize / keyboard moves emit 'scheduleChange' proposals (data is never changed). Default: true.
plotOptions.schedule.redact boolean Keep patient ids out of describe(), tooltips and the table. Default: true.
plotOptions.schedule.filter object Only appointments of these people.
plotOptions.schedule.filter.people string | string[]
plotOptions.schedule.legend object
plotOptions.schedule.legend.show boolean
plotOptions.schedule.conflicts object Conflict summary in the header and the number of listed conflicts. Default: { show: true, list: 3 }.
plotOptions.schedule.conflicts.show boolean
plotOptions.schedule.conflicts.list number

Runtime API: common commands

premium.api(chart) returns these for every premium type (PremiumApiBase), plus the commands of the type below. commands lists the names the current renderer offers.

Option Type Description
api.type T The chart type the commands belong to.
api.describe() (): string the generated screen-reader summary
api.dataTable() (): { head: string[]; rows: any[][] } | null the rows of the accessible data table (also used for CSV)
api.clearHighlight() (): void Removes the current hover or keyboard highlight.

Runtime API: drill-down (map, sankey)

DrillApi.

Option Type Description
api.drillDown() (id: Id): Promise<boolean> open the level of a drillable item; false when it is not drillable or the drill was cancelled
api.drillUp() (depth?: number): Promise<boolean> Goes back to an earlier level: depth 0 is the top level; no argument goes up one level. Resolves to false when already at the top or when the drillup event cancels it.
api.drillPath() (): string[] Breadcrumb labels from the top level to the open level; [] at the top level.

Runtime API: sankey

premium.api<SankeyApi>(chart).

Option Type Description
api.highlight() (id: Id | null): void highlight the flows of a node; null clears
api.resetPositions() (): Promise<void> drop dragged node offsets
api.nodes() (): { id: Id; name: string; value: number; column: number; color: string }[] Every laid-out node with its value, column index and fill colour.
api.nodeBox() (id: Id): { x: number; y: number; width: number; height: number } | null a node's box in chart coordinates

Runtime API: gantt

premium.api<GanttApi>(chart).

Option Type Description
api.scrollTo() (id: Id): boolean Opens the task's collapsed group, scrolls the task into view (rows and time) and highlights it; false when the id is unknown.
api.select() (id: Id | Id[] | null): void Replaces the selection with one id, a list of ids, or nothing (null).
api.selected() (): Id[] Ids of the selected tasks.
api.toggleGroup() (name: string): void Collapses or expands a group row by name.
api.expandAll() (): void Expands every group.
api.collapseAll() (): void Collapses every group.
api.setView() (min: WccDate, max: WccDate, animate?: boolean): void Sets the visible time window; animated unless animate is false. Ignored when max is not after min.
api.view() (): [number, number] | null The visible time window as [min, max] timestamps; null before the first render.
api.fit() (): void Animates the view back to the window that fits every task.
api.zoomBy() (factor: number): void Zooms the time axis around the centre of the view; factor > 1 zooms in, < 1 zooms out.
api.addTask() (task: { seriesIndex?: number; index?: number; name?: string; start?: WccDate; end?: WccDate; duration?: number; data?: any }): Promise<any> Adds a task (end from end, or start plus duration days, default 1, working days under a calendar) through the taskCreate event and the undo history; resolves to the new item or null.
api.updateTask() (id: Id, patch: { start?: WccDate; end?: WccDate; name?: string }): any Changes a task's start, end or name as an edit (taskChange event, undo history); false when the id is unknown or the change was cancelled.
api.removeTask() (id: Id): Promise<any> Deletes a task through the taskDelete event; resolves to false when the id is unknown or the event cancels it.
api.rename() (id: Id): void open the inline name editor
api.undo() (): any Reverts the last edit; resolves to false when there is nothing to undo.
api.redo() (): any Repeats the last undone edit; resolves to false when there is nothing to redo.
api.canUndo() (): boolean true when there is an edit to undo.
api.canRedo() (): boolean true when there is an undone edit to repeat.
api.history() (): { undo: any[]; redo: any[] } Copies of the undo and redo stacks.
api.clearHistory() (): void Empties both stacks and emits a history change.
api.workDays() (a: WccDate, b: WccDate): number working days between two dates (calendar aware)
api.dependencies() (): GanttDependency[] Every dependency link of the chart.
api.addDependency() (from: Id, to: Id, opts?: { type?: GanttDependency['type']; lag?: number }): Promise<boolean> Adds a link between two tasks (default type 'FS', lag 0 days); resolves to false for an unknown id, an existing link, a cycle or a cancelled dependencyCreate.
api.removeDependency() (from: Id, to: Id): Promise<boolean> Removes the link between two tasks; resolves to false when there is none or dependencyDelete cancels it.
api.outOfBounds() (): Id[] ids of tasks outside plotOptions.gantt.boundary
api.saveState() (): void Writes the persisted state (view, collapsed groups, optionally the selection) to localStorage now; does nothing unless plotOptions.gantt.persist sets a key.
api.clearSavedState() (): void Removes the saved state from localStorage.

Runtime API: tree

premium.api<TreeApi>(chart).

Option Type Description
api.expandAll() (): void Expands every node and refits the view.
api.collapseAll() (depth?: number): void Collapses every node at depth or deeper and refits; the default 1 leaves only the root's children visible.
api.toggle() (id: Id): void Collapses or expands one node (as a click on its toggle).
api.focus() (id: Id): void open collapsed ancestors, select the node and pan to it
api.select() (id: Id | null): void Selects a visible node (as a click); null is ignored.
api.selected() (): Id | null Id of the selected node, or null.
api.zoomBy() (factor: number): void Zooms around the centre of the plot; factor > 1 zooms in.
api.fit() (): void Animates the view back to fit the whole tree.

Runtime API: stock

premium.api<StockApi>(chart).

Option Type Description
api.range() (label: string): void apply a range-selector button by label
api.setRange() (from: WccDate, to: WccDate, animate?: boolean): void Shows the candles between two dates; animated unless animate is false.
api.timeframe() (tf: 'day' | 'week' | 'month'): void 'day' | 'week' | 'month'
api.view() (): { from: number; to: number; candles: number } First and last timestamp of the view and the number of candles shown.
api.zoomBy() (factor: number): void f > 1 zooms in
api.tool() (name?: string | null): string | null get the active drawing tool, or set it (null turns it off)
api.drawings() (): WccStockDrawing[] Every drawing as plain objects.
api.addDrawing() (d: WccStockDrawing): any Adds a drawing (undoable); returns it, or null when it is invalid.
api.updateDrawing() (id: Id, patch: Partial<WccStockDrawing>): any Merges patch into a drawing; returns the drawing, or null when the id is unknown or the result is invalid.
api.removeDrawing() (id: Id): any Removes a drawing; false when the id is unknown.
api.clearDrawings() (): any Removes every drawing; false when there are none.
api.selectDrawing() (id: Id | null): any Selects a drawing (shows its handles); null clears the selection.
api.serializeDrawings() (): string JSON string of every drawing
api.loadDrawings() (jsonOrArray: string | WccStockDrawing[]): any Replaces every drawing with an array or its JSON string; false when the JSON does not parse.

Runtime API: map

premium.api<MapApi>(chart).

Option Type Description
api.unmatched() (): Array<{ id: string; seriesIndex: number; dataIndex: number; value: unknown }> Data rows lacking a geometry in the registered map; returns copied records.
api.zoomTo() (id: Id): boolean Zooms to a region by id, name or ISO/postal code (case-insensitive); false when it is not found.
api.select() (id: Id | null): boolean Selects a region by id, name or ISO/postal code, null clears; false when it is not found.
api.selected() (): Id | null Id of the selected region, or null.
api.zoomBy() (factor: number): void Zooms around the centre of the map; factor > 1 zooms in.
api.reset() (): void Resets zoom and pan to the whole map.
api.rotate() (lonLat: [number, number]): void globe projection: centre [lon, lat]
api.palettes() (): string[] names of the built-in colour ramps

Runtime API: network

premium.api<NetworkApi>(chart).

Option Type Description
api.performanceStats() (): { modelMs: number; layoutMs: number; drawMs: number; labelsMs: number; renderMs: number; frames: number; settled: boolean; layout: 'force' | 'preset' | '… Cumulative renderer phase timings, useful only when compared in the same environment.
api.highlightKeys() (keys: string | string[] | null): boolean Lights every node that carries one of the keys (null clears); facet and force layouts. Pinned: survives pointer leave and redraws. false when nothing matched.
api.highlightPath() (path: string | number | null): boolean Facet layout: highlights a causal path by name or index (null clears). Pinned like highlightKeys. false when there is no such path.
api.select() (id: string | number | null): { [key: string]: unknown } | null Lights one node and its neighbours (pinned; null clears); returns the node's tooltip payload or null.
api.layout() (): { type: 'facet'; levels: string[]; sides: number; nodes: NetworkFacetNode[] } | null Facet layout: the computed geometry; null for the force layout or no data.

Runtime API: radialColumn

premium.api<RadialColumnApi>(chart).

Option Type Description
api.type 'radialColumn' The chart type, 'radialColumn'.
api.describe() (category?: string): string | null no argument: the chart summary; a category: every bound channel as one line ('13:20 · 412 Requests · 3.4% Error rate · +12% vs last week')
api.dataTable() (): { head: string[]; rows: string[][] } | null Rows of the accessible data table and CSV: one row per category (series values and the color/delta channels), then the segments of the inner layers; null before the first render.
api.clearHighlight() (): void Removes the hover or keyboard highlight.
api.toggle() (id: string): void Hides or shows a column series ('s:&lt;series&gt;', the last visible one stays), a segment ('c:&lt;segment name&gt;') or the cells of a matrix status ('x:&lt;status&gt;'), as a legend click.
api.highlightCategory() (name: string): boolean Highlights one category across every ring; an unknown name clears and returns false.
api.layers() (): Array<{ index: number; type: RadialColumnLayer['type']; name: string; rings: number; radii: Array<[number, number]>; link?: RadialLinkMode; mode?: 'ridge… Summary of the inner layers: index, type, name, ring count, radii and link mode. wave layers add mode, sectors, points, domain and their anomalies
api.links() (segment: string): string[] category names linked to a segment (name or 'A › B' path)
api.matrix() (): { name: string; mode: 'value' | 'status'; rows: string[]; cols: string[]; cells: Array<{ row: string; col: string; value: number | null; status?: string … The centre matrix as drawn (after overflow): row / column names ('+N' for a merged one), cells row-major and how many rows / columns were merged or dropped; null without a matrix layer.
api.select() (nameOrPath: string): boolean sticky selection of a category, segment or matrix cell ('Row → Col') (as a click); false when not found
api.selected() (): { slot?: number; key?: string; rib?: string } | null The sticky selection: { slot } for a category, { key } for a segment, { rib } for a chord ribbon; null when nothing is selected.
api.clearSelection() (): void Clears the sticky selection (and the link filter it set).
api.channels() (): Array<[string, string]> [channel, meaning] rows of the bound encodings

Runtime API: quintTimeline / quintConvergence

premium.api<QuintApi>(chart).

Option Type Description
api.lens() (on?: boolean): { from: number; to: number; factor: number } | null | void without an argument: the focus lens ({ from, to, factor } in ms) or null; lens(true | false) switches it
api.pin() (time: string | number | null): void pins the slot that contains the time (ms or ISO); null unpins
api.select() (keys: string | string[] | null): void highlights the keys in every lane; null clears
api.clear() (): void clears selection and pin (as Esc)
api.selection() (): { keys: string[] | null; pinned: number | null } current selection: keys and the pinned slot start (ms)
api.ticks() (): string[] the time-axis labels as drawn (one per instant)

The premium plugin object

Default export of west-coast-charts/premium (WestCoastChartsPremium).

Option Type Description
premium.name 'west-coast-charts/premium' Package name of the plugin.
premium.types ReadonlyArray<PremiumChartType> The chart types the plugin adds.
premium.install() (lib: unknown, hook: object): void Called by WestCoastCharts.use(premium); throws when called otherwise or with a core older than 1.0.0.
premium.setLicenseKey() (key: string): Promise<ApexCharts.WestCoastChartsLicense | null> same as WestCoastCharts.setLicenseKey (docs/spec/06-premium-types.md §10); no dev-host exemption, so it also checks a key on localhost
premium.api() (chart: ApexCharts): (A & { readonly commands: string[] }) | null the runtime commands of a rendered premium chart; null for other charts. The object always talks to the chart's current renderer, so it stays valid across updates. Narrow it with the type parameter: premium.api<GanttApi>(chart)
premium.registerPlugin() (name: string, plugin: P): P register a plugin under a name for plotOptions.<type>.plugins: ['name']
premium.plugins() (): string[] names of the registered plugins
premium.registerLayer() (module: WccLayerModule): boolean register a layer module (west-coast-charts/layers/<name>); same as WestCoastCharts.use(module). true when registered (or already registered), false for a module of another major version.
premium.layers() (): string[] names of the registered layer modules ('west-coast-charts/layers/wave-ring', ...)
premium.autoload boolean a chart that needs a layer module that is not registered loads it by itself (default true); otherwise it warns once and draws without it
premium.layerBase string where autoload finds the modules (URL or path; default: dist/layers/ next to the premium file)
premium.setLayerLoader() (loader: ((name: WccLayerName) => WccLayerModule | { default: WccLayerModule } | void | Promise<WccLayerModule | { default: WccLayerModule } | void>) | null)… own loader for autoload: (name, e.g. 'wave-ring') => the module (or a promise of it / of its ES module namespace); null = built-in

Premium plugins

An entry of plotOptions.<type>.plugins or premium.registerPlugin(name, plugin) (WccPremiumPlugin). Every hook is optional.

Option Type Description
plugin.name string Plugin id (state key and warnings); not set uses plugin-&lt;index&gt;.
plugin.defaults object Default options of the plugin; the [nameOrPlugin, options] form overrides them.
plugin.reserve() (p: any): { top?: number; right?: number; bottom?: number; left?: number } | void (p) =&gt; { top, right, bottom, left }: space in px taken from the plot before layout.
plugin.afterRender() (p: any): void (p): called after each render; draw into p.layer() and bind events with p.on().
plugin.event() (name: string, e: Event | null, payload: any, p: any): boolean | void (name, e, payload, p): called for every chart event; returning false cancels a cancelable one.
plugin.tooltip() (content: any, p: any): any (content, p) =&gt; content: changes the tooltip content (rows, footer, …).
plugin.describe() (p: any): string (p) =&gt; string appended to the screen-reader summary.
plugin.destroy() (p: any): void (p): called before each redraw and on destroy.

Licence key payload

WestCoastCharts.setLicenseKey(key) resolves to this object (WestCoastChartsLicense) or null.

Option Type Description
payload.l string licensee
payload.t 'premium' | 'oem' product tier
payload.e number expiry, ms since 1970; 0 = perpetual
payload.v [number, number] covered major versions, inclusive
payload.i number issued, ms since 1970
payload.d string[] host patterns the key is bound to ('acme.com', '.acme.com', '10.20.'); absent = any host

WestCoast Charts 1.1.5 · generated from the library guide at commit 95f093ba. Code examples in the guide are executed by the library's docs check.