tfrere HF Staff commited on
Commit
25932c2
·
1 Parent(s): 05de8cb
app/src/components/trackio/renderers/core/interaction-manager.js CHANGED
@@ -205,13 +205,44 @@ export class InteractionManager {
205
  }
206
 
207
  /**
208
- * Prepare data for hover tooltip
209
  */
210
  prepareHoverData(series, nearestStep, normalizeY, isAccuracy) {
211
  const entries = series.map(s => {
212
- const m = new Map(s.values.map(v => [v.step, v]));
213
- const pt = m.get(nearestStep);
214
- return { run: s.run, color: s.color, pt };
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
215
  }).filter(e => e.pt && e.pt.value != null)
216
  .sort((a, b) => a.pt.value - b.pt.value);
217
 
 
205
  }
206
 
207
  /**
208
+ * Prepare data for hover tooltip with interpolation for missing points
209
  */
210
  prepareHoverData(series, nearestStep, normalizeY, isAccuracy) {
211
  const entries = series.map(s => {
212
+ const values = s.values.sort((a, b) => a.step - b.step);
213
+ const m = new Map(values.map(v => [v.step, v]));
214
+ let pt = m.get(nearestStep);
215
+
216
+ // If no exact point, interpolate from surrounding points
217
+ if (!pt) {
218
+ // Find the two closest points (one before, one after)
219
+ let before = null;
220
+ let after = null;
221
+
222
+ for (let i = 0; i < values.length; i++) {
223
+ if (values[i].step < nearestStep) {
224
+ before = values[i];
225
+ } else if (values[i].step > nearestStep && !after) {
226
+ after = values[i];
227
+ break;
228
+ }
229
+ }
230
+
231
+ // Interpolate if we have both surrounding points
232
+ if (before && after) {
233
+ const ratio = (nearestStep - before.step) / (after.step - before.step);
234
+ const interpolatedValue = before.value + ratio * (after.value - before.value);
235
+ pt = { step: nearestStep, value: interpolatedValue };
236
+ } else if (before) {
237
+ // Use the last known value
238
+ pt = before;
239
+ } else if (after) {
240
+ // Use the first known value
241
+ pt = after;
242
+ }
243
+ }
244
+
245
+ return { run: s.run, color: s.color, pt, hasExactPoint: !!m.get(nearestStep) };
246
  }).filter(e => e.pt && e.pt.value != null)
247
  .sort((a, b) => a.pt.value - b.pt.value);
248