@rioaxyz/sonrchart 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/SonrChart.tsx","../node_modules/klinecharts/dist/index.esm.js","../src/theme.ts","../src/indicators.ts","../src/candles.ts","../src/resolutions.ts","../src/internal.ts","../src/candleStyle.ts","../src/compare.ts","../src/timezone.ts","../src/watermark.ts","../src/brush.ts","../src/useDrawings.ts","../src/textOverlay.ts","../src/drawings.ts","../src/drawingTemplates.ts","../src/keyboard.ts","../src/shapes.ts","../src/drawingsExtended.ts","../src/tradeReview.ts","../src/symbolFormat.ts","../src/IndicatorMenu.tsx","../src/defaultStyles.ts","../src/useDropdown.ts","../src/labels.ts","../src/DrawingToolbar.tsx","../src/icons/Icon.tsx","../src/icons/ui.tsx","../src/icons/chart.tsx","../src/ConfirmDialog.tsx","../src/DataWindow.tsx","../src/ObjectTree.tsx","../src/TimeframeBar.tsx","../src/TimezoneMenu.tsx","../src/SonrChartShell.tsx","../src/ChartToolbar.tsx","../src/SymbolSearch.tsx","../src/CandleMenu.tsx","../src/PriceScaleMenu.tsx","../src/snapshot.ts","../src/SettingsModal.tsx","../src/ChartHeader.tsx","../src/MarketStatus.tsx","../src/NavControlBar.tsx","../src/SaveLoadDialog.tsx","../src/GoToDateDialog.tsx","../src/SymbolInfoDialog.tsx","../src/BrandMark.tsx","../src/ToolbarButton.tsx","../src/css.ts"],"sourcesContent":["import { forwardRef, useCallback, useEffect, useImperativeHandle, useRef, useState } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { dispose, init, utils, type Chart, type Coordinate, type DeepPartial, type KLineData, type Layout, type Nullable, type Options, type Point, type Styles } from \"klinecharts\";\nimport { resolveThemeStyles, PALETTE } from \"./theme\";\nimport { PATTERN_INDICATOR, SERIES_INDICATOR, SESSION_INDICATOR, WATERMARK_INDICATOR, Z_ORDER, registerSonrIndicators } from \"./indicators\";\nimport { HaTransformer, isHeikinAshi, toHeikinAshi } from \"./candles\";\nimport { applyCandleStyle } from \"./candleStyle\";\nimport { COMPARE_INDICATOR, alignCompare, registerCompareIndicator, type CompareLine } from \"./compare\";\nimport { CANDLE_PANE, asSpec, intervalMs, mergeStyles, sessionColors, toKLine, toPeriod } from \"./internal\";\nimport { DEFAULT_TIMEZONE } from \"./timezone\";\nimport { bareTicker, buildWatermark, intervalLabel, mergeWatermark, normalizeWatermark } from \"./watermark\";\nimport { registerBrushOverlay, type BrushStyle, type BrushTool } from \"./brush\";\nimport { useDrawings } from \"./useDrawings\";\nimport { isEditableTarget, resolveShortcut, type ShortcutAction } from \"./keyboard\";\nimport { registerShapeOverlays } from \"./shapes\";\nimport { registerExtendedDrawings } from \"./drawingsExtended\";\nimport { registerTradeReview } from \"./tradeReview\";\nimport { registerTextOverlay, type TextStyle } from \"./textOverlay\";\nimport { formatWithUnit, type QuoteFormat } from \"./symbolFormat\";\nimport type {\n CandleStyle,\n ChartState,\n CompareSpec,\n DataSource,\n DrawingRow,\n DrawingTool,\n IndicatorRow,\n IndicatorSpec,\n Interval,\n Magnet,\n OrderLine,\n PatternMarker,\n PriceLine,\n PriceLabels,\n PriceScale,\n SessionTint,\n SymbolInfo,\n Theme,\n WatermarkOptions,\n} from \"./types\";\n\nregisterSonrIndicators();\nregisterCompareIndicator();\nregisterBrushOverlay();\nregisterShapeOverlays();\nregisterExtendedDrawings();\nregisterTradeReview();\nregisterTextOverlay();\n\n// Library-managed indicators the user never sees as \"their\" studies — excluded\n// from listIndicators / the data window / export / study templates.\nconst INTERNAL_INDICATORS = new Set<string>([SESSION_INDICATOR, PATTERN_INDICATOR, COMPARE_INDICATOR, WATERMARK_INDICATOR, SERIES_INDICATOR]);\nconst isUserIndicator = (name: string): boolean => !INTERNAL_INDICATORS.has(name);\n\nfunction magnetMode(m: Magnet | undefined): \"normal\" | \"weak_magnet\" | \"strong_magnet\" {\n if (m === true || m === \"weak\") return \"weak_magnet\";\n if (m === \"strong\") return \"strong_magnet\";\n return \"normal\";\n}\n\nexport interface SonrChartProps {\n symbol: string;\n interval?: Interval;\n dataSource: DataSource;\n /** \"dark\" | \"light\", or the name of a theme registered via `registerTheme`\n * or supplied in `customThemes`. (#46) */\n theme?: Theme | string;\n /** Inline named custom themes, looked up before the global registry. (#46) */\n customThemes?: Record<string, DeepPartial<Styles>>;\n styles?: DeepPartial<Styles>;\n /** Indicators to show. Strings (\"VOL\") or specs. Default [\"VOL\"]. (#4) */\n indicators?: (string | IndicatorSpec)[];\n /** Per-indicator sub-pane heights in px, keyed by indicator name. (#7) */\n paneHeights?: Record<string, number>;\n /** Session background tinting for pre/after-hours. (#10) */\n sessions?: SessionTint;\n /** Underlaid symbol + interval watermark behind the candles. `true` shows both;\n * pass options to toggle each and set color/opacity. */\n watermark?: boolean | Partial<WatermarkOptions>;\n /** Pattern-context markers on the price pane. (#5) */\n patterns?: PatternMarker[];\n /** Static reference lines (entry / stop / target). */\n priceLines?: PriceLine[];\n /** Draggable order/position lines. (#19) */\n orderLines?: OrderLine[];\n /** Price-scale mode (log / percentage / invert / inside). (#12) */\n priceScale?: PriceScale;\n /** Price-scale labels (last value/line, high/low marks). (#41) */\n priceLabels?: Partial<PriceLabels>;\n /** Magnet mode for drawing tools — snap points to nearby OHLC. (#13) */\n magnet?: Magnet;\n /** Candle rendering style — solid/hollow/ohlc/area/heikin_ashi. (#1) */\n candleStyle?: CandleStyle;\n /** Comparison symbols overlaid on the main pane, ratio-scaled. (#9) */\n compareSeries?: CompareSpec[];\n /** How many bars to request on load. Default 500. */\n barCount?: number;\n /** Enable built-in keyboard shortcuts when the chart is focused. (#14)\n * Default true. See `onShortcut` to observe/extend them. */\n keyboard?: boolean;\n /** Called for every recognized shortcut (\"escape\" | \"undo\" | \"redo\" |\n * \"delete\") while the chart is focused, even when the built-in also runs —\n * a host can observe or extend the behavior. (#14) */\n onShortcut?: (action: string, e: KeyboardEvent) => void;\n /** Override the crosshair price pill / big-number formatting. (#46) */\n priceFormatter?: (value: number) => string;\n /** Override the crosshair date template, e.g. \"YYYY-MM-DD HH:mm\". (#46) */\n dateFormat?: string;\n /** IANA timezone for the x-axis + crosshair time (#38). Default\n * \"America/New_York\". Also settable via the handle / <TimezoneMenu>. */\n timezone?: string;\n /** Data-source label shown in the candle legend header (e.g. \"Alpaca\"),\n * after `symbol · interval`, TradingView-style. */\n source?: string;\n /** Show the built-in canvas candle legend (O/H/L/C/…). Default true. Set false\n * when rendering your own header via <ChartHeader> + `subscribeHeaderBar`. */\n legend?: boolean;\n onReady?: (chart: Chart) => void;\n /** Fired when resolveSymbol returns null for the requested ticker. (#8) */\n onSymbolError?: (symbol: string) => void;\n className?: string;\n style?: React.CSSProperties;\n}\n\n/** Imperative surface: raw chart, indicator control (#4), drawing tools (#3),\n * price scale (#12), snapshot (#20), and state save/load (#15). */\nexport interface SonrChartHandle {\n chart(): Chart | null;\n addIndicator(spec: string | IndicatorSpec): void;\n removeIndicator(name: string): void;\n listIndicators(): string[];\n /** Start interactive drawing of a tool; honors the current magnet mode. */\n startDrawing(tool: DrawingTool): void;\n /** Cancel an armed-but-unplaced drawing (toggle the tool off). */\n cancelDrawing(): void;\n /** The tool currently armed for drawing, or null if none. */\n activeDrawing(): DrawingTool | null;\n /** Subscribe to armed-tool changes (arm → tool, placed/cancelled → null).\n * Returns an unsubscribe fn. Lets a toolbar highlight the active tool. */\n subscribeDrawing(cb: (tool: DrawingTool | null) => void): () => void;\n /** Remove all user-drawn overlays (leaves price/order lines + indicators). */\n clearDrawings(): void;\n /** Capture the chart to a data URL (PNG by default). */\n snapshot(opts?: { type?: \"png\" | \"jpeg\"; background?: string; includeOverlays?: boolean }): string | null;\n /** Serialize user drawings + indicators + price scale (#15). */\n exportState(): ChartState;\n /** Restore state produced by exportState (#15). */\n importState(state: ChartState): void;\n /** Current indicator set as specs — a study template to name/persist (#6). */\n getIndicatorSet(): IndicatorSpec[];\n /** Replace the user indicators with a saved set (#6). */\n applyIndicatorSet(specs: (string | IndicatorSpec)[]): void;\n /** Undo the last drawing change (#16). */\n undo(): void;\n /** Redo an undone drawing change (#16). */\n redo(): void;\n canUndo(): boolean;\n canRedo(): boolean;\n /** Subscribe to undo/redo-availability changes (#16). Returns unsubscribe. */\n subscribeHistory(cb: () => void): () => void;\n /** Current magnet mode for new drawings (#13). */\n getMagnet(): Magnet | undefined;\n /** Set the magnet mode imperatively (a changed `magnet` prop still overrides). */\n setMagnet(magnet: Magnet | undefined): void;\n /** Subscribe to magnet-mode changes. Returns unsubscribe. */\n subscribeMagnet(cb: (magnet: Magnet | undefined) => void): () => void;\n // Handle-driven display settings — let the toolbar control them with no host\n // wiring (uncontrolled), while a `*` prop can still control them.\n /** Current theme selector (\"dark\"/\"light\" or a registered/custom name). (#46) */\n getTheme(): Theme | string;\n /** Apply a theme by name imperatively (a changed `theme` prop still wins). (#46) */\n setTheme(theme: Theme | string): void;\n subscribeTheme(cb: (theme: Theme | string) => void): () => void;\n /** Current IANA timezone for the x-axis + crosshair time (#38). */\n getTimezone(): string;\n /** Set the timezone imperatively (a changed `timezone` prop still wins). (#38) */\n setTimezone(tz: string): void;\n subscribeTimezone(cb: (tz: string) => void): () => void;\n getCandleStyle(): CandleStyle;\n setCandleStyle(style: CandleStyle): void;\n subscribeCandleStyle(cb: (style: CandleStyle) => void): () => void;\n getPriceScale(): PriceScale | undefined;\n setPriceScale(scale: PriceScale): void;\n subscribePriceScale(cb: (scale: PriceScale) => void): () => void;\n getSessions(): SessionTint | undefined;\n setSessions(on: SessionTint): void;\n subscribeSessions(cb: (on: SessionTint) => void): () => void;\n getWatermark(): WatermarkOptions;\n setWatermark(opts: boolean | Partial<WatermarkOptions>): void;\n subscribeWatermark(cb: () => void): () => void;\n /** Current price-scale label toggles (#41). */\n getPriceLabels(): Required<PriceLabels>;\n /** Toggle price-scale labels (merges over the current set). */\n setPriceLabels(opts: Partial<PriceLabels>): void;\n subscribePriceLabels(cb: () => void): () => void;\n /** Current brush/highlighter stroke style (color + width). */\n getBrushStyle(tool: BrushTool): BrushStyle;\n /** Set the brush/highlighter stroke style — applies to subsequent strokes. */\n setBrushStyle(tool: BrushTool, style: BrushStyle): void;\n /** Subscribe to brush-style changes (for a settings UI). Returns unsubscribe. */\n subscribeBrush(cb: () => void): () => void;\n /** Default color/size applied to new text labels. */\n getTextStyle(): TextStyle;\n setTextStyle(style: TextStyle): void;\n subscribeTextStyle(cb: () => void): () => void;\n // Drawing management tooling (#35) ---------------------------------------\n /** Lock every user drawing (non-interactive) or unlock them. New drawings\n * inherit the current lock state. */\n setDrawingsLocked(locked: boolean): void;\n /** Whether user drawings are currently locked. */\n getDrawingsLocked(): boolean;\n /** Show/hide every user drawing at once. New drawings inherit visibility. */\n setDrawingsVisible(visible: boolean): void;\n /** Whether user drawings are currently visible. */\n getDrawingsVisible(): boolean;\n /** Subscribe to hide/show-all changes (#35). Returns unsubscribe. */\n subscribeDrawingsVisible(cb: (visible: boolean) => void): () => void;\n /** Save the current user drawings as a named template (in-memory). */\n saveDrawingTemplate(name: string): void;\n /** Replace the current user drawings with a saved template's set. */\n applyDrawingTemplate(name: string): void;\n /** Names of all saved drawing templates. */\n listDrawingTemplates(): string[];\n /** Delete a saved drawing template. */\n deleteDrawingTemplate(name: string): void;\n /** Subscribe to drawing-template list changes. Returns unsubscribe. */\n subscribeDrawingTemplates(cb: () => void): () => void;\n /** Duplicate the most-recently-added user drawing (same points/style). */\n cloneLastDrawing(): void;\n // Data window — per-indicator rows (#45) ----------------------------------\n /** Active user indicators as data-window rows (excludes internal overlays). */\n listIndicatorRows(): IndicatorRow[];\n /** Show/hide one indicator by name. */\n setIndicatorVisible(name: string, visible: boolean): void;\n /** Subscribe to indicator add/remove/visibility changes. Returns unsubscribe. */\n subscribeIndicators(cb: () => void): () => void;\n // Object tree — per-drawing rows (#45) ------------------------------------\n /** Every user drawing as object-tree rows (id/label/visible/locked). */\n listDrawings(): DrawingRow[];\n /** Show/hide one drawing by id. */\n setDrawingVisible(id: string, visible: boolean): void;\n /** Lock/unlock one drawing by id. */\n setDrawingLocked(id: string, locked: boolean): void;\n /** Remove one drawing by id. */\n removeDrawing(id: string): void;\n /** Scroll the chart so the drawing with this id is in view (#45). */\n locateDrawing(id: string): void;\n // Drawing z-order + copy/paste (#35) --------------------------------------\n /** Change a drawing's stacking order: front/back (extreme) or forward/\n * backward (one step). */\n setDrawingZOrder(id: string, mode: \"front\" | \"back\" | \"forward\" | \"backward\"): void;\n /** Copy a drawing to the clipboard. */\n copyDrawing(id: string): void;\n /** Paste the copied drawing as a new drawing. */\n pasteDrawing(): void;\n /** Whether a copied drawing is available to paste. */\n canPasteDrawing(): boolean;\n /** Id of the drawing selected on the chart (clicked), or null. */\n getSelectedDrawing(): string | null;\n // Range bar — visible-window control (#45) --------------------------------\n /** Zoom the visible window to the most recent `ms` of loaded data at the\n * current resolution (clamped to what's loaded). `Infinity` fits all data. */\n setVisibleDuration(ms: number): void;\n // Navigation (#45) --------------------------------------------------------\n /** Scroll the visible window to the bar at (or nearest before) this epoch-ms. */\n scrollToTimestamp(timestamp: number): void;\n /** Jump the visible window to the latest (realtime) bar. */\n scrollToRealTime(): void;\n /** Zoom the visible range in one step (toward more detail). */\n zoomIn(): void;\n /** Zoom the visible range out one step (toward more history). */\n zoomOut(): void;\n /** Subscribe to the bar a custom header should show — the hovered bar while\n * the crosshair is active, else the latest bar (updates on each streamed\n * bar). Emits once immediately. Returns unsubscribe. (#45) */\n subscribeHeaderBar(cb: (current: KLineData | null, prev: KLineData | null) => void): () => void;\n}\n\nlet _seq = 0;\n\n// A colored legend cell (title or value) in the candle tooltip.\ntype Tip = { text: string; color: string };\n\n// Controllable-but-not-required state: the prop is an INITIAL value (and a live\n// override when the host explicitly changes it), while `set` lets the toolbar\n// drive the value through the chart handle with no host wiring. This is what\n// makes the candle-type / price-scale / sessions / watermark controls work out\n// of the box — a bare consumer gets them for free; a host can still control them\n// by passing the prop. `subscribe` notifies observers (the toolbar) on change.\nfunction useControllable<T>(prop: T | undefined, fallback: T) {\n const [value, setValue] = useState<T>(prop === undefined ? fallback : prop);\n const propRef = useRef(prop);\n if (prop !== propRef.current) {\n propRef.current = prop;\n if (prop !== undefined) setValue(prop); // host changed the prop → adopt it\n }\n const subs = useRef(new Set<(v: T) => void>());\n useEffect(() => {\n subs.current.forEach((cb) => cb(value));\n }, [value]);\n const set = useCallback((v: T) => setValue(v), []);\n const subscribe = useCallback((cb: (v: T) => void) => {\n subs.current.add(cb);\n return () => subs.current.delete(cb);\n }, []);\n return { value, set, subscribe };\n}\n\n// Price-scale labels (#41). Marks on by default (matches KLineChart); the\n// bar-close countdown is opt-in.\nconst DEFAULT_PRICE_LABELS: Required<PriceLabels> = { lastValue: true, lastLine: true, high: true, low: true, countdown: false };\n\n// Apply the price-scale label toggles to the candle price marks. The countdown\n// is an extend-text under the last-price pill, refreshed every second; its text\n// comes from the formatExtendText formatter (see applyFormatter). Booleans only\n// — no data recompute. The extend-text style must be COMPLETE: KLineChart reads\n// paddingLeft/size/weight/family etc. directly, and any `undefined` yields a NaN\n// text width that blanks the whole candle pane.\nfunction applyPriceLabels(chart: Chart, labels: Required<PriceLabels>): void {\n chart.setStyles({\n candle: {\n priceMark: {\n show: labels.lastValue || labels.lastLine || labels.high || labels.low || labels.countdown,\n last: {\n show: labels.lastValue || labels.countdown,\n line: { show: labels.lastLine },\n // Match the last-price pill's own text style (white, size 12, same\n // padding) so the countdown reads as a matching label centered under\n // it — it inherits the pill's colored background + right-axis\n // alignment, so a matching style keeps them stacked and legible.\n extendTexts: labels.countdown\n ? [\n {\n show: true,\n style: \"fill\",\n color: \"#FFFFFF\",\n size: 12,\n family: \"Helvetica Neue\",\n weight: \"normal\",\n paddingLeft: 4,\n paddingRight: 4,\n paddingTop: 4,\n paddingBottom: 4,\n borderColor: \"transparent\",\n borderSize: 0,\n borderStyle: \"solid\",\n borderDashedValue: [2, 2],\n borderRadius: 2,\n position: \"below_price\",\n updateInterval: 1000,\n },\n ]\n : [],\n },\n high: { show: labels.high },\n low: { show: labels.low },\n },\n },\n } as DeepPartial<Styles>);\n}\n\n// mm:ss (or h:mm:ss) remaining until a bar that opened at `openMs` closes, given\n// the bar length. Clamps to 0 (e.g. a stale last bar after hours).\nfunction formatCountdown(openMs: number, barMs: number): string {\n const remaining = Math.max(0, openMs + barMs - Date.now());\n const s = Math.floor(remaining / 1000);\n const pad = (n: number) => String(n).padStart(2, \"0\");\n const h = Math.floor(s / 3600);\n const m = Math.floor((s % 3600) / 60);\n return h > 0 ? `${h}:${pad(m)}:${pad(s % 60)}` : `${pad(m)}:${pad(s % 60)}`;\n}\n\n// The candle pane's y-axis config for a price scale. KLineChart fixes the scale\n// TYPE (normal/percentage/logarithm) and inversion at pane creation, so this is\n// applied at chart init — the component rebuilds when `priceScale` changes.\nfunction yAxisLayout(ps?: PriceScale): DeepPartial<Layout> | undefined {\n if (!ps) return undefined;\n // `name` selects the scale type at init but is omitted from KLineChart's\n // Layout.yAxis type, so the narrow cast is confined here.\n return {\n yAxis: {\n ...(ps.type ? { name: ps.type } : {}),\n reverse: ps.invert ?? false,\n inside: ps.inside ?? false,\n },\n } as DeepPartial<Layout>;\n}\n\n// Stable key so a priceScale change re-inits the chart.\nfunction scaleKey(ps?: PriceScale) {\n return ps ? `${ps.type ?? \"normal\"}:${ps.invert ? 1 : 0}:${ps.inside ? 1 : 0}` : \"\";\n}\n\nexport const SonrChart = forwardRef<SonrChartHandle, SonrChartProps>(function SonrChart(\n {\n symbol,\n interval = \"1\",\n dataSource,\n theme: themeProp,\n customThemes,\n styles,\n indicators = [\"VOL\"],\n paneHeights,\n sessions: sessionsProp,\n watermark: watermarkProp,\n patterns,\n priceLines,\n orderLines,\n priceScale: priceScaleProp,\n priceLabels: priceLabelsProp,\n magnet,\n candleStyle: candleStyleProp,\n compareSeries,\n barCount = 500,\n keyboard = true,\n onShortcut,\n priceFormatter,\n dateFormat,\n timezone: timezoneProp,\n source,\n legend = true,\n onReady,\n onSymbolError,\n className,\n style,\n },\n ref,\n) {\n const elRef = useRef<HTMLDivElement>(null);\n const chartRef = useRef<Chart | null>(null);\n // Captured imperative handle + latest onShortcut, so the (stable) keyboard\n // listener can drive the same operations the host uses. (#14)\n const handleRef = useRef<SonrChartHandle | null>(null);\n const onShortcutRef = useRef(onShortcut);\n onShortcutRef.current = onShortcut;\n const idRef = useRef(`sonrchart-${++_seq}`);\n const overlayIds = useRef<string[]>([]);\n // Bumped on every chart (re)init (e.g. an interval switch re-creates the\n // chart). Reconcile effects key on it so the session tint / pattern markers\n // are re-applied on the fresh chart — otherwise they'd vanish on the switch\n // while their toggle stays on (their reconciles don't otherwise re-run). (#10)\n const [chartEpoch, setChartEpoch] = useState(0);\n // Data-window subscribers (indicator add/remove/visibility). Notified from the\n // handle's indicator mutations so the panel refreshes without polling. (#45)\n const indicatorSubs = useRef(new Set<() => void>());\n const notifyIndicators = () => indicatorSubs.current.forEach((cb) => cb());\n // Magnet mode. Prop-seeded, but a toolbar toggle can override it imperatively;\n // a *changed* prop still wins (so the host stays authoritative when it drives\n // magnet), while an unchanged prop won't clobber a toolbar-set value.\n const magnetRef = useRef<Magnet | undefined>(magnet);\n const magnetPropRef = useRef<Magnet | undefined>(magnet);\n if (magnet !== magnetPropRef.current) {\n magnetPropRef.current = magnet;\n magnetRef.current = magnet;\n }\n const magnetSubs = useRef(new Set<(m: Magnet | undefined) => void>());\n const setMagnet = (m: Magnet | undefined) => {\n magnetRef.current = m;\n magnetSubs.current.forEach((cb) => cb(m));\n };\n // Signature of the current line overlays' *visual* fields; lets the reconcile\n // skip a full remove+recreate when a parent re-render changes only array/\n // callback identity, not content (avoids overlay thrash and drag fighting).\n const linesSigRef = useRef<string>(\"\");\n // Latest onMove per order-line id, so a changed callback takes effect without\n // recreating the overlay.\n const orderMoveRef = useRef(new Map<string, OrderLine[\"onMove\"]>());\n // Live-updated prop mirrors read from inside the (stable) data loader.\n // Out-of-the-box, handle-driven display settings (host may still control via\n // the matching prop). Defaults preserve the previous \"prop not passed\" behavior.\n const th = useControllable<Theme | string>(themeProp, \"dark\");\n const candle = useControllable<CandleStyle>(candleStyleProp, \"candle\");\n const scale = useControllable<PriceScale>(priceScaleProp, { type: \"normal\" });\n const sess = useControllable<SessionTint>(sessionsProp, false);\n const theme = th.value;\n const candleStyle = candle.value;\n const priceScale = scale.value;\n const sessions = sess.value;\n // Resolved KLineChart style object for the current theme (built-in or named).\n const themeStyleObj = resolveThemeStyles(theme, customThemes);\n // A named/custom theme has no intrinsic dark/light; default its boolean-driven\n // bits (watermark ink, series neutral, legend label) to the dark base.\n const baseTheme: Theme = theme === \"light\" ? \"light\" : \"dark\";\n // Watermark is a merge-able config (symbol/interval/color/opacity), so it uses\n // its own controllable-ish state rather than the scalar useControllable helper.\n const [watermark, setWatermarkState] = useState<WatermarkOptions>(() => normalizeWatermark(watermarkProp, baseTheme));\n const wmPropRef = useRef(watermarkProp);\n if (watermarkProp !== wmPropRef.current) {\n wmPropRef.current = watermarkProp;\n if (watermarkProp !== undefined) setWatermarkState(normalizeWatermark(watermarkProp, baseTheme));\n }\n const wmSubs = useRef(new Set<() => void>());\n const setWatermark = (next: boolean | Partial<WatermarkOptions>) => setWatermarkState((cur) => mergeWatermark(cur, next));\n useEffect(() => {\n wmSubs.current.forEach((cb) => cb());\n }, [watermark]);\n // Price-scale labels (#41): merge-able toggle config with prop-seed + a\n // handle-driven setter for the price-scale menu.\n const [priceLabels, setPriceLabelsState] = useState<Required<PriceLabels>>(() => ({ ...DEFAULT_PRICE_LABELS, ...priceLabelsProp }));\n const plPropRef = useRef(priceLabelsProp);\n if (priceLabelsProp !== plPropRef.current) {\n plPropRef.current = priceLabelsProp;\n if (priceLabelsProp) setPriceLabelsState((cur) => ({ ...cur, ...priceLabelsProp }));\n }\n const plSubs = useRef(new Set<() => void>());\n const setPriceLabels = (next: Partial<PriceLabels>) => setPriceLabelsState((cur) => ({ ...cur, ...next }));\n useEffect(() => {\n plSubs.current.forEach((cb) => cb());\n }, [priceLabels]);\n const priceLabelsRef = useRef(priceLabels);\n priceLabelsRef.current = priceLabels;\n // Current interval, read live by the countdown formatter.\n const intervalRef = useRef(interval);\n intervalRef.current = interval;\n // Timezone (#38): prop-seeded, handle-settable. A changed `timezone` prop wins\n // over an imperative set (mirrors theme/candle-style).\n const [timezone, setTimezoneState] = useState<string>(timezoneProp ?? DEFAULT_TIMEZONE);\n const tzPropRef = useRef(timezoneProp);\n if (timezoneProp !== undefined && timezoneProp !== tzPropRef.current) {\n tzPropRef.current = timezoneProp;\n setTimezoneState(timezoneProp);\n }\n const tzSubs = useRef(new Set<(tz: string) => void>());\n const timezoneRef = useRef(timezone);\n timezoneRef.current = timezone;\n useEffect(() => {\n chartRef.current?.setTimezone(timezone);\n tzSubs.current.forEach((cb) => cb(timezone));\n }, [timezone]);\n const candleStyleRef = useRef(candleStyle);\n candleStyleRef.current = candleStyle;\n // Live mirrors so the (stable, []-deps) imperative handle's getters read the\n // current value, not the one captured on first render.\n const priceScaleRef = useRef(priceScale);\n priceScaleRef.current = priceScale;\n const sessionsRef = useRef(sessions);\n sessionsRef.current = sessions;\n const watermarkRef = useRef(watermark);\n watermarkRef.current = watermark;\n const compareRef = useRef(compareSeries);\n compareRef.current = compareSeries;\n // Live mirrors read from inside the (stable) candle-legend callback so it\n // reflects the current theme and the resolved price precision without being\n // re-created on every theme/symbol change.\n const themeRef = useRef(baseTheme);\n themeRef.current = baseTheme;\n // The raw theme selector (name), for the handle's getTheme().\n const themeSelRef = useRef(theme);\n themeSelRef.current = theme;\n const pricePrecRef = useRef(2);\n // Currency/unit for the resolved symbol (#39), read live by the legend price().\n const quoteRef = useRef<QuoteFormat>({});\n // Host formatter overrides, read live from the (stable) formatter callbacks.\n const dateFormatRef = useRef(dateFormat);\n dateFormatRef.current = dateFormat;\n const priceFormatterRef = useRef(priceFormatter);\n priceFormatterRef.current = priceFormatter;\n const sourceRef = useRef(source);\n sourceRef.current = source;\n const legendRef = useRef(legend);\n legendRef.current = legend;\n // Header (custom legend) subscribers: emitted the hovered bar on crosshair\n // move, else the latest bar (on load + each streamed bar). `crosshairActive`\n // gates the latest-bar emissions so a hover isn't overwritten by a live tick.\n const headerSubs = useRef(new Set<(current: KLineData | null, prev: KLineData | null) => void>());\n const crosshairActiveRef = useRef(false);\n const emitLatestHeader = () => {\n if (crosshairActiveRef.current) return;\n const list = chartRef.current?.getDataList() ?? [];\n const n = list.length;\n const current = n ? list[n - 1] : null;\n const prev = n > 1 ? list[n - 2] : null;\n headerSubs.current.forEach((cb) => cb(current, prev));\n };\n // Heikin Ashi live transformer (rebuilt per data load in the create effect).\n const haRef = useRef(new HaTransformer());\n\n // Text tool: an inline input floats over the just-placed text overlay so the\n // user can type the label. Positioned in page (fixed) coords from the anchor.\n const [textEdit, setTextEdit] = useState<{ id: string; left: number; top: number; value: string } | null>(null);\n // Stable: the once-built drawings API captures this, so it reads live refs only.\n const onTextPlaced = useCallback((id: string, point: Partial<Point>) => {\n const chart = chartRef.current;\n const el = elRef.current;\n if (!chart || !el) return;\n // Chart-relative pixel of the anchor + the container's page offset → the\n // fixed-position input lands right on the placed label, not at the page top.\n const px = chart.convertToPixel(point, { paneId: CANDLE_PANE }) as Partial<Coordinate>;\n const rect = el.getBoundingClientRect();\n setTextEdit({ id, left: rect.left + (px?.x ?? rect.width / 2), top: rect.top + (px?.y ?? rect.height / 2), value: \"\" });\n }, []);\n\n // User-drawing subsystem (#3/#16/#35): armed tool, undo/redo history, lock/hide\n // flags, named templates, and brush styles. Owns its own refs; reads the live\n // magnet mode via the getter and touches only the shared chart ref.\n const drawings = useDrawings(chartRef, () => magnetMode(magnetRef.current), baseTheme, onTextPlaced);\n\n // Commit the typed label into the overlay's extendData (empty → discard the\n // anchor), or cancel (discard). Both close the inline input.\n const commitText = useCallback(() => {\n setTextEdit((cur) => {\n if (!cur) return null;\n const chart = chartRef.current;\n const text = cur.value.trim();\n if (chart) {\n if (text) {\n // Preserve the label's seeded style (color/size) — only swap the text.\n const prev = (chart.getOverlays({ id: cur.id })[0]?.extendData ?? {}) as Record<string, unknown>;\n chart.overrideOverlay({ id: cur.id, extendData: { ...prev, text } });\n drawings.recordHistory();\n } else {\n chart.removeOverlay({ id: cur.id }); // onRemoved records the discard\n }\n }\n return null;\n });\n }, [drawings]);\n const cancelText = useCallback(() => {\n setTextEdit((cur) => {\n if (cur) chartRef.current?.removeOverlay({ id: cur.id });\n return null;\n });\n }, []);\n\n // Fetch each comparison symbol, align to the main bars, and (re)build the\n // compare overlay indicator (#9). Removes it when there are none.\n const refreshCompare = async () => {\n const chart = chartRef.current;\n if (!chart) return;\n const specs = compareRef.current ?? [];\n const present = chart.getIndicators({ name: COMPARE_INDICATOR }).length > 0;\n if (specs.length === 0) {\n if (present) chart.removeIndicator({ name: COMPARE_INDICATOR });\n return;\n }\n const mainBars = chart.getDataList().map((d) => ({ time: d.timestamp, open: d.open, high: d.high, low: d.low, close: d.close, volume: d.volume }));\n if (mainBars.length === 0) return;\n const palette = [\"#7d93e8\", \"#e0a33c\", \"#c678dd\", \"#56b6c2\", \"#98c379\"];\n // Fetch all comparison symbols in parallel.\n const fetched = await Promise.all(\n specs.map(async (s, i): Promise<CompareLine | null> => {\n try {\n const bars = await dataSource.getBars(s.symbol, interval, barCount);\n return { color: s.color ?? palette[i % palette.length], points: alignCompare(mainBars, bars) };\n } catch {\n return null; // skip a symbol that fails to load\n }\n }),\n );\n if (compareRef.current !== specs) return; // superseded mid-fetch\n const lines = fetched.filter((l): l is CompareLine => l !== null);\n if (chart.getIndicators({ name: COMPARE_INDICATOR }).length > 0) {\n chart.overrideIndicator({ name: COMPARE_INDICATOR, extendData: lines });\n } else {\n chart.createIndicator({ name: COMPARE_INDICATOR, paneId: CANDLE_PANE, zLevel: Z_ORDER.compare, extendData: lines }, true);\n }\n };\n\n const createIndicator = (spec: IndicatorSpec) => {\n const chart = chartRef.current;\n if (!chart) return;\n // isStack=true: KLineChart's addIndicator with isStack=false REMOVES every\n // existing indicator on the target pane first, so main-pane overlays (MA,\n // BOLL, VWAP…) would replace one another and wipe the session/watermark/\n // pattern layers that also live on the candle pane. Stacking lets them\n // coexist; duplicates are still blocked by KLineChart's per-name filter, and\n // a \"new\"-pane indicator lands on a fresh pane where stacking is a no-op.\n chart.createIndicator(\n {\n name: spec.name,\n ...(spec.calcParams ? { calcParams: spec.calcParams } : {}),\n ...(spec.pane === \"main\" ? { paneId: CANDLE_PANE } : {}),\n },\n true,\n );\n };\n\n const applyPaneHeights = () => {\n const chart = chartRef.current;\n if (!chart || !paneHeights) return;\n for (const [name, height] of Object.entries(paneHeights)) {\n const ind = chart.getIndicators({ name })[0];\n if (ind?.paneId) chart.setPaneOptions({ id: ind.paneId, height });\n }\n };\n\n // Crosshair date + price formatting (#46). Default: prepend the date to the\n // crosshair time pill (TV-style). A host `dateFormat` overrides the crosshair\n // template; a host `priceFormatter` drives big-number/price formatting. Reads\n // refs so it can be re-applied without recreating the chart.\n const applyFormatter = (chart: Chart) => {\n chart.setFormatter({\n formatDate: ({ dateTimeFormat, timestamp, template, type }) => {\n if (dateFormatRef.current && type === \"crosshair\") {\n return utils.formatDate(dateTimeFormat, timestamp, dateFormatRef.current);\n }\n const t = type === \"crosshair\" && !/[YMD]/.test(template) ? `YYYY-MM-DD ${template}` : template;\n return utils.formatDate(dateTimeFormat, timestamp, t);\n },\n ...(priceFormatterRef.current\n ? { formatBigNumber: (value: string | number) => priceFormatterRef.current!(typeof value === \"number\" ? value : Number(value)) }\n : {}),\n // Bar-close countdown under the last-price pill (#41), refreshed each\n // second by KLineChart's extend-text update timer.\n formatExtendText: ({ type, data, index }) => {\n if (type === \"last_price\" && index === 0 && priceLabelsRef.current.countdown && typeof data?.timestamp === \"number\") {\n return formatCountdown(data.timestamp, intervalMs(intervalRef.current));\n }\n return \"\";\n },\n });\n };\n\n useImperativeHandle(\n ref,\n (): SonrChartHandle => (handleRef.current = {\n chart: () => chartRef.current,\n addIndicator: (i) => {\n createIndicator(asSpec(i));\n notifyIndicators();\n },\n removeIndicator: (name) => {\n chartRef.current?.removeIndicator({ name });\n notifyIndicators();\n },\n listIndicators: () =>\n (chartRef.current?.getIndicators() ?? []).map((ind) => ind.name).filter(isUserIndicator),\n startDrawing: (tool: DrawingTool) => drawings.beginDrawing(tool),\n cancelDrawing: () => drawings.cancelDrawing(),\n activeDrawing: () => drawings.activeDrawing(),\n subscribeDrawing: (cb) => drawings.subscribeDrawing(cb),\n clearDrawings: () => drawings.clearDrawings(),\n snapshot: (opts) => {\n const chart = chartRef.current;\n if (!chart) return null;\n return chart.getConvertPictureUrl(opts?.includeOverlays ?? true, opts?.type ?? \"png\", opts?.background);\n },\n exportState: (): ChartState => {\n const chart = chartRef.current;\n const inds = (chart?.getIndicators() ?? [])\n .filter((i) => isUserIndicator(i.name))\n .map((i) => ({ name: i.name, paneId: i.paneId }));\n return { version: 1, drawings: drawings.snapshotDrawings(), indicators: inds, priceScale };\n },\n importState: (state: ChartState) => {\n const chart = chartRef.current;\n if (!chart || state?.version !== 1) return;\n drawings.restoreDrawings(state.drawings ?? []);\n for (const ind of state.indicators ?? []) {\n if (!chart.getIndicators({ name: ind.name }).length) {\n chart.createIndicator({ name: ind.name, ...(ind.paneId === CANDLE_PANE ? { paneId: CANDLE_PANE } : {}) }, true);\n }\n }\n // Reset the undo history to the imported drawing set.\n drawings.resetHistoryToCurrent();\n // priceScale in the state is informational; the host re-applies it via\n // the `priceScale` prop (scale type is fixed at chart init).\n },\n getIndicatorSet: (): IndicatorSpec[] =>\n (chartRef.current?.getIndicators() ?? [])\n .filter((i) => isUserIndicator(i.name))\n .map((i) => ({ name: i.name, pane: i.paneId === CANDLE_PANE ? \"main\" : \"new\" })),\n applyIndicatorSet: (specs) => {\n const chart = chartRef.current;\n if (!chart) return;\n for (const i of chart.getIndicators()) {\n if (isUserIndicator(i.name)) chart.removeIndicator({ name: i.name });\n }\n for (const s of specs) createIndicator(asSpec(s));\n applyPaneHeights();\n notifyIndicators();\n },\n undo: () => drawings.undo(),\n redo: () => drawings.redo(),\n canUndo: () => drawings.canUndo(),\n canRedo: () => drawings.canRedo(),\n subscribeHistory: (cb) => drawings.subscribeHistory(cb),\n getMagnet: () => magnetRef.current,\n setMagnet: (m) => setMagnet(m),\n subscribeMagnet: (cb) => {\n magnetSubs.current.add(cb);\n return () => magnetSubs.current.delete(cb);\n },\n getTheme: () => themeSelRef.current,\n setTheme: (t) => th.set(t),\n subscribeTheme: (cb) => th.subscribe(cb),\n getTimezone: () => timezoneRef.current,\n setTimezone: (tz) => setTimezoneState(tz),\n subscribeTimezone: (cb) => {\n tzSubs.current.add(cb);\n return () => tzSubs.current.delete(cb);\n },\n getCandleStyle: () => candleStyleRef.current ?? \"candle\",\n setCandleStyle: (s) => candle.set(s),\n subscribeCandleStyle: (cb) => candle.subscribe(cb),\n getPriceScale: () => priceScaleRef.current,\n setPriceScale: (s) => scale.set(s),\n subscribePriceScale: (cb) => scale.subscribe(cb),\n getSessions: () => sessionsRef.current,\n setSessions: (s) => sess.set(s),\n subscribeSessions: (cb) => sess.subscribe(cb),\n getWatermark: () => ({ ...watermarkRef.current }),\n setWatermark: (opts) => setWatermark(opts),\n subscribeWatermark: (cb) => {\n wmSubs.current.add(cb);\n return () => wmSubs.current.delete(cb);\n },\n getPriceLabels: () => ({ ...priceLabelsRef.current }),\n setPriceLabels: (opts) => setPriceLabels(opts),\n subscribePriceLabels: (cb) => {\n plSubs.current.add(cb);\n return () => plSubs.current.delete(cb);\n },\n getBrushStyle: (tool) => drawings.getBrushStyle(tool),\n setBrushStyle: (tool, style) => drawings.setBrushStyle(tool, style),\n subscribeBrush: (cb) => drawings.subscribeBrush(cb),\n getTextStyle: () => drawings.getTextStyle(),\n setTextStyle: (style) => drawings.setTextStyle(style),\n subscribeTextStyle: (cb) => drawings.subscribeTextStyle(cb),\n // Drawing management tooling (#35) -----------------------------------\n setDrawingsLocked: (locked) => drawings.setDrawingsLocked(locked),\n getDrawingsLocked: () => drawings.getDrawingsLocked(),\n setDrawingsVisible: (visible) => drawings.setDrawingsVisible(visible),\n getDrawingsVisible: () => drawings.getDrawingsVisible(),\n subscribeDrawingsVisible: (cb) => drawings.subscribeDrawingsVisible(cb),\n saveDrawingTemplate: (name) => drawings.saveDrawingTemplate(name),\n applyDrawingTemplate: (name) => drawings.applyDrawingTemplate(name),\n listDrawingTemplates: () => drawings.listDrawingTemplates(),\n deleteDrawingTemplate: (name) => drawings.deleteDrawingTemplate(name),\n subscribeDrawingTemplates: (cb) => drawings.subscribeDrawingTemplates(cb),\n cloneLastDrawing: () => drawings.cloneLastDrawing(),\n // Data window — per-indicator rows (#45) ------------------------------\n listIndicatorRows: (): IndicatorRow[] =>\n (chartRef.current?.getIndicators() ?? [])\n .filter((i) => isUserIndicator(i.name))\n .map((i) => ({ name: i.name, visible: i.visible })),\n setIndicatorVisible: (name, visible) => {\n chartRef.current?.overrideIndicator({ name, visible });\n notifyIndicators();\n },\n subscribeIndicators: (cb) => {\n indicatorSubs.current.add(cb);\n return () => indicatorSubs.current.delete(cb);\n },\n // Object tree — per-drawing rows (#45) --------------------------------\n listDrawings: () => drawings.listDrawings(),\n setDrawingVisible: (id, visible) => drawings.setDrawingVisible(id, visible),\n setDrawingLocked: (id, locked) => drawings.setDrawingLocked(id, locked),\n removeDrawing: (id) => drawings.removeDrawing(id),\n locateDrawing: (id) => drawings.locateDrawing(id),\n setDrawingZOrder: (id, mode) => drawings.setDrawingZOrder(id, mode),\n copyDrawing: (id) => drawings.copyDrawing(id),\n pasteDrawing: () => drawings.pasteDrawing(),\n canPasteDrawing: () => drawings.canPaste(),\n getSelectedDrawing: () => drawings.getSelectedDrawing(),\n // Range bar — zoom the window to the last `ms` of data (#45) -----------\n setVisibleDuration: (ms) => {\n const chart = chartRef.current;\n if (!chart) return;\n const data = chart.getDataList();\n if (data.length < 2) return;\n const startTs = data[data.length - 1].timestamp - ms;\n // First loaded bar at/after the window start (data is small; scan once).\n let idx = 0;\n for (let i = 0; i < data.length; i++) {\n if (data[i].timestamp >= startTs) {\n idx = i;\n break;\n }\n }\n const targetBars = Math.max(2, data.length - idx);\n // Use the actual plot width (excludes the y-axis, independent of the\n // current zoom) so bar space is computed the same way every time — a\n // range set from any prior zoom lands on the identical window, and\n // re-picking a narrower range zooms back in instead of sticking.\n const plotWidth = chart.getSize(CANDLE_PANE, \"main\")?.width ?? 0;\n if (plotWidth <= 0) return;\n chart.setBarSpace(plotWidth / targetBars);\n chart.scrollToRealTime();\n },\n // Navigation (#45) ----------------------------------------------------\n scrollToTimestamp: (ts) => chartRef.current?.scrollToTimestamp(ts),\n scrollToRealTime: () => chartRef.current?.scrollToRealTime(),\n zoomIn: () => chartRef.current?.zoomAtCoordinate(1.5),\n zoomOut: () => chartRef.current?.zoomAtCoordinate(0.6667),\n // Custom header (#45) -------------------------------------------------\n subscribeHeaderBar: (cb) => {\n headerSubs.current.add(cb);\n // Seed with the latest bar so a late-mounting header isn't blank.\n const list = chartRef.current?.getDataList() ?? [];\n const n = list.length;\n cb(n ? list[n - 1] : null, n > 1 ? list[n - 2] : null);\n return () => headerSubs.current.delete(cb);\n },\n }),\n // paneHeights/priceScale captured by closure; recreated per render is fine.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [],\n );\n\n // Keyboard shortcuts (#14). The listener lives on the chart container, so it\n // only fires while focus is within the chart — global typing (symbol search,\n // settings) is never hijacked. Every recognized shortcut notifies the host\n // via `onShortcut`; the built-in runs too (delete is gated on no armed tool).\n useEffect(() => {\n const el = elRef.current;\n if (!el || !keyboard) return;\n const onKeyDown = (e: KeyboardEvent) => {\n if (isEditableTarget(e.target)) return; // never hijack an input/typing\n const action: ShortcutAction | null = resolveShortcut(e);\n if (!action) return;\n // Let the host observe/extend first, even when a built-in also handles it.\n onShortcutRef.current?.(action, e);\n const api = handleRef.current;\n if (!api) return;\n if (action === \"escape\") {\n api.cancelDrawing();\n } else if (action === \"undo\") {\n api.undo();\n e.preventDefault();\n } else if (action === \"redo\") {\n api.redo();\n e.preventDefault();\n } else if (action === \"delete\") {\n // Clear only when no tool is armed — Escape cancels an armed draw, so\n // Delete/Backspace here removes the finished user drawings.\n if (!api.activeDrawing()) {\n api.clearDrawings();\n e.preventDefault();\n }\n } else if (action === \"copy\") {\n // Only consume Cmd/Ctrl+C when a drawing is selected — otherwise leave\n // the browser's normal copy alone.\n const sel = api.getSelectedDrawing();\n if (sel) {\n api.copyDrawing(sel);\n e.preventDefault();\n }\n } else if (action === \"paste\") {\n if (api.canPasteDrawing()) {\n api.pasteDrawing();\n e.preventDefault();\n }\n }\n };\n el.addEventListener(\"keydown\", onKeyDown);\n return () => el.removeEventListener(\"keydown\", onKeyDown);\n }, [keyboard]);\n\n // Create the chart, wire the data loader, resolve + load the symbol.\n useEffect(() => {\n const el = elRef.current;\n if (!el) return;\n el.id = idRef.current;\n\n const options: Options = {\n timezone: timezoneRef.current,\n // Widen KLineChart's default bar-space limits (min 1 / max 50). The 50-px\n // cap silently no-ops setBarSpace, so a short lookback (e.g. \"1D\" with few\n // bars over a wide plot) could never zoom in far enough to apply.\n layout: { ...(yAxisLayout(priceScale) ?? {}), barSpaceLimit: { min: 0.3, max: 1000 } },\n };\n const chart = init(el, options);\n if (!chart) return;\n chartRef.current = chart;\n // Signal the reconcile effects to (re)apply session tint / pattern markers\n // on this fresh chart.\n setChartEpoch((e) => e + 1);\n chart.setStyles(mergeStyles(themeStyleObj, styles));\n // Feed a custom header (#45): the hovered bar while the crosshair is over a\n // bar, else fall back to the latest bar.\n chart.subscribeAction(\"onCrosshairChange\", (d) => {\n const cross = d as { kLineData?: KLineData; dataIndex?: number } | undefined;\n const k = cross?.kLineData;\n if (k && typeof cross?.dataIndex === \"number\") {\n crosshairActiveRef.current = true;\n const list = chart.getDataList();\n headerSubs.current.forEach((cb) => cb(k, cross.dataIndex! > 0 ? list[cross.dataIndex! - 1] : null));\n } else {\n crosshairActiveRef.current = false;\n emitLatestHeader();\n }\n });\n // Candle rendering style (#1).\n applyCandleStyle(chart, candleStyleRef.current, themeStyleObj, baseTheme);\n // Price-scale labels (#41) — last value/line + high/low marks.\n applyPriceLabels(chart, priceLabelsRef.current);\n // Crosshair date/price formatting (#46), default: TV-style date+time pill.\n applyFormatter(chart);\n // Candle legend without the time row: the hovered bar's time lives in the\n // crosshair x-axis pill instead (like TradingView), leaving the legend to\n // show O/H/L/C/V colored by candle direction.\n chart.setStyles({\n candle: {\n tooltip: {\n // Fully hide the built-in legend when the host renders its own header\n // (returning [] from the template isn't enough — KLineChart then falls\n // back to its DEFAULT legend). The crosshair is a separate style.\n showRule: legend ? \"follow_cross\" : \"none\",\n legend: {\n // Single-line TradingView-style header: `TICKER · interval · source`\n // then O/H/L/C colored by the bar direction, the change vs the prior\n // bar's close (value + %), and volume.\n template: (data: { current: Nullable<KLineData>; prev: Nullable<KLineData> }): { title: Tip; value: Tip }[] => {\n const k = data.current;\n if (!k || !legendRef.current) return []; // host renders its own header\n\n const pal = themeRef.current === \"dark\" ? PALETTE.DARK : PALETTE.LIGHT;\n const label = pal.muted;\n const dir = (k.close ?? 0) >= (k.open ?? 0) ? PALETTE.GREEN : PALETTE.RED;\n const price = (v?: number) =>\n formatWithUnit(\n priceFormatterRef.current\n ? priceFormatterRef.current(v ?? 0)\n : utils.formatThousands(utils.formatPrecision(v ?? 0, pricePrecRef.current), \",\"),\n quoteRef.current,\n );\n const head = `${bareTicker(symbol).toUpperCase()} · ${intervalLabel(interval)}${sourceRef.current ? ` · ${sourceRef.current}` : \"\"}`;\n const rows: { title: Tip; value: Tip }[] = [\n { title: { text: head, color: pal.text }, value: { text: \"\", color: pal.text } },\n { title: { text: \"O\", color: label }, value: { text: price(k.open), color: dir } },\n { title: { text: \"H\", color: label }, value: { text: price(k.high), color: dir } },\n { title: { text: \"L\", color: label }, value: { text: price(k.low), color: dir } },\n { title: { text: \"C\", color: label }, value: { text: price(k.close), color: dir } },\n ];\n // Change vs the previous bar's close (skipped on the first bar).\n const pc = data.prev?.close;\n if (typeof pc === \"number\" && pc !== 0 && typeof k.close === \"number\") {\n const chg = k.close - pc;\n const up = chg >= 0;\n const s = up ? \"+\" : \"−\";\n const chgTxt = `${s}${price(Math.abs(chg))} (${s}${(Math.abs(chg / pc) * 100).toFixed(2)}%)`;\n rows.push({ title: { text: \"\", color: label }, value: { text: chgTxt, color: up ? PALETTE.GREEN : PALETTE.RED } });\n }\n rows.push({ title: { text: \"V\", color: label }, value: { text: utils.formatBigNumber(k.volume ?? 0), color: label } });\n return rows;\n },\n },\n },\n },\n } as DeepPartial<Styles>);\n // Fresh Heikin Ashi transformer + fresh undo history for this chart.\n haRef.current = new HaTransformer();\n drawings.initHistory();\n\n let unsub = () => {};\n chart.setDataLoader({\n getBars: async ({ type, callback }) => {\n if (type === \"backward\") {\n callback([], false);\n return;\n }\n try {\n const bars = await dataSource.getBars(symbol, interval, barCount);\n const ha = isHeikinAshi(candleStyleRef.current);\n if (ha) haRef.current.seed(bars);\n const shaped = ha ? toHeikinAshi(bars) : bars;\n callback(shaped.map(toKLine), false);\n emitLatestHeader();\n // Compare overlays need the loaded main bars to align to.\n void refreshCompare();\n } catch {\n callback([], false);\n }\n },\n subscribeBar: ({ callback }) => {\n if (dataSource.subscribe) {\n unsub = dataSource.subscribe(symbol, interval, (b) => {\n const shaped = isHeikinAshi(candleStyleRef.current) ? haRef.current.next(b) : b;\n callback(toKLine(shaped));\n emitLatestHeader();\n });\n }\n },\n unsubscribeBar: () => unsub(),\n });\n\n let disposed = false;\n (async () => {\n // Symbol resolution (#8): validate/enrich before loading.\n let info: SymbolInfo = { ticker: symbol };\n if (dataSource.resolveSymbol) {\n const resolved = await dataSource.resolveSymbol(symbol);\n if (disposed) return;\n if (!resolved) {\n onSymbolError?.(symbol);\n return; // unknown symbol — do not load\n }\n info = resolved;\n }\n // Our SymbolInfo is a stricter subset of KLineChart's (which carries an\n // open index signature); every field is a valid quote key, so cast to the\n // exact expected parameter type rather than widening our public type.\n chart.setSymbol(info as unknown as Parameters<typeof chart.setSymbol>[0]);\n pricePrecRef.current = info.pricePrecision ?? 2;\n // Quote metadata (#39): currency/unit decorate the legend + crosshair price.\n quoteRef.current = { currency: info.currency, unit: info.unit };\n chart.setPeriod(toPeriod(interval));\n // Watermark first so it sits at the very back (behind session tint + candles).\n if (watermark.symbol || watermark.interval) {\n chart.createIndicator(\n { name: WATERMARK_INDICATOR, paneId: CANDLE_PANE, zLevel: Z_ORDER.watermark, extendData: buildWatermark(info.ticker ?? symbol, interval, watermark) },\n true,\n );\n }\n // Session tint + pattern markers are (re)applied by their chartEpoch-keyed\n // reconcile effects below, so they survive a chart re-init (interval switch).\n for (const i of indicators) createIndicator(asSpec(i));\n applyPaneHeights();\n onReady?.(chart);\n })();\n\n return () => {\n disposed = true;\n unsub();\n dispose(idRef.current);\n chartRef.current = null;\n overlayIds.current = [];\n };\n // priceScale (scaleKey) re-inits because the scale type/inversion is fixed\n // at init. Toggling Heikin Ashi (haKey) re-inits because it transforms the\n // data feed; plain candle-style swaps do NOT rebuild (handled below).\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [symbol, interval, scaleKey(priceScale), isHeikinAshi(candleStyle) ? \"ha\" : \"std\"]);\n\n // Theme (#46): re-apply the resolved style object (built-in or named/custom)\n // whenever the selector, custom map, or host styles change. Re-applies the\n // candle style too so its bar colors track the new theme.\n useEffect(() => {\n const chart = chartRef.current;\n if (!chart) return;\n chart.setStyles(mergeStyles(themeStyleObj, styles));\n applyCandleStyle(chart, candleStyleRef.current, themeStyleObj, baseTheme);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [theme, styles, customThemes]);\n\n // Candle style (#1): a pure setStyles for non-HA swaps (no rebuild). HA\n // transitions are handled by the create effect's haKey dependency.\n useEffect(() => {\n const chart = chartRef.current;\n if (chart) applyCandleStyle(chart, candleStyle, themeStyleObj, baseTheme);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [candleStyle, theme]);\n\n // Formatter overrides (#46): re-apply when the host changes them at runtime.\n useEffect(() => {\n const chart = chartRef.current;\n if (chart) applyFormatter(chart);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [dateFormat, priceFormatter]);\n\n // Toggle the built-in candle legend when `legend` changes at runtime (#45).\n useEffect(() => {\n chartRef.current?.setStyles({ candle: { tooltip: { showRule: legend ? \"follow_cross\" : \"none\" } } } as DeepPartial<Styles>);\n }, [legend]);\n\n // Price-scale labels reconcile (#41).\n useEffect(() => {\n const chart = chartRef.current;\n if (chart) applyPriceLabels(chart, priceLabels);\n }, [priceLabels]);\n\n // Compare / multi-symbol overlays (#9).\n useEffect(() => {\n void refreshCompare();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [JSON.stringify((compareSeries ?? []).map((c) => [c.symbol, c.color]))]);\n\n // Pane heights reconcile (#7).\n useEffect(() => {\n applyPaneHeights();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [paneHeights]);\n\n // Session tint reconcile (#10).\n useEffect(() => {\n const chart = chartRef.current;\n if (!chart) return;\n const present = chart.getIndicators({ name: SESSION_INDICATOR }).length > 0;\n if (sessions && !present) {\n chart.createIndicator({ name: SESSION_INDICATOR, paneId: CANDLE_PANE, zLevel: Z_ORDER.session, extendData: sessionColors(sessions) }, true);\n } else if (sessions && present) {\n chart.overrideIndicator({ name: SESSION_INDICATOR, extendData: sessionColors(sessions) });\n } else if (!sessions && present) {\n chart.removeIndicator({ name: SESSION_INDICATOR });\n }\n // chartEpoch: re-apply on a fresh chart (e.g. after an interval switch).\n }, [sessions, chartEpoch]);\n\n // Watermark reconcile: create/update/remove, and refresh its ticker+interval\n // text the instant the symbol, interval, or theme changes.\n useEffect(() => {\n const chart = chartRef.current;\n if (!chart) return;\n const present = chart.getIndicators({ name: WATERMARK_INDICATOR }).length > 0;\n const active = watermark.symbol || watermark.interval;\n const ext = buildWatermark(symbol, interval, watermark);\n if (active && !present) {\n chart.createIndicator({ name: WATERMARK_INDICATOR, paneId: CANDLE_PANE, zLevel: Z_ORDER.watermark, extendData: ext }, true);\n } else if (active && present) {\n chart.overrideIndicator({ name: WATERMARK_INDICATOR, extendData: ext });\n } else if (!active && present) {\n chart.removeIndicator({ name: WATERMARK_INDICATOR });\n }\n }, [watermark, symbol, interval, theme]);\n\n // Pattern markers reconcile (#5).\n useEffect(() => {\n const chart = chartRef.current;\n if (!chart) return;\n const present = chart.getIndicators({ name: PATTERN_INDICATOR }).length > 0;\n const has = !!(patterns && patterns.length);\n if (has && !present) {\n chart.createIndicator({ name: PATTERN_INDICATOR, paneId: CANDLE_PANE, zLevel: Z_ORDER.pattern, extendData: patterns }, true);\n } else if (has && present) {\n chart.overrideIndicator({ name: PATTERN_INDICATOR, extendData: patterns });\n } else if (!has && present) {\n chart.removeIndicator({ name: PATTERN_INDICATOR });\n }\n // chartEpoch: re-apply on a fresh chart (e.g. after an interval switch).\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [patterns, chartEpoch]);\n\n // Price-line + order-line overlays. Runs every render (the arrays are usually\n // fresh references), but a signature guard skips the costly rebuild unless the\n // visual content actually changed.\n useEffect(() => {\n const chart = chartRef.current;\n if (!chart) return;\n\n // Refresh the latest onMove handlers regardless of whether we rebuild.\n orderMoveRef.current.clear();\n for (const ol of orderLines ?? []) orderMoveRef.current.set(ol.id, ol.onMove);\n\n const sig = JSON.stringify([\n (priceLines ?? []).map((p) => [p.price, p.color, p.label, p.style]),\n (orderLines ?? []).map((o) => [o.id, o.price, o.color, o.label, o.style, o.draggable]),\n ]);\n if (sig === linesSigRef.current) return; // content unchanged — keep overlays\n linesSigRef.current = sig;\n\n for (const id of overlayIds.current) chart.removeOverlay({ id });\n overlayIds.current = [];\n\n for (const pl of priceLines ?? []) {\n const created = chart.createOverlay({\n name: \"priceLine\",\n points: [{ value: pl.price }],\n lock: true,\n styles: { line: { color: pl.color ?? \"#7d93e8\", style: pl.style === \"dashed\" ? \"dashed\" : \"solid\" } },\n extendData: pl.label,\n });\n if (typeof created === \"string\") overlayIds.current.push(created);\n }\n\n const priceOf = (o: { overlay?: { points?: Array<{ value?: number }> } }): number | null => {\n const v = o?.overlay?.points?.[0]?.value;\n return typeof v === \"number\" ? v : null;\n };\n for (const ol of orderLines ?? []) {\n const draggable = ol.draggable !== false;\n const id = ol.id;\n const created = chart.createOverlay({\n name: \"priceLine\",\n points: [{ value: ol.price }],\n lock: !draggable,\n styles: { line: { color: ol.color ?? \"#e0a33c\", style: ol.style === \"dashed\" ? \"dashed\" : \"solid\" } },\n extendData: ol.label,\n onPressedMoving: (e) => {\n const p = priceOf(e);\n if (p != null) orderMoveRef.current.get(id)?.(p, \"moving\");\n return false;\n },\n onPressedMoveEnd: (e) => {\n const p = priceOf(e);\n if (p != null) orderMoveRef.current.get(id)?.(p, \"end\");\n return false;\n },\n });\n if (typeof created === \"string\") overlayIds.current.push(created);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [priceLines, orderLines]);\n\n return (\n <>\n <div\n ref={elRef}\n tabIndex={0}\n role=\"application\"\n aria-label=\"Sonr chart\"\n className={className}\n style={{ width: \"100%\", height: \"100%\", ...style }}\n />\n {textEdit &&\n typeof document !== \"undefined\" &&\n createPortal(\n <input\n className=\"sonr-text-input\"\n aria-label=\"Chart text label\"\n autoFocus\n value={textEdit.value}\n placeholder=\"Text\"\n style={{ position: \"fixed\", left: textEdit.left, top: textEdit.top, zIndex: 2147483002 }}\n onChange={(e) => setTextEdit((c) => (c ? { ...c, value: e.target.value } : c))}\n onKeyDown={(e) => {\n if (e.key === \"Enter\") {\n e.preventDefault();\n commitText();\n } else if (e.key === \"Escape\") {\n e.preventDefault();\n cancelText();\n }\n }}\n onBlur={commitText}\n />,\n document.body,\n )}\n </>\n );\n});\n","/**\n * @license\n * KLineChart v10.0.3\n * Copyright (c) 2019 lihu.\n * Licensed under Apache License 2.0 https://www.apache.org/licenses/LICENSE-2.0\n */\n/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise, SuppressedError, Symbol, Iterator */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nfunction __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nvar __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n };\r\n return __assign.apply(this, arguments);\r\n};\r\n\r\nfunction __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nfunction __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nfunction __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === \"function\" ? Iterator : Object).prototype);\r\n return g.next = verb(0), g[\"throw\"] = verb(1), g[\"return\"] = verb(2), typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nfunction __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nfunction __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\nfunction __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n}\r\n\r\ntypeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\r\n var e = new Error(message);\r\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\r\n};\n\n/**\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n\n * http://www.apache.org/licenses/LICENSE-2.0\n\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n// biome-ignore lint/suspicious/noExplicitAny: This recursive utility accepts arbitrary object shapes.\nfunction merge(target, source) {\n if (!isObject(target) && !isObject(source)) {\n return;\n }\n for (var key in source) {\n // biome-ignore lint/suspicious/noPrototypeBuiltins: Object.hasOwn is unavailable for the ES5 target.\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n var targetProp = target[key];\n var sourceProp = source[key];\n if (isObject(sourceProp) && isObject(targetProp)) {\n merge(targetProp, sourceProp);\n }\n else {\n target[key] = clone(sourceProp);\n }\n }\n }\n}\nfunction clone(target) {\n if (!isObject(target)) {\n return target;\n }\n // biome-ignore lint/suspicious/noExplicitAny: The cloned container is populated dynamically.\n var copy = null;\n if (isArray(target)) {\n copy = [];\n }\n else {\n copy = {};\n }\n for (var key in target) {\n // biome-ignore lint/suspicious/noPrototypeBuiltins: Object.hasOwn is unavailable for the ES5 target.\n if (Object.prototype.hasOwnProperty.call(target, key)) {\n var v = target[key];\n if (isObject(v)) {\n copy[key] = clone(v);\n }\n else {\n copy[key] = v;\n }\n }\n }\n return copy;\n}\nfunction isArray(value) {\n return Object.prototype.toString.call(value) === '[object Array]';\n}\nfunction isFunction(value) {\n return typeof value === 'function';\n}\nfunction isObject(value) {\n return typeof value === 'object' && isValid(value);\n}\nfunction isNumber(value) {\n return typeof value === 'number' && Number.isFinite(value);\n}\nfunction isValid(value) {\n return value !== null && value !== undefined;\n}\nfunction isBoolean(value) {\n return typeof value === 'boolean';\n}\nfunction isString(value) {\n return typeof value === 'string';\n}\n\n/**\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n\n * http://www.apache.org/licenses/LICENSE-2.0\n\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar DEFAULT_REQUEST_ID = -1;\nfunction requestAnimationFrame(fn) {\n if (isFunction(window.requestAnimationFrame)) {\n return window.requestAnimationFrame(fn);\n }\n return window.setTimeout(fn, 20);\n}\nfunction cancelAnimationFrame(id) {\n if (isFunction(window.cancelAnimationFrame)) {\n window.cancelAnimationFrame(id);\n }\n else {\n window.clearTimeout(id);\n }\n}\n\n/**\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n\n * http://www.apache.org/licenses/LICENSE-2.0\n\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar Animation = /** @class */ (function () {\n function Animation(options) {\n this._options = { duration: 500, iterationCount: 1 };\n this._currentIterationCount = 0;\n this._running = false;\n this._requestAnimationId = DEFAULT_REQUEST_ID;\n this._time = 0;\n merge(this._options, options);\n }\n Animation.prototype._loop = function () {\n var _this = this;\n this._running = true;\n this._time = performance.now();\n var step = function (timestamp) {\n var _a;\n _this._requestAnimationId = DEFAULT_REQUEST_ID;\n if (_this._running) {\n var time = typeof timestamp === 'number' ? timestamp : performance.now();\n var diffTime = Math.max(0, time - _this._time);\n if (diffTime < _this._options.duration) {\n (_a = _this._doFrameCallback) === null || _a === void 0 ? void 0 : _a.call(_this, diffTime);\n if (_this._running && _this._requestAnimationId === DEFAULT_REQUEST_ID) {\n _this._requestAnimationId = requestAnimationFrame(step);\n }\n }\n else {\n _this.stop();\n _this._currentIterationCount++;\n if (_this._currentIterationCount < _this._options.iterationCount) {\n _this._loop();\n }\n }\n }\n };\n this._requestAnimationId = requestAnimationFrame(step);\n };\n Animation.prototype.doFrame = function (callback) {\n this._doFrameCallback = callback;\n return this;\n };\n Animation.prototype.setDuration = function (duration) {\n this._options.duration = duration;\n return this;\n };\n Animation.prototype.setIterationCount = function (iterationCount) {\n this._options.iterationCount = iterationCount;\n return this;\n };\n Animation.prototype.start = function () {\n if (!this._running) {\n this._currentIterationCount = 0;\n this._loop();\n }\n };\n Animation.prototype.stop = function () {\n var _a;\n if (this._running) {\n this.cancel();\n (_a = this._doFrameCallback) === null || _a === void 0 ? void 0 : _a.call(this, this._options.duration);\n }\n this._running = false;\n };\n Animation.prototype.cancel = function () {\n if (this._requestAnimationId !== DEFAULT_REQUEST_ID) {\n cancelAnimationFrame(this._requestAnimationId);\n this._requestAnimationId = DEFAULT_REQUEST_ID;\n }\n this._running = false;\n };\n return Animation;\n}());\n\n/**\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n\n * http://www.apache.org/licenses/LICENSE-2.0\n\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nfunction createDefaultBounding(bounding) {\n var defaultBounding = {\n width: 0,\n height: 0,\n left: 0,\n right: 0,\n top: 0,\n bottom: 0\n };\n if (isValid(bounding)) {\n merge(defaultBounding, bounding);\n }\n return defaultBounding;\n}\n\n/**\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n\n * http://www.apache.org/licenses/LICENSE-2.0\n\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar measureCtx = null;\n/**\n * Get pixel ratio\n * @param canvas\n * @returns {number}\n */\nfunction getPixelRatio(canvas) {\n var _a, _b;\n return (_b = (_a = canvas.ownerDocument.defaultView) === null || _a === void 0 ? void 0 : _a.devicePixelRatio) !== null && _b !== void 0 ? _b : 1;\n}\nfunction createFont(size, weight, family) {\n return \"\".concat(weight !== null && weight !== void 0 ? weight : 'normal', \" \").concat(size !== null && size !== void 0 ? size : 12, \"px \").concat(family !== null && family !== void 0 ? family : 'Helvetica Neue');\n}\n/**\n * Measure the width of text\n * @param text\n * @returns {number}\n */\nfunction calcTextWidth(text, size, weight, family) {\n if (!isValid(measureCtx)) {\n var canvas = document.createElement('canvas');\n var pixelRatio = getPixelRatio(canvas);\n measureCtx = canvas.getContext('2d');\n measureCtx.scale(pixelRatio, pixelRatio);\n }\n measureCtx.font = createFont(size, weight, family);\n return Math.round(measureCtx.measureText(text).width);\n}\n\n/**\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n\n * http://www.apache.org/licenses/LICENSE-2.0\n\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Create dom\n * @param tagName\n * @param styles\n * @return {*}\n */\nfunction createDom(tagName, styles) {\n var _a;\n var dom = document.createElement(tagName);\n var s = styles !== null && styles !== void 0 ? styles : {};\n // biome-ignore lint/suspicious/useGuardForIn: CSSStyleDeclaration keys are copied intentionally.\n for (var key in s) {\n dom.style[key] = (_a = s[key]) !== null && _a !== void 0 ? _a : '';\n }\n return dom;\n}\n\n/**\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n\n * http://www.apache.org/licenses/LICENSE-2.0\n\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar baseId = 1;\nvar prevIdTimestamp = Date.now();\nfunction createId(prefix) {\n var timestamp = Date.now();\n if (timestamp === prevIdTimestamp) {\n ++baseId;\n }\n else {\n baseId = 1;\n }\n prevIdTimestamp = timestamp;\n return \"\".concat(prefix !== null && prefix !== void 0 ? prefix : '').concat(timestamp, \"_\").concat(baseId);\n}\n\n/**\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n\n * http://www.apache.org/licenses/LICENSE-2.0\n\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n// @ts-nocheck\nvar DEV = process.env.NODE_ENV === 'development';\nfunction log(templateText, tagStyle, messageStyle, api, invalidParam, append) {\n if (DEV) {\n var apiStr = api !== '' ? \"Call api `\".concat(api, \"`\").concat(invalidParam !== '' || append !== '' ? ', ' : '.') : '';\n var invalidParamStr = invalidParam !== '' ? \"invalid parameter `\".concat(invalidParam, \"`\").concat(append !== '' ? ', ' : '.') : '';\n var appendStr = append !== '' ? append : '';\n console.log(templateText, tagStyle, messageStyle, apiStr, invalidParamStr, appendStr);\n }\n}\nfunction logWarn(api, invalidParam, append) {\n log('%c😑 klinecharts warning%c %s%s%s', 'padding:3px 4px;border-radius:2px;color:#ffffff;background-color:#FF9600', 'color:#FF9600', api, invalidParam, append !== null && append !== void 0 ? append : '');\n}\nfunction logError(api, invalidParam, append) {\n log('%c😟 klinecharts error%c %s%s%s', 'padding:3px 4px;border-radius:2px;color:#ffffff;background-color:#F92855;', 'color:#F92855;', api, invalidParam, append );\n}\nfunction logTag() {\n log('%c❤️ Welcome to klinecharts. Version is 10.0.3', 'border-radius:4px;border:dashed 1px #1677FF;line-height:70px;padding:0 20px;margin:16px 0;font-size:14px;color:#1677FF;', '', '', '', '');\n}\n\n/**\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n\n * http://www.apache.org/licenses/LICENSE-2.0\n\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Binary search for the nearest result\n * @param dataList\n * @param valueKey\n * @param targetValue\n * @return {number}\n */\nfunction binarySearchNearest(dataList, valueKey, targetValue) {\n var left = 0;\n var right = 0;\n for (right = dataList.length - 1; left !== right;) {\n var midIndex = Math.floor((right + left) / 2);\n var mid = right - left;\n var midValue = dataList[midIndex][valueKey];\n if (targetValue === dataList[left][valueKey]) {\n return left;\n }\n if (targetValue === dataList[right][valueKey]) {\n return right;\n }\n if (targetValue === midValue) {\n return midIndex;\n }\n if (targetValue > midValue) {\n left = midIndex;\n }\n else {\n right = midIndex;\n }\n if (mid <= 2) {\n break;\n }\n }\n return left;\n}\n/**\n * 优化数字\n * @param value\n * @return {number|number}\n */\nfunction nice(value) {\n var exponent = Math.floor(log10(value));\n var exp10 = index10(exponent);\n var f = value / exp10; // 1 <= f < 10\n var nf = 0;\n if (f < 1.5) {\n nf = 1;\n }\n else if (f < 2.5) {\n nf = 2;\n }\n else if (f < 3.5) {\n nf = 3;\n }\n else if (f < 4.5) {\n nf = 4;\n }\n else if (f < 5.5) {\n nf = 5;\n }\n else if (f < 6.5) {\n nf = 6;\n }\n else {\n nf = 8;\n }\n value = nf * exp10;\n return +value.toFixed(Math.abs(exponent));\n}\n/**\n * Round\n * @param value\n * @param precision\n * @return {number}\n */\nfunction round(value, precision) {\n precision = Math.max(0, precision !== null && precision !== void 0 ? precision : 0);\n var pow = Math.pow(10, precision);\n return Math.round(value * pow) / pow;\n}\n/**\n * Get precision\n * @param value\n * @return {number|number}\n */\nfunction getPrecision(value) {\n var str = value.toString();\n var eIndex = str.indexOf('e');\n if (eIndex > 0) {\n var precision = +str.slice(eIndex + 1);\n return precision < 0 ? -precision : 0;\n }\n var dotIndex = str.indexOf('.');\n return dotIndex < 0 ? 0 : str.length - 1 - dotIndex;\n}\nfunction getMaxMin(dataList, maxKey, minKey) {\n var _a, _b;\n var maxMin = [Number.MIN_SAFE_INTEGER, Number.MAX_SAFE_INTEGER];\n var dataLength = dataList.length;\n var index = 0;\n while (index < dataLength) {\n var data = dataList[index];\n maxMin[0] = Math.max(((_a = data[maxKey]) !== null && _a !== void 0 ? _a : Number.MIN_SAFE_INTEGER), maxMin[0]);\n maxMin[1] = Math.min(((_b = data[minKey]) !== null && _b !== void 0 ? _b : Number.MAX_SAFE_INTEGER), maxMin[1]);\n ++index;\n }\n return maxMin;\n}\n/**\n * log10\n * @param value\n * @return {number}\n */\nfunction log10(value) {\n if (value === 0) {\n return 0;\n }\n return Math.log10(value);\n}\n/**\n * index 10\n * @param value\n * @return {number}\n */\nfunction index10(value) {\n return Math.pow(10, value);\n}\n\n/**\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n\n * http://www.apache.org/licenses/LICENSE-2.0\n\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar SymbolDefaultPrecisionConstants = {\n PRICE: 2,\n VOLUME: 0\n};\n\n/**\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n\n * http://www.apache.org/licenses/LICENSE-2.0\n\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar reEscapeChar = /\\\\(\\\\)?/g;\nvar rePropName = new RegExp('[^.[\\\\]]+' + '|' + '\\\\[(?:' + '([^\"\\'][^[]*)' + '|' + '([\"\\'])((?:(?!\\\\2)[^\\\\\\\\]|\\\\\\\\.)*?)\\\\2' + ')\\\\]' + '|' + '(?=(?:\\\\.|\\\\[\\\\])(?:\\\\.|\\\\[\\\\]|$))', 'g');\nfunction formatValue(data, key, defaultValue) {\n // Fast path: simple single-segment key without path separators.\n // `rePropName` below splits on '.', '[', and ']', so a key containing any of those\n // is compound and must take the general path. A separator-free key parses to a\n // single-element `path` and resolves to `data[key]`, which an inline read matches exactly.\n // This avoids a regex match + closure + array allocation per call, which matters in hot paths\n // (e.g. `eachFigures` runs 4 `formatValue` calls per visible bar per indicator).\n if (key.length > 0 && !key.includes('.') && !key.includes('[') && !key.includes(']')) {\n if (isValid(data)) {\n var value = data[key];\n return isValid(value) ? value : (defaultValue !== null && defaultValue !== void 0 ? defaultValue : '--');\n }\n return defaultValue !== null && defaultValue !== void 0 ? defaultValue : '--';\n }\n if (isValid(data)) {\n var path_1 = [];\n key.replace(rePropName, function (subString) {\n var args = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n args[_i - 1] = arguments[_i];\n }\n var k = subString;\n if (isValid(args[1])) {\n k = args[2].replace(reEscapeChar, '$1');\n }\n else if (isValid(args[0])) {\n k = args[0].trim();\n }\n path_1.push(k);\n return '';\n });\n var value = data;\n var index = 0;\n var length_1 = path_1.length;\n while (isValid(value) && index < length_1) {\n value = value === null || value === void 0 ? void 0 : value[path_1[index++]];\n }\n return isValid(value) ? value : (defaultValue !== null && defaultValue !== void 0 ? defaultValue : '--');\n }\n return defaultValue !== null && defaultValue !== void 0 ? defaultValue : '--';\n}\nfunction formatTimestampToDateTime(dateTimeFormat, timestamp) {\n var date = {};\n dateTimeFormat.formatToParts(new Date(timestamp)).forEach(function (_a) {\n var type = _a.type, value = _a.value;\n switch (type) {\n case 'year': {\n date.YYYY = value;\n break;\n }\n case 'month': {\n date.MM = value;\n break;\n }\n case 'day': {\n date.DD = value;\n break;\n }\n case 'hour': {\n date.HH = value === '24' ? '00' : value;\n break;\n }\n case 'minute': {\n date.mm = value;\n break;\n }\n case 'second': {\n date.ss = value;\n break;\n }\n }\n });\n return date;\n}\nfunction formatTimestampByTemplate(dateTimeFormat, timestamp, template) {\n var date = formatTimestampToDateTime(dateTimeFormat, timestamp);\n return template.replace(/YYYY|MM|DD|HH|mm|ss/g, function (key) { return date[key]; });\n}\nfunction formatPrecision(value, precision) {\n var v = +value;\n if (isNumber(v)) {\n return v.toFixed(precision !== null && precision !== void 0 ? precision : 2);\n }\n return \"\".concat(value);\n}\nfunction formatBigNumber(value) {\n var v = +value;\n if (isNumber(v)) {\n var sign = v < 0 ? '-' : '';\n var a = Math.abs(v);\n if (a >= 1000000000) {\n return \"\".concat(sign).concat(+(a / 1000000000).toFixed(3), \"B\");\n }\n if (a >= 1000000) {\n return \"\".concat(sign).concat(+(a / 1000000).toFixed(3), \"M\");\n }\n if (a >= 1000) {\n return \"\".concat(sign).concat(+(a / 1000).toFixed(3), \"K\");\n }\n }\n return \"\".concat(value);\n}\nfunction formatThousands(value, sign) {\n var vl = \"\".concat(value);\n if (sign.length === 0) {\n return vl;\n }\n if (vl.includes('.')) {\n var arr = vl.split('.');\n return \"\".concat(arr[0].replace(/(\\d)(?=(\\d{3})+$)/g, function ($1) { return \"\".concat($1).concat(sign); }), \".\").concat(arr[1]);\n }\n return vl.replace(/(\\d)(?=(\\d{3})+$)/g, function ($1) { return \"\".concat($1).concat(sign); });\n}\nfunction formatFoldDecimal(value, threshold) {\n var vl = \"\".concat(value);\n var reg = new RegExp('\\\\.0{' + threshold + ',}[1-9][0-9]*$');\n if (reg.test(vl)) {\n var result = vl.split('.');\n var lastIndex = result.length - 1;\n var v = result[lastIndex];\n var match = /0*/.exec(v);\n if (isValid(match)) {\n var count = match[0].length;\n result[lastIndex] = v.replace(/0*/, \"0{\".concat(count, \"}\"));\n return result.join('.');\n }\n }\n return vl;\n}\nfunction formatTemplateString(template, params) {\n return template.replace(/\\{(\\w+)\\}/g, function (_, key) {\n var value = params[key];\n if (isValid(value)) {\n return value;\n }\n return \"{\".concat(key, \"}\");\n });\n}\n\n/**\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n\n * http://www.apache.org/licenses/LICENSE-2.0\n\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar PaneIdConstants = {\n CANDLE: 'candle_pane',\n INDICATOR: 'indicator_pane_',\n X_AXIS: 'x_axis_pane'\n};\n\n/**\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n\n * http://www.apache.org/licenses/LICENSE-2.0\n\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar TICK_COUNT = 8;\nfunction getDefaultAxisRange() {\n return {\n from: 0,\n to: 0,\n range: 0,\n realFrom: 0,\n realTo: 0,\n realRange: 0,\n displayFrom: 0,\n displayTo: 0,\n displayRange: 0\n };\n}\nvar AxisImp = /** @class */ (function () {\n function AxisImp(parent) {\n this.scrollZoomEnabled = true;\n this._range = getDefaultAxisRange();\n this._prevRange = getDefaultAxisRange();\n this._ticks = [];\n this._autoCalcTickFlag = true;\n this._parent = parent;\n }\n AxisImp.prototype.getParent = function () {\n return this._parent;\n };\n AxisImp.prototype.buildTicks = function (force) {\n if (this._autoCalcTickFlag) {\n this._range = this.createRangeImp();\n }\n if (this._prevRange.from !== this._range.from || this._prevRange.to !== this._range.to || force) {\n this._prevRange = this._range;\n this._ticks = this.createTicksImp();\n return true;\n }\n return false;\n };\n AxisImp.prototype.getTicks = function () {\n return this._ticks;\n };\n AxisImp.prototype.setRange = function (range) {\n this._autoCalcTickFlag = false;\n this._range = range;\n };\n AxisImp.prototype.getRange = function () {\n return this._range;\n };\n AxisImp.prototype.setAutoCalcTickFlag = function (flag) {\n this._autoCalcTickFlag = flag;\n };\n AxisImp.prototype.getAutoCalcTickFlag = function () {\n return this._autoCalcTickFlag;\n };\n return AxisImp;\n}());\n\n/**\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n\n * http://www.apache.org/licenses/LICENSE-2.0\n\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar Y_AXIS_ID_PREFIX = 'yAxis_';\nvar YAxisImp = /** @class */ (function (_super) {\n __extends(YAxisImp, _super);\n function YAxisImp(parent, yAxis) {\n var _this = _super.call(this, parent) || this;\n _this.id = '';\n _this.paneId = '';\n _this.reverse = false;\n _this.inside = false;\n _this.position = 'right';\n _this.gap = {\n top: 0.2,\n bottom: 0.1\n };\n _this.createRange = function (params) { return params.defaultRange; };\n _this.minSpan = function (precision) { return index10(-precision); };\n _this.valueToRealValue = function (value) { return value; };\n _this.realValueToDisplayValue = function (value) { return value; };\n _this.displayValueToRealValue = function (value) { return value; };\n _this.realValueToValue = function (value) { return value; };\n _this.displayValueToText = function (value, precision) { return formatPrecision(value, precision); };\n var minSpan = yAxis.minSpan, valueToRealValue = yAxis.valueToRealValue, realValueToDisplayValue = yAxis.realValueToDisplayValue, displayValueToRealValue = yAxis.displayValueToRealValue, realValueToValue = yAxis.realValueToValue, displayValueToText = yAxis.displayValueToText, others = __rest(yAxis, [\"minSpan\", \"valueToRealValue\", \"realValueToDisplayValue\", \"displayValueToRealValue\", \"realValueToValue\", \"displayValueToText\"]);\n if (isFunction(minSpan)) {\n _this.minSpan = minSpan;\n }\n if (isFunction(valueToRealValue)) {\n _this.valueToRealValue = valueToRealValue;\n }\n if (isFunction(realValueToDisplayValue)) {\n _this.realValueToDisplayValue = realValueToDisplayValue;\n }\n if (isFunction(displayValueToRealValue)) {\n _this.displayValueToRealValue = displayValueToRealValue;\n }\n if (isFunction(realValueToValue)) {\n _this.realValueToValue = realValueToValue;\n }\n if (isFunction(displayValueToText)) {\n _this.displayValueToText = displayValueToText;\n }\n _this.override(others);\n return _this;\n }\n YAxisImp.prototype.override = function (yAxis) {\n var id = yAxis.id, name = yAxis.name, gap = yAxis.gap, others = __rest(yAxis, [\"id\", \"name\", \"gap\"]);\n if (isValid(id) && this.id.length === 0) {\n this.id = id;\n }\n if (!isString(this.name) && isString(name)) {\n this.name = name;\n }\n merge(this.gap, gap);\n merge(this, others);\n };\n YAxisImp.prototype._getIndicatorsByYAxisIds = function () {\n var parent = this.getParent();\n var ids = new Set([this.id]);\n if (parent.isManualYAxis(this.id)) {\n var defaultYAxisId = parent.getDefaultYAxisId();\n if (isValid(defaultYAxisId)) {\n ids.add(defaultYAxisId);\n }\n }\n return parent\n .getChart()\n .getChartStore()\n .getIndicatorsByPaneId(parent.getId())\n .filter(function (indicator) { return ids.has(indicator.yAxisId); });\n };\n YAxisImp.prototype._shouldUseCandleData = function () {\n var parent = this.getParent();\n return this.isInCandle() && (parent.isDefaultYAxis(this.id) || parent.isManualYAxis(this.id));\n };\n YAxisImp.prototype.createRangeImp = function () {\n var _a, _b;\n var parent = this.getParent();\n var chart = parent.getChart();\n var chartStore = chart.getChartStore();\n var paneId = parent.getId();\n var min = Number.MAX_SAFE_INTEGER;\n var max = Number.MIN_SAFE_INTEGER;\n var shouldOhlc = false;\n var specifyMin = Number.MAX_SAFE_INTEGER;\n var specifyMax = Number.MIN_SAFE_INTEGER;\n var indicatorPrecision = Number.MAX_SAFE_INTEGER;\n var indicators = this._getIndicatorsByYAxisIds();\n indicators.forEach(function (indicator) {\n shouldOhlc || (shouldOhlc = indicator.shouldOhlc);\n indicatorPrecision = Math.min(indicatorPrecision, indicator.precision);\n if (isNumber(indicator.minValue)) {\n specifyMin = Math.min(specifyMin, indicator.minValue);\n }\n if (isNumber(indicator.maxValue)) {\n specifyMax = Math.max(specifyMax, indicator.maxValue);\n }\n });\n var precision = 4;\n var inCandle = this.isInCandle();\n if (inCandle) {\n var pricePrecision = (_b = (_a = chartStore.getSymbol()) === null || _a === void 0 ? void 0 : _a.pricePrecision) !== null && _b !== void 0 ? _b : SymbolDefaultPrecisionConstants.PRICE;\n if (indicatorPrecision !== Number.MAX_SAFE_INTEGER) {\n precision = Math.min(indicatorPrecision, pricePrecision);\n }\n else {\n precision = pricePrecision;\n }\n }\n else {\n if (indicatorPrecision !== Number.MAX_SAFE_INTEGER) {\n precision = indicatorPrecision;\n }\n }\n var visibleRangeDataList = chartStore.getVisibleRangeDataList();\n var candleStyles = chart.getStyles().candle;\n var isArea = candleStyles.type === 'area';\n var areaValueKey = candleStyles.area.value;\n var shouldUseCandleData = this._shouldUseCandleData();\n var shouldCompareHighLow = (shouldUseCandleData && !isArea) || (!inCandle && shouldOhlc);\n visibleRangeDataList.forEach(function (visibleData) {\n var dataIndex = visibleData.dataIndex;\n var data = visibleData.data.current;\n if (isValid(data)) {\n if (shouldCompareHighLow) {\n min = Math.min(min, data.low);\n max = Math.max(max, data.high);\n }\n if (shouldUseCandleData && isArea) {\n var value = data[areaValueKey];\n if (isNumber(value)) {\n min = Math.min(min, value);\n max = Math.max(max, value);\n }\n }\n }\n indicators.forEach(function (_a) {\n var _b;\n var result = _a.result, figures = _a.figures;\n var data = (_b = result[dataIndex]) !== null && _b !== void 0 ? _b : {};\n figures.forEach(function (figure) {\n var value = data[figure.key];\n if (isNumber(value)) {\n min = Math.min(min, value);\n max = Math.max(max, value);\n }\n });\n });\n });\n if (min !== Number.MAX_SAFE_INTEGER && max !== Number.MIN_SAFE_INTEGER) {\n min = Math.min(specifyMin, min);\n max = Math.max(specifyMax, max);\n }\n else {\n min = 0;\n max = 10;\n }\n var defaultDiff = max - min;\n var defaultRange = {\n from: min,\n to: max,\n range: defaultDiff,\n realFrom: min,\n realTo: max,\n realRange: defaultDiff,\n displayFrom: min,\n displayTo: max,\n displayRange: defaultDiff\n };\n var range = this.createRange({\n chart: chart,\n paneId: paneId,\n defaultRange: defaultRange\n });\n var realFrom = range.realFrom;\n var realTo = range.realTo;\n var realRange = range.realRange;\n var minSpan = this.minSpan(precision);\n if (realFrom === realTo || realRange < minSpan) {\n var minCheck = specifyMin === realFrom;\n var maxCheck = specifyMax === realTo;\n var halfTickCount = TICK_COUNT / 2;\n realFrom = minCheck ? realFrom : maxCheck ? realFrom - TICK_COUNT * minSpan : realFrom - halfTickCount * minSpan;\n realTo = maxCheck ? realTo : minCheck ? realTo + TICK_COUNT * minSpan : realTo + halfTickCount * minSpan;\n }\n var height = this.getBounding().height;\n var _c = this.gap, top = _c.top, bottom = _c.bottom;\n var topRate = top;\n if (topRate >= 1) {\n topRate = topRate / height;\n }\n var bottomRate = bottom;\n if (bottomRate >= 1) {\n bottomRate = bottomRate / height;\n }\n realRange = realTo - realFrom;\n realFrom = realFrom - realRange * bottomRate;\n realTo = realTo + realRange * topRate;\n var from = this.realValueToValue(realFrom, { range: range });\n var to = this.realValueToValue(realTo, { range: range });\n var displayFrom = this.realValueToDisplayValue(realFrom, { range: range });\n var displayTo = this.realValueToDisplayValue(realTo, { range: range });\n return {\n from: from,\n to: to,\n range: to - from,\n realFrom: realFrom,\n realTo: realTo,\n realRange: realTo - realFrom,\n displayFrom: displayFrom,\n displayTo: displayTo,\n displayRange: displayTo - displayFrom\n };\n };\n /**\n * 是否是蜡烛图轴\n * @return {boolean}\n */\n YAxisImp.prototype.isInCandle = function () {\n return this.getParent().getId() === PaneIdConstants.CANDLE;\n };\n /**\n * 是否从y轴0开始\n * @return {boolean}\n */\n YAxisImp.prototype.isFromZero = function () {\n return (this.position === 'left' && this.inside) || (this.position === 'right' && !this.inside);\n };\n YAxisImp.prototype.createTicksImp = function () {\n var _this = this;\n var _a, _b;\n var range = this.getRange();\n var displayFrom = range.displayFrom, displayTo = range.displayTo, displayRange = range.displayRange;\n var ticks = [];\n if (displayRange >= 0) {\n var interval = nice(displayRange / TICK_COUNT);\n var precision_1 = getPrecision(interval);\n var first = round(Math.ceil(displayFrom / interval) * interval, precision_1);\n var last = round(Math.floor(displayTo / interval) * interval, precision_1);\n var n = 0;\n var f = first;\n if (interval !== 0) {\n while (f <= last) {\n var v = f.toFixed(precision_1);\n ticks[n] = { text: v, coord: 0, value: v };\n ++n;\n f += interval;\n }\n }\n }\n var pane = this.getParent();\n var height = this.getBounding().height;\n var chartStore = pane.getChart().getChartStore();\n var optimalTicks = [];\n var indicators = this._getIndicatorsByYAxisIds();\n var styles = chartStore.getStyles();\n var precision = 0;\n var shouldFormatBigNumber = false;\n if (this._shouldUseCandleData()) {\n precision = (_b = (_a = chartStore.getSymbol()) === null || _a === void 0 ? void 0 : _a.pricePrecision) !== null && _b !== void 0 ? _b : SymbolDefaultPrecisionConstants.PRICE;\n }\n else {\n indicators.forEach(function (indicator) {\n precision = Math.max(precision, indicator.precision);\n shouldFormatBigNumber || (shouldFormatBigNumber = indicator.shouldFormatBigNumber);\n });\n }\n var formatter = chartStore.getInnerFormatter();\n var thousandsSeparator = chartStore.getThousandsSeparator();\n var decimalFold = chartStore.getDecimalFold();\n var textHeight = styles.yAxis.tickText.size;\n var validY = NaN;\n ticks.forEach(function (_a) {\n var value = _a.value;\n var v = _this.displayValueToText(+value, precision);\n var y = _this.convertToPixel(_this.realValueToValue(_this.displayValueToRealValue(+value, { range: range }), { range: range }));\n if (shouldFormatBigNumber) {\n v = formatter.formatBigNumber(value);\n }\n v = decimalFold.format(thousandsSeparator.format(v));\n var validYNumber = isNumber(validY);\n if (y > textHeight && y < height - textHeight && ((validYNumber && Math.abs(validY - y) > textHeight * 2) || !validYNumber)) {\n optimalTicks.push({ text: v, coord: y, value: value });\n validY = y;\n }\n });\n if (isFunction(this.createTicks)) {\n return this.createTicks({\n range: this.getRange(),\n bounding: this.getBounding(),\n defaultTicks: optimalTicks\n });\n }\n return optimalTicks;\n };\n YAxisImp.prototype.getAutoSize = function () {\n var _a, _b;\n var pane = this.getParent();\n var chart = pane.getChart();\n var chartStore = chart.getChartStore();\n var styles = chartStore.getStyles();\n var yAxisStyles = styles.yAxis;\n var width = yAxisStyles.size;\n if (width !== 'auto') {\n return width;\n }\n var yAxisWidth = 0;\n if (yAxisStyles.show) {\n if (yAxisStyles.axisLine.show) {\n yAxisWidth += yAxisStyles.axisLine.size;\n }\n if (yAxisStyles.tickLine.show) {\n yAxisWidth += yAxisStyles.tickLine.length;\n }\n if (yAxisStyles.tickText.show) {\n var textWidth_1 = 0;\n this.getTicks().forEach(function (tick) {\n textWidth_1 = Math.max(textWidth_1, calcTextWidth(tick.text, yAxisStyles.tickText.size, yAxisStyles.tickText.weight, yAxisStyles.tickText.family));\n });\n yAxisWidth += yAxisStyles.tickText.marginStart + yAxisStyles.tickText.marginEnd + textWidth_1;\n }\n }\n var priceMarkStyles = styles.candle.priceMark;\n var lastPriceMarkTextVisible = priceMarkStyles.show && priceMarkStyles.last.show && priceMarkStyles.last.text.show;\n var lastPriceTextWidth = 0;\n var crosshairStyles = styles.crosshair;\n var crosshairHorizontalTextVisible = crosshairStyles.show && crosshairStyles.horizontal.show && crosshairStyles.horizontal.text.show;\n var crosshairHorizontalTextWidth = 0;\n if (lastPriceMarkTextVisible || crosshairHorizontalTextVisible) {\n var pricePrecision = (_b = (_a = chartStore.getSymbol()) === null || _a === void 0 ? void 0 : _a.pricePrecision) !== null && _b !== void 0 ? _b : SymbolDefaultPrecisionConstants.PRICE;\n var max = this.getRange().displayTo;\n if (lastPriceMarkTextVisible) {\n var dataList = chartStore.getDataList();\n var data_1 = dataList[dataList.length - 1];\n if (isValid(data_1)) {\n var _c = priceMarkStyles.last.text, paddingLeft = _c.paddingLeft, paddingRight = _c.paddingRight, size = _c.size, family = _c.family, weight = _c.weight;\n lastPriceTextWidth = paddingLeft + calcTextWidth(formatPrecision(data_1.close, pricePrecision), size, weight, family) + paddingRight;\n var formatExtendText_1 = chartStore.getInnerFormatter().formatExtendText;\n priceMarkStyles.last.extendTexts.forEach(function (item, index) {\n var text = formatExtendText_1({ type: 'last_price', data: data_1, index: index });\n if (text.length > 0 && item.show) {\n lastPriceTextWidth = Math.max(lastPriceTextWidth, item.paddingLeft + calcTextWidth(text, item.size, item.weight, item.family) + item.paddingRight);\n }\n });\n }\n }\n if (crosshairHorizontalTextVisible) {\n var indicators = this._getIndicatorsByYAxisIds();\n var indicatorPrecision_1 = 0;\n var shouldFormatBigNumber_1 = false;\n indicators.forEach(function (indicator) {\n indicatorPrecision_1 = Math.max(indicator.precision, indicatorPrecision_1);\n shouldFormatBigNumber_1 || (shouldFormatBigNumber_1 = indicator.shouldFormatBigNumber);\n });\n var precision = 2;\n if (this._shouldUseCandleData()) {\n var lastValueMarkStyles = styles.indicator.lastValueMark;\n if (lastValueMarkStyles.show && lastValueMarkStyles.text.show) {\n precision = Math.max(indicatorPrecision_1, pricePrecision);\n }\n else {\n precision = pricePrecision;\n }\n }\n else {\n precision = indicatorPrecision_1;\n }\n var valueText = formatPrecision(max, precision);\n if (shouldFormatBigNumber_1) {\n valueText = chartStore.getInnerFormatter().formatBigNumber(valueText);\n }\n valueText = chartStore.getDecimalFold().format(valueText);\n crosshairHorizontalTextWidth +=\n crosshairStyles.horizontal.text.paddingLeft + crosshairStyles.horizontal.text.paddingRight + crosshairStyles.horizontal.text.borderSize * 2 + calcTextWidth(valueText, crosshairStyles.horizontal.text.size, crosshairStyles.horizontal.text.weight, crosshairStyles.horizontal.text.family);\n }\n }\n return Math.max(yAxisWidth, lastPriceTextWidth, crosshairHorizontalTextWidth);\n };\n YAxisImp.prototype.getBounding = function () {\n var _a, _b;\n return (_b = (_a = this.getParent().getYAxisWidgetById(this.id)) === null || _a === void 0 ? void 0 : _a.getBounding()) !== null && _b !== void 0 ? _b : this.getParent().getMainWidget().getBounding();\n };\n YAxisImp.prototype.convertFromPixel = function (pixel) {\n var height = this.getBounding().height;\n var range = this.getRange();\n var realFrom = range.realFrom, realRange = range.realRange;\n var rate = this.reverse ? pixel / height : 1 - pixel / height;\n var realValue = rate * realRange + realFrom;\n return this.realValueToValue(realValue, { range: range });\n };\n YAxisImp.prototype.convertToPixel = function (value) {\n var range = this.getRange();\n var realValue = this.valueToRealValue(value, { range: range });\n var height = this.getBounding().height;\n var realFrom = range.realFrom, realRange = range.realRange;\n var rate = (realValue - realFrom) / realRange;\n return this.reverse ? Math.round(rate * height) : Math.round((1 - rate) * height);\n };\n YAxisImp.prototype.convertToNicePixel = function (value) {\n var height = this.getBounding().height;\n var pixel = this.convertToPixel(value);\n return Math.round(Math.max(height * 0.05, Math.min(pixel, height * 0.98)));\n };\n YAxisImp.extend = function (template) {\n var Custom = /** @class */ (function (_super) {\n __extends(Custom, _super);\n function Custom(parent) {\n return _super.call(this, parent, template) || this;\n }\n return Custom;\n }(YAxisImp));\n return Custom;\n };\n return YAxisImp;\n}(AxisImp));\n\n/**\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n\n * http://www.apache.org/licenses/LICENSE-2.0\n\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nfunction isFF() {\n if (typeof window === 'undefined') {\n return false;\n }\n return window.navigator.userAgent.toLowerCase().includes('firefox');\n}\nfunction isIOS() {\n if (typeof window === 'undefined') {\n return false;\n }\n return /iPhone|iPad|iPod|iOS/.test(window.navigator.userAgent);\n}\nfunction isAppleOS() {\n return /Mac|iPhone|iPad|iPod|iOS/.test(window.navigator.userAgent);\n}\n\n/**\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n\n * http://www.apache.org/licenses/LICENSE-2.0\n\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n// we can use `const name = 500;` but with `const enum` this values will be inlined into code\n// so we do not need to have it as variables\nvar Delay = {\n ResetClick: 500,\n LongTap: 500,\n PreventFiresTouchEvents: 500\n};\nvar ManhattanDistance = {\n CancelClick: 5,\n CancelTap: 5,\n DoubleClick: 5,\n DoubleTap: 30\n};\nvar MouseEventButton = {\n Left: 0,\n Middle: 1,\n Right: 2\n};\nvar TOUCH_MIN_RADIUS = 10;\n// TODO: get rid of a lot of boolean flags, probably we should replace it with some enum\nvar EventHandlerImp = /** @class */ (function () {\n function EventHandlerImp(target, handler, options) {\n var _this = this;\n this._clickCount = 0;\n this._clickTimeoutId = null;\n this._clickCoordinate = { x: Number.NEGATIVE_INFINITY, y: Number.POSITIVE_INFINITY };\n this._tapCount = 0;\n this._tapTimeoutId = null;\n this._tapCoordinate = { x: Number.NEGATIVE_INFINITY, y: Number.POSITIVE_INFINITY };\n this._longTapTimeoutId = null;\n this._longTapActive = false;\n this._mouseMoveStartCoordinate = null;\n this._touchMoveStartCoordinate = null;\n this._touchMoveExceededManhattanDistance = false;\n this._cancelClick = false;\n this._cancelTap = false;\n this._unsubscribeOutsideMouseEvents = null;\n this._unsubscribeOutsideTouchEvents = null;\n this._unsubscribeMobileSafariEvents = null;\n this._unsubscribeMousemove = null;\n this._unsubscribeMouseWheel = null;\n this._unsubscribeContextMenu = null;\n this._unsubscribeRootMouseEvents = null;\n this._unsubscribeRootTouchEvents = null;\n this._startPinchMiddleCoordinate = null;\n this._startPinchDistance = 0;\n this._pinchPrevented = false;\n this._preventTouchDragProcess = false;\n this._mousePressed = false;\n this._lastTouchEventTimeStamp = 0;\n // for touchstart/touchmove/touchend events we handle only first touch\n // i.e. we don't support several active touches at the same time (except pinch event)\n this._activeTouchId = null;\n // accept all mouse leave events if it's not an iOS device\n // see _mouseEnterHandler, _mouseMoveHandler, _mouseLeaveHandler\n this._acceptMouseLeave = !isIOS();\n /**\n * In Firefox mouse events dont't fire if the mouse position is outside of the browser's border.\n * To prevent the mouse from hanging while pressed we're subscribing on the mouseleave event of the document element.\n * We're subscribing on mouseleave, but this event is actually fired on mouseup outside of the browser's border.\n */\n this._onFirefoxOutsideMouseUp = function (mouseUpEvent) {\n _this._mouseUpHandler(mouseUpEvent);\n };\n /**\n * Safari doesn't fire touchstart/mousedown events on double tap since iOS 13.\n * There are two possible solutions:\n * 1) Call preventDefault in touchEnd handler. But it also prevents click event from firing.\n * 2) Add listener on dblclick event that fires with the preceding mousedown/mouseup.\n * https://developer.apple.com/forums/thread/125073\n */\n this._onMobileSafariDoubleClick = function (dblClickEvent) {\n if (_this._firesTouchEvents(dblClickEvent)) {\n ++_this._tapCount;\n if (_this._tapTimeoutId !== null && _this._tapCount > 1) {\n var manhattanDistance = _this._mouseTouchMoveWithDownInfo(_this._getCoordinate(dblClickEvent), _this._tapCoordinate).manhattanDistance;\n if (manhattanDistance < ManhattanDistance.DoubleTap && !_this._cancelTap) {\n _this._processEvent(_this._makeCompatEvent(dblClickEvent), _this._handler.doubleTapEvent);\n }\n _this._resetTapTimeout();\n }\n }\n else {\n ++_this._clickCount;\n if (_this._clickTimeoutId !== null && _this._clickCount > 1) {\n var manhattanDistance = _this._mouseTouchMoveWithDownInfo(_this._getCoordinate(dblClickEvent), _this._clickCoordinate).manhattanDistance;\n if (manhattanDistance < ManhattanDistance.DoubleClick && !_this._cancelClick) {\n _this._processEvent(_this._makeCompatEvent(dblClickEvent), _this._handler.mouseDoubleClickEvent);\n }\n _this._resetClickTimeout();\n }\n }\n };\n this._target = target;\n this._handler = handler;\n this._options = options;\n this._init();\n }\n EventHandlerImp.prototype.destroy = function () {\n if (this._unsubscribeOutsideMouseEvents !== null) {\n this._unsubscribeOutsideMouseEvents();\n this._unsubscribeOutsideMouseEvents = null;\n }\n if (this._unsubscribeOutsideTouchEvents !== null) {\n this._unsubscribeOutsideTouchEvents();\n this._unsubscribeOutsideTouchEvents = null;\n }\n if (this._unsubscribeMousemove !== null) {\n this._unsubscribeMousemove();\n this._unsubscribeMousemove = null;\n }\n if (this._unsubscribeMouseWheel !== null) {\n this._unsubscribeMouseWheel();\n this._unsubscribeMouseWheel = null;\n }\n if (this._unsubscribeContextMenu !== null) {\n this._unsubscribeContextMenu();\n this._unsubscribeContextMenu = null;\n }\n if (this._unsubscribeRootMouseEvents !== null) {\n this._unsubscribeRootMouseEvents();\n this._unsubscribeRootMouseEvents = null;\n }\n if (this._unsubscribeRootTouchEvents !== null) {\n this._unsubscribeRootTouchEvents();\n this._unsubscribeRootTouchEvents = null;\n }\n if (this._unsubscribeMobileSafariEvents !== null) {\n this._unsubscribeMobileSafariEvents();\n this._unsubscribeMobileSafariEvents = null;\n }\n this._clearLongTapTimeout();\n this._resetClickTimeout();\n };\n EventHandlerImp.prototype._mouseEnterHandler = function (enterEvent) {\n var _this = this;\n var _a, _b, _c;\n (_a = this._unsubscribeMousemove) === null || _a === void 0 ? void 0 : _a.call(this);\n (_b = this._unsubscribeMouseWheel) === null || _b === void 0 ? void 0 : _b.call(this);\n (_c = this._unsubscribeContextMenu) === null || _c === void 0 ? void 0 : _c.call(this);\n var boundMouseMoveHandler = this._mouseMoveHandler.bind(this);\n this._unsubscribeMousemove = function () {\n _this._target.removeEventListener('mousemove', boundMouseMoveHandler);\n };\n this._target.addEventListener('mousemove', boundMouseMoveHandler);\n var boundMouseWheel = this._mouseWheelHandler.bind(this);\n this._unsubscribeMouseWheel = function () {\n _this._target.removeEventListener('wheel', boundMouseWheel);\n };\n this._target.addEventListener('wheel', boundMouseWheel, { passive: false });\n var boundContextMenu = this._contextMenuHandler.bind(this);\n this._unsubscribeContextMenu = function () {\n _this._target.removeEventListener('contextmenu', boundContextMenu);\n };\n this._target.addEventListener('contextmenu', boundContextMenu, { passive: false });\n if (this._firesTouchEvents(enterEvent)) {\n return;\n }\n this._processEvent(this._makeCompatEvent(enterEvent), this._handler.mouseEnterEvent);\n this._acceptMouseLeave = true;\n };\n EventHandlerImp.prototype._resetClickTimeout = function () {\n if (this._clickTimeoutId !== null) {\n clearTimeout(this._clickTimeoutId);\n }\n this._clickCount = 0;\n this._clickTimeoutId = null;\n this._clickCoordinate = { x: Number.NEGATIVE_INFINITY, y: Number.POSITIVE_INFINITY };\n };\n EventHandlerImp.prototype._resetTapTimeout = function () {\n if (this._tapTimeoutId !== null) {\n clearTimeout(this._tapTimeoutId);\n }\n this._tapCount = 0;\n this._tapTimeoutId = null;\n this._tapCoordinate = { x: Number.NEGATIVE_INFINITY, y: Number.POSITIVE_INFINITY };\n };\n EventHandlerImp.prototype._mouseMoveHandler = function (moveEvent) {\n if (this._mousePressed || this._touchMoveStartCoordinate !== null) {\n return;\n }\n if (this._firesTouchEvents(moveEvent)) {\n return;\n }\n this._processEvent(this._makeCompatEvent(moveEvent), this._handler.mouseMoveEvent);\n this._acceptMouseLeave = true;\n };\n EventHandlerImp.prototype._mouseWheelHandler = function (wheelEvent) {\n if (Math.abs(wheelEvent.deltaX) > Math.abs(wheelEvent.deltaY)) {\n if (!isValid(this._handler.mouseWheelHortEvent)) {\n return;\n }\n this._preventDefault(wheelEvent);\n if (Math.abs(wheelEvent.deltaX) === 0) {\n return;\n }\n this._handler.mouseWheelHortEvent(this._makeCompatEvent(wheelEvent), -wheelEvent.deltaX);\n }\n else {\n if (!isValid(this._handler.mouseWheelVertEvent)) {\n return;\n }\n var deltaY = -(wheelEvent.deltaY / 100);\n if (deltaY === 0) {\n return;\n }\n this._preventDefault(wheelEvent);\n switch (wheelEvent.deltaMode) {\n case wheelEvent.DOM_DELTA_PAGE: {\n deltaY *= 120;\n break;\n }\n case wheelEvent.DOM_DELTA_LINE: {\n deltaY *= 32;\n break;\n }\n }\n if (deltaY !== 0) {\n var scale = Math.sign(deltaY) * Math.min(1, Math.abs(deltaY));\n this._handler.mouseWheelVertEvent(this._makeCompatEvent(wheelEvent), scale);\n }\n }\n };\n EventHandlerImp.prototype._contextMenuHandler = function (mouseEvent) {\n this._preventDefault(mouseEvent);\n };\n EventHandlerImp.prototype._touchMoveHandler = function (moveEvent) {\n var touch = this._touchWithId(moveEvent.changedTouches, this._activeTouchId);\n if (touch === null) {\n return;\n }\n this._lastTouchEventTimeStamp = this._eventTimeStamp(moveEvent);\n if (this._startPinchMiddleCoordinate !== null) {\n return;\n }\n if (this._preventTouchDragProcess) {\n return;\n }\n // prevent pinch if move event comes faster than the second touch\n this._pinchPrevented = true;\n var moveInfo = this._mouseTouchMoveWithDownInfo(this._getCoordinate(touch), this._touchMoveStartCoordinate);\n var xOffset = moveInfo.xOffset, yOffset = moveInfo.yOffset, manhattanDistance = moveInfo.manhattanDistance;\n if (!this._touchMoveExceededManhattanDistance && manhattanDistance < ManhattanDistance.CancelTap) {\n return;\n }\n if (!this._touchMoveExceededManhattanDistance) {\n // first time when current position exceeded manhattan distance\n // vertical drag is more important than horizontal drag\n // because we scroll the page vertically often than horizontally\n var correctedXOffset = xOffset * 0.5;\n // a drag can be only if touch page scroll isn't allowed\n var isVertDrag = yOffset >= correctedXOffset && !this._options.treatVertDragAsPageScroll();\n var isHorzDrag = correctedXOffset > yOffset && !this._options.treatHorzDragAsPageScroll();\n // if drag event happened then we should revert preventDefault state to original one\n // and try to process the drag event\n // else we shouldn't prevent default of the event and ignore processing the drag event\n if (!isVertDrag && !isHorzDrag) {\n this._preventTouchDragProcess = true;\n }\n this._touchMoveExceededManhattanDistance = true;\n // if manhattan distance is more that 5 - we should cancel tap event\n this._cancelTap = true;\n this._clearLongTapTimeout();\n this._resetTapTimeout();\n }\n if (!this._preventTouchDragProcess) {\n this._processEvent(this._makeCompatEvent(moveEvent, touch), this._handler.touchMoveEvent);\n // Prevent the browser from handling a drag that has been claimed by the chart.\n // This avoids page scrolling and navigation gestures while panning the chart.\n this._preventDefault(moveEvent);\n }\n };\n EventHandlerImp.prototype._mouseMoveWithDownHandler = function (moveEvent) {\n if (moveEvent.button !== MouseEventButton.Left) {\n return;\n }\n var moveInfo = this._mouseTouchMoveWithDownInfo(this._getCoordinate(moveEvent), this._mouseMoveStartCoordinate);\n var manhattanDistance = moveInfo.manhattanDistance;\n if (manhattanDistance >= ManhattanDistance.CancelClick) {\n // if manhattan distance is more that 5 - we should cancel click event\n this._cancelClick = true;\n this._resetClickTimeout();\n }\n if (this._cancelClick) {\n // if this._cancelClick is true, that means that minimum manhattan distance is already exceeded\n this._processEvent(this._makeCompatEvent(moveEvent), this._handler.pressedMouseMoveEvent);\n }\n };\n EventHandlerImp.prototype._mouseTouchMoveWithDownInfo = function (currentCoordinate, startCoordinate) {\n var xOffset = Math.abs(startCoordinate.x - currentCoordinate.x);\n var yOffset = Math.abs(startCoordinate.y - currentCoordinate.y);\n var manhattanDistance = xOffset + yOffset;\n return { xOffset: xOffset, yOffset: yOffset, manhattanDistance: manhattanDistance };\n };\n EventHandlerImp.prototype._touchEndHandler = function (touchEndEvent) {\n var touch = this._touchWithId(touchEndEvent.changedTouches, this._activeTouchId);\n if (touch === null && touchEndEvent.touches.length === 0) {\n // something went wrong, somehow we missed the required touchend event\n // probably the browser has not sent this event\n touch = touchEndEvent.changedTouches[0];\n }\n if (touch === null) {\n return;\n }\n this._activeTouchId = null;\n this._lastTouchEventTimeStamp = this._eventTimeStamp(touchEndEvent);\n this._clearLongTapTimeout();\n this._touchMoveStartCoordinate = null;\n if (this._unsubscribeRootTouchEvents !== null) {\n this._unsubscribeRootTouchEvents();\n this._unsubscribeRootTouchEvents = null;\n }\n var compatEvent = this._makeCompatEvent(touchEndEvent, touch);\n this._processEvent(compatEvent, this._handler.touchEndEvent);\n ++this._tapCount;\n if (this._tapTimeoutId !== null && this._tapCount > 1) {\n // check that both clicks are near enough\n var manhattanDistance = this._mouseTouchMoveWithDownInfo(this._getCoordinate(touch), this._tapCoordinate).manhattanDistance;\n if (manhattanDistance < ManhattanDistance.DoubleTap && !this._cancelTap) {\n this._processEvent(compatEvent, this._handler.doubleTapEvent);\n }\n this._resetTapTimeout();\n }\n else {\n if (!this._cancelTap) {\n this._processEvent(compatEvent, this._handler.tapEvent);\n // do not fire mouse events if tap handler was executed\n // prevent click event on new dom element (who appeared after tap)\n if (isValid(this._handler.tapEvent)) {\n this._preventDefault(touchEndEvent);\n }\n }\n }\n // prevent, for example, safari's dblclick-to-zoom or fast-click after long-tap\n // we handle mouseDoubleClickEvent here ourselves\n if (this._tapCount === 0) {\n this._preventDefault(touchEndEvent);\n }\n if (touchEndEvent.touches.length === 0) {\n if (this._longTapActive) {\n this._longTapActive = false;\n // prevent native click event\n this._preventDefault(touchEndEvent);\n }\n }\n };\n EventHandlerImp.prototype._mouseUpHandler = function (mouseUpEvent) {\n if (mouseUpEvent.button !== MouseEventButton.Left) {\n return;\n }\n var compatEvent = this._makeCompatEvent(mouseUpEvent);\n this._mouseMoveStartCoordinate = null;\n this._mousePressed = false;\n if (this._unsubscribeRootMouseEvents !== null) {\n this._unsubscribeRootMouseEvents();\n this._unsubscribeRootMouseEvents = null;\n }\n if (isFF()) {\n var rootElement = this._target.ownerDocument.documentElement;\n rootElement.removeEventListener('mouseleave', this._onFirefoxOutsideMouseUp);\n }\n if (this._firesTouchEvents(mouseUpEvent)) {\n return;\n }\n this._processEvent(compatEvent, this._handler.mouseUpEvent);\n ++this._clickCount;\n if (this._clickTimeoutId !== null && this._clickCount > 1) {\n // check that both clicks are near enough\n var manhattanDistance = this._mouseTouchMoveWithDownInfo(this._getCoordinate(mouseUpEvent), this._clickCoordinate).manhattanDistance;\n if (manhattanDistance < ManhattanDistance.DoubleClick && !this._cancelClick) {\n this._processEvent(compatEvent, this._handler.mouseDoubleClickEvent);\n }\n this._resetClickTimeout();\n }\n else {\n if (!this._cancelClick) {\n this._processEvent(compatEvent, this._handler.mouseClickEvent);\n }\n }\n };\n EventHandlerImp.prototype._clearLongTapTimeout = function () {\n if (this._longTapTimeoutId === null) {\n return;\n }\n clearTimeout(this._longTapTimeoutId);\n this._longTapTimeoutId = null;\n };\n EventHandlerImp.prototype._touchStartHandler = function (downEvent) {\n if (this._activeTouchId !== null) {\n return;\n }\n var touch = downEvent.changedTouches[0];\n this._activeTouchId = touch.identifier;\n this._lastTouchEventTimeStamp = this._eventTimeStamp(downEvent);\n var rootElement = this._target.ownerDocument.documentElement;\n this._cancelTap = false;\n this._touchMoveExceededManhattanDistance = false;\n this._preventTouchDragProcess = false;\n this._touchMoveStartCoordinate = this._getCoordinate(touch);\n if (this._unsubscribeRootTouchEvents !== null) {\n this._unsubscribeRootTouchEvents();\n this._unsubscribeRootTouchEvents = null;\n }\n {\n var boundTouchMoveWithDownHandler_1 = this._touchMoveHandler.bind(this);\n var boundTouchEndHandler_1 = this._touchEndHandler.bind(this);\n this._unsubscribeRootTouchEvents = function () {\n rootElement.removeEventListener('touchmove', boundTouchMoveWithDownHandler_1);\n rootElement.removeEventListener('touchend', boundTouchEndHandler_1);\n };\n rootElement.addEventListener('touchmove', boundTouchMoveWithDownHandler_1, { passive: false });\n rootElement.addEventListener('touchend', boundTouchEndHandler_1, { passive: false });\n this._clearLongTapTimeout();\n this._longTapTimeoutId = setTimeout(this._longTapHandler.bind(this, downEvent), Delay.LongTap);\n }\n this._processEvent(this._makeCompatEvent(downEvent, touch), this._handler.touchStartEvent);\n if (this._tapTimeoutId === null) {\n this._tapCount = 0;\n this._tapTimeoutId = setTimeout(this._resetTapTimeout.bind(this), Delay.ResetClick);\n this._tapCoordinate = this._getCoordinate(touch);\n }\n };\n EventHandlerImp.prototype._mouseDownHandler = function (downEvent) {\n if (downEvent.button === MouseEventButton.Right) {\n this._preventDefault(downEvent);\n this._processEvent(this._makeCompatEvent(downEvent), this._handler.mouseRightClickEvent);\n return;\n }\n if (downEvent.button !== MouseEventButton.Left) {\n return;\n }\n var rootElement = this._target.ownerDocument.documentElement;\n if (isFF()) {\n rootElement.addEventListener('mouseleave', this._onFirefoxOutsideMouseUp);\n }\n this._cancelClick = false;\n this._mouseMoveStartCoordinate = this._getCoordinate(downEvent);\n if (this._unsubscribeRootMouseEvents !== null) {\n this._unsubscribeRootMouseEvents();\n this._unsubscribeRootMouseEvents = null;\n }\n {\n var boundMouseMoveWithDownHandler_1 = this._mouseMoveWithDownHandler.bind(this);\n var boundMouseUpHandler_1 = this._mouseUpHandler.bind(this);\n this._unsubscribeRootMouseEvents = function () {\n rootElement.removeEventListener('mousemove', boundMouseMoveWithDownHandler_1);\n rootElement.removeEventListener('mouseup', boundMouseUpHandler_1);\n };\n rootElement.addEventListener('mousemove', boundMouseMoveWithDownHandler_1);\n rootElement.addEventListener('mouseup', boundMouseUpHandler_1);\n }\n this._mousePressed = true;\n if (this._firesTouchEvents(downEvent)) {\n return;\n }\n this._processEvent(this._makeCompatEvent(downEvent), this._handler.mouseDownEvent);\n if (this._clickTimeoutId === null) {\n this._clickCount = 0;\n this._clickTimeoutId = setTimeout(this._resetClickTimeout.bind(this), Delay.ResetClick);\n this._clickCoordinate = this._getCoordinate(downEvent);\n }\n };\n EventHandlerImp.prototype._init = function () {\n var _this = this;\n this._target.addEventListener('mouseenter', this._mouseEnterHandler.bind(this));\n // Do not show context menu when something went wrong\n this._target.addEventListener('touchcancel', this._clearLongTapTimeout.bind(this));\n {\n var doc_1 = this._target.ownerDocument;\n var outsideHandler_1 = function (event) {\n if (_this._handler.mouseDownOutsideEvent == null) {\n return;\n }\n if (event.composed && _this._target.contains(event.composedPath()[0])) {\n return;\n }\n if (event.target !== null && _this._target.contains(event.target)) {\n return;\n }\n _this._handler.mouseDownOutsideEvent({ x: 0, y: 0, pageX: 0, pageY: 0 });\n };\n this._unsubscribeOutsideTouchEvents = function () {\n doc_1.removeEventListener('touchstart', outsideHandler_1);\n };\n this._unsubscribeOutsideMouseEvents = function () {\n doc_1.removeEventListener('mousedown', outsideHandler_1);\n };\n doc_1.addEventListener('mousedown', outsideHandler_1);\n doc_1.addEventListener('touchstart', outsideHandler_1, { passive: true });\n }\n if (isIOS()) {\n this._unsubscribeMobileSafariEvents = function () {\n _this._target.removeEventListener('dblclick', _this._onMobileSafariDoubleClick);\n };\n this._target.addEventListener('dblclick', this._onMobileSafariDoubleClick);\n }\n this._target.addEventListener('mouseleave', this._mouseLeaveHandler.bind(this));\n this._target.addEventListener('touchstart', this._touchStartHandler.bind(this), { passive: true });\n this._target.addEventListener('mousedown', function (e) {\n if (e.button === MouseEventButton.Middle) {\n // prevent incorrect scrolling event\n e.preventDefault();\n return false;\n }\n return undefined;\n });\n this._target.addEventListener('mousedown', this._mouseDownHandler.bind(this));\n this._initPinch();\n // Hey mobile Safari, what's up?\n // If mobile Safari doesn't have any touchmove handler with passive=false\n // it treats a touchstart and the following touchmove events as cancelable=false,\n // so we can't prevent them (as soon we subscribe on touchmove inside touchstart's handler).\n // And we'll get scroll of the page along with chart's one instead of only chart's scroll.\n // biome-ignore lint/suspicious/noEmptyBlockStatements: Safari requires an empty non-passive handler.\n this._target.addEventListener('touchmove', function () { }, { passive: false });\n };\n EventHandlerImp.prototype._initPinch = function () {\n var _this = this;\n if (!isValid(this._handler.pinchStartEvent) && !isValid(this._handler.pinchEvent) && !isValid(this._handler.pinchEndEvent)) {\n return;\n }\n this._target.addEventListener('touchstart', function (event) {\n _this._checkPinchState(event.touches);\n }, { passive: true });\n this._target.addEventListener('touchmove', function (event) {\n if (event.touches.length !== 2 || _this._startPinchMiddleCoordinate === null) {\n return;\n }\n if (isValid(_this._handler.pinchEvent)) {\n var currentDistance = _this._getTouchDistance(event.touches[0], event.touches[1]);\n var scale = currentDistance / _this._startPinchDistance;\n _this._handler.pinchEvent(__assign(__assign({}, _this._startPinchMiddleCoordinate), { pageX: 0, pageY: 0 }), scale);\n _this._preventDefault(event);\n }\n }, { passive: false });\n this._target.addEventListener('touchend', function (event) {\n _this._checkPinchState(event.touches);\n });\n };\n EventHandlerImp.prototype._checkPinchState = function (touches) {\n if (touches.length === 1) {\n this._pinchPrevented = false;\n }\n if (touches.length !== 2 || this._pinchPrevented || this._longTapActive) {\n this._stopPinch();\n }\n else {\n this._startPinch(touches);\n }\n };\n EventHandlerImp.prototype._startPinch = function (touches) {\n var box = this._target.getBoundingClientRect();\n this._startPinchMiddleCoordinate = {\n x: (touches[0].clientX - box.left + (touches[1].clientX - box.left)) / 2,\n y: (touches[0].clientY - box.top + (touches[1].clientY - box.top)) / 2\n };\n this._startPinchDistance = this._getTouchDistance(touches[0], touches[1]);\n if (isValid(this._handler.pinchStartEvent)) {\n this._handler.pinchStartEvent({ x: 0, y: 0, pageX: 0, pageY: 0 });\n }\n this._clearLongTapTimeout();\n };\n EventHandlerImp.prototype._stopPinch = function () {\n if (this._startPinchMiddleCoordinate === null) {\n return;\n }\n this._startPinchMiddleCoordinate = null;\n if (isValid(this._handler.pinchEndEvent)) {\n this._handler.pinchEndEvent({ x: 0, y: 0, pageX: 0, pageY: 0 });\n }\n };\n EventHandlerImp.prototype._mouseLeaveHandler = function (event) {\n var _a, _b, _c;\n (_a = this._unsubscribeMousemove) === null || _a === void 0 ? void 0 : _a.call(this);\n (_b = this._unsubscribeMouseWheel) === null || _b === void 0 ? void 0 : _b.call(this);\n (_c = this._unsubscribeContextMenu) === null || _c === void 0 ? void 0 : _c.call(this);\n if (this._firesTouchEvents(event)) {\n return;\n }\n if (!this._acceptMouseLeave) {\n // mobile Safari sometimes emits mouse leave event for no reason, there is no way to handle it in other way\n // just ignore this event if there was no mouse move or mouse enter events\n return;\n }\n this._processEvent(this._makeCompatEvent(event), this._handler.mouseLeaveEvent);\n // accept all mouse leave events if it's not an iOS device\n this._acceptMouseLeave = !isIOS();\n };\n EventHandlerImp.prototype._longTapHandler = function (event) {\n var touch = this._touchWithId(event.touches, this._activeTouchId);\n if (touch === null) {\n return;\n }\n this._processEvent(this._makeCompatEvent(event, touch), this._handler.longTapEvent);\n this._cancelTap = true;\n // long tap is active until touchend event with 0 touches occurred\n this._longTapActive = true;\n };\n EventHandlerImp.prototype._firesTouchEvents = function (e) {\n var _a;\n // @ts-ignore\n if (isValid((_a = e.sourceCapabilities) === null || _a === void 0 ? void 0 : _a.firesTouchEvents)) {\n // @ts-ignore\n return e.sourceCapabilities.firesTouchEvents;\n }\n return this._eventTimeStamp(e) < this._lastTouchEventTimeStamp + Delay.PreventFiresTouchEvents;\n };\n EventHandlerImp.prototype._processEvent = function (event, callback) {\n callback === null || callback === void 0 ? void 0 : callback.call(this._handler, event);\n };\n EventHandlerImp.prototype._makeCompatEvent = function (event, touch) {\n var _this = this;\n // TouchEvent has no clientX/Y coordinates:\n // We have to use the last Touch instead\n var eventLike = touch !== null && touch !== void 0 ? touch : event;\n var box = this._target.getBoundingClientRect();\n return {\n x: eventLike.clientX - box.left,\n y: eventLike.clientY - box.top,\n pageX: eventLike.pageX,\n pageY: eventLike.pageY,\n isTouch: !event.type.startsWith('mouse') && event.type !== 'contextmenu' && event.type !== 'click' && event.type !== 'wheel',\n preventDefault: function () {\n if (event.type !== 'touchstart') {\n // touchstart is passive and cannot be prevented\n _this._preventDefault(event);\n }\n }\n };\n };\n EventHandlerImp.prototype._getTouchDistance = function (p1, p2) {\n var xDiff = p1.clientX - p2.clientX;\n var yDiff = p1.clientY - p2.clientY;\n return Math.sqrt(xDiff * xDiff + yDiff * yDiff);\n };\n EventHandlerImp.prototype._preventDefault = function (event) {\n if (event.cancelable) {\n event.preventDefault();\n }\n };\n EventHandlerImp.prototype._getCoordinate = function (eventLike) {\n return {\n x: eventLike.pageX,\n y: eventLike.pageY\n };\n };\n EventHandlerImp.prototype._eventTimeStamp = function (e) {\n var _a;\n // for some reason e.timestamp is always 0 on iPad with magic mouse, so we use performance.now() as a fallback\n return (_a = e.timeStamp) !== null && _a !== void 0 ? _a : performance.now();\n };\n EventHandlerImp.prototype._touchWithId = function (touches, id) {\n // biome-ignore lint/style/useForOf: TouchList does not implement the iterable protocol in every target browser.\n for (var i = 0; i < touches.length; ++i) {\n if (touches[i].identifier === id) {\n return touches[i];\n }\n }\n return null;\n };\n return EventHandlerImp;\n}());\n\n/**\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n\n * http://www.apache.org/licenses/LICENSE-2.0\n\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar scrollLeft = {\n name: 'scrollLeft',\n keys: 'Shift+ArrowLeft',\n action: function (_a) {\n var chart = _a.chart;\n chart.scrollByDistance(-3 * chart.getBarSpace().bar);\n }\n};\n\n/**\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n\n * http://www.apache.org/licenses/LICENSE-2.0\n\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar scrollRight = {\n name: 'scrollRight',\n keys: 'Shift+ArrowRight',\n action: function (_a) {\n var chart = _a.chart;\n chart.scrollByDistance(3 * chart.getBarSpace().bar);\n }\n};\n\n/**\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n\n * http://www.apache.org/licenses/LICENSE-2.0\n\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar zoomIn = {\n name: 'zoomIn',\n keys: ['Shift+Equal', 'Shift+NumpadAdd'],\n action: function (_a) {\n var chart = _a.chart;\n chart.zoomAtCoordinate(1.05);\n }\n};\n\n/**\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n\n * http://www.apache.org/licenses/LICENSE-2.0\n\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar zoomOut = {\n name: 'zoomOut',\n keys: ['Shift+Minus', 'Shift+NumpadSubtract'],\n action: function (_a) {\n var chart = _a.chart;\n chart.zoomAtCoordinate(0.95);\n }\n};\n\n/**\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n\n * http://www.apache.org/licenses/LICENSE-2.0\n\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar _a;\nvar hotkeys = (_a = {},\n _a[scrollLeft.name] = scrollLeft,\n _a[scrollRight.name] = scrollRight,\n _a[zoomIn.name] = zoomIn,\n _a[zoomOut.name] = zoomOut,\n _a);\nfunction registerHotkey(hotkey) {\n hotkeys[hotkey.name] = hotkey;\n}\nfunction getHotkey(name) {\n var _a;\n return (_a = hotkeys[name]) !== null && _a !== void 0 ? _a : null;\n}\nfunction getSupportedHotkeys() {\n return Object.keys(hotkeys);\n}\n\n/**\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n\n * http://www.apache.org/licenses/LICENSE-2.0\n\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar WidgetNameConstants = {\n MAIN: 'main',\n X_AXIS: 'xAxis',\n Y_AXIS: 'yAxis',\n SEPARATOR: 'separator'\n};\nvar REAL_SEPARATOR_HEIGHT = 7;\n\n/**\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n\n * http://www.apache.org/licenses/LICENSE-2.0\n\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar FLING_DECAY = 0.975;\nvar FLING_FRAME_DURATION = 1000 / 60;\nvar FLING_MIN_FRAME_DISTANCE = 1;\nvar hotkeyModifierAlias = {\n command: 'meta',\n cmd: 'meta',\n control: 'ctrl',\n option: 'alt',\n mod: isAppleOS() ? 'meta' : 'ctrl'\n};\nvar hotkeyAlias = {\n '+': 'equal',\n plus: 'equal',\n add: 'equal',\n numpadadd: 'equal',\n '-': 'minus',\n subtract: 'minus',\n numpadsubtract: 'minus',\n esc: 'escape',\n del: 'delete',\n left: 'arrowleft',\n right: 'arrowright',\n up: 'arrowup',\n down: 'arrowdown'\n};\nvar hotKeyModifierOrder = ['ctrl', 'alt', 'shift', 'meta'];\nvar Event = /** @class */ (function () {\n function Event(container, chart) {\n var _this = this;\n // 惯性滚动开始时间\n this._flingStartTime = performance.now();\n // 惯性滚动动画\n this._flingScrollAnimation = null;\n // 开始滚动时坐标点\n this._startScrollCoordinate = null;\n // 开始触摸时坐标\n this._touchCoordinate = null;\n // 是否是取消了十字光标\n this._touchCancelCrosshair = false;\n // 是否缩放过\n this._touchZoomed = false;\n // 用来记录捏合缩放的尺寸\n this._pinchScale = 1;\n this._mouseDownWidget = null;\n this._prevYAxisRanges = new Map();\n this._xAxisStartScaleCoordinate = null;\n this._xAxisStartScaleDistance = 0;\n this._xAxisScale = 1;\n this._yAxisStartScaleDistance = 0;\n this._mouseMoveTriggerWidgetInfo = { pane: null, widget: null };\n this._boundKeyBoardDownEvent = function (event) {\n var _a, _b, _c;\n var target = event.target;\n var tagName = target === null || target === void 0 ? void 0 : target.tagName.toLowerCase();\n if (tagName === 'input' || tagName === 'textarea' || (target === null || target === void 0 ? void 0 : target.isContentEditable) === true) {\n return;\n }\n var _d = _this._chart.getHotKey(), enabled = _d.enabled, exclude = _d.exclude;\n if (!enabled) {\n return;\n }\n var eventKeys = [];\n if (event.ctrlKey) {\n eventKeys.push('ctrl');\n }\n if (event.altKey) {\n eventKeys.push('alt');\n }\n if (event.shiftKey) {\n eventKeys.push('shift');\n }\n if (event.metaKey) {\n eventKeys.push('meta');\n }\n var eventCode = event.code.trim().toLowerCase();\n if (/^key[a-z]$/.test(eventCode)) {\n eventKeys.push(eventCode.slice(3));\n }\n else if (/^digit[0-9]$/.test(eventCode)) {\n eventKeys.push(eventCode.slice(5));\n }\n else {\n eventKeys.push((_a = hotkeyAlias[eventCode]) !== null && _a !== void 0 ? _a : eventCode);\n }\n var key = eventKeys.join('+');\n var names = getSupportedHotkeys();\n for (var i = names.length - 1; i >= 0; i--) {\n var name_1 = names[i];\n var hotkey = getHotkey(name_1);\n if (!exclude.includes(name_1) && isValid(hotkey)) {\n var hotkeyKeys = isArray(hotkey.keys) ? hotkey.keys : [hotkey.keys];\n var match = hotkeyKeys.some(function (hotkeyKey) {\n var modifiers = [];\n var normalKey = '';\n hotkeyKey\n .replace(/\\+\\+$/, '+Plus')\n .replace(/\\+=$/, '+Equal')\n .split('+')\n .forEach(function (part) {\n var _a, _b;\n var hotkeyPart = (_a = hotkeyModifierAlias[part.trim().toLowerCase()]) !== null && _a !== void 0 ? _a : part;\n var hotkeyPartValue = hotkeyPart.trim().toLowerCase();\n var value = '';\n if (/^key[a-z]$/.test(hotkeyPartValue)) {\n value = hotkeyPartValue.slice(3);\n }\n else if (/^digit[0-9]$/.test(hotkeyPartValue)) {\n value = hotkeyPartValue.slice(5);\n }\n else {\n value = (_b = hotkeyAlias[hotkeyPartValue]) !== null && _b !== void 0 ? _b : hotkeyPartValue;\n }\n if (hotKeyModifierOrder.includes(value)) {\n if (!modifiers.includes(value)) {\n modifiers.push(value);\n }\n }\n else if (value.length > 0) {\n normalKey = value;\n }\n });\n modifiers.sort(function (a, b) { return hotKeyModifierOrder.indexOf(a) - hotKeyModifierOrder.indexOf(b); });\n return __spreadArray(__spreadArray([], __read(modifiers), false), [normalKey], false).filter(function (key) { return key.length > 0; }).join('+') === key;\n });\n if (match) {\n var params = { chart: _this._chart, event: event, key: key, hotkey: hotkey };\n if (!isFunction(hotkey.check) || hotkey.check(params)) {\n if ((_b = hotkey.preventDefault) !== null && _b !== void 0 ? _b : true) {\n event.preventDefault();\n }\n if ((_c = hotkey.stopPropagation) !== null && _c !== void 0 ? _c : false) {\n event.stopPropagation();\n }\n hotkey.action(params);\n return;\n }\n }\n }\n }\n };\n this._chart = chart;\n this._event = new EventHandlerImp(container, this, {\n treatVertDragAsPageScroll: function () { return false; },\n treatHorzDragAsPageScroll: function () { return false; }\n });\n document.addEventListener('keydown', this._boundKeyBoardDownEvent);\n }\n Event.prototype._getYAxisByWidget = function (widget) {\n if (widget.getName() === WidgetNameConstants.Y_AXIS) {\n return widget.getAxisComponent();\n }\n return widget.getPane().getYAxisComponentById();\n };\n Event.prototype._getYAxisScaleTargetByWidget = function (widget) {\n var yAxis = this._getYAxisByWidget(widget);\n var pane = widget.getPane();\n if (pane.isManualYAxis(yAxis.id)) {\n return pane.getYAxisComponentById();\n }\n return yAxis;\n };\n Event.prototype._syncYAxisValueRange = function (yAxis, sourceRange) {\n var baseRange = yAxis.getRange();\n var from = sourceRange.from, to = sourceRange.to;\n var realFrom = yAxis.valueToRealValue(from, { range: baseRange });\n var realTo = yAxis.valueToRealValue(to, { range: baseRange });\n var displayFrom = yAxis.realValueToDisplayValue(realFrom, { range: baseRange });\n var displayTo = yAxis.realValueToDisplayValue(realTo, { range: baseRange });\n yAxis.setRange({\n from: from,\n to: to,\n range: to - from,\n realFrom: realFrom,\n realTo: realTo,\n realRange: realTo - realFrom,\n displayFrom: displayFrom,\n displayTo: displayTo,\n displayRange: displayTo - displayFrom\n });\n };\n Event.prototype._syncManualYAxesValueRange = function (widget, sourceYAxis) {\n var _this = this;\n var sourceRange = sourceYAxis.getRange();\n widget\n .getPane()\n .getYAxisComponents()\n .forEach(function (axis) {\n var yAxis = axis;\n if (yAxis !== sourceYAxis && widget.getPane().isManualYAxis(yAxis.id)) {\n _this._syncYAxisValueRange(yAxis, sourceRange);\n }\n });\n };\n Event.prototype._resetYAxisAndManualYAxes = function (widget, sourceYAxis) {\n sourceYAxis.setAutoCalcTickFlag(true);\n widget\n .getPane()\n .getYAxisComponents()\n .forEach(function (axis) {\n var yAxis = axis;\n if (widget.getPane().isManualYAxis(yAxis.id)) {\n yAxis.setAutoCalcTickFlag(true);\n }\n });\n this._chart.layout({\n measureWidth: true,\n update: true,\n buildYAxisTick: true\n });\n };\n Event.prototype.pinchStartEvent = function () {\n this._touchZoomed = true;\n this._pinchScale = 1;\n return true;\n };\n Event.prototype.pinchEvent = function (e, scale) {\n if (scale === void 0) { scale = 1; }\n var _a = this._findWidgetByEvent(e), pane = _a.pane, widget = _a.widget;\n if ((pane === null || pane === void 0 ? void 0 : pane.getId()) !== PaneIdConstants.X_AXIS && (widget === null || widget === void 0 ? void 0 : widget.getName()) === WidgetNameConstants.MAIN) {\n var event_1 = this._makeWidgetEvent(e, widget);\n var zoomScale = (scale - this._pinchScale) * 5;\n this._pinchScale = scale;\n this._chart.getChartStore().zoom(zoomScale, { x: event_1.x, y: event_1.y }, 'main');\n return true;\n }\n return false;\n };\n Event.prototype.mouseWheelHortEvent = function (_, distance) {\n if (distance === void 0) { distance = 0; }\n var store = this._chart.getChartStore();\n store.startScroll();\n store.scroll(distance);\n return true;\n };\n Event.prototype.mouseWheelVertEvent = function (e, scale) {\n if (scale === void 0) { scale = 0; }\n var widget = this._findWidgetByEvent(e).widget;\n var event = this._makeWidgetEvent(e, widget);\n var name = widget === null || widget === void 0 ? void 0 : widget.getName();\n if (name === WidgetNameConstants.MAIN) {\n this._chart.getChartStore().zoom(scale, { x: event.x, y: event.y }, 'main');\n return true;\n }\n if (name === WidgetNameConstants.Y_AXIS) {\n var yAxisWidget = widget;\n var yAxis = this._getYAxisByWidget(yAxisWidget);\n if (yAxis.scrollZoomEnabled) {\n var scaleFactor = 1 + scale * 0.05;\n var targetYAxis = this._getYAxisScaleTargetByWidget(yAxisWidget);\n this._zoomYAxis(targetYAxis, scaleFactor);\n this._syncManualYAxesValueRange(yAxisWidget, targetYAxis);\n return true;\n }\n }\n return false;\n };\n Event.prototype.mouseDownEvent = function (e) {\n var e_1, _a;\n var _b = this._findWidgetByEvent(e), pane = _b.pane, widget = _b.widget;\n this._mouseDownWidget = widget;\n if (widget !== null) {\n var event_2 = this._makeWidgetEvent(e, widget);\n var name_2 = widget.getName();\n switch (name_2) {\n case WidgetNameConstants.SEPARATOR: {\n return widget.dispatchEvent('mouseDownEvent', event_2);\n }\n case WidgetNameConstants.MAIN: {\n // Dispatch event first to allow overlays (e.g., continuous drawing) to consume it\n var consumed = widget.dispatchEvent('mouseDownEvent', event_2);\n // Only start scrolling if the event was not consumed by an overlay\n if (!consumed) {\n var yAxes = pane.getYAxisComponents();\n try {\n for (var yAxes_1 = __values(yAxes), yAxes_1_1 = yAxes_1.next(); !yAxes_1_1.done; yAxes_1_1 = yAxes_1.next()) {\n var item = yAxes_1_1.value;\n var yAxis = item;\n if (!yAxis.getAutoCalcTickFlag()) {\n var range = yAxis.getRange();\n this._prevYAxisRanges.set(yAxis, __assign({}, range));\n }\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (yAxes_1_1 && !yAxes_1_1.done && (_a = yAxes_1.return)) _a.call(yAxes_1);\n }\n finally { if (e_1) throw e_1.error; }\n }\n this._startScrollCoordinate = { x: event_2.x, y: event_2.y };\n this._chart.getChartStore().startScroll();\n }\n return consumed;\n }\n case WidgetNameConstants.X_AXIS: {\n return this._processXAxisScrollStartEvent(widget, event_2);\n }\n case WidgetNameConstants.Y_AXIS: {\n return this._processYAxisScaleStartEvent(widget, event_2);\n }\n }\n }\n return false;\n };\n Event.prototype.mouseMoveEvent = function (e) {\n var _a, _b, _c;\n var _d = this._findWidgetByEvent(e), pane = _d.pane, widget = _d.widget;\n var event = this._makeWidgetEvent(e, widget);\n if (((_a = this._mouseMoveTriggerWidgetInfo.pane) === null || _a === void 0 ? void 0 : _a.getId()) !== (pane === null || pane === void 0 ? void 0 : pane.getId()) || ((_b = this._mouseMoveTriggerWidgetInfo.widget) === null || _b === void 0 ? void 0 : _b.getName()) !== (widget === null || widget === void 0 ? void 0 : widget.getName())) {\n widget === null || widget === void 0 ? void 0 : widget.dispatchEvent('mouseEnterEvent', event);\n (_c = this._mouseMoveTriggerWidgetInfo.widget) === null || _c === void 0 ? void 0 : _c.dispatchEvent('mouseLeaveEvent', event);\n this._mouseMoveTriggerWidgetInfo = { pane: pane, widget: widget };\n }\n if (widget !== null) {\n var name_3 = widget.getName();\n switch (name_3) {\n case WidgetNameConstants.MAIN: {\n var consumed = widget.dispatchEvent('mouseMoveEvent', event);\n var crosshair = { x: event.x, y: event.y, paneId: pane === null || pane === void 0 ? void 0 : pane.getId() };\n if (consumed) {\n if (widget.getForceCursor() !== 'pointer') {\n crosshair = undefined;\n }\n widget.setCursor('pointer');\n }\n else {\n widget.setCursor('crosshair');\n }\n this._chart.getChartStore().setCrosshair(crosshair);\n return consumed;\n }\n case WidgetNameConstants.SEPARATOR:\n case WidgetNameConstants.X_AXIS:\n case WidgetNameConstants.Y_AXIS: {\n var consumed = widget.dispatchEvent('mouseMoveEvent', event);\n this._chart.getChartStore().setCrosshair();\n return consumed;\n }\n }\n }\n return false;\n };\n Event.prototype.pressedMouseMoveEvent = function (e) {\n var _a, _b;\n if (this._mouseDownWidget !== null && this._mouseDownWidget.getName() === WidgetNameConstants.SEPARATOR) {\n return this._mouseDownWidget.dispatchEvent('pressedMouseMoveEvent', e);\n }\n var _c = this._findWidgetByEvent(e), pane = _c.pane, widget = _c.widget;\n if (widget !== null && ((_a = this._mouseDownWidget) === null || _a === void 0 ? void 0 : _a.getPane().getId()) === (pane === null || pane === void 0 ? void 0 : pane.getId()) && ((_b = this._mouseDownWidget) === null || _b === void 0 ? void 0 : _b.getName()) === widget.getName()) {\n var event_3 = this._makeWidgetEvent(e, widget);\n var name_4 = widget.getName();\n switch (name_4) {\n case WidgetNameConstants.MAIN: {\n var crosshair = void 0;\n var consumed = widget.dispatchEvent('pressedMouseMoveEvent', event_3);\n if (!consumed) {\n this._processMainScrollingEvent(widget, event_3);\n }\n else {\n // Explicitly update overlay when event was consumed (e.g., continuous drawing)\n this._chart.updatePane(1 /* UpdateLevel.Overlay */);\n }\n if (!consumed || widget.getForceCursor() === 'pointer') {\n crosshair = { x: event_3.x, y: event_3.y, paneId: pane === null || pane === void 0 ? void 0 : pane.getId() };\n }\n this._chart.getChartStore().setCrosshair(crosshair, { forceInvalidate: true });\n return consumed;\n }\n case WidgetNameConstants.X_AXIS: {\n return this._processXAxisScrollingEvent(widget, event_3);\n }\n case WidgetNameConstants.Y_AXIS: {\n return this._processYAxisScalingEvent(widget, event_3);\n }\n }\n }\n return false;\n };\n Event.prototype.mouseUpEvent = function (e) {\n var widget = this._findWidgetByEvent(e).widget;\n var consumed = false;\n if (widget !== null) {\n var event_4 = this._makeWidgetEvent(e, widget);\n var name_5 = widget.getName();\n switch (name_5) {\n case WidgetNameConstants.MAIN:\n case WidgetNameConstants.SEPARATOR:\n case WidgetNameConstants.X_AXIS:\n case WidgetNameConstants.Y_AXIS: {\n consumed = widget.dispatchEvent('mouseUpEvent', event_4);\n break;\n }\n }\n if (consumed) {\n this._chart.updatePane(1 /* UpdateLevel.Overlay */);\n }\n }\n this._mouseDownWidget = null;\n this._startScrollCoordinate = null;\n this._prevYAxisRanges.clear();\n this._xAxisStartScaleCoordinate = null;\n this._xAxisStartScaleDistance = 0;\n this._xAxisScale = 1;\n this._yAxisStartScaleDistance = 0;\n return consumed;\n };\n Event.prototype.mouseClickEvent = function (e) {\n var widget = this._findWidgetByEvent(e).widget;\n if (widget !== null) {\n var event_5 = this._makeWidgetEvent(e, widget);\n return widget.dispatchEvent('mouseClickEvent', event_5);\n }\n return false;\n };\n Event.prototype.mouseRightClickEvent = function (e) {\n var widget = this._findWidgetByEvent(e).widget;\n var consumed = false;\n if (widget !== null) {\n var event_6 = this._makeWidgetEvent(e, widget);\n var name_6 = widget.getName();\n switch (name_6) {\n case WidgetNameConstants.MAIN:\n case WidgetNameConstants.X_AXIS:\n case WidgetNameConstants.Y_AXIS: {\n consumed = widget.dispatchEvent('mouseRightClickEvent', event_6);\n break;\n }\n }\n if (consumed) {\n this._chart.updatePane(1 /* UpdateLevel.Overlay */);\n }\n }\n return false;\n };\n Event.prototype.mouseDoubleClickEvent = function (e) {\n var widget = this._findWidgetByEvent(e).widget;\n if (widget !== null) {\n var name_7 = widget.getName();\n switch (name_7) {\n case WidgetNameConstants.MAIN: {\n var event_7 = this._makeWidgetEvent(e, widget);\n return widget.dispatchEvent('mouseDoubleClickEvent', event_7);\n }\n case WidgetNameConstants.Y_AXIS: {\n var yAxisWidget = widget;\n var yAxis = this._getYAxisByWidget(yAxisWidget);\n var targetYAxis = this._getYAxisScaleTargetByWidget(yAxisWidget);\n if (!targetYAxis.getAutoCalcTickFlag() || !yAxis.getAutoCalcTickFlag()) {\n this._resetYAxisAndManualYAxes(yAxisWidget, targetYAxis);\n return true;\n }\n break;\n }\n }\n }\n return false;\n };\n Event.prototype.mouseLeaveEvent = function () {\n this._chart.getChartStore().setCrosshair();\n return true;\n };\n Event.prototype.touchStartEvent = function (e) {\n var e_2, _a;\n var _b;\n var _c = this._findWidgetByEvent(e), pane = _c.pane, widget = _c.widget;\n if (widget !== null) {\n var event_8 = this._makeWidgetEvent(e, widget);\n (_b = event_8.preventDefault) === null || _b === void 0 ? void 0 : _b.call(event_8);\n var name_8 = widget.getName();\n switch (name_8) {\n case WidgetNameConstants.MAIN: {\n var chartStore = this._chart.getChartStore();\n if (widget.dispatchEvent('mouseDownEvent', event_8)) {\n this._touchCancelCrosshair = true;\n this._touchCoordinate = null;\n chartStore.setCrosshair(undefined, { notInvalidate: true });\n this._chart.updatePane(1 /* UpdateLevel.Overlay */);\n return true;\n }\n if (this._flingScrollAnimation !== null) {\n this._flingScrollAnimation.cancel();\n this._flingScrollAnimation = null;\n }\n this._flingStartTime = performance.now();\n var yAxes = pane.getYAxisComponents();\n try {\n for (var yAxes_2 = __values(yAxes), yAxes_2_1 = yAxes_2.next(); !yAxes_2_1.done; yAxes_2_1 = yAxes_2.next()) {\n var item = yAxes_2_1.value;\n var yAxis = item;\n if (!yAxis.getAutoCalcTickFlag()) {\n var range = yAxis.getRange();\n this._prevYAxisRanges.set(yAxis, __assign({}, range));\n }\n }\n }\n catch (e_2_1) { e_2 = { error: e_2_1 }; }\n finally {\n try {\n if (yAxes_2_1 && !yAxes_2_1.done && (_a = yAxes_2.return)) _a.call(yAxes_2);\n }\n finally { if (e_2) throw e_2.error; }\n }\n this._startScrollCoordinate = { x: event_8.x, y: event_8.y };\n chartStore.startScroll();\n this._touchZoomed = false;\n if (this._touchCoordinate !== null) {\n var xDif = event_8.x - this._touchCoordinate.x;\n var yDif = event_8.y - this._touchCoordinate.y;\n var radius = Math.sqrt(xDif * xDif + yDif * yDif);\n if (radius < TOUCH_MIN_RADIUS) {\n this._touchCoordinate = { x: event_8.x, y: event_8.y };\n chartStore.setCrosshair({ x: event_8.x, y: event_8.y, paneId: pane === null || pane === void 0 ? void 0 : pane.getId() });\n }\n else {\n this._touchCoordinate = null;\n this._touchCancelCrosshair = true;\n chartStore.setCrosshair();\n }\n }\n return true;\n }\n case WidgetNameConstants.X_AXIS: {\n return this._processXAxisScrollStartEvent(widget, event_8);\n }\n case WidgetNameConstants.Y_AXIS: {\n return this._processYAxisScaleStartEvent(widget, event_8);\n }\n }\n }\n return false;\n };\n Event.prototype.touchMoveEvent = function (e) {\n var _a, _b, _c;\n var _d = this._findWidgetByEvent(e), pane = _d.pane, widget = _d.widget;\n if (widget !== null) {\n var event_9 = this._makeWidgetEvent(e, widget);\n var name_9 = widget.getName();\n var chartStore = this._chart.getChartStore();\n switch (name_9) {\n case WidgetNameConstants.MAIN: {\n if (widget.dispatchEvent('pressedMouseMoveEvent', event_9)) {\n (_a = event_9.preventDefault) === null || _a === void 0 ? void 0 : _a.call(event_9);\n chartStore.setCrosshair(undefined, { notInvalidate: true });\n this._chart.updatePane(1 /* UpdateLevel.Overlay */);\n return true;\n }\n if (this._touchCoordinate !== null) {\n (_b = event_9.preventDefault) === null || _b === void 0 ? void 0 : _b.call(event_9);\n chartStore.setCrosshair({ x: event_9.x, y: event_9.y, paneId: pane === null || pane === void 0 ? void 0 : pane.getId() });\n }\n else {\n this._processMainScrollingEvent(widget, event_9);\n }\n return true;\n }\n case WidgetNameConstants.X_AXIS: {\n (_c = event_9.preventDefault) === null || _c === void 0 ? void 0 : _c.call(event_9);\n return this._processXAxisScrollingEvent(widget, event_9);\n }\n case WidgetNameConstants.Y_AXIS: {\n return this._processYAxisScalingEvent(widget, event_9);\n }\n }\n }\n return false;\n };\n Event.prototype.touchEndEvent = function (e) {\n var _this = this;\n var widget = this._findWidgetByEvent(e).widget;\n if (widget !== null) {\n var event_10 = this._makeWidgetEvent(e, widget);\n var name_10 = widget.getName();\n switch (name_10) {\n case WidgetNameConstants.MAIN: {\n widget.dispatchEvent('mouseUpEvent', event_10);\n if (this._startScrollCoordinate !== null) {\n var time = performance.now() - this._flingStartTime;\n var distance = event_10.x - this._startScrollCoordinate.x;\n var initialFrameDistance_1 = (distance / (time > 0 ? time : 1)) * 20;\n if (time < 200 && Math.abs(initialFrameDistance_1) > FLING_MIN_FRAME_DISTANCE) {\n var store_1 = this._chart.getChartStore();\n var duration_1 = (Math.log(FLING_MIN_FRAME_DISTANCE / Math.abs(initialFrameDistance_1)) / Math.log(FLING_DECAY)) * FLING_FRAME_DURATION;\n var animation_1 = new Animation({ duration: duration_1 }).doFrame(function (frameTime) {\n var frameCount = frameTime / FLING_FRAME_DURATION;\n var progressDistance = (initialFrameDistance_1 * (1 - Math.pow(FLING_DECAY, frameCount))) / (1 - FLING_DECAY);\n store_1.scroll(progressDistance);\n if (frameTime >= duration_1 && _this._flingScrollAnimation === animation_1) {\n _this._flingScrollAnimation = null;\n }\n });\n store_1.startScroll();\n this._flingScrollAnimation = animation_1;\n animation_1.start();\n }\n }\n return true;\n }\n case WidgetNameConstants.X_AXIS:\n case WidgetNameConstants.Y_AXIS: {\n var consumed = widget.dispatchEvent('mouseUpEvent', event_10);\n if (consumed) {\n this._chart.updatePane(1 /* UpdateLevel.Overlay */);\n }\n }\n }\n this._startScrollCoordinate = null;\n this._prevYAxisRanges.clear();\n this._xAxisStartScaleCoordinate = null;\n this._xAxisStartScaleDistance = 0;\n this._xAxisScale = 1;\n this._yAxisStartScaleDistance = 0;\n }\n return false;\n };\n Event.prototype.tapEvent = function (e) {\n var _a = this._findWidgetByEvent(e), pane = _a.pane, widget = _a.widget;\n var consumed = false;\n if (widget !== null) {\n var event_11 = this._makeWidgetEvent(e, widget);\n var result = widget.dispatchEvent('mouseClickEvent', event_11);\n if (widget.getName() === WidgetNameConstants.MAIN) {\n var event_12 = this._makeWidgetEvent(e, widget);\n var chartStore = this._chart.getChartStore();\n if (result) {\n this._touchCancelCrosshair = true;\n this._touchCoordinate = null;\n chartStore.setCrosshair(undefined, { notInvalidate: true });\n consumed = true;\n }\n else {\n if (!this._touchCancelCrosshair && !this._touchZoomed) {\n this._touchCoordinate = { x: event_12.x, y: event_12.y };\n chartStore.setCrosshair({ x: event_12.x, y: event_12.y, paneId: pane === null || pane === void 0 ? void 0 : pane.getId() }, { notInvalidate: true });\n consumed = true;\n }\n this._touchCancelCrosshair = false;\n }\n }\n if (consumed || result) {\n this._chart.updatePane(1 /* UpdateLevel.Overlay */);\n }\n }\n return consumed;\n };\n Event.prototype.doubleTapEvent = function (e) {\n return this.mouseDoubleClickEvent(e);\n };\n Event.prototype.longTapEvent = function (e) {\n var _a = this._findWidgetByEvent(e), pane = _a.pane, widget = _a.widget;\n if (widget !== null && widget.getName() === WidgetNameConstants.MAIN) {\n var event_13 = this._makeWidgetEvent(e, widget);\n this._touchCoordinate = { x: event_13.x, y: event_13.y };\n this._chart.getChartStore().setCrosshair({ x: event_13.x, y: event_13.y, paneId: pane === null || pane === void 0 ? void 0 : pane.getId() });\n return true;\n }\n return false;\n };\n Event.prototype._processMainScrollingEvent = function (widget, event) {\n var e_3, _a;\n var _b;\n if (this._startScrollCoordinate !== null) {\n var yAxes = widget.getPane().getYAxisComponents();\n try {\n for (var yAxes_3 = __values(yAxes), yAxes_3_1 = yAxes_3.next(); !yAxes_3_1.done; yAxes_3_1 = yAxes_3.next()) {\n var item = yAxes_3_1.value;\n var yAxis = item;\n var prevRange = this._prevYAxisRanges.get(yAxis);\n if (isValid(prevRange) && !yAxis.getAutoCalcTickFlag() && yAxis.scrollZoomEnabled) {\n (_b = event.preventDefault) === null || _b === void 0 ? void 0 : _b.call(event);\n var from = prevRange.from, to = prevRange.to, range = prevRange.range;\n var distance_1 = 0;\n if (yAxis.reverse) {\n distance_1 = this._startScrollCoordinate.y - event.y;\n }\n else {\n distance_1 = event.y - this._startScrollCoordinate.y;\n }\n var bounding = widget.getBounding();\n var scale = distance_1 / bounding.height;\n var difRange = range * scale;\n var newFrom = from + difRange;\n var newTo = to + difRange;\n var newRealFrom = yAxis.valueToRealValue(newFrom, { range: prevRange });\n var newRealTo = yAxis.valueToRealValue(newTo, { range: prevRange });\n var newDisplayFrom = yAxis.realValueToDisplayValue(newRealFrom, { range: prevRange });\n var newDisplayTo = yAxis.realValueToDisplayValue(newRealTo, { range: prevRange });\n yAxis.setRange({\n from: newFrom,\n to: newTo,\n range: newTo - newFrom,\n realFrom: newRealFrom,\n realTo: newRealTo,\n realRange: newRealTo - newRealFrom,\n displayFrom: newDisplayFrom,\n displayTo: newDisplayTo,\n displayRange: newDisplayTo - newDisplayFrom\n });\n }\n }\n }\n catch (e_3_1) { e_3 = { error: e_3_1 }; }\n finally {\n try {\n if (yAxes_3_1 && !yAxes_3_1.done && (_a = yAxes_3.return)) _a.call(yAxes_3);\n }\n finally { if (e_3) throw e_3.error; }\n }\n var distance = event.x - this._startScrollCoordinate.x;\n this._chart.getChartStore().scroll(distance);\n }\n };\n Event.prototype._processXAxisScrollStartEvent = function (widget, event) {\n var consumed = widget.dispatchEvent('mouseDownEvent', event);\n if (consumed) {\n this._chart.updatePane(1 /* UpdateLevel.Overlay */);\n }\n this._xAxisStartScaleCoordinate = { x: event.x, y: event.y };\n this._xAxisStartScaleDistance = event.pageX;\n return consumed;\n };\n Event.prototype._processXAxisScrollingEvent = function (widget, event) {\n var consumed = widget.dispatchEvent('pressedMouseMoveEvent', event);\n if (!consumed) {\n var xAxis = widget.getPane().getXAxisComponent();\n if (xAxis.scrollZoomEnabled && this._xAxisStartScaleDistance !== 0) {\n var scale = this._xAxisStartScaleDistance / event.pageX;\n if (Number.isFinite(scale)) {\n var zoomScale = (scale - this._xAxisScale) * 10;\n this._xAxisScale = scale;\n this._chart.getChartStore().zoom(zoomScale, this._xAxisStartScaleCoordinate, 'xAxis');\n }\n }\n }\n else {\n this._chart.updatePane(1 /* UpdateLevel.Overlay */);\n }\n return consumed;\n };\n Event.prototype._processYAxisScaleStartEvent = function (widget, event) {\n var consumed = widget.dispatchEvent('mouseDownEvent', event);\n if (consumed) {\n this._chart.updatePane(1 /* UpdateLevel.Overlay */);\n }\n var yAxis = this._getYAxisScaleTargetByWidget(widget);\n var range = yAxis.getRange();\n this._prevYAxisRanges.set(yAxis, __assign({}, range));\n this._yAxisStartScaleDistance = event.pageY;\n return consumed;\n };\n Event.prototype._processYAxisScalingEvent = function (widget, event) {\n var _a;\n var consumed = widget.dispatchEvent('pressedMouseMoveEvent', event);\n if (!consumed) {\n var yAxis = this._getYAxisByWidget(widget);\n var targetYAxis = this._getYAxisScaleTargetByWidget(widget);\n var prevYAxisRange = this._prevYAxisRanges.get(targetYAxis);\n if (isValid(prevYAxisRange) && yAxis.scrollZoomEnabled && this._yAxisStartScaleDistance !== 0) {\n (_a = event.preventDefault) === null || _a === void 0 ? void 0 : _a.call(event);\n var scaleFactor = event.pageY / this._yAxisStartScaleDistance;\n this._zoomYAxis(targetYAxis, scaleFactor, prevYAxisRange);\n this._syncManualYAxesValueRange(widget, targetYAxis);\n }\n }\n else {\n this._chart.updatePane(1 /* UpdateLevel.Overlay */);\n }\n return consumed;\n };\n Event.prototype._zoomYAxis = function (yAxis, scaleFactor, baseRange) {\n var prevYAxisRange = baseRange !== null && baseRange !== void 0 ? baseRange : yAxis.getRange();\n var from = prevYAxisRange.from, to = prevYAxisRange.to, range = prevYAxisRange.range;\n var newRange = range * scaleFactor;\n var difRange = (newRange - range) / 2;\n var newFrom = from - difRange;\n var newTo = to + difRange;\n var newRealFrom = yAxis.valueToRealValue(newFrom, { range: prevYAxisRange });\n var newRealTo = yAxis.valueToRealValue(newTo, { range: prevYAxisRange });\n var newDisplayFrom = yAxis.realValueToDisplayValue(newRealFrom, { range: prevYAxisRange });\n var newDisplayTo = yAxis.realValueToDisplayValue(newRealTo, { range: prevYAxisRange });\n yAxis.setRange({\n from: newFrom,\n to: newTo,\n range: newRange,\n realFrom: newRealFrom,\n realTo: newRealTo,\n realRange: newRealTo - newRealFrom,\n displayFrom: newDisplayFrom,\n displayTo: newDisplayTo,\n displayRange: newDisplayTo - newDisplayFrom\n });\n this._chart.layout({\n measureWidth: true,\n update: true,\n buildYAxisTick: true\n });\n };\n Event.prototype._findWidgetByEvent = function (event) {\n var e_4, _a, e_5, _b, e_6, _c;\n var x = event.x, y = event.y;\n var separatorPanes = this._chart.getSeparatorPanes();\n var separatorSize = this._chart.getStyles().separator.size;\n try {\n for (var separatorPanes_1 = __values(separatorPanes), separatorPanes_1_1 = separatorPanes_1.next(); !separatorPanes_1_1.done; separatorPanes_1_1 = separatorPanes_1.next()) {\n var items = separatorPanes_1_1.value;\n var pane_1 = items[1];\n var bounding = pane_1.getBounding();\n var top_1 = bounding.top - Math.round((REAL_SEPARATOR_HEIGHT - separatorSize) / 2);\n if (x >= bounding.left && x <= bounding.left + bounding.width && y >= top_1 && y <= top_1 + REAL_SEPARATOR_HEIGHT) {\n return { pane: pane_1, widget: pane_1.getWidget() };\n }\n }\n }\n catch (e_4_1) { e_4 = { error: e_4_1 }; }\n finally {\n try {\n if (separatorPanes_1_1 && !separatorPanes_1_1.done && (_a = separatorPanes_1.return)) _a.call(separatorPanes_1);\n }\n finally { if (e_4) throw e_4.error; }\n }\n var drawPanes = this._chart.getDrawPanes();\n var pane = null;\n try {\n for (var drawPanes_1 = __values(drawPanes), drawPanes_1_1 = drawPanes_1.next(); !drawPanes_1_1.done; drawPanes_1_1 = drawPanes_1.next()) {\n var p = drawPanes_1_1.value;\n var bounding = p.getBounding();\n if (x >= bounding.left && x <= bounding.left + bounding.width && y >= bounding.top && y <= bounding.top + bounding.height) {\n pane = p;\n break;\n }\n }\n }\n catch (e_5_1) { e_5 = { error: e_5_1 }; }\n finally {\n try {\n if (drawPanes_1_1 && !drawPanes_1_1.done && (_b = drawPanes_1.return)) _b.call(drawPanes_1);\n }\n finally { if (e_5) throw e_5.error; }\n }\n var widget = null;\n if (pane !== null) {\n if (!isValid(widget)) {\n var mainWidget = pane.getMainWidget();\n var mainBounding = mainWidget.getBounding();\n if (x >= mainBounding.left && x <= mainBounding.left + mainBounding.width && y >= mainBounding.top && y <= mainBounding.top + mainBounding.height) {\n widget = mainWidget;\n }\n }\n if (!isValid(widget)) {\n try {\n for (var _d = __values(pane.getYAxisWidgets()), _e = _d.next(); !_e.done; _e = _d.next()) {\n var yAxisWidget = _e.value;\n var yAxisBounding = yAxisWidget.getBounding();\n if (x >= yAxisBounding.left && x <= yAxisBounding.left + yAxisBounding.width && y >= yAxisBounding.top && y <= yAxisBounding.top + yAxisBounding.height) {\n widget = yAxisWidget;\n break;\n }\n }\n }\n catch (e_6_1) { e_6 = { error: e_6_1 }; }\n finally {\n try {\n if (_e && !_e.done && (_c = _d.return)) _c.call(_d);\n }\n finally { if (e_6) throw e_6.error; }\n }\n }\n }\n return { pane: pane, widget: widget };\n };\n Event.prototype._makeWidgetEvent = function (event, widget) {\n var _a, _b, _c;\n var bounding = (_a = widget === null || widget === void 0 ? void 0 : widget.getBounding()) !== null && _a !== void 0 ? _a : null;\n return __assign(__assign({}, event), { x: event.x - ((_b = bounding === null || bounding === void 0 ? void 0 : bounding.left) !== null && _b !== void 0 ? _b : 0), y: event.y - ((_c = bounding === null || bounding === void 0 ? void 0 : bounding.top) !== null && _c !== void 0 ? _c : 0) });\n };\n Event.prototype.destroy = function () {\n var _a;\n (_a = this._flingScrollAnimation) === null || _a === void 0 ? void 0 : _a.cancel();\n this._flingScrollAnimation = null;\n document.removeEventListener('keydown', this._boundKeyBoardDownEvent);\n this._event.destroy();\n };\n return Event;\n}());\n\n/**\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n\n * http://www.apache.org/licenses/LICENSE-2.0\n\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nfunction prepareIndicatorFigures(indicator, defaultStyles) {\n var figures = indicator.figures;\n var styles = indicator.styles;\n var textStyles = formatValue(styles, 'texts', defaultStyles.texts);\n var textStyleCount = textStyles.length;\n var circleStyles = formatValue(styles, 'circles', defaultStyles.circles);\n var circleStyleCount = circleStyles.length;\n var barStyles = formatValue(styles, 'bars', defaultStyles.bars);\n var barStyleCount = barStyles.length;\n var lineStyles = formatValue(styles, 'lines', defaultStyles.lines);\n var lineStyleCount = lineStyles.length;\n var textCount = 0;\n var circleCount = 0;\n var barCount = 0;\n var lineCount = 0;\n var preparedFigures = [];\n var defaultFigureStyles;\n var figureIndex = 0;\n figures.forEach(function (figure) {\n switch (figure.type) {\n case 'text': {\n figureIndex = textCount;\n defaultFigureStyles = textStyles[textCount % textStyleCount];\n textCount++;\n break;\n }\n case 'circle': {\n figureIndex = circleCount;\n var styles_1 = circleStyles[circleCount % circleStyleCount];\n defaultFigureStyles = __assign(__assign({}, styles_1), { color: styles_1.noChangeColor });\n circleCount++;\n break;\n }\n case 'bar': {\n figureIndex = barCount;\n var styles_2 = barStyles[barCount % barStyleCount];\n defaultFigureStyles = __assign(__assign({}, styles_2), { color: styles_2.noChangeColor });\n barCount++;\n break;\n }\n case 'line': {\n figureIndex = lineCount;\n defaultFigureStyles = lineStyles[lineCount % lineStyleCount];\n lineCount++;\n break;\n }\n }\n if (isValid(figure.type)) {\n preparedFigures.push({ figure: figure, defaultStyles: __assign({}, defaultFigureStyles), index: figureIndex });\n }\n });\n return preparedFigures;\n}\nfunction eachFigures(indicator, dataIndex, barSpace, defaultStyles, eachFigureCallback, preparedFigures) {\n if (preparedFigures === void 0) { preparedFigures = prepareIndicatorFigures(indicator, defaultStyles); }\n var result = indicator.result;\n preparedFigures.forEach(function (_a) {\n var _b;\n var figure = _a.figure, defaultFigureStyles = _a.defaultStyles, index = _a.index;\n var dynamicStyles = (_b = figure.styles) === null || _b === void 0 ? void 0 : _b.call(figure, {\n data: {\n prev: result[dataIndex - 1],\n current: result[dataIndex],\n next: result[dataIndex + 1]\n },\n indicator: indicator,\n barSpace: barSpace,\n defaultStyles: defaultStyles\n });\n var figureStyles = isValid(dynamicStyles) ? __assign(__assign({}, defaultFigureStyles), dynamicStyles) : defaultFigureStyles;\n eachFigureCallback(figure, figureStyles, index);\n });\n}\nvar IndicatorImp = /** @class */ (function () {\n function IndicatorImp(indicator) {\n this.precision = 4;\n this.calcParams = [];\n this.shouldOhlc = false;\n this.shouldFormatBigNumber = false;\n this.visible = true;\n this.zLevel = 0;\n this.series = 'normal';\n this.figures = [];\n this.minValue = null;\n this.maxValue = null;\n this.styles = null;\n this.shouldUpdate = function (prev, current) {\n var calc = JSON.stringify(prev.calcParams) !== JSON.stringify(current.calcParams) || prev.figures !== current.figures || prev.calc !== current.calc;\n var draw = calc ||\n prev.shortName !== current.shortName ||\n prev.paneId !== current.paneId ||\n prev.yAxisId !== current.yAxisId ||\n prev.series !== current.series ||\n prev.minValue !== current.minValue ||\n prev.maxValue !== current.maxValue ||\n prev.precision !== current.precision ||\n prev.shouldOhlc !== current.shouldOhlc ||\n prev.shouldFormatBigNumber !== current.shouldFormatBigNumber ||\n prev.visible !== current.visible ||\n prev.zLevel !== current.zLevel ||\n prev.extendData !== current.extendData ||\n prev.regenerateFigures !== current.regenerateFigures ||\n prev.createTooltipDataSource !== current.createTooltipDataSource ||\n prev.draw !== current.draw;\n return { calc: calc, draw: draw };\n };\n this.calc = function () { return []; };\n this.regenerateFigures = null;\n this.createTooltipDataSource = null;\n this.draw = null;\n this.result = [];\n this._lockSeriesPrecision = false;\n this.override(indicator);\n this._lockSeriesPrecision = false;\n }\n IndicatorImp.prototype.override = function (indicator) {\n var _a, _b;\n var _c = this, result = _c.result; _c._prevIndicator; var currentOthers = __rest(_c, [\"result\", \"_prevIndicator\"]);\n this._prevIndicator = __assign(__assign({}, clone(currentOthers)), { result: result });\n var id = indicator.id, name = indicator.name, shortName = indicator.shortName, precision = indicator.precision, styles = indicator.styles, figures = indicator.figures, calcParams = indicator.calcParams, others = __rest(indicator, [\"id\", \"name\", \"shortName\", \"precision\", \"styles\", \"figures\", \"calcParams\"]);\n if (!isString(this.id) && isString(id)) {\n this.id = id;\n }\n if (!isString(this.name)) {\n this.name = name !== null && name !== void 0 ? name : '';\n }\n this.shortName = (_a = shortName !== null && shortName !== void 0 ? shortName : this.shortName) !== null && _a !== void 0 ? _a : this.name;\n if (isNumber(precision)) {\n this.precision = precision;\n this._lockSeriesPrecision = true;\n }\n if (isValid(styles)) {\n (_b = this.styles) !== null && _b !== void 0 ? _b : (this.styles = {});\n merge(this.styles, styles);\n }\n merge(this, others);\n if (isValid(calcParams)) {\n this.calcParams = calcParams;\n if (isFunction(this.regenerateFigures)) {\n this.figures = this.regenerateFigures(this.calcParams);\n }\n }\n this.figures = figures !== null && figures !== void 0 ? figures : this.figures;\n };\n IndicatorImp.prototype.setSeriesPrecision = function (precision) {\n if (!this._lockSeriesPrecision) {\n this.precision = precision;\n }\n };\n IndicatorImp.prototype.shouldUpdateImp = function () {\n var sort = this._prevIndicator.zLevel !== this.zLevel;\n var result = this.shouldUpdate(this._prevIndicator, this);\n if (isBoolean(result)) {\n return { calc: result, draw: result, sort: sort };\n }\n return __assign(__assign({}, result), { sort: sort });\n };\n IndicatorImp.prototype.calcImp = function (dataList) {\n return __awaiter(this, void 0, void 0, function () {\n var result;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n _b.trys.push([0, 2, , 3]);\n return [4 /*yield*/, this.calc(dataList, this)];\n case 1:\n result = _b.sent();\n this.result = result;\n return [2 /*return*/, true];\n case 2:\n _b.sent();\n return [2 /*return*/, false];\n case 3: return [2 /*return*/];\n }\n });\n });\n };\n IndicatorImp.extend = function (template) {\n var Custom = /** @class */ (function (_super) {\n __extends(Custom, _super);\n function Custom() {\n return _super.call(this, template) || this;\n }\n return Custom;\n }(IndicatorImp));\n return Custom;\n };\n return IndicatorImp;\n}());\n\n/**\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n\n * http://www.apache.org/licenses/LICENSE-2.0\n\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * average price\n */\nvar averagePrice = {\n name: 'AVP',\n shortName: 'AVP',\n series: 'price',\n precision: 2,\n figures: [{ key: 'avp', title: 'AVP: ', type: 'line' }],\n calc: function (dataList) {\n var totalTurnover = 0;\n var totalVolume = 0;\n return dataList.map(function (kLineData) {\n var _a, _b;\n var avp = {};\n var turnover = (_a = kLineData.turnover) !== null && _a !== void 0 ? _a : 0;\n var volume = (_b = kLineData.volume) !== null && _b !== void 0 ? _b : 0;\n totalTurnover += turnover;\n totalVolume += volume;\n if (totalVolume !== 0) {\n avp.avp = totalTurnover / totalVolume;\n }\n return avp;\n });\n }\n};\n\n/**\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n\n * http://www.apache.org/licenses/LICENSE-2.0\n\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar awesomeOscillator = {\n name: 'AO',\n shortName: 'AO',\n calcParams: [5, 34],\n figures: [\n {\n key: 'ao',\n title: 'AO: ',\n type: 'bar',\n baseValue: 0,\n styles: function (_a) {\n var _b, _c;\n var data = _a.data, indicator = _a.indicator, defaultStyles = _a.defaultStyles;\n var prev = data.prev, current = data.current;\n var prevAo = (_b = prev === null || prev === void 0 ? void 0 : prev.ao) !== null && _b !== void 0 ? _b : Number.MIN_SAFE_INTEGER;\n var currentAo = (_c = current === null || current === void 0 ? void 0 : current.ao) !== null && _c !== void 0 ? _c : Number.MIN_SAFE_INTEGER;\n var color = '';\n if (currentAo > prevAo) {\n color = formatValue(indicator.styles, 'bars[0].upColor', defaultStyles.bars[0].upColor);\n }\n else {\n color = formatValue(indicator.styles, 'bars[0].downColor', defaultStyles.bars[0].downColor);\n }\n var style = currentAo > prevAo ? 'stroke' : 'fill';\n return { color: color, style: style, borderColor: color };\n }\n }\n ],\n calc: function (dataList, indicator) {\n var params = indicator.calcParams;\n var maxPeriod = Math.max(params[0], params[1]);\n var shortSum = 0;\n var longSum = 0;\n var short = 0;\n var long = 0;\n return dataList.map(function (kLineData, i) {\n var ao = {};\n var middle = (kLineData.low + kLineData.high) / 2;\n shortSum += middle;\n longSum += middle;\n if (i >= params[0] - 1) {\n short = shortSum / params[0];\n var agoKLineData = dataList[i - (params[0] - 1)];\n shortSum -= (agoKLineData.low + agoKLineData.high) / 2;\n }\n if (i >= params[1] - 1) {\n long = longSum / params[1];\n var agoKLineData = dataList[i - (params[1] - 1)];\n longSum -= (agoKLineData.low + agoKLineData.high) / 2;\n }\n if (i >= maxPeriod - 1) {\n ao.ao = short - long;\n }\n return ao;\n });\n }\n};\n\n/**\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n\n * http://www.apache.org/licenses/LICENSE-2.0\n\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * BIAS\n * 乖离率=[(当日收盘价-N日平均价)/N日平均价]*100%\n */\nvar bias = {\n name: 'BIAS',\n shortName: 'BIAS',\n calcParams: [6, 12, 24],\n figures: [\n { key: 'bias1', title: 'BIAS6: ', type: 'line' },\n { key: 'bias2', title: 'BIAS12: ', type: 'line' },\n { key: 'bias3', title: 'BIAS24: ', type: 'line' }\n ],\n regenerateFigures: function (params) { return params.map(function (p, i) { return ({ key: \"bias\".concat(i + 1), title: \"BIAS\".concat(p, \": \"), type: 'line' }); }); },\n calc: function (dataList, indicator) {\n var params = indicator.calcParams, figures = indicator.figures;\n var closeSums = [];\n return dataList.map(function (kLineData, i) {\n var bias = {};\n var close = kLineData.close;\n params.forEach(function (p, index) {\n var _a;\n closeSums[index] = ((_a = closeSums[index]) !== null && _a !== void 0 ? _a : 0) + close;\n if (i >= p - 1) {\n var mean = closeSums[index] / params[index];\n bias[figures[index].key] = ((close - mean) / mean) * 100;\n closeSums[index] -= dataList[i - (p - 1)].close;\n }\n });\n return bias;\n });\n }\n};\n\n/**\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n\n * http://www.apache.org/licenses/LICENSE-2.0\n\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * 计算布林指标中的标准差\n * @param dataList\n * @param ma\n * @return {number}\n */\nfunction getBollMd(dataList, ma) {\n var dataSize = dataList.length;\n var sum = 0;\n dataList.forEach(function (data) {\n var closeMa = data.close - ma;\n sum += closeMa * closeMa;\n });\n sum = Math.abs(sum);\n return Math.sqrt(sum / dataSize);\n}\n/**\n * BOLL\n */\nvar bollingerBands = {\n name: 'BOLL',\n shortName: 'BOLL',\n series: 'price',\n calcParams: [20, 2],\n precision: 2,\n shouldOhlc: true,\n figures: [\n { key: 'up', title: 'UP: ', type: 'line' },\n { key: 'mid', title: 'MID: ', type: 'line' },\n { key: 'dn', title: 'DN: ', type: 'line' }\n ],\n calc: function (dataList, indicator) {\n var params = indicator.calcParams;\n var p = params[0] - 1;\n var closeSum = 0;\n return dataList.map(function (kLineData, i) {\n var close = kLineData.close;\n var boll = {};\n closeSum += close;\n if (i >= p) {\n boll.mid = closeSum / params[0];\n var md = getBollMd(dataList.slice(i - p, i + 1), boll.mid);\n boll.up = boll.mid + params[1] * md;\n boll.dn = boll.mid - params[1] * md;\n closeSum -= dataList[i - p].close;\n }\n return boll;\n });\n }\n};\n\n/**\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n\n * http://www.apache.org/licenses/LICENSE-2.0\n\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * BRAR\n * 默认参数是26。\n * 公式N日BR=N日内(H-CY)之和除以N日内(CY-L)之和*100,\n * 其中,H为当日最高价,L为当日最低价,CY为前一交易日的收盘价,N为设定的时间参数。\n * N日AR=(N日内(H-O)之和除以N日内(O-L)之和)*100,\n * 其中,H为当日最高价,L为当日最低价,O为当日开盘价,N为设定的时间参数\n *\n */\nvar brar = {\n name: 'BRAR',\n shortName: 'BRAR',\n calcParams: [26],\n figures: [\n { key: 'br', title: 'BR: ', type: 'line' },\n { key: 'ar', title: 'AR: ', type: 'line' }\n ],\n calc: function (dataList, indicator) {\n var params = indicator.calcParams;\n var hcy = 0;\n var cyl = 0;\n var ho = 0;\n var ol = 0;\n return dataList.map(function (kLineData, i) {\n var _a, _b;\n var brar = {};\n var high = kLineData.high;\n var low = kLineData.low;\n var open = kLineData.open;\n var prevClose = ((_a = dataList[i - 1]) !== null && _a !== void 0 ? _a : kLineData).close;\n ho += high - open;\n ol += open - low;\n hcy += high - prevClose;\n cyl += prevClose - low;\n if (i >= params[0] - 1) {\n if (ol !== 0) {\n brar.ar = (ho / ol) * 100;\n }\n else {\n brar.ar = 0;\n }\n if (cyl !== 0) {\n brar.br = (hcy / cyl) * 100;\n }\n else {\n brar.br = 0;\n }\n var agoKLineData = dataList[i - (params[0] - 1)];\n var agoHigh = agoKLineData.high;\n var agoLow = agoKLineData.low;\n var agoOpen = agoKLineData.open;\n var agoPreClose = ((_b = dataList[i - params[0]]) !== null && _b !== void 0 ? _b : dataList[i - (params[0] - 1)]).close;\n hcy -= agoHigh - agoPreClose;\n cyl -= agoPreClose - agoLow;\n ho -= agoHigh - agoOpen;\n ol -= agoOpen - agoLow;\n }\n return brar;\n });\n }\n};\n\n/**\n * 多空指标\n * 公式: BBI = (MA(CLOSE, M) + MA(CLOSE, N) + MA(CLOSE, O) + MA(CLOSE, P)) / 4\n *\n */\nvar bullAndBearIndex = {\n name: 'BBI',\n shortName: 'BBI',\n series: 'price',\n precision: 2,\n calcParams: [3, 6, 12, 24],\n shouldOhlc: true,\n figures: [{ key: 'bbi', title: 'BBI: ', type: 'line' }],\n calc: function (dataList, indicator) {\n var params = indicator.calcParams;\n var maxPeriod = Math.max.apply(Math, __spreadArray([], __read(params), false));\n var closeSums = [];\n var mas = [];\n return dataList.map(function (kLineData, i) {\n var bbi = {};\n var close = kLineData.close;\n params.forEach(function (p, index) {\n var _a;\n closeSums[index] = ((_a = closeSums[index]) !== null && _a !== void 0 ? _a : 0) + close;\n if (i >= p - 1) {\n mas[index] = closeSums[index] / p;\n closeSums[index] -= dataList[i - (p - 1)].close;\n }\n });\n if (i >= maxPeriod - 1) {\n var maSum_1 = 0;\n mas.forEach(function (ma) {\n maSum_1 += ma;\n });\n bbi.bbi = maSum_1 / 4;\n }\n return bbi;\n });\n }\n};\n\n/**\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n\n * http://www.apache.org/licenses/LICENSE-2.0\n\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * CCI\n * CCI(N日)=(TP-MA)÷MD÷0.015\n * 其中,TP=(最高价+最低价+收盘价)÷3\n * MA=近N日TP价的累计之和÷N\n * MD=近N日TP - 当前MA绝对值的累计之和÷N\n *\n */\nvar commodityChannelIndex = {\n name: 'CCI',\n shortName: 'CCI',\n calcParams: [20],\n figures: [{ key: 'cci', title: 'CCI: ', type: 'line' }],\n calc: function (dataList, indicator) {\n var params = indicator.calcParams;\n var p = params[0] - 1;\n var tpSum = 0;\n var tpList = [];\n return dataList.map(function (kLineData, i) {\n var cci = {};\n var tp = (kLineData.high + kLineData.low + kLineData.close) / 3;\n tpSum += tp;\n tpList.push(tp);\n if (i >= p) {\n var maTp_1 = tpSum / params[0];\n var sliceTpList = tpList.slice(i - p, i + 1);\n var sum_1 = 0;\n sliceTpList.forEach(function (tp) {\n sum_1 += Math.abs(tp - maTp_1);\n });\n var md = sum_1 / params[0];\n cci.cci = md !== 0 ? (tp - maTp_1) / md / 0.015 : 0;\n var agoTp = (dataList[i - p].high + dataList[i - p].low + dataList[i - p].close) / 3;\n tpSum -= agoTp;\n }\n return cci;\n });\n }\n};\n\n/**\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n\n * http:*www.apache.org/licenses/LICENSE-2.0\n\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * MID:=REF(HIGH+LOW,1)/2;\n * CR:SUM(MAX(0,HIGH-MID),N)/SUM(MAX(0,MID-LOW),N)*100;\n * MA1:REF(MA(CR,M1),M1/2.5+1);\n * MA2:REF(MA(CR,M2),M2/2.5+1);\n * MA3:REF(MA(CR,M3),M3/2.5+1);\n * MA4:REF(MA(CR,M4),M4/2.5+1);\n * MID赋值:(昨日最高价+昨日最低价)/2\n * 输出带状能量线:0和最高价-MID的较大值的N日累和/0和MID-最低价的较大值的N日累和*100\n * 输出MA1:M1(5)/2.5+1日前的CR的M1(5)日简单移动平均\n * 输出MA2:M2(10)/2.5+1日前的CR的M2(10)日简单移动平均\n * 输出MA3:M3(20)/2.5+1日前的CR的M3(20)日简单移动平均\n * 输出MA4:M4/2.5+1日前的CR的M4日简单移动平均\n *\n */\nvar currentRatio = {\n name: 'CR',\n shortName: 'CR',\n calcParams: [26, 10, 20, 40, 60],\n figures: [\n { key: 'cr', title: 'CR: ', type: 'line' },\n { key: 'ma1', title: 'MA1: ', type: 'line' },\n { key: 'ma2', title: 'MA2: ', type: 'line' },\n { key: 'ma3', title: 'MA3: ', type: 'line' },\n { key: 'ma4', title: 'MA4: ', type: 'line' }\n ],\n calc: function (dataList, indicator) {\n var params = indicator.calcParams;\n var ma1ForwardPeriod = Math.ceil(params[1] / 2.5 + 1);\n var ma2ForwardPeriod = Math.ceil(params[2] / 2.5 + 1);\n var ma3ForwardPeriod = Math.ceil(params[3] / 2.5 + 1);\n var ma4ForwardPeriod = Math.ceil(params[4] / 2.5 + 1);\n var ma1Sum = 0;\n var ma1List = [];\n var ma2Sum = 0;\n var ma2List = [];\n var ma3Sum = 0;\n var ma3List = [];\n var ma4Sum = 0;\n var ma4List = [];\n var result = [];\n dataList.forEach(function (kLineData, i) {\n var _a, _b, _c, _d, _e;\n var cr = {};\n var prevData = (_a = dataList[i - 1]) !== null && _a !== void 0 ? _a : kLineData;\n var prevMid = (prevData.high + prevData.low) / 2;\n var highSubPreMid = Math.max(0, kLineData.high - prevMid);\n var preMidSubLow = Math.max(0, prevMid - kLineData.low);\n if (i >= params[0] - 1) {\n if (preMidSubLow !== 0) {\n cr.cr = (highSubPreMid / preMidSubLow) * 100;\n }\n else {\n cr.cr = 0;\n }\n ma1Sum += cr.cr;\n ma2Sum += cr.cr;\n ma3Sum += cr.cr;\n ma4Sum += cr.cr;\n if (i >= params[0] + params[1] - 2) {\n ma1List.push(ma1Sum / params[1]);\n if (i >= params[0] + params[1] + ma1ForwardPeriod - 3) {\n cr.ma1 = ma1List[ma1List.length - 1 - ma1ForwardPeriod];\n }\n ma1Sum -= (_b = result[i - (params[1] - 1)].cr) !== null && _b !== void 0 ? _b : 0;\n }\n if (i >= params[0] + params[2] - 2) {\n ma2List.push(ma2Sum / params[2]);\n if (i >= params[0] + params[2] + ma2ForwardPeriod - 3) {\n cr.ma2 = ma2List[ma2List.length - 1 - ma2ForwardPeriod];\n }\n ma2Sum -= (_c = result[i - (params[2] - 1)].cr) !== null && _c !== void 0 ? _c : 0;\n }\n if (i >= params[0] + params[3] - 2) {\n ma3List.push(ma3Sum / params[3]);\n if (i >= params[0] + params[3] + ma3ForwardPeriod - 3) {\n cr.ma3 = ma3List[ma3List.length - 1 - ma3ForwardPeriod];\n }\n ma3Sum -= (_d = result[i - (params[3] - 1)].cr) !== null && _d !== void 0 ? _d : 0;\n }\n if (i >= params[0] + params[4] - 2) {\n ma4List.push(ma4Sum / params[4]);\n if (i >= params[0] + params[4] + ma4ForwardPeriod - 3) {\n cr.ma4 = ma4List[ma4List.length - 1 - ma4ForwardPeriod];\n }\n ma4Sum -= (_e = result[i - (params[4] - 1)].cr) !== null && _e !== void 0 ? _e : 0;\n }\n }\n result.push(cr);\n });\n return result;\n }\n};\n\n/**\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n\n * http://www.apache.org/licenses/LICENSE-2.0\n\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * DMA\n * 公式:DIF:MA(CLOSE,N1)-MA(CLOSE,N2);DIFMA:MA(DIF,M)\n */\nvar differentOfMovingAverage = {\n name: 'DMA',\n shortName: 'DMA',\n calcParams: [10, 50, 10],\n figures: [\n { key: 'dma', title: 'DMA: ', type: 'line' },\n { key: 'ama', title: 'AMA: ', type: 'line' }\n ],\n calc: function (dataList, indicator) {\n var params = indicator.calcParams;\n var maxPeriod = Math.max(params[0], params[1]);\n var closeSum1 = 0;\n var closeSum2 = 0;\n var dmaSum = 0;\n var result = [];\n dataList.forEach(function (kLineData, i) {\n var _a;\n var dma = {};\n var close = kLineData.close;\n closeSum1 += close;\n closeSum2 += close;\n var ma1 = 0;\n var ma2 = 0;\n if (i >= params[0] - 1) {\n ma1 = closeSum1 / params[0];\n closeSum1 -= dataList[i - (params[0] - 1)].close;\n }\n if (i >= params[1] - 1) {\n ma2 = closeSum2 / params[1];\n closeSum2 -= dataList[i - (params[1] - 1)].close;\n }\n if (i >= maxPeriod - 1) {\n var dif = ma1 - ma2;\n dma.dma = dif;\n dmaSum += dif;\n if (i >= maxPeriod + params[2] - 2) {\n dma.ama = dmaSum / params[2];\n dmaSum -= (_a = result[i - (params[2] - 1)].dma) !== null && _a !== void 0 ? _a : 0;\n }\n }\n result.push(dma);\n });\n return result;\n }\n};\n\n/**\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n\n * http://www.apache.org/licenses/LICENSE-2.0\n\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * DMI\n *\n * MTR:=EXPMEMA(MAX(MAX(HIGH-LOW,ABS(HIGH-REF(CLOSE,1))),ABS(REF(CLOSE,1)-LOW)),N)\n * HD :=HIGH-REF(HIGH,1);\n * LD :=REF(LOW,1)-LOW;\n * DMP:=EXPMEMA(IF(HD>0&&HD>LD,HD,0),N);\n * DMM:=EXPMEMA(IF(LD>0&&LD>HD,LD,0),N);\n *\n * PDI: DMP*100/MTR;\n * MDI: DMM*100/MTR;\n * ADX: EXPMEMA(ABS(MDI-PDI)/(MDI+PDI)*100,MM);\n * ADXR:EXPMEMA(ADX,MM);\n * 公式含义:\n * MTR赋值:最高价-最低价和最高价-昨收的绝对值的较大值和昨收-最低价的绝对值的较大值的N日指数平滑移动平均\n * HD赋值:最高价-昨日最高价\n * LD赋值:昨日最低价-最低价\n * DMP赋值:如果HD>0并且HD>LD,返回HD,否则返回0的N日指数平滑移动平均\n * DMM赋值:如果LD>0并且LD>HD,返回LD,否则返回0的N日指数平滑移动平均\n * 输出PDI:DMP*100/MTR\n * 输出MDI:DMM*100/MTR\n * 输出ADX:MDI-PDI的绝对值/(MDI+PDI)*100的MM日指数平滑移动平均\n * 输出ADXR:ADX的MM日指数平滑移动平均\n *\n */\nvar directionalMovementIndex = {\n name: 'DMI',\n shortName: 'DMI',\n calcParams: [14, 6],\n figures: [\n { key: 'pdi', title: 'PDI: ', type: 'line' },\n { key: 'mdi', title: 'MDI: ', type: 'line' },\n { key: 'adx', title: 'ADX: ', type: 'line' },\n { key: 'adxr', title: 'ADXR: ', type: 'line' }\n ],\n calc: function (dataList, indicator) {\n var params = indicator.calcParams;\n var trSum = 0;\n var hSum = 0;\n var lSum = 0;\n var mtr = 0;\n var dmp = 0;\n var dmm = 0;\n var dxSum = 0;\n var adx = 0;\n var result = [];\n dataList.forEach(function (kLineData, i) {\n var _a, _b;\n var dmi = {};\n var prevKLineData = (_a = dataList[i - 1]) !== null && _a !== void 0 ? _a : kLineData;\n var preClose = prevKLineData.close;\n var high = kLineData.high;\n var low = kLineData.low;\n var hl = high - low;\n var hcy = Math.abs(high - preClose);\n var lcy = Math.abs(preClose - low);\n var hhy = high - prevKLineData.high;\n var lyl = prevKLineData.low - low;\n var tr = Math.max(Math.max(hl, hcy), lcy);\n var h = hhy > 0 && hhy > lyl ? hhy : 0;\n var l = lyl > 0 && lyl > hhy ? lyl : 0;\n trSum += tr;\n hSum += h;\n lSum += l;\n if (i >= params[0] - 1) {\n if (i > params[0] - 1) {\n mtr = mtr - mtr / params[0] + tr;\n dmp = dmp - dmp / params[0] + h;\n dmm = dmm - dmm / params[0] + l;\n }\n else {\n mtr = trSum;\n dmp = hSum;\n dmm = lSum;\n }\n var pdi = 0;\n var mdi = 0;\n if (mtr !== 0) {\n pdi = (dmp * 100) / mtr;\n mdi = (dmm * 100) / mtr;\n }\n dmi.pdi = pdi;\n dmi.mdi = mdi;\n var dx = 0;\n if (mdi + pdi !== 0) {\n dx = (Math.abs(mdi - pdi) / (mdi + pdi)) * 100;\n }\n dxSum += dx;\n if (i >= params[0] * 2 - 2) {\n if (i > params[0] * 2 - 2) {\n adx = (adx * (params[0] - 1) + dx) / params[0];\n }\n else {\n adx = dxSum / params[0];\n }\n dmi.adx = adx;\n if (i >= params[0] * 2 + params[1] - 3) {\n dmi.adxr = (((_b = result[i - (params[1] - 1)].adx) !== null && _b !== void 0 ? _b : 0) + adx) / 2;\n }\n }\n }\n result.push(dmi);\n });\n return result;\n }\n};\n\n/**\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n\n * http://www.apache.org/licenses/LICENSE-2.0\n\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n *\n * EMV 简易波动指标\n * 公式:\n * A=(今日最高+今日最低)/2\n * B=(前日最高+前日最低)/2\n * C=今日最高-今日最低\n * EM=(A-B)*C/今日成交额\n * EMV=N日内EM的累和\n * MAEMV=EMV的M日的简单移动平均\n *\n */\nvar easeOfMovementValue = {\n name: 'EMV',\n shortName: 'EMV',\n calcParams: [14, 9],\n figures: [\n { key: 'emv', title: 'EMV: ', type: 'line' },\n { key: 'maEmv', title: 'MAEMV: ', type: 'line' }\n ],\n calc: function (dataList, indicator) {\n var params = indicator.calcParams;\n var emvValueSum = 0;\n var emvValueList = [];\n return dataList.map(function (kLineData, i) {\n var _a;\n var emv = {};\n if (i > 0) {\n var prevKLineData = dataList[i - 1];\n var high = kLineData.high;\n var low = kLineData.low;\n var volume = (_a = kLineData.volume) !== null && _a !== void 0 ? _a : 0;\n var distanceMoved = (high + low) / 2 - (prevKLineData.high + prevKLineData.low) / 2;\n if (volume === 0 || high - low === 0) {\n emv.emv = 0;\n }\n else {\n var ratio = volume / 100000000 / (high - low);\n emv.emv = distanceMoved / ratio;\n }\n emvValueSum += emv.emv;\n emvValueList.push(emv.emv);\n if (i >= params[0]) {\n emv.maEmv = emvValueSum / params[0];\n emvValueSum -= emvValueList[i - params[0]];\n }\n }\n return emv;\n });\n }\n};\n\n/**\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n\n * http://www.apache.org/licenses/LICENSE-2.0\n\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * EMA 指数移动平均\n */\nvar exponentialMovingAverage = {\n name: 'EMA',\n shortName: 'EMA',\n series: 'price',\n calcParams: [6, 12, 20],\n precision: 2,\n shouldOhlc: true,\n figures: [\n { key: 'ema1', title: 'EMA6: ', type: 'line' },\n { key: 'ema2', title: 'EMA12: ', type: 'line' },\n { key: 'ema3', title: 'EMA20: ', type: 'line' }\n ],\n regenerateFigures: function (params) { return params.map(function (p, i) { return ({ key: \"ema\".concat(i + 1), title: \"EMA\".concat(p, \": \"), type: 'line' }); }); },\n calc: function (dataList, indicator) {\n var params = indicator.calcParams, figures = indicator.figures;\n var closeSum = 0;\n var emaValues = [];\n return dataList.map(function (kLineData, i) {\n var ema = {};\n var close = kLineData.close;\n closeSum += close;\n params.forEach(function (p, index) {\n if (i >= p - 1) {\n if (i > p - 1) {\n emaValues[index] = (2 * close + (p - 1) * emaValues[index]) / (p + 1);\n }\n else {\n emaValues[index] = closeSum / p;\n }\n ema[figures[index].key] = emaValues[index];\n }\n });\n return ema;\n });\n }\n};\n\n/**\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n\n * http://www.apache.org/licenses/LICENSE-2.0\n\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * mtm\n * 公式 MTM(N日)=C-CN\n */\nvar momentum = {\n name: 'MTM',\n shortName: 'MTM',\n calcParams: [12, 6],\n figures: [\n { key: 'mtm', title: 'MTM: ', type: 'line' },\n { key: 'maMtm', title: 'MAMTM: ', type: 'line' }\n ],\n calc: function (dataList, indicator) {\n var params = indicator.calcParams;\n var mtmSum = 0;\n var result = [];\n dataList.forEach(function (kLineData, i) {\n var _a;\n var mtm = {};\n if (i >= params[0]) {\n var close_1 = kLineData.close;\n var agoClose = dataList[i - params[0]].close;\n mtm.mtm = close_1 - agoClose;\n mtmSum += mtm.mtm;\n if (i >= params[0] + params[1] - 1) {\n mtm.maMtm = mtmSum / params[1];\n mtmSum -= (_a = result[i - (params[1] - 1)].mtm) !== null && _a !== void 0 ? _a : 0;\n }\n }\n result.push(mtm);\n });\n return result;\n }\n};\n\n/**\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n\n * http://www.apache.org/licenses/LICENSE-2.0\n\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * MA 移动平均\n */\nvar movingAverage = {\n name: 'MA',\n shortName: 'MA',\n series: 'price',\n calcParams: [5, 10, 30, 60],\n precision: 2,\n shouldOhlc: true,\n figures: [\n { key: 'ma1', title: 'MA5: ', type: 'line' },\n { key: 'ma2', title: 'MA10: ', type: 'line' },\n { key: 'ma3', title: 'MA30: ', type: 'line' },\n { key: 'ma4', title: 'MA60: ', type: 'line' }\n ],\n regenerateFigures: function (params) { return params.map(function (p, i) { return ({ key: \"ma\".concat(i + 1), title: \"MA\".concat(p, \": \"), type: 'line' }); }); },\n calc: function (dataList, indicator) {\n var params = indicator.calcParams, figures = indicator.figures;\n var closeSums = [];\n return dataList.map(function (kLineData, i) {\n var ma = {};\n var close = kLineData.close;\n params.forEach(function (p, index) {\n var _a;\n closeSums[index] = ((_a = closeSums[index]) !== null && _a !== void 0 ? _a : 0) + close;\n if (i >= p - 1) {\n ma[figures[index].key] = closeSums[index] / p;\n closeSums[index] -= dataList[i - (p - 1)].close;\n }\n });\n return ma;\n });\n }\n};\n\n/**\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n\n * http://www.apache.org/licenses/LICENSE-2.0\n\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * MACD:参数快线移动平均、慢线移动平均、移动平均,\n * 默认参数值12、26、9。\n * 公式:⒈首先分别计算出收盘价12日指数平滑移动平均线与26日指数平滑移动平均线,分别记为EMA(12)与EMA(26)。\n * ⒉求这两条指数平滑移动平均线的差,即:DIFF = EMA(SHORT) - EMA(LONG)。\n * ⒊再计算DIFF的M日的平均的指数平滑移动平均线,记为DEA。\n * ⒋最后用DIFF减DEA,得MACD。MACD通常绘制成围绕零轴线波动的柱形图。MACD柱状大于0涨颜色,小于0跌颜色。\n */\nvar movingAverageConvergenceDivergence = {\n name: 'MACD',\n shortName: 'MACD',\n calcParams: [12, 26, 9],\n figures: [\n { key: 'dif', title: 'DIF: ', type: 'line' },\n { key: 'dea', title: 'DEA: ', type: 'line' },\n {\n key: 'macd',\n title: 'MACD: ',\n type: 'bar',\n baseValue: 0,\n styles: function (_a) {\n var _b, _c;\n var data = _a.data, indicator = _a.indicator, defaultStyles = _a.defaultStyles;\n var prev = data.prev, current = data.current;\n var prevMacd = (_b = prev === null || prev === void 0 ? void 0 : prev.macd) !== null && _b !== void 0 ? _b : Number.MIN_SAFE_INTEGER;\n var currentMacd = (_c = current === null || current === void 0 ? void 0 : current.macd) !== null && _c !== void 0 ? _c : Number.MIN_SAFE_INTEGER;\n var color = '';\n if (currentMacd > 0) {\n color = formatValue(indicator.styles, 'bars[0].upColor', defaultStyles.bars[0].upColor);\n }\n else if (currentMacd < 0) {\n color = formatValue(indicator.styles, 'bars[0].downColor', defaultStyles.bars[0].downColor);\n }\n else {\n color = formatValue(indicator.styles, 'bars[0].noChangeColor', defaultStyles.bars[0].noChangeColor);\n }\n var style = prevMacd < currentMacd ? 'stroke' : 'fill';\n return { style: style, color: color, borderColor: color };\n }\n }\n ],\n calc: function (dataList, indicator) {\n var params = indicator.calcParams;\n var closeSum = 0;\n var emaShort = 0;\n var emaLong = 0;\n var dif = 0;\n var difSum = 0;\n var dea = 0;\n var maxPeriod = Math.max(params[0], params[1]);\n return dataList.map(function (kLineData, i) {\n var macd = {};\n var close = kLineData.close;\n closeSum += close;\n if (i >= params[0] - 1) {\n if (i > params[0] - 1) {\n emaShort = (2 * close + (params[0] - 1) * emaShort) / (params[0] + 1);\n }\n else {\n emaShort = closeSum / params[0];\n }\n }\n if (i >= params[1] - 1) {\n if (i > params[1] - 1) {\n emaLong = (2 * close + (params[1] - 1) * emaLong) / (params[1] + 1);\n }\n else {\n emaLong = closeSum / params[1];\n }\n }\n if (i >= maxPeriod - 1) {\n dif = emaShort - emaLong;\n macd.dif = dif;\n difSum += dif;\n if (i >= maxPeriod + params[2] - 2) {\n if (i > maxPeriod + params[2] - 2) {\n dea = (dif * 2 + dea * (params[2] - 1)) / (params[2] + 1);\n }\n else {\n dea = difSum / params[2];\n }\n macd.macd = (dif - dea) * 2;\n macd.dea = dea;\n }\n }\n return macd;\n });\n }\n};\n\n/**\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n\n * http://www.apache.org/licenses/LICENSE-2.0\n\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * OBV\n * OBV = REF(OBV) + sign * V\n */\nvar onBalanceVolume = {\n name: 'OBV',\n shortName: 'OBV',\n calcParams: [30],\n figures: [\n { key: 'obv', title: 'OBV: ', type: 'line' },\n { key: 'maObv', title: 'MAOBV: ', type: 'line' }\n ],\n calc: function (dataList, indicator) {\n var params = indicator.calcParams;\n var obvSum = 0;\n var oldObv = 0;\n var result = [];\n dataList.forEach(function (kLineData, i) {\n var _a, _b, _c, _d;\n var prevKLineData = (_a = dataList[i - 1]) !== null && _a !== void 0 ? _a : kLineData;\n if (kLineData.close < prevKLineData.close) {\n oldObv -= (_b = kLineData.volume) !== null && _b !== void 0 ? _b : 0;\n }\n else if (kLineData.close > prevKLineData.close) {\n oldObv += (_c = kLineData.volume) !== null && _c !== void 0 ? _c : 0;\n }\n var obv = { obv: oldObv };\n obvSum += oldObv;\n if (i >= params[0] - 1) {\n obv.maObv = obvSum / params[0];\n obvSum -= (_d = result[i - (params[0] - 1)].obv) !== null && _d !== void 0 ? _d : 0;\n }\n result.push(obv);\n });\n return result;\n }\n};\n\n/**\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n\n * http://www.apache.org/licenses/LICENSE-2.0\n\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * 价量趋势指标\n * 公式:\n * X = (CLOSE - REF(CLOSE, 1)) / REF(CLOSE, 1) * VOLUME\n * PVT = SUM(X)\n *\n */\nvar priceAndVolumeTrend = {\n name: 'PVT',\n shortName: 'PVT',\n figures: [{ key: 'pvt', title: 'PVT: ', type: 'line' }],\n calc: function (dataList) {\n var sum = 0;\n return dataList.map(function (kLineData, i) {\n var _a, _b;\n var pvt = {};\n var close = kLineData.close;\n var volume = (_a = kLineData.volume) !== null && _a !== void 0 ? _a : 1;\n var prevClose = ((_b = dataList[i - 1]) !== null && _b !== void 0 ? _b : kLineData).close;\n var x = 0;\n if (prevClose !== 0) {\n x = ((close - prevClose) / prevClose) * volume;\n }\n sum += x;\n pvt.pvt = sum;\n return pvt;\n });\n }\n};\n\n/**\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n\n * http://www.apache.org/licenses/LICENSE-2.0\n\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * PSY\n * 公式:PSY=N日内的上涨天数/N×100%。\n */\nvar psychologicalLine = {\n name: 'PSY',\n shortName: 'PSY',\n calcParams: [12, 6],\n figures: [\n { key: 'psy', title: 'PSY: ', type: 'line' },\n { key: 'maPsy', title: 'MAPSY: ', type: 'line' }\n ],\n calc: function (dataList, indicator) {\n var params = indicator.calcParams;\n var upCount = 0;\n var psySum = 0;\n var upList = [];\n var result = [];\n dataList.forEach(function (kLineData, i) {\n var _a, _b;\n var psy = {};\n var prevClose = ((_a = dataList[i - 1]) !== null && _a !== void 0 ? _a : kLineData).close;\n var upFlag = kLineData.close - prevClose > 0 ? 1 : 0;\n upList.push(upFlag);\n upCount += upFlag;\n if (i >= params[0] - 1) {\n psy.psy = (upCount / params[0]) * 100;\n psySum += psy.psy;\n if (i >= params[0] + params[1] - 2) {\n psy.maPsy = psySum / params[1];\n psySum -= (_b = result[i - (params[1] - 1)].psy) !== null && _b !== void 0 ? _b : 0;\n }\n upCount -= upList[i - (params[0] - 1)];\n }\n result.push(psy);\n });\n return result;\n }\n};\n\n/**\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n\n * http://www.apache.org/licenses/LICENSE-2.0\n\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * 变动率指标\n * 公式:ROC = (CLOSE - REF(CLOSE, N)) / REF(CLOSE, N)\n */\nvar rateOfChange = {\n name: 'ROC',\n shortName: 'ROC',\n calcParams: [12, 6],\n figures: [\n { key: 'roc', title: 'ROC: ', type: 'line' },\n { key: 'maRoc', title: 'MAROC: ', type: 'line' }\n ],\n calc: function (dataList, indicator) {\n var params = indicator.calcParams;\n var result = [];\n var rocSum = 0;\n dataList.forEach(function (kLineData, i) {\n var _a;\n var roc = {};\n if (i >= params[0]) {\n var close_1 = kLineData.close;\n var agoClose = dataList[i - params[0]].close;\n if (agoClose !== 0) {\n roc.roc = ((close_1 - agoClose) / agoClose) * 100;\n }\n else {\n roc.roc = 0;\n }\n rocSum += roc.roc;\n if (i >= params[0] + params[1] - 1) {\n roc.maRoc = rocSum / params[1];\n rocSum -= (_a = result[i - (params[1] - 1)].roc) !== null && _a !== void 0 ? _a : 0;\n }\n }\n result.push(roc);\n });\n return result;\n }\n};\n\n/**\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n\n * http://www.apache.org/licenses/LICENSE-2.0\n\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * RSI\n * RSI = 100 - 100 / (1 + RMA(MAX(CHANGE(CLOSE), 0), N) / RMA(MAX(-CHANGE(CLOSE), 0), N))\n */\nvar relativeStrengthIndex = {\n name: 'RSI',\n shortName: 'RSI',\n calcParams: [6, 12, 24],\n figures: [\n { key: 'rsi1', title: 'RSI1: ', type: 'line' },\n { key: 'rsi2', title: 'RSI2: ', type: 'line' },\n { key: 'rsi3', title: 'RSI3: ', type: 'line' }\n ],\n regenerateFigures: function (params) {\n return params.map(function (_, index) {\n var num = index + 1;\n return { key: \"rsi\".concat(num), title: \"RSI\".concat(num, \": \"), type: 'line' };\n });\n },\n calc: function (dataList, indicator) {\n var params = indicator.calcParams, figures = indicator.figures;\n var gainSums = [];\n var lossSums = [];\n var avgGains = [];\n var avgLosses = [];\n return dataList.map(function (kLineData, i) {\n var rsi = {};\n var change = i === 0 ? 0 : kLineData.close - dataList[i - 1].close;\n var gain = Math.max(change, 0);\n var loss = Math.max(-change, 0);\n params.forEach(function (p, index) {\n var _a, _b;\n gainSums[index] = ((_a = gainSums[index]) !== null && _a !== void 0 ? _a : 0) + gain;\n lossSums[index] = ((_b = lossSums[index]) !== null && _b !== void 0 ? _b : 0) + loss;\n if (i < p) {\n return;\n }\n if (avgGains[index] === undefined || avgLosses[index] === undefined) {\n avgGains[index] = gainSums[index] / p;\n avgLosses[index] = lossSums[index] / p;\n }\n else {\n avgGains[index] = (avgGains[index] * (p - 1) + gain) / p;\n avgLosses[index] = (avgLosses[index] * (p - 1) + loss) / p;\n }\n if (avgLosses[index] === 0) {\n rsi[figures[index].key] = 100;\n }\n else if (avgGains[index] === 0) {\n rsi[figures[index].key] = 0;\n }\n else {\n rsi[figures[index].key] = 100 - 100 / (1 + avgGains[index] / avgLosses[index]);\n }\n });\n return rsi;\n });\n }\n};\n\n/**\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n\n * http://www.apache.org/licenses/LICENSE-2.0\n\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * sma\n */\nvar simpleMovingAverage = {\n name: 'SMA',\n shortName: 'SMA',\n series: 'price',\n calcParams: [12, 2],\n precision: 2,\n figures: [{ key: 'sma', title: 'SMA: ', type: 'line' }],\n shouldOhlc: true,\n calc: function (dataList, indicator) {\n var params = indicator.calcParams;\n var closeSum = 0;\n var smaValue = 0;\n return dataList.map(function (kLineData, i) {\n var sma = {};\n var close = kLineData.close;\n closeSum += close;\n if (i >= params[0] - 1) {\n if (i > params[0] - 1) {\n smaValue = (close * params[1] + smaValue * (params[0] - params[1] + 1)) / (params[0] + 1);\n }\n else {\n smaValue = closeSum / params[0];\n }\n sma.sma = smaValue;\n }\n return sma;\n });\n }\n};\n\n/**\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n\n * http://www.apache.org/licenses/LICENSE-2.0\n\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * KDJ\n *\n * 当日K值=2/3×前一日K值+1/3×当日RSV\n * 当日D值=2/3×前一日D值+1/3×当日K值\n * 若无前一日K 值与D值,则可分别用50来代替。\n * J值=3*当日K值-2*当日D值\n */\nvar stoch = {\n name: 'KDJ',\n shortName: 'KDJ',\n calcParams: [9, 3, 3],\n figures: [\n { key: 'k', title: 'K: ', type: 'line' },\n { key: 'd', title: 'D: ', type: 'line' },\n { key: 'j', title: 'J: ', type: 'line' }\n ],\n calc: function (dataList, indicator) {\n var params = indicator.calcParams;\n var result = [];\n dataList.forEach(function (kLineData, i) {\n var _a, _b, _c, _d;\n var kdj = {};\n var close = kLineData.close;\n if (i >= params[0] - 1) {\n var lhn = getMaxMin(dataList.slice(i - (params[0] - 1), i + 1), 'high', 'low');\n var hn = lhn[0];\n var ln = lhn[1];\n var hnSubLn = hn - ln;\n var rsv = ((close - ln) / (hnSubLn === 0 ? 1 : hnSubLn)) * 100;\n kdj.k = ((params[1] - 1) * ((_b = (_a = result[i - 1]) === null || _a === void 0 ? void 0 : _a.k) !== null && _b !== void 0 ? _b : 50) + rsv) / params[1];\n kdj.d = ((params[2] - 1) * ((_d = (_c = result[i - 1]) === null || _c === void 0 ? void 0 : _c.d) !== null && _d !== void 0 ? _d : 50) + kdj.k) / params[2];\n kdj.j = 3.0 * kdj.k - 2.0 * kdj.d;\n }\n result.push(kdj);\n });\n return result;\n }\n};\n\n/**\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n\n * http://www.apache.org/licenses/LICENSE-2.0\n\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar stopAndReverse = {\n name: 'SAR',\n shortName: 'SAR',\n series: 'price',\n calcParams: [2, 2, 20],\n precision: 2,\n shouldOhlc: true,\n figures: [\n {\n key: 'sar',\n title: 'SAR: ',\n type: 'circle',\n styles: function (_a) {\n var _b, _c, _d;\n var data = _a.data, indicator = _a.indicator, defaultStyles = _a.defaultStyles;\n var current = data.current;\n var sar = (_b = current === null || current === void 0 ? void 0 : current.sar) !== null && _b !== void 0 ? _b : Number.MIN_SAFE_INTEGER;\n var halfHL = (((_c = current === null || current === void 0 ? void 0 : current.high) !== null && _c !== void 0 ? _c : 0) + ((_d = current === null || current === void 0 ? void 0 : current.low) !== null && _d !== void 0 ? _d : 0)) / 2;\n var color = sar < halfHL ? formatValue(indicator.styles, 'circles[0].upColor', defaultStyles.circles[0].upColor) : formatValue(indicator.styles, 'circles[0].downColor', defaultStyles.circles[0].downColor);\n return { color: color };\n }\n }\n ],\n calc: function (dataList, indicator) {\n var params = indicator.calcParams;\n var startAf = params[0] / 100;\n var step = params[1] / 100;\n var maxAf = params[2] / 100;\n // 加速因子\n var af = startAf;\n // 极值\n var ep = -100;\n // 判断是上涨还是下跌 false:下跌\n var isIncreasing = false;\n var sar = 0;\n return dataList.map(function (kLineData, i) {\n // 上一个周期的sar\n var preSar = sar;\n var high = kLineData.high;\n var low = kLineData.low;\n if (isIncreasing) {\n // 上涨\n if (ep === -100 || ep < high) {\n // 重新初始化值\n ep = high;\n af = Math.min(af + step, maxAf);\n }\n sar = preSar + af * (ep - preSar);\n var lowMin = Math.min(dataList[Math.max(1, i) - 1].low, low);\n if (sar > kLineData.low) {\n sar = ep;\n // 重新初始化值\n af = startAf;\n ep = -100;\n isIncreasing = !isIncreasing;\n }\n else if (sar > lowMin) {\n sar = lowMin;\n }\n }\n else {\n if (ep === -100 || ep > low) {\n // 重新初始化值\n ep = low;\n af = Math.min(af + step, maxAf);\n }\n sar = preSar + af * (ep - preSar);\n var highMax = Math.max(dataList[Math.max(1, i) - 1].high, high);\n if (sar < kLineData.high) {\n sar = ep;\n // 重新初始化值\n af = startAf;\n ep = -100;\n isIncreasing = !isIncreasing;\n }\n else if (sar < highMax) {\n sar = highMax;\n }\n }\n return { high: high, low: low, sar: sar };\n });\n }\n};\n\n/**\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n\n * http:*www.apache.org/licenses/LICENSE-2.0\n\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * trix\n *\n * TR=收盘价的N日指数移动平均的N日指数移动平均的N日指数移动平均;\n * TRIX=(TR-昨日TR)/昨日TR*100;\n * MATRIX=TRIX的M日简单移动平均;\n * 默认参数N设为12,默认参数M设为9;\n * 默认参数12、9\n * 公式:MTR:=EMA(EMA(EMA(CLOSE,N),N),N)\n * TRIX:(MTR-REF(MTR,1))/REF(MTR,1)*100;\n * TRMA:MA(TRIX,M)\n *\n */\nvar tripleExponentiallySmoothedAverage = {\n name: 'TRIX',\n shortName: 'TRIX',\n calcParams: [12, 9],\n figures: [\n { key: 'trix', title: 'TRIX: ', type: 'line' },\n { key: 'maTrix', title: 'MATRIX: ', type: 'line' }\n ],\n calc: function (dataList, indicator) {\n var params = indicator.calcParams;\n var closeSum = 0;\n var ema1 = 0;\n var ema2 = 0;\n var oldTr = 0;\n var ema1Sum = 0;\n var ema2Sum = 0;\n var trixSum = 0;\n var result = [];\n dataList.forEach(function (kLineData, i) {\n var _a;\n var trix = {};\n var close = kLineData.close;\n closeSum += close;\n if (i >= params[0] - 1) {\n if (i > params[0] - 1) {\n ema1 = (2 * close + (params[0] - 1) * ema1) / (params[0] + 1);\n }\n else {\n ema1 = closeSum / params[0];\n }\n ema1Sum += ema1;\n if (i >= params[0] * 2 - 2) {\n if (i > params[0] * 2 - 2) {\n ema2 = (2 * ema1 + (params[0] - 1) * ema2) / (params[0] + 1);\n }\n else {\n ema2 = ema1Sum / params[0];\n }\n ema2Sum += ema2;\n if (i >= params[0] * 3 - 3) {\n var tr = 0;\n var trixValue = 0;\n if (i > params[0] * 3 - 3) {\n tr = (2 * ema2 + (params[0] - 1) * oldTr) / (params[0] + 1);\n trixValue = ((tr - oldTr) / oldTr) * 100;\n }\n else {\n tr = ema2Sum / params[0];\n }\n oldTr = tr;\n trix.trix = trixValue;\n trixSum += trixValue;\n if (i >= params[0] * 3 + params[1] - 4) {\n trix.maTrix = trixSum / params[1];\n trixSum -= (_a = result[i - (params[1] - 1)].trix) !== null && _a !== void 0 ? _a : 0;\n }\n }\n }\n }\n result.push(trix);\n });\n return result;\n }\n};\n\n/**\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n\n * http://www.apache.org/licenses/LICENSE-2.0\n\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nfunction getVolumeFigure() {\n return {\n key: 'volume',\n title: 'VOLUME: ',\n type: 'bar',\n baseValue: 0,\n styles: function (_a) {\n var data = _a.data, indicator = _a.indicator, defaultStyles = _a.defaultStyles;\n var current = data.current;\n var color = formatValue(indicator.styles, 'bars[0].noChangeColor', defaultStyles.bars[0].noChangeColor);\n if (isValid(current)) {\n if (current.close > current.open) {\n color = formatValue(indicator.styles, 'bars[0].upColor', defaultStyles.bars[0].upColor);\n }\n else if (current.close < current.open) {\n color = formatValue(indicator.styles, 'bars[0].downColor', defaultStyles.bars[0].downColor);\n }\n }\n return { color: color };\n }\n };\n}\nvar volume = {\n name: 'VOL',\n shortName: 'VOL',\n series: 'volume',\n calcParams: [5, 10, 20],\n shouldFormatBigNumber: true,\n precision: 0,\n minValue: 0,\n figures: [{ key: 'ma1', title: 'MA5: ', type: 'line' }, { key: 'ma2', title: 'MA10: ', type: 'line' }, { key: 'ma3', title: 'MA20: ', type: 'line' }, getVolumeFigure()],\n regenerateFigures: function (params) {\n var figures = params.map(function (p, i) { return ({ key: \"ma\".concat(i + 1), title: \"MA\".concat(p, \": \"), type: 'line' }); });\n figures.push(getVolumeFigure());\n return figures;\n },\n calc: function (dataList, indicator) {\n var params = indicator.calcParams, figures = indicator.figures;\n var volSums = [];\n return dataList.map(function (kLineData, i) {\n var _a;\n var volume = (_a = kLineData.volume) !== null && _a !== void 0 ? _a : 0;\n var vol = { volume: volume, open: kLineData.open, close: kLineData.close };\n params.forEach(function (p, index) {\n var _a, _b;\n volSums[index] = ((_a = volSums[index]) !== null && _a !== void 0 ? _a : 0) + volume;\n if (i >= p - 1) {\n vol[figures[index].key] = volSums[index] / p;\n volSums[index] -= (_b = dataList[i - (p - 1)].volume) !== null && _b !== void 0 ? _b : 0;\n }\n });\n return vol;\n });\n }\n};\n\n/**\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n\n * http://www.apache.org/licenses/LICENSE-2.0\n\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * VR\n * VR=(UVS+1/2PVS)/(DVS+1/2PVS)\n * 24天以来凡是股价上涨那一天的成交量都称为AV,将24天内的AV总和相加后称为UVS\n * 24天以来凡是股价下跌那一天的成交量都称为BV,将24天内的BV总和相加后称为DVS\n * 24天以来凡是股价不涨不跌,则那一天的成交量都称为CV,将24天内的CV总和相加后称为PVS\n *\n */\nvar volumeRatio = {\n name: 'VR',\n shortName: 'VR',\n calcParams: [26, 6],\n figures: [\n { key: 'vr', title: 'VR: ', type: 'line' },\n { key: 'maVr', title: 'MAVR: ', type: 'line' }\n ],\n calc: function (dataList, indicator) {\n var params = indicator.calcParams;\n var uvs = 0;\n var dvs = 0;\n var pvs = 0;\n var vrSum = 0;\n var result = [];\n dataList.forEach(function (kLineData, i) {\n var _a, _b, _c, _d, _e;\n var vr = {};\n var close = kLineData.close;\n var preClose = ((_a = dataList[i - 1]) !== null && _a !== void 0 ? _a : kLineData).close;\n var volume = (_b = kLineData.volume) !== null && _b !== void 0 ? _b : 0;\n if (close > preClose) {\n uvs += volume;\n }\n else if (close < preClose) {\n dvs += volume;\n }\n else {\n pvs += volume;\n }\n if (i >= params[0] - 1) {\n var halfPvs = pvs / 2;\n if (dvs + halfPvs === 0) {\n vr.vr = 0;\n }\n else {\n vr.vr = ((uvs + halfPvs) / (dvs + halfPvs)) * 100;\n }\n vrSum += vr.vr;\n if (i >= params[0] + params[1] - 2) {\n vr.maVr = vrSum / params[1];\n vrSum -= (_c = result[i - (params[1] - 1)].vr) !== null && _c !== void 0 ? _c : 0;\n }\n var agoData = dataList[i - (params[0] - 1)];\n var agoPreData = (_d = dataList[i - params[0]]) !== null && _d !== void 0 ? _d : agoData;\n var agoClose = agoData.close;\n var agoVolume = (_e = agoData.volume) !== null && _e !== void 0 ? _e : 0;\n if (agoClose > agoPreData.close) {\n uvs -= agoVolume;\n }\n else if (agoClose < agoPreData.close) {\n dvs -= agoVolume;\n }\n else {\n pvs -= agoVolume;\n }\n }\n result.push(vr);\n });\n return result;\n }\n};\n\n/**\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n\n * http://www.apache.org/licenses/LICENSE-2.0\n\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * WR\n * 公式 WR(N) = 100 * [ C - HIGH(N) ] / [ HIGH(N)-LOW(N) ]\n */\nvar williamsR = {\n name: 'WR',\n shortName: 'WR',\n calcParams: [6, 10, 14],\n figures: [\n { key: 'wr1', title: 'WR1: ', type: 'line' },\n { key: 'wr2', title: 'WR2: ', type: 'line' },\n { key: 'wr3', title: 'WR3: ', type: 'line' }\n ],\n regenerateFigures: function (params) { return params.map(function (_, i) { return ({ key: \"wr\".concat(i + 1), title: \"WR\".concat(i + 1, \": \"), type: 'line' }); }); },\n calc: function (dataList, indicator) {\n var params = indicator.calcParams, figures = indicator.figures;\n return dataList.map(function (kLineData, i) {\n var wr = {};\n var close = kLineData.close;\n params.forEach(function (param, index) {\n var p = param - 1;\n if (i >= p) {\n var hln = getMaxMin(dataList.slice(i - p, i + 1), 'high', 'low');\n var hn = hln[0];\n var ln = hln[1];\n var hnSubLn = hn - ln;\n wr[figures[index].key] = hnSubLn === 0 ? 0 : ((close - hn) / hnSubLn) * 100;\n }\n });\n return wr;\n });\n }\n};\n\n/**\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n\n * http://www.apache.org/licenses/LICENSE-2.0\n\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar indicators = {};\nvar extensions$2 = [\n averagePrice,\n awesomeOscillator,\n bias,\n bollingerBands,\n brar,\n bullAndBearIndex,\n commodityChannelIndex,\n currentRatio,\n differentOfMovingAverage,\n directionalMovementIndex,\n easeOfMovementValue,\n exponentialMovingAverage,\n momentum,\n movingAverage,\n movingAverageConvergenceDivergence,\n onBalanceVolume,\n priceAndVolumeTrend,\n psychologicalLine,\n rateOfChange,\n relativeStrengthIndex,\n simpleMovingAverage,\n stoch,\n stopAndReverse,\n tripleExponentiallySmoothedAverage,\n volume,\n volumeRatio,\n williamsR\n];\n// @ts-ignore\nextensions$2.forEach(function (indicator) {\n indicators[indicator.name] = IndicatorImp.extend(indicator);\n});\nfunction registerIndicator(indicator) {\n // @ts-ignore\n indicators[indicator.name] = IndicatorImp.extend(indicator);\n}\nfunction getIndicatorClass(name) {\n var _a;\n return (_a = indicators[name]) !== null && _a !== void 0 ? _a : null;\n}\nfunction getSupportedIndicators() {\n return Object.keys(indicators);\n}\n\n/**\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n\n * http://www.apache.org/licenses/LICENSE-2.0\n\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar Eventful = /** @class */ (function () {\n function Eventful() {\n this._children = [];\n this._callbacks = new Map();\n }\n Eventful.prototype.registerEvent = function (name, callback) {\n this._callbacks.set(name, callback);\n return this;\n };\n Eventful.prototype.onEvent = function (name, event) {\n var callback = this._callbacks.get(name);\n if (isValid(callback) && this.checkEventOn(event)) {\n return callback(event);\n }\n return false;\n };\n Eventful.prototype.dispatchEventToChildren = function (name, event) {\n var start = this._children.length - 1;\n if (start > -1) {\n for (var i = start; i > -1; i--) {\n if (this._children[i].dispatchEvent(name, event)) {\n return true;\n }\n }\n }\n return false;\n };\n Eventful.prototype.dispatchEvent = function (name, event) {\n if (this.dispatchEventToChildren(name, event)) {\n return true;\n }\n return this.onEvent(name, event);\n };\n Eventful.prototype.addChild = function (eventful) {\n this._children.push(eventful);\n return this;\n };\n Eventful.prototype.clear = function () {\n this._children = [];\n };\n return Eventful;\n}());\n\n/**\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n\n * http://www.apache.org/licenses/LICENSE-2.0\n\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar DEVIATION = 2;\nvar FigureImp = /** @class */ (function (_super) {\n __extends(FigureImp, _super);\n function FigureImp(figure) {\n var _this = _super.call(this) || this;\n _this.attrs = figure.attrs;\n _this.styles = figure.styles;\n return _this;\n }\n FigureImp.prototype.checkEventOn = function (event) {\n return this.checkEventOnImp(event, this.attrs, this.styles);\n };\n FigureImp.prototype.setAttrs = function (attrs) {\n this.attrs = attrs;\n return this;\n };\n FigureImp.prototype.setStyles = function (styles) {\n this.styles = styles;\n return this;\n };\n FigureImp.prototype.draw = function (ctx) {\n this.drawImp(ctx, this.attrs, this.styles);\n };\n FigureImp.extend = function (figure) {\n var Custom = /** @class */ (function (_super) {\n __extends(Custom, _super);\n function Custom() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n Custom.prototype.checkEventOnImp = function (coordinate, attrs, styles) {\n return figure.checkEventOn(coordinate, attrs, styles);\n };\n Custom.prototype.drawImp = function (ctx, attrs, styles) {\n figure.draw(ctx, attrs, styles);\n };\n return Custom;\n }(FigureImp));\n return Custom;\n };\n return FigureImp;\n}(Eventful));\n\n/**\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n\n * http://www.apache.org/licenses/LICENSE-2.0\n\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nfunction checkCoordinateOnLine(coordinate, attrs) {\n var e_1, _a;\n var lines = [];\n lines = lines.concat(attrs);\n try {\n for (var lines_1 = __values(lines), lines_1_1 = lines_1.next(); !lines_1_1.done; lines_1_1 = lines_1.next()) {\n var line_1 = lines_1_1.value;\n var coordinates = line_1.coordinates;\n if (coordinates.length > 1) {\n for (var i = 1; i < coordinates.length; i++) {\n var prevCoordinate = coordinates[i - 1];\n var currentCoordinate = coordinates[i];\n if (prevCoordinate.x === currentCoordinate.x) {\n if (Math.abs(prevCoordinate.y - coordinate.y) + Math.abs(currentCoordinate.y - coordinate.y) - Math.abs(prevCoordinate.y - currentCoordinate.y) < DEVIATION + DEVIATION && Math.abs(coordinate.x - prevCoordinate.x) < DEVIATION) {\n return true;\n }\n }\n else {\n var kb = getLinearSlopeIntercept(prevCoordinate, currentCoordinate);\n var y = getLinearYFromSlopeIntercept(kb, coordinate);\n var yDif = Math.abs(y - coordinate.y);\n if (Math.abs(prevCoordinate.x - coordinate.x) + Math.abs(currentCoordinate.x - coordinate.x) - Math.abs(prevCoordinate.x - currentCoordinate.x) < DEVIATION + DEVIATION && (yDif * yDif) / (kb[0] * kb[0] + 1) < DEVIATION * DEVIATION) {\n return true;\n }\n }\n }\n }\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (lines_1_1 && !lines_1_1.done && (_a = lines_1.return)) _a.call(lines_1);\n }\n finally { if (e_1) throw e_1.error; }\n }\n return false;\n}\nfunction getLinearYFromSlopeIntercept(kb, coordinate) {\n if (kb !== null) {\n return coordinate.x * kb[0] + kb[1];\n }\n return coordinate.y;\n}\n/**\n * 获取点在两点决定的一次函数上的y值\n * @param coordinate1\n * @param coordinate2\n * @param targetCoordinate\n */\nfunction getLinearYFromCoordinates(coordinate1, coordinate2, targetCoordinate) {\n var kb = getLinearSlopeIntercept(coordinate1, coordinate2);\n return getLinearYFromSlopeIntercept(kb, targetCoordinate);\n}\nfunction getLinearSlopeIntercept(coordinate1, coordinate2) {\n var difX = coordinate1.x - coordinate2.x;\n if (difX !== 0) {\n var k = (coordinate1.y - coordinate2.y) / difX;\n var b = coordinate1.y - k * coordinate1.x;\n return [k, b];\n }\n return null;\n}\nfunction lineTo(ctx, coordinates, smooth) {\n var length = coordinates.length;\n var smoothParam = isNumber(smooth) ? (smooth > 0 && smooth < 1 ? smooth : 0) : smooth ? 0.5 : 0;\n if (smoothParam > 0 && length > 2) {\n var cpx0 = coordinates[0].x;\n var cpy0 = coordinates[0].y;\n for (var i = 1; i < length - 1; i++) {\n var prevCoordinate = coordinates[i - 1];\n var coordinate = coordinates[i];\n var nextCoordinate = coordinates[i + 1];\n var dx01 = coordinate.x - prevCoordinate.x;\n var dy01 = coordinate.y - prevCoordinate.y;\n var dx12 = nextCoordinate.x - coordinate.x;\n var dy12 = nextCoordinate.y - coordinate.y;\n var dx02 = nextCoordinate.x - prevCoordinate.x;\n var dy02 = nextCoordinate.y - prevCoordinate.y;\n var prevSegmentLength = Math.sqrt(dx01 * dx01 + dy01 * dy01);\n var nextSegmentLength = Math.sqrt(dx12 * dx12 + dy12 * dy12);\n var segmentLengthRatio = nextSegmentLength / (nextSegmentLength + prevSegmentLength);\n var nextCpx = coordinate.x + dx02 * smoothParam * segmentLengthRatio;\n var nextCpy = coordinate.y + dy02 * smoothParam * segmentLengthRatio;\n nextCpx = Math.min(nextCpx, Math.max(nextCoordinate.x, coordinate.x));\n nextCpy = Math.min(nextCpy, Math.max(nextCoordinate.y, coordinate.y));\n nextCpx = Math.max(nextCpx, Math.min(nextCoordinate.x, coordinate.x));\n nextCpy = Math.max(nextCpy, Math.min(nextCoordinate.y, coordinate.y));\n dx02 = nextCpx - coordinate.x;\n dy02 = nextCpy - coordinate.y;\n var cpx1 = coordinate.x - (dx02 * prevSegmentLength) / nextSegmentLength;\n var cpy1 = coordinate.y - (dy02 * prevSegmentLength) / nextSegmentLength;\n cpx1 = Math.min(cpx1, Math.max(prevCoordinate.x, coordinate.x));\n cpy1 = Math.min(cpy1, Math.max(prevCoordinate.y, coordinate.y));\n cpx1 = Math.max(cpx1, Math.min(prevCoordinate.x, coordinate.x));\n cpy1 = Math.max(cpy1, Math.min(prevCoordinate.y, coordinate.y));\n dx02 = coordinate.x - cpx1;\n dy02 = coordinate.y - cpy1;\n nextCpx = coordinate.x + (dx02 * nextSegmentLength) / prevSegmentLength;\n nextCpy = coordinate.y + (dy02 * nextSegmentLength) / prevSegmentLength;\n ctx.bezierCurveTo(cpx0, cpy0, cpx1, cpy1, coordinate.x, coordinate.y);\n cpx0 = nextCpx;\n cpy0 = nextCpy;\n }\n var lastCoordinate = coordinates[length - 1];\n ctx.bezierCurveTo(cpx0, cpy0, lastCoordinate.x, lastCoordinate.y, lastCoordinate.x, lastCoordinate.y);\n }\n else {\n for (var i = 1; i < length; i++) {\n ctx.lineTo(coordinates[i].x, coordinates[i].y);\n }\n }\n}\nfunction drawLine(ctx, attrs, styles) {\n var lines = [];\n lines = lines.concat(attrs);\n var _a = styles.style, style = _a === void 0 ? 'solid' : _a, _b = styles.smooth, smooth = _b === void 0 ? false : _b, _c = styles.size, size = _c === void 0 ? 1 : _c, _d = styles.color, color = _d === void 0 ? 'currentColor' : _d, _e = styles.dashedValue, dashedValue = _e === void 0 ? [2, 2] : _e, lineCap = styles.lineCap, lineJoin = styles.lineJoin;\n var isSmooth = isNumber(smooth) ? smooth > 0 : smooth;\n ctx.lineWidth = size;\n ctx.strokeStyle = color;\n // Use explicit lineCap/lineJoin if provided, otherwise default based on smooth\n if (isString(lineCap)) {\n ctx.lineCap = lineCap;\n }\n else if (isSmooth) {\n ctx.lineCap = 'round';\n }\n else {\n ctx.lineCap = 'butt';\n }\n if (isString(lineJoin)) {\n ctx.lineJoin = lineJoin;\n }\n else if (isSmooth) {\n ctx.lineJoin = 'round';\n }\n else {\n ctx.lineJoin = 'miter';\n }\n if (style === 'dashed') {\n ctx.setLineDash(dashedValue);\n }\n else {\n ctx.setLineDash([]);\n }\n var correction = size % 2 === 1 ? 0.5 : 0;\n lines.forEach(function (_a) {\n var coordinates = _a.coordinates;\n if (coordinates.length > 1) {\n if (coordinates.length === 2 && (coordinates[0].x === coordinates[1].x || coordinates[0].y === coordinates[1].y)) {\n ctx.beginPath();\n if (coordinates[0].x === coordinates[1].x) {\n ctx.moveTo(coordinates[0].x + correction, coordinates[0].y);\n ctx.lineTo(coordinates[1].x + correction, coordinates[1].y);\n }\n else {\n ctx.moveTo(coordinates[0].x, coordinates[0].y + correction);\n ctx.lineTo(coordinates[1].x, coordinates[1].y + correction);\n }\n ctx.stroke();\n ctx.closePath();\n }\n else {\n ctx.save();\n if (size % 2 === 1) {\n ctx.translate(0.5, 0.5);\n }\n ctx.beginPath();\n ctx.moveTo(coordinates[0].x, coordinates[0].y);\n lineTo(ctx, coordinates, smooth);\n ctx.stroke();\n ctx.closePath();\n ctx.restore();\n }\n }\n });\n}\nvar line = {\n name: 'line',\n checkEventOn: checkCoordinateOnLine,\n draw: function (ctx, attrs, styles) {\n drawLine(ctx, attrs, styles);\n }\n};\n\n/**\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n\n * http://www.apache.org/licenses/LICENSE-2.0\n\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nfunction getDistance(coordinate1, coordinate2) {\n var xDif = coordinate1.x - coordinate2.x;\n var yDif = coordinate1.y - coordinate2.y;\n return Math.sqrt(xDif * xDif + yDif * yDif);\n}\n\n/**\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n\n * http://www.apache.org/licenses/LICENSE-2.0\n\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nfunction checkCoordinateOnArc(coordinate, attrs) {\n var e_1, _a;\n var arcs = [];\n arcs = arcs.concat(attrs);\n try {\n for (var arcs_1 = __values(arcs), arcs_1_1 = arcs_1.next(); !arcs_1_1.done; arcs_1_1 = arcs_1.next()) {\n var arc_1 = arcs_1_1.value;\n if (Math.abs(getDistance(coordinate, arc_1) - arc_1.r) < DEVIATION) {\n var r = arc_1.r, startAngle = arc_1.startAngle, endAngle = arc_1.endAngle;\n var startCoordinateX = r * Math.cos(startAngle) + arc_1.x;\n var startCoordinateY = r * Math.sin(startAngle) + arc_1.y;\n var endCoordinateX = r * Math.cos(endAngle) + arc_1.x;\n var endCoordinateY = r * Math.sin(endAngle) + arc_1.y;\n if (coordinate.x <= Math.max(startCoordinateX, endCoordinateX) + DEVIATION && coordinate.x >= Math.min(startCoordinateX, endCoordinateX) - DEVIATION && coordinate.y <= Math.max(startCoordinateY, endCoordinateY) + DEVIATION && coordinate.y >= Math.min(startCoordinateY, endCoordinateY) - DEVIATION) {\n return true;\n }\n }\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (arcs_1_1 && !arcs_1_1.done && (_a = arcs_1.return)) _a.call(arcs_1);\n }\n finally { if (e_1) throw e_1.error; }\n }\n return false;\n}\nfunction drawArc(ctx, attrs, styles) {\n var arcs = [];\n arcs = arcs.concat(attrs);\n var _a = styles.style, style = _a === void 0 ? 'solid' : _a, _b = styles.size, size = _b === void 0 ? 1 : _b, _c = styles.color, color = _c === void 0 ? 'currentColor' : _c, _d = styles.dashedValue, dashedValue = _d === void 0 ? [2, 2] : _d;\n ctx.lineWidth = size;\n ctx.strokeStyle = color;\n if (style === 'dashed') {\n ctx.setLineDash(dashedValue);\n }\n else {\n ctx.setLineDash([]);\n }\n arcs.forEach(function (_a) {\n var x = _a.x, y = _a.y, r = _a.r, startAngle = _a.startAngle, endAngle = _a.endAngle;\n ctx.beginPath();\n ctx.arc(x, y, r, startAngle, endAngle);\n ctx.stroke();\n ctx.closePath();\n });\n}\nvar arc = {\n name: 'arc',\n checkEventOn: checkCoordinateOnArc,\n draw: function (ctx, attrs, styles) {\n drawArc(ctx, attrs, styles);\n }\n};\n\n/**\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n\n * http://www.apache.org/licenses/LICENSE-2.0\n\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nfunction isTransparent(color) {\n return color === 'transparent' || color === 'none' || /^[rR][gG][Bb][Aa]\\(([\\s]*(2[0-4][0-9]|25[0-5]|[01]?[0-9][0-9]?)[\\s]*,){3}[\\s]*0[\\s]*\\)$/.test(color) || /^[hH][Ss][Ll][Aa]\\(([\\s]*(360|3[0-5][0-9]|[012]?[0-9][0-9]?)[\\s]*,)([\\s]*((100|[0-9][0-9]?)%|0)[\\s]*,){2}([\\s]*0[\\s]*)\\)$/.test(color);\n}\nfunction hexToRgb(hex, alpha) {\n var h = hex.replace(/^#/, '');\n var i = parseInt(h, 16);\n var r = (i >> 16) & 255;\n var g = (i >> 8) & 255;\n var b = i & 255;\n return \"rgba(\".concat(r, \", \").concat(g, \", \").concat(b, \", \").concat(alpha !== null && alpha !== void 0 ? alpha : 1, \")\");\n}\n\n/**\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n\n * http://www.apache.org/licenses/LICENSE-2.0\n\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nfunction checkCoordinateOnCircle(coordinate, attrs) {\n var e_1, _a;\n var circles = [];\n circles = circles.concat(attrs);\n try {\n for (var circles_1 = __values(circles), circles_1_1 = circles_1.next(); !circles_1_1.done; circles_1_1 = circles_1.next()) {\n var circle_1 = circles_1_1.value;\n var x = circle_1.x, y = circle_1.y, r = circle_1.r;\n var difX = coordinate.x - x;\n var difY = coordinate.y - y;\n if (!(difX * difX + difY * difY > r * r)) {\n return true;\n }\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (circles_1_1 && !circles_1_1.done && (_a = circles_1.return)) _a.call(circles_1);\n }\n finally { if (e_1) throw e_1.error; }\n }\n return false;\n}\nfunction drawCircle(ctx, attrs, styles) {\n var circles = [];\n circles = circles.concat(attrs);\n var _a = styles.style, style = _a === void 0 ? 'fill' : _a, _b = styles.color, color = _b === void 0 ? 'currentColor' : _b, _c = styles.borderSize, borderSize = _c === void 0 ? 1 : _c, _d = styles.borderColor, borderColor = _d === void 0 ? 'currentColor' : _d, _e = styles.borderStyle, borderStyle = _e === void 0 ? 'solid' : _e, _f = styles.borderDashedValue, borderDashedValue = _f === void 0 ? [2, 2] : _f;\n var solid = (style === 'fill' || styles.style === 'stroke_fill') && (!isString(color) || !isTransparent(color));\n if (solid) {\n ctx.fillStyle = color;\n circles.forEach(function (_a) {\n var x = _a.x, y = _a.y, r = _a.r;\n ctx.beginPath();\n ctx.arc(x, y, r, 0, Math.PI * 2);\n ctx.closePath();\n ctx.fill();\n });\n }\n if ((style === 'stroke' || styles.style === 'stroke_fill') && borderSize > 0 && !isTransparent(borderColor)) {\n ctx.strokeStyle = borderColor;\n ctx.lineWidth = borderSize;\n if (borderStyle === 'dashed') {\n ctx.setLineDash(borderDashedValue);\n }\n else {\n ctx.setLineDash([]);\n }\n circles.forEach(function (_a) {\n var x = _a.x, y = _a.y, r = _a.r;\n if (!solid || r > borderSize) {\n ctx.beginPath();\n ctx.arc(x, y, r, 0, Math.PI * 2);\n ctx.closePath();\n ctx.stroke();\n }\n });\n }\n}\nvar circle = {\n name: 'circle',\n checkEventOn: checkCoordinateOnCircle,\n draw: function (ctx, attrs, styles) {\n drawCircle(ctx, attrs, styles);\n }\n};\n\n/**\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n\n * http://www.apache.org/licenses/LICENSE-2.0\n\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nfunction checkCoordinateOnRect(coordinate, attrs) {\n var e_1, _a;\n var rects = [];\n rects = rects.concat(attrs);\n try {\n for (var rects_1 = __values(rects), rects_1_1 = rects_1.next(); !rects_1_1.done; rects_1_1 = rects_1.next()) {\n var rect_1 = rects_1_1.value;\n var x = rect_1.x;\n var width = rect_1.width;\n if (width < DEVIATION * 2) {\n x -= DEVIATION;\n width = DEVIATION * 2;\n }\n var y = rect_1.y;\n var height = rect_1.height;\n if (height < DEVIATION * 2) {\n y -= DEVIATION;\n height = DEVIATION * 2;\n }\n if (coordinate.x >= x && coordinate.x <= x + width && coordinate.y >= y && coordinate.y <= y + height) {\n return true;\n }\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (rects_1_1 && !rects_1_1.done && (_a = rects_1.return)) _a.call(rects_1);\n }\n finally { if (e_1) throw e_1.error; }\n }\n return false;\n}\nfunction drawRect(ctx, attrs, styles) {\n var _a;\n var rects = [];\n rects = rects.concat(attrs);\n var _b = styles.style, style = _b === void 0 ? 'fill' : _b, _c = styles.color, color = _c === void 0 ? 'transparent' : _c, _d = styles.borderSize, borderSize = _d === void 0 ? 1 : _d, _e = styles.borderColor, borderColor = _e === void 0 ? 'transparent' : _e, _f = styles.borderStyle, borderStyle = _f === void 0 ? 'solid' : _f, _g = styles.borderRadius, r = _g === void 0 ? 0 : _g, _h = styles.borderDashedValue, borderDashedValue = _h === void 0 ? [2, 2] : _h;\n var draw = (_a = ctx.roundRect) !== null && _a !== void 0 ? _a : ctx.rect;\n var solid = (style === 'fill' || styles.style === 'stroke_fill') && (!isString(color) || !isTransparent(color));\n if (solid) {\n ctx.fillStyle = color;\n rects.forEach(function (_a) {\n var x = _a.x, y = _a.y, w = _a.width, h = _a.height;\n ctx.beginPath();\n draw.call(ctx, x, y, w, h, r);\n ctx.closePath();\n ctx.fill();\n });\n }\n if ((style === 'stroke' || styles.style === 'stroke_fill') && borderSize > 0 && !isTransparent(borderColor)) {\n ctx.strokeStyle = borderColor;\n ctx.fillStyle = borderColor;\n ctx.lineWidth = borderSize;\n if (borderStyle === 'dashed') {\n ctx.setLineDash(borderDashedValue);\n }\n else {\n ctx.setLineDash([]);\n }\n var correction_1 = borderSize % 2 === 1 ? 0.5 : 0;\n var doubleCorrection_1 = Math.round(correction_1 * 2);\n rects.forEach(function (_a) {\n var x = _a.x, y = _a.y, w = _a.width, h = _a.height;\n if (w > borderSize * 2 && h > borderSize * 2) {\n ctx.beginPath();\n draw.call(ctx, x + correction_1, y + correction_1, w - doubleCorrection_1, h - doubleCorrection_1, r);\n ctx.closePath();\n ctx.stroke();\n }\n else {\n if (!solid) {\n ctx.fillRect(x, y, w, h);\n }\n }\n });\n }\n}\nvar rect = {\n name: 'rect',\n checkEventOn: checkCoordinateOnRect,\n draw: function (ctx, attrs, styles) {\n drawRect(ctx, attrs, styles);\n }\n};\n\n/**\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n\n * http://www.apache.org/licenses/LICENSE-2.0\n\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar COMMAND_ARGUMENT_COUNTS = {\n A: 7,\n C: 6,\n H: 1,\n L: 2,\n M: 2,\n Q: 4,\n S: 4,\n T: 2,\n V: 1,\n Z: 0\n};\nvar PATH_CACHE_LIMIT = 256;\nvar EMPTY_PATH = [];\nvar pathCache = new Map();\nvar tokenRegex = /[a-zA-Z]|[-+]?(?:\\d*\\.\\d+|\\d+\\.?)(?:[eE][-+]?\\d+)?/g;\nfunction tokenizePath(path) {\n var tokens = [];\n var lastIndex = 0;\n tokenRegex.lastIndex = 0;\n var match = tokenRegex.exec(path);\n while (match !== null) {\n if (!/^[\\s,]*$/.test(path.slice(lastIndex, match.index))) {\n return null;\n }\n var token = match[0];\n if (/^[a-zA-Z]$/.test(token)) {\n tokens.push(token);\n }\n else {\n var value = Number(token);\n if (!isFinite(value)) {\n return null;\n }\n tokens.push(value);\n }\n lastIndex = tokenRegex.lastIndex;\n match = tokenRegex.exec(path);\n }\n return /^[\\s,]*$/.test(path.slice(lastIndex)) ? tokens : null;\n}\nfunction resolveCoordinate(value, current, isRelative) {\n return value + (isRelative ? current : 0);\n}\nfunction ellipticalArcToBeziers(x1, y1, radiusX, radiusY, rotation, largeArcFlag, sweepFlag, x2, y2) {\n var rx = Math.abs(radiusX);\n var ry = Math.abs(radiusY);\n if (x1 === x2 && y1 === y2) {\n return [];\n }\n if (rx === 0 || ry === 0) {\n return [];\n }\n var phi = ((rotation % 360) * Math.PI) / 180;\n var cosPhi = Math.cos(phi);\n var sinPhi = Math.sin(phi);\n var dx = (x1 - x2) / 2;\n var dy = (y1 - y2) / 2;\n var x1p = cosPhi * dx + sinPhi * dy;\n var y1p = -sinPhi * dx + cosPhi * dy;\n var lambda = Math.pow(x1p, 2) / Math.pow(rx, 2) + Math.pow(y1p, 2) / Math.pow(ry, 2);\n if (lambda > 1) {\n var scale = Math.sqrt(lambda);\n rx *= scale;\n ry *= scale;\n }\n var rxSquared = Math.pow(rx, 2);\n var rySquared = Math.pow(ry, 2);\n var x1pSquared = Math.pow(x1p, 2);\n var y1pSquared = Math.pow(y1p, 2);\n var denominator = rxSquared * y1pSquared + rySquared * x1pSquared;\n var numerator = Math.max(0, rxSquared * rySquared - denominator);\n var sign = largeArcFlag === sweepFlag ? -1 : 1;\n var factor = denominator === 0 ? 0 : sign * Math.sqrt(numerator / denominator);\n var cxp = factor * ((rx * y1p) / ry);\n var cyp = factor * ((-ry * x1p) / rx);\n var cx = cosPhi * cxp - sinPhi * cyp + (x1 + x2) / 2;\n var cy = sinPhi * cxp + cosPhi * cyp + (y1 + y2) / 2;\n var startAngle = Math.atan2((y1p - cyp) / ry, (x1p - cxp) / rx);\n var deltaAngle = Math.atan2((-y1p - cyp) / ry, (-x1p - cxp) / rx) - startAngle;\n if (deltaAngle < 0 && sweepFlag === 1) {\n deltaAngle += 2 * Math.PI;\n }\n else if (deltaAngle > 0 && sweepFlag === 0) {\n deltaAngle -= 2 * Math.PI;\n }\n var segmentCount = Math.ceil(Math.abs(deltaAngle) / (Math.PI / 2));\n var segmentAngle = deltaAngle / segmentCount;\n var commands = [];\n for (var i = 0; i < segmentCount; i++) {\n var start = startAngle + i * segmentAngle;\n var end = start + segmentAngle;\n var alpha = (4 / 3) * Math.tan((end - start) / 4);\n var startCos = Math.cos(start);\n var startSin = Math.sin(start);\n var endCos = Math.cos(end);\n var endSin = Math.sin(end);\n var startX = cx + rx * startCos * cosPhi - ry * startSin * sinPhi;\n var startY = cy + rx * startCos * sinPhi + ry * startSin * cosPhi;\n var endX = cx + rx * endCos * cosPhi - ry * endSin * sinPhi;\n var endY = cy + rx * endCos * sinPhi + ry * endSin * cosPhi;\n var startDx = -rx * startSin * cosPhi - ry * startCos * sinPhi;\n var startDy = -rx * startSin * sinPhi + ry * startCos * cosPhi;\n var endDx = -rx * endSin * cosPhi - ry * endCos * sinPhi;\n var endDy = -rx * endSin * sinPhi + ry * endCos * cosPhi;\n commands.push({\n type: 'C',\n cp1X: startX + alpha * startDx,\n cp1Y: startY + alpha * startDy,\n cp2X: endX - alpha * endDx,\n cp2Y: endY - alpha * endDy,\n x: endX,\n y: endY\n });\n }\n return commands;\n}\nfunction compilePath(path) {\n var tokens = tokenizePath(path);\n if (tokens === null) {\n return EMPTY_PATH;\n }\n var compiled = [];\n var index = 0;\n var command = '';\n var currentX = 0;\n var currentY = 0;\n var startX = 0;\n var startY = 0;\n var cubicControlX = 0;\n var cubicControlY = 0;\n var quadraticControlX = 0;\n var quadraticControlY = 0;\n var previousCommand = '';\n var isFirstMoveGroup = false;\n while (index < tokens.length) {\n if (typeof tokens[index] === 'string') {\n command = tokens[index++];\n var upperCommand_1 = command.toUpperCase();\n if (COMMAND_ARGUMENT_COUNTS[upperCommand_1] === undefined) {\n return EMPTY_PATH;\n }\n if (upperCommand_1 === 'Z') {\n compiled.push({ type: 'Z' });\n currentX = startX;\n currentY = startY;\n previousCommand = 'Z';\n command = '';\n continue;\n }\n isFirstMoveGroup = upperCommand_1 === 'M';\n }\n else if (command === '') {\n return EMPTY_PATH;\n }\n var upperCommand = command.toUpperCase();\n var argumentCount = COMMAND_ARGUMENT_COUNTS[upperCommand];\n if (index + argumentCount > tokens.length) {\n return EMPTY_PATH;\n }\n var args = [];\n for (var i = 0; i < argumentCount; i++) {\n var token = tokens[index + i];\n if (typeof token !== 'number') {\n return EMPTY_PATH;\n }\n args.push(token);\n }\n index += argumentCount;\n var isRelative = command === command.toLowerCase();\n switch (upperCommand) {\n case 'M': {\n var x = resolveCoordinate(args[0], currentX, isRelative);\n var y = resolveCoordinate(args[1], currentY, isRelative);\n if (isFirstMoveGroup) {\n compiled.push({ type: 'M', x: x, y: y });\n startX = x;\n startY = y;\n isFirstMoveGroup = false;\n }\n else {\n compiled.push({ type: 'L', x: x, y: y });\n }\n currentX = x;\n currentY = y;\n break;\n }\n case 'L': {\n currentX = resolveCoordinate(args[0], currentX, isRelative);\n currentY = resolveCoordinate(args[1], currentY, isRelative);\n compiled.push({ type: 'L', x: currentX, y: currentY });\n break;\n }\n case 'H':\n currentX = resolveCoordinate(args[0], currentX, isRelative);\n compiled.push({ type: 'L', x: currentX, y: currentY });\n break;\n case 'V':\n currentY = resolveCoordinate(args[0], currentY, isRelative);\n compiled.push({ type: 'L', x: currentX, y: currentY });\n break;\n case 'C': {\n var cp1X = resolveCoordinate(args[0], currentX, isRelative);\n var cp1Y = resolveCoordinate(args[1], currentY, isRelative);\n var cp2X = resolveCoordinate(args[2], currentX, isRelative);\n var cp2Y = resolveCoordinate(args[3], currentY, isRelative);\n var x = resolveCoordinate(args[4], currentX, isRelative);\n var y = resolveCoordinate(args[5], currentY, isRelative);\n compiled.push({ type: 'C', cp1X: cp1X, cp1Y: cp1Y, cp2X: cp2X, cp2Y: cp2Y, x: x, y: y });\n cubicControlX = cp2X;\n cubicControlY = cp2Y;\n currentX = x;\n currentY = y;\n break;\n }\n case 'S': {\n var cp1X = previousCommand === 'C' || previousCommand === 'S' ? 2 * currentX - cubicControlX : currentX;\n var cp1Y = previousCommand === 'C' || previousCommand === 'S' ? 2 * currentY - cubicControlY : currentY;\n var cp2X = resolveCoordinate(args[0], currentX, isRelative);\n var cp2Y = resolveCoordinate(args[1], currentY, isRelative);\n var x = resolveCoordinate(args[2], currentX, isRelative);\n var y = resolveCoordinate(args[3], currentY, isRelative);\n compiled.push({ type: 'C', cp1X: cp1X, cp1Y: cp1Y, cp2X: cp2X, cp2Y: cp2Y, x: x, y: y });\n cubicControlX = cp2X;\n cubicControlY = cp2Y;\n currentX = x;\n currentY = y;\n break;\n }\n case 'Q': {\n var cpX = resolveCoordinate(args[0], currentX, isRelative);\n var cpY = resolveCoordinate(args[1], currentY, isRelative);\n var x = resolveCoordinate(args[2], currentX, isRelative);\n var y = resolveCoordinate(args[3], currentY, isRelative);\n compiled.push({ type: 'Q', cpX: cpX, cpY: cpY, x: x, y: y });\n quadraticControlX = cpX;\n quadraticControlY = cpY;\n currentX = x;\n currentY = y;\n break;\n }\n case 'T': {\n var cpX = previousCommand === 'Q' || previousCommand === 'T' ? 2 * currentX - quadraticControlX : currentX;\n var cpY = previousCommand === 'Q' || previousCommand === 'T' ? 2 * currentY - quadraticControlY : currentY;\n var x = resolveCoordinate(args[0], currentX, isRelative);\n var y = resolveCoordinate(args[1], currentY, isRelative);\n compiled.push({ type: 'Q', cpX: cpX, cpY: cpY, x: x, y: y });\n quadraticControlX = cpX;\n quadraticControlY = cpY;\n currentX = x;\n currentY = y;\n break;\n }\n case 'A': {\n if ((args[3] !== 0 && args[3] !== 1) || (args[4] !== 0 && args[4] !== 1)) {\n return EMPTY_PATH;\n }\n var x = resolveCoordinate(args[5], currentX, isRelative);\n var y = resolveCoordinate(args[6], currentY, isRelative);\n if (args[0] === 0 || args[1] === 0) {\n compiled.push({ type: 'L', x: x, y: y });\n }\n else {\n compiled.push.apply(compiled, __spreadArray([], __read(ellipticalArcToBeziers(currentX, currentY, args[0], args[1], args[2], args[3], args[4], x, y)), false));\n }\n currentX = x;\n currentY = y;\n break;\n }\n default:\n return EMPTY_PATH;\n }\n previousCommand = upperCommand;\n }\n return compiled;\n}\nfunction getCompiledPath(path) {\n var cached = pathCache.get(path);\n if (cached !== undefined) {\n return cached;\n }\n var compiled = compilePath(path);\n if (pathCache.size >= PATH_CACHE_LIMIT) {\n var oldestKey = pathCache.keys().next().value;\n if (oldestKey !== undefined) {\n pathCache.delete(oldestKey);\n }\n }\n pathCache.set(path, compiled);\n return compiled;\n}\nfunction replayPath(ctx, commands, offsetX, offsetY) {\n ctx.beginPath();\n commands.forEach(function (command) {\n switch (command.type) {\n case 'M':\n ctx.moveTo(command.x + offsetX, command.y + offsetY);\n break;\n case 'L':\n ctx.lineTo(command.x + offsetX, command.y + offsetY);\n break;\n case 'C':\n ctx.bezierCurveTo(command.cp1X + offsetX, command.cp1Y + offsetY, command.cp2X + offsetX, command.cp2Y + offsetY, command.x + offsetX, command.y + offsetY);\n break;\n case 'Q':\n ctx.quadraticCurveTo(command.cpX + offsetX, command.cpY + offsetY, command.x + offsetX, command.y + offsetY);\n break;\n case 'Z':\n ctx.closePath();\n break;\n }\n });\n}\nfunction drawPath(ctx, attrs, styles) {\n var paths = Array.isArray(attrs) ? attrs : [attrs];\n var _a = styles.style, style = _a === void 0 ? 'stroke' : _a, _b = styles.lineWidth, lineWidth = _b === void 0 ? 1 : _b, _c = styles.color, color = _c === void 0 ? 'currentColor' : _c;\n ctx.lineWidth = lineWidth;\n ctx.setLineDash([]);\n if (style === 'fill') {\n ctx.fillStyle = color;\n }\n else {\n ctx.strokeStyle = color;\n }\n paths.forEach(function (_a) {\n var x = _a.x, y = _a.y, path = _a.path;\n var commands = getCompiledPath(path);\n if (commands.length > 0) {\n replayPath(ctx, commands, x, y);\n if (style === 'fill') {\n ctx.fill();\n }\n else {\n ctx.stroke();\n }\n }\n });\n}\nvar path = {\n name: 'path',\n checkEventOn: checkCoordinateOnRect,\n draw: function (ctx, attrs, styles) {\n drawPath(ctx, attrs, styles);\n }\n};\n\n/**\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n\n * http://www.apache.org/licenses/LICENSE-2.0\n\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nfunction checkCoordinateOnPolygon(coordinate, attrs) {\n var e_1, _a;\n var polygons = [];\n polygons = polygons.concat(attrs);\n try {\n for (var polygons_1 = __values(polygons), polygons_1_1 = polygons_1.next(); !polygons_1_1.done; polygons_1_1 = polygons_1.next()) {\n var polygon_1 = polygons_1_1.value;\n var on = false;\n var coordinates = polygon_1.coordinates;\n for (var i = 0, j = coordinates.length - 1; i < coordinates.length; j = i++) {\n if (coordinates[i].y > coordinate.y !== coordinates[j].y > coordinate.y && coordinate.x < ((coordinates[j].x - coordinates[i].x) * (coordinate.y - coordinates[i].y)) / (coordinates[j].y - coordinates[i].y) + coordinates[i].x) {\n on = !on;\n }\n }\n if (on) {\n return true;\n }\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (polygons_1_1 && !polygons_1_1.done && (_a = polygons_1.return)) _a.call(polygons_1);\n }\n finally { if (e_1) throw e_1.error; }\n }\n return false;\n}\nfunction drawPolygon(ctx, attrs, styles) {\n var polygons = [];\n polygons = polygons.concat(attrs);\n var _a = styles.style, style = _a === void 0 ? 'fill' : _a, _b = styles.color, color = _b === void 0 ? 'currentColor' : _b, _c = styles.borderSize, borderSize = _c === void 0 ? 1 : _c, _d = styles.borderColor, borderColor = _d === void 0 ? 'currentColor' : _d, _e = styles.borderStyle, borderStyle = _e === void 0 ? 'solid' : _e, _f = styles.borderDashedValue, borderDashedValue = _f === void 0 ? [2, 2] : _f;\n if ((style === 'fill' || styles.style === 'stroke_fill') && (!isString(color) || !isTransparent(color))) {\n ctx.fillStyle = color;\n polygons.forEach(function (_a) {\n var coordinates = _a.coordinates;\n ctx.beginPath();\n ctx.moveTo(coordinates[0].x, coordinates[0].y);\n for (var i = 1; i < coordinates.length; i++) {\n ctx.lineTo(coordinates[i].x, coordinates[i].y);\n }\n ctx.closePath();\n ctx.fill();\n });\n }\n if ((style === 'stroke' || styles.style === 'stroke_fill') && borderSize > 0 && !isTransparent(borderColor)) {\n ctx.strokeStyle = borderColor;\n ctx.lineWidth = borderSize;\n if (borderStyle === 'dashed') {\n ctx.setLineDash(borderDashedValue);\n }\n else {\n ctx.setLineDash([]);\n }\n polygons.forEach(function (_a) {\n var coordinates = _a.coordinates;\n ctx.beginPath();\n ctx.moveTo(coordinates[0].x, coordinates[0].y);\n for (var i = 1; i < coordinates.length; i++) {\n ctx.lineTo(coordinates[i].x, coordinates[i].y);\n }\n ctx.closePath();\n ctx.stroke();\n });\n }\n}\nvar polygon = {\n name: 'polygon',\n checkEventOn: checkCoordinateOnPolygon,\n draw: function (ctx, attrs, styles) {\n drawPolygon(ctx, attrs, styles);\n }\n};\n\n/**\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n\n * http://www.apache.org/licenses/LICENSE-2.0\n\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nfunction getTextRect(attrs, styles) {\n var _a = styles.size, size = _a === void 0 ? 12 : _a, _b = styles.paddingLeft, paddingLeft = _b === void 0 ? 0 : _b, _c = styles.paddingTop, paddingTop = _c === void 0 ? 0 : _c, _d = styles.paddingRight, paddingRight = _d === void 0 ? 0 : _d, _e = styles.paddingBottom, paddingBottom = _e === void 0 ? 0 : _e, _f = styles.weight, weight = _f === void 0 ? 'normal' : _f, family = styles.family;\n var x = attrs.x, y = attrs.y, text = attrs.text, _g = attrs.align, align = _g === void 0 ? 'left' : _g, _h = attrs.baseline, baseline = _h === void 0 ? 'top' : _h, w = attrs.width, h = attrs.height;\n var width = w !== null && w !== void 0 ? w : paddingLeft + calcTextWidth(text, size, weight, family) + paddingRight;\n var height = h !== null && h !== void 0 ? h : paddingTop + size + paddingBottom;\n var startX = 0;\n switch (align) {\n case 'left':\n case 'start': {\n startX = x;\n break;\n }\n case 'right':\n case 'end': {\n startX = x - width;\n break;\n }\n default: {\n startX = x - width / 2;\n break;\n }\n }\n var startY = 0;\n switch (baseline) {\n case 'top':\n case 'hanging': {\n startY = y;\n break;\n }\n case 'bottom':\n case 'ideographic':\n case 'alphabetic': {\n startY = y - height;\n break;\n }\n default: {\n startY = y - height / 2;\n break;\n }\n }\n return { x: startX, y: startY, width: width, height: height };\n}\nfunction checkCoordinateOnText(coordinate, attrs, styles) {\n var e_1, _a;\n var texts = [];\n texts = texts.concat(attrs);\n try {\n for (var texts_1 = __values(texts), texts_1_1 = texts_1.next(); !texts_1_1.done; texts_1_1 = texts_1.next()) {\n var text_1 = texts_1_1.value;\n var _b = getTextRect(text_1, styles), x = _b.x, y = _b.y, width = _b.width, height = _b.height;\n if (coordinate.x >= x && coordinate.x <= x + width && coordinate.y >= y && coordinate.y <= y + height) {\n return true;\n }\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (texts_1_1 && !texts_1_1.done && (_a = texts_1.return)) _a.call(texts_1);\n }\n finally { if (e_1) throw e_1.error; }\n }\n return false;\n}\nfunction drawText(ctx, attrs, styles) {\n var texts = [];\n texts = texts.concat(attrs);\n var _a = styles.color, color = _a === void 0 ? 'currentColor' : _a, _b = styles.size, size = _b === void 0 ? 12 : _b, family = styles.family, weight = styles.weight, _c = styles.paddingLeft, paddingLeft = _c === void 0 ? 0 : _c, _d = styles.paddingTop, paddingTop = _d === void 0 ? 0 : _d, _e = styles.paddingRight, paddingRight = _e === void 0 ? 0 : _e;\n var rects = texts.map(function (text) { return getTextRect(text, styles); });\n drawRect(ctx, rects, __assign(__assign({}, styles), { color: styles.backgroundColor }));\n ctx.textAlign = 'left';\n ctx.textBaseline = 'top';\n ctx.font = createFont(size, weight, family);\n ctx.fillStyle = color;\n texts.forEach(function (text, index) {\n var rect = rects[index];\n ctx.fillText(text.text, rect.x + paddingLeft, rect.y + paddingTop, rect.width - paddingLeft - paddingRight);\n });\n}\nvar text = {\n name: 'text',\n checkEventOn: checkCoordinateOnText,\n draw: function (ctx, attrs, styles) {\n drawText(ctx, attrs, styles);\n }\n};\n\n/**\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n\n * http://www.apache.org/licenses/LICENSE-2.0\n\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar figures = {};\nvar extensions$1 = [circle, line, polygon, rect, text, arc, path];\n// @ts-ignore\nextensions$1.forEach(function (figure) {\n figures[figure.name] = FigureImp.extend(figure);\n});\nfunction getSupportedFigures() {\n return Object.keys(figures);\n}\nfunction registerFigure(figure) {\n // @ts-ignore\n figures[figure.name] = FigureImp.extend(figure);\n}\nfunction getInnerFigureClass(name) {\n var _a;\n return (_a = figures[name]) !== null && _a !== void 0 ? _a : null;\n}\nfunction getFigureClass(name) {\n var _a;\n return (_a = figures[name]) !== null && _a !== void 0 ? _a : null;\n}\n\n/**\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n\n * http://www.apache.org/licenses/LICENSE-2.0\n\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar View = /** @class */ (function (_super) {\n __extends(View, _super);\n function View(widget) {\n var _this = _super.call(this) || this;\n _this._widget = widget;\n return _this;\n }\n View.prototype.getWidget = function () {\n return this._widget;\n };\n View.prototype.createFigure = function (create, eventHandler) {\n var FigureClazz = getInnerFigureClass(create.name);\n if (FigureClazz !== null) {\n var figure = new FigureClazz(create);\n if (isValid(eventHandler)) {\n for (var key in eventHandler) {\n // biome-ignore lint/suspicious/noPrototypeBuiltins: Event handlers may inherit their own implementation.\n if (eventHandler.hasOwnProperty(key)) {\n figure.registerEvent(key, eventHandler[key]);\n }\n }\n this.addChild(figure);\n }\n return figure;\n }\n return null;\n };\n View.prototype.draw = function (ctx) {\n this.clear();\n this.drawImp(ctx);\n };\n View.prototype.checkEventOn = function (_) {\n return true;\n };\n return View;\n}(Eventful));\n\n/**\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n\n * http://www.apache.org/licenses/LICENSE-2.0\n\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar ChildrenView = /** @class */ (function (_super) {\n __extends(ChildrenView, _super);\n function ChildrenView() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n ChildrenView.prototype.eachChildren = function (childCallback) {\n var pane = this.getWidget().getPane();\n var chartStore = pane.getChart().getChartStore();\n var visibleRangeDataList = chartStore.getVisibleRangeDataList();\n var barSpace = chartStore.getBarSpace();\n var dataLength = visibleRangeDataList.length;\n var index = 0;\n while (index < dataLength) {\n childCallback(visibleRangeDataList[index], barSpace, index);\n ++index;\n }\n };\n return ChildrenView;\n}(View));\n\n/**\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n\n * http://www.apache.org/licenses/LICENSE-2.0\n\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar CandleAreaView = /** @class */ (function (_super) {\n __extends(CandleAreaView, _super);\n function CandleAreaView() {\n var _this = _super.apply(this, __spreadArray([], __read(arguments), false)) || this;\n _this._ripplePoint = _this.createFigure({\n name: 'circle',\n attrs: {\n x: 0,\n y: 0,\n r: 0\n },\n styles: {\n style: 'fill'\n }\n });\n _this._animationFrameTime = 0;\n _this._animation = new Animation({ iterationCount: Infinity }).doFrame(function (time) {\n _this._animationFrameTime = time;\n var pane = _this.getWidget().getPane();\n pane.getChart().updatePane(0 /* UpdateLevel.Main */, pane.getId());\n });\n return _this;\n }\n CandleAreaView.prototype.drawImp = function (ctx) {\n var _a, _b, _c;\n var widget = this.getWidget();\n var pane = widget.getPane();\n var chart = pane.getChart();\n var dataList = chart.getDataList();\n var lastDataIndex = dataList.length - 1;\n var bounding = widget.getBounding();\n var yAxis = pane.getYAxisComponentById();\n var styles = chart.getStyles().candle.area;\n var coordinates = [];\n var minY = Number.MAX_SAFE_INTEGER;\n var areaStartX = Number.MIN_SAFE_INTEGER;\n var ripplePointCoordinate = null;\n this.eachChildren(function (data) {\n var x = data.x;\n var kLineData = data.data.current;\n var value = kLineData === null || kLineData === void 0 ? void 0 : kLineData[styles.value];\n if (isNumber(value)) {\n var y = yAxis.convertToPixel(value);\n if (areaStartX === Number.MIN_SAFE_INTEGER) {\n areaStartX = x;\n }\n coordinates.push({ x: x, y: y });\n minY = Math.min(minY, y);\n if (data.dataIndex === lastDataIndex) {\n ripplePointCoordinate = { x: x, y: y };\n }\n }\n });\n if (coordinates.length > 0) {\n (_a = this.createFigure({\n name: 'line',\n attrs: { coordinates: coordinates },\n styles: {\n color: styles.lineColor,\n size: styles.lineSize,\n smooth: styles.smooth\n }\n })) === null || _a === void 0 ? void 0 : _a.draw(ctx);\n // render area\n var backgroundColor = styles.backgroundColor;\n var color = '';\n if (isArray(backgroundColor)) {\n var gradient_1 = ctx.createLinearGradient(0, bounding.height, 0, minY);\n try {\n backgroundColor.forEach(function (_a) {\n var offset = _a.offset, color = _a.color;\n gradient_1.addColorStop(offset, color);\n });\n }\n catch (_d) {\n // Ignore invalid gradient stops.\n }\n color = gradient_1;\n }\n else {\n color = backgroundColor;\n }\n ctx.fillStyle = color;\n ctx.beginPath();\n ctx.moveTo(areaStartX, bounding.height);\n ctx.lineTo(coordinates[0].x, coordinates[0].y);\n lineTo(ctx, coordinates, styles.smooth);\n ctx.lineTo(coordinates[coordinates.length - 1].x, bounding.height);\n ctx.closePath();\n ctx.fill();\n }\n var pointStyles = styles.point;\n if (pointStyles.show && isValid(ripplePointCoordinate)) {\n (_b = this.createFigure({\n name: 'circle',\n attrs: {\n x: ripplePointCoordinate.x,\n y: ripplePointCoordinate.y,\n r: pointStyles.radius\n },\n styles: {\n style: 'fill',\n color: pointStyles.color\n }\n })) === null || _b === void 0 ? void 0 : _b.draw(ctx);\n var rippleRadius = pointStyles.rippleRadius;\n if (pointStyles.animation && isNumber(pointStyles.animationDuration) && pointStyles.animationDuration > 0) {\n var progress = Math.min(this._animationFrameTime / pointStyles.animationDuration, 1);\n rippleRadius = pointStyles.radius + progress * (pointStyles.rippleRadius - pointStyles.radius);\n this._animation.setDuration(pointStyles.animationDuration).start();\n }\n else {\n this.stopAnimation();\n }\n (_c = this._ripplePoint) === null || _c === void 0 ? void 0 : _c.setAttrs({\n x: ripplePointCoordinate.x,\n y: ripplePointCoordinate.y,\n r: rippleRadius\n }).setStyles({ style: 'fill', color: pointStyles.rippleColor }).draw(ctx);\n }\n else {\n this.stopAnimation();\n }\n };\n CandleAreaView.prototype.stopAnimation = function () {\n this._animationFrameTime = 0;\n this._animation.cancel();\n };\n return CandleAreaView;\n}(ChildrenView));\n\n/**\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n\n * http://www.apache.org/licenses/LICENSE-2.0\n\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar CandleBarView = /** @class */ (function (_super) {\n __extends(CandleBarView, _super);\n function CandleBarView() {\n var _this = _super.apply(this, __spreadArray([], __read(arguments), false)) || this;\n _this._boundCandleBarClickEvent = function (data) { return function () {\n _this.getWidget().getPane().getChart().getChartStore().executeAction('onCandleBarClick', data);\n return false;\n }; };\n return _this;\n }\n CandleBarView.prototype.drawImp = function (ctx) {\n var _this = this;\n var pane = this.getWidget().getPane();\n var isMain = pane.getId() === PaneIdConstants.CANDLE;\n var chartStore = pane.getChart().getChartStore();\n var candleBarOptions = this.getCandleBarOptions();\n if (candleBarOptions !== null) {\n var type_1 = candleBarOptions.type, styles_1 = candleBarOptions.styles;\n var ohlcSize_1 = 0;\n var halfOhlcSize_1 = 0;\n if (candleBarOptions.type === 'ohlc') {\n var gapBar = chartStore.getBarSpace().gapBar;\n ohlcSize_1 = Math.min(Math.max(Math.round(gapBar * 0.2), 1), 8);\n if (ohlcSize_1 > 2 && ohlcSize_1 % 2 === 1) {\n ohlcSize_1--;\n }\n halfOhlcSize_1 = Math.floor(ohlcSize_1 / 2);\n }\n var yAxis_1 = pane.getYAxisComponentById(candleBarOptions.yAxisId);\n this.eachChildren(function (visibleData, barSpace) {\n var _a;\n var x = visibleData.x, _b = visibleData.data, current = _b.current, prev = _b.prev;\n if (isValid(current)) {\n var open_1 = current.open, high = current.high, low = current.low, close_1 = current.close;\n var comparePrice = styles_1.compareRule === 'current_open' ? open_1 : ((_a = prev === null || prev === void 0 ? void 0 : prev.close) !== null && _a !== void 0 ? _a : close_1);\n var colors = [];\n if (close_1 > comparePrice) {\n colors[0] = styles_1.upColor;\n colors[1] = styles_1.upBorderColor;\n colors[2] = styles_1.upWickColor;\n }\n else if (close_1 < comparePrice) {\n colors[0] = styles_1.downColor;\n colors[1] = styles_1.downBorderColor;\n colors[2] = styles_1.downWickColor;\n }\n else {\n colors[0] = styles_1.noChangeColor;\n colors[1] = styles_1.noChangeBorderColor;\n colors[2] = styles_1.noChangeWickColor;\n }\n var openY = yAxis_1.convertToPixel(open_1);\n var closeY = yAxis_1.convertToPixel(close_1);\n var priceY = [openY, closeY, yAxis_1.convertToPixel(high), yAxis_1.convertToPixel(low)];\n priceY.sort(function (a, b) { return a - b; });\n var correction = barSpace.gapBar % 2 === 0 ? 1 : 0;\n var rects = [];\n switch (type_1) {\n case 'candle_solid': {\n rects = _this._createSolidBar(x, priceY, barSpace, colors, correction);\n break;\n }\n case 'candle_stroke': {\n rects = _this._createStrokeBar(x, priceY, barSpace, colors, correction);\n break;\n }\n case 'candle_up_stroke': {\n if (close_1 > open_1) {\n rects = _this._createStrokeBar(x, priceY, barSpace, colors, correction);\n }\n else {\n rects = _this._createSolidBar(x, priceY, barSpace, colors, correction);\n }\n break;\n }\n case 'candle_down_stroke': {\n if (open_1 > close_1) {\n rects = _this._createStrokeBar(x, priceY, barSpace, colors, correction);\n }\n else {\n rects = _this._createSolidBar(x, priceY, barSpace, colors, correction);\n }\n break;\n }\n case 'ohlc': {\n rects = [\n {\n name: 'rect',\n attrs: [\n {\n x: x - halfOhlcSize_1,\n y: priceY[0],\n width: ohlcSize_1,\n height: priceY[3] - priceY[0]\n },\n {\n x: x - barSpace.halfGapBar,\n y: openY + ohlcSize_1 > priceY[3] ? priceY[3] - ohlcSize_1 : openY,\n width: barSpace.halfGapBar - halfOhlcSize_1,\n height: ohlcSize_1\n },\n {\n x: x + halfOhlcSize_1,\n y: closeY + ohlcSize_1 > priceY[3] ? priceY[3] - ohlcSize_1 : closeY,\n width: barSpace.halfGapBar - halfOhlcSize_1,\n height: ohlcSize_1\n }\n ],\n styles: { color: colors[0] }\n }\n ];\n break;\n }\n }\n rects.forEach(function (rect) {\n var _a;\n var handler = null;\n if (isMain) {\n handler = {\n mouseClickEvent: _this._boundCandleBarClickEvent(visibleData)\n };\n }\n (_a = _this.createFigure(rect, handler !== null && handler !== void 0 ? handler : undefined)) === null || _a === void 0 ? void 0 : _a.draw(ctx);\n });\n }\n });\n }\n };\n CandleBarView.prototype.getCandleBarOptions = function () {\n var pane = this.getWidget().getPane();\n var yAxisId = pane.getDefaultYAxisId();\n if (!isValid(yAxisId)) {\n return null;\n }\n var candleStyles = pane.getChart().getStyles().candle;\n return {\n yAxisId: yAxisId,\n type: candleStyles.type,\n styles: candleStyles.bar\n };\n };\n CandleBarView.prototype._createSolidBar = function (x, priceY, barSpace, colors, correction) {\n return [\n {\n name: 'rect',\n attrs: {\n x: x,\n y: priceY[0],\n width: 1,\n height: priceY[3] - priceY[0]\n },\n styles: { color: colors[2] }\n },\n {\n name: 'rect',\n attrs: {\n x: x - barSpace.halfGapBar,\n y: priceY[1],\n width: barSpace.gapBar + correction,\n height: Math.max(1, priceY[2] - priceY[1])\n },\n styles: {\n style: 'stroke_fill',\n color: colors[0],\n borderColor: colors[1]\n }\n }\n ];\n };\n CandleBarView.prototype._createStrokeBar = function (x, priceY, barSpace, colors, correction) {\n return [\n {\n name: 'rect',\n attrs: [\n {\n x: x,\n y: priceY[0],\n width: 1,\n height: priceY[1] - priceY[0]\n },\n {\n x: x,\n y: priceY[2],\n width: 1,\n height: priceY[3] - priceY[2]\n }\n ],\n styles: { color: colors[2] }\n },\n {\n name: 'rect',\n attrs: {\n x: x - barSpace.halfGapBar,\n y: priceY[1],\n width: barSpace.gapBar + correction,\n height: Math.max(1, priceY[2] - priceY[1])\n },\n styles: {\n style: 'stroke',\n borderColor: colors[1]\n }\n }\n ];\n };\n return CandleBarView;\n}(ChildrenView));\n\n/**\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n\n * http://www.apache.org/licenses/LICENSE-2.0\n\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar CandleHighLowPriceView = /** @class */ (function (_super) {\n __extends(CandleHighLowPriceView, _super);\n function CandleHighLowPriceView() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n CandleHighLowPriceView.prototype.drawImp = function (ctx) {\n var _a, _b;\n var widget = this.getWidget();\n var pane = widget.getPane();\n var chartStore = pane.getChart().getChartStore();\n var priceMarkStyles = chartStore.getStyles().candle.priceMark;\n var highPriceMarkStyles = priceMarkStyles.high;\n var lowPriceMarkStyles = priceMarkStyles.low;\n if (priceMarkStyles.show && (highPriceMarkStyles.show || lowPriceMarkStyles.show)) {\n var highestLowestPrice = chartStore.getVisibleRangeHighLowPrice();\n var precision = (_b = (_a = chartStore.getSymbol()) === null || _a === void 0 ? void 0 : _a.pricePrecision) !== null && _b !== void 0 ? _b : SymbolDefaultPrecisionConstants.PRICE;\n var yAxis = pane.getYAxisComponentById();\n var _c = highestLowestPrice[0], high = _c.price, highX = _c.x;\n var _d = highestLowestPrice[1], low = _d.price, lowX = _d.x;\n var highY = yAxis.convertToPixel(high);\n var lowY = yAxis.convertToPixel(low);\n var decimalFold = chartStore.getDecimalFold();\n var thousandsSeparator = chartStore.getThousandsSeparator();\n if (highPriceMarkStyles.show && high !== Number.MIN_SAFE_INTEGER) {\n this._drawMark(ctx, decimalFold.format(thousandsSeparator.format(formatPrecision(high, precision))), { x: highX, y: highY }, highY < lowY ? [-2, -5] : [2, 5], highPriceMarkStyles);\n }\n if (lowPriceMarkStyles.show && low !== Number.MAX_SAFE_INTEGER) {\n this._drawMark(ctx, decimalFold.format(thousandsSeparator.format(formatPrecision(low, precision))), { x: lowX, y: lowY }, highY < lowY ? [2, 5] : [-2, -5], lowPriceMarkStyles);\n }\n }\n };\n CandleHighLowPriceView.prototype._drawMark = function (ctx, text, coordinate, offsets, styles) {\n var _a, _b, _c;\n var startX = coordinate.x;\n var startY = coordinate.y + offsets[0];\n (_a = this.createFigure({\n name: 'line',\n attrs: {\n coordinates: [\n { x: startX - 2, y: startY + offsets[0] },\n { x: startX, y: startY },\n { x: startX + 2, y: startY + offsets[0] }\n ]\n },\n styles: { color: styles.color }\n })) === null || _a === void 0 ? void 0 : _a.draw(ctx);\n var lineEndX = 0;\n var textStartX = 0;\n var textAlign = 'left';\n var width = this.getWidget().getBounding().width;\n if (startX > width / 2) {\n lineEndX = startX - 5;\n textStartX = lineEndX - styles.textOffset;\n textAlign = 'right';\n }\n else {\n lineEndX = startX + 5;\n textAlign = 'left';\n textStartX = lineEndX + styles.textOffset;\n }\n var y = startY + offsets[1];\n (_b = this.createFigure({\n name: 'line',\n attrs: {\n coordinates: [\n { x: startX, y: startY },\n { x: startX, y: y },\n { x: lineEndX, y: y }\n ]\n },\n styles: { color: styles.color }\n })) === null || _b === void 0 ? void 0 : _b.draw(ctx);\n (_c = this.createFigure({\n name: 'text',\n attrs: {\n x: textStartX,\n y: y,\n text: text,\n align: textAlign,\n baseline: 'middle'\n },\n styles: {\n color: styles.color,\n size: styles.textSize,\n family: styles.textFamily,\n weight: styles.textWeight\n }\n })) === null || _c === void 0 ? void 0 : _c.draw(ctx);\n };\n return CandleHighLowPriceView;\n}(View));\n\n/**\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n\n * http://www.apache.org/licenses/LICENSE-2.0\n\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar CandleLastPriceView = /** @class */ (function (_super) {\n __extends(CandleLastPriceView, _super);\n function CandleLastPriceView() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n CandleLastPriceView.prototype.drawImp = function (ctx) {\n var _a, _b, _c;\n var widget = this.getWidget();\n var pane = widget.getPane();\n var bounding = widget.getBounding();\n var chartStore = pane.getChart().getChartStore();\n var priceMarkStyles = chartStore.getStyles().candle.priceMark;\n var lastPriceMarkStyles = priceMarkStyles.last;\n var lastPriceMarkLineStyles = lastPriceMarkStyles.line;\n if (priceMarkStyles.show && lastPriceMarkStyles.show && lastPriceMarkLineStyles.show) {\n var yAxis = pane.getYAxisComponentById();\n var dataList = chartStore.getDataList();\n var data = dataList[dataList.length - 1];\n if (isValid(data)) {\n var close_1 = data.close, open_1 = data.open;\n var comparePrice = lastPriceMarkStyles.compareRule === 'current_open' ? open_1 : ((_b = (_a = dataList[dataList.length - 2]) === null || _a === void 0 ? void 0 : _a.close) !== null && _b !== void 0 ? _b : close_1);\n var priceY = yAxis.convertToNicePixel(close_1);\n var color = '';\n if (close_1 > comparePrice) {\n color = lastPriceMarkStyles.upColor;\n }\n else if (close_1 < comparePrice) {\n color = lastPriceMarkStyles.downColor;\n }\n else {\n color = lastPriceMarkStyles.noChangeColor;\n }\n (_c = this.createFigure({\n name: 'line',\n attrs: {\n coordinates: [\n { x: 0, y: priceY },\n { x: bounding.width, y: priceY }\n ]\n },\n styles: {\n style: lastPriceMarkLineStyles.style,\n color: color,\n size: lastPriceMarkLineStyles.size,\n dashedValue: lastPriceMarkLineStyles.dashedValue\n }\n })) === null || _c === void 0 ? void 0 : _c.draw(ctx);\n }\n }\n };\n return CandleLastPriceView;\n}(View));\n\n/**\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n\n * http://www.apache.org/licenses/LICENSE-2.0\n\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar PeriodTypeXAxisFormat = {\n second: 'HH:mm:ss',\n minute: 'HH:mm',\n hour: 'MM-DD HH:mm',\n day: 'YYYY-MM-DD',\n week: 'YYYY-MM-DD',\n month: 'YYYY-MM',\n year: 'YYYY'\n};\nvar PeriodTypeCrosshairTooltipFormat = {\n second: 'HH:mm:ss',\n minute: 'YYYY-MM-DD HH:mm',\n hour: 'YYYY-MM-DD HH:mm',\n day: 'YYYY-MM-DD',\n week: 'YYYY-MM-DD',\n month: 'YYYY-MM',\n year: 'YYYY'\n};\n\n/**\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n\n * http://www.apache.org/licenses/LICENSE-2.0\n\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar enUS = {\n time: 'Time: ',\n open: 'Open: ',\n high: 'High: ',\n low: 'Low: ',\n close: 'Close: ',\n volume: 'Volume: ',\n turnover: 'Turnover: ',\n change: 'Change: ',\n second: 'S',\n minute: '',\n hour: 'H',\n day: 'D',\n week: 'W',\n month: 'M',\n year: 'Y'\n};\n\n/**\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n\n * http://www.apache.org/licenses/LICENSE-2.0\n\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar zhCN = {\n time: '时间:',\n open: '开:',\n high: '高:',\n low: '低:',\n close: '收:',\n volume: '成交量:',\n turnover: '成交额:',\n change: '涨幅:',\n second: '秒',\n minute: '',\n hour: '小时',\n day: '天',\n week: '周',\n month: '月',\n year: '年'\n};\n\n/**\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n\n * http://www.apache.org/licenses/LICENSE-2.0\n\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar locales = {\n 'zh-CN': zhCN,\n 'en-US': enUS\n};\nfunction registerLocale(locale, ls) {\n locales[locale] = __assign(__assign({}, locales[locale]), ls);\n}\nfunction getSupportedLocales() {\n return Object.keys(locales);\n}\nfunction i18n(key, locale) {\n var _a;\n return (_a = locales[locale][key]) !== null && _a !== void 0 ? _a : key;\n}\n\n/**\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n\n * http://www.apache.org/licenses/LICENSE-2.0\n\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar IndicatorTooltipView = /** @class */ (function (_super) {\n __extends(IndicatorTooltipView, _super);\n function IndicatorTooltipView(widget) {\n var _this = _super.call(this, widget) || this;\n _this._activeFeatureInfo = null;\n _this._featureClickEvent = function (type, featureInfo) { return function () {\n var pane = _this.getWidget().getPane();\n pane.getChart().getChartStore().executeAction(type, featureInfo);\n return true;\n }; };\n _this._featureMouseMoveEvent = function (featureInfo) { return function () {\n _this._activeFeatureInfo = featureInfo;\n return true;\n }; };\n _this.registerEvent('mouseMoveEvent', function (_) {\n _this._activeFeatureInfo = null;\n return false;\n });\n return _this;\n }\n IndicatorTooltipView.prototype.drawImp = function (ctx) {\n var widget = this.getWidget();\n var pane = widget.getPane();\n var chartStore = pane.getChart().getChartStore();\n var crosshair = chartStore.getCrosshair();\n if (isValid(crosshair.kLineData)) {\n var bounding = widget.getBounding();\n var _a = chartStore.getStyles().indicator.tooltip, offsetLeft = _a.offsetLeft, offsetTop = _a.offsetTop, offsetRight = _a.offsetRight;\n this.drawIndicatorTooltip(ctx, offsetLeft, offsetTop, bounding.width - offsetRight);\n }\n };\n IndicatorTooltipView.prototype.drawIndicatorTooltip = function (ctx, left, top, maxWidth) {\n var _this = this;\n var pane = this.getWidget().getPane();\n var chartStore = pane.getChart().getChartStore();\n var styles = chartStore.getStyles().indicator;\n var tooltipStyles = styles.tooltip;\n if (this.isDrawTooltip(chartStore.getCrosshair(), tooltipStyles)) {\n var indicators = chartStore.getIndicatorsByPaneId(pane.getId());\n var tooltipTitleStyles_1 = tooltipStyles.title;\n var tooltipLegendStyles_1 = tooltipStyles.legend;\n indicators.forEach(function (indicator) {\n var prevRowHeight = 0;\n var coordinate = { x: left, y: top };\n var _a = _this.getIndicatorTooltipData(indicator), name = _a.name, calcParamsText = _a.calcParamsText, legends = _a.legends, featuresStyles = _a.features;\n var nameValid = name.length > 0;\n var legendValid = legends.length > 0;\n if (nameValid || legendValid) {\n var features = _this.classifyTooltipFeatures(featuresStyles);\n prevRowHeight = _this.drawStandardTooltipFeatures(ctx, features[0], coordinate, indicator, left, prevRowHeight, maxWidth);\n if (nameValid) {\n var text = name;\n if (calcParamsText.length > 0) {\n text = \"\".concat(text).concat(calcParamsText);\n }\n var color = tooltipTitleStyles_1.color;\n prevRowHeight = _this.drawStandardTooltipLegends(ctx, [\n {\n title: { text: '', color: color },\n value: { text: text, color: color }\n }\n ], coordinate, left, prevRowHeight, maxWidth, tooltipTitleStyles_1);\n }\n prevRowHeight = _this.drawStandardTooltipFeatures(ctx, features[1], coordinate, indicator, left, prevRowHeight, maxWidth);\n if (legendValid) {\n prevRowHeight = _this.drawStandardTooltipLegends(ctx, legends, coordinate, left, prevRowHeight, maxWidth, tooltipLegendStyles_1);\n }\n // draw right features\n prevRowHeight = _this.drawStandardTooltipFeatures(ctx, features[2], coordinate, indicator, left, prevRowHeight, maxWidth);\n top = coordinate.y + prevRowHeight;\n }\n });\n }\n return top;\n };\n IndicatorTooltipView.prototype.drawStandardTooltipFeatures = function (ctx, features, coordinate, indicator, left, prevRowHeight, maxWidth) {\n var _this = this;\n if (features.length > 0) {\n var width_1 = 0;\n var height_1 = 0;\n features.forEach(function (feature) {\n var _a = feature.marginLeft, marginLeft = _a === void 0 ? 0 : _a, _b = feature.marginTop, marginTop = _b === void 0 ? 0 : _b, _c = feature.marginRight, marginRight = _c === void 0 ? 0 : _c, _d = feature.marginBottom, marginBottom = _d === void 0 ? 0 : _d, _e = feature.paddingLeft, paddingLeft = _e === void 0 ? 0 : _e, _f = feature.paddingTop, paddingTop = _f === void 0 ? 0 : _f, _g = feature.paddingRight, paddingRight = _g === void 0 ? 0 : _g, _h = feature.paddingBottom, paddingBottom = _h === void 0 ? 0 : _h, _j = feature.size, size = _j === void 0 ? 0 : _j, type = feature.type, content = feature.content;\n var contentWidth = 0;\n if (type === 'icon_font') {\n var iconFont = content;\n ctx.font = createFont(size, 'normal', iconFont.family);\n contentWidth = ctx.measureText(iconFont.code).width;\n }\n else {\n contentWidth = size;\n }\n width_1 += marginLeft + paddingLeft + contentWidth + paddingRight + marginRight;\n height_1 = Math.max(height_1, marginTop + paddingTop + size + paddingBottom + marginBottom);\n });\n if (coordinate.x + width_1 > maxWidth) {\n coordinate.x = left;\n coordinate.y += prevRowHeight;\n prevRowHeight = height_1;\n }\n else {\n prevRowHeight = Math.max(prevRowHeight, height_1);\n }\n var pane = this.getWidget().getPane();\n var paneId_1 = pane.getId();\n features.forEach(function (feature) {\n var _a, _b, _c, _d, _e;\n var _f = feature.marginLeft, marginLeft = _f === void 0 ? 0 : _f, _g = feature.marginTop, marginTop = _g === void 0 ? 0 : _g, _h = feature.marginRight, marginRight = _h === void 0 ? 0 : _h, _j = feature.paddingLeft, paddingLeft = _j === void 0 ? 0 : _j, _k = feature.paddingTop, paddingTop = _k === void 0 ? 0 : _k, _l = feature.paddingRight, paddingRight = _l === void 0 ? 0 : _l, _m = feature.paddingBottom, paddingBottom = _m === void 0 ? 0 : _m, backgroundColor = feature.backgroundColor, activeBackgroundColor = feature.activeBackgroundColor, borderRadius = feature.borderRadius, _o = feature.size, size = _o === void 0 ? 0 : _o, color = feature.color, activeColor = feature.activeColor, type = feature.type, content = feature.content;\n var finalColor = color;\n var finalBackgroundColor = backgroundColor;\n if (((_a = _this._activeFeatureInfo) === null || _a === void 0 ? void 0 : _a.paneId) === paneId_1 && ((_b = _this._activeFeatureInfo.indicator) === null || _b === void 0 ? void 0 : _b.id) === (indicator === null || indicator === void 0 ? void 0 : indicator.id) && _this._activeFeatureInfo.feature.id === feature.id) {\n finalColor = activeColor !== null && activeColor !== void 0 ? activeColor : color;\n finalBackgroundColor = activeBackgroundColor !== null && activeBackgroundColor !== void 0 ? activeBackgroundColor : backgroundColor;\n }\n var actionType = 'onCandleTooltipFeatureClick';\n var featureInfo = {\n paneId: paneId_1,\n feature: feature\n };\n if (isValid(indicator)) {\n actionType = 'onIndicatorTooltipFeatureClick';\n featureInfo.indicator = indicator;\n }\n var eventHandler = {\n mouseDownEvent: _this._featureClickEvent(actionType, featureInfo),\n mouseMoveEvent: _this._featureMouseMoveEvent(featureInfo)\n };\n var contentWidth = 0;\n if (type === 'icon_font') {\n var iconFont = content;\n (_c = _this.createFigure({\n name: 'text',\n attrs: { text: iconFont.code, x: coordinate.x + marginLeft, y: coordinate.y + marginTop },\n styles: {\n paddingLeft: paddingLeft,\n paddingTop: paddingTop,\n paddingRight: paddingRight,\n paddingBottom: paddingBottom,\n borderRadius: borderRadius,\n size: size,\n family: iconFont.family,\n color: finalColor,\n backgroundColor: finalBackgroundColor\n }\n }, eventHandler)) === null || _c === void 0 ? void 0 : _c.draw(ctx);\n contentWidth = ctx.measureText(iconFont.code).width;\n }\n else {\n (_d = _this.createFigure({\n name: 'rect',\n attrs: { x: coordinate.x + marginLeft, y: coordinate.y + marginTop, width: size, height: size },\n styles: {\n paddingLeft: paddingLeft,\n paddingTop: paddingTop,\n paddingRight: paddingRight,\n paddingBottom: paddingBottom,\n color: finalBackgroundColor\n }\n }, eventHandler)) === null || _d === void 0 ? void 0 : _d.draw(ctx);\n var path = content;\n (_e = _this.createFigure({\n name: 'path',\n attrs: { path: path.path, x: coordinate.x + marginLeft + paddingLeft, y: coordinate.y + marginTop + paddingTop, width: size, height: size },\n styles: {\n style: path.style,\n lineWidth: path.lineWidth,\n color: finalColor\n }\n })) === null || _e === void 0 ? void 0 : _e.draw(ctx);\n contentWidth = size;\n }\n coordinate.x += marginLeft + paddingLeft + contentWidth + paddingRight + marginRight;\n });\n }\n return prevRowHeight;\n };\n IndicatorTooltipView.prototype.drawStandardTooltipLegends = function (ctx, legends, coordinate, left, prevRowHeight, maxWidth, styles) {\n var _this = this;\n if (legends.length > 0) {\n var marginLeft_1 = styles.marginLeft, marginTop_1 = styles.marginTop, marginRight_1 = styles.marginRight, marginBottom_1 = styles.marginBottom, size_1 = styles.size, family_1 = styles.family, weight_1 = styles.weight;\n ctx.font = createFont(size_1, weight_1, family_1);\n legends.forEach(function (data) {\n var _a, _b;\n var title = data.title;\n var value = data.value;\n var titleTextWidth = ctx.measureText(title.text).width;\n var valueTextWidth = ctx.measureText(value.text).width;\n var totalTextWidth = titleTextWidth + valueTextWidth;\n var h = marginTop_1 + size_1 + marginBottom_1;\n if (coordinate.x + marginLeft_1 + totalTextWidth + marginRight_1 > maxWidth) {\n coordinate.x = left;\n coordinate.y += prevRowHeight;\n prevRowHeight = h;\n }\n else {\n prevRowHeight = Math.max(prevRowHeight, h);\n }\n if (title.text.length > 0) {\n (_a = _this.createFigure({\n name: 'text',\n attrs: { x: coordinate.x + marginLeft_1, y: coordinate.y + marginTop_1, text: title.text },\n styles: { color: title.color, size: size_1, family: family_1, weight: weight_1 }\n })) === null || _a === void 0 ? void 0 : _a.draw(ctx);\n }\n (_b = _this.createFigure({\n name: 'text',\n attrs: { x: coordinate.x + marginLeft_1 + titleTextWidth, y: coordinate.y + marginTop_1, text: value.text },\n styles: { color: value.color, size: size_1, family: family_1, weight: weight_1 }\n })) === null || _b === void 0 ? void 0 : _b.draw(ctx);\n coordinate.x += marginLeft_1 + totalTextWidth + marginRight_1;\n });\n }\n return prevRowHeight;\n };\n IndicatorTooltipView.prototype.isDrawTooltip = function (crosshair, styles) {\n var showRule = styles.showRule;\n return showRule === 'always' || (showRule === 'follow_cross' && isString(crosshair.paneId));\n };\n IndicatorTooltipView.prototype.getIndicatorTooltipData = function (indicator) {\n var _a;\n var chartStore = this.getWidget().getPane().getChart().getChartStore();\n var styles = chartStore.getStyles().indicator;\n var tooltipStyles = styles.tooltip;\n var tooltipTitleStyles = tooltipStyles.title;\n var name = '';\n var calcParamsText = '';\n if (tooltipTitleStyles.show) {\n if (tooltipTitleStyles.showName) {\n name = indicator.shortName;\n }\n if (tooltipTitleStyles.showParams) {\n var calcParams = indicator.calcParams;\n if (calcParams.length > 0) {\n calcParamsText = \"(\".concat(calcParams.join(','), \")\");\n }\n }\n }\n var tooltipData = { name: name, calcParamsText: calcParamsText, legends: [], features: tooltipStyles.features };\n var dataIndex = chartStore.getCrosshair().dataIndex;\n var result = indicator.result;\n var formatter = chartStore.getInnerFormatter();\n var decimalFold = chartStore.getDecimalFold();\n var thousandsSeparator = chartStore.getThousandsSeparator();\n var legends = [];\n if (indicator.visible) {\n var barSpace = chartStore.getBarSpace();\n var data_1 = (_a = result[dataIndex]) !== null && _a !== void 0 ? _a : {};\n var defaultValue_1 = tooltipStyles.legend.defaultValue;\n // @ts-ignore\n eachFigures(indicator, dataIndex, barSpace, styles, function (figure, figureStyles) {\n if (isString(figure.title)) {\n var color = figureStyles.color;\n var value = data_1[figure.key];\n if (isNumber(value)) {\n value = formatPrecision(value, indicator.precision);\n if (indicator.shouldFormatBigNumber) {\n value = formatter.formatBigNumber(value);\n }\n value = decimalFold.format(thousandsSeparator.format(value));\n }\n legends.push({ title: { text: figure.title, color: color }, value: { text: (value !== null && value !== void 0 ? value : defaultValue_1), color: color } });\n }\n });\n tooltipData.legends = legends;\n }\n if (isFunction(indicator.createTooltipDataSource)) {\n var widget = this.getWidget();\n var pane = widget.getPane();\n var chart = pane.getChart();\n var _b = indicator.createTooltipDataSource({\n chart: chart,\n indicator: indicator,\n crosshair: chartStore.getCrosshair(),\n bounding: widget.getBounding(),\n xAxis: pane.getChart().getXAxisPane().getXAxisComponent(),\n yAxis: pane.getYAxisComponentById(indicator.yAxisId)\n }), customName = _b.name, customCalcParamsText = _b.calcParamsText, customLegends = _b.legends, customFeatures = _b.features;\n if (tooltipTitleStyles.show) {\n if (isString(customName) && tooltipTitleStyles.showName) {\n tooltipData.name = customName;\n }\n if (isString(customCalcParamsText) && tooltipTitleStyles.showParams) {\n tooltipData.calcParamsText = customCalcParamsText;\n }\n }\n if (isValid(customFeatures)) {\n tooltipData.features = customFeatures;\n }\n if (isValid(customLegends) && indicator.visible) {\n var optimizedLegends_1 = [];\n var color_1 = styles.tooltip.legend.color;\n customLegends.forEach(function (data) {\n var title = { text: '', color: color_1 };\n if (isObject(data.title)) {\n title = data.title;\n }\n else {\n title.text = data.title;\n }\n var value = { text: '', color: color_1 };\n if (isObject(data.value)) {\n value = data.value;\n }\n else {\n value.text = data.value;\n }\n if (isNumber(Number(value.text))) {\n value.text = decimalFold.format(thousandsSeparator.format(value.text));\n }\n optimizedLegends_1.push({ title: title, value: value });\n });\n tooltipData.legends = optimizedLegends_1;\n }\n }\n return tooltipData;\n };\n IndicatorTooltipView.prototype.classifyTooltipFeatures = function (features) {\n var leftFeatures = [];\n var middleFeatures = [];\n var rightFeatures = [];\n features.forEach(function (feature) {\n switch (feature.position) {\n case 'left': {\n leftFeatures.push(feature);\n break;\n }\n case 'middle': {\n middleFeatures.push(feature);\n break;\n }\n case 'right': {\n rightFeatures.push(feature);\n break;\n }\n }\n });\n return [leftFeatures, middleFeatures, rightFeatures];\n };\n return IndicatorTooltipView;\n}(View));\n\n/**\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n\n * http://www.apache.org/licenses/LICENSE-2.0\n\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar CandleTooltipView = /** @class */ (function (_super) {\n __extends(CandleTooltipView, _super);\n function CandleTooltipView() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n CandleTooltipView.prototype.drawImp = function (ctx) {\n var widget = this.getWidget();\n var chartStore = widget.getPane().getChart().getChartStore();\n var crosshair = chartStore.getCrosshair();\n if (isValid(crosshair.kLineData)) {\n var bounding = widget.getBounding();\n var styles = chartStore.getStyles();\n var candleStyles = styles.candle;\n var indicatorStyles = styles.indicator;\n if (candleStyles.tooltip.showType === 'rect' && indicatorStyles.tooltip.showType === 'rect') {\n var isDrawCandleTooltip = this.isDrawTooltip(crosshair, candleStyles.tooltip);\n var isDrawIndicatorTooltip = this.isDrawTooltip(crosshair, indicatorStyles.tooltip);\n this._drawRectTooltip(ctx, isDrawCandleTooltip, isDrawIndicatorTooltip, candleStyles.tooltip.offsetTop);\n }\n else if (candleStyles.tooltip.showType === 'standard' && indicatorStyles.tooltip.showType === 'standard') {\n var _a = candleStyles.tooltip, offsetLeft = _a.offsetLeft, offsetTop = _a.offsetTop, offsetRight = _a.offsetRight;\n var maxWidth = bounding.width - offsetRight;\n var top_1 = this._drawCandleStandardTooltip(ctx, offsetLeft, offsetTop, maxWidth);\n this.drawIndicatorTooltip(ctx, offsetLeft, top_1, maxWidth);\n }\n else if (candleStyles.tooltip.showType === 'rect' && indicatorStyles.tooltip.showType === 'standard') {\n var _b = candleStyles.tooltip, offsetLeft = _b.offsetLeft, offsetTop = _b.offsetTop, offsetRight = _b.offsetRight;\n var maxWidth = bounding.width - offsetRight;\n var top_2 = this.drawIndicatorTooltip(ctx, offsetLeft, offsetTop, maxWidth);\n var isDrawCandleTooltip = this.isDrawTooltip(crosshair, candleStyles.tooltip);\n this._drawRectTooltip(ctx, isDrawCandleTooltip, false, top_2);\n }\n else {\n var _c = candleStyles.tooltip, offsetLeft = _c.offsetLeft, offsetTop = _c.offsetTop, offsetRight = _c.offsetRight;\n var maxWidth = bounding.width - offsetRight;\n var top_3 = this._drawCandleStandardTooltip(ctx, offsetLeft, offsetTop, maxWidth);\n var isDrawIndicatorTooltip = this.isDrawTooltip(crosshair, indicatorStyles.tooltip);\n this._drawRectTooltip(ctx, false, isDrawIndicatorTooltip, top_3);\n }\n }\n };\n CandleTooltipView.prototype._drawCandleStandardTooltip = function (ctx, left, top, maxWidth) {\n var _a;\n var chartStore = this.getWidget().getPane().getChart().getChartStore();\n var styles = chartStore.getStyles().candle;\n var tooltipStyles = styles.tooltip;\n var tooltipLegendStyles = tooltipStyles.legend;\n var prevRowHeight = 0;\n var coordinate = { x: left, y: top };\n var crosshair = chartStore.getCrosshair();\n if (this.isDrawTooltip(crosshair, tooltipStyles)) {\n var tooltipTitleStyles = tooltipStyles.title;\n if (tooltipTitleStyles.show) {\n var _b = (_a = chartStore.getPeriod()) !== null && _a !== void 0 ? _a : {}, _c = _b.type, type = _c === void 0 ? '' : _c, _d = _b.span, span = _d === void 0 ? '' : _d;\n var text = formatTemplateString(tooltipTitleStyles.template, __assign(__assign({}, chartStore.getSymbol()), { period: \"\".concat(span).concat(i18n(type, chartStore.getLocale())) }));\n var color = tooltipTitleStyles.color;\n var height = this.drawStandardTooltipLegends(ctx, [\n {\n title: { text: '', color: color },\n value: { text: text, color: color }\n }\n ], { x: left, y: top }, left, 0, maxWidth, tooltipTitleStyles);\n coordinate.y = coordinate.y + height;\n }\n var legends = this._getCandleTooltipLegends();\n var features = this.classifyTooltipFeatures(tooltipStyles.features);\n prevRowHeight = this.drawStandardTooltipFeatures(ctx, features[0], coordinate, null, left, prevRowHeight, maxWidth);\n prevRowHeight = this.drawStandardTooltipFeatures(ctx, features[1], coordinate, null, left, prevRowHeight, maxWidth);\n if (legends.length > 0) {\n prevRowHeight = this.drawStandardTooltipLegends(ctx, legends, coordinate, left, prevRowHeight, maxWidth, tooltipLegendStyles);\n }\n prevRowHeight = this.drawStandardTooltipFeatures(ctx, features[2], coordinate, null, left, prevRowHeight, maxWidth);\n }\n return coordinate.y + prevRowHeight;\n };\n CandleTooltipView.prototype._drawRectTooltip = function (ctx, isDrawCandleTooltip, isDrawIndicatorTooltip, top) {\n var _this = this;\n var _a, _b;\n var widget = this.getWidget();\n var pane = widget.getPane();\n var chartStore = pane.getChart().getChartStore();\n var styles = chartStore.getStyles();\n var candleStyles = styles.candle;\n var indicatorStyles = styles.indicator;\n var candleTooltipStyles = candleStyles.tooltip;\n var indicatorTooltipStyles = indicatorStyles.tooltip;\n if (isDrawCandleTooltip || isDrawIndicatorTooltip) {\n var candleLegends = this._getCandleTooltipLegends();\n var offsetLeft = candleTooltipStyles.offsetLeft, offsetTop = candleTooltipStyles.offsetTop, offsetRight = candleTooltipStyles.offsetRight, offsetBottom = candleTooltipStyles.offsetBottom;\n var _c = candleTooltipStyles.legend, baseLegendMarginLeft_1 = _c.marginLeft, baseLegendMarginRight_1 = _c.marginRight, baseLegendMarginTop_1 = _c.marginTop, baseLegendMarginBottom_1 = _c.marginBottom, baseLegendSize_1 = _c.size, baseLegendWeight_1 = _c.weight, baseLegendFamily_1 = _c.family;\n var _d = candleTooltipStyles.rect, rectPosition = _d.position, rectPaddingLeft = _d.paddingLeft, rectPaddingRight_1 = _d.paddingRight, rectPaddingTop = _d.paddingTop, rectPaddingBottom = _d.paddingBottom, rectOffsetLeft = _d.offsetLeft, rectOffsetRight = _d.offsetRight, rectOffsetTop = _d.offsetTop, rectOffsetBottom = _d.offsetBottom, rectBorderSize_1 = _d.borderSize, rectBorderRadius = _d.borderRadius, rectBorderColor = _d.borderColor, rectBackgroundColor = _d.color;\n var maxTextWidth_1 = 0;\n var rectWidth_1 = 0;\n var rectHeight_1 = 0;\n if (isDrawCandleTooltip) {\n ctx.font = createFont(baseLegendSize_1, baseLegendWeight_1, baseLegendFamily_1);\n candleLegends.forEach(function (data) {\n var title = data.title;\n var value = data.value;\n var text = \"\".concat(title.text).concat(value.text);\n var labelWidth = ctx.measureText(text).width + baseLegendMarginLeft_1 + baseLegendMarginRight_1;\n maxTextWidth_1 = Math.max(maxTextWidth_1, labelWidth);\n });\n rectHeight_1 += (baseLegendMarginBottom_1 + baseLegendMarginTop_1 + baseLegendSize_1) * candleLegends.length;\n }\n var _e = indicatorTooltipStyles.legend, indicatorLegendMarginLeft_1 = _e.marginLeft, indicatorLegendMarginRight_1 = _e.marginRight, indicatorLegendMarginTop_1 = _e.marginTop, indicatorLegendMarginBottom_1 = _e.marginBottom, indicatorLegendSize_1 = _e.size, indicatorLegendWeight_1 = _e.weight, indicatorLegendFamily_1 = _e.family;\n var indicatorLegendsArray_1 = [];\n if (isDrawIndicatorTooltip) {\n var indicators = chartStore.getIndicatorsByPaneId(pane.getId());\n ctx.font = createFont(indicatorLegendSize_1, indicatorLegendWeight_1, indicatorLegendFamily_1);\n indicators.forEach(function (indicator) {\n var tooltipDataLegends = _this.getIndicatorTooltipData(indicator).legends;\n indicatorLegendsArray_1.push(tooltipDataLegends);\n tooltipDataLegends.forEach(function (data) {\n var title = data.title;\n var value = data.value;\n var text = \"\".concat(title.text).concat(value.text);\n var textWidth = ctx.measureText(text).width + indicatorLegendMarginLeft_1 + indicatorLegendMarginRight_1;\n maxTextWidth_1 = Math.max(maxTextWidth_1, textWidth);\n rectHeight_1 += indicatorLegendMarginTop_1 + indicatorLegendMarginBottom_1 + indicatorLegendSize_1;\n });\n });\n }\n rectWidth_1 += maxTextWidth_1;\n if (rectWidth_1 !== 0 && rectHeight_1 !== 0) {\n var crosshair = chartStore.getCrosshair();\n var bounding = widget.getBounding();\n var yAxisBounding = pane.getYAxisWidget().getBounding();\n rectWidth_1 += rectBorderSize_1 * 2 + rectPaddingLeft + rectPaddingRight_1;\n rectHeight_1 += rectBorderSize_1 * 2 + rectPaddingTop + rectPaddingBottom;\n var centerX = bounding.width / 2;\n var isPointer = rectPosition === 'pointer' && crosshair.paneId === PaneIdConstants.CANDLE;\n var isLeft = ((_a = crosshair.realX) !== null && _a !== void 0 ? _a : 0) > centerX;\n var rectX_1 = 0;\n if (isPointer) {\n var realX = crosshair.realX;\n if (isLeft) {\n rectX_1 = realX - rectOffsetRight - rectWidth_1;\n }\n else {\n rectX_1 = realX + rectOffsetLeft;\n }\n }\n else {\n var yAxis = this.getWidget().getPane().getYAxisComponentById();\n if (isLeft) {\n rectX_1 = rectOffsetLeft + offsetLeft;\n if (yAxis.inside && yAxis.position === 'left') {\n rectX_1 += yAxisBounding.width;\n }\n }\n else {\n rectX_1 = bounding.width - rectOffsetRight - rectWidth_1 - offsetRight;\n if (yAxis.inside && yAxis.position === 'right') {\n rectX_1 -= yAxisBounding.width;\n }\n }\n }\n var rectY = top + rectOffsetTop;\n if (isPointer) {\n var y = crosshair.y;\n rectY = y - rectHeight_1 / 2;\n if (rectY + rectHeight_1 > bounding.height - rectOffsetBottom - offsetBottom) {\n rectY = bounding.height - rectOffsetBottom - rectHeight_1 - offsetBottom;\n }\n if (rectY < top + rectOffsetTop) {\n rectY = top + rectOffsetTop + offsetTop;\n }\n }\n (_b = this.createFigure({\n name: 'rect',\n attrs: {\n x: rectX_1,\n y: rectY,\n width: rectWidth_1,\n height: rectHeight_1\n },\n styles: {\n style: 'stroke_fill',\n color: rectBackgroundColor,\n borderColor: rectBorderColor,\n borderSize: rectBorderSize_1,\n borderRadius: rectBorderRadius\n }\n })) === null || _b === void 0 ? void 0 : _b.draw(ctx);\n var candleTextX_1 = rectX_1 + rectBorderSize_1 + rectPaddingLeft + baseLegendMarginLeft_1;\n var textY_1 = rectY + rectBorderSize_1 + rectPaddingTop;\n if (isDrawCandleTooltip) {\n // render candle texts\n candleLegends.forEach(function (data) {\n var _a, _b;\n textY_1 += baseLegendMarginTop_1;\n var title = data.title;\n (_a = _this.createFigure({\n name: 'text',\n attrs: {\n x: candleTextX_1,\n y: textY_1,\n text: title.text\n },\n styles: {\n color: title.color,\n size: baseLegendSize_1,\n family: baseLegendFamily_1,\n weight: baseLegendWeight_1\n }\n })) === null || _a === void 0 ? void 0 : _a.draw(ctx);\n var value = data.value;\n (_b = _this.createFigure({\n name: 'text',\n attrs: {\n x: rectX_1 + rectWidth_1 - rectBorderSize_1 - baseLegendMarginRight_1 - rectPaddingRight_1,\n y: textY_1,\n text: value.text,\n align: 'right'\n },\n styles: {\n color: value.color,\n size: baseLegendSize_1,\n family: baseLegendFamily_1,\n weight: baseLegendWeight_1\n }\n })) === null || _b === void 0 ? void 0 : _b.draw(ctx);\n textY_1 += baseLegendSize_1 + baseLegendMarginBottom_1;\n });\n }\n if (isDrawIndicatorTooltip) {\n // render indicator legends\n var indicatorTextX_1 = rectX_1 + rectBorderSize_1 + rectPaddingLeft + indicatorLegendMarginLeft_1;\n indicatorLegendsArray_1.forEach(function (legends) {\n legends.forEach(function (data) {\n var _a, _b;\n textY_1 += indicatorLegendMarginTop_1;\n var title = data.title;\n var value = data.value;\n (_a = _this.createFigure({\n name: 'text',\n attrs: {\n x: indicatorTextX_1,\n y: textY_1,\n text: title.text\n },\n styles: {\n color: title.color,\n size: indicatorLegendSize_1,\n family: indicatorLegendFamily_1,\n weight: indicatorLegendWeight_1\n }\n })) === null || _a === void 0 ? void 0 : _a.draw(ctx);\n (_b = _this.createFigure({\n name: 'text',\n attrs: {\n x: rectX_1 + rectWidth_1 - rectBorderSize_1 - indicatorLegendMarginRight_1 - rectPaddingRight_1,\n y: textY_1,\n text: value.text,\n align: 'right'\n },\n styles: {\n color: value.color,\n size: indicatorLegendSize_1,\n family: indicatorLegendFamily_1,\n weight: indicatorLegendWeight_1\n }\n })) === null || _b === void 0 ? void 0 : _b.draw(ctx);\n textY_1 += indicatorLegendSize_1 + indicatorLegendMarginBottom_1;\n });\n });\n }\n }\n }\n };\n CandleTooltipView.prototype._getCandleTooltipLegends = function () {\n var _a, _b, _c, _d, _e, _f, _g, _h;\n var chartStore = this.getWidget().getPane().getChart().getChartStore();\n var styles = chartStore.getStyles().candle;\n var dataList = chartStore.getDataList();\n var formatter = chartStore.getInnerFormatter();\n var decimalFold = chartStore.getDecimalFold();\n var thousandsSeparator = chartStore.getThousandsSeparator();\n var locale = chartStore.getLocale();\n var _j = (_a = chartStore.getSymbol()) !== null && _a !== void 0 ? _a : {}, _k = _j.pricePrecision, pricePrecision = _k === void 0 ? SymbolDefaultPrecisionConstants.PRICE : _k, _l = _j.volumePrecision, volumePrecision = _l === void 0 ? SymbolDefaultPrecisionConstants.VOLUME : _l;\n var period = chartStore.getPeriod();\n var dataIndex = (_b = chartStore.getCrosshair().dataIndex) !== null && _b !== void 0 ? _b : 0;\n var tooltipStyles = styles.tooltip;\n var _m = tooltipStyles.legend, textColor = _m.color, defaultValue = _m.defaultValue, template = _m.template;\n var prev = (_c = dataList[dataIndex - 1]) !== null && _c !== void 0 ? _c : null;\n var current = dataList[dataIndex];\n var prevClose = (_d = prev === null || prev === void 0 ? void 0 : prev.close) !== null && _d !== void 0 ? _d : current.close;\n var changeValue = current.close - prevClose;\n var mapping = __assign(__assign({}, current), { time: formatter.formatDate(current.timestamp, PeriodTypeCrosshairTooltipFormat[(_e = period === null || period === void 0 ? void 0 : period.type) !== null && _e !== void 0 ? _e : 'day'], 'tooltip'), open: decimalFold.format(thousandsSeparator.format(formatPrecision(current.open, pricePrecision))), high: decimalFold.format(thousandsSeparator.format(formatPrecision(current.high, pricePrecision))), low: decimalFold.format(thousandsSeparator.format(formatPrecision(current.low, pricePrecision))), close: decimalFold.format(thousandsSeparator.format(formatPrecision(current.close, pricePrecision))), volume: decimalFold.format(thousandsSeparator.format(formatter.formatBigNumber(formatPrecision((_f = current.volume) !== null && _f !== void 0 ? _f : defaultValue, volumePrecision)))), turnover: decimalFold.format(thousandsSeparator.format(formatPrecision((_g = current.turnover) !== null && _g !== void 0 ? _g : defaultValue, pricePrecision))), change: prevClose === 0 ? defaultValue : \"\".concat(thousandsSeparator.format(formatPrecision((changeValue / prevClose) * 100)), \"%\") });\n // @ts-ignore\n var legends = isFunction(template) ? template({ prev: prev, current: current, next: (_h = dataList[dataIndex + 1]) !== null && _h !== void 0 ? _h : null }, styles) : template;\n return legends.map(function (_a) {\n var title = _a.title, value = _a.value;\n var t = { text: '', color: textColor };\n if (isObject(title)) {\n t = __assign({}, title);\n }\n else {\n t.text = title;\n }\n t.text = i18n(t.text, locale);\n var v = { text: defaultValue, color: textColor };\n if (isObject(value)) {\n v = __assign({}, value);\n }\n else {\n v.text = value;\n }\n if (isValid(/{change}/.exec(v.text))) {\n v.color = changeValue === 0 ? styles.priceMark.last.noChangeColor : changeValue > 0 ? styles.priceMark.last.upColor : styles.priceMark.last.downColor;\n }\n v.text = formatTemplateString(v.text, mapping);\n return { title: t, value: v };\n });\n };\n return CandleTooltipView;\n}(IndicatorTooltipView));\n\n/**\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n\n * http://www.apache.org/licenses/LICENSE-2.0\n\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar CrosshairFeatureView = /** @class */ (function (_super) {\n __extends(CrosshairFeatureView, _super);\n function CrosshairFeatureView(widget) {\n var _this = _super.call(this, widget) || this;\n _this._activeFeatureInfo = null;\n _this._featureClickEvent = function (featureInfo) { return function () {\n var pane = _this.getWidget().getPane();\n pane.getChart().getChartStore().executeAction('onCrosshairFeatureClick', featureInfo);\n return true;\n }; };\n _this._featureMouseMoveEvent = function (featureInfo) { return function () {\n _this._activeFeatureInfo = featureInfo;\n _this.getWidget().setForceCursor('pointer');\n return true;\n }; };\n _this.registerEvent('mouseMoveEvent', function (_) {\n _this._activeFeatureInfo = null;\n _this.getWidget().setForceCursor(null);\n return false;\n });\n return _this;\n }\n CrosshairFeatureView.prototype.drawImp = function (ctx) {\n var _this = this;\n var _a, _b;\n var widget = this.getWidget();\n var pane = widget.getPane();\n var chartStore = widget.getPane().getChart().getChartStore();\n var crosshair = chartStore.getCrosshair();\n var weight = this.getWidget();\n var yAxis = weight.getPane().getYAxisComponentById();\n if (isString(crosshair.paneId) && crosshair.paneId === pane.getId() && yAxis.isInCandle()) {\n var styles = chartStore.getStyles().crosshair;\n var features = styles.horizontal.features;\n if (styles.show && styles.horizontal.show && features.length > 0) {\n var isRight_1 = yAxis.position === 'right';\n var bounding = weight.getBounding();\n var yAxisTextWidth = 0;\n var horizontalTextStyles = styles.horizontal.text;\n if (yAxis.inside && horizontalTextStyles.show) {\n var value = yAxis.convertFromPixel(crosshair.y);\n var range = yAxis.getRange();\n var text = yAxis.displayValueToText(yAxis.realValueToDisplayValue(yAxis.valueToRealValue(value, { range: range }), { range: range }), (_b = (_a = chartStore.getSymbol()) === null || _a === void 0 ? void 0 : _a.pricePrecision) !== null && _b !== void 0 ? _b : SymbolDefaultPrecisionConstants.PRICE);\n text = chartStore.getDecimalFold().format(chartStore.getThousandsSeparator().format(text));\n yAxisTextWidth = horizontalTextStyles.paddingLeft + calcTextWidth(text, horizontalTextStyles.size, horizontalTextStyles.weight, horizontalTextStyles.family) + horizontalTextStyles.paddingRight;\n }\n var x_1 = yAxisTextWidth;\n if (isRight_1) {\n x_1 = bounding.width - yAxisTextWidth;\n }\n var y_1 = crosshair.y;\n features.forEach(function (feature) {\n var _a, _b, _c, _d;\n var _e = feature.marginLeft, marginLeft = _e === void 0 ? 0 : _e, _f = feature.marginTop, marginTop = _f === void 0 ? 0 : _f, _g = feature.marginRight, marginRight = _g === void 0 ? 0 : _g, _h = feature.paddingLeft, paddingLeft = _h === void 0 ? 0 : _h, _j = feature.paddingTop, paddingTop = _j === void 0 ? 0 : _j, _k = feature.paddingRight, paddingRight = _k === void 0 ? 0 : _k, _l = feature.paddingBottom, paddingBottom = _l === void 0 ? 0 : _l, color = feature.color, activeColor = feature.activeColor, backgroundColor = feature.backgroundColor, activeBackgroundColor = feature.activeBackgroundColor, borderRadius = feature.borderRadius, _m = feature.size, size = _m === void 0 ? 0 : _m, type = feature.type, content = feature.content;\n var width = size;\n if (type === 'icon_font') {\n var iconFont = content;\n width = paddingLeft + calcTextWidth(iconFont.code, size, 'normal', iconFont.family) + paddingRight;\n }\n if (isRight_1) {\n x_1 -= width + marginRight;\n }\n else {\n x_1 += marginLeft;\n }\n var finalColor = color;\n var finalBackgroundColor = backgroundColor;\n if (((_a = _this._activeFeatureInfo) === null || _a === void 0 ? void 0 : _a.feature.id) === feature.id) {\n finalColor = activeColor !== null && activeColor !== void 0 ? activeColor : color;\n finalBackgroundColor = activeBackgroundColor !== null && activeBackgroundColor !== void 0 ? activeBackgroundColor : backgroundColor;\n }\n var eventHandler = {\n mouseDownEvent: _this._featureClickEvent({ crosshair: crosshair, feature: feature }),\n mouseMoveEvent: _this._featureMouseMoveEvent({ crosshair: crosshair, feature: feature })\n };\n if (type === 'icon_font') {\n var iconFont = content;\n (_b = _this.createFigure({\n name: 'text',\n attrs: {\n text: iconFont.code,\n x: x_1,\n y: y_1 + marginTop,\n baseline: 'middle'\n },\n styles: {\n paddingLeft: paddingLeft,\n paddingTop: paddingTop,\n paddingRight: paddingRight,\n paddingBottom: paddingBottom,\n borderRadius: borderRadius,\n size: size,\n family: iconFont.family,\n color: finalColor,\n backgroundColor: finalBackgroundColor\n }\n }, eventHandler)) === null || _b === void 0 ? void 0 : _b.draw(ctx);\n }\n else {\n (_c = _this.createFigure({\n name: 'rect',\n attrs: { x: x_1, y: y_1 + marginTop - size / 2, width: size, height: size },\n styles: {\n paddingLeft: paddingLeft,\n paddingTop: paddingTop,\n paddingRight: paddingRight,\n paddingBottom: paddingBottom,\n color: finalBackgroundColor\n }\n }, eventHandler)) === null || _c === void 0 ? void 0 : _c.draw(ctx);\n var path = content;\n (_d = _this.createFigure({\n name: 'path',\n attrs: { path: path.path, x: x_1 + paddingLeft, y: y_1 + marginTop + paddingTop - size / 2, width: size, height: size },\n styles: {\n style: path.style,\n lineWidth: path.lineWidth,\n color: finalColor\n }\n })) === null || _d === void 0 ? void 0 : _d.draw(ctx);\n }\n if (isRight_1) {\n x_1 -= marginLeft;\n }\n else {\n x_1 += width + marginRight;\n }\n });\n }\n }\n };\n return CrosshairFeatureView;\n}(View));\n\n/**\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n\n * http://www.apache.org/licenses/LICENSE-2.0\n\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar CrosshairLineView = /** @class */ (function (_super) {\n __extends(CrosshairLineView, _super);\n function CrosshairLineView() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n CrosshairLineView.prototype.drawImp = function (ctx) {\n var widget = this.getWidget();\n var pane = widget.getPane();\n var bounding = widget.getBounding();\n var chartStore = widget.getPane().getChart().getChartStore();\n var crosshair = chartStore.getCrosshair();\n var styles = chartStore.getStyles().crosshair;\n if (isString(crosshair.paneId) && styles.show) {\n if (crosshair.paneId === pane.getId()) {\n var y = crosshair.y;\n this._drawLine(ctx, [\n { x: 0, y: y },\n { x: bounding.width, y: y }\n ], styles.horizontal);\n }\n var x = crosshair.realX;\n this._drawLine(ctx, [\n { x: x, y: 0 },\n { x: x, y: bounding.height }\n ], styles.vertical);\n }\n };\n CrosshairLineView.prototype._drawLine = function (ctx, coordinates, styles) {\n var _a;\n if (styles.show) {\n var lineStyles = styles.line;\n if (lineStyles.show) {\n (_a = this.createFigure({\n name: 'line',\n attrs: { coordinates: coordinates },\n styles: lineStyles\n })) === null || _a === void 0 ? void 0 : _a.draw(ctx);\n }\n }\n };\n return CrosshairLineView;\n}(View));\n\n/**\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n\n * http://www.apache.org/licenses/LICENSE-2.0\n\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar GridView = /** @class */ (function (_super) {\n __extends(GridView, _super);\n function GridView() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n GridView.prototype.drawImp = function (ctx) {\n var _a, _b;\n var widget = this.getWidget();\n var pane = this.getWidget().getPane();\n var chart = pane.getChart();\n var bounding = widget.getBounding();\n var styles = chart.getStyles().grid;\n var show = styles.show;\n if (show) {\n ctx.save();\n ctx.globalCompositeOperation = 'destination-over';\n var horizontalStyles = styles.horizontal;\n var horizontalShow = horizontalStyles.show;\n if (horizontalShow) {\n var yAxis = pane.getYAxisComponentById();\n var attrs = yAxis.getTicks().map(function (tick) { return ({\n coordinates: [\n { x: 0, y: tick.coord },\n { x: bounding.width, y: tick.coord }\n ]\n }); });\n (_a = this.createFigure({\n name: 'line',\n attrs: attrs,\n styles: horizontalStyles\n })) === null || _a === void 0 ? void 0 : _a.draw(ctx);\n }\n var verticalStyles = styles.vertical;\n var verticalShow = verticalStyles.show;\n if (verticalShow) {\n var xAxis = chart.getXAxisPane().getXAxisComponent();\n var attrs = xAxis.getTicks().map(function (tick) { return ({\n coordinates: [\n { x: tick.coord, y: 0 },\n { x: tick.coord, y: bounding.height }\n ]\n }); });\n (_b = this.createFigure({\n name: 'line',\n attrs: attrs,\n styles: verticalStyles\n })) === null || _b === void 0 ? void 0 : _b.draw(ctx);\n }\n ctx.restore();\n }\n };\n return GridView;\n}(View));\n\n/**\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n\n * http://www.apache.org/licenses/LICENSE-2.0\n\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar IndicatorView = /** @class */ (function (_super) {\n __extends(IndicatorView, _super);\n function IndicatorView() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n IndicatorView.prototype.getCandleBarOptions = function () {\n var e_1, _a;\n var pane = this.getWidget().getPane();\n var chartStore = pane.getChart().getChartStore();\n var indicators = chartStore.getIndicatorsByPaneId(pane.getId());\n try {\n for (var indicators_1 = __values(indicators), indicators_1_1 = indicators_1.next(); !indicators_1_1.done; indicators_1_1 = indicators_1.next()) {\n var indicator = indicators_1_1.value;\n var yAxis = pane.getYAxisComponentById(indicator.yAxisId);\n if (indicator.shouldOhlc && indicator.visible && !yAxis.isInCandle()) {\n var indicatorStyles = indicator.styles;\n var defaultStyles = chartStore.getStyles().indicator;\n var compareRule = formatValue(indicatorStyles, 'ohlc.compareRule', defaultStyles.ohlc.compareRule);\n var upColor = formatValue(indicatorStyles, 'ohlc.upColor', defaultStyles.ohlc.upColor);\n var downColor = formatValue(indicatorStyles, 'ohlc.downColor', defaultStyles.ohlc.downColor);\n var noChangeColor = formatValue(indicatorStyles, 'ohlc.noChangeColor', defaultStyles.ohlc.noChangeColor);\n return {\n yAxisId: indicator.yAxisId,\n type: 'ohlc',\n styles: {\n compareRule: compareRule,\n upColor: upColor,\n downColor: downColor,\n noChangeColor: noChangeColor,\n upBorderColor: upColor,\n downBorderColor: downColor,\n noChangeBorderColor: noChangeColor,\n upWickColor: upColor,\n downWickColor: downColor,\n noChangeWickColor: noChangeColor\n }\n };\n }\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (indicators_1_1 && !indicators_1_1.done && (_a = indicators_1.return)) _a.call(indicators_1);\n }\n finally { if (e_1) throw e_1.error; }\n }\n return null;\n };\n IndicatorView.prototype.drawImp = function (ctx) {\n var _this = this;\n _super.prototype.drawImp.call(this, ctx);\n var widget = this.getWidget();\n var pane = widget.getPane();\n var chart = pane.getChart();\n var bounding = widget.getBounding();\n var xAxis = chart.getXAxisPane().getXAxisComponent();\n var chartStore = chart.getChartStore();\n var indicators = chartStore.getIndicatorsByPaneId(pane.getId());\n var defaultStyles = chartStore.getStyles().indicator;\n ctx.save();\n indicators.forEach(function (indicator) {\n var yAxis = pane.getYAxisComponentById(indicator.yAxisId);\n if (indicator.visible) {\n if (indicator.zLevel < 0) {\n ctx.globalCompositeOperation = 'destination-over';\n }\n else {\n ctx.globalCompositeOperation = 'source-over';\n }\n var isCover = false;\n if (indicator.draw !== null) {\n ctx.save();\n isCover = indicator.draw({\n ctx: ctx,\n chart: chart,\n indicator: indicator,\n bounding: bounding,\n xAxis: xAxis,\n yAxis: yAxis\n });\n ctx.restore();\n }\n if (!isCover) {\n var result_1 = indicator.result;\n var preparedFigures_1 = prepareIndicatorFigures(indicator, defaultStyles);\n var lines_1 = [];\n _this.eachChildren(function (data, barSpace) {\n var _a, _b, _c;\n var halfGapBar = barSpace.halfGapBar;\n var dataIndex = data.dataIndex, x = data.x;\n var prevX = xAxis.convertToPixel(dataIndex - 1);\n var nextX = xAxis.convertToPixel(dataIndex + 1);\n var prevData = (_a = result_1[dataIndex - 1]) !== null && _a !== void 0 ? _a : null;\n var currentData = (_b = result_1[dataIndex]) !== null && _b !== void 0 ? _b : null;\n var nextData = (_c = result_1[dataIndex + 1]) !== null && _c !== void 0 ? _c : null;\n var prevCoordinate = { x: prevX };\n var currentCoordinate = { x: x };\n var nextCoordinate = { x: nextX };\n indicator.figures.forEach(function (_a) {\n var key = _a.key;\n var prevValue = prevData === null || prevData === void 0 ? void 0 : prevData[key];\n if (isNumber(prevValue)) {\n prevCoordinate[key] = yAxis.convertToPixel(prevValue);\n }\n var currentValue = currentData === null || currentData === void 0 ? void 0 : currentData[key];\n if (isNumber(currentValue)) {\n currentCoordinate[key] = yAxis.convertToPixel(currentValue);\n }\n var nextValue = nextData === null || nextData === void 0 ? void 0 : nextData[key];\n if (isNumber(nextValue)) {\n nextCoordinate[key] = yAxis.convertToPixel(nextValue);\n }\n });\n eachFigures(indicator, dataIndex, barSpace, defaultStyles, function (figure, figureStyles, figureIndex) {\n var _a, _b, _c, _d, _e;\n if (isValid(currentData === null || currentData === void 0 ? void 0 : currentData[figure.key])) {\n var valueY = currentCoordinate[figure.key];\n var attrs = (_a = figure.attrs) === null || _a === void 0 ? void 0 : _a.call(figure, {\n data: { prev: prevData, current: currentData, next: nextData },\n coordinate: { prev: prevCoordinate, current: currentCoordinate, next: nextCoordinate },\n bounding: bounding,\n barSpace: barSpace,\n xAxis: xAxis,\n yAxis: yAxis\n });\n switch (figure.type) {\n case 'text': {\n attrs = __assign({ x: x, y: valueY, text: currentData === null || currentData === void 0 ? void 0 : currentData[figure.key], align: 'center', baseline: 'middle' }, attrs);\n break;\n }\n case 'circle': {\n attrs = __assign({ x: x, y: valueY, r: Math.max(1, halfGapBar) }, attrs);\n break;\n }\n case 'rect':\n case 'bar': {\n var baseValue = (_b = figure.baseValue) !== null && _b !== void 0 ? _b : yAxis.getRange().from;\n var baseValueY = yAxis.convertToPixel(baseValue);\n var height = Math.abs(baseValueY - valueY);\n if (baseValue !== (currentData === null || currentData === void 0 ? void 0 : currentData[figure.key])) {\n height = Math.max(1, height);\n }\n var y = 0;\n if (valueY > baseValueY) {\n y = baseValueY;\n }\n else {\n y = valueY;\n }\n var barWidth = (_c = attrs === null || attrs === void 0 ? void 0 : attrs.width) !== null && _c !== void 0 ? _c : halfGapBar * 2;\n attrs = __assign({ x: x - barWidth / 2, y: y, width: Math.max(1, barWidth), height: height }, attrs);\n break;\n }\n case 'line': {\n if (!isValid(lines_1[figureIndex])) {\n lines_1[figureIndex] = [];\n }\n if (isNumber(currentCoordinate[figure.key]) && isNumber(nextCoordinate[figure.key])) {\n lines_1[figureIndex].push({\n coordinates: (_d = attrs === null || attrs === void 0 ? void 0 : attrs.coordinates) !== null && _d !== void 0 ? _d : [\n { x: currentCoordinate.x, y: currentCoordinate[figure.key] },\n { x: nextCoordinate.x, y: nextCoordinate[figure.key] }\n ],\n styles: figureStyles\n });\n }\n break;\n }\n }\n var type = figure.type;\n if (isValid(attrs) && type !== 'line') {\n (_e = _this.createFigure({\n name: type === 'bar' ? 'rect' : type,\n attrs: attrs,\n styles: figureStyles\n })) === null || _e === void 0 ? void 0 : _e.draw(ctx);\n }\n }\n }, preparedFigures_1);\n });\n // merge line and render\n lines_1.forEach(function (items) {\n var _a, _b, _c, _d;\n if (items.length > 1) {\n var mergeLines = [\n {\n coordinates: [items[0].coordinates[0], items[0].coordinates[1]],\n styles: items[0].styles\n }\n ];\n for (var i = 1; i < items.length; i++) {\n var lastMergeLine = mergeLines[mergeLines.length - 1];\n var current = items[i];\n var lastMergeLineLastCoordinate = lastMergeLine.coordinates[lastMergeLine.coordinates.length - 1];\n if (lastMergeLineLastCoordinate.x === current.coordinates[0].x &&\n lastMergeLineLastCoordinate.y === current.coordinates[0].y &&\n lastMergeLine.styles.style === current.styles.style &&\n lastMergeLine.styles.color === current.styles.color &&\n lastMergeLine.styles.size === current.styles.size &&\n lastMergeLine.styles.smooth === current.styles.smooth &&\n ((_a = lastMergeLine.styles.dashedValue) === null || _a === void 0 ? void 0 : _a[0]) === ((_b = current.styles.dashedValue) === null || _b === void 0 ? void 0 : _b[0]) &&\n ((_c = lastMergeLine.styles.dashedValue) === null || _c === void 0 ? void 0 : _c[1]) === ((_d = current.styles.dashedValue) === null || _d === void 0 ? void 0 : _d[1])) {\n lastMergeLine.coordinates.push(current.coordinates[1]);\n }\n else {\n mergeLines.push({\n coordinates: [current.coordinates[0], current.coordinates[1]],\n styles: current.styles\n });\n }\n }\n mergeLines.forEach(function (_a) {\n var _b;\n var coordinates = _a.coordinates, styles = _a.styles;\n (_b = _this.createFigure({\n name: 'line',\n attrs: { coordinates: coordinates },\n styles: styles\n })) === null || _b === void 0 ? void 0 : _b.draw(ctx);\n });\n }\n });\n }\n }\n });\n ctx.restore();\n };\n return IndicatorView;\n}(CandleBarView));\n\n/**\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n\n * http://www.apache.org/licenses/LICENSE-2.0\n\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nfunction checkOverlayFigureEvent(targetEventType, figure) {\n var _a;\n var ignoreEvent = (_a = figure === null || figure === void 0 ? void 0 : figure.ignoreEvent) !== null && _a !== void 0 ? _a : false;\n if (isBoolean(ignoreEvent)) {\n return !ignoreEvent;\n }\n return !ignoreEvent.includes(targetEventType);\n}\nvar OVERLAY_DRAW_STEP_START = 1;\nvar OVERLAY_DRAW_STEP_FINISHED = -1;\nvar OVERLAY_ID_PREFIX = 'overlay_';\nvar OVERLAY_FIGURE_KEY_PREFIX = 'overlay_figure_';\nvar OverlayImp = /** @class */ (function () {\n function OverlayImp(overlay) {\n this.groupId = '';\n this.totalStep = 1;\n this.currentStep = OVERLAY_DRAW_STEP_START;\n this.drawingMode = 'step';\n this.lock = false;\n this.visible = true;\n this.zLevel = 0;\n this.fixedZLevel = false;\n this.needDefaultPointFigure = false;\n this.needDefaultXAxisFigure = false;\n this.needDefaultYAxisFigure = false;\n this.mode = 'normal';\n this.modeSensitivity = 8;\n this.points = [];\n this.styles = null;\n this.createPointFigures = null;\n this.createXAxisFigures = null;\n this.createYAxisFigures = null;\n this.performEventPressedMove = null;\n this.performEventMoveForDrawing = null;\n this.onDrawStart = null;\n this.onDrawing = null;\n this.onDrawEnd = null;\n this.onClick = null;\n this.onDoubleClick = null;\n this.onRightClick = null;\n this.onPressedMoveStart = null;\n this.onPressedMoving = null;\n this.onPressedMoveEnd = null;\n this.onMouseMove = null;\n this.onMouseEnter = null;\n this.onMouseLeave = null;\n this.onRemoved = null;\n this.onSelected = null;\n this.onDeselected = null;\n this._prevZLevel = 0;\n this._prevPressedPoint = null;\n this._prevPressedPoints = [];\n this.override(overlay);\n }\n OverlayImp.prototype.override = function (overlay) {\n var _a, _b;\n this._prevOverlay = clone(__assign(__assign({}, this), { _prevOverlay: null }));\n var id = overlay.id, name = overlay.name; overlay.currentStep; var points = overlay.points, styles = overlay.styles, others = __rest(overlay, [\"id\", \"name\", \"currentStep\", \"points\", \"styles\"]);\n merge(this, others);\n if (!isString(this.name)) {\n this.name = name !== null && name !== void 0 ? name : '';\n }\n if (!isString(this.id) && isString(id)) {\n this.id = id;\n }\n if (isValid(styles)) {\n (_a = this.styles) !== null && _a !== void 0 ? _a : (this.styles = {});\n merge(this.styles, styles);\n }\n if (isArray(points) && points.length > 0) {\n this.points = __spreadArray([], __read(points), false);\n this.currentStep = OVERLAY_DRAW_STEP_FINISHED;\n var lastIndex = this.points.length - 1;\n var lastPoint = this.points[lastIndex];\n if (lastIndex > 0 && isValid(lastPoint)) {\n (_b = this.performEventPressedMove) === null || _b === void 0 ? void 0 : _b.call(this, {\n currentStep: this.currentStep,\n mode: this.mode,\n points: this.points,\n performPointIndex: lastIndex,\n performPoint: lastPoint\n });\n }\n }\n };\n OverlayImp.prototype.getPrevZLevel = function () {\n return this._prevZLevel;\n };\n OverlayImp.prototype.setPrevZLevel = function (zLevel) {\n this._prevZLevel = zLevel;\n };\n OverlayImp.prototype.shouldUpdate = function () {\n var sort = this._prevOverlay.zLevel !== this.zLevel;\n var draw = sort || JSON.stringify(this._prevOverlay.points) !== JSON.stringify(this.points) || this._prevOverlay.visible !== this.visible || this._prevOverlay.extendData !== this.extendData || this._prevOverlay.styles !== this.styles;\n return { sort: sort, draw: draw };\n };\n OverlayImp.prototype.nextStep = function () {\n if (this.currentStep === this.totalStep - 1) {\n this.currentStep = OVERLAY_DRAW_STEP_FINISHED;\n }\n else {\n this.currentStep++;\n }\n };\n OverlayImp.prototype.forceComplete = function () {\n this.currentStep = OVERLAY_DRAW_STEP_FINISHED;\n };\n OverlayImp.prototype.isDrawing = function () {\n return this.currentStep !== OVERLAY_DRAW_STEP_FINISHED;\n };\n OverlayImp.prototype.isStart = function () {\n return this.currentStep === OVERLAY_DRAW_STEP_START;\n };\n OverlayImp.prototype.isContinuousDrawingMode = function () {\n return this.drawingMode === 'continuous';\n };\n /**\n * Start continuous drawing - set first point\n */\n OverlayImp.prototype.startContinuousDrawing = function (point) {\n this.points = [];\n this.continuousDrawingModeEventMoveForDrawing(point);\n this.currentStep = 2; // Mark as actively drawing\n };\n /**\n * Add a point during continuous drawing mode\n */\n OverlayImp.prototype.continuousDrawingModeEventMoveForDrawing = function (point) {\n var newPoint = {};\n if (isNumber(point.timestamp)) {\n newPoint.timestamp = point.timestamp;\n }\n if (isNumber(point.dataIndex)) {\n newPoint.dataIndex = point.dataIndex;\n }\n if (isNumber(point.value)) {\n newPoint.value = point.value;\n }\n this.points.push(newPoint);\n return true;\n };\n OverlayImp.prototype.stepDrawingModeEventMoveForDrawing = function (point) {\n var _a;\n var pointIndex = this.currentStep - 1;\n var newPoint = {};\n if (isNumber(point.timestamp)) {\n newPoint.timestamp = point.timestamp;\n }\n if (isNumber(point.dataIndex)) {\n newPoint.dataIndex = point.dataIndex;\n }\n if (isNumber(point.value)) {\n newPoint.value = point.value;\n }\n this.points[pointIndex] = newPoint;\n (_a = this.performEventMoveForDrawing) === null || _a === void 0 ? void 0 : _a.call(this, {\n currentStep: this.currentStep,\n mode: this.mode,\n points: this.points,\n performPointIndex: pointIndex,\n performPoint: newPoint\n });\n };\n OverlayImp.prototype.eventPressedPointMove = function (point, pointIndex) {\n var _a;\n if (isNumber(point.timestamp)) {\n this.points[pointIndex].timestamp = point.timestamp;\n }\n if (isNumber(point.dataIndex)) {\n this.points[pointIndex].dataIndex = point.dataIndex;\n }\n if (isNumber(point.value)) {\n this.points[pointIndex].value = point.value;\n }\n (_a = this.performEventPressedMove) === null || _a === void 0 ? void 0 : _a.call(this, {\n currentStep: this.currentStep,\n points: this.points,\n mode: this.mode,\n performPointIndex: pointIndex,\n performPoint: this.points[pointIndex]\n });\n };\n OverlayImp.prototype.startPressedMove = function (point) {\n this._prevPressedPoint = __assign({}, point);\n this._prevPressedPoints = clone(this.points);\n };\n OverlayImp.prototype.eventPressedOtherMove = function (point, chartStore) {\n var _this = this;\n if (this._prevPressedPoint !== null) {\n var difDataIndex_1 = null;\n if (isNumber(point.dataIndex) && isNumber(this._prevPressedPoint.dataIndex)) {\n difDataIndex_1 = point.dataIndex - this._prevPressedPoint.dataIndex;\n }\n var difValue_1 = null;\n if (isNumber(point.value) && isNumber(this._prevPressedPoint.value)) {\n difValue_1 = point.value - this._prevPressedPoint.value;\n }\n this.points = this._prevPressedPoints.map(function (p) {\n var _a, _b;\n var newPoint = __assign({}, p);\n if (isNumber(difDataIndex_1) && (isNumber(p.dataIndex) || isNumber(p.timestamp))) {\n var dataIndex = isNumber(p.timestamp) ? (_this.isContinuousDrawingMode() ? chartStore.timestampToFloatIndex(p.timestamp) : chartStore.timestampToDataIndex(p.timestamp)) : p.dataIndex;\n newPoint.dataIndex = dataIndex + difDataIndex_1;\n newPoint.timestamp = _this.isContinuousDrawingMode() ? ((_a = chartStore.floatIndexToTimestamp(newPoint.dataIndex)) !== null && _a !== void 0 ? _a : undefined) : ((_b = chartStore.dataIndexToTimestamp(newPoint.dataIndex)) !== null && _b !== void 0 ? _b : undefined);\n }\n if (isNumber(difValue_1) && isNumber(p.value)) {\n newPoint.value = p.value + difValue_1;\n }\n return newPoint;\n });\n }\n };\n OverlayImp.extend = function (template) {\n var Custom = /** @class */ (function (_super) {\n __extends(Custom, _super);\n function Custom() {\n return _super.call(this, template) || this;\n }\n return Custom;\n }(OverlayImp));\n return Custom;\n };\n return OverlayImp;\n}());\n\n/**\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n\n * http://www.apache.org/licenses/LICENSE-2.0\n\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar OverlayView = /** @class */ (function (_super) {\n __extends(OverlayView, _super);\n function OverlayView(widget) {\n var _this = _super.call(this, widget) || this;\n _this._initEvent();\n return _this;\n }\n OverlayView.prototype._initEvent = function () {\n var _this = this;\n var widget = this.getWidget();\n var pane = widget.getPane();\n var paneId = pane.getId();\n var chart = pane.getChart();\n var chartStore = chart.getChartStore();\n this.registerEvent('mouseMoveEvent', function (event) {\n var _a;\n var progressOverlayInfo = chartStore.getProgressOverlayInfo();\n if (progressOverlayInfo !== null) {\n var overlay = progressOverlayInfo.overlay;\n var progressOverlayPaneId = progressOverlayInfo.paneId;\n if (overlay.isStart()) {\n chartStore.updateProgressOverlayInfo(paneId);\n progressOverlayPaneId = paneId;\n }\n var index = overlay.points.length - 1;\n if (overlay.isDrawing() && progressOverlayPaneId === paneId) {\n overlay.stepDrawingModeEventMoveForDrawing(_this._coordinateToPoint(overlay, event));\n (_a = overlay.onDrawing) === null || _a === void 0 ? void 0 : _a.call(overlay, __assign({ chart: chart, overlay: overlay }, event));\n }\n return _this._figureMouseMoveEvent(overlay, 'point', index, { key: \"\".concat(OVERLAY_FIGURE_KEY_PREFIX, \"point_\").concat(index), type: 'circle', attrs: {} })(event);\n }\n chartStore.setHoverOverlayInfo({\n paneId: paneId,\n overlay: null,\n figureType: 'none',\n figureIndex: -1,\n figure: null\n }, function (o, f) { return _this._processOverlayMouseEnterEvent(o, f, event); }, function (o, f) { return _this._processOverlayMouseLeaveEvent(o, f, event); });\n widget.setForceCursor(null);\n return false;\n })\n .registerEvent('mouseClickEvent', function (event) {\n var _a, _b;\n var progressOverlayInfo = chartStore.getProgressOverlayInfo();\n if (progressOverlayInfo !== null) {\n var overlay = progressOverlayInfo.overlay;\n var progressOverlayPaneId = progressOverlayInfo.paneId;\n if (overlay.isStart()) {\n chartStore.updateProgressOverlayInfo(paneId, true);\n progressOverlayPaneId = paneId;\n }\n var index = overlay.points.length - 1;\n if (overlay.isDrawing() && progressOverlayPaneId === paneId) {\n overlay.stepDrawingModeEventMoveForDrawing(_this._coordinateToPoint(overlay, event));\n (_a = overlay.onDrawing) === null || _a === void 0 ? void 0 : _a.call(overlay, __assign({ chart: chart, overlay: overlay }, event));\n overlay.nextStep();\n if (!overlay.isDrawing()) {\n chartStore.progressOverlayComplete();\n (_b = overlay.onDrawEnd) === null || _b === void 0 ? void 0 : _b.call(overlay, __assign({ chart: chart, overlay: overlay }, event));\n }\n }\n return _this._figureMouseClickEvent(overlay, 'point', index, {\n key: \"\".concat(OVERLAY_FIGURE_KEY_PREFIX, \"point_\").concat(index),\n type: 'circle',\n attrs: {}\n })(event);\n }\n chartStore.setClickOverlayInfo({\n paneId: paneId,\n overlay: null,\n figureType: 'none',\n figureIndex: -1,\n figure: null\n }, function (o, f) { return _this._processOverlaySelectedEvent(o, f, event); }, function (o, f) { return _this._processOverlayDeselectedEvent(o, f, event); });\n return false;\n })\n .registerEvent('mouseDoubleClickEvent', function (event) {\n var _a;\n var progressOverlayInfo = chartStore.getProgressOverlayInfo();\n if (progressOverlayInfo !== null) {\n var overlay = progressOverlayInfo.overlay;\n var progressOverlayPaneId = progressOverlayInfo.paneId;\n if (overlay.isDrawing() && progressOverlayPaneId === paneId) {\n overlay.forceComplete();\n if (!overlay.isDrawing()) {\n chartStore.progressOverlayComplete();\n (_a = overlay.onDrawEnd) === null || _a === void 0 ? void 0 : _a.call(overlay, __assign({ chart: chart, overlay: overlay }, event));\n }\n }\n var index = overlay.points.length - 1;\n return _this._figureMouseClickEvent(overlay, 'point', index, {\n key: \"\".concat(OVERLAY_FIGURE_KEY_PREFIX, \"point_\").concat(index),\n type: 'circle',\n attrs: {}\n })(event);\n }\n return false;\n })\n .registerEvent('mouseRightClickEvent', function (event) {\n var progressOverlayInfo = chartStore.getProgressOverlayInfo();\n if (progressOverlayInfo !== null) {\n var overlay = progressOverlayInfo.overlay;\n if (overlay.isDrawing()) {\n var index = overlay.points.length - 1;\n return _this._figureMouseRightClickEvent(overlay, 'point', index, {\n key: \"\".concat(OVERLAY_FIGURE_KEY_PREFIX, \"point_\").concat(index),\n type: 'circle',\n attrs: {}\n })(event);\n }\n }\n return false;\n })\n .registerEvent('mouseDownEvent', function (event) {\n var _a;\n // Handle continuous drawing mode - start drawing on mouse down\n var progressOverlayInfo = chartStore.getProgressOverlayInfo();\n if (progressOverlayInfo !== null) {\n var overlay = progressOverlayInfo.overlay;\n if (overlay.isContinuousDrawingMode() && overlay.isStart()) {\n chartStore.updateProgressOverlayInfo(paneId, true);\n var point = _this._coordinateToPoint(overlay, event);\n overlay.startContinuousDrawing(point);\n (_a = overlay.onDrawStart) === null || _a === void 0 ? void 0 : _a.call(overlay, __assign({ chart: chart, overlay: overlay }, event));\n return true;\n }\n }\n return false;\n })\n .registerEvent('mouseUpEvent', function (event) {\n var _a, _b;\n // Handle continuous drawing mode - complete on mouse up\n var progressOverlayInfo = chartStore.getProgressOverlayInfo();\n if (progressOverlayInfo !== null) {\n var overlay_1 = progressOverlayInfo.overlay;\n if (overlay_1.isContinuousDrawingMode() && overlay_1.isDrawing() && !overlay_1.isStart()) {\n overlay_1.forceComplete();\n chartStore.progressOverlayComplete();\n (_a = overlay_1.onDrawEnd) === null || _a === void 0 ? void 0 : _a.call(overlay_1, __assign({ chart: chart, overlay: overlay_1 }, event));\n return true;\n }\n }\n var _c = chartStore.getPressedOverlayInfo(), overlay = _c.overlay, figure = _c.figure;\n if (overlay !== null) {\n if (checkOverlayFigureEvent('onPressedMoveEnd', figure)) {\n (_b = overlay.onPressedMoveEnd) === null || _b === void 0 ? void 0 : _b.call(overlay, __assign({ chart: chart, overlay: overlay, figure: figure !== null && figure !== void 0 ? figure : undefined }, event));\n }\n }\n chartStore.setPressedOverlayInfo({\n paneId: paneId,\n overlay: null,\n figureType: 'none',\n figureIndex: -1,\n figure: null\n });\n return false;\n })\n .registerEvent('pressedMouseMoveEvent', function (event) {\n var _a, _b;\n // Handle continuous drawing mode - accumulate points while mouse is pressed\n var progressOverlayInfo = chartStore.getProgressOverlayInfo();\n if (progressOverlayInfo !== null) {\n var overlay_2 = progressOverlayInfo.overlay;\n if (overlay_2.isContinuousDrawingMode() && overlay_2.isDrawing() && !overlay_2.isStart()) {\n var point = _this._coordinateToPoint(overlay_2, event);\n overlay_2.continuousDrawingModeEventMoveForDrawing(point);\n (_a = overlay_2.onDrawing) === null || _a === void 0 ? void 0 : _a.call(overlay_2, __assign({ chart: chart, overlay: overlay_2 }, event));\n _this.getWidget().setForceCursor('pointer');\n return true;\n }\n }\n var _c = chartStore.getPressedOverlayInfo(), overlay = _c.overlay, figureType = _c.figureType, figureIndex = _c.figureIndex, figure = _c.figure;\n if (overlay !== null) {\n if (checkOverlayFigureEvent('onPressedMoving', figure)) {\n if (!overlay.lock) {\n var point = _this._coordinateToPoint(overlay, event);\n if (figureType === 'point') {\n overlay.eventPressedPointMove(point, figureIndex);\n }\n else {\n overlay.eventPressedOtherMove(point, _this.getWidget().getPane().getChart().getChartStore());\n }\n var prevented_1 = false;\n (_b = overlay.onPressedMoving) === null || _b === void 0 ? void 0 : _b.call(overlay, __assign(__assign({ chart: chart, overlay: overlay, figure: figure !== null && figure !== void 0 ? figure : undefined }, event), { preventDefault: function () {\n prevented_1 = true;\n } }));\n if (prevented_1) {\n _this.getWidget().setForceCursor(null);\n }\n else {\n _this.getWidget().setForceCursor('pointer');\n }\n return true;\n }\n }\n }\n _this.getWidget().setForceCursor(null);\n return false;\n });\n };\n OverlayView.prototype._createFigureEvents = function (overlay, figureType, figureIndex, figure) {\n if (overlay.isDrawing()) {\n return null;\n }\n return {\n mouseMoveEvent: this._figureMouseMoveEvent(overlay, figureType, figureIndex, figure),\n mouseDownEvent: this._figureMouseDownEvent(overlay, figureType, figureIndex, figure),\n mouseClickEvent: this._figureMouseClickEvent(overlay, figureType, figureIndex, figure),\n mouseRightClickEvent: this._figureMouseRightClickEvent(overlay, figureType, figureIndex, figure),\n mouseDoubleClickEvent: this._figureMouseDoubleClickEvent(overlay, figureType, figureIndex, figure)\n };\n };\n OverlayView.prototype._processOverlayMouseEnterEvent = function (overlay, figure, event) {\n if (isFunction(overlay.onMouseEnter) && checkOverlayFigureEvent('onMouseEnter', figure)) {\n overlay.onMouseEnter(__assign({ chart: this.getWidget().getPane().getChart(), overlay: overlay, figure: figure !== null && figure !== void 0 ? figure : undefined }, event));\n return true;\n }\n return false;\n };\n OverlayView.prototype._processOverlayMouseLeaveEvent = function (overlay, figure, event) {\n if (isFunction(overlay.onMouseLeave) && checkOverlayFigureEvent('onMouseLeave', figure)) {\n overlay.onMouseLeave(__assign({ chart: this.getWidget().getPane().getChart(), overlay: overlay, figure: figure !== null && figure !== void 0 ? figure : undefined }, event));\n return true;\n }\n return false;\n };\n OverlayView.prototype._processOverlaySelectedEvent = function (overlay, figure, event) {\n var _a;\n if (checkOverlayFigureEvent('onSelected', figure)) {\n (_a = overlay.onSelected) === null || _a === void 0 ? void 0 : _a.call(overlay, __assign({ chart: this.getWidget().getPane().getChart(), overlay: overlay, figure: figure !== null && figure !== void 0 ? figure : undefined }, event));\n return true;\n }\n return false;\n };\n OverlayView.prototype._processOverlayDeselectedEvent = function (overlay, figure, event) {\n var _a;\n if (checkOverlayFigureEvent('onDeselected', figure)) {\n (_a = overlay.onDeselected) === null || _a === void 0 ? void 0 : _a.call(overlay, __assign({ chart: this.getWidget().getPane().getChart(), overlay: overlay, figure: figure !== null && figure !== void 0 ? figure : undefined }, event));\n return true;\n }\n return false;\n };\n OverlayView.prototype._figureMouseMoveEvent = function (overlay, figureType, figureIndex, figure) {\n var _this = this;\n return function (event) {\n var _a;\n var pane = _this.getWidget().getPane();\n var check = !overlay.isDrawing() && checkOverlayFigureEvent('onMouseMove', figure);\n if (check) {\n var prevented_2 = false;\n (_a = overlay.onMouseMove) === null || _a === void 0 ? void 0 : _a.call(overlay, __assign(__assign({ chart: pane.getChart(), overlay: overlay, figure: figure }, event), { preventDefault: function () {\n prevented_2 = true;\n } }));\n if (prevented_2) {\n _this.getWidget().setForceCursor(null);\n }\n else {\n _this.getWidget().setForceCursor('pointer');\n }\n }\n pane\n .getChart()\n .getChartStore()\n .setHoverOverlayInfo({ paneId: pane.getId(), overlay: overlay, figureType: figureType, figure: figure, figureIndex: figureIndex }, function (o, f) { return _this._processOverlayMouseEnterEvent(o, f, event); }, function (o, f) { return _this._processOverlayMouseLeaveEvent(o, f, event); });\n return check;\n };\n };\n OverlayView.prototype._figureMouseDownEvent = function (overlay, figureType, figureIndex, figure) {\n var _this = this;\n return function (event) {\n var _a;\n if (overlay.lock) {\n return false;\n }\n var pane = _this.getWidget().getPane();\n var paneId = pane.getId();\n overlay.startPressedMove(_this._coordinateToPoint(overlay, event));\n if (checkOverlayFigureEvent('onPressedMoveStart', figure)) {\n (_a = overlay.onPressedMoveStart) === null || _a === void 0 ? void 0 : _a.call(overlay, __assign({ chart: pane.getChart(), overlay: overlay, figure: figure }, event));\n pane.getChart().getChartStore().setPressedOverlayInfo({ paneId: paneId, overlay: overlay, figureType: figureType, figureIndex: figureIndex, figure: figure });\n return !overlay.isDrawing();\n }\n return false;\n };\n };\n OverlayView.prototype._figureMouseClickEvent = function (overlay, figureType, figureIndex, figure) {\n var _this = this;\n return function (event) {\n var _a;\n var pane = _this.getWidget().getPane();\n var paneId = pane.getId();\n var check = !overlay.isDrawing() && checkOverlayFigureEvent('onClick', figure);\n if (check) {\n (_a = overlay.onClick) === null || _a === void 0 ? void 0 : _a.call(overlay, __assign({ chart: _this.getWidget().getPane().getChart(), overlay: overlay, figure: figure }, event));\n }\n pane\n .getChart()\n .getChartStore()\n .setClickOverlayInfo({ paneId: paneId, overlay: overlay, figureType: figureType, figureIndex: figureIndex, figure: figure }, function (o, f) { return _this._processOverlaySelectedEvent(o, f, event); }, function (o, f) { return _this._processOverlayDeselectedEvent(o, f, event); });\n return check;\n };\n };\n OverlayView.prototype._figureMouseDoubleClickEvent = function (overlay, _figureType, _figureIndex, figure) {\n var _this = this;\n return function (event) {\n var _a;\n if (checkOverlayFigureEvent('onDoubleClick', figure)) {\n (_a = overlay.onDoubleClick) === null || _a === void 0 ? void 0 : _a.call(overlay, __assign(__assign({}, event), { chart: _this.getWidget().getPane().getChart(), figure: figure, overlay: overlay }));\n return !overlay.isDrawing();\n }\n return false;\n };\n };\n OverlayView.prototype._figureMouseRightClickEvent = function (overlay, _figureType, _figureIndex, figure) {\n var _this = this;\n return function (event) {\n var _a;\n if (checkOverlayFigureEvent('onRightClick', figure)) {\n var prevented_3 = false;\n (_a = overlay.onRightClick) === null || _a === void 0 ? void 0 : _a.call(overlay, __assign(__assign({ chart: _this.getWidget().getPane().getChart(), overlay: overlay, figure: figure }, event), { preventDefault: function () {\n prevented_3 = true;\n } }));\n if (!prevented_3) {\n _this.getWidget().getPane().getChart().getChartStore().removeOverlay(overlay);\n }\n return !overlay.isDrawing();\n }\n return false;\n };\n };\n OverlayView.prototype._coordinateToPoint = function (o, coordinate) {\n var _a, _b;\n var point = {};\n var pane = this.getWidget().getPane();\n var chart = pane.getChart();\n var paneId = pane.getId();\n var chartStore = chart.getChartStore();\n if (this.coordinateToPointTimestampDataIndexFlag()) {\n var overlayImp = o;\n if (overlayImp.isContinuousDrawingMode()) {\n // For continuous drawing, store precise timestamp for sub-bar positioning\n var floatIndex = chartStore.coordinateToFloatIndex(coordinate.x);\n point.dataIndex = floatIndex;\n point.timestamp = (_a = chartStore.floatIndexToTimestamp(floatIndex)) !== null && _a !== void 0 ? _a : undefined;\n }\n else {\n // For step-based drawing, snap to candle boundaries\n var xAxis = chart.getXAxisPane().getXAxisComponent();\n var dataIndex = xAxis.convertFromPixel(coordinate.x);\n point.dataIndex = dataIndex;\n point.timestamp = (_b = chartStore.dataIndexToTimestamp(dataIndex)) !== null && _b !== void 0 ? _b : undefined;\n }\n }\n if (this.coordinateToPointValueFlag()) {\n var yAxis = pane.getYAxisComponentById();\n var value = yAxis.convertFromPixel(coordinate.y);\n if (o.mode !== 'normal' && paneId === PaneIdConstants.CANDLE && isNumber(point.dataIndex)) {\n var kLineData = chartStore.getDataByDataIndex(point.dataIndex);\n if (kLineData !== null) {\n var modeSensitivity = o.modeSensitivity;\n if (value > kLineData.high) {\n if (o.mode === 'weak_magnet') {\n var highY = yAxis.convertToPixel(kLineData.high);\n var buffValueY = yAxis.reverse ? highY + modeSensitivity : highY - modeSensitivity;\n var buffValue = yAxis.convertFromPixel(buffValueY);\n if (value < buffValue) {\n value = kLineData.high;\n }\n }\n else {\n value = kLineData.high;\n }\n }\n else if (value < kLineData.low) {\n if (o.mode === 'weak_magnet') {\n var lowY = yAxis.convertToPixel(kLineData.low);\n var buffValueY = yAxis.reverse ? lowY - modeSensitivity : lowY + modeSensitivity;\n var buffValue = yAxis.convertFromPixel(buffValueY);\n if (value > buffValue) {\n value = kLineData.low;\n }\n }\n else {\n value = kLineData.low;\n }\n }\n else {\n var max = Math.max(kLineData.open, kLineData.close);\n var min = Math.min(kLineData.open, kLineData.close);\n if (value > max) {\n if (value - max < kLineData.high - value) {\n value = max;\n }\n else {\n value = kLineData.high;\n }\n }\n else if (value < min) {\n if (value - kLineData.low < min - value) {\n value = kLineData.low;\n }\n else {\n value = min;\n }\n }\n else if (max - value < value - min) {\n value = max;\n }\n else {\n value = min;\n }\n }\n }\n }\n point.value = value;\n }\n return point;\n };\n OverlayView.prototype.coordinateToPointValueFlag = function () {\n return true;\n };\n OverlayView.prototype.coordinateToPointTimestampDataIndexFlag = function () {\n return true;\n };\n OverlayView.prototype.dispatchEvent = function (name, event) {\n var isDrawing = this.getWidget().getPane().getChart().getChartStore().isOverlayDrawing();\n if (isDrawing) {\n return this.onEvent(name, event);\n }\n return _super.prototype.dispatchEvent.call(this, name, event);\n };\n OverlayView.prototype.drawImp = function (ctx) {\n var _this = this;\n var overlays = this.getCompleteOverlays();\n overlays.forEach(function (overlay) {\n if (overlay.visible) {\n _this._drawOverlay(ctx, overlay);\n }\n });\n var progressOverlay = this.getProgressOverlay();\n if (isValid(progressOverlay) && progressOverlay.visible) {\n this._drawOverlay(ctx, progressOverlay);\n }\n };\n OverlayView.prototype._drawOverlay = function (ctx, overlay) {\n var points = overlay.points;\n var pane = this.getWidget().getPane();\n var chart = pane.getChart();\n var chartStore = chart.getChartStore();\n var yAxis = pane.getYAxisComponentById();\n // For continuous drawing overlays, use float indices for smooth rendering\n var isContinuous = overlay.isContinuousDrawingMode();\n var coordinates = points.map(function (point) {\n var _a;\n var dataIndex = null;\n if (isContinuous && isNumber(point.timestamp)) {\n // Use timestampToFloatIndex for sub-bar precision\n dataIndex = chartStore.timestampToFloatIndex(point.timestamp);\n }\n else if (isNumber(point.timestamp)) {\n // For regular overlays, use integer timestamp lookup\n dataIndex = chartStore.timestampToDataIndex(point.timestamp);\n }\n else if (isNumber(point.dataIndex)) {\n // Fallback to dataIndex if no timestamp\n dataIndex = point.dataIndex;\n }\n var coordinate = { x: 0, y: 0 };\n if (isNumber(dataIndex)) {\n coordinate.x = chartStore.dataIndexToCoordinate(dataIndex);\n }\n if (isNumber(point.value)) {\n coordinate.y = (_a = yAxis === null || yAxis === void 0 ? void 0 : yAxis.convertToPixel(point.value)) !== null && _a !== void 0 ? _a : 0;\n }\n return coordinate;\n });\n if (coordinates.length > 0) {\n var figures = [];\n figures = figures.concat(this.getFigures(overlay, coordinates));\n this.drawFigures(ctx, overlay, figures);\n }\n this.drawDefaultFigures(ctx, overlay, coordinates);\n };\n OverlayView.prototype.drawFigures = function (ctx, overlay, figures) {\n var _this = this;\n var defaultStyles = this.getWidget().getPane().getChart().getStyles().overlay;\n figures.forEach(function (figure, figureIndex) {\n var type = figure.type, styles = figure.styles, attrs = figure.attrs;\n // @ts-ignore\n var attrsArray = [].concat(attrs);\n attrsArray.forEach(function (ats) {\n var _a, _b;\n var events = _this._createFigureEvents(overlay, 'other', figureIndex, figure);\n // @ts-ignore\n var ss = __assign(__assign(__assign({}, defaultStyles[type]), (_a = overlay.styles) === null || _a === void 0 ? void 0 : _a[type]), styles);\n (_b = _this.createFigure({\n name: type,\n attrs: ats,\n styles: ss\n }, events !== null && events !== void 0 ? events : undefined)) === null || _b === void 0 ? void 0 : _b.draw(ctx);\n });\n });\n };\n OverlayView.prototype.getCompleteOverlays = function () {\n var pane = this.getWidget().getPane();\n return pane.getChart().getChartStore().getOverlaysByPaneId(pane.getId());\n };\n OverlayView.prototype.getProgressOverlay = function () {\n var pane = this.getWidget().getPane();\n var info = pane.getChart().getChartStore().getProgressOverlayInfo();\n if (isValid(info) && info.paneId === pane.getId()) {\n return info.overlay;\n }\n return null;\n };\n OverlayView.prototype.getFigures = function (o, coordinates) {\n var _a, _b;\n var widget = this.getWidget();\n var pane = widget.getPane();\n var chart = pane.getChart();\n var yAxis = pane.getYAxisComponentById();\n var xAxis = chart.getXAxisPane().getXAxisComponent();\n var bounding = widget.getBounding();\n return (_b = (_a = o.createPointFigures) === null || _a === void 0 ? void 0 : _a.call(o, { chart: chart, overlay: o, coordinates: coordinates, bounding: bounding, xAxis: xAxis, yAxis: yAxis })) !== null && _b !== void 0 ? _b : [];\n };\n OverlayView.prototype.drawDefaultFigures = function (ctx, overlay, coordinates) {\n var _this = this;\n var _a, _b;\n if (overlay.needDefaultPointFigure) {\n var chartStore = this.getWidget().getPane().getChart().getChartStore();\n var hoverOverlayInfo_1 = chartStore.getHoverOverlayInfo();\n var clickOverlayInfo = chartStore.getClickOverlayInfo();\n if ((((_a = hoverOverlayInfo_1.overlay) === null || _a === void 0 ? void 0 : _a.id) === overlay.id && hoverOverlayInfo_1.figureType !== 'none') || (((_b = clickOverlayInfo.overlay) === null || _b === void 0 ? void 0 : _b.id) === overlay.id && clickOverlayInfo.figureType !== 'none')) {\n var defaultStyles = chartStore.getStyles().overlay;\n var styles = overlay.styles;\n var pointStyles_1 = __assign(__assign({}, defaultStyles.point), styles === null || styles === void 0 ? void 0 : styles.point);\n coordinates.forEach(function (_a, index) {\n var _b, _c, _d, _e, _f;\n var x = _a.x, y = _a.y;\n var radius = pointStyles_1.radius;\n var color = pointStyles_1.color;\n var borderColor = pointStyles_1.borderColor;\n var borderSize = pointStyles_1.borderSize;\n if (((_b = hoverOverlayInfo_1.overlay) === null || _b === void 0 ? void 0 : _b.id) === overlay.id && hoverOverlayInfo_1.figureType === 'point' && ((_c = hoverOverlayInfo_1.figure) === null || _c === void 0 ? void 0 : _c.key) === \"\".concat(OVERLAY_FIGURE_KEY_PREFIX, \"point_\").concat(index)) {\n radius = pointStyles_1.activeRadius;\n color = pointStyles_1.activeColor;\n borderColor = pointStyles_1.activeBorderColor;\n borderSize = pointStyles_1.activeBorderSize;\n }\n (_e = _this.createFigure({\n name: 'circle',\n attrs: { x: x, y: y, r: radius + borderSize },\n styles: { color: borderColor }\n }, (_d = _this._createFigureEvents(overlay, 'point', index, {\n key: \"\".concat(OVERLAY_FIGURE_KEY_PREFIX, \"point_\").concat(index),\n type: 'circle',\n attrs: { x: x, y: y, r: radius + borderSize },\n styles: { color: borderColor }\n })) !== null && _d !== void 0 ? _d : undefined)) === null || _e === void 0 ? void 0 : _e.draw(ctx);\n (_f = _this.createFigure({\n name: 'circle',\n attrs: { x: x, y: y, r: radius },\n styles: { color: color }\n })) === null || _f === void 0 ? void 0 : _f.draw(ctx);\n });\n }\n }\n };\n return OverlayView;\n}(View));\n\n/**\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n\n * http://www.apache.org/licenses/LICENSE-2.0\n\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar supportedDevicePixelContentBox = null;\nfunction isSupportedDevicePixelContentBox() {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n supportedDevicePixelContentBox !== null && supportedDevicePixelContentBox !== void 0 ? supportedDevicePixelContentBox : (supportedDevicePixelContentBox = new Promise(function (resolve) {\n var ro = new ResizeObserver(function (entries) {\n resolve(entries.every(function (entry) { var _a; return isValid((_a = entry.devicePixelContentBoxSize) === null || _a === void 0 ? void 0 : _a[0]); }));\n ro.disconnect();\n });\n ro.observe(document.body, { box: 'device-pixel-content-box' });\n }).catch(function () { return false; }));\n return [4 /*yield*/, supportedDevicePixelContentBox];\n case 1: return [2 /*return*/, _a.sent()];\n }\n });\n });\n}\nvar Canvas = /** @class */ (function () {\n function Canvas(style, listener) {\n var _this = this;\n this._resizeObserver = null;\n this._mediaQueryList = null;\n this._destroyed = false;\n this._resizePending = false;\n this._sizeInitialized = false;\n this._width = 0;\n this._height = 0;\n this._pixelWidth = 0;\n this._pixelHeight = 0;\n this._nextPixelWidth = 0;\n this._nextPixelHeight = 0;\n this._requestAnimationId = DEFAULT_REQUEST_ID;\n this._mediaQueryListener = function () {\n if (!_this._destroyed) {\n _this._observePixelRatio();\n _this._resize(getPixelRatio(_this._element));\n }\n };\n this._listener = listener;\n this._element = createDom('canvas', style);\n this._ctx = this._element.getContext('2d');\n isSupportedDevicePixelContentBox()\n .then(function (result) {\n if (_this._destroyed) {\n return;\n }\n if (result) {\n _this._resizeObserver = new ResizeObserver(function (entries) {\n var entry = entries.find(function (entry) { return entry.target === _this._element; });\n var size = entry === null || entry === void 0 ? void 0 : entry.devicePixelContentBoxSize[0];\n if (_this._sizeInitialized && isValid(size)) {\n _this._nextPixelWidth = size.inlineSize;\n _this._nextPixelHeight = size.blockSize;\n if (_this._pixelWidth !== _this._nextPixelWidth || _this._pixelHeight !== _this._nextPixelHeight) {\n _this._scheduleDraw(true);\n }\n }\n });\n _this._resizeObserver.observe(_this._element, { box: 'device-pixel-content-box' });\n }\n else {\n _this._observePixelRatio();\n }\n })\n .catch(function (_) { return false; });\n }\n Canvas.prototype._observePixelRatio = function () {\n var _a, _b;\n if (isValid(this._mediaQueryList)) {\n this._mediaQueryList.removeListener(this._mediaQueryListener);\n }\n var view = this._element.ownerDocument.defaultView;\n this._mediaQueryList = (_a = view === null || view === void 0 ? void 0 : view.matchMedia(\"(resolution: \".concat(getPixelRatio(this._element), \"dppx)\"))) !== null && _a !== void 0 ? _a : null;\n (_b = this._mediaQueryList) === null || _b === void 0 ? void 0 : _b.addListener(this._mediaQueryListener);\n };\n Canvas.prototype._resize = function (pixelRatio) {\n this._nextPixelWidth = Math.round(this._width * pixelRatio);\n this._nextPixelHeight = Math.round(this._height * pixelRatio);\n this._scheduleDraw(true);\n };\n Canvas.prototype._scheduleDraw = function (resize) {\n var _this = this;\n if (resize === void 0) { resize = false; }\n this._resizePending || (this._resizePending = resize);\n if (this._requestAnimationId === DEFAULT_REQUEST_ID) {\n this._requestAnimationId = requestAnimationFrame(function () {\n _this._requestAnimationId = DEFAULT_REQUEST_ID;\n if (_this._destroyed) {\n return;\n }\n if (_this._resizePending) {\n _this._resizePending = false;\n _this._pixelWidth = _this._nextPixelWidth;\n _this._pixelHeight = _this._nextPixelHeight;\n _this._element.width = _this._pixelWidth;\n _this._element.height = _this._pixelHeight;\n }\n _this._ctx.setTransform(1, 0, 0, 1, 0, 0);\n _this._ctx.clearRect(0, 0, _this._pixelWidth, _this._pixelHeight);\n _this._ctx.save();\n if (_this._width > 0 && _this._height > 0) {\n _this._ctx.scale(_this._pixelWidth / _this._width, _this._pixelHeight / _this._height);\n }\n try {\n _this._listener();\n }\n finally {\n _this._ctx.restore();\n }\n });\n }\n };\n Canvas.prototype.update = function (w, h) {\n if (!this._sizeInitialized || this._width !== w || this._height !== h) {\n this._sizeInitialized = true;\n this._width = w;\n this._height = h;\n this._element.style.width = \"\".concat(w, \"px\");\n this._element.style.height = \"\".concat(h, \"px\");\n this._resize(getPixelRatio(this._element));\n }\n else {\n this._scheduleDraw();\n }\n };\n Canvas.prototype.getElement = function () {\n return this._element;\n };\n Canvas.prototype.getContext = function () {\n return this._ctx;\n };\n Canvas.prototype.destroy = function () {\n this._destroyed = true;\n if (this._requestAnimationId !== DEFAULT_REQUEST_ID) {\n cancelAnimationFrame(this._requestAnimationId);\n this._requestAnimationId = DEFAULT_REQUEST_ID;\n }\n if (isValid(this._resizeObserver)) {\n this._resizeObserver.disconnect();\n this._resizeObserver = null;\n }\n if (isValid(this._mediaQueryList)) {\n this._mediaQueryList.removeListener(this._mediaQueryListener);\n this._mediaQueryList = null;\n }\n };\n return Canvas;\n}());\n\n/**\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n\n * http://www.apache.org/licenses/LICENSE-2.0\n\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar Widget = /** @class */ (function (_super) {\n __extends(Widget, _super);\n function Widget(rootContainer, pane) {\n var _this = _super.call(this) || this;\n _this._bounding = createDefaultBounding();\n _this._cursor = 'crosshair';\n _this._forceCursor = null;\n _this._pane = pane;\n _this._rootContainer = rootContainer;\n _this._container = _this.createContainer();\n rootContainer.appendChild(_this._container);\n return _this;\n }\n Widget.prototype.setBounding = function (bounding) {\n merge(this._bounding, bounding);\n return this;\n };\n Widget.prototype.getContainer = function () {\n return this._container;\n };\n Widget.prototype.getBounding = function () {\n return this._bounding;\n };\n Widget.prototype.getPane = function () {\n return this._pane;\n };\n Widget.prototype.checkEventOn = function (_) {\n return true;\n };\n Widget.prototype.setCursor = function (cursor) {\n if (!isString(this._forceCursor)) {\n if (cursor !== this._cursor) {\n this._cursor = cursor;\n this._container.style.cursor = this._cursor;\n }\n }\n };\n Widget.prototype.setForceCursor = function (cursor) {\n var _a;\n if (cursor !== this._forceCursor) {\n this._forceCursor = cursor;\n this._container.style.cursor = (_a = this._forceCursor) !== null && _a !== void 0 ? _a : this._cursor;\n }\n };\n Widget.prototype.getForceCursor = function () {\n return this._forceCursor;\n };\n Widget.prototype.update = function (level) {\n this.updateImp(this._container, this._bounding, level !== null && level !== void 0 ? level : 3 /* UpdateLevel.Drawer */);\n };\n Widget.prototype.destroy = function () {\n this._rootContainer.removeChild(this._container);\n };\n return Widget;\n}(Eventful));\n\n/**\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n\n * http://www.apache.org/licenses/LICENSE-2.0\n\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar DrawWidget = /** @class */ (function (_super) {\n __extends(DrawWidget, _super);\n function DrawWidget(rootContainer, pane) {\n var _this = _super.call(this, rootContainer, pane) || this;\n _this._mainCanvas = new Canvas({\n position: 'absolute',\n top: '0',\n left: '0',\n zIndex: '2',\n boxSizing: 'border-box'\n }, function () {\n _this.updateMain(_this._mainCanvas.getContext());\n });\n _this._overlayCanvas = new Canvas({\n position: 'absolute',\n top: '0',\n left: '0',\n zIndex: '2',\n boxSizing: 'border-box'\n }, function () {\n _this.updateOverlay(_this._overlayCanvas.getContext());\n });\n var container = _this.getContainer();\n container.appendChild(_this._mainCanvas.getElement());\n container.appendChild(_this._overlayCanvas.getElement());\n return _this;\n }\n DrawWidget.prototype.createContainer = function () {\n return createDom('div', {\n margin: '0',\n padding: '0',\n position: 'absolute',\n top: '0',\n overflow: 'hidden',\n boxSizing: 'border-box',\n zIndex: '1'\n });\n };\n DrawWidget.prototype.updateImp = function (container, bounding, level) {\n var width = bounding.width, height = bounding.height, left = bounding.left;\n container.style.left = \"\".concat(left, \"px\");\n var l = level;\n var w = container.clientWidth;\n var h = container.clientHeight;\n if (width !== w || height !== h) {\n container.style.width = \"\".concat(width, \"px\");\n container.style.height = \"\".concat(height, \"px\");\n l = 3 /* UpdateLevel.Drawer */;\n }\n switch (l) {\n case 0 /* UpdateLevel.Main */: {\n this._mainCanvas.update(width, height);\n break;\n }\n case 1 /* UpdateLevel.Overlay */: {\n this._overlayCanvas.update(width, height);\n break;\n }\n case 3 /* UpdateLevel.Drawer */:\n case 4 /* UpdateLevel.All */: {\n this._mainCanvas.update(width, height);\n this._overlayCanvas.update(width, height);\n break;\n }\n }\n };\n DrawWidget.prototype.destroy = function () {\n this._mainCanvas.destroy();\n this._overlayCanvas.destroy();\n _super.prototype.destroy.call(this);\n };\n DrawWidget.prototype.getImage = function (includeOverlay) {\n var _a = this.getBounding(), width = _a.width, height = _a.height;\n var canvas = createDom('canvas', {\n width: \"\".concat(width, \"px\"),\n height: \"\".concat(height, \"px\"),\n boxSizing: 'border-box'\n });\n var ctx = canvas.getContext('2d');\n var pixelRatio = getPixelRatio(canvas);\n canvas.width = width * pixelRatio;\n canvas.height = height * pixelRatio;\n ctx.scale(pixelRatio, pixelRatio);\n ctx.drawImage(this._mainCanvas.getElement(), 0, 0, width, height);\n if (includeOverlay) {\n ctx.drawImage(this._overlayCanvas.getElement(), 0, 0, width, height);\n }\n return canvas;\n };\n return DrawWidget;\n}(Widget));\n\n/**\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n\n * http://www.apache.org/licenses/LICENSE-2.0\n\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar IndicatorWidget = /** @class */ (function (_super) {\n __extends(IndicatorWidget, _super);\n function IndicatorWidget(rootContainer, pane) {\n var _this = _super.call(this, rootContainer, pane) || this;\n _this._gridView = new GridView(_this);\n _this._indicatorView = new IndicatorView(_this);\n _this._crosshairLineView = new CrosshairLineView(_this);\n _this._tooltipView = _this.createTooltipView();\n _this._overlayView = new OverlayView(_this);\n _this.addChild(_this._tooltipView);\n _this.addChild(_this._overlayView);\n return _this;\n }\n IndicatorWidget.prototype.getName = function () {\n return WidgetNameConstants.MAIN;\n };\n IndicatorWidget.prototype.updateMain = function (ctx) {\n this.updateMainContent(ctx);\n this._indicatorView.draw(ctx);\n this._gridView.draw(ctx);\n };\n IndicatorWidget.prototype.createTooltipView = function () {\n return new IndicatorTooltipView(this);\n };\n IndicatorWidget.prototype.updateMainContent = function (_ctx) {\n // to do it\n };\n IndicatorWidget.prototype.updateOverlayContent = function (_ctx) {\n // to do it\n };\n IndicatorWidget.prototype.updateOverlay = function (ctx) {\n this._overlayView.draw(ctx);\n this._crosshairLineView.draw(ctx);\n this.updateOverlayContent(ctx);\n this._tooltipView.draw(ctx);\n };\n return IndicatorWidget;\n}(DrawWidget));\n\n/**\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n\n * http://www.apache.org/licenses/LICENSE-2.0\n\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar CandleWidget = /** @class */ (function (_super) {\n __extends(CandleWidget, _super);\n function CandleWidget(rootContainer, pane) {\n var _this = _super.call(this, rootContainer, pane) || this;\n _this._candleBarView = new CandleBarView(_this);\n _this._candleAreaView = new CandleAreaView(_this);\n _this._candleHighLowPriceView = new CandleHighLowPriceView(_this);\n _this._candleLastPriceLineView = new CandleLastPriceView(_this);\n _this._crosshairFeatureView = new CrosshairFeatureView(_this);\n _this.addChild(_this._candleBarView);\n _this.addChild(_this._crosshairFeatureView);\n return _this;\n }\n CandleWidget.prototype.updateMainContent = function (ctx) {\n var candleStyles = this.getPane().getChart().getStyles().candle;\n if (candleStyles.type !== 'area') {\n this._candleBarView.draw(ctx);\n this._candleHighLowPriceView.draw(ctx);\n this._candleAreaView.stopAnimation();\n }\n else {\n this._candleAreaView.draw(ctx);\n }\n this._candleLastPriceLineView.draw(ctx);\n };\n CandleWidget.prototype.updateOverlayContent = function (ctx) {\n this._crosshairFeatureView.draw(ctx);\n };\n CandleWidget.prototype.createTooltipView = function () {\n return new CandleTooltipView(this);\n };\n CandleWidget.prototype.destroy = function () {\n this._candleAreaView.stopAnimation();\n _super.prototype.destroy.call(this);\n };\n return CandleWidget;\n}(IndicatorWidget));\n\n/**\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n\n * http://www.apache.org/licenses/LICENSE-2.0\n\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar logarithm = {\n name: 'logarithm',\n minSpan: function (precision) { return 0.05 * index10(-precision); },\n valueToRealValue: function (value) { return (value < 0 ? -log10(Math.abs(value)) : log10(value)); },\n realValueToDisplayValue: function (value) { return (value < 0 ? -index10(Math.abs(value)) : index10(value)); },\n displayValueToRealValue: function (value) { return (value < 0 ? -log10(Math.abs(value)) : log10(value)); },\n realValueToValue: function (value) { return (value < 0 ? -index10(Math.abs(value)) : index10(value)); },\n createRange: function (_a) {\n var defaultRange = _a.defaultRange;\n var from = defaultRange.from, to = defaultRange.to, range = defaultRange.range;\n var realFrom = from < 0 ? -log10(Math.abs(from)) : log10(from);\n var realTo = to < 0 ? -log10(Math.abs(to)) : log10(to);\n return {\n from: from,\n to: to,\n range: range,\n realFrom: realFrom,\n realTo: realTo,\n realRange: realTo - realFrom,\n displayFrom: from,\n displayTo: to,\n displayRange: range\n };\n }\n};\n\n/**\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n\n * http://www.apache.org/licenses/LICENSE-2.0\n\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar normal$1 = {\n name: 'normal'\n};\n\n/**\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n\n * http://www.apache.org/licenses/LICENSE-2.0\n\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar percentage = {\n name: 'percentage',\n minSpan: function () { return Math.pow(10, -2); },\n displayValueToText: function (value) { return \"\".concat(formatPrecision(value, 2), \"%\"); },\n valueToRealValue: function (value, _a) {\n var range = _a.range;\n return (range.range === 0 ? range.realFrom : ((value - range.from) / range.range) * range.realRange + range.realFrom);\n },\n realValueToValue: function (value, _a) {\n var range = _a.range;\n return (range.realRange === 0 ? range.from : ((value - range.realFrom) / range.realRange) * range.range + range.from);\n },\n createRange: function (_a) {\n var chart = _a.chart, defaultRange = _a.defaultRange;\n var kLineDataList = chart.getDataList();\n var visibleRange = chart.getVisibleRange();\n var kLineData = kLineDataList[visibleRange.from];\n if (isValid(kLineData)) {\n var from = defaultRange.from, to = defaultRange.to, range = defaultRange.range;\n var base = kLineData.close;\n var realFrom = base === 0 ? 0 : ((defaultRange.from - base) / base) * 100;\n var realTo = base === 0 ? 0 : ((defaultRange.to - base) / base) * 100;\n var realRange = realTo - realFrom;\n return {\n from: from,\n to: to,\n range: range,\n realFrom: realFrom,\n realTo: realTo,\n realRange: realRange,\n displayFrom: realFrom,\n displayTo: realTo,\n displayRange: realRange\n };\n }\n return defaultRange;\n }\n};\n\n/**\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n\n * http://www.apache.org/licenses/LICENSE-2.0\n\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar yAxises = {\n normal: YAxisImp.extend(normal$1),\n percentage: YAxisImp.extend(percentage),\n logarithm: YAxisImp.extend(logarithm)\n};\nfunction registerYAxis(axis) {\n yAxises[axis.name] = YAxisImp.extend(axis);\n}\nfunction getYAxisClass(name) {\n var _a;\n return (_a = yAxises[name]) !== null && _a !== void 0 ? _a : yAxises.normal;\n}\n\n/**\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n\n * http://www.apache.org/licenses/LICENSE-2.0\n\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar CandleLastPriceLabelView = /** @class */ (function (_super) {\n __extends(CandleLastPriceLabelView, _super);\n function CandleLastPriceLabelView() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n CandleLastPriceLabelView.prototype.drawImp = function (ctx) {\n var _this = this;\n var _a, _b, _c, _d;\n var widget = this.getWidget();\n var pane = widget.getPane();\n var bounding = widget.getBounding();\n var chartStore = pane.getChart().getChartStore();\n var priceMarkStyles = chartStore.getStyles().candle.priceMark;\n var lastPriceMarkStyles = priceMarkStyles.last;\n var lastPriceMarkTextStyles = lastPriceMarkStyles.text;\n if (priceMarkStyles.show && lastPriceMarkStyles.show && lastPriceMarkTextStyles.show) {\n var precision = (_b = (_a = chartStore.getSymbol()) === null || _a === void 0 ? void 0 : _a.pricePrecision) !== null && _b !== void 0 ? _b : SymbolDefaultPrecisionConstants.PRICE;\n var yAxis = widget.getAxisComponent();\n var dataList = chartStore.getDataList();\n var data_1 = dataList[dataList.length - 1];\n if (isValid(data_1)) {\n var close_1 = data_1.close, open_1 = data_1.open;\n var comparePrice = lastPriceMarkStyles.compareRule === 'current_open' ? open_1 : ((_d = (_c = dataList[dataList.length - 2]) === null || _c === void 0 ? void 0 : _c.close) !== null && _d !== void 0 ? _d : close_1);\n var priceY = yAxis.convertToNicePixel(close_1);\n var backgroundColor_1 = '';\n if (close_1 > comparePrice) {\n backgroundColor_1 = lastPriceMarkStyles.upColor;\n }\n else if (close_1 < comparePrice) {\n backgroundColor_1 = lastPriceMarkStyles.downColor;\n }\n else {\n backgroundColor_1 = lastPriceMarkStyles.noChangeColor;\n }\n var x_1 = 0;\n var textAlgin_1 = 'left';\n if (yAxis.isFromZero()) {\n x_1 = 0;\n textAlgin_1 = 'left';\n }\n else {\n x_1 = bounding.width;\n textAlgin_1 = 'right';\n }\n var textFigures_1 = [];\n var yAxisRange = yAxis.getRange();\n var priceText = yAxis.displayValueToText(yAxis.realValueToDisplayValue(yAxis.valueToRealValue(close_1, { range: yAxisRange }), { range: yAxisRange }), precision);\n priceText = chartStore.getDecimalFold().format(chartStore.getThousandsSeparator().format(priceText));\n var paddingLeft = lastPriceMarkTextStyles.paddingLeft, paddingRight = lastPriceMarkTextStyles.paddingRight, paddingTop = lastPriceMarkTextStyles.paddingTop, paddingBottom = lastPriceMarkTextStyles.paddingBottom, size = lastPriceMarkTextStyles.size, family = lastPriceMarkTextStyles.family, weight = lastPriceMarkTextStyles.weight;\n var textWidth_1 = paddingLeft + calcTextWidth(priceText, size, weight, family) + paddingRight;\n var priceTextHeight = paddingTop + size + paddingBottom;\n textFigures_1.push({\n name: 'text',\n attrs: {\n x: x_1,\n y: priceY,\n width: textWidth_1,\n height: priceTextHeight,\n text: priceText,\n align: textAlgin_1,\n baseline: 'middle'\n },\n styles: __assign(__assign({}, lastPriceMarkTextStyles), { backgroundColor: backgroundColor_1 })\n });\n var formatExtendText_1 = chartStore.getInnerFormatter().formatExtendText;\n var priceTextHalfHeight = size / 2;\n var aboveY_1 = priceY - priceTextHalfHeight - paddingTop;\n var belowY_1 = priceY + priceTextHalfHeight + paddingBottom;\n lastPriceMarkStyles.extendTexts.forEach(function (item, index) {\n var text = formatExtendText_1({ type: 'last_price', data: data_1, index: index });\n if (text.length > 0 && item.show) {\n var textHalfHeight = item.size / 2;\n var textY = 0;\n if (item.position === 'above_price') {\n aboveY_1 -= item.paddingBottom + textHalfHeight;\n textY = aboveY_1;\n aboveY_1 -= textHalfHeight + item.paddingTop;\n }\n else {\n belowY_1 += item.paddingTop + textHalfHeight;\n textY = belowY_1;\n belowY_1 += textHalfHeight + item.paddingBottom;\n }\n textWidth_1 = Math.max(textWidth_1, item.paddingLeft + calcTextWidth(text, item.size, item.weight, item.family) + item.paddingRight);\n textFigures_1.push({\n name: 'text',\n attrs: {\n x: x_1,\n y: textY,\n width: textWidth_1,\n height: item.paddingTop + item.size + item.paddingBottom,\n text: text,\n align: textAlgin_1,\n baseline: 'middle'\n },\n styles: __assign(__assign({}, item), { backgroundColor: backgroundColor_1 })\n });\n }\n });\n textFigures_1.forEach(function (figure) {\n var _a;\n figure.attrs.width = textWidth_1;\n (_a = _this.createFigure(figure)) === null || _a === void 0 ? void 0 : _a.draw(ctx);\n });\n }\n }\n };\n return CandleLastPriceLabelView;\n}(View));\n\n/**\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n\n * http://www.apache.org/licenses/LICENSE-2.0\n\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar CrosshairHorizontalLabelView = /** @class */ (function (_super) {\n __extends(CrosshairHorizontalLabelView, _super);\n function CrosshairHorizontalLabelView() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n CrosshairHorizontalLabelView.prototype.drawImp = function (ctx) {\n var _a;\n var widget = this.getWidget();\n var pane = widget.getPane();\n var chartStore = widget.getPane().getChart().getChartStore();\n var crosshair = chartStore.getCrosshair();\n if (isString(crosshair.paneId) && this.compare(crosshair, pane.getId())) {\n var styles = chartStore.getStyles().crosshair;\n if (styles.show) {\n var directionStyles = this.getDirectionStyles(styles);\n var textStyles = directionStyles.text;\n if (directionStyles.show && textStyles.show) {\n var bounding = widget.getBounding();\n var axis = 'getAxisComponent' in widget ? widget.getAxisComponent() : pane.getYAxisComponentById();\n var text = this.getText(crosshair, chartStore, axis);\n ctx.font = createFont(textStyles.size, textStyles.weight, textStyles.family);\n (_a = this.createFigure({\n name: 'text',\n attrs: this.getTextAttrs(text, ctx.measureText(text).width, crosshair, bounding, axis, textStyles),\n styles: textStyles\n })) === null || _a === void 0 ? void 0 : _a.draw(ctx);\n }\n }\n }\n };\n CrosshairHorizontalLabelView.prototype.compare = function (crosshair, paneId) {\n return crosshair.paneId === paneId;\n };\n CrosshairHorizontalLabelView.prototype.getDirectionStyles = function (styles) {\n return styles.horizontal;\n };\n CrosshairHorizontalLabelView.prototype.getText = function (crosshair, chartStore, axis) {\n var _a, _b, _c;\n var yAxis = axis;\n var value = axis.convertFromPixel(crosshair.y);\n var precision = 0;\n var shouldFormatBigNumber = false;\n if (yAxis.isInCandle()) {\n precision = (_b = (_a = chartStore.getSymbol()) === null || _a === void 0 ? void 0 : _a.pricePrecision) !== null && _b !== void 0 ? _b : SymbolDefaultPrecisionConstants.PRICE;\n }\n else {\n var yAxisId_1 = yAxis.id;\n var pane = this.getWidget().getPane();\n if (pane.isManualYAxis(yAxisId_1)) {\n yAxisId_1 = (_c = pane.getDefaultYAxisId()) !== null && _c !== void 0 ? _c : yAxisId_1;\n }\n var indicators = chartStore.getIndicatorsByPaneId(crosshair.paneId).filter(function (indicator) { return indicator.yAxisId === yAxisId_1; });\n indicators.forEach(function (indicator) {\n precision = Math.max(indicator.precision, precision);\n shouldFormatBigNumber || (shouldFormatBigNumber = indicator.shouldFormatBigNumber);\n });\n }\n var yAxisRange = yAxis.getRange();\n var text = yAxis.displayValueToText(yAxis.realValueToDisplayValue(yAxis.valueToRealValue(value, { range: yAxisRange }), { range: yAxisRange }), precision);\n if (shouldFormatBigNumber) {\n text = chartStore.getInnerFormatter().formatBigNumber(text);\n }\n return chartStore.getDecimalFold().format(chartStore.getThousandsSeparator().format(text));\n };\n CrosshairHorizontalLabelView.prototype.getTextAttrs = function (text, _textWidth, crosshair, bounding, axis, _styles) {\n var yAxis = axis;\n var x = 0;\n var textAlign = 'left';\n if (yAxis.isFromZero()) {\n x = 0;\n textAlign = 'left';\n }\n else {\n x = bounding.width;\n textAlign = 'right';\n }\n return { x: x, y: crosshair.y, text: text, align: textAlign, baseline: 'middle' };\n };\n return CrosshairHorizontalLabelView;\n}(View));\n\n/**\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n\n * http://www.apache.org/licenses/LICENSE-2.0\n\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar IndicatorLastValueView = /** @class */ (function (_super) {\n __extends(IndicatorLastValueView, _super);\n function IndicatorLastValueView() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n IndicatorLastValueView.prototype.drawImp = function (ctx) {\n var _this = this;\n var widget = this.getWidget();\n var pane = widget.getPane();\n var bounding = widget.getBounding();\n var chartStore = pane.getChart().getChartStore();\n var defaultStyles = chartStore.getStyles().indicator;\n var lastValueMarkStyles = defaultStyles.lastValueMark;\n var lastValueMarkTextStyles = lastValueMarkStyles.text;\n if (lastValueMarkStyles.show) {\n var yAxisWidget = widget;\n var yAxis_1 = yAxisWidget.getAxisComponent();\n var yAxisRange_1 = yAxis_1.getRange();\n var dataList = chartStore.getDataList();\n var barSpace_1 = chartStore.getBarSpace();\n var dataIndex_1 = dataList.length - 1;\n var yAxisIds_1 = new Set([yAxis_1.id]);\n var defaultYAxisId = pane.getDefaultYAxisId();\n if (pane.isManualYAxis(yAxis_1.id) && isValid(defaultYAxisId)) {\n yAxisIds_1.add(defaultYAxisId);\n }\n var indicators = chartStore.getIndicatorsByPaneId(pane.getId()).filter(function (indicator) { return yAxisIds_1.has(indicator.yAxisId); });\n var formatter_1 = chartStore.getInnerFormatter();\n var decimalFold_1 = chartStore.getDecimalFold();\n var thousandsSeparator_1 = chartStore.getThousandsSeparator();\n indicators.forEach(function (indicator) {\n var _a;\n var result = indicator.result;\n var data = (_a = result[dataIndex_1]) !== null && _a !== void 0 ? _a : {};\n if (isValid(data) && indicator.visible) {\n var precision_1 = indicator.precision;\n // @ts-ignore\n eachFigures(indicator, dataIndex_1, barSpace_1, defaultStyles, function (figure, figureStyles) {\n var _a;\n var value = data[figure.key];\n if (isNumber(value)) {\n var y = yAxis_1.convertToNicePixel(value);\n var text = yAxis_1.displayValueToText(yAxis_1.realValueToDisplayValue(yAxis_1.valueToRealValue(value, { range: yAxisRange_1 }), { range: yAxisRange_1 }), precision_1);\n if (indicator.shouldFormatBigNumber) {\n text = formatter_1.formatBigNumber(text);\n }\n text = decimalFold_1.format(thousandsSeparator_1.format(text));\n var x = 0;\n var textAlign = 'left';\n if (yAxis_1.isFromZero()) {\n x = 0;\n textAlign = 'left';\n }\n else {\n x = bounding.width;\n textAlign = 'right';\n }\n (_a = _this.createFigure({\n name: 'text',\n attrs: {\n x: x,\n y: y,\n text: text,\n align: textAlign,\n baseline: 'middle'\n },\n styles: __assign(__assign({}, lastValueMarkTextStyles), { backgroundColor: figureStyles.color })\n })) === null || _a === void 0 ? void 0 : _a.draw(ctx);\n }\n });\n }\n });\n }\n };\n return IndicatorLastValueView;\n}(View));\n\n/**\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n\n * http://www.apache.org/licenses/LICENSE-2.0\n\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar OverlayYAxisView = /** @class */ (function (_super) {\n __extends(OverlayYAxisView, _super);\n function OverlayYAxisView() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n OverlayYAxisView.prototype.coordinateToPointTimestampDataIndexFlag = function () {\n return false;\n };\n OverlayYAxisView.prototype.drawDefaultFigures = function (ctx, overlay, coordinates) {\n this.drawFigures(ctx, overlay, this.getDefaultFigures(overlay, coordinates));\n };\n OverlayYAxisView.prototype.getDefaultFigures = function (overlay, coordinates) {\n var _a;\n var widget = this.getWidget();\n var pane = widget.getPane();\n var chartStore = pane.getChart().getChartStore();\n var clickOverlayInfo = chartStore.getClickOverlayInfo();\n var figures = [];\n if (overlay.needDefaultYAxisFigure && overlay.id === ((_a = clickOverlayInfo.overlay) === null || _a === void 0 ? void 0 : _a.id) && clickOverlayInfo.paneId === pane.getId()) {\n var yAxis = pane.getYAxisComponentById();\n var bounding = widget.getBounding();\n var topY_1 = Number.MAX_SAFE_INTEGER;\n var bottomY_1 = Number.MIN_SAFE_INTEGER;\n var isFromZero = yAxis.isFromZero();\n var textAlign_1 = 'left';\n var x_1 = 0;\n if (isFromZero) {\n textAlign_1 = 'left';\n x_1 = 0;\n }\n else {\n textAlign_1 = 'right';\n x_1 = bounding.width;\n }\n var decimalFold_1 = chartStore.getDecimalFold();\n var thousandsSeparator_1 = chartStore.getThousandsSeparator();\n coordinates.forEach(function (coordinate, index) {\n var _a, _b;\n var point = overlay.points[index];\n if (isNumber(point.value)) {\n topY_1 = Math.min(topY_1, coordinate.y);\n bottomY_1 = Math.max(bottomY_1, coordinate.y);\n var text = decimalFold_1.format(thousandsSeparator_1.format(formatPrecision(point.value, (_b = (_a = chartStore.getSymbol()) === null || _a === void 0 ? void 0 : _a.pricePrecision) !== null && _b !== void 0 ? _b : SymbolDefaultPrecisionConstants.PRICE)));\n figures.push({ type: 'text', attrs: { x: x_1, y: coordinate.y, text: text, align: textAlign_1, baseline: 'middle' }, ignoreEvent: true });\n }\n });\n if (coordinates.length > 1) {\n figures.unshift({ type: 'rect', attrs: { x: 0, y: topY_1, width: bounding.width, height: bottomY_1 - topY_1 }, ignoreEvent: true });\n }\n }\n return figures;\n };\n OverlayYAxisView.prototype.getFigures = function (overlay, coordinates) {\n var _a, _b;\n var widget = this.getWidget();\n var pane = widget.getPane();\n var chart = pane.getChart();\n var yAxis = pane.getYAxisComponentById();\n var xAxis = chart.getXAxisPane().getXAxisComponent();\n var bounding = widget.getBounding();\n return (_b = (_a = overlay.createYAxisFigures) === null || _a === void 0 ? void 0 : _a.call(overlay, { chart: chart, overlay: overlay, coordinates: coordinates, bounding: bounding, xAxis: xAxis, yAxis: yAxis })) !== null && _b !== void 0 ? _b : [];\n };\n return OverlayYAxisView;\n}(OverlayView));\n\n/**\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n\n * http://www.apache.org/licenses/LICENSE-2.0\n\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar AxisView = /** @class */ (function (_super) {\n __extends(AxisView, _super);\n function AxisView() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n AxisView.prototype.drawImp = function (ctx) {\n var _this = this;\n var _a, _b;\n var widget = this.getWidget();\n var pane = widget.getPane();\n var bounding = widget.getBounding();\n var axis = this.getAxis();\n var styles = this.getAxisStyles(pane.getChart().getStyles());\n if (styles.show) {\n if (styles.axisLine.show) {\n (_a = this.createFigure({\n name: 'line',\n attrs: this.createAxisLine(bounding, styles),\n styles: styles.axisLine\n })) === null || _a === void 0 ? void 0 : _a.draw(ctx);\n }\n var ticks = axis.getTicks();\n if (styles.tickLine.show) {\n var lines = this.createTickLines(ticks, bounding, styles);\n lines.forEach(function (line) {\n var _a;\n (_a = _this.createFigure({\n name: 'line',\n attrs: line,\n styles: styles.tickLine\n })) === null || _a === void 0 ? void 0 : _a.draw(ctx);\n });\n }\n if (styles.tickText.show) {\n var texts = this.createTickTexts(ticks, bounding, styles);\n (_b = this.createFigure({\n name: 'text',\n attrs: texts,\n styles: styles.tickText\n })) === null || _b === void 0 ? void 0 : _b.draw(ctx);\n }\n }\n };\n return AxisView;\n}(View));\n\n/**\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n\n * http://www.apache.org/licenses/LICENSE-2.0\n\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar YAxisView = /** @class */ (function (_super) {\n __extends(YAxisView, _super);\n function YAxisView() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n YAxisView.prototype.getAxis = function () {\n return this.getWidget().getAxisComponent();\n };\n YAxisView.prototype.getAxisStyles = function (styles) {\n return styles.yAxis;\n };\n YAxisView.prototype.createAxisLine = function (bounding, styles) {\n var yAxis = this.getAxis();\n var size = styles.axisLine.size;\n var x = 0;\n if (yAxis.isFromZero()) {\n x = 0;\n }\n else {\n x = bounding.width - size;\n }\n return {\n coordinates: [\n { x: x, y: 0 },\n { x: x, y: bounding.height }\n ]\n };\n };\n YAxisView.prototype.createTickLines = function (ticks, bounding, styles) {\n var yAxis = this.getAxis();\n var axisLineStyles = styles.axisLine;\n var tickLineStyles = styles.tickLine;\n var startX = 0;\n var endX = 0;\n if (yAxis.isFromZero()) {\n startX = 0;\n if (axisLineStyles.show) {\n startX += axisLineStyles.size;\n }\n endX = startX + tickLineStyles.length;\n }\n else {\n startX = bounding.width;\n if (axisLineStyles.show) {\n startX -= axisLineStyles.size;\n }\n endX = startX - tickLineStyles.length;\n }\n return ticks.map(function (tick) { return ({\n coordinates: [\n { x: startX, y: tick.coord },\n { x: endX, y: tick.coord }\n ]\n }); });\n };\n YAxisView.prototype.createTickTexts = function (ticks, bounding, styles) {\n var yAxis = this.getAxis();\n var axisLineStyles = styles.axisLine;\n var tickLineStyles = styles.tickLine;\n var tickTextStyles = styles.tickText;\n var x = 0;\n if (yAxis.isFromZero()) {\n x = tickTextStyles.marginStart;\n if (axisLineStyles.show) {\n x += axisLineStyles.size;\n }\n if (tickLineStyles.show) {\n x += tickLineStyles.length;\n }\n }\n else {\n x = bounding.width - tickTextStyles.marginEnd;\n if (axisLineStyles.show) {\n x -= axisLineStyles.size;\n }\n if (tickLineStyles.show) {\n x -= tickLineStyles.length;\n }\n }\n var textAlign = this.getAxis().isFromZero() ? 'left' : 'right';\n return ticks.map(function (tick) { return ({\n x: x,\n y: tick.coord,\n text: tick.text,\n align: textAlign,\n baseline: 'middle'\n }); });\n };\n return YAxisView;\n}(AxisView));\n\n/**\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n\n * http://www.apache.org/licenses/LICENSE-2.0\n\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar YAxisWidget = /** @class */ (function (_super) {\n __extends(YAxisWidget, _super);\n function YAxisWidget(rootContainer, pane, yAxis) {\n var _this = _super.call(this, rootContainer, pane) || this;\n _this._yAxisView = new YAxisView(_this);\n _this._candleLastPriceLabelView = new CandleLastPriceLabelView(_this);\n _this._indicatorLastValueView = new IndicatorLastValueView(_this);\n _this._overlayYAxisView = new OverlayYAxisView(_this);\n _this._crosshairHorizontalLabelView = new CrosshairHorizontalLabelView(_this);\n _this._yAxis = yAxis;\n _this.setCursor('ns-resize');\n _this.addChild(_this._overlayYAxisView);\n return _this;\n }\n YAxisWidget.prototype.getAxisComponent = function () {\n return this._yAxis;\n };\n YAxisWidget.prototype.getName = function () {\n return WidgetNameConstants.Y_AXIS;\n };\n YAxisWidget.prototype.updateMain = function (ctx) {\n this._yAxisView.draw(ctx);\n var pane = this.getPane();\n var isCandleLastPriceLabelVisibleYAxis = pane.isDefaultYAxis(this._yAxis.id) || pane.isManualYAxis(this._yAxis.id);\n if (isCandleLastPriceLabelVisibleYAxis && this.getAxisComponent().isInCandle()) {\n this._candleLastPriceLabelView.draw(ctx);\n }\n this._indicatorLastValueView.draw(ctx);\n };\n YAxisWidget.prototype.updateOverlay = function (ctx) {\n this._overlayYAxisView.draw(ctx);\n this._crosshairHorizontalLabelView.draw(ctx);\n };\n return YAxisWidget;\n}(DrawWidget));\n\n/**\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n\n * http://www.apache.org/licenses/LICENSE-2.0\n\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar Pane = /** @class */ (function () {\n function Pane(chart, id) {\n this._bounding = createDefaultBounding();\n this._chart = chart;\n this._id = id;\n this._container = createDom('div', {\n width: '100%',\n margin: '0',\n padding: '0',\n position: 'relative',\n overflow: 'hidden',\n boxSizing: 'border-box'\n });\n }\n Pane.prototype.getContainer = function () {\n return this._container;\n };\n Pane.prototype.getId = function () {\n return this._id;\n };\n Pane.prototype.getChart = function () {\n return this._chart;\n };\n Pane.prototype.getBounding = function () {\n return this._bounding;\n };\n Pane.prototype.update = function (level) {\n if (this._bounding.height !== this._container.clientHeight) {\n this._container.style.height = \"\".concat(this._bounding.height, \"px\");\n }\n this.updateImp(level !== null && level !== void 0 ? level : 3 /* UpdateLevel.Drawer */, this._container, this._bounding);\n };\n return Pane;\n}());\n\n/**\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n\n * http://www.apache.org/licenses/LICENSE-2.0\n\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar DrawPane = /** @class */ (function (_super) {\n __extends(DrawPane, _super);\n function DrawPane(chart, options) {\n var _this = _super.call(this, chart, options.id) || this;\n _this._yAxisWidgets = new Map();\n _this._yAxisComponents = new Map();\n _this._manualYAxisIds = new Set();\n _this._defaultYAxisId = null;\n _this._yAxesBounding = {};\n var container = _this.getContainer();\n _this._mainWidget = _this.createMainWidget(container);\n _this._options = options;\n return _this;\n }\n DrawPane.prototype.setOptions = function (options) {\n merge(this._options, options);\n if (isNumber(options.height) && options.height > 0) {\n this.setBounding({ height: this._options.height });\n }\n return this;\n };\n DrawPane.prototype.setAxisCursor = function (scrollZoomEnabled, yAxisId) {\n var _a, _b;\n var container = null;\n var cursor = 'default';\n if (this.getId() === PaneIdConstants.X_AXIS) {\n container = this.getMainWidget().getContainer();\n cursor = 'ew-resize';\n }\n else {\n container = (_b = (_a = this.getYAxisWidgetById(yAxisId)) === null || _a === void 0 ? void 0 : _a.getContainer()) !== null && _b !== void 0 ? _b : null;\n cursor = 'ns-resize';\n }\n if (!isValid(container) || !isBoolean(scrollZoomEnabled)) {\n return;\n }\n if (scrollZoomEnabled) {\n container.style.cursor = cursor;\n }\n else {\n container.style.cursor = 'default';\n }\n };\n DrawPane.prototype.createOrOverrideYAxis = function (override) {\n var _a, _b, _c, _d, _e;\n var axis = __assign(__assign({}, override), { paneId: this.getId() });\n var yAxisId = axis.id;\n var yAxisName = (_a = axis.name) !== null && _a !== void 0 ? _a : 'normal';\n var needWidget = (_b = axis.needWidget) !== null && _b !== void 0 ? _b : true;\n var yAxis = this._yAxisComponents.get(yAxisId);\n var shouldCreateYAxis = !isValid(yAxis) || (isValid(axis.name) && yAxis.name !== axis.name);\n if (shouldCreateYAxis) {\n (_c = this._yAxisWidgets.get(yAxisId)) === null || _c === void 0 ? void 0 : _c.destroy();\n this._yAxisWidgets.delete(yAxisId);\n yAxis = this.createYAxisComponent(yAxisName);\n yAxis.id = yAxisId;\n yAxis.paneId = this.getId();\n this._yAxisComponents.set(yAxisId, yAxis);\n (_d = this._defaultYAxisId) !== null && _d !== void 0 ? _d : (this._defaultYAxisId = yAxisId);\n if (needWidget) {\n var yAxisWidget = this.createYAxisWidget(this.getContainer(), yAxis);\n if (isValid(yAxisWidget)) {\n this._yAxisWidgets.set(yAxisId, yAxisWidget);\n }\n }\n }\n else if (isBoolean(axis.needWidget) && isValid(yAxis)) {\n var yAxisWidget = this._yAxisWidgets.get(yAxisId);\n if (axis.needWidget && !isValid(yAxisWidget)) {\n var newYAxisWidget = this.createYAxisWidget(this.getContainer(), yAxis);\n if (isValid(newYAxisWidget)) {\n this._yAxisWidgets.set(yAxisId, newYAxisWidget);\n }\n }\n else if (!axis.needWidget && isValid(yAxisWidget)) {\n yAxisWidget.destroy();\n this._yAxisWidgets.delete(yAxisId);\n }\n }\n if (!isValid(yAxis)) {\n throw new Error('create yAxis failed.');\n }\n yAxis.setAutoCalcTickFlag(true);\n yAxis.override(__assign(__assign({}, axis), { name: yAxisName }));\n this.setAxisCursor(yAxis.scrollZoomEnabled, yAxisId);\n // Inherit the pane's current geometry. Recreating the axis (e.g. via\n // `overrideYAxis({ name })`) destroys the old widget, and follow-up\n // layouts only measure width, so without this the new widget keeps\n // height 0 and the axis collapses (squashed bars, no ticks).\n var bounding = this.getBounding();\n (_e = this._yAxisWidgets.get(yAxisId)) === null || _e === void 0 ? void 0 : _e.setBounding({ height: bounding.height, top: bounding.top });\n return yAxis;\n };\n DrawPane.prototype.getOptions = function () {\n return this._options;\n };\n DrawPane.prototype.getYAxisComponents = function () {\n return Array.from(this._yAxisComponents.values());\n };\n DrawPane.prototype.getWidgetYAxisComponents = function () {\n var _this = this;\n return Array.from(this._yAxisWidgets.keys()).map(function (id) { return _this._yAxisComponents.get(id); });\n };\n DrawPane.prototype.hasYAxisComponent = function (yAxisId) {\n return this._yAxisComponents.has(yAxisId);\n };\n DrawPane.prototype.setManualYAxis = function (yAxisId, manual) {\n if (manual) {\n this._manualYAxisIds.add(yAxisId);\n }\n else {\n this._manualYAxisIds.delete(yAxisId);\n }\n };\n DrawPane.prototype.isManualYAxis = function (yAxisId) {\n return this._manualYAxisIds.has(yAxisId);\n };\n DrawPane.prototype.removeYAxis = function (yAxisId) {\n var _this = this;\n var _a;\n var yAxis = this._yAxisComponents.get(yAxisId);\n if (!isValid(yAxis)) {\n return false;\n }\n this._yAxisComponents.delete(yAxisId);\n this._manualYAxisIds.delete(yAxisId);\n if (this._defaultYAxisId === yAxisId) {\n this._defaultYAxisId = (_a = this._yAxisComponents.keys().next().value) !== null && _a !== void 0 ? _a : null;\n }\n var yAxisWidget = this._yAxisWidgets.get(yAxisId);\n if (isValid(yAxisWidget)) {\n yAxisWidget.destroy();\n this._yAxisWidgets.delete(yAxisId);\n }\n this._yAxesBounding = Object.keys(this._yAxesBounding).reduce(function (bounding, id) {\n if (id !== yAxisId) {\n bounding[id] = _this._yAxesBounding[id];\n }\n return bounding;\n }, {});\n return true;\n };\n DrawPane.prototype.getDefaultYAxisId = function () {\n return this._defaultYAxisId;\n };\n DrawPane.prototype.isDefaultYAxis = function (yAxisId) {\n return this._defaultYAxisId === yAxisId;\n };\n DrawPane.prototype.getYAxisComponentById = function (yAxisId) {\n var id = yAxisId !== null && yAxisId !== void 0 ? yAxisId : this.getDefaultYAxisId();\n return this._yAxisComponents.get(id);\n };\n DrawPane.prototype.getYAxisWidgetById = function (yAxisId) {\n var _a;\n var id = yAxisId !== null && yAxisId !== void 0 ? yAxisId : this.getDefaultYAxisId();\n return isValid(id) ? ((_a = this._yAxisWidgets.get(id)) !== null && _a !== void 0 ? _a : null) : null;\n };\n DrawPane.prototype.setYAxesBounding = function (bounding) {\n this._yAxesBounding = bounding;\n };\n DrawPane.prototype.setBounding = function (rootBounding, mainBounding, leftYAxisBounding, rightYAxisBounding) {\n var _this = this;\n merge(this.getBounding(), rootBounding);\n var contentBounding = {};\n if (isValid(rootBounding.height)) {\n contentBounding.height = rootBounding.height;\n }\n if (isValid(rootBounding.top)) {\n contentBounding.top = rootBounding.top;\n }\n this._mainWidget.setBounding(contentBounding);\n var mainBoundingValid = isValid(mainBounding);\n if (mainBoundingValid) {\n this._mainWidget.setBounding(mainBounding);\n }\n if (this._yAxisWidgets.size > 0) {\n this._yAxisWidgets.forEach(function (yAxisWidget, yAxisId) {\n var _a, _b, _c, _d;\n yAxisWidget.setBounding(contentBounding);\n if (isValid(_this._yAxesBounding[yAxisId])) {\n yAxisWidget.setBounding(_this._yAxesBounding[yAxisId]);\n return;\n }\n var yAxis = _this.getYAxisComponentById(yAxisId);\n if (yAxis.position === 'left') {\n if (isValid(leftYAxisBounding)) {\n yAxisWidget.setBounding(__assign(__assign({}, leftYAxisBounding), { left: 0 }));\n }\n }\n else {\n if (isValid(rightYAxisBounding)) {\n yAxisWidget.setBounding(rightYAxisBounding);\n if (mainBoundingValid) {\n yAxisWidget.setBounding({\n left: ((_a = mainBounding.left) !== null && _a !== void 0 ? _a : 0) + ((_b = mainBounding.width) !== null && _b !== void 0 ? _b : 0) + ((_c = mainBounding.right) !== null && _c !== void 0 ? _c : 0) - ((_d = rightYAxisBounding.width) !== null && _d !== void 0 ? _d : 0)\n });\n }\n }\n }\n });\n }\n return this;\n };\n DrawPane.prototype.getMainWidget = function () {\n return this._mainWidget;\n };\n DrawPane.prototype.getYAxisWidget = function () {\n return this.getYAxisWidgetById();\n };\n DrawPane.prototype.getYAxisWidgets = function () {\n return Array.from(this._yAxisWidgets.values());\n };\n DrawPane.prototype.updateImp = function (level) {\n this._mainWidget.update(level);\n this._yAxisWidgets.forEach(function (widget) {\n widget.update(level);\n });\n };\n DrawPane.prototype.destroy = function () {\n this._mainWidget.destroy();\n this._yAxisWidgets.forEach(function (widget) {\n widget.destroy();\n });\n };\n DrawPane.prototype.getImage = function (includeOverlay) {\n var _a = this.getBounding(), width = _a.width, height = _a.height;\n var canvas = createDom('canvas', {\n width: \"\".concat(width, \"px\"),\n height: \"\".concat(height, \"px\"),\n boxSizing: 'border-box'\n });\n var ctx = canvas.getContext('2d');\n var pixelRatio = getPixelRatio(canvas);\n canvas.width = width * pixelRatio;\n canvas.height = height * pixelRatio;\n ctx.scale(pixelRatio, pixelRatio);\n var mainBounding = this._mainWidget.getBounding();\n ctx.drawImage(this._mainWidget.getImage(includeOverlay), mainBounding.left, 0, mainBounding.width, mainBounding.height);\n this._yAxisWidgets.forEach(function (yAxisWidget) {\n var yAxisBounding = yAxisWidget.getBounding();\n ctx.drawImage(yAxisWidget.getImage(includeOverlay), yAxisBounding.left, 0, yAxisBounding.width, yAxisBounding.height);\n });\n return canvas;\n };\n DrawPane.prototype.createYAxisComponent = function (_name) {\n throw new Error('createYAxisComponent is not implemented.');\n };\n DrawPane.prototype.createYAxisWidget = function (_container, _yAxis) {\n return null;\n };\n return DrawPane;\n}(Pane));\n\n/**\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n\n * http://www.apache.org/licenses/LICENSE-2.0\n\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar IndicatorPane = /** @class */ (function (_super) {\n __extends(IndicatorPane, _super);\n function IndicatorPane() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n IndicatorPane.prototype.createYAxisComponent = function (name) {\n var YAxisClass = getYAxisClass(name !== null && name !== void 0 ? name : 'default');\n return new YAxisClass(this);\n };\n IndicatorPane.prototype.createMainWidget = function (container) {\n return new IndicatorWidget(container, this);\n };\n IndicatorPane.prototype.createYAxisWidget = function (container, yAxis) {\n return new YAxisWidget(container, this, yAxis);\n };\n return IndicatorPane;\n}(DrawPane));\n\n/**\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n\n * http://www.apache.org/licenses/LICENSE-2.0\n\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar CandlePane = /** @class */ (function (_super) {\n __extends(CandlePane, _super);\n function CandlePane() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n CandlePane.prototype.createMainWidget = function (container) {\n return new CandleWidget(container, this);\n };\n return CandlePane;\n}(IndicatorPane));\n\n/**\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n\n * http://www.apache.org/licenses/LICENSE-2.0\n\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nfunction throttle(func, wait) {\n var previous = 0;\n return function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var now = Date.now();\n if (now - previous > (wait )) {\n func.apply(this, args);\n previous = now;\n }\n };\n}\n// export function memoize<R1 = any, R2 = any> (func: (...args: any[]) => R1, resolver?: (...args: any[]) => R2): (...args: any[]) => R1 {\n// if (!isFunction(func) || (isValid(resolver) && !isFunction(resolver))) {\n// throw new TypeError('Expected a function')\n// }\n// const memoized = function (...args: any[]): any {\n// const key = isFunction(resolver) ? resolver.apply(this, args) : args[0]\n// const cache = memoized.cache\n// if (cache.has(key)) {\n// return cache.get(key)\n// }\n// const result = func.apply(this, args)\n// memoized.cache = cache.set(key, result) || cache\n// return result\n// }\n// memoized.cache = new (memoize.Cache || Map)()\n// return memoized\n// }\n// memoize.Cache = Map\n\n/**\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n\n * http://www.apache.org/licenses/LICENSE-2.0\n\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar SeparatorWidget = /** @class */ (function (_super) {\n __extends(SeparatorWidget, _super);\n function SeparatorWidget(rootContainer, pane) {\n var _this = _super.call(this, rootContainer, pane) || this;\n _this._dragFlag = false;\n _this._dragStartY = 0;\n _this._topPaneHeight = 0;\n _this._bottomPaneHeight = 0;\n _this._topPane = null;\n _this._bottomPane = null;\n _this._pressedMouseMoveEvent = throttle(_this._pressedTouchMouseMoveEvent, 20);\n _this.registerEvent('touchStartEvent', _this._mouseDownEvent.bind(_this))\n // @ts-ignore\n .registerEvent('touchMoveEvent', _this._pressedMouseMoveEvent.bind(_this))\n .registerEvent('touchEndEvent', _this._mouseUpEvent.bind(_this))\n .registerEvent('mouseDownEvent', _this._mouseDownEvent.bind(_this))\n .registerEvent('mouseUpEvent', _this._mouseUpEvent.bind(_this))\n // @ts-ignore\n .registerEvent('pressedMouseMoveEvent', _this._pressedMouseMoveEvent.bind(_this))\n .registerEvent('mouseEnterEvent', _this._mouseEnterEvent.bind(_this))\n .registerEvent('mouseLeaveEvent', _this._mouseLeaveEvent.bind(_this));\n return _this;\n }\n SeparatorWidget.prototype.getName = function () {\n return WidgetNameConstants.SEPARATOR;\n };\n SeparatorWidget.prototype._dragEnabled = function (topPane, bottomPane) {\n return topPane.getOptions().state === 'normal' && bottomPane.getOptions().state === 'normal' && bottomPane.getOptions().dragEnabled;\n };\n SeparatorWidget.prototype._findAdjustablePane = function (startIndex, step) {\n var drawPanes = this.getPane().getChart().getDrawPanes();\n for (var i = startIndex; i >= 0 && i < drawPanes.length; i += step) {\n var pane = drawPanes[i];\n if (pane.getId() !== PaneIdConstants.X_AXIS && pane.getOptions().state === 'normal') {\n return pane;\n }\n }\n return null;\n };\n SeparatorWidget.prototype._findDragPanes = function () {\n var currentPane = this.getPane();\n var drawPanes = currentPane.getChart().getDrawPanes();\n var topPaneIndex = drawPanes.indexOf(currentPane.getTopPane());\n var bottomPaneIndex = drawPanes.indexOf(currentPane.getBottomPane());\n if (topPaneIndex === -1 || bottomPaneIndex === -1) {\n return null;\n }\n var topPane = this._findAdjustablePane(topPaneIndex, -1);\n var bottomPane = this._findAdjustablePane(bottomPaneIndex, 1);\n if (isValid(topPane) && isValid(bottomPane) && this._dragEnabled(topPane, bottomPane)) {\n return { topPane: topPane, bottomPane: bottomPane };\n }\n return null;\n };\n SeparatorWidget.prototype._mouseDownEvent = function (event) {\n var dragPanes = this._findDragPanes();\n if (!isValid(dragPanes)) {\n this._topPane = null;\n this._bottomPane = null;\n return false;\n }\n this._topPane = dragPanes.topPane;\n this._bottomPane = dragPanes.bottomPane;\n this._dragFlag = true;\n this._dragStartY = event.pageY;\n this._topPaneHeight = this._topPane.getBounding().height;\n this._bottomPaneHeight = this._bottomPane.getBounding().height;\n return true;\n };\n SeparatorWidget.prototype._mouseUpEvent = function () {\n this._dragFlag = false;\n this._topPane = null;\n this._bottomPane = null;\n this._topPaneHeight = 0;\n this._bottomPaneHeight = 0;\n return this._mouseLeaveEvent();\n };\n SeparatorWidget.prototype._pressedTouchMouseMoveEvent = function (event) {\n var dragDistance = event.pageY - this._dragStartY;\n var isUpDrag = dragDistance < 0;\n if (isValid(this._topPane) && isValid(this._bottomPane)) {\n if (this._dragEnabled(this._topPane, this._bottomPane)) {\n var reducedPane = null;\n var increasedPane = null;\n var startDragReducedPaneHeight = 0;\n var startDragIncreasedPaneHeight = 0;\n if (isUpDrag) {\n reducedPane = this._topPane;\n increasedPane = this._bottomPane;\n startDragReducedPaneHeight = this._topPaneHeight;\n startDragIncreasedPaneHeight = this._bottomPaneHeight;\n }\n else {\n reducedPane = this._bottomPane;\n increasedPane = this._topPane;\n startDragReducedPaneHeight = this._bottomPaneHeight;\n startDragIncreasedPaneHeight = this._topPaneHeight;\n }\n var reducedPaneMinHeight = reducedPane.getOptions().minHeight;\n if (startDragReducedPaneHeight > reducedPaneMinHeight) {\n var reducedPaneHeight = Math.max(startDragReducedPaneHeight - Math.abs(dragDistance), reducedPaneMinHeight);\n var diffHeight = startDragReducedPaneHeight - reducedPaneHeight;\n reducedPane.setBounding({ height: reducedPaneHeight });\n var increasedPaneHeight = startDragIncreasedPaneHeight + diffHeight;\n increasedPane.setBounding({ height: increasedPaneHeight });\n reducedPane.setOptions({ height: reducedPaneHeight });\n increasedPane.setOptions({ height: increasedPaneHeight });\n var currentPane = this.getPane();\n var chart = currentPane.getChart();\n chart.getChartStore().executeAction('onPaneDrag', { paneId: currentPane.getId() });\n chart.layout({\n measureHeight: true,\n measureWidth: true,\n update: true,\n buildYAxisTick: true,\n forceBuildYAxisTick: true\n });\n }\n }\n }\n return true;\n };\n SeparatorWidget.prototype._mouseEnterEvent = function () {\n var dragPanes = this._findDragPanes();\n if (isValid(dragPanes)) {\n var chart = this.getPane().getChart();\n var styles = chart.getStyles().separator;\n this.getContainer().style.background = styles.activeBackgroundColor;\n return true;\n }\n return false;\n };\n SeparatorWidget.prototype._mouseLeaveEvent = function () {\n if (!this._dragFlag) {\n this.getContainer().style.background = 'transparent';\n return true;\n }\n return false;\n };\n SeparatorWidget.prototype.createContainer = function () {\n return createDom('div', {\n width: '100%',\n height: \"\".concat(REAL_SEPARATOR_HEIGHT, \"px\"),\n margin: '0',\n padding: '0',\n position: 'absolute',\n top: '-3px',\n zIndex: '20',\n boxSizing: 'border-box',\n cursor: 'ns-resize'\n });\n };\n SeparatorWidget.prototype.updateImp = function (container, _bounding, level) {\n if (level === 4 /* UpdateLevel.All */ || level === 2 /* UpdateLevel.Separator */) {\n var styles = this.getPane().getChart().getStyles().separator;\n container.style.top = \"\".concat(-Math.floor((REAL_SEPARATOR_HEIGHT - styles.size) / 2), \"px\");\n container.style.height = \"\".concat(REAL_SEPARATOR_HEIGHT, \"px\");\n }\n };\n return SeparatorWidget;\n}(Widget));\n\n/**\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n\n * http://www.apache.org/licenses/LICENSE-2.0\n\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar SeparatorPane = /** @class */ (function (_super) {\n __extends(SeparatorPane, _super);\n function SeparatorPane(chart, id, topPane, bottomPane) {\n var _this = _super.call(this, chart, id) || this;\n _this.getContainer().style.overflow = '';\n _this._topPane = topPane;\n _this._bottomPane = bottomPane;\n _this._separatorWidget = new SeparatorWidget(_this.getContainer(), _this);\n return _this;\n }\n SeparatorPane.prototype.setBounding = function (rootBounding) {\n merge(this.getBounding(), rootBounding);\n return this;\n };\n SeparatorPane.prototype.getTopPane = function () {\n return this._topPane;\n };\n SeparatorPane.prototype.setTopPane = function (pane) {\n this._topPane = pane;\n return this;\n };\n SeparatorPane.prototype.getBottomPane = function () {\n return this._bottomPane;\n };\n SeparatorPane.prototype.setBottomPane = function (pane) {\n this._bottomPane = pane;\n return this;\n };\n SeparatorPane.prototype.getWidget = function () {\n return this._separatorWidget;\n };\n SeparatorPane.prototype.getImage = function (_includeOverlay) {\n var _a = this.getBounding(), width = _a.width, height = _a.height;\n var styles = this.getChart().getStyles().separator;\n var canvas = createDom('canvas', {\n width: \"\".concat(width, \"px\"),\n height: \"\".concat(height, \"px\"),\n boxSizing: 'border-box'\n });\n var ctx = canvas.getContext('2d');\n var pixelRatio = getPixelRatio(canvas);\n canvas.width = width * pixelRatio;\n canvas.height = height * pixelRatio;\n ctx.scale(pixelRatio, pixelRatio);\n ctx.fillStyle = styles.color;\n ctx.fillRect(0, 0, width, height);\n return canvas;\n };\n SeparatorPane.prototype.updateImp = function (level, container, bounding) {\n if (level === 4 /* UpdateLevel.All */ || level === 2 /* UpdateLevel.Separator */) {\n var styles = this.getChart().getStyles().separator;\n container.style.backgroundColor = styles.color;\n container.style.height = \"\".concat(bounding.height, \"px\");\n container.style.marginLeft = \"\".concat(bounding.left, \"px\");\n container.style.width = \"\".concat(bounding.width, \"px\");\n this._separatorWidget.update(level);\n }\n };\n return SeparatorPane;\n}(Pane));\n\n/**\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n\n * http://www.apache.org/licenses/LICENSE-2.0\n\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar XAxisImp = /** @class */ (function (_super) {\n __extends(XAxisImp, _super);\n function XAxisImp(parent, xAxis) {\n var _this = _super.call(this, parent) || this;\n _this.override(xAxis);\n return _this;\n }\n XAxisImp.prototype.override = function (xAxis) {\n var name = xAxis.name, scrollZoomEnabled = xAxis.scrollZoomEnabled, createTicks = xAxis.createTicks;\n if (!isString(this.name) && isString(name)) {\n this.name = name;\n }\n this.scrollZoomEnabled = scrollZoomEnabled !== null && scrollZoomEnabled !== void 0 ? scrollZoomEnabled : this.scrollZoomEnabled;\n this.createTicks = createTicks !== null && createTicks !== void 0 ? createTicks : this.createTicks;\n };\n XAxisImp.prototype.createRangeImp = function () {\n var chartStore = this.getParent().getChart().getChartStore();\n var visibleDataRange = chartStore.getVisibleRange();\n var realFrom = visibleDataRange.realFrom, realTo = visibleDataRange.realTo;\n var af = realFrom;\n var at = realTo;\n var diff = realTo - realFrom + 1;\n var range = {\n from: af,\n to: at,\n range: diff,\n realFrom: af,\n realTo: at,\n realRange: diff,\n displayFrom: af,\n displayTo: at,\n displayRange: diff\n };\n return range;\n };\n XAxisImp.prototype.createTicksImp = function () {\n var _a;\n var _b = this.getRange(), realFrom = _b.realFrom, realTo = _b.realTo, from = _b.from;\n var chartStore = this.getParent().getChart().getChartStore();\n var formatDate = chartStore.getInnerFormatter().formatDate;\n var period = chartStore.getPeriod();\n var ticks = [];\n var barSpace = chartStore.getBarSpace().bar;\n var textStyles = chartStore.getStyles().xAxis.tickText;\n var tickTextWidth = Math.max(calcTextWidth('YYYY-MM-DD HH:mm:ss', textStyles.size, textStyles.weight, textStyles.family), this.getBounding().width / TICK_COUNT);\n var tickBetweenBarCount = Math.ceil(tickTextWidth / barSpace);\n if (tickBetweenBarCount % 2 !== 0) {\n tickBetweenBarCount += 1;\n }\n var startDataIndex = Math.max(0, Math.floor(realFrom / tickBetweenBarCount) * tickBetweenBarCount);\n for (var i = startDataIndex; i < realTo; i += tickBetweenBarCount) {\n if (i >= from) {\n var timestamp = chartStore.dataIndexToTimestamp(i);\n if (isNumber(timestamp)) {\n ticks.push({\n coord: this.convertToPixel(i),\n value: timestamp,\n text: formatDate(timestamp, PeriodTypeXAxisFormat[(_a = period === null || period === void 0 ? void 0 : period.type) !== null && _a !== void 0 ? _a : 'day'], 'xAxis')\n });\n }\n }\n }\n if (isFunction(this.createTicks)) {\n return this.createTicks({\n range: this.getRange(),\n bounding: this.getBounding(),\n defaultTicks: ticks\n });\n }\n return ticks;\n };\n XAxisImp.prototype.getAutoSize = function () {\n var styles = this.getParent().getChart().getStyles();\n var xAxisStyles = styles.xAxis;\n var height = xAxisStyles.size;\n if (height !== 'auto') {\n return height;\n }\n var crosshairStyles = styles.crosshair;\n var xAxisHeight = 0;\n if (xAxisStyles.show) {\n if (xAxisStyles.axisLine.show) {\n xAxisHeight += xAxisStyles.axisLine.size;\n }\n if (xAxisStyles.tickLine.show) {\n xAxisHeight += xAxisStyles.tickLine.length;\n }\n if (xAxisStyles.tickText.show) {\n xAxisHeight += xAxisStyles.tickText.marginStart + xAxisStyles.tickText.marginEnd + xAxisStyles.tickText.size;\n }\n }\n var crosshairVerticalTextHeight = 0;\n if (crosshairStyles.show && crosshairStyles.vertical.show && crosshairStyles.vertical.text.show) {\n crosshairVerticalTextHeight += crosshairStyles.vertical.text.paddingTop + crosshairStyles.vertical.text.paddingBottom + crosshairStyles.vertical.text.borderSize * 2 + crosshairStyles.vertical.text.size;\n }\n return Math.max(xAxisHeight, crosshairVerticalTextHeight);\n };\n XAxisImp.prototype.getBounding = function () {\n return this.getParent().getMainWidget().getBounding();\n };\n XAxisImp.prototype.convertTimestampFromPixel = function (pixel) {\n var chartStore = this.getParent().getChart().getChartStore();\n var dataIndex = chartStore.coordinateToDataIndex(pixel);\n return chartStore.dataIndexToTimestamp(dataIndex);\n };\n XAxisImp.prototype.convertTimestampToPixel = function (timestamp) {\n var chartStore = this.getParent().getChart().getChartStore();\n var dataIndex = chartStore.timestampToDataIndex(timestamp);\n return chartStore.dataIndexToCoordinate(dataIndex);\n };\n XAxisImp.prototype.convertFromPixel = function (pixel) {\n return this.getParent().getChart().getChartStore().coordinateToDataIndex(pixel);\n };\n XAxisImp.prototype.convertToPixel = function (value) {\n return this.getParent().getChart().getChartStore().dataIndexToCoordinate(value);\n };\n XAxisImp.extend = function (template) {\n var Custom = /** @class */ (function (_super) {\n __extends(Custom, _super);\n function Custom(parent) {\n return _super.call(this, parent, template) || this;\n }\n return Custom;\n }(XAxisImp));\n return Custom;\n };\n return XAxisImp;\n}(AxisImp));\n\n/**\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n\n * http://www.apache.org/licenses/LICENSE-2.0\n\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar normal = {\n name: 'normal'\n};\n\n/**\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n\n * http://www.apache.org/licenses/LICENSE-2.0\n\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar xAxises = {\n normal: XAxisImp.extend(normal)\n};\nfunction registerXAxis(axis) {\n xAxises[axis.name] = XAxisImp.extend(axis);\n}\nfunction getXAxisClass(name) {\n var _a;\n return (_a = xAxises[name]) !== null && _a !== void 0 ? _a : xAxises.normal;\n}\n\n/**\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n\n * http://www.apache.org/licenses/LICENSE-2.0\n\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar CrosshairVerticalLabelView = /** @class */ (function (_super) {\n __extends(CrosshairVerticalLabelView, _super);\n function CrosshairVerticalLabelView() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n CrosshairVerticalLabelView.prototype.compare = function (crosshair) {\n return isValid(crosshair.timestamp);\n };\n CrosshairVerticalLabelView.prototype.getDirectionStyles = function (styles) {\n return styles.vertical;\n };\n CrosshairVerticalLabelView.prototype.getText = function (crosshair, chartStore) {\n var _a, _b;\n var timestamp = crosshair.timestamp;\n return chartStore.getInnerFormatter().formatDate(timestamp, PeriodTypeCrosshairTooltipFormat[(_b = (_a = chartStore.getPeriod()) === null || _a === void 0 ? void 0 : _a.type) !== null && _b !== void 0 ? _b : 'day'], 'crosshair');\n };\n CrosshairVerticalLabelView.prototype.getTextAttrs = function (text, textWidth, crosshair, bounding, _axis, styles) {\n var x = crosshair.realX;\n var optimalX = 0;\n var align = 'center';\n if (x - textWidth / 2 - styles.paddingLeft < 0) {\n optimalX = 0;\n align = 'left';\n }\n else if (x + textWidth / 2 + styles.paddingRight > bounding.width) {\n optimalX = bounding.width;\n align = 'right';\n }\n else {\n optimalX = x;\n }\n return { x: optimalX, y: 0, text: text, align: align, baseline: 'top' };\n };\n return CrosshairVerticalLabelView;\n}(CrosshairHorizontalLabelView));\n\n/**\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n\n * http://www.apache.org/licenses/LICENSE-2.0\n\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar OverlayXAxisView = /** @class */ (function (_super) {\n __extends(OverlayXAxisView, _super);\n function OverlayXAxisView() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n OverlayXAxisView.prototype.coordinateToPointTimestampDataIndexFlag = function () {\n return true;\n };\n OverlayXAxisView.prototype.coordinateToPointValueFlag = function () {\n return false;\n };\n OverlayXAxisView.prototype.getCompleteOverlays = function () {\n return this.getWidget().getPane().getChart().getChartStore().getOverlaysByPaneId();\n };\n OverlayXAxisView.prototype.getProgressOverlay = function () {\n var _a, _b;\n return (_b = (_a = this.getWidget().getPane().getChart().getChartStore().getProgressOverlayInfo()) === null || _a === void 0 ? void 0 : _a.overlay) !== null && _b !== void 0 ? _b : null;\n };\n OverlayXAxisView.prototype.getDefaultFigures = function (overlay, coordinates) {\n var _a;\n var figures = [];\n var widget = this.getWidget();\n var pane = widget.getPane();\n var chartStore = pane.getChart().getChartStore();\n var clickOverlayInfo = chartStore.getClickOverlayInfo();\n if (overlay.needDefaultXAxisFigure && overlay.id === ((_a = clickOverlayInfo.overlay) === null || _a === void 0 ? void 0 : _a.id)) {\n var leftX_1 = Number.MAX_SAFE_INTEGER;\n var rightX_1 = Number.MIN_SAFE_INTEGER;\n coordinates.forEach(function (coordinate, index) {\n leftX_1 = Math.min(leftX_1, coordinate.x);\n rightX_1 = Math.max(rightX_1, coordinate.x);\n var point = overlay.points[index];\n if (isNumber(point.timestamp)) {\n var text = chartStore.getInnerFormatter().formatDate(point.timestamp, 'YYYY-MM-DD HH:mm', 'crosshair');\n figures.push({ type: 'text', attrs: { x: coordinate.x, y: 0, text: text, align: 'center' }, ignoreEvent: true });\n }\n });\n if (coordinates.length > 1) {\n figures.unshift({ type: 'rect', attrs: { x: leftX_1, y: 0, width: rightX_1 - leftX_1, height: widget.getBounding().height }, ignoreEvent: true });\n }\n }\n return figures;\n };\n OverlayXAxisView.prototype.getFigures = function (o, coordinates) {\n var _a, _b;\n var widget = this.getWidget();\n var pane = widget.getPane();\n var chart = pane.getChart();\n var yAxis = pane.getYAxisComponentById();\n var xAxis = chart.getXAxisPane().getXAxisComponent();\n var bounding = widget.getBounding();\n return (_b = (_a = o.createXAxisFigures) === null || _a === void 0 ? void 0 : _a.call(o, { chart: chart, overlay: o, coordinates: coordinates, bounding: bounding, xAxis: xAxis, yAxis: yAxis })) !== null && _b !== void 0 ? _b : [];\n };\n return OverlayXAxisView;\n}(OverlayYAxisView));\n\n/**\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n\n * http://www.apache.org/licenses/LICENSE-2.0\n\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar XAxisView = /** @class */ (function (_super) {\n __extends(XAxisView, _super);\n function XAxisView() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n XAxisView.prototype.getAxis = function () {\n return this.getWidget().getPane().getXAxisComponent();\n };\n XAxisView.prototype.getAxisStyles = function (styles) {\n return styles.xAxis;\n };\n XAxisView.prototype.createAxisLine = function (bounding) {\n return {\n coordinates: [\n { x: 0, y: 0 },\n { x: bounding.width, y: 0 }\n ]\n };\n };\n XAxisView.prototype.createTickLines = function (ticks, _bounding, styles) {\n var tickLineStyles = styles.tickLine;\n var axisLineSize = styles.axisLine.size;\n return ticks.map(function (tick) { return ({\n coordinates: [\n { x: tick.coord, y: 0 },\n { x: tick.coord, y: axisLineSize + tickLineStyles.length }\n ]\n }); });\n };\n XAxisView.prototype.createTickTexts = function (ticks, _bounding, styles) {\n var tickTickStyles = styles.tickText;\n var axisLineSize = styles.axisLine.size;\n var tickLineLength = styles.tickLine.length;\n return ticks.map(function (tick) { return ({\n x: tick.coord,\n y: axisLineSize + tickLineLength + tickTickStyles.marginStart,\n text: tick.text,\n align: 'center',\n baseline: 'top'\n }); });\n };\n return XAxisView;\n}(AxisView));\n\n/**\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n\n * http://www.apache.org/licenses/LICENSE-2.0\n\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar XAxisWidget = /** @class */ (function (_super) {\n __extends(XAxisWidget, _super);\n function XAxisWidget(rootContainer, pane) {\n var _this = _super.call(this, rootContainer, pane) || this;\n _this._xAxisView = new XAxisView(_this);\n _this._overlayXAxisView = new OverlayXAxisView(_this);\n _this._crosshairVerticalLabelView = new CrosshairVerticalLabelView(_this);\n _this.setCursor('ew-resize');\n _this.addChild(_this._overlayXAxisView);\n return _this;\n }\n XAxisWidget.prototype.getName = function () {\n return WidgetNameConstants.X_AXIS;\n };\n XAxisWidget.prototype.updateMain = function (ctx) {\n this._xAxisView.draw(ctx);\n };\n XAxisWidget.prototype.updateOverlay = function (ctx) {\n this._overlayXAxisView.draw(ctx);\n this._crosshairVerticalLabelView.draw(ctx);\n };\n return XAxisWidget;\n}(DrawWidget));\n\n/**\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n\n * http://www.apache.org/licenses/LICENSE-2.0\n\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar XAxisPane = /** @class */ (function (_super) {\n __extends(XAxisPane, _super);\n function XAxisPane(chart, options) {\n var _this = _super.call(this, chart, options) || this;\n _this.overrideXAxis({ name: 'normal', scrollZoomEnabled: true });\n return _this;\n }\n XAxisPane.prototype.setOptions = function (options) {\n return _super.prototype.setOptions.call(this, options);\n };\n XAxisPane.prototype.overrideXAxis = function (xAxis) {\n var axisName = xAxis.name;\n if (!isValid(this._xAxis) || (isValid(axisName) && this._xAxis.name !== axisName)) {\n this._xAxis = this.createXAxisComponent(axisName !== null && axisName !== void 0 ? axisName : 'normal');\n }\n this._xAxis.override(xAxis);\n this.setAxisCursor(this._xAxis.scrollZoomEnabled);\n return this;\n };\n XAxisPane.prototype.getXAxisComponent = function () {\n return this._xAxis;\n };\n XAxisPane.prototype.createXAxisComponent = function (name) {\n var XAxisClass = getXAxisClass(name);\n return new XAxisClass(this);\n };\n XAxisPane.prototype.createMainWidget = function (container) {\n return new XAxisWidget(container, this);\n };\n return XAxisPane;\n}(DrawPane));\n\n/**\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n\n * http://www.apache.org/licenses/LICENSE-2.0\n\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar Action = /** @class */ (function () {\n function Action() {\n this._callbacks = [];\n }\n Action.prototype.subscribe = function (callback) {\n var index = this._callbacks.indexOf(callback);\n if (index < 0) {\n this._callbacks.push(callback);\n }\n };\n Action.prototype.unsubscribe = function (callback) {\n if (isFunction(callback)) {\n var index = this._callbacks.indexOf(callback);\n if (index > -1) {\n this._callbacks.splice(index, 1);\n }\n }\n else {\n this._callbacks = [];\n }\n };\n Action.prototype.execute = function (data) {\n this._callbacks.forEach(function (callback) {\n callback(data);\n });\n };\n Action.prototype.isEmpty = function () {\n return this._callbacks.length === 0;\n };\n return Action;\n}());\n\n/**\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n\n * http://www.apache.org/licenses/LICENSE-2.0\n\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar Color = {\n RED: '#F92855',\n GREEN: '#2DC08E',\n WHITE: '#FFFFFF',\n GREY: '#76808F',\n BLUE: '#1677FF'\n};\nfunction getDefaultGridStyle() {\n return {\n show: true,\n horizontal: {\n show: true,\n size: 1,\n color: '#EDEDED',\n style: 'dashed',\n dashedValue: [2, 2]\n },\n vertical: {\n show: true,\n size: 1,\n color: '#EDEDED',\n style: 'dashed',\n dashedValue: [2, 2]\n }\n };\n}\n/**\n * Get default candle style\n * @type {{area: {backgroundColor: [{offset: number, color: string}, {offset: number, color: string}], lineColor: string, lineSize: number, value: string}, bar: {noChangeColor: string, upColor: string, downColor: string}, tooltip: {rect: {offsetTop: number, fillColor: string, borderColor: string, paddingBottom: number, borderRadius: number, paddingRight: number, borderSize: number, offsetLeft: number, paddingTop: number, paddingLeft: number, offsetRight: number}, showRule: string, values: null, showType: string, text: {marginRight: number, size: number, color: string, weight: string, marginBottom: number, family: string, marginTop: number, marginLeft: number}, labels: string[]}, type: string, priceMark: {high: {textMargin: number, textSize: number, color: string, textFamily: string, show: boolean, textWeight: string}, last: {noChangeColor: string, upColor: string, line: {dashValue: number[], size: number, show: boolean, style: string}, show: boolean, text: {paddingBottom: number, size: number, color: string, paddingRight: number, show: boolean, weight: string, paddingTop: number, family: string, paddingLeft: number}, downColor: string}, low: {textMargin: number, textSize: number, color: string, textFamily: string, show: boolean, textWeight: string}, show: boolean}}}\n */\nfunction getDefaultCandleStyle() {\n var highLow = {\n show: true,\n color: Color.GREY,\n textOffset: 5,\n textSize: 10,\n textFamily: 'Helvetica Neue',\n textWeight: 'normal'\n };\n return {\n type: 'candle_solid',\n bar: {\n compareRule: 'current_open',\n upColor: Color.GREEN,\n downColor: Color.RED,\n noChangeColor: Color.GREY,\n upBorderColor: Color.GREEN,\n downBorderColor: Color.RED,\n noChangeBorderColor: Color.GREY,\n upWickColor: Color.GREEN,\n downWickColor: Color.RED,\n noChangeWickColor: Color.GREY\n },\n area: {\n lineSize: 2,\n lineColor: Color.BLUE,\n smooth: false,\n value: 'close',\n backgroundColor: [\n {\n offset: 0,\n color: hexToRgb(Color.BLUE, 0.01)\n },\n {\n offset: 1,\n color: hexToRgb(Color.BLUE, 0.2)\n }\n ],\n point: {\n show: true,\n color: Color.BLUE,\n radius: 4,\n rippleColor: hexToRgb(Color.BLUE, 0.3),\n rippleRadius: 8,\n animation: true,\n animationDuration: 1000\n }\n },\n priceMark: {\n show: true,\n high: __assign({}, highLow),\n low: __assign({}, highLow),\n last: {\n show: true,\n compareRule: 'current_open',\n upColor: Color.GREEN,\n downColor: Color.RED,\n noChangeColor: Color.GREY,\n line: {\n show: true,\n style: 'dashed',\n dashedValue: [4, 4],\n size: 1\n },\n text: {\n show: true,\n style: 'fill',\n size: 12,\n paddingLeft: 4,\n paddingTop: 4,\n paddingRight: 4,\n paddingBottom: 4,\n borderColor: 'transparent',\n borderStyle: 'solid',\n borderSize: 0,\n borderDashedValue: [2, 2],\n color: Color.WHITE,\n family: 'Helvetica Neue',\n weight: 'normal',\n borderRadius: 2\n },\n extendTexts: []\n }\n },\n tooltip: {\n offsetLeft: 4,\n offsetTop: 6,\n offsetRight: 4,\n offsetBottom: 6,\n showRule: 'always',\n showType: 'standard',\n rect: {\n position: 'fixed',\n paddingLeft: 4,\n paddingRight: 4,\n paddingTop: 4,\n paddingBottom: 4,\n offsetLeft: 4,\n offsetTop: 4,\n offsetRight: 4,\n offsetBottom: 4,\n borderRadius: 4,\n borderSize: 1,\n borderColor: '#F2F3F5',\n color: '#FEFEFE'\n },\n title: {\n show: true,\n size: 14,\n family: 'Helvetica Neue',\n weight: 'normal',\n color: Color.GREY,\n marginLeft: 8,\n marginTop: 4,\n marginRight: 8,\n marginBottom: 4,\n template: '{ticker} · {period}'\n },\n legend: {\n size: 12,\n family: 'Helvetica Neue',\n weight: 'normal',\n color: Color.GREY,\n marginLeft: 8,\n marginTop: 4,\n marginRight: 8,\n marginBottom: 4,\n defaultValue: 'n/a',\n template: [\n { title: 'time', value: '{time}' },\n { title: 'open', value: '{open}' },\n { title: 'high', value: '{high}' },\n { title: 'low', value: '{low}' },\n { title: 'close', value: '{close}' },\n { title: 'volume', value: '{volume}' }\n ]\n },\n features: []\n }\n };\n}\n/**\n * Get default indicator style\n */\nfunction getDefaultIndicatorStyle() {\n var alphaGreen = hexToRgb(Color.GREEN, 0.7);\n var alphaRed = hexToRgb(Color.RED, 0.7);\n return {\n ohlc: {\n compareRule: 'current_open',\n upColor: alphaGreen,\n downColor: alphaRed,\n noChangeColor: Color.GREY\n },\n bars: [\n {\n style: 'fill',\n borderStyle: 'solid',\n borderSize: 1,\n borderDashedValue: [2, 2],\n upColor: alphaGreen,\n downColor: alphaRed,\n noChangeColor: Color.GREY\n }\n ],\n lines: ['#FF9600', '#935EBD', Color.BLUE, '#E11D74', '#01C5C4'].map(function (color) { return ({\n style: 'solid',\n smooth: false,\n size: 1,\n dashedValue: [2, 2],\n color: color\n }); }),\n circles: [\n {\n style: 'fill',\n borderStyle: 'solid',\n borderSize: 1,\n borderDashedValue: [2, 2],\n upColor: alphaGreen,\n downColor: alphaRed,\n noChangeColor: Color.GREY\n }\n ],\n texts: [\n {\n paddingLeft: 0,\n paddingTop: 0,\n paddingRight: 0,\n paddingBottom: 0,\n style: 'fill',\n size: 12,\n color: Color.BLUE,\n family: 'Helvetica Neue',\n weight: 'normal',\n borderStyle: 'solid',\n borderDashedValue: [2, 2],\n borderSize: 0,\n borderColor: 'transparent',\n borderRadius: 0,\n backgroundColor: 'transparent'\n }\n ],\n lastValueMark: {\n show: false,\n text: {\n show: false,\n style: 'fill',\n color: Color.WHITE,\n size: 12,\n family: 'Helvetica Neue',\n weight: 'normal',\n borderStyle: 'solid',\n borderColor: 'transparent',\n borderSize: 0,\n borderDashedValue: [2, 2],\n paddingLeft: 4,\n paddingTop: 4,\n paddingRight: 4,\n paddingBottom: 4,\n borderRadius: 2\n }\n },\n tooltip: {\n offsetLeft: 4,\n offsetTop: 6,\n offsetRight: 4,\n offsetBottom: 6,\n showRule: 'always',\n showType: 'standard',\n title: {\n show: true,\n showName: true,\n showParams: true,\n size: 12,\n family: 'Helvetica Neue',\n weight: 'normal',\n color: Color.GREY,\n marginLeft: 8,\n marginTop: 4,\n marginRight: 8,\n marginBottom: 4\n },\n legend: {\n size: 12,\n family: 'Helvetica Neue',\n weight: 'normal',\n color: Color.GREY,\n marginLeft: 8,\n marginTop: 4,\n marginRight: 8,\n marginBottom: 4,\n defaultValue: 'n/a'\n },\n features: []\n }\n };\n}\nfunction getDefaultAxisStyle() {\n return {\n show: true,\n size: 'auto',\n axisLine: {\n show: true,\n color: '#DDDDDD',\n size: 1\n },\n tickText: {\n show: true,\n color: Color.GREY,\n size: 12,\n family: 'Helvetica Neue',\n weight: 'normal',\n marginStart: 4,\n marginEnd: 6\n },\n tickLine: {\n show: true,\n size: 1,\n length: 3,\n color: '#DDDDDD'\n }\n };\n}\nfunction getDefaultCrosshairStyle() {\n return {\n show: true,\n horizontal: {\n show: true,\n line: {\n show: true,\n style: 'dashed',\n dashedValue: [4, 2],\n size: 1,\n color: Color.GREY\n },\n text: {\n show: true,\n style: 'fill',\n color: Color.WHITE,\n size: 12,\n family: 'Helvetica Neue',\n weight: 'normal',\n borderStyle: 'solid',\n borderDashedValue: [2, 2],\n borderSize: 1,\n borderColor: Color.GREY,\n borderRadius: 2,\n paddingLeft: 4,\n paddingRight: 4,\n paddingTop: 4,\n paddingBottom: 4,\n backgroundColor: Color.GREY\n },\n features: []\n },\n vertical: {\n show: true,\n line: {\n show: true,\n style: 'dashed',\n dashedValue: [4, 2],\n size: 1,\n color: Color.GREY\n },\n text: {\n show: true,\n style: 'fill',\n color: Color.WHITE,\n size: 12,\n family: 'Helvetica Neue',\n weight: 'normal',\n borderStyle: 'solid',\n borderDashedValue: [2, 2],\n borderSize: 1,\n borderColor: Color.GREY,\n borderRadius: 2,\n paddingLeft: 4,\n paddingRight: 4,\n paddingTop: 4,\n paddingBottom: 4,\n backgroundColor: Color.GREY\n }\n }\n };\n}\nfunction getDefaultOverlayStyle() {\n var pointBorderColor = hexToRgb(Color.BLUE, 0.35);\n var alphaBg = hexToRgb(Color.BLUE, 0.25);\n function text() {\n return {\n style: 'fill',\n color: Color.WHITE,\n size: 12,\n family: 'Helvetica Neue',\n weight: 'normal',\n borderStyle: 'solid',\n borderDashedValue: [2, 2],\n borderSize: 1,\n borderRadius: 2,\n borderColor: Color.BLUE,\n paddingLeft: 4,\n paddingRight: 4,\n paddingTop: 4,\n paddingBottom: 4,\n backgroundColor: Color.BLUE\n };\n }\n return {\n point: {\n color: Color.BLUE,\n borderColor: pointBorderColor,\n borderSize: 1,\n radius: 5,\n activeColor: Color.BLUE,\n activeBorderColor: pointBorderColor,\n activeBorderSize: 3,\n activeRadius: 5\n },\n line: {\n style: 'solid',\n smooth: false,\n color: Color.BLUE,\n size: 1,\n dashedValue: [2, 2]\n },\n rect: {\n style: 'fill',\n color: alphaBg,\n borderColor: Color.BLUE,\n borderSize: 1,\n borderRadius: 0,\n borderStyle: 'solid',\n borderDashedValue: [2, 2]\n },\n polygon: {\n style: 'fill',\n color: Color.BLUE,\n borderColor: Color.BLUE,\n borderSize: 1,\n borderStyle: 'solid',\n borderDashedValue: [2, 2]\n },\n circle: {\n style: 'fill',\n color: alphaBg,\n borderColor: Color.BLUE,\n borderSize: 1,\n borderStyle: 'solid',\n borderDashedValue: [2, 2]\n },\n arc: {\n style: 'solid',\n color: Color.BLUE,\n size: 1,\n dashedValue: [2, 2]\n },\n text: text()\n };\n}\nfunction getDefaultSeparatorStyle() {\n return {\n size: 1,\n color: '#DDDDDD',\n fill: true,\n activeBackgroundColor: hexToRgb(Color.BLUE, 0.08)\n };\n}\nfunction getDefaultStyles() {\n return {\n grid: getDefaultGridStyle(),\n candle: getDefaultCandleStyle(),\n indicator: getDefaultIndicatorStyle(),\n xAxis: getDefaultAxisStyle(),\n yAxis: getDefaultAxisStyle(),\n separator: getDefaultSeparatorStyle(),\n crosshair: getDefaultCrosshairStyle(),\n overlay: getDefaultOverlayStyle()\n };\n}\n\n/**\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n\n * http://www.apache.org/licenses/LICENSE-2.0\n\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar TaskScheduler = /** @class */ (function () {\n function TaskScheduler(callback) {\n this._holdingTasks = null;\n this._running = false;\n this._callback = callback;\n }\n TaskScheduler.prototype.add = function (tasks) {\n if (!this._running) {\n void this._runTask(tasks);\n }\n else {\n if (isValid(this._holdingTasks)) {\n this._holdingTasks = __assign(__assign({}, this._holdingTasks), tasks);\n }\n else {\n this._holdingTasks = tasks;\n }\n }\n };\n TaskScheduler.prototype._runTask = function (tasks) {\n return __awaiter(this, void 0, void 0, function () {\n var next;\n var _a;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n this._running = true;\n _b.label = 1;\n case 1:\n _b.trys.push([1, , 3, 4]);\n return [4 /*yield*/, Promise.all(Object.values(tasks))];\n case 2:\n _b.sent();\n return [3 /*break*/, 4];\n case 3:\n this._running = false;\n (_a = this._callback) === null || _a === void 0 ? void 0 : _a.call(this);\n if (isValid(this._holdingTasks)) {\n next = this._holdingTasks;\n void this._runTask(next);\n this._holdingTasks = null;\n }\n return [7 /*endfinally*/];\n case 4: return [2 /*return*/];\n }\n });\n });\n };\n TaskScheduler.prototype.clear = function () {\n this._holdingTasks = null;\n };\n return TaskScheduler;\n}());\n\n/**\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n\n * http://www.apache.org/licenses/LICENSE-2.0\n\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nfunction getDefaultVisibleRange() {\n return { from: 0, to: 0, realFrom: 0, realTo: 0 };\n}\n\n/**\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n\n * http://www.apache.org/licenses/LICENSE-2.0\n\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * brush overlay - freehand drawing with click and drag\n * Uses continuous drawing mode for smooth path creation\n */\nvar brush = {\n name: 'brush',\n totalStep: 2,\n drawingMode: 'continuous',\n needDefaultPointFigure: false,\n needDefaultXAxisFigure: false,\n needDefaultYAxisFigure: false,\n createPointFigures: function (_a) {\n var coordinates = _a.coordinates;\n if (coordinates.length < 2) {\n return [];\n }\n return [\n {\n type: 'line',\n attrs: { coordinates: coordinates },\n styles: {\n smooth: false,\n lineCap: 'round',\n lineJoin: 'round'\n }\n }\n ];\n }\n};\n\n/**\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n\n * http://www.apache.org/licenses/LICENSE-2.0\n\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar fibonacciLine = {\n name: 'fibonacciLine',\n totalStep: 3,\n needDefaultPointFigure: true,\n needDefaultXAxisFigure: true,\n needDefaultYAxisFigure: true,\n createPointFigures: function (_a) {\n var _b, _c, _d;\n var chart = _a.chart, coordinates = _a.coordinates, bounding = _a.bounding, overlay = _a.overlay, yAxis = _a.yAxis;\n var points = overlay.points;\n if (coordinates.length > 0) {\n var precision_1 = 0;\n if ((_b = yAxis === null || yAxis === void 0 ? void 0 : yAxis.isInCandle()) !== null && _b !== void 0 ? _b : true) {\n precision_1 = (_d = (_c = chart.getSymbol()) === null || _c === void 0 ? void 0 : _c.pricePrecision) !== null && _d !== void 0 ? _d : SymbolDefaultPrecisionConstants.PRICE;\n }\n else {\n var indicators = chart.getIndicators({ paneId: overlay.paneId });\n indicators.forEach(function (indicator) {\n precision_1 = Math.max(precision_1, indicator.precision);\n });\n }\n var lines_1 = [];\n var texts_1 = [];\n var startX_1 = 0;\n var endX_1 = bounding.width;\n if (coordinates.length > 1 && isNumber(points[0].value) && isNumber(points[1].value)) {\n var percents = [1, 0.786, 0.618, 0.5, 0.382, 0.236, 0];\n var yDif_1 = coordinates[0].y - coordinates[1].y;\n var valueDif_1 = points[0].value - points[1].value;\n percents.forEach(function (percent) {\n var _a;\n var y = coordinates[1].y + yDif_1 * percent;\n var value = chart.getDecimalFold().format(chart.getThousandsSeparator().format((((_a = points[1].value) !== null && _a !== void 0 ? _a : 0) + valueDif_1 * percent).toFixed(precision_1)));\n lines_1.push({\n coordinates: [\n { x: startX_1, y: y },\n { x: endX_1, y: y }\n ]\n });\n texts_1.push({\n x: startX_1,\n y: y,\n text: \"\".concat(value, \" (\").concat((percent * 100).toFixed(1), \"%)\"),\n baseline: 'bottom'\n });\n });\n }\n return [\n {\n type: 'line',\n attrs: lines_1\n },\n {\n type: 'text',\n isCheckEvent: false,\n attrs: texts_1\n }\n ];\n }\n return [];\n }\n};\n\n/**\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n\n * http://www.apache.org/licenses/LICENSE-2.0\n\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar horizontalRayLine = {\n name: 'horizontalRayLine',\n totalStep: 3,\n needDefaultPointFigure: true,\n needDefaultXAxisFigure: true,\n needDefaultYAxisFigure: true,\n createPointFigures: function (_a) {\n var coordinates = _a.coordinates, bounding = _a.bounding;\n var coordinate = { x: 0, y: coordinates[0].y };\n if (isValid(coordinates[1]) && coordinates[0].x < coordinates[1].x) {\n coordinate.x = bounding.width;\n }\n return [\n {\n type: 'line',\n attrs: { coordinates: [coordinates[0], coordinate] }\n }\n ];\n },\n performEventPressedMove: function (_a) {\n var points = _a.points, performPoint = _a.performPoint;\n points[0].value = performPoint.value;\n points[1].value = performPoint.value;\n },\n performEventMoveForDrawing: function (_a) {\n var currentStep = _a.currentStep, points = _a.points, performPoint = _a.performPoint;\n if (currentStep === 2) {\n points[0].value = performPoint.value;\n }\n }\n};\n\n/**\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n\n * http://www.apache.org/licenses/LICENSE-2.0\n\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar horizontalSegment = {\n name: 'horizontalSegment',\n totalStep: 3,\n needDefaultPointFigure: true,\n needDefaultXAxisFigure: true,\n needDefaultYAxisFigure: true,\n createPointFigures: function (_a) {\n var coordinates = _a.coordinates;\n var lines = [];\n if (coordinates.length === 2) {\n lines.push({ coordinates: coordinates });\n }\n return [\n {\n type: 'line',\n attrs: lines\n }\n ];\n },\n performEventPressedMove: function (_a) {\n var points = _a.points, performPoint = _a.performPoint;\n points[0].value = performPoint.value;\n points[1].value = performPoint.value;\n },\n performEventMoveForDrawing: function (_a) {\n var currentStep = _a.currentStep, points = _a.points, performPoint = _a.performPoint;\n if (currentStep === 2) {\n points[0].value = performPoint.value;\n }\n }\n};\n\n/**\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n\n * http://www.apache.org/licenses/LICENSE-2.0\n\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar horizontalStraightLine = {\n name: 'horizontalStraightLine',\n totalStep: 2,\n needDefaultPointFigure: true,\n needDefaultXAxisFigure: true,\n needDefaultYAxisFigure: true,\n createPointFigures: function (_a) {\n var coordinates = _a.coordinates, bounding = _a.bounding;\n return [\n {\n type: 'line',\n attrs: {\n coordinates: [\n {\n x: 0,\n y: coordinates[0].y\n },\n {\n x: bounding.width,\n y: coordinates[0].y\n }\n ]\n }\n }\n ];\n }\n};\n\n/**\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n\n * http://www.apache.org/licenses/LICENSE-2.0\n\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * 获取平行线\n * @param coordinates\n * @param bounding\n * @param extendParallelLineCount\n * @returns {Array}\n */\nfunction getParallelLines(coordinates, bounding, extendParallelLineCount) {\n var count = extendParallelLineCount !== null && extendParallelLineCount !== void 0 ? extendParallelLineCount : 0;\n var lines = [];\n if (coordinates.length > 1) {\n if (coordinates[0].x === coordinates[1].x) {\n var startY = 0;\n var endY = bounding.height;\n lines.push({\n coordinates: [\n { x: coordinates[0].x, y: startY },\n { x: coordinates[0].x, y: endY }\n ]\n });\n if (coordinates.length > 2) {\n lines.push({\n coordinates: [\n { x: coordinates[2].x, y: startY },\n { x: coordinates[2].x, y: endY }\n ]\n });\n var distance = coordinates[0].x - coordinates[2].x;\n for (var i = 0; i < count; i++) {\n var d = distance * (i + 1);\n lines.push({\n coordinates: [\n { x: coordinates[0].x + d, y: startY },\n { x: coordinates[0].x + d, y: endY }\n ]\n });\n }\n }\n }\n else {\n var startX = 0;\n var endX = bounding.width;\n var kb = getLinearSlopeIntercept(coordinates[0], coordinates[1]);\n var k = kb[0];\n var b = kb[1];\n lines.push({\n coordinates: [\n { x: startX, y: startX * k + b },\n { x: endX, y: endX * k + b }\n ]\n });\n if (coordinates.length > 2) {\n var b1 = coordinates[2].y - k * coordinates[2].x;\n lines.push({\n coordinates: [\n { x: startX, y: startX * k + b1 },\n { x: endX, y: endX * k + b1 }\n ]\n });\n var distance = b - b1;\n for (var i = 0; i < count; i++) {\n var b2 = b + distance * (i + 1);\n lines.push({\n coordinates: [\n { x: startX, y: startX * k + b2 },\n { x: endX, y: endX * k + b2 }\n ]\n });\n }\n }\n }\n }\n return lines;\n}\nvar parallelStraightLine = {\n name: 'parallelStraightLine',\n totalStep: 4,\n needDefaultPointFigure: true,\n needDefaultXAxisFigure: true,\n needDefaultYAxisFigure: true,\n createPointFigures: function (_a) {\n var coordinates = _a.coordinates, bounding = _a.bounding;\n return [\n {\n type: 'line',\n attrs: getParallelLines(coordinates, bounding)\n }\n ];\n }\n};\n\n/**\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n\n * http://www.apache.org/licenses/LICENSE-2.0\n\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar priceChannelLine = {\n name: 'priceChannelLine',\n totalStep: 4,\n needDefaultPointFigure: true,\n needDefaultXAxisFigure: true,\n needDefaultYAxisFigure: true,\n createPointFigures: function (_a) {\n var coordinates = _a.coordinates, bounding = _a.bounding;\n return [\n {\n type: 'line',\n attrs: getParallelLines(coordinates, bounding, 1)\n }\n ];\n }\n};\n\n/**\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n\n * http://www.apache.org/licenses/LICENSE-2.0\n\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar priceLine = {\n name: 'priceLine',\n totalStep: 2,\n needDefaultPointFigure: true,\n needDefaultXAxisFigure: true,\n needDefaultYAxisFigure: true,\n createPointFigures: function (_a) {\n var _b, _c, _d;\n var chart = _a.chart, coordinates = _a.coordinates, bounding = _a.bounding, overlay = _a.overlay, yAxis = _a.yAxis;\n var precision = 0;\n if ((_b = yAxis === null || yAxis === void 0 ? void 0 : yAxis.isInCandle()) !== null && _b !== void 0 ? _b : true) {\n precision = (_d = (_c = chart.getSymbol()) === null || _c === void 0 ? void 0 : _c.pricePrecision) !== null && _d !== void 0 ? _d : SymbolDefaultPrecisionConstants.PRICE;\n }\n else {\n var indicators = chart.getIndicators({ paneId: overlay.paneId });\n indicators.forEach(function (indicator) {\n precision = Math.max(precision, indicator.precision);\n });\n }\n var _e = overlay.points[0].value, value = _e === void 0 ? 0 : _e;\n return [\n {\n type: 'line',\n attrs: { coordinates: [coordinates[0], { x: bounding.width, y: coordinates[0].y }] }\n },\n {\n type: 'text',\n ignoreEvent: true,\n attrs: {\n x: coordinates[0].x,\n y: coordinates[0].y,\n text: chart.getDecimalFold().format(chart.getThousandsSeparator().format(value.toFixed(precision))),\n baseline: 'bottom'\n }\n }\n ];\n }\n};\n\n/**\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n\n * http://www.apache.org/licenses/LICENSE-2.0\n\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nfunction getRayLine(coordinates, bounding) {\n if (coordinates.length > 1) {\n var coordinate = { x: 0, y: 0 };\n if (coordinates[0].x === coordinates[1].x && coordinates[0].y !== coordinates[1].y) {\n if (coordinates[0].y < coordinates[1].y) {\n coordinate = {\n x: coordinates[0].x,\n y: bounding.height\n };\n }\n else {\n coordinate = {\n x: coordinates[0].x,\n y: 0\n };\n }\n }\n else if (coordinates[0].x > coordinates[1].x) {\n coordinate = {\n x: 0,\n y: getLinearYFromCoordinates(coordinates[0], coordinates[1], { x: 0, y: coordinates[0].y })\n };\n }\n else {\n coordinate = {\n x: bounding.width,\n y: getLinearYFromCoordinates(coordinates[0], coordinates[1], { x: bounding.width, y: coordinates[0].y })\n };\n }\n return { coordinates: [coordinates[0], coordinate] };\n }\n return [];\n}\nvar rayLine = {\n name: 'rayLine',\n totalStep: 3,\n needDefaultPointFigure: true,\n needDefaultXAxisFigure: true,\n needDefaultYAxisFigure: true,\n createPointFigures: function (_a) {\n var coordinates = _a.coordinates, bounding = _a.bounding;\n return [\n {\n type: 'line',\n attrs: getRayLine(coordinates, bounding)\n }\n ];\n }\n};\n\n/**\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n\n * http://www.apache.org/licenses/LICENSE-2.0\n\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar segment = {\n name: 'segment',\n totalStep: 3,\n needDefaultPointFigure: true,\n needDefaultXAxisFigure: true,\n needDefaultYAxisFigure: true,\n createPointFigures: function (_a) {\n var coordinates = _a.coordinates;\n if (coordinates.length === 2) {\n return [\n {\n type: 'line',\n attrs: { coordinates: coordinates }\n }\n ];\n }\n return [];\n }\n};\n\n/**\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n\n * http://www.apache.org/licenses/LICENSE-2.0\n\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar simpleAnnotation = {\n name: 'simpleAnnotation',\n totalStep: 2,\n styles: {\n line: { style: 'dashed' }\n },\n createPointFigures: function (_a) {\n var _b;\n var overlay = _a.overlay, coordinates = _a.coordinates;\n var text = '';\n if (isValid(overlay.extendData)) {\n if (!isFunction(overlay.extendData)) {\n text = ((_b = overlay.extendData) !== null && _b !== void 0 ? _b : '');\n }\n else {\n text = overlay.extendData(overlay);\n }\n }\n var startX = coordinates[0].x;\n var startY = coordinates[0].y - 6;\n var lineEndY = startY - 50;\n var arrowEndY = lineEndY - 5;\n return [\n {\n type: 'line',\n attrs: {\n coordinates: [\n { x: startX, y: startY },\n { x: startX, y: lineEndY }\n ]\n },\n ignoreEvent: true\n },\n {\n type: 'polygon',\n attrs: {\n coordinates: [\n { x: startX, y: lineEndY },\n { x: startX - 4, y: arrowEndY },\n { x: startX + 4, y: arrowEndY }\n ]\n },\n ignoreEvent: true\n },\n {\n type: 'text',\n attrs: { x: startX, y: arrowEndY, text: text, align: 'center', baseline: 'bottom' },\n ignoreEvent: true\n }\n ];\n }\n};\n\n/**\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n\n * http://www.apache.org/licenses/LICENSE-2.0\n\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar simpleTag = {\n name: 'simpleTag',\n totalStep: 2,\n styles: {\n line: { style: 'dashed' }\n },\n createPointFigures: function (_a) {\n var bounding = _a.bounding, coordinates = _a.coordinates;\n return ({\n type: 'line',\n attrs: {\n coordinates: [\n { x: 0, y: coordinates[0].y },\n { x: bounding.width, y: coordinates[0].y }\n ]\n },\n ignoreEvent: true\n });\n },\n createYAxisFigures: function (_a) {\n var _b, _c, _d, _e;\n var chart = _a.chart, overlay = _a.overlay, coordinates = _a.coordinates, bounding = _a.bounding, yAxis = _a.yAxis;\n var isFromZero = (_b = yAxis === null || yAxis === void 0 ? void 0 : yAxis.isFromZero()) !== null && _b !== void 0 ? _b : false;\n var textAlign = 'left';\n var x = 0;\n if (isFromZero) {\n textAlign = 'left';\n x = 0;\n }\n else {\n textAlign = 'right';\n x = bounding.width;\n }\n var text = '';\n if (isValid(overlay.extendData)) {\n if (!isFunction(overlay.extendData)) {\n text = ((_c = overlay.extendData) !== null && _c !== void 0 ? _c : '');\n }\n else {\n text = overlay.extendData(overlay);\n }\n }\n if (!isValid(text) && isNumber(overlay.points[0].value)) {\n text = formatPrecision(overlay.points[0].value, (_e = (_d = chart.getSymbol()) === null || _d === void 0 ? void 0 : _d.pricePrecision) !== null && _e !== void 0 ? _e : SymbolDefaultPrecisionConstants.PRICE);\n }\n return { type: 'text', attrs: { x: x, y: coordinates[0].y, text: text, align: textAlign, baseline: 'middle' } };\n }\n};\n\n/**\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n\n * http://www.apache.org/licenses/LICENSE-2.0\n\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar straightLine = {\n name: 'straightLine',\n totalStep: 3,\n needDefaultPointFigure: true,\n needDefaultXAxisFigure: true,\n needDefaultYAxisFigure: true,\n createPointFigures: function (_a) {\n var coordinates = _a.coordinates, bounding = _a.bounding;\n if (coordinates.length === 2) {\n if (coordinates[0].x === coordinates[1].x) {\n return [\n {\n type: 'line',\n attrs: {\n coordinates: [\n {\n x: coordinates[0].x,\n y: 0\n },\n {\n x: coordinates[0].x,\n y: bounding.height\n }\n ]\n }\n }\n ];\n }\n return [\n {\n type: 'line',\n attrs: {\n coordinates: [\n {\n x: 0,\n y: getLinearYFromCoordinates(coordinates[0], coordinates[1], { x: 0, y: coordinates[0].y })\n },\n {\n x: bounding.width,\n y: getLinearYFromCoordinates(coordinates[0], coordinates[1], { x: bounding.width, y: coordinates[0].y })\n }\n ]\n }\n }\n ];\n }\n return [];\n }\n};\n\n/**\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n\n * http://www.apache.org/licenses/LICENSE-2.0\n\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar verticalRayLine = {\n name: 'verticalRayLine',\n totalStep: 3,\n needDefaultPointFigure: true,\n needDefaultXAxisFigure: true,\n needDefaultYAxisFigure: true,\n createPointFigures: function (_a) {\n var coordinates = _a.coordinates, bounding = _a.bounding;\n if (coordinates.length === 2) {\n var coordinate = { x: coordinates[0].x, y: 0 };\n if (coordinates[0].y < coordinates[1].y) {\n coordinate.y = bounding.height;\n }\n return [\n {\n type: 'line',\n attrs: { coordinates: [coordinates[0], coordinate] }\n }\n ];\n }\n return [];\n },\n performEventPressedMove: function (_a) {\n var points = _a.points, performPoint = _a.performPoint;\n points[0].timestamp = performPoint.timestamp;\n points[0].dataIndex = performPoint.dataIndex;\n points[1].timestamp = performPoint.timestamp;\n points[1].dataIndex = performPoint.dataIndex;\n },\n performEventMoveForDrawing: function (_a) {\n var currentStep = _a.currentStep, points = _a.points, performPoint = _a.performPoint;\n if (currentStep === 2) {\n points[0].timestamp = performPoint.timestamp;\n points[0].dataIndex = performPoint.dataIndex;\n }\n }\n};\n\n/**\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n\n * http://www.apache.org/licenses/LICENSE-2.0\n\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar verticalSegment = {\n name: 'verticalSegment',\n totalStep: 3,\n needDefaultPointFigure: true,\n needDefaultXAxisFigure: true,\n needDefaultYAxisFigure: true,\n createPointFigures: function (_a) {\n var coordinates = _a.coordinates;\n if (coordinates.length === 2) {\n return [\n {\n type: 'line',\n attrs: { coordinates: coordinates }\n }\n ];\n }\n return [];\n },\n performEventPressedMove: function (_a) {\n var points = _a.points, performPoint = _a.performPoint;\n points[0].timestamp = performPoint.timestamp;\n points[0].dataIndex = performPoint.dataIndex;\n points[1].timestamp = performPoint.timestamp;\n points[1].dataIndex = performPoint.dataIndex;\n },\n performEventMoveForDrawing: function (_a) {\n var currentStep = _a.currentStep, points = _a.points, performPoint = _a.performPoint;\n if (currentStep === 2) {\n points[0].timestamp = performPoint.timestamp;\n points[0].dataIndex = performPoint.dataIndex;\n }\n }\n};\n\n/**\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n\n * http://www.apache.org/licenses/LICENSE-2.0\n\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar verticalStraightLine = {\n name: 'verticalStraightLine',\n totalStep: 2,\n needDefaultPointFigure: true,\n needDefaultXAxisFigure: true,\n needDefaultYAxisFigure: true,\n createPointFigures: function (_a) {\n var coordinates = _a.coordinates, bounding = _a.bounding;\n return [\n {\n type: 'line',\n attrs: {\n coordinates: [\n {\n x: coordinates[0].x,\n y: 0\n },\n {\n x: coordinates[0].x,\n y: bounding.height\n }\n ]\n }\n }\n ];\n }\n};\n\n/**\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n\n * http://www.apache.org/licenses/LICENSE-2.0\n\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar overlays = {};\nvar extensions = [fibonacciLine, horizontalRayLine, horizontalSegment, horizontalStraightLine, parallelStraightLine, priceChannelLine, priceLine, rayLine, segment, straightLine, verticalRayLine, verticalSegment, verticalStraightLine, simpleAnnotation, simpleTag, brush];\nextensions.forEach(function (template) {\n overlays[template.name] = OverlayImp.extend(template);\n});\nfunction registerOverlay(template) {\n // @ts-ignore\n overlays[template.name] = OverlayImp.extend(template);\n}\nfunction getOverlayInnerClass(name) {\n var _a;\n return (_a = overlays[name]) !== null && _a !== void 0 ? _a : null;\n}\nfunction getOverlayClass(name) {\n var _a;\n return (_a = overlays[name]) !== null && _a !== void 0 ? _a : null;\n}\nfunction getSupportedOverlays() {\n return Object.keys(overlays);\n}\n\n/**\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n\n * http://www.apache.org/licenses/LICENSE-2.0\n\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar dark = {\n grid: {\n horizontal: {\n color: '#292929'\n },\n vertical: {\n color: '#292929'\n }\n },\n candle: {\n priceMark: {\n high: {\n color: '#929AA5'\n },\n low: {\n color: '#929AA5'\n }\n },\n tooltip: {\n rect: {\n color: 'rgba(10, 10, 10, .6)',\n borderColor: 'rgba(10, 10, 10, .6)'\n },\n title: {\n color: '#929AA5'\n },\n legend: {\n color: '#929AA5'\n }\n }\n },\n indicator: {\n tooltip: {\n title: {\n color: '#929AA5'\n },\n legend: {\n color: '#929AA5'\n }\n }\n },\n xAxis: {\n axisLine: {\n color: '#333333'\n },\n tickText: {\n color: '#929AA5'\n },\n tickLine: {\n color: '#333333'\n }\n },\n yAxis: {\n axisLine: {\n color: '#333333'\n },\n tickText: {\n color: '#929AA5'\n },\n tickLine: {\n color: '#333333'\n }\n },\n separator: {\n color: '#333333'\n },\n crosshair: {\n horizontal: {\n line: {\n color: '#929AA5'\n },\n text: {\n borderColor: '#373a40',\n backgroundColor: '#373a40'\n }\n },\n vertical: {\n line: {\n color: '#929AA5'\n },\n text: {\n borderColor: '#373a40',\n backgroundColor: '#373a40'\n }\n }\n }\n};\n\n/**\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n\n * http://www.apache.org/licenses/LICENSE-2.0\n\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar light = {\n grid: {\n horizontal: {\n color: '#EDEDED'\n },\n vertical: {\n color: '#EDEDED'\n }\n },\n candle: {\n priceMark: {\n high: {\n color: '#76808F'\n },\n low: {\n color: '#76808F'\n }\n },\n tooltip: {\n rect: {\n color: '#FEFEFE',\n borderColor: '#F2F3F5'\n },\n title: {\n color: '#76808F'\n },\n legend: {\n color: '#76808F'\n }\n }\n },\n indicator: {\n tooltip: {\n title: {\n color: '#76808F'\n },\n legend: {\n color: '#76808F'\n }\n }\n },\n xAxis: {\n axisLine: {\n color: '#DDDDDD'\n },\n tickText: {\n color: '#76808F'\n },\n tickLine: {\n color: '#DDDDDD'\n }\n },\n yAxis: {\n axisLine: {\n color: '#DDDDDD'\n },\n tickText: {\n color: '#76808F'\n },\n tickLine: {\n color: '#DDDDDD'\n }\n },\n separator: {\n color: '#DDDDDD'\n },\n crosshair: {\n horizontal: {\n line: {\n color: '#76808F'\n },\n text: {\n borderColor: '#686D76',\n backgroundColor: '#686D76'\n }\n },\n vertical: {\n line: {\n color: '#76808F'\n },\n text: {\n borderColor: '#686D76',\n backgroundColor: '#686D76'\n }\n }\n }\n};\n\n/**\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n\n * http://www.apache.org/licenses/LICENSE-2.0\n\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar styles = {\n light: light,\n dark: dark\n};\nfunction registerStyles(name, ss) {\n styles[name] = ss;\n}\nfunction getStyles(name) {\n var _a;\n return (_a = styles[name]) !== null && _a !== void 0 ? _a : null;\n}\n\n/**\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n\n * http://www.apache.org/licenses/LICENSE-2.0\n\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar DEFAULT_BAR_SPACE = 10;\nvar DEFAULT_OFFSET_RIGHT_DISTANCE = 80;\nvar BAR_GAP_RATIO = 0.2;\nvar SCALE_MULTIPLIER = 10;\nvar StoreImp = /** @class */ (function () {\n function StoreImp(chart, options) {\n var _this = this;\n /**\n * Styles\n */\n this._styles = getDefaultStyles();\n /**\n * Custom api\n */\n this._formatter = {\n formatDate: function (_a) {\n var dateTimeFormat = _a.dateTimeFormat, timestamp = _a.timestamp, template = _a.template;\n return formatTimestampByTemplate(dateTimeFormat, timestamp, template);\n },\n formatBigNumber: formatBigNumber,\n formatExtendText: function (_) { return ''; }\n };\n /**\n * Inner formatter\n * @description Internal use only\n */\n this._innerFormatter = {\n formatDate: function (timestamp, template, type) { return _this._formatter.formatDate({ dateTimeFormat: _this._dateTimeFormat, timestamp: timestamp, template: template, type: type }); },\n formatBigNumber: function (value) { return _this._formatter.formatBigNumber(value); },\n formatExtendText: function (params) { return _this._formatter.formatExtendText(params); }\n };\n /**\n * Locale\n */\n this._locale = 'en-US';\n /**\n * Thousands separator\n */\n this._thousandsSeparator = {\n sign: ',',\n format: function (value) { return formatThousands(value, _this._thousandsSeparator.sign); }\n };\n /**\n * Decimal fold\n */\n this._decimalFold = {\n threshold: 3,\n format: function (value) { return formatFoldDecimal(value, _this._decimalFold.threshold); }\n };\n /**\n * Hotkey\n */\n this._hotKey = {\n enabled: true,\n exclude: []\n };\n /**\n * Symbol\n */\n this._symbol = null;\n /**\n * Period\n */\n this._period = null;\n /**\n * Data source\n */\n this._dataList = [];\n /**\n * Load more data callback\n */\n this._dataLoader = null;\n /**\n * Is loading data flag\n */\n this._loading = false;\n /**\n * Whether there are forward and backward more flag\n */\n this._dataLoadMore = { forward: false, backward: false };\n /**\n * Scale enabled flag\n */\n this._zoomEnabled = true;\n /**\n * Zoom anchor point flag\n */\n this._zoomAnchor = {\n main: 'cursor',\n xAxis: 'cursor'\n };\n /**\n * Scroll enabled flag\n */\n this._scrollEnabled = true;\n /**\n * Total space of drawing area\n */\n this._totalBarSpace = 0;\n /**\n * Space occupied by a single piece of data\n */\n this._barSpace = DEFAULT_BAR_SPACE;\n /**\n * Distance from the last data to the right of the drawing area\n */\n this._offsetRightDistance = DEFAULT_OFFSET_RIGHT_DISTANCE;\n /**\n * The number of bar to the right of the drawing area from the last data when scrolling starts\n */\n this._startLastBarRightSideDiffBarCount = 0;\n /**\n * Scroll limit role\n */\n this._scrollLimitRole = 'bar_count';\n /**\n * Scroll to the leftmost and rightmost visible bar\n */\n this._minVisibleBarCount = { left: 2, right: 2 };\n /**\n * Scroll to the leftmost and rightmost distance\n */\n this._maxOffsetDistance = { left: 50, right: 50 };\n /**\n * Start and end points of visible area data index\n */\n this._visibleRange = getDefaultVisibleRange();\n /**\n * Visible data array\n */\n this._visibleRangeDataList = [];\n /**\n * Visible highest lowest price data\n */\n this._visibleRangeHighLowPrice = [\n { x: 0, price: Number.MIN_SAFE_INTEGER },\n { x: 0, price: Number.MAX_SAFE_INTEGER }\n ];\n /**\n * Crosshair info\n */\n this._crosshair = {};\n /**\n * Actions\n */\n this._actions = new Map();\n /**\n * Indicator\n */\n this._indicators = new Map();\n /**\n * Overlay\n */\n this._overlays = new Map();\n /**\n * Overlay information in painting\n */\n this._progressOverlayInfo = null;\n this._lastPriceMarkExtendTextUpdateTimers = [];\n /**\n * Overlay information by the mouse pressed\n */\n this._pressedOverlayInfo = {\n paneId: '',\n overlay: null,\n figureType: 'none',\n figureIndex: -1,\n figure: null\n };\n /**\n * Overlay information by hover\n */\n this._hoverOverlayInfo = {\n paneId: '',\n overlay: null,\n figureType: 'none',\n figureIndex: -1,\n figure: null\n };\n /**\n * Overlay information by the mouse click\n */\n this._clickOverlayInfo = {\n paneId: '',\n overlay: null,\n figureType: 'none',\n figureIndex: -1,\n figure: null\n };\n /**\n * Default layout params\n */\n this._layoutOptions = {\n barSpaceLimit: {\n min: 1,\n max: 50\n },\n pane: {\n minHeight: 30,\n dragEnabled: true,\n order: 0,\n height: 100,\n state: 'normal'\n },\n yAxis: {\n reverse: false,\n inside: false,\n position: 'right',\n scrollZoomEnabled: true,\n needWidget: true,\n gap: {\n top: 0.2,\n bottom: 0.1\n }\n }\n };\n this._chart = chart;\n var _a = options !== null && options !== void 0 ? options : {}, styles = _a.styles, locale = _a.locale, timezone = _a.timezone, formatter = _a.formatter, thousandsSeparator = _a.thousandsSeparator, decimalFold = _a.decimalFold, zoomAnchor = _a.zoomAnchor, hotkey = _a.hotkey, layout = _a.layout;\n if (isValid(layout)) {\n merge(this._layoutOptions, layout);\n }\n this._calcOptimalBarSpace();\n this._lastBarRightSideDiffBarCount = this._offsetRightDistance / this._barSpace;\n if (isValid(styles)) {\n this.setStyles(styles);\n }\n if (isString(locale)) {\n this.setLocale(locale);\n }\n this.setTimezone(timezone !== null && timezone !== void 0 ? timezone : '');\n if (isValid(formatter)) {\n this.setFormatter(formatter);\n }\n if (isValid(thousandsSeparator)) {\n this.setThousandsSeparator(thousandsSeparator);\n }\n if (isValid(decimalFold)) {\n this.setDecimalFold(decimalFold);\n }\n if (isValid(zoomAnchor)) {\n this.setZoomAnchor(zoomAnchor);\n }\n if (isValid(hotkey)) {\n this.setHotkey(hotkey);\n }\n this._taskScheduler = new TaskScheduler(function () {\n _this._chart.layout({\n measureWidth: true,\n update: true,\n buildYAxisTick: true\n });\n });\n }\n StoreImp.prototype.setStyles = function (value) {\n var _this = this;\n var _a, _b, _c, _d, _e, _f;\n var styles = null;\n if (isString(value)) {\n styles = getStyles(value);\n }\n else {\n styles = value;\n }\n merge(this._styles, styles);\n // `candle.tooltip.custom` should override\n if (isArray((_c = (_b = (_a = styles === null || styles === void 0 ? void 0 : styles.candle) === null || _a === void 0 ? void 0 : _a.tooltip) === null || _b === void 0 ? void 0 : _b.legend) === null || _c === void 0 ? void 0 : _c.template)) {\n this._styles.candle.tooltip.legend.template = styles.candle.tooltip.legend.template;\n }\n if (isValid((_f = (_e = (_d = styles === null || styles === void 0 ? void 0 : styles.candle) === null || _d === void 0 ? void 0 : _d.priceMark) === null || _e === void 0 ? void 0 : _e.last) === null || _f === void 0 ? void 0 : _f.extendTexts)) {\n this._clearLastPriceMarkExtendTextUpdateTimer();\n var intervals_1 = [];\n this._styles.candle.priceMark.last.extendTexts.forEach(function (item) {\n var updateInterval = item.updateInterval;\n if (item.show && updateInterval > 0 && !intervals_1.includes(updateInterval)) {\n intervals_1.push(updateInterval);\n var timer = setInterval(function () {\n _this._chart.updatePane(0 /* UpdateLevel.Main */, PaneIdConstants.CANDLE);\n }, updateInterval);\n _this._lastPriceMarkExtendTextUpdateTimers.push(timer);\n }\n });\n }\n };\n StoreImp.prototype.getStyles = function () {\n return this._styles;\n };\n StoreImp.prototype.setFormatter = function (formatter) {\n merge(this._formatter, formatter);\n };\n StoreImp.prototype.getFormatter = function () {\n return this._formatter;\n };\n StoreImp.prototype.getInnerFormatter = function () {\n return this._innerFormatter;\n };\n StoreImp.prototype.setLocale = function (locale) {\n this._locale = locale;\n };\n StoreImp.prototype.getLocale = function () {\n return this._locale;\n };\n StoreImp.prototype.setTimezone = function (timezone) {\n if (!isValid(this._dateTimeFormat) || this.getTimezone() !== timezone) {\n var options = {\n hour12: false,\n year: 'numeric',\n month: '2-digit',\n day: '2-digit',\n hour: '2-digit',\n minute: '2-digit',\n second: '2-digit'\n };\n if (timezone.length > 0) {\n options.timeZone = timezone;\n }\n var dateTimeFormat = null;\n try {\n dateTimeFormat = new Intl.DateTimeFormat('en', options);\n }\n catch (_a) {\n logWarn('', '', 'Timezone is error!!!');\n }\n if (dateTimeFormat !== null) {\n this._dateTimeFormat = dateTimeFormat;\n }\n }\n };\n StoreImp.prototype.getTimezone = function () {\n return this._dateTimeFormat.resolvedOptions().timeZone;\n };\n StoreImp.prototype.getDateTimeFormat = function () {\n return this._dateTimeFormat;\n };\n StoreImp.prototype.setThousandsSeparator = function (thousandsSeparator) {\n merge(this._thousandsSeparator, thousandsSeparator);\n };\n StoreImp.prototype.getThousandsSeparator = function () {\n return this._thousandsSeparator;\n };\n StoreImp.prototype.setDecimalFold = function (decimalFold) {\n merge(this._decimalFold, decimalFold);\n };\n StoreImp.prototype.getDecimalFold = function () {\n return this._decimalFold;\n };\n StoreImp.prototype.setHotkey = function (hotkey) {\n merge(this._hotKey, hotkey);\n };\n StoreImp.prototype.getHotkey = function () {\n return this._hotKey;\n };\n StoreImp.prototype.getHotKey = function () {\n return this._hotKey;\n };\n StoreImp.prototype.setSymbol = function (symbol) {\n var _this = this;\n this.resetData(function () {\n // @ts-ignore\n _this._symbol = __assign(__assign({ pricePrecision: SymbolDefaultPrecisionConstants.PRICE, volumePrecision: SymbolDefaultPrecisionConstants.VOLUME }, _this._symbol), symbol);\n _this._synchronizeIndicatorSeriesPrecision();\n });\n };\n StoreImp.prototype.getSymbol = function () {\n return this._symbol;\n };\n StoreImp.prototype.setPeriod = function (period) {\n var _this = this;\n this.resetData(function () {\n _this._period = period;\n });\n };\n StoreImp.prototype.getPeriod = function () {\n return this._period;\n };\n StoreImp.prototype.getDataList = function () {\n return this._dataList;\n };\n StoreImp.prototype.getVisibleRangeDataList = function () {\n return this._visibleRangeDataList;\n };\n StoreImp.prototype.getVisibleRangeHighLowPrice = function () {\n return this._visibleRangeHighLowPrice;\n };\n StoreImp.prototype._addData = function (data, type, more) {\n var _a, _b;\n var success = false;\n var adjustFlag = false;\n if (isArray(data)) {\n var realMore = { backward: false, forward: false };\n if (isBoolean(more)) {\n realMore.backward = more;\n realMore.forward = more;\n }\n else {\n realMore.backward = (_a = more === null || more === void 0 ? void 0 : more.backward) !== null && _a !== void 0 ? _a : false;\n realMore.forward = (_b = more === null || more === void 0 ? void 0 : more.forward) !== null && _b !== void 0 ? _b : false;\n }\n switch (type) {\n case 'init': {\n this._clearData();\n this._dataList = data;\n this._dataLoadMore.backward = realMore.backward;\n this._dataLoadMore.forward = realMore.forward;\n this.setOffsetRightDistance(this._offsetRightDistance);\n adjustFlag = true;\n break;\n }\n case 'backward': {\n this._dataList = this._dataList.concat(data);\n this._dataLoadMore.backward = realMore.backward;\n this._lastBarRightSideDiffBarCount -= data.length;\n // scroll start LastBarRightSideDiffBarCount should sub data length\n this._startLastBarRightSideDiffBarCount -= data.length;\n adjustFlag = data.length > 0;\n break;\n }\n case 'forward': {\n this._dataList = data.concat(this._dataList);\n this._dataLoadMore.forward = realMore.forward;\n adjustFlag = data.length > 0;\n break;\n }\n }\n success = true;\n }\n else {\n var dataCount = this._dataList.length;\n // Determine where individual data should be added\n var timestamp = data.timestamp;\n var lastDataTimestamp = formatValue(this._dataList[dataCount - 1], 'timestamp', 0);\n if (timestamp > lastDataTimestamp) {\n this._dataList.push(data);\n var lastBarRightSideDiffBarCount = this.getLastBarRightSideDiffBarCount();\n if (lastBarRightSideDiffBarCount < 0) {\n this.setLastBarRightSideDiffBarCount(--lastBarRightSideDiffBarCount);\n }\n success = true;\n adjustFlag = true;\n }\n else if (timestamp === lastDataTimestamp) {\n this._dataList[dataCount - 1] = data;\n success = true;\n adjustFlag = true;\n }\n }\n if (success && adjustFlag) {\n this._adjustVisibleRange();\n this.setCrosshair(this._crosshair, { notInvalidate: true });\n var filterIndicators = this.getIndicatorsByFilter({});\n if (filterIndicators.length > 0) {\n this._calcIndicator(filterIndicators);\n }\n else {\n this._chart.layout({\n measureWidth: true,\n update: true,\n buildYAxisTick: true,\n cacheYAxisWidth: type !== 'init'\n });\n }\n }\n };\n StoreImp.prototype.setDataLoader = function (dataLoader) {\n var _this = this;\n this.resetData(function () {\n _this._dataLoader = dataLoader;\n });\n };\n StoreImp.prototype._calcOptimalBarSpace = function () {\n var specialBarSpace = 4;\n var ratio = 1 - (BAR_GAP_RATIO * Math.atan(Math.max(specialBarSpace, this._barSpace) - specialBarSpace)) / (Math.PI * 0.5);\n var gapBarSpace = Math.min(Math.floor(this._barSpace * ratio), Math.floor(this._barSpace));\n if (gapBarSpace % 2 === 0 && gapBarSpace + 2 >= this._barSpace) {\n --gapBarSpace;\n }\n this._gapBarSpace = Math.max(1, gapBarSpace);\n };\n StoreImp.prototype._adjustVisibleRange = function () {\n var _a, _b;\n var totalBarCount = this._dataList.length;\n var visibleBarCount = this._totalBarSpace / this._barSpace;\n var leftMinVisibleBarCount = 0;\n var rightMinVisibleBarCount = 0;\n if (this._scrollLimitRole === 'distance') {\n leftMinVisibleBarCount = (this._totalBarSpace - this._maxOffsetDistance.right) / this._barSpace;\n rightMinVisibleBarCount = (this._totalBarSpace - this._maxOffsetDistance.left) / this._barSpace;\n }\n else {\n leftMinVisibleBarCount = this._minVisibleBarCount.left;\n rightMinVisibleBarCount = this._minVisibleBarCount.right;\n }\n leftMinVisibleBarCount = Math.max(0, leftMinVisibleBarCount);\n rightMinVisibleBarCount = Math.max(0, rightMinVisibleBarCount);\n var maxRightOffsetBarCount = visibleBarCount - Math.min(leftMinVisibleBarCount, totalBarCount);\n if (this._lastBarRightSideDiffBarCount > maxRightOffsetBarCount) {\n this._lastBarRightSideDiffBarCount = maxRightOffsetBarCount;\n }\n var minRightOffsetBarCount = -totalBarCount + Math.min(rightMinVisibleBarCount, totalBarCount);\n if (this._lastBarRightSideDiffBarCount < minRightOffsetBarCount) {\n this._lastBarRightSideDiffBarCount = minRightOffsetBarCount;\n }\n var to = Math.round(this._lastBarRightSideDiffBarCount + totalBarCount + 0.5);\n var realTo = to;\n if (to > totalBarCount) {\n to = totalBarCount;\n }\n var from = Math.round(to - visibleBarCount) - 1;\n if (from < 0) {\n from = 0;\n }\n var realFrom = this._lastBarRightSideDiffBarCount > 0 ? Math.round(totalBarCount + this._lastBarRightSideDiffBarCount - visibleBarCount) - 1 : from;\n this._visibleRange = { from: from, to: to, realFrom: realFrom, realTo: realTo };\n this.executeAction('onVisibleRangeChange', this._visibleRange);\n this._visibleRangeDataList = [];\n this._visibleRangeHighLowPrice = [\n { x: 0, price: Number.MIN_SAFE_INTEGER },\n { x: 0, price: Number.MAX_SAFE_INTEGER }\n ];\n for (var i = realFrom; i < realTo; i++) {\n var kLineData = this._dataList[i];\n var x = this.dataIndexToCoordinate(i);\n this._visibleRangeDataList.push({\n dataIndex: i,\n x: x,\n data: {\n prev: (_a = this._dataList[i - 1]) !== null && _a !== void 0 ? _a : kLineData,\n current: kLineData,\n next: (_b = this._dataList[i + 1]) !== null && _b !== void 0 ? _b : kLineData\n }\n });\n if (isValid(kLineData)) {\n if (this._visibleRangeHighLowPrice[0].price < kLineData.high) {\n this._visibleRangeHighLowPrice[0].price = kLineData.high;\n this._visibleRangeHighLowPrice[0].x = x;\n }\n if (this._visibleRangeHighLowPrice[1].price > kLineData.low) {\n this._visibleRangeHighLowPrice[1].price = kLineData.low;\n this._visibleRangeHighLowPrice[1].x = x;\n }\n }\n }\n // More processing and loading, more loading if there are callback methods and no data is being loaded\n if (from === 0 && this._dataLoadMore.forward) {\n this._processDataLoad('forward');\n }\n else if (to === totalBarCount && this._dataLoadMore.backward) {\n this._processDataLoad('backward');\n }\n };\n StoreImp.prototype._processDataLoad = function (type) {\n var _this = this;\n var _a, _b, _c, _d;\n if (!this._loading && isValid(this._dataLoader) && isValid(this._symbol) && isValid(this._period)) {\n this._loading = true;\n var params = {\n type: type,\n symbol: this._symbol,\n period: this._period,\n timestamp: null,\n callback: function (data, more) {\n var _a, _b;\n _this._loading = false;\n _this._addData(data, type, more);\n if (type === 'init') {\n (_b = (_a = _this._dataLoader) === null || _a === void 0 ? void 0 : _a.subscribeBar) === null || _b === void 0 ? void 0 : _b.call(_a, {\n symbol: _this._symbol,\n period: _this._period,\n callback: function (data) {\n _this._addData(data, 'update');\n }\n });\n }\n }\n };\n switch (type) {\n case 'backward': {\n params.timestamp = (_b = (_a = this._dataList[this._dataList.length - 1]) === null || _a === void 0 ? void 0 : _a.timestamp) !== null && _b !== void 0 ? _b : null;\n break;\n }\n case 'forward': {\n params.timestamp = (_d = (_c = this._dataList[0]) === null || _c === void 0 ? void 0 : _c.timestamp) !== null && _d !== void 0 ? _d : null;\n break;\n }\n }\n void this._dataLoader.getBars(params);\n }\n };\n StoreImp.prototype._processDataUnsubscribe = function () {\n var _a, _b;\n if (isValid(this._dataLoader) && isValid(this._symbol) && isValid(this._period)) {\n (_b = (_a = this._dataLoader).unsubscribeBar) === null || _b === void 0 ? void 0 : _b.call(_a, {\n symbol: this._symbol,\n period: this._period\n });\n }\n };\n StoreImp.prototype.resetData = function (fn) {\n this._processDataUnsubscribe();\n fn === null || fn === void 0 ? void 0 : fn();\n this._loading = false;\n this._processDataLoad('init');\n };\n StoreImp.prototype.getBarSpace = function () {\n return {\n bar: this._barSpace,\n halfBar: this._barSpace / 2,\n gapBar: this._gapBarSpace,\n halfGapBar: Math.floor(this._gapBarSpace / 2)\n };\n };\n StoreImp.prototype.setBarSpace = function (barSpace, adjustBeforeFunc) {\n if (barSpace < this._layoutOptions.barSpaceLimit.min || barSpace > this._layoutOptions.barSpaceLimit.max || this._barSpace === barSpace) {\n return;\n }\n this._barSpace = barSpace;\n this._calcOptimalBarSpace();\n adjustBeforeFunc === null || adjustBeforeFunc === void 0 ? void 0 : adjustBeforeFunc();\n this._adjustVisibleRange();\n this.setCrosshair(this._crosshair, { notInvalidate: true });\n this._chart.layout({\n measureWidth: true,\n update: true,\n buildYAxisTick: true,\n cacheYAxisWidth: true\n });\n };\n StoreImp.prototype.getLayoutOptions = function () {\n return this._layoutOptions;\n };\n StoreImp.prototype.setTotalBarSpace = function (totalSpace) {\n if (this._totalBarSpace !== totalSpace) {\n this._totalBarSpace = totalSpace;\n this._adjustVisibleRange();\n this.setCrosshair(this._crosshair, { notInvalidate: true });\n }\n };\n StoreImp.prototype.setOffsetRightDistance = function (distance, isUpdate) {\n this._offsetRightDistance = this._scrollLimitRole === 'distance' ? Math.min(this._maxOffsetDistance.right, distance) : distance;\n this._lastBarRightSideDiffBarCount = this._offsetRightDistance / this._barSpace;\n if (isUpdate !== null && isUpdate !== void 0 ? isUpdate : false) {\n this._adjustVisibleRange();\n this.setCrosshair(this._crosshair, { notInvalidate: true });\n this._chart.layout({\n measureWidth: true,\n update: true,\n buildYAxisTick: true,\n cacheYAxisWidth: true\n });\n }\n return this;\n };\n StoreImp.prototype.getInitialOffsetRightDistance = function () {\n return this._offsetRightDistance;\n };\n StoreImp.prototype.getOffsetRightDistance = function () {\n return Math.max(0, this._lastBarRightSideDiffBarCount * this._barSpace);\n };\n StoreImp.prototype.getLastBarRightSideDiffBarCount = function () {\n return this._lastBarRightSideDiffBarCount;\n };\n StoreImp.prototype.setLastBarRightSideDiffBarCount = function (barCount) {\n this._lastBarRightSideDiffBarCount = barCount;\n };\n StoreImp.prototype.setMaxOffsetLeftDistance = function (distance) {\n this._scrollLimitRole = 'distance';\n this._maxOffsetDistance.left = distance;\n };\n StoreImp.prototype.setMaxOffsetRightDistance = function (distance) {\n this._scrollLimitRole = 'distance';\n this._maxOffsetDistance.right = distance;\n };\n StoreImp.prototype.setLeftMinVisibleBarCount = function (barCount) {\n this._scrollLimitRole = 'bar_count';\n this._minVisibleBarCount.left = barCount;\n };\n StoreImp.prototype.setRightMinVisibleBarCount = function (barCount) {\n this._scrollLimitRole = 'bar_count';\n this._minVisibleBarCount.right = barCount;\n };\n StoreImp.prototype.getVisibleRange = function () {\n return this._visibleRange;\n };\n StoreImp.prototype.startScroll = function () {\n this._startLastBarRightSideDiffBarCount = this._lastBarRightSideDiffBarCount;\n };\n StoreImp.prototype.scroll = function (distance) {\n if (!this._scrollEnabled) {\n return;\n }\n var distanceBarCount = distance / this._barSpace;\n var prevLastBarRightSideDistance = this._lastBarRightSideDiffBarCount * this._barSpace;\n this._lastBarRightSideDiffBarCount = this._startLastBarRightSideDiffBarCount - distanceBarCount;\n this._adjustVisibleRange();\n this.setCrosshair(this._crosshair, { notInvalidate: true });\n this._chart.layout({\n measureWidth: true,\n update: true,\n buildYAxisTick: true,\n cacheYAxisWidth: true\n });\n var realDistance = Math.round(prevLastBarRightSideDistance - this._lastBarRightSideDiffBarCount * this._barSpace);\n if (realDistance !== 0) {\n this.executeAction('onScroll', { distance: realDistance });\n }\n };\n StoreImp.prototype.getDataByDataIndex = function (dataIndex) {\n var _a;\n return (_a = this._dataList[dataIndex]) !== null && _a !== void 0 ? _a : null;\n };\n StoreImp.prototype.coordinateToFloatIndex = function (x) {\n var dataCount = this._dataList.length;\n var deltaFromRight = (this._totalBarSpace - x) / this._barSpace;\n var index = dataCount + this._lastBarRightSideDiffBarCount - deltaFromRight;\n return Math.round(index * 1000000) / 1000000;\n };\n StoreImp.prototype.dataIndexToTimestamp = function (dataIndex) {\n var length = this._dataList.length;\n if (length === 0) {\n return null;\n }\n var data = this.getDataByDataIndex(dataIndex);\n if (isValid(data)) {\n return data.timestamp;\n }\n if (isValid(this._period)) {\n var lastIndex = length - 1;\n var referenceTimestamp = null;\n var diff = 0;\n if (dataIndex > lastIndex) {\n referenceTimestamp = this._dataList[lastIndex].timestamp;\n diff = dataIndex - lastIndex;\n }\n else if (dataIndex < 0) {\n referenceTimestamp = this._dataList[0].timestamp;\n diff = dataIndex;\n }\n if (isNumber(referenceTimestamp)) {\n var _a = this._period, type = _a.type, span = _a.span;\n switch (type) {\n case 'second': {\n return referenceTimestamp + span * 1000 * diff;\n }\n case 'minute': {\n return referenceTimestamp + span * 60 * 1000 * diff;\n }\n case 'hour': {\n return referenceTimestamp + span * 60 * 60 * 1000 * diff;\n }\n case 'day': {\n return referenceTimestamp + span * 24 * 60 * 60 * 1000 * diff;\n }\n case 'week': {\n return referenceTimestamp + span * 7 * 24 * 60 * 60 * 1000 * diff;\n }\n case 'month': {\n var date = new Date(referenceTimestamp);\n var referenceDay = date.getDate();\n date.setDate(1);\n date.setMonth(date.getMonth() + span * diff);\n var lastDayOfTargetMonth = new Date(date.getFullYear(), date.getMonth() + 1, 0).getDate();\n date.setDate(Math.min(referenceDay, lastDayOfTargetMonth));\n return date.getTime();\n }\n case 'year': {\n var date = new Date(referenceTimestamp);\n date.setFullYear(date.getFullYear() + span * diff);\n return date.getTime();\n }\n }\n }\n }\n return null;\n };\n StoreImp.prototype.timestampToDataIndex = function (timestamp) {\n var length = this._dataList.length;\n if (length === 0) {\n return 0;\n }\n if (isValid(this._period)) {\n var referenceTimestamp = null;\n var baseDataIndex = 0;\n var lastIndex = length - 1;\n var lastTimestamp = this._dataList[lastIndex].timestamp;\n if (timestamp > lastTimestamp) {\n referenceTimestamp = lastTimestamp;\n baseDataIndex = lastIndex;\n }\n var firstTimestamp = this._dataList[0].timestamp;\n if (timestamp < firstTimestamp) {\n referenceTimestamp = firstTimestamp;\n baseDataIndex = 0;\n }\n if (isNumber(referenceTimestamp)) {\n var _a = this._period, type = _a.type, span = _a.span;\n switch (type) {\n case 'second': {\n return baseDataIndex + Math.floor((timestamp - referenceTimestamp) / (span * 1000));\n }\n case 'minute': {\n return baseDataIndex + Math.floor((timestamp - referenceTimestamp) / (span * 60 * 1000));\n }\n case 'hour': {\n return baseDataIndex + Math.floor((timestamp - referenceTimestamp) / (span * 60 * 60 * 1000));\n }\n case 'day': {\n return baseDataIndex + Math.floor((timestamp - referenceTimestamp) / (span * 24 * 60 * 60 * 1000));\n }\n case 'week': {\n return baseDataIndex + Math.floor((timestamp - referenceTimestamp) / (span * 7 * 24 * 60 * 60 * 1000));\n }\n case 'month': {\n var referenceDate = new Date(referenceTimestamp);\n var currentDate = new Date(timestamp);\n var referenceYear = referenceDate.getFullYear();\n var currentYear = currentDate.getFullYear();\n var referenceMonth = referenceDate.getMonth();\n var currentMonth = currentDate.getMonth();\n return baseDataIndex + Math.floor(((currentYear - referenceYear) * 12 + (currentMonth - referenceMonth)) / span);\n }\n case 'year': {\n var referenceYear = new Date(referenceTimestamp).getFullYear();\n var currentYear = new Date(timestamp).getFullYear();\n return baseDataIndex + Math.floor((currentYear - referenceYear) / span);\n }\n }\n }\n }\n return binarySearchNearest(this._dataList, 'timestamp', timestamp);\n };\n StoreImp.prototype.dataIndexToCoordinate = function (dataIndex) {\n var dataCount = this._dataList.length;\n var deltaFromRight = dataCount + this._lastBarRightSideDiffBarCount - dataIndex;\n return Math.floor(this._totalBarSpace - (deltaFromRight - 0.5) * this._barSpace + 0.5);\n };\n StoreImp.prototype.coordinateToDataIndex = function (x) {\n return Math.ceil(this.coordinateToFloatIndex(x)) - 1;\n };\n /**\n * Converts a float data index to an interpolated timestamp.\n * This allows sub-bar precision for smooth freehand drawings.\n * Supports extrapolation beyond the data range (drawing in the \"future\").\n * @param floatIndex - A floating point index (e.g., 42.75)\n * @returns An interpolated timestamp between two bars\n */\n StoreImp.prototype.floatIndexToTimestamp = function (floatIndex) {\n var length = this._dataList.length;\n if (length === 0) {\n return null;\n }\n var lastIndex = length - 1;\n // Handle float index beyond the last bar (extrapolate into the future)\n if (floatIndex > lastIndex && length >= 2) {\n var lastTimestamp = this._dataList[lastIndex].timestamp;\n var secondLastTimestamp = this._dataList[lastIndex - 1].timestamp;\n var barDuration = lastTimestamp - secondLastTimestamp;\n if (barDuration > 0) {\n var barsBeyondLast = floatIndex - lastIndex;\n return Math.round(lastTimestamp + barsBeyondLast * barDuration);\n }\n }\n // Handle float index before the first bar (extrapolate into the past)\n if (floatIndex < 0 && length >= 2) {\n var firstTimestamp = this._dataList[0].timestamp;\n var secondTimestamp = this._dataList[1].timestamp;\n var barDuration = secondTimestamp - firstTimestamp;\n if (barDuration > 0) {\n return Math.round(firstTimestamp + floatIndex * barDuration);\n }\n }\n // Normal case: interpolate between two bars within the data range\n var intIndex = Math.floor(floatIndex);\n var fraction = floatIndex - intIndex;\n // Get timestamp at the integer index\n var timestampAtInt = this.dataIndexToTimestamp(intIndex);\n // If no fractional part, return the integer timestamp\n if (fraction === 0 || !isNumber(timestampAtInt)) {\n return timestampAtInt;\n }\n // Get timestamp at the next index for interpolation\n var timestampAtNext = this.dataIndexToTimestamp(intIndex + 1);\n if (isNumber(timestampAtNext)) {\n // Linear interpolation between the two timestamps\n return Math.round(timestampAtInt + (timestampAtNext - timestampAtInt) * fraction);\n }\n return timestampAtInt;\n };\n /**\n * Converts a precise timestamp to a float data index.\n * This preserves sub-bar precision for smooth freehand drawings across timeframe changes.\n * Supports extrapolation beyond the data range (drawing in the \"future\").\n * @param timestamp - A precise timestamp (possibly between or beyond bars)\n * @returns A floating point index representing the exact position\n */\n StoreImp.prototype.timestampToFloatIndex = function (timestamp) {\n var length = this._dataList.length;\n if (length === 0) {\n return 0;\n }\n var firstTimestamp = this._dataList[0].timestamp;\n var lastTimestamp = this._dataList[length - 1].timestamp;\n // Handle timestamp beyond the last bar (drawing in the \"future\")\n if (timestamp > lastTimestamp && length >= 2) {\n // Calculate average bar duration from the last two bars\n var secondLastTimestamp = this._dataList[length - 2].timestamp;\n var barDuration = lastTimestamp - secondLastTimestamp;\n if (barDuration > 0) {\n var timeBeyondLast = timestamp - lastTimestamp;\n var barsBeyond = timeBeyondLast / barDuration;\n return length - 1 + barsBeyond;\n }\n }\n // Handle timestamp before the first bar\n if (timestamp < firstTimestamp && length >= 2) {\n var secondTimestamp = this._dataList[1].timestamp;\n var barDuration = secondTimestamp - firstTimestamp;\n if (barDuration > 0) {\n var timeBeforeFirst = firstTimestamp - timestamp;\n var barsBefore = timeBeforeFirst / barDuration;\n return -barsBefore;\n }\n }\n // Find the floor bar index using binary search\n // We need the bar where barTimestamp <= timestamp < nextBarTimestamp\n var left = 0;\n var right = length - 1;\n var floorIndex = 0;\n while (left <= right) {\n var mid = Math.floor((left + right) / 2);\n var midTimestamp = this._dataList[mid].timestamp;\n if (midTimestamp <= timestamp) {\n floorIndex = mid;\n left = mid + 1;\n }\n else {\n right = mid - 1;\n }\n }\n // Get the floor bar and the next bar for interpolation\n var dataAtFloor = this._dataList[floorIndex];\n var dataAtNext = floorIndex + 1 < length ? this._dataList[floorIndex + 1] : null;\n if (isValid(dataAtFloor) && isValid(dataAtNext)) {\n var timestampAtFloor = dataAtFloor.timestamp;\n var timestampAtNext = dataAtNext.timestamp;\n // Calculate fractional position between the two bars\n if (timestamp >= timestampAtFloor && timestampAtNext > timestampAtFloor) {\n var fraction = (timestamp - timestampAtFloor) / (timestampAtNext - timestampAtFloor);\n return floorIndex + Math.min(fraction, 1); // Clamp to max 1\n }\n }\n return floorIndex;\n };\n StoreImp.prototype.zoom = function (scale, coordinate, position) {\n var _this = this;\n var _a;\n if (!this._zoomEnabled) {\n return;\n }\n var zoomCoordinate = coordinate !== null && coordinate !== void 0 ? coordinate : { x: (_a = this._crosshair.x) !== null && _a !== void 0 ? _a : this._totalBarSpace / 2 };\n if (position === 'xAxis') {\n if (this._zoomAnchor.xAxis === 'last_bar') {\n zoomCoordinate.x = this.dataIndexToCoordinate(this._dataList.length - 1);\n }\n }\n else {\n if (this._zoomAnchor.main === 'last_bar') {\n zoomCoordinate.x = this.dataIndexToCoordinate(this._dataList.length - 1);\n }\n }\n var x = zoomCoordinate.x;\n var floatIndex = this.coordinateToFloatIndex(x);\n var prevBarSpace = this._barSpace;\n var barSpace = this._barSpace + scale * (this._barSpace / SCALE_MULTIPLIER);\n this.setBarSpace(barSpace, function () {\n _this._lastBarRightSideDiffBarCount += floatIndex - _this.coordinateToFloatIndex(x);\n });\n var realScale = this._barSpace / prevBarSpace;\n if (realScale !== 1) {\n this.executeAction('onZoom', { scale: realScale });\n }\n };\n StoreImp.prototype.setZoomEnabled = function (enabled) {\n this._zoomEnabled = enabled;\n };\n StoreImp.prototype.isZoomEnabled = function () {\n return this._zoomEnabled;\n };\n StoreImp.prototype.setZoomAnchor = function (anchor) {\n if (isString(anchor)) {\n this._zoomAnchor.main = anchor;\n this._zoomAnchor.xAxis = anchor;\n }\n else {\n if (isString(anchor.main)) {\n this._zoomAnchor.main = anchor.main;\n }\n if (isString(anchor.xAxis)) {\n this._zoomAnchor.xAxis = anchor.xAxis;\n }\n }\n };\n StoreImp.prototype.getZoomAnchor = function () {\n return __assign({}, this._zoomAnchor);\n };\n StoreImp.prototype.setScrollEnabled = function (enabled) {\n this._scrollEnabled = enabled;\n };\n StoreImp.prototype.isScrollEnabled = function () {\n return this._scrollEnabled;\n };\n StoreImp.prototype.setCrosshair = function (crosshair, options) {\n var _a;\n var _b = options !== null && options !== void 0 ? options : {}, notInvalidate = _b.notInvalidate, notExecuteAction = _b.notExecuteAction, forceInvalidate = _b.forceInvalidate;\n var cr = crosshair !== null && crosshair !== void 0 ? crosshair : {};\n var realDataIndex = 0;\n var dataIndex = 0;\n if (isNumber(cr.x)) {\n realDataIndex = this.coordinateToDataIndex(cr.x);\n if (realDataIndex < 0) {\n dataIndex = 0;\n }\n else if (realDataIndex > this._dataList.length - 1) {\n dataIndex = this._dataList.length - 1;\n }\n else {\n dataIndex = realDataIndex;\n }\n }\n else {\n realDataIndex = this._dataList.length - 1;\n dataIndex = realDataIndex;\n }\n var kLineData = this._dataList[dataIndex];\n var realX = this.dataIndexToCoordinate(realDataIndex);\n var prevCrosshair = { x: this._crosshair.x, y: this._crosshair.y, paneId: this._crosshair.paneId };\n this._crosshair = __assign(__assign({}, cr), { realX: realX, kLineData: kLineData, realDataIndex: realDataIndex, dataIndex: dataIndex, timestamp: (_a = this.dataIndexToTimestamp(realDataIndex)) !== null && _a !== void 0 ? _a : undefined });\n if (prevCrosshair.x !== cr.x || prevCrosshair.y !== cr.y || prevCrosshair.paneId !== cr.paneId || (forceInvalidate !== null && forceInvalidate !== void 0 ? forceInvalidate : false)) {\n if (isValid(kLineData) && !(notExecuteAction !== null && notExecuteAction !== void 0 ? notExecuteAction : false) && this.hasAction('onCrosshairChange') && isString(this._crosshair.paneId)) {\n this.executeAction('onCrosshairChange', crosshair);\n }\n if (!(notInvalidate !== null && notInvalidate !== void 0 ? notInvalidate : false)) {\n this._chart.updatePane(1 /* UpdateLevel.Overlay */);\n }\n }\n };\n StoreImp.prototype.getCrosshair = function () {\n return this._crosshair;\n };\n StoreImp.prototype.executeAction = function (type, data) {\n var _a;\n (_a = this._actions.get(type)) === null || _a === void 0 ? void 0 : _a.execute(data);\n };\n StoreImp.prototype.subscribeAction = function (type, callback) {\n var _a;\n if (!this._actions.has(type)) {\n this._actions.set(type, new Action());\n }\n (_a = this._actions.get(type)) === null || _a === void 0 ? void 0 : _a.subscribe(callback);\n };\n StoreImp.prototype.unsubscribeAction = function (type, callback) {\n var action = this._actions.get(type);\n if (isValid(action)) {\n action.unsubscribe(callback);\n if (action.isEmpty()) {\n this._actions.delete(type);\n }\n }\n };\n StoreImp.prototype.hasAction = function (type) {\n var action = this._actions.get(type);\n return isValid(action) && !action.isEmpty();\n };\n StoreImp.prototype._sortIndicators = function (paneId) {\n var _a;\n if (isString(paneId)) {\n (_a = this._indicators.get(paneId)) === null || _a === void 0 ? void 0 : _a.sort(function (i1, i2) { return i1.zLevel - i2.zLevel; });\n }\n else {\n this._indicators.forEach(function (paneIndicators) {\n paneIndicators.sort(function (i1, i2) { return i1.zLevel - i2.zLevel; });\n });\n }\n };\n StoreImp.prototype._calcIndicator = function (data) {\n var _this = this;\n var indicators = [];\n indicators = indicators.concat(data);\n if (indicators.length > 0) {\n var tasks_1 = {};\n indicators.forEach(function (indicator) {\n tasks_1[indicator.id] = indicator.calcImp(_this._dataList);\n });\n this._taskScheduler.add(tasks_1);\n }\n };\n StoreImp.prototype.addIndicator = function (create, isStack) {\n var name = create.name;\n var filterIndicators = this.getIndicatorsByFilter(create);\n if (filterIndicators.length > 0) {\n return false;\n }\n var paneId = create.paneId;\n var paneIndicators = this.getIndicatorsByPaneId(paneId);\n var IndicatorClazz = getIndicatorClass(name);\n var indicator = new IndicatorClazz();\n this._synchronizeIndicatorSeriesPrecision(indicator);\n indicator.override(create);\n if (!isStack) {\n this.removeIndicator({ paneId: paneId });\n paneIndicators = [];\n }\n paneIndicators.push(indicator);\n this._indicators.set(paneId, paneIndicators);\n this._sortIndicators(paneId);\n this._calcIndicator(indicator);\n return true;\n };\n StoreImp.prototype.getIndicatorsByPaneId = function (paneId) {\n var _a;\n return (_a = this._indicators.get(paneId)) !== null && _a !== void 0 ? _a : [];\n };\n StoreImp.prototype.getIndicatorsByFilter = function (filter) {\n var paneId = filter.paneId, name = filter.name, id = filter.id;\n var match = function (indicator) {\n if (isValid(id)) {\n return indicator.id === id;\n }\n return !isValid(name) || indicator.name === name;\n };\n var indicators = [];\n if (isValid(paneId)) {\n indicators = indicators.concat(this.getIndicatorsByPaneId(paneId).filter(match));\n }\n else {\n this._indicators.forEach(function (paneIndicators) {\n indicators = indicators.concat(paneIndicators.filter(match));\n });\n }\n return indicators;\n };\n StoreImp.prototype.removeIndicator = function (filter) {\n var _this = this;\n var removed = false;\n var filterIndicators = this.getIndicatorsByFilter(filter !== null && filter !== void 0 ? filter : {});\n filterIndicators.forEach(function (indicator) {\n var paneIndicators = _this.getIndicatorsByPaneId(indicator.paneId);\n var index = paneIndicators.findIndex(function (ins) { return ins.id === indicator.id; });\n if (index > -1) {\n paneIndicators.splice(index, 1);\n removed = true;\n }\n if (paneIndicators.length === 0) {\n _this._indicators.delete(indicator.paneId);\n }\n });\n return removed;\n };\n StoreImp.prototype.hasIndicators = function (paneId) {\n return this._indicators.has(paneId);\n };\n StoreImp.prototype._synchronizeIndicatorSeriesPrecision = function (indicator) {\n if (isValid(this._symbol)) {\n var _a = this._symbol, _b = _a.pricePrecision, pricePrecision_1 = _b === void 0 ? SymbolDefaultPrecisionConstants.PRICE : _b, _c = _a.volumePrecision, volumePrecision_1 = _c === void 0 ? SymbolDefaultPrecisionConstants.VOLUME : _c;\n var synchronize_1 = function (indicator) {\n switch (indicator.series) {\n case 'price': {\n indicator.setSeriesPrecision(pricePrecision_1);\n break;\n }\n case 'volume': {\n indicator.setSeriesPrecision(volumePrecision_1);\n break;\n }\n }\n };\n if (isValid(indicator)) {\n synchronize_1(indicator);\n }\n else {\n this._indicators.forEach(function (paneIndicators) {\n paneIndicators.forEach(function (indicator) {\n synchronize_1(indicator);\n });\n });\n }\n }\n };\n StoreImp.prototype.overrideIndicator = function (override) {\n var _this = this;\n var updateFlag = false;\n var sortFlag = false;\n var filterIndicators = this.getIndicatorsByFilter(override);\n filterIndicators.forEach(function (indicator) {\n var prevPaneId = indicator.paneId;\n indicator.override(override);\n var currentPaneId = indicator.paneId;\n if (prevPaneId !== currentPaneId) {\n var prevPaneIndicators = _this.getIndicatorsByPaneId(prevPaneId);\n var index = prevPaneIndicators.findIndex(function (ins) { return ins.id === indicator.id; });\n if (index > -1) {\n prevPaneIndicators.splice(index, 1);\n }\n if (prevPaneIndicators.length === 0) {\n _this._indicators.delete(prevPaneId);\n }\n var currentPaneIndicators = _this.getIndicatorsByPaneId(currentPaneId);\n if (!currentPaneIndicators.some(function (ins) { return ins.id === indicator.id; })) {\n currentPaneIndicators.push(indicator);\n _this._indicators.set(currentPaneId, currentPaneIndicators);\n }\n sortFlag = true;\n }\n var _a = indicator.shouldUpdateImp(), calc = _a.calc, draw = _a.draw, sort = _a.sort;\n if (sort) {\n sortFlag = true;\n }\n if (calc) {\n _this._calcIndicator(indicator);\n }\n else {\n if (draw) {\n updateFlag = true;\n }\n }\n });\n if (sortFlag) {\n this._sortIndicators();\n }\n return updateFlag || sortFlag;\n };\n StoreImp.prototype.getOverlaysByFilter = function (filter) {\n var _a;\n var id = filter.id, groupId = filter.groupId, paneId = filter.paneId, name = filter.name;\n var match = function (overlay) {\n if (isValid(id)) {\n return overlay.id === id;\n }\n else {\n if (isValid(groupId)) {\n return overlay.groupId === groupId && (!isValid(name) || overlay.name === name);\n }\n }\n return !isValid(name) || overlay.name === name;\n };\n var overlays = [];\n if (isValid(paneId)) {\n overlays = overlays.concat(this.getOverlaysByPaneId(paneId).filter(match));\n }\n else {\n this._overlays.forEach(function (paneOverlays) {\n overlays = overlays.concat(paneOverlays.filter(match));\n });\n }\n var progressOverlay = (_a = this._progressOverlayInfo) === null || _a === void 0 ? void 0 : _a.overlay;\n if (isValid(progressOverlay) && match(progressOverlay)) {\n overlays.push(progressOverlay);\n }\n return overlays;\n };\n StoreImp.prototype.getOverlaysByPaneId = function (paneId) {\n var _a;\n if (!isString(paneId)) {\n var overlays_1 = [];\n this._overlays.forEach(function (paneOverlays) {\n overlays_1 = overlays_1.concat(paneOverlays);\n });\n return overlays_1;\n }\n return (_a = this._overlays.get(paneId)) !== null && _a !== void 0 ? _a : [];\n };\n StoreImp.prototype._sortOverlays = function (paneId) {\n var _a;\n if (isString(paneId)) {\n (_a = this._overlays.get(paneId)) === null || _a === void 0 ? void 0 : _a.sort(function (o1, o2) { return o1.zLevel - o2.zLevel; });\n }\n else {\n this._overlays.forEach(function (paneOverlays) {\n paneOverlays.sort(function (o1, o2) { return o1.zLevel - o2.zLevel; });\n });\n }\n };\n StoreImp.prototype.addOverlays = function (os, appointPaneFlags) {\n var _this = this;\n var updatePaneIds = [];\n var ids = os.map(function (create, index) {\n var e_1, _a;\n var _b, _c, _d, _e, _f, _g;\n if (isValid(create.id)) {\n var findOverlay = null;\n try {\n for (var _h = __values(_this._overlays), _j = _h.next(); !_j.done; _j = _h.next()) {\n var item = _j.value;\n var overlays = item[1];\n var overlay = overlays.find(function (o) { return o.id === create.id; });\n if (isValid(overlay)) {\n findOverlay = overlay;\n break;\n }\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (_j && !_j.done && (_a = _h.return)) _a.call(_h);\n }\n finally { if (e_1) throw e_1.error; }\n }\n if (isValid(findOverlay)) {\n return create.id;\n }\n }\n var OverlayClazz = getOverlayInnerClass(create.name);\n if (isValid(OverlayClazz)) {\n var id = (_b = create.id) !== null && _b !== void 0 ? _b : createId(OVERLAY_ID_PREFIX);\n var overlay = new OverlayClazz();\n var paneId = (_c = create.paneId) !== null && _c !== void 0 ? _c : PaneIdConstants.CANDLE;\n create.id = id;\n (_d = create.groupId) !== null && _d !== void 0 ? _d : (create.groupId = id);\n var zLevel = _this.getOverlaysByPaneId(paneId).length;\n (_e = create.zLevel) !== null && _e !== void 0 ? _e : (create.zLevel = zLevel);\n overlay.override(create);\n if (!updatePaneIds.includes(paneId)) {\n updatePaneIds.push(paneId);\n }\n if (overlay.isDrawing()) {\n _this._progressOverlayInfo = { paneId: paneId, overlay: overlay, appointPaneFlag: appointPaneFlags[index] };\n }\n else {\n if (!_this._overlays.has(paneId)) {\n _this._overlays.set(paneId, []);\n }\n (_f = _this._overlays.get(paneId)) === null || _f === void 0 ? void 0 : _f.push(overlay);\n }\n if (overlay.isStart()) {\n (_g = overlay.onDrawStart) === null || _g === void 0 ? void 0 : _g.call(overlay, { overlay: overlay, chart: _this._chart });\n }\n return id;\n }\n return null;\n });\n if (updatePaneIds.length > 0) {\n this._sortOverlays();\n updatePaneIds.forEach(function (paneId) {\n _this._chart.updatePane(1 /* UpdateLevel.Overlay */, paneId);\n });\n this._chart.updatePane(1 /* UpdateLevel.Overlay */, PaneIdConstants.X_AXIS);\n }\n return ids;\n };\n StoreImp.prototype.getProgressOverlayInfo = function () {\n return this._progressOverlayInfo;\n };\n StoreImp.prototype.progressOverlayComplete = function () {\n var _a;\n if (this._progressOverlayInfo !== null) {\n var _b = this._progressOverlayInfo, overlay = _b.overlay, paneId = _b.paneId;\n if (!overlay.isDrawing()) {\n if (!this._overlays.has(paneId)) {\n this._overlays.set(paneId, []);\n }\n (_a = this._overlays.get(paneId)) === null || _a === void 0 ? void 0 : _a.push(overlay);\n this._sortOverlays(paneId);\n this._progressOverlayInfo = null;\n }\n }\n };\n StoreImp.prototype.updateProgressOverlayInfo = function (paneId, appointPaneFlag) {\n if (this._progressOverlayInfo !== null) {\n if (isBoolean(appointPaneFlag) && appointPaneFlag) {\n this._progressOverlayInfo.appointPaneFlag = appointPaneFlag;\n }\n this._progressOverlayInfo.paneId = paneId;\n this._progressOverlayInfo.overlay.override({ paneId: paneId });\n }\n };\n StoreImp.prototype.overrideOverlay = function (override) {\n var _this = this;\n var sortFlag = false;\n var updatePaneIds = [];\n var filterOverlays = this.getOverlaysByFilter(override);\n filterOverlays.forEach(function (overlay) {\n overlay.override(override);\n var _a = overlay.shouldUpdate(), sort = _a.sort, draw = _a.draw;\n if (sort) {\n sortFlag = true;\n }\n if (sort || draw) {\n if (!updatePaneIds.includes(overlay.paneId)) {\n updatePaneIds.push(overlay.paneId);\n }\n }\n });\n if (sortFlag) {\n this._sortOverlays();\n }\n if (updatePaneIds.length > 0) {\n updatePaneIds.forEach(function (paneId) {\n _this._chart.updatePane(1 /* UpdateLevel.Overlay */, paneId);\n });\n this._chart.updatePane(1 /* UpdateLevel.Overlay */, PaneIdConstants.X_AXIS);\n return true;\n }\n return false;\n };\n StoreImp.prototype.removeOverlay = function (filter) {\n var _this = this;\n var updatePaneIds = [];\n var filterOverlays = this.getOverlaysByFilter(filter !== null && filter !== void 0 ? filter : {});\n filterOverlays.forEach(function (overlay) {\n var _a;\n var paneId = overlay.paneId;\n var paneOverlays = _this.getOverlaysByPaneId(overlay.paneId);\n (_a = overlay.onRemoved) === null || _a === void 0 ? void 0 : _a.call(overlay, { overlay: overlay, chart: _this._chart });\n if (!updatePaneIds.includes(paneId)) {\n updatePaneIds.push(paneId);\n }\n if (overlay.isDrawing()) {\n _this._progressOverlayInfo = null;\n }\n else {\n var index = paneOverlays.findIndex(function (o) { return o.id === overlay.id; });\n if (index > -1) {\n paneOverlays.splice(index, 1);\n }\n }\n if (paneOverlays.length === 0) {\n _this._overlays.delete(paneId);\n }\n });\n if (updatePaneIds.length > 0) {\n updatePaneIds.forEach(function (paneId) {\n _this._chart.updatePane(1 /* UpdateLevel.Overlay */, paneId);\n });\n this._chart.updatePane(1 /* UpdateLevel.Overlay */, PaneIdConstants.X_AXIS);\n return true;\n }\n return false;\n };\n StoreImp.prototype.setPressedOverlayInfo = function (info) {\n this._pressedOverlayInfo = info;\n };\n StoreImp.prototype.getPressedOverlayInfo = function () {\n return this._pressedOverlayInfo;\n };\n StoreImp.prototype.setHoverOverlayInfo = function (info, processOnMouseEnterEvent, processOnMouseLeaveEvent) {\n var _a = this._hoverOverlayInfo, overlay = _a.overlay, figureType = _a.figureType, figureIndex = _a.figureIndex, figure = _a.figure;\n var infoOverlay = info.overlay;\n if ((overlay === null || overlay === void 0 ? void 0 : overlay.id) !== (infoOverlay === null || infoOverlay === void 0 ? void 0 : infoOverlay.id) || figureType !== info.figureType || figureIndex !== info.figureIndex) {\n this._hoverOverlayInfo = info;\n if ((overlay === null || overlay === void 0 ? void 0 : overlay.id) !== (infoOverlay === null || infoOverlay === void 0 ? void 0 : infoOverlay.id)) {\n var ignoreUpdateFlag = false;\n var sortFlag = false;\n if (overlay !== null) {\n if (!overlay.fixedZLevel) {\n overlay.override({ zLevel: overlay.getPrevZLevel() });\n sortFlag = true;\n }\n if (processOnMouseLeaveEvent(overlay, figure)) {\n ignoreUpdateFlag = true;\n }\n }\n if (infoOverlay !== null) {\n if (!infoOverlay.fixedZLevel) {\n infoOverlay.setPrevZLevel(infoOverlay.zLevel);\n infoOverlay.override({ zLevel: Number.MAX_SAFE_INTEGER });\n sortFlag = true;\n }\n if (processOnMouseEnterEvent(infoOverlay, info.figure)) {\n ignoreUpdateFlag = true;\n }\n }\n if (sortFlag) {\n this._sortOverlays();\n }\n if (!ignoreUpdateFlag) {\n this._chart.updatePane(1 /* UpdateLevel.Overlay */);\n }\n }\n }\n };\n StoreImp.prototype.getHoverOverlayInfo = function () {\n return this._hoverOverlayInfo;\n };\n StoreImp.prototype.setClickOverlayInfo = function (info, processOnSelectedEvent, processOnDeselectedEvent) {\n var _a = this._clickOverlayInfo, paneId = _a.paneId, overlay = _a.overlay, figureType = _a.figureType, figure = _a.figure, figureIndex = _a.figureIndex;\n var infoOverlay = info.overlay;\n if ((overlay === null || overlay === void 0 ? void 0 : overlay.id) !== (infoOverlay === null || infoOverlay === void 0 ? void 0 : infoOverlay.id) || figureType !== info.figureType || figureIndex !== info.figureIndex) {\n this._clickOverlayInfo = info;\n if ((overlay === null || overlay === void 0 ? void 0 : overlay.id) !== (infoOverlay === null || infoOverlay === void 0 ? void 0 : infoOverlay.id)) {\n if (isValid(overlay)) {\n processOnDeselectedEvent(overlay, figure);\n }\n if (isValid(infoOverlay)) {\n processOnSelectedEvent(infoOverlay, info.figure);\n }\n this._chart.updatePane(1 /* UpdateLevel.Overlay */, info.paneId);\n if (paneId !== info.paneId) {\n this._chart.updatePane(1 /* UpdateLevel.Overlay */, paneId);\n }\n this._chart.updatePane(1 /* UpdateLevel.Overlay */, PaneIdConstants.X_AXIS);\n }\n }\n };\n StoreImp.prototype.getClickOverlayInfo = function () {\n return this._clickOverlayInfo;\n };\n StoreImp.prototype.isOverlayEmpty = function () {\n return this._overlays.size === 0 && this._progressOverlayInfo === null;\n };\n StoreImp.prototype.isOverlayDrawing = function () {\n var _a, _b;\n return (_b = (_a = this._progressOverlayInfo) === null || _a === void 0 ? void 0 : _a.overlay.isDrawing()) !== null && _b !== void 0 ? _b : false;\n };\n StoreImp.prototype._clearLastPriceMarkExtendTextUpdateTimer = function () {\n this._lastPriceMarkExtendTextUpdateTimers.forEach(function (timer) {\n clearInterval(timer);\n });\n this._lastPriceMarkExtendTextUpdateTimers = [];\n };\n StoreImp.prototype._clearData = function () {\n this._dataLoadMore.backward = false;\n this._dataLoadMore.forward = false;\n this._loading = false;\n this._dataList = [];\n this._visibleRangeDataList = [];\n this._visibleRangeHighLowPrice = [\n { x: 0, price: Number.MIN_SAFE_INTEGER },\n { x: 0, price: Number.MAX_SAFE_INTEGER }\n ];\n this._visibleRange = getDefaultVisibleRange();\n this._crosshair = {};\n };\n StoreImp.prototype.getChart = function () {\n return this._chart;\n };\n StoreImp.prototype.destroy = function () {\n this._clearData();\n this._clearLastPriceMarkExtendTextUpdateTimer();\n this._taskScheduler.clear();\n this._overlays.clear();\n this._indicators.clear();\n this._actions.clear();\n };\n return StoreImp;\n}());\n\n/**\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n\n * http://www.apache.org/licenses/LICENSE-2.0\n\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar ChartImp = /** @class */ (function () {\n function ChartImp(container, options) {\n var _this = this;\n this._chartBounding = createDefaultBounding();\n this._drawPanes = [];\n this._separatorPanes = new Map();\n this._layoutUpdateOptions = {\n sort: true,\n measureHeight: true,\n measureWidth: true,\n secondMeasureWidth: false,\n update: true,\n buildYAxisTick: false,\n cacheYAxisWidth: false,\n forceBuildYAxisTick: false\n };\n this._layoutPending = false;\n this._resizeObserver = null;\n this._resizeRequestAnimationId = DEFAULT_REQUEST_ID;\n this._scheduleResize = function () {\n if (_this._resizeRequestAnimationId === DEFAULT_REQUEST_ID) {\n _this._resizeRequestAnimationId = requestAnimationFrame(function () {\n _this._resizeRequestAnimationId = DEFAULT_REQUEST_ID;\n if (_this._chartBounding.width !== Math.floor(_this._chartContainer.clientWidth) || _this._chartBounding.height !== Math.floor(_this._chartContainer.clientHeight)) {\n _this.resize();\n }\n });\n }\n };\n this._cacheYAxisWidth = { left: 0, right: 0 };\n this._initContainer(container);\n this._chartEvent = new Event(this._chartContainer, this);\n this._chartStore = new StoreImp(this, options);\n var layoutOptions = this._chartStore.getLayoutOptions();\n var paneOptions = layoutOptions.pane;\n this._candlePane = this._createPane(CandlePane, __assign(__assign({}, paneOptions), { id: PaneIdConstants.CANDLE }));\n this._candlePane.createOrOverrideYAxis(__assign(__assign({}, layoutOptions.yAxis), { id: createId(Y_AXIS_ID_PREFIX) }));\n this._xAxisPane = this._createPane(XAxisPane, __assign(__assign({}, paneOptions), { id: PaneIdConstants.X_AXIS, order: Number.MAX_SAFE_INTEGER }));\n this._layout();\n this._initResizeListener();\n }\n ChartImp.prototype._initContainer = function (container) {\n this._container = container;\n this._chartContainer = createDom('div', {\n position: 'relative',\n width: '100%',\n height: '100%',\n outline: 'none',\n borderStyle: 'none',\n cursor: 'crosshair',\n boxSizing: 'border-box',\n userSelect: 'none',\n webkitUserSelect: 'none',\n overflow: 'hidden',\n touchAction: 'none',\n overscrollBehavior: 'none',\n // @ts-ignore\n msUserSelect: 'none',\n MozUserSelect: 'none',\n webkitTapHighlightColor: 'transparent'\n });\n this._chartContainer.tabIndex = 1;\n container.appendChild(this._chartContainer);\n this._cacheChartBounding();\n };\n ChartImp.prototype._cacheChartBounding = function () {\n this._chartBounding.width = Math.floor(this._chartContainer.clientWidth);\n this._chartBounding.height = Math.floor(this._chartContainer.clientHeight);\n };\n ChartImp.prototype._initResizeListener = function () {\n var _this = this;\n if (isValid(ResizeObserver)) {\n this._resizeObserver = new ResizeObserver(function () {\n _this._scheduleResize();\n });\n this._resizeObserver.observe(this._chartContainer);\n }\n else {\n window.addEventListener('resize', this._scheduleResize);\n }\n };\n ChartImp.prototype._createPane = function (DrawPaneClass, options) {\n var pane = new DrawPaneClass(this, options);\n this._drawPanes.push(pane);\n return pane;\n };\n ChartImp.prototype.getDrawPaneById = function (paneId) {\n if (paneId === PaneIdConstants.CANDLE) {\n return this._candlePane;\n }\n if (paneId === PaneIdConstants.X_AXIS) {\n return this._xAxisPane;\n }\n var pane = this._drawPanes.find(function (p) { return p.getId() === paneId; });\n return pane !== null && pane !== void 0 ? pane : null;\n };\n ChartImp.prototype.getContainer = function () {\n return this._container;\n };\n ChartImp.prototype.getChartStore = function () {\n return this._chartStore;\n };\n ChartImp.prototype.getXAxisPane = function () {\n return this._xAxisPane;\n };\n ChartImp.prototype.getDrawPanes = function () {\n return this._drawPanes;\n };\n ChartImp.prototype.getSeparatorPanes = function () {\n return this._separatorPanes;\n };\n ChartImp.prototype.layout = function (options) {\n var _this = this;\n var _a, _b, _c, _d, _e, _f, _g, _h;\n if ((_a = options.sort) !== null && _a !== void 0 ? _a : false) {\n this._layoutUpdateOptions.sort = options.sort;\n }\n if ((_b = options.measureHeight) !== null && _b !== void 0 ? _b : false) {\n this._layoutUpdateOptions.measureHeight = options.measureHeight;\n }\n if ((_c = options.measureWidth) !== null && _c !== void 0 ? _c : false) {\n this._layoutUpdateOptions.measureWidth = options.measureWidth;\n }\n if ((_d = options.secondMeasureWidth) !== null && _d !== void 0 ? _d : false) {\n this._layoutUpdateOptions.secondMeasureWidth = options.secondMeasureWidth;\n }\n if ((_e = options.update) !== null && _e !== void 0 ? _e : false) {\n this._layoutUpdateOptions.update = options.update;\n }\n if ((_f = options.buildYAxisTick) !== null && _f !== void 0 ? _f : false) {\n this._layoutUpdateOptions.buildYAxisTick = options.buildYAxisTick;\n }\n if ((_g = options.cacheYAxisWidth) !== null && _g !== void 0 ? _g : false) {\n this._layoutUpdateOptions.cacheYAxisWidth = options.cacheYAxisWidth;\n }\n if ((_h = options.forceBuildYAxisTick) !== null && _h !== void 0 ? _h : false) {\n this._layoutUpdateOptions.forceBuildYAxisTick = options.forceBuildYAxisTick;\n }\n if (!this._layoutPending) {\n this._layoutPending = true;\n Promise.resolve()\n .then(function (_) {\n _this._layout();\n _this._layoutPending = false;\n })\n .catch(function (_) {\n // todo\n });\n }\n };\n ChartImp.prototype._layout = function () {\n var _this = this;\n var _a;\n var _b = this._layoutUpdateOptions, sort = _b.sort, measureHeight = _b.measureHeight, measureWidth = _b.measureWidth, secondMeasureWidth = _b.secondMeasureWidth, update = _b.update, buildYAxisTick = _b.buildYAxisTick, cacheYAxisWidth = _b.cacheYAxisWidth, forceBuildYAxisTick = _b.forceBuildYAxisTick;\n if (sort) {\n while (isValid(this._chartContainer.firstChild)) {\n this._chartContainer.removeChild(this._chartContainer.firstChild);\n }\n this._separatorPanes.clear();\n this._drawPanes.sort(function (a, b) { return a.getOptions().order - b.getOptions().order; });\n var prevPane_1 = null;\n this._drawPanes.forEach(function (pane) {\n if (pane.getId() !== PaneIdConstants.X_AXIS) {\n if (isValid(prevPane_1)) {\n var separatorPane = new SeparatorPane(_this, '', prevPane_1, pane);\n _this._chartContainer.appendChild(separatorPane.getContainer());\n _this._separatorPanes.set(pane, separatorPane);\n }\n prevPane_1 = pane;\n }\n _this._chartContainer.appendChild(pane.getContainer());\n });\n }\n if (measureHeight) {\n var totalHeight = this._chartBounding.height;\n var separatorSize = this.getStyles().separator.size;\n var xAxisHeight = this._xAxisPane.getXAxisComponent().getAutoSize();\n var contentPanes = this._drawPanes.filter(function (pane) { return pane.getId() !== PaneIdConstants.X_AXIS; });\n var maximizedPane_1 = contentPanes.find(function (pane) { return pane.getOptions().state === 'maximize'; });\n var remainingHeight_1 = Math.max(totalHeight - xAxisHeight, 0);\n var paneHeights_1 = new Map();\n var actualSeparatorSize_1 = separatorSize;\n if (isValid(maximizedPane_1)) {\n actualSeparatorSize_1 = 0;\n contentPanes.forEach(function (pane) {\n paneHeights_1.set(pane, pane === maximizedPane_1 ? remainingHeight_1 : 0);\n });\n }\n else {\n remainingHeight_1 = Math.max(remainingHeight_1 - this._separatorPanes.size * separatorSize, 0);\n var flexiblePane_1 = (_a = contentPanes.find(function (pane) { return pane.getId() === PaneIdConstants.CANDLE && pane.getOptions().state === 'normal'; })) !== null && _a !== void 0 ? _a : contentPanes.find(function (pane) { return pane.getOptions().state === 'normal'; });\n contentPanes.forEach(function (pane) {\n if (pane === flexiblePane_1) {\n return;\n }\n var options = pane.getOptions();\n var paneHeight = options.minHeight;\n if (options.state === 'normal') {\n paneHeight = Math.max(options.minHeight, options.height);\n var availableHeight = Math.max(remainingHeight_1, 0);\n if (paneHeight > availableHeight) {\n paneHeight = availableHeight;\n }\n }\n remainingHeight_1 -= paneHeight;\n paneHeights_1.set(pane, paneHeight);\n });\n if (isValid(flexiblePane_1)) {\n paneHeights_1.set(flexiblePane_1, Math.max(remainingHeight_1, 0));\n }\n }\n this._drawPanes.forEach(function (pane) {\n var _a;\n if (pane.getId() !== PaneIdConstants.X_AXIS) {\n pane.setBounding({ height: (_a = paneHeights_1.get(pane)) !== null && _a !== void 0 ? _a : 0 });\n }\n });\n this._xAxisPane.setBounding({ height: xAxisHeight });\n var top_1 = 0;\n this._drawPanes.forEach(function (pane) {\n var separatorPane = _this._separatorPanes.get(pane);\n if (isValid(separatorPane)) {\n separatorPane.setBounding({ height: actualSeparatorSize_1, top: top_1 });\n top_1 += actualSeparatorSize_1;\n }\n pane.setBounding({ top: top_1 });\n top_1 += pane.getBounding().height;\n });\n }\n var buildYAxisTickAndMeasureWidth = function () {\n var forceMeasureWidth = measureWidth;\n if (buildYAxisTick || forceBuildYAxisTick) {\n _this._drawPanes.forEach(function (pane) {\n pane.getYAxisComponents().forEach(function (axis) {\n var success = axis.buildTicks(forceBuildYAxisTick);\n forceMeasureWidth || (forceMeasureWidth = success);\n });\n });\n }\n if (forceMeasureWidth) {\n var totalWidth = _this._chartBounding.width;\n var styles = _this.getStyles();\n var leftOutsideYAxisWidths_1 = [];\n var leftInsideYAxisWidths_1 = [];\n var rightInsideYAxisWidths_1 = [];\n var rightOutsideYAxisWidths_1 = [];\n var updateColumnWidth_1 = function (widths, index, width) {\n var _a;\n widths[index] = Math.max((_a = widths[index]) !== null && _a !== void 0 ? _a : 0, width);\n };\n _this._drawPanes.forEach(function (pane) {\n var leftOutsideAxes = [];\n var leftInsideAxes = [];\n var rightInsideAxes = [];\n var rightOutsideAxes = [];\n if (pane.getId() !== PaneIdConstants.X_AXIS) {\n pane.getWidgetYAxisComponents().forEach(function (axis) {\n var yAxis = axis;\n if (yAxis.position === 'left') {\n if (yAxis.inside) {\n leftInsideAxes.push(yAxis);\n }\n else {\n leftOutsideAxes.push(yAxis);\n }\n }\n else {\n if (yAxis.inside) {\n rightInsideAxes.push(yAxis);\n }\n else {\n rightOutsideAxes.push(yAxis);\n }\n }\n });\n }\n leftOutsideAxes.forEach(function (yAxis, index) {\n updateColumnWidth_1(leftOutsideYAxisWidths_1, index, yAxis.getAutoSize());\n });\n leftInsideAxes.forEach(function (yAxis, index) {\n updateColumnWidth_1(leftInsideYAxisWidths_1, index, yAxis.getAutoSize());\n });\n rightInsideAxes.forEach(function (yAxis, index) {\n updateColumnWidth_1(rightInsideYAxisWidths_1, index, yAxis.getAutoSize());\n });\n rightOutsideAxes.forEach(function (yAxis, index) {\n updateColumnWidth_1(rightOutsideYAxisWidths_1, index, yAxis.getAutoSize());\n });\n });\n var leftYAxisWidth_1 = leftOutsideYAxisWidths_1.reduce(function (total, width) { return total + width; }, 0);\n var rightYAxisWidth = rightOutsideYAxisWidths_1.reduce(function (total, width) { return total + width; }, 0);\n if (cacheYAxisWidth) {\n leftYAxisWidth_1 = Math.max(_this._cacheYAxisWidth.left, leftYAxisWidth_1);\n rightYAxisWidth = Math.max(_this._cacheYAxisWidth.right, rightYAxisWidth);\n }\n _this._cacheYAxisWidth.left = leftYAxisWidth_1;\n _this._cacheYAxisWidth.right = rightYAxisWidth;\n var mainWidth_1 = totalWidth;\n var mainLeft_1 = 0;\n var mainRight = 0;\n mainWidth_1 -= leftYAxisWidth_1;\n mainLeft_1 = leftYAxisWidth_1;\n mainWidth_1 -= rightYAxisWidth;\n mainRight = rightYAxisWidth;\n _this._chartStore.setTotalBarSpace(mainWidth_1);\n var paneBounding_1 = { width: totalWidth };\n var mainBounding_1 = { width: mainWidth_1, left: mainLeft_1, right: mainRight };\n var leftYAxisBounding_1 = { width: leftYAxisWidth_1 };\n var rightYAxisBounding_1 = { width: rightYAxisWidth };\n var separatorFill = styles.separator.fill;\n var separatorBounding_1 = {};\n if (!separatorFill) {\n separatorBounding_1 = mainBounding_1;\n }\n else {\n separatorBounding_1 = paneBounding_1;\n }\n _this._drawPanes.forEach(function (pane) {\n var _a, _b;\n (_a = _this._separatorPanes.get(pane)) === null || _a === void 0 ? void 0 : _a.setBounding(separatorBounding_1);\n var yAxisBounding = {};\n var leftOutsideOffset = 0;\n var leftInsideOffset = 0;\n var rightInsideOffset = 0;\n var rightOutsideOffset = 0;\n var leftOutsideAxes = [];\n var leftInsideAxes = [];\n var rightInsideAxes = [];\n var rightOutsideAxes = [];\n if (pane.getId() !== PaneIdConstants.X_AXIS) {\n pane.getWidgetYAxisComponents().forEach(function (axis) {\n var yAxis = axis;\n if (yAxis.position === 'left') {\n if (yAxis.inside) {\n leftInsideAxes.push(yAxis);\n }\n else {\n leftOutsideAxes.push(yAxis);\n }\n }\n else {\n if (yAxis.inside) {\n rightInsideAxes.push(yAxis);\n }\n else {\n rightOutsideAxes.push(yAxis);\n }\n }\n });\n }\n var paneLeftOutsideYAxisWidth = leftOutsideAxes.reduce(function (total, _yAxis, index) { var _a; return total + ((_a = leftOutsideYAxisWidths_1[index]) !== null && _a !== void 0 ? _a : 0); }, 0);\n leftOutsideOffset = leftYAxisWidth_1 - paneLeftOutsideYAxisWidth;\n for (var index = leftOutsideAxes.length - 1; index >= 0; index--) {\n var yAxis = leftOutsideAxes[index];\n var width = (_b = leftOutsideYAxisWidths_1[index]) !== null && _b !== void 0 ? _b : 0;\n yAxisBounding[yAxis.id] = { width: width, left: leftOutsideOffset };\n leftOutsideOffset += width;\n }\n leftInsideAxes.forEach(function (yAxis, index) {\n var _a;\n var width = (_a = leftInsideYAxisWidths_1[index]) !== null && _a !== void 0 ? _a : 0;\n yAxisBounding[yAxis.id] = { width: width, left: mainLeft_1 + leftInsideOffset };\n leftInsideOffset += width;\n });\n rightInsideAxes.forEach(function (yAxis, index) {\n var _a;\n var width = (_a = rightInsideYAxisWidths_1[index]) !== null && _a !== void 0 ? _a : 0;\n rightInsideOffset += width;\n yAxisBounding[yAxis.id] = { width: width, left: mainLeft_1 + mainWidth_1 - rightInsideOffset };\n });\n rightOutsideAxes.forEach(function (yAxis, index) {\n var _a;\n var width = (_a = rightOutsideYAxisWidths_1[index]) !== null && _a !== void 0 ? _a : 0;\n yAxisBounding[yAxis.id] = { width: width, left: mainLeft_1 + mainWidth_1 + rightOutsideOffset };\n rightOutsideOffset += width;\n });\n pane.setYAxesBounding(yAxisBounding);\n pane.setBounding(paneBounding_1, mainBounding_1, leftYAxisBounding_1, rightYAxisBounding_1);\n });\n }\n };\n buildYAxisTickAndMeasureWidth();\n if (secondMeasureWidth) {\n buildYAxisTickAndMeasureWidth();\n }\n if (update) {\n this._xAxisPane.getXAxisComponent().buildTicks(true);\n this.updatePane(4 /* UpdateLevel.All */);\n }\n this._layoutUpdateOptions = {\n sort: false,\n measureHeight: false,\n measureWidth: false,\n secondMeasureWidth: false,\n update: false,\n buildYAxisTick: false,\n cacheYAxisWidth: false,\n forceBuildYAxisTick: false\n };\n };\n ChartImp.prototype.updatePane = function (level, paneId) {\n var _this = this;\n if (isValid(paneId)) {\n var pane = this.getDrawPaneById(paneId);\n pane === null || pane === void 0 ? void 0 : pane.update(level);\n }\n else {\n this._drawPanes.forEach(function (pane) {\n var _a;\n pane.update(level);\n (_a = _this._separatorPanes.get(pane)) === null || _a === void 0 ? void 0 : _a.update(level);\n });\n }\n };\n ChartImp.prototype.getDom = function (paneId, position) {\n var _a, _b;\n if (isValid(paneId)) {\n var pane = this.getDrawPaneById(paneId);\n if (isValid(pane)) {\n var pos = position !== null && position !== void 0 ? position : 'root';\n switch (pos) {\n case 'root': {\n return pane.getContainer();\n }\n case 'main': {\n return pane.getMainWidget().getContainer();\n }\n case 'yAxis': {\n return (_b = (_a = pane.getYAxisWidget()) === null || _a === void 0 ? void 0 : _a.getContainer()) !== null && _b !== void 0 ? _b : null;\n }\n }\n }\n }\n else {\n return this._chartContainer;\n }\n return null;\n };\n ChartImp.prototype.getSize = function (paneId, position) {\n var _a, _b;\n if (isValid(paneId)) {\n var pane = this.getDrawPaneById(paneId);\n if (isValid(pane)) {\n var pos = position !== null && position !== void 0 ? position : 'root';\n switch (pos) {\n case 'root': {\n return pane.getBounding();\n }\n case 'main': {\n return pane.getMainWidget().getBounding();\n }\n case 'yAxis': {\n return (_b = (_a = pane.getYAxisWidget()) === null || _a === void 0 ? void 0 : _a.getBounding()) !== null && _b !== void 0 ? _b : null;\n }\n }\n }\n }\n else {\n return this._chartBounding;\n }\n return null;\n };\n ChartImp.prototype._resetYAxisAutoCalcTickFlag = function () {\n this._drawPanes.forEach(function (pane) {\n pane.getYAxisComponents().forEach(function (axis) {\n axis.setAutoCalcTickFlag(true);\n });\n });\n };\n ChartImp.prototype.setSymbol = function (symbol) {\n if (symbol !== this.getSymbol()) {\n this._resetYAxisAutoCalcTickFlag();\n this._chartStore.setSymbol(symbol);\n }\n };\n ChartImp.prototype.getSymbol = function () {\n return this._chartStore.getSymbol();\n };\n ChartImp.prototype.setPeriod = function (period) {\n if (period !== this.getPeriod()) {\n this._resetYAxisAutoCalcTickFlag();\n this._chartStore.setPeriod(period);\n }\n };\n ChartImp.prototype.getPeriod = function () {\n return this._chartStore.getPeriod();\n };\n ChartImp.prototype.setStyles = function (value) {\n var _this = this;\n this._setOptions(function () {\n _this._chartStore.setStyles(value);\n });\n };\n ChartImp.prototype.getStyles = function () {\n return this._chartStore.getStyles();\n };\n ChartImp.prototype.setFormatter = function (formatter) {\n var _this = this;\n this._setOptions(function () {\n _this._chartStore.setFormatter(formatter);\n });\n };\n ChartImp.prototype.getFormatter = function () {\n return this._chartStore.getFormatter();\n };\n ChartImp.prototype.setLocale = function (locale) {\n var _this = this;\n this._setOptions(function () {\n _this._chartStore.setLocale(locale);\n });\n };\n ChartImp.prototype.getLocale = function () {\n return this._chartStore.getLocale();\n };\n ChartImp.prototype.setTimezone = function (timezone) {\n var _this = this;\n this._setOptions(function () {\n _this._chartStore.setTimezone(timezone);\n });\n };\n ChartImp.prototype.getTimezone = function () {\n return this._chartStore.getTimezone();\n };\n ChartImp.prototype.setThousandsSeparator = function (thousandsSeparator) {\n var _this = this;\n this._setOptions(function () {\n _this._chartStore.setThousandsSeparator(thousandsSeparator);\n });\n };\n ChartImp.prototype.getThousandsSeparator = function () {\n return this._chartStore.getThousandsSeparator();\n };\n ChartImp.prototype.setDecimalFold = function (decimalFold) {\n var _this = this;\n this._setOptions(function () {\n _this._chartStore.setDecimalFold(decimalFold);\n });\n };\n ChartImp.prototype.getDecimalFold = function () {\n return this._chartStore.getDecimalFold();\n };\n ChartImp.prototype.setHotkey = function (hotkey) {\n this._chartStore.setHotkey(hotkey);\n };\n ChartImp.prototype.getHotkey = function () {\n return this._chartStore.getHotkey();\n };\n ChartImp.prototype.getHotKey = function () {\n return this._chartStore.getHotKey();\n };\n ChartImp.prototype._setOptions = function (fuc) {\n fuc();\n this.layout({\n measureHeight: true,\n measureWidth: true,\n update: true,\n buildYAxisTick: true,\n forceBuildYAxisTick: true\n });\n };\n ChartImp.prototype.setOffsetRightDistance = function (distance) {\n this._chartStore.setOffsetRightDistance(distance, true);\n };\n ChartImp.prototype.getOffsetRightDistance = function () {\n return this._chartStore.getOffsetRightDistance();\n };\n ChartImp.prototype.setMaxOffsetLeftDistance = function (distance) {\n if (distance < 0) {\n logWarn('setMaxOffsetLeftDistance', 'distance', 'distance must greater than zero!!!');\n return;\n }\n this._chartStore.setMaxOffsetLeftDistance(distance);\n };\n ChartImp.prototype.setMaxOffsetRightDistance = function (distance) {\n if (distance < 0) {\n logWarn('setMaxOffsetRightDistance', 'distance', 'distance must greater than zero!!!');\n return;\n }\n this._chartStore.setMaxOffsetRightDistance(distance);\n };\n ChartImp.prototype.setLeftMinVisibleBarCount = function (barCount) {\n if (barCount < 0) {\n logWarn('setLeftMinVisibleBarCount', 'barCount', 'barCount must greater than zero!!!');\n return;\n }\n this._chartStore.setLeftMinVisibleBarCount(Math.ceil(barCount));\n };\n ChartImp.prototype.setRightMinVisibleBarCount = function (barCount) {\n if (barCount < 0) {\n logWarn('setRightMinVisibleBarCount', 'barCount', 'barCount must greater than zero!!!');\n return;\n }\n this._chartStore.setRightMinVisibleBarCount(Math.ceil(barCount));\n };\n ChartImp.prototype.setBarSpace = function (space) {\n this._chartStore.setBarSpace(space);\n };\n ChartImp.prototype.getBarSpace = function () {\n return this._chartStore.getBarSpace();\n };\n ChartImp.prototype.getVisibleRange = function () {\n return this._chartStore.getVisibleRange();\n };\n ChartImp.prototype._removeOrphanYAxes = function () {\n var _this = this;\n var changed = false;\n this._drawPanes.forEach(function (pane) {\n var paneId = pane.getId();\n if (paneId === PaneIdConstants.X_AXIS) {\n return;\n }\n var usedYAxisIds = new Set();\n var defaultYAxisId = pane.getDefaultYAxisId();\n if (isValid(defaultYAxisId)) {\n usedYAxisIds.add(defaultYAxisId);\n }\n _this._chartStore.getIndicatorsByPaneId(paneId).forEach(function (indicator) {\n usedYAxisIds.add(indicator.yAxisId);\n });\n pane.getYAxisComponents().forEach(function (yAxis) {\n if (!usedYAxisIds.has(yAxis.id) && !pane.isManualYAxis(yAxis.id)) {\n changed = pane.removeYAxis(yAxis.id) || changed;\n }\n });\n });\n return changed;\n };\n ChartImp.prototype._createOrUseIndicatorYAxis = function (pane, yAxisId) {\n var changed = false;\n if (!pane.hasYAxisComponent(yAxisId)) {\n pane.createOrOverrideYAxis(__assign(__assign({}, this._chartStore.getLayoutOptions().yAxis), { id: yAxisId }));\n changed = true;\n }\n if (pane.isManualYAxis(yAxisId)) {\n pane.setManualYAxis(yAxisId, false);\n changed = true;\n }\n return changed;\n };\n ChartImp.prototype.resetData = function () {\n this._chartStore.resetData();\n };\n ChartImp.prototype.getDataList = function () {\n return this._chartStore.getDataList();\n };\n ChartImp.prototype.setDataLoader = function (dataLoader) {\n this._resetYAxisAutoCalcTickFlag();\n this._chartStore.setDataLoader(dataLoader);\n };\n ChartImp.prototype.createIndicator = function (value, isStack) {\n var _a, _b, _c, _d;\n var indicator = isString(value) ? { name: value } : value;\n if (getIndicatorClass(indicator.name) === null) {\n logWarn('createIndicator', 'value', 'indicator not supported, you may need to use registerIndicator to add one!!!');\n return null;\n }\n (_a = indicator.id) !== null && _a !== void 0 ? _a : (indicator.id = createId(\"\".concat(indicator.name, \"_\")));\n (_b = indicator.paneId) !== null && _b !== void 0 ? _b : (indicator.paneId = createId(PaneIdConstants.INDICATOR));\n var indicatorPane = this.getDrawPaneById(indicator.paneId);\n (_c = indicator.yAxisId) !== null && _c !== void 0 ? _c : (indicator.yAxisId = (_d = indicatorPane === null || indicatorPane === void 0 ? void 0 : indicatorPane.getDefaultYAxisId()) !== null && _d !== void 0 ? _d : createId(Y_AXIS_ID_PREFIX));\n var result = this._chartStore.addIndicator(indicator, isStack !== null && isStack !== void 0 ? isStack : false);\n if (result) {\n var shouldSort = false;\n var pane = this.getDrawPaneById(indicator.paneId);\n if (!isValid(pane)) {\n pane = this._createPane(IndicatorPane, __assign(__assign({}, this._chartStore.getLayoutOptions().pane), { id: indicator.paneId }));\n shouldSort = true;\n }\n this._createOrUseIndicatorYAxis(pane, indicator.yAxisId);\n this._removeOrphanYAxes();\n this.layout({\n sort: shouldSort,\n measureHeight: true,\n measureWidth: true,\n update: true,\n buildYAxisTick: true,\n forceBuildYAxisTick: true\n });\n return indicator.id;\n }\n return null;\n };\n ChartImp.prototype.overrideIndicator = function (override) {\n var _this = this;\n var filterIndicators = this._chartStore.getIndicatorsByFilter(override);\n if (filterIndicators.length === 0) {\n return false;\n }\n var updated = this._chartStore.overrideIndicator(override);\n filterIndicators.forEach(function (indicator) {\n var pane = _this.getDrawPaneById(indicator.paneId);\n if (isValid(pane)) {\n updated = _this._createOrUseIndicatorYAxis(pane, indicator.yAxisId) || updated;\n }\n });\n if (updated) {\n this._removeOrphanYAxes();\n this.layout({\n measureWidth: true,\n update: true,\n buildYAxisTick: true,\n forceBuildYAxisTick: true\n });\n }\n return updated;\n };\n ChartImp.prototype.getIndicators = function (filter) {\n return this._chartStore.getIndicatorsByFilter(filter !== null && filter !== void 0 ? filter : {});\n };\n ChartImp.prototype.removeIndicator = function (filter) {\n var _this = this;\n var removed = this._chartStore.removeIndicator(filter !== null && filter !== void 0 ? filter : {});\n if (removed) {\n this._removeOrphanYAxes();\n var panesChanged_1 = false;\n var removePaneIds_1 = [];\n this._drawPanes.forEach(function (pane) {\n var paneId = pane.getId();\n if (paneId !== PaneIdConstants.X_AXIS && paneId !== PaneIdConstants.CANDLE) {\n var paneIndicators = _this._chartStore.getIndicatorsByPaneId(paneId);\n if (paneIndicators.length === 0) {\n removePaneIds_1.push(paneId);\n }\n }\n });\n removePaneIds_1.forEach(function (paneId) {\n var index = _this._drawPanes.findIndex(function (pane) { return pane.getId() === paneId; });\n var pane = _this._drawPanes[index];\n if (isValid(pane)) {\n _this._drawPanes.splice(index, 1);\n pane.destroy();\n panesChanged_1 = true;\n }\n });\n this.layout({\n sort: panesChanged_1,\n measureHeight: panesChanged_1,\n measureWidth: true,\n update: true,\n buildYAxisTick: true,\n forceBuildYAxisTick: true\n });\n }\n return removed;\n };\n ChartImp.prototype.createOverlay = function (value) {\n var _this = this;\n var overlays = [];\n var appointPaneFlags = [];\n var build = function (overlay) {\n if (!isValid(overlay.paneId) || _this.getDrawPaneById(overlay.paneId) === null) {\n overlay.paneId = PaneIdConstants.CANDLE;\n appointPaneFlags.push(false);\n }\n else {\n appointPaneFlags.push(true);\n }\n overlays.push(overlay);\n };\n if (isString(value)) {\n build({ name: value });\n }\n else if (isArray(value)) {\n value.forEach(function (v) {\n var overlay = null;\n if (isString(v)) {\n overlay = { name: v };\n }\n else {\n overlay = v;\n }\n build(overlay);\n });\n }\n else {\n build(value);\n }\n var ids = this._chartStore.addOverlays(overlays, appointPaneFlags);\n if (isArray(value)) {\n return ids;\n }\n return ids[0];\n };\n ChartImp.prototype.getOverlays = function (filter) {\n return this._chartStore.getOverlaysByFilter(filter !== null && filter !== void 0 ? filter : {});\n };\n ChartImp.prototype.overrideOverlay = function (override) {\n return this._chartStore.overrideOverlay(override);\n };\n ChartImp.prototype.removeOverlay = function (filter) {\n return this._chartStore.removeOverlay(filter !== null && filter !== void 0 ? filter : {});\n };\n ChartImp.prototype.setPaneOptions = function (options) {\n var e_1, _a;\n var _b;\n var shouldMeasureHeight = false;\n var shouldLayout = false;\n var shouldSort = false;\n var validId = isValid(options.id);\n try {\n for (var _c = __values(this._drawPanes), _d = _c.next(); !_d.done; _d = _c.next()) {\n var currentPane = _d.value;\n var currentPaneId = currentPane.getId();\n if ((validId && options.id === currentPaneId) || !validId) {\n if (currentPaneId !== PaneIdConstants.X_AXIS) {\n var currentPaneOptions = currentPane.getOptions();\n var currentState = currentPaneOptions.state;\n if (isNumber(options.height) && options.height > 0) {\n var minHeight = Math.max((_b = options.minHeight) !== null && _b !== void 0 ? _b : currentPaneOptions.minHeight, 0);\n var height = Math.max(minHeight, options.height);\n shouldLayout = true;\n shouldMeasureHeight = true;\n currentPane.setBounding({ height: height });\n }\n if (isValid(options.state)) {\n shouldLayout = true;\n shouldMeasureHeight = true;\n if (currentState === 'normal' && options.state !== 'normal') {\n currentPane.setOptions({ height: currentPane.getBounding().height });\n }\n else if (currentState !== 'normal' && options.state === 'normal' && !isNumber(options.height)) {\n currentPane.setBounding({\n height: Math.max(currentPaneOptions.minHeight, currentPaneOptions.height)\n });\n }\n }\n }\n if (isNumber(options.order)) {\n shouldLayout = true;\n shouldSort = true;\n }\n currentPane.setOptions(options);\n if (currentPaneId === options.id) {\n break;\n }\n }\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (_d && !_d.done && (_a = _c.return)) _a.call(_c);\n }\n finally { if (e_1) throw e_1.error; }\n }\n if (shouldLayout) {\n this.layout({\n sort: shouldSort,\n measureHeight: shouldMeasureHeight,\n measureWidth: true,\n update: true,\n buildYAxisTick: true,\n forceBuildYAxisTick: true\n });\n }\n };\n ChartImp.prototype.createYAxis = function (yAxis) {\n var _a, _b;\n var paneId = (_a = yAxis.paneId) !== null && _a !== void 0 ? _a : PaneIdConstants.CANDLE;\n var pane = this.getDrawPaneById(paneId);\n if (!isValid(pane) || paneId === PaneIdConstants.X_AXIS) {\n logWarn('createYAxis', 'paneId', 'pane does not exist or does not support yAxis!!!');\n return null;\n }\n var id = (_b = yAxis.id) !== null && _b !== void 0 ? _b : createId(Y_AXIS_ID_PREFIX);\n if (pane.hasYAxisComponent(id)) {\n return id;\n }\n pane.createOrOverrideYAxis(__assign(__assign(__assign({}, this._chartStore.getLayoutOptions().yAxis), yAxis), { id: id, paneId: paneId }));\n pane.setManualYAxis(id, true);\n this.layout({\n measureWidth: true,\n update: true,\n buildYAxisTick: true,\n forceBuildYAxisTick: true\n });\n return id;\n };\n ChartImp.prototype.removeYAxis = function (filter) {\n var e_2, _a;\n var id = filter.id, name = filter.name;\n if (!isValid(id) && !isValid(name)) {\n logWarn('removeYAxis', 'filter', 'id or name should not be empty!!!');\n return false;\n }\n var removed = false;\n var _loop_1 = function (yAxis) {\n var pane = this_1.getDrawPaneById(yAxis.paneId);\n if (!isValid(pane)) {\n return \"continue\";\n }\n if (pane.isDefaultYAxis(yAxis.id) && yAxis.paneId === PaneIdConstants.CANDLE) {\n return \"continue\";\n }\n var indicators = this_1._chartStore.getIndicatorsByPaneId(yAxis.paneId);\n if (indicators.some(function (indicator) { return indicator.yAxisId === yAxis.id; })) {\n return \"continue\";\n }\n removed = pane.removeYAxis(yAxis.id) || removed;\n };\n var this_1 = this;\n try {\n for (var _b = __values(this.getYAxes(filter)), _c = _b.next(); !_c.done; _c = _b.next()) {\n var yAxis = _c.value;\n _loop_1(yAxis);\n }\n }\n catch (e_2_1) { e_2 = { error: e_2_1 }; }\n finally {\n try {\n if (_c && !_c.done && (_a = _b.return)) _a.call(_b);\n }\n finally { if (e_2) throw e_2.error; }\n }\n if (removed) {\n this.layout({\n measureWidth: true,\n update: true,\n buildYAxisTick: true,\n forceBuildYAxisTick: true\n });\n }\n return removed;\n };\n ChartImp.prototype.getYAxes = function (filter) {\n var _a, _b;\n var paneId = filter.paneId, id = filter.id;\n var name = filter.name;\n var match = function (yAxis) {\n if (isValid(id)) {\n return yAxis.id === id;\n }\n return !isValid(name) || yAxis.name === name;\n };\n var yAxes = [];\n if (isValid(paneId)) {\n yAxes = yAxes.concat((_b = (_a = this.getDrawPaneById(paneId)) === null || _a === void 0 ? void 0 : _a.getYAxisComponents().filter(match)) !== null && _b !== void 0 ? _b : []);\n }\n else {\n this._drawPanes.forEach(function (pane) {\n if (pane.getId() !== PaneIdConstants.X_AXIS) {\n yAxes = yAxes.concat(pane.getYAxisComponents().filter(match));\n }\n });\n }\n return yAxes;\n };\n ChartImp.prototype.overrideYAxis = function (yAxis) {\n var _this = this;\n var filterYAxes = this.getYAxes({ paneId: yAxis.paneId, id: yAxis.id });\n if (filterYAxes.length === 0) {\n return;\n }\n filterYAxes.forEach(function (axis) {\n var _a;\n (_a = _this.getDrawPaneById(axis.paneId)) === null || _a === void 0 ? void 0 : _a.createOrOverrideYAxis(__assign(__assign({}, yAxis), { id: axis.id }));\n });\n this.layout({\n measureWidth: true,\n update: true,\n buildYAxisTick: true,\n forceBuildYAxisTick: true\n });\n };\n ChartImp.prototype.overrideXAxis = function (xAxis) {\n this._xAxisPane.overrideXAxis(xAxis);\n this.layout({\n measureHeight: true,\n update: true,\n buildYAxisTick: true,\n forceBuildYAxisTick: true\n });\n };\n ChartImp.prototype.getPaneOptions = function (id) {\n var _a;\n if (isValid(id)) {\n var pane = this.getDrawPaneById(id);\n return (_a = pane === null || pane === void 0 ? void 0 : pane.getOptions()) !== null && _a !== void 0 ? _a : null;\n }\n return this._drawPanes.map(function (pane) { return pane.getOptions(); });\n };\n ChartImp.prototype.setZoomEnabled = function (enabled) {\n this._chartStore.setZoomEnabled(enabled);\n };\n ChartImp.prototype.isZoomEnabled = function () {\n return this._chartStore.isZoomEnabled();\n };\n ChartImp.prototype.setZoomAnchor = function (anchor) {\n this._chartStore.setZoomAnchor(anchor);\n };\n ChartImp.prototype.getZoomAnchor = function () {\n return this._chartStore.getZoomAnchor();\n };\n ChartImp.prototype.setScrollEnabled = function (enabled) {\n this._chartStore.setScrollEnabled(enabled);\n };\n ChartImp.prototype.isScrollEnabled = function () {\n return this._chartStore.isScrollEnabled();\n };\n ChartImp.prototype.scrollByDistance = function (distance, animationDuration) {\n var _this = this;\n var duration = isNumber(animationDuration) && animationDuration > 0 ? animationDuration : 0;\n this._chartStore.startScroll();\n if (duration > 0) {\n var animation = new Animation({ duration: duration });\n animation.doFrame(function (frameTime) {\n var progressDistance = distance * (frameTime / duration);\n _this._chartStore.scroll(progressDistance);\n });\n animation.start();\n }\n else {\n this._chartStore.scroll(distance);\n }\n };\n ChartImp.prototype.scrollToRealTime = function (animationDuration) {\n var barSpace = this._chartStore.getBarSpace().bar;\n var difBarCount = this._chartStore.getLastBarRightSideDiffBarCount() - this._chartStore.getInitialOffsetRightDistance() / barSpace;\n var distance = difBarCount * barSpace;\n this.scrollByDistance(distance, animationDuration);\n };\n ChartImp.prototype.scrollToDataIndex = function (dataIndex, animationDuration) {\n var distance = (this._chartStore.getLastBarRightSideDiffBarCount() + (this.getDataList().length - 1 - dataIndex)) * this._chartStore.getBarSpace().bar;\n this.scrollByDistance(distance, animationDuration);\n };\n ChartImp.prototype.scrollToTimestamp = function (timestamp, animationDuration) {\n var dataIndex = binarySearchNearest(this.getDataList(), 'timestamp', timestamp);\n this.scrollToDataIndex(dataIndex, animationDuration);\n };\n ChartImp.prototype.zoomAtCoordinate = function (scale, coordinate, animationDuration) {\n var _this = this;\n var duration = isNumber(animationDuration) && animationDuration > 0 ? animationDuration : 0;\n var barSpace = this._chartStore.getBarSpace().bar;\n var scaleBarSpace = barSpace * scale;\n var difSpace = scaleBarSpace - barSpace;\n if (duration > 0) {\n var prevProgressBarSpace_1 = 0;\n var animation = new Animation({ duration: duration });\n animation.doFrame(function (frameTime) {\n var progressBarSpace = difSpace * (frameTime / duration);\n var scale = ((progressBarSpace - prevProgressBarSpace_1) / _this._chartStore.getBarSpace().bar) * SCALE_MULTIPLIER;\n _this._chartStore.zoom(scale, coordinate !== null && coordinate !== void 0 ? coordinate : null, 'main');\n prevProgressBarSpace_1 = progressBarSpace;\n });\n animation.start();\n }\n else {\n this._chartStore.zoom((difSpace / barSpace) * SCALE_MULTIPLIER, coordinate !== null && coordinate !== void 0 ? coordinate : null, 'main');\n }\n };\n ChartImp.prototype.zoomAtDataIndex = function (scale, dataIndex, animationDuration) {\n var x = this._chartStore.dataIndexToCoordinate(dataIndex);\n this.zoomAtCoordinate(scale, { x: x, y: 0 }, animationDuration);\n };\n ChartImp.prototype.zoomAtTimestamp = function (scale, timestamp, animationDuration) {\n var dataIndex = binarySearchNearest(this.getDataList(), 'timestamp', timestamp);\n this.zoomAtDataIndex(scale, dataIndex, animationDuration);\n };\n ChartImp.prototype.convertToPixel = function (points, filter) {\n var _this = this;\n var _a;\n var _b = filter !== null && filter !== void 0 ? filter : {}, _c = _b.paneId, paneId = _c === void 0 ? PaneIdConstants.CANDLE : _c, yAxisId = _b.yAxisId, _d = _b.absolute, absolute = _d === void 0 ? false : _d;\n var coordinates = [];\n if (paneId !== PaneIdConstants.X_AXIS) {\n var pane = this.getDrawPaneById(paneId);\n if (pane !== null) {\n var bounding_1 = pane.getBounding();\n var ps = [];\n ps = ps.concat(points);\n var xAxis_1 = this._xAxisPane.getXAxisComponent();\n var yAxis_1 = pane.getYAxisComponentById(yAxisId);\n coordinates = ps.map(function (point) {\n var coordinate = {};\n var dataIndex = point.dataIndex;\n if (isNumber(point.timestamp)) {\n dataIndex = _this._chartStore.timestampToDataIndex(point.timestamp);\n }\n if (isNumber(dataIndex)) {\n coordinate.x = xAxis_1.convertToPixel(dataIndex);\n }\n if (isNumber(point.value)) {\n var y = yAxis_1.convertToPixel(point.value);\n coordinate.y = absolute ? bounding_1.top + y : y;\n }\n return coordinate;\n });\n }\n }\n return isArray(points) ? coordinates : ((_a = coordinates[0]) !== null && _a !== void 0 ? _a : {});\n };\n ChartImp.prototype.convertFromPixel = function (coordinates, filter) {\n var _this = this;\n var _a;\n var _b = filter !== null && filter !== void 0 ? filter : {}, _c = _b.paneId, paneId = _c === void 0 ? PaneIdConstants.CANDLE : _c, yAxisId = _b.yAxisId, _d = _b.absolute, absolute = _d === void 0 ? false : _d;\n var points = [];\n if (paneId !== PaneIdConstants.X_AXIS) {\n var pane = this.getDrawPaneById(paneId);\n if (pane !== null) {\n var bounding_2 = pane.getBounding();\n var cs = [];\n cs = cs.concat(coordinates);\n var xAxis_2 = this._xAxisPane.getXAxisComponent();\n var yAxis_2 = pane.getYAxisComponentById(yAxisId);\n points = cs.map(function (coordinate) {\n var _a;\n var point = {};\n if (isNumber(coordinate.x)) {\n var dataIndex = xAxis_2.convertFromPixel(coordinate.x);\n point.dataIndex = dataIndex;\n point.timestamp = (_a = _this._chartStore.dataIndexToTimestamp(dataIndex)) !== null && _a !== void 0 ? _a : undefined;\n }\n if (isNumber(coordinate.y)) {\n var y = absolute ? coordinate.y - bounding_2.top : coordinate.y;\n point.value = yAxis_2.convertFromPixel(y);\n }\n return point;\n });\n }\n }\n return isArray(coordinates) ? points : ((_a = points[0]) !== null && _a !== void 0 ? _a : {});\n };\n ChartImp.prototype.executeAction = function (type, data) {\n var _a;\n switch (type) {\n case 'onCrosshairChange': {\n var crosshair = null;\n if (isValid(data)) {\n crosshair = __assign({}, data);\n (_a = crosshair.paneId) !== null && _a !== void 0 ? _a : (crosshair.paneId = PaneIdConstants.CANDLE);\n }\n this._chartStore.setCrosshair(crosshair, { notExecuteAction: true });\n break;\n }\n }\n };\n ChartImp.prototype.subscribeAction = function (type, callback) {\n this._chartStore.subscribeAction(type, callback);\n };\n ChartImp.prototype.unsubscribeAction = function (type, callback) {\n this._chartStore.unsubscribeAction(type, callback);\n };\n ChartImp.prototype.getConvertPictureUrl = function (includeOverlay, type, backgroundColor) {\n var _this = this;\n var _a = this._chartBounding, width = _a.width, height = _a.height;\n var canvas = createDom('canvas', {\n width: \"\".concat(width, \"px\"),\n height: \"\".concat(height, \"px\"),\n boxSizing: 'border-box'\n });\n var ctx = canvas.getContext('2d');\n var pixelRatio = getPixelRatio(canvas);\n canvas.width = width * pixelRatio;\n canvas.height = height * pixelRatio;\n ctx.scale(pixelRatio, pixelRatio);\n ctx.fillStyle = backgroundColor !== null && backgroundColor !== void 0 ? backgroundColor : '#FFFFFF';\n ctx.fillRect(0, 0, width, height);\n var overlayFlag = includeOverlay !== null && includeOverlay !== void 0 ? includeOverlay : false;\n this._drawPanes.forEach(function (pane) {\n var separatorPane = _this._separatorPanes.get(pane);\n if (isValid(separatorPane)) {\n var separatorBounding = separatorPane.getBounding();\n ctx.drawImage(separatorPane.getImage(overlayFlag), separatorBounding.left, separatorBounding.top, separatorBounding.width, separatorBounding.height);\n }\n var bounding = pane.getBounding();\n ctx.drawImage(pane.getImage(overlayFlag), 0, bounding.top, width, bounding.height);\n });\n return canvas.toDataURL(\"image/\".concat(type !== null && type !== void 0 ? type : 'jpeg'));\n };\n ChartImp.prototype.resize = function () {\n this._cacheChartBounding();\n this.layout({\n measureHeight: true,\n measureWidth: true,\n secondMeasureWidth: true,\n update: true,\n buildYAxisTick: true,\n forceBuildYAxisTick: true\n });\n };\n ChartImp.prototype.destroy = function () {\n if (this._resizeRequestAnimationId !== DEFAULT_REQUEST_ID) {\n cancelAnimationFrame(this._resizeRequestAnimationId);\n this._resizeRequestAnimationId = DEFAULT_REQUEST_ID;\n }\n if (isValid(this._resizeObserver)) {\n this._resizeObserver.disconnect();\n this._resizeObserver = null;\n }\n else {\n window.removeEventListener('resize', this._scheduleResize);\n }\n this._chartEvent.destroy();\n this._drawPanes.forEach(function (pane) {\n pane.destroy();\n });\n this._drawPanes = [];\n this._separatorPanes.clear();\n this._chartStore.destroy();\n this._container.removeChild(this._chartContainer);\n };\n return ChartImp;\n}());\n\n/**\n * ___ ___ ___ ___ ___ ___ ___ ___ ___\n * /\\__\\ /\\__\\ ___ /\\__\\ /\\ \\ /\\ \\ /\\__\\ /\\ \\ /\\ \\ /\\ \\\n * /:/ / /:/ / /\\ \\ /::| | /::\\ \\ /::\\ \\ /:/ / /::\\ \\ /::\\ \\ \\:\\ \\\n * /:/__/ /:/ / \\:\\ \\ /:|:| | /:/\\:\\ \\ /:/\\:\\ \\ /:/__/ /:/\\:\\ \\ /:/\\:\\ \\ \\:\\ \\\n * /::\\__\\____ /:/ / /::\\__\\ /:/|:| |__ /::\\~\\:\\ \\ /:/ \\:\\ \\ /::\\ \\ ___ /::\\~\\:\\ \\ /::\\~\\:\\ \\ /::\\ \\\n * /:/\\:::::\\__\\ /:/__/ __/:/\\/__/ /:/ |:| /\\__\\ /:/\\:\\ \\:\\__\\ /:/__/ \\:\\__\\ /:/\\:\\ /\\__\\ /:/\\:\\ \\:\\__\\ /:/\\:\\ \\:\\__\\ /:/\\:\\__\\\n * \\/_|:|~~|~ \\:\\ \\ /\\/:/ / \\/__|:|/:/ / \\:\\~\\:\\ \\/__/ \\:\\ \\ \\/__/ \\/__\\:\\/:/ / \\/__\\:\\/:/ / \\/_|::\\/:/ / /:/ \\/__/\n * |:| | \\:\\ \\ \\::/__/ |:/:/ / \\:\\ \\:\\__\\ \\:\\ \\ \\::/ / \\::/ / |:|::/ / /:/ /\n * |:| | \\:\\ \\ \\:\\__\\ |::/ / \\:\\ \\/__/ \\:\\ \\ /:/ / /:/ / |:|\\/__/ \\/__/\n * |:| | \\:\\__\\ \\/__/ /:/ / \\:\\__\\ \\:\\__\\ /:/ / /:/ / |:| |\n * \\|__| \\/__/ \\/__/ \\/__/ \\/__/ \\/__/ \\/__/ \\|__|\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n\n * http://www.apache.org/licenses/LICENSE-2.0\n\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar charts = new Map();\nvar chartBaseId = 1;\n/**\n * Chart version\n * @return {string}\n */\nfunction version() {\n return '10.0.3';\n}\n/**\n * Init chart instance\n * @param ds\n * @param options\n * @returns {Chart}\n */\nfunction init(ds, options) {\n var _a;\n logTag();\n var dom = null;\n if (isString(ds)) {\n dom = document.getElementById(ds);\n }\n else {\n dom = ds;\n }\n if (dom === null) {\n logError('', '', 'The chart cannot be initialized correctly. Please check the parameters. The chart container cannot be null and child elements need to be added!!!');\n return null;\n }\n var chart = charts.get((_a = dom.getAttribute('k-line-chart-id')) !== null && _a !== void 0 ? _a : '');\n if (isValid(chart)) {\n logWarn('', '', 'The chart has been initialized on the dom!!!');\n return chart;\n }\n var id = \"k_line_chart_\".concat(chartBaseId++);\n chart = new ChartImp(dom, options);\n chart.id = id;\n dom.setAttribute('k-line-chart-id', id);\n charts.set(id, chart);\n return chart;\n}\n/**\n * Destroy chart instance\n * @param dcs\n */\nfunction dispose(dcs) {\n var _a, _b;\n var id = null;\n if (dcs instanceof ChartImp) {\n id = dcs.id;\n }\n else {\n var dom = null;\n if (isString(dcs)) {\n dom = document.getElementById(dcs);\n }\n else {\n dom = dcs;\n }\n id = (_a = dom === null || dom === void 0 ? void 0 : dom.getAttribute('k-line-chart-id')) !== null && _a !== void 0 ? _a : null;\n }\n if (id !== null) {\n (_b = charts.get(id)) === null || _b === void 0 ? void 0 : _b.destroy();\n charts.delete(id);\n }\n}\nvar utils = {\n clone: clone,\n merge: merge,\n isString: isString,\n isNumber: isNumber,\n isValid: isValid,\n isObject: isObject,\n isArray: isArray,\n isFunction: isFunction,\n isBoolean: isBoolean,\n formatValue: formatValue,\n formatPrecision: formatPrecision,\n formatBigNumber: formatBigNumber,\n formatDate: formatTimestampByTemplate,\n formatThousands: formatThousands,\n formatFoldDecimal: formatFoldDecimal,\n calcTextWidth: calcTextWidth,\n getLinearSlopeIntercept: getLinearSlopeIntercept,\n getLinearYFromSlopeIntercept: getLinearYFromSlopeIntercept,\n getLinearYFromCoordinates: getLinearYFromCoordinates,\n checkCoordinateOnArc: checkCoordinateOnArc,\n checkCoordinateOnCircle: checkCoordinateOnCircle,\n checkCoordinateOnLine: checkCoordinateOnLine,\n checkCoordinateOnPolygon: checkCoordinateOnPolygon,\n checkCoordinateOnRect: checkCoordinateOnRect,\n checkCoordinateOnText: checkCoordinateOnText\n};\n\nexport { dispose, getFigureClass, getHotkey, getOverlayClass, getSupportedFigures, getSupportedHotkeys, getSupportedIndicators, getSupportedLocales, getSupportedOverlays, init, registerFigure, registerHotkey, registerIndicator, registerLocale, registerOverlay, registerStyles, registerXAxis, registerYAxis, utils, version };\n","import type { DeepPartial, Styles } from \"klinecharts\";\nimport type { Theme } from \"./types\";\n\n// --- named custom-theme registry (issue #46) --------------------------------\n// Beyond the built-in \"dark\"/\"light\", hosts can register named palette themes\n// (a KLineChart style object) and select them via <SonrChart theme=\"name\"> or\n// the `customThemes` prop. The registry is module-global (shared by every chart\n// in the app), mirroring how KLineChart registers indicators/overlays.\nconst THEME_REGISTRY = new Map<string, DeepPartial<Styles>>();\n\n/** Register a named theme's style object so `theme=\"<name>\"` applies it. */\nexport function registerTheme(name: string, styles: DeepPartial<Styles>): void {\n THEME_REGISTRY.set(name, styles);\n}\n\n/** Look up a previously registered theme's styles (undefined if unknown). */\nexport function getRegisteredTheme(name: string): DeepPartial<Styles> | undefined {\n return THEME_REGISTRY.get(name);\n}\n\n// Sonr console palette. Up = green, down = red, neutrals biased slightly cool.\nconst GREEN = \"#35c98d\";\nconst RED = \"#ff6a76\";\n\nconst DARK = {\n text: \"#e6ebe9\",\n muted: \"#78828e\",\n grid: \"#1d232b\",\n axis: \"#1d232b\",\n // Crosshair axis-label pill (time on x, price on y) — a solid dark chip.\n pill: \"#2a2f38\",\n pillText: \"#e6ebe9\",\n};\n\nconst LIGHT = {\n text: \"#1a1f29\",\n muted: \"#5c6675\",\n grid: \"#d8dee8\",\n axis: \"#d8dee8\",\n // A dark chip with light text reads clearly over a light chart (as TV does).\n pill: \"#2b313c\",\n pillText: \"#ffffff\",\n};\n\n/**\n * KLineChart style object for a theme. Deliberately limited to the style keys\n * that typecheck cleanly under klinecharts v10 (grid, candle bars, axes,\n * crosshair line) — callers can override anything via the `styles` prop.\n */\nexport function themeStyles(theme: Theme): DeepPartial<Styles> {\n const c = theme === \"dark\" ? DARK : LIGHT;\n return {\n grid: {\n horizontal: { color: c.grid },\n vertical: { color: c.grid },\n },\n candle: {\n bar: {\n upColor: GREEN,\n downColor: RED,\n noChangeColor: c.muted,\n upBorderColor: GREEN,\n downBorderColor: RED,\n upWickColor: GREEN,\n downWickColor: RED,\n },\n },\n xAxis: { tickText: { color: c.muted }, axisLine: { color: c.axis } },\n yAxis: { tickText: { color: c.muted }, axisLine: { color: c.axis } },\n crosshair: {\n // Floating axis-label pills that follow the pointer, TradingView-style:\n // the hovered bar's time on the x-axis, the pointer's price on the y-axis.\n horizontal: {\n line: { color: c.muted },\n text: {\n show: true,\n color: c.pillText,\n backgroundColor: c.pill,\n borderColor: c.pill,\n borderRadius: 2,\n paddingLeft: 6,\n paddingRight: 6,\n paddingTop: 4,\n paddingBottom: 4,\n size: 11,\n },\n },\n vertical: {\n line: { color: c.muted },\n text: {\n show: true,\n color: c.pillText,\n backgroundColor: c.pill,\n borderColor: c.pill,\n borderRadius: 2,\n paddingLeft: 6,\n paddingRight: 6,\n paddingTop: 4,\n paddingBottom: 4,\n size: 11,\n },\n },\n },\n };\n}\n\nexport const PALETTE = { GREEN, RED, DARK, LIGHT };\n\n// One-level merge so a (possibly partial) custom theme layers over a base,\n// filling in the crosshair pills / candle bars a terse palette leaves out.\n// Kept local so theme.ts stays free of React/component imports.\nfunction shallowMerge(base: DeepPartial<Styles>, over: DeepPartial<Styles>): DeepPartial<Styles> {\n const out: Record<string, unknown> = { ...base };\n for (const k of Object.keys(over)) {\n const b = (base as Record<string, unknown>)[k];\n const o = (over as Record<string, unknown>)[k];\n out[k] = b && o && typeof b === \"object\" && typeof o === \"object\" ? { ...(b as object), ...(o as object) } : o;\n }\n return out as DeepPartial<Styles>;\n}\n\n/**\n * Resolve a theme selector to a KLineChart style object (issue #46).\n * \"dark\"/\"light\" use the built-ins unchanged. Any other string is looked up in\n * `customThemes` first, then the module registry; a match layers over the dark\n * base so partial palettes still get sensible crosshair/candle defaults. An\n * unknown name falls back to the dark theme.\n */\nexport function resolveThemeStyles(theme: Theme | string, customThemes?: Record<string, DeepPartial<Styles>>): DeepPartial<Styles> {\n if (theme === \"dark\" || theme === \"light\") return themeStyles(theme);\n const custom = customThemes?.[theme] ?? getRegisteredTheme(theme);\n if (custom) return shallowMerge(themeStyles(\"dark\"), custom);\n return themeStyles(\"dark\");\n}\n","import { registerIndicator } from \"klinecharts\";\nimport type { PatternMarker } from \"./types\";\n\n// Sonr's own custom KLineChart indicators (issues #5 and #10). Registered once\n// at module load — registerIndicator is global to KLineChart, so the guard\n// keeps repeat imports/HMR from double-registering.\n//\n// Performance: the classification/marker logic is kept out of the per-frame\n// `draw` path. Session classification runs in `calc` (only when data changes)\n// and is read back from the indicator's result; the ET offset is cached per\n// UTC hour so it costs one Intl call per hour of data, then pure arithmetic.\n\nexport const SESSION_INDICATOR = \"SONR_SESSION\";\nexport const PATTERN_INDICATOR = \"SONR_PATTERNS\";\nexport const WATERMARK_INDICATOR = \"SONR_WATERMARK\";\nexport const SERIES_INDICATOR = \"SONR_SERIES\";\nexport const VWAP_INDICATOR = \"VWAP\";\n\n/**\n * Draw order for the layers that share the main candle pane. KLineChart draws\n * an indicator with `zLevel < 0` BEHIND the candles (`destination-over`) and\n * `zLevel >= 0` in front, sorting ascending within each group. So the back-to-\n * front stack is: watermark → session tint → custom price series (all behind the\n * candles), then the comparison series + the user's overlay indicators (MA, BOLL,\n * VWAP…) at the default level 0 in front of the candles, then pattern markers on\n * top of everything. User overlays keep KLineChart's default zLevel (0), so they\n * sit above the back layers and below the markers without any explicit value.\n */\nexport const Z_ORDER = {\n watermark: -3,\n session: -2,\n series: -1,\n compare: 0,\n pattern: 10,\n} as const;\n\n/** Config for the custom series renderer (line/step/baseline/column/hlc/high_low). */\nexport interface SeriesData {\n style: \"line\" | \"step\" | \"baseline\" | \"column\" | \"hlc\" | \"high_low\";\n up: string;\n down: string;\n neutral: string;\n baseline?: number;\n}\n\n/** Background watermark content (the underlaid ticker + interval). */\nexport interface WatermarkData {\n title: string;\n subtitle?: string;\n color: string;\n}\n\n// A distinct, theme-agnostic line color for VWAP (violet) so it reads apart from\n// MAs, order lines (amber), and price lines (blue).\nconst VWAP_COLOR = \"#a970ff\";\n\ntype VwapBar = { timestamp: number; high: number; low: number; close: number; volume?: number };\n\n/** Volume-weighted average price, anchored to the ET trading day (resets at ET\n * midnight). Pure cumulative arithmetic — one pass, no allocation beyond the\n * result. Falls back to the typical price on a zero-volume bar. */\nexport function computeVWAP(dataList: VwapBar[]): Array<{ vwap: number }> {\n let day = Number.NaN;\n let pv = 0;\n let vol = 0;\n return dataList.map((d) => {\n const idx = etDayIndex(d.timestamp);\n if (idx !== day) {\n day = idx;\n pv = 0;\n vol = 0;\n }\n const typical = (d.high + d.low + d.close) / 3;\n const v = d.volume ?? 0;\n pv += typical * v;\n vol += v;\n return { vwap: vol > 0 ? pv / vol : typical };\n });\n}\n\nlet _registered = false;\n\n// --- ET session detection ----------------------------------------------------\n\nconst _etFmt = new Intl.DateTimeFormat(\"en-US\", {\n timeZone: \"America/New_York\",\n hour: \"2-digit\",\n minute: \"2-digit\",\n hourCycle: \"h23\",\n});\n\n// ET-minus-UTC offset in minutes, cached per UTC hour. DST transitions land on\n// a UTC-hour boundary, so the offset is constant within each bucket — correct\n// year-round while collapsing ~all timestamps to arithmetic after the first\n// Intl call per hour. (Verified: 0 mismatches vs a pure-Intl classifier across\n// a full year; ~70x faster in the hot path.)\nconst _offsetCache = new Map<number, number>();\n\nfunction etOffsetMinutes(timeMs: number): number {\n const bucket = Math.floor(timeMs / 3_600_000);\n const cached = _offsetCache.get(bucket);\n if (cached !== undefined) return cached;\n const p = _etFmt.formatToParts(new Date(timeMs));\n const eh = Number(p.find((x) => x.type === \"hour\")?.value ?? \"0\");\n const em = Number(p.find((x) => x.type === \"minute\")?.value ?? \"0\");\n const d = new Date(timeMs);\n let diff = eh * 60 + em - (d.getUTCHours() * 60 + d.getUTCMinutes());\n if (diff > 720) diff -= 1440;\n if (diff < -720) diff += 1440;\n // Bound the cache: an intraday chart needs ~24 entries; keep it from growing\n // without limit on very long daily histories.\n if (_offsetCache.size > 4096) _offsetCache.clear();\n _offsetCache.set(bucket, diff);\n return diff;\n}\n\n/** ET calendar-day index (days since epoch, in America/New_York). VWAP anchors\n * its cumulative sums to this so it resets at ET midnight, each trading day. */\nexport function etDayIndex(timeMs: number): number {\n return Math.floor((Math.floor(timeMs / 60_000) + etOffsetMinutes(timeMs)) / 1440);\n}\n\nexport type Session = \"pre\" | \"regular\" | \"post\" | \"closed\";\n\n/** Classify a UTC epoch-ms timestamp into a US-equities session (ET, DST-aware). */\nexport function etSession(timeMs: number): Session {\n const total = Math.floor(timeMs / 60_000) + etOffsetMinutes(timeMs);\n const mins = ((total % 1440) + 1440) % 1440;\n if (mins >= 240 && mins < 570) return \"pre\"; // 04:00–09:30\n if (mins >= 570 && mins < 960) return \"regular\"; // 09:30–16:00\n if (mins >= 960 && mins < 1200) return \"post\"; // 16:00–20:00\n return \"closed\";\n}\n\nexport interface SessionColors {\n premarket: string;\n afterhours: string;\n}\n\nexport const DEFAULT_SESSION_COLORS: SessionColors = {\n premarket: \"rgba(125, 147, 232, 0.07)\", // cool blue\n afterhours: \"rgba(224, 163, 60, 0.07)\", // amber\n};\n\n// Session codes stored per bar by calc, read by draw. Small ints keep the\n// result array compact.\nconst SESSION_CODE: Record<Session, number> = { pre: 1, regular: 0, post: 2, closed: -1 };\n\n// --- registration ------------------------------------------------------------\n\nexport function registerSonrIndicators(): void {\n if (_registered) return;\n _registered = true;\n\n // Session tinting. calc (data-change only) precomputes the session code per\n // bar; draw reads it back and only paints the visible range.\n registerIndicator<{ s: number }, unknown, SessionColors>({\n name: SESSION_INDICATOR,\n shortName: \"\",\n series: \"price\",\n figures: [],\n calc: (dataList) => dataList.map((d) => ({ s: SESSION_CODE[etSession(d.timestamp)] })),\n draw: ({ ctx, chart, indicator, bounding, xAxis }) => {\n const colors = (indicator.extendData as SessionColors) || DEFAULT_SESSION_COLORS;\n const result = indicator.result as Array<{ s: number }>;\n const data = chart.getDataList();\n const n = data.length;\n if (n === 0 || result.length === 0) return false;\n\n // Only walk the visible bars (+1 margin) — during a zoom-in this is a\n // handful instead of the whole history.\n const range = chart.getVisibleRange();\n const from = Math.max(0, (range?.from ?? 0) - 1);\n const to = Math.min(n - 1, (range?.to ?? n - 1));\n if (to < from) return false;\n\n const top = bounding.top ?? 0;\n const h = bounding.height;\n const colorFor = (code: number) => (code === 1 ? colors.premarket : code === 2 ? colors.afterhours : null);\n\n let runStart = from;\n let runCode = result[from]?.s ?? -1;\n const flush = (endIdx: number) => {\n const c = colorFor(runCode);\n if (c) {\n const x0 = xAxis.convertTimestampToPixel(data[runStart].timestamp);\n const x1 = xAxis.convertTimestampToPixel(data[endIdx].timestamp);\n const half = endIdx > runStart ? (x1 - x0) / (endIdx - runStart) / 2 : 3;\n ctx.fillStyle = c;\n ctx.fillRect(x0 - half, top, x1 - x0 + half * 2, h);\n }\n };\n for (let i = from + 1; i <= to; i++) {\n const code = result[i]?.s ?? -1;\n if (code !== runCode) {\n flush(i - 1);\n runStart = i;\n runCode = code;\n }\n }\n flush(to);\n return false;\n },\n });\n\n // VWAP: volume-weighted average price, overlaid on the candle pane, anchored\n // to the ET trading day (resets at midnight ET, matching a standard daily\n // VWAP). Pure cumulative arithmetic in calc; KLineChart draws the line.\n registerIndicator<{ vwap: number }>({\n name: VWAP_INDICATOR,\n shortName: \"VWAP\",\n series: \"price\",\n precision: 2,\n figures: [\n {\n key: \"vwap\",\n title: \"VWAP: \",\n type: \"line\",\n // Default to the violet, but honor an override applied via\n // overrideIndicator({ name: \"VWAP\", styles: { lines: [{ color }] } }) —\n // that lands on indicator.styles.lines[0], so the settings color picker\n // recolors VWAP like any other line indicator.\n styles: ({ indicator }) => ({ color: indicator.styles?.lines?.[0]?.color ?? VWAP_COLOR }),\n },\n ],\n calc: (dataList) => computeVWAP(dataList),\n });\n\n // Symbol/interval watermark, drawn on the candle pane BEHIND the candles (same\n // background layer as the session tint). Content comes from extendData so it\n // updates the instant the ticker or interval changes.\n registerIndicator<Record<string, never>, unknown, WatermarkData>({\n name: WATERMARK_INDICATOR,\n shortName: \"\",\n series: \"price\",\n figures: [],\n calc: (dataList) => dataList.map(() => ({})),\n draw: ({ ctx, bounding, indicator }) => {\n const wm = indicator.extendData as WatermarkData | undefined;\n // The title is the primary line; if only the interval is shown it becomes\n // the primary (drawn large), so support title-only / subtitle-only / both.\n if (!wm || (!wm.title && !wm.subtitle)) return false;\n const top = bounding.top ?? 0;\n const h = bounding.height;\n const w = bounding.width;\n if (w < 40 || h < 40) return false;\n const cx = w / 2;\n const cy = top + h / 2;\n const titleSize = Math.max(20, Math.min(96, Math.min(w * 0.16, h * 0.28)));\n const primary = wm.title || (wm.subtitle as string);\n const secondary = wm.title ? wm.subtitle : \"\";\n ctx.save();\n ctx.textAlign = \"center\";\n ctx.textBaseline = \"middle\";\n ctx.fillStyle = wm.color;\n ctx.font = `700 ${titleSize}px ui-sans-serif, -apple-system, \"Segoe UI\", sans-serif`;\n ctx.fillText(primary, cx, secondary ? cy - titleSize * 0.34 : cy);\n if (secondary) {\n const subSize = titleSize * 0.48;\n ctx.font = `600 ${subSize}px ui-sans-serif, -apple-system, \"Segoe UI\", sans-serif`;\n ctx.fillText(secondary, cx, cy + subSize * 0.7);\n }\n ctx.restore();\n return false;\n },\n });\n\n // Custom series renderer (issue #33): draws line / step / baseline / column /\n // HLC / high-low on the candle pane, with the native candles hidden (SonrChart\n // sets a transparent \"area\" base when one of these styles is active). Config\n // arrives via extendData; only the visible range is walked each frame.\n registerIndicator<Record<string, never>, unknown, SeriesData>({\n name: SERIES_INDICATOR,\n shortName: \"\",\n series: \"price\",\n figures: [],\n calc: (dataList) => dataList.map(() => ({})),\n draw: ({ ctx, chart, bounding, xAxis, yAxis, indicator }) => {\n const cfg = indicator.extendData as SeriesData | undefined;\n if (!cfg || !cfg.style) return false;\n const data = chart.getDataList();\n const n = data.length;\n if (n === 0) return false;\n const range = chart.getVisibleRange();\n const from = Math.max(0, (range?.from ?? 0) - 1);\n const to = Math.min(n - 1, (range?.to ?? n - 1));\n if (to < from) return false;\n\n const x = (i: number) => xAxis.convertTimestampToPixel(data[i].timestamp);\n const yv = (v: number) => yAxis.convertToPixel(v);\n const top = bounding.top ?? 0;\n const paneBottom = top + bounding.height;\n const half = Math.max(1, chart.getBarSpace().gapBar) / 2;\n const { up, down, neutral } = cfg;\n // Colour a bar by its close vs the previous close (open on the first bar).\n const dir = (i: number) => (data[i].close >= (i > 0 ? data[i - 1].close : data[i].open) ? up : down);\n\n ctx.save();\n if (cfg.style === \"line\" || cfg.style === \"step\") {\n ctx.strokeStyle = neutral;\n ctx.lineWidth = 1.5;\n ctx.beginPath();\n let started = false;\n for (let i = from; i <= to; i++) {\n const px = x(i);\n const py = yv(data[i].close);\n if (!started) {\n ctx.moveTo(px, py);\n started = true;\n } else if (cfg.style === \"step\") {\n ctx.lineTo(px, yv(data[i - 1].close));\n ctx.lineTo(px, py);\n } else {\n ctx.lineTo(px, py);\n }\n }\n ctx.stroke();\n } else if (cfg.style === \"baseline\") {\n const base = cfg.baseline ?? data[from].close;\n ctx.lineWidth = 1.5;\n for (let i = from + 1; i <= to; i++) {\n ctx.strokeStyle = (data[i - 1].close + data[i].close) / 2 >= base ? up : down;\n ctx.beginPath();\n ctx.moveTo(x(i - 1), yv(data[i - 1].close));\n ctx.lineTo(x(i), yv(data[i].close));\n ctx.stroke();\n }\n // Dashed reference line at the baseline.\n const by = yv(base);\n ctx.strokeStyle = neutral;\n ctx.globalAlpha = 0.5;\n ctx.lineWidth = 1;\n ctx.setLineDash([3, 3]);\n ctx.beginPath();\n ctx.moveTo(x(from), by);\n ctx.lineTo(x(to), by);\n ctx.stroke();\n ctx.setLineDash([]);\n ctx.globalAlpha = 1;\n } else if (cfg.style === \"column\") {\n for (let i = from; i <= to; i++) {\n const px = x(i);\n const py = yv(data[i].close);\n ctx.fillStyle = dir(i);\n ctx.fillRect(px - half, py, half * 2, paneBottom - py);\n }\n } else {\n // hlc / high_low\n ctx.lineWidth = 1.4;\n for (let i = from; i <= to; i++) {\n const px = x(i);\n ctx.strokeStyle = dir(i);\n ctx.beginPath();\n ctx.moveTo(px, yv(data[i].high));\n ctx.lineTo(px, yv(data[i].low));\n ctx.stroke();\n if (cfg.style === \"hlc\") {\n const cy = yv(data[i].close);\n ctx.beginPath();\n ctx.moveTo(px, cy);\n ctx.lineTo(px + half, cy);\n ctx.stroke();\n }\n }\n }\n ctx.restore();\n return false;\n },\n });\n\n // Pattern-context markers. Few in number; draw reads them from extendData\n // (no per-frame getIndicators lookup) and skips anything off-screen.\n registerIndicator<Record<string, never>, unknown, PatternMarker[]>({\n name: PATTERN_INDICATOR,\n shortName: \"\",\n series: \"price\",\n figures: [],\n calc: (dataList) => dataList.map(() => ({})),\n draw: ({ ctx, indicator, bounding, xAxis }) => {\n const markers = (indicator.extendData as PatternMarker[]) || [];\n if (markers.length === 0) return false;\n const top = bounding.top ?? 0;\n const h = bounding.height;\n const w = bounding.width;\n ctx.save();\n ctx.textAlign = \"center\";\n ctx.font = \"10px ui-monospace, Menlo, monospace\";\n for (let m = 0; m < markers.length; m++) {\n const mk = markers[m];\n const x = xAxis.convertTimestampToPixel(mk.time);\n if (x < 0 || x > w) continue;\n const color = mk.color ?? (mk.kind === \"short\" ? \"#ff6a76\" : \"#35c98d\");\n const up = mk.kind !== \"short\";\n const y = up ? top + h - 16 : top + 16;\n ctx.fillStyle = color;\n ctx.beginPath();\n if (up) {\n ctx.moveTo(x, y - 6);\n ctx.lineTo(x - 5, y + 3);\n ctx.lineTo(x + 5, y + 3);\n } else {\n ctx.moveTo(x, y + 6);\n ctx.lineTo(x - 5, y - 3);\n ctx.lineTo(x + 5, y - 3);\n }\n ctx.closePath();\n ctx.fill();\n if (mk.label) ctx.fillText(mk.label, x, up ? y + 15 : y - 9);\n }\n ctx.restore();\n return false;\n },\n });\n}\n","import type { CandleType } from \"klinecharts\";\nimport type { Bar, CandleStyle } from \"./types\";\n\n// Candle rendering styles (issue #1). The native KLineChart candle types cover\n// solid / hollow / OHLC(HLC) bars / area; Heikin Ashi is a data transform\n// applied before the bars reach KLineChart.\n\n// Friendly style -> KLineChart candle.type. \"heikin_ashi\" renders as solid\n// candles over transformed data (see HaTransformer), so it maps to solid too.\n// The custom series (line/step/baseline/column/hlc/high_low) aren't native\n// KLineChart types — they map to a hidden \"area\" base while SONR_SERIES draws\n// the actual rendering on top (see CUSTOM_SERIES / indicators.ts).\nexport const CANDLE_TYPE: Record<CandleStyle, CandleType> = {\n candle: \"candle_solid\",\n hollow: \"candle_stroke\",\n hollow_up: \"candle_up_stroke\",\n ohlc: \"ohlc\",\n area: \"area\",\n heikin_ashi: \"candle_solid\",\n // Custom series use solid candles with transparent bars (fully hidden) so\n // SONR_SERIES can draw the real rendering; the type here is just the base.\n line: \"candle_solid\",\n step: \"candle_solid\",\n baseline: \"candle_solid\",\n column: \"candle_solid\",\n hlc: \"candle_solid\",\n high_low: \"candle_solid\",\n};\n\n// Styles drawn by the SONR_SERIES custom indicator over hidden native candles.\nexport const CUSTOM_SERIES = [\"line\", \"step\", \"baseline\", \"column\", \"hlc\", \"high_low\"] as const;\nexport type CustomSeriesStyle = (typeof CUSTOM_SERIES)[number];\n\nexport function isCustomSeries(style?: CandleStyle): style is CustomSeriesStyle {\n return !!style && (CUSTOM_SERIES as readonly string[]).includes(style);\n}\n\nexport function isHeikinAshi(style?: CandleStyle): boolean {\n return style === \"heikin_ashi\";\n}\n\n// Pure batch transform (historical load). haClose = (o+h+l+c)/4;\n// haOpen = mean of the previous HA open/close; high/low clamp to include them.\nexport function toHeikinAshi(bars: Bar[]): Bar[] {\n const out: Bar[] = new Array(bars.length);\n let prevOpen = 0;\n let prevClose = 0;\n for (let i = 0; i < bars.length; i++) {\n const b = bars[i];\n const haClose = (b.open + b.high + b.low + b.close) / 4;\n const haOpen = i === 0 ? (b.open + b.close) / 2 : (prevOpen + prevClose) / 2;\n out[i] = {\n time: b.time,\n open: haOpen,\n high: Math.max(b.high, haOpen, haClose),\n low: Math.min(b.low, haOpen, haClose),\n close: haClose,\n volume: b.volume,\n };\n prevOpen = haOpen;\n prevClose = haClose;\n }\n return out;\n}\n\n/**\n * Stateful Heikin Ashi transformer for the live path. `seed` primes it from the\n * loaded history; `next` converts each streamed raw bar, holding the HA open\n * steady while a bar is still forming (same timestamp) and rolling it forward\n * when a new bar begins.\n */\nexport class HaTransformer {\n private prevOpen = 0;\n private prevClose = 0;\n private curTime: number | null = null;\n private curOpen = 0;\n private curClose = 0;\n private seeded = false;\n\n seed(bars: Bar[]): void {\n if (bars.length === 0) {\n this.seeded = true;\n return;\n }\n const ha = toHeikinAshi(bars);\n const last = ha[ha.length - 1];\n // The last historical bar is treated as completed; the next live bar rolls\n // off it. Track it as \"current\" so a same-timestamp update stays consistent.\n const prev = ha.length > 1 ? ha[ha.length - 2] : last;\n this.prevOpen = prev.open;\n this.prevClose = prev.close;\n this.curTime = last.time;\n this.curOpen = last.open;\n this.curClose = last.close;\n this.seeded = true;\n }\n\n next(raw: Bar): Bar {\n if (!this.seeded) {\n // No history seeded: behave like the first bar.\n this.curOpen = (raw.open + raw.close) / 2;\n } else if (raw.time !== this.curTime) {\n // New bar: the just-finished bar's HA becomes \"previous\".\n this.prevOpen = this.curOpen;\n this.prevClose = this.curClose;\n this.curOpen = (this.prevOpen + this.prevClose) / 2;\n }\n const haClose = (raw.open + raw.high + raw.low + raw.close) / 4;\n this.curTime = raw.time;\n this.curClose = haClose;\n return {\n time: raw.time,\n open: this.curOpen,\n high: Math.max(raw.high, this.curOpen, haClose),\n low: Math.min(raw.low, this.curOpen, haClose),\n close: haClose,\n volume: raw.volume,\n };\n }\n}\n","// Resolution parsing (issue #38). A \"resolution\" is the bar interval token the\n// host passes as `interval` (e.g. \"5\", \"1H\", \"D\"). KLineChart wants a\n// {type, span} Period; this module is the single, pure place that maps arbitrary\n// resolution tokens to a Period — so hosts can pass *custom* resolutions beyond\n// the toolbar's built-in set (any span of seconds/minutes/hours/days/weeks/\n// months/years) and everything downstream (period, countdown, tooltips) follows.\n//\n// Kept side-effect-free and framework-free so it's unit-tested directly and\n// imported by `internal.ts` without pulling in React/klinecharts.\nimport type { PeriodType } from \"klinecharts\";\nimport type { Interval } from \"./types\";\n\n/** Milliseconds in one unit of each period type. Week/month/year are nominal\n * (calendar-agnostic) — used only for the bar-close countdown, where an exact\n * calendar length isn't needed. */\nexport const UNIT_MS: Record<PeriodType, number> = {\n second: 1000,\n minute: 60_000,\n hour: 3_600_000,\n day: 86_400_000,\n week: 604_800_000,\n month: 2_592_000_000, // 30d nominal\n year: 31_536_000_000, // 365d nominal\n};\n\n// Suffix → period type. Order matters only for readability; matching is exact.\n// \"MO\" (month) is distinct from a bare number (minutes) so \"30\" stays 30-minute\n// while \"1MO\" is one month.\nconst SUFFIX: Array<{ re: RegExp; type: PeriodType }> = [\n { re: /^(\\d+)S$/, type: \"second\" },\n { re: /^(\\d+)H$/, type: \"hour\" },\n { re: /^(\\d+)D$/, type: \"day\" },\n { re: /^(\\d+)W$/, type: \"week\" },\n { re: /^(\\d+)MO$/, type: \"month\" },\n { re: /^(\\d+)Y$/, type: \"year\" },\n];\n\n/**\n * Parse a resolution token to a KLineChart Period.\n *\n * Rules (case-insensitive):\n * - `<n>S` → seconds (e.g. \"10S\", \"30S\", \"5S\")\n * - `<n>H` → hours; bare `\"60\"` also maps to 1 hour (back-compat with the\n * original interval set, where \"60\" meant hourly)\n * - `D` / `<n>D` → days\n * - `W` / `<n>W` → weeks\n * - `MO` / `<n>MO` → months\n * - `Y` / `<n>Y` → years\n * - `<n>` → minutes (e.g. \"1\", \"5\", \"15\", \"240\")\n * - anything unrecognized → 1 minute (safe default)\n */\nexport function parseResolution(interval: Interval): { type: PeriodType; span: number } {\n const raw = String(interval).trim().toUpperCase();\n // Bare unit letters (no leading number) → span 1.\n if (raw === \"D\" || raw === \"1D\") return { type: \"day\", span: 1 };\n if (raw === \"W\") return { type: \"week\", span: 1 };\n if (raw === \"MO\") return { type: \"month\", span: 1 };\n if (raw === \"Y\") return { type: \"year\", span: 1 };\n // \"60\" kept as 1 hour for back-compat with the original toolbar set.\n if (raw === \"60\") return { type: \"hour\", span: 1 };\n for (const { re, type } of SUFFIX) {\n const m = re.exec(raw);\n if (m) return { type, span: Math.max(1, parseInt(m[1], 10) || 1) };\n }\n const mins = /^(\\d+)$/.exec(raw);\n if (mins) return { type: \"minute\", span: Math.max(1, parseInt(mins[1], 10) || 1) };\n return { type: \"minute\", span: 1 };\n}\n\n/** Duration of one bar at this resolution, in ms (drives the bar-close\n * countdown). Nominal for week/month/year (see UNIT_MS). */\nexport function resolutionMs(interval: Interval): number {\n const { type, span } = parseResolution(interval);\n return span * UNIT_MS[type];\n}\n\nconst TYPE_WORD: Record<PeriodType, string> = {\n second: \"second\",\n minute: \"minute\",\n hour: \"hour\",\n day: \"day\",\n week: \"week\",\n month: \"month\",\n year: \"year\",\n};\n\n/** Human words for a resolution, e.g. \"30 minute\", \"1 hour\" — used in tooltips\n * and menus. Pure. */\nexport function resolutionLabel(interval: Interval): string {\n const { type, span } = parseResolution(interval);\n return `${span} ${TYPE_WORD[type]}`;\n}\n\n/** A resolution option for a resolution menu/toolbar. */\nexport interface ResolutionOption {\n /** The token passed as `interval`. */\n value: Interval;\n /** Short display label (e.g. \"5m\", \"1H\", \"D\"). */\n label: string;\n}\n\n/** A sensible default resolution set spanning seconds → months. Hosts can pass\n * their own; any custom token `parseResolution` understands is valid. */\nexport const DEFAULT_RESOLUTIONS: ResolutionOption[] = [\n { value: \"10S\", label: \"10s\" },\n { value: \"30S\", label: \"30s\" },\n { value: \"1\", label: \"1m\" },\n { value: \"5\", label: \"5m\" },\n { value: \"15\", label: \"15m\" },\n { value: \"30\", label: \"30m\" },\n { value: \"60\", label: \"1H\" },\n { value: \"240\", label: \"4H\" },\n { value: \"D\", label: \"D\" },\n { value: \"W\", label: \"W\" },\n { value: \"1MO\", label: \"M\" },\n];\n","// Pure, side-effect-free helpers shared by the component and exercised directly\n// by the unit tests. Kept out of SonrChart.tsx so they can be imported without\n// pulling in React/klinecharts.\nimport type { DeepPartial, KLineData, PeriodType, Styles } from \"klinecharts\";\nimport { DEFAULT_SESSION_COLORS, type SessionColors } from \"./indicators\";\nimport { parseResolution, resolutionMs } from \"./resolutions\";\nimport type { Bar, IndicatorSpec, Interval, SessionTint } from \"./types\";\n\n/** KLineChart's id for the main price pane — where the candles, watermark,\n * session tint, pattern markers, compare series, and \"main\" indicators live. */\nexport const CANDLE_PANE = \"candle_pane\";\n\nexport function toKLine(b: Bar): KLineData {\n return { timestamp: b.time, open: b.open, high: b.high, low: b.low, close: b.close, volume: b.volume ?? 0 };\n}\n\n/** Map a resolution token to a KLineChart Period. Thin alias over\n * `parseResolution` (resolutions.ts) — the single source of truth for\n * resolution parsing, including custom resolutions (#38). */\nexport function toPeriod(interval: Interval): { type: PeriodType; span: number } {\n return parseResolution(interval);\n}\n\n/** Duration of one bar at this interval, in ms (for the bar-close countdown). */\nexport function intervalMs(interval: Interval): number {\n return resolutionMs(interval);\n}\n\nexport function asSpec(i: string | IndicatorSpec): IndicatorSpec {\n return typeof i === \"string\" ? { name: i } : i;\n}\n\nexport function sessionColors(s: SessionTint): SessionColors {\n if (s && typeof s === \"object\") {\n return {\n premarket: s.premarket ?? DEFAULT_SESSION_COLORS.premarket,\n afterhours: s.afterhours ?? DEFAULT_SESSION_COLORS.afterhours,\n };\n }\n return DEFAULT_SESSION_COLORS;\n}\n\n// Shallow one-level merge so callers' style overrides win over the theme.\nexport function mergeStyles(base: DeepPartial<Styles>, over?: DeepPartial<Styles>): DeepPartial<Styles> {\n if (!over) return base;\n const out: Record<string, unknown> = { ...base };\n for (const k of Object.keys(over)) {\n out[k] = { ...(base as Record<string, unknown>)[k] as object, ...(over as Record<string, unknown>)[k] as object };\n }\n return out as DeepPartial<Styles>;\n}\n","// Applying a candle rendering style to a live chart (issue #1 / #33). Bridges\n// the pure candle-type mapping (candles.ts) with the SONR_SERIES custom\n// indicator: native styles just set candle.type + bar colors, while the custom\n// series styles (line/step/baseline/column/hlc/high_low) hide the native bars\n// and draw on top. Kept out of SonrChart.tsx so the candle/series coupling\n// lives in one place.\nimport type { Chart, DeepPartial, Styles } from \"klinecharts\";\nimport { CANDLE_TYPE, isCustomSeries } from \"./candles\";\nimport { CANDLE_PANE } from \"./internal\";\nimport { SERIES_INDICATOR, Z_ORDER, type SeriesData } from \"./indicators\";\nimport { PALETTE } from \"./theme\";\nimport type { CandleStyle, Theme } from \"./types\";\n\nconst SERIES_TRANSPARENT = \"rgba(0,0,0,0)\";\n\n// Fully transparent candle bars — hides the native series so SONR_SERIES can\n// draw line/step/baseline/column/hlc/high_low on top.\nconst HIDDEN_BAR = {\n upColor: SERIES_TRANSPARENT,\n downColor: SERIES_TRANSPARENT,\n noChangeColor: SERIES_TRANSPARENT,\n upBorderColor: SERIES_TRANSPARENT,\n downBorderColor: SERIES_TRANSPARENT,\n noChangeBorderColor: SERIES_TRANSPARENT,\n upWickColor: SERIES_TRANSPARENT,\n downWickColor: SERIES_TRANSPARENT,\n noChangeWickColor: SERIES_TRANSPARENT,\n};\n\nfunction seriesConfig(style: CandleStyle, theme: Theme): SeriesData {\n return {\n style: style as SeriesData[\"style\"],\n up: PALETTE.GREEN,\n down: PALETTE.RED,\n neutral: theme === \"dark\" ? \"#cbd5e1\" : \"#334155\",\n };\n}\n\n// Apply a candle style to the chart: for a custom series style, hide the native\n// bars and draw/refresh SONR_SERIES; otherwise restore the theme bar colors and\n// drop the series indicator. Safe to call on every candle-style/theme change.\nexport function applyCandleStyle(chart: Chart, style: CandleStyle | undefined, styleObj: DeepPartial<Styles>, baseTheme: Theme): void {\n const s = style ?? \"candle\";\n const custom = isCustomSeries(s);\n const bar = custom ? HIDDEN_BAR : (styleObj.candle as { bar?: unknown } | undefined)?.bar;\n chart.setStyles({ candle: { type: CANDLE_TYPE[s], ...(bar ? { bar } : {}) } } as DeepPartial<Styles>);\n const present = chart.getIndicators({ name: SERIES_INDICATOR }).length > 0;\n if (custom) {\n const ext = seriesConfig(s, baseTheme);\n if (present) chart.overrideIndicator({ name: SERIES_INDICATOR, extendData: ext });\n // isStack=true so drawing the custom series doesn't wipe the other\n // candle-pane layers (session tint, watermark, pattern markers, user\n // overlays). Re-applies are guarded by the `present` check above.\n else chart.createIndicator({ name: SERIES_INDICATOR, paneId: CANDLE_PANE, zLevel: Z_ORDER.series, extendData: ext }, true);\n } else if (present) {\n chart.removeIndicator({ name: SERIES_INDICATOR });\n }\n}\n","import { registerIndicator } from \"klinecharts\";\nimport type { Bar } from \"./types\";\n\n// Compare / multi-symbol overlay (issue #9): draw one or more other symbols'\n// price lines on the main pane, ratio-scaled so they start at the main series'\n// price and diverge by relative performance (the standard \"compare\" behavior).\n\nexport const COMPARE_INDICATOR = \"SONR_COMPARE\";\n\nexport interface CompareLine {\n color: string;\n /** Aligned to the main bars: value per main-bar timestamp (null = gap). */\n points: Array<{ time: number; value: number | null }>;\n}\n\nlet _registered = false;\n\nexport function registerCompareIndicator(): void {\n if (_registered) return;\n _registered = true;\n registerIndicator<Record<string, never>, unknown, CompareLine[]>({\n name: COMPARE_INDICATOR,\n shortName: \"\",\n series: \"price\",\n figures: [],\n calc: (dataList) => dataList.map(() => ({})),\n draw: ({ ctx, chart, indicator, xAxis, yAxis }) => {\n const lines = (indicator.extendData as CompareLine[]) || [];\n if (lines.length === 0) return false;\n\n ctx.save();\n ctx.lineWidth = 1.5;\n // Compare points are 1:1 with the main bars (in order), so the visible\n // data range indexes straight into them — convert only what's on screen\n // (+1 bar of margin so line segments reach the edges). The range is the\n // same for every line, so read it once per frame, not once per line.\n const range = chart.getVisibleRange();\n const from = Math.max(0, (range?.from ?? 0) - 1);\n const rangeTo = (range?.to ?? Number.MAX_SAFE_INTEGER) + 1;\n for (const line of lines) {\n const pts = line.points;\n const n = pts.length;\n if (n === 0) continue;\n const to = Math.min(n - 1, rangeTo);\n ctx.strokeStyle = line.color;\n ctx.beginPath();\n let started = false;\n for (let i = from; i <= to; i++) {\n const p = pts[i];\n if (p.value == null) {\n started = false;\n continue;\n }\n const x = xAxis.convertTimestampToPixel(p.time);\n const y = yAxis.convertToPixel(p.value);\n if (!started) {\n ctx.moveTo(x, y);\n started = true;\n } else {\n ctx.lineTo(x, y);\n }\n }\n ctx.stroke();\n }\n ctx.restore();\n return false;\n },\n });\n}\n\n/**\n * Align a comparison symbol's bars to the main bars by timestamp and ratio-scale\n * them so the two series share a starting price (first overlapping bar). Returns\n * one value per main bar (null where the compare symbol has no data).\n */\nexport function alignCompare(mainBars: Bar[], compareBars: Bar[]): Array<{ time: number; value: number | null }> {\n const byTime = new Map<number, number>();\n for (const b of compareBars) byTime.set(b.time, b.close);\n\n // Scale factor from the first main bar that both series cover.\n let scale = 1;\n for (const mb of mainBars) {\n const c = byTime.get(mb.time);\n if (c != null && c !== 0) {\n scale = mb.close / c;\n break;\n }\n }\n return mainBars.map((mb) => {\n const c = byTime.get(mb.time);\n return { time: mb.time, value: c == null ? null : c * scale };\n });\n}\n","// Timezone support (issue #38). KLineChart renders the x-axis and crosshair time\n// in a single IANA timezone (`chart.setTimezone`). sonrchart baked in ET; this\n// module makes it configurable: a curated list of common zones for a menu, plus\n// `getTimezoneApi()` so a host can discover/extend the set.\n//\n// Pure and framework-free — the list is data, the menu component consumes it.\n\n/** One selectable timezone: an IANA name plus a short display label. */\nexport interface TimezoneOption {\n /** IANA timezone name, e.g. \"America/New_York\". Passed to chart.setTimezone. */\n value: string;\n /** Short display label, e.g. \"New York\". */\n label: string;\n}\n\n/** The chart's default timezone — US equities exchange time (ET). */\nexport const DEFAULT_TIMEZONE = \"America/New_York\";\n\n/** Curated common trading timezones, roughly west→east. Hosts can pass their own\n * set to <TimezoneMenu> or extend this via getTimezoneApi(). */\nexport const DEFAULT_TIMEZONES: TimezoneOption[] = [\n { value: \"America/Los_Angeles\", label: \"Los Angeles\" },\n { value: \"America/Chicago\", label: \"Chicago\" },\n { value: \"America/New_York\", label: \"New York\" },\n { value: \"America/Sao_Paulo\", label: \"São Paulo\" },\n { value: \"Etc/UTC\", label: \"UTC\" },\n { value: \"Europe/London\", label: \"London\" },\n { value: \"Europe/Berlin\", label: \"Frankfurt\" },\n { value: \"Europe/Moscow\", label: \"Moscow\" },\n { value: \"Asia/Dubai\", label: \"Dubai\" },\n { value: \"Asia/Kolkata\", label: \"Mumbai\" },\n { value: \"Asia/Shanghai\", label: \"Shanghai\" },\n { value: \"Asia/Hong_Kong\", label: \"Hong Kong\" },\n { value: \"Asia/Tokyo\", label: \"Tokyo\" },\n { value: \"Australia/Sydney\", label: \"Sydney\" },\n];\n\n/** Human label for an IANA timezone, falling back to the raw name (with the\n * \"Area/City\" prefix stripped and underscores spaced) when it isn't in the\n * curated set. Pure. */\nexport function timezoneLabel(tz: string, options: TimezoneOption[] = DEFAULT_TIMEZONES): string {\n const hit = options.find((o) => o.value === tz);\n if (hit) return hit.label;\n const city = tz.includes(\"/\") ? tz.slice(tz.lastIndexOf(\"/\") + 1) : tz;\n return city.replace(/_/g, \" \");\n}\n\n/**\n * Timezone API (issue #38 `getTimezoneApi`). Returns the curated timezone list\n * and a resolver, letting a host discover the built-in options and label an\n * arbitrary IANA zone. Accepts custom aliases (merged ahead of the defaults) so\n * a host can surface its own named zones.\n */\nexport function getTimezoneApi(customAliases: TimezoneOption[] = []): {\n timezones: TimezoneOption[];\n label: (tz: string) => string;\n} {\n // Custom aliases win over a default with the same value.\n const seen = new Set(customAliases.map((o) => o.value));\n const timezones = [...customAliases, ...DEFAULT_TIMEZONES.filter((o) => !seen.has(o.value))];\n return { timezones, label: (tz: string) => timezoneLabel(tz, timezones) };\n}\n","// Watermark helpers: coerce the `watermark` prop into a full options object,\n// fold in live changes, and build the faint symbol/interval ink the\n// WATERMARK_INDICATOR paints behind the candles. Pure and framework-free so\n// SonrChart just wires them to state.\nimport type { WatermarkData } from \"./indicators\";\nimport type { Theme, WatermarkOptions } from \"./types\";\n\n/** Bare ticker for the watermark (drop any \"EXCHANGE:\" prefix). */\nexport function bareTicker(symbol: string): string {\n return symbol.includes(\":\") ? symbol.split(\":\").pop() ?? symbol : symbol;\n}\n\n/** Human interval label for the watermark subtitle. */\nexport function intervalLabel(iv: string): string {\n const m: Record<string, string> = { \"10S\": \"10s\", \"30S\": \"30s\", \"1\": \"1m\", \"5\": \"5m\", \"15\": \"15m\", \"30\": \"30m\", \"60\": \"1h\", D: \"1D\", \"1D\": \"1D\", \"1440\": \"1D\" };\n return m[iv] ?? iv;\n}\n\n/** Default faint watermark ink hex for the theme (candles read cleanly over it). */\nexport function watermarkInk(theme: Theme): string {\n return theme === \"dark\" ? \"#e6ebe9\" : \"#1a1f29\";\n}\n\nexport function defaultWatermark(theme: Theme): WatermarkOptions {\n return { symbol: false, interval: false, color: watermarkInk(theme), opacity: 0.06 };\n}\n\n/** Coerce the `watermark` prop (boolean | partial) into a full options object.\n * `true` shows both; a partial object shows whatever it doesn't turn off. */\nexport function normalizeWatermark(prop: boolean | Partial<WatermarkOptions> | undefined, theme: Theme): WatermarkOptions {\n const base = defaultWatermark(theme);\n if (prop === undefined || prop === false) return base;\n if (prop === true) return { ...base, symbol: true, interval: true };\n return {\n symbol: prop.symbol ?? true,\n interval: prop.interval ?? true,\n color: prop.color ?? base.color,\n opacity: prop.opacity ?? base.opacity,\n };\n}\n\n/** Fold a change (boolean master or partial options) into the current config. */\nexport function mergeWatermark(cur: WatermarkOptions, next: boolean | Partial<WatermarkOptions>): WatermarkOptions {\n if (typeof next === \"boolean\") return { ...cur, symbol: next, interval: next };\n return { ...cur, ...next };\n}\n\n/** #rrggbb + opacity -> rgba() for the canvas fill. */\nexport function composeRgba(color: string, opacity: number): string {\n const m = /^#([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})$/i.exec(color);\n if (!m) return color;\n return `rgba(${parseInt(m[1], 16)},${parseInt(m[2], 16)},${parseInt(m[3], 16)},${opacity})`;\n}\n\nexport function buildWatermark(symbol: string, interval: string, opts: WatermarkOptions): WatermarkData {\n return {\n title: opts.symbol ? bareTicker(symbol).toUpperCase() : \"\",\n subtitle: opts.interval ? intervalLabel(interval) : \"\",\n color: composeRgba(opts.color, opts.opacity),\n };\n}\n","import { registerOverlay } from \"klinecharts\";\nimport type { Theme } from \"./types\";\n\n// Freehand brush / highlighter (issue #34 — the \"brush, highlighter\" shapes).\n// KLineChart has no native freehand tool, but v10 supports `drawingMode:\n// \"continuous\"` — an overlay that captures a mouse-down → move → up stroke as a\n// series of points. We register one such overlay and draw a smooth polyline\n// through the captured points; the stroke's colour/width come from extendData,\n// so brush and highlighter share the renderer with different styles. Because it's\n// a normal overlay (created in the user-drawing group), it pans/zooms with the\n// chart and plugs into undo/redo, clear, and export/import for free.\n\nexport const BRUSH_OVERLAY = \"sonrBrush\";\n\nexport interface BrushStyle {\n color: string;\n size: number;\n}\n\n/** The two brush tools, keyed to the drawing-toolbar tool ids. */\nexport type BrushTool = \"brush\" | \"highlighter\";\n\nexport function isBrushTool(tool: string): tool is BrushTool {\n return tool === \"brush\" || tool === \"highlighter\";\n}\n\n/** Preset style for a brush tool in the current theme. Brush is a thin solid\n * stroke in the foreground ink; highlighter is a thick, translucent marker. */\nexport function brushStyle(tool: BrushTool, theme: Theme): BrushStyle {\n if (tool === \"highlighter\") return { color: \"rgba(245,214,66,0.35)\", size: 14 };\n return { color: theme === \"dark\" ? \"#e6ebe9\" : \"#1a1f29\", size: 2 };\n}\n\ntype XY = { x: number; y: number };\n\n// Resample a captured stroke into a smooth curve. Continuous capture can leave\n// sparse/jittery points, so we de-jitter (drop points <2px apart) then run a\n// Catmull-Rom spline through the survivors (~8 samples/segment). The spline\n// passes through the original points, so the stroke stays faithful but reads as\n// a smooth TradingView-style curve instead of straight segments. Runs in screen\n// space each frame, so it re-smooths correctly on pan/zoom.\nfunction catmull(p0: XY, p1: XY, p2: XY, p3: XY, t: number): XY {\n const t2 = t * t;\n const t3 = t2 * t;\n return {\n x: 0.5 * (2 * p1.x + (-p0.x + p2.x) * t + (2 * p0.x - 5 * p1.x + 4 * p2.x - p3.x) * t2 + (-p0.x + 3 * p1.x - 3 * p2.x + p3.x) * t3),\n y: 0.5 * (2 * p1.y + (-p0.y + p2.y) * t + (2 * p0.y - 5 * p1.y + 4 * p2.y - p3.y) * t2 + (-p0.y + 3 * p1.y - 3 * p2.y + p3.y) * t3),\n };\n}\nexport function smoothStroke(pts: XY[]): XY[] {\n if (pts.length < 3) return pts;\n const p: XY[] = [pts[0]];\n for (let i = 1; i < pts.length; i++) {\n const a = p[p.length - 1];\n const b = pts[i];\n if ((b.x - a.x) ** 2 + (b.y - a.y) ** 2 >= 4) p.push(b);\n }\n if (p.length < 3) return p;\n const out: XY[] = [];\n const SAMPLES = 8;\n for (let i = 0; i < p.length - 1; i++) {\n const p0 = p[i - 1] ?? p[i];\n const p1 = p[i];\n const p2 = p[i + 1];\n const p3 = p[i + 2] ?? p[i + 1];\n for (let s = 0; s < SAMPLES; s++) out.push(catmull(p0, p1, p2, p3, s / SAMPLES));\n }\n out.push(p[p.length - 1]);\n return out;\n}\n\n// Per-overlay memo of the last smoothed polyline. `createPointFigures` runs on\n// every redraw — including every crosshair mousemove, where the screen\n// coordinates are unchanged — so re-splining the whole stroke each time is pure\n// waste. Keyed by overlay id + a cheap signature (point count + first/last\n// coordinate); a hit returns the cached curve, so the spline only recomputes\n// when the coordinates actually shift (pan/zoom). One entry per overlay.\nconst _smoothCache = new Map<string, { sig: string; out: XY[] }>();\nfunction smoothStrokeCached(id: string, coordinates: XY[]): XY[] {\n const n = coordinates.length;\n const f = coordinates[0];\n const l = coordinates[n - 1];\n const sig = `${n}:${f.x},${f.y}:${l.x},${l.y}`;\n const hit = _smoothCache.get(id);\n if (hit && hit.sig === sig) return hit.out;\n const out = smoothStroke(coordinates);\n _smoothCache.set(id, { sig, out });\n return out;\n}\n\nlet _registered = false;\n\nexport function registerBrushOverlay(): void {\n if (_registered) return;\n _registered = true;\n registerOverlay({\n name: BRUSH_OVERLAY,\n // Continuous freehand: the stroke completes on mouse-up.\n drawingMode: \"continuous\",\n totalStep: 2,\n needDefaultPointFigure: false,\n needDefaultXAxisFigure: false,\n needDefaultYAxisFigure: false,\n createPointFigures: ({ coordinates, overlay }) => {\n if (!coordinates || coordinates.length < 2) return [];\n const ext = (overlay.extendData as BrushStyle | undefined) ?? { color: \"#888888\", size: 2 };\n return [\n {\n type: \"line\",\n attrs: { coordinates: smoothStrokeCached(overlay.id, coordinates) },\n // smooth beziers the path; round caps/joins remove the sharp,\n // pixelated corners so it reads like a TradingView brush.\n styles: { style: \"solid\", smooth: true, lineCap: \"round\", lineJoin: \"round\", color: ext.color, size: ext.size },\n },\n ];\n },\n });\n}\n","// The user-drawing subsystem (issues #3/#16/#35), extracted from SonrChart so\n// its state — armed tool, undo/redo history, lock/hide flags, named templates,\n// and brush styles — lives in one cohesive, testable place. The hook owns the\n// refs and returns a referentially-stable API of ref-reading operations, so the\n// component's imperative handle can delegate straight to it. It touches the\n// chart only through the `chartRef` it is given and the current magnet mode via\n// `getMode`, so it stays decoupled from the rest of the component's concerns.\nimport { useRef, type MutableRefObject } from \"react\";\nimport type { Chart, OverlayMode, Point } from \"klinecharts\";\nimport { USER_DRAWING_GROUP, drawingLabel } from \"./drawings\";\nimport { TEXT_OVERLAY, DEFAULT_TEXT_STYLE, type TextStyle } from \"./textOverlay\";\nimport { DrawingTemplateStore, type DrawingSnapshot, type DrawingSnapshotItem } from \"./drawingTemplates\";\nimport { BRUSH_OVERLAY, brushStyle, isBrushTool, type BrushStyle, type BrushTool } from \"./brush\";\nimport type { DrawingRow, DrawingTool, Theme } from \"./types\";\n\nexport interface DrawingsApi {\n /** Start interactive drawing of a tool; honors the current magnet mode. */\n beginDrawing(tool: string): void;\n /** Cancel an armed-but-unplaced drawing (toggle the tool off). */\n cancelDrawing(): void;\n /** The tool currently armed for drawing, or null if none. */\n activeDrawing(): DrawingTool | null;\n /** Subscribe to armed-tool changes. Returns an unsubscribe fn. */\n subscribeDrawing(cb: (tool: DrawingTool | null) => void): () => void;\n /** Remove all user-drawn overlays (records a history step). */\n clearDrawings(): void;\n /** Serialize the current user drawings (points/styles/mode/extendData). */\n snapshotDrawings(): DrawingSnapshot;\n /** Replace the user drawings with a snapshot (used by undo/redo/import). */\n restoreDrawings(snap: DrawingSnapshot): void;\n undo(): void;\n redo(): void;\n canUndo(): boolean;\n canRedo(): boolean;\n /** Subscribe to undo/redo-availability changes. Returns unsubscribe. */\n subscribeHistory(cb: () => void): () => void;\n /** Reset history to an empty baseline (no notify) — for a fresh chart. */\n initHistory(): void;\n /** Reset history to the current drawings as the baseline (no notify) — after\n * an import where the host re-seeds from a saved state. */\n resetHistoryToCurrent(): void;\n /** Record the current drawings as a new undo step. Used after an out-of-band\n * edit (e.g. committing typed text into a placed label). */\n recordHistory(): void;\n setDrawingsLocked(locked: boolean): void;\n getDrawingsLocked(): boolean;\n setDrawingsVisible(visible: boolean): void;\n getDrawingsVisible(): boolean;\n /** Subscribe to hide/show-all changes (keeps a toolbar toggle and the\n * settings panel in sync). Returns unsubscribe. */\n subscribeDrawingsVisible(cb: (visible: boolean) => void): () => void;\n saveDrawingTemplate(name: string): void;\n applyDrawingTemplate(name: string): void;\n listDrawingTemplates(): string[];\n deleteDrawingTemplate(name: string): void;\n subscribeDrawingTemplates(cb: () => void): () => void;\n cloneLastDrawing(): void;\n getBrushStyle(tool: BrushTool): BrushStyle;\n setBrushStyle(tool: BrushTool, style: BrushStyle): void;\n subscribeBrush(cb: () => void): () => void;\n /** Default color/size applied to new text labels. */\n getTextStyle(): TextStyle;\n setTextStyle(style: TextStyle): void;\n subscribeTextStyle(cb: () => void): () => void;\n // Object tree — per-drawing operations (#45) --------------------------------\n /** Snapshot of every user drawing as object-tree rows (id/label/flags). */\n listDrawings(): DrawingRow[];\n /** Show/hide one drawing by id. */\n setDrawingVisible(id: string, visible: boolean): void;\n /** Lock/unlock one drawing by id. */\n setDrawingLocked(id: string, locked: boolean): void;\n /** Remove one drawing by id (records a history step). */\n removeDrawing(id: string): void;\n /** Scroll the chart so the drawing with this id is in view. */\n locateDrawing(id: string): void;\n // Z-order + copy/paste (#35) ------------------------------------------------\n /** Change one drawing's stacking order (front/back = extreme, forward/\n * backward = one step). */\n setDrawingZOrder(id: string, mode: \"front\" | \"back\" | \"forward\" | \"backward\"): void;\n /** Copy one drawing to the clipboard (survives until the next copy). */\n copyDrawing(id: string): void;\n /** Paste the copied drawing as a new drawing (records a history step). */\n pasteDrawing(): void;\n /** Whether the clipboard holds a drawing to paste. */\n canPaste(): boolean;\n /** The id of the currently selected drawing (clicked on the chart), or null. */\n getSelectedDrawing(): string | null;\n}\n\ntype Snap = DrawingSnapshot;\n\nconst HISTORY_CAP = 100;\n\n/**\n * @param chartRef the live KLineChart instance (may be null before init).\n * @param getMode returns the OverlayMode to arm a new (non-brush) drawing with\n * — reads the component's current magnet mode.\n * @param baseTheme dark/light base used to seed the initial brush styles.\n */\nexport function useDrawings(\n chartRef: MutableRefObject<Chart | null>,\n getMode: () => OverlayMode,\n baseTheme: Theme,\n onTextPlaced?: (id: string, point: Partial<Point>) => void,\n): DrawingsApi {\n // Undo/redo history (#16). stack[ptr] is the current drawing set; `restoring`\n // suppresses history capture while overlays are recreated.\n const historyRef = useRef<{ stack: Snap[]; ptr: number }>({ stack: [[]], ptr: 0 });\n const restoringRef = useRef(false);\n const historySubs = useRef(new Set<() => void>());\n\n // Armed-drawing state (#3): which tool is mid-draw, the id of its in-progress\n // overlay (so it can be cancelled), and subscribers (the toolbar).\n const activeToolRef = useRef<DrawingTool | null>(null);\n const progressIdRef = useRef<string | null>(null);\n const drawingSubs = useRef(new Set<(tool: DrawingTool | null) => void>());\n\n // Lock/hide state (#35), mirrored for getters and inherited by drawings\n // created after a toggle, plus the named-template store.\n const lockedRef = useRef(false);\n const hiddenRef = useRef(false);\n const visibleSubs = useRef(new Set<(visible: boolean) => void>());\n const templatesRef = useRef(new DrawingTemplateStore());\n\n // Copy/paste clipboard + the currently-selected drawing (#35). Selection is\n // tracked from each user overlay's onSelected/onDeselected so Cmd/Ctrl+C knows\n // what to copy.\n const clipboardRef = useRef<DrawingSnapshotItem | null>(null);\n const selectedIdRef = useRef<string | null>(null);\n\n // Brush/highlighter stroke styles (color + width), seeded from theme presets;\n // each new stroke reads the current value. Seeded once (matches prior behavior).\n const brushStylesRef = useRef<Record<BrushTool, BrushStyle>>({\n brush: brushStyle(\"brush\", baseTheme),\n highlighter: brushStyle(\"highlighter\", baseTheme),\n });\n const brushSubs = useRef(new Set<() => void>());\n\n // Default text-label style (color + size), applied to each new text overlay.\n const textStyleRef = useRef<TextStyle>({ ...DEFAULT_TEXT_STYLE });\n const textStyleSubs = useRef(new Set<() => void>());\n\n // Live mirror of the text-placed callback so the once-built API never calls a\n // stale closure.\n const onTextPlacedRef = useRef(onTextPlaced);\n onTextPlacedRef.current = onTextPlaced;\n\n // Build the API once; every method reads refs, so a single stable object stays\n // correct across renders (the component's []-deps handle can capture it).\n const apiRef = useRef<DrawingsApi | null>(null);\n if (!apiRef.current) {\n const notifyHistory = () => historySubs.current.forEach((cb) => cb());\n const notifyBrush = () => brushSubs.current.forEach((cb) => cb());\n const setActiveTool = (tool: DrawingTool | null) => {\n activeToolRef.current = tool;\n drawingSubs.current.forEach((cb) => cb(tool));\n };\n // Track the selected drawing (for Cmd/Ctrl+C). Spread into every user\n // overlay's create call. Callbacks return false (don't consume the event).\n const selectHandlers = {\n onSelected: (e: { overlay?: { id?: string } }) => {\n selectedIdRef.current = e?.overlay?.id ?? null;\n return false;\n },\n onDeselected: () => {\n selectedIdRef.current = null;\n return false;\n },\n };\n // Snapshot one overlay (shallow-copied points) for the clipboard / paste.\n const snapshotOne = (id: string): DrawingSnapshotItem | null => {\n const o = chartRef.current?.getOverlays({ id })[0];\n if (!o) return null;\n return { name: o.name, points: (o.points ?? []).map((p) => ({ ...p })), styles: o.styles, mode: o.mode, extendData: o.extendData };\n };\n // Create a user overlay from a snapshot (paste/duplicate), wiring history +\n // flags + selection. `restoring` guards the double history push.\n const createFromSnapshot = (snap: DrawingSnapshotItem) => {\n const chart = chartRef.current;\n if (!chart) return;\n restoringRef.current = true;\n chart.createOverlay({\n name: snap.name,\n points: snap.points,\n styles: snap.styles,\n mode: snap.mode,\n extendData: snap.extendData,\n groupId: USER_DRAWING_GROUP,\n ...selectHandlers,\n onDrawEnd: () => {\n pushHistory();\n return false;\n },\n onRemoved: () => {\n pushHistory();\n return false;\n },\n });\n restoringRef.current = false;\n applyDrawingFlags();\n pushHistory();\n };\n\n // Push the current lock/visible state onto every user drawing. Also called\n // after creating overlays so fresh drawings inherit the state.\n const applyDrawingFlags = () => {\n chartRef.current?.overrideOverlay({ groupId: USER_DRAWING_GROUP, lock: lockedRef.current, visible: !hiddenRef.current });\n };\n\n const snapshotDrawings = (): Snap =>\n (chartRef.current?.getOverlays({ groupId: USER_DRAWING_GROUP }) ?? []).map((o) => ({\n name: o.name,\n points: o.points,\n styles: o.styles,\n mode: o.mode,\n // Brush/highlighter carry their colour+width here — keep it through\n // undo/redo and export/import.\n extendData: o.extendData,\n }));\n\n const pushHistory = () => {\n if (restoringRef.current) return;\n const h = historyRef.current;\n h.stack = h.stack.slice(0, h.ptr + 1);\n h.stack.push(snapshotDrawings());\n // Bound memory: drop the oldest entries past the cap.\n if (h.stack.length > HISTORY_CAP) h.stack = h.stack.slice(h.stack.length - HISTORY_CAP);\n h.ptr = h.stack.length - 1;\n notifyHistory();\n };\n\n const beginDrawing = (tool: string) => {\n // Brush/highlighter are one continuous-draw overlay (`sonrBrush`) styled by\n // extendData; magnet snapping is meaningless for freehand, so force normal.\n const brush = isBrushTool(tool);\n const isText = tool === TEXT_OVERLAY;\n const id = chartRef.current?.createOverlay({\n name: brush ? BRUSH_OVERLAY : tool,\n groupId: USER_DRAWING_GROUP,\n mode: brush ? \"normal\" : getMode(),\n ...(brush ? { extendData: { ...brushStylesRef.current[tool as BrushTool] } } : {}),\n ...(isText ? { extendData: { text: \"\", ...textStyleRef.current } } : {}),\n ...selectHandlers,\n onDrawEnd: (e) => {\n // Drawing placed: the overlay is now a finished drawing, not in progress.\n progressIdRef.current = null;\n pushHistory();\n // A freshly placed drawing inherits the current lock/hide state.\n applyDrawingFlags();\n // Brush/highlighter are \"sticky\": stay armed and immediately re-arm for\n // the next stroke, so you can draw repeatedly without re-clicking the\n // toolbar. The tool stays active until toggled off (cancelDrawing).\n if (brush) beginDrawing(tool);\n else setActiveTool(null);\n // Text: hand the placed anchor to the host so it can show an inline\n // input and store the typed string in the overlay's extendData.\n if (isText && e?.overlay) onTextPlacedRef.current?.(e.overlay.id, e.overlay.points?.[0] ?? {});\n return false;\n },\n onRemoved: () => {\n pushHistory();\n return false;\n },\n });\n progressIdRef.current = typeof id === \"string\" ? id : Array.isArray(id) ? (id[0] ?? null) : null;\n setActiveTool(tool as DrawingTool);\n };\n\n // Cancel an armed-but-unplaced drawing (toggling the tool off). Removes only\n // the in-progress overlay, leaving finished drawings untouched.\n const cancelDrawing = () => {\n const id = progressIdRef.current;\n progressIdRef.current = null;\n setActiveTool(null);\n if (id) {\n restoringRef.current = true; // a cancelled draw isn't a history step\n chartRef.current?.removeOverlay({ id });\n restoringRef.current = false;\n }\n };\n\n const restoreDrawings = (snap: Snap) => {\n const chart = chartRef.current;\n if (!chart) return;\n restoringRef.current = true;\n chart.removeOverlay({ groupId: USER_DRAWING_GROUP });\n for (const d of snap) {\n chart.createOverlay({\n name: d.name,\n points: d.points,\n styles: d.styles,\n mode: d.mode,\n extendData: d.extendData,\n groupId: USER_DRAWING_GROUP,\n ...selectHandlers,\n onDrawEnd: () => {\n pushHistory();\n return false;\n },\n onRemoved: () => {\n pushHistory();\n return false;\n },\n });\n }\n restoringRef.current = false;\n // Restored drawings inherit the current lock/hide state.\n applyDrawingFlags();\n };\n\n const initHistory = () => {\n historyRef.current = { stack: [[]], ptr: 0 };\n };\n const resetHistoryToCurrent = () => {\n historyRef.current = { stack: [snapshotDrawings()], ptr: 0 };\n };\n\n apiRef.current = {\n beginDrawing,\n cancelDrawing,\n activeDrawing: () => activeToolRef.current,\n subscribeDrawing: (cb) => {\n drawingSubs.current.add(cb);\n return () => drawingSubs.current.delete(cb);\n },\n clearDrawings: () => {\n chartRef.current?.removeOverlay({ groupId: USER_DRAWING_GROUP });\n pushHistory();\n },\n snapshotDrawings,\n restoreDrawings,\n undo: () => {\n const h = historyRef.current;\n if (h.ptr <= 0) return;\n h.ptr -= 1;\n restoreDrawings(h.stack[h.ptr]);\n notifyHistory();\n },\n redo: () => {\n const h = historyRef.current;\n if (h.ptr >= h.stack.length - 1) return;\n h.ptr += 1;\n restoreDrawings(h.stack[h.ptr]);\n notifyHistory();\n },\n canUndo: () => historyRef.current.ptr > 0,\n canRedo: () => historyRef.current.ptr < historyRef.current.stack.length - 1,\n subscribeHistory: (cb) => {\n historySubs.current.add(cb);\n return () => historySubs.current.delete(cb);\n },\n initHistory,\n resetHistoryToCurrent,\n recordHistory: pushHistory,\n setDrawingsLocked: (locked) => {\n lockedRef.current = locked;\n applyDrawingFlags();\n },\n getDrawingsLocked: () => lockedRef.current,\n setDrawingsVisible: (visible) => {\n hiddenRef.current = !visible;\n applyDrawingFlags();\n visibleSubs.current.forEach((cb) => cb(visible));\n },\n getDrawingsVisible: () => !hiddenRef.current,\n subscribeDrawingsVisible: (cb) => {\n visibleSubs.current.add(cb);\n return () => visibleSubs.current.delete(cb);\n },\n saveDrawingTemplate: (name) => {\n templatesRef.current.save(name, snapshotDrawings());\n },\n applyDrawingTemplate: (name) => {\n const snap = templatesRef.current.get(name);\n if (!snap) return;\n restoreDrawings(snap);\n // Reset the undo history to the applied drawing set (like importState).\n resetHistoryToCurrent();\n notifyHistory();\n },\n listDrawingTemplates: () => templatesRef.current.list(),\n deleteDrawingTemplate: (name) => templatesRef.current.delete(name),\n subscribeDrawingTemplates: (cb) => templatesRef.current.subscribe(cb),\n cloneLastDrawing: () => {\n const drawings = chartRef.current?.getOverlays({ groupId: USER_DRAWING_GROUP }) ?? [];\n const last = drawings[drawings.length - 1];\n if (last) createFromSnapshot({ name: last.name, points: (last.points ?? []).map((p) => ({ ...p })), styles: last.styles, mode: last.mode, extendData: last.extendData });\n },\n getBrushStyle: (tool) => ({ ...brushStylesRef.current[tool] }),\n setBrushStyle: (tool, style) => {\n brushStylesRef.current[tool] = { ...style };\n notifyBrush();\n },\n subscribeBrush: (cb) => {\n brushSubs.current.add(cb);\n return () => brushSubs.current.delete(cb);\n },\n getTextStyle: () => ({ ...textStyleRef.current }),\n setTextStyle: (style) => {\n textStyleRef.current = { ...style };\n textStyleSubs.current.forEach((cb) => cb());\n },\n subscribeTextStyle: (cb) => {\n textStyleSubs.current.add(cb);\n return () => textStyleSubs.current.delete(cb);\n },\n listDrawings: () =>\n (chartRef.current?.getOverlays({ groupId: USER_DRAWING_GROUP }) ?? []).map((o) => ({\n id: o.id,\n name: o.name,\n label: drawingLabel(o.name, o.extendData),\n visible: o.visible,\n locked: o.lock,\n })),\n setDrawingVisible: (id, visible) => {\n chartRef.current?.overrideOverlay({ id, visible });\n },\n setDrawingLocked: (id, locked) => {\n chartRef.current?.overrideOverlay({ id, lock: locked });\n },\n removeDrawing: (id) => {\n // removeOverlay fires the overlay's onRemoved → records a history step.\n chartRef.current?.removeOverlay({ id });\n },\n locateDrawing: (id) => {\n const chart = chartRef.current;\n if (!chart) return;\n const ts = chart.getOverlays({ id })[0]?.points?.[0]?.timestamp;\n if (typeof ts === \"number\") chart.scrollToTimestamp(ts);\n },\n // Z-order + copy/paste (#35) ----------------------------------------\n setDrawingZOrder: (id, mode) => {\n const all = chartRef.current?.getOverlays({ groupId: USER_DRAWING_GROUP }) ?? [];\n if (all.length === 0) return;\n const levels = all.map((o) => o.zLevel ?? 0);\n const cur = all.find((o) => o.id === id)?.zLevel ?? 0;\n const z =\n mode === \"front\" ? Math.max(...levels) + 1 : mode === \"back\" ? Math.min(...levels) - 1 : mode === \"forward\" ? cur + 1 : cur - 1;\n // fixedZLevel so the new order sticks instead of being overridden when\n // the overlay is hovered.\n chartRef.current?.overrideOverlay({ id, zLevel: z, fixedZLevel: true });\n },\n copyDrawing: (id) => {\n const snap = snapshotOne(id);\n if (snap) clipboardRef.current = snap;\n },\n pasteDrawing: () => {\n if (clipboardRef.current) createFromSnapshot(clipboardRef.current);\n },\n canPaste: () => clipboardRef.current !== null,\n getSelectedDrawing: () => selectedIdRef.current,\n };\n }\n\n return apiRef.current;\n}\n","import { registerOverlay } from \"klinecharts\";\nimport type { OverlayCreateFiguresCallbackParams, OverlayFigure } from \"klinecharts\";\n\n// Text annotation tool (a click-and-type label, like TradingView's \"Text\").\n// KLineChart's built-in simpleAnnotation/simpleTag render fixed text and have no\n// input flow, so we register a small custom overlay: one click anchors it, then\n// SonrChart shows an inline input and stores the typed string in `extendData.text`.\n// Because it's a normal overlay in the user-drawing group, it pans/zooms with the\n// chart and plugs into undo/redo, clear, and export/import for free.\n\nexport const TEXT_OVERLAY = \"text\";\n\n/** Styling for a text label (defaults for new labels live on the chart handle). */\nexport interface TextStyle {\n color: string;\n size: number;\n}\n\n/** Shape of a text overlay's extendData: the label plus its per-label style. */\nexport interface TextData extends Partial<TextStyle> {\n text: string;\n}\n\n/** Default text label style. */\nexport const DEFAULT_TEXT_STYLE: TextStyle = { color: \"#2962ff\", size: 12 };\n\nconst PLACEHOLDER = \"Text\";\n\n/** Build the text figure(s) for a placed text overlay. Shows a muted\n * placeholder while the label is still empty (during editing) so the anchor\n * stays visible. */\nexport function textFigures({ coordinates, overlay }: OverlayCreateFiguresCallbackParams<unknown>): OverlayFigure[] {\n if (!coordinates || coordinates.length < 1) return [];\n const { x, y } = coordinates[0];\n const ext = overlay.extendData as TextData | undefined;\n const raw = ext?.text ?? \"\";\n const text = raw.length > 0 ? raw : PLACEHOLDER;\n const color = ext?.color ?? DEFAULT_TEXT_STYLE.color;\n const size = ext?.size ?? DEFAULT_TEXT_STYLE.size;\n return [\n {\n type: \"text\",\n attrs: { x, y, text, align: \"left\", baseline: \"middle\" },\n // A subtle box in the label's ink, matching the toolbar's other overlays.\n // NB: no `family` override — a canvas font string like \"20px inherit\" is\n // invalid and canvas silently ignores the whole assignment (dropping the\n // size with it), so we let KLineChart's valid default family apply.\n styles: {\n color,\n size,\n weight: \"normal\",\n paddingLeft: 4,\n paddingRight: 4,\n paddingTop: 2,\n paddingBottom: 2,\n borderColor: color,\n borderSize: 1,\n borderRadius: 2,\n backgroundColor: \"transparent\",\n },\n },\n ];\n}\n\nlet _registered = false;\n\nexport function registerTextOverlay(): void {\n if (_registered) return;\n _registered = true;\n registerOverlay({\n name: TEXT_OVERLAY,\n // One click to anchor (+1 for KLineChart's pending step).\n totalStep: 2,\n needDefaultPointFigure: false,\n needDefaultXAxisFigure: false,\n needDefaultYAxisFigure: false,\n createPointFigures: textFigures,\n // KLineChart removes an overlay on right-click unless the handler calls\n // event.preventDefault() (the return value does NOT gate removal), so a\n // text label isn't deleted by a stray right-click.\n onRightClick: (event) => {\n event.preventDefault?.();\n return false;\n },\n });\n}\n","import type { DrawingTool } from \"./types\";\nimport { BRUSH_OVERLAY } from \"./brush\";\nimport { TEXT_OVERLAY } from \"./textOverlay\";\n\n// Curated drawing/annotation tools (issue #3) from KLineChart's built-ins,\n// labeled for a toolbar. This is the \"sensible default set\" — hosts can pass\n// their own subset to <DrawingToolbar>, or start any tool via the chart ref.\nexport interface DrawingToolOption {\n tool: DrawingTool;\n label: string;\n}\n\nexport const DEFAULT_DRAWING_TOOLS: DrawingToolOption[] = [\n { tool: \"segment\", label: \"Trend line\" },\n { tool: \"rayLine\", label: \"Ray\" },\n { tool: \"straightLine\", label: \"Extended line\" },\n { tool: \"horizontalStraightLine\", label: \"Horizontal\" },\n { tool: \"verticalStraightLine\", label: \"Vertical\" },\n { tool: \"priceLine\", label: \"Price line\" },\n { tool: \"parallelStraightLine\", label: \"Parallel channel\" },\n { tool: \"priceChannelLine\", label: \"Price channel\" },\n { tool: \"fibonacciLine\", label: \"Fibonacci\" },\n { tool: \"text\", label: \"Text\" },\n { tool: \"simpleAnnotation\", label: \"Note\" },\n { tool: \"simpleTag\", label: \"Tag\" },\n { tool: \"brush\", label: \"Brush\" },\n { tool: \"highlighter\", label: \"Highlighter\" },\n { tool: \"rectangle\", label: \"Rectangle\" },\n { tool: \"ellipse\", label: \"Ellipse\" },\n { tool: \"triangle\", label: \"Triangle\" },\n { tool: \"priceRange\", label: \"Price range\" },\n { tool: \"riskReward\", label: \"Risk / reward\" },\n];\n\n// Extended drawing family (issue #34) — an opt-in second tier of tools\n// registered as custom overlays (see drawingsExtended.ts). NOT in the default\n// toolbar; a host spreads these into <DrawingToolbar tools> to offer them.\nexport const EXTENDED_DRAWING_TOOLS: DrawingToolOption[] = [\n { tool: \"horizontalRay\", label: \"Horizontal ray\" },\n { tool: \"crossLine\", label: \"Cross line\" },\n { tool: \"arrow\", label: \"Arrow\" },\n { tool: \"fibExtension\", label: \"Fib extension\" },\n { tool: \"fibTimeZone\", label: \"Fib time zone\" },\n { tool: \"dateRange\", label: \"Date range\" },\n { tool: \"datePriceRange\", label: \"Date & price range\" },\n];\n\n// Every user-started drawing is tagged with this group id so clearDrawings()\n// can remove them without touching library-managed overlays (price/order lines,\n// session/pattern indicators).\nexport const USER_DRAWING_GROUP = \"sonr-user-drawing\";\n\n// Tool id → label, for the object tree (#45). Built once from the default +\n// extended sets so every placed overlay resolves to a human label.\nconst TOOL_LABELS: Record<string, string> = Object.fromEntries(\n [...DEFAULT_DRAWING_TOOLS, ...EXTENDED_DRAWING_TOOLS].map((t) => [t.tool, t.label]),\n);\n\n/** Human label for a placed drawing in the object tree. Text labels show their\n * own content; freehand shares one overlay name; everything else maps to its\n * tool label (falling back to the raw overlay name). Pure. */\nexport function drawingLabel(name: string, extendData?: unknown): string {\n if (name === TEXT_OVERLAY) {\n const text = (extendData as { text?: string } | undefined)?.text?.trim();\n return text && text.length > 0 ? text : \"Text\";\n }\n if (name === BRUSH_OVERLAY) return \"Freehand\";\n return TOOL_LABELS[name] ?? name;\n}\n","// In-memory store for named drawing templates (issue #35). A template is a\n// snapshot of the user-drawing overlays (the same shape SonrChart's\n// snapshotDrawings/restoreDrawings and ChartState.drawings use), saved under a\n// name so a UI can re-apply a whole drawing set later. Storage is in-memory\n// only — a host that wants persistence exports the snapshots itself.\nimport type { DeepPartial, Nullable, OverlayMode, OverlayStyle, Point } from \"klinecharts\";\n\n/** One saved overlay in a drawing template — the canonical serialized shape of\n * a user drawing, shared by ChartState.drawings and SonrChart's snapshot/\n * restore. Field types mirror KLineChart's `Overlay`, so a snapshot round-trips\n * straight back into `createOverlay` with no casts. */\nexport interface DrawingSnapshotItem {\n name: string;\n points: Array<Partial<Point>>;\n styles?: Nullable<DeepPartial<OverlayStyle>>;\n mode?: OverlayMode;\n extendData?: unknown;\n}\n\n/** A full drawing template: the user overlays captured at save time. */\nexport type DrawingSnapshot = DrawingSnapshotItem[];\n\n/** Named-drawing-set store with change subscription (for a settings UI). */\nexport class DrawingTemplateStore {\n private templates = new Map<string, DrawingSnapshot>();\n private subs = new Set<() => void>();\n\n /** Save (or overwrite) a named template from a drawing snapshot. */\n save(name: string, snap: DrawingSnapshot): void {\n if (!name) return;\n this.templates.set(name, snap);\n this.notify();\n }\n\n /** The saved snapshot for a name, or undefined if there is none. */\n get(name: string): DrawingSnapshot | undefined {\n return this.templates.get(name);\n }\n\n /** Names of all saved templates, in insertion order. */\n list(): string[] {\n return [...this.templates.keys()];\n }\n\n /** Remove a template. No-op if the name is unknown. */\n delete(name: string): void {\n if (this.templates.delete(name)) this.notify();\n }\n\n /** Subscribe to list changes (save/delete). Returns an unsubscribe fn. */\n subscribe(cb: () => void): () => void {\n this.subs.add(cb);\n return () => this.subs.delete(cb);\n }\n\n private notify(): void {\n this.subs.forEach((cb) => cb());\n }\n}\n","// Keyboard-shortcut key mapping for the chart (#14). Kept pure and DOM-light so\n// it is trivial to unit-test: `resolveShortcut` maps a keydown to an action, and\n// the caller (SonrChart) decides whether to run the built-in + notify the host.\n\n/** Built-in chart shortcut actions surfaced to the host via `onShortcut`. */\nexport type ShortcutAction = \"escape\" | \"undo\" | \"redo\" | \"delete\" | \"copy\" | \"paste\";\n\n/** True when the event originates from a field where the user is typing — an\n * input/textarea/select or a contenteditable element. Shortcuts must never\n * hijack these (symbol search, settings inputs, etc.). */\nexport function isEditableTarget(target: EventTarget | null): boolean {\n const el = target as (HTMLElement & { isContentEditable?: boolean }) | null;\n if (!el || typeof el.tagName !== \"string\") return false;\n const tag = el.tagName.toLowerCase();\n if (tag === \"input\" || tag === \"textarea\" || tag === \"select\") return true;\n return el.isContentEditable === true;\n}\n\n/** Map a keydown to a built-in chart shortcut action, or null if none.\n * Pure — reads only the event's key + modifiers, never the DOM or app state.\n * The caller further gates \"delete\" on whether a drawing tool is armed. */\nexport function resolveShortcut(e: KeyboardEvent): ShortcutAction | null {\n const mod = e.metaKey || e.ctrlKey; // Cmd (mac) or Ctrl (win/linux)\n const key = e.key;\n // Cancel an armed drawing.\n if (key === \"Escape\" || key === \"Esc\") return \"escape\";\n // Undo / redo. Cmd/Ctrl+Z; Shift flips it to redo. Ctrl/Cmd+Y is also redo.\n if (mod && (key === \"z\" || key === \"Z\")) return e.shiftKey ? \"redo\" : \"undo\";\n if (mod && (key === \"y\" || key === \"Y\")) return \"redo\";\n // Copy the selected drawing / paste the copied one (#35). The caller only\n // consumes the event (preventDefault) when there's a selection / clipboard,\n // so an unrelated Cmd/Ctrl+C-V still works normally.\n if (mod && (key === \"c\" || key === \"C\")) return \"copy\";\n if (mod && (key === \"v\" || key === \"V\")) return \"paste\";\n // Clear all drawings — only without a modifier (Cmd/Ctrl+Delete is a\n // different command and must not clobber the drawings).\n if (!mod && (key === \"Delete\" || key === \"Backspace\")) return \"delete\";\n return null;\n}\n","import { registerOverlay } from \"klinecharts\";\nimport type { OverlayCreateFiguresCallbackParams, OverlayFigure } from \"klinecharts\";\n\n// Shape & measurement drawing tools (issue #34). KLineChart ships line-based\n// drawing tools but no filled shapes or measurement widgets, so we register\n// these as custom overlays. Each `createPointFigures` builds its geometry from\n// the placed screen `coordinates` (and, for measurement tools, the anchored\n// price `value`s on `overlay.points`), so everything pans/zooms with the chart\n// and — because they're created in the user-drawing group — plugs into\n// undo/redo, clear, and export/import for free.\n//\n// DEFERRED (noted in the issue): Gann fans/boxes, Elliott-wave, harmonic\n// patterns, and Andrews' pitchfork. KLineChart has no native primitives for\n// these and each is a substantial standalone effort; out of scope here.\n\n// Overlay names double as the DrawingTool ids (SonrChart maps\n// startDrawing(tool) → createOverlay({ name: tool })), so these strings must\n// match the DrawingTool union entries in types.ts.\nexport const SHAPE_RECTANGLE = \"rectangle\";\nexport const SHAPE_ELLIPSE = \"ellipse\";\nexport const SHAPE_TRIANGLE = \"triangle\";\nexport const SHAPE_PRICE_RANGE = \"priceRange\";\nexport const SHAPE_RISK_REWARD = \"riskReward\";\n\n/** All shape/measurement overlay names, in toolbar order. */\nexport const SHAPE_OVERLAYS = [\n SHAPE_RECTANGLE,\n SHAPE_ELLIPSE,\n SHAPE_TRIANGLE,\n SHAPE_PRICE_RANGE,\n SHAPE_RISK_REWARD,\n] as const;\n\n// Shared palette. Semi-transparent fills so candles read through; borders are\n// opaque. These are theme-neutral (a mid blue reads on both light and dark).\nconst OUTLINE = \"#2962ff\";\nconst FILL = \"rgba(41,98,255,0.10)\";\nconst UP = \"#26a69a\";\nconst UP_FILL = \"rgba(38,166,154,0.15)\";\nconst DOWN = \"#ef5350\";\nconst DOWN_FILL = \"rgba(239,83,80,0.15)\";\nconst LABEL_TEXT = \"#ffffff\";\n\ntype Params = OverlayCreateFiguresCallbackParams<unknown>;\n\nfunction rectAttrs(x0: number, y0: number, x1: number, y1: number) {\n return { x: Math.min(x0, x1), y: Math.min(y0, y1), width: Math.abs(x1 - x0), height: Math.abs(y1 - y0) };\n}\n\n/** Rectangle — a 2-point outlined/filled box. */\nexport function rectangleFigures({ coordinates }: Params): OverlayFigure[] {\n if (coordinates.length < 2) return [];\n const [a, b] = coordinates;\n return [\n {\n type: \"rect\",\n attrs: rectAttrs(a.x, a.y, b.x, b.y),\n styles: { style: \"stroke_fill\", color: FILL, borderColor: OUTLINE, borderSize: 1 },\n },\n ];\n}\n\n// Unit-circle cos/sin table, computed once. The ellipse polygon has a fixed\n// vertex count, so the trig never changes frame-to-frame — only the center and\n// radii do. Hoisting it out drops 96 trig calls per redraw to zero.\nconst ELLIPSE_STEPS = 48;\nconst UNIT_CIRCLE: ReadonlyArray<{ cos: number; sin: number }> = Array.from({ length: ELLIPSE_STEPS }, (_, i) => {\n const t = (i / ELLIPSE_STEPS) * Math.PI * 2;\n return { cos: Math.cos(t), sin: Math.sin(t) };\n});\n\n/** Ellipse — a 2-point ellipse inscribed in the box the points bound. Drawn as\n * a polygon approximation, since KLineChart's circle/arc take a single radius. */\nexport function ellipseFigures({ coordinates }: Params): OverlayFigure[] {\n if (coordinates.length < 2) return [];\n const [a, b] = coordinates;\n const cx = (a.x + b.x) / 2;\n const cy = (a.y + b.y) / 2;\n const rx = Math.abs(b.x - a.x) / 2;\n const ry = Math.abs(b.y - a.y) / 2;\n const pts = UNIT_CIRCLE.map((u) => ({ x: cx + rx * u.cos, y: cy + ry * u.sin }));\n return [\n {\n type: \"polygon\",\n attrs: { coordinates: pts },\n styles: { style: \"stroke_fill\", color: FILL, borderColor: OUTLINE, borderSize: 1 },\n },\n ];\n}\n\n/** Triangle — a 3-point filled/outlined triangle. */\nexport function triangleFigures({ coordinates }: Params): OverlayFigure[] {\n if (coordinates.length < 3) return [];\n return [\n {\n type: \"polygon\",\n attrs: { coordinates: coordinates.slice(0, 3).map((c) => ({ x: c.x, y: c.y })) },\n styles: { style: \"stroke_fill\", color: FILL, borderColor: OUTLINE, borderSize: 1 },\n },\n ];\n}\n\n/** Format a price-range measurement: absolute delta + percentage between two\n * prices. Pure so it's unit-testable. */\nexport function priceRangeLabel(from: number, to: number): string {\n const delta = to - from;\n const sign = delta >= 0 ? \"+\" : \"\";\n const pct = from !== 0 ? (delta / Math.abs(from)) * 100 : 0;\n return `${sign}${delta.toFixed(2)} (${sign}${pct.toFixed(2)}%)`;\n}\n\n/** Price range — a 2-point measurement box with a delta/% label. */\nexport function priceRangeFigures({ coordinates, overlay }: Params): OverlayFigure[] {\n if (coordinates.length < 2) return [];\n const [a, b] = coordinates;\n const from = overlay.points[0]?.value ?? 0;\n const to = overlay.points[1]?.value ?? 0;\n const up = to >= from;\n const color = up ? UP : DOWN;\n const fill = up ? UP_FILL : DOWN_FILL;\n const midX = (a.x + b.x) / 2;\n const topY = Math.min(a.y, b.y);\n return [\n {\n type: \"rect\",\n attrs: rectAttrs(a.x, a.y, b.x, b.y),\n styles: { style: \"stroke_fill\", color: fill, borderColor: color, borderSize: 1 },\n },\n {\n type: \"text\",\n attrs: { x: midX, y: topY - 4, text: priceRangeLabel(from, to), align: \"center\", baseline: \"bottom\" },\n ignoreEvent: true,\n styles: { color: LABEL_TEXT, backgroundColor: color, size: 12, paddingLeft: 4, paddingRight: 4, paddingTop: 2, paddingBottom: 2, borderRadius: 2 },\n },\n ];\n}\n\n/** Risk/reward stats for a long setup (entry / stop / target). Pure so it's\n * unit-testable. `rr` is reward-per-unit-risk (an R multiple); NaN-safe. */\nexport function riskRewardStats(entry: number, stop: number, target: number): { risk: number; reward: number; rr: number } {\n const risk = Math.abs(entry - stop);\n const reward = Math.abs(target - entry);\n const rr = risk > 0 ? reward / risk : 0;\n return { risk, reward, rr };\n}\n\n/** Risk/Reward (long) — 3 points (entry, stop, target): a green reward box\n * from entry→target and a red risk box from entry→stop, with an R-multiple\n * label. Boxes span the full horizontal extent of the placed points. */\nexport function riskRewardFigures({ coordinates, overlay }: Params): OverlayFigure[] {\n if (coordinates.length < 3) return [];\n const [entry, stop, target] = coordinates;\n const left = Math.min(entry.x, stop.x, target.x);\n const right = Math.max(entry.x, stop.x, target.x);\n const width = Math.max(right - left, 1);\n const entryVal = overlay.points[0]?.value ?? 0;\n const stopVal = overlay.points[1]?.value ?? 0;\n const targetVal = overlay.points[2]?.value ?? 0;\n const { rr } = riskRewardStats(entryVal, stopVal, targetVal);\n const rewardTop = Math.min(entry.y, target.y);\n const riskTop = Math.min(entry.y, stop.y);\n return [\n {\n type: \"rect\",\n attrs: { x: left, y: rewardTop, width, height: Math.abs(target.y - entry.y) },\n styles: { style: \"stroke_fill\", color: UP_FILL, borderColor: UP, borderSize: 1 },\n },\n {\n type: \"rect\",\n attrs: { x: left, y: riskTop, width, height: Math.abs(stop.y - entry.y) },\n styles: { style: \"stroke_fill\", color: DOWN_FILL, borderColor: DOWN, borderSize: 1 },\n },\n {\n type: \"text\",\n attrs: { x: (left + right) / 2, y: entry.y, text: `${rr.toFixed(2)}R`, align: \"center\", baseline: \"middle\" },\n ignoreEvent: true,\n styles: { color: LABEL_TEXT, backgroundColor: OUTLINE, size: 12, paddingLeft: 4, paddingRight: 4, paddingTop: 2, paddingBottom: 2, borderRadius: 2 },\n },\n ];\n}\n\nlet _registered = false;\n\n/** Register all shape/measurement overlays once. Idempotent. */\nexport function registerShapeOverlays(): void {\n if (_registered) return;\n _registered = true;\n const defs: Array<{ name: string; totalStep: number; build: (p: Params) => OverlayFigure[] }> = [\n { name: SHAPE_RECTANGLE, totalStep: 2, build: rectangleFigures },\n { name: SHAPE_ELLIPSE, totalStep: 2, build: ellipseFigures },\n { name: SHAPE_TRIANGLE, totalStep: 3, build: triangleFigures },\n { name: SHAPE_PRICE_RANGE, totalStep: 2, build: priceRangeFigures },\n { name: SHAPE_RISK_REWARD, totalStep: 3, build: riskRewardFigures },\n ];\n for (const d of defs) {\n registerOverlay({\n name: d.name,\n // totalStep is clicks-to-place + 1 (KLineChart counts the pending step).\n totalStep: d.totalStep + 1,\n needDefaultPointFigure: true,\n needDefaultXAxisFigure: false,\n needDefaultYAxisFigure: false,\n createPointFigures: d.build,\n });\n }\n}\n","import { registerOverlay } from \"klinecharts\";\nimport type { Coordinate, OverlayCreateFiguresCallbackParams, OverlayFigure } from \"klinecharts\";\nimport { priceRangeLabel } from \"./shapes\";\n\n// Extended drawing family (issue #34). A curated second tier of drawing tools\n// built on the same custom-overlay seam as shapes.ts: each `createPointFigures`\n// derives its geometry from the placed screen `coordinates` (plus the anchored\n// price `value`/`timestamp`/`dataIndex` on `overlay.points` for measurements),\n// so everything pans/zooms with the chart and — created in the user-drawing\n// group — plugs into undo/redo, clear, and export/import for free.\n//\n// These are OPT-IN: they are NOT in DEFAULT_DRAWING_TOOLS (the toolbar stays\n// curated). A host adds them via EXTENDED_DRAWING_TOOLS or starts one by name\n// through the chart handle.\n//\n// DEFERRED (noted in the issue + feature doc, \"user did not decide to\n// implement\"): Gann fans/squares, Elliott-wave, Andrews' pitchfork, harmonic /\n// XABCD patterns, and the rarer Fibonacci variants (spiral, arcs, fan, wedge,\n// circles, channel). KLineChart has no primitives for these and each is a\n// substantial standalone effort — out of scope for this curated pass.\n\n// Overlay names double as DrawingTool ids (SonrChart maps startDrawing(tool) →\n// createOverlay({ name: tool })), so these must match the DrawingTool union.\nexport const EXT_HORIZONTAL_RAY = \"horizontalRay\";\nexport const EXT_CROSS_LINE = \"crossLine\";\nexport const EXT_ARROW = \"arrow\";\nexport const EXT_FIB_EXTENSION = \"fibExtension\";\nexport const EXT_FIB_TIME_ZONE = \"fibTimeZone\";\nexport const EXT_DATE_RANGE = \"dateRange\";\nexport const EXT_DATE_PRICE_RANGE = \"datePriceRange\";\n\n/** All extended overlay names, in toolbar order. */\nexport const EXTENDED_OVERLAYS = [\n EXT_HORIZONTAL_RAY,\n EXT_CROSS_LINE,\n EXT_ARROW,\n EXT_FIB_EXTENSION,\n EXT_FIB_TIME_ZONE,\n EXT_DATE_RANGE,\n EXT_DATE_PRICE_RANGE,\n] as const;\n\n// Shared palette (aligned with shapes.ts).\nconst LINE = \"#2962ff\";\nconst FILL = \"rgba(41,98,255,0.08)\";\nconst UP = \"#26a69a\";\nconst DOWN = \"#ef5350\";\nconst LABEL_TEXT = \"#ffffff\";\nconst FIB_COLORS = [\"#787b86\", \"#f23645\", \"#ff9800\", \"#4caf50\", \"#089981\", \"#2962ff\", \"#9c27b0\"];\n\nconst LABEL_STYLE = {\n color: LABEL_TEXT,\n size: 12,\n paddingLeft: 4,\n paddingRight: 4,\n paddingTop: 2,\n paddingBottom: 2,\n borderRadius: 2,\n} as const;\n\ntype Params = OverlayCreateFiguresCallbackParams<unknown>;\n\n// ---------------------------------------------------------------------------\n// Pure helpers (unit-tested directly)\n// ---------------------------------------------------------------------------\n\n/** Trend-based Fibonacci extension levels (retracement + projection). */\nexport const FIB_EXTENSION_LEVELS: readonly number[] = [0, 0.382, 0.618, 1, 1.618, 2.618];\n\n/** Fibonacci sequence multipliers for time zones (starts 1,2,3,5,8,…). Pure. */\nexport function fibSequence(count: number): number[] {\n const out: number[] = [];\n let a = 1;\n let b = 2;\n for (let i = 0; i < Math.max(0, count); i++) {\n out.push(a);\n [a, b] = [b, a + b];\n }\n return out;\n}\n\n/**\n * Arrowhead polygon for a segment ending at (x2,y2), coming from (x1,y1). Two\n * barbs swept back from the tip by `size` px at ±`spread` radians. Pure. Returns\n * [leftBarb, tip, rightBarb]. Zero-length segments yield a degenerate triangle\n * at the tip (harmless).\n */\nexport function arrowHeadPoints(\n x1: number,\n y1: number,\n x2: number,\n y2: number,\n size = 10,\n spread = Math.PI / 7,\n): Coordinate[] {\n const angle = Math.atan2(y2 - y1, x2 - x1);\n const left = { x: x2 - size * Math.cos(angle - spread), y: y2 - size * Math.sin(angle - spread) };\n const right = { x: x2 - size * Math.cos(angle + spread), y: y2 - size * Math.sin(angle + spread) };\n return [left, { x: x2, y: y2 }, right];\n}\n\n/** Human duration for a millisecond span, coarse-grained (largest two units).\n * Pure. E.g. 3_660_000 → \"1h 1m\", 45_000 → \"45s\". */\nexport function humanDuration(ms: number): string {\n const s = Math.round(Math.abs(ms) / 1000);\n const d = Math.floor(s / 86400);\n const h = Math.floor((s % 86400) / 3600);\n const m = Math.floor((s % 3600) / 60);\n const sec = s % 60;\n const parts: string[] = [];\n if (d) parts.push(`${d}d`);\n if (h) parts.push(`${h}h`);\n if (m) parts.push(`${m}m`);\n if (sec && !d && !h) parts.push(`${sec}s`);\n return parts.slice(0, 2).join(\" \") || \"0s\";\n}\n\n/** Measurement label for a date range: bar count + human time span. Pure. */\nexport function dateRangeLabel(bars: number, ms: number): string {\n const b = Math.abs(Math.round(bars));\n return `${b} bar${b === 1 ? \"\" : \"s\"} · ${humanDuration(ms)}`;\n}\n\n// ---------------------------------------------------------------------------\n// Figure builders\n// ---------------------------------------------------------------------------\n\n/** Horizontal ray — locks to the first point's price, extends to the pane edge\n * in the direction of the second point. */\nexport function horizontalRayFigures({ coordinates, bounding }: Params): OverlayFigure[] {\n if (coordinates.length < 1) return [];\n const [a, b] = coordinates;\n const endX = !b || b.x >= a.x ? bounding.width : 0;\n return [{ type: \"line\", attrs: { coordinates: [{ x: a.x, y: a.y }, { x: endX, y: a.y }] }, styles: { color: LINE, size: 1 } }];\n}\n\n/** Cross line — full-width horizontal + full-height vertical through one point. */\nexport function crossLineFigures({ coordinates, bounding }: Params): OverlayFigure[] {\n if (coordinates.length < 1) return [];\n const [p] = coordinates;\n return [\n { type: \"line\", attrs: { coordinates: [{ x: 0, y: p.y }, { x: bounding.width, y: p.y }] }, styles: { color: LINE, size: 1 } },\n { type: \"line\", attrs: { coordinates: [{ x: p.x, y: 0 }, { x: p.x, y: bounding.height }] }, styles: { color: LINE, size: 1 } },\n ];\n}\n\n/** Arrow — a 2-point segment with a filled arrowhead at the second point. */\nexport function arrowFigures({ coordinates }: Params): OverlayFigure[] {\n if (coordinates.length < 2) return [];\n const [a, b] = coordinates;\n return [\n { type: \"line\", attrs: { coordinates: [{ x: a.x, y: a.y }, { x: b.x, y: b.y }] }, styles: { color: LINE, size: 2 } },\n {\n type: \"polygon\",\n attrs: { coordinates: arrowHeadPoints(a.x, a.y, b.x, b.y) },\n styles: { style: \"fill\", color: LINE },\n },\n ];\n}\n\n/**\n * Trend-based Fibonacci extension — 3 points A,B,C. Projects the A→B move from\n * C at each Fib level. The value/pixel relationship is read straight off the two\n * placed anchors (pixels-per-price = (B.y−A.y)/(B.value−A.value)), so no y-axis\n * conversion API is needed. Each level draws a horizontal line from C to the\n * right edge with a \"{level} ({price})\" label.\n */\nexport function fibExtensionFigures({ coordinates, overlay, bounding }: Params): OverlayFigure[] {\n if (coordinates.length < 3) return [];\n const [, , c] = coordinates;\n const yA = coordinates[0].y;\n const yB = coordinates[1].y;\n const valA = overlay.points[0]?.value ?? 0;\n const valB = overlay.points[1]?.value ?? 0;\n const valC = overlay.points[2]?.value ?? 0;\n const dySpan = yB - yA; // pixels for (valB - valA)\n const dValSpan = valB - valA;\n const figures: OverlayFigure[] = [];\n FIB_EXTENSION_LEVELS.forEach((level, i) => {\n const y = c.y + level * dySpan;\n const price = valC + level * dValSpan;\n const color = FIB_COLORS[i % FIB_COLORS.length];\n figures.push({ type: \"line\", attrs: { coordinates: [{ x: c.x, y }, { x: bounding.width, y }] }, styles: { color, size: 1 } });\n figures.push({\n type: \"text\",\n attrs: { x: c.x + 4, y: y - 2, text: `${level} (${price.toFixed(2)})`, baseline: \"bottom\" },\n ignoreEvent: true,\n styles: { ...LABEL_STYLE, backgroundColor: color },\n });\n });\n return figures;\n}\n\n/** Fibonacci time zones — 2 points set the base unit (bar spacing); vertical\n * lines at Fibonacci multiples of that unit, full height. */\nexport function fibTimeZoneFigures({ coordinates, bounding }: Params): OverlayFigure[] {\n if (coordinates.length < 2) return [];\n const [a, b] = coordinates;\n const unit = b.x - a.x;\n if (unit === 0) return [];\n const figures: OverlayFigure[] = [];\n fibSequence(8).forEach((mult, i) => {\n const x = a.x + unit * mult;\n if (x < 0 || x > bounding.width) return;\n const color = FIB_COLORS[i % FIB_COLORS.length];\n figures.push({ type: \"line\", attrs: { coordinates: [{ x, y: 0 }, { x, y: bounding.height }] }, styles: { color, size: 1 } });\n });\n return figures;\n}\n\nfunction rectAttrs(x0: number, y0: number, x1: number, y1: number) {\n return { x: Math.min(x0, x1), y: Math.min(y0, y1), width: Math.abs(x1 - x0), height: Math.abs(y1 - y0) };\n}\n\n/** Date range — 2-point measurement box labelled with the bar count + time span\n * between the anchors. */\nexport function dateRangeFigures({ coordinates, overlay }: Params): OverlayFigure[] {\n if (coordinates.length < 2) return [];\n const [a, b] = coordinates;\n const bars = (overlay.points[1]?.dataIndex ?? 0) - (overlay.points[0]?.dataIndex ?? 0);\n const ms = (overlay.points[1]?.timestamp ?? 0) - (overlay.points[0]?.timestamp ?? 0);\n return [\n { type: \"rect\", attrs: rectAttrs(a.x, a.y, b.x, b.y), styles: { style: \"stroke_fill\", color: FILL, borderColor: LINE, borderSize: 1 } },\n {\n type: \"text\",\n attrs: { x: (a.x + b.x) / 2, y: Math.min(a.y, b.y) - 4, text: dateRangeLabel(bars, ms), align: \"center\", baseline: \"bottom\" },\n ignoreEvent: true,\n styles: { ...LABEL_STYLE, backgroundColor: LINE },\n },\n ];\n}\n\n/** Date & price range — 2-point box labelled with BOTH the price delta/% and\n * the bar-count/time span. Direction tints the box green/red. */\nexport function datePriceRangeFigures({ coordinates, overlay }: Params): OverlayFigure[] {\n if (coordinates.length < 2) return [];\n const [a, b] = coordinates;\n const fromV = overlay.points[0]?.value ?? 0;\n const toV = overlay.points[1]?.value ?? 0;\n const bars = (overlay.points[1]?.dataIndex ?? 0) - (overlay.points[0]?.dataIndex ?? 0);\n const ms = (overlay.points[1]?.timestamp ?? 0) - (overlay.points[0]?.timestamp ?? 0);\n const up = toV >= fromV;\n const color = up ? UP : DOWN;\n return [\n { type: \"rect\", attrs: rectAttrs(a.x, a.y, b.x, b.y), styles: { style: \"stroke_fill\", color: up ? \"rgba(38,166,154,0.12)\" : \"rgba(239,83,80,0.12)\", borderColor: color, borderSize: 1 } },\n {\n type: \"text\",\n attrs: { x: (a.x + b.x) / 2, y: Math.min(a.y, b.y) - 4, text: `${priceRangeLabel(fromV, toV)} · ${dateRangeLabel(bars, ms)}`, align: \"center\", baseline: \"bottom\" },\n ignoreEvent: true,\n styles: { ...LABEL_STYLE, backgroundColor: color },\n },\n ];\n}\n\nlet _registered = false;\n\n/** Register all extended-family overlays once. Idempotent. */\nexport function registerExtendedDrawings(): void {\n if (_registered) return;\n _registered = true;\n const defs: Array<{ name: string; points: number; build: (p: Params) => OverlayFigure[] }> = [\n { name: EXT_HORIZONTAL_RAY, points: 2, build: horizontalRayFigures },\n { name: EXT_CROSS_LINE, points: 1, build: crossLineFigures },\n { name: EXT_ARROW, points: 2, build: arrowFigures },\n { name: EXT_FIB_EXTENSION, points: 3, build: fibExtensionFigures },\n { name: EXT_FIB_TIME_ZONE, points: 2, build: fibTimeZoneFigures },\n { name: EXT_DATE_RANGE, points: 2, build: dateRangeFigures },\n { name: EXT_DATE_PRICE_RANGE, points: 2, build: datePriceRangeFigures },\n ];\n for (const d of defs) {\n registerOverlay({\n name: d.name,\n // totalStep is clicks-to-place + 1 (KLineChart counts the pending step).\n totalStep: d.points + 1,\n needDefaultPointFigure: true,\n needDefaultXAxisFigure: false,\n needDefaultYAxisFigure: false,\n createPointFigures: d.build,\n });\n }\n}\n","import { registerOverlay } from \"klinecharts\";\nimport type { OverlayCreateFiguresCallbackParams, OverlayFigure } from \"klinecharts\";\n\n// Trade-review overlay (Echo #157 polish): a risk/reward-style box drawn from a\n// trade's entry to its exit, tinted green (win) or red (loss), with the result\n// (P&L or R) labelled at the box — far more legible than a pair of entry/exit\n// arrow markers. Created programmatically (2 points + extendData), not by the\n// user, so it carries `needDefaultPointFigure: false` (no anchor handles).\n//\n// extendData: { up: boolean; label?: string; entryLine?: boolean }\n\nexport const SONR_TRADE_BOX = \"sonrTradeBox\";\n\nconst UP = \"#26a69a\";\nconst UP_FILL = \"rgba(38,166,154,0.14)\";\nconst DOWN = \"#ef5350\";\nconst DOWN_FILL = \"rgba(239,83,80,0.14)\";\n\ninterface TradeBoxData {\n up?: boolean;\n label?: string;\n /** Draw a horizontal reference line at the entry price across the box. */\n entryLine?: boolean;\n}\n\ntype Params = OverlayCreateFiguresCallbackParams<TradeBoxData>;\n\nexport function tradeBoxFigures({ coordinates, overlay }: Params): OverlayFigure[] {\n if (coordinates.length < 2) return [];\n const [entry, exit] = coordinates;\n const ext = overlay.extendData ?? {};\n const up = ext.up !== false;\n const color = up ? UP : DOWN;\n const fill = up ? UP_FILL : DOWN_FILL;\n const x = Math.min(entry.x, exit.x);\n const y = Math.min(entry.y, exit.y);\n const width = Math.max(Math.abs(exit.x - entry.x), 1);\n const height = Math.max(Math.abs(exit.y - entry.y), 1);\n\n const figures: OverlayFigure[] = [\n { type: \"rect\", attrs: { x, y, width, height }, styles: { style: \"stroke_fill\", color: fill, borderColor: color, borderSize: 1.5 } },\n ];\n // Entry reference line across the box (the risk/reward \"entry\" split).\n if (ext.entryLine !== false) {\n figures.push({ type: \"line\", attrs: { coordinates: [{ x, y: entry.y }, { x: x + width, y: entry.y }] }, styles: { color, size: 1, style: \"dashed\" } });\n }\n // Solid entry / exit anchor dots.\n figures.push({ type: \"circle\", attrs: { x: entry.x, y: entry.y, r: 3.5 }, ignoreEvent: true, styles: { style: \"fill\", color } });\n figures.push({ type: \"circle\", attrs: { x: exit.x, y: exit.y, r: 3.5 }, ignoreEvent: true, styles: { style: \"fill\", color } });\n // Result label pinned to the box's top edge.\n if (ext.label) {\n figures.push({\n type: \"text\",\n attrs: { x: x + width / 2, y: y - 4, text: ext.label, align: \"center\", baseline: \"bottom\" },\n ignoreEvent: true,\n styles: { color: \"#ffffff\", backgroundColor: color, size: 12, paddingLeft: 6, paddingRight: 6, paddingTop: 2, paddingBottom: 2, borderRadius: 3 },\n });\n }\n return figures;\n}\n\nlet _registered = false;\n\n/** Register the trade-review overlay once. Idempotent. */\nexport function registerTradeReview(): void {\n if (_registered) return;\n _registered = true;\n registerOverlay({\n name: SONR_TRADE_BOX,\n totalStep: 3, // 2 points + 1 (created programmatically with both points supplied)\n needDefaultPointFigure: false,\n needDefaultXAxisFigure: false,\n needDefaultYAxisFigure: false,\n createPointFigures: tradeBoxFigures,\n });\n}\n","// Currency / unit price formatting (issue #39). Pure so it's unit-tested and\n// shared by the legend price cells and any host formatter.\n//\n// KLineChart's `Formatter` has no y-axis price hook and its global\n// `thousandsSeparator.format` is applied to volume and %-change too, so a raw\n// currency prefix there would corrupt those. We therefore decorate the prices\n// we fully control — the legend O/H/L/C and the crosshair pill (both routed\n// through the chart's price formatter) — rather than every axis tick.\n\n/** Quote metadata attached to a symbol (subset of SymbolInfo). */\nexport interface QuoteFormat {\n /** Currency code or sign, prefixed (e.g. \"USD\", \"$\"). */\n currency?: string;\n /** Unit, suffixed (e.g. \"pts\", \"¢\"). */\n unit?: string;\n}\n\n// Single-glyph currency signs render tight against the number (\"$12.30\");\n// multi-char codes read better spaced (\"USD 12.30\").\nconst SIGN = /^[^\\p{L}]+$/u;\n\n/**\n * Decorate an already-formatted price string with a currency prefix and/or unit\n * suffix. A glyph currency (\"$\", \"€\") hugs the number; an alphabetic code\n * (\"USD\") gets a space. Passing neither returns the text unchanged, so this\n * is a no-op for symbols without quote metadata. Pure.\n */\nexport function formatWithUnit(text: string, quote?: QuoteFormat): string {\n if (!quote) return text;\n let out = text;\n const cur = quote.currency?.trim();\n if (cur) out = SIGN.test(cur) ? `${cur}${out}` : `${cur} ${out}`;\n const unit = quote.unit?.trim();\n if (unit) out = `${out} ${unit}`;\n return out;\n}\n","import { useEffect, useMemo, useState, type RefObject } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport type { SonrChartHandle } from \"./SonrChart\";\nimport { ensureDefaultStyles } from \"./defaultStyles\";\nimport { useDropdown } from \"./useDropdown\";\nimport { mergeLabels, type Labels } from \"./labels\";\n\n// A drop-in indicator config UI (issue #4). A single toolbar button opens a\n// dropdown list of indicators; toggling a row adds/removes it live through the\n// SonrChart handle. The list is a dropdown (not a flat button row) so it stays\n// compact no matter how many indicators are offered. Hosts can use this as-is or\n// build their own UI on the same handle API.\n\n/** Common KLineChart indicators offered by default. `pane` decides overlay vs\n * sub-pane. Override via the `options` prop. */\nexport interface IndicatorOption {\n name: string;\n label: string;\n pane?: \"main\" | \"new\";\n}\n\nexport const DEFAULT_INDICATOR_OPTIONS: IndicatorOption[] = [\n // Price-pane overlays.\n { name: \"MA\", label: \"Moving Average\", pane: \"main\" },\n { name: \"EMA\", label: \"Exp. Moving Average\", pane: \"main\" },\n { name: \"SMA\", label: \"Smoothed Moving Average\", pane: \"main\" },\n { name: \"BBI\", label: \"Bull & Bear Index\", pane: \"main\" },\n { name: \"BOLL\", label: \"Bollinger Bands\", pane: \"main\" },\n { name: \"SAR\", label: \"Parabolic SAR\", pane: \"main\" },\n { name: \"DMA\", label: \"Difference of MA\", pane: \"main\" },\n { name: \"VWAP\", label: \"Volume Weighted Avg Price\", pane: \"main\" },\n // Sub-pane oscillators & volume studies.\n { name: \"VOL\", label: \"Volume\", pane: \"new\" },\n { name: \"MACD\", label: \"MACD\", pane: \"new\" },\n { name: \"RSI\", label: \"Relative Strength Index\", pane: \"new\" },\n { name: \"KDJ\", label: \"KDJ Stochastic\", pane: \"new\" },\n { name: \"BIAS\", label: \"Bias\", pane: \"new\" },\n { name: \"BRAR\", label: \"BRAR\", pane: \"new\" },\n { name: \"CCI\", label: \"Commodity Channel Index\", pane: \"new\" },\n { name: \"DMI\", label: \"Directional Movement Index\", pane: \"new\" },\n { name: \"CR\", label: \"CR Energy\", pane: \"new\" },\n { name: \"PSY\", label: \"Psychological Line\", pane: \"new\" },\n { name: \"TRIX\", label: \"TRIX\", pane: \"new\" },\n { name: \"OBV\", label: \"On-Balance Volume\", pane: \"new\" },\n { name: \"VR\", label: \"Volume Ratio\", pane: \"new\" },\n { name: \"WR\", label: \"Williams %R\", pane: \"new\" },\n { name: \"MTM\", label: \"Momentum\", pane: \"new\" },\n { name: \"EMV\", label: \"Ease of Movement\", pane: \"new\" },\n { name: \"ROC\", label: \"Rate of Change\", pane: \"new\" },\n { name: \"PVT\", label: \"Price Volume Trend\", pane: \"new\" },\n { name: \"AO\", label: \"Awesome Oscillator\", pane: \"new\" },\n];\n\nexport function IndicatorMenu({\n chartRef,\n options = DEFAULT_INDICATOR_OPTIONS,\n className,\n labels,\n}: {\n chartRef: RefObject<SonrChartHandle>;\n options?: IndicatorOption[];\n className?: string;\n labels?: Partial<Labels>;\n}) {\n useEffect(ensureDefaultStyles, []);\n const L = useMemo(() => mergeLabels(labels), [labels]);\n\n const [active, setActive] = useState<string[]>([]);\n const { open, toggle: toggleOpen, pos, triggerRef, panelRef } = useDropdown();\n\n // Seed from whatever the chart already has once it's mounted.\n useEffect(() => {\n const t = setTimeout(() => setActive(chartRef.current?.listIndicators() ?? []), 0);\n return () => clearTimeout(t);\n }, [chartRef]);\n\n const toggle = (opt: IndicatorOption) => {\n const handle = chartRef.current;\n if (!handle) return;\n if (active.includes(opt.name)) {\n handle.removeIndicator(opt.name);\n setActive((a) => a.filter((n) => n !== opt.name));\n } else {\n handle.addIndicator({ name: opt.name, pane: opt.pane });\n setActive((a) => [...a, opt.name]);\n }\n };\n\n const count = active.length;\n\n return (\n <div className={className ?? \"sonr-indicator-menu\"} role=\"group\" aria-label={L.indicators}>\n <button\n ref={triggerRef}\n type=\"button\"\n className={`sonr-menu-trigger${open ? \" open\" : \"\"}${count > 0 ? \" on\" : \"\"}`}\n aria-haspopup=\"menu\"\n aria-expanded={open}\n onClick={toggleOpen}\n >\n {L.indicators}{count > 0 ? ` (${count})` : \"\"}\n <span className=\"sonr-menu-caret\" aria-hidden>\n ▾\n </span>\n </button>\n {open &&\n typeof document !== \"undefined\" &&\n createPortal(\n <div\n ref={panelRef}\n className=\"sonr-menu-dropdown\"\n role=\"menu\"\n aria-label={L.indicators}\n style={{ position: \"fixed\", top: pos.top, left: pos.left }}\n >\n {options.map((opt) => {\n const on = active.includes(opt.name);\n return (\n <button\n key={opt.name}\n type=\"button\"\n role=\"menuitemcheckbox\"\n aria-checked={on}\n className={`sonr-menu-option${on ? \" on\" : \"\"}`}\n title={opt.label}\n onClick={() => toggle(opt)}\n >\n <span className=\"sonr-menu-check\" aria-hidden>\n {on ? \"✓\" : \"\"}\n </span>\n <span className=\"sonr-menu-name\">{opt.name}</span>\n <span className=\"sonr-menu-label\">{opt.label}</span>\n </button>\n );\n })}\n </div>,\n document.body,\n )}\n </div>\n );\n}\n","// Minimal monochrome default styling for the toolbar chrome (issues #3/#4/#17/#18).\n//\n// The library ships its controls as bare class names so hosts can theme them —\n// but with no styling at all the buttons are nearly invisible, and a consumer\n// can't tell the functionality is even there. So we inject a neutral black-and-\n// white default at runtime that makes every control legible and obviously\n// clickable out of the box.\n//\n// Overridability is the whole point: every selector is wrapped in :where(), which\n// contributes ZERO specificity. Any consumer rule on the same class — even a\n// plain `.sonr-iv-btn { ... }` — outranks these defaults with no !important\n// needed. The <style> is also prepended to <head>, so on an exact-specificity\n// tie the consumer's later-loaded rule still wins by source order.\n\nconst STYLE_ID = \"sonr-chart-default-styles\";\n\nconst CSS = `\n:where(.sonr-toolbar-wrap){position:relative;flex:0 0 auto;}\n:where(.sonr-chart-toolbar){display:flex;align-items:center;gap:8px;padding:4px 8px;background:#fff;color:#000;border-bottom:1px solid #000;overflow-x:auto;overflow-y:hidden;white-space:nowrap;font-family:inherit;scrollbar-width:none;}\n:where(.sonr-chart-toolbar)::-webkit-scrollbar{height:0;width:0;display:none;}\n:where(.sonr-scroll-hint){position:absolute;top:0;bottom:1px;width:26px;display:flex;align-items:center;border:none;cursor:pointer;color:#000;font-size:16px;line-height:1;padding:0;opacity:0;pointer-events:none;transition:opacity .12s;z-index:5;}\n:where(.sonr-scroll-hint.left){left:0;justify-content:flex-start;padding-left:4px;background:linear-gradient(to right,#fff 55%,rgba(255,255,255,0));}\n:where(.sonr-scroll-hint.right){right:0;justify-content:flex-end;padding-right:4px;background:linear-gradient(to left,#fff 55%,rgba(255,255,255,0));}\n:where(.sonr-toolbar-wrap:hover .sonr-scroll-hint){opacity:1;pointer-events:auto;}\n:where(.sonr-interval-group,.sonr-indicator-menu,.sonr-candle-menu,.sonr-scale-menu,.sonr-session-group,.sonr-drawing-toolbar){display:inline-flex;align-items:center;gap:4px;}\n:where(.sonr-indicator-menu,.sonr-candle-menu,.sonr-scale-menu,.sonr-session-group,.sonr-drawing-toolbar){padding-left:8px;border-left:1px solid #000;}\n:where(.sonr-iv-btn,.sonr-ind-btn,.sonr-menu-trigger,.sonr-session-btn,.sonr-draw-btn,.sonr-snapshot-btn,.sonr-settings-btn,.sonr-tb-btn){appearance:none;-webkit-appearance:none;background:#fff;color:#000;border:1px solid #000;border-radius:3px;cursor:pointer;font:inherit;font-size:11px;line-height:18px;padding:0 6px;white-space:nowrap;}\n:where(.sonr-iv-btn:hover,.sonr-ind-btn:hover,.sonr-menu-trigger:hover,.sonr-session-btn:hover,.sonr-draw-btn:hover,.sonr-snapshot-btn:hover,.sonr-settings-btn:hover,.sonr-tb-btn:hover){background:#e6e6e6;}\n:where(.sonr-iv-btn.on,.sonr-ind-btn.on,.sonr-session-btn.on,.sonr-draw-btn.on,.sonr-settings-btn.on,.sonr-tb-btn.on){background:#000;color:#fff;}\n:where(.sonr-draw-btn:disabled){opacity:0.35;cursor:default;}\n:where(.sonr-icon-btn,.sonr-icon-trigger){display:inline-flex;align-items:center;justify-content:center;gap:3px;padding:0 5px;}\n:where(.sonr-snapshot-btn){margin-left:auto;}\n:where(.sonr-set-overlay){position:fixed;inset:0;background:rgba(0,0,0,0.4);display:flex;align-items:center;justify-content:center;z-index:2147483001;}\n:where(.sonr-set-panel){display:flex;flex-direction:column;width:460px;max-width:92vw;max-height:80vh;background:#fff;color:#000;border:1px solid #000;border-radius:8px;overflow:hidden;font-family:inherit;}\n:where(.sonr-set-head){display:flex;align-items:center;justify-content:space-between;padding:10px 14px;border-bottom:1px solid #000;}\n:where(.sonr-set-title){font-weight:700;font-size:13px;}\n:where(.sonr-set-close){appearance:none;background:none;border:none;cursor:pointer;color:#000;font-size:14px;line-height:1;padding:2px 6px;}\n:where(.sonr-set-body){display:flex;min-height:220px;}\n:where(.sonr-set-nav){display:flex;flex-direction:column;gap:2px;padding:8px;border-right:1px solid #000;min-width:130px;}\n:where(.sonr-set-navbtn){appearance:none;background:none;border:none;border-radius:4px;cursor:pointer;color:#000;font:inherit;font-size:12px;text-align:left;padding:5px 8px;}\n:where(.sonr-set-navbtn:hover){background:#e6e6e6;}\n:where(.sonr-set-navbtn.on){background:#000;color:#fff;}\n:where(.sonr-set-content){flex:1;padding:12px 14px;overflow-y:auto;display:flex;flex-direction:column;gap:8px;}\n:where(.sonr-set-row){display:flex;align-items:center;justify-content:space-between;gap:12px;font-size:12px;}\n:where(.sonr-set-label){color:#000;}\n:where(.sonr-set-empty){color:#555;font-size:12px;margin:0;}\n:where(.sonr-set-note){color:#555;font-size:11px;line-height:1.4;margin:0 0 2px;padding:6px 8px;border:1px solid #ccc;border-radius:4px;}\n:where(.sonr-set-subhead){font-weight:700;font-size:12px;margin:4px 0 2px;}\n:where(.sonr-set-ind){display:flex;flex-direction:column;gap:6px;padding:8px 0;border-bottom:1px solid #e6e6e6;}\n:where(.sonr-set-inputs){display:flex;align-items:center;flex-wrap:wrap;gap:6px;}\n:where(.sonr-set-inputs-label){color:#555;font-size:11px;}\n:where(.sonr-set-num){appearance:textfield;-moz-appearance:textfield;width:52px;background:#fff;color:#000;border:1px solid #000;border-radius:3px;font:inherit;font-size:12px;line-height:18px;padding:1px 4px;}\n:where(.sonr-set-btn){align-self:flex-start;}\n:where(.sonr-set-tpl-save){display:flex;align-items:center;gap:6px;}\n:where(.sonr-set-tpl-save .sonr-search-input){flex:1;width:auto;}\n:where(.sonr-set-tpl-row){display:flex;align-items:center;justify-content:space-between;gap:12px;font-size:12px;}\n:where(.sonr-set-tpl-actions){display:inline-flex;align-items:center;gap:6px;}\n:where(.sonr-menu-trigger){display:inline-flex;align-items:center;gap:4px;}\n:where(.sonr-menu-caret){font-size:9px;opacity:0.7;}\n:where(.sonr-menu-dropdown){display:flex;flex-direction:column;min-width:180px;max-height:60vh;overflow-y:auto;background:#fff;color:#000;border:1px solid #000;border-radius:4px;box-shadow:0 6px 20px rgba(0,0,0,0.25);padding:4px;z-index:2147483000;}\n:where(.sonr-menu-option){display:flex;align-items:center;gap:8px;background:none;border:none;border-radius:3px;color:#000;cursor:pointer;font:inherit;font-size:12px;line-height:22px;padding:2px 8px;text-align:left;white-space:nowrap;}\n:where(.sonr-menu-option:hover){background:#e6e6e6;}\n:where(.sonr-menu-option.on){font-weight:700;}\n:where(.sonr-menu-check){display:inline-block;width:12px;flex:0 0 12px;}\n:where(.sonr-menu-sep){height:1px;background:#e0e0e0;margin:4px 6px;}\n:where(.sonr-menu-subhead){color:#555;font-size:10px;font-weight:700;letter-spacing:0.04em;text-transform:uppercase;padding:2px 8px;}\n:where(.sonr-menu-name){font-weight:700;min-width:38px;}\n:where(.sonr-menu-label){color:#555;font-size:11px;}\n:where(.sonr-menu-label-wide){color:#000;font-size:12px;}\n:where(.sonr-draw-menu){display:inline-flex;align-items:center;}\n:where(.sonr-draw-opt-icon){display:inline-flex;align-items:center;justify-content:center;width:16px;flex:0 0 16px;}\n:where(.sonr-search){display:inline-flex;align-items:center;}\n:where(.sonr-search-input){appearance:none;-webkit-appearance:none;background:#fff;color:#000;border:1px solid #000;border-radius:3px;font:inherit;font-size:11px;line-height:18px;padding:0 6px;width:120px;}\n:where(.sonr-search-input::placeholder){color:#888;}\n:where(.sonr-search-dropdown){display:flex;flex-direction:column;min-width:200px;max-height:60vh;overflow-y:auto;background:#fff;color:#000;border:1px solid #000;border-radius:4px;box-shadow:0 6px 20px rgba(0,0,0,0.25);padding:4px;z-index:2147483000;}\n:where(.sonr-search-option){display:flex;align-items:baseline;gap:8px;background:none;border:none;border-radius:3px;color:#000;cursor:pointer;font:inherit;font-size:12px;line-height:22px;padding:2px 8px;text-align:left;white-space:nowrap;}\n:where(.sonr-search-option:hover,.sonr-search-option.active){background:#e6e6e6;}\n:where(.sonr-search-expr){border-bottom:1px solid #ccc;}\n:where(.sonr-search-sym){font-weight:700;min-width:44px;}\n:where(.sonr-search-logo){flex:0 0 auto;width:18px;height:18px;border-radius:3px;object-fit:contain;align-self:center;}\n:where(.sonr-search-name){color:#555;font-size:11px;overflow:hidden;text-overflow:ellipsis;}\n:where(.sonr-search-ex){color:#888;font-size:10px;margin-left:auto;}\n:where(.sonr-search-msg){color:#555;font-size:12px;padding:4px 8px;}\n:where(.sonr-confirm-overlay){position:fixed;inset:0;z-index:2147483001;display:flex;align-items:center;justify-content:center;background:rgba(0,0,0,0.35);}\n:where(.sonr-confirm){display:flex;gap:14px;align-items:flex-start;max-width:520px;margin:0 16px;padding:22px 24px;background:#fff;color:#000;border:1px solid #000;border-radius:12px;box-shadow:0 12px 40px rgba(0,0,0,0.3);}\n:where(.sonr-confirm-icon){flex:0 0 32px;width:32px;height:32px;display:flex;align-items:center;justify-content:center;border-radius:50%;border:1px solid #000;font-weight:700;font-size:16px;}\n:where(.sonr-confirm-body){display:flex;flex-direction:column;gap:16px;}\n:where(.sonr-confirm-msg){margin:0;font-size:15px;line-height:1.4;}\n:where(.sonr-confirm-actions){display:flex;gap:10px;justify-content:flex-end;}\n:where(.sonr-confirm-btn){appearance:none;font:inherit;font-size:13px;font-weight:600;padding:8px 18px;border-radius:8px;cursor:pointer;border:1px solid #000;background:#fff;color:#000;}\n:where(.sonr-confirm-ok){background:#000;color:#fff;}\n:where(.sonr-text-input){appearance:none;-webkit-appearance:none;transform:translateY(-50%);min-width:80px;background:#fff;color:#2962ff;border:1px solid #2962ff;border-radius:3px;font:inherit;font-size:12px;line-height:18px;padding:1px 4px;outline:none;box-shadow:0 2px 8px rgba(0,0,0,0.25);}\n:where(.sonr-panel){display:flex;flex-direction:column;min-width:180px;font-size:12px;color:#000;}\n:where(.sonr-panel-title){font-weight:700;font-size:11px;letter-spacing:0.04em;text-transform:uppercase;color:#555;padding:6px 8px 4px;}\n:where(.sonr-panel-empty){color:#888;padding:4px 8px 8px;font-style:italic;}\n:where(.sonr-panel-list){list-style:none;margin:0;padding:0;display:flex;flex-direction:column;}\n:where(.sonr-panel-row){display:flex;align-items:center;gap:6px;padding:2px 8px;min-height:24px;}\n:where(.sonr-panel-row:hover){background:rgba(0,0,0,0.05);}\n:where(.sonr-panel-row.off .sonr-panel-label){opacity:0.45;}\n:where(.sonr-panel-label){flex:1 1 auto;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}\n:where(.sonr-panel-locate){appearance:none;background:none;border:none;margin:0;padding:0;font:inherit;color:inherit;cursor:pointer;text-align:left;}\n:where(.sonr-panel-actions){display:inline-flex;align-items:center;gap:2px;flex:0 0 auto;}\n:where(.sonr-panel-btn){display:inline-flex;align-items:center;justify-content:center;width:22px;height:22px;padding:0;background:none;border:none;border-radius:3px;color:#555;cursor:pointer;}\n:where(.sonr-panel-btn:hover){background:rgba(0,0,0,0.1);color:#000;}\n:where(.sonr-panel-btn[aria-pressed=\"true\"]){color:#000;}\n:where(.sonr-panel-btn-extra){opacity:0;}\n:where(.sonr-panel-row:hover .sonr-panel-btn-extra){opacity:1;}\n:where(.sonr-timeframe-bar){display:flex;align-items:center;gap:8px;padding:3px 8px;background:#fff;color:#000;border-top:1px solid #000;font-family:inherit;}\n:where(.sonr-timeframe-list){display:flex;align-items:center;gap:2px;flex:1 1 auto;overflow-x:auto;scrollbar-width:none;}\n:where(.sonr-timeframe-list::-webkit-scrollbar){height:0;width:0;display:none;}\n:where(.sonr-timeframe-btn){appearance:none;background:none;border:none;border-radius:3px;color:#555;cursor:pointer;font:inherit;font-size:11px;font-weight:600;line-height:20px;padding:0 8px;white-space:nowrap;}\n:where(.sonr-timeframe-btn:hover){background:#e6e6e6;color:#000;}\n:where(.sonr-timeframe-btn.on){background:#000;color:#fff;}\n:where(.sonr-timeframe-slot){display:inline-flex;align-items:center;gap:4px;flex:0 0 auto;}\n/* --- GoToDateDialog --- */\n:where(.sonr-gotodate-overlay){position:fixed;inset:0;z-index:2147483001;display:flex;align-items:center;justify-content:center;background:rgba(0,0,0,0.35);}\n:where(.sonr-gotodate){display:flex;flex-direction:column;gap:12px;max-width:360px;margin:0 16px;padding:18px 20px;background:#fff;color:#000;border:1px solid #000;border-radius:12px;box-shadow:0 12px 40px rgba(0,0,0,0.3);font-family:inherit;}\n:where(.sonr-gotodate-title){font-weight:700;font-size:13px;}\n:where(.sonr-gotodate-form){display:flex;align-items:center;gap:8px;}\n:where(.sonr-gotodate-input){appearance:none;-webkit-appearance:none;background:#fff;color:#000;border:1px solid #000;border-radius:3px;font:inherit;font-size:12px;line-height:18px;padding:2px 6px;}\n:where(.sonr-gotodate-go){appearance:none;font:inherit;font-size:13px;font-weight:600;padding:6px 16px;border-radius:8px;cursor:pointer;border:1px solid #000;background:#000;color:#fff;}\n:where(.sonr-gotodate-go:disabled){opacity:0.4;cursor:default;}\n/* --- NavControlBar --- */\n:where(.sonr-navbar){display:inline-flex;align-items:center;gap:2px;padding:2px;background:#fff;color:#000;border:1px solid #000;border-radius:5px;box-shadow:0 2px 8px rgba(0,0,0,0.18);font-family:inherit;}\n:where(.sonr-nav-btn){display:inline-flex;align-items:center;justify-content:center;width:24px;height:24px;padding:0;appearance:none;-webkit-appearance:none;background:none;border:none;border-radius:4px;color:#555;cursor:pointer;font:inherit;}\n:where(.sonr-nav-btn:hover){background:#e6e6e6;color:#000;}\n:where(.sonr-nav-btn:active){background:#d9d9d9;}\n/* --- SymbolInfoDialog --- */\n:where(.sonr-syminfo-overlay){position:fixed;inset:0;z-index:2147483001;display:flex;align-items:center;justify-content:center;background:rgba(0,0,0,0.4);}\n:where(.sonr-syminfo){display:flex;flex-direction:column;width:440px;max-width:92vw;max-height:82vh;background:#fff;color:#000;border:1px solid #000;border-radius:8px;overflow:hidden;font-family:inherit;}\n:where(.sonr-syminfo-head){display:flex;align-items:center;justify-content:space-between;padding:10px 14px;border-bottom:1px solid #000;}\n:where(.sonr-syminfo-title){font-weight:700;font-size:13px;}\n:where(.sonr-syminfo-close){appearance:none;background:none;border:none;cursor:pointer;color:#000;font-size:14px;line-height:1;padding:2px 6px;}\n:where(.sonr-syminfo-body){padding:16px 18px;overflow-y:auto;display:flex;flex-direction:column;gap:18px;}\n:where(.sonr-syminfo-sym){display:flex;align-items:baseline;gap:8px;flex-wrap:wrap;}\n:where(.sonr-syminfo-ticker){font-weight:700;font-size:16px;}\n:where(.sonr-syminfo-logo){flex:0 0 auto;width:28px;height:28px;border-radius:4px;object-fit:contain;align-self:center;}\n:where(.sonr-syminfo-desc){color:#555;font-size:12px;line-height:1.4;margin-top:2px;}\n:where(.sonr-syminfo-exwrap){display:inline-flex;align-items:center;gap:5px;}\n:where(.sonr-syminfo-exlogo){width:16px;height:16px;border-radius:2px;object-fit:contain;}\n:where(.sonr-syminfo-name){color:#555;font-size:13px;}\n:where(.sonr-syminfo-grid){display:grid;grid-template-columns:1fr 1fr;gap:16px 20px;}\n:where(.sonr-syminfo-field){display:flex;flex-direction:column;gap:3px;}\n:where(.sonr-syminfo-flabel){color:#555;font-size:12px;font-weight:600;}\n:where(.sonr-syminfo-fvalue){font-size:14px;}\n:where(.sonr-syminfo-session){display:flex;flex-direction:column;gap:8px;border-top:1px solid #e2e2e2;padding-top:14px;}\n:where(.sonr-syminfo-timeline){display:grid;grid-template-columns:auto 1fr;align-items:center;gap:6px 10px;}\n:where(.sonr-syminfo-day){font-size:11px;font-weight:700;color:#555;}\n:where(.sonr-syminfo-track){position:relative;height:6px;border-radius:3px;background:#e2e2e2;}\n:where(.sonr-syminfo-band){position:absolute;top:0;bottom:0;border-radius:3px;background:#22a06b;}\n:where(.sonr-syminfo-now){position:absolute;top:-3px;bottom:-3px;width:2px;background:#000;}\n:where(.sonr-syminfo-ticks){grid-column:2;display:flex;justify-content:space-between;font-size:10px;color:#888;}\n:where(.sonr-syminfo-tz){font-size:11px;color:#888;text-align:center;}\n:where(.sonr-syminfo-msg){color:#555;font-size:12px;padding:4px 0;}\n/* --- MarketStatus --- */\n:where(.sonr-mkt){display:inline-flex;align-items:center;gap:6px;padding:2px 9px;border-radius:999px;font:inherit;font-size:11px;line-height:16px;font-weight:600;border:1px solid currentColor;white-space:nowrap;}\n:where(.sonr-mkt-dot){width:7px;height:7px;border-radius:50%;background:currentColor;flex:0 0 auto;}\n:where(.sonr-mkt-label){color:inherit;}\n:where(.sonr-mkt-open){color:#22a06b;}\n:where(.sonr-mkt-pre){color:#d9920a;}\n:where(.sonr-mkt-after){color:#d9920a;}\n:where(.sonr-mkt-closed){color:#888;}\n:where(button.sonr-mkt){appearance:none;-webkit-appearance:none;background:none;cursor:pointer;}\n:where(.sonr-mkt-pop){width:300px;max-width:92vw;background:#fff;border:1px solid #000;border-radius:10px;box-shadow:0 12px 40px rgba(0,0,0,0.3);padding:14px 16px;font-size:13px;z-index:2147483001;}\n:where(.sonr-mkt-pop-head){display:flex;align-items:center;gap:8px;font-size:15px;font-weight:700;}\n:where(.sonr-mkt-pop-msg){margin:8px 0 14px;line-height:1.45;color:#111;}\n:where(.sonr-mkt-timeline){display:grid;grid-template-columns:auto 1fr;align-items:center;gap:8px 10px;}\n:where(.sonr-mkt-day){font-size:11px;font-weight:700;color:#555;}\n:where(.sonr-mkt-track){position:relative;height:6px;border-radius:3px;background:#e2e2e2;}\n:where(.sonr-mkt-fill){position:absolute;left:0;top:0;bottom:0;border-radius:3px;background:#22a06b;}\n:where(.sonr-mkt-handle){position:absolute;top:50%;width:12px;height:12px;border-radius:50%;background:#fff;border:2px solid #22a06b;transform:translate(-50%,-50%);}\n:where(.sonr-mkt-ticks){grid-column:2;display:flex;justify-content:space-between;font-size:10px;color:#888;}\n:where(.sonr-mkt-tz){margin-top:12px;font-size:11px;color:#888;text-align:center;}\n:where(.sonr-hd){display:inline-flex;align-items:center;gap:10px;font-family:inherit;font-size:12px;color:#000;white-space:nowrap;}\n:where(.sonr-hd-sym){font-weight:700;color:#000;}\n:where(.sonr-hd-ohlc){display:inline-flex;align-items:center;gap:8px;font-variant-numeric:tabular-nums;}\n:where(.sonr-hd-cell){display:inline-flex;align-items:baseline;gap:3px;}\n:where(.sonr-hd-k){color:#888;font-size:11px;}\n:where(.sonr-hd-v){color:#555;}\n:where(.sonr-hd-up){color:#22a06b;}\n:where(.sonr-hd-down){color:#d23c3c;}\n:where(.sonr-brand){position:absolute;z-index:3;pointer-events:none;font-family:inherit;font-weight:700;font-size:13px;letter-spacing:0.02em;color:#000;user-select:none;line-height:1;}\n:where(.sonr-brand-img){display:block;}\n:where(.sonr-brand-link){pointer-events:auto;color:inherit;text-decoration:none;}\n:where(.sonr-brand-top-left){top:6px;left:8px;}\n:where(.sonr-brand-top-right){top:6px;right:8px;}\n:where(.sonr-brand-bottom-left){bottom:6px;left:8px;}\n:where(.sonr-brand-bottom-right){bottom:6px;right:8px;}\n/* --- SaveLoadDialog --- */\n:where(.sonr-sl-overlay){position:fixed;inset:0;z-index:2147483001;display:flex;align-items:center;justify-content:center;background:rgba(0,0,0,0.4);}\n:where(.sonr-sl-panel){display:flex;flex-direction:column;width:520px;max-width:92vw;max-height:82vh;background:#fff;color:#000;border:1px solid #000;border-radius:8px;overflow:hidden;font-family:inherit;}\n:where(.sonr-sl-head){display:flex;align-items:center;justify-content:space-between;padding:10px 14px;border-bottom:1px solid #000;}\n:where(.sonr-sl-title){font-weight:700;font-size:13px;}\n:where(.sonr-sl-close){appearance:none;background:none;border:none;cursor:pointer;color:#000;font-size:14px;line-height:1;padding:2px 6px;}\n:where(.sonr-sl-body){display:flex;flex-direction:column;gap:14px;padding:12px 14px;overflow-y:auto;}\n:where(.sonr-sl-section){display:flex;flex-direction:column;gap:6px;}\n:where(.sonr-sl-section-head){display:flex;align-items:center;justify-content:space-between;gap:8px;}\n:where(.sonr-sl-section-actions){display:inline-flex;align-items:center;gap:6px;}\n:where(.sonr-sl-label){font-weight:700;font-size:11px;letter-spacing:0.04em;text-transform:uppercase;color:#555;}\n:where(.sonr-sl-textarea){width:100%;box-sizing:border-box;min-height:120px;resize:vertical;background:#fff;color:#000;border:1px solid #000;border-radius:4px;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:11px;line-height:1.45;padding:8px;white-space:pre;overflow:auto;}\n:where(.sonr-sl-textarea[readonly]){background:#f5f5f5;}\n:where(.sonr-sl-error){margin:0;color:#c0392b;font-size:11px;line-height:1.4;}\n:where(.sonr-sl-actions){display:flex;justify-content:flex-end;}\n:where(.sonr-sl-btn){appearance:none;-webkit-appearance:none;background:#fff;color:#000;border:1px solid #000;border-radius:3px;cursor:pointer;font:inherit;font-size:11px;line-height:18px;padding:2px 10px;white-space:nowrap;}\n:where(.sonr-sl-btn:hover){background:#e6e6e6;}\n:where(.sonr-sl-load){background:#000;color:#fff;font-weight:600;padding:4px 16px;}\n:where(.sonr-sl-load:hover){background:#222;}\n/* --- Chart shell (SonrChartShell) — structural defaults; host themes via color. --- */\n:where(.sonr-tile){display:flex;flex-direction:column;}\n:where(.sonr-tile-body){display:flex;flex:1 1 auto;min-height:0;}\n:where(.sonr-tile-canvas){position:relative;flex:1 1 auto;min-height:0;}\n:where(.sonr-tile-header){position:absolute;top:6px;left:8px;z-index:4;max-width:calc(100% - 160px);overflow:hidden;}\n:where(.sonr-tile-nav){position:absolute;right:8px;bottom:8px;z-index:4;}\n:where(.sonr-side-panel){flex:0 0 210px;overflow-y:auto;background:#fff;border-left:1px solid #ccc;display:flex;flex-direction:column;}\n:where(.sonr-side-tools){display:flex;flex-wrap:wrap;gap:4px;padding:6px 8px;border-bottom:1px solid #ccc;}\n:where(.sonr-side-tool){flex:1 1 auto;background:#f4f4f4;color:#000;border:1px solid #ccc;border-radius:5px;font-size:11px;font-weight:600;padding:4px 6px;cursor:pointer;}\n:where(.sonr-side-tool:hover){border-color:#000;}\n:where(.sonr-bottom-btn){display:inline-flex;align-items:center;justify-content:center;width:26px;height:22px;padding:0;background:none;border:none;border-radius:4px;color:inherit;cursor:pointer;}\n:where(.sonr-bottom-btn:hover){background:rgba(0,0,0,0.06);}\n`;\n\n/** Inject the default toolbar stylesheet once. No-op on the server, when already\n * injected, or if the host opted out via `data-sonr-no-default-styles` on\n * <html> (for consumers that ship a full theme and want nothing shipped). */\nexport function ensureDefaultStyles(): void {\n if (typeof document === \"undefined\") return;\n if (document.documentElement.hasAttribute(\"data-sonr-no-default-styles\")) return;\n if (document.getElementById(STYLE_ID)) return;\n const el = document.createElement(\"style\");\n el.id = STYLE_ID;\n el.textContent = CSS;\n document.head.prepend(el);\n}\n","import { useCallback, useEffect, useRef, useState } from \"react\";\n\n// Shared behavior for the toolbar's portal dropdowns (indicators, candle type):\n// anchor a body-portaled panel to a trigger in viewport coords (escaping the\n// toolbar's overflow clip and any transformed ancestor), and close on outside\n// click / Escape while repositioning on scroll+resize.\nexport function useDropdown() {\n const [open, setOpen] = useState(false);\n const [pos, setPos] = useState<{ top: number; left: number }>({ top: 0, left: 0 });\n const triggerRef = useRef<HTMLButtonElement>(null);\n const panelRef = useRef<HTMLDivElement>(null);\n\n const place = useCallback(() => {\n const r = triggerRef.current?.getBoundingClientRect();\n if (r) setPos({ top: r.bottom + 4, left: r.left });\n }, []);\n\n const openMenu = useCallback(() => {\n place();\n setOpen(true);\n }, [place]);\n\n const toggle = useCallback(() => {\n setOpen((o) => {\n if (!o) place();\n return !o;\n });\n }, [place]);\n\n useEffect(() => {\n if (!open) return;\n const onDown = (e: MouseEvent) => {\n const t = e.target as Node;\n if (panelRef.current?.contains(t) || triggerRef.current?.contains(t)) return;\n setOpen(false);\n };\n const onKey = (e: KeyboardEvent) => {\n if (e.key === \"Escape\") setOpen(false);\n };\n const reflow = () => place();\n document.addEventListener(\"mousedown\", onDown);\n document.addEventListener(\"keydown\", onKey);\n window.addEventListener(\"resize\", reflow);\n window.addEventListener(\"scroll\", reflow, true);\n return () => {\n document.removeEventListener(\"mousedown\", onDown);\n document.removeEventListener(\"keydown\", onKey);\n window.removeEventListener(\"resize\", reflow);\n window.removeEventListener(\"scroll\", reflow, true);\n };\n }, [open, place]);\n\n return { open, setOpen, openMenu, toggle, pos, triggerRef, panelRef };\n}\n","// Localizable UI strings for the toolbar/menu chrome (issue #46).\n//\n// The visible chrome text — menu triggers, section titles, and per-option\n// labels for candle styles / drawing tools / scale types — can be overridden by\n// passing a `labels` prop to <ChartToolbar> (which threads it to the menus).\n// Everything is optional and merges over DEFAULT_LABELS, so omitting `labels`\n// (or any field) keeps the current English. Interval tokens are data, not\n// chrome, so they are intentionally not covered here.\nimport type { CandleStyle, DrawingTool, PriceScale } from \"./types\";\n\ntype ScaleType = NonNullable<PriceScale[\"type\"]>;\n\nexport interface Labels {\n /** Indicators menu trigger + group label. */\n indicators: string;\n /** Price-scale trigger prefix, shown as `${scale}: ${scaleTypes[type]}`. */\n scale: string;\n /** Price-scale option labels, keyed by scale type. */\n scaleTypes: Record<ScaleType, string>;\n /** Price-scale labels section (#41). */\n priceLabelsHeading: string;\n priceLabelLastValue: string;\n priceLabelLastLine: string;\n priceLabelHigh: string;\n priceLabelLow: string;\n priceLabelCountdown: string;\n /** Sessions (extended-hours tint) toggle. */\n sessions: string;\n /** Timezone menu trigger + group label (#38). */\n timezone: string;\n /** Snapshot button aria-label. */\n snapshot: string;\n /** Settings gear aria-label + settings dialog title. */\n settings: string;\n /** Candle-type menu aria/title prefix. */\n candleType: string;\n /** Drawing-tools menu aria/title. */\n drawingTools: string;\n /** Magnet toggle. */\n magnet: string;\n undo: string;\n redo: string;\n /** Clear-drawings button aria-label. */\n clear: string;\n /** Hide/show-all-drawings toggle labels (the eye button). */\n hideDrawings: string;\n showDrawings: string;\n /** Clear-drawings confirmation dialog: prompt, confirm button, cancel button. */\n clearConfirm: string;\n clearConfirmOk: string;\n cancel: string;\n /** Data-window / object-tree panel chrome (#45). */\n dataWindow: string;\n objectTree: string;\n /** Shell's side-panel toggle button (indicators + objects). */\n panelToggle: string;\n hide: string;\n show: string;\n lock: string;\n unlock: string;\n remove: string;\n close: string;\n noIndicators: string;\n noDrawings: string;\n /** Object-tree per-drawing actions (#35). */\n duplicate: string;\n bringToFront: string;\n sendToBack: string;\n searchUnavailable: string;\n searching: string;\n noResults: string;\n /** Save / Load dialog (#45). */\n saveLoad: string;\n saveLoadExportLabel: string;\n saveLoadImportLabel: string;\n saveLoadCopy: string;\n saveLoadCopied: string;\n saveLoadDownload: string;\n saveLoadLoad: string;\n saveLoadError: string;\n saveLoadClose: string;\n /** Go-to-date dialog (#45). */\n goToDate: string;\n goToDateGo: string;\n /** Symbol-info dialog (#45). */\n symbolInfo: string;\n symbolInfoTicker: string;\n symbolInfoName: string;\n symbolInfoPricePrecision: string;\n symbolInfoVolumePrecision: string;\n symbolInfoUnknown: string;\n symbolInfoLoading: string;\n symbolInfoType: string;\n symbolInfoPointValue: string;\n symbolInfoListedExchange: string;\n symbolInfoExchange: string;\n symbolInfoTickSize: string;\n symbolInfoSession: string;\n /** Symbol-info metadata fields (#39). */\n symbolInfoCurrency: string;\n symbolInfoUnit: string;\n symbolInfoDescription: string;\n symbolInfoPriceSource: string;\n /** Nav / control bar (#45). */\n navControls: string;\n zoomOut: string;\n zoomIn: string;\n fitContent: string;\n goToRealtime: string;\n /** Market-status badge (#45). */\n marketPre: string;\n marketOpen: string;\n marketAfter: string;\n marketClosed: string;\n marketTimezone: string;\n /** Settings dialog section (nav) titles. */\n settingsSections: Record<\"candles\" | \"indicators\" | \"grid\" | \"sessions\" | \"drawing\" | \"drawings\", string>;\n /** Optional per-style overrides for the candle menu; falls back to the\n * option's own `label` when a style is not listed. */\n candleStyles: Partial<Record<CandleStyle, string>>;\n /** Optional per-tool overrides for the drawing menu; falls back to the\n * tool option's own `label` when a tool is not listed. */\n drawingToolLabels: Partial<Record<DrawingTool, string>>;\n}\n\nexport const DEFAULT_LABELS: Labels = {\n indicators: \"Indicators\",\n scale: \"Scale\",\n scaleTypes: {\n normal: \"Normal\",\n logarithm: \"Logarithmic\",\n percentage: \"Percent\",\n },\n priceLabelsHeading: \"Labels\",\n priceLabelLastValue: \"Last value\",\n priceLabelLastLine: \"Price line\",\n priceLabelHigh: \"High\",\n priceLabelLow: \"Low\",\n priceLabelCountdown: \"Countdown\",\n sessions: \"Sessions\",\n timezone: \"Timezone\",\n snapshot: \"Snapshot\",\n settings: \"Chart settings\",\n candleType: \"Candle type\",\n drawingTools: \"Drawing tools\",\n magnet: \"Magnet\",\n undo: \"Undo\",\n redo: \"Redo\",\n clear: \"Clear drawings\",\n hideDrawings: \"Hide drawings\",\n showDrawings: \"Show drawings\",\n clearConfirm: \"Are you sure you want to delete all drawings in this chart?\",\n clearConfirmOk: \"Delete\",\n cancel: \"Cancel\",\n dataWindow: \"Indicators\",\n objectTree: \"Objects\",\n panelToggle: \"Indicators & objects\",\n hide: \"Hide\",\n show: \"Show\",\n lock: \"Lock\",\n unlock: \"Unlock\",\n remove: \"Remove\",\n close: \"Close\",\n noIndicators: \"No indicators\",\n noDrawings: \"No drawings yet\",\n duplicate: \"Duplicate\",\n bringToFront: \"Bring to front\",\n sendToBack: \"Send to back\",\n searchUnavailable: \"Search unavailable\",\n searching: \"Searching…\",\n noResults: \"No results\",\n saveLoad: \"Save / Load\",\n saveLoadExportLabel: \"Current chart state\",\n saveLoadImportLabel: \"Paste chart state to load\",\n saveLoadCopy: \"Copy\",\n saveLoadCopied: \"Copied\",\n saveLoadDownload: \"Download\",\n saveLoadLoad: \"Load\",\n saveLoadError: \"Invalid JSON — could not load.\",\n saveLoadClose: \"Close\",\n goToDate: \"Go to date\",\n goToDateGo: \"Go\",\n symbolInfo: \"Symbol info\",\n symbolInfoTicker: \"Ticker\",\n symbolInfoName: \"Name\",\n symbolInfoPricePrecision: \"Price precision\",\n symbolInfoVolumePrecision: \"Volume precision\",\n symbolInfoUnknown: \"Unknown symbol\",\n symbolInfoLoading: \"Loading…\",\n symbolInfoType: \"Type\",\n symbolInfoPointValue: \"Point value\",\n symbolInfoListedExchange: \"Listed exchange\",\n symbolInfoExchange: \"Exchange\",\n symbolInfoTickSize: \"Tick size\",\n symbolInfoSession: \"Session\",\n symbolInfoCurrency: \"Currency\",\n symbolInfoUnit: \"Unit\",\n symbolInfoDescription: \"Description\",\n symbolInfoPriceSource: \"Price source\",\n navControls: \"Chart navigation\",\n zoomOut: \"Zoom out\",\n zoomIn: \"Zoom in\",\n fitContent: \"Fit all data\",\n goToRealtime: \"Go to realtime\",\n marketPre: \"Pre-market\",\n marketOpen: \"Open\",\n marketAfter: \"After-hours\",\n marketClosed: \"Closed\",\n marketTimezone: \"Exchange timezone\",\n settingsSections: {\n candles: \"Candles\",\n indicators: \"Indicators\",\n grid: \"Grid & Crosshair\",\n sessions: \"Sessions\",\n drawing: \"Drawing\",\n drawings: \"Drawings\",\n },\n candleStyles: {},\n drawingToolLabels: {},\n};\n\n/** Merge a partial label override over the English defaults (nested records\n * merged one level deep). Returns DEFAULT_LABELS unchanged when nothing is\n * passed, so the no-`labels` path allocates nothing. */\nexport function mergeLabels(over?: Partial<Labels>): Labels {\n if (!over) return DEFAULT_LABELS;\n return {\n ...DEFAULT_LABELS,\n ...over,\n scaleTypes: { ...DEFAULT_LABELS.scaleTypes, ...over.scaleTypes },\n settingsSections: { ...DEFAULT_LABELS.settingsSections, ...over.settingsSections },\n candleStyles: { ...DEFAULT_LABELS.candleStyles, ...over.candleStyles },\n drawingToolLabels: { ...DEFAULT_LABELS.drawingToolLabels, ...over.drawingToolLabels },\n };\n}\n","import { useEffect, useMemo, useState, type RefObject } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport type { SonrChartHandle } from \"./SonrChart\";\nimport type { DrawingTool, Magnet } from \"./types\";\nimport { DEFAULT_DRAWING_TOOLS, type DrawingToolOption } from \"./drawings\";\nimport { ensureDefaultStyles } from \"./defaultStyles\";\nimport { DrawIcon, ClearIcon, UndoIcon, RedoIcon, PencilIcon, EyeIcon, EyeOffIcon } from \"./icons\";\nimport { useDropdown } from \"./useDropdown\";\nimport { mergeLabels, type Labels } from \"./labels\";\nimport { ConfirmDialog } from \"./ConfirmDialog\";\n\n// Drop-in drawing chrome (issues #3, #13, #16): the line/drawing tools collapse\n// into a single dropdown (there are a lot of them), with a magnet-mode toggle,\n// undo/redo, and Clear alongside as their own buttons — all driving one chart\n// ref. Compose your own UI on the same ref API if you prefer.\n\n// Magnet cycles off → weak → strong → off.\nfunction normalizeMagnet(m: Magnet | undefined): \"off\" | \"weak\" | \"strong\" {\n if (m === \"strong\") return \"strong\";\n if (m === \"weak\" || m === true) return \"weak\";\n return \"off\";\n}\nconst NEXT_MAGNET: Record<\"off\" | \"weak\" | \"strong\", Magnet | undefined> = {\n off: \"weak\",\n weak: \"strong\",\n strong: undefined,\n};\n\nexport function DrawingToolbar({\n chartRef,\n tools = DEFAULT_DRAWING_TOOLS,\n className,\n showClear = true,\n showHide = true,\n showMagnet = true,\n showHistory = true,\n labels,\n}: {\n chartRef: RefObject<SonrChartHandle>;\n tools?: DrawingToolOption[];\n className?: string;\n showClear?: boolean;\n /** Show the hide/show-all-drawings eye toggle. Default true. */\n showHide?: boolean;\n showMagnet?: boolean;\n showHistory?: boolean;\n labels?: Partial<Labels>;\n}) {\n useEffect(ensureDefaultStyles, []);\n const L = useMemo(() => mergeLabels(labels), [labels]);\n // A tool's label override (if any) wins over the option's built-in label.\n const labelFor = (t: DrawingToolOption) => L.drawingToolLabels[t.tool] ?? t.label;\n\n const [active, setActive] = useState<DrawingTool | null>(null);\n const [magnet, setMagnetState] = useState<\"off\" | \"weak\" | \"strong\">(\"off\");\n const [canUndo, setCanUndo] = useState(false);\n const [canRedo, setCanRedo] = useState(false);\n const [hidden, setHidden] = useState(false);\n const [confirmClear, setConfirmClear] = useState(false);\n const { open, setOpen, toggle: toggleOpen, pos, triggerRef, panelRef } = useDropdown();\n\n // Subscribe to the chart's drawing/magnet/history state. The handle may not be\n // populated on the first tick (the chart mounts as a sibling), so retry until\n // it's available, then seed + listen.\n useEffect(() => {\n const unsubs: Array<() => void> = [];\n let cancelled = false;\n const attach = () => {\n if (cancelled) return;\n const h = chartRef.current;\n if (h?.subscribeDrawing) {\n setActive(h.activeDrawing?.() ?? null);\n unsubs.push(h.subscribeDrawing(setActive));\n setMagnetState(normalizeMagnet(h.getMagnet?.()));\n if (h.subscribeMagnet) unsubs.push(h.subscribeMagnet((m) => setMagnetState(normalizeMagnet(m))));\n const syncHistory = () => {\n setCanUndo(h.canUndo?.() ?? false);\n setCanRedo(h.canRedo?.() ?? false);\n };\n syncHistory();\n if (h.subscribeHistory) unsubs.push(h.subscribeHistory(syncHistory));\n // Hide/show-all state (kept in sync with the settings panel).\n setHidden(!(h.getDrawingsVisible?.() ?? true));\n if (h.subscribeDrawingsVisible) unsubs.push(h.subscribeDrawingsVisible((visible) => setHidden(!visible)));\n } else {\n setTimeout(attach, 50);\n }\n };\n attach();\n return () => {\n cancelled = true;\n for (const u of unsubs) u();\n };\n }, [chartRef]);\n\n const onToolClick = (tool: DrawingTool) => {\n const h = chartRef.current;\n if (!h) return;\n // Clicking the armed tool toggles it off; otherwise arm the new tool.\n if (active === tool) h.cancelDrawing();\n else h.startDrawing(tool);\n setOpen(false);\n };\n\n const activeOpt = tools.find((t) => t.tool === active);\n const activeLabel = activeOpt ? labelFor(activeOpt) : undefined;\n\n return (\n <div className={className ?? \"sonr-drawing-toolbar\"} role=\"group\" aria-label={L.drawingTools}>\n {/* Tool palette — collapsed into one dropdown. */}\n <div className=\"sonr-draw-menu\">\n <button\n ref={triggerRef}\n type=\"button\"\n className={`sonr-menu-trigger sonr-icon-trigger${open ? \" open\" : \"\"}${active ? \" on\" : \"\"}`}\n aria-haspopup=\"menu\"\n aria-expanded={open}\n aria-label={activeLabel ? `${L.drawingTools}: ${activeLabel}` : L.drawingTools}\n title={activeLabel ? `${L.drawingTools}: ${activeLabel}` : L.drawingTools}\n onClick={toggleOpen}\n >\n {active ? <DrawIcon tool={active} /> : <PencilIcon />}\n <span className=\"sonr-menu-caret\" aria-hidden>\n ▾\n </span>\n </button>\n {open &&\n typeof document !== \"undefined\" &&\n createPortal(\n <div\n ref={panelRef}\n className=\"sonr-menu-dropdown\"\n role=\"menu\"\n aria-label={L.drawingTools}\n style={{ position: \"fixed\", top: pos.top, left: pos.left }}\n >\n {tools.map((t) => {\n const on = active === t.tool;\n return (\n <button\n key={t.tool}\n type=\"button\"\n role=\"menuitemradio\"\n aria-checked={on}\n className={`sonr-menu-option${on ? \" on\" : \"\"}`}\n onClick={() => onToolClick(t.tool)}\n >\n <span className=\"sonr-menu-check\" aria-hidden>\n {on ? \"✓\" : \"\"}\n </span>\n <span className=\"sonr-draw-opt-icon\" aria-hidden>\n <DrawIcon tool={t.tool} />\n </span>\n <span className=\"sonr-menu-label sonr-menu-label-wide\">{labelFor(t)}</span>\n </button>\n );\n })}\n </div>,\n document.body,\n )}\n </div>\n {showMagnet && (\n <button\n type=\"button\"\n className={`sonr-draw-btn${magnet !== \"off\" ? \" on\" : \"\"}`}\n aria-pressed={magnet !== \"off\"}\n title={`${L.magnet}: ${magnet}${magnet === \"off\" ? \" — snap new drawings to nearby OHLC\" : \"\"} (click to cycle)`}\n onClick={() => chartRef.current?.setMagnet(NEXT_MAGNET[magnet])}\n >\n {L.magnet}{magnet !== \"off\" ? ` · ${magnet}` : \"\"}\n </button>\n )}\n {showHistory && (\n <>\n <button\n type=\"button\"\n className=\"sonr-draw-btn sonr-icon-btn\"\n title={L.undo}\n aria-label={L.undo}\n disabled={!canUndo}\n onClick={() => chartRef.current?.undo()}\n >\n <UndoIcon />\n </button>\n <button\n type=\"button\"\n className=\"sonr-draw-btn sonr-icon-btn\"\n title={L.redo}\n aria-label={L.redo}\n disabled={!canRedo}\n onClick={() => chartRef.current?.redo()}\n >\n <RedoIcon />\n </button>\n </>\n )}\n {showHide && (\n <button\n type=\"button\"\n className={`sonr-draw-btn sonr-icon-btn${hidden ? \" on\" : \"\"}`}\n aria-pressed={hidden}\n title={hidden ? L.showDrawings : L.hideDrawings}\n aria-label={hidden ? L.showDrawings : L.hideDrawings}\n onClick={() => chartRef.current?.setDrawingsVisible?.(hidden)}\n >\n {hidden ? <EyeOffIcon /> : <EyeIcon />}\n </button>\n )}\n {showClear && (\n <button\n type=\"button\"\n className=\"sonr-draw-btn sonr-draw-clear sonr-icon-btn\"\n title=\"Remove all drawings\"\n aria-label={L.clear}\n onClick={() => setConfirmClear(true)}\n >\n <ClearIcon />\n </button>\n )}\n <ConfirmDialog\n open={confirmClear}\n message={L.clearConfirm}\n confirmLabel={L.clearConfirmOk}\n cancelLabel={L.cancel}\n onConfirm={() => {\n chartRef.current?.clearDrawings();\n setConfirmClear(false);\n }}\n onCancel={() => setConfirmClear(false)}\n />\n </div>\n );\n}\n","import type { ReactNode, SVGProps } from \"react\";\n\n// Homegrown icon system — a Lucide-style (\"lucidified\") set drawn for charting.\n// Every icon is authored on a 24×24 grid with a 2px round stroke in currentColor\n// (fill: none), mirroring the geometry rules at https://lucide.dev/icons/:\n// • 24×24 canvas, content within a ~2px margin\n// • 2px stroke, round caps + round joins\n// • strokes only (no fills) except a few deliberate solid accents\n// • inherits the button's text color via currentColor\n//\n// It renders at 15px by default to suit the toolbar chrome; callers can override\n// `size` / `strokeWidth` (and pass through any SVG prop). This is the single\n// primitive every icon in ./icons is built on.\n\nexport interface IconProps extends Omit<SVGProps<SVGSVGElement>, \"children\"> {\n /** Rendered pixel size (square). Default 15. */\n size?: number;\n children?: ReactNode;\n}\n\nexport function Icon({ size = 15, strokeWidth = 2, children, ...rest }: IconProps) {\n return (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={strokeWidth}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden=\"true\"\n focusable=\"false\"\n style={{ display: \"block\" }}\n {...rest}\n >\n {children}\n </svg>\n );\n}\n\n/** A solid endpoint dot (drawing-tool anchors), sized for the 24-grid. */\nexport const dot = (cx: number, cy: number) => <circle cx={cx} cy={cy} r=\"2\" fill=\"currentColor\" stroke=\"none\" />;\n","import { Icon } from \"./Icon\";\n\n// UI & navigation icons — Lucide-style, 24×24 grid, 2px round stroke. Names are\n// kept stable (EyeIcon, ClearIcon, GearIcon, …) so every existing `./icons`\n// import resolves here unchanged. Chart/drawing glyphs live in ./chart.\n\n/** Eye — drawings visible (lucide: eye). */\nexport function EyeIcon() {\n return (\n <Icon>\n <path d=\"M2 12s3.5-7 10-7 10 7 10 7-3.5 7-10 7-10-7-10-7Z\" />\n <circle cx=\"12\" cy=\"12\" r=\"3\" />\n </Icon>\n );\n}\n\n/** Eye with a slash — drawings hidden (lucide: eye-off). */\nexport function EyeOffIcon() {\n return (\n <Icon>\n <path d=\"M10.7 5.1A9.9 9.9 0 0 1 12 5c7 0 10 7 10 7a13.2 13.2 0 0 1-1.7 2.7\" />\n <path d=\"M6.6 6.6A13 13 0 0 0 2 12s3 7 10 7a9.8 9.8 0 0 0 2.4-.3\" />\n <path d=\"M9.9 9.9a3 3 0 0 0 4.2 4.2\" />\n <path d=\"M3 3l18 18\" />\n </Icon>\n );\n}\n\n/** Padlock, closed — a locked object (lucide: lock). */\nexport function LockIcon() {\n return (\n <Icon>\n <rect x=\"4\" y=\"11\" width=\"16\" height=\"10\" rx=\"2\" />\n <path d=\"M8 11V7a4 4 0 0 1 8 0v4\" />\n </Icon>\n );\n}\n\n/** Padlock, open — an unlocked object (lucide: lock-open). */\nexport function UnlockIcon() {\n return (\n <Icon>\n <rect x=\"4\" y=\"11\" width=\"16\" height=\"10\" rx=\"2\" />\n <path d=\"M8 11V7a4 4 0 0 1 7.9-1\" />\n </Icon>\n );\n}\n\n/** Two overlapping squares — duplicate / copy (lucide: copy). */\nexport function CopyIcon() {\n return (\n <Icon>\n <rect x=\"8\" y=\"8\" width=\"13\" height=\"13\" rx=\"2\" />\n <path d=\"M4 16a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h10a2 2 0 0 1 2 2\" />\n </Icon>\n );\n}\n\n/** Card with an up arrow — bring to front. */\nexport function FrontIcon() {\n return (\n <Icon>\n <rect x=\"5\" y=\"9\" width=\"14\" height=\"12\" rx=\"2\" />\n <path d=\"M12 2v5\" />\n <path d=\"M8.5 5.5 12 2l3.5 3.5\" />\n </Icon>\n );\n}\n\n/** Card with a down arrow — send to back. */\nexport function BackIcon() {\n return (\n <Icon>\n <rect x=\"5\" y=\"3\" width=\"14\" height=\"12\" rx=\"2\" />\n <path d=\"M12 22v-5\" />\n <path d=\"M8.5 18.5 12 22l3.5-3.5\" />\n </Icon>\n );\n}\n\n/** Trash can — clear all drawings (lucide: trash-2). */\nexport function ClearIcon() {\n return (\n <Icon>\n <path d=\"M3 6h18\" />\n <path d=\"M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2\" />\n <path d=\"M19 6l-1 14a2 2 0 0 1-2 2H8a2 2 0 0 1-2-2L5 6\" />\n <path d=\"M10 11v6\" />\n <path d=\"M14 11v6\" />\n </Icon>\n );\n}\n\n/** Curved arrow left — undo (lucide: undo-2). */\nexport function UndoIcon() {\n return (\n <Icon>\n <path d=\"M9 14 4 9l5-5\" />\n <path d=\"M4 9h11a5 5 0 0 1 0 10h-1\" />\n </Icon>\n );\n}\n\n/** Curved arrow right — redo (lucide: redo-2). */\nexport function RedoIcon() {\n return (\n <Icon>\n <path d=\"M15 14l5-5-5-5\" />\n <path d=\"M20 9H9a5 5 0 0 0 0 10h1\" />\n </Icon>\n );\n}\n\n/** Cog — chart settings (lucide: settings). */\nexport function GearIcon() {\n return (\n <Icon>\n <path d=\"M19.4 15a1.65 1.65 0 0 0 .33 1.82l.06.06a2 2 0 1 1-2.83 2.83l-.06-.06a1.65 1.65 0 0 0-1.82-.33 1.65 1.65 0 0 0-1 1.51V21a2 2 0 0 1-4 0v-.09A1.65 1.65 0 0 0 9 19.4a1.65 1.65 0 0 0-1.82.33l-.06.06a2 2 0 1 1-2.83-2.83l.06-.06a1.65 1.65 0 0 0 .33-1.82 1.65 1.65 0 0 0-1.51-1H3a2 2 0 0 1 0-4h.09A1.65 1.65 0 0 0 4.6 9a1.65 1.65 0 0 0-.33-1.82l-.06-.06a2 2 0 1 1 2.83-2.83l.06.06a1.65 1.65 0 0 0 1.82.33H9a1.65 1.65 0 0 0 1-1.51V3a2 2 0 0 1 4 0v.09a1.65 1.65 0 0 0 1 1.51 1.65 1.65 0 0 0 1.82-.33l.06-.06a2 2 0 1 1 2.83 2.83l-.06.06a1.65 1.65 0 0 0-.33 1.82V9a1.65 1.65 0 0 0 1.51 1H21a2 2 0 0 1 0 4h-.09a1.65 1.65 0 0 0-1.51 1z\" />\n <circle cx=\"12\" cy=\"12\" r=\"3\" />\n </Icon>\n );\n}\n\n/** Camera — save a snapshot (lucide: camera). */\nexport function CameraIcon() {\n return (\n <Icon>\n <path d=\"M14.5 4h-5L7 7H4a2 2 0 0 0-2 2v9a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2V9a2 2 0 0 0-2-2h-3l-2.5-3Z\" />\n <circle cx=\"12\" cy=\"13\" r=\"3\" />\n </Icon>\n );\n}\n\n/** Calendar — go to date (lucide: calendar). */\nexport function CalendarIcon() {\n return (\n <Icon>\n <rect x=\"3\" y=\"4\" width=\"18\" height=\"18\" rx=\"2\" />\n <path d=\"M3 10h18\" />\n <path d=\"M8 2v4\" />\n <path d=\"M16 2v4\" />\n </Icon>\n );\n}\n\n/** Stacked layers — the indicators/objects side-panel toggle (lucide: layers). */\nexport function ObjectsIcon() {\n return (\n <Icon>\n <path d=\"M12 2 2 7l10 5 10-5-10-5Z\" />\n <path d=\"M2 12l10 5 10-5\" />\n <path d=\"M2 17l10 5 10-5\" />\n </Icon>\n );\n}\n\n/** Pencil — the drawing-tools dropdown trigger (lucide: pencil). */\nexport function PencilIcon() {\n return (\n <Icon>\n <path d=\"M12 20h9\" />\n <path d=\"M16.5 3.5a2.12 2.12 0 0 1 3 3L7 19l-4 1 1-4Z\" />\n </Icon>\n );\n}\n\n/** Magnifier with a plus — zoom in (lucide: zoom-in). */\nexport function ZoomInIcon() {\n return (\n <Icon>\n <circle cx=\"11\" cy=\"11\" r=\"8\" />\n <path d=\"M21 21l-4.3-4.3\" />\n <path d=\"M11 8v6\" />\n <path d=\"M8 11h6\" />\n </Icon>\n );\n}\n\n/** Magnifier with a minus — zoom out (lucide: zoom-out). */\nexport function ZoomOutIcon() {\n return (\n <Icon>\n <circle cx=\"11\" cy=\"11\" r=\"8\" />\n <path d=\"M21 21l-4.3-4.3\" />\n <path d=\"M8 11h6\" />\n </Icon>\n );\n}\n\n/** Corner brackets — fit / reset the visible range to all data (lucide: maximize). */\nexport function FitIcon() {\n return (\n <Icon>\n <path d=\"M8 3H5a2 2 0 0 0-2 2v3\" />\n <path d=\"M21 8V5a2 2 0 0 0-2-2h-3\" />\n <path d=\"M3 16v3a2 2 0 0 0 2 2h3\" />\n <path d=\"M16 21h3a2 2 0 0 0 2-2v-3\" />\n </Icon>\n );\n}\n\n/** Chevron to a bar — jump to the latest (realtime) bar (lucide: chevron-last). */\nexport function RealtimeIcon() {\n return (\n <Icon>\n <path d=\"M7 18l6-6-6-6\" />\n <path d=\"M17 6v12\" />\n </Icon>\n );\n}\n","import type { DrawingTool } from \"../types\";\nimport { Icon, dot } from \"./Icon\";\n\n// Chart & drawing-tool glyphs — Lucide-style, 24×24 grid, 2px round stroke.\n// These are charting-specific (no Lucide equivalents), authored in the same\n// visual language: minimal line-art, rounded ends, a couple of deliberate solid\n// accents (candle body, anchor dots).\n\n/** Candlestick pair — the candle-type menu trigger. */\nexport function CandleIcon() {\n return (\n <Icon>\n <path d=\"M8 3v18\" />\n <rect x=\"5.5\" y=\"7\" width=\"5\" height=\"8\" rx=\"1\" fill=\"currentColor\" stroke=\"none\" />\n <path d=\"M16 5v14\" />\n <rect x=\"13.5\" y=\"9\" width=\"5\" height=\"6\" rx=\"1\" />\n </Icon>\n );\n}\n\n/** Icon for a drawing tool; falls back to a plain segment for unknown tools. */\nexport function DrawIcon({ tool }: { tool: DrawingTool }) {\n switch (tool) {\n case \"brush\":\n // A pen drawing a stroke.\n return (\n <Icon>\n <path d=\"M4 20l3-1 11-11-2-2L5 17l-1 3Z\" />\n <path d=\"M15 6l2 2\" />\n </Icon>\n );\n case \"highlighter\":\n // A marker tip over an underline.\n return (\n <Icon>\n <path d=\"M4 20h9\" />\n <path d=\"M9 16l7-7 3 3-7 7H9v-3Z\" />\n <path d=\"M15 5l3 3\" />\n </Icon>\n );\n case \"segment\":\n return (\n <Icon>\n <line x1=\"6\" y1=\"18\" x2=\"18\" y2=\"6\" />\n {dot(6, 18)}\n {dot(18, 6)}\n </Icon>\n );\n case \"rayLine\":\n return (\n <Icon>\n <line x1=\"6\" y1=\"18\" x2=\"20\" y2=\"4\" />\n {dot(6, 18)}\n </Icon>\n );\n case \"straightLine\":\n return (\n <Icon>\n <line x1=\"3\" y1=\"21\" x2=\"21\" y2=\"3\" />\n </Icon>\n );\n case \"horizontalStraightLine\":\n return (\n <Icon>\n <line x1=\"3\" y1=\"12\" x2=\"21\" y2=\"12\" />\n </Icon>\n );\n case \"verticalStraightLine\":\n return (\n <Icon>\n <line x1=\"12\" y1=\"3\" x2=\"12\" y2=\"21\" />\n </Icon>\n );\n case \"priceLine\":\n return (\n <Icon>\n <line x1=\"3\" y1=\"12\" x2=\"13\" y2=\"12\" />\n <rect x=\"13\" y=\"9\" width=\"7\" height=\"6\" rx=\"1\" />\n </Icon>\n );\n case \"parallelStraightLine\":\n return (\n <Icon>\n <line x1=\"3\" y1=\"15\" x2=\"16.5\" y2=\"4.5\" />\n <line x1=\"7.5\" y1=\"19.5\" x2=\"21\" y2=\"9\" />\n </Icon>\n );\n case \"priceChannelLine\":\n return (\n <Icon>\n <line x1=\"3\" y1=\"7.5\" x2=\"21\" y2=\"7.5\" />\n <line x1=\"3\" y1=\"16.5\" x2=\"21\" y2=\"16.5\" />\n </Icon>\n );\n case \"fibonacciLine\":\n return (\n <Icon>\n <line x1=\"3\" y1=\"4\" x2=\"21\" y2=\"4\" />\n <line x1=\"3\" y1=\"9.5\" x2=\"21\" y2=\"9.5\" />\n <line x1=\"3\" y1=\"14.5\" x2=\"21\" y2=\"14.5\" />\n <line x1=\"3\" y1=\"20\" x2=\"21\" y2=\"20\" />\n </Icon>\n );\n case \"text\":\n // A capital \"T\" — the text-label tool.\n return (\n <Icon>\n <line x1=\"5\" y1=\"6\" x2=\"19\" y2=\"6\" />\n <line x1=\"12\" y1=\"6\" x2=\"12\" y2=\"19\" />\n </Icon>\n );\n case \"simpleAnnotation\":\n // Speech bubble — a note.\n return (\n <Icon>\n <path d=\"M4 5h16v10H10l-4 3.5V15H4Z\" />\n </Icon>\n );\n case \"simpleTag\":\n // Price tag.\n return (\n <Icon>\n <path d=\"M4 4h7l8 8-7 7-8-8Z\" />\n <circle cx=\"8.5\" cy=\"8.5\" r=\"1.4\" fill=\"currentColor\" stroke=\"none\" />\n </Icon>\n );\n case \"rectangle\":\n return (\n <Icon>\n <rect x=\"4\" y=\"6\" width=\"16\" height=\"12\" rx=\"1\" />\n </Icon>\n );\n case \"ellipse\":\n return (\n <Icon>\n <ellipse cx=\"12\" cy=\"12\" rx=\"9\" ry=\"6\" />\n </Icon>\n );\n case \"triangle\":\n return (\n <Icon>\n <path d=\"M12 4 21 20H3Z\" />\n </Icon>\n );\n case \"priceRange\":\n // A box with a double-headed vertical measure arrow.\n return (\n <Icon>\n <rect x=\"4\" y=\"6\" width=\"16\" height=\"12\" rx=\"1\" />\n <line x1=\"12\" y1=\"8.5\" x2=\"12\" y2=\"15.5\" />\n <path d=\"M9.8 10.5 12 8.5l2.2 2\" />\n <path d=\"M9.8 13.5 12 15.5l2.2-2\" />\n </Icon>\n );\n case \"riskReward\":\n // Stacked reward (top) / risk (bottom) boxes split at the entry line.\n return (\n <Icon>\n <rect x=\"4\" y=\"4\" width=\"16\" height=\"7\" />\n <rect x=\"4\" y=\"13\" width=\"16\" height=\"7\" />\n <line x1=\"3\" y1=\"12\" x2=\"21\" y2=\"12\" />\n </Icon>\n );\n // --- Extended family (drawingsExtended.ts) ---\n case \"horizontalRay\":\n // Anchored dot with a line running to the right edge.\n return (\n <Icon>\n <line x1=\"4\" y1=\"12\" x2=\"21\" y2=\"12\" />\n {dot(4, 12)}\n </Icon>\n );\n case \"crossLine\":\n // Full-width + full-height crosshair through an anchor.\n return (\n <Icon>\n <line x1=\"12\" y1=\"3\" x2=\"12\" y2=\"21\" />\n <line x1=\"3\" y1=\"12\" x2=\"21\" y2=\"12\" />\n {dot(12, 12)}\n </Icon>\n );\n case \"arrow\":\n // Directional arrow (up-right).\n return (\n <Icon>\n <line x1=\"5\" y1=\"19\" x2=\"18\" y2=\"6\" />\n <path d=\"M9 6h9v9\" />\n </Icon>\n );\n case \"fibExtension\":\n // A→B→C impulse leg projected onto horizontal levels.\n return (\n <Icon>\n <path d=\"M3 20l4-7 4 4\" />\n <line x1=\"12\" y1=\"5\" x2=\"21\" y2=\"5\" />\n <line x1=\"12\" y1=\"11\" x2=\"21\" y2=\"11\" />\n <line x1=\"12\" y1=\"17\" x2=\"21\" y2=\"17\" />\n </Icon>\n );\n case \"fibTimeZone\":\n // Vertical lines at Fibonacci-widening intervals.\n return (\n <Icon>\n <line x1=\"4\" y1=\"4\" x2=\"4\" y2=\"20\" />\n <line x1=\"7\" y1=\"4\" x2=\"7\" y2=\"20\" />\n <line x1=\"12\" y1=\"4\" x2=\"12\" y2=\"20\" />\n <line x1=\"20\" y1=\"4\" x2=\"20\" y2=\"20\" />\n </Icon>\n );\n case \"dateRange\":\n // Horizontal span measured between two end-bars, double-headed.\n return (\n <Icon>\n <line x1=\"4\" y1=\"6\" x2=\"4\" y2=\"18\" />\n <line x1=\"20\" y1=\"6\" x2=\"20\" y2=\"18\" />\n <line x1=\"4\" y1=\"12\" x2=\"20\" y2=\"12\" />\n <path d=\"M7 9 4 12l3 3\" />\n <path d=\"M17 9l3 3-3 3\" />\n </Icon>\n );\n case \"datePriceRange\":\n // A range box measured across both axes (diagonal arrow).\n return (\n <Icon>\n <rect x=\"3\" y=\"5\" width=\"18\" height=\"14\" rx=\"1\" />\n <line x1=\"7\" y1=\"17\" x2=\"17\" y2=\"7\" />\n <path d=\"M11 7h6v6\" />\n </Icon>\n );\n default:\n return (\n <Icon>\n <line x1=\"6\" y1=\"18\" x2=\"18\" y2=\"6\" />\n </Icon>\n );\n }\n}\n","import { useEffect, useRef } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { ensureDefaultStyles } from \"./defaultStyles\";\n\n// A small, self-contained confirmation dialog used to guard destructive toolbar\n// actions (e.g. clearing all drawings). Portal-rendered so it escapes any\n// overflow clip; Escape or an overlay click cancels, and the confirm button is\n// focused on open so Enter confirms. Styling is class-based (`.sonr-confirm-*`)\n// with neutral defaults injected by ensureDefaultStyles — a host theme overrides\n// them (see the scanner's blue/teal treatment).\n\nexport function ConfirmDialog({\n open,\n message,\n confirmLabel = \"OK\",\n cancelLabel = \"Cancel\",\n onConfirm,\n onCancel,\n}: {\n open: boolean;\n message: string;\n confirmLabel?: string;\n cancelLabel?: string;\n onConfirm: () => void;\n onCancel: () => void;\n}) {\n useEffect(ensureDefaultStyles, []);\n const okRef = useRef<HTMLButtonElement>(null);\n\n useEffect(() => {\n if (!open) return;\n okRef.current?.focus();\n const onKey = (e: KeyboardEvent) => {\n if (e.key === \"Escape\") {\n e.stopPropagation();\n onCancel();\n }\n };\n document.addEventListener(\"keydown\", onKey, true);\n return () => document.removeEventListener(\"keydown\", onKey, true);\n }, [open, onCancel]);\n\n if (!open || typeof document === \"undefined\") return null;\n\n return createPortal(\n <div className=\"sonr-confirm-overlay\" onMouseDown={onCancel}>\n <div\n className=\"sonr-confirm\"\n role=\"alertdialog\"\n aria-modal=\"true\"\n aria-label={message}\n onMouseDown={(e) => e.stopPropagation()}\n >\n <div className=\"sonr-confirm-icon\" aria-hidden>\n ?\n </div>\n <div className=\"sonr-confirm-body\">\n <p className=\"sonr-confirm-msg\">{message}</p>\n <div className=\"sonr-confirm-actions\">\n <button type=\"button\" className=\"sonr-confirm-btn sonr-confirm-cancel\" onClick={onCancel}>\n {cancelLabel}\n </button>\n <button ref={okRef} type=\"button\" className=\"sonr-confirm-btn sonr-confirm-ok\" onClick={onConfirm}>\n {confirmLabel}\n </button>\n </div>\n </div>\n </div>\n </div>,\n document.body,\n );\n}\n","import { useEffect, useMemo, useState, type RefObject } from \"react\";\nimport type { SonrChartHandle } from \"./SonrChart\";\nimport type { IndicatorRow } from \"./types\";\nimport { ensureDefaultStyles } from \"./defaultStyles\";\nimport { EyeIcon, EyeOffIcon, ClearIcon } from \"./icons\";\nimport { mergeLabels, type Labels } from \"./labels\";\n\n// Data-window panel (issue #45): a compact list of the active user indicators\n// with a per-row show/hide eye and a remove button. Driven entirely by the\n// chart handle and refreshed from a subscription (indicator add/remove/\n// visibility) — it never touches the per-frame render path.\n\nexport function DataWindow({\n chartRef,\n className,\n labels,\n}: {\n chartRef: RefObject<SonrChartHandle>;\n className?: string;\n labels?: Partial<Labels>;\n}) {\n useEffect(ensureDefaultStyles, []);\n const L = useMemo(() => mergeLabels(labels), [labels]);\n const [rows, setRows] = useState<IndicatorRow[]>([]);\n\n // The handle mounts as a sibling, so retry until it's available, then seed +\n // subscribe. Any indicator change re-reads the list (cheap, not per-frame).\n useEffect(() => {\n let cancelled = false;\n let unsub: (() => void) | undefined;\n const attach = () => {\n if (cancelled) return;\n const h = chartRef.current;\n if (h?.listIndicatorRows) {\n const sync = () => setRows(h.listIndicatorRows());\n sync();\n unsub = h.subscribeIndicators?.(sync);\n } else {\n setTimeout(attach, 50);\n }\n };\n attach();\n return () => {\n cancelled = true;\n unsub?.();\n };\n }, [chartRef]);\n\n return (\n <div className={className ?? \"sonr-panel\"} role=\"group\" aria-label={L.dataWindow}>\n <div className=\"sonr-panel-title\">{L.dataWindow}</div>\n {rows.length === 0 ? (\n <div className=\"sonr-panel-empty\">{L.noIndicators}</div>\n ) : (\n <ul className=\"sonr-panel-list\">\n {rows.map((row) => (\n <li key={row.name} className={`sonr-panel-row${row.visible ? \"\" : \" off\"}`}>\n <span className=\"sonr-panel-label\" title={row.name}>\n {row.name}\n </span>\n <span className=\"sonr-panel-actions\">\n <button\n type=\"button\"\n className=\"sonr-panel-btn\"\n aria-pressed={!row.visible}\n title={row.visible ? L.hide : L.show}\n aria-label={`${row.visible ? L.hide : L.show}: ${row.name}`}\n onClick={() => chartRef.current?.setIndicatorVisible?.(row.name, !row.visible)}\n >\n {row.visible ? <EyeIcon /> : <EyeOffIcon />}\n </button>\n <button\n type=\"button\"\n className=\"sonr-panel-btn sonr-panel-remove\"\n title={L.remove}\n aria-label={`${L.remove}: ${row.name}`}\n onClick={() => chartRef.current?.removeIndicator?.(row.name)}\n >\n <ClearIcon />\n </button>\n </span>\n </li>\n ))}\n </ul>\n )}\n </div>\n );\n}\n","import { useCallback, useEffect, useMemo, useState, type RefObject } from \"react\";\nimport type { SonrChartHandle } from \"./SonrChart\";\nimport type { DrawingRow } from \"./types\";\nimport { ensureDefaultStyles } from \"./defaultStyles\";\nimport { EyeIcon, EyeOffIcon, LockIcon, UnlockIcon, ClearIcon, CopyIcon, FrontIcon, BackIcon } from \"./icons\";\nimport { mergeLabels, type Labels } from \"./labels\";\n\n// Object-tree panel (issue #45): lists every user drawing with a per-row label\n// (a text label shows its own content), a show/hide eye, a lock toggle, and a\n// remove button. Refreshed from the drawing-history subscription (add/remove/\n// undo/redo/clear all push a history step) plus a re-read after each per-row\n// action, so it stays in sync without polling or per-frame work.\n\nexport function ObjectTree({\n chartRef,\n className,\n labels,\n}: {\n chartRef: RefObject<SonrChartHandle>;\n className?: string;\n labels?: Partial<Labels>;\n}) {\n useEffect(ensureDefaultStyles, []);\n const L = useMemo(() => mergeLabels(labels), [labels]);\n const [rows, setRows] = useState<DrawingRow[]>([]);\n\n const refresh = useCallback(() => {\n const h = chartRef.current;\n if (h?.listDrawings) setRows(h.listDrawings());\n }, [chartRef]);\n\n useEffect(() => {\n let cancelled = false;\n let unsub: (() => void) | undefined;\n const attach = () => {\n if (cancelled) return;\n const h = chartRef.current;\n if (h?.listDrawings) {\n refresh();\n // History changes cover create / remove / clear / undo / redo.\n unsub = h.subscribeHistory?.(refresh);\n } else {\n setTimeout(attach, 50);\n }\n };\n attach();\n return () => {\n cancelled = true;\n unsub?.();\n };\n }, [chartRef, refresh]);\n\n return (\n <div className={className ?? \"sonr-panel\"} role=\"group\" aria-label={L.objectTree}>\n <div className=\"sonr-panel-title\">{L.objectTree}</div>\n {rows.length === 0 ? (\n <div className=\"sonr-panel-empty\">{L.noDrawings}</div>\n ) : (\n <ul className=\"sonr-panel-list\">\n {rows.map((row) => (\n <li key={row.id} className={`sonr-panel-row${row.visible ? \"\" : \" off\"}`}>\n <button\n type=\"button\"\n className=\"sonr-panel-label sonr-panel-locate\"\n title={row.label}\n onClick={() => chartRef.current?.locateDrawing?.(row.id)}\n >\n {row.label}\n </button>\n <span className=\"sonr-panel-actions\">\n <button\n type=\"button\"\n className=\"sonr-panel-btn sonr-panel-btn-extra\"\n title={L.duplicate}\n aria-label={`${L.duplicate}: ${row.label}`}\n onClick={() => {\n chartRef.current?.copyDrawing?.(row.id);\n chartRef.current?.pasteDrawing?.();\n refresh();\n }}\n >\n <CopyIcon />\n </button>\n <button\n type=\"button\"\n className=\"sonr-panel-btn sonr-panel-btn-extra\"\n title={L.bringToFront}\n aria-label={`${L.bringToFront}: ${row.label}`}\n onClick={() => chartRef.current?.setDrawingZOrder?.(row.id, \"front\")}\n >\n <FrontIcon />\n </button>\n <button\n type=\"button\"\n className=\"sonr-panel-btn sonr-panel-btn-extra\"\n title={L.sendToBack}\n aria-label={`${L.sendToBack}: ${row.label}`}\n onClick={() => chartRef.current?.setDrawingZOrder?.(row.id, \"back\")}\n >\n <BackIcon />\n </button>\n <button\n type=\"button\"\n className=\"sonr-panel-btn\"\n aria-pressed={row.locked}\n title={row.locked ? L.unlock : L.lock}\n aria-label={`${row.locked ? L.unlock : L.lock}: ${row.label}`}\n onClick={() => {\n chartRef.current?.setDrawingLocked?.(row.id, !row.locked);\n refresh();\n }}\n >\n {row.locked ? <LockIcon /> : <UnlockIcon />}\n </button>\n <button\n type=\"button\"\n className=\"sonr-panel-btn\"\n aria-pressed={!row.visible}\n title={row.visible ? L.hide : L.show}\n aria-label={`${row.visible ? L.hide : L.show}: ${row.label}`}\n onClick={() => {\n chartRef.current?.setDrawingVisible?.(row.id, !row.visible);\n refresh();\n }}\n >\n {row.visible ? <EyeIcon /> : <EyeOffIcon />}\n </button>\n <button\n type=\"button\"\n className=\"sonr-panel-btn sonr-panel-remove\"\n title={L.remove}\n aria-label={`${L.remove}: ${row.label}`}\n onClick={() => chartRef.current?.removeDrawing?.(row.id)}\n >\n <ClearIcon />\n </button>\n </span>\n </li>\n ))}\n </ul>\n )}\n </div>\n );\n}\n","import { useEffect, useMemo, useState, type ReactNode, type RefObject } from \"react\";\nimport type { SonrChartHandle } from \"./SonrChart\";\nimport type { Interval } from \"./types\";\nimport { ensureDefaultStyles } from \"./defaultStyles\";\n\n// Bottom timeframe bar (issue #45) — TradingView's *lookback range* selector,\n// NOT a resolution picker (that's the top toolbar's interval). Each button\n// zooms the visible window to the last N of its period (1D / 5D / 1M / …) at\n// whatever resolution is currently selected, so \"1M\" with a 30m interval shows\n// \"1 month in 30 minute intervals\" (the button's tooltip). Drives the chart\n// through the handle's setVisibleDuration; the last-picked range is highlighted.\n\nconst MIN = 60_000;\nconst HOUR = 60 * MIN;\nconst DAY = 24 * HOUR;\n\n/** One lookback button: a label, the window length in ms (Infinity = all data),\n * and the words used in the \"{range} in {interval} intervals\" tooltip. */\nexport interface RangeOption {\n label: string;\n ms: number;\n title: string;\n}\n\nexport const DEFAULT_RANGES: RangeOption[] = [\n { label: \"1D\", ms: DAY, title: \"1 day\" },\n { label: \"5D\", ms: 5 * DAY, title: \"5 days\" },\n { label: \"1M\", ms: 30 * DAY, title: \"1 month\" },\n { label: \"3M\", ms: 90 * DAY, title: \"3 months\" },\n];\n\n// Resolution → words for the tooltip (\"30 minutes\", \"1 hour\", …).\nfunction intervalWords(iv: Interval): string {\n const map: Record<string, string> = {\n \"10S\": \"10 second\",\n \"30S\": \"30 second\",\n \"1\": \"1 minute\",\n \"5\": \"5 minute\",\n \"15\": \"15 minute\",\n \"30\": \"30 minute\",\n \"60\": \"1 hour\",\n D: \"1 day\",\n \"1D\": \"1 day\",\n \"1440\": \"1 day\",\n };\n return map[iv] ?? `${iv}`;\n}\n\nexport function TimeframeBar({\n chartRef,\n interval,\n ranges = DEFAULT_RANGES,\n className,\n children,\n}: {\n chartRef: RefObject<SonrChartHandle>;\n /** Current resolution — only used to render the tooltip. */\n interval: Interval;\n /** Lookback ranges to offer, in display order (defaults to DEFAULT_RANGES). */\n ranges?: RangeOption[];\n className?: string;\n /** Optional right-aligned slot for host nav/control widgets. */\n children?: ReactNode;\n}) {\n useEffect(ensureDefaultStyles, []);\n // The last-picked range, highlighted until zoom/scroll drifts (uncontrolled —\n // a lookback is a quick action, not persistent state).\n const [active, setActive] = useState<string | null>(null);\n const words = useMemo(() => intervalWords(interval), [interval]);\n\n return (\n <div className={className ?? \"sonr-timeframe-bar\"} role=\"group\" aria-label=\"Timeframe range\">\n <div className=\"sonr-timeframe-list\">\n {ranges.map((r) => {\n const on = r.label === active;\n return (\n <button\n key={r.label}\n type=\"button\"\n className={`sonr-timeframe-btn${on ? \" on\" : \"\"}`}\n aria-pressed={on}\n title={`${r.title} in ${words} intervals`}\n onClick={() => {\n chartRef.current?.setVisibleDuration?.(r.ms);\n setActive(r.label);\n }}\n >\n {r.label}\n </button>\n );\n })}\n </div>\n {children != null && <div className=\"sonr-timeframe-slot\">{children}</div>}\n </div>\n );\n}\n","import { useEffect, useMemo, useState, type RefObject } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport type { SonrChartHandle } from \"./SonrChart\";\nimport { ensureDefaultStyles } from \"./defaultStyles\";\nimport { useDropdown } from \"./useDropdown\";\nimport { mergeLabels, type Labels } from \"./labels\";\nimport { DEFAULT_TIMEZONE, DEFAULT_TIMEZONES, timezoneLabel, type TimezoneOption } from \"./timezone\";\n\n// Timezone picker (issue #38). Single-select dropdown mirroring PriceScaleMenu.\n// Handle-driven (uncontrolled): it seeds from and subscribes to the chart's\n// timezone via the ref, and applies changes with setTimezone — so a host wires\n// it with just a chartRef, matching the theme/candle-style controls. The\n// `timezone` prop on <SonrChart> still overrides.\n\nexport function TimezoneMenu({\n chartRef,\n options = DEFAULT_TIMEZONES,\n className,\n labels,\n}: {\n chartRef: RefObject<SonrChartHandle>;\n /** Timezones to offer (defaults to the curated common set). */\n options?: TimezoneOption[];\n className?: string;\n labels?: Partial<Labels>;\n}) {\n useEffect(ensureDefaultStyles, []);\n const L = useMemo(() => mergeLabels(labels), [labels]);\n const { open, setOpen, toggle: toggleOpen, pos, triggerRef, panelRef } = useDropdown();\n\n const [tz, setTz] = useState<string>(DEFAULT_TIMEZONE);\n // Seed + subscribe once the handle is attached (mirrors PriceScaleMenu).\n useEffect(() => {\n let cancelled = false;\n let unsub: (() => void) | undefined;\n const attach = () => {\n if (cancelled) return;\n const h = chartRef.current;\n if (h?.getTimezone) {\n const sync = () => setTz(h.getTimezone());\n sync();\n unsub = h.subscribeTimezone?.(sync);\n } else {\n setTimeout(attach, 50);\n }\n };\n attach();\n return () => {\n cancelled = true;\n unsub?.();\n };\n }, [chartRef]);\n\n const pick = (value: string) => {\n chartRef.current?.setTimezone?.(value);\n setOpen(false);\n };\n\n return (\n <div className={className ?? \"sonr-tz-menu\"} role=\"group\" aria-label={L.timezone}>\n <button\n ref={triggerRef}\n type=\"button\"\n className={`sonr-menu-trigger${open ? \" open\" : \"\"}`}\n aria-haspopup=\"menu\"\n aria-expanded={open}\n aria-label={L.timezone}\n title={L.timezone}\n onClick={toggleOpen}\n >\n {timezoneLabel(tz, options)}\n <span className=\"sonr-menu-caret\" aria-hidden>\n ▾\n </span>\n </button>\n {open &&\n typeof document !== \"undefined\" &&\n createPortal(\n <div\n ref={panelRef}\n className=\"sonr-menu-dropdown\"\n role=\"menu\"\n aria-label={L.timezone}\n style={{ position: \"fixed\", top: pos.top, left: pos.left }}\n >\n {options.map((o) => {\n const on = o.value === tz;\n return (\n <button\n key={o.value}\n type=\"button\"\n role=\"menuitemradio\"\n aria-checked={on}\n className={`sonr-menu-option${on ? \" on\" : \"\"}`}\n onClick={() => pick(o.value)}\n >\n <span className=\"sonr-menu-check\" aria-hidden>\n {on ? \"✓\" : \"\"}\n </span>\n <span className=\"sonr-menu-label sonr-menu-label-wide\">{o.label}</span>\n </button>\n );\n })}\n </div>,\n document.body,\n )}\n </div>\n );\n}\n","import { forwardRef, useImperativeHandle, useRef, useState, type CSSProperties, type ReactNode } from \"react\";\nimport { SonrChart, type SonrChartHandle } from \"./SonrChart\";\nimport { ChartToolbar } from \"./ChartToolbar\";\nimport { ChartHeader } from \"./ChartHeader\";\nimport { DataWindow } from \"./DataWindow\";\nimport { ObjectTree } from \"./ObjectTree\";\nimport { TimeframeBar, type RangeOption } from \"./TimeframeBar\";\nimport { TimezoneMenu } from \"./TimezoneMenu\";\nimport { NavControlBar } from \"./NavControlBar\";\nimport { SaveLoadDialog } from \"./SaveLoadDialog\";\nimport { GoToDateDialog } from \"./GoToDateDialog\";\nimport { SymbolInfoDialog } from \"./SymbolInfoDialog\";\nimport { BrandMark, type BrandCorner } from \"./BrandMark\";\nimport { ToolbarButton } from \"./ToolbarButton\";\nimport { DEFAULT_DRAWING_TOOLS, EXTENDED_DRAWING_TOOLS } from \"./drawings\";\nimport { ObjectsIcon, CalendarIcon } from \"./icons\";\nimport { ensureDefaultStyles } from \"./defaultStyles\";\nimport { mergeLabels, type Labels } from \"./labels\";\nimport type {\n DataSource,\n IndicatorSpec,\n Interval,\n OrderLine,\n PatternMarker,\n PriceLine,\n SessionTint,\n Theme,\n WatermarkOptions,\n} from \"./types\";\n\n// Batteries-included chart shell. Where <SonrChart> is just the canvas and\n// <ChartToolbar>/<DataWindow>/etc. are à-la-carte pieces, <SonrChartShell>\n// composes the WHOLE application chrome — toolbar (with the timezone control,\n// the extended drawing family, and an Objects panel toggle), the header, the\n// side panel (data window + object tree), nav controls, the bottom timeframe\n// bar with go-to-date, and the save-load / symbol-info dialogs — so a consuming\n// app renders one component and only wires callbacks + passes data. Nothing here\n// is app-specific: the host supplies a DataSource, symbol/interval, theme, and\n// optional brand slot; everything else is self-contained.\n\nconst DEFAULT_INTERVALS: Interval[] = [\"10S\", \"30S\", \"1\", \"5\", \"15\", \"30\", \"60\", \"D\"];\n\n// Default drawing palette: the curated set plus the opt-in extended family (#34).\nconst DEFAULT_SHELL_TOOLS = [...DEFAULT_DRAWING_TOOLS, ...EXTENDED_DRAWING_TOOLS];\n\nexport interface SonrChartShellProps {\n symbol: string;\n interval: Interval;\n dataSource: DataSource;\n theme?: Theme | string;\n /** Resolution buttons in the toolbar. Defaults to 10S…D. */\n intervals?: Interval[];\n /** Lookback ranges for the bottom bar. */\n ranges?: RangeOption[];\n /** Data-source label shown in the header (e.g. \"Alpaca\"). */\n source?: string;\n /** Instrument venue label for the Symbol-info dialog (e.g. \"Alpaca\"). */\n exchange?: string;\n onIntervalChange?: (interval: Interval) => void;\n onSymbolChange?: (symbol: string) => void;\n /** Brand mark content (host logo), shown in a chart corner. Omit for none. */\n brand?: ReactNode;\n brandCorner?: BrandCorner;\n brandOpacity?: number;\n /** Snapshot filename. Defaults to `${symbol}-${interval}.png`. */\n snapshotName?: string;\n // Passthroughs to <SonrChart> (sensible defaults).\n indicators?: (string | IndicatorSpec)[];\n sessions?: SessionTint;\n watermark?: boolean | Partial<WatermarkOptions>;\n patterns?: PatternMarker[];\n priceLines?: PriceLine[];\n orderLines?: OrderLine[];\n timezone?: string;\n /** Localized chrome strings, threaded to every piece. */\n labels?: Partial<Labels>;\n className?: string;\n style?: CSSProperties;\n}\n\n/**\n * The full chart application shell. Forwards a ref to the underlying\n * SonrChartHandle so a host can still drive the chart imperatively.\n */\nexport const SonrChartShell = forwardRef<SonrChartHandle, SonrChartShellProps>(function SonrChartShell(\n {\n symbol,\n interval,\n dataSource,\n theme,\n intervals = DEFAULT_INTERVALS,\n ranges,\n source,\n exchange = source,\n onIntervalChange,\n onSymbolChange,\n brand,\n brandCorner = \"bottom-left\",\n brandOpacity = 0.45,\n snapshotName,\n indicators = [\"VOL\"],\n sessions = true,\n watermark = true,\n patterns,\n priceLines,\n orderLines,\n timezone,\n labels,\n className,\n style,\n },\n ref,\n) {\n ensureDefaultStyles();\n const chartRef = useRef<SonrChartHandle>(null);\n // Expose the inner chart handle to the host.\n useImperativeHandle(ref, () => chartRef.current as SonrChartHandle, []);\n\n const [panelOpen, setPanelOpen] = useState(false);\n const [saveLoadOpen, setSaveLoadOpen] = useState(false);\n const [goToDateOpen, setGoToDateOpen] = useState(false);\n const [symbolInfoOpen, setSymbolInfoOpen] = useState(false);\n const L = mergeLabels(labels);\n\n return (\n <div className={`sonr-tile${className ? ` ${className}` : \"\"}`} style={{ position: \"absolute\", inset: 0, ...style }}>\n <ChartToolbar\n chartRef={chartRef}\n intervals={intervals}\n interval={interval}\n onIntervalChange={(iv) => onIntervalChange?.(iv)}\n dataSource={dataSource}\n onSymbolSelect={(sym) => onSymbolChange?.(sym)}\n drawingTools={DEFAULT_SHELL_TOOLS}\n snapshotName={snapshotName ?? `${symbol}-${interval}.png`}\n labels={labels}\n >\n {/* Objects/indicators panel toggle — an icon in the top toolbar. */}\n <ToolbarButton\n className=\"sonr-icon-btn\"\n active={panelOpen}\n title={L.panelToggle}\n aria-label={L.panelToggle}\n onClick={() => setPanelOpen((o) => !o)}\n >\n <ObjectsIcon />\n </ToolbarButton>\n </ChartToolbar>\n <div className=\"sonr-tile-body\">\n <div className=\"sonr-tile-canvas\">\n <SonrChart\n ref={chartRef}\n symbol={symbol}\n interval={interval}\n dataSource={dataSource}\n theme={theme}\n indicators={indicators}\n sessions={sessions}\n watermark={watermark}\n patterns={patterns}\n priceLines={priceLines}\n orderLines={orderLines}\n timezone={timezone}\n source={source}\n legend={false}\n style={{ position: \"absolute\", inset: 0 }}\n />\n {/* Header: ticker · interval · source, market button, OHLC. */}\n <div className=\"sonr-tile-header\">\n <ChartHeader chartRef={chartRef} symbol={symbol} interval={interval} source={source} />\n </div>\n {/* Nav controls — bottom-right overlay. */}\n <div className=\"sonr-tile-nav\">\n <NavControlBar chartRef={chartRef} labels={labels} />\n </div>\n {brand != null && (\n <BrandMark position={brandCorner} opacity={brandOpacity}>\n {brand}\n </BrandMark>\n )}\n </div>\n {panelOpen && (\n <aside className=\"sonr-side-panel\">\n <div className=\"sonr-side-tools\">\n <button type=\"button\" className=\"sonr-side-tool\" onClick={() => setSaveLoadOpen(true)}>\n {L.saveLoad}\n </button>\n <button type=\"button\" className=\"sonr-side-tool\" onClick={() => setSymbolInfoOpen(true)}>\n {L.symbolInfo}\n </button>\n </div>\n <DataWindow chartRef={chartRef} labels={labels} />\n <ObjectTree chartRef={chartRef} labels={labels} />\n </aside>\n )}\n </div>\n <TimeframeBar chartRef={chartRef} interval={interval} ranges={ranges}>\n <TimezoneMenu chartRef={chartRef} labels={labels} />\n <button\n type=\"button\"\n className=\"sonr-bottom-btn\"\n title={L.goToDate}\n aria-label={L.goToDate}\n onClick={() => setGoToDateOpen(true)}\n >\n <CalendarIcon />\n </button>\n </TimeframeBar>\n <SaveLoadDialog chartRef={chartRef} open={saveLoadOpen} onClose={() => setSaveLoadOpen(false)} labels={labels} />\n <GoToDateDialog chartRef={chartRef} open={goToDateOpen} onClose={() => setGoToDateOpen(false)} labels={labels} />\n <SymbolInfoDialog dataSource={dataSource} symbol={symbol} open={symbolInfoOpen} onClose={() => setSymbolInfoOpen(false)} exchange={exchange} labels={labels} />\n </div>\n );\n});\n","import { useCallback, useEffect, useMemo, useRef, useState, type ReactNode, type RefObject } from \"react\";\nimport type { SonrChartHandle } from \"./SonrChart\";\nimport type { Interval, DataSource } from \"./types\";\nimport type { CandleStyle, PriceScale } from \"./types\";\nimport { SymbolSearch } from \"./SymbolSearch\";\nimport { IndicatorMenu, type IndicatorOption } from \"./IndicatorMenu\";\nimport { CandleMenu, type CandleStyleOption } from \"./CandleMenu\";\nimport { PriceScaleMenu } from \"./PriceScaleMenu\";\nimport { DrawingToolbar } from \"./DrawingToolbar\";\nimport { type DrawingToolOption } from \"./drawings\";\nimport { downloadSnapshot } from \"./snapshot\";\nimport { ensureDefaultStyles } from \"./defaultStyles\";\nimport { CameraIcon, GearIcon } from \"./icons\";\nimport { SettingsModal } from \"./SettingsModal\";\nimport { mergeLabels, type Labels } from \"./labels\";\n\n// A composable chart chrome kit (issue #17): interval buttons, the indicator\n// menu, the drawing palette, and a snapshot button — all driving one chart ref.\n// Everything is optional; hosts can also use the pieces individually or build\n// their own chrome. Legend/tooltip is KLineChart's built-in; settings dialogs\n// stay host-owned by design (this library is a chart, not an app shell).\n//\n// When the toolbar is wider than the tile it scrolls horizontally; edge chevrons\n// appear on hover to show (and drive) the scrollable direction, TradingView-style.\nexport function ChartToolbar({\n chartRef,\n intervals,\n interval,\n onIntervalChange,\n candleStyle,\n onCandleStyleChange,\n candleStyles,\n priceScale,\n onPriceScaleChange,\n sessions,\n onSessionsChange,\n indicatorOptions,\n drawingTools,\n showCandle = true,\n showScale = true,\n showSessions = true,\n showDrawing = true,\n showSnapshot = true,\n showSettings = true,\n snapshotName = \"chart.png\",\n dataSource,\n onSymbolSelect,\n spreadOperators,\n className,\n labels,\n children,\n}: {\n chartRef: RefObject<SonrChartHandle>;\n intervals?: Interval[];\n interval?: Interval;\n onIntervalChange?: (interval: Interval) => void;\n candleStyle?: CandleStyle;\n onCandleStyleChange?: (style: CandleStyle) => void;\n candleStyles?: CandleStyleOption[];\n priceScale?: PriceScale;\n onPriceScaleChange?: (scale: PriceScale) => void;\n sessions?: boolean;\n onSessionsChange?: (on: boolean) => void;\n indicatorOptions?: IndicatorOption[];\n drawingTools?: DrawingToolOption[];\n showCandle?: boolean;\n showScale?: boolean;\n showSessions?: boolean;\n showDrawing?: boolean;\n showSnapshot?: boolean;\n showSettings?: boolean;\n snapshotName?: string;\n /** DataSource used to power the optional symbol-search box (issue #37). */\n dataSource?: DataSource;\n /** When provided (with `dataSource`), a SymbolSearch renders at the toolbar's\n * left; picking a result fires this. Omit for the pre-#37 toolbar. */\n onSymbolSelect?: (symbol: string) => void;\n /** Forwarded to SymbolSearch — allow spread/expression pass-through. */\n spreadOperators?: boolean;\n className?: string;\n /** Localized chrome strings (issue #46). Merged over English defaults and\n * threaded to the menus/settings; omit for the current English. */\n labels?: Partial<Labels>;\n children?: ReactNode;\n}) {\n useEffect(ensureDefaultStyles, []);\n const L = useMemo(() => mergeLabels(labels), [labels]);\n\n const [settingsOpen, setSettingsOpen] = useState(false);\n\n // Uncontrolled fallbacks: when the host doesn't pass an onXChange callback, the\n // candle/scale/sessions controls drive the chart directly through its handle\n // (mirrored here so they reflect state) — so they work out of the box with no\n // host wiring. A host that passes value + onXChange stays in control.\n const [uncCandle, setUncCandle] = useState<CandleStyle>(\"candle\");\n const [uncScale, setUncScale] = useState<PriceScale>({ type: \"normal\" });\n const [uncSessions, setUncSessions] = useState(false);\n useEffect(() => {\n const unsubs: Array<() => void> = [];\n let cancelled = false;\n const attach = () => {\n if (cancelled) return;\n const h = chartRef.current;\n if (!h?.subscribeCandleStyle) {\n setTimeout(attach, 50);\n return;\n }\n setUncCandle(h.getCandleStyle());\n unsubs.push(h.subscribeCandleStyle(setUncCandle));\n setUncScale(h.getPriceScale() ?? { type: \"normal\" });\n unsubs.push(h.subscribePriceScale(setUncScale));\n setUncSessions(!!h.getSessions());\n unsubs.push(h.subscribeSessions((v) => setUncSessions(!!v)));\n };\n attach();\n return () => {\n cancelled = true;\n for (const u of unsubs) u();\n };\n }, [chartRef]);\n\n const candleValue = onCandleStyleChange ? (candleStyle ?? \"candle\") : uncCandle;\n const candleChange = onCandleStyleChange ?? ((s: CandleStyle) => chartRef.current?.setCandleStyle(s));\n const scaleValue = onPriceScaleChange ? (priceScale ?? { type: \"normal\" }) : uncScale;\n const scaleChange = onPriceScaleChange ?? ((s: PriceScale) => chartRef.current?.setPriceScale(s));\n const sessionsValue = onSessionsChange ? !!sessions : uncSessions;\n const sessionsChange = onSessionsChange ?? ((on: boolean) => chartRef.current?.setSessions(on));\n const scrollRef = useRef<HTMLDivElement>(null);\n const [canLeft, setCanLeft] = useState(false);\n const [canRight, setCanRight] = useState(false);\n\n // Recompute which directions have hidden content. 1px slop absorbs subpixel\n // rounding so a fully-scrolled edge doesn't flicker a chevron.\n const update = useCallback(() => {\n const el = scrollRef.current;\n if (!el) return;\n setCanLeft(el.scrollLeft > 1);\n setCanRight(el.scrollLeft + el.clientWidth < el.scrollWidth - 1);\n }, []);\n\n useEffect(() => {\n const el = scrollRef.current;\n if (!el) return;\n update();\n // Re-evaluate when the tile resizes or the toolbar's contents change width.\n // ResizeObserver may be absent (SSR, older webviews) — degrade to scroll +\n // window-resize events, which still keep the chevrons correct.\n let ro: ResizeObserver | undefined;\n if (typeof ResizeObserver !== \"undefined\") {\n ro = new ResizeObserver(update);\n ro.observe(el);\n for (const child of Array.from(el.children)) ro.observe(child);\n }\n window.addEventListener(\"resize\", update);\n return () => {\n ro?.disconnect();\n window.removeEventListener(\"resize\", update);\n };\n }, [update]);\n\n const scrollByDir = (dir: 1 | -1) => {\n const el = scrollRef.current;\n if (el) el.scrollBy({ left: dir * el.clientWidth * 0.8, behavior: \"smooth\" });\n };\n\n return (\n <div className=\"sonr-toolbar-wrap\">\n <div\n ref={scrollRef}\n className={className ?? \"sonr-chart-toolbar\"}\n role=\"toolbar\"\n aria-label=\"Chart toolbar\"\n onScroll={update}\n >\n {onSymbolSelect && dataSource && (\n <SymbolSearch\n dataSource={dataSource}\n onSelect={onSymbolSelect}\n spreadOperators={spreadOperators}\n />\n )}\n {intervals && intervals.length > 0 && (\n <div className=\"sonr-interval-group\" role=\"group\" aria-label=\"Interval\">\n {intervals.map((iv) => (\n <button\n key={iv}\n type=\"button\"\n className={`sonr-iv-btn${interval === iv ? \" on\" : \"\"}`}\n aria-pressed={interval === iv}\n onClick={() => onIntervalChange?.(iv)}\n >\n {iv}\n </button>\n ))}\n </div>\n )}\n {showCandle && <CandleMenu value={candleValue} onChange={candleChange} options={candleStyles} labels={labels} />}\n <IndicatorMenu chartRef={chartRef} options={indicatorOptions} labels={labels} />\n {showScale && <PriceScaleMenu value={scaleValue} onChange={scaleChange} labels={labels} chartRef={chartRef} />}\n {showSessions && (\n <div className=\"sonr-session-group\" role=\"group\" aria-label={L.sessions}>\n <button\n type=\"button\"\n className={`sonr-session-btn${sessionsValue ? \" on\" : \"\"}`}\n aria-pressed={!!sessionsValue}\n title=\"Extended-hours session tinting\"\n onClick={() => sessionsChange(!sessionsValue)}\n >\n {L.sessions}\n </button>\n </div>\n )}\n {showDrawing && <DrawingToolbar chartRef={chartRef} tools={drawingTools} labels={labels} />}\n {children}\n {showSnapshot && (\n <button\n type=\"button\"\n className=\"sonr-snapshot-btn sonr-icon-btn\"\n title=\"Save a snapshot\"\n aria-label={L.snapshot}\n onClick={() => downloadSnapshot(chartRef.current, snapshotName)}\n >\n <CameraIcon />\n </button>\n )}\n {showSettings && (\n <button\n type=\"button\"\n className={`sonr-settings-btn sonr-icon-btn${settingsOpen ? \" on\" : \"\"}`}\n title={L.settings}\n aria-label={L.settings}\n aria-haspopup=\"dialog\"\n aria-expanded={settingsOpen}\n onClick={() => setSettingsOpen((o) => !o)}\n >\n <GearIcon />\n </button>\n )}\n </div>\n {showSettings && (\n <SettingsModal\n chartRef={chartRef}\n open={settingsOpen}\n onClose={() => setSettingsOpen(false)}\n labels={labels}\n />\n )}\n {canLeft && (\n <button\n type=\"button\"\n className=\"sonr-scroll-hint left\"\n aria-label=\"Scroll toolbar left\"\n tabIndex={-1}\n onClick={() => scrollByDir(-1)}\n >\n ‹\n </button>\n )}\n {canRight && (\n <button\n type=\"button\"\n className=\"sonr-scroll-hint right\"\n aria-label=\"Scroll toolbar right\"\n tabIndex={-1}\n onClick={() => scrollByDir(1)}\n >\n ›\n </button>\n )}\n </div>\n );\n}\n","import { useCallback, useEffect, useRef, useState } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport type { DataSource, SymbolSearchResult } from \"./types\";\nimport { ensureDefaultStyles } from \"./defaultStyles\";\n\n// Symbol-search dialog (issue #37). A text input that searches the DataSource\n// as the user types (debounced) and shows a body-portaled dropdown of hits.\n// Selecting one calls onSelect(symbol) — the host then re-points the chart's\n// `symbol` prop. The panel is portaled so it isn't clipped by the toolbar's\n// overflow, matching IndicatorMenu / PriceScaleMenu.\n//\n// When `spreadOperators` is on and the query looks like an expression\n// (AAPL/MSFT, SPY*2, 1/x), a synthetic \"Use expression\" row lets the raw string\n// through as a symbol; resolving/charting the spread is the datafeed's job.\n\n/** True when the query contains an arithmetic operator between two operands,\n * i.e. it reads as a spread/expression rather than a plain ticker. */\nexport function isSpreadExpression(query: string): boolean {\n return /\\S\\s*[/*+\\-^]\\s*\\S/.test(query.trim());\n}\n\nexport function SymbolSearch({\n dataSource,\n onSelect,\n spreadOperators = true,\n placeholder = \"Search symbol…\",\n className,\n}: {\n dataSource: DataSource;\n onSelect: (symbol: string) => void;\n spreadOperators?: boolean;\n placeholder?: string;\n className?: string;\n}) {\n useEffect(ensureDefaultStyles, []);\n\n const [query, setQuery] = useState(\"\");\n const [results, setResults] = useState<SymbolSearchResult[]>([]);\n const [loading, setLoading] = useState(false);\n const [open, setOpen] = useState(false);\n const [highlight, setHighlight] = useState(0);\n const [pos, setPos] = useState<{ top: number; left: number; width: number }>({ top: 0, left: 0, width: 0 });\n\n const inputRef = useRef<HTMLInputElement>(null);\n const panelRef = useRef<HTMLDivElement>(null);\n const reqId = useRef(0);\n\n const canSearch = typeof dataSource.searchSymbols === \"function\";\n const expr = spreadOperators && isSpreadExpression(query);\n\n const place = useCallback(() => {\n const r = inputRef.current?.getBoundingClientRect();\n if (r) setPos({ top: r.bottom + 4, left: r.left, width: r.width });\n }, []);\n\n // Debounced search on the query. Stale responses are dropped via reqId so a\n // slow earlier request can't overwrite a newer one.\n useEffect(() => {\n const q = query.trim();\n if (!q) {\n setResults([]);\n setLoading(false);\n return;\n }\n if (!canSearch) return;\n const id = ++reqId.current;\n setLoading(true);\n const t = setTimeout(async () => {\n try {\n const hits = (await dataSource.searchSymbols!(q)) ?? [];\n if (id === reqId.current) {\n setResults(hits);\n setHighlight(0);\n }\n } catch {\n if (id === reqId.current) setResults([]);\n } finally {\n if (id === reqId.current) setLoading(false);\n }\n }, 200);\n return () => clearTimeout(t);\n }, [query, canSearch, dataSource]);\n\n // Outside-click / reposition wiring while open, mirroring useDropdown.\n useEffect(() => {\n if (!open) return;\n const onDown = (e: MouseEvent) => {\n const t = e.target as Node;\n if (panelRef.current?.contains(t) || inputRef.current?.contains(t)) return;\n setOpen(false);\n };\n const reflow = () => place();\n document.addEventListener(\"mousedown\", onDown);\n window.addEventListener(\"resize\", reflow);\n window.addEventListener(\"scroll\", reflow, true);\n return () => {\n document.removeEventListener(\"mousedown\", onDown);\n window.removeEventListener(\"resize\", reflow);\n window.removeEventListener(\"scroll\", reflow, true);\n };\n }, [open, place]);\n\n const choose = useCallback(\n (symbol: string) => {\n onSelect(symbol);\n setQuery(\"\");\n setResults([]);\n setOpen(false);\n setHighlight(0);\n },\n [onSelect],\n );\n\n // The synthetic expression row sits at index 0 when active; result indices\n // shift by 1 so keyboard navigation lines up with what's rendered.\n const exprOffset = expr ? 1 : 0;\n const itemCount = exprOffset + results.length;\n\n const selectAt = (i: number) => {\n if (expr && i === 0) return choose(query.trim());\n const r = results[i - exprOffset];\n if (r) choose(r.symbol);\n };\n\n const onKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (e.key === \"Escape\") {\n setOpen(false);\n return;\n }\n if (e.key === \"Enter\") {\n e.preventDefault();\n if (itemCount > 0) selectAt(Math.min(highlight, itemCount - 1));\n return;\n }\n if (e.key === \"ArrowDown\") {\n e.preventDefault();\n if (itemCount > 0) setHighlight((h) => (h + 1) % itemCount);\n } else if (e.key === \"ArrowUp\") {\n e.preventDefault();\n if (itemCount > 0) setHighlight((h) => (h - 1 + itemCount) % itemCount);\n }\n };\n\n // Once open with a non-empty query there's always something to show — a hit\n // list, the expression row, a loading/empty note, or the unavailable note.\n const showPanel = open && query.trim().length > 0;\n\n return (\n <div className={className ?? \"sonr-search\"} role=\"group\" aria-label=\"Symbol search\">\n <input\n ref={inputRef}\n type=\"text\"\n className=\"sonr-search-input\"\n role=\"combobox\"\n aria-expanded={showPanel}\n aria-autocomplete=\"list\"\n aria-label=\"Search symbol\"\n placeholder={placeholder}\n value={query}\n onChange={(e) => {\n setQuery(e.target.value);\n place();\n setOpen(true);\n }}\n onFocus={() => {\n place();\n if (query.trim()) setOpen(true);\n }}\n onKeyDown={onKeyDown}\n />\n {showPanel &&\n typeof document !== \"undefined\" &&\n createPortal(\n <div\n ref={panelRef}\n className=\"sonr-search-dropdown\"\n role=\"listbox\"\n aria-label=\"Symbol results\"\n style={{ position: \"fixed\", top: pos.top, left: pos.left, minWidth: pos.width }}\n >\n {expr && (\n <button\n type=\"button\"\n role=\"option\"\n aria-selected={highlight === 0}\n className={`sonr-search-option sonr-search-expr${highlight === 0 ? \" active\" : \"\"}`}\n onMouseEnter={() => setHighlight(0)}\n onClick={() => choose(query.trim())}\n >\n <span className=\"sonr-search-sym\">Use expression:</span>\n <span className=\"sonr-search-name\">{query.trim()}</span>\n </button>\n )}\n {canSearch === false && (\n <div className=\"sonr-search-msg\" role=\"presentation\">\n Search unavailable\n </div>\n )}\n {canSearch && loading && results.length === 0 && (\n <div className=\"sonr-search-msg\" role=\"presentation\">\n Searching…\n </div>\n )}\n {canSearch && !loading && results.length === 0 && !expr && (\n <div className=\"sonr-search-msg\" role=\"presentation\">\n No results\n </div>\n )}\n {results.map((r, i) => {\n const idx = i + exprOffset;\n return (\n <button\n key={`${r.symbol}-${i}`}\n type=\"button\"\n role=\"option\"\n aria-selected={highlight === idx}\n className={`sonr-search-option${highlight === idx ? \" active\" : \"\"}`}\n onMouseEnter={() => setHighlight(idx)}\n onClick={() => choose(r.symbol)}\n >\n {r.logo ? (\n <img className=\"sonr-search-logo\" src={r.logo} alt=\"\" aria-hidden width={18} height={18} />\n ) : null}\n <span className=\"sonr-search-sym\">{r.symbol}</span>\n {(r.name || r.exchange) && (\n <span className=\"sonr-search-name\">{r.name ?? r.exchange}</span>\n )}\n {r.exchange && r.name && <span className=\"sonr-search-ex\">{r.exchange}</span>}\n </button>\n );\n })}\n </div>,\n document.body,\n )}\n </div>\n );\n}\n","import { useEffect, useMemo } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport type { CandleStyle } from \"./types\";\nimport { ensureDefaultStyles } from \"./defaultStyles\";\nimport { useDropdown } from \"./useDropdown\";\nimport { CandleIcon } from \"./icons\";\nimport { mergeLabels, type Labels } from \"./labels\";\n\n// A single-select dropdown for the candle rendering style (#1), driven by props\n// (like the interval control) rather than the chart ref — the host owns the\n// value and passes it to both <SonrChart candleStyle> and here. Selecting a row\n// changes the style and closes the menu.\n\nexport interface CandleStyleOption {\n style: CandleStyle;\n label: string;\n}\n\nexport const DEFAULT_CANDLE_STYLES: CandleStyleOption[] = [\n { style: \"candle\", label: \"Candles\" },\n { style: \"hollow\", label: \"Hollow candles\" },\n { style: \"ohlc\", label: \"Bars (OHLC)\" },\n { style: \"hlc\", label: \"HLC bars\" },\n { style: \"high_low\", label: \"High-Low\" },\n { style: \"heikin_ashi\", label: \"Heikin Ashi\" },\n { style: \"line\", label: \"Line\" },\n { style: \"step\", label: \"Step line\" },\n { style: \"area\", label: \"Area\" },\n { style: \"baseline\", label: \"Baseline\" },\n { style: \"column\", label: \"Column\" },\n];\n\nexport function CandleMenu({\n value = \"candle\",\n onChange,\n options = DEFAULT_CANDLE_STYLES,\n className,\n labels,\n}: {\n value?: CandleStyle;\n onChange?: (style: CandleStyle) => void;\n options?: CandleStyleOption[];\n className?: string;\n labels?: Partial<Labels>;\n}) {\n useEffect(ensureDefaultStyles, []);\n\n const L = useMemo(() => mergeLabels(labels), [labels]);\n // Prefer an explicit label override for a style; else the option's own label.\n const labelFor = (opt: CandleStyleOption) => L.candleStyles[opt.style] ?? opt.label;\n const { open, setOpen, toggle: toggleOpen, pos, triggerRef, panelRef } = useDropdown();\n const current = options.find((o) => o.style === value);\n const currentLabel = current ? labelFor(current) : \"Candles\";\n\n const pick = (style: CandleStyle) => {\n onChange?.(style);\n setOpen(false);\n };\n\n return (\n <div className={className ?? \"sonr-candle-menu\"} role=\"group\" aria-label={L.candleType}>\n <button\n ref={triggerRef}\n type=\"button\"\n className={`sonr-menu-trigger sonr-icon-trigger${open ? \" open\" : \"\"}`}\n aria-haspopup=\"menu\"\n aria-expanded={open}\n aria-label={`${L.candleType}: ${currentLabel}`}\n title={`${L.candleType}: ${currentLabel}`}\n onClick={toggleOpen}\n >\n <CandleIcon />\n <span className=\"sonr-menu-caret\" aria-hidden>\n ▾\n </span>\n </button>\n {open &&\n typeof document !== \"undefined\" &&\n createPortal(\n <div\n ref={panelRef}\n className=\"sonr-menu-dropdown\"\n role=\"menu\"\n aria-label={L.candleType}\n style={{ position: \"fixed\", top: pos.top, left: pos.left }}\n >\n {options.map((opt) => {\n const on = opt.style === value;\n return (\n <button\n key={opt.style}\n type=\"button\"\n role=\"menuitemradio\"\n aria-checked={on}\n className={`sonr-menu-option${on ? \" on\" : \"\"}`}\n onClick={() => pick(opt.style)}\n >\n <span className=\"sonr-menu-check\" aria-hidden>\n {on ? \"✓\" : \"\"}\n </span>\n <span className=\"sonr-menu-label sonr-menu-label-wide\">{labelFor(opt)}</span>\n </button>\n );\n })}\n </div>,\n document.body,\n )}\n </div>\n );\n}\n","import { useEffect, useMemo, useState, type RefObject } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport type { PriceLabels, PriceScale } from \"./types\";\nimport type { SonrChartHandle } from \"./SonrChart\";\nimport { ensureDefaultStyles } from \"./defaultStyles\";\nimport { useDropdown } from \"./useDropdown\";\nimport { mergeLabels, type Labels } from \"./labels\";\n\n// Price-scale label toggles (#41), rendered under the scale-type options when a\n// chartRef is supplied. Each maps to a Labels key + a boolean field.\nconst PL_TOGGLES: { key: keyof PriceLabels; label: (L: Labels) => string }[] = [\n { key: \"lastValue\", label: (L) => L.priceLabelLastValue },\n { key: \"lastLine\", label: (L) => L.priceLabelLastLine },\n { key: \"high\", label: (L) => L.priceLabelHigh },\n { key: \"low\", label: (L) => L.priceLabelLow },\n { key: \"countdown\", label: (L) => L.priceLabelCountdown },\n];\n\n// A single-select dropdown for the price-scale type (#12), driven by props (the\n// host owns the value and passes it to both <SonrChart priceScale> and here).\n// Scale type is fixed at chart init, so changing it re-inits the chart — that's\n// the host's concern; this control just reports the new value.\n\ntype ScaleType = NonNullable<PriceScale[\"type\"]>;\n\nconst SCALE_ORDER: ScaleType[] = [\"normal\", \"logarithm\", \"percentage\"];\n\nexport function PriceScaleMenu({\n value,\n onChange,\n className,\n labels,\n chartRef,\n}: {\n value?: PriceScale;\n onChange?: (scale: PriceScale) => void;\n className?: string;\n labels?: Partial<Labels>;\n /** When supplied, renders the price-scale label toggles (#41). */\n chartRef?: RefObject<SonrChartHandle>;\n}) {\n useEffect(ensureDefaultStyles, []);\n\n const L = useMemo(() => mergeLabels(labels), [labels]);\n const { open, setOpen, toggle: toggleOpen, pos, triggerRef, panelRef } = useDropdown();\n const type = (value?.type ?? \"normal\") as ScaleType;\n\n const pick = (t: ScaleType) => {\n onChange?.({ ...value, type: t });\n setOpen(false);\n };\n\n // Mirror the chart's price-label toggles (seed + subscribe once attached).\n const [priceLabels, setPriceLabels] = useState<Required<PriceLabels>>({ lastValue: true, lastLine: true, high: true, low: true, countdown: false });\n useEffect(() => {\n if (!chartRef) return;\n let cancelled = false;\n let unsub: (() => void) | undefined;\n const attach = () => {\n if (cancelled) return;\n const h = chartRef.current;\n if (h?.getPriceLabels) {\n const sync = () => setPriceLabels(h.getPriceLabels());\n sync();\n unsub = h.subscribePriceLabels?.(sync);\n } else {\n setTimeout(attach, 50);\n }\n };\n attach();\n return () => {\n cancelled = true;\n unsub?.();\n };\n }, [chartRef]);\n\n const toggleLabel = (key: keyof PriceLabels, on: boolean) => {\n const next: Partial<PriceLabels> = {};\n next[key] = !on;\n chartRef?.current?.setPriceLabels?.(next);\n };\n\n return (\n <div className={className ?? \"sonr-scale-menu\"} role=\"group\" aria-label=\"Price scale\">\n <button\n ref={triggerRef}\n type=\"button\"\n className={`sonr-menu-trigger${open ? \" open\" : \"\"}`}\n aria-haspopup=\"menu\"\n aria-expanded={open}\n title=\"Price scale\"\n onClick={toggleOpen}\n >\n {L.scale}: {L.scaleTypes[type]}\n <span className=\"sonr-menu-caret\" aria-hidden>\n ▾\n </span>\n </button>\n {open &&\n typeof document !== \"undefined\" &&\n createPortal(\n <div\n ref={panelRef}\n className=\"sonr-menu-dropdown\"\n role=\"menu\"\n aria-label=\"Price scale\"\n style={{ position: \"fixed\", top: pos.top, left: pos.left }}\n >\n {SCALE_ORDER.map((t) => {\n const on = t === type;\n return (\n <button\n key={t}\n type=\"button\"\n role=\"menuitemradio\"\n aria-checked={on}\n className={`sonr-menu-option${on ? \" on\" : \"\"}`}\n onClick={() => pick(t)}\n >\n <span className=\"sonr-menu-check\" aria-hidden>\n {on ? \"✓\" : \"\"}\n </span>\n <span className=\"sonr-menu-label sonr-menu-label-wide\">{L.scaleTypes[t]}</span>\n </button>\n );\n })}\n {chartRef && (\n <>\n <div className=\"sonr-menu-sep\" role=\"separator\" />\n <div className=\"sonr-menu-subhead\">{L.priceLabelsHeading}</div>\n {PL_TOGGLES.map(({ key, label }) => {\n const on = priceLabels[key];\n return (\n <button\n key={key}\n type=\"button\"\n role=\"menuitemcheckbox\"\n aria-checked={on}\n className={`sonr-menu-option${on ? \" on\" : \"\"}`}\n onClick={() => toggleLabel(key, on)}\n >\n <span className=\"sonr-menu-check\" aria-hidden>\n {on ? \"✓\" : \"\"}\n </span>\n <span className=\"sonr-menu-label sonr-menu-label-wide\">{label(L)}</span>\n </button>\n );\n })}\n </>\n )}\n </div>,\n document.body,\n )}\n </div>\n );\n}\n","import type { SonrChartHandle } from \"./SonrChart\";\n\n// Screenshot helpers (issue #20). The chart ref's snapshot() returns a data\n// URL; downloadSnapshot triggers a browser download of it.\nexport function downloadSnapshot(\n handle: SonrChartHandle | null,\n filename = \"chart.png\",\n opts?: { type?: \"png\" | \"jpeg\"; background?: string; includeOverlays?: boolean },\n): boolean {\n const url = handle?.snapshot(opts);\n if (!url) return false;\n const a = document.createElement(\"a\");\n a.href = url;\n a.download = filename;\n document.body.appendChild(a);\n a.click();\n a.remove();\n return true;\n}\n","import { useEffect, useMemo, useState, type RefObject } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport type { SonrChartHandle } from \"./SonrChart\";\nimport type { BrushStyle, BrushTool } from \"./brush\";\nimport type { TextStyle } from \"./textOverlay\";\nimport type { SessionTint, WatermarkOptions } from \"./types\";\nimport { DEFAULT_SESSION_COLORS } from \"./indicators\";\nimport { ensureDefaultStyles } from \"./defaultStyles\";\nimport { mergeLabels, type Labels } from \"./labels\";\n\n// A self-contained chart settings dialog (one modal, sections mirroring the\n// toolbar): Candles (bullish/bearish colors), Indicators (per-active-indicator\n// line color), and Grid & Crosshair. It applies changes live through the chart\n// handle's raw chart() surface, so no host wiring is required — drop it in with a\n// gear button (ChartToolbar does this) or render it yourself.\n\ntype Section = \"candles\" | \"indicators\" | \"grid\" | \"sessions\" | \"drawing\" | \"drawings\";\n\nconst SECTION_KEYS: Section[] = [\"candles\", \"indicators\", \"grid\", \"sessions\", \"drawing\", \"drawings\"];\n\nconst BRUSH_TOOLS: { tool: BrushTool; label: string }[] = [\n { tool: \"brush\", label: \"Brush\" },\n { tool: \"highlighter\", label: \"Highlighter\" },\n];\n\n// A hex fallback for color inputs (which only accept #rrggbb).\nfunction hex(c: string | undefined, fallback: string): string {\n return typeof c === \"string\" && /^#[0-9a-fA-F]{6}$/.test(c) ? c : fallback;\n}\n\n// Split a color string into a #rrggbb hex (for <input type=color>) and an alpha\n// 0..1 (for a slider), and recombine — so translucent strokes stay editable.\nfunction parseColor(c: string): { hex: string; alpha: number } {\n const m = c.match(/rgba?\\(\\s*(\\d+)[\\s,]+(\\d+)[\\s,]+(\\d+)(?:[\\s,/]+([\\d.]+))?\\s*\\)/i);\n if (m) {\n const to2 = (v: string) => Number(v).toString(16).padStart(2, \"0\");\n return { hex: `#${to2(m[1])}${to2(m[2])}${to2(m[3])}`, alpha: m[4] !== undefined ? Number(m[4]) : 1 };\n }\n return { hex: hex(c, \"#888888\"), alpha: 1 };\n}\nfunction composeColor(h: string, alpha: number): string {\n if (alpha >= 1) return h;\n const r = parseInt(h.slice(1, 3), 16);\n const g = parseInt(h.slice(3, 5), 16);\n const b = parseInt(h.slice(5, 7), 16);\n return `rgba(${r},${g},${b},${Math.round(alpha * 100) / 100})`;\n}\n\nfunction Row({ label, children }: { label: string; children: React.ReactNode }) {\n return (\n <label className=\"sonr-set-row\">\n <span className=\"sonr-set-label\">{label}</span>\n {children}\n </label>\n );\n}\n\nexport function SettingsModal({\n chartRef,\n open,\n onClose,\n labels,\n}: {\n chartRef: RefObject<SonrChartHandle>;\n open: boolean;\n onClose: () => void;\n labels?: Partial<Labels>;\n}) {\n useEffect(ensureDefaultStyles, []);\n const L = useMemo(() => mergeLabels(labels), [labels]);\n\n const [section, setSection] = useState<Section>(\"candles\");\n const [candleUp, setCandleUp] = useState(\"#35c98d\");\n const [candleDown, setCandleDown] = useState(\"#ff6a76\");\n const [gridColor, setGridColor] = useState(\"#1d232b\");\n const [gridShow, setGridShow] = useState(true);\n const [crosshairColor, setCrosshairColor] = useState(\"#78828e\");\n const [indicators, setIndicators] = useState<string[]>([]);\n const [indColors, setIndColors] = useState<Record<string, string>>({});\n const [indParams, setIndParams] = useState<Record<string, number[]>>({});\n const [watermark, setWatermark] = useState<WatermarkOptions>({ symbol: true, interval: true, color: \"#e6ebe9\", opacity: 0.06 });\n const [brushStyles, setBrushStyles] = useState<Record<BrushTool, BrushStyle>>({\n brush: { color: \"#e6ebe9\", size: 2 },\n highlighter: { color: \"rgba(245,214,66,0.35)\", size: 14 },\n });\n const [textStyle, setTextStyleState] = useState<TextStyle>({ color: \"#2962ff\", size: 12 });\n // Session tint (extended-hours) — on/off + per-session color (rgba w/ opacity).\n const [sessionsOn, setSessionsOn] = useState(false);\n const [sessionCols, setSessionCols] = useState<{ premarket: string; afterhours: string }>({ ...DEFAULT_SESSION_COLORS });\n // Drawings management (#35): lock/hide all + named templates.\n const [drawingsLocked, setDrawingsLocked] = useState(false);\n const [drawingsHidden, setDrawingsHidden] = useState(false);\n const [templates, setTemplates] = useState<string[]>([]);\n const [templateName, setTemplateName] = useState(\"\");\n\n // Seed from the chart's current styles each time the dialog opens.\n useEffect(() => {\n if (!open) return;\n const chart = chartRef.current?.chart?.();\n if (chart) {\n const s = chart.getStyles();\n setCandleUp(hex(s?.candle?.bar?.upColor, \"#35c98d\"));\n setCandleDown(hex(s?.candle?.bar?.downColor, \"#ff6a76\"));\n setGridColor(hex(s?.grid?.horizontal?.color, \"#1d232b\"));\n setGridShow(s?.grid?.horizontal?.show !== false);\n setCrosshairColor(hex(s?.crosshair?.horizontal?.line?.color, \"#78828e\"));\n }\n const names = chartRef.current?.listIndicators?.() ?? [];\n setIndicators(names);\n // Seed each active indicator's calculation params from the raw chart, so the\n // inputs editor shows the live values. Only keep non-empty numeric arrays.\n const params: Record<string, number[]> = {};\n for (const name of names) {\n const found = chart?.getIndicators?.({ name });\n const cp = Array.isArray(found) ? (found[0]?.calcParams as unknown) : undefined;\n if (Array.isArray(cp) && cp.length > 0 && cp.every((n) => typeof n === \"number\")) {\n params[name] = cp.slice();\n }\n }\n setIndParams(params);\n const readWm = () => {\n const w = chartRef.current?.getWatermark?.();\n if (w) setWatermark(w);\n };\n readWm();\n const unsubWm = chartRef.current?.subscribeWatermark?.(readWm);\n const readBrush = () => {\n const h = chartRef.current;\n if (h?.getBrushStyle) setBrushStyles({ brush: h.getBrushStyle(\"brush\"), highlighter: h.getBrushStyle(\"highlighter\") });\n };\n readBrush();\n const unsubBrush = chartRef.current?.subscribeBrush?.(readBrush);\n const readText = () => {\n const hc = chartRef.current;\n if (hc?.getTextStyle) setTextStyleState(hc.getTextStyle());\n };\n readText();\n const unsubText = chartRef.current?.subscribeTextStyle?.(readText);\n // Session tint: resolve the current on/off + per-session colors (a boolean\n // `true` means the defaults; an object carries custom colors).\n const readSessions = () => {\n const s = chartRef.current?.getSessions?.();\n setSessionsOn(!!s);\n if (s && typeof s === \"object\") {\n setSessionCols({ premarket: s.premarket ?? DEFAULT_SESSION_COLORS.premarket, afterhours: s.afterhours ?? DEFAULT_SESSION_COLORS.afterhours });\n } else {\n setSessionCols({ ...DEFAULT_SESSION_COLORS });\n }\n };\n readSessions();\n const unsubSess = chartRef.current?.subscribeSessions?.(readSessions);\n // Drawings management state (#35): lock/hide + template list.\n const h = chartRef.current;\n setDrawingsLocked(h?.getDrawingsLocked?.() ?? false);\n setDrawingsHidden(!(h?.getDrawingsVisible?.() ?? true));\n const unsubVis = h?.subscribeDrawingsVisible?.((visible) => setDrawingsHidden(!visible));\n const readTemplates = () => setTemplates(h?.listDrawingTemplates?.() ?? []);\n readTemplates();\n const unsubTpl = h?.subscribeDrawingTemplates?.(readTemplates);\n const onKey = (e: KeyboardEvent) => {\n if (e.key === \"Escape\") onClose();\n };\n document.addEventListener(\"keydown\", onKey);\n return () => {\n document.removeEventListener(\"keydown\", onKey);\n unsubWm?.();\n unsubBrush?.();\n unsubText?.();\n unsubSess?.();\n unsubVis?.();\n unsubTpl?.();\n };\n }, [open, chartRef, onClose]);\n\n if (!open || typeof document === \"undefined\") return null;\n\n const chart = () => chartRef.current?.chart?.() ?? null;\n\n // Watermark config is driven through the chart handle (no host wiring).\n const applyWm = (partial: Partial<WatermarkOptions>) => {\n chartRef.current?.setWatermark?.(partial);\n setWatermark((cur) => ({ ...cur, ...partial }));\n };\n\n const applyCandles = (up: string, down: string) => {\n chart()?.setStyles({\n candle: {\n bar: {\n upColor: up,\n upBorderColor: up,\n upWickColor: up,\n downColor: down,\n downBorderColor: down,\n downWickColor: down,\n },\n },\n });\n };\n const applyGrid = (color: string, show: boolean) => {\n chart()?.setStyles({ grid: { horizontal: { color, show }, vertical: { color, show } } });\n };\n const applyCrosshair = (color: string) => {\n chart()?.setStyles({ crosshair: { horizontal: { line: { color } }, vertical: { line: { color } } } });\n };\n const applyIndicator = (name: string, color: string) => {\n // Colour every line the same; KLineChart uses as many entries as the\n // indicator has and ignores the rest.\n chart()?.overrideIndicator({ name, styles: { lines: Array.from({ length: 6 }, () => ({ color })) } });\n };\n const applyIndicatorParams = (name: string, idx: number, value: number) => {\n setIndParams((m) => {\n const next = (m[name] ?? []).slice();\n next[idx] = value;\n chart()?.overrideIndicator({ name, calcParams: next });\n return { ...m, [name]: next };\n });\n };\n const applyBrush = (tool: BrushTool, style: BrushStyle) => {\n chartRef.current?.setBrushStyle?.(tool, style);\n setBrushStyles((m) => ({ ...m, [tool]: style }));\n };\n const applyText = (style: TextStyle) => {\n chartRef.current?.setTextStyle?.(style);\n setTextStyleState(style);\n };\n // Push session state to the chart: on → the custom color object (keeps colors);\n // off → false. Partial `next` merges over the current on/off + colors.\n const applySessions = (next: { on?: boolean; premarket?: string; afterhours?: string }) => {\n const on = next.on ?? sessionsOn;\n const cols = {\n premarket: next.premarket ?? sessionCols.premarket,\n afterhours: next.afterhours ?? sessionCols.afterhours,\n };\n setSessionsOn(on);\n setSessionCols(cols);\n const tint: SessionTint = on ? cols : false;\n chartRef.current?.setSessions?.(tint);\n };\n\n return createPortal(\n <div className=\"sonr-set-overlay\" role=\"dialog\" aria-modal=\"true\" aria-label={L.settings} onMouseDown={onClose}>\n <div className=\"sonr-set-panel\" onMouseDown={(e) => e.stopPropagation()}>\n <div className=\"sonr-set-head\">\n <span className=\"sonr-set-title\">{L.settings}</span>\n <button type=\"button\" className=\"sonr-set-close\" aria-label=\"Close settings\" onClick={onClose}>\n ✕\n </button>\n </div>\n <div className=\"sonr-set-body\">\n <nav className=\"sonr-set-nav\" aria-label=\"Settings sections\">\n {SECTION_KEYS.map((key) => (\n <button\n key={key}\n type=\"button\"\n className={`sonr-set-navbtn${section === key ? \" on\" : \"\"}`}\n aria-current={section === key}\n onClick={() => setSection(key)}\n >\n {L.settingsSections[key]}\n </button>\n ))}\n </nav>\n <div className=\"sonr-set-content\">\n {section === \"candles\" && (\n <>\n <Row label=\"Bullish (up)\">\n <input\n type=\"color\"\n value={candleUp}\n onChange={(e) => {\n setCandleUp(e.target.value);\n applyCandles(e.target.value, candleDown);\n }}\n />\n </Row>\n <Row label=\"Bearish (down)\">\n <input\n type=\"color\"\n value={candleDown}\n onChange={(e) => {\n setCandleDown(e.target.value);\n applyCandles(candleUp, e.target.value);\n }}\n />\n </Row>\n </>\n )}\n {section === \"indicators\" && (\n <>\n <p className=\"sonr-set-note\">An indicator must be active on the chart to change its settings — add it from the Indicators menu first.</p>\n {indicators.length === 0 && <p className=\"sonr-set-empty\">No indicators active.</p>}\n {indicators.map((name) => {\n const params = indParams[name];\n return (\n <div key={name} className=\"sonr-set-ind\">\n <Row label={name}>\n <input\n type=\"color\"\n value={hex(indColors[name], \"#a970ff\")}\n onChange={(e) => {\n const c = e.target.value;\n setIndColors((m) => ({ ...m, [name]: c }));\n applyIndicator(name, c);\n }}\n />\n </Row>\n {params && params.length > 0 && (\n <div className=\"sonr-set-inputs\" role=\"group\" aria-label={`${name} inputs`}>\n <span className=\"sonr-set-inputs-label\">Inputs</span>\n {params.map((p, idx) => (\n <input\n key={idx}\n type=\"number\"\n className=\"sonr-set-num\"\n aria-label={`${name} input ${idx + 1}`}\n value={p}\n onChange={(e) => {\n const v = e.target.valueAsNumber;\n if (Number.isNaN(v)) return;\n applyIndicatorParams(name, idx, v);\n }}\n />\n ))}\n </div>\n )}\n </div>\n );\n })}\n </>\n )}\n {section === \"grid\" && (\n <>\n <div className=\"sonr-set-subhead\">Watermark</div>\n <Row label=\"Show symbol\">\n <input type=\"checkbox\" checked={watermark.symbol} onChange={(e) => applyWm({ symbol: e.target.checked })} />\n </Row>\n <Row label=\"Show interval\">\n <input type=\"checkbox\" checked={watermark.interval} onChange={(e) => applyWm({ interval: e.target.checked })} />\n </Row>\n <Row label=\"Watermark color\">\n <input type=\"color\" value={hex(watermark.color, \"#e6ebe9\")} onChange={(e) => applyWm({ color: e.target.value })} />\n </Row>\n <Row label={`Watermark opacity (${Math.round(watermark.opacity * 100)}%)`}>\n <input\n type=\"range\"\n min=\"0.02\"\n max=\"0.5\"\n step=\"0.01\"\n value={watermark.opacity}\n onChange={(e) => applyWm({ opacity: Number(e.target.value) })}\n />\n </Row>\n <div className=\"sonr-set-subhead\">Grid &amp; Crosshair</div>\n <Row label=\"Show grid\">\n <input\n type=\"checkbox\"\n checked={gridShow}\n onChange={(e) => {\n setGridShow(e.target.checked);\n applyGrid(gridColor, e.target.checked);\n }}\n />\n </Row>\n <Row label=\"Grid color\">\n <input\n type=\"color\"\n value={gridColor}\n onChange={(e) => {\n setGridColor(e.target.value);\n applyGrid(e.target.value, gridShow);\n }}\n />\n </Row>\n <Row label=\"Crosshair color\">\n <input\n type=\"color\"\n value={crosshairColor}\n onChange={(e) => {\n setCrosshairColor(e.target.value);\n applyCrosshair(e.target.value);\n }}\n />\n </Row>\n </>\n )}\n {section === \"sessions\" && (\n <>\n <p className=\"sonr-set-note\">Extended-hours tint. Set the color and opacity for the pre-market and after-hours shading.</p>\n <Row label=\"Show sessions\">\n <input type=\"checkbox\" checked={sessionsOn} onChange={(e) => applySessions({ on: e.target.checked })} />\n </Row>\n {(() => {\n const pm = parseColor(sessionCols.premarket);\n return (\n <div className=\"sonr-set-ind\">\n <div className=\"sonr-set-subhead\">Pre-market</div>\n <Row label=\"Color\">\n <input type=\"color\" value={pm.hex} onChange={(e) => applySessions({ premarket: composeColor(e.target.value, pm.alpha) })} />\n </Row>\n <Row label={`Opacity (${Math.round(pm.alpha * 100)}%)`}>\n <input type=\"range\" min=\"0\" max=\"1\" step=\"0.01\" value={pm.alpha} onChange={(e) => applySessions({ premarket: composeColor(pm.hex, Number(e.target.value)) })} />\n </Row>\n </div>\n );\n })()}\n {(() => {\n const ah = parseColor(sessionCols.afterhours);\n return (\n <div className=\"sonr-set-ind\">\n <div className=\"sonr-set-subhead\">After-hours</div>\n <Row label=\"Color\">\n <input type=\"color\" value={ah.hex} onChange={(e) => applySessions({ afterhours: composeColor(e.target.value, ah.alpha) })} />\n </Row>\n <Row label={`Opacity (${Math.round(ah.alpha * 100)}%)`}>\n <input type=\"range\" min=\"0\" max=\"1\" step=\"0.01\" value={ah.alpha} onChange={(e) => applySessions({ afterhours: composeColor(ah.hex, Number(e.target.value)) })} />\n </Row>\n </div>\n );\n })()}\n </>\n )}\n {section === \"drawing\" && (\n <>\n <p className=\"sonr-set-note\">Stroke settings for the freehand brush &amp; highlighter and the text label — applied to what you draw next.</p>\n {BRUSH_TOOLS.map(({ tool, label }) => {\n const st = brushStyles[tool];\n const { hex: h, alpha } = parseColor(st.color);\n return (\n <div key={tool} className=\"sonr-set-ind\">\n <div className=\"sonr-set-subhead\">{label}</div>\n <Row label=\"Color\">\n <input type=\"color\" value={h} onChange={(e) => applyBrush(tool, { ...st, color: composeColor(e.target.value, alpha) })} />\n </Row>\n <Row label={`Opacity (${Math.round(alpha * 100)}%)`}>\n <input\n type=\"range\"\n min=\"0.1\"\n max=\"1\"\n step=\"0.05\"\n value={alpha}\n onChange={(e) => applyBrush(tool, { ...st, color: composeColor(h, Number(e.target.value)) })}\n />\n </Row>\n <Row label=\"Width (px)\">\n <input\n type=\"number\"\n min=\"1\"\n max=\"40\"\n value={st.size}\n onChange={(e) => applyBrush(tool, { ...st, size: Math.max(1, Math.min(40, Number(e.target.value) || 1)) })}\n />\n </Row>\n </div>\n );\n })}\n <div className=\"sonr-set-ind\">\n <div className=\"sonr-set-subhead\">Text</div>\n <Row label=\"Color\">\n <input type=\"color\" value={textStyle.color} onChange={(e) => applyText({ ...textStyle, color: e.target.value })} />\n </Row>\n <Row label=\"Size (px)\">\n <input\n type=\"number\"\n min=\"8\"\n max=\"48\"\n value={textStyle.size}\n onChange={(e) => applyText({ ...textStyle, size: Math.max(8, Math.min(48, Number(e.target.value) || 12)) })}\n />\n </Row>\n </div>\n </>\n )}\n {section === \"drawings\" && (\n <>\n <p className=\"sonr-set-note\">Manage all drawings at once, or save the current set as a reusable template.</p>\n <Row label=\"Lock all drawings\">\n <input\n type=\"checkbox\"\n checked={drawingsLocked}\n onChange={(e) => {\n setDrawingsLocked(e.target.checked);\n chartRef.current?.setDrawingsLocked?.(e.target.checked);\n }}\n />\n </Row>\n <Row label=\"Hide all drawings\">\n <input\n type=\"checkbox\"\n checked={drawingsHidden}\n onChange={(e) => {\n setDrawingsHidden(e.target.checked);\n chartRef.current?.setDrawingsVisible?.(!e.target.checked);\n }}\n />\n </Row>\n <button type=\"button\" className=\"sonr-tb-btn sonr-set-btn\" onClick={() => chartRef.current?.cloneLastDrawing?.()}>\n Clone last drawing\n </button>\n <div className=\"sonr-set-subhead\">Templates</div>\n <div className=\"sonr-set-tpl-save\">\n <input\n type=\"text\"\n className=\"sonr-search-input\"\n placeholder=\"Template name\"\n aria-label=\"Template name\"\n value={templateName}\n onChange={(e) => setTemplateName(e.target.value)}\n />\n <button\n type=\"button\"\n className=\"sonr-tb-btn sonr-set-btn\"\n disabled={!templateName.trim()}\n onClick={() => {\n const name = templateName.trim();\n if (!name) return;\n chartRef.current?.saveDrawingTemplate?.(name);\n setTemplateName(\"\");\n }}\n >\n Save\n </button>\n </div>\n {templates.length === 0 && <p className=\"sonr-set-empty\">No saved templates.</p>}\n {templates.map((name) => (\n <div key={name} className=\"sonr-set-tpl-row\">\n <span className=\"sonr-set-label\">{name}</span>\n <span className=\"sonr-set-tpl-actions\">\n <button type=\"button\" className=\"sonr-tb-btn sonr-set-btn\" onClick={() => chartRef.current?.applyDrawingTemplate?.(name)}>\n Apply\n </button>\n <button\n type=\"button\"\n className=\"sonr-tb-btn sonr-set-btn\"\n aria-label={`Delete ${name}`}\n onClick={() => chartRef.current?.deleteDrawingTemplate?.(name)}\n >\n Delete\n </button>\n </span>\n </div>\n ))}\n </>\n )}\n </div>\n </div>\n </div>\n </div>,\n document.body,\n );\n}\n","import { useEffect, useMemo, useState, type RefObject } from \"react\";\nimport type { KLineData } from \"klinecharts\";\nimport type { SonrChartHandle } from \"./SonrChart\";\nimport type { Interval } from \"./types\";\nimport { ensureDefaultStyles } from \"./defaultStyles\";\nimport { MarketStatus } from \"./MarketStatus\";\nimport { bareTicker, intervalLabel } from \"./watermark\";\nimport { mergeLabels, type Labels } from \"./labels\";\n\n// TradingView-style chart header (issue #45): one HTML line reading\n// `TICKER · interval · source` → the clickable market-status button → the live\n// O/H/L/C values, the change vs the prior bar's close, and volume. The OHLC\n// tracks the crosshair (falling back to the latest bar) via the chart handle's\n// subscribeHeaderBar; pair it with `legend={false}` on <SonrChart> so the\n// built-in canvas legend doesn't double up.\n\nexport interface ChartHeaderProps {\n chartRef: RefObject<SonrChartHandle>;\n symbol: string;\n interval: Interval;\n /** Data-source label shown after `symbol · interval` (e.g. \"Alpaca\"). */\n source?: string;\n /** Precision for O/H/L/C/change (defaults to 2). */\n pricePrecision?: number;\n labels?: Partial<Labels>;\n className?: string;\n}\n\nconst fmt = (v: number | undefined, prec: number): string =>\n (v ?? 0).toLocaleString(\"en-US\", { minimumFractionDigits: prec, maximumFractionDigits: prec });\n\nconst fmtVolume = (v: number | undefined): string => {\n const n = v ?? 0;\n if (n >= 1e9) return `${(n / 1e9).toFixed(2)}B`;\n if (n >= 1e6) return `${(n / 1e6).toFixed(2)}M`;\n if (n >= 1e3) return `${(n / 1e3).toFixed(2)}K`;\n return `${n}`;\n};\n\nexport function ChartHeader({ chartRef, symbol, interval, source, pricePrecision = 2, labels, className }: ChartHeaderProps) {\n useEffect(ensureDefaultStyles, []);\n const L = useMemo(() => mergeLabels(labels), [labels]);\n const [bar, setBar] = useState<{ current: KLineData | null; prev: KLineData | null }>({ current: null, prev: null });\n\n useEffect(() => {\n let cancelled = false;\n let unsub: (() => void) | undefined;\n const attach = () => {\n if (cancelled) return;\n const h = chartRef.current;\n if (h?.subscribeHeaderBar) {\n unsub = h.subscribeHeaderBar((current, prev) => setBar({ current, prev }));\n } else {\n setTimeout(attach, 50);\n }\n };\n attach();\n return () => {\n cancelled = true;\n unsub?.();\n };\n }, [chartRef]);\n\n const k = bar.current;\n const up = (k?.close ?? 0) >= (k?.open ?? 0);\n const dirClass = up ? \"sonr-hd-up\" : \"sonr-hd-down\";\n\n // Change vs the prior bar's close.\n const pc = bar.prev?.close;\n let change: { text: string; up: boolean } | null = null;\n if (typeof pc === \"number\" && pc !== 0 && typeof k?.close === \"number\") {\n const d = k.close - pc;\n const u = d >= 0;\n change = { up: u, text: `${u ? \"+\" : \"−\"}${fmt(Math.abs(d), pricePrecision)} (${u ? \"+\" : \"−\"}${(Math.abs(d / pc) * 100).toFixed(2)}%)` };\n }\n\n return (\n <div className={`sonr-hd${className ? ` ${className}` : \"\"}`} role=\"group\" aria-label={L.symbolInfo}>\n <span className=\"sonr-hd-sym\">\n {bareTicker(symbol).toUpperCase()} · {intervalLabel(interval)}\n {source ? ` · ${source}` : \"\"}\n </span>\n <MarketStatus labels={labels} />\n {k && (\n <span className=\"sonr-hd-ohlc\">\n <span className=\"sonr-hd-cell\">\n <span className=\"sonr-hd-k\">O</span>\n <span className={dirClass}>{fmt(k.open, pricePrecision)}</span>\n </span>\n <span className=\"sonr-hd-cell\">\n <span className=\"sonr-hd-k\">H</span>\n <span className={dirClass}>{fmt(k.high, pricePrecision)}</span>\n </span>\n <span className=\"sonr-hd-cell\">\n <span className=\"sonr-hd-k\">L</span>\n <span className={dirClass}>{fmt(k.low, pricePrecision)}</span>\n </span>\n <span className=\"sonr-hd-cell\">\n <span className=\"sonr-hd-k\">C</span>\n <span className={dirClass}>{fmt(k.close, pricePrecision)}</span>\n </span>\n {change && <span className={change.up ? \"sonr-hd-up\" : \"sonr-hd-down\"}>{change.text}</span>}\n <span className=\"sonr-hd-cell\">\n <span className=\"sonr-hd-k\">V</span>\n <span className=\"sonr-hd-v\">{fmtVolume(k.volume)}</span>\n </span>\n </span>\n )}\n </div>\n );\n}\n","import { useEffect, useMemo, useState } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { ensureDefaultStyles } from \"./defaultStyles\";\nimport { useDropdown } from \"./useDropdown\";\nimport { mergeLabels, type Labels } from \"./labels\";\n\n// Market-status badge + detail popover (issue #45): a small pill reporting the\n// current US-equities session phase (pre-market / open / after-hours / closed);\n// clicking it opens a popover with a plain-language countdown to the next\n// transition, a session timeline for the day, and the exchange timezone —\n// modeled on TradingView's market-status popover.\n//\n// All session boundaries are wall-clock in America/New_York, derived from the\n// epoch ms via Intl.DateTimeFormat (so EST/EDT is applied for us, no hand-rolled\n// offsets). Weekends read as \"closed\"; holidays are NOT modeled.\n\n/** The four US-equities session phases. */\nexport type MarketPhase = \"pre\" | \"open\" | \"after\" | \"closed\";\n\n// Minutes-since-ET-midnight boundaries for the regular week.\nconst PRE_OPEN = 4 * 60; // 04:00 ET — pre-market opens\nconst REGULAR_OPEN = 9 * 60 + 30; // 09:30 ET — regular session opens\nconst REGULAR_CLOSE = 16 * 60; // 16:00 ET — regular session closes\nconst AFTER_CLOSE = 20 * 60; // 20:00 ET — after-hours ends\nconst DAY_MIN = 24 * 60;\nconst DAYS = [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"];\n\nconst ET_FORMAT = new Intl.DateTimeFormat(\"en-US\", {\n timeZone: \"America/New_York\",\n weekday: \"short\",\n hour: \"2-digit\",\n minute: \"2-digit\",\n hourCycle: \"h23\",\n});\nconst ET_OFFSET = new Intl.DateTimeFormat(\"en-US\", { timeZone: \"America/New_York\", timeZoneName: \"shortOffset\" });\n\n/** ET wall-clock parts for an instant. */\nexport function etClock(nowMs: number): { weekday: string; minutesOfDay: number } {\n let weekday = \"\";\n let hour = 0;\n let minute = 0;\n for (const part of ET_FORMAT.formatToParts(new Date(nowMs))) {\n if (part.type === \"weekday\") weekday = part.value;\n else if (part.type === \"hour\") hour = Number(part.value) % 24;\n else if (part.type === \"minute\") minute = Number(part.value);\n }\n return { weekday, minutesOfDay: hour * 60 + minute };\n}\n\n/**\n * Classify an instant into a US-equities session phase, evaluated in ET.\n * Weekends are \"closed\"; holidays are not modeled. Pure.\n */\nexport function marketStatus(nowMs: number): MarketPhase {\n const { weekday, minutesOfDay } = etClock(nowMs);\n if (weekday === \"Sat\" || weekday === \"Sun\") return \"closed\";\n if (minutesOfDay >= PRE_OPEN && minutesOfDay < REGULAR_OPEN) return \"pre\";\n if (minutesOfDay >= REGULAR_OPEN && minutesOfDay < REGULAR_CLOSE) return \"open\";\n if (minutesOfDay >= REGULAR_CLOSE && minutesOfDay < AFTER_CLOSE) return \"after\";\n return \"closed\";\n}\n\nconst isWeekdayIdx = (i: number): boolean => i >= 1 && i <= 5;\n\n/** Minutes from now until the regular session next opens (skips weekends). */\nfunction minutesToNextOpen(weekday: string, minutesOfDay: number): number {\n const idx = DAYS.indexOf(weekday);\n if (isWeekdayIdx(idx) && minutesOfDay < REGULAR_OPEN) return REGULAR_OPEN - minutesOfDay;\n let minutes = DAY_MIN - minutesOfDay; // to next ET midnight\n let d = (idx + 1) % 7;\n while (!isWeekdayIdx(d)) {\n minutes += DAY_MIN;\n d = (d + 1) % 7;\n }\n return minutes + REGULAR_OPEN;\n}\n\n/** Whole minutes from now until the next boundary that ends the current phase. */\nexport function minutesToNextBoundary(nowMs: number): number {\n const { weekday, minutesOfDay } = etClock(nowMs);\n switch (marketStatus(nowMs)) {\n case \"pre\":\n return REGULAR_OPEN - minutesOfDay;\n case \"open\":\n return REGULAR_CLOSE - minutesOfDay;\n case \"after\":\n return AFTER_CLOSE - minutesOfDay;\n case \"closed\":\n return minutesToNextOpen(weekday, minutesOfDay);\n }\n}\n\n/** \"5 hours and 56 minutes\", \"56 minutes\", \"2 days, 3 hours and 1 minute\". */\nexport function formatDuration(totalMinutes: number): string {\n const mins = Math.max(0, Math.round(totalMinutes));\n const d = Math.floor(mins / DAY_MIN);\n const h = Math.floor((mins % DAY_MIN) / 60);\n const m = mins % 60;\n const parts: string[] = [];\n if (d) parts.push(`${d} day${d !== 1 ? \"s\" : \"\"}`);\n if (h) parts.push(`${h} hour${h !== 1 ? \"s\" : \"\"}`);\n if (m || parts.length === 0) parts.push(`${m} minute${m !== 1 ? \"s\" : \"\"}`);\n if (parts.length === 1) return parts[0];\n return `${parts.slice(0, -1).join(\", \")} and ${parts[parts.length - 1]}`;\n}\n\n/** 0..1 position of `now` across the extended trading day (04:00–20:00 ET). */\nexport function sessionProgress(minutesOfDay: number): number {\n return Math.min(1, Math.max(0, (minutesOfDay - PRE_OPEN) / (AFTER_CLOSE - PRE_OPEN)));\n}\n\n/** \"New York (UTC-4)\" — the exchange timezone + current UTC offset for an instant. */\nexport function exchangeTimezone(nowMs: number): string {\n const part = ET_OFFSET.formatToParts(new Date(nowMs)).find((p) => p.type === \"timeZoneName\");\n return `New York (${(part?.value ?? \"GMT-5\").replace(\"GMT\", \"UTC\")})`;\n}\n\nfunction phaseText(phase: MarketPhase, L: Labels): string {\n switch (phase) {\n case \"pre\":\n return L.marketPre;\n case \"open\":\n return L.marketOpen;\n case \"after\":\n return L.marketAfter;\n case \"closed\":\n return L.marketClosed;\n }\n}\n\n// A plain-language message split into a lead and an emphasized countdown clause.\nfunction phaseMessage(phase: MarketPhase, dur: string): { lead: string; strong: string } {\n switch (phase) {\n case \"open\":\n return { lead: \"All's well — market is open. \", strong: `It'll close in ${dur}.` };\n case \"pre\":\n return { lead: \"Pre-market is open. \", strong: `Regular trading opens in ${dur}.` };\n case \"after\":\n return { lead: \"After-hours is open. \", strong: `Trading closes in ${dur}.` };\n case \"closed\":\n return { lead: \"Market is closed. \", strong: `It opens in ${dur}.` };\n }\n}\n\nexport interface MarketStatusProps {\n /** Fixed instant (epoch ms) to classify. Omit to track the live clock (the\n * badge re-evaluates every 30s). */\n now?: number;\n labels?: Partial<Labels>;\n className?: string;\n}\n\n/**\n * Market-status pill (colored dot + phase). Click it to open a popover with a\n * countdown to the next session transition, a day timeline, and the exchange\n * timezone. Uncontrolled clock by default; pass `now` to pin a fixed instant.\n */\nexport function MarketStatus({ now, labels, className }: MarketStatusProps) {\n useEffect(ensureDefaultStyles, []);\n const L = useMemo(() => mergeLabels(labels), [labels]);\n const [tick, setTick] = useState<number>(() => Date.now());\n const { open, toggle, pos, triggerRef, panelRef } = useDropdown();\n\n useEffect(() => {\n if (now !== undefined) return;\n const id = setInterval(() => setTick(Date.now()), 30_000);\n return () => clearInterval(id);\n }, [now]);\n\n const at = now ?? tick;\n const phase = marketStatus(at);\n const text = phaseText(phase, L);\n const { weekday, minutesOfDay } = etClock(at);\n const message = phaseMessage(phase, formatDuration(minutesToNextBoundary(at)));\n const progress = sessionProgress(minutesOfDay);\n const pct = `${(progress * 100).toFixed(1)}%`;\n\n return (\n <>\n <button\n ref={triggerRef}\n type=\"button\"\n className={`sonr-mkt sonr-mkt-${phase}${className ? ` ${className}` : \"\"}`}\n aria-haspopup=\"dialog\"\n aria-expanded={open}\n aria-label={text}\n title={text}\n onClick={toggle}\n >\n <span className=\"sonr-mkt-dot\" aria-hidden />\n <span className=\"sonr-mkt-label\">{text}</span>\n </button>\n {open &&\n typeof document !== \"undefined\" &&\n createPortal(\n <div\n ref={panelRef}\n className={`sonr-mkt-pop sonr-mkt-${phase}`}\n role=\"dialog\"\n aria-label={text}\n style={{ position: \"fixed\", top: pos.top, left: pos.left }}\n >\n <div className=\"sonr-mkt-pop-head\">\n <span className=\"sonr-mkt-dot\" aria-hidden />\n {text}\n </div>\n <p className=\"sonr-mkt-pop-msg\">\n {message.lead}\n <strong>{message.strong}</strong>\n </p>\n <div className=\"sonr-mkt-timeline\">\n <span className=\"sonr-mkt-day\">{(weekday || \"\").toUpperCase()}</span>\n <div className=\"sonr-mkt-track\">\n <div className=\"sonr-mkt-fill\" style={{ width: pct }} />\n <div className=\"sonr-mkt-handle\" style={{ left: pct }} />\n </div>\n <div className=\"sonr-mkt-ticks\">\n <span>04:00</span>\n <span>20:00</span>\n </div>\n </div>\n <div className=\"sonr-mkt-tz\">\n {L.marketTimezone}: {exchangeTimezone(at)}\n </div>\n </div>,\n document.body,\n )}\n </>\n );\n}\n","import { useEffect, useMemo, type RefObject } from \"react\";\nimport type { SonrChartHandle } from \"./SonrChart\";\nimport { ensureDefaultStyles } from \"./defaultStyles\";\nimport { mergeLabels, type Labels } from \"./labels\";\nimport { ZoomInIcon, ZoomOutIcon, FitIcon, RealtimeIcon } from \"./icons\";\n\n// Nav / control bar (issue #45): a small horizontal cluster of icon buttons that\n// live over the bottom-right of the chart — zoom out, zoom in, fit-all, and jump\n// to realtime. Every action is a one-shot call on the chart handle (no local\n// state, no subscription), so the bar is a pure control surface. Icons come from\n// the shared homegrown set (./icons).\n\nexport function NavControlBar({\n chartRef,\n labels,\n className,\n}: {\n chartRef: RefObject<SonrChartHandle>;\n labels?: Partial<Labels>;\n className?: string;\n}) {\n useEffect(ensureDefaultStyles, []);\n const L = useMemo(() => mergeLabels(labels), [labels]);\n\n // These keys are new to Labels — listed in labelKeys so the lead adds them to\n // the Labels type + DEFAULT_LABELS (with the English defaults given there).\n const zoomOutLabel = L.zoomOut;\n const zoomInLabel = L.zoomIn;\n const fitLabel = L.fitContent;\n const realtimeLabel = L.goToRealtime;\n\n return (\n <div className={className ?? \"sonr-navbar\"} role=\"group\" aria-label={L.navControls}>\n <button\n type=\"button\"\n className=\"sonr-nav-btn\"\n title={zoomOutLabel}\n aria-label={zoomOutLabel}\n onClick={() => chartRef.current?.zoomOut?.()}\n >\n <ZoomOutIcon />\n </button>\n <button\n type=\"button\"\n className=\"sonr-nav-btn\"\n title={zoomInLabel}\n aria-label={zoomInLabel}\n onClick={() => chartRef.current?.zoomIn?.()}\n >\n <ZoomInIcon />\n </button>\n <button\n type=\"button\"\n className=\"sonr-nav-btn\"\n title={fitLabel}\n aria-label={fitLabel}\n onClick={() => chartRef.current?.setVisibleDuration?.(Infinity)}\n >\n <FitIcon />\n </button>\n <button\n type=\"button\"\n className=\"sonr-nav-btn\"\n title={realtimeLabel}\n aria-label={realtimeLabel}\n onClick={() => chartRef.current?.scrollToRealTime?.()}\n >\n <RealtimeIcon />\n </button>\n </div>\n );\n}\n","import { useCallback, useEffect, useRef, useState, type RefObject } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport type { SonrChartHandle } from \"./SonrChart\";\nimport type { ChartState } from \"./types\";\nimport { ensureDefaultStyles } from \"./defaultStyles\";\nimport { mergeLabels, type Labels } from \"./labels\";\n\n// Save / Load dialog for chart state (issue #15). A portal dialog (modeled on\n// ConfirmDialog) with two textareas: the top one shows the current chart state\n// as pretty-printed JSON with a Copy button (and an optional Download), and the\n// bottom one takes pasted JSON that a Load button validates and hands to\n// importState. Escape or an overlay click closes; parse/shape errors surface\n// inline and never call importState. Class-based styling (`.sonr-sl-*`) with\n// neutral defaults injected by ensureDefaultStyles.\n\n// A user-defined type guard that narrows unknown JSON to ChartState using only\n// runtime checks (no `as` casts): the `in` operator narrows the object so its\n// fields can be read as `unknown`. importState is itself defensive about the\n// rest of the shape, so gating on `version === 1` is enough to reject unrelated\n// JSON while accepting any state this library produced.\nexport function isChartState(value: unknown): value is ChartState {\n if (typeof value !== \"object\" || value === null) return false;\n if (!(\"version\" in value)) return false;\n return value.version === 1;\n}\n\nexport function SaveLoadDialog({\n chartRef,\n open,\n onClose,\n labels,\n}: {\n chartRef: RefObject<SonrChartHandle>;\n open: boolean;\n onClose: () => void;\n labels?: Partial<Labels>;\n}) {\n useEffect(ensureDefaultStyles, []);\n const L = mergeLabels(labels);\n const copyRef = useRef<HTMLButtonElement>(null);\n const [exported, setExported] = useState(\"\");\n const [pasted, setPasted] = useState(\"\");\n const [error, setError] = useState<string | null>(null);\n const [copied, setCopied] = useState(false);\n\n // Read the live state each time the dialog opens; reset the paste side.\n useEffect(() => {\n if (!open) return;\n const state = chartRef.current?.exportState?.();\n setExported(state ? JSON.stringify(state, null, 2) : \"\");\n setPasted(\"\");\n setError(null);\n setCopied(false);\n copyRef.current?.focus();\n const onKey = (e: KeyboardEvent) => {\n if (e.key === \"Escape\") {\n e.stopPropagation();\n onClose();\n }\n };\n document.addEventListener(\"keydown\", onKey, true);\n return () => document.removeEventListener(\"keydown\", onKey, true);\n }, [open, chartRef, onClose]);\n\n const onCopy = useCallback(() => {\n void navigator.clipboard?.writeText?.(exported);\n setCopied(true);\n }, [exported]);\n\n const onDownload = useCallback(() => {\n if (typeof URL === \"undefined\" || !URL.createObjectURL) return;\n const blob = new Blob([exported], { type: \"application/json\" });\n const url = URL.createObjectURL(blob);\n const a = document.createElement(\"a\");\n a.href = url;\n a.download = \"chart-state.json\";\n a.click();\n URL.revokeObjectURL(url);\n }, [exported]);\n\n const onLoad = useCallback(() => {\n let parsed: unknown;\n try {\n parsed = JSON.parse(pasted);\n } catch {\n setError(L.saveLoadError ?? \"Invalid JSON — could not load.\");\n return;\n }\n if (!isChartState(parsed)) {\n setError(L.saveLoadError ?? \"Invalid JSON — could not load.\");\n return;\n }\n setError(null);\n chartRef.current?.importState?.(parsed);\n onClose();\n }, [pasted, chartRef, onClose, L.saveLoadError]);\n\n if (!open || typeof document === \"undefined\") return null;\n\n const title = L.saveLoad ?? \"Save / Load\";\n\n return createPortal(\n <div className=\"sonr-sl-overlay\" onMouseDown={onClose}>\n <div\n className=\"sonr-sl-panel\"\n role=\"dialog\"\n aria-modal=\"true\"\n aria-label={title}\n onMouseDown={(e) => e.stopPropagation()}\n >\n <div className=\"sonr-sl-head\">\n <span className=\"sonr-sl-title\">{title}</span>\n <button\n type=\"button\"\n className=\"sonr-sl-close\"\n aria-label={L.saveLoadClose ?? \"Close\"}\n onClick={onClose}\n >\n ✕\n </button>\n </div>\n <div className=\"sonr-sl-body\">\n <section className=\"sonr-sl-section\">\n <div className=\"sonr-sl-section-head\">\n <label className=\"sonr-sl-label\" htmlFor=\"sonr-sl-export\">\n {L.saveLoadExportLabel ?? \"Current chart state\"}\n </label>\n <span className=\"sonr-sl-section-actions\">\n <button ref={copyRef} type=\"button\" className=\"sonr-sl-btn\" onClick={onCopy}>\n {copied ? L.saveLoadCopied ?? \"Copied\" : L.saveLoadCopy ?? \"Copy\"}\n </button>\n <button type=\"button\" className=\"sonr-sl-btn\" onClick={onDownload}>\n {L.saveLoadDownload ?? \"Download\"}\n </button>\n </span>\n </div>\n <textarea\n id=\"sonr-sl-export\"\n className=\"sonr-sl-textarea\"\n readOnly\n spellCheck={false}\n value={exported}\n aria-label={L.saveLoadExportLabel ?? \"Current chart state\"}\n />\n </section>\n <section className=\"sonr-sl-section\">\n <label className=\"sonr-sl-label\" htmlFor=\"sonr-sl-import\">\n {L.saveLoadImportLabel ?? \"Paste chart state to load\"}\n </label>\n <textarea\n id=\"sonr-sl-import\"\n className=\"sonr-sl-textarea\"\n spellCheck={false}\n value={pasted}\n placeholder=\"{ ... }\"\n aria-label={L.saveLoadImportLabel ?? \"Paste chart state to load\"}\n onChange={(e) => {\n setPasted(e.target.value);\n if (error) setError(null);\n }}\n />\n {error && (\n <p className=\"sonr-sl-error\" role=\"alert\">\n {error}\n </p>\n )}\n <div className=\"sonr-sl-actions\">\n <button type=\"button\" className=\"sonr-sl-btn sonr-sl-load\" onClick={onLoad}>\n {L.saveLoadLoad ?? \"Load\"}\n </button>\n </div>\n </section>\n </div>\n </div>\n </div>,\n document.body,\n );\n}\n","import { useEffect, useRef, useState, type RefObject } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { ensureDefaultStyles } from \"./defaultStyles\";\nimport type { SonrChartHandle } from \"./SonrChart\";\nimport { mergeLabels, type Labels } from \"./labels\";\n\n// Go-to-date dialog (issue #45): a small portal dialog with a\n// <input type=\"datetime-local\"> + a Go button that scrolls the chart to the\n// chosen moment. Modeled on ConfirmDialog — portal-rendered so it escapes any\n// overflow clip; Escape or an overlay click cancels, and the input is focused\n// on open so the user can type/pick immediately. Styling is class-based\n// (`.sonr-gotodate-*`) with neutral defaults injected by ensureDefaultStyles.\n\n// Parse a native datetime-local value (\"YYYY-MM-DDTHH:mm[:ss]\") into epoch ms.\n// The input yields local wall-clock time with no zone, so Date's local parsing\n// is the intended interpretation. Returns null for an empty/unparseable value.\nexport function parseLocalDateTime(value: string): number | null {\n if (!value) return null;\n const ms = new Date(value).getTime();\n return Number.isFinite(ms) ? ms : null;\n}\n\nexport function GoToDateDialog({\n chartRef,\n open,\n onClose,\n labels,\n}: {\n chartRef: RefObject<SonrChartHandle>;\n open: boolean;\n onClose: () => void;\n labels?: Partial<Labels>;\n}) {\n useEffect(ensureDefaultStyles, []);\n const L = mergeLabels(labels);\n const inputRef = useRef<HTMLInputElement>(null);\n const [value, setValue] = useState(\"\");\n\n useEffect(() => {\n if (!open) return;\n inputRef.current?.focus();\n const onKey = (e: KeyboardEvent) => {\n if (e.key === \"Escape\") {\n e.stopPropagation();\n onClose();\n }\n };\n document.addEventListener(\"keydown\", onKey, true);\n return () => document.removeEventListener(\"keydown\", onKey, true);\n }, [open, onClose]);\n\n // Reset the field each time the dialog is reopened.\n useEffect(() => {\n if (open) setValue(\"\");\n }, [open]);\n\n if (!open || typeof document === \"undefined\") return null;\n\n const submit = () => {\n const ms = parseLocalDateTime(value);\n if (ms === null) return; // nothing chosen — keep the dialog open\n chartRef.current?.scrollToTimestamp?.(ms);\n onClose();\n };\n\n const title = L.goToDate ?? \"Go to date\";\n const goLabel = L.goToDateGo ?? \"Go\";\n\n return createPortal(\n <div className=\"sonr-gotodate-overlay\" onMouseDown={onClose}>\n <div\n className=\"sonr-gotodate\"\n role=\"dialog\"\n aria-modal=\"true\"\n aria-label={title}\n onMouseDown={(e) => e.stopPropagation()}\n >\n <div className=\"sonr-gotodate-title\">{title}</div>\n <form\n className=\"sonr-gotodate-form\"\n onSubmit={(e) => {\n e.preventDefault();\n submit();\n }}\n >\n <input\n ref={inputRef}\n type=\"datetime-local\"\n className=\"sonr-gotodate-input\"\n aria-label={title}\n value={value}\n onChange={(e) => setValue(e.target.value)}\n />\n <button type=\"submit\" className=\"sonr-gotodate-go\" disabled={!value}>\n {goLabel}\n </button>\n </form>\n </div>\n </div>,\n document.body,\n );\n}\n","import { useEffect, useRef, useState, useMemo } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport type { DataSource, SymbolInfo } from \"./types\";\nimport { ensureDefaultStyles } from \"./defaultStyles\";\nimport { etClock, exchangeTimezone } from \"./MarketStatus\";\nimport { mergeLabels, type Labels } from \"./labels\";\n\n// Symbol-info dialog (issue #45), modelled on TradingView's: the instrument's\n// reference metadata — ticker + name, then Type / Point value / Listed exchange\n// / Exchange / Tick size, and a Session timeline with the exchange timezone. It\n// deliberately carries no live price (that's on the chart). Ticker/name/tick\n// size come from dataSource.resolveSymbol; the rest are host-supplied props with\n// US-equity defaults. Body-portaled; Escape / overlay-click closes.\n\n// Extended US-equities session window (04:00–20:00 ET) drawn on a 24h day.\nconst DAY = 24 * 60;\nconst EXT_OPEN = 4 * 60;\nconst EXT_CLOSE = 20 * 60;\n\nexport function SymbolInfoDialog({\n dataSource,\n symbol,\n open,\n onClose,\n labels,\n type = \"Stock\",\n exchange = \"—\",\n listedExchange = \"—\",\n pointValue = 1,\n tickSize,\n now,\n}: {\n dataSource: DataSource;\n symbol: string;\n open: boolean;\n onClose: () => void;\n labels?: Partial<Labels>;\n /** Instrument type (default \"Stock\"). */\n type?: string;\n /** Trading venue label (e.g. \"Alpaca\"). */\n exchange?: string;\n /** Primary listing exchange, if known (default \"—\"). */\n listedExchange?: string;\n /** Contract point value (default 1 for cash equities). */\n pointValue?: number;\n /** Minimum price increment. Defaults to 10^-pricePrecision from resolveSymbol. */\n tickSize?: number;\n /** Fixed instant for the session timeline (defaults to the live clock). */\n now?: number;\n}) {\n useEffect(ensureDefaultStyles, []);\n const L = useMemo(() => mergeLabels(labels), [labels]);\n const closeRef = useRef<HTMLButtonElement>(null);\n const reqId = useRef(0);\n const [info, setInfo] = useState<SymbolInfo | null>(null);\n\n // Resolve on open; stale/late responses dropped via reqId + a cancel flag.\n useEffect(() => {\n if (!open) return;\n const resolve = dataSource.resolveSymbol;\n setInfo(null);\n if (typeof resolve !== \"function\") {\n setInfo({ ticker: symbol });\n return;\n }\n const id = ++reqId.current;\n let cancelled = false;\n resolve(symbol)\n .then((res) => {\n if (cancelled || id !== reqId.current) return;\n setInfo(res ?? { ticker: symbol });\n })\n .catch(() => {\n if (cancelled || id !== reqId.current) return;\n setInfo({ ticker: symbol });\n });\n return () => {\n cancelled = true;\n };\n }, [open, symbol, dataSource]);\n\n useEffect(() => {\n if (!open) return;\n closeRef.current?.focus();\n const onKey = (e: KeyboardEvent) => {\n if (e.key === \"Escape\") {\n e.stopPropagation();\n onClose();\n }\n };\n document.addEventListener(\"keydown\", onKey, true);\n return () => document.removeEventListener(\"keydown\", onKey, true);\n }, [open, onClose]);\n\n if (!open || typeof document === \"undefined\") return null;\n\n const ticker = info?.ticker ?? symbol;\n const name = info?.name;\n const prec = info?.pricePrecision ?? 2;\n const tick = tickSize ?? 1 / 10 ** prec;\n const tickText = tick.toFixed(Math.max(prec, 1));\n\n const at = now ?? Date.now();\n const { weekday, minutesOfDay } = etClock(at);\n const pct = (m: number) => `${((m / DAY) * 100).toFixed(2)}%`;\n\n // Listed-exchange cell: the exchange logo (when known) beside the label (#39).\n const exchangeCell = info?.exchangeLogo ? (\n <span className=\"sonr-syminfo-exwrap\">\n <img className=\"sonr-syminfo-exlogo\" src={info.exchangeLogo} alt=\"\" aria-hidden width={16} height={16} />\n {listedExchange}\n </span>\n ) : (\n listedExchange\n );\n\n const Field = ({ label, value }: { label: string; value: React.ReactNode }) => (\n <div className=\"sonr-syminfo-field\">\n <div className=\"sonr-syminfo-flabel\">{label}</div>\n <div className=\"sonr-syminfo-fvalue\">{value}</div>\n </div>\n );\n\n return createPortal(\n <div className=\"sonr-syminfo-overlay\" onMouseDown={onClose}>\n <div className=\"sonr-syminfo\" role=\"dialog\" aria-modal=\"true\" aria-label={L.symbolInfo} onMouseDown={(e) => e.stopPropagation()}>\n <div className=\"sonr-syminfo-head\">\n <span className=\"sonr-syminfo-title\">{L.symbolInfo}</span>\n <button ref={closeRef} type=\"button\" className=\"sonr-syminfo-close\" aria-label={L.close} onClick={onClose}>\n ✕\n </button>\n </div>\n <div className=\"sonr-syminfo-body\">\n {info === null ? (\n <div className=\"sonr-syminfo-msg\" role=\"status\">\n {L.symbolInfoLoading}\n </div>\n ) : (\n <>\n <div className=\"sonr-syminfo-sym\">\n {info.logo ? (\n <img className=\"sonr-syminfo-logo\" src={info.logo} alt=\"\" aria-hidden width={28} height={28} />\n ) : null}\n <span className=\"sonr-syminfo-ticker\">{ticker}</span>\n {name ? <span className=\"sonr-syminfo-name\">{name}</span> : null}\n </div>\n {info.description ? <div className=\"sonr-syminfo-desc\">{info.description}</div> : null}\n <div className=\"sonr-syminfo-grid\">\n <Field label={L.symbolInfoType} value={type} />\n <Field label={L.symbolInfoPointValue} value={pointValue} />\n <Field label={L.symbolInfoListedExchange} value={exchangeCell} />\n <Field label={L.symbolInfoExchange} value={exchange} />\n <Field label={L.symbolInfoTickSize} value={tickText} />\n {info.currency ? <Field label={L.symbolInfoCurrency} value={info.currency} /> : null}\n {info.unit ? <Field label={L.symbolInfoUnit} value={info.unit} /> : null}\n {info.priceSource ? <Field label={L.symbolInfoPriceSource} value={info.priceSource} /> : null}\n </div>\n <div className=\"sonr-syminfo-session\">\n <div className=\"sonr-syminfo-flabel\">{L.symbolInfoSession}</div>\n <div className=\"sonr-syminfo-timeline\">\n <span className=\"sonr-syminfo-day\">{(weekday || \"\").toUpperCase()}</span>\n <div className=\"sonr-syminfo-track\">\n <div className=\"sonr-syminfo-band\" style={{ left: pct(EXT_OPEN), width: pct(EXT_CLOSE - EXT_OPEN) }} />\n <div className=\"sonr-syminfo-now\" style={{ left: pct(minutesOfDay) }} />\n </div>\n <div className=\"sonr-syminfo-ticks\">\n <span>00:00</span>\n <span>12:00</span>\n <span>24:00</span>\n </div>\n </div>\n <div className=\"sonr-syminfo-tz\">\n {L.marketTimezone}: {exchangeTimezone(at)}\n </div>\n </div>\n </>\n )}\n </div>\n </div>\n </div>,\n document.body,\n );\n}\n","import { useEffect, type ReactNode } from \"react\";\nimport { ensureDefaultStyles } from \"./defaultStyles\";\n\n// Logo / branding placement (issue #45): a subtle, host-supplied brand mark\n// pinned to a chart corner (TradingView-style). Provide an image via `src` or\n// any content via `children` (a wordmark, an inline SVG, …). It's decorative by\n// default — `pointer-events` are off so it never intercepts chart interaction —\n// unless an `href` is given, which re-enables the link. Mount it inside the\n// chart's positioned container.\n\nexport type BrandCorner = \"top-left\" | \"top-right\" | \"bottom-left\" | \"bottom-right\";\n\nexport interface BrandMarkProps {\n /** Image source for a logo, rendered as an <img> (sized by `height`). */\n src?: string;\n alt?: string;\n /** Brand content when not using `src` — a wordmark, inline SVG, etc. */\n children?: ReactNode;\n /** Corner placement within the positioned parent. Default \"bottom-left\". */\n position?: BrandCorner;\n /** Mark opacity (kept subtle by default). */\n opacity?: number;\n /** Optional link — wraps the mark in an anchor (opens in a new tab) and\n * re-enables pointer events for it. */\n href?: string;\n /** Logo image height in px (only when `src` is set). Default 18. */\n height?: number;\n className?: string;\n}\n\nexport function BrandMark({ src, alt = \"\", children, position = \"bottom-left\", opacity = 0.5, href, height = 18, className }: BrandMarkProps) {\n useEffect(ensureDefaultStyles, []);\n const content = src ? <img className=\"sonr-brand-img\" src={src} alt={alt} style={{ height }} /> : children;\n return (\n <div className={`sonr-brand sonr-brand-${position}${className ? ` ${className}` : \"\"}`} style={{ opacity }}>\n {href ? (\n <a className=\"sonr-brand-link\" href={href} target=\"_blank\" rel=\"noopener noreferrer\">\n {content}\n </a>\n ) : (\n content\n )}\n </div>\n );\n}\n","import { useEffect, type ButtonHTMLAttributes, type ReactNode } from \"react\";\nimport { ensureDefaultStyles } from \"./defaultStyles\";\n\n// A consistently-styled toolbar button (issue #18) for custom header controls.\n// It carries the same `sonr-*-btn` class the built-in toolbars use, so custom\n// buttons match the rest of the chrome; the host styles everything via those\n// classes (custom CSS) and drops these into <ChartToolbar>'s children slot.\nexport function ToolbarButton({\n active,\n children,\n className,\n ...rest\n}: {\n active?: boolean;\n children: ReactNode;\n} & ButtonHTMLAttributes<HTMLButtonElement>) {\n useEffect(ensureDefaultStyles, []);\n return (\n <button\n type=\"button\"\n className={`sonr-tb-btn${active ? \" on\" : \"\"}${className ? \" \" + className : \"\"}`}\n aria-pressed={active}\n {...rest}\n >\n {children}\n </button>\n );\n}\n","// CSS custom-property (CSS variable) read/write helpers (issue #46).\n//\n// Small SSR-safe utilities so a host can drive chart-related CSS variables\n// without hand-rolling getComputedStyle/setProperty and the `--` prefixing.\n// Both default their target to `document.documentElement` (`:root`).\n\n// Ensure a leading `--` so callers can pass either \"brand\" or \"--brand\".\nfunction toVar(name: string): string {\n return name.startsWith(\"--\") ? name : `--${name}`;\n}\n\n/**\n * Read a CSS custom property's computed value. Returns \"\" when the variable is\n * unset or when there is no `document` (SSR). `name` may include or omit `--`.\n */\nexport function getCSSCustomProperty(name: string, el?: Element | null): string {\n if (typeof document === \"undefined\") return \"\";\n const target = el ?? document.documentElement;\n if (!target) return \"\";\n const prop = toVar(name);\n const computed = getComputedStyle(target).getPropertyValue(prop).trim();\n if (computed) return computed;\n // Fall back to an inline declaration (jsdom's getComputedStyle doesn't always\n // surface inline custom properties; real browsers fold them into `computed`).\n const inline = (target as HTMLElement).style?.getPropertyValue(prop);\n return inline ? inline.trim() : \"\";\n}\n\n/**\n * Write a CSS custom property (inline `style`). No-op under SSR. `name` may\n * include or omit `--`. Defaults to `:root` (document.documentElement).\n */\nexport function setCSSCustomProperty(name: string, value: string, el?: HTMLElement | null): void {\n if (typeof document === \"undefined\") return;\n const target = el ?? document.documentElement;\n if (!target) return;\n target.style.setProperty(toVar(name), value);\n}\n"],"mappings":"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","names":["useRef","d","b","__assign","Animation","_a","text","styles","AxisImp","YAxisImp","indicators","_b","figures","data","value","v","_super","Custom","EventHandlerImp","_a","Event","_b","key","figures","styles","IndicatorImp","Custom","volume","bias","brar","tp","Eventful","FigureImp","styles","_super","Custom","_a","hex","path","text","rect","_a","View","ChildrenView","CandleAreaView","_a","styles","color","CandleBarView","rect","CandleHighLowPriceView","text","CandleLastPriceView","_a","IndicatorTooltipView","styles","indicators","text","path","CandleTooltipView","_b","CrosshairFeatureView","CrosshairLineView","GridView","IndicatorView","_c","OverlayImp","Custom","OverlayView","overlays","figures","Canvas","entry","Widget","DrawWidget","IndicatorWidget","CandleWidget","_a","CandleLastPriceLabelView","text","CrosshairHorizontalLabelView","styles","indicators","IndicatorLastValueView","OverlayYAxisView","figures","AxisView","line","YAxisView","YAxisWidget","Pane","DrawPane","IndicatorPane","CandlePane","SeparatorWidget","SeparatorPane","XAxisImp","_super","Custom","_a","CrosshairVerticalLabelView","styles","text","OverlayXAxisView","figures","XAxisView","XAxisWidget","XAxisPane","Action","TaskScheduler","indicators","_a","StoreImp","styles","_b","data","indicators","indicator","overlays","ChartImp","yAxis","index","width","pane","scale","_a","styles","_registered","line","_registered","text","_registered","text","brush","_registered","FILL","UP","DOWN","LABEL_TEXT","figures","rectAttrs","_registered","UP","UP_FILL","DOWN","DOWN_FILL","figures","_registered","text","useRef","SonrChart","styles","indicators","rect","text","style","useEffect","useState","createPortal","useCallback","useEffect","useRef","useState","jsx","jsxs","useEffect","useState","createPortal","useEffect","useMemo","useState","createPortal","jsx","jsx","jsxs","jsx","jsxs","useEffect","useRef","createPortal","jsx","jsxs","useEffect","useRef","createPortal","Fragment","jsx","jsxs","useEffect","useMemo","useState","createPortal","useEffect","useMemo","useState","jsx","jsxs","useEffect","useMemo","useState","useCallback","useEffect","useMemo","useState","jsx","jsxs","useEffect","useMemo","useState","useCallback","useEffect","useMemo","useState","jsx","jsxs","useEffect","useState","useMemo","useEffect","useMemo","useState","createPortal","jsx","jsxs","useEffect","useMemo","useState","createPortal","forwardRef","useImperativeHandle","useRef","useState","useCallback","useEffect","useMemo","useRef","useState","useCallback","useEffect","useRef","useState","createPortal","jsx","jsxs","useEffect","useState","useRef","useCallback","createPortal","useEffect","useMemo","createPortal","jsx","jsxs","useEffect","useMemo","createPortal","useEffect","useMemo","useState","createPortal","Fragment","jsx","jsxs","useEffect","useMemo","useState","createPortal","useEffect","useMemo","useState","createPortal","Fragment","jsx","jsxs","useEffect","useMemo","useState","indicators","chart","h","createPortal","jsx","jsxs","useEffect","useMemo","useState","useRef","useCallback","useEffect","useMemo","useState","useEffect","useMemo","useState","createPortal","Fragment","jsx","jsxs","useEffect","useMemo","useState","text","createPortal","jsx","jsxs","useEffect","useMemo","useState","useEffect","useMemo","jsx","jsxs","useEffect","useMemo","useCallback","useEffect","useRef","useState","createPortal","jsx","jsxs","useEffect","useRef","useState","useCallback","createPortal","useEffect","useRef","useState","createPortal","jsx","jsxs","useEffect","useRef","useState","createPortal","useEffect","useRef","useState","useMemo","createPortal","Fragment","jsx","jsxs","DAY","useEffect","useMemo","useRef","useState","createPortal","useEffect","jsx","useEffect","useEffect","jsx","useEffect","jsx","jsxs","forwardRef","SonrChartShell","indicators","useRef","useImperativeHandle","useState"]}