@weasel-js/plot 1.15.0 → 1.15.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +40 -5
- package/dist/chunk-HA77BIQF.js +320 -0
- package/dist/chunk-HA77BIQF.js.map +1 -0
- package/dist/index.d.ts +1013 -235
- package/dist/index.js +3528 -500
- package/dist/index.js.map +1 -1
- package/dist/scales.d.ts +2 -0
- package/dist/scales.entry-BoLQpsxi.d.ts +275 -0
- package/dist/scales.js +3 -0
- package/dist/scales.js.map +1 -0
- package/package.json +9 -5
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/scales/linear.ts","../src/scales/log.ts","../src/scales/band.ts","../src/scales/time.ts","../src/scales/ordinal.ts","../src/marks/boxes.ts","../src/marks/paths.ts","../src/marks/text.ts","../src/axes.ts","../src/theme.ts","../src/measure.ts","../src/xychart/compile.ts","../src/plotData.ts","../src/xychart/edit.ts","../src/plotScene.ts","../src/xychart/editor.ts","../src/editing/editors.ts","../src/editing/handleLayer.ts","../src/editing/dragAction.ts","../src/editing/plotEditing.ts","../src/PlotView.tsx"],"names":["at","n","GAP","scale","slots"],"mappings":"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","file":"index.js","sourcesContent":["import type { ContinuousScale } from './types';\n\n/** Options for {@link linearScale}. */\nexport interface LinearScaleOptions {\n domain: readonly [number, number];\n range: readonly [number, number];\n /** Widen the domain out to whole tick steps for about this many ticks. Default no widening. */\n nice?: number;\n}\n\n/** A scale that maps numbers proportionally, as a value axis does. */\nexport interface LinearScale extends ContinuousScale {\n readonly kind: 'linear';\n /** The distance between ticks when about `count` are asked for. */\n tickStep(count?: number): number;\n}\n\nconst DEFAULT_TICKS = 5;\n\n/** The round step, 1, 2 or 5 times a power of ten, that cuts `lo`..`hi` into about `count` pieces. */\nexport function tickStep(lo: number, hi: number, count = DEFAULT_TICKS): number {\n const span = Math.abs(hi - lo);\n if (span === 0 || !Number.isFinite(span)) return 1;\n const raw = span / Math.max(1, count);\n const power = 10 ** Math.floor(Math.log10(raw));\n const error = raw / power;\n const factor = error >= Math.sqrt(50) ? 10 : error >= Math.sqrt(10) ? 5 : error >= Math.sqrt(2) ? 2 : 1;\n return factor * power;\n}\n\n/** How many decimals a value on a grid of `step` needs. */\nexport const decimalsOf = (step: number): number => Math.max(0, -Math.floor(Math.log10(step) + 1e-9));\n\n/** `i` steps of `step`, without the float noise a bare product carries. */\nconst onGrid = (i: number, step: number): number => Number((i * step).toFixed(decimalsOf(step)));\n\n/** Every multiple of `step` from `lo` to `hi`, inclusive. */\nexport function stepTicks(lo: number, hi: number, step: number): number[] {\n const [a, b] = lo <= hi ? [lo, hi] : [hi, lo];\n const out: number[] = [];\n for (let i = Math.ceil(a / step - 1e-9); i <= Math.floor(b / step + 1e-9); i++) out.push(onGrid(i, step));\n return lo <= hi ? out : out.reverse();\n}\n\n/** `value` written as plainly as a grid of `step` allows: no trailing zeros, no exponent. */\nexport function formatNumber(value: number, step: number): string {\n const fixed = value.toFixed(Math.min(20, decimalsOf(step)));\n return fixed.includes('.') ? fixed.replace(/\\.?0+$/, '') : fixed;\n}\n\n/** `domain` widened to whole steps of a tick grid of about `count` ticks. */\nexport function niceDomain(domain: readonly [number, number], count = DEFAULT_TICKS): [number, number] {\n const [lo, hi] = domain;\n if (lo === hi) return lo === 0 ? [0, 1] : [Math.min(0, lo), Math.max(0, hi)];\n const step = tickStep(lo, hi, count);\n const down = (v: number) => onGrid(Math.floor(v / step + 1e-9), step);\n const up = (v: number) => onGrid(Math.ceil(v / step - 1e-9), step);\n return lo < hi ? [down(lo), up(hi)] : [up(lo), down(hi)];\n}\n\n/** A linear scale from `domain` onto `range`. */\nexport function linearScale(opts: LinearScaleOptions): LinearScale {\n const domain = opts.nice !== undefined ? niceDomain(opts.domain, opts.nice) : ([opts.domain[0], opts.domain[1]] as const);\n const range = [opts.range[0], opts.range[1]] as const;\n const [d0, d1] = domain;\n const [r0, r1] = range;\n const span = d1 - d0;\n const map = (v: number) => (span === 0 ? (r0 + r1) / 2 : r0 + ((v - d0) / span) * (r1 - r0));\n const step = (count = DEFAULT_TICKS) => tickStep(d0, d1, count);\n return {\n kind: 'linear',\n domain,\n range,\n map,\n position: map,\n invert: (at) => (r1 === r0 ? d0 : d0 + ((at - r0) / (r1 - r0)) * span),\n tickStep: step,\n ticks: (count = DEFAULT_TICKS) => stepTicks(d0, d1, step(count)),\n format: (v) => formatNumber(v, step()),\n };\n}\n","import { formatNumber } from './linear';\nimport type { ContinuousScale } from './types';\n\n/** Options for {@link logScale}. */\nexport interface LogScaleOptions {\n /** Both ends above zero. */\n domain: readonly [number, number];\n range: readonly [number, number];\n /** Default 10. */\n base?: number;\n}\n\n/** A scale that maps the logarithm of a value proportionally. */\nexport interface LogScale extends ContinuousScale {\n readonly kind: 'log';\n readonly base: number;\n}\n\n/** A logarithmic scale from `domain`, whose ends must both be above zero, onto `range`. */\nexport function logScale(opts: LogScaleOptions): LogScale {\n const base = opts.base ?? 10;\n const [d0, d1] = opts.domain;\n if (!(d0 > 0 && d1 > 0)) throw new Error(`logScale: a domain of ${d0}..${d1} does not lie above zero`);\n const [r0, r1] = opts.range;\n const log = (v: number) => Math.log(v) / Math.log(base);\n const l0 = log(d0);\n const l1 = log(d1);\n const map = (v: number) => (l1 === l0 ? (r0 + r1) / 2 : r0 + ((log(v) - l0) / (l1 - l0)) * (r1 - r0));\n const ticks = (count = 5): number[] => {\n const [lo, hi] = l0 <= l1 ? [l0, l1] : [l1, l0];\n const first = Math.floor(lo + 1e-9);\n const last = Math.ceil(hi - 1e-9);\n // Few decades get their 2s and 5s too, so a short axis still reads.\n const steps = last - first < count / 2 && base === 10 ? [1, 2, 5] : [1];\n const out: number[] = [];\n for (let p = first; p <= last; p++) {\n for (const m of steps) {\n const v = Number((m * base ** p).toPrecision(12));\n if (log(v) >= lo - 1e-9 && log(v) <= hi + 1e-9) out.push(v);\n }\n }\n return l0 <= l1 ? out : out.reverse();\n };\n return {\n kind: 'log',\n base,\n domain: [d0, d1],\n range: [r0, r1],\n map,\n position: map,\n invert: (at) => base ** (r1 === r0 ? l0 : l0 + ((at - r0) / (r1 - r0)) * (l1 - l0)),\n ticks,\n format: (v) => (v >= 1 ? formatNumber(v, 1) : formatNumber(v, 10 ** Math.floor(Math.log10(v)))),\n };\n}\n","import type { Scale } from './types';\n\n/** Options for {@link bandScale}. */\nexport interface BandScaleOptions {\n /** The categories, one band each, in order. */\n domain: readonly string[];\n range: readonly [number, number];\n /** The share of each step left empty between bands, 0 to 1. Default 0.2. */\n paddingInner?: number;\n /** The room before the first band and after the last, in steps. Default half of `paddingInner`. */\n paddingOuter?: number;\n}\n\n/** A scale that cuts its range into equal bands, one per category, as a bar chart's category axis does. */\nexport interface BandScale extends Scale<string> {\n readonly kind: 'band';\n readonly domain: readonly string[];\n /** The width of each band. */\n readonly bandwidth: number;\n /** From one band's start to the next's. */\n readonly step: number;\n /** Where `key`'s band starts, or `NaN` for a key not in the domain. */\n start(key: string): number;\n /** The key whose band is nearest `at`; `undefined` for an empty domain. */\n invert(at: number): string | undefined;\n}\n\n/** A band scale over `domain`. */\nexport function bandScale(opts: BandScaleOptions): BandScale {\n const domain = [...opts.domain];\n const [r0, r1] = opts.range;\n const inner = Math.min(1, Math.max(0, opts.paddingInner ?? 0.2));\n const outer = Math.max(0, opts.paddingOuter ?? inner / 2);\n const n = domain.length;\n const step = n === 0 ? 0 : (r1 - r0) / Math.max(1e-9, n - inner + 2 * outer);\n const bandwidth = Math.abs(step * (1 - inner));\n const index = new Map(domain.map((key, i) => [key, i]));\n const startAt = (i: number) => r0 + step * (outer + i) + (step < 0 ? step * (1 - inner) : 0);\n const start = (key: string) => {\n const i = index.get(key);\n return i === undefined ? Number.NaN : startAt(i);\n };\n return {\n kind: 'band',\n domain,\n range: [r0, r1],\n bandwidth,\n step: Math.abs(step),\n start,\n position: (key) => start(key) + bandwidth / 2,\n invert: (at) => {\n if (n === 0) return undefined;\n const i = Math.round((at - r0) / step - outer - (1 - inner) / 2);\n return domain[Math.min(n - 1, Math.max(0, i))];\n },\n ticks: () => [...domain],\n format: (key) => key,\n };\n}\n","import type { ContinuousScale } from './types';\n\n/** Options for {@link timeScale}. */\nexport interface TimeScaleOptions {\n /** Milliseconds since the epoch, as `Date.getTime` gives them. */\n domain: readonly [number, number];\n range: readonly [number, number];\n}\n\n/** A scale over instants, whose ticks fall on whole seconds, minutes, hours, days, months or years, in UTC. */\nexport interface TimeScale extends ContinuousScale {\n readonly kind: 'time';\n}\n\nconst SECOND = 1000;\nconst MINUTE = 60 * SECOND;\nconst HOUR = 60 * MINUTE;\nconst DAY = 24 * HOUR;\n\n/** A tick interval: a fixed span, or a count of calendar months. */\ntype Interval = { ms: number; months?: never; unit: Unit } | { months: number; ms?: never; unit: Unit };\ntype Unit = 'second' | 'minute' | 'hour' | 'day' | 'month' | 'year';\n\nconst INTERVALS: readonly Interval[] = [\n { ms: SECOND, unit: 'second' }, { ms: 5 * SECOND, unit: 'second' }, { ms: 15 * SECOND, unit: 'second' }, { ms: 30 * SECOND, unit: 'second' },\n { ms: MINUTE, unit: 'minute' }, { ms: 5 * MINUTE, unit: 'minute' }, { ms: 15 * MINUTE, unit: 'minute' }, { ms: 30 * MINUTE, unit: 'minute' },\n { ms: HOUR, unit: 'hour' }, { ms: 3 * HOUR, unit: 'hour' }, { ms: 6 * HOUR, unit: 'hour' }, { ms: 12 * HOUR, unit: 'hour' },\n { ms: DAY, unit: 'day' }, { ms: 2 * DAY, unit: 'day' }, { ms: 7 * DAY, unit: 'day' },\n { months: 1, unit: 'month' }, { months: 3, unit: 'month' }, { months: 12, unit: 'year' },\n];\n\nconst MONTH_MS = 30 * DAY;\nconst spanOf = (i: Interval): number => i.ms ?? i.months * MONTH_MS;\n\n/** The interval nearest a cut of `span` into `count` pieces; whole years past the table's end. */\nfunction intervalFor(span: number, count: number): Interval {\n const target = span / Math.max(1, count);\n let best = INTERVALS[0]!;\n for (const i of INTERVALS) if (Math.abs(Math.log(spanOf(i) / target)) < Math.abs(Math.log(spanOf(best) / target))) best = i;\n if (best.unit === 'year' && target > 12 * MONTH_MS) {\n const years = 10 ** Math.floor(Math.log10(target / (12 * MONTH_MS)));\n return { months: 12 * years, unit: 'year' };\n }\n return best;\n}\n\n/** Every instant on `interval`'s grid from `lo` to `hi`. */\nfunction gridTicks(lo: number, hi: number, interval: Interval): number[] {\n const out: number[] = [];\n if (interval.ms !== undefined) {\n for (let t = Math.ceil(lo / interval.ms) * interval.ms; t <= hi; t += interval.ms) out.push(t);\n return out;\n }\n const at = new Date(lo);\n let month = at.getUTCFullYear() * 12 + at.getUTCMonth();\n month = Math.ceil(month / interval.months) * interval.months;\n for (;; month += interval.months) {\n const t = Date.UTC(Math.floor(month / 12), month % 12, 1);\n if (t < lo) continue;\n if (t > hi) break;\n out.push(t);\n }\n return out;\n}\n\nconst pad = (n: number) => String(n).padStart(2, '0');\n\n/** `t` written to the precision of `unit`. */\nexport function formatInstant(t: number, unit: Unit): string {\n const d = new Date(t);\n const date = `${d.getUTCFullYear()}-${pad(d.getUTCMonth() + 1)}-${pad(d.getUTCDate())}`;\n const time = `${pad(d.getUTCHours())}:${pad(d.getUTCMinutes())}`;\n switch (unit) {\n case 'year': return String(d.getUTCFullYear());\n case 'month': return date.slice(0, 7);\n case 'day': return date;\n case 'hour':\n case 'minute': return d.getUTCHours() === 0 && d.getUTCMinutes() === 0 ? date : time;\n case 'second': return `${time}:${pad(d.getUTCSeconds())}`;\n }\n}\n\n/** A time scale from `domain`, in milliseconds since the epoch, onto `range`. */\nexport function timeScale(opts: TimeScaleOptions): TimeScale {\n const [d0, d1] = opts.domain;\n const [r0, r1] = opts.range;\n const span = d1 - d0;\n const map = (v: number) => (span === 0 ? (r0 + r1) / 2 : r0 + ((v - d0) / span) * (r1 - r0));\n const interval = (count = 5) => intervalFor(Math.abs(span), count);\n return {\n kind: 'time',\n domain: [d0, d1],\n range: [r0, r1],\n map,\n position: map,\n invert: (at) => (r1 === r0 ? d0 : d0 + ((at - r0) / (r1 - r0)) * span),\n ticks: (count = 5) => {\n const out = gridTicks(Math.min(d0, d1), Math.max(d0, d1), interval(count));\n return d0 <= d1 ? out : out.reverse();\n },\n format: (v) => formatInstant(v, interval().unit),\n };\n}\n","/** Options for {@link ordinalScale}. */\nexport interface OrdinalScaleOptions<T> {\n /** The keys, in order. */\n domain: readonly string[];\n /** What each key maps to, in domain order, wrapping when there are fewer than keys. */\n range: readonly T[];\n}\n\n/** A scale from keys to values in turn, as a series' colors are chosen. */\nexport interface OrdinalScale<T> {\n readonly kind: 'ordinal';\n readonly domain: readonly string[];\n readonly range: readonly T[];\n /** `key`'s value; a key not in the domain takes the next value after the last, and joins the domain. */\n map(key: string): T;\n /** The keys a legend lists. */\n ticks(): string[];\n format(key: string): string;\n}\n\n/** An ordinal scale from `domain` to `range`. Throws on an empty range. */\nexport function ordinalScale<T>(opts: OrdinalScaleOptions<T>): OrdinalScale<T> {\n if (opts.range.length === 0) throw new Error('ordinalScale: an empty range');\n const domain = [...opts.domain];\n const index = new Map(domain.map((key, i) => [key, i]));\n const range = [...opts.range];\n return {\n kind: 'ordinal',\n domain,\n range,\n map: (key) => {\n let i = index.get(key);\n if (i === undefined) {\n i = domain.length;\n domain.push(key);\n index.set(key, i);\n }\n return range[i % range.length]!;\n },\n ticks: () => [...domain],\n format: (key) => key,\n };\n}\n","/** Marks drawn as a box: bars, spans and points. Each carries its outline as `path`, which every export writes. */\nimport { ellipsePath, type Path } from '@weasel-js/geom';\nimport type { PlotBox, PlotDatum, PlotMark } from './types';\n\nconst rectOf = (b: PlotBox): Path => ({ kind: 'rect', x: b.x, y: b.y, width: b.width, height: b.height });\n\nconst fillOf = (color: string, opacity?: number) => ({ paint: { color, ...(opacity !== undefined ? { opacity } : {}) } });\n\n/** Options for {@link barMark}. */\nexport interface BarMarkOptions {\n key: string;\n /** Where the bar stands along the category axis: its left edge, or its top for a horizontal bar. */\n x: number;\n /** The bar's breadth across the category axis. */\n width: number;\n /** The baseline the bar rises from, and the end it reaches, along the value axis. */\n from: number;\n to: number;\n color: string;\n datum?: PlotDatum;\n /** Default `'vertical'`: `x` and `width` run along x. */\n orient?: 'vertical' | 'horizontal';\n}\n\n/** A bar from `from` to `to`, either way round. */\nexport function barMark(opts: BarMarkOptions): PlotMark {\n const lo = Math.min(opts.from, opts.to);\n const length = Math.abs(opts.to - opts.from);\n const pose = opts.orient === 'horizontal'\n ? { x: lo, y: opts.x, width: length, height: opts.width }\n : { x: opts.x, y: lo, width: opts.width, height: length };\n return {\n key: opts.key,\n pose,\n data: { plotMark: { kind: 'bar', ...(opts.datum ? { datum: opts.datum } : {}) }, path: rectOf(pose), fill: fillOf(opts.color) },\n };\n}\n\n/** Options for {@link spanMark}. */\nexport interface SpanMarkOptions {\n key: string;\n /** Start and end along x. */\n x0: number;\n x1: number;\n /** Its row: top and height. */\n y: number;\n height: number;\n color: string;\n opacity?: number;\n datum?: PlotDatum;\n}\n\n/** A span across x, as a task's bar on a timeline is. */\nexport function spanMark(opts: SpanMarkOptions): PlotMark {\n const pose = { x: Math.min(opts.x0, opts.x1), y: opts.y, width: Math.abs(opts.x1 - opts.x0), height: opts.height };\n return {\n key: opts.key,\n pose,\n data: {\n plotMark: { kind: 'span', ...(opts.datum ? { datum: opts.datum } : {}) },\n path: rectOf(pose),\n fill: fillOf(opts.color, opts.opacity),\n },\n };\n}\n\n/** Options for {@link pointMark}. */\nexport interface PointMarkOptions {\n key: string;\n x: number;\n y: number;\n /** Default 3. */\n radius?: number;\n color: string;\n datum?: PlotDatum;\n}\n\n/** A dot centered on `x`, `y`. */\nexport function pointMark(opts: PointMarkOptions): PlotMark {\n const r = opts.radius ?? 3;\n const pose = { x: opts.x - r, y: opts.y - r, width: 2 * r, height: 2 * r };\n return {\n key: opts.key,\n pose,\n data: { plotMark: { kind: 'point', ...(opts.datum ? { datum: opts.datum } : {}) }, path: ellipsePath(pose), fill: fillOf(opts.color) },\n };\n}\n","/** Marks drawn as a path: lines, areas, rules, arcs and ribbons. */\nimport { boundsOfPath, pathFromD, type Path } from '@weasel-js/geom';\nimport type { PlotDatum, PlotMark, PlotMarkData, PlotPoint, SolidStroke } from './types';\n\nconst n = (v: number) => Number(v.toFixed(3));\nconst at = (p: PlotPoint) => `${n(p.x)} ${n(p.y)}`;\n\n/** A mark whose pose is its path's box, so the painter draws the path where it was built. */\nfunction pathMark(key: string, path: Path, data: Omit<PlotMarkData, 'path'>): PlotMark {\n const b = boundsOfPath(path);\n return { key, pose: { x: b.x, y: b.y, width: b.width, height: b.height }, data: { ...data, path } };\n}\n\nconst traitOf = (kind: PlotMarkData['plotMark']['kind'], datum?: PlotDatum) => ({ kind, ...(datum ? { datum } : {}) });\n\n/** Options for {@link lineMark}. */\nexport interface LineMarkOptions {\n key: string;\n /** At least one. */\n points: readonly PlotPoint[];\n color: string;\n /** Default 2. */\n width?: number;\n dash?: number[];\n datum?: PlotDatum;\n}\n\n/** A line through `points`, in order. */\nexport function lineMark(opts: LineMarkOptions): PlotMark {\n const [first, ...rest] = opts.points;\n if (first === undefined) throw new Error(`lineMark \"${opts.key}\": no points`);\n const d = `M ${at(first)}${rest.map((p) => ` L ${at(p)}`).join('')}`;\n const stroke: SolidStroke = {\n paint: { color: opts.color }, width: opts.width ?? 2, join: 'round', cap: 'round', ...(opts.dash ? { dash: opts.dash } : {}),\n };\n return pathMark(opts.key, pathFromD(d), { plotMark: traitOf('line', opts.datum), stroke });\n}\n\n/** Options for {@link ruleMark}. */\nexport interface RuleMarkOptions {\n key: string;\n from: PlotPoint;\n to: PlotPoint;\n color: string;\n /** Default 1. */\n width?: number;\n dash?: number[];\n datum?: PlotDatum;\n}\n\n/** A straight rule from `from` to `to`: an axis line, a tick, a grid line, a marker. */\nexport function ruleMark(opts: RuleMarkOptions): PlotMark {\n const stroke: SolidStroke = { paint: { color: opts.color }, width: opts.width ?? 1, cap: 'butt', ...(opts.dash ? { dash: opts.dash } : {}) };\n return pathMark(opts.key, pathFromD(`M ${at(opts.from)} L ${at(opts.to)}`), { plotMark: traitOf('rule', opts.datum), stroke });\n}\n\n/** Options for {@link areaMark}. */\nexport interface AreaMarkOptions {\n key: string;\n /** The upper edge, in order. */\n top: readonly PlotPoint[];\n /** The lower edge, in the same order as `top`. Default a baseline at `baseline` under each top point. */\n bottom?: readonly PlotPoint[];\n baseline?: number;\n color: string;\n /** Default 0.35. */\n opacity?: number;\n datum?: PlotDatum;\n}\n\n/** The region between two edges, as an area chart or a radar's polygon fills it. */\nexport function areaMark(opts: AreaMarkOptions): PlotMark {\n if (opts.top.length === 0) throw new Error(`areaMark \"${opts.key}\": no points`);\n const bottom = opts.bottom ?? (opts.baseline !== undefined ? opts.top.map((p) => ({ x: p.x, y: opts.baseline! })) : []);\n const ring = [...opts.top, ...[...bottom].reverse()];\n const d = `M ${ring.map(at).join(' L ')} Z`;\n return pathMark(opts.key, pathFromD(d), {\n plotMark: traitOf('area', opts.datum), fill: { paint: { color: opts.color, opacity: opts.opacity ?? 0.35 } },\n });\n}\n\n/** Options for {@link arcMark}. */\nexport interface ArcMarkOptions {\n key: string;\n center: PlotPoint;\n /** 0 for a pie slice. */\n innerRadius: number;\n outerRadius: number;\n /** Radians clockwise from twelve o'clock. */\n startAngle: number;\n endAngle: number;\n color: string;\n datum?: PlotDatum;\n}\n\nconst polar = (c: PlotPoint, r: number, a: number): PlotPoint => ({ x: c.x + r * Math.sin(a), y: c.y - r * Math.cos(a) });\n\n/** One side of an arc from `a0` to `a1` at radius `r`, as SVG arc commands, in halves past a half turn. */\nfunction arcTo(c: PlotPoint, r: number, a0: number, a1: number): string {\n const sweep = a1 >= a0 ? 1 : 0;\n const mid = (a0 + a1) / 2;\n const to = (a: number) => ` A ${n(r)} ${n(r)} 0 0 ${sweep} ${at(polar(c, r, a))}`;\n return Math.abs(a1 - a0) > Math.PI ? to(mid) + to(a1) : to(a1);\n}\n\n/** A slice of a ring, as a pie or a donut is cut. */\nexport function arcMark(opts: ArcMarkOptions): PlotMark {\n const { center: c, innerRadius: r0, outerRadius: r1, startAngle: a0 } = opts;\n const a1 = Math.abs(opts.endAngle - a0) >= 2 * Math.PI ? a0 + Math.sign(opts.endAngle - a0) * (2 * Math.PI - 1e-6) : opts.endAngle;\n let d = `M ${at(polar(c, r1, a0))}${arcTo(c, r1, a0, a1)}`;\n d += r0 > 0 ? ` L ${at(polar(c, r0, a1))}${arcTo(c, r0, a1, a0)} Z` : ` L ${at(c)} Z`;\n return pathMark(opts.key, pathFromD(d), { plotMark: traitOf('arc', opts.datum), fill: { paint: { color: opts.color } } });\n}\n\n/** Options for {@link ribbonMark}. */\nexport interface RibbonMarkOptions {\n key: string;\n /** The end it leaves: an x, and the span along y it leaves across. */\n from: { x: number; y0: number; y1: number };\n to: { x: number; y0: number; y1: number };\n color: string;\n /** Default 0.45. */\n opacity?: number;\n datum?: PlotDatum;\n}\n\n/** A band curving from one span to another, as a flow between two nodes is drawn. */\nexport function ribbonMark(opts: RibbonMarkOptions): PlotMark {\n const { from: f, to: t } = opts;\n const mx = (f.x + t.x) / 2;\n const d = `M ${n(f.x)} ${n(f.y0)} C ${n(mx)} ${n(f.y0)} ${n(mx)} ${n(t.y0)} ${n(t.x)} ${n(t.y0)}`\n + ` L ${n(t.x)} ${n(t.y1)} C ${n(mx)} ${n(t.y1)} ${n(mx)} ${n(f.y1)} ${n(f.x)} ${n(f.y1)} Z`;\n return pathMark(opts.key, pathFromD(d), {\n plotMark: traitOf('ribbon', opts.datum), fill: { paint: { color: opts.color, opacity: opts.opacity ?? 0.45 } },\n });\n}\n","/** Marks drawn as text: titles, tick labels, values. */\nimport type { PlotMeasure } from '../measure';\nimport type { PlotFont } from '../theme';\nimport type { PlotDatum, PlotMark } from './types';\n\n/** Options for {@link textMark}. */\nexport interface TextMarkOptions {\n key: string;\n text: string;\n /** The anchor point. */\n x: number;\n y: number;\n /** Which part of the text stands on `x`. Default `'middle'`. */\n anchor?: 'start' | 'middle' | 'end';\n /** Which part of the text stands on `y`. Default `'middle'`. */\n baseline?: 'top' | 'middle' | 'bottom';\n font: PlotFont;\n color: string;\n measure: PlotMeasure;\n /** Turns the text a quarter turn counterclockwise about the anchor, as a vertical axis's title reads. */\n vertical?: boolean;\n bold?: boolean;\n datum?: PlotDatum;\n}\n\nconst ALIGN = { start: 'left', middle: 'center', end: 'right' } as const;\n\n/** One line of text, its box measured with `measure` and placed by its anchor. */\nexport function textMark(opts: TextMarkOptions): PlotMark {\n const { width, height } = opts.measure(opts.text, opts.font);\n const anchor = opts.anchor ?? 'middle';\n const baseline = opts.baseline ?? 'middle';\n // Along and across the line, which a quarter turn swaps on screen.\n const along = anchor === 'start' ? 0 : anchor === 'middle' ? -width / 2 : -width;\n const across = baseline === 'top' ? 0 : baseline === 'middle' ? -height / 2 : -height;\n const center = opts.vertical\n ? { x: opts.x + across + height / 2, y: opts.y - along - width / 2 }\n : { x: opts.x + along + width / 2, y: opts.y + across + height / 2 };\n return {\n key: opts.key,\n pose: {\n x: center.x - width / 2, y: center.y - height / 2, width, height, ...(opts.vertical ? { rotation: -Math.PI / 2 } : {}),\n },\n data: {\n plotMark: { kind: 'text', ...(opts.datum ? { datum: opts.datum } : {}) },\n text: opts.text,\n style: { fontFamily: opts.font.fontFamily, fontSize: opts.font.fontSize, align: ALIGN[anchor], ...(opts.bold ? { fontWeight: 700 } : {}) },\n fill: { paint: { color: opts.color } },\n verticalAlign: 'center',\n },\n };\n}\n","/** Axes as marks: a rule along a scale's range, a tick and a label at each of its ticks, grid lines, a title. */\nimport { ruleMark } from './marks/paths';\nimport { textMark } from './marks/text';\nimport type { PlotMark } from './marks/types';\nimport type { PlotMeasure } from './measure';\nimport type { Scale } from './scales/types';\nimport type { PlotTheme } from './theme';\n\n/** Which side of the plot an axis runs along. Its scale's range runs along x for top and bottom, along y otherwise. */\nexport type AxisSide = 'top' | 'bottom' | 'left' | 'right';\n\n/** Options for {@link axisMarks} and {@link axisRoom}. */\nexport interface AxisOptions<T> {\n scale: Scale<T>;\n side: AxisSide;\n /** Where the axis line stands across its scale: a y for top and bottom, an x for left and right. */\n at: number;\n /** Draw a grid line at each tick, from the axis across to here. */\n gridTo?: number;\n title?: string;\n /** How many ticks to ask the scale for. */\n ticks?: number;\n /** Prefixes every mark's key. Default `axis:<side>`. */\n key?: string;\n theme: PlotTheme;\n measure: PlotMeasure;\n}\n\nconst TICK = 5;\nconst GAP = 4;\n\nconst isHorizontal = (side: AxisSide) => side === 'top' || side === 'bottom';\n/** Which way leads away from the plot across the axis. */\nconst outward = (side: AxisSide) => (side === 'bottom' || side === 'right' ? 1 : -1);\n\n/** How far an axis reaches out from its line: ticks, labels and title. */\nexport function axisRoom<T>(opts: AxisOptions<T>): number {\n const { scale, side, theme, measure } = opts;\n const sizes = scale.ticks(opts.ticks).map((t) => measure(scale.format(t), theme.font));\n const labels = sizes.length === 0 ? 0 : Math.max(...sizes.map((s) => (isHorizontal(side) ? s.height : s.width)));\n const title = opts.title ? measure(opts.title, theme.font).height + GAP : 0;\n return TICK + GAP + labels + title;\n}\n\n/** Every mark one axis is drawn with. Keys: `<key>:rule`, `<key>:tick:<i>`, `<key>:label:<i>`, `<key>:grid:<i>`, `<key>:title`. */\nexport function axisMarks<T>(opts: AxisOptions<T>): PlotMark[] {\n const { scale, side, at, theme, measure } = opts;\n const key = opts.key ?? `axis:${side}`;\n const h = isHorizontal(side);\n const out = outward(side);\n const pt = (along: number, across: number) => (h ? { x: along, y: across } : { x: across, y: along });\n const [r0, r1] = scale.range;\n const marks: PlotMark[] = [];\n const ticks = scale.ticks(opts.ticks);\n ticks.forEach((t, i) => {\n const p = scale.position(t);\n if (opts.gridTo !== undefined) {\n marks.push(ruleMark({ key: `${key}:grid:${i}`, from: pt(p, at), to: pt(p, opts.gridTo), color: theme.grid }));\n }\n });\n marks.push(ruleMark({ key: `${key}:rule`, from: pt(r0, at), to: pt(r1, at), color: theme.axis }));\n let reach = 0;\n ticks.forEach((t, i) => {\n const p = scale.position(t);\n marks.push(ruleMark({ key: `${key}:tick:${i}`, from: pt(p, at), to: pt(p, at + out * TICK), color: theme.axis }));\n const anchorAt = pt(p, at + out * (TICK + GAP));\n const label = textMark({\n key: `${key}:label:${i}`, text: scale.format(t), ...anchorAt, font: theme.font, color: theme.text, measure,\n anchor: h ? 'middle' : out > 0 ? 'start' : 'end',\n baseline: h ? (out > 0 ? 'top' : 'bottom') : 'middle',\n });\n reach = Math.max(reach, h ? label.pose.height : label.pose.width);\n marks.push(label);\n });\n if (opts.title) {\n const across = at + out * (TICK + GAP + reach + GAP);\n marks.push(textMark({\n key: `${key}:title`, text: opts.title, ...pt((r0 + r1) / 2, across), font: theme.font, color: theme.text, measure,\n anchor: 'middle', baseline: out > 0 ? 'top' : 'bottom', vertical: !h,\n }));\n }\n return marks;\n}\n","import { THEMES, type ResolvedTheme } from '@weasel-js/theme';\n\n/** The face a chart's text is set in. */\nexport interface PlotFont {\n fontFamily: string;\n fontSize: number;\n}\n\n/** The colors a chart is drawn in, by role, and its face. Plain strings, so a scene can keep it. */\nexport interface PlotTheme {\n /** Titles, labels and values. */\n text: string;\n /** Axis rules and ticks. */\n axis: string;\n /** Grid lines behind the marks. */\n grid: string;\n /** The colors series take in turn. Never empty. */\n series: readonly string[];\n font: PlotFont;\n}\n\n/** The weasel theme's swatches, in the order series take them. */\nconst SWATCHES = ['sky', 'amber', 'green', 'rose', 'violet', 'teal', 'citron', 'fuchsia', 'blue', 'red'] as const;\n\n/** A plot theme from a resolved weasel theme: text in `fg`, axes in `border-strong`, grid in `border`, series in\n * its swatches. */\nexport function plotThemeFrom(resolved: Readonly<Record<string, string>> | ResolvedTheme, font: PlotFont = PLOT_FONT): PlotTheme {\n const at = (token: string) => (resolved as Record<string, string>)[`--wzl-${token}`] ?? '#888888';\n return {\n text: at('fg'),\n axis: at('border-strong'),\n grid: at('border'),\n series: SWATCHES.map((s) => at(`swatch-${s}`)),\n font,\n };\n}\n\n/** 12px sans-serif. */\nexport const PLOT_FONT: PlotFont = { fontFamily: 'sans-serif', fontSize: 12 };\n\n/** The weasel theme in its dark mode. */\nexport const PLOT_THEME: PlotTheme = plotThemeFrom(THEMES.weasel.selections['mode=dark,density=comfortable']);\n\n/** The `i`th series' color, wrapping. */\nexport const seriesColor = (theme: PlotTheme, i: number): string =>\n theme.series[((i % theme.series.length) + theme.series.length) % theme.series.length] ?? theme.text;\n","import { measureTextBounds } from '@weasel-js/text';\nimport type { PlotFont } from './theme';\n\n/** How wide and tall one line of text is set in `font`. */\nexport type PlotMeasure = (text: string, font: PlotFont) => { width: number; height: number };\n\n/** Measures as the kit's text renderer lays text out, from the registered face's metrics; a line is 1.2 sizes tall. */\nexport const textMeasure: PlotMeasure = (text, font) => {\n const { width } = measureTextBounds(text, { fontFamily: font.fontFamily, fontSize: font.fontSize });\n return { width: Math.ceil(width), height: Math.ceil(font.fontSize * 1.2) };\n};\n","/** An xychart compiled to its scales and marks. */\nimport { axisMarks, axisRoom } from '../axes';\nimport { barMark, pointMark } from '../marks/boxes';\nimport { lineMark } from '../marks/paths';\nimport { textMark } from '../marks/text';\nimport type { PlotMark } from '../marks/types';\nimport type { PlotMeasure } from '../measure';\nimport { bandScale } from '../scales/band';\nimport { linearScale, niceDomain, type LinearScale } from '../scales/linear';\nimport type { Scale } from '../scales/types';\nimport { seriesColor, type PlotTheme } from '../theme';\nimport type { XyChartData } from './types';\n\n/** Where an xychart's parts landed: the plot area, the value scale, and each value index's place across it. */\nexport interface XyLayout {\n orientation: 'vertical' | 'horizontal';\n /** The area the marks are drawn in, inside the axes. */\n plot: { x: number; y: number; width: number; height: number };\n /** Values along y for a vertical chart, along x for a horizontal one. */\n value: LinearScale;\n /** Each value index's center along the category axis. */\n slots: readonly number[];\n /** How much of the category axis each index's bars share. */\n slotWidth: number;\n}\n\nconst PAD = 12;\nconst GAP = 8;\nconst BAND_PADDING = 0.2;\n\n/** How many values the longest series holds. */\nexport const xyLength = (data: XyChartData): number => Math.max(0, ...data.series.map((s) => s.values.length));\n\n/** The labels of the category bands: the axis's own, else numbers from 1, one per value of the longest series. */\nfunction categoriesOf(data: XyChartData): string[] {\n if (data.x?.kind === 'band' && data.x.categories.length > 0) return [...data.x.categories];\n return Array.from({ length: xyLength(data) }, (_, i) => String(i + 1));\n}\n\n/** The value axis's domain: its own ends, and where one is missing, the values' reach with zero in it, made round. */\nexport function xyValueDomain(data: XyChartData): [number, number] {\n const values = data.series.flatMap((s) => s.values).filter(Number.isFinite);\n const lo = Math.min(0, ...values);\n const hi = Math.max(0, ...values);\n const [niceLo, niceHi] = niceDomain([lo, hi === lo ? lo + 1 : hi]);\n const min = data.y?.min ?? niceLo;\n const max = data.y?.max ?? niceHi;\n return min === max ? [min, min + 1] : [min, max];\n}\n\n/** The category axis's scale over `range`, and each value index's center and share along it. */\nfunction categoryAxis(data: XyChartData, range: [number, number]): { scale: Scale<string> | Scale<number>; slots: number[]; slotWidth: number } {\n const n = xyLength(data);\n if (data.x?.kind === 'range') {\n const scale = linearScale({ domain: [data.x.min, data.x.max], range });\n const step = (range[1] - range[0]) / Math.max(1, n);\n const slots = Array.from({ length: n }, (_, i) => range[0] + step * (i + 0.5));\n return { scale, slots, slotWidth: Math.abs(step) * (1 - BAND_PADDING) };\n }\n const categories = categoriesOf(data);\n const scale = bandScale({ domain: categories, range, paddingInner: BAND_PADDING });\n const slots = Array.from({ length: n }, (_, i) => (i < categories.length ? scale.position(categories[i]!) : Number.NaN));\n return { scale, slots, slotWidth: scale.bandwidth };\n}\n\n/** Lays out an xychart in a box of `size`: its title, axes, bars, lines and points. */\nexport function compileXyChart(\n data: XyChartData, size: { width: number; height: number }, theme: PlotTheme, measure: PlotMeasure,\n): { marks: PlotMark[]; layout: XyLayout } {\n const vertical = data.orientation !== 'horizontal';\n const marks: PlotMark[] = [];\n let top = PAD;\n if (data.title) {\n const title = textMark({\n key: 'title', text: data.title, x: size.width / 2, y: PAD, baseline: 'top', font: theme.font, color: theme.text, measure, bold: true,\n });\n marks.push(title);\n top += title.pose.height + GAP;\n }\n const domain = xyValueDomain(data);\n const base = { theme, measure, at: 0 };\n const valueTitle = data.y?.title !== undefined ? { title: data.y.title } : {};\n const categoryTitle = data.x?.title !== undefined ? { title: data.x.title } : {};\n const probe = categoryAxis(data, [0, 1]);\n const valueRoom = axisRoom({ ...base, ...valueTitle, scale: linearScale({ domain, range: [0, 1] }), side: vertical ? 'left' : 'bottom' });\n const categoryRoom = axisRoom({ ...base, ...categoryTitle, scale: probe.scale as Scale<unknown>, side: vertical ? 'bottom' : 'left' });\n const left = PAD + (vertical ? valueRoom : categoryRoom);\n const bottom = size.height - PAD - (vertical ? categoryRoom : valueRoom);\n const plot = { x: left, y: top, width: Math.max(1, size.width - PAD - left), height: Math.max(1, bottom - top) };\n const right = plot.x + plot.width;\n\n const value = linearScale({ domain, range: vertical ? [bottom, top] : [left, right] });\n const category = categoryAxis(data, vertical ? [left, right] : [top, bottom]);\n marks.push(...axisMarks({ ...base, ...valueTitle, key: 'axis:value', scale: value, side: vertical ? 'left' : 'bottom', at: vertical ? left : bottom, gridTo: vertical ? right : top }));\n marks.push(...axisMarks({ ...base, ...categoryTitle, key: 'axis:category', scale: category.scale as Scale<unknown>, side: vertical ? 'bottom' : 'left', at: vertical ? bottom : left }));\n\n const layout: XyLayout = { orientation: vertical ? 'vertical' : 'horizontal', plot, value, slots: category.slots, slotWidth: category.slotWidth };\n marks.push(...seriesMarks(data, layout, theme));\n return { marks, layout };\n}\n\n/** The bars, lines and points of every series, in series order. */\nfunction seriesMarks(data: XyChartData, layout: XyLayout, theme: PlotTheme): PlotMark[] {\n const { value, slots, slotWidth } = layout;\n const vertical = layout.orientation === 'vertical';\n const at = (along: number, v: number) => (vertical ? { x: along, y: value.map(v) } : { x: value.map(v), y: along });\n const [d0, d1] = value.domain;\n const baseline = value.map(Math.min(Math.max(0, Math.min(d0, d1)), Math.max(d0, d1)));\n const bars = data.series.filter((s) => s.kind === 'bar');\n const barWidth = slotWidth / Math.max(1, bars.length);\n const categories = categoriesOf(data);\n const marks: PlotMark[] = [];\n data.series.forEach((series, s) => {\n const color = seriesColor(theme, s);\n const datum = (i: number) => ({ series: s, index: i, value: series.values[i]!, category: categories[i] ?? String(i + 1) });\n const placed = series.values.map((v, i) => ({ v, i })).filter(({ v, i }) => Number.isFinite(v) && Number.isFinite(slots[i] ?? Number.NaN));\n if (series.kind === 'bar') {\n const j = bars.indexOf(series);\n for (const { v, i } of placed) {\n marks.push(barMark({\n key: `bar:${s}:${i}`, x: slots[i]! - slotWidth / 2 + j * barWidth, width: barWidth, from: baseline, to: value.map(v), color,\n datum: datum(i), orient: layout.orientation,\n }));\n }\n return;\n }\n if (placed.length > 0) {\n marks.push(lineMark({ key: `line:${s}`, points: placed.map(({ v, i }) => at(slots[i]!, v)), color, datum: { series: s } }));\n }\n for (const { v, i } of placed) marks.push(pointMark({ key: `point:${s}:${i}`, ...at(slots[i]!, v), radius: 3.5, color, datum: datum(i) }));\n });\n return marks;\n}\n","/** Chart specs, and the one table that compiles each kind to marks. */\nimport type { PlotMark } from './marks/types';\nimport type { PlotMeasure } from './measure';\nimport type { PlotTheme } from './theme';\nimport { compileXyChart } from './xychart/compile';\nimport type { XyChartData } from './xychart/types';\n\n/** A chart, as data: one spec per kind, told apart by `kind`. */\nexport type PlotData = XyChartData;\n\n/** The kinds of chart {@link PlotData} holds. */\nexport type PlotKind = PlotData['kind'];\n\n/** What a kind's compiler is given and gives back: its spec laid out in a box of `size`, as marks. */\nexport type PlotCompiler<D extends PlotData> = (\n data: D, size: { width: number; height: number }, theme: PlotTheme, measure: PlotMeasure,\n) => { marks: PlotMark[] };\n\nconst COMPILERS: { readonly [K in PlotKind]: PlotCompiler<Extract<PlotData, { kind: K }>> } = {\n xychart: compileXyChart,\n};\n\n/** `data` laid out in a box of `size`, as the marks it is drawn with, in drawing order. */\nexport function compilePlot(\n data: PlotData, size: { width: number; height: number }, theme: PlotTheme, measure: PlotMeasure,\n): PlotMark[] {\n const compile = COMPILERS[data.kind] as PlotCompiler<PlotData> | undefined;\n if (compile === undefined) throw new Error(`compilePlot: no chart of kind \"${(data as { kind: string }).kind}\"`);\n return compile(data, size, theme, measure).marks;\n}\n","/** Edits to an xychart, as plain data in and out. */\nimport { decimalsOf } from '../scales/linear';\nimport type { XyLayout } from './compile';\nimport type { XyChartData } from './types';\n\n/** `data` with series `series`'s value at `index` set to `value`. Throws on an index the series does not hold. */\nexport function setXyValue(data: XyChartData, series: number, index: number, value: number): XyChartData {\n const target = data.series[series];\n if (target === undefined || index < 0 || index >= target.values.length) {\n throw new Error(`setXyValue: series ${series} holds no value ${index}`);\n }\n if (target.values[index] === value) return data;\n const values = target.values.map((v, i) => (i === index ? value : v));\n return { ...data, series: data.series.map((s, i) => (i === series ? { ...s, values } : s)) };\n}\n\n/** The value a point stands at along `layout`'s value axis, rounded to a tenth of its tick step. */\nexport function xyValueAt(layout: XyLayout, at: { x: number; y: number }): number {\n const raw = layout.value.invert(layout.orientation === 'vertical' ? at.y : at.x);\n const step = layout.value.tickStep() / 10;\n return Number((Math.round(raw / step) * step).toFixed(decimalsOf(step)));\n}\n","/**\n * A plot in a scene: one root node holding the spec, its marks derived\n * children rebuilt from it. An edit replaces the spec and rebuilds the marks\n * as one undo entry.\n */\nimport type { AddNodeSpec, NodeId, RectPose, Scene } from '@weasel-js/core';\nimport type { PlotMark, PlotMarkData, PlotMarkTrait } from './marks/types';\nimport { textMeasure, type PlotMeasure } from './measure';\nimport { compilePlot, type PlotData } from './plotData';\nimport { PLOT_THEME, type PlotTheme } from './theme';\n\n/** What a plot's root node keeps: the spec, and the theme its marks were drawn in. */\nexport interface PlotRootTrait {\n data: PlotData;\n theme: PlotTheme;\n}\n\n/** A plot root's scene data. */\nexport interface PlotRootData {\n plot: PlotRootTrait;\n}\n\n/** The data of any node a plot puts in a scene. */\nexport type PlotSceneData = PlotRootData | PlotMarkData;\n\n/** A scene node spec, as {@link plotSpecs} returns them. */\nexport type PlotSpec<TLayer extends string = 'main'> = AddNodeSpec<PlotSceneData, TLayer, RectPose>;\n\n/** Options for {@link plotSpecs}. */\nexport interface PlotSpecsOptions<TLayer extends string = 'main'> {\n /** The root's id. Default `'plot'`. */\n id?: string;\n /** The box the plot fills. */\n box: { x: number; y: number; width: number; height: number };\n /** Default `'main'`. */\n layer?: TLayer;\n /** Default {@link PLOT_THEME}. */\n theme?: PlotTheme;\n /** Default {@link textMeasure}. */\n measure?: PlotMeasure;\n}\n\n/** The trait a plot root's data carries, or `null` for any other node. */\nexport function plotRootOf(node: { data: unknown } | undefined): PlotRootTrait | null {\n const plot = (node?.data as { plot?: PlotRootTrait } | null | undefined)?.plot;\n return plot !== undefined && plot !== null && typeof plot === 'object' && typeof plot.data?.kind === 'string' ? plot : null;\n}\n\n/** The trait a plot mark's data carries, or `null` for any other node. */\nexport function plotMarkOf(node: { data: unknown } | undefined): PlotMarkTrait | null {\n const mark = (node?.data as { plotMark?: PlotMarkTrait } | null | undefined)?.plotMark;\n return mark !== undefined && mark !== null && typeof mark.kind === 'string' ? mark : null;\n}\n\n/** The id of the mark keyed `key` under the root `rootId`. */\nexport const plotMarkId = (rootId: string, key: string): string => `${rootId}/${key}`;\n\n/** `marks` as children of the root `rootId`, in its frame. */\nexport function markSpecs<TLayer extends string>(rootId: string, layer: TLayer, marks: readonly PlotMark[]): PlotSpec<TLayer>[] {\n return marks.map((m) => ({\n kind: 'mark', id: plotMarkId(rootId, m.key) as NodeId, parent: rootId as NodeId, layer,\n pose: { x: m.pose.x, y: m.pose.y, width: m.pose.width, height: m.pose.height, ...(m.pose.rotation ? { rotation: m.pose.rotation } : {}) },\n data: m.data,\n }));\n}\n\n/** The nodes a plot of `data` is: its root, a group filling `box`, then each mark under it, in drawing order. */\nexport function plotSpecs<TLayer extends string = 'main'>(data: PlotData, opts: PlotSpecsOptions<TLayer>): PlotSpec<TLayer>[] {\n const id = opts.id ?? 'plot';\n const layer = (opts.layer ?? 'main') as TLayer;\n const theme = opts.theme ?? PLOT_THEME;\n const { x, y, width, height } = opts.box;\n const marks = compilePlot(data, { width, height }, theme, opts.measure ?? textMeasure);\n const root: PlotSpec<TLayer> = { kind: 'group', id: id as NodeId, layer, pose: { x, y, width, height }, data: { plot: { data, theme } } };\n return [root, ...markSpecs(id, layer, marks)];\n}\n\n/** Options for {@link replacePlotData}. */\nexport interface ReplacePlotOptions {\n /** The undo entry's label. Default `'Edit chart'`. */\n label?: string;\n /** Draw in this theme from now on. Default the one the root keeps. */\n theme?: PlotTheme;\n /** Default {@link textMeasure}. */\n measure?: PlotMeasure;\n}\n\ntype AnyScene = Scene<unknown, string, unknown>;\n\n/** The plot root `rootId`'s trait. Throws when `rootId` is not one. */\nfunction rootTrait(scene: AnyScene, rootId: string): { node: NonNullable<ReturnType<AnyScene['get']>>; trait: PlotRootTrait } {\n const node = scene.get(rootId as NodeId);\n const trait = plotRootOf(node);\n if (node === undefined || trait === null) throw new Error(`replacePlotData: \"${rootId}\" is not a plot root`);\n return { node, trait };\n}\n\n/** Replaces the spec of the plot rooted at `rootId` with `data` and rebuilds its marks, as one undo entry. */\nexport function replacePlotData<TData, TLayer extends string, TPose>(\n scene: Scene<TData, TLayer, TPose>, rootId: string, data: PlotData, opts: ReplacePlotOptions = {},\n): void {\n const s = scene as unknown as AnyScene;\n const { node, trait } = rootTrait(s, rootId);\n const theme = opts.theme ?? trait.theme;\n const pose = node.pose as RectPose;\n const marks = compilePlot(data, { width: pose.width, height: pose.height }, theme, opts.measure ?? textMeasure);\n s.batch(opts.label ?? 'Edit chart', () => {\n s.update(node.id, { data: { ...(node.data as object), plot: { data, theme } } });\n const children = s.childrenOf(node.id);\n if (children.length > 0) s.removeMany(children);\n for (const spec of markSpecs(rootId, node.layer, marks)) s.add(spec as never);\n });\n}\n\n/** Every plot root in `scene`, in render order. */\nexport function plotRootsIn(scene: Scene<unknown, string, unknown>): NodeId[] {\n return scene.renderOrderNodes().filter((n) => plotRootOf(n) !== null).map((n) => n.id);\n}\n","/** Dragging an xychart's bar ends and line points to change their values. */\nimport type { PlotEditor } from '../editing/editors';\nimport { compileXyChart } from './compile';\nimport { setXyValue, xyValueAt } from './edit';\nimport type { XyChartData } from './types';\n\nconst seriesIndex = (datum: unknown): { series: number; index: number } | null => {\n const d = datum as { series?: unknown; index?: unknown } | undefined;\n return typeof d?.series === 'number' && typeof d.index === 'number' ? { series: d.series, index: d.index } : null;\n};\n\n/** A bar's value end and a line's points take a press; a drag moves the value along the value axis. */\nexport const xyEditor: PlotEditor<XyChartData> = {\n handle(data, { trait, pose }) {\n if ((trait.kind !== 'bar' && trait.kind !== 'point') || seriesIndex(trait.datum) === null) return null;\n const vertical = data.orientation !== 'horizontal';\n const cursor = vertical ? 'ns-resize' : 'ew-resize';\n const cx = pose.x + pose.width / 2;\n const cy = pose.y + pose.height / 2;\n if (trait.kind === 'point') return { at: { x: cx, y: cy }, cursor };\n const up = Number(trait.datum?.value ?? 0) >= 0;\n return vertical\n ? { at: { x: cx, y: up ? pose.y : pose.y + pose.height }, cursor }\n : { at: { x: up ? pose.x + pose.width : pose.x, y: cy }, cursor };\n },\n drag(data, trait, size, theme, measure) {\n const which = seriesIndex(trait.datum);\n if (which === null) return null;\n const { layout } = compileXyChart(data, size, theme, measure);\n return (at) => setXyValue(data, which.series, which.index, xyValueAt(layout, at));\n },\n};\n","/** What each chart kind lets a drag edit: which marks carry a handle, and the spec a drag of one proposes. */\nimport type { PlotBox, PlotMarkTrait, PlotPoint } from '../marks/types';\nimport type { PlotMeasure } from '../measure';\nimport type { PlotData, PlotKind } from '../plotData';\nimport type { PlotTheme } from '../theme';\nimport { xyEditor } from '../xychart/editor';\n\n/** A handle a press can take: where it stands in the plot's coordinates, and the cursor over it. */\nexport interface PlotHandle {\n at: PlotPoint;\n cursor: 'ns-resize' | 'ew-resize' | 'move';\n}\n\n/** One chart kind's edits. */\nexport interface PlotEditor<D extends PlotData> {\n /** The handle on a mark, or `null` for a mark a drag does not edit. */\n handle(data: D, mark: { trait: PlotMarkTrait; pose: PlotBox }): PlotHandle | null;\n /** A drag that took the handle on `mark`: the spec it proposes with the pointer at a point in the plot's coordinates.\n * `null` when the mark has nothing to edit. */\n drag(data: D, mark: PlotMarkTrait, size: { width: number; height: number }, theme: PlotTheme, measure: PlotMeasure): ((at: PlotPoint) => D) | null;\n}\n\nconst EDITORS: { readonly [K in PlotKind]?: PlotEditor<Extract<PlotData, { kind: K }>> } = {\n xychart: xyEditor,\n};\n\n/** The edits `data`'s kind allows, or `null` for a kind with none. */\nexport const plotEditorOf = (data: PlotData): PlotEditor<PlotData> | null =>\n (EDITORS[data.kind] as PlotEditor<PlotData> | undefined) ?? null;\n","/**\n * What makes a plot's editable marks grabbable: a hit-only point region at\n * each handle its kind's editor names, composed into a layer whose id is the\n * kind a press reports.\n */\nimport {\n composeAffordanceLayer, composeWorldPose, scenePoseAdapter,\n type Affordance, type AffordanceRegion, type RectPose, type RenderLayer, type Scene,\n} from '@weasel-js/core';\nimport type { PlotPoint } from '../marks/types';\nimport { plotMarkOf, plotRootOf, plotRootsIn } from '../plotScene';\nimport { plotEditorOf, type PlotHandle } from './editors';\n\n/** The layer id the handles are composed into. */\nexport const PLOT_HANDLE_LAYER_ID = 'plot-handles';\n\n/** The affordance kind a press on a handle reports. */\nexport const PLOT_HANDLE_AFFORDANCE_KIND = `layer:${PLOT_HANDLE_LAYER_ID}` as const;\n\n/** What a press on a handle hands the drag, as the hit's `payload`. */\nexport interface PlotHandleScratch {\n rootId: string;\n markId: string;\n /** The handle, in world coordinates. */\n at: PlotPoint;\n}\n\n/** A press's scratch, read back off the hit an action was handed. */\nexport function plotHandleScratchOf(hit: { payload?: unknown } | null | undefined): PlotHandleScratch | null {\n const p = hit?.payload as PlotHandleScratch | undefined;\n return p !== undefined && typeof p.rootId === 'string' && typeof p.markId === 'string' ? p : null;\n}\n\ntype AnyScene = Scene<unknown, string, unknown>;\n\n/** Where the plot root `rootId`'s corner stands in world coordinates. */\nexport function plotOrigin(scene: AnyScene, rootId: string): PlotPoint {\n const pose = composeWorldPose(scenePoseAdapter(scene as never), rootId, scene.composition.compose as never) as RectPose;\n return { x: pose.x, y: pose.y };\n}\n\n/** Every handle in `scene` an edit may take, in world coordinates, in render order. */\nexport function* plotHandles(scene: AnyScene): Iterable<PlotHandleScratch & PlotHandle> {\n for (const rootId of plotRootsIn(scene)) {\n const root = scene.get(rootId);\n const trait = plotRootOf(root);\n const editor = trait && plotEditorOf(trait.data);\n if (trait === null || editor === null || scene.isLocked(rootId) || scene.isHidden(rootId)) continue;\n const origin = plotOrigin(scene, rootId);\n for (const id of scene.childrenOf(rootId)) {\n const node = scene.get(id);\n const mark = plotMarkOf(node);\n if (node === undefined || mark === null) continue;\n const handle = editor.handle(trait.data, { trait: mark, pose: node.pose as RectPose });\n if (handle === null) continue;\n yield { rootId, markId: id, cursor: handle.cursor, at: { x: origin.x + handle.at.x, y: origin.y + handle.at.y } };\n }\n }\n}\n\nconst HIT_RADIUS_PX = 6;\n\nfunction handleAffordance(scene: AnyScene): Affordance {\n const regions = (): AffordanceRegion[] => [...plotHandles(scene)].map(({ rootId, markId, at, cursor }) => ({\n id: markId,\n targetId: null,\n shape: { kind: 'point', x: at.x, y: at.y, hitRadiusPx: HIT_RADIUS_PX },\n cursor,\n strength: 'exclusive',\n claimedKinds: ['pointer'],\n bind: () => ({ initialScratch: { rootId, markId, at } satisfies PlotHandleScratch }),\n }));\n return { id: PLOT_HANDLE_LAYER_ID, regions, regionsAt: regions };\n}\n\n/** The handle layer, for `CanvasExtensionApi.registerLayer`. */\nexport function plotHandleLayer(scene: Scene<unknown, string, unknown>): RenderLayer<unknown> {\n return composeAffordanceLayer(PLOT_HANDLE_LAYER_ID, 'Plot handles', [handleAffordance(scene)]) as unknown as RenderLayer<unknown>;\n}\n","/**\n * Dragging a plot's handle to edit the value behind it. The handle layer\n * claims the press; this action previews every mark the proposed spec\n * redraws, and commits the spec as one edit of the plot's root.\n */\nimport type { Action, InvocationCtx, NodeId, OngoingHandle, RectPose, Scene } from '@weasel-js/core';\nimport type { PlotPoint } from '../marks/types';\nimport { textMeasure, type PlotMeasure } from '../measure';\nimport { compilePlot, type PlotData } from '../plotData';\nimport { markSpecs, plotMarkOf, plotRootOf, replacePlotData, type PlotSpec } from '../plotScene';\nimport { plotEditorOf } from './editors';\nimport { plotHandleScratchOf, plotOrigin } from './handleLayer';\n\n/** The action that drags a plot's handle. */\nexport const PLOT_DRAG_ACTION_ID = 'plot.dragValue';\n\n/** A plot edited: the root, and the spec it now holds. */\nexport interface PlotEdit {\n rootId: string;\n data: PlotData;\n}\n\n/** Options for {@link createPlotDragAction}. */\nexport interface PlotDragOptions {\n id?: string;\n /** Default {@link textMeasure}. */\n measure?: PlotMeasure;\n /** Defaults to {@link replacePlotData} against `deps.scene`, labeled \"Edit value\". */\n commit?: (edit: PlotEdit, ctx: InvocationCtx) => void;\n}\n\ntype AnyScene = Scene<unknown, string, unknown>;\n\n/** What a drag captured at its press, read-only after. */\ninterface PlotPress {\n rootId: string;\n /** The spec the pointer at a point in the plot's coordinates proposes. */\n propose: (at: PlotPoint) => PlotData;\n /** From the world to the plot's coordinates, the grab offset included. */\n toPlot: (world: PlotPoint) => PlotPoint;\n redraw: (data: PlotData) => PlotSpec<string>[];\n deps: InvocationCtx['deps'];\n}\n\nfunction pressOf(ctx: InvocationCtx, measure: PlotMeasure): PlotPress | null {\n const pressed = plotHandleScratchOf(ctx.drag?.affordance);\n const scene = ctx.deps.scene as AnyScene | undefined;\n const root = pressed === null ? undefined : scene?.get(pressed.rootId as NodeId);\n const trait = plotRootOf(root);\n const mark = plotMarkOf(pressed === null ? undefined : scene?.get(pressed.markId as NodeId));\n const editor = trait && plotEditorOf(trait.data);\n if (pressed === null || scene === undefined || root === undefined || trait === null || mark === null || editor === null) return null;\n const size = { width: (root.pose as RectPose).width, height: (root.pose as RectPose).height };\n const propose = editor.drag(trait.data, mark, size, trait.theme, measure);\n if (propose === null) return null;\n const origin = plotOrigin(scene, pressed.rootId);\n const start = ctx.drag?.start ?? ctx.world;\n const grab = { x: pressed.at.x - start.x, y: pressed.at.y - start.y };\n return {\n rootId: pressed.rootId,\n propose,\n toPlot: (w) => ({ x: w.x + grab.x - origin.x, y: w.y + grab.y - origin.y }),\n redraw: (data) => markSpecs(pressed.rootId, root.layer, compilePlot(data, size, trait.theme, measure)),\n deps: ctx.deps,\n };\n}\n\n/** The default commit: the spec into the root, its marks rebuilt, as one history entry, \"Edit value\". */\nexport function commitPlotToScene(edit: PlotEdit, ctx: InvocationCtx, measure: PlotMeasure = textMeasure): void {\n const scene = ctx.deps.scene as AnyScene | undefined;\n if (scene === undefined || plotRootOf(scene.get(edit.rootId as NodeId)) === null) return;\n replacePlotData(scene, edit.rootId, edit.data, { label: 'Edit value', measure });\n}\n\n/** The `plot.dragValue` action: an ongoing drag that moves one value of a plot, previewing the marks it redraws. */\nexport function createPlotDragAction(opts: PlotDragOptions = {}): Action {\n const measure = opts.measure ?? textMeasure;\n const commit = opts.commit ?? ((edit: PlotEdit, ctx: InvocationCtx) => commitPlotToScene(edit, ctx, measure));\n return {\n id: opts.id ?? PLOT_DRAG_ACTION_ID,\n label: 'Edit value',\n group: 'plot',\n requires: ['scene'],\n eligible: { mode: 'normal' },\n invoker: {\n timing: 'ongoing',\n start(ctx: InvocationCtx): OngoingHandle {\n const p = pressOf(ctx, measure);\n if (p === null) return {};\n // Null until the pointer moves, so a still click commits nothing.\n let next: PlotData | null = null;\n let shown = new Map<string, PlotSpec<string>>();\n let open = true;\n const scene = ctx.deps.scene as AnyScene;\n const previewing = () => (open && next !== null ? shown : null);\n return {\n kind: 'plot-drag-value',\n onMove(moveCtx: InvocationCtx): void {\n next = p.propose(p.toPlot(moveCtx.world));\n shown = new Map(p.redraw(next).map((spec) => [spec.id as string, spec]));\n },\n previewIds: () => {\n const specs = previewing();\n return specs === null ? null : [...specs.keys()].filter((id) => scene.get(id as NodeId) !== undefined);\n },\n previewPose: (id) => previewing()?.get(id)?.pose ?? null,\n previewData: (id) => previewing()?.get(id)?.data ?? null,\n onEnd(endCtx: InvocationCtx, reason: 'commit' | 'cancel'): void {\n open = false;\n if (reason !== 'commit' || next === null) return;\n commit({ rootId: p.rootId, data: p.propose(p.toPlot(endCtx.world)) }, { ...endCtx, deps: p.deps });\n },\n };\n },\n },\n enabled: () => true as const,\n };\n}\n","import type { Action, Contribution, RenderLayer, Scene } from '@weasel-js/core';\nimport { PLOT_DRAG_ACTION_ID, createPlotDragAction, type PlotDragOptions } from './dragAction';\nimport { PLOT_HANDLE_AFFORDANCE_KIND, plotHandleLayer } from './handleLayer';\n\n/** The action id that absorbs a press on a handle, so it reaches neither marquee nor pan. */\nexport const GRAB_PLOT_HANDLE_ACTION_ID = 'plot.grabHandle';\n\nconst grabHandleAction: Action = {\n id: GRAB_PLOT_HANDLE_ACTION_ID,\n label: 'Grab chart handle',\n group: 'plot',\n invoker: { timing: 'immediate', run: () => {} },\n enabled: () => true as const,\n};\n\n/**\n * Both halves of editing a scene's plots by dragging: the handle layer to\n * `registerLayer`, and the contribution to pass as `ambient`, which binds a\n * drag on a handle to `plot.dragValue`. One without the other fails quietly:\n * the layer alone claims presses that start nothing, the contribution alone\n * binds a kind nothing reports.\n */\nexport function plotEditing(\n opts: PlotDragOptions & { scene: Scene<unknown, string, unknown> },\n): { layer: RenderLayer<unknown>; contribution: Contribution } {\n const actionId = opts.id ?? PLOT_DRAG_ACTION_ID;\n const target = `affordance:${PLOT_HANDLE_AFFORDANCE_KIND}` as const;\n return {\n layer: plotHandleLayer(opts.scene),\n contribution: {\n id: 'weasel-plot-editing',\n eligibility: { claimed: true },\n actions: [createPlotDragAction({ ...opts, id: actionId }), grabHandleAction],\n bindings: [\n { spec: { kind: 'drag', target }, actionId, opts: { id: 'weasel-plot-editing.drag' } },\n { spec: { kind: 'pointerDown', target }, actionId: GRAB_PLOT_HANDLE_ACTION_ID, opts: { id: 'weasel-plot-editing.pointerDown' } },\n { spec: { kind: 'click', target }, actionId: GRAB_PLOT_HANDLE_ACTION_ID, opts: { id: 'weasel-plot-editing.click' } },\n ],\n },\n };\n}\n","import {\n SceneCanvas, WeaselProvider, useLatest, useScene, type NodeId, type Paint, type RectPose, type SceneCanvasApi,\n} from '@weasel-js/core';\nimport { useEffect, useMemo, useState, type ReactElement } from 'react';\nimport { plotEditing } from './editing/plotEditing';\nimport type { PlotMeasure } from './measure';\nimport type { PlotData } from './plotData';\nimport { plotRootOf, plotSpecs, replacePlotData, type PlotSceneData, type PlotSpec } from './plotScene';\nimport type { PlotTheme } from './theme';\n\n/** Props for {@link PlotView}. */\nexport interface PlotViewProps {\n /** The chart. A new value redraws it, with no undo entry. */\n data: PlotData;\n /** Hears each edit a drag commits, with the spec it leaves. Undo and redo in the view report too. */\n onChange?: (data: PlotData) => void;\n width: number;\n height: number;\n /** Default the weasel theme's dark mode. */\n theme?: PlotTheme;\n measure?: PlotMeasure;\n background?: Paint;\n className?: string;\n 'aria-label'?: string;\n}\n\nconst ROOT = 'plot';\nconst FEATURES = ['pick'] as const;\n\n/**\n * A chart on its own canvas, edited by dragging its marks: a bar's end or a\n * line's point moves its value. Each drag is one undo entry. Text paints only\n * in a registered font family, so register the theme's (`registerCanvasFont`).\n */\nexport function PlotView(props: PlotViewProps): ReactElement {\n return (\n <WeaselProvider>\n <Inner {...props} />\n </WeaselProvider>\n );\n}\n\nfunction Inner({ data, onChange, width, height, theme, measure, background, className, 'aria-label': label }: PlotViewProps): ReactElement {\n const [initial] = useState(() => plotSpecs(data, {\n id: ROOT, box: { x: 0, y: 0, width, height }, ...(theme ? { theme } : {}), ...(measure ? { measure } : {}),\n }));\n const scene = useScene<PlotSceneData, 'main', RectPose>({ systemLayers: [{ id: 'main' }], initial: initial as PlotSpec[] });\n const changed = useLatest(onChange);\n\n // A spec from outside redraws without an undo entry; one the view reported back is already drawn.\n useEffect(() => {\n const root = scene.get(ROOT as NodeId);\n const pose = root?.pose;\n const trait = plotRootOf(root);\n const sized = pose !== undefined && pose.width === width && pose.height === height;\n if (trait === null || (trait.data === data && sized && (theme === undefined || trait.theme === theme))) return;\n scene.untracked(() => {\n if (!sized) scene.setPose(ROOT as NodeId, { x: 0, y: 0, width, height });\n replacePlotData(scene, ROOT, data, { ...(theme ? { theme } : {}), ...(measure ? { measure } : {}) });\n });\n }, [scene, data, width, height, theme, measure]);\n\n useEffect(() => {\n let last = plotRootOf(scene.get(ROOT as NodeId))?.data;\n return scene.subscribe(() => {\n const now = plotRootOf(scene.get(ROOT as NodeId))?.data;\n if (now === undefined || now === last) return;\n last = now;\n changed.current?.(now);\n });\n }, [scene, changed]);\n\n const editing = useMemo(() => plotEditing({ scene: scene as never, ...(measure ? { measure } : {}) }), [scene, measure]);\n const ambient = useMemo(() => [editing.contribution], [editing]);\n const [canvas, setCanvas] = useState<SceneCanvasApi | null>(null);\n useEffect(() => (canvas === null ? undefined : canvas.registerLayer(editing.layer)), [canvas, editing]);\n\n return (\n <div className={className} data-wzl-plot=\"\">\n <SceneCanvas\n ref={setCanvas}\n scene={scene}\n features={FEATURES}\n enableKeybindings\n ambient={ambient}\n width={width}\n height={height}\n {...(background ? { backgroundFill: background } : {})}\n {...(label ? { 'aria-label': label } : {})}\n />\n </div>\n );\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/marks/boxes.ts","../src/marks/paths.ts","../src/marks/text.ts","../src/axes.ts","../src/theme.ts","../src/measure.ts","../src/chartTitle.ts","../src/gantt/dates.ts","../src/gantt/schedule.ts","../src/gantt/compile.ts","../src/gitgraph/replay.ts","../src/gitgraph/compile.ts","../src/journey/compile.ts","../src/packet/compile.ts","../src/pie/compile.ts","../src/quadrant/compile.ts","../src/radar/compile.ts","../src/sankey/layout.ts","../src/sankey/compile.ts","../src/timeline/edit.ts","../src/timeline/compile.ts","../src/xychart/compile.ts","../src/plotData.ts","../src/xychart/edit.ts","../src/gantt/edit.ts","../src/pie/edit.ts","../src/quadrant/edit.ts","../src/journey/edit.ts","../src/gitgraph/edit.ts","../src/sankey/edit.ts","../src/packet/edit.ts","../src/radar/edit.ts","../src/plotScene.ts","../src/gantt/editor.ts","../src/gitgraph/editor.ts","../src/journey/editor.ts","../src/packet/editor.ts","../src/pie/editor.ts","../src/quadrant/editor.ts","../src/radar/editor.ts","../src/sankey/editor.ts","../src/timeline/editor.ts","../src/xychart/editor.ts","../src/editing/editors.ts","../src/editing/textEdit.ts","../src/editing/handleLayer.ts","../src/editing/dragAction.ts","../src/editing/plotEditing.ts","../src/PlotView.tsx","../src/editing/schemaKit.ts","../src/editing/lists.ts","../src/gantt/structure.ts","../src/gantt/text.ts","../src/gantt/schema.ts","../src/gitgraph/structure.ts","../src/gitgraph/schema.ts","../src/journey/structure.ts","../src/journey/schema.ts","../src/packet/structure.ts","../src/packet/schema.ts","../src/pie/structure.ts","../src/pie/schema.ts","../src/quadrant/structure.ts","../src/quadrant/schema.ts","../src/radar/structure.ts","../src/radar/schema.ts","../src/sankey/structure.ts","../src/sankey/schema.ts","../src/timeline/structure.ts","../src/timeline/schema.ts","../src/xychart/structure.ts","../src/xychart/schema.ts","../src/editing/schemas.ts"],"names":["width","labels","at","GAP","n","unit","named","ids","step","RADIUS","legend","legendMarks","SWATCH","column","_","LABEL_GAP","INSET","scale","slots","withTask","flowOf","setText","useLatest","useMemo","numberOf","taskOf","freshTask","withTasks","withPoint","ID","periodOf","valueColumn"],"mappings":"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","file":"index.js","sourcesContent":["/** Marks drawn as a box: bars, spans and points. Each carries its outline as `path`, which every export writes. */\nimport { ellipsePath, type Path } from '@weasel-js/geom';\nimport type { PlotBox, PlotDatum, PlotMark } from './types';\n\nconst rectOf = (b: PlotBox): Path => ({ kind: 'rect', x: b.x, y: b.y, width: b.width, height: b.height });\n\nconst fillOf = (color: string, opacity?: number) => ({ paint: { color, ...(opacity !== undefined ? { opacity } : {}) } });\n\n/** Options for {@link barMark}. */\nexport interface BarMarkOptions {\n key: string;\n /** Where the bar stands along the category axis: its left edge, or its top for a horizontal bar. */\n x: number;\n /** The bar's breadth across the category axis. */\n width: number;\n /** The baseline the bar rises from, and the end it reaches, along the value axis. */\n from: number;\n to: number;\n color: string;\n datum?: PlotDatum;\n /** Default `'vertical'`: `x` and `width` run along x. */\n orient?: 'vertical' | 'horizontal';\n}\n\n/** A bar from `from` to `to`, either way round. */\nexport function barMark(opts: BarMarkOptions): PlotMark {\n const lo = Math.min(opts.from, opts.to);\n const length = Math.abs(opts.to - opts.from);\n const pose = opts.orient === 'horizontal'\n ? { x: lo, y: opts.x, width: length, height: opts.width }\n : { x: opts.x, y: lo, width: opts.width, height: length };\n return {\n key: opts.key,\n pose,\n data: { plotMark: { kind: 'bar', ...(opts.datum ? { datum: opts.datum } : {}) }, path: rectOf(pose), fill: fillOf(opts.color) },\n };\n}\n\n/** Options for {@link spanMark}. */\nexport interface SpanMarkOptions {\n key: string;\n /** Start and end along x. */\n x0: number;\n x1: number;\n /** Its row: top and height. */\n y: number;\n height: number;\n color: string;\n opacity?: number;\n datum?: PlotDatum;\n}\n\n/** A span across x, as a task's bar on a timeline is. */\nexport function spanMark(opts: SpanMarkOptions): PlotMark {\n const pose = { x: Math.min(opts.x0, opts.x1), y: opts.y, width: Math.abs(opts.x1 - opts.x0), height: opts.height };\n return {\n key: opts.key,\n pose,\n data: {\n plotMark: { kind: 'span', ...(opts.datum ? { datum: opts.datum } : {}) },\n path: rectOf(pose),\n fill: fillOf(opts.color, opts.opacity),\n },\n };\n}\n\n/** Options for {@link pointMark}. */\nexport interface PointMarkOptions {\n key: string;\n x: number;\n y: number;\n /** Default 3. */\n radius?: number;\n color: string;\n datum?: PlotDatum;\n}\n\n/** A dot centered on `x`, `y`. */\nexport function pointMark(opts: PointMarkOptions): PlotMark {\n const r = opts.radius ?? 3;\n const pose = { x: opts.x - r, y: opts.y - r, width: 2 * r, height: 2 * r };\n return {\n key: opts.key,\n pose,\n data: { plotMark: { kind: 'point', ...(opts.datum ? { datum: opts.datum } : {}) }, path: ellipsePath(pose), fill: fillOf(opts.color) },\n };\n}\n","/** Marks drawn as a path: lines, areas, rules, arcs and ribbons. */\nimport { boundsOfPath, pathFromD, type Path } from '@weasel-js/geom';\nimport type { PlotDatum, PlotMark, PlotMarkData, PlotPoint, SolidStroke } from './types';\n\nconst n = (v: number) => Number(v.toFixed(3));\nconst at = (p: PlotPoint) => `${n(p.x)} ${n(p.y)}`;\n\n/** A mark whose pose is its path's box, so the painter draws the path where it was built. */\nfunction pathMark(key: string, path: Path, data: Omit<PlotMarkData, 'path'>): PlotMark {\n const b = boundsOfPath(path);\n return { key, pose: { x: b.x, y: b.y, width: b.width, height: b.height }, data: { ...data, path } };\n}\n\nconst traitOf = (kind: PlotMarkData['plotMark']['kind'], datum?: PlotDatum) => ({ kind, ...(datum ? { datum } : {}) });\n\n/** Options for {@link lineMark}. */\nexport interface LineMarkOptions {\n key: string;\n /** At least one. */\n points: readonly PlotPoint[];\n color: string;\n /** Default 2. */\n width?: number;\n dash?: number[];\n datum?: PlotDatum;\n}\n\n/** A line through `points`, in order. */\nexport function lineMark(opts: LineMarkOptions): PlotMark {\n const [first, ...rest] = opts.points;\n if (first === undefined) throw new Error(`lineMark \"${opts.key}\": no points`);\n const d = `M ${at(first)}${rest.map((p) => ` L ${at(p)}`).join('')}`;\n const stroke: SolidStroke = {\n paint: { color: opts.color }, width: opts.width ?? 2, join: 'round', cap: 'round', ...(opts.dash ? { dash: opts.dash } : {}),\n };\n return pathMark(opts.key, pathFromD(d), { plotMark: traitOf('line', opts.datum), stroke });\n}\n\n/** Options for {@link ruleMark}. */\nexport interface RuleMarkOptions {\n key: string;\n from: PlotPoint;\n to: PlotPoint;\n color: string;\n /** Default 1. */\n width?: number;\n dash?: number[];\n datum?: PlotDatum;\n}\n\n/** A straight rule from `from` to `to`: an axis line, a tick, a grid line, a marker. */\nexport function ruleMark(opts: RuleMarkOptions): PlotMark {\n const stroke: SolidStroke = { paint: { color: opts.color }, width: opts.width ?? 1, cap: 'butt', ...(opts.dash ? { dash: opts.dash } : {}) };\n return pathMark(opts.key, pathFromD(`M ${at(opts.from)} L ${at(opts.to)}`), { plotMark: traitOf('rule', opts.datum), stroke });\n}\n\n/** Options for {@link areaMark}. */\nexport interface AreaMarkOptions {\n key: string;\n /** The upper edge, in order. */\n top: readonly PlotPoint[];\n /** The lower edge, in the same order as `top`. Default a baseline at `baseline` under each top point. */\n bottom?: readonly PlotPoint[];\n baseline?: number;\n color: string;\n /** Default 0.35. */\n opacity?: number;\n datum?: PlotDatum;\n}\n\n/** The region between two edges, as an area chart or a radar's polygon fills it. */\nexport function areaMark(opts: AreaMarkOptions): PlotMark {\n if (opts.top.length === 0) throw new Error(`areaMark \"${opts.key}\": no points`);\n const bottom = opts.bottom ?? (opts.baseline !== undefined ? opts.top.map((p) => ({ x: p.x, y: opts.baseline! })) : []);\n const ring = [...opts.top, ...[...bottom].reverse()];\n const d = `M ${ring.map(at).join(' L ')} Z`;\n return pathMark(opts.key, pathFromD(d), {\n plotMark: traitOf('area', opts.datum), fill: { paint: { color: opts.color, opacity: opts.opacity ?? 0.35 } },\n });\n}\n\n/** Options for {@link arcMark}. */\nexport interface ArcMarkOptions {\n key: string;\n center: PlotPoint;\n /** 0 for a pie slice. */\n innerRadius: number;\n outerRadius: number;\n /** Radians clockwise from twelve o'clock. */\n startAngle: number;\n endAngle: number;\n color: string;\n datum?: PlotDatum;\n}\n\nconst polar = (c: PlotPoint, r: number, a: number): PlotPoint => ({ x: c.x + r * Math.sin(a), y: c.y - r * Math.cos(a) });\n\n/** One side of an arc from `a0` to `a1` at radius `r`, as SVG arc commands, in halves past a half turn. */\nfunction arcTo(c: PlotPoint, r: number, a0: number, a1: number): string {\n const sweep = a1 >= a0 ? 1 : 0;\n const mid = (a0 + a1) / 2;\n const to = (a: number) => ` A ${n(r)} ${n(r)} 0 0 ${sweep} ${at(polar(c, r, a))}`;\n return Math.abs(a1 - a0) > Math.PI ? to(mid) + to(a1) : to(a1);\n}\n\n/** A slice of a ring, as a pie or a donut is cut. */\nexport function arcMark(opts: ArcMarkOptions): PlotMark {\n const { center: c, innerRadius: r0, outerRadius: r1, startAngle: a0 } = opts;\n const a1 = Math.abs(opts.endAngle - a0) >= 2 * Math.PI ? a0 + Math.sign(opts.endAngle - a0) * (2 * Math.PI - 1e-6) : opts.endAngle;\n let d = `M ${at(polar(c, r1, a0))}${arcTo(c, r1, a0, a1)}`;\n d += r0 > 0 ? ` L ${at(polar(c, r0, a1))}${arcTo(c, r0, a1, a0)} Z` : ` L ${at(c)} Z`;\n return pathMark(opts.key, pathFromD(d), { plotMark: traitOf('arc', opts.datum), fill: { paint: { color: opts.color } } });\n}\n\n/** Options for {@link ribbonMark}. */\nexport interface RibbonMarkOptions {\n key: string;\n /** The end it leaves: an x, and the span along y it leaves across. */\n from: { x: number; y0: number; y1: number };\n to: { x: number; y0: number; y1: number };\n color: string;\n /** Default 0.45. */\n opacity?: number;\n datum?: PlotDatum;\n}\n\n/** A band curving from one span to another, as a flow between two nodes is drawn. */\nexport function ribbonMark(opts: RibbonMarkOptions): PlotMark {\n const { from: f, to: t } = opts;\n const mx = (f.x + t.x) / 2;\n const d = `M ${n(f.x)} ${n(f.y0)} C ${n(mx)} ${n(f.y0)} ${n(mx)} ${n(t.y0)} ${n(t.x)} ${n(t.y0)}`\n + ` L ${n(t.x)} ${n(t.y1)} C ${n(mx)} ${n(t.y1)} ${n(mx)} ${n(f.y1)} ${n(f.x)} ${n(f.y1)} Z`;\n return pathMark(opts.key, pathFromD(d), {\n plotMark: traitOf('ribbon', opts.datum), fill: { paint: { color: opts.color, opacity: opts.opacity ?? 0.45 } },\n });\n}\n","/** Marks drawn as text: titles, tick labels, values. */\nimport type { PlotMeasure } from '../measure';\nimport type { PlotFont } from '../theme';\nimport type { PlotDatum, PlotMark } from './types';\n\n/** Options for {@link textMark}. */\nexport interface TextMarkOptions {\n key: string;\n text: string;\n /** The anchor point. */\n x: number;\n y: number;\n /** Which part of the text stands on `x`. Default `'middle'`. */\n anchor?: 'start' | 'middle' | 'end';\n /** Which part of the text stands on `y`. Default `'middle'`. */\n baseline?: 'top' | 'middle' | 'bottom';\n font: PlotFont;\n color: string;\n measure: PlotMeasure;\n /** Turns the text a quarter turn counterclockwise about the anchor, as a vertical axis's title reads. */\n vertical?: boolean;\n bold?: boolean;\n datum?: PlotDatum;\n}\n\nconst ALIGN = { start: 'left', middle: 'center', end: 'right' } as const;\n\n/** One line of text, its box measured with `measure` and placed by its anchor. */\nexport function textMark(opts: TextMarkOptions): PlotMark {\n const { width, height } = opts.measure(opts.text, opts.font);\n const anchor = opts.anchor ?? 'middle';\n const baseline = opts.baseline ?? 'middle';\n // Along and across the line, which a quarter turn swaps on screen.\n const along = anchor === 'start' ? 0 : anchor === 'middle' ? -width / 2 : -width;\n const across = baseline === 'top' ? 0 : baseline === 'middle' ? -height / 2 : -height;\n const center = opts.vertical\n ? { x: opts.x + across + height / 2, y: opts.y - along - width / 2 }\n : { x: opts.x + along + width / 2, y: opts.y + across + height / 2 };\n return {\n key: opts.key,\n pose: {\n x: center.x - width / 2, y: center.y - height / 2, width, height, ...(opts.vertical ? { rotation: -Math.PI / 2 } : {}),\n },\n data: {\n plotMark: { kind: 'text', ...(opts.datum ? { datum: opts.datum } : {}) },\n text: opts.text,\n style: { fontFamily: opts.font.fontFamily, fontSize: opts.font.fontSize, align: ALIGN[anchor], ...(opts.bold ? { fontWeight: 700 } : {}) },\n fill: { paint: { color: opts.color } },\n verticalAlign: 'center',\n },\n };\n}\n","/** Axes as marks: a rule along a scale's range, a tick and a label at each of its ticks, grid lines, a title. */\nimport { ruleMark } from './marks/paths';\nimport { textMark } from './marks/text';\nimport type { PlotMark } from './marks/types';\nimport type { PlotMeasure } from './measure';\nimport type { Scale } from './scales/types';\nimport type { PlotTheme } from './theme';\n\n/** Which side of the plot an axis runs along. Its scale's range runs along x for top and bottom, along y otherwise. */\nexport type AxisSide = 'top' | 'bottom' | 'left' | 'right';\n\n/** Options for {@link axisMarks} and {@link axisRoom}. */\nexport interface AxisOptions<T> {\n scale: Scale<T>;\n side: AxisSide;\n /** Where the axis line stands across its scale: a y for top and bottom, an x for left and right. */\n at: number;\n /** Draw a grid line at each tick, from the axis across to here. */\n gridTo?: number;\n title?: string;\n /** How many ticks to ask the scale for. */\n ticks?: number;\n /** Prefixes every mark's key. Default `axis:<side>`. */\n key?: string;\n theme: PlotTheme;\n measure: PlotMeasure;\n}\n\nconst TICK = 5;\nconst GAP = 4;\n\nconst isHorizontal = (side: AxisSide) => side === 'top' || side === 'bottom';\n/** Which way leads away from the plot across the axis. */\nconst outward = (side: AxisSide) => (side === 'bottom' || side === 'right' ? 1 : -1);\n\n/** How far an axis reaches out from its line: ticks, labels and title. */\nexport function axisRoom<T>(opts: AxisOptions<T>): number {\n const { scale, side, theme, measure } = opts;\n const sizes = scale.ticks(opts.ticks).map((t) => measure(scale.format(t), theme.font));\n const labels = sizes.length === 0 ? 0 : Math.max(...sizes.map((s) => (isHorizontal(side) ? s.height : s.width)));\n const title = opts.title ? measure(opts.title, theme.font).height + GAP : 0;\n return TICK + GAP + labels + title;\n}\n\n/** Every mark one axis is drawn with. Keys: `<key>:rule`, `<key>:tick:<i>`, `<key>:label:<i>`, `<key>:grid:<i>`, `<key>:title`. */\nexport function axisMarks<T>(opts: AxisOptions<T>): PlotMark[] {\n const { scale, side, at, theme, measure } = opts;\n const key = opts.key ?? `axis:${side}`;\n const h = isHorizontal(side);\n const out = outward(side);\n const pt = (along: number, across: number) => (h ? { x: along, y: across } : { x: across, y: along });\n const [r0, r1] = scale.range;\n const marks: PlotMark[] = [];\n const ticks = scale.ticks(opts.ticks);\n ticks.forEach((t, i) => {\n const p = scale.position(t);\n if (opts.gridTo !== undefined) {\n marks.push(ruleMark({ key: `${key}:grid:${i}`, from: pt(p, at), to: pt(p, opts.gridTo), color: theme.grid }));\n }\n });\n marks.push(ruleMark({ key: `${key}:rule`, from: pt(r0, at), to: pt(r1, at), color: theme.axis }));\n let reach = 0;\n ticks.forEach((t, i) => {\n const p = scale.position(t);\n marks.push(ruleMark({ key: `${key}:tick:${i}`, from: pt(p, at), to: pt(p, at + out * TICK), color: theme.axis }));\n const anchorAt = pt(p, at + out * (TICK + GAP));\n const label = textMark({\n key: `${key}:label:${i}`, text: scale.format(t), ...anchorAt, font: theme.font, color: theme.text, measure,\n anchor: h ? 'middle' : out > 0 ? 'start' : 'end',\n baseline: h ? (out > 0 ? 'top' : 'bottom') : 'middle',\n });\n reach = Math.max(reach, h ? label.pose.height : label.pose.width);\n marks.push(label);\n });\n if (opts.title) {\n const across = at + out * (TICK + GAP + reach + GAP);\n marks.push(textMark({\n key: `${key}:title`, text: opts.title, ...pt((r0 + r1) / 2, across), font: theme.font, color: theme.text, measure,\n anchor: 'middle', baseline: out > 0 ? 'top' : 'bottom', vertical: !h,\n }));\n }\n return marks;\n}\n","import { THEMES, type ResolvedTheme } from '@weasel-js/theme';\n\n/** The face a chart's text is set in. */\nexport interface PlotFont {\n fontFamily: string;\n fontSize: number;\n}\n\n/** The colors a chart is drawn in, by role, and its face. Plain strings, so a scene can keep it. */\nexport interface PlotTheme {\n /** Titles, labels and values. */\n text: string;\n /** Axis rules and ticks. */\n axis: string;\n /** Grid lines behind the marks. */\n grid: string;\n /** The colors series take in turn. Never empty. */\n series: readonly string[];\n font: PlotFont;\n}\n\n/** The weasel theme's swatches, in the order series take them. */\nconst SWATCHES = ['sky', 'amber', 'green', 'rose', 'violet', 'teal', 'citron', 'fuchsia', 'blue', 'red'] as const;\n\n/** A plot theme from a resolved weasel theme: text in `fg`, axes in `border-strong`, grid in `border`, series in\n * its swatches. */\nexport function plotThemeFrom(resolved: Readonly<Record<string, string>> | ResolvedTheme, font: PlotFont = PLOT_FONT): PlotTheme {\n const at = (token: string) => (resolved as Record<string, string>)[`--wzl-${token}`] ?? '#888888';\n return {\n text: at('fg'),\n axis: at('border-strong'),\n grid: at('border'),\n series: SWATCHES.map((s) => at(`swatch-${s}`)),\n font,\n };\n}\n\n/** 12px sans-serif. */\nexport const PLOT_FONT: PlotFont = { fontFamily: 'sans-serif', fontSize: 12 };\n\n/** The weasel theme in its dark mode. */\nexport const PLOT_THEME: PlotTheme = plotThemeFrom(THEMES.weasel.selections['mode=dark,density=comfortable']);\n\n/** The `i`th series' color, wrapping. */\nexport const seriesColor = (theme: PlotTheme, i: number): string =>\n theme.series[((i % theme.series.length) + theme.series.length) % theme.series.length] ?? theme.text;\n","import { measureTextBounds } from '@weasel-js/text';\nimport type { PlotFont } from './theme';\n\n/** How wide and tall one line of text is set in `font`. */\nexport type PlotMeasure = (text: string, font: PlotFont) => { width: number; height: number };\n\n/** Measures as the kit's text renderer lays text out, from the registered face's metrics; a line is 1.2 sizes tall. */\nexport const textMeasure: PlotMeasure = (text, font) => {\n const { width } = measureTextBounds(text, { fontFamily: font.fontFamily, fontSize: font.fontSize });\n return { width: Math.ceil(width), height: Math.ceil(font.fontSize * 1.2) };\n};\n","/** A chart's title: one bold line across its top, which a text edit sets. Every kind draws its title this way. */\nimport { textMark } from './marks/text';\nimport type { PlotMark } from './marks/types';\nimport type { PlotMeasure } from './measure';\nimport type { PlotTheme } from './theme';\n\n/** The room every chart leaves around its edge. */\nexport const CHART_PAD = 12;\nconst GAP = 8;\n\n/** `title` centered across the top of a box `width` wide, keyed `title`, and where the rest of the chart starts below\n * it: {@link CHART_PAD} down when there is no title. */\nexport function chartTitle(\n title: string | undefined, width: number, theme: PlotTheme, measure: PlotMeasure,\n): { marks: PlotMark[]; top: number } {\n if (!title) return { marks: [], top: CHART_PAD };\n const mark = textMark({\n key: 'title', text: title, x: width / 2, y: CHART_PAD, baseline: 'top', font: theme.font, color: theme.text, measure, bold: true,\n datum: { edit: 'title' },\n });\n return { marks: [mark], top: CHART_PAD + mark.pose.height + GAP };\n}\n\n/** `data` with its title set to `text`, trimmed; an empty one drops it. `data` itself when that changes nothing. */\nexport function withTitle<D extends { title?: string }>(data: D, text: string): D {\n const title = text.trim();\n if ((data.title ?? '') === title) return data;\n const { title: _, ...rest } = data;\n return (title === '' ? rest : { ...rest, title }) as D;\n}\n","/** Dates as a gantt writes them: Day.js formats read and written, strftime for the axis. Every instant is UTC. */\n\nconst TOKENS = ['YYYY', 'SSS', 'YY', 'MM', 'DD', 'HH', 'mm', 'ss', 'M', 'D', 'H', 'm', 's', 'X', 'x'] as const;\ntype Token = (typeof TOKENS)[number];\ntype Part = { token: Token } | { literal: string };\n\nconst PATTERN: Readonly<Record<Token, string>> = {\n YYYY: '\\\\d{4}', YY: '\\\\d{2}', MM: '\\\\d{2}', M: '\\\\d{1,2}', DD: '\\\\d{2}', D: '\\\\d{1,2}', HH: '\\\\d{2}', H: '\\\\d{1,2}',\n mm: '\\\\d{2}', m: '\\\\d{1,2}', ss: '\\\\d{2}', s: '\\\\d{1,2}', SSS: '\\\\d{3}', X: '[+-]?\\\\d+(?:\\\\.\\\\d+)?', x: '[+-]?\\\\d+',\n};\n\n/** The default `dateFormat`. */\nexport const GANTT_DATE_FORMAT = 'YYYY-MM-DD';\n\n/** `format` as tokens and the literal text between them; `[…]` is literal. */\nfunction partsOf(format: string): Part[] {\n const parts: Part[] = [];\n let literal = '';\n for (let i = 0; i < format.length;) {\n const close = format[i] === '[' ? format.indexOf(']', i) : -1;\n if (close > i) {\n literal += format.slice(i + 1, close);\n i = close + 1;\n continue;\n }\n const token = TOKENS.find((t) => format.startsWith(t, i));\n if (token === undefined) {\n literal += format[i];\n i++;\n continue;\n }\n if (literal !== '') parts.push({ literal });\n literal = '';\n parts.push({ token });\n i += token.length;\n }\n if (literal !== '') parts.push({ literal });\n return parts;\n}\n\nconst escapeRe = (s: string) => s.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n\n/** Whether dates in `format` carry a time of day, so an edit snaps to whole hours rather than days. */\nexport const formatHasHours = (format: string): boolean =>\n partsOf(format).some((p) => 'token' in p && ['HH', 'H', 'X', 'x'].includes(p.token));\n\n/** `text` read strictly in Day.js `format`, as milliseconds since the epoch; `null` when it does not read. Fields the\n * format lacks default to 1970-01-01 00:00. */\nexport function parseGanttDate(text: string, format: string): number | null {\n const parts = partsOf(format);\n const m = new RegExp(`^${parts.map((p) => ('token' in p ? `(${PATTERN[p.token]})` : escapeRe(p.literal))).join('')}$`).exec(text.trim());\n if (m === null) return null;\n const f = { year: 1970, month: 1, day: 1, hour: 0, minute: 0, second: 0, ms: 0 };\n let group = 1;\n for (const p of parts) {\n if (!('token' in p)) continue;\n const n = Number(m[group++]);\n switch (p.token) {\n case 'X': return n * 1000;\n case 'x': return n;\n case 'YYYY': f.year = n; break;\n case 'YY': f.year = n + (n > 68 ? 1900 : 2000); break;\n case 'MM': case 'M': f.month = n; break;\n case 'DD': case 'D': f.day = n; break;\n case 'HH': case 'H': f.hour = n; break;\n case 'mm': case 'm': f.minute = n; break;\n case 'ss': case 's': f.second = n; break;\n case 'SSS': f.ms = n; break;\n }\n }\n if (f.month < 1 || f.month > 12 || f.day < 1 || f.hour > 23 || f.minute > 59 || f.second > 59) return null;\n const t = Date.UTC(f.year, f.month - 1, f.day, f.hour, f.minute, f.second, f.ms);\n return new Date(t).getUTCDate() === f.day ? t : null;\n}\n\nconst pad = (n: number, width = 2) => String(n).padStart(width, '0');\n\n/** `t` written in Day.js `format`. */\nexport function formatGanttDate(t: number, format: string): string {\n const d = new Date(t);\n const field: Readonly<Record<Token, () => string>> = {\n YYYY: () => pad(d.getUTCFullYear(), 4), YY: () => pad(d.getUTCFullYear() % 100), MM: () => pad(d.getUTCMonth() + 1),\n M: () => String(d.getUTCMonth() + 1), DD: () => pad(d.getUTCDate()), D: () => String(d.getUTCDate()),\n HH: () => pad(d.getUTCHours()), H: () => String(d.getUTCHours()), mm: () => pad(d.getUTCMinutes()), m: () => String(d.getUTCMinutes()),\n ss: () => pad(d.getUTCSeconds()), s: () => String(d.getUTCSeconds()), SSS: () => pad(d.getUTCMilliseconds(), 3),\n X: () => String(t / 1000), x: () => String(t),\n };\n return partsOf(format).map((p) => ('token' in p ? field[p.token]() : p.literal)).join('');\n}\n\nconst MONTHS = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'];\nconst DAYS = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'];\n\n/** `t` written in strftime `format`: `%Y %y %m %d %e %b %B %a %A %H %I %M %S %p %j %%`; any other `%` sequence as is. */\nexport function strftime(t: number, format: string): string {\n const d = new Date(t);\n const hour = d.getUTCHours();\n const yearDay = Math.floor((t - Date.UTC(d.getUTCFullYear(), 0, 1)) / 86_400_000) + 1;\n const field: Readonly<Record<string, () => string>> = {\n Y: () => String(d.getUTCFullYear()), y: () => pad(d.getUTCFullYear() % 100), m: () => pad(d.getUTCMonth() + 1),\n d: () => pad(d.getUTCDate()), e: () => String(d.getUTCDate()).padStart(2, ' '), b: () => MONTHS[d.getUTCMonth()]!.slice(0, 3),\n B: () => MONTHS[d.getUTCMonth()]!, a: () => DAYS[d.getUTCDay()]!.slice(0, 3), A: () => DAYS[d.getUTCDay()]!,\n H: () => pad(hour), I: () => pad(hour % 12 === 0 ? 12 : hour % 12), M: () => pad(d.getUTCMinutes()),\n S: () => pad(d.getUTCSeconds()), p: () => (hour < 12 ? 'AM' : 'PM'), j: () => pad(yearDay, 3), '%': () => '%',\n };\n return format.replace(/%(.)/g, (all, c: string) => field[c]?.() ?? all);\n}\n","/** A gantt's tasks resolved to instants: dependencies followed, durations counted past excluded days. */\nimport { GANTT_DATE_FORMAT, parseGanttDate } from './dates';\nimport type { GanttData, GanttTask, GanttUnit } from './types';\n\n/** Milliseconds in a day. */\nexport const DAY = 86_400_000;\nconst HOUR = 3_600_000;\nconst FIXED: Readonly<Partial<Record<GanttUnit, number>>> = { ms: 1, s: 1000, m: 60_000, h: HOUR };\n/** Past this many days, a duration is not walked day by day for excluded days. */\nconst WALK_LIMIT = 100_000;\nconst WEEKDAYS = ['sunday', 'monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'saturday'];\n\n/** Where one task runs, in milliseconds since the epoch. */\nexport interface GanttSpan {\n start: number;\n end: number;\n}\n\n/** Every task's span, by section and place in it, and the instants they cover between them. */\nexport interface GanttSchedule {\n spans: readonly (readonly GanttSpan[])[];\n domain: readonly [number, number];\n}\n\n/** The chart's `dateFormat`, or the default. */\nexport const dateFormatOf = (data: GanttData): string => data.dateFormat?.trim() || GANTT_DATE_FORMAT;\n\nconst dayOf = (t: number) => Math.floor(t / DAY);\n\n/** Whether the day `t` falls on is one `excludes` names. With every weekday excluded, none is. */\nexport function excludedDays(data: GanttData): (t: number) => boolean {\n const format = dateFormatOf(data);\n const weekdays = new Set<number>();\n const dates = new Set<number>();\n for (const raw of data.excludes ?? []) {\n const word = raw.trim().toLowerCase();\n if (word === 'weekends') {\n weekdays.add(0);\n weekdays.add(6);\n } else if (WEEKDAYS.includes(word)) {\n weekdays.add(WEEKDAYS.indexOf(word));\n } else {\n const t = parseGanttDate(raw, format);\n if (t !== null) dates.add(dayOf(t));\n }\n }\n if (weekdays.size === 7) return () => false;\n return (t) => weekdays.has(new Date(t).getUTCDay()) || dates.has(dayOf(t));\n}\n\nfunction addMonths(t: number, months: number): number {\n const whole = Math.trunc(months);\n const d = new Date(t);\n d.setUTCMonth(d.getUTCMonth() + whole);\n return d.getTime() + (months - whole) * 30 * DAY;\n}\n\n/** Where a task of `amount` `unit`s from `start` ends. Days and weeks count only days not `excluded`. */\nexport function addGanttDuration(start: number, amount: number, unit: GanttUnit, excluded: (t: number) => boolean): number {\n const n = Number.isFinite(amount) ? amount : 0;\n const fixed = FIXED[unit];\n if (fixed !== undefined) return start + n * fixed;\n if (unit === 'M' || unit === 'y') return addMonths(start, unit === 'y' ? n * 12 : n);\n const days = unit === 'w' ? n * 7 : n;\n let end = start + days * DAY;\n if (days > WALK_LIMIT) return end;\n for (let t = start; t < end; t += DAY) if (excluded(t)) end += DAY;\n return end;\n}\n\n/** How many whole `unit`s run from `start` to `end`, counted as {@link addGanttDuration} counts them. */\nexport function ganttDurationBetween(start: number, end: number, unit: GanttUnit, excluded: (t: number) => boolean): number {\n const fixed = FIXED[unit];\n if (fixed !== undefined) return Math.round((end - start) / fixed);\n if (unit === 'M' || unit === 'y') return Math.round((end - start) / ((unit === 'y' ? 365.25 : 30.44) * DAY));\n const steps = Math.min(WALK_LIMIT, Math.round((end - start) / DAY));\n let days = 0;\n for (let k = 0; k < steps; k++) if (!excluded(start + k * DAY)) days++;\n return unit === 'w' ? Math.round(days / 7) : days;\n}\n\n/** Each task with where it sits, in document order. */\nexport function ganttTasks(data: GanttData): { task: GanttTask; section: number; index: number }[] {\n return data.sections.flatMap((s, section) => s.tasks.map((task, index) => ({ task, section, index })));\n}\n\n/**\n * Every task's span. A date that does not read in the `dateFormat`, an id no task holds, and the far end of a\n * dependency cycle all resolve to the chart's first date: its earliest written start, else the start of `today`'s\n * day. An end before its start is moved up to the start.\n */\nexport function scheduleGantt(data: GanttData, today = Date.now()): GanttSchedule {\n const format = dateFormatOf(data);\n const excluded = excludedDays(data);\n const flat = ganttTasks(data);\n const byId = new Map<string, number>();\n flat.forEach(({ task }, i) => {\n if (task.id !== undefined && !byId.has(task.id)) byId.set(task.id, i);\n });\n const written = flat.flatMap(({ task }) => (task.start.kind === 'date' ? [parseGanttDate(task.start.date, format)] : []))\n .filter((t): t is number => t !== null);\n const first = written.length > 0 ? Math.min(...written) : dayOf(today) * DAY;\n const starts: number[] = [];\n const ends: number[] = [];\n const busy = new Set<string>();\n const memo = (cache: number[], i: number, tag: string, compute: () => number): number => {\n if (cache[i] !== undefined) return cache[i]!;\n if (busy.has(tag + i)) return first;\n busy.add(tag + i);\n const value = compute();\n busy.delete(tag + i);\n cache[i] = value;\n return value;\n };\n const named = (ids: readonly string[], of: (i: number) => number) => ids.map((id) => (byId.has(id) ? of(byId.get(id)!) : first));\n const startOf = (i: number): number => memo(starts, i, 's', () => {\n const start = flat[i]!.task.start;\n if (start.kind === 'date') return parseGanttDate(start.date, format) ?? first;\n if (start.kind === 'previous') return i === 0 ? first : endOf(i - 1);\n const after = named(start.ids, endOf);\n return after.length > 0 ? Math.max(...after) : first;\n });\n const endOf = (i: number): number => memo(ends, i, 'e', () => {\n const start = startOf(i);\n const end = flat[i]!.task.end;\n let at: number;\n if (end.kind === 'date') at = parseGanttDate(end.date, format) ?? start;\n else if (end.kind === 'duration') at = addGanttDuration(start, end.amount, end.unit, excluded);\n else {\n const until = named(end.ids, startOf);\n at = until.length > 0 ? Math.min(...until) : start;\n }\n return Math.max(start, at);\n });\n flat.forEach((_, i) => endOf(i));\n const spans = data.sections.map(() => [] as GanttSpan[]);\n // A task inside a cycle may cache its end before its own start settles.\n flat.forEach(({ section }, i) => spans[section]!.push({ start: starts[i]!, end: Math.max(starts[i]!, ends[i]!) }));\n const all = spans.flat();\n const lo = all.length > 0 ? Math.min(...all.map((s) => s.start)) : first;\n const hi = all.length > 0 ? Math.max(...all.map((s) => s.end)) : first;\n return { spans, domain: [lo, hi > lo ? hi : lo + DAY] };\n}\n","/** A gantt compiled to its marks: a row per task under its section, each task a span on a time axis. */\nimport { axisMarks, axisRoom } from '../axes';\nimport { CHART_PAD as PAD, chartTitle } from '../chartTitle';\nimport { spanMark } from '../marks/boxes';\nimport { areaMark, ruleMark } from '../marks/paths';\nimport { textMark } from '../marks/text';\nimport type { PlotMark } from '../marks/types';\nimport type { PlotMeasure } from '../measure';\nimport { timeScale, type TimeScale } from '../scales/time';\nimport { seriesColor, type PlotTheme } from '../theme';\nimport { formatHasHours, strftime } from './dates';\nimport { DAY, dateFormatOf, scheduleGantt, type GanttSchedule } from './schedule';\nimport type { GanttData, GanttTag } from './types';\n\n/** Where a gantt's parts landed: the plot area, its time scale, and every task's resolved span. */\nexport interface GanttLayout {\n /** The area the rows are drawn in, right of the section names and above the axis. */\n plot: { x: number; y: number; width: number; height: number };\n time: TimeScale;\n schedule: GanttSchedule;\n /** What a drag snaps to, in milliseconds: an hour when the `dateFormat` carries hours, else a day. */\n snap: number;\n}\n\nconst ROW_MAX = 32;\nconst BAR = 0.7;\nconst GAP = 8;\nconst LABEL_GAP = 4;\n\n/** A time scale over `domain` whose labels read in strftime `axisFormat`, when one is given. */\nexport function ganttTimeScale(domain: readonly [number, number], range: readonly [number, number], axisFormat?: string): TimeScale {\n const scale = timeScale({ domain, range });\n return axisFormat ? { ...scale, format: (v: number) => strftime(v, axisFormat) } : scale;\n}\n\n/** The fill a task's tags give it: critical in the fourth series color (faded when also done), done in the axis\n * color, active in the second series color, else the first. */\nexport function ganttTaskFill(tags: readonly GanttTag[] | undefined, theme: PlotTheme): { color: string; opacity?: number } {\n const done = tags?.includes('done') ?? false;\n if (tags?.includes('crit')) return { color: seriesColor(theme, 3), ...(done ? { opacity: 0.5 } : {}) };\n if (done) return { color: theme.axis };\n if (tags?.includes('active')) return { color: seriesColor(theme, 1) };\n return { color: seriesColor(theme, 0) };\n}\n\n/** The today line's color and width: the `todayMarker` style's `stroke` and `stroke-width` where it gives them. */\nfunction todayStroke(style: string | undefined, theme: PlotTheme): { color: string; width: number } {\n const color = /(?:^|[;,])\\s*stroke\\s*:\\s*([^;,]+)/.exec(style ?? '')?.[1]?.trim();\n const width = Number(/stroke-width\\s*:\\s*([\\d.]+)/.exec(style ?? '')?.[1]);\n return { color: color || seriesColor(theme, 9), width: Number.isFinite(width) && width > 0 ? width : 2 };\n}\n\n/** Lays out a gantt in a box of `size`: its title, section bands and names, task spans and names, axis, and today. */\nexport function compileGantt(\n data: GanttData, size: { width: number; height: number }, theme: PlotTheme, measure: PlotMeasure,\n): { marks: PlotMark[]; layout: GanttLayout } {\n const { marks, top } = chartTitle(data.title, size.width, theme, measure);\n const schedule = scheduleGantt(data);\n const names = data.sections.map((s) => s.name ?? '');\n const sectionWidth = names.some((n) => n !== '') ? Math.max(...names.map((n) => measure(n, theme.font).width)) + 2 * GAP : 0;\n const left = PAD + sectionWidth;\n const right = Math.max(left + 1, size.width - PAD);\n const axis = { theme, measure, side: 'bottom' as const };\n const room = axisRoom({ ...axis, scale: ganttTimeScale(schedule.domain, [0, 1], data.axisFormat), at: 0 });\n const rows = data.sections.reduce((n, s) => n + s.tasks.length, 0);\n const avail = Math.max(1, size.height - PAD - room - top);\n const rowHeight = rows === 0 ? 0 : Math.min(ROW_MAX, avail / rows);\n const bottom = top + (rows === 0 ? avail : rowHeight * rows);\n const time = ganttTimeScale(schedule.domain, [left, right], data.axisFormat);\n const layout: GanttLayout = {\n plot: { x: left, y: top, width: right - left, height: bottom - top },\n time, schedule, snap: formatHasHours(dateFormatOf(data)) ? DAY / 24 : DAY,\n };\n let row = 0;\n data.sections.forEach((section, s) => {\n const y = top + row * rowHeight;\n const height = section.tasks.length * rowHeight;\n row += section.tasks.length;\n if (height === 0) return;\n marks.push(spanMark({ key: `section:${s}:band`, x0: PAD, x1: right, y, height, color: theme.grid, opacity: s % 2 === 0 ? 0.45 : 0.2, datum: { section: s } }));\n if (section.name) {\n marks.push(textMark({\n key: `section:${s}:label`, text: section.name, x: PAD + GAP, y: y + height / 2, anchor: 'start', font: theme.font, color: theme.text,\n measure, bold: true, datum: { edit: 'section', section: s },\n }));\n }\n });\n marks.push(...axisMarks({ ...axis, key: 'axis:time', scale: time, at: bottom, gridTo: top }));\n const today = Date.now();\n const [d0, d1] = schedule.domain;\n if (data.todayMarker?.trim() !== 'off' && today >= d0 && today <= d1) {\n const x = time.map(today);\n marks.push(ruleMark({ key: 'today', from: { x, y: top }, to: { x, y: bottom }, ...todayStroke(data.todayMarker, theme) }));\n }\n marks.push(...taskMarks(data, layout, rowHeight, theme, measure));\n return { marks, layout };\n}\n\n/** Every task's span (a diamond for a milestone) and its name: inside the bar where it fits, else beside it. */\nfunction taskMarks(data: GanttData, layout: GanttLayout, rowHeight: number, theme: PlotTheme, measure: PlotMeasure): PlotMark[] {\n const { time, plot } = layout;\n const barHeight = rowHeight * BAR;\n const marks: PlotMark[] = [];\n const labels: PlotMark[] = [];\n let row = 0;\n data.sections.forEach((section, s) => section.tasks.forEach((task, t) => {\n const span = layout.schedule.spans[s]![t]!;\n const cy = plot.y + (row++ + 0.5) * rowHeight;\n const fill = ganttTaskFill(task.tags, theme);\n const datum = { section: s, task: t };\n const key = `task:${s}:${t}`;\n let x0 = time.map(span.start);\n let x1 = time.map(span.end);\n if (task.tags?.includes('milestone')) {\n const r = barHeight / 2;\n const points = [{ x: x0 - r, y: cy }, { x: x0, y: cy - r }, { x: x0 + r, y: cy }, { x: x0, y: cy + r }];\n marks.push(areaMark({ key, top: points, bottom: [], color: fill.color, opacity: fill.opacity ?? 1, datum }));\n [x0, x1] = [x0 - r, x0 + r];\n } else {\n marks.push(spanMark({ key, x0, x1, y: cy - barHeight / 2, height: barHeight, ...fill, datum }));\n }\n const width = measure(task.name, theme.font).width;\n const inside = !task.tags?.includes('milestone') && width + 2 * LABEL_GAP <= x1 - x0;\n const after = x1 + LABEL_GAP + width <= plot.x + plot.width;\n const [x, anchor] = inside ? [(x0 + x1) / 2, 'middle' as const] : after ? [x1 + LABEL_GAP, 'start' as const] : [x0 - LABEL_GAP, 'end' as const];\n labels.push(textMark({\n key: `${key}:label`, text: task.name, x, y: cy, anchor, font: theme.font, color: theme.text, measure,\n datum: { edit: 'task', section: s, task: t },\n }));\n }));\n return [...marks, ...labels];\n}\n","/** A git graph's commands replayed into its history: the commits each made, and the branches they sit on. */\nimport type { GitCommand, GitCommitType, GitGraphData } from './types';\n\n/** One commit, as the replay made it. */\nexport interface GitCommit {\n /** The index in `commands` of the command that made it. */\n command: number;\n /** The command's own id, else one the replay gave it. */\n id: string;\n branch: string;\n /** Its place in the whole history, from 0. */\n seq: number;\n /** The commit it follows, then for a merge the one it merges. */\n parents: readonly string[];\n type: GitCommitType;\n /** For a cherry-pick, the commit it copies. */\n source?: string;\n}\n\n/** One branch: its name, where it forked, and its commits in order. */\nexport interface GitBranch {\n name: string;\n order?: number;\n /** The commit it was branched from; none for the main branch, or one branched before any commit. */\n fork?: string;\n commits: string[];\n}\n\n/** A replayed history. `branches` in lane order: the main branch first, then by `order`, then as created. */\nexport interface GitHistory {\n commits: GitCommit[];\n branches: GitBranch[];\n /** The first command that could not run, and why; the history holds what ran before it. */\n error?: { command: number; message: string };\n}\n\ninterface ReplayState {\n history: GitHistory;\n byId: Map<string, GitCommit>;\n branches: Map<string, GitBranch & { created: number }>;\n current: string;\n}\n\n/** A branch's latest commit, else the one it forked from. */\nconst headOf = (s: ReplayState, branch: string): string | undefined => {\n const b = s.branches.get(branch);\n return b?.commits.at(-1) ?? b?.fork;\n};\n\n/** Adds a commit to the current branch. Returns why it cannot, or `null`. */\nfunction add(s: ReplayState, command: number, id: string | undefined, rest: Omit<GitCommit, 'command' | 'id' | 'branch' | 'seq'>): string | null {\n const seq = s.history.commits.length;\n const name = id ?? `#${seq}`;\n if (s.byId.has(name)) return `a commit \"${name}\" already exists`;\n const commit: GitCommit = { command, id: name, branch: s.current, seq, ...rest };\n s.history.commits.push(commit);\n s.byId.set(name, commit);\n s.branches.get(s.current)!.commits.push(name);\n return null;\n}\n\nfunction merge(s: ReplayState, k: number, cmd: Extract<GitCommand, { kind: 'merge' }>): string | null {\n const other = cmd.branch;\n const head = headOf(s, s.current);\n if (other === s.current) return `\"${other}\" cannot be merged into itself`;\n if (head === undefined) return `cannot merge into \"${s.current}\": it has no commits`;\n if (!s.branches.has(other)) return `cannot merge \"${other}\": there is no such branch`;\n const theirs = headOf(s, other);\n if (theirs === undefined) return `cannot merge \"${other}\": it has no commits`;\n if (theirs === head) return `cannot merge \"${other}\" into \"${s.current}\": both have the same head`;\n return add(s, k, cmd.id, { parents: [head, theirs], type: cmd.type ?? 'NORMAL' });\n}\n\nfunction cherryPick(s: ReplayState, k: number, cmd: Extract<GitCommand, { kind: 'cherry-pick' }>): string | null {\n const source = s.byId.get(cmd.id);\n const head = headOf(s, s.current);\n if (source === undefined) return `cannot cherry-pick \"${cmd.id}\": there is no such commit`;\n if (source.branch === s.current) return `cannot cherry-pick \"${cmd.id}\": it is already on \"${s.current}\"`;\n if (head === undefined) return `cannot cherry-pick onto \"${s.current}\": it has no commits`;\n if (source.parents.length > 1 && (cmd.parent === undefined || !source.parents.includes(cmd.parent))) {\n return `cherry-picking the merge \"${cmd.id}\" needs a parent, one of ${source.parents.map((p) => `\"${p}\"`).join(', ')}`;\n }\n if (source.parents.length <= 1 && cmd.parent !== undefined) return `\"${cmd.id}\" is not a merge, so takes no parent`;\n return add(s, k, undefined, { parents: [head], type: 'NORMAL', source: source.id });\n}\n\n/** Runs one command. Returns why it cannot, or `null`. */\nfunction step(s: ReplayState, k: number, cmd: GitCommand): string | null {\n switch (cmd.kind) {\n case 'commit': {\n const head = headOf(s, s.current);\n return add(s, k, cmd.id, { parents: head === undefined ? [] : [head], type: cmd.type ?? 'NORMAL' });\n }\n case 'branch': {\n if (s.branches.has(cmd.name)) return `a branch \"${cmd.name}\" already exists; check it out instead`;\n const fork = headOf(s, s.current);\n s.branches.set(cmd.name, {\n name: cmd.name, created: s.branches.size, commits: [],\n ...(cmd.order !== undefined ? { order: cmd.order } : {}), ...(fork !== undefined ? { fork } : {}),\n });\n s.current = cmd.name;\n return null;\n }\n case 'checkout':\n if (!s.branches.has(cmd.name)) return `cannot check out \"${cmd.name}\": there is no such branch; create it with \"branch ${cmd.name}\"`;\n s.current = cmd.name;\n return null;\n case 'merge': return merge(s, k, cmd);\n case 'cherry-pick': return cherryPick(s, k, cmd);\n }\n}\n\n/** Replays `data`'s commands from an empty main branch, stopping at the first one that cannot run, as Mermaid does. */\nexport function replayGitGraph(data: GitGraphData): GitHistory {\n const main = data.mainBranch ?? 'main';\n const s: ReplayState = {\n history: { commits: [], branches: [] }, byId: new Map(), current: main,\n branches: new Map([[main, { name: main, created: 0, commits: [] }]]),\n };\n for (let k = 0; k < data.commands.length; k++) {\n const error = step(s, k, data.commands[k]!);\n if (error !== null) {\n s.history.error = { command: k, message: error };\n break;\n }\n }\n const rank = (b: GitBranch & { created: number }) => (b.name === main ? Number.NEGATIVE_INFINITY : b.order ?? b.created);\n s.history.branches = [...s.branches.values()]\n .sort((a, b) => rank(a) - rank(b) || a.created - b.created)\n .map(({ created: _, ...b }) => b);\n return s.history;\n}\n","/** A gitgraph compiled to its scales and marks. */\nimport { CHART_PAD as PAD, chartTitle } from '../chartTitle';\nimport { barMark, pointMark } from '../marks/boxes';\nimport { lineMark, ruleMark } from '../marks/paths';\nimport { textMark } from '../marks/text';\nimport type { PlotMark, PlotPoint } from '../marks/types';\nimport type { PlotMeasure } from '../measure';\nimport { seriesColor, type PlotTheme } from '../theme';\nimport { replayGitGraph, type GitCommit, type GitHistory } from './replay';\nimport type { GitGraphData } from './types';\n\n/** Where a gitgraph's parts landed: each lane's place across the run, and each commit's point. */\nexport interface GitGraphLayout {\n history: GitHistory;\n /** Each branch's place across the run, in `history.branches` order: a y for `'LR'`, an x otherwise. */\n lanes: readonly number[];\n /** Each commit's point, in `history.commits` order. */\n points: readonly PlotPoint[];\n}\n\nconst RADIUS = 6;\nconst GAP = 6;\nconst MAX_STEP = 50;\nconst MAX_LANE = 60;\n\n/** The lanes and commit points of `history` in `box`, commits in sequence along the run, lanes across it. */\nfunction place(\n data: GitGraphData, history: GitHistory, box: { x: number; y: number; width: number; height: number }, labelRoom: number,\n): GitGraphLayout {\n const dir = data.orientation ?? 'LR';\n const lr = dir === 'LR';\n const along = lr ? { start: box.x + labelRoom, size: box.width - labelRoom } : { start: box.y + (dir === 'TB' ? labelRoom : 0), size: box.height - labelRoom };\n const across = lr ? { start: box.y, size: box.height } : { start: box.x, size: box.width };\n const laneGap = Math.min(MAX_LANE, across.size / Math.max(1, history.branches.length));\n const lanes = history.branches.map((_, i) => across.start + (i + 0.5) * laneGap);\n const step = Math.min(MAX_STEP, Math.max(0, along.size) / Math.max(1, history.commits.length));\n const laneOf = new Map(history.branches.map((b, i) => [b.name, lanes[i]!]));\n const points = history.commits.map((c) => {\n const a = dir === 'BT' ? along.start + along.size - (c.seq + 0.5) * step : along.start + (c.seq + 0.5) * step;\n const x = laneOf.get(c.branch)!;\n return lr ? { x: a, y: x } : { x, y: a };\n });\n return { history, lanes, points };\n}\n\n/** The point on `lane` level with `p` along the run. */\nconst onLane = (lr: boolean, lane: number, p: PlotPoint): PlotPoint => (lr ? { x: p.x, y: lane } : { x: lane, y: p.y });\n\n/** Each branch's line from its fork through its commits, and each merge and cherry-pick's link from its source. */\nfunction lines(layout: GitGraphLayout, lr: boolean, theme: PlotTheme): PlotMark[] {\n const { history, lanes, points } = layout;\n const at = new Map(history.commits.map((c, i) => [c.id, points[i]!]));\n const laneIndex = new Map(history.branches.map((b, i) => [b.name, i]));\n const marks: PlotMark[] = [];\n history.branches.forEach((b, i) => {\n const own = b.commits.map((id) => at.get(id)!);\n const fork = b.fork === undefined ? undefined : at.get(b.fork);\n const path = fork !== undefined && own.length > 0 ? [fork, onLane(lr, lanes[i]!, fork), ...own] : own;\n if (path.length > 1) marks.push(lineMark({ key: `branch:${i}`, points: path, color: seriesColor(theme, i), datum: { branch: b.name } }));\n });\n for (const c of history.commits) {\n const from = c.source ?? (c.parents.length > 1 ? c.parents[1] : undefined);\n if (from === undefined) continue;\n const source = history.commits.find((x) => x.id === from)!;\n const lane = laneIndex.get(source.branch)!;\n const to = at.get(c.id)!;\n marks.push(lineMark({\n key: `${c.source !== undefined ? 'pick' : 'merge'}:${c.command}`, points: [at.get(from)!, onLane(lr, lanes[lane]!, to), to],\n color: seriesColor(theme, lane), datum: { command: c.command }, ...(c.source !== undefined ? { dash: [4, 3] } : {}),\n }));\n }\n return marks;\n}\n\n/** A commit's dot, a square to stand out, or a crossed dot for a revert. */\nfunction commitMarks(c: GitCommit, p: PlotPoint, color: string, theme: PlotTheme): PlotMark[] {\n const key = `commit:${c.command}`;\n const datum = { command: c.command };\n if (c.type === 'HIGHLIGHT') return [barMark({ key, x: p.x - RADIUS, width: 2 * RADIUS, from: p.y - RADIUS, to: p.y + RADIUS, color, datum })];\n const dot = pointMark({ key, ...p, radius: RADIUS, color, datum });\n if (c.type !== 'REVERSE') return [dot];\n const r = RADIUS * 0.7;\n return [\n dot,\n ruleMark({ key: `${key}:cross:0`, from: { x: p.x - r, y: p.y - r }, to: { x: p.x + r, y: p.y + r }, color: theme.text, width: 2 }),\n ruleMark({ key: `${key}:cross:1`, from: { x: p.x - r, y: p.y + r }, to: { x: p.x + r, y: p.y - r }, color: theme.text, width: 2 }),\n ];\n}\n\n/** A commit's id where its command gave one, and its tag: below and above it running across, right and left running down. */\nfunction commitLabels(data: GitGraphData, c: GitCommit, p: PlotPoint, lr: boolean, theme: PlotTheme, measure: PlotMeasure): PlotMark[] {\n const cmd = data.commands[c.command]!;\n const small = { ...theme.font, fontSize: Math.round(theme.font.fontSize * 0.85) };\n const off = RADIUS + 3;\n const marks: PlotMark[] = [];\n if ((cmd.kind === 'commit' || cmd.kind === 'merge') && cmd.id !== undefined) {\n marks.push(textMark({\n key: `commit:${c.command}:id`, text: cmd.id, font: small, color: theme.text, measure,\n ...(lr ? { x: p.x, y: p.y + off, baseline: 'top' as const } : { x: p.x + off, y: p.y, anchor: 'start' as const }),\n }));\n }\n if (cmd.kind !== 'branch' && cmd.kind !== 'checkout' && cmd.tag !== undefined) {\n marks.push(textMark({\n key: `commit:${c.command}:tag`, text: cmd.tag, font: theme.font, color: theme.text, measure, bold: true, datum: { edit: 'tag', command: c.command },\n ...(lr ? { x: p.x, y: p.y - off, baseline: 'bottom' as const } : { x: p.x - off, y: p.y, anchor: 'end' as const }),\n }));\n }\n return marks;\n}\n\n/** Lays out a gitgraph in a box of `size`: its title, a lane per branch with its name, commits along it, merge links. */\nexport function compileGitGraph(\n data: GitGraphData, size: { width: number; height: number }, theme: PlotTheme, measure: PlotMeasure,\n): { marks: PlotMark[]; layout: GitGraphLayout } {\n const { marks, top } = chartTitle(data.title, size.width, theme, measure);\n const dir = data.orientation ?? 'LR';\n const lr = dir === 'LR';\n const history = replayGitGraph(data);\n const names = history.branches.map((b) => measure(b.name, theme.font));\n const labelRoom = GAP + Math.max(0, ...names.map((s) => (lr ? s.width : s.height)));\n const box = { x: PAD, y: top, width: Math.max(1, size.width - 2 * PAD), height: Math.max(1, size.height - PAD - top) };\n const layout = place(data, history, box, labelRoom);\n marks.push(...lines(layout, lr, theme));\n history.commits.forEach((c, i) => {\n const lane = history.branches.findIndex((b) => b.name === c.branch);\n marks.push(...commitMarks(c, layout.points[i]!, seriesColor(theme, lane), theme));\n });\n history.commits.forEach((c, i) => marks.push(...commitLabels(data, c, layout.points[i]!, lr, theme, measure)));\n history.branches.forEach((b, i) => {\n const lane = layout.lanes[i]!;\n const at = lr ? { x: box.x, y: lane, anchor: 'start' as const }\n : { x: lane, y: dir === 'TB' ? box.y : box.y + box.height, baseline: dir === 'TB' ? 'top' as const : 'bottom' as const };\n marks.push(textMark({ key: `branch:${i}:label`, text: b.name, ...at, font: theme.font, color: seriesColor(theme, i), measure, bold: true, datum: { branch: b.name } }));\n });\n return { marks, layout };\n}\n","/** A user journey compiled to its sections, scored steps and actor legend. */\nimport { axisMarks, axisRoom } from '../axes';\nimport { CHART_PAD as PAD, chartTitle } from '../chartTitle';\nimport { pointMark, spanMark } from '../marks/boxes';\nimport { ruleMark } from '../marks/paths';\nimport { textMark } from '../marks/text';\nimport type { PlotMark } from '../marks/types';\nimport type { PlotMeasure } from '../measure';\nimport { bandScale, type BandScale } from '../scales/band';\nimport { linearScale, type LinearScale } from '../scales/linear';\nimport { ordinalScale, type OrdinalScale } from '../scales/ordinal';\nimport { seriesColor, type PlotTheme } from '../theme';\nimport type { JourneyData } from './types';\n\n/** Where a journey's parts landed: the plot area, the score scale up it, and each step's band across it. */\nexport interface JourneyLayout {\n plot: { x: number; y: number; width: number; height: number };\n score: LinearScale;\n /** Over every step in order, keyed by its place among them all from `'0'`. */\n steps: BandScale;\n}\n\nconst GAP = 6;\nconst RADIUS = 8;\nconst DOT = 3;\n\n/** Every step with its section and its place in it, in order. */\nexport const journeySteps = (data: JourneyData): { section: number; task: number }[] =>\n data.sections.flatMap((s, section) => s.tasks.map((_, task) => ({ section, task })));\n\n/** The actors, each once, in the order they first take part. */\nexport const journeyActors = (data: JourneyData): string[] =>\n [...new Set(data.sections.flatMap((s) => s.tasks.flatMap((t) => t.actors)))];\n\n/** Lays out the plot area in `size` below `top`: room for section headers above, step names and actors below, the\n * score axis to the left and a legend `legend` wide to the right. */\nexport function journeyLayout(\n data: JourneyData, size: { width: number; height: number }, top: number, legend: number, theme: PlotTheme, measure: PlotMeasure,\n): JourneyLayout {\n const line = measure('Mg', theme.font).height;\n const probe = linearScale({ domain: [0.5, 5.5], range: [0, 1] });\n const left = PAD + axisRoom({ scale: probe, side: 'left', at: 0, theme, measure });\n const right = size.width - PAD - (legend > 0 ? legend + 2 * GAP : 0);\n const plotTop = top + line + 2 * GAP;\n const bottom = size.height - PAD - line - 3 * GAP - 2 * DOT;\n const plot = { x: left, y: plotTop, width: Math.max(1, right - left), height: Math.max(1, bottom - plotTop) };\n return {\n plot,\n score: linearScale({ domain: [0.5, 5.5], range: [plot.y + plot.height, plot.y] }),\n steps: bandScale({ domain: journeySteps(data).map((_, k) => String(k)), range: [plot.x, plot.x + plot.width] }),\n };\n}\n\nfunction sectionMarks(data: JourneyData, layout: JourneyLayout, theme: PlotTheme, measure: PlotMeasure): PlotMark[] {\n const marks: PlotMark[] = [];\n const height = measure('Mg', theme.font).height + GAP;\n let k = 0;\n data.sections.forEach((section, s) => {\n const first = k;\n k += section.tasks.length;\n if (section.tasks.length === 0) return;\n const x0 = layout.steps.start(String(first));\n const x1 = layout.steps.start(String(k - 1)) + layout.steps.bandwidth;\n const y = layout.plot.y - GAP - height;\n marks.push(spanMark({ key: `section:${s}`, x0, x1, y, height, color: seriesColor(theme, s), opacity: 0.35, datum: { section: s } }));\n if (section.name !== undefined) {\n marks.push(textMark({\n key: `section:label:${s}`, text: section.name, x: (x0 + x1) / 2, y: y + height / 2, font: theme.font, color: theme.text, measure, bold: true,\n datum: { edit: 'section', section: s },\n }));\n }\n });\n return marks;\n}\n\nfunction stepMarks(data: JourneyData, layout: JourneyLayout, actors: OrdinalScale<string>, theme: PlotTheme, measure: PlotMeasure): PlotMark[] {\n const marks: PlotMark[] = [];\n const baseline = layout.plot.y + layout.plot.height;\n const line = measure('Mg', theme.font).height;\n journeySteps(data).forEach(({ section, task }, k) => {\n const step = data.sections[section]!.tasks[task]!;\n const x = layout.steps.position(String(k));\n const y = layout.score.map(Math.min(5, Math.max(1, step.score)));\n const id = `${section}:${task}`;\n const datum = { section, task };\n marks.push(ruleMark({ key: `task:rule:${id}`, from: { x, y: y + RADIUS }, to: { x, y: baseline }, color: theme.axis, datum }));\n marks.push(pointMark({ key: `task:${id}`, x, y, radius: RADIUS, color: seriesColor(theme, section), datum }));\n marks.push(textMark({\n key: `task:label:${id}`, text: step.name, x, y: baseline + GAP, baseline: 'top', font: theme.font, color: theme.text, measure,\n datum: { edit: 'task', section, task },\n }));\n const dotsY = baseline + GAP + line + GAP + DOT;\n const spread = 3 * DOT;\n step.actors.forEach((actor, a) => {\n marks.push(pointMark({\n key: `task:actor:${id}:${a}`, x: x + (a - (step.actors.length - 1) / 2) * spread, y: dotsY, radius: DOT, color: actors.map(actor),\n datum: { section, task, actor },\n }));\n });\n });\n return marks;\n}\n\nfunction legendMarks(names: readonly string[], actors: OrdinalScale<string>, x: number, midY: number, theme: PlotTheme, measure: PlotMeasure): PlotMark[] {\n const row = measure('Mg', theme.font).height + GAP;\n const top = midY - (row * names.length - GAP) / 2;\n return names.flatMap((actor, k) => {\n const y = top + k * row + (row - GAP) / 2;\n return [\n pointMark({ key: `legend:actor:${k}`, x: x + 2 * DOT, y, radius: 2 * DOT, color: actors.map(actor), datum: { actor } }),\n textMark({\n key: `legend:label:${k}`, text: actor, x: x + 4 * DOT + GAP, y, anchor: 'start', font: theme.font, color: theme.text, measure, datum: { actor },\n }),\n ];\n });\n}\n\n/** Lays out a journey in a box of `size`: its title, its steps left to right under their sections' headers, each at\n * its score up a 1-to-5 axis with its name and its actors' dots under it, and a legend of actors at the right. */\nexport function compileJourney(\n data: JourneyData, size: { width: number; height: number }, theme: PlotTheme, measure: PlotMeasure,\n): { marks: PlotMark[]; layout: JourneyLayout } {\n const { marks, top } = chartTitle(data.title, size.width, theme, measure);\n const names = journeyActors(data);\n const actors = ordinalScale({ domain: names, range: theme.series });\n const legend = names.length === 0 ? 0 : 4 * DOT + GAP + Math.max(...names.map((n) => measure(n, theme.font).width));\n const layout = journeyLayout(data, size, top, legend, theme, measure);\n marks.push(...axisMarks({ key: 'axis:score', scale: layout.score, side: 'left', at: layout.plot.x, gridTo: layout.plot.x + layout.plot.width, theme, measure }));\n marks.push(...sectionMarks(data, layout, theme, measure), ...stepMarks(data, layout, actors, theme, measure));\n marks.push(...legendMarks(names, actors, layout.plot.x + layout.plot.width + 2 * GAP, layout.plot.y + layout.plot.height / 2, theme, measure));\n return { marks, layout };\n}\n","/** A packet diagram compiled to rows of bit fields. */\nimport { CHART_PAD as PAD, chartTitle } from '../chartTitle';\nimport { spanMark } from '../marks/boxes';\nimport { textMark } from '../marks/text';\nimport type { PlotMark } from '../marks/types';\nimport type { PlotMeasure } from '../measure';\nimport { bandScale, type BandScale } from '../scales/band';\nimport { seriesColor, type PlotTheme } from '../theme';\nimport type { PacketData, PacketField } from './types';\n\n/** Where a packet's rows landed: a band per bit of a row across, and each row's box from `boxTop(row)` down. */\nexport interface PacketLayout {\n /** Over a row's bits, keyed `'0'` to one less than the bits per row. */\n bits: BandScale;\n bitsPerRow: number;\n rows: number;\n /** The top of row `row`'s field boxes, under its bit numbers. */\n boxTop(row: number): number;\n boxHeight: number;\n}\n\n/** One row's share of a field: its first and last bit there. */\nexport interface PacketPiece {\n row: number;\n lo: number;\n hi: number;\n}\n\nconst BOX = 32;\nconst GAP = 6;\nconst INSET = 2;\n\n/** The bits per row `data` lays out: its own, else 32. */\nexport const packetBitsPerRow = (data: PacketData): number => Math.max(1, Math.floor(data.bitsPerRow ?? 32));\n\n/** A field cut where it wraps: one piece per row it covers. None for a field that runs backward. */\nexport function packetPieces(field: PacketField, bitsPerRow: number): PacketPiece[] {\n if (!(field.start >= 0 && field.end >= field.start)) return [];\n const pieces: PacketPiece[] = [];\n for (let row = Math.floor(field.start / bitsPerRow); row <= Math.floor(field.end / bitsPerRow); row++) {\n pieces.push({ row, lo: Math.max(field.start, row * bitsPerRow), hi: Math.min(field.end, (row + 1) * bitsPerRow - 1) });\n }\n return pieces;\n}\n\n/** Lays out `data`'s rows in `size` below `top`. */\nexport function packetLayout(data: PacketData, size: { width: number; height: number }, top: number, theme: PlotTheme, measure: PlotMeasure): PacketLayout {\n const bitsPerRow = packetBitsPerRow(data);\n const ends = data.fields.filter((f) => f.start >= 0 && f.end >= f.start).map((f) => f.end);\n const rows = ends.length === 0 ? 0 : Math.floor(Math.max(...ends) / bitsPerRow) + 1;\n const line = measure('0', theme.font).height;\n const bits = bandScale({\n domain: Array.from({ length: bitsPerRow }, (_, i) => String(i)),\n range: [PAD, Math.max(PAD + 1, size.width - PAD)], paddingInner: 0, paddingOuter: 0,\n });\n return { bits, bitsPerRow, rows, boxTop: (row) => top + row * (line + INSET + BOX + GAP) + line + INSET, boxHeight: BOX };\n}\n\nfunction fieldMarks(field: PacketField, i: number, layout: PacketLayout, theme: PlotTheme, measure: PlotMeasure): PlotMark[] {\n const { bits, bitsPerRow, boxHeight } = layout;\n const marks: PlotMark[] = [];\n const font = { font: theme.font, color: theme.text, measure };\n let widest: { x0: number; x1: number; y: number } | null = null;\n for (const { row, lo, hi } of packetPieces(field, bitsPerRow)) {\n const x0 = bits.start(String(lo % bitsPerRow));\n const x1 = bits.start(String(hi % bitsPerRow)) + bits.bandwidth;\n const y = layout.boxTop(row);\n const box = spanMark({ key: `field:${i}:${row}`, x0, x1, y, height: boxHeight, color: seriesColor(theme, i), opacity: 0.3, datum: { field: i } });\n box.data.stroke = { paint: { color: theme.axis }, width: 1 };\n marks.push(box);\n if (widest === null || x1 - x0 > widest.x1 - widest.x0) widest = { x0, x1, y };\n const numberAt = { y: y - INSET, baseline: 'bottom' } as const;\n if (hi === lo) {\n marks.push(textMark({ ...font, ...numberAt, key: `bit:${i}:${row}:start`, text: String(lo), x: (x0 + x1) / 2 }));\n continue;\n }\n marks.push(textMark({ ...font, ...numberAt, key: `bit:${i}:${row}:start`, text: String(lo), x: x0 + INSET, anchor: 'start' }));\n marks.push(textMark({ ...font, ...numberAt, key: `bit:${i}:${row}:end`, text: String(hi), x: x1 - INSET, anchor: 'end' }));\n }\n if (widest !== null) {\n marks.push(textMark({\n ...font, key: `field:label:${i}`, text: field.label, x: (widest.x0 + widest.x1) / 2, y: widest.y + boxHeight / 2,\n datum: { edit: 'label', field: i },\n }));\n }\n return marks;\n}\n\n/** Lays out a packet in a box of `size`: its title, then its fields along rows of bits, each a box per row it covers\n * with its label in the widest, and the bit numbers at each piece's ends above it. */\nexport function compilePacket(\n data: PacketData, size: { width: number; height: number }, theme: PlotTheme, measure: PlotMeasure,\n): { marks: PlotMark[]; layout: PacketLayout } {\n const { marks, top } = chartTitle(data.title, size.width, theme, measure);\n const layout = packetLayout(data, size, top, theme, measure);\n data.fields.forEach((field, i) => marks.push(...fieldMarks(field, i, layout, theme, measure)));\n return { marks, layout };\n}\n","/** A pie compiled to its slices and legend. */\nimport { CHART_PAD as PAD, chartTitle } from '../chartTitle';\nimport { spanMark } from '../marks/boxes';\nimport { arcMark } from '../marks/paths';\nimport { textMark } from '../marks/text';\nimport type { PlotMark, PlotPoint } from '../marks/types';\nimport type { PlotMeasure } from '../measure';\nimport { seriesColor, type PlotTheme } from '../theme';\nimport type { PieData } from './types';\n\n/** Where a pie's parts landed: its center and radius, and each slice's angles, clockwise from twelve o'clock. */\nexport interface PieLayout {\n center: PlotPoint;\n radius: number;\n /** One per slice; a zero-valued slice's two angles are equal. */\n angles: readonly { start: number; end: number }[];\n}\n\nconst SWATCH = 12;\nconst GAP = 6;\nconst LEGEND_GAP = 16;\nconst LABEL_RADIUS = 0.75;\n\n/** A slice's share of the whole, as Mermaid writes it: rounded to a whole percent. */\nexport const piePercent = (value: number, total: number): string => `${total > 0 ? ((value / total) * 100).toFixed(0) : '0'}%`;\n\n/** A slice's value as the legend shows it with `showData`. */\nexport const pieValueText = (value: number): string => `[${value}]`;\n\n/** Each slice's start and end angle, in order clockwise from twelve o'clock; all zero when nothing has a value. */\nexport function pieAngles(data: PieData): { start: number; end: number }[] {\n const values = data.slices.map((s) => (Number.isFinite(s.value) && s.value > 0 ? s.value : 0));\n const total = values.reduce((a, b) => a + b, 0);\n let at = 0;\n return values.map((v) => {\n const start = at;\n at += total > 0 ? (v / total) * 2 * Math.PI : 0;\n return { start, end: at };\n });\n}\n\n/** The legend: a swatch and a label per slice, and with `showData` its value, which a text edit sets. */\nfunction legendMarks(data: PieData, x: number, midY: number, theme: PlotTheme, measure: PlotMeasure): PlotMark[] {\n const row = measure('Mg', theme.font).height + GAP;\n const top = midY - (row * data.slices.length - GAP) / 2;\n const marks: PlotMark[] = [];\n data.slices.forEach((slice, i) => {\n const y = top + i * row;\n const mid = y + (row - GAP) / 2;\n const base = { font: theme.font, color: theme.text, measure, anchor: 'start', baseline: 'middle' } as const;\n marks.push(spanMark({ key: `legend:swatch:${i}`, x0: x, x1: x + SWATCH, y: mid - SWATCH / 2, height: SWATCH, color: seriesColor(theme, i), datum: { slice: i } }));\n const label = textMark({ ...base, key: `legend:label:${i}`, text: slice.label, x: x + SWATCH + GAP, y: mid, datum: { edit: 'label', slice: i } });\n marks.push(label);\n if (data.showData) {\n marks.push(textMark({\n ...base, key: `legend:value:${i}`, text: pieValueText(slice.value), x: label.pose.x + label.pose.width + GAP, y: mid,\n datum: { edit: 'value', slice: i },\n }));\n }\n });\n return marks;\n}\n\n/** How wide the legend is: its swatch, its widest label, and with `showData` its widest value. */\nfunction legendWidth(data: PieData, theme: PlotTheme, measure: PlotMeasure): number {\n if (data.slices.length === 0) return 0;\n const widest = Math.max(...data.slices.map((s) => {\n const label = measure(s.label, theme.font).width;\n return data.showData ? label + GAP + measure(pieValueText(s.value), theme.font).width : label;\n }));\n return SWATCH + GAP + widest;\n}\n\n/** Lays out a pie in a box of `size`: its title, a slice per value with its share written on it where it fits, and\n * a legend at the right. */\nexport function compilePie(\n data: PieData, size: { width: number; height: number }, theme: PlotTheme, measure: PlotMeasure,\n): { marks: PlotMark[]; layout: PieLayout } {\n const { marks, top } = chartTitle(data.title, size.width, theme, measure);\n const legend = legendWidth(data, theme, measure);\n const right = size.width - PAD - (legend > 0 ? legend + LEGEND_GAP : 0);\n const area = { width: Math.max(0, right - PAD), height: Math.max(0, size.height - PAD - top) };\n const center = { x: PAD + area.width / 2, y: top + area.height / 2 };\n const radius = Math.min(area.width, area.height) / 2;\n const angles = pieAngles(data);\n const total = data.slices.reduce((sum, s) => sum + (Number.isFinite(s.value) && s.value > 0 ? s.value : 0), 0);\n data.slices.forEach((slice, i) => {\n const { start, end } = angles[i]!;\n if (end <= start || radius < 1) return;\n marks.push(arcMark({ key: `slice:${i}`, center, innerRadius: 0, outerRadius: radius, startAngle: start, endAngle: end, color: seriesColor(theme, i), datum: { slice: i } }));\n const text = piePercent(slice.value, total);\n const room = measure(text, theme.font);\n const mid = (start + end) / 2;\n const r = radius * LABEL_RADIUS;\n if ((end - start) * r < room.width + 4 || radius * (1 - LABEL_RADIUS) * 2 < room.height) return;\n marks.push(textMark({\n key: `percent:${i}`, text, x: center.x + r * Math.sin(mid), y: center.y - r * Math.cos(mid), font: theme.font, color: theme.text, measure,\n datum: { slice: i },\n }));\n });\n marks.push(...legendMarks(data, right + (legend > 0 ? LEGEND_GAP : 0), center.y, theme, measure));\n return { marks, layout: { center, radius, angles } };\n}\n","/** A quadrant chart compiled to its quadrants, axis labels and points. */\nimport { CHART_PAD as PAD, chartTitle } from '../chartTitle';\nimport { pointMark, spanMark } from '../marks/boxes';\nimport { ruleMark } from '../marks/paths';\nimport { textMark } from '../marks/text';\nimport type { PlotDatum, PlotMark, PlotPoint } from '../marks/types';\nimport type { PlotMeasure } from '../measure';\nimport { seriesColor, type PlotTheme } from '../theme';\nimport type { QuadrantData, QuadrantPoint, QuadrantPointStyle } from './types';\n\n/** Where a quadrant chart's unit square landed. */\nexport interface QuadrantLayout {\n plot: { x: number; y: number; width: number; height: number };\n}\n\nconst GAP = 6;\nconst RADIUS = 5;\n\n/** Where `x`, `y` in the unit square stands in the plot, y running up. */\nexport const quadrantAt = (layout: QuadrantLayout, x: number, y: number): PlotPoint => ({\n x: layout.plot.x + x * layout.plot.width, y: layout.plot.y + (1 - y) * layout.plot.height,\n});\n\n/** The point in the unit square under `at`, clamped to it and rounded to hundredths. */\nexport function quadrantValueAt(layout: QuadrantLayout, at: PlotPoint): { x: number; y: number } {\n const unit = (v: number) => Math.round(Math.min(1, Math.max(0, v)) * 100) / 100;\n return { x: unit((at.x - layout.plot.x) / layout.plot.width), y: unit(1 - (at.y - layout.plot.y) / layout.plot.height) };\n}\n\n/** A point's style: its own fields, then its class's, then the defaults. */\nexport function quadrantStyleOf(data: QuadrantData, point: QuadrantPoint): QuadrantPointStyle {\n const cls = point.className !== undefined ? data.classes?.[point.className] : undefined;\n return { ...cls, ...point.style };\n}\n\n/** The unit square laid out in `size` below `top`, leaving room for the axis labels under and left of it. */\nexport function quadrantLayout(size: { width: number; height: number }, top: number, theme: PlotTheme, measure: PlotMeasure): QuadrantLayout {\n const line = measure('Mg', theme.font).height;\n const left = PAD + line + GAP;\n const bottom = size.height - PAD - line - GAP;\n return { plot: { x: left, y: top, width: Math.max(1, size.width - PAD - left), height: Math.max(1, bottom - top) } };\n}\n\n/** Each quadrant's corner in the unit square, in Mermaid's order: top right, top left, bottom left, bottom right. */\nconst CORNERS = [[0.5, 1], [0, 1], [0, 0.5], [0.5, 0.5]] as const;\n\nfunction quadrantMarks(data: QuadrantData, layout: QuadrantLayout, theme: PlotTheme, measure: PlotMeasure): PlotMark[] {\n const marks: PlotMark[] = [];\n const { plot } = layout;\n CORNERS.forEach(([x, y], i) => {\n const corner = quadrantAt(layout, x, y);\n marks.push(spanMark({\n key: `quadrant:${i + 1}`, x0: corner.x, x1: corner.x + plot.width / 2, y: corner.y, height: plot.height / 2,\n color: seriesColor(theme, i), opacity: 0.15, datum: { quadrant: i + 1 },\n }));\n });\n const mid = quadrantAt(layout, 0.5, 0.5);\n marks.push(ruleMark({ key: 'divider:x', from: { x: mid.x, y: plot.y }, to: { x: mid.x, y: plot.y + plot.height }, color: theme.axis }));\n marks.push(ruleMark({ key: 'divider:y', from: { x: plot.x, y: mid.y }, to: { x: plot.x + plot.width, y: mid.y }, color: theme.axis }));\n CORNERS.forEach(([x, y], i) => {\n const text = data.quadrants?.[i];\n if (!text) return;\n const center = quadrantAt(layout, x + 0.25, y - 0.25);\n marks.push(textMark({\n key: `quadrant:label:${i + 1}`, text, ...center, font: theme.font, color: theme.text, measure, bold: true,\n datum: { edit: 'quadrant', quadrant: i + 1 },\n }));\n });\n return marks;\n}\n\n/** Each axis's end labels: centered under or beside its half, or the whole axis for a low end alone. */\nfunction axisLabelMarks(data: QuadrantData, layout: QuadrantLayout, theme: PlotTheme, measure: PlotMeasure): PlotMark[] {\n const { plot } = layout;\n const marks: PlotMark[] = [];\n const base = { font: theme.font, color: theme.text, measure };\n for (const axis of ['x', 'y'] as const) {\n const ends = data[axis];\n for (const end of ['low', 'high'] as const) {\n const text = ends?.[end];\n if (!text) continue;\n const along = ends?.high ? (end === 'low' ? 0.25 : 0.75) : 0.5;\n const datum: PlotDatum = { edit: 'axis', axis, end };\n marks.push(axis === 'x'\n ? textMark({ ...base, key: `axis:x:${end}`, text, x: plot.x + along * plot.width, y: plot.y + plot.height + GAP, baseline: 'top', datum })\n : textMark({ ...base, key: `axis:y:${end}`, text, x: plot.x - GAP, y: plot.y + (1 - along) * plot.height, baseline: 'bottom', vertical: true, datum }));\n }\n }\n return marks;\n}\n\nfunction pointMarks(data: QuadrantData, layout: QuadrantLayout, theme: PlotTheme, measure: PlotMeasure): PlotMark[] {\n const marks: PlotMark[] = [];\n data.points.forEach((p, i) => {\n const style = quadrantStyleOf(data, p);\n const at = quadrantAt(layout, p.x, p.y);\n const radius = style.radius ?? RADIUS;\n const mark = pointMark({ key: `point:${i}`, ...at, radius, color: style.color ?? theme.text, datum: { point: i } });\n if (style.strokeColor !== undefined || style.strokeWidth !== undefined) {\n mark.data.stroke = { paint: { color: style.strokeColor ?? theme.text }, width: style.strokeWidth ?? 1 };\n }\n marks.push(mark);\n marks.push(textMark({\n key: `point:label:${i}`, text: p.name, x: at.x + radius + GAP, y: at.y, anchor: 'start', font: theme.font, color: theme.text, measure,\n datum: { edit: 'point', point: i },\n }));\n });\n return marks;\n}\n\n/** Lays out a quadrant chart in a box of `size`: its title, the four quadrants and their labels, the axis labels,\n * and each point with its name beside it. */\nexport function compileQuadrant(\n data: QuadrantData, size: { width: number; height: number }, theme: PlotTheme, measure: PlotMeasure,\n): { marks: PlotMark[]; layout: QuadrantLayout } {\n const { marks, top } = chartTitle(data.title, size.width, theme, measure);\n const layout = quadrantLayout(size, top, theme, measure);\n marks.push(...quadrantMarks(data, layout, theme, measure), ...axisLabelMarks(data, layout, theme, measure), ...pointMarks(data, layout, theme, measure));\n return { marks, layout };\n}\n","/** A radar compiled to its scales and marks. */\nimport { CHART_PAD as PAD, chartTitle } from '../chartTitle';\nimport { pointMark } from '../marks/boxes';\nimport { areaMark, lineMark, ruleMark } from '../marks/paths';\nimport { textMark } from '../marks/text';\nimport type { PlotMark, PlotPoint } from '../marks/types';\nimport type { PlotMeasure } from '../measure';\nimport { polarScale, type PolarScale } from '../scales/polar';\nimport { seriesColor, type PlotTheme } from '../theme';\nimport type { RadarData } from './types';\n\n/** Where a radar's parts landed: the scale its spokes are drawn on. */\nexport interface RadarLayout {\n scale: PolarScale;\n}\n\nconst GAP = 6;\nconst SWATCH = 10;\nconst RING_STEPS = 72;\n\n/** The value range a radar spans: its own ends, else 0 out to its largest value. */\nexport function radarDomain(data: RadarData): [number, number] {\n const values = data.curves.flatMap((c) => c.values).filter(Number.isFinite);\n const min = data.min ?? 0;\n const max = data.max ?? Math.max(min, ...values);\n return max === min ? [min, min + 1] : [min, max];\n}\n\nconst labelOf = (item: { id: string; label?: string }): string => item.label ?? item.id;\n\n/** The legend down the right edge, and how wide it is. */\nfunction legend(data: RadarData, top: number, width: number, theme: PlotTheme, measure: PlotMeasure): { marks: PlotMark[]; width: number } {\n if (data.showLegend === false || data.curves.length === 0) return { marks: [], width: 0 };\n const sizes = data.curves.map((c) => measure(labelOf(c), theme.font));\n const room = SWATCH + GAP + Math.max(...sizes.map((s) => s.width));\n const x = width - PAD - room;\n const marks: PlotMark[] = [];\n let y = top;\n data.curves.forEach((c, i) => {\n const h = Math.max(SWATCH, sizes[i]!.height);\n const color = seriesColor(theme, i);\n marks.push(pointMark({ key: `legend:${i}:swatch`, x: x + SWATCH / 2, y: y + h / 2, radius: SWATCH / 2, color, datum: { curve: i } }));\n marks.push(textMark({\n key: `legend:${i}:label`, text: labelOf(c), x: x + SWATCH + GAP, y: y + h / 2, anchor: 'start', font: theme.font, color: theme.text,\n measure, datum: { edit: 'curve', curve: i },\n }));\n y += h + GAP;\n });\n return { marks, width: room + GAP };\n}\n\n/** Which side of its anchor an axis label at `angle` grows toward, so it reads outward from the rim. */\nfunction labelPlacement(angle: number): { anchor: 'start' | 'middle' | 'end'; baseline: 'top' | 'middle' | 'bottom' } {\n const s = Math.sin(angle);\n const c = Math.cos(angle);\n return {\n anchor: s > 0.1 ? 'start' : s < -0.1 ? 'end' : 'middle',\n baseline: c > 0.1 ? 'bottom' : c < -0.1 ? 'top' : 'middle',\n };\n}\n\n/** The rings at each tick, the spokes, and the axis labels beyond the rim. */\nfunction graticule(data: RadarData, scale: PolarScale, theme: PlotTheme, measure: PlotMeasure): PlotMark[] {\n const n = data.axes.length;\n const rings = Math.max(1, Math.floor(data.ticks ?? 5));\n const [d0, d1] = scale.domain;\n const { center } = scale;\n const marks: PlotMark[] = [];\n for (let k = 1; k <= rings; k++) {\n const v = d0 + ((d1 - d0) * k) / rings;\n const r = scale.radiusAt(v);\n const points: PlotPoint[] = data.graticule === 'polygon' && n >= 3\n ? Array.from({ length: n + 1 }, (_, i) => scale.point(i % n, v))\n : Array.from({ length: RING_STEPS + 1 }, (_, j) => {\n const a = (2 * Math.PI * j) / RING_STEPS;\n return { x: center.x + r * Math.sin(a), y: center.y - r * Math.cos(a) };\n });\n marks.push(lineMark({ key: `grid:ring:${k}`, points, color: theme.grid, width: 1 }));\n }\n data.axes.forEach((axis, i) => {\n marks.push(ruleMark({ key: `grid:spoke:${i}`, from: scale.point(i, d0), to: scale.point(i, d1), color: theme.axis }));\n const a = scale.angle(i);\n const r = scale.radius[1] + GAP;\n marks.push(textMark({\n key: `axis:${i}:label`, text: labelOf(axis), x: center.x + r * Math.sin(a), y: center.y - r * Math.cos(a),\n ...labelPlacement(a), font: theme.font, color: theme.text, measure, datum: { edit: 'axis', axis: i },\n }));\n });\n return marks;\n}\n\n/** Each curve's filled polygon, its outline, and a point on each of its values. */\nfunction curveMarks(data: RadarData, scale: PolarScale, theme: PlotTheme): PlotMark[] {\n const marks: PlotMark[] = [];\n data.curves.forEach((curve, c) => {\n const color = seriesColor(theme, c);\n const placed = data.axes.flatMap((_, i) => {\n const v = curve.values[i];\n return v !== undefined && Number.isFinite(v) ? [{ i, at: scale.point(i, v) }] : [];\n });\n if (placed.length === 0) return;\n const ring = placed.map((p) => p.at);\n marks.push(areaMark({ key: `curve:${c}`, top: ring, color, datum: { curve: c } }));\n marks.push(lineMark({ key: `curve:${c}:outline`, points: [...ring, ring[0]!], color, datum: { curve: c } }));\n for (const { i, at } of placed) marks.push(pointMark({ key: `point:${c}:${i}`, ...at, radius: 3.5, color, datum: { curve: c, axis: i } }));\n });\n return marks;\n}\n\n/** Lays out a radar in a box of `size`: its title, graticule, axis labels, curves and legend. */\nexport function compileRadar(\n data: RadarData, size: { width: number; height: number }, theme: PlotTheme, measure: PlotMeasure,\n): { marks: PlotMark[]; layout: RadarLayout } {\n const { marks, top } = chartTitle(data.title, size.width, theme, measure);\n const key = legend(data, top, size.width, theme, measure);\n const labels = data.axes.map((a) => measure(labelOf(a), theme.font));\n const across = GAP + Math.max(0, ...labels.map((l) => l.width));\n const down = GAP + Math.max(0, ...labels.map((l) => l.height));\n const box = { x: PAD, y: top, width: size.width - 2 * PAD - key.width, height: size.height - PAD - top };\n const outer = Math.max(1, Math.min(box.width / 2 - across, box.height / 2 - down));\n const scale = polarScale({\n center: { x: box.x + box.width / 2, y: box.y + box.height / 2 }, radius: [0, outer], domain: radarDomain(data), axes: data.axes.length,\n });\n marks.push(...graticule(data, scale, theme, measure), ...curveMarks(data, scale, theme), ...key.marks);\n return { marks, layout: { scale } };\n}\n","/** Where a sankey's nodes and ribbons stand: columns by depth, heights by flow, ordered to cross less. */\nimport type { SankeyData } from './types';\n\n/** One node, placed. */\nexport interface SankeyNodeBox {\n label: string;\n column: number;\n /** The larger of what flows in and what flows out. */\n value: number;\n x: number;\n y: number;\n width: number;\n height: number;\n}\n\n/** One link's ribbon: the span it leaves its source across, and the span it reaches its target across. */\nexport interface SankeyRibbon {\n source: number;\n target: number;\n from: { x: number; y0: number; y1: number };\n to: { x: number; y0: number; y1: number };\n}\n\n/** Where a sankey's parts landed. `nodes` in order of first mention; `links` in the spec's order. */\nexport interface SankeyLayout {\n nodes: SankeyNodeBox[];\n links: SankeyRibbon[];\n columns: number;\n}\n\n/** How wide a node is drawn. */\nexport const SANKEY_NODE_WIDTH = 12;\nconst NODE_GAP = 12;\nconst SWEEPS = 4;\n\nconst flowOf = (v: number): number => (Number.isFinite(v) && v > 0 ? v : 0);\n\n/** The nodes' labels, in order of first mention. */\nexport const sankeyNodes = (data: SankeyData): string[] => [...new Set(data.links.flatMap((l) => [l.source, l.target]))];\n\n/** Each node's column: its longest path from a source, with the links that close a cycle left out. */\nfunction depths(n: number, edges: readonly (readonly [number, number])[]): number[] {\n const out: number[][] = Array.from({ length: n }, () => []);\n for (const [s, t] of edges) out[s]!.push(t);\n const state = new Array<number>(n).fill(0);\n const order: number[] = [];\n const forward: number[][] = Array.from({ length: n }, () => []);\n const visit = (root: number) => {\n const stack: { node: number; next: number }[] = [{ node: root, next: 0 }];\n state[root] = 1;\n while (stack.length > 0) {\n const top = stack[stack.length - 1]!;\n const t = out[top.node]![top.next++];\n if (t === undefined) {\n state[top.node] = 2;\n order.push(top.node);\n stack.pop();\n } else if (state[t] !== 1) {\n forward[top.node]!.push(t);\n if (state[t] === 0) {\n state[t] = 1;\n stack.push({ node: t, next: 0 });\n }\n }\n }\n };\n for (let k = 0; k < n; k++) if (state[k] === 0) visit(k);\n const depth = new Array<number>(n).fill(0);\n for (const s of order.reverse()) for (const t of forward[s]!) depth[t] = Math.max(depth[t]!, depth[s]! + 1);\n return depth;\n}\n\n/** The nodes in each column, reordered by a few sweeps toward the mean height of their neighbors, each restacked as it is sorted. */\nfunction orderColumns(\n columns: number[][], center: (k: number) => number, edges: readonly (readonly [number, number, number])[], restack: (col: number[]) => void,\n): void {\n const sweep = (col: number[], near: (k: number) => (readonly [number, number])[]) => {\n const key = new Map(col.map((k) => {\n const ws = near(k);\n const total = ws.reduce((a, [, w]) => a + w, 0);\n return [k, total > 0 ? ws.reduce((a, [o, w]) => a + center(o) * w, 0) / total : center(k)];\n }));\n col.sort((a, b) => key.get(a)! - key.get(b)!);\n restack(col);\n };\n const into = (k: number) => edges.filter(([, t]) => t === k).map(([s, , w]) => [s, Math.max(w, 1e-9)] as const);\n const outOf = (k: number) => edges.filter(([s]) => s === k).map(([, t, w]) => [t, Math.max(w, 1e-9)] as const);\n for (let i = 0; i < SWEEPS; i++) {\n for (let c = 1; c < columns.length; c++) sweep(columns[c]!, into);\n for (let c = columns.length - 2; c >= 0; c--) sweep(columns[c]!, outOf);\n }\n}\n\n/** Lays `data` out in `box`: a column per depth, each node as tall as its flow, ribbons stacked within each node. */\nexport function sankeyLayout(data: SankeyData, box: { x: number; y: number; width: number; height: number }): SankeyLayout {\n const labels = sankeyNodes(data);\n const index = new Map(labels.map((l, k) => [l, k]));\n const edges = data.links.map((l) => [index.get(l.source)!, index.get(l.target)!, flowOf(l.value)] as const);\n const column = depths(labels.length, edges.map(([s, t]) => [s, t] as const));\n const ins = labels.map((_, k) => edges.filter(([, t]) => t === k).reduce((a, [, , w]) => a + w, 0));\n const outs = labels.map((_, k) => edges.filter(([s]) => s === k).reduce((a, [, , w]) => a + w, 0));\n const value = labels.map((_, k) => Math.max(ins[k]!, outs[k]!));\n const count = labels.length === 0 ? 0 : Math.max(...column) + 1;\n const columns: number[][] = Array.from({ length: count }, (_, c) => labels.flatMap((_, k) => (column[k] === c ? [k] : [])));\n const tallest = Math.max(1, ...columns.map((c) => c.length));\n const gap = Math.min(NODE_GAP, box.height / 2 / tallest);\n const ky = Math.max(0, Math.min(...columns.map((c) => {\n const total = c.reduce((a, k) => a + value[k]!, 0);\n return total > 0 ? (box.height - gap * (c.length - 1)) / total : Number.POSITIVE_INFINITY;\n })));\n const scale = Number.isFinite(ky) ? ky : 0;\n const y = new Array<number>(labels.length).fill(0);\n const stack = (col: number[]) => {\n const total = col.reduce((a, k) => a + value[k]! * scale, 0) + gap * (col.length - 1);\n let at = box.y + (box.height - total) / 2;\n for (const k of col) {\n y[k] = at;\n at += value[k]! * scale + gap;\n }\n };\n columns.forEach(stack);\n orderColumns(columns, (k) => y[k]! + (value[k]! * scale) / 2, edges, stack);\n const step = count > 1 ? (box.width - SANKEY_NODE_WIDTH) / (count - 1) : 0;\n const nodes = labels.map((label, k) => ({\n label, column: column[k]!, value: value[k]!, x: box.x + column[k]! * step, y: y[k]!, width: SANKEY_NODE_WIDTH, height: value[k]! * scale,\n }));\n return { nodes, links: ribbons(nodes, edges, scale), columns: count };\n}\n\n/** Each link's ribbon, stacked within its source by its target's height and within its target by its source's. */\nfunction ribbons(nodes: readonly SankeyNodeBox[], edges: readonly (readonly [number, number, number])[], scale: number): SankeyRibbon[] {\n const mid = (k: number) => nodes[k]!.y + nodes[k]!.height / 2;\n const offsets = (side: 0 | 1): number[] => {\n const at = new Array<number>(edges.length).fill(0);\n nodes.forEach((node, k) => {\n const mine = edges.map((e, i) => ({ e, i })).filter(({ e }) => e[side] === k);\n mine.sort((a, b) => mid(a.e[1 - side]!) - mid(b.e[1 - side]!) || a.i - b.i);\n let y = node.y;\n for (const { e, i } of mine) {\n at[i] = y;\n y += e[2] * scale;\n }\n });\n return at;\n };\n const leave = offsets(0);\n const reach = offsets(1);\n return edges.map(([s, t, w], i) => {\n const h = w * scale;\n return {\n source: s,\n target: t,\n from: { x: nodes[s]!.x + nodes[s]!.width, y0: leave[i]!, y1: leave[i]! + h },\n to: { x: nodes[t]!.x, y0: reach[i]!, y1: reach[i]! + h },\n };\n });\n}\n","/** A sankey compiled to its scales and marks. */\nimport { CHART_PAD as PAD, chartTitle } from '../chartTitle';\nimport { barMark } from '../marks/boxes';\nimport { ribbonMark } from '../marks/paths';\nimport { textMark } from '../marks/text';\nimport type { PlotMark } from '../marks/types';\nimport type { PlotMeasure } from '../measure';\nimport { seriesColor, type PlotTheme } from '../theme';\nimport { sankeyLayout, type SankeyLayout, type SankeyNodeBox } from './layout';\nimport type { SankeyData } from './types';\n\nconst LABEL_GAP = 6;\n\n/** A flow as a label reads it, free of float noise. */\nexport const formatFlow = (v: number): string => String(Number(v.toPrecision(12)));\n\n/** A node's label and its value beside it: right of a node in the left half, left of one in the right. */\nfunction nodeLabels(node: SankeyNodeBox, k: number, columns: number, theme: PlotTheme, measure: PlotMeasure): PlotMark[] {\n const right = node.column * 2 < columns - 1 || columns === 1;\n const x = right ? node.x + node.width + LABEL_GAP : node.x - LABEL_GAP;\n const y = node.y + node.height / 2;\n const anchor = right ? 'start' : 'end';\n const base = { x, anchor, font: theme.font, color: theme.text, measure } as const;\n return [\n textMark({ ...base, key: `node:${k}:label`, text: node.label, y, baseline: 'bottom', datum: { edit: 'node', node: node.label } }),\n textMark({ ...base, key: `node:${k}:value`, text: formatFlow(node.value), y, baseline: 'top' }),\n ];\n}\n\n/** Lays out a sankey in a box of `size`: its title, a bar per node with its label and value, a ribbon per link with its value. */\nexport function compileSankey(\n data: SankeyData, size: { width: number; height: number }, theme: PlotTheme, measure: PlotMeasure,\n): { marks: PlotMark[]; layout: SankeyLayout } {\n const { marks, top } = chartTitle(data.title, size.width, theme, measure);\n const box = { x: PAD, y: top, width: Math.max(1, size.width - 2 * PAD), height: Math.max(1, size.height - PAD - top) };\n const layout = sankeyLayout(data, box);\n layout.links.forEach((r, i) => {\n marks.push(ribbonMark({ key: `link:${i}`, from: r.from, to: r.to, color: seriesColor(theme, r.source), datum: { link: i } }));\n });\n layout.nodes.forEach((node, k) => {\n marks.push(barMark({ key: `node:${k}`, x: node.x, width: node.width, from: node.y, to: node.y + node.height, color: seriesColor(theme, k), datum: { node: node.label } }));\n });\n layout.links.forEach((r, i) => {\n marks.push(textMark({\n key: `link:${i}:value`, text: formatFlow(data.links[i]!.value), x: (r.from.x + r.to.x) / 2,\n y: (r.from.y0 + r.from.y1 + r.to.y0 + r.to.y1) / 4, font: theme.font, color: theme.text, measure, datum: { edit: 'value', link: i },\n }));\n });\n layout.nodes.forEach((node, k) => marks.push(...nodeLabels(node, k, layout.columns, theme, measure)));\n return { marks, layout };\n}\n","/** Edits to a timeline, as plain data in and out. Periods are counted flat, left to right across every section. */\nimport type { TimelineData, TimelinePeriod, TimelineSection } from './types';\n\n/** Where the `period`th period, counted flat, sits: its section and its place in it; `null` past the last. */\nexport function timelinePeriodAt(data: TimelineData, period: number): { section: number; index: number } | null {\n if (!Number.isInteger(period) || period < 0) return null;\n let left = period;\n for (let s = 0; s < data.sections.length; s++) {\n const n = data.sections[s]!.periods.length;\n if (left < n) return { section: s, index: left };\n left -= n;\n }\n return null;\n}\n\n/** How many periods the timeline holds across its sections. */\nexport const timelineLength = (data: TimelineData): number => data.sections.reduce((n, s) => n + s.periods.length, 0);\n\nfunction locate(data: TimelineData, period: number, what: string): { section: number; index: number } {\n const at = timelinePeriodAt(data, period);\n if (at === null) throw new Error(`${what}: the timeline holds no period ${period}`);\n return at;\n}\n\n/** `data` with one period replaced by `next`. */\nfunction withPeriod(data: TimelineData, at: { section: number; index: number }, next: TimelinePeriod): TimelineData {\n return {\n ...data,\n sections: data.sections.map((s, i) => (i === at.section ? { ...s, periods: s.periods.map((p, j) => (j === at.index ? next : p)) } : s)),\n };\n}\n\n/** `data` with section `section` named `name`, trimmed. An empty name changes nothing. Throws on a section it does not hold. */\nexport function setTimelineSectionName(data: TimelineData, section: number, name: string): TimelineData {\n const target = data.sections[section];\n if (target === undefined) throw new Error(`setTimelineSectionName: the timeline holds no section ${section}`);\n const text = name.trim();\n if (text === '' || text === target.name) return data;\n return { ...data, sections: data.sections.map((s, i) => (i === section ? { ...s, name: text } : s)) };\n}\n\n/** `data` with period `period`'s label set to `label`, trimmed. An empty label changes nothing. */\nexport function setTimelinePeriodLabel(data: TimelineData, period: number, label: string): TimelineData {\n const at = locate(data, period, 'setTimelinePeriodLabel');\n const target = data.sections[at.section]!.periods[at.index]!;\n const text = label.trim();\n if (text === '' || text === target.label) return data;\n return withPeriod(data, at, { ...target, label: text });\n}\n\n/** `data` with event `event` of period `period` set to `text`, trimmed; an empty one removes the event. */\nexport function setTimelineEvent(data: TimelineData, period: number, event: number, text: string): TimelineData {\n const at = locate(data, period, 'setTimelineEvent');\n const target = data.sections[at.section]!.periods[at.index]!;\n if (!Number.isInteger(event) || event < 0 || event >= target.events.length) {\n throw new Error(`setTimelineEvent: period ${period} holds no event ${event}`);\n }\n const value = text.trim();\n if (value === target.events[event]) return data;\n const events = value === '' ? target.events.filter((_, i) => i !== event) : target.events.map((e, i) => (i === event ? value : e));\n return withPeriod(data, at, { ...target, events });\n}\n\n/**\n * `data` with the period at flat index `from` moved to flat index `to`, counted after it is taken out. Moved right,\n * it joins the section of the period before it; moved left, the section of the period after it. A section the move\n * leaves empty is dropped. Throws on an index the timeline does not hold.\n */\nexport function moveTimelinePeriod(data: TimelineData, from: number, to: number): TimelineData {\n const n = timelineLength(data);\n locate(data, from, 'moveTimelinePeriod');\n if (!Number.isInteger(to) || to < 0 || to >= n) throw new Error(`moveTimelinePeriod: the timeline holds no period ${to}`);\n if (from === to) return data;\n const flat = data.sections.flatMap((s, section) => s.periods.map((period) => ({ section, period })));\n const [moved] = flat.splice(from, 1);\n const neighbor = to > from ? flat[to - 1]! : flat[to]!;\n flat.splice(to, 0, { section: neighbor.section, period: moved!.period });\n const sections: TimelineSection[] = [];\n data.sections.forEach((s, i) => {\n const periods = flat.filter((f) => f.section === i).map((f) => f.period);\n if (periods.length > 0) sections.push({ ...s, periods });\n });\n return { ...data, sections };\n}\n","/** A timeline compiled to its marks: periods in columns, each section a colored header over its run. */\nimport { CHART_PAD as PAD, chartTitle } from '../chartTitle';\nimport { pointMark, spanMark } from '../marks/boxes';\nimport { ruleMark } from '../marks/paths';\nimport { textMark } from '../marks/text';\nimport type { PlotMark } from '../marks/types';\nimport type { PlotMeasure } from '../measure';\nimport { seriesColor, type PlotTheme } from '../theme';\nimport { timelineLength } from './edit';\nimport type { TimelineData } from './types';\n\n/** Where a timeline's columns landed: one per period, counted flat across sections. */\nexport interface TimelineLayout {\n /** Each period's column center along x. */\n slots: readonly number[];\n columnWidth: number;\n}\n\nconst BOX_PAD = 6;\nconst INSET = 4;\nconst GAP = 8;\nconst LINE_GAP = 14;\nconst EVENT_GAP = 6;\n\n/** Lays out a timeline in a box of `size`: its title, section headers, period boxes, the line across, and events. */\nexport function compileTimeline(\n data: TimelineData, size: { width: number; height: number }, theme: PlotTheme, measure: PlotMeasure,\n): { marks: PlotMark[]; layout: TimelineLayout } {\n const { marks, top } = chartTitle(data.title, size.width, theme, measure);\n const n = timelineLength(data);\n const columnWidth = Math.max(1, size.width - 2 * PAD) / Math.max(1, n);\n const slots = Array.from({ length: n }, (_, i) => PAD + columnWidth * (i + 0.5));\n const boxHeight = measure('Mg', theme.font).height + 2 * BOX_PAD;\n const named = data.sections.some((s) => s.name !== undefined);\n const periodTop = top + (named ? boxHeight + GAP : 0);\n const lineY = periodTop + boxHeight + LINE_GAP;\n const bottom = Math.max(lineY, size.height - PAD);\n const font = { font: theme.font, color: theme.text, measure };\n const boxes: PlotMark[] = [];\n const texts: PlotMark[] = [];\n let p = 0;\n data.sections.forEach((section, s) => {\n const color = seriesColor(theme, s);\n const first = p;\n for (const period of section.periods) {\n const x = PAD + columnWidth * p + INSET;\n const width = Math.max(1, columnWidth - 2 * INSET);\n boxes.push(spanMark({ key: `period:${p}:box`, x0: x, x1: x + width, y: periodTop, height: boxHeight, color, datum: { period: p } }));\n texts.push(textMark({ key: `period:${p}:label`, text: period.label, x: slots[p]!, y: periodTop + boxHeight / 2, ...font, bold: true, datum: { edit: 'period', period: p } }));\n boxes.push(ruleMark({ key: `period:${p}:stem`, from: { x: slots[p]!, y: lineY }, to: { x: slots[p]!, y: lineY + LINE_GAP }, color, dash: [3, 3] }));\n let y = lineY + LINE_GAP;\n period.events.forEach((event, e) => {\n boxes.push(spanMark({ key: `event:${p}:${e}:box`, x0: x, x1: x + width, y, height: boxHeight, color, opacity: 0.35, datum: { period: p, event: e } }));\n texts.push(textMark({ key: `event:${p}:${e}:label`, text: event, x: slots[p]!, y: y + boxHeight / 2, ...font, datum: { edit: 'event', period: p, event: e } }));\n y += boxHeight + EVENT_GAP;\n });\n p++;\n }\n if (section.name === undefined || p === first) return;\n const x0 = PAD + columnWidth * first;\n const x1 = PAD + columnWidth * p;\n marks.push(spanMark({ key: `section:${s}:band`, x0, x1, y: top, height: bottom - top, color, opacity: 0.12, datum: { section: s } }));\n boxes.push(spanMark({ key: `section:${s}:header`, x0: x0 + INSET, x1: x1 - INSET, y: top, height: boxHeight, color, datum: { section: s } }));\n texts.push(textMark({ key: `section:${s}:label`, text: section.name, x: (x0 + x1) / 2, y: top + boxHeight / 2, ...font, bold: true, datum: { edit: 'section', section: s } }));\n });\n if (n > 0) marks.push(ruleMark({ key: 'line', from: { x: PAD, y: lineY }, to: { x: size.width - PAD, y: lineY }, color: theme.axis, width: 2 }));\n marks.push(...boxes);\n slots.forEach((x, i) => marks.push(pointMark({ key: `period:${i}:dot`, x, y: lineY, radius: 4, color: theme.axis, datum: { period: i } })));\n marks.push(...texts);\n return { marks, layout: { slots, columnWidth } };\n}\n\n/** The period slot nearest `x`; `-1` when there are none. */\nexport function timelineSlotAt(layout: TimelineLayout, x: number): number {\n let best = -1;\n layout.slots.forEach((slot, i) => {\n if (best < 0 || Math.abs(slot - x) < Math.abs(layout.slots[best]! - x)) best = i;\n });\n return best;\n}\n","/** An xychart compiled to its scales and marks. */\nimport { axisMarks, axisRoom } from '../axes';\nimport { barMark, pointMark } from '../marks/boxes';\nimport { lineMark } from '../marks/paths';\nimport { CHART_PAD as PAD, chartTitle } from '../chartTitle';\nimport type { PlotMark } from '../marks/types';\nimport type { PlotMeasure } from '../measure';\nimport { bandScale } from '../scales/band';\nimport { linearScale, niceDomain, type LinearScale } from '../scales/linear';\nimport type { Scale } from '../scales/types';\nimport { seriesColor, type PlotTheme } from '../theme';\nimport type { XyChartData } from './types';\n\n/** Where an xychart's parts landed: the plot area, the value scale, and each value index's place across it. */\nexport interface XyLayout {\n orientation: 'vertical' | 'horizontal';\n /** The area the marks are drawn in, inside the axes. */\n plot: { x: number; y: number; width: number; height: number };\n /** Values along y for a vertical chart, along x for a horizontal one. */\n value: LinearScale;\n /** Each value index's center along the category axis. */\n slots: readonly number[];\n /** How much of the category axis each index's bars share. */\n slotWidth: number;\n}\n\nconst BAND_PADDING = 0.2;\n\n/** How many values the longest series holds. */\nexport const xyLength = (data: XyChartData): number => Math.max(0, ...data.series.map((s) => s.values.length));\n\n/** The labels of the category bands: the axis's own, else numbers from 1, one per value of the longest series. */\nfunction categoriesOf(data: XyChartData): string[] {\n if (data.x?.kind === 'band' && data.x.categories.length > 0) return [...data.x.categories];\n return Array.from({ length: xyLength(data) }, (_, i) => String(i + 1));\n}\n\n/** The value axis's domain: its own ends, and where one is missing, the values' reach with zero in it, made round. */\nexport function xyValueDomain(data: XyChartData): [number, number] {\n const values = data.series.flatMap((s) => s.values).filter(Number.isFinite);\n const lo = Math.min(0, ...values);\n const hi = Math.max(0, ...values);\n const [niceLo, niceHi] = niceDomain([lo, hi === lo ? lo + 1 : hi]);\n const min = data.y?.min ?? niceLo;\n const max = data.y?.max ?? niceHi;\n return min === max ? [min, min + 1] : [min, max];\n}\n\n/** The category axis's scale over `range`, and each value index's center and share along it. */\nfunction categoryAxis(data: XyChartData, range: [number, number]): { scale: Scale<string> | Scale<number>; slots: number[]; slotWidth: number } {\n const n = xyLength(data);\n if (data.x?.kind === 'range') {\n const scale = linearScale({ domain: [data.x.min, data.x.max], range });\n const step = (range[1] - range[0]) / Math.max(1, n);\n const slots = Array.from({ length: n }, (_, i) => range[0] + step * (i + 0.5));\n return { scale, slots, slotWidth: Math.abs(step) * (1 - BAND_PADDING) };\n }\n const categories = categoriesOf(data);\n const scale = bandScale({ domain: categories, range, paddingInner: BAND_PADDING });\n const slots = Array.from({ length: n }, (_, i) => (i < categories.length ? scale.position(categories[i]!) : Number.NaN));\n return { scale, slots, slotWidth: scale.bandwidth };\n}\n\n/** Lays out an xychart in a box of `size`: its title, axes, bars, lines and points. */\nexport function compileXyChart(\n data: XyChartData, size: { width: number; height: number }, theme: PlotTheme, measure: PlotMeasure,\n): { marks: PlotMark[]; layout: XyLayout } {\n const vertical = data.orientation !== 'horizontal';\n const { marks, top } = chartTitle(data.title, size.width, theme, measure);\n const domain = xyValueDomain(data);\n const base = { theme, measure, at: 0 };\n const valueTitle = data.y?.title !== undefined ? { title: data.y.title } : {};\n const categoryTitle = data.x?.title !== undefined ? { title: data.x.title } : {};\n const probe = categoryAxis(data, [0, 1]);\n const valueRoom = axisRoom({ ...base, ...valueTitle, scale: linearScale({ domain, range: [0, 1] }), side: vertical ? 'left' : 'bottom' });\n const categoryRoom = axisRoom({ ...base, ...categoryTitle, scale: probe.scale as Scale<unknown>, side: vertical ? 'bottom' : 'left' });\n const left = PAD + (vertical ? valueRoom : categoryRoom);\n const bottom = size.height - PAD - (vertical ? categoryRoom : valueRoom);\n const plot = { x: left, y: top, width: Math.max(1, size.width - PAD - left), height: Math.max(1, bottom - top) };\n const right = plot.x + plot.width;\n\n const value = linearScale({ domain, range: vertical ? [bottom, top] : [left, right] });\n const category = categoryAxis(data, vertical ? [left, right] : [top, bottom]);\n marks.push(...axisMarks({ ...base, ...valueTitle, key: 'axis:value', scale: value, side: vertical ? 'left' : 'bottom', at: vertical ? left : bottom, gridTo: vertical ? right : top }));\n marks.push(...axisMarks({ ...base, ...categoryTitle, key: 'axis:category', scale: category.scale as Scale<unknown>, side: vertical ? 'bottom' : 'left', at: vertical ? bottom : left }));\n\n const layout: XyLayout = { orientation: vertical ? 'vertical' : 'horizontal', plot, value, slots: category.slots, slotWidth: category.slotWidth };\n marks.push(...seriesMarks(data, layout, theme));\n return { marks, layout };\n}\n\n/** The bars, lines and points of every series, in series order. */\nfunction seriesMarks(data: XyChartData, layout: XyLayout, theme: PlotTheme): PlotMark[] {\n const { value, slots, slotWidth } = layout;\n const vertical = layout.orientation === 'vertical';\n const at = (along: number, v: number) => (vertical ? { x: along, y: value.map(v) } : { x: value.map(v), y: along });\n const [d0, d1] = value.domain;\n const baseline = value.map(Math.min(Math.max(0, Math.min(d0, d1)), Math.max(d0, d1)));\n const bars = data.series.filter((s) => s.kind === 'bar');\n const barWidth = slotWidth / Math.max(1, bars.length);\n const categories = categoriesOf(data);\n const marks: PlotMark[] = [];\n data.series.forEach((series, s) => {\n const color = seriesColor(theme, s);\n const datum = (i: number) => ({ series: s, index: i, value: series.values[i]!, category: categories[i] ?? String(i + 1) });\n const placed = series.values.map((v, i) => ({ v, i })).filter(({ v, i }) => Number.isFinite(v) && Number.isFinite(slots[i] ?? Number.NaN));\n if (series.kind === 'bar') {\n const j = bars.indexOf(series);\n for (const { v, i } of placed) {\n marks.push(barMark({\n key: `bar:${s}:${i}`, x: slots[i]! - slotWidth / 2 + j * barWidth, width: barWidth, from: baseline, to: value.map(v), color,\n datum: datum(i), orient: layout.orientation,\n }));\n }\n return;\n }\n if (placed.length > 0) {\n marks.push(lineMark({ key: `line:${s}`, points: placed.map(({ v, i }) => at(slots[i]!, v)), color, datum: { series: s } }));\n }\n for (const { v, i } of placed) marks.push(pointMark({ key: `point:${s}:${i}`, ...at(slots[i]!, v), radius: 3.5, color, datum: datum(i) }));\n });\n return marks;\n}\n","/** Chart specs, and the one table that compiles each kind to marks. */\nimport { compileGantt } from './gantt/compile';\nimport type { GanttData } from './gantt/types';\nimport { compileGitGraph } from './gitgraph/compile';\nimport type { GitGraphData } from './gitgraph/types';\nimport { compileJourney } from './journey/compile';\nimport type { JourneyData } from './journey/types';\nimport type { PlotMark } from './marks/types';\nimport type { PlotMeasure } from './measure';\nimport { compilePacket } from './packet/compile';\nimport type { PacketData } from './packet/types';\nimport { compilePie } from './pie/compile';\nimport type { PieData } from './pie/types';\nimport { compileQuadrant } from './quadrant/compile';\nimport type { QuadrantData } from './quadrant/types';\nimport { compileRadar } from './radar/compile';\nimport type { RadarData } from './radar/types';\nimport { compileSankey } from './sankey/compile';\nimport type { SankeyData } from './sankey/types';\nimport type { PlotTheme } from './theme';\nimport { compileTimeline } from './timeline/compile';\nimport type { TimelineData } from './timeline/types';\nimport { compileXyChart } from './xychart/compile';\nimport type { XyChartData } from './xychart/types';\n\n/** A chart, as data: one spec per kind, told apart by `kind`. */\nexport type PlotData =\n | XyChartData | GanttData | TimelineData | PieData | QuadrantData | JourneyData | GitGraphData | SankeyData | PacketData | RadarData;\n\n/** The kinds of chart {@link PlotData} holds. */\nexport type PlotKind = PlotData['kind'];\n\n/** What a kind's compiler is given and gives back: its spec laid out in a box of `size`, as marks. */\nexport type PlotCompiler<D extends PlotData> = (\n data: D, size: { width: number; height: number }, theme: PlotTheme, measure: PlotMeasure,\n) => { marks: PlotMark[] };\n\nconst COMPILERS: { readonly [K in PlotKind]: PlotCompiler<Extract<PlotData, { kind: K }>> } = {\n xychart: compileXyChart,\n gantt: compileGantt,\n timeline: compileTimeline,\n pie: compilePie,\n quadrant: compileQuadrant,\n journey: compileJourney,\n gitgraph: compileGitGraph,\n sankey: compileSankey,\n packet: compilePacket,\n radar: compileRadar,\n};\n\n/** `data` laid out in a box of `size`, as the marks it is drawn with, in drawing order. */\nexport function compilePlot(\n data: PlotData, size: { width: number; height: number }, theme: PlotTheme, measure: PlotMeasure,\n): PlotMark[] {\n const compile = COMPILERS[data.kind] as PlotCompiler<PlotData> | undefined;\n if (compile === undefined) throw new Error(`compilePlot: no chart of kind \"${(data as { kind: string }).kind}\"`);\n return compile(data, size, theme, measure).marks;\n}\n","/** Edits to an xychart, as plain data in and out. */\nimport { decimalsOf } from '../scales/linear';\nimport { xyLength, type XyLayout } from './compile';\nimport type { XyChartData } from './types';\n\n/** How many rows the chart has: its categories, or its longest series where that is longer. */\nexport const xyRows = (data: XyChartData): number => Math.max(data.x?.kind === 'band' ? data.x.categories.length : 0, xyLength(data));\n\n/** `data` with series `series`'s value at `index` set to `value`, a shorter series padded with zeros. Throws on a series\n * the chart does not hold or an index past its last row. */\nexport function setXyValue(data: XyChartData, series: number, index: number, value: number): XyChartData {\n const target = data.series[series];\n if (target === undefined || !Number.isInteger(index) || index < 0 || index >= xyRows(data)) {\n throw new Error(`setXyValue: series ${series} holds no value ${index}`);\n }\n if (target.values[index] === value) return data;\n const values = Array.from({ length: Math.max(target.values.length, index + 1) }, (_, i) => (i === index ? value : target.values[i] ?? 0));\n return { ...data, series: data.series.map((s, i) => (i === series ? { ...s, values } : s)) };\n}\n\n/** The value a point stands at along `layout`'s value axis, rounded to a tenth of its tick step. */\nexport function xyValueAt(layout: XyLayout, at: { x: number; y: number }): number {\n const raw = layout.value.invert(layout.orientation === 'vertical' ? at.y : at.x);\n const step = layout.value.tickStep() / 10;\n return Number((Math.round(raw / step) * step).toFixed(decimalsOf(step)));\n}\n","/** Edits to a gantt, as plain data in and out. Instants are milliseconds since the epoch, in UTC. */\nimport { formatGanttDate } from './dates';\nimport { dateFormatOf, excludedDays, ganttDurationBetween, scheduleGantt } from './schedule';\nimport type { GanttData, GanttEnd, GanttTask } from './types';\n\nfunction taskAt(data: GanttData, section: number, task: number, what: string): GanttTask {\n const found = data.sections[section]?.tasks[task];\n if (found === undefined) throw new Error(`${what}: the gantt holds no task ${task} in section ${section}`);\n return found;\n}\n\nfunction withTask(data: GanttData, section: number, task: number, next: GanttTask): GanttData {\n return {\n ...data,\n sections: data.sections.map((s, i) => (i === section ? { ...s, tasks: s.tasks.map((t, j) => (j === task ? next : t)) } : s)),\n };\n}\n\n/** `t` rounded to the nearest whole `step`. */\nexport const snapGantt = (t: number, step: number): number => Math.round(t / step) * step;\n\n/**\n * `data` with a task starting at `start`, written in the chart's `dateFormat`. A task that started after others, or\n * after the task before it, leaves that dependency: it starts on the date from then on. Its end is kept as written,\n * so a duration moves with it and a date stays put.\n */\nexport function moveGanttTask(data: GanttData, section: number, task: number, start: number): GanttData {\n const target = taskAt(data, section, task, 'moveGanttTask');\n const date = formatGanttDate(start, dateFormatOf(data));\n if (target.start.kind === 'date' && target.start.date === date) return data;\n return withTask(data, section, task, { ...target, start: { kind: 'date', date } });\n}\n\n/**\n * `data` with a task ending at `end`. A duration keeps its unit and takes the whole number of units nearest the span,\n * at least 1 (0 for a milestone), days and weeks counted past excluded days; a date takes the new date, not before the\n * start; an `until` end becomes a duration in days.\n */\nexport function setGanttEnd(data: GanttData, section: number, task: number, end: number): GanttData {\n const target = taskAt(data, section, task, 'setGanttEnd');\n const start = scheduleGantt(data).spans[section]![task]!.start;\n const old = target.end;\n let next: GanttEnd;\n if (old.kind === 'date') {\n next = { kind: 'date', date: formatGanttDate(Math.max(start, end), dateFormatOf(data)) };\n if (next.date === old.date) return data;\n } else {\n const unit = old.kind === 'duration' ? old.unit : 'd';\n const least = target.tags?.includes('milestone') ? 0 : 1;\n const amount = Math.max(least, ganttDurationBetween(start, end, unit, excludedDays(data)));\n if (old.kind === 'duration' && old.amount === amount) return data;\n next = { kind: 'duration', amount, unit };\n }\n return withTask(data, section, task, { ...target, end: next });\n}\n\n/** `data` with section `section` named `name`, trimmed. An empty name changes nothing. */\nexport function setGanttSectionName(data: GanttData, section: number, name: string): GanttData {\n const target = data.sections[section];\n if (target === undefined) throw new Error(`setGanttSectionName: the gantt holds no section ${section}`);\n const text = name.trim();\n if (text === '' || text === target.name) return data;\n return { ...data, sections: data.sections.map((s, i) => (i === section ? { ...s, name: text } : s)) };\n}\n\n/** `data` with a task named `name`, trimmed. An empty name changes nothing. */\nexport function setGanttTaskName(data: GanttData, section: number, task: number, name: string): GanttData {\n const target = taskAt(data, section, task, 'setGanttTaskName');\n const text = name.trim();\n if (text === '' || text === target.name) return data;\n return withTask(data, section, task, { ...target, name: text });\n}\n","/** Edits to a pie, as plain data in and out. */\nimport type { PieData, PieSlice } from './types';\n\nfunction withSlice(data: PieData, slice: number, change: Partial<PieSlice>, who: string): PieData {\n const target = data.slices[slice];\n if (target === undefined) throw new Error(`${who}: the pie holds no slice ${slice}`);\n if (Object.entries(change).every(([k, v]) => target[k as keyof PieSlice] === v)) return data;\n return { ...data, slices: data.slices.map((s, i) => (i === slice ? { ...s, ...change } : s)) };\n}\n\n/** `data` with slice `slice`'s value set to `value`. Throws on a slice the pie does not hold. */\nexport const setPieValue = (data: PieData, slice: number, value: number): PieData => withSlice(data, slice, { value }, 'setPieValue');\n\n/** `data` with slice `slice`'s label set to `label`. Throws on a slice the pie does not hold. */\nexport const setPieLabel = (data: PieData, slice: number, label: string): PieData => withSlice(data, slice, { label }, 'setPieLabel');\n\n/** A value as typed into the legend, its brackets optional: a non-negative number, else `null`. */\nexport function pieValueOf(text: string): number | null {\n const bare = text.trim().replace(/^\\[\\s*(.*?)\\s*\\]$/, '$1');\n if (!/^\\+?(?:\\d+\\.?\\d*|\\.\\d+)(?:e[+-]?\\d+)?$/i.test(bare)) return null;\n const value = Number(bare);\n return Number.isFinite(value) ? value : null;\n}\n","/** Edits to a quadrant chart, as plain data in and out. */\nimport type { QuadrantData, QuadrantPoint } from './types';\n\nfunction withPoint(data: QuadrantData, point: number, change: Partial<QuadrantPoint>, who: string): QuadrantData {\n const target = data.points[point];\n if (target === undefined) throw new Error(`${who}: the chart holds no point ${point}`);\n if (Object.entries(change).every(([k, v]) => target[k as keyof QuadrantPoint] === v)) return data;\n return { ...data, points: data.points.map((p, i) => (i === point ? { ...p, ...change } : p)) };\n}\n\n/** `data` with point `point` moved to `x`, `y`. Throws on a point the chart does not hold. */\nexport const setQuadrantPoint = (data: QuadrantData, point: number, at: { x: number; y: number }): QuadrantData =>\n withPoint(data, point, { x: at.x, y: at.y }, 'setQuadrantPoint');\n\n/** `data` with point `point` named `name`. Throws on a point the chart does not hold. */\nexport const setQuadrantPointName = (data: QuadrantData, point: number, name: string): QuadrantData =>\n withPoint(data, point, { name }, 'setQuadrantPointName');\n\n/** `data` with an axis's end labeled `text`; an empty one drops it. */\nexport function setQuadrantAxisLabel(data: QuadrantData, axis: 'x' | 'y', end: 'low' | 'high', text: string): QuadrantData {\n const ends = data[axis] ?? {};\n if ((ends[end] ?? '') === text) return data;\n const { [end]: _, ...rest } = ends;\n const next = text === '' ? rest : { ...rest, [end]: text };\n const { [axis]: __, ...others } = data;\n return Object.keys(next).length === 0 ? others as QuadrantData : { ...others, [axis]: next } as QuadrantData;\n}\n\n/** `data` with quadrant `quadrant` (1 to 4, Mermaid's numbering) labeled `text`; an empty one drops it. Throws on any other number. */\nexport function setQuadrantLabel(data: QuadrantData, quadrant: number, text: string): QuadrantData {\n if (![1, 2, 3, 4].includes(quadrant)) throw new Error(`setQuadrantLabel: there is no quadrant ${quadrant}`);\n if ((data.quadrants?.[quadrant - 1] ?? '') === text) return data;\n const q = data.quadrants;\n const labels: [string?, string?, string?, string?] = [q?.[0], q?.[1], q?.[2], q?.[3]];\n labels[(quadrant - 1) as 0 | 1 | 2 | 3] = text === '' ? undefined : text;\n const { quadrants: _, ...rest } = data;\n while (labels.length > 0 && labels[labels.length - 1] === undefined) labels.pop();\n return labels.length === 0 ? rest : { ...rest, quadrants: labels };\n}\n","/** Edits to a user journey, as plain data in and out. */\nimport type { JourneyLayout } from './compile';\nimport type { JourneyData, JourneyTask } from './types';\n\n/** `data` with step `task` of section `section` changed. Throws on a step the journey does not hold. */\nfunction withTask(data: JourneyData, section: number, task: number, change: Partial<JourneyTask>, who: string): JourneyData {\n const target = data.sections[section]?.tasks[task];\n if (target === undefined) throw new Error(`${who}: section ${section} holds no step ${task}`);\n if (Object.entries(change).every(([k, v]) => target[k as keyof JourneyTask] === v)) return data;\n return {\n ...data,\n sections: data.sections.map((s, i) => (i === section ? { ...s, tasks: s.tasks.map((t, j) => (j === task ? { ...t, ...change } : t)) } : s)),\n };\n}\n\n/** `data` with a step's score set to `score`. Throws on a step the journey does not hold. */\nexport const setJourneyScore = (data: JourneyData, section: number, task: number, score: number): JourneyData =>\n withTask(data, section, task, { score }, 'setJourneyScore');\n\n/** `data` with a step named `name`. Throws on a step the journey does not hold. */\nexport const setJourneyTaskName = (data: JourneyData, section: number, task: number, name: string): JourneyData =>\n withTask(data, section, task, { name }, 'setJourneyTaskName');\n\n/** `data` with section `section` named `name`. Throws on a section the journey does not hold. */\nexport function setJourneySectionName(data: JourneyData, section: number, name: string): JourneyData {\n const target = data.sections[section];\n if (target === undefined) throw new Error(`setJourneySectionName: the journey holds no section ${section}`);\n if (target.name === name) return data;\n return { ...data, sections: data.sections.map((s, i) => (i === section ? { ...s, name } : s)) };\n}\n\n/** The score under `at`: a whole number from 1 to 5. */\nexport const journeyScoreAt = (layout: JourneyLayout, at: { x: number; y: number }): number =>\n Math.min(5, Math.max(1, Math.round(layout.score.invert(at.y))));\n","/** Edits to a gitgraph, as plain data in and out. */\nimport type { GitGraphData } from './types';\n\n/** `data` with command `command`'s tag set to `text`, trimmed; an empty one removes it. Throws on a command that\n * does not exist or makes no commit. */\nexport function setGitTag(data: GitGraphData, command: number, text: string): GitGraphData {\n const cmd = data.commands[command];\n if (cmd === undefined || cmd.kind === 'branch' || cmd.kind === 'checkout') throw new Error(`setGitTag: command ${command} makes no commit`);\n const tag = text.trim();\n if ((cmd.tag ?? '') === tag) return data;\n const { tag: _, ...rest } = cmd;\n const next = tag === '' ? rest : { ...rest, tag };\n return { ...data, commands: data.commands.map((c, i) => (i === command ? next : c)) };\n}\n","/** Edits to a sankey, as plain data in and out. */\nimport { sankeyNodes } from './layout';\nimport type { SankeyData } from './types';\n\n/** `data` with link `link`'s value set to `value`. Throws on a link it does not hold. */\nexport function setSankeyValue(data: SankeyData, link: number, value: number): SankeyData {\n const target = data.links[link];\n if (target === undefined) throw new Error(`setSankeyValue: no link ${link}`);\n if (target.value === value) return data;\n return { ...data, links: data.links.map((l, i) => (i === link ? { ...l, value } : l)) };\n}\n\n/** `data` with node `from` called `to` in every link. Throws on a node it does not hold, or a name another node has. */\nexport function renameSankeyNode(data: SankeyData, from: string, to: string): SankeyData {\n const nodes = sankeyNodes(data);\n if (!nodes.includes(from)) throw new Error(`renameSankeyNode: no node \"${from}\"`);\n if (from === to) return data;\n if (nodes.includes(to)) throw new Error(`renameSankeyNode: a node is already called \"${to}\"`);\n const named = (n: string) => (n === from ? to : n);\n return { ...data, links: data.links.map((l) => (l.source === from || l.target === from ? { ...l, source: named(l.source), target: named(l.target) } : l)) };\n}\n","/** Edits to a packet diagram, as plain data in and out. */\nimport type { PacketData } from './types';\n\n/** `data` with field `field` labeled `label`. Throws on a field the packet does not hold. */\nexport function setPacketLabel(data: PacketData, field: number, label: string): PacketData {\n const target = data.fields[field];\n if (target === undefined) throw new Error(`setPacketLabel: the packet holds no field ${field}`);\n if (target.label === label) return data;\n return { ...data, fields: data.fields.map((f, i) => (i === field ? { ...f, label } : f)) };\n}\n","/** Edits to a radar, as plain data in and out. */\nimport { decimalsOf } from '../scales/linear';\nimport type { PlotPoint } from '../marks/types';\nimport type { RadarLayout } from './compile';\nimport type { RadarData } from './types';\n\n/** `data` with curve `curve`'s value on axis `axis` set to `value`. Throws on a curve or axis it does not hold. */\nexport function setRadarValue(data: RadarData, curve: number, axis: number, value: number): RadarData {\n const target = data.curves[curve];\n if (target === undefined || axis < 0 || axis >= data.axes.length) throw new Error(`setRadarValue: curve ${curve} holds no value on axis ${axis}`);\n if (target.values[axis] === value) return data;\n const values = data.axes.map((_, i) => (i === axis ? value : target.values[i] ?? 0));\n return { ...data, curves: data.curves.map((c, i) => (i === curve ? { ...c, values } : c)) };\n}\n\n/** `items` with item `index`'s label set to `text`, trimmed; an empty one, or its id, drops it. `null` when that changes nothing. */\nfunction relabel<T extends { id: string; label?: string }>(items: readonly T[], index: number, text: string, what: string): T[] | null {\n const item = items[index];\n if (item === undefined) throw new Error(`${what}: no item ${index}`);\n const label = text.trim();\n const next = label === '' || label === item.id ? undefined : label;\n if (next === item.label) return null;\n const { label: _, ...rest } = item;\n return items.map((x, i) => (i === index ? (next === undefined ? rest : { ...rest, label: next }) as T : x));\n}\n\n/** `data` with axis `axis`'s label set to `text`; an empty label falls back to the axis's id. Throws on an axis it does not hold. */\nexport function setRadarAxisLabel(data: RadarData, axis: number, text: string): RadarData {\n const axes = relabel(data.axes, axis, text, 'setRadarAxisLabel');\n return axes === null ? data : { ...data, axes };\n}\n\n/** `data` with curve `curve`'s label set to `text`; an empty label falls back to the curve's id. Throws on a curve it does not hold. */\nexport function setRadarCurveLabel(data: RadarData, curve: number, text: string): RadarData {\n const curves = relabel(data.curves, curve, text, 'setRadarCurveLabel');\n return curves === null ? data : { ...data, curves };\n}\n\n/** The value on axis `axis` nearest `at`, rounded to a tenth of the scale's tick step. */\nexport function radarValueAt(layout: RadarLayout, axis: number, at: PlotPoint): number {\n const raw = layout.scale.valueAt(axis, at);\n const step = layout.scale.tickStep() / 10;\n return Number((Math.round(raw / step) * step).toFixed(decimalsOf(step)));\n}\n","/**\n * A plot in a scene: one root node holding the spec, its marks derived\n * children rebuilt from it. An edit replaces the spec and rebuilds the marks\n * as one undo entry.\n */\nimport type { AddNodeSpec, NodeId, RectPose, Scene } from '@weasel-js/core';\nimport type { PlotMark, PlotMarkData, PlotMarkTrait } from './marks/types';\nimport { textMeasure, type PlotMeasure } from './measure';\nimport { compilePlot, type PlotData } from './plotData';\nimport { PLOT_THEME, type PlotTheme } from './theme';\n\n/** What a plot's root node keeps: the spec, and the theme its marks were drawn in. */\nexport interface PlotRootTrait {\n data: PlotData;\n theme: PlotTheme;\n}\n\n/** A plot root's scene data. */\nexport interface PlotRootData {\n plot: PlotRootTrait;\n}\n\n/** The data of any node a plot puts in a scene. */\nexport type PlotSceneData = PlotRootData | PlotMarkData;\n\n/** A scene node spec, as {@link plotSpecs} returns them. */\nexport type PlotSpec<TLayer extends string = 'main'> = AddNodeSpec<PlotSceneData, TLayer, RectPose>;\n\n/** Options for {@link plotSpecs}. */\nexport interface PlotSpecsOptions<TLayer extends string = 'main'> {\n /** The root's id. Default `'plot'`. */\n id?: string;\n /** The box the plot fills. */\n box: { x: number; y: number; width: number; height: number };\n /** Default `'main'`. */\n layer?: TLayer;\n /** Default {@link PLOT_THEME}. */\n theme?: PlotTheme;\n /** Default {@link textMeasure}. */\n measure?: PlotMeasure;\n}\n\n/** The trait a plot root's data carries, or `null` for any other node. */\nexport function plotRootOf(node: { data: unknown } | undefined): PlotRootTrait | null {\n const plot = (node?.data as { plot?: PlotRootTrait } | null | undefined)?.plot;\n return plot !== undefined && plot !== null && typeof plot === 'object' && typeof plot.data?.kind === 'string' ? plot : null;\n}\n\n/** The trait a plot mark's data carries, or `null` for any other node. */\nexport function plotMarkOf(node: { data: unknown } | undefined): PlotMarkTrait | null {\n const mark = (node?.data as { plotMark?: PlotMarkTrait } | null | undefined)?.plotMark;\n return mark !== undefined && mark !== null && typeof mark.kind === 'string' ? mark : null;\n}\n\n/** The id of the mark keyed `key` under the root `rootId`. */\nexport const plotMarkId = (rootId: string, key: string): string => `${rootId}/${key}`;\n\n/** `marks` as children of the root `rootId`, in its frame. */\nexport function markSpecs<TLayer extends string>(rootId: string, layer: TLayer, marks: readonly PlotMark[]): PlotSpec<TLayer>[] {\n return marks.map((m) => ({\n kind: 'mark', id: plotMarkId(rootId, m.key) as NodeId, parent: rootId as NodeId, layer,\n pose: { x: m.pose.x, y: m.pose.y, width: m.pose.width, height: m.pose.height, ...(m.pose.rotation ? { rotation: m.pose.rotation } : {}) },\n data: m.data,\n }));\n}\n\n/** The nodes a plot of `data` is: its root, a group filling `box`, then each mark under it, in drawing order. */\nexport function plotSpecs<TLayer extends string = 'main'>(data: PlotData, opts: PlotSpecsOptions<TLayer>): PlotSpec<TLayer>[] {\n const id = opts.id ?? 'plot';\n const layer = (opts.layer ?? 'main') as TLayer;\n const theme = opts.theme ?? PLOT_THEME;\n const { x, y, width, height } = opts.box;\n const marks = compilePlot(data, { width, height }, theme, opts.measure ?? textMeasure);\n const root: PlotSpec<TLayer> = { kind: 'group', id: id as NodeId, layer, pose: { x, y, width, height }, data: { plot: { data, theme } } };\n return [root, ...markSpecs(id, layer, marks)];\n}\n\n/** Options for {@link replacePlotData}. */\nexport interface ReplacePlotOptions {\n /** The undo entry's label. Default `'Edit chart'`. */\n label?: string;\n /** Draw in this theme from now on. Default the one the root keeps. */\n theme?: PlotTheme;\n /** Default {@link textMeasure}. */\n measure?: PlotMeasure;\n}\n\ntype AnyScene = Scene<unknown, string, unknown>;\n\n/** The plot root `rootId`'s trait. Throws when `rootId` is not one. */\nfunction rootTrait(scene: AnyScene, rootId: string): { node: NonNullable<ReturnType<AnyScene['get']>>; trait: PlotRootTrait } {\n const node = scene.get(rootId as NodeId);\n const trait = plotRootOf(node);\n if (node === undefined || trait === null) throw new Error(`replacePlotData: \"${rootId}\" is not a plot root`);\n return { node, trait };\n}\n\n/** Replaces the spec of the plot rooted at `rootId` with `data` and rebuilds its marks, as one undo entry. */\nexport function replacePlotData<TData, TLayer extends string, TPose>(\n scene: Scene<TData, TLayer, TPose>, rootId: string, data: PlotData, opts: ReplacePlotOptions = {},\n): void {\n const s = scene as unknown as AnyScene;\n const { node, trait } = rootTrait(s, rootId);\n const theme = opts.theme ?? trait.theme;\n const pose = node.pose as RectPose;\n const marks = compilePlot(data, { width: pose.width, height: pose.height }, theme, opts.measure ?? textMeasure);\n s.batch(opts.label ?? 'Edit chart', () => {\n s.update(node.id, { data: { ...(node.data as object), plot: { data, theme } } });\n const children = s.childrenOf(node.id);\n if (children.length > 0) s.removeMany(children);\n for (const spec of markSpecs(rootId, node.layer, marks)) s.add(spec as never);\n });\n}\n\n/** The id of the plot root `id` is, or is a mark of; `null` for a node outside every plot. */\nexport function plotRootContaining(scene: Scene<unknown, string, unknown>, id: string): NodeId | null {\n const node = scene.get(id as NodeId);\n if (node === undefined) return null;\n if (plotRootOf(node) !== null) return node.id;\n const parent = plotMarkOf(node) !== null ? node.parent : null;\n return parent !== null && parent !== undefined && plotRootOf(scene.get(parent)) !== null ? parent : null;\n}\n\n/** Every plot root in `scene`, in render order. */\nexport function plotRootsIn(scene: Scene<unknown, string, unknown>): NodeId[] {\n return scene.renderOrderNodes().filter((n) => plotRootOf(n) !== null).map((n) => n.id);\n}\n","/** Dragging a gantt's tasks to move them or change how long they run, and editing its text in place. */\nimport { withTitle } from '../chartTitle';\nimport type { PlotEditor } from '../editing/editors';\nimport type { PlotDatum } from '../marks/types';\nimport { compileGantt } from './compile';\nimport { moveGanttTask, setGanttEnd, setGanttSectionName, setGanttTaskName, snapGantt } from './edit';\nimport type { GanttData } from './types';\n\n/** The task a mark stands for, or `null` for a mark that stands for none the chart holds. */\nfunction taskOf(data: GanttData, datum: PlotDatum | undefined): { section: number; task: number } | null {\n const { section, task } = datum ?? {};\n if (typeof section !== 'number' || typeof task !== 'number') return null;\n return data.sections[section]?.tasks[task] !== undefined ? { section, task } : null;\n}\n\nfunction setText(data: GanttData, datum: PlotDatum, text: string): GanttData {\n if (datum.edit === 'title') return withTitle(data, text);\n if (datum.edit === 'section' && typeof datum.section === 'number' && data.sections[datum.section] !== undefined) {\n return setGanttSectionName(data, datum.section, text);\n }\n const at = datum.edit === 'task' ? taskOf(data, datum) : null;\n return at === null ? data : setGanttTaskName(data, at.section, at.task, text);\n}\n\n/**\n * A task's bar takes a press anywhere in it, and a drag moves its start; a handle on its right edge changes its end.\n * A milestone's diamond only moves.\n */\nexport const ganttEditor: PlotEditor<GanttData> = {\n handle(data, { trait, pose }) {\n if ((trait.kind !== 'span' && trait.kind !== 'area') || taskOf(data, trait.datum) === null) return null;\n const cy = pose.y + pose.height / 2;\n if (trait.kind === 'area') return { at: { x: pose.x + pose.width / 2, y: cy }, cursor: 'move', part: 'move', box: pose };\n return [\n { at: { x: pose.x, y: cy }, cursor: 'move', part: 'move', box: pose },\n { at: { x: pose.x + pose.width, y: cy }, cursor: 'ew-resize', part: 'end' },\n ];\n },\n drag(data, trait, size, theme, measure, part) {\n const at = taskOf(data, trait.datum);\n if (at === null || (part !== 'move' && part !== 'end')) return null;\n const { layout } = compileGantt(data, size, theme, measure);\n const instant = (x: number) => snapGantt(layout.time.invert(x), layout.snap);\n if (part === 'move') return (p) => moveGanttTask(data, at.section, at.task, instant(p.x));\n // A duration rounds to its own unit, which may be finer than the snap.\n const snaps = data.sections[at.section]!.tasks[at.task]!.end.kind === 'date';\n return (p) => setGanttEnd(data, at.section, at.task, snaps ? instant(p.x) : layout.time.invert(p.x));\n },\n text: setText,\n};\n","/** A gitgraph's title and tags, edited in place. */\nimport { withTitle } from '../chartTitle';\nimport type { PlotEditor } from '../editing/editors';\nimport { setGitTag } from './edit';\nimport type { GitGraphData } from './types';\n\n/** Nothing is dragged; a commit's tag is edited in place. */\nexport const gitgraphEditor: PlotEditor<GitGraphData> = {\n handle: () => null,\n drag: () => null,\n text(data, datum, text) {\n if (datum.edit === 'title') return withTitle(data, text);\n if (datum.edit === 'tag' && typeof datum.command === 'number') return setGitTag(data, datum.command, text);\n return data;\n },\n};\n","/** Dragging a journey's scores, and editing its text in place. */\nimport { withTitle } from '../chartTitle';\nimport type { PlotEditor } from '../editing/editors';\nimport { compileJourney } from './compile';\nimport { journeyScoreAt, setJourneyScore, setJourneySectionName, setJourneyTaskName } from './edit';\nimport type { JourneyData } from './types';\n\nconst stepOf = (data: JourneyData, datum: unknown): { section: number; task: number } | null => {\n const d = datum as { section?: unknown; task?: unknown } | undefined;\n if (typeof d?.section !== 'number' || typeof d.task !== 'number') return null;\n return data.sections[d.section]?.tasks[d.task] !== undefined ? { section: d.section, task: d.task } : null;\n};\n\n/** A step's dot takes a press, and a drag sets its score to the whole number under the pointer; the title, section\n * names and step names take a text edit. */\nexport const journeyEditor: PlotEditor<JourneyData> = {\n handle(data, { trait, pose }) {\n if (trait.kind !== 'point' || trait.datum?.actor !== undefined || stepOf(data, trait.datum) === null) return null;\n return { at: { x: pose.x + pose.width / 2, y: pose.y + pose.height / 2 }, cursor: 'ns-resize' };\n },\n drag(data, trait, size, theme, measure) {\n const step = stepOf(data, trait.datum);\n if (step === null || trait.datum?.actor !== undefined) return null;\n const { layout } = compileJourney(data, size, theme, measure);\n return (at) => setJourneyScore(data, step.section, step.task, journeyScoreAt(layout, at));\n },\n text(data, datum, text) {\n const t = text.trim();\n if (datum.edit === 'title') return withTitle(data, text);\n if (datum.edit === 'section' && typeof datum.section === 'number' && data.sections[datum.section] !== undefined && t !== '') {\n return setJourneySectionName(data, datum.section, t);\n }\n const step = datum.edit === 'task' ? stepOf(data, datum) : null;\n return step === null || t === '' ? data : setJourneyTaskName(data, step.section, step.task, t);\n },\n};\n","/** A packet's edits: its title and field labels, each typed in place. */\nimport { withTitle } from '../chartTitle';\nimport type { PlotEditor } from '../editing/editors';\nimport { setPacketLabel } from './edit';\nimport type { PacketData } from './types';\n\n/** No drags; the title and each field's label take a text edit. */\nexport const packetEditor: PlotEditor<PacketData> = {\n handle: () => null,\n drag: () => null,\n text(data, datum, text) {\n if (datum.edit === 'title') return withTitle(data, text);\n const label = text.trim();\n const field = datum.field;\n if (datum.edit !== 'label' || typeof field !== 'number' || data.fields[field] === undefined || label === '') return data;\n return setPacketLabel(data, field, label);\n },\n};\n","/** A pie's edits: its title, slice labels and values, each typed in place. */\nimport { withTitle } from '../chartTitle';\nimport type { PlotEditor } from '../editing/editors';\nimport { pieValueOf, setPieLabel, setPieValue } from './edit';\nimport type { PieData } from './types';\n\n/** No drags; the title, a slice's label and, with `showData`, its value take a text edit. */\nexport const pieEditor: PlotEditor<PieData> = {\n handle: () => null,\n drag: () => null,\n text(data, datum, text) {\n if (datum.edit === 'title') return withTitle(data, text);\n const slice = datum.slice;\n if (typeof slice !== 'number' || data.slices[slice] === undefined) return data;\n if (datum.edit === 'label') {\n const label = text.trim();\n return label === '' ? data : setPieLabel(data, slice, label);\n }\n if (datum.edit === 'value') {\n const value = pieValueOf(text);\n return value === null ? data : setPieValue(data, slice, value);\n }\n return data;\n },\n};\n","/** Dragging a quadrant chart's points, and editing its text in place. */\nimport { withTitle } from '../chartTitle';\nimport type { PlotEditor } from '../editing/editors';\nimport { compileQuadrant, quadrantValueAt } from './compile';\nimport { setQuadrantAxisLabel, setQuadrantLabel, setQuadrantPoint, setQuadrantPointName } from './edit';\nimport type { QuadrantData } from './types';\n\nconst pointOf = (data: QuadrantData, datum: unknown): number | null => {\n const p = (datum as { point?: unknown } | undefined)?.point;\n return typeof p === 'number' && data.points[p] !== undefined ? p : null;\n};\n\n/** A point takes a press and moves with the pointer; the title, axis labels, quadrant labels and point names take a text edit. */\nexport const quadrantEditor: PlotEditor<QuadrantData> = {\n handle(data, { trait, pose }) {\n if (trait.kind !== 'point' || pointOf(data, trait.datum) === null) return null;\n return { at: { x: pose.x + pose.width / 2, y: pose.y + pose.height / 2 }, cursor: 'move' };\n },\n drag(data, trait, size, theme, measure) {\n const point = pointOf(data, trait.datum);\n if (point === null) return null;\n const { layout } = compileQuadrant(data, size, theme, measure);\n return (at) => setQuadrantPoint(data, point, quadrantValueAt(layout, at));\n },\n text(data, datum, text) {\n const t = text.trim();\n switch (datum.edit) {\n case 'title': return withTitle(data, text);\n case 'axis':\n return (datum.axis === 'x' || datum.axis === 'y') && (datum.end === 'low' || datum.end === 'high')\n ? setQuadrantAxisLabel(data, datum.axis, datum.end, t) : data;\n case 'quadrant':\n return typeof datum.quadrant === 'number' && [1, 2, 3, 4].includes(datum.quadrant) ? setQuadrantLabel(data, datum.quadrant, t) : data;\n case 'point': {\n const point = pointOf(data, datum);\n return point === null || t === '' ? data : setQuadrantPointName(data, point, t);\n }\n default: return data;\n }\n },\n};\n","/** Dragging a radar's points along their axes, and its title and labels edited in place. */\nimport { withTitle } from '../chartTitle';\nimport type { PlotEditor } from '../editing/editors';\nimport { compileRadar } from './compile';\nimport { radarValueAt, setRadarAxisLabel, setRadarCurveLabel, setRadarValue } from './edit';\nimport type { RadarData } from './types';\n\nconst curveAxis = (datum: unknown): { curve: number; axis: number } | null => {\n const d = datum as { curve?: unknown; axis?: unknown } | undefined;\n return typeof d?.curve === 'number' && typeof d.axis === 'number' ? { curve: d.curve, axis: d.axis } : null;\n};\n\n/** Each curve's points take a press; a drag moves the value along its axis. */\nexport const radarEditor: PlotEditor<RadarData> = {\n handle(_data, { trait, pose }) {\n if (trait.kind !== 'point' || curveAxis(trait.datum) === null) return null;\n return { at: { x: pose.x + pose.width / 2, y: pose.y + pose.height / 2 }, cursor: 'move' };\n },\n drag(data, trait, size, theme, measure) {\n const which = curveAxis(trait.datum);\n if (which === null) return null;\n const { layout } = compileRadar(data, size, theme, measure);\n return (at) => setRadarValue(data, which.curve, which.axis, radarValueAt(layout, which.axis, at));\n },\n text(data, datum, text) {\n if (datum.edit === 'title') return withTitle(data, text);\n if (datum.edit === 'axis' && typeof datum.axis === 'number') return setRadarAxisLabel(data, datum.axis, text);\n if (datum.edit === 'curve' && typeof datum.curve === 'number') return setRadarCurveLabel(data, datum.curve, text);\n return data;\n },\n};\n","/** A sankey's title, link values and node labels, edited in place. */\nimport { withTitle } from '../chartTitle';\nimport type { PlotEditor } from '../editing/editors';\nimport { renameSankeyNode, setSankeyValue } from './edit';\nimport { sankeyNodes } from './layout';\nimport type { SankeyData } from './types';\n\n/** `text` as a flow: a number not below zero, or `null`. */\nconst flowOf = (text: string): number | null => {\n const t = text.trim();\n const v = Number(t);\n return t !== '' && Number.isFinite(v) && v >= 0 ? v : null;\n};\n\n/** Nothing is dragged; a link's value sets its flow, and a node's label renames it in every link. */\nexport const sankeyEditor: PlotEditor<SankeyData> = {\n handle: () => null,\n drag: () => null,\n text(data, datum, text) {\n if (datum.edit === 'title') return withTitle(data, text);\n if (datum.edit === 'value' && typeof datum.link === 'number') {\n const v = flowOf(text);\n return v === null ? data : setSankeyValue(data, datum.link, v);\n }\n if (datum.edit === 'node' && typeof datum.node === 'string') {\n const name = text.trim();\n return name === '' || name === datum.node || sankeyNodes(data).includes(name) ? data : renameSankeyNode(data, datum.node, name);\n }\n return data;\n },\n};\n","/** Dragging a timeline's periods to reorder them, and editing its text in place. */\nimport { withTitle } from '../chartTitle';\nimport type { PlotEditor } from '../editing/editors';\nimport type { PlotDatum } from '../marks/types';\nimport { compileTimeline, timelineSlotAt } from './compile';\nimport { moveTimelinePeriod, setTimelineEvent, setTimelinePeriodLabel, setTimelineSectionName, timelinePeriodAt } from './edit';\nimport type { TimelineData } from './types';\n\n/** The flat period index a period's box stands for, or `null` for any other mark. */\nconst periodOf = (datum: PlotDatum | undefined): number | null =>\n typeof datum?.period === 'number' && datum.event === undefined ? datum.period : null;\n\nconst numberOf = (v: unknown): number | null => (typeof v === 'number' ? v : null);\n\n/** The text a datum names set to `text`; `data` itself for a datum naming nothing the timeline holds. */\nfunction setText(data: TimelineData, datum: PlotDatum, text: string): TimelineData {\n const section = numberOf(datum.section);\n const period = numberOf(datum.period);\n const event = numberOf(datum.event);\n switch (datum.edit) {\n case 'title': return withTitle(data, text);\n case 'section': return section !== null && data.sections[section] !== undefined ? setTimelineSectionName(data, section, text) : data;\n case 'period': return period !== null && timelinePeriodAt(data, period) !== null ? setTimelinePeriodLabel(data, period, text) : data;\n case 'event': {\n const at = period === null ? null : timelinePeriodAt(data, period);\n const held = at !== null && event !== null && event >= 0 && event < data.sections[at.section]!.periods[at.index]!.events.length;\n return held ? setTimelineEvent(data, period!, event, text) : data;\n }\n default: return data;\n }\n}\n\n/** A period's box takes a press anywhere in it; a drag along x moves the period to the slot nearest the pointer. */\nexport const timelineEditor: PlotEditor<TimelineData> = {\n handle(_data, { trait, pose }) {\n if (trait.kind !== 'span' || periodOf(trait.datum) === null) return null;\n return { at: { x: pose.x + pose.width / 2, y: pose.y + pose.height / 2 }, cursor: 'ew-resize', box: pose };\n },\n drag(data, trait, size, theme, measure) {\n const from = periodOf(trait.datum);\n if (from === null || timelinePeriodAt(data, from) === null) return null;\n const { layout } = compileTimeline(data, size, theme, measure);\n return (at) => {\n const to = timelineSlotAt(layout, at.x);\n return to < 0 ? data : moveTimelinePeriod(data, from, to);\n };\n },\n text: setText,\n};\n","/** Dragging an xychart's bar ends and line points to change their values. */\nimport { withTitle } from '../chartTitle';\nimport type { PlotEditor } from '../editing/editors';\nimport { compileXyChart } from './compile';\nimport { setXyValue, xyValueAt } from './edit';\nimport type { XyChartData } from './types';\n\nconst seriesIndex = (datum: unknown): { series: number; index: number } | null => {\n const d = datum as { series?: unknown; index?: unknown } | undefined;\n return typeof d?.series === 'number' && typeof d.index === 'number' ? { series: d.series, index: d.index } : null;\n};\n\n/** A bar's value end and a line's points take a press; a drag moves the value along the value axis. */\nexport const xyEditor: PlotEditor<XyChartData> = {\n handle(data, { trait, pose }) {\n if ((trait.kind !== 'bar' && trait.kind !== 'point') || seriesIndex(trait.datum) === null) return null;\n const vertical = data.orientation !== 'horizontal';\n const cursor = vertical ? 'ns-resize' : 'ew-resize';\n const cx = pose.x + pose.width / 2;\n const cy = pose.y + pose.height / 2;\n if (trait.kind === 'point') return { at: { x: cx, y: cy }, cursor };\n const up = Number(trait.datum?.value ?? 0) >= 0;\n return vertical\n ? { at: { x: cx, y: up ? pose.y : pose.y + pose.height }, cursor }\n : { at: { x: up ? pose.x + pose.width : pose.x, y: cy }, cursor };\n },\n drag(data, trait, size, theme, measure) {\n const which = seriesIndex(trait.datum);\n if (which === null) return null;\n const { layout } = compileXyChart(data, size, theme, measure);\n return (at) => setXyValue(data, which.series, which.index, xyValueAt(layout, at));\n },\n text: (data, datum, text) => (datum.edit === 'title' ? withTitle(data, text) : data),\n};\n","/** What each chart kind lets a drag or a text edit change: which marks carry a handle, and the spec an edit proposes. */\nimport { ganttEditor } from '../gantt/editor';\nimport { gitgraphEditor } from '../gitgraph/editor';\nimport { journeyEditor } from '../journey/editor';\nimport type { PlotBox, PlotDatum, PlotMarkTrait, PlotPoint } from '../marks/types';\nimport type { PlotMeasure } from '../measure';\nimport { packetEditor } from '../packet/editor';\nimport { pieEditor } from '../pie/editor';\nimport type { PlotData, PlotKind } from '../plotData';\nimport { quadrantEditor } from '../quadrant/editor';\nimport { radarEditor } from '../radar/editor';\nimport { sankeyEditor } from '../sankey/editor';\nimport type { PlotTheme } from '../theme';\nimport { timelineEditor } from '../timeline/editor';\nimport { xyEditor } from '../xychart/editor';\n\n/** A handle a press can take: where it stands in the plot's coordinates, and the cursor over it. */\nexport interface PlotHandle {\n at: PlotPoint;\n cursor: 'ns-resize' | 'ew-resize' | 'move';\n /** Which of a mark's handles this is, handed back to {@link PlotEditor.drag}; for a mark with more than one. */\n part?: string;\n /** Takes a press anywhere in this box, in the plot's coordinates, rather than near `at`. */\n box?: PlotBox;\n}\n\n/** One chart kind's edits. */\nexport interface PlotEditor<D extends PlotData> {\n /** The handles on a mark, or `null` for a mark a drag does not edit. */\n handle(data: D, mark: { trait: PlotMarkTrait; pose: PlotBox }): PlotHandle | readonly PlotHandle[] | null;\n /** A drag that took the handle `part` on `mark`: the spec it proposes with the pointer at a point in the plot's\n * coordinates. `null` when the mark has nothing to edit. */\n drag(\n data: D, mark: PlotMarkTrait, size: { width: number; height: number }, theme: PlotTheme, measure: PlotMeasure, part?: string,\n ): ((at: PlotPoint) => D) | null;\n /** The spec with the text a text mark of `datum` stands for set to `text`; `data` itself when that changes\n * nothing or `text` does not read (a value that is not a number). Absent for a kind with no text edits. */\n text?(data: D, datum: PlotDatum, text: string): D;\n}\n\nconst EDITORS: { readonly [K in PlotKind]?: PlotEditor<Extract<PlotData, { kind: K }>> } = {\n xychart: xyEditor,\n gantt: ganttEditor,\n timeline: timelineEditor,\n pie: pieEditor,\n quadrant: quadrantEditor,\n journey: journeyEditor,\n gitgraph: gitgraphEditor,\n sankey: sankeyEditor,\n packet: packetEditor,\n radar: radarEditor,\n};\n\n/** The edits `data`'s kind allows, or `null` for a kind with none. */\nexport const plotEditorOf = (data: PlotData): PlotEditor<PlotData> | null =>\n (EDITORS[data.kind] as PlotEditor<PlotData> | undefined) ?? null;\n\n/** A handle list as an array, whatever {@link PlotEditor.handle} returned. */\nexport const handlesOf = (h: PlotHandle | readonly PlotHandle[] | null): readonly PlotHandle[] =>\n h === null ? [] : Array.isArray(h) ? h : [h as PlotHandle];\n","/**\n * Editing a chart's text in place, through a canvas's own text editor: a text\n * mark whose datum names an `edit` is the spec's text, and closing the editor\n * folds what was typed into one edit of the spec.\n */\nimport { isTextData, useLatest, type NodeId, type RectPose, type Scene, type SceneCanvasTextEditor } from '@weasel-js/core';\nimport { useMemo } from 'react';\nimport type { PlotDatum } from '../marks/types';\nimport { textMeasure } from '../measure';\nimport { compilePlot } from '../plotData';\nimport { plotMarkOf, plotRootOf } from '../plotScene';\nimport type { PlotEdit } from './dragAction';\nimport { plotEditorOf } from './editors';\n\ntype AnyScene = Scene<unknown, string, unknown>;\n\n/** The datum of a text mark an edit can set: one naming what it edits under `edit`, or `null` for any other node. */\nexport function plotTextOf(node: { data: unknown } | undefined): PlotDatum | null {\n const mark = plotMarkOf(node);\n return mark?.kind === 'text' && typeof mark.datum?.edit === 'string' ? mark.datum : null;\n}\n\n/** The text the spec gives mark `markId`, as compiled: what it showed before an edit. */\nfunction compiledText(scene: AnyScene, rootId: string, markId: string): string | undefined {\n const root = scene.get(rootId as NodeId)!;\n const trait = plotRootOf(root)!;\n const { width, height } = root.pose as RectPose;\n const key = markId.slice(rootId.length + 1);\n return compilePlot(trait.data, { width, height }, trait.theme, textMeasure).find((m) => m.key === key)?.data.text;\n}\n\n/** Whether `data` is a chart's text an edit can set. */\nexport const isPlotText = (data: unknown): boolean => isTextData(data) && plotTextOf({ data }) !== null;\n\n/**\n * Folds a text edit just written to one of a chart's text marks into its\n * root's spec: the edit is undone and `commit` gets the spec with the new\n * text, so the change is one entry on the spec, not a mark the next compile\n * would overwrite. Does nothing for any other node, or text that changes\n * nothing. Text that does not read (a value that is not a number) is undone,\n * so the mark shows the spec again.\n */\nexport function foldPlotText(scene: AnyScene, textId: string, commit: (edit: PlotEdit & { label: string }) => void): void {\n const node = scene.get(textId as NodeId);\n const datum = plotTextOf(node);\n const rootId = datum === null ? null : node!.parent;\n const trait = rootId === null ? null : plotRootOf(scene.get(rootId));\n const editor = trait === null ? null : plotEditorOf(trait.data);\n const text = (node?.data as { text?: unknown } | undefined)?.text;\n if (datum === null || trait === null || editor?.text === undefined || typeof text !== 'string') return;\n const next = editor.text(trait.data, datum, text);\n if (next === trait.data) {\n if (text !== compiledText(scene, rootId as string, textId)) scene.undo();\n return;\n }\n scene.undo();\n commit({ rootId: rootId as string, data: next, label: 'Edit text' });\n}\n\n/**\n * The `<SceneCanvas textEditor>` options that open on a chart's text and, as\n * the edit closes, fold it into one edit of the spec for `commit`.\n */\nexport function usePlotTextEdit(\n scene: AnyScene, commit: (edit: PlotEdit & { label: string }) => void,\n): Exclude<SceneCanvasTextEditor<unknown>, false> {\n const latest = useLatest(commit);\n return useMemo(() => ({\n isText: isPlotText,\n onEnd: (id: string) => foldPlotText(scene, id, (edit) => latest.current(edit)),\n }), [scene, latest]);\n}\n","/**\n * What makes a plot's editable marks grabbable: a hit-only point region at\n * each handle its kind's editor names, composed into a layer whose id is the\n * kind a press reports.\n */\nimport {\n composeAffordanceLayer, composeWorldPose, scenePoseAdapter,\n type Affordance, type AffordanceRegion, type RectPose, type RenderLayer, type Scene,\n} from '@weasel-js/core';\nimport type { PlotPoint } from '../marks/types';\nimport { plotMarkOf, plotRootOf, plotRootsIn } from '../plotScene';\nimport { handlesOf, plotEditorOf, type PlotHandle } from './editors';\n\n/** The layer id the handles are composed into. */\nexport const PLOT_HANDLE_LAYER_ID = 'plot-handles';\n\n/** The affordance kind a press on a handle reports. */\nexport const PLOT_HANDLE_AFFORDANCE_KIND = `layer:${PLOT_HANDLE_LAYER_ID}` as const;\n\n/** What a press on a handle hands the drag, as the hit's `payload`. */\nexport interface PlotHandleScratch {\n rootId: string;\n markId: string;\n /** The handle, in world coordinates. */\n at: PlotPoint;\n /** Which of the mark's handles, for a mark with more than one. */\n part?: string;\n}\n\n/** A press's scratch, read back off the hit an action was handed. */\nexport function plotHandleScratchOf(hit: { payload?: unknown } | null | undefined): PlotHandleScratch | null {\n const p = hit?.payload as PlotHandleScratch | undefined;\n return p !== undefined && typeof p.rootId === 'string' && typeof p.markId === 'string' ? p : null;\n}\n\ntype AnyScene = Scene<unknown, string, unknown>;\n\n/** Where the plot root `rootId`'s corner stands in world coordinates. */\nexport function plotOrigin(scene: AnyScene, rootId: string): PlotPoint {\n const pose = composeWorldPose(scenePoseAdapter(scene as never), rootId, scene.composition.compose as never) as RectPose;\n return { x: pose.x, y: pose.y };\n}\n\n/** Every handle in `scene` an edit may take, in world coordinates, in render order. */\nexport function* plotHandles(scene: AnyScene): Iterable<PlotHandleScratch & PlotHandle> {\n for (const rootId of plotRootsIn(scene)) {\n const root = scene.get(rootId);\n const trait = plotRootOf(root);\n const editor = trait && plotEditorOf(trait.data);\n if (trait === null || editor === null || scene.isLocked(rootId) || scene.isHidden(rootId)) continue;\n const origin = plotOrigin(scene, rootId);\n for (const id of scene.childrenOf(rootId)) {\n const node = scene.get(id);\n const mark = plotMarkOf(node);\n if (node === undefined || mark === null) continue;\n for (const handle of handlesOf(editor.handle(trait.data, { trait: mark, pose: node.pose as RectPose }))) {\n const { box, part } = handle;\n yield {\n rootId, markId: id, cursor: handle.cursor, at: { x: origin.x + handle.at.x, y: origin.y + handle.at.y },\n ...(part !== undefined ? { part } : {}),\n ...(box !== undefined ? { box: { x: origin.x + box.x, y: origin.y + box.y, width: box.width, height: box.height } } : {}),\n };\n }\n }\n }\n}\n\nconst HIT_RADIUS_PX = 6;\n\nfunction handleAffordance(scene: AnyScene): Affordance {\n // Boxes first, so a point handle inside one wins a press at an equal distance.\n const regions = (): AffordanceRegion[] => [...plotHandles(scene)]\n .sort((a, b) => Number(b.box !== undefined) - Number(a.box !== undefined))\n .map(({ rootId, markId, at, cursor, part, box }) => ({\n id: part === undefined ? markId : `${markId}#${part}`,\n targetId: null,\n shape: box !== undefined ? { kind: 'rect', ...box } : { kind: 'point', x: at.x, y: at.y, hitRadiusPx: HIT_RADIUS_PX },\n cursor,\n strength: 'exclusive',\n claimedKinds: ['pointer'],\n bind: () => ({ initialScratch: { rootId, markId, at, ...(part !== undefined ? { part } : {}) } satisfies PlotHandleScratch }),\n }));\n return { id: PLOT_HANDLE_LAYER_ID, regions, regionsAt: regions };\n}\n\n/** The handle layer, for `CanvasExtensionApi.registerLayer`. */\nexport function plotHandleLayer(scene: Scene<unknown, string, unknown>): RenderLayer<unknown> {\n return composeAffordanceLayer(PLOT_HANDLE_LAYER_ID, 'Plot handles', [handleAffordance(scene)]) as unknown as RenderLayer<unknown>;\n}\n","/**\n * Dragging a plot's handle to edit the value behind it. The handle layer\n * claims the press; this action previews every mark the proposed spec\n * redraws, and commits the spec as one edit of the plot's root.\n */\nimport type { Action, InvocationCtx, NodeId, OngoingHandle, RectPose, Scene } from '@weasel-js/core';\nimport type { PlotPoint } from '../marks/types';\nimport { textMeasure, type PlotMeasure } from '../measure';\nimport { compilePlot, type PlotData } from '../plotData';\nimport { markSpecs, plotMarkOf, plotRootOf, replacePlotData, type PlotSpec } from '../plotScene';\nimport { plotEditorOf } from './editors';\nimport { plotHandleScratchOf, plotOrigin } from './handleLayer';\n\n/** The action that drags a plot's handle. */\nexport const PLOT_DRAG_ACTION_ID = 'plot.dragValue';\n\n/** A plot edited: the root, and the spec it now holds. */\nexport interface PlotEdit {\n rootId: string;\n data: PlotData;\n}\n\n/** Options for {@link createPlotDragAction}. */\nexport interface PlotDragOptions {\n id?: string;\n /** Default {@link textMeasure}. */\n measure?: PlotMeasure;\n /** Defaults to {@link replacePlotData} against `deps.scene`, labeled \"Edit value\". */\n commit?: (edit: PlotEdit, ctx: InvocationCtx) => void;\n}\n\ntype AnyScene = Scene<unknown, string, unknown>;\n\n/** What a drag captured at its press, read-only after. */\ninterface PlotPress {\n rootId: string;\n /** The spec the pointer at a point in the plot's coordinates proposes. */\n propose: (at: PlotPoint) => PlotData;\n /** From the world to the plot's coordinates, the grab offset included. */\n toPlot: (world: PlotPoint) => PlotPoint;\n redraw: (data: PlotData) => PlotSpec<string>[];\n deps: InvocationCtx['deps'];\n}\n\nfunction pressOf(ctx: InvocationCtx, measure: PlotMeasure): PlotPress | null {\n const pressed = plotHandleScratchOf(ctx.drag?.affordance);\n const scene = ctx.deps.scene as AnyScene | undefined;\n const root = pressed === null ? undefined : scene?.get(pressed.rootId as NodeId);\n const trait = plotRootOf(root);\n const mark = plotMarkOf(pressed === null ? undefined : scene?.get(pressed.markId as NodeId));\n const editor = trait && plotEditorOf(trait.data);\n if (pressed === null || scene === undefined || root === undefined || trait === null || mark === null || editor === null) return null;\n const size = { width: (root.pose as RectPose).width, height: (root.pose as RectPose).height };\n const propose = editor.drag(trait.data, mark, size, trait.theme, measure, pressed.part);\n if (propose === null) return null;\n const origin = plotOrigin(scene, pressed.rootId);\n const start = ctx.drag?.start ?? ctx.world;\n const grab = { x: pressed.at.x - start.x, y: pressed.at.y - start.y };\n return {\n rootId: pressed.rootId,\n propose,\n toPlot: (w) => ({ x: w.x + grab.x - origin.x, y: w.y + grab.y - origin.y }),\n redraw: (data) => markSpecs(pressed.rootId, root.layer, compilePlot(data, size, trait.theme, measure)),\n deps: ctx.deps,\n };\n}\n\n/** The default commit: the spec into the root, its marks rebuilt, as one history entry, \"Edit value\". */\nexport function commitPlotToScene(edit: PlotEdit, ctx: InvocationCtx, measure: PlotMeasure = textMeasure): void {\n const scene = ctx.deps.scene as AnyScene | undefined;\n if (scene === undefined || plotRootOf(scene.get(edit.rootId as NodeId)) === null) return;\n replacePlotData(scene, edit.rootId, edit.data, { label: 'Edit value', measure });\n}\n\n/** The `plot.dragValue` action: an ongoing drag that moves one value of a plot, previewing the marks it redraws. */\nexport function createPlotDragAction(opts: PlotDragOptions = {}): Action {\n const measure = opts.measure ?? textMeasure;\n const commit = opts.commit ?? ((edit: PlotEdit, ctx: InvocationCtx) => commitPlotToScene(edit, ctx, measure));\n return {\n id: opts.id ?? PLOT_DRAG_ACTION_ID,\n label: 'Edit value',\n group: 'plot',\n requires: ['scene'],\n eligible: { mode: 'normal' },\n invoker: {\n timing: 'ongoing',\n start(ctx: InvocationCtx): OngoingHandle {\n const p = pressOf(ctx, measure);\n if (p === null) return {};\n // Null until the pointer moves, so a still click commits nothing.\n let next: PlotData | null = null;\n let shown = new Map<string, PlotSpec<string>>();\n let open = true;\n const scene = ctx.deps.scene as AnyScene;\n const previewing = () => (open && next !== null ? shown : null);\n return {\n kind: 'plot-drag-value',\n onMove(moveCtx: InvocationCtx): void {\n next = p.propose(p.toPlot(moveCtx.world));\n shown = new Map(p.redraw(next).map((spec) => [spec.id as string, spec]));\n },\n previewIds: () => {\n const specs = previewing();\n return specs === null ? null : [...specs.keys()].filter((id) => scene.get(id as NodeId) !== undefined);\n },\n previewPose: (id) => previewing()?.get(id)?.pose ?? null,\n previewData: (id) => previewing()?.get(id)?.data ?? null,\n onEnd(endCtx: InvocationCtx, reason: 'commit' | 'cancel'): void {\n open = false;\n if (reason !== 'commit' || next === null) return;\n commit({ rootId: p.rootId, data: p.propose(p.toPlot(endCtx.world)) }, { ...endCtx, deps: p.deps });\n },\n };\n },\n },\n enabled: () => true as const,\n };\n}\n","import type { Action, Contribution, RenderLayer, Scene } from '@weasel-js/core';\nimport { PLOT_DRAG_ACTION_ID, createPlotDragAction, type PlotDragOptions } from './dragAction';\nimport { PLOT_HANDLE_AFFORDANCE_KIND, plotHandleLayer } from './handleLayer';\n\n/** The action id that absorbs a press on a handle, so it reaches neither marquee nor pan. */\nexport const GRAB_PLOT_HANDLE_ACTION_ID = 'plot.grabHandle';\n\nconst grabHandleAction: Action = {\n id: GRAB_PLOT_HANDLE_ACTION_ID,\n label: 'Grab chart handle',\n group: 'plot',\n invoker: { timing: 'immediate', run: () => {} },\n enabled: () => true as const,\n};\n\n/**\n * Both halves of editing a scene's plots by dragging: the handle layer to\n * `registerLayer`, and the contribution to pass as `ambient`, which binds a\n * drag on a handle to `plot.dragValue`. One without the other fails quietly:\n * the layer alone claims presses that start nothing, the contribution alone\n * binds a kind nothing reports.\n */\nexport function plotEditing(\n opts: PlotDragOptions & { scene: Scene<unknown, string, unknown> },\n): { layer: RenderLayer<unknown>; contribution: Contribution } {\n const actionId = opts.id ?? PLOT_DRAG_ACTION_ID;\n const target = `affordance:${PLOT_HANDLE_AFFORDANCE_KIND}` as const;\n return {\n layer: plotHandleLayer(opts.scene),\n contribution: {\n id: 'weasel-plot-editing',\n eligibility: { claimed: true },\n actions: [createPlotDragAction({ ...opts, id: actionId }), grabHandleAction],\n bindings: [\n { spec: { kind: 'drag', target }, actionId, opts: { id: 'weasel-plot-editing.drag' } },\n { spec: { kind: 'pointerDown', target }, actionId: GRAB_PLOT_HANDLE_ACTION_ID, opts: { id: 'weasel-plot-editing.pointerDown' } },\n { spec: { kind: 'click', target }, actionId: GRAB_PLOT_HANDLE_ACTION_ID, opts: { id: 'weasel-plot-editing.click' } },\n ],\n },\n };\n}\n","import {\n SceneCanvas, WeaselProvider, useLatest, useScene, type NodeId, type Paint, type RectPose, type SceneCanvasApi,\n} from '@weasel-js/core';\nimport { useEffect, useMemo, useState, type ReactElement } from 'react';\nimport { plotEditing } from './editing/plotEditing';\nimport { usePlotTextEdit } from './editing/textEdit';\nimport type { PlotMeasure } from './measure';\nimport type { PlotData } from './plotData';\nimport { plotRootOf, plotSpecs, replacePlotData, type PlotSceneData, type PlotSpec } from './plotScene';\nimport type { PlotTheme } from './theme';\n\n/** Props for {@link PlotView}. */\nexport interface PlotViewProps {\n /** The chart. A new value redraws it, with no undo entry. */\n data: PlotData;\n /** Hears each edit a drag or a text edit commits, with the spec it leaves. Undo and redo in the view report too. */\n onChange?: (data: PlotData) => void;\n width: number;\n height: number;\n /** Default the weasel theme's dark mode. */\n theme?: PlotTheme;\n measure?: PlotMeasure;\n background?: Paint;\n className?: string;\n 'aria-label'?: string;\n}\n\nconst ROOT = 'plot';\nconst FEATURES = ['pick', 'edit'] as const;\n\n/**\n * A chart on its own canvas, edited by dragging its marks (a bar's end, a\n * line's point, a task's span) and by double-clicking its text to edit it in\n * place. Each edit is one undo entry. Text paints only\n * in a registered font family, so register the theme's (`registerCanvasFont`).\n */\nexport function PlotView(props: PlotViewProps): ReactElement {\n return (\n <WeaselProvider>\n <Inner {...props} />\n </WeaselProvider>\n );\n}\n\nfunction Inner({ data, onChange, width, height, theme, measure, background, className, 'aria-label': label }: PlotViewProps): ReactElement {\n const [initial] = useState(() => plotSpecs(data, {\n id: ROOT, box: { x: 0, y: 0, width, height }, ...(theme ? { theme } : {}), ...(measure ? { measure } : {}),\n }));\n const scene = useScene<PlotSceneData, 'main', RectPose>({ systemLayers: [{ id: 'main' }], initial: initial as PlotSpec[] });\n const changed = useLatest(onChange);\n\n // A spec from outside redraws without an undo entry; one the view reported back is already drawn.\n useEffect(() => {\n const root = scene.get(ROOT as NodeId);\n const pose = root?.pose;\n const trait = plotRootOf(root);\n const sized = pose !== undefined && pose.width === width && pose.height === height;\n if (trait === null || (trait.data === data && sized && (theme === undefined || trait.theme === theme))) return;\n scene.untracked(() => {\n if (!sized) scene.setPose(ROOT as NodeId, { x: 0, y: 0, width, height });\n replacePlotData(scene, ROOT, data, { ...(theme ? { theme } : {}), ...(measure ? { measure } : {}) });\n });\n }, [scene, data, width, height, theme, measure]);\n\n useEffect(() => {\n let last = plotRootOf(scene.get(ROOT as NodeId))?.data;\n return scene.subscribe(() => {\n const now = plotRootOf(scene.get(ROOT as NodeId))?.data;\n if (now === undefined || now === last) return;\n last = now;\n changed.current?.(now);\n });\n }, [scene, changed]);\n\n const editing = useMemo(() => plotEditing({ scene: scene as never, ...(measure ? { measure } : {}) }), [scene, measure]);\n const ambient = useMemo(() => [editing.contribution], [editing]);\n const textEditor = usePlotTextEdit(scene as never, (edit) => replacePlotData(scene, edit.rootId, edit.data, {\n label: edit.label, ...(measure ? { measure } : {}),\n }));\n const [canvas, setCanvas] = useState<SceneCanvasApi | null>(null);\n useEffect(() => (canvas === null ? undefined : canvas.registerLayer(editing.layer)), [canvas, editing]);\n\n return (\n <div className={className} data-wzl-plot=\"\">\n <SceneCanvas\n ref={setCanvas}\n scene={scene}\n features={FEATURES}\n enableKeybindings\n ambient={ambient}\n textEditor={textEditor as never}\n width={width}\n height={height}\n {...(background ? { backgroundFill: background } : {})}\n {...(label ? { 'aria-label': label } : {})}\n />\n </div>\n );\n}\n","/** What every kind's schema is built from: reading a {@link PlotValue} as the type a field holds, and the title field. */\nimport { withTitle } from '../chartTitle';\nimport type { PlotData } from '../plotData';\nimport type { PlotField, PlotValue } from './schemaTypes';\n\n/** `v` as text, or `undefined` for anything else. */\nexport const textOf = (v: PlotValue): string | undefined => (typeof v === 'string' ? v : undefined);\n\n/** `v` as a finite number, or `undefined` for anything else. */\nexport const numberOf = (v: PlotValue): number | undefined => (typeof v === 'number' && Number.isFinite(v) ? v : undefined);\n\n/** `v` as a whole number, or `undefined` for anything else. */\nexport const integerOf = (v: PlotValue): number | undefined => {\n const n = numberOf(v);\n return n !== undefined && Number.isInteger(n) ? n : undefined;\n};\n\n/** `v` when it is one of `options`, else `undefined`. */\nexport const choiceOf = <T extends string>(v: PlotValue, options: readonly T[]): T | undefined =>\n (options as readonly PlotValue[]).includes(v) ? v as T : undefined;\n\n/** A list written with commas, as its trimmed, non-empty items. */\nexport const listOf = (text: string): string[] => text.split(',').map((s) => s.trim()).filter((s) => s !== '');\n\n/** The chart's title, which every kind takes. */\nexport const titleField = <D extends PlotData>(): PlotField<D> => ({\n key: 'title',\n label: 'Title',\n type: { kind: 'string' },\n optional: true,\n get: (data) => data.title,\n set: (data, v) => (v === undefined || typeof v === 'string' ? withTitle(data, v ?? '') : data),\n});\n","/** List edits every chart kind's structural edits are built from, as plain data in and out. */\n\n/** `list` with `item` inserted before index `at`; `at` equal to the length appends. Throws on any other index. */\nexport function insertAt<T>(list: readonly T[], at: number, item: T, who: string): T[] {\n if (!Number.isInteger(at) || at < 0 || at > list.length) throw new Error(`${who}: cannot insert at ${at} in a list of ${list.length}`);\n return [...list.slice(0, at), item, ...list.slice(at)];\n}\n\n/** `list` without item `at`. Throws on an index it does not hold. */\nexport function removeAt<T>(list: readonly T[], at: number, who: string): T[] {\n if (!Number.isInteger(at) || at < 0 || at >= list.length) throw new Error(`${who}: no item ${at} in a list of ${list.length}`);\n return list.filter((_, i) => i !== at);\n}\n\n/** `list` with item `from` moved to index `to`, counted once it is taken out. Throws on an index it does not hold. */\nexport function moveAt<T>(list: readonly T[], from: number, to: number, who: string): T[] {\n const out = removeAt(list, from, who);\n if (!Number.isInteger(to) || to < 0 || to > out.length) throw new Error(`${who}: cannot move to ${to} in a list of ${list.length}`);\n out.splice(to, 0, list[from]!);\n return out;\n}\n\n/** `list` with item `at` replaced by what `change` makes of it. Throws on an index it does not hold. */\nexport function updateAt<T>(list: readonly T[], at: number, change: (item: T) => T, who: string): T[] {\n if (!Number.isInteger(at) || at < 0 || at >= list.length) throw new Error(`${who}: no item ${at} in a list of ${list.length}`);\n return list.map((x, i) => (i === at ? change(x) : x));\n}\n\n/** `base`, `sep`, and the first number from `from` up that makes a name `taken` does not hold: `Slice 3`. */\nexport function freshName(base: string, taken: Iterable<string>, from = 1, sep = ' '): string {\n const used = new Set(taken);\n let n = from;\n while (used.has(`${base}${sep}${n}`)) n++;\n return `${base}${sep}${n}`;\n}\n\n/** `obj` with `key` set to `value`, or without it when `value` is `undefined`. */\nexport function withOptional<T extends object, K extends keyof T>(obj: T, key: K, value: T[K] | undefined): T {\n const { [key]: _, ...rest } = obj;\n return (value === undefined ? rest : { ...rest, [key]: value }) as T;\n}\n","/**\n * Edits to a gantt's sections and tasks as collections, a task's every field, and the chart's settings, as plain data\n * in and out. A task taken out, or renamed, takes its id out of every `after` and `until` that named it.\n */\nimport { freshName, insertAt, moveAt, removeAt, updateAt, withOptional } from '../editing/lists';\nimport { ganttTasks } from './schedule';\nimport type { GanttData, GanttEnd, GanttSection, GanttStart, GanttTag, GanttTask } from './types';\n\nconst TAG_ORDER: readonly GanttTag[] = ['done', 'active', 'crit', 'milestone'];\n\n/** A task of one day after the task before it, under a name no task holds. */\nfunction freshTask(data: GanttData): GanttTask {\n const names = ganttTasks(data).map((t) => t.task.name);\n return { name: freshName('Task', names, names.length + 1), start: { kind: 'previous' }, end: { kind: 'duration', amount: 1, unit: 'd' } };\n}\n\n/** Every task's start and end with id `from` replaced by `to`, or (`to` absent) dropped; a dependency left naming\n * nothing follows the task before it, or lasts a day. */\nfunction renameRefs(data: GanttData, from: string, to: string | undefined): GanttData {\n const swap = (ids: readonly string[]): string[] => ids.flatMap((id) => (id !== from ? [id] : to === undefined ? [] : [to]));\n const start = (s: GanttStart): GanttStart => {\n if (s.kind !== 'after' || !s.ids.includes(from)) return s;\n const ids = swap(s.ids);\n return ids.length > 0 ? { kind: 'after', ids } : { kind: 'previous' };\n };\n const end = (e: GanttEnd): GanttEnd => {\n if (e.kind !== 'until' || !e.ids.includes(from)) return e;\n const ids = swap(e.ids);\n return ids.length > 0 ? { kind: 'until', ids } : { kind: 'duration', amount: 1, unit: 'd' };\n };\n return {\n ...data,\n sections: data.sections.map((s) => ({ ...s, tasks: s.tasks.map((t) => ({ ...t, start: start(t.start), end: end(t.end) })) })),\n };\n}\n\n/** `data` with the ids `tasks` hold taken out of every dependency. */\nconst dropRefs = (data: GanttData, tasks: readonly GanttTask[]): GanttData =>\n tasks.reduce((d, t) => (t.id === undefined ? d : renameRefs(d, t.id, undefined)), data);\n\n/** `data` with `section` inserted before section `at`; absent, a section of one fresh task under a fresh name. */\nexport function insertGanttSection(data: GanttData, at: number, section?: GanttSection): GanttData {\n const next = section ?? {\n name: freshName('Section', data.sections.flatMap((s) => (s.name === undefined ? [] : [s.name])), data.sections.length + 1),\n tasks: [freshTask(data)],\n };\n return { ...data, sections: insertAt(data.sections, at, next, 'insertGanttSection') };\n}\n\n/** `data` without section `section` and its tasks. Throws on a section it does not hold. */\nexport function removeGanttSection(data: GanttData, section: number): GanttData {\n const sections = removeAt(data.sections, section, 'removeGanttSection');\n return dropRefs({ ...data, sections }, data.sections[section]!.tasks);\n}\n\n/** `data` with section `from` moved to index `to`, counted once it is taken out. */\nexport const moveGanttSection = (data: GanttData, from: number, to: number): GanttData =>\n (from === to ? data : { ...data, sections: moveAt(data.sections, from, to, 'moveGanttSection') });\n\n/** `data` with section `section`'s tasks run through `change`. */\nconst withTasks = (data: GanttData, section: number, change: (tasks: readonly GanttTask[]) => GanttTask[], who: string): GanttData =>\n ({ ...data, sections: updateAt(data.sections, section, (s) => ({ ...s, tasks: change(s.tasks) }), who) });\n\n/** `data` with `task` inserted before task `at` of section `section`; absent, a day-long task after the one before. */\nexport const insertGanttTask = (data: GanttData, section: number, at: number, task?: GanttTask): GanttData =>\n withTasks(data, section, (tasks) => insertAt(tasks, at, task ?? freshTask(data), 'insertGanttTask'), 'insertGanttTask');\n\n/** `data` without task `task` of section `section`. Throws on a task it does not hold. */\nexport function removeGanttTask(data: GanttData, section: number, task: number): GanttData {\n const gone = data.sections[section]?.tasks[task];\n const next = withTasks(data, section, (tasks) => removeAt(tasks, task, 'removeGanttTask'), 'removeGanttTask');\n return dropRefs(next, gone === undefined ? [] : [gone]);\n}\n\n/** `data` with task `from` of section `section` moved to index `to` in it, counted once it is taken out. */\nexport const reorderGanttTask = (data: GanttData, section: number, from: number, to: number): GanttData =>\n (from === to ? data : withTasks(data, section, (tasks) => moveAt(tasks, from, to, 'reorderGanttTask'), 'reorderGanttTask'));\n\n/** `data` with task `task` of section `from` moved into section `to` before its task `at` (absent, last). Its id and\n * every dependency on it are kept. Throws on a task or section it does not hold. */\nexport function moveGanttTaskToSection(data: GanttData, from: number, task: number, to: number, at?: number): GanttData {\n const moving = data.sections[from]?.tasks[task];\n if (moving === undefined) throw new Error(`moveGanttTaskToSection: the gantt holds no task ${task} in section ${from}`);\n if (data.sections[to] === undefined) throw new Error(`moveGanttTaskToSection: the gantt holds no section ${to}`);\n if (from === to) return reorderGanttTask(data, from, task, at ?? data.sections[from]!.tasks.length - 1);\n const taken = withTasks(data, from, (tasks) => removeAt(tasks, task, 'moveGanttTaskToSection'), 'moveGanttTaskToSection');\n return withTasks(taken, to, (tasks) => insertAt(tasks, at ?? tasks.length, moving, 'moveGanttTaskToSection'), 'moveGanttTaskToSection');\n}\n\n/** `data` with one task changed by `change`; `data` itself when nothing changes. */\nfunction withTask(data: GanttData, section: number, task: number, change: (t: GanttTask) => GanttTask, who: string): GanttData {\n const target = data.sections[section]?.tasks[task];\n if (target === undefined) throw new Error(`${who}: the gantt holds no task ${task} in section ${section}`);\n const next = change(target);\n return next === target ? data : withTasks(data, section, (tasks) => tasks.map((t, i) => (i === task ? next : t)), who);\n}\n\n/**\n * `data` with a task's id set to `id`, trimmed, every dependency naming the old id following it; an empty id drops\n * it and the dependencies on it. Throws on an id another task holds.\n */\nexport function setGanttTaskId(data: GanttData, section: number, task: number, id: string | undefined): GanttData {\n const next = id?.trim() || undefined;\n const target = data.sections[section]?.tasks[task];\n if (target === undefined) throw new Error(`setGanttTaskId: the gantt holds no task ${task} in section ${section}`);\n if (target.id === next) return data;\n if (next !== undefined && /\\s/.test(next)) throw new Error(`setGanttTaskId: an id holds no spaces, and \"${next}\" does`);\n if (next !== undefined && ganttTasks(data).some((t) => t.task.id === next)) throw new Error(`setGanttTaskId: a task already has id \"${next}\"`);\n const renamed = withTask(data, section, task, (t) => withOptional(t, 'id', next), 'setGanttTaskId');\n return target.id === undefined ? renamed : renameRefs(renamed, target.id, next);\n}\n\n/** `data` with a task carrying `tags`, kept in one order and each once; none drops them. */\nexport const setGanttTaskTags = (data: GanttData, section: number, task: number, tags: readonly GanttTag[]): GanttData =>\n withTask(data, section, task, (t) => {\n const next = TAG_ORDER.filter((tag) => tags.includes(tag));\n const old = TAG_ORDER.filter((tag) => t.tags?.includes(tag));\n return next.join() === old.join() ? t : withOptional(t, 'tags', next.length > 0 ? next : undefined);\n }, 'setGanttTaskTags');\n\n/** `data` with a task starting at `start`, as written. */\nexport const setGanttTaskStart = (data: GanttData, section: number, task: number, start: GanttStart): GanttData =>\n withTask(data, section, task, (t) => (JSON.stringify(t.start) === JSON.stringify(start) ? t : { ...t, start }), 'setGanttTaskStart');\n\n/** `data` with a task ending at `end`, as written. */\nexport const setGanttTaskEnd = (data: GanttData, section: number, task: number, end: GanttEnd): GanttData =>\n withTask(data, section, task, (t) => (JSON.stringify(t.end) === JSON.stringify(end) ? t : { ...t, end }), 'setGanttTaskEnd');\n\n/** `data` with one of its text settings set to `value`, trimmed; an empty one drops it, for the default. */\nexport function setGanttSetting(data: GanttData, key: 'dateFormat' | 'axisFormat' | 'todayMarker', value: string | undefined): GanttData {\n const text = value?.trim() || undefined;\n return data[key] === text ? data : withOptional(data, key, text);\n}\n\n/** `data` skipping `excludes` in durations counted in days, each trimmed; none drops them. */\nexport function setGanttExcludes(data: GanttData, excludes: readonly string[]): GanttData {\n const next = excludes.map((e) => e.trim()).filter((e) => e !== '');\n if (next.join() === (data.excludes ?? []).join()) return data;\n return withOptional(data, 'excludes', next.length > 0 ? next : undefined);\n}\n","/** A task's start and end as written in Mermaid: `after a b`, `until a b`, a duration (`3d`, `1.5h`), or a date. */\nimport type { GanttEnd, GanttStart, GanttUnit } from './types';\n\nconst DURATION = /^(\\d+(?:\\.\\d+)?|\\.\\d+)(ms|[smhdwMy])$/;\nconst ids = (text: string): string[] => text.trim().split(/\\s+/);\n\n/** `start` as written: `after a b`, a date, or `''` for one that follows the task before it. */\nexport const formatGanttStart = (start: GanttStart): string =>\n (start.kind === 'date' ? start.date : start.kind === 'after' ? `after ${start.ids.join(' ')}` : '');\n\n/** Text read as a start: `after a b` as its ids, `''` as following the task before, anything else as a date. */\nexport function parseGanttStart(text: string): GanttStart {\n const t = text.trim();\n if (t === '') return { kind: 'previous' };\n const after = /^after\\s+(.+)$/.exec(t);\n return after !== null ? { kind: 'after', ids: ids(after[1]!) } : { kind: 'date', date: t };\n}\n\n/** `end` as written: `until a b`, a duration, or a date. */\nexport function formatGanttEnd(end: GanttEnd): string {\n if (end.kind === 'date') return end.date;\n if (end.kind === 'until') return `until ${end.ids.join(' ')}`;\n return `${end.amount}${end.unit}`;\n}\n\n/** Text read as an end: `until a b` as its ids, a duration as its amount and unit, anything else as a date. */\nexport function parseGanttEnd(text: string): GanttEnd {\n const t = text.trim();\n const until = /^until\\s+(.+)$/.exec(t);\n if (until !== null) return { kind: 'until', ids: ids(until[1]!) };\n const d = DURATION.exec(t);\n return d !== null ? { kind: 'duration', amount: Number(d[1]), unit: d[2] as GanttUnit } : { kind: 'date', date: t };\n}\n","/** A gantt as its settings, a table of sections, and under each section a table of its tasks. */\nimport { listOf, textOf, titleField } from '../editing/schemaKit';\nimport type { PlotColumn, PlotField, PlotSchema, PlotScope } from '../editing/schemaTypes';\nimport { parseGanttDate } from './dates';\nimport { setGanttSectionName, setGanttTaskName } from './edit';\nimport { dateFormatOf } from './schedule';\nimport {\n insertGanttSection, insertGanttTask, moveGanttSection, moveGanttTaskToSection, removeGanttSection, removeGanttTask, reorderGanttTask,\n setGanttExcludes, setGanttSetting, setGanttTaskEnd, setGanttTaskId, setGanttTaskStart, setGanttTaskTags,\n} from './structure';\nimport { formatGanttEnd, formatGanttStart, parseGanttEnd, parseGanttStart } from './text';\nimport type { GanttData, GanttTag, GanttTask } from './types';\n\nconst setting = (key: 'dateFormat' | 'axisFormat' | 'todayMarker', label: string, placeholder: string): PlotField<GanttData> => ({\n key, label, type: { kind: 'string', placeholder }, optional: true,\n get: (d) => d[key],\n set: (d, v) => (v === undefined || typeof v === 'string' ? setGanttSetting(d, key, v) : d),\n});\n\nconst taskOf = (d: GanttData, scope: PlotScope, row: number): GanttTask | undefined => d.sections[scope[0]!]?.tasks[row];\n\n/** Whether a date written in `d`'s format reads; any other start or end does. */\nconst reads = (d: GanttData, at: { kind: string; date?: string }): boolean =>\n at.kind !== 'date' || parseGanttDate(at.date!, dateFormatOf(d)) !== null;\n\nconst tagColumn = (tag: GanttTag, label: string): PlotColumn<GanttData> => ({\n key: tag, label, type: { kind: 'boolean' },\n get: (d, s, r) => taskOf(d, s, r)?.tags?.includes(tag) ?? false,\n set: (d, s, r, v) => {\n const tags = taskOf(d, s, r)?.tags ?? [];\n if (typeof v !== 'boolean') return d;\n return setGanttTaskTags(d, s[0]!, r, v ? [...tags, tag] : tags.filter((t) => t !== tag));\n },\n});\n\n/** Each section as a choice: its number and name, so two sections of one name stay apart. */\nconst sectionChoices = (d: GanttData): string[] => d.sections.map((s, i) => `${i + 1}. ${s.name ?? 'Untitled section'}`);\n\n/** The section a task sits in; choosing another moves the task to its end. */\nconst sectionColumn = (d: GanttData): PlotColumn<GanttData> => ({\n key: 'section', label: 'Section', type: { kind: 'enum', options: sectionChoices(d) },\n get: (data, s) => sectionChoices(data)[s[0]!],\n set: (data, s, r, v) => {\n const to = typeof v === 'string' ? sectionChoices(data).indexOf(v) : -1;\n return to < 0 || to === s[0] ? data : moveGanttTaskToSection(data, s[0]!, r, to);\n },\n});\n\nconst TASK_COLUMNS: readonly PlotColumn<GanttData>[] = [\n {\n key: 'name', label: 'Task', type: { kind: 'string' },\n get: (d, s, r) => taskOf(d, s, r)?.name,\n set: (d, s, r, v) => setGanttTaskName(d, s[0]!, r, textOf(v) ?? ''),\n },\n {\n key: 'id', label: 'Id', type: { kind: 'string' }, optional: true,\n get: (d, s, r) => taskOf(d, s, r)?.id,\n set: (d, s, r, v) => {\n const id = textOf(v)?.trim() || undefined;\n const taken = id !== undefined && (/\\s/.test(id) || d.sections.some((sec) => sec.tasks.some((t) => t.id === id)));\n return (v !== undefined && typeof v !== 'string') || taken ? d : setGanttTaskId(d, s[0]!, r, id);\n },\n },\n {\n key: 'start', label: 'Start', type: { kind: 'string', placeholder: 'after the task before' },\n get: (d, s, r) => { const t = taskOf(d, s, r); return t && formatGanttStart(t.start); },\n set: (d, s, r, v) => {\n const start = parseGanttStart(textOf(v) ?? '');\n return reads(d, start) ? setGanttTaskStart(d, s[0]!, r, start) : d;\n },\n },\n {\n key: 'end', label: 'End', type: { kind: 'string', placeholder: '3d, a date, or until an id' },\n get: (d, s, r) => { const t = taskOf(d, s, r); return t && formatGanttEnd(t.end); },\n set: (d, s, r, v) => {\n const text = textOf(v)?.trim();\n if (!text) return d;\n const end = parseGanttEnd(text);\n return reads(d, end) ? setGanttTaskEnd(d, s[0]!, r, end) : d;\n },\n },\n tagColumn('done', 'Done'),\n tagColumn('active', 'Active'),\n tagColumn('crit', 'Critical'),\n tagColumn('milestone', 'Milestone'),\n];\n\nexport const ganttSchema: PlotSchema<GanttData> = {\n fields: [\n titleField(),\n setting('dateFormat', 'Date format', 'YYYY-MM-DD'),\n setting('axisFormat', 'Axis format', '%Y-%m-%d'),\n {\n key: 'excludes', label: 'Excludes', type: { kind: 'string', placeholder: 'weekends, 2024-01-01' }, optional: true,\n get: (d) => (d.excludes && d.excludes.length > 0 ? d.excludes.join(', ') : undefined),\n set: (d, v) => (v === undefined || typeof v === 'string' ? setGanttExcludes(d, listOf(v ?? '')) : d),\n },\n setting('todayMarker', 'Today marker', 'off, or a style'),\n ],\n tables: [{\n key: 'sections', label: 'Sections', item: 'section',\n count: (d) => d.sections.length,\n columns: () => [{\n key: 'name', label: 'Section', type: { kind: 'string' },\n get: (d, _, r) => d.sections[r]?.name,\n set: (d, _, r, v) => setGanttSectionName(d, r, textOf(v) ?? ''),\n }],\n insert: (d, _, at) => insertGanttSection(d, at),\n remove: (d, _, r) => removeGanttSection(d, r),\n move: (d, _, from, to) => moveGanttSection(d, from, to),\n rowLabel: (d, _, r) => d.sections[r]?.name ?? 'Untitled section',\n children: [{\n key: 'tasks', label: 'Tasks', item: 'task',\n count: (d, s) => d.sections[s[0]!]?.tasks.length ?? 0,\n columns: (d) => [...TASK_COLUMNS, sectionColumn(d)],\n insert: (d, s, at) => insertGanttTask(d, s[0]!, at),\n remove: (d, s, r) => removeGanttTask(d, s[0]!, r),\n move: (d, s, from, to) => reorderGanttTask(d, s[0]!, from, to),\n rowLabel: (d, s, r) => taskOf(d, s, r)?.name ?? '',\n }],\n }],\n};\n","/** Edits to a gitgraph's commands as a collection, each command's fields, and the graph's options, as plain data in and\n * out. */\nimport { freshName, insertAt, moveAt, removeAt, updateAt, withOptional } from '../editing/lists';\nimport type { GitCommand, GitCommitType, GitGraphData } from './types';\n\n/** The kinds of command a graph runs. */\nexport const GIT_COMMAND_KINDS = ['commit', 'branch', 'checkout', 'merge', 'cherry-pick'] as const;\n\n/** A command's fields besides its kind. */\nexport type GitCommandField = 'id' | 'type' | 'tag' | 'message' | 'name' | 'branch' | 'order' | 'parent';\n\n/** The fields each kind of command holds; `id` on a cherry-pick names the commit it picks. */\nexport const GIT_COMMAND_FIELDS: { readonly [K in GitCommand['kind']]: readonly GitCommandField[] } = {\n commit: ['id', 'type', 'tag', 'message'],\n branch: ['name', 'order'],\n checkout: ['name'],\n merge: ['branch', 'id', 'type', 'tag'],\n 'cherry-pick': ['id', 'tag', 'parent'],\n};\n\nconst mainOf = (data: GitGraphData): string => data.mainBranch ?? 'main';\n\n/** The branches the graph names, its main branch first. */\nexport const gitBranchNames = (data: GitGraphData): string[] =>\n [mainOf(data), ...data.commands.flatMap((c) => (c.kind === 'branch' && c.name !== mainOf(data) ? [c.name] : []))];\n\n/** `data` with `command` inserted before command `at`; absent, a plain commit. */\nexport const insertGitCommand = (data: GitGraphData, at: number, command: GitCommand = { kind: 'commit' }): GitGraphData =>\n ({ ...data, commands: insertAt(data.commands, at, command, 'insertGitCommand') });\n\n/** `data` without command `command`. Throws on a command it does not hold. */\nexport const removeGitCommand = (data: GitGraphData, command: number): GitGraphData =>\n ({ ...data, commands: removeAt(data.commands, command, 'removeGitCommand') });\n\n/** `data` with command `from` moved to index `to`, counted once it is taken out. */\nexport const moveGitCommand = (data: GitGraphData, from: number, to: number): GitGraphData =>\n (from === to ? data : { ...data, commands: moveAt(data.commands, from, to, 'moveGitCommand') });\n\n/** `data` with command `at` replaced by `command`. Throws on a command it does not hold. */\nexport const setGitCommand = (data: GitGraphData, at: number, command: GitCommand): GitGraphData =>\n (data.commands[at] === command ? data : { ...data, commands: updateAt(data.commands, at, () => command, 'setGitCommand') });\n\n/**\n * `data` with command `at` turned into a command of `kind`, keeping the fields both kinds hold. What the new kind needs\n * and the old did not hold is filled in: a fresh name for a branch, the main branch to check out, the last branch\n * created to merge, the last commit id to pick.\n */\nexport function setGitCommandKind(data: GitGraphData, at: number, kind: GitCommand['kind']): GitGraphData {\n const old = data.commands[at];\n if (old === undefined) throw new Error(`setGitCommandKind: no command ${at}`);\n if (old.kind === kind) return data;\n const kept = Object.fromEntries(GIT_COMMAND_FIELDS[kind].flatMap((f) => {\n const v = (old as Record<string, unknown>)[f];\n return v === undefined || (f === 'id' && (old.kind === 'cherry-pick') !== (kind === 'cherry-pick')) ? [] : [[f, v]];\n }));\n const branches = gitBranchNames(data);\n const ids = data.commands.flatMap((c) => ((c.kind === 'commit' || c.kind === 'merge') && c.id !== undefined ? [c.id] : []));\n const needs: Record<string, unknown> =\n kind === 'branch' ? { name: freshName('branch', branches, branches.length, '-') }\n : kind === 'checkout' ? { name: mainOf(data) }\n : kind === 'merge' ? { branch: branches[branches.length - 1] }\n : kind === 'cherry-pick' ? { id: ids[ids.length - 1] ?? '' }\n : {};\n return setGitCommand(data, at, { ...needs, ...kept, kind } as GitCommand);\n}\n\nconst TYPES: readonly GitCommitType[] = ['NORMAL', 'REVERSE', 'HIGHLIGHT'];\n\n/**\n * `data` with field `field` of command `at` set to `value`; `undefined` drops an optional field. Throws on a field its\n * kind does not hold, a value of the wrong type, or dropping a field the kind needs.\n */\nexport function setGitCommandField(data: GitGraphData, at: number, field: GitCommandField, value: string | number | undefined): GitGraphData {\n const cmd = data.commands[at];\n if (cmd === undefined) throw new Error(`setGitCommandField: no command ${at}`);\n if (!GIT_COMMAND_FIELDS[cmd.kind].includes(field)) throw new Error(`setGitCommandField: a ${cmd.kind} holds no ${field}`);\n const required = field === 'name' || field === 'branch' || (field === 'id' && cmd.kind === 'cherry-pick');\n if (value === undefined && required) throw new Error(`setGitCommandField: a ${cmd.kind} needs its ${field}`);\n if (value !== undefined && (field === 'order') !== (typeof value === 'number')) throw new Error(`setGitCommandField: ${field} takes a ${field === 'order' ? 'number' : 'string'}`);\n if (field === 'type' && value !== undefined && !TYPES.includes(value as GitCommitType)) throw new Error(`setGitCommandField: no commit type \"${value}\"`);\n if ((cmd as Record<string, unknown>)[field] === value) return data;\n return setGitCommand(data, at, withOptional(cmd as Record<string, unknown>, field, value) as GitCommand);\n}\n\n/** `data` drawn left to right (the default), top to bottom, or bottom to top. */\nexport const setGitOrientation = (data: GitGraphData, orientation: 'LR' | 'TB' | 'BT'): GitGraphData =>\n ((data.orientation ?? 'LR') === orientation ? data : withOptional(data, 'orientation', orientation === 'LR' ? undefined : orientation));\n\n/** `data` with its main branch called `name`, trimmed, every checkout and merge of it renamed too. Throws on an empty\n * name or one another branch holds. */\nexport function setGitMainBranch(data: GitGraphData, name: string): GitGraphData {\n const next = name.trim();\n const old = mainOf(data);\n if (next === old) return data;\n if (next === '') throw new Error('setGitMainBranch: a branch needs a name');\n if (gitBranchNames(data).includes(next)) throw new Error(`setGitMainBranch: a branch is already called \"${next}\"`);\n const commands = data.commands.map((c): GitCommand => {\n if (c.kind === 'checkout' && c.name === old) return { ...c, name: next };\n if (c.kind === 'merge' && c.branch === old) return { ...c, branch: next };\n return c;\n });\n return withOptional({ ...data, commands }, 'mainBranch', next === 'main' ? undefined : next);\n}\n","/** A gitgraph as its options and one table of commands, each column applying to the kinds of command that hold it. */\nimport { choiceOf, integerOf, textOf, titleField } from '../editing/schemaKit';\nimport type { PlotColumn, PlotSchema, PlotValueType } from '../editing/schemaTypes';\nimport {\n GIT_COMMAND_FIELDS, GIT_COMMAND_KINDS, insertGitCommand, moveGitCommand, removeGitCommand, setGitCommandField, setGitCommandKind,\n setGitMainBranch, setGitOrientation, type GitCommandField,\n} from './structure';\nimport type { GitCommand, GitGraphData } from './types';\n\nconst ORIENTATIONS = ['LR', 'TB', 'BT'] as const;\n\n/** The field a command's target column reads: the branch it creates, checks out, or merges, or the commit it picks. */\nconst targetOf = (cmd: GitCommand): GitCommandField | null =>\n (cmd.kind === 'branch' || cmd.kind === 'checkout' ? 'name' : cmd.kind === 'merge' ? 'branch' : cmd.kind === 'cherry-pick' ? 'id' : null);\n\n/** A column over `field` (or, for `'target'`, whichever field {@link targetOf} names) on the commands that hold it. */\nfunction column(key: string, label: string, type: PlotValueType, field: GitCommandField | 'target', optional: boolean): PlotColumn<GitGraphData> {\n const fieldOf = (d: GitGraphData, r: number): GitCommandField | null => {\n const cmd = d.commands[r];\n if (cmd === undefined) return null;\n if (field === 'target') return targetOf(cmd);\n if (field === 'id' && cmd.kind === 'cherry-pick') return null;\n return GIT_COMMAND_FIELDS[cmd.kind].includes(field) ? field : null;\n };\n return {\n key, label, type, optional,\n applies: (d, _, r) => fieldOf(d, r) !== null,\n get: (d, _, r) => { const f = fieldOf(d, r); return f === null ? undefined : (d.commands[r] as Record<string, string | number | undefined>)[f]; },\n set: (d, _, r, v) => {\n const f = fieldOf(d, r);\n if (f === null) return d;\n const value = f === 'order' ? integerOf(v) : textOf(v)?.trim() || undefined;\n if (value === undefined && (v !== undefined || !optional)) return d;\n if (f === 'type' && value !== undefined && type.kind === 'enum' && !type.options.includes(String(value))) return d;\n return setGitCommandField(d, r, f, value);\n },\n };\n}\n\nexport const gitgraphSchema: PlotSchema<GitGraphData> = {\n fields: [\n titleField(),\n {\n key: 'orientation', label: 'Orientation', type: { kind: 'enum', options: ORIENTATIONS },\n get: (d) => d.orientation ?? 'LR',\n set: (d, v) => { const o = choiceOf(v, ORIENTATIONS); return o ? setGitOrientation(d, o) : d; },\n },\n {\n key: 'mainBranch', label: 'Main branch', type: { kind: 'string' },\n get: (d) => d.mainBranch ?? 'main',\n set: (d, v) => {\n const name = textOf(v)?.trim();\n if (!name) return d;\n try { return setGitMainBranch(d, name); } catch { return d; }\n },\n },\n ],\n tables: [{\n key: 'commands', label: 'Commands', item: 'command',\n count: (d) => d.commands.length,\n columns: () => [\n {\n key: 'kind', label: 'Command', type: { kind: 'enum', options: GIT_COMMAND_KINDS },\n get: (d, _, r) => d.commands[r]?.kind,\n set: (d, _, r, v) => { const k = choiceOf(v, GIT_COMMAND_KINDS); return k ? setGitCommandKind(d, r, k) : d; },\n },\n column('target', 'Branch or commit', { kind: 'string' }, 'target', false),\n column('id', 'Id', { kind: 'string' }, 'id', true),\n column('type', 'Type', { kind: 'enum', options: ['NORMAL', 'REVERSE', 'HIGHLIGHT'] }, 'type', true),\n column('tag', 'Tag', { kind: 'string' }, 'tag', true),\n column('message', 'Message', { kind: 'string' }, 'message', true),\n column('order', 'Order', { kind: 'number', step: 1 }, 'order', true),\n column('parent', 'Parent', { kind: 'string' }, 'parent', true),\n ],\n insert: (d, _, at) => insertGitCommand(d, at),\n remove: (d, _, r) => removeGitCommand(d, r),\n move: (d, _, from, to) => moveGitCommand(d, from, to),\n rowLabel: (d, _, r) => { const c = d.commands[r]; return c === undefined ? '' : [c.kind, ...(targetOf(c) ? [(c as Record<string, string>)[targetOf(c)!]] : [])].join(' '); },\n }],\n};\n","/** Edits to a user journey's sections and steps as collections, and a step's actors, as plain data in and out. */\nimport { freshName, insertAt, moveAt, removeAt, updateAt } from '../editing/lists';\nimport type { JourneyData, JourneySection, JourneyTask } from './types';\n\nconst freshTask = (data: JourneyData): JourneyTask => {\n const names = data.sections.flatMap((s) => s.tasks.map((t) => t.name));\n return { name: freshName('Step', names, names.length + 1), score: 3, actors: [] };\n};\n\n/** `data` with `section` inserted before section `at`; absent, one fresh step under a fresh name. */\nexport function insertJourneySection(data: JourneyData, at: number, section?: JourneySection): JourneyData {\n const next = section ?? {\n name: freshName('Section', data.sections.flatMap((s) => (s.name === undefined ? [] : [s.name])), data.sections.length + 1),\n tasks: [freshTask(data)],\n };\n return { ...data, sections: insertAt(data.sections, at, next, 'insertJourneySection') };\n}\n\n/** `data` without section `section` and its steps. Throws on a section it does not hold. */\nexport const removeJourneySection = (data: JourneyData, section: number): JourneyData =>\n ({ ...data, sections: removeAt(data.sections, section, 'removeJourneySection') });\n\n/** `data` with section `from` moved to index `to`, counted once it is taken out. */\nexport const moveJourneySection = (data: JourneyData, from: number, to: number): JourneyData =>\n (from === to ? data : { ...data, sections: moveAt(data.sections, from, to, 'moveJourneySection') });\n\nconst withTasks = (data: JourneyData, section: number, change: (t: readonly JourneyTask[]) => JourneyTask[], who: string): JourneyData =>\n ({ ...data, sections: updateAt(data.sections, section, (s) => ({ ...s, tasks: change(s.tasks) }), who) });\n\n/** `data` with `task` inserted before step `at` of section `section`; absent, a fresh step scored 3 with no actors. */\nexport const insertJourneyTask = (data: JourneyData, section: number, at: number, task?: JourneyTask): JourneyData =>\n withTasks(data, section, (ts) => insertAt(ts, at, task ?? freshTask(data), 'insertJourneyTask'), 'insertJourneyTask');\n\n/** `data` without step `task` of section `section`. Throws on a step it does not hold. */\nexport const removeJourneyTask = (data: JourneyData, section: number, task: number): JourneyData =>\n withTasks(data, section, (ts) => removeAt(ts, task, 'removeJourneyTask'), 'removeJourneyTask');\n\n/** `data` with step `from` of section `section` moved to index `to` in it, counted once it is taken out. */\nexport const moveJourneyTask = (data: JourneyData, section: number, from: number, to: number): JourneyData =>\n (from === to ? data : withTasks(data, section, (ts) => moveAt(ts, from, to, 'moveJourneyTask'), 'moveJourneyTask'));\n\n/** `data` with a step taken part in by `actors`, each trimmed and once. */\nexport function setJourneyActors(data: JourneyData, section: number, task: number, actors: readonly string[]): JourneyData {\n const next = [...new Set(actors.map((a) => a.trim()).filter((a) => a !== ''))];\n const target = data.sections[section]?.tasks[task];\n if (target === undefined) throw new Error(`setJourneyActors: section ${section} holds no step ${task}`);\n if (next.join('\\n') === target.actors.join('\\n')) return data;\n return withTasks(data, section, (ts) => ts.map((t, i) => (i === task ? { ...t, actors: next } : t)), 'setJourneyActors');\n}\n","/** A user journey as a table of sections and under each a table of its steps. Actors are written with commas, as\n * Mermaid writes them, so no actor's name holds one. */\nimport { integerOf, listOf, textOf, titleField } from '../editing/schemaKit';\nimport type { PlotSchema, PlotScope } from '../editing/schemaTypes';\nimport { setJourneyScore, setJourneySectionName, setJourneyTaskName } from './edit';\nimport {\n insertJourneySection, insertJourneyTask, moveJourneySection, moveJourneyTask, removeJourneySection, removeJourneyTask, setJourneyActors,\n} from './structure';\nimport type { JourneyData, JourneyTask } from './types';\n\nconst taskOf = (d: JourneyData, s: PlotScope, r: number): JourneyTask | undefined => d.sections[s[0]!]?.tasks[r];\n\nexport const journeySchema: PlotSchema<JourneyData> = {\n fields: [titleField()],\n tables: [{\n key: 'sections', label: 'Sections', item: 'section',\n count: (d) => d.sections.length,\n columns: () => [{\n key: 'name', label: 'Section', type: { kind: 'string' },\n get: (d, _, r) => d.sections[r]?.name,\n set: (d, _, r, v) => { const t = textOf(v)?.trim(); return t ? setJourneySectionName(d, r, t) : d; },\n }],\n insert: (d, _, at) => insertJourneySection(d, at),\n remove: (d, _, r) => removeJourneySection(d, r),\n move: (d, _, from, to) => moveJourneySection(d, from, to),\n rowLabel: (d, _, r) => d.sections[r]?.name ?? 'Untitled section',\n children: [{\n key: 'tasks', label: 'Steps', item: 'step',\n count: (d, s) => d.sections[s[0]!]?.tasks.length ?? 0,\n columns: () => [\n {\n key: 'name', label: 'Step', type: { kind: 'string' },\n get: (d, s, r) => taskOf(d, s, r)?.name,\n set: (d, s, r, v) => { const t = textOf(v)?.trim(); return t ? setJourneyTaskName(d, s[0]!, r, t) : d; },\n },\n {\n key: 'score', label: 'Score', type: { kind: 'number', min: 1, max: 5, step: 1 },\n get: (d, s, r) => taskOf(d, s, r)?.score,\n set: (d, s, r, v) => { const n = integerOf(v); return n !== undefined && n >= 1 && n <= 5 ? setJourneyScore(d, s[0]!, r, n) : d; },\n },\n {\n key: 'actors', label: 'Actors', type: { kind: 'string', placeholder: 'Me, Cat' },\n get: (d, s, r) => taskOf(d, s, r)?.actors.join(', '),\n set: (d, s, r, v) => (typeof v === 'string' ? setJourneyActors(d, s[0]!, r, listOf(v)) : d),\n },\n ],\n insert: (d, s, at) => insertJourneyTask(d, s[0]!, at),\n remove: (d, s, r) => removeJourneyTask(d, s[0]!, r),\n move: (d, s, from, to) => moveJourneyTask(d, s[0]!, from, to),\n rowLabel: (d, s, r) => taskOf(d, s, r)?.name ?? '',\n }],\n }],\n};\n","/**\n * Edits to a packet diagram's fields as a collection, each field's bits, and its options, as plain data in and out.\n * Fields stay in bit order without overlapping: a field that grows, shrinks, comes, or goes moves every field after it.\n */\nimport { freshName, insertAt, moveAt, removeAt, updateAt, withOptional } from '../editing/lists';\nimport type { PacketData, PacketField } from './types';\n\nconst width = (f: PacketField): number => f.end - f.start + 1;\n\n/** `fields` from index `from` on moved along by `by` bits. */\nconst shifted = (fields: readonly PacketField[], from: number, by: number): PacketField[] =>\n fields.map((f, i) => (i < from || by === 0 ? f : { ...f, start: f.start + by, end: f.end + by }));\n\n/** `data` with `field` inserted before field `at`, the fields after it moved along by its width; absent, an 8-bit\n * field just after the one before, under a fresh label. */\nexport function insertPacketField(data: PacketData, at: number, field?: PacketField): PacketData {\n const start = at === 0 ? 0 : (data.fields[at - 1]?.end ?? -1) + 1;\n const next = field ?? { start, end: start + 7, label: freshName('Field', data.fields.map((f) => f.label), data.fields.length + 1) };\n const room = data.fields[at] === undefined ? 0 : Math.max(0, next.end + 1 - data.fields[at]!.start);\n return { ...data, fields: insertAt(shifted(data.fields, at, room), at, next, 'insertPacketField') };\n}\n\n/** `data` without field `field`, the fields after it moved back by its width. Throws on a field it does not hold. */\nexport function removePacketField(data: PacketData, field: number): PacketData {\n const gone = data.fields[field];\n const fields = removeAt(data.fields, field, 'removePacketField');\n return { ...data, fields: gone === undefined ? fields : shifted(fields, field, -width(gone)) };\n}\n\n/** `data` with field `from` moved to index `to`, counted once it is taken out. Each field keeps its width and the\n * gap before each place is kept, so the fields are laid again from the first one's start. */\nexport function movePacketField(data: PacketData, from: number, to: number): PacketData {\n if (from === to) return data;\n const moved = moveAt(data.fields, from, to, 'movePacketField');\n const gaps = data.fields.map((g, i) => (i === 0 ? g.start : g.start - data.fields[i - 1]!.end - 1));\n let end = -1;\n const fields = moved.map((g, i) => {\n const start = end + 1 + gaps[i]!;\n end = start + width(g) - 1;\n return { ...g, start, end };\n });\n return { ...data, fields };\n}\n\n/** `data` with field `field` `bits` wide, a whole number at least 1, the fields after it moved by the change. */\nexport function setPacketBits(data: PacketData, field: number, bits: number): PacketData {\n if (!Number.isInteger(bits) || bits < 1) throw new Error(`setPacketBits: a field is a whole number of bits, at least 1, and ${bits} is not`);\n const target = data.fields[field];\n if (target === undefined) throw new Error(`setPacketBits: the packet holds no field ${field}`);\n const by = bits - width(target);\n if (by === 0) return data;\n return { ...data, fields: shifted(updateAt(data.fields, field, (f) => ({ ...f, end: f.start + bits - 1 }), 'setPacketBits'), field + 1, by) };\n}\n\n/** `data` with field `field` starting at bit `start`, the fields after it moved along with it. Throws on a start\n * inside the field before it. */\nexport function setPacketStart(data: PacketData, field: number, start: number): PacketData {\n const target = data.fields[field];\n if (target === undefined) throw new Error(`setPacketStart: the packet holds no field ${field}`);\n const floor = field === 0 ? 0 : data.fields[field - 1]!.end + 1;\n if (!Number.isInteger(start) || start < floor) throw new Error(`setPacketStart: field ${field} starts at bit ${floor} or later, and ${start} is earlier`);\n return { ...data, fields: shifted(data.fields, field, start - target.start) };\n}\n\n/** `data` with field `field` written as a count of bits after the field before (`+8`), or as a range. */\nexport const setPacketRelative = (data: PacketData, field: number, relative: boolean): PacketData => {\n const fields = updateAt(data.fields, field, (f) => ((f.relative ?? false) === relative ? f : withOptional(f, 'relative', relative ? true : undefined)), 'setPacketRelative');\n return fields[field] === data.fields[field] ? data : { ...data, fields };\n};\n\n/** `data` with `bits` to a row; `undefined` for the default 32. */\nexport function setPacketBitsPerRow(data: PacketData, bits: number | undefined): PacketData {\n if (bits !== undefined && (!Number.isInteger(bits) || bits < 1)) throw new Error(`setPacketBitsPerRow: a row is a whole number of bits, at least 1, and ${bits} is not`);\n return data.bitsPerRow === bits ? data : withOptional(data, 'bitsPerRow', bits);\n}\n","/** A packet diagram as its options and one table of fields, each laid after the one before. */\nimport { integerOf, titleField } from '../editing/schemaKit';\nimport type { PlotSchema } from '../editing/schemaTypes';\nimport { setPacketLabel } from './edit';\nimport {\n insertPacketField, movePacketField, removePacketField, setPacketBits, setPacketBitsPerRow, setPacketRelative, setPacketStart,\n} from './structure';\nimport type { PacketData } from './types';\n\nexport const packetSchema: PlotSchema<PacketData> = {\n fields: [\n titleField(),\n {\n key: 'bitsPerRow', label: 'Bits per row', type: { kind: 'number', min: 1, step: 1 }, optional: true,\n get: (d) => d.bitsPerRow,\n set: (d, v) => { const n = integerOf(v); return v === undefined || (n !== undefined && n >= 1) ? setPacketBitsPerRow(d, n) : d; },\n },\n ],\n tables: [{\n key: 'fields', label: 'Fields', item: 'field',\n count: (d) => d.fields.length,\n columns: () => [\n {\n key: 'label', label: 'Label', type: { kind: 'string' },\n get: (d, _, r) => d.fields[r]?.label,\n set: (d, _, r, v) => (typeof v === 'string' ? setPacketLabel(d, r, v.trim()) : d),\n },\n {\n key: 'start', label: 'Start', type: { kind: 'number', min: 0, step: 1 },\n get: (d, _, r) => d.fields[r]?.start,\n set: (d, _, r, v) => {\n const n = integerOf(v);\n const floor = r === 0 ? 0 : (d.fields[r - 1]?.end ?? -1) + 1;\n return n !== undefined && n >= floor ? setPacketStart(d, r, n) : d;\n },\n },\n {\n key: 'bits', label: 'Bits', type: { kind: 'number', min: 1, step: 1 },\n get: (d, _, r) => { const f = d.fields[r]; return f && f.end - f.start + 1; },\n set: (d, _, r, v) => { const n = integerOf(v); return n !== undefined && n >= 1 ? setPacketBits(d, r, n) : d; },\n },\n {\n key: 'end', label: 'End', type: { kind: 'number' }, readOnly: true,\n get: (d, _, r) => d.fields[r]?.end,\n set: (d) => d,\n },\n {\n key: 'relative', label: 'Relative', type: { kind: 'boolean' },\n get: (d, _, r) => d.fields[r]?.relative ?? false,\n set: (d, _, r, v) => (typeof v === 'boolean' ? setPacketRelative(d, r, v) : d),\n },\n ],\n insert: (d, _, at) => insertPacketField(d, at),\n remove: (d, _, r) => removePacketField(d, r),\n move: (d, _, from, to) => movePacketField(d, from, to),\n rowLabel: (d, _, r) => d.fields[r]?.label ?? '',\n }],\n};\n","/** Edits to a pie's slices as a collection, and its options, as plain data in and out. */\nimport { freshName, insertAt, moveAt, removeAt, withOptional } from '../editing/lists';\nimport type { PieData, PieSlice } from './types';\n\n/** `data` with `slice` inserted before slice `at`; absent, a slice of 1 under a label no slice holds. */\nexport function insertPieSlice(data: PieData, at: number, slice?: PieSlice): PieData {\n const next = slice ?? { label: freshName('Slice', data.slices.map((s) => s.label), data.slices.length + 1), value: 1 };\n return { ...data, slices: insertAt(data.slices, at, next, 'insertPieSlice') };\n}\n\n/** `data` without slice `slice`. Throws on a slice it does not hold. */\nexport const removePieSlice = (data: PieData, slice: number): PieData =>\n ({ ...data, slices: removeAt(data.slices, slice, 'removePieSlice') });\n\n/** `data` with slice `from` moved to index `to`, counted once it is taken out. */\nexport const movePieSlice = (data: PieData, from: number, to: number): PieData =>\n (from === to ? data : { ...data, slices: moveAt(data.slices, from, to, 'movePieSlice') });\n\n/** `data` writing, or not, each slice's value in the legend. */\nexport const setPieShowData = (data: PieData, show: boolean): PieData =>\n ((data.showData ?? false) === show ? data : withOptional(data, 'showData', show ? true : undefined));\n","/** A pie as fields and one table of slices. */\nimport { numberOf, textOf, titleField } from '../editing/schemaKit';\nimport type { PlotSchema } from '../editing/schemaTypes';\nimport { setPieLabel, setPieValue } from './edit';\nimport { insertPieSlice, movePieSlice, removePieSlice, setPieShowData } from './structure';\nimport type { PieData } from './types';\n\nexport const pieSchema: PlotSchema<PieData> = {\n fields: [\n titleField(),\n {\n key: 'showData', label: 'Show values', type: { kind: 'boolean' },\n get: (d) => d.showData ?? false,\n set: (d, v) => (typeof v === 'boolean' ? setPieShowData(d, v) : d),\n },\n ],\n tables: [{\n key: 'slices', label: 'Slices', item: 'slice',\n count: (d) => d.slices.length,\n columns: () => [\n {\n key: 'label', label: 'Label', type: { kind: 'string' },\n get: (d, _, r) => d.slices[r]?.label,\n set: (d, _, r, v) => { const t = textOf(v)?.trim(); return t ? setPieLabel(d, r, t) : d; },\n },\n {\n key: 'value', label: 'Value', type: { kind: 'number', min: 0 },\n get: (d, _, r) => d.slices[r]?.value,\n set: (d, _, r, v) => { const n = numberOf(v); return n !== undefined && n >= 0 ? setPieValue(d, r, n) : d; },\n },\n ],\n insert: (d, _, at) => insertPieSlice(d, at),\n remove: (d, _, r) => removePieSlice(d, r),\n move: (d, _, from, to) => movePieSlice(d, from, to),\n rowLabel: (d, _, r) => d.slices[r]?.label ?? '',\n }],\n};\n","/**\n * Edits to a quadrant chart's points and named styles as collections, and each one's style, as plain data in and out.\n * A class taken out, or renamed, is taken out of (or renamed on) every point that used it.\n */\nimport { freshName, insertAt, moveAt, removeAt, updateAt, withOptional } from '../editing/lists';\nimport type { QuadrantData, QuadrantPoint, QuadrantPointStyle } from './types';\n\n/** `data` with `point` inserted before point `at`; absent, a point at the center under a fresh name. */\nexport function insertQuadrantPoint(data: QuadrantData, at: number, point?: QuadrantPoint): QuadrantData {\n const next = point ?? { name: freshName('Point', data.points.map((p) => p.name), data.points.length + 1), x: 0.5, y: 0.5 };\n return { ...data, points: insertAt(data.points, at, next, 'insertQuadrantPoint') };\n}\n\n/** `data` without point `point`. Throws on a point it does not hold. */\nexport const removeQuadrantPoint = (data: QuadrantData, point: number): QuadrantData =>\n ({ ...data, points: removeAt(data.points, point, 'removeQuadrantPoint') });\n\n/** `data` with point `from` moved to index `to`, counted once it is taken out. */\nexport const moveQuadrantPoint = (data: QuadrantData, from: number, to: number): QuadrantData =>\n (from === to ? data : { ...data, points: moveAt(data.points, from, to, 'moveQuadrantPoint') });\n\n/** `style` with `key` set to `value`, or `undefined` once it holds nothing. */\nfunction restyled(style: QuadrantPointStyle | undefined, key: keyof QuadrantPointStyle, value: string | number | undefined): QuadrantPointStyle | undefined {\n const next = withOptional(style ?? {}, key, value as never);\n return Object.keys(next).length > 0 ? next : undefined;\n}\n\nconst withPoint = (data: QuadrantData, point: number, change: (p: QuadrantPoint) => QuadrantPoint, who: string): QuadrantData => {\n const points = updateAt(data.points, point, change, who);\n return points[point] === data.points[point] ? data : { ...data, points };\n};\n\n/** `data` with a point's style `key` set to `value`; `undefined` drops it, for its class's or the theme's. */\nexport const setQuadrantPointStyle = <K extends keyof QuadrantPointStyle>(\n data: QuadrantData, point: number, key: K, value: QuadrantPointStyle[K] | undefined,\n): QuadrantData => withPoint(data, point, (p) => (p.style?.[key] === value ? p : withOptional(p, 'style', restyled(p.style, key, value))), 'setQuadrantPointStyle');\n\n/** `data` with a point drawn in class `className`; `undefined` drops it. Throws on a class the chart does not hold. */\nexport function setQuadrantPointClass(data: QuadrantData, point: number, className: string | undefined): QuadrantData {\n if (className !== undefined && data.classes?.[className] === undefined) throw new Error(`setQuadrantPointClass: no class \"${className}\"`);\n return withPoint(data, point, (p) => (p.className === className ? p : withOptional(p, 'className', className)), 'setQuadrantPointClass');\n}\n\n/** The names of the chart's classes, in order. */\nexport const quadrantClassNames = (data: QuadrantData): string[] => Object.keys(data.classes ?? {});\n\n/** `data` with its classes as `entries`, in order; none drops them. */\nconst withClasses = (data: QuadrantData, entries: readonly (readonly [string, QuadrantPointStyle])[]): QuadrantData =>\n withOptional(data, 'classes', entries.length > 0 ? Object.fromEntries(entries) : undefined);\n\n/** `data` with a class `name` (absent, a fresh one) of `style` inserted before class `at`. Throws on a name it holds. */\nexport function insertQuadrantClass(data: QuadrantData, at: number, name?: string, style: QuadrantPointStyle = { radius: 8 }): QuadrantData {\n const names = quadrantClassNames(data);\n const next = name ?? freshName('class', names, names.length + 1, '');\n if (!/^\\w+$/.test(next)) throw new Error(`insertQuadrantClass: a class name is letters, digits and underscores, and \"${next}\" is not`);\n if (names.includes(next)) throw new Error(`insertQuadrantClass: a class is already called \"${next}\"`);\n return withClasses(data, insertAt(Object.entries(data.classes ?? {}), at, [next, style] as const, 'insertQuadrantClass'));\n}\n\n/** `data` without class `index`, every point that used it drawn in its own style. Throws on a class it does not hold. */\nexport function removeQuadrantClass(data: QuadrantData, index: number): QuadrantData {\n const name = quadrantClassNames(data)[index];\n const next = withClasses(data, removeAt(Object.entries(data.classes ?? {}), index, 'removeQuadrantClass'));\n return { ...next, points: next.points.map((p) => (p.className === name ? withOptional(p, 'className', undefined) : p)) };\n}\n\n/** `data` with class `from` moved to index `to`, counted once it is taken out. */\nexport const moveQuadrantClass = (data: QuadrantData, from: number, to: number): QuadrantData =>\n (from === to ? data : withClasses(data, moveAt(Object.entries(data.classes ?? {}), from, to, 'moveQuadrantClass')));\n\n/** `data` with class `index` called `name`, on every point that used it too. Throws on a name another class holds. */\nexport function renameQuadrantClass(data: QuadrantData, index: number, name: string): QuadrantData {\n const names = quadrantClassNames(data);\n const from = names[index];\n if (from === undefined) throw new Error(`renameQuadrantClass: no class ${index}`);\n if (from === name) return data;\n if (!/^\\w+$/.test(name)) throw new Error(`renameQuadrantClass: a class name is letters, digits and underscores, and \"${name}\" is not`);\n if (names.includes(name)) throw new Error(`renameQuadrantClass: a class is already called \"${name}\"`);\n const next = withClasses(data, Object.entries(data.classes!).map(([n, s]) => [n === from ? name : n, s] as const));\n return { ...next, points: next.points.map((p) => (p.className === from ? { ...p, className: name } : p)) };\n}\n\n/** `data` with class `index`'s style `key` set to `value`; `undefined` drops it, for the theme's. */\nexport function setQuadrantClassStyle<K extends keyof QuadrantPointStyle>(\n data: QuadrantData, index: number, key: K, value: QuadrantPointStyle[K] | undefined,\n): QuadrantData {\n const entries = Object.entries(data.classes ?? {});\n const target = entries[index];\n if (target === undefined) throw new Error(`setQuadrantClassStyle: no class ${index}`);\n if (target[1][key] === value) return data;\n return withClasses(data, updateAt(entries, index, ([n, s]) => [n, restyled(s, key, value) ?? {}] as [string, QuadrantPointStyle], 'setQuadrantClassStyle'));\n}\n","/** A quadrant chart as fields for its axes and quadrant labels, a table of points, and a table of named styles. */\nimport { numberOf, textOf, titleField } from '../editing/schemaKit';\nimport type { PlotColumn, PlotField, PlotSchema } from '../editing/schemaTypes';\nimport { setQuadrantAxisLabel, setQuadrantLabel, setQuadrantPoint, setQuadrantPointName } from './edit';\nimport {\n insertQuadrantClass, insertQuadrantPoint, moveQuadrantClass, moveQuadrantPoint, quadrantClassNames, removeQuadrantClass,\n removeQuadrantPoint, renameQuadrantClass, setQuadrantClassStyle, setQuadrantPointClass, setQuadrantPointStyle,\n} from './structure';\nimport type { QuadrantData, QuadrantPointStyle } from './types';\n\nconst axisField = (axis: 'x' | 'y', end: 'low' | 'high', label: string): PlotField<QuadrantData> => ({\n key: `${axis}.${end}`, label, type: { kind: 'string' }, optional: true,\n get: (d) => d[axis]?.[end],\n set: (d, v) => (v === undefined || typeof v === 'string' ? setQuadrantAxisLabel(d, axis, end, v?.trim() ?? '') : d),\n});\n\nconst quadrantField = (n: number, label: string): PlotField<QuadrantData> => ({\n key: `quadrant.${n}`, label, type: { kind: 'string' }, optional: true,\n get: (d) => d.quadrants?.[n - 1],\n set: (d, v) => (v === undefined || typeof v === 'string' ? setQuadrantLabel(d, n, v?.trim() ?? '') : d),\n});\n\nconst STYLE: readonly { key: keyof QuadrantPointStyle; label: string; color: boolean }[] = [\n { key: 'radius', label: 'Radius', color: false },\n { key: 'color', label: 'Color', color: true },\n { key: 'strokeColor', label: 'Stroke', color: true },\n { key: 'strokeWidth', label: 'Stroke width', color: false },\n];\n\n/** A style's columns, read and written on whatever `styleOf` and `restyle` reach. */\nconst styleColumns = (\n styleOf: (d: QuadrantData, row: number) => QuadrantPointStyle | undefined,\n restyle: (d: QuadrantData, row: number, key: keyof QuadrantPointStyle, value: string | number | undefined) => QuadrantData,\n): PlotColumn<QuadrantData>[] => STYLE.map(({ key, label, color }) => ({\n key, label, optional: true, type: color ? { kind: 'color' } : { kind: 'number', min: 0 },\n get: (d, _, r) => styleOf(d, r)?.[key],\n set: (d, _, r, v) => {\n if (v === undefined) return restyle(d, r, key, undefined);\n const value = color ? textOf(v) : numberOf(v);\n return value === undefined || (typeof value === 'number' && value < 0) ? d : restyle(d, r, key, value);\n },\n}));\n\nconst unit = (axis: 'x' | 'y', label: string): PlotColumn<QuadrantData> => ({\n key: axis, label, type: { kind: 'number', min: 0, max: 1, step: 0.01 },\n get: (d, _, r) => d.points[r]?.[axis],\n set: (d, _, r, v) => {\n const n = numberOf(v);\n const p = d.points[r];\n return n === undefined || n < 0 || n > 1 || p === undefined ? d : setQuadrantPoint(d, r, { x: p.x, y: p.y, [axis]: n });\n },\n});\n\nexport const quadrantSchema: PlotSchema<QuadrantData> = {\n fields: [\n titleField(),\n axisField('x', 'low', 'X low'), axisField('x', 'high', 'X high'),\n axisField('y', 'low', 'Y low'), axisField('y', 'high', 'Y high'),\n quadrantField(1, 'Top right'), quadrantField(2, 'Top left'), quadrantField(3, 'Bottom left'), quadrantField(4, 'Bottom right'),\n ],\n tables: [\n {\n key: 'points', label: 'Points', item: 'point',\n count: (d) => d.points.length,\n columns: (d) => [\n {\n key: 'name', label: 'Name', type: { kind: 'string' },\n get: (data, _, r) => data.points[r]?.name,\n set: (data, _, r, v) => { const t = textOf(v)?.trim(); return t ? setQuadrantPointName(data, r, t) : data; },\n },\n unit('x', 'X'),\n unit('y', 'Y'),\n {\n key: 'className', label: 'Class', type: { kind: 'enum', options: quadrantClassNames(d) }, optional: true,\n get: (data, _, r) => data.points[r]?.className,\n set: (data, _, r, v) => (v === undefined || (typeof v === 'string' && data.classes?.[v] !== undefined)\n ? setQuadrantPointClass(data, r, v as string | undefined) : data),\n },\n ...styleColumns((data, r) => data.points[r]?.style, (data, r, key, v) => setQuadrantPointStyle(data, r, key, v as never)),\n ],\n insert: (d, _, at) => insertQuadrantPoint(d, at),\n remove: (d, _, r) => removeQuadrantPoint(d, r),\n move: (d, _, from, to) => moveQuadrantPoint(d, from, to),\n rowLabel: (d, _, r) => d.points[r]?.name ?? '',\n },\n {\n key: 'classes', label: 'Classes', item: 'class',\n count: (d) => quadrantClassNames(d).length,\n columns: () => [\n {\n key: 'name', label: 'Name', type: { kind: 'string' },\n get: (d, _, r) => quadrantClassNames(d)[r],\n set: (d, _, r, v) => {\n const name = textOf(v)?.trim() ?? '';\n return /^\\w+$/.test(name) && !quadrantClassNames(d).includes(name) ? renameQuadrantClass(d, r, name) : d;\n },\n },\n ...styleColumns((d, r) => Object.values(d.classes ?? {})[r], (d, r, key, v) => setQuadrantClassStyle(d, r, key, v as never)),\n ],\n insert: (d, _, at) => insertQuadrantClass(d, at),\n remove: (d, _, r) => removeQuadrantClass(d, r),\n move: (d, _, from, to) => moveQuadrantClass(d, from, to),\n rowLabel: (d, _, r) => quadrantClassNames(d)[r] ?? '',\n },\n ],\n};\n","/**\n * Edits to a radar's axes and curves as collections, their ids, and the chart's options, as plain data in and out.\n * Every curve holds a value on each axis, so an axis that comes, goes, or moves takes a value of each curve with it.\n */\nimport { freshName, insertAt, moveAt, removeAt, updateAt, withOptional } from '../editing/lists';\nimport type { RadarAxis, RadarCurve, RadarData } from './types';\n\n/** A curve's values stretched with zeros to the chart's axes. */\nconst valuesOf = (data: RadarData, c: RadarCurve): number[] => data.axes.map((_, i) => c.values[i] ?? 0);\n\nconst ID = /^\\w+$/;\n\n/** `data` with `axis` inserted before axis `at`, every curve 0 on it; absent, an axis under a fresh id. */\nexport function insertRadarAxis(data: RadarData, at: number, axis?: RadarAxis): RadarData {\n const next = axis ?? { id: freshName('axis', data.axes.map((a) => a.id), data.axes.length + 1, '') };\n const axes = insertAt(data.axes, at, next, 'insertRadarAxis');\n return { ...data, axes, curves: data.curves.map((c) => ({ ...c, values: insertAt(valuesOf(data, c), at, 0, 'insertRadarAxis') })) };\n}\n\n/** `data` without axis `axis` and each curve's value on it. Throws on an axis it does not hold. */\nexport function removeRadarAxis(data: RadarData, axis: number): RadarData {\n const axes = removeAt(data.axes, axis, 'removeRadarAxis');\n return { ...data, axes, curves: data.curves.map((c) => ({ ...c, values: removeAt(valuesOf(data, c), axis, 'removeRadarAxis') })) };\n}\n\n/** `data` with axis `from` moved to index `to`, counted once it is taken out, each curve's value on it moving too. */\nexport function moveRadarAxis(data: RadarData, from: number, to: number): RadarData {\n if (from === to) return data;\n const axes = moveAt(data.axes, from, to, 'moveRadarAxis');\n return { ...data, axes, curves: data.curves.map((c) => ({ ...c, values: moveAt(valuesOf(data, c), from, to, 'moveRadarAxis') })) };\n}\n\n/** `data` with `curve` inserted before curve `at`; absent, a curve of zeros under a fresh id. */\nexport function insertRadarCurve(data: RadarData, at: number, curve?: RadarCurve): RadarData {\n const next = curve ?? { id: freshName('curve', data.curves.map((c) => c.id), data.curves.length + 1, ''), values: data.axes.map(() => 0) };\n return { ...data, curves: insertAt(data.curves, at, next, 'insertRadarCurve') };\n}\n\n/** `data` without curve `curve`. Throws on a curve it does not hold. */\nexport const removeRadarCurve = (data: RadarData, curve: number): RadarData =>\n ({ ...data, curves: removeAt(data.curves, curve, 'removeRadarCurve') });\n\n/** `data` with curve `from` moved to index `to`, counted once it is taken out. */\nexport const moveRadarCurve = (data: RadarData, from: number, to: number): RadarData =>\n (from === to ? data : { ...data, curves: moveAt(data.curves, from, to, 'moveRadarCurve') });\n\n/** `items` with item `index`'s id `id`. Throws on an id that is not a word or that another item holds. */\nfunction reid<T extends { id: string }>(items: readonly T[], index: number, id: string, who: string): readonly T[] {\n const target = items[index];\n if (target === undefined) throw new Error(`${who}: no item ${index}`);\n if (target.id === id) return items;\n if (!ID.test(id)) throw new Error(`${who}: an id is letters, digits and underscores, and \"${id}\" is not`);\n if (items.some((x) => x.id === id)) throw new Error(`${who}: an item already has id \"${id}\"`);\n return updateAt(items, index, (x) => ({ ...x, id }), who);\n}\n\n/** `data` with axis `axis`'s id set to `id`. Throws on an id that is not a word or another axis holds. */\nexport function setRadarAxisId(data: RadarData, axis: number, id: string): RadarData {\n const axes = reid(data.axes, axis, id, 'setRadarAxisId');\n return axes === data.axes ? data : { ...data, axes };\n}\n\n/** `data` with curve `curve`'s id set to `id`. Throws on an id that is not a word or another curve holds. */\nexport function setRadarCurveId(data: RadarData, curve: number, id: string): RadarData {\n const curves = reid(data.curves, curve, id, 'setRadarCurveId');\n return curves === data.curves ? data : { ...data, curves };\n}\n\n/** `data` with option `key` set to `value`; `undefined` drops it, for its default. */\nexport function setRadarOption<K extends 'min' | 'max' | 'ticks' | 'graticule' | 'showLegend'>(\n data: RadarData, key: K, value: RadarData[K] | undefined,\n): RadarData {\n if (key === 'ticks' && value !== undefined && (!Number.isInteger(value) || (value as number) < 1)) {\n throw new Error(`setRadarOption: ticks is a whole number at least 1, and ${String(value)} is not`);\n }\n return data[key] === value ? data : withOptional(data, key, value);\n}\n","/** A radar as its options, a table of axes holding a value of each curve, and a table of the curves. */\nimport { choiceOf, integerOf, numberOf, textOf, titleField } from '../editing/schemaKit';\nimport type { PlotColumn, PlotField, PlotSchema } from '../editing/schemaTypes';\nimport { setRadarAxisLabel, setRadarCurveLabel, setRadarValue } from './edit';\nimport {\n insertRadarAxis, insertRadarCurve, moveRadarAxis, moveRadarCurve, removeRadarAxis, removeRadarCurve, setRadarAxisId, setRadarCurveId,\n setRadarOption,\n} from './structure';\nimport type { RadarData } from './types';\n\nconst ID = /^\\w+$/;\n\nconst bound = (key: 'min' | 'max', label: string): PlotField<RadarData> => ({\n key, label, type: { kind: 'number' }, optional: true,\n get: (d) => d[key],\n set: (d, v) => (v === undefined || numberOf(v) !== undefined ? setRadarOption(d, key, numberOf(v)) : d),\n});\n\n/** The id and label columns of the axes or the curves. */\nfunction named(\n list: (d: RadarData) => readonly { id: string; label?: string }[],\n setId: (d: RadarData, r: number, id: string) => RadarData,\n setLabel: (d: RadarData, r: number, text: string) => RadarData,\n): PlotColumn<RadarData>[] {\n return [\n {\n key: 'id', label: 'Id', type: { kind: 'string' },\n get: (d, _, r) => list(d)[r]?.id,\n set: (d, _, r, v) => {\n const id = textOf(v)?.trim() ?? '';\n return ID.test(id) && !list(d).some((x, i) => i !== r && x.id === id) ? setId(d, r, id) : d;\n },\n },\n {\n key: 'label', label: 'Label', type: { kind: 'string' }, optional: true,\n get: (d, _, r) => list(d)[r]?.label,\n set: (d, _, r, v) => (v === undefined || typeof v === 'string' ? setLabel(d, r, v ?? '') : d),\n },\n ];\n}\n\nconst valueColumn = (d: RadarData, curve: number): PlotColumn<RadarData> => ({\n key: `curve.${curve}`, label: d.curves[curve]?.label ?? d.curves[curve]?.id ?? `Curve ${curve + 1}`, type: { kind: 'number' },\n get: (data, _, r) => data.curves[curve]?.values[r] ?? 0,\n set: (data, _, r, v) => { const n = numberOf(v); return n !== undefined ? setRadarValue(data, curve, r, n) : data; },\n});\n\nexport const radarSchema: PlotSchema<RadarData> = {\n fields: [\n titleField(),\n bound('min', 'Center value'),\n bound('max', 'Rim value'),\n {\n key: 'graticule', label: 'Graticule', type: { kind: 'enum', options: ['circle', 'polygon'] },\n get: (d) => d.graticule ?? 'circle',\n set: (d, v) => { const g = choiceOf(v, ['circle', 'polygon'] as const); return g ? setRadarOption(d, 'graticule', g === 'circle' ? undefined : g) : d; },\n },\n {\n key: 'ticks', label: 'Rings', type: { kind: 'number', min: 1, step: 1 }, optional: true,\n get: (d) => d.ticks,\n set: (d, v) => { const n = integerOf(v); return v === undefined || (n !== undefined && n >= 1) ? setRadarOption(d, 'ticks', n) : d; },\n },\n {\n key: 'showLegend', label: 'Legend', type: { kind: 'boolean' },\n get: (d) => d.showLegend ?? true,\n set: (d, v) => (typeof v === 'boolean' ? setRadarOption(d, 'showLegend', v ? undefined : false) : d),\n },\n ],\n tables: [\n {\n key: 'axes', label: 'Axes', item: 'axis',\n count: (d) => d.axes.length,\n columns: (d) => [\n ...named((data) => data.axes, setRadarAxisId, setRadarAxisLabel),\n ...d.curves.map((_, i) => valueColumn(d, i)),\n ],\n insert: (d, _, at) => insertRadarAxis(d, at),\n remove: (d, _, r) => removeRadarAxis(d, r),\n move: (d, _, from, to) => moveRadarAxis(d, from, to),\n rowLabel: (d, _, r) => d.axes[r]?.label ?? d.axes[r]?.id ?? '',\n },\n {\n key: 'curves', label: 'Curves', item: 'curve',\n count: (d) => d.curves.length,\n columns: () => named((data) => data.curves, setRadarCurveId, setRadarCurveLabel),\n insert: (d, _, at) => insertRadarCurve(d, at),\n remove: (d, _, r) => removeRadarCurve(d, r),\n move: (d, _, from, to) => moveRadarCurve(d, from, to),\n rowLabel: (d, _, r) => d.curves[r]?.label ?? d.curves[r]?.id ?? '',\n },\n ],\n};\n","/** Edits to a sankey's links as a collection, each link's ends, and its nodes, as plain data in and out. A node is\n * named by its label and exists while a link names it. */\nimport { freshName, insertAt, moveAt, removeAt, updateAt } from '../editing/lists';\nimport { sankeyNodes } from './layout';\nimport type { SankeyData, SankeyLink } from './types';\n\n/** `data` with `link` inserted before link `at`; absent, a flow of 1 from the last link's target to a fresh node. */\nexport function insertSankeyLink(data: SankeyData, at: number, link?: SankeyLink): SankeyData {\n const nodes = sankeyNodes(data);\n const source = data.links[data.links.length - 1]?.target ?? freshName('Node', nodes, nodes.length + 1);\n const next = link ?? { source, target: freshName('Node', [...nodes, source], nodes.length + 1), value: 1 };\n return { ...data, links: insertAt(data.links, at, next, 'insertSankeyLink') };\n}\n\n/** `data` without link `link`. Throws on a link it does not hold. */\nexport const removeSankeyLink = (data: SankeyData, link: number): SankeyData =>\n ({ ...data, links: removeAt(data.links, link, 'removeSankeyLink') });\n\n/** `data` with link `from` moved to index `to`, counted once it is taken out. */\nexport const moveSankeyLink = (data: SankeyData, from: number, to: number): SankeyData =>\n (from === to ? data : { ...data, links: moveAt(data.links, from, to, 'moveSankeyLink') });\n\n/** `data` with link `link` running from (`'source'`) or to (`'target'`) node `name`, trimmed; a node it names that no\n * link did is added. Throws on an empty name. */\nexport function setSankeyEnd(data: SankeyData, link: number, end: 'source' | 'target', name: string): SankeyData {\n const next = name.trim();\n if (next === '') throw new Error('setSankeyEnd: a node needs a name');\n const links = updateAt(data.links, link, (l) => (l[end] === next ? l : { ...l, [end]: next }), 'setSankeyEnd');\n return links[link] === data.links[link] ? data : { ...data, links };\n}\n\n/** `data` without node `name`: every link to or from it is taken out. Throws on a node it does not hold. */\nexport function removeSankeyNode(data: SankeyData, name: string): SankeyData {\n if (!sankeyNodes(data).includes(name)) throw new Error(`removeSankeyNode: no node \"${name}\"`);\n return { ...data, links: data.links.filter((l) => l.source !== name && l.target !== name) };\n}\n","/** A sankey as a table of links and a table of the nodes they name; a node is added by naming it in a link. */\nimport { numberOf, textOf, titleField } from '../editing/schemaKit';\nimport type { PlotColumn, PlotSchema } from '../editing/schemaTypes';\nimport { renameSankeyNode, setSankeyValue } from './edit';\nimport { sankeyNodes } from './layout';\nimport { insertSankeyLink, moveSankeyLink, removeSankeyLink, removeSankeyNode, setSankeyEnd } from './structure';\nimport type { SankeyData } from './types';\n\nconst endColumn = (end: 'source' | 'target', label: string): PlotColumn<SankeyData> => ({\n key: end, label, type: { kind: 'string' },\n get: (d, _, r) => d.links[r]?.[end],\n set: (d, _, r, v) => { const t = textOf(v)?.trim(); return t ? setSankeyEnd(d, r, end, t) : d; },\n});\n\nexport const sankeySchema: PlotSchema<SankeyData> = {\n fields: [titleField()],\n tables: [\n {\n key: 'links', label: 'Links', item: 'link',\n count: (d) => d.links.length,\n columns: () => [\n endColumn('source', 'From'),\n endColumn('target', 'To'),\n {\n key: 'value', label: 'Value', type: { kind: 'number', min: 0 },\n get: (d, _, r) => d.links[r]?.value,\n set: (d, _, r, v) => { const n = numberOf(v); return n !== undefined && n >= 0 ? setSankeyValue(d, r, n) : d; },\n },\n ],\n insert: (d, _, at) => insertSankeyLink(d, at),\n remove: (d, _, r) => removeSankeyLink(d, r),\n move: (d, _, from, to) => moveSankeyLink(d, from, to),\n rowLabel: (d, _, r) => `${d.links[r]?.source ?? ''} → ${d.links[r]?.target ?? ''}`,\n },\n {\n key: 'nodes', label: 'Nodes', item: 'node',\n count: (d) => sankeyNodes(d).length,\n columns: () => [{\n key: 'name', label: 'Node', type: { kind: 'string' },\n get: (d, _, r) => sankeyNodes(d)[r],\n set: (d, _, r, v) => {\n const name = textOf(v)?.trim();\n const nodes = sankeyNodes(d);\n return !name || nodes.includes(name) || nodes[r] === undefined ? d : renameSankeyNode(d, nodes[r], name);\n },\n }],\n remove: (d, _, r) => { const name = sankeyNodes(d)[r]; return name === undefined ? d : removeSankeyNode(d, name); },\n rowLabel: (d, _, r) => sankeyNodes(d)[r] ?? '',\n },\n ],\n};\n","/** Edits to a timeline's sections, periods, and events as collections, as plain data in and out. A period is named by\n * its section and its place in it. */\nimport { freshName, insertAt, moveAt, removeAt, updateAt } from '../editing/lists';\nimport type { TimelineData, TimelinePeriod, TimelineSection } from './types';\n\n/** The flat index, counted across every section, of period `index` of section `section`. */\nexport function timelineFlatIndex(data: TimelineData, section: number, index: number): number {\n if (data.sections[section]?.periods[index] === undefined) throw new Error(`timelineFlatIndex: section ${section} holds no period ${index}`);\n return data.sections.slice(0, section).reduce((n, s) => n + s.periods.length, 0) + index;\n}\n\nconst allLabels = (data: TimelineData): string[] => data.sections.flatMap((s) => s.periods.map((p) => p.label));\n\nconst freshPeriod = (data: TimelineData): TimelinePeriod => {\n const labels = allLabels(data);\n return { label: freshName('Period', labels, labels.length + 1), events: [] };\n};\n\n/** `data` with `section` inserted before section `at`; absent, one fresh period under a fresh name. */\nexport function insertTimelineSection(data: TimelineData, at: number, section?: TimelineSection): TimelineData {\n const next = section ?? {\n name: freshName('Section', data.sections.flatMap((s) => (s.name === undefined ? [] : [s.name])), data.sections.length + 1),\n periods: [freshPeriod(data)],\n };\n return { ...data, sections: insertAt(data.sections, at, next, 'insertTimelineSection') };\n}\n\n/** `data` without section `section` and its periods. Throws on a section it does not hold. */\nexport const removeTimelineSection = (data: TimelineData, section: number): TimelineData =>\n ({ ...data, sections: removeAt(data.sections, section, 'removeTimelineSection') });\n\n/** `data` with section `from` moved to index `to`, counted once it is taken out. */\nexport const moveTimelineSection = (data: TimelineData, from: number, to: number): TimelineData =>\n (from === to ? data : { ...data, sections: moveAt(data.sections, from, to, 'moveTimelineSection') });\n\nconst withPeriods = (data: TimelineData, section: number, change: (p: readonly TimelinePeriod[]) => TimelinePeriod[], who: string): TimelineData =>\n ({ ...data, sections: updateAt(data.sections, section, (s) => ({ ...s, periods: change(s.periods) }), who) });\n\n/** `data` with `period` inserted before period `at` of section `section`; absent, a fresh period with no events. */\nexport const insertTimelinePeriod = (data: TimelineData, section: number, at: number, period?: TimelinePeriod): TimelineData =>\n withPeriods(data, section, (ps) => insertAt(ps, at, period ?? freshPeriod(data), 'insertTimelinePeriod'), 'insertTimelinePeriod');\n\n/** `data` without period `period` of section `section`. Throws on a period it does not hold. */\nexport const removeTimelinePeriod = (data: TimelineData, section: number, period: number): TimelineData =>\n withPeriods(data, section, (ps) => removeAt(ps, period, 'removeTimelinePeriod'), 'removeTimelinePeriod');\n\n/** `data` with period `from` of section `section` moved to index `to` in it, counted once it is taken out. */\nexport const reorderTimelinePeriod = (data: TimelineData, section: number, from: number, to: number): TimelineData =>\n (from === to ? data : withPeriods(data, section, (ps) => moveAt(ps, from, to, 'reorderTimelinePeriod'), 'reorderTimelinePeriod'));\n\nconst withEvents = (\n data: TimelineData, section: number, period: number, change: (e: readonly string[]) => string[], who: string,\n): TimelineData => withPeriods(data, section, (ps) => updateAt(ps, period, (p) => ({ ...p, events: change(p.events) }), who), who);\n\n/** `data` with event `text` inserted before event `at` of one period; absent, a fresh one. */\nexport const insertTimelineEvent = (data: TimelineData, section: number, period: number, at: number, text?: string): TimelineData =>\n withEvents(data, section, period, (es) => insertAt(es, at, text ?? freshName('Event', es, es.length + 1), 'insertTimelineEvent'), 'insertTimelineEvent');\n\n/** `data` without event `event` of one period. Throws on an event it does not hold. */\nexport const removeTimelineEvent = (data: TimelineData, section: number, period: number, event: number): TimelineData =>\n withEvents(data, section, period, (es) => removeAt(es, event, 'removeTimelineEvent'), 'removeTimelineEvent');\n\n/** `data` with event `from` of one period moved to index `to` in it, counted once it is taken out. */\nexport const moveTimelineEvent = (data: TimelineData, section: number, period: number, from: number, to: number): TimelineData =>\n (from === to ? data : withEvents(data, section, period, (es) => moveAt(es, from, to, 'moveTimelineEvent'), 'moveTimelineEvent'));\n","/** A timeline as a table of sections, under each a table of periods, and under each period a table of its events. */\nimport { textOf, titleField } from '../editing/schemaKit';\nimport type { PlotSchema, PlotScope } from '../editing/schemaTypes';\nimport { setTimelineEvent, setTimelinePeriodLabel, setTimelineSectionName } from './edit';\nimport {\n insertTimelineEvent, insertTimelinePeriod, insertTimelineSection, moveTimelineEvent, moveTimelineSection, removeTimelineEvent,\n removeTimelinePeriod, removeTimelineSection, reorderTimelinePeriod, timelineFlatIndex,\n} from './structure';\nimport type { TimelineData, TimelinePeriod } from './types';\n\nconst periodOf = (d: TimelineData, section: number, period: number): TimelinePeriod | undefined => d.sections[section]?.periods[period];\nconst at = (s: PlotScope): [number, number] => [s[0]!, s[1]!];\n\nexport const timelineSchema: PlotSchema<TimelineData> = {\n fields: [titleField()],\n tables: [{\n key: 'sections', label: 'Sections', item: 'section',\n count: (d) => d.sections.length,\n columns: () => [{\n key: 'name', label: 'Section', type: { kind: 'string' },\n get: (d, _, r) => d.sections[r]?.name,\n set: (d, _, r, v) => setTimelineSectionName(d, r, textOf(v) ?? ''),\n }],\n insert: (d, _, i) => insertTimelineSection(d, i),\n remove: (d, _, r) => removeTimelineSection(d, r),\n move: (d, _, from, to) => moveTimelineSection(d, from, to),\n rowLabel: (d, _, r) => d.sections[r]?.name ?? 'Untitled section',\n children: [{\n key: 'periods', label: 'Periods', item: 'period',\n count: (d, s) => d.sections[s[0]!]?.periods.length ?? 0,\n columns: () => [{\n key: 'label', label: 'Period', type: { kind: 'string' },\n get: (d, s, r) => periodOf(d, s[0]!, r)?.label,\n set: (d, s, r, v) => setTimelinePeriodLabel(d, timelineFlatIndex(d, s[0]!, r), textOf(v) ?? ''),\n }],\n insert: (d, s, i) => insertTimelinePeriod(d, s[0]!, i),\n remove: (d, s, r) => removeTimelinePeriod(d, s[0]!, r),\n move: (d, s, from, to) => reorderTimelinePeriod(d, s[0]!, from, to),\n rowLabel: (d, s, r) => periodOf(d, s[0]!, r)?.label ?? '',\n children: [{\n key: 'events', label: 'Events', item: 'event',\n count: (d, s) => periodOf(d, ...at(s))?.events.length ?? 0,\n columns: () => [{\n key: 'text', label: 'Event', type: { kind: 'string' },\n get: (d, s, r) => periodOf(d, ...at(s))?.events[r],\n set: (d, s, r, v) => {\n const text = textOf(v)?.trim();\n return text ? setTimelineEvent(d, timelineFlatIndex(d, ...at(s)), r, text) : d;\n },\n }],\n insert: (d, s, i) => insertTimelineEvent(d, ...at(s), i),\n remove: (d, s, r) => removeTimelineEvent(d, ...at(s), r),\n move: (d, s, from, to) => moveTimelineEvent(d, ...at(s), from, to),\n }],\n }],\n }],\n};\n","/**\n * Edits to an xychart's rows, series, and axes, as plain data in and out. A row is one category (or one step along a\n * range axis) and holds a value of every series.\n */\nimport { freshName, insertAt, moveAt, removeAt, updateAt, withOptional } from '../editing/lists';\nimport { xyRows } from './edit';\nimport type { XyBandAxis, XyChartData, XyRangeAxis, XySeries, XyValueAxis } from './types';\n\n/** `values` stretched with zeros to `n`. */\nconst padded = (values: readonly number[], n: number): number[] => Array.from({ length: Math.max(n, values.length) }, (_, i) => values[i] ?? 0);\n\n/** The band axis's labels stretched to `n`, a missing one numbered as the chart numbers it. */\nconst labels = (categories: readonly string[], n: number): string[] => Array.from({ length: n }, (_, i) => categories[i] ?? String(i + 1));\n\n/** Whether the chart's rows carry labels of their own. */\nconst labeled = (data: XyChartData): boolean => data.x?.kind === 'band' && data.x.categories.length > 0;\n\n/** `data` with every series' values run through `values` and the band labels through `names`, each stretched to the\n * chart's rows first. */\nfunction eachRow(data: XyChartData, values: (list: number[]) => number[], names: (list: string[]) => string[]): XyChartData {\n const n = xyRows(data);\n const series = data.series.map((s) => ({ ...s, values: values(padded(s.values, n)) }));\n if (!labeled(data) || data.x?.kind !== 'band') return { ...data, series };\n return { ...data, series, x: { ...data.x, categories: names(labels(data.x.categories, n)) } };\n}\n\n/** `data` with a row before row `at`: a zero in every series and, where rows are labeled, `label` (absent, a fresh one). */\nexport function insertXyRow(data: XyChartData, at: number, label?: string): XyChartData {\n const n = xyRows(data);\n if (!Number.isInteger(at) || at < 0 || at > n) throw new Error(`insertXyRow: cannot insert at ${at} in ${n} rows`);\n const name = label ?? freshName('Category', data.x?.kind === 'band' ? data.x.categories : [], n + 1);\n return eachRow(data, (list) => insertAt(list, at, 0, 'insertXyRow'), (list) => insertAt(list, at, name, 'insertXyRow'));\n}\n\n/** `data` without row `at`, in every series and the labels. Throws on a row it does not hold. */\nexport function removeXyRow(data: XyChartData, at: number): XyChartData {\n const n = xyRows(data);\n if (!Number.isInteger(at) || at < 0 || at >= n) throw new Error(`removeXyRow: no row ${at} in ${n}`);\n return eachRow(data, (list) => removeAt(list, at, 'removeXyRow'), (list) => removeAt(list, at, 'removeXyRow'));\n}\n\n/** `data` with row `from` moved to index `to`, counted once it is taken out, in every series and the labels. */\nexport const moveXyRow = (data: XyChartData, from: number, to: number): XyChartData =>\n (from === to ? data : eachRow(data, (list) => moveAt(list, from, to, 'moveXyRow'), (list) => moveAt(list, from, to, 'moveXyRow')));\n\n/** `data` with row `index` labeled `label`, the axis turned to categories when it was numbered. */\nexport function setXyCategory(data: XyChartData, index: number, label: string): XyChartData {\n const n = xyRows(data);\n if (!Number.isInteger(index) || index < 0 || index >= n) throw new Error(`setXyCategory: no row ${index} in ${n}`);\n if (data.x?.kind === 'range') throw new Error('setXyCategory: the chart runs along a range, not categories');\n const categories = labels(data.x?.categories ?? [], n);\n if (labeled(data) && categories[index] === label) return data;\n categories[index] = label;\n return { ...data, x: { ...(data.x ?? { kind: 'band' }), categories } };\n}\n\n/** `data` with `series` inserted before series `at`; absent, a bar series of zeros under a fresh name. */\nexport function insertXySeries(data: XyChartData, at: number, series?: XySeries): XyChartData {\n const next = series ?? {\n kind: 'bar', name: freshName('Series', data.series.flatMap((s) => (s.name === undefined ? [] : [s.name])), data.series.length + 1),\n values: padded([], xyRows(data)),\n };\n return { ...data, series: insertAt(data.series, at, next, 'insertXySeries') };\n}\n\n/** `data` without series `series`. Throws on a series it does not hold. */\nexport const removeXySeries = (data: XyChartData, series: number): XyChartData =>\n ({ ...data, series: removeAt(data.series, series, 'removeXySeries') });\n\n/** `data` with series `from` moved to index `to`, counted once it is taken out. */\nexport const moveXySeries = (data: XyChartData, from: number, to: number): XyChartData =>\n (from === to ? data : { ...data, series: moveAt(data.series, from, to, 'moveXySeries') });\n\n/** `data` with series `series` changed by `change`; `data` itself when nothing changes. */\nfunction withSeries(data: XyChartData, series: number, change: (s: XySeries) => XySeries, who: string): XyChartData {\n const next = updateAt(data.series, series, change, who);\n return next[series] === data.series[series] ? data : { ...data, series: next };\n}\n\n/** `data` with series `series` named `name`, trimmed; an empty name drops it. */\nexport const setXySeriesName = (data: XyChartData, series: number, name: string | undefined): XyChartData =>\n withSeries(data, series, (s) => {\n const text = name?.trim() || undefined;\n return s.name === text ? s : withOptional(s, 'name', text);\n }, 'setXySeriesName');\n\n/** `data` with series `series` drawn as bars or as a line. */\nexport const setXySeriesKind = (data: XyChartData, series: number, kind: XySeries['kind']): XyChartData =>\n withSeries(data, series, (s) => (s.kind === kind ? s : { ...s, kind }), 'setXySeriesKind');\n\n/** `data` with categories along x and values along y, or (`'horizontal'`) the other way round. */\nexport const setXyOrientation = (data: XyChartData, orientation: 'vertical' | 'horizontal'): XyChartData =>\n ((data.orientation ?? 'vertical') === orientation ? data : withOptional(data, 'orientation', orientation === 'horizontal' ? orientation : undefined));\n\n/** `data` running along categories (each row labeled, numbered ones kept as written) or a numeric range from 0 to the\n * row count. The axis keeps its title. */\nexport function setXyXKind(data: XyChartData, kind: 'band' | 'range'): XyChartData {\n if ((data.x?.kind ?? 'band') === kind) return data;\n const title = data.x?.title;\n const n = xyRows(data);\n const x = kind === 'range' ? { kind, min: 0, max: n } as const : { kind, categories: labels([], n) } as const;\n return { ...data, x: title === undefined ? x : { ...x, title } };\n}\n\n/** `data` with an axis titled `title`, trimmed; an empty one drops it. */\nexport function setXyAxisTitle(data: XyChartData, axis: 'x' | 'y', title: string | undefined): XyChartData {\n const text = title?.trim() || undefined;\n const current = data[axis];\n if (current?.title === text) return data;\n if (axis === 'x') {\n const x: XyBandAxis | XyRangeAxis = data.x ?? { kind: 'band', categories: [] };\n return { ...data, x: withOptional<XyBandAxis | XyRangeAxis, 'title'>(x, 'title', text) };\n }\n return withAxis(data, withOptional(data.y ?? {}, 'title', text));\n}\n\n/** `data` with its value axis `y`, or none when `y` holds nothing. */\nconst withAxis = (data: XyChartData, y: XyValueAxis): XyChartData => withOptional(data, 'y', Object.keys(y).length === 0 ? undefined : y);\n\n/** `data` with the value axis's end `end` at `value`; `undefined` lets it fit the values. */\nexport function setXyValueBound(data: XyChartData, end: 'min' | 'max', value: number | undefined): XyChartData {\n if (data.y?.[end] === value) return data;\n return withAxis(data, withOptional(data.y ?? {}, end, value));\n}\n\n/** `data` with the range axis's end `end` at `value`. Throws on a chart not running along a range. */\nexport function setXyRangeBound(data: XyChartData, end: 'min' | 'max', value: number): XyChartData {\n if (data.x?.kind !== 'range') throw new Error('setXyRangeBound: the chart runs along categories, not a range');\n return data.x[end] === value ? data : { ...data, x: { ...data.x, [end]: value } };\n}\n","/** An xychart as fields for its axes, a table of rows holding a value of each series, and a table of the series. */\nimport { choiceOf, numberOf, textOf, titleField } from '../editing/schemaKit';\nimport type { PlotColumn, PlotField, PlotSchema } from '../editing/schemaTypes';\nimport { setXyValue, xyRows } from './edit';\nimport {\n insertXyRow, insertXySeries, moveXyRow, moveXySeries, removeXyRow, removeXySeries, setXyAxisTitle, setXyCategory, setXyOrientation,\n setXyRangeBound, setXySeriesKind, setXySeriesName, setXyValueBound, setXyXKind,\n} from './structure';\nimport type { XyChartData } from './types';\n\nconst isRange = (d: XyChartData): boolean => d.x?.kind === 'range';\nconst X_KINDS = ['categories', 'range'] as const;\n\nconst rangeField = (end: 'min' | 'max', label: string): PlotField<XyChartData> => ({\n key: `x.${end}`, label, type: { kind: 'number' }, applies: isRange,\n get: (d) => (d.x?.kind === 'range' ? d.x[end] : undefined),\n set: (d, v) => { const n = numberOf(v); return n !== undefined && isRange(d) ? setXyRangeBound(d, end, n) : d; },\n});\n\nconst boundField = (end: 'min' | 'max', label: string): PlotField<XyChartData> => ({\n key: `y.${end}`, label, type: { kind: 'number' }, optional: true,\n get: (d) => d.y?.[end],\n set: (d, v) => (v === undefined || numberOf(v) !== undefined ? setXyValueBound(d, end, numberOf(v)) : d),\n});\n\nconst axisTitle = (axis: 'x' | 'y', label: string): PlotField<XyChartData> => ({\n key: `${axis}.title`, label, type: { kind: 'string' }, optional: true,\n get: (d) => d[axis]?.title,\n set: (d, v) => (v === undefined || typeof v === 'string' ? setXyAxisTitle(d, axis, v) : d),\n});\n\nconst categoryColumn: PlotColumn<XyChartData> = {\n key: 'category', label: 'Category', type: { kind: 'string' },\n applies: (d) => !isRange(d),\n get: (d, _, r) => (d.x?.kind === 'band' ? d.x.categories[r] ?? String(r + 1) : isRange(d) ? undefined : String(r + 1)),\n set: (d, _, r, v) => { const t = textOf(v)?.trim(); return t && !isRange(d) ? setXyCategory(d, r, t) : d; },\n};\n\nconst valueColumn = (d: XyChartData, series: number): PlotColumn<XyChartData> => ({\n key: `series.${series}`, label: d.series[series]?.name ?? `Series ${series + 1}`, type: { kind: 'number' },\n get: (data, _, r) => data.series[series]?.values[r] ?? 0,\n set: (data, _, r, v) => { const n = numberOf(v); return n !== undefined ? setXyValue(data, series, r, n) : data; },\n});\n\nexport const xySchema: PlotSchema<XyChartData> = {\n fields: [\n titleField(),\n {\n key: 'orientation', label: 'Orientation', type: { kind: 'enum', options: ['vertical', 'horizontal'] },\n get: (d) => d.orientation ?? 'vertical',\n set: (d, v) => { const o = choiceOf(v, ['vertical', 'horizontal'] as const); return o ? setXyOrientation(d, o) : d; },\n },\n {\n key: 'x.kind', label: 'X axis', type: { kind: 'enum', options: X_KINDS },\n get: (d) => (isRange(d) ? 'range' : 'categories'),\n set: (d, v) => { const k = choiceOf(v, X_KINDS); return k ? setXyXKind(d, k === 'range' ? 'range' : 'band') : d; },\n },\n axisTitle('x', 'X title'),\n rangeField('min', 'X from'),\n rangeField('max', 'X to'),\n axisTitle('y', 'Y title'),\n boundField('min', 'Y from'),\n boundField('max', 'Y to'),\n ],\n tables: [\n {\n key: 'rows', label: 'Data', item: 'row',\n count: xyRows,\n columns: (d) => [categoryColumn, ...d.series.map((_, i) => valueColumn(d, i))],\n insert: (d, _, at) => insertXyRow(d, at),\n remove: (d, _, r) => removeXyRow(d, r),\n move: (d, _, from, to) => moveXyRow(d, from, to),\n rowLabel: (d, _, r) => String(categoryColumn.get(d, [], r) ?? r + 1),\n },\n {\n key: 'series', label: 'Series', item: 'series',\n count: (d) => d.series.length,\n columns: () => [\n {\n key: 'name', label: 'Name', type: { kind: 'string' }, optional: true,\n get: (d, _, r) => d.series[r]?.name,\n set: (d, _, r, v) => (v === undefined || typeof v === 'string' ? setXySeriesName(d, r, v) : d),\n },\n {\n key: 'kind', label: 'Drawn as', type: { kind: 'enum', options: ['bar', 'line'] },\n get: (d, _, r) => d.series[r]?.kind,\n set: (d, _, r, v) => { const k = choiceOf(v, ['bar', 'line'] as const); return k ? setXySeriesKind(d, r, k) : d; },\n },\n ],\n insert: (d, _, at) => insertXySeries(d, at),\n remove: (d, _, r) => removeXySeries(d, r),\n move: (d, _, from, to) => moveXySeries(d, from, to),\n rowLabel: (d, _, r) => d.series[r]?.name ?? `Series ${r + 1}`,\n },\n ],\n};\n","/** Each chart kind's data as a schema of fields and tables, and the walks a host makes over one. */\nimport { ganttSchema } from '../gantt/schema';\nimport { gitgraphSchema } from '../gitgraph/schema';\nimport { journeySchema } from '../journey/schema';\nimport { packetSchema } from '../packet/schema';\nimport { pieSchema } from '../pie/schema';\nimport type { PlotData, PlotKind } from '../plotData';\nimport { quadrantSchema } from '../quadrant/schema';\nimport { radarSchema } from '../radar/schema';\nimport { sankeySchema } from '../sankey/schema';\nimport { timelineSchema } from '../timeline/schema';\nimport { xySchema } from '../xychart/schema';\nimport type { PlotSchema, PlotScope, PlotTable } from './schemaTypes';\n\nconst SCHEMAS: { readonly [K in PlotKind]: PlotSchema<Extract<PlotData, { kind: K }>> } = {\n xychart: xySchema,\n gantt: ganttSchema,\n timeline: timelineSchema,\n pie: pieSchema,\n quadrant: quadrantSchema,\n journey: journeySchema,\n gitgraph: gitgraphSchema,\n sankey: sankeySchema,\n packet: packetSchema,\n radar: radarSchema,\n};\n\n/** `data`'s kind as fields and tables. Throws on a kind with none. */\nexport function plotSchemaOf(data: PlotData): PlotSchema {\n const schema = SCHEMAS[data.kind] as PlotSchema | undefined;\n if (schema === undefined) throw new Error(`plotSchemaOf: no schema for a chart of kind \"${(data as { kind: string }).kind}\"`);\n return schema;\n}\n\n/** Every table in `schema` with the scope of each place it appears in `data`, outermost first: a nested table once\n * under each row of its parent. */\nexport function plotTablesIn(schema: PlotSchema, data: PlotData): { table: PlotTable; scope: PlotScope }[] {\n const out: { table: PlotTable; scope: PlotScope }[] = [];\n const walk = (tables: readonly PlotTable[], scope: PlotScope) => {\n for (const table of tables) {\n out.push({ table, scope });\n if (table.children === undefined) continue;\n for (let r = 0; r < table.count(data, scope); r++) walk(table.children, [...scope, r]);\n }\n };\n walk(schema.tables, []);\n return out;\n}\n"]}
|