@motion-core/motion-gpu 0.4.1 → 0.5.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 (228) hide show
  1. package/README.md +99 -0
  2. package/dist/advanced.d.ts +1 -0
  3. package/dist/advanced.d.ts.map +1 -0
  4. package/dist/advanced.js +14 -6
  5. package/dist/core/advanced.d.ts +1 -0
  6. package/dist/core/advanced.d.ts.map +1 -0
  7. package/dist/core/advanced.js +14 -5
  8. package/dist/core/compute-shader.d.ts +87 -0
  9. package/dist/core/compute-shader.d.ts.map +1 -0
  10. package/dist/core/compute-shader.js +205 -0
  11. package/dist/core/compute-shader.js.map +1 -0
  12. package/dist/core/current-value.d.ts +1 -0
  13. package/dist/core/current-value.d.ts.map +1 -0
  14. package/dist/core/current-value.js +35 -34
  15. package/dist/core/current-value.js.map +1 -0
  16. package/dist/core/error-diagnostics.d.ts +1 -0
  17. package/dist/core/error-diagnostics.d.ts.map +1 -0
  18. package/dist/core/error-diagnostics.js +70 -137
  19. package/dist/core/error-diagnostics.js.map +1 -0
  20. package/dist/core/error-report.d.ts +2 -1
  21. package/dist/core/error-report.d.ts.map +1 -0
  22. package/dist/core/error-report.js +247 -233
  23. package/dist/core/error-report.js.map +1 -0
  24. package/dist/core/frame-registry.d.ts +1 -0
  25. package/dist/core/frame-registry.d.ts.map +1 -0
  26. package/dist/core/frame-registry.js +546 -662
  27. package/dist/core/frame-registry.js.map +1 -0
  28. package/dist/core/index.d.ts +6 -2
  29. package/dist/core/index.d.ts.map +1 -0
  30. package/dist/core/index.js +13 -12
  31. package/dist/core/material-preprocess.d.ts +1 -0
  32. package/dist/core/material-preprocess.d.ts.map +1 -0
  33. package/dist/core/material-preprocess.js +131 -152
  34. package/dist/core/material-preprocess.js.map +1 -0
  35. package/dist/core/material.d.ts +23 -6
  36. package/dist/core/material.d.ts.map +1 -0
  37. package/dist/core/material.js +290 -317
  38. package/dist/core/material.js.map +1 -0
  39. package/dist/core/recompile-policy.d.ts +1 -0
  40. package/dist/core/recompile-policy.d.ts.map +1 -0
  41. package/dist/core/recompile-policy.js +18 -13
  42. package/dist/core/recompile-policy.js.map +1 -0
  43. package/dist/core/render-graph.d.ts +8 -3
  44. package/dist/core/render-graph.d.ts.map +1 -0
  45. package/dist/core/render-graph.js +77 -68
  46. package/dist/core/render-graph.js.map +1 -0
  47. package/dist/core/render-targets.d.ts +1 -0
  48. package/dist/core/render-targets.d.ts.map +1 -0
  49. package/dist/core/render-targets.js +52 -53
  50. package/dist/core/render-targets.js.map +1 -0
  51. package/dist/core/renderer.d.ts +1 -0
  52. package/dist/core/renderer.d.ts.map +1 -0
  53. package/dist/core/renderer.js +1337 -1081
  54. package/dist/core/renderer.js.map +1 -0
  55. package/dist/core/runtime-loop.d.ts +3 -2
  56. package/dist/core/runtime-loop.d.ts.map +1 -0
  57. package/dist/core/runtime-loop.js +353 -362
  58. package/dist/core/runtime-loop.js.map +1 -0
  59. package/dist/core/scheduler-helpers.d.ts +1 -0
  60. package/dist/core/scheduler-helpers.d.ts.map +1 -0
  61. package/dist/core/scheduler-helpers.js +52 -51
  62. package/dist/core/scheduler-helpers.js.map +1 -0
  63. package/dist/core/shader.d.ts +10 -1
  64. package/dist/core/shader.d.ts.map +1 -0
  65. package/dist/core/shader.js +109 -115
  66. package/dist/core/shader.js.map +1 -0
  67. package/dist/core/storage-buffers.d.ts +37 -0
  68. package/dist/core/storage-buffers.d.ts.map +1 -0
  69. package/dist/core/storage-buffers.js +95 -0
  70. package/dist/core/storage-buffers.js.map +1 -0
  71. package/dist/core/texture-loader.d.ts +1 -0
  72. package/dist/core/texture-loader.d.ts.map +1 -0
  73. package/dist/core/texture-loader.js +209 -273
  74. package/dist/core/texture-loader.js.map +1 -0
  75. package/dist/core/textures.d.ts +13 -0
  76. package/dist/core/textures.d.ts.map +1 -0
  77. package/dist/core/textures.js +111 -116
  78. package/dist/core/textures.js.map +1 -0
  79. package/dist/core/types.d.ts +147 -4
  80. package/dist/core/types.d.ts.map +1 -0
  81. package/dist/core/types.js +0 -4
  82. package/dist/core/uniforms.d.ts +1 -0
  83. package/dist/core/uniforms.d.ts.map +1 -0
  84. package/dist/core/uniforms.js +170 -191
  85. package/dist/core/uniforms.js.map +1 -0
  86. package/dist/index.d.ts +1 -0
  87. package/dist/index.d.ts.map +1 -0
  88. package/dist/index.js +13 -6
  89. package/dist/passes/BlitPass.d.ts +1 -0
  90. package/dist/passes/BlitPass.d.ts.map +1 -0
  91. package/dist/passes/BlitPass.js +23 -18
  92. package/dist/passes/BlitPass.js.map +1 -0
  93. package/dist/passes/ComputePass.d.ts +83 -0
  94. package/dist/passes/ComputePass.d.ts.map +1 -0
  95. package/dist/passes/ComputePass.js +92 -0
  96. package/dist/passes/ComputePass.js.map +1 -0
  97. package/dist/passes/CopyPass.d.ts +1 -0
  98. package/dist/passes/CopyPass.d.ts.map +1 -0
  99. package/dist/passes/CopyPass.js +58 -52
  100. package/dist/passes/CopyPass.js.map +1 -0
  101. package/dist/passes/FullscreenPass.d.ts +1 -0
  102. package/dist/passes/FullscreenPass.d.ts.map +1 -0
  103. package/dist/passes/FullscreenPass.js +127 -130
  104. package/dist/passes/FullscreenPass.js.map +1 -0
  105. package/dist/passes/PingPongComputePass.d.ts +104 -0
  106. package/dist/passes/PingPongComputePass.d.ts.map +1 -0
  107. package/dist/passes/PingPongComputePass.js +132 -0
  108. package/dist/passes/PingPongComputePass.js.map +1 -0
  109. package/dist/passes/ShaderPass.d.ts +1 -0
  110. package/dist/passes/ShaderPass.d.ts.map +1 -0
  111. package/dist/passes/ShaderPass.js +41 -37
  112. package/dist/passes/ShaderPass.js.map +1 -0
  113. package/dist/passes/index.d.ts +3 -0
  114. package/dist/passes/index.d.ts.map +1 -0
  115. package/dist/passes/index.js +6 -3
  116. package/dist/react/FragCanvas.d.ts +3 -2
  117. package/dist/react/FragCanvas.d.ts.map +1 -0
  118. package/dist/react/FragCanvas.js +234 -211
  119. package/dist/react/FragCanvas.js.map +1 -0
  120. package/dist/react/MotionGPUErrorOverlay.d.ts +1 -0
  121. package/dist/react/MotionGPUErrorOverlay.d.ts.map +1 -0
  122. package/dist/react/MotionGPUErrorOverlay.js +200 -14
  123. package/dist/react/MotionGPUErrorOverlay.js.map +1 -0
  124. package/dist/react/Portal.d.ts +1 -0
  125. package/dist/react/Portal.d.ts.map +1 -0
  126. package/dist/react/Portal.js +18 -21
  127. package/dist/react/Portal.js.map +1 -0
  128. package/dist/react/advanced.d.ts +1 -0
  129. package/dist/react/advanced.d.ts.map +1 -0
  130. package/dist/react/advanced.js +14 -6
  131. package/dist/react/frame-context.d.ts +1 -0
  132. package/dist/react/frame-context.d.ts.map +1 -0
  133. package/dist/react/frame-context.js +88 -94
  134. package/dist/react/frame-context.js.map +1 -0
  135. package/dist/react/index.d.ts +6 -2
  136. package/dist/react/index.d.ts.map +1 -0
  137. package/dist/react/index.js +12 -9
  138. package/dist/react/motiongpu-context.d.ts +1 -0
  139. package/dist/react/motiongpu-context.d.ts.map +1 -0
  140. package/dist/react/motiongpu-context.js +18 -15
  141. package/dist/react/motiongpu-context.js.map +1 -0
  142. package/dist/react/use-motiongpu-user-context.d.ts +1 -0
  143. package/dist/react/use-motiongpu-user-context.d.ts.map +1 -0
  144. package/dist/react/use-motiongpu-user-context.js +83 -82
  145. package/dist/react/use-motiongpu-user-context.js.map +1 -0
  146. package/dist/react/use-texture.d.ts +1 -0
  147. package/dist/react/use-texture.d.ts.map +1 -0
  148. package/dist/react/use-texture.js +132 -152
  149. package/dist/react/use-texture.js.map +1 -0
  150. package/dist/svelte/FragCanvas.svelte +2 -2
  151. package/dist/svelte/FragCanvas.svelte.d.ts +3 -2
  152. package/dist/svelte/FragCanvas.svelte.d.ts.map +1 -0
  153. package/dist/svelte/MotionGPUErrorOverlay.svelte +137 -7
  154. package/dist/svelte/MotionGPUErrorOverlay.svelte.d.ts +1 -0
  155. package/dist/svelte/MotionGPUErrorOverlay.svelte.d.ts.map +1 -0
  156. package/dist/svelte/Portal.svelte.d.ts +1 -0
  157. package/dist/svelte/Portal.svelte.d.ts.map +1 -0
  158. package/dist/svelte/advanced.d.ts +1 -0
  159. package/dist/svelte/advanced.d.ts.map +1 -0
  160. package/dist/svelte/advanced.js +13 -6
  161. package/dist/svelte/frame-context.d.ts +1 -0
  162. package/dist/svelte/frame-context.d.ts.map +1 -0
  163. package/dist/svelte/frame-context.js +27 -27
  164. package/dist/svelte/frame-context.js.map +1 -0
  165. package/dist/svelte/index.d.ts +6 -2
  166. package/dist/svelte/index.d.ts.map +1 -0
  167. package/dist/svelte/index.js +12 -9
  168. package/dist/svelte/motiongpu-context.d.ts +1 -0
  169. package/dist/svelte/motiongpu-context.d.ts.map +1 -0
  170. package/dist/svelte/motiongpu-context.js +24 -21
  171. package/dist/svelte/motiongpu-context.js.map +1 -0
  172. package/dist/svelte/use-motiongpu-user-context.d.ts +1 -0
  173. package/dist/svelte/use-motiongpu-user-context.d.ts.map +1 -0
  174. package/dist/svelte/use-motiongpu-user-context.js +69 -70
  175. package/dist/svelte/use-motiongpu-user-context.js.map +1 -0
  176. package/dist/svelte/use-texture.d.ts +1 -0
  177. package/dist/svelte/use-texture.d.ts.map +1 -0
  178. package/dist/svelte/use-texture.js +125 -147
  179. package/dist/svelte/use-texture.js.map +1 -0
  180. package/package.json +12 -7
  181. package/src/lib/advanced.ts +6 -0
  182. package/src/lib/core/advanced.ts +12 -0
  183. package/src/lib/core/compute-shader.ts +326 -0
  184. package/src/lib/core/current-value.ts +64 -0
  185. package/src/lib/core/error-diagnostics.ts +236 -0
  186. package/src/lib/core/error-report.ts +535 -0
  187. package/src/lib/core/frame-registry.ts +1190 -0
  188. package/src/lib/core/index.ts +94 -0
  189. package/src/lib/core/material-preprocess.ts +295 -0
  190. package/src/lib/core/material.ts +748 -0
  191. package/src/lib/core/recompile-policy.ts +31 -0
  192. package/src/lib/core/render-graph.ts +173 -0
  193. package/src/lib/core/render-targets.ts +107 -0
  194. package/src/lib/core/renderer.ts +2161 -0
  195. package/src/lib/core/runtime-loop.ts +537 -0
  196. package/src/lib/core/scheduler-helpers.ts +136 -0
  197. package/src/lib/core/shader.ts +301 -0
  198. package/src/lib/core/storage-buffers.ts +142 -0
  199. package/src/lib/core/texture-loader.ts +482 -0
  200. package/src/lib/core/textures.ts +257 -0
  201. package/src/lib/core/types.ts +743 -0
  202. package/src/lib/core/uniforms.ts +282 -0
  203. package/src/lib/index.ts +6 -0
  204. package/src/lib/passes/BlitPass.ts +54 -0
  205. package/src/lib/passes/ComputePass.ts +136 -0
  206. package/src/lib/passes/CopyPass.ts +80 -0
  207. package/src/lib/passes/FullscreenPass.ts +173 -0
  208. package/src/lib/passes/PingPongComputePass.ts +180 -0
  209. package/src/lib/passes/ShaderPass.ts +89 -0
  210. package/src/lib/passes/index.ts +9 -0
  211. package/src/lib/react/FragCanvas.tsx +345 -0
  212. package/src/lib/react/MotionGPUErrorOverlay.tsx +524 -0
  213. package/src/lib/react/Portal.tsx +34 -0
  214. package/src/lib/react/advanced.ts +36 -0
  215. package/src/lib/react/frame-context.ts +169 -0
  216. package/src/lib/react/index.ts +68 -0
  217. package/src/lib/react/motiongpu-context.ts +88 -0
  218. package/src/lib/react/use-motiongpu-user-context.ts +186 -0
  219. package/src/lib/react/use-texture.ts +233 -0
  220. package/src/lib/svelte/FragCanvas.svelte +249 -0
  221. package/src/lib/svelte/MotionGPUErrorOverlay.svelte +512 -0
  222. package/src/lib/svelte/Portal.svelte +31 -0
  223. package/src/lib/svelte/advanced.ts +32 -0
  224. package/src/lib/svelte/frame-context.ts +87 -0
  225. package/src/lib/svelte/index.ts +68 -0
  226. package/src/lib/svelte/motiongpu-context.ts +97 -0
  227. package/src/lib/svelte/use-motiongpu-user-context.ts +145 -0
  228. package/src/lib/svelte/use-texture.ts +232 -0
