@dpuse/dpuse-tool-d3-visualiser 0.0.47 → 0.0.51

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.
Files changed (49) hide show
  1. package/README.md +51 -51
  2. package/dist/{axis-DjmZ9QYe.js → axis-EpX3kBPs.js} +2 -8
  3. package/dist/{axis-DjmZ9QYe.js.map → axis-EpX3kBPs.js.map} +1 -1
  4. package/dist/{band-BFcwtSdG.js → band-p1VbTxZM.js} +2 -2
  5. package/dist/{band-BFcwtSdG.js.map → band-p1VbTxZM.js.map} +1 -1
  6. package/dist/{billboardJs-oaee80Fh.js → billboardJs-PR7IsnhE.js} +1970 -1666
  7. package/dist/billboardJs-PR7IsnhE.js.map +1 -0
  8. package/dist/{chordDiagram-CTDXv74T.js → chordDiagram-B1_nfC1m.js} +1031 -1023
  9. package/dist/chordDiagram-B1_nfC1m.js.map +1 -0
  10. package/dist/{d3BarChart-BQCPo1ub.js → d3BarChart-BC05DvRv.js} +7 -7
  11. package/dist/{d3BarChart-BQCPo1ub.js.map → d3BarChart-BC05DvRv.js.map} +1 -1
  12. package/dist/dpuse-tool-d3-visualiser.css +1 -1
  13. package/dist/dpuse-tool-d3-visualiser.es.js +8 -8
  14. package/dist/dpuse-tool-d3-visualiser.es.js.map +1 -1
  15. package/dist/{drag-DfL4uwqz.js → drag-Ieen6R0z.js} +4 -8
  16. package/dist/{drag-DfL4uwqz.js.map → drag-Ieen6R0z.js.map} +1 -1
  17. package/dist/{erdDiagram-C_Hobpls.js → erdDiagram-CtPeCq0f.js} +6 -12
  18. package/dist/{erdDiagram-C_Hobpls.js.map → erdDiagram-CtPeCq0f.js.map} +1 -1
  19. package/dist/{linear-C-jur735.js → linear-q6e-7JBm.js} +113 -167
  20. package/dist/linear-q6e-7JBm.js.map +1 -0
  21. package/dist/{networkDiagram-CcQxxJMB.js → networkDiagram-DZwLfY_R.js} +3 -3
  22. package/dist/{networkDiagram-CcQxxJMB.js.map → networkDiagram-DZwLfY_R.js.map} +1 -1
  23. package/dist/{observablePlot-BE2I-5e2.js → observablePlot-CGF3S2mL.js} +1270 -1270
  24. package/dist/{observablePlot-BE2I-5e2.js.map → observablePlot-CGF3S2mL.js.map} +1 -1
  25. package/dist/ordinal-BtWaYSDN.js +81 -0
  26. package/dist/ordinal-BtWaYSDN.js.map +1 -0
  27. package/dist/pow-Bp6eSqVs.js +76 -0
  28. package/dist/{pow-CxQV96gC.js.map → pow-Bp6eSqVs.js.map} +1 -1
  29. package/dist/{src-WDualLFV.js → src-Clugeype.js} +1 -1
  30. package/dist/{src-WDualLFV.js.map → src-Clugeype.js.map} +1 -1
  31. package/dist/{src-yL3ZdoR1.js → src-kLpf-6r0.js} +1 -1
  32. package/dist/{src-yL3ZdoR1.js.map → src-kLpf-6r0.js.map} +1 -1
  33. package/dist/{string-CnCj7THX.js → string-BOhFwaZD.js} +1 -2
  34. package/dist/{string-CnCj7THX.js.map → string-BOhFwaZD.js.map} +1 -1
  35. package/dist/tanStackCharts-D-ip-ZV-.js +4103 -0
  36. package/dist/tanStackCharts-D-ip-ZV-.js.map +1 -0
  37. package/dist/types/src/index.d.ts +1 -1
  38. package/dist/{src-Dl4_vNYa.js → utcTime-DLfrQXna.js} +432 -432
  39. package/dist/utcTime-DLfrQXna.js.map +1 -0
  40. package/package.json +15 -15
  41. package/dist/billboardJs-oaee80Fh.js.map +0 -1
  42. package/dist/chordDiagram-CTDXv74T.js.map +0 -1
  43. package/dist/linear-C-jur735.js.map +0 -1
  44. package/dist/ordinal-CDNZetSD.js +0 -28
  45. package/dist/ordinal-CDNZetSD.js.map +0 -1
  46. package/dist/pow-CxQV96gC.js +0 -84
  47. package/dist/src-Dl4_vNYa.js.map +0 -1
  48. package/dist/tanStackCharts-CqP0qIAr.js +0 -3492
  49. package/dist/tanStackCharts-CqP0qIAr.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tanStackCharts-D-ip-ZV-.js","names":["constant","orderNone","offsetNone","array","none","appearance","isChartValue","isFiniteNumber","isChartKey","isChartValue","isFiniteNumber","isChartKey","stackOffsetNone","stackOffsetExpand","stackOffsetSilhouette","stackOffsetWiggle","d3Stack","stackOrderInsideOut","isChartValue","isFiniteNumber","isChartKey","sameChartValue","finiteNonNegative","finiteSize","rectBounds","squaredDistanceToSegment","candidate","isReference","emptyPoints","stackOrderInsideOut","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/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/renderer-rect.js","../node_modules/@tanstack/charts/dist/rect-radius-internal.js","../node_modules/@tanstack/charts/dist/nearest.js","../node_modules/@tanstack/charts/dist/focus-coordinate-internal.js","../node_modules/@tanstack/charts/dist/materialized-channel-internal.js","../node_modules/@tanstack/charts/dist/scene-point-map.js","../node_modules/@tanstack/charts/dist/scene-source.js","../node_modules/@tanstack/charts/dist/default-focus-internal.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/markup-internal.js","../node_modules/@tanstack/charts/dist/svg-render-context-internal.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/rect-radius-state-internal.js","../node_modules/@tanstack/charts/dist/scene-motion-internal.js","../node_modules/@tanstack/charts/dist/stack-ends-internal.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","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 if (typeof scale.bandwidth === \"function\" || typeof scale.ticks !== \"function\") {\n const domain = [];\n const seen = /* @__PURE__ */ new Set();\n const dates = /* @__PURE__ */ new Set();\n for (const value of values) {\n if (!isChartValue(value)) continue;\n const date = value instanceof Date;\n const key = date ? value.getTime() : value;\n const identities = date ? dates : seen;\n if (identities.has(key)) continue;\n identities.add(key);\n domain.push(value);\n }\n return domain.length ? domain : void 0;\n }\n const observed = values.filter(isChartValue);\n if (!observed.length) return void 0;\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, renderer) {\n const normalizedInitialize = (context) => {\n const initialized = normalizeMarkInitialization(initialize(context));\n const withMotion = motion === void 0 || initialized.motion !== void 0 ? initialized : { ...initialized, motion };\n return renderer === void 0 ? withMotion : applyMarkRenderer(withMotion, renderer);\n };\n return {\n initialize: normalizedInitialize,\n ...motion === void 0 ? {} : { motion },\n ...renderer === void 0 ? {} : { renderer }\n };\n}\nfunction applyMarkRenderer(initialized, renderer) {\n const render = initialized.render;\n const resolveLayout = initialized.resolveLayout;\n return {\n ...initialized,\n render: (context) => applyMarkRendererToScene(render(context), renderer),\n ...resolveLayout ? {\n resolveLayout(context) {\n const resolved = resolveLayout(context);\n return {\n ...resolved,\n render: (renderContext) => applyMarkRendererToScene(\n resolved.render(renderContext),\n renderer\n )\n };\n }\n } : {}\n };\n}\nfunction applyMarkRendererToScene(scene, renderer) {\n return {\n ...scene,\n nodes: scene.nodes.map((node) => ({ ...node, renderer })),\n ...scene.focusGuides ? {\n focusGuides: scene.focusGuides.map((guide) => ({\n ...guide,\n renderer\n }))\n } : {}\n };\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 applyMarkRenderer,\n applyMarkRendererToScene,\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 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 : stackOffsetDivergingZeroAware;\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 stackOffsetDivergingZeroAware(series, order) {\n if (series.length === 0) return;\n const negativeSide = series.map((values) => {\n let negative = false;\n let positive = false;\n for (const [start, end] of values) {\n const value = end - start;\n if (value < 0) negative = true;\n else if (value > 0) positive = true;\n }\n return negative && !positive;\n });\n const positionCount = series[order[0]].length;\n for (let position = 0; position < positionCount; position += 1) {\n let positiveBaseline = 0;\n let negativeBaseline = 0;\n for (const seriesIndex of order) {\n const extent = series[seriesIndex][position];\n const value = extent[1] - extent[0];\n if (value > 0) {\n extent[0] = positiveBaseline;\n extent[1] = positiveBaseline += value;\n } else if (value < 0) {\n extent[1] = negativeBaseline;\n extent[0] = negativeBaseline += value;\n } else if (value === 0) {\n extent[0] = extent[1] = negativeSide[seriesIndex] ? negativeBaseline : positiveBaseline;\n } else {\n extent[0] = 0;\n extent[1] = value;\n }\n }\n }\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.channel === \"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 physicalTextAnchor(side, direction) {\n if (side === \"middle\") return \"middle\";\n const startsAtLeft = direction !== \"rtl\";\n if (side === \"left\") return startsAtLeft ? \"start\" : \"end\";\n return startsAtLeft ? \"end\" : \"start\";\n}\nfunction logicalTextAnchorOffset(width, anchor, direction) {\n if (anchor === \"middle\") return -width / 2;\n const startsAtLeft = direction !== \"rtl\";\n return anchor === \"start\" === startsAtLeft ? 0 : -width;\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 = logicalTextAnchorOffset(width, style.anchor, style.direction);\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 const strokeMargin = { top, right, bottom, left };\n includeGuideStrokeMargins(strokeMargin, axes, plot);\n return strokeMargin;\n}\nfunction includeGuideStrokeMargins(margin, guides, plot) {\n visitRules(guides, 0, 0, (rule, translateX, translateY) => {\n const style = rule.style;\n const extendsGeometry = style?.strokeWidth !== void 0 || style?.lineCap !== void 0 && style.lineCap !== \"butt\";\n if (!extendsGeometry || style?.stroke === \"none\") return;\n const strokeWidth = style?.strokeWidth ?? 1;\n if (!Number.isFinite(strokeWidth) || strokeWidth <= 0) return;\n const halfWidth = strokeWidth / 2;\n const x1 = rule.x1 + translateX;\n const x2 = rule.x2 + translateX;\n const y1 = rule.y1 + translateY;\n const y2 = rule.y2 + translateY;\n const dx = x2 - x1;\n const dy = y2 - y1;\n const length = Math.hypot(dx, dy);\n const unitX = length > 0 ? dx / length : 0;\n const unitY = length > 0 ? dy / length : 0;\n const cap = style?.lineCap && style.lineCap !== \"butt\" ? halfWidth : 0;\n const extendX = Math.abs(unitY) * halfWidth + Math.abs(unitX) * cap;\n const extendY = Math.abs(unitX) * halfWidth + Math.abs(unitY) * cap;\n const left = Math.min(x1, x2) - extendX;\n const right = Math.max(x1, x2) + extendX;\n const top = Math.min(y1, y2) - extendY;\n const bottom = Math.max(y1, y2) + extendY;\n margin.top = Math.max(margin.top, plot.y - top);\n margin.right = Math.max(margin.right, right - plot.x - plot.width);\n margin.bottom = Math.max(margin.bottom, bottom - plot.y - plot.height);\n margin.left = Math.max(margin.left, plot.x - left);\n });\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 visitRules(node, translateX, translateY, visit) {\n if (node.kind === \"rule\") {\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 visitRules(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 includeGuideStrokeMargins,\n logicalTextAnchorOffset,\n measureSceneLabelBounds,\n physicalTextAnchor,\n resolveGuideMargins,\n withChartTextTypography\n};\n","function resolveRectCornerRadii(cornerRadii, width, height) {\n const [topLeft, topRight, bottomRight, bottomLeft] = cornerRadii ?? [\n 0,\n 0,\n 0,\n 0\n ];\n const resolved = [\n validRadius(topLeft),\n validRadius(topRight),\n validRadius(bottomRight),\n validRadius(bottomLeft)\n ];\n const availableWidth = finiteSize(width);\n const availableHeight = finiteSize(height);\n const scale = Math.min(\n 1,\n edgeScale(availableWidth, resolved[0] + resolved[1]),\n edgeScale(availableWidth, resolved[3] + resolved[2]),\n edgeScale(availableHeight, resolved[0] + resolved[3]),\n edgeScale(availableHeight, resolved[1] + resolved[2])\n );\n return scale === 1 ? resolved : [\n resolved[0] * scale,\n resolved[1] * scale,\n resolved[2] * scale,\n resolved[3] * scale\n ];\n}\nfunction rectCornerRadiiPath(x, y, width, height, cornerRadii) {\n const bounds = rectBounds(x, y, width, height);\n const [topLeft, topRight, bottomRight, bottomLeft] = resolveRectCornerRadii(\n cornerRadii,\n bounds.width,\n bounds.height\n );\n const left = bounds.x;\n const top = bounds.y;\n const right = left + bounds.width;\n const bottom = top + bounds.height;\n return [\n `M${pathNumber(left + topLeft)},${pathNumber(top)}`,\n `H${pathNumber(right - topRight)}`,\n `A${pathNumber(topRight)},${pathNumber(topRight)} 0 0 1 ${pathNumber(right)},${pathNumber(top + topRight)}`,\n `V${pathNumber(bottom - bottomRight)}`,\n `A${pathNumber(bottomRight)},${pathNumber(bottomRight)} 0 0 1 ${pathNumber(right - bottomRight)},${pathNumber(bottom)}`,\n `H${pathNumber(left + bottomLeft)}`,\n `A${pathNumber(bottomLeft)},${pathNumber(bottomLeft)} 0 0 1 ${pathNumber(left)},${pathNumber(bottom - bottomLeft)}`,\n `V${pathNumber(top + topLeft)}`,\n `A${pathNumber(topLeft)},${pathNumber(topLeft)} 0 0 1 ${pathNumber(left + topLeft)},${pathNumber(top)}`,\n \"Z\"\n ].join(\"\");\n}\nfunction validRadius(value) {\n return Number.isFinite(value) && value > 0 ? value : 0;\n}\nfunction finiteSize(value) {\n return Number.isFinite(value) ? Math.abs(value) : 0;\n}\nfunction edgeScale(available, requested) {\n return requested === 0 ? 1 : available / requested;\n}\nfunction rectBounds(x, y, width, height) {\n const right = x + width;\n const bottom = y + height;\n return {\n x: Math.min(x, right),\n y: Math.min(y, bottom),\n width: Math.abs(width),\n height: Math.abs(height)\n };\n}\nfunction pathNumber(value) {\n return String(Math.round(value * 100) / 100);\n}\nexport {\n rectCornerRadiiPath,\n resolveRectCornerRadii\n};\n","import { resolveRectCornerRadii } from \"./renderer-rect.js\";\nimport { rectCornerRadiiPath, resolveRectCornerRadii as resolveRectCornerRadii2 } from \"./renderer-rect.js\";\nconst fullTurn = Math.PI * 2;\nfunction containsRectCornerRadii(x, y, width, height, cornerRadii, pointX, pointY) {\n const bounds = rectBounds(x, y, width, height);\n const left = bounds.x;\n const top = bounds.y;\n const right = left + bounds.width;\n const bottom = top + bounds.height;\n if (!(pointX >= left && pointX <= right && pointY >= top && pointY <= bottom)) {\n return false;\n }\n const [topLeft, topRight, bottomRight, bottomLeft] = resolveRectCornerRadii(\n cornerRadii,\n bounds.width,\n bounds.height\n );\n if (pointX < left + topLeft && pointY < top + topLeft) {\n return insideCircle(pointX, pointY, left + topLeft, top + topLeft, topLeft);\n }\n if (pointX > right - topRight && pointY < top + topRight) {\n return insideCircle(\n pointX,\n pointY,\n right - topRight,\n top + topRight,\n topRight\n );\n }\n if (pointX > right - bottomRight && pointY > bottom - bottomRight) {\n return insideCircle(\n pointX,\n pointY,\n right - bottomRight,\n bottom - bottomRight,\n bottomRight\n );\n }\n if (pointX < left + bottomLeft && pointY > bottom - bottomLeft) {\n return insideCircle(\n pointX,\n pointY,\n left + bottomLeft,\n bottom - bottomLeft,\n bottomLeft\n );\n }\n return true;\n}\nfunction squaredDistanceToRectCornerRadii(x, y, width, height, cornerRadii, pointX, pointY) {\n if (containsRectCornerRadii(x, y, width, height, cornerRadii, pointX, pointY)) {\n return 0;\n }\n const bounds = rectBounds(x, y, width, height);\n const left = bounds.x;\n const top = bounds.y;\n const right = left + bounds.width;\n const bottom = top + bounds.height;\n const [topLeft, topRight, bottomRight, bottomLeft] = resolveRectCornerRadii(\n cornerRadii,\n bounds.width,\n bounds.height\n );\n return Math.min(\n squaredDistanceToSegment(\n left + topLeft,\n top,\n right - topRight,\n top,\n pointX,\n pointY\n ),\n squaredDistanceToSegment(\n right,\n top + topRight,\n right,\n bottom - bottomRight,\n pointX,\n pointY\n ),\n squaredDistanceToSegment(\n right - bottomRight,\n bottom,\n left + bottomLeft,\n bottom,\n pointX,\n pointY\n ),\n squaredDistanceToSegment(\n left,\n bottom - bottomLeft,\n left,\n top + topLeft,\n pointX,\n pointY\n ),\n squaredDistanceToArc(\n pointX,\n pointY,\n left + topLeft,\n top + topLeft,\n topLeft,\n Math.PI,\n Math.PI * 1.5\n ),\n squaredDistanceToArc(\n pointX,\n pointY,\n right - topRight,\n top + topRight,\n topRight,\n Math.PI * 1.5,\n fullTurn\n ),\n squaredDistanceToArc(\n pointX,\n pointY,\n right - bottomRight,\n bottom - bottomRight,\n bottomRight,\n 0,\n Math.PI * 0.5\n ),\n squaredDistanceToArc(\n pointX,\n pointY,\n left + bottomLeft,\n bottom - bottomLeft,\n bottomLeft,\n Math.PI * 0.5,\n Math.PI\n )\n );\n}\nfunction rectBounds(x, y, width, height) {\n const right = x + width;\n const bottom = y + height;\n return {\n x: Math.min(x, right),\n y: Math.min(y, bottom),\n width: Math.abs(width),\n height: Math.abs(height)\n };\n}\nfunction insideCircle(x, y, centerX, centerY, radius) {\n const dx = x - centerX;\n const dy = y - centerY;\n return dx * dx + dy * dy <= radius * radius;\n}\nfunction squaredDistanceToArc(x, y, centerX, centerY, radius, startAngle, endAngle) {\n if (radius === 0) return squaredDistance(x, y, centerX, centerY);\n let angle = Math.atan2(y - centerY, x - centerX);\n if (angle < 0) angle += fullTurn;\n if (angle >= startAngle && angle <= endAngle) {\n const centerDistance = Math.hypot(x - centerX, y - centerY);\n return (centerDistance - radius) ** 2;\n }\n return Math.min(\n squaredDistance(\n x,\n y,\n centerX + Math.cos(startAngle) * radius,\n centerY + Math.sin(startAngle) * radius\n ),\n squaredDistance(\n x,\n y,\n centerX + Math.cos(endAngle) * radius,\n centerY + Math.sin(endAngle) * radius\n )\n );\n}\nfunction squaredDistanceToSegment(x1, y1, x2, y2, x, y) {\n const dx = x2 - x1;\n const dy = y2 - y1;\n const lengthSquared = dx * dx + dy * dy;\n if (lengthSquared === 0) return squaredDistance(x, y, x1, y1);\n const amount = Math.max(\n 0,\n Math.min(1, ((x - x1) * dx + (y - y1) * dy) / lengthSquared)\n );\n return squaredDistance(x, y, x1 + amount * dx, y1 + amount * dy);\n}\nfunction squaredDistance(x1, y1, x2, y2) {\n return (x1 - x2) ** 2 + (y1 - y2) ** 2;\n}\nexport {\n containsRectCornerRadii,\n rectCornerRadiiPath,\n resolveRectCornerRadii2 as resolveRectCornerRadii,\n squaredDistanceToRectCornerRadii\n};\n","import {\n containsRectCornerRadii,\n squaredDistanceToRectCornerRadii\n} from \"./rect-radius-internal.js\";\nconst 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 node.cornerRadii === void 0 ? containsRoundedRect(node, localX, localY) : containsRectCornerRadii(\n node.x,\n node.y,\n node.width,\n node.height,\n node.cornerRadii,\n localX,\n localY\n );\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.cornerRadii !== void 0 ? squaredDistanceToRectCornerRadii(\n node.x,\n node.y,\n node.width,\n node.height,\n node.cornerRadii,\n localX,\n localY\n ) : 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","const mappedCoordinates = /* @__PURE__ */ new WeakMap();\nfunction setMappedFocusCoordinate(point, axis, coordinate) {\n const current = mappedCoordinates.get(point);\n if (current) {\n current[axis] = coordinate;\n } else {\n mappedCoordinates.set(point, { [axis]: coordinate });\n }\n}\nfunction mappedFocusCoordinate(point, axis) {\n return mappedCoordinates.get(point)?.[axis] ?? point[axis];\n}\nexport {\n mappedFocusCoordinate,\n setMappedFocusCoordinate\n};\n","const positionChannel = /* @__PURE__ */ Symbol();\nfunction readMaterializedPositionChannel(name, channel) {\n if (name === \"x\" || name === \"y\") return name;\n return channel[positionChannel];\n}\nfunction preserveMaterializedPositionChannel(name, channel) {\n const position = readMaterializedPositionChannel(name, channel);\n if (position === void 0) return channel;\n if (channel[positionChannel] === position) {\n return channel;\n }\n const positioned = {\n ...channel,\n [positionChannel]: position\n };\n return positioned;\n}\nexport {\n preserveMaterializedPositionChannel,\n readMaterializedPositionChannel\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","const defaultFocusLayer = /* @__PURE__ */ Symbol(\"default-focus-layer\");\nfunction markDefaultFocusLayer(layer) {\n if (layer.focus) Object.assign(layer.focus, { [defaultFocusLayer]: true });\n return layer;\n}\nfunction isDefaultFocusLayer(layer) {\n return layer.focus?.[defaultFocusLayer] === true;\n}\nexport {\n isDefaultFocusLayer,\n markDefaultFocusLayer\n};\n","import { createColorScale, valueKey } from \"./scales.js\";\nimport { resolveConfiguredScale } from \"./configured-scale.js\";\nimport {\n includeGuideStrokeMargins,\n measureSceneLabelBounds,\n physicalTextAnchor,\n withChartTextTypography\n} from \"./guide-layout.js\";\nimport { nearestScenePoint } from \"./nearest.js\";\nimport { setMappedFocusCoordinate } from \"./focus-coordinate-internal.js\";\nimport { readMaterializedPositionChannel } from \"./materialized-channel-internal.js\";\nimport { mapScenePointReferences } from \"./scene-point-map.js\";\nimport { chartSceneSource } from \"./scene-source.js\";\nimport { markDefaultFocusLayer } from \"./default-focus-internal.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) {\n return typeof definition === \"function\" ? { chart: definition, ...options } : { ...definition, ...options };\n }\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 scaleChannels = collectPositionScaleChannels(initialized);\n const scaleDefinitions = resolveScaleDefinitions(definition, scaleChannels);\n const resolvedLayout = resolveSceneLayout(\n definition,\n initialized,\n width,\n height,\n theme,\n scaleDefinitions,\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 positionScales,\n scaleGuides,\n gridScales\n } = resolvedLayout;\n const markEntries = [];\n const defaultFocusEntries = [];\n const points = [];\n const focusGuides = [];\n const firstBaseMarkIndex = marks.findIndex(\n (mark) => !mark.focus && !mark.focusGuideOnly\n );\n marks.forEach((mark, markIndex) => {\n const translateX = markViewportTranslation(\n mark,\n \"x\",\n positionScales,\n scales\n );\n const translateY = markViewportTranslation(\n mark,\n \"y\",\n positionScales,\n scales\n );\n const viewportX = translateX !== void 0;\n const viewportY = translateY !== void 0;\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 + (translateX ?? 0),\n y: point.y + (translateY ?? 0)\n } : point;\n registerMappedFocusCoordinates(\n presented,\n mark,\n scales,\n translateX,\n translateY\n );\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 markId: mark.id,\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({\n key: mark.id,\n nodes: entryNodes,\n translateX,\n translateY\n });\n });\n const markNodes = arrangeViewportMarkNodes(markEntries, chart);\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 (gridScales.length) {\n nodes.unshift(createGrid(chart, gridScales, theme));\n }\n if (scaleGuides.length) {\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 layout: layoutOptions,\n width,\n height,\n direction: layoutOptions.typography?.direction\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 const focusRing = definition.focusRing ?? theme.focusRing;\n if (definition.focus !== false && focusRing !== false && points.length) {\n const focusRingOptions = typeof focusRing === \"object\" ? focusRing : void 0;\n const radius = finiteNonNegative(focusRingOptions?.radius, 5);\n const fill = focusRingOptions?.fill ?? \"var(--ts-chart-focus-fill, Canvas)\";\n const stroke = focusRingOptions?.stroke;\n const strokeWidth = finiteNonNegative(focusRingOptions?.strokeWidth, 2.5);\n for (const entry of defaultFocusEntries) {\n nodes.push(\n markDefaultFocusLayer({\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,\n style: {\n fill,\n stroke: stroke ?? point.color,\n strokeWidth\n }\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 ...layoutOptions.typography?.direction === void 0 ? {} : { direction: layoutOptions.typography.direction },\n ...controls.length ? { controls } : {},\n ...focusGuides.length ? { focusGuides } : {},\n [chartSceneSource]: [definition, initialized]\n };\n}\nfunction registerMappedFocusCoordinates(point, mark, scales, translateX, translateY) {\n register(\"x\", point.xValue, point.x, translateX);\n register(\"y\", point.yValue, point.y, translateY);\n function register(axis, value, coordinate, translate) {\n const scaleId = mark.channels[axis]?.scale;\n const scale = scaleId === void 0 ? void 0 : scales[scaleId];\n if (!scale || scale.type === \"none\") return;\n const mapped = scale.map(value) + (translate ?? 0);\n if (Number.isFinite(mapped) && mapped !== coordinate) {\n setMappedFocusCoordinate(point, axis, mapped);\n }\n }\n}\nfunction markViewportTranslation(mark, channel, positionScales, scales) {\n const ownership = mark.viewport?.[channel];\n if (ownership === \"fixed\") return void 0;\n for (const positionScale of positionScales) {\n if (positionScale.channel === channel && positionScale.scale.viewport && Object.values(mark.channels).some(\n (materialized) => materialized.scale === positionScale.id\n )) {\n return positionScale.scale.viewport.translate;\n }\n }\n return ownership === \"content\" ? scales[channel]?.viewport?.translate : void 0;\n}\nfunction markUsesAnyViewport(mark, positionScales) {\n return [\"x\", \"y\"].some(\n (channel) => positionScales.some(\n (positionScale) => positionScale.channel === channel && positionScale.scale.viewport && mark.viewport?.[channel] !== \"fixed\" && (mark.viewport?.[channel] === \"content\" || Object.values(mark.channels).some(\n (materialized) => materialized.scale === positionScale.id\n ))\n )\n );\n}\nfunction arrangeViewportMarkNodes(entries, chart) {\n return entries.flatMap((entry) => {\n if (entry.translateX === void 0 && entry.translateY === void 0) {\n return [...entry.nodes];\n }\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.translateX === void 0 ? {} : { translateX: entry.translateX },\n ...entry.translateY === void 0 ? {} : { translateY: entry.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 (!Object.values(scene.scales).some((scale) => scale.viewport))\n 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 [\"x\", \"y\"].some((axis) => {\n const ownership = mark.viewport?.[axis];\n if (ownership === \"fixed\") return false;\n if (ownership === \"content\" && scene.scales[axis]?.viewport) return true;\n return Object.entries(mark.channels).some(\n ([channelName, channel]) => channelName === axis && channel.scale !== void 0 && scene.scales[channel.scale]?.viewport !== void 0\n );\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}\nfunction collectPositionScaleChannels(marks) {\n const collected = /* @__PURE__ */ new Map();\n for (const mark of marks) {\n for (const [channelName, channel] of Object.entries(mark.channels)) {\n const scaleId = channel.scale;\n if (scaleId === void 0) continue;\n const positionChannel = readMaterializedPositionChannel(\n channelName,\n channel\n );\n if (scaleId === \"color\") {\n if (positionChannel) {\n throw new TypeError('Position scales cannot use reserved ID \"color\"');\n }\n continue;\n }\n const current = collected.get(scaleId) ?? {\n values: [],\n includeZero: false,\n materialized: false\n };\n if (positionChannel && current.channel && current.channel !== positionChannel) {\n throw new TypeError(\n `Chart scale \"${scaleId}\" cannot materialize both x and y channels`\n );\n }\n current.channel ??= positionChannel;\n current.materialized ||= !mark.focusGuideOnly;\n current.includeZero ||= channel.includeZero ?? false;\n for (const value of channel.values) current.values.push(value);\n collected.set(scaleId, current);\n }\n }\n return collected;\n}\nfunction resolveScaleDefinitions(definition, collected) {\n const scales = definition.scales;\n if (!scales || !Object.hasOwn(scales, \"x\") || !Object.hasOwn(scales, \"y\")) {\n throw new TypeError(\"Chart scales must define reserved `x` and `y` entries\");\n }\n for (const scaleId of collected.keys()) {\n if (!Object.hasOwn(scales, scaleId)) {\n throw new TypeError(\n `Chart scale \"${scaleId}\" is used by a mark but is not configured`\n );\n }\n }\n return Object.entries(scales).map(([id, options]) => {\n if (id === \"color\") {\n throw new TypeError('Position scales cannot use reserved ID \"color\"');\n }\n const channels = collected.get(id) ?? {\n values: [],\n includeZero: false,\n materialized: false\n };\n const reservedChannel = id === \"x\" || id === \"y\" ? id : void 0;\n const configuredChannel = options?.channel;\n if (!reservedChannel && options !== null && !configuredChannel) {\n throw new TypeError(\n `Named chart scale \"${id}\" requires channel: \"x\" or channel: \"y\"`\n );\n }\n const channel = reservedChannel ?? configuredChannel ?? channels.channel ?? \"x\";\n if (configuredChannel && configuredChannel !== channel || channels.channel && channels.channel !== channel) {\n throw new TypeError(\n `Chart scale \"${id}\" is configured for ${channel} but is used as ${channels.channel ?? configuredChannel}`\n );\n }\n const side = options?.side ?? (channel === \"x\" ? \"bottom\" : \"left\");\n if (channel === \"x\" && side !== \"top\" && side !== \"bottom\" || channel === \"y\" && side !== \"left\" && side !== \"right\") {\n throw new TypeError(\n `Chart scale \"${id}\" uses ${channel} and cannot render an axis on the ${side} side`\n );\n }\n return { id, channel, side, options, channels };\n });\n}\nconst automaticGuideInset = 4;\nconst layoutPassLimit = 4;\nconst layoutTolerance = 0.25;\nfunction resolveSceneLayout(definition, initialized, width, height, theme, scaleDefinitions, resolveScale, layout) {\n const locks = resolveMarginLocks(definition.margin);\n const hasGuides = definition.guides !== false && scaleDefinitions.some(hasScaleGuide);\n const inset = hasGuides ? 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 scales = {};\n const resolvedScales = [];\n for (const scaleDefinition of scaleDefinitions) {\n const { id, channel, options, channels } = scaleDefinition;\n const length = channel === \"x\" ? chart.width : chart.height;\n const tickCount = resolveTickCount(\n options,\n length,\n channel === \"x\" ? 92 : 48,\n channel === \"x\" ? 8 : 7\n );\n const range = channel === \"x\" ? [chart.x, chart.x + chart.width] : [chart.y + chart.height, chart.y];\n const scale = options == null ? createUnusedScale(id, channels.materialized, options) : resolveScale({\n id,\n channel,\n values: channels.values,\n range,\n options,\n tickCount,\n includeZero: channels.includeZero\n });\n scales[id] = scale;\n resolvedScales.push({ ...scaleDefinition, scale });\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 layout,\n width,\n height,\n direction: layout.typography?.direction\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 scaleGuides = definition.guides === false ? [] : resolvedScales.filter(hasScaleGuide);\n const gridScales = definition.guides === false ? [] : resolvedScales.filter(hasScaleGrid);\n const resolvedAxes = createAxes(\n chart,\n scaleGuides,\n theme,\n width,\n layout.measureText,\n layout.typography?.direction === \"rtl\"\n );\n if (gridScales.length) {\n includeGuideStrokeMargins(\n resolvedAxes.margin,\n createGrid(chart, gridScales, theme),\n chart\n );\n }\n return {\n margin: margin2,\n chart,\n scales,\n axes: resolvedAxes.axes,\n positionScales: resolvedScales,\n scaleGuides,\n gridScales,\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 layout,\n width,\n height,\n direction: layout.typography?.direction\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 markUsesAnyViewport(mark, resolved2.positionScales)\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 hasScaleGuide(scale) {\n return scale.options != null && scale.options.axis !== false;\n}\nfunction hasScaleGrid(scale) {\n return scale.options != null && Boolean(scale.options.grid);\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 includeBoundsMargin(margin, chart, bounds);\n return bounds;\n}\nfunction includeBoundsMargin(margin, chart, 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}\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 finiteNonNegative(value, fallback) {\n return value !== void 0 && Number.isFinite(value) && value >= 0 ? value : fallback;\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, guides, theme) {\n const children = [];\n for (const guide of guides) {\n if (!guide.options?.grid) continue;\n const style = guideLineStyle(guide.options.grid);\n for (const tick of guide.scale.ticks) {\n const key = `${guide.id}-grid:${valueKey(tick.value)}`;\n children.push(\n guide.channel === \"x\" ? {\n kind: \"rule\",\n key,\n x1: tick.position,\n x2: tick.position,\n y1: chart.y,\n y2: chart.y + chart.height,\n ...style ? { style } : {}\n } : {\n kind: \"rule\",\n key,\n x1: chart.x,\n x2: chart.x + chart.width,\n y1: tick.position,\n y2: tick.position,\n ...style ? { style } : {}\n }\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, guides, theme, width, measureText, rightToLeft = false) {\n const children = [];\n const inset = guides.length ? automaticGuideInset : 0;\n const margin = uniformMargin(inset);\n const offsets = {\n top: 0,\n right: 0,\n bottom: 0,\n left: 0\n };\n const guideCounts = {\n top: 0,\n right: 0,\n bottom: 0,\n left: 0\n };\n const chartRight = chart.x + chart.width;\n const chartBottom = chart.y + chart.height;\n for (const guide of guides) {\n const presentation = axisPresentation(guide.options);\n const lineHalfWidth = guideLineHalfWidth(presentation?.line);\n const offset = offsets[guide.side] + (guideCounts[guide.side] > 0 ? lineHalfWidth : 0);\n margin[guide.side] = Math.max(\n margin[guide.side],\n offset + automaticGuideInset\n );\n const axisPosition = guide.side === \"top\" ? chart.y - offset : guide.side === \"right\" ? chartRight + offset : guide.side === \"bottom\" ? chartBottom + offset : chart.x - offset;\n let outward = axisPosition;\n const includeOutward = (bounds) => {\n includeBoundsMargin(margin, chart, bounds);\n if (guide.side === \"top\") outward = Math.min(outward, bounds.y);\n else if (guide.side === \"right\") {\n outward = Math.max(outward, bounds.x + bounds.width);\n } else if (guide.side === \"bottom\") {\n outward = Math.max(outward, bounds.y + bounds.height);\n } else outward = Math.min(outward, bounds.x);\n };\n const includeCoordinate = (coordinate) => {\n if (guide.side === \"top\" || guide.side === \"left\") {\n outward = Math.min(outward, coordinate);\n } else {\n outward = Math.max(outward, coordinate);\n }\n };\n if (guide.channel === \"x\") {\n renderXAxis(guide, axisPosition, includeOutward, includeCoordinate);\n } else {\n renderYAxis(guide, axisPosition, includeOutward, includeCoordinate);\n }\n const distance = guide.side === \"top\" ? chart.y - outward : guide.side === \"right\" ? outward - chartRight : guide.side === \"bottom\" ? outward - chartBottom : chart.x - outward;\n offsets[guide.side] = Math.max(offset, distance) + 8;\n guideCounts[guide.side] += 1;\n }\n const axes = {\n kind: \"group\",\n key: \"axes\",\n className: \"ts-chart__axes\",\n ariaHidden: true,\n children\n };\n includeGuideStrokeMargins(margin, axes, chart);\n return { axes, margin };\n function renderXAxis(guide, axisY, includeOutward, includeCoordinate) {\n const presentation = axisPresentation(guide.options);\n const bottom = guide.side === \"bottom\";\n const direction = bottom ? 1 : -1;\n if (presentation?.line !== false) {\n children.push({\n kind: \"rule\",\n key: `${guide.id}-axis`,\n x1: chart.x,\n x2: chartRight,\n y1: axisY,\n y2: axisY,\n style: axisStyle(presentation?.line)\n });\n includeCoordinate(\n axisY + direction * guideLineHalfWidth(presentation?.line)\n );\n }\n const ticks = presentation?.ticks === false ? [] : guide.scale.ticks;\n const tickSize = finiteMargin(\n presentation?.ticks === false ? 0 : presentation?.ticks?.size ?? 4\n );\n const tickPadding = finiteMargin(\n presentation?.ticks === false ? 0 : presentation?.ticks?.padding ?? 4\n );\n const tickLabels = tickLabelPresentation(presentation);\n const candidates = tickLabels === false ? [] : createTickLabelCandidates(\n guide,\n withKeptTicks(guide.scale, guide.options, tickLabels),\n axisY,\n tickSize,\n tickPadding,\n tickLabels,\n width,\n theme,\n measureText,\n rightToLeft\n );\n const visibleLabels = tickLabels === false ? [] : thinTickLabels(candidates, tickLabels, guide.scale.type === \"band\");\n let tickOuter = axisY;\n for (const tick of ticks) {\n if (tickSize <= 0) continue;\n const tickEnd = axisY + direction * tickSize;\n includeCoordinate(tickEnd);\n tickOuter = bottom ? Math.max(tickOuter, tickEnd) : Math.min(tickOuter, tickEnd);\n children.push({\n kind: \"rule\",\n key: `${guide.id}-tick-rule:${valueKey(tick.value)}`,\n x1: tick.position,\n x2: tick.position,\n y1: axisY,\n y2: tickEnd,\n style: axisStyle()\n });\n }\n for (const candidate of visibleLabels) {\n includeOutward(candidate.bounds);\n tickOuter = bottom ? Math.max(tickOuter, candidate.bounds.y + candidate.bounds.height) : Math.min(tickOuter, candidate.bounds.y);\n children.push(candidate.label);\n }\n const axisLabel = presentation?.label;\n const labelText = typeof axisLabel === \"string\" ? axisLabel : axisLabel?.text;\n if (!labelText) return;\n const labelOptions = typeof axisLabel === \"object\" ? axisLabel : void 0;\n const labelOffset = labelOptions?.offset ?? \"auto\";\n const explicitOffset = labelOffset !== \"auto\";\n const label = {\n kind: \"label\",\n key: `${guide.id}-label`,\n x: chart.x + chart.width / 2,\n y: explicitOffset ? axisY + direction * Math.max(0, finiteMargin(labelOffset)) : tickOuter + direction * 8,\n text: labelText,\n anchor: \"middle\",\n baseline: bottom && !explicitOffset ? \"hanging\" : \"auto\",\n fontSize: labelOptions?.fontSize ?? (width < 360 ? 10 : 11),\n fontWeight: labelOptions?.fontWeight ?? 600,\n style: {\n fill: labelOptions?.fill ?? theme.foreground,\n ...labelOptions?.opacity === void 0 ? { fillOpacity: 0.76 } : { opacity: labelOptions.opacity }\n }\n };\n includeOutward(measureSceneLabelBounds(label, measureText));\n children.push(label);\n }\n function renderYAxis(guide, axisX, includeOutward, includeCoordinate) {\n const presentation = axisPresentation(guide.options);\n const right = guide.side === \"right\";\n const direction = right ? 1 : -1;\n if (presentation?.line !== false) {\n children.push({\n kind: \"rule\",\n key: `${guide.id}-axis`,\n x1: axisX,\n x2: axisX,\n y1: chart.y,\n y2: chartBottom,\n style: axisStyle(presentation?.line)\n });\n includeCoordinate(\n axisX + direction * guideLineHalfWidth(presentation?.line)\n );\n }\n const ticks = presentation?.ticks === false ? [] : guide.scale.ticks;\n const tickSize = finiteMargin(\n presentation?.ticks === false ? 0 : presentation?.ticks?.size ?? 4\n );\n const tickPadding = finiteMargin(\n presentation?.ticks === false ? 0 : presentation?.ticks?.padding ?? 4\n );\n const tickLabels = tickLabelPresentation(presentation);\n const candidates = tickLabels === false ? [] : createTickLabelCandidates(\n guide,\n withKeptTicks(guide.scale, guide.options, tickLabels),\n axisX,\n tickSize,\n tickPadding,\n tickLabels,\n width,\n theme,\n measureText,\n rightToLeft\n );\n const visibleLabels = tickLabels === false ? [] : thinTickLabels(candidates, tickLabels, false);\n let tickOuter = axisX;\n for (const tick of ticks) {\n if (tickSize <= 0) continue;\n const tickEnd = axisX + direction * tickSize;\n includeCoordinate(tickEnd);\n tickOuter = right ? Math.max(tickOuter, tickEnd) : Math.min(tickOuter, tickEnd);\n children.push({\n kind: \"rule\",\n key: `${guide.id}-tick-rule:${valueKey(tick.value)}`,\n x1: axisX,\n x2: tickEnd,\n y1: tick.position,\n y2: tick.position,\n style: axisStyle()\n });\n }\n for (const candidate of visibleLabels) {\n includeOutward(candidate.bounds);\n tickOuter = right ? Math.max(tickOuter, candidate.bounds.x + candidate.bounds.width) : Math.min(tickOuter, candidate.bounds.x);\n children.push(candidate.label);\n }\n const axisLabel = presentation?.label;\n const labelText = typeof axisLabel === \"string\" ? axisLabel : axisLabel?.text;\n if (!labelText) return;\n const labelOptions = typeof axisLabel === \"object\" ? axisLabel : void 0;\n const label = {\n kind: \"label\",\n key: `${guide.id}-label`,\n x: axisX,\n y: chart.y + chart.height / 2,\n text: labelText,\n anchor: \"middle\",\n baseline: \"middle\",\n rotate: right ? 90 : -90,\n fontSize: labelOptions?.fontSize ?? 11,\n fontWeight: labelOptions?.fontWeight ?? 600,\n style: {\n fill: labelOptions?.fill ?? theme.foreground,\n ...labelOptions?.opacity === void 0 ? { fillOpacity: 0.76 } : { opacity: labelOptions.opacity }\n }\n };\n const labelOffset = labelOptions?.offset ?? \"auto\";\n if (labelOffset !== \"auto\") {\n label.x = axisX + direction * Math.max(0, finiteMargin(labelOffset));\n } else {\n const localBounds = measureSceneLabelBounds(\n { ...label, x: 0, y: 0 },\n measureText\n );\n label.x = right ? tickOuter + 8 - localBounds.x : tickOuter - 8 - (localBounds.x + localBounds.width);\n }\n includeOutward(measureSceneLabelBounds(label, measureText));\n children.push(label);\n }\n function axisStyle(line) {\n return {\n stroke: theme.foreground,\n strokeOpacity: 0.28,\n ...guideLineStyle(line) ?? {}\n };\n }\n}\nfunction guideLineStyle(value) {\n if (!value || typeof value !== \"object\") return void 0;\n const style = {};\n if (value.stroke !== void 0) style.stroke = value.stroke;\n if (value.strokeOpacity !== void 0) {\n style.strokeOpacity = value.strokeOpacity;\n }\n if (value.strokeWidth !== void 0) style.strokeWidth = value.strokeWidth;\n if (value.strokeDasharray !== void 0) {\n style.strokeDasharray = value.strokeDasharray;\n }\n if (value.lineCap !== void 0) style.lineCap = value.lineCap;\n return Object.keys(style).length ? style : void 0;\n}\nfunction guideLineHalfWidth(value) {\n if (!value || typeof value !== \"object\" || value.stroke === \"none\") return 0;\n const strokeWidth = value.strokeWidth;\n return strokeWidth !== void 0 && Number.isFinite(strokeWidth) && strokeWidth > 0 ? strokeWidth / 2 : 0;\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 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(guide, ticks, axisPosition, size, padding, options, width, theme, measureText, rightToLeft = false) {\n const defaultFontSize = width < 360 ? 10 : 11;\n const positiveSide = guide.side === \"bottom\" || guide.side === \"right\";\n const direction = positiveSide ? 1 : -1;\n return ticks.map((tick, index) => {\n const context = {\n value: tick.value,\n index,\n position: tick.position,\n bandwidth: guide.scale.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 automaticAnchor = guide.channel === \"y\" ? positiveSide ? physicalTextAnchor(\"left\", rightToLeft ? \"rtl\" : \"ltr\") : physicalTextAnchor(\"right\", rightToLeft ? \"rtl\" : \"ltr\") : (rotate ?? 0) < 0 ? physicalTextAnchor(\"right\", rightToLeft ? \"rtl\" : \"ltr\") : (rotate ?? 0) > 0 ? physicalTextAnchor(\"left\", rightToLeft ? \"rtl\" : \"ltr\") : \"middle\";\n const anchor = resolveTickLabelValue(options.anchor, context) ?? automaticAnchor;\n const label = guide.channel === \"x\" ? {\n kind: \"label\",\n key: `${guide.id}-tick-label:${valueKey(tick.value)}`,\n x: tick.position + dx,\n y: axisPosition + direction * (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: `${guide.id}-tick-label:${valueKey(tick.value)}`,\n x: axisPosition + direction * (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, logicalTextAnchorOffset } 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 = logicalTextAnchorOffset(width, options.anchor, options.direction);\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\";\nimport { mappedFocusCoordinate } from \"./focus-coordinate-internal.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) => mappedFocusCoordinate(point, axis);\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, coordinate);\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, coordinate) : [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(coordinate(point));\n if (!unique.has(key)) unique.set(key, point);\n }\n return [...unique.values()];\n }\n };\n}\nfunction groupPoints(points, point, coordinate) {\n const key = valueKey(coordinate(point));\n const unique = /* @__PURE__ */ new Map();\n unique.set(valueKey(point.group), point);\n for (const candidate of points) {\n if (valueKey(coordinate(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 resolveChartRenderer(scene, defaultRenderer) {\n const renderer = findLayerRenderer(scene.nodes, defaultRenderer) ?? findGuideLayerRenderer(scene.focusGuides, defaultRenderer);\n return renderer?.compose(defaultRenderer) ?? defaultRenderer;\n}\nfunction findGuideLayerRenderer(guides, defaultRenderer) {\n for (const guide of guides ?? []) {\n if (guide.renderer !== void 0 && guide.renderer !== defaultRenderer) {\n return requiredCompositor(guide.renderer);\n }\n }\n return void 0;\n}\nfunction findLayerRenderer(nodes, defaultRenderer) {\n for (const node of nodes) {\n if (node.renderer !== void 0 && node.renderer !== defaultRenderer) {\n return requiredCompositor(node.renderer);\n }\n if (node.kind === \"group\") {\n const renderer = findLayerRenderer(node.children, defaultRenderer);\n if (renderer) return renderer;\n }\n }\n return void 0;\n}\nfunction requiredCompositor(renderer) {\n const candidate = renderer;\n if (typeof candidate.compose !== \"function\") {\n throw new TypeError(\n `Mark renderer \"${renderer.id}\" cannot compose chart layers`\n );\n }\n return renderer;\n}\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 observedContentSize;\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 const renderer = resolveChartRenderer(scene, options.renderer);\n if (!surface) {\n surface = renderer.mount(container, scheduleRender);\n subscribeToPresentation();\n } else if (surface.renderer !== renderer) {\n unsubscribePresentation?.();\n unsubscribePresentation = void 0;\n destroyTooltip();\n destroyHostControls();\n surface.destroy();\n container.replaceChildren();\n surface = 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 observesContainerWidth = () => options.width === void 0;\n const observesContainerHeight = () => options.height === void 0 && !isPositiveFiniteNumber(options.aspectRatio);\n const currentContainerContentSize = (bounds) => {\n const styles = view?.getComputedStyle(container);\n const paddingWidth = cssPixelLength(styles?.paddingLeft) + cssPixelLength(styles?.paddingRight);\n const paddingHeight = cssPixelLength(styles?.paddingTop) + cssPixelLength(styles?.paddingBottom);\n const borderWidth = cssPixelLength(styles?.borderLeftWidth) + cssPixelLength(styles?.borderRightWidth);\n const borderHeight = cssPixelLength(styles?.borderTopWidth) + cssPixelLength(styles?.borderBottomWidth);\n return {\n width: contentBoxDimension(\n styles?.width,\n styles?.boxSizing,\n bounds?.width,\n paddingWidth,\n borderWidth\n ),\n height: contentBoxDimension(\n styles?.height,\n styles?.boxSizing,\n bounds?.height,\n paddingHeight,\n borderHeight\n )\n };\n };\n const currentSize = () => {\n const measureWidth = observesContainerWidth();\n const measureHeight = observesContainerHeight();\n const bounds = (measureWidth || measureHeight) && !observedContentSize ? container.getBoundingClientRect() : void 0;\n const contentSize = measureWidth || measureHeight ? observedContentSize ?? currentContainerContentSize(bounds) : void 0;\n const width = options.width ?? contentSize?.width;\n return {\n width,\n height: measureHeight ? contentSize?.height : void 0\n };\n };\n const responsiveSizeChanged = () => {\n const next = currentSize();\n return observesContainerWidth() && next.width !== void 0 && next.width !== scene.width || observesContainerHeight() && next.height !== void 0 && next.height !== scene.height;\n };\n const configureObserver = () => {\n observer?.disconnect();\n observer = void 0;\n observedContentSize = void 0;\n if (!observesContainerWidth() && !observesContainerHeight()) return;\n const ResizeObserverConstructor = view?.ResizeObserver;\n if (!ResizeObserverConstructor) return;\n observer = new ResizeObserverConstructor((entries) => {\n const entry = entries.find((candidate) => candidate.target === container) ?? entries[0];\n observedContentSize = entry ? {\n width: positiveFiniteNumber(entry.contentRect.width),\n height: positiveFiniteNumber(entry.contentRect.height)\n } : void 0;\n if (!responsiveSizeChanged()) 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 shouldRender = forceScheduledRender || responsiveSizeChanged();\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 shouldRender = forceScheduledRender || responsiveSizeChanged();\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 dismissPinnedInteractionOutside = (event) => {\n if (options.definition.pointer === false || pinnedKey === null || cursorIsPinned()) {\n return;\n }\n const path = event.composedPath();\n if (path.includes(container) || path.some(\n (target) => view && target instanceof view.Node && tooltipInstance?.contains(target)\n )) {\n return;\n }\n dismissTooltip();\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 container.ownerDocument.addEventListener(\n \"pointerdown\",\n dismissPinnedInteractionOutside,\n true\n );\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 || options.height !== nextOptions.height || options.aspectRatio !== nextOptions.aspectRatio;\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.ownerDocument.removeEventListener(\n \"pointerdown\",\n dismissPinnedInteractionOutside,\n true\n );\n container.replaceChildren();\n if (ownsPosition && container.style.position === \"relative\") {\n container.style.position = previousPosition;\n }\n }\n };\n function createScene() {\n const size = currentSize();\n const width = size.width ?? (hasRendered ? scene.width : options.initialWidth ?? 640);\n return runtime.render(\n options.definition,\n {\n width,\n height: options.height ?? (isPositiveFiniteNumber(options.aspectRatio) ? width / options.aspectRatio : size.height ?? (hasRendered ? scene.height : 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 const tooltipMotionCapability = surface.renderer.capabilities?.tooltipMotion;\n tooltipInstance = input.extension.create({\n container,\n motion: tooltipMotionCapability?.protocol === 1 ? tooltipMotionCapability.createController({\n container,\n transition: resolveTooltipMotion\n }) : void 0,\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 resolveTooltipMotion() {\n const definition = options.definition.motion;\n if (definition === false) return false;\n return typeof definition === \"function\" ? void 0 : definition?.transition;\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 cssPixelLength(value) {\n return cssPixelValue(value) ?? 0;\n}\nfunction contentBoxDimension(computedSize, boxSizing, boundingSize, padding, border) {\n const resolvedSize = isPositiveFiniteNumber(boundingSize) ? cssPixelValue(computedSize) : void 0;\n const size = resolvedSize === void 0 ? (boundingSize ?? 0) - padding - border : resolvedSize - (boxSizing === \"border-box\" ? padding + border : 0);\n return isPositiveFiniteNumber(size) ? size : void 0;\n}\nfunction cssPixelValue(value) {\n const match = /^(-?(?:\\d+(?:\\.\\d*)?|\\.\\d+))px$/i.exec(value?.trim() ?? \"\");\n if (!match) return void 0;\n const length = Number(match[1]);\n return Number.isFinite(length) ? length : void 0;\n}\nfunction positiveFiniteNumber(value) {\n return isPositiveFiniteNumber(value) ? value : void 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 resolveChartRenderer\n};\n","const interpolatedAttributes = /* @__PURE__ */ new Set([\n \"cx\",\n \"cy\",\n \"d\",\n \"fill-opacity\",\n \"font-size\",\n \"font-weight\",\n \"fx\",\n \"fy\",\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 if (matched && current.localName === \"defs\") {\n rendered = nextChild.cloneNode(true);\n matched.replaceWith(rendered);\n if (matched !== cursor) current.insertBefore(rendered, cursor);\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(name, 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(name, previous, next) {\n const path = name === \"d\";\n const previousNumbers = extractNumbers(previous, path);\n const nextNumbers = extractNumbers(next, path);\n if (previousNumbers.skeleton !== nextNumbers.skeleton || previousNumbers.values.length !== nextNumbers.values.length || !previousNumbers.values.length) {\n return void 0;\n }\n const template = nextNumbers.skeleton;\n return (progress) => {\n let index = 0;\n return template.replaceAll(/[#!]/g, (placeholder) => {\n const start = previousNumbers.values[index];\n const end = nextNumbers.values[index];\n index += 1;\n return formatNumber(\n placeholder === \"!\" ? end : start + (end - start) * progress\n );\n });\n };\n}\nfunction extractNumbers(value, path = false) {\n const values = [];\n let skeleton = \"\";\n let command = \"\";\n let argument = 0;\n let index = 0;\n while (index < value.length) {\n const rest = value.slice(index);\n const arcPosition = argument % 7;\n const arcFlag = path && /a/i.test(command) && arcPosition > 2 && arcPosition < 5;\n const match = arcFlag ? /^[01]/u.exec(rest) : /^-?(?:\\d+\\.?\\d*|\\.\\d+)(?:e[-+]?\\d+)?/iu.exec(rest);\n if (match) {\n values.push(Number(match[0]));\n skeleton += arcFlag ? \"!\" : \"#\";\n argument += 1;\n index += match[0].length;\n continue;\n }\n const character = value[index];\n skeleton += character;\n if (path && /[a-z]/i.test(character)) {\n command = character;\n argument = 0;\n }\n index += 1;\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 number(value) {\n return String(Math.round(value * 100) / 100);\n}\nconst entities = {\n \"&\": \"&amp;\",\n \"<\": \"&lt;\",\n \">\": \"&gt;\",\n '\"': \"&quot;\"\n};\nconst unsafeCharacter = /[&<>\\u0000-\\u0008\\u000b\\u000c\\u000e-\\u001f\\ufffe\\uffff]|\\p{Cs}/gu;\nfunction escapeCharacter(character) {\n return entities[character] ?? \"\\uFFFD\";\n}\nfunction escapeText(value) {\n return value.replace(unsafeCharacter, escapeCharacter);\n}\nfunction escapeAttribute(value) {\n return value.replace(unsafeCharacter, escapeCharacter).replace(/\"/g, entities['\"']);\n}\nexport {\n escapeAttribute,\n escapeText,\n number\n};\n","const childrenByOptions = /* @__PURE__ */ new WeakMap();\nfunction svgRenderChildren(options) {\n return childrenByOptions.get(options);\n}\nfunction withSvgRenderChildren(options, children, render) {\n const previous = childrenByOptions.get(options);\n childrenByOptions.set(options, children);\n try {\n return render();\n } finally {\n if (previous) childrenByOptions.set(options, previous);\n else childrenByOptions.delete(options);\n }\n}\nexport {\n svgRenderChildren,\n withSvgRenderChildren\n};\n","import { number, escapeText, escapeAttribute } from \"./markup-internal.js\";\nimport {\n svgRenderChildren\n} from \"./svg-render-context-internal.js\";\nimport { rectCornerRadiiPath } from \"./renderer-rect.js\";\nfunction 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 direction = scene.direction === \"ltr\" || scene.direction === \"rtl\" ? ` direction=\"${scene.direction}\"` : \"\";\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)}\"${direction} style=\"display:block;overflow:visible\">${description}${definitions}${background}${renderSceneNodes(scene.nodes, idPrefix, hooks, svgRenderChildren(options))}</svg>`;\n}\nfunction renderSceneNodes(nodes, idPrefix = \"\", hooks, children) {\n let markup = \"\";\n for (const node of nodes)\n markup += renderNode(node, hooks, idPrefix, children);\n return markup;\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: renderSvgClip\n};\nfunction renderNode(node, hooks, idPrefix, children) {\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 ?? \"\"}${renderSceneNodes(children?.(node) ?? node.children, idPrefix, hooks, children)}</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 ?? pointsPath(node.points, false);\n return `<path${common} d=\"${escapeAttribute(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=\"${escapeAttribute(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 node.cornerRadii === void 0 ? `<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)}\"`}/>` : `<path${common} d=\"${rectCornerRadiiPath(node.x, node.y, node.width, node.height, node.cornerRadii)}\"/>`;\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 renderSvgClip(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 return renderAttribute(\"fill\", paint(style.fill, hooks, idPrefix)) + renderAttribute(\"fill-opacity\", style.fillOpacity) + renderAttribute(\"stroke\", paint(style.stroke, hooks, idPrefix)) + renderAttribute(\"stroke-opacity\", style.strokeOpacity) + renderAttribute(\"stroke-width\", style.strokeWidth) + renderAttribute(\"opacity\", style.opacity) + renderAttribute(\"stroke-linecap\", style.lineCap) + renderAttribute(\"stroke-linejoin\", style.lineJoin) + renderAttribute(\"stroke-dasharray\", style.strokeDasharray);\n}\nfunction paint(value, hooks, idPrefix) {\n return value && hooks?.resolvePaint ? hooks.resolvePaint(value, idPrefix) : value;\n}\nfunction renderAttribute(name, value) {\n return value == null ? \"\" : ` ${name}=\"${typeof value === \"number\" ? number(value) : escapeAttribute(value)}\"`;\n}\nexport {\n renderChartSvgWithHooks,\n renderFocusGuideLayer,\n renderSceneNodes,\n renderSvgClip\n};\n","import { number, escapeAttribute } from \"./markup-internal.js\";\nimport {\n renderChartSvgWithHooks,\n renderSvgClip\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: renderSvgClip,\n resolvePaint: gradientIds.size ? (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 } : void 0\n });\n}\nfunction renderGradients(scene, idPrefix) {\n if (!scene.gradients.length) return \"\";\n return `<defs data-ts-key=\"gradients\">${scene.gradients.map((gradient) => {\n let minimumOffset = 0;\n const stops = gradient.stops.map((stop, index) => {\n const offset = Math.max(minimumOffset, clampUnit(stop.offset));\n minimumOffset = offset;\n return `<stop data-ts-key=\"gradient:${escapeAttribute(gradient.id)}:stop:${index}\" offset=\"${percent(offset)}\" stop-color=\"${escapeAttribute(stop.color)}\"${stop.opacity === void 0 ? \"\" : ` stop-opacity=\"${number(stop.opacity)}\"`}/>`;\n }).join(\"\");\n if (gradient.type === \"radial\") {\n const cx = gradient.cx ?? 0.5;\n const cy = gradient.cy ?? 0.5;\n return `<radialGradient data-ts-key=\"gradient:${escapeAttribute(gradient.id)}\" id=\"${escapeAttribute(scopedId(idPrefix, gradient.id))}\" cx=\"${percent(cx)}\" cy=\"${percent(cy)}\" r=\"${percent(gradient.r ?? 0.5)}\" fx=\"${percent(gradient.fx ?? cx)}\" fy=\"${percent(gradient.fy ?? cy)}\">${stops}</radialGradient>`;\n }\n return `<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)}\">${stops}</linearGradient>`;\n }).join(\"\")}</defs>`;\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(clampUnit(value) * 100)}%`;\n}\nfunction clampUnit(value) {\n return Number.isNaN(value) ? 0 : Math.max(0, Math.min(1, value));\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}\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 resolveFocusGuides,\n resolveFocusPresentation,\n resolveFocusScene,\n selectedFocusChildren\n};\n","import { renderFocusGuideLayer } from \"./svg-renderer.js\";\nfunction renderSvgFocusLayerWithRenderer(svg, scene, node, options, renderSvg, placement) {\n const root = parseSvgMarkup(\n svg.ownerDocument,\n renderSvg({ ...scene, nodes: [node] }, options)\n );\n const layer = root && keyedElement(root, node.key);\n if (!root || !layer || layer.localName !== \"g\") {\n throw new Error(\n `The SVG renderer must preserve a g[data-ts-key=\"${node.key}\"] element when serializing focus guides.`\n );\n }\n if (placement) {\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(\n \"visibility\",\n node.children.length ? \"visible\" : \"hidden\"\n );\n mergeFocusGuideClipFallback(\n svg.ownerDocument,\n layer,\n node.children,\n placement,\n options.idPrefix ?? \"\"\n );\n }\n copyMissingRendererDefinitions(svg, root, layer, node.key);\n return layer.outerHTML;\n}\nfunction renderFocusGuideLayerWithRenderer(svg, scene, nodes, placement, options, renderSvg) {\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 return renderSvgFocusLayerWithRenderer(\n svg,\n { ...scene, focusGuides: void 0 },\n wrapper,\n options,\n renderSvg,\n placement\n );\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 renderSvgFocusLayerWithRenderer\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 const width = Math.max(0, output.width - insetX * 2);\n const height = Math.max(0, output.height - insetY * 2);\n const keepsSelectiveShape = output.cornerRadii !== void 0;\n const cornerRadii = radius === void 0 ? output.cornerRadii : typeof radius === \"number\" ? keepsSelectiveShape ? [radius, radius, radius, radius] : void 0 : radius;\n output = {\n ...output,\n x: output.x + insetX + dx,\n y: output.y + insetY + dy,\n width,\n height,\n radius: radius === void 0 ? output.radius : typeof radius === \"number\" && !keepsSelectiveShape ? radius : void 0,\n cornerRadii,\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 {\n focusedNodeKeys,\n resolveFocusScene,\n selectedFocusChildren\n} from \"./focus-layer.js\";\nimport { isDefaultFocusLayer } from \"./default-focus-internal.js\";\nimport { withSvgRenderChildren } from \"./svg-render-context-internal.js\";\nimport { resolveFocusGuides } from \"./focus-presentation.js\";\nimport { renderFocusGuideLayer } from \"./svg-renderer.js\";\nimport {\n renderFocusGuideLayerWithRenderer,\n renderSvgFocusLayerWithRenderer\n} 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: (scene, options) => renderWithFocus(scene, options, null, 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 let currentFocus = null;\n let eagerFocus = 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 prepareAnimatedFocus = () => {\n if (eagerFocus) return;\n eagerFocus = true;\n if (!scene || !renderOptions) return;\n paintSvgFocus(\n svgElement(),\n scene,\n currentFocus,\n renderOptions,\n renderSvg,\n \"all\"\n );\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 if (options.animation) prepareAnimatedFocus();\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 eagerFocus ? renderSvg(nextScene, options) : renderWithFocus(nextScene, options, currentFocus, renderSvg),\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 const transition = resolveMarkStateTransition(\n state.transition ?? previousTransition,\n container\n );\n if (transition) prepareAnimatedFocus();\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 eagerFocus ? renderSvg(resolved.scene, renderOptions) : renderWithFocus(\n resolved.scene,\n renderOptions,\n focus,\n renderSvg\n ),\n transition\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 currentFocus = focus;\n paintSvgFocus(\n svgElement(),\n resolved.scene,\n focus,\n renderOptions,\n renderSvg,\n !eagerFocus\n );\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, options, renderSvg, deferDefaultFocus) {\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 if (layer && deferDefaultFocus && isDefaultFocusLayer(layer)) {\n const children = deferDefaultFocus === \"all\" ? layer.children : focus ? selectedFocusChildren(layer, focus) : [];\n const existing = [...element.children].filter(\n (child) => child.localName === \"circle\"\n );\n if (existing.length !== children.length || existing.some(\n (child, index2) => child.getAttribute(\"data-ts-key\") !== children[index2]?.key\n )) {\n reconcileChartSvgFragment(\n element,\n renderSvgFocusLayerWithRenderer(\n svg,\n scene,\n { ...layer, children },\n options,\n renderSvg\n )\n );\n }\n }\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 renderWithFocus(scene, options, focus, renderSvg) {\n return withSvgRenderChildren(\n options,\n (layer) => isDefaultFocusLayer(layer) ? focus ? selectedFocusChildren(layer, focus) : [] : void 0,\n () => renderSvg(scene, options)\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.defaultElement ?? 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({\n container: hostContainer,\n scene,\n surface,\n svg,\n interaction\n });\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","function markStatesMayUseCornerRadii(states) {\n return states?.some(({ style }) => {\n const radius = style.radius;\n return typeof radius === \"function\" || Array.isArray(radius);\n }) ?? false;\n}\nfunction resolveSceneRectRadius(radius, preferCornerRadii) {\n if (radius === void 0) {\n return preferCornerRadii ? { cornerRadii: [0, 0, 0, 0] } : {};\n }\n if (typeof radius !== \"number\") return { cornerRadii: radius };\n return preferCornerRadii ? { cornerRadii: [radius, radius, radius, radius] } : { radius };\n}\nexport {\n markStatesMayUseCornerRadii,\n resolveSceneRectRadius\n};\n","const sceneMotionNode = /* @__PURE__ */ Symbol(\"scene-motion-node\");\nexport {\n sceneMotionNode\n};\n","import { stackOrderInsideOut } from \"d3-shape\";\nimport { valueKey } from \"./scales.js\";\nfunction stackOuterEnds(positions, values, series, starts, ends, options = {}, fallbackSeries = \"value\") {\n const input = stackEndInput(\n positions,\n values,\n series,\n starts,\n ends,\n fallbackSeries\n );\n const orderedSeries = resolveSeriesOrder(input, options.order);\n if (options.reverse) orderedSeries.reverse();\n const seriesRank = new Map(\n orderedSeries.map((value, index) => [valueKey(value), index])\n );\n const orderedInput = [...input].sort(\n (left, right) => seriesRank.get(valueKey(left.series)) - seriesRank.get(valueKey(right.series))\n );\n const outerEnds = Array.from({\n length: positions.length\n });\n const paintGroups = groupStackEnds(input);\n const orderedGroups = groupStackEnds(orderedInput);\n const diverging = options.offset === void 0 || options.offset === \"diverging\";\n for (const [position, rows] of orderedGroups) {\n const paintRows = paintGroups.get(position);\n if (diverging) {\n const minimum = Math.min(...rows.flatMap((row) => [row.start, row.end]));\n const maximum = Math.max(...rows.flatMap((row) => [row.start, row.end]));\n if (maximum > 0) markExtremeEnd(rows, paintRows, \"max\", outerEnds);\n if (minimum < 0) markExtremeEnd(rows, paintRows, \"min\", outerEnds);\n } else {\n const baseline = rows[0].start;\n const terminal = rows.at(-1).end;\n let extreme;\n if (terminal < baseline) extreme = \"min\";\n else if (terminal > baseline) extreme = \"max\";\n else {\n const minimum = Math.min(...rows.flatMap((row) => [row.start, row.end]));\n const maximum = Math.max(...rows.flatMap((row) => [row.start, row.end]));\n extreme = baseline - minimum > maximum - baseline ? \"min\" : \"max\";\n }\n markExtremeEnd(rows, paintRows, extreme, outerEnds);\n }\n }\n return outerEnds;\n}\nfunction groupStackEnds(input) {\n const groups = /* @__PURE__ */ new Map();\n for (const row of input) {\n if (row.value === 0 || row.start === row.end) continue;\n const position = valueKey(row.position);\n const group = groups.get(position);\n if (group) group.push(row);\n else groups.set(position, [row]);\n }\n return groups;\n}\nfunction markExtremeEnd(geometryRows, paintRows, extreme, outerEnds) {\n if (geometryRows.length === 0) return;\n const target = Math[extreme](\n ...geometryRows.flatMap((row) => [row.start, row.end])\n );\n for (const row of paintRows) {\n const start = row.start === target;\n const end = row.end === target;\n if (!start && !end) continue;\n const existing = outerEnds[row.index];\n outerEnds[row.index] = {\n start: existing?.start === true || start,\n end: existing?.end === true || end\n };\n }\n}\nfunction stackEndInput(positions, values, series, starts, ends, fallbackSeries) {\n const input = [];\n for (let index = 0; index < positions.length; index += 1) {\n const position = positions[index];\n const value = values[index];\n const start = starts[index];\n const end = ends[index];\n if (!isChartValue(position) || !isFiniteNumber(value) || !isFiniteNumber(start) || !isFiniteNumber(end))\n continue;\n const seriesValue = series[index];\n input.push({\n index,\n position,\n value,\n start,\n end,\n series: isChartKey(seriesValue) ? seriesValue : fallbackSeries === \"index\" ? index : \"value\"\n });\n }\n return input;\n}\nfunction resolveSeriesOrder(input, order) {\n const firstSeen = [];\n const seen = /* @__PURE__ */ new Set();\n for (const row of input) {\n const identity = valueKey(row.series);\n if (seen.has(identity)) continue;\n seen.add(identity);\n firstSeen.push(row.series);\n }\n if (Array.isArray(order)) {\n const explicit = [...order];\n const explicitKeys = new Set(explicit.map(valueKey));\n return [\n ...explicit,\n ...firstSeen.filter((value) => !explicitKeys.has(valueKey(value)))\n ];\n }\n if (order === \"inside-out\") {\n const positions = [];\n const positionIndex = /* @__PURE__ */ new Map();\n for (const row of input) {\n const identity = valueKey(row.position);\n if (positionIndex.has(identity)) continue;\n positionIndex.set(identity, positions.length);\n positions.push(row.position);\n }\n const seriesValues = firstSeen.map((seriesValue) => {\n const identity = valueKey(seriesValue);\n const output = positions.map(() => [0, 0]);\n for (const row of input) {\n if (valueKey(row.series) !== identity) continue;\n output[positionIndex.get(valueKey(row.position))][1] = row.value;\n }\n return output;\n });\n return stackOrderInsideOut(\n seriesValues\n ).map((index) => firstSeen[index]);\n }\n if (order !== \"ascending\" && order !== \"descending\") return firstSeen;\n const totals = new Map(firstSeen.map((value) => [valueKey(value), 0]));\n for (const row of input) {\n const key = valueKey(row.series);\n totals.set(key, (totals.get(key) ?? 0) + Math.abs(row.value));\n }\n return firstSeen.sort((left, right) => {\n const difference = (totals.get(valueKey(left)) ?? 0) - (totals.get(valueKey(right)) ?? 0);\n return order === \"ascending\" ? difference : -difference;\n });\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}\nexport {\n stackOuterEnds\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 {\n markStatesMayUseCornerRadii,\n resolveSceneRectRadius\n} from \"./rect-radius-state-internal.js\";\nimport {\n sceneMotionNode\n} from \"./scene-motion-internal.js\";\nimport { valueKey } from \"./scales.js\";\nimport { stackOuterEnds } from \"./stack-ends-internal.js\";\nimport { stackValues } from \"./stack-internal.js\";\nfunction barY(source, options = {}) {\n const data = Array.isArray(source) ? source : Array.from(source);\n const xScale = options.xScale ?? \"x\";\n const yScale = options.yScale ?? \"y\";\n const preferCornerRadii = typeof options.radius === \"function\" || markStatesMayUseCornerRadii(options.states);\n return createMark(\n ({ markIndex }) => {\n const id = options.id ?? `bar-y-${markIndex}`;\n const xValues = channelValues(\n data,\n options.x,\n (_datum, { index }) => index\n );\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 validateEndRadius(options.radius, explicitExtent, grouped, \"y\");\n const stackLayout = options.layout?.type === \"stack\" ? options.layout : void 0;\n const endRadius = isBarEndRadius(options.radius) ? options.radius : void 0;\n const divergingStack = stackLayout?.offset === void 0 || stackLayout.offset === \"diverging\";\n const stacked = !explicitExtent && !grouped ? stackValues(xValues, rawYValues, seriesValues, stackLayout, \"index\") : void 0;\n const outerEnds = stacked && endRadius && (endRadius.stack ?? \"outer\") === \"outer\" ? stackOuterEnds(\n xValues,\n rawYValues,\n seriesValues,\n stacked.starts,\n stacked.ends,\n stackLayout,\n \"index\"\n ) : 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: xScale, values: xValues.filter(isChartValue) },\n y: {\n scale: yScale,\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[xScale].bandwidth || inferBandwidth(scales[xScale], 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 stroke = visualValue(\n options.stroke,\n datum,\n datumIndex,\n data,\n \"none\"\n );\n const strokeDasharray = visualValue(\n options.strokeDasharray,\n datum,\n datumIndex,\n data,\n \"none\"\n );\n const center = scales[xScale].map(xValue);\n const baselinePosition = scales[yScale].map(y1Value);\n const valuePosition = scales[yScale].map(y2Value);\n const valueEnd = stacked && divergingStack && yValue < 0 ? \"start\" : \"end\";\n const semanticValuePosition = valueEnd === \"start\" ? baselinePosition : valuePosition;\n const semanticBaselinePosition = valueEnd === \"start\" ? valuePosition : baselinePosition;\n const outerEnd = outerEnds?.[datumIndex];\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 resolvedRadius = resolveBarRadius(\n options.radius,\n datum,\n datumIndex,\n data,\n \"y\",\n semanticValuePosition,\n semanticBaselinePosition,\n outerEnds !== void 0,\n outerEnd,\n baselinePosition,\n valuePosition,\n preferCornerRadii\n );\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: semanticValuePosition,\n color: fill\n };\n const node = {\n kind: \"rect\",\n key,\n x,\n y,\n width,\n height,\n ...resolvedRadius,\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 stroke,\n strokeOpacity: options.strokeOpacity,\n strokeWidth: options.strokeWidth,\n strokeDasharray\n },\n [sceneMotionNode]: {\n bar: { baseline: semanticBaselinePosition }\n }\n };\n nodes.push(node);\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 },\n options.motion,\n options.renderer\n );\n}\nfunction barX(source, options = {}) {\n const data = Array.isArray(source) ? source : Array.from(source);\n const xScale = options.xScale ?? \"x\";\n const yScale = options.yScale ?? \"y\";\n const preferCornerRadii = typeof options.radius === \"function\" || markStatesMayUseCornerRadii(options.states);\n return createMark(\n ({ 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(\n data,\n options.y,\n (_datum, { index }) => index\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.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 validateEndRadius(options.radius, explicitExtent, grouped, \"x\");\n const stackLayout = options.layout?.type === \"stack\" ? options.layout : void 0;\n const endRadius = isBarEndRadius(options.radius) ? options.radius : void 0;\n const divergingStack = stackLayout?.offset === void 0 || stackLayout.offset === \"diverging\";\n const stacked = !explicitExtent && !grouped ? stackValues(yValues, rawXValues, seriesValues, stackLayout, \"index\") : void 0;\n const outerEnds = stacked && endRadius && (endRadius.stack ?? \"outer\") === \"outer\" ? stackOuterEnds(\n yValues,\n rawXValues,\n seriesValues,\n stacked.starts,\n stacked.ends,\n stackLayout,\n \"index\"\n ) : 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: xScale,\n values: [\n ...x2Values.filter(isFiniteNumber),\n ...x1Values.filter(isFiniteNumber)\n ],\n includeZero: options.x1 === void 0\n },\n y: { scale: yScale, 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[yScale].bandwidth || inferBandwidth(scales[yScale], 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 stroke = visualValue(\n options.stroke,\n datum,\n datumIndex,\n data,\n \"none\"\n );\n const strokeDasharray = visualValue(\n options.strokeDasharray,\n datum,\n datumIndex,\n data,\n \"none\"\n );\n const baselinePosition = scales[xScale].map(x1Value);\n const valuePosition = scales[xScale].map(x2Value);\n const valueEnd = stacked && divergingStack && xValue < 0 ? \"start\" : \"end\";\n const semanticValuePosition = valueEnd === \"start\" ? baselinePosition : valuePosition;\n const semanticBaselinePosition = valueEnd === \"start\" ? valuePosition : baselinePosition;\n const outerEnd = outerEnds?.[datumIndex];\n const center = scales[yScale].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 resolvedRadius = resolveBarRadius(\n options.radius,\n datum,\n datumIndex,\n data,\n \"x\",\n semanticValuePosition,\n semanticBaselinePosition,\n outerEnds !== void 0,\n outerEnd,\n baselinePosition,\n valuePosition,\n preferCornerRadii\n );\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: semanticValuePosition,\n y: center - totalBandwidth / 2 + groupOffset + groupBandwidth / 2,\n color: fill\n };\n const node = {\n kind: \"rect\",\n key,\n x,\n y,\n width,\n height,\n ...resolvedRadius,\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 stroke,\n strokeOpacity: options.strokeOpacity,\n strokeWidth: options.strokeWidth,\n strokeDasharray\n },\n [sceneMotionNode]: {\n bar: { baseline: semanticBaselinePosition }\n }\n };\n nodes.push(node);\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 },\n options.motion,\n options.renderer\n );\n}\nfunction validateEndRadius(radius, explicitExtent, grouped, valueAxis) {\n if (!isBarEndRadius(radius) || radius.stack !== \"outer\") return;\n if (explicitExtent) {\n throw new TypeError(\n `Bar radius stack \"outer\" requires an implicit ${valueAxis} extent`\n );\n }\n if (grouped) {\n throw new TypeError(\n 'Bar radius stack \"outer\" cannot be used with a group layout'\n );\n }\n}\nfunction resolveBarRadius(radius, datum, index, data, valueAxis, valuePosition, baselinePosition, stackOuter, outerEnd, stackStartPosition, stackEndPosition, preferCornerRadii) {\n if (radius === void 0) {\n return resolveSceneRectRadius(void 0, preferCornerRadii);\n }\n if (isBarEndRadius(radius)) {\n const endRadius = visualValue(radius.end, datum, index, data, 0);\n if (valuePosition === baselinePosition) {\n return { cornerRadii: [0, 0, 0, 0] };\n }\n if (stackOuter) {\n if (!outerEnd) return { cornerRadii: [0, 0, 0, 0] };\n if (outerEnd.start && outerEnd.end) {\n return { cornerRadii: [endRadius, endRadius, endRadius, endRadius] };\n }\n const roundStart = outerEnd.start;\n return {\n cornerRadii: endCornerRadii(\n endRadius,\n valueAxis,\n roundStart ? stackStartPosition : stackEndPosition,\n roundStart ? stackEndPosition : stackStartPosition\n )\n };\n }\n return {\n cornerRadii: endCornerRadii(\n endRadius,\n valueAxis,\n valuePosition,\n baselinePosition\n )\n };\n }\n const resolved = visualValue(radius, datum, index, data, 0);\n return resolveSceneRectRadius(resolved, preferCornerRadii);\n}\nfunction isBarEndRadius(radius) {\n return radius !== void 0 && radius !== null && typeof radius === \"object\" && !Array.isArray(radius);\n}\nfunction endCornerRadii(radius, valueAxis, valuePosition, baselinePosition) {\n if (valueAxis === \"y\") {\n return valuePosition <= baselinePosition ? [radius, radius, 0, 0] : [0, 0, radius, radius];\n }\n return valuePosition <= baselinePosition ? [radius, 0, 0, radius] : [0, radius, radius, 0];\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// ── Local\nimport type { BarChartData } from '@/billboardJs';\n\nexport type { BarChartData, BarChartSeries } from '@/billboardJs';\n\n// ── Types ────────────────────────────────────────────────────────────────────────────────────────────────────────────\n\nexport interface TanStackChartsHandle {\n destroy: () => void;\n resize: () => void;\n svg: SVGSVGElement;\n}\n\ninterface TanStackBarRow {\n category: string;\n seriesName: string;\n value: number;\n}\n\n// ── Actions ──────────────────────────────────────────────────────────────────────────────────────────────────────────\n\n// TanStack Charts is pre-alpha (0.6.4) - its vanilla-DOM API (mountChart) is undocumented and may change between releases.\nexport function renderTanStackCharts(data: BarChartData, renderTo: HTMLElement): TanStackChartsHandle {\n const rows = toBarRows(data);\n\n const definition = defineChart({\n marks: [barY(rows, { color: 'seriesName', fill: 'seriesName', layout: group(), x: 'category', y: 'value', z: 'seriesName' })],\n x: { scale: () => scaleBand().padding(0.2) },\n y: { grid: true, nice: true, scale: scaleLinear }\n });\n\n const hostOptions = { ariaLabel: 'Bar chart', definition };\n const host = mountChart(renderTo, hostOptions);\n\n function getSvg(): SVGSVGElement {\n const svgNode = renderTo.querySelector('svg');\n if (svgNode == null) throw new Error('Failed to create TanStack Charts SVG element.');\n return svgNode;\n }\n\n return {\n destroy: () => {\n host.destroy();\n },\n resize: () => {\n host.update(hostOptions);\n },\n get svg() {\n return getSvg();\n }\n };\n}\n\n// ── Helpers ──────────────────────────────────────────────────────────────────────────────────────────────────────────\n\nfunction toBarRows(data: BarChartData): TanStackBarRow[] {\n const rows: TanStackBarRow[] = [];\n for (const series of data.series) {\n for (const [index, category] of data.categories.entries()) {\n rows.push({ category, seriesName: series.name, value: series.values[index] ?? 0 });\n }\n }\n return rows;\n}\n"],"x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50],"mappings":"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"}