@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,115 @@
1
+ import { PlaybackState } from '../app/PlaybackManager';
2
+ import { ValueDispatcher } from '../events';
3
+ export class Slides {
4
+ get onChanged() {
5
+ return this.slides.subscribable;
6
+ }
7
+ constructor(scene) {
8
+ this.scene = scene;
9
+ this.slides = new ValueDispatcher([]);
10
+ this.lookup = new Map();
11
+ this.collisionLookup = new Set();
12
+ this.current = null;
13
+ this.canResume = false;
14
+ this.waitsForId = null;
15
+ this.targetId = null;
16
+ this.handleReload = () => {
17
+ this.lookup.clear();
18
+ this.collisionLookup.clear();
19
+ this.current = null;
20
+ this.waitsForId = null;
21
+ this.targetId = null;
22
+ };
23
+ this.handleReset = () => {
24
+ this.collisionLookup.clear();
25
+ this.current = null;
26
+ this.waitsForId = null;
27
+ };
28
+ this.handleRecalculated = () => {
29
+ this.slides.current = [...this.lookup.values()];
30
+ };
31
+ this.scene.onReloaded.subscribe(this.handleReload);
32
+ this.scene.onReset.subscribe(this.handleReset);
33
+ this.scene.onRecalculated.subscribe(this.handleRecalculated);
34
+ }
35
+ setTarget(target) {
36
+ this.targetId = target;
37
+ }
38
+ resume() {
39
+ this.canResume = true;
40
+ }
41
+ isWaitingFor(slide) {
42
+ return this.waitsForId === slide;
43
+ }
44
+ isWaiting() {
45
+ return this.waitsForId !== null;
46
+ }
47
+ didHappen(slide) {
48
+ if (this.current === null) {
49
+ return false;
50
+ }
51
+ for (const key of this.lookup.keys()) {
52
+ if (key === slide) {
53
+ return true;
54
+ }
55
+ if (key === this.current?.id) {
56
+ return false;
57
+ }
58
+ }
59
+ return false;
60
+ }
61
+ getCurrent() {
62
+ return this.current;
63
+ }
64
+ register(name, initialTime) {
65
+ if (this.waitsForId !== null) {
66
+ throw new Error(`The animation already waits for a slide: ${this.waitsForId}.`);
67
+ }
68
+ const id = this.toId(name);
69
+ if (this.scene.playback.state !== PlaybackState.Presenting) {
70
+ if (!this.lookup.has(id)) {
71
+ this.lookup.set(id, {
72
+ id,
73
+ name,
74
+ time: initialTime,
75
+ scene: this.scene,
76
+ stack: new Error().stack,
77
+ });
78
+ }
79
+ if (this.collisionLookup.has(name)) {
80
+ this.scene.logger.warn({
81
+ message: `A slide named "${name}" already exists.`,
82
+ stack: new Error().stack,
83
+ });
84
+ }
85
+ else {
86
+ this.collisionLookup.add(name);
87
+ }
88
+ }
89
+ this.waitsForId = id;
90
+ this.current = this.lookup.get(id) ?? null;
91
+ this.canResume = false;
92
+ }
93
+ shouldWait(name) {
94
+ const id = this.toId(name);
95
+ if (this.waitsForId !== id) {
96
+ throw new Error(`The animation waits for a different slide: ${this.waitsForId}.`);
97
+ }
98
+ const data = this.lookup.get(id);
99
+ if (!data) {
100
+ throw new Error(`Could not find the "${name}" slide.`);
101
+ }
102
+ let canResume = this.canResume;
103
+ if (this.scene.playback.state !== PlaybackState.Presenting) {
104
+ canResume = id !== this.targetId;
105
+ }
106
+ if (canResume) {
107
+ this.waitsForId = null;
108
+ }
109
+ return !canResume;
110
+ }
111
+ toId(name) {
112
+ return `${this.scene.name}:${name}`;
113
+ }
114
+ }
115
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2xpZGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NjZW5lcy9TbGlkZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLHdCQUF3QixDQUFDO0FBQ3JELE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxXQUFXLENBQUM7QUFXMUMsTUFBTSxPQUFPLE1BQU07SUFDakIsSUFBVyxTQUFTO1FBQ2xCLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUM7SUFDbEMsQ0FBQztJQVVELFlBQW9DLEtBQVk7UUFBWixVQUFLLEdBQUwsS0FBSyxDQUFPO1FBVC9CLFdBQU0sR0FBRyxJQUFJLGVBQWUsQ0FBVSxFQUFFLENBQUMsQ0FBQztRQUUxQyxXQUFNLEdBQUcsSUFBSSxHQUFHLEVBQWlCLENBQUM7UUFDbEMsb0JBQWUsR0FBRyxJQUFJLEdBQUcsRUFBVSxDQUFDO1FBQzdDLFlBQU8sR0FBaUIsSUFBSSxDQUFDO1FBQzdCLGNBQVMsR0FBRyxLQUFLLENBQUM7UUFDbEIsZUFBVSxHQUFrQixJQUFJLENBQUM7UUFDakMsYUFBUSxHQUFrQixJQUFJLENBQUM7UUFzRy9CLGlCQUFZLEdBQUcsR0FBRyxFQUFFO1lBQzFCLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDcEIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUM3QixJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztZQUNwQixJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztZQUN2QixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztRQUN2QixDQUFDLENBQUM7UUFFTSxnQkFBVyxHQUFHLEdBQUcsRUFBRTtZQUN6QixJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQzdCLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO1lBQ3BCLElBQUks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
@@ -0,0 +1,19 @@
1
+ import type { SubscribableValueEvent } from '../events';
2
+ import type { Thread } from '../threading';
3
+ /**
4
+ * Scenes can implement this interface to display their thread hierarchy in the
5
+ * UI.
6
+ *
7
+ * @remarks
8
+ * This interface is only useful when a scene uses thread generators to run.
9
+ */
10
+ export interface Threadable {
11
+ /**
12
+ * Triggered when the main thread changes.
13
+ *
14
+ * @eventProperty
15
+ */
16
+ get onThreadChanged(): SubscribableValueEvent<Thread | null>;
17
+ }
18
+ export declare function isThreadable(value: any): value is Threadable;
19
+ //# sourceMappingURL=Threadable.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Threadable.d.ts","sourceRoot":"","sources":["../../src/scenes/Threadable.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,sBAAsB,EAAC,MAAM,WAAW,CAAC;AACtD,OAAO,KAAK,EAAC,MAAM,EAAC,MAAM,cAAc,CAAC;AAEzC;;;;;;GAMG;AACH,MAAM,WAAW,UAAU;IACzB;;;;OAIG;IACH,IAAI,eAAe,IAAI,sBAAsB,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;CAC9D;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,GAAG,GAAG,KAAK,IAAI,UAAU,CAE5D"}
@@ -0,0 +1,4 @@
1
+ export function isThreadable(value) {
2
+ return value && typeof value === 'object' && 'onThreadChanged' in value;
3
+ }
4
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVGhyZWFkYWJsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zY2VuZXMvVGhyZWFkYWJsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFtQkEsTUFBTSxVQUFVLFlBQVksQ0FBQyxLQUFVO0lBQ3JDLE9BQU8sS0FBSyxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsSUFBSSxpQkFBaUIsSUFBSSxLQUFLLENBQUM7QUFDMUUsQ0FBQyJ9
@@ -0,0 +1,24 @@
1
+ import type { Scene } from './Scene';
2
+ export declare class Variables {
3
+ private readonly scene;
4
+ private signals;
5
+ private variables;
6
+ constructor(scene: Scene);
7
+ /**
8
+ * Get variable signal if exists or create signal if not
9
+ *
10
+ * @param name - The name of the variable.
11
+ * @param initial - The initial value of the variable. It will be used if the
12
+ * variable was not configured from the outside.
13
+ */
14
+ get<T>(name: string, initial: T): () => T;
15
+ /**
16
+ * Update all signals with new project variable values.
17
+ */
18
+ updateSignals(variables: Record<string, unknown>): void;
19
+ /**
20
+ * Reset all stored signals.
21
+ */
22
+ handleReset: () => void;
23
+ }
24
+ //# sourceMappingURL=Variables.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Variables.d.ts","sourceRoot":"","sources":["../../src/scenes/Variables.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAC,KAAK,EAAC,MAAM,SAAS,CAAC;AAEnC,qBAAa,SAAS;IAID,OAAO,CAAC,QAAQ,CAAC,KAAK;IAHzC,OAAO,CAAC,OAAO,CAA0C;IACzD,OAAO,CAAC,SAAS,CAA+B;gBAEZ,KAAK,EAAE,KAAK;IAIhD;;;;;;OAMG;IACI,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,GAAG,MAAM,CAAC;IAKhD;;OAEG;IACI,aAAa,CAAC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IASvD;;OAEG;IACI,WAAW,aAEhB;CACH"}
@@ -0,0 +1,39 @@
1
+ import { createSignal } from '../signals';
2
+ export class Variables {
3
+ constructor(scene) {
4
+ this.scene = scene;
5
+ this.signals = {};
6
+ this.variables = {};
7
+ /**
8
+ * Reset all stored signals.
9
+ */
10
+ this.handleReset = () => {
11
+ this.signals = {};
12
+ };
13
+ scene.onReset.subscribe(this.handleReset);
14
+ }
15
+ /**
16
+ * Get variable signal if exists or create signal if not
17
+ *
18
+ * @param name - The name of the variable.
19
+ * @param initial - The initial value of the variable. It will be used if the
20
+ * variable was not configured from the outside.
21
+ */
22
+ get(name, initial) {
23
+ var _a;
24
+ (_a = this.signals)[name] ?? (_a[name] = createSignal(this.variables[name] ?? initial));
25
+ return () => this.signals[name]();
26
+ }
27
+ /**
28
+ * Update all signals with new project variable values.
29
+ */
30
+ updateSignals(variables) {
31
+ this.variables = variables;
32
+ Object.keys(variables).map(variableName => {
33
+ if (variableName in this.signals) {
34
+ this.signals[variableName](variables[variableName]);
35
+ }
36
+ });
37
+ }
38
+ }
39
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVmFyaWFibGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NjZW5lcy9WYXJpYWJsZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLFlBQVksQ0FBQztBQUd4QyxNQUFNLE9BQU8sU0FBUztJQUlwQixZQUFvQyxLQUFZO1FBQVosVUFBSyxHQUFMLEtBQUssQ0FBTztRQUh4QyxZQUFPLEdBQXVDLEVBQUUsQ0FBQztRQUNqRCxjQUFTLEdBQTRCLEVBQUUsQ0FBQztRQThCaEQ7O1dBRUc7UUFDSSxnQkFBVyxHQUFHLEdBQUcsRUFBRTtZQUN4QixJQUFJLENBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztRQUNwQixDQUFDLENBQUM7UUFoQ0EsS0FBSyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQzVDLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSSxHQUFHLENBQUksSUFBWSxFQUFFLE9BQVU7O1FBQ3BDLE1BQUEsSUFBSSxDQUFDLE9BQU8sRUFBQyxJQUFJLFNBQUosSUFBSSxJQUFNLFlBQVksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLE9BQU8sQ0FBQyxFQUFDO1FBQ3JFLE9BQU8sR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO0lBQ3BDLENBQUM7SUFFRDs7T0FFRztJQUNJLGFBQWEsQ0FBQyxTQUFrQztRQUNyRCxJQUFJLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQztRQUMzQixNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsRUFBRTtZQUN4QyxJQUFJLFlBQVksSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7Z0JBQ2pDLElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUM7WUFDdEQsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztDQVFGIn0=
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Abstract scene representations and related utilities.
3
+ *
4
+ * @packageDocumentation
5
+ */
6
+ export * from './GeneratorScene';
7
+ export * from './Inspectable';
8
+ export * from './LifecycleEvents';
9
+ export * from './Random';
10
+ export * from './Scene';
11
+ export * from './SceneState';
12
+ export * from './Shaders';
13
+ export * from './Slides';
14
+ export * from './Threadable';
15
+ export * from './Variables';
16
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/scenes/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,kBAAkB,CAAC;AACjC,cAAc,eAAe,CAAC;AAC9B,cAAc,mBAAmB,CAAC;AAClC,cAAc,UAAU,CAAC;AACzB,cAAc,SAAS,CAAC;AACxB,cAAc,cAAc,CAAC;AAC7B,cAAc,WAAW,CAAC;AAC1B,cAAc,UAAU,CAAC;AACzB,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Abstract scene representations and related utilities.
3
+ *
4
+ * @packageDocumentation
5
+ */
6
+ export * from './GeneratorScene';
7
+ export * from './Inspectable';
8
+ export * from './LifecycleEvents';
9
+ export * from './Random';
10
+ export * from './Scene';
11
+ export * from './SceneState';
12
+ export * from './Shaders';
13
+ export * from './Slides';
14
+ export * from './Threadable';
15
+ export * from './Variables';
16
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc2NlbmVzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7O0dBSUc7QUFFSCxjQUFjLGtCQUFrQixDQUFDO0FBQ2pDLGNBQWMsZUFBZSxDQUFDO0FBQzlCLGNBQWMsbUJBQW1CLENBQUM7QUFDbEMsY0FBYyxVQUFVLENBQUM7QUFDekIsY0FBYyxTQUFTLENBQUM7QUFDeEIsY0FBYyxjQUFjLENBQUM7QUFDN0IsY0FBYyxXQUFXLENBQUM7QUFDMUIsY0FBYyxVQUFVLENBQUM7QUFDekIsY0FBYyxjQUFjLENBQUM7QUFDN0IsY0FBYyxhQUFhLENBQUMifQ==
@@ -0,0 +1,21 @@
1
+ import type { InterpolationFunction } from '../tweening';
2
+ import type { Signal } from './SignalContext';
3
+ import { SignalContext } from './SignalContext';
4
+ import type { SignalExtensions, SignalValue } from './types';
5
+ export type CompoundSignal<TSetterValue, TValue extends TSetterValue, TKeys extends keyof TValue = keyof TValue, TOwner = void, TContext = CompoundSignalContext<TSetterValue, TValue, TKeys, TOwner>> = Signal<TSetterValue, TValue, TOwner, TContext> & {
6
+ [K in TKeys]: Signal<TValue[K], TValue[K], TOwner extends void ? CompoundSignal<TSetterValue, TValue, TKeys, TOwner, TContext> : TOwner>;
7
+ };
8
+ export declare class CompoundSignalContext<TSetterValue, TValue extends TSetterValue, TKeys extends keyof TValue = keyof TValue, TOwner = void> extends SignalContext<TSetterValue, TValue, TOwner> {
9
+ private readonly entries;
10
+ readonly signals: [keyof TValue, Signal<any, any, TOwner>][];
11
+ constructor(entries: (TKeys | [keyof TValue, Signal<any, any, TOwner>])[], parser: (value: TSetterValue) => TValue, initial: SignalValue<TSetterValue>, interpolation: InterpolationFunction<TValue>, owner?: TOwner, extensions?: Partial<SignalExtensions<TSetterValue, TValue>>);
12
+ toSignal(): CompoundSignal<TSetterValue, TValue, TKeys, TOwner>;
13
+ parse(value: TSetterValue): TValue;
14
+ getter(): TValue;
15
+ setter(value: SignalValue<TValue>): TOwner;
16
+ reset(): TOwner;
17
+ save(): TOwner;
18
+ isInitial(): boolean;
19
+ raw(): TSetterValue;
20
+ }
21
+ //# sourceMappingURL=CompoundSignalContext.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CompoundSignalContext.d.ts","sourceRoot":"","sources":["../../src/signals/CompoundSignalContext.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,qBAAqB,EAAC,MAAM,aAAa,CAAC;AAEvD,OAAO,KAAK,EAAC,MAAM,EAAC,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAC,aAAa,EAAC,MAAM,iBAAiB,CAAC;AAC9C,OAAO,KAAK,EAAC,gBAAgB,EAAE,WAAW,EAAC,MAAM,SAAS,CAAC;AAG3D,MAAM,MAAM,cAAc,CACxB,YAAY,EACZ,MAAM,SAAS,YAAY,EAC3B,KAAK,SAAS,MAAM,MAAM,GAAG,MAAM,MAAM,EACzC,MAAM,GAAG,IAAI,EACb,QAAQ,GAAG,qBAAqB,CAAC,YAAY,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,IACnE,MAAM,CAAC,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,GAAG;KAClD,CAAC,IAAI,KAAK,GAAG,MAAM,CAClB,MAAM,CAAC,CAAC,CAAC,EACT,MAAM,CAAC,CAAC,CAAC,EACT,MAAM,SAAS,IAAI,GACf,cAAc,CAAC,YAAY,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,CAAC,GAC7D,MAAM,CACX;CACF,CAAC;AAEF,qBAAa,qBAAqB,CAChC,YAAY,EACZ,MAAM,SAAS,YAAY,EAC3B,KAAK,SAAS,MAAM,MAAM,GAAG,MAAM,MAAM,EACzC,MAAM,GAAG,IAAI,CACb,SAAQ,aAAa,CAAC,YAAY,EAAE,MAAM,EAAE,MAAM,CAAC;IAIjD,OAAO,CAAC,QAAQ,CAAC,OAAO;IAH1B,SAAgB,OAAO,EAAE,CAAC,MAAM,MAAM,EAAE,MAAM,CAAC,GAAG,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC,EAAE,CAAM;gBAGtD,OAAO,EAAE,CACtB,KAAK,GACL,CAAC,MAAM,MAAM,EAAE,MAAM,CAAC,GAAG,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC,CAC3C,EAAE,EACH,MAAM,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,MAAM,EACvC,OAAO,EAAE,WAAW,CAAC,YAAY,CAAC,EAClC,aAAa,EAAE,qBAAqB,CAAC,MAAM,CAAC,EAC5C,KAAK,GAAE,MAAqC,EAC5C,UAAU,GAAE,OAAO,CAAC,gBAAgB,CAAC,YAAY,EAAE,MAAM,CAAC,CAAM;IAwBlD,QAAQ,IAAI,cAAc,CACxC,YAAY,EACZ,MAAM,EACN,KAAK,EACL,MAAM,CACP;IAIe,KAAK,CAAC,KAAK,EAAE,YAAY,GAAG,MAAM;IAIlC,MAAM,IAAI,MAAM;IAUhB,MAAM,CAAC,KAAK,EAAE,WAAW,CAAC,MAAM,CAAC,GAAG,MAAM;IAe1C,KAAK,IAAI,MAAM;IAOf,IAAI,IAAI,MAAM;IAOd,SAAS,IAAI,OAAO;IASpB,GAAG,IAGZ,YAAY;CAEpB"}
@@ -0,0 +1,73 @@
1
+ import { map } from '../tweening/helpers';
2
+ import { SignalContext } from './SignalContext';
3
+ import { isReactive, modify } from './utils';
4
+ export class CompoundSignalContext extends SignalContext {
5
+ constructor(entries, parser, initial, interpolation, owner = undefined, extensions = {}) {
6
+ var _a;
7
+ super(undefined, interpolation, owner, parser, extensions);
8
+ this.entries = entries;
9
+ this.signals = [];
10
+ this.parser = parser;
11
+ for (const entry of entries) {
12
+ let key;
13
+ let signal;
14
+ if (Array.isArray(entry)) {
15
+ [key, signal] = entry;
16
+ (_a = signal.context).owner ?? (_a.owner = this);
17
+ }
18
+ else {
19
+ key = entry;
20
+ signal = new SignalContext(modify(initial, value => parser(value)[entry]), map, owner ?? this.invokable).toSignal();
21
+ }
22
+ this.signals.push([key, signal]);
23
+ Object.defineProperty(this.invokable, key, { value: signal });
24
+ }
25
+ }
26
+ toSignal() {
27
+ return this.invokable;
28
+ }
29
+ parse(value) {
30
+ return this.parser(value);
31
+ }
32
+ getter() {
33
+ return this.parse((Object.fromEntries(this.signals.map(([key, property]) => [key, property()]))));
34
+ }
35
+ setter(value) {
36
+ if (isReactive(value)) {
37
+ for (const [key, property] of this.signals) {
38
+ property(() => this.parser(value())[key]);
39
+ }
40
+ }
41
+ else {
42
+ const parsed = this.parse(value);
43
+ for (const [key, property] of this.signals) {
44
+ property(parsed[key]);
45
+ }
46
+ }
47
+ return this.owner;
48
+ }
49
+ reset() {
50
+ for (const [, signal] of this.signals) {
51
+ signal.reset();
52
+ }
53
+ return this.owner;
54
+ }
55
+ save() {
56
+ for (const [, signal] of this.signals) {
57
+ signal.save();
58
+ }
59
+ return this.owner;
60
+ }
61
+ isInitial() {
62
+ for (const [, signal] of this.signals) {
63
+ if (!signal.isInitial()) {
64
+ return false;
65
+ }
66
+ }
67
+ return true;
68
+ }
69
+ raw() {
70
+ return Object.fromEntries(this.signals.map(([key, property]) => [key, property.context.raw()]));
71
+ }
72
+ }
73
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29tcG91bmRTaWduYWxDb250ZXh0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NpZ25hbHMvQ29tcG91bmRTaWduYWxDb250ZXh0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBQyxHQUFHLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQztBQUV4QyxPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFFOUMsT0FBTyxFQUFDLFVBQVUsRUFBRSxNQUFNLEVBQUMsTUFBTSxTQUFTLENBQUM7QUFrQjNDLE1BQU0sT0FBTyxxQkFLWCxTQUFRLGFBQTJDO0lBR25ELFlBQ21CLE9BR2QsRUFDSCxNQUF1QyxFQUN2QyxPQUFrQyxFQUNsQyxhQUE0QyxFQUM1QyxRQUFrQyxTQUFVLEVBQzVDLGFBQThELEVBQUU7O1FBRWhFLEtBQUssQ0FBQyxTQUFTLEVBQUUsYUFBYSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFWMUMsWUFBTyxHQUFQLE9BQU8sQ0FHckI7UUFOVyxZQUFPLEdBQStDLEVBQUUsQ0FBQztRQWN2RSxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztRQUVyQixLQUFLLE1BQU0sS0FBSyxJQUFJLE9BQU8sRUFBRSxDQUFDO1lBQzVCLElBQUksR0FBaUIsQ0FBQztZQUN0QixJQUFJLE1BQWdDLENBQUM7WUFDckMsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7Z0JBQ3pCLENBQUMsR0FBRyxFQUFFLE1BQU0sQ0FBQyxHQUFHLEtBQUssQ0FBQztnQkFDdEIsTUFBQyxNQUFNLENBQUMsT0FBZSxFQUFDLEtBQUssUUFBTCxLQUFLLEdBQUssSUFBSSxFQUFDO1lBQ3pDLENBQUM7aUJBQU0sQ0FBQztnQkFDTixHQUFHLEdBQUcsS0FBSyxDQUFDO2dCQUNaLE1BQU0sR0FBRyxJQUFJLGFBQWEsQ0FDeEIsTUFBTSxDQUFDLE9BQU8s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
@@ -0,0 +1,14 @@
1
+ import { DependencyContext } from './DependencyContext';
2
+ export interface Computed<TValue> {
3
+ (...args: any[]): TValue;
4
+ context: ComputedContext<TValue>;
5
+ }
6
+ export declare class ComputedContext<TValue> extends DependencyContext<any> {
7
+ private readonly factory;
8
+ private last;
9
+ constructor(factory: (...args: any[]) => TValue, owner?: any);
10
+ toSignal(): Computed<TValue>;
11
+ dispose(): void;
12
+ protected invoke(...args: any[]): TValue;
13
+ }
14
+ //# sourceMappingURL=ComputedContext.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ComputedContext.d.ts","sourceRoot":"","sources":["../../src/signals/ComputedContext.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,iBAAiB,EAAC,MAAM,qBAAqB,CAAC;AAEtD,MAAM,WAAW,QAAQ,CAAC,MAAM;IAC9B,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,MAAM,CAAC;IACzB,OAAO,EAAE,eAAe,CAAC,MAAM,CAAC,CAAC;CAClC;AAED,qBAAa,eAAe,CAAC,MAAM,CAAE,SAAQ,iBAAiB,CAAC,GAAG,CAAC;IAI/D,OAAO,CAAC,QAAQ,CAAC,OAAO;IAH1B,OAAO,CAAC,IAAI,CAAqB;gBAGd,OAAO,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,MAAM,EACpD,KAAK,CAAC,EAAE,GAAG;IAMN,QAAQ,IAAI,QAAQ,CAAC,MAAM,CAAC;IAInB,OAAO;cAKJ,MAAM,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,MAAM;CAmBlD"}
@@ -0,0 +1,36 @@
1
+ import { errorToLog, useLogger } from '../utils';
2
+ import { DependencyContext } from './DependencyContext';
3
+ export class ComputedContext extends DependencyContext {
4
+ constructor(factory, owner) {
5
+ super(owner);
6
+ this.factory = factory;
7
+ this.markDirty();
8
+ }
9
+ toSignal() {
10
+ return this.invokable;
11
+ }
12
+ dispose() {
13
+ super.dispose();
14
+ this.last = undefined;
15
+ }
16
+ invoke(...args) {
17
+ if (this.event.isRaised()) {
18
+ this.clearDependencies();
19
+ this.startCollecting();
20
+ try {
21
+ this.last = this.factory(...args);
22
+ }
23
+ catch (e) {
24
+ useLogger().error({
25
+ ...errorToLog(e),
26
+ inspect: this.owner?.key,
27
+ });
28
+ }
29
+ this.finishCollecting();
30
+ }
31
+ this.event.reset();
32
+ this.collect();
33
+ return this.last;
34
+ }
35
+ }
36
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29tcHV0ZWRDb250ZXh0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NpZ25hbHMvQ29tcHV0ZWRDb250ZXh0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxVQUFVLEVBQUUsU0FBUyxFQUFDLE1BQU0sVUFBVSxDQUFDO0FBQy9DLE9BQU8sRUFBQyxpQkFBaUIsRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBT3RELE1BQU0sT0FBTyxlQUF3QixTQUFRLGlCQUFzQjtJQUdqRSxZQUNtQixPQUFtQyxFQUNwRCxLQUFXO1FBRVgsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBSEksWUFBTyxHQUFQLE9BQU8sQ0FBNEI7UUFJcEQsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0lBQ25CLENBQUM7SUFFTSxRQUFRO1FBQ2IsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQ3hCLENBQUM7SUFFZSxPQUFPO1FBQ3JCLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNoQixJQUFJLENBQUMsSUFBSSxHQUFHLFNBQVMsQ0FBQztJQUN4QixDQUFDO0lBRWtCLE1BQU0sQ0FBQyxHQUFHLElBQVc7UUFDdEMsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUM7WUFDMUIsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7WUFDekIsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1lBQ3ZCLElBQUksQ0FBQztnQkFDSCxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQztZQUNwQyxDQUFDO1lBQUMsT0FBTyxDQUFNLEVBQUUsQ0FBQztnQkFDaEIsU0FBUyxFQUFFLENBQUMsS0FBSyxDQUFDO29CQUNoQixHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUM7b0JBQ2hCLE9BQU8sRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLEdBQUc7aUJBQ3pCLENBQUMsQ0FBQztZQUNMLENBQUM7WUFDRCxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUMxQixDQUFDO1FBQ0QsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNuQixJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7UUFFZixPQUFPLElBQUksQ0FBQyxJQUFLLENBQUM7SUFDcEIsQ0FBQztDQUNGIn0=
@@ -0,0 +1,32 @@
1
+ import type { Subscribable } from '../events';
2
+ import { FlagDispatcher } from '../events';
3
+ import type { Promisable } from '../threading';
4
+ export interface PromiseHandle<T> {
5
+ promise: Promise<T>;
6
+ value: T;
7
+ stack?: string;
8
+ owner?: any;
9
+ }
10
+ export declare class DependencyContext<TOwner = void> implements Promisable<DependencyContext<TOwner>> {
11
+ protected owner: TOwner;
12
+ protected static collectionSet: Set<DependencyContext<any>>;
13
+ protected static collectionStack: DependencyContext<any>[];
14
+ protected static promises: PromiseHandle<any>[];
15
+ static collectPromise<T>(promise: Promise<T>): PromiseHandle<T | null>;
16
+ static collectPromise<T>(promise: Promise<T>, initialValue: T): PromiseHandle<T>;
17
+ static hasPromises(): boolean;
18
+ static consumePromises(): Promise<PromiseHandle<any>[]>;
19
+ protected readonly invokable: any;
20
+ protected dependencies: Set<Subscribable<void, import("../events").EventHandler<void>>>;
21
+ protected event: FlagDispatcher;
22
+ protected markDirty: () => void;
23
+ constructor(owner: TOwner);
24
+ protected invoke(): void;
25
+ protected startCollecting(): void;
26
+ protected finishCollecting(): void;
27
+ protected clearDependencies(): void;
28
+ protected collect(): void;
29
+ dispose(): void;
30
+ toPromise(): Promise<this>;
31
+ }
32
+ //# sourceMappingURL=DependencyContext.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DependencyContext.d.ts","sourceRoot":"","sources":["../../src/signals/DependencyContext.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,YAAY,EAAC,MAAM,WAAW,CAAC;AAC5C,OAAO,EAAC,cAAc,EAAC,MAAM,WAAW,CAAC;AACzC,OAAO,KAAK,EAAC,UAAU,EAAC,MAAM,cAAc,CAAC;AAG7C,MAAM,WAAW,aAAa,CAAC,CAAC;IAC9B,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;IACpB,KAAK,EAAE,CAAC,CAAC;IACT,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,GAAG,CAAC;CACb;AAED,qBAAa,iBAAiB,CAAC,MAAM,GAAG,IAAI,CAC1C,YAAW,UAAU,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;IAmD7B,SAAS,CAAC,KAAK,EAAE,MAAM;IAjD1C,SAAS,CAAC,MAAM,CAAC,aAAa,8BAAqC;IACnE,SAAS,CAAC,MAAM,CAAC,eAAe,EAAE,iBAAiB,CAAC,GAAG,CAAC,EAAE,CAAM;IAChE,SAAS,CAAC,MAAM,CAAC,QAAQ,EAAE,aAAa,CAAC,GAAG,CAAC,EAAE,CAAM;WAEvC,cAAc,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,aAAa,CAAC,CAAC,GAAG,IAAI,CAAC;WAC/D,cAAc,CAAC,CAAC,EAC5B,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,EACnB,YAAY,EAAE,CAAC,GACd,aAAa,CAAC,CAAC,CAAC;WAwBL,WAAW;WAIL,eAAe;IAOnC,SAAS,CAAC,QAAQ,CAAC,SAAS,EAAE,GAAG,CAAC;IAElC,SAAS,CAAC,YAAY,kEAAiC;IACvD,SAAS,CAAC,KAAK,iBAAwB;IACvC,SAAS,CAAC,SAAS,aAA4B;gBAElB,KAAK,EAAE,MAAM;IAY1C,SAAS,CAAC,MAAM;IAIhB,SAAS,CAAC,eAAe;IAazB,SAAS,CAAC,gBAAgB;IAO1B,SAAS,CAAC,iBAAiB;IAK3B,SAAS,CAAC,OAAO;IAQV,OAAO;IAMD,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC;CAOxC"}
@@ -0,0 +1,87 @@
1
+ import { FlagDispatcher } from '../events';
2
+ import { DetailedError } from '../utils';
3
+ export class DependencyContext {
4
+ static collectPromise(promise, initialValue = null) {
5
+ const handle = {
6
+ promise,
7
+ value: initialValue,
8
+ stack: new Error().stack,
9
+ };
10
+ const context = this.collectionStack.at(-1);
11
+ if (context) {
12
+ handle.owner = context.owner;
13
+ }
14
+ promise.then(value => {
15
+ handle.value = value;
16
+ context?.markDirty();
17
+ });
18
+ this.promises.push(handle);
19
+ return handle;
20
+ }
21
+ static hasPromises() {
22
+ return this.promises.length > 0;
23
+ }
24
+ static async consumePromises() {
25
+ const promises = [...this.promises];
26
+ await Promise.all(promises.map(handle => handle.promise));
27
+ this.promises = this.promises.filter(v => !promises.includes(v));
28
+ return promises;
29
+ }
30
+ constructor(owner) {
31
+ this.owner = owner;
32
+ this.dependencies = new Set();
33
+ this.event = new FlagDispatcher();
34
+ this.markDirty = () => this.event.raise();
35
+ this.invokable = this.invoke.bind(this);
36
+ Object.defineProperty(this.invokable, 'context', {
37
+ value: this,
38
+ });
39
+ Object.defineProperty(this.invokable, 'toPromise', {
40
+ value: this.toPromise.bind(this),
41
+ });
42
+ }
43
+ invoke() {
44
+ // do nothing
45
+ }
46
+ startCollecting() {
47
+ if (DependencyContext.collectionSet.has(this)) {
48
+ throw new DetailedError('A circular dependency occurred between signals.', `This can happen when signals reference each other in a loop.
49
+ Try using the attached stack trace to locate said loop.`);
50
+ }
51
+ DependencyContext.collectionSet.add(this);
52
+ DependencyContext.collectionStack.push(this);
53
+ }
54
+ finishCollecting() {
55
+ DependencyContext.collectionSet.delete(this);
56
+ if (DependencyContext.collectionStack.pop() !== this) {
57
+ throw new Error('collectStart/collectEnd was called out of order.');
58
+ }
59
+ }
60
+ clearDependencies() {
61
+ this.dependencies.forEach(dep => dep.unsubscribe(this.markDirty));
62
+ this.dependencies.clear();
63
+ }
64
+ collect() {
65
+ const signal = DependencyContext.collectionStack.at(-1);
66
+ if (signal) {
67
+ signal.dependencies.add(this.event.subscribable);
68
+ this.event.subscribe(signal.markDirty);
69
+ }
70
+ }
71
+ dispose() {
72
+ this.clearDependencies();
73
+ this.event.clear();
74
+ this.owner = null;
75
+ }
76
+ async toPromise() {
77
+ do {
78
+ await DependencyContext.consumePromises();
79
+ this.invokable();
80
+ } while (DependencyContext.hasPromises());
81
+ return this.invokable;
82
+ }
83
+ }
84
+ DependencyContext.collectionSet = new Set();
85
+ DependencyContext.collectionStack = [];
86
+ DependencyContext.promises = [];
87
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRGVwZW5kZW5jeUNvbnRleHQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc2lnbmFscy9EZXBlbmRlbmN5Q29udGV4dC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0sV0FBVyxDQUFDO0FBRXpDLE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSxVQUFVLENBQUM7QUFTdkMsTUFBTSxPQUFPLGlCQUFpQjtJQVlyQixNQUFNLENBQUMsY0FBYyxDQUMxQixPQUFtQixFQUNuQixlQUF5QixJQUFJO1FBRTdCLE1BQU0sTUFBTSxHQUE0QjtZQUN0QyxPQUFPO1lBQ1AsS0FBSyxFQUFFLFlBQVk7WUFDbkIsS0FBSyxFQUFFLElBQUksS0FBSyxFQUFFLENBQUMsS0FBSztTQUN6QixDQUFDO1FBRUYsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM1QyxJQUFJLE9BQU8sRUFBRSxDQUFDO1lBQ1osTUFBTSxDQUFDLEtBQUssR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDO1FBQy9CLENBQUM7UUFDRCxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ25CLE1BQU0sQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1lBQ3JCLE9BQU8sRUFBRSxTQUFTLEVBQUUsQ0FBQztRQUN2QixDQUFDLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzNCLE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7SUFFTSxNQUFNLENBQUMsV0FBVztRQUN2QixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztJQUNsQyxDQUFDO0lBRU0sTUFBTSxDQUFDLEtBQUssQ0FBQyxlQUFlO1FBQ2pDLE1BQU0sUUFBUSxHQUFHLENBQUMsR0FBRyxJ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