@@ -1,218 +1,241 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { createCurrentWritable as currentWritable } from '../core/current-value.js';
3
- import { toMotionGPUErrorReport } from '../core/error-report.js';
4
- import { createFrameRegistry } from '../core/frame-registry.js';
5
- import { createMotionGPURuntimeLoop } from '../core/runtime-loop.js';
6
- import { useEffect, useRef, useState } from 'react';
7
- import { FrameRegistryReactContext } from './frame-context.js';
8
- import { MotionGPUErrorOverlay } from './MotionGPUErrorOverlay.js';
9
- import { MotionGPUReactContext } from './motiongpu-context.js';
1
+ import { toMotionGPUErrorReport } from "../core/error-report.js";
2
+ import { createCurrentWritable } from "../core/current-value.js";
3
+ import { createFrameRegistry } from "../core/frame-registry.js";
4
+ import { createMotionGPURuntimeLoop } from "../core/runtime-loop.js";
5
+ import { MotionGPUReactContext } from "./motiongpu-context.js";
6
+ import { FrameRegistryReactContext } from "./frame-context.js";
7
+ import { MotionGPUErrorOverlay } from "./MotionGPUErrorOverlay.js";
8
+ import { useEffect, useRef, useState } from "react";
9
+ import { jsx, jsxs } from "react/jsx-runtime";
10
+ //#region src/lib/react/FragCanvas.tsx
10
11
  function getInitialDpr() {
11
- if (typeof window === 'undefined') {
12
- return 1;
13
- }
14
- return window.devicePixelRatio ?? 1;
12
+ if (typeof window === "undefined") return 1;
13
+ return window.devicePixelRatio ?? 1;
15
14
  }
