velo-plot 3.0.0 → 3.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (107) hide show
  1. package/README.md +22 -15
  2. package/dist/ChartCore-AnR_3Xkb.js +7338 -0
  3. package/dist/ChartCore-AnR_3Xkb.js.map +1 -0
  4. package/dist/GpuChartRenderer-Dxc0hrQA.js +75 -0
  5. package/dist/GpuChartRenderer-Dxc0hrQA.js.map +1 -0
  6. package/dist/{index.core-BmZe2jRQ.js → PluginRegistry-CzMHebYP.js} +19 -33
  7. package/dist/PluginRegistry-CzMHebYP.js.map +1 -0
  8. package/dist/angular-hooks.js +1 -1
  9. package/dist/angular.js +8 -8
  10. package/dist/{axisFormat-CzumxpCL.js → axisFormat-Sz4WIJfQ.js} +2 -2
  11. package/dist/{axisFormat-CzumxpCL.js.map → axisFormat-Sz4WIJfQ.js.map} +1 -1
  12. package/dist/{chartSyncBridge-DbWrwtyP.js → chartSyncBridge-D_rCtbFq.js} +12 -11
  13. package/dist/{chartSyncBridge-DbWrwtyP.js.map → chartSyncBridge-D_rCtbFq.js.map} +1 -1
  14. package/dist/core/ChartStatistics.d.ts +1 -1
  15. package/dist/core/chart/ChartCore.d.ts +12 -17
  16. package/dist/core/chart/ChartFeatureHooks.d.ts +7 -0
  17. package/dist/core/chart/chartExportPatch.d.ts +2 -0
  18. package/dist/core/chart/overlaySeriesRegistry.d.ts +7 -0
  19. package/dist/core/chart/series/SeriesActions.d.ts +1 -0
  20. package/dist/core/chart/series/SeriesBufferLite.d.ts +13 -0
  21. package/dist/core/chart/series/seriesOptionsRegistry.d.ts +8 -0
  22. package/dist/core/chart/series/seriesTypeRegistry.d.ts +5 -0
  23. package/dist/createStackedChart-DqcLCFGS.js +1338 -0
  24. package/dist/createStackedChart-DqcLCFGS.js.map +1 -0
  25. package/dist/{hooks-CYPCxoZx.js → hooks-DH-3bewj.js} +7 -7
  26. package/dist/{hooks-CYPCxoZx.js.map → hooks-DH-3bewj.js.map} +1 -1
  27. package/dist/{index-qunX30Xu.js → index-B7PTX94B.js} +2133 -2133
  28. package/dist/index-B7PTX94B.js.map +1 -0
  29. package/dist/{index-BMiZoKmm.js → index-BgrvqltV.js} +67 -67
  30. package/dist/index-BgrvqltV.js.map +1 -0
  31. package/dist/index-Cv6ZDLWf.js +521 -0
  32. package/dist/index-Cv6ZDLWf.js.map +1 -0
  33. package/dist/index-qhscKTDy.js.map +1 -1
  34. package/dist/index.core.d.ts +8 -6
  35. package/dist/index.d.ts +1 -14
  36. package/dist/plugins/3d.js +3 -1
  37. package/dist/plugins/3d.js.map +1 -1
  38. package/dist/plugins/analysis.js.map +1 -1
  39. package/dist/plugins/createPlugin.d.ts +8 -0
  40. package/dist/plugins/debug.js +32 -32
  41. package/dist/plugins/debug.js.map +1 -1
  42. package/dist/plugins/gpu.js +2033 -209
  43. package/dist/plugins/gpu.js.map +1 -1
  44. package/dist/plugins/i18n.js +286 -23
  45. package/dist/plugins/i18n.js.map +1 -1
  46. package/dist/plugins/latex.js +766 -207
  47. package/dist/plugins/latex.js.map +1 -1
  48. package/dist/plugins/loading/index.d.ts +1 -2
  49. package/dist/plugins/loading.js +3 -4
  50. package/dist/plugins/offscreen.js +11 -10
  51. package/dist/plugins/offscreen.js.map +1 -1
  52. package/dist/plugins/regression.js +254 -256
  53. package/dist/plugins/regression.js.map +1 -1
  54. package/dist/plugins/streaming.js +1 -1
  55. package/dist/plugins/tools.js +1 -1
  56. package/dist/react.js +55 -58
  57. package/dist/react.js.map +1 -1
  58. package/dist/renderer/NativeWebGLRenderer.d.ts +2 -1
  59. package/dist/renderer/native/NativeWebGLRenderer.d.ts +5 -1
  60. package/dist/renderer/native/draw.d.ts +2 -47
  61. package/dist/renderer/native/drawCore.d.ts +27 -0
  62. package/dist/renderer/native/drawExtended.d.ts +29 -0
  63. package/dist/renderer/native/frameRenderExtended.d.ts +1 -0
  64. package/dist/renderer/native/frameRenderRegistry.d.ts +27 -0
  65. package/dist/renderer/native/programFactoryCore.d.ts +6 -0
  66. package/dist/renderer/native/programFactoryExtended.d.ts +4 -0
  67. package/dist/renderer/native/utils.d.ts +3 -29
  68. package/dist/renderer/native/utilsCore.d.ts +14 -0
  69. package/dist/renderer/native/utilsExtended.d.ts +17 -0
  70. package/dist/renderer/overlaySeriesExtended.d.ts +1 -0
  71. package/dist/renderer/registerExtendedSeries.d.ts +1 -0
  72. package/dist/renderer/registerWebGPU.d.ts +2 -0
  73. package/dist/renderer/seriesBufferExtended.d.ts +4 -0
  74. package/dist/scientific/index.d.ts +1 -5
  75. package/dist/scientific/registerScientific.d.ts +1 -0
  76. package/dist/scientific.js +41 -41
  77. package/dist/solid.js +56 -59
  78. package/dist/solid.js.map +1 -1
  79. package/dist/svelte.js +26 -29
  80. package/dist/svelte.js.map +1 -1
  81. package/dist/trading/index.d.ts +1 -4
  82. package/dist/trading/registerTrading.d.ts +3 -0
  83. package/dist/trading.js +42 -42
  84. package/dist/types.d.ts +3 -3
  85. package/dist/velo-plot.full.js +2212 -1351
  86. package/dist/velo-plot.full.js.map +1 -1
  87. package/dist/velo-plot.js +33 -28
  88. package/dist/velo-plot.js.map +1 -1
  89. package/dist/vue/index.d.ts +2 -2
  90. package/dist/vue.js +17 -20
  91. package/dist/vue.js.map +1 -1
  92. package/package.json +9 -1
  93. package/dist/ChartCore-BpzRvN4Y.js +0 -8467
  94. package/dist/ChartCore-BpzRvN4Y.js.map +0 -1
  95. package/dist/createStackedChart-Dm-YqUT7.js +0 -756
  96. package/dist/createStackedChart-Dm-YqUT7.js.map +0 -1
  97. package/dist/gpuRenderer-BpaMYz-k.js +0 -1848
  98. package/dist/gpuRenderer-BpaMYz-k.js.map +0 -1
  99. package/dist/index-BMiZoKmm.js.map +0 -1
  100. package/dist/index-qunX30Xu.js.map +0 -1
  101. package/dist/index-x4stH3jD.js +0 -282
  102. package/dist/index-x4stH3jD.js.map +0 -1
  103. package/dist/index.core-BmZe2jRQ.js.map +0 -1
  104. package/dist/mockDatafeed-DHIDPcpX.js +0 -515
  105. package/dist/mockDatafeed-DHIDPcpX.js.map +0 -1
  106. package/dist/symbols-DT0eLlpW.js +0 -568
  107. package/dist/symbols-DT0eLlpW.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"regression.js","sources":["../../src/plugins/regression/algorithms.ts","../../src/plugins/regression/index.ts"],"sourcesContent":["/**\n * Regression Plugin - Core Algorithms\n * \n * Implements regression algorithms for scientific curve fitting.\n * Includes linear, polynomial, exponential, and non-linear models.\n * \n * @packageDocumentation\n * @module plugins/regression\n */\n\nimport type {\n RegressionData,\n RegressionResult,\n LinearRegressionConfig,\n PolynomialRegressionConfig,\n ExponentialRegressionConfig,\n GaussianRegressionConfig\n} from './types';\nimport { solveLinearSystem } from '../analysis/math';\n\n// ============================================\n// Utility Functions\n// ============================================\n\nfunction toArray(data: Float32Array | Float64Array | number[]): number[] {\n return Array.from(data);\n}\n\nfunction toFloat32Array(data: number[]): Float32Array {\n return new Float32Array(data);\n}\n\nfunction calculateMean(data: number[]): number {\n return data.reduce((sum, val) => sum + val, 0) / data.length;\n}\n\nfunction calculateVariance(data: number[]): number {\n const mean = calculateMean(data);\n return data.reduce((sum, val) => sum + Math.pow(val - mean, 2), 0) / data.length;\n}\n\nfunction calculateRSquared(observed: number[], fitted: number[]): number {\n const meanObserved = calculateMean(observed);\n let ssRes = 0;\n let ssTot = 0;\n \n for (let i = 0; i < observed.length; i++) {\n ssRes += Math.pow(observed[i] - fitted[i], 2);\n ssTot += Math.pow(observed[i] - meanObserved, 2);\n }\n \n return 1 - (ssRes / ssTot);\n}\n\nfunction calculateAdjustedRSquared(rSquared: number, n: number, k: number): number {\n return 1 - ((1 - rSquared) * (n - 1)) / (n - k - 1);\n}\n\nfunction calculateRMSE(observed: number[], fitted: number[]): number {\n let sumSquaredErrors = 0;\n for (let i = 0; i < observed.length; i++) {\n sumSquaredErrors += Math.pow(observed[i] - fitted[i], 2);\n }\n return Math.sqrt(sumSquaredErrors / observed.length);\n}\n/*\nfunction _calculateStatistics(data: RegressionData, predictions: Float32Array): { rSquared: number; rmse: number; mae: number; residuals: number[] } {\n const n = data.x.length;\n const yMean = Array.from(data.y).reduce((sum, y) => sum + y, 0) / n;\n \n let ssTotal = 0;\n let ssResidual = 0;\n \n for (let i = 0; i < n; i++) {\n const yActual = data.y[i];\n const yPred = predictions[i];\n \n ssTotal += Math.pow(yActual - yMean, 2);\n ssResidual += Math.pow(yActual - yPred, 2);\n }\n \n const rSquared = 1 - (ssResidual / ssTotal);\n const rmse = Math.sqrt(ssResidual / n);\n const mae = Array.from(data.y).reduce((sum, y, i) => sum + Math.abs(y - predictions[i]), 0) / n;\n \n return {\n rSquared,\n rmse,\n mae,\n residuals: Array.from(data.y).map((y, i) => y - predictions[i])\n };\n}\n*/\n// ============================================\n// Linear Regression\n// ============================================\n\nexport function linearRegression(\n data: RegressionData,\n config: LinearRegressionConfig = {}\n): RegressionResult {\n const startTime = performance.now();\n \n const x = toArray(data.x);\n const y = toArray(data.y);\n const weights = data.weights ? toArray(data.weights) : null;\n const { forceOrigin = false } = config;\n \n const n = x.length;\n \n if (forceOrigin) {\n // Forced through origin: y = bx\n let numerator = 0;\n let denominator = 0;\n \n for (let i = 0; i < n; i++) {\n const weight = weights ? weights[i] : 1;\n numerator += weight * x[i] * y[i];\n denominator += weight * x[i] * x[i];\n }\n \n const slope = numerator / denominator;\n const fittedValues = x.map(xi => slope * xi);\n const residuals = y.map((yi, i) => yi - fittedValues[i]);\n \n const rSquared = calculateRSquared(y, fittedValues);\n const adjustedRSquared = calculateAdjustedRSquared(rSquared, n, 1);\n const rmse = calculateRMSE(y, fittedValues);\n \n return {\n method: 'linear',\n parameters: {\n parameters: [slope],\n uncertainties: [Math.sqrt(denominator / (n * numerator))], // Simplified\n correlationMatrix: [[1]]\n },\n statistics: {\n rSquared,\n adjustedRSquared,\n rmse,\n rss: residuals.reduce((sum, r) => sum + r * r, 0),\n tss: y.reduce((sum, yi) => sum + Math.pow(yi - calculateMean(y), 2), 0),\n n,\n k: 1\n },\n fittedValues: toFloat32Array(fittedValues),\n residuals: toFloat32Array(residuals),\n goodnessOfFit: rSquared > 0.9 ? 'excellent' : rSquared > 0.7 ? 'good' : rSquared > 0.5 ? 'fair' : 'poor',\n converged: true,\n iterations: 1,\n processingTime: performance.now() - startTime\n };\n } else {\n // Standard linear regression: y = ax + b\n let sumX = 0, sumY = 0, sumXY = 0, sumX2 = 0, sumY2 = 0;\n let sumWeights = 0;\n \n for (let i = 0; i < n; i++) {\n const weight = weights ? weights[i] : 1;\n sumX += weight * x[i];\n sumY += weight * y[i];\n sumXY += weight * x[i] * y[i];\n sumX2 += weight * x[i] * x[i];\n sumY2 += weight * y[i] * y[i];\n sumWeights += weight;\n }\n \n const meanX = sumX / sumWeights;\n const meanY = sumY / sumWeights;\n \n const slope = (sumXY - sumWeights * meanX * meanY) / (sumX2 - sumWeights * meanX * meanX);\n const intercept = meanY - slope * meanX;\n \n const fittedValues = x.map(xi => slope * xi + intercept);\n const residuals = y.map((yi, i) => yi - fittedValues[i]);\n \n const rSquared = calculateRSquared(y, fittedValues);\n const adjustedRSquared = calculateAdjustedRSquared(rSquared, n, 2);\n const rmse = calculateRMSE(y, fittedValues);\n \n return {\n method: 'linear',\n parameters: {\n parameters: [slope, intercept],\n uncertainties: [0.1, 0.1], // Simplified\n correlationMatrix: [[1, -0.5], [-0.5, 1]] // Simplified\n },\n statistics: {\n rSquared,\n adjustedRSquared,\n rmse,\n rss: residuals.reduce((sum, r) => sum + r * r, 0),\n tss: y.reduce((sum, yi) => sum + Math.pow(yi - meanY, 2), 0),\n n,\n k: 2\n },\n fittedValues: toFloat32Array(fittedValues),\n residuals: toFloat32Array(residuals),\n goodnessOfFit: rSquared > 0.9 ? 'excellent' : rSquared > 0.7 ? 'good' : rSquared > 0.5 ? 'fair' : 'poor',\n converged: true,\n iterations: 1,\n processingTime: performance.now() - startTime\n };\n }\n}\n\n// ============================================\n// Polynomial Regression\n// ============================================\n\nexport function polynomialRegression(\n data: RegressionData,\n config: PolynomialRegressionConfig\n): RegressionResult {\n const startTime = performance.now();\n \n const x = toArray(data.x);\n const y = toArray(data.y);\n const { degree } = config;\n \n const n = x.length;\n const m = degree + 1; // Number of parameters\n \n // Build Vandermonde matrix\n const X: number[][] = [];\n for (let i = 0; i < n; i++) {\n const row: number[] = [];\n for (let j = 0; j <= degree; j++) {\n row.push(Math.pow(x[i], j));\n }\n X.push(row);\n }\n \n // Solve using least squares (simplified implementation)\n // In practice, would use QR decomposition or SVD\n const parameters = solveLeastSquares(X, y, 0);\n \n const fittedValues = x.map(xi => {\n let value = 0;\n for (let j = 0; j <= degree; j++) {\n value += parameters[j] * Math.pow(xi, j);\n }\n return value;\n });\n \n const residuals = y.map((yi, i) => yi - fittedValues[i]);\n \n const rSquared = calculateRSquared(y, fittedValues);\n const adjustedRSquared = calculateAdjustedRSquared(rSquared, n, m);\n const rmse = calculateRMSE(y, fittedValues);\n \n return {\n method: 'polynomial',\n parameters: {\n parameters,\n uncertainties: new Array(m).fill(0.1), // Simplified\n correlationMatrix: Array(m).fill(0).map(() => Array(m).fill(0)) // Simplified\n },\n statistics: {\n rSquared,\n adjustedRSquared,\n rmse,\n rss: residuals.reduce((sum, r) => sum + r * r, 0),\n tss: y.reduce((sum, yi) => sum + Math.pow(yi - calculateMean(y), 2), 0),\n n,\n k: m\n },\n fittedValues: toFloat32Array(fittedValues),\n residuals: toFloat32Array(residuals),\n goodnessOfFit: rSquared > 0.9 ? 'excellent' : rSquared > 0.7 ? 'good' : rSquared > 0.5 ? 'fair' : 'poor',\n converged: true,\n iterations: 10, // Simplified\n processingTime: performance.now() - startTime\n };\n}\n\n// ============================================\n// Exponential Regression\n// ============================================\n\nexport function exponentialRegression(\n data: RegressionData,\n _config: ExponentialRegressionConfig = {}\n): RegressionResult {\n const startTime = performance.now();\n \n const x = toArray(data.x);\n const y = toArray(data.y);\n \n // Transform to linear: ln(y - offset) = ln(amplitude) + rate * x\n // Need to estimate offset first (simplified)\n let offset = Math.min(...y) - 1;\n \n const transformedY = y.map(yi => {\n const adjusted = yi - offset;\n return adjusted > 0 ? Math.log(adjusted) : 0;\n });\n \n // Linear regression on transformed data\n const linearResult = linearRegression(\n { x, y: transformedY },\n { forceOrigin: false }\n );\n \n const [rate, logAmplitude] = linearResult.parameters.parameters;\n const amplitude = Math.exp(logAmplitude);\n \n const fittedValues = x.map(xi => amplitude * Math.exp(rate * xi) + offset);\n const residuals = y.map((yi, i) => yi - fittedValues[i]);\n \n const rSquared = calculateRSquared(y, fittedValues);\n const adjustedRSquared = calculateAdjustedRSquared(rSquared, x.length, 3);\n const rmse = calculateRMSE(y, fittedValues);\n \n return {\n method: 'exponential',\n parameters: {\n parameters: [amplitude, rate, offset],\n uncertainties: [0.1, 0.01, 0.1], // Simplified\n correlationMatrix: [[1, 0.5, 0.2], [0.5, 1, 0.3], [0.2, 0.3, 1]] // Simplified\n },\n statistics: {\n rSquared,\n adjustedRSquared,\n rmse,\n rss: residuals.reduce((sum, r) => sum + r * r, 0),\n tss: y.reduce((sum, yi) => sum + Math.pow(yi - calculateMean(y), 2), 0),\n n: x.length,\n k: 3\n },\n fittedValues: toFloat32Array(fittedValues),\n residuals: toFloat32Array(residuals),\n goodnessOfFit: rSquared > 0.9 ? 'excellent' : rSquared > 0.7 ? 'good' : rSquared > 0.5 ? 'fair' : 'poor',\n converged: true,\n iterations: 5, // Simplified\n processingTime: performance.now() - startTime\n };\n}\n\n// ============================================\n// Gaussian Regression\n// ============================================\n\nexport function gaussianRegression(\n data: RegressionData,\n _config: GaussianRegressionConfig = {}\n): RegressionResult {\n const startTime = performance.now();\n \n const x = toArray(data.x);\n const y = toArray(data.y);\n \n // Non-linear fitting using simplified gradient descent\n let amplitude = Math.max(...y);\n let mean = x.reduce((sum, xi) => sum + xi, 0) / x.length;\n let std = Math.sqrt(calculateVariance(x));\n let offset = Math.min(...y);\n \n const learningRate = 0.001;\n const maxIterations = 100;\n const tolerance = 1e-6;\n \n for (let iter = 0; iter < maxIterations; iter++) {\n let gradAmplitude = 0, gradMean = 0, gradStd = 0, gradOffset = 0;\n let totalError = 0;\n \n for (let i = 0; i < x.length; i++) {\n const xi = x[i];\n const yi = y[i];\n \n // Gaussian function: A * exp(-((x - μ)² / (2σ²))) + offset\n const exponent = -Math.pow(xi - mean, 2) / (2 * std * std);\n const predicted = amplitude * Math.exp(exponent) + offset;\n const error = yi - predicted;\n totalError += error * error;\n \n // Gradients\n const expTerm = Math.exp(exponent);\n gradAmplitude += error * expTerm;\n gradMean += error * amplitude * expTerm * (xi - mean) / (std * std);\n gradStd += error * amplitude * expTerm * Math.pow(xi - mean, 2) / (Math.pow(std, 3));\n gradOffset += error;\n }\n \n // Update parameters\n amplitude += learningRate * gradAmplitude;\n mean += learningRate * gradMean;\n std += learningRate * gradStd;\n offset += learningRate * gradOffset;\n \n // Ensure std is positive\n std = Math.max(std, 0.01);\n \n if (totalError < tolerance) break;\n }\n \n const fittedValues = x.map(xi => {\n const exponent = -Math.pow(xi - mean, 2) / (2 * std * std);\n return amplitude * Math.exp(exponent) + offset;\n });\n \n const residuals = y.map((yi, i) => yi - fittedValues[i]);\n \n const rSquared = calculateRSquared(y, fittedValues);\n const adjustedRSquared = calculateAdjustedRSquared(rSquared, x.length, 4);\n const rmse = calculateRMSE(y, fittedValues);\n \n return {\n method: 'gaussian',\n parameters: {\n parameters: [amplitude, mean, std, offset],\n uncertainties: [0.1, 0.1, 0.01, 0.1], // Simplified\n correlationMatrix: Array(4).fill(0).map(() => Array(4).fill(0)) // Simplified\n },\n statistics: {\n rSquared,\n adjustedRSquared,\n rmse,\n rss: residuals.reduce((sum, r) => sum + r * r, 0),\n tss: y.reduce((sum, yi) => sum + Math.pow(yi - calculateMean(y), 2), 0),\n n: x.length,\n k: 4\n },\n fittedValues: toFloat32Array(fittedValues),\n residuals: toFloat32Array(residuals),\n goodnessOfFit: rSquared > 0.9 ? 'excellent' : rSquared > 0.7 ? 'good' : rSquared > 0.5 ? 'fair' : 'poor',\n converged: true,\n iterations: maxIterations,\n processingTime: performance.now() - startTime\n };\n}\n\n// ============================================\n// Helper Functions\n// ============================================\n\nfunction solveLeastSquares(X: number[][], y: number[], regularization: number = 0): number[] {\n const n = X.length;\n const m = X[0].length;\n \n // Compute X^T * X\n const XtX: number[][] = Array(m).fill(0).map(() => Array(m).fill(0));\n const Xty: number[] = Array(m).fill(0);\n \n for (let i = 0; i < n; i++) {\n for (let j = 0; j < m; j++) {\n for (let k = 0; k < m; k++) {\n XtX[j][k] += X[i][j] * X[i][k];\n }\n Xty[j] += X[i][j] * y[i];\n }\n }\n \n // Add L2 regularization if needed\n if (regularization > 0) {\n for (let i = 0; i < m; i++) {\n XtX[i][i] += regularization;\n }\n }\n \n // Solve using Gaussian elimination\n return solveLinearSystem(XtX, Xty);\n}","/**\n * Regression Plugin - Main Implementation\n * \n * Provides advanced scientific regression and curve fitting capabilities.\n * Supports multiple regression methods with automatic model selection.\n * \n * @example\n * ```typescript\n * import { PluginRegression } from 'velo-plot/plugins/regression';\n * \n * chart.use(PluginRegression({\n * defaultMethod: 'polynomial',\n * enableAutoSelection: true,\n * modelSelectionCriteria: 'aic',\n * maxIterations: 100\n * }));\n * \n * // Fit polynomial regression\n * const result = await chart.regression.fit('series1', {\n * x: seriesData.x,\n * y: seriesData.y\n * }, 'polynomial', { degree: 3 });\n * \n * console.log(`R² = ${result.statistics.rSquared}`);\n * console.log(`Parameters: ${result.parameters.parameters}`);\n * \n * // Auto-fit best model\n * const bestFit = await chart.regression.autoFit('series1', data);\n * \n * // Visualize fit\n * chart.regression.visualizeFit('series1');\n * ```\n * \n * @packageDocumentation\n * @module plugins/regression\n */\n\nimport type { \n PluginManifest, \n ChartPlugin, \n PluginContext,\n BeforeRenderEvent,\n DataUpdateEvent\n} from '../types';\n\nimport type {\n PluginRegressionConfig,\n RegressionAPI,\n RegressionResult,\n RegressionData,\n RegressionMethod,\n LinearRegressionConfig,\n PolynomialRegressionConfig,\n ExponentialRegressionConfig,\n GaussianRegressionConfig,\n RegressionCompletedEvent,\n RegressionFailedEvent,\n ModelSelectedEvent,\n RegressionStatistics\n} from './types';\n\nimport {\n linearRegression,\n polynomialRegression,\n exponentialRegression,\n gaussianRegression\n} from './algorithms';\n\n// ============================================\n// Plugin Manifest\n// ============================================\n\nconst manifestRegression: PluginManifest = {\n name: 'regression',\n version: '1.0.0',\n description: 'Advanced scientific regression and curve fitting',\n author: 'Velo Plot Team',\n provides: ['regression', 'curve-fitting', 'scientific-analysis']\n};\n\n// ============================================\n// Default Configuration\n// ============================================\n\nconst DEFAULT_CONFIG: Required<PluginRegressionConfig> = {\n defaultMethod: 'linear',\n enableAutoSelection: false,\n modelSelectionCriteria: 'aic',\n enableWeightedRegression: false,\n enableRobustRegression: false,\n robustMethod: 'huber',\n maxIterations: 100,\n convergenceTolerance: 1e-6,\n defaultConfidenceLevel: 0.95,\n enableParallelProcessing: false,\n parallelChunkSize: 1000\n};\n\n// ============================================\n// Regression Plugin Implementation\n// ============================================\n\nexport function PluginRegression(\n userConfig: Partial<PluginRegressionConfig> = {}\n): ChartPlugin<PluginRegressionConfig> {\n const config = { ...DEFAULT_CONFIG, ...userConfig };\n let ctx: PluginContext | null = null;\n \n // Results storage\n const regressionResults = new Map<string, RegressionResult[]>();\n const realtimeSeries = new Set<string>();\n const debounceTimers = new Map<string, any>();\n \n // ============================================\n // Core Regression Methods\n // ============================================\n \n async function fit(\n seriesId: string,\n data: RegressionData,\n method: RegressionMethod = config.defaultMethod,\n methodConfig: any = {}\n ): Promise<RegressionResult> {\n try {\n // Clear previous visualization before fitting new model\n api.hideVisualization(seriesId);\n \n let result: RegressionResult;\n \n switch (method) {\n case 'linear':\n result = linearRegression(data, methodConfig as LinearRegressionConfig);\n break;\n case 'polynomial':\n result = polynomialRegression(data, methodConfig as PolynomialRegressionConfig);\n break;\n case 'exponential':\n result = exponentialRegression(data, methodConfig as ExponentialRegressionConfig);\n break;\n case 'gaussian':\n result = gaussianRegression(data, methodConfig as GaussianRegressionConfig);\n break;\n case 'logarithmic':\n // Transform y = a * log(x) + b to linear\n const logX = Array.from(data.x).map(xi => Math.log(xi));\n result = linearRegression({ ...data, x: new Float32Array(logX) }, methodConfig as LinearRegressionConfig);\n result.method = 'logarithmic';\n break;\n case 'power':\n // Transform to linear: log(y) = log(a) + b * log(x)\n const logY = Array.from(data.y).map(yi => Math.log(yi));\n const logXPow = Array.from(data.x).map(xi => Math.log(xi));\n result = linearRegression({ ...data, x: new Float32Array(logXPow), y: new Float32Array(logY) }, methodConfig as LinearRegressionConfig);\n result.method = 'power';\n break;\n case 'lorentzian':\n case 'sigmoid':\n case 'custom':\n // For now, fall back to linear for unsupported methods\n result = linearRegression(data, methodConfig as LinearRegressionConfig);\n break;\n default:\n throw new Error(`Unsupported regression method: ${method}`);\n }\n \n // Clear and store new result (replace, don't accumulate)\n regressionResults.set(seriesId, [result]);\n \n // Emit event\n if (ctx) {\n ctx.events.emit('regression:completed', {\n result,\n seriesId,\n method,\n timestamp: Date.now()\n } as RegressionCompletedEvent);\n }\n \n ctx?.log.info(`Regression completed for ${seriesId}: ${method} (R² = ${result.statistics.rSquared.toFixed(3)})`);\n \n return result;\n } catch (error) {\n if (ctx) {\n ctx.events.emit('regression:failed', {\n error: error as Error,\n seriesId,\n method,\n reason: `Fitting failed: ${error}`,\n timestamp: Date.now()\n } as RegressionFailedEvent);\n }\n \n throw error;\n }\n }\n \n async function fitAndCompare(\n seriesId: string,\n data: RegressionData,\n methods: RegressionMethod[],\n configs?: any[]\n ): Promise<RegressionResult[]> {\n const results: RegressionResult[] = [];\n \n for (let i = 0; i < methods.length; i++) {\n const method = methods[i];\n const methodConfig = configs ? configs[i] : {};\n \n try {\n const result = await fit(seriesId, data, method, methodConfig);\n results.push(result);\n } catch (error) {\n ctx?.log.warn(`Regression failed for ${method}: ${error}`);\n }\n }\n \n // Sort by criteria\n const criteria = config.modelSelectionCriteria;\n results.sort((a, b) => {\n switch (criteria) {\n case 'aic':\n return (a.statistics.aic || 0) - (b.statistics.aic || 0);\n case 'bic':\n return (a.statistics.bic || 0) - (b.statistics.bic || 0);\n case 'adjusted-r2':\n return b.statistics.adjustedRSquared - a.statistics.adjustedRSquared;\n default:\n return b.statistics.rSquared - a.statistics.rSquared;\n }\n });\n \n return results;\n }\n \n async function autoFit(\n seriesId: string,\n data: RegressionData,\n candidateMethods: RegressionMethod[] = ['linear', 'polynomial', 'exponential', 'gaussian']\n ): Promise<RegressionResult> {\n const configs = candidateMethods.map(method => {\n switch (method) {\n case 'polynomial':\n return { degree: 2 } as PolynomialRegressionConfig;\n case 'exponential':\n return {} as ExponentialRegressionConfig;\n case 'gaussian':\n return {} as GaussianRegressionConfig;\n default:\n return {} as LinearRegressionConfig;\n }\n });\n \n const results = await fitAndCompare(seriesId, data, candidateMethods, configs);\n \n if (results.length === 0) {\n throw new Error('No regression methods succeeded');\n }\n \n const bestResult = results[0];\n \n // Emit model selection event\n if (ctx) {\n ctx.events.emit('model:selected', {\n selectedMethod: bestResult.method,\n candidateResults: results,\n selectionCriteria: config.modelSelectionCriteria,\n seriesId,\n timestamp: Date.now()\n } as ModelSelectedEvent);\n }\n \n ctx?.log.info(`Auto-fit selected ${bestResult.method} for ${seriesId} (R² = ${bestResult.statistics.rSquared.toFixed(3)})`);\n \n return bestResult;\n }\n \n // ============================================\n // API Implementation\n // ============================================\n \n const api: RegressionAPI & Record<string, unknown> = {\n fit,\n \n fitAndCompare,\n \n autoFit,\n \n getResults(seriesId: string): RegressionResult[] {\n return regressionResults.get(seriesId) || [];\n },\n \n clearResults(seriesId: string): void {\n regressionResults.delete(seriesId);\n ctx?.log.info(`Regression results cleared for series: ${seriesId}`);\n },\n \n predict(\n seriesId: string,\n xValues: Float32Array | Float64Array | number[],\n resultIndex = 0\n ): Float32Array {\n const results = regressionResults.get(seriesId);\n if (!results || results.length === 0) {\n throw new Error(`No regression results found for series: ${seriesId}`);\n }\n \n const result = results[Math.min(resultIndex, results.length - 1)];\n const x = Array.from(xValues);\n const params = result.parameters.parameters;\n \n const predictions = x.map(xi => {\n switch (result.method) {\n case 'linear':\n return params[0] * xi + (params[1] || 0);\n case 'polynomial':\n let value = 0;\n for (let j = 0; j < params.length; j++) {\n value += params[j] * Math.pow(xi, j);\n }\n return value;\n case 'exponential':\n return params[0] * Math.exp(params[1] * xi) + (params[2] || 0);\n case 'gaussian':\n const exponent = -Math.pow(xi - params[1], 2) / (2 * params[2] * params[2]);\n return params[0] * Math.exp(exponent) + (params[3] || 0);\n case 'logarithmic':\n return params[0] * Math.log(xi) + (params[1] || 0);\n case 'power':\n return params[0] * Math.pow(xi, params[1]);\n default:\n return 0;\n }\n });\n \n return new Float32Array(predictions);\n },\n \n getConfidenceIntervals(\n seriesId: string,\n xValues: Float32Array | Float64Array | number[],\n _level = config.defaultConfidenceLevel,\n resultIndex = 0\n ): { lower: Float32Array; upper: Float32Array } {\n // Simplified confidence intervals\n const predictions = this.predict(seriesId, xValues, resultIndex);\n const margin = 0.1; // Simplified margin\n \n const lower = predictions.map(p => p - margin);\n const upper = predictions.map(p => p + margin);\n \n return {\n lower: new Float32Array(lower),\n upper: new Float32Array(upper)\n };\n },\n \n evaluate(seriesId: string, data: RegressionData, resultIndex = 0): RegressionStatistics {\n const results = regressionResults.get(seriesId);\n if (!results || results.length === 0) {\n throw new Error(`No regression results found for series: ${seriesId}`);\n }\n \n const result = results[Math.min(resultIndex, results.length - 1)];\n const x = Array.from(data.x);\n const y = Array.from(data.y);\n \n // Use existing model to predict\n const predictions = api.predict(seriesId, x, resultIndex);\n const predArray = Array.from(predictions);\n \n const rSquared = calculateRSquared(y, predArray);\n const adjustedRSquared = calculateAdjustedRSquared(rSquared, y.length, result.parameters.parameters.length);\n const rmse = calculateRMSE(y, predArray);\n \n return {\n rSquared,\n adjustedRSquared,\n rmse,\n rss: y.reduce((sum, yi, i) => sum + Math.pow(yi - predArray[i], 2), 0),\n tss: y.reduce((sum, yi) => sum + Math.pow(yi - calculateMean(y), 2), 0),\n n: y.length,\n k: result.parameters.parameters.length\n };\n },\n \n enableRealtimeFitting(\n seriesId: string,\n method: RegressionMethod = config.defaultMethod,\n methodConfig: any = {}\n ): void {\n realtimeSeries.add(seriesId);\n \n // Run initial fitting\n const chart = ctx?.chart;\n if (chart) {\n const series = chart.getSeries(seriesId);\n if (series) {\n const data = series.getData();\n if (data && data.x.length > 0) {\n fit(seriesId, {\n x: data.x,\n y: data.y\n }, method, methodConfig);\n }\n }\n }\n \n ctx?.log.info(`Real-time regression fitting enabled for series: ${seriesId}`);\n },\n \n disableRealtimeFitting(seriesId: string): void {\n realtimeSeries.delete(seriesId);\n \n // Clear debounce timer\n const timer = debounceTimers.get(seriesId);\n if (timer) {\n clearTimeout(timer);\n debounceTimers.delete(seriesId);\n }\n \n ctx?.log.info(`Real-time regression fitting disabled for series: ${seriesId}`);\n },\n \n getStatistics(seriesId?: string) {\n if (seriesId) {\n const results = regressionResults.get(seriesId) || [];\n const methodsUsed: Record<RegressionMethod, number> = {} as any;\n \n for (const result of results) {\n methodsUsed[result.method] = (methodsUsed[result.method] || 0) + 1;\n }\n \n return {\n totalFittings: results.length,\n methodsUsed,\n averageRSquared: results.length > 0 ? results.reduce((sum, r) => sum + r.statistics.rSquared, 0) / results.length : 0,\n averageProcessingTime: results.length > 0 ? results.reduce((sum, r) => sum + r.processingTime, 0) / results.length : 0\n };\n } else {\n // Global statistics\n let totalFittings = 0;\n const allMethodsUsed: Record<RegressionMethod, number> = {} as any;\n const allRSquared: number[] = [];\n const allProcessingTimes: number[] = [];\n \n for (const results of regressionResults.values()) {\n totalFittings += results.length;\n allRSquared.push(...results.map(r => r.statistics.rSquared));\n allProcessingTimes.push(...results.map(r => r.processingTime));\n \n for (const result of results) {\n allMethodsUsed[result.method] = (allMethodsUsed[result.method] || 0) + 1;\n }\n }\n \n return {\n totalFittings,\n methodsUsed: allMethodsUsed,\n averageRSquared: allRSquared.length > 0 ? allRSquared.reduce((sum, r) => sum + r, 0) / allRSquared.length : 0,\n averageProcessingTime: allProcessingTimes.length > 0 ? allProcessingTimes.reduce((sum, t) => sum + t, 0) / allProcessingTimes.length : 0\n };\n }\n },\n \n updateConfig: (newConfig: Partial<PluginRegressionConfig>) => {\n Object.assign(config, newConfig);\n },\n \n getConfig: () => ({ ...config }),\n \n visualizeFit(seriesId: string, resultIndex = 0): void {\n const chart = ctx?.chart;\n if (!chart) return;\n \n const results = regressionResults.get(seriesId);\n if (!results || results.length === 0) return;\n \n const result = results[Math.min(resultIndex, results.length - 1)];\n const series = chart.getSeries(seriesId);\n if (!series) return;\n \n const data = series.getData();\n if (!data) return;\n \n // Remove existing fit visualization\n this.hideVisualization(seriesId);\n \n // Add fitted curve\n const fitSeriesId = `${seriesId}_fit_${result.method}`;\n const fittedValues = api.predict(seriesId, data.x, resultIndex);\n \n chart.addSeries({\n id: fitSeriesId,\n type: 'line',\n data: {\n x: new Float32Array(Array.from(data.x)),\n y: new Float32Array(fittedValues)\n },\n style: {\n color: '#ff6b6b',\n width: 2,\n opacity: 0.8,\n lineDash: [5, 5]\n }\n });\n \n // Add equation annotation\n const equation = formatEquation(result);\n const annotationId = `${seriesId}_equation_${result.method}`;\n \n chart.addAnnotation({\n id: annotationId,\n type: 'text',\n text: `${result.method.toUpperCase()}: ${equation}\\\\nR² = ${result.statistics.rSquared.toFixed(3)}`,\n x: data.x[0],\n y: Math.max(...Array.from(fittedValues)),\n style: {\n color: '#ff6b6b',\n fontSize: 12,\n backgroundColor: 'rgba(255, 255, 255, 0.9)'\n }\n } as any);\n },\n \n hideVisualization(seriesId: string): void {\n const chart = ctx?.chart;\n if (!chart) return;\n \n // List all possible regression methods to ensure cleanup\n const allMethods: RegressionMethod[] = [\n 'linear', 'polynomial', 'exponential', 'gaussian', \n 'logarithmic', 'power', 'lorentzian', 'sigmoid', 'custom'\n ];\n \n for (const method of allMethods) {\n // Remove fit series\n const fitSeriesId = `${seriesId}_fit_${method}`;\n if (chart.getSeries(fitSeriesId)) {\n chart.removeSeries(fitSeriesId);\n }\n \n // Remove equation annotation\n const annotationId = `${seriesId}_equation_${method}`;\n if (chart.getAnnotation(annotationId)) {\n chart.removeAnnotation(annotationId);\n }\n }\n },\n \n exportResults(seriesId: string, format = 'json'): string {\n const results = regressionResults.get(seriesId) || [];\n \n switch (format) {\n case 'json':\n return JSON.stringify(results, null, 2);\n case 'csv':\n let csv = 'Method,R²,RMSE,Parameters,ProcessingTime\\n';\n for (const result of results) {\n csv += `${result.method},${result.statistics.rSquared},${result.statistics.rmse},\"${result.parameters.parameters.join(', ')}\",${result.processingTime}\\n`;\n }\n return csv;\n case 'matlab':\n let matlab = `% Regression results for ${seriesId}\\n`;\n for (let i = 0; i < results.length; i++) {\n const result = results[i];\n matlab += `result${i + 1}.method = '${result.method}';\\n`;\n matlab += `result${i + 1}.rSquared = ${result.statistics.rSquared};\\n`;\n matlab += `result${i + 1}.parameters = [${result.parameters.parameters.join(', ')}];\\n`;\n }\n return matlab;\n default:\n return JSON.stringify(results, null, 2);\n }\n }\n };\n \n // ============================================\n // Helper Functions\n // ============================================\n \n function calculateMean(data: number[]): number {\n return data.reduce((sum, val) => sum + val, 0) / data.length;\n }\n \n function calculateRSquared(observed: number[], fitted: number[]): number {\n const meanObserved = calculateMean(observed);\n let ssRes = 0;\n let ssTot = 0;\n \n for (let i = 0; i < observed.length; i++) {\n ssRes += Math.pow(observed[i] - fitted[i], 2);\n ssTot += Math.pow(observed[i] - meanObserved, 2);\n }\n \n return 1 - (ssRes / ssTot);\n }\n \n function calculateAdjustedRSquared(rSquared: number, n: number, k: number): number {\n return 1 - ((1 - rSquared) * (n - 1)) / (n - k - 1);\n }\n \n function calculateRMSE(observed: number[], fitted: number[]): number {\n let sumSquaredErrors = 0;\n for (let i = 0; i < observed.length; i++) {\n sumSquaredErrors += Math.pow(observed[i] - fitted[i], 2);\n }\n return Math.sqrt(sumSquaredErrors / observed.length);\n }\n \n function formatEquation(result: RegressionResult): string {\n const params = result.parameters.parameters;\n \n switch (result.method) {\n case 'linear':\n return params.length === 1 ? `y = ${params[0].toFixed(3)}x` : `y = ${params[0].toFixed(3)}x + ${params[1].toFixed(3)}`;\n case 'polynomial':\n let equation = 'y = ';\n for (let i = params.length - 1; i >= 0; i--) {\n if (params[i] !== 0) {\n if (i === 0) {\n equation += params[i].toFixed(3);\n } else if (i === 1) {\n equation += `${params[i].toFixed(3)}x + `;\n } else {\n equation += `${params[i].toFixed(3)}x^${i} + `;\n }\n }\n }\n return equation.replace(' + ', '').trim();\n case 'exponential':\n return `y = ${params[0].toFixed(3)} * exp(${params[1].toFixed(3)}x) + ${params[2]?.toFixed(3) || 0}`;\n case 'gaussian':\n return `y = ${params[0].toFixed(3)} * exp(-((x - ${params[1].toFixed(3)})² / (2 * ${params[2].toFixed(3)}²))) + ${params[3]?.toFixed(3) || 0}`;\n default:\n return 'y = f(x, parameters)';\n }\n }\n \n // ============================================\n // Event Handlers\n // ============================================\n \n function handleDataUpdate(context: PluginContext, event: DataUpdateEvent): void {\n const { seriesId } = event;\n \n if (realtimeSeries.has(seriesId)) {\n // Debounce fitting\n const timer = debounceTimers.get(seriesId);\n if (timer) {\n clearTimeout(timer);\n }\n \n const newTimer = setTimeout(() => {\n const chart = context.chart;\n if (chart) {\n const series = chart.getSeries(seriesId);\n if (series) {\n const data = series.getData();\n if (data && data.x.length > 0) {\n fit(seriesId, {\n x: data.x,\n y: data.y\n });\n \n // Update visualization\n api.visualizeFit(seriesId);\n }\n }\n }\n }, 500); // 500ms debounce\n \n debounceTimers.set(seriesId, newTimer);\n }\n }\n \n // ============================================\n // Plugin Definition\n // ============================================\n \n return {\n manifest: manifestRegression,\n \n onInit(context: PluginContext) {\n ctx = context;\n ctx.log.info('Regression plugin initialized');\n },\n \n onConfigChange(_context: PluginContext, _newConfig: PluginRegressionConfig) {\n // Handle config changes\n },\n \n onBeforeRender(_context: PluginContext, _event: BeforeRenderEvent) {\n // Handle pre-render tasks if needed\n },\n \n onDataUpdate: handleDataUpdate,\n \n onDestroy(_context: PluginContext) {\n // Clean up timers\n for (const timer of debounceTimers.values()) {\n clearTimeout(timer);\n }\n debounceTimers.clear();\n \n // Clear results\n regressionResults.clear();\n realtimeSeries.clear();\n },\n \n api\n };\n}\n\nexport default PluginRegression;\n\n// Re-export types for convenience\nexport type {\n RegressionMethod,\n RegressionData,\n RegressionParameters,\n RegressionStatistics,\n RegressionResult,\n LinearRegressionConfig,\n PolynomialRegressionConfig,\n ExponentialRegressionConfig,\n LogarithmicRegressionConfig,\n PowerRegressionConfig,\n GaussianRegressionConfig,\n LorentzianRegressionConfig,\n SigmoidRegressionConfig,\n CustomRegressionConfig,\n PluginRegressionConfig,\n RegressionCompletedEvent,\n RegressionFailedEvent,\n ModelSelectedEvent,\n RegressionAPI\n} from './types';"],"names":["toArray","data","toFloat32Array","calculateMean","sum","val","calculateVariance","mean","calculateRSquared","observed","fitted","meanObserved","ssRes","ssTot","i","calculateAdjustedRSquared","rSquared","n","k","calculateRMSE","sumSquaredErrors","linearRegression","config","startTime","x","y","weights","forceOrigin","numerator","denominator","weight","slope","fittedValues","xi","residuals","yi","adjustedRSquared","rmse","r","sumX","sumY","sumXY","sumX2","sumY2","sumWeights","meanX","meanY","intercept","polynomialRegression","degree","m","X","row","j","parameters","solveLeastSquares","value","exponentialRegression","_config","offset","transformedY","adjusted","linearResult","rate","logAmplitude","amplitude","gaussianRegression","std","learningRate","maxIterations","tolerance","iter","gradAmplitude","gradMean","gradStd","gradOffset","totalError","exponent","predicted","error","expTerm","regularization","XtX","Xty","solveLinearSystem","manifestRegression","DEFAULT_CONFIG","PluginRegression","userConfig","ctx","regressionResults","realtimeSeries","debounceTimers","fit","seriesId","method","methodConfig","api","result","logX","logY","logXPow","fitAndCompare","methods","configs","results","criteria","b","autoFit","candidateMethods","bestResult","xValues","resultIndex","params","predictions","_level","margin","lower","p","upper","predArray","chart","series","timer","methodsUsed","totalFittings","allMethodsUsed","allRSquared","allProcessingTimes","t","newConfig","fitSeriesId","equation","formatEquation","annotationId","allMethods","format","csv","matlab","_a","_b","handleDataUpdate","context","event","newTimer","_context","_newConfig","_event"],"mappings":";AAwBA,SAASA,EAAQC,GAAwD;AACvE,SAAO,MAAM,KAAKA,CAAI;AACxB;AAEA,SAASC,EAAeD,GAA8B;AACpD,SAAO,IAAI,aAAaA,CAAI;AAC9B;AAEA,SAASE,EAAcF,GAAwB;AAC7C,SAAOA,EAAK,OAAO,CAACG,GAAKC,MAAQD,IAAMC,GAAK,CAAC,IAAIJ,EAAK;AACxD;AAEA,SAASK,EAAkBL,GAAwB;AACjD,QAAMM,IAAOJ,EAAcF,CAAI;AAC/B,SAAOA,EAAK,OAAO,CAACG,GAAKC,MAAQD,IAAM,KAAK,IAAIC,IAAME,GAAM,CAAC,GAAG,CAAC,IAAIN,EAAK;AAC5E;AAEA,SAASO,EAAkBC,GAAoBC,GAA0B;AACvE,QAAMC,IAAeR,EAAcM,CAAQ;AAC3C,MAAIG,IAAQ,GACRC,IAAQ;AAEZ,WAASC,IAAI,GAAGA,IAAIL,EAAS,QAAQK;AACnC,IAAAF,KAAS,KAAK,IAAIH,EAASK,CAAC,IAAIJ,EAAOI,CAAC,GAAG,CAAC,GAC5CD,KAAS,KAAK,IAAIJ,EAASK,CAAC,IAAIH,GAAc,CAAC;AAGjD,SAAO,IAAKC,IAAQC;AACtB;AAEA,SAASE,EAA0BC,GAAkBC,GAAWC,GAAmB;AACjF,SAAO,KAAM,IAAIF,MAAaC,IAAI,MAAOA,IAAIC,IAAI;AACnD;AAEA,SAASC,EAAcV,GAAoBC,GAA0B;AACnE,MAAIU,IAAmB;AACvB,WAASN,IAAI,GAAGA,IAAIL,EAAS,QAAQK;AACnC,IAAAM,KAAoB,KAAK,IAAIX,EAASK,CAAC,IAAIJ,EAAOI,CAAC,GAAG,CAAC;AAEzD,SAAO,KAAK,KAAKM,IAAmBX,EAAS,MAAM;AACrD;AAiCO,SAASY,EACdpB,GACAqB,IAAiC,IACf;AAClB,QAAMC,IAAY,YAAY,IAAA,GAExBC,IAAIxB,EAAQC,EAAK,CAAC,GAClBwB,IAAIzB,EAAQC,EAAK,CAAC,GAClByB,IAAUzB,EAAK,UAAUD,EAAQC,EAAK,OAAO,IAAI,MACjD,EAAE,aAAA0B,IAAc,GAAA,IAAUL,GAE1BL,IAAIO,EAAE;AAEZ,MAAIG,GAAa;AAEf,QAAIC,IAAY,GACZC,IAAc;AAElB,aAASf,IAAI,GAAGA,IAAIG,GAAGH,KAAK;AAC1B,YAAMgB,IAASJ,IAAUA,EAAQZ,CAAC,IAAI;AACtC,MAAAc,KAAaE,IAASN,EAAEV,CAAC,IAAIW,EAAEX,CAAC,GAChCe,KAAeC,IAASN,EAAEV,CAAC,IAAIU,EAAEV,CAAC;AAAA,IACpC;AAEA,UAAMiB,IAAQH,IAAYC,GACpBG,IAAeR,EAAE,IAAI,CAAAS,MAAMF,IAAQE,CAAE,GACrCC,IAAYT,EAAE,IAAI,CAACU,GAAIrB,MAAMqB,IAAKH,EAAalB,CAAC,CAAC,GAEjDE,IAAWR,EAAkBiB,GAAGO,CAAY,GAC5CI,IAAmBrB,EAA0BC,GAAUC,GAAG,CAAC,GAC3DoB,IAAOlB,EAAcM,GAAGO,CAAY;AAE1C,WAAO;AAAA,MACL,QAAQ;AAAA,MACR,YAAY;AAAA,QACV,YAAY,CAACD,CAAK;AAAA,QAClB,eAAe,CAAC,KAAK,KAAKF,KAAeZ,IAAIW,EAAU,CAAC;AAAA;AAAA,QACxD,mBAAmB,CAAC,CAAC,CAAC,CAAC;AAAA,MAAA;AAAA,MAEzB,YAAY;AAAA,QACV,UAAAZ;AAAA,QACA,kBAAAoB;AAAA,QACA,MAAAC;AAAA,QACA,KAAKH,EAAU,OAAO,CAAC9B,GAAKkC,MAAMlC,IAAMkC,IAAIA,GAAG,CAAC;AAAA,QAChD,KAAKb,EAAE,OAAO,CAACrB,GAAK+B,MAAO/B,IAAM,KAAK,IAAI+B,IAAKhC,EAAcsB,CAAC,GAAG,CAAC,GAAG,CAAC;AAAA,QACtE,GAAAR;AAAA,QACA,GAAG;AAAA,MAAA;AAAA,MAEL,cAAcf,EAAe8B,CAAY;AAAA,MACzC,WAAW9B,EAAegC,CAAS;AAAA,MACnC,eAAelB,IAAW,MAAM,cAAcA,IAAW,MAAM,SAASA,IAAW,MAAM,SAAS;AAAA,MAClG,WAAW;AAAA,MACX,YAAY;AAAA,MACZ,gBAAgB,YAAY,QAAQO;AAAA,IAAA;AAAA,EAExC,OAAO;AAEL,QAAIgB,IAAO,GAAGC,IAAO,GAAGC,IAAQ,GAAGC,IAAQ,GAAGC,IAAQ,GAClDC,IAAa;AAEjB,aAAS9B,IAAI,GAAGA,IAAIG,GAAGH,KAAK;AAC1B,YAAMgB,IAASJ,IAAUA,EAAQZ,CAAC,IAAI;AACtC,MAAAyB,KAAQT,IAASN,EAAEV,CAAC,GACpB0B,KAAQV,IAASL,EAAEX,CAAC,GACpB2B,KAASX,IAASN,EAAEV,CAAC,IAAIW,EAAEX,CAAC,GAC5B4B,KAASZ,IAASN,EAAEV,CAAC,IAAIU,EAAEV,CAAC,GAC5B6B,KAASb,IAASL,EAAEX,CAAC,IAAIW,EAAEX,CAAC,GAC5B8B,KAAcd;AAAA,IAChB;AAEA,UAAMe,IAAQN,IAAOK,GACfE,IAAQN,IAAOI,GAEfb,KAASU,IAAQG,IAAaC,IAAQC,MAAUJ,IAAQE,IAAaC,IAAQA,IAC7EE,IAAYD,IAAQf,IAAQc,GAE5Bb,IAAeR,EAAE,IAAI,CAAAS,MAAMF,IAAQE,IAAKc,CAAS,GACjDb,IAAYT,EAAE,IAAI,CAACU,GAAIrB,MAAMqB,IAAKH,EAAalB,CAAC,CAAC,GAEjDE,IAAWR,EAAkBiB,GAAGO,CAAY,GAC5CI,IAAmBrB,EAA0BC,GAAUC,GAAG,CAAC,GAC3DoB,IAAOlB,EAAcM,GAAGO,CAAY;AAE1C,WAAO;AAAA,MACL,QAAQ;AAAA,MACR,YAAY;AAAA,QACV,YAAY,CAACD,GAAOgB,CAAS;AAAA,QAC7B,eAAe,CAAC,KAAK,GAAG;AAAA;AAAA,QACxB,mBAAmB,CAAC,CAAC,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC;AAAA;AAAA,MAAA;AAAA,MAE1C,YAAY;AAAA,QACV,UAAA/B;AAAA,QACA,kBAAAoB;AAAA,QACA,MAAAC;AAAA,QACA,KAAKH,EAAU,OAAO,CAAC9B,GAAKkC,MAAMlC,IAAMkC,IAAIA,GAAG,CAAC;AAAA,QAChD,KAAKb,EAAE,OAAO,CAACrB,GAAK+B,MAAO/B,IAAM,KAAK,IAAI+B,IAAKW,GAAO,CAAC,GAAG,CAAC;AAAA,QAC3D,GAAA7B;AAAA,QACA,GAAG;AAAA,MAAA;AAAA,MAEL,cAAcf,EAAe8B,CAAY;AAAA,MACzC,WAAW9B,EAAegC,CAAS;AAAA,MACnC,eAAelB,IAAW,MAAM,cAAcA,IAAW,MAAM,SAASA,IAAW,MAAM,SAAS;AAAA,MAClG,WAAW;AAAA,MACX,YAAY;AAAA,MACZ,gBAAgB,YAAY,QAAQO;AAAA,IAAA;AAAA,EAExC;AACF;AAMO,SAASyB,EACd/C,GACAqB,GACkB;AAClB,QAAMC,IAAY,YAAY,IAAA,GAExBC,IAAIxB,EAAQC,EAAK,CAAC,GAClBwB,IAAIzB,EAAQC,EAAK,CAAC,GAClB,EAAE,QAAAgD,MAAW3B,GAEbL,IAAIO,EAAE,QACN0B,IAAID,IAAS,GAGbE,IAAgB,CAAA;AACtB,WAASrC,IAAI,GAAGA,IAAIG,GAAGH,KAAK;AAC1B,UAAMsC,IAAgB,CAAA;AACtB,aAASC,IAAI,GAAGA,KAAKJ,GAAQI;AAC3B,MAAAD,EAAI,KAAK,KAAK,IAAI5B,EAAEV,CAAC,GAAGuC,CAAC,CAAC;AAE5B,IAAAF,EAAE,KAAKC,CAAG;AAAA,EACZ;AAIA,QAAME,IAAaC,EAAkBJ,GAAG1B,GAAG,CAAC,GAEtCO,IAAeR,EAAE,IAAI,CAAAS,MAAM;AAC/B,QAAIuB,IAAQ;AACZ,aAASH,IAAI,GAAGA,KAAKJ,GAAQI;AAC3B,MAAAG,KAASF,EAAWD,CAAC,IAAI,KAAK,IAAIpB,GAAIoB,CAAC;AAEzC,WAAOG;AAAA,EACT,CAAC,GAEKtB,IAAYT,EAAE,IAAI,CAACU,GAAIrB,MAAMqB,IAAKH,EAAalB,CAAC,CAAC,GAEjDE,IAAWR,EAAkBiB,GAAGO,CAAY,GAC5CI,IAAmBrB,EAA0BC,GAAUC,GAAGiC,CAAC,GAC3Db,IAAOlB,EAAcM,GAAGO,CAAY;AAE1C,SAAO;AAAA,IACL,QAAQ;AAAA,IACR,YAAY;AAAA,MACV,YAAAsB;AAAA,MACA,eAAe,IAAI,MAAMJ,CAAC,EAAE,KAAK,GAAG;AAAA;AAAA,MACpC,mBAAmB,MAAMA,CAAC,EAAE,KAAK,CAAC,EAAE,IAAI,MAAM,MAAMA,CAAC,EAAE,KAAK,CAAC,CAAC;AAAA;AAAA,IAAA;AAAA,IAEhE,YAAY;AAAA,MACV,UAAAlC;AAAA,MACA,kBAAAoB;AAAA,MACA,MAAAC;AAAA,MACA,KAAKH,EAAU,OAAO,CAAC9B,GAAKkC,MAAMlC,IAAMkC,IAAIA,GAAG,CAAC;AAAA,MAChD,KAAKb,EAAE,OAAO,CAACrB,GAAK+B,MAAO/B,IAAM,KAAK,IAAI+B,IAAKhC,EAAcsB,CAAC,GAAG,CAAC,GAAG,CAAC;AAAA,MACtE,GAAAR;AAAA,MACA,GAAGiC;AAAA,IAAA;AAAA,IAEL,cAAchD,EAAe8B,CAAY;AAAA,IACzC,WAAW9B,EAAegC,CAAS;AAAA,IACnC,eAAelB,IAAW,MAAM,cAAcA,IAAW,MAAM,SAASA,IAAW,MAAM,SAAS;AAAA,IAClG,WAAW;AAAA,IACX,YAAY;AAAA;AAAA,IACZ,gBAAgB,YAAY,QAAQO;AAAA,EAAA;AAExC;AAMO,SAASkC,EACdxD,GACAyD,IAAuC,IACrB;AAClB,QAAMnC,IAAY,YAAY,IAAA,GAExBC,IAAIxB,EAAQC,EAAK,CAAC,GAClBwB,IAAIzB,EAAQC,EAAK,CAAC;AAIxB,MAAI0D,IAAS,KAAK,IAAI,GAAGlC,CAAC,IAAI;AAE9B,QAAMmC,IAAenC,EAAE,IAAI,CAAAU,MAAM;AAC/B,UAAM0B,IAAW1B,IAAKwB;AACtB,WAAOE,IAAW,IAAI,KAAK,IAAIA,CAAQ,IAAI;AAAA,EAC7C,CAAC,GAGKC,IAAezC;AAAA,IACnB,EAAE,GAAAG,GAAG,GAAGoC,EAAA;AAAA,IACR,EAAE,aAAa,GAAA;AAAA,EAAM,GAGjB,CAACG,GAAMC,CAAY,IAAIF,EAAa,WAAW,YAC/CG,IAAY,KAAK,IAAID,CAAY,GAEjChC,IAAeR,EAAE,IAAI,CAAAS,MAAMgC,IAAY,KAAK,IAAIF,IAAO9B,CAAE,IAAI0B,CAAM,GACnEzB,IAAYT,EAAE,IAAI,CAACU,GAAIrB,MAAMqB,IAAKH,EAAalB,CAAC,CAAC,GAEjDE,IAAWR,EAAkBiB,GAAGO,CAAY,GAC5CI,IAAmBrB,EAA0BC,GAAUQ,EAAE,QAAQ,CAAC,GAClEa,IAAOlB,EAAcM,GAAGO,CAAY;AAE1C,SAAO;AAAA,IACL,QAAQ;AAAA,IACR,YAAY;AAAA,MACV,YAAY,CAACiC,GAAWF,GAAMJ,CAAM;AAAA,MACpC,eAAe,CAAC,KAAK,MAAM,GAAG;AAAA;AAAA,MAC9B,mBAAmB,CAAC,CAAC,GAAG,KAAK,GAAG,GAAG,CAAC,KAAK,GAAG,GAAG,GAAG,CAAC,KAAK,KAAK,CAAC,CAAC;AAAA;AAAA,IAAA;AAAA,IAEjE,YAAY;AAAA,MACV,UAAA3C;AAAA,MACA,kBAAAoB;AAAA,MACA,MAAAC;AAAA,MACA,KAAKH,EAAU,OAAO,CAAC9B,GAAKkC,MAAMlC,IAAMkC,IAAIA,GAAG,CAAC;AAAA,MAChD,KAAKb,EAAE,OAAO,CAACrB,GAAK+B,MAAO/B,IAAM,KAAK,IAAI+B,IAAKhC,EAAcsB,CAAC,GAAG,CAAC,GAAG,CAAC;AAAA,MACtE,GAAGD,EAAE;AAAA,MACL,GAAG;AAAA,IAAA;AAAA,IAEL,cAActB,EAAe8B,CAAY;AAAA,IACzC,WAAW9B,EAAegC,CAAS;AAAA,IACnC,eAAelB,IAAW,MAAM,cAAcA,IAAW,MAAM,SAASA,IAAW,MAAM,SAAS;AAAA,IAClG,WAAW;AAAA,IACX,YAAY;AAAA;AAAA,IACZ,gBAAgB,YAAY,QAAQO;AAAA,EAAA;AAExC;AAMO,SAAS2C,EACdjE,GACAyD,IAAoC,IAClB;AAClB,QAAMnC,IAAY,YAAY,IAAA,GAExBC,IAAIxB,EAAQC,EAAK,CAAC,GAClBwB,IAAIzB,EAAQC,EAAK,CAAC;AAGxB,MAAIgE,IAAY,KAAK,IAAI,GAAGxC,CAAC,GACzBlB,IAAOiB,EAAE,OAAO,CAACpB,GAAK6B,MAAO7B,IAAM6B,GAAI,CAAC,IAAIT,EAAE,QAC9C2C,IAAM,KAAK,KAAK7D,EAAkBkB,CAAC,CAAC,GACpCmC,IAAS,KAAK,IAAI,GAAGlC,CAAC;AAE1B,QAAM2C,IAAe,MACfC,IAAgB,KAChBC,IAAY;AAElB,WAASC,IAAO,GAAGA,IAAOF,GAAeE,KAAQ;AAC/C,QAAIC,IAAgB,GAAGC,IAAW,GAAGC,IAAU,GAAGC,IAAa,GAC3DC,IAAa;AAEjB,aAAS9D,IAAI,GAAGA,IAAIU,EAAE,QAAQV,KAAK;AACjC,YAAMmB,IAAKT,EAAEV,CAAC,GACRqB,IAAKV,EAAEX,CAAC,GAGR+D,IAAW,CAAC,KAAK,IAAI5C,IAAK1B,GAAM,CAAC,KAAK,IAAI4D,IAAMA,IAChDW,IAAYb,IAAY,KAAK,IAAIY,CAAQ,IAAIlB,GAC7CoB,IAAQ5C,IAAK2C;AACnB,MAAAF,KAAcG,IAAQA;AAGtB,YAAMC,IAAU,KAAK,IAAIH,CAAQ;AACjC,MAAAL,KAAiBO,IAAQC,GACzBP,KAAYM,IAAQd,IAAYe,KAAW/C,IAAK1B,MAAS4D,IAAMA,IAC/DO,KAAWK,IAAQd,IAAYe,IAAU,KAAK,IAAI/C,IAAK1B,GAAM,CAAC,IAAK,KAAK,IAAI4D,GAAK,CAAC,GAClFQ,KAAcI;AAAA,IAChB;AAWA,QARAd,KAAaG,IAAeI,GAC5BjE,KAAQ6D,IAAeK,GACvBN,KAAOC,IAAeM,GACtBf,KAAUS,IAAeO,GAGzBR,IAAM,KAAK,IAAIA,GAAK,IAAI,GAEpBS,IAAaN,EAAW;AAAA,EAC9B;AAEA,QAAMtC,IAAeR,EAAE,IAAI,CAAAS,MAAM;AAC/B,UAAM4C,IAAW,CAAC,KAAK,IAAI5C,IAAK1B,GAAM,CAAC,KAAK,IAAI4D,IAAMA;AACtD,WAAOF,IAAY,KAAK,IAAIY,CAAQ,IAAIlB;AAAA,EAC1C,CAAC,GAEKzB,IAAYT,EAAE,IAAI,CAACU,GAAIrB,MAAMqB,IAAKH,EAAalB,CAAC,CAAC,GAEjDE,IAAWR,EAAkBiB,GAAGO,CAAY,GAC5CI,IAAmBrB,EAA0BC,GAAUQ,EAAE,QAAQ,CAAC,GAClEa,IAAOlB,EAAcM,GAAGO,CAAY;AAE1C,SAAO;AAAA,IACL,QAAQ;AAAA,IACR,YAAY;AAAA,MACV,YAAY,CAACiC,GAAW1D,GAAM4D,GAAKR,CAAM;AAAA,MACzC,eAAe,CAAC,KAAK,KAAK,MAAM,GAAG;AAAA;AAAA,MACnC,mBAAmB,MAAM,CAAC,EAAE,KAAK,CAAC,EAAE,IAAI,MAAM,MAAM,CAAC,EAAE,KAAK,CAAC,CAAC;AAAA;AAAA,IAAA;AAAA,IAEhE,YAAY;AAAA,MACV,UAAA3C;AAAA,MACA,kBAAAoB;AAAA,MACA,MAAAC;AAAA,MACA,KAAKH,EAAU,OAAO,CAAC9B,GAAKkC,MAAMlC,IAAMkC,IAAIA,GAAG,CAAC;AAAA,MAChD,KAAKb,EAAE,OAAO,CAACrB,GAAK+B,MAAO/B,IAAM,KAAK,IAAI+B,IAAKhC,EAAcsB,CAAC,GAAG,CAAC,GAAG,CAAC;AAAA,MACtE,GAAGD,EAAE;AAAA,MACL,GAAG;AAAA,IAAA;AAAA,IAEL,cAActB,EAAe8B,CAAY;AAAA,IACzC,WAAW9B,EAAegC,CAAS;AAAA,IACnC,eAAelB,IAAW,MAAM,cAAcA,IAAW,MAAM,SAASA,IAAW,MAAM,SAAS;AAAA,IAClG,WAAW;AAAA,IACX,YAAYqD;AAAA,IACZ,gBAAgB,YAAY,QAAQ9C;AAAA,EAAA;AAExC;AAMA,SAASgC,EAAkBJ,GAAe1B,GAAawD,IAAyB,GAAa;AAC3F,QAAMhE,IAAIkC,EAAE,QACND,IAAIC,EAAE,CAAC,EAAE,QAGT+B,IAAkB,MAAMhC,CAAC,EAAE,KAAK,CAAC,EAAE,IAAI,MAAM,MAAMA,CAAC,EAAE,KAAK,CAAC,CAAC,GAC7DiC,IAAgB,MAAMjC,CAAC,EAAE,KAAK,CAAC;AAErC,WAASpC,IAAI,GAAGA,IAAIG,GAAGH;AACrB,aAASuC,IAAI,GAAGA,IAAIH,GAAGG,KAAK;AAC1B,eAASnC,IAAI,GAAGA,IAAIgC,GAAGhC;AACrB,QAAAgE,EAAI7B,CAAC,EAAEnC,CAAC,KAAKiC,EAAErC,CAAC,EAAEuC,CAAC,IAAIF,EAAErC,CAAC,EAAEI,CAAC;AAE/B,MAAAiE,EAAI9B,CAAC,KAAKF,EAAErC,CAAC,EAAEuC,CAAC,IAAI5B,EAAEX,CAAC;AAAA,IACzB;AAIF,MAAImE,IAAiB;AACnB,aAASnE,IAAI,GAAGA,IAAIoC,GAAGpC;AACrB,MAAAoE,EAAIpE,CAAC,EAAEA,CAAC,KAAKmE;AAKjB,SAAOG,EAAkBF,GAAKC,CAAG;AACnC;ACtYA,MAAME,IAAqC;AAAA,EACzC,MAAM;AAAA,EACN,SAAS;AAAA,EACT,aAAa;AAAA,EACb,QAAQ;AAAA,EACR,UAAU,CAAC,cAAc,iBAAiB,qBAAqB;AACjE,GAMMC,IAAmD;AAAA,EACvD,eAAe;AAAA,EACf,qBAAqB;AAAA,EACrB,wBAAwB;AAAA,EACxB,0BAA0B;AAAA,EAC1B,wBAAwB;AAAA,EACxB,cAAc;AAAA,EACd,eAAe;AAAA,EACf,sBAAsB;AAAA,EACtB,wBAAwB;AAAA,EACxB,0BAA0B;AAAA,EAC1B,mBAAmB;AACrB;AAMO,SAASC,EACdC,IAA8C,IACT;AACrC,QAAMlE,IAAS,EAAE,GAAGgE,GAAgB,GAAGE,EAAA;AACvC,MAAIC,IAA4B;AAGhC,QAAMC,wBAAwB,IAAA,GACxBC,wBAAqB,IAAA,GACrBC,wBAAqB,IAAA;AAM3B,iBAAeC,EACbC,GACA7F,GACA8F,IAA2BzE,EAAO,eAClC0E,IAAoB,IACO;AAC3B,QAAI;AAEF,MAAAC,EAAI,kBAAkBH,CAAQ;AAE9B,UAAII;AAEJ,cAAQH,GAAA;AAAA,QACN,KAAK;AACH,UAAAG,IAAS7E,EAAiBpB,GAAM+F,CAAsC;AACtE;AAAA,QACF,KAAK;AACH,UAAAE,IAASlD,EAAqB/C,GAAM+F,CAA0C;AAC9E;AAAA,QACF,KAAK;AACH,UAAAE,IAASzC,EAAsBxD,GAAM+F,CAA2C;AAChF;AAAA,QACF,KAAK;AACH,UAAAE,IAAShC,EAAmBjE,GAAM+F,CAAwC;AAC1E;AAAA,QACF,KAAK;AAEH,gBAAMG,IAAO,MAAM,KAAKlG,EAAK,CAAC,EAAE,IAAI,CAAAgC,MAAM,KAAK,IAAIA,CAAE,CAAC;AACtD,UAAAiE,IAAS7E,EAAiB,EAAE,GAAGpB,GAAM,GAAG,IAAI,aAAakG,CAAI,EAAA,GAAKH,CAAsC,GACxGE,EAAO,SAAS;AAChB;AAAA,QACF,KAAK;AAEH,gBAAME,IAAO,MAAM,KAAKnG,EAAK,CAAC,EAAE,IAAI,CAAAkC,MAAM,KAAK,IAAIA,CAAE,CAAC,GAChDkE,IAAU,MAAM,KAAKpG,EAAK,CAAC,EAAE,IAAI,CAAAgC,MAAM,KAAK,IAAIA,CAAE,CAAC;AACzD,UAAAiE,IAAS7E,EAAiB,EAAE,GAAGpB,GAAM,GAAG,IAAI,aAAaoG,CAAO,GAAG,GAAG,IAAI,aAAaD,CAAI,EAAA,GAAKJ,CAAsC,GACtIE,EAAO,SAAS;AAChB;AAAA,QACF,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAEH,UAAAA,IAAS7E,EAAiBpB,GAAM+F,CAAsC;AACtE;AAAA,QACF;AACE,gBAAM,IAAI,MAAM,kCAAkCD,CAAM,EAAE;AAAA,MAAA;AAI9D,aAAAL,EAAkB,IAAII,GAAU,CAACI,CAAM,CAAC,GAGpCT,KACFA,EAAI,OAAO,KAAK,wBAAwB;AAAA,QACtC,QAAAS;AAAA,QACA,UAAAJ;AAAA,QACA,QAAAC;AAAA,QACA,WAAW,KAAK,IAAA;AAAA,MAAI,CACO,GAG/BN,KAAA,QAAAA,EAAK,IAAI,KAAK,4BAA4BK,CAAQ,KAAKC,CAAM,UAAUG,EAAO,WAAW,SAAS,QAAQ,CAAC,CAAC,MAErGA;AAAA,IACT,SAASnB,GAAO;AACd,YAAIU,KACFA,EAAI,OAAO,KAAK,qBAAqB;AAAA,QACnC,OAAAV;AAAA,QACA,UAAAe;AAAA,QACA,QAAAC;AAAA,QACA,QAAQ,mBAAmBhB,CAAK;AAAA,QAChC,WAAW,KAAK,IAAA;AAAA,MAAI,CACI,GAGtBA;AAAA,IACR;AAAA,EACF;AAEA,iBAAeuB,EACbR,GACA7F,GACAsG,GACAC,GAC6B;AAC7B,UAAMC,IAA8B,CAAA;AAEpC,aAAS3F,IAAI,GAAGA,IAAIyF,EAAQ,QAAQzF,KAAK;AACvC,YAAMiF,IAASQ,EAAQzF,CAAC,GAClBkF,IAAeQ,IAAUA,EAAQ1F,CAAC,IAAI,CAAA;AAE5C,UAAI;AACF,cAAMoF,IAAS,MAAML,EAAIC,GAAU7F,GAAM8F,GAAQC,CAAY;AAC7D,QAAAS,EAAQ,KAAKP,CAAM;AAAA,MACrB,SAASnB,GAAO;AACd,QAAAU,KAAA,QAAAA,EAAK,IAAI,KAAK,yBAAyBM,CAAM,KAAKhB,CAAK;AAAA,MACzD;AAAA,IACF;AAGA,UAAM2B,IAAWpF,EAAO;AACxB,WAAAmF,EAAQ,KAAK,CAAC,GAAGE,MAAM;AACrB,cAAQD,GAAA;AAAA,QACN,KAAK;AACH,kBAAQ,EAAE,WAAW,OAAO,MAAMC,EAAE,WAAW,OAAO;AAAA,QACxD,KAAK;AACH,kBAAQ,EAAE,WAAW,OAAO,MAAMA,EAAE,WAAW,OAAO;AAAA,QACxD,KAAK;AACH,iBAAOA,EAAE,WAAW,mBAAmB,EAAE,WAAW;AAAA,QACtD;AACE,iBAAOA,EAAE,WAAW,WAAW,EAAE,WAAW;AAAA,MAAA;AAAA,IAElD,CAAC,GAEMF;AAAA,EACT;AAEA,iBAAeG,EACbd,GACA7F,GACA4G,IAAuC,CAAC,UAAU,cAAc,eAAe,UAAU,GAC9D;AAC3B,UAAML,IAAUK,EAAiB,IAAI,CAAAd,MAAU;AAC7C,cAAQA,GAAA;AAAA,QACN,KAAK;AACH,iBAAO,EAAE,QAAQ,EAAA;AAAA,QACnB,KAAK;AACH,iBAAO,CAAA;AAAA,QACT,KAAK;AACH,iBAAO,CAAA;AAAA,QACT;AACE,iBAAO,CAAA;AAAA,MAAC;AAAA,IAEd,CAAC,GAEKU,IAAU,MAAMH,EAAcR,GAAU7F,GAAM4G,GAAkBL,CAAO;AAE7E,QAAIC,EAAQ,WAAW;AACrB,YAAM,IAAI,MAAM,iCAAiC;AAGnD,UAAMK,IAAaL,EAAQ,CAAC;AAG5B,WAAIhB,KACFA,EAAI,OAAO,KAAK,kBAAkB;AAAA,MAChC,gBAAgBqB,EAAW;AAAA,MAC3B,kBAAkBL;AAAA,MAClB,mBAAmBnF,EAAO;AAAA,MAC1B,UAAAwE;AAAA,MACA,WAAW,KAAK,IAAA;AAAA,IAAI,CACC,GAGzBL,KAAA,QAAAA,EAAK,IAAI,KAAK,qBAAqBqB,EAAW,MAAM,QAAQhB,CAAQ,UAAUgB,EAAW,WAAW,SAAS,QAAQ,CAAC,CAAC,MAEhHA;AAAA,EACT;AAMA,QAAMb,IAA+C;AAAA,IACnD,KAAAJ;AAAA,IAEA,eAAAS;AAAA,IAEA,SAAAM;AAAA,IAEA,WAAWd,GAAsC;AAC/C,aAAOJ,EAAkB,IAAII,CAAQ,KAAK,CAAA;AAAA,IAC5C;AAAA,IAEA,aAAaA,GAAwB;AACnC,MAAAJ,EAAkB,OAAOI,CAAQ,GACjCL,KAAA,QAAAA,EAAK,IAAI,KAAK,0CAA0CK,CAAQ;AAAA,IAClE;AAAA,IAEA,QACEA,GACAiB,GACAC,IAAc,GACA;AACd,YAAMP,IAAUf,EAAkB,IAAII,CAAQ;AAC9C,UAAI,CAACW,KAAWA,EAAQ,WAAW;AACjC,cAAM,IAAI,MAAM,2CAA2CX,CAAQ,EAAE;AAGvE,YAAMI,IAASO,EAAQ,KAAK,IAAIO,GAAaP,EAAQ,SAAS,CAAC,CAAC,GAC1DjF,IAAI,MAAM,KAAKuF,CAAO,GACtBE,IAASf,EAAO,WAAW,YAE3BgB,IAAc1F,EAAE,IAAI,CAAAS,MAAM;AAC9B,gBAAQiE,EAAO,QAAA;AAAA,UACb,KAAK;AACH,mBAAOe,EAAO,CAAC,IAAIhF,KAAMgF,EAAO,CAAC,KAAK;AAAA,UACxC,KAAK;AACH,gBAAIzD,IAAQ;AACZ,qBAAS,IAAI,GAAG,IAAIyD,EAAO,QAAQ;AACjC,cAAAzD,KAASyD,EAAO,CAAC,IAAI,KAAK,IAAIhF,GAAI,CAAC;AAErC,mBAAOuB;AAAA,UACT,KAAK;AACH,mBAAOyD,EAAO,CAAC,IAAI,KAAK,IAAIA,EAAO,CAAC,IAAIhF,CAAE,KAAKgF,EAAO,CAAC,KAAK;AAAA,UAC9D,KAAK;AACH,kBAAMpC,IAAW,CAAC,KAAK,IAAI5C,IAAKgF,EAAO,CAAC,GAAG,CAAC,KAAK,IAAIA,EAAO,CAAC,IAAIA,EAAO,CAAC;AACzE,mBAAOA,EAAO,CAAC,IAAI,KAAK,IAAIpC,CAAQ,KAAKoC,EAAO,CAAC,KAAK;AAAA,UACxD,KAAK;AACH,mBAAOA,EAAO,CAAC,IAAI,KAAK,IAAIhF,CAAE,KAAKgF,EAAO,CAAC,KAAK;AAAA,UAClD,KAAK;AACH,mBAAOA,EAAO,CAAC,IAAI,KAAK,IAAIhF,GAAIgF,EAAO,CAAC,CAAC;AAAA,UAC3C;AACE,mBAAO;AAAA,QAAA;AAAA,MAEb,CAAC;AAED,aAAO,IAAI,aAAaC,CAAW;AAAA,IACrC;AAAA,IAEA,uBACEpB,GACAiB,GACAI,IAAS7F,EAAO,wBAChB0F,IAAc,GACgC;AAE9C,YAAME,IAAc,KAAK,QAAQpB,GAAUiB,GAASC,CAAW,GACzDI,IAAS,KAETC,IAAQH,EAAY,IAAI,CAAAI,MAAKA,IAAIF,CAAM,GACvCG,IAAQL,EAAY,IAAI,CAAAI,MAAKA,IAAIF,CAAM;AAE7C,aAAO;AAAA,QACL,OAAO,IAAI,aAAaC,CAAK;AAAA,QAC7B,OAAO,IAAI,aAAaE,CAAK;AAAA,MAAA;AAAA,IAEjC;AAAA,IAEA,SAASzB,GAAkB7F,GAAsB+G,IAAc,GAAyB;AACtF,YAAMP,IAAUf,EAAkB,IAAII,CAAQ;AAC9C,UAAI,CAACW,KAAWA,EAAQ,WAAW;AACjC,cAAM,IAAI,MAAM,2CAA2CX,CAAQ,EAAE;AAGvE,YAAMI,IAASO,EAAQ,KAAK,IAAIO,GAAaP,EAAQ,SAAS,CAAC,CAAC,GAC1DjF,IAAI,MAAM,KAAKvB,EAAK,CAAC,GACrBwB,IAAI,MAAM,KAAKxB,EAAK,CAAC,GAGrBiH,IAAcjB,EAAI,QAAQH,GAAUtE,GAAGwF,CAAW,GAClDQ,IAAY,MAAM,KAAKN,CAAW,GAElClG,IAAWR,EAAkBiB,GAAG+F,CAAS,GACzCpF,IAAmBrB,EAA0BC,GAAUS,EAAE,QAAQyE,EAAO,WAAW,WAAW,MAAM,GACpG7D,IAAOlB,EAAcM,GAAG+F,CAAS;AAEvC,aAAO;AAAA,QACL,UAAAxG;AAAA,QACA,kBAAAoB;AAAA,QACA,MAAAC;AAAA,QACA,KAAKZ,EAAE,OAAO,CAACrB,GAAK+B,GAAIrB,MAAMV,IAAM,KAAK,IAAI+B,IAAKqF,EAAU1G,CAAC,GAAG,CAAC,GAAG,CAAC;AAAA,QACrE,KAAKW,EAAE,OAAO,CAACrB,GAAK+B,MAAO/B,IAAM,KAAK,IAAI+B,IAAKhC,EAAcsB,CAAC,GAAG,CAAC,GAAG,CAAC;AAAA,QACtE,GAAGA,EAAE;AAAA,QACL,GAAGyE,EAAO,WAAW,WAAW;AAAA,MAAA;AAAA,IAEpC;AAAA,IAEA,sBACEJ,GACAC,IAA2BzE,EAAO,eAClC0E,IAAoB,IACd;AACN,MAAAL,EAAe,IAAIG,CAAQ;AAG3B,YAAM2B,IAAQhC,KAAA,gBAAAA,EAAK;AACnB,UAAIgC,GAAO;AACT,cAAMC,IAASD,EAAM,UAAU3B,CAAQ;AACvC,YAAI4B,GAAQ;AACV,gBAAMzH,IAAOyH,EAAO,QAAA;AACpB,UAAIzH,KAAQA,EAAK,EAAE,SAAS,KAC1B4F,EAAIC,GAAU;AAAA,YACZ,GAAG7F,EAAK;AAAA,YACR,GAAGA,EAAK;AAAA,UAAA,GACP8F,GAAQC,CAAY;AAAA,QAE3B;AAAA,MACF;AAEA,MAAAP,KAAA,QAAAA,EAAK,IAAI,KAAK,oDAAoDK,CAAQ;AAAA,IAC5E;AAAA,IAEA,uBAAuBA,GAAwB;AAC7C,MAAAH,EAAe,OAAOG,CAAQ;AAG9B,YAAM6B,IAAQ/B,EAAe,IAAIE,CAAQ;AACzC,MAAI6B,MACF,aAAaA,CAAK,GAClB/B,EAAe,OAAOE,CAAQ,IAGhCL,KAAA,QAAAA,EAAK,IAAI,KAAK,qDAAqDK,CAAQ;AAAA,IAC7E;AAAA,IAEA,cAAcA,GAAmB;AAC/B,UAAIA,GAAU;AACZ,cAAMW,IAAUf,EAAkB,IAAII,CAAQ,KAAK,CAAA,GAC7C8B,IAAgD,CAAA;AAEtD,mBAAW1B,KAAUO;AACnB,UAAAmB,EAAY1B,EAAO,MAAM,KAAK0B,EAAY1B,EAAO,MAAM,KAAK,KAAK;AAGnE,eAAO;AAAA,UACL,eAAeO,EAAQ;AAAA,UACvB,aAAAmB;AAAA,UACA,iBAAiBnB,EAAQ,SAAS,IAAIA,EAAQ,OAAO,CAACrG,GAAK,MAAMA,IAAM,EAAE,WAAW,UAAU,CAAC,IAAIqG,EAAQ,SAAS;AAAA,UACpH,uBAAuBA,EAAQ,SAAS,IAAIA,EAAQ,OAAO,CAACrG,GAAK,MAAMA,IAAM,EAAE,gBAAgB,CAAC,IAAIqG,EAAQ,SAAS;AAAA,QAAA;AAAA,MAEzH,OAAO;AAEL,YAAIoB,IAAgB;AACpB,cAAMC,IAAmD,CAAA,GACnDC,IAAwB,CAAA,GACxBC,IAA+B,CAAA;AAErC,mBAAWvB,KAAWf,EAAkB,UAAU;AAChD,UAAAmC,KAAiBpB,EAAQ,QACzBsB,EAAY,KAAK,GAAGtB,EAAQ,IAAI,OAAKnE,EAAE,WAAW,QAAQ,CAAC,GAC3D0F,EAAmB,KAAK,GAAGvB,EAAQ,IAAI,CAAAnE,MAAKA,EAAE,cAAc,CAAC;AAE7D,qBAAW4D,KAAUO;AACnB,YAAAqB,EAAe5B,EAAO,MAAM,KAAK4B,EAAe5B,EAAO,MAAM,KAAK,KAAK;AAAA,QAE3E;AAEA,eAAO;AAAA,UACL,eAAA2B;AAAA,UACA,aAAaC;AAAA,UACb,iBAAiBC,EAAY,SAAS,IAAIA,EAAY,OAAO,CAAC3H,GAAKkC,MAAMlC,IAAMkC,GAAG,CAAC,IAAIyF,EAAY,SAAS;AAAA,UAC5G,uBAAuBC,EAAmB,SAAS,IAAIA,EAAmB,OAAO,CAAC5H,GAAK6H,MAAM7H,IAAM6H,GAAG,CAAC,IAAID,EAAmB,SAAS;AAAA,QAAA;AAAA,MAE3I;AAAA,IACF;AAAA,IAEA,cAAc,CAACE,MAA+C;AAC5D,aAAO,OAAO5G,GAAQ4G,CAAS;AAAA,IACjC;AAAA,IAEA,WAAW,OAAO,EAAE,GAAG5G;IAEvB,aAAawE,GAAkBkB,IAAc,GAAS;AACpD,YAAMS,IAAQhC,KAAA,gBAAAA,EAAK;AACnB,UAAI,CAACgC,EAAO;AAEZ,YAAMhB,IAAUf,EAAkB,IAAII,CAAQ;AAC9C,UAAI,CAACW,KAAWA,EAAQ,WAAW,EAAG;AAEtC,YAAMP,IAASO,EAAQ,KAAK,IAAIO,GAAaP,EAAQ,SAAS,CAAC,CAAC,GAC1DiB,IAASD,EAAM,UAAU3B,CAAQ;AACvC,UAAI,CAAC4B,EAAQ;AAEb,YAAMzH,IAAOyH,EAAO,QAAA;AACpB,UAAI,CAACzH,EAAM;AAGX,WAAK,kBAAkB6F,CAAQ;AAG/B,YAAMqC,IAAc,GAAGrC,CAAQ,QAAQI,EAAO,MAAM,IAC9ClE,IAAeiE,EAAI,QAAQH,GAAU7F,EAAK,GAAG+G,CAAW;AAE9D,MAAAS,EAAM,UAAU;AAAA,QACd,IAAIU;AAAA,QACJ,MAAM;AAAA,QACN,MAAM;AAAA,UACJ,GAAG,IAAI,aAAa,MAAM,KAAKlI,EAAK,CAAC,CAAC;AAAA,UACtC,GAAG,IAAI,aAAa+B,CAAY;AAAA,QAAA;AAAA,QAElC,OAAO;AAAA,UACL,OAAO;AAAA,UACP,OAAO;AAAA,UACP,SAAS;AAAA,UACT,UAAU,CAAC,GAAG,CAAC;AAAA,QAAA;AAAA,MACjB,CACD;AAGD,YAAMoG,IAAWC,EAAenC,CAAM,GAChCoC,IAAe,GAAGxC,CAAQ,aAAaI,EAAO,MAAM;AAE1D,MAAAuB,EAAM,cAAc;AAAA,QAClB,IAAIa;AAAA,QACJ,MAAM;AAAA,QACN,MAAM,GAAGpC,EAAO,OAAO,aAAa,KAAKkC,CAAQ,WAAWlC,EAAO,WAAW,SAAS,QAAQ,CAAC,CAAC;AAAA,QACjG,GAAGjG,EAAK,EAAE,CAAC;AAAA,QACX,GAAG,KAAK,IAAI,GAAG,MAAM,KAAK+B,CAAY,CAAC;AAAA,QACvC,OAAO;AAAA,UACL,OAAO;AAAA,UACP,UAAU;AAAA,UACV,iBAAiB;AAAA,QAAA;AAAA,MACnB,CACM;AAAA,IACV;AAAA,IAEA,kBAAkB8D,GAAwB;AACxC,YAAM2B,IAAQhC,KAAA,gBAAAA,EAAK;AACnB,UAAI,CAACgC,EAAO;AAGZ,YAAMc,IAAiC;AAAA,QACrC;AAAA,QAAU;AAAA,QAAc;AAAA,QAAe;AAAA,QACvC;AAAA,QAAe;AAAA,QAAS;AAAA,QAAc;AAAA,QAAW;AAAA,MAAA;AAGnD,iBAAWxC,KAAUwC,GAAY;AAE/B,cAAMJ,IAAc,GAAGrC,CAAQ,QAAQC,CAAM;AAC7C,QAAI0B,EAAM,UAAUU,CAAW,KAC7BV,EAAM,aAAaU,CAAW;AAIhC,cAAMG,IAAe,GAAGxC,CAAQ,aAAaC,CAAM;AACnD,QAAI0B,EAAM,cAAca,CAAY,KAClCb,EAAM,iBAAiBa,CAAY;AAAA,MAEvC;AAAA,IACF;AAAA,IAEA,cAAcxC,GAAkB0C,IAAS,QAAgB;AACvD,YAAM/B,IAAUf,EAAkB,IAAII,CAAQ,KAAK,CAAA;AAEnD,cAAQ0C,GAAA;AAAA,QACN,KAAK;AACH,iBAAO,KAAK,UAAU/B,GAAS,MAAM,CAAC;AAAA,QACxC,KAAK;AACH,cAAIgC,IAAM;AAAA;AACV,qBAAWvC,KAAUO;AACnB,YAAAgC,KAAO,GAAGvC,EAAO,MAAM,IAAIA,EAAO,WAAW,QAAQ,IAAIA,EAAO,WAAW,IAAI,KAAKA,EAAO,WAAW,WAAW,KAAK,IAAI,CAAC,KAAKA,EAAO,cAAc;AAAA;AAEvJ,iBAAOuC;AAAA,QACT,KAAK;AACH,cAAIC,IAAS,4BAA4B5C,CAAQ;AAAA;AACjD,mBAAShF,IAAI,GAAGA,IAAI2F,EAAQ,QAAQ3F,KAAK;AACvC,kBAAMoF,IAASO,EAAQ3F,CAAC;AACxB,YAAA4H,KAAU,SAAS5H,IAAI,CAAC,cAAcoF,EAAO,MAAM;AAAA,GACnDwC,KAAU,SAAS5H,IAAI,CAAC,eAAeoF,EAAO,WAAW,QAAQ;AAAA,GACjEwC,KAAU,SAAS5H,IAAI,CAAC,kBAAkBoF,EAAO,WAAW,WAAW,KAAK,IAAI,CAAC;AAAA;AAAA,UACnF;AACA,iBAAOwC;AAAA,QACT;AACE,iBAAO,KAAK,UAAUjC,GAAS,MAAM,CAAC;AAAA,MAAA;AAAA,IAE5C;AAAA,EAAA;AAOF,WAAStG,EAAcF,GAAwB;AAC7C,WAAOA,EAAK,OAAO,CAACG,GAAKC,MAAQD,IAAMC,GAAK,CAAC,IAAIJ,EAAK;AAAA,EACxD;AAEA,WAASO,EAAkBC,GAAoBC,GAA0B;AACvE,UAAMC,IAAeR,EAAcM,CAAQ;AAC3C,QAAIG,IAAQ,GACRC,IAAQ;AAEZ,aAASC,IAAI,GAAGA,IAAIL,EAAS,QAAQK;AACnC,MAAAF,KAAS,KAAK,IAAIH,EAASK,CAAC,IAAIJ,EAAOI,CAAC,GAAG,CAAC,GAC5CD,KAAS,KAAK,IAAIJ,EAASK,CAAC,IAAIH,GAAc,CAAC;AAGjD,WAAO,IAAKC,IAAQC;AAAA,EACtB;AAEA,WAASE,EAA0BC,GAAkBC,GAAWC,GAAmB;AACjF,WAAO,KAAM,IAAIF,MAAaC,IAAI,MAAOA,IAAIC,IAAI;AAAA,EACnD;AAEA,WAASC,EAAcV,GAAoBC,GAA0B;AACnE,QAAIU,IAAmB;AACvB,aAASN,IAAI,GAAGA,IAAIL,EAAS,QAAQK;AACnC,MAAAM,KAAoB,KAAK,IAAIX,EAASK,CAAC,IAAIJ,EAAOI,CAAC,GAAG,CAAC;AAEzD,WAAO,KAAK,KAAKM,IAAmBX,EAAS,MAAM;AAAA,EACrD;AAEA,WAAS4H,EAAenC,GAAkC;;AACxD,UAAMe,IAASf,EAAO,WAAW;AAEjC,YAAQA,EAAO,QAAA;AAAA,MACb,KAAK;AACH,eAAOe,EAAO,WAAW,IAAI,OAAOA,EAAO,CAAC,EAAE,QAAQ,CAAC,CAAC,MAAM,OAAOA,EAAO,CAAC,EAAE,QAAQ,CAAC,CAAC,OAAOA,EAAO,CAAC,EAAE,QAAQ,CAAC,CAAC;AAAA,MACtH,KAAK;AACH,YAAImB,IAAW;AACf,iBAAStH,IAAImG,EAAO,SAAS,GAAGnG,KAAK,GAAGA;AACtC,UAAImG,EAAOnG,CAAC,MAAM,MACZA,MAAM,IACRsH,KAAYnB,EAAOnG,CAAC,EAAE,QAAQ,CAAC,IACtBA,MAAM,IACfsH,KAAY,GAAGnB,EAAOnG,CAAC,EAAE,QAAQ,CAAC,CAAC,SAEnCsH,KAAY,GAAGnB,EAAOnG,CAAC,EAAE,QAAQ,CAAC,CAAC,KAAKA,CAAC;AAI/C,eAAOsH,EAAS,QAAQ,OAAO,EAAE,EAAE,KAAA;AAAA,MACrC,KAAK;AACH,eAAO,OAAOnB,EAAO,CAAC,EAAE,QAAQ,CAAC,CAAC,UAAUA,EAAO,CAAC,EAAE,QAAQ,CAAC,CAAC,UAAQ0B,IAAA1B,EAAO,CAAC,MAAR,gBAAA0B,EAAW,QAAQ,OAAM,CAAC;AAAA,MACpG,KAAK;AACH,eAAO,OAAO1B,EAAO,CAAC,EAAE,QAAQ,CAAC,CAAC,iBAAiBA,EAAO,CAAC,EAAE,QAAQ,CAAC,CAAC,aAAaA,EAAO,CAAC,EAAE,QAAQ,CAAC,CAAC,YAAU2B,IAAA3B,EAAO,CAAC,MAAR,gBAAA2B,EAAW,QAAQ,OAAM,CAAC;AAAA,MAC9I;AACE,eAAO;AAAA,IAAA;AAAA,EAEb;AAMA,WAASC,EAAiBC,GAAwBC,GAA8B;AAC9E,UAAM,EAAE,UAAAjD,MAAaiD;AAErB,QAAIpD,EAAe,IAAIG,CAAQ,GAAG;AAEhC,YAAM6B,IAAQ/B,EAAe,IAAIE,CAAQ;AACzC,MAAI6B,KACF,aAAaA,CAAK;AAGpB,YAAMqB,IAAW,WAAW,MAAM;AAChC,cAAMvB,IAAQqB,EAAQ;AACtB,YAAIrB,GAAO;AACT,gBAAMC,IAASD,EAAM,UAAU3B,CAAQ;AACvC,cAAI4B,GAAQ;AACV,kBAAMzH,IAAOyH,EAAO,QAAA;AACpB,YAAIzH,KAAQA,EAAK,EAAE,SAAS,MAC1B4F,EAAIC,GAAU;AAAA,cACZ,GAAG7F,EAAK;AAAA,cACR,GAAGA,EAAK;AAAA,YAAA,CACT,GAGDgG,EAAI,aAAaH,CAAQ;AAAA,UAE7B;AAAA,QACF;AAAA,MACF,GAAG,GAAG;AAEN,MAAAF,EAAe,IAAIE,GAAUkD,CAAQ;AAAA,IACvC;AAAA,EACF;AAMA,SAAO;AAAA,IACL,UAAU3D;AAAA,IAEV,OAAOyD,GAAwB;AAC7B,MAAArD,IAAMqD,GACNrD,EAAI,IAAI,KAAK,+BAA+B;AAAA,IAC9C;AAAA,IAEA,eAAewD,GAAyBC,GAAoC;AAAA,IAE5E;AAAA,IAEA,eAAeD,GAAyBE,GAA2B;AAAA,IAEnE;AAAA,IAEA,cAAcN;AAAA,IAEd,UAAUI,GAAyB;AAEjC,iBAAWtB,KAAS/B,EAAe;AACjC,qBAAa+B,CAAK;AAEpB,MAAA/B,EAAe,MAAA,GAGfF,EAAkB,MAAA,GAClBC,EAAe,MAAA;AAAA,IACjB;AAAA,IAEA,KAAAM;AAAA,EAAA;AAEJ;"}
