{"version":3,"file":"utils.cjs","sources":["../../../../src/graveyard/Graph/utils.ts"],"sourcesContent":["import {\n  GraphSeriesValue,\n  Field,\n  formattedValueToString,\n  getFieldDisplayName,\n  TimeZone,\n  dateTimeFormat,\n  systemDateFormats,\n} from '@grafana/data';\n\n/**\n * Returns index of the closest datapoint BEFORE hover position\n *\n * @param posX\n * @param series\n * @deprecated\n */\nexport const findHoverIndexFromData = (xAxisDimension: Field, xPos: number) => {\n  let lower = 0;\n  let upper = xAxisDimension.values.length - 1;\n  let middle;\n\n  while (true) {\n    if (lower > upper) {\n      return Math.max(upper, 0);\n    }\n    middle = Math.floor((lower + upper) / 2);\n    const xPosition = xAxisDimension.values[middle];\n\n    if (xPosition === xPos) {\n      return middle;\n    } else if (xPosition && xPosition < xPos) {\n      lower = middle + 1;\n    } else {\n      upper = middle - 1;\n    }\n  }\n};\n\ninterface MultiSeriesHoverInfo {\n  value: string;\n  time: string;\n  datapointIndex: number;\n  seriesIndex: number;\n  label?: string;\n  color?: string;\n}\n\n/**\n * Returns information about closest datapoints when hovering over a Graph\n *\n * @param seriesList list of series visible on the Graph\n * @param pos mouse cursor position, based on jQuery.flot position\n * @deprecated\n */\nexport const getMultiSeriesGraphHoverInfo = (\n  // x and y axis dimensions order is aligned\n  yAxisDimensions: Field[],\n  xAxisDimensions: Field[],\n  /** Well, time basically */\n  xAxisPosition: number,\n  timeZone?: TimeZone\n): {\n  results: MultiSeriesHoverInfo[];\n  time?: GraphSeriesValue;\n} => {\n  let i, field, hoverIndex, hoverDistance, pointTime;\n\n  const results: MultiSeriesHoverInfo[] = [];\n\n  let minDistance, minTime;\n\n  for (i = 0; i < yAxisDimensions.length; i++) {\n    field = yAxisDimensions[i];\n    const time = xAxisDimensions[i];\n    hoverIndex = findHoverIndexFromData(time, xAxisPosition);\n    hoverDistance = xAxisPosition - time.values[hoverIndex];\n    pointTime = time.values[hoverIndex];\n    // Take the closest point before the cursor, or if it does not exist, the closest after\n    if (\n      minDistance === undefined ||\n      (hoverDistance >= 0 && (hoverDistance < minDistance || minDistance < 0)) ||\n      (hoverDistance < 0 && hoverDistance > minDistance)\n    ) {\n      minDistance = hoverDistance;\n      minTime = time.display ? formattedValueToString(time.display(pointTime)) : pointTime;\n    }\n\n    const disp = field.display!(field.values[hoverIndex]);\n\n    results.push({\n      value: formattedValueToString(disp),\n      datapointIndex: hoverIndex,\n      seriesIndex: i,\n      color: disp.color,\n      label: getFieldDisplayName(field),\n      time: time.display ? formattedValueToString(time.display(pointTime)) : pointTime,\n    });\n  }\n\n  return {\n    results,\n    time: minTime,\n  };\n};\n\n/** @deprecated */\nexport const graphTickFormatter = (epoch: number, axis: any) => {\n  return dateTimeFormat(epoch, {\n    format: axis?.options?.timeformat,\n    timeZone: axis?.options?.timezone,\n  });\n};\n\n/** @deprecated */\nexport const graphTimeFormat = (ticks: number | null, min: number | null, max: number | null): string => {\n  if (min && max && ticks) {\n    const range = max - min;\n    const secPerTick = range / ticks / 1000;\n    // Need have 10 millisecond margin on the day range\n    // As sometimes last 24 hour dashboard evaluates to more than 86400000\n    const oneDay = 86400010;\n    const oneYear = 31536000000;\n\n    if (secPerTick <= 10) {\n      return systemDateFormats.interval.millisecond;\n    }\n    if (secPerTick <= 45) {\n      return systemDateFormats.interval.second;\n    }\n    if (range <= oneDay) {\n      return systemDateFormats.interval.minute;\n    }\n    if (secPerTick <= 80000) {\n      return systemDateFormats.interval.hour;\n    }\n    if (range <= oneYear) {\n      return systemDateFormats.interval.day;\n    }\n    if (secPerTick <= 31536000) {\n      return systemDateFormats.interval.month;\n    }\n    return systemDateFormats.interval.year;\n  }\n\n  return systemDateFormats.interval.minute;\n};\n"],"names":["formattedValueToString","getFieldDisplayName","dateTimeFormat","systemDateFormats"],"mappings":"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"}