@dpuse/dpuse-tool-d3-visualiser 0.0.41 → 0.0.45
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/dist/dpuse-tool-d3-visualiser.es.js +7 -7
- package/dist/dpuse-tool-d3-visualiser.es.js.map +1 -1
- package/dist/{erdDiagram-Ds-nrw7Q.js → erdDiagram-Ds1hsQDD.js} +491 -452
- package/dist/erdDiagram-Ds1hsQDD.js.map +1 -0
- package/dist/tanStackCharts-DCMs4Y_D.js +3476 -0
- package/dist/tanStackCharts-DCMs4Y_D.js.map +1 -0
- package/dist/types/src/index.d.ts +2 -1
- package/dist/types/src/tanStackCharts.d.ts +2 -1
- package/package.json +11 -10
- package/dist/erdDiagram-Ds-nrw7Q.js.map +0 -1
- package/dist/tanStackCharts-BJAX22lS.js +0 -2356
- package/dist/tanStackCharts-BJAX22lS.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tanStackCharts-DCMs4Y_D.js","names":["constant","orderNone","offsetNone","array","none","appearance","isChartValue","isFiniteNumber","isChartKey","isChartValue","isFiniteNumber","isChartKey","stackOffsetNone","stackOffsetExpand","stackOffsetSilhouette","stackOffsetWiggle","stackOffsetDiverging","d3Stack","stackOrderInsideOut","sameChartValue","escapeAttribute","number","stableId","isReference","emptyPoints","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/d3-shape/src/order/appearance.js","../node_modules/d3-shape/src/order/ascending.js","../node_modules/d3-shape/src/order/insideOut.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-point-map.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/adapter-shared.js","../node_modules/@tanstack/charts/dist/dom-text.js","../node_modules/@tanstack/charts/dist/focus-disabled.js","../node_modules/@tanstack/charts/dist/focus.js","../node_modules/@tanstack/charts/dist/interaction.js","../node_modules/@tanstack/charts/dist/cursor-host-contract.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/scene-point-ownership-internal.js","../node_modules/@tanstack/charts/dist/focus-layer.js","../node_modules/@tanstack/charts/dist/svg-focus-guide-serializer.js","../node_modules/@tanstack/charts/dist/svg-focus-guide-layer.js","../node_modules/@tanstack/charts/dist/mark-state.js","../node_modules/@tanstack/charts/dist/mark-state-transition.js","../node_modules/@tanstack/charts/dist/svg-coordinates.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","import none from \"./none.js\";\n\nexport default function(series) {\n var peaks = series.map(peak);\n return none(series).sort(function(a, b) { return peaks[a] - peaks[b]; });\n}\n\nfunction peak(series) {\n var i = -1, j = 0, n = series.length, vi, vj = -Infinity;\n while (++i < n) if ((vi = +series[i][1]) > vj) vj = vi, j = i;\n return j;\n}\n","import none from \"./none.js\";\n\nexport default function(series) {\n var sums = series.map(sum);\n return none(series).sort(function(a, b) { return sums[a] - sums[b]; });\n}\n\nexport function sum(series) {\n var s = 0, i = -1, n = series.length, v;\n while (++i < n) if (v = +series[i][1]) s += v;\n return s;\n}\n","import appearance from \"./appearance.js\";\nimport {sum} from \"./ascending.js\";\n\nexport default function(series) {\n var n = series.length,\n i,\n j,\n sums = series.map(sum),\n order = appearance(series),\n top = 0,\n bottom = 0,\n tops = [],\n bottoms = [];\n\n for (i = 0; i < n; ++i) {\n j = order[i];\n if (top < bottom) {\n top += sums[j];\n tops.push(j);\n } else {\n bottom += sums[j];\n bottoms.push(j);\n }\n }\n\n return bottoms.reverse().concat(tops);\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) => {\n if (value == null) return range2[0] ?? \"currentColor\";\n const output = scale(value);\n return output == null ? \"currentColor\" : String(output);\n }\n };\n }\n if (options?.resolver) {\n return options.resolver.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 if (typeof value === \"string\") return `string:${value.length}:${value}`;\n return `${typeof value}:${String(value)}`;\n}\nfunction compareChartKey(left, right) {\n const leftOrder = `${typeof left}:${String(left)}`;\n const rightOrder = `${typeof right}:${String(right)}`;\n return leftOrder < rightOrder ? -1 : leftOrder > rightOrder ? 1 : 0;\n}\nexport {\n compareChartKey,\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 const normalizedInitialize = (context) => {\n const initialized = normalizeMarkInitialization(initialize(context));\n return motion === void 0 || initialized.motion !== void 0 ? initialized : { ...initialized, motion };\n };\n return motion === void 0 ? { initialize: normalizedInitialize } : { initialize: normalizedInitialize, motion };\n}\nfunction normalizeMarkInitialization(initialized) {\n if (typeof initialized.render === \"function\") return initialized;\n return {\n ...initialized,\n render: () => {\n throw new TypeError(\n `Mark \"${initialized.id}\" must resolve its layout before rendering`\n );\n }\n };\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((datum, index) => fallback(datum, { index, data }));\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 = JSON.stringify([\n valueKey(groups?.[index] ?? null),\n valueKey(keys[index])\n ]);\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 normalizeMarkInitialization,\n visualValue\n};\n","import {\n stack as d3Stack,\n stackOffsetDiverging,\n stackOffsetExpand,\n stackOffsetNone,\n stackOffsetSilhouette,\n stackOffsetWiggle,\n stackOrderInsideOut\n} from \"d3-shape\";\nimport { valueKey } from \"./scales.js\";\nfunction stackExtents(input, options = {}) {\n const anchorFraction = resolveAnchorFraction(options);\n if (input.length === 0) return /* @__PURE__ */ new Map();\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 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 insideOut = options.order === \"inside-out\";\n if (anchorFraction !== void 0 && input.some(({ value }) => value < 0)) {\n throw new TypeError(\"A stack anchor requires nonnegative values\");\n }\n const series = orderedSeries(input, seriesInput, options.order);\n if (options.reverse && !insideOut) series.reverse();\n const identities = series.map(valueKey);\n const offset = options.anchor ? stackOffsetNone : options.offset === \"normalize\" ? stackOffsetExpand : options.offset === \"center\" ? stackOffsetSilhouette : options.offset === \"wiggle\" ? stackOffsetWiggle : stackOffsetDiverging;\n const generator = d3Stack().keys(identities).value((row, key) => row[key] ?? 0).offset(offset);\n if (insideOut) {\n generator.order(\n options.reverse ? (seriesValues) => stackOrderInsideOut(seriesValues).reverse() : stackOrderInsideOut\n );\n }\n const stacked = generator(rows);\n if (options.anchor && anchorFraction !== void 0) {\n translateAnchorToZero(stacked, options.anchor.series, anchorFraction);\n }\n if (options.offset === \"wiggle\") translateWiggleToZero(stacked);\n const output = /* @__PURE__ */ new Map();\n stacked.forEach((seriesValues) => {\n const seriesIdentity = seriesValues.key;\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 resolveAnchorFraction(options) {\n const anchor = options.anchor;\n if (!anchor) return void 0;\n if (options.offset !== void 0 && options.offset !== \"diverging\") {\n throw new TypeError(\n \"A stack anchor can only be used with the diverging offset\"\n );\n }\n const fraction = anchor.fraction ?? 0.5;\n if (!Number.isFinite(fraction) || fraction < 0 || fraction > 1) {\n throw new TypeError(\"A stack anchor fraction must be between zero and one\");\n }\n return fraction;\n}\nfunction translateAnchorToZero(stacked, series, fraction) {\n const anchorIdentity = valueKey(series);\n const anchorSeries = stacked.find(\n (seriesValues) => seriesValues.key === anchorIdentity\n );\n if (!anchorSeries) {\n throw new TypeError(\n `Stack anchor series \"${String(series)}\" is not in the resolved series order`\n );\n }\n anchorSeries.forEach((anchorExtent, position) => {\n const shift = anchorExtent[0] + (anchorExtent[1] - anchorExtent[0]) * fraction;\n for (const seriesValues of stacked) {\n const extent = seriesValues[position];\n if (!extent) continue;\n extent[0] -= shift;\n extent[1] -= shift;\n }\n });\n}\nfunction translateWiggleToZero(stacked) {\n let baseline = Number.POSITIVE_INFINITY;\n for (const series of stacked) {\n for (const extent of series) baseline = Math.min(baseline, extent[0]);\n }\n if (!Number.isFinite(baseline) || baseline === 0) return;\n for (const series of stacked) {\n for (const extent of series) {\n extent[0] -= baseline;\n extent[1] -= baseline;\n }\n }\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 { isLogarithmicScale, 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 contentDomain = copyDomain(scale.domain());\n const viewport = resolveViewport(scale, context, contentDomain);\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 = copyDomain(scale.domain());\n if (viewport && (!sameDomain(domain, viewport.domain) || !mapsDomainToRange(scale, viewport.domain, range))) {\n throw new TypeError(\n `Chart viewport \"${context.id}\" requires independent configurable domain and range capabilities`\n );\n }\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 const invert = scale.invert ? (position) => scale.invert(position - bandwidth / 2) : void 0;\n return {\n id: context.id,\n type: categorical ? \"band\" : \"configured\",\n domain,\n map,\n ...invert ? { invert } : {},\n ticks: tickValues.map((value) => ({\n value,\n position: map(value),\n label: configuredTicks?.format?.(value) ?? tickFormat?.(value) ?? formatValue(value)\n })),\n bandwidth,\n ...viewport ? {\n viewport: {\n contentDomain,\n domain: viewport.domain,\n translate: viewport.translate,\n map: (value) => map(value) + viewport.translate\n }\n } : {}\n };\n}\nfunction resolveViewport(scale, context, contentDomain) {\n const viewport = context.options?.viewport;\n if (!viewport) return void 0;\n const capable = scale;\n if (scale.bandwidth !== void 0 || typeof scale.ticks !== \"function\" || typeof capable.invert !== \"function\") {\n throw new TypeError(\n `Chart viewport \"${context.id}\" requires a continuous numeric or temporal scale`\n );\n }\n if (typeof capable.clamp === \"function\" && capable.clamp() === true) {\n throw new TypeError(\n `Chart viewport \"${context.id}\" does not support a clamped scale`\n );\n }\n const domain = viewport.domain;\n if (domain.length !== 2 || !sameContinuousType(domain[0], domain[1])) {\n invalidViewportDomain(context.id);\n }\n const first = continuousNumber(domain[0]);\n const last = continuousNumber(domain[1]);\n if (!Number.isFinite(first) || !Number.isFinite(last) || first === last) {\n invalidViewportDomain(context.id);\n }\n validateViewportLogDomains(scale, context.id, contentDomain, domain);\n const translate = viewport.translate ?? 0;\n if (!Number.isFinite(translate)) {\n throw new TypeError(\n `Chart viewport \"${context.id}\" translate must be a finite number`\n );\n }\n if (sameDomain(scale.domain(), domain)) {\n configureScaleDomain(\n scale,\n [domain[1], domain[0]],\n context.id\n );\n }\n configureScaleDomain(scale, domain, context.id);\n const resolved = copyDomain(scale.domain());\n if (resolved.length !== 2 || !sameContinuousType(resolved[0], resolved[1])) {\n invalidConfigurableDomain(context.id);\n }\n return {\n domain: resolved,\n translate\n };\n}\nfunction configureScaleDomain(scale, domain, id) {\n const setDomain = scale.domain;\n try {\n setDomain.call(scale, [...domain]);\n } catch {\n invalidConfigurableDomain(id);\n }\n if (!sameDomain(scale.domain(), domain)) invalidConfigurableDomain(id);\n}\nfunction sameDomain(resolved, expected) {\n return resolved.length === expected.length && resolved.every((value, index) => sameChartValue(value, expected[index]));\n}\nfunction mapsDomainToRange(scale, domain, range) {\n const first = scale(domain[0]);\n const last = scale(domain[1]);\n return first !== void 0 && last !== void 0 && Number.isFinite(first) && Number.isFinite(last) && Math.abs(first - range[0]) <= 1e-6 && Math.abs(last - range[1]) <= 1e-6;\n}\nfunction copyDomain(domain) {\n return domain.map(\n (value) => value instanceof Date ? new Date(value.getTime()) : value\n );\n}\nfunction invalidConfigurableDomain(id) {\n throw new TypeError(\n `Chart viewport \"${id}\" requires a scale with a configurable domain`\n );\n}\nfunction validateViewportLogDomains(scale, id, contentDomain, viewportDomain) {\n if (!isLogarithmicScale(scale)) return;\n const contentSign = logarithmicDomainSign(contentDomain);\n const viewportSign = logarithmicDomainSign(viewportDomain);\n if (contentSign === void 0 || viewportSign === void 0 || contentSign !== viewportSign) {\n throw new TypeError(\n `Chart viewport \"${id}\" logarithmic content and viewport domains must be finite, nonzero, and stay on the same side of zero`\n );\n }\n}\nfunction logarithmicDomainSign(domain) {\n let sign;\n for (const value of domain) {\n if (typeof value !== \"number\" || !Number.isFinite(value) || value === 0) {\n return void 0;\n }\n const current = Math.sign(value);\n if (sign !== void 0 && current !== sign) return void 0;\n sign = current;\n }\n return sign;\n}\nfunction sameContinuousType(first, last) {\n return typeof first === \"number\" && typeof last === \"number\" || first instanceof Date && last instanceof Date;\n}\nfunction continuousNumber(value) {\n return value instanceof Date ? value.getTime() : value;\n}\nfunction sameChartValue(left, right) {\n return left instanceof Date && right instanceof Date ? left.getTime() === right.getTime() : Object.is(left, right);\n}\nfunction invalidViewportDomain(id) {\n throw new TypeError(\n `Chart viewport \"${id}\" domain must contain two distinct finite numbers or Dates`\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;\nconst defaultTypography = {\n fontFamily: \"sans-serif\",\n fontStyle: \"normal\",\n fontStretch: \"normal\",\n letterSpacing: 0,\n direction: \"inherit\",\n fontScale: 1\n};\nfunction estimateSceneText(text, style) {\n const fontScale = finitePositive(style.fontScale, 1);\n const fontSize = finiteNonNegative(style.fontSize, defaultFontSize) * fontScale;\n const fontWeight = finiteNonNegative(style.fontWeight, defaultFontWeight);\n const letterSpacing = finiteNumber(style.letterSpacing, 0) * fontScale;\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 = Math.max(\n 0,\n emWidth * fontSize * weightFactor + Math.max(0, Array.from(text).length - 1) * letterSpacing\n );\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 ...defaultTypography,\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 withChartTextTypography(measureText = estimateSceneText, typography = {}) {\n const resolved = {\n ...defaultTypography,\n ...typography,\n fontFamily: typography.fontFamily || defaultTypography.fontFamily,\n fontStyle: typography.fontStyle || defaultTypography.fontStyle,\n fontStretch: typography.fontStretch || defaultTypography.fontStretch,\n letterSpacing: finiteNumber(typography.letterSpacing, 0),\n fontScale: finitePositive(typography.fontScale, 1)\n };\n return (text, options) => measureText(text, { ...options, ...resolved });\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}\nfunction finitePositive(value, fallback) {\n return value !== void 0 && Number.isFinite(value) && value > 0 ? value : fallback;\n}\nexport {\n estimateSceneText,\n measureSceneLabelBounds,\n resolveGuideMargins,\n withChartTextTypography\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, points = scene.points) {\n const index = interactionIndex(scene);\n const allowed = points === scene.points ? void 0 : new Set(points);\n if (!index.targets.length && !index.attachedPoints.size) {\n return nearestPoint(points, x, y, maxDistance);\n }\n const contained = findContainingScenePoint(scene, x, y, points);\n if (contained) return contained.point;\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 if (!hasAllowedInteractionPoint(interaction, allowed)) continue;\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 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, allowed) : void 0);\n return result ?? null;\n}\nfunction findContainingScenePoint(scene, x, y, points = scene.points) {\n const index = interactionIndex(scene);\n const allowed = points === scene.points ? void 0 : new Set(points);\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 const interaction = target.node.interaction;\n const point = bestInteractionPoint(interaction, x, y, allowed);\n const hasSemanticPoint = interaction.point ? true : interaction.points.length > 0;\n if (point || !allowed || !hasSemanticPoint) {\n return {\n point\n };\n }\n }\n }\n return 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, allowed) {\n if (interaction.point) {\n return !allowed || allowed.has(interaction.point) ? interaction.point : null;\n }\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 if (allowed && !allowed.has(point)) continue;\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 hasAllowedInteractionPoint(interaction, allowed) {\n if (!allowed) return true;\n return interaction.point ? allowed.has(interaction.point) : interaction.points.some((point) => allowed.has(point));\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 node.polygons === void 0 ? containsPolygon(node.points, localX, localY) : containsPolygons(node.polygons, 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 = node.polygons === void 0 ? squaredDistanceToPolyline(node.points, localX, localY, true) : squaredDistanceToPolygons(node.polygons, localX, localY);\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 node.polygons === void 0 ? boundsFromPoints(node.points) : boundsFromPolygons(node.polygons);\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 containsPolygons(polygons, x, y) {\n return polygons.some(([exterior, ...holes]) => {\n if (!exterior || !containsPolygon(exterior, x, y)) return false;\n return !holes.some((hole) => containsPolygon(hole, x, y));\n });\n}\nfunction squaredDistanceToPolygons(polygons, x, y) {\n let distance = Infinity;\n for (const polygon of polygons) {\n for (const ring of polygon) {\n distance = Math.min(distance, squaredDistanceToPolyline(ring, x, y, true));\n }\n }\n return distance;\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 boundsFromPolygons(polygons) {\n return boundsFromPoints(polygons.flatMap((polygon) => polygon.flat()));\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 findContainingScenePoint,\n nearestPoint,\n nearestScenePoint\n};\n","function viewportTranslationChanged(previous, next) {\n return [\"x\", \"y\"].some(\n (axis) => (previous.scales[axis]?.viewport?.translate ?? 0) !== (next.scales[axis]?.viewport?.translate ?? 0)\n );\n}\nfunction mapScenePointReferences(nodes, mapPoint) {\n return nodes.map((node) => {\n if (node.kind === \"group\") {\n return {\n ...node,\n children: mapScenePointReferences(node.children, mapPoint),\n ...node.focus ? {\n focus: {\n ...node.focus,\n points: node.focus.points.map(mapPoint)\n }\n } : {},\n ...node.states ? {\n states: {\n ...node.states,\n points: node.states.points.map(mapPoint)\n }\n } : {}\n };\n }\n if (node.kind === \"label\" || !node.interaction) return node;\n return {\n ...node,\n interaction: node.interaction.point ? { ...node.interaction, point: mapPoint(node.interaction.point) } : {\n ...node.interaction,\n points: node.interaction.points.map(mapPoint)\n }\n };\n });\n}\nexport {\n mapScenePointReferences,\n viewportTranslationChanged\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 {\n measureSceneLabelBounds,\n withChartTextTypography\n} from \"./guide-layout.js\";\nimport { nearestScenePoint } from \"./nearest.js\";\nimport { mapScenePointReferences } from \"./scene-point-map.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 if (typeof scale === \"function\") return resolveConfiguredScale(scale, context);\n if (context.options?.viewport) {\n throw new TypeError(\n `Chart viewport \"${context.id}\" requires a configured or inferable continuous scale`\n );\n }\n return scale.resolve(context);\n}\nfunction createChartSceneWithScaleResolver(definition, size, resolveScale, layout) {\n const width = finiteSize(size.width);\n const height = finiteSize(size.height);\n const layoutOptions = {\n ...layout,\n measureText: withChartTextTypography(layout.measureText, layout.typography)\n };\n const platformTheme = {\n ...defaultChartTheme,\n ...layoutOptions.defaultTheme,\n palette: layoutOptions.defaultTheme?.palette ?? defaultChartTheme.palette\n };\n const theme = {\n ...platformTheme,\n ...definition.theme,\n palette: definition.theme?.palette ?? platformTheme.palette\n };\n const initialized = definition.marks.map(\n (mark, markIndex) => mark.initialize({ markIndex })\n );\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 axes,\n resolveScale,\n layoutOptions\n );\n const {\n margin,\n chart,\n scales,\n axes: axisNodes,\n marks,\n colors,\n legend,\n legendBounds\n } = resolvedLayout;\n const markEntries = [];\n const defaultFocusEntries = [];\n const points = [];\n const translateX = scales.x.viewport?.translate ?? 0;\n const translateY = scales.y.viewport?.translate ?? 0;\n const focusGuides = [];\n const firstBaseMarkIndex = marks.findIndex(\n (mark) => !mark.focus && !mark.focusGuideOnly\n );\n marks.forEach((mark, markIndex) => {\n const viewportX = Boolean(\n scales.x.viewport && markUsesViewportAxis(mark, \"x\")\n );\n const viewportY = Boolean(\n scales.y.viewport && markUsesViewportAxis(mark, \"y\")\n );\n const pointMap = /* @__PURE__ */ new Map();\n const presentPoint = (point) => {\n const existing = pointMap.get(point);\n if (existing) return existing;\n const presented = viewportX || viewportY ? {\n ...point,\n x: point.x + (viewportX ? translateX : 0),\n y: point.y + (viewportY ? translateY : 0)\n } : point;\n pointMap.set(point, presented);\n return presented;\n };\n let rendered = mark.render({\n markIndex,\n surface: { x: 0, y: 0, width, height },\n chart,\n scales,\n theme,\n color: colors.map,\n colors,\n layout: layoutOptions\n });\n if (legend?.filterMark) {\n rendered = legend.filterMark(rendered, {\n seriesFromColor: mark.seriesFromColor\n });\n }\n if (mark.postDomain) rendered = mark.postDomain(rendered);\n const renderedPoints = collectRenderedPoints(\n rendered.nodes,\n rendered.points\n );\n const renderedNodes = viewportX || viewportY ? mapScenePointReferences(rendered.nodes, presentPoint) : rendered.nodes;\n const presentedPoints = renderedPoints.map(presentPoint);\n const entryNodes = [];\n const placement = firstBaseMarkIndex < 0 || markIndex < firstBaseMarkIndex ? \"under\" : \"over\";\n for (const guide of rendered.focusGuides ?? []) {\n focusGuides.push({ ...guide, placement: guide.placement ?? placement });\n }\n if (mark.focus) {\n const retarget = mark.focus.retarget === true;\n entryNodes.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 anchors: rendered.focusAnchors ?? renderedPoints,\n points: presentedPoints,\n placement,\n ...retarget ? { retarget: true, candidates: renderedNodes } : {}\n },\n children: retarget ? [] : renderedNodes\n });\n } else {\n const markPoints = presentedPoints;\n if (mark.states) {\n entryNodes.push({\n kind: \"group\",\n key: `states:${mark.id}`,\n children: renderedNodes,\n states: {\n data: mark.states.data,\n definitions: mark.states.definitions,\n points: markPoints\n }\n });\n } else {\n for (const node of renderedNodes) entryNodes.push(node);\n }\n for (const point of markPoints) points.push(point);\n if (markPoints.length) {\n defaultFocusEntries.push({\n markId: mark.id,\n points: markPoints,\n clipped: viewportX || viewportY\n });\n }\n }\n markEntries.push({ key: mark.id, nodes: entryNodes, viewportX, viewportY });\n });\n const markNodes = arrangeViewportMarkNodes(\n markEntries,\n translateX,\n translateY,\n chart\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 const controls = [];\n const controlIds = /* @__PURE__ */ new Set();\n for (const control of definition.controls ?? []) {\n if (!control.id.trim()) {\n throw new TypeError(\"Chart control ids must be nonempty\");\n }\n if (controlIds.has(control.id)) {\n throw new TypeError(`Duplicate chart control id \"${control.id}\"`);\n }\n controlIds.add(control.id);\n const resolved = control.resolve({\n chart,\n scales,\n colors,\n theme,\n width,\n height\n });\n if (resolved.nodes) nodes.push(...resolved.nodes);\n if (resolved.controls) controls.push(...resolved.controls);\n }\n if (legend && legendBounds) {\n const legendContext = {\n colors,\n chart,\n bounds: legendBounds,\n theme,\n width,\n height\n };\n nodes.push(legend.render(legendContext));\n if (legend.control) controls.push(legend.control(legendContext));\n }\n const hostControlIds = /* @__PURE__ */ new Set();\n for (const control of controls) {\n const identity = `${control.extension.id}:${control.key}`;\n if (hostControlIds.has(identity)) {\n throw new TypeError(`Duplicate chart host control \"${identity}\"`);\n }\n hostControlIds.add(identity);\n }\n if (definition.focus !== false && definition.focusRing !== false && points.length) {\n for (const entry of defaultFocusEntries) {\n nodes.push({\n kind: \"group\",\n key: `default-focus:${entry.markId}`,\n className: \"ts-chart__focus-layer ts-chart__focus-layer--default\",\n ariaHidden: true,\n clip: entry.clipped ? chart : void 0,\n focus: {\n match: \"primary\",\n anchors: entry.points,\n points: entry.points,\n placement: \"over\"\n },\n children: entry.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 }\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 ...controls.length ? { controls } : {},\n ...focusGuides.length ? { focusGuides } : {},\n [chartSceneSource]: [definition, initialized]\n };\n}\nfunction markUsesViewportAxis(mark, axis) {\n const ownership = mark.viewport?.[axis];\n if (ownership) return ownership === \"content\";\n return Object.values(mark.channels).some((channel) => channel.scale === axis);\n}\nfunction arrangeViewportMarkNodes(entries, translateX, translateY, chart) {\n return entries.flatMap((entry) => {\n if (!entry.viewportX && !entry.viewportY) return [...entry.nodes];\n return [\n {\n kind: \"group\",\n key: `viewport-clip:${entry.key}`,\n className: \"ts-chart__viewport-clip\",\n clip: chart,\n children: [\n {\n kind: \"group\",\n key: `viewport-content:${entry.key}`,\n className: \"ts-chart__viewport-content\",\n ...entry.viewportX ? { translateX } : {},\n ...entry.viewportY ? { translateY } : {},\n children: entry.nodes\n }\n ]\n }\n ];\n });\n}\nfunction findNearestPoint(scene, x, y, maxDistance = Infinity, points = scene.points) {\n return nearestScenePoint(scene, x, y, maxDistance, points);\n}\nfunction viewportInteractionPoints(scene, points = scene.points) {\n if (!scene.scales.x?.viewport && !scene.scales.y?.viewport) return points;\n const { x, y, width, height } = scene.chart;\n const right = x + width;\n const bottom = y + height;\n const visible = points.filter(\n (point) => !pointUsesViewportClip(scene, point) || point.x >= x && point.x <= right && point.y >= y && point.y <= bottom\n );\n return visible.length === points.length ? points : visible;\n}\nfunction pointUsesViewportClip(scene, point) {\n const source = scene[chartSceneSource];\n const mark = source?.[1].find((candidate) => candidate.id === point.markId);\n if (!mark) return true;\n return Boolean(\n scene.scales.x?.viewport && markUsesViewportAxis(mark, \"x\") || scene.scales.y?.viewport && markUsesViewportAxis(mark, \"y\")\n );\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, initialized, width, height, theme, xChannels, yChannels, 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 marks = resolveMarkLayouts(initialized, {\n chart,\n scales,\n theme,\n layout\n });\n const colorChannels = collectScaleChannels(marks, \"color\");\n const colors = createColorScale(\n colorChannels.values,\n definition.color,\n theme\n );\n if (colors.kind !== \"categorical\" && marks.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 if (legend?.seriesVisible && colors.kind !== \"categorical\") {\n throw new TypeError(\n \"An interactive color legend requires a categorical color scale\"\n );\n }\n const legendHeight = legend?.height(colors.domain.length, {\n colors,\n chart,\n bounds: { x: chart.x, y: 0, width: chart.width, height: 0 },\n theme,\n width,\n height\n });\n const legendBounds = legend && legendHeight !== void 0 ? {\n x: chart.x,\n y: legend.placement === \"bottom\" ? height - legendHeight : 0,\n width: chart.width,\n height: legendHeight\n } : void 0;\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 marks,\n colors,\n legend,\n legendBounds\n };\n }\n function measureMargin(resolved2) {\n const automatic = resolved2.guideMargin;\n if (resolved2.legend) {\n const legendHeight = resolved2.legend.height(\n resolved2.colors.domain.length,\n {\n colors: resolved2.colors,\n chart: resolved2.chart,\n bounds: {\n x: resolved2.chart.x,\n y: 0,\n width: resolved2.chart.width,\n height: 0\n },\n theme,\n width,\n height\n }\n );\n if (resolved2.legend.placement === \"bottom\") {\n if (locks.bottom === void 0) automatic.bottom += legendHeight;\n } else if (locks.top === void 0) {\n automatic.top = Math.max(automatic.top, legendHeight);\n }\n }\n if (!definition.clip) {\n resolved2.marks.forEach((mark, markIndex) => {\n const autoClipped = Boolean(\n resolved2.scales.x.viewport && markUsesViewportAxis(mark, \"x\") || resolved2.scales.y.viewport && markUsesViewportAxis(mark, \"y\")\n );\n if (autoClipped) return;\n const labels = mark.layoutLabels?.({\n markIndex,\n surface: { x: 0, y: 0, width, height },\n chart: resolved2.chart,\n scales: resolved2.scales,\n theme,\n color: resolved2.colors.map,\n colors: resolved2.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 resolveMarkLayouts(marks, context) {\n return marks.map((mark, markIndex) => {\n if (typeof mark.resolveLayout !== \"function\") {\n return mark;\n }\n const resolved = mark.resolveLayout({ ...context, markIndex });\n return {\n id: mark.id,\n channels: resolved.channels ?? mark.channels,\n viewport: mark.viewport,\n focusGuideOnly: mark.focusGuideOnly,\n seriesFromColor: mark.seriesFromColor,\n focus: mark.focus,\n states: resolved.states ?? mark.states,\n postDomain: resolved.postDomain ?? mark.postDomain,\n layoutLabels: resolved.layoutLabels ?? mark.layoutLabels,\n render: resolved.render\n };\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 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 xTickLabels,\n scales.x.bandwidth,\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,\n scales.y.bandwidth,\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, options, bandwidth, width, theme, measureText) {\n const defaultFontSize = width < 360 ? 10 : 11;\n return ticks.map((tick, index) => {\n const context = {\n value: tick.value,\n index,\n position: tick.position,\n bandwidth\n };\n const rotate = options.rotate;\n const fontSize = resolveTickLabelValue(options.fontSize, context) ?? defaultFontSize;\n const fontWeight = resolveTickLabelValue(options.fontWeight, context);\n const opacity = resolveTickLabelValue(options.opacity, context);\n const dx = resolveTickLabelValue(options.dx, context) ?? 0;\n const dy = resolveTickLabelValue(options.dy, context) ?? 0;\n const defaultAnchor = axis === \"y\" ? \"end\" : (rotate ?? 0) < 0 ? \"end\" : (rotate ?? 0) > 0 ? \"start\" : \"middle\";\n const anchor = resolveTickLabelValue(options.anchor, context) ?? defaultAnchor;\n const label = axis === \"x\" ? {\n kind: \"label\",\n key: `x-tick-label:${valueKey(tick.value)}`,\n x: tick.position + dx,\n y: chart.y + chart.height + size + padding + fontSize * 0.8 + dy,\n text: tick.label,\n anchor,\n rotate,\n fontSize,\n fontWeight,\n style: {\n fill: theme.muted,\n ...opacity === void 0 ? { fillOpacity: 0.68 } : { opacity }\n }\n } : {\n kind: \"label\",\n key: `y-tick-label:${valueKey(tick.value)}`,\n x: chart.x - size - padding + dx,\n y: tick.position + dy,\n text: tick.label,\n anchor,\n baseline: \"middle\",\n rotate,\n fontSize,\n fontWeight,\n style: {\n fill: theme.muted,\n ...opacity === void 0 ? { fillOpacity: 0.68 } : { opacity }\n }\n };\n return {\n value: tick.value,\n label,\n bounds: measureSceneLabelBounds(label, measureText),\n hard: tick.hard ?? false\n };\n });\n}\nfunction resolveTickLabelValue(value, context) {\n return typeof value === \"function\" ? value(context) : value;\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 viewportInteractionPoints\n};\n","import { createChartScene, defaultChartTheme } from \"./scene.js\";\nfunction createChartRuntime(options = {}) {\n const platformTheme = {\n ...defaultChartTheme,\n ...options.defaultTheme,\n palette: options.defaultTheme?.palette ?? defaultChartTheme.palette\n };\n return {\n render(definition, size, layout) {\n if (!isResponsiveChartDefinition(definition)) {\n return createChartScene(definition, size, {\n ...layout,\n defaultTheme: platformTheme\n });\n }\n const { chart, ...options2 } = definition;\n const spec = chart({\n width: size.width,\n height: size.height,\n defaultTheme: platformTheme\n });\n return createChartScene({ ...spec, ...options2 }, size, {\n ...layout,\n defaultTheme: platformTheme\n });\n },\n destroy() {\n }\n };\n}\nfunction isResponsiveChartDefinition(definition) {\n return \"chart\" in definition && typeof definition.chart === \"function\";\n}\nexport {\n createChartRuntime,\n isResponsiveChartDefinition\n};\n","function resolveChartAdapterLayout(options) {\n const initialWidth = options.width ?? options.initialWidth ?? 640;\n const aspectRatio = typeof options.aspectRatio === \"number\" && Number.isFinite(options.aspectRatio) && options.aspectRatio > 0 ? options.aspectRatio : void 0;\n return {\n aspectRatio,\n initialWidth,\n initialHeight: options.height ?? (aspectRatio === void 0 ? 320 : initialWidth / aspectRatio)\n };\n}\nfunction resolveChartHostTabIndex(definition, tabIndex = 0) {\n return definition.keyboard === false || definition.focus === false || definition.cursor?.mode === \"free\" ? -1 : tabIndex;\n}\nexport {\n resolveChartAdapterLayout,\n resolveChartHostTabIndex\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.fontFamily}\\0${options.fontStyle}\\0${options.fontStretch}\\0${options.letterSpacing}\\0${options.direction}\\0${options.locale ?? \"\"}\\0${options.fontScale}\\0${options.anchor}\\0${options.baseline}\\0${text}`;\n const cached = cache.get(key);\n if (cached) return cached;\n configureContext(context, style.weight, options);\n const measured = context.measureText(text);\n const metrics = paintedBounds(measured, options);\n cache.set(key, metrics);\n return metrics;\n },\n typography() {\n return {\n fontFamily: style.family,\n fontStyle: style.style,\n fontStretch: style.stretch,\n letterSpacing: style.letterSpacing,\n direction: style.direction\n };\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: finiteCssPixels(computed?.letterSpacing)\n };\n }\n}\nfunction configureContext(context, defaultWeight, options) {\n const fontScale = positiveFinite(options.fontScale, 1);\n const fontSize = options.fontSize * fontScale;\n const weight = options.fontWeight ?? defaultWeight;\n context.font = [\n options.fontStyle,\n weight,\n `${fontSize}px`,\n options.fontFamily\n ].join(\" \");\n if (\"fontStretch\" in context) {\n context.fontStretch = normalizeFontStretch(options.fontStretch);\n }\n context.textAlign = options.anchor === \"middle\" ? \"center\" : options.anchor;\n context.textBaseline = options.baseline === \"auto\" ? \"alphabetic\" : options.baseline;\n context.direction = options.direction;\n if (\"letterSpacing\" in context) {\n context.letterSpacing = `${options.letterSpacing * fontScale}px`;\n }\n}\nfunction paintedBounds(measured, options) {\n const fontSize = options.fontSize * positiveFinite(options.fontScale, 1);\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\" ? -fontSize / 2 : options.baseline === \"hanging\" ? 0 : -fontSize * 0.8;\n return { x, y, width, height: 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}\nfunction finiteCssPixels(value) {\n const parsed = Number.parseFloat(value ?? \"\");\n return Number.isFinite(parsed) ? parsed : 0;\n}\nfunction positiveFinite(value, fallback) {\n return value !== void 0 && Number.isFinite(value) && value > 0 ? value : fallback;\n}\nexport {\n createDomTextMeasurer\n};\n","const focusDisabled = {\n resolve: () => [],\n group: () => [],\n navigation: () => []\n};\nexport {\n focusDisabled\n};\n","import { valueKey } from \"./scales.js\";\nconst focusGroupX = axisFocus(\"x\", true);\nconst focusGroupY = 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, context) {\n const { x, y, maxDistance } = context;\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, context) {\n const { point } = context;\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 focusGroupX,\n focusGroupY,\n focusNearestX,\n focusNearestY\n};\n","import { focusNearestX, focusNearestY, focusGroupX, focusGroupY } from \"./focus.js\";\nimport { findContainingScenePoint } from \"./nearest.js\";\nfunction resolveChartFocusStrategy(focus) {\n if (focus === false) return void 0;\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 focusGroupX;\n case \"group-y\":\n return focusGroupY;\n case \"nearest\":\n return void 0;\n }\n}\nfunction resolveChartPointerFocus(scene, focusMode, x, y, maxDistance, points = scene.points) {\n const strategy = resolveChartFocusStrategy(focusMode);\n if (!strategy) return void 0;\n if (points === scene.points && (strategy === focusNearestX || strategy === focusNearestY || strategy === focusGroupX || strategy === focusGroupY)) {\n const contained = findContainingScenePoint(scene, x, y);\n if (contained) {\n return contained.point ? strategy.group(points, { point: contained.point }) : [];\n }\n }\n return strategy.resolve(points, { x, y, maxDistance });\n}\nfunction sameChartPointIdentity(left, right) {\n return left === right || left !== null && right !== null && left.key === right.key && left.markId === right.markId && left.datumIndex === right.datumIndex;\n}\nfunction restoreChartFocusPoint(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) && sameChartValue(point.xValue, previous.xValue) && sameChartValue(point.yValue, previous.yValue)\n ) ?? matches.find(\n (point) => point.markId === previous.markId && point.datumIndex === previous.datumIndex\n ) ?? matches[0] ?? null;\n}\nfunction chartPointFromNavigationOrder(points, current, key) {\n const currentIndex = current ? points.findIndex((point) => sameChartPointIdentity(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 chartPointFromSceneOrder(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) => sameChartPointIdentity(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}\nfunction sameChartValue(left, right) {\n return left instanceof Date && right instanceof Date ? left.getTime() === right.getTime() : Object.is(left, right);\n}\nexport {\n chartPointFromNavigationOrder,\n chartPointFromSceneOrder,\n resolveChartFocusStrategy,\n resolveChartPointerFocus,\n restoreChartFocusPoint,\n sameChartPointIdentity\n};\n","function createChartCursorHostSession(binding) {\n const extension = binding.use;\n if (extension.__chartExtensionType !== \"cursor\") {\n throw new TypeError(\"A chart cursor requires a cursor host extension.\");\n }\n return extension.create(binding.controller);\n}\nexport {\n createChartCursorHostSession\n};\n","import { createChartRuntime } from \"./runtime.js\";\nimport { resolveChartHostTabIndex } from \"./adapter-shared.js\";\nimport { createDomTextMeasurer } from \"./dom-text.js\";\nimport { findNearestPoint, viewportInteractionPoints } from \"./scene.js\";\nimport { focusDisabled } from \"./focus-disabled.js\";\nimport { nearestPoint } from \"./nearest.js\";\nimport {\n chartPointFromNavigationOrder,\n chartPointFromSceneOrder,\n resolveChartFocusStrategy,\n resolveChartPointerFocus,\n restoreChartFocusPoint,\n sameChartPointIdentity\n} from \"./interaction.js\";\nimport {\n createChartCursorHostSession\n} from \"./cursor-host-contract.js\";\nfunction mountChartRenderer(container, initialOptions, runtime = createChartRuntime()) {\n resolveTooltipInput(initialOptions.definition.tooltip);\n let options = initialOptions;\n let scene;\n let interactionScene;\n let focusedPoint = null;\n let focusSource = \"pointer\";\n let focusOwner = null;\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 unsubscribePresentation;\n let renderingSurface = false;\n let paintingFocus = false;\n let tooltipExtension;\n let tooltipInstance;\n let suppressNextSurfaceFocus = false;\n let spatialIndex;\n const controlInstances = /* @__PURE__ */ new Map();\n let cursorSession;\n let cursorMode;\n let cursorMatch;\n let cursorExtension;\n let renderedCursorBinding;\n let unsubscribeCursor;\n let cursorPresentation = null;\n let hasCursorPresentation = false;\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 const previousCursorPresentation = cursorPresentation;\n const previousCursorBinding = renderedCursorBinding;\n scene = createHostedScene(createScene());\n interactionScene = scene;\n if (!surface) {\n surface = options.renderer.mount(container, scheduleRender);\n subscribeToPresentation();\n } else if (surface.renderer !== options.renderer) {\n unsubscribePresentation?.();\n unsubscribePresentation = void 0;\n destroyTooltip();\n destroyHostControls();\n surface.destroy();\n container.replaceChildren();\n surface = options.renderer.mount(container, scheduleRender);\n subscribeToPresentation();\n hasRendered = false;\n }\n renderingSurface = true;\n try {\n surface.render(scene, {\n ariaLabel: options.ariaLabel,\n ariaDescription: options.ariaDescription,\n className: options.className,\n tabIndex: resolveChartHostTabIndex(\n options.definition,\n options.tabIndex\n ),\n idPrefix: options.idPrefix,\n animation: hasRendered ? resolveAnimation(options.definition.svgAnimation, container, reason) : void 0\n });\n } finally {\n renderingSurface = false;\n }\n syncHostControls();\n hasRendered = true;\n const presentedPoints = interactionPoints();\n spatialIndex = options.definition.focus === false ? void 0 : options.definition.spatialIndex?.(\n viewportInteractionPoints(scene, scene.points),\n { scene }\n );\n const nextCursorBinding = cursorBinding();\n renderedCursorBinding = nextCursorBinding;\n if (nextCursorBinding) {\n applyCursorState(true);\n } else if (previousCursorBinding) {\n cursorPresentation = null;\n focusedPoint = null;\n pinnedKey = null;\n pointerPosition = null;\n focusOwner = null;\n paintFocus(null, []);\n if (previousFocusedPoint) {\n options.onFocusChange?.(null);\n options.onFocusGroupChange?.([]);\n }\n } else {\n cursorPresentation = null;\n const trackedPointer = (focusOwner === \"pointer\" || focusOwner === \"controlled\" && focusSource === \"pointer\") && pinnedKey === null ? pointerPosition : null;\n const nextFocusedPoints = trackedPointer ? resolvePointerFocus(trackedPointer.x, trackedPointer.y, maxDistance()) : previousFocusedPoint ? (() => {\n const restored = restoreChartFocusPoint(\n presentedPoints,\n previousFocusedPoint\n );\n return restored ? focusPointsForPoint(restored, presentedPoints) : [];\n })() : [];\n const nextFocusedPoint = nextFocusedPoints[0] ?? null;\n focusedPoint = nextFocusedPoint;\n if (!nextFocusedPoint) pinnedKey = null;\n if (previousFocusedPoint || nextFocusedPoint || previousCursorPresentation) {\n if (!trackedPointer) focusSource = \"restored\";\n paintFocus(nextFocusedPoint, nextFocusedPoints);\n options.onFocusChange?.(nextFocusedPoint);\n options.onFocusGroupChange?.(nextFocusedPoints);\n }\n }\n const onRender = options.onRender;\n if (onRender) {\n onRender({ container, scene, surface, interaction });\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 cursorBinding = () => options.definition.cursor;\n const cursorIsPinned = () => cursorSession?.getState()?.pinned === true;\n const interactionIsPinned = () => pinnedKey !== null || cursorIsPinned();\n const configureCursorController = () => {\n const nextBinding = cursorBinding();\n if (nextBinding) hasCursorPresentation = true;\n const nextController = nextBinding?.controller;\n const nextMode = nextBinding?.mode;\n const nextMatch = nextBinding?.mode === \"focus\" ? nextBinding.match ?? \"xy\" : void 0;\n if (nextController === cursorSession?.controller && nextMode === cursorMode && nextMatch === cursorMatch && nextBinding?.use === cursorExtension) {\n return;\n }\n unsubscribeCursor?.();\n unsubscribeCursor = void 0;\n cursorSession?.destroy();\n cursorSession = nextBinding ? createChartCursorHostSession(nextBinding) : void 0;\n cursorMode = nextMode;\n cursorMatch = nextMatch;\n cursorExtension = nextBinding?.use;\n unsubscribeCursor = cursorSession?.subscribe(() => {\n if (!destroyed && hasRendered) applyCursorState(false);\n });\n };\n const applyCursorState = (notifyRestored) => {\n const binding = cursorBinding();\n if (!binding) {\n cursorPresentation = null;\n return;\n }\n const session = cursorSession;\n if (!session) return;\n const state = session.getState();\n if (state?.source !== \"pointer\" || !session.owns(state)) {\n pointerPosition = null;\n }\n cursorPresentation = session.resolvePresentation(scene, binding, state);\n const previous = focusedPoint;\n if (binding.mode === \"focus\") {\n const focus = resolveChartFocusStrategy(options.definition.focus);\n const points = session.resolveFocus(\n interactionPoints(),\n binding,\n state,\n focus\n );\n const point = points[0] ?? null;\n if (state) focusSource = state.source;\n pinnedKey = state?.pinned && point ? point.key : null;\n focusedPoint = point;\n paintFocus(point, points);\n if (!sameChartPointIdentity(previous, point) || notifyRestored && (previous !== null || point !== null)) {\n options.onFocusChange?.(point);\n options.onFocusGroupChange?.(points);\n }\n return;\n }\n pinnedKey = null;\n focusedPoint = null;\n paintFocus(null, []);\n if (previous) {\n options.onFocusChange?.(null);\n options.onFocusGroupChange?.([]);\n }\n };\n const publishFocusCursor = (points, pinned = interactionIsPinned()) => {\n const binding = cursorBinding();\n if (binding?.mode !== \"focus\") return false;\n const session = cursorSession;\n if (!session) return false;\n const point = points[0];\n if (!point) {\n session.clearOwnedTransient();\n return true;\n }\n session.publish(\n session.createFocusState(scene, binding, {\n primary: point,\n group: points,\n source: focusSource,\n pinned\n })\n );\n return true;\n };\n const updateFocus = (points, forcePaint = false) => {\n const point = points[0] ?? null;\n if (publishFocusCursor(points)) return;\n if (sameChartPointIdentity(point, focusedPoint)) {\n focusedPoint = point;\n if (forcePaint) paintFocus(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 const binding = cursorBinding();\n if (!focusedPoint && !pinnedKey && !cursorSession?.getState()) return;\n const restoreFocus = Boolean(\n tooltipInstance?.contains(container.ownerDocument.activeElement)\n );\n pinnedKey = null;\n pointerPosition = null;\n focusOwner = null;\n if (binding) cursorSession?.clear();\n else 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 paintingFocus = true;\n let paintedScene;\n try {\n const focus = point ? {\n primary: point,\n group: points,\n source: focusSource,\n pinned: interactionIsPinned()\n } : null;\n paintedScene = hasCursorPresentation ? surface?.paintFocus(focus, pointerPosition, cursorPresentation) : surface?.paintFocus(focus, pointerPosition);\n } finally {\n paintingFocus = false;\n }\n interactionScene = paintedScene ?? scene;\n paintTooltip(point, points);\n };\n const resolveClientPointer = (clientX, clientY) => {\n const position = surface?.clientToScene?.(scene, clientX, clientY);\n if (!position) return null;\n return {\n position,\n points: resolvePointerFocus(position.x, position.y, maxDistance())\n };\n };\n const pointsAtPointer = (clientX, clientY) => {\n const resolved = resolveClientPointer(clientX, clientY);\n pointerPosition = resolved?.position ?? null;\n return resolved?.points ?? [];\n };\n const interaction = {\n clientToScene(clientX, clientY) {\n if (destroyed) return null;\n return surface?.clientToScene?.(scene, clientX, clientY) ?? null;\n },\n resolvePointer(clientX, clientY) {\n if (destroyed) return null;\n const resolved = resolveClientPointer(clientX, clientY);\n const point = resolved?.points[0];\n return resolved && point ? {\n position: resolved.position,\n point,\n points: resolved.points\n } : null;\n },\n setControlledFocus(target, controlledOptions = {}) {\n if (destroyed) return;\n focusOwner = \"controlled\";\n if (!target) {\n focusSource = controlledOptions.source ?? \"programmatic\";\n pointerPosition = null;\n pinnedKey = null;\n updateFocus([]);\n focusOwner = null;\n return;\n }\n let resolution;\n let targetPoint;\n if (isPointerResolution(target)) {\n resolution = target;\n targetPoint = target.point;\n } else {\n resolution = null;\n targetPoint = target;\n }\n focusSource = controlledOptions.source ?? (resolution === null ? \"programmatic\" : \"pointer\");\n const points = interactionPoints();\n const point = restoreChartFocusPoint(points, targetPoint);\n pointerPosition = resolution?.position ?? null;\n if (!point) {\n pinnedKey = null;\n updateFocus([]);\n focusOwner = null;\n return;\n }\n const focusPoints = focusPointsForPoint(point, points);\n pinnedKey = controlledOptions.pinned && (tooltipIsSticky() || cursorBinding()?.pin === true) ? point.key : null;\n if (sameChartPointIdentity(point, focusedPoint)) {\n focusedPoint = point;\n paintFocus(point, focusPoints);\n return;\n }\n updateFocus(focusPoints);\n }\n };\n const scenePositionAtPointer = (clientX, clientY) => {\n const position = surface?.clientToScene?.(scene, clientX, clientY);\n pointerPosition = position ?? null;\n return position;\n };\n const updateFreeCursorAtPointer = (clientX, clientY) => {\n const binding = cursorBinding();\n if (binding?.mode !== \"free\") return false;\n if (cursorIsPinned()) return true;\n const position = scenePositionAtPointer(clientX, clientY);\n if (!position || !plotContains(scene, position)) {\n pointerPosition = null;\n cursorSession?.clearOwnedTransient();\n return true;\n }\n const session = cursorSession;\n if (!session) return false;\n session.publish(\n session.createFreeState(scene, binding, position, \"pointer\", false)\n );\n return true;\n };\n const handlePointerMove = (event) => {\n if (controlContains(event.target)) {\n if (!interactionIsPinned()) {\n pointerPosition = null;\n updateFocus([]);\n }\n return;\n }\n if (options.definition.pointer === false || interactionIsPinned()) return;\n focusOwner = \"pointer\";\n focusSource = \"pointer\";\n if (updateFreeCursorAtPointer(event.clientX, event.clientY)) return;\n updateFocus(\n pointsAtPointer(event.clientX, event.clientY),\n tooltipTracksPointer()\n );\n };\n const handlePointerDown = (event) => {\n if (options.definition.pointer === false || interactionIsPinned()) return;\n focusOwner = \"pointer\";\n focusSource = \"pointer\";\n updateFreeCursorAtPointer(event.clientX, event.clientY);\n };\n const clearPointerFocus = ({ relatedTarget }) => {\n if (options.definition.pointer !== false && focusOwner === \"pointer\" && !interactionIsPinned() && !(view && relatedTarget instanceof view.Node && container.contains(relatedTarget))) {\n pointerPosition = null;\n const binding = cursorBinding();\n if (binding) cursorSession?.clearOwnedTransient();\n else updateFocus([]);\n focusOwner = null;\n }\n };\n const clearKeyboardFocus = ({ relatedTarget }) => {\n if (focusOwner === \"keyboard\" && !pinnedKey && !(view && relatedTarget instanceof view.Node && container.contains(relatedTarget))) {\n pointerPosition = null;\n const binding = cursorBinding();\n if (binding) cursorSession?.clearOwnedTransient();\n else updateFocus([]);\n focusOwner = null;\n }\n };\n const handleClick = (event) => {\n if (controlContains(event.target)) return;\n if (options.definition.pointer === false) return;\n const activeTooltip = tooltipInstance;\n const NodeConstructor = container.ownerDocument.defaultView?.Node;\n const originatedInTooltip = NodeConstructor ? event.composedPath().some(\n (target) => target instanceof NodeConstructor && activeTooltip?.contains(target)\n ) : activeTooltip?.contains(event.target);\n if (activeTooltip && originatedInTooltip) {\n return;\n }\n focusOwner = \"pointer\";\n const binding = cursorBinding();\n if (binding?.mode === \"free\") {\n const state = cursorSession?.getState();\n if (!state) {\n updateFreeCursorAtPointer(event.clientX, event.clientY);\n }\n const current = cursorSession?.getState();\n if (binding.pin && current) {\n if (current.pinned) {\n cursorSession?.clear();\n } else {\n cursorSession?.publish({ ...current, pinned: true });\n }\n }\n options.onSelect?.(null);\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 const canPin = tooltipIsSticky() || binding?.pin === true;\n if (canPin) {\n if (interactionIsPinned()) {\n pinnedKey = null;\n pinChanged = true;\n if (binding) cursorSession?.clear();\n } else if (point) {\n pinnedKey = point.key;\n pinChanged = true;\n }\n }\n if (!(binding && canPin && pinChanged && !pinnedKey)) {\n updateFocus(points, pinChanged);\n }\n options.definition.selection?.change(point, \"pointer\");\n options.onSelect?.(point);\n };\n const handleKeyDown = (event) => {\n if (controlContains(event.target)) return;\n const binding = cursorBinding();\n if (event.key === \"Escape\" && cursorSession?.getState()) {\n event.preventDefault();\n dismissTooltip();\n return;\n }\n if (event.key === \"Escape\" && pinnedKey) {\n event.preventDefault();\n dismissTooltip();\n return;\n }\n if (options.definition.keyboard === false || binding?.mode === \"free\") {\n return;\n }\n const points = interactionPoints();\n if (!points.length) return;\n if (event.key === \"Enter\" || event.key === \" \") {\n if (!focusedPoint) return;\n event.preventDefault();\n const point2 = focusedPoint;\n const canPin = tooltipIsSticky() || binding?.pin === true;\n if (binding?.mode === \"focus\" && canPin) {\n if (interactionIsPinned()) {\n pinnedKey = null;\n cursorSession?.clear();\n } else {\n pinnedKey = point2.key;\n publishFocusCursor(focusPointsForPoint(point2), true);\n }\n } else if (tooltipIsSticky()) {\n pinnedKey = pinnedKey ? null : point2.key;\n paintFocus(point2, focusPointsForPoint(point2));\n }\n options.definition.selection?.change(point2, \"keyboard\");\n options.onSelect?.(point2);\n return;\n }\n const focus = resolveRendererFocusStrategy(options.definition.focus);\n const point = focus ? chartPointFromNavigationOrder(\n focus.navigation(points),\n focusedPoint,\n event.key\n ) : chartPointFromSceneOrder(points, focusedPoint, event.key);\n if (point === void 0) return;\n event.preventDefault();\n pointerPosition = null;\n focusOwner = \"keyboard\";\n focusSource = \"keyboard\";\n updateFocus(point ? focusPointsForPoint(point) : []);\n };\n const handleFocus = (event) => {\n if (controlContains(event.target)) {\n if (!pinnedKey) {\n pointerPosition = null;\n updateFocus([]);\n }\n return;\n }\n if (event.target === surface?.element && suppressNextSurfaceFocus) {\n suppressNextSurfaceFocus = false;\n return;\n }\n if (options.definition.keyboard !== false && cursorBinding()?.mode !== \"free\" && event.target === surface?.element && !focusedPoint) {\n const focus = resolveRendererFocusStrategy(options.definition.focus);\n const points = interactionPoints();\n const point = focus ? focus.navigation(points)[0] : chartPointFromSceneOrder(points, null, \"Home\");\n pointerPosition = null;\n focusOwner = \"keyboard\";\n focusSource = \"keyboard\";\n updateFocus(point ? focusPointsForPoint(point) : []);\n }\n };\n container.addEventListener(\"pointermove\", handlePointerMove);\n container.addEventListener(\"pointerdown\", handlePointerDown);\n container.addEventListener(\"pointercancel\", clearPointerFocus);\n container.addEventListener(\"mouseleave\", clearPointerFocus);\n container.addEventListener(\"click\", handleClick);\n container.addEventListener(\"keydown\", handleKeyDown);\n container.addEventListener(\"focusin\", handleFocus);\n container.addEventListener(\"focusout\", clearKeyboardFocus);\n fontSet?.addEventListener?.(\"loadingdone\", handleFontLoad);\n configureCursorController();\n render();\n configureObserver();\n return {\n interaction,\n update(nextOptions) {\n if (destroyed) return;\n resolveTooltipInput(nextOptions.definition.tooltip);\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 const pointerDisabled = options.definition.pointer !== false && nextOptions.definition.pointer === false && focusOwner === \"pointer\";\n options = nextOptions;\n configureCursorController();\n syncTooltip();\n if (pointerDisabled) {\n pointerPosition = null;\n pinnedKey = null;\n focusOwner = null;\n updateFocus([]);\n }\n if (!tooltipIsSticky()) pinnedKey = null;\n if (needsRender) {\n render(\n false,\n layoutChanged ? \"layout\" : sizeChanged ? \"resize\" : \"update\"\n );\n } else {\n if (cursorBinding()) {\n applyCursorState(false);\n } else 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 unsubscribeCursor?.();\n unsubscribeCursor = void 0;\n cursorSession?.destroy();\n cursorSession = void 0;\n cursorMode = void 0;\n cursorMatch = void 0;\n cursorExtension = void 0;\n fontSet?.removeEventListener?.(\"loadingdone\", handleFontLoad);\n if (renderFrame !== void 0) {\n view?.cancelAnimationFrame?.(renderFrame);\n }\n destroyTooltip();\n destroyHostControls();\n unsubscribePresentation?.();\n unsubscribePresentation = void 0;\n surface?.destroy();\n runtime.destroy();\n container.removeEventListener(\"pointermove\", handlePointerMove);\n container.removeEventListener(\"pointerdown\", handlePointerDown);\n container.removeEventListener(\"pointercancel\", clearPointerFocus);\n container.removeEventListener(\"mouseleave\", clearPointerFocus);\n container.removeEventListener(\"click\", handleClick);\n container.removeEventListener(\"keydown\", handleKeyDown);\n container.removeEventListener(\"focusin\", handleFocus);\n container.removeEventListener(\"focusout\", clearKeyboardFocus);\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 {\n measureText: options.measureText ?? domText.measureText,\n typography: domText.typography()\n }\n );\n }\n function syncHostControls() {\n const retained = /* @__PURE__ */ new Set();\n for (const control of scene.controls ?? []) {\n const extension = control.extension;\n const identity = `${extension.id}:${control.key}`;\n retained.add(identity);\n let current = controlInstances.get(identity);\n if (current && current.extension !== extension) {\n current.instance.destroy();\n controlInstances.delete(identity);\n current = void 0;\n }\n if (!current) {\n current = {\n extension,\n instance: extension.create({ container, surface })\n };\n controlInstances.set(identity, current);\n }\n current.instance.update(control, scene);\n }\n for (const [identity, current] of controlInstances) {\n if (retained.has(identity)) continue;\n current.instance.destroy();\n controlInstances.delete(identity);\n }\n }\n function destroyHostControls() {\n for (const current of controlInstances.values()) {\n current.instance.destroy();\n }\n controlInstances.clear();\n }\n function controlContains(target) {\n for (const current of controlInstances.values()) {\n if (current.instance.contains?.(target)) return true;\n }\n return false;\n }\n function resolvePointerFocus(x, y, maxDistance2) {\n const points = interactionPoints();\n const focus = resolveRendererFocusStrategy(options.definition.focus);\n const focused = resolveChartPointerFocus(\n interactionScene,\n focus,\n x,\n y,\n maxDistance2,\n points\n );\n if (focused) return focused;\n const presentationPoints = surface?.getPresentationPoints?.();\n const candidate = presentationPoints !== void 0 ? nearestPoint(points, x, y, maxDistance2) : spatialIndex && interactionScene === scene ? spatialIndex.findNearest(x, y, maxDistance2) : findNearestPoint(interactionScene, x, y, maxDistance2, points);\n const point = candidate ? restoreChartFocusPoint(points, candidate) : null;\n return point ? [point] : [];\n }\n function interactionPoints() {\n const points = surface?.getPresentationPoints?.() ?? interactionScene.points;\n return viewportInteractionPoints(scene, points);\n }\n function focusPointsForPoint(point, points = interactionPoints()) {\n return resolveRendererFocusStrategy(options.definition.focus)?.group(points, {\n point\n }) ?? [point];\n }\n function subscribeToPresentation() {\n unsubscribePresentation = surface?.subscribePresentationPoints?.(\n handlePresentationPoints\n );\n }\n function handlePresentationPoints(points) {\n if (destroyed || renderingSurface || paintingFocus) return;\n if (cursorBinding()) {\n applyCursorState(false);\n return;\n }\n const visiblePoints = viewportInteractionPoints(scene, points);\n if (pointerPosition && pinnedKey === null) {\n updateFocus(\n resolvePointerFocus(\n pointerPosition.x,\n pointerPosition.y,\n maxDistance()\n ),\n true\n );\n return;\n }\n if (!focusedPoint) return;\n const point = restoreChartFocusPoint(visiblePoints, focusedPoint);\n updateFocus(point ? focusPointsForPoint(point, visiblePoints) : [], true);\n }\n function maxDistance() {\n return options.definition.maxFocusDistance ?? 48;\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: interactionIsPinned()\n },\n pinned: interactionIsPinned()\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 createHostedScene(scene) {\n const fallbackKeys = new Set(\n (scene.controls ?? []).flatMap(\n (control) => control.fallbackNodeKey ? [control.fallbackNodeKey] : []\n )\n );\n if (!fallbackKeys.size) return scene;\n return {\n ...scene,\n nodes: scene.nodes.filter((node) => !fallbackKeys.has(node.key))\n };\n}\nfunction isPointerResolution(target) {\n return \"position\" in target && \"point\" in target && \"points\" in target;\n}\nfunction resolveTooltipInput(input) {\n if (!input) return null;\n const extension = \"create\" in input ? input : input.use;\n if (extension.__chartTooltipHost !== \"dom\") {\n throw new TypeError(\n \"DOM chart hosts require a tooltip extension from @tanstack/charts/tooltip.\"\n );\n }\n const domExtension = extension;\n return \"create\" in input ? {\n extension: domExtension,\n options: emptyTooltipOptions\n } : {\n extension: domExtension,\n options: input\n };\n}\nfunction isPositiveFiniteNumber(value) {\n return typeof value === \"number\" && Number.isFinite(value) && value > 0;\n}\nfunction resolveRendererFocusStrategy(focus) {\n if (focus === false) return focusDisabled;\n return resolveChartFocusStrategy(focus);\n}\nfunction plotContains(scene, position) {\n return position.x >= scene.chart.x && position.x <= scene.chart.x + scene.chart.width && position.y >= scene.chart.y && position.y <= scene.chart.y + scene.chart.height;\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}\nexport {\n mountChartRenderer\n};\n","const interpolatedAttributes = /* @__PURE__ */ new Set([\n \"cx\",\n \"cy\",\n \"d\",\n \"fill-opacity\",\n \"font-size\",\n \"font-weight\",\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 reconcileChartSvgFragment(currentRoot, markup, animation) {\n const template = currentRoot.ownerDocument.createElement(\"template\");\n template.innerHTML = `<svg xmlns=\"http://www.w3.org/2000/svg\">${markup}</svg>`;\n const wrapper = template.content.firstElementChild;\n const nextRoot = wrapper?.firstElementChild;\n if (!nextRoot) return () => {\n };\n if (currentRoot.namespaceURI !== nextRoot.namespaceURI || currentRoot.localName !== nextRoot.localName) {\n currentRoot.replaceWith(nextRoot);\n return () => {\n };\n }\n const tweens = [];\n reconcileElement(currentRoot, nextRoot, animation ? tweens : void 0);\n return animation ? runTweens(currentRoot, tweens, animation) : () => {\n };\n}\nfunction reconcileElement(current, next, tweens) {\n syncAttributes(current, next, tweens);\n if (!next.firstElementChild) {\n if (current.firstElementChild) {\n for (const child of [...current.children]) {\n if (tweens) addExitTween(child, tweens);\n else child.remove();\n }\n } else 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 reconcileChartSvgFragment\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}${renderSceneNodes(scene.nodes, idPrefix, hooks)}</svg>`;\n}\nfunction renderSceneNodes(nodes, idPrefix = \"\", hooks) {\n return nodes.map((node) => renderNode(node, hooks, idPrefix)).join(\"\");\n}\nfunction renderFocusGuideLayer(nodes, placement, idPrefix = \"\", hooks) {\n const visibility = nodes.length ? \"visible\" : \"hidden\";\n return `<g data-ts-key=\"focus-guide-layer:${placement}\" class=\"ts-chart__focus-guide-layer ts-chart__focus-guide-layer--${placement}\" data-ts-focus-layer=\"${placement}\" data-ts-focus-guide-layer=\"${placement}\" aria-hidden=\"true\" visibility=\"${visibility}\">${renderSceneNodes(nodes, idPrefix, hooks ?? focusGuideRenderHooks)}</g>`;\n}\nconst focusGuideRenderHooks = {\n renderGroup: renderFocusGuideClip\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}\"${node.focus.retarget ? ' data-ts-focus-retarget=\"true\"' : \"\"} 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.polygons !== void 0 ? polygonsPath(node.polygons) : node.path ?? pointsPath(node.points, true);\n const fillRule = node.polygons === void 0 ? \"\" : ' fill-rule=\"evenodd\"';\n return `<path${common} d=\"${path}\"${fillRule} 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 polygonsPath(polygons) {\n return polygons.flatMap((polygon) => polygon).filter((ring) => ring.length > 0).map((ring) => pointsPath(ring, true)).join(\"\");\n}\nfunction pointsPath(points, close) {\n return `${points.map(\n ([x, y], index) => `${index === 0 ? \"M\" : \"L\"}${number(x)},${number(y)}`\n ).join(\"\")}${close ? \"Z\" : \"\"}`;\n}\nfunction renderFocusGuideClip(node, idPrefix) {\n if (!node.clip) return void 0;\n const prefix = idPrefix.replaceAll(/[^a-zA-Z0-9_-]/g, \"\");\n const id = `${prefix ? `${prefix}-` : \"\"}ts-chart-clip-${stableId(node.key)}`;\n return {\n attributes: ` clip-path=\"url(#${id})\"`,\n content: `<defs data-ts-key=\"${escapeAttribute(`${node.key}:clip-defs`)}\"><clipPath id=\"${id}\"><rect x=\"${number(node.clip.x)}\" y=\"${number(node.clip.y)}\" width=\"${number(node.clip.width)}\" height=\"${number(node.clip.height)}\"/></clipPath></defs>`\n };\n}\nfunction stableId(value) {\n let hash = 2166136261;\n for (let index = 0; index < value.length; index += 1) {\n hash = Math.imul(hash ^ value.charCodeAt(index), 16777619);\n }\n return (hash >>> 0).toString(36);\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 renderFocusGuideLayer,\n renderSceneNodes\n};\n","import {\n renderChartSvgWithHooks\n} from \"./svg-renderer.js\";\nfunction renderChartSvg(scene, options) {\n const gradientIds = new Set(scene.gradients.map((gradient) => gradient.id));\n return renderChartSvgWithHooks(scene, options, {\n renderDefinitions: (currentScene, idPrefix) => renderGradients(currentScene, sanitizeId(idPrefix)),\n renderGroup: (group, idPrefix) => renderClip(group, sanitizeId(idPrefix)),\n resolvePaint: (value, idPrefix) => {\n const match = /^url\\(#([^)]+)\\)$/.exec(value);\n const id = match?.[1];\n return id && gradientIds.has(id) ? `url(#${scopedId(sanitizeId(idPrefix), id)})` : value;\n }\n });\n}\nfunction renderGradients(scene, idPrefix) {\n if (!scene.gradients.length) return \"\";\n return `<defs data-ts-key=\"gradients\">${scene.gradients.map(\n (gradient) => `<linearGradient data-ts-key=\"gradient:${escapeAttribute(gradient.id)}\" id=\"${escapeAttribute(scopedId(idPrefix, gradient.id))}\" x1=\"${percent(gradient.x1 ?? 0)}\" y1=\"${percent(gradient.y1 ?? 1)}\" x2=\"${percent(gradient.x2 ?? 0)}\" y2=\"${percent(gradient.y2 ?? 0)}\">${gradient.stops.map(\n (stop, index) => `<stop data-ts-key=\"gradient:${escapeAttribute(gradient.id)}:stop:${index}\" offset=\"${percent(stop.offset)}\" stop-color=\"${escapeAttribute(stop.color)}\"${stop.opacity === void 0 ? \"\" : ` stop-opacity=\"${number(stop.opacity)}\"`}/>`\n ).join(\"\")}</linearGradient>`\n ).join(\"\")}</defs>`;\n}\nfunction renderClip(group, idPrefix) {\n if (!group.clip) return void 0;\n const id = scopedId(idPrefix, `ts-chart-clip-${stableId(group.key)}`);\n return {\n attributes: ` clip-path=\"url(#${id})\"`,\n content: `<defs data-ts-key=\"${escapeAttribute(`${group.key}:clip-defs`)}\"><clipPath id=\"${id}\"><rect x=\"${number(group.clip.x)}\" y=\"${number(group.clip.y)}\" width=\"${number(group.clip.width)}\" height=\"${number(group.clip.height)}\"/></clipPath></defs>`\n };\n}\nfunction scopedId(prefix, id) {\n return prefix ? `${prefix}-${id}` : id;\n}\nfunction sanitizeId(value) {\n return value.replaceAll(/[^a-zA-Z0-9_-]/g, \"\");\n}\nfunction percent(value) {\n return `${number(Math.max(0, Math.min(1, value)) * 100)}%`;\n}\nfunction stableId(value) {\n let hash = 2166136261;\n for (let index = 0; index < value.length; index += 1) {\n hash = Math.imul(hash ^ value.charCodeAt(index), 16777619);\n }\n return (hash >>> 0).toString(36);\n}\nfunction number(value) {\n return String(Math.round(value * 100) / 100);\n}\nfunction escapeAttribute(value) {\n return value.replaceAll(\"&\", \"&\").replaceAll(\"<\", \"<\").replaceAll(\">\", \">\").replaceAll('\"', \""\");\n}\nexport {\n renderChartSvg\n};\n","function createScenePointLookup(points) {\n const keys = /* @__PURE__ */ new Map();\n const marks = /* @__PURE__ */ new Map();\n const append = (map, key, point) => {\n const related = map.get(key);\n if (related) related.push(point);\n else map.set(key, [point]);\n };\n for (const point of points) {\n append(marks, point.markId, point);\n let end = point.key.length;\n while (end > 0) {\n append(keys, point.key.slice(0, end), point);\n end = point.key.lastIndexOf(\":\", end - 1);\n }\n }\n return { points, keys, marks };\n}\nfunction sceneNodeOwnedPoints(node, scope, lookup, fallback = scope) {\n if (node.kind === \"group\") {\n const index = node.focusCandidateIndex;\n if (index !== void 0 && Number.isInteger(index) && index >= 0) {\n const point = scope[index];\n if (point) return [point];\n }\n }\n if (node.pointOwner) {\n const owned = pointCandidates(node.pointOwner, scope);\n if (owned.length) return owned;\n }\n if (\"interaction\" in node && node.interaction) {\n const candidates = node.interaction.point ? [node.interaction.point] : node.interaction.points;\n const owned = candidates.flatMap(\n (candidate) => pointCandidates(candidate, scope)\n );\n if (owned.length) return owned;\n }\n return sceneKeyOwnedPoints(node.key, scope, lookup, fallback);\n}\nfunction sceneKeyOwnedPoints(key, scope, lookup, fallback = scope) {\n const withinScope = (candidates) => candidates === void 0 ? [] : scope === lookup.points ? candidates : candidates.filter((point) => scope.includes(point));\n const related = withinScope(lookup.keys.get(key));\n const exact = related.filter((point) => point.key === key);\n if (exact.length) return exact;\n let candidate = key;\n while (candidate.includes(\":\")) {\n const separator = candidate.lastIndexOf(\":\");\n candidate = candidate.slice(0, separator);\n const fragments = withinScope(lookup.keys.get(candidate)).filter(\n (point) => point.key === candidate\n );\n if (fragments.length) return fragments;\n }\n if (related.length) return related;\n const mark = withinScope(lookup.marks.get(key));\n if (mark.length) return mark;\n return fallback;\n}\nfunction pointCandidates(owner, scope) {\n const identical = scope.filter((point) => point === owner);\n if (identical.length) return identical;\n const keyed = scope.filter((point) => point.key === owner.key);\n if (keyed.length) return keyed;\n const semantic = scope.filter(\n (point) => Object.is(point.datum, owner.datum) && (isReference(owner.datum) || point.datumIndex === owner.datumIndex)\n );\n return semantic.length === 1 ? semantic : [];\n}\nfunction isReference(value) {\n return typeof value === \"object\" && value !== null || typeof value === \"function\";\n}\nexport {\n createScenePointLookup,\n sceneKeyOwnedPoints,\n sceneNodeOwnedPoints\n};\n","import { valueKey } from \"./scales.js\";\nimport {\n createScenePointLookup,\n sceneNodeOwnedPoints\n} from \"./scene-point-ownership-internal.js\";\nconst emptyPoints = [];\nfunction resolveFocusPresentation(scene, focus, pointer, cursor) {\n const focusedScene = resolveFocusScene(scene, focus).scene;\n const focusedUnder = focusedSceneNodes(focusedScene, focus, \"under\");\n const focusedOver = focusedSceneNodes(focusedScene, focus, \"over\");\n const guides = resolveFocusGuides(scene, focus, pointer, cursor);\n return {\n under: [...guides.under, ...focusedUnder],\n over: [...focusedOver, ...guides.over]\n };\n}\nfunction resolveFocusGuides(scene, focus, pointer, cursor) {\n const under = [];\n const over = [];\n if (!cursor && !focus) return { under, over };\n for (const guide of scene.focusGuides ?? []) {\n const localFocus = focus && guideOwnsFocus(guide, focus) ? focus : null;\n if (!cursor && focus && !localFocus) continue;\n const node = guide.resolve({\n scene,\n guide,\n focus: localFocus,\n pointer,\n cursor\n });\n if (!node) continue;\n (guide.placement === \"under\" ? under : over).push(node);\n }\n return { under, over };\n}\nfunction resolveFocusScene(scene, focus) {\n if (!focus) return { scene, retargeted: false };\n let retargeted = false;\n const visit = (nodes2) => nodes2.map((node) => {\n if (node.kind !== \"group\") return node;\n if (node.focus?.retarget) {\n const points = node.focus.points.filter(\n (point) => matchesFocusAnchor(point, focus, node.focus.match)\n );\n const lookup = createScenePointLookup(node.focus.points);\n const selected = stabilizeSelectedNodes(\n filterNodesWithLookup(\n node.focus.candidates ?? node.children,\n points,\n node.focus.points,\n lookup\n ),\n points,\n node.focus.points,\n lookup,\n node.key\n );\n if (!selected.length) return node;\n retargeted = true;\n return {\n ...node,\n focus: { ...node.focus, activePoints: points },\n children: selected\n };\n }\n const children = visit(node.children);\n return children.some((child, index) => child !== node.children[index]) ? { ...node, children } : node;\n });\n const nodes = visit(scene.nodes);\n return retargeted ? { scene: { ...scene, nodes }, retargeted } : { scene, retargeted };\n}\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 keys = /* @__PURE__ */ new Set();\n visitNodes(selectedFocusChildren(layer, focus), (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 children2 = selectedFocusChildren(node, focus);\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 selectedFocusChildren(layer, focus) {\n const state = layer.focus;\n if (state.retarget) return layer.children;\n if (state.anchors) {\n const anchors = state.anchors.filter(\n (anchor) => matchesFocusAnchor(anchor, focus, state.match)\n );\n return filterNodesByAnchors(layer.children, anchors);\n }\n const points = state.points.filter(\n (point) => matchesFocusAnchor(point, focus, state.match)\n );\n return filterNodes(layer.children, points, state.points);\n}\nfunction filterNodes(nodes, selectedPoints, candidatePoints) {\n return filterNodesWithLookup(\n nodes,\n selectedPoints,\n candidatePoints,\n createScenePointLookup(candidatePoints)\n );\n}\nfunction filterNodesByAnchors(nodes, anchors) {\n const output = [];\n for (const node of nodes) {\n if (node.kind !== \"group\") {\n if (anchors.some((anchor) => keysRelate(node.key, anchor.key))) {\n output.push(node);\n }\n continue;\n }\n const children = filterNodesByAnchors(node.children, anchors);\n if (children.length) {\n output.push({ ...node, children });\n } else if (anchors.some((anchor) => anchor.key.startsWith(`${node.key}:`))) {\n output.push(node);\n }\n }\n return output;\n}\nfunction filterNodesWithLookup(nodes, selectedPoints, candidatePoints, lookup) {\n const output = [];\n for (const node of nodes) {\n if (node.kind !== \"group\") {\n if (sceneNodeOwnedPoints(node, candidatePoints, lookup, emptyPoints).some(\n (point) => selectedPoints.includes(point)\n )) {\n output.push(node);\n }\n continue;\n }\n const structuralPoint = focusCandidatePoint(node, candidatePoints);\n if (structuralPoint) {\n if (selectedPoints.includes(structuralPoint)) output.push(node);\n continue;\n }\n const atomicPoints = atomicGroupPoints(node, candidatePoints, lookup);\n if (atomicPoints.length) {\n if (atomicPoints.some((point) => selectedPoints.includes(point))) {\n output.push(node);\n }\n continue;\n }\n const structuralPoints = sceneNodeOwnedPoints(\n node,\n candidatePoints,\n lookup,\n emptyPoints\n );\n const childPoints = structuralPoints.length ? structuralPoints : candidatePoints;\n const children = filterNodesWithLookup(\n node.children,\n selectedPoints,\n childPoints,\n lookup\n );\n if (children.length) {\n output.push({ ...node, children });\n }\n }\n return output;\n}\nfunction stabilizeSelectedNodes(nodes, points, candidatePoints, lookup, layerKey) {\n const slots = new Map(points.map((point, index) => [point, index]));\n const visit = (node, path) => {\n const related = sceneNodeOwnedPoints(\n node,\n candidatePoints,\n lookup,\n emptyPoints\n ).filter((point2) => slots.has(point2));\n const point = related.length === 1 ? related[0] : void 0;\n let key = node.key;\n if (point && node.key !== point.markId) {\n const slot = `${layerKey}:selection:${slots.get(point) ?? 0}`;\n if (node.key === point.key) key = slot;\n else if (node.key.startsWith(`${point.key}:`)) {\n key = `${slot}${node.key.slice(point.key.length)}`;\n } else if (point.key.startsWith(`${node.key}:`)) {\n key = `${slot}:ancestor:${path}`;\n } else {\n key = `${slot}:node:${path}`;\n }\n }\n return node.kind === \"group\" ? {\n ...node,\n key,\n children: node.children.map(\n (child, index) => visit(child, `${path}:${index}`)\n )\n } : { ...node, key };\n };\n return nodes.map((node, index) => visit(node, String(index)));\n}\nfunction atomicGroupPoints(node, candidatePoints, lookup) {\n const candidate = focusCandidatePoint(node, candidatePoints);\n if (candidate) return [candidate];\n if (node.pointOwner) {\n const owned = sceneNodeOwnedPoints(\n node,\n candidatePoints,\n lookup,\n emptyPoints\n );\n if (owned.length) return owned;\n }\n const exact = lookup.keys.get(node.key)?.filter((point) => point.key === node.key);\n return exact === void 0 ? emptyPoints : exact.filter((point) => candidatePoints.includes(point));\n}\nfunction focusCandidatePoint(node, candidatePoints) {\n const index = node.focusCandidateIndex;\n if (index === void 0 || !Number.isInteger(index) || index < 0) {\n return void 0;\n }\n return candidatePoints[index];\n}\nfunction matchesFocusAnchor(candidate, focus, match) {\n if (match === \"x\") {\n return candidate.xValue !== void 0 && sameValue(candidate.xValue, focus.primary.xValue);\n }\n if (match === \"y\") {\n return candidate.yValue !== void 0 && 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}\nconst matchesFocusPoint = matchesFocusAnchor;\nfunction sameFocusedPoint(left, right) {\n if (left === right || left.key === right.key) return true;\n if (!Object.is(left.datum, right.datum)) return false;\n return isReference(left.datum) || left.datumIndex === right.datumIndex;\n}\nfunction keysRelate(left, right) {\n return left === right || left.startsWith(`${right}:`) || right.startsWith(`${left}:`);\n}\nfunction sameValue(left, right) {\n return valueKey(left) === valueKey(right);\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}\nfunction guideOwnsFocus(guide, focus) {\n return guide.scope === void 0 || focus.primary.key === guide.scope || focus.primary.key.startsWith(`${guide.scope}:`);\n}\nexport {\n focusedNodeKeys,\n focusedSceneNodes,\n matchesFocusAnchor,\n matchesFocusPoint,\n resolveFocusGuides,\n resolveFocusPresentation,\n resolveFocusScene\n};\n","import { renderFocusGuideLayer } from \"./svg-renderer.js\";\nfunction renderFocusGuideLayerWithRenderer(svg, scene, nodes, placement, options, renderSvg) {\n const document = svg.ownerDocument;\n const key = `focus-guide-layer:${placement}`;\n const wrapper = {\n kind: \"group\",\n key,\n className: `ts-chart__focus-guide-layer ts-chart__focus-guide-layer--${placement}`,\n ariaHidden: true,\n children: nodes\n };\n const markup = renderSvg(\n {\n ...scene,\n nodes: [wrapper],\n focusGuides: void 0\n },\n options\n );\n const root = parseSvgMarkup(document, markup);\n const layer = root ? keyedElement(root, key) : void 0;\n if (!root || !layer || layer.localName !== \"g\") {\n throw new Error(\n `The SVG renderer must preserve a g[data-ts-key=\"${key}\"] element when serializing focus guides.`\n );\n }\n layer.classList.add(\n \"ts-chart__focus-guide-layer\",\n `ts-chart__focus-guide-layer--${placement}`\n );\n layer.setAttribute(\"data-ts-focus-layer\", placement);\n layer.setAttribute(\"data-ts-focus-guide-layer\", placement);\n layer.setAttribute(\"aria-hidden\", \"true\");\n layer.setAttribute(\"visibility\", nodes.length ? \"visible\" : \"hidden\");\n mergeFocusGuideClipFallback(\n document,\n layer,\n nodes,\n placement,\n options.idPrefix ?? \"\"\n );\n copyMissingRendererDefinitions(svg, root, layer, key);\n return layer.outerHTML;\n}\nfunction mergeFocusGuideClipFallback(document, layer, nodes, placement, idPrefix) {\n const fallback = parseSvgFragment(\n document,\n renderFocusGuideLayer(nodes, placement, idPrefix)\n );\n if (!fallback) return;\n for (const source of keyedElements(fallback)) {\n const clipPath = source.getAttribute(\"clip-path\");\n const key = source.getAttribute(\"data-ts-key\");\n if (!clipPath || !key) continue;\n const target = keyedElement(layer, key);\n if (!target || target.hasAttribute(\"clip-path\")) continue;\n target.setAttribute(\"clip-path\", clipPath);\n const clipDefinition = keyedElement(fallback, `${key}:clip-defs`);\n if (clipDefinition) {\n target.insertBefore(clipDefinition.cloneNode(true), target.firstChild);\n }\n }\n}\nfunction copyMissingRendererDefinitions(svg, renderedRoot, layer, layerKey) {\n const pending = [...referencedIds(layer)];\n const visited = /* @__PURE__ */ new Set();\n let definitions;\n while (pending.length) {\n const id = pending.shift();\n if (!id || visited.has(id)) continue;\n visited.add(id);\n if (elementWithId(layer, id) || baseElementWithId(svg, id)) continue;\n const source = elementWithId(renderedRoot, id);\n if (!source) continue;\n if (!definitions) {\n definitions = svg.ownerDocument.createElementNS(\n \"http://www.w3.org/2000/svg\",\n \"defs\"\n );\n definitions.setAttribute(\"data-ts-key\", `${layerKey}:renderer-defs`);\n layer.insertBefore(definitions, layer.firstChild);\n }\n const clone = source.cloneNode(true);\n definitions.append(clone);\n pending.push(...referencedIds(clone));\n }\n}\nfunction baseElementWithId(svg, id) {\n const element = elementWithId(svg, id);\n return element?.closest(\"[data-ts-focus-guide-layer]\") ? void 0 : element;\n}\nfunction referencedIds(root) {\n const ids = /* @__PURE__ */ new Set();\n for (const element of [root, ...root.querySelectorAll(\"*\")]) {\n for (const attribute of element.attributes) {\n for (const match of attribute.value.matchAll(/url\\(#([^)]+)\\)/g)) {\n if (match[1]) ids.add(match[1]);\n }\n if ((attribute.localName === \"href\" || attribute.name === \"xlink:href\") && attribute.value.startsWith(\"#\")) {\n ids.add(attribute.value.slice(1));\n }\n }\n }\n return ids;\n}\nfunction elementWithId(root, id) {\n return [\n ...root.getAttribute(\"id\") === id ? [root] : [],\n ...root.querySelectorAll(\"[id]\")\n ].find((element) => element.getAttribute(\"id\") === id);\n}\nfunction parseSvgMarkup(document, markup) {\n const template = document.createElement(\"template\");\n template.innerHTML = markup.trim();\n const root = template.content.firstElementChild;\n return root?.localName === \"svg\" ? root : void 0;\n}\nfunction parseSvgFragment(document, markup) {\n const template = document.createElement(\"template\");\n template.innerHTML = `<svg xmlns=\"http://www.w3.org/2000/svg\">${markup}</svg>`;\n return template.content.firstElementChild?.firstElementChild ?? void 0;\n}\nfunction keyedElement(root, key) {\n return keyedElements(root).find(\n (element) => element.getAttribute(\"data-ts-key\") === key\n );\n}\nfunction keyedElements(root) {\n return [\n ...root.hasAttribute(\"data-ts-key\") ? [root] : [],\n ...root.querySelectorAll(\"[data-ts-key]\")\n ];\n}\nexport {\n renderFocusGuideLayerWithRenderer\n};\n","function detachSvgFocusGuideLayers(svg) {\n const layers = {};\n if (!svg) return layers;\n for (const placement of [\"under\", \"over\"]) {\n const layer = findSvgFocusGuideLayer(svg, placement);\n if (!layer) continue;\n layers[placement] = layer;\n layer.remove();\n }\n return layers;\n}\nfunction restoreSvgFocusGuideLayers(svg, layers, include = () => true) {\n for (const placement of [\"under\", \"over\"]) {\n const layer = layers[placement];\n if (layer && include(placement)) {\n placeSvgFocusGuideLayer(svg, layer, placement);\n }\n }\n}\nfunction ensureSvgFocusGuideLayer(svg, placement) {\n const existing = findSvgFocusGuideLayer(svg, placement);\n if (existing) return existing;\n const layer = svg.ownerDocument.createElementNS(\n \"http://www.w3.org/2000/svg\",\n \"g\"\n );\n layer.dataset.tsKey = `focus-guide-layer:${placement}`;\n layer.dataset.tsFocusLayer = placement;\n layer.dataset.tsFocusGuideLayer = placement;\n layer.setAttribute(\n \"class\",\n `ts-chart__focus-guide-layer ts-chart__focus-guide-layer--${placement}`\n );\n layer.setAttribute(\"aria-hidden\", \"true\");\n layer.setAttribute(\"visibility\", \"hidden\");\n placeSvgFocusGuideLayer(svg, layer, placement);\n return layer;\n}\nfunction removeSvgFocusGuideLayer(svg, placement) {\n findSvgFocusGuideLayer(svg, placement)?.remove();\n}\nfunction placeSvgFocusGuideLayer(svg, layer, placement) {\n if (placement === \"under\") {\n const scene = [...svg.children].find(\n (child) => child.getAttribute(\"data-ts-key\") === \"grid\" || child.getAttribute(\"data-ts-key\") === \"marks\" || child.classList.contains(\"ts-chart__grid\") || child.classList.contains(\"ts-chart__marks\")\n );\n svg.insertBefore(layer, scene ?? null);\n } else {\n svg.append(layer);\n }\n}\nfunction findSvgFocusGuideLayer(svg, placement) {\n return [...svg.children].find(\n (child) => child.localName === \"g\" && child.getAttribute(\"data-ts-focus-guide-layer\") === placement\n );\n}\nexport {\n detachSvgFocusGuideLayers,\n ensureSvgFocusGuideLayer,\n removeSvgFocusGuideLayer,\n restoreSvgFocusGuideLayers\n};\n","import {\n createScenePointLookup,\n sceneNodeOwnedPoints\n} from \"./scene-point-ownership-internal.js\";\nimport { matchesFocusAnchor } from \"./focus-layer.js\";\nfunction resolveMarkStateScene(scene, focus, pointer = null) {\n if (!focus || !sceneHasMarkStates(scene.nodes)) return { scene };\n let transition;\n const transitions = {};\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 ? createScenePointLookup(state.points) : inheritedLookup;\n const candidates = points ? lookup ? sceneNodeOwnedPoints(node, points, lookup) : points : 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 for (const point of candidates) {\n transitions[point.markId] = mergeTransition(\n transitions[point.markId],\n resolved.transition\n );\n }\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 {\n scene: { ...scene, nodes },\n transition,\n ...Object.keys(transitions).length ? { transitions } : {}\n };\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) => matchesFocusAnchor(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) => matchesFocusAnchor(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 currentInset = output.inset ?? 0;\n let nextInset = Math.max(0, inset ?? currentInset);\n if (Number.isFinite(output.maxThickness) && (output.insetAxis === \"x\" || output.insetAxis === \"y\")) {\n const currentThickness = output.insetAxis === \"x\" ? output.width : output.height;\n const bandThickness = currentThickness + currentInset * 2;\n const requestedThickness = Math.max(0, bandThickness - nextInset * 2);\n const cappedThickness = Math.min(\n requestedThickness,\n Math.max(0, output.maxThickness)\n );\n nextInset = (bandThickness - cappedThickness) / 2;\n }\n const amount = nextInset - currentInset;\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}\nconst emptyPoints = [];\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 sceneHasMarkStates\n};\n","function 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}\nexport {\n resolveMarkStateTransition\n};\n","function svgClientToScene(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}\nexport {\n svgClientToScene\n};\n","import { reconcileChartSvg, reconcileChartSvgFragment } from \"./reconcile.js\";\nimport { renderChartSvg } from \"./svg.js\";\nimport { focusedNodeKeys, resolveFocusScene } from \"./focus-layer.js\";\nimport { resolveFocusGuides } from \"./focus-presentation.js\";\nimport { renderFocusGuideLayer } from \"./svg-renderer.js\";\nimport { renderFocusGuideLayerWithRenderer } from \"./svg-focus-guide-serializer.js\";\nimport {\n detachSvgFocusGuideLayers,\n ensureSvgFocusGuideLayer,\n removeSvgFocusGuideLayer,\n restoreSvgFocusGuideLayers\n} from \"./svg-focus-guide-layer.js\";\nimport { resolveMarkStateScene } from \"./mark-state.js\";\nimport { resolveMarkStateTransition } from \"./mark-state-transition.js\";\nimport { viewportTranslationChanged } from \"./scene-point-map.js\";\nimport { svgClientToScene } from \"./svg-coordinates.js\";\nfunction createSvgChartRenderer(renderSvg = renderChartSvg) {\n const renderer = {\n id: \"svg\",\n prerender: renderSvg,\n mount(container) {\n let cancelAnimation = () => {\n };\n let cancelFocusAnimation = () => {\n };\n let scene;\n let renderOptions;\n let stateTransition;\n let markStatePainted = false;\n let retargetedFocus = false;\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 const viewportMoved = Boolean(\n scene && viewportTranslationChanged(scene, nextScene)\n );\n cancelAnimation();\n cancelFocusAnimation();\n cancelFocusAnimation = () => {\n };\n const retainsFocusGuideLayers = Boolean(scene?.focusGuides?.length);\n const focusGuideLayers = retainsFocusGuideLayers ? detachSvgFocusGuideLayers(svgElement()) : {};\n cancelAnimation = reconcileChartSvg(\n container,\n renderSvg(nextScene, options),\n viewportMoved ? void 0 : options.animation\n );\n if (retainsFocusGuideLayers) {\n restoreSvgFocusGuideLayers(\n svgElement(),\n focusGuideLayers,\n (placement) => nextScene.focusGuides?.some(\n (guide) => guide.placement === placement\n ) === true\n );\n }\n scene = nextScene;\n renderOptions = options;\n stateTransition = void 0;\n markStatePainted = false;\n retargetedFocus = false;\n },\n clientToScene(scene2, clientX, clientY) {\n return svgClientToScene(svgElement(), scene2, clientX, clientY);\n },\n paintFocus(focus, pointer, cursor) {\n if (!scene || !renderOptions) return;\n const state = resolveMarkStateScene(scene, focus, pointer);\n const resolved = resolveFocusScene(state.scene, focus);\n const previousTransition = stateTransition;\n if (resolved.scene !== scene || markStatePainted || retargetedFocus || previousTransition) {\n cancelFocusAnimation();\n cancelFocusAnimation = () => {\n };\n const focusGuideLayers = detachSvgFocusGuideLayers(svgElement());\n cancelAnimation();\n cancelAnimation = reconcileChartSvg(\n container,\n renderSvg(resolved.scene, renderOptions),\n resolveMarkStateTransition(\n state.transition ?? previousTransition,\n container\n )\n );\n restoreSvgFocusGuideLayers(svgElement(), focusGuideLayers);\n }\n retargetedFocus = resolved.retargeted;\n markStatePainted = Boolean(focus && state.scene !== scene);\n stateTransition = focus ? state.transition ?? previousTransition : void 0;\n paintSvgFocus(svgElement(), resolved.scene, focus);\n cancelFocusAnimation();\n cancelFocusAnimation = paintSvgFocusGuides(\n svgElement(),\n resolved.scene,\n focus,\n pointer,\n cursor,\n renderOptions,\n renderSvg\n );\n return resolved.scene;\n },\n destroy() {\n cancelAnimation();\n cancelFocusAnimation();\n }\n };\n return surface;\n }\n };\n return renderer;\n}\nconst svgChartRenderer = createSvgChartRenderer();\nfunction paintSvgFocus(svg, scene, focus) {\n const sceneLayers = collectFocusLayers(scene.nodes);\n const elements = svg.querySelectorAll(\n \"[data-ts-focus-layer]:not([data-ts-focus-guide-layer])\"\n );\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 paintSvgFocusGuides(svg, scene, focus, pointer, cursor, renderOptions, renderSvg) {\n const presentation = resolveFocusGuides(scene, focus, pointer, cursor);\n const cancellations = [];\n for (const placement of [\"under\", \"over\"]) {\n if (!scene.focusGuides?.some((guide) => guide.placement === placement)) {\n removeSvgFocusGuideLayer(svg, placement);\n continue;\n }\n const layer = ensureSvgFocusGuideLayer(svg, placement);\n const nodes = presentation[placement];\n if (!nodes.length) {\n layer.setAttribute(\"visibility\", \"hidden\");\n continue;\n }\n const markup = renderSvg === renderChartSvg ? renderFocusGuideLayer(nodes, placement, renderOptions.idPrefix ?? \"\") : renderFocusGuideLayerWithRenderer(\n svg,\n scene,\n nodes,\n placement,\n renderOptions,\n renderSvg\n );\n cancellations.push(reconcileChartSvgFragment(layer, markup));\n }\n return () => cancellations.forEach((cancel) => cancel());\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, interaction }) => {\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, interaction });\n } : void 0\n };\n };\n const host = mountChartRenderer(\n container,\n rendererOptions(initialOptions),\n runtime\n );\n return {\n interaction: host.interaction,\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 thickness = resolveBarThickness(\n groupBandwidth,\n options.inset,\n options.maxThickness\n );\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 + thickness.inset;\n const y = Math.min(baselinePosition, valuePosition);\n const width = thickness.size;\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: thickness.inset,\n insetAxis: \"x\",\n ...thickness.maximum === void 0 ? {} : { maxThickness: thickness.maximum },\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 thickness = resolveBarThickness(\n groupBandwidth,\n options.inset,\n options.maxThickness\n );\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 + thickness.inset;\n const x = Math.min(baselinePosition, valuePosition);\n const width = Math.abs(baselinePosition - valuePosition);\n const height = thickness.size;\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: thickness.inset,\n insetAxis: \"y\",\n ...thickness.maximum === void 0 ? {} : { maxThickness: thickness.maximum },\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 resolveBarThickness(bandwidth, insetOption, maxThicknessOption) {\n const authoredInset = Math.max(0, insetOption ?? 0);\n const resolvedBandwidth = Math.max(0, bandwidth);\n const available = Math.max(0, resolvedBandwidth - authoredInset * 2);\n const constrained = Number.isFinite(maxThicknessOption);\n const maximum = constrained ? Math.max(0, maxThicknessOption) : available;\n const size = Math.min(available, maximum);\n return {\n inset: (resolvedBandwidth - size) / 2,\n maximum: constrained ? maximum : void 0,\n size\n };\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// ── DPUse Framework\nimport type { SanitizeHTML } from '@dpuse/dpuse-shared/component/module/presenter';\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// ── State ────────────────────────────────────────────────────────────────────────────────────────────────────────────\n\nconst templatePatchState: { patched: boolean; sanitizeHTML?: SanitizeHTML } = { patched: false };\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, sanitizeHTML: SanitizeHTML): TanStackChartsHandle {\n ensureTemplateInnerHTMLPatched(sanitizeHTML);\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\n// TanStack Charts' reconciler (reconcile.js / motion.js) has no Trusted Types awareness: every DOM update writes\n// generated markup into a throwaway <template> element's 'innerHTML' - a raw Trusted Types HTML sink. The host\n// app's page-wide 'default' Trusted Types policy is a deliberate fail-safe that blanks any HTML sink write it\n// doesn't recognize (see dpuse-app's main.ts), so those writes would otherwise silently render nothing.\n//\n// This patches only 'HTMLTemplateElement.prototype.innerHTML' (as an own property shadowing the inherited\n// 'Element.prototype' accessor, so no other element type on the page is affected) to route the value through the\n// caller-supplied sanitizeHTML before delegating to the real native setter. The <template> content here is\n// TanStack's own generated markup, not user-supplied HTML, but running it through the same sanitizer used\n// elsewhere keeps this consistent with the rest of the app's Trusted Types model rather than trusting it blindly.\nfunction ensureTemplateInnerHTMLPatched(sanitizeHTML: SanitizeHTML): void {\n templatePatchState.sanitizeHTML = sanitizeHTML;\n if (templatePatchState.patched) return;\n templatePatchState.patched = true;\n\n const native = Object.getOwnPropertyDescriptor(Element.prototype, 'innerHTML');\n // eslint-disable-next-line @typescript-eslint/unbound-method -- called below via '.call(this, ...)', so it never loses its 'this' binding.\n const nativeSet = native?.set;\n if (nativeSet == null) return;\n\n Object.defineProperty(HTMLTemplateElement.prototype, 'innerHTML', {\n ...native,\n set(value: string) {\n const sanitize = templatePatchState.sanitizeHTML ?? ((html: string): string => html);\n // eslint-disable-next-line unicorn/no-this-outside-of-class -- forwards the real element instance to the native setter; an arrow function couldn't receive a caller-supplied 'this'.\n nativeSet.call(this, sanitize(value) as string);\n }\n });\n}\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,29,30,31,32,33,34,35,36,37,38,39,40,41],"mappings":"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"}
|