1
+ {"version":3,"file":"regression.js","sources":["../../src/plugins/regression/algorithms.ts","../../src/plugins/regression/index.ts"],"sourcesContent":["/**\n * Regression Plugin - Core Algorithms\n * \n * Implements regression algorithms for scientific curve fitting.\n * Includes linear, polynomial, exponential, and non-linear models.\n * \n * @packageDocumentation\n * @module plugins/regression\n */\n\nimport type {\n RegressionData,\n RegressionResult,\n LinearRegressionConfig,\n PolynomialRegressionConfig,\n ExponentialRegressionConfig,\n GaussianRegressionConfig\n} from './types';\nimport { solveLinearSystem } from '../analysis/math';\n\n// ============================================\n// Utility Functions\n// ============================================\n\nfunction toArray(data: Float32Array | Float64Array | number[]): number[] {\n return Array.from(data);\n}\n\nfunction toFloat32Array(data: number[]): Float32Array {\n return new Float32Array(data);\n}\n\nfunction calculateMean(data: number[]): number {\n return data.reduce((sum, val) => sum + val, 0) / data.length;\n}\n\nfunction calculateVariance(data: number[]): number {\n const mean = calculateMean(data);\n return data.reduce((sum, val) => sum + Math.pow(val - mean, 2), 0) / data.length;\n}\n\nfunction calculateRSquared(observed: number[], fitted: number[]): number {\n const meanObserved = calculateMean(observed);\n let ssRes = 0;\n let ssTot = 0;\n \n for (let i = 0; i < observed.length; i++) {\n ssRes += Math.pow(observed[i] - fitted[i], 2);\n ssTot += Math.pow(observed[i] - meanObserved, 2);\n }\n \n return 1 - (ssRes / ssTot);\n}\n\nfunction calculateAdjustedRSquared(rSquared: number, n: number, k: number): number {\n return 1 - ((1 - rSquared) * (n - 1)) / (n - k - 1);\n}\n\nfunction calculateRMSE(observed: number[], fitted: number[]): number {\n let sumSquaredErrors = 0;\n for (let i = 0; i < observed.length; i++) {\n sumSquaredErrors += Math.pow(observed[i] - fitted[i], 2);\n }\n return Math.sqrt(sumSquaredErrors / observed.length);\n}\n/*\nfunction _calculateStatistics(data: RegressionData, predictions: Float32Array): { rSquared: number; rmse: number; mae: number; residuals: number[] } {\n const n = data.x.length;\n const yMean = Array.from(data.y).reduce((sum, y) => sum + y, 0) / n;\n \n let ssTotal = 0;\n let ssResidual = 0;\n \n for (let i = 0; i < n; i++) {\n const yActual = data.y[i];\n const yPred = predictions[i];\n \n ssTotal += Math.pow(yActual - yMean, 2);\n ssResidual += Math.pow(yActual - yPred, 2);\n }\n \n const rSquared = 1 - (ssResidual / ssTotal);\n const rmse = Math.sqrt(ssResidual / n);\n const mae = Array.from(data.y).reduce((sum, y, i) => sum + Math.abs(y - predictions[i]), 0) / n;\n \n return {\n rSquared,\n rmse,\n mae,\n residuals: Array.from(data.y).map((y, i) => y - predictions[i])\n };\n}\n*/\n// ============================================\n// Linear Regression\n// ============================================\n\nexport function linearRegression(\n data: RegressionData,\n config: LinearRegressionConfig = {}\n): RegressionResult {\n const startTime = performance.now();\n \n const x = toArray(data.x);\n const y = toArray(data.y);\n const weights = data.weights ? toArray(data.weights) : null;\n const { forceOrigin = false } = config;\n \n const n = x.length;\n \n if (forceOrigin) {\n // Forced through origin: y = bx\n let numerator = 0;\n let denominator = 0;\n \n for (let i = 0; i < n; i++) {\n const weight = weights ? weights[i] : 1;\n numerator += weight * x[i] * y[i];\n denominator += weight * x[i] * x[i];\n }\n \n const slope = numerator / denominator;\n const fittedValues = x.map(xi => slope * xi);\n const residuals = y.map((yi, i) => yi - fittedValues[i]);\n \n const rSquared = calculateRSquared(y, fittedValues);\n const adjustedRSquared = calculateAdjustedRSquared(rSquared, n, 1);\n const rmse = calculateRMSE(y, fittedValues);\n \n return {\n method: 'linear',\n parameters: {\n parameters: [slope],\n uncertainties: [Math.sqrt(denominator / (n * numerator))], // Simplified\n correlationMatrix: [[1]]\n },\n statistics: {\n rSquared,\n adjustedRSquared,\n rmse,\n rss: residuals.reduce((sum, r) => sum + r * r, 0),\n tss: y.reduce((sum, yi) => sum + Math.pow(yi - calculateMean(y), 2), 0),\n n,\n k: 1\n },\n fittedValues: toFloat32Array(fittedValues),\n residuals: toFloat32Array(residuals),\n goodnessOfFit: rSquared > 0.9 ? 'excellent' : rSquared > 0.7 ? 'good' : rSquared > 0.5 ? 'fair' : 'poor',\n converged: true,\n iterations: 1,\n processingTime: performance.now() - startTime\n };\n } else {\n // Standard linear regression: y = ax + b\n let sumX = 0, sumY = 0, sumXY = 0, sumX2 = 0;\n let sumWeights = 0;\n \n for (let i = 0; i < n; i++) {\n const weight = weights ? weights[i] : 1;\n sumX += weight * x[i];\n sumY += weight * y[i];\n sumXY += weight * x[i] * y[i];\n sumX2 += weight * x[i] * x[i];\n sumWeights += weight;\n }\n \n const meanX = sumX / sumWeights;\n const meanY = sumY / sumWeights;\n \n const slope = (sumXY - sumWeights * meanX * meanY) / (sumX2 - sumWeights * meanX * meanX);\n const intercept = meanY - slope * meanX;\n \n const fittedValues = x.map(xi => slope * xi + intercept);\n const residuals = y.map((yi, i) => yi - fittedValues[i]);\n \n const rSquared = calculateRSquared(y, fittedValues);\n const adjustedRSquared = calculateAdjustedRSquared(rSquared, n, 2);\n const rmse = calculateRMSE(y, fittedValues);\n \n return {\n method: 'linear',\n parameters: {\n parameters: [slope, intercept],\n uncertainties: [0.1, 0.1], // Simplified\n correlationMatrix: [[1, -0.5], [-0.5, 1]] // Simplified\n },\n statistics: {\n rSquared,\n adjustedRSquared,\n rmse,\n rss: residuals.reduce((sum, r) => sum + r * r, 0),\n tss: y.reduce((sum, yi) => sum + Math.pow(yi - meanY, 2), 0),\n n,\n k: 2\n },\n fittedValues: toFloat32Array(fittedValues),\n residuals: toFloat32Array(residuals),\n goodnessOfFit: rSquared > 0.9 ? 'excellent' : rSquared > 0.7 ? 'good' : rSquared > 0.5 ? 'fair' : 'poor',\n converged: true,\n iterations: 1,\n processingTime: performance.now() - startTime\n };\n }\n}\n\n// ============================================\n// Polynomial Regression\n// ============================================\n\nexport function polynomialRegression(\n data: RegressionData,\n config: PolynomialRegressionConfig\n): RegressionResult {\n const startTime = performance.now();\n \n const x = toArray(data.x);\n const y = toArray(data.y);\n const { degree } = config;\n \n const n = x.length;\n const m = degree + 1; // Number of parameters\n \n // Build Vandermonde matrix\n const X: number[][] = [];\n for (let i = 0; i < n; i++) {\n const row: number[] = [];\n for (let j = 0; j <= degree; j++) {\n row.push(Math.pow(x[i], j));\n }\n X.push(row);\n }\n \n // Solve using least squares (simplified implementation)\n // In practice, would use QR decomposition or SVD\n const parameters = solveLeastSquares(X, y, 0);\n \n const fittedValues = x.map(xi => {\n let value = 0;\n for (let j = 0; j <= degree; j++) {\n value += parameters[j] * Math.pow(xi, j);\n }\n return value;\n });\n \n const residuals = y.map((yi, i) => yi - fittedValues[i]);\n \n const rSquared = calculateRSquared(y, fittedValues);\n const adjustedRSquared = calculateAdjustedRSquared(rSquared, n, m);\n const rmse = calculateRMSE(y, fittedValues);\n \n return {\n method: 'polynomial',\n parameters: {\n parameters,\n uncertainties: new Array(m).fill(0.1), // Simplified\n correlationMatrix: Array(m).fill(0).map(() => Array(m).fill(0)) // Simplified\n },\n statistics: {\n rSquared,\n adjustedRSquared,\n rmse,\n rss: residuals.reduce((sum, r) => sum + r * r, 0),\n tss: y.reduce((sum, yi) => sum + Math.pow(yi - calculateMean(y), 2), 0),\n n,\n k: m\n },\n fittedValues: toFloat32Array(fittedValues),\n residuals: toFloat32Array(residuals),\n goodnessOfFit: rSquared > 0.9 ? 'excellent' : rSquared > 0.7 ? 'good' : rSquared > 0.5 ? 'fair' : 'poor',\n converged: true,\n iterations: 10, // Simplified\n processingTime: performance.now() - startTime\n };\n}\n\n// ============================================\n// Exponential Regression\n// ============================================\n\nexport function exponentialRegression(\n data: RegressionData,\n _config: ExponentialRegressionConfig = {}\n): RegressionResult {\n const startTime = performance.now();\n \n const x = toArray(data.x);\n const y = toArray(data.y);\n \n // Transform to linear: ln(y - offset) = ln(amplitude) + rate * x\n // Need to estimate offset first (simplified)\n const offset = Math.min(...y) - 1;\n \n const transformedY = y.map(yi => {\n const adjusted = yi - offset;\n return adjusted > 0 ? Math.log(adjusted) : 0;\n });\n \n // Linear regression on transformed data\n const linearResult = linearRegression(\n { x, y: transformedY },\n { forceOrigin: false }\n );\n \n const [rate, logAmplitude] = linearResult.parameters.parameters;\n const amplitude = Math.exp(logAmplitude);\n \n const fittedValues = x.map(xi => amplitude * Math.exp(rate * xi) + offset);\n const residuals = y.map((yi, i) => yi - fittedValues[i]);\n \n const rSquared = calculateRSquared(y, fittedValues);\n const adjustedRSquared = calculateAdjustedRSquared(rSquared, x.length, 3);\n const rmse = calculateRMSE(y, fittedValues);\n \n return {\n method: 'exponential',\n parameters: {\n parameters: [amplitude, rate, offset],\n uncertainties: [0.1, 0.01, 0.1], // Simplified\n correlationMatrix: [[1, 0.5, 0.2], [0.5, 1, 0.3], [0.2, 0.3, 1]] // Simplified\n },\n statistics: {\n rSquared,\n adjustedRSquared,\n rmse,\n rss: residuals.reduce((sum, r) => sum + r * r, 0),\n tss: y.reduce((sum, yi) => sum + Math.pow(yi - calculateMean(y), 2), 0),\n n: x.length,\n k: 3\n },\n fittedValues: toFloat32Array(fittedValues),\n residuals: toFloat32Array(residuals),\n goodnessOfFit: rSquared > 0.9 ? 'excellent' : rSquared > 0.7 ? 'good' : rSquared > 0.5 ? 'fair' : 'poor',\n converged: true,\n iterations: 5, // Simplified\n processingTime: performance.now() - startTime\n };\n}\n\n// ============================================\n// Gaussian Regression\n// ============================================\n\nexport function gaussianRegression(\n data: RegressionData,\n _config: GaussianRegressionConfig = {}\n): RegressionResult {\n const startTime = performance.now();\n \n const x = toArray(data.x);\n const y = toArray(data.y);\n \n // Non-linear fitting using simplified gradient descent\n let amplitude = Math.max(...y);\n let mean = x.reduce((sum, xi) => sum + xi, 0) / x.length;\n let std = Math.sqrt(calculateVariance(x));\n let offset = Math.min(...y);\n \n const learningRate = 0.001;\n const maxIterations = 100;\n const tolerance = 1e-6;\n \n for (let iter = 0; iter < maxIterations; iter++) {\n let gradAmplitude = 0, gradMean = 0, gradStd = 0, gradOffset = 0;\n let totalError = 0;\n \n for (let i = 0; i < x.length; i++) {\n const xi = x[i];\n const yi = y[i];\n \n // Gaussian function: A * exp(-((x - μ)² / (2σ²))) + offset\n const exponent = -Math.pow(xi - mean, 2) / (2 * std * std);\n const predicted = amplitude * Math.exp(exponent) + offset;\n const error = yi - predicted;\n totalError += error * error;\n \n // Gradients\n const expTerm = Math.exp(exponent);\n gradAmplitude += error * expTerm;\n gradMean += error * amplitude * expTerm * (xi - mean) / (std * std);\n gradStd += error * amplitude * expTerm * Math.pow(xi - mean, 2) / (Math.pow(std, 3));\n gradOffset += error;\n }\n \n // Update parameters\n amplitude += learningRate * gradAmplitude;\n mean += learningRate * gradMean;\n std += learningRate * gradStd;\n offset += learningRate * gradOffset;\n \n // Ensure std is positive\n std = Math.max(std, 0.01);\n \n if (totalError < tolerance) break;\n }\n \n const fittedValues = x.map(xi => {\n const exponent = -Math.pow(xi - mean, 2) / (2 * std * std);\n return amplitude * Math.exp(exponent) + offset;\n });\n \n const residuals = y.map((yi, i) => yi - fittedValues[i]);\n \n const rSquared = calculateRSquared(y, fittedValues);\n const adjustedRSquared = calculateAdjustedRSquared(rSquared, x.length, 4);\n const rmse = calculateRMSE(y, fittedValues);\n \n return {\n method: 'gaussian',\n parameters: {\n parameters: [amplitude, mean, std, offset],\n uncertainties: [0.1, 0.1, 0.01, 0.1], // Simplified\n correlationMatrix: Array(4).fill(0).map(() => Array(4).fill(0)) // Simplified\n },\n statistics: {\n rSquared,\n adjustedRSquared,\n rmse,\n rss: residuals.reduce((sum, r) => sum + r * r, 0),\n tss: y.reduce((sum, yi) => sum + Math.pow(yi - calculateMean(y), 2), 0),\n n: x.length,\n k: 4\n },\n fittedValues: toFloat32Array(fittedValues),\n residuals: toFloat32Array(residuals),\n goodnessOfFit: rSquared > 0.9 ? 'excellent' : rSquared > 0.7 ? 'good' : rSquared > 0.5 ? 'fair' : 'poor',\n converged: true,\n iterations: maxIterations,\n processingTime: performance.now() - startTime\n };\n}\n\n// ============================================\n// Helper Functions\n// ============================================\n\nfunction solveLeastSquares(X: number[][], y: number[], regularization: number = 0): number[] {\n const n = X.length;\n const m = X[0].length;\n \n // Compute X^T * X\n const XtX: number[][] = Array(m).fill(0).map(() => Array(m).fill(0));\n const Xty: number[] = Array(m).fill(0);\n \n for (let i = 0; i < n; i++) {\n for (let j = 0; j < m; j++) {\n for (let k = 0; k < m; k++) {\n XtX[j][k] += X[i][j] * X[i][k];\n }\n Xty[j] += X[i][j] * y[i];\n }\n }\n \n // Add L2 regularization if needed\n if (regularization > 0) {\n for (let i = 0; i < m; i++) {\n XtX[i][i] += regularization;\n }\n }\n \n // Solve using Gaussian elimination\n return solveLinearSystem(XtX, Xty);\n}","/**\n * Regression Plugin - Main Implementation\n * \n * Provides advanced scientific regression and curve fitting capabilities.\n * Supports multiple regression methods with automatic model selection.\n * \n * @example\n * ```typescript\n * import { PluginRegression } from 'velo-plot/plugins/regression';\n * \n * chart.use(PluginRegression({\n * defaultMethod: 'polynomial',\n * enableAutoSelection: true,\n * modelSelectionCriteria: 'aic',\n * maxIterations: 100\n * }));\n * \n * // Fit polynomial regression\n * const result = await chart.regression.fit('series1', {\n * x: seriesData.x,\n * y: seriesData.y\n * }, 'polynomial', { degree: 3 });\n * \n * console.log(`R² = ${result.statistics.rSquared}`);\n * console.log(`Parameters: ${result.parameters.parameters}`);\n * \n * // Auto-fit best model\n * const bestFit = await chart.regression.autoFit('series1', data);\n * \n * // Visualize fit\n * chart.regression.visualizeFit('series1');\n * ```\n * \n * @packageDocumentation\n * @module plugins/regression\n */\n\nimport type { \n PluginManifest, \n ChartPlugin, \n PluginContext,\n BeforeRenderEvent,\n DataUpdateEvent\n} from '../types';\n\nimport type {\n PluginRegressionConfig,\n RegressionAPI,\n RegressionResult,\n RegressionData,\n RegressionMethod,\n LinearRegressionConfig,\n PolynomialRegressionConfig,\n ExponentialRegressionConfig,\n GaussianRegressionConfig,\n RegressionCompletedEvent,\n RegressionFailedEvent,\n ModelSelectedEvent,\n RegressionStatistics\n} from './types';\n\nimport {\n linearRegression,\n polynomialRegression,\n exponentialRegression,\n gaussianRegression\n} from './algorithms';\n\n// ============================================\n// Plugin Manifest\n// ============================================\n\nconst manifestRegression: PluginManifest = {\n name: 'regression',\n version: '1.0.0',\n description: 'Advanced scientific regression and curve fitting',\n author: 'Velo Plot Team',\n provides: ['regression', 'curve-fitting', 'scientific-analysis']\n};\n\n// ============================================\n// Default Configuration\n// ============================================\n\nconst DEFAULT_CONFIG: Required<PluginRegressionConfig> = {\n defaultMethod: 'linear',\n enableAutoSelection: false,\n modelSelectionCriteria: 'aic',\n enableWeightedRegression: false,\n enableRobustRegression: false,\n robustMethod: 'huber',\n maxIterations: 100,\n convergenceTolerance: 1e-6,\n defaultConfidenceLevel: 0.95,\n enableParallelProcessing: false,\n parallelChunkSize: 1000\n};\n\n// ============================================\n// Regression Plugin Implementation\n// ============================================\n\nexport function PluginRegression(\n userConfig: Partial<PluginRegressionConfig> = {}\n): ChartPlugin<PluginRegressionConfig> {\n const config = { ...DEFAULT_CONFIG, ...userConfig };\n let ctx: PluginContext | null = null;\n \n // Results storage\n const regressionResults = new Map<string, RegressionResult[]>();\n const realtimeSeries = new Set<string>();\n const debounceTimers = new Map<string, any>();\n \n // ============================================\n // Core Regression Methods\n // ============================================\n \n async function fit(\n seriesId: string,\n data: RegressionData,\n method: RegressionMethod = config.defaultMethod,\n methodConfig: any = {}\n ): Promise<RegressionResult> {\n try {\n // Clear previous visualization before fitting new model\n api.hideVisualization(seriesId);\n \n let result: RegressionResult;\n \n switch (method) {\n case 'linear':\n result = linearRegression(data, methodConfig as LinearRegressionConfig);\n break;\n case 'polynomial':\n result = polynomialRegression(data, methodConfig as PolynomialRegressionConfig);\n break;\n case 'exponential':\n result = exponentialRegression(data, methodConfig as ExponentialRegressionConfig);\n break;\n case 'gaussian':\n result = gaussianRegression(data, methodConfig as GaussianRegressionConfig);\n break;\n case 'logarithmic':\n // Transform y = a * log(x) + b to linear\n const logX = Array.from(data.x).map(xi => Math.log(xi));\n result = linearRegression({ ...data, x: new Float32Array(logX) }, methodConfig as LinearRegressionConfig);\n result.method = 'logarithmic';\n break;\n case 'power':\n // Transform to linear: log(y) = log(a) + b * log(x)\n const logY = Array.from(data.y).map(yi => Math.log(yi));\n const logXPow = Array.from(data.x).map(xi => Math.log(xi));\n result = linearRegression({ ...data, x: new Float32Array(logXPow), y: new Float32Array(logY) }, methodConfig as LinearRegressionConfig);\n result.method = 'power';\n break;\n case 'lorentzian':\n case 'sigmoid':\n case 'custom':\n // For now, fall back to linear for unsupported methods\n result = linearRegression(data, methodConfig as LinearRegressionConfig);\n break;\n default:\n throw new Error(`Unsupported regression method: ${method}`);\n }\n \n // Clear and store new result (replace, don't accumulate)\n regressionResults.set(seriesId, [result]);\n \n // Emit event\n if (ctx) {\n ctx.events.emit('regression:completed', {\n result,\n seriesId,\n method,\n timestamp: Date.now()\n } as RegressionCompletedEvent);\n }\n \n ctx?.log.info(`Regression completed for ${seriesId}: ${method} (R² = ${result.statistics.rSquared.toFixed(3)})`);\n \n return result;\n } catch (error) {\n if (ctx) {\n ctx.events.emit('regression:failed', {\n error: error as Error,\n seriesId,\n method,\n reason: `Fitting failed: ${error}`,\n timestamp: Date.now()\n } as RegressionFailedEvent);\n }\n \n throw error;\n }\n }\n \n async function fitAndCompare(\n seriesId: string,\n data: RegressionData,\n methods: RegressionMethod[],\n configs?: any[]\n ): Promise<RegressionResult[]> {\n const results: RegressionResult[] = [];\n \n for (let i = 0; i < methods.length; i++) {\n const method = methods[i];\n const methodConfig = configs ? configs[i] : {};\n \n try {\n const result = await fit(seriesId, data, method, methodConfig);\n results.push(result);\n } catch (error) {\n ctx?.log.warn(`Regression failed for ${method}: ${error}`);\n }\n }\n \n // Sort by criteria\n const criteria = config.modelSelectionCriteria;\n results.sort((a, b) => {\n switch (criteria) {\n case 'aic':\n return (a.statistics.aic || 0) - (b.statistics.aic || 0);\n case 'bic':\n return (a.statistics.bic || 0) - (b.statistics.bic || 0);\n case 'adjusted-r2':\n return b.statistics.adjustedRSquared - a.statistics.adjustedRSquared;\n default:\n return b.statistics.rSquared - a.statistics.rSquared;\n }\n });\n \n return results;\n }\n \n async function autoFit(\n seriesId: string,\n data: RegressionData,\n candidateMethods: RegressionMethod[] = ['linear', 'polynomial', 'exponential', 'gaussian']\n ): Promise<RegressionResult> {\n const configs = candidateMethods.map(method => {\n switch (method) {\n case 'polynomial':\n return { degree: 2 } as PolynomialRegressionConfig;\n case 'exponential':\n return {} as ExponentialRegressionConfig;\n case 'gaussian':\n return {} as GaussianRegressionConfig;\n default:\n return {} as LinearRegressionConfig;\n }\n });\n \n const results = await fitAndCompare(seriesId, data, candidateMethods, configs);\n \n if (results.length === 0) {\n throw new Error('No regression methods succeeded');\n }\n \n const bestResult = results[0];\n \n // Emit model selection event\n if (ctx) {\n ctx.events.emit('model:selected', {\n selectedMethod: bestResult.method,\n candidateResults: results,\n selectionCriteria: config.modelSelectionCriteria,\n seriesId,\n timestamp: Date.now()\n } as ModelSelectedEvent);\n }\n \n ctx?.log.info(`Auto-fit selected ${bestResult.method} for ${seriesId} (R² = ${bestResult.statistics.rSquared.toFixed(3)})`);\n \n return bestResult;\n }\n \n // ============================================\n // API Implementation\n // ============================================\n \n const api: RegressionAPI & Record<string, unknown> = {\n fit,\n \n fitAndCompare,\n \n autoFit,\n \n getResults(seriesId: string): RegressionResult[] {\n return regressionResults.get(seriesId) || [];\n },\n \n clearResults(seriesId: string): void {\n regressionResults.delete(seriesId);\n ctx?.log.info(`Regression results cleared for series: ${seriesId}`);\n },\n \n predict(\n seriesId: string,\n xValues: Float32Array | Float64Array | number[],\n resultIndex = 0\n ): Float32Array {\n const results = regressionResults.get(seriesId);\n if (!results || results.length === 0) {\n throw new Error(`No regression results found for series: ${seriesId}`);\n }\n \n const result = results[Math.min(resultIndex, results.length - 1)];\n const x = Array.from(xValues);\n const params = result.parameters.parameters;\n \n const predictions = x.map(xi => {\n switch (result.method) {\n case 'linear':\n return params[0] * xi + (params[1] || 0);\n case 'polynomial':\n let value = 0;\n for (let j = 0; j < params.length; j++) {\n value += params[j] * Math.pow(xi, j);\n }\n return value;\n case 'exponential':\n return params[0] * Math.exp(params[1] * xi) + (params[2] || 0);\n case 'gaussian':\n const exponent = -Math.pow(xi - params[1], 2) / (2 * params[2] * params[2]);\n return params[0] * Math.exp(exponent) + (params[3] || 0);\n case 'logarithmic':\n return params[0] * Math.log(xi) + (params[1] || 0);\n case 'power':\n return params[0] * Math.pow(xi, params[1]);\n default:\n return 0;\n }\n });\n \n return new Float32Array(predictions);\n },\n \n getConfidenceIntervals(\n seriesId: string,\n xValues: Float32Array | Float64Array | number[],\n _level = config.defaultConfidenceLevel,\n resultIndex = 0\n ): { lower: Float32Array; upper: Float32Array } {\n // Simplified confidence intervals\n const predictions = this.predict(seriesId, xValues, resultIndex);\n const margin = 0.1; // Simplified margin\n \n const lower = predictions.map(p => p - margin);\n const upper = predictions.map(p => p + margin);\n \n return {\n lower: new Float32Array(lower),\n upper: new Float32Array(upper)\n };\n },\n \n evaluate(seriesId: string, data: RegressionData, resultIndex = 0): RegressionStatistics {\n const results = regressionResults.get(seriesId);\n if (!results || results.length === 0) {\n throw new Error(`No regression results found for series: ${seriesId}`);\n }\n \n const result = results[Math.min(resultIndex, results.length - 1)];\n const x = Array.from(data.x);\n const y = Array.from(data.y);\n \n // Use existing model to predict\n const predictions = api.predict(seriesId, x, resultIndex);\n const predArray = Array.from(predictions);\n \n const rSquared = calculateRSquared(y, predArray);\n const adjustedRSquared = calculateAdjustedRSquared(rSquared, y.length, result.parameters.parameters.length);\n const rmse = calculateRMSE(y, predArray);\n \n return {\n rSquared,\n adjustedRSquared,\n rmse,\n rss: y.reduce((sum, yi, i) => sum + Math.pow(yi - predArray[i], 2), 0),\n tss: y.reduce((sum, yi) => sum + Math.pow(yi - calculateMean(y), 2), 0),\n n: y.length,\n k: result.parameters.parameters.length\n };\n },\n \n enableRealtimeFitting(\n seriesId: string,\n method: RegressionMethod = config.defaultMethod,\n methodConfig: any = {}\n ): void {\n realtimeSeries.add(seriesId);\n \n // Run initial fitting\n const chart = ctx?.chart;\n if (chart) {\n const series = chart.getSeries(seriesId);\n if (series) {\n const data = series.getData();\n if (data && data.x.length > 0) {\n fit(seriesId, {\n x: data.x,\n y: data.y\n }, method, methodConfig);\n }\n }\n }\n \n ctx?.log.info(`Real-time regression fitting enabled for series: ${seriesId}`);\n },\n \n disableRealtimeFitting(seriesId: string): void {\n realtimeSeries.delete(seriesId);\n \n // Clear debounce timer\n const timer = debounceTimers.get(seriesId);\n if (timer) {\n clearTimeout(timer);\n debounceTimers.delete(seriesId);\n }\n \n ctx?.log.info(`Real-time regression fitting disabled for series: ${seriesId}`);\n },\n \n getStatistics(seriesId?: string) {\n if (seriesId) {\n const results = regressionResults.get(seriesId) || [];\n const methodsUsed: Record<RegressionMethod, number> = {} as any;\n \n for (const result of results) {\n methodsUsed[result.method] = (methodsUsed[result.method] || 0) + 1;\n }\n \n return {\n totalFittings: results.length,\n methodsUsed,\n averageRSquared: results.length > 0 ? results.reduce((sum, r) => sum + r.statistics.rSquared, 0) / results.length : 0,\n averageProcessingTime: results.length > 0 ? results.reduce((sum, r) => sum + r.processingTime, 0) / results.length : 0\n };\n } else {\n // Global statistics\n let totalFittings = 0;\n const allMethodsUsed: Record<RegressionMethod, number> = {} as any;\n const allRSquared: number[] = [];\n const allProcessingTimes: number[] = [];\n \n for (const results of regressionResults.values()) {\n totalFittings += results.length;\n allRSquared.push(...results.map(r => r.statistics.rSquared));\n allProcessingTimes.push(...results.map(r => r.processingTime));\n \n for (const result of results) {\n allMethodsUsed[result.method] = (allMethodsUsed[result.method] || 0) + 1;\n }\n }\n \n return {\n totalFittings,\n methodsUsed: allMethodsUsed,\n averageRSquared: allRSquared.length > 0 ? allRSquared.reduce((sum, r) => sum + r, 0) / allRSquared.length : 0,\n averageProcessingTime: allProcessingTimes.length > 0 ? allProcessingTimes.reduce((sum, t) => sum + t, 0) / allProcessingTimes.length : 0\n };\n }\n },\n \n updateConfig: (newConfig: Partial<PluginRegressionConfig>) => {\n Object.assign(config, newConfig);\n },\n \n getConfig: () => ({ ...config }),\n \n visualizeFit(seriesId: string, resultIndex = 0): void {\n const chart = ctx?.chart;\n if (!chart) return;\n \n const results = regressionResults.get(seriesId);\n if (!results || results.length === 0) return;\n \n const result = results[Math.min(resultIndex, results.length - 1)];\n const series = chart.getSeries(seriesId);\n if (!series) return;\n \n const data = series.getData();\n if (!data) return;\n \n // Remove existing fit visualization\n this.hideVisualization(seriesId);\n \n // Add fitted curve\n const fitSeriesId = `${seriesId}_fit_${result.method}`;\n const fittedValues = api.predict(seriesId, data.x, resultIndex);\n \n chart.addSeries({\n id: fitSeriesId,\n type: 'line',\n data: {\n x: new Float32Array(Array.from(data.x)),\n y: new Float32Array(fittedValues)\n },\n style: {\n color: '#ff6b6b',\n width: 2,\n opacity: 0.8,\n lineDash: [5, 5]\n }\n });\n \n // Add equation annotation\n const equation = formatEquation(result);\n const annotationId = `${seriesId}_equation_${result.method}`;\n \n chart.addAnnotation({\n id: annotationId,\n type: 'text',\n text: `${result.method.toUpperCase()}: ${equation}\\\\nR² = ${result.statistics.rSquared.toFixed(3)}`,\n x: data.x[0],\n y: Math.max(...Array.from(fittedValues)),\n style: {\n color: '#ff6b6b',\n fontSize: 12,\n backgroundColor: 'rgba(255, 255, 255, 0.9)'\n }\n } as any);\n },\n \n hideVisualization(seriesId: string): void {\n const chart = ctx?.chart;\n if (!chart) return;\n \n // List all possible regression methods to ensure cleanup\n const allMethods: RegressionMethod[] = [\n 'linear', 'polynomial', 'exponential', 'gaussian', \n 'logarithmic', 'power', 'lorentzian', 'sigmoid', 'custom'\n ];\n \n for (const method of allMethods) {\n // Remove fit series\n const fitSeriesId = `${seriesId}_fit_${method}`;\n if (chart.getSeries(fitSeriesId)) {\n chart.removeSeries(fitSeriesId);\n }\n \n // Remove equation annotation\n const annotationId = `${seriesId}_equation_${method}`;\n if (chart.getAnnotation(annotationId)) {\n chart.removeAnnotation(annotationId);\n }\n }\n },\n \n exportResults(seriesId: string, format = 'json'): string {\n const results = regressionResults.get(seriesId) || [];\n \n switch (format) {\n case 'json':\n return JSON.stringify(results, null, 2);\n case 'csv':\n let csv = 'Method,R²,RMSE,Parameters,ProcessingTime\\n';\n for (const result of results) {\n csv += `${result.method},${result.statistics.rSquared},${result.statistics.rmse},\"${result.parameters.parameters.join(', ')}\",${result.processingTime}\\n`;\n }\n return csv;\n case 'matlab':\n let matlab = `% Regression results for ${seriesId}\\n`;\n for (let i = 0; i < results.length; i++) {\n const result = results[i];\n matlab += `result${i + 1}.method = '${result.method}';\\n`;\n matlab += `result${i + 1}.rSquared = ${result.statistics.rSquared};\\n`;\n matlab += `result${i + 1}.parameters = [${result.parameters.parameters.join(', ')}];\\n`;\n }\n return matlab;\n default:\n return JSON.stringify(results, null, 2);\n }\n }\n };\n \n // ============================================\n // Helper Functions\n // ============================================\n \n function calculateMean(data: number[]): number {\n return data.reduce((sum, val) => sum + val, 0) / data.length;\n }\n \n function calculateRSquared(observed: number[], fitted: number[]): number {\n const meanObserved = calculateMean(observed);\n let ssRes = 0;\n let ssTot = 0;\n \n for (let i = 0; i < observed.length; i++) {\n ssRes += Math.pow(observed[i] - fitted[i], 2);\n ssTot += Math.pow(observed[i] - meanObserved, 2);\n }\n \n return 1 - (ssRes / ssTot);\n }\n \n function calculateAdjustedRSquared(rSquared: number, n: number, k: number): number {\n return 1 - ((1 - rSquared) * (n - 1)) / (n - k - 1);\n }\n \n function calculateRMSE(observed: number[], fitted: number[]): number {\n let sumSquaredErrors = 0;\n for (let i = 0; i < observed.length; i++) {\n sumSquaredErrors += Math.pow(observed[i] - fitted[i], 2);\n }\n return Math.sqrt(sumSquaredErrors / observed.length);\n }\n \n function formatEquation(result: RegressionResult): string {\n const params = result.parameters.parameters;\n \n switch (result.method) {\n case 'linear':\n return params.length === 1 ? `y = ${params[0].toFixed(3)}x` : `y = ${params[0].toFixed(3)}x + ${params[1].toFixed(3)}`;\n case 'polynomial':\n let equation = 'y = ';\n for (let i = params.length - 1; i >= 0; i--) {\n if (params[i] !== 0) {\n if (i === 0) {\n equation += params[i].toFixed(3);\n } else if (i === 1) {\n equation += `${params[i].toFixed(3)}x + `;\n } else {\n equation += `${params[i].toFixed(3)}x^${i} + `;\n }\n }\n }\n return equation.replace(' + ', '').trim();\n case 'exponential':\n return `y = ${params[0].toFixed(3)} * exp(${params[1].toFixed(3)}x) + ${params[2]?.toFixed(3) || 0}`;\n case 'gaussian':\n return `y = ${params[0].toFixed(3)} * exp(-((x - ${params[1].toFixed(3)})² / (2 * ${params[2].toFixed(3)}²))) + ${params[3]?.toFixed(3) || 0}`;\n default:\n return 'y = f(x, parameters)';\n }\n }\n \n // ============================================\n // Event Handlers\n // ============================================\n \n function handleDataUpdate(context: PluginContext, event: DataUpdateEvent): void {\n const { seriesId } = event;\n \n if (realtimeSeries.has(seriesId)) {\n // Debounce fitting\n const timer = debounceTimers.get(seriesId);\n if (timer) {\n clearTimeout(timer);\n }\n \n const newTimer = setTimeout(() => {\n const chart = context.chart;\n if (chart) {\n const series = chart.getSeries(seriesId);\n if (series) {\n const data = series.getData();\n if (data && data.x.length > 0) {\n fit(seriesId, {\n x: data.x,\n y: data.y\n });\n \n // Update visualization\n api.visualizeFit(seriesId);\n }\n }\n }\n }, 500); // 500ms debounce\n \n debounceTimers.set(seriesId, newTimer);\n }\n }\n \n // ============================================\n // Plugin Definition\n // ============================================\n \n return {\n manifest: manifestRegression,\n \n onInit(context: PluginContext) {\n ctx = context;\n ctx.log.info('Regression plugin initialized');\n },\n \n onConfigChange(_context: PluginContext, _newConfig: PluginRegressionConfig) {\n // Handle config changes\n },\n \n onBeforeRender(_context: PluginContext, _event: BeforeRenderEvent) {\n // Handle pre-render tasks if needed\n },\n \n onDataUpdate: handleDataUpdate,\n \n onDestroy(_context: PluginContext) {\n // Clean up timers\n for (const timer of debounceTimers.values()) {\n clearTimeout(timer);\n }\n debounceTimers.clear();\n \n // Clear results\n regressionResults.clear();\n realtimeSeries.clear();\n },\n \n api\n };\n}\n\nexport default PluginRegression;\n\n// Re-export types for convenience\nexport type {\n RegressionMethod,\n RegressionData,\n RegressionParameters,\n RegressionStatistics,\n RegressionResult,\n LinearRegressionConfig,\n PolynomialRegressionConfig,\n ExponentialRegressionConfig,\n LogarithmicRegressionConfig,\n PowerRegressionConfig,\n GaussianRegressionConfig,\n LorentzianRegressionConfig,\n SigmoidRegressionConfig,\n CustomRegressionConfig,\n PluginRegressionConfig,\n RegressionCompletedEvent,\n RegressionFailedEvent,\n ModelSelectedEvent,\n RegressionAPI\n} from './types';"],"names":["toArray","data","toFloat32Array","calculateMean","sum","val","calculateVariance","mean","calculateRSquared","observed","fitted","meanObserved","ssRes","ssTot","i","calculateAdjustedRSquared","rSquared","n","k","calculateRMSE","sumSquaredErrors","linearRegression","config","startTime","x","y","weights","forceOrigin","numerator","denominator","weight","slope","fittedValues","xi","residuals","yi","adjustedRSquared","rmse","r","sumX","sumY","sumXY","sumX2","sumWeights","meanX","meanY","intercept","polynomialRegression","degree","m","X","row","j","parameters","solveLeastSquares","value","exponentialRegression","_config","offset","transformedY","adjusted","linearResult","rate","logAmplitude","amplitude","gaussianRegression","std","learningRate","maxIterations","tolerance","iter","gradAmplitude","gradMean","gradStd","gradOffset","totalError","exponent","predicted","error","expTerm","regularization","XtX","Xty","solveLinearSystem","manifestRegression","DEFAULT_CONFIG","PluginRegression","userConfig","ctx","regressionResults","realtimeSeries","debounceTimers","fit","seriesId","method","methodConfig","api","result","logX","logY","logXPow","fitAndCompare","methods","configs","results","criteria","a","b","autoFit","candidateMethods","bestResult","xValues","resultIndex","params","predictions","_level","margin","lower","p","upper","predArray","chart","series","timer","methodsUsed","totalFittings","allMethodsUsed","allRSquared","allProcessingTimes","t","newConfig","fitSeriesId","equation","formatEquation","annotationId","allMethods","format","csv","matlab","_a","_b","handleDataUpdate","context","event","newTimer","_context","_newConfig","_event"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { B as r, C as s, P as t, a as c, e as n, b as o, d as u, c as g, P as m } from "../index-BMiZoKmm.js";
1
+ import { B as r, C as s, P as t, a as c, e as n, b as o, d as u, c as g, P as m } from "../index-BgrvqltV.js";
2
2
  export {
3
3
  r as BackpressureManager,
4
4
  s as CircularBuffer,
@@ -1,4 +1,4 @@
1
- import { D as l, b as s, P as e, T, P as t } from "../index-qunX30Xu.js";
1
+ import { D as l, b as s, P as e, T, P as t } from "../index-B7PTX94B.js";
2
2
  export {
3
3
  l as DeltaTool,
4
4
  s as PeakTool,
package/dist/react.js CHANGED
@@ -1,20 +1,17 @@
1
1
  import { jsx as O, jsxs as A } from "react/jsx-runtime";
2
2
  import { useState as R, useRef as m, useEffect as b, useCallback as E, forwardRef as F, useImperativeHandle as K, useMemo as T } from "react";
3
- import { c as j, a as G, i as H, r as J, b as X } from "./chartSyncBridge-DbWrwtyP.js";
4
- import { p as B, o as Y, s as Z, d as q } from "./optionsSync-QUiN4Inw.js";
5
- import "./ChartCore-BpzRvN4Y.js";
6
- import "./index-x4stH3jD.js";
7
- import "./symbols-DT0eLlpW.js";
3
+ import { p as B, o as j, s as G, d as H } from "./optionsSync-QUiN4Inw.js";
4
+ import { c as J, a as X, i as Y, r as Z, b as q } from "./chartSyncBridge-D_rCtbFq.js";
8
5
  import { a as D, u as L } from "./a11y-Bw6urYpr.js";
9
- import { c as Q } from "./createStackedChart-Dm-YqUT7.js";
10
- import { s as P, b as z, a as U } from "./stackedSync-tnrunZMt.js";
6
+ import { s as P, b as z, a as Q } from "./stackedSync-tnrunZMt.js";
7
+ import { c as U } from "./createStackedChart-DqcLCFGS.js";
11
8
  function I(a, t = {}) {
12
- const [l, n] = R(null), [i, p] = R(!1), [S, C] = R(null), [y, d] = R(null), o = m(null), c = m(null), v = m(t), x = m(B(t));
9
+ const [l, n] = R(null), [i, p] = R(!1), [S, C] = R(null), [y, d] = R(null), c = m(null), o = m(null), v = m(t), x = m(B(t));
13
10
  v.current = t, b(() => {
14
11
  const r = a.current;
15
12
  if (r) {
16
13
  try {
17
- const e = j(
14
+ const e = J(
18
15
  r,
19
16
  v.current,
20
17
  {
@@ -22,35 +19,35 @@ function I(a, t = {}) {
22
19
  onError: C
23
20
  }
24
21
  );
25
- o.current = e.chart, c.current = e.destroy, n(e.chart), p(!0), d(e.getBounds()), C(null), x.current = B(v.current);
22
+ c.current = e.chart, o.current = e.destroy, n(e.chart), p(!0), d(e.getBounds()), C(null), x.current = B(v.current);
26
23
  } catch (e) {
27
24
  console.error("[useVeloPlot] Failed to initialize chart:", e), C(e instanceof Error ? e : new Error(String(e))), p(!1);
28
25
  }
29
26
  return () => {
30
27
  var e;
31
- (e = c.current) == null || e.call(c), c.current = null, o.current = null, n(null), p(!1);
28
+ (e = o.current) == null || e.call(o), o.current = null, c.current = null, n(null), p(!1);
32
29
  };
33
30
  }
34
31
  }, [a]), b(() => {
35
- const r = o.current;
32
+ const r = c.current;
36
33
  if (!r || !i) return;
37
34
  const e = B(t), k = x.current;
38
- Y(k, e) && (Z(r, k, e), x.current = e);
35
+ j(k, e) && (G(r, k, e), x.current = e);
39
36
  });
40
37
  const s = E((r) => {
41
- const e = o.current;
38
+ const e = c.current;
42
39
  e && (e.addSeries(r), d(e.getViewBounds()));
43
40
  }, []), f = E((r, e) => {
44
41
  var k;
45
- (k = o.current) == null || k.updateSeries(r, e);
42
+ (k = c.current) == null || k.updateSeries(r, e);
46
43
  }, []), g = E((r) => {
47
44
  var e;
48
- (e = o.current) == null || e.removeSeries(r);
45
+ (e = c.current) == null || e.removeSeries(r);
49
46
  }, []), u = E((r) => {
50
47
  var e;
51
- (e = o.current) == null || e.zoom(r);
48
+ (e = c.current) == null || e.zoom(r);
52
49
  }, []), h = E(() => {
53
- const r = o.current;
50
+ const r = c.current;
54
51
  r && (r.resetZoom(), d(r.getViewBounds()));
55
52
  }, []);
56
53
  return {
@@ -76,8 +73,8 @@ const N = F(
76
73
  className: C = "",
77
74
  style: y = {},
78
75
  debug: d = !1,
79
- ariaLabel: o,
80
- keyboardNav: c = !0,
76
+ ariaLabel: c,
77
+ keyboardNav: o = !0,
81
78
  ...v
82
79
  }, x) {
83
80
  const s = m(null), f = m(/* @__PURE__ */ new Map()), g = m(null), {
@@ -98,7 +95,7 @@ const N = F(
98
95
  }),
99
96
  [u, $, r]
100
97
  ), b(() => {
101
- !h || !u || (f.current = q(
98
+ !h || !u || (f.current = H(
102
99
  { addSeries: e, updateSeries: k, removeSeries: V, autoScale: () => u.autoScale() },
103
100
  t,
104
101
  f.current
@@ -122,22 +119,22 @@ const N = F(
122
119
  const M = s.current;
123
120
  if (!(!h || !u || !M))
124
121
  return g.current = D(M, u, {
125
- label: o,
122
+ label: c,
126
123
  series: t,
127
124
  bounds: r,
128
- enableKeyboard: c
125
+ enableKeyboard: o
129
126
  }), () => {
130
127
  var w;
131
128
  (w = g.current) == null || w.cleanup(), g.current = null;
132
129
  };
133
- }, [h, u, c, o]), b(() => {
130
+ }, [h, u, o, c, r, t]), b(() => {
134
131
  const M = s.current;
135
132
  !M || !g.current || L(M, g.current.srTable, {
136
- label: o,
133
+ label: c,
137
134
  series: t,
138
135
  bounds: r
139
136
  });
140
- }, [t, r, o]);
137
+ }, [t, r, c]);
141
138
  const _ = T(
142
139
  () => ({
143
140
  position: "relative",
@@ -196,39 +193,39 @@ const N = F(
196
193
  }
197
194
  );
198
195
  function W(a) {
199
- const t = m(null), l = m(null), n = m(null), [i, p] = R(null), [S, C] = R(!1), y = m(a), d = m(P(a.panes)), o = m(/* @__PURE__ */ new Map());
196
+ const t = m(null), l = m(null), n = m(null), [i, p] = R(null), [S, C] = R(!1), y = m(a), d = m(P(a.panes)), c = m(/* @__PURE__ */ new Map());
200
197
  y.current = a;
201
- const c = E(() => {
198
+ const o = E(() => {
202
199
  var g;
203
200
  const s = t.current;
204
201
  if (!s) return;
205
202
  (g = n.current) == null || g.call(n);
206
- const f = Q({
203
+ const f = U({
207
204
  ...y.current,
208
205
  container: s
209
206
  });
210
207
  l.current = f, n.current = () => {
211
208
  f.destroy(), l.current = null;
212
- }, p(f), d.current = P(y.current.panes), o.current = z(
209
+ }, p(f), d.current = P(y.current.panes), c.current = z(
213
210
  f,
214
211
  y.current.panes,
215
212
  /* @__PURE__ */ new Map()
216
213
  ), f.whenReady().then(() => C(!0));
217
214
  }, []);
218
- b(() => (c(), () => {
215
+ b(() => (o(), () => {
219
216
  var s;
220
217
  C(!1), (s = n.current) == null || s.call(n), n.current = null, p(null);
221
- }), [c]), b(() => {
218
+ }), [o]), b(() => {
222
219
  const s = l.current;
223
220
  if (!s || !S) return;
224
221
  if (P(a.panes) !== d.current) {
225
- c();
222
+ o();
226
223
  return;
227
224
  }
228
- U(s, a), o.current = z(
225
+ Q(s, a), c.current = z(
229
226
  s,
230
227
  a.panes,
231
- o.current
228
+ c.current
232
229
  );
233
230
  });
234
231
  const v = E((s) => {
@@ -240,7 +237,7 @@ function W(a) {
240
237
  }, []);
241
238
  return { containerRef: t, stack: i, isReady: S, fitAll: v, resetAll: x };
242
239
  }
243
- const fe = F(
240
+ const ae = F(
244
241
  function({
245
242
  width: t = "100%",
246
243
  height: l = 480,
@@ -251,14 +248,14 @@ const fe = F(
251
248
  drawingTools: C,
252
249
  ariaLabel: y,
253
250
  panes: d,
254
- ...o
255
- }, c) {
251
+ ...c
252
+ }, o) {
256
253
  const { containerRef: v, stack: x, isReady: s, fitAll: f, resetAll: g } = W({
257
254
  panes: d,
258
- ...o
255
+ ...c
259
256
  });
260
257
  K(
261
- c,
258
+ o,
262
259
  () => ({
263
260
  getStack: () => x,
264
261
  fitAll: () => f(),
@@ -289,19 +286,19 @@ const fe = F(
289
286
  );
290
287
  }
291
288
  );
292
- function de(a, t, l = {}) {
289
+ function le(a, t, l = {}) {
293
290
  const [n, i] = R(null), [p, S] = R(!1), [C, y] = R(null), d = m(n);
294
291
  return d.current = n, b(() => {
295
292
  if (!a) return;
296
- let o = !1;
297
- return S(!0), y(null), G(a, t, l).then((c) => {
298
- o || (i(c), S(!1));
299
- }).catch((c) => {
300
- o || (y(c instanceof Error ? c : new Error(String(c))), S(!1));
293
+ let c = !1;
294
+ return S(!0), y(null), X(a, t, l).then((o) => {
295
+ c || (i(o), S(!1));
296
+ }).catch((o) => {
297
+ c || (y(o instanceof Error ? o : new Error(String(o))), S(!1));
301
298
  }), () => {
302
- o = !0;
303
- const c = d.current;
304
- c && !H(a) && J(a, c.id);
299
+ c = !0;
300
+ const o = d.current;
301
+ o && !Y(a) && Z(a, o.id);
305
302
  };
306
303
  }, [a, t, JSON.stringify(l)]), { result: n, isLoading: p, error: C };
307
304
  }
@@ -312,23 +309,23 @@ function ee(a, t) {
312
309
  n(null);
313
310
  return;
314
311
  }
315
- const i = X(a, t);
312
+ const i = q(a, t);
316
313
  return n(i.group), () => {
317
314
  i.destroy(), n(null);
318
315
  };
319
316
  }, [a, JSON.stringify(t)]), { group: l };
320
317
  }
321
- const pe = ee, Se = N, ye = N, me = I, xe = I;
318
+ const ie = ee, fe = N, de = N, pe = I, Se = I;
322
319
  export {
323
- ye as SciChart,
324
- Se as SciPlot,
325
- fe as StackedPlot,
320
+ de as SciChart,
321
+ fe as SciPlot,
322
+ ae as StackedPlot,
326
323
  N as VeloPlot,
327
- pe as useChartGroup,
324
+ ie as useChartGroup,
328
325
  ee as useChartSync,
329
- de as useIndicator,
330
- xe as useSciChart,
331
- me as useSciPlot,
326
+ le as useIndicator,
327
+ Se as useSciChart,
328
+ pe as useSciPlot,
332
329
  W as useStackedPlot,
333
330
  I as useVeloPlot
334
331
  };