@rm-graph/core 0.1.6 → 0.1.7

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.
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/utils/helpers.ts","../src/charts/BaseChart.ts","../src/charts/Surface3DChart.ts","../src/charts/Column3DChart.ts","../src/charts/PRPDChart.ts","../src/index.ts"],"names":["SciChartSurface","ThemeManager","SciChartJSLightTheme","__require","SCICHART_VERSION","SciChart3DSurface","NumericAxis3D","MouseWheelZoomModifier3D","OrbitModifier3D","CameraController","Vector3","UniformGridDataSeries3D","GradientColorPalette","SurfaceMeshRenderableSeries3D","EDrawMeshAs","sciChart3DConfigured","ensureSciChart3DConfigured","NumberRange","XyzDataSeries3D","ColumnRenderableSeries3D","PointLineRenderableSeries3D","TooltipModifier3D","sciChartConfigured","NumericAxis","EAutoRange","ENumericFormat","EAxisAlignment","CursorModifier","RubberBandXyZoomModifier","ZoomExtentsModifier","HeatmapColorMap","UniformHeatmapDataSeries","UniformHeatmapRenderableSeries","XyDataSeries","FastLineRenderableSeries","HeatmapLegend"],"mappings":"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","file":"index.js","sourcesContent":["import type { DataPoint, SeriesData } from \"../types\";\r\n\r\n/**\r\n * Generate a unique ID\r\n */\r\nexport function generateId(prefix: string = \"chart\"): string {\r\n return `${prefix}-${Math.random().toString(36).substring(2, 11)}`;\r\n}\r\n\r\n/**\r\n * Parse size value (handles both string and number)\r\n */\r\nexport function parseSize(value: string | number | undefined, fallback: number): number {\r\n if (value === undefined) return fallback;\r\n if (typeof value === \"number\") return value;\r\n \r\n // Handle percentage\r\n if (value.endsWith(\"%\")) {\r\n return fallback; // Return fallback for percentage, will be handled by CSS\r\n }\r\n \r\n // Handle px\r\n const parsed = parseInt(value, 10);\r\n return isNaN(parsed) ? fallback : parsed;\r\n}\r\n\r\n/**\r\n * Normalize data points to standard format\r\n */\r\nexport function normalizeDataPoints(data: DataPoint[] | number[]): DataPoint[] {\r\n if (data.length === 0) return [];\r\n \r\n // Check if it's already DataPoint format\r\n if (typeof data[0] === \"object\" && \"x\" in data[0]) {\r\n return data as DataPoint[];\r\n }\r\n \r\n // Convert number array to DataPoint array\r\n return (data as number[]).map((y, index) => ({\r\n x: index,\r\n y,\r\n }));\r\n}\r\n\r\n/**\r\n * Extract x values from data points\r\n */\r\nexport function extractXValues(data: DataPoint[]): number[] {\r\n return data.map((point) => {\r\n if (typeof point.x === \"number\") return point.x;\r\n if (point.x instanceof Date) return point.x.getTime();\r\n return 0; // For string categories, will be handled separately\r\n });\r\n}\r\n\r\n/**\r\n * Extract y values from data points\r\n */\r\nexport function extractYValues(data: DataPoint[]): number[] {\r\n return data.map((point) => point.y);\r\n}\r\n\r\n/**\r\n * Deep merge objects\r\n */\r\nexport function deepMerge<T extends Record<string, unknown>>(\r\n target: T,\r\n source: Partial<T>\r\n): T {\r\n const result = { ...target };\r\n \r\n for (const key in source) {\r\n if (Object.prototype.hasOwnProperty.call(source, key)) {\r\n const sourceValue = source[key];\r\n const targetValue = target[key];\r\n \r\n if (\r\n sourceValue !== null &&\r\n typeof sourceValue === \"object\" &&\r\n !Array.isArray(sourceValue) &&\r\n targetValue !== null &&\r\n typeof targetValue === \"object\" &&\r\n !Array.isArray(targetValue)\r\n ) {\r\n (result as Record<string, unknown>)[key] = deepMerge(\r\n targetValue as Record<string, unknown>,\r\n sourceValue as Record<string, unknown>\r\n );\r\n } else if (sourceValue !== undefined) {\r\n (result as Record<string, unknown>)[key] = sourceValue;\r\n }\r\n }\r\n }\r\n \r\n return result;\r\n}\r\n\r\n/**\r\n * Debounce function\r\n */\r\nexport function debounce<T extends (...args: unknown[]) => void>(\r\n fn: T,\r\n delay: number\r\n): (...args: Parameters<T>) => void {\r\n let timeoutId: ReturnType<typeof setTimeout> | null = null;\r\n \r\n return (...args: Parameters<T>) => {\r\n if (timeoutId) {\r\n clearTimeout(timeoutId);\r\n }\r\n timeoutId = setTimeout(() => {\r\n fn(...args);\r\n timeoutId = null;\r\n }, delay);\r\n };\r\n}\r\n\r\n/**\r\n * Throttle function\r\n */\r\nexport function throttle<T extends (...args: unknown[]) => void>(\r\n fn: T,\r\n limit: number\r\n): (...args: Parameters<T>) => void {\r\n let inThrottle = false;\r\n \r\n return (...args: Parameters<T>) => {\r\n if (!inThrottle) {\r\n fn(...args);\r\n inThrottle = true;\r\n setTimeout(() => {\r\n inThrottle = false;\r\n }, limit);\r\n }\r\n };\r\n}\r\n\r\n/**\r\n * Calculate min and max from data series\r\n */\r\nexport function calculateDataRange(series: SeriesData[]): {\r\n xMin: number;\r\n xMax: number;\r\n yMin: number;\r\n yMax: number;\r\n} {\r\n let xMin = Infinity;\r\n let xMax = -Infinity;\r\n let yMin = Infinity;\r\n let yMax = -Infinity;\r\n \r\n for (const s of series) {\r\n const normalized = normalizeDataPoints(s.data);\r\n for (const point of normalized) {\r\n const x = typeof point.x === \"number\" ? point.x : 0;\r\n xMin = Math.min(xMin, x);\r\n xMax = Math.max(xMax, x);\r\n yMin = Math.min(yMin, point.y);\r\n yMax = Math.max(yMax, point.y);\r\n }\r\n }\r\n \r\n return {\r\n xMin: xMin === Infinity ? 0 : xMin,\r\n xMax: xMax === -Infinity ? 100 : xMax,\r\n yMin: yMin === Infinity ? 0 : yMin,\r\n yMax: yMax === -Infinity ? 100 : yMax,\r\n };\r\n}\r\n\r\n/**\r\n * Format number for display\r\n */\r\nexport function formatNumber(value: number, precision: number = 2): string {\r\n if (Math.abs(value) >= 1e9) {\r\n return (value / 1e9).toFixed(precision) + \"B\";\r\n }\r\n if (Math.abs(value) >= 1e6) {\r\n return (value / 1e6).toFixed(precision) + \"M\";\r\n }\r\n if (Math.abs(value) >= 1e3) {\r\n return (value / 1e3).toFixed(precision) + \"K\";\r\n }\r\n return value.toFixed(precision);\r\n}\r\n\r\n/**\r\n * Clamp a value between min and max\r\n */\r\nexport function clamp(value: number, min: number, max: number): number {\r\n return Math.min(Math.max(value, min), max);\r\n}\r\n\r\n/**\r\n * Linear interpolation\r\n */\r\nexport function lerp(start: number, end: number, t: number): number {\r\n return start + (end - start) * clamp(t, 0, 1);\r\n}\r\n\r\n/**\r\n * Convert hex color to rgba\r\n */\r\nexport function hexToRgba(hex: string, alpha: number = 1): string {\r\n const result = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(hex);\r\n if (!result) return hex;\r\n \r\n const r = parseInt(result[1], 16);\r\n const g = parseInt(result[2], 16);\r\n const b = parseInt(result[3], 16);\r\n \r\n return `rgba(${r}, ${g}, ${b}, ${alpha})`;\r\n}\r\n\r\n","import { SciChartSurface } from \"scichart\";\r\nimport type {\r\n ChartConfig,\r\n ChartInstance,\r\n ChartEventMap,\r\n SeriesData,\r\n ThemeConfig,\r\n} from \"../types\";\r\nimport { ThemeManager } from \"../themes/ThemeManager\";\r\nimport { generateId, debounce } from \"../utils/helpers\";\r\n\r\n// SciChart WASM CDN configuration\r\nconst SCICHART_VERSION = \"4.0.933\";\r\nlet sciChartConfigured = false;\r\n\r\nfunction ensureSciChartConfigured(): void {\r\n if (sciChartConfigured) return;\r\n try {\r\n SciChartSurface.useWasmFromCDN();\r\n sciChartConfigured = true;\r\n } catch {\r\n // Fallback to manual configuration\r\n try {\r\n SciChartSurface.configure({\r\n wasmUrl: `https://cdn.jsdelivr.net/npm/scichart@${SCICHART_VERSION}/_wasm/scichart2d.wasm`,\r\n });\r\n sciChartConfigured = true;\r\n } catch {\r\n // Configuration may already be set\r\n }\r\n }\r\n}\r\n\r\n// Type for SciChart surface\r\ntype SciChartSurfaceType = Awaited<ReturnType<typeof SciChartSurface.create>>[\"sciChartSurface\"];\r\n\r\n/**\r\n * Abstract base class for all chart types\r\n * Handles common functionality like initialization, theming, events, and cleanup\r\n */\r\nexport abstract class BaseChart<TConfig extends ChartConfig> implements ChartInstance {\r\n public readonly id: string;\r\n protected container: HTMLElement | null = null;\r\n protected surface: SciChartSurfaceType | null = null;\r\n protected config: TConfig;\r\n protected theme: ThemeConfig;\r\n protected isInitialized: boolean = false;\r\n protected isDestroyed: boolean = false;\r\n\r\n // Event handlers\r\n private eventHandlers: Map<keyof ChartEventMap, Set<(e: unknown) => void>> = new Map();\r\n\r\n // Resize observer\r\n private resizeObserver: ResizeObserver | null = null;\r\n private debouncedResize: () => void;\r\n\r\n constructor(config: TConfig) {\r\n this.id = config.id ?? generateId(\"chart\");\r\n this.config = config;\r\n this.theme = ThemeManager.getInstance().resolveTheme(config.theme);\r\n this.debouncedResize = debounce(() => this.handleResize(), 100);\r\n }\r\n\r\n /**\r\n * Initialize the chart in the given container\r\n */\r\n public async init(container: HTMLElement | string): Promise<void> {\r\n if (this.isDestroyed) {\r\n throw new Error(\"Cannot initialize a destroyed chart\");\r\n }\r\n\r\n // Resolve container\r\n if (typeof container === \"string\") {\r\n const el = document.getElementById(container);\r\n if (!el) {\r\n throw new Error(`Container element \"${container}\" not found`);\r\n }\r\n this.container = el;\r\n } else {\r\n this.container = container;\r\n }\r\n\r\n // Set container styles\r\n this.setupContainer();\r\n\r\n // Configure SciChart defaults\r\n this.configureSciChartDefaults();\r\n\r\n // Create the SciChart surface\r\n await this.createSurface();\r\n\r\n // Set up resize observer\r\n this.setupResizeObserver();\r\n\r\n this.isInitialized = true;\r\n this.emit(\"rendered\", { chartId: this.id, renderTime: performance.now() });\r\n }\r\n\r\n /**\r\n * Setup container element\r\n */\r\n private setupContainer(): void {\r\n if (!this.container) return;\r\n\r\n const { width, height } = this.config;\r\n\r\n // Set dimensions\r\n if (width) {\r\n this.container.style.width =\r\n typeof width === \"number\" ? `${width}px` : width;\r\n }\r\n if (height) {\r\n this.container.style.height =\r\n typeof height === \"number\" ? `${height}px` : height;\r\n }\r\n\r\n // Ensure container has position for absolute children\r\n const computedStyle = window.getComputedStyle(this.container);\r\n if (computedStyle.position === \"static\") {\r\n this.container.style.position = \"relative\";\r\n }\r\n }\r\n\r\n /**\r\n * Configure SciChart library defaults\r\n */\r\n private configureSciChartDefaults(): void {\r\n ensureSciChartConfigured();\r\n }\r\n\r\n /**\r\n * Create the SciChart surface - implemented by subclasses\r\n */\r\n protected abstract createSurface(): Promise<void>;\r\n\r\n /**\r\n * Update the chart with new data\r\n */\r\n public abstract setData(data: SeriesData[]): void;\r\n\r\n /**\r\n * Update chart options\r\n */\r\n public setOptions(options: Partial<TConfig>): void {\r\n this.config = { ...this.config, ...options };\r\n \r\n // Update theme if changed\r\n if (options.theme) {\r\n this.theme = ThemeManager.getInstance().resolveTheme(options.theme);\r\n this.applyTheme();\r\n }\r\n\r\n // Trigger re-render\r\n this.update();\r\n }\r\n\r\n /**\r\n * Apply current theme to the chart\r\n */\r\n protected applyTheme(): void {\r\n if (!this.surface) return;\r\n\r\n this.surface.background = this.theme.backgroundColor ?? \"#ffffff\";\r\n\r\n // Apply SciChart theme provider when switching themes\r\n // (otherwise axes/gridlines can remain styled for the old theme).\r\n try {\r\n const themeName = (this.config.theme as any) as string | undefined;\r\n // Lazy-require to avoid bundler issues in non-browser environments\r\n // eslint-disable-next-line @typescript-eslint/no-var-requires\r\n const { SciChartJSDarkTheme, SciChartJSLightTheme } = require(\"scichart\");\r\n const nextThemeProvider =\r\n themeName === \"light\" ? new SciChartJSLightTheme() : new SciChartJSDarkTheme();\r\n (this.surface as any).applyTheme?.(nextThemeProvider);\r\n } catch {\r\n // ignore if scichart theme provider isn't available\r\n }\r\n\r\n // Update common axis styling for current theme\r\n try {\r\n const applyAxisTheme = (axis: any) => {\r\n if (!axis) return;\r\n axis.axisTitleStyle = {\r\n ...(axis.axisTitleStyle ?? {}),\r\n color: this.theme.axis?.titleColor,\r\n fontFamily: this.theme.fontFamily,\r\n };\r\n axis.labelStyle = {\r\n ...(axis.labelStyle ?? {}),\r\n color: this.theme.axis?.labelColor,\r\n fontFamily: this.theme.fontFamily,\r\n };\r\n axis.majorGridLineStyle = {\r\n ...(axis.majorGridLineStyle ?? {}),\r\n color: this.theme.axis?.gridLineColor,\r\n };\r\n axis.axisBorder = {\r\n ...(axis.axisBorder ?? {}),\r\n color: this.theme.axis?.lineColor,\r\n };\r\n };\r\n\r\n const xAxes = (this.surface as any).xAxes;\r\n const yAxes = (this.surface as any).yAxes;\r\n\r\n // SciChart uses ObservableArray; it can be iterated via .asArray() or .itemsArray\r\n const toArray = (axes: any) =>\r\n axes?.asArray?.() ?? axes?.itemsArray ?? axes?.items ?? [];\r\n\r\n for (const axis of toArray(xAxes)) applyAxisTheme(axis);\r\n for (const axis of toArray(yAxes)) applyAxisTheme(axis);\r\n } catch {\r\n // ignore axis styling issues\r\n }\r\n\r\n // Additional theme application handled by subclasses\r\n }\r\n\r\n /**\r\n * Update the chart (re-render with current config)\r\n */\r\n protected abstract update(): void;\r\n\r\n /**\r\n * Set up resize observer for responsive charts\r\n */\r\n private setupResizeObserver(): void {\r\n if (!this.container || typeof ResizeObserver === \"undefined\") return;\r\n\r\n this.resizeObserver = new ResizeObserver(() => {\r\n this.debouncedResize();\r\n });\r\n\r\n this.resizeObserver.observe(this.container);\r\n }\r\n\r\n /**\r\n * Handle container resize\r\n */\r\n private handleResize(): void {\r\n if (!this.surface || !this.container) return;\r\n\r\n const { width, height } = this.container.getBoundingClientRect();\r\n if (width > 0 && height > 0) {\r\n // SciChart handles resizing automatically when container size changes\r\n // but we can force a redraw if needed\r\n }\r\n }\r\n\r\n /**\r\n * Manually resize the chart\r\n */\r\n public resize(width?: number, height?: number): void {\r\n if (!this.container) return;\r\n\r\n if (width !== undefined) {\r\n this.container.style.width = `${width}px`;\r\n }\r\n if (height !== undefined) {\r\n this.container.style.height = `${height}px`;\r\n }\r\n\r\n this.handleResize();\r\n }\r\n\r\n /**\r\n * Reset zoom to fit all data (zoom extents)\r\n * Note: not part of the ChartInstance interface, but available on concrete chart classes.\r\n */\r\n public resetZoom(): void {\r\n if (!this.surface) return;\r\n try {\r\n (this.surface as any).zoomExtents?.();\r\n } catch {\r\n // ignore\r\n }\r\n }\r\n\r\n /**\r\n * Export chart as image\r\n */\r\n public async exportImage(format: \"png\" | \"jpeg\" | \"svg\" = \"png\"): Promise<string> {\r\n if (!this.surface) {\r\n throw new Error(\"Chart not initialized\");\r\n }\r\n\r\n // SciChart provides export functionality\r\n // This is a simplified implementation\r\n const canvas = this.container?.querySelector(\"canvas\");\r\n if (!canvas) {\r\n throw new Error(\"Canvas not found\");\r\n }\r\n\r\n const mimeType = format === \"jpeg\" ? \"image/jpeg\" : \"image/png\";\r\n return canvas.toDataURL(mimeType);\r\n }\r\n\r\n /**\r\n * Add event listener\r\n */\r\n public on<K extends keyof ChartEventMap>(\r\n event: K,\r\n handler: (e: ChartEventMap[K]) => void\r\n ): void {\r\n if (!this.eventHandlers.has(event)) {\r\n this.eventHandlers.set(event, new Set());\r\n }\r\n this.eventHandlers.get(event)!.add(handler as (e: unknown) => void);\r\n }\r\n\r\n /**\r\n * Remove event listener\r\n */\r\n public off<K extends keyof ChartEventMap>(\r\n event: K,\r\n handler: (e: ChartEventMap[K]) => void\r\n ): void {\r\n const handlers = this.eventHandlers.get(event);\r\n if (handlers) {\r\n handlers.delete(handler as (e: unknown) => void);\r\n }\r\n }\r\n\r\n /**\r\n * Emit an event\r\n */\r\n protected emit<K extends keyof ChartEventMap>(event: K, data: ChartEventMap[K]): void {\r\n const handlers = this.eventHandlers.get(event);\r\n if (handlers) {\r\n handlers.forEach((handler) => handler(data));\r\n }\r\n }\r\n\r\n /**\r\n * Destroy the chart and clean up resources\r\n */\r\n public destroy(): void {\r\n if (this.isDestroyed) return;\r\n\r\n // Clean up resize observer\r\n if (this.resizeObserver) {\r\n this.resizeObserver.disconnect();\r\n this.resizeObserver = null;\r\n }\r\n\r\n // Clean up event handlers\r\n this.eventHandlers.clear();\r\n\r\n // Delete the SciChart surface\r\n if (this.surface) {\r\n this.surface.delete();\r\n this.surface = null;\r\n }\r\n\r\n // Clear container\r\n if (this.container) {\r\n this.container.innerHTML = \"\";\r\n }\r\n\r\n this.isDestroyed = true;\r\n this.isInitialized = false;\r\n }\r\n\r\n /**\r\n * Get current configuration\r\n */\r\n public getConfig(): TConfig {\r\n return { ...this.config };\r\n }\r\n\r\n /**\r\n * Get current theme\r\n */\r\n public getTheme(): ThemeConfig {\r\n return { ...this.theme };\r\n }\r\n\r\n /**\r\n * Check if chart is initialized\r\n */\r\n public isReady(): boolean {\r\n return this.isInitialized && !this.isDestroyed;\r\n }\r\n}\r\n\r\n","import {\r\n SciChart3DSurface,\r\n NumericAxis3D,\r\n SurfaceMeshRenderableSeries3D,\r\n UniformGridDataSeries3D,\r\n CameraController,\r\n GradientColorPalette,\r\n MouseWheelZoomModifier3D,\r\n OrbitModifier3D,\r\n Vector3,\r\n EDrawMeshAs,\r\n} from \"scichart\";\r\nimport type { Surface3DChartConfig, SeriesData } from \"../types\";\r\nimport { generateId } from \"../utils/helpers\";\r\n\r\n// SciChart 3D WASM CDN configuration\r\nconst SCICHART_VERSION = \"4.0.933\";\r\nlet sciChart3DConfigured = false;\r\n\r\nfunction ensureSciChart3DConfigured(): void {\r\n if (sciChart3DConfigured) return;\r\n try {\r\n SciChart3DSurface.useWasmFromCDN();\r\n sciChart3DConfigured = true;\r\n } catch {\r\n // Fallback to manual configuration\r\n try {\r\n SciChart3DSurface.configure({\r\n wasmUrl: `https://cdn.jsdelivr.net/npm/scichart@${SCICHART_VERSION}/_wasm/scichart3d.wasm`,\r\n });\r\n sciChart3DConfigured = true;\r\n } catch {\r\n // Configuration may already be set\r\n }\r\n }\r\n}\r\n\r\n// Default color stops for 3D surface\r\nconst defaultColorStops = [\r\n { offset: 0, color: \"#1e3a8a\" }, // Dark blue\r\n { offset: 0.25, color: \"#3b82f6\" }, // Blue\r\n { offset: 0.5, color: \"#22c55e\" }, // Green\r\n { offset: 0.75, color: \"#eab308\" }, // Yellow\r\n { offset: 1, color: \"#ef4444\" }, // Red\r\n];\r\n\r\n/**\r\n * 3D Surface Chart implementation using SciChart\r\n */\r\nexport class Surface3DChart {\r\n public readonly id: string;\r\n private container: HTMLElement | null = null;\r\n private surface: SciChart3DSurface | null = null;\r\n private wasmContext: any = null;\r\n private config: Surface3DChartConfig;\r\n private dataSeries: UniformGridDataSeries3D | null = null;\r\n private meshSeries: SurfaceMeshRenderableSeries3D | null = null;\r\n private isDestroyed: boolean = false;\r\n\r\n constructor(config: Surface3DChartConfig) {\r\n this.id = config.id ?? generateId(\"chart3d\");\r\n this.config = config;\r\n }\r\n\r\n /**\r\n * Initialize the chart in the given container\r\n */\r\n public async init(container: HTMLElement | string): Promise<void> {\r\n if (this.isDestroyed) {\r\n throw new Error(\"Cannot initialize a destroyed chart\");\r\n }\r\n\r\n // Resolve container\r\n if (typeof container === \"string\") {\r\n const el = document.getElementById(container);\r\n if (!el) {\r\n throw new Error(`Container element \"${container}\" not found`);\r\n }\r\n this.container = el;\r\n } else {\r\n this.container = container;\r\n }\r\n\r\n // Ensure container has a unique ID for SciChart\r\n if (!this.container.id) {\r\n this.container.id = this.id;\r\n }\r\n\r\n // Configure SciChart 3D WASM\r\n ensureSciChart3DConfigured();\r\n\r\n // Create the 3D surface\r\n await this.createSurface();\r\n }\r\n\r\n /**\r\n * Create the SciChart 3D surface\r\n */\r\n private async createSurface(): Promise<void> {\r\n if (!this.container) {\r\n throw new Error(\"Container not set\");\r\n }\r\n \r\n // Ensure container has an ID\r\n if (!this.container.id) {\r\n this.container.id = this.id;\r\n }\r\n\r\n const { sciChart3DSurface, wasmContext } = await SciChart3DSurface.create(\r\n this.container.id\r\n );\r\n \r\n // Check if destroyed during async operation\r\n if (this.isDestroyed) {\r\n sciChart3DSurface.delete();\r\n return;\r\n }\r\n\r\n this.surface = sciChart3DSurface;\r\n this.wasmContext = wasmContext;\r\n\r\n // Create axes\r\n sciChart3DSurface.xAxis = new NumericAxis3D(wasmContext, {\r\n axisTitle: \"X\",\r\n });\r\n sciChart3DSurface.yAxis = new NumericAxis3D(wasmContext, {\r\n axisTitle: \"Y\",\r\n });\r\n sciChart3DSurface.zAxis = new NumericAxis3D(wasmContext, {\r\n axisTitle: \"Z\",\r\n });\r\n\r\n // Add interactivity\r\n sciChart3DSurface.chartModifiers.add(new MouseWheelZoomModifier3D());\r\n sciChart3DSurface.chartModifiers.add(new OrbitModifier3D());\r\n\r\n // Set up camera\r\n const cameraPos = this.config.cameraPosition ?? { x: 300, y: 300, z: 300 };\r\n sciChart3DSurface.camera = new CameraController(wasmContext, {\r\n position: new Vector3(cameraPos.x, cameraPos.y, cameraPos.z),\r\n target: new Vector3(0, 0, 0),\r\n });\r\n\r\n // Add surface data\r\n this.addSurfaceData(this.config.yValues);\r\n }\r\n\r\n /**\r\n * Add surface data to the chart\r\n */\r\n private addSurfaceData(yValues: number[][]): void {\r\n if (!this.surface || !this.wasmContext) return;\r\n\r\n const wasmContext = this.wasmContext;\r\n const zSize = yValues.length;\r\n const xSize = yValues[0]?.length ?? 0;\r\n\r\n // Calculate min/max from data\r\n let min = Infinity;\r\n let max = -Infinity;\r\n for (let z = 0; z < zSize; z++) {\r\n for (let x = 0; x < xSize; x++) {\r\n const y = yValues[z][x];\r\n min = Math.min(min, y);\r\n max = Math.max(max, y);\r\n }\r\n }\r\n\r\n // Create data series\r\n this.dataSeries = new UniformGridDataSeries3D(wasmContext, {\r\n yValues,\r\n xStep: this.config.xStep ?? 1,\r\n zStep: this.config.zStep ?? 1,\r\n });\r\n\r\n // Get color stops\r\n const colorStops = this.config.colorStops ?? defaultColorStops;\r\n\r\n // Create color palette\r\n const colorPalette = new GradientColorPalette(wasmContext, {\r\n gradientStops: colorStops,\r\n });\r\n\r\n // Create mesh series - solid filled surface\r\n this.meshSeries = new SurfaceMeshRenderableSeries3D(wasmContext, {\r\n dataSeries: this.dataSeries,\r\n minimum: this.config.colorMin ?? min,\r\n maximum: this.config.colorMax ?? max,\r\n opacity: this.config.opacity ?? 1.0,\r\n cellHardnessFactor: 0, // Smooth interpolation between cells\r\n stroke: \"transparent\", // No wireframe stroke\r\n strokeThickness: 0,\r\n contourStroke: \"transparent\", // No contour lines\r\n contourStrokeThickness: 0,\r\n drawSkirt: true, // Draw skirt for solid appearance\r\n drawMeshAs: EDrawMeshAs.SOLID_MESH, // Solid filled surface\r\n lightingFactor: 0.8,\r\n meshColorPalette: colorPalette,\r\n shininess: 10,\r\n });\r\n\r\n this.surface!.renderableSeries.add(this.meshSeries);\r\n }\r\n\r\n /**\r\n * Set new Y values for the surface\r\n */\r\n public setYValues(yValues: number[][]): void {\r\n if (!this.surface) {\r\n this.config.yValues = yValues;\r\n return;\r\n }\r\n\r\n // Clear existing surface\r\n this.clearSurface();\r\n\r\n // Update config and add new data\r\n this.config.yValues = yValues;\r\n this.addSurfaceData(yValues);\r\n }\r\n\r\n /**\r\n * Set new data (alias for setYValues for consistency)\r\n */\r\n public setData(_data: SeriesData[]): void {\r\n console.warn(\"Surface3DChart.setData() - use setYValues() for updating surface data\");\r\n }\r\n\r\n /**\r\n * Update chart options\r\n */\r\n public setOptions(options: Partial<Surface3DChartConfig>): void {\r\n this.config = { ...this.config, ...options };\r\n\r\n if (options.cameraPosition && this.surface && this.wasmContext) {\r\n const pos = options.cameraPosition;\r\n this.surface.camera = new CameraController(this.wasmContext, {\r\n position: new Vector3(pos.x, pos.y, pos.z),\r\n target: new Vector3(0, 0, 0),\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Clear surface data\r\n */\r\n private clearSurface(): void {\r\n if (!this.surface) return;\r\n\r\n if (this.meshSeries) {\r\n this.surface.renderableSeries.remove(this.meshSeries);\r\n this.meshSeries.delete();\r\n this.meshSeries = null;\r\n }\r\n\r\n if (this.dataSeries) {\r\n this.dataSeries.delete();\r\n this.dataSeries = null;\r\n }\r\n }\r\n\r\n /**\r\n * Destroy and clean up\r\n */\r\n public destroy(): void {\r\n if (this.isDestroyed) return;\r\n \r\n // Mark as destroyed immediately to prevent re-entry\r\n this.isDestroyed = true;\r\n\r\n try {\r\n this.clearSurface();\r\n } catch (e) {\r\n // Ignore cleanup errors\r\n }\r\n\r\n if (this.surface) {\r\n try {\r\n this.surface.delete();\r\n } catch (e) {\r\n // Ignore cleanup errors - surface may already be destroyed\r\n }\r\n this.surface = null;\r\n }\r\n \r\n this.container = null;\r\n this.wasmContext = null;\r\n }\r\n\r\n /**\r\n * Get current configuration\r\n */\r\n public getConfig(): Surface3DChartConfig {\r\n return { ...this.config };\r\n }\r\n\r\n /**\r\n * Check if chart is ready (initialized and not destroyed)\r\n */\r\n public isReady(): boolean {\r\n return this.surface !== null && !this.isDestroyed;\r\n }\r\n}\r\n\r\n/**\r\n * Factory function to create a 3D surface chart\r\n */\r\nexport async function createSurface3DChart(\r\n container: HTMLElement | string,\r\n config: Surface3DChartConfig\r\n): Promise<Surface3DChart> {\r\n const chart = new Surface3DChart(config);\r\n await chart.init(container);\r\n return chart;\r\n}\r\n\r\n","import {\r\n SciChart3DSurface,\r\n NumericAxis3D,\r\n XyzDataSeries3D,\r\n ColumnRenderableSeries3D,\r\n PointLineRenderableSeries3D,\r\n NumberRange,\r\n CameraController,\r\n Vector3,\r\n OrbitModifier3D,\r\n MouseWheelZoomModifier3D,\r\n TooltipModifier3D,\r\n} from \"scichart\";\r\nimport type { ChartConfig } from \"../types\";\r\nimport { generateId } from \"../utils/helpers\";\r\n\r\n// SciChart 3D WASM CDN configuration\r\nconst SCICHART_VERSION = \"4.0.933\";\r\nlet sciChart3DConfigured = false;\r\n\r\nfunction ensureSciChart3DConfigured(): void {\r\n if (sciChart3DConfigured) return;\r\n try {\r\n SciChart3DSurface.useWasmFromCDN();\r\n sciChart3DConfigured = true;\r\n } catch {\r\n // Fallback to manual configuration\r\n try {\r\n SciChart3DSurface.configure({\r\n wasmUrl: `https://cdn.jsdelivr.net/npm/scichart@${SCICHART_VERSION}/_wasm/scichart3d.wasm`,\r\n });\r\n sciChart3DConfigured = true;\r\n } catch {\r\n // Configuration may already be set\r\n }\r\n }\r\n}\r\n\r\n/** Data point for 3D column chart [x, y, z] */\r\nexport type Column3DDataPoint = [number, number, number];\r\n\r\n/** Configuration for 3D Column Chart */\r\nexport interface Column3DChartConfig extends ChartConfig {\r\n /** Array of [x, y, z] data points */\r\n data: Column3DDataPoint[];\r\n /** X axis title */\r\n xAxisTitle?: string;\r\n /** Y axis title */\r\n yAxisTitle?: string;\r\n /** Z axis title */\r\n zAxisTitle?: string;\r\n /** X axis visible range */\r\n xRange?: { min: number; max: number };\r\n /** Y axis visible range */\r\n yRange?: { min: number; max: number };\r\n /** Z axis visible range */\r\n zRange?: { min: number; max: number };\r\n /** Bar fill color */\r\n barFill?: string;\r\n /** Bar stroke color */\r\n barStroke?: string;\r\n /** Bar opacity (0-1) */\r\n barOpacity?: number;\r\n /** Bar width in X direction */\r\n barWidthX?: number;\r\n /** Bar width in Z direction */\r\n barWidthZ?: number;\r\n /** Camera position */\r\n cameraPosition?: { x: number; y: number; z: number };\r\n /** Camera target */\r\n cameraTarget?: { x: number; y: number; z: number };\r\n /** Show sine wave reference line on back plane */\r\n showSineWave?: boolean;\r\n /** Sine wave amplitude center */\r\n sineWaveCenter?: number;\r\n /** Sine wave amplitude range */\r\n sineWaveAmplitude?: number;\r\n}\r\n\r\n/**\r\n * 3D Column/Bar Chart implementation using SciChart\r\n */\r\nexport class Column3DChart {\r\n public readonly id: string;\r\n private container: HTMLElement | null = null;\r\n private surface: SciChart3DSurface | null = null;\r\n private wasmContext: any = null;\r\n private config: Column3DChartConfig;\r\n private dataSeries: XyzDataSeries3D | null = null;\r\n private columnSeries: ColumnRenderableSeries3D | null = null;\r\n private isDestroyed: boolean = false;\r\n\r\n constructor(config: Column3DChartConfig) {\r\n this.id = config.id ?? generateId(\"column3d\");\r\n this.config = config;\r\n }\r\n\r\n /**\r\n * Initialize the chart in the given container\r\n */\r\n public async init(container: HTMLElement | string): Promise<void> {\r\n if (this.isDestroyed) {\r\n throw new Error(\"Cannot initialize a destroyed chart\");\r\n }\r\n\r\n // Resolve container\r\n if (typeof container === \"string\") {\r\n const el = document.getElementById(container);\r\n if (!el) {\r\n throw new Error(`Container element \"${container}\" not found`);\r\n }\r\n this.container = el;\r\n } else {\r\n this.container = container;\r\n }\r\n\r\n // Ensure container has a unique ID for SciChart\r\n if (!this.container.id) {\r\n this.container.id = this.id;\r\n }\r\n\r\n // Configure SciChart 3D WASM\r\n ensureSciChart3DConfigured();\r\n\r\n // Create the 3D surface\r\n await this.createSurface();\r\n }\r\n\r\n /**\r\n * Create the SciChart 3D surface\r\n */\r\n private async createSurface(): Promise<void> {\r\n if (!this.container) {\r\n throw new Error(\"Container not set\");\r\n }\r\n \r\n // Ensure container has an ID\r\n if (!this.container.id) {\r\n this.container.id = this.id;\r\n }\r\n\r\n const { sciChart3DSurface, wasmContext } = await SciChart3DSurface.create(\r\n this.container.id,\r\n {\r\n isZYPlaneVisible: false,\r\n }\r\n );\r\n \r\n // Check if destroyed during async operation\r\n if (this.isDestroyed) {\r\n sciChart3DSurface.delete();\r\n return;\r\n }\r\n\r\n this.surface = sciChart3DSurface;\r\n this.wasmContext = wasmContext;\r\n\r\n // Set up camera\r\n const cameraPos = this.config.cameraPosition ?? { x: -250, y: 450, z: 280 };\r\n const cameraTarget = this.config.cameraTarget ?? { x: 0, y: 0, z: 0 };\r\n sciChart3DSurface.camera = new CameraController(wasmContext, {\r\n position: new Vector3(cameraPos.x, cameraPos.y, cameraPos.z),\r\n target: new Vector3(cameraTarget.x, cameraTarget.y, cameraTarget.z),\r\n });\r\n\r\n // Add interactivity\r\n sciChart3DSurface.chartModifiers.add(\r\n new OrbitModifier3D(),\r\n new MouseWheelZoomModifier3D()\r\n );\r\n\r\n // Create axes\r\n const xRange = this.config.xRange ?? { min: 0, max: 360 };\r\n const yRange = this.config.yRange ?? { min: 0, max: 5000 };\r\n const zRange = this.config.zRange ?? { min: 0, max: 50 };\r\n\r\n const baseAxisOptions = {\r\n drawMinorGridLines: false,\r\n majorGridLineStyle: { color: \"#7e7e7e\" },\r\n planeBorderThickness: 3,\r\n };\r\n\r\n sciChart3DSurface.xAxis = new NumericAxis3D(wasmContext, {\r\n ...baseAxisOptions,\r\n axisTitle: this.config.xAxisTitle ?? \"Phase Angle (°)\",\r\n autoTicks: false,\r\n visibleRange: new NumberRange(xRange.min, xRange.max),\r\n majorDelta: 45,\r\n minorDelta: 15,\r\n flippedCoordinates: true,\r\n axisBandsFill: \"#d2d2d2\",\r\n });\r\n\r\n sciChart3DSurface.yAxis = new NumericAxis3D(wasmContext, {\r\n ...baseAxisOptions,\r\n axisTitle: this.config.yAxisTitle ?? \"Amplitude (mVp)\",\r\n visibleRange: new NumberRange(yRange.min, yRange.max),\r\n axisBandsFill: \"#b1b1b1\",\r\n });\r\n\r\n sciChart3DSurface.zAxis = new NumericAxis3D(wasmContext, {\r\n ...baseAxisOptions,\r\n axisTitle: this.config.zAxisTitle ?? \"Cycle\",\r\n majorDelta: 10,\r\n minorDelta: 5,\r\n visibleRange: new NumberRange(zRange.min, zRange.max),\r\n axisBandsFill: \"#d0d0d0\",\r\n labelPrecision: 0,\r\n });\r\n\r\n // Add column data\r\n this.addColumnData(this.config.data);\r\n\r\n // Add sine wave reference if enabled\r\n if (this.config.showSineWave !== false) {\r\n this.addSineWave();\r\n }\r\n\r\n // Add tooltip\r\n this.addTooltip();\r\n }\r\n\r\n /**\r\n * Add column data to the chart\r\n */\r\n private addColumnData(data: Column3DDataPoint[]): void {\r\n if (!this.surface || !this.wasmContext) return;\r\n\r\n const wasmContext = this.wasmContext;\r\n\r\n // Create XYZ data series\r\n this.dataSeries = new XyzDataSeries3D(wasmContext);\r\n \r\n // Add data points\r\n data.forEach(([x, y, z]) => {\r\n this.dataSeries!.append(x, y, z);\r\n });\r\n\r\n // Create column series\r\n this.columnSeries = new ColumnRenderableSeries3D(wasmContext, {\r\n dataSeries: this.dataSeries,\r\n fill: this.config.barFill ?? \"#52aaf2\",\r\n stroke: this.config.barStroke ?? \"#52aaf2\",\r\n opacity: this.config.barOpacity ?? 0.95,\r\n dataPointWidthX: this.config.barWidthX ?? 8,\r\n dataPointWidthZ: this.config.barWidthZ ?? 8,\r\n });\r\n\r\n this.surface!.renderableSeries.add(this.columnSeries);\r\n }\r\n\r\n /**\r\n * Add sine wave reference line on back plane\r\n */\r\n private addSineWave(): void {\r\n if (!this.surface || !this.wasmContext) return;\r\n\r\n const wasmContext = this.wasmContext;\r\n const sineData = new XyzDataSeries3D(wasmContext);\r\n const backPlaneZ = 0;\r\n \r\n const center = this.config.sineWaveCenter ?? 2000;\r\n const amplitude = this.config.sineWaveAmplitude ?? 2000;\r\n\r\n for (let deg = 0; deg <= 360; deg += 5) {\r\n const rad = (deg * Math.PI) / 180;\r\n const y = center + amplitude * Math.sin(rad);\r\n sineData.append(deg, y, backPlaneZ);\r\n }\r\n\r\n const sineSeries = new PointLineRenderableSeries3D(wasmContext, {\r\n dataSeries: sineData,\r\n stroke: \"black\",\r\n strokeThickness: 3,\r\n opacity: 1.0,\r\n });\r\n\r\n this.surface!.renderableSeries.add(sineSeries);\r\n }\r\n\r\n /**\r\n * Add tooltip modifier\r\n */\r\n private addTooltip(): void {\r\n if (!this.surface) return;\r\n\r\n const xTitle = this.config.xAxisTitle ?? \"Phase Angle\";\r\n const yTitle = this.config.yAxisTitle ?? \"Amplitude\";\r\n const zTitle = this.config.zAxisTitle ?? \"Cycle\";\r\n\r\n const tooltipModifier = new TooltipModifier3D({\r\n tooltipDataTemplate: (seriesInfo: any) => {\r\n const valuesWithLabels: string[] = [];\r\n if (seriesInfo && seriesInfo.isHit) {\r\n valuesWithLabels.push(`${xTitle}: ${seriesInfo.xValue}`);\r\n valuesWithLabels.push(`${yTitle}: ${seriesInfo.yValue}`);\r\n valuesWithLabels.push(`${zTitle}: ${seriesInfo.zValue}`);\r\n }\r\n return valuesWithLabels;\r\n },\r\n });\r\n\r\n this.surface!.chartModifiers.add(tooltipModifier);\r\n }\r\n\r\n /**\r\n * Set new data for the chart\r\n */\r\n public setData(data: Column3DDataPoint[]): void {\r\n if (!this.dataSeries) {\r\n this.config.data = data;\r\n return;\r\n }\r\n\r\n // Clear and update data\r\n this.dataSeries.clear();\r\n data.forEach(([x, y, z]) => {\r\n this.dataSeries!.append(x, y, z);\r\n });\r\n\r\n // Request redraw\r\n if (this.surface) {\r\n this.surface.invalidateElement();\r\n }\r\n }\r\n\r\n /**\r\n * Update camera position\r\n */\r\n public setCameraPosition(\r\n position: { x: number; y: number; z: number },\r\n target?: { x: number; y: number; z: number }\r\n ): void {\r\n if (!this.surface || !this.wasmContext) return;\r\n\r\n this.surface.camera.position = new Vector3(position.x, position.y, position.z);\r\n if (target) {\r\n this.surface.camera.target = new Vector3(target.x, target.y, target.z);\r\n }\r\n this.surface.invalidateElement();\r\n }\r\n\r\n /**\r\n * Update chart options\r\n */\r\n public setOptions(options: Partial<Column3DChartConfig>): void {\r\n this.config = { ...this.config, ...options };\r\n\r\n if (options.cameraPosition && this.surface && this.wasmContext) {\r\n const pos = options.cameraPosition;\r\n const target = options.cameraTarget ?? { x: 0, y: 0, z: 0 };\r\n this.setCameraPosition(pos, target);\r\n }\r\n\r\n if (options.barFill || options.barStroke || options.barOpacity) {\r\n if (this.columnSeries) {\r\n if (options.barFill) this.columnSeries.fill = options.barFill;\r\n if (options.barStroke) this.columnSeries.stroke = options.barStroke;\r\n if (options.barOpacity !== undefined) this.columnSeries.opacity = options.barOpacity;\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Get the SciChart surface for advanced operations\r\n */\r\n public getSurface(): SciChart3DSurface | null {\r\n return this.surface;\r\n }\r\n\r\n /**\r\n * Destroy and clean up\r\n */\r\n public destroy(): void {\r\n if (this.isDestroyed) return;\r\n \r\n // Mark as destroyed immediately to prevent re-entry\r\n this.isDestroyed = true;\r\n\r\n if (this.surface) {\r\n try {\r\n this.surface.delete();\r\n } catch (e) {\r\n // Ignore cleanup errors - surface may already be destroyed\r\n }\r\n this.surface = null;\r\n }\r\n \r\n this.container = null;\r\n this.wasmContext = null;\r\n }\r\n\r\n /**\r\n * Get current configuration\r\n */\r\n public getConfig(): Column3DChartConfig {\r\n return { ...this.config };\r\n }\r\n\r\n /**\r\n * Check if chart is ready (initialized and not destroyed)\r\n */\r\n public isReady(): boolean {\r\n return this.surface !== null && !this.isDestroyed;\r\n }\r\n}\r\n\r\n/**\r\n * Factory function to create a 3D column chart\r\n */\r\nexport async function createColumn3DChart(\r\n container: HTMLElement | string,\r\n config: Column3DChartConfig\r\n): Promise<Column3DChart> {\r\n const chart = new Column3DChart(config);\r\n await chart.init(container);\r\n return chart;\r\n}\r\n\r\n","import {\r\n SciChartSurface,\r\n NumericAxis,\r\n UniformHeatmapDataSeries,\r\n UniformHeatmapRenderableSeries,\r\n HeatmapColorMap,\r\n HeatmapLegend,\r\n NumberRange,\r\n ZoomExtentsModifier,\r\n RubberBandXyZoomModifier,\r\n EAutoRange,\r\n EAxisAlignment,\r\n ENumericFormat,\r\n CursorModifier,\r\n FastLineRenderableSeries,\r\n XyDataSeries,\r\n} from \"scichart\";\r\nimport { SciChartJSLightTheme } from \"scichart/Charting/Themes/SciChartJSLightTheme\";\r\nimport type {\r\n PRPDChartConfig,\r\n PRPDDataPoint,\r\n PRPDResolutionLabel,\r\n PRPDWindowingRegion,\r\n PRPDChartStats,\r\n} from \"../types\";\r\nimport { generateId } from \"../utils/helpers\";\r\n\r\n// SciChart CDN configuration - auto-configures WASM loading from CDN\r\nconst SCICHART_VERSION = \"4.0.933\";\r\nlet sciChartConfigured = false;\r\n\r\nconst configureSciChartCDN = () => {\r\n if (sciChartConfigured) return;\r\n try {\r\n const cdnBase = `https://cdn.jsdelivr.net/npm/scichart@${SCICHART_VERSION}/_wasm`;\r\n SciChartSurface.configure({\r\n wasmUrl: `${cdnBase}/scichart2d.wasm`,\r\n dataUrl: `${cdnBase}/scichart2d.data`,\r\n } as any);\r\n sciChartConfigured = true;\r\n } catch (e) {\r\n console.warn(\"Failed to configure SciChart CDN:\", e);\r\n }\r\n};\r\n\r\n// ============================================\r\n// Constants\r\n// ============================================\r\n\r\nconst HORIZONTAL_RESOLUTION = 360;\r\nconst VERTICAL_SCALE_MAX_DEFAULT = 5000;\r\nconst HORIZONTAL_RESOLUTION_MULTIPLIER = 1;\r\n\r\n// Resolution configurations\r\nconst RESOLUTION_CONFIG = {\r\n UNI: {\r\n HI: { VERTICAL_RESOLUTION: 256, VERTICAL_OFFSET: 0, MIN_PEAK_ZERO: true },\r\n LO: { VERTICAL_RESOLUTION: 100, VERTICAL_OFFSET: 0, MIN_PEAK_ZERO: true },\r\n },\r\n BI: {\r\n HI: { VERTICAL_RESOLUTION: 512, VERTICAL_OFFSET: 256, MIN_PEAK_ZERO: false },\r\n LO: { VERTICAL_RESOLUTION: 200, VERTICAL_OFFSET: 100, MIN_PEAK_ZERO: false },\r\n },\r\n};\r\n\r\n// Default PRPD color map (jet-like colormap matching reference implementation)\r\n// Uses \"Transparent\" for cells at minimum value so grid shows through empty areas\r\nconst defaultPRPDColorStops = [\r\n { offset: 0, color: 'transparent' },\r\n { offset: 0.005, color: 'transparent' },\r\n { offset: 0.009, color: 'transparent' },\r\n { offset: 0.01, color: 'CornflowerBlue' },\r\n { offset: 0.4, color: 'DarkGreen' },\r\n { offset: 0.6, color: 'Chartreuse' },\r\n { offset: 0.8, color: 'Yellow' },\r\n { offset: 1, color: 'Red' },\r\n];\r\n\r\n// PRPD Theme: grey/light-grey alternating bands (matching reference)\r\nconst createPRPDTheme = () => {\r\n const theme = new SciChartJSLightTheme();\r\n theme.sciChartBackground = \"#f9f9f9\";\r\n theme.gridBackgroundBrush = \"grey\";\r\n theme.axisBandsFill = \"#dcdcdc\";\r\n theme.majorGridLineBrush = \"#888888\";\r\n theme.minorGridLineBrush = \"transparent\";\r\n return theme;\r\n};\r\n\r\n// Legend Theme: white background for heatmap color legend\r\nconst createLegendTheme = () => {\r\n const theme = new SciChartJSLightTheme();\r\n theme.sciChartBackground = \"#ffffff\";\r\n theme.gridBackgroundBrush = \"#ffffff\";\r\n theme.axisBandsFill = \"#ffffff\";\r\n theme.majorGridLineBrush = \"transparent\";\r\n theme.minorGridLineBrush = \"transparent\";\r\n return theme;\r\n};\r\n\r\n\r\n// ============================================\r\n// Helper Functions\r\n// ============================================\r\n\r\nfunction getResolutionConfig(\r\n uniBiLabel: string,\r\n hiLoLabel: string,\r\n maxPeak: number,\r\n minPeak: number,\r\n isLowResolution: boolean\r\n) {\r\n const cfg = isLowResolution\r\n ? RESOLUTION_CONFIG.UNI.HI\r\n : (RESOLUTION_CONFIG?.[uniBiLabel as keyof typeof RESOLUTION_CONFIG]?.[\r\n hiLoLabel as keyof typeof RESOLUTION_CONFIG.UNI\r\n ] ?? RESOLUTION_CONFIG.BI.HI);\r\n\r\n const newMinPeak = cfg.MIN_PEAK_ZERO ? 0 : (minPeak ?? -5000);\r\n const newMaxPeak = maxPeak ?? 5000;\r\n\r\n return {\r\n verticalResolution: cfg.VERTICAL_RESOLUTION,\r\n verticalOffset: cfg.VERTICAL_OFFSET,\r\n newMinPeak,\r\n newMaxPeak,\r\n isUnipolar: uniBiLabel === \"UNI\" || isLowResolution,\r\n };\r\n}\r\n\r\nfunction getPhaseColumnIndex(phaseAngle: number, maxPhaseAngle: number): number {\r\n const maxPhase = maxPhaseAngle || 360;\r\n if (maxPhase <= 0) return 0;\r\n\r\n const clampedPhase = Math.min(Math.max(phaseAngle, 0), maxPhase);\r\n const ratio = clampedPhase / maxPhase;\r\n\r\n return Math.min(HORIZONTAL_RESOLUTION - 1, Math.floor(ratio * (HORIZONTAL_RESOLUTION - 1)));\r\n}\r\n\r\nfunction generateSineWaveData(\r\n startX: number,\r\n endX: number,\r\n amplitude: number,\r\n frequency: number = 1,\r\n phaseShift: number = 0,\r\n step: number = 1,\r\n offset: number = 0\r\n): Array<[number, number]> {\r\n const data: Array<[number, number]> = [];\r\n for (let x = startX; x <= endX; x += step) {\r\n const rad = ((x - phaseShift) * Math.PI * frequency) / 180;\r\n const y = offset + amplitude * Math.sin(rad);\r\n data.push([x, y]);\r\n }\r\n return data;\r\n}\r\n\r\ninterface BuildZValuesResult {\r\n zValues: number[][];\r\n multiplier: number;\r\n maxValue: number;\r\n totalCount: number;\r\n verticalResolution: number;\r\n isUnipolar: boolean;\r\n newMinPeak: number;\r\n}\r\n\r\nfunction buildZValues(\r\n data: PRPDDataPoint[],\r\n scalingFactor: number,\r\n minPeak: number,\r\n maxPhaseAngle: number,\r\n verticalScaleMax: number,\r\n uniBiLabel: string,\r\n hiLoLabel: string,\r\n windowingData: PRPDWindowingRegion[] = [],\r\n isLowResolution: boolean\r\n): BuildZValuesResult {\r\n const { verticalResolution, verticalOffset, newMinPeak, newMaxPeak, isUnipolar } =\r\n getResolutionConfig(uniBiLabel, hiLoLabel, verticalScaleMax, minPeak, isLowResolution);\r\n\r\n const zValues = Array.from({ length: verticalResolution }, () =>\r\n new Array(HORIZONTAL_RESOLUTION).fill(0)\r\n );\r\n\r\n const vResolution = newMinPeak === 0 ? verticalResolution : verticalResolution / 2;\r\n const multiplier = (newMaxPeak * scalingFactor) / vResolution;\r\n\r\n let maxValue = 0;\r\n let totalCount = 0;\r\n\r\n const isInsideWindow = (phaseDeg: number, ampVal: number): boolean => {\r\n if (!windowingData?.length) return false;\r\n\r\n return windowingData.some(\r\n (w) =>\r\n phaseDeg >= w.minPhase &&\r\n phaseDeg <= w.maxPhase &&\r\n ampVal >= w.minAmp &&\r\n ampVal <= w.maxAmp\r\n );\r\n };\r\n\r\n data?.forEach(([phase_angle, amplitude, count]) => {\r\n const colIndex = getPhaseColumnIndex(phase_angle, maxPhaseAngle);\r\n\r\n const scaledAmp = Math.floor(\r\n (isUnipolar ? Math.abs(amplitude) : amplitude) * scalingFactor\r\n );\r\n\r\n // Skip counts in windowing region\r\n if (isInsideWindow(phase_angle, scaledAmp)) {\r\n return;\r\n }\r\n\r\n let rowIndex = Math.floor(scaledAmp / multiplier + verticalOffset);\r\n rowIndex = Math.max(0, Math.min(verticalResolution - 1, rowIndex));\r\n\r\n zValues[rowIndex][colIndex] += count;\r\n\r\n if (Math.abs(scaledAmp) > Math.abs(maxValue)) maxValue = scaledAmp;\r\n totalCount += count;\r\n });\r\n\r\n return {\r\n zValues,\r\n multiplier,\r\n maxValue,\r\n totalCount,\r\n verticalResolution,\r\n isUnipolar,\r\n newMinPeak,\r\n };\r\n}\r\n\r\n// ============================================\r\n// PRPDChart Class\r\n// ============================================\r\n\r\n/**\r\n * PRPD (Phase Resolved Partial Discharge) Chart implementation using SciChart\r\n * \r\n * This chart displays partial discharge data as a heatmap with:\r\n * - X-axis: Phase angle (0-360°)\r\n * - Y-axis: Amplitude (mVp or other unit)\r\n * - Color intensity: Pulse count at each phase/amplitude bin\r\n * - Optional sine wave overlay\r\n * - Resolution modes (UNI/BI, HI/LO)\r\n * - Windowing support for filtering regions\r\n */\r\nexport class PRPDChart {\r\n public readonly id: string;\r\n private container: HTMLElement | null = null; // Root container (may contain sub-divs)\r\n private chartHost: HTMLDivElement | null = null; // Div where SciChartSurface is mounted\r\n private surface: SciChartSurface | null = null;\r\n private wasmContext: any = null;\r\n private config: PRPDChartConfig;\r\n private isDestroyed: boolean = false;\r\n\r\n // Chart components\r\n private heatmapDataSeries: UniformHeatmapDataSeries | null = null;\r\n private heatmapSeries: UniformHeatmapRenderableSeries | null = null;\r\n private heatmapColorMap: HeatmapColorMap | null = null;\r\n private heatmapLegend: HeatmapLegend | null = null;\r\n private heatmapLegendDiv: HTMLDivElement | null = null;\r\n private sineDataSeries: XyDataSeries | null = null;\r\n private sineLineSeries: FastLineRenderableSeries | null = null;\r\n private xAxis: NumericAxis | null = null;\r\n private yAxis: NumericAxis | null = null;\r\n\r\n // Statistics\r\n private stats: PRPDChartStats = { peakValue: 0, totalCount: 0 };\r\n\r\n // Callbacks\r\n private onStatsChange?: (stats: PRPDChartStats) => void;\r\n\r\n constructor(config: PRPDChartConfig) {\r\n this.id = config.id ?? generateId(\"prpd\");\r\n this.config = {\r\n scalingFactor: 1,\r\n unitOfMeasurement: \"mVp\",\r\n maxPeak: 5000,\r\n minPeak: -5000,\r\n maxPhaseAngle: 360,\r\n resolutionLabel: { UniBi: \"BI\", HiLo: \"HI\" },\r\n windowingData: [],\r\n yAxisRange: 5000,\r\n isLowResolution: false,\r\n showColorPalette: true,\r\n showSineWave: true,\r\n colorMin: 0,\r\n colorMax: 100,\r\n ...config,\r\n };\r\n }\r\n\r\n /**\r\n * Initialize the chart in the given container\r\n */\r\n public async init(container: HTMLElement | string): Promise<void> {\r\n if (this.isDestroyed) {\r\n throw new Error(\"Cannot initialize a destroyed chart\");\r\n }\r\n\r\n // Resolve container (root element)\r\n if (typeof container === \"string\") {\r\n const el = document.getElementById(container);\r\n if (!el) {\r\n throw new Error(`Container element \"${container}\" not found`);\r\n }\r\n this.container = el;\r\n } else {\r\n this.container = container;\r\n }\r\n\r\n // Ensure root container has a unique ID for SciChart\r\n if (!this.container.id) {\r\n this.container.id = this.id;\r\n }\r\n\r\n // Determine chart host:\r\n // - If the root contains a \".chart-graph\" div, use that (Angular layout)\r\n // - Otherwise, mount directly into the root container\r\n const chartGraph = this.container.querySelector(\".chart-graph\") as HTMLDivElement | null;\r\n this.chartHost = chartGraph ?? (this.container as HTMLDivElement);\r\n\r\n // SciChart requires the host element to have an ID for canvas naming\r\n if (!this.chartHost.id) {\r\n this.chartHost.id = `${this.id}_host`;\r\n }\r\n\r\n // Create the SciChart surface\r\n await this.createSurface();\r\n }\r\n\r\n /**\r\n * Create the SciChart surface\r\n */\r\n private async createSurface(): Promise<void> {\r\n if (!this.container || !this.chartHost) {\r\n throw new Error(\"Container not set\");\r\n }\r\n\r\n // Configure SciChart to load WASM from CDN\r\n configureSciChartCDN();\r\n\r\n const theme = createPRPDTheme();\r\n\r\n const { sciChartSurface, wasmContext } = await SciChartSurface.create(\r\n this.chartHost,\r\n { theme }\r\n );\r\n\r\n this.surface = sciChartSurface;\r\n this.wasmContext = wasmContext;\r\n\r\n // Build initial data\r\n const verticalScaleMax = this.config.maxPeak || VERTICAL_SCALE_MAX_DEFAULT;\r\n const { zValues, multiplier, maxValue, totalCount, verticalResolution, isUnipolar } =\r\n buildZValues(\r\n this.config.data,\r\n this.config.scalingFactor!,\r\n this.config.minPeak!,\r\n this.config.maxPhaseAngle!,\r\n verticalScaleMax,\r\n this.config.resolutionLabel?.UniBi ?? \"BI\",\r\n this.config.resolutionLabel?.HiLo ?? \"HI\",\r\n this.config.windowingData,\r\n this.config.isLowResolution!\r\n );\r\n\r\n this.stats = { peakValue: maxValue, totalCount };\r\n\r\n const yAxisRange = this.config.yAxisRange || verticalScaleMax;\r\n\r\n // Create X Axis (Phase Angle)\r\n this.xAxis = new NumericAxis(wasmContext, {\r\n autoRange: EAutoRange.Never,\r\n labelFormat: ENumericFormat.Decimal,\r\n labelPrecision: 0,\r\n labelPostfix: \"°\",\r\n minorDelta: 2,\r\n majorDelta: 45,\r\n drawMajorBands: true,\r\n autoTicks: false,\r\n axisAlignment: EAxisAlignment.Bottom,\r\n axisTitle: \"Phase Angle (°)\",\r\n axisTitleStyle: {\r\n fontSize: 14,\r\n fontWeight: \"bold\",\r\n color: \"black\",\r\n },\r\n visibleRange: new NumberRange(0, 360),\r\n visibleRangeLimit: new NumberRange(0, 360),\r\n });\r\n\r\n // Create Y Axis (Amplitude)\r\n const yRange = isUnipolar\r\n ? new NumberRange(0, yAxisRange)\r\n : new NumberRange(-yAxisRange, yAxisRange);\r\n\r\n this.yAxis = new NumericAxis(wasmContext, {\r\n autoRange: EAutoRange.Never,\r\n labelFormat: ENumericFormat.Decimal,\r\n labelPrecision: 0,\r\n drawMajorBands: true,\r\n axisAlignment: EAxisAlignment.Right,\r\n axisTitle: `Amplitude (${this.config.unitOfMeasurement})`,\r\n axisTitleStyle: {\r\n fontSize: 14,\r\n fontWeight: \"bold\",\r\n color: \"black\",\r\n rotation: 270,\r\n },\r\n visibleRange: yRange,\r\n visibleRangeLimit: yRange,\r\n });\r\n\r\n sciChartSurface.xAxes.add(this.xAxis);\r\n sciChartSurface.yAxes.add(this.yAxis);\r\n\r\n // Create heatmap\r\n this.createHeatmap(zValues, multiplier, verticalResolution, isUnipolar);\r\n\r\n // Create sine wave overlay\r\n if (this.config.showSineWave) {\r\n this.createSineWave(yAxisRange, isUnipolar);\r\n }\r\n\r\n // Add chart modifiers\r\n const cursorModifier = new CursorModifier();\r\n cursorModifier.axisLabelFill = \"#FFFFFF\";\r\n cursorModifier.axisLabelStroke = \"#000000\";\r\n\r\n sciChartSurface.chartModifiers.add(\r\n cursorModifier,\r\n new RubberBandXyZoomModifier(),\r\n new ZoomExtentsModifier()\r\n );\r\n\r\n // Create legend\r\n if (this.config.showColorPalette) {\r\n await this.createHeatmapLegend();\r\n }\r\n\r\n // Notify stats\r\n this.onStatsChange?.(this.stats);\r\n }\r\n\r\n private createHeatmap(\r\n zValues: number[][],\r\n multiplier: number,\r\n verticalResolution: number,\r\n isUnipolar: boolean\r\n ): void {\r\n if (!this.surface || !this.wasmContext) return;\r\n\r\n const colorStops = this.config.colorStops ?? defaultPRPDColorStops;\r\n\r\n this.heatmapColorMap = new HeatmapColorMap({\r\n minimum: this.config.colorMin ?? 0,\r\n maximum: this.config.colorMax ?? 100,\r\n gradientStops: colorStops,\r\n });\r\n\r\n this.heatmapDataSeries = new UniformHeatmapDataSeries(this.wasmContext, {\r\n zValues,\r\n xStart: 0,\r\n xStep: HORIZONTAL_RESOLUTION_MULTIPLIER,\r\n yStart: isUnipolar ? 0 : (-1 * verticalResolution * multiplier) / 2,\r\n yStep: multiplier,\r\n });\r\n\r\n this.heatmapSeries = new UniformHeatmapRenderableSeries(this.wasmContext, {\r\n dataSeries: this.heatmapDataSeries,\r\n colorMap: this.heatmapColorMap,\r\n });\r\n\r\n this.surface.renderableSeries.add(this.heatmapSeries);\r\n }\r\n\r\n private createSineWave(yAxisRange: number, isUnipolar: boolean): void {\r\n if (!this.surface || !this.wasmContext) return;\r\n\r\n const sineAmplitude = isUnipolar ? yAxisRange / 2 : yAxisRange;\r\n const sineOffset = isUnipolar ? yAxisRange / 2 : 0;\r\n\r\n const sineWaveData = generateSineWaveData(0, 360, sineAmplitude, 1, 0, 1, sineOffset);\r\n\r\n this.sineDataSeries = new XyDataSeries(this.wasmContext);\r\n sineWaveData.forEach(([x, y]) => this.sineDataSeries!.append(x, y));\r\n\r\n this.sineLineSeries = new FastLineRenderableSeries(this.wasmContext, {\r\n dataSeries: this.sineDataSeries,\r\n stroke: \"Black\",\r\n strokeThickness: 3,\r\n });\r\n\r\n this.surface.renderableSeries.add(this.sineLineSeries);\r\n }\r\n\r\n private async createHeatmapLegend(): Promise<void> {\r\n if (!this.container || !this.heatmapColorMap) return;\r\n\r\n this.clearHeatmapLegend();\r\n\r\n // If a dedicated legend host exists (e.g. Angular wrapper's \".heatmap-chart\"),\r\n // use that; otherwise create a positioned div inside the root container.\r\n let div = this.container.querySelector(\".heatmap-chart\") as HTMLDivElement | null;\r\n if (!div) {\r\n div = document.createElement(\"div\");\r\n div.className = \"heatmap-chart\";\r\n div.style.position = \"absolute\";\r\n div.style.top = \"40px\";\r\n div.style.left = \"0px\";\r\n div.style.bottom = \"40px\";\r\n div.style.width = \"65px\";\r\n div.style.pointerEvents = \"none\";\r\n this.container.appendChild(div);\r\n }\r\n // SciChart HeatmapLegend requires the host element to have an ID\r\n if (!div.id) {\r\n div.id = `${this.id}_legend`;\r\n }\r\n this.heatmapLegendDiv = div;\r\n\r\n const min = this.config.colorMin ?? 0;\r\n const max = this.config.colorMax ?? 100;\r\n\r\n const { heatmapLegend } = await HeatmapLegend.create(div, {\r\n theme: createLegendTheme(),\r\n yAxisOptions: {\r\n visibleRange: new NumberRange(min, max),\r\n majorDelta: (max - min) / 5,\r\n minorDelta: (max - min) / 10,\r\n labelFormat: ENumericFormat.Decimal,\r\n labelPrecision: 0,\r\n labelPadding: 6,\r\n axisTitleGap: 8,\r\n labelStyle: { fontSize: 12, color: \"#A0A0A0\" },\r\n majorTickLineStyle: {\r\n color: \"#A0A0A0\",\r\n tickSize: 8,\r\n strokeThickness: 1,\r\n },\r\n minorTickLineStyle: {\r\n color: \"gray\",\r\n tickSize: 5,\r\n strokeThickness: 1,\r\n },\r\n axisBorder: {\r\n borderLeft: 0,\r\n borderRight: 0,\r\n borderTop: 0,\r\n borderBottom: 0,\r\n color: \"transparent\",\r\n },\r\n } as any,\r\n colorMap: this.heatmapColorMap,\r\n });\r\n\r\n this.heatmapLegend = heatmapLegend;\r\n }\r\n\r\n private clearHeatmapLegend(): void {\r\n if (this.heatmapLegend) {\r\n try {\r\n this.heatmapLegend.delete();\r\n } catch (e) {\r\n // Ignore deletion errors\r\n }\r\n this.heatmapLegend = null;\r\n }\r\n if (this.heatmapLegendDiv) {\r\n this.heatmapLegendDiv.remove();\r\n this.heatmapLegendDiv = null;\r\n }\r\n }\r\n\r\n /**\r\n * Update chart with new data\r\n */\r\n public updateData(data: PRPDDataPoint[]): void {\r\n this.config.data = data;\r\n this.refresh();\r\n }\r\n\r\n /**\r\n * Update resolution label (UNI/BI, HI/LO)\r\n */\r\n public setResolutionLabel(label: PRPDResolutionLabel): void {\r\n this.config.resolutionLabel = label;\r\n this.refresh();\r\n }\r\n\r\n /**\r\n * Update windowing data\r\n */\r\n public setWindowingData(windowingData: PRPDWindowingRegion[]): void {\r\n this.config.windowingData = windowingData;\r\n this.refresh();\r\n }\r\n\r\n /**\r\n * Update Y-axis range\r\n */\r\n public setYAxisRange(range: number): void {\r\n this.config.yAxisRange = range;\r\n this.refresh();\r\n }\r\n\r\n /**\r\n * Set stats change callback\r\n */\r\n public onStats(callback: (stats: PRPDChartStats) => void): void {\r\n this.onStatsChange = callback;\r\n }\r\n\r\n /**\r\n * Get current statistics\r\n */\r\n public getStats(): PRPDChartStats {\r\n return { ...this.stats };\r\n }\r\n\r\n /**\r\n * Refresh the chart with current configuration\r\n */\r\n public refresh(): void {\r\n if (!this.surface || !this.wasmContext) return;\r\n\r\n const verticalScaleMax = this.config.maxPeak || VERTICAL_SCALE_MAX_DEFAULT;\r\n const yAxisRange = this.config.yAxisRange || verticalScaleMax;\r\n\r\n const { zValues, multiplier, maxValue, totalCount, verticalResolution, isUnipolar } =\r\n buildZValues(\r\n this.config.data,\r\n this.config.scalingFactor!,\r\n this.config.minPeak!,\r\n this.config.maxPhaseAngle!,\r\n verticalScaleMax,\r\n this.config.resolutionLabel?.UniBi ?? \"BI\",\r\n this.config.resolutionLabel?.HiLo ?? \"HI\",\r\n this.config.windowingData,\r\n this.config.isLowResolution!\r\n );\r\n\r\n this.stats = { peakValue: maxValue, totalCount };\r\n\r\n // Update Y axis range\r\n if (this.yAxis) {\r\n const yRange = isUnipolar\r\n ? new NumberRange(0, yAxisRange)\r\n : new NumberRange(-yAxisRange, yAxisRange);\r\n this.yAxis.visibleRange = yRange;\r\n this.yAxis.visibleRangeLimit = yRange;\r\n }\r\n\r\n // Update heatmap data series\r\n if (this.heatmapDataSeries) {\r\n const needNewDs =\r\n this.heatmapDataSeries.arrayHeight !== verticalResolution ||\r\n this.heatmapDataSeries.arrayWidth !== HORIZONTAL_RESOLUTION;\r\n\r\n if (needNewDs) {\r\n // Need to recreate data series\r\n if (this.heatmapSeries) {\r\n this.surface.renderableSeries.remove(this.heatmapSeries);\r\n this.heatmapSeries.delete();\r\n }\r\n this.heatmapDataSeries.delete();\r\n\r\n this.heatmapDataSeries = new UniformHeatmapDataSeries(this.wasmContext, {\r\n zValues,\r\n xStart: 0,\r\n xStep: HORIZONTAL_RESOLUTION_MULTIPLIER,\r\n yStart: isUnipolar ? 0 : (-1 * verticalResolution * multiplier) / 2,\r\n yStep: multiplier,\r\n });\r\n\r\n this.heatmapSeries = new UniformHeatmapRenderableSeries(this.wasmContext, {\r\n dataSeries: this.heatmapDataSeries,\r\n colorMap: this.heatmapColorMap!,\r\n });\r\n\r\n this.surface.renderableSeries.add(this.heatmapSeries);\r\n } else {\r\n // Just update values\r\n if (typeof (this.heatmapDataSeries as any).setZValues === \"function\") {\r\n (this.heatmapDataSeries as any).setZValues(zValues);\r\n } else {\r\n (this.heatmapDataSeries as any).zValues = zValues;\r\n }\r\n this.heatmapDataSeries.yStart = isUnipolar\r\n ? 0\r\n : (-1 * verticalResolution * multiplier) / 2;\r\n this.heatmapDataSeries.yStep = multiplier;\r\n }\r\n }\r\n\r\n // Update sine wave\r\n if (this.sineDataSeries && this.config.showSineWave) {\r\n this.sineDataSeries.clear();\r\n const sineAmplitude = isUnipolar ? yAxisRange / 2 : yAxisRange;\r\n const sineOffset = isUnipolar ? yAxisRange / 2 : 0;\r\n const sineWaveData = generateSineWaveData(0, 360, sineAmplitude, 1, 0, 1, sineOffset);\r\n sineWaveData.forEach(([x, y]) => this.sineDataSeries!.append(x, y));\r\n }\r\n\r\n this.surface.invalidateElement();\r\n this.onStatsChange?.(this.stats);\r\n }\r\n\r\n /**\r\n * Set chart options\r\n */\r\n public setOptions(options: Partial<PRPDChartConfig>): void {\r\n this.config = { ...this.config, ...options };\r\n this.refresh();\r\n }\r\n\r\n /**\r\n * Reset zoom to full extent\r\n */\r\n public resetZoom(): void {\r\n if (!this.surface) return;\r\n this.surface.zoomExtents();\r\n }\r\n\r\n /**\r\n * Export chart as image\r\n */\r\n public async exportImage(format: \"png\" | \"jpeg\" = \"png\"): Promise<string> {\r\n if (!this.container) {\r\n throw new Error(\"Chart not initialized\");\r\n }\r\n\r\n const canvas = this.container.querySelector(\"canvas\");\r\n if (!canvas) {\r\n throw new Error(\"Canvas not found\");\r\n }\r\n\r\n const mimeType = format === \"jpeg\" ? \"image/jpeg\" : \"image/png\";\r\n return canvas.toDataURL(mimeType);\r\n }\r\n\r\n /**\r\n * Get current configuration\r\n */\r\n public getConfig(): PRPDChartConfig {\r\n return { ...this.config };\r\n }\r\n\r\n /**\r\n * Check if chart is ready\r\n */\r\n public isReady(): boolean {\r\n return this.surface !== null && !this.isDestroyed;\r\n }\r\n\r\n /**\r\n * Destroy and clean up\r\n */\r\n public destroy(): void {\r\n if (this.isDestroyed) return;\r\n \r\n // Mark as destroyed immediately to prevent re-entry\r\n this.isDestroyed = true;\r\n\r\n try {\r\n this.clearHeatmapLegend();\r\n } catch (e) {\r\n // Ignore cleanup errors\r\n }\r\n\r\n try {\r\n if (this.sineLineSeries && this.surface) {\r\n this.surface.renderableSeries.remove(this.sineLineSeries);\r\n this.sineLineSeries.delete();\r\n }\r\n } catch (e) {\r\n // Ignore cleanup errors\r\n }\r\n this.sineLineSeries = null;\r\n\r\n try {\r\n if (this.sineDataSeries) {\r\n this.sineDataSeries.delete();\r\n }\r\n } catch (e) {\r\n // Ignore cleanup errors\r\n }\r\n this.sineDataSeries = null;\r\n\r\n try {\r\n if (this.heatmapSeries && this.surface) {\r\n this.surface.renderableSeries.remove(this.heatmapSeries);\r\n this.heatmapSeries.delete();\r\n }\r\n } catch (e) {\r\n // Ignore cleanup errors\r\n }\r\n this.heatmapSeries = null;\r\n\r\n try {\r\n if (this.heatmapDataSeries) {\r\n this.heatmapDataSeries.delete();\r\n }\r\n } catch (e) {\r\n // Ignore cleanup errors\r\n }\r\n this.heatmapDataSeries = null;\r\n\r\n try {\r\n if (this.surface) {\r\n // Clear modifiers first to prevent SVG cleanup errors\r\n this.surface.chartModifiers.clear();\r\n this.surface.delete();\r\n }\r\n } catch (e) {\r\n // Ignore cleanup errors - DOM elements may already be removed\r\n }\r\n this.surface = null;\r\n }\r\n}\r\n\r\n/**\r\n * Factory function to create a PRPD chart\r\n */\r\nexport async function createPRPDChart(\r\n container: HTMLElement | string,\r\n config: PRPDChartConfig\r\n): Promise<PRPDChart> {\r\n const chart = new PRPDChart(config);\r\n await chart.init(container);\r\n return chart;\r\n}\r\n","/**\r\n * SciChart UI - A customizable charting library built on SciChart\r\n * \r\n * @packageDocumentation\r\n */\r\n\r\n// Re-export all types\r\nexport type {\r\n // Chart configurations\r\n ChartConfig,\r\n PieChartConfig,\r\n ScatterChartConfig,\r\n Surface3DChartConfig,\r\n PRPDChartConfig,\r\n AnimationConfig,\r\n TooltipConfig,\r\n TooltipData,\r\n LegendConfig,\r\n TitleConfig,\r\n \r\n // Axis configurations\r\n AxisConfig,\r\n XAxisConfig,\r\n YAxisConfig,\r\n GridLineConfig,\r\n \r\n // Data types\r\n DataPoint,\r\n SeriesData,\r\n ChartType,\r\n PRPDDataPoint,\r\n PRPDResolutionMode,\r\n PRPDResolutionQuality,\r\n PRPDResolutionLabel,\r\n PRPDWindowingRegion,\r\n PRPDChartStats,\r\n \r\n // Theme types\r\n ThemeConfig,\r\n \r\n // Event types\r\n ChartEventMap,\r\n ChartClickEvent,\r\n ChartHoverEvent,\r\n LegendClickEvent,\r\n ZoomEvent,\r\n PanEvent,\r\n RenderedEvent,\r\n \r\n // Instance types\r\n ChartInstance,\r\n} from \"./types\";\r\n\r\n// Export charts\r\nexport {\r\n BaseChart,\r\n Surface3DChart,\r\n createSurface3DChart,\r\n Column3DChart,\r\n createColumn3DChart,\r\n PRPDChart,\r\n createPRPDChart,\r\n type Column3DChartConfig,\r\n type Column3DDataPoint,\r\n} from \"./charts\";\r\n\r\n// Export themes\r\nexport {\r\n lightTheme,\r\n darkTheme,\r\n modernTheme,\r\n midnightTheme,\r\n ThemeManager,\r\n getThemeManager,\r\n} from \"./themes\";\r\n\r\n// Export utilities\r\nexport {\r\n generateId,\r\n parseSize,\r\n normalizeDataPoints,\r\n extractXValues,\r\n extractYValues,\r\n deepMerge,\r\n debounce,\r\n throttle,\r\n calculateDataRange,\r\n formatNumber,\r\n clamp,\r\n lerp,\r\n hexToRgba,\r\n} from \"./utils\";\r\n\r\n// Library version\r\nexport const VERSION = \"0.1.1\";\r\n\r\n// SciChart configuration helper\r\nexport { SciChartSurface } from \"scichart\";\r\n\r\n// SciChart version for CDN URLs\r\nconst SCICHART_VERSION = \"4.0.933\";\r\n\r\n// Default CDN URLs for SciChart WASM files\r\nconst DEFAULT_WASM_URL = `https://cdn.jsdelivr.net/npm/scichart@${SCICHART_VERSION}/_wasm/scichart2d.wasm`;\r\n\r\n// Auto-configure SciChart with CDN on package import\r\nlet isConfigured = false;\r\n\r\nfunction autoConfigureSciChart(): void {\r\n if (isConfigured) return;\r\n \r\n try {\r\n // eslint-disable-next-line @typescript-eslint/no-require-imports\r\n const { SciChartSurface } = require(\"scichart\");\r\n SciChartSurface.configure({\r\n wasmUrl: DEFAULT_WASM_URL,\r\n });\r\n isConfigured = true;\r\n } catch {\r\n // SciChart not available, skip auto-configuration\r\n }\r\n}\r\n\r\n// Run auto-configuration on import\r\nautoConfigureSciChart();\r\n\r\n/**\r\n * Configure SciChart WebAssembly location\r\n * By default, the package auto-configures to use CDN. \r\n * Call this to override with custom paths.\r\n * \r\n * @example\r\n * ```ts\r\n * import { configureSciChart } from '@rm-graph/core';\r\n * \r\n * // Use local WASM files\r\n * configureSciChart({\r\n * wasmUrl: '/scichart2d.wasm'\r\n * });\r\n * ```\r\n */\r\nexport function configureSciChart(options: {\r\n wasmUrl?: string;\r\n}): void {\r\n try {\r\n // eslint-disable-next-line @typescript-eslint/no-require-imports\r\n const { SciChartSurface } = require(\"scichart\");\r\n SciChartSurface.configure({\r\n wasmUrl: options.wasmUrl || DEFAULT_WASM_URL,\r\n });\r\n isConfigured = true;\r\n } catch {\r\n // SciChart not available\r\n }\r\n}\r\n\r\n"]}
1
+ {"version":3,"sources":["../src/utils/helpers.ts","../src/charts/BaseChart.ts","../src/charts/Surface3DChart.ts","../src/charts/Column3DChart.ts","../src/charts/PRPDChart.ts","../src/index.ts"],"names":["SciChartSurface","ThemeManager","SciChartJSLightTheme","__require","SCICHART_VERSION","SciChart3DSurface","NumericAxis3D","MouseWheelZoomModifier3D","OrbitModifier3D","CameraController","Vector3","UniformGridDataSeries3D","GradientColorPalette","SurfaceMeshRenderableSeries3D","EDrawMeshAs","sciChart3DConfigured","ensureSciChart3DConfigured","NumberRange","XyzDataSeries3D","ColumnRenderableSeries3D","PointLineRenderableSeries3D","TooltipModifier3D","sciChartConfigured","NumericAxis","EAutoRange","ENumericFormat","EAxisAlignment","CursorModifier","RubberBandXyZoomModifier","ZoomExtentsModifier","HeatmapColorMap","UniformHeatmapDataSeries","UniformHeatmapRenderableSeries","XyDataSeries","FastLineRenderableSeries","HeatmapLegend"],"mappings":";;;;;;;AAKO,SAAS,UAAA,CAAW,SAAiB,OAAA,EAAiB;AAC3D,EAAA,OAAO,CAAA,EAAG,MAAM,CAAA,CAAA,EAAI,IAAA,CAAK,MAAA,EAAO,CAAE,QAAA,CAAS,EAAE,CAAA,CAAE,SAAA,CAAU,CAAA,EAAG,EAAE,CAAC,CAAA,CAAA;AACjE;AAKO,SAAS,SAAA,CAAU,OAAoC,QAAA,EAA0B;AACtF,EAAA,IAAI,KAAA,KAAU,QAAW,OAAO,QAAA;AAChC,EAAA,IAAI,OAAO,KAAA,KAAU,QAAA,EAAU,OAAO,KAAA;AAGtC,EAAA,IAAI,KAAA,CAAM,QAAA,CAAS,GAAG,CAAA,EAAG;AACvB,IAAA,OAAO,QAAA;AAAA,EACT;AAGA,EAAA,MAAM,MAAA,GAAS,QAAA,CAAS,KAAA,EAAO,EAAE,CAAA;AACjC,EAAA,OAAO,KAAA,CAAM,MAAM,CAAA,GAAI,QAAA,GAAW,MAAA;AACpC;AAKO,SAAS,oBAAoB,IAAA,EAA2C;AAC7E,EAAA,IAAI,IAAA,CAAK,MAAA,KAAW,CAAA,EAAG,OAAO,EAAC;AAG/B,EAAA,IAAI,OAAO,KAAK,CAAC,CAAA,KAAM,YAAY,GAAA,IAAO,IAAA,CAAK,CAAC,CAAA,EAAG;AACjD,IAAA,OAAO,IAAA;AAAA,EACT;AAGA,EAAA,OAAQ,IAAA,CAAkB,GAAA,CAAI,CAAC,CAAA,EAAG,KAAA,MAAW;AAAA,IAC3C,CAAA,EAAG,KAAA;AAAA,IACH;AAAA,GACF,CAAE,CAAA;AACJ;AAKO,SAAS,eAAe,IAAA,EAA6B;AAC1D,EAAA,OAAO,IAAA,CAAK,GAAA,CAAI,CAAC,KAAA,KAAU;AACzB,IAAA,IAAI,OAAO,KAAA,CAAM,CAAA,KAAM,QAAA,SAAiB,KAAA,CAAM,CAAA;AAC9C,IAAA,IAAI,MAAM,CAAA,YAAa,IAAA,EAAM,OAAO,KAAA,CAAM,EAAE,OAAA,EAAQ;AACpD,IAAA,OAAO,CAAA;AAAA,EACT,CAAC,CAAA;AACH;AAKO,SAAS,eAAe,IAAA,EAA6B;AAC1D,EAAA,OAAO,IAAA,CAAK,GAAA,CAAI,CAAC,KAAA,KAAU,MAAM,CAAC,CAAA;AACpC;AAKO,SAAS,SAAA,CACd,QACA,MAAA,EACG;AACH,EAAA,MAAM,MAAA,GAAS,EAAE,GAAG,MAAA,EAAO;AAE3B,EAAA,KAAA,MAAW,OAAO,MAAA,EAAQ;AACxB,IAAA,IAAI,OAAO,SAAA,CAAU,cAAA,CAAe,IAAA,CAAK,MAAA,EAAQ,GAAG,CAAA,EAAG;AACrD,MAAA,MAAM,WAAA,GAAc,OAAO,GAAG,CAAA;AAC9B,MAAA,MAAM,WAAA,GAAc,OAAO,GAAG,CAAA;AAE9B,MAAA,IACE,gBAAgB,IAAA,IAChB,OAAO,gBAAgB,QAAA,IACvB,CAAC,MAAM,OAAA,CAAQ,WAAW,KAC1B,WAAA,KAAgB,IAAA,IAChB,OAAO,WAAA,KAAgB,QAAA,IACvB,CAAC,KAAA,CAAM,OAAA,CAAQ,WAAW,CAAA,EAC1B;AACA,QAAC,MAAA,CAAmC,GAAG,CAAA,GAAI,SAAA;AAAA,UACzC,WAAA;AAAA,UACA;AAAA,SACF;AAAA,MACF,CAAA,MAAA,IAAW,gBAAgB,MAAA,EAAW;AACpC,QAAC,MAAA,CAAmC,GAAG,CAAA,GAAI,WAAA;AAAA,MAC7C;AAAA,IACF;AAAA,EACF;AAEA,EAAA,OAAO,MAAA;AACT;AAKO,SAAS,QAAA,CACd,IACA,KAAA,EACkC;AAClC,EAAA,IAAI,SAAA,GAAkD,IAAA;AAEtD,EAAA,OAAO,IAAI,IAAA,KAAwB;AACjC,IAAA,IAAI,SAAA,EAAW;AACb,MAAA,YAAA,CAAa,SAAS,CAAA;AAAA,IACxB;AACA,IAAA,SAAA,GAAY,WAAW,MAAM;AAC3B,MAAA,EAAA,CAAG,GAAG,IAAI,CAAA;AACV,MAAA,SAAA,GAAY,IAAA;AAAA,IACd,GAAG,KAAK,CAAA;AAAA,EACV,CAAA;AACF;AAKO,SAAS,QAAA,CACd,IACA,KAAA,EACkC;AAClC,EAAA,IAAI,UAAA,GAAa,KAAA;AAEjB,EAAA,OAAO,IAAI,IAAA,KAAwB;AACjC,IAAA,IAAI,CAAC,UAAA,EAAY;AACf,MAAA,EAAA,CAAG,GAAG,IAAI,CAAA;AACV,MAAA,UAAA,GAAa,IAAA;AACb,MAAA,UAAA,CAAW,MAAM;AACf,QAAA,UAAA,GAAa,KAAA;AAAA,MACf,GAAG,KAAK,CAAA;AAAA,IACV;AAAA,EACF,CAAA;AACF;AAKO,SAAS,mBAAmB,MAAA,EAKjC;AACA,EAAA,IAAI,IAAA,GAAO,QAAA;AACX,EAAA,IAAI,IAAA,GAAO,CAAA,QAAA;AACX,EAAA,IAAI,IAAA,GAAO,QAAA;AACX,EAAA,IAAI,IAAA,GAAO,CAAA,QAAA;AAEX,EAAA,KAAA,MAAW,KAAK,MAAA,EAAQ;AACtB,IAAA,MAAM,UAAA,GAAa,mBAAA,CAAoB,CAAA,CAAE,IAAI,CAAA;AAC7C,IAAA,KAAA,MAAW,SAAS,UAAA,EAAY;AAC9B,MAAA,MAAM,IAAI,OAAO,KAAA,CAAM,CAAA,KAAM,QAAA,GAAW,MAAM,CAAA,GAAI,CAAA;AAClD,MAAA,IAAA,GAAO,IAAA,CAAK,GAAA,CAAI,IAAA,EAAM,CAAC,CAAA;AACvB,MAAA,IAAA,GAAO,IAAA,CAAK,GAAA,CAAI,IAAA,EAAM,CAAC,CAAA;AACvB,MAAA,IAAA,GAAO,IAAA,CAAK,GAAA,CAAI,IAAA,EAAM,KAAA,CAAM,CAAC,CAAA;AAC7B,MAAA,IAAA,GAAO,IAAA,CAAK,GAAA,CAAI,IAAA,EAAM,KAAA,CAAM,CAAC,CAAA;AAAA,IAC/B;AAAA,EACF;AAEA,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,IAAA,KAAS,QAAA,GAAW,CAAA,GAAI,IAAA;AAAA,IAC9B,IAAA,EAAM,IAAA,KAAS,CAAA,QAAA,GAAY,GAAA,GAAM,IAAA;AAAA,IACjC,IAAA,EAAM,IAAA,KAAS,QAAA,GAAW,CAAA,GAAI,IAAA;AAAA,IAC9B,IAAA,EAAM,IAAA,KAAS,CAAA,QAAA,GAAY,GAAA,GAAM;AAAA,GACnC;AACF;AAKO,SAAS,YAAA,CAAa,KAAA,EAAe,SAAA,GAAoB,CAAA,EAAW;AACzE,EAAA,IAAI,IAAA,CAAK,GAAA,CAAI,KAAK,CAAA,IAAK,GAAA,EAAK;AAC1B,IAAA,OAAA,CAAQ,KAAA,GAAQ,GAAA,EAAK,OAAA,CAAQ,SAAS,CAAA,GAAI,GAAA;AAAA,EAC5C;AACA,EAAA,IAAI,IAAA,CAAK,GAAA,CAAI,KAAK,CAAA,IAAK,GAAA,EAAK;AAC1B,IAAA,OAAA,CAAQ,KAAA,GAAQ,GAAA,EAAK,OAAA,CAAQ,SAAS,CAAA,GAAI,GAAA;AAAA,EAC5C;AACA,EAAA,IAAI,IAAA,CAAK,GAAA,CAAI,KAAK,CAAA,IAAK,GAAA,EAAK;AAC1B,IAAA,OAAA,CAAQ,KAAA,GAAQ,GAAA,EAAK,OAAA,CAAQ,SAAS,CAAA,GAAI,GAAA;AAAA,EAC5C;AACA,EAAA,OAAO,KAAA,CAAM,QAAQ,SAAS,CAAA;AAChC;AAKO,SAAS,KAAA,CAAM,KAAA,EAAe,GAAA,EAAa,GAAA,EAAqB;AACrE,EAAA,OAAO,KAAK,GAAA,CAAI,IAAA,CAAK,IAAI,KAAA,EAAO,GAAG,GAAG,GAAG,CAAA;AAC3C;AAKO,SAAS,IAAA,CAAK,KAAA,EAAe,GAAA,EAAa,CAAA,EAAmB;AAClE,EAAA,OAAO,SAAS,GAAA,GAAM,KAAA,IAAS,KAAA,CAAM,CAAA,EAAG,GAAG,CAAC,CAAA;AAC9C;AAKO,SAAS,SAAA,CAAU,GAAA,EAAa,KAAA,GAAgB,CAAA,EAAW;AAChE,EAAA,MAAM,MAAA,GAAS,2CAAA,CAA4C,IAAA,CAAK,GAAG,CAAA;AACnE,EAAA,IAAI,CAAC,QAAQ,OAAO,GAAA;AAEpB,EAAA,MAAM,CAAA,GAAI,QAAA,CAAS,MAAA,CAAO,CAAC,GAAG,EAAE,CAAA;AAChC,EAAA,MAAM,CAAA,GAAI,QAAA,CAAS,MAAA,CAAO,CAAC,GAAG,EAAE,CAAA;AAChC,EAAA,MAAM,CAAA,GAAI,QAAA,CAAS,MAAA,CAAO,CAAC,GAAG,EAAE,CAAA;AAEhC,EAAA,OAAO,QAAQ,CAAC,CAAA,EAAA,EAAK,CAAC,CAAA,EAAA,EAAK,CAAC,KAAK,KAAK,CAAA,CAAA,CAAA;AACxC;;;ACxMA,IAAM,gBAAA,GAAmB,SAAA;AACzB,IAAI,kBAAA,GAAqB,KAAA;AAEzB,SAAS,wBAAA,GAAiC;AACxC,EAAA,IAAI,kBAAA,EAAoB;AACxB,EAAA,IAAI;AACF,IAAAA,wBAAA,CAAgB,cAAA,EAAe;AAC/B,IAAA,kBAAA,GAAqB,IAAA;AAAA,EACvB,CAAA,CAAA,MAAQ;AAEN,IAAA,IAAI;AACF,MAAAA,wBAAA,CAAgB,SAAA,CAAU;AAAA,QACxB,OAAA,EAAS,yCAAyC,gBAAgB,CAAA,sBAAA;AAAA,OACnE,CAAA;AACD,MAAA,kBAAA,GAAqB,IAAA;AAAA,IACvB,CAAA,CAAA,MAAQ;AAAA,IAER;AAAA,EACF;AACF;AASO,IAAe,YAAf,MAA+E;AAAA,EAgBpF,YAAY,MAAA,EAAiB;AAd7B,IAAA,IAAA,CAAU,SAAA,GAAgC,IAAA;AAC1C,IAAA,IAAA,CAAU,OAAA,GAAsC,IAAA;AAGhD,IAAA,IAAA,CAAU,aAAA,GAAyB,KAAA;AACnC,IAAA,IAAA,CAAU,WAAA,GAAuB,KAAA;AAGjC;AAAA,IAAA,IAAA,CAAQ,aAAA,uBAAyE,GAAA,EAAI;AAGrF;AAAA,IAAA,IAAA,CAAQ,cAAA,GAAwC,IAAA;AAI9C,IAAA,IAAA,CAAK,EAAA,GAAK,MAAA,CAAO,EAAA,IAAM,UAAA,CAAW,OAAO,CAAA;AACzC,IAAA,IAAA,CAAK,MAAA,GAAS,MAAA;AACd,IAAA,IAAA,CAAK,QAAQC,6BAAA,CAAa,WAAA,EAAY,CAAE,YAAA,CAAa,OAAO,KAAK,CAAA;AACjE,IAAA,IAAA,CAAK,kBAAkB,QAAA,CAAS,MAAM,IAAA,CAAK,YAAA,IAAgB,GAAG,CAAA;AAAA,EAChE;AAAA;AAAA;AAAA;AAAA,EAKA,MAAa,KAAK,SAAA,EAAgD;AAChE,IAAA,IAAI,KAAK,WAAA,EAAa;AACpB,MAAA,MAAM,IAAI,MAAM,qCAAqC,CAAA;AAAA,IACvD;AAGA,IAAA,IAAI,OAAO,cAAc,QAAA,EAAU;AACjC,MAAA,MAAM,EAAA,GAAK,QAAA,CAAS,cAAA,CAAe,SAAS,CAAA;AAC5C,MAAA,IAAI,CAAC,EAAA,EAAI;AACP,QAAA,MAAM,IAAI,KAAA,CAAM,CAAA,mBAAA,EAAsB,SAAS,CAAA,WAAA,CAAa,CAAA;AAAA,MAC9D;AACA,MAAA,IAAA,CAAK,SAAA,GAAY,EAAA;AAAA,IACnB,CAAA,MAAO;AACL,MAAA,IAAA,CAAK,SAAA,GAAY,SAAA;AAAA,IACnB;AAGA,IAAA,IAAA,CAAK,cAAA,EAAe;AAGpB,IAAA,IAAA,CAAK,yBAAA,EAA0B;AAG/B,IAAA,MAAM,KAAK,aAAA,EAAc;AAGzB,IAAA,IAAA,CAAK,mBAAA,EAAoB;AAEzB,IAAA,IAAA,CAAK,aAAA,GAAgB,IAAA;AACrB,IAAA,IAAA,CAAK,IAAA,CAAK,UAAA,EAAY,EAAE,OAAA,EAAS,IAAA,CAAK,IAAI,UAAA,EAAY,WAAA,CAAY,GAAA,EAAI,EAAG,CAAA;AAAA,EAC3E;AAAA;AAAA;AAAA;AAAA,EAKQ,cAAA,GAAuB;AAC7B,IAAA,IAAI,CAAC,KAAK,SAAA,EAAW;AAErB,IAAA,MAAM,EAAE,KAAA,EAAO,MAAA,EAAO,GAAI,IAAA,CAAK,MAAA;AAG/B,IAAA,IAAI,KAAA,EAAO;AACT,MAAA,IAAA,CAAK,SAAA,CAAU,MAAM,KAAA,GACnB,OAAO,UAAU,QAAA,GAAW,CAAA,EAAG,KAAK,CAAA,EAAA,CAAA,GAAO,KAAA;AAAA,IAC/C;AACA,IAAA,IAAI,MAAA,EAAQ;AACV,MAAA,IAAA,CAAK,SAAA,CAAU,MAAM,MAAA,GACnB,OAAO,WAAW,QAAA,GAAW,CAAA,EAAG,MAAM,CAAA,EAAA,CAAA,GAAO,MAAA;AAAA,IACjD;AAGA,IAAA,MAAM,aAAA,GAAgB,MAAA,CAAO,gBAAA,CAAiB,IAAA,CAAK,SAAS,CAAA;AAC5D,IAAA,IAAI,aAAA,CAAc,aAAa,QAAA,EAAU;AACvC,MAAA,IAAA,CAAK,SAAA,CAAU,MAAM,QAAA,GAAW,UAAA;AAAA,IAClC;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKQ,yBAAA,GAAkC;AACxC,IAAA,wBAAA,EAAyB;AAAA,EAC3B;AAAA;AAAA;AAAA;AAAA,EAeO,WAAW,OAAA,EAAiC;AACjD,IAAA,IAAA,CAAK,SAAS,EAAE,GAAG,IAAA,CAAK,MAAA,EAAQ,GAAG,OAAA,EAAQ;AAG3C,IAAA,IAAI,QAAQ,KAAA,EAAO;AACjB,MAAA,IAAA,CAAK,QAAQA,6BAAA,CAAa,WAAA,EAAY,CAAE,YAAA,CAAa,QAAQ,KAAK,CAAA;AAClE,MAAA,IAAA,CAAK,UAAA,EAAW;AAAA,IAClB;AAGA,IAAA,IAAA,CAAK,MAAA,EAAO;AAAA,EACd;AAAA;AAAA;AAAA;AAAA,EAKU,UAAA,GAAmB;AAC3B,IAAA,IAAI,CAAC,KAAK,OAAA,EAAS;AAEnB,IAAA,IAAA,CAAK,OAAA,CAAQ,UAAA,GAAa,IAAA,CAAK,KAAA,CAAM,eAAA,IAAmB,SAAA;AAIxD,IAAA,IAAI;AACF,MAAA,MAAM,SAAA,GAAa,KAAK,MAAA,CAAO,KAAA;AAG/B,MAAA,MAAM,EAAE,mBAAA,EAAqB,oBAAA,EAAAC,qBAAAA,EAAqB,GAAIC,2BAAQ,UAAU,CAAA;AACxE,MAAA,MAAM,oBACJ,SAAA,KAAc,OAAA,GAAU,IAAID,qBAAAA,EAAqB,GAAI,IAAI,mBAAA,EAAoB;AAC/E,MAAC,IAAA,CAAK,OAAA,CAAgB,UAAA,GAAa,iBAAiB,CAAA;AAAA,IACtD,CAAA,CAAA,MAAQ;AAAA,IAER;AAGA,IAAA,IAAI;AACF,MAAA,MAAM,cAAA,GAAiB,CAAC,IAAA,KAAc;AACpC,QAAA,IAAI,CAAC,IAAA,EAAM;AACX,QAAA,IAAA,CAAK,cAAA,GAAiB;AAAA,UACpB,GAAI,IAAA,CAAK,cAAA,IAAkB,EAAC;AAAA,UAC5B,KAAA,EAAO,IAAA,CAAK,KAAA,CAAM,IAAA,EAAM,UAAA;AAAA,UACxB,UAAA,EAAY,KAAK,KAAA,CAAM;AAAA,SACzB;AACA,QAAA,IAAA,CAAK,UAAA,GAAa;AAAA,UAChB,GAAI,IAAA,CAAK,UAAA,IAAc,EAAC;AAAA,UACxB,KAAA,EAAO,IAAA,CAAK,KAAA,CAAM,IAAA,EAAM,UAAA;AAAA,UACxB,UAAA,EAAY,KAAK,KAAA,CAAM;AAAA,SACzB;AACA,QAAA,IAAA,CAAK,kBAAA,GAAqB;AAAA,UACxB,GAAI,IAAA,CAAK,kBAAA,IAAsB,EAAC;AAAA,UAChC,KAAA,EAAO,IAAA,CAAK,KAAA,CAAM,IAAA,EAAM;AAAA,SAC1B;AACA,QAAA,IAAA,CAAK,UAAA,GAAa;AAAA,UAChB,GAAI,IAAA,CAAK,UAAA,IAAc,EAAC;AAAA,UACxB,KAAA,EAAO,IAAA,CAAK,KAAA,CAAM,IAAA,EAAM;AAAA,SAC1B;AAAA,MACF,CAAA;AAEA,MAAA,MAAM,KAAA,GAAS,KAAK,OAAA,CAAgB,KAAA;AACpC,MAAA,MAAM,KAAA,GAAS,KAAK,OAAA,CAAgB,KAAA;AAGpC,MAAA,MAAM,OAAA,GAAU,CAAC,IAAA,KACf,IAAA,EAAM,OAAA,QAAe,IAAA,EAAM,UAAA,IAAc,IAAA,EAAM,KAAA,IAAS,EAAC;AAE3D,MAAA,KAAA,MAAW,IAAA,IAAQ,OAAA,CAAQ,KAAK,CAAA,iBAAkB,IAAI,CAAA;AACtD,MAAA,KAAA,MAAW,IAAA,IAAQ,OAAA,CAAQ,KAAK,CAAA,iBAAkB,IAAI,CAAA;AAAA,IACxD,CAAA,CAAA,MAAQ;AAAA,IAER;AAAA,EAGF;AAAA;AAAA;AAAA;AAAA,EAUQ,mBAAA,GAA4B;AAClC,IAAA,IAAI,CAAC,IAAA,CAAK,SAAA,IAAa,OAAO,mBAAmB,WAAA,EAAa;AAE9D,IAAA,IAAA,CAAK,cAAA,GAAiB,IAAI,cAAA,CAAe,MAAM;AAC7C,MAAA,IAAA,CAAK,eAAA,EAAgB;AAAA,IACvB,CAAC,CAAA;AAED,IAAA,IAAA,CAAK,cAAA,CAAe,OAAA,CAAQ,IAAA,CAAK,SAAS,CAAA;AAAA,EAC5C;AAAA;AAAA;AAAA;AAAA,EAKQ,YAAA,GAAqB;AAC3B,IAAA,IAAI,CAAC,IAAA,CAAK,OAAA,IAAW,CAAC,KAAK,SAAA,EAAW;AAEtC,IAAA,MAAM,EAAE,KAAA,EAAO,MAAA,EAAO,GAAI,IAAA,CAAK,UAAU,qBAAA,EAAsB;AAI/D,EACF;AAAA;AAAA;AAAA;AAAA,EAKO,MAAA,CAAO,OAAgB,MAAA,EAAuB;AACnD,IAAA,IAAI,CAAC,KAAK,SAAA,EAAW;AAErB,IAAA,IAAI,UAAU,MAAA,EAAW;AACvB,MAAA,IAAA,CAAK,SAAA,CAAU,KAAA,CAAM,KAAA,GAAQ,CAAA,EAAG,KAAK,CAAA,EAAA,CAAA;AAAA,IACvC;AACA,IAAA,IAAI,WAAW,MAAA,EAAW;AACxB,MAAA,IAAA,CAAK,SAAA,CAAU,KAAA,CAAM,MAAA,GAAS,CAAA,EAAG,MAAM,CAAA,EAAA,CAAA;AAAA,IACzC;AAEA,IAAA,IAAA,CAAK,YAAA,EAAa;AAAA,EACpB;AAAA;AAAA;AAAA;AAAA;AAAA,EAMO,SAAA,GAAkB;AACvB,IAAA,IAAI,CAAC,KAAK,OAAA,EAAS;AACnB,IAAA,IAAI;AACF,MAAC,IAAA,CAAK,QAAgB,WAAA,IAAc;AAAA,IACtC,CAAA,CAAA,MAAQ;AAAA,IAER;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAa,WAAA,CAAY,MAAA,GAAiC,KAAA,EAAwB;AAChF,IAAA,IAAI,CAAC,KAAK,OAAA,EAAS;AACjB,MAAA,MAAM,IAAI,MAAM,uBAAuB,CAAA;AAAA,IACzC;AAIA,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,SAAA,EAAW,aAAA,CAAc,QAAQ,CAAA;AACrD,IAAA,IAAI,CAAC,MAAA,EAAQ;AACX,MAAA,MAAM,IAAI,MAAM,kBAAkB,CAAA;AAAA,IACpC;AAEA,IAAA,MAAM,QAAA,GAAW,MAAA,KAAW,MAAA,GAAS,YAAA,GAAe,WAAA;AACpD,IAAA,OAAO,MAAA,CAAO,UAAU,QAAQ,CAAA;AAAA,EAClC;AAAA;AAAA;AAAA;AAAA,EAKO,EAAA,CACL,OACA,OAAA,EACM;AACN,IAAA,IAAI,CAAC,IAAA,CAAK,aAAA,CAAc,GAAA,CAAI,KAAK,CAAA,EAAG;AAClC,MAAA,IAAA,CAAK,aAAA,CAAc,GAAA,CAAI,KAAA,kBAAO,IAAI,KAAK,CAAA;AAAA,IACzC;AACA,IAAA,IAAA,CAAK,aAAA,CAAc,GAAA,CAAI,KAAK,CAAA,CAAG,IAAI,OAA+B,CAAA;AAAA,EACpE;AAAA;AAAA;AAAA;AAAA,EAKO,GAAA,CACL,OACA,OAAA,EACM;AACN,IAAA,MAAM,QAAA,GAAW,IAAA,CAAK,aAAA,CAAc,GAAA,CAAI,KAAK,CAAA;AAC7C,IAAA,IAAI,QAAA,EAAU;AACZ,MAAA,QAAA,CAAS,OAAO,OAA+B,CAAA;AAAA,IACjD;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKU,IAAA,CAAoC,OAAU,IAAA,EAA8B;AACpF,IAAA,MAAM,QAAA,GAAW,IAAA,CAAK,aAAA,CAAc,GAAA,CAAI,KAAK,CAAA;AAC7C,IAAA,IAAI,QAAA,EAAU;AACZ,MAAA,QAAA,CAAS,OAAA,CAAQ,CAAC,OAAA,KAAY,OAAA,CAAQ,IAAI,CAAC,CAAA;AAAA,IAC7C;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKO,OAAA,GAAgB;AACrB,IAAA,IAAI,KAAK,WAAA,EAAa;AAGtB,IAAA,IAAI,KAAK,cAAA,EAAgB;AACvB,MAAA,IAAA,CAAK,eAAe,UAAA,EAAW;AAC/B,MAAA,IAAA,CAAK,cAAA,GAAiB,IAAA;AAAA,IACxB;AAGA,IAAA,IAAA,CAAK,cAAc,KAAA,EAAM;AAGzB,IAAA,IAAI,KAAK,OAAA,EAAS;AAChB,MAAA,IAAA,CAAK,QAAQ,MAAA,EAAO;AACpB,MAAA,IAAA,CAAK,OAAA,GAAU,IAAA;AAAA,IACjB;AAGA,IAAA,IAAI,KAAK,SAAA,EAAW;AAClB,MAAA,IAAA,CAAK,UAAU,SAAA,GAAY,EAAA;AAAA,IAC7B;AAEA,IAAA,IAAA,CAAK,WAAA,GAAc,IAAA;AACnB,IAAA,IAAA,CAAK,aAAA,GAAgB,KAAA;AAAA,EACvB;AAAA;AAAA;AAAA;AAAA,EAKO,SAAA,GAAqB;AAC1B,IAAA,OAAO,EAAE,GAAG,IAAA,CAAK,MAAA,EAAO;AAAA,EAC1B;AAAA;AAAA;AAAA;AAAA,EAKO,QAAA,GAAwB;AAC7B,IAAA,OAAO,EAAE,GAAG,IAAA,CAAK,KAAA,EAAM;AAAA,EACzB;AAAA;AAAA;AAAA;AAAA,EAKO,OAAA,GAAmB;AACxB,IAAA,OAAO,IAAA,CAAK,aAAA,IAAiB,CAAC,IAAA,CAAK,WAAA;AAAA,EACrC;AACF;AC/WA,IAAME,iBAAAA,GAAmB,SAAA;AACzB,IAAI,oBAAA,GAAuB,KAAA;AAE3B,SAAS,0BAAA,GAAmC;AAC1C,EAAA,IAAI,oBAAA,EAAsB;AAC1B,EAAA,IAAI;AACF,IAAAC,0BAAA,CAAkB,cAAA,EAAe;AACjC,IAAA,oBAAA,GAAuB,IAAA;AAAA,EACzB,CAAA,CAAA,MAAQ;AAEN,IAAA,IAAI;AACF,MAAAA,0BAAA,CAAkB,SAAA,CAAU;AAAA,QAC1B,OAAA,EAAS,yCAAyCD,iBAAgB,CAAA,sBAAA;AAAA,OACnE,CAAA;AACD,MAAA,oBAAA,GAAuB,IAAA;AAAA,IACzB,CAAA,CAAA,MAAQ;AAAA,IAER;AAAA,EACF;AACF;AAGA,IAAM,iBAAA,GAAoB;AAAA,EACxB,EAAE,MAAA,EAAQ,CAAA,EAAG,KAAA,EAAO,SAAA,EAAU;AAAA;AAAA,EAC9B,EAAE,MAAA,EAAQ,IAAA,EAAM,KAAA,EAAO,SAAA,EAAU;AAAA;AAAA,EACjC,EAAE,MAAA,EAAQ,GAAA,EAAK,KAAA,EAAO,SAAA,EAAU;AAAA;AAAA,EAChC,EAAE,MAAA,EAAQ,IAAA,EAAM,KAAA,EAAO,SAAA,EAAU;AAAA;AAAA,EACjC,EAAE,MAAA,EAAQ,CAAA,EAAG,KAAA,EAAO,SAAA;AAAU;AAChC,CAAA;AAKO,IAAM,iBAAN,MAAqB;AAAA,EAU1B,YAAY,MAAA,EAA8B;AAR1C,IAAA,IAAA,CAAQ,SAAA,GAAgC,IAAA;AACxC,IAAA,IAAA,CAAQ,OAAA,GAAoC,IAAA;AAC5C,IAAA,IAAA,CAAQ,WAAA,GAAmB,IAAA;AAE3B,IAAA,IAAA,CAAQ,UAAA,GAA6C,IAAA;AACrD,IAAA,IAAA,CAAQ,UAAA,GAAmD,IAAA;AAC3D,IAAA,IAAA,CAAQ,WAAA,GAAuB,KAAA;AAG7B,IAAA,IAAA,CAAK,EAAA,GAAK,MAAA,CAAO,EAAA,IAAM,UAAA,CAAW,SAAS,CAAA;AAC3C,IAAA,IAAA,CAAK,MAAA,GAAS,MAAA;AAAA,EAChB;AAAA;AAAA;AAAA;AAAA,EAKA,MAAa,KAAK,SAAA,EAAgD;AAChE,IAAA,IAAI,KAAK,WAAA,EAAa;AACpB,MAAA,MAAM,IAAI,MAAM,qCAAqC,CAAA;AAAA,IACvD;AAGA,IAAA,IAAI,OAAO,cAAc,QAAA,EAAU;AACjC,MAAA,MAAM,EAAA,GAAK,QAAA,CAAS,cAAA,CAAe,SAAS,CAAA;AAC5C,MAAA,IAAI,CAAC,EAAA,EAAI;AACP,QAAA,MAAM,IAAI,KAAA,CAAM,CAAA,mBAAA,EAAsB,SAAS,CAAA,WAAA,CAAa,CAAA;AAAA,MAC9D;AACA,MAAA,IAAA,CAAK,SAAA,GAAY,EAAA;AAAA,IACnB,CAAA,MAAO;AACL,MAAA,IAAA,CAAK,SAAA,GAAY,SAAA;AAAA,IACnB;AAGA,IAAA,IAAI,CAAC,IAAA,CAAK,SAAA,CAAU,EAAA,EAAI;AACtB,MAAA,IAAA,CAAK,SAAA,CAAU,KAAK,IAAA,CAAK,EAAA;AAAA,IAC3B;AAGA,IAAA,0BAAA,EAA2B;AAG3B,IAAA,MAAM,KAAK,aAAA,EAAc;AAAA,EAC3B;AAAA;AAAA;AAAA;AAAA,EAKA,MAAc,aAAA,GAA+B;AAE3C,IAAA,IAAI,IAAA,CAAK,WAAA,IAAe,CAAC,IAAA,CAAK,SAAA,EAAW;AACvC,MAAA;AAAA,IACF;AAGA,IAAA,IAAI,CAAC,IAAA,CAAK,SAAA,CAAU,EAAA,EAAI;AACtB,MAAA,IAAA,CAAK,SAAA,CAAU,KAAK,IAAA,CAAK,EAAA;AAAA,IAC3B;AAGA,IAAA,IAAI,CAAC,QAAA,CAAS,IAAA,CAAK,QAAA,CAAS,IAAA,CAAK,SAAS,CAAA,EAAG;AAC3C,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,iBAAA;AACJ,IAAA,IAAI,WAAA;AAEJ,IAAA,IAAI;AACF,MAAA,MAAM,MAAA,GAAS,MAAMC,0BAAA,CAAkB,MAAA;AAAA,QACrC,KAAK,SAAA,CAAU;AAAA,OACjB;AACA,MAAA,iBAAA,GAAoB,MAAA,CAAO,iBAAA;AAC3B,MAAA,WAAA,GAAc,MAAA,CAAO,WAAA;AAAA,IACvB,SAAS,CAAA,EAAG;AAEV,MAAA,OAAA,CAAQ,IAAA,CAAK,4CAA4C,CAAC,CAAA;AAC1D,MAAA;AAAA,IACF;AAGA,IAAA,IAAI,IAAA,CAAK,WAAA,IAAe,CAAC,IAAA,CAAK,SAAA,EAAW;AACvC,MAAA,IAAI;AACF,QAAA,iBAAA,CAAkB,MAAA,EAAO;AAAA,MAC3B,SAAS,CAAA,EAAG;AAAA,MAEZ;AACA,MAAA;AAAA,IACF;AAEA,IAAA,IAAA,CAAK,OAAA,GAAU,iBAAA;AACf,IAAA,IAAA,CAAK,WAAA,GAAc,WAAA;AAGnB,IAAA,iBAAA,CAAkB,KAAA,GAAQ,IAAIC,sBAAA,CAAc,WAAA,EAAa;AAAA,MACvD,SAAA,EAAW;AAAA,KACZ,CAAA;AACD,IAAA,iBAAA,CAAkB,KAAA,GAAQ,IAAIA,sBAAA,CAAc,WAAA,EAAa;AAAA,MACvD,SAAA,EAAW;AAAA,KACZ,CAAA;AACD,IAAA,iBAAA,CAAkB,KAAA,GAAQ,IAAIA,sBAAA,CAAc,WAAA,EAAa;AAAA,MACvD,SAAA,EAAW;AAAA,KACZ,CAAA;AAGD,IAAA,iBAAA,CAAkB,cAAA,CAAe,GAAA,CAAI,IAAIC,iCAAA,EAA0B,CAAA;AACnE,IAAA,iBAAA,CAAkB,cAAA,CAAe,GAAA,CAAI,IAAIC,wBAAA,EAAiB,CAAA;AAG1D,IAAA,MAAM,SAAA,GAAY,IAAA,CAAK,MAAA,CAAO,cAAA,IAAkB,EAAE,GAAG,GAAA,EAAK,CAAA,EAAG,GAAA,EAAK,CAAA,EAAG,GAAA,EAAI;AACzE,IAAA,iBAAA,CAAkB,MAAA,GAAS,IAAIC,yBAAA,CAAiB,WAAA,EAAa;AAAA,MAC3D,QAAA,EAAU,IAAIC,gBAAA,CAAQ,SAAA,CAAU,GAAG,SAAA,CAAU,CAAA,EAAG,UAAU,CAAC,CAAA;AAAA,MAC3D,MAAA,EAAQ,IAAIA,gBAAA,CAAQ,CAAA,EAAG,GAAG,CAAC;AAAA,KAC5B,CAAA;AAGD,IAAA,IAAA,CAAK,cAAA,CAAe,IAAA,CAAK,MAAA,CAAO,OAAO,CAAA;AAAA,EACzC;AAAA;AAAA;AAAA;AAAA,EAKQ,eAAe,OAAA,EAA2B;AAChD,IAAA,IAAI,CAAC,IAAA,CAAK,OAAA,IAAW,CAAC,KAAK,WAAA,EAAa;AAExC,IAAA,MAAM,cAAc,IAAA,CAAK,WAAA;AACzB,IAAA,MAAM,QAAQ,OAAA,CAAQ,MAAA;AACtB,IAAA,MAAM,KAAA,GAAQ,OAAA,CAAQ,CAAC,CAAA,EAAG,MAAA,IAAU,CAAA;AAGpC,IAAA,IAAI,GAAA,GAAM,QAAA;AACV,IAAA,IAAI,GAAA,GAAM,CAAA,QAAA;AACV,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,KAAA,EAAO,CAAA,EAAA,EAAK;AAC9B,MAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,KAAA,EAAO,CAAA,EAAA,EAAK;AAC9B,QAAA,MAAM,CAAA,GAAI,OAAA,CAAQ,CAAC,CAAA,CAAE,CAAC,CAAA;AACtB,QAAA,GAAA,GAAM,IAAA,CAAK,GAAA,CAAI,GAAA,EAAK,CAAC,CAAA;AACrB,QAAA,GAAA,GAAM,IAAA,CAAK,GAAA,CAAI,GAAA,EAAK,CAAC,CAAA;AAAA,MACvB;AAAA,IACF;AAGA,IAAA,IAAA,CAAK,UAAA,GAAa,IAAIC,gCAAA,CAAwB,WAAA,EAAa;AAAA,MACzD,OAAA;AAAA,MACA,KAAA,EAAO,IAAA,CAAK,MAAA,CAAO,KAAA,IAAS,CAAA;AAAA,MAC5B,KAAA,EAAO,IAAA,CAAK,MAAA,CAAO,KAAA,IAAS;AAAA,KAC7B,CAAA;AAGD,IAAA,MAAM,UAAA,GAAa,IAAA,CAAK,MAAA,CAAO,UAAA,IAAc,iBAAA;AAG7C,IAAA,MAAM,YAAA,GAAe,IAAIC,6BAAA,CAAqB,WAAA,EAAa;AAAA,MACzD,aAAA,EAAe;AAAA,KAChB,CAAA;AAGD,IAAA,IAAA,CAAK,UAAA,GAAa,IAAIC,sCAAA,CAA8B,WAAA,EAAa;AAAA,MAC/D,YAAY,IAAA,CAAK,UAAA;AAAA,MACjB,OAAA,EAAS,IAAA,CAAK,MAAA,CAAO,QAAA,IAAY,GAAA;AAAA,MACjC,OAAA,EAAS,IAAA,CAAK,MAAA,CAAO,QAAA,IAAY,GAAA;AAAA,MACjC,OAAA,EAAS,IAAA,CAAK,MAAA,CAAO,OAAA,IAAW,CAAA;AAAA,MAChC,kBAAA,EAAoB,CAAA;AAAA;AAAA,MACpB,MAAA,EAAQ,aAAA;AAAA;AAAA,MACR,eAAA,EAAiB,CAAA;AAAA,MACjB,aAAA,EAAe,aAAA;AAAA;AAAA,MACf,sBAAA,EAAwB,CAAA;AAAA,MACxB,SAAA,EAAW,IAAA;AAAA;AAAA,MACX,YAAYC,oBAAA,CAAY,UAAA;AAAA;AAAA,MACxB,cAAA,EAAgB,GAAA;AAAA,MAChB,gBAAA,EAAkB,YAAA;AAAA,MAClB,SAAA,EAAW;AAAA,KACZ,CAAA;AAED,IAAA,IAAA,CAAK,OAAA,CAAS,gBAAA,CAAiB,GAAA,CAAI,IAAA,CAAK,UAAU,CAAA;AAAA,EACpD;AAAA;AAAA;AAAA;AAAA,EAKO,WAAW,OAAA,EAA2B;AAC3C,IAAA,IAAI,CAAC,KAAK,OAAA,EAAS;AACjB,MAAA,IAAA,CAAK,OAAO,OAAA,GAAU,OAAA;AACtB,MAAA;AAAA,IACF;AAGA,IAAA,IAAA,CAAK,YAAA,EAAa;AAGlB,IAAA,IAAA,CAAK,OAAO,OAAA,GAAU,OAAA;AACtB,IAAA,IAAA,CAAK,eAAe,OAAO,CAAA;AAAA,EAC7B;AAAA;AAAA;AAAA;AAAA,EAKO,QAAQ,KAAA,EAA2B;AACxC,IAAA,OAAA,CAAQ,KAAK,uEAAuE,CAAA;AAAA,EACtF;AAAA;AAAA;AAAA;AAAA,EAKO,WAAW,OAAA,EAA8C;AAC9D,IAAA,IAAA,CAAK,SAAS,EAAE,GAAG,IAAA,CAAK,MAAA,EAAQ,GAAG,OAAA,EAAQ;AAE3C,IAAA,IAAI,OAAA,CAAQ,cAAA,IAAkB,IAAA,CAAK,OAAA,IAAW,KAAK,WAAA,EAAa;AAC9D,MAAA,MAAM,MAAM,OAAA,CAAQ,cAAA;AACpB,MAAA,IAAA,CAAK,OAAA,CAAQ,MAAA,GAAS,IAAIL,yBAAA,CAAiB,KAAK,WAAA,EAAa;AAAA,QAC3D,QAAA,EAAU,IAAIC,gBAAA,CAAQ,GAAA,CAAI,GAAG,GAAA,CAAI,CAAA,EAAG,IAAI,CAAC,CAAA;AAAA,QACzC,MAAA,EAAQ,IAAIA,gBAAA,CAAQ,CAAA,EAAG,GAAG,CAAC;AAAA,OAC5B,CAAA;AAAA,IACH;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKQ,YAAA,GAAqB;AAC3B,IAAA,IAAI,CAAC,KAAK,OAAA,EAAS;AAEnB,IAAA,IAAI,KAAK,UAAA,EAAY;AACnB,MAAA,IAAA,CAAK,OAAA,CAAQ,gBAAA,CAAiB,MAAA,CAAO,IAAA,CAAK,UAAU,CAAA;AACpD,MAAA,IAAA,CAAK,WAAW,MAAA,EAAO;AACvB,MAAA,IAAA,CAAK,UAAA,GAAa,IAAA;AAAA,IACpB;AAEA,IAAA,IAAI,KAAK,UAAA,EAAY;AACnB,MAAA,IAAA,CAAK,WAAW,MAAA,EAAO;AACvB,MAAA,IAAA,CAAK,UAAA,GAAa,IAAA;AAAA,IACpB;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKO,OAAA,GAAgB;AACrB,IAAA,IAAI,KAAK,WAAA,EAAa;AAGtB,IAAA,IAAA,CAAK,WAAA,GAAc,IAAA;AAEnB,IAAA,IAAI;AACF,MAAA,IAAA,CAAK,YAAA,EAAa;AAAA,IACpB,SAAS,CAAA,EAAG;AAAA,IAEZ;AAEA,IAAA,IAAI,KAAK,OAAA,EAAS;AAChB,MAAA,IAAI;AACF,QAAA,IAAA,CAAK,QAAQ,MAAA,EAAO;AAAA,MACtB,SAAS,CAAA,EAAG;AAAA,MAEZ;AACA,MAAA,IAAA,CAAK,OAAA,GAAU,IAAA;AAAA,IACjB;AAEA,IAAA,IAAA,CAAK,SAAA,GAAY,IAAA;AACjB,IAAA,IAAA,CAAK,WAAA,GAAc,IAAA;AAAA,EACrB;AAAA;AAAA;AAAA;AAAA,EAKO,SAAA,GAAkC;AACvC,IAAA,OAAO,EAAE,GAAG,IAAA,CAAK,MAAA,EAAO;AAAA,EAC1B;AAAA;AAAA;AAAA;AAAA,EAKO,OAAA,GAAmB;AACxB,IAAA,OAAO,IAAA,CAAK,OAAA,KAAY,IAAA,IAAQ,CAAC,IAAA,CAAK,WAAA;AAAA,EACxC;AACF;AAKA,eAAsB,oBAAA,CACpB,WACA,MAAA,EACyB;AACzB,EAAA,MAAM,KAAA,GAAQ,IAAI,cAAA,CAAe,MAAM,CAAA;AACvC,EAAA,MAAM,KAAA,CAAM,KAAK,SAAS,CAAA;AAC1B,EAAA,OAAO,KAAA;AACT;AC9TA,IAAMN,iBAAAA,GAAmB,SAAA;AACzB,IAAIW,qBAAAA,GAAuB,KAAA;AAE3B,SAASC,2BAAAA,GAAmC;AAC1C,EAAA,IAAID,qBAAAA,EAAsB;AAC1B,EAAA,IAAI;AACF,IAAAV,2BAAkB,cAAA,EAAe;AACjC,IAAAU,qBAAAA,GAAuB,IAAA;AAAA,EACzB,CAAA,CAAA,MAAQ;AAEN,IAAA,IAAI;AACF,MAAAV,2BAAkB,SAAA,CAAU;AAAA,QAC1B,OAAA,EAAS,yCAAyCD,iBAAgB,CAAA,sBAAA;AAAA,OACnE,CAAA;AACD,MAAAW,qBAAAA,GAAuB,IAAA;AAAA,IACzB,CAAA,CAAA,MAAQ;AAAA,IAER;AAAA,EACF;AACF;AA8CO,IAAM,gBAAN,MAAoB;AAAA,EAUzB,YAAY,MAAA,EAA6B;AARzC,IAAA,IAAA,CAAQ,SAAA,GAAgC,IAAA;AACxC,IAAA,IAAA,CAAQ,OAAA,GAAoC,IAAA;AAC5C,IAAA,IAAA,CAAQ,WAAA,GAAmB,IAAA;AAE3B,IAAA,IAAA,CAAQ,UAAA,GAAqC,IAAA;AAC7C,IAAA,IAAA,CAAQ,YAAA,GAAgD,IAAA;AACxD,IAAA,IAAA,CAAQ,WAAA,GAAuB,KAAA;AAG7B,IAAA,IAAA,CAAK,EAAA,GAAK,MAAA,CAAO,EAAA,IAAM,UAAA,CAAW,UAAU,CAAA;AAC5C,IAAA,IAAA,CAAK,MAAA,GAAS,MAAA;AAAA,EAChB;AAAA;AAAA;AAAA;AAAA,EAKA,MAAa,KAAK,SAAA,EAAgD;AAChE,IAAA,IAAI,KAAK,WAAA,EAAa;AACpB,MAAA,MAAM,IAAI,MAAM,qCAAqC,CAAA;AAAA,IACvD;AAGA,IAAA,IAAI,OAAO,cAAc,QAAA,EAAU;AACjC,MAAA,MAAM,EAAA,GAAK,QAAA,CAAS,cAAA,CAAe,SAAS,CAAA;AAC5C,MAAA,IAAI,CAAC,EAAA,EAAI;AACP,QAAA,MAAM,IAAI,KAAA,CAAM,CAAA,mBAAA,EAAsB,SAAS,CAAA,WAAA,CAAa,CAAA;AAAA,MAC9D;AACA,MAAA,IAAA,CAAK,SAAA,GAAY,EAAA;AAAA,IACnB,CAAA,MAAO;AACL,MAAA,IAAA,CAAK,SAAA,GAAY,SAAA;AAAA,IACnB;AAGA,IAAA,IAAI,CAAC,IAAA,CAAK,SAAA,CAAU,EAAA,EAAI;AACtB,MAAA,IAAA,CAAK,SAAA,CAAU,KAAK,IAAA,CAAK,EAAA;AAAA,IAC3B;AAGA,IAAAC,2BAAAA,EAA2B;AAG3B,IAAA,MAAM,KAAK,aAAA,EAAc;AAAA,EAC3B;AAAA;AAAA;AAAA;AAAA,EAKA,MAAc,aAAA,GAA+B;AAE3C,IAAA,IAAI,IAAA,CAAK,WAAA,IAAe,CAAC,IAAA,CAAK,SAAA,EAAW;AACvC,MAAA;AAAA,IACF;AAGA,IAAA,IAAI,CAAC,IAAA,CAAK,SAAA,CAAU,EAAA,EAAI;AACtB,MAAA,IAAA,CAAK,SAAA,CAAU,KAAK,IAAA,CAAK,EAAA;AAAA,IAC3B;AAGA,IAAA,IAAI,CAAC,QAAA,CAAS,IAAA,CAAK,QAAA,CAAS,IAAA,CAAK,SAAS,CAAA,EAAG;AAC3C,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,iBAAA;AACJ,IAAA,IAAI,WAAA;AAEJ,IAAA,IAAI;AACF,MAAA,MAAM,MAAA,GAAS,MAAMX,0BAAAA,CAAkB,MAAA;AAAA,QACrC,KAAK,SAAA,CAAU,EAAA;AAAA,QACf;AAAA,UACE,gBAAA,EAAkB;AAAA;AACpB,OACF;AACA,MAAA,iBAAA,GAAoB,MAAA,CAAO,iBAAA;AAC3B,MAAA,WAAA,GAAc,MAAA,CAAO,WAAA;AAAA,IACvB,SAAS,CAAA,EAAG;AAEV,MAAA,OAAA,CAAQ,IAAA,CAAK,2CAA2C,CAAC,CAAA;AACzD,MAAA;AAAA,IACF;AAGA,IAAA,IAAI,IAAA,CAAK,WAAA,IAAe,CAAC,IAAA,CAAK,SAAA,EAAW;AACvC,MAAA,IAAI;AACF,QAAA,iBAAA,CAAkB,MAAA,EAAO;AAAA,MAC3B,SAAS,CAAA,EAAG;AAAA,MAEZ;AACA,MAAA;AAAA,IACF;AAEA,IAAA,IAAA,CAAK,OAAA,GAAU,iBAAA;AACf,IAAA,IAAA,CAAK,WAAA,GAAc,WAAA;AAGnB,IAAA,MAAM,SAAA,GAAY,IAAA,CAAK,MAAA,CAAO,cAAA,IAAkB,EAAE,GAAG,IAAA,EAAM,CAAA,EAAG,GAAA,EAAK,CAAA,EAAG,GAAA,EAAI;AAC1E,IAAA,MAAM,YAAA,GAAe,IAAA,CAAK,MAAA,CAAO,YAAA,IAAgB,EAAE,GAAG,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,CAAA,EAAE;AACpE,IAAA,iBAAA,CAAkB,MAAA,GAAS,IAAII,yBAAAA,CAAiB,WAAA,EAAa;AAAA,MAC3D,QAAA,EAAU,IAAIC,gBAAAA,CAAQ,SAAA,CAAU,GAAG,SAAA,CAAU,CAAA,EAAG,UAAU,CAAC,CAAA;AAAA,MAC3D,MAAA,EAAQ,IAAIA,gBAAAA,CAAQ,YAAA,CAAa,GAAG,YAAA,CAAa,CAAA,EAAG,aAAa,CAAC;AAAA,KACnE,CAAA;AAGD,IAAA,iBAAA,CAAkB,cAAA,CAAe,GAAA;AAAA,MAC/B,IAAIF,wBAAAA,EAAgB;AAAA,MACpB,IAAID,iCAAAA;AAAyB,KAC/B;AAGA,IAAA,MAAM,MAAA,GAAS,KAAK,MAAA,CAAO,MAAA,IAAU,EAAE,GAAA,EAAK,CAAA,EAAG,KAAK,GAAA,EAAI;AACxD,IAAA,MAAM,MAAA,GAAS,KAAK,MAAA,CAAO,MAAA,IAAU,EAAE,GAAA,EAAK,CAAA,EAAG,KAAK,GAAA,EAAK;AACzD,IAAA,MAAM,MAAA,GAAS,KAAK,MAAA,CAAO,MAAA,IAAU,EAAE,GAAA,EAAK,CAAA,EAAG,KAAK,EAAA,EAAG;AAEvD,IAAA,MAAM,eAAA,GAAkB;AAAA,MACtB,kBAAA,EAAoB,KAAA;AAAA,MACpB,kBAAA,EAAoB,EAAE,KAAA,EAAO,SAAA,EAAU;AAAA,MACvC,oBAAA,EAAsB;AAAA,KACxB;AAEA,IAAA,iBAAA,CAAkB,KAAA,GAAQ,IAAID,sBAAAA,CAAc,WAAA,EAAa;AAAA,MACvD,GAAG,eAAA;AAAA,MACH,SAAA,EAAW,IAAA,CAAK,MAAA,CAAO,UAAA,IAAc,oBAAA;AAAA,MACrC,SAAA,EAAW,KAAA;AAAA,MACX,cAAc,IAAIW,oBAAA,CAAY,MAAA,CAAO,GAAA,EAAK,OAAO,GAAG,CAAA;AAAA,MACpD,UAAA,EAAY,EAAA;AAAA,MACZ,UAAA,EAAY,EAAA;AAAA,MACZ,kBAAA,EAAoB,IAAA;AAAA,MACpB,aAAA,EAAe;AAAA,KAChB,CAAA;AAED,IAAA,iBAAA,CAAkB,KAAA,GAAQ,IAAIX,sBAAAA,CAAc,WAAA,EAAa;AAAA,MACvD,GAAG,eAAA;AAAA,MACH,SAAA,EAAW,IAAA,CAAK,MAAA,CAAO,UAAA,IAAc,iBAAA;AAAA,MACrC,cAAc,IAAIW,oBAAA,CAAY,MAAA,CAAO,GAAA,EAAK,OAAO,GAAG,CAAA;AAAA,MACpD,aAAA,EAAe;AAAA,KAChB,CAAA;AAED,IAAA,iBAAA,CAAkB,KAAA,GAAQ,IAAIX,sBAAAA,CAAc,WAAA,EAAa;AAAA,MACvD,GAAG,eAAA;AAAA,MACH,SAAA,EAAW,IAAA,CAAK,MAAA,CAAO,UAAA,IAAc,OAAA;AAAA,MACrC,UAAA,EAAY,EAAA;AAAA,MACZ,UAAA,EAAY,CAAA;AAAA,MACZ,cAAc,IAAIW,oBAAA,CAAY,MAAA,CAAO,GAAA,EAAK,OAAO,GAAG,CAAA;AAAA,MACpD,aAAA,EAAe,SAAA;AAAA,MACf,cAAA,EAAgB;AAAA,KACjB,CAAA;AAGD,IAAA,IAAA,CAAK,aAAA,CAAc,IAAA,CAAK,MAAA,CAAO,IAAI,CAAA;AAGnC,IAAA,IAAI,IAAA,CAAK,MAAA,CAAO,YAAA,KAAiB,KAAA,EAAO;AACtC,MAAA,IAAA,CAAK,WAAA,EAAY;AAAA,IACnB;AAGA,IAAA,IAAA,CAAK,UAAA,EAAW;AAAA,EAClB;AAAA;AAAA;AAAA;AAAA,EAKQ,cAAc,IAAA,EAAiC;AACrD,IAAA,IAAI,CAAC,IAAA,CAAK,OAAA,IAAW,CAAC,KAAK,WAAA,EAAa;AAExC,IAAA,MAAM,cAAc,IAAA,CAAK,WAAA;AAGzB,IAAA,IAAA,CAAK,UAAA,GAAa,IAAIC,wBAAA,CAAgB,WAAW,CAAA;AAGjD,IAAA,IAAA,CAAK,QAAQ,CAAC,CAAC,CAAA,EAAG,CAAA,EAAG,CAAC,CAAA,KAAM;AAC1B,MAAA,IAAA,CAAK,UAAA,CAAY,MAAA,CAAO,CAAA,EAAG,CAAA,EAAG,CAAC,CAAA;AAAA,IACjC,CAAC,CAAA;AAGD,IAAA,IAAA,CAAK,YAAA,GAAe,IAAIC,iCAAA,CAAyB,WAAA,EAAa;AAAA,MAC5D,YAAY,IAAA,CAAK,UAAA;AAAA,MACjB,IAAA,EAAM,IAAA,CAAK,MAAA,CAAO,OAAA,IAAW,SAAA;AAAA,MAC7B,MAAA,EAAQ,IAAA,CAAK,MAAA,CAAO,SAAA,IAAa,SAAA;AAAA,MACjC,OAAA,EAAS,IAAA,CAAK,MAAA,CAAO,UAAA,IAAc,IAAA;AAAA,MACnC,eAAA,EAAiB,IAAA,CAAK,MAAA,CAAO,SAAA,IAAa,CAAA;AAAA,MAC1C,eAAA,EAAiB,IAAA,CAAK,MAAA,CAAO,SAAA,IAAa;AAAA,KAC3C,CAAA;AAED,IAAA,IAAA,CAAK,OAAA,CAAS,gBAAA,CAAiB,GAAA,CAAI,IAAA,CAAK,YAAY,CAAA;AAAA,EACtD;AAAA;AAAA;AAAA;AAAA,EAKQ,WAAA,GAAoB;AAC1B,IAAA,IAAI,CAAC,IAAA,CAAK,OAAA,IAAW,CAAC,KAAK,WAAA,EAAa;AAExC,IAAA,MAAM,cAAc,IAAA,CAAK,WAAA;AACzB,IAAA,MAAM,QAAA,GAAW,IAAID,wBAAA,CAAgB,WAAW,CAAA;AAChD,IAAA,MAAM,UAAA,GAAa,CAAA;AAEnB,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,MAAA,CAAO,cAAA,IAAkB,GAAA;AAC7C,IAAA,MAAM,SAAA,GAAY,IAAA,CAAK,MAAA,CAAO,iBAAA,IAAqB,GAAA;AAEnD,IAAA,KAAA,IAAS,GAAA,GAAM,CAAA,EAAG,GAAA,IAAO,GAAA,EAAK,OAAO,CAAA,EAAG;AACtC,MAAA,MAAM,GAAA,GAAO,GAAA,GAAM,IAAA,CAAK,EAAA,GAAM,GAAA;AAC9B,MAAA,MAAM,CAAA,GAAI,MAAA,GAAS,SAAA,GAAY,IAAA,CAAK,IAAI,GAAG,CAAA;AAC3C,MAAA,QAAA,CAAS,MAAA,CAAO,GAAA,EAAK,CAAA,EAAG,UAAU,CAAA;AAAA,IACpC;AAEA,IAAA,MAAM,UAAA,GAAa,IAAIE,oCAAA,CAA4B,WAAA,EAAa;AAAA,MAC9D,UAAA,EAAY,QAAA;AAAA,MACZ,MAAA,EAAQ,OAAA;AAAA,MACR,eAAA,EAAiB,CAAA;AAAA,MACjB,OAAA,EAAS;AAAA,KACV,CAAA;AAED,IAAA,IAAA,CAAK,OAAA,CAAS,gBAAA,CAAiB,GAAA,CAAI,UAAU,CAAA;AAAA,EAC/C;AAAA;AAAA;AAAA;AAAA,EAKQ,UAAA,GAAmB;AACzB,IAAA,IAAI,CAAC,KAAK,OAAA,EAAS;AAEnB,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,MAAA,CAAO,UAAA,IAAc,aAAA;AACzC,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,MAAA,CAAO,UAAA,IAAc,WAAA;AACzC,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,MAAA,CAAO,UAAA,IAAc,OAAA;AAEzC,IAAA,MAAM,eAAA,GAAkB,IAAIC,0BAAA,CAAkB;AAAA,MAC5C,mBAAA,EAAqB,CAAC,UAAA,KAAoB;AACxC,QAAA,MAAM,mBAA6B,EAAC;AACpC,QAAA,IAAI,UAAA,IAAc,WAAW,KAAA,EAAO;AAClC,UAAA,gBAAA,CAAiB,KAAK,CAAA,EAAG,MAAM,CAAA,EAAA,EAAK,UAAA,CAAW,MAAM,CAAA,CAAE,CAAA;AACvD,UAAA,gBAAA,CAAiB,KAAK,CAAA,EAAG,MAAM,CAAA,EAAA,EAAK,UAAA,CAAW,MAAM,CAAA,CAAE,CAAA;AACvD,UAAA,gBAAA,CAAiB,KAAK,CAAA,EAAG,MAAM,CAAA,EAAA,EAAK,UAAA,CAAW,MAAM,CAAA,CAAE,CAAA;AAAA,QACzD;AACA,QAAA,OAAO,gBAAA;AAAA,MACT;AAAA,KACD,CAAA;AAED,IAAA,IAAA,CAAK,OAAA,CAAS,cAAA,CAAe,GAAA,CAAI,eAAe,CAAA;AAAA,EAClD;AAAA;AAAA;AAAA;AAAA,EAKO,QAAQ,IAAA,EAAiC;AAC9C,IAAA,IAAI,CAAC,KAAK,UAAA,EAAY;AACpB,MAAA,IAAA,CAAK,OAAO,IAAA,GAAO,IAAA;AACnB,MAAA;AAAA,IACF;AAGA,IAAA,IAAA,CAAK,WAAW,KAAA,EAAM;AACtB,IAAA,IAAA,CAAK,QAAQ,CAAC,CAAC,CAAA,EAAG,CAAA,EAAG,CAAC,CAAA,KAAM;AAC1B,MAAA,IAAA,CAAK,UAAA,CAAY,MAAA,CAAO,CAAA,EAAG,CAAA,EAAG,CAAC,CAAA;AAAA,IACjC,CAAC,CAAA;AAGD,IAAA,IAAI,KAAK,OAAA,EAAS;AAChB,MAAA,IAAA,CAAK,QAAQ,iBAAA,EAAkB;AAAA,IACjC;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKO,iBAAA,CACL,UACA,MAAA,EACM;AACN,IAAA,IAAI,CAAC,IAAA,CAAK,OAAA,IAAW,CAAC,KAAK,WAAA,EAAa;AAExC,IAAA,IAAA,CAAK,OAAA,CAAQ,MAAA,CAAO,QAAA,GAAW,IAAIX,gBAAAA,CAAQ,SAAS,CAAA,EAAG,QAAA,CAAS,CAAA,EAAG,QAAA,CAAS,CAAC,CAAA;AAC7E,IAAA,IAAI,MAAA,EAAQ;AACV,MAAA,IAAA,CAAK,OAAA,CAAQ,MAAA,CAAO,MAAA,GAAS,IAAIA,gBAAAA,CAAQ,OAAO,CAAA,EAAG,MAAA,CAAO,CAAA,EAAG,MAAA,CAAO,CAAC,CAAA;AAAA,IACvE;AACA,IAAA,IAAA,CAAK,QAAQ,iBAAA,EAAkB;AAAA,EACjC;AAAA;AAAA;AAAA;AAAA,EAKO,WAAW,OAAA,EAA6C;AAC7D,IAAA,IAAA,CAAK,SAAS,EAAE,GAAG,IAAA,CAAK,MAAA,EAAQ,GAAG,OAAA,EAAQ;AAE3C,IAAA,IAAI,OAAA,CAAQ,cAAA,IAAkB,IAAA,CAAK,OAAA,IAAW,KAAK,WAAA,EAAa;AAC9D,MAAA,MAAM,MAAM,OAAA,CAAQ,cAAA;AACpB,MAAA,MAAM,MAAA,GAAS,QAAQ,YAAA,IAAgB,EAAE,GAAG,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,CAAA,EAAE;AAC1D,MAAA,IAAA,CAAK,iBAAA,CAAkB,KAAK,MAAM,CAAA;AAAA,IACpC;AAEA,IAAA,IAAI,OAAA,CAAQ,OAAA,IAAW,OAAA,CAAQ,SAAA,IAAa,QAAQ,UAAA,EAAY;AAC9D,MAAA,IAAI,KAAK,YAAA,EAAc;AACrB,QAAA,IAAI,OAAA,CAAQ,OAAA,EAAS,IAAA,CAAK,YAAA,CAAa,OAAO,OAAA,CAAQ,OAAA;AACtD,QAAA,IAAI,OAAA,CAAQ,SAAA,EAAW,IAAA,CAAK,YAAA,CAAa,SAAS,OAAA,CAAQ,SAAA;AAC1D,QAAA,IAAI,QAAQ,UAAA,KAAe,MAAA,EAAW,IAAA,CAAK,YAAA,CAAa,UAAU,OAAA,CAAQ,UAAA;AAAA,MAC5E;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKO,UAAA,GAAuC;AAC5C,IAAA,OAAO,IAAA,CAAK,OAAA;AAAA,EACd;AAAA;AAAA;AAAA;AAAA,EAKO,OAAA,GAAgB;AACrB,IAAA,IAAI,KAAK,WAAA,EAAa;AAGtB,IAAA,IAAA,CAAK,WAAA,GAAc,IAAA;AAEnB,IAAA,IAAI,KAAK,OAAA,EAAS;AAChB,MAAA,IAAI;AACF,QAAA,IAAA,CAAK,QAAQ,MAAA,EAAO;AAAA,MACtB,SAAS,CAAA,EAAG;AAAA,MAEZ;AACA,MAAA,IAAA,CAAK,OAAA,GAAU,IAAA;AAAA,IACjB;AAEA,IAAA,IAAA,CAAK,SAAA,GAAY,IAAA;AACjB,IAAA,IAAA,CAAK,WAAA,GAAc,IAAA;AAAA,EACrB;AAAA;AAAA;AAAA;AAAA,EAKO,SAAA,GAAiC;AACtC,IAAA,OAAO,EAAE,GAAG,IAAA,CAAK,MAAA,EAAO;AAAA,EAC1B;AAAA;AAAA;AAAA;AAAA,EAKO,OAAA,GAAmB;AACxB,IAAA,OAAO,IAAA,CAAK,OAAA,KAAY,IAAA,IAAQ,CAAC,IAAA,CAAK,WAAA;AAAA,EACxC;AACF;AAKA,eAAsB,mBAAA,CACpB,WACA,MAAA,EACwB;AACxB,EAAA,MAAM,KAAA,GAAQ,IAAI,aAAA,CAAc,MAAM,CAAA;AACtC,EAAA,MAAM,KAAA,CAAM,KAAK,SAAS,CAAA;AAC1B,EAAA,OAAO,KAAA;AACT;AC1ZA,IAAMN,iBAAAA,GAAmB,SAAA;AACzB,IAAIkB,mBAAAA,GAAqB,KAAA;AAEzB,IAAM,uBAAuB,MAAM;AACjC,EAAA,IAAIA,mBAAAA,EAAoB;AACxB,EAAA,IAAI;AACF,IAAA,MAAM,OAAA,GAAU,yCAAyClB,iBAAgB,CAAA,MAAA,CAAA;AACzE,IAAAJ,yBAAgB,SAAA,CAAU;AAAA,MACxB,OAAA,EAAS,GAAG,OAAO,CAAA,gBAAA,CAAA;AAAA,MACnB,OAAA,EAAS,GAAG,OAAO,CAAA,gBAAA;AAAA,KACb,CAAA;AACR,IAAAsB,mBAAAA,GAAqB,IAAA;AAAA,EACvB,SAAS,CAAA,EAAG;AACV,IAAA,OAAA,CAAQ,IAAA,CAAK,qCAAqC,CAAC,CAAA;AAAA,EACrD;AACF,CAAA;AAMA,IAAM,qBAAA,GAAwB,GAAA;AAC9B,IAAM,0BAAA,GAA6B,GAAA;AACnC,IAAM,gCAAA,GAAmC,CAAA;AAGzC,IAAM,iBAAA,GAAoB;AAAA,EACxB,GAAA,EAAK;AAAA,IACH,IAAI,EAAE,mBAAA,EAAqB,KAAK,eAAA,EAAiB,CAAA,EAAG,eAAe,IAAA,EAAK;AAAA,IACxE,IAAI,EAAE,mBAAA,EAAqB,KAAK,eAAA,EAAiB,CAAA,EAAG,eAAe,IAAA;AAAK,GAC1E;AAAA,EACA,EAAA,EAAI;AAAA,IACF,IAAI,EAAE,mBAAA,EAAqB,KAAK,eAAA,EAAiB,GAAA,EAAK,eAAe,KAAA,EAAM;AAAA,IAC3E,IAAI,EAAE,mBAAA,EAAqB,KAAK,eAAA,EAAiB,GAAA,EAAK,eAAe,KAAA;AAAM;AAE/E,CAAA;AAIA,IAAM,qBAAA,GAAwB;AAAA,EAC5B,EAAE,MAAA,EAAQ,CAAA,EAAG,KAAA,EAAO,aAAA,EAAc;AAAA,EAChC,EAAE,MAAA,EAAQ,IAAA,EAAO,KAAA,EAAO,aAAA,EAAc;AAAA,EACtC,EAAE,MAAA,EAAQ,IAAA,EAAO,KAAA,EAAO,aAAA,EAAc;AAAA,EACtC,EAAE,MAAA,EAAQ,IAAA,EAAM,KAAA,EAAO,gBAAA,EAAiB;AAAA,EACxC,EAAE,MAAA,EAAQ,GAAA,EAAK,KAAA,EAAO,WAAA,EAAY;AAAA,EAClC,EAAE,MAAA,EAAQ,GAAA,EAAK,KAAA,EAAO,YAAA,EAAa;AAAA,EACnC,EAAE,MAAA,EAAQ,GAAA,EAAK,KAAA,EAAO,QAAA,EAAS;AAAA,EAC/B,EAAE,MAAA,EAAQ,CAAA,EAAG,KAAA,EAAO,KAAA;AACxB,CAAA;AAGA,IAAM,kBAAkB,MAAM;AAC5B,EAAA,MAAM,KAAA,GAAQ,IAAIpB,yCAAA,EAAqB;AACvC,EAAA,KAAA,CAAM,kBAAA,GAAqB,SAAA;AAC3B,EAAA,KAAA,CAAM,mBAAA,GAAsB,MAAA;AAC5B,EAAA,KAAA,CAAM,aAAA,GAAgB,SAAA;AACtB,EAAA,KAAA,CAAM,kBAAA,GAAqB,SAAA;AAC3B,EAAA,KAAA,CAAM,kBAAA,GAAqB,aAAA;AAC3B,EAAA,OAAO,KAAA;AACT,CAAA;AAGA,IAAM,oBAAoB,MAAM;AAC9B,EAAA,MAAM,KAAA,GAAQ,IAAIA,yCAAA,EAAqB;AACvC,EAAA,KAAA,CAAM,kBAAA,GAAqB,SAAA;AAC3B,EAAA,KAAA,CAAM,mBAAA,GAAsB,SAAA;AAC5B,EAAA,KAAA,CAAM,aAAA,GAAgB,SAAA;AACtB,EAAA,KAAA,CAAM,kBAAA,GAAqB,aAAA;AAC3B,EAAA,KAAA,CAAM,kBAAA,GAAqB,aAAA;AAC3B,EAAA,OAAO,KAAA;AACT,CAAA;AAOA,SAAS,mBAAA,CACP,UAAA,EACA,SAAA,EACA,OAAA,EACA,SACA,eAAA,EACA;AACA,EAAA,MAAM,GAAA,GAAM,eAAA,GACR,iBAAA,CAAkB,GAAA,CAAI,EAAA,GACrB,iBAAA,GAAoB,UAA4C,CAAA,GAC/D,SACF,CAAA,IAAK,iBAAA,CAAkB,EAAA,CAAG,EAAA;AAE9B,EAAA,MAAM,UAAA,GAAa,GAAA,CAAI,aAAA,GAAgB,CAAA,GAAK,OAAA,IAAW,IAAA;AACvD,EAAA,MAAM,aAAa,OAAA,IAAW,GAAA;AAE9B,EAAA,OAAO;AAAA,IACL,oBAAoB,GAAA,CAAI,mBAAA;AAAA,IACxB,gBAAgB,GAAA,CAAI,eAAA;AAAA,IACpB,UAAA;AAAA,IACA,UAAA;AAAA,IACA,UAAA,EAAY,eAAe,KAAA,IAAS;AAAA,GACtC;AACF;AAEA,SAAS,mBAAA,CAAoB,YAAoB,aAAA,EAA+B;AAC9E,EAAA,MAAM,WAAW,aAAA,IAAiB,GAAA;AAClC,EAAA,IAAI,QAAA,IAAY,GAAG,OAAO,CAAA;AAE1B,EAAA,MAAM,YAAA,GAAe,KAAK,GAAA,CAAI,IAAA,CAAK,IAAI,UAAA,EAAY,CAAC,GAAG,QAAQ,CAAA;AAC/D,EAAA,MAAM,QAAQ,YAAA,GAAe,QAAA;AAE7B,EAAA,OAAO,IAAA,CAAK,IAAI,qBAAA,GAAwB,CAAA,EAAG,KAAK,KAAA,CAAM,KAAA,IAAS,qBAAA,GAAwB,CAAA,CAAE,CAAC,CAAA;AAC5F;AAEA,SAAS,oBAAA,CACP,MAAA,EACA,IAAA,EACA,SAAA,EACA,SAAA,GAAoB,CAAA,EACpB,UAAA,GAAqB,CAAA,EACrB,IAAA,GAAe,CAAA,EACf,MAAA,GAAiB,CAAA,EACQ;AACzB,EAAA,MAAM,OAAgC,EAAC;AACvC,EAAA,KAAA,IAAS,CAAA,GAAI,MAAA,EAAQ,CAAA,IAAK,IAAA,EAAM,KAAK,IAAA,EAAM;AACzC,IAAA,MAAM,GAAA,GAAA,CAAQ,CAAA,GAAI,UAAA,IAAc,IAAA,CAAK,KAAK,SAAA,GAAa,GAAA;AACvD,IAAA,MAAM,CAAA,GAAI,MAAA,GAAS,SAAA,GAAY,IAAA,CAAK,IAAI,GAAG,CAAA;AAC3C,IAAA,IAAA,CAAK,IAAA,CAAK,CAAC,CAAA,EAAG,CAAC,CAAC,CAAA;AAAA,EAClB;AACA,EAAA,OAAO,IAAA;AACT;AAYA,SAAS,YAAA,CACP,IAAA,EACA,aAAA,EACA,OAAA,EACA,aAAA,EACA,gBAAA,EACA,UAAA,EACA,SAAA,EACA,aAAA,GAAuC,EAAC,EACxC,eAAA,EACoB;AACpB,EAAA,MAAM,EAAE,kBAAA,EAAoB,cAAA,EAAgB,UAAA,EAAY,UAAA,EAAY,UAAA,EAAW,GAC7E,mBAAA,CAAoB,UAAA,EAAY,SAAA,EAAW,gBAAA,EAAkB,OAAA,EAAS,eAAe,CAAA;AAEvF,EAAA,MAAM,UAAU,KAAA,CAAM,IAAA;AAAA,IAAK,EAAE,QAAQ,kBAAA,EAAmB;AAAA,IAAG,MACzD,IAAI,KAAA,CAAM,qBAAqB,CAAA,CAAE,KAAK,CAAC;AAAA,GACzC;AAEA,EAAA,MAAM,WAAA,GAAc,UAAA,KAAe,CAAA,GAAI,kBAAA,GAAqB,kBAAA,GAAqB,CAAA;AACjF,EAAA,MAAM,UAAA,GAAc,aAAa,aAAA,GAAiB,WAAA;AAElD,EAAA,IAAI,QAAA,GAAW,CAAA;AACf,EAAA,IAAI,UAAA,GAAa,CAAA;AAEjB,EAAA,MAAM,cAAA,GAAiB,CAAC,QAAA,EAAkB,MAAA,KAA4B;AACpE,IAAA,IAAI,CAAC,aAAA,EAAe,MAAA,EAAQ,OAAO,KAAA;AAEnC,IAAA,OAAO,aAAA,CAAc,IAAA;AAAA,MACnB,CAAC,CAAA,KACC,QAAA,IAAY,CAAA,CAAE,QAAA,IACd,QAAA,IAAY,CAAA,CAAE,QAAA,IACd,MAAA,IAAU,CAAA,CAAE,MAAA,IACZ,MAAA,IAAU,CAAA,CAAE;AAAA,KAChB;AAAA,EACF,CAAA;AAEA,EAAA,IAAA,EAAM,QAAQ,CAAC,CAAC,WAAA,EAAa,SAAA,EAAW,KAAK,CAAA,KAAM;AACjD,IAAA,MAAM,QAAA,GAAW,mBAAA,CAAoB,WAAA,EAAa,aAAa,CAAA;AAE/D,IAAA,MAAM,YAAY,IAAA,CAAK,KAAA;AAAA,MAAA,CACpB,UAAA,GAAa,IAAA,CAAK,GAAA,CAAI,SAAS,IAAI,SAAA,IAAa;AAAA,KACnD;AAGA,IAAA,IAAI,cAAA,CAAe,WAAA,EAAa,SAAS,CAAA,EAAG;AAC1C,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,QAAA,GAAW,IAAA,CAAK,KAAA,CAAM,SAAA,GAAY,aAAa,cAAc,CAAA;AACjE,IAAA,QAAA,GAAW,IAAA,CAAK,IAAI,CAAA,EAAG,IAAA,CAAK,IAAI,kBAAA,GAAqB,CAAA,EAAG,QAAQ,CAAC,CAAA;AAEjE,IAAA,OAAA,CAAQ,QAAQ,CAAA,CAAE,QAAQ,CAAA,IAAK,KAAA;AAE/B,IAAA,IAAI,IAAA,CAAK,IAAI,SAAS,CAAA,GAAI,KAAK,GAAA,CAAI,QAAQ,GAAG,QAAA,GAAW,SAAA;AACzD,IAAA,UAAA,IAAc,KAAA;AAAA,EAChB,CAAC,CAAA;AAED,EAAA,OAAO;AAAA,IACL,OAAA;AAAA,IACA,UAAA;AAAA,IACA,QAAA;AAAA,IACA,UAAA;AAAA,IACA,kBAAA;AAAA,IACA,UAAA;AAAA,IACA;AAAA,GACF;AACF;AAiBO,IAAM,YAAN,MAAgB;AAAA,EA0BrB,YAAY,MAAA,EAAyB;AAxBrC,IAAA,IAAA,CAAQ,SAAA,GAAgC,IAAA;AACxC;AAAA,IAAA,IAAA,CAAQ,SAAA,GAAmC,IAAA;AAC3C;AAAA,IAAA,IAAA,CAAQ,OAAA,GAAkC,IAAA;AAC1C,IAAA,IAAA,CAAQ,WAAA,GAAmB,IAAA;AAE3B,IAAA,IAAA,CAAQ,WAAA,GAAuB,KAAA;AAG/B;AAAA,IAAA,IAAA,CAAQ,iBAAA,GAAqD,IAAA;AAC7D,IAAA,IAAA,CAAQ,aAAA,GAAuD,IAAA;AAC/D,IAAA,IAAA,CAAQ,eAAA,GAA0C,IAAA;AAClD,IAAA,IAAA,CAAQ,aAAA,GAAsC,IAAA;AAC9C,IAAA,IAAA,CAAQ,gBAAA,GAA0C,IAAA;AAClD,IAAA,IAAA,CAAQ,cAAA,GAAsC,IAAA;AAC9C,IAAA,IAAA,CAAQ,cAAA,GAAkD,IAAA;AAC1D,IAAA,IAAA,CAAQ,KAAA,GAA4B,IAAA;AACpC,IAAA,IAAA,CAAQ,KAAA,GAA4B,IAAA;AAGpC;AAAA,IAAA,IAAA,CAAQ,KAAA,GAAwB,EAAE,SAAA,EAAW,CAAA,EAAG,YAAY,CAAA,EAAE;AAM5D,IAAA,IAAA,CAAK,EAAA,GAAK,MAAA,CAAO,EAAA,IAAM,UAAA,CAAW,MAAM,CAAA;AACxC,IAAA,IAAA,CAAK,MAAA,GAAS;AAAA,MACZ,aAAA,EAAe,CAAA;AAAA,MACf,iBAAA,EAAmB,KAAA;AAAA,MACnB,OAAA,EAAS,GAAA;AAAA,MACT,OAAA,EAAS,IAAA;AAAA,MACT,aAAA,EAAe,GAAA;AAAA,MACf,eAAA,EAAiB,EAAE,KAAA,EAAO,IAAA,EAAM,MAAM,IAAA,EAAK;AAAA,MAC3C,eAAe,EAAC;AAAA,MAChB,UAAA,EAAY,GAAA;AAAA,MACZ,eAAA,EAAiB,KAAA;AAAA,MACjB,gBAAA,EAAkB,IAAA;AAAA,MAClB,YAAA,EAAc,IAAA;AAAA,MACd,QAAA,EAAU,CAAA;AAAA,MACV,QAAA,EAAU,GAAA;AAAA,MACV,GAAG;AAAA,KACL;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAa,KAAK,SAAA,EAAgD;AAChE,IAAA,IAAI,KAAK,WAAA,EAAa;AACpB,MAAA,MAAM,IAAI,MAAM,qCAAqC,CAAA;AAAA,IACvD;AAGA,IAAA,IAAI,OAAO,cAAc,QAAA,EAAU;AACjC,MAAA,MAAM,EAAA,GAAK,QAAA,CAAS,cAAA,CAAe,SAAS,CAAA;AAC5C,MAAA,IAAI,CAAC,EAAA,EAAI;AACP,QAAA,MAAM,IAAI,KAAA,CAAM,CAAA,mBAAA,EAAsB,SAAS,CAAA,WAAA,CAAa,CAAA;AAAA,MAC9D;AACA,MAAA,IAAA,CAAK,SAAA,GAAY,EAAA;AAAA,IACnB,CAAA,MAAO;AACL,MAAA,IAAA,CAAK,SAAA,GAAY,SAAA;AAAA,IACnB;AAGA,IAAA,IAAI,CAAC,IAAA,CAAK,SAAA,CAAU,EAAA,EAAI;AACtB,MAAA,IAAA,CAAK,SAAA,CAAU,KAAK,IAAA,CAAK,EAAA;AAAA,IAC3B;AAKA,IAAA,MAAM,UAAA,GAAa,IAAA,CAAK,SAAA,CAAU,aAAA,CAAc,cAAc,CAAA;AAC9D,IAAA,IAAA,CAAK,SAAA,GAAY,cAAe,IAAA,CAAK,SAAA;AAGrC,IAAA,IAAI,CAAC,IAAA,CAAK,SAAA,CAAU,EAAA,EAAI;AACtB,MAAA,IAAA,CAAK,SAAA,CAAU,EAAA,GAAK,CAAA,EAAG,IAAA,CAAK,EAAE,CAAA,KAAA,CAAA;AAAA,IAChC;AAGA,IAAA,MAAM,KAAK,aAAA,EAAc;AAAA,EAC3B;AAAA;AAAA;AAAA;AAAA,EAKA,MAAc,aAAA,GAA+B;AAE3C,IAAA,IAAI,KAAK,WAAA,IAAe,CAAC,KAAK,SAAA,IAAa,CAAC,KAAK,SAAA,EAAW;AAC1D,MAAA;AAAA,IACF;AAGA,IAAA,IAAI,CAAC,QAAA,CAAS,IAAA,CAAK,QAAA,CAAS,IAAA,CAAK,SAAS,CAAA,EAAG;AAC3C,MAAA;AAAA,IACF;AAGA,IAAA,oBAAA,EAAqB;AAErB,IAAA,MAAM,QAAQ,eAAA,EAAgB;AAE9B,IAAA,IAAI,eAAA;AACJ,IAAA,IAAI,WAAA;AAEJ,IAAA,IAAI;AACF,MAAA,MAAM,MAAA,GAAS,MAAMF,wBAAAA,CAAgB,MAAA;AAAA,QACnC,IAAA,CAAK,SAAA;AAAA,QACL,EAAE,KAAA;AAAM,OACV;AACA,MAAA,eAAA,GAAkB,MAAA,CAAO,eAAA;AACzB,MAAA,WAAA,GAAc,MAAA,CAAO,WAAA;AAAA,IACvB,SAAS,CAAA,EAAG;AAEV,MAAA,OAAA,CAAQ,IAAA,CAAK,uCAAuC,CAAC,CAAA;AACrD,MAAA;AAAA,IACF;AAGA,IAAA,IAAI,IAAA,CAAK,WAAA,IAAe,CAAC,IAAA,CAAK,SAAA,EAAW;AACvC,MAAA,IAAI;AACF,QAAA,eAAA,CAAgB,MAAA,EAAO;AAAA,MACzB,SAAS,CAAA,EAAG;AAAA,MAEZ;AACA,MAAA;AAAA,IACF;AAEA,IAAA,IAAA,CAAK,OAAA,GAAU,eAAA;AACf,IAAA,IAAA,CAAK,WAAA,GAAc,WAAA;AAGnB,IAAA,MAAM,gBAAA,GAAmB,IAAA,CAAK,MAAA,CAAO,OAAA,IAAW,0BAAA;AAChD,IAAA,MAAM,EAAE,OAAA,EAAS,UAAA,EAAY,UAAU,UAAA,EAAY,kBAAA,EAAoB,YAAW,GAChF,YAAA;AAAA,MACE,KAAK,MAAA,CAAO,IAAA;AAAA,MACZ,KAAK,MAAA,CAAO,aAAA;AAAA,MACZ,KAAK,MAAA,CAAO,OAAA;AAAA,MACZ,KAAK,MAAA,CAAO,aAAA;AAAA,MACZ,gBAAA;AAAA,MACA,IAAA,CAAK,MAAA,CAAO,eAAA,EAAiB,KAAA,IAAS,IAAA;AAAA,MACtC,IAAA,CAAK,MAAA,CAAO,eAAA,EAAiB,IAAA,IAAQ,IAAA;AAAA,MACrC,KAAK,MAAA,CAAO,aAAA;AAAA,MACZ,KAAK,MAAA,CAAO;AAAA,KACd;AAEF,IAAA,IAAA,CAAK,KAAA,GAAQ,EAAE,SAAA,EAAW,QAAA,EAAU,UAAA,EAAW;AAE/C,IAAA,MAAM,UAAA,GAAa,IAAA,CAAK,MAAA,CAAO,UAAA,IAAc,gBAAA;AAG7C,IAAA,IAAA,CAAK,KAAA,GAAQ,IAAIuB,oBAAA,CAAY,WAAA,EAAa;AAAA,MACxC,WAAWC,mBAAA,CAAW,KAAA;AAAA,MACtB,aAAaC,uBAAA,CAAe,OAAA;AAAA,MAC5B,cAAA,EAAgB,CAAA;AAAA,MAChB,YAAA,EAAc,MAAA;AAAA,MACd,UAAA,EAAY,CAAA;AAAA,MACZ,UAAA,EAAY,EAAA;AAAA,MACZ,cAAA,EAAgB,IAAA;AAAA,MAChB,SAAA,EAAW,KAAA;AAAA,MACX,eAAeC,uBAAA,CAAe,MAAA;AAAA,MAC9B,SAAA,EAAW,oBAAA;AAAA,MACX,cAAA,EAAgB;AAAA,QACd,QAAA,EAAU,EAAA;AAAA,QACV,UAAA,EAAY,MAAA;AAAA,QACZ,KAAA,EAAO;AAAA,OACT;AAAA,MACA,YAAA,EAAc,IAAIT,oBAAAA,CAAY,CAAA,EAAG,GAAG,CAAA;AAAA,MACpC,iBAAA,EAAmB,IAAIA,oBAAAA,CAAY,CAAA,EAAG,GAAG;AAAA,KAC1C,CAAA;AAGD,IAAA,MAAM,MAAA,GAAS,UAAA,GACX,IAAIA,oBAAAA,CAAY,CAAA,EAAG,UAAU,CAAA,GAC7B,IAAIA,oBAAAA,CAAY,CAAC,UAAA,EAAY,UAAU,CAAA;AAE3C,IAAA,IAAA,CAAK,KAAA,GAAQ,IAAIM,oBAAA,CAAY,WAAA,EAAa;AAAA,MACxC,WAAWC,mBAAA,CAAW,KAAA;AAAA,MACtB,aAAaC,uBAAA,CAAe,OAAA;AAAA,MAC5B,cAAA,EAAgB,CAAA;AAAA,MAChB,cAAA,EAAgB,IAAA;AAAA,MAChB,eAAeC,uBAAA,CAAe,KAAA;AAAA,MAC9B,SAAA,EAAW,CAAA,WAAA,EAAc,IAAA,CAAK,MAAA,CAAO,iBAAiB,CAAA,CAAA,CAAA;AAAA,MACtD,cAAA,EAAgB;AAAA,QACd,QAAA,EAAU,EAAA;AAAA,QACV,UAAA,EAAY,MAAA;AAAA,QACZ,KAAA,EAAO,OAAA;AAAA,QACP,QAAA,EAAU;AAAA,OACZ;AAAA,MACA,YAAA,EAAc,MAAA;AAAA,MACd,iBAAA,EAAmB;AAAA,KACpB,CAAA;AAED,IAAA,eAAA,CAAgB,KAAA,CAAM,GAAA,CAAI,IAAA,CAAK,KAAK,CAAA;AACpC,IAAA,eAAA,CAAgB,KAAA,CAAM,GAAA,CAAI,IAAA,CAAK,KAAK,CAAA;AAGpC,IAAA,IAAA,CAAK,aAAA,CAAc,OAAA,EAAS,UAAA,EAAY,kBAAA,EAAoB,UAAU,CAAA;AAGtE,IAAA,IAAI,IAAA,CAAK,OAAO,YAAA,EAAc;AAC5B,MAAA,IAAA,CAAK,cAAA,CAAe,YAAY,UAAU,CAAA;AAAA,IAC5C;AAGA,IAAA,MAAM,cAAA,GAAiB,IAAIC,uBAAA,EAAe;AAC1C,IAAA,cAAA,CAAe,aAAA,GAAgB,SAAA;AAC/B,IAAA,cAAA,CAAe,eAAA,GAAkB,SAAA;AAEjC,IAAA,eAAA,CAAgB,cAAA,CAAe,GAAA;AAAA,MAC7B,cAAA;AAAA,MACA,IAAIC,iCAAA,EAAyB;AAAA,MAC7B,IAAIC,4BAAA;AAAoB,KAC1B;AAGA,IAAA,IAAI,IAAA,CAAK,OAAO,gBAAA,EAAkB;AAChC,MAAA,MAAM,KAAK,mBAAA,EAAoB;AAAA,IACjC;AAGA,IAAA,IAAA,CAAK,aAAA,GAAgB,KAAK,KAAK,CAAA;AAAA,EACjC;AAAA,EAEQ,aAAA,CACN,OAAA,EACA,UAAA,EACA,kBAAA,EACA,UAAA,EACM;AACN,IAAA,IAAI,CAAC,IAAA,CAAK,OAAA,IAAW,CAAC,KAAK,WAAA,EAAa;AAExC,IAAA,MAAM,UAAA,GAAa,IAAA,CAAK,MAAA,CAAO,UAAA,IAAc,qBAAA;AAE7C,IAAA,IAAA,CAAK,eAAA,GAAkB,IAAIC,wBAAA,CAAgB;AAAA,MACzC,OAAA,EAAS,IAAA,CAAK,MAAA,CAAO,QAAA,IAAY,CAAA;AAAA,MACjC,OAAA,EAAS,IAAA,CAAK,MAAA,CAAO,QAAA,IAAY,GAAA;AAAA,MACjC,aAAA,EAAe;AAAA,KAChB,CAAA;AAED,IAAA,IAAA,CAAK,iBAAA,GAAoB,IAAIC,iCAAA,CAAyB,IAAA,CAAK,WAAA,EAAa;AAAA,MACtE,OAAA;AAAA,MACA,MAAA,EAAQ,CAAA;AAAA,MACR,KAAA,EAAO,gCAAA;AAAA,MACP,MAAA,EAAQ,UAAA,GAAa,CAAA,GAAK,EAAA,GAAK,qBAAqB,UAAA,GAAc,CAAA;AAAA,MAClE,KAAA,EAAO;AAAA,KACR,CAAA;AAED,IAAA,IAAA,CAAK,aAAA,GAAgB,IAAIC,uCAAA,CAA+B,IAAA,CAAK,WAAA,EAAa;AAAA,MACxE,YAAY,IAAA,CAAK,iBAAA;AAAA,MACjB,UAAU,IAAA,CAAK;AAAA,KAChB,CAAA;AAED,IAAA,IAAA,CAAK,OAAA,CAAQ,gBAAA,CAAiB,GAAA,CAAI,IAAA,CAAK,aAAa,CAAA;AAAA,EACtD;AAAA,EAEQ,cAAA,CAAe,YAAoB,UAAA,EAA2B;AACpE,IAAA,IAAI,CAAC,IAAA,CAAK,OAAA,IAAW,CAAC,KAAK,WAAA,EAAa;AAExC,IAAA,MAAM,aAAA,GAAgB,UAAA,GAAa,UAAA,GAAa,CAAA,GAAI,UAAA;AACpD,IAAA,MAAM,UAAA,GAAa,UAAA,GAAa,UAAA,GAAa,CAAA,GAAI,CAAA;AAEjD,IAAA,MAAM,YAAA,GAAe,qBAAqB,CAAA,EAAG,GAAA,EAAK,eAAe,CAAA,EAAG,CAAA,EAAG,GAAG,UAAU,CAAA;AAEpF,IAAA,IAAA,CAAK,cAAA,GAAiB,IAAIC,qBAAA,CAAa,IAAA,CAAK,WAAW,CAAA;AACvD,IAAA,YAAA,CAAa,OAAA,CAAQ,CAAC,CAAC,CAAA,EAAG,CAAC,CAAA,KAAM,IAAA,CAAK,cAAA,CAAgB,MAAA,CAAO,CAAA,EAAG,CAAC,CAAC,CAAA;AAElE,IAAA,IAAA,CAAK,cAAA,GAAiB,IAAIC,iCAAA,CAAyB,IAAA,CAAK,WAAA,EAAa;AAAA,MACnE,YAAY,IAAA,CAAK,cAAA;AAAA,MACjB,MAAA,EAAQ,OAAA;AAAA,MACR,eAAA,EAAiB;AAAA,KAClB,CAAA;AAED,IAAA,IAAA,CAAK,OAAA,CAAQ,gBAAA,CAAiB,GAAA,CAAI,IAAA,CAAK,cAAc,CAAA;AAAA,EACvD;AAAA,EAEA,MAAc,mBAAA,GAAqC;AACjD,IAAA,IAAI,CAAC,IAAA,CAAK,SAAA,IAAa,CAAC,KAAK,eAAA,EAAiB;AAE9C,IAAA,IAAA,CAAK,kBAAA,EAAmB;AAIxB,IAAA,IAAI,GAAA,GAAM,IAAA,CAAK,SAAA,CAAU,aAAA,CAAc,gBAAgB,CAAA;AACvD,IAAA,IAAI,CAAC,GAAA,EAAK;AACR,MAAA,GAAA,GAAM,QAAA,CAAS,cAAc,KAAK,CAAA;AAClC,MAAA,GAAA,CAAI,SAAA,GAAY,eAAA;AAChB,MAAA,GAAA,CAAI,MAAM,QAAA,GAAW,UAAA;AACrB,MAAA,GAAA,CAAI,MAAM,GAAA,GAAM,MAAA;AAChB,MAAA,GAAA,CAAI,MAAM,IAAA,GAAO,KAAA;AACjB,MAAA,GAAA,CAAI,MAAM,MAAA,GAAS,MAAA;AACnB,MAAA,GAAA,CAAI,MAAM,KAAA,GAAQ,MAAA;AAClB,MAAA,GAAA,CAAI,MAAM,aAAA,GAAgB,MAAA;AAC1B,MAAA,IAAA,CAAK,SAAA,CAAU,YAAY,GAAG,CAAA;AAAA,IAChC;AAEA,IAAA,IAAI,CAAC,IAAI,EAAA,EAAI;AACX,MAAA,GAAA,CAAI,EAAA,GAAK,CAAA,EAAG,IAAA,CAAK,EAAE,CAAA,OAAA,CAAA;AAAA,IACrB;AACA,IAAA,IAAA,CAAK,gBAAA,GAAmB,GAAA;AAExB,IAAA,MAAM,GAAA,GAAM,IAAA,CAAK,MAAA,CAAO,QAAA,IAAY,CAAA;AACpC,IAAA,MAAM,GAAA,GAAM,IAAA,CAAK,MAAA,CAAO,QAAA,IAAY,GAAA;AAEpC,IAAA,MAAM,EAAE,aAAA,EAAc,GAAI,MAAMC,sBAAA,CAAc,OAAO,GAAA,EAAK;AAAA,MACxD,OAAO,iBAAA,EAAkB;AAAA,MACzB,YAAA,EAAc;AAAA,QACZ,YAAA,EAAc,IAAIlB,oBAAAA,CAAY,GAAA,EAAK,GAAG,CAAA;AAAA,QACtC,UAAA,EAAA,CAAa,MAAM,GAAA,IAAO,CAAA;AAAA,QAC1B,UAAA,EAAA,CAAa,MAAM,GAAA,IAAO,EAAA;AAAA,QAC1B,aAAaQ,uBAAA,CAAe,OAAA;AAAA,QAC5B,cAAA,EAAgB,CAAA;AAAA,QAChB,YAAA,EAAc,CAAA;AAAA,QACd,YAAA,EAAc,CAAA;AAAA,QACd,UAAA,EAAY,EAAE,QAAA,EAAU,EAAA,EAAI,OAAO,SAAA,EAAU;AAAA,QAC7C,kBAAA,EAAoB;AAAA,UAClB,KAAA,EAAO,SAAA;AAAA,UACP,QAAA,EAAU,CAAA;AAAA,UACV,eAAA,EAAiB;AAAA,SACnB;AAAA,QACA,kBAAA,EAAoB;AAAA,UAClB,KAAA,EAAO,MAAA;AAAA,UACP,QAAA,EAAU,CAAA;AAAA,UACV,eAAA,EAAiB;AAAA,SACnB;AAAA,QACA,UAAA,EAAY;AAAA,UACV,UAAA,EAAY,CAAA;AAAA,UACZ,WAAA,EAAa,CAAA;AAAA,UACb,SAAA,EAAW,CAAA;AAAA,UACX,YAAA,EAAc,CAAA;AAAA,UACd,KAAA,EAAO;AAAA;AACT,OACF;AAAA,MACA,UAAU,IAAA,CAAK;AAAA,KAChB,CAAA;AAED,IAAA,IAAA,CAAK,aAAA,GAAgB,aAAA;AAAA,EACvB;AAAA,EAEQ,kBAAA,GAA2B;AACjC,IAAA,IAAI,KAAK,aAAA,EAAe;AACtB,MAAA,IAAI;AACF,QAAA,IAAA,CAAK,cAAc,MAAA,EAAO;AAAA,MAC5B,SAAS,CAAA,EAAG;AAAA,MAEZ;AACA,MAAA,IAAA,CAAK,aAAA,GAAgB,IAAA;AAAA,IACvB;AACA,IAAA,IAAI,KAAK,gBAAA,EAAkB;AACzB,MAAA,IAAA,CAAK,iBAAiB,MAAA,EAAO;AAC7B,MAAA,IAAA,CAAK,gBAAA,GAAmB,IAAA;AAAA,IAC1B;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKO,WAAW,IAAA,EAA6B;AAC7C,IAAA,IAAA,CAAK,OAAO,IAAA,GAAO,IAAA;AACnB,IAAA,IAAA,CAAK,OAAA,EAAQ;AAAA,EACf;AAAA;AAAA;AAAA;AAAA,EAKO,mBAAmB,KAAA,EAAkC;AAC1D,IAAA,IAAA,CAAK,OAAO,eAAA,GAAkB,KAAA;AAC9B,IAAA,IAAA,CAAK,OAAA,EAAQ;AAAA,EACf;AAAA;AAAA;AAAA;AAAA,EAKO,iBAAiB,aAAA,EAA4C;AAClE,IAAA,IAAA,CAAK,OAAO,aAAA,GAAgB,aAAA;AAC5B,IAAA,IAAA,CAAK,OAAA,EAAQ;AAAA,EACf;AAAA;AAAA;AAAA;AAAA,EAKO,cAAc,KAAA,EAAqB;AACxC,IAAA,IAAA,CAAK,OAAO,UAAA,GAAa,KAAA;AACzB,IAAA,IAAA,CAAK,OAAA,EAAQ;AAAA,EACf;AAAA;AAAA;AAAA;AAAA,EAKO,QAAQ,QAAA,EAAiD;AAC9D,IAAA,IAAA,CAAK,aAAA,GAAgB,QAAA;AAAA,EACvB;AAAA;AAAA;AAAA;AAAA,EAKO,QAAA,GAA2B;AAChC,IAAA,OAAO,EAAE,GAAG,IAAA,CAAK,KAAA,EAAM;AAAA,EACzB;AAAA;AAAA;AAAA;AAAA,EAKO,OAAA,GAAgB;AACrB,IAAA,IAAI,CAAC,IAAA,CAAK,OAAA,IAAW,CAAC,KAAK,WAAA,EAAa;AAExC,IAAA,MAAM,gBAAA,GAAmB,IAAA,CAAK,MAAA,CAAO,OAAA,IAAW,0BAAA;AAChD,IAAA,MAAM,UAAA,GAAa,IAAA,CAAK,MAAA,CAAO,UAAA,IAAc,gBAAA;AAE7C,IAAA,MAAM,EAAE,OAAA,EAAS,UAAA,EAAY,UAAU,UAAA,EAAY,kBAAA,EAAoB,YAAW,GAChF,YAAA;AAAA,MACE,KAAK,MAAA,CAAO,IAAA;AAAA,MACZ,KAAK,MAAA,CAAO,aAAA;AAAA,MACZ,KAAK,MAAA,CAAO,OAAA;AAAA,MACZ,KAAK,MAAA,CAAO,aAAA;AAAA,MACZ,gBAAA;AAAA,MACA,IAAA,CAAK,MAAA,CAAO,eAAA,EAAiB,KAAA,IAAS,IAAA;AAAA,MACtC,IAAA,CAAK,MAAA,CAAO,eAAA,EAAiB,IAAA,IAAQ,IAAA;AAAA,MACrC,KAAK,MAAA,CAAO,aAAA;AAAA,MACZ,KAAK,MAAA,CAAO;AAAA,KACd;AAEF,IAAA,IAAA,CAAK,KAAA,GAAQ,EAAE,SAAA,EAAW,QAAA,EAAU,UAAA,EAAW;AAG/C,IAAA,IAAI,KAAK,KAAA,EAAO;AACd,MAAA,MAAM,MAAA,GAAS,UAAA,GACX,IAAIR,oBAAAA,CAAY,CAAA,EAAG,UAAU,CAAA,GAC7B,IAAIA,oBAAAA,CAAY,CAAC,UAAA,EAAY,UAAU,CAAA;AAC3C,MAAA,IAAA,CAAK,MAAM,YAAA,GAAe,MAAA;AAC1B,MAAA,IAAA,CAAK,MAAM,iBAAA,GAAoB,MAAA;AAAA,IACjC;AAGA,IAAA,IAAI,KAAK,iBAAA,EAAmB;AAC1B,MAAA,MAAM,YACJ,IAAA,CAAK,iBAAA,CAAkB,gBAAgB,kBAAA,IACvC,IAAA,CAAK,kBAAkB,UAAA,KAAe,qBAAA;AAExC,MAAA,IAAI,SAAA,EAAW;AAEb,QAAA,IAAI,KAAK,aAAA,EAAe;AACtB,UAAA,IAAA,CAAK,OAAA,CAAQ,gBAAA,CAAiB,MAAA,CAAO,IAAA,CAAK,aAAa,CAAA;AACvD,UAAA,IAAA,CAAK,cAAc,MAAA,EAAO;AAAA,QAC5B;AACA,QAAA,IAAA,CAAK,kBAAkB,MAAA,EAAO;AAE9B,QAAA,IAAA,CAAK,iBAAA,GAAoB,IAAIc,iCAAA,CAAyB,IAAA,CAAK,WAAA,EAAa;AAAA,UACtE,OAAA;AAAA,UACA,MAAA,EAAQ,CAAA;AAAA,UACR,KAAA,EAAO,gCAAA;AAAA,UACP,MAAA,EAAQ,UAAA,GAAa,CAAA,GAAK,EAAA,GAAK,qBAAqB,UAAA,GAAc,CAAA;AAAA,UAClE,KAAA,EAAO;AAAA,SACR,CAAA;AAED,QAAA,IAAA,CAAK,aAAA,GAAgB,IAAIC,uCAAA,CAA+B,IAAA,CAAK,WAAA,EAAa;AAAA,UACxE,YAAY,IAAA,CAAK,iBAAA;AAAA,UACjB,UAAU,IAAA,CAAK;AAAA,SAChB,CAAA;AAED,QAAA,IAAA,CAAK,OAAA,CAAQ,gBAAA,CAAiB,GAAA,CAAI,IAAA,CAAK,aAAa,CAAA;AAAA,MACtD,CAAA,MAAO;AAEL,QAAA,IAAI,OAAQ,IAAA,CAAK,iBAAA,CAA0B,UAAA,KAAe,UAAA,EAAY;AACpE,UAAC,IAAA,CAAK,iBAAA,CAA0B,UAAA,CAAW,OAAO,CAAA;AAAA,QACpD,CAAA,MAAO;AACL,UAAC,IAAA,CAAK,kBAA0B,OAAA,GAAU,OAAA;AAAA,QAC5C;AACA,QAAA,IAAA,CAAK,kBAAkB,MAAA,GAAS,UAAA,GAC5B,CAAA,GACC,EAAA,GAAK,qBAAqB,UAAA,GAAc,CAAA;AAC7C,QAAA,IAAA,CAAK,kBAAkB,KAAA,GAAQ,UAAA;AAAA,MACjC;AAAA,IACF;AAGA,IAAA,IAAI,IAAA,CAAK,cAAA,IAAkB,IAAA,CAAK,MAAA,CAAO,YAAA,EAAc;AACnD,MAAA,IAAA,CAAK,eAAe,KAAA,EAAM;AAC1B,MAAA,MAAM,aAAA,GAAgB,UAAA,GAAa,UAAA,GAAa,CAAA,GAAI,UAAA;AACpD,MAAA,MAAM,UAAA,GAAa,UAAA,GAAa,UAAA,GAAa,CAAA,GAAI,CAAA;AACjD,MAAA,MAAM,YAAA,GAAe,qBAAqB,CAAA,EAAG,GAAA,EAAK,eAAe,CAAA,EAAG,CAAA,EAAG,GAAG,UAAU,CAAA;AACpF,MAAA,YAAA,CAAa,OAAA,CAAQ,CAAC,CAAC,CAAA,EAAG,CAAC,CAAA,KAAM,IAAA,CAAK,cAAA,CAAgB,MAAA,CAAO,CAAA,EAAG,CAAC,CAAC,CAAA;AAAA,IACpE;AAEA,IAAA,IAAA,CAAK,QAAQ,iBAAA,EAAkB;AAC/B,IAAA,IAAA,CAAK,aAAA,GAAgB,KAAK,KAAK,CAAA;AAAA,EACjC;AAAA;AAAA;AAAA;AAAA,EAKO,WAAW,OAAA,EAAyC;AACzD,IAAA,IAAA,CAAK,SAAS,EAAE,GAAG,IAAA,CAAK,MAAA,EAAQ,GAAG,OAAA,EAAQ;AAC3C,IAAA,IAAA,CAAK,OAAA,EAAQ;AAAA,EACf;AAAA;AAAA;AAAA;AAAA,EAKO,SAAA,GAAkB;AACvB,IAAA,IAAI,CAAC,KAAK,OAAA,EAAS;AACnB,IAAA,IAAA,CAAK,QAAQ,WAAA,EAAY;AAAA,EAC3B;AAAA;AAAA;AAAA;AAAA,EAKA,MAAa,WAAA,CAAY,MAAA,GAAyB,KAAA,EAAwB;AACxE,IAAA,IAAI,CAAC,KAAK,SAAA,EAAW;AACnB,MAAA,MAAM,IAAI,MAAM,uBAAuB,CAAA;AAAA,IACzC;AAEA,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,SAAA,CAAU,aAAA,CAAc,QAAQ,CAAA;AACpD,IAAA,IAAI,CAAC,MAAA,EAAQ;AACX,MAAA,MAAM,IAAI,MAAM,kBAAkB,CAAA;AAAA,IACpC;AAEA,IAAA,MAAM,QAAA,GAAW,MAAA,KAAW,MAAA,GAAS,YAAA,GAAe,WAAA;AACpD,IAAA,OAAO,MAAA,CAAO,UAAU,QAAQ,CAAA;AAAA,EAClC;AAAA;AAAA;AAAA;AAAA,EAKO,SAAA,GAA6B;AAClC,IAAA,OAAO,EAAE,GAAG,IAAA,CAAK,MAAA,EAAO;AAAA,EAC1B;AAAA;AAAA;AAAA;AAAA,EAKO,OAAA,GAAmB;AACxB,IAAA,OAAO,IAAA,CAAK,OAAA,KAAY,IAAA,IAAQ,CAAC,IAAA,CAAK,WAAA;AAAA,EACxC;AAAA;AAAA;AAAA;AAAA,EAKO,OAAA,GAAgB;AACrB,IAAA,IAAI,KAAK,WAAA,EAAa;AAGtB,IAAA,IAAA,CAAK,WAAA,GAAc,IAAA;AAEnB,IAAA,IAAI;AACF,MAAA,IAAA,CAAK,kBAAA,EAAmB;AAAA,IAC1B,SAAS,CAAA,EAAG;AAAA,IAEZ;AAEA,IAAA,IAAI;AACF,MAAA,IAAI,IAAA,CAAK,cAAA,IAAkB,IAAA,CAAK,OAAA,EAAS;AACvC,QAAA,IAAA,CAAK,OAAA,CAAQ,gBAAA,CAAiB,MAAA,CAAO,IAAA,CAAK,cAAc,CAAA;AACxD,QAAA,IAAA,CAAK,eAAe,MAAA,EAAO;AAAA,MAC7B;AAAA,IACF,SAAS,CAAA,EAAG;AAAA,IAEZ;AACA,IAAA,IAAA,CAAK,cAAA,GAAiB,IAAA;AAEtB,IAAA,IAAI;AACF,MAAA,IAAI,KAAK,cAAA,EAAgB;AACvB,QAAA,IAAA,CAAK,eAAe,MAAA,EAAO;AAAA,MAC7B;AAAA,IACF,SAAS,CAAA,EAAG;AAAA,IAEZ;AACA,IAAA,IAAA,CAAK,cAAA,GAAiB,IAAA;AAEtB,IAAA,IAAI;AACF,MAAA,IAAI,IAAA,CAAK,aAAA,IAAiB,IAAA,CAAK,OAAA,EAAS;AACtC,QAAA,IAAA,CAAK,OAAA,CAAQ,gBAAA,CAAiB,MAAA,CAAO,IAAA,CAAK,aAAa,CAAA;AACvD,QAAA,IAAA,CAAK,cAAc,MAAA,EAAO;AAAA,MAC5B;AAAA,IACF,SAAS,CAAA,EAAG;AAAA,IAEZ;AACA,IAAA,IAAA,CAAK,aAAA,GAAgB,IAAA;AAErB,IAAA,IAAI;AACF,MAAA,IAAI,KAAK,iBAAA,EAAmB;AAC1B,QAAA,IAAA,CAAK,kBAAkB,MAAA,EAAO;AAAA,MAChC;AAAA,IACF,SAAS,CAAA,EAAG;AAAA,IAEZ;AACA,IAAA,IAAA,CAAK,iBAAA,GAAoB,IAAA;AAEzB,IAAA,IAAI;AACF,MAAA,IAAI,KAAK,OAAA,EAAS;AAEhB,QAAA,IAAA,CAAK,OAAA,CAAQ,eAAe,KAAA,EAAM;AAClC,QAAA,IAAA,CAAK,QAAQ,MAAA,EAAO;AAAA,MACtB;AAAA,IACF,SAAS,CAAA,EAAG;AAAA,IAEZ;AACA,IAAA,IAAA,CAAK,OAAA,GAAU,IAAA;AAAA,EACjB;AACF;AAKA,eAAsB,eAAA,CACpB,WACA,MAAA,EACoB;AACpB,EAAA,MAAM,KAAA,GAAQ,IAAI,SAAA,CAAU,MAAM,CAAA;AAClC,EAAA,MAAM,KAAA,CAAM,KAAK,SAAS,CAAA;AAC1B,EAAA,OAAO,KAAA;AACT;AClwBO,IAAM,OAAA,GAAU;AAMvB,IAAM5B,iBAAAA,GAAmB,SAAA;AAGzB,IAAM,gBAAA,GAAmB,yCAAyCA,iBAAgB,CAAA,sBAAA,CAAA;AAGlF,IAAI,YAAA,GAAe,KAAA;AAEnB,SAAS,qBAAA,GAA8B;AACrC,EAAA,IAAI,YAAA,EAAc;AAElB,EAAA,IAAI;AAEF,IAAA,MAAM,EAAE,eAAA,EAAAJ,gBAAAA,EAAgB,GAAIG,2BAAQ,UAAU,CAAA;AAC9C,IAAAH,iBAAgB,SAAA,CAAU;AAAA,MACxB,OAAA,EAAS;AAAA,KACV,CAAA;AACD,IAAA,YAAA,GAAe,IAAA;AAAA,EACjB,CAAA,CAAA,MAAQ;AAAA,EAER;AACF;AAGA,qBAAA,EAAsB;AAiBf,SAAS,kBAAkB,OAAA,EAEzB;AACP,EAAA,IAAI;AAEF,IAAA,MAAM,EAAE,eAAA,EAAAA,gBAAAA,EAAgB,GAAIG,2BAAQ,UAAU,CAAA;AAC9C,IAAAH,iBAAgB,SAAA,CAAU;AAAA,MACxB,OAAA,EAAS,QAAQ,OAAA,IAAW;AAAA,KAC7B,CAAA;AACD,IAAA,YAAA,GAAe,IAAA;AAAA,EACjB,CAAA,CAAA,MAAQ;AAAA,EAER;AACF","file":"index.js","sourcesContent":["import type { DataPoint, SeriesData } from \"../types\";\r\n\r\n/**\r\n * Generate a unique ID\r\n */\r\nexport function generateId(prefix: string = \"chart\"): string {\r\n return `${prefix}-${Math.random().toString(36).substring(2, 11)}`;\r\n}\r\n\r\n/**\r\n * Parse size value (handles both string and number)\r\n */\r\nexport function parseSize(value: string | number | undefined, fallback: number): number {\r\n if (value === undefined) return fallback;\r\n if (typeof value === \"number\") return value;\r\n \r\n // Handle percentage\r\n if (value.endsWith(\"%\")) {\r\n return fallback; // Return fallback for percentage, will be handled by CSS\r\n }\r\n \r\n // Handle px\r\n const parsed = parseInt(value, 10);\r\n return isNaN(parsed) ? fallback : parsed;\r\n}\r\n\r\n/**\r\n * Normalize data points to standard format\r\n */\r\nexport function normalizeDataPoints(data: DataPoint[] | number[]): DataPoint[] {\r\n if (data.length === 0) return [];\r\n \r\n // Check if it's already DataPoint format\r\n if (typeof data[0] === \"object\" && \"x\" in data[0]) {\r\n return data as DataPoint[];\r\n }\r\n \r\n // Convert number array to DataPoint array\r\n return (data as number[]).map((y, index) => ({\r\n x: index,\r\n y,\r\n }));\r\n}\r\n\r\n/**\r\n * Extract x values from data points\r\n */\r\nexport function extractXValues(data: DataPoint[]): number[] {\r\n return data.map((point) => {\r\n if (typeof point.x === \"number\") return point.x;\r\n if (point.x instanceof Date) return point.x.getTime();\r\n return 0; // For string categories, will be handled separately\r\n });\r\n}\r\n\r\n/**\r\n * Extract y values from data points\r\n */\r\nexport function extractYValues(data: DataPoint[]): number[] {\r\n return data.map((point) => point.y);\r\n}\r\n\r\n/**\r\n * Deep merge objects\r\n */\r\nexport function deepMerge<T extends Record<string, unknown>>(\r\n target: T,\r\n source: Partial<T>\r\n): T {\r\n const result = { ...target };\r\n \r\n for (const key in source) {\r\n if (Object.prototype.hasOwnProperty.call(source, key)) {\r\n const sourceValue = source[key];\r\n const targetValue = target[key];\r\n \r\n if (\r\n sourceValue !== null &&\r\n typeof sourceValue === \"object\" &&\r\n !Array.isArray(sourceValue) &&\r\n targetValue !== null &&\r\n typeof targetValue === \"object\" &&\r\n !Array.isArray(targetValue)\r\n ) {\r\n (result as Record<string, unknown>)[key] = deepMerge(\r\n targetValue as Record<string, unknown>,\r\n sourceValue as Record<string, unknown>\r\n );\r\n } else if (sourceValue !== undefined) {\r\n (result as Record<string, unknown>)[key] = sourceValue;\r\n }\r\n }\r\n }\r\n \r\n return result;\r\n}\r\n\r\n/**\r\n * Debounce function\r\n */\r\nexport function debounce<T extends (...args: unknown[]) => void>(\r\n fn: T,\r\n delay: number\r\n): (...args: Parameters<T>) => void {\r\n let timeoutId: ReturnType<typeof setTimeout> | null = null;\r\n \r\n return (...args: Parameters<T>) => {\r\n if (timeoutId) {\r\n clearTimeout(timeoutId);\r\n }\r\n timeoutId = setTimeout(() => {\r\n fn(...args);\r\n timeoutId = null;\r\n }, delay);\r\n };\r\n}\r\n\r\n/**\r\n * Throttle function\r\n */\r\nexport function throttle<T extends (...args: unknown[]) => void>(\r\n fn: T,\r\n limit: number\r\n): (...args: Parameters<T>) => void {\r\n let inThrottle = false;\r\n \r\n return (...args: Parameters<T>) => {\r\n if (!inThrottle) {\r\n fn(...args);\r\n inThrottle = true;\r\n setTimeout(() => {\r\n inThrottle = false;\r\n }, limit);\r\n }\r\n };\r\n}\r\n\r\n/**\r\n * Calculate min and max from data series\r\n */\r\nexport function calculateDataRange(series: SeriesData[]): {\r\n xMin: number;\r\n xMax: number;\r\n yMin: number;\r\n yMax: number;\r\n} {\r\n let xMin = Infinity;\r\n let xMax = -Infinity;\r\n let yMin = Infinity;\r\n let yMax = -Infinity;\r\n \r\n for (const s of series) {\r\n const normalized = normalizeDataPoints(s.data);\r\n for (const point of normalized) {\r\n const x = typeof point.x === \"number\" ? point.x : 0;\r\n xMin = Math.min(xMin, x);\r\n xMax = Math.max(xMax, x);\r\n yMin = Math.min(yMin, point.y);\r\n yMax = Math.max(yMax, point.y);\r\n }\r\n }\r\n \r\n return {\r\n xMin: xMin === Infinity ? 0 : xMin,\r\n xMax: xMax === -Infinity ? 100 : xMax,\r\n yMin: yMin === Infinity ? 0 : yMin,\r\n yMax: yMax === -Infinity ? 100 : yMax,\r\n };\r\n}\r\n\r\n/**\r\n * Format number for display\r\n */\r\nexport function formatNumber(value: number, precision: number = 2): string {\r\n if (Math.abs(value) >= 1e9) {\r\n return (value / 1e9).toFixed(precision) + \"B\";\r\n }\r\n if (Math.abs(value) >= 1e6) {\r\n return (value / 1e6).toFixed(precision) + \"M\";\r\n }\r\n if (Math.abs(value) >= 1e3) {\r\n return (value / 1e3).toFixed(precision) + \"K\";\r\n }\r\n return value.toFixed(precision);\r\n}\r\n\r\n/**\r\n * Clamp a value between min and max\r\n */\r\nexport function clamp(value: number, min: number, max: number): number {\r\n return Math.min(Math.max(value, min), max);\r\n}\r\n\r\n/**\r\n * Linear interpolation\r\n */\r\nexport function lerp(start: number, end: number, t: number): number {\r\n return start + (end - start) * clamp(t, 0, 1);\r\n}\r\n\r\n/**\r\n * Convert hex color to rgba\r\n */\r\nexport function hexToRgba(hex: string, alpha: number = 1): string {\r\n const result = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(hex);\r\n if (!result) return hex;\r\n \r\n const r = parseInt(result[1], 16);\r\n const g = parseInt(result[2], 16);\r\n const b = parseInt(result[3], 16);\r\n \r\n return `rgba(${r}, ${g}, ${b}, ${alpha})`;\r\n}\r\n\r\n","import { SciChartSurface } from \"scichart\";\r\nimport type {\r\n ChartConfig,\r\n ChartInstance,\r\n ChartEventMap,\r\n SeriesData,\r\n ThemeConfig,\r\n} from \"../types\";\r\nimport { ThemeManager } from \"../themes/ThemeManager\";\r\nimport { generateId, debounce } from \"../utils/helpers\";\r\n\r\n// SciChart WASM CDN configuration\r\nconst SCICHART_VERSION = \"4.0.933\";\r\nlet sciChartConfigured = false;\r\n\r\nfunction ensureSciChartConfigured(): void {\r\n if (sciChartConfigured) return;\r\n try {\r\n SciChartSurface.useWasmFromCDN();\r\n sciChartConfigured = true;\r\n } catch {\r\n // Fallback to manual configuration\r\n try {\r\n SciChartSurface.configure({\r\n wasmUrl: `https://cdn.jsdelivr.net/npm/scichart@${SCICHART_VERSION}/_wasm/scichart2d.wasm`,\r\n });\r\n sciChartConfigured = true;\r\n } catch {\r\n // Configuration may already be set\r\n }\r\n }\r\n}\r\n\r\n// Type for SciChart surface\r\ntype SciChartSurfaceType = Awaited<ReturnType<typeof SciChartSurface.create>>[\"sciChartSurface\"];\r\n\r\n/**\r\n * Abstract base class for all chart types\r\n * Handles common functionality like initialization, theming, events, and cleanup\r\n */\r\nexport abstract class BaseChart<TConfig extends ChartConfig> implements ChartInstance {\r\n public readonly id: string;\r\n protected container: HTMLElement | null = null;\r\n protected surface: SciChartSurfaceType | null = null;\r\n protected config: TConfig;\r\n protected theme: ThemeConfig;\r\n protected isInitialized: boolean = false;\r\n protected isDestroyed: boolean = false;\r\n\r\n // Event handlers\r\n private eventHandlers: Map<keyof ChartEventMap, Set<(e: unknown) => void>> = new Map();\r\n\r\n // Resize observer\r\n private resizeObserver: ResizeObserver | null = null;\r\n private debouncedResize: () => void;\r\n\r\n constructor(config: TConfig) {\r\n this.id = config.id ?? generateId(\"chart\");\r\n this.config = config;\r\n this.theme = ThemeManager.getInstance().resolveTheme(config.theme);\r\n this.debouncedResize = debounce(() => this.handleResize(), 100);\r\n }\r\n\r\n /**\r\n * Initialize the chart in the given container\r\n */\r\n public async init(container: HTMLElement | string): Promise<void> {\r\n if (this.isDestroyed) {\r\n throw new Error(\"Cannot initialize a destroyed chart\");\r\n }\r\n\r\n // Resolve container\r\n if (typeof container === \"string\") {\r\n const el = document.getElementById(container);\r\n if (!el) {\r\n throw new Error(`Container element \"${container}\" not found`);\r\n }\r\n this.container = el;\r\n } else {\r\n this.container = container;\r\n }\r\n\r\n // Set container styles\r\n this.setupContainer();\r\n\r\n // Configure SciChart defaults\r\n this.configureSciChartDefaults();\r\n\r\n // Create the SciChart surface\r\n await this.createSurface();\r\n\r\n // Set up resize observer\r\n this.setupResizeObserver();\r\n\r\n this.isInitialized = true;\r\n this.emit(\"rendered\", { chartId: this.id, renderTime: performance.now() });\r\n }\r\n\r\n /**\r\n * Setup container element\r\n */\r\n private setupContainer(): void {\r\n if (!this.container) return;\r\n\r\n const { width, height } = this.config;\r\n\r\n // Set dimensions\r\n if (width) {\r\n this.container.style.width =\r\n typeof width === \"number\" ? `${width}px` : width;\r\n }\r\n if (height) {\r\n this.container.style.height =\r\n typeof height === \"number\" ? `${height}px` : height;\r\n }\r\n\r\n // Ensure container has position for absolute children\r\n const computedStyle = window.getComputedStyle(this.container);\r\n if (computedStyle.position === \"static\") {\r\n this.container.style.position = \"relative\";\r\n }\r\n }\r\n\r\n /**\r\n * Configure SciChart library defaults\r\n */\r\n private configureSciChartDefaults(): void {\r\n ensureSciChartConfigured();\r\n }\r\n\r\n /**\r\n * Create the SciChart surface - implemented by subclasses\r\n */\r\n protected abstract createSurface(): Promise<void>;\r\n\r\n /**\r\n * Update the chart with new data\r\n */\r\n public abstract setData(data: SeriesData[]): void;\r\n\r\n /**\r\n * Update chart options\r\n */\r\n public setOptions(options: Partial<TConfig>): void {\r\n this.config = { ...this.config, ...options };\r\n \r\n // Update theme if changed\r\n if (options.theme) {\r\n this.theme = ThemeManager.getInstance().resolveTheme(options.theme);\r\n this.applyTheme();\r\n }\r\n\r\n // Trigger re-render\r\n this.update();\r\n }\r\n\r\n /**\r\n * Apply current theme to the chart\r\n */\r\n protected applyTheme(): void {\r\n if (!this.surface) return;\r\n\r\n this.surface.background = this.theme.backgroundColor ?? \"#ffffff\";\r\n\r\n // Apply SciChart theme provider when switching themes\r\n // (otherwise axes/gridlines can remain styled for the old theme).\r\n try {\r\n const themeName = (this.config.theme as any) as string | undefined;\r\n // Lazy-require to avoid bundler issues in non-browser environments\r\n // eslint-disable-next-line @typescript-eslint/no-var-requires\r\n const { SciChartJSDarkTheme, SciChartJSLightTheme } = require(\"scichart\");\r\n const nextThemeProvider =\r\n themeName === \"light\" ? new SciChartJSLightTheme() : new SciChartJSDarkTheme();\r\n (this.surface as any).applyTheme?.(nextThemeProvider);\r\n } catch {\r\n // ignore if scichart theme provider isn't available\r\n }\r\n\r\n // Update common axis styling for current theme\r\n try {\r\n const applyAxisTheme = (axis: any) => {\r\n if (!axis) return;\r\n axis.axisTitleStyle = {\r\n ...(axis.axisTitleStyle ?? {}),\r\n color: this.theme.axis?.titleColor,\r\n fontFamily: this.theme.fontFamily,\r\n };\r\n axis.labelStyle = {\r\n ...(axis.labelStyle ?? {}),\r\n color: this.theme.axis?.labelColor,\r\n fontFamily: this.theme.fontFamily,\r\n };\r\n axis.majorGridLineStyle = {\r\n ...(axis.majorGridLineStyle ?? {}),\r\n color: this.theme.axis?.gridLineColor,\r\n };\r\n axis.axisBorder = {\r\n ...(axis.axisBorder ?? {}),\r\n color: this.theme.axis?.lineColor,\r\n };\r\n };\r\n\r\n const xAxes = (this.surface as any).xAxes;\r\n const yAxes = (this.surface as any).yAxes;\r\n\r\n // SciChart uses ObservableArray; it can be iterated via .asArray() or .itemsArray\r\n const toArray = (axes: any) =>\r\n axes?.asArray?.() ?? axes?.itemsArray ?? axes?.items ?? [];\r\n\r\n for (const axis of toArray(xAxes)) applyAxisTheme(axis);\r\n for (const axis of toArray(yAxes)) applyAxisTheme(axis);\r\n } catch {\r\n // ignore axis styling issues\r\n }\r\n\r\n // Additional theme application handled by subclasses\r\n }\r\n\r\n /**\r\n * Update the chart (re-render with current config)\r\n */\r\n protected abstract update(): void;\r\n\r\n /**\r\n * Set up resize observer for responsive charts\r\n */\r\n private setupResizeObserver(): void {\r\n if (!this.container || typeof ResizeObserver === \"undefined\") return;\r\n\r\n this.resizeObserver = new ResizeObserver(() => {\r\n this.debouncedResize();\r\n });\r\n\r\n this.resizeObserver.observe(this.container);\r\n }\r\n\r\n /**\r\n * Handle container resize\r\n */\r\n private handleResize(): void {\r\n if (!this.surface || !this.container) return;\r\n\r\n const { width, height } = this.container.getBoundingClientRect();\r\n if (width > 0 && height > 0) {\r\n // SciChart handles resizing automatically when container size changes\r\n // but we can force a redraw if needed\r\n }\r\n }\r\n\r\n /**\r\n * Manually resize the chart\r\n */\r\n public resize(width?: number, height?: number): void {\r\n if (!this.container) return;\r\n\r\n if (width !== undefined) {\r\n this.container.style.width = `${width}px`;\r\n }\r\n if (height !== undefined) {\r\n this.container.style.height = `${height}px`;\r\n }\r\n\r\n this.handleResize();\r\n }\r\n\r\n /**\r\n * Reset zoom to fit all data (zoom extents)\r\n * Note: not part of the ChartInstance interface, but available on concrete chart classes.\r\n */\r\n public resetZoom(): void {\r\n if (!this.surface) return;\r\n try {\r\n (this.surface as any).zoomExtents?.();\r\n } catch {\r\n // ignore\r\n }\r\n }\r\n\r\n /**\r\n * Export chart as image\r\n */\r\n public async exportImage(format: \"png\" | \"jpeg\" | \"svg\" = \"png\"): Promise<string> {\r\n if (!this.surface) {\r\n throw new Error(\"Chart not initialized\");\r\n }\r\n\r\n // SciChart provides export functionality\r\n // This is a simplified implementation\r\n const canvas = this.container?.querySelector(\"canvas\");\r\n if (!canvas) {\r\n throw new Error(\"Canvas not found\");\r\n }\r\n\r\n const mimeType = format === \"jpeg\" ? \"image/jpeg\" : \"image/png\";\r\n return canvas.toDataURL(mimeType);\r\n }\r\n\r\n /**\r\n * Add event listener\r\n */\r\n public on<K extends keyof ChartEventMap>(\r\n event: K,\r\n handler: (e: ChartEventMap[K]) => void\r\n ): void {\r\n if (!this.eventHandlers.has(event)) {\r\n this.eventHandlers.set(event, new Set());\r\n }\r\n this.eventHandlers.get(event)!.add(handler as (e: unknown) => void);\r\n }\r\n\r\n /**\r\n * Remove event listener\r\n */\r\n public off<K extends keyof ChartEventMap>(\r\n event: K,\r\n handler: (e: ChartEventMap[K]) => void\r\n ): void {\r\n const handlers = this.eventHandlers.get(event);\r\n if (handlers) {\r\n handlers.delete(handler as (e: unknown) => void);\r\n }\r\n }\r\n\r\n /**\r\n * Emit an event\r\n */\r\n protected emit<K extends keyof ChartEventMap>(event: K, data: ChartEventMap[K]): void {\r\n const handlers = this.eventHandlers.get(event);\r\n if (handlers) {\r\n handlers.forEach((handler) => handler(data));\r\n }\r\n }\r\n\r\n /**\r\n * Destroy the chart and clean up resources\r\n */\r\n public destroy(): void {\r\n if (this.isDestroyed) return;\r\n\r\n // Clean up resize observer\r\n if (this.resizeObserver) {\r\n this.resizeObserver.disconnect();\r\n this.resizeObserver = null;\r\n }\r\n\r\n // Clean up event handlers\r\n this.eventHandlers.clear();\r\n\r\n // Delete the SciChart surface\r\n if (this.surface) {\r\n this.surface.delete();\r\n this.surface = null;\r\n }\r\n\r\n // Clear container\r\n if (this.container) {\r\n this.container.innerHTML = \"\";\r\n }\r\n\r\n this.isDestroyed = true;\r\n this.isInitialized = false;\r\n }\r\n\r\n /**\r\n * Get current configuration\r\n */\r\n public getConfig(): TConfig {\r\n return { ...this.config };\r\n }\r\n\r\n /**\r\n * Get current theme\r\n */\r\n public getTheme(): ThemeConfig {\r\n return { ...this.theme };\r\n }\r\n\r\n /**\r\n * Check if chart is initialized\r\n */\r\n public isReady(): boolean {\r\n return this.isInitialized && !this.isDestroyed;\r\n }\r\n}\r\n\r\n","import {\r\n SciChart3DSurface,\r\n NumericAxis3D,\r\n SurfaceMeshRenderableSeries3D,\r\n UniformGridDataSeries3D,\r\n CameraController,\r\n GradientColorPalette,\r\n MouseWheelZoomModifier3D,\r\n OrbitModifier3D,\r\n Vector3,\r\n EDrawMeshAs,\r\n} from \"scichart\";\r\nimport type { Surface3DChartConfig, SeriesData } from \"../types\";\r\nimport { generateId } from \"../utils/helpers\";\r\n\r\n// SciChart 3D WASM CDN configuration\r\nconst SCICHART_VERSION = \"4.0.933\";\r\nlet sciChart3DConfigured = false;\r\n\r\nfunction ensureSciChart3DConfigured(): void {\r\n if (sciChart3DConfigured) return;\r\n try {\r\n SciChart3DSurface.useWasmFromCDN();\r\n sciChart3DConfigured = true;\r\n } catch {\r\n // Fallback to manual configuration\r\n try {\r\n SciChart3DSurface.configure({\r\n wasmUrl: `https://cdn.jsdelivr.net/npm/scichart@${SCICHART_VERSION}/_wasm/scichart3d.wasm`,\r\n });\r\n sciChart3DConfigured = true;\r\n } catch {\r\n // Configuration may already be set\r\n }\r\n }\r\n}\r\n\r\n// Default color stops for 3D surface\r\nconst defaultColorStops = [\r\n { offset: 0, color: \"#1e3a8a\" }, // Dark blue\r\n { offset: 0.25, color: \"#3b82f6\" }, // Blue\r\n { offset: 0.5, color: \"#22c55e\" }, // Green\r\n { offset: 0.75, color: \"#eab308\" }, // Yellow\r\n { offset: 1, color: \"#ef4444\" }, // Red\r\n];\r\n\r\n/**\r\n * 3D Surface Chart implementation using SciChart\r\n */\r\nexport class Surface3DChart {\r\n public readonly id: string;\r\n private container: HTMLElement | null = null;\r\n private surface: SciChart3DSurface | null = null;\r\n private wasmContext: any = null;\r\n private config: Surface3DChartConfig;\r\n private dataSeries: UniformGridDataSeries3D | null = null;\r\n private meshSeries: SurfaceMeshRenderableSeries3D | null = null;\r\n private isDestroyed: boolean = false;\r\n\r\n constructor(config: Surface3DChartConfig) {\r\n this.id = config.id ?? generateId(\"chart3d\");\r\n this.config = config;\r\n }\r\n\r\n /**\r\n * Initialize the chart in the given container\r\n */\r\n public async init(container: HTMLElement | string): Promise<void> {\r\n if (this.isDestroyed) {\r\n throw new Error(\"Cannot initialize a destroyed chart\");\r\n }\r\n\r\n // Resolve container\r\n if (typeof container === \"string\") {\r\n const el = document.getElementById(container);\r\n if (!el) {\r\n throw new Error(`Container element \"${container}\" not found`);\r\n }\r\n this.container = el;\r\n } else {\r\n this.container = container;\r\n }\r\n\r\n // Ensure container has a unique ID for SciChart\r\n if (!this.container.id) {\r\n this.container.id = this.id;\r\n }\r\n\r\n // Configure SciChart 3D WASM\r\n ensureSciChart3DConfigured();\r\n\r\n // Create the 3D surface\r\n await this.createSurface();\r\n }\r\n\r\n /**\r\n * Create the SciChart 3D surface\r\n */\r\n private async createSurface(): Promise<void> {\r\n // Check if already destroyed or container missing\r\n if (this.isDestroyed || !this.container) {\r\n return;\r\n }\r\n \r\n // Ensure container has an ID\r\n if (!this.container.id) {\r\n this.container.id = this.id;\r\n }\r\n \r\n // Check if container is still in DOM\r\n if (!document.body.contains(this.container)) {\r\n return;\r\n }\r\n\r\n let sciChart3DSurface;\r\n let wasmContext;\r\n \r\n try {\r\n const result = await SciChart3DSurface.create(\r\n this.container.id\r\n );\r\n sciChart3DSurface = result.sciChart3DSurface;\r\n wasmContext = result.wasmContext;\r\n } catch (e) {\r\n // SciChart initialization failed - container may have been removed\r\n console.warn(\"Surface3DChart: Failed to create surface\", e);\r\n return;\r\n }\r\n \r\n // Check if destroyed during async operation\r\n if (this.isDestroyed || !this.container) {\r\n try {\r\n sciChart3DSurface.delete();\r\n } catch (e) {\r\n // Ignore cleanup errors\r\n }\r\n return;\r\n }\r\n\r\n this.surface = sciChart3DSurface;\r\n this.wasmContext = wasmContext;\r\n\r\n // Create axes\r\n sciChart3DSurface.xAxis = new NumericAxis3D(wasmContext, {\r\n axisTitle: \"X\",\r\n });\r\n sciChart3DSurface.yAxis = new NumericAxis3D(wasmContext, {\r\n axisTitle: \"Y\",\r\n });\r\n sciChart3DSurface.zAxis = new NumericAxis3D(wasmContext, {\r\n axisTitle: \"Z\",\r\n });\r\n\r\n // Add interactivity\r\n sciChart3DSurface.chartModifiers.add(new MouseWheelZoomModifier3D());\r\n sciChart3DSurface.chartModifiers.add(new OrbitModifier3D());\r\n\r\n // Set up camera\r\n const cameraPos = this.config.cameraPosition ?? { x: 300, y: 300, z: 300 };\r\n sciChart3DSurface.camera = new CameraController(wasmContext, {\r\n position: new Vector3(cameraPos.x, cameraPos.y, cameraPos.z),\r\n target: new Vector3(0, 0, 0),\r\n });\r\n\r\n // Add surface data\r\n this.addSurfaceData(this.config.yValues);\r\n }\r\n\r\n /**\r\n * Add surface data to the chart\r\n */\r\n private addSurfaceData(yValues: number[][]): void {\r\n if (!this.surface || !this.wasmContext) return;\r\n\r\n const wasmContext = this.wasmContext;\r\n const zSize = yValues.length;\r\n const xSize = yValues[0]?.length ?? 0;\r\n\r\n // Calculate min/max from data\r\n let min = Infinity;\r\n let max = -Infinity;\r\n for (let z = 0; z < zSize; z++) {\r\n for (let x = 0; x < xSize; x++) {\r\n const y = yValues[z][x];\r\n min = Math.min(min, y);\r\n max = Math.max(max, y);\r\n }\r\n }\r\n\r\n // Create data series\r\n this.dataSeries = new UniformGridDataSeries3D(wasmContext, {\r\n yValues,\r\n xStep: this.config.xStep ?? 1,\r\n zStep: this.config.zStep ?? 1,\r\n });\r\n\r\n // Get color stops\r\n const colorStops = this.config.colorStops ?? defaultColorStops;\r\n\r\n // Create color palette\r\n const colorPalette = new GradientColorPalette(wasmContext, {\r\n gradientStops: colorStops,\r\n });\r\n\r\n // Create mesh series - solid filled surface\r\n this.meshSeries = new SurfaceMeshRenderableSeries3D(wasmContext, {\r\n dataSeries: this.dataSeries,\r\n minimum: this.config.colorMin ?? min,\r\n maximum: this.config.colorMax ?? max,\r\n opacity: this.config.opacity ?? 1.0,\r\n cellHardnessFactor: 0, // Smooth interpolation between cells\r\n stroke: \"transparent\", // No wireframe stroke\r\n strokeThickness: 0,\r\n contourStroke: \"transparent\", // No contour lines\r\n contourStrokeThickness: 0,\r\n drawSkirt: true, // Draw skirt for solid appearance\r\n drawMeshAs: EDrawMeshAs.SOLID_MESH, // Solid filled surface\r\n lightingFactor: 0.8,\r\n meshColorPalette: colorPalette,\r\n shininess: 10,\r\n });\r\n\r\n this.surface!.renderableSeries.add(this.meshSeries);\r\n }\r\n\r\n /**\r\n * Set new Y values for the surface\r\n */\r\n public setYValues(yValues: number[][]): void {\r\n if (!this.surface) {\r\n this.config.yValues = yValues;\r\n return;\r\n }\r\n\r\n // Clear existing surface\r\n this.clearSurface();\r\n\r\n // Update config and add new data\r\n this.config.yValues = yValues;\r\n this.addSurfaceData(yValues);\r\n }\r\n\r\n /**\r\n * Set new data (alias for setYValues for consistency)\r\n */\r\n public setData(_data: SeriesData[]): void {\r\n console.warn(\"Surface3DChart.setData() - use setYValues() for updating surface data\");\r\n }\r\n\r\n /**\r\n * Update chart options\r\n */\r\n public setOptions(options: Partial<Surface3DChartConfig>): void {\r\n this.config = { ...this.config, ...options };\r\n\r\n if (options.cameraPosition && this.surface && this.wasmContext) {\r\n const pos = options.cameraPosition;\r\n this.surface.camera = new CameraController(this.wasmContext, {\r\n position: new Vector3(pos.x, pos.y, pos.z),\r\n target: new Vector3(0, 0, 0),\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Clear surface data\r\n */\r\n private clearSurface(): void {\r\n if (!this.surface) return;\r\n\r\n if (this.meshSeries) {\r\n this.surface.renderableSeries.remove(this.meshSeries);\r\n this.meshSeries.delete();\r\n this.meshSeries = null;\r\n }\r\n\r\n if (this.dataSeries) {\r\n this.dataSeries.delete();\r\n this.dataSeries = null;\r\n }\r\n }\r\n\r\n /**\r\n * Destroy and clean up\r\n */\r\n public destroy(): void {\r\n if (this.isDestroyed) return;\r\n \r\n // Mark as destroyed immediately to prevent re-entry\r\n this.isDestroyed = true;\r\n\r\n try {\r\n this.clearSurface();\r\n } catch (e) {\r\n // Ignore cleanup errors\r\n }\r\n\r\n if (this.surface) {\r\n try {\r\n this.surface.delete();\r\n } catch (e) {\r\n // Ignore cleanup errors - surface may already be destroyed\r\n }\r\n this.surface = null;\r\n }\r\n \r\n this.container = null;\r\n this.wasmContext = null;\r\n }\r\n\r\n /**\r\n * Get current configuration\r\n */\r\n public getConfig(): Surface3DChartConfig {\r\n return { ...this.config };\r\n }\r\n\r\n /**\r\n * Check if chart is ready (initialized and not destroyed)\r\n */\r\n public isReady(): boolean {\r\n return this.surface !== null && !this.isDestroyed;\r\n }\r\n}\r\n\r\n/**\r\n * Factory function to create a 3D surface chart\r\n */\r\nexport async function createSurface3DChart(\r\n container: HTMLElement | string,\r\n config: Surface3DChartConfig\r\n): Promise<Surface3DChart> {\r\n const chart = new Surface3DChart(config);\r\n await chart.init(container);\r\n return chart;\r\n}\r\n\r\n","import {\r\n SciChart3DSurface,\r\n NumericAxis3D,\r\n XyzDataSeries3D,\r\n ColumnRenderableSeries3D,\r\n PointLineRenderableSeries3D,\r\n NumberRange,\r\n CameraController,\r\n Vector3,\r\n OrbitModifier3D,\r\n MouseWheelZoomModifier3D,\r\n TooltipModifier3D,\r\n} from \"scichart\";\r\nimport type { ChartConfig } from \"../types\";\r\nimport { generateId } from \"../utils/helpers\";\r\n\r\n// SciChart 3D WASM CDN configuration\r\nconst SCICHART_VERSION = \"4.0.933\";\r\nlet sciChart3DConfigured = false;\r\n\r\nfunction ensureSciChart3DConfigured(): void {\r\n if (sciChart3DConfigured) return;\r\n try {\r\n SciChart3DSurface.useWasmFromCDN();\r\n sciChart3DConfigured = true;\r\n } catch {\r\n // Fallback to manual configuration\r\n try {\r\n SciChart3DSurface.configure({\r\n wasmUrl: `https://cdn.jsdelivr.net/npm/scichart@${SCICHART_VERSION}/_wasm/scichart3d.wasm`,\r\n });\r\n sciChart3DConfigured = true;\r\n } catch {\r\n // Configuration may already be set\r\n }\r\n }\r\n}\r\n\r\n/** Data point for 3D column chart [x, y, z] */\r\nexport type Column3DDataPoint = [number, number, number];\r\n\r\n/** Configuration for 3D Column Chart */\r\nexport interface Column3DChartConfig extends ChartConfig {\r\n /** Array of [x, y, z] data points */\r\n data: Column3DDataPoint[];\r\n /** X axis title */\r\n xAxisTitle?: string;\r\n /** Y axis title */\r\n yAxisTitle?: string;\r\n /** Z axis title */\r\n zAxisTitle?: string;\r\n /** X axis visible range */\r\n xRange?: { min: number; max: number };\r\n /** Y axis visible range */\r\n yRange?: { min: number; max: number };\r\n /** Z axis visible range */\r\n zRange?: { min: number; max: number };\r\n /** Bar fill color */\r\n barFill?: string;\r\n /** Bar stroke color */\r\n barStroke?: string;\r\n /** Bar opacity (0-1) */\r\n barOpacity?: number;\r\n /** Bar width in X direction */\r\n barWidthX?: number;\r\n /** Bar width in Z direction */\r\n barWidthZ?: number;\r\n /** Camera position */\r\n cameraPosition?: { x: number; y: number; z: number };\r\n /** Camera target */\r\n cameraTarget?: { x: number; y: number; z: number };\r\n /** Show sine wave reference line on back plane */\r\n showSineWave?: boolean;\r\n /** Sine wave amplitude center */\r\n sineWaveCenter?: number;\r\n /** Sine wave amplitude range */\r\n sineWaveAmplitude?: number;\r\n}\r\n\r\n/**\r\n * 3D Column/Bar Chart implementation using SciChart\r\n */\r\nexport class Column3DChart {\r\n public readonly id: string;\r\n private container: HTMLElement | null = null;\r\n private surface: SciChart3DSurface | null = null;\r\n private wasmContext: any = null;\r\n private config: Column3DChartConfig;\r\n private dataSeries: XyzDataSeries3D | null = null;\r\n private columnSeries: ColumnRenderableSeries3D | null = null;\r\n private isDestroyed: boolean = false;\r\n\r\n constructor(config: Column3DChartConfig) {\r\n this.id = config.id ?? generateId(\"column3d\");\r\n this.config = config;\r\n }\r\n\r\n /**\r\n * Initialize the chart in the given container\r\n */\r\n public async init(container: HTMLElement | string): Promise<void> {\r\n if (this.isDestroyed) {\r\n throw new Error(\"Cannot initialize a destroyed chart\");\r\n }\r\n\r\n // Resolve container\r\n if (typeof container === \"string\") {\r\n const el = document.getElementById(container);\r\n if (!el) {\r\n throw new Error(`Container element \"${container}\" not found`);\r\n }\r\n this.container = el;\r\n } else {\r\n this.container = container;\r\n }\r\n\r\n // Ensure container has a unique ID for SciChart\r\n if (!this.container.id) {\r\n this.container.id = this.id;\r\n }\r\n\r\n // Configure SciChart 3D WASM\r\n ensureSciChart3DConfigured();\r\n\r\n // Create the 3D surface\r\n await this.createSurface();\r\n }\r\n\r\n /**\r\n * Create the SciChart 3D surface\r\n */\r\n private async createSurface(): Promise<void> {\r\n // Check if already destroyed or container missing\r\n if (this.isDestroyed || !this.container) {\r\n return;\r\n }\r\n \r\n // Ensure container has an ID\r\n if (!this.container.id) {\r\n this.container.id = this.id;\r\n }\r\n \r\n // Check if container is still in DOM\r\n if (!document.body.contains(this.container)) {\r\n return;\r\n }\r\n\r\n let sciChart3DSurface;\r\n let wasmContext;\r\n \r\n try {\r\n const result = await SciChart3DSurface.create(\r\n this.container.id,\r\n {\r\n isZYPlaneVisible: false,\r\n }\r\n );\r\n sciChart3DSurface = result.sciChart3DSurface;\r\n wasmContext = result.wasmContext;\r\n } catch (e) {\r\n // SciChart initialization failed - container may have been removed\r\n console.warn(\"Column3DChart: Failed to create surface\", e);\r\n return;\r\n }\r\n \r\n // Check if destroyed during async operation\r\n if (this.isDestroyed || !this.container) {\r\n try {\r\n sciChart3DSurface.delete();\r\n } catch (e) {\r\n // Ignore cleanup errors\r\n }\r\n return;\r\n }\r\n\r\n this.surface = sciChart3DSurface;\r\n this.wasmContext = wasmContext;\r\n\r\n // Set up camera\r\n const cameraPos = this.config.cameraPosition ?? { x: -250, y: 450, z: 280 };\r\n const cameraTarget = this.config.cameraTarget ?? { x: 0, y: 0, z: 0 };\r\n sciChart3DSurface.camera = new CameraController(wasmContext, {\r\n position: new Vector3(cameraPos.x, cameraPos.y, cameraPos.z),\r\n target: new Vector3(cameraTarget.x, cameraTarget.y, cameraTarget.z),\r\n });\r\n\r\n // Add interactivity\r\n sciChart3DSurface.chartModifiers.add(\r\n new OrbitModifier3D(),\r\n new MouseWheelZoomModifier3D()\r\n );\r\n\r\n // Create axes\r\n const xRange = this.config.xRange ?? { min: 0, max: 360 };\r\n const yRange = this.config.yRange ?? { min: 0, max: 5000 };\r\n const zRange = this.config.zRange ?? { min: 0, max: 50 };\r\n\r\n const baseAxisOptions = {\r\n drawMinorGridLines: false,\r\n majorGridLineStyle: { color: \"#7e7e7e\" },\r\n planeBorderThickness: 3,\r\n };\r\n\r\n sciChart3DSurface.xAxis = new NumericAxis3D(wasmContext, {\r\n ...baseAxisOptions,\r\n axisTitle: this.config.xAxisTitle ?? \"Phase Angle (°)\",\r\n autoTicks: false,\r\n visibleRange: new NumberRange(xRange.min, xRange.max),\r\n majorDelta: 45,\r\n minorDelta: 15,\r\n flippedCoordinates: true,\r\n axisBandsFill: \"#d2d2d2\",\r\n });\r\n\r\n sciChart3DSurface.yAxis = new NumericAxis3D(wasmContext, {\r\n ...baseAxisOptions,\r\n axisTitle: this.config.yAxisTitle ?? \"Amplitude (mVp)\",\r\n visibleRange: new NumberRange(yRange.min, yRange.max),\r\n axisBandsFill: \"#b1b1b1\",\r\n });\r\n\r\n sciChart3DSurface.zAxis = new NumericAxis3D(wasmContext, {\r\n ...baseAxisOptions,\r\n axisTitle: this.config.zAxisTitle ?? \"Cycle\",\r\n majorDelta: 10,\r\n minorDelta: 5,\r\n visibleRange: new NumberRange(zRange.min, zRange.max),\r\n axisBandsFill: \"#d0d0d0\",\r\n labelPrecision: 0,\r\n });\r\n\r\n // Add column data\r\n this.addColumnData(this.config.data);\r\n\r\n // Add sine wave reference if enabled\r\n if (this.config.showSineWave !== false) {\r\n this.addSineWave();\r\n }\r\n\r\n // Add tooltip\r\n this.addTooltip();\r\n }\r\n\r\n /**\r\n * Add column data to the chart\r\n */\r\n private addColumnData(data: Column3DDataPoint[]): void {\r\n if (!this.surface || !this.wasmContext) return;\r\n\r\n const wasmContext = this.wasmContext;\r\n\r\n // Create XYZ data series\r\n this.dataSeries = new XyzDataSeries3D(wasmContext);\r\n \r\n // Add data points\r\n data.forEach(([x, y, z]) => {\r\n this.dataSeries!.append(x, y, z);\r\n });\r\n\r\n // Create column series\r\n this.columnSeries = new ColumnRenderableSeries3D(wasmContext, {\r\n dataSeries: this.dataSeries,\r\n fill: this.config.barFill ?? \"#52aaf2\",\r\n stroke: this.config.barStroke ?? \"#52aaf2\",\r\n opacity: this.config.barOpacity ?? 0.95,\r\n dataPointWidthX: this.config.barWidthX ?? 8,\r\n dataPointWidthZ: this.config.barWidthZ ?? 8,\r\n });\r\n\r\n this.surface!.renderableSeries.add(this.columnSeries);\r\n }\r\n\r\n /**\r\n * Add sine wave reference line on back plane\r\n */\r\n private addSineWave(): void {\r\n if (!this.surface || !this.wasmContext) return;\r\n\r\n const wasmContext = this.wasmContext;\r\n const sineData = new XyzDataSeries3D(wasmContext);\r\n const backPlaneZ = 0;\r\n \r\n const center = this.config.sineWaveCenter ?? 2000;\r\n const amplitude = this.config.sineWaveAmplitude ?? 2000;\r\n\r\n for (let deg = 0; deg <= 360; deg += 5) {\r\n const rad = (deg * Math.PI) / 180;\r\n const y = center + amplitude * Math.sin(rad);\r\n sineData.append(deg, y, backPlaneZ);\r\n }\r\n\r\n const sineSeries = new PointLineRenderableSeries3D(wasmContext, {\r\n dataSeries: sineData,\r\n stroke: \"black\",\r\n strokeThickness: 3,\r\n opacity: 1.0,\r\n });\r\n\r\n this.surface!.renderableSeries.add(sineSeries);\r\n }\r\n\r\n /**\r\n * Add tooltip modifier\r\n */\r\n private addTooltip(): void {\r\n if (!this.surface) return;\r\n\r\n const xTitle = this.config.xAxisTitle ?? \"Phase Angle\";\r\n const yTitle = this.config.yAxisTitle ?? \"Amplitude\";\r\n const zTitle = this.config.zAxisTitle ?? \"Cycle\";\r\n\r\n const tooltipModifier = new TooltipModifier3D({\r\n tooltipDataTemplate: (seriesInfo: any) => {\r\n const valuesWithLabels: string[] = [];\r\n if (seriesInfo && seriesInfo.isHit) {\r\n valuesWithLabels.push(`${xTitle}: ${seriesInfo.xValue}`);\r\n valuesWithLabels.push(`${yTitle}: ${seriesInfo.yValue}`);\r\n valuesWithLabels.push(`${zTitle}: ${seriesInfo.zValue}`);\r\n }\r\n return valuesWithLabels;\r\n },\r\n });\r\n\r\n this.surface!.chartModifiers.add(tooltipModifier);\r\n }\r\n\r\n /**\r\n * Set new data for the chart\r\n */\r\n public setData(data: Column3DDataPoint[]): void {\r\n if (!this.dataSeries) {\r\n this.config.data = data;\r\n return;\r\n }\r\n\r\n // Clear and update data\r\n this.dataSeries.clear();\r\n data.forEach(([x, y, z]) => {\r\n this.dataSeries!.append(x, y, z);\r\n });\r\n\r\n // Request redraw\r\n if (this.surface) {\r\n this.surface.invalidateElement();\r\n }\r\n }\r\n\r\n /**\r\n * Update camera position\r\n */\r\n public setCameraPosition(\r\n position: { x: number; y: number; z: number },\r\n target?: { x: number; y: number; z: number }\r\n ): void {\r\n if (!this.surface || !this.wasmContext) return;\r\n\r\n this.surface.camera.position = new Vector3(position.x, position.y, position.z);\r\n if (target) {\r\n this.surface.camera.target = new Vector3(target.x, target.y, target.z);\r\n }\r\n this.surface.invalidateElement();\r\n }\r\n\r\n /**\r\n * Update chart options\r\n */\r\n public setOptions(options: Partial<Column3DChartConfig>): void {\r\n this.config = { ...this.config, ...options };\r\n\r\n if (options.cameraPosition && this.surface && this.wasmContext) {\r\n const pos = options.cameraPosition;\r\n const target = options.cameraTarget ?? { x: 0, y: 0, z: 0 };\r\n this.setCameraPosition(pos, target);\r\n }\r\n\r\n if (options.barFill || options.barStroke || options.barOpacity) {\r\n if (this.columnSeries) {\r\n if (options.barFill) this.columnSeries.fill = options.barFill;\r\n if (options.barStroke) this.columnSeries.stroke = options.barStroke;\r\n if (options.barOpacity !== undefined) this.columnSeries.opacity = options.barOpacity;\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Get the SciChart surface for advanced operations\r\n */\r\n public getSurface(): SciChart3DSurface | null {\r\n return this.surface;\r\n }\r\n\r\n /**\r\n * Destroy and clean up\r\n */\r\n public destroy(): void {\r\n if (this.isDestroyed) return;\r\n \r\n // Mark as destroyed immediately to prevent re-entry\r\n this.isDestroyed = true;\r\n\r\n if (this.surface) {\r\n try {\r\n this.surface.delete();\r\n } catch (e) {\r\n // Ignore cleanup errors - surface may already be destroyed\r\n }\r\n this.surface = null;\r\n }\r\n \r\n this.container = null;\r\n this.wasmContext = null;\r\n }\r\n\r\n /**\r\n * Get current configuration\r\n */\r\n public getConfig(): Column3DChartConfig {\r\n return { ...this.config };\r\n }\r\n\r\n /**\r\n * Check if chart is ready (initialized and not destroyed)\r\n */\r\n public isReady(): boolean {\r\n return this.surface !== null && !this.isDestroyed;\r\n }\r\n}\r\n\r\n/**\r\n * Factory function to create a 3D column chart\r\n */\r\nexport async function createColumn3DChart(\r\n container: HTMLElement | string,\r\n config: Column3DChartConfig\r\n): Promise<Column3DChart> {\r\n const chart = new Column3DChart(config);\r\n await chart.init(container);\r\n return chart;\r\n}\r\n\r\n","import {\r\n SciChartSurface,\r\n NumericAxis,\r\n UniformHeatmapDataSeries,\r\n UniformHeatmapRenderableSeries,\r\n HeatmapColorMap,\r\n HeatmapLegend,\r\n NumberRange,\r\n ZoomExtentsModifier,\r\n RubberBandXyZoomModifier,\r\n EAutoRange,\r\n EAxisAlignment,\r\n ENumericFormat,\r\n CursorModifier,\r\n FastLineRenderableSeries,\r\n XyDataSeries,\r\n} from \"scichart\";\r\nimport { SciChartJSLightTheme } from \"scichart/Charting/Themes/SciChartJSLightTheme\";\r\nimport type {\r\n PRPDChartConfig,\r\n PRPDDataPoint,\r\n PRPDResolutionLabel,\r\n PRPDWindowingRegion,\r\n PRPDChartStats,\r\n} from \"../types\";\r\nimport { generateId } from \"../utils/helpers\";\r\n\r\n// SciChart CDN configuration - auto-configures WASM loading from CDN\r\nconst SCICHART_VERSION = \"4.0.933\";\r\nlet sciChartConfigured = false;\r\n\r\nconst configureSciChartCDN = () => {\r\n if (sciChartConfigured) return;\r\n try {\r\n const cdnBase = `https://cdn.jsdelivr.net/npm/scichart@${SCICHART_VERSION}/_wasm`;\r\n SciChartSurface.configure({\r\n wasmUrl: `${cdnBase}/scichart2d.wasm`,\r\n dataUrl: `${cdnBase}/scichart2d.data`,\r\n } as any);\r\n sciChartConfigured = true;\r\n } catch (e) {\r\n console.warn(\"Failed to configure SciChart CDN:\", e);\r\n }\r\n};\r\n\r\n// ============================================\r\n// Constants\r\n// ============================================\r\n\r\nconst HORIZONTAL_RESOLUTION = 360;\r\nconst VERTICAL_SCALE_MAX_DEFAULT = 5000;\r\nconst HORIZONTAL_RESOLUTION_MULTIPLIER = 1;\r\n\r\n// Resolution configurations\r\nconst RESOLUTION_CONFIG = {\r\n UNI: {\r\n HI: { VERTICAL_RESOLUTION: 256, VERTICAL_OFFSET: 0, MIN_PEAK_ZERO: true },\r\n LO: { VERTICAL_RESOLUTION: 100, VERTICAL_OFFSET: 0, MIN_PEAK_ZERO: true },\r\n },\r\n BI: {\r\n HI: { VERTICAL_RESOLUTION: 512, VERTICAL_OFFSET: 256, MIN_PEAK_ZERO: false },\r\n LO: { VERTICAL_RESOLUTION: 200, VERTICAL_OFFSET: 100, MIN_PEAK_ZERO: false },\r\n },\r\n};\r\n\r\n// Default PRPD color map (jet-like colormap matching reference implementation)\r\n// Uses \"Transparent\" for cells at minimum value so grid shows through empty areas\r\nconst defaultPRPDColorStops = [\r\n { offset: 0, color: 'transparent' },\r\n { offset: 0.005, color: 'transparent' },\r\n { offset: 0.009, color: 'transparent' },\r\n { offset: 0.01, color: 'CornflowerBlue' },\r\n { offset: 0.4, color: 'DarkGreen' },\r\n { offset: 0.6, color: 'Chartreuse' },\r\n { offset: 0.8, color: 'Yellow' },\r\n { offset: 1, color: 'Red' },\r\n];\r\n\r\n// PRPD Theme: grey/light-grey alternating bands (matching reference)\r\nconst createPRPDTheme = () => {\r\n const theme = new SciChartJSLightTheme();\r\n theme.sciChartBackground = \"#f9f9f9\";\r\n theme.gridBackgroundBrush = \"grey\";\r\n theme.axisBandsFill = \"#dcdcdc\";\r\n theme.majorGridLineBrush = \"#888888\";\r\n theme.minorGridLineBrush = \"transparent\";\r\n return theme;\r\n};\r\n\r\n// Legend Theme: white background for heatmap color legend\r\nconst createLegendTheme = () => {\r\n const theme = new SciChartJSLightTheme();\r\n theme.sciChartBackground = \"#ffffff\";\r\n theme.gridBackgroundBrush = \"#ffffff\";\r\n theme.axisBandsFill = \"#ffffff\";\r\n theme.majorGridLineBrush = \"transparent\";\r\n theme.minorGridLineBrush = \"transparent\";\r\n return theme;\r\n};\r\n\r\n\r\n// ============================================\r\n// Helper Functions\r\n// ============================================\r\n\r\nfunction getResolutionConfig(\r\n uniBiLabel: string,\r\n hiLoLabel: string,\r\n maxPeak: number,\r\n minPeak: number,\r\n isLowResolution: boolean\r\n) {\r\n const cfg = isLowResolution\r\n ? RESOLUTION_CONFIG.UNI.HI\r\n : (RESOLUTION_CONFIG?.[uniBiLabel as keyof typeof RESOLUTION_CONFIG]?.[\r\n hiLoLabel as keyof typeof RESOLUTION_CONFIG.UNI\r\n ] ?? RESOLUTION_CONFIG.BI.HI);\r\n\r\n const newMinPeak = cfg.MIN_PEAK_ZERO ? 0 : (minPeak ?? -5000);\r\n const newMaxPeak = maxPeak ?? 5000;\r\n\r\n return {\r\n verticalResolution: cfg.VERTICAL_RESOLUTION,\r\n verticalOffset: cfg.VERTICAL_OFFSET,\r\n newMinPeak,\r\n newMaxPeak,\r\n isUnipolar: uniBiLabel === \"UNI\" || isLowResolution,\r\n };\r\n}\r\n\r\nfunction getPhaseColumnIndex(phaseAngle: number, maxPhaseAngle: number): number {\r\n const maxPhase = maxPhaseAngle || 360;\r\n if (maxPhase <= 0) return 0;\r\n\r\n const clampedPhase = Math.min(Math.max(phaseAngle, 0), maxPhase);\r\n const ratio = clampedPhase / maxPhase;\r\n\r\n return Math.min(HORIZONTAL_RESOLUTION - 1, Math.floor(ratio * (HORIZONTAL_RESOLUTION - 1)));\r\n}\r\n\r\nfunction generateSineWaveData(\r\n startX: number,\r\n endX: number,\r\n amplitude: number,\r\n frequency: number = 1,\r\n phaseShift: number = 0,\r\n step: number = 1,\r\n offset: number = 0\r\n): Array<[number, number]> {\r\n const data: Array<[number, number]> = [];\r\n for (let x = startX; x <= endX; x += step) {\r\n const rad = ((x - phaseShift) * Math.PI * frequency) / 180;\r\n const y = offset + amplitude * Math.sin(rad);\r\n data.push([x, y]);\r\n }\r\n return data;\r\n}\r\n\r\ninterface BuildZValuesResult {\r\n zValues: number[][];\r\n multiplier: number;\r\n maxValue: number;\r\n totalCount: number;\r\n verticalResolution: number;\r\n isUnipolar: boolean;\r\n newMinPeak: number;\r\n}\r\n\r\nfunction buildZValues(\r\n data: PRPDDataPoint[],\r\n scalingFactor: number,\r\n minPeak: number,\r\n maxPhaseAngle: number,\r\n verticalScaleMax: number,\r\n uniBiLabel: string,\r\n hiLoLabel: string,\r\n windowingData: PRPDWindowingRegion[] = [],\r\n isLowResolution: boolean\r\n): BuildZValuesResult {\r\n const { verticalResolution, verticalOffset, newMinPeak, newMaxPeak, isUnipolar } =\r\n getResolutionConfig(uniBiLabel, hiLoLabel, verticalScaleMax, minPeak, isLowResolution);\r\n\r\n const zValues = Array.from({ length: verticalResolution }, () =>\r\n new Array(HORIZONTAL_RESOLUTION).fill(0)\r\n );\r\n\r\n const vResolution = newMinPeak === 0 ? verticalResolution : verticalResolution / 2;\r\n const multiplier = (newMaxPeak * scalingFactor) / vResolution;\r\n\r\n let maxValue = 0;\r\n let totalCount = 0;\r\n\r\n const isInsideWindow = (phaseDeg: number, ampVal: number): boolean => {\r\n if (!windowingData?.length) return false;\r\n\r\n return windowingData.some(\r\n (w) =>\r\n phaseDeg >= w.minPhase &&\r\n phaseDeg <= w.maxPhase &&\r\n ampVal >= w.minAmp &&\r\n ampVal <= w.maxAmp\r\n );\r\n };\r\n\r\n data?.forEach(([phase_angle, amplitude, count]) => {\r\n const colIndex = getPhaseColumnIndex(phase_angle, maxPhaseAngle);\r\n\r\n const scaledAmp = Math.floor(\r\n (isUnipolar ? Math.abs(amplitude) : amplitude) * scalingFactor\r\n );\r\n\r\n // Skip counts in windowing region\r\n if (isInsideWindow(phase_angle, scaledAmp)) {\r\n return;\r\n }\r\n\r\n let rowIndex = Math.floor(scaledAmp / multiplier + verticalOffset);\r\n rowIndex = Math.max(0, Math.min(verticalResolution - 1, rowIndex));\r\n\r\n zValues[rowIndex][colIndex] += count;\r\n\r\n if (Math.abs(scaledAmp) > Math.abs(maxValue)) maxValue = scaledAmp;\r\n totalCount += count;\r\n });\r\n\r\n return {\r\n zValues,\r\n multiplier,\r\n maxValue,\r\n totalCount,\r\n verticalResolution,\r\n isUnipolar,\r\n newMinPeak,\r\n };\r\n}\r\n\r\n// ============================================\r\n// PRPDChart Class\r\n// ============================================\r\n\r\n/**\r\n * PRPD (Phase Resolved Partial Discharge) Chart implementation using SciChart\r\n * \r\n * This chart displays partial discharge data as a heatmap with:\r\n * - X-axis: Phase angle (0-360°)\r\n * - Y-axis: Amplitude (mVp or other unit)\r\n * - Color intensity: Pulse count at each phase/amplitude bin\r\n * - Optional sine wave overlay\r\n * - Resolution modes (UNI/BI, HI/LO)\r\n * - Windowing support for filtering regions\r\n */\r\nexport class PRPDChart {\r\n public readonly id: string;\r\n private container: HTMLElement | null = null; // Root container (may contain sub-divs)\r\n private chartHost: HTMLDivElement | null = null; // Div where SciChartSurface is mounted\r\n private surface: SciChartSurface | null = null;\r\n private wasmContext: any = null;\r\n private config: PRPDChartConfig;\r\n private isDestroyed: boolean = false;\r\n\r\n // Chart components\r\n private heatmapDataSeries: UniformHeatmapDataSeries | null = null;\r\n private heatmapSeries: UniformHeatmapRenderableSeries | null = null;\r\n private heatmapColorMap: HeatmapColorMap | null = null;\r\n private heatmapLegend: HeatmapLegend | null = null;\r\n private heatmapLegendDiv: HTMLDivElement | null = null;\r\n private sineDataSeries: XyDataSeries | null = null;\r\n private sineLineSeries: FastLineRenderableSeries | null = null;\r\n private xAxis: NumericAxis | null = null;\r\n private yAxis: NumericAxis | null = null;\r\n\r\n // Statistics\r\n private stats: PRPDChartStats = { peakValue: 0, totalCount: 0 };\r\n\r\n // Callbacks\r\n private onStatsChange?: (stats: PRPDChartStats) => void;\r\n\r\n constructor(config: PRPDChartConfig) {\r\n this.id = config.id ?? generateId(\"prpd\");\r\n this.config = {\r\n scalingFactor: 1,\r\n unitOfMeasurement: \"mVp\",\r\n maxPeak: 5000,\r\n minPeak: -5000,\r\n maxPhaseAngle: 360,\r\n resolutionLabel: { UniBi: \"BI\", HiLo: \"HI\" },\r\n windowingData: [],\r\n yAxisRange: 5000,\r\n isLowResolution: false,\r\n showColorPalette: true,\r\n showSineWave: true,\r\n colorMin: 0,\r\n colorMax: 100,\r\n ...config,\r\n };\r\n }\r\n\r\n /**\r\n * Initialize the chart in the given container\r\n */\r\n public async init(container: HTMLElement | string): Promise<void> {\r\n if (this.isDestroyed) {\r\n throw new Error(\"Cannot initialize a destroyed chart\");\r\n }\r\n\r\n // Resolve container (root element)\r\n if (typeof container === \"string\") {\r\n const el = document.getElementById(container);\r\n if (!el) {\r\n throw new Error(`Container element \"${container}\" not found`);\r\n }\r\n this.container = el;\r\n } else {\r\n this.container = container;\r\n }\r\n\r\n // Ensure root container has a unique ID for SciChart\r\n if (!this.container.id) {\r\n this.container.id = this.id;\r\n }\r\n\r\n // Determine chart host:\r\n // - If the root contains a \".chart-graph\" div, use that (Angular layout)\r\n // - Otherwise, mount directly into the root container\r\n const chartGraph = this.container.querySelector(\".chart-graph\") as HTMLDivElement | null;\r\n this.chartHost = chartGraph ?? (this.container as HTMLDivElement);\r\n\r\n // SciChart requires the host element to have an ID for canvas naming\r\n if (!this.chartHost.id) {\r\n this.chartHost.id = `${this.id}_host`;\r\n }\r\n\r\n // Create the SciChart surface\r\n await this.createSurface();\r\n }\r\n\r\n /**\r\n * Create the SciChart surface\r\n */\r\n private async createSurface(): Promise<void> {\r\n // Check if already destroyed or container missing\r\n if (this.isDestroyed || !this.container || !this.chartHost) {\r\n return;\r\n }\r\n\r\n // Check if container is still in DOM\r\n if (!document.body.contains(this.container)) {\r\n return;\r\n }\r\n\r\n // Configure SciChart to load WASM from CDN\r\n configureSciChartCDN();\r\n\r\n const theme = createPRPDTheme();\r\n\r\n let sciChartSurface;\r\n let wasmContext;\r\n \r\n try {\r\n const result = await SciChartSurface.create(\r\n this.chartHost,\r\n { theme }\r\n );\r\n sciChartSurface = result.sciChartSurface;\r\n wasmContext = result.wasmContext;\r\n } catch (e) {\r\n // SciChart initialization failed - container may have been removed\r\n console.warn(\"PRPDChart: Failed to create surface\", e);\r\n return;\r\n }\r\n \r\n // Check if destroyed during async operation\r\n if (this.isDestroyed || !this.container) {\r\n try {\r\n sciChartSurface.delete();\r\n } catch (e) {\r\n // Ignore cleanup errors\r\n }\r\n return;\r\n }\r\n\r\n this.surface = sciChartSurface;\r\n this.wasmContext = wasmContext;\r\n\r\n // Build initial data\r\n const verticalScaleMax = this.config.maxPeak || VERTICAL_SCALE_MAX_DEFAULT;\r\n const { zValues, multiplier, maxValue, totalCount, verticalResolution, isUnipolar } =\r\n buildZValues(\r\n this.config.data,\r\n this.config.scalingFactor!,\r\n this.config.minPeak!,\r\n this.config.maxPhaseAngle!,\r\n verticalScaleMax,\r\n this.config.resolutionLabel?.UniBi ?? \"BI\",\r\n this.config.resolutionLabel?.HiLo ?? \"HI\",\r\n this.config.windowingData,\r\n this.config.isLowResolution!\r\n );\r\n\r\n this.stats = { peakValue: maxValue, totalCount };\r\n\r\n const yAxisRange = this.config.yAxisRange || verticalScaleMax;\r\n\r\n // Create X Axis (Phase Angle)\r\n this.xAxis = new NumericAxis(wasmContext, {\r\n autoRange: EAutoRange.Never,\r\n labelFormat: ENumericFormat.Decimal,\r\n labelPrecision: 0,\r\n labelPostfix: \"°\",\r\n minorDelta: 2,\r\n majorDelta: 45,\r\n drawMajorBands: true,\r\n autoTicks: false,\r\n axisAlignment: EAxisAlignment.Bottom,\r\n axisTitle: \"Phase Angle (°)\",\r\n axisTitleStyle: {\r\n fontSize: 14,\r\n fontWeight: \"bold\",\r\n color: \"black\",\r\n },\r\n visibleRange: new NumberRange(0, 360),\r\n visibleRangeLimit: new NumberRange(0, 360),\r\n });\r\n\r\n // Create Y Axis (Amplitude)\r\n const yRange = isUnipolar\r\n ? new NumberRange(0, yAxisRange)\r\n : new NumberRange(-yAxisRange, yAxisRange);\r\n\r\n this.yAxis = new NumericAxis(wasmContext, {\r\n autoRange: EAutoRange.Never,\r\n labelFormat: ENumericFormat.Decimal,\r\n labelPrecision: 0,\r\n drawMajorBands: true,\r\n axisAlignment: EAxisAlignment.Right,\r\n axisTitle: `Amplitude (${this.config.unitOfMeasurement})`,\r\n axisTitleStyle: {\r\n fontSize: 14,\r\n fontWeight: \"bold\",\r\n color: \"black\",\r\n rotation: 270,\r\n },\r\n visibleRange: yRange,\r\n visibleRangeLimit: yRange,\r\n });\r\n\r\n sciChartSurface.xAxes.add(this.xAxis);\r\n sciChartSurface.yAxes.add(this.yAxis);\r\n\r\n // Create heatmap\r\n this.createHeatmap(zValues, multiplier, verticalResolution, isUnipolar);\r\n\r\n // Create sine wave overlay\r\n if (this.config.showSineWave) {\r\n this.createSineWave(yAxisRange, isUnipolar);\r\n }\r\n\r\n // Add chart modifiers\r\n const cursorModifier = new CursorModifier();\r\n cursorModifier.axisLabelFill = \"#FFFFFF\";\r\n cursorModifier.axisLabelStroke = \"#000000\";\r\n\r\n sciChartSurface.chartModifiers.add(\r\n cursorModifier,\r\n new RubberBandXyZoomModifier(),\r\n new ZoomExtentsModifier()\r\n );\r\n\r\n // Create legend\r\n if (this.config.showColorPalette) {\r\n await this.createHeatmapLegend();\r\n }\r\n\r\n // Notify stats\r\n this.onStatsChange?.(this.stats);\r\n }\r\n\r\n private createHeatmap(\r\n zValues: number[][],\r\n multiplier: number,\r\n verticalResolution: number,\r\n isUnipolar: boolean\r\n ): void {\r\n if (!this.surface || !this.wasmContext) return;\r\n\r\n const colorStops = this.config.colorStops ?? defaultPRPDColorStops;\r\n\r\n this.heatmapColorMap = new HeatmapColorMap({\r\n minimum: this.config.colorMin ?? 0,\r\n maximum: this.config.colorMax ?? 100,\r\n gradientStops: colorStops,\r\n });\r\n\r\n this.heatmapDataSeries = new UniformHeatmapDataSeries(this.wasmContext, {\r\n zValues,\r\n xStart: 0,\r\n xStep: HORIZONTAL_RESOLUTION_MULTIPLIER,\r\n yStart: isUnipolar ? 0 : (-1 * verticalResolution * multiplier) / 2,\r\n yStep: multiplier,\r\n });\r\n\r\n this.heatmapSeries = new UniformHeatmapRenderableSeries(this.wasmContext, {\r\n dataSeries: this.heatmapDataSeries,\r\n colorMap: this.heatmapColorMap,\r\n });\r\n\r\n this.surface.renderableSeries.add(this.heatmapSeries);\r\n }\r\n\r\n private createSineWave(yAxisRange: number, isUnipolar: boolean): void {\r\n if (!this.surface || !this.wasmContext) return;\r\n\r\n const sineAmplitude = isUnipolar ? yAxisRange / 2 : yAxisRange;\r\n const sineOffset = isUnipolar ? yAxisRange / 2 : 0;\r\n\r\n const sineWaveData = generateSineWaveData(0, 360, sineAmplitude, 1, 0, 1, sineOffset);\r\n\r\n this.sineDataSeries = new XyDataSeries(this.wasmContext);\r\n sineWaveData.forEach(([x, y]) => this.sineDataSeries!.append(x, y));\r\n\r\n this.sineLineSeries = new FastLineRenderableSeries(this.wasmContext, {\r\n dataSeries: this.sineDataSeries,\r\n stroke: \"Black\",\r\n strokeThickness: 3,\r\n });\r\n\r\n this.surface.renderableSeries.add(this.sineLineSeries);\r\n }\r\n\r\n private async createHeatmapLegend(): Promise<void> {\r\n if (!this.container || !this.heatmapColorMap) return;\r\n\r\n this.clearHeatmapLegend();\r\n\r\n // If a dedicated legend host exists (e.g. Angular wrapper's \".heatmap-chart\"),\r\n // use that; otherwise create a positioned div inside the root container.\r\n let div = this.container.querySelector(\".heatmap-chart\") as HTMLDivElement | null;\r\n if (!div) {\r\n div = document.createElement(\"div\");\r\n div.className = \"heatmap-chart\";\r\n div.style.position = \"absolute\";\r\n div.style.top = \"40px\";\r\n div.style.left = \"0px\";\r\n div.style.bottom = \"40px\";\r\n div.style.width = \"65px\";\r\n div.style.pointerEvents = \"none\";\r\n this.container.appendChild(div);\r\n }\r\n // SciChart HeatmapLegend requires the host element to have an ID\r\n if (!div.id) {\r\n div.id = `${this.id}_legend`;\r\n }\r\n this.heatmapLegendDiv = div;\r\n\r\n const min = this.config.colorMin ?? 0;\r\n const max = this.config.colorMax ?? 100;\r\n\r\n const { heatmapLegend } = await HeatmapLegend.create(div, {\r\n theme: createLegendTheme(),\r\n yAxisOptions: {\r\n visibleRange: new NumberRange(min, max),\r\n majorDelta: (max - min) / 5,\r\n minorDelta: (max - min) / 10,\r\n labelFormat: ENumericFormat.Decimal,\r\n labelPrecision: 0,\r\n labelPadding: 6,\r\n axisTitleGap: 8,\r\n labelStyle: { fontSize: 12, color: \"#A0A0A0\" },\r\n majorTickLineStyle: {\r\n color: \"#A0A0A0\",\r\n tickSize: 8,\r\n strokeThickness: 1,\r\n },\r\n minorTickLineStyle: {\r\n color: \"gray\",\r\n tickSize: 5,\r\n strokeThickness: 1,\r\n },\r\n axisBorder: {\r\n borderLeft: 0,\r\n borderRight: 0,\r\n borderTop: 0,\r\n borderBottom: 0,\r\n color: \"transparent\",\r\n },\r\n } as any,\r\n colorMap: this.heatmapColorMap,\r\n });\r\n\r\n this.heatmapLegend = heatmapLegend;\r\n }\r\n\r\n private clearHeatmapLegend(): void {\r\n if (this.heatmapLegend) {\r\n try {\r\n this.heatmapLegend.delete();\r\n } catch (e) {\r\n // Ignore deletion errors\r\n }\r\n this.heatmapLegend = null;\r\n }\r\n if (this.heatmapLegendDiv) {\r\n this.heatmapLegendDiv.remove();\r\n this.heatmapLegendDiv = null;\r\n }\r\n }\r\n\r\n /**\r\n * Update chart with new data\r\n */\r\n public updateData(data: PRPDDataPoint[]): void {\r\n this.config.data = data;\r\n this.refresh();\r\n }\r\n\r\n /**\r\n * Update resolution label (UNI/BI, HI/LO)\r\n */\r\n public setResolutionLabel(label: PRPDResolutionLabel): void {\r\n this.config.resolutionLabel = label;\r\n this.refresh();\r\n }\r\n\r\n /**\r\n * Update windowing data\r\n */\r\n public setWindowingData(windowingData: PRPDWindowingRegion[]): void {\r\n this.config.windowingData = windowingData;\r\n this.refresh();\r\n }\r\n\r\n /**\r\n * Update Y-axis range\r\n */\r\n public setYAxisRange(range: number): void {\r\n this.config.yAxisRange = range;\r\n this.refresh();\r\n }\r\n\r\n /**\r\n * Set stats change callback\r\n */\r\n public onStats(callback: (stats: PRPDChartStats) => void): void {\r\n this.onStatsChange = callback;\r\n }\r\n\r\n /**\r\n * Get current statistics\r\n */\r\n public getStats(): PRPDChartStats {\r\n return { ...this.stats };\r\n }\r\n\r\n /**\r\n * Refresh the chart with current configuration\r\n */\r\n public refresh(): void {\r\n if (!this.surface || !this.wasmContext) return;\r\n\r\n const verticalScaleMax = this.config.maxPeak || VERTICAL_SCALE_MAX_DEFAULT;\r\n const yAxisRange = this.config.yAxisRange || verticalScaleMax;\r\n\r\n const { zValues, multiplier, maxValue, totalCount, verticalResolution, isUnipolar } =\r\n buildZValues(\r\n this.config.data,\r\n this.config.scalingFactor!,\r\n this.config.minPeak!,\r\n this.config.maxPhaseAngle!,\r\n verticalScaleMax,\r\n this.config.resolutionLabel?.UniBi ?? \"BI\",\r\n this.config.resolutionLabel?.HiLo ?? \"HI\",\r\n this.config.windowingData,\r\n this.config.isLowResolution!\r\n );\r\n\r\n this.stats = { peakValue: maxValue, totalCount };\r\n\r\n // Update Y axis range\r\n if (this.yAxis) {\r\n const yRange = isUnipolar\r\n ? new NumberRange(0, yAxisRange)\r\n : new NumberRange(-yAxisRange, yAxisRange);\r\n this.yAxis.visibleRange = yRange;\r\n this.yAxis.visibleRangeLimit = yRange;\r\n }\r\n\r\n // Update heatmap data series\r\n if (this.heatmapDataSeries) {\r\n const needNewDs =\r\n this.heatmapDataSeries.arrayHeight !== verticalResolution ||\r\n this.heatmapDataSeries.arrayWidth !== HORIZONTAL_RESOLUTION;\r\n\r\n if (needNewDs) {\r\n // Need to recreate data series\r\n if (this.heatmapSeries) {\r\n this.surface.renderableSeries.remove(this.heatmapSeries);\r\n this.heatmapSeries.delete();\r\n }\r\n this.heatmapDataSeries.delete();\r\n\r\n this.heatmapDataSeries = new UniformHeatmapDataSeries(this.wasmContext, {\r\n zValues,\r\n xStart: 0,\r\n xStep: HORIZONTAL_RESOLUTION_MULTIPLIER,\r\n yStart: isUnipolar ? 0 : (-1 * verticalResolution * multiplier) / 2,\r\n yStep: multiplier,\r\n });\r\n\r\n this.heatmapSeries = new UniformHeatmapRenderableSeries(this.wasmContext, {\r\n dataSeries: this.heatmapDataSeries,\r\n colorMap: this.heatmapColorMap!,\r\n });\r\n\r\n this.surface.renderableSeries.add(this.heatmapSeries);\r\n } else {\r\n // Just update values\r\n if (typeof (this.heatmapDataSeries as any).setZValues === \"function\") {\r\n (this.heatmapDataSeries as any).setZValues(zValues);\r\n } else {\r\n (this.heatmapDataSeries as any).zValues = zValues;\r\n }\r\n this.heatmapDataSeries.yStart = isUnipolar\r\n ? 0\r\n : (-1 * verticalResolution * multiplier) / 2;\r\n this.heatmapDataSeries.yStep = multiplier;\r\n }\r\n }\r\n\r\n // Update sine wave\r\n if (this.sineDataSeries && this.config.showSineWave) {\r\n this.sineDataSeries.clear();\r\n const sineAmplitude = isUnipolar ? yAxisRange / 2 : yAxisRange;\r\n const sineOffset = isUnipolar ? yAxisRange / 2 : 0;\r\n const sineWaveData = generateSineWaveData(0, 360, sineAmplitude, 1, 0, 1, sineOffset);\r\n sineWaveData.forEach(([x, y]) => this.sineDataSeries!.append(x, y));\r\n }\r\n\r\n this.surface.invalidateElement();\r\n this.onStatsChange?.(this.stats);\r\n }\r\n\r\n /**\r\n * Set chart options\r\n */\r\n public setOptions(options: Partial<PRPDChartConfig>): void {\r\n this.config = { ...this.config, ...options };\r\n this.refresh();\r\n }\r\n\r\n /**\r\n * Reset zoom to full extent\r\n */\r\n public resetZoom(): void {\r\n if (!this.surface) return;\r\n this.surface.zoomExtents();\r\n }\r\n\r\n /**\r\n * Export chart as image\r\n */\r\n public async exportImage(format: \"png\" | \"jpeg\" = \"png\"): Promise<string> {\r\n if (!this.container) {\r\n throw new Error(\"Chart not initialized\");\r\n }\r\n\r\n const canvas = this.container.querySelector(\"canvas\");\r\n if (!canvas) {\r\n throw new Error(\"Canvas not found\");\r\n }\r\n\r\n const mimeType = format === \"jpeg\" ? \"image/jpeg\" : \"image/png\";\r\n return canvas.toDataURL(mimeType);\r\n }\r\n\r\n /**\r\n * Get current configuration\r\n */\r\n public getConfig(): PRPDChartConfig {\r\n return { ...this.config };\r\n }\r\n\r\n /**\r\n * Check if chart is ready\r\n */\r\n public isReady(): boolean {\r\n return this.surface !== null && !this.isDestroyed;\r\n }\r\n\r\n /**\r\n * Destroy and clean up\r\n */\r\n public destroy(): void {\r\n if (this.isDestroyed) return;\r\n \r\n // Mark as destroyed immediately to prevent re-entry\r\n this.isDestroyed = true;\r\n\r\n try {\r\n this.clearHeatmapLegend();\r\n } catch (e) {\r\n // Ignore cleanup errors\r\n }\r\n\r\n try {\r\n if (this.sineLineSeries && this.surface) {\r\n this.surface.renderableSeries.remove(this.sineLineSeries);\r\n this.sineLineSeries.delete();\r\n }\r\n } catch (e) {\r\n // Ignore cleanup errors\r\n }\r\n this.sineLineSeries = null;\r\n\r\n try {\r\n if (this.sineDataSeries) {\r\n this.sineDataSeries.delete();\r\n }\r\n } catch (e) {\r\n // Ignore cleanup errors\r\n }\r\n this.sineDataSeries = null;\r\n\r\n try {\r\n if (this.heatmapSeries && this.surface) {\r\n this.surface.renderableSeries.remove(this.heatmapSeries);\r\n this.heatmapSeries.delete();\r\n }\r\n } catch (e) {\r\n // Ignore cleanup errors\r\n }\r\n this.heatmapSeries = null;\r\n\r\n try {\r\n if (this.heatmapDataSeries) {\r\n this.heatmapDataSeries.delete();\r\n }\r\n } catch (e) {\r\n // Ignore cleanup errors\r\n }\r\n this.heatmapDataSeries = null;\r\n\r\n try {\r\n if (this.surface) {\r\n // Clear modifiers first to prevent SVG cleanup errors\r\n this.surface.chartModifiers.clear();\r\n this.surface.delete();\r\n }\r\n } catch (e) {\r\n // Ignore cleanup errors - DOM elements may already be removed\r\n }\r\n this.surface = null;\r\n }\r\n}\r\n\r\n/**\r\n * Factory function to create a PRPD chart\r\n */\r\nexport async function createPRPDChart(\r\n container: HTMLElement | string,\r\n config: PRPDChartConfig\r\n): Promise<PRPDChart> {\r\n const chart = new PRPDChart(config);\r\n await chart.init(container);\r\n return chart;\r\n}\r\n","/**\r\n * SciChart UI - A customizable charting library built on SciChart\r\n * \r\n * @packageDocumentation\r\n */\r\n\r\n// Re-export all types\r\nexport type {\r\n // Chart configurations\r\n ChartConfig,\r\n PieChartConfig,\r\n ScatterChartConfig,\r\n Surface3DChartConfig,\r\n PRPDChartConfig,\r\n AnimationConfig,\r\n TooltipConfig,\r\n TooltipData,\r\n LegendConfig,\r\n TitleConfig,\r\n \r\n // Axis configurations\r\n AxisConfig,\r\n XAxisConfig,\r\n YAxisConfig,\r\n GridLineConfig,\r\n \r\n // Data types\r\n DataPoint,\r\n SeriesData,\r\n ChartType,\r\n PRPDDataPoint,\r\n PRPDResolutionMode,\r\n PRPDResolutionQuality,\r\n PRPDResolutionLabel,\r\n PRPDWindowingRegion,\r\n PRPDChartStats,\r\n \r\n // Theme types\r\n ThemeConfig,\r\n \r\n // Event types\r\n ChartEventMap,\r\n ChartClickEvent,\r\n ChartHoverEvent,\r\n LegendClickEvent,\r\n ZoomEvent,\r\n PanEvent,\r\n RenderedEvent,\r\n \r\n // Instance types\r\n ChartInstance,\r\n} from \"./types\";\r\n\r\n// Export charts\r\nexport {\r\n BaseChart,\r\n Surface3DChart,\r\n createSurface3DChart,\r\n Column3DChart,\r\n createColumn3DChart,\r\n PRPDChart,\r\n createPRPDChart,\r\n type Column3DChartConfig,\r\n type Column3DDataPoint,\r\n} from \"./charts\";\r\n\r\n// Export themes\r\nexport {\r\n lightTheme,\r\n darkTheme,\r\n modernTheme,\r\n midnightTheme,\r\n ThemeManager,\r\n getThemeManager,\r\n} from \"./themes\";\r\n\r\n// Export utilities\r\nexport {\r\n generateId,\r\n parseSize,\r\n normalizeDataPoints,\r\n extractXValues,\r\n extractYValues,\r\n deepMerge,\r\n debounce,\r\n throttle,\r\n calculateDataRange,\r\n formatNumber,\r\n clamp,\r\n lerp,\r\n hexToRgba,\r\n} from \"./utils\";\r\n\r\n// Library version\r\nexport const VERSION = \"0.1.1\";\r\n\r\n// SciChart configuration helper\r\nexport { SciChartSurface } from \"scichart\";\r\n\r\n// SciChart version for CDN URLs\r\nconst SCICHART_VERSION = \"4.0.933\";\r\n\r\n// Default CDN URLs for SciChart WASM files\r\nconst DEFAULT_WASM_URL = `https://cdn.jsdelivr.net/npm/scichart@${SCICHART_VERSION}/_wasm/scichart2d.wasm`;\r\n\r\n// Auto-configure SciChart with CDN on package import\r\nlet isConfigured = false;\r\n\r\nfunction autoConfigureSciChart(): void {\r\n if (isConfigured) return;\r\n \r\n try {\r\n // eslint-disable-next-line @typescript-eslint/no-require-imports\r\n const { SciChartSurface } = require(\"scichart\");\r\n SciChartSurface.configure({\r\n wasmUrl: DEFAULT_WASM_URL,\r\n });\r\n isConfigured = true;\r\n } catch {\r\n // SciChart not available, skip auto-configuration\r\n }\r\n}\r\n\r\n// Run auto-configuration on import\r\nautoConfigureSciChart();\r\n\r\n/**\r\n * Configure SciChart WebAssembly location\r\n * By default, the package auto-configures to use CDN. \r\n * Call this to override with custom paths.\r\n * \r\n * @example\r\n * ```ts\r\n * import { configureSciChart } from '@rm-graph/core';\r\n * \r\n * // Use local WASM files\r\n * configureSciChart({\r\n * wasmUrl: '/scichart2d.wasm'\r\n * });\r\n * ```\r\n */\r\nexport function configureSciChart(options: {\r\n wasmUrl?: string;\r\n}): void {\r\n try {\r\n // eslint-disable-next-line @typescript-eslint/no-require-imports\r\n const { SciChartSurface } = require(\"scichart\");\r\n SciChartSurface.configure({\r\n wasmUrl: options.wasmUrl || DEFAULT_WASM_URL,\r\n });\r\n isConfigured = true;\r\n } catch {\r\n // SciChart not available\r\n }\r\n}\r\n\r\n"]}