16
15
  function createRuntimeState(initialDpr) {
17
- const registry = createFrameRegistry({ maxDelta: 0.1 });
18
- const canvasRef = { current: undefined };
19
- const requestFrameSignalRef = { current: null };
20
- const requestFrame = () => {
21
- requestFrameSignalRef.current?.();
22
- };
23
- const invalidateFrame = () => {
24
- registry.invalidate();
25
- requestFrame();
26
- };
27
- const advanceFrame = () => {
28
- registry.advance();
29
- requestFrame();
30
- };
31
- const size = currentWritable({ width: 0, height: 0 });
32
- const dprState = currentWritable(initialDpr, requestFrame);
33
- const maxDeltaState = currentWritable(0.1, (value) => {
34
- registry.setMaxDelta(value);
35
- requestFrame();
36
- });
37
- const renderModeState = currentWritable('always', (value) => {
38
- registry.setRenderMode(value);
39
- requestFrame();
40
- });
41
- const autoRenderState = currentWritable(true, (value) => {
42
- registry.setAutoRender(value);
43
- requestFrame();
44
- });
45
- const userState = currentWritable({});
46
- const context = {
47
- get canvas() {
48
- return canvasRef.current;
49
- },
50
- size,
51
- dpr: dprState,
52
- maxDelta: maxDeltaState,
53
- renderMode: renderModeState,
54
- autoRender: autoRenderState,
55
- user: userState,
56
- invalidate: invalidateFrame,
57
- advance: advanceFrame,
58
- scheduler: {
59
- createStage: registry.createStage,
60
- getStage: registry.getStage,
61
- setDiagnosticsEnabled: registry.setDiagnosticsEnabled,
62
- getDiagnosticsEnabled: registry.getDiagnosticsEnabled,
63
- getLastRunTimings: registry.getLastRunTimings,
64
- getSchedule: registry.getSchedule,
65
- setProfilingEnabled: registry.setProfilingEnabled,
66
- setProfilingWindow: registry.setProfilingWindow,
67
- resetProfiling: registry.resetProfiling,
68
- getProfilingEnabled: registry.getProfilingEnabled,
69
- getProfilingWindow: registry.getProfilingWindow,
70
- getProfilingSnapshot: registry.getProfilingSnapshot
71
- }
72
- };
73
- return {
74
- registry,
75
- context,
76
- canvasRef,
77
- size,
78
- dprState,
79
- maxDeltaState,
80
- renderModeState,
81
- autoRenderState,
82
- requestFrameSignalRef,
83
- requestFrame,
84
- invalidateFrame,
85
- advanceFrame
86
- };
16
+ const registry = createFrameRegistry({ maxDelta: .1 });
17
+ const canvasRef = { current: void 0 };
18
+ const requestFrameSignalRef = { current: null };
19
+ const requestFrame = () => {
20
+ requestFrameSignalRef.current?.();
21
+ };
22
+ const invalidateFrame = () => {
23
+ registry.invalidate();
24
+ requestFrame();
25
+ };
26
+ const advanceFrame = () => {
27
+ registry.advance();
28
+ requestFrame();
29
+ };
30
+ const size = createCurrentWritable({
31
+ width: 0,
32
+ height: 0
33
+ });
34
+ const dprState = createCurrentWritable(initialDpr, requestFrame);
35
+ const maxDeltaState = createCurrentWritable(.1, (value) => {
36
+ registry.setMaxDelta(value);
37
+ requestFrame();
38
+ });
39
+ const renderModeState = createCurrentWritable("always", (value) => {
40
+ registry.setRenderMode(value);
41
+ requestFrame();
42
+ });
43
+ const autoRenderState = createCurrentWritable(true, (value) => {
44
+ registry.setAutoRender(value);
45
+ requestFrame();
46
+ });
47
+ return {
48
+ registry,
49
+ context: {
50
+ get canvas() {
51
+ return canvasRef.current;
52
+ },
53
+ size,
54
+ dpr: dprState,
55
+ maxDelta: maxDeltaState,
56
+ renderMode: renderModeState,
57
+ autoRender: autoRenderState,
58
+ user: createCurrentWritable({}),
59
+ invalidate: invalidateFrame,
60
+ advance: advanceFrame,
61
+ scheduler: {
62
+ createStage: registry.createStage,
63
+ getStage: registry.getStage,
64
+ setDiagnosticsEnabled: registry.setDiagnosticsEnabled,
65
+ getDiagnosticsEnabled: registry.getDiagnosticsEnabled,
66
+ getLastRunTimings: registry.getLastRunTimings,
67
+ getSchedule: registry.getSchedule,
68
+ setProfilingEnabled: registry.setProfilingEnabled,
69
+ setProfilingWindow: registry.setProfilingWindow,
70
+ resetProfiling: registry.resetProfiling,
71
+ getProfilingEnabled: registry.getProfilingEnabled,
72
+ getProfilingWindow: registry.getProfilingWindow,
73
+ getProfilingSnapshot: registry.getProfilingSnapshot
74
+ }
75
+ },
76
+ canvasRef,
77
+ size,
78
+ dprState,
79
+ maxDeltaState,
80
+ renderModeState,
81
+ autoRenderState,
82
+ requestFrameSignalRef,
83
+ requestFrame,
84
+ invalidateFrame,
85
+ advanceFrame
86
+ };
87
87
  }
