@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,29 @@
1
+ import type { ThreadGenerator } from '../threading';
2
+ /**
3
+ * Run the given generator or callback after a specific amount of time.
4
+ *
5
+ * @example
6
+ * ```ts
7
+ * yield* delay(1, rect.fill('#ff0000', 2));
8
+ * ```
9
+ *
10
+ * Note that the same animation can be written as:
11
+ * ```ts
12
+ * yield* waitFor(1),
13
+ * yield* rect.fill('#ff0000', 2),
14
+ * ```
15
+ *
16
+ * The reason `delay` exists is to make it easier to pass it to other flow
17
+ * functions. For example:
18
+ * ```ts
19
+ * yield* all(
20
+ * rect.opacity(1, 3),
21
+ * delay(1, rect.fill('#ff0000', 2));
22
+ * );
23
+ * ```
24
+ *
25
+ * @param time - The delay in seconds
26
+ * @param task - The task or callback to run after the delay.
27
+ */
28
+ export declare function delay(time: number, task: ThreadGenerator | Callback): ThreadGenerator;
29
+ //# sourceMappingURL=delay.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"delay.d.ts","sourceRoot":"","sources":["../../src/flow/delay.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAC,eAAe,EAAC,MAAM,cAAc,CAAC;AAIlD;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAiB,KAAK,CACpB,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,eAAe,GAAG,QAAQ,GAC/B,eAAe,CAOjB"}
@@ -0,0 +1,39 @@
1
+ import { decorate, threadable } from '../decorators';
2
+ import { waitFor } from './scheduling';
3
+ decorate(delay, threadable());
4
+ /**
5
+ * Run the given generator or callback after a specific amount of time.
6
+ *
7
+ * @example
8
+ * ```ts
9
+ * yield* delay(1, rect.fill('#ff0000', 2));
10
+ * ```
11
+ *
12
+ * Note that the same animation can be written as:
13
+ * ```ts
14
+ * yield* waitFor(1),
15
+ * yield* rect.fill('#ff0000', 2),
16
+ * ```
17
+ *
18
+ * The reason `delay` exists is to make it easier to pass it to other flow
19
+ * functions. For example:
20
+ * ```ts
21
+ * yield* all(
22
+ * rect.opacity(1, 3),
23
+ * delay(1, rect.fill('#ff0000', 2));
24
+ * );
25
+ * ```
26
+ *
27
+ * @param time - The delay in seconds
28
+ * @param task - The task or callback to run after the delay.
29
+ */
30
+ export function* delay(time, task) {
31
+ yield* waitFor(time);
32
+ if ('next' in task) {
33
+ yield* task;
34
+ }
35
+ else {
36
+ task();
37
+ }
38
+ }
39
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVsYXkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZmxvdy9kZWxheS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsUUFBUSxFQUFFLFVBQVUsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUVuRCxPQUFPLEVBQUMsT0FBTyxFQUFDLE1BQU0sY0FBYyxDQUFDO0FBRXJDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsVUFBVSxFQUFFLENBQUMsQ0FBQztBQUM5Qjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXlCRztBQUNILE1BQU0sU0FBUyxDQUFDLENBQUMsS0FBSyxDQUNwQixJQUFZLEVBQ1osSUFBZ0M7SUFFaEMsS0FBSyxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3JCLElBQUksTUFBTSxJQUFJLElBQUksRUFBRSxDQUFDO1FBQ25CLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQztJQUNkLENBQUM7U0FBTSxDQUFDO1FBQ04sSUFBSSxFQUFFLENBQUM7SUFDVCxDQUFDO0FBQ0gsQ0FBQyJ9
@@ -0,0 +1,41 @@
1
+ import type { ThreadGenerator } from '../threading';
2
+ export interface EveryCallback {
3
+ /**
4
+ * A callback called by {@link EveryTimer} every N seconds.
5
+ *
6
+ * @param tick - The amount of times the timer has ticked.
7
+ */
8
+ (tick: number): void;
9
+ }
10
+ export interface EveryTimer {
11
+ /**
12
+ * The generator responsible for running this timer.
13
+ */
14
+ runner: ThreadGenerator;
15
+ setInterval(value: number): void;
16
+ setCallback(value: EveryCallback): void;
17
+ /**
18
+ * Wait until the timer ticks.
19
+ */
20
+ sync(): ThreadGenerator;
21
+ }
22
+ /**
23
+ * Call the given callback every N seconds.
24
+ *
25
+ * @example
26
+ * ```ts
27
+ * const timer = every(2, time => console.log(time));
28
+ * yield timer.runner;
29
+ *
30
+ * // current time: 0s
31
+ * yield* waitFor(5);
32
+ * // current time: 5s
33
+ * yield* timer.sync();
34
+ * // current time: 6s
35
+ * ```
36
+ *
37
+ * @param interval - The interval between subsequent calls.
38
+ * @param callback - The callback to be called.
39
+ */
40
+ export declare function every(interval: number, callback: EveryCallback): EveryTimer;
41
+ //# sourceMappingURL=every.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"every.d.ts","sourceRoot":"","sources":["../../src/flow/every.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAC,eAAe,EAAC,MAAM,cAAc,CAAC;AAGlD,MAAM,WAAW,aAAa;IAC5B;;;;OAIG;IACH,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;CACtB;AAED,MAAM,WAAW,UAAU;IACzB;;OAEG;IACH,MAAM,EAAE,eAAe,CAAC;IACxB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,WAAW,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI,CAAC;IAExC;;OAEG;IACH,IAAI,IAAI,eAAe,CAAC;CACzB;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,KAAK,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa,GAAG,UAAU,CAwC3E"}
@@ -0,0 +1,61 @@
1
+ import { decorate, threadable } from '../decorators';
2
+ import { usePlayback } from '../utils';
3
+ /**
4
+ * Call the given callback every N seconds.
5
+ *
6
+ * @example
7
+ * ```ts
8
+ * const timer = every(2, time => console.log(time));
9
+ * yield timer.runner;
10
+ *
11
+ * // current time: 0s
12
+ * yield* waitFor(5);
13
+ * // current time: 5s
14
+ * yield* timer.sync();
15
+ * // current time: 6s
16
+ * ```
17
+ *
18
+ * @param interval - The interval between subsequent calls.
19
+ * @param callback - The callback to be called.
20
+ */
21
+ export function every(interval, callback) {
22
+ let changed = false;
23
+ decorate(everyRunner, threadable('every'));
24
+ function* everyRunner() {
25
+ const project = usePlayback();
26
+ let acc = 0;
27
+ let tick = 0;
28
+ callback(tick);
29
+ changed = true;
30
+ while (true) {
31
+ if (acc >= project.secondsToFrames(interval)) {
32
+ acc = 0;
33
+ tick++;
34
+ callback(tick);
35
+ changed = true;
36
+ }
37
+ else {
38
+ changed = false;
39
+ }
40
+ acc++;
41
+ yield;
42
+ }
43
+ }
44
+ return {
45
+ runner: everyRunner(),
46
+ setInterval(value) {
47
+ interval = value;
48
+ changed = false;
49
+ },
50
+ setCallback(value) {
51
+ callback = value;
52
+ changed = false;
53
+ },
54
+ *sync() {
55
+ while (!changed) {
56
+ yield;
57
+ }
58
+ },
59
+ };
60
+ }
61
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXZlcnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZmxvdy9ldmVyeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsUUFBUSxFQUFFLFVBQVUsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUVuRCxPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0sVUFBVSxDQUFDO0FBeUJyQzs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FpQkc7QUFDSCxNQUFNLFVBQVUsS0FBSyxDQUFDLFFBQWdCLEVBQUUsUUFBdUI7SUFDN0QsSUFBSSxPQUFPLEdBQUcsS0FBSyxDQUFDO0lBQ3BCLFFBQVEsQ0FBQyxXQUFXLEVBQUUsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7SUFDM0MsUUFBUSxDQUFDLENBQUMsV0FBVztRQUNuQixNQUFNLE9BQU8sR0FBRyxXQUFXLEVBQUUsQ0FBQztRQUM5QixJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUM7UUFDWixJQUFJLElBQUksR0FBRyxDQUFDLENBQUM7UUFDYixRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDZixPQUFPLEdBQUcsSUFBSSxDQUFDO1FBRWYsT0FBTyxJQUFJLEVBQUUsQ0FBQztZQUNaLElBQUksR0FBRyxJQUFJLE9BQU8sQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztnQkFDN0MsR0FBRyxHQUFHLENBQUMsQ0FBQztnQkFDUixJQUFJLEVBQUUsQ0FBQztnQkFDUCxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ2YsT0FBTyxHQUFHLElBQUksQ0FBQztZQUNqQixDQUFDO2lCQUFNLENBQUM7Z0JBQ04sT0FBTyxHQUFHLEtBQUssQ0FBQztZQUNsQixDQUFDO1lBQ0QsR0FBRyxFQUFFLENBQUM7WUFDTixLQUFLLENBQUM7UUFDUixDQUFDO0lBQ0gsQ0FBQztJQUVELE9BQU87UUFDTCxNQUFNLEVBQUUsV0FBVyxFQUFFO1FBQ3JCLFdBQVcsQ0FBQyxLQUFLO1lBQ2YsUUFBUSxHQUFHLEtBQUssQ0FBQztZQUNqQixPQUFPLEdBQUcsS0FBSyxDQUFDO1FBQ2xCLENBQUM7UUFDRCxXQUFXLENBQUMsS0FBSztZQUNmLFFBQVEsR0FBRyxLQUFLLENBQUM7WUFDakIsT0FBTyxHQUFHLEtBQUssQ0FBQztRQUNsQixDQUFDO1FBQ0QsQ0FBQyxJQUFJO1lBQ0gsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDO2dCQUNoQixLQUFLLENBQUM7WUFDUixDQUFDO1FBQ0gsQ0FBQztLQUNGLENBQUM7QUFDSixDQUFDIn0=
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Utilities for controlling the flow and timing of an animation.
3
+ * @packageDocumentation
4
+ */
5
+ export * from './all';
6
+ export * from './any';
7
+ export * from './chain';
8
+ export * from './delay';
9
+ export * from './every';
10
+ export * from './join';
11
+ export * from './loop';
12
+ export * from './loopFor';
13
+ export * from './names';
14
+ export * from './run';
15
+ export * from './scheduling';
16
+ export * from './sequence';
17
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/flow/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,cAAc,OAAO,CAAC;AACtB,cAAc,OAAO,CAAC;AACtB,cAAc,SAAS,CAAC;AACxB,cAAc,SAAS,CAAC;AACxB,cAAc,SAAS,CAAC;AACxB,cAAc,QAAQ,CAAC;AACvB,cAAc,QAAQ,CAAC;AACvB,cAAc,WAAW,CAAC;AAC1B,cAAc,SAAS,CAAC;AACxB,cAAc,OAAO,CAAC;AACtB,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Utilities for controlling the flow and timing of an animation.
3
+ * @packageDocumentation
4
+ */
5
+ export * from './all';
6
+ export * from './any';
7
+ export * from './chain';
8
+ export * from './delay';
9
+ export * from './every';
10
+ export * from './join';
11
+ export * from './loop';
12
+ export * from './loopFor';
13
+ export * from './names';
14
+ export * from './run';
15
+ export * from './scheduling';
16
+ export * from './sequence';
17
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZmxvdy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7O0dBR0c7QUFFSCxjQUFjLE9BQU8sQ0FBQztBQUN0QixjQUFjLE9BQU8sQ0FBQztBQUN0QixjQUFjLFNBQVMsQ0FBQztBQUN4QixjQUFjLFNBQVMsQ0FBQztBQUN4QixjQUFjLFNBQVMsQ0FBQztBQUN4QixjQUFjLFFBQVEsQ0FBQztBQUN2QixjQUFjLFFBQVEsQ0FBQztBQUN2QixjQUFjLFdBQVcsQ0FBQztBQUMxQixjQUFjLFNBQVMsQ0FBQztBQUN4QixjQUFjLE9BQU8sQ0FBQztBQUN0QixjQUFjLGNBQWMsQ0FBQztBQUM3QixjQUFjLFlBQVksQ0FBQyJ9
@@ -0,0 +1,35 @@
1
+ import type { ThreadGenerator } from '../threading/ThreadGenerator';
2
+ /**
3
+ * Pause the current generator until all listed tasks are finished.
4
+ *
5
+ * @example
6
+ * ```ts
7
+ * const task = yield generatorFunction();
8
+ *
9
+ * // do something concurrently
10
+ *
11
+ * yield* join(task);
12
+ * ```
13
+ *
14
+ * @param tasks - A list of tasks to join.
15
+ */
16
+ export declare function join(...tasks: ThreadGenerator[]): ThreadGenerator;
17
+ /**
18
+ * Pause the current generator until listed tasks are finished.
19
+ *
20
+ * @example
21
+ * ```ts
22
+ * const taskA = yield generatorFunctionA();
23
+ * const taskB = yield generatorFunctionB();
24
+ *
25
+ * // do something concurrently
26
+ *
27
+ * // await any of the tasks
28
+ * yield* join(false, taskA, taskB);
29
+ * ```
30
+ *
31
+ * @param all - Whether we should wait for all tasks or for at least one.
32
+ * @param tasks - A list of tasks to join.
33
+ */
34
+ export declare function join(all: boolean, ...tasks: ThreadGenerator[]): ThreadGenerator;
35
+ //# sourceMappingURL=join.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"join.d.ts","sourceRoot":"","sources":["../../src/flow/join.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAC,eAAe,EAAC,MAAM,8BAA8B,CAAC;AAIlE;;;;;;;;;;;;;GAaG;AACH,wBAAgB,IAAI,CAAC,GAAG,KAAK,EAAE,eAAe,EAAE,GAAG,eAAe,CAAC;AACnE;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,IAAI,CAClB,GAAG,EAAE,OAAO,EACZ,GAAG,KAAK,EAAE,eAAe,EAAE,GAC1B,eAAe,CAAC"}
@@ -0,0 +1,33 @@
1
+ import { decorate, threadable } from '../decorators';
2
+ import { useThread } from '../utils';
3
+ decorate(join, threadable());
4
+ export function* join(first, ...tasks) {
5
+ let all = true;
6
+ if (typeof first === 'boolean') {
7
+ all = first;
8
+ }
9
+ else {
10
+ tasks.push(first);
11
+ }
12
+ const parent = useThread();
13
+ const threads = (tasks
14
+ .map(task => parent.children.find(thread => thread.runner === task))
15
+ .filter(thread => thread));
16
+ const startTime = parent.time();
17
+ let childTime;
18
+ if (all) {
19
+ while (threads.find(thread => !thread.canceled)) {
20
+ yield;
21
+ }
22
+ childTime = Math.max(...threads.map(thread => thread.time()));
23
+ }
24
+ else {
25
+ while (!threads.find(thread => thread.canceled)) {
26
+ yield;
27
+ }
28
+ const canceled = threads.filter(thread => thread.canceled);
29
+ childTime = Math.min(...canceled.map(thread => thread.time()));
30
+ }
31
+ parent.time(Math.max(startTime, childTime));
32
+ }
33
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiam9pbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9mbG93L2pvaW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFFBQVEsRUFBRSxVQUFVLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFHbkQsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLFVBQVUsQ0FBQztBQUVuQyxRQUFRLENBQUMsSUFBSSxFQUFFLFVBQVUsRUFBRSxDQUFDLENBQUM7QUFxQzdCLE1BQU0sU0FBUyxDQUFDLENBQUMsSUFBSSxDQUNuQixLQUFnQyxFQUNoQyxHQUFHLEtBQXdCO0lBRTNCLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQztJQUNmLElBQUksT0FBTyxLQUFLLEtBQUssU0FBUyxFQUFFLENBQUM7UUFDL0IsR0FBRyxHQUFHLEtBQUssQ0FBQztJQUNkLENBQUM7U0FBTSxDQUFDO1FBQ04sS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNwQixDQUFDO0lBRUQsTUFBTSxNQUFNLEdBQUcsU0FBUyxFQUFFLENBQUM7SUFDM0IsTUFBTSxPQUFPLEdBQWEsQ0FDeEIsS0FBSztTQUNGLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLE1BQU0sS0FBSyxJQUFJLENBQUMsQ0FBQztTQUNuRSxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FDNUIsQ0FBQztJQUVGLE1BQU0sU0FBUyxHQUFHLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNoQyxJQUFJLFNBQVMsQ0FBQztJQUNkLElBQUksR0FBRyxFQUFFLENBQUM7UUFDUixPQUFPLE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDO1lBQ2hELEtBQUssQ0FBQztRQUNSLENBQUM7UUFDRCxTQUFTLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ2hFLENBQUM7U0FBTSxDQUFDO1FBQ04sT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztZQUNoRCxLQUFLLENBQUM7UUFDUixDQUFDO1FBQ0QsTUFBTSxRQUFRLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUMzRCxTQUFTLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ2pFLENBQUM7SUFFRCxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsU0FBUyxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUM7QUFDOUMsQ0FBQyJ9
@@ -0,0 +1,58 @@
1
+ import type { ThreadGenerator } from '../threading';
2
+ export interface LoopCallback {
3
+ /**
4
+ * A callback called by {@link loop} during each iteration.
5
+ *
6
+ * @param i - The current iteration index.
7
+ */
8
+ (i: number): ThreadGenerator | void;
9
+ }
10
+ /**
11
+ * Run the given generator in a loop.
12
+ *
13
+ * @remarks
14
+ * Each iteration waits until the previous one is completed.
15
+ * Because this loop never finishes it cannot be used in the main thread.
16
+ * Instead, use `yield` or {@link threading.spawn} to run the loop concurrently.
17
+ *
18
+ * @example
19
+ * Rotate the `rect` indefinitely:
20
+ * ```ts
21
+ * yield loop(
22
+ * () => rect.rotation(0).rotation(360, 2, linear),
23
+ * );
24
+ * ```
25
+ *
26
+ * @param factory - A function creating the generator to run. Because generators
27
+ * can't be reset, a new generator is created on each
28
+ * iteration.
29
+ */
30
+ export declare function loop(factory: LoopCallback): ThreadGenerator;
31
+ /**
32
+ * Run the given generator N times.
33
+ *
34
+ * @remarks
35
+ * Each iteration waits until the previous one is completed.
36
+ *
37
+ * @example
38
+ * ```ts
39
+ * const colors = [
40
+ * '#ff6470',
41
+ * '#ffc66d',
42
+ * '#68abdf',
43
+ * '#99c47a',
44
+ * ];
45
+ *
46
+ * yield* loop(
47
+ * colors.length,
48
+ * i => rect.fill(colors[i], 2),
49
+ * );
50
+ * ```
51
+ *
52
+ * @param iterations - The number of iterations.
53
+ * @param factory - A function creating the generator to run. Because generators
54
+ * can't be reset, a new generator is created on each
55
+ * iteration.
56
+ */
57
+ export declare function loop(iterations: number, factory: LoopCallback): ThreadGenerator;
58
+ //# sourceMappingURL=loop.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loop.d.ts","sourceRoot":"","sources":["../../src/flow/loop.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAC,eAAe,EAAC,MAAM,cAAc,CAAC;AA4BlD,MAAM,WAAW,YAAY;IAC3B;;;;OAIG;IACH,CAAC,CAAC,EAAE,MAAM,GAAG,eAAe,GAAG,IAAI,CAAC;CACrC;AAID;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,IAAI,CAAC,OAAO,EAAE,YAAY,GAAG,eAAe,CAAC;AAC7D;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAgB,IAAI,CAClB,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,YAAY,GACpB,eAAe,CAAC"}
@@ -0,0 +1,51 @@
1
+ import { decorate, threadable } from '../decorators';
2
+ import { useLogger, useThread } from '../utils';
3
+ const infiniteLoop = `
4
+ Make sure to use \`yield\` or \`spawn()\` to execute the loop concurrently in a
5
+ separate thread:
6
+
7
+ \`\`\`ts wrong
8
+ // prettier-ignore
9
+ yield* loop(() => rect().opacity(0).opacity(1, 1));
10
+ \`\`\`
11
+
12
+ \`\`\`ts correct
13
+ yield loop(() => rect().opacity(0).opacity(1, 1));
14
+ // or
15
+ spawn(loop(() => rect().opacity(0).opacity(1, 1)));
16
+ \`\`\`
17
+
18
+ If you want to execute the loop a finite number of times, specify the iteration
19
+ count as the first argument:
20
+
21
+ \`\`\`ts
22
+ // prettier-ignore
23
+ yield* loop(10, () => rect().opacity(0).opacity(1, 1));
24
+ // ^ iteration count
25
+ \`\`\`
26
+ `;
27
+ decorate(loop, threadable());
28
+ export function* loop(iterations, factory) {
29
+ if (typeof iterations !== 'number') {
30
+ factory = iterations;
31
+ iterations = Infinity;
32
+ }
33
+ if (iterations === Infinity && useThread().parent === null) {
34
+ useLogger().error({
35
+ message: 'Tried to execute an infinite loop in the main thread.',
36
+ remarks: infiniteLoop,
37
+ stack: new Error().stack,
38
+ });
39
+ return;
40
+ }
41
+ for (let i = 0; i < iterations; i++) {
42
+ const generator = factory(i);
43
+ if (generator) {
44
+ yield* generator;
45
+ }
46
+ else {
47
+ yield;
48
+ }
49
+ }
50
+ }
51
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9vcC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9mbG93L2xvb3AudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFFBQVEsRUFBRSxVQUFVLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFFbkQsT0FBTyxFQUFDLFNBQVMsRUFBRSxTQUFTLEVBQUMsTUFBTSxVQUFVLENBQUM7QUFFOUMsTUFBTSxZQUFZLEdBQUc7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0NBdUJwQixDQUFDO0FBV0YsUUFBUSxDQUFDLElBQUksRUFBRSxVQUFVLEVBQUUsQ0FBQyxDQUFDO0FBcUQ3QixNQUFNLFNBQVMsQ0FBQyxDQUFDLElBQUksQ0FDbkIsVUFBaUMsRUFDakMsT0FBc0I7SUFFdEIsSUFBSSxPQUFPLFVBQVUsS0FBSyxRQUFRLEVBQUUsQ0FBQztRQUNuQyxPQUFPLEdBQUcsVUFBVSxDQUFDO1FBQ3JCLFVBQVUsR0FBRyxRQUFRLENBQUM7SUFDeEIsQ0FBQztJQUVELElBQUksVUFBVSxLQUFLLFFBQVEsSUFBSSxTQUFTLEVBQUUsQ0FBQyxNQUFNLEtBQUssSUFBSSxFQUFFLENBQUM7UUFDM0QsU0FBUyxFQUFFLENBQUMsS0FBSyxDQUFDO1lBQ2hCLE9BQU8sRUFBRSx1REFBdUQ7WUFDaEUsT0FBTyxFQUFFLFlBQVk7WUFDckIsS0FBSyxFQUFFLElBQUksS0FBSyxFQUFFLENBQUMsS0FBSztTQUN6QixDQUFDLENBQUM7UUFDSCxPQUFPO0lBQ1QsQ0FBQztJQUVELEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxVQUFVLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztRQUNwQyxNQUFNLFNBQVMsR0FBRyxPQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDOUIsSUFBSSxTQUFTLEVBQUUsQ0FBQztZQUNkLEtBQUssQ0FBQyxDQUFDLFNBQVMsQ0FBQztRQUNuQixDQUFDO2FBQU0sQ0FBQztZQUNOLEtBQUssQ0FBQztRQUNSLENBQUM7SUFDSCxDQUFDO0FBQ0gsQ0FBQyJ9
@@ -0,0 +1,25 @@
1
+ import type { ThreadGenerator } from '../threading';
2
+ import type { LoopCallback } from './loop';
3
+ /**
4
+ * Run a generator in a loop for the given amount of time.
5
+ *
6
+ * @remarks
7
+ * Generators are executed completely before the next iteration starts.
8
+ * An iteration is allowed to finish even when the time is up. This means that
9
+ * the actual duration of the loop may be longer than the given duration.
10
+ *
11
+ * @example
12
+ * ```ts
13
+ * yield* loopFor(
14
+ * 3,
15
+ * () => circle().position.x(-10, 0.1).to(10, 0.1)
16
+ * );
17
+ * ```
18
+ *
19
+ * @param seconds - The duration in seconds.
20
+ * @param factory - A function creating the generator to run. Because generators
21
+ * can't be reset, a new generator is created on each
22
+ * iteration.
23
+ */
24
+ export declare function loopFor(seconds: number, factory: LoopCallback): ThreadGenerator;
25
+ //# sourceMappingURL=loopFor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loopFor.d.ts","sourceRoot":"","sources":["../../src/flow/loopFor.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAC,eAAe,EAAC,MAAM,cAAc,CAAC;AAElD,OAAO,KAAK,EAAC,YAAY,EAAC,MAAM,QAAQ,CAAC;AAGzC;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAiB,OAAO,CACtB,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,YAAY,GACpB,eAAe,CAgBjB"}
@@ -0,0 +1,42 @@
1
+ import { decorate, threadable } from '../decorators';
2
+ import { usePlayback, useThread } from '../utils';
3
+ decorate(loopFor, threadable());
4
+ /**
5
+ * Run a generator in a loop for the given amount of time.
6
+ *
7
+ * @remarks
8
+ * Generators are executed completely before the next iteration starts.
9
+ * An iteration is allowed to finish even when the time is up. This means that
10
+ * the actual duration of the loop may be longer than the given duration.
11
+ *
12
+ * @example
13
+ * ```ts
14
+ * yield* loopFor(
15
+ * 3,
16
+ * () => circle().position.x(-10, 0.1).to(10, 0.1)
17
+ * );
18
+ * ```
19
+ *
20
+ * @param seconds - The duration in seconds.
21
+ * @param factory - A function creating the generator to run. Because generators
22
+ * can't be reset, a new generator is created on each
23
+ * iteration.
24
+ */
25
+ export function* loopFor(seconds, factory) {
26
+ const thread = useThread();
27
+ const step = usePlayback().framesToSeconds(1);
28
+ const targetTime = thread.time() + seconds;
29
+ let iteration = 0;
30
+ while (targetTime - step > thread.fixed) {
31
+ const generator = factory(iteration);
32
+ if (generator) {
33
+ yield* generator;
34
+ }
35
+ else {
36
+ yield;
37
+ }
38
+ iteration += 1;
39
+ }
40
+ thread.time(targetTime);
41
+ }
42
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9vcEZvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9mbG93L2xvb3BGb3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFFBQVEsRUFBRSxVQUFVLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFFbkQsT0FBTyxFQUFDLFdBQVcsRUFBRSxTQUFTLEVBQUMsTUFBTSxVQUFVLENBQUM7QUFHaEQsUUFBUSxDQUFDLE9BQU8sRUFBRSxVQUFVLEVBQUUsQ0FBQyxDQUFDO0FBQ2hDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW9CRztBQUNILE1BQU0sU0FBUyxDQUFDLENBQUMsT0FBTyxDQUN0QixPQUFlLEVBQ2YsT0FBcUI7SUFFckIsTUFBTSxNQUFNLEdBQUcsU0FBUyxFQUFFLENBQUM7SUFDM0IsTUFBTSxJQUFJLEdBQUcsV0FBVyxFQUFFLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzlDLE1BQU0sVUFBVSxHQUFHLE1BQU0sQ0FBQyxJQUFJLEVBQUUsR0FBRyxPQUFPLENBQUM7SUFFM0MsSUFBSSxTQUFTLEdBQUcsQ0FBQyxDQUFDO0lBQ2xCLE9BQU8sVUFBVSxHQUFHLElBQUksR0FBRyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDeEMsTUFBTSxTQUFTLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3JDLElBQUksU0FBUyxFQUFFLENBQUM7WUFDZCxLQUFLLENBQUMsQ0FBQyxTQUFTLENBQUM7UUFDbkIsQ0FBQzthQUFNLENBQUM7WUFDTixLQUFLLENBQUM7UUFDUixDQUFDO1FBQ0QsU0FBUyxJQUFJLENBQUMsQ0FBQztJQUNqQixDQUFDO0lBQ0QsTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUMxQixDQUFDIn0=
@@ -0,0 +1,3 @@
1
+ export declare function setTaskName(task: Generator, source: Generator | string): void;
2
+ export declare function getTaskName(task: Generator): string;
3
+ //# sourceMappingURL=names.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"names.d.ts","sourceRoot":"","sources":["../../src/flow/names.ts"],"names":[],"mappings":"AAAA,wBAAgB,WAAW,CAAC,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,GAAG,MAAM,GAAG,IAAI,CAM7E;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,SAAS,GAAG,MAAM,CAEnD"}
@@ -0,0 +1,11 @@
1
+ export function setTaskName(task, source) {
2
+ const prototype = Object.getPrototypeOf(task);
3
+ if (!prototype.threadable) {
4
+ prototype.threadable = true;
5
+ prototype.name = typeof source === 'string' ? source : getTaskName(source);
6
+ }
7
+ }
8
+ export function getTaskName(task) {
9
+ return Object.getPrototypeOf(task).name ?? null;
10
+ }
11
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmFtZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZmxvdy9uYW1lcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLFVBQVUsV0FBVyxDQUFDLElBQWUsRUFBRSxNQUEwQjtJQUNyRSxNQUFNLFNBQVMsR0FBRyxNQUFNLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzlDLElBQUksQ0FBQyxTQUFTLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDMUIsU0FBUyxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7UUFDNUIsU0FBUyxDQUFDLElBQUksR0FBRyxPQUFPLE1BQU0sS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzdFLENBQUM7QUFDSCxDQUFDO0FBRUQsTUFBTSxVQUFVLFdBQVcsQ0FBQyxJQUFlO0lBQ3pDLE9BQU8sTUFBTSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDO0FBQ2xELENBQUMifQ==
@@ -0,0 +1,45 @@
1
+ import type { ThreadGenerator } from '../threading';
2
+ /**
3
+ * Turn the given generator function into a task.
4
+ *
5
+ * @remarks
6
+ * If you want to immediately run the generator in its own thread, you can use
7
+ * {@link threading.spawn} instead. This function is useful when you want to
8
+ * pass the created task to other flow functions.
9
+ *
10
+ * @example
11
+ * ```ts
12
+ * yield* all(
13
+ * run(function* () {
14
+ * // do things
15
+ * }),
16
+ * rect.opacity(1, 1),
17
+ * );
18
+ * ```
19
+ *
20
+ * @param runner - A generator function or a factory that creates the generator.
21
+ */
22
+ export declare function run(runner: () => ThreadGenerator): ThreadGenerator;
23
+ /**
24
+ * Turn the given generator function into a task.
25
+ *
26
+ * @remarks
27
+ * If you want to immediately run the generator in its own thread, you can use
28
+ * {@link threading.spawn} instead. This function is useful when you want to
29
+ * pass the created task to other flow functions.
30
+ *
31
+ * @example
32
+ * ```ts
33
+ * yield* all(
34
+ * run(function* () {
35
+ * // do things
36
+ * }),
37
+ * rect.opacity(1, 1),
38
+ * );
39
+ * ```
40
+ *
41
+ * @param runner - A generator function or a factory that creates the generator.
42
+ * @param name - An optional name used when displaying this generator in the UI.
43
+ */
44
+ export declare function run(name: string, runner: () => ThreadGenerator): ThreadGenerator;
45
+ //# sourceMappingURL=run.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../../src/flow/run.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,eAAe,EAAC,MAAM,cAAc,CAAC;AAElD;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,wBAAgB,GAAG,CAAC,MAAM,EAAE,MAAM,eAAe,GAAG,eAAe,CAAC;AACpE;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,GAAG,CACjB,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,eAAe,GAC5B,eAAe,CAAC"}
@@ -0,0 +1,14 @@
1
+ import { setTaskName } from './names';
2
+ export function run(firstArg, runner) {
3
+ let task;
4
+ if (typeof firstArg === 'string') {
5
+ task = runner();
6
+ setTaskName(task, firstArg);
7
+ }
8
+ else {
9
+ task = firstArg();
10
+ setTaskName(task, task);
11
+ }
12
+ return task;
13
+ }
14
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVuLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2Zsb3cvcnVuLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSxTQUFTLENBQUM7QUFnRHBDLE1BQU0sVUFBVSxHQUFHLENBQ2pCLFFBQTBDLEVBQzFDLE1BQThCO0lBRTlCLElBQUksSUFBSSxDQUFDO0lBQ1QsSUFBSSxPQUFPLFFBQVEsS0FBSyxRQUFRLEVBQUUsQ0FBQztRQUNqQyxJQUFJLEdBQUcsTUFBTyxFQUFFLENBQUM7UUFDakIsV0FBVyxDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQztJQUM5QixDQUFDO1NBQU0sQ0FBQztRQUNOLElBQUksR0FBRyxRQUFRLEVBQUUsQ0FBQztRQUNsQixXQUFXLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQzFCLENBQUM7SUFFRCxPQUFPLElBQUksQ0FBQztBQUNkLENBQUMifQ==
@@ -0,0 +1,18 @@
1
+ import type { ThreadGenerator } from '../threading';
2
+ /**
3
+ * Wait for the given amount of time.
4
+ *
5
+ * @example
6
+ * ```ts
7
+ * // current time: 0s
8
+ * yield waitFor(2);
9
+ * // current time: 2s
10
+ * yield waitFor(3);
11
+ * // current time: 5s
12
+ * ```
13
+ *
14
+ * @param seconds - The relative time in seconds.
15
+ * @param after - An optional task to be run after the function completes.
16
+ */
17
+ export declare function waitFor(seconds?: number, after?: ThreadGenerator): ThreadGenerator;
18
+ //# sourceMappingURL=scheduling.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scheduling.d.ts","sourceRoot":"","sources":["../../src/flow/scheduling.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAC,eAAe,EAAC,MAAM,cAAc,CAAC;AAIlD;;;;;;;;;;;;;;GAcG;AACH,wBAAiB,OAAO,CACtB,OAAO,SAAI,EACX,KAAK,CAAC,EAAE,eAAe,GACtB,eAAe,CAejB"}
@@ -0,0 +1,33 @@
1
+ import { decorate, threadable } from '../decorators';
2
+ import { usePlayback, useThread } from '../utils';
3
+ decorate(waitFor, threadable());
4
+ /**
5
+ * Wait for the given amount of time.
6
+ *
7
+ * @example
8
+ * ```ts
9
+ * // current time: 0s
10
+ * yield waitFor(2);
11
+ * // current time: 2s
12
+ * yield waitFor(3);
13
+ * // current time: 5s
14
+ * ```
15
+ *
16
+ * @param seconds - The relative time in seconds.
17
+ * @param after - An optional task to be run after the function completes.
18
+ */
19
+ export function* waitFor(seconds = 0, after) {
20
+ const thread = useThread();
21
+ const step = usePlayback().framesToSeconds(1);
22
+ const targetTime = thread.time() + seconds;
23
+ // subtracting the step is not necessary, but it keeps the thread time ahead
24
+ // of the project time.
25
+ while (targetTime - step > thread.fixed) {
26
+ yield;
27
+ }
28
+ thread.time(targetTime);
29
+ if (after) {
30
+ yield* after;
31
+ }
32
+ }
33
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NoZWR1bGluZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9mbG93L3NjaGVkdWxpbmcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFFBQVEsRUFBRSxVQUFVLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFFbkQsT0FBTyxFQUFDLFdBQVcsRUFBRSxTQUFTLEVBQUMsTUFBTSxVQUFVLENBQUM7QUFFaEQsUUFBUSxDQUFDLE9BQU8sRUFBRSxVQUFVLEVBQUUsQ0FBQyxDQUFDO0FBQ2hDOzs7Ozs7Ozs7Ozs7OztHQWNHO0FBQ0gsTUFBTSxTQUFTLENBQUMsQ0FBQyxPQUFPLENBQ3RCLE9BQU8sR0FBRyxDQUFDLEVBQ1gsS0FBdUI7SUFFdkIsTUFBTSxNQUFNLEdBQUcsU0FBUyxFQUFFLENBQUM7SUFDM0IsTUFBTSxJQUFJLEdBQUcsV0FBVyxFQUFFLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBRTlDLE1BQU0sVUFBVSxHQUFHLE1BQU0sQ0FBQyxJQUFJLEVBQUUsR0FBRyxPQUFPLENBQUM7SUFDM0MsNEVBQTRFO0lBQzVFLHVCQUF1QjtJQUN2QixPQUFPLFVBQVUsR0FBRyxJQUFJLEdBQUcsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ3hDLEtBQUssQ0FBQztJQUNSLENBQUM7SUFDRCxNQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBRXhCLElBQUksS0FBSyxFQUFFLENBQUM7UUFDVixLQUFLLENBQUMsQ0FBQyxLQUFLLENBQUM7SUFDZixDQUFDO0FBQ0gsQ0FBQyJ9
@@ -0,0 +1,22 @@
1
+ import type { ThreadGenerator } from '../threading';
2
+ /**
3
+ * Start all tasks one after another with a constant delay between.
4
+ *
5
+ * @remarks
6
+ * The function doesn't wait until the previous task in the sequence has
7
+ * finished. Once the delay has passed, the next task will start even if
8
+ * the previous is still running.
9
+ *
10
+ * @example
11
+ * ```ts
12
+ * yield* sequence(
13
+ * 0.1,
14
+ * ...rects.map(rect => rect.x(100, 1))
15
+ * );
16
+ * ```
17
+ *
18
+ * @param delay - The delay between each of the tasks.
19
+ * @param tasks - A list of tasks to be run in a sequence.
20
+ */
21
+ export declare function sequence(delay: number, ...tasks: ThreadGenerator[]): ThreadGenerator;
22
+ //# sourceMappingURL=sequence.d.ts.map