@twick/core 0.11.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 (373) hide show
  1. package/LICENSE +21 -0
  2. package/lib/app/Logger.d.ts +105 -0
  3. package/lib/app/Logger.d.ts.map +1 -0
  4. package/lib/app/Logger.js +77 -0
  5. package/lib/app/PlaybackManager.d.ts +55 -0
  6. package/lib/app/PlaybackManager.d.ts.map +1 -0
  7. package/lib/app/PlaybackManager.js +179 -0
  8. package/lib/app/PlaybackStatus.d.ts +30 -0
  9. package/lib/app/PlaybackStatus.d.ts.map +1 -0
  10. package/lib/app/PlaybackStatus.js +46 -0
  11. package/lib/app/Player.d.ts +130 -0
  12. package/lib/app/Player.d.ts.map +1 -0
  13. package/lib/app/Player.js +375 -0
  14. package/lib/app/Project.d.ts +145 -0
  15. package/lib/app/Project.d.ts.map +1 -0
  16. package/lib/app/Project.js +10 -0
  17. package/lib/app/Renderer.d.ts +90 -0
  18. package/lib/app/Renderer.d.ts.map +1 -0
  19. package/lib/app/Renderer.js +318 -0
  20. package/lib/app/SharedWebGLContext.d.ts +24 -0
  21. package/lib/app/SharedWebGLContext.d.ts.map +1 -0
  22. package/lib/app/SharedWebGLContext.js +200 -0
  23. package/lib/app/Stage.d.ts +30 -0
  24. package/lib/app/Stage.d.ts.map +1 -0
  25. package/lib/app/Stage.js +75 -0
  26. package/lib/app/TimeEstimator.d.ts +53 -0
  27. package/lib/app/TimeEstimator.d.ts.map +1 -0
  28. package/lib/app/TimeEstimator.js +70 -0
  29. package/lib/app/index.d.ts +16 -0
  30. package/lib/app/index.d.ts.map +1 -0
  31. package/lib/app/index.js +16 -0
  32. package/lib/app/makeProject.d.ts +15 -0
  33. package/lib/app/makeProject.d.ts.map +1 -0
  34. package/lib/app/makeProject.js +72 -0
  35. package/lib/app/project-settings.d.ts +8 -0
  36. package/lib/app/project-settings.d.ts.map +1 -0
  37. package/lib/app/project-settings.js +13 -0
  38. package/lib/decorators/decorate.d.ts +2 -0
  39. package/lib/decorators/decorate.d.ts.map +1 -0
  40. package/lib/decorators/decorate.js +10 -0
  41. package/lib/decorators/deprecated.d.ts +5 -0
  42. package/lib/decorators/deprecated.d.ts.map +1 -0
  43. package/lib/decorators/deprecated.js +23 -0
  44. package/lib/decorators/index.d.ts +9 -0
  45. package/lib/decorators/index.d.ts.map +1 -0
  46. package/lib/decorators/index.js +9 -0
  47. package/lib/decorators/lazy.d.ts +14 -0
  48. package/lib/decorators/lazy.d.ts.map +1 -0
  49. package/lib/decorators/lazy.js +27 -0
  50. package/lib/decorators/threadable.d.ts +2 -0
  51. package/lib/decorators/threadable.d.ts.map +1 -0
  52. package/lib/decorators/threadable.js +7 -0
  53. package/lib/events/AsyncEventDispatcher.d.ts +45 -0
  54. package/lib/events/AsyncEventDispatcher.d.ts.map +1 -0
  55. package/lib/events/AsyncEventDispatcher.js +33 -0
  56. package/lib/events/EventDispatcher.d.ts +38 -0
  57. package/lib/events/EventDispatcher.d.ts.map +1 -0
  58. package/lib/events/EventDispatcher.js +29 -0
  59. package/lib/events/EventDispatcherBase.d.ts +55 -0
  60. package/lib/events/EventDispatcherBase.d.ts.map +1 -0
  61. package/lib/events/EventDispatcherBase.js +68 -0
  62. package/lib/events/FlagDispatcher.d.ts +54 -0
  63. package/lib/events/FlagDispatcher.d.ts.map +1 -0
  64. package/lib/events/FlagDispatcher.js +63 -0
  65. package/lib/events/ValueDispatcher.d.ts +81 -0
  66. package/lib/events/ValueDispatcher.d.ts.map +1 -0
  67. package/lib/events/ValueDispatcher.js +97 -0
  68. package/lib/events/index.d.ts +11 -0
  69. package/lib/events/index.d.ts.map +1 -0
  70. package/lib/events/index.js +11 -0
  71. package/lib/exporter/Exporter.d.ts +101 -0
  72. package/lib/exporter/Exporter.d.ts.map +1 -0
  73. package/lib/exporter/Exporter.js +2 -0
  74. package/lib/exporter/FFmpegExporter.d.ts +50 -0
  75. package/lib/exporter/FFmpegExporter.d.ts.map +1 -0
  76. package/lib/exporter/FFmpegExporter.js +140 -0
  77. package/lib/exporter/ImageExporter.d.ts +34 -0
  78. package/lib/exporter/ImageExporter.d.ts.map +1 -0
  79. package/lib/exporter/ImageExporter.js +80 -0
  80. package/lib/exporter/WasmExporter.d.ts +19 -0
  81. package/lib/exporter/WasmExporter.d.ts.map +1 -0
  82. package/lib/exporter/WasmExporter.js +78 -0
  83. package/lib/exporter/download-videos.d.ts +3 -0
  84. package/lib/exporter/download-videos.d.ts.map +1 -0
  85. package/lib/exporter/download-videos.js +45 -0
  86. package/lib/exporter/index.d.ts +5 -0
  87. package/lib/exporter/index.d.ts.map +1 -0
  88. package/lib/exporter/index.js +5 -0
  89. package/lib/flow/all.d.ts +18 -0
  90. package/lib/flow/all.d.ts.map +1 -0
  91. package/lib/flow/all.js +25 -0
  92. package/lib/flow/any.d.ts +18 -0
  93. package/lib/flow/any.d.ts.map +1 -0
  94. package/lib/flow/any.js +25 -0
  95. package/lib/flow/chain.d.ts +36 -0
  96. package/lib/flow/chain.d.ts.map +1 -0
  97. package/lib/flow/chain.js +46 -0
  98. package/lib/flow/delay.d.ts +29 -0
  99. package/lib/flow/delay.d.ts.map +1 -0
  100. package/lib/flow/delay.js +39 -0
  101. package/lib/flow/every.d.ts +41 -0
  102. package/lib/flow/every.d.ts.map +1 -0
  103. package/lib/flow/every.js +61 -0
  104. package/lib/flow/index.d.ts +17 -0
  105. package/lib/flow/index.d.ts.map +1 -0
  106. package/lib/flow/index.js +17 -0
  107. package/lib/flow/join.d.ts +35 -0
  108. package/lib/flow/join.d.ts.map +1 -0
  109. package/lib/flow/join.js +33 -0
  110. package/lib/flow/loop.d.ts +58 -0
  111. package/lib/flow/loop.d.ts.map +1 -0
  112. package/lib/flow/loop.js +51 -0
  113. package/lib/flow/loopFor.d.ts +25 -0
  114. package/lib/flow/loopFor.d.ts.map +1 -0
  115. package/lib/flow/loopFor.js +42 -0
  116. package/lib/flow/names.d.ts +3 -0
  117. package/lib/flow/names.d.ts.map +1 -0
  118. package/lib/flow/names.js +11 -0
  119. package/lib/flow/run.d.ts +45 -0
  120. package/lib/flow/run.d.ts.map +1 -0
  121. package/lib/flow/run.js +14 -0
  122. package/lib/flow/scheduling.d.ts +18 -0
  123. package/lib/flow/scheduling.d.ts.map +1 -0
  124. package/lib/flow/scheduling.js +33 -0
  125. package/lib/flow/sequence.d.ts +22 -0
  126. package/lib/flow/sequence.d.ts.map +1 -0
  127. package/lib/flow/sequence.js +31 -0
  128. package/lib/index.d.ts +16 -0
  129. package/lib/index.d.ts.map +1 -0
  130. package/lib/index.js +16 -0
  131. package/lib/media/index.d.ts +7 -0
  132. package/lib/media/index.d.ts.map +1 -0
  133. package/lib/media/index.js +7 -0
  134. package/lib/media/loadImage.d.ts +8 -0
  135. package/lib/media/loadImage.d.ts.map +1 -0
  136. package/lib/media/loadImage.js +29 -0
  137. package/lib/plugin/DefaultPlugin.d.ts +10 -0
  138. package/lib/plugin/DefaultPlugin.d.ts.map +1 -0
  139. package/lib/plugin/DefaultPlugin.js +17 -0
  140. package/lib/plugin/Plugin.d.ts +53 -0
  141. package/lib/plugin/Plugin.d.ts.map +1 -0
  142. package/lib/plugin/Plugin.js +2 -0
  143. package/lib/plugin/index.d.ts +3 -0
  144. package/lib/plugin/index.d.ts.map +1 -0
  145. package/lib/plugin/index.js +3 -0
  146. package/lib/plugin/makePlugin.d.ts +15 -0
  147. package/lib/plugin/makePlugin.d.ts.map +1 -0
  148. package/lib/plugin/makePlugin.js +16 -0
  149. package/lib/scenes/GeneratorScene.d.ts +95 -0
  150. package/lib/scenes/GeneratorScene.d.ts.map +1 -0
  151. package/lib/scenes/GeneratorScene.js +273 -0
  152. package/lib/scenes/Inspectable.d.ts +71 -0
  153. package/lib/scenes/Inspectable.d.ts.map +1 -0
  154. package/lib/scenes/Inspectable.js +4 -0
  155. package/lib/scenes/LifecycleEvents.d.ts +18 -0
  156. package/lib/scenes/LifecycleEvents.d.ts.map +1 -0
  157. package/lib/scenes/LifecycleEvents.js +45 -0
  158. package/lib/scenes/Random.d.ts +66 -0
  159. package/lib/scenes/Random.d.ts.map +1 -0
  160. package/lib/scenes/Random.js +101 -0
  161. package/lib/scenes/Scene.d.ts +298 -0
  162. package/lib/scenes/Scene.d.ts.map +1 -0
  163. package/lib/scenes/Scene.js +25 -0
  164. package/lib/scenes/SceneState.d.ts +34 -0
  165. package/lib/scenes/SceneState.d.ts.map +1 -0
  166. package/lib/scenes/SceneState.js +35 -0
  167. package/lib/scenes/Shaders.d.ts +63 -0
  168. package/lib/scenes/Shaders.d.ts.map +1 -0
  169. package/lib/scenes/Shaders.js +158 -0
  170. package/lib/scenes/Slides.d.ts +33 -0
  171. package/lib/scenes/Slides.d.ts.map +1 -0
  172. package/lib/scenes/Slides.js +115 -0
  173. package/lib/scenes/Threadable.d.ts +19 -0
  174. package/lib/scenes/Threadable.d.ts.map +1 -0
  175. package/lib/scenes/Threadable.js +4 -0
  176. package/lib/scenes/Variables.d.ts +24 -0
  177. package/lib/scenes/Variables.d.ts.map +1 -0
  178. package/lib/scenes/Variables.js +39 -0
  179. package/lib/scenes/index.d.ts +16 -0
  180. package/lib/scenes/index.d.ts.map +1 -0
  181. package/lib/scenes/index.js +16 -0
  182. package/lib/signals/CompoundSignalContext.d.ts +21 -0
  183. package/lib/signals/CompoundSignalContext.d.ts.map +1 -0
  184. package/lib/signals/CompoundSignalContext.js +73 -0
  185. package/lib/signals/ComputedContext.d.ts +14 -0
  186. package/lib/signals/ComputedContext.d.ts.map +1 -0
  187. package/lib/signals/ComputedContext.js +36 -0
  188. package/lib/signals/DependencyContext.d.ts +32 -0
  189. package/lib/signals/DependencyContext.d.ts.map +1 -0
  190. package/lib/signals/DependencyContext.js +87 -0
  191. package/lib/signals/SignalContext.d.ts +120 -0
  192. package/lib/signals/SignalContext.d.ts.map +1 -0
  193. package/lib/signals/SignalContext.js +245 -0
  194. package/lib/signals/createComputed.d.ts +3 -0
  195. package/lib/signals/createComputed.d.ts.map +1 -0
  196. package/lib/signals/createComputed.js +5 -0
  197. package/lib/signals/createComputedAsync.d.ts +4 -0
  198. package/lib/signals/createComputedAsync.d.ts.map +1 -0
  199. package/lib/signals/createComputedAsync.js +15 -0
  200. package/lib/signals/createSignal.d.ts +5 -0
  201. package/lib/signals/createSignal.d.ts.map +1 -0
  202. package/lib/signals/createSignal.js +6 -0
  203. package/lib/signals/index.d.ts +16 -0
  204. package/lib/signals/index.d.ts.map +1 -0
  205. package/lib/signals/index.js +16 -0
  206. package/lib/signals/symbols.d.ts +2 -0
  207. package/lib/signals/symbols.d.ts.map +1 -0
  208. package/lib/signals/symbols.js +2 -0
  209. package/lib/signals/types.d.ts +51 -0
  210. package/lib/signals/types.d.ts.map +1 -0
  211. package/lib/signals/types.js +2 -0
  212. package/lib/signals/utils.d.ts +5 -0
  213. package/lib/signals/utils.d.ts.map +1 -0
  214. package/lib/signals/utils.js +10 -0
  215. package/lib/threading/Thread.d.ts +77 -0
  216. package/lib/threading/Thread.d.ts.map +1 -0
  217. package/lib/threading/Thread.js +169 -0
  218. package/lib/threading/ThreadGenerator.d.ts +39 -0
  219. package/lib/threading/ThreadGenerator.d.ts.map +1 -0
  220. package/lib/threading/ThreadGenerator.js +17 -0
  221. package/lib/threading/cancel.d.ts +17 -0
  222. package/lib/threading/cancel.d.ts.map +1 -0
  223. package/lib/threading/cancel.js +26 -0
  224. package/lib/threading/index.d.ts +11 -0
  225. package/lib/threading/index.d.ts.map +1 -0
  226. package/lib/threading/index.js +11 -0
  227. package/lib/threading/spawn.d.ts +28 -0
  228. package/lib/threading/spawn.d.ts.map +1 -0
  229. package/lib/threading/spawn.js +30 -0
  230. package/lib/threading/threads.d.ts +46 -0
  231. package/lib/threading/threads.d.ts.map +1 -0
  232. package/lib/threading/threads.js +89 -0
  233. package/lib/transitions/fadeTransition.d.ts +8 -0
  234. package/lib/transitions/fadeTransition.d.ts.map +1 -0
  235. package/lib/transitions/fadeTransition.js +16 -0
  236. package/lib/transitions/index.d.ts +11 -0
  237. package/lib/transitions/index.d.ts.map +1 -0
  238. package/lib/transitions/index.js +11 -0
  239. package/lib/transitions/slideTransition.d.ts +18 -0
  240. package/lib/transitions/slideTransition.d.ts.map +1 -0
  241. package/lib/transitions/slideTransition.js +14 -0
  242. package/lib/transitions/useTransition.d.ts +10 -0
  243. package/lib/transitions/useTransition.d.ts.map +1 -0
  244. package/lib/transitions/useTransition.js +27 -0
  245. package/lib/transitions/zoomInTransition.d.ts +10 -0
  246. package/lib/transitions/zoomInTransition.d.ts.map +1 -0
  247. package/lib/transitions/zoomInTransition.js +33 -0
  248. package/lib/transitions/zoomOutTransition.d.ts +10 -0
  249. package/lib/transitions/zoomOutTransition.d.ts.map +1 -0
  250. package/lib/transitions/zoomOutTransition.js +33 -0
  251. package/lib/tsconfig.build.tsbuildinfo +1 -0
  252. package/lib/tweening/helpers.d.ts +5 -0
  253. package/lib/tweening/helpers.d.ts.map +1 -0
  254. package/lib/tweening/helpers.js +16 -0
  255. package/lib/tweening/index.d.ts +11 -0
  256. package/lib/tweening/index.d.ts.map +1 -0
  257. package/lib/tweening/index.js +11 -0
  258. package/lib/tweening/interpolationFunctions.d.ts +38 -0
  259. package/lib/tweening/interpolationFunctions.d.ts.map +1 -0
  260. package/lib/tweening/interpolationFunctions.js +107 -0
  261. package/lib/tweening/spring.d.ts +20 -0
  262. package/lib/tweening/spring.d.ts.map +1 -0
  263. package/lib/tweening/spring.js +103 -0
  264. package/lib/tweening/timingFunctions.d.ts +46 -0
  265. package/lib/tweening/timingFunctions.d.ts.map +1 -0
  266. package/lib/tweening/timingFunctions.js +233 -0
  267. package/lib/tweening/tween.d.ts +3 -0
  268. package/lib/tweening/tween.d.ts.map +1 -0
  269. package/lib/tweening/tween.js +21 -0
  270. package/lib/types/BBox.d.ts +73 -0
  271. package/lib/types/BBox.d.ts.map +1 -0
  272. package/lib/types/BBox.js +249 -0
  273. package/lib/types/Canvas.d.ts +3 -0
  274. package/lib/types/Canvas.d.ts.map +1 -0
  275. package/lib/types/Canvas.js +2 -0
  276. package/lib/types/Color.d.ts +65 -0
  277. package/lib/types/Color.d.ts.map +1 -0
  278. package/lib/types/Color.js +185 -0
  279. package/lib/types/Matrix.d.ts +3 -0
  280. package/lib/types/Matrix.d.ts.map +1 -0
  281. package/lib/types/Matrix.js +10 -0
  282. package/lib/types/Matrix2D.d.ts +363 -0
  283. package/lib/types/Matrix2D.d.ts.map +1 -0
  284. package/lib/types/Matrix2D.js +554 -0
  285. package/lib/types/Origin.d.ts +17 -0
  286. package/lib/types/Origin.d.ts.map +1 -0
  287. package/lib/types/Origin.js +53 -0
  288. package/lib/types/Spacing.d.ts +36 -0
  289. package/lib/types/Spacing.d.ts.map +1 -0
  290. package/lib/types/Spacing.js +70 -0
  291. package/lib/types/Type.d.ts +9 -0
  292. package/lib/types/Type.d.ts.map +1 -0
  293. package/lib/types/Type.js +5 -0
  294. package/lib/types/Vector.d.ts +203 -0
  295. package/lib/types/Vector.d.ts.map +1 -0
  296. package/lib/types/Vector.js +355 -0
  297. package/lib/types/alignment-enums.d.ts +22 -0
  298. package/lib/types/alignment-enums.d.ts.map +1 -0
  299. package/lib/types/alignment-enums.js +25 -0
  300. package/lib/types/index.d.ts +17 -0
  301. package/lib/types/index.d.ts.map +1 -0
  302. package/lib/types/index.js +17 -0
  303. package/lib/types/vector-transformations.d.ts +20 -0
  304. package/lib/types/vector-transformations.d.ts.map +1 -0
  305. package/lib/types/vector-transformations.js +31 -0
  306. package/lib/utils/DetailedError.d.ts +24 -0
  307. package/lib/utils/DetailedError.d.ts.map +1 -0
  308. package/lib/utils/DetailedError.js +16 -0
  309. package/lib/utils/ExperimentalError.d.ts +10 -0
  310. package/lib/utils/ExperimentalError.d.ts.map +1 -0
  311. package/lib/utils/ExperimentalError.js +32 -0
  312. package/lib/utils/Semaphore.d.ts +12 -0
  313. package/lib/utils/Semaphore.d.ts.map +1 -0
  314. package/lib/utils/Semaphore.js +25 -0
  315. package/lib/utils/beginSlide.d.ts +3 -0
  316. package/lib/utils/beginSlide.d.ts.map +1 -0
  317. package/lib/utils/beginSlide.js +12 -0
  318. package/lib/utils/capitalize.d.ts +2 -0
  319. package/lib/utils/capitalize.d.ts.map +1 -0
  320. package/lib/utils/capitalize.js +4 -0
  321. package/lib/utils/createRef.d.ts +15 -0
  322. package/lib/utils/createRef.d.ts.map +1 -0
  323. package/lib/utils/createRef.js +21 -0
  324. package/lib/utils/createRefArray.d.ts +27 -0
  325. package/lib/utils/createRefArray.d.ts.map +1 -0
  326. package/lib/utils/createRefArray.js +49 -0
  327. package/lib/utils/createRefMap.d.ts +50 -0
  328. package/lib/utils/createRefMap.d.ts.map +1 -0
  329. package/lib/utils/createRefMap.js +77 -0
  330. package/lib/utils/debug.d.ts +24 -0
  331. package/lib/utils/debug.d.ts.map +1 -0
  332. package/lib/utils/debug.js +47 -0
  333. package/lib/utils/deprecate.d.ts +9 -0
  334. package/lib/utils/deprecate.d.ts.map +1 -0
  335. package/lib/utils/deprecate.js +15 -0
  336. package/lib/utils/errorToLog.d.ts +3 -0
  337. package/lib/utils/errorToLog.d.ts.map +1 -0
  338. package/lib/utils/errorToLog.js +8 -0
  339. package/lib/utils/experimentalLog.d.ts +3 -0
  340. package/lib/utils/experimentalLog.d.ts.map +1 -0
  341. package/lib/utils/experimentalLog.js +10 -0
  342. package/lib/utils/getContext.d.ts +2 -0
  343. package/lib/utils/getContext.d.ts.map +1 -0
  344. package/lib/utils/getContext.js +8 -0
  345. package/lib/utils/index.d.ts +26 -0
  346. package/lib/utils/index.d.ts.map +1 -0
  347. package/lib/utils/index.js +26 -0
  348. package/lib/utils/math.d.ts +15 -0
  349. package/lib/utils/math.d.ts.map +1 -0
  350. package/lib/utils/math.js +15 -0
  351. package/lib/utils/range.d.ts +40 -0
  352. package/lib/utils/range.d.ts.map +1 -0
  353. package/lib/utils/range.js +18 -0
  354. package/lib/utils/useContext.d.ts +13 -0
  355. package/lib/utils/useContext.d.ts.map +1 -0
  356. package/lib/utils/useContext.js +18 -0
  357. package/lib/utils/usePlayback.d.ts +8 -0
  358. package/lib/utils/usePlayback.d.ts.map +1 -0
  359. package/lib/utils/usePlayback.js +20 -0
  360. package/lib/utils/useScene.d.ts +17 -0
  361. package/lib/utils/useScene.d.ts.map +1 -0
  362. package/lib/utils/useScene.js +33 -0
  363. package/lib/utils/useThread.d.ts +8 -0
  364. package/lib/utils/useThread.d.ts.map +1 -0
  365. package/lib/utils/useThread.js +24 -0
  366. package/lib/utils/useTime.d.ts +19 -0
  367. package/lib/utils/useTime.d.ts.map +1 -0
  368. package/lib/utils/useTime.js +22 -0
  369. package/package.json +36 -0
  370. package/project.d.ts +24 -0
  371. package/shaders/common.glsl +15 -0
  372. package/shaders/fragment.glsl +8 -0
  373. package/tsconfig.project.json +14 -0
