@chartgpu/chartgpu 0.2.5

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 (273) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +208 -0
  3. package/dist/ChartGPU.d.ts +146 -0
  4. package/dist/ChartGPU.d.ts.map +1 -0
  5. package/dist/components/createAnnotationConfigDialog.d.ts +24 -0
  6. package/dist/components/createAnnotationConfigDialog.d.ts.map +1 -0
  7. package/dist/components/createDataZoomSlider.d.ts +14 -0
  8. package/dist/components/createDataZoomSlider.d.ts.map +1 -0
  9. package/dist/components/createLegend.d.ts +9 -0
  10. package/dist/components/createLegend.d.ts.map +1 -0
  11. package/dist/components/createTextOverlay.d.ts +17 -0
  12. package/dist/components/createTextOverlay.d.ts.map +1 -0
  13. package/dist/components/createTooltip.d.ts +12 -0
  14. package/dist/components/createTooltip.d.ts.map +1 -0
  15. package/dist/components/formatTooltip.d.ts +19 -0
  16. package/dist/components/formatTooltip.d.ts.map +1 -0
  17. package/dist/config/OptionResolver.d.ts +137 -0
  18. package/dist/config/OptionResolver.d.ts.map +1 -0
  19. package/dist/config/defaults.d.ts +56 -0
  20. package/dist/config/defaults.d.ts.map +1 -0
  21. package/dist/config/types.d.ts +553 -0
  22. package/dist/config/types.d.ts.map +1 -0
  23. package/dist/core/GPUContext.d.ts +242 -0
  24. package/dist/core/GPUContext.d.ts.map +1 -0
  25. package/dist/core/RenderScheduler.d.ts +174 -0
  26. package/dist/core/RenderScheduler.d.ts.map +1 -0
  27. package/dist/core/createAnimationController.d.ts +15 -0
  28. package/dist/core/createAnimationController.d.ts.map +1 -0
  29. package/dist/core/createRenderCoordinator.d.ts +78 -0
  30. package/dist/core/createRenderCoordinator.d.ts.map +1 -0
  31. package/dist/core/renderCoordinator/animation/animationHelpers.d.ts +183 -0
  32. package/dist/core/renderCoordinator/animation/animationHelpers.d.ts.map +1 -0
  33. package/dist/core/renderCoordinator/annotations/processAnnotations.d.ts +88 -0
  34. package/dist/core/renderCoordinator/annotations/processAnnotations.d.ts.map +1 -0
  35. package/dist/core/renderCoordinator/axis/axisLabelHelpers.d.ts +91 -0
  36. package/dist/core/renderCoordinator/axis/axisLabelHelpers.d.ts.map +1 -0
  37. package/dist/core/renderCoordinator/axis/computeAxisTicks.d.ts +53 -0
  38. package/dist/core/renderCoordinator/axis/computeAxisTicks.d.ts.map +1 -0
  39. package/dist/core/renderCoordinator/data/computeVisibleSlice.d.ts +66 -0
  40. package/dist/core/renderCoordinator/data/computeVisibleSlice.d.ts.map +1 -0
  41. package/dist/core/renderCoordinator/gpu/textureManager.d.ts +69 -0
  42. package/dist/core/renderCoordinator/gpu/textureManager.d.ts.map +1 -0
  43. package/dist/core/renderCoordinator/interaction/interactionHelpers.d.ts +160 -0
  44. package/dist/core/renderCoordinator/interaction/interactionHelpers.d.ts.map +1 -0
  45. package/dist/core/renderCoordinator/render/renderAnnotationLabels.d.ts +36 -0
  46. package/dist/core/renderCoordinator/render/renderAnnotationLabels.d.ts.map +1 -0
  47. package/dist/core/renderCoordinator/render/renderAxisLabels.d.ts +40 -0
  48. package/dist/core/renderCoordinator/render/renderAxisLabels.d.ts.map +1 -0
  49. package/dist/core/renderCoordinator/render/renderOverlays.d.ts +70 -0
  50. package/dist/core/renderCoordinator/render/renderOverlays.d.ts.map +1 -0
  51. package/dist/core/renderCoordinator/render/renderSeries.d.ts +146 -0
  52. package/dist/core/renderCoordinator/render/renderSeries.d.ts.map +1 -0
  53. package/dist/core/renderCoordinator/renderers/rendererPool.d.ts +112 -0
  54. package/dist/core/renderCoordinator/renderers/rendererPool.d.ts.map +1 -0
  55. package/dist/core/renderCoordinator/types.d.ts +19 -0
  56. package/dist/core/renderCoordinator/types.d.ts.map +1 -0
  57. package/dist/core/renderCoordinator/ui/tooltipLegendHelpers.d.ts +104 -0
  58. package/dist/core/renderCoordinator/ui/tooltipLegendHelpers.d.ts.map +1 -0
  59. package/dist/core/renderCoordinator/utils/axisUtils.d.ts +122 -0
  60. package/dist/core/renderCoordinator/utils/axisUtils.d.ts.map +1 -0
  61. package/dist/core/renderCoordinator/utils/boundsComputation.d.ts +69 -0
  62. package/dist/core/renderCoordinator/utils/boundsComputation.d.ts.map +1 -0
  63. package/dist/core/renderCoordinator/utils/canvasUtils.d.ts +52 -0
  64. package/dist/core/renderCoordinator/utils/canvasUtils.d.ts.map +1 -0
  65. package/dist/core/renderCoordinator/utils/dataPointUtils.d.ts +71 -0
  66. package/dist/core/renderCoordinator/utils/dataPointUtils.d.ts.map +1 -0
  67. package/dist/core/renderCoordinator/utils/index.d.ts +12 -0
  68. package/dist/core/renderCoordinator/utils/index.d.ts.map +1 -0
  69. package/dist/core/renderCoordinator/utils/timeAxisUtils.d.ts +149 -0
  70. package/dist/core/renderCoordinator/utils/timeAxisUtils.d.ts.map +1 -0
  71. package/dist/core/renderCoordinator/zoom/zoomHelpers.d.ts +129 -0
  72. package/dist/core/renderCoordinator/zoom/zoomHelpers.d.ts.map +1 -0
  73. package/dist/data/cartesianData.d.ts +72 -0
  74. package/dist/data/cartesianData.d.ts.map +1 -0
  75. package/dist/data/createDataStore.d.ts +27 -0
  76. package/dist/data/createDataStore.d.ts.map +1 -0
  77. package/dist/data/createStreamBuffer.d.ts +20 -0
  78. package/dist/data/createStreamBuffer.d.ts.map +1 -0
  79. package/dist/data/lttbSample.d.ts +5 -0
  80. package/dist/data/lttbSample.d.ts.map +1 -0
  81. package/dist/data/ohlcSample.d.ts +21 -0
  82. package/dist/data/ohlcSample.d.ts.map +1 -0
  83. package/dist/data/packDataPoints.d.ts +65 -0
  84. package/dist/data/packDataPoints.d.ts.map +1 -0
  85. package/dist/data/sampleSeries.d.ts +20 -0
  86. package/dist/data/sampleSeries.d.ts.map +1 -0
  87. package/dist/esm/ChartGPUWorkerController-B50J-8sx.js +772 -0
  88. package/dist/esm/ChartGPUWorkerController-B50J-8sx.js.map +1 -0
  89. package/dist/esm/OptionResolver-R_gJDRSD.js +7150 -0
  90. package/dist/esm/OptionResolver-R_gJDRSD.js.map +1 -0
  91. package/dist/esm/assets/worker-entry-Wg897auv.js +779 -0
  92. package/dist/esm/assets/worker-entry-Wg897auv.js.map +1 -0
  93. package/dist/esm/createChartInWorker-C4fEeJL8.js +1224 -0
  94. package/dist/esm/createChartInWorker-C4fEeJL8.js.map +1 -0
  95. package/dist/esm/index.js +795 -0
  96. package/dist/esm/index.js.map +1 -0
  97. package/dist/index.cjs +1270 -0
  98. package/dist/index.cjs.map +1 -0
  99. package/dist/index.d.ts +30 -0
  100. package/dist/index.d.ts.map +1 -0
  101. package/dist/index.js +10504 -0
  102. package/dist/index.js.map +1 -0
  103. package/dist/interaction/createAnnotationAuthoring.d.ts +115 -0
  104. package/dist/interaction/createAnnotationAuthoring.d.ts.map +1 -0
  105. package/dist/interaction/createAnnotationDragHandler.d.ts +28 -0
  106. package/dist/interaction/createAnnotationDragHandler.d.ts.map +1 -0
  107. package/dist/interaction/createAnnotationHitTester.d.ts +32 -0
  108. package/dist/interaction/createAnnotationHitTester.d.ts.map +1 -0
  109. package/dist/interaction/createChartSync.d.ts +27 -0
  110. package/dist/interaction/createChartSync.d.ts.map +1 -0
  111. package/dist/interaction/createEventManager.d.ts +24 -0
  112. package/dist/interaction/createEventManager.d.ts.map +1 -0
  113. package/dist/interaction/createHoverState.d.ts +20 -0
  114. package/dist/interaction/createHoverState.d.ts.map +1 -0
  115. package/dist/interaction/createInsideZoom.d.ts +14 -0
  116. package/dist/interaction/createInsideZoom.d.ts.map +1 -0
  117. package/dist/interaction/createZoomState.d.ts +63 -0
  118. package/dist/interaction/createZoomState.d.ts.map +1 -0
  119. package/dist/interaction/findCandlestick.d.ts +41 -0
  120. package/dist/interaction/findCandlestick.d.ts.map +1 -0
  121. package/dist/interaction/findNearestPoint.d.ts +61 -0
  122. package/dist/interaction/findNearestPoint.d.ts.map +1 -0
  123. package/dist/interaction/findPieSlice.d.ts +36 -0
  124. package/dist/interaction/findPieSlice.d.ts.map +1 -0
  125. package/dist/interaction/findPointsAtX.d.ts +37 -0
  126. package/dist/interaction/findPointsAtX.d.ts.map +1 -0
  127. package/dist/renderers/createAnnotationMarkerRenderer.d.ts +58 -0
  128. package/dist/renderers/createAnnotationMarkerRenderer.d.ts.map +1 -0
  129. package/dist/renderers/createAreaRenderer.d.ts +19 -0
  130. package/dist/renderers/createAreaRenderer.d.ts.map +1 -0
  131. package/dist/renderers/createAxisRenderer.d.ts +19 -0
  132. package/dist/renderers/createAxisRenderer.d.ts.map +1 -0
  133. package/dist/renderers/createBarRenderer.d.ts +20 -0
  134. package/dist/renderers/createBarRenderer.d.ts.map +1 -0
  135. package/dist/renderers/createCandlestickRenderer.d.ts +19 -0
  136. package/dist/renderers/createCandlestickRenderer.d.ts.map +1 -0
  137. package/dist/renderers/createCrosshairRenderer.d.ts +43 -0
  138. package/dist/renderers/createCrosshairRenderer.d.ts.map +1 -0
  139. package/dist/renderers/createGridRenderer.d.ts +45 -0
  140. package/dist/renderers/createGridRenderer.d.ts.map +1 -0
  141. package/dist/renderers/createHighlightRenderer.d.ts +41 -0
  142. package/dist/renderers/createHighlightRenderer.d.ts.map +1 -0
  143. package/dist/renderers/createLineRenderer.d.ts +18 -0
  144. package/dist/renderers/createLineRenderer.d.ts.map +1 -0
  145. package/dist/renderers/createPieRenderer.d.ts +18 -0
  146. package/dist/renderers/createPieRenderer.d.ts.map +1 -0
  147. package/dist/renderers/createReferenceLineRenderer.d.ts +81 -0
  148. package/dist/renderers/createReferenceLineRenderer.d.ts.map +1 -0
  149. package/dist/renderers/createScatterDensityRenderer.d.ts +14 -0
  150. package/dist/renderers/createScatterDensityRenderer.d.ts.map +1 -0
  151. package/dist/renderers/createScatterRenderer.d.ts +20 -0
  152. package/dist/renderers/createScatterRenderer.d.ts.map +1 -0
  153. package/dist/renderers/rendererUtils.d.ts +100 -0
  154. package/dist/renderers/rendererUtils.d.ts.map +1 -0
  155. package/dist/themes/darkTheme.d.ts +11 -0
  156. package/dist/themes/darkTheme.d.ts.map +1 -0
  157. package/dist/themes/index.d.ts +8 -0
  158. package/dist/themes/index.d.ts.map +1 -0
  159. package/dist/themes/lightTheme.d.ts +11 -0
  160. package/dist/themes/lightTheme.d.ts.map +1 -0
  161. package/dist/themes/types.d.ts +14 -0
  162. package/dist/themes/types.d.ts.map +1 -0
  163. package/dist/types/ChartGPU.d.ts +99 -0
  164. package/dist/types/ChartGPU.d.ts.map +1 -0
  165. package/dist/types/components/createDataZoomSlider.d.ts +14 -0
  166. package/dist/types/components/createDataZoomSlider.d.ts.map +1 -0
  167. package/dist/types/components/createLegend.d.ts +9 -0
  168. package/dist/types/components/createLegend.d.ts.map +1 -0
  169. package/dist/types/components/createTextOverlay.d.ts +17 -0
  170. package/dist/types/components/createTextOverlay.d.ts.map +1 -0
  171. package/dist/types/components/createTooltip.d.ts +12 -0
  172. package/dist/types/components/createTooltip.d.ts.map +1 -0
  173. package/dist/types/components/formatTooltip.d.ts +19 -0
  174. package/dist/types/components/formatTooltip.d.ts.map +1 -0
  175. package/dist/types/config/OptionResolver.d.ts +134 -0
  176. package/dist/types/config/OptionResolver.d.ts.map +1 -0
  177. package/dist/types/config/defaults.d.ts +55 -0
  178. package/dist/types/config/defaults.d.ts.map +1 -0
  179. package/dist/types/config/types.d.ts +485 -0
  180. package/dist/types/config/types.d.ts.map +1 -0
  181. package/dist/types/core/GPUContext.d.ts +242 -0
  182. package/dist/types/core/GPUContext.d.ts.map +1 -0
  183. package/dist/types/core/RenderScheduler.d.ts +174 -0
  184. package/dist/types/core/RenderScheduler.d.ts.map +1 -0
  185. package/dist/types/core/createAnimationController.d.ts +15 -0
  186. package/dist/types/core/createAnimationController.d.ts.map +1 -0
  187. package/dist/types/core/createRenderCoordinator.d.ts +129 -0
  188. package/dist/types/core/createRenderCoordinator.d.ts.map +1 -0
  189. package/dist/types/data/createDataStore.d.ts +33 -0
  190. package/dist/types/data/createDataStore.d.ts.map +1 -0
  191. package/dist/types/data/createStreamBuffer.d.ts +20 -0
  192. package/dist/types/data/createStreamBuffer.d.ts.map +1 -0
  193. package/dist/types/data/lttbSample.d.ts +5 -0
  194. package/dist/types/data/lttbSample.d.ts.map +1 -0
  195. package/dist/types/data/ohlcSample.d.ts +21 -0
  196. package/dist/types/data/ohlcSample.d.ts.map +1 -0
  197. package/dist/types/data/packDataPoints.d.ts +79 -0
  198. package/dist/types/data/packDataPoints.d.ts.map +1 -0
  199. package/dist/types/data/sampleSeries.d.ts +3 -0
  200. package/dist/types/data/sampleSeries.d.ts.map +1 -0
  201. package/dist/types/index.d.ts +35 -0
  202. package/dist/types/index.d.ts.map +1 -0
  203. package/dist/types/interaction/createChartSync.d.ts +12 -0
  204. package/dist/types/interaction/createChartSync.d.ts.map +1 -0
  205. package/dist/types/interaction/createEventManager.d.ts +24 -0
  206. package/dist/types/interaction/createEventManager.d.ts.map +1 -0
  207. package/dist/types/interaction/createHoverState.d.ts +20 -0
  208. package/dist/types/interaction/createHoverState.d.ts.map +1 -0
  209. package/dist/types/interaction/createInsideZoom.d.ts +14 -0
  210. package/dist/types/interaction/createInsideZoom.d.ts.map +1 -0
  211. package/dist/types/interaction/createZoomState.d.ts +63 -0
  212. package/dist/types/interaction/createZoomState.d.ts.map +1 -0
  213. package/dist/types/interaction/findCandlestick.d.ts +41 -0
  214. package/dist/types/interaction/findCandlestick.d.ts.map +1 -0
  215. package/dist/types/interaction/findNearestPoint.d.ts +61 -0
  216. package/dist/types/interaction/findNearestPoint.d.ts.map +1 -0
  217. package/dist/types/interaction/findPieSlice.d.ts +36 -0
  218. package/dist/types/interaction/findPieSlice.d.ts.map +1 -0
  219. package/dist/types/interaction/findPointsAtX.d.ts +37 -0
  220. package/dist/types/interaction/findPointsAtX.d.ts.map +1 -0
  221. package/dist/types/renderers/createAreaRenderer.d.ts +18 -0
  222. package/dist/types/renderers/createAreaRenderer.d.ts.map +1 -0
  223. package/dist/types/renderers/createAxisRenderer.d.ts +19 -0
  224. package/dist/types/renderers/createAxisRenderer.d.ts.map +1 -0
  225. package/dist/types/renderers/createBarRenderer.d.ts +20 -0
  226. package/dist/types/renderers/createBarRenderer.d.ts.map +1 -0
  227. package/dist/types/renderers/createCandlestickRenderer.d.ts +19 -0
  228. package/dist/types/renderers/createCandlestickRenderer.d.ts.map +1 -0
  229. package/dist/types/renderers/createCrosshairRenderer.d.ts +43 -0
  230. package/dist/types/renderers/createCrosshairRenderer.d.ts.map +1 -0
  231. package/dist/types/renderers/createGridRenderer.d.ts +45 -0
  232. package/dist/types/renderers/createGridRenderer.d.ts.map +1 -0
  233. package/dist/types/renderers/createHighlightRenderer.d.ts +41 -0
  234. package/dist/types/renderers/createHighlightRenderer.d.ts.map +1 -0
  235. package/dist/types/renderers/createLineRenderer.d.ts +18 -0
  236. package/dist/types/renderers/createLineRenderer.d.ts.map +1 -0
  237. package/dist/types/renderers/createPieRenderer.d.ts +18 -0
  238. package/dist/types/renderers/createPieRenderer.d.ts.map +1 -0
  239. package/dist/types/renderers/createScatterDensityRenderer.d.ts +14 -0
  240. package/dist/types/renderers/createScatterDensityRenderer.d.ts.map +1 -0
  241. package/dist/types/renderers/createScatterRenderer.d.ts +19 -0
  242. package/dist/types/renderers/createScatterRenderer.d.ts.map +1 -0
  243. package/dist/types/renderers/rendererUtils.d.ts +100 -0
  244. package/dist/types/renderers/rendererUtils.d.ts.map +1 -0
  245. package/dist/types/themes/darkTheme.d.ts +11 -0
  246. package/dist/types/themes/darkTheme.d.ts.map +1 -0
  247. package/dist/types/themes/index.d.ts +8 -0
  248. package/dist/types/themes/index.d.ts.map +1 -0
  249. package/dist/types/themes/lightTheme.d.ts +11 -0
  250. package/dist/types/themes/lightTheme.d.ts.map +1 -0
  251. package/dist/types/themes/types.d.ts +14 -0
  252. package/dist/types/themes/types.d.ts.map +1 -0
  253. package/dist/types/utils/axisLabelStyling.d.ts +27 -0
  254. package/dist/types/utils/axisLabelStyling.d.ts.map +1 -0
  255. package/dist/types/utils/checkWebGPU.d.ts +39 -0
  256. package/dist/types/utils/checkWebGPU.d.ts.map +1 -0
  257. package/dist/types/utils/colors.d.ts +14 -0
  258. package/dist/types/utils/colors.d.ts.map +1 -0
  259. package/dist/types/utils/easing.d.ts +9 -0
  260. package/dist/types/utils/easing.d.ts.map +1 -0
  261. package/dist/types/utils/scales.d.ts +79 -0
  262. package/dist/types/utils/scales.d.ts.map +1 -0
  263. package/dist/utils/axisLabelStyling.d.ts +20 -0
  264. package/dist/utils/axisLabelStyling.d.ts.map +1 -0
  265. package/dist/utils/checkWebGPU.d.ts +39 -0
  266. package/dist/utils/checkWebGPU.d.ts.map +1 -0
  267. package/dist/utils/colors.d.ts +14 -0
  268. package/dist/utils/colors.d.ts.map +1 -0
  269. package/dist/utils/easing.d.ts +9 -0
  270. package/dist/utils/easing.d.ts.map +1 -0
  271. package/dist/utils/scales.d.ts +79 -0
  272. package/dist/utils/scales.d.ts.map +1 -0
  273. package/package.json +64 -0
