// One dataset, six panels: `trellis.by: 'region'` splits the series into one
// pixel-aligned panel per region. Every panel shares the SAME y scale (so
// "the West is bigger" stays true while shapes are compared), the same x
// window, one legend and one crosshair that sweeps all six panels: hover any
// panel and read the same month everywhere. The keyless 'Target' series
// carries no region, so it repeats in every panel as a reference line.
//
// Deterministic monthly revenue walks so the e2e snapshot is stable.
function mulberry32(seed) {
return function () {
seed |= 0
seed = (seed + 0x6d2b79f5) | 0
var t = Math.imul(seed ^ (seed >>> 15), 1 | seed)
t = (t + Math.imul(t ^ (t >>> 7), 61 | t)) ^ t
return ((t ^ (t >>> 14)) >>> 0) / 4294967296
}
}
var REGIONS = [
{ name: 'North', seed: 11, base: 58 },
{ name: 'South', seed: 23, base: 42 },
{ name: 'East', seed: 35, base: 74 },
{ name: 'West', seed: 47, base: 90 },
{ name: 'Central', seed: 59, base: 35 },
{ name: 'Northeast', seed: 71, base: 62 },
]
function monthlyRevenue(seed, base) {
var rand = mulberry32(seed)
var out = []
var ts = new Date('01 Jan 2025').getTime()
var val = base
for (var i = 0; i < 12; i++) {
val += (rand() - 0.45) * 9
out.push([ts, Math.round(val * 10) / 10])
ts += 2678400000 // ~1 month
}
return out
}
var trellisSeries = REGIONS.map(function (r) {
return {
name: 'Revenue',
region: r.name,
data: monthlyRevenue(r.seed, r.base),
}
})
// Reference series: no `region` key, so it repeats in every panel.
trellisSeries.push({
name: 'Target',
data: monthlyRevenue(1, 65).map(function (d) {
return [d[0], 65]
}),
})
var options = {
series: trellisSeries,
chart: {
id: 'revenueTrellis',
type: 'line',
height: 640,
animations: {
enabled: false,
},
},
trellis: {
by: 'region',
minPanelWidth: 260,
gap: 14,
header: {
formatter: function (key) {
return key
},
},
},
colors: ['#0EA5E9', '#94A3B8'],
stroke: {
width: [3, 2],
curve: 'straight',
dashArray: [0, 5],
},
xaxis: {
type: 'datetime',
},
yaxis: {
labels: {
formatter: function (val) {
return '$' + Math.round(val) + 'k'
},
},
},
dataLabels: {
enabled: false,
},
tooltip: {
x: {
format: 'MMM yyyy',
},
},
}
var chart = new ApexCharts(document.querySelector('#chart'), options)
chart.render()