88
88
  function getNormalizedErrorHistoryLimit(value) {
89
- if (!Number.isFinite(value) || value <= 0) {
90
- return 0;
91
- }
92
- return Math.floor(value);
89
+ if (!Number.isFinite(value) || value <= 0) return 0;
90
+ return Math.floor(value);
93
91
  }
94
- export function FragCanvas({ material, renderTargets = {}, passes = [], clearColor = [0, 0, 0, 1], outputColorSpace = 'srgb', renderMode = 'always', autoRender = true, maxDelta = 0.1, adapterOptions = undefined, deviceDescriptor = undefined, dpr = getInitialDpr(), showErrorOverlay = true, errorRenderer, onError = undefined, errorHistoryLimit = 0, onErrorHistory = undefined, className = '', style, children }) {
95
- const runtimeRef = useRef(null);
96
- if (!runtimeRef.current) {
97
- runtimeRef.current = createRuntimeState(getInitialDpr());
98
- }
99
- const runtime = runtimeRef.current;
100
- const runtimePropsRef = useRef({
101
- material,
102
- renderTargets,
103
- passes,
104
- clearColor,
105
- outputColorSpace,
106
- adapterOptions,
107
- deviceDescriptor,
108
- onError,
109
- errorHistoryLimit,
110
- onErrorHistory
111
- });
112
- runtimePropsRef.current = {
113
- material,
114
- renderTargets,
115
- passes,
116
- clearColor,
117
- outputColorSpace,
118
- adapterOptions,
119
- deviceDescriptor,
120
- onError,
121
- errorHistoryLimit,
122
- onErrorHistory
123
- };
124
- const [errorReport, setErrorReport] = useState(null);
125
- const [errorHistory, setErrorHistory] = useState([]);
126
- useEffect(() => {
127
- runtime.renderModeState.set(renderMode);
128
- }, [renderMode, runtime]);
129
- useEffect(() => {
130
- runtime.autoRenderState.set(autoRender);
131
- }, [autoRender, runtime]);
132
- useEffect(() => {
133
- runtime.maxDeltaState.set(maxDelta);
134
- }, [maxDelta, runtime]);
135
- useEffect(() => {
136
- runtime.dprState.set(dpr);
137
- }, [dpr, runtime]);
138
- useEffect(() => {
139
- const limit = getNormalizedErrorHistoryLimit(errorHistoryLimit);
140
- if (limit <= 0) {
141
- if (errorHistory.length === 0) {
142
- return;
143
- }
144
- setErrorHistory([]);
145
- onErrorHistory?.([]);
146
- return;
147
- }
148
- if (errorHistory.length <= limit) {
149
- return;
150
- }
151
- const trimmed = errorHistory.slice(errorHistory.length - limit);
152
- setErrorHistory(trimmed);
153
- onErrorHistory?.(trimmed);
154
- }, [errorHistory, errorHistoryLimit, onErrorHistory]);
155
- useEffect(() => {
156
- const canvas = runtime.canvasRef.current;
157
- if (!canvas) {
158
- const report = toMotionGPUErrorReport(new Error('Canvas element is not available'), 'initialization');
159
- setErrorReport(report);
160
- const historyLimit = getNormalizedErrorHistoryLimit(runtimePropsRef.current.errorHistoryLimit);
161
- if (historyLimit > 0) {
162
- const nextHistory = [report].slice(-historyLimit);
163
- setErrorHistory(nextHistory);
164
- runtimePropsRef.current.onErrorHistory?.(nextHistory);
165
- }
166
- runtimePropsRef.current.onError?.(report);
167
- return () => {
168
- runtime.registry.clear();
169
- };
170
- }
171
- const runtimeLoop = createMotionGPURuntimeLoop({
172
- canvas,
173
- registry: runtime.registry,
174
- size: runtime.size,
175
- dpr: runtime.dprState,
176
- maxDelta: runtime.maxDeltaState,
177
- getMaterial: () => runtimePropsRef.current.material,
178
- getRenderTargets: () => runtimePropsRef.current.renderTargets,
179
- getPasses: () => runtimePropsRef.current.passes,
180
- getClearColor: () => runtimePropsRef.current.clearColor,
181
- getOutputColorSpace: () => runtimePropsRef.current.outputColorSpace,
182
- getAdapterOptions: () => runtimePropsRef.current.adapterOptions,
183
- getDeviceDescriptor: () => runtimePropsRef.current.deviceDescriptor,
184
- getOnError: () => runtimePropsRef.current.onError,
185
- getErrorHistoryLimit: () => runtimePropsRef.current.errorHistoryLimit,
186
- getOnErrorHistory: () => runtimePropsRef.current.onErrorHistory,
187
- reportErrorHistory: (history) => {
188
- setErrorHistory(history);
189
- },
190
- reportError: (report) => {
191
- setErrorReport(report);
192
- }
193
- });
194
- runtime.requestFrameSignalRef.current = runtimeLoop.requestFrame;
195
- return () => {
196
- runtime.requestFrameSignalRef.current = null;
197
- runtimeLoop.destroy();
198
- };
199
- }, [runtime]);
200
- const canvasStyle = {
201
- position: 'absolute',
202
- inset: 0,
203
- display: 'block',
204
- width: '100%',
205
- height: '100%',
206
- ...style
207
- };
208
- return (_jsx(FrameRegistryReactContext.Provider, { value: runtime.registry, children: _jsx(MotionGPUReactContext.Provider, { value: runtime.context, children: _jsxs("div", { className: "motiongpu-canvas-wrap", style: {
209
- position: 'relative',
210
- width: '100%',
211
- height: '100%',
212
- minWidth: 0,
213
- minHeight: 0,
214
- overflow: 'hidden'
215
- }, children: [_jsx("canvas", { className: className, style: canvasStyle, ref: (node) => {
216
- runtime.canvasRef.current = node ?? undefined;
217
- } }), showErrorOverlay && errorReport ? (errorRenderer ? (errorRenderer(errorReport)) : (_jsx(MotionGPUErrorOverlay, { report: errorReport }))) : null, children] }) }) }));
92
+ function FragCanvas({ material, renderTargets = {}, passes = [], clearColor = [
93
+ 0,
94
+ 0,
95
+ 0,
96
+ 1
97
+ ], outputColorSpace = "srgb", renderMode = "always", autoRender = true, maxDelta = .1, adapterOptions = void 0, deviceDescriptor = void 0, dpr = getInitialDpr(), showErrorOverlay = true, errorRenderer, onError = void 0, errorHistoryLimit = 0, onErrorHistory = void 0, className = "", style, children }) {
98
+ const runtimeRef = useRef(null);
99
+ if (!runtimeRef.current) runtimeRef.current = createRuntimeState(getInitialDpr());
100
+ const runtime = runtimeRef.current;
101
+ const runtimePropsRef = useRef({
102
+ material,
103
+ renderTargets,
104
+ passes,
105
+ clearColor,
106
+ outputColorSpace,
107
+ adapterOptions,
108
+ deviceDescriptor,
109
+ onError,
110
+ errorHistoryLimit,
111
+ onErrorHistory
112
+ });
113
+ runtimePropsRef.current = {
114
+ material,
115
+ renderTargets,
116
+ passes,
117
+ clearColor,
118
+ outputColorSpace,
119
+ adapterOptions,
120
+ deviceDescriptor,
121
+ onError,
122
+ errorHistoryLimit,
123
+ onErrorHistory
124
+ };
125
+ const [errorReport, setErrorReport] = useState(null);
126
+ const [errorHistory, setErrorHistory] = useState([]);
127
+ useEffect(() => {
128
+ runtime.renderModeState.set(renderMode);
129
+ }, [renderMode, runtime]);
130
+ useEffect(() => {
131
+ runtime.autoRenderState.set(autoRender);
132
+ }, [autoRender, runtime]);
133
+ useEffect(() => {
134
+ runtime.maxDeltaState.set(maxDelta);
135
+ }, [maxDelta, runtime]);
136
+ useEffect(() => {
137
+ runtime.dprState.set(dpr);
138
+ }, [dpr, runtime]);
139
+ useEffect(() => {
140
+ const limit = getNormalizedErrorHistoryLimit(errorHistoryLimit);
141
+ if (limit <= 0) {
142
+ if (errorHistory.length === 0) return;
143
+ setErrorHistory([]);
144
+ onErrorHistory?.([]);
145
+ return;
146
+ }
147
+ if (errorHistory.length <= limit) return;
148
+ const trimmed = errorHistory.slice(errorHistory.length - limit);
149
+ setErrorHistory(trimmed);
150
+ onErrorHistory?.(trimmed);
151
+ }, [
152
+ errorHistory,
153
+ errorHistoryLimit,
154
+ onErrorHistory
155
+ ]);
156
+ useEffect(() => {
157
+ const canvas = runtime.canvasRef.current;
158
+ if (!canvas) {
159
+ const report = toMotionGPUErrorReport(/* @__PURE__ */ new Error("Canvas element is not available"), "initialization");
160
+ setErrorReport(report);
161
+ const historyLimit = getNormalizedErrorHistoryLimit(runtimePropsRef.current.errorHistoryLimit);
162
+ if (historyLimit > 0) {
163
+ const nextHistory = [report].slice(-historyLimit);
164
+ setErrorHistory(nextHistory);
165
+ runtimePropsRef.current.onErrorHistory?.(nextHistory);
166
+ }
167
+ runtimePropsRef.current.onError?.(report);
168
+ return () => {
169
+ runtime.registry.clear();
170
+ };
171
+ }
172
+ const runtimeLoop = createMotionGPURuntimeLoop({
173
+ canvas,
174
+ registry: runtime.registry,
175
+ size: runtime.size,
176
+ dpr: runtime.dprState,
177
+ maxDelta: runtime.maxDeltaState,
178
+ getMaterial: () => runtimePropsRef.current.material,
179
+ getRenderTargets: () => runtimePropsRef.current.renderTargets,
180
+ getPasses: () => runtimePropsRef.current.passes,
181
+ getClearColor: () => runtimePropsRef.current.clearColor,
182
+ getOutputColorSpace: () => runtimePropsRef.current.outputColorSpace,
183
+ getAdapterOptions: () => runtimePropsRef.current.adapterOptions,
184
+ getDeviceDescriptor: () => runtimePropsRef.current.deviceDescriptor,
185
+ getOnError: () => runtimePropsRef.current.onError,
186
+ getErrorHistoryLimit: () => runtimePropsRef.current.errorHistoryLimit,
187
+ getOnErrorHistory: () => runtimePropsRef.current.onErrorHistory,
188
+ reportErrorHistory: (history) => {
189
+ setErrorHistory(history);
190
+ },
191
+ reportError: (report) => {
192
+ setErrorReport(report);
193
+ }
194
+ });
195
+ runtime.requestFrameSignalRef.current = runtimeLoop.requestFrame;
196
+ return () => {
197
+ runtime.requestFrameSignalRef.current = null;
198
+ runtimeLoop.destroy();
199
+ };
200
+ }, [runtime]);
201
+ const canvasStyle = {
202
+ position: "absolute",
203
+ inset: 0,
204
+ display: "block",
205
+ width: "100%",
206
+ height: "100%",
207
+ ...style
208
+ };
209
+ return /* @__PURE__ */ jsx(FrameRegistryReactContext.Provider, {
210
+ value: runtime.registry,
211
+ children: /* @__PURE__ */ jsx(MotionGPUReactContext.Provider, {
212
+ value: runtime.context,
213
+ children: /* @__PURE__ */ jsxs("div", {
214
+ className: "motiongpu-canvas-wrap",
215
+ style: {
216
+ position: "relative",
217
+ width: "100%",
218
+ height: "100%",
219
+ minWidth: 0,
220
+ minHeight: 0,
221
+ overflow: "hidden"
222
+ },
223
+ children: [
224
+ /* @__PURE__ */ jsx("canvas", {
225
+ className,
226
+ style: canvasStyle,
227
+ ref: (node) => {
228
+ runtime.canvasRef.current = node ?? void 0;
229
+ }
230
+ }),
231
+ showErrorOverlay && errorReport ? errorRenderer ? errorRenderer(errorReport) : /* @__PURE__ */ jsx(MotionGPUErrorOverlay, { report: errorReport }) : null,
232
+ children
233
+ ]
234
+ })
235
+ })
236
+ });
218
237
  }
238
+ //#endregion
239
+ export { FragCanvas };
240
+
241
+ //# sourceMappingURL=FragCanvas.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FragCanvas.js","names":[],"sources":["../../src/lib/react/FragCanvas.tsx"],"sourcesContent":["import { createCurrentWritable as currentWritable } from '../core/current-value.js';\nimport { toMotionGPUErrorReport, type MotionGPUErrorReport } from '../core/error-report.js';\nimport type { FragMaterial } from '../core/material.js';\nimport { createFrameRegistry } from '../core/frame-registry.js';\nimport { createMotionGPURuntimeLoop } from '../core/runtime-loop.js';\nimport type {\n\tAnyPass,\n\tOutputColorSpace,\n\tRenderMode,\n\tRenderTargetDefinitionMap\n} from '../core/types.js';\nimport { useEffect, useRef, useState, type CSSProperties, type ReactNode } from 'react';\nimport { FrameRegistryReactContext } from './frame-context.js';\nimport { MotionGPUErrorOverlay } from './MotionGPUErrorOverlay.js';\nimport { MotionGPUReactContext, type MotionGPUContext } from './motiongpu-context.js';\n\nexport interface FragCanvasProps {\n\tmaterial: FragMaterial;\n\trenderTargets?: RenderTargetDefinitionMap;\n\tpasses?: AnyPass[];\n\tclearColor?: [number, number, number, number];\n\toutputColorSpace?: OutputColorSpace;\n\trenderMode?: RenderMode;\n\tautoRender?: boolean;\n\tmaxDelta?: number;\n\tadapterOptions?: GPURequestAdapterOptions;\n\tdeviceDescriptor?: GPUDeviceDescriptor;\n\tdpr?: number;\n\tshowErrorOverlay?: boolean;\n\terrorRenderer?: (report: MotionGPUErrorReport) => ReactNode;\n\tonError?: (report: MotionGPUErrorReport) => void;\n\terrorHistoryLimit?: number;\n\tonErrorHistory?: (history: MotionGPUErrorReport[]) => void;\n\tclassName?: string;\n\tstyle?: CSSProperties;\n\tchildren?: ReactNode;\n}\n\ninterface RuntimePropsSnapshot {\n\tmaterial: FragMaterial;\n\trenderTargets: RenderTargetDefinitionMap;\n\tpasses: AnyPass[];\n\tclearColor: [number, number, number, number];\n\toutputColorSpace: OutputColorSpace;\n\tadapterOptions: GPURequestAdapterOptions | undefined;\n\tdeviceDescriptor: GPUDeviceDescriptor | undefined;\n\tonError: ((report: MotionGPUErrorReport) => void) | undefined;\n\terrorHistoryLimit: number;\n\tonErrorHistory: ((history: MotionGPUErrorReport[]) => void) | undefined;\n}\n\ninterface FragCanvasRuntimeState {\n\tregistry: ReturnType<typeof createFrameRegistry>;\n\tcontext: MotionGPUContext;\n\tcanvasRef: { current: HTMLCanvasElement | undefined };\n\tsize: ReturnType<typeof currentWritable<{ width: number; height: number }>>;\n\tdprState: ReturnType<typeof currentWritable<number>>;\n\tmaxDeltaState: ReturnType<typeof currentWritable<number>>;\n\trenderModeState: ReturnType<typeof currentWritable<RenderMode>>;\n\tautoRenderState: ReturnType<typeof currentWritable<boolean>>;\n\trequestFrameSignalRef: { current: (() => void) | null };\n\trequestFrame: () => void;\n\tinvalidateFrame: () => void;\n\tadvanceFrame: () => void;\n}\n\nfunction getInitialDpr(): number {\n\tif (typeof window === 'undefined') {\n\t\treturn 1;\n\t}\n\n\treturn window.devicePixelRatio ?? 1;\n}\n\nfunction createRuntimeState(initialDpr: number): FragCanvasRuntimeState {\n\tconst registry = createFrameRegistry({ maxDelta: 0.1 });\n\tconst canvasRef = { current: undefined as HTMLCanvasElement | undefined };\n\tconst requestFrameSignalRef = { current: null as (() => void) | null };\n\tconst requestFrame = (): void => {\n\t\trequestFrameSignalRef.current?.();\n\t};\n\tconst invalidateFrame = (): void => {\n\t\tregistry.invalidate();\n\t\trequestFrame();\n\t};\n\tconst advanceFrame = (): void => {\n\t\tregistry.advance();\n\t\trequestFrame();\n\t};\n\n\tconst size = currentWritable({ width: 0, height: 0 });\n\tconst dprState = currentWritable(initialDpr, requestFrame);\n\tconst maxDeltaState = currentWritable(0.1, (value) => {\n\t\tregistry.setMaxDelta(value);\n\t\trequestFrame();\n\t});\n\tconst renderModeState = currentWritable<RenderMode>('always', (value) => {\n\t\tregistry.setRenderMode(value);\n\t\trequestFrame();\n\t});\n\tconst autoRenderState = currentWritable<boolean>(true, (value) => {\n\t\tregistry.setAutoRender(value);\n\t\trequestFrame();\n\t});\n\tconst userState = currentWritable<Record<string | symbol, unknown>>({});\n\n\tconst context: MotionGPUContext = {\n\t\tget canvas() {\n\t\t\treturn canvasRef.current;\n\t\t},\n\t\tsize,\n\t\tdpr: dprState,\n\t\tmaxDelta: maxDeltaState,\n\t\trenderMode: renderModeState,\n\t\tautoRender: autoRenderState,\n\t\tuser: userState,\n\t\tinvalidate: invalidateFrame,\n\t\tadvance: advanceFrame,\n\t\tscheduler: {\n\t\t\tcreateStage: registry.createStage,\n\t\t\tgetStage: registry.getStage,\n\t\t\tsetDiagnosticsEnabled: registry.setDiagnosticsEnabled,\n\t\t\tgetDiagnosticsEnabled: registry.getDiagnosticsEnabled,\n\t\t\tgetLastRunTimings: registry.getLastRunTimings,\n\t\t\tgetSchedule: registry.getSchedule,\n\t\t\tsetProfilingEnabled: registry.setProfilingEnabled,\n\t\t\tsetProfilingWindow: registry.setProfilingWindow,\n\t\t\tresetProfiling: registry.resetProfiling,\n\t\t\tgetProfilingEnabled: registry.getProfilingEnabled,\n\t\t\tgetProfilingWindow: registry.getProfilingWindow,\n\t\t\tgetProfilingSnapshot: registry.getProfilingSnapshot\n\t\t}\n\t};\n\n\treturn {\n\t\tregistry,\n\t\tcontext,\n\t\tcanvasRef,\n\t\tsize,\n\t\tdprState,\n\t\tmaxDeltaState,\n\t\trenderModeState,\n\t\tautoRenderState,\n\t\trequestFrameSignalRef,\n\t\trequestFrame,\n\t\tinvalidateFrame,\n\t\tadvanceFrame\n\t};\n}\n\nfunction getNormalizedErrorHistoryLimit(value: number): number {\n\tif (!Number.isFinite(value) || value <= 0) {\n\t\treturn 0;\n\t}\n\n\treturn Math.floor(value);\n}\n\nexport function FragCanvas({\n\tmaterial,\n\trenderTargets = {},\n\tpasses = [],\n\tclearColor = [0, 0, 0, 1],\n\toutputColorSpace = 'srgb',\n\trenderMode = 'always',\n\tautoRender = true,\n\tmaxDelta = 0.1,\n\tadapterOptions = undefined,\n\tdeviceDescriptor = undefined,\n\tdpr = getInitialDpr(),\n\tshowErrorOverlay = true,\n\terrorRenderer,\n\tonError = undefined,\n\terrorHistoryLimit = 0,\n\tonErrorHistory = undefined,\n\tclassName = '',\n\tstyle,\n\tchildren\n}: FragCanvasProps) {\n\tconst runtimeRef = useRef<FragCanvasRuntimeState | null>(null);\n\tif (!runtimeRef.current) {\n\t\truntimeRef.current = createRuntimeState(getInitialDpr());\n\t}\n\tconst runtime = runtimeRef.current;\n\n\tconst runtimePropsRef = useRef<RuntimePropsSnapshot>({\n\t\tmaterial,\n\t\trenderTargets,\n\t\tpasses,\n\t\tclearColor,\n\t\toutputColorSpace,\n\t\tadapterOptions,\n\t\tdeviceDescriptor,\n\t\tonError,\n\t\terrorHistoryLimit,\n\t\tonErrorHistory\n\t});\n\truntimePropsRef.current = {\n\t\tmaterial,\n\t\trenderTargets,\n\t\tpasses,\n\t\tclearColor,\n\t\toutputColorSpace,\n\t\tadapterOptions,\n\t\tdeviceDescriptor,\n\t\tonError,\n\t\terrorHistoryLimit,\n\t\tonErrorHistory\n\t};\n\n\tconst [errorReport, setErrorReport] = useState<MotionGPUErrorReport | null>(null);\n\tconst [errorHistory, setErrorHistory] = useState<MotionGPUErrorReport[]>([]);\n\n\tuseEffect(() => {\n\t\truntime.renderModeState.set(renderMode);\n\t}, [renderMode, runtime]);\n\n\tuseEffect(() => {\n\t\truntime.autoRenderState.set(autoRender);\n\t}, [autoRender, runtime]);\n\n\tuseEffect(() => {\n\t\truntime.maxDeltaState.set(maxDelta);\n\t}, [maxDelta, runtime]);\n\n\tuseEffect(() => {\n\t\truntime.dprState.set(dpr);\n\t}, [dpr, runtime]);\n\n\tuseEffect(() => {\n\t\tconst limit = getNormalizedErrorHistoryLimit(errorHistoryLimit);\n\t\tif (limit <= 0) {\n\t\t\tif (errorHistory.length === 0) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tsetErrorHistory([]);\n\t\t\tonErrorHistory?.([]);\n\t\t\treturn;\n\t\t}\n\n\t\tif (errorHistory.length <= limit) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst trimmed = errorHistory.slice(errorHistory.length - limit);\n\t\tsetErrorHistory(trimmed);\n\t\tonErrorHistory?.(trimmed);\n\t}, [errorHistory, errorHistoryLimit, onErrorHistory]);\n\n\tuseEffect(() => {\n\t\tconst canvas = runtime.canvasRef.current;\n\t\tif (!canvas) {\n\t\t\tconst report = toMotionGPUErrorReport(\n\t\t\t\tnew Error('Canvas element is not available'),\n\t\t\t\t'initialization'\n\t\t\t);\n\t\t\tsetErrorReport(report);\n\t\t\tconst historyLimit = getNormalizedErrorHistoryLimit(\n\t\t\t\truntimePropsRef.current.errorHistoryLimit\n\t\t\t);\n\t\t\tif (historyLimit > 0) {\n\t\t\t\tconst nextHistory = [report].slice(-historyLimit);\n\t\t\t\tsetErrorHistory(nextHistory);\n\t\t\t\truntimePropsRef.current.onErrorHistory?.(nextHistory);\n\t\t\t}\n\t\t\truntimePropsRef.current.onError?.(report);\n\t\t\treturn () => {\n\t\t\t\truntime.registry.clear();\n\t\t\t};\n\t\t}\n\n\t\tconst runtimeLoop = createMotionGPURuntimeLoop({\n\t\t\tcanvas,\n\t\t\tregistry: runtime.registry,\n\t\t\tsize: runtime.size,\n\t\t\tdpr: runtime.dprState,\n\t\t\tmaxDelta: runtime.maxDeltaState,\n\t\t\tgetMaterial: () => runtimePropsRef.current.material,\n\t\t\tgetRenderTargets: () => runtimePropsRef.current.renderTargets,\n\t\t\tgetPasses: () => runtimePropsRef.current.passes,\n\t\t\tgetClearColor: () => runtimePropsRef.current.clearColor,\n\t\t\tgetOutputColorSpace: () => runtimePropsRef.current.outputColorSpace,\n\t\t\tgetAdapterOptions: () => runtimePropsRef.current.adapterOptions,\n\t\t\tgetDeviceDescriptor: () => runtimePropsRef.current.deviceDescriptor,\n\t\t\tgetOnError: () => runtimePropsRef.current.onError,\n\t\t\tgetErrorHistoryLimit: () => runtimePropsRef.current.errorHistoryLimit,\n\t\t\tgetOnErrorHistory: () => runtimePropsRef.current.onErrorHistory,\n\t\t\treportErrorHistory: (history) => {\n\t\t\t\tsetErrorHistory(history);\n\t\t\t},\n\t\t\treportError: (report) => {\n\t\t\t\tsetErrorReport(report);\n\t\t\t}\n\t\t});\n\t\truntime.requestFrameSignalRef.current = runtimeLoop.requestFrame;\n\n\t\treturn () => {\n\t\t\truntime.requestFrameSignalRef.current = null;\n\t\t\truntimeLoop.destroy();\n\t\t};\n\t}, [runtime]);\n\n\tconst canvasStyle: CSSProperties = {\n\t\tposition: 'absolute',\n\t\tinset: 0,\n\t\tdisplay: 'block',\n\t\twidth: '100%',\n\t\theight: '100%',\n\t\t...style\n\t};\n\n\treturn (\n\t\t<FrameRegistryReactContext.Provider value={runtime.registry}>\n\t\t\t<MotionGPUReactContext.Provider value={runtime.context}>\n\t\t\t\t<div\n\t\t\t\t\tclassName=\"motiongpu-canvas-wrap\"\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\tposition: 'relative',\n\t\t\t\t\t\twidth: '100%',\n\t\t\t\t\t\theight: '100%',\n\t\t\t\t\t\tminWidth: 0,\n\t\t\t\t\t\tminHeight: 0,\n\t\t\t\t\t\toverflow: 'hidden'\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t<canvas\n\t\t\t\t\t\tclassName={className}\n\t\t\t\t\t\tstyle={canvasStyle}\n\t\t\t\t\t\tref={(node) => {\n\t\t\t\t\t\t\truntime.canvasRef.current = node ?? undefined;\n\t\t\t\t\t\t}}\n\t\t\t\t\t/>\n\t\t\t\t\t{showErrorOverlay && errorReport ? (\n\t\t\t\t\t\terrorRenderer ? (\n\t\t\t\t\t\t\terrorRenderer(errorReport)\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t<MotionGPUErrorOverlay report={errorReport} />\n\t\t\t\t\t\t)\n\t\t\t\t\t) : null}\n\t\t\t\t\t{children}\n\t\t\t\t</div>\n\t\t\t</MotionGPUReactContext.Provider>\n\t\t</FrameRegistryReactContext.Provider>\n\t);\n}\n"],"mappings":"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"}
@@ -4,3 +4,4 @@ interface MotionGPUErrorOverlayProps {
4
4
  }
5
5
  export declare function MotionGPUErrorOverlay({ report }: MotionGPUErrorOverlayProps): import("react/jsx-runtime").JSX.Element;
6
6
  export {};
7
+ //# sourceMappingURL=MotionGPUErrorOverlay.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MotionGPUErrorOverlay.d.ts","sourceRoot":"","sources":["../../src/lib/react/MotionGPUErrorOverlay.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAGpE,UAAU,0BAA0B;IACnC,MAAM,EAAE,oBAAoB,CAAC;CAC7B;AA8ZD,wBAAgB,qBAAqB,CAAC,EAAE,MAAM,EAAE,EAAE,0BAA0B,2CAwG3E"}