Rich Node Card
Multi-field cards: avatar, name, role · location, a direct-reports badge, a fields row (data fields: [{ label, value }]) and a progress bar (data progress: 0–100). Fields and progress also show in the tooltip; cards grow to fit them.
Open the chart without page chrome ↗Drawing width at least 1,000 px. Scroll within the chart on smaller screens.
const options = {
chart: {
height: 760,
toolbar: {
show: false
},
type: "tree"
},
series: [
{
data: [
{
id: "p26",
name: "Kira Lund",
title: "Chief Executive",
children: [
{
id: "p9",
name: "Maya Grieve",
title: "VP Engineering",
children: [
{
id: "p4",
name: "Yara Quist",
title: "Platform lead",
children: [
{
id: "p1",
name: "Ava Holm",
title: "Site reliability",
children: undefined,
subtitle: "Site reliability · Austin",
fields: [
{
label: "Since",
value: "2017"
},
{
label: "OKRs",
value: "6/6"
}
],
progress: 82
},
{
id: "p2",
name: "Zane Quist",
title: "Infrastructure",
children: undefined,
subtitle: "Infrastructure · Remote",
fields: [
{
label: "Since",
value: "2015"
},
{
label: "OKRs",
value: "4/6"
}
],
progress: 84
},
{
id: "p3",
name: "Vik Thorne",
title: "Developer tools",
children: undefined,
subtitle: "Developer tools · Lisbon",
fields: [
{
label: "Since",
value: "2020"
},
{
label: "OKRs",
value: "5/6"
}
],
progress: 37
}
],
subtitle: "Platform lead · Berlin",
fields: [
{
label: "Since",
value: "2022"
},
{
label: "OKRs",
value: "2/6"
}
],
progress: 40
},
{
id: "p8",
name: "Elif Oakes",
title: "Product engineering",
children: [
{
id: "p5",
name: "Vik Grieve",
title: "Web",
children: undefined,
subtitle: "Web · Remote",
fields: [
{
label: "Since",
value: "2016"
},
{
label: "OKRs",
value: "5/6"
}
],
progress: 49
},
{
id: "p6",
name: "Sana Faro",
title: "Mobile",
children: undefined,
subtitle: "Mobile · Austin",
fields: [
{
label: "Since",
value: "2023"
},
{
label: "OKRs",
value: "2/6"
}
],
progress: 83
},
{
id: "p7",
name: "Ben Ivers",
title: "API",
children: undefined,
subtitle: "API · Remote",
fields: [
{
label: "Since",
value: "2019"
},
{
label: "OKRs",
value: "4/6"
}
],
progress: 71
}
],
subtitle: "Product engineering · Austin",
fields: [
{
label: "Since",
value: "2015"
},
{
label: "OKRs",
value: "3/6"
}
],
progress: 73
}
],
subtitle: "VP Engineering · Remote",
fields: [
{
label: "Since",
value: "2023"
},
{
label: "OKRs",
value: "3/6"
}
],
progress: 66
},
{
id: "p15",
name: "Ben Oakes",
title: "VP Product",
children: [
{
id: "p12",
name: "Dev Castell",
title: "Design lead",
children: [
{
id: "p10",
name: "Sana Oakes",
title: "Research",
children: undefined,
subtitle: "Research · Berlin",
fields: [
{
label: "Since",
value: "2017"
},
{
label: "OKRs",
value: "5/6"
}
],
progress: 55
},
{
id: "p11",
name: "Cleo Dorsey",
title: "Visual design",
children: undefined,
subtitle: "Visual design · Lisbon",
fields: [
{
label: "Since",
value: "2019"
},
{
label: "OKRs",
value: "6/6"
}
],
progress: 58
}
],
subtitle: "Design lead · Remote",
fields: [
{
label: "Since",
value: "2020"
},
{
label: "OKRs",
value: "2/6"
}
],
progress: 37
},
{
id: "p13",
name: "Rafa Marlow",
title: "PM, Billing",
children: undefined,
subtitle: "PM, Billing · Remote",
fields: [
{
label: "Since",
value: "2019"
},
{
label: "OKRs",
value: "2/6"
}
],
progress: 79
},
{
id: "p14",
name: "Tomas Quist",
title: "PM, Growth",
children: undefined,
subtitle: "PM, Growth · Toronto",
fields: [
{
label: "Since",
value: "2020"
},
{
label: "OKRs",
value: "5/6"
}
],
progress: 69
}
],
subtitle: "VP Product · Lisbon",
fields: [
{
label: "Since",
value: "2015"
},
{
label: "OKRs",
value: "3/6"
}
],
progress: 80
},
{
id: "p22",
name: "Pia Rook",
title: "VP Sales",
children: [
{
id: "p18",
name: "Elif Jarl",
title: "EMEA",
children: [
{
id: "p16",
name: "Iris Faro",
title: "Account exec.",
children: undefined,
subtitle: "Account exec. · Berlin",
fields: [
{
label: "Since",
value: "2016"
},
{
label: "OKRs",
value: "4/6"
}
],
progress: 90
},
{
id: "p17",
name: "Tomas Sorel",
title: "Account exec.",
children: undefined,
subtitle: "Account exec. · Austin",
fields: [
{
label: "Since",
value: "2015"
},
{
label: "OKRs",
value: "3/6"
}
],
progress: 83
}
],
subtitle: "EMEA · Toronto",
fields: [
{
label: "Since",
value: "2017"
},
{
label: "OKRs",
value: "2/6"
}
],
progress: 100
},
{
id: "p20",
name: "Pia Thorne",
title: "Americas",
children: [
{
id: "p19",
name: "Yara Arden",
title: "Account exec.",
children: undefined,
subtitle: "Account exec. · Austin",
fields: [
{
label: "Since",
value: "2015"
},
{
label: "OKRs",
value: "2/6"
}
],
progress: 79
}
],
subtitle: "Americas · Berlin",
fields: [
{
label: "Since",
value: "2025"
},
{
label: "OKRs",
value: "6/6"
}
],
progress: 94
},
{
id: "p21",
name: "Dev Faro",
title: "APAC",
children: undefined,
subtitle: "APAC · Berlin",
fields: [
{
label: "Since",
value: "2016"
},
{
label: "OKRs",
value: "6/6"
}
],
progress: 39
}
],
subtitle: "VP Sales · Austin",
fields: [
{
label: "Since",
value: "2022"
},
{
label: "OKRs",
value: "3/6"
}
],
progress: 57
},
{
id: "p25",
name: "Elif Rook",
title: "CFO",
children: [
{
id: "p23",
name: "Rafa Thorne",
title: "Controller",
children: undefined,
subtitle: "Controller · Lisbon",
fields: [
{
label: "Since",
value: "2015"
},
{
label: "OKRs",
value: "2/6"
}
],
progress: 61
},
{
id: "p24",
name: "Wren Faro",
title: "FP&A",
children: undefined,
subtitle: "FP&A · Berlin",
fields: [
{
label: "Since",
value: "2017"
},
// ... truncated, use Copy or open the full config
const chart = new WestCoastCharts(document.querySelector('#chart'), options)
chart.render()import WestCoastCharts from 'west-coast-charts'
import types from 'west-coast-charts/types'
import premium from 'west-coast-charts/premium'
WestCoastCharts.use(types).use(premium)
const WestCoastChartsPremium = premium
WestCoastCharts.setLicenseKey(LICENCE_KEY) // paid production licence; localhost evaluation needs no key
const options = {
chart: {
height: 760,
toolbar: {
show: false
},
type: "tree"
},
series: [
{
data: [
{
id: "p26",
name: "Kira Lund",
title: "Chief Executive",
children: [
{
id: "p9",
name: "Maya Grieve",
title: "VP Engineering",
children: [
{
id: "p4",
name: "Yara Quist",
title: "Platform lead",
children: [
{
id: "p1",
name: "Ava Holm",
title: "Site reliability",
children: undefined,
subtitle: "Site reliability · Austin",
fields: [
{
label: "Since",
value: "2017"
},
{
label: "OKRs",
value: "6/6"
}
],
progress: 82
},
{
id: "p2",
name: "Zane Quist",
title: "Infrastructure",
children: undefined,
subtitle: "Infrastructure · Remote",
fields: [
{
label: "Since",
value: "2015"
},
{
label: "OKRs",
value: "4/6"
}
],
progress: 84
},
{
id: "p3",
name: "Vik Thorne",
title: "Developer tools",
children: undefined,
subtitle: "Developer tools · Lisbon",
fields: [
{
label: "Since",
value: "2020"
},
{
label: "OKRs",
value: "5/6"
}
],
progress: 37
}
],
subtitle: "Platform lead · Berlin",
fields: [
{
label: "Since",
value: "2022"
},
{
label: "OKRs",
value: "2/6"
}
],
progress: 40
},
{
id: "p8",
name: "Elif Oakes",
title: "Product engineering",
children: [
{
id: "p5",
name: "Vik Grieve",
title: "Web",
children: undefined,
subtitle: "Web · Remote",
fields: [
{
label: "Since",
value: "2016"
},
{
label: "OKRs",
value: "5/6"
}
],
progress: 49
},
{
id: "p6",
name: "Sana Faro",
title: "Mobile",
children: undefined,
subtitle: "Mobile · Austin",
fields: [
{
label: "Since",
value: "2023"
},
{
label: "OKRs",
value: "2/6"
}
],
progress: 83
},
{
id: "p7",
name: "Ben Ivers",
title: "API",
children: undefined,
subtitle: "API · Remote",
fields: [
{
label: "Since",
value: "2019"
},
{
label: "OKRs",
value: "4/6"
}
],
progress: 71
}
],
subtitle: "Product engineering · Austin",
fields: [
{
label: "Since",
value: "2015"
},
{
label: "OKRs",
value: "3/6"
}
],
progress: 73
}
],
subtitle: "VP Engineering · Remote",
fields: [
{
label: "Since",
value: "2023"
},
{
label: "OKRs",
value: "3/6"
}
],
progress: 66
},
{
id: "p15",
name: "Ben Oakes",
title: "VP Product",
children: [
{
id: "p12",
name: "Dev Castell",
title: "Design lead",
children: [
{
id: "p10",
name: "Sana Oakes",
title: "Research",
children: undefined,
subtitle: "Research · Berlin",
fields: [
{
label: "Since",
value: "2017"
},
{
label: "OKRs",
value: "5/6"
}
],
progress: 55
},
{
id: "p11",
name: "Cleo Dorsey",
title: "Visual design",
children: undefined,
subtitle: "Visual design · Lisbon",
fields: [
{
label: "Since",
value: "2019"
},
{
label: "OKRs",
value: "6/6"
}
],
progress: 58
}
],
subtitle: "Design lead · Remote",
fields: [
{
label: "Since",
value: "2020"
},
{
label: "OKRs",
value: "2/6"
}
],
progress: 37
},
{
id: "p13",
name: "Rafa Marlow",
title: "PM, Billing",
children: undefined,
subtitle: "PM, Billing · Remote",
fields: [
{
label: "Since",
value: "2019"
},
{
label: "OKRs",
value: "2/6"
}
],
progress: 79
},
{
id: "p14",
name: "Tomas Quist",
title: "PM, Growth",
children: undefined,
subtitle: "PM, Growth · Toronto",
fields: [
{
label: "Since",
value: "2020"
},
{
label: "OKRs",
value: "5/6"
}
],
progress: 69
}
],
subtitle: "VP Product · Lisbon",
fields: [
{
label: "Since",
value: "2015"
},
{
label: "OKRs",
value: "3/6"
}
],
progress: 80
},
{
id: "p22",
name: "Pia Rook",
title: "VP Sales",
children: [
{
id: "p18",
name: "Elif Jarl",
title: "EMEA",
children: [
{
id: "p16",
name: "Iris Faro",
title: "Account exec.",
children: undefined,
subtitle: "Account exec. · Berlin",
fields: [
{
label: "Since",
value: "2016"
},
{
label: "OKRs",
value: "4/6"
}
],
progress: 90
},
{
id: "p17",
name: "Tomas Sorel",
title: "Account exec.",
children: undefined,
subtitle: "Account exec. · Austin",
fields: [
{
label: "Since",
value: "2015"
},
{
label: "OKRs",
value: "3/6"
}
],
progress: 83
}
],
subtitle: "EMEA · Toronto",
fields: [
{
label: "Since",
value: "2017"
},
{
label: "OKRs",
value: "2/6"
}
],
progress: 100
},
{
id: "p20",
name: "Pia Thorne",
title: "Americas",
children: [
{
id: "p19",
name: "Yara Arden",
title: "Account exec.",
children: undefined,
subtitle: "Account exec. · Austin",
fields: [
{
label: "Since",
value: "2015"
},
{
label: "OKRs",
value: "2/6"
}
],
progress: 79
}
],
subtitle: "Americas · Berlin",
fields: [
{
label: "Since",
value: "2025"
},
{
label: "OKRs",
value: "6/6"
}
],
progress: 94
},
{
id: "p21",
name: "Dev Faro",
title: "APAC",
children: undefined,
subtitle: "APAC · Berlin",
fields: [
{
label: "Since",
value: "2016"
},
{
label: "OKRs",
value: "6/6"
}
],
progress: 39
}
],
subtitle: "VP Sales · Austin",
fields: [
{
label: "Since",
value: "2022"
},
{
label: "OKRs",
value: "3/6"
}
],
progress: 57
},
{
id: "p25",
name: "Elif Rook",
title: "CFO",
children: [
{
id: "p23",
name: "Rafa Thorne",
title: "Controller",
children: undefined,
subtitle: "Controller · Lisbon",
fields: [
{
label: "Since",
value: "2015"
},
{
label: "OKRs",
value: "2/6"
}
],
progress: 61
},
{
id: "p24",
name: "Wren Faro",
title: "FP&A",
children: undefined,
subtitle: "FP&A · Berlin",
fields: [
{
label: "Since",
value: "2017"
},
{
label: "OKRs",
value: "2/6"
}
],
progress: 87
}
],
subtitle: "CFO · Lisbon",
fields: [
{
label: "Since",
value: "2023"
},
{
label: "OKRs",
value: "6/6"
}
],
progress: 45
}
],
subtitle: "Chief Executive · Toronto",
fields: [
{
label: "Since",
value: "2017"
},
{
label: "OKRs",
value: "5/6"
}
],
progress: 89
}
]
}
],
plotOptions: {
tree: {
collapse: {
initialDepth: 2
},
node: {
width: 210,
height: 60,
stackLeaves: true,
formatter: (d, o) => ({ badge: o.children ? o.children + ' direct' : undefined })
}
}
},
theme: {
mode: "light",
preset: "coastal"
}
}
const chart = new WestCoastCharts(document.querySelector('#chart'), options)
await chart.render() Waiting for the chart.
Open Data & agent view to read this chart through chart.describe().
Read from the running library through its optional agent/describe module. Text, table and JSON share the same snapshot. Demo data only.
$ wcc chart export tree-rich-node-card.json --out tree-rich-node-card.svg --with-table Public agent tools 0.2.3, tested with Library 1.1.5; available from the versioned GitHub release and npm. Save a JSON spec first and check the loaded runtime and supported modules before rendering. Command reference
Loading /gallery/tree/rich-node-card/index.md … This example uses Premium modules. Compare licences · Embedding in a distributed product?