@@ -0,0 +1,77 @@
1
+ import type { ThreadGenerator } from './ThreadGenerator';
2
+ export declare function noop(): ThreadGenerator;
3
+ /**
4
+ * A class representing an individual thread.
5
+ *
6
+ * @remarks
7
+ * Thread is a wrapper for a generator that can be executed concurrently.
8
+ *
9
+ * Aside from the main thread, all threads need to have a parent.
10
+ * If a parent finishes execution, all of its child threads are terminated.
11
+ */
12
+ export declare class Thread {
13
+ /**
14
+ * The generator wrapped by this thread.
15
+ */
16
+ readonly runner: ThreadGenerator & {
17
+ task?: Thread;
18
+ };
19
+ children: Thread[];
20
+ /**
21
+ * The next value to be passed to the wrapped generator.
22
+ */
23
+ value: unknown;
24
+ /**
25
+ * The current time of this thread.
26
+ *
27
+ * @remarks
28
+ * Used by {@link flow.waitFor} and other time-based functions to properly
29
+ * support durations shorter than one frame.
30
+ */
31
+ readonly time: import("../signals").SimpleSignal<number, void>;
32
+ /**
33
+ * The fixed time of this thread.
34
+ *
35
+ * @remarks
36
+ * Fixed time is a multiple of the frame duration. It can be used to account
37
+ * for the difference between this thread's {@link time} and the time of the
38
+ * current animation frame.
39
+ */
40
+ get fixed(): number;
41
+ /**
42
+ * Check if this thread or any of its ancestors has been canceled.
43
+ */
44
+ get canceled(): boolean;
45
+ get paused(): boolean;
46
+ parent: Thread | null;
47
+ private isCanceled;
48
+ private isPaused;
49
+ private fixedTime;
50
+ private queue;
51
+ constructor(
52
+ /**
53
+ * The generator wrapped by this thread.
54
+ */
55
+ runner: ThreadGenerator & {
56
+ task?: Thread;
57
+ });
58
+ /**
59
+ * Progress the wrapped generator once.
60
+ */
61
+ next(): IteratorYieldResult<void | Promise<any> | ThreadGenerator | import("./ThreadGenerator").Promisable<any>> | IteratorReturnResult<void> | {
62
+ value: null;
63
+ done: boolean;
64
+ };
65
+ /**
66
+ * Prepare the thread for the next update cycle.
67
+ *
68
+ * @param dt - The delta time of the next cycle.
69
+ */
70
+ update(dt: number): void;
71
+ spawn(child: ThreadGenerator | (() => ThreadGenerator)): ThreadGenerator;
72
+ add(child: Thread): void;
73
+ drain(callback: (task: ThreadGenerator) => void): void;
74
+ cancel(): void;
75
+ pause(value: boolean): void;
76
+ }
77
+ //# sourceMappingURL=Thread.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Thread.d.ts","sourceRoot":"","sources":["../../src/threading/Thread.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAC,eAAe,EAAC,MAAM,mBAAmB,CAAC;AAgDvD,wBAAiB,IAAI,IAAI,eAAe,CAEvC;AAED;;;;;;;;GAQG;AACH,qBAAa,MAAM;IA8Cf;;OAEG;aACa,MAAM,EAAE,eAAe,GAAG;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAC;IAhDpD,QAAQ,EAAE,MAAM,EAAE,CAAM;IAC/B;;OAEG;IACI,KAAK,EAAE,OAAO,CAAC;IAEtB;;;;;;OAMG;IACH,SAAgB,IAAI,kDAAmB;IAEvC;;;;;;;OAOG;IACH,IAAW,KAAK,WAEf;IAED;;OAEG;IACH,IAAW,QAAQ,IAAI,OAAO,CAE7B;IAED,IAAW,MAAM,IAAI,OAAO,CAE3B;IAEM,MAAM,EAAE,MAAM,GAAG,IAAI,CAAQ;IACpC,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,SAAS,CAAK;IACtB,OAAO,CAAC,KAAK,CAAyB;;IAGpC;;OAEG;IACa,MAAM,EAAE,eAAe,GAAG;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAC;IAc3D;;OAEG;IACI,IAAI;;;;IAeX;;;;OAIG;IACI,MAAM,CAAC,EAAE,EAAE,MAAM;IAQjB,KAAK,CACV,KAAK,EAAE,eAAe,GAAG,CAAC,MAAM,eAAe,CAAC,GAC/C,eAAe;IAQX,GAAG,CAAC,KAAK,EAAE,MAAM;IAUjB,KAAK,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,eAAe,KAAK,IAAI;IAK/C,MAAM;IAON,KAAK,CAAC,KAAK,EAAE,OAAO;CAG5B"}
@@ -0,0 +1,169 @@
1
+ import { decorate, threadable } from '../decorators';
2
+ import { getTaskName, setTaskName } from '../flow';
3
+ import { createSignal } from '../signals';
4
+ import { endThread, startThread, useLogger } from '../utils';
5
+ import { isThreadGenerator } from './ThreadGenerator';
6
+ const reusedGenerator = `
7
+ This usually happens when you mistakenly reuse a generator that is already
8
+ running.
9
+
10
+ For example, using \`yield\` here will run the opacity generator concurrently and
11
+ store it in the \`task\` variable (in case you want to cancel or await it later):
12
+
13
+ \`\`\`ts
14
+ const task = yield rect().opacity(1, 1);
15
+ \`\`\`
16
+
17
+ Trying to \`yield\` this task again will cause the current error:
18
+
19
+ \`\`\`ts
20
+ yield task;
21
+ \`\`\`
22
+
23
+ Passing it to other flow functions will also cause the error:
24
+
25
+ \`\`\`ts
26
+ // prettier-ignore
27
+ yield* all(task);
28
+ \`\`\`
29
+
30
+ Try to investigate your code looking for \`yield\` statements whose return value
31
+ is reused in this way. Here's an example of a common mistake:
32
+
33
+ \`\`\`ts wrong
34
+ // prettier-ignore
35
+ yield* all(
36
+ yield rect().opacity(1, 1),
37
+ yield rect().x(200, 1),
38
+ );
39
+ \`\`\`
40
+
41
+ \`\`\`ts correct
42
+ // prettier-ignore
43
+ yield* all(
44
+ rect().opacity(1, 1),
45
+ rect().x(200, 1),
46
+ );
47
+ \`\`\`
48
+ `;
49
+ decorate(noop, threadable());
50
+ export function* noop() {
51
+ // do nothing
52
+ }
53
+ /**
54
+ * A class representing an individual thread.
55
+ *
56
+ * @remarks
57
+ * Thread is a wrapper for a generator that can be executed concurrently.
58
+ *
59
+ * Aside from the main thread, all threads need to have a parent.
60
+ * If a parent finishes execution, all of its child threads are terminated.
61
+ */
62
+ export class Thread {
63
+ /**
64
+ * The fixed time of this thread.
65
+ *
66
+ * @remarks
67
+ * Fixed time is a multiple of the frame duration. It can be used to account
68
+ * for the difference between this thread's {@link time} and the time of the
69
+ * current animation frame.
70
+ */
71
+ get fixed() {
72
+ return this.fixedTime;
73
+ }
74
+ /**
75
+ * Check if this thread or any of its ancestors has been canceled.
76
+ */
77
+ get canceled() {
78
+ return this.isCanceled || (this.parent?.canceled ?? false);
79
+ }
80
+ get paused() {
81
+ return this.isPaused || (this.parent?.paused ?? false);
82
+ }
83
+ constructor(
84
+ /**
85
+ * The generator wrapped by this thread.
86
+ */
87
+ runner) {
88
+ this.runner = runner;
89
+ this.children = [];
90
+ /**
91
+ * The current time of this thread.
92
+ *
93
+ * @remarks
94
+ * Used by {@link flow.waitFor} and other time-based functions to properly
95
+ * support durations shorter than one frame.
96
+ */
97
+ this.time = createSignal(0);
98
+ this.parent = null;
99
+ this.isCanceled = false;
100
+ this.isPaused = false;
101
+ this.fixedTime = 0;
102
+ this.queue = [];
103
+ if (this.runner.task) {
104
+ useLogger().error({
105
+ message: `The generator "${getTaskName(this.runner)}" is already being executed by another thread.`,
106
+ remarks: reusedGenerator,
107
+ });
108
+ this.runner = noop();
109
+ }
110
+ this.runner.task = this;
111
+ }
112
+ /**
113
+ * Progress the wrapped generator once.
114
+ */
115
+ next() {
116
+ if (this.paused) {
117
+ return {
118
+ value: null,
119
+ done: false,
120
+ };
121
+ }
122
+ startThread(this);
123
+ const result = this.runner.next(this.value);
124
+ endThread(this);
125
+ this.value = null;
126
+ return result;
127
+ }
128
+ /**
129
+ * Prepare the thread for the next update cycle.
130
+ *
131
+ * @param dt - The delta time of the next cycle.
132
+ */
133
+ update(dt) {
134
+ if (!this.paused) {
135
+ this.time(this.time() + dt);
136
+ this.fixedTime += dt;
137
+ }
138
+ this.children = this.children.filter(child => !child.canceled);
139
+ }
140
+ spawn(child) {
141
+ if (!isThreadGenerator(child)) {
142
+ child = child();
143
+ }
144
+ this.queue.push(child);
145
+ return child;
146
+ }
147
+ add(child) {
148
+ child.parent = this;
149
+ child.isCanceled = false;
150
+ child.time(this.time());
151
+ child.fixedTime = this.fixedTime;
152
+ this.children.push(child);
153
+ setTaskName(child.runner, `unknown ${this.children.length}`);
154
+ }
155
+ drain(callback) {
156
+ this.queue.forEach(callback);
157
+ this.queue = [];
158
+ }
159
+ cancel() {
160
+ this.runner.return();
161
+ this.isCanceled = true;
162
+ this.parent = null;
163
+ this.drain(task => task.return());
164
+ }
165
+ pause(value) {
166
+ this.isPaused = value;
167
+ }
168
+ }
169
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVGhyZWFkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3RocmVhZGluZy9UaHJlYWQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFFBQVEsRUFBRSxVQUFVLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUFDLFdBQVcsRUFBRSxXQUFXLEVBQUMsTUFBTSxTQUFTLENBQUM7QUFDakQsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLFlBQVksQ0FBQztBQUN4QyxPQUFPLEVBQUMsU0FBUyxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUMsTUFBTSxVQUFVLENBQUM7QUFFM0QsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0sbUJBQW1CLENBQUM7QUFFcEQsTUFBTSxlQUFlLEdBQUc7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztDQTBDdkIsQ0FBQztBQUVGLFFBQVEsQ0FBQyxJQUFJLEVBQUUsVUFBVSxFQUFFLENBQUMsQ0FBQztBQUM3QixNQUFNLFNBQVMsQ0FBQyxDQUFDLElBQUk7SUFDbkIsYUFBYTtBQUNmLENBQUM7QUFFRDs7Ozs7Ozs7R0FRRztBQUNILE1BQU0sT0FBTyxNQUFNO0lBZ0JqQjs7Ozs7OztPQU9HO0lBQ0gsSUFBVyxLQUFLO1FBQ2QsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQ3hCLENBQUM7SUFFRDs7T0FFRztJQUNILElBQVcsUUFBUTtRQUNqQixPQUFPLElBQUksQ0FBQyxVQUFVLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLFFBQVEsSUFBSSxLQUFLLENBQUMsQ0FBQztJQUM3RCxDQUFDO0lBRUQsSUFBVyxNQUFNO1FBQ2YsT0FBTyxJQUFJLENBQUMsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLENBQUM7SUFDekQsQ0FBQztJQVFEO0lBQ0U7O09BRUc7SUFDYSxNQUF5QztRQUF6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
@@ -0,0 +1,39 @@
1
+ import type { Thread } from './Thread';
2
+ export interface Promisable<T> {
3
+ toPromise(): Promise<T>;
4
+ }
5
+ export declare function isPromisable(value: any): value is Promisable<any>;
6
+ /**
7
+ * The main generator type produced by all generator functions in Motion Canvas.
8
+ *
9
+ * @example
10
+ * Yielded values can be used to control the flow of animation:
11
+ *
12
+ * Progress to the next frame:
13
+ * ```ts
14
+ * yield;
15
+ * ```
16
+ *
17
+ * Run another generator synchronously:
18
+ * ```ts
19
+ * yield* generatorFunction();
20
+ * ```
21
+ *
22
+ * Run another generator concurrently:
23
+ * ```ts
24
+ * const task = yield generatorFunction();
25
+ * ```
26
+ *
27
+ * Await a Promise:
28
+ * ```ts
29
+ * const result = yield asyncFunction();
30
+ * ```
31
+ */
32
+ export type ThreadGenerator = Generator<ThreadGenerator | Promise<any> | Promisable<any> | void, void, Thread | any>;
33
+ /**
34
+ * Check if the given value is a {@link ThreadGenerator}.
35
+ *
36
+ * @param value - A possible thread {@link ThreadGenerator}.
37
+ */
38
+ export declare function isThreadGenerator(value: unknown): value is ThreadGenerator;
39
+ //# sourceMappingURL=ThreadGenerator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ThreadGenerator.d.ts","sourceRoot":"","sources":["../../src/threading/ThreadGenerator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,MAAM,EAAC,MAAM,UAAU,CAAC;AAErC,MAAM,WAAW,UAAU,CAAC,CAAC;IAC3B,SAAS,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC;CACzB;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,GAAG,GAAG,KAAK,IAAI,UAAU,CAAC,GAAG,CAAC,CAMjE;AAED;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,MAAM,MAAM,eAAe,GAAG,SAAS,CACrC,eAAe,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,UAAU,CAAC,GAAG,CAAC,GAAG,IAAI,EACvD,IAAI,EACJ,MAAM,GAAG,GAAG,CACb,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,eAAe,CAO1E"}
@@ -0,0 +1,17 @@
1
+ export function isPromisable(value) {
2
+ return (value &&
3
+ (typeof value === 'object' || typeof value === 'function') &&
4
+ 'toPromise' in value);
5
+ }
6
+ /**
7
+ * Check if the given value is a {@link ThreadGenerator}.
8
+ *
9
+ * @param value - A possible thread {@link ThreadGenerator}.
10
+ */
11
+ export function isThreadGenerator(value) {
12
+ return (value !== null &&
13
+ typeof value === 'object' &&
14
+ Symbol.iterator in value &&
15
+ 'next' in value);
16
+ }
17
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVGhyZWFkR2VuZXJhdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3RocmVhZGluZy9UaHJlYWRHZW5lcmF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBTUEsTUFBTSxVQUFVLFlBQVksQ0FBQyxLQUFVO0lBQ3JDLE9BQU8sQ0FDTCxLQUFLO1FBQ0wsQ0FBQyxPQUFPLEtBQUssS0FBSyxRQUFRLElBQUksT0FBTyxLQUFLLEtBQUssVUFBVSxDQUFDO1FBQzFELFdBQVcsSUFBSSxLQUFLLENBQ3JCLENBQUM7QUFDSixDQUFDO0FBa0NEOzs7O0dBSUc7QUFDSCxNQUFNLFVBQVUsaUJBQWlCLENBQUMsS0FBYztJQUM5QyxPQUFPLENBQ0wsS0FBSyxLQUFLLElBQUk7UUFDZCxPQUFPLEtBQUssS0FBSyxRQUFRO1FBQ3pCLE1BQU0sQ0FBQyxRQUFRLElBQUksS0FBSztRQUN4QixNQUFNLElBQUksS0FBSyxDQUNoQixDQUFDO0FBQ0osQ0FBQyJ9
@@ -0,0 +1,17 @@
1
+ import type { ThreadGenerator } from './ThreadGenerator';
2
+ /**
3
+ * Cancel all listed tasks.
4
+ *
5
+ * Example:
6
+ * ```ts
7
+ * const task = yield generatorFunction();
8
+ *
9
+ * // do something concurrently
10
+ *
11
+ * yield* cancel(task);
12
+ * ```
13
+ *
14
+ * @param tasks - A list of tasks to cancel.
15
+ */
16
+ export declare function cancel(...tasks: ThreadGenerator[]): void;
17
+ //# sourceMappingURL=cancel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cancel.d.ts","sourceRoot":"","sources":["../../src/threading/cancel.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAC,eAAe,EAAC,MAAM,mBAAmB,CAAC;AAEvD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,MAAM,CAAC,GAAG,KAAK,EAAE,eAAe,EAAE,QASjD"}
@@ -0,0 +1,26 @@
1
+ import { useThread } from '../utils';
2
+ /**
3
+ * Cancel all listed tasks.
4
+ *
5
+ * Example:
6
+ * ```ts
7
+ * const task = yield generatorFunction();
8
+ *
9
+ * // do something concurrently
10
+ *
11
+ * yield* cancel(task);
12
+ * ```
13
+ *
14
+ * @param tasks - A list of tasks to cancel.
15
+ */
16
+ export function cancel(...tasks) {
17
+ const thread = useThread();
18
+ for (const task of tasks) {
19
+ const child = thread.children.find(thread => thread.runner === task);
20
+ if (child && !child.canceled) {
21
+ child.cancel();
22
+ child.time(thread.time());
23
+ }
24
+ }
25
+ }
26
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FuY2VsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3RocmVhZGluZy9jYW5jZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLFVBQVUsQ0FBQztBQUduQzs7Ozs7Ozs7Ozs7OztHQWFHO0FBQ0gsTUFBTSxVQUFVLE1BQU0sQ0FBQyxHQUFHLEtBQXdCO0lBQ2hELE1BQU0sTUFBTSxHQUFHLFNBQVMsRUFBRSxDQUFDO0lBQzNCLEtBQUssTUFBTSxJQUFJLElBQUksS0FBSyxFQUFFLENBQUM7UUFDekIsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsTUFBTSxLQUFLLElBQUksQ0FBQyxDQUFDO1FBQ3JFLElBQUksS0FBSyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQzdCLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNmLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7UUFDNUIsQ0FBQztJQUNILENBQUM7QUFDSCxDQUFDIn0=
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Thread management.
3
+ *
4
+ * @packageDocumentation
5
+ */
6
+ export * from './cancel';
7
+ export * from './spawn';
8
+ export * from './Thread';
9
+ export * from './ThreadGenerator';
10
+ export * from './threads';
11
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/threading/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,UAAU,CAAC;AACzB,cAAc,SAAS,CAAC;AACxB,cAAc,UAAU,CAAC;AACzB,cAAc,mBAAmB,CAAC;AAClC,cAAc,WAAW,CAAC"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Thread management.
3
+ *
4
+ * @packageDocumentation
5
+ */
6
+ export * from './cancel';
7
+ export * from './spawn';
8
+ export * from './Thread';
9
+ export * from './ThreadGenerator';
10
+ export * from './threads';
11
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdGhyZWFkaW5nL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7O0dBSUc7QUFFSCxjQUFjLFVBQVUsQ0FBQztBQUN6QixjQUFjLFNBQVMsQ0FBQztBQUN4QixjQUFjLFVBQVUsQ0FBQztBQUN6QixjQUFjLG1CQUFtQixDQUFDO0FBQ2xDLGNBQWMsV0FBVyxDQUFDIn0=
@@ -0,0 +1,28 @@
1
+ import type { ThreadGenerator } from './ThreadGenerator';
2
+ /**
3
+ * Run the given task concurrently.
4
+ *
5
+ * @example
6
+ * Using an existing task:
7
+ * ```ts
8
+ * spawn(rect().opacity(1, 1));
9
+ * ```
10
+ * Using a generator function:
11
+ * ```ts
12
+ * spawn(function* () {
13
+ * yield* rect().opacity(1, 1);
14
+ * yield* waitFor('click');
15
+ * yield* rect().opacity(0, 1);
16
+ * });
17
+ * ```
18
+ * Await the spawned task:
19
+ * ```ts
20
+ * const task = spawn(rect().opacity(1, 1));
21
+ * // do some other things
22
+ * yield* join(task); // await the task
23
+ * ```
24
+ *
25
+ * @param task - Either a generator function or a task to run.
26
+ */
27
+ export declare function spawn(task: ThreadGenerator | (() => ThreadGenerator)): ThreadGenerator;
28
+ //# sourceMappingURL=spawn.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spawn.d.ts","sourceRoot":"","sources":["../../src/threading/spawn.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAC,eAAe,EAAC,MAAM,mBAAmB,CAAC;AAEvD;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAgB,KAAK,CACnB,IAAI,EAAE,eAAe,GAAG,CAAC,MAAM,eAAe,CAAC,GAC9C,eAAe,CAEjB"}
@@ -0,0 +1,30 @@
1
+ import { useThread } from '../utils';
2
+ /**
3
+ * Run the given task concurrently.
4
+ *
5
+ * @example
6
+ * Using an existing task:
7
+ * ```ts
8
+ * spawn(rect().opacity(1, 1));
9
+ * ```
10
+ * Using a generator function:
11
+ * ```ts
12
+ * spawn(function* () {
13
+ * yield* rect().opacity(1, 1);
14
+ * yield* waitFor('click');
15
+ * yield* rect().opacity(0, 1);
16
+ * });
17
+ * ```
18
+ * Await the spawned task:
19
+ * ```ts
20
+ * const task = spawn(rect().opacity(1, 1));
21
+ * // do some other things
22
+ * yield* join(task); // await the task
23
+ * ```
24
+ *
25
+ * @param task - Either a generator function or a task to run.
26
+ */
27
+ export function spawn(task) {
28
+ return useThread().spawn(task);
29
+ }
30
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3Bhd24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdGhyZWFkaW5nL3NwYXduLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSxVQUFVLENBQUM7QUFHbkM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXdCRztBQUNILE1BQU0sVUFBVSxLQUFLLENBQ25CLElBQStDO0lBRS9DLE9BQU8sU0FBUyxFQUFFLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ2pDLENBQUMifQ==
@@ -0,0 +1,46 @@
1
+ import { Thread } from './Thread';
2
+ import type { ThreadGenerator } from './ThreadGenerator';
3
+ /**
4
+ * Check if the given value is a [Promise][promise].
5
+ *
6
+ * @param value - A possible [Promise][promise].
7
+ *
8
+ * [promise]: https://developer.mozilla.org/en-US/docs/web/javascript/reference/global_objects/promise
9
+ */
10
+ export declare function isPromise(value: any): value is Promise<any>;
11
+ /**
12
+ * A generator function or a normal function that returns a generator.
13
+ */
14
+ export interface ThreadsFactory {
15
+ (): ThreadGenerator;
16
+ }
17
+ export interface ThreadsCallback {
18
+ (root: Thread): void;
19
+ }
20
+ /**
21
+ * Create a context in which generators can be run concurrently.
22
+ *
23
+ * @remarks
24
+ * From the perspective of the external generator, `threads` is executed
25
+ * synchronously. By default, each scene generator is wrapped in its own
26
+ * `threads` generator.
27
+ *
28
+ * @example
29
+ * ```ts
30
+ * // first
31
+ *
32
+ * yield* threads(function* () {
33
+ * const task = yield generatorFunction();
34
+ * // second
35
+ * }); // <- `task` will be terminated here because the scope
36
+ * // of this `threads` generator has ended
37
+ *
38
+ * // third
39
+ * ```
40
+ *
41
+ * @param factory - A function that returns the generator to run.
42
+ * @param callback - Called whenever threads are created, canceled or finished.
43
+ * Used for debugging purposes.
44
+ */
45
+ export declare function threads(factory: ThreadsFactory, callback?: ThreadsCallback): ThreadGenerator;
46
+ //# sourceMappingURL=threads.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"threads.d.ts","sourceRoot":"","sources":["../../src/threading/threads.ts"],"names":[],"mappings":"AAGA,OAAO,EAAC,MAAM,EAAC,MAAM,UAAU,CAAC;AAChC,OAAO,KAAK,EAAC,eAAe,EAAC,MAAM,mBAAmB,CAAC;AAGvD;;;;;;GAMG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,GAAG,GAAG,KAAK,IAAI,OAAO,CAAC,GAAG,CAAC,CAE3D;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,IAAI,eAAe,CAAC;CACrB;AAED,MAAM,WAAW,eAAe;IAC9B,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;CACtB;AAGD;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAiB,OAAO,CACtB,OAAO,EAAE,cAAc,EACvB,QAAQ,CAAC,EAAE,eAAe,GACzB,eAAe,CAkDjB"}
@@ -0,0 +1,89 @@
1
+ import { decorate, threadable } from '../decorators';
2
+ import { setTaskName } from '../flow';
3
+ import { usePlayback } from '../utils';
4
+ import { Thread } from './Thread';
5
+ import { isThreadGenerator } from './ThreadGenerator';
6
+ /**
7
+ * Check if the given value is a [Promise][promise].
8
+ *
9
+ * @param value - A possible [Promise][promise].
10
+ *
11
+ * [promise]: https://developer.mozilla.org/en-US/docs/web/javascript/reference/global_objects/promise
12
+ */
13
+ export function isPromise(value) {
14
+ return typeof value?.then === 'function';
15
+ }
16
+ decorate(threads, threadable());
17
+ /**
18
+ * Create a context in which generators can be run concurrently.
19
+ *
20
+ * @remarks
21
+ * From the perspective of the external generator, `threads` is executed
22
+ * synchronously. By default, each scene generator is wrapped in its own
23
+ * `threads` generator.
24
+ *
25
+ * @example
26
+ * ```ts
27
+ * // first
28
+ *
29
+ * yield* threads(function* () {
30
+ * const task = yield generatorFunction();
31
+ * // second
32
+ * }); // <- `task` will be terminated here because the scope
33
+ * // of this `threads` generator has ended
34
+ *
35
+ * // third
36
+ * ```
37
+ *
38
+ * @param factory - A function that returns the generator to run.
39
+ * @param callback - Called whenever threads are created, canceled or finished.
40
+ * Used for debugging purposes.
41
+ */
42
+ export function* threads(factory, callback) {
43
+ const playback = usePlayback();
44
+ const root = factory();
45
+ setTaskName(root, 'root');
46
+ const rootThread = new Thread(root);
47
+ callback?.(rootThread);
48
+ let threads = [rootThread];
49
+ while (threads.length > 0) {
50
+ const newThreads = [];
51
+ const queue = [...threads];
52
+ const dt = playback.deltaTime;
53
+ while (queue.length > 0) {
54
+ const thread = queue.pop();
55
+ if (!thread || thread.canceled) {
56
+ continue;
57
+ }
58
+ const result = thread.next();
59
+ if (result.done) {
60
+ thread.cancel();
61
+ continue;
62
+ }
63
+ if (isThreadGenerator(result.value)) {
64
+ const child = new Thread(result.value);
65
+ thread.value = result.value;
66
+ thread.add(child);
67
+ queue.push(thread);
68
+ queue.push(child);
69
+ }
70
+ else if (result.value) {
71
+ thread.value = yield result.value;
72
+ queue.push(thread);
73
+ }
74
+ else {
75
+ thread.update(dt);
76
+ thread.drain(task => {
77
+ const child = new Thread(task);
78
+ thread.add(child);
79
+ newThreads.unshift(child);
80
+ });
81
+ newThreads.unshift(thread);
82
+ }
83
+ }
84
+ threads = newThreads.filter(thread => !thread.canceled);
85
+ if (threads.length > 0)
86
+ yield;
87
+ }
88
+ }
89
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGhyZWFkcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90aHJlYWRpbmcvdGhyZWFkcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsUUFBUSxFQUFFLFVBQVUsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUNuRCxPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0sU0FBUyxDQUFDO0FBQ3BDLE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSxVQUFVLENBQUM7QUFDckMsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLFVBQVUsQ0FBQztBQUVoQyxPQUFPLEVBQUMsaUJBQWlCLEVBQUMsTUFBTSxtQkFBbUIsQ0FBQztBQUVwRDs7Ozs7O0dBTUc7QUFDSCxNQUFNLFVBQVUsU0FBUyxDQUFDLEtBQVU7SUFDbEMsT0FBTyxPQUFPLEtBQUssRUFBRSxJQUFJLEtBQUssVUFBVSxDQUFDO0FBQzNDLENBQUM7QUFhRCxRQUFRLENBQUMsT0FBTyxFQUFFLFVBQVUsRUFBRSxDQUFDLENBQUM7QUFDaEM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXdCRztBQUNILE1BQU0sU0FBUyxDQUFDLENBQUMsT0FBTyxDQUN0QixPQUF1QixFQUN2QixRQUEwQjtJQUUxQixNQUFNLFFBQVEsR0FBRyxXQUFXLEVBQUUsQ0FBQztJQUMvQixNQUFNLElBQUksR0FBRyxPQUFPLEVBQUUsQ0FBQztJQUN2QixXQUFXLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQzFCLE1BQU0sVUFBVSxHQUFHLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3BDLFFBQVEsRUFBRSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBRXZCLElBQUksT0FBTyxHQUFhLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDckMsT0FBTyxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQzFCLE1BQU0sVUFBVSxHQUFHLEVBQUUsQ0FBQztRQUN0QixNQUFNLEtBQUssR0FBRyxDQUFDLEdBQUcsT0FBTyxDQUFDLENBQUM7UUFDM0IsTUFBTSxFQUFFLEdBQUcsUUFBUSxDQUFDLFNBQVMsQ0FBQztRQUU5QixPQUFPLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDeEIsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDO1lBQzNCLElBQUksQ0FBQyxNQUFNLElBQUksTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDO2dCQUMvQixTQUFTO1lBQ1gsQ0FBQztZQUVELE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUM3QixJQUFJLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQztnQkFDaEIsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDO2dCQUNoQixTQUFTO1lBQ1gsQ0FBQztZQUVELElBQUksaUJBQWlCLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7Z0JBQ3BDLE1BQU0sS0FBSyxHQUFHLElBQUksTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDdkMsTUFBTSxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDO2dCQUM1QixNQUFNLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUVsQixLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO2dCQUNuQixLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3BCLENBQUM7aUJBQU0sSUFBSSxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUM7Z0JBQ3hCLE1BQU0sQ0FBQyxLQUFLLEdBQUcsTUFBTSxNQUFNLENBQUMsS0FBSyxDQUFDO2dCQUNsQyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ3JCLENBQUM7aUJBQU0sQ0FBQztnQkFDTixNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUNsQixNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFO29CQUNsQixNQUFNLEtBQUssR0FBRyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztvQkFDL0IsTUFBTSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztvQkFDbEIsVUFBVSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDNUIsQ0FBQyxDQUFDLENBQUM7Z0JBRUgsVUFBVSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUM3QixDQUFDO1FBQ0gsQ0FBQztRQUVELE9BQU8sR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDeEQsSUFBSSxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUM7WUFBRSxLQUFLLENBQUM7SUFDaEMsQ0FBQztBQUNILENBQUMifQ==
@@ -0,0 +1,8 @@
1
+ import type { ThreadGenerator } from '../threading';
2
+ /**
3
+ * Perform a transition that fades between the scenes.
4
+ *
5
+ * @param duration - The duration of the transition.
6
+ */
7
+ export declare function fadeTransition(duration?: number): ThreadGenerator;
8
+ //# sourceMappingURL=fadeTransition.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fadeTransition.d.ts","sourceRoot":"","sources":["../../src/transitions/fadeTransition.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAC,eAAe,EAAC,MAAM,cAAc,CAAC;AAGlD;;;;GAIG;AACH,wBAAiB,cAAc,CAAC,QAAQ,SAAM,GAAG,eAAe,CAQ/D"}
@@ -0,0 +1,16 @@
1
+ import { createSignal } from '../signals';
2
+ import { useTransition } from './useTransition';
3
+ /**
4
+ * Perform a transition that fades between the scenes.
5
+ *
6
+ * @param duration - The duration of the transition.
7
+ */
8
+ export function* fadeTransition(duration = 0.6) {
9
+ const progress = createSignal(0);
10
+ const endTransition = useTransition(ctx => {
11
+ ctx.globalAlpha = progress();
12
+ });
13
+ yield* progress(1, duration);
14
+ endTransition();
15
+ }
16
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmFkZVRyYW5zaXRpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdHJhbnNpdGlvbnMvZmFkZVRyYW5zaXRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLFlBQVksQ0FBQztBQUV4QyxPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFFOUM7Ozs7R0FJRztBQUNILE1BQU0sU0FBUyxDQUFDLENBQUMsY0FBYyxDQUFDLFFBQVEsR0FBRyxHQUFHO0lBQzVDLE1BQU0sUUFBUSxHQUFHLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNqQyxNQUFNLGFBQWEsR0FBRyxhQUFhLENBQUMsR0FBRyxDQUFDLEVBQUU7UUFDeEMsR0FBRyxDQUFDLFdBQVcsR0FBRyxRQUFRLEVBQUUsQ0FBQztJQUMvQixDQUFDLENBQUMsQ0FBQztJQUVILEtBQUssQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDN0IsYUFBYSxFQUFFLENBQUM7QUFDbEIsQ0FBQyJ9
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Transitions between scenes.
3
+ *
4
+ * @packageDocumentation
5
+ */
6
+ export * from './fadeTransition';
7
+ export * from './slideTransition';
8
+ export * from './useTransition';
9
+ export * from './zoomInTransition';
10
+ export * from './zoomOutTransition';
11
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/transitions/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,kBAAkB,CAAC;AACjC,cAAc,mBAAmB,CAAC;AAClC,cAAc,iBAAiB,CAAC;AAChC,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Transitions between scenes.
3
+ *
4
+ * @packageDocumentation
5
+ */
6
+ export * from './fadeTransition';
7
+ export * from './slideTransition';
8
+ export * from './useTransition';
9
+ export * from './zoomInTransition';
10
+ export * from './zoomOutTransition';
11
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdHJhbnNpdGlvbnMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7R0FJRztBQUVILGNBQWMsa0JBQWtCLENBQUM7QUFDakMsY0FBYyxtQkFBbUIsQ0FBQztBQUNsQyxjQUFjLGlCQUFpQixDQUFDO0FBQ2hDLGNBQWMsb0JBQW9CLENBQUM7QUFDbkMsY0FBYyxxQkFBcUIsQ0FBQyJ9