@dpuse/dpuse-tool-d3-visualiser 0.0.30 → 0.0.32
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 +104 -88
- package/dist/array-Cv4-2llb.js +16 -0
- package/dist/array-Cv4-2llb.js.map +1 -0
- package/dist/axis-DjmZ9QYe.js +75 -0
- package/dist/axis-DjmZ9QYe.js.map +1 -0
- package/dist/band-DbExrcif.js +57 -0
- package/dist/band-DbExrcif.js.map +1 -0
- package/dist/{billboardJs-DJFb72FS.js → billboardJs-jmaH9Gag.js} +17 -15
- package/dist/{billboardJs-DJFb72FS.js.map → billboardJs-jmaH9Gag.js.map} +1 -1
- package/dist/d3BarChart-DEzayAyh.js +49 -0
- package/dist/d3BarChart-DEzayAyh.js.map +1 -0
- package/dist/dpuse-tool-d3-visualiser.es.js +27 -6
- package/dist/dpuse-tool-d3-visualiser.es.js.map +1 -1
- package/dist/{drag-B46QGUMq.js → drag-DLokvdmv.js} +22 -22
- package/dist/{drag-B46QGUMq.js.map → drag-DLokvdmv.js.map} +1 -1
- package/dist/{erdDiagram-CxejXoNh.js → erdDiagram-Ds-nrw7Q.js} +3 -3
- package/dist/{erdDiagram-CxejXoNh.js.map → erdDiagram-Ds-nrw7Q.js.map} +1 -1
- package/dist/linear-D3BD7E1p.js +592 -0
- package/dist/linear-D3BD7E1p.js.map +1 -0
- package/dist/{link-RZgae8Z2.js → link-DKK0Q0lG.js} +19 -28
- package/dist/link-DKK0Q0lG.js.map +1 -0
- package/dist/math-Dc0ICuib.js +962 -0
- package/dist/math-Dc0ICuib.js.map +1 -0
- package/dist/{networkDiagram-QWVy8iRy.js → networkDiagram-HS-SgOZ0.js} +5 -5
- package/dist/{networkDiagram-QWVy8iRy.js.map → networkDiagram-HS-SgOZ0.js.map} +1 -1
- package/dist/{observablePlot-D7o8-dnK.js → observablePlot-B1CSEvcU.js} +1558 -1607
- package/dist/observablePlot-B1CSEvcU.js.map +1 -0
- package/dist/{sankeyDiagram-DlIuwzOl.js → sankeyDiagram-BXTYCHPV.js} +2 -2
- package/dist/{sankeyDiagram-DlIuwzOl.js.map → sankeyDiagram-BXTYCHPV.js.map} +1 -1
- package/dist/{src-B7SGbtRQ.js → src-Br_t1-IV.js} +7 -7
- package/dist/{src-B7SGbtRQ.js.map → src-Br_t1-IV.js.map} +1 -1
- package/dist/src-Du_hPZAX.js +804 -0
- package/dist/src-Du_hPZAX.js.map +1 -0
- package/dist/string-CnCj7THX.js +394 -0
- package/dist/string-CnCj7THX.js.map +1 -0
- package/dist/tanStackCharts-vvQteV9z.js +2343 -0
- package/dist/tanStackCharts-vvQteV9z.js.map +1 -0
- package/dist/{treeDiagram-Bi5VXDVy.js → treeDiagram-DemHfVnX.js} +2 -2
- package/dist/{treeDiagram-Bi5VXDVy.js.map → treeDiagram-DemHfVnX.js.map} +1 -1
- package/dist/types/src/d3BarChart.d.ts +7 -0
- package/dist/types/src/index.d.ts +5 -0
- package/dist/types/src/tanStackCharts.d.ts +8 -0
- package/dist/types/tests/d3BarChart.test.d.ts +1 -0
- package/dist/types/tests/tanStackCharts.test.d.ts +1 -0
- package/package.json +6 -1
- package/dist/axis-B7xlWKkC.js +0 -1621
- package/dist/axis-B7xlWKkC.js.map +0 -1
- package/dist/link-RZgae8Z2.js.map +0 -1
- package/dist/observablePlot-D7o8-dnK.js.map +0 -1
- package/dist/src-DnMaAyIP.js +0 -1194
- package/dist/src-DnMaAyIP.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tanStackCharts-vvQteV9z.js","names":["constant","orderNone","offsetNone","array","isChartValue","isFiniteNumber","isChartKey","isChartValue","isFiniteNumber","isChartKey","stackOffsetExpand","stackOffsetSilhouette","stackOffsetWiggle","stackOffsetDiverging","d3Stack","isChartValue","isFiniteNumber","isChartKey","scaleBand"],"sources":["../node_modules/d3-shape/src/offset/none.js","../node_modules/d3-shape/src/order/none.js","../node_modules/d3-shape/src/stack.js","../node_modules/d3-shape/src/offset/expand.js","../node_modules/d3-shape/src/offset/diverging.js","../node_modules/d3-shape/src/offset/silhouette.js","../node_modules/d3-shape/src/offset/wiggle.js","../node_modules/@tanstack/charts/dist/group.js","../node_modules/@tanstack/charts/dist/scale-input.js","../node_modules/@tanstack/charts/dist/scales.js","../node_modules/@tanstack/charts/dist/mark.js","../node_modules/@tanstack/charts/dist/stack-internal.js","../node_modules/@tanstack/charts/dist/configured-scale.js","../node_modules/@tanstack/charts/dist/guide-layout.js","../node_modules/@tanstack/charts/dist/nearest.js","../node_modules/@tanstack/charts/dist/scene-source.js","../node_modules/@tanstack/charts/dist/scene.js","../node_modules/@tanstack/charts/dist/runtime.js","../node_modules/@tanstack/charts/dist/dom-text.js","../node_modules/@tanstack/charts/dist/focus.js","../node_modules/@tanstack/charts/dist/renderer.js","../node_modules/@tanstack/charts/dist/reconcile.js","../node_modules/@tanstack/charts/dist/svg-renderer.js","../node_modules/@tanstack/charts/dist/svg.js","../node_modules/@tanstack/charts/dist/focus-layer.js","../node_modules/@tanstack/charts/dist/mark-state.js","../node_modules/@tanstack/charts/dist/svg-surface.js","../node_modules/@tanstack/charts/dist/dom.js","../node_modules/@tanstack/charts/dist/bar.js","../src/tanStackCharts.ts"],"sourcesContent":["export default function(series, order) {\n if (!((n = series.length) > 1)) return;\n for (var i = 1, j, s0, s1 = series[order[0]], n, m = s1.length; i < n; ++i) {\n s0 = s1, s1 = series[order[i]];\n for (j = 0; j < m; ++j) {\n s1[j][1] += s1[j][0] = isNaN(s0[j][1]) ? s0[j][0] : s0[j][1];\n }\n }\n}\n","export default function(series) {\n var n = series.length, o = new Array(n);\n while (--n >= 0) o[n] = n;\n return o;\n}\n","import array from \"./array.js\";\nimport constant from \"./constant.js\";\nimport offsetNone from \"./offset/none.js\";\nimport orderNone from \"./order/none.js\";\n\nfunction stackValue(d, key) {\n return d[key];\n}\n\nfunction stackSeries(key) {\n const series = [];\n series.key = key;\n return series;\n}\n\nexport default function() {\n var keys = constant([]),\n order = orderNone,\n offset = offsetNone,\n value = stackValue;\n\n function stack(data) {\n var sz = Array.from(keys.apply(this, arguments), stackSeries),\n i, n = sz.length, j = -1,\n oz;\n\n for (const d of data) {\n for (i = 0, ++j; i < n; ++i) {\n (sz[i][j] = [0, +value(d, sz[i].key, j, data)]).data = d;\n }\n }\n\n for (i = 0, oz = array(order(sz)); i < n; ++i) {\n sz[oz[i]].index = i;\n }\n\n offset(sz, oz);\n return sz;\n }\n\n stack.keys = function(_) {\n return arguments.length ? (keys = typeof _ === \"function\" ? _ : constant(Array.from(_)), stack) : keys;\n };\n\n stack.value = function(_) {\n return arguments.length ? (value = typeof _ === \"function\" ? _ : constant(+_), stack) : value;\n };\n\n stack.order = function(_) {\n return arguments.length ? (order = _ == null ? orderNone : typeof _ === \"function\" ? _ : constant(Array.from(_)), stack) : order;\n };\n\n stack.offset = function(_) {\n return arguments.length ? (offset = _ == null ? offsetNone : _, stack) : offset;\n };\n\n return stack;\n}\n","import none from \"./none.js\";\n\nexport default function(series, order) {\n if (!((n = series.length) > 0)) return;\n for (var i, n, j = 0, m = series[0].length, y; j < m; ++j) {\n for (y = i = 0; i < n; ++i) y += series[i][j][1] || 0;\n if (y) for (i = 0; i < n; ++i) series[i][j][1] /= y;\n }\n none(series, order);\n}\n","export default function(series, order) {\n if (!((n = series.length) > 0)) return;\n for (var i, j = 0, d, dy, yp, yn, n, m = series[order[0]].length; j < m; ++j) {\n for (yp = yn = 0, i = 0; i < n; ++i) {\n if ((dy = (d = series[order[i]][j])[1] - d[0]) > 0) {\n d[0] = yp, d[1] = yp += dy;\n } else if (dy < 0) {\n d[1] = yn, d[0] = yn += dy;\n } else {\n d[0] = 0, d[1] = dy;\n }\n }\n }\n}\n","import none from \"./none.js\";\n\nexport default function(series, order) {\n if (!((n = series.length) > 0)) return;\n for (var j = 0, s0 = series[order[0]], n, m = s0.length; j < m; ++j) {\n for (var i = 0, y = 0; i < n; ++i) y += series[i][j][1] || 0;\n s0[j][1] += s0[j][0] = -y / 2;\n }\n none(series, order);\n}\n","import none from \"./none.js\";\n\nexport default function(series, order) {\n if (!((n = series.length) > 0) || !((m = (s0 = series[order[0]]).length) > 0)) return;\n for (var y = 0, j = 1, s0, m, n; j < m; ++j) {\n for (var i = 0, s1 = 0, s2 = 0; i < n; ++i) {\n var si = series[order[i]],\n sij0 = si[j][1] || 0,\n sij1 = si[j - 1][1] || 0,\n s3 = (sij0 - sij1) / 2;\n for (var k = 0; k < i; ++k) {\n var sk = series[order[k]],\n skj0 = sk[j][1] || 0,\n skj1 = sk[j - 1][1] || 0;\n s3 += skj0 - skj1;\n }\n s1 += sij0, s2 += s3 * sij0;\n }\n s0[j - 1][1] += s0[j - 1][0] = y;\n if (s1) y -= s2 / s1;\n }\n s0[j - 1][1] += s0[j - 1][0] = y;\n none(series, order);\n}\n","function group(options = {}) {\n return { type: \"group\", ...options };\n}\nexport {\n group\n};\n","import { isChartValue, isFiniteNumber } from \"./mark.js\";\nfunction resolveScaleInput(source, options) {\n const infer = isScaleFactory(source);\n const created = infer ? source() : source;\n if (typeof created !== \"function\" || typeof created.copy !== \"function\" || typeof created.domain !== \"function\" || typeof created.range !== \"function\") {\n throw new TypeError(\n \"A scale factory must return a copyable scale with domain and range methods\"\n );\n }\n const scale = created.copy();\n if (infer) {\n const domain = inferScaleDomain(scale, options.values, options.includeZero);\n if (domain) {\n const inferable = scale;\n inferable.domain(domain);\n }\n }\n applyScaleNice(scale, options.nice, options.niceCount);\n return scale;\n}\nfunction isScaleFactory(source) {\n return typeof source === \"function\" && !(\"copy\" in source);\n}\nfunction resolveNumericScale(source, values) {\n if (!source) return void 0;\n if (typeof source === \"function\") return source;\n const scale = resolveScaleInput(source.scale, {\n values,\n includeZero: true,\n nice: source.nice,\n niceCount: 5\n });\n return (value) => scale(value) ?? Number.NaN;\n}\nfunction inferScaleDomain(scale, values, includeZero = false) {\n const observed = values.filter(isChartValue);\n if (!observed.length) return void 0;\n if (typeof scale.bandwidth === \"function\" || typeof scale.ticks !== \"function\") {\n const domain = [];\n const seen = /* @__PURE__ */ new Set();\n for (const value of observed) {\n const key = value instanceof Date ? `date:${value.getTime()}` : `${typeof value}:${String(value)}`;\n if (seen.has(key)) continue;\n seen.add(key);\n domain.push(value);\n }\n return domain;\n }\n const temporal = scale.domain().some((value) => value instanceof Date);\n if (temporal) {\n const dates = observed.filter(\n (value) => value instanceof Date\n );\n if (dates.length !== observed.length) {\n throw new TypeError(\n \"A temporal scale factory requires Date channel values\"\n );\n }\n let minimum2 = Infinity;\n let maximum2 = -Infinity;\n for (const value of dates) {\n const number = value.getTime();\n minimum2 = Math.min(minimum2, number);\n maximum2 = Math.max(maximum2, number);\n }\n if (!Number.isFinite(minimum2) || !Number.isFinite(maximum2)) {\n throw new TypeError(\n \"A temporal scale factory requires Date channel values\"\n );\n }\n if (minimum2 === maximum2) {\n const halfDay = 432e5;\n minimum2 -= halfDay;\n maximum2 += halfDay;\n }\n return [new Date(minimum2), new Date(maximum2)];\n }\n let minimum = Infinity;\n let maximum = -Infinity;\n for (const value of observed) {\n if (!isFiniteNumber(value)) {\n throw new TypeError(\n \"A quantitative scale factory requires numeric values\"\n );\n }\n minimum = Math.min(minimum, value);\n maximum = Math.max(maximum, value);\n }\n if (!Number.isFinite(minimum) || !Number.isFinite(maximum)) {\n throw new TypeError(\"A quantitative scale factory requires numeric values\");\n }\n const logarithmic = isLogarithmicScale(scale);\n if (includeZero) {\n if (logarithmic) {\n throw new TypeError(\n \"An inferred log scale cannot include an implicit zero baseline\"\n );\n }\n minimum = Math.min(0, minimum);\n maximum = Math.max(0, maximum);\n }\n validateInferredLogDomain(scale, minimum, maximum);\n if (minimum === maximum) {\n if (minimum === 0) return [0, 1];\n const offset = Math.abs(minimum) * 0.05 || 1;\n minimum -= offset;\n maximum += offset;\n }\n return [minimum, maximum];\n}\nfunction isLogarithmicScale(scale) {\n return \"base\" in scale && typeof scale.base === \"function\";\n}\nfunction validateInferredLogDomain(scale, minimum, maximum) {\n if (isLogarithmicScale(scale) && (minimum === 0 || maximum === 0 || minimum < 0 && maximum > 0)) {\n throw new TypeError(\"An inferred log domain cannot include or cross zero\");\n }\n}\nfunction applyScaleNice(scale, nice, defaultCount = 5) {\n if (!nice) return;\n const candidate = scale;\n if (typeof candidate.nice !== \"function\") {\n throw new TypeError(\"This scale does not support nicening\");\n }\n candidate.nice(typeof nice === \"number\" ? nice : defaultCount);\n}\nexport {\n isLogarithmicScale,\n isScaleFactory,\n resolveNumericScale,\n resolveScaleInput,\n validateInferredLogDomain\n};\n","import { validateInferredLogDomain } from \"./scale-input.js\";\nfunction createColorScale(values, options, theme) {\n if (options?.scale) {\n const infer = isColorScaleFactory(options.scale);\n const source = infer ? options.scale() : options.scale;\n if (typeof source !== \"function\" || typeof source.copy !== \"function\") {\n throw new TypeError(\"A color scale must be callable and copyable\");\n }\n if (infer && (typeof source.domain !== \"function\" || typeof source.range !== \"function\")) {\n throw new TypeError(\n \"A color scale factory must return a scale with domain and range methods\"\n );\n }\n const scale = source.copy();\n const kind = colorScaleKind(scale);\n if (infer) {\n const inferable = scale;\n if (options.range?.length) {\n inferable.range(options.range);\n }\n const domain3 = options.domain ?? inferColorDomain(inferable, values);\n if (options.domain !== void 0 || domain3.length) {\n inferable.domain(domain3);\n }\n const range3 = inferable.range();\n if (!range3.length || range3.some((value) => typeof value !== \"string\")) {\n throw new TypeError(\"A color-scale factory requires a string range\");\n }\n }\n if (options.nice) {\n const nice = scale.nice;\n if (typeof nice !== \"function\") {\n throw new TypeError(\"This color scale does not support nicening\");\n }\n nice.call(scale, typeof options.nice === \"number\" ? options.nice : 5);\n }\n const domain2 = scale.domain?.() ?? options.domain ?? [];\n const range2 = (scale.range?.() ?? options.range ?? theme.palette).map(\n String\n );\n return {\n type: \"configured\",\n kind,\n domain: domain2,\n range: range2,\n map: (value) => value == null ? range2[0] ?? \"currentColor\" : String(scale(value))\n };\n }\n if (options?.type) {\n return options.type.resolve({\n values,\n domain: options.domain,\n range: options.range,\n theme\n });\n }\n const range = options?.range?.length ? options.range : theme.palette;\n const domain = uniqueChartKeys(options?.domain ?? values);\n const mappedKeys = domain.map(valueKey);\n const map = (value) => {\n if (value == null) return range[0] ?? \"currentColor\";\n let index = mappedKeys.indexOf(valueKey(value));\n if (index < 0) index = mappedKeys.push(valueKey(value)) - 1;\n return range[index % range.length] ?? \"currentColor\";\n };\n return { type: \"ordinal\", kind: \"categorical\", domain, range, map };\n}\nfunction uniqueChartKeys(values) {\n return [...new Set(values.filter(isChartKey))];\n}\nfunction isChartKey(value) {\n return typeof value === \"string\" || typeof value === \"number\";\n}\nfunction isColorScaleFactory(source) {\n return typeof source === \"function\" && !(\"copy\" in source);\n}\nfunction inferColorDomain(scale, values) {\n const observed = values.filter(isChartKey);\n const quantiles = scale.quantiles;\n const thresholds = scale.thresholds;\n if (quantiles) {\n return quantitativeColorValues(observed);\n }\n if (scale.invertExtent && !thresholds) {\n throw new TypeError(\n \"Threshold color-scale factory requires an explicit domain\"\n );\n }\n if (scale.ticks || thresholds) {\n const numeric = quantitativeColorValues(observed);\n let minimum = Infinity;\n let maximum = -Infinity;\n for (const value of numeric) {\n minimum = Math.min(minimum, value);\n maximum = Math.max(maximum, value);\n }\n if (!Number.isFinite(minimum) || !Number.isFinite(maximum)) {\n return [];\n }\n validateInferredLogDomain(scale, minimum, maximum);\n if (minimum === maximum) {\n if (minimum === 0) {\n maximum = 1;\n } else {\n const offset = Math.abs(minimum) * 0.05 || 1;\n minimum -= offset;\n maximum += offset;\n }\n }\n if (thresholds) return [minimum, maximum];\n const stopCount = Math.max(2, scale.domain().length, scale.range().length);\n return Array.from(\n { length: stopCount },\n (_value, index) => minimum + (maximum - minimum) * index / (stopCount - 1)\n );\n }\n return uniqueChartKeys(observed);\n}\nfunction quantitativeColorValues(values) {\n const numeric = values.filter(\n (value) => typeof value === \"number\" && Number.isFinite(value)\n );\n if (numeric.length !== values.length) colorScaleTypeMismatch();\n return numeric;\n}\nfunction colorScaleTypeMismatch() {\n throw new TypeError(\n \"A quantitative color-scale factory requires numeric values\"\n );\n}\nfunction colorScaleKind(scale) {\n if (scale.quantiles) {\n return scale.invertExtent ? \"quantile\" : \"continuous\";\n }\n if (scale.thresholds) return \"quantize\";\n if (scale.invertExtent) return \"threshold\";\n return scale.ticks ? \"continuous\" : \"categorical\";\n}\nfunction valueKey(value) {\n if (value instanceof Date) return `date:${value.getTime()}`;\n return `${typeof value}:${String(value)}`;\n}\nexport {\n createColorScale,\n isChartKey,\n valueKey\n};\n","import { isChartKey, valueKey } from \"./scales.js\";\nconst warnedKeyFallbacks = /* @__PURE__ */ new WeakSet();\nfunction isChartValue(value) {\n return typeof value === \"string\" || value instanceof Date && Number.isFinite(value.getTime()) || isFiniteNumber(value);\n}\nfunction isFiniteNumber(value) {\n return typeof value === \"number\" && Number.isFinite(value);\n}\nfunction isNonnegativeFiniteNumber(value) {\n return isFiniteNumber(value) && value >= 0;\n}\nfunction createMark(initialize, motion) {\n return motion === void 0 ? { initialize } : { initialize, motion };\n}\nfunction markStates(data, definitions) {\n return definitions?.length ? {\n data,\n definitions\n } : void 0;\n}\nfunction visualValue(channel, datum, index, data, fallback) {\n return typeof channel === \"function\" ? channel(datum, index, data) : channel ?? fallback;\n}\nfunction channelValues(data, channel, fallback) {\n if (typeof channel === \"function\") {\n return data.map((datum, index) => channel(datum, index, data));\n }\n if (channel !== void 0) {\n return data.map(\n (datum) => datum != null && typeof datum === \"object\" ? datum[channel] : void 0\n );\n }\n return data.map(fallback);\n}\nfunction inferredKeyValues(data, key, options = {}) {\n if (key !== void 0) {\n return channelValues(data, key, (_datum, index) => index);\n }\n const candidates = [\n data.map(\n (datum) => datum != null && typeof datum === \"object\" ? datum.id : void 0\n ),\n data.map((datum) => {\n if (datum == null || typeof datum !== \"object\") return void 0;\n const nested = datum.data;\n return nested != null && typeof nested === \"object\" ? nested.id : void 0;\n }),\n ...options.candidates ?? []\n ];\n for (const candidate of candidates) {\n if (candidate.length !== data.length) continue;\n const normalized = candidate.map(normalizeInferredKey);\n if (normalized.every((value) => value !== void 0) && keysAreUniqueWithinGroups(normalized, options.groups)) {\n return normalized;\n }\n }\n warnAboutKeyFallback(\n options.markId,\n options.candidates,\n options.warningIdentity\n );\n return data.map((_datum, index) => index);\n}\nfunction compositeKeyValues(...channels) {\n const length = channels[0]?.length ?? 0;\n return Array.from({ length }, (_value, index) => {\n const parts = channels.map(\n (channel) => normalizeInferredKey(channel[index])\n );\n return parts.every((part) => part !== void 0) ? JSON.stringify(parts.map(valueKey)) : void 0;\n });\n}\nfunction normalizeInferredKey(value) {\n if (isChartKey(value)) return value;\n if (value instanceof Date && Number.isFinite(value.getTime())) {\n return `date:${value.getTime()}`;\n }\n return void 0;\n}\nfunction keysAreUniqueWithinGroups(keys, groups) {\n const seen = /* @__PURE__ */ new Set();\n for (let index = 0; index < keys.length; index += 1) {\n const identity = `${valueKey(groups?.[index] ?? null)}:${valueKey(keys[index])}`;\n if (seen.has(identity)) return false;\n seen.add(identity);\n }\n return true;\n}\nfunction warnAboutKeyFallback(markId, candidates, warningIdentity) {\n if (!markId || !candidates?.length || !warningIdentity || warnedKeyFallbacks.has(warningIdentity) || typeof process === \"undefined\" || process.env.NODE_ENV === \"production\") {\n return;\n }\n warnedKeyFallbacks.add(warningIdentity);\n console.warn(\n `TanStack Charts could not infer a unique key for mark \"${markId}\". Using row position; supply key for stable identity across updates.`\n );\n}\nexport {\n channelValues,\n compositeKeyValues,\n createMark,\n inferredKeyValues,\n isChartKey,\n isChartValue,\n isFiniteNumber,\n isNonnegativeFiniteNumber,\n markStates,\n visualValue\n};\n","import {\n stack as d3Stack,\n stackOffsetDiverging,\n stackOffsetExpand,\n stackOffsetSilhouette,\n stackOffsetWiggle\n} from \"d3-shape\";\nimport { valueKey } from \"./scales.js\";\nfunction stackExtents(input, options = {}) {\n const positions = [];\n const positionIndex = /* @__PURE__ */ new Map();\n const seriesInput = [];\n const seriesSeen = /* @__PURE__ */ new Set();\n for (const row of input) {\n const positionIdentity = valueKey(row.position);\n if (!positionIndex.has(positionIdentity)) {\n positionIndex.set(positionIdentity, positions.length);\n positions.push(row.position);\n }\n const seriesIdentity = valueKey(row.series);\n if (!seriesSeen.has(seriesIdentity)) {\n seriesSeen.add(seriesIdentity);\n seriesInput.push(row.series);\n }\n }\n const series = orderedSeries(input, seriesInput, options.order);\n if (options.reverse) series.reverse();\n const rows = positions.map(\n () => /* @__PURE__ */ Object.create(null)\n );\n const sourceIndices = /* @__PURE__ */ new Map();\n for (const row of input) {\n const position = positionIndex.get(valueKey(row.position));\n const seriesIdentity = valueKey(row.series);\n const identity = `${position}:${seriesIdentity}`;\n if (sourceIndices.has(identity)) {\n throw new TypeError(\n `A stack requires at most one value for each position and series; duplicate ${String(row.position)} / ${String(row.series)}`\n );\n }\n sourceIndices.set(identity, row.index);\n rows[position][seriesIdentity] = row.value;\n }\n const identities = series.map(valueKey);\n const offset = options.offset === \"normalize\" ? stackOffsetExpand : options.offset === \"center\" ? stackOffsetSilhouette : options.offset === \"wiggle\" ? stackOffsetWiggle : stackOffsetDiverging;\n const stacked = d3Stack().keys(identities).value((row, key) => row[key] ?? 0).offset(offset)(rows);\n const output = /* @__PURE__ */ new Map();\n stacked.forEach((seriesValues, seriesIndex) => {\n const seriesIdentity = identities[seriesIndex];\n seriesValues.forEach((extent, position) => {\n const sourceIndex = sourceIndices.get(`${position}:${seriesIdentity}`);\n if (sourceIndex === void 0) return;\n output.set(sourceIndex, { start: extent[0], end: extent[1] });\n });\n });\n return output;\n}\nfunction stackValues(positions, values, series, options = {}, fallbackSeries = \"value\") {\n const input = [];\n for (let index = 0; index < positions.length; index += 1) {\n const position = positions[index];\n const value = values[index];\n if (!isChartValue(position) || !isFiniteNumber(value)) continue;\n const seriesValue = series[index];\n input.push({\n index,\n position,\n value,\n series: isChartKey(seriesValue) ? seriesValue : fallbackSeries === \"index\" ? index : \"value\"\n });\n }\n const extents = stackExtents(input, options);\n const starts = Array.from(\n { length: positions.length },\n () => void 0\n );\n const ends = Array.from(\n { length: positions.length },\n () => void 0\n );\n for (const [index, extent] of extents) {\n starts[index] = extent.start;\n ends[index] = extent.end;\n }\n return { starts, ends };\n}\nfunction isChartKey(value) {\n return typeof value === \"string\" || typeof value === \"number\";\n}\nfunction isChartValue(value) {\n return typeof value === \"string\" || isFiniteNumber(value) || value instanceof Date && Number.isFinite(value.getTime());\n}\nfunction isFiniteNumber(value) {\n return typeof value === \"number\" && Number.isFinite(value);\n}\nfunction orderedSeries(rows, input, order) {\n if (Array.isArray(order)) {\n const explicit = [...order];\n const explicitKeys = new Set(explicit.map(valueKey));\n return [\n ...explicit,\n ...input.filter((value) => !explicitKeys.has(valueKey(value)))\n ];\n }\n if (order !== \"ascending\" && order !== \"descending\") return [...input];\n const totals = new Map(input.map((value) => [valueKey(value), 0]));\n for (const row of rows) {\n const key = valueKey(row.series);\n totals.set(key, (totals.get(key) ?? 0) + Math.abs(row.value));\n }\n return [...input].sort((left, right) => {\n const difference = (totals.get(valueKey(left)) ?? 0) - (totals.get(valueKey(right)) ?? 0);\n return order === \"ascending\" ? difference : -difference;\n });\n}\nexport {\n stackExtents,\n stackValues\n};\n","import { resolveScaleInput } from \"./scale-input.js\";\nfunction resolveConfiguredScale(source, context) {\n const scale = resolveScaleInput(source, {\n values: context.values,\n includeZero: context.includeZero,\n nice: context.options?.nice,\n niceCount: context.tickCount\n });\n const categorical = scale.bandwidth !== void 0;\n const naturalRange = categorical && context.id === \"y\" ? [Math.min(...context.range), Math.max(...context.range)] : context.range;\n const range = context.options?.reverse ? [naturalRange[1], naturalRange[0]] : naturalRange;\n scale.range(range);\n const domain = scale.domain();\n const tickOptions = context.options?.axis === false ? void 0 : context.options?.axis?.ticks;\n const configuredTicks = tickOptions === false ? void 0 : tickOptions;\n const tickValues = configuredTicks?.values ?? scale.ticks?.(context.tickCount) ?? domain;\n const tickFormat = scale.tickFormat?.(context.tickCount);\n const bandwidth = scale.bandwidth?.() ?? 0;\n const map = (value) => {\n const result = scale(value);\n return result === void 0 ? Number.NaN : result + bandwidth / 2;\n };\n return {\n id: context.id,\n type: categorical ? \"band\" : \"configured\",\n domain,\n map,\n ticks: tickValues.map((value) => ({\n value,\n position: map(value),\n label: configuredTicks?.format?.(value) ?? tickFormat?.(value) ?? formatValue(value)\n })),\n bandwidth\n };\n}\nfunction formatValue(value) {\n return value instanceof Date ? value.toLocaleDateString() : String(value);\n}\nexport {\n resolveConfiguredScale\n};\n","const defaultFontSize = 16;\nconst defaultFontWeight = 400;\nconst defaultOuterInset = 4;\nfunction estimateSceneText(text, style) {\n const fontSize = finiteNonNegative(style.fontSize, defaultFontSize);\n const fontWeight = finiteNonNegative(style.fontWeight, defaultFontWeight);\n if (!text || fontSize === 0) {\n return { x: 0, y: 0, width: 0, height: 0 };\n }\n let emWidth = 0;\n for (const character of text) {\n emWidth += estimateCharacterWidth(character);\n }\n const clampedWeight = Math.min(900, Math.max(100, fontWeight));\n const weightFactor = 1 + (clampedWeight - 400) / 12500;\n const width = emWidth * fontSize * weightFactor;\n const height = fontSize;\n const x = style.anchor === \"middle\" ? -width / 2 : style.anchor === \"end\" ? -width : 0;\n const y = style.baseline === \"middle\" ? -height / 2 : style.baseline === \"hanging\" ? 0 : -fontSize * 0.8;\n return { x, y, width, height };\n}\nfunction measureSceneLabelBounds(label, measureText = estimateSceneText) {\n const fontSize = finiteNonNegative(label.fontSize, defaultFontSize);\n const anchor = label.anchor ?? \"start\";\n const baseline = label.baseline ?? \"auto\";\n const measured = label.text.length === 0 ? { x: 0, y: 0, width: 0, height: 0 } : measureText(label.text, {\n fontSize,\n fontWeight: label.fontWeight,\n anchor,\n baseline\n });\n const x = finiteNumber(measured.x, 0);\n const y = finiteNumber(measured.y, 0);\n const width = finiteNonNegative(measured.width, 0);\n const height = finiteNonNegative(measured.height, 0);\n const bounds = {\n x: label.x + x,\n y: label.y + y,\n width,\n height\n };\n if (!label.rotate) {\n return bounds;\n }\n return rotateBounds(bounds, label.x, label.y, label.rotate);\n}\nfunction resolveGuideMargins(axes, plot, options = {}) {\n const inset = finiteNonNegative(options.inset, defaultOuterInset);\n const measureText = options.measureText ?? estimateSceneText;\n let top = inset;\n let right = inset;\n let bottom = inset;\n let left = inset;\n visitLabels(axes, 0, 0, (label, translateX, translateY) => {\n if (!label.text) return;\n const bounds = measureSceneLabelBounds(label, measureText);\n const boundsLeft = bounds.x + translateX;\n const boundsTop = bounds.y + translateY;\n const boundsRight = boundsLeft + bounds.width;\n const boundsBottom = boundsTop + bounds.height;\n const plotRight = plot.x + plot.width;\n const plotBottom = plot.y + plot.height;\n top = Math.max(top, plot.y - boundsTop + inset);\n right = Math.max(right, boundsRight - plotRight + inset);\n bottom = Math.max(bottom, boundsBottom - plotBottom + inset);\n left = Math.max(left, plot.x - boundsLeft + inset);\n });\n return { top, right, bottom, left };\n}\nfunction visitLabels(node, translateX, translateY, visit) {\n if (node.kind === \"label\") {\n visit(node, translateX, translateY);\n return;\n }\n if (node.kind !== \"group\") return;\n const childTranslateX = translateX + (node.translateX ?? 0);\n const childTranslateY = translateY + (node.translateY ?? 0);\n for (const child of node.children) {\n visitLabels(child, childTranslateX, childTranslateY, visit);\n }\n}\nfunction rotateBounds(bounds, originX, originY, degrees) {\n const radians = degrees * Math.PI / 180;\n const cosine = Math.cos(radians);\n const sine = Math.sin(radians);\n const centerX = bounds.x + bounds.width / 2 - originX;\n const centerY = bounds.y + bounds.height / 2 - originY;\n const width = Math.abs(bounds.width * cosine) + Math.abs(bounds.height * sine);\n const height = Math.abs(bounds.width * sine) + Math.abs(bounds.height * cosine);\n const rotatedCenterX = centerX * cosine - centerY * sine + originX;\n const rotatedCenterY = centerX * sine + centerY * cosine + originY;\n return {\n x: rotatedCenterX - width / 2,\n y: rotatedCenterY - height / 2,\n width,\n height\n };\n}\nfunction estimateCharacterWidth(character) {\n if (/\\s/u.test(character)) return 0.33;\n if (/[\\u0300-\\u036f]/u.test(character)) return 0;\n if (/[ilI1|!.,:;'`]/u.test(character)) return 0.28;\n if (/[mwMW@#%&]/u.test(character)) return 0.9;\n if (/[A-Z]/u.test(character)) return 0.64;\n if (/[0-9]/u.test(character)) return 0.56;\n if (character.codePointAt(0) > 127) return 1;\n return 0.54;\n}\nfunction finiteNonNegative(value, fallback) {\n return value !== void 0 && Number.isFinite(value) && value >= 0 ? value : fallback;\n}\nfunction finiteNumber(value, fallback) {\n return value !== void 0 && Number.isFinite(value) ? value : fallback;\n}\nexport {\n estimateSceneText,\n measureSceneLabelBounds,\n resolveGuideMargins\n};\n","const sceneInteractionCache = /* @__PURE__ */ new WeakMap();\nfunction nearestPoint(points, x, y, maxDistance) {\n let result;\n let resultDistance = Infinity;\n for (let index = points.length; index--; ) {\n const point = points[index];\n const dx = point.x - x;\n const dy = point.y - y;\n const distance = dx * dx + dy * dy;\n if (distance <= resultDistance) {\n result = point;\n resultDistance = distance;\n }\n }\n return result && resultDistance <= Math.max(0, maxDistance) ** 2 ? result : null;\n}\nfunction nearestScenePoint(scene, x, y, maxDistance) {\n const index = interactionIndex(scene);\n if (!index.targets.length && !index.attachedPoints.size) {\n return nearestPoint(scene.points, x, y, maxDistance);\n }\n for (let targetIndex = index.targets.length; targetIndex--; ) {\n const target = index.targets[targetIndex];\n if (containsBounds(target.bounds, x, y) && containsTarget(target, x, y)) {\n return bestInteractionPoint(target.node.interaction, x, y);\n }\n }\n let resultPoint;\n let resultInteraction;\n let resultPrimaryDistance = Infinity;\n let resultGeometryDistance = Infinity;\n for (const target of index.targets) {\n const interaction = target.node.interaction;\n const affinity = interaction.affinity ?? \"xy\";\n if (affinity === \"geometry\") continue;\n const axis = affinity === \"x\" ? \"x\" : affinity === \"y\" ? \"y\" : void 0;\n const primaryDistance = axis ? squaredAxisDistance(target.bounds, axis === \"x\" ? x : y, axis) : distanceToTarget(target, x, y);\n if (primaryDistance > resultPrimaryDistance) continue;\n const geometryDistance = axis ? distanceToTarget(target, x, y) : primaryDistance;\n if (primaryDistance < resultPrimaryDistance || primaryDistance === resultPrimaryDistance && geometryDistance < resultGeometryDistance) {\n resultInteraction = interaction;\n resultPoint = void 0;\n resultPrimaryDistance = primaryDistance;\n resultGeometryDistance = geometryDistance;\n }\n }\n if (resultPrimaryDistance !== 0) {\n for (const point of scene.points) {\n if (index.attachedPoints.has(point)) continue;\n const dx = point.x - x;\n const dy = point.y - y;\n const distance = dx * dx + dy * dy;\n if (distance < resultPrimaryDistance) {\n resultPoint = point;\n resultInteraction = void 0;\n resultPrimaryDistance = distance;\n resultGeometryDistance = distance;\n }\n }\n }\n if (resultPrimaryDistance > Math.max(0, maxDistance) ** 2) return null;\n const result = resultPoint ?? (resultInteraction ? bestInteractionPoint(resultInteraction, x, y) : void 0);\n return result ?? null;\n}\nfunction interactionIndex(scene) {\n const cached = sceneInteractionCache.get(scene);\n if (cached) return cached;\n const targets = [];\n const attachedPoints = /* @__PURE__ */ new Set();\n collectTargets(scene.nodes, 0, 0, void 0, targets, attachedPoints);\n const index = { targets, attachedPoints };\n sceneInteractionCache.set(scene, index);\n return index;\n}\nfunction collectTargets(nodes, offsetX, offsetY, clip, targets, attachedPoints) {\n for (const node of nodes) {\n if (node.kind === \"group\") {\n if (node.focus) continue;\n const nextOffsetX = offsetX + (node.translateX ?? 0);\n const nextOffsetY = offsetY + (node.translateY ?? 0);\n const groupClip = node.clip ? translateBounds(node.clip, nextOffsetX, nextOffsetY) : void 0;\n const nextClip = clip === null ? null : intersectBounds(clip, groupClip);\n collectTargets(\n node.children,\n nextOffsetX,\n nextOffsetY,\n nextClip,\n targets,\n attachedPoints\n );\n continue;\n }\n if (node.kind === \"label\" || !node.interaction) continue;\n if (node.interaction.point) attachedPoints.add(node.interaction.point);\n else {\n for (const point of node.interaction.points) attachedPoints.add(point);\n }\n if (clip === null) continue;\n const localBounds = boundsForNode(node);\n if (!localBounds) continue;\n const paintedBounds = translateBounds(localBounds, offsetX, offsetY);\n const visibleBounds = clip ? intersectBounds(paintedBounds, clip) : paintedBounds;\n if (visibleBounds == null) continue;\n targets.push({\n node,\n offsetX,\n offsetY,\n bounds: visibleBounds,\n clip\n });\n }\n}\nfunction bestInteractionPoint(interaction, x, y) {\n if (interaction.point) return interaction.point;\n const affinity = interaction.affinity ?? \"xy\";\n let result;\n let primaryDistance = Infinity;\n let secondaryDistance = Infinity;\n for (const point of interaction.points) {\n const dx = point.x - x;\n const dy = point.y - y;\n const fullDistance = dx * dx + dy * dy;\n const nextPrimary = affinity === \"x\" ? dx * dx : affinity === \"y\" ? dy * dy : fullDistance;\n if (nextPrimary < primaryDistance || nextPrimary === primaryDistance && fullDistance < secondaryDistance) {\n result = point;\n primaryDistance = nextPrimary;\n secondaryDistance = fullDistance;\n }\n }\n return result ?? null;\n}\nfunction containsTarget(target, x, y) {\n const localX = x - target.offsetX;\n const localY = y - target.offsetY;\n const { node } = target;\n switch (node.kind) {\n case \"rect\":\n return containsRoundedRect(node, localX, localY);\n case \"dot\": {\n const dx = localX - node.x;\n const dy = localY - node.y;\n const radius = Math.max(0, node.radius);\n return dx * dx + dy * dy <= radius * radius;\n }\n case \"area\":\n return containsPolygon(node.points, localX, localY);\n case \"polyline\":\n return squaredDistanceToPolyline(node.points, localX, localY, false) <= strokeRadius(node) ** 2;\n case \"rule\":\n return squaredDistanceToSegment(\n node.x1,\n node.y1,\n node.x2,\n node.y2,\n localX,\n localY\n ) <= strokeRadius(node) ** 2;\n }\n}\nfunction distanceToTarget(target, x, y) {\n const localX = x - target.offsetX;\n const localY = y - target.offsetY;\n const { node } = target;\n let distance;\n switch (node.kind) {\n case \"rect\":\n distance = node.radius ? squaredDistanceToRoundedRect(node, localX, localY) : squaredDistanceToBounds(node, localX, localY);\n break;\n case \"dot\": {\n const dx = localX - node.x;\n const dy = localY - node.y;\n const amount = Math.max(\n 0,\n Math.sqrt(dx * dx + dy * dy) - Math.max(0, node.radius)\n );\n distance = amount * amount;\n break;\n }\n case \"area\":\n distance = squaredDistanceToPolyline(node.points, localX, localY, true);\n break;\n case \"polyline\": {\n const raw = squaredDistanceToPolyline(node.points, localX, localY, false);\n const amount = Math.max(0, Math.sqrt(raw) - strokeRadius(node));\n distance = amount * amount;\n break;\n }\n case \"rule\": {\n const raw = squaredDistanceToSegment(\n node.x1,\n node.y1,\n node.x2,\n node.y2,\n localX,\n localY\n );\n const amount = Math.max(0, Math.sqrt(raw) - strokeRadius(node));\n distance = amount * amount;\n break;\n }\n }\n return target.clip ? Math.max(distance, squaredDistanceToBounds(target.clip, x, y)) : distance;\n}\nfunction boundsForNode(node) {\n switch (node.kind) {\n case \"rect\":\n return normalizeRect(node);\n case \"dot\": {\n const radius = Math.max(0, node.radius);\n return {\n x: node.x - radius,\n y: node.y - radius,\n width: radius * 2,\n height: radius * 2\n };\n }\n case \"area\":\n return boundsFromPoints(node.points);\n case \"polyline\": {\n const bounds = boundsFromPoints(node.points);\n return bounds ? expandBounds(bounds, strokeRadius(node)) : null;\n }\n case \"rule\":\n return expandBounds(\n {\n x: Math.min(node.x1, node.x2),\n y: Math.min(node.y1, node.y2),\n width: Math.abs(node.x2 - node.x1),\n height: Math.abs(node.y2 - node.y1)\n },\n strokeRadius(node)\n );\n }\n}\nfunction containsRoundedRect(node, x, y) {\n const bounds = normalizeRect(node);\n if (!containsBounds(bounds, x, y)) return false;\n const radius = Math.max(\n 0,\n Math.min(node.radius ?? 0, bounds.width / 2, bounds.height / 2)\n );\n if (radius === 0 || x >= bounds.x + radius && x <= bounds.x + bounds.width - radius || y >= bounds.y + radius && y <= bounds.y + bounds.height - radius) {\n return true;\n }\n const cornerX = x < bounds.x + radius ? bounds.x + radius : bounds.x + bounds.width - radius;\n const cornerY = y < bounds.y + radius ? bounds.y + radius : bounds.y + bounds.height - radius;\n const dx = x - cornerX;\n const dy = y - cornerY;\n return dx * dx + dy * dy <= radius * radius;\n}\nfunction squaredDistanceToRoundedRect(node, x, y) {\n const bounds = normalizeRect(node);\n const halfWidth = bounds.width / 2;\n const halfHeight = bounds.height / 2;\n const radius = Math.max(0, Math.min(node.radius ?? 0, halfWidth, halfHeight));\n const offsetX = Math.abs(x - (bounds.x + halfWidth)) - (halfWidth - radius);\n const offsetY = Math.abs(y - (bounds.y + halfHeight)) - (halfHeight - radius);\n const outside = Math.sqrt(Math.max(0, offsetX) ** 2 + Math.max(0, offsetY) ** 2) - radius;\n return Math.max(0, outside) ** 2;\n}\nfunction containsPolygon(points, x, y) {\n let inside = false;\n for (let index = 0, previous = points.length - 1; index < points.length; previous = index++) {\n const current = points[index];\n const prior = points[previous];\n if (current[1] > y !== prior[1] > y && x < (prior[0] - current[0]) * (y - current[1]) / (prior[1] - current[1]) + current[0]) {\n inside = !inside;\n }\n }\n return inside;\n}\nfunction squaredDistanceToPolyline(points, x, y, closed) {\n if (!points.length) return Infinity;\n if (points.length === 1) {\n const point = points[0];\n return (point[0] - x) ** 2 + (point[1] - y) ** 2;\n }\n let distance = Infinity;\n const segmentCount = closed ? points.length : Math.max(0, points.length - 1);\n for (let index = 0; index < segmentCount; index += 1) {\n const start = points[index];\n const end = points[(index + 1) % points.length];\n distance = Math.min(\n distance,\n squaredDistanceToSegment(start[0], start[1], end[0], end[1], x, y)\n );\n }\n return distance;\n}\nfunction squaredDistanceToSegment(x1, y1, x2, y2, x, y) {\n const dx = x2 - x1;\n const dy = y2 - y1;\n const length = dx * dx + dy * dy;\n const amount = length ? Math.max(0, Math.min(1, ((x - x1) * dx + (y - y1) * dy) / length)) : 0;\n const offsetX = x - (x1 + amount * dx);\n const offsetY = y - (y1 + amount * dy);\n return offsetX * offsetX + offsetY * offsetY;\n}\nfunction boundsFromPoints(points) {\n let minX = Infinity;\n let minY = Infinity;\n let maxX = -Infinity;\n let maxY = -Infinity;\n for (const point of points) {\n if (!Number.isFinite(point[0]) || !Number.isFinite(point[1])) continue;\n minX = Math.min(minX, point[0]);\n minY = Math.min(minY, point[1]);\n maxX = Math.max(maxX, point[0]);\n maxY = Math.max(maxY, point[1]);\n }\n return Number.isFinite(minX) ? { x: minX, y: minY, width: maxX - minX, height: maxY - minY } : null;\n}\nfunction normalizeRect(rect) {\n return {\n x: Math.min(rect.x, rect.x + rect.width),\n y: Math.min(rect.y, rect.y + rect.height),\n width: Math.abs(rect.width),\n height: Math.abs(rect.height)\n };\n}\nfunction translateBounds(bounds, x, y) {\n const normalized = normalizeRect(bounds);\n return { ...normalized, x: normalized.x + x, y: normalized.y + y };\n}\nfunction expandBounds(bounds, amount) {\n return {\n x: bounds.x - amount,\n y: bounds.y - amount,\n width: bounds.width + amount * 2,\n height: bounds.height + amount * 2\n };\n}\nfunction intersectBounds(left, right) {\n if (!left) return right;\n if (!right) return left;\n const x = Math.max(left.x, right.x);\n const y = Math.max(left.y, right.y);\n const rightEdge = Math.min(left.x + left.width, right.x + right.width);\n const bottomEdge = Math.min(left.y + left.height, right.y + right.height);\n return rightEdge < x || bottomEdge < y ? null : { x, y, width: rightEdge - x, height: bottomEdge - y };\n}\nfunction containsBounds(bounds, x, y) {\n return x >= bounds.x && x <= bounds.x + bounds.width && y >= bounds.y && y <= bounds.y + bounds.height;\n}\nfunction squaredAxisDistance(bounds, value, axis) {\n const start = axis === \"x\" ? bounds.x : bounds.y;\n const size = axis === \"x\" ? bounds.width : bounds.height;\n const distance = value < start ? start - value : value > start + size ? value - start - size : 0;\n return distance * distance;\n}\nfunction squaredDistanceToBounds(bounds, x, y) {\n const normalized = normalizeRect(bounds);\n const dx = x < normalized.x ? normalized.x - x : x > normalized.x + normalized.width ? x - normalized.x - normalized.width : 0;\n const dy = y < normalized.y ? normalized.y - y : y > normalized.y + normalized.height ? y - normalized.y - normalized.height : 0;\n return dx * dx + dy * dy;\n}\nfunction strokeRadius(node) {\n return Math.max(0, node.style?.strokeWidth ?? 1) / 2;\n}\nexport {\n nearestPoint,\n nearestScenePoint\n};\n","const chartSceneSource = /* @__PURE__ */ Symbol(\"chart-scene-source\");\nexport {\n chartSceneSource\n};\n","import { createColorScale, valueKey } from \"./scales.js\";\nimport { resolveConfiguredScale } from \"./configured-scale.js\";\nimport { measureSceneLabelBounds } from \"./guide-layout.js\";\nimport { nearestScenePoint } from \"./nearest.js\";\nimport { chartSceneSource } from \"./scene-source.js\";\nconst defaultChartTheme = {\n foreground: \"currentColor\",\n muted: \"currentColor\",\n grid: \"currentColor\",\n background: \"transparent\",\n palette: [\n \"var(--ts-chart-1, #2563eb)\",\n \"var(--ts-chart-2, #f97316)\",\n \"var(--ts-chart-3, #10b981)\",\n \"var(--ts-chart-4, #8b5cf6)\",\n \"var(--ts-chart-5, #ec4899)\",\n \"var(--ts-chart-6, #06b6d4)\"\n ]\n};\nfunction defineChart(definition, options) {\n if (options) return { ...definition, ...options };\n return typeof definition === \"function\" ? { chart: definition } : definition;\n}\nfunction createChartScene(definition, size, layout = {}) {\n return createChartSceneWithScaleResolver(\n definition,\n size,\n (context) => {\n if (!context.options?.scale) {\n throw new TypeError(\n `Chart scale \"${context.id}\" requires a configured scale`\n );\n }\n return resolveSuppliedScale(context.options.scale, context);\n },\n layout\n );\n}\nfunction resolveSuppliedScale(scale, context) {\n return typeof scale === \"function\" ? resolveConfiguredScale(scale, context) : scale.resolve(context);\n}\nfunction createChartSceneWithScaleResolver(definition, size, resolveScale, layout) {\n const width = finiteSize(size.width);\n const height = finiteSize(size.height);\n const theme = {\n ...defaultChartTheme,\n ...definition.theme,\n palette: definition.theme?.palette ?? defaultChartTheme.palette\n };\n const initialized = definition.marks.map(\n (mark, markIndex) => mark.initialize({ markIndex })\n );\n const colorChannels = collectScaleChannels(initialized, \"color\");\n const colors = createColorScale(colorChannels.values, definition.color, theme);\n if (colors.kind !== \"categorical\" && initialized.some((mark) => mark.seriesFromColor)) {\n throw new TypeError(\n \"A continuous color channel cannot infer series identity; supply z explicitly\"\n );\n }\n const legend = colors.domain.length ? definition.color?.legend : void 0;\n const xChannels = collectScaleChannels(initialized, \"x\");\n const yChannels = collectScaleChannels(initialized, \"y\");\n const axes = definition.guides === false ? 0 : +(definition.x != null && definition.x.axis !== false) | +(definition.y != null && definition.y.axis !== false) << 1;\n const resolvedLayout = resolveSceneLayout(\n definition,\n initialized,\n width,\n height,\n theme,\n xChannels,\n yChannels,\n colors,\n legend,\n axes,\n resolveScale,\n layout\n );\n const { margin, chart, scales, axes: axisNodes } = resolvedLayout;\n const markNodes = [];\n const points = [];\n const firstBaseMarkIndex = initialized.findIndex((mark) => !mark.focus);\n initialized.forEach((mark, markIndex) => {\n const rendered = mark.render({\n markIndex,\n chart,\n scales,\n theme,\n color: colors.map,\n colors,\n layout\n });\n const renderedPoints = collectRenderedPoints(\n rendered.nodes,\n rendered.points\n );\n if (mark.focus) {\n markNodes.push({\n kind: \"group\",\n key: `focus:${mark.id}`,\n className: \"ts-chart__focus-layer\",\n ariaHidden: true,\n focus: {\n match: mark.focus.match ?? \"primary\",\n points: renderedPoints,\n placement: firstBaseMarkIndex < 0 || markIndex < firstBaseMarkIndex ? \"under\" : \"over\"\n },\n children: rendered.nodes\n });\n } else {\n const markPoints = renderedPoints;\n if (mark.states) {\n markNodes.push({\n kind: \"group\",\n key: `states:${mark.id}`,\n children: rendered.nodes,\n states: {\n data: mark.states.data,\n definitions: mark.states.definitions,\n points: markPoints\n }\n });\n } else {\n for (const node of rendered.nodes) markNodes.push(node);\n }\n for (const point of markPoints) points.push(point);\n }\n });\n const nodes = [\n {\n kind: \"group\",\n key: \"marks\",\n className: \"ts-chart__marks\",\n clip: definition.clip ? chart : void 0,\n children: markNodes\n }\n ];\n if (definition.guides !== false && (definition.x?.grid || definition.y?.grid)) {\n nodes.unshift(createGrid(chart, scales, definition, theme));\n }\n if (axes) {\n nodes.push(axisNodes);\n }\n if (legend) nodes.push(legend.render({ colors, chart, theme, width }));\n if (definition.focusRing !== false && points.length) {\n nodes.push({\n kind: \"group\",\n key: \"default-focus\",\n className: \"ts-chart__focus-layer ts-chart__focus-layer--default\",\n ariaHidden: true,\n focus: {\n match: \"primary\",\n points,\n placement: \"over\"\n },\n children: points.map((point) => ({\n kind: \"dot\",\n key: point.key,\n x: point.x,\n y: point.y,\n radius: 5,\n style: {\n fill: \"var(--ts-chart-focus-fill, Canvas)\",\n stroke: point.color,\n strokeWidth: 2.5\n }\n }))\n });\n }\n return {\n width,\n height,\n margin,\n chart,\n nodes,\n points,\n scales,\n colors,\n gradients: definition.gradients ?? [],\n theme,\n [chartSceneSource]: [definition, initialized]\n };\n}\nfunction findNearestPoint(scene, x, y, maxDistance = Infinity) {\n return nearestScenePoint(scene, x, y, maxDistance);\n}\nfunction collectRenderedPoints(nodes, emitted) {\n const points = emitted ? [...emitted] : [];\n const seen = new Set(points);\n const visit = (children) => {\n for (const node of children) {\n if (node.kind === \"group\") {\n if (!node.focus) visit(node.children);\n continue;\n }\n if (node.kind === \"label\" || !node.interaction) continue;\n const interaction = node.interaction;\n if (interaction.point) {\n if (!seen.has(interaction.point)) {\n seen.add(interaction.point);\n points.push(interaction.point);\n }\n } else {\n for (const point of interaction.points) {\n if (seen.has(point)) continue;\n seen.add(point);\n points.push(point);\n }\n }\n }\n };\n visit(nodes);\n return points;\n}\nfunction collectScaleChannels(marks, scaleId) {\n const values = [];\n let includeZero = false;\n let materialized = false;\n for (const mark of marks) {\n for (const channel of Object.values(mark.channels)) {\n if (channel.scale !== scaleId) continue;\n materialized = true;\n for (const value of channel.values) values.push(value);\n includeZero ||= channel.includeZero ?? false;\n }\n }\n return { values, includeZero, materialized };\n}\nconst automaticGuideInset = 4;\nconst layoutPassLimit = 4;\nconst layoutTolerance = 0.25;\nfunction resolveSceneLayout(definition, marks, width, height, theme, xChannels, yChannels, colors, legend, axes, resolveScale, layout) {\n const locks = resolveMarginLocks(definition.margin);\n const inset = axes ? automaticGuideInset : 0;\n let margin = mergeMarginLocks(uniformMargin(inset), locks);\n let safeMargin = margin;\n for (let pass = 0; pass < layoutPassLimit; pass += 1) {\n const resolved2 = compileSceneLayout(margin);\n const next = measureMargin(resolved2);\n safeMargin = mergeMarginLocks(next, locks, safeMargin);\n if (marginsEqual(margin, next)) return resolved2;\n margin = next;\n }\n let resolved = compileSceneLayout(safeMargin);\n const finalMargin = mergeMarginLocks(\n measureMargin(resolved),\n locks,\n safeMargin\n );\n if (!marginsEqual(safeMargin, finalMargin)) {\n resolved = compileSceneLayout(finalMargin);\n }\n return resolved;\n function compileSceneLayout(margin2) {\n const chart = {\n x: margin2.left,\n y: margin2.top,\n width: Math.max(1, width - margin2.left - margin2.right),\n height: Math.max(1, height - margin2.top - margin2.bottom)\n };\n const xTickCount = resolveTickCount(definition.x, chart.width, 92, 8);\n const yTickCount = resolveTickCount(definition.y, chart.height, 48, 7);\n const scales = {\n x: definition.x == null ? createUnusedScale(\"x\", xChannels.materialized, definition.x) : resolveScale({\n id: \"x\",\n values: xChannels.values,\n range: [chart.x, chart.x + chart.width],\n options: definition.x,\n tickCount: xTickCount,\n includeZero: xChannels.includeZero\n }),\n y: definition.y == null ? createUnusedScale(\"y\", yChannels.materialized, definition.y) : resolveScale({\n id: \"y\",\n values: yChannels.values,\n range: [chart.y + chart.height, chart.y],\n options: definition.y,\n tickCount: yTickCount,\n includeZero: yChannels.includeZero\n })\n };\n const resolvedAxes = createAxes(\n chart,\n scales,\n definition,\n theme,\n width,\n axes,\n layout.measureText\n );\n return {\n margin: margin2,\n chart,\n scales,\n axes: resolvedAxes.axes,\n guideMargin: resolvedAxes.margin\n };\n }\n function measureMargin(resolved2) {\n const automatic = resolved2.guideMargin;\n if (legend && locks.top === void 0) {\n automatic.top = Math.max(\n automatic.top,\n legend.height(colors.domain.length, resolved2.chart.width, colors)\n );\n }\n if (!definition.clip) {\n marks.forEach((mark, markIndex) => {\n const labels = mark.layoutLabels?.({\n markIndex,\n chart: resolved2.chart,\n scales: resolved2.scales,\n theme,\n color: colors.map,\n colors,\n layout\n });\n for (const label of labels ?? []) {\n includeLabelMargin(\n automatic,\n resolved2.chart,\n label,\n layout.measureText\n );\n }\n });\n }\n return mergeMarginLocks(automatic, locks);\n }\n}\nfunction includeLabelMargin(margin, chart, label, measureText) {\n const bounds = measureSceneLabelBounds(label, measureText);\n if (!label.text) return bounds;\n margin.top = Math.max(margin.top, chart.y - bounds.y + automaticGuideInset);\n margin.right = Math.max(\n margin.right,\n bounds.x + bounds.width - chart.x - chart.width + automaticGuideInset\n );\n margin.bottom = Math.max(\n margin.bottom,\n bounds.y + bounds.height - chart.y - chart.height + automaticGuideInset\n );\n margin.left = Math.max(margin.left, chart.x - bounds.x + automaticGuideInset);\n return bounds;\n}\nfunction resolveMarginLocks(margin) {\n if (typeof margin === \"number\") {\n return uniformMargin(finiteMargin(margin));\n }\n if (!margin) return {};\n const locks = {};\n for (const side of marginSides) {\n if (margin[side] !== void 0) locks[side] = finiteMargin(margin[side]);\n }\n return locks;\n}\nconst marginSides = [\"top\", \"right\", \"bottom\", \"left\"];\nfunction mergeMarginLocks(automatic, locks, previous) {\n const margin = { ...automatic };\n for (const side of marginSides) {\n margin[side] = locks[side] ?? (previous ? Math.max(previous[side], automatic[side]) : automatic[side]);\n }\n return margin;\n}\nfunction marginsEqual(left, right) {\n return marginSides.every(\n (side) => Math.abs(left[side] - right[side]) <= layoutTolerance\n );\n}\nfunction finiteMargin(value) {\n return value !== void 0 && Number.isFinite(value) ? Math.max(0, value) : 0;\n}\nfunction uniformMargin(value) {\n return { top: value, right: value, bottom: value, left: value };\n}\nfunction createUnusedScale(id, materialized, axis) {\n if (materialized) {\n throw new TypeError(\n axis === null ? `Chart scale \"${id}\" cannot be null when a mark materializes its channel` : `Chart scale \"${id}\" requires a configured scale when a mark materializes its channel`\n );\n }\n return {\n id,\n type: \"none\",\n domain: [],\n map: () => {\n throw new TypeError(`Chart scale \"${id}\" is not configured`);\n },\n ticks: [],\n bandwidth: 0\n };\n}\nfunction createGrid(chart, scales, definition, theme) {\n const children = [];\n if (definition.y?.grid) {\n for (const tick of scales.y.ticks) {\n children.push({\n kind: \"rule\",\n key: `y-grid:${valueKey(tick.value)}`,\n x1: chart.x,\n x2: chart.x + chart.width,\n y1: tick.position,\n y2: tick.position\n });\n }\n }\n if (definition.x?.grid) {\n for (const tick of scales.x.ticks) {\n children.push({\n kind: \"rule\",\n key: `x-grid:${valueKey(tick.value)}`,\n x1: tick.position,\n x2: tick.position,\n y1: chart.y,\n y2: chart.y + chart.height\n });\n }\n }\n return {\n kind: \"group\",\n key: \"grid\",\n className: \"ts-chart__grid\",\n ariaHidden: true,\n children,\n style: {\n stroke: theme.grid,\n strokeOpacity: 0.11,\n strokeWidth: 1\n }\n };\n}\nfunction createAxes(chart, scales, definition, theme, width, axes, measureText) {\n const showX = axes & 1;\n const showY = axes & 2;\n const xAxis = axisPresentation(definition.x);\n const yAxis = axisPresentation(definition.y);\n const children = !showX || xAxis?.line === false ? [] : [\n {\n kind: \"rule\",\n key: \"x-axis\",\n x1: chart.x,\n x2: chart.x + chart.width,\n y1: chart.y + chart.height,\n y2: chart.y + chart.height,\n style: {\n stroke: theme.foreground,\n strokeOpacity: 0.28\n }\n }\n ];\n if (showY && yAxis?.line !== false) {\n children.push({\n kind: \"rule\",\n key: \"y-axis\",\n x1: chart.x,\n x2: chart.x,\n y1: chart.y,\n y2: chart.y + chart.height,\n style: {\n stroke: theme.foreground,\n strokeOpacity: 0.28\n }\n });\n }\n const xTickLabels = tickLabelPresentation(xAxis);\n const yTickLabels = tickLabelPresentation(yAxis);\n const xTickRotate = xTickLabels === false ? void 0 : xTickLabels.rotate;\n let xTickBottom = chart.y + chart.height;\n let yTickLeft = chart.x;\n const inset = axes ? automaticGuideInset : 0;\n const margin = uniformMargin(inset);\n const addLabel = (label) => includeLabelMargin(margin, chart, label, measureText);\n const xTicks = xAxis?.ticks === false ? [] : scales.x.ticks;\n const yTicks = yAxis?.ticks === false ? [] : scales.y.ticks;\n const xTickSize = finiteMargin(\n xAxis?.ticks === false ? 0 : xAxis?.ticks?.size ?? 4\n );\n const yTickSize = finiteMargin(\n yAxis?.ticks === false ? 0 : yAxis?.ticks?.size ?? 4\n );\n const xTickPadding = finiteMargin(\n xAxis?.ticks === false ? 0 : xAxis?.ticks?.padding ?? 4\n );\n const yTickPadding = finiteMargin(\n yAxis?.ticks === false ? 0 : yAxis?.ticks?.padding ?? 4\n );\n const xLabelCandidates = xTickLabels === false ? [] : createTickLabelCandidates(\n \"x\",\n withKeptTicks(scales.x, definition.x, xTickLabels),\n chart,\n xTickSize,\n xTickPadding,\n xTickRotate,\n width,\n theme,\n measureText\n );\n const yLabelCandidates = yTickLabels === false ? [] : createTickLabelCandidates(\n \"y\",\n withKeptTicks(scales.y, definition.y, yTickLabels),\n chart,\n yTickSize,\n yTickPadding,\n yTickLabels.rotate,\n width,\n theme,\n measureText\n );\n const visibleXLabels = xTickLabels === false ? [] : thinTickLabels(xLabelCandidates, xTickLabels, scales.x.type === \"band\");\n const visibleYLabels = yTickLabels === false ? [] : thinTickLabels(yLabelCandidates, yTickLabels, false);\n for (const tick of showX ? xTicks : []) {\n const key = valueKey(tick.value);\n if (xTickSize > 0) {\n children.push({\n kind: \"rule\",\n key: `x-tick-rule:${key}`,\n x1: tick.position,\n x2: tick.position,\n y1: chart.y + chart.height,\n y2: chart.y + chart.height + xTickSize,\n style: {\n stroke: theme.foreground,\n strokeOpacity: 0.28\n }\n });\n }\n }\n for (const candidate of showX ? visibleXLabels : []) {\n const bounds = addLabel(candidate.label);\n if (axisLabelText(xAxis) && axisLabelOffset(xAxis) === \"auto\") {\n xTickBottom = Math.max(xTickBottom, bounds.y + bounds.height);\n }\n children.push(candidate.label);\n }\n for (const tick of showY ? yTicks : []) {\n const key = valueKey(tick.value);\n if (yTickSize > 0) {\n children.push({\n kind: \"rule\",\n key: `y-tick-rule:${key}`,\n x1: chart.x - yTickSize,\n x2: chart.x,\n y1: tick.position,\n y2: tick.position,\n style: {\n stroke: theme.foreground,\n strokeOpacity: 0.28\n }\n });\n }\n }\n for (const candidate of showY ? visibleYLabels : []) {\n const bounds = addLabel(candidate.label);\n if (axisLabelText(yAxis) && axisLabelOffset(yAxis) === \"auto\") {\n yTickLeft = Math.min(yTickLeft, bounds.x);\n }\n children.push(candidate.label);\n }\n const xAxisLabel = axisLabelText(xAxis);\n if (showX && xAxisLabel) {\n const offset = axisLabelOffset(xAxis);\n const hasOffset = offset !== \"auto\";\n const label = {\n kind: \"label\",\n key: \"x-label\",\n x: chart.x + chart.width / 2,\n y: hasOffset ? chart.y + chart.height + Math.max(0, finiteMargin(offset)) : xTickBottom + 8,\n text: xAxisLabel,\n anchor: \"middle\",\n baseline: hasOffset ? \"auto\" : \"hanging\",\n fontSize: width < 360 ? 10 : 11,\n fontWeight: 600,\n style: { fill: theme.foreground, fillOpacity: 0.76 }\n };\n addLabel(label);\n children.push(label);\n }\n const yAxisLabel = axisLabelText(yAxis);\n if (showY && yAxisLabel) {\n const yLabel = {\n kind: \"label\",\n key: \"y-label\",\n x: chart.x,\n y: chart.y + chart.height / 2,\n text: yAxisLabel,\n anchor: \"middle\",\n baseline: \"middle\",\n rotate: -90,\n fontSize: 11,\n fontWeight: 600,\n style: { fill: theme.foreground, fillOpacity: 0.76 }\n };\n const offset = axisLabelOffset(yAxis);\n if (offset !== \"auto\") {\n yLabel.x = chart.x - Math.max(0, finiteMargin(offset));\n } else {\n const localBounds = measureSceneLabelBounds(\n { ...yLabel, x: 0, y: 0 },\n measureText\n );\n yLabel.x = yTickLeft - 8 - (localBounds.x + localBounds.width);\n }\n addLabel(yLabel);\n children.push(yLabel);\n }\n return {\n axes: {\n kind: \"group\",\n key: \"axes\",\n className: \"ts-chart__axes\",\n ariaHidden: true,\n children\n },\n margin\n };\n}\nfunction resolveTickCount(axis, length, defaultSpacing, maximum) {\n const ticks = axis?.axis === false ? void 0 : axis?.axis?.ticks;\n if (ticks === false) {\n return Math.max(2, Math.min(maximum, Math.floor(length / defaultSpacing)));\n }\n const configured = ticks ?? {};\n const policies = [\n configured.count !== void 0,\n configured.spacing !== void 0,\n configured.values !== void 0\n ].filter(Boolean).length;\n if (policies > 1) {\n throw new TypeError(\n \"Axis ticks accept only one candidate policy: count, spacing, or values\"\n );\n }\n if (configured.values) return Math.max(1, configured.values.length);\n if (configured.count !== void 0) {\n return Math.max(1, Math.floor(finiteMargin(configured.count)));\n }\n if (configured.spacing !== void 0) {\n const spacing = Math.max(1, finiteMargin(configured.spacing));\n return Math.max(1, Math.floor(length / spacing));\n }\n return Math.max(2, Math.min(maximum, Math.floor(length / defaultSpacing)));\n}\nfunction axisPresentation(axis) {\n if (!axis || axis.axis === false) return void 0;\n return axis.axis ?? {};\n}\nfunction tickLabelPresentation(axis) {\n if (axis?.ticks === false || axis?.tickLabels === false) return false;\n return axis?.tickLabels ?? {};\n}\nfunction axisLabelText(axis) {\n return typeof axis?.label === \"string\" ? axis.label : axis?.label?.text;\n}\nfunction axisLabelOffset(axis) {\n return typeof axis?.label === \"object\" ? axis.label.offset ?? \"auto\" : \"auto\";\n}\nfunction withKeptTicks(scale, axis, labels) {\n const thin = typeof labels.thin === \"object\" ? labels.thin : void 0;\n const keep = thin?.keep ?? [];\n if (!keep.length) return scale.ticks;\n const formatter = axis?.axis === false || axis?.axis?.ticks === false ? void 0 : axis?.axis?.ticks?.format;\n const ticks = scale.ticks.map((tick) => ({\n ...tick,\n hard: keep.some((value) => valueKey(value) === valueKey(tick.value))\n }));\n const seen = new Set(ticks.map((tick) => valueKey(tick.value)));\n for (const value of keep) {\n const position = scale.map(value);\n if (seen.has(valueKey(value)) || !Number.isFinite(position)) continue;\n ticks.push({\n value,\n position,\n label: formatter?.(value) ?? formatAxisValue(value),\n hard: true\n });\n }\n return ticks;\n}\nfunction createTickLabelCandidates(axis, ticks, chart, size, padding, rotate, width, theme, measureText) {\n const fontSize = width < 360 ? 10 : 11;\n return ticks.map((tick) => {\n const label = axis === \"x\" ? {\n kind: \"label\",\n key: `x-tick-label:${valueKey(tick.value)}`,\n x: tick.position,\n y: chart.y + chart.height + size + padding + fontSize * 0.8,\n text: tick.label,\n anchor: (rotate ?? 0) < 0 ? \"end\" : (rotate ?? 0) > 0 ? \"start\" : \"middle\",\n rotate,\n fontSize,\n style: {\n fill: theme.muted,\n fillOpacity: 0.68\n }\n } : {\n kind: \"label\",\n key: `y-tick-label:${valueKey(tick.value)}`,\n x: chart.x - size - padding,\n y: tick.position,\n text: tick.label,\n anchor: \"end\",\n baseline: \"middle\",\n rotate,\n fontSize,\n style: {\n fill: theme.muted,\n fillOpacity: 0.68\n }\n };\n return {\n value: tick.value,\n label,\n bounds: measureSceneLabelBounds(label, measureText),\n hard: tick.hard ?? false\n };\n });\n}\nfunction thinTickLabels(candidates, options, categoricalX) {\n if (options.thin === false || candidates.length < 2) return [...candidates];\n const thin = typeof options.thin === \"object\" ? options.thin : {};\n const minGap = Math.max(0, finiteMargin(thin.minGap ?? 4));\n const selected = candidates.filter(\n (candidate) => candidate.hard\n );\n const soft = candidates.filter((candidate) => !candidate.hard);\n const prioritizeEnds = thin.priority === \"ends\" || categoricalX;\n if (prioritizeEnds && soft.length) {\n const first = soft[0];\n const last = soft.at(-1);\n if (!collidesWithAny(first, selected, minGap)) selected.push(first);\n if (last !== first && !collidesWithAny(last, selected, minGap)) {\n selected.push(last);\n }\n }\n const ordered = distributedCandidates(\n soft.filter((candidate) => !selected.includes(candidate))\n );\n for (const candidate of ordered) {\n if (!collidesWithAny(candidate, selected, minGap)) selected.push(candidate);\n }\n const selectedSet = new Set(selected);\n return candidates.filter((candidate) => selectedSet.has(candidate));\n}\nfunction distributedCandidates(candidates) {\n if (candidates.length < 3) return [...candidates];\n const result = [];\n const queue = [candidates];\n while (queue.length) {\n const range = queue.shift();\n if (!range.length) continue;\n const middle = Math.floor(range.length / 2);\n result.push(range[middle]);\n queue.push(range.slice(0, middle), range.slice(middle + 1));\n }\n return result;\n}\nfunction collidesWithAny(candidate, selected, gap) {\n return selected.some(\n (other) => boundsCollide(candidate.bounds, other.bounds, gap)\n );\n}\nfunction boundsCollide(left, right, gap) {\n return !(left.x + left.width + gap <= right.x || right.x + right.width + gap <= left.x || left.y + left.height + gap <= right.y || right.y + right.height + gap <= left.y);\n}\nfunction formatAxisValue(value) {\n return value instanceof Date ? value.toLocaleDateString() : String(value);\n}\nfunction finiteSize(value) {\n return Number.isFinite(value) ? Math.max(1, value) : 1;\n}\nexport {\n createChartScene,\n defaultChartTheme,\n defineChart,\n findNearestPoint\n};\n","import { createChartScene, defaultChartTheme } from \"./scene.js\";\nfunction createChartRuntime() {\n return {\n render(definition, size, layout) {\n if (!isDynamicChartDefinition(definition)) {\n return createChartScene(definition, size, layout);\n }\n const spec = definition.chart({\n width: size.width,\n height: size.height,\n theme: defaultChartTheme\n });\n return createChartScene(spec, size, layout);\n },\n destroy() {\n }\n };\n}\nfunction isDynamicChartDefinition(definition) {\n return \"chart\" in definition && typeof definition.chart === \"function\";\n}\nexport {\n createChartRuntime,\n isDynamicChartDefinition\n};\n","import { estimateSceneText } from \"./guide-layout.js\";\nfunction createDomTextMeasurer(container) {\n const view = container.ownerDocument.defaultView;\n const CanvasContext = view?.CanvasRenderingContext2D;\n const context = CanvasContext ? container.ownerDocument.createElement(\"canvas\").getContext(\"2d\") : null;\n let style = readFontStyle();\n let signature = fontSignature(style);\n const cache = /* @__PURE__ */ new Map();\n return {\n measureText(text, options) {\n if (!context) return estimateSceneText(text, options);\n const key = `${signature}\\0${options.fontSize}\\0${options.fontWeight ?? \"\"}\\0${options.anchor}\\0${options.baseline}\\0${text}`;\n const cached = cache.get(key);\n if (cached) return cached;\n configureContext(context, style, options);\n const measured = context.measureText(text);\n const metrics = paintedBounds(measured, options);\n cache.set(key, metrics);\n return metrics;\n },\n refresh() {\n const nextStyle = readFontStyle();\n const nextSignature = fontSignature(nextStyle);\n if (nextSignature === signature) return false;\n style = nextStyle;\n signature = nextSignature;\n cache.clear();\n return true;\n },\n invalidate() {\n cache.clear();\n }\n };\n function readFontStyle() {\n const computed = view?.getComputedStyle(container);\n return {\n family: computed?.fontFamily || \"sans-serif\",\n style: computed?.fontStyle || \"normal\",\n stretch: normalizeFontStretch(computed?.fontStretch),\n weight: computed?.fontWeight || \"400\",\n direction: computed?.direction === \"rtl\" ? \"rtl\" : computed?.direction === \"ltr\" ? \"ltr\" : \"inherit\",\n letterSpacing: computed?.letterSpacing || \"0px\"\n };\n }\n}\nfunction configureContext(context, style, options) {\n const weight = options.fontWeight ?? style.weight;\n context.font = [\n style.style,\n weight,\n `${options.fontSize}px`,\n style.family\n ].join(\" \");\n if (\"fontStretch\" in context) {\n context.fontStretch = style.stretch;\n }\n context.textAlign = options.anchor === \"middle\" ? \"center\" : options.anchor;\n context.textBaseline = options.baseline === \"auto\" ? \"alphabetic\" : options.baseline;\n context.direction = style.direction;\n if (\"letterSpacing\" in context) {\n context.letterSpacing = style.letterSpacing;\n }\n}\nfunction paintedBounds(measured, options) {\n const left = measured.actualBoundingBoxLeft;\n const right = measured.actualBoundingBoxRight;\n const ascent = measured.actualBoundingBoxAscent;\n const descent = measured.actualBoundingBoxDescent;\n if ([left, right, ascent, descent].every((value) => Number.isFinite(value)) && (left + right > 0 || measured.width === 0) && (ascent + descent > 0 || measured.width === 0)) {\n return {\n x: -left,\n y: -ascent,\n width: left + right,\n height: ascent + descent\n };\n }\n const width = Number.isFinite(measured.width) ? Math.max(0, measured.width) : 0;\n const x = options.anchor === \"middle\" ? -width / 2 : options.anchor === \"end\" ? -width : 0;\n const y = options.baseline === \"middle\" ? -options.fontSize / 2 : options.baseline === \"hanging\" ? 0 : -options.fontSize * 0.8;\n return { x, y, width, height: options.fontSize };\n}\nfunction fontSignature(style) {\n return [\n style.family,\n style.style,\n style.stretch,\n style.weight,\n style.direction,\n style.letterSpacing\n ].join(\"\\0\");\n}\nfunction normalizeFontStretch(value) {\n if (value === \"ultra-condensed\" || value === \"extra-condensed\" || value === \"condensed\" || value === \"semi-condensed\" || value === \"normal\" || value === \"semi-expanded\" || value === \"expanded\" || value === \"extra-expanded\" || value === \"ultra-expanded\") {\n return value;\n }\n const percentage = Number.parseFloat(value ?? \"\");\n if (!Number.isFinite(percentage)) return \"normal\";\n if (percentage <= 50) return \"ultra-condensed\";\n if (percentage <= 62.5) return \"extra-condensed\";\n if (percentage <= 75) return \"condensed\";\n if (percentage <= 87.5) return \"semi-condensed\";\n if (percentage < 112.5) return \"normal\";\n if (percentage < 125) return \"semi-expanded\";\n if (percentage < 150) return \"expanded\";\n if (percentage < 200) return \"extra-expanded\";\n return \"ultra-expanded\";\n}\nexport {\n createDomTextMeasurer\n};\n","import { valueKey } from \"./scales.js\";\nconst focusX = axisFocus(\"x\", true);\nconst focusY = axisFocus(\"y\", true);\nconst focusNearestX = axisFocus(\"x\", false);\nconst focusNearestY = axisFocus(\"y\", false);\nfunction axisFocus(axis, grouped) {\n const coordinate = (point) => axis === \"x\" ? point.x : point.y;\n const value = (point) => axis === \"x\" ? point.xValue : point.yValue;\n const secondary = (point) => axis === \"x\" ? point.y : point.x;\n return {\n resolve(points, x, y, maxDistance) {\n const target = axis === \"x\" ? x : y;\n let nearest;\n let distance = maxDistance;\n for (const point of points) {\n const nextDistance = Math.abs(coordinate(point) - target);\n if (nextDistance >= distance) continue;\n nearest = point;\n distance = nextDistance;\n }\n if (!nearest) return [];\n const candidates = groupPoints(points, nearest, value);\n const secondaryTarget = axis === \"x\" ? y : x;\n const primary = candidates.reduce(\n (closest, candidate) => Math.abs(secondary(candidate) - secondaryTarget) < Math.abs(secondary(closest) - secondaryTarget) ? candidate : closest,\n nearest\n );\n return grouped ? [primary, ...candidates.filter((point) => point !== primary)] : [primary];\n },\n group(points, point) {\n return grouped ? groupPoints(points, point, value) : [point];\n },\n navigation(points) {\n const sorted = [...points].sort(\n (left, right) => left.x - right.x || left.y - right.y\n );\n if (!grouped) return sorted;\n const unique = /* @__PURE__ */ new Map();\n for (const point of sorted) {\n const key = valueKey(value(point));\n if (!unique.has(key)) unique.set(key, point);\n }\n return [...unique.values()];\n }\n };\n}\nfunction groupPoints(points, point, value) {\n const key = valueKey(value(point));\n const unique = /* @__PURE__ */ new Map();\n unique.set(valueKey(point.group), point);\n for (const candidate of points) {\n if (valueKey(value(candidate)) !== key) continue;\n const group = valueKey(candidate.group);\n if (!unique.has(group)) unique.set(group, candidate);\n }\n const sorted = [...unique.values()].sort((left, right) => left.y - right.y);\n return [point, ...sorted.filter((candidate) => candidate !== point)];\n}\nexport {\n focusNearestX,\n focusNearestY,\n focusX,\n focusY\n};\n","import { createChartRuntime } from \"./runtime.js\";\nimport { createDomTextMeasurer } from \"./dom-text.js\";\nimport { findNearestPoint } from \"./scene.js\";\nimport { focusNearestX, focusNearestY, focusX, focusY } from \"./focus.js\";\nimport { nearestPoint } from \"./nearest.js\";\nfunction mountChartRenderer(container, initialOptions, runtime = createChartRuntime()) {\n let options = initialOptions;\n let scene;\n let interactionScene;\n let focusedPoint = null;\n let focusSource = \"pointer\";\n let pointerPosition = null;\n let pinnedKey = null;\n let observer;\n let renderFrame;\n let forceScheduledRender = false;\n let scheduledRenderReason;\n let destroyed = false;\n let hasRendered = false;\n let surface;\n let tooltipExtension;\n let tooltipInstance;\n let suppressNextSurfaceFocus = false;\n let spatialIndex;\n const previousPosition = container.style.position;\n const view = container.ownerDocument.defaultView;\n const computedPosition = view?.getComputedStyle(container).position;\n const ownsPosition = !computedPosition || computedPosition === \"static\";\n const domText = createDomTextMeasurer(container);\n const fontSet = container.ownerDocument.fonts;\n if (ownsPosition) container.style.position = \"relative\";\n const render = (refreshText = false, reason = \"update\") => {\n if (destroyed) return;\n if (refreshText && !options.measureText) domText.refresh();\n const previousFocusedPoint = focusedPoint;\n scene = createScene();\n interactionScene = scene;\n if (!surface) {\n surface = options.renderer.mount(container, scheduleRender);\n } else if (surface.renderer !== options.renderer) {\n surface?.destroy();\n destroyTooltip();\n container.replaceChildren();\n surface = options.renderer.mount(container, scheduleRender);\n hasRendered = false;\n }\n surface.render(scene, {\n ariaLabel: options.ariaLabel,\n ariaDescription: options.ariaDescription,\n className: options.className,\n tabIndex: options.definition.keyboard === false ? -1 : options.tabIndex ?? 0,\n idPrefix: options.idPrefix,\n animation: hasRendered ? resolveAnimation(options.definition.animate, container, reason) : void 0\n });\n hasRendered = true;\n spatialIndex = options.definition.spatialIndex?.(scene.points, scene);\n const nextFocusedPoint = previousFocusedPoint ? restoreFocusedPoint(scene.points, previousFocusedPoint) : null;\n focusedPoint = nextFocusedPoint;\n if (!nextFocusedPoint) pinnedKey = null;\n if (previousFocusedPoint) {\n focusSource = \"restored\";\n const nextFocusedPoints = nextFocusedPoint ? focusPointsForPoint(nextFocusedPoint) : [];\n paintFocus(nextFocusedPoint, nextFocusedPoints);\n options.onFocusChange?.(nextFocusedPoint);\n options.onFocusGroupChange?.(nextFocusedPoints);\n }\n const onRender = options.onRender;\n if (onRender) {\n onRender({ container, scene, surface });\n }\n };\n const currentWidth = () => {\n const width = options.width ?? container.getBoundingClientRect().width;\n return options.width !== void 0 || width > 0 ? width : void 0;\n };\n const configureObserver = () => {\n observer?.disconnect();\n observer = void 0;\n if (options.width !== void 0) return;\n const ResizeObserverConstructor = view?.ResizeObserver;\n if (!ResizeObserverConstructor) return;\n observer = new ResizeObserverConstructor(() => {\n const width = currentWidth();\n if (width === void 0 || width === scene.width) return;\n scheduleRender(false, \"resize\");\n });\n observer.observe(container);\n };\n const scheduleRender = (force = false, reason = \"layout\") => {\n forceScheduledRender ||= force;\n scheduledRenderReason = scheduledRenderReason === \"layout\" || reason === \"layout\" ? \"layout\" : \"resize\";\n if (renderFrame !== void 0) return;\n if (!view?.requestAnimationFrame) {\n const nextWidth = currentWidth();\n const shouldRender = forceScheduledRender || nextWidth !== void 0 && nextWidth !== scene.width;\n forceScheduledRender = false;\n const nextReason = scheduledRenderReason ?? \"layout\";\n scheduledRenderReason = void 0;\n if (shouldRender) render(true, nextReason);\n return;\n }\n renderFrame = view.requestAnimationFrame(() => {\n renderFrame = void 0;\n const nextWidth = currentWidth();\n const shouldRender = forceScheduledRender || nextWidth !== void 0 && nextWidth !== scene.width;\n forceScheduledRender = false;\n const nextReason = scheduledRenderReason ?? \"layout\";\n scheduledRenderReason = void 0;\n if (shouldRender) render(true, nextReason);\n });\n };\n const handleFontLoad = () => {\n if (destroyed || options.measureText) return;\n domText.invalidate();\n scheduleRender(true);\n };\n const updateFocus = (points, forcePaint = false) => {\n const point = points[0] ?? null;\n if (samePointIdentity(point, focusedPoint)) {\n if (forcePaint) paintTooltip(point, points);\n return;\n }\n focusedPoint = point;\n paintFocus(point, points);\n options.onFocusChange?.(point);\n options.onFocusGroupChange?.(points);\n };\n const dismissTooltip = () => {\n if (!focusedPoint && !pinnedKey) return;\n const restoreFocus = Boolean(\n tooltipInstance?.contains(container.ownerDocument.activeElement)\n );\n pinnedKey = null;\n pointerPosition = null;\n updateFocus([]);\n const element = surface?.element;\n if (restoreFocus && element && \"focus\" in element && typeof element.focus === \"function\") {\n suppressNextSurfaceFocus = true;\n element.focus();\n }\n };\n const paintFocus = (point, points) => {\n const paintedScene = surface?.paintFocus(\n point ? {\n primary: point,\n group: points,\n source: focusSource,\n pinned: pinnedKey !== null\n } : null,\n pointerPosition\n );\n interactionScene = paintedScene ?? scene;\n paintTooltip(point, points);\n };\n const pointsAtPointer = (clientX, clientY) => {\n const position = surface?.clientToScene(scene, clientX, clientY);\n pointerPosition = position ?? null;\n if (!position) return [];\n const maxDistance = options.definition.maxFocusDistance ?? 48;\n return resolvePointerFocus(position.x, position.y, maxDistance);\n };\n const handlePointerMove = (event) => {\n if (pinnedKey) return;\n focusSource = \"pointer\";\n updateFocus(\n pointsAtPointer(event.clientX, event.clientY),\n tooltipTracksPointer()\n );\n };\n const clearTransientFocus = ({ relatedTarget }) => {\n if (!pinnedKey && !(view && relatedTarget instanceof view.Node && container.contains(relatedTarget))) {\n pointerPosition = null;\n updateFocus([]);\n }\n };\n const handleClick = (event) => {\n if (tooltipInstance?.contains(event.target)) {\n return;\n }\n const points = pointsAtPointer(event.clientX, event.clientY);\n focusSource = \"pointer\";\n const point = points[0] ?? null;\n let pinChanged = false;\n if (tooltipIsSticky()) {\n if (pinnedKey) {\n pinnedKey = null;\n pinChanged = true;\n } else if (point) {\n pinnedKey = point.key;\n pinChanged = true;\n }\n }\n updateFocus(points, pinChanged);\n options.onSelect?.(point);\n };\n const handleKeyDown = (event) => {\n if (options.definition.keyboard === false || !scene.points.length) return;\n if (event.key === \"Escape\" && pinnedKey) {\n event.preventDefault();\n dismissTooltip();\n return;\n }\n if (event.key === \"Enter\" || event.key === \" \") {\n if (!focusedPoint) return;\n event.preventDefault();\n if (tooltipIsSticky()) {\n pinnedKey = pinnedKey ? null : focusedPoint.key;\n paintFocus(focusedPoint, focusPointsForPoint(focusedPoint));\n }\n options.onSelect?.(focusedPoint);\n return;\n }\n const focus = resolveFocusStrategy(options.definition.focus);\n const point = focus ? pointFromNavigationOrder(\n focus.navigation(scene.points),\n focusedPoint,\n event.key\n ) : pointFromSceneOrder(scene.points, focusedPoint, event.key);\n if (point === void 0) return;\n event.preventDefault();\n pointerPosition = null;\n focusSource = \"keyboard\";\n updateFocus(point ? focusPointsForPoint(point) : []);\n };\n const handleFocus = (event) => {\n if (event.target === surface?.element && suppressNextSurfaceFocus) {\n suppressNextSurfaceFocus = false;\n return;\n }\n if (options.definition.keyboard !== false && event.target === surface?.element && !focusedPoint) {\n const focus = resolveFocusStrategy(options.definition.focus);\n const point = focus ? focus.navigation(scene.points)[0] : pointFromSceneOrder(scene.points, null, \"Home\");\n pointerPosition = null;\n focusSource = \"keyboard\";\n updateFocus(point ? focusPointsForPoint(point) : []);\n }\n };\n container.addEventListener(\"pointermove\", handlePointerMove);\n container.addEventListener(\"pointercancel\", clearTransientFocus);\n container.addEventListener(\"mouseleave\", clearTransientFocus);\n container.addEventListener(\"click\", handleClick);\n container.addEventListener(\"keydown\", handleKeyDown);\n container.addEventListener(\"focusin\", handleFocus);\n container.addEventListener(\"focusout\", clearTransientFocus);\n fontSet?.addEventListener?.(\"loadingdone\", handleFontLoad);\n render();\n configureObserver();\n return {\n update(nextOptions) {\n if (destroyed) return;\n const fontChanged = nextOptions.measureText === void 0 && domText.refresh();\n const definitionChanged = options.definition !== nextOptions.definition;\n const sizeChanged = options.height !== nextOptions.height || options.aspectRatio !== nextOptions.aspectRatio || options.width !== nextOptions.width || options.initialWidth !== nextOptions.initialWidth;\n const layoutChanged = options.idPrefix !== nextOptions.idPrefix || options.renderer !== nextOptions.renderer || options.measureText !== nextOptions.measureText || fontChanged;\n const needsRender = definitionChanged || sizeChanged || options.ariaLabel !== nextOptions.ariaLabel || options.ariaDescription !== nextOptions.ariaDescription || options.className !== nextOptions.className || options.tabIndex !== nextOptions.tabIndex || options.idPrefix !== nextOptions.idPrefix || options.renderer !== nextOptions.renderer || options.measureText !== nextOptions.measureText || fontChanged;\n const observerChanged = options.width !== nextOptions.width;\n options = nextOptions;\n syncTooltip();\n if (!tooltipIsSticky()) pinnedKey = null;\n if (needsRender) {\n render(\n false,\n layoutChanged ? \"layout\" : sizeChanged ? \"resize\" : \"update\"\n );\n } else {\n if (focusedPoint) {\n paintFocus(focusedPoint, focusPointsForPoint(focusedPoint));\n }\n }\n if (observerChanged) configureObserver();\n },\n getScene: () => scene,\n destroy() {\n if (destroyed) return;\n destroyed = true;\n observer?.disconnect();\n fontSet?.removeEventListener?.(\"loadingdone\", handleFontLoad);\n if (renderFrame !== void 0) {\n view?.cancelAnimationFrame?.(renderFrame);\n }\n destroyTooltip();\n surface?.destroy();\n runtime.destroy();\n container.removeEventListener(\"pointermove\", handlePointerMove);\n container.removeEventListener(\"pointercancel\", clearTransientFocus);\n container.removeEventListener(\"mouseleave\", clearTransientFocus);\n container.removeEventListener(\"click\", handleClick);\n container.removeEventListener(\"keydown\", handleKeyDown);\n container.removeEventListener(\"focusin\", handleFocus);\n container.removeEventListener(\"focusout\", clearTransientFocus);\n container.replaceChildren();\n if (ownsPosition && container.style.position === \"relative\") {\n container.style.position = previousPosition;\n }\n }\n };\n function createScene() {\n const width = currentWidth() ?? options.initialWidth ?? 640;\n return runtime.render(\n options.definition,\n {\n width,\n height: options.height ?? (isPositiveFiniteNumber(options.aspectRatio) ? width / options.aspectRatio : 320)\n },\n { measureText: options.measureText ?? domText.measureText }\n );\n }\n function resolvePointerFocus(x, y, maxDistance) {\n const points = interactionPoints();\n const focus = resolveFocusStrategy(options.definition.focus);\n if (focus) {\n return focus.resolve(points, x, y, maxDistance);\n }\n const point = points !== interactionScene.points ? nearestPoint(points, x, y, maxDistance) : spatialIndex && interactionScene === scene ? spatialIndex.findNearest(x, y, maxDistance) : findNearestPoint(interactionScene, x, y, maxDistance);\n return point ? [point] : [];\n }\n function interactionPoints() {\n return surface?.getPresentationPoints?.() ?? interactionScene.points;\n }\n function focusPointsForPoint(point) {\n return resolveFocusStrategy(options.definition.focus)?.group(\n interactionPoints(),\n point\n ) ?? [point];\n }\n function paintTooltip(point, points) {\n const input = resolveTooltipInput(options.definition.tooltip);\n if (!input || !point || !surface) {\n tooltipInstance?.hide();\n return;\n }\n if (tooltipExtension !== input.extension || !tooltipInstance) {\n destroyTooltip();\n tooltipExtension = input.extension;\n tooltipInstance = input.extension.create({\n container,\n dismiss: dismissTooltip,\n bodyChange: () => options.onTooltipBodyChange\n });\n }\n const instance = tooltipInstance;\n instance.update(input.options);\n instance.paint({\n point,\n points,\n scene,\n surface,\n pointer: pointerPosition,\n focus: {\n primary: point,\n group: points,\n source: focusSource,\n pinned: pinnedKey !== null\n },\n pinned: pinnedKey !== null\n });\n }\n function syncTooltip() {\n const input = resolveTooltipInput(options.definition.tooltip);\n if (!input) {\n tooltipInstance?.update(emptyTooltipOptions);\n tooltipInstance?.hide();\n } else if (input.extension !== tooltipExtension) {\n destroyTooltip();\n } else {\n tooltipInstance?.update(input.options);\n }\n }\n function destroyTooltip() {\n tooltipInstance?.destroy();\n tooltipInstance = void 0;\n tooltipExtension = void 0;\n }\n function tooltipIsSticky() {\n const input = resolveTooltipInput(options.definition.tooltip);\n return Boolean(input && input.options.sticky !== false);\n }\n function tooltipTracksPointer() {\n const input = resolveTooltipInput(options.definition.tooltip);\n const anchor = input?.options.anchor;\n return anchor === \"pointer\" || typeof anchor === \"function\" || typeof anchor === \"object\" && (anchor.x === \"pointer\" || anchor.y === \"pointer\");\n }\n}\nconst emptyTooltipOptions = {};\nfunction resolveTooltipInput(input) {\n if (!input) return null;\n return \"create\" in input ? {\n extension: input,\n options: emptyTooltipOptions\n } : {\n extension: input.use,\n options: input\n };\n}\nfunction samePointIdentity(left, right) {\n return left === right || left !== null && right !== null && left.key === right.key && left.markId === right.markId && left.datumIndex === right.datumIndex;\n}\nfunction restoreFocusedPoint(points, previous) {\n const matches = points.filter((point) => point.key === previous.key);\n if (matches.length < 2) return matches[0] ?? null;\n const datumType = typeof previous.datum;\n const hasReferenceIdentity = previous.datum !== null && (datumType === \"object\" || datumType === \"function\");\n if (hasReferenceIdentity) {\n const sameDatum = matches.find((point) => point.datum === previous.datum);\n if (sameDatum) return sameDatum;\n }\n return matches.find(\n (point) => point.markId === previous.markId && Object.is(point.group, previous.group) && chartValueEqual(point.xValue, previous.xValue) && chartValueEqual(point.yValue, previous.yValue)\n ) ?? matches.find(\n (point) => point.markId === previous.markId && point.datumIndex === previous.datumIndex\n ) ?? matches[0] ?? null;\n}\nfunction chartValueEqual(left, right) {\n return left instanceof Date && right instanceof Date ? left.getTime() === right.getTime() : Object.is(left, right);\n}\nfunction isPositiveFiniteNumber(value) {\n return typeof value === \"number\" && Number.isFinite(value) && value > 0;\n}\nfunction resolveFocusStrategy(focus) {\n if (typeof focus !== \"string\") return focus;\n switch (focus) {\n case \"nearest-x\":\n return focusNearestX;\n case \"nearest-y\":\n return focusNearestY;\n case \"group-x\":\n return focusX;\n case \"group-y\":\n return focusY;\n case \"nearest\":\n return void 0;\n }\n}\nfunction resolveAnimation(animation, container, reason) {\n const configured = animation === true ? {} : animation || void 0;\n if (!configured) return void 0;\n if (reason === \"layout\") return void 0;\n if (reason === \"resize\" && configured.resize !== true) return void 0;\n if ((configured.respectReducedMotion ?? true) && container.ownerDocument.defaultView?.matchMedia?.(\n \"(prefers-reduced-motion: reduce)\"\n ).matches) {\n return void 0;\n }\n const { resize: _resize, ...resolved } = configured;\n return resolved;\n}\nfunction pointFromNavigationOrder(points, current, key) {\n const currentIndex = current ? points.findIndex((point) => samePointIdentity(point, current)) : -1;\n let nextIndex;\n switch (key) {\n case \"ArrowRight\":\n case \"ArrowDown\":\n nextIndex = Math.min(points.length - 1, currentIndex + 1);\n break;\n case \"ArrowLeft\":\n case \"ArrowUp\":\n nextIndex = Math.max(0, currentIndex < 0 ? 0 : currentIndex - 1);\n break;\n case \"Home\":\n nextIndex = 0;\n break;\n case \"End\":\n nextIndex = points.length - 1;\n break;\n default:\n return void 0;\n }\n return points[nextIndex] ?? null;\n}\nfunction pointFromSceneOrder(points, current, key) {\n const direction = key === \"ArrowRight\" || key === \"ArrowDown\" ? 1 : key === \"ArrowLeft\" || key === \"ArrowUp\" ? -1 : key === \"Home\" ? 0 : key === \"End\" ? 2 : void 0;\n if (direction === void 0) return void 0;\n if (!points.length) return null;\n const currentIndex = current ? points.findIndex((point) => samePointIdentity(point, current)) : -1;\n if (!current || currentIndex < 0 || direction === 0 || direction === 2) {\n return navigationExtreme(points, direction === 2);\n }\n let candidate = null;\n let candidateIndex = -1;\n for (let index = 0; index < points.length; index += 1) {\n const point = points[index];\n if (!point) continue;\n const relative = compareNavigationPoints(\n point,\n index,\n current,\n currentIndex\n );\n if (direction > 0 && relative <= 0 || direction < 0 && relative >= 0) {\n continue;\n }\n if (!candidate || direction * compareNavigationPoints(point, index, candidate, candidateIndex) < 0) {\n candidate = point;\n candidateIndex = index;\n }\n }\n return candidate ?? current;\n}\nfunction navigationExtreme(points, maximum) {\n let candidate = points[0] ?? null;\n let candidateIndex = 0;\n for (let index = 1; index < points.length; index += 1) {\n const point = points[index];\n if (!point || !candidate) continue;\n const comparison = compareNavigationPoints(\n point,\n index,\n candidate,\n candidateIndex\n );\n if (maximum && comparison > 0 || !maximum && comparison < 0) {\n candidate = point;\n candidateIndex = index;\n }\n }\n return candidate;\n}\nfunction compareNavigationPoints(left, leftIndex, right, rightIndex) {\n return left.x - right.x || left.y - right.y || leftIndex - rightIndex;\n}\nexport {\n mountChartRenderer\n};\n","const interpolatedAttributes = /* @__PURE__ */ new Set([\n \"cx\",\n \"cy\",\n \"d\",\n \"fill-opacity\",\n \"height\",\n \"opacity\",\n \"r\",\n \"rx\",\n \"stroke-opacity\",\n \"stroke-width\",\n \"transform\",\n \"width\",\n \"x\",\n \"x1\",\n \"x2\",\n \"y\",\n \"y1\",\n \"y2\"\n]);\nfunction reconcileChartSvg(container, markup, animation) {\n const template = container.ownerDocument.createElement(\"template\");\n template.innerHTML = markup;\n const nextRoot = template.content.firstElementChild;\n if (!nextRoot) return () => {\n };\n const currentRoot = container.firstElementChild;\n if (!currentRoot || currentRoot.namespaceURI !== nextRoot.namespaceURI || currentRoot.localName !== nextRoot.localName) {\n container.replaceChildren(nextRoot);\n return () => {\n };\n }\n const tweens = [];\n reconcileElement(currentRoot, nextRoot, animation ? tweens : void 0);\n return animation ? runTweens(container, tweens, animation) : () => {\n };\n}\nfunction reconcileElement(current, next, tweens) {\n syncAttributes(current, next, tweens);\n if (!next.firstElementChild) {\n if (current.textContent !== next.textContent) {\n current.textContent = next.textContent;\n }\n return;\n }\n const currentChildren = [...current.children];\n const nextChildren = [...next.children];\n const currentByIdentity = indexChildren(currentChildren);\n const nextIdentities = identities(nextChildren);\n const retained = /* @__PURE__ */ new Set();\n let cursor = current.firstElementChild;\n nextChildren.forEach((nextChild, index) => {\n const identity = nextIdentities[index];\n const matched = currentByIdentity.get(identity);\n let rendered;\n if (matched && matched.namespaceURI === nextChild.namespaceURI && matched.localName === nextChild.localName) {\n rendered = matched;\n retained.add(matched);\n if (rendered !== cursor) current.insertBefore(rendered, cursor);\n reconcileElement(rendered, nextChild, tweens);\n } else {\n rendered = nextChild.cloneNode(true);\n current.insertBefore(rendered, cursor);\n addEnterTween(rendered, nextChild, tweens);\n }\n cursor = rendered.nextElementSibling;\n });\n for (const child of currentChildren) {\n if (!retained.has(child) && child.parentElement === current) {\n if (tweens) addExitTween(child, tweens);\n else child.remove();\n }\n }\n}\nfunction syncAttributes(current, next, tweens) {\n const nextNames = new Set(next.getAttributeNames());\n for (const name of current.getAttributeNames()) {\n if (!nextNames.has(name)) current.removeAttribute(name);\n }\n for (const name of nextNames) {\n const target = next.getAttribute(name);\n const previous = current.getAttribute(name);\n if (target === previous) continue;\n const interpolate = tweens && previous !== null && target !== null && interpolatedAttributes.has(name) ? interpolateAttribute(previous, target) : void 0;\n if (interpolate && tweens) {\n tweens.push({ element: current, name, interpolate, target });\n } else if (target !== null) {\n current.setAttribute(name, target);\n }\n }\n}\nfunction addEnterTween(current, next, tweens) {\n if (!tweens) return;\n const target = next.getAttribute(\"opacity\");\n const targetValue = target ?? \"1\";\n current.setAttribute(\"opacity\", \"0\");\n tweens.push({\n element: current,\n name: \"opacity\",\n interpolate: (progress) => String(Number(targetValue) * Math.max(0, Math.min(1, progress))),\n target\n });\n}\nfunction addExitTween(current, tweens) {\n const opacity = Number(current.getAttribute(\"opacity\") ?? 1);\n const start = Number.isFinite(opacity) ? opacity : 1;\n tweens.push({\n element: current,\n name: \"opacity\",\n interpolate: (progress) => String(start * (1 - progress)),\n target: \"0\",\n removeOnFinish: true\n });\n}\nfunction runTweens(container, tweens, options) {\n if (!tweens.length) return () => {\n };\n const view = container.ownerDocument.defaultView;\n const requestFrame = view?.requestAnimationFrame?.bind(view);\n const cancelFrame = view?.cancelAnimationFrame?.bind(view);\n const duration = Math.max(0, options.duration ?? 240);\n if (!requestFrame || !cancelFrame || duration === 0) {\n finishTweens(tweens);\n return () => {\n };\n }\n let frame = 0;\n let cancelled = false;\n let start;\n const ease = easing(options.easing ?? \"ease-out\");\n const tick = (time) => {\n if (cancelled) return;\n start ??= time;\n const progress = Math.min(1, (time - start) / duration);\n const eased = ease(progress);\n for (const tween of tweens) {\n tween.element.setAttribute(tween.name, tween.interpolate(eased));\n }\n if (progress < 1) frame = requestFrame(tick);\n else finishTweens(tweens);\n };\n frame = requestFrame(tick);\n return () => {\n cancelled = true;\n cancelFrame(frame);\n };\n}\nfunction finishTweens(tweens) {\n for (const tween of tweens) {\n if (tween.removeOnFinish) {\n tween.element.remove();\n continue;\n }\n if (tween.target === null) tween.element.removeAttribute(tween.name);\n else tween.element.setAttribute(tween.name, tween.target);\n }\n}\nfunction interpolateAttribute(previous, next) {\n const previousNumbers = extractNumbers(previous);\n const nextNumbers = extractNumbers(next);\n if (previousNumbers.skeleton !== nextNumbers.skeleton || previousNumbers.values.length !== nextNumbers.values.length || !previousNumbers.values.length) {\n return void 0;\n }\n return (progress) => {\n let index = 0;\n return nextNumbers.skeleton.replaceAll(\"#\", () => {\n const start = previousNumbers.values[index];\n const end = nextNumbers.values[index];\n index += 1;\n return formatNumber(start + (end - start) * progress);\n });\n };\n}\nfunction extractNumbers(value) {\n const values = [];\n const skeleton = value.replace(\n /-?(?:\\d+\\.?\\d*|\\.\\d+)(?:e[-+]?\\d+)?/gi,\n (match) => {\n values.push(Number(match));\n return \"#\";\n }\n );\n return { skeleton, values };\n}\nfunction indexChildren(children) {\n const result = /* @__PURE__ */ new Map();\n identities(children).forEach((identity, index) => {\n result.set(identity, children[index]);\n });\n return result;\n}\nfunction identities(children) {\n const counts = /* @__PURE__ */ new Map();\n return children.map((child) => {\n const explicit = child.getAttribute(\"data-ts-key\");\n if (explicit) return `key:${explicit}`;\n const count = counts.get(child.localName) ?? 0;\n counts.set(child.localName, count + 1);\n return `tag:${child.localName}:${count}`;\n });\n}\nfunction easing(name) {\n if (typeof name === \"function\") return name;\n switch (name) {\n case \"linear\":\n return (value) => value;\n case \"ease-in\":\n return (value) => value * value;\n case \"ease-in-out\":\n return (value) => value < 0.5 ? 2 * value * value : 1 - Math.pow(-2 * value + 2, 2) / 2;\n case \"ease\":\n case \"ease-out\":\n return (value) => 1 - Math.pow(1 - value, 3);\n }\n}\nfunction formatNumber(value) {\n return String(Math.round(value * 1e3) / 1e3);\n}\nexport {\n reconcileChartSvg\n};\n","function renderChartSvgWithHooks(scene, options, hooks) {\n const idPrefix = options.idPrefix ?? \"\";\n const className = options.className ? `ts-chart ${options.className}` : \"ts-chart\";\n const description = options.ariaDescription ? `<desc>${escapeText(options.ariaDescription)}</desc>` : \"\";\n const definitions = hooks?.renderDefinitions?.(scene, idPrefix) ?? \"\";\n const background = scene.theme.background === \"transparent\" ? \"\" : renderNode(\n {\n kind: \"rect\",\n key: \"background\",\n x: 0,\n y: 0,\n width: scene.width,\n height: scene.height,\n style: { fill: scene.theme.background }\n },\n hooks,\n idPrefix\n );\n return `<svg class=\"${escapeAttribute(className)}\" width=\"100%\" height=\"100%\" viewBox=\"0 0 ${number(scene.width)} ${number(scene.height)}\" role=\"img\" aria-roledescription=\"chart\" aria-label=\"${escapeAttribute(options.ariaLabel)}\" tabindex=\"${number(options.tabIndex ?? 0)}\" style=\"display:block;overflow:visible\">${description}${definitions}${background}${scene.nodes.map((node) => renderNode(node, hooks, idPrefix)).join(\"\")}</svg>`;\n}\nfunction renderNode(node, hooks, idPrefix) {\n const common = renderCommon(node, hooks, idPrefix);\n switch (node.kind) {\n case \"group\": {\n const transform = node.translateX === void 0 && node.translateY === void 0 ? \"\" : ` transform=\"translate(${number(node.translateX ?? 0)} ${number(node.translateY ?? 0)})\"`;\n const extension = hooks?.renderGroup?.(node, idPrefix);\n const focus = node.focus ? ` data-ts-focus-layer=\"${node.focus.placement}\" visibility=\"hidden\"` : \"\";\n return `<g${common}${transform}${focus}${extension?.attributes ?? \"\"}>${extension?.content ?? \"\"}${node.children.map((child) => renderNode(child, hooks, idPrefix)).join(\"\")}</g>`;\n }\n case \"rule\":\n return `<line${common} x1=\"${number(node.x1)}\" y1=\"${number(node.y1)}\" x2=\"${number(node.x2)}\" y2=\"${number(node.y2)}\"/>`;\n case \"polyline\": {\n const path = node.path ?? node.points.map(\n ([x, y], index) => `${index === 0 ? \"M\" : \"L\"}${number(x)},${number(y)}`\n ).join(\"\");\n return `<path${common} d=\"${path}\" vector-effect=\"non-scaling-stroke\"/>`;\n }\n case \"area\": {\n const path = node.path ?? `${node.points.map(\n ([x, y], index) => `${index === 0 ? \"M\" : \"L\"}${number(x)},${number(y)}`\n ).join(\"\")}Z`;\n return `<path${common} d=\"${path}\" vector-effect=\"non-scaling-stroke\"/>`;\n }\n case \"dot\":\n return `<circle${common} cx=\"${number(node.x)}\" cy=\"${number(node.y)}\" r=\"${number(node.radius)}\"/>`;\n case \"rect\":\n return `<rect${common} x=\"${number(node.x)}\" y=\"${number(node.y)}\" width=\"${number(node.width)}\" height=\"${number(node.height)}\"${node.radius === void 0 ? \"\" : ` rx=\"${number(node.radius)}\"`}/>`;\n case \"label\": {\n const transform = node.rotate === void 0 ? \"\" : ` transform=\"rotate(${number(node.rotate)} ${number(node.x)} ${number(node.y)})\"`;\n const anchor = node.anchor ? ` text-anchor=\"${node.anchor}\"` : \"\";\n const baseline = node.baseline ? ` dominant-baseline=\"${node.baseline}\"` : \"\";\n const fontSize = node.fontSize === void 0 ? \"\" : ` font-size=\"${number(node.fontSize)}\"`;\n const fontWeight = node.fontWeight === void 0 ? \"\" : ` font-weight=\"${number(node.fontWeight)}\"`;\n return `<text${common} x=\"${number(node.x)}\" y=\"${number(node.y)}\"${anchor}${baseline}${transform}${fontSize}${fontWeight} font-family=\"inherit\">${escapeText(node.text)}</text>`;\n }\n }\n}\nfunction renderCommon(node, hooks, idPrefix) {\n const key = ` data-ts-key=\"${escapeAttribute(node.key)}\"`;\n const className = node.className ? ` class=\"${escapeAttribute(node.className)}\"` : \"\";\n const ariaHidden = node.ariaHidden ? ' aria-hidden=\"true\"' : \"\";\n return `${key}${className}${ariaHidden}${renderStyle(node.style, hooks, idPrefix)}`;\n}\nfunction renderStyle(style, hooks, idPrefix) {\n if (!style) return \"\";\n const paint = (value) => value && hooks?.resolvePaint ? hooks.resolvePaint(value, idPrefix) : value;\n const attributes = [\n [\"fill\", paint(style.fill)],\n [\"fill-opacity\", style.fillOpacity],\n [\"stroke\", paint(style.stroke)],\n [\"stroke-opacity\", style.strokeOpacity],\n [\"stroke-width\", style.strokeWidth],\n [\"opacity\", style.opacity],\n [\"stroke-linecap\", style.lineCap],\n [\"stroke-linejoin\", style.lineJoin],\n [\"stroke-dasharray\", style.strokeDasharray]\n ];\n return attributes.filter((entry) => entry[1] != null).map(\n ([name, value]) => ` ${name}=\"${typeof value === \"number\" ? number(value) : escapeAttribute(value)}\"`\n ).join(\"\");\n}\nfunction number(value) {\n return String(Math.round(value * 100) / 100);\n}\nfunction escapeText(value) {\n return value.replaceAll(\"&\", \"&\").replaceAll(\"<\", \"<\").replaceAll(\">\", \">\");\n}\nfunction escapeAttribute(value) {\n return escapeText(value).replaceAll('\"', \""\");\n}\nexport {\n renderChartSvgWithHooks\n};\n","import { renderChartSvgWithHooks } from \"./svg-renderer.js\";\nfunction renderChartSvg(scene, options) {\n return renderChartSvgWithHooks(scene, options);\n}\nexport {\n renderChartSvg\n};\n","import { valueKey } from \"./scales.js\";\nfunction focusedSceneNodes(scene, focus, placement) {\n if (!focus) return [];\n return collectFocusedNodes(scene.nodes, focus, placement);\n}\nfunction focusedNodeKeys(layer, focus) {\n if (!layer.focus || !focus) return /* @__PURE__ */ new Set();\n const points = layer.focus.points.filter(\n (point) => matchesFocusPoint(point, focus, layer.focus.match)\n );\n const filtered = filterNodes(layer.children, points);\n const keys = /* @__PURE__ */ new Set();\n visitNodes(filtered, (node) => keys.add(node.key));\n return keys;\n}\nfunction collectFocusedNodes(nodes, focus, placement) {\n const output = [];\n for (const node of nodes) {\n if (node.kind !== \"group\") continue;\n if (node.focus) {\n if (node.focus.placement !== placement) continue;\n const points = node.focus.points.filter(\n (point) => matchesFocusPoint(point, focus, node.focus.match)\n );\n const children2 = filterNodes(node.children, points);\n if (children2.length) output.push({ ...node, focus: void 0, children: children2 });\n continue;\n }\n const children = collectFocusedNodes(node.children, focus, placement);\n if (children.length) output.push({ ...node, children });\n }\n return output;\n}\nfunction filterNodes(nodes, points) {\n const output = [];\n for (const node of nodes) {\n if (node.kind !== \"group\") {\n if (points.some((point) => keysRelate(node.key, point.key))) {\n output.push(node);\n }\n continue;\n }\n const children = filterNodes(node.children, points);\n if (children.length) {\n output.push({ ...node, children });\n } else if (points.some((point) => point.key.startsWith(`${node.key}:`))) {\n output.push(node);\n }\n }\n return output;\n}\nfunction matchesFocusPoint(candidate, focus, match) {\n if (match === \"x\") {\n return sameValue(candidate.xValue, focus.primary.xValue);\n }\n if (match === \"y\") {\n return sameValue(candidate.yValue, focus.primary.yValue);\n }\n if (match === \"series\") {\n return sameValue(candidate.group, focus.primary.group);\n }\n if (match === \"key\") {\n return candidate.key === focus.primary.key || candidate.datum === focus.primary.datum;\n }\n if (match === \"group\") {\n return focus.group.some((point) => sameFocusedPoint(candidate, point));\n }\n return sameFocusedPoint(candidate, focus.primary);\n}\nfunction sameFocusedPoint(left, right) {\n if (left === right || left.key === right.key) return true;\n return isReference(left.datum) && left.datum === right.datum;\n}\nfunction sameValue(left, right) {\n return valueKey(left) === valueKey(right);\n}\nfunction keysRelate(left, right) {\n return left === right || left.startsWith(`${right}:`) || right.startsWith(`${left}:`);\n}\nfunction isReference(value) {\n return typeof value === \"object\" && value !== null || typeof value === \"function\";\n}\nfunction visitNodes(nodes, visit) {\n for (const node of nodes) {\n visit(node);\n if (node.kind === \"group\") visitNodes(node.children, visit);\n }\n}\nexport {\n focusedNodeKeys,\n focusedSceneNodes,\n matchesFocusPoint\n};\n","import { matchesFocusPoint } from \"./focus-layer.js\";\nfunction resolveMarkStateScene(scene, focus, pointer = null) {\n if (!focus || !sceneHasMarkStates(scene.nodes)) return { scene };\n let transition;\n const visit = (nodes2, inheritedPoints, definitions, data, inheritedLookup) => nodes2.map((node) => {\n const state = node.kind === \"group\" ? node.states : void 0;\n const points = state?.points ?? inheritedPoints;\n const nodeDefinitions = state?.definitions ?? definitions;\n const nodeData = state?.data ?? data;\n const lookup = state ? createPointLookup(state.points) : inheritedLookup;\n const candidates = points ? relatedPoints(node.key, points, lookup) : emptyPoints;\n const resolved = node.kind !== \"group\" && nodeDefinitions && nodeData && candidates.length ? resolveNodeState(\n node,\n candidates,\n nodeData,\n nodeDefinitions,\n focus,\n pointer\n ) : { node };\n if (resolved.transition) {\n transition = mergeTransition(transition, resolved.transition);\n }\n const next = resolved.node;\n return next.kind === \"group\" ? {\n ...next,\n children: visit(\n next.children,\n candidates.length ? candidates : points,\n nodeDefinitions,\n nodeData,\n lookup\n )\n } : next;\n });\n const nodes = visit(scene.nodes);\n return { scene: { ...scene, nodes }, transition };\n}\nfunction resolveMarkStateTransition(transition, element) {\n if (!transition || transition.type !== \"tween\") return void 0;\n if ((transition.respectReducedMotion ?? true) && element.ownerDocument.defaultView?.matchMedia?.(\n \"(prefers-reduced-motion: reduce)\"\n ).matches) {\n return void 0;\n }\n const { type: _type, ...resolved } = transition;\n return resolved;\n}\nfunction sceneHasMarkStates(nodes) {\n return nodes.some(\n (node) => node.kind === \"group\" && (node.states !== void 0 || sceneHasMarkStates(node.children))\n );\n}\nfunction resolveNodeState(node, candidates, data, definitions, focus, pointer) {\n let output = node;\n let transition;\n for (const definition of definitions) {\n const context = matchingContext(\n candidates,\n data,\n definition,\n focus,\n pointer\n );\n if (!context) continue;\n output = applyStateStyle(output, definition.style, context);\n if (definition.transition) {\n transition = mergeTransition(transition, definition.transition);\n }\n }\n return { node: output, transition };\n}\nfunction matchingContext(candidates, data, definition, focus, pointer) {\n if (typeof definition.when !== \"function\" && definition.when.focus === \"unmatched\" && candidates.some((point) => matchesFocusPoint(point, focus, \"group\"))) {\n return void 0;\n }\n for (const point of candidates) {\n const context = {\n datum: point.datum,\n index: point.datumIndex,\n data,\n point,\n focus,\n pointer,\n matches: (match) => matchesFocusPoint(point, focus, match)\n };\n const matches = typeof definition.when === \"function\" ? definition.when(context) : matchesSelector(definition.when, context);\n if (matches) return context;\n }\n return void 0;\n}\nfunction matchesSelector(selector, context) {\n const source = selector.source;\n if (source !== void 0 && !(Array.isArray(source) ? source.includes(context.focus.source) : source === context.focus.source)) {\n return false;\n }\n if (selector.pinned !== void 0 && selector.pinned !== context.focus.pinned) {\n return false;\n }\n return selector.focus === \"unmatched\" ? !context.matches(\"group\") : context.matches(selector.focus);\n}\nfunction applyStateStyle(node, definition, context) {\n const style = { ...node.style };\n for (const property of styleProperties) {\n const value = resolveValue(definition[property], context);\n if (value !== void 0)\n style[property] = value;\n }\n let output = { ...node, style };\n const dx = resolveValue(definition.dx, context) ?? 0;\n const dy = resolveValue(definition.dy, context) ?? 0;\n const r = resolveValue(definition.r, context);\n const radius = resolveValue(definition.radius, context);\n const inset = resolveValue(definition.inset, context);\n const fontSize = resolveValue(definition.fontSize, context);\n const fontWeight = resolveValue(definition.fontWeight, context);\n const rotate = resolveValue(definition.rotate, context);\n switch (output.kind) {\n case \"dot\":\n output = {\n ...output,\n x: output.x + dx,\n y: output.y + dy,\n radius: r ?? output.radius\n };\n break;\n case \"rect\": {\n const nextInset = Math.max(0, inset ?? output.inset ?? 0);\n const amount = nextInset - (output.inset ?? 0);\n const insetX = output.insetAxis !== \"y\" ? amount : 0;\n const insetY = output.insetAxis !== \"x\" ? amount : 0;\n output = {\n ...output,\n x: output.x + insetX + dx,\n y: output.y + insetY + dy,\n width: Math.max(0, output.width - insetX * 2),\n height: Math.max(0, output.height - insetY * 2),\n radius: radius ?? output.radius,\n inset: nextInset\n };\n break;\n }\n case \"label\":\n output = {\n ...output,\n x: output.x + dx,\n y: output.y + dy,\n fontSize: fontSize ?? output.fontSize,\n fontWeight: fontWeight ?? output.fontWeight,\n rotate: rotate ?? output.rotate\n };\n break;\n }\n return output;\n}\nconst styleProperties = [\n \"fill\",\n \"fillOpacity\",\n \"stroke\",\n \"strokeOpacity\",\n \"strokeWidth\",\n \"opacity\",\n \"strokeDasharray\"\n];\nfunction resolveValue(value, context) {\n return typeof value === \"function\" ? value(context) : value;\n}\nfunction relatedPoints(key, points, lookup) {\n if (!lookup) return points;\n let candidate = key;\n while (candidate) {\n const related = lookup.get(candidate);\n if (related) return related;\n const separator = candidate.lastIndexOf(\":\");\n if (separator < 0) break;\n candidate = candidate.slice(0, separator);\n }\n return points;\n}\nconst emptyPoints = [];\nfunction createPointLookup(points) {\n const lookup = /* @__PURE__ */ new Map();\n for (const point of points) {\n let separator = -1;\n do {\n separator = point.key.indexOf(\":\", separator + 1);\n const prefix = separator < 0 ? point.key : point.key.slice(0, separator);\n const related = lookup.get(prefix);\n if (related) related.push(point);\n else lookup.set(prefix, [point]);\n } while (separator >= 0);\n }\n return lookup;\n}\nfunction mergeTransition(current, next) {\n if (!current || current.type !== next.type) return next;\n if (current.type === \"spring\" && next.type === \"spring\") {\n return { ...current, ...next };\n }\n if (current.type !== \"tween\" || next.type !== \"tween\") return next;\n return {\n ...current,\n ...next,\n duration: Math.max(current.duration ?? 250, next.duration ?? 250)\n };\n}\nexport {\n resolveMarkStateScene,\n resolveMarkStateTransition,\n sceneHasMarkStates\n};\n","import { reconcileChartSvg } from \"./reconcile.js\";\nimport { renderChartSvg } from \"./svg.js\";\nimport { focusedNodeKeys } from \"./focus-layer.js\";\nimport { resolveMarkStateScene, resolveMarkStateTransition } from \"./mark-state.js\";\nfunction createSvgChartRenderer(renderSvg = renderChartSvg) {\n const renderer = {\n id: \"svg\",\n prerender: renderSvg,\n mount(container) {\n let cancelAnimation = () => {\n };\n let scene;\n let renderOptions;\n let stateTransition;\n const svgElement = () => {\n const svg = container.querySelector(\"svg.ts-chart\");\n if (!svg) {\n throw new Error(\n \"The SVG renderer must produce an svg.ts-chart root element.\"\n );\n }\n return svg;\n };\n const surface = {\n renderer,\n get element() {\n return svgElement();\n },\n render(nextScene, options) {\n cancelAnimation();\n cancelAnimation = reconcileChartSvg(\n container,\n renderSvg(nextScene, options),\n options.animation\n );\n scene = nextScene;\n renderOptions = options;\n stateTransition = void 0;\n },\n clientToScene(scene2, clientX, clientY) {\n return clientToScene(svgElement(), scene2, clientX, clientY);\n },\n paintFocus(focus, pointer) {\n if (!scene || !renderOptions) return;\n const resolved = resolveMarkStateScene(scene, focus, pointer);\n const previousTransition = stateTransition;\n if (resolved.scene !== scene || previousTransition) {\n cancelAnimation();\n cancelAnimation = reconcileChartSvg(\n container,\n renderSvg(resolved.scene, renderOptions),\n resolveMarkStateTransition(\n resolved.transition ?? previousTransition,\n container\n )\n );\n }\n stateTransition = focus ? resolved.transition ?? previousTransition : void 0;\n paintSvgFocus(svgElement(), resolved.scene, focus);\n return resolved.scene;\n },\n destroy() {\n cancelAnimation();\n }\n };\n return surface;\n }\n };\n return renderer;\n}\nconst svgChartRenderer = createSvgChartRenderer();\nfunction clientToScene(element, scene, clientX, clientY) {\n const matrix = element.getScreenCTM?.();\n if (!matrix) {\n const bounds = element.getBoundingClientRect();\n if (!bounds.width || !bounds.height) return null;\n return {\n x: (clientX - bounds.left) / bounds.width * scene.width,\n y: (clientY - bounds.top) / bounds.height * scene.height\n };\n }\n let inverse;\n try {\n inverse = matrix.inverse();\n } catch {\n return null;\n }\n const x = inverse.a * clientX + inverse.c * clientY + inverse.e;\n const y = inverse.b * clientX + inverse.d * clientY + inverse.f;\n if (!Number.isFinite(x) || !Number.isFinite(y)) return null;\n return { x, y };\n}\nfunction paintSvgFocus(svg, scene, focus) {\n const sceneLayers = collectFocusLayers(scene.nodes);\n const elements = svg.querySelectorAll(\"[data-ts-focus-layer]\");\n elements.forEach((element, index) => {\n const layer = sceneLayers[index];\n const visible = layer ? focusedNodeKeys(layer, focus) : /* @__PURE__ */ new Set();\n element.setAttribute(\n \"visibility\",\n focus && visible.size ? \"visible\" : \"hidden\"\n );\n element.querySelectorAll(\"[data-ts-key]\").forEach((child) => {\n const key = child.dataset.tsKey;\n child.setAttribute(\n \"visibility\",\n key && visible.has(key) ? \"visible\" : \"hidden\"\n );\n });\n });\n}\nfunction collectFocusLayers(nodes) {\n const layers = [];\n for (const node of nodes) {\n if (node.kind !== \"group\") continue;\n if (node.focus) {\n layers.push(node);\n } else {\n layers.push(...collectFocusLayers(node.children));\n }\n }\n return layers;\n}\nexport {\n createSvgChartRenderer,\n svgChartRenderer\n};\n","import { mountChartRenderer } from \"./renderer.js\";\nimport { createChartRuntime } from \"./runtime.js\";\nimport { createSvgChartRenderer } from \"./svg-surface.js\";\nimport { renderChartSvg } from \"./svg.js\";\nfunction mountChart(container, initialOptions, runtime = createChartRuntime()) {\n let renderSvg = initialOptions.renderSvg ?? renderChartSvg;\n let renderer = createSvgChartRenderer(renderSvg);\n const rendererOptions = (options) => {\n const nextRenderSvg = options.renderSvg ?? renderChartSvg;\n if (nextRenderSvg !== renderSvg) {\n renderSvg = nextRenderSvg;\n renderer = createSvgChartRenderer(renderSvg);\n }\n const { renderSvg: _renderSvg, onRender, ...common } = options;\n return {\n ...common,\n renderer,\n onRender: onRender ? ({ container: hostContainer, scene, surface }) => {\n const svg = surface.element;\n const SvgElement = container.ownerDocument.defaultView?.SVGSVGElement;\n if (!SvgElement || !(svg instanceof SvgElement)) {\n throw new TypeError(\"Expected the SVG chart surface.\");\n }\n onRender({ container: hostContainer, scene, svg });\n } : void 0\n };\n };\n const host = mountChartRenderer(\n container,\n rendererOptions(initialOptions),\n runtime\n );\n return {\n update(options) {\n host.update(rendererOptions(options));\n },\n getScene: host.getScene,\n destroy: host.destroy\n };\n}\nexport {\n mountChart\n};\n","import { scaleBand } from \"d3-scale\";\nimport {\n channelValues,\n createMark,\n inferredKeyValues,\n isChartKey,\n isChartValue,\n isFiniteNumber,\n markStates,\n visualValue\n} from \"./mark.js\";\nimport { resolveScaleInput } from \"./scale-input.js\";\nimport { valueKey } from \"./scales.js\";\nimport { stackValues } from \"./stack-internal.js\";\nfunction barY(source, options = {}) {\n const data = Array.isArray(source) ? source : Array.from(source);\n return createMark(({ markIndex }) => {\n const id = options.id ?? `bar-y-${markIndex}`;\n const xValues = channelValues(data, options.x, (_datum, index) => index);\n const rawYValues = numericChannelValues(\n data,\n options.y ?? options.y2,\n (datum) => typeof datum === \"number\" ? datum : void 0\n );\n const zValues = channelValues(data, options.z, () => null);\n const colorValues = options.color === void 0 ? zValues : channelValues(data, options.color, () => null);\n const seriesValues = options.z === void 0 && options.color !== void 0 ? colorValues : zValues;\n const explicitExtent = options.y1 !== void 0 || options.y2 !== void 0;\n if (explicitExtent && options.layout?.type === \"stack\") {\n throw new TypeError(\n \"A bar with explicit y1 or y2 endpoints cannot also configure a stack layout\"\n );\n }\n const grouped = options.layout?.type === \"group\";\n const stackLayout = options.layout?.type === \"stack\" ? options.layout : {};\n const stacked = !explicitExtent && !grouped ? stackValues(xValues, rawYValues, seriesValues, stackLayout, \"index\") : void 0;\n const y1Values = explicitExtent ? numericChannelValues(data, options.y1, () => 0) : stacked?.starts ?? data.map(() => 0);\n const y2Values = explicitExtent ? numericChannelValues(data, options.y2 ?? options.y, () => void 0) : grouped ? rawYValues : stacked.ends;\n const duplicatePositions = hasDuplicateValues(xValues);\n const groupValues = grouped || !explicitExtent && duplicatePositions ? seriesValues : zValues;\n const keys = inferredKeyValues(data, options.key, {\n groups: groupValues,\n candidates: [xValues],\n markId: id,\n warningIdentity: options\n });\n return {\n id,\n states: markStates(data, options.states),\n seriesFromColor: options.z === void 0 && options.color !== void 0 && (grouped || duplicatePositions),\n channels: {\n x: { scale: \"x\", values: xValues.filter(isChartValue) },\n y: {\n scale: \"y\",\n values: [\n ...y2Values.filter(isFiniteNumber),\n ...y1Values.filter(isFiniteNumber)\n ],\n includeZero: options.y1 === void 0\n },\n color: {\n scale: \"color\",\n values: colorValues.filter(isChartKey)\n }\n },\n render: ({ scales, chart, color: resolveColor }) => {\n const totalBandwidth = scales.x.bandwidth || inferBandwidth(scales.x, xValues, chart.width, data.length);\n const groupScale = resolveGroupScale(\n options.layout?.type === \"group\" ? options.layout : void 0,\n groupValues,\n totalBandwidth\n );\n const groupBandwidth = groupScale?.bandwidth ?? totalBandwidth;\n const inset = Math.max(0, options.inset ?? 0);\n const nodes = [];\n data.forEach((datum, datumIndex) => {\n const xValue = xValues[datumIndex];\n const yValue = rawYValues[datumIndex];\n const y1Value = y1Values[datumIndex];\n const y2Value = y2Values[datumIndex];\n if (!isChartValue(xValue) || !isFiniteNumber(yValue) || !isFiniteNumber(y1Value) || !isFiniteNumber(y2Value))\n return;\n const group = groupValues[datumIndex] ?? null;\n const groupOffset = groupScale?.map(group) ?? 0;\n const resolvedColor = resolveColor(colorValues[datumIndex]);\n const fill = visualValue(\n options.fill,\n datum,\n datumIndex,\n data,\n resolvedColor\n );\n const center = scales.x.map(xValue);\n const baselinePosition = scales.y.map(y1Value);\n const valuePosition = scales.y.map(y2Value);\n const x = center - totalBandwidth / 2 + groupOffset + inset;\n const y = Math.min(baselinePosition, valuePosition);\n const width = Math.max(0, groupBandwidth - inset * 2);\n const height = Math.abs(baselinePosition - valuePosition);\n const key = `${id}:${valueKey(group)}:${valueKey(keys[datumIndex])}`;\n const point = {\n key,\n markId: id,\n group,\n groupLabel: group == null ? id : String(group),\n datum,\n datumIndex,\n xValue,\n yValue,\n y1Value,\n y2Value,\n yInterval: \"difference\",\n x: center - totalBandwidth / 2 + groupOffset + groupBandwidth / 2,\n y: valuePosition,\n color: fill\n };\n nodes.push({\n kind: \"rect\",\n key,\n x,\n y,\n width,\n height,\n radius: options.radius,\n inset,\n insetAxis: \"x\",\n interaction: { point, affinity: \"x\" },\n style: {\n fill,\n fillOpacity: options.fillOpacity\n }\n });\n });\n return {\n nodes: [\n {\n kind: \"group\",\n key: id,\n className: \"ts-chart__bar ts-chart__bar-y\",\n ariaHidden: true,\n children: nodes\n }\n ]\n };\n }\n };\n }, options.motion);\n}\nfunction barX(source, options = {}) {\n const data = Array.isArray(source) ? source : Array.from(source);\n return createMark(({ markIndex }) => {\n const id = options.id ?? `bar-x-${markIndex}`;\n const rawXValues = numericChannelValues(\n data,\n options.x ?? options.x2,\n (datum) => typeof datum === \"number\" ? datum : void 0\n );\n const yValues = channelValues(data, options.y, (_datum, index) => index);\n const zValues = channelValues(data, options.z, () => null);\n const colorValues = options.color === void 0 ? zValues : channelValues(data, options.color, () => null);\n const seriesValues = options.z === void 0 && options.color !== void 0 ? colorValues : zValues;\n const explicitExtent = options.x1 !== void 0 || options.x2 !== void 0;\n if (explicitExtent && options.layout?.type === \"stack\") {\n throw new TypeError(\n \"A bar with explicit x1 or x2 endpoints cannot also configure a stack layout\"\n );\n }\n const grouped = options.layout?.type === \"group\";\n const stackLayout = options.layout?.type === \"stack\" ? options.layout : {};\n const stacked = !explicitExtent && !grouped ? stackValues(yValues, rawXValues, seriesValues, stackLayout, \"index\") : void 0;\n const x1Values = explicitExtent ? numericChannelValues(data, options.x1, () => 0) : stacked?.starts ?? data.map(() => 0);\n const x2Values = explicitExtent ? numericChannelValues(data, options.x2 ?? options.x, () => void 0) : grouped ? rawXValues : stacked.ends;\n const duplicatePositions = hasDuplicateValues(yValues);\n const groupValues = grouped || !explicitExtent && duplicatePositions ? seriesValues : zValues;\n const keys = inferredKeyValues(data, options.key, {\n groups: groupValues,\n candidates: [yValues],\n markId: id,\n warningIdentity: options\n });\n return {\n id,\n states: markStates(data, options.states),\n seriesFromColor: options.z === void 0 && options.color !== void 0 && (grouped || duplicatePositions),\n channels: {\n x: {\n scale: \"x\",\n values: [\n ...x2Values.filter(isFiniteNumber),\n ...x1Values.filter(isFiniteNumber)\n ],\n includeZero: options.x1 === void 0\n },\n y: { scale: \"y\", values: yValues.filter(isChartValue) },\n color: {\n scale: \"color\",\n values: colorValues.filter(isChartKey)\n }\n },\n render: ({ scales, chart, color: resolveColor }) => {\n const totalBandwidth = scales.y.bandwidth || inferBandwidth(scales.y, yValues, chart.height, data.length);\n const groupScale = resolveGroupScale(\n options.layout?.type === \"group\" ? options.layout : void 0,\n groupValues,\n totalBandwidth\n );\n const groupBandwidth = groupScale?.bandwidth ?? totalBandwidth;\n const inset = Math.max(0, options.inset ?? 0);\n const nodes = [];\n data.forEach((datum, datumIndex) => {\n const xValue = rawXValues[datumIndex];\n const x1Value = x1Values[datumIndex];\n const x2Value = x2Values[datumIndex];\n const yValue = yValues[datumIndex];\n if (!isFiniteNumber(xValue) || !isFiniteNumber(x1Value) || !isFiniteNumber(x2Value) || !isChartValue(yValue))\n return;\n const group = groupValues[datumIndex] ?? null;\n const groupOffset = groupScale?.map(group) ?? 0;\n const resolvedColor = resolveColor(colorValues[datumIndex]);\n const fill = visualValue(\n options.fill,\n datum,\n datumIndex,\n data,\n resolvedColor\n );\n const baselinePosition = scales.x.map(x1Value);\n const valuePosition = scales.x.map(x2Value);\n const center = scales.y.map(yValue);\n const y = center - totalBandwidth / 2 + groupOffset + inset;\n const x = Math.min(baselinePosition, valuePosition);\n const width = Math.abs(baselinePosition - valuePosition);\n const height = Math.max(0, groupBandwidth - inset * 2);\n const key = `${id}:${valueKey(group)}:${valueKey(keys[datumIndex])}`;\n const point = {\n key,\n markId: id,\n group,\n groupLabel: group == null ? id : String(group),\n datum,\n datumIndex,\n xValue,\n yValue,\n x1Value,\n x2Value,\n xInterval: \"difference\",\n x: valuePosition,\n y: center - totalBandwidth / 2 + groupOffset + groupBandwidth / 2,\n color: fill\n };\n nodes.push({\n kind: \"rect\",\n key,\n x,\n y,\n width,\n height,\n radius: options.radius,\n inset,\n insetAxis: \"y\",\n interaction: { point, affinity: \"y\" },\n style: {\n fill,\n fillOpacity: options.fillOpacity\n }\n });\n });\n return {\n nodes: [\n {\n kind: \"group\",\n key: id,\n className: \"ts-chart__bar ts-chart__bar-x\",\n ariaHidden: true,\n children: nodes\n }\n ]\n };\n }\n };\n }, options.motion);\n}\nfunction resolveGroupScale(source, values, bandwidth) {\n if (!source) return void 0;\n const scale = resolveScaleInput(\n source.scale ?? (() => scaleBand().padding(\n Number.isFinite(source.padding) ? Math.max(0, source.padding) : 0.1\n )),\n { values }\n );\n scale.range([0, bandwidth]);\n const groupBandwidth = scale.bandwidth?.();\n if (groupBandwidth === void 0) {\n throw new TypeError(\"A grouped bar layout requires a D3 band scale\");\n }\n return {\n bandwidth: groupBandwidth,\n map(value) {\n if (value === null) {\n throw new TypeError(\n \"A grouped bar requires an explicit z channel or a discrete color channel\"\n );\n }\n const position = scale(value);\n if (position === void 0 || !Number.isFinite(position)) {\n throw new TypeError(\n `Bar group value \"${String(value)}\" is outside the group layout scale domain`\n );\n }\n return position;\n }\n };\n}\nfunction hasDuplicateValues(values) {\n const seen = /* @__PURE__ */ new Set();\n for (const value of values) {\n if (!isChartValue(value)) continue;\n const identity = valueKey(value);\n if (seen.has(identity)) return true;\n seen.add(identity);\n }\n return false;\n}\nfunction inferBandwidth(scale, values, span, count) {\n const positions = [\n ...new Set(\n values.filter(isChartValue).map(scale.map).filter((value) => Number.isFinite(value))\n )\n ].sort((a, b) => a - b);\n let minimum = Infinity;\n for (let index = 1; index < positions.length; index += 1) {\n minimum = Math.min(minimum, positions[index] - positions[index - 1]);\n }\n return Number.isFinite(minimum) ? minimum * 0.8 : Math.min(48, span / Math.max(2, count + 1) * 0.8);\n}\nfunction numericChannelValues(data, channel, fallback) {\n return typeof channel === \"number\" ? data.map(() => channel) : channelValues(data, channel, fallback);\n}\nexport {\n barX,\n barY\n};\n","// ── External Dependencies & Registrations\nimport { group } from '@tanstack/charts/group';\nimport { barY, defineChart, mountChart } from '@tanstack/charts';\nimport { scaleBand, scaleLinear } from 'd3-scale';\n\n// ── Local\nimport type { BarChartData } from '@/billboardJs';\n\nexport type { BarChartData, BarChartSeries } from '@/billboardJs';\n\n// ── Types ────────────────────────────────────────────────────────────────────────────────────────────────────────────\n\nexport interface TanStackChartsHandle {\n destroy: () => void;\n resize: () => void;\n svg: SVGSVGElement;\n}\n\ninterface TanStackBarRow {\n category: string;\n seriesName: string;\n value: number;\n}\n\n// ── Actions ──────────────────────────────────────────────────────────────────────────────────────────────────────────\n\n// TanStack Charts is pre-alpha (0.6.4) - its vanilla-DOM API (mountChart) is undocumented and may change between releases.\nexport function renderTanStackCharts(data: BarChartData, renderTo: HTMLElement): TanStackChartsHandle {\n const rows = toBarRows(data);\n\n const definition = defineChart({\n marks: [barY(rows, { color: 'seriesName', fill: 'seriesName', layout: group(), x: 'category', y: 'value', z: 'seriesName' })],\n x: { scale: () => scaleBand().padding(0.2) },\n y: { grid: true, nice: true, scale: scaleLinear }\n });\n\n const hostOptions = { ariaLabel: 'Bar chart', definition };\n const host = mountChart(renderTo, hostOptions);\n\n function getSvg(): SVGSVGElement {\n const svgNode = renderTo.querySelector('svg');\n if (svgNode == null) throw new Error('Failed to create TanStack Charts SVG element.');\n return svgNode;\n }\n\n return {\n destroy: () => {\n host.destroy();\n },\n resize: () => {\n host.update(hostOptions);\n },\n get svg() {\n return getSvg();\n }\n };\n}\n\n// ── Helpers ──────────────────────────────────────────────────────────────────────────────────────────────────────────\n\nfunction toBarRows(data: BarChartData): TanStackBarRow[] {\n const rows: TanStackBarRow[] = [];\n for (const series of data.series) {\n for (const [index, category] of data.categories.entries()) {\n rows.push({ category, seriesName: series.name, value: series.values[index] ?? 0 });\n }\n }\n return rows;\n}\n"],"x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { t as e } from "./select-BIuoFcZG.js";
|
|
2
|
-
import { t } from "./link-
|
|
2
|
+
import { t } from "./link-DKK0Q0lG.js";
|
|
3
3
|
//#region node_modules/d3-hierarchy/src/hierarchy/count.js
|
|
4
4
|
function n(e) {
|
|
5
5
|
var t = 0, n = e.children, r = n && n.length;
|
|
@@ -274,4 +274,4 @@ function z(n, r, i = {}) {
|
|
|
274
274
|
//#endregion
|
|
275
275
|
export { z as renderTreeDiagram };
|
|
276
276
|
|
|
277
|
-
//# sourceMappingURL=treeDiagram-
|
|
277
|
+
//# sourceMappingURL=treeDiagram-DemHfVnX.js.map
|