@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.
- package/LICENSE +21 -0
- package/lib/app/Logger.d.ts +105 -0
- package/lib/app/Logger.d.ts.map +1 -0
- package/lib/app/Logger.js +77 -0
- package/lib/app/PlaybackManager.d.ts +55 -0
- package/lib/app/PlaybackManager.d.ts.map +1 -0
- package/lib/app/PlaybackManager.js +179 -0
- package/lib/app/PlaybackStatus.d.ts +30 -0
- package/lib/app/PlaybackStatus.d.ts.map +1 -0
- package/lib/app/PlaybackStatus.js +46 -0
- package/lib/app/Player.d.ts +130 -0
- package/lib/app/Player.d.ts.map +1 -0
- package/lib/app/Player.js +375 -0
- package/lib/app/Project.d.ts +145 -0
- package/lib/app/Project.d.ts.map +1 -0
- package/lib/app/Project.js +10 -0
- package/lib/app/Renderer.d.ts +90 -0
- package/lib/app/Renderer.d.ts.map +1 -0
- package/lib/app/Renderer.js +318 -0
- package/lib/app/SharedWebGLContext.d.ts +24 -0
- package/lib/app/SharedWebGLContext.d.ts.map +1 -0
- package/lib/app/SharedWebGLContext.js +200 -0
- package/lib/app/Stage.d.ts +30 -0
- package/lib/app/Stage.d.ts.map +1 -0
- package/lib/app/Stage.js +75 -0
- package/lib/app/TimeEstimator.d.ts +53 -0
- package/lib/app/TimeEstimator.d.ts.map +1 -0
- package/lib/app/TimeEstimator.js +70 -0
- package/lib/app/index.d.ts +16 -0
- package/lib/app/index.d.ts.map +1 -0
- package/lib/app/index.js +16 -0
- package/lib/app/makeProject.d.ts +15 -0
- package/lib/app/makeProject.d.ts.map +1 -0
- package/lib/app/makeProject.js +72 -0
- package/lib/app/project-settings.d.ts +8 -0
- package/lib/app/project-settings.d.ts.map +1 -0
- package/lib/app/project-settings.js +13 -0
- package/lib/decorators/decorate.d.ts +2 -0
- package/lib/decorators/decorate.d.ts.map +1 -0
- package/lib/decorators/decorate.js +10 -0
- package/lib/decorators/deprecated.d.ts +5 -0
- package/lib/decorators/deprecated.d.ts.map +1 -0
- package/lib/decorators/deprecated.js +23 -0
- package/lib/decorators/index.d.ts +9 -0
- package/lib/decorators/index.d.ts.map +1 -0
- package/lib/decorators/index.js +9 -0
- package/lib/decorators/lazy.d.ts +14 -0
- package/lib/decorators/lazy.d.ts.map +1 -0
- package/lib/decorators/lazy.js +27 -0
- package/lib/decorators/threadable.d.ts +2 -0
- package/lib/decorators/threadable.d.ts.map +1 -0
- package/lib/decorators/threadable.js +7 -0
- package/lib/events/AsyncEventDispatcher.d.ts +45 -0
- package/lib/events/AsyncEventDispatcher.d.ts.map +1 -0
- package/lib/events/AsyncEventDispatcher.js +33 -0
- package/lib/events/EventDispatcher.d.ts +38 -0
- package/lib/events/EventDispatcher.d.ts.map +1 -0
- package/lib/events/EventDispatcher.js +29 -0
- package/lib/events/EventDispatcherBase.d.ts +55 -0
- package/lib/events/EventDispatcherBase.d.ts.map +1 -0
- package/lib/events/EventDispatcherBase.js +68 -0
- package/lib/events/FlagDispatcher.d.ts +54 -0
- package/lib/events/FlagDispatcher.d.ts.map +1 -0
- package/lib/events/FlagDispatcher.js +63 -0
- package/lib/events/ValueDispatcher.d.ts +81 -0
- package/lib/events/ValueDispatcher.d.ts.map +1 -0
- package/lib/events/ValueDispatcher.js +97 -0
- package/lib/events/index.d.ts +11 -0
- package/lib/events/index.d.ts.map +1 -0
- package/lib/events/index.js +11 -0
- package/lib/exporter/Exporter.d.ts +101 -0
- package/lib/exporter/Exporter.d.ts.map +1 -0
- package/lib/exporter/Exporter.js +2 -0
- package/lib/exporter/FFmpegExporter.d.ts +50 -0
- package/lib/exporter/FFmpegExporter.d.ts.map +1 -0
- package/lib/exporter/FFmpegExporter.js +140 -0
- package/lib/exporter/ImageExporter.d.ts +34 -0
- package/lib/exporter/ImageExporter.d.ts.map +1 -0
- package/lib/exporter/ImageExporter.js +80 -0
- package/lib/exporter/WasmExporter.d.ts +19 -0
- package/lib/exporter/WasmExporter.d.ts.map +1 -0
- package/lib/exporter/WasmExporter.js +78 -0
- package/lib/exporter/download-videos.d.ts +3 -0
- package/lib/exporter/download-videos.d.ts.map +1 -0
- package/lib/exporter/download-videos.js +45 -0
- package/lib/exporter/index.d.ts +5 -0
- package/lib/exporter/index.d.ts.map +1 -0
- package/lib/exporter/index.js +5 -0
- package/lib/flow/all.d.ts +18 -0
- package/lib/flow/all.d.ts.map +1 -0
- package/lib/flow/all.js +25 -0
- package/lib/flow/any.d.ts +18 -0
- package/lib/flow/any.d.ts.map +1 -0
- package/lib/flow/any.js +25 -0
- package/lib/flow/chain.d.ts +36 -0
- package/lib/flow/chain.d.ts.map +1 -0
- package/lib/flow/chain.js +46 -0
- package/lib/flow/delay.d.ts +29 -0
- package/lib/flow/delay.d.ts.map +1 -0
- package/lib/flow/delay.js +39 -0
- package/lib/flow/every.d.ts +41 -0
- package/lib/flow/every.d.ts.map +1 -0
- package/lib/flow/every.js +61 -0
- package/lib/flow/index.d.ts +17 -0
- package/lib/flow/index.d.ts.map +1 -0
- package/lib/flow/index.js +17 -0
- package/lib/flow/join.d.ts +35 -0
- package/lib/flow/join.d.ts.map +1 -0
- package/lib/flow/join.js +33 -0
- package/lib/flow/loop.d.ts +58 -0
- package/lib/flow/loop.d.ts.map +1 -0
- package/lib/flow/loop.js +51 -0
- package/lib/flow/loopFor.d.ts +25 -0
- package/lib/flow/loopFor.d.ts.map +1 -0
- package/lib/flow/loopFor.js +42 -0
- package/lib/flow/names.d.ts +3 -0
- package/lib/flow/names.d.ts.map +1 -0
- package/lib/flow/names.js +11 -0
- package/lib/flow/run.d.ts +45 -0
- package/lib/flow/run.d.ts.map +1 -0
- package/lib/flow/run.js +14 -0
- package/lib/flow/scheduling.d.ts +18 -0
- package/lib/flow/scheduling.d.ts.map +1 -0
- package/lib/flow/scheduling.js +33 -0
- package/lib/flow/sequence.d.ts +22 -0
- package/lib/flow/sequence.d.ts.map +1 -0
- package/lib/flow/sequence.js +31 -0
- package/lib/index.d.ts +16 -0
- package/lib/index.d.ts.map +1 -0
- package/lib/index.js +16 -0
- package/lib/media/index.d.ts +7 -0
- package/lib/media/index.d.ts.map +1 -0
- package/lib/media/index.js +7 -0
- package/lib/media/loadImage.d.ts +8 -0
- package/lib/media/loadImage.d.ts.map +1 -0
- package/lib/media/loadImage.js +29 -0
- package/lib/plugin/DefaultPlugin.d.ts +10 -0
- package/lib/plugin/DefaultPlugin.d.ts.map +1 -0
- package/lib/plugin/DefaultPlugin.js +17 -0
- package/lib/plugin/Plugin.d.ts +53 -0
- package/lib/plugin/Plugin.d.ts.map +1 -0
- package/lib/plugin/Plugin.js +2 -0
- package/lib/plugin/index.d.ts +3 -0
- package/lib/plugin/index.d.ts.map +1 -0
- package/lib/plugin/index.js +3 -0
- package/lib/plugin/makePlugin.d.ts +15 -0
- package/lib/plugin/makePlugin.d.ts.map +1 -0
- package/lib/plugin/makePlugin.js +16 -0
- package/lib/scenes/GeneratorScene.d.ts +95 -0
- package/lib/scenes/GeneratorScene.d.ts.map +1 -0
- package/lib/scenes/GeneratorScene.js +273 -0
- package/lib/scenes/Inspectable.d.ts +71 -0
- package/lib/scenes/Inspectable.d.ts.map +1 -0
- package/lib/scenes/Inspectable.js +4 -0
- package/lib/scenes/LifecycleEvents.d.ts +18 -0
- package/lib/scenes/LifecycleEvents.d.ts.map +1 -0
- package/lib/scenes/LifecycleEvents.js +45 -0
- package/lib/scenes/Random.d.ts +66 -0
- package/lib/scenes/Random.d.ts.map +1 -0
- package/lib/scenes/Random.js +101 -0
- package/lib/scenes/Scene.d.ts +298 -0
- package/lib/scenes/Scene.d.ts.map +1 -0
- package/lib/scenes/Scene.js +25 -0
- package/lib/scenes/SceneState.d.ts +34 -0
- package/lib/scenes/SceneState.d.ts.map +1 -0
- package/lib/scenes/SceneState.js +35 -0
- package/lib/scenes/Shaders.d.ts +63 -0
- package/lib/scenes/Shaders.d.ts.map +1 -0
- package/lib/scenes/Shaders.js +158 -0
- package/lib/scenes/Slides.d.ts +33 -0
- package/lib/scenes/Slides.d.ts.map +1 -0
- package/lib/scenes/Slides.js +115 -0
- package/lib/scenes/Threadable.d.ts +19 -0
- package/lib/scenes/Threadable.d.ts.map +1 -0
- package/lib/scenes/Threadable.js +4 -0
- package/lib/scenes/Variables.d.ts +24 -0
- package/lib/scenes/Variables.d.ts.map +1 -0
- package/lib/scenes/Variables.js +39 -0
- package/lib/scenes/index.d.ts +16 -0
- package/lib/scenes/index.d.ts.map +1 -0
- package/lib/scenes/index.js +16 -0
- package/lib/signals/CompoundSignalContext.d.ts +21 -0
- package/lib/signals/CompoundSignalContext.d.ts.map +1 -0
- package/lib/signals/CompoundSignalContext.js +73 -0
- package/lib/signals/ComputedContext.d.ts +14 -0
- package/lib/signals/ComputedContext.d.ts.map +1 -0
- package/lib/signals/ComputedContext.js +36 -0
- package/lib/signals/DependencyContext.d.ts +32 -0
- package/lib/signals/DependencyContext.d.ts.map +1 -0
- package/lib/signals/DependencyContext.js +87 -0
- package/lib/signals/SignalContext.d.ts +120 -0
- package/lib/signals/SignalContext.d.ts.map +1 -0
- package/lib/signals/SignalContext.js +245 -0
- package/lib/signals/createComputed.d.ts +3 -0
- package/lib/signals/createComputed.d.ts.map +1 -0
- package/lib/signals/createComputed.js +5 -0
- package/lib/signals/createComputedAsync.d.ts +4 -0
- package/lib/signals/createComputedAsync.d.ts.map +1 -0
- package/lib/signals/createComputedAsync.js +15 -0
- package/lib/signals/createSignal.d.ts +5 -0
- package/lib/signals/createSignal.d.ts.map +1 -0
- package/lib/signals/createSignal.js +6 -0
- package/lib/signals/index.d.ts +16 -0
- package/lib/signals/index.d.ts.map +1 -0
- package/lib/signals/index.js +16 -0
- package/lib/signals/symbols.d.ts +2 -0
- package/lib/signals/symbols.d.ts.map +1 -0
- package/lib/signals/symbols.js +2 -0
- package/lib/signals/types.d.ts +51 -0
- package/lib/signals/types.d.ts.map +1 -0
- package/lib/signals/types.js +2 -0
- package/lib/signals/utils.d.ts +5 -0
- package/lib/signals/utils.d.ts.map +1 -0
- package/lib/signals/utils.js +10 -0
- package/lib/threading/Thread.d.ts +77 -0
- package/lib/threading/Thread.d.ts.map +1 -0
- package/lib/threading/Thread.js +169 -0
- package/lib/threading/ThreadGenerator.d.ts +39 -0
- package/lib/threading/ThreadGenerator.d.ts.map +1 -0
- package/lib/threading/ThreadGenerator.js +17 -0
- package/lib/threading/cancel.d.ts +17 -0
- package/lib/threading/cancel.d.ts.map +1 -0
- package/lib/threading/cancel.js +26 -0
- package/lib/threading/index.d.ts +11 -0
- package/lib/threading/index.d.ts.map +1 -0
- package/lib/threading/index.js +11 -0
- package/lib/threading/spawn.d.ts +28 -0
- package/lib/threading/spawn.d.ts.map +1 -0
- package/lib/threading/spawn.js +30 -0
- package/lib/threading/threads.d.ts +46 -0
- package/lib/threading/threads.d.ts.map +1 -0
- package/lib/threading/threads.js +89 -0
- package/lib/transitions/fadeTransition.d.ts +8 -0
- package/lib/transitions/fadeTransition.d.ts.map +1 -0
- package/lib/transitions/fadeTransition.js +16 -0
- package/lib/transitions/index.d.ts +11 -0
- package/lib/transitions/index.d.ts.map +1 -0
- package/lib/transitions/index.js +11 -0
- package/lib/transitions/slideTransition.d.ts +18 -0
- package/lib/transitions/slideTransition.d.ts.map +1 -0
- package/lib/transitions/slideTransition.js +14 -0
- package/lib/transitions/useTransition.d.ts +10 -0
- package/lib/transitions/useTransition.d.ts.map +1 -0
- package/lib/transitions/useTransition.js +27 -0
- package/lib/transitions/zoomInTransition.d.ts +10 -0
- package/lib/transitions/zoomInTransition.d.ts.map +1 -0
- package/lib/transitions/zoomInTransition.js +33 -0
- package/lib/transitions/zoomOutTransition.d.ts +10 -0
- package/lib/transitions/zoomOutTransition.d.ts.map +1 -0
- package/lib/transitions/zoomOutTransition.js +33 -0
- package/lib/tsconfig.build.tsbuildinfo +1 -0
- package/lib/tweening/helpers.d.ts +5 -0
- package/lib/tweening/helpers.d.ts.map +1 -0
- package/lib/tweening/helpers.js +16 -0
- package/lib/tweening/index.d.ts +11 -0
- package/lib/tweening/index.d.ts.map +1 -0
- package/lib/tweening/index.js +11 -0
- package/lib/tweening/interpolationFunctions.d.ts +38 -0
- package/lib/tweening/interpolationFunctions.d.ts.map +1 -0
- package/lib/tweening/interpolationFunctions.js +107 -0
- package/lib/tweening/spring.d.ts +20 -0
- package/lib/tweening/spring.d.ts.map +1 -0
- package/lib/tweening/spring.js +103 -0
- package/lib/tweening/timingFunctions.d.ts +46 -0
- package/lib/tweening/timingFunctions.d.ts.map +1 -0
- package/lib/tweening/timingFunctions.js +233 -0
- package/lib/tweening/tween.d.ts +3 -0
- package/lib/tweening/tween.d.ts.map +1 -0
- package/lib/tweening/tween.js +21 -0
- package/lib/types/BBox.d.ts +73 -0
- package/lib/types/BBox.d.ts.map +1 -0
- package/lib/types/BBox.js +249 -0
- package/lib/types/Canvas.d.ts +3 -0
- package/lib/types/Canvas.d.ts.map +1 -0
- package/lib/types/Canvas.js +2 -0
- package/lib/types/Color.d.ts +65 -0
- package/lib/types/Color.d.ts.map +1 -0
- package/lib/types/Color.js +185 -0
- package/lib/types/Matrix.d.ts +3 -0
- package/lib/types/Matrix.d.ts.map +1 -0
- package/lib/types/Matrix.js +10 -0
- package/lib/types/Matrix2D.d.ts +363 -0
- package/lib/types/Matrix2D.d.ts.map +1 -0
- package/lib/types/Matrix2D.js +554 -0
- package/lib/types/Origin.d.ts +17 -0
- package/lib/types/Origin.d.ts.map +1 -0
- package/lib/types/Origin.js +53 -0
- package/lib/types/Spacing.d.ts +36 -0
- package/lib/types/Spacing.d.ts.map +1 -0
- package/lib/types/Spacing.js +70 -0
- package/lib/types/Type.d.ts +9 -0
- package/lib/types/Type.d.ts.map +1 -0
- package/lib/types/Type.js +5 -0
- package/lib/types/Vector.d.ts +203 -0
- package/lib/types/Vector.d.ts.map +1 -0
- package/lib/types/Vector.js +355 -0
- package/lib/types/alignment-enums.d.ts +22 -0
- package/lib/types/alignment-enums.d.ts.map +1 -0
- package/lib/types/alignment-enums.js +25 -0
- package/lib/types/index.d.ts +17 -0
- package/lib/types/index.d.ts.map +1 -0
- package/lib/types/index.js +17 -0
- package/lib/types/vector-transformations.d.ts +20 -0
- package/lib/types/vector-transformations.d.ts.map +1 -0
- package/lib/types/vector-transformations.js +31 -0
- package/lib/utils/DetailedError.d.ts +24 -0
- package/lib/utils/DetailedError.d.ts.map +1 -0
- package/lib/utils/DetailedError.js +16 -0
- package/lib/utils/ExperimentalError.d.ts +10 -0
- package/lib/utils/ExperimentalError.d.ts.map +1 -0
- package/lib/utils/ExperimentalError.js +32 -0
- package/lib/utils/Semaphore.d.ts +12 -0
- package/lib/utils/Semaphore.d.ts.map +1 -0
- package/lib/utils/Semaphore.js +25 -0
- package/lib/utils/beginSlide.d.ts +3 -0
- package/lib/utils/beginSlide.d.ts.map +1 -0
- package/lib/utils/beginSlide.js +12 -0
- package/lib/utils/capitalize.d.ts +2 -0
- package/lib/utils/capitalize.d.ts.map +1 -0
- package/lib/utils/capitalize.js +4 -0
- package/lib/utils/createRef.d.ts +15 -0
- package/lib/utils/createRef.d.ts.map +1 -0
- package/lib/utils/createRef.js +21 -0
- package/lib/utils/createRefArray.d.ts +27 -0
- package/lib/utils/createRefArray.d.ts.map +1 -0
- package/lib/utils/createRefArray.js +49 -0
- package/lib/utils/createRefMap.d.ts +50 -0
- package/lib/utils/createRefMap.d.ts.map +1 -0
- package/lib/utils/createRefMap.js +77 -0
- package/lib/utils/debug.d.ts +24 -0
- package/lib/utils/debug.d.ts.map +1 -0
- package/lib/utils/debug.js +47 -0
- package/lib/utils/deprecate.d.ts +9 -0
- package/lib/utils/deprecate.d.ts.map +1 -0
- package/lib/utils/deprecate.js +15 -0
- package/lib/utils/errorToLog.d.ts +3 -0
- package/lib/utils/errorToLog.d.ts.map +1 -0
- package/lib/utils/errorToLog.js +8 -0
- package/lib/utils/experimentalLog.d.ts +3 -0
- package/lib/utils/experimentalLog.d.ts.map +1 -0
- package/lib/utils/experimentalLog.js +10 -0
- package/lib/utils/getContext.d.ts +2 -0
- package/lib/utils/getContext.d.ts.map +1 -0
- package/lib/utils/getContext.js +8 -0
- package/lib/utils/index.d.ts +26 -0
- package/lib/utils/index.d.ts.map +1 -0
- package/lib/utils/index.js +26 -0
- package/lib/utils/math.d.ts +15 -0
- package/lib/utils/math.d.ts.map +1 -0
- package/lib/utils/math.js +15 -0
- package/lib/utils/range.d.ts +40 -0
- package/lib/utils/range.d.ts.map +1 -0
- package/lib/utils/range.js +18 -0
- package/lib/utils/useContext.d.ts +13 -0
- package/lib/utils/useContext.d.ts.map +1 -0
- package/lib/utils/useContext.js +18 -0
- package/lib/utils/usePlayback.d.ts +8 -0
- package/lib/utils/usePlayback.d.ts.map +1 -0
- package/lib/utils/usePlayback.js +20 -0
- package/lib/utils/useScene.d.ts +17 -0
- package/lib/utils/useScene.d.ts.map +1 -0
- package/lib/utils/useScene.js +33 -0
- package/lib/utils/useThread.d.ts +8 -0
- package/lib/utils/useThread.d.ts.map +1 -0
- package/lib/utils/useThread.js +24 -0
- package/lib/utils/useTime.d.ts +19 -0
- package/lib/utils/useTime.d.ts.map +1 -0
- package/lib/utils/useTime.js +22 -0
- package/package.json +36 -0
- package/project.d.ts +24 -0
- package/shaders/common.glsl +15 -0
- package/shaders/fragment.glsl +8 -0
- 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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
|