exploreda 0.0.6 → 0.1.0

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 (208) hide show
  1. package/README.md +144 -0
  2. package/dist/ExplorEda.cjs +4608 -11288
  3. package/dist/ExplorEda.cjs.map +1 -1
  4. package/dist/ExplorEda.css +2282 -1689
  5. package/dist/ExplorEda.css.map +1 -1
  6. package/dist/ExplorEda.d.cts +124 -278
  7. package/dist/ExplorEda.d.ts +124 -278
  8. package/dist/ExplorEda.js +4479 -11166
  9. package/dist/ExplorEda.js.map +1 -1
  10. package/dist/calculations.cjs +18 -0
  11. package/dist/calculations.cjs.map +1 -0
  12. package/dist/calculations.d.cts +63 -0
  13. package/dist/calculations.d.ts +63 -0
  14. package/dist/calculations.js +3 -0
  15. package/dist/calculations.js.map +1 -0
  16. package/dist/charts/bar.cjs +27 -0
  17. package/dist/charts/bar.cjs.map +1 -0
  18. package/dist/charts/bar.d.cts +2 -0
  19. package/dist/charts/bar.d.ts +2 -0
  20. package/dist/charts/bar.js +18 -0
  21. package/dist/charts/bar.js.map +1 -0
  22. package/dist/charts/box-plot.cjs +26 -0
  23. package/dist/charts/box-plot.cjs.map +1 -0
  24. package/dist/charts/box-plot.d.cts +2 -0
  25. package/dist/charts/box-plot.d.ts +2 -0
  26. package/dist/charts/box-plot.js +17 -0
  27. package/dist/charts/box-plot.js.map +1 -0
  28. package/dist/charts/color-legend.cjs +22 -0
  29. package/dist/charts/color-legend.cjs.map +1 -0
  30. package/dist/charts/color-legend.d.cts +2 -0
  31. package/dist/charts/color-legend.d.ts +2 -0
  32. package/dist/charts/color-legend.js +13 -0
  33. package/dist/charts/color-legend.js.map +1 -0
  34. package/dist/charts/data-table.cjs +22 -0
  35. package/dist/charts/data-table.cjs.map +1 -0
  36. package/dist/charts/data-table.d.cts +2 -0
  37. package/dist/charts/data-table.d.ts +2 -0
  38. package/dist/charts/data-table.js +13 -0
  39. package/dist/charts/data-table.js.map +1 -0
  40. package/dist/charts/line.cjs +30 -0
  41. package/dist/charts/line.cjs.map +1 -0
  42. package/dist/charts/line.d.cts +2 -0
  43. package/dist/charts/line.d.ts +2 -0
  44. package/dist/charts/line.js +17 -0
  45. package/dist/charts/line.js.map +1 -0
  46. package/dist/charts/markdown.cjs +16 -0
  47. package/dist/charts/markdown.cjs.map +1 -0
  48. package/dist/charts/markdown.css +77 -0
  49. package/dist/charts/markdown.css.map +1 -0
  50. package/dist/charts/markdown.d.cts +2 -0
  51. package/dist/charts/markdown.d.ts +2 -0
  52. package/dist/charts/markdown.js +7 -0
  53. package/dist/charts/markdown.js.map +1 -0
  54. package/dist/charts/pivot-table.cjs +23 -0
  55. package/dist/charts/pivot-table.cjs.map +1 -0
  56. package/dist/charts/pivot-table.d.cts +2 -0
  57. package/dist/charts/pivot-table.d.ts +2 -0
  58. package/dist/charts/pivot-table.js +14 -0
  59. package/dist/charts/pivot-table.js.map +1 -0
  60. package/dist/charts/row.cjs +27 -0
  61. package/dist/charts/row.cjs.map +1 -0
  62. package/dist/charts/row.d.cts +6 -0
  63. package/dist/charts/row.d.ts +6 -0
  64. package/dist/charts/row.js +18 -0
  65. package/dist/charts/row.js.map +1 -0
  66. package/dist/charts/scatter.cjs +24 -0
  67. package/dist/charts/scatter.cjs.map +1 -0
  68. package/dist/charts/scatter.d.cts +2 -0
  69. package/dist/charts/scatter.d.ts +2 -0
  70. package/dist/charts/scatter.js +15 -0
  71. package/dist/charts/scatter.js.map +1 -0
  72. package/dist/charts/summary-table.cjs +19 -0
  73. package/dist/charts/summary-table.cjs.map +1 -0
  74. package/dist/charts/summary-table.d.cts +2 -0
  75. package/dist/charts/summary-table.d.ts +2 -0
  76. package/dist/charts/summary-table.js +10 -0
  77. package/dist/charts/summary-table.js.map +1 -0
  78. package/dist/charts/three-d-scatter.cjs +24 -0
  79. package/dist/charts/three-d-scatter.cjs.map +1 -0
  80. package/dist/charts/three-d-scatter.d.cts +6 -0
  81. package/dist/charts/three-d-scatter.d.ts +6 -0
  82. package/dist/charts/three-d-scatter.js +15 -0
  83. package/dist/charts/three-d-scatter.js.map +1 -0
  84. package/dist/chunk-3PGYFLE3.cjs +499 -0
  85. package/dist/chunk-3PGYFLE3.cjs.map +1 -0
  86. package/dist/chunk-4HNDKMWF.js +167 -0
  87. package/dist/chunk-4HNDKMWF.js.map +1 -0
  88. package/dist/chunk-4QNENKTV.cjs +1214 -0
  89. package/dist/chunk-4QNENKTV.cjs.map +1 -0
  90. package/dist/chunk-54M32JJB.js +132 -0
  91. package/dist/chunk-54M32JJB.js.map +1 -0
  92. package/dist/chunk-5B23JVH3.cjs +2238 -0
  93. package/dist/chunk-5B23JVH3.cjs.map +1 -0
  94. package/dist/chunk-5LH6NSNL.js +456 -0
  95. package/dist/chunk-5LH6NSNL.js.map +1 -0
  96. package/dist/chunk-6DOKKCJ5.cjs +313 -0
  97. package/dist/chunk-6DOKKCJ5.cjs.map +1 -0
  98. package/dist/chunk-6HZX5CBT.cjs +1074 -0
  99. package/dist/chunk-6HZX5CBT.cjs.map +1 -0
  100. package/dist/chunk-6U5DOIQM.js +1071 -0
  101. package/dist/chunk-6U5DOIQM.js.map +1 -0
  102. package/dist/chunk-7GBZIK2R.cjs +80 -0
  103. package/dist/chunk-7GBZIK2R.cjs.map +1 -0
  104. package/dist/chunk-7PTJNIOD.js +520 -0
  105. package/dist/chunk-7PTJNIOD.js.map +1 -0
  106. package/dist/chunk-AHZYQ7FN.js +319 -0
  107. package/dist/chunk-AHZYQ7FN.js.map +1 -0
  108. package/dist/chunk-AOODAOL4.cjs +55 -0
  109. package/dist/chunk-AOODAOL4.cjs.map +1 -0
  110. package/dist/chunk-ASKFIRMC.cjs +165 -0
  111. package/dist/chunk-ASKFIRMC.cjs.map +1 -0
  112. package/dist/chunk-B7OQUBH4.cjs +171 -0
  113. package/dist/chunk-B7OQUBH4.cjs.map +1 -0
  114. package/dist/chunk-BIMEHDLB.js +72 -0
  115. package/dist/chunk-BIMEHDLB.js.map +1 -0
  116. package/dist/chunk-C62KHV7S.js +1225 -0
  117. package/dist/chunk-C62KHV7S.js.map +1 -0
  118. package/dist/chunk-C7GQT65O.cjs +1119 -0
  119. package/dist/chunk-C7GQT65O.cjs.map +1 -0
  120. package/dist/chunk-CGDWDV4Z.js +1211 -0
  121. package/dist/chunk-CGDWDV4Z.js.map +1 -0
  122. package/dist/chunk-CJQQFNEY.js +69 -0
  123. package/dist/chunk-CJQQFNEY.js.map +1 -0
  124. package/dist/chunk-DHYLSXNR.js +964 -0
  125. package/dist/chunk-DHYLSXNR.js.map +1 -0
  126. package/dist/chunk-DKFA4KOJ.cjs +87 -0
  127. package/dist/chunk-DKFA4KOJ.cjs.map +1 -0
  128. package/dist/chunk-DS5BS7PP.cjs +357 -0
  129. package/dist/chunk-DS5BS7PP.cjs.map +1 -0
  130. package/dist/chunk-EGMFQSGK.js +909 -0
  131. package/dist/chunk-EGMFQSGK.js.map +1 -0
  132. package/dist/chunk-EU5EFHO5.cjs +53 -0
  133. package/dist/chunk-EU5EFHO5.cjs.map +1 -0
  134. package/dist/chunk-FM46QSDM.js +837 -0
  135. package/dist/chunk-FM46QSDM.js.map +1 -0
  136. package/dist/chunk-GV2LRR32.cjs +843 -0
  137. package/dist/chunk-GV2LRR32.cjs.map +1 -0
  138. package/dist/chunk-H3XKFSA5.cjs +322 -0
  139. package/dist/chunk-H3XKFSA5.cjs.map +1 -0
  140. package/dist/chunk-H5AVMMCE.js +347 -0
  141. package/dist/chunk-H5AVMMCE.js.map +1 -0
  142. package/dist/chunk-JDMUN4VK.cjs +986 -0
  143. package/dist/chunk-JDMUN4VK.cjs.map +1 -0
  144. package/dist/chunk-JNO7OXCC.js +2171 -0
  145. package/dist/chunk-JNO7OXCC.js.map +1 -0
  146. package/dist/chunk-JQMG4ZR7.js +111 -0
  147. package/dist/chunk-JQMG4ZR7.js.map +1 -0
  148. package/dist/chunk-L2Q2R43U.cjs +118 -0
  149. package/dist/chunk-L2Q2R43U.cjs.map +1 -0
  150. package/dist/chunk-LBTZVERO.js +466 -0
  151. package/dist/chunk-LBTZVERO.js.map +1 -0
  152. package/dist/chunk-LUUGGTTK.cjs +1227 -0
  153. package/dist/chunk-LUUGGTTK.cjs.map +1 -0
  154. package/dist/chunk-MEEPH7ZC.cjs +911 -0
  155. package/dist/chunk-MEEPH7ZC.cjs.map +1 -0
  156. package/dist/chunk-MJPDJ5AS.js +184 -0
  157. package/dist/chunk-MJPDJ5AS.js.map +1 -0
  158. package/dist/chunk-MJROUIDZ.cjs +219 -0
  159. package/dist/chunk-MJROUIDZ.cjs.map +1 -0
  160. package/dist/chunk-MUWSBYJS.js +528 -0
  161. package/dist/chunk-MUWSBYJS.js.map +1 -0
  162. package/dist/chunk-NDF5LCST.js +1088 -0
  163. package/dist/chunk-NDF5LCST.js.map +1 -0
  164. package/dist/chunk-NGWTPED4.js +311 -0
  165. package/dist/chunk-NGWTPED4.js.map +1 -0
  166. package/dist/chunk-PP4VCONW.js +739 -0
  167. package/dist/chunk-PP4VCONW.js.map +1 -0
  168. package/dist/chunk-PRMC2A6P.cjs +488 -0
  169. package/dist/chunk-PRMC2A6P.cjs.map +1 -0
  170. package/dist/chunk-PST6UU6S.cjs +742 -0
  171. package/dist/chunk-PST6UU6S.cjs.map +1 -0
  172. package/dist/chunk-Q7LK2UWH.js +33 -0
  173. package/dist/chunk-Q7LK2UWH.js.map +1 -0
  174. package/dist/chunk-SFV5LZPD.js +162 -0
  175. package/dist/chunk-SFV5LZPD.js.map +1 -0
  176. package/dist/chunk-SKXGYJJG.cjs +370 -0
  177. package/dist/chunk-SKXGYJJG.cjs.map +1 -0
  178. package/dist/chunk-SWLNKY6R.js +477 -0
  179. package/dist/chunk-SWLNKY6R.js.map +1 -0
  180. package/dist/chunk-TGVLNHUB.cjs +483 -0
  181. package/dist/chunk-TGVLNHUB.cjs.map +1 -0
  182. package/dist/chunk-TLLRW6S3.js +74 -0
  183. package/dist/chunk-TLLRW6S3.js.map +1 -0
  184. package/dist/chunk-TRAIXZ6M.cjs +140 -0
  185. package/dist/chunk-TRAIXZ6M.cjs.map +1 -0
  186. package/dist/chunk-U74A5VK5.cjs +74 -0
  187. package/dist/chunk-U74A5VK5.cjs.map +1 -0
  188. package/dist/chunk-UAVDLBTA.cjs +74 -0
  189. package/dist/chunk-UAVDLBTA.cjs.map +1 -0
  190. package/dist/chunk-UJWS6TRV.js +354 -0
  191. package/dist/chunk-UJWS6TRV.js.map +1 -0
  192. package/dist/chunk-UUJMUPB3.cjs +531 -0
  193. package/dist/chunk-UUJMUPB3.cjs.map +1 -0
  194. package/dist/chunk-VTKHZIJB.cjs +549 -0
  195. package/dist/chunk-VTKHZIJB.cjs.map +1 -0
  196. package/dist/chunk-YXPAWUXO.js +51 -0
  197. package/dist/chunk-YXPAWUXO.js.map +1 -0
  198. package/dist/chunk-ZD64SCZB.js +80 -0
  199. package/dist/chunk-ZD64SCZB.js.map +1 -0
  200. package/dist/core.cjs +28 -0
  201. package/dist/core.cjs.map +1 -0
  202. package/dist/core.d.cts +22 -0
  203. package/dist/core.d.ts +22 -0
  204. package/dist/core.js +3 -0
  205. package/dist/core.js.map +1 -0
  206. package/dist/dataLayerState-B4XmQjQN.d.cts +258 -0
  207. package/dist/dataLayerState-B4XmQjQN.d.ts +258 -0
  208. package/package.json +30 -52
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/charts/Axis/AxisReadout.tsx","../src/lib/chartUtils.ts","../../../node_modules/.pnpm/d3-shape@3.2.0/node_modules/d3-shape/src/constant.js","../../../node_modules/.pnpm/d3-path@3.1.0/node_modules/d3-path/src/path.js","../../../node_modules/.pnpm/d3-shape@3.2.0/node_modules/d3-shape/src/path.js","../../../node_modules/.pnpm/d3-shape@3.2.0/node_modules/d3-shape/src/array.js","../../../node_modules/.pnpm/d3-shape@3.2.0/node_modules/d3-shape/src/curve/linear.js","../../../node_modules/.pnpm/d3-shape@3.2.0/node_modules/d3-shape/src/point.js","../../../node_modules/.pnpm/d3-shape@3.2.0/node_modules/d3-shape/src/line.js","../../../node_modules/.pnpm/d3-shape@3.2.0/node_modules/d3-shape/src/curve/monotone.js","../../../node_modules/.pnpm/d3-shape@3.2.0/node_modules/d3-shape/src/curve/step.js","../src/components/charts/LineChart/LineChart.tsx","../src/components/charts/LineChart/LineSeriesSettings.tsx","../src/components/charts/LineChart/LineChartSettingsPanel.tsx","../src/components/charts/LineChart/definition.ts"],"names":["x","y","formatTick","jsxs","jsx","point","path","useState","useDataLayer","hasFieldDisplayFormat","useGetColumnDataForIds","useGetLiveIds","useMemo","useGetColumnDataForMultipleIds","finiteNumber","extent","scaleLinear","getChartAxisFields","getChartAxisLabel","useEffect","numericScale","BaseChart","Fragment","useId","Switch","Label","NumericInputEnter","useColumnNames","FieldSelector","multi_select_default","ComboBox","LineChartIcon","applyFilter"],"mappings":"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","file":"chunk-4QNENKTV.cjs","sourcesContent":["import { formatTick } from \"./Axis\";\n\ninterface AxisReadoutProps {\n x: number;\n y: number;\n xValue: number;\n yValue: number;\n width: number;\n height: number;\n color: string;\n label: string;\n rightAxis?: boolean;\n radius?: number;\n xFormatter?: (value: number) => string;\n yFormatter?: (value: number) => string;\n}\n\nexport function AxisReadout({\n x,\n y,\n xValue,\n yValue,\n width,\n height,\n color,\n label,\n rightAxis = false,\n radius = 4,\n xFormatter = formatTick,\n yFormatter = formatTick,\n}: AxisReadoutProps) {\n if (![x, y, xValue, yValue].every(Number.isFinite)) return null;\n const xText = xFormatter(xValue);\n const yText = yFormatter(yValue);\n const xLabelWidth = xText.length * 6 + 12;\n const yLabelWidth = yText.length * 6 + 12;\n const labelX = Math.max(\n xLabelWidth / 2,\n Math.min(width - xLabelWidth / 2, x)\n );\n const edge = rightAxis ? width : 0;\n\n return (\n <g\n className=\"eda-axis-readout\"\n pointerEvents=\"none\"\n role=\"img\"\n aria-label={label}\n >\n <g\n stroke={color}\n strokeOpacity={0.4}\n strokeWidth={1}\n strokeDasharray=\"2 3\"\n >\n <line x1={x} x2={x} y1={y} y2={height + 3} />\n <line x1={x} x2={edge} y1={y} y2={y} />\n </g>\n <circle\n cx={x}\n cy={y}\n r={radius}\n fill=\"var(--card)\"\n stroke={color}\n strokeWidth={1.5}\n />\n <circle cx={x} cy={y} r={2} fill={color} />\n <g fill=\"var(--card)\">\n <rect\n x={labelX - xLabelWidth / 2}\n y={height + 5}\n width={xLabelWidth}\n height={20}\n />\n <rect\n x={rightAxis ? edge + 3 : -yLabelWidth - 3}\n y={y - 10}\n width={yLabelWidth}\n height={20}\n />\n </g>\n <g fill={color} fontSize={10} fontWeight={600}>\n <text x={labelX} y={height + 18} textAnchor=\"middle\">\n {xText}\n </text>\n <text\n x={rightAxis ? edge + 8 : -8}\n y={y}\n dy=\".32em\"\n textAnchor={rightAxis ? \"start\" : \"end\"}\n >\n {yText}\n </text>\n </g>\n </g>\n );\n}\n","export interface DataPoint {\n x: number;\n y: number;\n}\n\nexport interface ReducedDataPoint extends DataPoint {\n type: \"min\" | \"max\" | \"start\";\n}\n\n/**\n * Reduces a dataset to a fixed number of buckets using min-max-start algorithm.\n * For each bucket, it keeps the start point, minimum point, and maximum point.\n * Small inputs keep every point in ascending X order.\n *\n * @param data Array of data points with x and y values\n * @param numBuckets Number of buckets to divide the data into (typically chart width)\n * @returns Array of reduced data points with type information\n */\nexport function reduceDataPoints(\n data: DataPoint[],\n numBuckets: number\n): ReducedDataPoint[] {\n // Handle edge cases\n if (!data || data.length === 0) {\n return [];\n }\n\n // Ensure numBuckets is valid and reasonable\n const validBuckets = Math.max(1, Math.min(1000, Math.floor(numBuckets)));\n\n const orderedData = [...data].sort((a, b) => {\n const aFinite = Number.isFinite(a.x);\n const bFinite = Number.isFinite(b.x);\n if (aFinite !== bFinite) return aFinite ? -1 : 1;\n return aFinite ? a.x - b.x : 0;\n });\n\n // If data is small enough, just convert to ReducedDataPoint format\n if (data.length <= validBuckets * 3) {\n return orderedData.map((point) => ({ ...point, type: \"start\" as const }));\n }\n\n const xExtent = {\n min: Math.min(...orderedData.map((d) => d.x)),\n max: Math.max(...orderedData.map((d) => d.x)),\n };\n\n // If all x values are the same, return just one point\n if (xExtent.min === xExtent.max) {\n const firstPoint = data[0];\n return firstPoint ? [{ ...firstPoint, type: \"start\" as const }] : [];\n }\n\n const buckets: ReducedDataPoint[][] = Array(validBuckets)\n .fill(null)\n .map(() => []);\n\n // Distribute points into buckets\n orderedData.forEach((point) => {\n const bucketIndex = Math.min(\n Math.floor(\n ((point.x - xExtent.min) / (xExtent.max - xExtent.min)) * validBuckets\n ),\n validBuckets - 1\n );\n buckets[bucketIndex]?.push({ ...point, type: \"start\" });\n });\n\n // Process each bucket to find min, max, and start points\n const result: ReducedDataPoint[] = [];\n buckets.forEach((bucket) => {\n if (bucket.length === 0) {\n return;\n }\n\n // Always include the first point as start\n const firstPoint = bucket[0];\n if (!firstPoint) {\n return;\n }\n result.push({ ...firstPoint, type: \"start\" });\n\n if (bucket.length > 1) {\n const minPoint = bucket.reduce((min, p) => (p.y < min.y ? p : min));\n const maxPoint = bucket.reduce((max, p) => (p.y > max.y ? p : max));\n\n // Only add min/max if they're different from the start point\n if (minPoint !== firstPoint) {\n result.push({ ...minPoint, type: \"min\" });\n }\n if (maxPoint !== firstPoint && maxPoint !== minPoint) {\n result.push({ ...maxPoint, type: \"max\" });\n }\n }\n });\n\n return result.sort((a, b) => a.x - b.x);\n}\n","export default function(x) {\n return function constant() {\n return x;\n };\n}\n","const pi = Math.PI,\n tau = 2 * pi,\n epsilon = 1e-6,\n tauEpsilon = tau - epsilon;\n\nfunction append(strings) {\n this._ += strings[0];\n for (let i = 1, n = strings.length; i < n; ++i) {\n this._ += arguments[i] + strings[i];\n }\n}\n\nfunction appendRound(digits) {\n let d = Math.floor(digits);\n if (!(d >= 0)) throw new Error(`invalid digits: ${digits}`);\n if (d > 15) return append;\n const k = 10 ** d;\n return function(strings) {\n this._ += strings[0];\n for (let i = 1, n = strings.length; i < n; ++i) {\n this._ += Math.round(arguments[i] * k) / k + strings[i];\n }\n };\n}\n\nexport class Path {\n constructor(digits) {\n this._x0 = this._y0 = // start of current subpath\n this._x1 = this._y1 = null; // end of current subpath\n this._ = \"\";\n this._append = digits == null ? append : appendRound(digits);\n }\n moveTo(x, y) {\n this._append`M${this._x0 = this._x1 = +x},${this._y0 = this._y1 = +y}`;\n }\n closePath() {\n if (this._x1 !== null) {\n this._x1 = this._x0, this._y1 = this._y0;\n this._append`Z`;\n }\n }\n lineTo(x, y) {\n this._append`L${this._x1 = +x},${this._y1 = +y}`;\n }\n quadraticCurveTo(x1, y1, x, y) {\n this._append`Q${+x1},${+y1},${this._x1 = +x},${this._y1 = +y}`;\n }\n bezierCurveTo(x1, y1, x2, y2, x, y) {\n this._append`C${+x1},${+y1},${+x2},${+y2},${this._x1 = +x},${this._y1 = +y}`;\n }\n arcTo(x1, y1, x2, y2, r) {\n x1 = +x1, y1 = +y1, x2 = +x2, y2 = +y2, r = +r;\n\n // Is the radius negative? Error.\n if (r < 0) throw new Error(`negative radius: ${r}`);\n\n let x0 = this._x1,\n y0 = this._y1,\n x21 = x2 - x1,\n y21 = y2 - y1,\n x01 = x0 - x1,\n y01 = y0 - y1,\n l01_2 = x01 * x01 + y01 * y01;\n\n // Is this path empty? Move to (x1,y1).\n if (this._x1 === null) {\n this._append`M${this._x1 = x1},${this._y1 = y1}`;\n }\n\n // Or, is (x1,y1) coincident with (x0,y0)? Do nothing.\n else if (!(l01_2 > epsilon));\n\n // Or, are (x0,y0), (x1,y1) and (x2,y2) collinear?\n // Equivalently, is (x1,y1) coincident with (x2,y2)?\n // Or, is the radius zero? Line to (x1,y1).\n else if (!(Math.abs(y01 * x21 - y21 * x01) > epsilon) || !r) {\n this._append`L${this._x1 = x1},${this._y1 = y1}`;\n }\n\n // Otherwise, draw an arc!\n else {\n let x20 = x2 - x0,\n y20 = y2 - y0,\n l21_2 = x21 * x21 + y21 * y21,\n l20_2 = x20 * x20 + y20 * y20,\n l21 = Math.sqrt(l21_2),\n l01 = Math.sqrt(l01_2),\n l = r * Math.tan((pi - Math.acos((l21_2 + l01_2 - l20_2) / (2 * l21 * l01))) / 2),\n t01 = l / l01,\n t21 = l / l21;\n\n // If the start tangent is not coincident with (x0,y0), line to.\n if (Math.abs(t01 - 1) > epsilon) {\n this._append`L${x1 + t01 * x01},${y1 + t01 * y01}`;\n }\n\n this._append`A${r},${r},0,0,${+(y01 * x20 > x01 * y20)},${this._x1 = x1 + t21 * x21},${this._y1 = y1 + t21 * y21}`;\n }\n }\n arc(x, y, r, a0, a1, ccw) {\n x = +x, y = +y, r = +r, ccw = !!ccw;\n\n // Is the radius negative? Error.\n if (r < 0) throw new Error(`negative radius: ${r}`);\n\n let dx = r * Math.cos(a0),\n dy = r * Math.sin(a0),\n x0 = x + dx,\n y0 = y + dy,\n cw = 1 ^ ccw,\n da = ccw ? a0 - a1 : a1 - a0;\n\n // Is this path empty? Move to (x0,y0).\n if (this._x1 === null) {\n this._append`M${x0},${y0}`;\n }\n\n // Or, is (x0,y0) not coincident with the previous point? Line to (x0,y0).\n else if (Math.abs(this._x1 - x0) > epsilon || Math.abs(this._y1 - y0) > epsilon) {\n this._append`L${x0},${y0}`;\n }\n\n // Is this arc empty? We’re done.\n if (!r) return;\n\n // Does the angle go the wrong way? Flip the direction.\n if (da < 0) da = da % tau + tau;\n\n // Is this a complete circle? Draw two arcs to complete the circle.\n if (da > tauEpsilon) {\n this._append`A${r},${r},0,1,${cw},${x - dx},${y - dy}A${r},${r},0,1,${cw},${this._x1 = x0},${this._y1 = y0}`;\n }\n\n // Is this arc non-empty? Draw an arc!\n else if (da > epsilon) {\n this._append`A${r},${r},0,${+(da >= pi)},${cw},${this._x1 = x + r * Math.cos(a1)},${this._y1 = y + r * Math.sin(a1)}`;\n }\n }\n rect(x, y, w, h) {\n this._append`M${this._x0 = this._x1 = +x},${this._y0 = this._y1 = +y}h${w = +w}v${+h}h${-w}Z`;\n }\n toString() {\n return this._;\n }\n}\n\nexport function path() {\n return new Path;\n}\n\n// Allow instanceof d3.path\npath.prototype = Path.prototype;\n\nexport function pathRound(digits = 3) {\n return new Path(+digits);\n}\n","import {Path} from \"d3-path\";\n\nexport function withPath(shape) {\n let digits = 3;\n\n shape.digits = function(_) {\n if (!arguments.length) return digits;\n if (_ == null) {\n digits = null;\n } else {\n const d = Math.floor(_);\n if (!(d >= 0)) throw new RangeError(`invalid digits: ${_}`);\n digits = d;\n }\n return shape;\n };\n\n return () => new Path(digits);\n}\n","export var slice = Array.prototype.slice;\n\nexport default function(x) {\n return typeof x === \"object\" && \"length\" in x\n ? x // Array, TypedArray, NodeList, array-like\n : Array.from(x); // Map, Set, iterable, string, or anything else\n}\n","function Linear(context) {\n this._context = context;\n}\n\nLinear.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._point = 0;\n },\n lineEnd: function() {\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; // falls through\n default: this._context.lineTo(x, y); break;\n }\n }\n};\n\nexport default function(context) {\n return new Linear(context);\n}\n","export function x(p) {\n return p[0];\n}\n\nexport function y(p) {\n return p[1];\n}\n","import array from \"./array.js\";\nimport constant from \"./constant.js\";\nimport curveLinear from \"./curve/linear.js\";\nimport {withPath} from \"./path.js\";\nimport {x as pointX, y as pointY} from \"./point.js\";\n\nexport default function(x, y) {\n var defined = constant(true),\n context = null,\n curve = curveLinear,\n output = null,\n path = withPath(line);\n\n x = typeof x === \"function\" ? x : (x === undefined) ? pointX : constant(x);\n y = typeof y === \"function\" ? y : (y === undefined) ? pointY : constant(y);\n\n function line(data) {\n var i,\n n = (data = array(data)).length,\n d,\n defined0 = false,\n buffer;\n\n if (context == null) output = curve(buffer = path());\n\n for (i = 0; i <= n; ++i) {\n if (!(i < n && defined(d = data[i], i, data)) === defined0) {\n if (defined0 = !defined0) output.lineStart();\n else output.lineEnd();\n }\n if (defined0) output.point(+x(d, i, data), +y(d, i, data));\n }\n\n if (buffer) return output = null, buffer + \"\" || null;\n }\n\n line.x = function(_) {\n return arguments.length ? (x = typeof _ === \"function\" ? _ : constant(+_), line) : x;\n };\n\n line.y = function(_) {\n return arguments.length ? (y = typeof _ === \"function\" ? _ : constant(+_), line) : y;\n };\n\n line.defined = function(_) {\n return arguments.length ? (defined = typeof _ === \"function\" ? _ : constant(!!_), line) : defined;\n };\n\n line.curve = function(_) {\n return arguments.length ? (curve = _, context != null && (output = curve(context)), line) : curve;\n };\n\n line.context = function(_) {\n return arguments.length ? (_ == null ? context = output = null : output = curve(context = _), line) : context;\n };\n\n return line;\n}\n","function sign(x) {\n return x < 0 ? -1 : 1;\n}\n\n// Calculate the slopes of the tangents (Hermite-type interpolation) based on\n// the following paper: Steffen, M. 1990. A Simple Method for Monotonic\n// Interpolation in One Dimension. Astronomy and Astrophysics, Vol. 239, NO.\n// NOV(II), P. 443, 1990.\nfunction slope3(that, x2, y2) {\n var h0 = that._x1 - that._x0,\n h1 = x2 - that._x1,\n s0 = (that._y1 - that._y0) / (h0 || h1 < 0 && -0),\n s1 = (y2 - that._y1) / (h1 || h0 < 0 && -0),\n p = (s0 * h1 + s1 * h0) / (h0 + h1);\n return (sign(s0) + sign(s1)) * Math.min(Math.abs(s0), Math.abs(s1), 0.5 * Math.abs(p)) || 0;\n}\n\n// Calculate a one-sided slope.\nfunction slope2(that, t) {\n var h = that._x1 - that._x0;\n return h ? (3 * (that._y1 - that._y0) / h - t) / 2 : t;\n}\n\n// According to https://en.wikipedia.org/wiki/Cubic_Hermite_spline#Representations\n// \"you can express cubic Hermite interpolation in terms of cubic Bézier curves\n// with respect to the four values p0, p0 + m0 / 3, p1 - m1 / 3, p1\".\nfunction point(that, t0, t1) {\n var x0 = that._x0,\n y0 = that._y0,\n x1 = that._x1,\n y1 = that._y1,\n dx = (x1 - x0) / 3;\n that._context.bezierCurveTo(x0 + dx, y0 + dx * t0, x1 - dx, y1 - dx * t1, x1, y1);\n}\n\nfunction MonotoneX(context) {\n this._context = context;\n}\n\nMonotoneX.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 =\n this._y0 = this._y1 =\n this._t0 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 2: this._context.lineTo(this._x1, this._y1); break;\n case 3: point(this, this._t0, slope2(this, this._t0)); break;\n }\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n var t1 = NaN;\n\n x = +x, y = +y;\n if (x === this._x1 && y === this._y1) return; // Ignore coincident points.\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; point(this, slope2(this, t1 = slope3(this, x, y)), t1); break;\n default: point(this, this._t0, t1 = slope3(this, x, y)); break;\n }\n\n this._x0 = this._x1, this._x1 = x;\n this._y0 = this._y1, this._y1 = y;\n this._t0 = t1;\n }\n}\n\nfunction MonotoneY(context) {\n this._context = new ReflectContext(context);\n}\n\n(MonotoneY.prototype = Object.create(MonotoneX.prototype)).point = function(x, y) {\n MonotoneX.prototype.point.call(this, y, x);\n};\n\nfunction ReflectContext(context) {\n this._context = context;\n}\n\nReflectContext.prototype = {\n moveTo: function(x, y) { this._context.moveTo(y, x); },\n closePath: function() { this._context.closePath(); },\n lineTo: function(x, y) { this._context.lineTo(y, x); },\n bezierCurveTo: function(x1, y1, x2, y2, x, y) { this._context.bezierCurveTo(y1, x1, y2, x2, y, x); }\n};\n\nexport function monotoneX(context) {\n return new MonotoneX(context);\n}\n\nexport function monotoneY(context) {\n return new MonotoneY(context);\n}\n","function Step(context, t) {\n this._context = context;\n this._t = t;\n}\n\nStep.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x = this._y = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n if (0 < this._t && this._t < 1 && this._point === 2) this._context.lineTo(this._x, this._y);\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n if (this._line >= 0) this._t = 1 - this._t, this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; // falls through\n default: {\n if (this._t <= 0) {\n this._context.lineTo(this._x, y);\n this._context.lineTo(x, y);\n } else {\n var x1 = this._x * (1 - this._t) + x * this._t;\n this._context.lineTo(x1, this._y);\n this._context.lineTo(x1, y);\n }\n break;\n }\n }\n this._x = x, this._y = y;\n }\n};\n\nexport default function(context) {\n return new Step(context, 0.5);\n}\n\nexport function stepBefore(context) {\n return new Step(context, 0);\n}\n\nexport function stepAfter(context) {\n return new Step(context, 1);\n}\n","import { finiteNumber } from \"@/lib/numeric\";\nimport { numericScale } from \"../Axis/numericScale\";\nimport { AxisReadout } from \"../Axis/AxisReadout\";\nimport { reduceDataPoints } from \"@/lib/chartUtils\";\nimport { useDataLayer } from \"@/providers/DataLayerProvider\";\nimport { hasFieldDisplayFormat } from \"@/lib/fieldSettings\";\nimport { type BaseChartProps } from \"@/types/ChartTypes\";\nimport { extent } from \"d3-array\";\nimport { scaleLinear } from \"d3-scale\";\nimport { curveLinear, curveMonotoneX, curveStepAfter, line } from \"d3-shape\";\nimport { useEffect, useMemo, useState, type FC } from \"react\";\nimport { BaseChart } from \"../BaseChart\";\nimport { getChartAxisFields, getChartAxisLabel } from \"../chartAccessibility\";\nimport {\n useGetColumnDataForIds,\n useGetColumnDataForMultipleIds,\n} from \"../useGetColumnData\";\nimport { useGetLiveIds } from \"../useGetLiveData\";\nimport { type LineChartSettings, DEFAULT_SERIES_SETTINGS } from \"./definition\";\n\nconst curveTypes = {\n linear: curveLinear,\n monotoneX: curveMonotoneX,\n step: curveStepAfter,\n} as const;\n\ntype CurveType = keyof typeof curveTypes;\n\n// Define color palettes\nconst COLOR_PALETTES = {\n default: [\n \"#2563eb\", // blue-600\n \"#dc2626\", // red-600\n \"#9333ea\", // purple-600\n \"#ea580c\", // orange-600\n \"#0891b2\", // cyan-600\n \"#4f46e5\", // indigo-600\n \"#be123c\", // rose-600\n \"#ca8a04\", // yellow-600\n \"#16a34a\", // green-600\n \"#059669\", // emerald-600\n ],\n} as const;\n\nexport const LineChart: FC<BaseChartProps<LineChartSettings>> = ({\n settings,\n width,\n height,\n facetIds,\n}) => {\n const [hovered, setHovered] = useState<{\n x: number;\n y: number;\n field: string;\n } | null>(null);\n const updateChart = useDataLayer((state) => state.updateChart);\n const getFieldLabel = useDataLayer((state) => state.getFieldLabel);\n const formatFieldValue = useDataLayer((state) => state.formatFieldValue);\n const fieldSettings = useDataLayer((state) => state.fieldSettings);\n void fieldSettings;\n const displayValue = (field: string, value: number) =>\n hasFieldDisplayFormat(fieldSettings[field])\n ? (formatFieldValue?.(field, value) ?? String(value))\n : String(value);\n\n // Get all data for axis limits calculation\n const allXData = useGetColumnDataForIds(settings.xField);\n\n // Get filtered data for rendering\n const liveIds = useGetLiveIds(settings);\n const selectedIds = useMemo(\n () => (facetIds ? liveIds.filter((id) => facetIds.includes(id)) : liveIds),\n [liveIds, facetIds]\n );\n const liveXData = useGetColumnDataForIds(settings.xField, selectedIds);\n const allSeriesData = useGetColumnDataForMultipleIds(settings.seriesField);\n\n // Get all series data using the new hook\n const liveSeriesData = useGetColumnDataForMultipleIds(\n settings.seriesField,\n selectedIds\n );\n\n const baseMargin = settings.margin;\n const yValuesByAxis = settings.seriesField.reduce(\n (values, field) => {\n const useRightAxis = settings.seriesSettings[field]?.useRightAxis;\n (allSeriesData[field] ?? []).forEach((value) => {\n const y = finiteNumber(value) ?? NaN;\n if (Number.isFinite(y)) {\n values[useRightAxis ? \"right\" : \"left\"].push(y);\n }\n });\n return values;\n },\n { left: [] as number[], right: [] as number[] }\n );\n const leftYExtent = extent(yValuesByAxis.left) as [number, number];\n const leftYTicks = Number.isFinite(leftYExtent[0])\n ? scaleLinear().domain(leftYExtent).nice().ticks(5)\n : [];\n const axisFields = getChartAxisFields(settings);\n const xAxisLabel = getChartAxisLabel(\n axisFields.x,\n settings.xAxisLabel,\n getFieldLabel\n );\n const yAxisLabel = getChartAxisLabel(\n axisFields.y,\n settings.yAxisLabel,\n getFieldLabel\n );\n const requestedLabelMargin = Math.max(\n baseMargin.left,\n ...leftYTicks.map(\n (tick) => String(tick).length * 7 + (yAxisLabel ? 38 : 18)\n )\n );\n const minPlotWidth = Math.min(\n 80,\n Math.max(0, width - baseMargin.left - baseMargin.right)\n );\n const maxLabelMargin = Math.max(0, width - baseMargin.right - minPlotWidth);\n const margin = {\n ...baseMargin,\n left: Math.min(requestedLabelMargin, maxLabelMargin),\n bottom: Math.max(baseMargin.bottom, xAxisLabel ? 46 : 28),\n };\n if (\n settings.seriesField.some(\n (field) => settings.seriesSettings[field]?.useRightAxis\n )\n ) {\n margin.right = Math.max(margin.right, 60);\n }\n\n // Adjust margins based on legend position\n if (settings.showLegend) {\n switch (settings.legendPosition) {\n case \"top\":\n margin.top += 18;\n break;\n case \"bottom\":\n margin.bottom += 18;\n break;\n case \"right\":\n margin.right += Math.min(110, width * 0.24);\n break;\n case \"left\":\n margin.left += Math.min(110, width * 0.24);\n break;\n }\n }\n\n const innerWidth = width - margin.left - margin.right;\n const innerHeight = height - margin.top - margin.bottom;\n\n // Convert data to numbers for d3\n const processedLiveSeriesData = useMemo(() => {\n const orderedIndices = liveXData\n .map((_, index) => index)\n .sort((a, b) => {\n const aValue = liveXData[a];\n const bValue = liveXData[b];\n const aX = finiteNumber(aValue) ?? NaN;\n const bX = finiteNumber(bValue) ?? NaN;\n const aFinite = Number.isFinite(aX);\n const bFinite = Number.isFinite(bX);\n if (aFinite !== bFinite) return aFinite ? -1 : 1;\n return aFinite ? aX - bX || a - b : a - b;\n });\n\n return settings.seriesField.map((field) => {\n const data = liveSeriesData[field] ?? [];\n const reducedData: Array<{ x: number; y: number | null }> = [];\n let segment: Array<{ x: number; y: number }> = [];\n\n const flushSegment = () => {\n if (segment.length > 0) {\n reducedData.push(...reduceDataPoints(segment, innerWidth));\n segment = [];\n }\n };\n\n orderedIndices.forEach((i) => {\n const value = data[i];\n const xValue = liveXData[i];\n const x = finiteNumber(xValue) ?? NaN;\n const y = finiteNumber(value) ?? NaN;\n if (!Number.isFinite(x) || !Number.isFinite(y)) {\n flushSegment();\n reducedData.push({ x, y: null });\n return;\n }\n segment.push({ x, y });\n });\n flushSegment();\n\n return { name: field, data: reducedData };\n });\n }, [settings.seriesField, liveSeriesData, liveXData, innerWidth]);\n\n // Ensure consistent color assignment for series with better distribution\n const seriesColors = useMemo(() => {\n const colors: Record<string, string> = {};\n const palette = COLOR_PALETTES.default;\n\n // First pass - keep existing colors and track which palette colors are used\n const usedPaletteColors = new Set<string>();\n settings.seriesField.forEach((field) => {\n const existingColor = settings.seriesSettings[field]?.lineColor;\n if (existingColor && existingColor !== \"#000000\") {\n colors[field] = existingColor;\n if ((palette as readonly string[]).includes(existingColor)) {\n usedPaletteColors.add(existingColor);\n }\n }\n });\n\n // Get unused palette colors\n const unusedPaletteColors = (palette as readonly string[]).filter(\n (color) => !usedPaletteColors.has(color)\n );\n\n // Second pass - assign colors to series that need them\n // splice off the first color from the unused palette colors\n settings.seriesField.forEach((field) => {\n if (colors[field]) return;\n const nextColor = unusedPaletteColors.shift();\n\n // Use an unused palette color\n colors[field] =\n nextColor ??\n palette[settings.seriesField.indexOf(field) % palette.length]!;\n });\n\n return colors;\n }, [settings.seriesField, settings.seriesSettings]);\n\n // Store assigned colors back into settings using updateChart\n useEffect(() => {\n requestAnimationFrame(() => {\n const newSeriesSettings = { ...settings.seriesSettings };\n let hasChanges = false;\n\n settings.seriesField.forEach((field) => {\n if (!newSeriesSettings[field]) {\n newSeriesSettings[field] = { ...DEFAULT_SERIES_SETTINGS };\n hasChanges = true;\n }\n\n // Only update if color is undefined or \"default\"\n if (\n !newSeriesSettings[field]?.lineColor ||\n newSeriesSettings[field]?.lineColor === \"default\"\n ) {\n newSeriesSettings[field] = {\n ...newSeriesSettings[field]!,\n lineColor: seriesColors[field],\n };\n hasChanges = true;\n }\n });\n\n if (hasChanges) {\n updateChart(settings.id, {\n seriesSettings: newSeriesSettings,\n });\n }\n });\n }, [\n seriesColors,\n settings.id,\n settings.seriesField,\n settings.seriesSettings,\n updateChart,\n ]);\n\n if (processedLiveSeriesData.length === 0) {\n return null;\n }\n\n // Process data and create scales\n const xExtent = extent(\n allXData.map((value) => finiteNumber(value) ?? NaN).filter(Number.isFinite)\n ) as [number, number];\n\n // Calculate y extent across all series\n const rightAxisSeries = processedLiveSeriesData.filter(\n (series) => settings.seriesSettings[series.name]?.useRightAxis\n );\n\n const rightYExtent = extent(yValuesByAxis.right) as [number, number];\n\n const xScale = numericScale(settings.xAxis)\n .domain(xExtent)\n .range([0, innerWidth])\n .nice();\n const leftYScale = numericScale(settings.yAxis)\n .domain(leftYExtent)\n .range([innerHeight, 0])\n .nice();\n const rightYScale = numericScale(settings.yAxis)\n .domain(rightYExtent)\n .range([innerHeight, 0])\n .nice();\n\n // Create line generator with dynamic y-accessor\n const createLineGenerator = (yField: string) =>\n line<(typeof processedLiveSeriesData)[0][\"data\"][0]>()\n .defined((d) => d.y != null && Number.isFinite(d.x))\n .x((d) => xScale(d.x))\n .y((d) =>\n settings.seriesSettings[yField]?.useRightAxis\n ? rightYScale(d.y ?? 0)\n : leftYScale(d.y ?? 0)\n )\n .curve(curveTypes[settings.styles.curveType as CurveType]);\n\n const Legend = () => {\n if (!settings.showLegend) return null;\n const vertical =\n settings.legendPosition === \"left\" || settings.legendPosition === \"right\";\n const sideWidth = Math.min(100, width * 0.22);\n const position =\n settings.legendPosition === \"top\"\n ? { top: 0, left: margin.left, right: baseMargin.right }\n : settings.legendPosition === \"bottom\"\n ? { bottom: 0, left: margin.left, right: baseMargin.right }\n : settings.legendPosition === \"left\"\n ? { left: 0, top: margin.top, width: sideWidth }\n : { right: 0, top: margin.top, width: sideWidth };\n return (\n <div\n className=\"eda-line-legend\"\n style={{ ...position, flexDirection: vertical ? \"column\" : \"row\" }}\n aria-label=\"Chart series\"\n >\n {settings.seriesField.map((name) => (\n <span key={name} className=\"eda-line-legend-item\">\n <svg width=\"14\" height=\"6\" aria-hidden=\"true\">\n <line\n x1=\"0\"\n x2=\"14\"\n y1=\"3\"\n y2=\"3\"\n stroke={seriesColors[name]}\n strokeWidth=\"2\"\n strokeDasharray={\n settings.seriesSettings[name]?.lineStyle === \"dashed\"\n ? \"4 2\"\n : settings.seriesSettings[name]?.lineStyle === \"dotted\"\n ? \"1 2\"\n : undefined\n }\n />\n </svg>\n <span>\n {name}\n {settings.seriesSettings[name]?.useRightAxis ? \" ↗\" : \"\"}\n </span>\n </span>\n ))}\n </div>\n );\n };\n\n const hoverX = hovered ? hovered.x : NaN;\n const hoverY = hovered ? hovered.y : NaN;\n const hoverRight = hovered\n ? settings.seriesSettings[hovered.field]?.useRightAxis\n : false;\n\n return (\n <div\n className=\"relative\"\n style={{ width, height }}\n onPointerLeave={() => setHovered(null)}\n onPointerDownCapture={() => setHovered(null)}\n onKeyDownCapture={(event) => {\n if (event.key === \"Escape\") setHovered(null);\n }}\n onPointerMove={(event) => {\n if (event.buttons) return;\n const rect = event.currentTarget.getBoundingClientRect();\n const x = event.clientX - rect.left - margin.left;\n const y = event.clientY - rect.top - margin.top;\n if (x < 0 || x > innerWidth || y < 0 || y > innerHeight) {\n setHovered(null);\n return;\n }\n const target = xScale.invert(x);\n let nearestX = NaN;\n let distance = Infinity;\n for (const series of processedLiveSeriesData) {\n for (const point of series.data) {\n if (!Number.isFinite(point.x)) continue;\n const next = Math.abs(point.x - target);\n if (next < distance) {\n nearestX = point.x;\n distance = next;\n }\n }\n }\n\n if (!Number.isFinite(nearestX)) {\n setHovered(null);\n return;\n }\n\n let field: string | null = null;\n let valueAtX = NaN;\n distance = Infinity;\n for (const series of processedLiveSeriesData) {\n for (const point of series.data) {\n if (point.x !== nearestX || point.y == null) continue;\n const scale = settings.seriesSettings[series.name]?.useRightAxis\n ? rightYScale\n : leftYScale;\n const next = Math.abs(scale(point.y) - y);\n if (next < distance) {\n field = series.name;\n valueAtX = point.y;\n distance = next;\n }\n }\n }\n setHovered(field === null ? null : { x: nearestX, y: valueAtX, field });\n }}\n >\n <BaseChart\n width={width}\n height={height}\n xScale={xScale}\n yScale={leftYScale}\n settings={{\n ...settings,\n margin,\n xAxis: {\n ...settings.xAxis,\n grid: settings.xAxis.grid ?? settings.showYGrid,\n },\n yAxis: {\n ...settings.yAxis,\n grid: settings.yAxis.grid ?? settings.showXGrid,\n },\n }}\n overlay={\n <>\n {/* Right Y-Axis */}\n {rightAxisSeries.length > 0 && (\n <g transform={`translate(${innerWidth}, 0)`}>\n {rightYScale.ticks(5).map((tick: number) => (\n <g\n key={tick}\n transform={`translate(0, ${rightYScale(tick)})`}\n >\n <line x1={0} x2={6} y1={0} y2={0} stroke=\"currentColor\" />\n <text\n x={9}\n y={0}\n dy=\".32em\"\n fontSize={10}\n textAnchor=\"start\"\n fill=\"currentColor\"\n >\n {tick}\n </text>\n </g>\n ))}\n </g>\n )}\n {hovered && (\n <AxisReadout\n x={xScale(hoverX)}\n y={(hoverRight ? rightYScale : leftYScale)(hoverY)}\n xValue={hoverX}\n yValue={hoverY}\n width={innerWidth}\n height={innerHeight}\n color={seriesColors[hovered.field]!}\n rightAxis={hoverRight}\n xFormatter={(value) => displayValue(settings.xField, value)}\n yFormatter={(value) => displayValue(hovered.field, value)}\n label={`${getFieldLabel?.(settings.xField) ?? settings.xField}: ${displayValue(settings.xField, hoverX)}; ${getFieldLabel?.(hovered.field) ?? hovered.field}: ${displayValue(hovered.field, hoverY)}`}\n />\n )}\n </>\n }\n brushingMode=\"horizontal\"\n onBrushChange={(extent) =>\n updateChart(settings.id, {\n filters: [\n ...settings.filters.filter(\n (filter) => filter.field !== settings.xField\n ),\n ...(extent\n ? [\n {\n type: \"range\" as const,\n field: settings.xField,\n min: xScale.invert(extent[0][0]),\n max: xScale.invert(extent[1][0]),\n },\n ]\n : []),\n ],\n })\n }\n >\n <g>\n {/* Lines */}\n {processedLiveSeriesData.map((series) => {\n const lineGenerator = createLineGenerator(series.name);\n const seriesSettings = settings.seriesSettings[series.name] ?? {\n showPoints: false,\n pointSize: 4,\n pointOpacity: 1,\n lineWidth: 2,\n lineOpacity: 0.8,\n lineStyle: \"solid\",\n useRightAxis: false,\n };\n\n const seriesColor = seriesColors[series.name];\n\n return (\n <g key={series.name}>\n <path\n d={lineGenerator(series.data) || undefined}\n fill=\"none\"\n stroke={seriesColor}\n strokeWidth={seriesSettings.lineWidth}\n strokeOpacity={seriesSettings.lineOpacity}\n strokeDasharray={\n seriesSettings.lineStyle === \"dashed\"\n ? \"5,5\"\n : seriesSettings.lineStyle === \"dotted\"\n ? \"2,2\"\n : undefined\n }\n />\n {seriesSettings.showPoints &&\n series.data.map((d, j) =>\n d.y == null ? null : (\n <circle\n key={j}\n cx={xScale(d.x)}\n cy={(seriesSettings.useRightAxis\n ? rightYScale\n : leftYScale)(d.y)}\n r={seriesSettings.pointSize}\n fill={seriesColor}\n fillOpacity={seriesSettings.pointOpacity}\n />\n )\n )}\n </g>\n );\n })}\n </g>\n </BaseChart>\n <Legend />\n </div>\n );\n};\n","import { NumericInputEnter } from \"@/components/NumericInputEnter\";\nimport { Label } from \"@/components/ui/label\";\nimport { Switch } from \"@/components/ui/switch\";\nimport { useId } from \"react\";\nimport { type SeriesSettings } from \"./definition\";\n\ninterface LineSeriesSettingsProps {\n seriesName: string;\n settings: SeriesSettings;\n onSettingsChange: (settings: SeriesSettings) => void;\n}\n\nexport function LineSeriesSettings({\n seriesName,\n settings,\n onSettingsChange,\n}: LineSeriesSettingsProps) {\n const id = useId();\n const update = (next: Partial<SeriesSettings>) =>\n onSettingsChange({ ...settings, ...next });\n const numericFields = [\n { key: \"lineWidth\", label: \"Line width\", min: 1, max: 10, step: 0.5 },\n { key: \"lineOpacity\", label: \"Line opacity\", min: 0, max: 1, step: 0.1 },\n ...(settings.showPoints\n ? [\n { key: \"pointSize\", label: \"Point size\", min: 1, max: 20, step: 1 },\n {\n key: \"pointOpacity\",\n label: \"Point opacity\",\n min: 0,\n max: 1,\n step: 0.1,\n },\n ]\n : []),\n ] as const;\n return (\n <fieldset className=\"space-y-3 border-t border-border pt-3\">\n <legend className=\"px-1 text-sm font-semibold\">{seriesName}</legend>\n <div className=\"flex flex-wrap items-center gap-5\">\n <div className=\"flex items-center gap-2\">\n <Switch\n id={`${id}-points`}\n aria-label={`${seriesName} points`}\n checked={settings.showPoints}\n onCheckedChange={(showPoints) => update({ showPoints })}\n />\n <Label htmlFor={`${id}-points`}>Show points</Label>\n </div>\n <div className=\"flex items-center gap-2\">\n <Switch\n id={`${id}-axis`}\n aria-label={`${seriesName} right axis`}\n checked={settings.useRightAxis}\n onCheckedChange={(useRightAxis) => update({ useRightAxis })}\n />\n <Label htmlFor={`${id}-axis`}>Right axis</Label>\n </div>\n </div>\n <div className=\"grid grid-cols-2 gap-3\">\n <div className=\"space-y-1\">\n <Label htmlFor={`${id}-color`}>Color</Label>\n <input\n id={`${id}-color`}\n aria-label={`${seriesName} color`}\n type=\"color\"\n value={settings.lineColor ?? \"#3479a8\"}\n onChange={(event) => update({ lineColor: event.target.value })}\n className=\"h-8 w-full rounded border\"\n />\n </div>\n <div className=\"space-y-1\">\n <Label htmlFor={`${id}-style`}>Line style</Label>\n <select\n id={`${id}-style`}\n value={settings.lineStyle}\n onChange={(event) =>\n update({\n lineStyle: event.target.value as SeriesSettings[\"lineStyle\"],\n })\n }\n className=\"h-8 w-full rounded border bg-background px-2 text-sm\"\n >\n <option value=\"solid\">Solid</option>\n <option value=\"dashed\">Dashed</option>\n <option value=\"dotted\">Dotted</option>\n </select>\n </div>\n {numericFields.map(({ key, label, min, max, step }) => (\n <div key={key} className=\"space-y-1\">\n <Label htmlFor={`${id}-${key}`}>{label}</Label>\n <NumericInputEnter\n id={`${id}-${key}`}\n value={settings[key as keyof SeriesSettings] as number}\n onChange={(value) => update({ [key]: value })}\n min={min}\n max={max}\n stepSmall={step}\n className=\"h-8\"\n />\n </div>\n ))}\n </div>\n </fieldset>\n );\n}\n","import { FieldSelector } from \"@/components/FieldSelector\";\nimport { Label } from \"@/components/ui/label\";\nimport { Switch } from \"@/components/ui/switch\";\nimport { type ChartSettingsPanelProps } from \"@/types/ChartTypes\";\nimport { type FC } from \"react\";\nimport {\n type LineChartSettings,\n type SeriesSettings,\n DEFAULT_SERIES_SETTINGS,\n} from \"./definition\";\nimport { LineSeriesSettings } from \"./LineSeriesSettings\";\nimport { ComboBox } from \"@/components/ComboBox\";\nimport MultiSelect, { type Option } from \"@/components/ui/multi-select\";\nimport { useColumnNames } from \"@/components/charts/PivotTable/useColumnNames\";\n\nexport const LineChartSettingsPanel: FC<\n ChartSettingsPanelProps<LineChartSettings>\n> = ({ settings, onSettingsChange }) => {\n const updateSettings = (updates: Partial<LineChartSettings>) => {\n onSettingsChange({ ...settings, ...updates });\n };\n\n const updateStyles = (updates: Partial<LineChartSettings[\"styles\"]>) => {\n updateSettings({\n styles: { ...settings.styles, ...updates },\n });\n };\n\n const updateSeriesSettings = (\n seriesName: string,\n seriesSettings: SeriesSettings\n ) => {\n updateSettings({\n seriesSettings: {\n ...settings.seriesSettings,\n [seriesName]: seriesSettings,\n },\n });\n };\n\n const availableFields = useColumnNames();\n\n return (\n <div className=\"space-y-4\">\n <div className=\"grid grid-cols-[120px_1fr] items-center gap-4\">\n <Label>X Field</Label>\n <FieldSelector\n label=\"\"\n value={settings.xField}\n onChange={(value) => updateSettings({ xField: value })}\n />\n\n <Label>Series Fields</Label>\n <MultiSelect\n options={availableFields.map((f) => ({\n label: f,\n value: f,\n }))}\n value={settings.seriesField.map((f) => ({\n label: f,\n value: f,\n }))}\n onChange={(values: Option[]) => {\n const newSeriesFields = values.map((v) => v.value);\n const newSeriesSettings = { ...settings.seriesSettings };\n\n // Add default settings for new series\n newSeriesFields.forEach((field) => {\n if (!newSeriesSettings[field]) {\n newSeriesSettings[field] = { ...DEFAULT_SERIES_SETTINGS };\n }\n });\n\n // Remove settings for removed series\n Object.keys(newSeriesSettings).forEach((field) => {\n if (!newSeriesFields.includes(field)) {\n delete newSeriesSettings[field];\n }\n });\n\n updateSettings({\n seriesField: newSeriesFields,\n seriesSettings: newSeriesSettings,\n });\n }}\n />\n </div>\n\n <div className=\"grid grid-cols-[120px_1fr] items-center gap-4\">\n <Label>Line Style</Label>\n <ComboBox\n value={{\n label:\n settings.styles.curveType === \"linear\"\n ? \"Linear\"\n : settings.styles.curveType === \"monotoneX\"\n ? \"Smooth\"\n : \"Step\",\n value: settings.styles.curveType,\n }}\n options={[\n { label: \"Linear\", value: \"linear\" as const },\n { label: \"Smooth\", value: \"monotoneX\" as const },\n { label: \"Step\", value: \"step\" as const },\n ]}\n onChange={(option) =>\n updateStyles({ curveType: option?.value ?? \"linear\" })\n }\n optionToString={(option) => option.label}\n />\n\n <Label>Show Legend</Label>\n <div className=\"flex items-center\">\n <Switch\n checked={settings.showLegend}\n onCheckedChange={(checked) =>\n updateSettings({ showLegend: checked })\n }\n />\n </div>\n\n {settings.showLegend && (\n <>\n <Label>Legend Position</Label>\n <ComboBox\n value={{\n label:\n settings.legendPosition.charAt(0).toUpperCase() +\n settings.legendPosition.slice(1),\n value: settings.legendPosition,\n }}\n options={[\n { label: \"Top\", value: \"top\" as const },\n { label: \"Right\", value: \"right\" as const },\n { label: \"Bottom\", value: \"bottom\" as const },\n { label: \"Left\", value: \"left\" as const },\n ]}\n onChange={(option) =>\n updateSettings({\n legendPosition: option?.value ?? \"top\",\n })\n }\n optionToString={(option) => option.label}\n />\n </>\n )}\n </div>\n\n <div className=\"space-y-4\">\n {settings.seriesField.map((field) => (\n <LineSeriesSettings\n key={field}\n seriesName={field}\n settings={settings.seriesSettings[field] ?? DEFAULT_SERIES_SETTINGS}\n onSettingsChange={(next) => updateSeriesSettings(field, next)}\n />\n ))}\n </div>\n </div>\n );\n};\n","import {\n type BaseChartSettings,\n type ChartDefinition,\n type ChartLayout,\n type datum,\n} from \"@/types/ChartTypes\";\nimport { applyFilter } from \"@/hooks/applyFilter\";\nimport { IdType } from \"@/providers/DataLayerProvider\";\nimport { Filter } from \"@/types/FilterTypes\";\nimport { LineChart as LineChartIcon } from \"lucide-react\";\nimport { LineChart } from \"./LineChart\";\nimport { LineChartSettingsPanel } from \"./LineChartSettingsPanel\";\n\nexport interface SeriesSettings {\n showPoints: boolean;\n pointSize: number;\n pointOpacity: number;\n lineWidth: number;\n lineOpacity: number;\n lineColor?: string;\n lineStyle: \"solid\" | \"dashed\" | \"dotted\";\n useRightAxis: boolean;\n}\n\nexport interface LineChartSettings extends BaseChartSettings {\n type: \"line\";\n\n // Data fields\n xField: string;\n seriesField: string[];\n\n // Series settings\n seriesSettings: Record<string, SeriesSettings>;\n\n // Global line styling\n styles: {\n curveType: \"linear\" | \"monotoneX\" | \"step\";\n };\n\n // Grid options\n showXGrid: boolean;\n showYGrid: boolean;\n\n // Legend options\n showLegend: boolean;\n legendPosition: \"top\" | \"right\" | \"bottom\" | \"left\";\n}\n\nexport const DEFAULT_SERIES_SETTINGS: SeriesSettings = {\n showPoints: false,\n pointSize: 4,\n pointOpacity: 1,\n lineWidth: 2,\n lineOpacity: 0.8,\n lineStyle: \"solid\",\n useRightAxis: false,\n};\n\nexport const lineChartDefinition: ChartDefinition<LineChartSettings> = {\n type: \"line\",\n name: \"Line Chart\",\n description: \"Display data as connected points over time or sequence\",\n icon: LineChartIcon,\n component: LineChart,\n settingsPanel: LineChartSettingsPanel,\n createDefaultSettings: (layout: ChartLayout): LineChartSettings => ({\n id: \"\",\n type: \"line\",\n title: \"\",\n field: \"\",\n layout,\n colorScaleId: undefined,\n colorField: undefined,\n facet: {\n enabled: false,\n type: \"grid\",\n rowVariable: \"\",\n columnVariable: \"\",\n },\n xAxis: {},\n yAxis: {},\n margin: { top: 20, right: 60, bottom: 30, left: 60 },\n filters: [],\n xAxisLabel: \"\",\n yAxisLabel: \"\",\n xGridLines: 5,\n yGridLines: 5,\n xField: \"\",\n seriesField: [],\n seriesSettings: {},\n styles: {\n curveType: \"linear\",\n },\n showXGrid: true,\n showYGrid: true,\n showLegend: true,\n legendPosition: \"top\",\n }),\n validateSettings: (settings: LineChartSettings): boolean => {\n return settings.xField !== \"\" && settings.seriesField.length > 0;\n },\n getFilterFunction: (\n settings: LineChartSettings,\n fieldGetter: (name: string) => Record<IdType, datum>\n ) => {\n return (d: IdType) =>\n settings.filters.every((filter: Filter) =>\n applyFilter(fieldGetter(filter.field)[d], filter)\n );\n },\n};\n"]}
@@ -0,0 +1,132 @@
1
+ import { findAxisGuide } from './chunk-7PTJNIOD.js';
2
+ import { useDataLayer } from './chunk-JNO7OXCC.js';
3
+ import { createContext, useRef, useState, useCallback, useMemo, useEffect, useContext } from 'react';
4
+ import { jsx } from 'react/jsx-runtime';
5
+
6
+ var ApiContext = createContext(null);
7
+ var StateContext = createContext(null);
8
+ function ChartTraceScope({ children }) {
9
+ const sources = useRef(/* @__PURE__ */ new Map());
10
+ const [version, setVersion] = useState(0);
11
+ const [selection, setSelection] = useState(null);
12
+ const register = useCallback((owner2, source) => {
13
+ sources.current.set(owner2, source);
14
+ setVersion((value) => value + 1);
15
+ return () => {
16
+ if (sources.current.get(owner2) !== source) return;
17
+ sources.current.delete(owner2);
18
+ setVersion((value) => value + 1);
19
+ };
20
+ }, []);
21
+ const inspect = useCallback((owner2, kind, id) => {
22
+ const source = sources.current.get(owner2);
23
+ if (!source?.resolve(kind, id)) return false;
24
+ setSelection({ owner: owner2, kind, id, revision: source.revision });
25
+ return true;
26
+ }, []);
27
+ const chartOwner = () => [...sources.current].find(([, source]) => source.role === "chart")?.[0];
28
+ const inspectChart = useCallback((kind, id) => {
29
+ const owner2 = chartOwner();
30
+ return owner2 ? inspect(owner2, kind, id) : false;
31
+ }, [inspect]);
32
+ const findVisibleRow = useCallback(
33
+ (id) => {
34
+ for (const [owner2, source] of sources.current) {
35
+ if (source.role !== "chart") continue;
36
+ const found = source.findRow?.(id);
37
+ if (found && found !== "pending" && inspect(owner2, found.kind, found.id))
38
+ return true;
39
+ }
40
+ return false;
41
+ },
42
+ [inspect]
43
+ );
44
+ const findRow = useCallback(
45
+ (id) => {
46
+ if (findVisibleRow(id)) return true;
47
+ for (const source of sources.current.values()) {
48
+ if (source.role !== "chart" && source.findRow?.(id) === "pending")
49
+ return true;
50
+ }
51
+ return false;
52
+ },
53
+ [findVisibleRow]
54
+ );
55
+ const clear = useCallback(() => setSelection(null), []);
56
+ const api = useMemo(
57
+ () => ({ register, inspect, inspectChart, findVisibleRow, findRow, clear }),
58
+ [register, inspect, inspectChart, findVisibleRow, findRow, clear]
59
+ );
60
+ const owner = selection && sources.current.get(selection.owner);
61
+ const trace = selection && owner && owner.revision === selection.revision ? owner.resolve(selection.kind, selection.id) : void 0;
62
+ const stale = Boolean(selection && !trace);
63
+ useEffect(() => {
64
+ if (stale) setSelection(null);
65
+ }, [stale, version]);
66
+ const chart = [...sources.current.values()].find(
67
+ (source) => source.role === "chart"
68
+ );
69
+ const state = useMemo(
70
+ () => ({
71
+ selection: stale ? null : selection,
72
+ trace,
73
+ targets: [...sources.current].filter(
74
+ ([, source], index, all) => source.role === "chart" ? all.findIndex(([, item]) => item.role === "chart") === index : true
75
+ ).flatMap(
76
+ ([owner2, source]) => (source.targets?.() ?? []).map((target) => ({ ...target, owner: owner2 }))
77
+ ),
78
+ legendItems: chart?.legendItems,
79
+ version
80
+ }),
81
+ // The source map is a ref; version records each change to it.
82
+ // eslint-disable-next-line react-hooks/exhaustive-deps
83
+ [selection, stale, trace, version]
84
+ );
85
+ return /* @__PURE__ */ jsx(ApiContext.Provider, { value: api, children: /* @__PURE__ */ jsx(StateContext.Provider, { value: state, children }) });
86
+ }
87
+ function useChartTraceApi() {
88
+ return useContext(ApiContext);
89
+ }
90
+ function useChartTrace() {
91
+ return useContext(StateContext);
92
+ }
93
+ function useTraceSource(owner, source) {
94
+ const api = useChartTraceApi();
95
+ const register = api?.register;
96
+ useEffect(() => {
97
+ if (!source) return;
98
+ return register?.(owner, source);
99
+ }, [owner, register, source]);
100
+ }
101
+ function useTraceRevision(settings) {
102
+ const nonce = useDataLayer((state) => state.nonce);
103
+ const liveNonce = useDataLayer(
104
+ (state) => state.liveItems[settings.id]?.nonce ?? 0
105
+ );
106
+ return `${nonce}:${liveNonce}`;
107
+ }
108
+
109
+ // src/components/charts/trace/traceTypes.ts
110
+ function resolveGuideTrace(axes, id, revision) {
111
+ const found = findAxisGuide(axes, id);
112
+ return found && {
113
+ kind: "guide",
114
+ id,
115
+ revision,
116
+ guide: found.guide,
117
+ axis: found.axis,
118
+ axes
119
+ };
120
+ }
121
+ function guideTargets(axes) {
122
+ return [
123
+ ...axes.x.gridGuides,
124
+ ...axes.y.gridGuides,
125
+ ...axes.x.guides,
126
+ ...axes.y.guides
127
+ ].map((guide) => ({ kind: "guide", id: guide.id, label: guide.id }));
128
+ }
129
+
130
+ export { ChartTraceScope, guideTargets, resolveGuideTrace, useChartTrace, useChartTraceApi, useTraceRevision, useTraceSource };
131
+ //# sourceMappingURL=chunk-54M32JJB.js.map
132
+ //# sourceMappingURL=chunk-54M32JJB.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/charts/trace/ChartTraceScope.tsx","../src/components/charts/trace/traceTypes.ts"],"names":["owner"],"mappings":"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","file":"chunk-54M32JJB.js","sourcesContent":["import {\n createContext,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useRef,\n useState,\n type ReactNode,\n} from \"react\";\nimport { useDataLayer } from \"@/providers/DataLayerProvider\";\nimport type { ChartSettings } from \"@/types/ChartTypes\";\nimport type {\n ChartTrace,\n TraceSelection,\n TraceSource,\n TraceTarget,\n} from \"./traceTypes\";\n\ninterface TraceApi {\n register: (owner: string, source: TraceSource) => () => void;\n inspect: (owner: string, kind: string, id: string) => boolean;\n inspectChart: (kind: string, id: string) => boolean;\n findVisibleRow: (id: number) => boolean;\n findRow: (id: number) => boolean;\n clear: () => void;\n}\n\ninterface TraceState {\n selection: TraceSelection | null;\n trace: ChartTrace | undefined;\n targets: (TraceTarget & { owner: string })[];\n legendItems: TraceSource[\"legendItems\"];\n version: number;\n}\n\nconst ApiContext = createContext<TraceApi | null>(null);\nconst StateContext = createContext<TraceState | null>(null);\n\n/**\n * One inspector for a chart panel. The chart, its facets, its legend and its\n * title register as sources. A selection keeps only an owner, a kind, an id\n * and the revision it was made under; its trace is resolved from the owner's\n * current plan on every render.\n */\nexport function ChartTraceScope({ children }: { children: ReactNode }) {\n const sources = useRef(new Map<string, TraceSource>());\n const [version, setVersion] = useState(0);\n const [selection, setSelection] = useState<TraceSelection | null>(null);\n\n const register = useCallback((owner: string, source: TraceSource) => {\n sources.current.set(owner, source);\n setVersion((value) => value + 1);\n return () => {\n if (sources.current.get(owner) !== source) return;\n sources.current.delete(owner);\n setVersion((value) => value + 1);\n };\n }, []);\n\n const inspect = useCallback((owner: string, kind: string, id: string) => {\n const source = sources.current.get(owner);\n if (!source?.resolve(kind, id)) return false;\n setSelection({ owner, kind, id, revision: source.revision });\n return true;\n }, []);\n\n const chartOwner = () =>\n [...sources.current].find(([, source]) => source.role === \"chart\")?.[0];\n\n const inspectChart = useCallback((kind: string, id: string) => {\n const owner = chartOwner();\n return owner ? inspect(owner, kind, id) : false;\n }, [inspect]);\n\n const findVisibleRow = useCallback(\n (id: number) => {\n for (const [owner, source] of sources.current) {\n if (source.role !== \"chart\") continue;\n const found = source.findRow?.(id);\n if (found && found !== \"pending\" && inspect(owner, found.kind, found.id))\n return true;\n }\n return false;\n },\n [inspect]\n );\n\n const findRow = useCallback(\n (id: number) => {\n if (findVisibleRow(id)) return true;\n for (const source of sources.current.values()) {\n if (source.role !== \"chart\" && source.findRow?.(id) === \"pending\")\n return true;\n }\n return false;\n },\n [findVisibleRow]\n );\n\n const clear = useCallback(() => setSelection(null), []);\n\n const api = useMemo(\n () => ({ register, inspect, inspectChart, findVisibleRow, findRow, clear }),\n [register, inspect, inspectChart, findVisibleRow, findRow, clear]\n );\n\n const owner = selection && sources.current.get(selection.owner);\n const trace =\n selection && owner && owner.revision === selection.revision\n ? owner.resolve(selection.kind, selection.id)\n : undefined;\n const stale = Boolean(selection && !trace);\n useEffect(() => {\n // One rule for every chart: a selection whose revision changed, or whose\n // object is no longer drawn, closes rather than showing an old trace.\n if (stale) setSelection(null);\n }, [stale, version]);\n\n const chart = [...sources.current.values()].find(\n (source) => source.role === \"chart\"\n );\n const state = useMemo(\n () => ({\n selection: stale ? null : selection,\n trace,\n targets: [...sources.current]\n .filter(([, source], index, all) =>\n source.role === \"chart\"\n ? all.findIndex(([, item]) => item.role === \"chart\") === index\n : true\n )\n .flatMap(([owner, source]) =>\n (source.targets?.() ?? []).map((target) => ({ ...target, owner }))\n ),\n legendItems: chart?.legendItems,\n version,\n }),\n // The source map is a ref; version records each change to it.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [selection, stale, trace, version]\n );\n\n return (\n <ApiContext.Provider value={api}>\n <StateContext.Provider value={state}>{children}</StateContext.Provider>\n </ApiContext.Provider>\n );\n}\n\nexport function useChartTraceApi() {\n return useContext(ApiContext);\n}\n\nexport function useChartTrace() {\n return useContext(StateContext);\n}\n\n/** Registers a trace source while the component is mounted. */\nexport function useTraceSource(owner: string, source: TraceSource | null) {\n const api = useChartTraceApi();\n const register = api?.register;\n useEffect(() => {\n if (!source) return;\n return register?.(owner, source);\n }, [owner, register, source]);\n}\n\n/** The data revision every trace source uses: data edits and this chart's rows. */\nexport function useTraceRevision(settings: ChartSettings) {\n const nonce = useDataLayer((state) => state.nonce);\n const liveNonce = useDataLayer(\n (state) => state.liveItems[settings.id]?.nonce ?? 0\n );\n return `${nonce}:${liveNonce}`;\n}\n","import type { RowCalculationTrace } from \"@/lib/calculations/CalculationState\";\nimport type { planNumericalLegend } from \"@/lib/colorScaleMath\";\nimport type { datum } from \"@/types/ChartTypes\";\nimport {\n findAxisGuide,\n type AxisGuide,\n type AxisPlan,\n type ChartAxesPlan,\n} from \"../Axis/axisPlan\";\nimport type { FacetLayoutPlan } from \"../FacetRelated/facetLayout\";\nimport type { BarTrace } from \"../BarChart/barTrace\";\nimport type { ScatterTrace } from \"../ScatterPlot/scatterTrace\";\n\n/** A selected object. The owner's source resolves it against its current plan. */\nexport interface TraceSelection {\n owner: string;\n kind: string;\n id: string;\n revision: string;\n}\n\nexport interface TraceTarget {\n kind: string;\n id: string;\n label: string;\n}\n\nexport interface GuideTrace {\n kind: \"guide\";\n id: string;\n revision: string;\n guide: AxisGuide;\n axis: AxisPlan;\n axes: ChartAxesPlan;\n}\n\nexport interface TitleTrace {\n kind: \"title\";\n id: string;\n revision: string;\n text: string;\n source: \"chart-setting\" | \"field-label\";\n field?: string;\n}\n\nexport interface FacetHeadingTrace {\n field: string;\n value: datum;\n label: string;\n raw?: datum;\n sampleSourceId?: number;\n calculation?: RowCalculationTrace;\n}\n\nexport interface FacetTrace {\n kind: \"facet\";\n id: string;\n revision: string;\n role: \"panel\" | \"row-heading\" | \"column-heading\";\n row?: FacetHeadingTrace;\n column?: FacetHeadingTrace;\n layout: FacetLayoutPlan;\n sourceIds: number[];\n chartIds: number[];\n}\n\nexport interface LegendTrace {\n kind: \"legend\";\n id: string;\n revision: string;\n field: string;\n fieldLabel: string;\n scaleId: string;\n scaleType: \"categorical\" | \"numerical\";\n palette: string | string[];\n domain?: [number, number];\n item?: {\n id: string;\n label: string;\n color: string;\n count: number;\n selected: boolean;\n };\n rowIds: number[];\n numericalPlan?: ReturnType<typeof planNumericalLegend>;\n}\n\nexport type ChartTrace =\n | ScatterTrace\n | BarTrace\n | GuideTrace\n | TitleTrace\n | FacetTrace\n | LegendTrace;\n\n/** A planned legend entry that a chart owns, so the legend draws what the chart drew. */\nexport interface PlannedLegendItem {\n id: string;\n value: datum;\n label: string;\n count: number;\n color: string;\n selected: boolean;\n}\n\nexport interface TraceSource {\n role: \"chart\" | \"facets\" | \"legend\" | \"title\";\n /** Data revision. A selection made under another revision is stale. */\n revision: string;\n resolve(kind: string, id: string): ChartTrace | undefined;\n /** Returns the object that draws this source row, or \"pending\" while a view changes to show it. */\n findRow?(id: number): { kind: string; id: string } | \"pending\" | undefined;\n targets?(): TraceTarget[];\n legendItems?: PlannedLegendItem[];\n}\n\nexport function resolveGuideTrace(\n axes: ChartAxesPlan,\n id: string,\n revision: string\n): GuideTrace | undefined {\n const found = findAxisGuide(axes, id);\n return found && {\n kind: \"guide\",\n id,\n revision,\n guide: found.guide,\n axis: found.axis,\n axes,\n };\n}\n\nexport function guideTargets(axes: ChartAxesPlan): TraceTarget[] {\n return [\n ...axes.x.gridGuides,\n ...axes.y.gridGuides,\n ...axes.x.guides,\n ...axes.y.guides,\n ].map((guide) => ({ kind: \"guide\", id: guide.id, label: guide.id }));\n}\n"]}