{"version":3,"sources":["../src/utils/math.ts","../src/utils/color.ts","../src/models/options.ts","../src/presets/orderFlowStylePresets.ts","../src/presets/orderFlowThemePresets.ts","../src/utils/time.ts","../src/adapters/sessions/resolveSessions.ts","../src/adapters/normalize/normalizeBatch.ts","../src/adapters/normalize/normalizePatch.ts","../src/adapters/normalize/applyOrderFlowPatch.ts","../src/calculations/footprint/buildDeltaSummaryColumns.ts","../src/calculations/footprint/deriveFootprintMetrics.ts","../src/utils/priceStep.ts","../src/calculations/footprint/buildFootprintBarModel.ts","../src/calculations/profile/buildProfile.ts","../src/calculations/profile/buildVisibleRangeProfile.ts","../src/calculations/profile/buildSessionProfiles.ts","../src/calculations/candle-heatmap/buildCandleHeatmapSeriesData.ts","../src/calculations/volume-delta/buildVolumeDeltaPivotSeriesData.ts","../src/calculations/vwap/computeVwapSeriesData.ts","../src/utils/width.ts","../src/renderers/delta-summary-series/DeltaSummarySeriesRenderer.ts","../src/renderers/delta-summary-series/createDeltaSummarySeries.ts","../src/utils/metricStylePalette.ts","../src/utils/numberFormat.ts","../src/renderers/shared/canvas.ts","../src/renderers/shared/renderModel.ts","../src/renderers/footprint-series/FootprintSeriesRenderer.ts","../src/renderers/footprint-series/createFootprintSeries.ts","../src/renderers/footprint-series/createVolumeFootprintSeries.ts","../src/renderers/primitives/createVolumeProfilePrimitive.ts","../src/renderers/primitives/createSessionVolumeProfilePrimitive.ts","../src/renderers/primitives/createSeriesMetricPrimitive.ts","../src/utils/lightweightCharts.ts","../src/renderers/primitives/createVwapController.ts","../src/controllers/createOrderFlowTickStreamController.ts","../src/utils/chartState.ts","../src/utils/autoFitPriceScale.ts","../src/utils/aggregateBars.ts","../src/utils/mintick.ts"],"names":["customSeriesDefaultOptions","RGB_REGEX","parseHexColor","parseRgbColor","parseColor","toRgbaString","span","splitWidth","bidWidth","askWidth","bidArea","candle","askArea","formatMetricValue","isItemVisible","LineSeries","bucketTime","resolveIntervalSeconds","resolveLevelDelta","mergeLevel"],"mappings":"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","file":"index.cjs","sourcesContent":["export function clamp(value: number, min: number, max: number): number {\n  return Math.min(Math.max(value, min), max);\n}\n\nexport function sum(values: number[]): number {\n  return values.reduce((total, value) => total + value, 0);\n}\n","import type { ColorScaleOptions, ColorScaleRangeOptions } from '../models/options';\nimport { clamp } from './math';\n\ninterface RgbaColor {\n  r: number;\n  g: number;\n  b: number;\n  a: number;\n}\n\nconst RGB_REGEX = /^rgba?\\(([^)]+)\\)$/i;\n\nfunction clampChannel(value: number): number {\n  return clamp(Math.round(value), 0, 255);\n}\n\nfunction clampAlpha(value: number): number {\n  return clamp(value, 0, 1);\n}\n\nfunction formatAlpha(value: number): string {\n  return clampAlpha(value)\n    .toFixed(3)\n    .replace(/\\.?0+$/, '');\n}\n\nfunction parseRgbComponent(value: string): number {\n  return clampChannel(Number.parseFloat(value.trim()));\n}\n\nfunction parseAlphaComponent(value: string | undefined): number {\n  if (value === undefined) {\n    return 1;\n  }\n\n  return clampAlpha(Number.parseFloat(value.trim()));\n}\n\nfunction parseHexColor(color: string): RgbaColor | null {\n  const normalized = color.replace('#', '').trim();\n\n  if (normalized.length === 3) {\n    const [r, g, b] = normalized.split('');\n\n    return {\n      r: Number.parseInt(`${r}${r}`, 16),\n      g: Number.parseInt(`${g}${g}`, 16),\n      b: Number.parseInt(`${b}${b}`, 16),\n      a: 1,\n    };\n  }\n\n  if (normalized.length === 6) {\n    return {\n      r: Number.parseInt(normalized.slice(0, 2), 16),\n      g: Number.parseInt(normalized.slice(2, 4), 16),\n      b: Number.parseInt(normalized.slice(4, 6), 16),\n      a: 1,\n    };\n  }\n\n  return null;\n}\n\nfunction parseRgbColor(color: string): RgbaColor | null {\n  const match = color.match(RGB_REGEX);\n\n  if (!match) {\n    return null;\n  }\n\n  const parts = match[1]?.split(',').map((part) => part.trim()) ?? [];\n\n  if (parts.length < 3) {\n    return null;\n  }\n\n  return {\n    r: parseRgbComponent(parts[0] ?? '0'),\n    g: parseRgbComponent(parts[1] ?? '0'),\n    b: parseRgbComponent(parts[2] ?? '0'),\n    a: parseAlphaComponent(parts[3]),\n  };\n}\n\nfunction parseColor(color: string): RgbaColor | null {\n  if (color.startsWith('#')) {\n    return parseHexColor(color);\n  }\n\n  if (color.startsWith('rgb')) {\n    return parseRgbColor(color);\n  }\n\n  return null;\n}\n\nfunction toRgbaString(color: RgbaColor): string {\n  return `rgba(${clampChannel(color.r)}, ${clampChannel(color.g)}, ${clampChannel(color.b)}, ${formatAlpha(color.a)})`;\n}\n\nfunction interpolateColor(from: RgbaColor, to: RgbaColor, t: number): string {\n  const factor = clamp(t, 0, 1);\n\n  return toRgbaString({\n    r: from.r + (to.r - from.r) * factor,\n    g: from.g + (to.g - from.g) * factor,\n    b: from.b + (to.b - from.b) * factor,\n    a: from.a + (to.a - from.a) * factor,\n  });\n}\n\nfunction normalizeScaleValue(value: number, range: ColorScaleRangeOptions): number {\n  const denominator = range.to - range.from;\n\n  if (denominator === 0) {\n    return range.invert ? 0 : 1;\n  }\n\n  let normalized = (value - range.from) / denominator;\n\n  if (range.invert) {\n    normalized = 1 - normalized;\n  }\n\n  return range.clamp ? clamp(normalized, 0, 1) : normalized;\n}\n\nexport function withAlpha(color: string, alpha: number): string {\n  const parsed = parseColor(color);\n\n  if (!parsed) {\n    return color;\n  }\n\n  return toRgbaString({\n    ...parsed,\n    a: alpha,\n  });\n}\n\nexport function createAlphaColorScale(\n  color: string,\n  minAlpha: number,\n  maxAlpha: number,\n  range: Partial<ColorScaleRangeOptions> = {},\n): ColorScaleOptions {\n  return {\n    range: {\n      from: 0,\n      to: 1,\n      clamp: true,\n      invert: false,\n      ...range,\n    },\n    stops: [\n      {\n        offset: 0,\n        color: withAlpha(color, minAlpha),\n      },\n      {\n        offset: 1,\n        color: withAlpha(color, maxAlpha),\n      },\n    ],\n  };\n}\n\nexport function resolveColorScale(scale: ColorScaleOptions, value: number): string {\n  const stops = [...scale.stops]\n    .map((stop) => ({\n      offset: clamp(stop.offset, 0, 1),\n      color: stop.color,\n    }))\n    .sort((left, right) => left.offset - right.offset);\n\n  if (!stops.length) {\n    return 'transparent';\n  }\n\n  const normalized = normalizeScaleValue(value, scale.range);\n\n  if (normalized <= stops[0].offset) {\n    return stops[0].color;\n  }\n\n  if (normalized >= stops.at(-1)!.offset) {\n    return stops.at(-1)!.color;\n  }\n\n  for (let index = 1; index < stops.length; index += 1) {\n    const previous = stops[index - 1];\n    const current = stops[index];\n\n    if (normalized > current.offset) {\n      continue;\n    }\n\n    const span = current.offset - previous.offset;\n\n    if (span <= 0) {\n      return current.color;\n    }\n\n    const from = parseColor(previous.color);\n    const to = parseColor(current.color);\n\n    if (!from || !to) {\n      return normalized - previous.offset <= current.offset - normalized\n        ? previous.color\n        : current.color;\n    }\n\n    return interpolateColor(from, to, (normalized - previous.offset) / span);\n  }\n\n  return stops.at(-1)!.color;\n}\n","import {\n  customSeriesDefaultOptions,\n  type CustomSeriesOptions,\n  type LineWidth,\n} from 'lightweight-charts';\n\nimport { createAlphaColorScale } from '../utils/color';\nimport type { NumericRoundingMode } from '../utils/numberFormat';\nimport type { SessionDefinition, TimeValue } from './contracts';\nimport type { DeltaSummaryColumnModel, FootprintBarModel } from './studies';\n\nexport type FootprintTextMode = 'bid-ask' | 'total' | 'delta' | 'none';\nexport type FootprintCandlePosition = 'left' | 'middle' | 'right';\n/**\n * Width values accept either device pixels or a percentage of the current bar spacing.\n */\nexport type ResponsiveWidthValue = number | `${number}%`;\nexport type HorizontalAlignment = 'left' | 'right';\nexport type ProfileScope =\n  | { kind: 'visible-range' }\n  | { kind: 'session'; sessionIds?: string[] }\n  | { kind: 'fixed-range'; from: TimeValue; to: TimeValue };\nexport type VwapResetMode = 'session' | 'continuous';\nexport type DeltaSummaryColumnKey = Exclude<keyof DeltaSummaryColumnModel, 'time'>;\nexport type DeltaSummaryMetric = DeltaSummaryColumnKey;\nexport type FootprintMetricPlacement = 'top' | 'bottom';\nexport type FootprintMetricAlignment = 'left' | 'center' | 'right';\nexport type FootprintBidAskShadingMetric = 'volume/max' | 'volume/average';\nexport type FootprintBidAskFillMode = 'by-side' | 'by-delta' | 'by-total-volume';\nexport type FootprintBidAskSeparatorMode = 'line' | 'letter' | 'none';\nexport type FootprintSingleCellShadingMetric =\n  | 'volume/max'\n  | 'volume/average'\n  | 'absolute-delta/max-abs';\nexport type FootprintMetricValueKey = keyof Pick<\n  FootprintBarModel,\n  | 'open'\n  | 'high'\n  | 'low'\n  | 'close'\n  | 'delta'\n  | 'totalVolume'\n  | 'maxLevelVolume'\n  | 'maxAbsDelta'\n  | 'averageLevelVolume'\n>;\nexport type MetricStyleKey =\n  | 'metric0'\n  | 'metric1'\n  | 'metric2'\n  | 'metric3'\n  | 'metric4'\n  | 'metric5'\n  | 'metric6'\n  | 'metric7'\n  | 'metric8'\n  | 'metric9';\nexport type MetricStyleVariant = 'primary' | 'secondary';\nexport type MetricStyleVariantMode = MetricStyleVariant | 'auto';\n\nexport interface MetricStyleToken {\n  color: string;\n  font: string;\n  border?: string;\n  backgroundColor?: string;\n  paddingX?: number;\n  paddingY?: number;\n}\n\nexport interface MetricStylePaletteEntry {\n  primary: MetricStyleToken;\n  secondary?: Partial<MetricStyleToken>;\n}\n\nexport type MetricStylePalette = Partial<Record<MetricStyleKey, MetricStylePaletteEntry>>;\n\n/**\n * Width constraints used by footprint bars and delta-summary columns.\n */\nexport interface WidthRangeOptions {\n  min: ResponsiveWidthValue;\n  max: ResponsiveWidthValue;\n}\n\nexport interface ColorScaleStop {\n  /**\n   * Stop offsets are normalized between 0 and 1.\n   */\n  offset: number;\n  color: string;\n}\n\nexport interface ColorScaleRangeOptions {\n  /**\n   * Raw metric value that maps to stop offset `0`.\n   */\n  from: number;\n  /**\n   * Raw metric value that maps to stop offset `1`.\n   */\n  to: number;\n  clamp: boolean;\n  invert: boolean;\n}\n\nexport interface ColorScaleOptions {\n  range: ColorScaleRangeOptions;\n  stops: ColorScaleStop[];\n}\n\nexport type ColorScalePartialOptions = Omit<Partial<ColorScaleOptions>, 'range' | 'stops'> & {\n  range?: Partial<ColorScaleRangeOptions>;\n  stops?: ColorScaleStop[];\n};\n\n/**\n * Diverging range used by the candle heatmap helper.\n *\n * The range is split around `threshold`. Values near `min` resolve toward `downColor`, while values\n * near `max` resolve toward `upColor`.\n */\nexport interface CandleHeatmapRangeOptions {\n  min: number;\n  minShadeThreshold?: number;\n  threshold: number;\n  maxShadeThreshold?: number;\n  max: number;\n}\n\nexport type CandleHeatmapShader = 'alpha' | 'hue';\n\n/**\n * Configures metric-driven candle coloring for a standard candlestick series.\n *\n * `noOfShades: 1` collapses the mapping to two solid colors split by `threshold`.\n * `noOfShades: 0` uses a continuous mapping with 256 internal steps.\n */\nexport interface CandleHeatmapOptions {\n  range: CandleHeatmapRangeOptions;\n  downColor: string;\n  upColor: string;\n  wickDownColor?: string;\n  wickUpColor?: string;\n  borderDownColor?: string;\n  borderUpColor?: string;\n  borderVisible: boolean;\n  shadeWicks: boolean;\n  noOfShades: number;\n  shader: CandleHeatmapShader;\n}\n\nexport type CandleHeatmapPartialOptions = Omit<Partial<CandleHeatmapOptions>, 'range'> & {\n  range?: Partial<CandleHeatmapRangeOptions>;\n};\n\nexport interface FootprintStyleOptions {\n  fontFamily: string;\n  fontSize: number;\n  priceDecimalDigits: number;\n  priceRounding: NumericRoundingMode;\n  valueIntegerDigits: number;\n  valueDecimalDigits: number;\n  valueRounding: NumericRoundingMode;\n  valueUnitVisible: boolean;\n  textColor: string;\n  bidTextColor: string;\n  askTextColor: string;\n  neutralTextColor: string;\n  positiveDeltaColor: string;\n  negativeDeltaColor: string;\n  bullishCandleColor: string;\n  bearishCandleColor: string;\n  candleWickColor: string;\n  candleBorderColor: string;\n  separatorColor: string;\n  separatorFont: string;\n  bidFillColor: string;\n  askFillColor: string;\n  buyImbalanceColor: string;\n  sellImbalanceColor: string;\n  metricStyles: MetricStylePalette;\n  imbalanceMetricStyleKey: MetricStyleKey | null;\n  positiveImbalanceTextColor: string;\n  positiveImbalanceTextFont: string;\n  negativeImbalanceTextColor: string;\n  negativeImbalanceTextFont: string;\n  diagonalDominanceColor: string;\n  diagonalDominanceFont: string;\n  buyImbalanceFillColor: string;\n  sellImbalanceFillColor: string;\n  stackedBuyImbalanceFillColor: string;\n  stackedSellImbalanceFillColor: string;\n  stackedImbalanceOutline: string;\n  ladderBorderColor: string;\n  cellBorderColor: string;\n  profileBidColor: string;\n  profileAskColor: string;\n  valueAreaColor: string;\n  sessionLabelColor: string;\n}\n\nexport interface FootprintLadderOptions {\n  textMode: FootprintTextMode;\n  rowHeight: number;\n  /**\n   * Explicit price step used to place ladder rows. Set this to the instrument tick size when the\n   * provided levels are sparse or aggregated.\n   */\n  priceStep: number;\n  showHeatmap: boolean;\n  bidAskFillMode: FootprintBidAskFillMode;\n  imbalanceRatio: number;\n  stackedImbalanceLength: number;\n  highlightImbalances: boolean;\n  highlightStackedImbalances: boolean;\n  highlightImbalanceText: boolean;\n  highlightDiagonalDominance: boolean;\n  diagonalDominanceFactor: number;\n  separatorMode: FootprintBidAskSeparatorMode;\n  separatorLabel: string;\n  separatorGap: number;\n  cellPadding: number;\n  borderWidth: number;\n  cellBorderWidth: number;\n  stackedImbalanceBorderWidth: number;\n  minOpacity: number;\n  maxOpacity: number;\n}\n\nexport interface FootprintCandleOptions {\n  visible: boolean;\n  position: FootprintCandlePosition;\n  widthRatio: number;\n  minWidth: number;\n  maxWidth: number;\n  gap: number;\n  showWicks: boolean;\n}\n\nexport interface FootprintLayoutOptions {\n  barWidth: WidthRangeOptions;\n}\n\nexport interface FootprintMetricStyleOptions {\n  fontFamily: string;\n  fontSize: number;\n  fontWeight: string;\n  fontShorthand?: string;\n  textColor: string;\n  positiveTextColor: string;\n  negativeTextColor: string;\n  neutralTextColor: string;\n  backgroundColor: string;\n  borderColor: string;\n  borderWidth: number;\n  borderShorthand?: string;\n  paddingX: number;\n  paddingY: number;\n}\n\nexport interface FootprintMetricRenderContext {\n  bar: FootprintBarModel;\n  item: FootprintMetricItemOptions;\n  placement: FootprintMetricPlacement;\n  rawValue: number | null;\n}\n\nexport type FootprintMetricStyleResolverResult = Partial<FootprintMetricStyleOptions> & {\n  visible?: boolean;\n};\n\nexport interface FootprintMetricItemOptions {\n  id: string;\n  visible: boolean;\n  placement: FootprintMetricPlacement;\n  metricStyleKey?: MetricStyleKey | null;\n  metricStyleVariant?: MetricStyleVariantMode;\n  valueKey?: FootprintMetricValueKey;\n  label?: string;\n  formatter?: (context: FootprintMetricRenderContext) => string | number | null;\n  styleResolver?: (\n    context: FootprintMetricRenderContext,\n  ) => FootprintMetricStyleResolverResult | null;\n  offset: number;\n  align: FootprintMetricAlignment;\n  minSpacing: number;\n  style: FootprintMetricStyleOptions;\n}\n\nexport type FootprintMetricItemPartialOptions = Omit<\n  Partial<FootprintMetricItemOptions>,\n  'id' | 'style'\n> & {\n  id: string;\n  style?: Partial<FootprintMetricStyleOptions>;\n};\n\nexport interface FootprintSummaryOptions {\n  stackGap: number;\n  items: FootprintMetricItemOptions[];\n}\n\nexport type FootprintSummaryPartialOptions = Omit<Partial<FootprintSummaryOptions>, 'items'> & {\n  items?: FootprintMetricItemPartialOptions[];\n};\n\nexport interface FootprintPointOfControlOptions {\n  visible: boolean;\n  backgroundColor: string;\n  borderColor: string;\n  borderWidth: number;\n}\n\nexport interface FootprintShadingOptions {\n  bidAskMetric: FootprintBidAskShadingMetric;\n  singleCellMetric: FootprintSingleCellShadingMetric;\n  bidScale: ColorScaleOptions;\n  askScale: ColorScaleOptions;\n  positiveDeltaScale: ColorScaleOptions;\n  negativeDeltaScale: ColorScaleOptions;\n  neutralScale: ColorScaleOptions;\n}\n\nexport type FootprintShadingPartialOptions = Omit<\n  Partial<FootprintShadingOptions>,\n  'bidScale' | 'askScale' | 'positiveDeltaScale' | 'negativeDeltaScale' | 'neutralScale'\n> & {\n  bidScale?: ColorScalePartialOptions;\n  askScale?: ColorScalePartialOptions;\n  positiveDeltaScale?: ColorScalePartialOptions;\n  negativeDeltaScale?: ColorScalePartialOptions;\n  neutralScale?: ColorScalePartialOptions;\n};\n\nexport interface FootprintSeriesOptions extends CustomSeriesOptions {\n  layout: FootprintLayoutOptions;\n  candle: FootprintCandleOptions;\n  ladder: FootprintLadderOptions;\n  shading: FootprintShadingOptions;\n  pointOfControl: FootprintPointOfControlOptions;\n  summary: FootprintSummaryOptions;\n  style: FootprintStyleOptions;\n}\n\nexport type FootprintSeriesPartialOptions = Omit<\n  Partial<FootprintSeriesOptions>,\n  'layout' | 'candle' | 'ladder' | 'shading' | 'pointOfControl' | 'summary' | 'style'\n> & {\n  layout?: Partial<FootprintLayoutOptions>;\n  candle?: Partial<FootprintCandleOptions>;\n  ladder?: Partial<FootprintLadderOptions>;\n  shading?: FootprintShadingPartialOptions;\n  pointOfControl?: Partial<FootprintPointOfControlOptions>;\n  summary?: FootprintSummaryPartialOptions;\n  style?: Partial<FootprintStyleOptions>;\n};\n\nexport interface PointOfControlOptions {\n  backgroundColor: string;\n  borderColor: string;\n  lineWidth: number;\n}\n\nexport interface VolumeProfileStyleOptions {\n  profileBidColor: string;\n  profileAskColor: string;\n  valueAreaColor: string;\n  sessionLabelColor: string;\n}\n\nexport interface VolumeProfileOptions {\n  widthRatio: number;\n  align: HorizontalAlignment;\n  scope: ProfileScope;\n  valueAreaPercent: number;\n  showPointOfControl: boolean;\n  showValueArea: boolean;\n  opacity: number;\n  pointOfControl: PointOfControlOptions;\n  style: VolumeProfileStyleOptions;\n}\n\nexport interface SessionVolumeProfileOptions extends VolumeProfileOptions {\n  sessions?: SessionDefinition[];\n  showSessionLabels: boolean;\n}\n\nexport interface VolumeFootprintOptions extends FootprintSeriesOptions {}\nexport type VolumeFootprintPartialOptions = FootprintSeriesPartialOptions;\n\nexport type VolumeProfilePartialOptions = Omit<\n  Partial<VolumeProfileOptions>,\n  'pointOfControl' | 'style'\n> & {\n  pointOfControl?: Partial<PointOfControlOptions>;\n  style?: Partial<VolumeProfileStyleOptions>;\n};\n\nexport type SessionVolumeProfilePartialOptions = Omit<\n  Partial<SessionVolumeProfileOptions>,\n  'pointOfControl' | 'style'\n> & {\n  pointOfControl?: Partial<PointOfControlOptions>;\n  style?: Partial<VolumeProfileStyleOptions>;\n};\n\nexport interface DeltaSummaryRowStyleOptions {\n  positiveFillColor: string;\n  negativeFillColor: string;\n  neutralFillColor: string;\n  positiveFillScale: ColorScaleOptions;\n  negativeFillScale: ColorScaleOptions;\n  neutralFillScale: ColorScaleOptions;\n  textColor: string;\n}\n\nexport type DeltaSummaryRowStylePartialOptions = Omit<\n  Partial<DeltaSummaryRowStyleOptions>,\n  'positiveFillScale' | 'negativeFillScale' | 'neutralFillScale'\n> & {\n  positiveFillScale?: ColorScalePartialOptions;\n  negativeFillScale?: ColorScalePartialOptions;\n  neutralFillScale?: ColorScalePartialOptions;\n};\n\nexport interface DeltaSummarySeriesOptions extends CustomSeriesOptions {\n  /**\n   * The rendered summary rows, selected by `DeltaSummaryColumnModel` keys.\n   */\n  rows: DeltaSummaryColumnKey[];\n  rowLabels: Partial<Record<DeltaSummaryColumnKey, string>>;\n  rowHeight: number;\n  columnWidth: WidthRangeOptions;\n  labelWidth: number;\n  showLabels: boolean;\n  fontFamily: string;\n  fontSize: number;\n  labelBackgroundColor: string;\n  labelTextColor: string;\n  cellBorderColor: string;\n  cellBorderWidth: number;\n  minOpacity: number;\n  maxOpacity: number;\n  rowStyles: Record<DeltaSummaryColumnKey, DeltaSummaryRowStyleOptions>;\n}\n\nexport type DeltaSummarySeriesPartialOptions = Omit<\n  Partial<DeltaSummarySeriesOptions>,\n  'columnWidth' | 'rowLabels' | 'rowStyles'\n> & {\n  columnWidth?: Partial<WidthRangeOptions>;\n  rowLabels?: Partial<Record<DeltaSummaryColumnKey, string>>;\n  rowStyles?: Partial<Record<DeltaSummaryColumnKey, DeltaSummaryRowStylePartialOptions>>;\n};\n\nexport interface VwapOptions {\n  color: string;\n  lineWidth: LineWidth;\n  resetMode: VwapResetMode;\n  sessions?: SessionDefinition[];\n}\n\nfunction mergeColorScaleOptions(\n  defaults: ColorScaleOptions,\n  options?: ColorScalePartialOptions,\n): ColorScaleOptions {\n  return {\n    ...defaults,\n    ...options,\n    range: {\n      ...defaults.range,\n      ...options?.range,\n    },\n    stops: options?.stops ?? defaults.stops,\n  };\n}\n\nfunction createDefaultMetricStyle(style: FootprintStyleOptions): FootprintMetricStyleOptions {\n  return {\n    fontFamily: style.fontFamily,\n    fontSize: style.fontSize,\n    fontWeight: '600',\n    fontShorthand: undefined,\n    textColor: style.textColor,\n    positiveTextColor: style.positiveDeltaColor,\n    negativeTextColor: style.negativeDeltaColor,\n    neutralTextColor: style.neutralTextColor,\n    backgroundColor: 'transparent',\n    borderColor: 'transparent',\n    borderWidth: 0,\n    borderShorthand: undefined,\n    paddingX: 0,\n    paddingY: 0,\n  };\n}\n\nfunction createGenericMetricItem(\n  style: FootprintStyleOptions,\n  id: string,\n): FootprintMetricItemOptions {\n  return {\n    id,\n    visible: true,\n    placement: 'bottom',\n    metricStyleVariant: 'auto',\n    offset: 2,\n    align: 'center',\n    minSpacing: 0,\n    style: createDefaultMetricStyle(style),\n  };\n}\n\nexport function createFootprintMetricPresets(\n  style: FootprintStyleOptions = DEFAULT_FOOTPRINT_STYLE,\n): Record<'delta' | 'volume', FootprintMetricItemOptions> {\n  const delta = createGenericMetricItem(style, 'delta');\n  const volume = createGenericMetricItem(style, 'volume');\n\n  return {\n    delta: {\n      ...delta,\n      metricStyleKey: 'metric1',\n      valueKey: 'delta',\n      label: 'D',\n    },\n    volume: {\n      ...volume,\n      valueKey: 'totalVolume',\n      label: 'V',\n      style: {\n        ...volume.style,\n        textColor: style.textColor,\n        positiveTextColor: style.textColor,\n        negativeTextColor: style.textColor,\n        neutralTextColor: style.textColor,\n      },\n    },\n  };\n}\n\nfunction createDefaultFootprintSummaryOptions(\n  style: FootprintStyleOptions,\n): FootprintSummaryOptions {\n  const metricPresets = createFootprintMetricPresets(style);\n\n  return {\n    stackGap: 2,\n    items: [metricPresets.delta, metricPresets.volume],\n  };\n}\n\nfunction createDefaultFootprintShadingOptions(\n  style: FootprintStyleOptions,\n  ladder: FootprintLadderOptions,\n): FootprintShadingOptions {\n  return {\n    bidAskMetric: 'volume/max',\n    singleCellMetric: 'volume/max',\n    bidScale: createAlphaColorScale(style.bidFillColor, ladder.minOpacity, ladder.maxOpacity),\n    askScale: createAlphaColorScale(style.askFillColor, ladder.minOpacity, ladder.maxOpacity),\n    positiveDeltaScale: createAlphaColorScale(\n      style.positiveDeltaColor,\n      ladder.minOpacity,\n      ladder.maxOpacity,\n    ),\n    negativeDeltaScale: createAlphaColorScale(\n      style.negativeDeltaColor,\n      ladder.minOpacity,\n      ladder.maxOpacity,\n    ),\n    neutralScale: createAlphaColorScale(style.askFillColor, ladder.minOpacity, ladder.maxOpacity),\n  };\n}\n\nfunction mergeFootprintMetricItem(\n  style: FootprintStyleOptions,\n  item: FootprintMetricItemPartialOptions,\n): FootprintMetricItemOptions {\n  const presets = createFootprintMetricPresets(style);\n  const defaultItem =\n    presets[item.id as keyof typeof presets] ?? createGenericMetricItem(style, item.id);\n\n  return {\n    ...defaultItem,\n    ...item,\n    style: {\n      ...defaultItem.style,\n      ...item.style,\n    },\n  };\n}\n\nfunction createDeltaSummaryRowStyle(\n  positiveFillColor: string,\n  negativeFillColor: string,\n  neutralFillColor: string,\n  textColor: string,\n  minOpacity: number,\n  maxOpacity: number,\n): DeltaSummaryRowStyleOptions {\n  return {\n    positiveFillColor,\n    negativeFillColor,\n    neutralFillColor,\n    positiveFillScale: createAlphaColorScale(positiveFillColor, minOpacity, maxOpacity),\n    negativeFillScale: createAlphaColorScale(negativeFillColor, minOpacity, maxOpacity),\n    neutralFillScale: createAlphaColorScale(neutralFillColor, minOpacity, maxOpacity),\n    textColor,\n  };\n}\n\nfunction createDefaultDeltaSummaryRowStyles(\n  minOpacity: number,\n  maxOpacity: number,\n): Record<DeltaSummaryColumnKey, DeltaSummaryRowStyleOptions> {\n  return {\n    delta: createDeltaSummaryRowStyle(\n      'rgba(34, 197, 94, 0.42)',\n      'rgba(239, 68, 68, 0.42)',\n      'rgba(148, 163, 184, 0.24)',\n      '#0f172a',\n      minOpacity,\n      maxOpacity,\n    ),\n    maxDelta: createDeltaSummaryRowStyle(\n      'rgba(134, 239, 172, 0.6)',\n      'rgba(254, 202, 202, 0.6)',\n      'rgba(226, 232, 240, 0.5)',\n      '#0f172a',\n      minOpacity,\n      maxOpacity,\n    ),\n    minDelta: createDeltaSummaryRowStyle(\n      'rgba(134, 239, 172, 0.6)',\n      'rgba(254, 202, 202, 0.6)',\n      'rgba(226, 232, 240, 0.5)',\n      '#0f172a',\n      minOpacity,\n      maxOpacity,\n    ),\n    cumulativeDelta: createDeltaSummaryRowStyle(\n      'rgba(74, 222, 128, 0.55)',\n      'rgba(248, 113, 113, 0.55)',\n      'rgba(148, 163, 184, 0.24)',\n      '#0f172a',\n      minOpacity,\n      maxOpacity,\n    ),\n    cumulativeDeltaToVolumeRatio: createDeltaSummaryRowStyle(\n      'rgba(187, 247, 208, 0.72)',\n      'rgba(254, 202, 202, 0.72)',\n      'rgba(226, 232, 240, 0.5)',\n      '#0f172a',\n      minOpacity,\n      maxOpacity,\n    ),\n    volume: createDeltaSummaryRowStyle(\n      'rgba(59, 130, 246, 0.75)',\n      'rgba(59, 130, 246, 0.75)',\n      'rgba(59, 130, 246, 0.75)',\n      '#eff6ff',\n      minOpacity,\n      maxOpacity,\n    ),\n  };\n}\n\nexport const DEFAULT_FOOTPRINT_STYLE: FootprintStyleOptions = {\n  fontFamily: 'Inter, Arial, sans-serif',\n  fontSize: 11,\n  priceDecimalDigits: 2,\n  priceRounding: 'ceil',\n  valueIntegerDigits: 2,\n  valueDecimalDigits: 1,\n  valueRounding: 'ceil',\n  valueUnitVisible: true,\n  textColor: '#e2e8f0',\n  bidTextColor: '#fda4af',\n  askTextColor: '#93c5fd',\n  neutralTextColor: '#cbd5e1',\n  positiveDeltaColor: '#22c55e',\n  negativeDeltaColor: '#ef4444',\n  bullishCandleColor: '#22c55e',\n  bearishCandleColor: '#ef4444',\n  candleWickColor: '#e2e8f0',\n  candleBorderColor: '#0f172a',\n  separatorColor: '#94a3b8',\n  separatorFont: '400 10px Inter, Arial, sans-serif',\n  bidFillColor: 'rgba(239, 68, 68, 0.28)',\n  askFillColor: 'rgba(59, 130, 246, 0.28)',\n  buyImbalanceColor: '#38bdf8',\n  sellImbalanceColor: '#fb7185',\n  metricStyles: {\n    metric0: {\n      primary: {\n        color: '#2563eb',\n        font: '700 11px Inter, Arial, sans-serif',\n      },\n      secondary: {\n        color: '#dc2626',\n      },\n    },\n    metric1: {\n      primary: {\n        color: '#22c55e',\n        font: '700 11px Inter, Arial, sans-serif',\n      },\n      secondary: {\n        color: '#ef4444',\n      },\n    },\n  },\n  imbalanceMetricStyleKey: 'metric0',\n  positiveImbalanceTextColor: '#2563eb',\n  positiveImbalanceTextFont: '700 11px Inter, Arial, sans-serif',\n  negativeImbalanceTextColor: '#dc2626',\n  negativeImbalanceTextFont: '700 11px Inter, Arial, sans-serif',\n  diagonalDominanceColor: '#2563eb',\n  diagonalDominanceFont: '700 11px Inter, Arial, sans-serif',\n  buyImbalanceFillColor: 'rgba(56, 189, 248, 0.18)',\n  sellImbalanceFillColor: 'rgba(251, 113, 133, 0.18)',\n  stackedBuyImbalanceFillColor: 'rgba(56, 189, 248, 0.26)',\n  stackedSellImbalanceFillColor: 'rgba(251, 113, 133, 0.26)',\n  stackedImbalanceOutline: '#fde047',\n  ladderBorderColor: '#1e293b',\n  cellBorderColor: 'rgba(15, 23, 42, 0.24)',\n  profileBidColor: 'rgba(248, 113, 113, 0.45)',\n  profileAskColor: 'rgba(96, 165, 250, 0.45)',\n  valueAreaColor: 'rgba(148, 163, 184, 0.18)',\n  sessionLabelColor: '#f8fafc',\n};\n\nexport const DEFAULT_FOOTPRINT_LAYOUT_OPTIONS: FootprintLayoutOptions = {\n  barWidth: {\n    min: 4,\n    max: '88%',\n  },\n};\n\nexport const DEFAULT_FOOTPRINT_CANDLE_OPTIONS: FootprintCandleOptions = {\n  visible: true,\n  position: 'left',\n  widthRatio: 0.24,\n  minWidth: 2,\n  maxWidth: 16,\n  gap: 1,\n  showWicks: true,\n};\n\nexport const DEFAULT_FOOTPRINT_LADDER_OPTIONS: FootprintLadderOptions = {\n  textMode: 'bid-ask',\n  rowHeight: 16,\n  priceStep: 0,\n  showHeatmap: true,\n  bidAskFillMode: 'by-side',\n  imbalanceRatio: 3,\n  stackedImbalanceLength: 3,\n  highlightImbalances: true,\n  highlightStackedImbalances: true,\n  highlightImbalanceText: false,\n  highlightDiagonalDominance: true,\n  diagonalDominanceFactor: 3,\n  separatorMode: 'line',\n  separatorLabel: 'x',\n  separatorGap: 0,\n  cellPadding: 2,\n  borderWidth: 1,\n  cellBorderWidth: 1,\n  stackedImbalanceBorderWidth: 1,\n  minOpacity: 0.1,\n  maxOpacity: 0.92,\n};\n\nexport const DEFAULT_FOOTPRINT_POINT_OF_CONTROL_OPTIONS: FootprintPointOfControlOptions = {\n  visible: true,\n  backgroundColor: 'rgba(226, 232, 240, 0.06)',\n  borderColor: 'rgba(226, 232, 240, 0.65)',\n  borderWidth: 1,\n};\n\nexport const DEFAULT_FOOTPRINT_METRIC_PRESETS = createFootprintMetricPresets();\nexport const DEFAULT_FOOTPRINT_SUMMARY_OPTIONS =\n  createDefaultFootprintSummaryOptions(DEFAULT_FOOTPRINT_STYLE);\nexport const DEFAULT_FOOTPRINT_SHADING_OPTIONS = createDefaultFootprintShadingOptions(\n  DEFAULT_FOOTPRINT_STYLE,\n  DEFAULT_FOOTPRINT_LADDER_OPTIONS,\n);\n\nexport const DEFAULT_FOOTPRINT_SERIES_OPTIONS: FootprintSeriesOptions = {\n  ...customSeriesDefaultOptions,\n  color: '#38bdf8',\n  priceLineVisible: false,\n  lastValueVisible: false,\n  title: 'Footprint',\n  layout: DEFAULT_FOOTPRINT_LAYOUT_OPTIONS,\n  candle: DEFAULT_FOOTPRINT_CANDLE_OPTIONS,\n  ladder: DEFAULT_FOOTPRINT_LADDER_OPTIONS,\n  shading: DEFAULT_FOOTPRINT_SHADING_OPTIONS,\n  pointOfControl: DEFAULT_FOOTPRINT_POINT_OF_CONTROL_OPTIONS,\n  summary: DEFAULT_FOOTPRINT_SUMMARY_OPTIONS,\n  style: DEFAULT_FOOTPRINT_STYLE,\n};\n\nexport const DEFAULT_VOLUME_PROFILE_OPTIONS: VolumeProfileOptions = {\n  widthRatio: 0.2,\n  align: 'right',\n  scope: { kind: 'visible-range' },\n  valueAreaPercent: 0.7,\n  showPointOfControl: true,\n  showValueArea: true,\n  opacity: 0.8,\n  pointOfControl: {\n    backgroundColor: 'rgba(249, 115, 22, 0.2)',\n    borderColor: '#f97316',\n    lineWidth: 1.5,\n  },\n  style: {\n    profileBidColor: DEFAULT_FOOTPRINT_STYLE.profileBidColor,\n    profileAskColor: DEFAULT_FOOTPRINT_STYLE.profileAskColor,\n    valueAreaColor: DEFAULT_FOOTPRINT_STYLE.valueAreaColor,\n    sessionLabelColor: DEFAULT_FOOTPRINT_STYLE.sessionLabelColor,\n  },\n};\n\nexport const DEFAULT_SESSION_VOLUME_PROFILE_OPTIONS: SessionVolumeProfileOptions = {\n  ...DEFAULT_VOLUME_PROFILE_OPTIONS,\n  scope: { kind: 'session' },\n  showSessionLabels: true,\n};\n\nexport const DEFAULT_VOLUME_FOOTPRINT_OPTIONS: VolumeFootprintOptions = {\n  ...DEFAULT_FOOTPRINT_SERIES_OPTIONS,\n  title: 'Volume Footprint',\n  ladder: {\n    ...DEFAULT_FOOTPRINT_SERIES_OPTIONS.ladder,\n    textMode: 'total',\n  },\n};\n\nexport const DEFAULT_DELTA_SUMMARY_ROW_STYLES = createDefaultDeltaSummaryRowStyles(0.28, 0.9);\n\nexport const DEFAULT_DELTA_SUMMARY_SERIES_OPTIONS: DeltaSummarySeriesOptions = {\n  ...customSeriesDefaultOptions,\n  color: '#64748b',\n  priceLineVisible: false,\n  lastValueVisible: false,\n  title: 'Delta Summary',\n  rows: [\n    'delta',\n    'maxDelta',\n    'minDelta',\n    'cumulativeDelta',\n    'cumulativeDeltaToVolumeRatio',\n    'volume',\n  ],\n  rowLabels: {\n    delta: 'Delta',\n    maxDelta: 'Max. Delta',\n    minDelta: 'Min. Delta',\n    cumulativeDelta: 'Cum. Delta',\n    cumulativeDeltaToVolumeRatio: 'Cum. Delta / Vol',\n    volume: 'Volume',\n  },\n  rowHeight: 22,\n  columnWidth: {\n    min: 8,\n    max: '88%',\n  },\n  labelWidth: 120,\n  showLabels: true,\n  fontFamily: DEFAULT_FOOTPRINT_STYLE.fontFamily,\n  fontSize: 11,\n  labelBackgroundColor: 'rgba(148, 163, 184, 0.18)',\n  labelTextColor: '#e2e8f0',\n  cellBorderColor: 'rgba(15, 23, 42, 0.24)',\n  cellBorderWidth: 1,\n  minOpacity: 0.28,\n  maxOpacity: 0.9,\n  rowStyles: DEFAULT_DELTA_SUMMARY_ROW_STYLES,\n};\n\nexport const DEFAULT_VWAP_OPTIONS: VwapOptions = {\n  color: '#f59e0b',\n  lineWidth: 2,\n  resetMode: 'session',\n};\n\nexport const DEFAULT_CANDLE_HEATMAP_OPTIONS: CandleHeatmapOptions = {\n  range: {\n    min: 0,\n    minShadeThreshold: 0.1,\n    threshold: 0.5,\n    maxShadeThreshold: 0.9,\n    max: 1,\n  },\n  downColor: '#dc2626',\n  upColor: '#2563eb',\n  wickDownColor: undefined,\n  wickUpColor: undefined,\n  borderDownColor: undefined,\n  borderUpColor: undefined,\n  borderVisible: true,\n  shadeWicks: true,\n  noOfShades: 1,\n  shader: 'alpha',\n};\n\nexport function mergeFootprintSeriesOptions(\n  options?: FootprintSeriesPartialOptions,\n): FootprintSeriesOptions {\n  const style: FootprintStyleOptions = {\n    ...DEFAULT_FOOTPRINT_STYLE,\n    ...options?.style,\n    metricStyles: {\n      ...DEFAULT_FOOTPRINT_STYLE.metricStyles,\n      ...options?.style?.metricStyles,\n    },\n  };\n  const layout: FootprintLayoutOptions = {\n    ...DEFAULT_FOOTPRINT_LAYOUT_OPTIONS,\n    ...options?.layout,\n    barWidth: {\n      ...DEFAULT_FOOTPRINT_LAYOUT_OPTIONS.barWidth,\n      ...options?.layout?.barWidth,\n    },\n  };\n  const candle: FootprintCandleOptions = {\n    ...DEFAULT_FOOTPRINT_CANDLE_OPTIONS,\n    ...options?.candle,\n  };\n  const ladder: FootprintLadderOptions = {\n    ...DEFAULT_FOOTPRINT_LADDER_OPTIONS,\n    ...options?.ladder,\n  };\n  const pointOfControl: FootprintPointOfControlOptions = {\n    ...DEFAULT_FOOTPRINT_POINT_OF_CONTROL_OPTIONS,\n    ...options?.pointOfControl,\n  };\n  const shadingDefaults = createDefaultFootprintShadingOptions(style, ladder);\n  const summaryDefaults = createDefaultFootprintSummaryOptions(style);\n\n  return {\n    ...DEFAULT_FOOTPRINT_SERIES_OPTIONS,\n    ...options,\n    layout,\n    candle,\n    ladder,\n    shading: {\n      ...shadingDefaults,\n      ...options?.shading,\n      bidScale: mergeColorScaleOptions(shadingDefaults.bidScale, options?.shading?.bidScale),\n      askScale: mergeColorScaleOptions(shadingDefaults.askScale, options?.shading?.askScale),\n      positiveDeltaScale: mergeColorScaleOptions(\n        shadingDefaults.positiveDeltaScale,\n        options?.shading?.positiveDeltaScale,\n      ),\n      negativeDeltaScale: mergeColorScaleOptions(\n        shadingDefaults.negativeDeltaScale,\n        options?.shading?.negativeDeltaScale,\n      ),\n      neutralScale: mergeColorScaleOptions(\n        shadingDefaults.neutralScale,\n        options?.shading?.neutralScale,\n      ),\n    },\n    pointOfControl,\n    summary: {\n      ...summaryDefaults,\n      ...options?.summary,\n      items: options?.summary?.items\n        ? options.summary.items.map((item) => mergeFootprintMetricItem(style, item))\n        : summaryDefaults.items,\n    },\n    style,\n  };\n}\n\nexport function mergeVolumeProfileOptions(\n  options?: VolumeProfilePartialOptions,\n): VolumeProfileOptions {\n  return {\n    ...DEFAULT_VOLUME_PROFILE_OPTIONS,\n    ...options,\n    pointOfControl: {\n      ...DEFAULT_VOLUME_PROFILE_OPTIONS.pointOfControl,\n      ...options?.pointOfControl,\n    },\n    style: {\n      ...DEFAULT_VOLUME_PROFILE_OPTIONS.style,\n      ...options?.style,\n    },\n  };\n}\n\nexport function mergeSessionVolumeProfileOptions(\n  options?: SessionVolumeProfilePartialOptions,\n): SessionVolumeProfileOptions {\n  return {\n    ...DEFAULT_SESSION_VOLUME_PROFILE_OPTIONS,\n    ...options,\n    pointOfControl: {\n      ...DEFAULT_SESSION_VOLUME_PROFILE_OPTIONS.pointOfControl,\n      ...options?.pointOfControl,\n    },\n    style: {\n      ...DEFAULT_SESSION_VOLUME_PROFILE_OPTIONS.style,\n      ...options?.style,\n    },\n  };\n}\n\nexport function mergeDeltaSummarySeriesOptions(\n  options?: DeltaSummarySeriesPartialOptions,\n): DeltaSummarySeriesOptions {\n  const merged: DeltaSummarySeriesOptions = {\n    ...DEFAULT_DELTA_SUMMARY_SERIES_OPTIONS,\n    ...options,\n    rows: options?.rows ?? DEFAULT_DELTA_SUMMARY_SERIES_OPTIONS.rows,\n    rowLabels: {\n      ...DEFAULT_DELTA_SUMMARY_SERIES_OPTIONS.rowLabels,\n      ...options?.rowLabels,\n    },\n    columnWidth: {\n      ...DEFAULT_DELTA_SUMMARY_SERIES_OPTIONS.columnWidth,\n      ...options?.columnWidth,\n    },\n    rowStyles: DEFAULT_DELTA_SUMMARY_SERIES_OPTIONS.rowStyles,\n  };\n  const defaultRowStyles = createDefaultDeltaSummaryRowStyles(merged.minOpacity, merged.maxOpacity);\n  const keys = Object.keys(defaultRowStyles) as DeltaSummaryColumnKey[];\n\n  merged.rowStyles = keys.reduce<Record<DeltaSummaryColumnKey, DeltaSummaryRowStyleOptions>>(\n    (collection, key) => {\n      const override = options?.rowStyles?.[key];\n      const base = defaultRowStyles[key];\n      const next = {\n        ...base,\n        ...override,\n      };\n\n      collection[key] = {\n        ...next,\n        positiveFillScale: mergeColorScaleOptions(\n          createAlphaColorScale(next.positiveFillColor, merged.minOpacity, merged.maxOpacity),\n          override?.positiveFillScale,\n        ),\n        negativeFillScale: mergeColorScaleOptions(\n          createAlphaColorScale(next.negativeFillColor, merged.minOpacity, merged.maxOpacity),\n          override?.negativeFillScale,\n        ),\n        neutralFillScale: mergeColorScaleOptions(\n          createAlphaColorScale(next.neutralFillColor, merged.minOpacity, merged.maxOpacity),\n          override?.neutralFillScale,\n        ),\n      };\n\n      return collection;\n    },\n    {} as Record<DeltaSummaryColumnKey, DeltaSummaryRowStyleOptions>,\n  );\n\n  return merged;\n}\n\nexport function mergeVwapOptions(options?: Partial<VwapOptions>): VwapOptions {\n  return {\n    ...DEFAULT_VWAP_OPTIONS,\n    ...options,\n  };\n}\n\nexport function mergeCandleHeatmapOptions(\n  options?: CandleHeatmapPartialOptions,\n): CandleHeatmapOptions {\n  return {\n    ...DEFAULT_CANDLE_HEATMAP_OPTIONS,\n    ...options,\n    range: {\n      ...DEFAULT_CANDLE_HEATMAP_OPTIONS.range,\n      ...options?.range,\n    },\n  };\n}\n","import type {\n  DeltaSummarySeriesPartialOptions,\n  FootprintSeriesPartialOptions,\n  SessionVolumeProfilePartialOptions,\n  VolumeFootprintPartialOptions,\n  VolumeProfilePartialOptions,\n} from '../models/options';\nimport { DEFAULT_FOOTPRINT_STYLE, createFootprintMetricPresets } from '../models/options';\n\nexport interface OrderFlowStylePresetPack {\n  id: string;\n  label: string;\n  footprint?: FootprintSeriesPartialOptions;\n  volumeFootprint?: VolumeFootprintPartialOptions;\n  volumeProfile?: VolumeProfilePartialOptions;\n  sessionVolumeProfile?: SessionVolumeProfilePartialOptions;\n  deltaSummary?: DeltaSummarySeriesPartialOptions;\n}\n\nconst classicFootprintStyle = {\n  fontFamily: 'Arial, sans-serif',\n  fontSize: 12,\n  textColor: '#111827',\n  neutralTextColor: '#111827',\n  bidTextColor: '#dc2626',\n  askTextColor: '#1d4ed8',\n  positiveDeltaColor: '#16a34a',\n  negativeDeltaColor: '#dc2626',\n  bullishCandleColor: '#16a34a',\n  bearishCandleColor: '#dc2626',\n  candleWickColor: '#111827',\n  candleBorderColor: '#111827',\n  separatorColor: '#111827',\n  separatorFont: '600 12px Arial, sans-serif',\n  bidFillColor: 'rgba(255, 255, 255, 0.01)',\n  askFillColor: 'rgba(255, 255, 255, 0.01)',\n  buyImbalanceColor: '#1d4ed8',\n  sellImbalanceColor: '#dc2626',\n  metricStyles: {\n    metric0: {\n      primary: {\n        color: '#2563eb',\n        font: '700 12px Arial, sans-serif',\n      },\n      secondary: {\n        color: '#dc2626',\n      },\n    },\n    metric1: {\n      primary: {\n        color: '#16a34a',\n        font: '700 12px Arial, sans-serif',\n      },\n      secondary: {\n        color: '#dc2626',\n      },\n    },\n  },\n  imbalanceMetricStyleKey: 'metric0' as const,\n  positiveImbalanceTextColor: '#2563eb',\n  positiveImbalanceTextFont: '700 12px Arial, sans-serif',\n  negativeImbalanceTextColor: '#dc2626',\n  negativeImbalanceTextFont: '700 12px Arial, sans-serif',\n  diagonalDominanceColor: '#2563eb',\n  diagonalDominanceFont: '700 12px Arial, sans-serif',\n  buyImbalanceFillColor: 'rgba(255, 255, 255, 0)',\n  sellImbalanceFillColor: 'rgba(255, 255, 255, 0)',\n  stackedBuyImbalanceFillColor: 'rgba(255, 255, 255, 0)',\n  stackedSellImbalanceFillColor: 'rgba(255, 255, 255, 0)',\n  stackedImbalanceOutline: '#111827',\n  ladderBorderColor: '#111827',\n  cellBorderColor: '#111827',\n};\n\nconst darkReferenceStyle = {\n  fontFamily: 'Arial, sans-serif',\n  fontSize: 11,\n  textColor: '#e5e7eb',\n  neutralTextColor: '#cbd5e1',\n  bidTextColor: '#f87171',\n  askTextColor: '#e5e7eb',\n  positiveDeltaColor: '#22c55e',\n  negativeDeltaColor: '#f87171',\n  bullishCandleColor: '#22c55e',\n  bearishCandleColor: '#ef4444',\n  candleWickColor: '#f8fafc',\n  candleBorderColor: '#e5e7eb',\n  separatorColor: '#e5e7eb',\n  separatorFont: '400 11px Arial, sans-serif',\n  bidFillColor: 'rgba(148, 163, 184, 0.1)',\n  askFillColor: 'rgba(226, 232, 240, 0.08)',\n  buyImbalanceColor: '#38bdf8',\n  sellImbalanceColor: '#f87171',\n  metricStyles: {\n    metric0: {\n      primary: {\n        color: '#60a5fa',\n        font: '700 11px Arial, sans-serif',\n      },\n      secondary: {\n        color: '#f87171',\n      },\n    },\n    metric1: {\n      primary: {\n        color: '#22c55e',\n        font: '700 11px Arial, sans-serif',\n      },\n      secondary: {\n        color: '#f87171',\n      },\n    },\n  },\n  imbalanceMetricStyleKey: 'metric0' as const,\n  positiveImbalanceTextColor: '#60a5fa',\n  positiveImbalanceTextFont: '700 11px Arial, sans-serif',\n  negativeImbalanceTextColor: '#f87171',\n  negativeImbalanceTextFont: '700 11px Arial, sans-serif',\n  diagonalDominanceColor: '#60a5fa',\n  diagonalDominanceFont: '700 11px Arial, sans-serif',\n  buyImbalanceFillColor: 'rgba(34, 197, 94, 0.12)',\n  sellImbalanceFillColor: 'rgba(239, 68, 68, 0.12)',\n  stackedBuyImbalanceFillColor: 'rgba(34, 197, 94, 0.2)',\n  stackedSellImbalanceFillColor: 'rgba(239, 68, 68, 0.2)',\n  stackedImbalanceOutline: 'rgba(248, 250, 252, 0.8)',\n  ladderBorderColor: 'rgba(148, 163, 184, 0.45)',\n  cellBorderColor: 'rgba(148, 163, 184, 0.42)',\n};\n\nconst classicMetrics = createFootprintMetricPresets({\n  ...DEFAULT_FOOTPRINT_STYLE,\n  ...classicFootprintStyle,\n});\nconst darkMetrics = createFootprintMetricPresets({\n  ...DEFAULT_FOOTPRINT_STYLE,\n  ...darkReferenceStyle,\n});\nconst classicDeltaBadge = {\n  ...classicMetrics.delta,\n  style: {\n    ...classicMetrics.delta.style,\n    paddingX: 6,\n    paddingY: 2,\n    borderWidth: 1,\n    borderColor: 'rgba(17, 24, 39, 0.22)',\n    backgroundColor: 'rgba(255, 255, 255, 0.82)',\n  },\n};\nconst darkDeltaBadge = {\n  ...darkMetrics.delta,\n  style: {\n    ...darkMetrics.delta.style,\n    paddingX: 6,\n    paddingY: 2,\n    borderWidth: 1,\n    borderColor: 'rgba(148, 163, 184, 0.3)',\n    backgroundColor: 'rgba(15, 23, 42, 0.72)',\n  },\n};\n\nfunction createOrderFlowDeltaMetric(baseMetric: typeof classicDeltaBadge) {\n  return {\n    ...baseMetric,\n    label: undefined,\n    metricStyleKey: 'metric0' as const,\n    formatter: ({ rawValue }: { rawValue: number | null }) => rawValue ?? null,\n    style: {\n      ...baseMetric.style,\n      paddingX: 0,\n      paddingY: 0,\n      borderWidth: 0,\n      backgroundColor: 'transparent',\n      textColor: '#111827',\n      neutralTextColor: '#111827',\n      fontWeight: '700',\n    },\n  };\n}\n\nexport const CLASSIC_REFERENCE_FOOTPRINT_OPTIONS: FootprintSeriesPartialOptions = {\n  layout: {\n    barWidth: {\n      min: 22,\n      max: '100%',\n    },\n  },\n  candle: {\n    widthRatio: 0.08,\n    minWidth: 3,\n    maxWidth: 8,\n    gap: 0,\n  },\n  ladder: {\n    showHeatmap: false,\n    borderWidth: 1,\n    cellBorderWidth: 1,\n    highlightImbalances: false,\n    highlightStackedImbalances: false,\n    minOpacity: 0,\n    maxOpacity: 0,\n  },\n  pointOfControl: {\n    visible: false,\n  },\n  summary: {\n    stackGap: 4,\n    items: [classicDeltaBadge],\n  },\n  style: classicFootprintStyle,\n};\n\nexport const ORDER_FLOW_DELTA_FOOTPRINT_OPTIONS: FootprintSeriesPartialOptions = {\n  ...CLASSIC_REFERENCE_FOOTPRINT_OPTIONS,\n  ladder: {\n    ...CLASSIC_REFERENCE_FOOTPRINT_OPTIONS.ladder,\n    showHeatmap: true,\n    bidAskFillMode: 'by-total-volume',\n    minOpacity: 0.08,\n    maxOpacity: 0.28,\n  },\n  shading: {\n    bidAskMetric: 'volume/max',\n    neutralScale: {\n      range: {\n        from: 0.12,\n        to: 1,\n        clamp: true,\n        invert: false,\n      },\n      stops: [\n        { offset: 0, color: 'rgba(148, 163, 184, 0.03)' },\n        { offset: 1, color: 'rgba(148, 163, 184, 0.16)' },\n      ],\n    },\n  },\n};\n\nexport const DARK_REFERENCE_FOOTPRINT_BASE_OPTIONS: FootprintSeriesPartialOptions = {\n  layout: {\n    barWidth: {\n      min: 26,\n      max: '100%',\n    },\n  },\n  candle: {\n    widthRatio: 0.1,\n    minWidth: 3,\n    maxWidth: 10,\n    gap: 0,\n  },\n  ladder: {\n    showHeatmap: false,\n    highlightImbalances: true,\n    highlightStackedImbalances: true,\n    borderWidth: 1,\n    cellBorderWidth: 1,\n    stackedImbalanceBorderWidth: 1.25,\n    minOpacity: 0.1,\n    maxOpacity: 0.9,\n  },\n  pointOfControl: {\n    visible: true,\n    backgroundColor: 'rgba(255, 255, 255, 0.05)',\n    borderColor: 'rgba(255, 255, 255, 0.8)',\n    borderWidth: 1,\n  },\n  summary: {\n    stackGap: 4,\n    items: [darkDeltaBadge],\n  },\n  style: darkReferenceStyle,\n};\n\nexport const DARK_REFERENCE_DELTA_SUMMARY_OPTIONS: DeltaSummarySeriesPartialOptions = {\n  columnWidth: {\n    min: 24,\n    max: '100%',\n  },\n  labelWidth: 112,\n  fontFamily: 'Arial, sans-serif',\n  fontSize: 11,\n  labelBackgroundColor: 'rgba(30, 41, 59, 0.9)',\n  labelTextColor: '#e5e7eb',\n  cellBorderColor: 'rgba(15, 23, 42, 0.72)',\n  cellBorderWidth: 1,\n  minOpacity: 0.28,\n  maxOpacity: 0.94,\n  rowStyles: {\n    delta: {\n      positiveFillColor: '#22c55e',\n      negativeFillColor: '#ef4444',\n      neutralFillColor: '#64748b',\n      textColor: '#0f172a',\n    },\n    maxDelta: {\n      positiveFillColor: '#86efac',\n      negativeFillColor: '#fca5a5',\n      neutralFillColor: '#cbd5e1',\n      textColor: '#0f172a',\n    },\n    minDelta: {\n      positiveFillColor: '#86efac',\n      negativeFillColor: '#fca5a5',\n      neutralFillColor: '#cbd5e1',\n      textColor: '#0f172a',\n    },\n    cumulativeDelta: {\n      positiveFillColor: '#22c55e',\n      negativeFillColor: '#ef4444',\n      neutralFillColor: '#64748b',\n      textColor: '#0f172a',\n    },\n    cumulativeDeltaToVolumeRatio: {\n      positiveFillColor: '#bbf7d0',\n      negativeFillColor: '#fecaca',\n      neutralFillColor: '#e2e8f0',\n      textColor: '#0f172a',\n    },\n    volume: {\n      positiveFillColor: '#2563eb',\n      negativeFillColor: '#2563eb',\n      neutralFillColor: '#2563eb',\n      textColor: '#eff6ff',\n    },\n  },\n};\n\nexport const CLASSIC_REFERENCE_DELTA_SUMMARY_OPTIONS: DeltaSummarySeriesPartialOptions = {\n  ...DARK_REFERENCE_DELTA_SUMMARY_OPTIONS,\n  labelBackgroundColor: 'rgba(156, 163, 175, 0.5)',\n  labelTextColor: '#111827',\n  cellBorderColor: '#111827',\n  rowStyles: {\n    delta: {\n      positiveFillColor: '#86efac',\n      negativeFillColor: '#fca5a5',\n      neutralFillColor: '#e5e7eb',\n      textColor: '#111827',\n    },\n    maxDelta: {\n      positiveFillColor: '#86efac',\n      negativeFillColor: '#fca5a5',\n      neutralFillColor: '#e5e7eb',\n      textColor: '#111827',\n    },\n    minDelta: {\n      positiveFillColor: '#86efac',\n      negativeFillColor: '#fca5a5',\n      neutralFillColor: '#e5e7eb',\n      textColor: '#111827',\n    },\n    cumulativeDelta: {\n      positiveFillColor: '#4ade80',\n      negativeFillColor: '#f87171',\n      neutralFillColor: '#e5e7eb',\n      textColor: '#111827',\n    },\n    cumulativeDeltaToVolumeRatio: {\n      positiveFillColor: '#bbf7d0',\n      negativeFillColor: '#fecaca',\n      neutralFillColor: '#e5e7eb',\n      textColor: '#111827',\n    },\n    volume: {\n      positiveFillColor: '#60a5fa',\n      negativeFillColor: '#60a5fa',\n      neutralFillColor: '#60a5fa',\n      textColor: '#eff6ff',\n    },\n  },\n};\n\nexport const CORN_REFERENCE_FOOTPRINT_OPTIONS: FootprintSeriesPartialOptions = {\n  ...DARK_REFERENCE_FOOTPRINT_BASE_OPTIONS,\n  candle: {\n    ...DARK_REFERENCE_FOOTPRINT_BASE_OPTIONS.candle,\n    widthRatio: 0.08,\n    maxWidth: 8,\n  },\n  ladder: {\n    ...DARK_REFERENCE_FOOTPRINT_BASE_OPTIONS.ladder,\n    showHeatmap: false,\n    minOpacity: 0,\n    maxOpacity: 0,\n  },\n  pointOfControl: {\n    visible: true,\n    backgroundColor: 'rgba(255, 255, 255, 0.04)',\n    borderColor: '#111827',\n    borderWidth: 1.25,\n  },\n  style: {\n    ...darkReferenceStyle,\n    bidFillColor: 'rgba(255, 255, 255, 0.02)',\n    askFillColor: 'rgba(255, 255, 255, 0.02)',\n    candleBorderColor: '#e5e7eb',\n  },\n};\n\nexport const VOLUME_FOOTPRINT_REFERENCE_OPTIONS: VolumeFootprintPartialOptions = {\n  ...DARK_REFERENCE_FOOTPRINT_BASE_OPTIONS,\n  candle: {\n    visible: false,\n  },\n  layout: {\n    barWidth: {\n      min: 30,\n      max: '100%',\n    },\n  },\n  ladder: {\n    ...DARK_REFERENCE_FOOTPRINT_BASE_OPTIONS.ladder,\n    showHeatmap: true,\n    minOpacity: 0.18,\n    maxOpacity: 0.52,\n  },\n  pointOfControl: {\n    visible: true,\n    backgroundColor: 'rgba(17, 24, 39, 0.28)',\n    borderColor: '#111827',\n    borderWidth: 1.25,\n  },\n  style: {\n    ...darkReferenceStyle,\n    textColor: '#111827',\n    neutralTextColor: '#111827',\n    askFillColor: 'rgba(226, 232, 240, 0.46)',\n    bidFillColor: 'rgba(203, 213, 225, 0.36)',\n    buyImbalanceFillColor: 'rgba(34, 197, 94, 0.12)',\n    sellImbalanceFillColor: 'rgba(239, 68, 68, 0.12)',\n    candleBorderColor: '#16a34a',\n  },\n};\n\nexport const LEFT_ALIGNED_REFERENCE_VOLUME_PROFILE_OPTIONS: VolumeProfilePartialOptions = {\n  align: 'left',\n  widthRatio: 0.12,\n  pointOfControl: {\n    backgroundColor: 'rgba(17, 24, 39, 0.18)',\n    borderColor: '#111827',\n    lineWidth: 1.25,\n  },\n  style: {\n    profileBidColor: 'rgba(45, 212, 191, 0.68)',\n    profileAskColor: 'rgba(255, 0, 0, 0.85)',\n    valueAreaColor: 'rgba(255, 255, 255, 0.04)',\n    sessionLabelColor: '#e5e7eb',\n  },\n};\n\nexport const SHADED_REFERENCE_VOLUME_PROFILE_OPTIONS: VolumeProfilePartialOptions = {\n  align: 'left',\n  widthRatio: 0.12,\n  pointOfControl: {\n    backgroundColor: 'rgba(17, 24, 39, 0.2)',\n    borderColor: '#111827',\n    lineWidth: 1.2,\n  },\n  style: {\n    profileBidColor: 'rgba(45, 212, 191, 0.68)',\n    profileAskColor: 'rgba(255, 0, 0, 0.85)',\n    valueAreaColor: 'rgba(255, 255, 255, 0.05)',\n    sessionLabelColor: '#e5e7eb',\n  },\n};\n\nexport const SHADED_REFERENCE_FOOTPRINT_OPTIONS: FootprintSeriesPartialOptions = {\n  ...DARK_REFERENCE_FOOTPRINT_BASE_OPTIONS,\n  candle: {\n    ...DARK_REFERENCE_FOOTPRINT_BASE_OPTIONS.candle,\n    widthRatio: 0.06,\n    maxWidth: 6,\n  },\n  ladder: {\n    ...DARK_REFERENCE_FOOTPRINT_BASE_OPTIONS.ladder,\n    showHeatmap: true,\n    minOpacity: 0.14,\n    maxOpacity: 0.48,\n  },\n  shading: {\n    bidAskMetric: 'volume/max',\n    bidScale: {\n      range: {\n        from: 0.15,\n        to: 1,\n        clamp: true,\n        invert: false,\n      },\n      stops: [\n        { offset: 0, color: 'rgba(248, 113, 113, 0)' },\n        { offset: 1, color: 'rgba(248, 113, 113, 0.32)' },\n      ],\n    },\n    askScale: {\n      range: {\n        from: 0.15,\n        to: 1,\n        clamp: true,\n        invert: false,\n      },\n      stops: [\n        { offset: 0, color: 'rgba(187, 247, 208, 0)' },\n        { offset: 1, color: 'rgba(187, 247, 208, 0.34)' },\n      ],\n    },\n    neutralScale: {\n      range: {\n        from: 0.15,\n        to: 1,\n        clamp: true,\n        invert: false,\n      },\n      stops: [\n        { offset: 0, color: 'rgba(255, 255, 255, 0)' },\n        { offset: 1, color: 'rgba(255, 255, 255, 0.18)' },\n      ],\n    },\n  },\n  pointOfControl: {\n    visible: true,\n    backgroundColor: 'rgba(17, 24, 39, 0.14)',\n    borderColor: '#111827',\n    borderWidth: 1.1,\n  },\n  style: {\n    ...darkReferenceStyle,\n    bidTextColor: '#111827',\n    askTextColor: '#111827',\n    neutralTextColor: '#111827',\n    bidFillColor: 'rgba(248, 113, 113, 0.32)',\n    askFillColor: 'rgba(187, 247, 208, 0.34)',\n    buyImbalanceFillColor: 'rgba(34, 197, 94, 0.18)',\n    sellImbalanceFillColor: 'rgba(239, 68, 68, 0.18)',\n    stackedBuyImbalanceFillColor: 'rgba(34, 197, 94, 0.26)',\n    stackedSellImbalanceFillColor: 'rgba(239, 68, 68, 0.26)',\n    stackedImbalanceOutline: 'rgba(15, 23, 42, 0.72)',\n  },\n};\n\nexport const SHADED_REFERENCE_DELTA_SUMMARY_OPTIONS: DeltaSummarySeriesPartialOptions = {\n  ...DARK_REFERENCE_DELTA_SUMMARY_OPTIONS,\n  rows: ['delta', 'cumulativeDelta', 'volume'],\n  rowLabels: {\n    delta: 'Delta',\n    cumulativeDelta: 'Cum. Delta',\n    volume: 'Volume',\n  },\n};\n\nexport const ORDER_FLOW_REFERENCE_FOOTPRINT_OPTIONS: FootprintSeriesPartialOptions = {\n  layout: {\n    barWidth: {\n      min: 24,\n      max: '100%',\n    },\n  },\n  candle: {\n    visible: true,\n    position: 'left',\n    widthRatio: 0.06,\n    minWidth: 2,\n    maxWidth: 4,\n    gap: 0,\n    showWicks: false,\n  },\n  ladder: {\n    textMode: 'bid-ask',\n    showHeatmap: true,\n    bidAskFillMode: 'by-delta',\n    highlightImbalances: false,\n    highlightStackedImbalances: false,\n    highlightImbalanceText: true,\n    highlightDiagonalDominance: false,\n    diagonalDominanceFactor: 3,\n    separatorMode: 'letter',\n    separatorLabel: 'x',\n    separatorGap: 10,\n    borderWidth: 0,\n    cellBorderWidth: 0,\n    minOpacity: 0.16,\n    maxOpacity: 0.84,\n  },\n  pointOfControl: {\n    visible: true,\n    backgroundColor: 'transparent',\n    borderColor: '#111827',\n    borderWidth: 1.1,\n  },\n  summary: {\n    items: [createOrderFlowDeltaMetric(classicDeltaBadge)],\n  },\n  style: {\n    ...classicFootprintStyle,\n    textColor: '#111827',\n    neutralTextColor: '#111827',\n    bidTextColor: '#111827',\n    askTextColor: '#111827',\n    bullishCandleColor: '#22c55e',\n    bearishCandleColor: '#ef4444',\n    candleWickColor: 'rgba(0, 0, 0, 0)',\n    candleBorderColor: 'rgba(0, 0, 0, 0)',\n    bidFillColor: 'rgba(239, 68, 68, 0.14)',\n    askFillColor: 'rgba(34, 197, 94, 0.14)',\n    separatorColor: '#111827',\n    separatorFont: '400 12px Arial, sans-serif',\n    metricStyles: {\n      ...classicFootprintStyle.metricStyles,\n      metric0: {\n        primary: {\n          color: '#2f6dd0',\n          font: '700 12px Arial, sans-serif',\n        },\n        secondary: {\n          color: '#dc2626',\n        },\n      },\n    },\n    imbalanceMetricStyleKey: 'metric0',\n    positiveImbalanceTextColor: '#2f6dd0',\n    positiveImbalanceTextFont: '700 12px Arial, sans-serif',\n    negativeImbalanceTextColor: '#dc2626',\n    negativeImbalanceTextFont: '700 12px Arial, sans-serif',\n    diagonalDominanceColor: '#2f6dd0',\n    diagonalDominanceFont: '700 12px Arial, sans-serif',\n    ladderBorderColor: 'transparent',\n    cellBorderColor: 'transparent',\n  },\n};\n\nexport const ORDER_FLOW_STYLE_PRESETS = {\n  modernDark: {\n    id: 'modernDark',\n    label: 'Modern Dark',\n    footprint: {\n      pointOfControl: {\n        visible: false,\n      },\n    },\n  },\n  classicReference: {\n    id: 'classicReference',\n    label: 'Classic Reference',\n    footprint: CLASSIC_REFERENCE_FOOTPRINT_OPTIONS,\n    deltaSummary: CLASSIC_REFERENCE_DELTA_SUMMARY_OPTIONS,\n  },\n  darkReferenceBase: {\n    id: 'darkReferenceBase',\n    label: 'Dark Reference Base',\n    footprint: DARK_REFERENCE_FOOTPRINT_BASE_OPTIONS,\n    deltaSummary: DARK_REFERENCE_DELTA_SUMMARY_OPTIONS,\n  },\n  cornReference: {\n    id: 'cornReference',\n    label: 'Corn Reference',\n    footprint: CORN_REFERENCE_FOOTPRINT_OPTIONS,\n    deltaSummary: DARK_REFERENCE_DELTA_SUMMARY_OPTIONS,\n  },\n  volumeFootprintReference: {\n    id: 'volumeFootprintReference',\n    label: 'Volume Footprint Reference',\n    volumeFootprint: VOLUME_FOOTPRINT_REFERENCE_OPTIONS,\n    volumeProfile: LEFT_ALIGNED_REFERENCE_VOLUME_PROFILE_OPTIONS,\n  },\n  shadedReference: {\n    id: 'shadedReference',\n    label: 'Shaded Reference',\n    footprint: SHADED_REFERENCE_FOOTPRINT_OPTIONS,\n    volumeProfile: SHADED_REFERENCE_VOLUME_PROFILE_OPTIONS,\n    deltaSummary: SHADED_REFERENCE_DELTA_SUMMARY_OPTIONS,\n  },\n  orderFlowReference: {\n    id: 'orderFlowReference',\n    label: 'Order Flow Reference',\n    footprint: ORDER_FLOW_REFERENCE_FOOTPRINT_OPTIONS,\n  },\n} satisfies Record<string, OrderFlowStylePresetPack>;\n","import type {\n  CandlestickSeriesPartialOptions,\n  HistogramSeriesPartialOptions,\n  LineSeriesPartialOptions,\n} from 'lightweight-charts';\n\nimport type {\n  CandleHeatmapPartialOptions,\n  DeltaSummarySeriesPartialOptions,\n  FootprintSeriesPartialOptions,\n  SessionVolumeProfilePartialOptions,\n  VolumeFootprintPartialOptions,\n  VolumeProfilePartialOptions,\n} from '../models/options';\nimport type { OrderFlowStylePresetPack } from './orderFlowStylePresets';\nimport {\n  CLASSIC_REFERENCE_DELTA_SUMMARY_OPTIONS,\n  CLASSIC_REFERENCE_FOOTPRINT_OPTIONS,\n  CORN_REFERENCE_FOOTPRINT_OPTIONS,\n  DARK_REFERENCE_DELTA_SUMMARY_OPTIONS,\n  DARK_REFERENCE_FOOTPRINT_BASE_OPTIONS,\n  LEFT_ALIGNED_REFERENCE_VOLUME_PROFILE_OPTIONS,\n  ORDER_FLOW_REFERENCE_FOOTPRINT_OPTIONS,\n  SHADED_REFERENCE_FOOTPRINT_OPTIONS,\n  SHADED_REFERENCE_VOLUME_PROFILE_OPTIONS,\n  VOLUME_FOOTPRINT_REFERENCE_OPTIONS,\n} from './orderFlowStylePresets';\n\nexport interface OrderFlowSurfaceTheme {\n  backgroundColor: string;\n  textColor: string;\n  gridColor: string;\n  gridVisible: boolean;\n  borderColor: string;\n  crosshairColor: string;\n  panelBackground: string;\n  panelBorder: string;\n}\n\nexport interface OrderFlowThemePresetPack extends OrderFlowStylePresetPack {\n  mode: 'dark' | 'light';\n  description: string;\n  surface: OrderFlowSurfaceTheme;\n  candleSeries?: CandlestickSeriesPartialOptions;\n  candleHeatmap?: CandleHeatmapPartialOptions;\n  volumeSeries?: HistogramSeriesPartialOptions;\n  volumeDeltaPivotSeries?: CandlestickSeriesPartialOptions;\n  volumeDeltaPivotBaseline?: LineSeriesPartialOptions;\n}\n\ntype CandleSeriesStyleOverrides = Pick<\n  CandlestickSeriesPartialOptions,\n  'borderDownColor' | 'borderUpColor' | 'borderVisible' | 'wickDownColor' | 'wickUpColor'\n>;\n\nfunction createCandleSeriesOptions(\n  upColor: string,\n  downColor: string,\n  borderVisibleOrOverrides: boolean | CandleSeriesStyleOverrides = false,\n): CandlestickSeriesPartialOptions {\n  const overrides =\n    typeof borderVisibleOrOverrides === 'boolean'\n      ? { borderVisible: borderVisibleOrOverrides }\n      : borderVisibleOrOverrides;\n\n  return {\n    upColor,\n    downColor,\n    wickUpColor: overrides.wickUpColor ?? upColor,\n    wickDownColor: overrides.wickDownColor ?? downColor,\n    borderUpColor: overrides.borderUpColor ?? upColor,\n    borderDownColor: overrides.borderDownColor ?? downColor,\n    borderVisible: overrides.borderVisible ?? false,\n    lastValueVisible: false,\n    priceLineVisible: false,\n  };\n}\n\nfunction createVolumeSeriesOptions(\n  upColor: string,\n  _downColor: string,\n): HistogramSeriesPartialOptions {\n  return {\n    priceFormat: { type: 'volume' },\n    lastValueVisible: false,\n    priceLineVisible: false,\n    color: upColor,\n    base: 0,\n  };\n}\n\nfunction createCandleHeatmapOptions(\n  upColor: string,\n  downColor: string,\n  overrides: CandleHeatmapPartialOptions = {},\n): CandleHeatmapPartialOptions {\n  return {\n    downColor,\n    upColor,\n    wickDownColor: overrides.wickDownColor ?? downColor,\n    wickUpColor: overrides.wickUpColor ?? upColor,\n    borderDownColor: overrides.borderDownColor ?? downColor,\n    borderUpColor: overrides.borderUpColor ?? upColor,\n    borderVisible: overrides.borderVisible ?? true,\n    shadeWicks: overrides.shadeWicks ?? false,\n    ...overrides,\n  };\n}\n\nfunction createVolumeDeltaPivotSeriesOptions(\n  upColor: string,\n  downColor: string,\n): CandlestickSeriesPartialOptions {\n  return createCandleSeriesOptions(upColor, downColor, {\n    borderVisible: true,\n    borderUpColor: 'rgba(148, 163, 184, 0.42)',\n    borderDownColor: 'rgba(148, 163, 184, 0.42)',\n  });\n}\n\nfunction createDarkVolumeFootprintTheme(\n  bidFillColor: string,\n  askFillColor: string,\n  textColor: string,\n  pocBorderColor: string,\n): VolumeFootprintPartialOptions {\n  return {\n    style: {\n      ...VOLUME_FOOTPRINT_REFERENCE_OPTIONS.style,\n      textColor,\n      neutralTextColor: textColor,\n      bidFillColor,\n      askFillColor,\n      candleBorderColor: pocBorderColor,\n      ladderBorderColor: pocBorderColor,\n      cellBorderColor: pocBorderColor,\n    },\n    pointOfControl: {\n      ...VOLUME_FOOTPRINT_REFERENCE_OPTIONS.pointOfControl,\n      borderColor: pocBorderColor,\n    },\n    summary: {\n      items: DARK_REFERENCE_FOOTPRINT_BASE_OPTIONS.summary?.items,\n    },\n  };\n}\n\nfunction createLightVolumeFootprintTheme(\n  bidFillColor: string,\n  askFillColor: string,\n  textColor: string,\n  pocBorderColor: string,\n): VolumeFootprintPartialOptions {\n  return {\n    style: {\n      ...VOLUME_FOOTPRINT_REFERENCE_OPTIONS.style,\n      textColor,\n      neutralTextColor: textColor,\n      bidFillColor,\n      askFillColor,\n      candleBorderColor: pocBorderColor,\n      ladderBorderColor: pocBorderColor,\n      cellBorderColor: pocBorderColor,\n    },\n    pointOfControl: {\n      ...VOLUME_FOOTPRINT_REFERENCE_OPTIONS.pointOfControl,\n      borderColor: pocBorderColor,\n      backgroundColor: 'rgba(255, 255, 255, 0.18)',\n    },\n    summary: {\n      items: CLASSIC_REFERENCE_FOOTPRINT_OPTIONS.summary?.items,\n    },\n  };\n}\n\nfunction createSessionProfileTheme(\n  profile: VolumeProfilePartialOptions,\n): SessionVolumeProfilePartialOptions {\n  return {\n    pointOfControl: profile.pointOfControl,\n    style: profile.style,\n  };\n}\n\nconst DARK_POINT_OF_CONTROL = {\n  borderColor: 'rgba(248, 250, 252, 0.88)',\n  backgroundColor: 'rgba(248, 250, 252, 0.08)',\n};\n\nconst LIGHT_POINT_OF_CONTROL = {\n  borderColor: 'rgba(15, 23, 42, 0.82)',\n  backgroundColor: 'rgba(15, 23, 42, 0.06)',\n};\n\nconst DARK_DELTA_SUMMARY_LABEL = 'rgba(2, 6, 23, 0.98)';\nconst LIGHT_DELTA_SUMMARY_LABEL = 'rgba(255, 255, 255, 0.98)';\n\nconst midnightTerminalSurface: OrderFlowSurfaceTheme = {\n  backgroundColor: '#050816',\n  textColor: '#e2e8f0',\n  gridColor: 'rgba(71, 85, 105, 0.18)',\n  gridVisible: true,\n  borderColor: 'rgba(71, 85, 105, 0.32)',\n  crosshairColor: 'rgba(248, 250, 252, 0.22)',\n  panelBackground: 'rgba(5, 8, 22, 0.9)',\n  panelBorder: '1px solid rgba(71, 85, 105, 0.28)',\n};\n\nconst chartDarkProSurface: OrderFlowSurfaceTheme = {\n  backgroundColor: '#131722',\n  textColor: '#d1d4dc',\n  gridColor: 'rgba(42, 46, 57, 0.8)',\n  gridVisible: true,\n  borderColor: 'rgba(42, 46, 57, 1)',\n  crosshairColor: 'rgba(120, 123, 134, 0.55)',\n  panelBackground: 'rgba(19, 23, 34, 0.96)',\n  panelBorder: '1px solid rgba(42, 46, 57, 1)',\n};\n\nconst depthHeatSurface: OrderFlowSurfaceTheme = {\n  backgroundColor: '#06111f',\n  textColor: '#dbeafe',\n  gridColor: 'rgba(56, 189, 248, 0.08)',\n  gridVisible: true,\n  borderColor: 'rgba(56, 189, 248, 0.18)',\n  crosshairColor: 'rgba(125, 211, 252, 0.22)',\n  panelBackground: 'rgba(7, 24, 39, 0.82)',\n  panelBorder: '1px solid rgba(56, 189, 248, 0.16)',\n};\n\nconst cobaltWorkstationSurface: OrderFlowSurfaceTheme = {\n  backgroundColor: '#0b1220',\n  textColor: '#e5e7eb',\n  gridColor: 'rgba(96, 165, 250, 0.1)',\n  gridVisible: true,\n  borderColor: 'rgba(96, 165, 250, 0.2)',\n  crosshairColor: 'rgba(191, 219, 254, 0.22)',\n  panelBackground: 'rgba(11, 18, 32, 0.82)',\n  panelBorder: '1px solid rgba(96, 165, 250, 0.16)',\n};\n\nconst obsidianMinimalSurface: OrderFlowSurfaceTheme = {\n  backgroundColor: '#020617',\n  textColor: '#e2e8f0',\n  gridColor: 'rgba(148, 163, 184, 0.08)',\n  gridVisible: true,\n  borderColor: 'rgba(148, 163, 184, 0.16)',\n  crosshairColor: 'rgba(226, 232, 240, 0.2)',\n  panelBackground: 'rgba(2, 6, 23, 0.9)',\n  panelBorder: '1px solid rgba(148, 163, 184, 0.12)',\n};\n\nconst paperClassicSurface: OrderFlowSurfaceTheme = {\n  backgroundColor: '#ffffff',\n  textColor: '#111827',\n  gridColor: 'rgba(15, 23, 42, 0.08)',\n  gridVisible: true,\n  borderColor: 'rgba(15, 23, 42, 0.2)',\n  crosshairColor: 'rgba(15, 23, 42, 0.18)',\n  panelBackground: '#ffffff',\n  panelBorder: '1px solid rgba(15, 23, 42, 0.14)',\n};\n\nconst daylightCleanSurface: OrderFlowSurfaceTheme = {\n  backgroundColor: '#fcfcfb',\n  textColor: '#111827',\n  gridColor: 'rgba(100, 116, 139, 0.18)',\n  gridVisible: true,\n  borderColor: 'rgba(100, 116, 139, 0.22)',\n  crosshairColor: 'rgba(15, 23, 42, 0.22)',\n  panelBackground: '#ffffff',\n  panelBorder: '1px solid rgba(100, 116, 139, 0.14)',\n};\n\nconst clinicalHighContrastSurface: OrderFlowSurfaceTheme = {\n  backgroundColor: '#ffffff',\n  textColor: '#000000',\n  gridColor: 'rgba(0, 0, 0, 0.1)',\n  gridVisible: true,\n  borderColor: 'rgba(0, 0, 0, 0.24)',\n  crosshairColor: 'rgba(0, 0, 0, 0.22)',\n  panelBackground: '#ffffff',\n  panelBorder: '1px solid rgba(0, 0, 0, 0.2)',\n};\n\nconst ivoryTerminalSurface: OrderFlowSurfaceTheme = {\n  backgroundColor: '#fffaf0',\n  textColor: '#1f2937',\n  gridColor: 'rgba(120, 113, 108, 0.12)',\n  gridVisible: true,\n  borderColor: 'rgba(120, 113, 108, 0.22)',\n  crosshairColor: 'rgba(68, 64, 60, 0.18)',\n  panelBackground: '#fffdf8',\n  panelBorder: '1px solid rgba(120, 113, 108, 0.16)',\n};\n\nconst frostUiSurface: OrderFlowSurfaceTheme = {\n  backgroundColor: '#f1f5f9',\n  textColor: '#0f172a',\n  gridColor: 'rgba(148, 163, 184, 0.14)',\n  gridVisible: true,\n  borderColor: 'rgba(148, 163, 184, 0.24)',\n  crosshairColor: 'rgba(30, 41, 59, 0.18)',\n  panelBackground: '#ffffff',\n  panelBorder: '1px solid rgba(148, 163, 184, 0.16)',\n};\n\nconst midnightTerminalVolumeProfile: VolumeProfilePartialOptions = {\n  style: {\n    ...SHADED_REFERENCE_VOLUME_PROFILE_OPTIONS.style,\n    profileBidColor: 'rgba(248, 113, 113, 0.72)',\n    profileAskColor: 'rgba(96, 165, 250, 0.78)',\n    valueAreaColor: 'rgba(59, 130, 246, 0.08)',\n    sessionLabelColor: '#dbeafe',\n  },\n  pointOfControl: {\n    ...SHADED_REFERENCE_VOLUME_PROFILE_OPTIONS.pointOfControl,\n    borderColor: '#93c5fd',\n    backgroundColor: 'rgba(59, 130, 246, 0.18)',\n  },\n};\n\nconst chartDarkProVolumeProfile: VolumeProfilePartialOptions = {\n  style: SHADED_REFERENCE_VOLUME_PROFILE_OPTIONS.style,\n  pointOfControl: SHADED_REFERENCE_VOLUME_PROFILE_OPTIONS.pointOfControl,\n};\n\nconst depthHeatVolumeProfile: VolumeProfilePartialOptions = {\n  style: {\n    ...SHADED_REFERENCE_VOLUME_PROFILE_OPTIONS.style,\n    profileBidColor: 'rgba(248, 113, 113, 0.76)',\n    profileAskColor: 'rgba(34, 211, 238, 0.78)',\n    valueAreaColor: 'rgba(34, 211, 238, 0.08)',\n    sessionLabelColor: '#bae6fd',\n  },\n  pointOfControl: {\n    ...SHADED_REFERENCE_VOLUME_PROFILE_OPTIONS.pointOfControl,\n    borderColor: '#22d3ee',\n    backgroundColor: 'rgba(34, 211, 238, 0.18)',\n  },\n};\n\nconst cobaltWorkstationVolumeProfile: VolumeProfilePartialOptions = {\n  style: {\n    ...LEFT_ALIGNED_REFERENCE_VOLUME_PROFILE_OPTIONS.style,\n    profileBidColor: 'rgba(248, 113, 113, 0.72)',\n    profileAskColor: 'rgba(96, 165, 250, 0.76)',\n    valueAreaColor: 'rgba(96, 165, 250, 0.08)',\n    sessionLabelColor: '#dbeafe',\n  },\n  pointOfControl: {\n    ...LEFT_ALIGNED_REFERENCE_VOLUME_PROFILE_OPTIONS.pointOfControl,\n    borderColor: '#60a5fa',\n    backgroundColor: 'rgba(96, 165, 250, 0.18)',\n  },\n};\n\nconst obsidianMinimalVolumeProfile: VolumeProfilePartialOptions = {\n  style: {\n    ...LEFT_ALIGNED_REFERENCE_VOLUME_PROFILE_OPTIONS.style,\n    profileBidColor: 'rgba(248, 113, 113, 0.58)',\n    profileAskColor: 'rgba(203, 213, 225, 0.56)',\n    valueAreaColor: 'rgba(255, 255, 255, 0.04)',\n    sessionLabelColor: '#e2e8f0',\n  },\n  pointOfControl: {\n    ...LEFT_ALIGNED_REFERENCE_VOLUME_PROFILE_OPTIONS.pointOfControl,\n    borderColor: 'rgba(226, 232, 240, 0.8)',\n    backgroundColor: 'rgba(255, 255, 255, 0.08)',\n  },\n};\n\nconst paperClassicVolumeProfile: VolumeProfilePartialOptions = {\n  style: {\n    ...LEFT_ALIGNED_REFERENCE_VOLUME_PROFILE_OPTIONS.style,\n    profileBidColor: 'rgba(220, 38, 38, 0.6)',\n    profileAskColor: 'rgba(29, 78, 216, 0.64)',\n    valueAreaColor: 'rgba(148, 163, 184, 0.12)',\n    sessionLabelColor: '#111827',\n  },\n  pointOfControl: {\n    ...LEFT_ALIGNED_REFERENCE_VOLUME_PROFILE_OPTIONS.pointOfControl,\n    borderColor: '#111827',\n    backgroundColor: 'rgba(17, 24, 39, 0.1)',\n  },\n};\n\nconst daylightCleanVolumeProfile: VolumeProfilePartialOptions = {\n  ...paperClassicVolumeProfile,\n  style: {\n    ...paperClassicVolumeProfile.style,\n    profileBidColor: 'rgba(239, 68, 68, 0.42)',\n    profileAskColor: 'rgba(34, 197, 94, 0.42)',\n    valueAreaColor: 'rgba(148, 163, 184, 0.08)',\n    sessionLabelColor: '#111827',\n  },\n};\n\nconst clinicalHighContrastVolumeProfile: VolumeProfilePartialOptions = {\n  ...paperClassicVolumeProfile,\n  style: {\n    ...paperClassicVolumeProfile.style,\n    profileBidColor: 'rgba(0, 0, 0, 0.82)',\n    profileAskColor: 'rgba(0, 0, 0, 0.62)',\n    valueAreaColor: 'rgba(0, 0, 0, 0.08)',\n    sessionLabelColor: '#000000',\n  },\n  pointOfControl: {\n    ...paperClassicVolumeProfile.pointOfControl,\n    borderColor: '#000000',\n    backgroundColor: 'rgba(0, 0, 0, 0.1)',\n  },\n};\n\nconst ivoryTerminalVolumeProfile: VolumeProfilePartialOptions = {\n  ...paperClassicVolumeProfile,\n  style: {\n    ...paperClassicVolumeProfile.style,\n    profileBidColor: 'rgba(180, 83, 9, 0.56)',\n    profileAskColor: 'rgba(14, 116, 144, 0.58)',\n    valueAreaColor: 'rgba(180, 83, 9, 0.08)',\n    sessionLabelColor: '#44403c',\n  },\n  pointOfControl: {\n    ...paperClassicVolumeProfile.pointOfControl,\n    borderColor: '#92400e',\n    backgroundColor: 'rgba(146, 64, 14, 0.1)',\n  },\n};\n\nconst frostUiVolumeProfile: VolumeProfilePartialOptions = {\n  ...paperClassicVolumeProfile,\n  style: {\n    ...paperClassicVolumeProfile.style,\n    profileBidColor: 'rgba(239, 68, 68, 0.52)',\n    profileAskColor: 'rgba(14, 165, 233, 0.56)',\n    valueAreaColor: 'rgba(14, 165, 233, 0.08)',\n    sessionLabelColor: '#0f172a',\n  },\n  pointOfControl: {\n    ...paperClassicVolumeProfile.pointOfControl,\n    borderColor: '#0284c7',\n    backgroundColor: 'rgba(2, 132, 199, 0.1)',\n  },\n};\n\nexport const ORDER_FLOW_THEME_PRESETS = {\n  smoothLight: {\n    id: 'smooth-light',\n    label: 'Smooth Light',\n    mode: 'light',\n    description: 'Soft order-flow canvas inspired by clean, letter-delimited ladder layouts.',\n    surface: daylightCleanSurface,\n    footprint: {\n      ladder: {\n        ...(ORDER_FLOW_REFERENCE_FOOTPRINT_OPTIONS.ladder ?? {}),\n      },\n      candle: {\n        ...(ORDER_FLOW_REFERENCE_FOOTPRINT_OPTIONS.candle ?? {}),\n      },\n      style: {\n        ...(ORDER_FLOW_REFERENCE_FOOTPRINT_OPTIONS.style ?? {}),\n        separatorColor: '#111827',\n        separatorFont: '400 12px Arial, sans-serif',\n        positiveImbalanceTextColor: '#2f6dd0',\n        positiveImbalanceTextFont: '700 12px Arial, sans-serif',\n        negativeImbalanceTextColor: '#dc2626',\n        negativeImbalanceTextFont: '700 12px Arial, sans-serif',\n        diagonalDominanceColor: '#2f6dd0',\n        diagonalDominanceFont: '700 12px Arial, sans-serif',\n        bidFillColor: 'rgba(239, 68, 68, 0.14)',\n        askFillColor: 'rgba(34, 197, 94, 0.14)',\n      },\n      shading: {\n        positiveDeltaScale: {\n          range: {\n            from: 0,\n            to: 1,\n            clamp: true,\n            invert: false,\n          },\n          stops: [\n            { offset: 0, color: 'rgba(34, 197, 94, 0.06)' },\n            { offset: 1, color: 'rgba(34, 197, 94, 0.28)' },\n          ],\n        },\n        negativeDeltaScale: {\n          range: {\n            from: 0,\n            to: 1,\n            clamp: true,\n            invert: false,\n          },\n          stops: [\n            { offset: 0, color: 'rgba(239, 68, 68, 0.06)' },\n            { offset: 1, color: 'rgba(239, 68, 68, 0.28)' },\n          ],\n        },\n        neutralScale: {\n          range: {\n            from: 0,\n            to: 1,\n            clamp: true,\n            invert: false,\n          },\n          stops: [\n            { offset: 0, color: 'rgba(148, 163, 184, 0.02)' },\n            { offset: 1, color: 'rgba(148, 163, 184, 0.1)' },\n          ],\n        },\n      },\n      pointOfControl: {\n        visible: true,\n        ...LIGHT_POINT_OF_CONTROL,\n        borderWidth: ORDER_FLOW_REFERENCE_FOOTPRINT_OPTIONS.pointOfControl?.borderWidth,\n        backgroundColor: 'transparent',\n      },\n    },\n    volumeFootprint: createLightVolumeFootprintTheme(\n      'rgba(239, 68, 68, 0.14)',\n      'rgba(34, 197, 94, 0.16)',\n      '#111827',\n      LIGHT_POINT_OF_CONTROL.borderColor,\n    ),\n    volumeProfile: daylightCleanVolumeProfile,\n    sessionVolumeProfile: createSessionProfileTheme(daylightCleanVolumeProfile),\n    deltaSummary: {\n      labelBackgroundColor: 'rgba(248, 250, 252, 1)',\n      cellBorderColor: 'rgba(100, 116, 139, 0.22)',\n      labelTextColor: '#111827',\n      rowStyles: CLASSIC_REFERENCE_DELTA_SUMMARY_OPTIONS.rowStyles,\n    },\n    candleSeries: createCandleSeriesOptions('#16a34a', '#ef4444'),\n    candleHeatmap: createCandleHeatmapOptions('#16a34a', '#ef4444', {\n      wickUpColor: '#15803d',\n      wickDownColor: '#b91c1c',\n      borderUpColor: '#15803d',\n      borderDownColor: '#b91c1c',\n    }),\n    volumeSeries: createVolumeSeriesOptions('rgba(22, 163, 74, 0.46)', 'rgba(239, 68, 68, 0.46)'),\n    volumeDeltaPivotSeries: createVolumeDeltaPivotSeriesOptions('#16a34a', '#ef4444'),\n  },\n  midnightTerminal: {\n    id: 'midnight-terminal',\n    label: 'Midnight Terminal',\n    mode: 'dark',\n    description: 'Dense dark terminal with high-contrast grid lines.',\n    surface: midnightTerminalSurface,\n    footprint: {\n      style: {\n        ...DARK_REFERENCE_FOOTPRINT_BASE_OPTIONS.style,\n        bidTextColor: '#fca5a5',\n        askTextColor: '#bfdbfe',\n        candleBorderColor: '#93c5fd',\n        ladderBorderColor: 'rgba(96, 165, 250, 0.36)',\n        cellBorderColor: 'rgba(59, 130, 246, 0.28)',\n      },\n      pointOfControl: {\n        ...DARK_POINT_OF_CONTROL,\n        borderWidth: DARK_REFERENCE_FOOTPRINT_BASE_OPTIONS.pointOfControl?.borderWidth,\n      },\n      summary: {\n        items: DARK_REFERENCE_FOOTPRINT_BASE_OPTIONS.summary?.items,\n      },\n    },\n    volumeFootprint: createDarkVolumeFootprintTheme(\n      'rgba(248, 113, 113, 0.36)',\n      'rgba(96, 165, 250, 0.4)',\n      '#dbeafe',\n      '#93c5fd',\n    ),\n    volumeProfile: midnightTerminalVolumeProfile,\n    sessionVolumeProfile: createSessionProfileTheme(midnightTerminalVolumeProfile),\n    deltaSummary: {\n      labelBackgroundColor: DARK_DELTA_SUMMARY_LABEL,\n      labelTextColor: '#dbeafe',\n      cellBorderColor: 'rgba(59, 130, 246, 0.26)',\n      rowStyles: DARK_REFERENCE_DELTA_SUMMARY_OPTIONS.rowStyles,\n    },\n    candleSeries: createCandleSeriesOptions('#34d399', '#f87171'),\n    candleHeatmap: createCandleHeatmapOptions('#34d399', '#fb7185', {\n      wickUpColor: '#bfdbfe',\n      wickDownColor: '#fecaca',\n      borderUpColor: '#34d399',\n      borderDownColor: '#fb7185',\n      borderVisible: true,\n      shadeWicks: false,\n      noOfShades: 8,\n      shader: 'alpha',\n    }),\n    volumeSeries: createVolumeSeriesOptions(\n      'rgba(52, 211, 153, 0.55)',\n      'rgba(248, 113, 113, 0.55)',\n    ),\n    volumeDeltaPivotSeries: createVolumeDeltaPivotSeriesOptions('#34d399', '#f87171'),\n  },\n  chartDarkPro: {\n    id: 'chart-dark-pro',\n    label: 'Dark Default',\n    mode: 'dark',\n    description:\n      'Dark default market layout with blue/red price candles and green/red delta panes.',\n    surface: chartDarkProSurface,\n    footprint: {\n      style: SHADED_REFERENCE_FOOTPRINT_OPTIONS.style,\n      shading: SHADED_REFERENCE_FOOTPRINT_OPTIONS.shading,\n      pointOfControl: {\n        ...DARK_POINT_OF_CONTROL,\n        borderWidth: SHADED_REFERENCE_FOOTPRINT_OPTIONS.pointOfControl?.borderWidth,\n      },\n      summary: {\n        items: DARK_REFERENCE_FOOTPRINT_BASE_OPTIONS.summary?.items,\n      },\n    },\n    volumeFootprint: createDarkVolumeFootprintTheme(\n      'rgba(203, 213, 225, 0.36)',\n      'rgba(187, 247, 208, 0.42)',\n      '#e5e7eb',\n      '#cbd5e1',\n    ),\n    volumeProfile: chartDarkProVolumeProfile,\n    sessionVolumeProfile: createSessionProfileTheme(chartDarkProVolumeProfile),\n    deltaSummary: {\n      labelBackgroundColor: DARK_DELTA_SUMMARY_LABEL,\n      labelTextColor: DARK_REFERENCE_DELTA_SUMMARY_OPTIONS.labelTextColor,\n      cellBorderColor: DARK_REFERENCE_DELTA_SUMMARY_OPTIONS.cellBorderColor,\n      rowStyles: DARK_REFERENCE_DELTA_SUMMARY_OPTIONS.rowStyles,\n    },\n    candleSeries: createCandleSeriesOptions('#2962ff', '#f23645', {\n      borderVisible: true,\n      wickUpColor: '#c9cdd4',\n      wickDownColor: '#c9cdd4',\n    }),\n    volumeSeries: createVolumeSeriesOptions('rgba(8, 153, 129, 0.55)', 'rgba(242, 54, 69, 0.55)'),\n    candleHeatmap: createCandleHeatmapOptions('#2962ff', '#111827', {\n      wickUpColor: '#c9cdd4',\n      wickDownColor: '#c9cdd4',\n      borderUpColor: '#2962ff',\n      borderDownColor: '#111827',\n      borderVisible: true,\n      shadeWicks: false,\n      noOfShades: 10,\n      shader: 'alpha',\n    }),\n    volumeDeltaPivotSeries: createVolumeDeltaPivotSeriesOptions('#089981', '#f23645'),\n    volumeDeltaPivotBaseline: {\n      color: 'rgba(120, 123, 134, 0.72)',\n      lineWidth: 1,\n      lineStyle: 2,\n      lastValueVisible: false,\n      priceLineVisible: false,\n      crosshairMarkerVisible: false,\n    },\n  },\n  depthHeat: {\n    id: 'depth-heat',\n    label: 'Depth Heat',\n    mode: 'dark',\n    description: 'Cool blue emphasis for depth and heatmap-style studies.',\n    surface: depthHeatSurface,\n    footprint: {\n      style: {\n        ...SHADED_REFERENCE_FOOTPRINT_OPTIONS.style,\n        askFillColor: 'rgba(34, 211, 238, 0.36)',\n        buyImbalanceColor: '#22d3ee',\n        candleBorderColor: '#67e8f9',\n      },\n      pointOfControl: {\n        ...DARK_POINT_OF_CONTROL,\n        borderWidth: SHADED_REFERENCE_FOOTPRINT_OPTIONS.pointOfControl?.borderWidth,\n      },\n      shading: {\n        askScale: {\n          ...SHADED_REFERENCE_FOOTPRINT_OPTIONS.shading?.askScale,\n          stops: [\n            { offset: 0, color: 'rgba(34, 211, 238, 0)' },\n            { offset: 1, color: 'rgba(34, 211, 238, 0.36)' },\n          ],\n        },\n      },\n      summary: {\n        items: DARK_REFERENCE_FOOTPRINT_BASE_OPTIONS.summary?.items,\n      },\n    },\n    volumeFootprint: createDarkVolumeFootprintTheme(\n      'rgba(248, 113, 113, 0.3)',\n      'rgba(34, 211, 238, 0.42)',\n      '#dbeafe',\n      '#22d3ee',\n    ),\n    volumeProfile: depthHeatVolumeProfile,\n    sessionVolumeProfile: createSessionProfileTheme(depthHeatVolumeProfile),\n    deltaSummary: {\n      cellBorderColor: 'rgba(34, 211, 238, 0.22)',\n      labelBackgroundColor: DARK_DELTA_SUMMARY_LABEL,\n      labelTextColor: DARK_REFERENCE_DELTA_SUMMARY_OPTIONS.labelTextColor,\n      rowStyles: DARK_REFERENCE_DELTA_SUMMARY_OPTIONS.rowStyles,\n    },\n    candleSeries: createCandleSeriesOptions('#22d3ee', '#f87171'),\n    volumeSeries: createVolumeSeriesOptions(\n      'rgba(34, 211, 238, 0.55)',\n      'rgba(248, 113, 113, 0.52)',\n    ),\n    volumeDeltaPivotSeries: createVolumeDeltaPivotSeriesOptions('#22d3ee', '#f87171'),\n  },\n  cobaltWorkstation: {\n    id: 'cobalt-workstation',\n    label: 'Cobalt Workstation',\n    mode: 'dark',\n    description: 'Control-room dark palette inspired by workstation layouts.',\n    surface: cobaltWorkstationSurface,\n    footprint: {\n      style: {\n        ...DARK_REFERENCE_FOOTPRINT_BASE_OPTIONS.style,\n        askTextColor: '#bfdbfe',\n        candleBorderColor: '#60a5fa',\n        ladderBorderColor: 'rgba(96, 165, 250, 0.38)',\n        cellBorderColor: 'rgba(96, 165, 250, 0.3)',\n      },\n      pointOfControl: {\n        ...DARK_POINT_OF_CONTROL,\n        borderWidth: DARK_REFERENCE_FOOTPRINT_BASE_OPTIONS.pointOfControl?.borderWidth,\n      },\n      summary: {\n        items: DARK_REFERENCE_FOOTPRINT_BASE_OPTIONS.summary?.items,\n      },\n    },\n    volumeFootprint: createDarkVolumeFootprintTheme(\n      'rgba(248, 113, 113, 0.28)',\n      'rgba(96, 165, 250, 0.4)',\n      '#dbeafe',\n      '#60a5fa',\n    ),\n    volumeProfile: cobaltWorkstationVolumeProfile,\n    sessionVolumeProfile: createSessionProfileTheme(cobaltWorkstationVolumeProfile),\n    deltaSummary: {\n      cellBorderColor: 'rgba(96, 165, 250, 0.22)',\n      labelBackgroundColor: DARK_DELTA_SUMMARY_LABEL,\n      labelTextColor: DARK_REFERENCE_DELTA_SUMMARY_OPTIONS.labelTextColor,\n      rowStyles: DARK_REFERENCE_DELTA_SUMMARY_OPTIONS.rowStyles,\n    },\n    candleSeries: createCandleSeriesOptions('#60a5fa', '#f87171'),\n    candleHeatmap: createCandleHeatmapOptions('#60a5fa', '#f59e0b', {\n      wickUpColor: '#bfdbfe',\n      wickDownColor: '#fcd34d',\n      borderUpColor: '#60a5fa',\n      borderDownColor: '#f59e0b',\n      borderVisible: true,\n      shadeWicks: false,\n      noOfShades: 8,\n      shader: 'hue',\n    }),\n    volumeSeries: createVolumeSeriesOptions(\n      'rgba(96, 165, 250, 0.55)',\n      'rgba(248, 113, 113, 0.52)',\n    ),\n    volumeDeltaPivotSeries: createVolumeDeltaPivotSeriesOptions('#60a5fa', '#f87171'),\n  },\n  obsidianMinimal: {\n    id: 'obsidian-minimal',\n    label: 'Obsidian Minimal',\n    mode: 'dark',\n    description: 'Low-noise dark palette with subdued chrome.',\n    surface: obsidianMinimalSurface,\n    footprint: {\n      style: {\n        ...CORN_REFERENCE_FOOTPRINT_OPTIONS.style,\n        bidFillColor: 'rgba(255, 255, 255, 0.01)',\n        askFillColor: 'rgba(255, 255, 255, 0.01)',\n        candleBorderColor: '#cbd5e1',\n        ladderBorderColor: 'rgba(148, 163, 184, 0.22)',\n        cellBorderColor: 'rgba(148, 163, 184, 0.2)',\n      },\n      pointOfControl: {\n        ...DARK_POINT_OF_CONTROL,\n        borderWidth: CORN_REFERENCE_FOOTPRINT_OPTIONS.pointOfControl?.borderWidth,\n      },\n      summary: {\n        items: DARK_REFERENCE_FOOTPRINT_BASE_OPTIONS.summary?.items,\n      },\n    },\n    volumeFootprint: createDarkVolumeFootprintTheme(\n      'rgba(148, 163, 184, 0.22)',\n      'rgba(226, 232, 240, 0.28)',\n      '#e2e8f0',\n      'rgba(226, 232, 240, 0.72)',\n    ),\n    volumeProfile: obsidianMinimalVolumeProfile,\n    sessionVolumeProfile: createSessionProfileTheme(obsidianMinimalVolumeProfile),\n    deltaSummary: {\n      labelBackgroundColor: DARK_DELTA_SUMMARY_LABEL,\n      cellBorderColor: 'rgba(148, 163, 184, 0.18)',\n      labelTextColor: DARK_REFERENCE_DELTA_SUMMARY_OPTIONS.labelTextColor,\n      rowStyles: DARK_REFERENCE_DELTA_SUMMARY_OPTIONS.rowStyles,\n    },\n    candleSeries: createCandleSeriesOptions('#cbd5e1', '#f87171'),\n    candleHeatmap: createCandleHeatmapOptions('#e5e7eb', 'transparent', {\n      wickDownColor: '#f87171',\n      borderDownColor: '#f87171',\n      wickUpColor: '#e5e7eb',\n      borderUpColor: '#e5e7eb',\n      borderVisible: true,\n      shadeWicks: false,\n    }),\n    volumeSeries: createVolumeSeriesOptions(\n      'rgba(203, 213, 225, 0.48)',\n      'rgba(248, 113, 113, 0.44)',\n    ),\n    volumeDeltaPivotSeries: createVolumeDeltaPivotSeriesOptions('#cbd5e1', '#f87171'),\n  },\n  paperClassic: {\n    id: 'paper-classic',\n    label: 'Paper Classic',\n    mode: 'light',\n    description: 'Classic white chart surface for reference-style views.',\n    surface: paperClassicSurface,\n    footprint: {\n      style: CLASSIC_REFERENCE_FOOTPRINT_OPTIONS.style,\n      pointOfControl: {\n        visible: true,\n        ...LIGHT_POINT_OF_CONTROL,\n      },\n      summary: {\n        items: CLASSIC_REFERENCE_FOOTPRINT_OPTIONS.summary?.items,\n      },\n    },\n    volumeFootprint: createLightVolumeFootprintTheme(\n      'rgba(248, 113, 113, 0.18)',\n      'rgba(96, 165, 250, 0.18)',\n      '#111827',\n      '#111827',\n    ),\n    volumeProfile: paperClassicVolumeProfile,\n    sessionVolumeProfile: createSessionProfileTheme(paperClassicVolumeProfile),\n    deltaSummary: {\n      labelBackgroundColor: LIGHT_DELTA_SUMMARY_LABEL,\n      labelTextColor: CLASSIC_REFERENCE_DELTA_SUMMARY_OPTIONS.labelTextColor,\n      cellBorderColor: CLASSIC_REFERENCE_DELTA_SUMMARY_OPTIONS.cellBorderColor,\n      rowStyles: CLASSIC_REFERENCE_DELTA_SUMMARY_OPTIONS.rowStyles,\n    },\n    candleSeries: createCandleSeriesOptions('#16a34a', '#dc2626'),\n    candleHeatmap: createCandleHeatmapOptions('#2f2a24', '#ffffff', {\n      wickUpColor: '#6b7280',\n      wickDownColor: '#6b7280',\n      borderUpColor: '#1f2937',\n      borderDownColor: '#d6b7b7',\n      borderVisible: true,\n      shadeWicks: false,\n      noOfShades: 8,\n      shader: 'alpha',\n    }),\n    volumeSeries: createVolumeSeriesOptions('rgba(22, 163, 74, 0.48)', 'rgba(220, 38, 38, 0.48)'),\n    volumeDeltaPivotSeries: createVolumeDeltaPivotSeriesOptions('#16a34a', '#dc2626'),\n  },\n  clinicalHighContrast: {\n    id: 'clinical-high-contrast',\n    label: 'Clinical High Contrast',\n    mode: 'light',\n    description: 'Black-on-white palette for maximum legibility.',\n    surface: clinicalHighContrastSurface,\n    footprint: {\n      style: {\n        ...CLASSIC_REFERENCE_FOOTPRINT_OPTIONS.style,\n        textColor: '#000000',\n        neutralTextColor: '#000000',\n        bidTextColor: '#000000',\n        askTextColor: '#000000',\n        positiveDeltaColor: '#000000',\n        negativeDeltaColor: '#000000',\n        bullishCandleColor: '#000000',\n        bearishCandleColor: '#000000',\n        candleWickColor: '#000000',\n        candleBorderColor: '#000000',\n        ladderBorderColor: '#000000',\n        cellBorderColor: '#000000',\n      },\n      pointOfControl: {\n        visible: true,\n        ...LIGHT_POINT_OF_CONTROL,\n        borderWidth: 1.25,\n      },\n      summary: {\n        items: CLASSIC_REFERENCE_FOOTPRINT_OPTIONS.summary?.items,\n      },\n    },\n    volumeFootprint: createLightVolumeFootprintTheme(\n      'rgba(0, 0, 0, 0.14)',\n      'rgba(0, 0, 0, 0.22)',\n      '#000000',\n      '#000000',\n    ),\n    volumeProfile: clinicalHighContrastVolumeProfile,\n    sessionVolumeProfile: createSessionProfileTheme(clinicalHighContrastVolumeProfile),\n    deltaSummary: {\n      labelBackgroundColor: LIGHT_DELTA_SUMMARY_LABEL,\n      labelTextColor: '#000000',\n      cellBorderColor: '#000000',\n      rowStyles: CLASSIC_REFERENCE_DELTA_SUMMARY_OPTIONS.rowStyles,\n    },\n    candleSeries: createCandleSeriesOptions('#000000', '#000000', true),\n    volumeSeries: createVolumeSeriesOptions('rgba(0, 0, 0, 0.45)', 'rgba(0, 0, 0, 0.45)'),\n    volumeDeltaPivotSeries: createVolumeDeltaPivotSeriesOptions('#000000', '#000000'),\n  },\n  ivoryTerminal: {\n    id: 'ivory-terminal',\n    label: 'Ivory Terminal',\n    mode: 'light',\n    description: 'Warm light palette designed for long-session reading.',\n    surface: ivoryTerminalSurface,\n    footprint: {\n      style: {\n        ...CLASSIC_REFERENCE_FOOTPRINT_OPTIONS.style,\n        bidTextColor: '#b45309',\n        askTextColor: '#0f766e',\n        positiveDeltaColor: '#0f766e',\n        negativeDeltaColor: '#b45309',\n        bullishCandleColor: '#0f766e',\n        bearishCandleColor: '#b45309',\n        candleBorderColor: '#92400e',\n        ladderBorderColor: 'rgba(146, 64, 14, 0.24)',\n        cellBorderColor: 'rgba(146, 64, 14, 0.18)',\n      },\n      shading: {\n        neutralScale: {\n          range: {\n            from: 0.12,\n            to: 1,\n            clamp: true,\n            invert: false,\n          },\n          stops: [\n            { offset: 0, color: 'rgba(146, 64, 14, 0.02)' },\n            { offset: 1, color: 'rgba(146, 64, 14, 0.18)' },\n          ],\n        },\n      },\n      pointOfControl: {\n        visible: true,\n        ...LIGHT_POINT_OF_CONTROL,\n        borderWidth: 1.15,\n      },\n      summary: {\n        items: CLASSIC_REFERENCE_FOOTPRINT_OPTIONS.summary?.items,\n      },\n    },\n    volumeFootprint: createLightVolumeFootprintTheme(\n      'rgba(180, 83, 9, 0.16)',\n      'rgba(15, 118, 110, 0.18)',\n      '#44403c',\n      '#92400e',\n    ),\n    volumeProfile: ivoryTerminalVolumeProfile,\n    sessionVolumeProfile: createSessionProfileTheme(ivoryTerminalVolumeProfile),\n    deltaSummary: {\n      labelBackgroundColor: 'rgba(255, 251, 235, 0.98)',\n      labelTextColor: '#44403c',\n      cellBorderColor: 'rgba(146, 64, 14, 0.2)',\n      rowStyles: {\n        delta: {\n          positiveFillColor: '#14b8a6',\n          negativeFillColor: '#d97706',\n          neutralFillColor: '#d6d3d1',\n          textColor: '#44403c',\n        },\n        maxDelta: {\n          positiveFillColor: '#5eead4',\n          negativeFillColor: '#fbbf24',\n          neutralFillColor: '#e7e5e4',\n          textColor: '#44403c',\n        },\n        minDelta: {\n          positiveFillColor: '#5eead4',\n          negativeFillColor: '#fbbf24',\n          neutralFillColor: '#e7e5e4',\n          textColor: '#44403c',\n        },\n        cumulativeDelta: {\n          positiveFillColor: '#0f766e',\n          negativeFillColor: '#b45309',\n          neutralFillColor: '#d6d3d1',\n          textColor: '#44403c',\n        },\n        cumulativeDeltaToVolumeRatio: {\n          positiveFillColor: '#99f6e4',\n          negativeFillColor: '#fde68a',\n          neutralFillColor: '#e7e5e4',\n          textColor: '#44403c',\n        },\n        volume: {\n          positiveFillColor: '#a16207',\n          negativeFillColor: '#a16207',\n          neutralFillColor: '#a16207',\n          textColor: '#fffbeb',\n        },\n      },\n    },\n    candleSeries: createCandleSeriesOptions('#0f766e', '#b45309'),\n    candleHeatmap: createCandleHeatmapOptions('#d4a73b', '#94a3b8', {\n      wickUpColor: '#a16207',\n      wickDownColor: '#64748b',\n      borderUpColor: '#b45309',\n      borderDownColor: '#64748b',\n      borderVisible: true,\n      shadeWicks: false,\n      noOfShades: 3,\n      shader: 'hue',\n      range: {\n        minShadeThreshold: 0.04,\n        maxShadeThreshold: 0.92,\n      },\n    }),\n    volumeSeries: createVolumeSeriesOptions('rgba(15, 118, 110, 0.44)', 'rgba(180, 83, 9, 0.44)'),\n    volumeDeltaPivotSeries: createVolumeDeltaPivotSeriesOptions('#0f766e', '#b45309'),\n  },\n  frostUi: {\n    id: 'frost-ui',\n    label: 'Frost UI',\n    mode: 'light',\n    description: 'Cool, light-gray interface with modern spacing.',\n    surface: frostUiSurface,\n    footprint: {\n      style: {\n        ...CLASSIC_REFERENCE_FOOTPRINT_OPTIONS.style,\n        bidTextColor: '#ef4444',\n        askTextColor: '#0284c7',\n        positiveDeltaColor: '#0284c7',\n        negativeDeltaColor: '#ef4444',\n        bullishCandleColor: '#0284c7',\n        bearishCandleColor: '#ef4444',\n        candleBorderColor: '#0f172a',\n        ladderBorderColor: 'rgba(148, 163, 184, 0.26)',\n        cellBorderColor: 'rgba(148, 163, 184, 0.2)',\n      },\n      pointOfControl: {\n        visible: true,\n        ...LIGHT_POINT_OF_CONTROL,\n        borderWidth: 1.1,\n      },\n      summary: {\n        items: CLASSIC_REFERENCE_FOOTPRINT_OPTIONS.summary?.items,\n      },\n    },\n    volumeFootprint: createLightVolumeFootprintTheme(\n      'rgba(239, 68, 68, 0.14)',\n      'rgba(14, 165, 233, 0.18)',\n      '#0f172a',\n      '#0284c7',\n    ),\n    volumeProfile: frostUiVolumeProfile,\n    sessionVolumeProfile: createSessionProfileTheme(frostUiVolumeProfile),\n    deltaSummary: {\n      labelBackgroundColor: LIGHT_DELTA_SUMMARY_LABEL,\n      cellBorderColor: 'rgba(148, 163, 184, 0.24)',\n      labelTextColor: CLASSIC_REFERENCE_DELTA_SUMMARY_OPTIONS.labelTextColor,\n      rowStyles: CLASSIC_REFERENCE_DELTA_SUMMARY_OPTIONS.rowStyles,\n    },\n    candleSeries: createCandleSeriesOptions('#0284c7', '#ef4444'),\n    volumeSeries: createVolumeSeriesOptions('rgba(2, 132, 199, 0.44)', 'rgba(239, 68, 68, 0.44)'),\n    volumeDeltaPivotSeries: createVolumeDeltaPivotSeriesOptions('#0284c7', '#ef4444'),\n  },\n} satisfies Record<string, OrderFlowThemePresetPack>;\n","import type { TimeValue } from '../models/contracts';\n\nfunction normalizeNumericTime(value: number): number {\n  return value > 1e12 ? value : value * 1000;\n}\n\nexport function timeValueToDate(time: TimeValue): Date {\n  if (typeof time === 'number') {\n    return new Date(normalizeNumericTime(time));\n  }\n\n  if (typeof time === 'string') {\n    return new Date(time);\n  }\n\n  return new Date(Date.UTC(time.year, time.month - 1, time.day));\n}\n\nexport function timeValueToKey(time: TimeValue): string {\n  if (typeof time === 'number' || typeof time === 'string') {\n    return `${time}`;\n  }\n\n  return `${time.year}-${time.month}-${time.day}`;\n}\n\nexport function compareTimeValues(a: TimeValue, b: TimeValue): number {\n  return timeValueToDate(a).getTime() - timeValueToDate(b).getTime();\n}\n\nexport function getTimeParts(\n  time: TimeValue,\n  timezone = 'UTC',\n): {\n  dayOfWeek: number;\n  hhmm: string;\n} {\n  const formatter = new Intl.DateTimeFormat('en-US', {\n    timeZone: timezone,\n    weekday: 'short',\n    hour: '2-digit',\n    minute: '2-digit',\n    hour12: false,\n  });\n  const parts = formatter.formatToParts(timeValueToDate(time));\n  const weekday = parts.find((part) => part.type === 'weekday')?.value ?? 'Mon';\n  const hour = parts.find((part) => part.type === 'hour')?.value ?? '00';\n  const minute = parts.find((part) => part.type === 'minute')?.value ?? '00';\n  const dayOfWeekMap: Record<string, number> = {\n    Sun: 0,\n    Mon: 1,\n    Tue: 2,\n    Wed: 3,\n    Thu: 4,\n    Fri: 5,\n    Sat: 6,\n  };\n\n  return {\n    dayOfWeek: dayOfWeekMap[weekday] ?? 0,\n    hhmm: `${hour}:${minute}`,\n  };\n}\n","import type { OrderFlowBar, SessionDefinition, SessionSegment } from '../../models/contracts';\nimport { getTimeParts } from '../../utils/time';\n\nfunction matchesSegment(bar: OrderFlowBar, segment: SessionSegment, timezone: string): boolean {\n  const { dayOfWeek, hhmm } = getTimeParts(bar.time, timezone);\n\n  if (segment.start <= segment.end) {\n    return dayOfWeek === segment.dayOfWeek && hhmm >= segment.start && hhmm <= segment.end;\n  }\n\n  const nextDay = (segment.dayOfWeek + 1) % 7;\n  return (\n    (dayOfWeek === segment.dayOfWeek && hhmm >= segment.start) ||\n    (dayOfWeek === nextDay && hhmm <= segment.end)\n  );\n}\n\nexport function resolveSessionId(\n  bar: OrderFlowBar,\n  sessions: SessionDefinition[],\n): string | undefined {\n  for (const session of sessions) {\n    const timezone = session.timezone ?? 'UTC';\n    if (session.segments.some((segment) => matchesSegment(bar, segment, timezone))) {\n      return session.sessionId;\n    }\n  }\n\n  return bar.sessionId;\n}\n\nexport function resolveSessions(\n  bars: OrderFlowBar[],\n  sessions?: SessionDefinition[],\n): OrderFlowBar[] {\n  if (!sessions?.length) {\n    return bars;\n  }\n\n  return bars.map((bar) => ({\n    ...bar,\n    sessionId: resolveSessionId(bar, sessions),\n  }));\n}\n","import type {\n  NormalizationOptions,\n  OrderFlowBatch,\n  OrderFlowBar,\n  PriceLevelVolume,\n} from '../../models/contracts';\nimport { compareTimeValues } from '../../utils/time';\nimport { resolveSessions } from '../sessions/resolveSessions';\n\nfunction normalizeLevel(level: PriceLevelVolume): PriceLevelVolume {\n  const totalVolume = level.totalVolume ?? level.bidVolume + level.askVolume;\n  const delta = level.delta ?? level.askVolume - level.bidVolume;\n\n  return {\n    ...level,\n    totalVolume,\n    delta,\n  };\n}\n\nfunction normalizeBar(bar: OrderFlowBar): OrderFlowBar {\n  const levels = [...bar.levels]\n    .map(normalizeLevel)\n    .sort((left, right) => left.price - right.price);\n  const totalVolume = bar.totalVolume ?? levels.reduce((sum, level) => sum + level.totalVolume!, 0);\n  const delta = bar.delta ?? levels.reduce((sum, level) => sum + level.delta!, 0);\n\n  return {\n    ...bar,\n    levels,\n    totalVolume,\n    delta,\n  };\n}\n\nexport function normalizeBars(\n  bars: OrderFlowBar[],\n  options?: Pick<NormalizationOptions, 'sessions' | 'deriveSessions'>,\n): OrderFlowBar[] {\n  const normalized = [...bars]\n    .map(normalizeBar)\n    .sort((left, right) => compareTimeValues(left.time, right.time));\n\n  if (options?.deriveSessions !== false && options?.sessions?.length) {\n    return resolveSessions(normalized, options.sessions);\n  }\n\n  return normalized;\n}\n\nexport function normalizeOrderFlowBatch(\n  batch: OrderFlowBatch,\n  options?: NormalizationOptions,\n): OrderFlowBatch {\n  const sessions = options?.sessions ?? batch.sessions;\n\n  return {\n    ...batch,\n    sessions,\n    bars: normalizeBars(batch.bars, {\n      sessions,\n      deriveSessions: options?.deriveSessions,\n    }),\n  };\n}\n","import type { NormalizationOptions, OrderFlowPatch } from '../../models/contracts';\nimport { normalizeBars } from './normalizeBatch';\n\nexport function normalizeOrderFlowPatch(\n  patch: OrderFlowPatch,\n  options?: NormalizationOptions,\n): OrderFlowPatch {\n  if (!patch.bars?.length) {\n    return patch;\n  }\n\n  return {\n    ...patch,\n    bars: normalizeBars(patch.bars, {\n      sessions: options?.sessions,\n      deriveSessions: options?.deriveSessions,\n    }),\n  };\n}\n","import type { OrderFlowBar, OrderFlowPatch } from '../../models/contracts';\nimport { compareTimeValues, timeValueToKey } from '../../utils/time';\n\nfunction sortBars(bars: OrderFlowBar[]): OrderFlowBar[] {\n  return [...bars].sort((left, right) => compareTimeValues(left.time, right.time));\n}\n\nexport function applyOrderFlowPatch(\n  currentBars: OrderFlowBar[],\n  patch: OrderFlowPatch,\n): OrderFlowBar[] {\n  if (patch.operation === 'replace') {\n    return sortBars(patch.bars ?? []);\n  }\n\n  const byTime = new Map(currentBars.map((bar) => [timeValueToKey(bar.time), bar]));\n\n  if (patch.operation === 'remove') {\n    for (const correctedTime of patch.correctedTimes ?? []) {\n      byTime.delete(timeValueToKey(correctedTime));\n    }\n  } else {\n    for (const bar of patch.bars ?? []) {\n      byTime.set(timeValueToKey(bar.time), bar);\n    }\n  }\n\n  return sortBars([...byTime.values()]);\n}\n","import type { OrderFlowBar } from '../../models/contracts';\nimport type { DeltaSummaryColumnModel } from '../../models/studies';\n\nfunction resolveLevelDelta(bar: OrderFlowBar): number[] {\n  return bar.levels.map((level) => level.delta ?? level.askVolume - level.bidVolume);\n}\n\nexport function buildDeltaSummaryColumns(bars: OrderFlowBar[]): DeltaSummaryColumnModel[] {\n  let cumulativeDelta = 0;\n  let cumulativeVolume = 0;\n\n  return bars.map((bar) => {\n    const levelDeltas = resolveLevelDelta(bar);\n    const delta = bar.delta ?? levelDeltas.reduce((sum, value) => sum + value, 0);\n    const volume =\n      bar.totalVolume ??\n      bar.levels.reduce(\n        (sum, level) => sum + (level.totalVolume ?? level.bidVolume + level.askVolume),\n        0,\n      );\n    const maxDelta = levelDeltas.length ? Math.max(...levelDeltas) : 0;\n    const minDelta = levelDeltas.length ? Math.min(...levelDeltas) : 0;\n\n    cumulativeDelta += delta;\n    cumulativeVolume += volume;\n\n    return {\n      time: bar.time,\n      delta,\n      maxDelta,\n      minDelta,\n      cumulativeDelta,\n      cumulativeDeltaToVolumeRatio: cumulativeVolume\n        ? (cumulativeDelta / cumulativeVolume) * 100\n        : 0,\n      volume,\n    };\n  });\n}\n","import type { OrderFlowBar, PriceLevelVolume } from '../../models/contracts';\nimport type { ImbalanceSide } from '../../models/studies';\n\nexport interface DerivedFootprintLevel {\n  price: number;\n  bidVolume: number;\n  askVolume: number;\n  totalVolume: number;\n  delta: number;\n  imbalanceSide: ImbalanceSide;\n  isStackedImbalance: boolean;\n}\n\nexport interface DerivedFootprintMetrics {\n  totalVolume: number;\n  delta: number;\n  maxLevelVolume: number;\n  maxAbsDelta: number;\n  levels: DerivedFootprintLevel[];\n}\n\nexport interface DeriveFootprintMetricOptions {\n  imbalanceRatio: number;\n  stackedImbalanceLength: number;\n}\n\nfunction getTotalVolume(level: PriceLevelVolume): number {\n  return level.totalVolume ?? level.bidVolume + level.askVolume;\n}\n\nfunction getDelta(level: PriceLevelVolume): number {\n  return level.delta ?? level.askVolume - level.bidVolume;\n}\n\nfunction resolveImbalanceSide(\n  levels: PriceLevelVolume[],\n  index: number,\n  ratio: number,\n): ImbalanceSide {\n  const current = levels[index];\n  const previous = levels[index - 1];\n  const next = levels[index + 1];\n\n  if (previous && previous.bidVolume > 0 && current.askVolume / previous.bidVolume >= ratio) {\n    return 'buy';\n  }\n\n  if (next && next.askVolume > 0 && current.bidVolume / next.askVolume >= ratio) {\n    return 'sell';\n  }\n\n  return 'none';\n}\n\nfunction applyStackedImbalance(\n  levels: DerivedFootprintLevel[],\n  minimumLength: number,\n): DerivedFootprintLevel[] {\n  const updated = levels.map((level) => ({ ...level }));\n  let start = 0;\n\n  while (start < updated.length) {\n    const side = updated[start].imbalanceSide;\n    let end = start;\n\n    while (end + 1 < updated.length && updated[end + 1].imbalanceSide === side && side !== 'none') {\n      end += 1;\n    }\n\n    if (side !== 'none' && end - start + 1 >= minimumLength) {\n      for (let index = start; index <= end; index += 1) {\n        updated[index].isStackedImbalance = true;\n      }\n    }\n\n    start = end + 1;\n  }\n\n  return updated;\n}\n\nexport function deriveFootprintMetrics(\n  bar: OrderFlowBar,\n  options: DeriveFootprintMetricOptions,\n): DerivedFootprintMetrics {\n  const levels = bar.levels.map((level, index) => ({\n    price: level.price,\n    bidVolume: level.bidVolume,\n    askVolume: level.askVolume,\n    totalVolume: getTotalVolume(level),\n    delta: getDelta(level),\n    imbalanceSide: resolveImbalanceSide(bar.levels, index, options.imbalanceRatio),\n    isStackedImbalance: false,\n  }));\n  const stackedLevels = applyStackedImbalance(levels, options.stackedImbalanceLength);\n  const totalVolume =\n    bar.totalVolume ?? stackedLevels.reduce((sum, level) => sum + level.totalVolume, 0);\n  const delta = bar.delta ?? stackedLevels.reduce((sum, level) => sum + level.delta, 0);\n  const maxLevelVolume = stackedLevels.reduce(\n    (maximum, level) => Math.max(maximum, level.totalVolume),\n    0,\n  );\n  const maxAbsDelta = stackedLevels.reduce(\n    (maximum, level) => Math.max(maximum, Math.abs(level.delta)),\n    0,\n  );\n\n  return {\n    totalVolume,\n    delta,\n    maxLevelVolume,\n    maxAbsDelta,\n    levels: stackedLevels,\n  };\n}\n","export interface PriceLike {\n  price: number;\n}\n\nexport function inferPricePrecision(step: number): number {\n  if (!Number.isFinite(step) || step <= 0) {\n    return 2;\n  }\n\n  const notation = step.toString();\n  const exponentMatch = notation.match(/e-(\\d+)$/i);\n  if (exponentMatch) {\n    return Number(exponentMatch[1]);\n  }\n\n  const [, decimals = ''] = notation.split('.');\n  return decimals.length;\n}\n\nexport function roundToPriceStep(\n  value: number,\n  step: number,\n  precision = inferPricePrecision(step),\n): number {\n  if (!Number.isFinite(step) || step <= 0) {\n    return Number(value.toFixed(Math.max(precision, 0)));\n  }\n\n  return Number((Math.round(value / step) * step).toFixed(Math.max(precision, 0)));\n}\n\nexport function inferPriceStep(levels: PriceLike[]): number | null {\n  const prices = Array.from(\n    new Set(levels.map((level) => level.price).filter((price) => Number.isFinite(price))),\n  ).sort((left, right) => left - right);\n\n  let minimumStep = Number.POSITIVE_INFINITY;\n\n  for (let index = 1; index < prices.length; index += 1) {\n    const difference = prices[index] - prices[index - 1];\n    if (difference > 0 && difference < minimumStep) {\n      minimumStep = difference;\n    }\n  }\n\n  return Number.isFinite(minimumStep) ? minimumStep : null;\n}\n\nexport function buildPriceGrid(\n  low: number,\n  high: number,\n  step: number,\n  precision = inferPricePrecision(step),\n): number[] {\n  if (!Number.isFinite(step) || step <= 0) {\n    return [];\n  }\n\n  const start = roundToPriceStep(Math.min(low, high), step, precision);\n  const end = roundToPriceStep(Math.max(low, high), step, precision);\n  const startIndex = Math.round(start / step);\n  const endIndex = Math.round(end / step);\n  const prices: number[] = [];\n\n  for (let index = startIndex; index <= endIndex; index += 1) {\n    prices.push(Number((index * step).toFixed(Math.max(precision, 0))));\n  }\n\n  return prices;\n}\n","import type { OrderFlowBar } from '../../models/contracts';\nimport type { FootprintBarModel } from '../../models/studies';\nimport type { FootprintSeriesOptions } from '../../models/options';\nimport { clamp } from '../../utils/math';\nimport {\n  buildPriceGrid,\n  inferPricePrecision,\n  inferPriceStep,\n  roundToPriceStep,\n} from '../../utils/priceStep';\nimport { deriveFootprintMetrics } from './deriveFootprintMetrics';\n\nfunction resolvePriceStep(bar: OrderFlowBar, options: FootprintSeriesOptions): number | null {\n  if (Number.isFinite(options.ladder.priceStep) && options.ladder.priceStep > 0) {\n    return options.ladder.priceStep;\n  }\n\n  return inferPriceStep(bar.levels);\n}\n\nfunction mergeLevel(\n  existing: ReturnType<typeof deriveFootprintMetrics>['levels'][number] | undefined,\n  incoming: ReturnType<typeof deriveFootprintMetrics>['levels'][number],\n) {\n  if (!existing) {\n    return { ...incoming };\n  }\n\n  return {\n    ...existing,\n    bidVolume: existing.bidVolume + incoming.bidVolume,\n    askVolume: existing.askVolume + incoming.askVolume,\n    totalVolume: existing.totalVolume + incoming.totalVolume,\n    delta: existing.delta + incoming.delta,\n    imbalanceSide:\n      existing.imbalanceSide !== 'none' ? existing.imbalanceSide : incoming.imbalanceSide,\n    isStackedImbalance: existing.isStackedImbalance || incoming.isStackedImbalance,\n  };\n}\n\nexport function buildFootprintBarModel(\n  bar: OrderFlowBar,\n  options: FootprintSeriesOptions,\n): FootprintBarModel {\n  const metrics = deriveFootprintMetrics(bar, {\n    imbalanceRatio: options.ladder.imbalanceRatio,\n    stackedImbalanceLength: options.ladder.stackedImbalanceLength,\n  });\n  const range = options.ladder.maxOpacity - options.ladder.minOpacity;\n  const averageLevelVolume =\n    metrics.levels.length > 0 ? metrics.totalVolume / metrics.levels.length : 0;\n  const priceStep = resolvePriceStep(bar, options);\n  const precision = priceStep ? inferPricePrecision(priceStep) : 2;\n  const normalizedPriceMap = new Map<number, (typeof metrics.levels)[number]>();\n\n  for (const level of metrics.levels) {\n    const normalizedPrice = priceStep\n      ? roundToPriceStep(level.price, priceStep, precision)\n      : level.price;\n    normalizedPriceMap.set(\n      normalizedPrice,\n      mergeLevel(normalizedPriceMap.get(normalizedPrice), level),\n    );\n  }\n\n  const gridPrices =\n    priceStep && Number.isFinite(bar.low) && Number.isFinite(bar.high)\n      ? buildPriceGrid(\n          roundToPriceStep(bar.low, priceStep, precision),\n          roundToPriceStep(bar.high, priceStep, precision),\n          priceStep,\n          precision,\n        )\n      : [];\n  const normalizedLevels =\n    gridPrices.length > 0\n      ? gridPrices.map((price) => {\n          const level = normalizedPriceMap.get(price);\n          return (\n            level ?? {\n              price,\n              bidVolume: 0,\n              askVolume: 0,\n              totalVolume: 0,\n              delta: 0,\n              imbalanceSide: 'none' as const,\n              isStackedImbalance: false,\n            }\n          );\n        })\n      : metrics.levels;\n\n  return {\n    time: bar.time,\n    open: priceStep ? roundToPriceStep(bar.open, priceStep, precision) : bar.open,\n    high: priceStep ? roundToPriceStep(bar.high, priceStep, precision) : bar.high,\n    low: priceStep ? roundToPriceStep(bar.low, priceStep, precision) : bar.low,\n    close: priceStep ? roundToPriceStep(bar.close, priceStep, precision) : bar.close,\n    priceStep,\n    totalVolume: metrics.totalVolume,\n    delta: metrics.delta,\n    sessionId: bar.sessionId,\n    levels: normalizedLevels.map((level) => ({\n      ...level,\n      isPointOfControl: metrics.maxLevelVolume > 0 && level.totalVolume === metrics.maxLevelVolume,\n      volumeRatioToMax: metrics.maxLevelVolume > 0 ? level.totalVolume / metrics.maxLevelVolume : 0,\n      volumeRatioToAverage: averageLevelVolume > 0 ? level.totalVolume / averageLevelVolume : 0,\n      deltaRatioToMaxAbs: metrics.maxAbsDelta > 0 ? level.delta / metrics.maxAbsDelta : 0,\n      absoluteDeltaRatioToMaxAbs:\n        metrics.maxAbsDelta > 0 ? Math.abs(level.delta) / metrics.maxAbsDelta : 0,\n      heat: metrics.maxLevelVolume\n        ? clamp(\n            options.ladder.minOpacity + (level.totalVolume / metrics.maxLevelVolume) * range,\n            options.ladder.minOpacity,\n            options.ladder.maxOpacity,\n          )\n        : 0,\n    })),\n    maxLevelVolume: metrics.maxLevelVolume,\n    maxAbsDelta: metrics.maxAbsDelta,\n    averageLevelVolume,\n  };\n}\n","import type { OrderFlowBar } from '../../models/contracts';\nimport type { ProfileModel, ProfileValueArea } from '../../models/studies';\n\nfunction buildValueArea(\n  volumes: { price: number; totalVolume: number }[],\n  pointOfControlIndex: number,\n  targetVolume: number,\n): ProfileValueArea | null {\n  if (!volumes.length) {\n    return null;\n  }\n\n  let accumulated = volumes[pointOfControlIndex]?.totalVolume ?? 0;\n  let lowIndex = pointOfControlIndex;\n  let highIndex = pointOfControlIndex;\n\n  while (accumulated < targetVolume) {\n    const nextLower = volumes[lowIndex - 1];\n    const nextHigher = volumes[highIndex + 1];\n\n    if (!nextLower && !nextHigher) {\n      break;\n    }\n\n    if ((nextHigher?.totalVolume ?? -1) >= (nextLower?.totalVolume ?? -1)) {\n      if (nextHigher) {\n        highIndex += 1;\n        accumulated += nextHigher.totalVolume;\n        continue;\n      }\n    }\n\n    if (nextLower) {\n      lowIndex -= 1;\n      accumulated += nextLower.totalVolume;\n      continue;\n    }\n  }\n\n  return {\n    low: volumes[lowIndex].price,\n    high: volumes[highIndex].price,\n  };\n}\n\nexport function buildProfile(\n  bars: OrderFlowBar[],\n  scopeId: string,\n  valueAreaPercent = 0.7,\n  label?: string,\n): ProfileModel {\n  const byPrice = new Map<\n    number,\n    {\n      bidVolume: number;\n      askVolume: number;\n      totalVolume: number;\n      delta: number;\n    }\n  >();\n\n  for (const bar of bars) {\n    for (const level of bar.levels) {\n      const current = byPrice.get(level.price) ?? {\n        bidVolume: 0,\n        askVolume: 0,\n        totalVolume: 0,\n        delta: 0,\n      };\n      current.bidVolume += level.bidVolume;\n      current.askVolume += level.askVolume;\n      current.totalVolume += level.totalVolume ?? level.bidVolume + level.askVolume;\n      current.delta += level.delta ?? level.askVolume - level.bidVolume;\n      byPrice.set(level.price, current);\n    }\n  }\n\n  const levels = [...byPrice.entries()]\n    .sort((left, right) => left[0] - right[0])\n    .map(([price, aggregated]) => ({\n      price,\n      bidVolume: aggregated.bidVolume,\n      askVolume: aggregated.askVolume,\n      totalVolume: aggregated.totalVolume,\n      delta: aggregated.delta,\n      ratio: 0,\n    }));\n  const maxVolume = levels.reduce((maximum, level) => Math.max(maximum, level.totalVolume), 0);\n  const levelsWithRatio = levels.map((level) => ({\n    ...level,\n    ratio: maxVolume ? level.totalVolume / maxVolume : 0,\n  }));\n  const pointOfControlIndex = levelsWithRatio.reduce(\n    (bestIndex, level, index, collection) =>\n      level.totalVolume > (collection[bestIndex]?.totalVolume ?? -1) ? index : bestIndex,\n    0,\n  );\n  const totalProfileVolume = levelsWithRatio.reduce((sum, level) => sum + level.totalVolume, 0);\n  const pointOfControl = levelsWithRatio[pointOfControlIndex]?.price ?? null;\n  const valueArea =\n    totalProfileVolume > 0\n      ? buildValueArea(\n          levelsWithRatio.map((level) => ({\n            price: level.price,\n            totalVolume: level.totalVolume,\n          })),\n          pointOfControlIndex,\n          totalProfileVolume * valueAreaPercent,\n        )\n      : null;\n\n  return {\n    scopeId,\n    label,\n    levels: levelsWithRatio,\n    maxVolume,\n    pointOfControl,\n    valueArea,\n  };\n}\n","import type { OrderFlowBar, TimeValue } from '../../models/contracts';\nimport { compareTimeValues } from '../../utils/time';\nimport { buildProfile } from './buildProfile';\n\nexport function buildVisibleRangeProfile(\n  bars: OrderFlowBar[],\n  from?: TimeValue,\n  to?: TimeValue,\n  valueAreaPercent = 0.7,\n) {\n  const scopedBars = bars.filter((bar) => {\n    if (from && compareTimeValues(bar.time, from) < 0) {\n      return false;\n    }\n\n    if (to && compareTimeValues(bar.time, to) > 0) {\n      return false;\n    }\n\n    return true;\n  });\n\n  const model = buildProfile(scopedBars, 'visible-range', valueAreaPercent, 'Visible Range');\n\n  return {\n    ...model,\n    fromTime: from,\n    toTime: to,\n  };\n}\n","import type { OrderFlowBar } from '../../models/contracts';\nimport type { ProfileModel } from '../../models/studies';\nimport { buildProfile } from './buildProfile';\n\nexport function buildSessionProfiles(bars: OrderFlowBar[], valueAreaPercent = 0.7): ProfileModel[] {\n  const grouped = new Map<string, OrderFlowBar[]>();\n\n  for (const bar of bars) {\n    const sessionId = bar.sessionId ?? 'default-session';\n    const sessionBars = grouped.get(sessionId) ?? [];\n    sessionBars.push(bar);\n    grouped.set(sessionId, sessionBars);\n  }\n\n  return [...grouped.entries()].map(([sessionId, sessionBars]) => ({\n    ...buildProfile(sessionBars, sessionId, valueAreaPercent, sessionId),\n    fromTime: sessionBars[0]?.time,\n    toTime: sessionBars.at(-1)?.time,\n  }));\n}\n","import type { CandlestickData } from 'lightweight-charts';\n\nimport type { TimeValue } from '../../models/contracts';\nimport type {\n  CandleHeatmapRangeOptions,\n  CandleHeatmapShader,\n  CandleHeatmapOptions,\n  CandleHeatmapPartialOptions,\n} from '../../models/options';\nimport { DEFAULT_CANDLE_HEATMAP_OPTIONS, mergeCandleHeatmapOptions } from '../../models/options';\nimport { clamp } from '../../utils/math';\nimport type { OhlcLike } from '../../utils/mintick';\nimport { withAlpha } from '../../utils/color';\n\nconst DEFAULT_SURFACE_BACKGROUND = '#020617';\nconst LIGHT_THEME_MIN_ALPHA = 0.24;\nconst DARK_THEME_MIN_ALPHA = 0.38;\nconst CONTINUOUS_SHADE_STEPS = 256;\nconst LIGHT_THEME_NEUTRAL_TARGET = '#0f172a';\nconst DARK_THEME_NEUTRAL_TARGET = '#e2e8f0';\nconst LIGHT_THEME_NEUTRAL_MIX = 0.08;\nconst DARK_THEME_NEUTRAL_MIX = 0.2;\n\ninterface RgbaColor {\n  r: number;\n  g: number;\n  b: number;\n  a: number;\n}\n\nexport interface CandleHeatmapBarLike extends OhlcLike {\n  time: TimeValue;\n}\n\nexport type CandleHeatmapSide = 'min' | 'max';\n\nexport interface CandleHeatmapColorResolution {\n  color: string;\n  side: CandleHeatmapSide;\n  intensity: number;\n}\n\nexport interface ResolveCandleHeatmapColorInput {\n  value: number | null | undefined;\n  options?: CandleHeatmapPartialOptions;\n  backgroundColor?: string;\n}\n\nexport interface BuildCandleHeatmapSeriesDataInput<TBar extends CandleHeatmapBarLike> {\n  bars: readonly TBar[];\n  options?: CandleHeatmapPartialOptions;\n  backgroundColor?: string;\n  getValue: (bar: TBar, index: number, bars: readonly TBar[]) => number | null | undefined;\n}\n\nconst RGB_REGEX = /^rgba?\\(([^)]+)\\)$/i;\n\nfunction parseHexColor(color: string): RgbaColor | null {\n  const normalized = color.replace('#', '').trim();\n\n  if (normalized.length === 3) {\n    const [r, g, b] = normalized.split('');\n\n    return {\n      r: Number.parseInt(`${r}${r}`, 16),\n      g: Number.parseInt(`${g}${g}`, 16),\n      b: Number.parseInt(`${b}${b}`, 16),\n      a: 1,\n    };\n  }\n\n  if (normalized.length === 4) {\n    const [r, g, b, a] = normalized.split('');\n\n    return {\n      r: Number.parseInt(`${r}${r}`, 16),\n      g: Number.parseInt(`${g}${g}`, 16),\n      b: Number.parseInt(`${b}${b}`, 16),\n      a: Number.parseInt(`${a}${a}`, 16) / 255,\n    };\n  }\n\n  if (normalized.length === 6) {\n    return {\n      r: Number.parseInt(normalized.slice(0, 2), 16),\n      g: Number.parseInt(normalized.slice(2, 4), 16),\n      b: Number.parseInt(normalized.slice(4, 6), 16),\n      a: 1,\n    };\n  }\n\n  if (normalized.length === 8) {\n    return {\n      r: Number.parseInt(normalized.slice(0, 2), 16),\n      g: Number.parseInt(normalized.slice(2, 4), 16),\n      b: Number.parseInt(normalized.slice(4, 6), 16),\n      a: Number.parseInt(normalized.slice(6, 8), 16) / 255,\n    };\n  }\n\n  return null;\n}\n\nfunction parseRgbColor(color: string): RgbaColor | null {\n  const match = color.match(RGB_REGEX);\n\n  if (!match) {\n    return null;\n  }\n\n  const parts = match[1]?.split(',').map((part) => part.trim()) ?? [];\n\n  if (parts.length < 3) {\n    return null;\n  }\n\n  return {\n    r: clamp(Number.parseFloat(parts[0] ?? '0'), 0, 255),\n    g: clamp(Number.parseFloat(parts[1] ?? '0'), 0, 255),\n    b: clamp(Number.parseFloat(parts[2] ?? '0'), 0, 255),\n    a: clamp(Number.parseFloat(parts[3] ?? '1'), 0, 1),\n  };\n}\n\nfunction parseColor(color: string): RgbaColor | null {\n  if (color.trim().toLowerCase() === 'transparent') {\n    return {\n      r: 0,\n      g: 0,\n      b: 0,\n      a: 0,\n    };\n  }\n\n  if (color.startsWith('#')) {\n    return parseHexColor(color);\n  }\n\n  if (color.startsWith('rgb')) {\n    return parseRgbColor(color);\n  }\n\n  return null;\n}\n\nfunction toRgbaString(color: RgbaColor): string {\n  return `rgba(${Math.round(clamp(color.r, 0, 255))}, ${Math.round(clamp(color.g, 0, 255))}, ${Math.round(clamp(color.b, 0, 255))}, ${clamp(\n    color.a,\n    0,\n    1,\n  )\n    .toFixed(3)\n    .replace(/\\.?0+$/, '')})`;\n}\n\nfunction mixRgbColors(from: string, to: string, factor: number): string {\n  const start = parseColor(from);\n  const end = parseColor(to);\n\n  if (!start || !end) {\n    return factor < 0.5 ? from : to;\n  }\n\n  const t = clamp(factor, 0, 1);\n\n  return toRgbaString({\n    r: start.r + (end.r - start.r) * t,\n    g: start.g + (end.g - start.g) * t,\n    b: start.b + (end.b - start.b) * t,\n    a: 1,\n  });\n}\n\nfunction rgbToHsl(color: RgbaColor): { h: number; s: number; l: number } {\n  const r = color.r / 255;\n  const g = color.g / 255;\n  const b = color.b / 255;\n  const max = Math.max(r, g, b);\n  const min = Math.min(r, g, b);\n  const lightness = (max + min) / 2;\n  const delta = max - min;\n\n  if (delta === 0) {\n    return { h: 0, s: 0, l: lightness };\n  }\n\n  const saturation = lightness > 0.5 ? delta / (2 - max - min) : delta / (max + min);\n\n  let hue = 0;\n\n  switch (max) {\n    case r:\n      hue = (g - b) / delta + (g < b ? 6 : 0);\n      break;\n    case g:\n      hue = (b - r) / delta + 2;\n      break;\n    default:\n      hue = (r - g) / delta + 4;\n      break;\n  }\n\n  return {\n    h: hue * 60,\n    s: saturation,\n    l: lightness,\n  };\n}\n\nfunction hueToRgb(p: number, q: number, t: number): number {\n  let value = t;\n\n  if (value < 0) {\n    value += 1;\n  }\n  if (value > 1) {\n    value -= 1;\n  }\n  if (value < 1 / 6) {\n    return p + (q - p) * 6 * value;\n  }\n  if (value < 1 / 2) {\n    return q;\n  }\n  if (value < 2 / 3) {\n    return p + (q - p) * (2 / 3 - value) * 6;\n  }\n  return p;\n}\n\nfunction hslToRgba(h: number, s: number, l: number): RgbaColor {\n  if (s === 0) {\n    const channel = l * 255;\n\n    return {\n      r: channel,\n      g: channel,\n      b: channel,\n      a: 1,\n    };\n  }\n\n  const normalizedHue = (((h % 360) + 360) % 360) / 360;\n  const q = l < 0.5 ? l * (1 + s) : l + s - l * s;\n  const p = 2 * l - q;\n\n  return {\n    r: hueToRgb(p, q, normalizedHue + 1 / 3) * 255,\n    g: hueToRgb(p, q, normalizedHue) * 255,\n    b: hueToRgb(p, q, normalizedHue - 1 / 3) * 255,\n    a: 1,\n  };\n}\n\nfunction mixHslColors(from: string, to: string, factor: number): string {\n  const start = parseColor(from);\n  const end = parseColor(to);\n\n  if (!start || !end) {\n    return factor < 0.5 ? from : to;\n  }\n\n  const left = rgbToHsl(start);\n  const right = rgbToHsl(end);\n  const t = clamp(factor, 0, 1);\n  const hueDelta = ((((right.h - left.h) % 360) + 540) % 360) - 180;\n  const mixed = hslToRgba(\n    left.h + hueDelta * t,\n    left.s + (right.s - left.s) * t,\n    left.l + (right.l - left.l) * t,\n  );\n\n  return toRgbaString(mixed);\n}\n\nfunction relativeLuminance(color: RgbaColor): number {\n  const channels = [color.r, color.g, color.b].map((value) => {\n    const normalized = value / 255;\n    return normalized <= 0.03928 ? normalized / 12.92 : ((normalized + 0.055) / 1.055) ** 2.4;\n  });\n\n  return 0.2126 * channels[0] + 0.7152 * channels[1] + 0.0722 * channels[2];\n}\n\nfunction isDarkSurface(color: string): boolean {\n  const parsed = parseColor(color);\n  return parsed ? relativeLuminance(parsed) < 0.4 : true;\n}\n\nfunction normalizeNumberOfShades(noOfShades: number): number {\n  if (!Number.isFinite(noOfShades) || noOfShades < 0) {\n    return 1;\n  }\n\n  return Math.floor(noOfShades);\n}\n\nfunction quantizeIntensity(normalizedDistance: number, noOfShades: number): number {\n  const clampedDistance = clamp(normalizedDistance, 0, 1);\n  const steps = noOfShades === 0 ? CONTINUOUS_SHADE_STEPS : Math.max(noOfShades, 1);\n\n  if (steps === 1) {\n    return 1;\n  }\n\n  const shadeIndex = Math.min(steps, Math.floor(clampedDistance * steps) + 1);\n  return shadeIndex / steps;\n}\n\nfunction resolveNeutralHueBase(backgroundColor: string, darkSurface: boolean): string {\n  return mixRgbColors(\n    backgroundColor,\n    darkSurface ? DARK_THEME_NEUTRAL_TARGET : LIGHT_THEME_NEUTRAL_TARGET,\n    darkSurface ? DARK_THEME_NEUTRAL_MIX : LIGHT_THEME_NEUTRAL_MIX,\n  );\n}\n\nfunction resolveColorFromShade(\n  color: string,\n  intensity: number,\n  shader: CandleHeatmapShader,\n  backgroundColor: string,\n  darkSurface: boolean,\n): string {\n  const parsed = parseColor(color);\n\n  if (!parsed) {\n    return color;\n  }\n\n  if (shader === 'alpha') {\n    const floorRatio = darkSurface ? DARK_THEME_MIN_ALPHA : LIGHT_THEME_MIN_ALPHA;\n    const alpha = parsed.a * (floorRatio + (1 - floorRatio) * clamp(intensity, 0, 1));\n    return withAlpha(color, alpha);\n  }\n\n  return withAlpha(\n    mixHslColors(\n      resolveNeutralHueBase(backgroundColor, darkSurface),\n      withAlpha(color, 1),\n      clamp(intensity, 0, 1),\n    ),\n    parsed.a,\n  );\n}\n\ninterface ResolvedCandleHeatmapOptions {\n  range: {\n    min: number;\n    minShadeThreshold: number;\n    threshold: number;\n    maxShadeThreshold: number;\n    max: number;\n  };\n  downColor: string;\n  upColor: string;\n  wickDownColor?: string;\n  wickUpColor?: string;\n  borderDownColor?: string;\n  borderUpColor?: string;\n  borderVisible: boolean;\n  shadeWicks: boolean;\n  noOfShades: number;\n  shader: CandleHeatmapShader;\n}\n\nfunction resolveFiniteNumber(value: number | undefined, fallback: number): number {\n  return typeof value === 'number' && Number.isFinite(value) ? value : fallback;\n}\n\nfunction normalizeResolvedOptions(\n  options: CandleHeatmapOptions,\n): ResolvedCandleHeatmapOptions | null {\n  const range: CandleHeatmapRangeOptions = {\n    min: resolveFiniteNumber(options.range.min, DEFAULT_CANDLE_HEATMAP_OPTIONS.range.min),\n    minShadeThreshold: Number.isFinite(options.range.minShadeThreshold)\n      ? options.range.minShadeThreshold\n      : undefined,\n    threshold: resolveFiniteNumber(\n      options.range.threshold,\n      DEFAULT_CANDLE_HEATMAP_OPTIONS.range.threshold,\n    ),\n    maxShadeThreshold: Number.isFinite(options.range.maxShadeThreshold)\n      ? options.range.maxShadeThreshold\n      : undefined,\n    max: resolveFiniteNumber(options.range.max, DEFAULT_CANDLE_HEATMAP_OPTIONS.range.max),\n  };\n\n  if (!(range.min < range.threshold && range.threshold < range.max)) {\n    return null;\n  }\n\n  return {\n    range: {\n      min: range.min,\n      minShadeThreshold: clamp(range.minShadeThreshold ?? range.min, range.min, range.threshold),\n      threshold: range.threshold,\n      maxShadeThreshold: clamp(range.maxShadeThreshold ?? range.max, range.threshold, range.max),\n      max: range.max,\n    },\n    downColor: options.downColor,\n    upColor: options.upColor,\n    wickDownColor: options.wickDownColor,\n    wickUpColor: options.wickUpColor,\n    borderDownColor: options.borderDownColor,\n    borderUpColor: options.borderUpColor,\n    borderVisible: options.borderVisible,\n    shadeWicks: options.shadeWicks,\n    noOfShades: normalizeNumberOfShades(options.noOfShades),\n    shader: options.shader,\n  };\n}\n\nfunction resolveSideDistance(\n  value: number,\n  options: ResolvedCandleHeatmapOptions,\n): { side: CandleHeatmapSide; normalizedDistance: number } {\n  const { min, minShadeThreshold, threshold, maxShadeThreshold, max } = options.range;\n  const clampedValue = clamp(value, min, max);\n\n  if (clampedValue <= min) {\n    return {\n      side: 'min',\n      normalizedDistance: 1,\n    };\n  }\n\n  if (clampedValue >= max) {\n    return {\n      side: 'max',\n      normalizedDistance: 1,\n    };\n  }\n\n  if (options.noOfShades === 1) {\n    return {\n      side: clampedValue < threshold ? 'min' : 'max',\n      normalizedDistance: 1,\n    };\n  }\n\n  if (clampedValue < threshold) {\n    if (minShadeThreshold >= threshold || clampedValue <= minShadeThreshold) {\n      return {\n        side: 'min',\n        normalizedDistance: 1,\n      };\n    }\n\n    const span = threshold - minShadeThreshold;\n\n    return {\n      side: 'min',\n      normalizedDistance:\n        span <= 0 ? 1 : clamp(1 - (clampedValue - minShadeThreshold) / span, 0, 1),\n    };\n  }\n\n  if (maxShadeThreshold <= threshold || clampedValue >= maxShadeThreshold) {\n    return {\n      side: 'max',\n      normalizedDistance: 1,\n    };\n  }\n\n  const span = maxShadeThreshold - threshold;\n\n  return {\n    side: 'max',\n    normalizedDistance: span <= 0 ? 1 : clamp((clampedValue - threshold) / span, 0, 1),\n  };\n}\n\nfunction resolveHeatmapColor(\n  side: CandleHeatmapSide,\n  intensity: number,\n  options: ResolvedCandleHeatmapOptions,\n  backgroundColor: string,\n  darkSurface: boolean,\n): string {\n  const edgeColor = side === 'min' ? options.downColor : options.upColor;\n\n  if (intensity >= 1) {\n    return edgeColor;\n  }\n\n  return resolveColorFromShade(edgeColor, intensity, options.shader, backgroundColor, darkSurface);\n}\n\nfunction resolveSideFillColor(\n  side: CandleHeatmapSide,\n  options: ResolvedCandleHeatmapOptions,\n): string {\n  return side === 'min' ? options.downColor : options.upColor;\n}\n\nfunction resolveSideWickColor(\n  side: CandleHeatmapSide,\n  options: ResolvedCandleHeatmapOptions,\n): string {\n  return side === 'min'\n    ? (options.wickDownColor ?? options.downColor)\n    : (options.wickUpColor ?? options.upColor);\n}\n\nfunction resolveSideBorderColor(\n  side: CandleHeatmapSide,\n  options: ResolvedCandleHeatmapOptions,\n): string {\n  return side === 'min'\n    ? (options.borderDownColor ?? options.downColor)\n    : (options.borderUpColor ?? options.upColor);\n}\n\nfunction resolveShadedSideColor(\n  baseColor: string,\n  intensity: number,\n  options: ResolvedCandleHeatmapOptions,\n  backgroundColor: string,\n  darkSurface: boolean,\n): string {\n  if (intensity >= 1) {\n    return baseColor;\n  }\n\n  return resolveColorFromShade(baseColor, intensity, options.shader, backgroundColor, darkSurface);\n}\n\nexport function resolveCandleHeatmapColor(\n  input: ResolveCandleHeatmapColorInput,\n): CandleHeatmapColorResolution | null {\n  if (!Number.isFinite(input.value)) {\n    return null;\n  }\n\n  const options = normalizeResolvedOptions(mergeCandleHeatmapOptions(input.options));\n\n  if (!options) {\n    return null;\n  }\n\n  const backgroundColor = input.backgroundColor ?? DEFAULT_SURFACE_BACKGROUND;\n  const darkSurface = isDarkSurface(backgroundColor);\n  const { side, normalizedDistance } = resolveSideDistance(input.value as number, options);\n  const intensity = quantizeIntensity(normalizedDistance, options.noOfShades);\n\n  return {\n    color: resolveHeatmapColor(side, intensity, options, backgroundColor, darkSurface),\n    side,\n    intensity,\n  };\n}\n\nexport function buildCandleHeatmapSeriesData<TBar extends CandleHeatmapBarLike>(\n  input: BuildCandleHeatmapSeriesDataInput<TBar>,\n): CandlestickData<TimeValue>[] {\n  const options = normalizeResolvedOptions(mergeCandleHeatmapOptions(input.options));\n  const backgroundColor = input.backgroundColor ?? DEFAULT_SURFACE_BACKGROUND;\n  const darkSurface = isDarkSurface(backgroundColor);\n\n  return input.bars.map((bar, index, bars) => {\n    if (!options) {\n      return {\n        time: bar.time,\n        open: bar.open,\n        high: bar.high,\n        low: bar.low,\n        close: bar.close,\n      };\n    }\n\n    const resolution = resolveCandleHeatmapColor({\n      value: input.getValue(bar, index, bars),\n      options,\n      backgroundColor,\n    });\n    const fillColor = resolution\n      ? resolveShadedSideColor(\n          resolveSideFillColor(resolution.side, options),\n          resolution.intensity,\n          options,\n          backgroundColor,\n          darkSurface,\n        )\n      : undefined;\n    const wickColor = resolution\n      ? options.shadeWicks\n        ? resolveShadedSideColor(\n            resolveSideWickColor(resolution.side, options),\n            resolution.intensity,\n            options,\n            backgroundColor,\n            darkSurface,\n          )\n        : resolveSideWickColor(resolution.side, options)\n      : undefined;\n    const borderColor = resolution\n      ? options.borderVisible\n        ? resolveShadedSideColor(\n            resolveSideBorderColor(resolution.side, options),\n            resolution.intensity,\n            options,\n            backgroundColor,\n            darkSurface,\n          )\n        : 'transparent'\n      : undefined;\n\n    return {\n      time: bar.time,\n      open: bar.open,\n      high: bar.high,\n      low: bar.low,\n      close: bar.close,\n      ...(fillColor\n        ? {\n            color: fillColor,\n            borderColor: borderColor ?? fillColor,\n            wickColor: wickColor ?? fillColor,\n          }\n        : {}),\n    };\n  });\n}\n","import type { CandlestickData } from 'lightweight-charts';\n\nimport type { TimeValue } from '../../models/contracts';\n\nexport interface VolumeDeltaSourceBar {\n  time: TimeValue;\n  open: number;\n  high: number;\n  low: number;\n  close: number;\n  volume?: number;\n  delta?: number;\n}\n\nexport interface VolumeDeltaPivotPoint extends CandlestickData<TimeValue> {\n  delta: number;\n}\n\nexport interface BuildVolumeDeltaPivotSeriesDataOptions {\n  intervalSeconds?: number;\n}\n\nfunction resolveIntervalSeconds(\n  bars: VolumeDeltaSourceBar[],\n  options?: BuildVolumeDeltaPivotSeriesDataOptions,\n): number {\n  if (typeof options?.intervalSeconds === 'number' && options.intervalSeconds > 0) {\n    return options.intervalSeconds;\n  }\n\n  if (bars.length >= 2) {\n    const first = Number(bars[0].time);\n    const second = Number(bars[1].time);\n    const delta = second - first;\n\n    if (Number.isFinite(delta) && delta > 0) {\n      return delta;\n    }\n  }\n\n  return 60;\n}\n\nfunction classifyVolume(\n  bar: VolumeDeltaSourceBar,\n  previousClose: number | undefined,\n  previousPolarity: number,\n): number {\n  if (bar.close > bar.open) {\n    return 1;\n  }\n\n  if (bar.close < bar.open) {\n    return -1;\n  }\n\n  if (typeof previousClose === 'number') {\n    if (bar.close > previousClose) {\n      return 1;\n    }\n\n    if (bar.close < previousClose) {\n      return -1;\n    }\n  }\n\n  return previousPolarity || (bar.close >= bar.open ? 1 : -1);\n}\n\nexport function buildVolumeDeltaPivotSeriesData(\n  chartBars: VolumeDeltaSourceBar[],\n  lowerTimeframeBars: VolumeDeltaSourceBar[],\n  options?: BuildVolumeDeltaPivotSeriesDataOptions,\n): VolumeDeltaPivotPoint[] {\n  if (!chartBars.length) {\n    return [];\n  }\n\n  const intervalSeconds = resolveIntervalSeconds(chartBars, options);\n  const intrabars = lowerTimeframeBars.length ? lowerTimeframeBars : chartBars;\n\n  return chartBars.map((chartBar) => {\n    const start = Number(chartBar.time);\n    const end = start + intervalSeconds;\n    const scopedBars = intrabars.filter((bar) => {\n      const time = Number(bar.time);\n      return time >= start && time < end;\n    });\n    const bars = scopedBars.length ? scopedBars : [chartBar];\n\n    let runningDelta = 0;\n    let high = 0;\n    let low = 0;\n    let previousClose: number | undefined;\n    let previousPolarity = 0;\n\n    for (const bar of bars) {\n      let signedDelta: number;\n\n      if (typeof bar.delta === 'number' && Number.isFinite(bar.delta)) {\n        signedDelta = bar.delta;\n        previousPolarity = signedDelta > 0 ? 1 : signedDelta < 0 ? -1 : previousPolarity;\n      } else {\n        const polarity = classifyVolume(bar, previousClose, previousPolarity);\n        signedDelta = polarity * (bar.volume ?? 0);\n        previousPolarity = polarity;\n      }\n\n      runningDelta += signedDelta;\n      high = Math.max(high, runningDelta);\n      low = Math.min(low, runningDelta);\n      previousClose = bar.close;\n    }\n\n    return {\n      time: chartBar.time,\n      open: 0,\n      high,\n      low,\n      close: runningDelta,\n      delta: runningDelta,\n    };\n  });\n}\n","import type { OrderFlowBar, VwapPoint } from '../../models/contracts';\nimport type { VwapOptions } from '../../models/options';\nimport { mergeVwapOptions } from '../../models/options';\n\nfunction resolveBarContribution(bar: OrderFlowBar): { priceVolume: number; volume: number } {\n  if (!bar.levels.length) {\n    const volume = bar.totalVolume ?? 0;\n    return {\n      priceVolume: bar.close * volume,\n      volume,\n    };\n  }\n\n  return bar.levels.reduce(\n    (result, level) => {\n      const totalVolume = level.totalVolume ?? level.bidVolume + level.askVolume;\n      result.priceVolume += level.price * totalVolume;\n      result.volume += totalVolume;\n      return result;\n    },\n    { priceVolume: 0, volume: 0 },\n  );\n}\n\nexport function computeVwapSeriesData(\n  bars: OrderFlowBar[],\n  options?: Partial<VwapOptions>,\n): VwapPoint[] {\n  const resolvedOptions = mergeVwapOptions(options);\n  let cumulativePriceVolume = 0;\n  let cumulativeVolume = 0;\n  let currentSessionId: string | undefined;\n\n  return bars.map((bar) => {\n    if (\n      resolvedOptions.resetMode === 'session' &&\n      currentSessionId !== undefined &&\n      currentSessionId !== bar.sessionId\n    ) {\n      cumulativePriceVolume = 0;\n      cumulativeVolume = 0;\n    }\n\n    currentSessionId = bar.sessionId;\n\n    const contribution = resolveBarContribution(bar);\n    cumulativePriceVolume += contribution.priceVolume;\n    cumulativeVolume += contribution.volume;\n\n    return {\n      time: bar.time,\n      value: cumulativeVolume ? cumulativePriceVolume / cumulativeVolume : bar.close,\n      sessionId: bar.sessionId,\n    };\n  });\n}\n","import type { ResponsiveWidthValue, WidthRangeOptions } from '../models/options';\n\nfunction normalizePercentage(value: string): number {\n  const numeric = Number.parseFloat(value.slice(0, -1));\n\n  if (!Number.isFinite(numeric)) {\n    return 0;\n  }\n\n  return numeric / 100;\n}\n\nexport function resolveResponsiveWidth(\n  value: ResponsiveWidthValue,\n  availableWidth: number,\n): number {\n  if (typeof value === 'number') {\n    return value;\n  }\n\n  return availableWidth * normalizePercentage(value);\n}\n\nexport function resolveWidthRange(\n  availableWidth: number,\n  range: WidthRangeOptions,\n): { min: number; max: number } {\n  const min = Math.max(resolveResponsiveWidth(range.min, availableWidth), 0);\n  const max = Math.max(resolveResponsiveWidth(range.max, availableWidth), min);\n\n  return {\n    min,\n    max,\n  };\n}\n","import type {\n  CustomBarItemData,\n  ICustomSeriesPaneRenderer,\n  PriceToCoordinateConverter,\n} from 'lightweight-charts';\nimport type { CanvasRenderingTarget2D } from 'fancy-canvas';\n\nimport type { OrderFlowBar, TimeValue } from '../../models/contracts';\nimport type { DeltaSummaryColumnKey, DeltaSummarySeriesOptions } from '../../models/options';\nimport type { DeltaSummaryColumnModel } from '../../models/studies';\nimport { clamp } from '../../utils/math';\nimport { resolveColorScale } from '../../utils/color';\nimport { resolveWidthRange } from '../../utils/width';\n\nexport interface RenderableDeltaSummaryColumn {\n  item: CustomBarItemData<TimeValue, OrderFlowBar>;\n  column: DeltaSummaryColumnModel;\n}\n\nexport interface DeltaSummaryRendererState {\n  columns: RenderableDeltaSummaryColumn[];\n  barSpacing: number;\n  options: DeltaSummarySeriesOptions;\n}\n\nfunction resolveSummaryBarWidth(barSpacing: number, options: DeltaSummarySeriesOptions): number {\n  const widthRange = resolveWidthRange(barSpacing, options.columnWidth);\n\n  return clamp(Math.floor(barSpacing), Math.floor(widthRange.min), Math.floor(widthRange.max));\n}\n\ninterface SummaryColumnBounds {\n  left: number;\n  width: number;\n}\n\nfunction resolveLogicalTime(column: RenderableDeltaSummaryColumn): number | null {\n  return typeof column.item.time === 'number' && Number.isFinite(column.item.time)\n    ? column.item.time\n    : null;\n}\n\nfunction resolveMinimumTimeSpacing(columns: RenderableDeltaSummaryColumn[]): number | null {\n  const times = columns\n    .map(resolveLogicalTime)\n    .filter((time): time is number => time !== null)\n    .sort((a, b) => a - b);\n\n  let minimum = Number.POSITIVE_INFINITY;\n\n  for (let index = 1; index < times.length; index += 1) {\n    const spacing = times[index] - times[index - 1];\n\n    if (spacing > 0) {\n      minimum = Math.min(minimum, spacing);\n    }\n  }\n\n  return Number.isFinite(minimum) ? minimum : null;\n}\n\nfunction areAdjacentSummaryColumns(\n  current: RenderableDeltaSummaryColumn,\n  neighbor: RenderableDeltaSummaryColumn | undefined,\n  minimumTimeSpacing: number | null,\n): neighbor is RenderableDeltaSummaryColumn {\n  if (!neighbor || minimumTimeSpacing === null) {\n    return false;\n  }\n\n  const currentTime = resolveLogicalTime(current);\n  const neighborTime = resolveLogicalTime(neighbor);\n\n  if (currentTime === null || neighborTime === null) {\n    return false;\n  }\n\n  return Math.abs(currentTime - neighborTime) <= minimumTimeSpacing * 1.5;\n}\n\nfunction resolveSummaryColumnBounds(\n  columnIndex: number,\n  columns: RenderableDeltaSummaryColumn[],\n  fallbackWidth: number,\n  cellBorderWidth: number,\n  minimumTimeSpacing: number | null,\n): SummaryColumnBounds {\n  const column = columns[columnIndex];\n  const previousColumn = columns[columnIndex - 1];\n  const nextColumn = columns[columnIndex + 1];\n  const halfWidth = fallbackWidth / 2;\n  let left = column.item.x - halfWidth;\n  let right = column.item.x + halfWidth;\n\n  if (previousColumn) {\n    const midpoint = (previousColumn.item.x + column.item.x) / 2;\n    left = areAdjacentSummaryColumns(column, previousColumn, minimumTimeSpacing)\n      ? midpoint + cellBorderWidth / 2\n      : Math.max(left, midpoint + cellBorderWidth / 2);\n  }\n\n  if (nextColumn) {\n    const midpoint = (column.item.x + nextColumn.item.x) / 2;\n    right = areAdjacentSummaryColumns(column, nextColumn, minimumTimeSpacing)\n      ? midpoint - cellBorderWidth / 2\n      : Math.min(right, midpoint - cellBorderWidth / 2);\n  }\n\n  return {\n    left,\n    width: Math.max(1, right - left),\n  };\n}\n\nfunction resolveVisibleSummaryColumns(\n  columns: RenderableDeltaSummaryColumn[],\n): RenderableDeltaSummaryColumn[] {\n  const sortedColumns = [...columns].sort((left, right) => {\n    const deltaX = left.item.x - right.item.x;\n    if (Math.abs(deltaX) > 0.5) {\n      return deltaX;\n    }\n\n    return (resolveLogicalTime(left) ?? 0) - (resolveLogicalTime(right) ?? 0);\n  });\n  const tolerance = 0.5;\n  const lengths = sortedColumns.map(() => 1);\n  const timeSums = sortedColumns.map((column) => resolveLogicalTime(column) ?? 0);\n  const previousIndices = sortedColumns.map(() => -1);\n\n  for (let columnIndex = 0; columnIndex < sortedColumns.length; columnIndex += 1) {\n    const currentColumn = sortedColumns[columnIndex];\n    const currentTime = resolveLogicalTime(currentColumn);\n\n    if (currentTime === null) {\n      continue;\n    }\n\n    for (let previousIndex = 0; previousIndex < columnIndex; previousIndex += 1) {\n      const previousColumn = sortedColumns[previousIndex];\n      const previousTime = resolveLogicalTime(previousColumn);\n\n      if (\n        previousTime === null ||\n        currentTime <= previousTime ||\n        currentColumn.item.x - previousColumn.item.x <= tolerance\n      ) {\n        continue;\n      }\n\n      const candidateLength = lengths[previousIndex] + 1;\n      const candidateTimeSum = timeSums[previousIndex] + currentTime;\n\n      if (\n        candidateLength > lengths[columnIndex] ||\n        (candidateLength === lengths[columnIndex] && candidateTimeSum > timeSums[columnIndex])\n      ) {\n        lengths[columnIndex] = candidateLength;\n        timeSums[columnIndex] = candidateTimeSum;\n        previousIndices[columnIndex] = previousIndex;\n      }\n    }\n  }\n\n  let bestIndex = -1;\n\n  for (let columnIndex = 0; columnIndex < sortedColumns.length; columnIndex += 1) {\n    if (\n      bestIndex === -1 ||\n      lengths[columnIndex] > lengths[bestIndex] ||\n      (lengths[columnIndex] === lengths[bestIndex] && timeSums[columnIndex] > timeSums[bestIndex])\n    ) {\n      bestIndex = columnIndex;\n    }\n  }\n\n  const resolvedColumns: RenderableDeltaSummaryColumn[] = [];\n\n  while (bestIndex !== -1) {\n    resolvedColumns.push(sortedColumns[bestIndex]);\n    bestIndex = previousIndices[bestIndex];\n  }\n\n  return resolvedColumns.reverse();\n}\n\nfunction formatMetricValue(metric: DeltaSummaryColumnKey, value: number): string {\n  if (metric === 'cumulativeDeltaToVolumeRatio') {\n    return `${value.toFixed(2)}%`;\n  }\n\n  return Number.isInteger(value) ? `${value}` : value.toFixed(2);\n}\n\nfunction metricLabel(metric: DeltaSummaryColumnKey, options: DeltaSummarySeriesOptions): string {\n  return options.rowLabels[metric] ?? metric;\n}\n\nfunction metricValue(column: DeltaSummaryColumnModel, metric: DeltaSummaryColumnKey): number {\n  return column[metric];\n}\n\nfunction metricDirection(\n  metric: DeltaSummaryColumnKey,\n  value: number,\n): 'positive' | 'negative' | 'neutral' {\n  if (metric === 'volume') {\n    return 'positive';\n  }\n\n  if (value > 0) {\n    return 'positive';\n  }\n\n  if (value < 0) {\n    return 'negative';\n  }\n\n  return 'neutral';\n}\n\nfunction resolveMetricFillColor(\n  ratio: number,\n  direction: 'positive' | 'negative' | 'neutral',\n  rowStyle: DeltaSummarySeriesOptions['rowStyles'][DeltaSummaryColumnKey],\n): string {\n  if (direction === 'positive') {\n    return resolveColorScale(rowStyle.positiveFillScale, ratio);\n  }\n\n  if (direction === 'negative') {\n    return resolveColorScale(rowStyle.negativeFillScale, ratio);\n  }\n\n  return resolveColorScale(rowStyle.neutralFillScale, ratio);\n}\n\nexport class DeltaSummarySeriesRenderer implements ICustomSeriesPaneRenderer {\n  public state: DeltaSummaryRendererState = {\n    columns: [],\n    barSpacing: 0,\n    options: {} as DeltaSummarySeriesOptions,\n  };\n\n  draw(target: CanvasRenderingTarget2D, _priceConverter: PriceToCoordinateConverter): void {\n    target.useBitmapCoordinateSpace(({ context, bitmapSize }) => {\n      context.save();\n      context.setTransform(1, 0, 0, 1, 0, 0);\n      context.clearRect(0, 0, bitmapSize.width, bitmapSize.height);\n      context.restore();\n    });\n\n    target.useMediaCoordinateSpace(({ context, mediaSize }) => {\n      context.save();\n      context.beginPath();\n      context.rect(0, 0, mediaSize.width, mediaSize.height);\n      context.clip();\n\n      const rows = this.state.options.rows;\n\n      if (!rows.length) {\n        context.restore();\n        return;\n      }\n\n      const barWidth = resolveSummaryBarWidth(this.state.barSpacing, this.state.options);\n      const columns = resolveVisibleSummaryColumns(this.state.columns);\n      const minimumTimeSpacing = resolveMinimumTimeSpacing(columns);\n      const rowHeight = Math.min(this.state.options.rowHeight, mediaSize.height / rows.length);\n      const labelWidth = this.state.options.showLabels ? this.state.options.labelWidth : 0;\n\n      context.font = `${this.state.options.fontSize}px ${this.state.options.fontFamily}`;\n\n      for (let rowIndex = 0; rowIndex < rows.length; rowIndex += 1) {\n        const metric = rows[rowIndex];\n        const top = rowIndex * rowHeight;\n        const rowStyle = this.state.options.rowStyles[metric];\n        const maxAbsValue = columns.reduce((maximum, entry) => {\n          const value = metricValue(entry.column, metric);\n          return Math.max(maximum, Math.abs(value));\n        }, 0);\n\n        context.save();\n        if (this.state.options.showLabels) {\n          const dataWidth = Math.max(mediaSize.width - labelWidth, 0);\n          context.beginPath();\n          context.rect(labelWidth, top, dataWidth, rowHeight);\n          context.clip();\n        }\n\n        for (let columnIndex = 0; columnIndex < columns.length; columnIndex += 1) {\n          const entry = columns[columnIndex];\n          const value = metricValue(entry.column, metric);\n          const columnBounds = resolveSummaryColumnBounds(\n            columnIndex,\n            columns,\n            barWidth,\n            this.state.options.cellBorderWidth,\n            minimumTimeSpacing,\n          );\n          const direction = metricDirection(metric, value);\n          const ratio = maxAbsValue > 0 ? Math.abs(value) / maxAbsValue : 0;\n          const fillColor = resolveMetricFillColor(ratio, direction, rowStyle);\n\n          context.fillStyle = fillColor;\n          context.fillRect(columnBounds.left, top, columnBounds.width, rowHeight);\n\n          if (this.state.options.cellBorderWidth > 0) {\n            context.strokeStyle = this.state.options.cellBorderColor;\n            context.lineWidth = this.state.options.cellBorderWidth;\n            context.strokeRect(columnBounds.left, top, columnBounds.width, rowHeight);\n          }\n\n          if (columnBounds.width >= this.state.options.fontSize * 4) {\n            context.save();\n            context.beginPath();\n            context.rect(columnBounds.left, top, columnBounds.width, rowHeight);\n            context.clip();\n            context.textAlign = 'center';\n            context.textBaseline = 'middle';\n            context.fillStyle = rowStyle.textColor;\n            context.fillText(\n              formatMetricValue(metric, value),\n              columnBounds.left + columnBounds.width / 2,\n              top + rowHeight / 2,\n            );\n            context.restore();\n          }\n        }\n\n        context.restore();\n\n        if (this.state.options.showLabels) {\n          context.fillStyle = this.state.options.labelBackgroundColor;\n          context.fillRect(0, top, labelWidth, rowHeight);\n\n          if (this.state.options.cellBorderWidth > 0) {\n            context.strokeStyle = this.state.options.cellBorderColor;\n            context.lineWidth = this.state.options.cellBorderWidth;\n            context.strokeRect(0, top, labelWidth, rowHeight);\n          }\n\n          context.save();\n          context.textAlign = 'left';\n          context.textBaseline = 'middle';\n          context.fillStyle = this.state.options.labelTextColor;\n          context.fillText(metricLabel(metric, this.state.options), 8, top + rowHeight / 2);\n          context.restore();\n        }\n      }\n\n      context.restore();\n    });\n  }\n}\n","import type {\n  CustomSeriesWhitespaceData,\n  ICustomSeriesPaneView,\n  PaneRendererCustomData,\n} from 'lightweight-charts';\n\nimport type { OrderFlowBar, TimeValue } from '../../models/contracts';\nimport type {\n  DeltaSummarySeriesOptions,\n  DeltaSummarySeriesPartialOptions,\n} from '../../models/options';\nimport { mergeDeltaSummarySeriesOptions } from '../../models/options';\nimport { buildDeltaSummaryColumns } from '../../calculations/footprint/buildDeltaSummaryColumns';\nimport { DeltaSummarySeriesRenderer } from './DeltaSummarySeriesRenderer';\n\nfunction isItemVisible(\n  logicalIndex: number,\n  visibleRange: { from: number; to: number } | null,\n  conflationFactor: number,\n): boolean {\n  if (!visibleRange) {\n    return true;\n  }\n\n  const logicalBuffer = Math.max(0, conflationFactor / 2 - 0.5);\n\n  return (\n    logicalIndex >= visibleRange.from - logicalBuffer &&\n    logicalIndex <= visibleRange.to + logicalBuffer\n  );\n}\n\nclass DeltaSummarySeriesView implements ICustomSeriesPaneView<\n  TimeValue,\n  OrderFlowBar,\n  DeltaSummarySeriesOptions\n> {\n  private readonly rendererInstance = new DeltaSummarySeriesRenderer();\n  private readonly initialOptions: DeltaSummarySeriesOptions;\n  private rowCount: number;\n\n  constructor(options?: DeltaSummarySeriesPartialOptions) {\n    this.initialOptions = mergeDeltaSummarySeriesOptions(options);\n    this.rowCount = this.initialOptions.rows.length || 1;\n    this.rendererInstance.state.options = this.initialOptions;\n  }\n\n  renderer() {\n    return this.rendererInstance;\n  }\n\n  update(\n    data: PaneRendererCustomData<TimeValue, OrderFlowBar>,\n    seriesOptions: DeltaSummarySeriesOptions,\n  ): void {\n    const resolvedOptions = mergeDeltaSummarySeriesOptions(seriesOptions);\n    const columns = buildDeltaSummaryColumns(data.bars.map((item) => item.originalData));\n    this.rowCount = resolvedOptions.rows.length || 1;\n    const visibleColumns = data.bars\n      .map((item, index) => ({\n        item,\n        column: columns[index],\n      }))\n      .filter((entry) => isItemVisible(entry.item.time, data.visibleRange, data.conflationFactor));\n\n    this.rendererInstance.state = {\n      columns: visibleColumns,\n      barSpacing: data.barSpacing * data.conflationFactor,\n      options: resolvedOptions,\n    };\n  }\n\n  priceValueBuilder(): number[] {\n    return [this.rowCount, 0, 0];\n  }\n\n  isWhitespace(\n    data: OrderFlowBar | CustomSeriesWhitespaceData<TimeValue>,\n  ): data is CustomSeriesWhitespaceData<TimeValue> {\n    return !('levels' in data);\n  }\n\n  defaultOptions(): DeltaSummarySeriesOptions {\n    return this.initialOptions;\n  }\n}\n\nexport function createDeltaSummarySeries(\n  options?: DeltaSummarySeriesPartialOptions,\n): ICustomSeriesPaneView<TimeValue, OrderFlowBar, DeltaSummarySeriesOptions> {\n  return new DeltaSummarySeriesView(options);\n}\n","import type {\n  MetricStyleKey,\n  MetricStylePalette,\n  MetricStyleToken,\n  MetricStyleVariant,\n  MetricStyleVariantMode,\n} from '../models/options';\n\nexport const METRIC_STYLE_KEYS: MetricStyleKey[] = [\n  'metric0',\n  'metric1',\n  'metric2',\n  'metric3',\n  'metric4',\n  'metric5',\n  'metric6',\n  'metric7',\n  'metric8',\n  'metric9',\n];\n\nfunction metricStyleIndex(key: MetricStyleKey): number {\n  return Number(key.replace('metric', ''));\n}\n\nexport function resolveMetricStyleVariant(\n  rawValue: number | null,\n  mode: MetricStyleVariantMode = 'auto',\n): MetricStyleVariant {\n  if (mode === 'primary' || mode === 'secondary') {\n    return mode;\n  }\n\n  return rawValue !== null && rawValue < 0 ? 'secondary' : 'primary';\n}\n\nexport function resolveMetricStyleToken(\n  palette: MetricStylePalette,\n  key: MetricStyleKey,\n  variant: MetricStyleVariant = 'primary',\n): MetricStyleToken {\n  for (let index = metricStyleIndex(key); index >= 0; index -= 1) {\n    const entry = palette[METRIC_STYLE_KEYS[index]];\n\n    if (!entry?.primary) {\n      continue;\n    }\n\n    if (variant === 'secondary' && index === metricStyleIndex(key) && entry.secondary) {\n      const merged = {\n        ...entry.primary,\n        ...entry.secondary,\n      };\n\n      if (!merged.color || !merged.font) {\n        throw new Error(`Metric style \"${key}.secondary\" must resolve both color and font.`);\n      }\n\n      return merged;\n    }\n\n    if (!entry.primary.color || !entry.primary.font) {\n      throw new Error(\n        `Metric style \"${METRIC_STYLE_KEYS[index]}.primary\" must include color and font.`,\n      );\n    }\n\n    return entry.primary;\n  }\n\n  throw new Error('Metric style palette requires \"metric0.primary\" with both color and font.');\n}\n\nexport function parseMetricBorderShorthand(border?: string): {\n  color: string | null;\n  width: number;\n} {\n  if (!border || !border.trim()) {\n    return {\n      color: null,\n      width: 0,\n    };\n  }\n\n  const trimmed = border.trim();\n  const widthMatch = trimmed.match(/(\\d+(?:\\.\\d+)?)px/);\n  const width = widthMatch ? Number(widthMatch[1]) : 0;\n  const color = trimmed\n    .replace(/(\\d+(?:\\.\\d+)?)px/, '')\n    .replace(/\\b(solid|dashed|dotted|double|none)\\b/g, '')\n    .trim();\n\n  return {\n    color: color || null,\n    width,\n  };\n}\n","export type NumericRoundingMode = 'round' | 'ceil' | 'floor';\n\nexport interface NumericTextFormatOptions {\n  digits: number;\n  rounding: NumericRoundingMode;\n}\n\nexport interface CompactNumericFormatOptions {\n  integerDigits: number;\n  decimalDigits: number;\n  rounding: NumericRoundingMode;\n  suffixVisible: boolean;\n}\n\nconst COMPACT_SUFFIXES = ['', 'k', 'M', 'B', 'T', 'Q'] as const;\n\nexport function clampDecimalDigits(digits: number): number {\n  if (!Number.isFinite(digits)) {\n    return 0;\n  }\n\n  return Math.max(0, Math.floor(digits));\n}\n\nexport function clampIntegerDigits(digits: number): number {\n  if (!Number.isFinite(digits)) {\n    return 1;\n  }\n\n  return Math.max(1, Math.floor(digits));\n}\n\nexport function roundToDigits(\n  value: number,\n  digits: number,\n  rounding: NumericRoundingMode = 'round',\n): number {\n  const resolvedDigits = clampDecimalDigits(digits);\n  const factor = 10 ** resolvedDigits;\n  const normalizedValue = Number(value.toFixed(resolvedDigits + 8));\n  const scaledValue = normalizedValue * factor;\n\n  let rounded = scaledValue;\n\n  switch (rounding) {\n    case 'ceil':\n      rounded = Math.ceil(scaledValue - Number.EPSILON);\n      break;\n    case 'floor':\n      rounded = Math.floor(scaledValue + Number.EPSILON);\n      break;\n    case 'round':\n    default:\n      rounded = Math.round(scaledValue);\n      break;\n  }\n\n  return Number((rounded / factor).toFixed(resolvedDigits));\n}\n\nexport function formatNumericValue(value: number, options: NumericTextFormatOptions): string {\n  const resolvedDigits = clampDecimalDigits(options.digits);\n  return roundToDigits(value, resolvedDigits, options.rounding).toFixed(resolvedDigits);\n}\n\nfunction resolveIntegerDigits(value: number): number {\n  const absoluteValue = Math.abs(value);\n\n  if (absoluteValue < 1) {\n    return 1;\n  }\n\n  return Math.floor(Math.log10(absoluteValue)) + 1;\n}\n\nexport function formatCompactNumericValue(\n  value: number,\n  options: CompactNumericFormatOptions,\n): string {\n  const resolvedIntegerDigits = clampIntegerDigits(options.integerDigits);\n  const resolvedDecimalDigits = clampDecimalDigits(options.decimalDigits);\n  const absoluteValue = Math.abs(value);\n\n  if (absoluteValue < 1000) {\n    return formatNumericValue(value, {\n      digits: resolvedDecimalDigits,\n      rounding: options.rounding,\n    });\n  }\n\n  let suffixIndex = 0;\n  let scaledValue = value;\n\n  while (suffixIndex < COMPACT_SUFFIXES.length - 1) {\n    const roundedScaledValue = roundToDigits(scaledValue, resolvedDecimalDigits, options.rounding);\n    if (resolveIntegerDigits(roundedScaledValue) <= resolvedIntegerDigits) {\n      break;\n    }\n\n    suffixIndex += 1;\n    scaledValue = value / 1000 ** suffixIndex;\n  }\n\n  const numericText = formatNumericValue(scaledValue, {\n    digits: resolvedDecimalDigits,\n    rounding: options.rounding,\n  });\n  const suffix = options.suffixVisible ? COMPACT_SUFFIXES[suffixIndex] : '';\n\n  return `${numericText}${suffix}`;\n}\n","export function strokeHorizontalLine(\n  context: CanvasRenderingContext2D,\n  y: number,\n  fromX: number,\n  toX: number,\n  color: string,\n  lineWidth = 1,\n): void {\n  context.save();\n  context.strokeStyle = color;\n  context.lineWidth = lineWidth;\n  context.beginPath();\n  context.moveTo(fromX, y);\n  context.lineTo(toX, y);\n  context.stroke();\n  context.restore();\n}\n\nexport function fillCenteredText(\n  context: CanvasRenderingContext2D,\n  text: string,\n  x: number,\n  y: number,\n  color: string,\n): void {\n  context.save();\n  context.textAlign = 'center';\n  context.textBaseline = 'middle';\n  context.fillStyle = color;\n  context.fillText(text, x, y);\n  context.restore();\n}\n","import type { FootprintLevelModel, ProfileModel } from '../../models/studies';\nimport type { FootprintSeriesOptions, FootprintTextMode } from '../../models/options';\nimport {\n  formatCompactNumericValue,\n  formatNumericValue,\n  type NumericRoundingMode,\n} from '../../utils/numberFormat';\nimport { clamp } from '../../utils/math';\nimport { resolveWidthRange } from '../../utils/width';\n\nexport function resolveBarWidth(\n  barSpacing: number,\n  options: Pick<FootprintSeriesOptions, 'layout'>,\n): number {\n  const widthRange = resolveWidthRange(barSpacing, options.layout.barWidth);\n\n  return clamp(Math.floor(barSpacing), Math.floor(widthRange.min), Math.floor(widthRange.max));\n}\n\nexport type FootprintDensity = 'full' | 'compact' | 'heatmap';\n\nexport function resolveFootprintDensity(barSpacing: number): FootprintDensity {\n  if (barSpacing >= 38) {\n    return 'full';\n  }\n\n  if (barSpacing >= 20) {\n    return 'compact';\n  }\n\n  return 'heatmap';\n}\n\nexport function resolveFootprintFontSize(baseFontSize: number, barWidth: number): number {\n  return clamp(Math.floor(Math.min(baseFontSize, barWidth * 0.28)), 7, baseFontSize);\n}\n\nexport interface FootprintRegion {\n  left: number;\n  width: number;\n  centerX: number;\n}\n\nexport interface FootprintBarLayout {\n  left: number;\n  width: number;\n  right: number;\n  candle: FootprintRegion | null;\n  bidArea: FootprintRegion | null;\n  askArea: FootprintRegion | null;\n  separator: FootprintRegion | null;\n  singleCellSegments: FootprintRegion[];\n  singleCellTextCenterX: number;\n}\n\nfunction createRegion(left: number, width: number): FootprintRegion | null {\n  if (width <= 0) {\n    return null;\n  }\n\n  return {\n    left,\n    width,\n    centerX: left + width / 2,\n  };\n}\n\nexport function resolveFootprintBarLayout(\n  centerX: number,\n  barWidth: number,\n  options: Pick<FootprintSeriesOptions, 'candle' | 'ladder'>,\n): FootprintBarLayout {\n  const left = centerX - barWidth / 2;\n  const right = left + barWidth;\n  const separatorGap =\n    options.ladder.separatorMode === 'letter'\n      ? clamp(options.ladder.separatorGap, 0, Math.max(Math.floor(barWidth / 3), 0))\n      : 0;\n\n  if (!options.candle.visible) {\n    const splitWidth = Math.max(barWidth - separatorGap, 2);\n    const bidWidth = Math.max(Math.floor(splitWidth / 2), 1);\n    const askWidth = Math.max(splitWidth - bidWidth, 1);\n\n    return {\n      left,\n      width: barWidth,\n      right,\n      candle: null,\n      bidArea: createRegion(left, bidWidth),\n      askArea: createRegion(left + bidWidth + separatorGap, askWidth),\n      separator: createRegion(left + bidWidth, separatorGap),\n      singleCellSegments: [createRegion(left, barWidth)].filter((value): value is FootprintRegion =>\n        Boolean(value),\n      ),\n      singleCellTextCenterX: centerX,\n    };\n  }\n\n  const candleWidth = clamp(\n    Math.floor(barWidth * options.candle.widthRatio),\n    options.candle.minWidth,\n    Math.min(options.candle.maxWidth, Math.max(barWidth - 2, options.candle.minWidth)),\n  );\n  const gap = clamp(options.candle.gap, 0, Math.max(Math.floor(barWidth / 4), 0));\n  const candleSpan = candleWidth + gap * 2;\n\n  if (options.candle.position === 'middle') {\n    const leftWidth = Math.max(Math.floor((barWidth - candleSpan) / 2), 1);\n    const rightWidth = Math.max(barWidth - leftWidth - candleSpan, 1);\n    const bidArea = createRegion(left, leftWidth);\n    const candle = createRegion(left + leftWidth + gap, candleWidth);\n    const askArea = createRegion((candle?.left ?? left) + candleWidth + gap, rightWidth);\n    const singleCellSegments = [bidArea, askArea].filter((value): value is FootprintRegion =>\n      Boolean(value),\n    );\n\n    return {\n      left,\n      width: barWidth,\n      right,\n      candle,\n      bidArea,\n      askArea,\n      separator: null,\n      singleCellSegments,\n      singleCellTextCenterX: askArea?.centerX ?? bidArea?.centerX ?? centerX,\n    };\n  }\n\n  const candleLeft = options.candle.position === 'left' ? left : right - candleWidth;\n  const candle = createRegion(candleLeft, candleWidth);\n  const ladderLeft = options.candle.position === 'left' ? candleLeft + candleWidth + gap : left;\n  const ladderRight =\n    options.candle.position === 'left' ? right : Math.max(candleLeft - gap, ladderLeft + 1);\n  const ladderWidth = Math.max(ladderRight - ladderLeft, 1);\n  const splitWidth = Math.max(ladderWidth - separatorGap, 2);\n  const bidWidth = Math.max(Math.floor(splitWidth / 2), 1);\n  const askWidth = Math.max(splitWidth - bidWidth, 1);\n  const bidArea = createRegion(ladderLeft, bidWidth);\n  const separator = createRegion(ladderLeft + bidWidth, separatorGap);\n  const askArea = createRegion(ladderLeft + bidWidth + separatorGap, askWidth);\n  const singleCellSegment = createRegion(ladderLeft, ladderWidth);\n\n  return {\n    left,\n    width: barWidth,\n    right,\n    candle,\n    bidArea,\n    askArea,\n    separator,\n    singleCellSegments: singleCellSegment ? [singleCellSegment] : [],\n    singleCellTextCenterX: singleCellSegment?.centerX ?? centerX,\n  };\n}\n\nexport function formatFootprintValue(\n  value: number,\n  digits: number,\n  rounding: NumericRoundingMode,\n): string {\n  return Number.isInteger(value)\n    ? `${value}`\n    : formatNumericValue(value, {\n        digits,\n        rounding,\n      });\n}\n\nexport function formatCompactFootprintValue(\n  value: number,\n  options: Pick<\n    FootprintSeriesOptions['style'],\n    'valueIntegerDigits' | 'valueDecimalDigits' | 'valueRounding' | 'valueUnitVisible'\n  >,\n): string {\n  return formatCompactNumericValue(value, {\n    integerDigits: options.valueIntegerDigits,\n    decimalDigits: options.valueDecimalDigits,\n    rounding: options.valueRounding,\n    suffixVisible: options.valueUnitVisible,\n  });\n}\n\nexport function formatFootprintCellText(\n  level: FootprintLevelModel,\n  mode: FootprintTextMode,\n  style: Pick<\n    FootprintSeriesOptions['style'],\n    'valueIntegerDigits' | 'valueDecimalDigits' | 'valueRounding' | 'valueUnitVisible'\n  >,\n): string {\n  switch (mode) {\n    case 'none':\n      return '';\n    case 'delta':\n      return formatCompactFootprintValue(level.delta, style);\n    case 'total':\n      return formatCompactFootprintValue(level.totalVolume, style);\n    case 'bid-ask':\n    default:\n      return `${formatCompactFootprintValue(level.bidVolume, style)} x ${formatCompactFootprintValue(level.askVolume, style)}`;\n  }\n}\n\nexport function resolveProfileLevelWidth(\n  profile: ProfileModel,\n  totalWidth: number,\n  totalVolume: number,\n): number {\n  if (!profile.maxVolume) {\n    return 0;\n  }\n\n  return (totalVolume / profile.maxVolume) * totalWidth;\n}\n","import type {\n  Coordinate,\n  CustomBarItemData,\n  ICustomSeriesPaneRenderer,\n  PriceToCoordinateConverter,\n} from 'lightweight-charts';\nimport type { CanvasRenderingTarget2D } from 'fancy-canvas';\n\nimport type { OrderFlowBar, TimeValue } from '../../models/contracts';\nimport type {\n  FootprintBidAskShadingMetric,\n  FootprintMetricItemOptions,\n  FootprintSeriesOptions,\n  FootprintSingleCellShadingMetric,\n} from '../../models/options';\nimport type { FootprintBarModel, FootprintLevelModel } from '../../models/studies';\nimport { resolveColorScale, withAlpha } from '../../utils/color';\nimport {\n  parseMetricBorderShorthand,\n  resolveMetricStyleToken,\n  resolveMetricStyleVariant,\n} from '../../utils/metricStylePalette';\nimport { formatNumericValue } from '../../utils/numberFormat';\nimport { fillCenteredText } from '../shared/canvas';\nimport {\n  formatCompactFootprintValue,\n  formatFootprintCellText,\n  resolveBarWidth,\n  resolveFootprintBarLayout,\n  resolveFootprintDensity,\n  resolveFootprintFontSize,\n  type FootprintDensity,\n  type FootprintRegion,\n} from '../shared/renderModel';\n\nexport interface RenderableFootprintBar {\n  item: CustomBarItemData<TimeValue, OrderFlowBar>;\n  model: FootprintBarModel;\n}\n\nexport interface FootprintRendererState {\n  bars: RenderableFootprintBar[];\n  barSpacing: number;\n  options: FootprintSeriesOptions;\n}\n\ninterface ResolvedMetricItem {\n  item: FootprintMetricItemOptions;\n  text: string;\n  rawValue: number | null;\n  textColor: string;\n  width: number;\n  height: number;\n  style: FootprintMetricItemOptions['style'];\n}\n\nfunction resolveBidAskShadingValue(\n  level: FootprintLevelModel,\n  metric: FootprintBidAskShadingMetric,\n): number {\n  return metric === 'volume/average' ? level.volumeRatioToAverage : level.volumeRatioToMax;\n}\n\nfunction resolveSingleCellShadingValue(\n  level: FootprintLevelModel,\n  metric: FootprintSingleCellShadingMetric,\n): number {\n  switch (metric) {\n    case 'volume/average':\n      return level.volumeRatioToAverage;\n    case 'absolute-delta/max-abs':\n      return level.absoluteDeltaRatioToMaxAbs;\n    case 'volume/max':\n    default:\n      return level.volumeRatioToMax;\n  }\n}\n\nfunction resolveSingleCellFillColor(\n  level: FootprintLevelModel,\n  options: FootprintSeriesOptions,\n): string {\n  const shadingValue = resolveSingleCellShadingValue(level, options.shading.singleCellMetric);\n\n  if (options.shading.singleCellMetric === 'absolute-delta/max-abs') {\n    return resolveColorScale(\n      level.delta >= 0 ? options.shading.positiveDeltaScale : options.shading.negativeDeltaScale,\n      shadingValue,\n    );\n  }\n\n  return resolveColorScale(options.shading.neutralScale, shadingValue);\n}\n\nfunction resolveBidAskFillColors(\n  level: FootprintLevelModel,\n  options: FootprintSeriesOptions,\n): { bidColor: string; askColor: string } {\n  if (options.ladder.bidAskFillMode === 'by-delta') {\n    const fillColor =\n      level.delta > 0\n        ? resolveColorScale(options.shading.positiveDeltaScale, level.absoluteDeltaRatioToMaxAbs)\n        : level.delta < 0\n          ? resolveColorScale(options.shading.negativeDeltaScale, level.absoluteDeltaRatioToMaxAbs)\n          : resolveColorScale(options.shading.neutralScale, level.absoluteDeltaRatioToMaxAbs);\n\n    return {\n      bidColor: fillColor,\n      askColor: fillColor,\n    };\n  }\n\n  const shadingValue = resolveBidAskShadingValue(level, options.shading.bidAskMetric);\n\n  if (options.ladder.bidAskFillMode === 'by-total-volume') {\n    const fillColor = resolveColorScale(options.shading.neutralScale, shadingValue);\n\n    return {\n      bidColor: fillColor,\n      askColor: fillColor,\n    };\n  }\n\n  return {\n    bidColor: resolveColorScale(options.shading.bidScale, shadingValue),\n    askColor: resolveColorScale(options.shading.askScale, shadingValue),\n  };\n}\n\nfunction resolveImbalanceTextDirection(\n  level: FootprintLevelModel,\n  options: FootprintSeriesOptions,\n  side: 'bid' | 'ask',\n): 'positive' | 'negative' | null {\n  if (!options.ladder.highlightImbalanceText && !options.ladder.highlightDiagonalDominance) {\n    return null;\n  }\n\n  if (side === 'ask' && level.imbalanceSide === 'buy') {\n    return 'positive';\n  }\n\n  if (side === 'bid' && level.imbalanceSide === 'sell') {\n    return 'negative';\n  }\n\n  return null;\n}\n\nfunction resolveBidAskTextAppearance(\n  level: FootprintLevelModel,\n  options: FootprintSeriesOptions,\n  side: 'bid' | 'ask',\n  fontSize: number,\n): { color: string; font: string } {\n  const defaultFont = `${fontSize}px ${options.style.fontFamily}`;\n  const defaultColor = side === 'bid' ? options.style.bidTextColor : options.style.askTextColor;\n  const direction = resolveImbalanceTextDirection(level, options, side);\n\n  if (!direction) {\n    return {\n      color: defaultColor,\n      font: defaultFont,\n    };\n  }\n\n  if (options.style.imbalanceMetricStyleKey) {\n    const token = resolveMetricStyleToken(\n      options.style.metricStyles,\n      options.style.imbalanceMetricStyleKey,\n      direction === 'positive' ? 'primary' : 'secondary',\n    );\n    return {\n      color: token.color,\n      font: token.font,\n    };\n  }\n\n  return {\n    color:\n      direction === 'positive'\n        ? options.style.positiveImbalanceTextColor\n        : options.style.negativeImbalanceTextColor,\n    font:\n      direction === 'positive'\n        ? options.style.positiveImbalanceTextFont\n        : options.style.negativeImbalanceTextFont,\n  };\n}\n\nfunction pointOfControlRegions(\n  layout: ReturnType<typeof resolveFootprintBarLayout>,\n  options: FootprintSeriesOptions,\n): FootprintRegion[] {\n  if (options.ladder.textMode === 'bid-ask' && layout.bidArea && layout.askArea) {\n    return [layout.bidArea, layout.separator, layout.askArea].filter(\n      (value): value is FootprintRegion => Boolean(value),\n    );\n  }\n\n  if (layout.singleCellSegments.length > 0) {\n    return layout.singleCellSegments;\n  }\n\n  return [layout.bidArea, layout.askArea].filter((value): value is FootprintRegion =>\n    Boolean(value),\n  );\n}\n\nfunction strokeHorizontalEdge(\n  context: CanvasRenderingContext2D,\n  left: number,\n  right: number,\n  y: number,\n): void {\n  context.beginPath();\n  context.moveTo(left, y);\n  context.lineTo(right, y);\n  context.stroke();\n}\n\nfunction strokeVerticalEdge(\n  context: CanvasRenderingContext2D,\n  x: number,\n  top: number,\n  bottom: number,\n): void {\n  context.beginPath();\n  context.moveTo(x, top);\n  context.lineTo(x, bottom);\n  context.stroke();\n}\n\nfunction drawBidAskSeparator(\n  context: CanvasRenderingContext2D,\n  top: number,\n  height: number,\n  layout: ReturnType<typeof resolveFootprintBarLayout>,\n  options: FootprintSeriesOptions,\n  backgroundColor: string,\n): void {\n  if (\n    options.ladder.separatorMode !== 'letter' ||\n    !layout.separator ||\n    !options.ladder.separatorLabel.trim()\n  ) {\n    return;\n  }\n\n  context.save();\n  if (backgroundColor !== 'transparent') {\n    context.fillStyle = backgroundColor;\n    context.fillRect(layout.separator.left, top, layout.separator.width, height);\n  }\n  context.font = options.style.separatorFont;\n  context.fillStyle = options.style.separatorColor;\n  fillCenteredText(\n    context,\n    options.ladder.separatorLabel,\n    layout.separator.centerX,\n    top + height / 2,\n    options.style.separatorColor,\n  );\n  context.restore();\n}\n\nfunction buildFont(style: FootprintMetricItemOptions['style']): string {\n  if (style.fontShorthand) {\n    return style.fontShorthand;\n  }\n\n  return `${style.fontWeight} ${style.fontSize}px ${style.fontFamily}`.trim();\n}\n\nfunction applyMetricPaletteToken(\n  style: FootprintMetricItemOptions['style'],\n  token: ReturnType<typeof resolveMetricStyleToken>,\n): FootprintMetricItemOptions['style'] {\n  return {\n    ...style,\n    fontShorthand: token.font,\n    borderShorthand: token.border ?? style.borderShorthand,\n    textColor: token.color,\n    positiveTextColor: token.color,\n    negativeTextColor: token.color,\n    neutralTextColor: token.color,\n    backgroundColor: token.backgroundColor ?? style.backgroundColor,\n    paddingX: token.paddingX ?? style.paddingX,\n    paddingY: token.paddingY ?? style.paddingY,\n  };\n}\n\nfunction isPriceMetricValueKey(\n  valueKey: FootprintMetricItemOptions['valueKey'],\n): valueKey is 'open' | 'high' | 'low' | 'close' {\n  return valueKey === 'open' || valueKey === 'high' || valueKey === 'low' || valueKey === 'close';\n}\n\nfunction formatMetricValue(\n  value: number,\n  options: FootprintSeriesOptions,\n  item: FootprintMetricItemOptions,\n): string {\n  if (isPriceMetricValueKey(item.valueKey)) {\n    return formatNumericValue(value, {\n      digits: options.style.priceDecimalDigits,\n      rounding: options.style.priceRounding,\n    });\n  }\n\n  return formatCompactFootprintValue(value, options.style);\n}\n\nfunction metricTextColor(\n  style: FootprintMetricItemOptions['style'],\n  rawValue: number | null,\n): string {\n  if (rawValue === null) {\n    return style.textColor;\n  }\n\n  if (rawValue > 0) {\n    return style.positiveTextColor;\n  }\n\n  if (rawValue < 0) {\n    return style.negativeTextColor;\n  }\n\n  return style.neutralTextColor;\n}\n\nfunction metricLeft(\n  layout: ReturnType<typeof resolveFootprintBarLayout>,\n  width: number,\n  align: FootprintMetricItemOptions['align'],\n): number {\n  if (align === 'left') {\n    return layout.left;\n  }\n\n  if (align === 'right') {\n    return layout.right - width;\n  }\n\n  return layout.left + (layout.width - width) / 2;\n}\n\nfunction metricRawValue(bar: FootprintBarModel, item: FootprintMetricItemOptions): number | null {\n  if (!item.valueKey) {\n    return null;\n  }\n\n  return bar[item.valueKey];\n}\n\nfunction resolveMetricItem(\n  context: CanvasRenderingContext2D,\n  bar: FootprintBarModel,\n  item: FootprintMetricItemOptions,\n  options: FootprintSeriesOptions,\n): ResolvedMetricItem | null {\n  if (!item.visible) {\n    return null;\n  }\n\n  const rawValue = metricRawValue(bar, item);\n  const renderContext = {\n    bar,\n    item,\n    placement: item.placement,\n    rawValue,\n  };\n  const styleOverride = item.styleResolver?.(renderContext);\n\n  if (styleOverride === null || styleOverride?.visible === false) {\n    return null;\n  }\n\n  let style = {\n    ...item.style,\n    ...styleOverride,\n  };\n  if (item.metricStyleKey) {\n    const token = resolveMetricStyleToken(\n      options.style.metricStyles,\n      item.metricStyleKey,\n      resolveMetricStyleVariant(rawValue, item.metricStyleVariant),\n    );\n    style = applyMetricPaletteToken(style, token);\n  }\n  const formattedValue =\n    item.formatter?.(renderContext) ??\n    (rawValue === null ? (item.label ?? null) : formatMetricValue(rawValue, options, item));\n\n  if (formattedValue === null || formattedValue === undefined || formattedValue === '') {\n    return null;\n  }\n\n  const valueText =\n    typeof formattedValue === 'number'\n      ? formatMetricValue(formattedValue, options, item)\n      : formattedValue;\n  const text =\n    item.label && item.formatter === undefined && rawValue !== null\n      ? `${item.label} ${valueText}`\n      : valueText;\n\n  context.save();\n  context.font = buildFont(style);\n  const textWidth = context.measureText(text).width;\n  context.restore();\n\n  return {\n    item,\n    text,\n    rawValue,\n    textColor: metricTextColor(style, rawValue),\n    width: Math.ceil(textWidth + style.paddingX * 2),\n    height: Math.ceil(style.fontSize + style.paddingY * 2),\n    style,\n  };\n}\n\nfunction drawMetricItem(\n  context: CanvasRenderingContext2D,\n  layout: ReturnType<typeof resolveFootprintBarLayout>,\n  metric: ResolvedMetricItem,\n  top: number,\n): void {\n  const left = metricLeft(layout, metric.width, metric.item.align);\n  const centerX = left + metric.width / 2;\n  const centerY = top + metric.height / 2;\n\n  context.save();\n  context.font = buildFont(metric.style);\n\n  if (metric.style.backgroundColor !== 'transparent') {\n    context.fillStyle = metric.style.backgroundColor;\n    context.fillRect(left, top, metric.width, metric.height);\n  }\n\n  const shorthandBorder = parseMetricBorderShorthand(metric.style.borderShorthand);\n  const borderWidth = shorthandBorder.width > 0 ? shorthandBorder.width : metric.style.borderWidth;\n  const borderColor = shorthandBorder.color ?? metric.style.borderColor;\n\n  if (borderWidth > 0) {\n    context.strokeStyle = borderColor;\n    context.lineWidth = borderWidth;\n    context.strokeRect(left, top, metric.width, metric.height);\n  }\n\n  fillCenteredText(context, metric.text, centerX, centerY, metric.textColor);\n  context.restore();\n}\n\nfunction drawSummaryMetrics(\n  context: CanvasRenderingContext2D,\n  layout: ReturnType<typeof resolveFootprintBarLayout>,\n  bar: FootprintBarModel,\n  barTop: number,\n  barBottom: number,\n  options: FootprintSeriesOptions,\n): void {\n  const metrics = options.summary.items\n    .map((item) => resolveMetricItem(context, bar, item, options))\n    .filter((item): item is ResolvedMetricItem => Boolean(item));\n  const topMetrics = metrics.filter((item) => item.item.placement === 'top');\n  const bottomMetrics = metrics.filter((item) => item.item.placement === 'bottom');\n\n  let topCursor = barTop;\n\n  for (const metric of topMetrics) {\n    topCursor -= metric.item.offset + metric.height;\n    drawMetricItem(context, layout, metric, topCursor);\n    topCursor -= options.summary.stackGap + metric.item.minSpacing;\n  }\n\n  let bottomCursor = barBottom;\n\n  for (const metric of bottomMetrics) {\n    bottomCursor += metric.item.offset;\n    drawMetricItem(context, layout, metric, bottomCursor);\n    bottomCursor += metric.height + options.summary.stackGap + metric.item.minSpacing;\n  }\n}\n\nfunction drawBidAskCell(\n  context: CanvasRenderingContext2D,\n  top: number,\n  height: number,\n  layout: ReturnType<typeof resolveFootprintBarLayout>,\n  bar: FootprintBarModel,\n  level: FootprintBarModel['levels'][number],\n  options: FootprintSeriesOptions,\n  density: FootprintDensity,\n  fontSize: number,\n): void {\n  const bidArea = layout.bidArea;\n  const askArea = layout.askArea;\n\n  if (!bidArea || !askArea) {\n    return;\n  }\n\n  const { bidColor, askColor } = resolveBidAskFillColors(level, options);\n  const separatorBackgroundColor =\n    options.ladder.bidAskFillMode === 'by-delta' || bidColor === askColor\n      ? askColor\n      : level.delta >= 0\n        ? askColor\n        : bidColor;\n\n  if (options.ladder.showHeatmap) {\n    context.fillStyle = bidColor;\n    context.fillRect(bidArea.left, top, bidArea.width, height);\n    context.fillStyle = askColor;\n    context.fillRect(askArea.left, top, askArea.width, height);\n  }\n\n  drawImbalanceHighlights(context, top, height, layout, level, options, 'bid-ask');\n  fillPointOfControlRow(context, top, height, layout, level, options);\n  drawRegionBorders(context, top, height, [bidArea, askArea], options);\n  strokePointOfControlRow(context, top, height, layout, level, options);\n  drawBidAskSeparator(context, top, height, layout, options, separatorBackgroundColor);\n\n  const centerY = top + height / 2;\n\n  if (density === 'full') {\n    const bidText = resolveBidAskTextAppearance(level, options, 'bid', fontSize);\n    const askText = resolveBidAskTextAppearance(level, options, 'ask', fontSize);\n\n    context.font = bidText.font;\n    fillCenteredText(\n      context,\n      formatCompactFootprintValue(level.bidVolume, options.style),\n      bidArea.centerX,\n      centerY,\n      bidText.color,\n    );\n\n    context.font = askText.font;\n    fillCenteredText(\n      context,\n      formatCompactFootprintValue(level.askVolume, options.style),\n      askArea.centerX,\n      centerY,\n      askText.color,\n    );\n  } else if (density === 'compact') {\n    context.font = `${fontSize}px ${options.style.fontFamily}`;\n    fillCenteredText(\n      context,\n      formatCompactFootprintValue(level.totalVolume, options.style),\n      layout.singleCellTextCenterX,\n      centerY,\n      options.style.neutralTextColor,\n    );\n  }\n}\n\nfunction drawSingleCell(\n  context: CanvasRenderingContext2D,\n  top: number,\n  height: number,\n  layout: ReturnType<typeof resolveFootprintBarLayout>,\n  level: FootprintBarModel['levels'][number],\n  options: FootprintSeriesOptions,\n  density: FootprintDensity,\n  fontSize: number,\n): void {\n  const regions = layout.singleCellSegments;\n  let fillColor = resolveSingleCellFillColor(level, options);\n  let textColor = options.style.textColor;\n\n  if (options.ladder.textMode === 'delta') {\n    textColor =\n      level.delta >= 0 ? options.style.positiveDeltaColor : options.style.negativeDeltaColor;\n  } else if (options.ladder.textMode === 'total') {\n    textColor = options.style.neutralTextColor;\n  }\n\n  if (options.ladder.showHeatmap) {\n    context.fillStyle = fillColor;\n\n    for (const region of regions) {\n      context.fillRect(region.left, top, region.width, height);\n    }\n  }\n\n  drawImbalanceHighlights(context, top, height, layout, level, options, 'single');\n  fillPointOfControlRow(context, top, height, layout, level, options);\n  drawRegionBorders(context, top, height, regions, options);\n  strokePointOfControlRow(context, top, height, layout, level, options);\n\n  if (density !== 'heatmap') {\n    context.font = `${fontSize}px ${options.style.fontFamily}`;\n    fillCenteredText(\n      context,\n      formatFootprintCellText(level, options.ladder.textMode, options.style),\n      layout.singleCellTextCenterX,\n      top + height / 2,\n      textColor,\n    );\n  }\n}\n\nfunction drawPriceCandle(\n  context: CanvasRenderingContext2D,\n  candle: FootprintRegion | null,\n  model: FootprintBarModel,\n  options: FootprintSeriesOptions,\n  density: FootprintDensity,\n  priceConverter: PriceToCoordinateConverter,\n): void {\n  if (!candle || !options.candle.visible) {\n    return;\n  }\n\n  const openY = priceConverter(model.open);\n  const highY = priceConverter(model.high);\n  const lowY = priceConverter(model.low);\n  const closeY = priceConverter(model.close);\n\n  if (openY === null || highY === null || lowY === null || closeY === null) {\n    return;\n  }\n\n  const candleCenterX = candle.centerX;\n  const bodyTop = Math.min(openY, closeY);\n  const bodyHeight = Math.max(Math.abs(closeY - openY), 1);\n  const bodyWidth = Math.max(Math.min(Math.floor(candle.width * 0.78), candle.width), 1);\n  const bodyLeft = candleCenterX - bodyWidth / 2;\n  const candleColor =\n    model.close >= model.open ? options.style.bullishCandleColor : options.style.bearishCandleColor;\n  const bodyFill =\n    density === 'heatmap' ? withAlpha(candleColor, 0.75) : withAlpha(candleColor, 0.9);\n\n  context.save();\n  if (options.candle.showWicks) {\n    context.strokeStyle = options.style.candleWickColor;\n    context.lineWidth = 1;\n    context.beginPath();\n    context.moveTo(candleCenterX, highY);\n    context.lineTo(candleCenterX, lowY);\n    context.stroke();\n  }\n\n  context.strokeStyle = options.style.candleBorderColor;\n\n  if (bodyHeight <= 1) {\n    context.beginPath();\n    context.moveTo(bodyLeft, bodyTop);\n    context.lineTo(bodyLeft + bodyWidth, bodyTop);\n    context.stroke();\n  } else {\n    context.fillStyle = bodyFill;\n    context.fillRect(bodyLeft, bodyTop, bodyWidth, bodyHeight);\n    context.strokeRect(bodyLeft, bodyTop, bodyWidth, bodyHeight);\n  }\n\n  context.restore();\n}\n\nfunction drawRegionBorders(\n  context: CanvasRenderingContext2D,\n  top: number,\n  height: number,\n  regions: FootprintRegion[],\n  options: FootprintSeriesOptions,\n): void {\n  if (options.ladder.cellBorderWidth <= 0) {\n    return;\n  }\n\n  context.save();\n  context.strokeStyle = options.style.cellBorderColor;\n  context.lineWidth = options.ladder.cellBorderWidth;\n\n  for (const region of regions) {\n    context.strokeRect(region.left, top, region.width, height);\n  }\n\n  context.restore();\n}\n\nfunction drawImbalanceHighlights(\n  context: CanvasRenderingContext2D,\n  top: number,\n  height: number,\n  layout: ReturnType<typeof resolveFootprintBarLayout>,\n  level: FootprintBarModel['levels'][number],\n  options: FootprintSeriesOptions,\n  mode: 'bid-ask' | 'single',\n): void {\n  if (options.ladder.highlightImbalances && level.imbalanceSide !== 'none') {\n    context.save();\n    context.fillStyle =\n      level.imbalanceSide === 'buy'\n        ? options.style.buyImbalanceFillColor\n        : options.style.sellImbalanceFillColor;\n\n    if (mode === 'bid-ask') {\n      const region = level.imbalanceSide === 'buy' ? layout.askArea : layout.bidArea;\n\n      if (region) {\n        context.fillRect(region.left, top, region.width, height);\n      }\n    } else {\n      for (const region of layout.singleCellSegments) {\n        context.fillRect(region.left, top, region.width, height);\n      }\n    }\n\n    context.restore();\n  }\n\n  if (options.ladder.highlightStackedImbalances && level.isStackedImbalance) {\n    context.save();\n    context.fillStyle =\n      level.imbalanceSide === 'buy'\n        ? options.style.stackedBuyImbalanceFillColor\n        : options.style.stackedSellImbalanceFillColor;\n    context.fillRect(layout.left, top, layout.width, height);\n\n    if (options.ladder.stackedImbalanceBorderWidth > 0) {\n      context.strokeStyle = options.style.stackedImbalanceOutline;\n      context.lineWidth = options.ladder.stackedImbalanceBorderWidth;\n      context.strokeRect(layout.left, top, layout.width, height);\n    }\n\n    context.restore();\n  }\n}\n\nfunction fillPointOfControlRow(\n  context: CanvasRenderingContext2D,\n  top: number,\n  height: number,\n  layout: ReturnType<typeof resolveFootprintBarLayout>,\n  level: FootprintBarModel['levels'][number],\n  options: FootprintSeriesOptions,\n): void {\n  if (!options.pointOfControl.visible || !level.isPointOfControl) {\n    return;\n  }\n\n  const regions = pointOfControlRegions(layout, options);\n\n  context.save();\n  context.fillStyle = options.pointOfControl.backgroundColor;\n\n  for (const region of regions) {\n    context.fillRect(region.left, top, region.width, height);\n  }\n\n  context.restore();\n}\n\nfunction strokePointOfControlRow(\n  context: CanvasRenderingContext2D,\n  top: number,\n  height: number,\n  layout: ReturnType<typeof resolveFootprintBarLayout>,\n  level: FootprintBarModel['levels'][number],\n  options: FootprintSeriesOptions,\n): void {\n  if (\n    !options.pointOfControl.visible ||\n    !level.isPointOfControl ||\n    options.pointOfControl.borderWidth <= 0\n  ) {\n    return;\n  }\n\n  const regions = pointOfControlRegions(layout, options);\n  const bottom = top + height;\n\n  context.save();\n  context.strokeStyle = options.pointOfControl.borderColor;\n  context.lineWidth = options.pointOfControl.borderWidth;\n\n  if (options.ladder.textMode === 'bid-ask' && layout.bidArea && layout.askArea) {\n    const left = layout.bidArea.left;\n    const right = layout.askArea.left + layout.askArea.width;\n    strokeHorizontalEdge(context, left, right, top);\n    strokeHorizontalEdge(context, left, right, bottom);\n    strokeVerticalEdge(context, left, top, bottom);\n    strokeVerticalEdge(context, right, top, bottom);\n  } else {\n    for (const region of regions) {\n      context.strokeRect(region.left, top, region.width, height);\n    }\n  }\n\n  context.restore();\n}\n\nfunction drawBarOutline(\n  context: CanvasRenderingContext2D,\n  top: number,\n  height: number,\n  layout: ReturnType<typeof resolveFootprintBarLayout>,\n  options: FootprintSeriesOptions,\n): void {\n  if (options.ladder.borderWidth <= 0) {\n    return;\n  }\n\n  context.save();\n  context.strokeStyle = options.style.ladderBorderColor;\n  context.lineWidth = options.ladder.borderWidth;\n  context.strokeRect(layout.left, top, layout.width, height);\n  context.restore();\n}\n\nfunction resolveRowBounds(\n  model: FootprintBarModel,\n  level: FootprintBarModel['levels'][number],\n  index: number,\n  currentY: number,\n  priceConverter: PriceToCoordinateConverter,\n  fallbackRowHeight: number,\n): { top: number; bottom: number } {\n  if (model.priceStep && model.priceStep > 0) {\n    let upperY = priceConverter(level.price + model.priceStep / 2);\n    let lowerY = priceConverter(level.price - model.priceStep / 2);\n\n    if (upperY === null && lowerY !== null) {\n      upperY = (currentY - (lowerY - currentY)) as Coordinate;\n    }\n\n    if (lowerY === null && upperY !== null) {\n      lowerY = (currentY + (currentY - upperY)) as Coordinate;\n    }\n\n    if (upperY !== null && lowerY !== null) {\n      return {\n        top: Math.min(upperY, lowerY),\n        bottom: Math.max(upperY, lowerY),\n      };\n    }\n  }\n\n  const previousY =\n    index > 0\n      ? (priceConverter(model.levels[index - 1].price) ?? currentY + fallbackRowHeight)\n      : currentY + fallbackRowHeight;\n  const nextY =\n    index < model.levels.length - 1\n      ? (priceConverter(model.levels[index + 1].price) ?? currentY - fallbackRowHeight)\n      : currentY - fallbackRowHeight;\n\n  return {\n    top: Math.min((currentY + nextY) / 2, (currentY + previousY) / 2),\n    bottom: Math.max((currentY + nextY) / 2, (currentY + previousY) / 2),\n  };\n}\n\nexport class FootprintSeriesRenderer implements ICustomSeriesPaneRenderer {\n  public state: FootprintRendererState = {\n    bars: [],\n    barSpacing: 0,\n    options: {} as FootprintSeriesOptions,\n  };\n\n  draw(target: CanvasRenderingTarget2D, priceConverter: PriceToCoordinateConverter): void {\n    target.useBitmapCoordinateSpace(({ context, bitmapSize }) => {\n      context.save();\n      context.setTransform(1, 0, 0, 1, 0, 0);\n      context.clearRect(0, 0, bitmapSize.width, bitmapSize.height);\n      context.restore();\n    });\n\n    target.useMediaCoordinateSpace(({ context, mediaSize }) => {\n      context.save();\n      context.beginPath();\n      context.rect(0, 0, mediaSize.width, mediaSize.height);\n      context.clip();\n      const barWidth = resolveBarWidth(this.state.barSpacing, this.state.options);\n      const barLayout = resolveFootprintBarLayout(0, barWidth, this.state.options);\n      const density = resolveFootprintDensity(this.state.barSpacing);\n      const fontTargetWidth = Math.max(\n        barLayout.bidArea?.width ?? 0,\n        barLayout.askArea?.width ?? 0,\n        ...barLayout.singleCellSegments.map((segment) => segment.width),\n      );\n      const fontSize = resolveFootprintFontSize(this.state.options.style.fontSize, fontTargetWidth);\n\n      for (const entry of this.state.bars) {\n        const { model } = entry;\n        if (!model.levels.length) {\n          continue;\n        }\n\n        const layout = resolveFootprintBarLayout(entry.item.x, barWidth, this.state.options);\n        if (layout.right <= 0 || layout.left >= mediaSize.width) {\n          continue;\n        }\n        let barTop = Number.POSITIVE_INFINITY;\n        let barBottom = Number.NEGATIVE_INFINITY;\n\n        for (let index = 0; index < model.levels.length; index += 1) {\n          const level = model.levels[index];\n          const currentY = priceConverter(level.price);\n\n          if (currentY === null) {\n            continue;\n          }\n\n          const { top, bottom } = resolveRowBounds(\n            model,\n            level,\n            index,\n            currentY,\n            priceConverter,\n            optionsRowHeight(this.state.options),\n          );\n          const height = Math.max(bottom - top, 1);\n          barTop = Math.min(barTop, top);\n          barBottom = Math.max(barBottom, bottom);\n\n          if (this.state.options.ladder.textMode === 'bid-ask') {\n            drawBidAskCell(\n              context,\n              top,\n              height,\n              layout,\n              model,\n              level,\n              this.state.options,\n              density,\n              fontSize,\n            );\n          } else {\n            drawSingleCell(\n              context,\n              top,\n              height,\n              layout,\n              level,\n              this.state.options,\n              density,\n              fontSize,\n            );\n          }\n        }\n\n        if (Number.isFinite(barTop) && Number.isFinite(barBottom)) {\n          drawBarOutline(\n            context,\n            barTop,\n            Math.max(barBottom - barTop, 1),\n            layout,\n            this.state.options,\n          );\n        }\n\n        drawPriceCandle(context, layout.candle, model, this.state.options, density, priceConverter);\n\n        if (density !== 'heatmap' && Number.isFinite(barTop) && Number.isFinite(barBottom)) {\n          drawSummaryMetrics(context, layout, model, barTop, barBottom, this.state.options);\n        }\n      }\n\n      context.restore();\n    });\n  }\n}\n\nfunction optionsRowHeight(options: FootprintSeriesOptions): number {\n  return options.ladder.rowHeight;\n}\n","import type {\n  CustomSeriesWhitespaceData,\n  ICustomSeriesPaneView,\n  PaneRendererCustomData,\n} from 'lightweight-charts';\n\nimport type { OrderFlowBar, TimeValue } from '../../models/contracts';\nimport type { FootprintSeriesOptions, FootprintSeriesPartialOptions } from '../../models/options';\nimport { mergeFootprintSeriesOptions } from '../../models/options';\nimport { buildFootprintBarModel } from '../../calculations/footprint/buildFootprintBarModel';\nimport { FootprintSeriesRenderer } from './FootprintSeriesRenderer';\n\nfunction isItemVisible(\n  logicalIndex: number,\n  visibleRange: { from: number; to: number } | null,\n  conflationFactor: number,\n): boolean {\n  if (!visibleRange) {\n    return true;\n  }\n\n  const logicalBuffer = Math.max(0, conflationFactor / 2 - 0.5);\n\n  return (\n    logicalIndex >= visibleRange.from - logicalBuffer &&\n    logicalIndex <= visibleRange.to + logicalBuffer\n  );\n}\n\nclass FootprintSeriesView implements ICustomSeriesPaneView<\n  TimeValue,\n  OrderFlowBar,\n  FootprintSeriesOptions\n> {\n  private readonly rendererInstance = new FootprintSeriesRenderer();\n  private readonly initialOptions: FootprintSeriesOptions;\n\n  constructor(options?: FootprintSeriesPartialOptions) {\n    this.initialOptions = mergeFootprintSeriesOptions(options);\n    this.rendererInstance.state.options = this.initialOptions;\n  }\n\n  renderer() {\n    return this.rendererInstance;\n  }\n\n  update(\n    data: PaneRendererCustomData<TimeValue, OrderFlowBar>,\n    seriesOptions: FootprintSeriesOptions,\n  ): void {\n    const visibleBars = data.bars.filter((item) =>\n      isItemVisible(item.time, data.visibleRange, data.conflationFactor),\n    );\n\n    this.rendererInstance.state = {\n      bars: visibleBars.map((item) => ({\n        item,\n        model: buildFootprintBarModel(item.originalData, seriesOptions),\n      })),\n      barSpacing: data.barSpacing * data.conflationFactor,\n      options: mergeFootprintSeriesOptions(seriesOptions),\n    };\n  }\n\n  priceValueBuilder(plotRow: OrderFlowBar): number[] {\n    return [plotRow.high, plotRow.low, plotRow.close];\n  }\n\n  isWhitespace(\n    data: OrderFlowBar | CustomSeriesWhitespaceData<TimeValue>,\n  ): data is CustomSeriesWhitespaceData<TimeValue> {\n    return !('levels' in data);\n  }\n\n  defaultOptions(): FootprintSeriesOptions {\n    return this.initialOptions;\n  }\n}\n\nexport function createFootprintSeries(\n  options?: FootprintSeriesPartialOptions,\n): ICustomSeriesPaneView<TimeValue, OrderFlowBar, FootprintSeriesOptions> {\n  return new FootprintSeriesView(options);\n}\n","import type { ICustomSeriesPaneView } from 'lightweight-charts';\n\nimport type { OrderFlowBar, TimeValue } from '../../models/contracts';\nimport type { VolumeFootprintOptions, VolumeFootprintPartialOptions } from '../../models/options';\nimport { DEFAULT_VOLUME_FOOTPRINT_OPTIONS } from '../../models/options';\nimport { createFootprintSeries } from './createFootprintSeries';\n\nexport function createVolumeFootprintSeries(\n  options?: VolumeFootprintPartialOptions,\n): ICustomSeriesPaneView<TimeValue, OrderFlowBar, VolumeFootprintOptions> {\n  return createFootprintSeries({\n    ...DEFAULT_VOLUME_FOOTPRINT_OPTIONS,\n    ...options,\n    ladder: {\n      ...DEFAULT_VOLUME_FOOTPRINT_OPTIONS.ladder,\n      ...options?.ladder,\n      textMode: options?.ladder?.textMode ?? 'total',\n    },\n  }) as ICustomSeriesPaneView<TimeValue, OrderFlowBar, VolumeFootprintOptions>;\n}\n","import type {\n  IPrimitivePaneRenderer,\n  IPrimitivePaneView,\n  ISeriesPrimitive,\n  SeriesAttachedParameter,\n} from 'lightweight-charts';\nimport type { CanvasRenderingTarget2D } from 'fancy-canvas';\n\nimport type { OrderFlowBar, TimeValue } from '../../models/contracts';\nimport type { ProfileModel } from '../../models/studies';\nimport type { VolumeProfileOptions, VolumeProfilePartialOptions } from '../../models/options';\nimport { mergeVolumeProfileOptions } from '../../models/options';\nimport { buildVisibleRangeProfile } from '../../calculations/profile/buildVisibleRangeProfile';\nimport { resolveProfileLevelWidth } from '../shared/renderModel';\n\ninterface VolumeProfilePrimitiveConfig {\n  bars: OrderFlowBar[];\n  options?: VolumeProfilePartialOptions;\n}\n\ninterface VolumeProfileRenderState {\n  profile: ProfileModel | null;\n  options: VolumeProfileOptions;\n}\n\nclass VolumeProfilePaneRenderer implements IPrimitivePaneRenderer {\n  constructor(\n    private readonly getState: () => VolumeProfileRenderState,\n    private readonly getSeries: () => SeriesAttachedParameter<TimeValue, 'Custom'> | undefined,\n  ) {}\n\n  draw(target: CanvasRenderingTarget2D): void {\n    const attached = this.getSeries();\n    const state = this.getState();\n\n    if (!attached || !state.profile?.levels.length) {\n      return;\n    }\n    const profile = state.profile;\n\n    target.useMediaCoordinateSpace(({ context, mediaSize }) => {\n      const profileWidth = mediaSize.width * state.options.widthRatio;\n      const startX = state.options.align === 'left' ? 0 : mediaSize.width - profileWidth;\n\n      context.save();\n\n      for (let index = 0; index < profile.levels.length; index += 1) {\n        const level = profile.levels[index];\n        const currentY = attached.series.priceToCoordinate(level.price);\n\n        if (currentY === null) {\n          continue;\n        }\n\n        const previousY =\n          index > 0\n            ? (attached.series.priceToCoordinate(profile.levels[index - 1].price) ?? currentY + 6)\n            : currentY + 6;\n        const nextY =\n          index < profile.levels.length - 1\n            ? (attached.series.priceToCoordinate(profile.levels[index + 1].price) ?? currentY - 6)\n            : currentY - 6;\n        const top = Math.min((currentY + nextY) / 2, (currentY + previousY) / 2);\n        const bottom = Math.max((currentY + nextY) / 2, (currentY + previousY) / 2);\n        const height = Math.max(bottom - top, 1);\n        const width = resolveProfileLevelWidth(profile, profileWidth, level.totalVolume);\n        const x = state.options.align === 'left' ? startX : mediaSize.width - width;\n        const bidRatio = level.totalVolume ? level.bidVolume / level.totalVolume : 0;\n        const bidWidth = width * bidRatio;\n        const askWidth = width - bidWidth;\n\n        if (\n          state.options.showValueArea &&\n          profile.valueArea &&\n          level.price >= profile.valueArea.low &&\n          level.price <= profile.valueArea.high\n        ) {\n          context.fillStyle = state.options.style.valueAreaColor;\n          context.fillRect(startX, top, profileWidth, height);\n        }\n\n        context.fillStyle = state.options.style.profileBidColor;\n        context.fillRect(x, top, bidWidth, height);\n        context.fillStyle = state.options.style.profileAskColor;\n        context.fillRect(x + bidWidth, top, askWidth, height);\n\n        if (state.options.showPointOfControl && level.price === profile.pointOfControl) {\n          context.save();\n          context.fillStyle = state.options.pointOfControl.backgroundColor;\n          context.fillRect(startX, top, profileWidth, height);\n          context.strokeStyle = state.options.pointOfControl.borderColor;\n          context.lineWidth = state.options.pointOfControl.lineWidth;\n          context.strokeRect(startX, top, profileWidth, height);\n          context.restore();\n        }\n      }\n\n      context.restore();\n    });\n  }\n}\n\nexport class VolumeProfilePrimitive implements ISeriesPrimitive<TimeValue> {\n  private readonly options: VolumeProfileOptions;\n  private readonly paneRenderer: VolumeProfilePaneRenderer;\n  private readonly paneView: IPrimitivePaneView;\n  private attachedParam?: SeriesAttachedParameter<TimeValue, 'Custom'>;\n  private bars: OrderFlowBar[];\n  private renderState: VolumeProfileRenderState;\n\n  constructor(config: VolumeProfilePrimitiveConfig) {\n    this.options = mergeVolumeProfileOptions(config.options);\n    this.bars = config.bars;\n    this.renderState = {\n      profile: null,\n      options: this.options,\n    };\n    this.paneRenderer = new VolumeProfilePaneRenderer(\n      () => this.renderState,\n      () => this.attachedParam,\n    );\n    this.paneView = {\n      zOrder: () => 'top',\n      renderer: () => this.paneRenderer,\n    };\n  }\n\n  attached(param: SeriesAttachedParameter<TimeValue, 'Custom'>): void {\n    this.attachedParam = param;\n    this.updateAllViews();\n  }\n\n  detached(): void {\n    this.attachedParam = undefined;\n  }\n\n  paneViews(): readonly IPrimitivePaneView[] {\n    return [this.paneView];\n  }\n\n  updateAllViews(): void {\n    if (!this.attachedParam) {\n      return;\n    }\n\n    const scope = this.options.scope;\n    if (scope.kind === 'session') {\n      return;\n    }\n\n    const visibleRange =\n      scope.kind === 'fixed-range'\n        ? scope\n        : (this.attachedParam.chart.timeScale().getVisibleRange() ?? undefined);\n    this.renderState = {\n      ...this.renderState,\n      profile: buildVisibleRangeProfile(\n        this.bars,\n        visibleRange?.from,\n        visibleRange?.to,\n        this.options.valueAreaPercent,\n      ),\n    };\n  }\n\n  setData(bars: OrderFlowBar[]): void {\n    this.bars = bars;\n    this.attachedParam?.requestUpdate();\n  }\n}\n\nexport function createVolumeProfilePrimitive(\n  config: VolumeProfilePrimitiveConfig,\n): VolumeProfilePrimitive {\n  return new VolumeProfilePrimitive(config);\n}\n","import type {\n  IPrimitivePaneRenderer,\n  IPrimitivePaneView,\n  ISeriesPrimitive,\n  SeriesAttachedParameter,\n} from 'lightweight-charts';\nimport type { CanvasRenderingTarget2D } from 'fancy-canvas';\n\nimport type { OrderFlowBar, TimeValue } from '../../models/contracts';\nimport type { ProfileModel } from '../../models/studies';\nimport type {\n  SessionVolumeProfileOptions,\n  SessionVolumeProfilePartialOptions,\n} from '../../models/options';\nimport { mergeSessionVolumeProfileOptions } from '../../models/options';\nimport { buildSessionProfiles } from '../../calculations/profile/buildSessionProfiles';\nimport { resolveProfileLevelWidth } from '../shared/renderModel';\n\ninterface SessionProfilePrimitiveConfig {\n  bars: OrderFlowBar[];\n  options?: SessionVolumeProfilePartialOptions;\n}\n\ninterface SessionProfileRenderState {\n  profiles: ProfileModel[];\n  options: SessionVolumeProfileOptions;\n}\n\nclass SessionProfileRenderer implements IPrimitivePaneRenderer {\n  constructor(\n    private readonly getState: () => SessionProfileRenderState,\n    private readonly getAttached: () => SeriesAttachedParameter<TimeValue, 'Custom'> | undefined,\n  ) {}\n\n  draw(target: CanvasRenderingTarget2D): void {\n    const attached = this.getAttached();\n    const state = this.getState();\n\n    if (!attached || !state.profiles.length) {\n      return;\n    }\n\n    target.useMediaCoordinateSpace(({ context }) => {\n      context.save();\n      context.font = `11px Inter, Arial, sans-serif`;\n\n      for (const profile of state.profiles) {\n        if (!profile.levels.length || !profile.fromTime || !profile.toTime) {\n          continue;\n        }\n\n        const fromX = attached.chart.timeScale().timeToCoordinate(profile.fromTime);\n        const toX = attached.chart.timeScale().timeToCoordinate(profile.toTime);\n\n        if (fromX === null || toX === null) {\n          continue;\n        }\n\n        const sessionWidth = Math.max(toX - fromX, 24);\n        const profileWidth = sessionWidth * state.options.widthRatio;\n        const startX = state.options.align === 'left' ? fromX : toX - profileWidth;\n\n        for (let index = 0; index < profile.levels.length; index += 1) {\n          const level = profile.levels[index];\n          const currentY = attached.series.priceToCoordinate(level.price);\n\n          if (currentY === null) {\n            continue;\n          }\n\n          const previousY =\n            index > 0\n              ? (attached.series.priceToCoordinate(profile.levels[index - 1].price) ?? currentY + 6)\n              : currentY + 6;\n          const nextY =\n            index < profile.levels.length - 1\n              ? (attached.series.priceToCoordinate(profile.levels[index + 1].price) ?? currentY - 6)\n              : currentY - 6;\n          const top = Math.min((currentY + nextY) / 2, (currentY + previousY) / 2);\n          const bottom = Math.max((currentY + nextY) / 2, (currentY + previousY) / 2);\n          const height = Math.max(bottom - top, 1);\n          const width = resolveProfileLevelWidth(profile, profileWidth, level.totalVolume);\n          const x = state.options.align === 'left' ? startX : toX - width;\n          const bidRatio = level.totalVolume ? level.bidVolume / level.totalVolume : 0;\n          const bidWidth = width * bidRatio;\n          const askWidth = width - bidWidth;\n\n          if (\n            state.options.showValueArea &&\n            profile.valueArea &&\n            level.price >= profile.valueArea.low &&\n            level.price <= profile.valueArea.high\n          ) {\n            context.fillStyle = state.options.style.valueAreaColor;\n            context.fillRect(startX, top, profileWidth, height);\n          }\n\n          context.fillStyle = state.options.style.profileBidColor;\n          context.fillRect(x, top, bidWidth, height);\n          context.fillStyle = state.options.style.profileAskColor;\n          context.fillRect(x + bidWidth, top, askWidth, height);\n\n          if (state.options.showPointOfControl && level.price === profile.pointOfControl) {\n            context.save();\n            context.fillStyle = state.options.pointOfControl.backgroundColor;\n            context.fillRect(startX, top, profileWidth, height);\n            context.strokeStyle = state.options.pointOfControl.borderColor;\n            context.lineWidth = state.options.pointOfControl.lineWidth;\n            context.strokeRect(startX, top, profileWidth, height);\n            context.restore();\n          }\n        }\n\n        if (state.options.showSessionLabels) {\n          context.save();\n          context.fillStyle = state.options.style.sessionLabelColor;\n          context.textAlign = 'center';\n          context.textBaseline = 'top';\n          context.fillText(profile.label ?? profile.scopeId, (fromX + toX) / 2, 4);\n          context.restore();\n        }\n      }\n\n      context.restore();\n    });\n  }\n}\n\nexport class SessionVolumeProfilePrimitive implements ISeriesPrimitive<TimeValue> {\n  private readonly options: SessionVolumeProfileOptions;\n  private readonly paneRenderer: SessionProfileRenderer;\n  private readonly paneView: IPrimitivePaneView;\n  private attachedParam?: SeriesAttachedParameter<TimeValue, 'Custom'>;\n  private bars: OrderFlowBar[];\n  private renderState: SessionProfileRenderState;\n\n  constructor(config: SessionProfilePrimitiveConfig) {\n    this.options = mergeSessionVolumeProfileOptions(config.options);\n    this.bars = config.bars;\n    this.renderState = {\n      profiles: [],\n      options: this.options,\n    };\n    this.paneRenderer = new SessionProfileRenderer(\n      () => this.renderState,\n      () => this.attachedParam,\n    );\n    this.paneView = {\n      zOrder: () => 'bottom',\n      renderer: () => this.paneRenderer,\n    };\n  }\n\n  attached(param: SeriesAttachedParameter<TimeValue, 'Custom'>): void {\n    this.attachedParam = param;\n    this.updateAllViews();\n  }\n\n  detached(): void {\n    this.attachedParam = undefined;\n  }\n\n  paneViews(): readonly IPrimitivePaneView[] {\n    return [this.paneView];\n  }\n\n  updateAllViews(): void {\n    const profiles = buildSessionProfiles(this.bars, this.options.valueAreaPercent);\n    const sessionScope = this.options.scope.kind === 'session' ? this.options.scope : undefined;\n    const filteredProfiles = sessionScope?.sessionIds?.length\n      ? profiles.filter((profile) => sessionScope.sessionIds!.includes(profile.scopeId))\n      : profiles;\n\n    this.renderState = {\n      ...this.renderState,\n      profiles: filteredProfiles,\n    };\n  }\n\n  setData(bars: OrderFlowBar[]): void {\n    this.bars = bars;\n    this.attachedParam?.requestUpdate();\n  }\n}\n\nexport function createSessionVolumeProfilePrimitive(\n  config: SessionProfilePrimitiveConfig,\n): SessionVolumeProfilePrimitive {\n  return new SessionVolumeProfilePrimitive(config);\n}\n","import type {\n  Coordinate,\n  IPrimitivePaneRenderer,\n  IPrimitivePaneView,\n  ISeriesPrimitive,\n  SeriesAttachedParameter,\n} from 'lightweight-charts';\nimport type { CanvasRenderingTarget2D } from 'fancy-canvas';\n\nimport type { TimeValue } from '../../models/contracts';\nimport type { MetricStyleToken } from '../../models/options';\nimport { parseMetricBorderShorthand } from '../../utils/metricStylePalette';\nimport { fillCenteredText } from '../shared/canvas';\n\nexport interface SeriesMetricPrimitiveItem {\n  id: string;\n  text: string;\n  placement?: 'above' | 'below';\n  offset?: number;\n  orientation?: 'horizontal' | 'vertical';\n  style: MetricStyleToken;\n}\n\nexport interface SeriesMetricPrimitiveDatum {\n  time: TimeValue;\n  anchorPrice: number;\n  items: SeriesMetricPrimitiveItem[];\n}\n\ninterface SeriesMetricPrimitiveConfig {\n  data: SeriesMetricPrimitiveDatum[];\n}\n\nclass SeriesMetricRenderer implements IPrimitivePaneRenderer {\n  constructor(\n    private readonly getState: () => { data: SeriesMetricPrimitiveDatum[] },\n    private readonly getAttached: () =>\n      | SeriesAttachedParameter<TimeValue, 'Candlestick'>\n      | undefined,\n  ) {}\n\n  draw(target: CanvasRenderingTarget2D): void {\n    const attached = this.getAttached();\n    const state = this.getState();\n\n    if (!attached || !state.data.length) {\n      return;\n    }\n\n    target.useMediaCoordinateSpace(({ context }) => {\n      context.save();\n\n      for (const point of state.data) {\n        const x = attached.chart.timeScale().timeToCoordinate(point.time);\n        const y = attached.series.priceToCoordinate(point.anchorPrice);\n\n        if (x === null || y === null) {\n          continue;\n        }\n\n        const aboveItems = point.items.filter((item) => item.placement === 'above');\n        const belowItems = point.items.filter((item) => item.placement !== 'above');\n\n        let aboveCursor = y as Coordinate;\n\n        for (let index = 0; index < aboveItems.length; index += 1) {\n          const item = aboveItems[index];\n          const badge = measureMetricBadge(context, item);\n          aboveCursor = (aboveCursor - ((item.offset ?? 4) + badge.height)) as Coordinate;\n          drawMetricBadge(context, x, aboveCursor, badge, item);\n        }\n\n        let belowCursor = y as Coordinate;\n\n        for (let index = 0; index < belowItems.length; index += 1) {\n          const item = belowItems[index];\n          const badge = measureMetricBadge(context, item);\n          belowCursor = (belowCursor + (item.offset ?? 4)) as Coordinate;\n          drawMetricBadge(context, x, belowCursor, badge, item);\n          belowCursor = (belowCursor + badge.height) as Coordinate;\n        }\n      }\n\n      context.restore();\n    });\n  }\n}\n\ninterface MetricBadgeMeasurement {\n  width: number;\n  height: number;\n  innerWidth: number;\n  innerHeight: number;\n}\n\nfunction measureMetricBadge(\n  context: CanvasRenderingContext2D,\n  item: SeriesMetricPrimitiveItem,\n): MetricBadgeMeasurement {\n  context.font = item.style.font;\n  const textWidth = context.measureText(item.text).width;\n  const paddingX = item.style.paddingX ?? 0;\n  const paddingY = item.style.paddingY ?? 0;\n  const textHeight = Math.ceil(\n    Math.max(\n      12,\n      context.measureText('M').actualBoundingBoxAscent +\n        context.measureText('M').actualBoundingBoxDescent,\n    ),\n  );\n  const innerWidth = Math.ceil(textWidth + paddingX * 2);\n  const innerHeight = Math.ceil(textHeight + paddingY * 2);\n\n  if (item.orientation === 'vertical') {\n    return {\n      width: innerHeight,\n      height: innerWidth,\n      innerWidth,\n      innerHeight,\n    };\n  }\n\n  return {\n    width: innerWidth,\n    height: innerHeight,\n    innerWidth,\n    innerHeight,\n  };\n}\n\nfunction drawMetricBadge(\n  context: CanvasRenderingContext2D,\n  centerX: number,\n  top: number,\n  badge: MetricBadgeMeasurement,\n  item: SeriesMetricPrimitiveItem,\n): void {\n  const left = centerX - badge.width / 2;\n  const border = parseMetricBorderShorthand(item.style.border);\n\n  if (item.orientation === 'vertical') {\n    const centerY = top + badge.height / 2;\n\n    context.save();\n    context.translate(centerX, centerY);\n    context.rotate(-Math.PI / 2);\n\n    if (item.style.backgroundColor && item.style.backgroundColor !== 'transparent') {\n      context.fillStyle = item.style.backgroundColor;\n      context.fillRect(\n        -badge.innerWidth / 2,\n        -badge.innerHeight / 2,\n        badge.innerWidth,\n        badge.innerHeight,\n      );\n    }\n\n    if (border.width > 0 && border.color) {\n      context.strokeStyle = border.color;\n      context.lineWidth = border.width;\n      context.strokeRect(\n        -badge.innerWidth / 2,\n        -badge.innerHeight / 2,\n        badge.innerWidth,\n        badge.innerHeight,\n      );\n    }\n\n    fillCenteredText(context, item.text, 0, 0, item.style.color);\n    context.restore();\n    return;\n  }\n\n  if (item.style.backgroundColor && item.style.backgroundColor !== 'transparent') {\n    context.fillStyle = item.style.backgroundColor;\n    context.fillRect(left, top, badge.width, badge.height);\n  }\n\n  if (border.width > 0 && border.color) {\n    context.strokeStyle = border.color;\n    context.lineWidth = border.width;\n    context.strokeRect(left, top, badge.width, badge.height);\n  }\n\n  fillCenteredText(context, item.text, centerX, top + badge.height / 2, item.style.color);\n}\n\nexport class SeriesMetricPrimitive implements ISeriesPrimitive<TimeValue> {\n  private readonly paneView: IPrimitivePaneView;\n  private readonly renderer: SeriesMetricRenderer;\n  private attachedParam?: SeriesAttachedParameter<TimeValue, 'Candlestick'>;\n  private data: SeriesMetricPrimitiveDatum[];\n\n  constructor(config: SeriesMetricPrimitiveConfig) {\n    this.data = config.data;\n    this.renderer = new SeriesMetricRenderer(\n      () => ({\n        data: this.data,\n      }),\n      () => this.attachedParam,\n    );\n    this.paneView = {\n      zOrder: () => 'top',\n      renderer: () => this.renderer,\n    };\n  }\n\n  attached(param: SeriesAttachedParameter<TimeValue, 'Candlestick'>): void {\n    this.attachedParam = param;\n    this.updateAllViews();\n  }\n\n  detached(): void {\n    this.attachedParam = undefined;\n  }\n\n  paneViews(): readonly IPrimitivePaneView[] {\n    return [this.paneView];\n  }\n\n  updateAllViews(): void {}\n\n  setData(data: SeriesMetricPrimitiveDatum[]): void {\n    this.data = data;\n    this.attachedParam?.requestUpdate();\n  }\n}\n\nexport function createSeriesMetricPrimitive(\n  config: SeriesMetricPrimitiveConfig,\n): SeriesMetricPrimitive {\n  return new SeriesMetricPrimitive(config);\n}\n","import type { IChartApi, ISeriesApi, Time } from 'lightweight-charts';\n\nexport function safeRemoveSeries(\n  chart: IChartApi,\n  series: ISeriesApi<any, Time> | null | undefined,\n): void {\n  if (!series) {\n    return;\n  }\n\n  try {\n    chart.removeSeries(series);\n  } catch {\n    // Ignore stale-series removals during chart teardown.\n  }\n}\n","import {\n  LineSeries,\n  type IChartApi,\n  type ISeriesApi,\n  type LineSeriesPartialOptions,\n} from 'lightweight-charts';\n\nimport type { OrderFlowBar, OrderFlowPatch, TimeValue } from '../../models/contracts';\nimport type { VwapOptions } from '../../models/options';\nimport { mergeVwapOptions } from '../../models/options';\nimport { applyOrderFlowPatch } from '../../adapters/normalize/applyOrderFlowPatch';\nimport { computeVwapSeriesData } from '../../calculations/vwap/computeVwapSeriesData';\nimport { safeRemoveSeries } from '../../utils/lightweightCharts';\n\nexport interface VwapController {\n  series: ISeriesApi<'Line', TimeValue>;\n  setData(bars: OrderFlowBar[]): void;\n  applyPatch(patch: OrderFlowPatch): void;\n  destroy(): void;\n}\n\nexport interface CreateVwapControllerConfig {\n  chart: IChartApi;\n  bars: OrderFlowBar[];\n  options?: Partial<VwapOptions>;\n  lineOptions?: LineSeriesPartialOptions;\n  paneIndex?: number;\n}\n\nexport function createVwapController(config: CreateVwapControllerConfig): VwapController {\n  const options = mergeVwapOptions(config.options);\n  let bars = [...config.bars];\n  const series = config.chart.addSeries(\n    LineSeries,\n    {\n      color: options.color,\n      lineWidth: options.lineWidth,\n      ...config.lineOptions,\n    },\n    config.paneIndex,\n  );\n\n  const sync = () => {\n    series.setData(computeVwapSeriesData(bars, options));\n  };\n\n  sync();\n\n  return {\n    series,\n    setData(nextBars) {\n      bars = [...nextBars];\n      sync();\n    },\n    applyPatch(patch) {\n      bars = applyOrderFlowPatch(bars, patch);\n      sync();\n    },\n    destroy() {\n      safeRemoveSeries(config.chart, series);\n    },\n  };\n}\n","import type {\n  InstrumentContext,\n  OrderFlowBar,\n  OrderFlowPatch,\n  OrderFlowTickStreamUpdate,\n  PriceLevelVolume,\n  QuoteTick,\n  SessionDefinition,\n  TimeValue,\n  TradeTick,\n} from '../models/contracts';\nimport { applyOrderFlowPatch } from '../adapters/normalize/applyOrderFlowPatch';\nimport { normalizeBars } from '../adapters/normalize/normalizeBatch';\nimport { inferPricePrecision, roundToPriceStep } from '../utils/priceStep';\n\ntype ResolvedTradeSide = 'buy' | 'sell';\ntype TradeClassificationSource = 'explicit-side' | 'quote' | 'tick-rule' | 'carry-forward';\n\ninterface MutableBarState {\n  bar: OrderFlowBar;\n  levels: Map<number, PriceLevelVolume>;\n  vwapNumerator: number;\n}\n\nexport interface CreateOrderFlowTickStreamControllerConfig {\n  instrument: InstrumentContext;\n  intervalSeconds: number;\n  sessions?: SessionDefinition[];\n  deriveSessions?: boolean;\n}\n\nexport interface OrderFlowTickStreamResult {\n  bars: OrderFlowBar[];\n  patches: OrderFlowPatch[];\n  streamActive: boolean;\n}\n\nexport interface OrderFlowTickStreamController {\n  push(update: OrderFlowTickStreamUpdate): OrderFlowTickStreamResult;\n  getBars(): OrderFlowBar[];\n  reset(): void;\n}\n\nexport interface BuildOrderFlowBarsFromTicksInput extends CreateOrderFlowTickStreamControllerConfig {\n  trades?: TradeTick[];\n  quotes?: QuoteTick[];\n}\n\nfunction resolvePricePrecision(instrument: InstrumentContext): number {\n  if (Number.isFinite(instrument.pricePrecision) && instrument.pricePrecision >= 0) {\n    return instrument.pricePrecision;\n  }\n\n  return inferPricePrecision(instrument.tickSize);\n}\n\nfunction bucketTradeTime(unixSeconds: number, intervalSeconds: number): number {\n  return Math.floor(unixSeconds / intervalSeconds) * intervalSeconds;\n}\n\nfunction deriveSessionId(unixSeconds: number, timezone: string): string {\n  return new Intl.DateTimeFormat('en-CA', {\n    timeZone: timezone || 'UTC',\n    year: 'numeric',\n    month: '2-digit',\n    day: '2-digit',\n  }).format(new Date(unixSeconds * 1000));\n}\n\nfunction buildSortedEvents(update: OrderFlowTickStreamUpdate) {\n  return [\n    ...(update.quotes ?? []).map((tick) => ({ kind: 'quote' as const, tick })),\n    ...(update.trades ?? []).map((tick) => ({ kind: 'trade' as const, tick })),\n  ].sort((left, right) => {\n    if (left.tick.time !== right.tick.time) {\n      return left.tick.time - right.tick.time;\n    }\n\n    if (left.kind === right.kind) {\n      return 0;\n    }\n\n    return left.kind === 'quote' ? -1 : 1;\n  });\n}\n\nfunction resolveTradeSide(\n  trade: TradeTick,\n  latestQuote: QuoteTick | null,\n  previousTradePrice: number | null,\n  previousResolvedSide: ResolvedTradeSide,\n): {\n  side: ResolvedTradeSide;\n  source: TradeClassificationSource;\n} {\n  if (trade.side === 'buy' || trade.side === 'sell') {\n    return {\n      side: trade.side,\n      source: 'explicit-side',\n    };\n  }\n\n  if (latestQuote) {\n    if (trade.price >= latestQuote.askPrice) {\n      return {\n        side: 'buy',\n        source: 'quote',\n      };\n    }\n\n    if (trade.price <= latestQuote.bidPrice) {\n      return {\n        side: 'sell',\n        source: 'quote',\n      };\n    }\n  }\n\n  if (previousTradePrice !== null) {\n    if (trade.price > previousTradePrice) {\n      return {\n        side: 'buy',\n        source: 'tick-rule',\n      };\n    }\n\n    if (trade.price < previousTradePrice) {\n      return {\n        side: 'sell',\n        source: 'tick-rule',\n      };\n    }\n  }\n\n  return {\n    side: previousResolvedSide,\n    source: 'carry-forward',\n  };\n}\n\nfunction finalizeBarState(\n  state: MutableBarState,\n  sessions?: SessionDefinition[],\n  deriveSessions = true,\n): OrderFlowBar {\n  const totalVolume =\n    state.bar.totalVolume ??\n    Array.from(state.levels.values()).reduce(\n      (sum, level) => sum + (level.totalVolume ?? level.bidVolume + level.askVolume),\n      0,\n    );\n  const delta =\n    state.bar.delta ??\n    Array.from(state.levels.values()).reduce(\n      (sum, level) => sum + (level.delta ?? level.askVolume - level.bidVolume),\n      0,\n    );\n  const bidVolume =\n    state.bar.bidVolume ??\n    Array.from(state.levels.values()).reduce((sum, level) => sum + level.bidVolume, 0);\n  const askVolume =\n    state.bar.askVolume ??\n    Array.from(state.levels.values()).reduce((sum, level) => sum + level.askVolume, 0);\n  const tradeCountRaw =\n    state.bar.tradeCount ??\n    Array.from(state.levels.values()).reduce((sum, level) => sum + (level.tradeCount ?? 0), 0);\n  const tradeCount = tradeCountRaw > 0 ? tradeCountRaw : undefined;\n  const sortedLevels = [...state.levels.values()].sort((left, right) => left.price - right.price);\n  let pocPrice: number | undefined;\n  let pocVolume = -1;\n\n  for (const level of sortedLevels) {\n    const levelVolume = level.totalVolume ?? level.bidVolume + level.askVolume;\n    if (levelVolume > pocVolume) {\n      pocPrice = level.price;\n      pocVolume = levelVolume;\n    }\n  }\n\n  const bar: OrderFlowBar = {\n    ...state.bar,\n    levels: sortedLevels,\n    totalVolume,\n    delta,\n    bidVolume,\n    askVolume,\n    tradeCount,\n    vwap: totalVolume > 0 ? state.vwapNumerator / totalVolume : undefined,\n    pocPrice,\n    pocVolume: pocVolume >= 0 ? pocVolume : undefined,\n    deltaMin:\n      typeof state.bar.deltaMin === 'number' && Number.isFinite(state.bar.deltaMin)\n        ? state.bar.deltaMin\n        : Math.min(0, delta),\n    deltaMax:\n      typeof state.bar.deltaMax === 'number' && Number.isFinite(state.bar.deltaMax)\n        ? state.bar.deltaMax\n        : Math.max(0, delta),\n  };\n\n  return normalizeBars([bar], {\n    sessions,\n    deriveSessions,\n  })[0];\n}\n\nexport function createOrderFlowTickStreamController(\n  config: CreateOrderFlowTickStreamControllerConfig,\n): OrderFlowTickStreamController {\n  const intervalSeconds = Math.max(1, Math.floor(config.intervalSeconds));\n  const tickSize = config.instrument.tickSize > 0 ? config.instrument.tickSize : 0.01;\n  const pricePrecision = resolvePricePrecision(config.instrument);\n  const timezone = config.instrument.timezone || 'UTC';\n  const barStates = new Map<string, MutableBarState>();\n  let bars: OrderFlowBar[] = [];\n  let latestQuote: QuoteTick | null = null;\n  let previousTradePrice: number | null = null;\n  let previousResolvedSide: ResolvedTradeSide = 'buy';\n  let streamActive = false;\n\n  const upsertTrade = (trade: TradeTick) => {\n    const bucketTime = bucketTradeTime(trade.time, intervalSeconds);\n    const price = roundToPriceStep(trade.price, tickSize, pricePrecision);\n    const key = String(bucketTime);\n    const existingState = barStates.get(key);\n    const { side, source } = resolveTradeSide(\n      trade,\n      latestQuote,\n      previousTradePrice,\n      previousResolvedSide,\n    );\n    previousTradePrice = price;\n    previousResolvedSide = side;\n\n    const state =\n      existingState ??\n      ({\n        bar: {\n          time: bucketTime as TimeValue,\n          open: price,\n          high: price,\n          low: price,\n          close: price,\n          levels: [],\n          totalVolume: 0,\n          delta: 0,\n          bidVolume: 0,\n          askVolume: 0,\n          tradeCount: 0,\n          deltaMin: 0,\n          deltaMax: 0,\n          sessionId: deriveSessionId(trade.time, timezone),\n          metadata: {\n            aggregation: 'tick-derived',\n            classificationMethod: source,\n            streamActive: true,\n            lastTradeTime: trade.time,\n            tradeCount: 0,\n          },\n        },\n        levels: new Map<number, PriceLevelVolume>(),\n        vwapNumerator: 0,\n      } satisfies MutableBarState);\n\n    if (!existingState) {\n      barStates.set(key, state);\n    }\n\n    const signedDelta = side === 'buy' ? trade.size : -trade.size;\n    state.bar.high = Math.max(state.bar.high, price);\n    state.bar.low = Math.min(state.bar.low, price);\n    state.bar.close = price;\n    state.bar.totalVolume = (state.bar.totalVolume ?? 0) + trade.size;\n    state.bar.delta = (state.bar.delta ?? 0) + signedDelta;\n    state.bar.deltaMin = Math.min(state.bar.deltaMin ?? 0, state.bar.delta);\n    state.bar.deltaMax = Math.max(state.bar.deltaMax ?? 0, state.bar.delta);\n    state.bar.tradeCount = (state.bar.tradeCount ?? 0) + 1;\n    state.vwapNumerator += price * trade.size;\n    if (side === 'buy') {\n      state.bar.askVolume = (state.bar.askVolume ?? 0) + trade.size;\n    } else {\n      state.bar.bidVolume = (state.bar.bidVolume ?? 0) + trade.size;\n    }\n    state.bar.metadata = {\n      ...state.bar.metadata,\n      aggregation: 'tick-derived',\n      classificationMethod: source,\n      streamActive: true,\n      lastTradeTime: trade.time,\n      tradeCount: Number(state.bar.metadata?.tradeCount ?? 0) + 1,\n    };\n\n    const level = state.levels.get(price) ?? {\n      price,\n      bidVolume: 0,\n      askVolume: 0,\n      tradeCount: 0,\n      totalVolume: 0,\n      delta: 0,\n    };\n\n    if (side === 'buy') {\n      level.askVolume += trade.size;\n    } else {\n      level.bidVolume += trade.size;\n    }\n\n    level.tradeCount = (level.tradeCount ?? 0) + 1;\n    level.totalVolume = (level.totalVolume ?? 0) + trade.size;\n    level.delta = level.askVolume - level.bidVolume;\n    state.levels.set(price, level);\n\n    return {\n      key,\n      operation: existingState ? ('upsert' as const) : ('append' as const),\n      state,\n    };\n  };\n\n  return {\n    push(update) {\n      const touched = new Map<\n        string,\n        {\n          operation: 'append' | 'upsert';\n          state: MutableBarState;\n        }\n      >();\n      const events = buildSortedEvents(update);\n\n      if (events.length) {\n        streamActive = true;\n      }\n\n      for (const event of events) {\n        if (event.kind === 'quote') {\n          latestQuote = event.tick;\n          continue;\n        }\n\n        const touch = upsertTrade(event.tick);\n        if (!touched.has(touch.key)) {\n          touched.set(touch.key, touch);\n        }\n      }\n\n      const patches = [...touched.values()]\n        .sort((left, right) => Number(left.state.bar.time) - Number(right.state.bar.time))\n        .map((entry) => {\n          const bar = finalizeBarState(entry.state, config.sessions, config.deriveSessions);\n          const patch: OrderFlowPatch = {\n            operation: entry.operation,\n            bars: [bar],\n            metadata: {\n              aggregation: 'tick-derived',\n              streamActive,\n            },\n          };\n\n          bars = applyOrderFlowPatch(bars, patch);\n          return patch;\n        });\n\n      return {\n        bars: [...bars],\n        patches,\n        streamActive,\n      };\n    },\n\n    getBars() {\n      return [...bars];\n    },\n\n    reset() {\n      barStates.clear();\n      bars = [];\n      latestQuote = null;\n      previousTradePrice = null;\n      previousResolvedSide = 'buy';\n      streamActive = false;\n    },\n  };\n}\n\nexport function buildOrderFlowBarsFromTicks(\n  input: BuildOrderFlowBarsFromTicksInput,\n): OrderFlowBar[] {\n  const controller = createOrderFlowTickStreamController(input);\n  controller.push({\n    trades: input.trades,\n    quotes: input.quotes,\n  });\n  return controller.getBars();\n}\n","import type { IChartApi } from 'lightweight-charts';\n\nexport interface NumericRange {\n  from: number;\n  to: number;\n}\n\nexport interface ChartViewPaneStateSnapshot {\n  paneIndex: number;\n  priceScaleId: string;\n  priceRange: NumericRange | null;\n}\n\nexport interface ChartViewStateSnapshot {\n  version: 1;\n  timeRange: NumericRange | null;\n  panes: ChartViewPaneStateSnapshot[];\n}\n\nexport interface CaptureChartViewStateOptions {\n  paneIndices?: number[];\n  priceScaleId?: string;\n}\n\nfunction normalizeRange(\n  range: { from: number; to: number } | null | undefined,\n): NumericRange | null {\n  if (!range) {\n    return null;\n  }\n\n  if (!Number.isFinite(range.from) || !Number.isFinite(range.to)) {\n    return null;\n  }\n\n  return {\n    from: range.from,\n    to: range.to,\n  };\n}\n\nexport function isChartViewStateSnapshot(value: unknown): value is ChartViewStateSnapshot {\n  if (!value || typeof value !== 'object') {\n    return false;\n  }\n\n  const snapshot = value as Partial<ChartViewStateSnapshot>;\n  return snapshot.version === 1 && Array.isArray(snapshot.panes) && 'timeRange' in snapshot;\n}\n\nexport function captureChartViewState(\n  chart: IChartApi,\n  options: CaptureChartViewStateOptions = {},\n): ChartViewStateSnapshot {\n  const priceScaleId = options.priceScaleId ?? 'right';\n  const paneIndices = options.paneIndices ?? chart.panes().map((_, index) => index);\n\n  return {\n    version: 1,\n    timeRange: normalizeRange(chart.timeScale().getVisibleLogicalRange()),\n    panes: paneIndices.map((paneIndex) => ({\n      paneIndex,\n      priceScaleId,\n      priceRange: normalizeRange(chart.priceScale(priceScaleId, paneIndex).getVisibleRange()),\n    })),\n  };\n}\n\nexport function restoreChartViewState(\n  chart: IChartApi,\n  snapshot: ChartViewStateSnapshot | null | undefined,\n): void {\n  if (!snapshot || snapshot.version !== 1) {\n    return;\n  }\n\n  if (snapshot.timeRange) {\n    chart.timeScale().setVisibleLogicalRange(snapshot.timeRange);\n  }\n\n  const panes = chart.panes();\n\n  for (const pane of snapshot.panes) {\n    if (!panes[pane.paneIndex]) {\n      continue;\n    }\n\n    const priceScale = chart.priceScale(pane.priceScaleId, pane.paneIndex);\n\n    if (pane.priceRange) {\n      priceScale.setAutoScale(false);\n      priceScale.setVisibleRange(pane.priceRange);\n    } else {\n      priceScale.setAutoScale(true);\n    }\n  }\n}\n","import type { IChartApi } from 'lightweight-charts';\n\nexport interface AutoFitPriceScaleOptions {\n  paneIndex?: number;\n  priceScaleId?: string;\n  topInsetRatio?: number;\n  bottomInsetRatio?: number;\n}\n\nexport interface AutoFitPriceScaleResult {\n  enabled: boolean;\n  paneIndex: number;\n  priceScaleId: string;\n  topInsetRatio: number;\n  bottomInsetRatio: number;\n}\n\nfunction clampInsetRatio(value: number): number {\n  if (!Number.isFinite(value)) {\n    return 0.05;\n  }\n\n  return Math.min(Math.max(value, 0), 0.49);\n}\n\nexport function setPriceScaleAutoFit(\n  chart: IChartApi,\n  enabled: boolean,\n  options: AutoFitPriceScaleOptions = {},\n): AutoFitPriceScaleResult {\n  const paneIndex = options.paneIndex ?? 0;\n  const priceScaleId = options.priceScaleId ?? 'right';\n  const topInsetRatio = clampInsetRatio(options.topInsetRatio ?? 0.05);\n  const bottomInsetRatio = clampInsetRatio(options.bottomInsetRatio ?? 0.05);\n  const priceScale = chart.priceScale(priceScaleId, paneIndex);\n\n  priceScale.applyOptions({\n    autoScale: enabled,\n    scaleMargins: {\n      top: topInsetRatio,\n      bottom: bottomInsetRatio,\n    },\n  });\n  priceScale.setAutoScale(enabled);\n\n  return {\n    enabled,\n    paneIndex,\n    priceScaleId,\n    topInsetRatio,\n    bottomInsetRatio,\n  };\n}\n","import { normalizeBars } from '../adapters/normalize/normalizeBatch';\nimport type {\n  AggregatedMarketBar,\n  OrderFlowBar,\n  PriceLevelVolume,\n  TimeValue,\n} from '../models/contracts';\nimport { compareTimeValues } from './time';\n\ninterface MutableOrderFlowBarState {\n  bar: OrderFlowBar;\n  levels: Map<number, PriceLevelVolume>;\n  sourceCount: number;\n  runningDelta: number;\n  deltaMin: number;\n  deltaMax: number;\n}\n\ninterface MutableMarketBarState {\n  bar: AggregatedMarketBar;\n  sourceCount: number;\n  runningDelta: number;\n  deltaMin: number;\n  deltaMax: number;\n  hasDeltaPath: boolean;\n  hasVwapGap: boolean;\n  vwapNumerator: number;\n}\n\nfunction resolveIntervalSeconds(intervalSeconds: number): number {\n  const normalized = Math.floor(intervalSeconds);\n  if (!Number.isFinite(normalized) || normalized <= 0) {\n    throw new Error(`A positive intervalSeconds value is required. Received ${intervalSeconds}.`);\n  }\n\n  return normalized;\n}\n\nfunction timeValueToUnixSeconds(time: TimeValue): number {\n  if (typeof time !== 'number' || !Number.isFinite(time)) {\n    throw new Error('Interval aggregation requires numeric second-based time values.');\n  }\n\n  return time > 1e12 ? Math.floor(time / 1000) : Math.floor(time);\n}\n\nfunction bucketTime(time: TimeValue, intervalSeconds: number): number {\n  return Math.floor(timeValueToUnixSeconds(time) / intervalSeconds) * intervalSeconds;\n}\n\nfunction resolveLevelTotalVolume(level: PriceLevelVolume): number {\n  return level.totalVolume ?? level.bidVolume + level.askVolume;\n}\n\nfunction resolveLevelDelta(level: PriceLevelVolume): number {\n  return level.delta ?? level.askVolume - level.bidVolume;\n}\n\nfunction resolveOrderFlowBarTotalVolume(bar: OrderFlowBar): number {\n  return (\n    bar.totalVolume ??\n    bar.levels.reduce((total, level) => total + resolveLevelTotalVolume(level), 0)\n  );\n}\n\nfunction resolveOrderFlowBarDelta(bar: OrderFlowBar): number {\n  return bar.delta ?? bar.levels.reduce((total, level) => total + resolveLevelDelta(level), 0);\n}\n\nfunction resolveOrderFlowBarBidVolume(bar: OrderFlowBar): number {\n  return bar.bidVolume ?? bar.levels.reduce((total, level) => total + level.bidVolume, 0);\n}\n\nfunction resolveOrderFlowBarAskVolume(bar: OrderFlowBar): number {\n  return bar.askVolume ?? bar.levels.reduce((total, level) => total + level.askVolume, 0);\n}\n\nfunction resolveOrderFlowBarTradeCount(bar: OrderFlowBar): number | undefined {\n  if (typeof bar.tradeCount === 'number' && Number.isFinite(bar.tradeCount)) {\n    return bar.tradeCount;\n  }\n\n  const total = bar.levels.reduce((count, level) => count + (level.tradeCount ?? 0), 0);\n  return total > 0 ? total : undefined;\n}\n\nfunction cloneLevel(level: PriceLevelVolume): PriceLevelVolume {\n  return {\n    ...level,\n    totalVolume: resolveLevelTotalVolume(level),\n    delta: resolveLevelDelta(level),\n  };\n}\n\nfunction mergeLevel(\n  existing: PriceLevelVolume | undefined,\n  level: PriceLevelVolume,\n): PriceLevelVolume {\n  const next = cloneLevel(level);\n  if (!existing) {\n    return next;\n  }\n\n  return {\n    ...existing,\n    bidVolume: existing.bidVolume + next.bidVolume,\n    askVolume: existing.askVolume + next.askVolume,\n    totalVolume: resolveLevelTotalVolume(existing) + resolveLevelTotalVolume(next),\n    delta: resolveLevelDelta(existing) + resolveLevelDelta(next),\n    tradeCount: (existing.tradeCount ?? 0) + (next.tradeCount ?? 0) || undefined,\n  };\n}\n\nfunction resolvePoc(\n  levels: PriceLevelVolume[],\n  referencePrice: number,\n): { pocPrice?: number; pocVolume?: number } {\n  let selected: PriceLevelVolume | null = null;\n  let selectedVolume = -1;\n  let selectedDistance = Number.POSITIVE_INFINITY;\n\n  for (const level of levels) {\n    const totalVolume = resolveLevelTotalVolume(level);\n    const distance = Math.abs(level.price - referencePrice);\n\n    if (\n      totalVolume > selectedVolume ||\n      (totalVolume === selectedVolume && distance < selectedDistance) ||\n      (totalVolume === selectedVolume &&\n        distance === selectedDistance &&\n        selected &&\n        level.price > selected.price)\n    ) {\n      selected = level;\n      selectedVolume = totalVolume;\n      selectedDistance = distance;\n    }\n  }\n\n  return selected\n    ? {\n        pocPrice: selected.price,\n        pocVolume: resolveLevelTotalVolume(selected),\n      }\n    : {};\n}\n\nfunction resolveLevelWeightedPriceVolume(level: PriceLevelVolume): number {\n  return level.price * resolveLevelTotalVolume(level);\n}\n\nfunction resolveDeltaExtrema(\n  delta: number,\n  deltaMin?: number,\n  deltaMax?: number,\n): {\n  deltaMin: number;\n  deltaMax: number;\n} {\n  return {\n    deltaMin:\n      typeof deltaMin === 'number' && Number.isFinite(deltaMin) ? deltaMin : Math.min(0, delta),\n    deltaMax:\n      typeof deltaMax === 'number' && Number.isFinite(deltaMax) ? deltaMax : Math.max(0, delta),\n  };\n}\n\nexport function buildAggregatedMarketBarFromOrderFlowBar(bar: OrderFlowBar): AggregatedMarketBar {\n  const levels = [...bar.levels].map(cloneLevel).sort((left, right) => left.price - right.price);\n  const volume = resolveOrderFlowBarTotalVolume(bar);\n  const delta = resolveOrderFlowBarDelta(bar);\n  const bidVolume = resolveOrderFlowBarBidVolume(bar);\n  const askVolume = resolveOrderFlowBarAskVolume(bar);\n  const tradeCount = resolveOrderFlowBarTradeCount(bar);\n  const levelWeightedPriceVolume = levels.reduce(\n    (total, level) => total + resolveLevelWeightedPriceVolume(level),\n    0,\n  );\n  const { pocPrice, pocVolume } =\n    typeof bar.pocPrice === 'number' && typeof bar.pocVolume === 'number'\n      ? {\n          pocPrice: bar.pocPrice,\n          pocVolume: bar.pocVolume,\n        }\n      : resolvePoc(levels, bar.close);\n  const extrema = resolveDeltaExtrema(delta, bar.deltaMin, bar.deltaMax);\n\n  return {\n    time: bar.time,\n    open: bar.open,\n    high: bar.high,\n    low: bar.low,\n    close: bar.close,\n    volume,\n    vwap:\n      typeof bar.vwap === 'number' && Number.isFinite(bar.vwap)\n        ? bar.vwap\n        : volume > 0\n          ? levelWeightedPriceVolume / volume\n          : undefined,\n    tradeCount,\n    bidVolume,\n    askVolume,\n    delta,\n    deltaMin: extrema.deltaMin,\n    deltaMax: extrema.deltaMax,\n    pocPrice,\n    pocVolume,\n    sessionId: bar.sessionId,\n    metadata: bar.metadata ? { ...bar.metadata } : undefined,\n  };\n}\n\nexport function buildAggregatedMarketBarsFromOrderFlowBars(\n  bars: readonly OrderFlowBar[],\n): AggregatedMarketBar[] {\n  return [...bars]\n    .sort((left, right) => compareTimeValues(left.time, right.time))\n    .map((bar) => buildAggregatedMarketBarFromOrderFlowBar(bar));\n}\n\nexport function aggregateMarketBarsByInterval(\n  bars: readonly AggregatedMarketBar[],\n  intervalSeconds: number,\n): AggregatedMarketBar[] {\n  if (!bars.length) {\n    return [];\n  }\n\n  const normalizedInterval = resolveIntervalSeconds(intervalSeconds);\n  const states = new Map<number, MutableMarketBarState>();\n  const sortedBars = [...bars].sort((left, right) => compareTimeValues(left.time, right.time));\n\n  for (const bar of sortedBars) {\n    const time = bucketTime(bar.time, normalizedInterval);\n    const existing = states.get(time);\n    const delta = typeof bar.delta === 'number' && Number.isFinite(bar.delta) ? bar.delta : null;\n    const extrema = delta == null ? null : resolveDeltaExtrema(delta, bar.deltaMin, bar.deltaMax);\n    const state =\n      existing ??\n      ({\n        bar: {\n          time: time as TimeValue,\n          open: bar.open,\n          high: bar.high,\n          low: bar.low,\n          close: bar.close,\n          volume: 0,\n          tradeCount: 0,\n          bidVolume: 0,\n          askVolume: 0,\n          delta: 0,\n          sessionId: bar.sessionId,\n          metadata: {\n            ...(bar.metadata ?? {}),\n            aggregation: 'interval-derived',\n            intervalSeconds: normalizedInterval,\n          },\n        },\n        sourceCount: 0,\n        runningDelta: 0,\n        deltaMin: 0,\n        deltaMax: 0,\n        hasDeltaPath: false,\n        hasVwapGap: false,\n        vwapNumerator: 0,\n      } satisfies MutableMarketBarState);\n\n    if (!existing) {\n      states.set(time, state);\n    }\n\n    state.bar.high = Math.max(state.bar.high, bar.high);\n    state.bar.low = Math.min(state.bar.low, bar.low);\n    state.bar.close = bar.close;\n    state.bar.volume += bar.volume;\n    state.bar.tradeCount = (state.bar.tradeCount ?? 0) + (bar.tradeCount ?? 0) || undefined;\n    state.bar.bidVolume = (state.bar.bidVolume ?? 0) + (bar.bidVolume ?? 0) || undefined;\n    state.bar.askVolume = (state.bar.askVolume ?? 0) + (bar.askVolume ?? 0) || undefined;\n    state.bar.delta =\n      (state.bar.delta ?? 0) +\n      (typeof bar.delta === 'number' && Number.isFinite(bar.delta) ? bar.delta : 0);\n    state.sourceCount += 1;\n\n    if (typeof bar.vwap === 'number' && Number.isFinite(bar.vwap)) {\n      state.vwapNumerator += bar.vwap * bar.volume;\n    } else if (bar.volume > 0) {\n      state.hasVwapGap = true;\n    }\n\n    if (extrema) {\n      state.hasDeltaPath = true;\n      state.deltaMin = Math.min(state.deltaMin, state.runningDelta + extrema.deltaMin);\n      state.deltaMax = Math.max(state.deltaMax, state.runningDelta + extrema.deltaMax);\n      state.runningDelta += delta ?? 0;\n    }\n  }\n\n  return Array.from(states.values())\n    .map((state) => ({\n      ...state.bar,\n      vwap:\n        !state.hasVwapGap && state.bar.volume > 0\n          ? state.vwapNumerator / state.bar.volume\n          : undefined,\n      deltaMin: state.hasDeltaPath ? state.deltaMin : undefined,\n      deltaMax: state.hasDeltaPath ? state.deltaMax : undefined,\n      tradeCount:\n        state.bar.tradeCount && state.bar.tradeCount > 0 ? state.bar.tradeCount : undefined,\n      bidVolume: state.bar.bidVolume && state.bar.bidVolume > 0 ? state.bar.bidVolume : undefined,\n      askVolume: state.bar.askVolume && state.bar.askVolume > 0 ? state.bar.askVolume : undefined,\n      pocPrice: state.sourceCount === 1 ? state.bar.pocPrice : undefined,\n      pocVolume: state.sourceCount === 1 ? state.bar.pocVolume : undefined,\n      metadata: {\n        ...(state.bar.metadata ?? {}),\n        sourceCount: state.sourceCount,\n      },\n    }))\n    .sort((left, right) => compareTimeValues(left.time, right.time));\n}\n\nexport function aggregateOrderFlowBarsByInterval(\n  bars: readonly OrderFlowBar[],\n  intervalSeconds: number,\n): OrderFlowBar[] {\n  if (!bars.length) {\n    return [];\n  }\n\n  const normalizedInterval = resolveIntervalSeconds(intervalSeconds);\n  const states = new Map<number, MutableOrderFlowBarState>();\n  const sortedBars = [...bars].sort((left, right) => compareTimeValues(left.time, right.time));\n\n  for (const bar of sortedBars) {\n    const time = bucketTime(bar.time, normalizedInterval);\n    const existing = states.get(time);\n    const delta = resolveOrderFlowBarDelta(bar);\n    const extrema = resolveDeltaExtrema(delta, bar.deltaMin, bar.deltaMax);\n    const state =\n      existing ??\n      ({\n        bar: {\n          time: time as TimeValue,\n          open: bar.open,\n          high: bar.high,\n          low: bar.low,\n          close: bar.close,\n          levels: [],\n          totalVolume: 0,\n          delta: 0,\n          bidVolume: 0,\n          askVolume: 0,\n          tradeCount: 0,\n          sessionId: bar.sessionId,\n          metadata: {\n            ...(bar.metadata ?? {}),\n            aggregation: 'interval-derived',\n            intervalSeconds: normalizedInterval,\n          },\n        },\n        levels: new Map<number, PriceLevelVolume>(),\n        sourceCount: 0,\n        runningDelta: 0,\n        deltaMin: 0,\n        deltaMax: 0,\n      } satisfies MutableOrderFlowBarState);\n\n    if (!existing) {\n      states.set(time, state);\n    }\n\n    state.bar.high = Math.max(state.bar.high, bar.high);\n    state.bar.low = Math.min(state.bar.low, bar.low);\n    state.bar.close = bar.close;\n    state.bar.totalVolume = (state.bar.totalVolume ?? 0) + resolveOrderFlowBarTotalVolume(bar);\n    state.bar.delta = (state.bar.delta ?? 0) + delta;\n    state.bar.bidVolume = (state.bar.bidVolume ?? 0) + resolveOrderFlowBarBidVolume(bar);\n    state.bar.askVolume = (state.bar.askVolume ?? 0) + resolveOrderFlowBarAskVolume(bar);\n    state.bar.tradeCount =\n      (state.bar.tradeCount ?? 0) + (resolveOrderFlowBarTradeCount(bar) ?? 0) || undefined;\n    state.sourceCount += 1;\n\n    for (const level of bar.levels) {\n      state.levels.set(level.price, mergeLevel(state.levels.get(level.price), level));\n    }\n\n    state.deltaMin = Math.min(state.deltaMin, state.runningDelta + extrema.deltaMin);\n    state.deltaMax = Math.max(state.deltaMax, state.runningDelta + extrema.deltaMax);\n    state.runningDelta += delta;\n  }\n\n  return normalizeBars(\n    Array.from(states.values())\n      .map((state) => {\n        const levels = Array.from(state.levels.values()).sort(\n          (left, right) => left.price - right.price,\n        );\n        const totalVolume = levels.reduce(\n          (total, level) => total + resolveLevelTotalVolume(level),\n          0,\n        );\n        const delta = levels.reduce((total, level) => total + resolveLevelDelta(level), 0);\n        const bidVolume = levels.reduce((total, level) => total + level.bidVolume, 0);\n        const askVolume = levels.reduce((total, level) => total + level.askVolume, 0);\n        const tradeCount = levels.reduce((count, level) => count + (level.tradeCount ?? 0), 0);\n        const weightedPriceVolume = levels.reduce(\n          (total, level) => total + resolveLevelWeightedPriceVolume(level),\n          0,\n        );\n        const { pocPrice, pocVolume } = resolvePoc(levels, state.bar.close);\n\n        return {\n          ...state.bar,\n          levels,\n          totalVolume,\n          delta,\n          bidVolume,\n          askVolume,\n          tradeCount: tradeCount > 0 ? tradeCount : undefined,\n          vwap: totalVolume > 0 ? weightedPriceVolume / totalVolume : undefined,\n          pocPrice,\n          pocVolume,\n          deltaMin: state.deltaMin,\n          deltaMax: state.deltaMax,\n          metadata: {\n            ...(state.bar.metadata ?? {}),\n            sourceCount: state.sourceCount,\n          },\n        } satisfies OrderFlowBar;\n      })\n      .sort((left, right) => compareTimeValues(left.time, right.time)),\n  );\n}\n","import type { OrderFlowBar, PriceLevelVolume } from '../models/contracts';\nimport { inferPricePrecision } from './priceStep';\n\nexport interface OhlcLike {\n  open: number;\n  high: number;\n  low: number;\n  close: number;\n}\n\nexport const MIN_MINTICK = Number.MIN_VALUE;\nexport const MAX_MINTICK = Number.POSITIVE_INFINITY;\nexport const DEFAULT_MINTICK_CANDIDATES = [0.005, 0.01, 0.05, 0.1, 0.25, 0.5, 1] as const;\n\nconst FLOAT_EPSILON = 1e-8;\n\nfunction resolveMintickPrecision(mintick: number, sourceTickSize?: number): number {\n  return Math.max(\n    inferPricePrecision(mintick),\n    sourceTickSize && sourceTickSize > 0 ? inferPricePrecision(sourceTickSize) : 0,\n  );\n}\n\nexport function normalizeMintick(\n  mintick: number | null | undefined,\n  sourceTickSize?: number,\n): number | null {\n  if (!Number.isFinite(mintick) || !mintick || mintick <= 0) {\n    return null;\n  }\n\n  const precision = resolveMintickPrecision(mintick, sourceTickSize);\n  const normalized = Number(mintick.toFixed(precision));\n\n  return normalized;\n}\n\nexport function bucketPriceToMintick(\n  value: number,\n  mintick: number,\n  sourceTickSize?: number,\n): number {\n  const normalizedMintick = normalizeMintick(mintick, sourceTickSize);\n  if (!normalizedMintick) {\n    return value;\n  }\n\n  const precision = resolveMintickPrecision(normalizedMintick, sourceTickSize);\n  const bucketIndex = Math.floor(value / normalizedMintick + FLOAT_EPSILON);\n  return Number((bucketIndex * normalizedMintick).toFixed(precision));\n}\n\nexport function buildSupportedMinticks(\n  sourceTickSize: number,\n  candidates: readonly number[] = DEFAULT_MINTICK_CANDIDATES,\n): number[] {\n  const values = new Set<number>();\n  const normalizedSourceTick = normalizeMintick(sourceTickSize, sourceTickSize);\n\n  if (normalizedSourceTick) {\n    values.add(normalizedSourceTick);\n  }\n\n  for (const candidate of candidates) {\n    const normalizedCandidate = normalizeMintick(candidate, sourceTickSize);\n    if (normalizedCandidate) {\n      values.add(normalizedCandidate);\n    }\n  }\n\n  return Array.from(values).sort((left, right) => left - right);\n}\n\nfunction mergePriceLevel(\n  existing: PriceLevelVolume | undefined,\n  level: PriceLevelVolume,\n  price: number,\n): PriceLevelVolume {\n  const totalVolume = level.totalVolume ?? level.bidVolume + level.askVolume;\n  const delta = level.delta ?? level.askVolume - level.bidVolume;\n\n  if (!existing) {\n    return {\n      ...level,\n      price,\n      totalVolume,\n      delta,\n    };\n  }\n\n  return {\n    ...existing,\n    price,\n    bidVolume: existing.bidVolume + level.bidVolume,\n    askVolume: existing.askVolume + level.askVolume,\n    totalVolume: (existing.totalVolume ?? existing.bidVolume + existing.askVolume) + totalVolume,\n    delta: (existing.delta ?? existing.askVolume - existing.bidVolume) + delta,\n    tradeCount: (existing.tradeCount ?? 0) + (level.tradeCount ?? 0) || undefined,\n  };\n}\n\nexport function clusterPriceLevelsByMintick(\n  levels: PriceLevelVolume[],\n  mintick: number,\n  sourceTickSize?: number,\n): PriceLevelVolume[] {\n  const normalizedMintick = normalizeMintick(mintick, sourceTickSize);\n\n  if (!normalizedMintick) {\n    return levels;\n  }\n\n  const clusteredLevels = new Map<number, PriceLevelVolume>();\n\n  for (const level of levels) {\n    const price = bucketPriceToMintick(level.price, normalizedMintick, sourceTickSize);\n    clusteredLevels.set(price, mergePriceLevel(clusteredLevels.get(price), level, price));\n  }\n\n  return Array.from(clusteredLevels.values()).sort((left, right) => left.price - right.price);\n}\n\nexport function clusterOhlcBarByMintick<T extends OhlcLike>(\n  bar: T,\n  mintick: number,\n  sourceTickSize?: number,\n): T {\n  const normalizedMintick = normalizeMintick(mintick, sourceTickSize);\n\n  if (!normalizedMintick) {\n    return bar;\n  }\n\n  return {\n    ...bar,\n    open: bucketPriceToMintick(bar.open, normalizedMintick, sourceTickSize),\n    high: bucketPriceToMintick(bar.high, normalizedMintick, sourceTickSize),\n    low: bucketPriceToMintick(bar.low, normalizedMintick, sourceTickSize),\n    close: bucketPriceToMintick(bar.close, normalizedMintick, sourceTickSize),\n  };\n}\n\nexport function clusterOhlcBarsByMintick<T extends OhlcLike>(\n  bars: readonly T[],\n  mintick: number,\n  sourceTickSize?: number,\n): T[] {\n  const normalizedMintick = normalizeMintick(mintick, sourceTickSize);\n\n  if (!normalizedMintick) {\n    return bars.slice();\n  }\n\n  return bars.map((bar) => clusterOhlcBarByMintick(bar, normalizedMintick, sourceTickSize));\n}\n\nexport function clusterOrderFlowBarByMintick(\n  bar: OrderFlowBar,\n  mintick: number,\n  sourceTickSize?: number,\n): OrderFlowBar {\n  const normalizedMintick = normalizeMintick(mintick, sourceTickSize);\n\n  if (!normalizedMintick) {\n    return bar;\n  }\n\n  const levels = clusterPriceLevelsByMintick(bar.levels, normalizedMintick, sourceTickSize);\n  const totalVolume = levels.reduce(\n    (total, level) => total + (level.totalVolume ?? level.bidVolume + level.askVolume),\n    0,\n  );\n  const delta = levels.reduce(\n    (total, level) => total + (level.delta ?? level.askVolume - level.bidVolume),\n    0,\n  );\n  const bidVolume = levels.reduce((total, level) => total + level.bidVolume, 0);\n  const askVolume = levels.reduce((total, level) => total + level.askVolume, 0);\n  const tradeCount = levels.reduce((count, level) => count + (level.tradeCount ?? 0), 0);\n  const weightedPriceVolume = levels.reduce(\n    (total, level) =>\n      total + level.price * (level.totalVolume ?? level.bidVolume + level.askVolume),\n    0,\n  );\n  let pocPrice: number | undefined;\n  let pocVolume = -1;\n\n  for (const level of levels) {\n    const levelVolume = level.totalVolume ?? level.bidVolume + level.askVolume;\n    if (levelVolume > pocVolume) {\n      pocPrice = level.price;\n      pocVolume = levelVolume;\n    }\n  }\n\n  return {\n    ...clusterOhlcBarByMintick(bar, normalizedMintick, sourceTickSize),\n    levels,\n    totalVolume,\n    delta,\n    bidVolume,\n    askVolume,\n    tradeCount: tradeCount > 0 ? tradeCount : undefined,\n    vwap: totalVolume > 0 ? weightedPriceVolume / totalVolume : undefined,\n    pocPrice,\n    pocVolume: pocVolume >= 0 ? pocVolume : undefined,\n  };\n}\n\nexport function clusterOrderFlowBarsByMintick(\n  bars: readonly OrderFlowBar[],\n  mintick: number,\n  sourceTickSize?: number,\n): OrderFlowBar[] {\n  const normalizedMintick = normalizeMintick(mintick, sourceTickSize);\n\n  if (!normalizedMintick) {\n    return bars.slice();\n  }\n\n  return bars.map((bar) => clusterOrderFlowBarByMintick(bar, normalizedMintick, sourceTickSize));\n}\n"]}