@@ -0,0 +1,242 @@
1
+ /**
2
+ * GPUContext - WebGPU device and adapter management
3
+ *
4
+ * Handles WebGPU initialization, adapter selection, and device creation
5
+ * following WebGPU best practices for resource management and error handling.
6
+ *
7
+ * This module provides both functional and class-based APIs for maximum flexibility.
8
+ */
9
+ /** Canvas types supported by GPUContext. */
10
+ export type SupportedCanvas = HTMLCanvasElement;
11
+ /** Options for GPU context initialization. */
12
+ export interface GPUContextOptions {
13
+ /** DPR for high-DPI displays. Auto-detects from `window.devicePixelRatio`, defaults to 1.0. */
14
+ readonly devicePixelRatio?: number;
15
+ /** Canvas alpha mode. Default: 'opaque' (faster, no transparency). */
16
+ readonly alphaMode?: 'opaque' | 'premultiplied';
17
+ /** GPU power preference for adapter selection. */
18
+ readonly powerPreference?: 'low-power' | 'high-performance';
19
+ }
20
+ /**
21
+ * Represents the state of a GPU context.
22
+ * All properties are readonly to ensure immutability.
23
+ */
24
+ export interface GPUContextState {
25
+ readonly adapter: GPUAdapter | null;
26
+ readonly device: GPUDevice | null;
27
+ readonly initialized: boolean;
28
+ readonly canvas: HTMLCanvasElement | null;
29
+ readonly canvasContext: GPUCanvasContext | null;
30
+ readonly preferredFormat: GPUTextureFormat | null;
31
+ readonly devicePixelRatio: number;
32
+ readonly alphaMode: 'opaque' | 'premultiplied';
33
+ readonly powerPreference: 'low-power' | 'high-performance';
34
+ }
35
+ /** Reliable type guard for DOM canvases (safe when DOM globals are absent). */
36
+ export declare function isHTMLCanvasElement(canvas: HTMLCanvasElement): canvas is HTMLCanvasElement;
37
+ /**
38
+ * Creates a new GPUContext state with initial values.
39
+ *
40
+ * @param canvas - Optional canvas element (HTMLCanvasElement) to configure for WebGPU rendering
41
+ * @param options - Optional configuration for device pixel ratio, alpha mode, and power preference
42
+ * @returns A new GPUContextState instance
43
+ */
44
+ export declare function createGPUContext(canvas?: HTMLCanvasElement, options?: GPUContextOptions): GPUContextState;
45
+ /**
46
+ * Initializes the WebGPU context by requesting an adapter and device.
47
+ * Returns a new state object with initialized values.
48
+ *
49
+ * @param context - The GPU context state to initialize
50
+ * @returns A new GPUContextState with initialized adapter and device
51
+ * @throws {Error} If WebGPU is not available in the browser
52
+ * @throws {Error} If adapter request fails
53
+ * @throws {Error} If device request fails
54
+ * @throws {Error} If already initialized
55
+ */
56
+ export declare function initializeGPUContext(context: GPUContextState): Promise<GPUContextState>;
57
+ /**
58
+ * Gets the current texture from the canvas context.
59
+ *
60
+ * @param context - The GPU context state
61
+ * @returns The current canvas texture
62
+ * @throws {Error} If canvas is not configured or context is not initialized
63
+ *
64
+ * @example
65
+ * ```typescript
66
+ * const texture = getCanvasTexture(context);
67
+ * // Use texture in render pass
68
+ * ```
69
+ */
70
+ export declare function getCanvasTexture(context: GPUContextState): GPUTexture;
71
+ /**
72
+ * Clears the canvas to a solid color.
73
+ * Creates a command encoder, begins a render pass with the specified clear color,
74
+ * ends the pass, and submits it to the queue.
75
+ *
76
+ * @param context - The GPU context state
77
+ * @param r - Red component (0.0 to 1.0)
78
+ * @param g - Green component (0.0 to 1.0)
79
+ * @param b - Blue component (0.0 to 1.0)
80
+ * @param a - Alpha component (0.0 to 1.0)
81
+ * @throws {Error} If canvas is not configured or context is not initialized
82
+ * @throws {Error} If device is not available
83
+ *
84
+ * @example
85
+ * ```typescript
86
+ * // Clear to dark purple (#1a1a2e)
87
+ * clearScreen(context, 0x1a / 255, 0x1a / 255, 0x2e / 255, 1.0);
88
+ * ```
89
+ */
90
+ export declare function clearScreen(context: GPUContextState, r: number, g: number, b: number, a: number): void;
91
+ /**
92
+ * Destroys the WebGPU device and cleans up resources.
93
+ * Returns a new state object with reset values.
94
+ * After calling this, the context must be reinitialized before use.
95
+ *
96
+ * @param context - The GPU context state to destroy
97
+ * @returns A new GPUContextState with reset values
98
+ */
99
+ export declare function destroyGPUContext(context: GPUContextState): GPUContextState;
100
+ /**
101
+ * Convenience function that creates and initializes a GPU context in one step.
102
+ *
103
+ * @param canvas - Optional canvas element (HTMLCanvasElement) to configure for WebGPU rendering
104
+ * @param options - Optional configuration for device pixel ratio, alpha mode, and power preference
105
+ * @returns A fully initialized GPUContextState
106
+ * @throws {Error} If initialization fails
107
+ *
108
+ * @example
109
+ * ```typescript
110
+ * const context = await createGPUContextAsync();
111
+ * const device = context.device;
112
+ * ```
113
+ *
114
+ * @example
115
+ * ```typescript
116
+ * const canvas = document.querySelector('canvas');
117
+ * const context = await createGPUContextAsync(canvas);
118
+ * const texture = getCanvasTexture(context);
119
+ * ```
120
+ */
121
+ export declare function createGPUContextAsync(canvas?: HTMLCanvasElement, options?: GPUContextOptions): Promise<GPUContextState>;
122
+ /**
123
+ * GPUContext class wrapper for backward compatibility.
124
+ *
125
+ * This class provides a class-based API that internally uses the functional implementation.
126
+ * Use the functional API directly for better type safety and immutability.
127
+ */
128
+ export declare class GPUContext {
129
+ private _state;
130
+ /**
131
+ * Gets the WebGPU adapter, or null if not initialized.
132
+ */
133
+ get adapter(): GPUAdapter | null;
134
+ /**
135
+ * Gets the WebGPU device, or null if not initialized.
136
+ */
137
+ get device(): GPUDevice | null;
138
+ /**
139
+ * Checks if the context has been initialized.
140
+ */
141
+ get initialized(): boolean;
142
+ /**
143
+ * Gets the canvas element, or null if not provided.
144
+ */
145
+ get canvas(): SupportedCanvas | null;
146
+ /**
147
+ * Gets the WebGPU canvas context, or null if canvas is not configured.
148
+ */
149
+ get canvasContext(): GPUCanvasContext | null;
150
+ /**
151
+ * Gets the preferred canvas format, or null if canvas is not configured.
152
+ */
153
+ get preferredFormat(): GPUTextureFormat | null;
154
+ /**
155
+ * Gets the device pixel ratio used for canvas sizing.
156
+ */
157
+ get devicePixelRatio(): number;
158
+ /**
159
+ * Gets the canvas alpha mode.
160
+ */
161
+ get alphaMode(): 'opaque' | 'premultiplied';
162
+ /**
163
+ * Gets the GPU power preference.
164
+ */
165
+ get powerPreference(): 'low-power' | 'high-performance';
166
+ /**
167
+ * Creates a new GPUContext instance.
168
+ *
169
+ * @param canvas - Optional canvas element (HTMLCanvasElement) to configure for WebGPU rendering
170
+ * @param options - Optional configuration for device pixel ratio, alpha mode, and power preference
171
+ */
172
+ constructor(canvas?: HTMLCanvasElement, options?: GPUContextOptions);
173
+ /**
174
+ * Initializes the WebGPU context by requesting an adapter and device.
175
+ *
176
+ * @throws {Error} If WebGPU is not available in the browser
177
+ * @throws {Error} If adapter request fails
178
+ * @throws {Error} If device request fails
179
+ * @throws {Error} If already initialized
180
+ */
181
+ initialize(): Promise<void>;
182
+ /**
183
+ * Static factory method to create and initialize a GPUContext instance.
184
+ *
185
+ * @param canvas - Optional canvas element (HTMLCanvasElement) to configure for WebGPU rendering
186
+ * @param options - Optional configuration for device pixel ratio, alpha mode, and power preference
187
+ * @returns A fully initialized GPUContext instance
188
+ * @throws {Error} If initialization fails
189
+ *
190
+ * @example
191
+ * ```typescript
192
+ * const context = await GPUContext.create();
193
+ * const device = context.device;
194
+ * ```
195
+ *
196
+ * @example
197
+ * ```typescript
198
+ * const canvas = document.querySelector('canvas');
199
+ * const context = await GPUContext.create(canvas);
200
+ * const texture = context.getCanvasTexture();
201
+ * ```
202
+ */
203
+ static create(canvas?: HTMLCanvasElement, options?: GPUContextOptions): Promise<GPUContext>;
204
+ /**
205
+ * Gets the current texture from the canvas context.
206
+ *
207
+ * @returns The current canvas texture
208
+ * @throws {Error} If canvas is not configured or context is not initialized
209
+ *
210
+ * @example
211
+ * ```typescript
212
+ * const texture = context.getCanvasTexture();
213
+ * // Use texture in render pass
214
+ * ```
215
+ */
216
+ getCanvasTexture(): GPUTexture;
217
+ /**
218
+ * Clears the canvas to a solid color.
219
+ * Creates a command encoder, begins a render pass with the specified clear color,
220
+ * ends the pass, and submits it to the queue.
221
+ *
222
+ * @param r - Red component (0.0 to 1.0)
223
+ * @param g - Green component (0.0 to 1.0)
224
+ * @param b - Blue component (0.0 to 1.0)
225
+ * @param a - Alpha component (0.0 to 1.0)
226
+ * @throws {Error} If canvas is not configured or context is not initialized
227
+ * @throws {Error} If device is not available
228
+ *
229
+ * @example
230
+ * ```typescript
231
+ * // Clear to dark purple (#1a1a2e)
232
+ * context.clearScreen(0x1a / 255, 0x1a / 255, 0x2e / 255, 1.0);
233
+ * ```
234
+ */
235
+ clearScreen(r: number, g: number, b: number, a: number): void;
236
+ /**
237
+ * Destroys the WebGPU device and cleans up resources.
238
+ * After calling destroy(), the context must be reinitialized before use.
239
+ */
240
+ destroy(): void;
241
+ }
242
+ //# sourceMappingURL=GPUContext.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GPUContext.d.ts","sourceRoot":"","sources":["../../src/core/GPUContext.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,174 @@
1
+ /**
2
+ * RenderScheduler - 60fps render loop management
3
+ *
4
+ * Manages a requestAnimationFrame-based render loop that runs at 60fps,
5
+ * providing delta time tracking and frame scheduling control.
6
+ *
7
+ * This module provides both functional and class-based APIs for maximum flexibility.
8
+ * The functional API is preferred for better type safety and immutability.
9
+ */
10
+ /**
11
+ * Callback function type for render frames.
12
+ * Receives delta time in milliseconds since the last frame.
13
+ */
14
+ export type RenderCallback = (deltaTime: number) => void;
15
+ import type { ExactFPS, Milliseconds, FrameTimeStats, FrameDropStats } from '../config/types';
16
+ /**
17
+ * Represents the state of a render scheduler.
18
+ * All properties are readonly to ensure immutability.
19
+ */
20
+ export interface RenderSchedulerState {
21
+ readonly id: symbol;
22
+ readonly running: boolean;
23
+ }
24
+ /**
25
+ * Creates a new RenderScheduler state with initial values.
26
+ *
27
+ * @returns A new RenderSchedulerState instance
28
+ */
29
+ export declare function createRenderScheduler(): RenderSchedulerState;
30
+ /**
31
+ * Starts the render loop.
32
+ *
33
+ * Begins a requestAnimationFrame loop that calls the provided callback
34
+ * every frame with the delta time in milliseconds since the last frame.
35
+ * Returns a new state object with running set to true.
36
+ *
37
+ * @param state - The scheduler state to start
38
+ * @param callback - Function to call each frame with delta time
39
+ * @returns A new RenderSchedulerState with running set to true
40
+ * @throws {Error} If callback is not provided
41
+ * @throws {Error} If scheduler is already running
42
+ * @throws {Error} If state is invalid
43
+ */
44
+ export declare function startRenderScheduler(state: RenderSchedulerState, callback: RenderCallback): RenderSchedulerState;
45
+ /**
46
+ * Stops the render loop.
47
+ *
48
+ * Cancels any pending requestAnimationFrame calls and stops the loop.
49
+ * Returns a new state object with running set to false.
50
+ * The scheduler can be restarted by calling startRenderScheduler() again.
51
+ *
52
+ * @param state - The scheduler state to stop
53
+ * @returns A new RenderSchedulerState with running set to false
54
+ * @throws {Error} If state is invalid
55
+ */
56
+ export declare function stopRenderScheduler(state: RenderSchedulerState): RenderSchedulerState;
57
+ /**
58
+ * Marks the current frame as dirty and schedules a render if idle.
59
+ *
60
+ * This function implements render-on-demand: it schedules a frame when the
61
+ * scheduler is idle. Multiple calls coalesce into a single frame.
62
+ *
63
+ * @param state - The scheduler state
64
+ * @throws {Error} If state is invalid
65
+ */
66
+ export declare function requestRender(state: RenderSchedulerState): void;
67
+ /**
68
+ * Calculates exact FPS from frame timestamp deltas.
69
+ *
70
+ * Uses the circular buffer of performance.now() timestamps to calculate
71
+ * frame-perfect FPS. Algorithm:
72
+ * 1. Sum all frame time deltas in the buffer
73
+ * 2. Divide by (count - 1) to get average frame time
74
+ * 3. Convert to FPS: 1000ms / avg_frame_time
75
+ *
76
+ * Returns 0 if insufficient data (< 2 frames).
77
+ *
78
+ * @param state - The scheduler state
79
+ * @returns Exact FPS measurement
80
+ */
81
+ export declare function getCurrentFPS(state: RenderSchedulerState): ExactFPS;
82
+ /**
83
+ * Calculates frame time statistics from the circular buffer.
84
+ *
85
+ * Computes min, max, avg, and percentiles (p50, p95, p99) for frame times.
86
+ * Returns zero stats if insufficient data.
87
+ *
88
+ * @param state - The scheduler state
89
+ * @returns Frame time statistics
90
+ */
91
+ export declare function getFrameStats(state: RenderSchedulerState): FrameTimeStats;
92
+ /**
93
+ * Gets frame drop statistics for the scheduler.
94
+ *
95
+ * @param state - The scheduler state
96
+ * @returns Frame drop statistics
97
+ */
98
+ export declare function getFrameDropStats(state: RenderSchedulerState): FrameDropStats;
99
+ /**
100
+ * Gets total frames rendered and elapsed time.
101
+ *
102
+ * @param state - The scheduler state
103
+ * @returns Object with totalFrames and elapsedTime
104
+ */
105
+ export declare function getTotalFrames(state: RenderSchedulerState): {
106
+ totalFrames: number;
107
+ elapsedTime: Milliseconds;
108
+ };
109
+ /**
110
+ * Destroys the render scheduler and cleans up resources.
111
+ * Stops the loop if running and removes internal state from the map.
112
+ * Returns a new state object with reset values.
113
+ * After calling this, the scheduler must be recreated before use.
114
+ *
115
+ * **Important:** Always call this function when done with a scheduler to prevent memory leaks.
116
+ * The internal state map will retain entries until explicitly destroyed.
117
+ *
118
+ * @param state - The scheduler state to destroy
119
+ * @returns A new RenderSchedulerState with reset values
120
+ */
121
+ export declare function destroyRenderScheduler(state: RenderSchedulerState): RenderSchedulerState;
122
+ /**
123
+ * Convenience function that creates a scheduler and starts it in one step.
124
+ *
125
+ * @param callback - Function to call each frame with delta time
126
+ * @returns A RenderSchedulerState with the loop running
127
+ * @throws {Error} If callback is not provided
128
+ *
129
+ * @example
130
+ * ```typescript
131
+ * const scheduler = createRenderSchedulerAsync((deltaTime) => {
132
+ * renderFrame(deltaTime);
133
+ * });
134
+ * ```
135
+ */
136
+ export declare function createRenderSchedulerAsync(callback: RenderCallback): RenderSchedulerState;
137
+ /**
138
+ * RenderScheduler class wrapper for backward compatibility.
139
+ *
140
+ * This class provides a class-based API that internally uses the functional implementation.
141
+ * Use the functional API directly for better type safety and immutability.
142
+ */
143
+ export declare class RenderScheduler {
144
+ private _state;
145
+ /**
146
+ * Checks if the scheduler is currently running.
147
+ */
148
+ get running(): boolean;
149
+ /**
150
+ * Creates a new RenderScheduler instance.
151
+ */
152
+ constructor();
153
+ /**
154
+ * Starts the render loop.
155
+ *
156
+ * @param callback - Function to call each frame with delta time
157
+ * @throws {Error} If callback is not provided or scheduler already running
158
+ */
159
+ start(callback: RenderCallback): void;
160
+ /**
161
+ * Stops the render loop.
162
+ */
163
+ stop(): void;
164
+ /**
165
+ * Marks the current frame as dirty, indicating it needs to be rendered.
166
+ */
167
+ requestRender(): void;
168
+ /**
169
+ * Destroys the render scheduler and cleans up resources.
170
+ * After calling destroy(), the scheduler must be recreated before use.
171
+ */
172
+ destroy(): void;
173
+ }
174
+ //# sourceMappingURL=RenderScheduler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RenderScheduler.d.ts","sourceRoot":"","sources":["../../src/core/RenderScheduler.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH;;;GAGG;AACH,MAAM,MAAM,cAAc,GAAG,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;AAEzD,OAAO,KAAK,EAAE,QAAQ,EAAE,YAAY,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAE9F;;;GAGG;AACH,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;CAC3B;AAgDD;;;;GAIG;AACH,wBAAgB,qBAAqB,IAAI,oBAAoB,CA2B5D;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,oBAAoB,EAC3B,QAAQ,EAAE,cAAc,GACvB,oBAAoB,CA2FtB;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,oBAAoB,GAAG,oBAAoB,CAmBrF;AAED;;;;;;;;GAQG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,oBAAoB,GAAG,IAAI,CA2B/D;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,oBAAoB,GAAG,QAAQ,CA4BnE;AAED;;;;;;;;GAQG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,oBAAoB,GAAG,cAAc,CA+DzE;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,oBAAoB,GAAG,cAAc,CAe7E;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,oBAAoB,GAAG;IAAE,WAAW,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,YAAY,CAAA;CAAE,CAW9G;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,oBAAoB,GAAG,oBAAoB,CAoBxF;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,0BAA0B,CAAC,QAAQ,EAAE,cAAc,GAAG,oBAAoB,CAGzF;AAED;;;;;GAKG;AACH,qBAAa,eAAe;IAC1B,OAAO,CAAC,MAAM,CAAuB;IAErC;;OAEG;IACH,IAAI,OAAO,IAAI,OAAO,CAErB;IAED;;OAEG;;IAKH;;;;;OAKG;IACH,KAAK,CAAC,QAAQ,EAAE,cAAc,GAAG,IAAI;IAIrC;;OAEG;IACH,IAAI,IAAI,IAAI;IAIZ;;OAEG;IACH,aAAa,IAAI,IAAI;IAIrB;;;OAGG;IACH,OAAO,IAAI,IAAI;CAGhB"}
@@ -0,0 +1,15 @@
1
+ import type { EasingFunction } from '../utils/easing';
2
+ export type AnimationId = symbol;
3
+ export interface AnimationController {
4
+ animate(from: number, to: number, duration: number, easing: EasingFunction, onUpdate: (value: number) => void, onComplete?: () => void): AnimationId;
5
+ animate(from: ReadonlyArray<number>, to: ReadonlyArray<number>, duration: number, easing: EasingFunction, onUpdate: (value: ReadonlyArray<number>) => void, onComplete?: () => void): AnimationId;
6
+ cancel(animationId: AnimationId): void;
7
+ cancelAll(): void;
8
+ /**
9
+ * Progresses all active animations to `timestamp` (ms).
10
+ * Intended to be called once per frame by the caller (e.g. a render loop).
11
+ */
12
+ update(timestamp: number): void;
13
+ }
14
+ export declare function createAnimationController(): AnimationController;
15
+ //# sourceMappingURL=createAnimationController.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createAnimationController.d.ts","sourceRoot":"","sources":["../../src/core/createAnimationController.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAEtD,MAAM,MAAM,WAAW,GAAG,MAAM,CAAC;AAEjC,MAAM,WAAW,mBAAmB;IAClC,OAAO,CACL,IAAI,EAAE,MAAM,EACZ,EAAE,EAAE,MAAM,EACV,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,cAAc,EACtB,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,EACjC,UAAU,CAAC,EAAE,MAAM,IAAI,GACtB,WAAW,CAAC;IACf,OAAO,CACL,IAAI,EAAE,aAAa,CAAC,MAAM,CAAC,EAC3B,EAAE,EAAE,aAAa,CAAC,MAAM,CAAC,EACzB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,cAAc,EACtB,QAAQ,EAAE,CAAC,KAAK,EAAE,aAAa,CAAC,MAAM,CAAC,KAAK,IAAI,EAChD,UAAU,CAAC,EAAE,MAAM,IAAI,GACtB,WAAW,CAAC;IAEf,MAAM,CAAC,WAAW,EAAE,WAAW,GAAG,IAAI,CAAC;IACvC,SAAS,IAAI,IAAI,CAAC;IAElB;;;OAGG;IACH,MAAM,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;CACjC;AAiCD,wBAAgB,yBAAyB,IAAI,mBAAmB,CAoH/D"}
@@ -0,0 +1,78 @@
1
+ import type { ResolvedChartGPUOptions } from '../config/OptionResolver';
2
+ import type { OHLCDataPoint } from '../config/types';
3
+ import { GPUContext } from './GPUContext';
4
+ import type { CartesianSeriesData } from '../config/types';
5
+ export interface GPUContextLike {
6
+ readonly device: GPUDevice | null;
7
+ readonly canvas: HTMLCanvasElement | null;
8
+ readonly canvasContext: GPUCanvasContext | null;
9
+ readonly preferredFormat: GPUTextureFormat | null;
10
+ readonly initialized: boolean;
11
+ readonly devicePixelRatio?: number;
12
+ }
13
+ export interface RenderCoordinator {
14
+ setOptions(resolvedOptions: ResolvedChartGPUOptions): void;
15
+ /**
16
+ * Appends new points to a cartesian series’ runtime data without requiring a full `setOptions(...)`
17
+ * resolver pass.
18
+ *
19
+ * Appends are coalesced and flushed once per render frame.
20
+ */
21
+ appendData(seriesIndex: number, newPoints: CartesianSeriesData | ReadonlyArray<OHLCDataPoint>): void;
22
+ /**
23
+ * Gets the current “interaction x” in domain units (or `null` when inactive).
24
+ *
25
+ * This is derived from pointer movement inside the plot grid and can also be driven
26
+ * externally via `setInteractionX(...)` (e.g. chart sync).
27
+ */
28
+ getInteractionX(): number | null;
29
+ /**
30
+ * Drives the chart’s crosshair + tooltip from a domain-space x value.
31
+ *
32
+ * Passing `null` clears the interaction (hides crosshair/tooltip).
33
+ */
34
+ setInteractionX(x: number | null, source?: unknown): void;
35
+ /**
36
+ * Subscribes to interaction x changes (domain units).
37
+ *
38
+ * Returns an unsubscribe function.
39
+ */
40
+ onInteractionXChange(callback: (x: number | null, source?: unknown) => void): () => void;
41
+ /**
42
+ * Returns the current percent-space zoom window (or `null` when zoom is disabled).
43
+ */
44
+ getZoomRange(): Readonly<{
45
+ start: number;
46
+ end: number;
47
+ }> | null;
48
+ /**
49
+ * Sets the percent-space zoom window.
50
+ *
51
+ * No-op when zoom is disabled.
52
+ */
53
+ setZoomRange(start: number, end: number): void;
54
+ /**
55
+ * Subscribes to zoom window changes (percent space).
56
+ *
57
+ * Returns an unsubscribe function.
58
+ */
59
+ onZoomRangeChange(cb: (range: Readonly<{
60
+ start: number;
61
+ end: number;
62
+ }>) => void): () => void;
63
+ render(): void;
64
+ dispose(): void;
65
+ }
66
+ export type RenderCoordinatorCallbacks = Readonly<{
67
+ /**
68
+ * Optional hook for render-on-demand systems (like `ChartGPU`) to re-render when
69
+ * interaction state changes (e.g. crosshair on pointer move).
70
+ */
71
+ readonly onRequestRender?: () => void;
72
+ /**
73
+ * Called when GPU device is lost.
74
+ */
75
+ readonly onDeviceLost?: (reason: string) => void;
76
+ }>;
77
+ export declare function createRenderCoordinator(gpuContext: GPUContext, options: ResolvedChartGPUOptions, callbacks?: RenderCoordinatorCallbacks): RenderCoordinator;
78
+ //# sourceMappingURL=createRenderCoordinator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createRenderCoordinator.d.ts","sourceRoot":"","sources":["../../src/core/createRenderCoordinator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAGV,uBAAuB,EAExB,MAAM,0BAA0B,CAAC;AAClC,OAAO,KAAK,EAKV,aAAa,EAGd,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,UAAU,EAAiD,MAAM,cAAc,CAAC;AAgBzF,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAqD3D,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAAC;IAClC,QAAQ,CAAC,MAAM,EAAE,iBAAiB,GAAG,IAAI,CAAC;IAC1C,QAAQ,CAAC,aAAa,EAAE,gBAAgB,GAAG,IAAI,CAAC;IAChD,QAAQ,CAAC,eAAe,EAAE,gBAAgB,GAAG,IAAI,CAAC;IAClD,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC;IAC9B,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;CACpC;AAmCD,MAAM,WAAW,iBAAiB;IAChC,UAAU,CAAC,eAAe,EAAE,uBAAuB,GAAG,IAAI,CAAC;IAC3D;;;;;OAKG;IACH,UAAU,CAAC,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,mBAAmB,GAAG,aAAa,CAAC,aAAa,CAAC,GAAG,IAAI,CAAC;IACrG;;;;;OAKG;IACH,eAAe,IAAI,MAAM,GAAG,IAAI,CAAC;IACjC;;;;OAIG;IACH,eAAe,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI,EAAE,MAAM,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;IAC1D;;;;OAIG;IACH,oBAAoB,CAAC,QAAQ,EAAE,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI,EAAE,MAAM,CAAC,EAAE,OAAO,KAAK,IAAI,GAAG,MAAM,IAAI,CAAC;IACzF;;OAEG;IACH,YAAY,IAAI,QAAQ,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC,GAAG,IAAI,CAAC;IAChE;;;;OAIG;IACH,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/C;;;;OAIG;IACH,iBAAiB,CAAC,EAAE,EAAE,CAAC,KAAK,EAAE,QAAQ,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC,KAAK,IAAI,GAAG,MAAM,IAAI,CAAC;IAC7F,MAAM,IAAI,IAAI,CAAC;IACf,OAAO,IAAI,IAAI,CAAC;CACjB;AAED,MAAM,MAAM,0BAA0B,GAAG,QAAQ,CAAC;IAChD;;;OAGG;IACH,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,IAAI,CAAC;IACtC;;OAEG;IACH,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;CAClD,CAAC,CAAC;AAq4BH,wBAAgB,uBAAuB,CACrC,UAAU,EAAE,UAAU,EACtB,OAAO,EAAE,uBAAuB,EAChC,SAAS,CAAC,EAAE,0BAA0B,GACrC,iBAAiB,CAkpFnB"}