import type { AreaDotsConfig, AxisLabelConfig, BadgeConfig, BadgeVariant, CandleGap, CandleGapKind, CandleGapsConfig, DegenOptions, FontConfig, FontWeight, GradientConfig, GridStyleConfig, LeftEdgeFadeConfig, LegendConfig, LegendStyle, LineStyleConfig, LiveChartMetrics, LiveChartMetricsOverride, LiveChartPoint, LoadingConfig, MarkerClusterConfig, DotConfig, DotGlowConfig, DotRingConfig, MultiSeriesDotConfig, PulseConfig, ReferenceLine, ScrubActionConfig, ScrubConfig, SelectionDotConfig, SelectionDotProps, SelectionDotRingConfig, ReturnToLiveConfig, ThresholdConfig, TimeScrollConfig, ThresholdLineConfig, TradeEvent, TransitionConfig, ValueLineConfig, VolumeConfig, XAxisConfig, YAxisConfig, ZoomConfig } from "../types"; import type { ComponentType, ReactElement } from "react"; import type { SharedValue } from "react-native-reanimated"; import type { ResolvedMarkerCluster } from "../math/markerCluster"; export interface ResolvedValueLineConfig { strokeWidth: number; intervals: [number, number]; /** undefined → use palette.dashLine at render time */ color: string | undefined; } export interface ResolvedBadgeConfig { variant: BadgeVariant; tail: boolean; position: "right" | "left"; background: string | undefined; /** undefined → capsule (pillHeight / 2) at render time */ radius: number | undefined; /** undefined → no border */ borderColor: string | undefined; borderWidth: number; /** undefined → variant/theme text color at render time */ textColor: string | undefined; fontSize: number | undefined; fontFamily: string | undefined; fontWeight: FontWeight | undefined; offsetX: number; offsetY: number; /** Track the visible window's right-edge price while scrolled back. */ followViewEdge: boolean; } export interface ResolvedYAxisConfig { minGap: number; /** Multiplier used to choose and align representable dynamic nice intervals. */ intervalScale: number; /** Fixed label count (≥ 2), or 0 for the dynamic nice-interval grid. */ count: number; /** undefined → keep the default centered-gutter label placement. */ labelRightMargin: number | undefined; /** undefined → no gap; inert unless labelRightMargin is set. */ gridEndGap: number | undefined; /** Float the axis over a full-width plot (no reserved right gutter). */ float: boolean; } export interface ResolvedVolumeConfig { /** undefined → use palette.candleUp at render time. */ upColor: string | undefined; /** undefined → use palette.candleDown at render time. */ downColor: string | undefined; /** Reserved band height (px) — the tallest a bar can be. */ maxHeight: number; /** Corner radius (px) of bar tops. */ radius: number; /** Opacity (0..1) applied to the whole band. */ opacity: number; } export interface ResolvedCandleGapBridgeStyle { color: string | undefined; opacity: number; strokeWidth: number; strokeCap: "butt" | "round" | "square"; } export interface ResolvedCandleGapBandStyle { fillColor: string | undefined; fillOpacity: number; borderColor: string | undefined; borderOpacity: number; borderWidth: number; intervals: [number, number]; } export interface ResolvedCandleGapLabelStyle { color: string | undefined; position: "left" | "right"; } export interface ResolvedCandleGapStyle { bridge: ResolvedCandleGapBridgeStyle | null; band: ResolvedCandleGapBandStyle | null; label: ResolvedCandleGapLabelStyle | null; } export interface ResolvedCandleGapsConfig { gaps: CandleGap[]; styles: Record; } /** Resolved straight-line styling (connector, etc.). `color: undefined` → caller default. */ export interface ResolvedLineStyleConfig { color: string | undefined; strokeWidth: number; /** undefined → solid (no dash). */ intervals: [number, number] | undefined; } export interface ResolvedAxisLabelConfig { /** undefined → use the chart's `formatValue` at render time. */ format?: (v: number) => string; /** undefined → use the muted default label color at render time. */ color?: string; /** `"left"`/`"right"` pin to that edge; `"extrema"`(-`edge`) tracks the data point. */ position: "left" | "right" | "extrema" | "extrema-edge"; /** undefined → the built-in default text size (11). */ fontSize?: number; /** undefined → the platform `` default weight. */ fontWeight?: FontWeight; /** undefined → the platform `` default family. */ fontFamily?: string; /** Extrema dot color; undefined → use `color`. */ dotColor?: string; /** Extrema dot diameter (px); undefined → the built-in default (7). */ dotSize?: number; /** Extrema — whether to draw the marker dot. */ dot: boolean; /** `"extrema-edge"` connector line (dot → edge label); null → none. */ connector: ResolvedLineStyleConfig | null; /** When set, the built-in value label is replaced by this custom element. */ render?: () => ReactElement | null; } export interface ResolvedXAxisConfig { minGap: number; } export interface ResolvedScrubConfig { tooltip: boolean; /** Opt-in per-series pill tooltip for LiveChartSeries; null keeps guide-only behavior. */ seriesTooltip: ResolvedPerSeriesTooltipConfig | null; /** Content affected by dimOpacity while scrubbing. */ dimTarget: "future" | "otherCandles"; /** Opacity of the content selected by dimTarget while scrubbing. */ dimOpacity: number; /** Candle-focus dim transition duration in milliseconds. */ dimFadeMs: number; /** undefined → palette.crosshairLine */ crosshairLineColor: string | undefined; /** Vertical crosshair line width in px. */ crosshairStrokeWidth: number; /** Extension past the plot's top and bottom edges in px. */ crosshairOvershoot: number; /** Fade the crosshair near the live edge. */ crosshairFade: boolean; /** Visible-crosshair fade distance near the live edge in px. */ crosshairFadeDistance: number; /** undefined preserves the existing Skia line-cap default. */ crosshairLineCap: "butt" | "round" | "square" | undefined; /** Dash intervals `[on, off, …]` for the crosshair line; undefined → solid. */ crosshairDash: number[] | undefined; /** undefined → palette.crosshairDim */ crosshairDimColor: string | undefined; /** undefined → palette.tooltipBg */ tooltipBackground: string | undefined; /** undefined → palette.tooltipText */ tooltipColor: string | undefined; /** undefined → palette.tooltipBorder */ tooltipBorderColor: string | undefined; /** Tooltip pill corner radius in px. */ tooltipBorderRadius: number; /** Where the tooltip pill sits relative to the scrub line. */ tooltipPlacement: "side" | "top" | "bottom" | "point"; /** Gap (px) between the tooltip and the plot edge it's pinned to. */ tooltipMargin: number; /** Show the value row in the default tooltip body. */ tooltipShowValue: boolean; /** Show the time row in the default tooltip body. */ tooltipShowTime: boolean; /** Press-and-hold delay (ms) before scrubbing activates. 0 = immediate. */ panGestureDelay: number; /** Fade markers + reference lines out while scrubbing. */ hideOverlaysOnScrub: boolean; /** Reject outside plain-scrub starts and clamp active scrub X to the plot. */ clampToPlot: boolean; /** Candle mode: quantize the scrub X to the hovered candle's center. */ snapToCandles: boolean; } export interface ResolvedPerSeriesTooltipConfig { alwaysShow: boolean; bucketSeconds: number | undefined; formatSeriesValue: ((value: number, seriesId: string) => string) | undefined; formatTimeRange: ((from: number, to: number) => string) | undefined; maxLabelChars: number; guideColor: string | undefined; guideWidth: number; guideDashPattern: number[] | undefined; timePillBackground: string | undefined; timePillColor: string | undefined; timePillBorderColor: string | undefined; timePillRadius: number; timePillPaddingX: number; timePillPaddingY: number; seriesPillBackground: string | undefined; seriesPillLabelColor: string | undefined; seriesPillValueColor: string | undefined; seriesPillBorderColor: string | undefined; seriesPillRadius: number; seriesPillPaddingX: number; seriesPillPaddingY: number; seriesPillDotSize: number; seriesPillDotGap: number; seriesPillLabelValueGap: number; intersectionDotSize: number; } export interface ResolvedScrubActionConfig { /** Glyph drawn in the action badge. */ icon: string; /** undefined → palette.badgeBg */ background: string | undefined; /** undefined → palette.badgeText */ iconColor: string | undefined; /** undefined → palette.crosshairLine */ lineColor: string | undefined; /** Show the price readout pill; false → icon-only badge. */ text: boolean; /** Show the date/time pill where the vertical line meets the x-axis. */ timeBadge: boolean; /** undefined → no rounding */ snap: number | undefined; dismissOnTapOutside: boolean; /** Clear the reticle once the action badge fires onScrubAction. */ dismissOnAction: boolean; } export interface ResolvedGradientConfig { /** undefined → use palette.fillTop (theme-aware) at render time */ topOpacity: number | undefined; /** undefined → use palette.fillBottom (transparent) at render time */ bottomOpacity: number | undefined; /** Explicit color stops (top → bottom); overrides the opacity stops. */ colors: string[] | undefined; /** Stop positions (0..1) matching `colors` length. */ positions: number[] | undefined; } export interface ResolvedAreaDotsConfig { spacing: number; size: number; /** undefined → derive a faint tint from the line/accent color at render time. */ color: string | undefined; opacity: number; } export interface ResolvedPulseConfig { interval: number; duration: number; maxRadius: number; opacity: number; strokeWidth: number; } export interface ResolvedReferenceLineConfig { strokeWidth: number; intervals: [number, number]; /** undefined → use palette.refLine at render time */ color: string | undefined; } export interface ResolvedGridStyleConfig { /** undefined → use palette.gridLine at render time */ color: string | undefined; strokeWidth: number; /** Empty array → solid stroke (no dash effect). */ intervals: number[]; opacity: number; } export interface ResolvedFontConfig { fontFamily: string; fontSize: number; fontWeight: FontWeight; } export interface ResolvedDegenConfig { scale: number; downMomentum: boolean; shake: boolean; shakeIntensity: number; shakeDurationSec: number; particleSlotCount: number; particleBurstDurationSec: number; burstParticleCount: number; drag: number; particleSizeMin: number; particleSizeMax: number; particleOpacity: number; spreadAngle: number; positionJitterX: number; positionJitterY: number; speedMin: number; speedMax: number; /** `null` = use palette.line at render time. */ colors: string[] | null; } export interface ResolvedTradeStreamConfig { maxCount: number; /** Horizontal offset from `padding.left` for the label text (default 8). */ labelOffsetX: number; } export interface ResolvedLeftEdgeFadeConfig { width: number; startColor: string; endColor: string; } /** * Resolves `valueLine` prop to a fully-typed config or null (disabled). * `true` → defaults, object → merged with defaults, falsy → null. */ export declare function resolveValueLine(prop: boolean | ValueLineConfig | undefined): ResolvedValueLineConfig | null; export interface ResolvedThresholdLineConfig { /** undefined → no label. */ label: string | undefined; /** Label side; `"left"` sits inside the plot (clear of the y-axis gutter). */ labelPosition: "left" | "right"; /** Series badge value/Y source; `"last"` preserves the live-edge default. */ labelAnchor: "first" | "last"; /** undefined → use palette.refLine (line) / palette.refLabel (label) at render time. */ color: string | undefined; intervals: [number, number]; strokeWidth: number; showValue: boolean; /** undefined → fall back to `color`, then palette.refLabel at render time. */ labelColor: string | undefined; } export interface ResolvedThresholdConfig { /** * The split value (Y-axis units). A `SharedValue` for a single live * benchmark (read on the UI thread each frame), or a `LiveChartPoint[]` for a * time-varying threshold the split follows point-for-point. `undefined` when * {@link series} carries the threshold instead. */ value: SharedValue | LiveChartPoint[] | undefined; /** Live time-varying threshold (`SharedValue`); wins over `value`. */ series: SharedValue | null; /** undefined → use palette.candleUp (up-green) at render time. */ aboveColor: string | undefined; /** undefined → use palette.candleDown (down-red) at render time. */ belowColor: string | undefined; fill: boolean; /** Band opacity (0–1); {@link THRESHOLD_FILL_OPACITY_DEFAULT} unless tuned. */ fillOpacity: number; /** Fold the threshold into the Y-axis range fit. */ includeInRange: boolean; /** Series forms: extend flat before the first point to the visible window's start. */ extendToStart: boolean; /** Series forms: extend flat past the last point to "now". */ extendToNow: boolean; line: ResolvedThresholdLineConfig | null; } /** Default threshold band opacity — matches reference-line bands. */ export declare const THRESHOLD_FILL_OPACITY_DEFAULT = 0.16; /** * Resolves the `threshold.line` sub-prop to a config or null (no marker line). * `true` → dashed defaults, object → merged, falsy/undefined → null. */ export declare function resolveThresholdLine(prop: boolean | ThresholdLineConfig | undefined): ResolvedThresholdLineConfig | null; /** * Resolves the `threshold` prop to a fully-typed config or null (disabled). * Presence-gated (like `referenceLines`/`markers`): a config object with a * `value` or `series` enables it — there is no boolean form. */ export declare function resolveThreshold(prop: ThresholdConfig | undefined): ResolvedThresholdConfig | null; /** * Resolves `badge` prop to a fully-typed config or null (disabled). * `true` → defaults, object → merged with defaults, falsy → null. */ export declare function resolveBadge(prop: boolean | BadgeConfig | undefined): ResolvedBadgeConfig | null; /** * Resolves `yAxis` prop to a fully-typed config or null (disabled). * `true` → defaults, object → merged with defaults, falsy → null. * `count` is normalized to a non-negative integer (the grid math clamps the * upper bound to the label pool size). */ export declare function resolveYAxis(prop: boolean | YAxisConfig | undefined): ResolvedYAxisConfig | null; /** * Resolves the `volume` prop to a fully-typed config or null (disabled). * `true` → defaults, object → merged with defaults, falsy → null. Colors left * `undefined` fall back to the candle palette at render time. */ export declare function resolveVolume(prop: boolean | VolumeConfig | undefined): ResolvedVolumeConfig | null; /** Resolve and defensively normalize explicit candle-gap metadata. */ export declare function resolveCandleGaps(prop: CandleGap[] | CandleGapsConfig | undefined): ResolvedCandleGapsConfig | null; export interface ResolvedZoomConfig { /** Tightest window (max zoom-in), seconds. `undefined` → `timeWindow / 8`. */ minTimeWindow: number | undefined; /** Widest window (max zoom-out), seconds. `undefined` → full data span. */ maxTimeWindow: number | undefined; } /** * Resolves the `zoom` prop to a config or null (disabled). `true` → defaults * (bounds derived at gesture time), object → merged, falsy → null. */ export declare function resolveZoom(prop: boolean | ZoomConfig | undefined): ResolvedZoomConfig | null; /** * Resolves `timeScroll.returnToLive` to the "return to live" glide duration in ms, * where `0` means an instant snap (no animation): * - `undefined` / `true` → default {@link RETURN_TO_LIVE_MS} * - `false` → `0` (instant) * - `{ duration }` → that duration (a non-positive value collapses to `0`) * * See {@link ReturnToLiveConfig} / #164. */ export declare function resolveReturnToLiveMs(prop: boolean | ReturnToLiveConfig | undefined): number; /** * Resolves `timeScroll.overscroll` to a clamped `[0, 1)` fraction of the * visible window that pan / fling / pinch may travel past the data bounds. * `0` (booleans, omitted, or non-positive values) keeps the classic hard * stops at the oldest data and the live edge. See {@link TimeScrollConfig}. */ export declare function resolveOverscroll(prop: boolean | TimeScrollConfig | undefined): number; /** * Resolves `timeScroll.fling`: `false` disables release inertia so the window * stops dead where the finger lifts. Booleans / omitted keep the default (on). * See {@link TimeScrollConfig}. */ export declare function resolveFling(prop: boolean | TimeScrollConfig | undefined): boolean; /** * Resolved transition durations. `undefined` for a field means "use the * component's built-in default" (so we don't duplicate the default constants * here); a number is an explicit duration in ms (clamped to ≥ 0). */ export interface ResolvedTransitionConfig { reveal: number | undefined; mode: number | undefined; /** Candle-width lerp speed (0–1); `undefined` = use the built-in default. */ candleLerpSpeed: number | undefined; } /** * Resolves the `transitions` prop. `false` → all transitions instant (durations * `0`, candle width snaps with speed `1`); `true` / omitted → defaults (all * `undefined` = use the built-in durations / speed); an object → per-transition * overrides (an omitted field keeps its default). */ export declare function resolveTransitions(prop: boolean | TransitionConfig | undefined): ResolvedTransitionConfig; /** * Resolves the extrema-label `connector` sub-prop to a line style or null. * `defaultOn` (true in `"extrema-edge"` mode) means an unset connector draws the * dashed default; `false` → null; an object → merged; a `LineStyleConfig` is * normalized (its `intervals` may be omitted for a solid line). */ export declare function resolveConnector(prop: boolean | LineStyleConfig | undefined, defaultOn: boolean): ResolvedLineStyleConfig | null; /** * Resolves a `topLabel` / `bottomLabel` prop to a fully-typed config or null * (no label). Opt-in, so `undefined`/`false` → null; `true` → the built-in * value label with defaults; object → configured built-in (or a custom `render`). * The `connector` defaults on (dashed) in `"extrema-edge"` mode, else off. */ export declare function resolveAxisLabel(prop: boolean | AxisLabelConfig | undefined): ResolvedAxisLabelConfig | null; /** * Resolves `xAxis` prop to a fully-typed config or null (disabled). * Defaults to enabled (`true`) so a bare `undefined` also returns the defaults. */ export declare function resolveXAxis(prop: boolean | XAxisConfig | undefined): ResolvedXAxisConfig | null; /** * Resolves `scrub` prop to a fully-typed config or null (disabled). * `true` → defaults, object → merged with defaults, falsy → null. */ export declare function resolveScrub(prop: boolean | ScrubConfig | undefined): ResolvedScrubConfig | null; export interface ResolvedLoadingConfig { /** undefined → palette.gridLine */ color: string | undefined; /** undefined → the chart's line strokeWidth */ strokeWidth: number | undefined; /** Base breathing-wave amplitude (px). */ amplitude: number; /** Breathing-wave speed multiplier. */ speed: number; /** Draw the skeleton Y-axis label placeholders. */ axisLabels: boolean; } /** * Resolves the `loading` prop to a fully-typed config or null (not loading). * `true` → defaults (loading on, built-in look), object → merged with defaults * (loading on, restyled), `false` / omitted → null. So a non-null result is the * "is loading" flag and carries the resolved styling. */ export declare function resolveLoading(prop: boolean | LoadingConfig | undefined): ResolvedLoadingConfig | null; /** * Resolves `scrubAction` prop to a fully-typed config or null (disabled). * Opt-in: `false`/`undefined` → null; `true` → defaults; object → merged. */ export declare function resolveScrubAction(prop: boolean | ScrubActionConfig | undefined): ResolvedScrubActionConfig | null; /** * Resolves the `markerCluster` prop (a `"anchored"`/`"stacked"` shorthand or a * {@link MarkerClusterConfig} object) to a full config. Always returns a config * (never null) — `"anchored"` (the default) is a valid mode the cluster pass * treats as "side offsets only, no bucketing". The object form implies * `"stacked"` unless `mode` is set. */ export declare function resolveMarkerCluster(prop: "anchored" | "stacked" | MarkerClusterConfig | undefined): ResolvedMarkerCluster; /** * Resolves `gradient` prop to a fully-typed config or null (disabled). * `true` → defaults (use palette colors), object → merged with defaults, falsy → null. */ export declare function resolveGradient(prop: boolean | GradientConfig | undefined): ResolvedGradientConfig | null; /** * Resolves `areaDots` prop to a fully-typed config or null (disabled). * `true` → defaults (palette-derived color), object → merged with defaults, * falsy/omitted → null. Default OFF (unlike `gradient`). */ export declare function resolveAreaDots(prop: boolean | AreaDotsConfig | undefined): ResolvedAreaDotsConfig | null; /** * Resolves `leftEdgeFade` prop to a fully-typed config or null (disabled). * `true` → defaults, object → merged with defaults, falsy → null. * * Pass `colorDefaults` from `leftEdgeFadeColorsFromBgRgb(palette.bgRgb)` so default * stops match the chart background; omit for black alpha-gradient fallback. */ export declare function resolveLeftEdgeFade(prop: boolean | LeftEdgeFadeConfig | undefined, colorDefaults?: { startColor: string; endColor: string; }): ResolvedLeftEdgeFadeConfig | null; /** * Resolves `pulse` prop to a fully-typed config or null (disabled). * `true` → defaults, object → merged with defaults, falsy → null. */ export declare function resolvePulse(prop: boolean | PulseConfig | undefined): ResolvedPulseConfig | null; /** * Resolves the `font` prop into a fully-typed config ready for `matchFont`. * `defaultFamily` is the platform-specific fallback resolved by the caller. */ export declare function resolveFontConfig(config: FontConfig | undefined, defaultFamily: string, defaultSize: number): ResolvedFontConfig; /** * Extracts the visual rendering config from a `ReferenceLine` prop. * Returns null when no reference line is set. */ export declare function resolveReferenceLineConfig(rl: ReferenceLine | undefined): ResolvedReferenceLineConfig | null; /** * Resolves the `gridStyle` prop into a fully-typed config. Always returns a * config (the grid always needs concrete defaults); omitted fields fall back to * the legacy solid 1px grid line. */ export declare function resolveGridStyle(prop: GridStyleConfig | undefined): ResolvedGridStyleConfig; /** * Resolves `degen` prop to a fully-typed config or null (disabled). */ export declare function resolveDegen(prop: boolean | DegenOptions | undefined): ResolvedDegenConfig | null; /** * Whether trade stream markers should run, and cap for mapped trades per frame. * Extend `options` when display options are added to props. */ export declare function resolveTradeStream(stream: SharedValue | undefined, options?: boolean | { maxCount?: number; labelOffsetX?: number; }): ResolvedTradeStreamConfig | null; /** Resolved static dot glow. `color: undefined` means "use the dot color". */ export interface ResolvedDotGlowConfig { color: string | undefined; radius: number; blur: number; opacity: number; } /** `undefined`/`false` → off; `true` → restrained defaults; object → merged. */ export declare function resolveDotGlow(prop: boolean | DotGlowConfig | undefined): ResolvedDotGlowConfig | null; /** Resolved backing ring. `color: undefined` means "use the theme `badgeOuterBg`". */ export interface ResolvedDotRingConfig { color: string | undefined; width: number; } /** `undefined`/`true` → haloed defaults; `false` → null (flat circle). */ export declare function resolveDotRing(prop: boolean | DotRingConfig | undefined): ResolvedDotRingConfig | null; /** Shared, fully-resolved dot styling (single- and multi-series). */ export interface ResolvedDotConfig { radius: number; ring: ResolvedDotRingConfig | null; glow: ResolvedDotGlowConfig | null; show: boolean; color: string | undefined; trackWhileParked: boolean; } /** * Resolves the `dot` prop. Always returns a config (the live dot's geometry is * read unconditionally); visibility rides on `show`. * - `false` → defaults with `show: false` (the canonical "hide the dot") * - `undefined`/`true` → shown defaults * - object → merged with defaults (honoring an explicit `show`) */ export declare function resolveDot(prop: boolean | DotConfig | undefined): ResolvedDotConfig; export interface ResolvedMultiSeriesDotConfig extends ResolvedDotConfig { pulse: ResolvedPulseConfig | null; valueLine: ResolvedValueLineConfig | null; valueLabel: boolean; } export declare function resolveMultiSeriesDot(prop: boolean | MultiSeriesDotConfig | undefined): ResolvedMultiSeriesDotConfig; /** Resolved selection-dot ring. `color: undefined` → use the dot color. */ export interface ResolvedSelectionDotRingConfig { color: string | undefined; width: number; } /** `undefined`/`true` → ring defaults; `false` → null (no ring). */ export declare function resolveSelectionDotRing(prop: boolean | SelectionDotRingConfig | undefined): ResolvedSelectionDotRingConfig | null; /** Fully-resolved selection-dot styling. */ export interface ResolvedSelectionDotConfig { size: number; /** undefined → use the line / leading-series color at render time. */ color: string | undefined; ring: ResolvedSelectionDotRingConfig | null; /** When set, the built-in size/color/ring knobs are ignored. */ component?: ComponentType; } /** * Resolves the `selectionDot` prop to a fully-typed config or null (hidden). * Defaults to ON, so `undefined`/`true` yield the built-in dot. * - `false` → `null` (no dot) * - `undefined`/`true` → built-in dot with defaults * - object → configured built-in dot, or the custom `component` when set * (the size/color/ring knobs are still resolved but ignored by the slot) */ export declare function resolveSelectionDot(prop: boolean | SelectionDotConfig | undefined): ResolvedSelectionDotConfig | null; export interface ResolvedLegendConfig { visible: boolean; compact: boolean; position: "top" | "bottom"; /** Raw style overrides; the chip row applies its own fallbacks. */ style: LegendStyle | undefined; } export declare function resolveLegend(prop: boolean | LegendConfig | undefined): ResolvedLegendConfig; /** * Resolve the `metrics` prop into a fully-typed config. Per-namespace shallow * merge over the defaults — only the keys the caller sets are replaced, the same * model as `applyPaletteOverride`. Returns the shared defaults object when no * override is supplied (treated read-only by consumers). */ export declare function resolveMetrics(prop: LiveChartMetricsOverride | undefined): LiveChartMetrics; //# sourceMappingURL=resolveConfig.d.ts.map