@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,73 @@
|
|
|
1
|
+
import type { CompoundSignal, SignalValue } from '../signals';
|
|
2
|
+
import type { InterpolationFunction } from '../tweening';
|
|
3
|
+
import type { PossibleMatrix2D } from './Matrix2D';
|
|
4
|
+
import type { PossibleSpacing } from './Spacing';
|
|
5
|
+
import type { Type, WebGLConvertible } from './Type';
|
|
6
|
+
import { Vector2 } from './Vector';
|
|
7
|
+
export type SerializedBBox = {
|
|
8
|
+
x: number;
|
|
9
|
+
y: number;
|
|
10
|
+
width: number;
|
|
11
|
+
height: number;
|
|
12
|
+
};
|
|
13
|
+
export type PossibleBBox = SerializedBBox | [number, number, number, number] | Vector2 | undefined;
|
|
14
|
+
export type RectSignal<T> = CompoundSignal<PossibleBBox, BBox, 'x' | 'y' | 'width' | 'height', T>;
|
|
15
|
+
export declare class BBox implements Type, WebGLConvertible {
|
|
16
|
+
static readonly symbol: unique symbol;
|
|
17
|
+
x: number;
|
|
18
|
+
y: number;
|
|
19
|
+
width: number;
|
|
20
|
+
height: number;
|
|
21
|
+
static createSignal(initial?: SignalValue<PossibleBBox>, interpolation?: InterpolationFunction<BBox>): RectSignal<void>;
|
|
22
|
+
static lerp(from: BBox, to: BBox, value: number | Vector2 | BBox): BBox;
|
|
23
|
+
static arcLerp(from: BBox, to: BBox, value: number, reverse?: boolean, ratio?: number): BBox;
|
|
24
|
+
static fromSizeCentered(size: Vector2): BBox;
|
|
25
|
+
static fromPoints(...points: Vector2[]): BBox;
|
|
26
|
+
static fromBBoxes(...boxes: BBox[]): BBox;
|
|
27
|
+
lerp(to: BBox, value: number | Vector2 | BBox): BBox;
|
|
28
|
+
get position(): Vector2;
|
|
29
|
+
set position(value: Vector2);
|
|
30
|
+
get size(): Vector2;
|
|
31
|
+
get center(): Vector2;
|
|
32
|
+
get left(): number;
|
|
33
|
+
set left(value: number);
|
|
34
|
+
get right(): number;
|
|
35
|
+
set right(value: number);
|
|
36
|
+
get top(): number;
|
|
37
|
+
set top(value: number);
|
|
38
|
+
get bottom(): number;
|
|
39
|
+
set bottom(value: number);
|
|
40
|
+
get topLeft(): Vector2;
|
|
41
|
+
get topRight(): Vector2;
|
|
42
|
+
get bottomLeft(): Vector2;
|
|
43
|
+
get bottomRight(): Vector2;
|
|
44
|
+
get corners(): [Vector2, Vector2, Vector2, Vector2];
|
|
45
|
+
get pixelPerfect(): BBox;
|
|
46
|
+
constructor();
|
|
47
|
+
constructor(from: PossibleBBox);
|
|
48
|
+
constructor(position: Vector2, size: Vector2);
|
|
49
|
+
constructor(x: number, y?: number, width?: number, height?: number);
|
|
50
|
+
transform(matrix: PossibleMatrix2D): BBox;
|
|
51
|
+
transformCorners(matrix: PossibleMatrix2D): Vector2[];
|
|
52
|
+
/**
|
|
53
|
+
* Expand the bounding box to accommodate the given spacing.
|
|
54
|
+
*
|
|
55
|
+
* @param value - The value to expand the bounding box by.
|
|
56
|
+
*/
|
|
57
|
+
expand(value: PossibleSpacing): BBox;
|
|
58
|
+
/**
|
|
59
|
+
* {@inheritDoc expand}
|
|
60
|
+
*
|
|
61
|
+
* @deprecated Use {@link expand} instead.
|
|
62
|
+
*/
|
|
63
|
+
addSpacing(value: PossibleSpacing): BBox;
|
|
64
|
+
includes(point: Vector2): boolean;
|
|
65
|
+
intersects(other: BBox): boolean;
|
|
66
|
+
intersection(other: BBox): BBox;
|
|
67
|
+
union(other: BBox): BBox;
|
|
68
|
+
toSymbol(): symbol;
|
|
69
|
+
toString(): string;
|
|
70
|
+
toUniform(gl: WebGL2RenderingContext, location: WebGLUniformLocation): void;
|
|
71
|
+
serialize(): SerializedBBox;
|
|
72
|
+
}
|
|
73
|
+
//# sourceMappingURL=BBox.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BBox.d.ts","sourceRoot":"","sources":["../../src/types/BBox.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,249 @@
|
|
|
1
|
+
import { CompoundSignalContext } from '../signals';
|
|
2
|
+
import { arcLerp, map } from '../tweening';
|
|
3
|
+
import { Spacing } from './Spacing';
|
|
4
|
+
import { Vector2 } from './Vector';
|
|
5
|
+
import { transformVector, transformVectorAsPoint, } from './vector-transformations';
|
|
6
|
+
export class BBox {
|
|
7
|
+
static createSignal(initial, interpolation = BBox.lerp) {
|
|
8
|
+
return new CompoundSignalContext(['x', 'y', 'width', 'height'], (value) => new BBox(value), initial, interpolation).toSignal();
|
|
9
|
+
}
|
|
10
|
+
static lerp(from, to, value) {
|
|
11
|
+
let valueX;
|
|
12
|
+
let valueY;
|
|
13
|
+
let valueWidth;
|
|
14
|
+
let valueHeight;
|
|
15
|
+
if (typeof value === 'number') {
|
|
16
|
+
valueX = valueY = valueWidth = valueHeight = value;
|
|
17
|
+
}
|
|
18
|
+
else if (value instanceof Vector2) {
|
|
19
|
+
valueX = valueWidth = value.x;
|
|
20
|
+
valueY = valueHeight = value.y;
|
|
21
|
+
}
|
|
22
|
+
else {
|
|
23
|
+
valueX = value.x;
|
|
24
|
+
valueY = value.y;
|
|
25
|
+
valueWidth = value.width;
|
|
26
|
+
valueHeight = value.height;
|
|
27
|
+
}
|
|
28
|
+
return new BBox(map(from.x, to.x, valueX), map(from.y, to.y, valueY), map(from.width, to.width, valueWidth), map(from.height, to.height, valueHeight));
|
|
29
|
+
}
|
|
30
|
+
static arcLerp(from, to, value, reverse = false, ratio) {
|
|
31
|
+
ratio ?? (ratio = (from.position.sub(to.position).ctg + from.size.sub(to.size).ctg) / 2);
|
|
32
|
+
return BBox.lerp(from, to, new Vector2(arcLerp(value, reverse, ratio)));
|
|
33
|
+
}
|
|
34
|
+
static fromSizeCentered(size) {
|
|
35
|
+
return new BBox(-size.width / 2, -size.height / 2, size.width, size.height);
|
|
36
|
+
}
|
|
37
|
+
static fromPoints(...points) {
|
|
38
|
+
let minX = Infinity;
|
|
39
|
+
let minY = Infinity;
|
|
40
|
+
let maxX = -Infinity;
|
|
41
|
+
let maxY = -Infinity;
|
|
42
|
+
for (const point of points) {
|
|
43
|
+
if (point.x > maxX) {
|
|
44
|
+
maxX = point.x;
|
|
45
|
+
}
|
|
46
|
+
if (point.x < minX) {
|
|
47
|
+
minX = point.x;
|
|
48
|
+
}
|
|
49
|
+
if (point.y > maxY) {
|
|
50
|
+
maxY = point.y;
|
|
51
|
+
}
|
|
52
|
+
if (point.y < minY) {
|
|
53
|
+
minY = point.y;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
return new BBox(minX, minY, maxX - minX, maxY - minY);
|
|
57
|
+
}
|
|
58
|
+
static fromBBoxes(...boxes) {
|
|
59
|
+
let minX = Infinity;
|
|
60
|
+
let minY = Infinity;
|
|
61
|
+
let maxX = -Infinity;
|
|
62
|
+
let maxY = -Infinity;
|
|
63
|
+
for (const box of boxes) {
|
|
64
|
+
const right = box.x + box.width;
|
|
65
|
+
if (right > maxX) {
|
|
66
|
+
maxX = right;
|
|
67
|
+
}
|
|
68
|
+
if (box.x < minX) {
|
|
69
|
+
minX = box.x;
|
|
70
|
+
}
|
|
71
|
+
const bottom = box.y + box.height;
|
|
72
|
+
if (bottom > maxY) {
|
|
73
|
+
maxY = bottom;
|
|
74
|
+
}
|
|
75
|
+
if (box.y < minY) {
|
|
76
|
+
minY = box.y;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
return new BBox(minX, minY, maxX - minX, maxY - minY);
|
|
80
|
+
}
|
|
81
|
+
lerp(to, value) {
|
|
82
|
+
return BBox.lerp(this, to, value);
|
|
83
|
+
}
|
|
84
|
+
get position() {
|
|
85
|
+
return new Vector2(this.x, this.y);
|
|
86
|
+
}
|
|
87
|
+
set position(value) {
|
|
88
|
+
this.x = value.x;
|
|
89
|
+
this.y = value.y;
|
|
90
|
+
}
|
|
91
|
+
get size() {
|
|
92
|
+
return new Vector2(this.width, this.height);
|
|
93
|
+
}
|
|
94
|
+
get center() {
|
|
95
|
+
return new Vector2(this.x + this.width / 2, this.y + this.height / 2);
|
|
96
|
+
}
|
|
97
|
+
get left() {
|
|
98
|
+
return this.x;
|
|
99
|
+
}
|
|
100
|
+
set left(value) {
|
|
101
|
+
this.width += this.x - value;
|
|
102
|
+
this.x = value;
|
|
103
|
+
}
|
|
104
|
+
get right() {
|
|
105
|
+
return this.x + this.width;
|
|
106
|
+
}
|
|
107
|
+
set right(value) {
|
|
108
|
+
this.width = value - this.x;
|
|
109
|
+
}
|
|
110
|
+
get top() {
|
|
111
|
+
return this.y;
|
|
112
|
+
}
|
|
113
|
+
set top(value) {
|
|
114
|
+
this.height += this.y - value;
|
|
115
|
+
this.y = value;
|
|
116
|
+
}
|
|
117
|
+
get bottom() {
|
|
118
|
+
return this.y + this.height;
|
|
119
|
+
}
|
|
120
|
+
set bottom(value) {
|
|
121
|
+
this.height = value - this.y;
|
|
122
|
+
}
|
|
123
|
+
get topLeft() {
|
|
124
|
+
return this.position;
|
|
125
|
+
}
|
|
126
|
+
get topRight() {
|
|
127
|
+
return new Vector2(this.x + this.width, this.y);
|
|
128
|
+
}
|
|
129
|
+
get bottomLeft() {
|
|
130
|
+
return new Vector2(this.x, this.y + this.height);
|
|
131
|
+
}
|
|
132
|
+
get bottomRight() {
|
|
133
|
+
return new Vector2(this.x + this.width, this.y + this.height);
|
|
134
|
+
}
|
|
135
|
+
get corners() {
|
|
136
|
+
return [this.topLeft, this.topRight, this.bottomRight, this.bottomLeft];
|
|
137
|
+
}
|
|
138
|
+
get pixelPerfect() {
|
|
139
|
+
return new BBox(Math.floor(this.x), Math.floor(this.y), Math.ceil(this.width + 1), Math.ceil(this.height + 1));
|
|
140
|
+
}
|
|
141
|
+
constructor(one, two = 0, three = 0, four = 0) {
|
|
142
|
+
this.x = 0;
|
|
143
|
+
this.y = 0;
|
|
144
|
+
this.width = 0;
|
|
145
|
+
this.height = 0;
|
|
146
|
+
if (one === undefined || one === null) {
|
|
147
|
+
return;
|
|
148
|
+
}
|
|
149
|
+
if (typeof one === 'number') {
|
|
150
|
+
this.x = one;
|
|
151
|
+
this.y = two;
|
|
152
|
+
this.width = three;
|
|
153
|
+
this.height = four;
|
|
154
|
+
return;
|
|
155
|
+
}
|
|
156
|
+
if (one instanceof Vector2) {
|
|
157
|
+
this.x = one.x;
|
|
158
|
+
this.y = one.y;
|
|
159
|
+
if (two instanceof Vector2) {
|
|
160
|
+
this.width = two.x;
|
|
161
|
+
this.height = two.y;
|
|
162
|
+
}
|
|
163
|
+
return;
|
|
164
|
+
}
|
|
165
|
+
if (Array.isArray(one)) {
|
|
166
|
+
this.x = one[0];
|
|
167
|
+
this.y = one[1];
|
|
168
|
+
this.width = one[2];
|
|
169
|
+
this.height = one[3];
|
|
170
|
+
return;
|
|
171
|
+
}
|
|
172
|
+
this.x = one.x;
|
|
173
|
+
this.y = one.y;
|
|
174
|
+
this.width = one.width;
|
|
175
|
+
this.height = one.height;
|
|
176
|
+
}
|
|
177
|
+
transform(matrix) {
|
|
178
|
+
return new BBox(transformVectorAsPoint(this.position, matrix), transformVector(this.size, matrix));
|
|
179
|
+
}
|
|
180
|
+
transformCorners(matrix) {
|
|
181
|
+
return this.corners.map(corner => transformVectorAsPoint(corner, matrix));
|
|
182
|
+
}
|
|
183
|
+
/**
|
|
184
|
+
* Expand the bounding box to accommodate the given spacing.
|
|
185
|
+
*
|
|
186
|
+
* @param value - The value to expand the bounding box by.
|
|
187
|
+
*/
|
|
188
|
+
expand(value) {
|
|
189
|
+
const spacing = new Spacing(value);
|
|
190
|
+
const result = new BBox(this);
|
|
191
|
+
result.left -= spacing.left;
|
|
192
|
+
result.top -= spacing.top;
|
|
193
|
+
result.right += spacing.right;
|
|
194
|
+
result.bottom += spacing.bottom;
|
|
195
|
+
return result;
|
|
196
|
+
}
|
|
197
|
+
/**
|
|
198
|
+
* {@inheritDoc expand}
|
|
199
|
+
*
|
|
200
|
+
* @deprecated Use {@link expand} instead.
|
|
201
|
+
*/
|
|
202
|
+
addSpacing(value) {
|
|
203
|
+
return this.expand(value);
|
|
204
|
+
}
|
|
205
|
+
includes(point) {
|
|
206
|
+
return (point.x >= this.x &&
|
|
207
|
+
point.x <= this.x + this.width &&
|
|
208
|
+
point.y >= this.y &&
|
|
209
|
+
point.y <= this.y + this.height);
|
|
210
|
+
}
|
|
211
|
+
intersects(other) {
|
|
212
|
+
return (this.left < other.right &&
|
|
213
|
+
this.right > other.left &&
|
|
214
|
+
this.top < other.bottom &&
|
|
215
|
+
this.bottom > other.top);
|
|
216
|
+
}
|
|
217
|
+
intersection(other) {
|
|
218
|
+
const bbox = new BBox();
|
|
219
|
+
if (this.intersects(other)) {
|
|
220
|
+
bbox.left = Math.max(this.left, other.left);
|
|
221
|
+
bbox.top = Math.max(this.top, other.top);
|
|
222
|
+
bbox.right = Math.min(this.right, other.right);
|
|
223
|
+
bbox.bottom = Math.min(this.bottom, other.bottom);
|
|
224
|
+
}
|
|
225
|
+
return bbox;
|
|
226
|
+
}
|
|
227
|
+
union(other) {
|
|
228
|
+
const bbox = new BBox();
|
|
229
|
+
bbox.left = Math.min(this.left, other.left);
|
|
230
|
+
bbox.top = Math.min(this.top, other.top);
|
|
231
|
+
bbox.right = Math.max(this.right, other.right);
|
|
232
|
+
bbox.bottom = Math.max(this.bottom, other.bottom);
|
|
233
|
+
return bbox;
|
|
234
|
+
}
|
|
235
|
+
toSymbol() {
|
|
236
|
+
return BBox.symbol;
|
|
237
|
+
}
|
|
238
|
+
toString() {
|
|
239
|
+
return `BBox(${this.x}, ${this.y}, ${this.width}, ${this.height})`;
|
|
240
|
+
}
|
|
241
|
+
toUniform(gl, location) {
|
|
242
|
+
gl.uniform4f(location, this.x, this.y, this.width, this.height);
|
|
243
|
+
}
|
|
244
|
+
serialize() {
|
|
245
|
+
return { x: this.x, y: this.y, width: this.width, height: this.height };
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
BBox.symbol = Symbol.for('@twick/core/types/Rect');
|
|
249
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQkJveC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90eXBlcy9CQm94LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBQyxxQkFBcUIsRUFBQyxNQUFNLFlBQVksQ0FBQztBQUVqRCxPQUFPLEVBQUMsT0FBTyxFQUFFLEdBQUcsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUd6QyxPQUFPLEVBQUMsT0FBTyxFQUFDLE1BQU0sV0FBVyxDQUFDO0FBRWxDLE9BQU8sRUFBQyxPQUFPLEVBQUMsTUFBTSxVQUFVLENBQUM7QUFDakMsT0FBTyxFQUNMLGVBQWUsRUFDZixzQkFBc0IsR0FDdkIsTUFBTSwwQkFBMEIsQ0FBQztBQXNCbEMsTUFBTSxPQUFPLElBQUk7SUFRUixNQUFNLENBQUMsWUFBWSxDQUN4QixPQUFtQyxFQUNuQyxnQkFBNkMsSUFBSSxDQUFDLElBQUk7UUFFdEQsT0FBTyxJQUFJLHFCQUFxQixDQUM5QixDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsT0FBTyxFQUFFLFFBQVEsQ0FBQyxFQUM3QixDQUFDLEtBQW1CLEVBQUUsRUFBRSxDQUFDLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUN4QyxPQUFPLEVBQ1AsYUFBYSxDQUNkLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDZixDQUFDO0lBRU0sTUFBTSxDQUFDLElBQUksQ0FDaEIsSUFBVSxFQUNWLEVBQVEsRUFDUixLQUE4QjtRQUU5QixJQUFJLE1BQU0sQ0FBQztRQUNYLElBQUksTUFBTSxDQUFDO1FBQ1gsSUFBSSxVQUFVLENBQUM7UUFDZixJQUFJLFdBQVcsQ0FBQztRQUNoQixJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsRUFBRSxDQUFDO1lBQzlCLE1BQU0sR0FBRyxNQUFNLEdBQUcsVUFBVSxHQUFHLFdBQVcsR0FBRyxLQUFLLENBQUM7UUFDckQsQ0FBQzthQUFNLElBQUksS0FBSyxZQUFZLE9BQU8sRUFBRSxDQUFDO1lBQ3BDLE1BQU0sR0FBRyxVQUFVLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQztZQUM5QixNQUFNLEdBQUcsV0FBVyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDakMsQ0FBQzthQUFNLENBQUM7WUFDTixNQUFNLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQztZQUNqQixNQUFNLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQztZQUNqQixVQUFVLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQztZQUN6QixXQUFXLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQztRQUM3QixDQUFDO1FBRUQsT0FBTyxJQUFJLElBQUksQ0FDYixHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxFQUN6QixHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxFQUN6QixHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLFVBQVUsQ0FBQyxFQUNyQyxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsTUFBTSxFQUFFLFdBQVcsQ0FBQyxDQUN6QyxDQUFDO0lBQ0osQ0FBQztJQUVNLE1BQU0sQ0FBQyxPQUFPLENBQ25CLElBQVUsRUFDVixFQUFRLEVBQ1IsS0FBYSxFQUNiLE9BQU8sR0FBRyxLQUFLLEVBQ2YsS0FBYztRQUVkLEtBQUssS0FBTCxLQUFLLEdBQ0gsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUM7UUFFeEUsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxFQUFFLEVBQUUsSUFBSSxPQUFPLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzFFLENBQUM7SUFFTSxNQUFNLENBQUMsZ0JBQWdCLENBQUMsSUFBYTtRQUMxQyxPQUFPLElBQUksSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUM5RSxDQUFDO0lBRU0sTUFBTSxDQUFDLFVBQVUsQ0FBQyxHQUFHLE1BQWlCO1FBQzNDLElBQUksSUFBSSxHQUFHLFFBQVEsQ0FBQztRQUNwQixJQUFJLElBQUksR0FBRyxRQUFRLENBQUM7UUFDcEIsSUFBSSxJQUFJLEdBQUcsQ0FBQyxRQUFRLENBQUM7UUFDckIsSUFBSSxJQUFJLEdBQUcsQ0FBQyxRQUFRLENBQUM7UUFFckIsS0FBSyxNQUFNLEtBQUssSUFBSSxNQUFNLEVBQUUsQ0FBQztZQUMzQixJQUFJLEtBQUssQ0FBQyxDQUFDLEdBQUcsSUFBSSxFQUFFLENBQUM7Z0JBQ25CLElBQUksR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDO1lBQ2pCLENBQUM7WUFDRCxJQUFJLEtBQUssQ0FBQyxDQUFDLEdBQUcsSUFBSSxFQUFFLENBQUM7Z0JBQ25CLElBQUksR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDO1lBQ2pCLENBQUM7WUFDRCxJQUFJLEtBQUssQ0FBQyxDQUFDLEdBQUcsSUFBSSxFQUFFLENBQUM7Z0JBQ25CLElBQUksR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDO1lBQ2pCLENBQUM7WUFDRCxJQUFJLEtBQUssQ0FBQyxDQUFDLEdBQUcsSUFBSSxFQUFFLENBQUM7Z0JBQ25CLElBQUksR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDO1lBQ2pCLENBQUM7UUFDSCxDQUFDO1FBRUQsT0FBTyxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksR0FBRyxJQUFJLEVBQUUsSUFBSSxHQUFHLElBQUks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
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Canvas.d.ts","sourceRoot":"","sources":["../../src/types/Canvas.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,gBAAgB,GAAG,MAAM,GAAG,YAAY,CAAC;AACrD,MAAM,MAAM,oBAAoB,GAAG,WAAW,GAAG,YAAY,GAAG,YAAY,CAAC"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import type { Signal, SignalValue } from '../signals';
|
|
2
|
+
import type { InterpolationFunction } from '../tweening';
|
|
3
|
+
import type { Type, WebGLConvertible } from './Type';
|
|
4
|
+
export type SerializedColor = string;
|
|
5
|
+
export interface ColorObject {
|
|
6
|
+
r: number;
|
|
7
|
+
g: number;
|
|
8
|
+
b: number;
|
|
9
|
+
a: number;
|
|
10
|
+
}
|
|
11
|
+
export type PossibleColor = SerializedColor | number | Color | ColorObject;
|
|
12
|
+
type CuloriInterpolatorMode = 'a98' | 'cubehelix' | 'dlab' | 'dlch' | 'hsi' | 'hsl' | 'hsv' | 'hwb' | 'jab' | 'jch' | 'lab' | 'lab65' | 'lch' | 'lch65' | 'lchuv' | 'lrgb' | 'luv' | 'okhsl' | 'okhsv' | 'oklab' | 'oklch' | 'p3' | 'prophoto' | 'rec2020' | 'rgb' | 'xyz' | 'xyz50' | 'xyz65' | 'yiq';
|
|
13
|
+
export type ColorSignal<T> = Signal<PossibleColor, Color, T>;
|
|
14
|
+
/**
|
|
15
|
+
* Represents a color using RGBA values (0-1 range).
|
|
16
|
+
*/
|
|
17
|
+
export declare class Color implements Type, WebGLConvertible {
|
|
18
|
+
static symbol: symbol;
|
|
19
|
+
readonly symbol: symbol;
|
|
20
|
+
readonly r: number;
|
|
21
|
+
readonly g: number;
|
|
22
|
+
readonly b: number;
|
|
23
|
+
readonly a: number;
|
|
24
|
+
constructor(value?: PossibleColor);
|
|
25
|
+
/**
|
|
26
|
+
* Interpolates between two colors using LCH color space.
|
|
27
|
+
*/
|
|
28
|
+
static lerp(from: PossibleColor | null, to: PossibleColor | null, value: number, mode?: CuloriInterpolatorMode): Color;
|
|
29
|
+
/**
|
|
30
|
+
* Creates an interpolation function for colors (uses LCH space via culori).
|
|
31
|
+
*/
|
|
32
|
+
static createLerp(mode?: CuloriInterpolatorMode): InterpolationFunction<Color, any[]>;
|
|
33
|
+
/**
|
|
34
|
+
* Creates a signal for the Color type.
|
|
35
|
+
*/
|
|
36
|
+
static createSignal(initial?: SignalValue<PossibleColor>, interpolation?: InterpolationFunction<Color>): ColorSignal<void>;
|
|
37
|
+
toSymbol(): symbol;
|
|
38
|
+
/**
|
|
39
|
+
* Returns the color components as a [r, g, b, a] array (0-1 range).
|
|
40
|
+
*/
|
|
41
|
+
private gl;
|
|
42
|
+
toUniform(gl: WebGL2RenderingContext, location: WebGLUniformLocation): void;
|
|
43
|
+
/**
|
|
44
|
+
* Serializes the color to an `rgba()` CSS string.
|
|
45
|
+
*/
|
|
46
|
+
serialize(): SerializedColor;
|
|
47
|
+
/**
|
|
48
|
+
* Serializes the color to an `rgb()` CSS string (omitting alpha).
|
|
49
|
+
*/
|
|
50
|
+
css(): SerializedColor;
|
|
51
|
+
/**
|
|
52
|
+
* Returns the alpha value of the color (0-1 range).
|
|
53
|
+
*/
|
|
54
|
+
alpha(): number;
|
|
55
|
+
/**
|
|
56
|
+
* Serializes the color to an RRGGBBAA hex string using culori.
|
|
57
|
+
*/
|
|
58
|
+
hex(): string;
|
|
59
|
+
/**
|
|
60
|
+
* Linearly interpolates from this color to another using LCH space.
|
|
61
|
+
*/
|
|
62
|
+
lerp(to: PossibleColor, value: number, mode?: CuloriInterpolatorMode): Color;
|
|
63
|
+
}
|
|
64
|
+
export {};
|
|
65
|
+
//# sourceMappingURL=Color.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Color.d.ts","sourceRoot":"","sources":["../../src/types/Color.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAC,MAAM,EAAE,WAAW,EAAC,MAAM,YAAY,CAAC;AAEpD,OAAO,KAAK,EAAC,qBAAqB,EAAC,MAAM,aAAa,CAAC;AAEvD,OAAO,KAAK,EAAC,IAAI,EAAE,gBAAgB,EAAC,MAAM,QAAQ,CAAC;AAEnD,MAAM,MAAM,eAAe,GAAG,MAAM,CAAC;AASrC,MAAM,WAAW,WAAW;IAC1B,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;CACX;AAED,MAAM,MAAM,aAAa,GAAG,eAAe,GAAG,MAAM,GAAG,KAAK,GAAG,WAAW,CAAC;AAE3E,KAAK,sBAAsB,GACvB,KAAK,GACL,WAAW,GACX,MAAM,GACN,MAAM,GACN,KAAK,GACL,KAAK,GACL,KAAK,GACL,KAAK,GACL,KAAK,GACL,KAAK,GACL,KAAK,GACL,OAAO,GACP,KAAK,GACL,OAAO,GACP,OAAO,GACP,MAAM,GACN,KAAK,GACL,OAAO,GACP,OAAO,GACP,OAAO,GACP,OAAO,GACP,IAAI,GACJ,UAAU,GACV,SAAS,GACT,KAAK,GACL,KAAK,GACL,OAAO,GACP,OAAO,GACP,KAAK,CAAC;AAEV,MAAM,MAAM,WAAW,CAAC,CAAC,IAAI,MAAM,CAAC,aAAa,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;AAE7D;;GAEG;AACH,qBAAa,KAAM,YAAW,IAAI,EAAE,gBAAgB;IAClD,OAAc,MAAM,SAAyC;IAC7D,SAAgB,MAAM,SAAgB;IAEtC,SAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,SAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,SAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,SAAgB,CAAC,EAAE,MAAM,CAAC;gBAEP,KAAK,CAAC,EAAE,aAAa;IAmExC;;OAEG;WACW,IAAI,CAChB,IAAI,EAAE,aAAa,GAAG,IAAI,EAC1B,EAAE,EAAE,aAAa,GAAG,IAAI,EACxB,KAAK,EAAE,MAAM,EACb,IAAI,GAAE,sBAA8B,GACnC,KAAK;IAkDR;;OAEG;WACW,UAAU,CACtB,IAAI,GAAE,sBAA8B,GACnC,qBAAqB,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC;IAKtC;;OAEG;WACW,YAAY,CACxB,OAAO,CAAC,EAAE,WAAW,CAAC,aAAa,CAAC,EACpC,aAAa,GAAE,qBAAqB,CAAC,KAAK,CAAc,GACvD,WAAW,CAAC,IAAI,CAAC;IASb,QAAQ,IAAI,MAAM;IAIzB;;OAEG;IACH,OAAO,CAAC,EAAE;IAIH,SAAS,CACd,EAAE,EAAE,sBAAsB,EAC1B,QAAQ,EAAE,oBAAoB,GAC7B,IAAI;IAIP;;OAEG;IACI,SAAS,IAAI,eAAe;IASnC;;OAEG;IACI,GAAG,IAAI,eAAe;IAO7B;;OAEG;IACI,KAAK,IAAI,MAAM;IAItB;;OAEG;IACI,GAAG,IAAI,MAAM;IAWpB;;OAEG;IACI,IAAI,CACT,EAAE,EAAE,aAAa,EACjB,KAAK,EAAE,MAAM,EACb,IAAI,GAAE,sBAA8B,GACnC,KAAK;CAGT"}
|
|
@@ -0,0 +1,185 @@
|
|
|
1
|
+
import { converter, formatHex8, interpolate, parse } from 'culori';
|
|
2
|
+
import { SignalContext } from '../signals';
|
|
3
|
+
import { clamp } from '../tweening';
|
|
4
|
+
function parseNumber(num) {
|
|
5
|
+
const r = (num >> 16) & 255;
|
|
6
|
+
const g = (num >> 8) & 255;
|
|
7
|
+
const b = num & 255;
|
|
8
|
+
return [r / 255, g / 255, b / 255, 1];
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Represents a color using RGBA values (0-1 range).
|
|
12
|
+
*/
|
|
13
|
+
export class Color {
|
|
14
|
+
constructor(value) {
|
|
15
|
+
this.symbol = Color.symbol;
|
|
16
|
+
// Handle undefined/null case
|
|
17
|
+
if (value === undefined || value === null) {
|
|
18
|
+
this.r = 0;
|
|
19
|
+
this.g = 0;
|
|
20
|
+
this.b = 0;
|
|
21
|
+
this.a = 1; // Default alpha for undefined is 1 (fully opaque black)
|
|
22
|
+
return;
|
|
23
|
+
}
|
|
24
|
+
// Handle Color instance
|
|
25
|
+
if (value instanceof Color) {
|
|
26
|
+
this.r = value.r;
|
|
27
|
+
this.g = value.g;
|
|
28
|
+
this.b = value.b;
|
|
29
|
+
this.a = value.a;
|
|
30
|
+
return;
|
|
31
|
+
}
|
|
32
|
+
// Handle string parsing using culori
|
|
33
|
+
if (typeof value === 'string') {
|
|
34
|
+
const parsedColor = parse(value);
|
|
35
|
+
if (!parsedColor) {
|
|
36
|
+
throw new Error(`Invalid color string value provided: ${value}`);
|
|
37
|
+
}
|
|
38
|
+
// Convert parsed color to RGB if it's not already
|
|
39
|
+
const rgbColor = parsedColor.mode === 'rgb'
|
|
40
|
+
? parsedColor
|
|
41
|
+
: converter('rgb')(parsedColor);
|
|
42
|
+
if (rgbColor) {
|
|
43
|
+
this.r = clamp(0, 1, rgbColor.r);
|
|
44
|
+
this.g = clamp(0, 1, rgbColor.g);
|
|
45
|
+
this.b = clamp(0, 1, rgbColor.b);
|
|
46
|
+
this.a = clamp(0, 1, rgbColor.alpha ?? 1);
|
|
47
|
+
return;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
// Handle number parsing
|
|
51
|
+
if (typeof value === 'number') {
|
|
52
|
+
const [r, g, b, a] = parseNumber(value);
|
|
53
|
+
this.r = clamp(0, 1, r);
|
|
54
|
+
this.g = clamp(0, 1, g);
|
|
55
|
+
this.b = clamp(0, 1, b);
|
|
56
|
+
this.a = clamp(0, 1, a);
|
|
57
|
+
return;
|
|
58
|
+
}
|
|
59
|
+
// Handle object parsing
|
|
60
|
+
if (typeof value === 'object') {
|
|
61
|
+
// Check for r, g, b properties to be reasonably sure it's a ColorObject
|
|
62
|
+
if ('r' in value && 'g' in value && 'b' in value) {
|
|
63
|
+
const obj = value; // Assume it matches the interface
|
|
64
|
+
this.r = clamp(0, 1, obj.r / 255);
|
|
65
|
+
this.g = clamp(0, 1, obj.g / 255);
|
|
66
|
+
this.b = clamp(0, 1, obj.b / 255);
|
|
67
|
+
this.a = clamp(0, 1, obj.a ?? 1);
|
|
68
|
+
return;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
throw new Error(`Invalid color value provided: ${value}`);
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Interpolates between two colors using LCH color space.
|
|
75
|
+
*/
|
|
76
|
+
static lerp(from, to, value, mode = 'lch') {
|
|
77
|
+
const fromColor = from instanceof Color ? from : new Color(from ?? undefined);
|
|
78
|
+
const toColor = to instanceof Color ? to : new Color(to ?? undefined);
|
|
79
|
+
// Define culori colors in {r, g, b} format (0-1 range)
|
|
80
|
+
const startColorCulori = {
|
|
81
|
+
mode: 'rgb',
|
|
82
|
+
r: fromColor.r,
|
|
83
|
+
g: fromColor.g,
|
|
84
|
+
b: fromColor.b,
|
|
85
|
+
};
|
|
86
|
+
const endColorCulori = {
|
|
87
|
+
mode: 'rgb',
|
|
88
|
+
r: toColor.r,
|
|
89
|
+
g: toColor.g,
|
|
90
|
+
b: toColor.b,
|
|
91
|
+
};
|
|
92
|
+
// Create LCH interpolator using culori
|
|
93
|
+
const interpolationMode = mode ?? 'lch'; // Ensure mode is not undefined
|
|
94
|
+
const interpolator = interpolate([startColorCulori, endColorCulori], interpolationMode);
|
|
95
|
+
// Get the interpolated color in LCH mode from culori
|
|
96
|
+
const interpolatedLch = interpolator(value);
|
|
97
|
+
// Convert the interpolated LCH color back to RGB
|
|
98
|
+
const rgbConverter = converter('rgb');
|
|
99
|
+
const interpolatedRgb = rgbConverter(interpolatedLch);
|
|
100
|
+
// Interpolate alpha linearly
|
|
101
|
+
const a = fromColor.a + (toColor.a - fromColor.a) * value;
|
|
102
|
+
// Create a new Color instance, clamping RGB values from culori
|
|
103
|
+
// Check if interpolatedRgb is valid before accessing properties
|
|
104
|
+
const finalR = interpolatedRgb ? clamp(0, 1, interpolatedRgb.r) : 0;
|
|
105
|
+
const finalG = interpolatedRgb ? clamp(0, 1, interpolatedRgb.g) : 0;
|
|
106
|
+
const finalB = interpolatedRgb ? clamp(0, 1, interpolatedRgb.b) : 0;
|
|
107
|
+
return new Color({
|
|
108
|
+
r: finalR * 255,
|
|
109
|
+
g: finalG * 255,
|
|
110
|
+
b: finalB * 255,
|
|
111
|
+
a: clamp(0, 1, a), // Also clamp alpha just in case
|
|
112
|
+
});
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Creates an interpolation function for colors (uses LCH space via culori).
|
|
116
|
+
*/
|
|
117
|
+
static createLerp(mode = 'lch') {
|
|
118
|
+
return (from, to, value) => Color.lerp(from, to, value, mode);
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Creates a signal for the Color type.
|
|
122
|
+
*/
|
|
123
|
+
static createSignal(initial, interpolation = Color.lerp) {
|
|
124
|
+
return new SignalContext(initial, interpolation, undefined, value => (value instanceof Color ? value : new Color(value))).toSignal();
|
|
125
|
+
}
|
|
126
|
+
toSymbol() {
|
|
127
|
+
return this.symbol;
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* Returns the color components as a [r, g, b, a] array (0-1 range).
|
|
131
|
+
*/
|
|
132
|
+
gl() {
|
|
133
|
+
return [this.r, this.g, this.b, this.a];
|
|
134
|
+
}
|
|
135
|
+
toUniform(gl, location) {
|
|
136
|
+
gl.uniform4fv(location, this.gl());
|
|
137
|
+
}
|
|
138
|
+
/**
|
|
139
|
+
* Serializes the color to an `rgba()` CSS string.
|
|
140
|
+
*/
|
|
141
|
+
serialize() {
|
|
142
|
+
const r = Math.round(this.r * 255);
|
|
143
|
+
const g = Math.round(this.g * 255);
|
|
144
|
+
const b = Math.round(this.b * 255);
|
|
145
|
+
// Use toFixed(3) for alpha like before, clamp to avoid -0
|
|
146
|
+
const alphaStr = clamp(0, 1, this.a).toFixed(3);
|
|
147
|
+
return `rgba(${r}, ${g}, ${b}, ${alphaStr})`;
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* Serializes the color to an `rgb()` CSS string (omitting alpha).
|
|
151
|
+
*/
|
|
152
|
+
css() {
|
|
153
|
+
const r = Math.round(this.r * 255);
|
|
154
|
+
const g = Math.round(this.g * 255);
|
|
155
|
+
const b = Math.round(this.b * 255);
|
|
156
|
+
return `rgb(${r},${g},${b})`;
|
|
157
|
+
}
|
|
158
|
+
/**
|
|
159
|
+
* Returns the alpha value of the color (0-1 range).
|
|
160
|
+
*/
|
|
161
|
+
alpha() {
|
|
162
|
+
return this.a;
|
|
163
|
+
}
|
|
164
|
+
/**
|
|
165
|
+
* Serializes the color to an RRGGBBAA hex string using culori.
|
|
166
|
+
*/
|
|
167
|
+
hex() {
|
|
168
|
+
// Use culori's formatter for consistency
|
|
169
|
+
return formatHex8({
|
|
170
|
+
mode: 'rgb',
|
|
171
|
+
r: this.r,
|
|
172
|
+
g: this.g,
|
|
173
|
+
b: this.b,
|
|
174
|
+
alpha: this.a,
|
|
175
|
+
});
|
|
176
|
+
}
|
|
177
|
+
/**
|
|
178
|
+
* Linearly interpolates from this color to another using LCH space.
|
|
179
|
+
*/
|
|
180
|
+
lerp(to, value, mode = 'lch') {
|
|
181
|
+
return Color.lerp(this, to, value, mode);
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
Color.symbol = Symbol.for('@twick/core/types/Color');
|
|
185
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29sb3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdHlwZXMvQ29sb3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFNBQVMsRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBQyxNQUFNLFFBQVEsQ0FBQztBQUVqRSxPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0sWUFBWSxDQUFDO0FBRXpDLE9BQU8sRUFBQyxLQUFLLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFLbEMsU0FBUyxXQUFXLENBQUMsR0FBVztJQUM5QixNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUM7SUFDNUIsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0lBQzNCLE1BQU0sQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7SUFDcEIsT0FBTyxDQUFDLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ3hDLENBQUM7QUE0Q0Q7O0dBRUc7QUFDSCxNQUFNLE9BQU8sS0FBSztJQVNoQixZQUFtQixLQUFxQjtRQVB4QixXQUFNLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQztRQVFwQyw2QkFBNkI7UUFDN0IsSUFBSSxLQUFLLEtBQUssU0FBUyxJQUFJLEtBQUssS0FBSyxJQUFJLEVBQUUsQ0FBQztZQUMxQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNYLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ1gsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDWCxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLHdEQUF3RDtZQUNwRSxPQUFPO1FBQ1QsQ0FBQztRQUVELHdCQUF3QjtRQUN4QixJ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
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Matrix.d.ts","sourceRoot":"","sources":["../../src/types/Matrix.ts"],"names":[],"mappings":"AAGA,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,UAG9D;AAED,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,UAEhE"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { Vector2 } from './Vector';
|
|
2
|
+
import { transformVector } from './vector-transformations';
|
|
3
|
+
export function transformAngle(angle, matrix) {
|
|
4
|
+
const degreeVector = Vector2.fromDegrees(angle);
|
|
5
|
+
return transformVector(degreeVector, matrix).degrees;
|
|
6
|
+
}
|
|
7
|
+
export function transformScalar(scalar, matrix) {
|
|
8
|
+
return Vector2.magnitude(matrix.m11, matrix.m12) * scalar;
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWF0cml4LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3R5cGVzL01hdHJpeC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsT0FBTyxFQUFDLE1BQU0sVUFBVSxDQUFDO0FBQ2pDLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSwwQkFBMEIsQ0FBQztBQUV6RCxNQUFNLFVBQVUsY0FBYyxDQUFDLEtBQWEsRUFBRSxNQUFpQjtJQUM3RCxNQUFNLFlBQVksR0FBRyxPQUFPLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2hELE9BQU8sZUFBZSxDQUFDLFlBQVksRUFBRSxNQUFNLENBQUMsQ0FBQyxPQUFPLENBQUM7QUFDdkQsQ0FBQztBQUVELE1BQU0sVUFBVSxlQUFlLENBQUMsTUFBYyxFQUFFLE1BQWlCO0lBQy9ELE9BQU8sT0FBTyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUQsQ0FBQyJ9
|