fraxel 0.1.0-alpha.1
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/dist/animation/easing.d.ts +29 -0
- package/dist/animation/easing.d.ts.map +1 -0
- package/dist/animation/easing.js +50 -0
- package/dist/animation/easing.js.map +1 -0
- package/dist/animation/index.d.ts +7 -0
- package/dist/animation/index.d.ts.map +1 -0
- package/dist/animation/index.js +7 -0
- package/dist/animation/index.js.map +1 -0
- package/dist/animation/multiple.d.ts +26 -0
- package/dist/animation/multiple.d.ts.map +1 -0
- package/dist/animation/multiple.js +27 -0
- package/dist/animation/multiple.js.map +1 -0
- package/dist/animation/properties.d.ts +30 -0
- package/dist/animation/properties.d.ts.map +1 -0
- package/dist/animation/properties.js +32 -0
- package/dist/animation/properties.js.map +1 -0
- package/dist/animation/sequences.d.ts +30 -0
- package/dist/animation/sequences.d.ts.map +1 -0
- package/dist/animation/sequences.js +50 -0
- package/dist/animation/sequences.js.map +1 -0
- package/dist/animation/sprite-sheet.d.ts +81 -0
- package/dist/animation/sprite-sheet.d.ts.map +1 -0
- package/dist/animation/sprite-sheet.js +103 -0
- package/dist/animation/sprite-sheet.js.map +1 -0
- package/dist/animation/tween.d.ts +78 -0
- package/dist/animation/tween.d.ts.map +1 -0
- package/dist/animation/tween.js +103 -0
- package/dist/animation/tween.js.map +1 -0
- package/dist/assets/index.d.ts +6 -0
- package/dist/assets/index.d.ts.map +1 -0
- package/dist/assets/index.js +5 -0
- package/dist/assets/index.js.map +1 -0
- package/dist/assets/load-sound.d.ts +17 -0
- package/dist/assets/load-sound.d.ts.map +1 -0
- package/dist/assets/load-sound.js +35 -0
- package/dist/assets/load-sound.js.map +1 -0
- package/dist/assets/load-texture.d.ts +12 -0
- package/dist/assets/load-texture.d.ts.map +1 -0
- package/dist/assets/load-texture.js +40 -0
- package/dist/assets/load-texture.js.map +1 -0
- package/dist/assets/loader.d.ts +59 -0
- package/dist/assets/loader.d.ts.map +1 -0
- package/dist/assets/loader.js +65 -0
- package/dist/assets/loader.js.map +1 -0
- package/dist/assets/texture.d.ts +36 -0
- package/dist/assets/texture.d.ts.map +1 -0
- package/dist/assets/texture.js +49 -0
- package/dist/assets/texture.js.map +1 -0
- package/dist/audio/audio-context.d.ts +14 -0
- package/dist/audio/audio-context.d.ts.map +1 -0
- package/dist/audio/audio-context.js +20 -0
- package/dist/audio/audio-context.js.map +1 -0
- package/dist/audio/index.d.ts +2 -0
- package/dist/audio/index.d.ts.map +1 -0
- package/dist/audio/index.js +2 -0
- package/dist/audio/index.js.map +1 -0
- package/dist/collision/broadphase/spatial-hash.d.ts +32 -0
- package/dist/collision/broadphase/spatial-hash.d.ts.map +1 -0
- package/dist/collision/broadphase/spatial-hash.js +87 -0
- package/dist/collision/broadphase/spatial-hash.js.map +1 -0
- package/dist/collision/collision-system.d.ts +52 -0
- package/dist/collision/collision-system.d.ts.map +1 -0
- package/dist/collision/collision-system.js +278 -0
- package/dist/collision/collision-system.js.map +1 -0
- package/dist/collision/events/collision-emitter.d.ts +38 -0
- package/dist/collision/events/collision-emitter.d.ts.map +1 -0
- package/dist/collision/events/collision-emitter.js +47 -0
- package/dist/collision/events/collision-emitter.js.map +1 -0
- package/dist/collision/index.d.ts +13 -0
- package/dist/collision/index.d.ts.map +1 -0
- package/dist/collision/index.js +11 -0
- package/dist/collision/index.js.map +1 -0
- package/dist/collision/narrowphase/detector.d.ts +26 -0
- package/dist/collision/narrowphase/detector.d.ts.map +1 -0
- package/dist/collision/narrowphase/detector.js +70 -0
- package/dist/collision/narrowphase/detector.js.map +1 -0
- package/dist/collision/narrowphase/shapes.d.ts +91 -0
- package/dist/collision/narrowphase/shapes.d.ts.map +1 -0
- package/dist/collision/narrowphase/shapes.js +52 -0
- package/dist/collision/narrowphase/shapes.js.map +1 -0
- package/dist/collision/physics/physics-body.d.ts +38 -0
- package/dist/collision/physics/physics-body.d.ts.map +1 -0
- package/dist/collision/physics/physics-body.js +53 -0
- package/dist/collision/physics/physics-body.js.map +1 -0
- package/dist/collision/physics/physics-system.d.ts +23 -0
- package/dist/collision/physics/physics-system.d.ts.map +1 -0
- package/dist/collision/physics/physics-system.js +86 -0
- package/dist/collision/physics/physics-system.js.map +1 -0
- package/dist/collision/physics/resolver.d.ts +16 -0
- package/dist/collision/physics/resolver.d.ts.map +1 -0
- package/dist/collision/physics/resolver.js +91 -0
- package/dist/collision/physics/resolver.js.map +1 -0
- package/dist/collision/types.d.ts +22 -0
- package/dist/collision/types.d.ts.map +1 -0
- package/dist/collision/types.js +2 -0
- package/dist/collision/types.js.map +1 -0
- package/dist/core/game-config.d.ts +34 -0
- package/dist/core/game-config.d.ts.map +1 -0
- package/dist/core/game-config.js +31 -0
- package/dist/core/game-config.js.map +1 -0
- package/dist/core/game.d.ts +86 -0
- package/dist/core/game.d.ts.map +1 -0
- package/dist/core/game.js +166 -0
- package/dist/core/game.js.map +1 -0
- package/dist/core/index.d.ts +6 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +6 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/scene-manager.d.ts +28 -0
- package/dist/core/scene-manager.d.ts.map +1 -0
- package/dist/core/scene-manager.js +65 -0
- package/dist/core/scene-manager.js.map +1 -0
- package/dist/core/scene.d.ts +43 -0
- package/dist/core/scene.d.ts.map +1 -0
- package/dist/core/scene.js +48 -0
- package/dist/core/scene.js.map +1 -0
- package/dist/core/theme.d.ts +63 -0
- package/dist/core/theme.d.ts.map +1 -0
- package/dist/core/theme.js +59 -0
- package/dist/core/theme.js.map +1 -0
- package/dist/errors/animation.d.ts +24 -0
- package/dist/errors/animation.d.ts.map +1 -0
- package/dist/errors/animation.js +29 -0
- package/dist/errors/animation.js.map +1 -0
- package/dist/errors/assets.d.ts +34 -0
- package/dist/errors/assets.d.ts.map +1 -0
- package/dist/errors/assets.js +41 -0
- package/dist/errors/assets.js.map +1 -0
- package/dist/errors/base.d.ts +12 -0
- package/dist/errors/base.d.ts.map +1 -0
- package/dist/errors/base.js +15 -0
- package/dist/errors/base.js.map +1 -0
- package/dist/errors/env.d.ts +24 -0
- package/dist/errors/env.d.ts.map +1 -0
- package/dist/errors/env.js +29 -0
- package/dist/errors/env.js.map +1 -0
- package/dist/errors/hook.d.ts +46 -0
- package/dist/errors/hook.d.ts.map +1 -0
- package/dist/errors/hook.js +55 -0
- package/dist/errors/hook.js.map +1 -0
- package/dist/errors/index.d.ts +11 -0
- package/dist/errors/index.d.ts.map +1 -0
- package/dist/errors/index.js +11 -0
- package/dist/errors/index.js.map +1 -0
- package/dist/errors/jsx.d.ts +26 -0
- package/dist/errors/jsx.d.ts.map +1 -0
- package/dist/errors/jsx.js +45 -0
- package/dist/errors/jsx.js.map +1 -0
- package/dist/errors/lifecycle.d.ts +35 -0
- package/dist/errors/lifecycle.d.ts.map +1 -0
- package/dist/errors/lifecycle.js +42 -0
- package/dist/errors/lifecycle.js.map +1 -0
- package/dist/errors/math.d.ts +24 -0
- package/dist/errors/math.d.ts.map +1 -0
- package/dist/errors/math.js +34 -0
- package/dist/errors/math.js.map +1 -0
- package/dist/errors/node.d.ts +68 -0
- package/dist/errors/node.d.ts.map +1 -0
- package/dist/errors/node.js +87 -0
- package/dist/errors/node.js.map +1 -0
- package/dist/errors/scene.d.ts +35 -0
- package/dist/errors/scene.d.ts.map +1 -0
- package/dist/errors/scene.js +42 -0
- package/dist/errors/scene.js.map +1 -0
- package/dist/events/event.d.ts +106 -0
- package/dist/events/event.d.ts.map +1 -0
- package/dist/events/event.js +125 -0
- package/dist/events/event.js.map +1 -0
- package/dist/events/index.d.ts +2 -0
- package/dist/events/index.d.ts.map +1 -0
- package/dist/events/index.js +2 -0
- package/dist/events/index.js.map +1 -0
- package/dist/events/types.d.ts +20 -0
- package/dist/events/types.d.ts.map +1 -0
- package/dist/events/types.js +2 -0
- package/dist/events/types.js.map +1 -0
- package/dist/hooks/context.d.ts +15 -0
- package/dist/hooks/context.d.ts.map +1 -0
- package/dist/hooks/context.js +26 -0
- package/dist/hooks/context.js.map +1 -0
- package/dist/hooks/deriveds/by-nodes/index.d.ts +7 -0
- package/dist/hooks/deriveds/by-nodes/index.d.ts.map +1 -0
- package/dist/hooks/deriveds/by-nodes/index.js +7 -0
- package/dist/hooks/deriveds/by-nodes/index.js.map +1 -0
- package/dist/hooks/deriveds/by-nodes/use-animation.d.ts +44 -0
- package/dist/hooks/deriveds/by-nodes/use-animation.d.ts.map +1 -0
- package/dist/hooks/deriveds/by-nodes/use-animation.js +61 -0
- package/dist/hooks/deriveds/by-nodes/use-animation.js.map +1 -0
- package/dist/hooks/deriveds/by-nodes/use-audio.d.ts +33 -0
- package/dist/hooks/deriveds/by-nodes/use-audio.d.ts.map +1 -0
- package/dist/hooks/deriveds/by-nodes/use-audio.js +43 -0
- package/dist/hooks/deriveds/by-nodes/use-audio.js.map +1 -0
- package/dist/hooks/deriveds/by-nodes/use-clickable.d.ts +32 -0
- package/dist/hooks/deriveds/by-nodes/use-clickable.d.ts.map +1 -0
- package/dist/hooks/deriveds/by-nodes/use-clickable.js +43 -0
- package/dist/hooks/deriveds/by-nodes/use-clickable.js.map +1 -0
- package/dist/hooks/deriveds/by-nodes/use-collider.d.ts +35 -0
- package/dist/hooks/deriveds/by-nodes/use-collider.d.ts.map +1 -0
- package/dist/hooks/deriveds/by-nodes/use-collider.js +55 -0
- package/dist/hooks/deriveds/by-nodes/use-collider.js.map +1 -0
- package/dist/hooks/deriveds/by-nodes/use-ray-cast.d.ts +35 -0
- package/dist/hooks/deriveds/by-nodes/use-ray-cast.d.ts.map +1 -0
- package/dist/hooks/deriveds/by-nodes/use-ray-cast.js +47 -0
- package/dist/hooks/deriveds/by-nodes/use-ray-cast.js.map +1 -0
- package/dist/hooks/deriveds/by-nodes/use-timer.d.ts +34 -0
- package/dist/hooks/deriveds/by-nodes/use-timer.d.ts.map +1 -0
- package/dist/hooks/deriveds/by-nodes/use-timer.js +48 -0
- package/dist/hooks/deriveds/by-nodes/use-timer.js.map +1 -0
- package/dist/hooks/deriveds/index.d.ts +5 -0
- package/dist/hooks/deriveds/index.d.ts.map +1 -0
- package/dist/hooks/deriveds/index.js +5 -0
- package/dist/hooks/deriveds/index.js.map +1 -0
- package/dist/hooks/deriveds/use-condition.d.ts +37 -0
- package/dist/hooks/deriveds/use-condition.d.ts.map +1 -0
- package/dist/hooks/deriveds/use-condition.js +47 -0
- package/dist/hooks/deriveds/use-condition.js.map +1 -0
- package/dist/hooks/deriveds/use-match.d.ts +26 -0
- package/dist/hooks/deriveds/use-match.d.ts.map +1 -0
- package/dist/hooks/deriveds/use-match.js +38 -0
- package/dist/hooks/deriveds/use-match.js.map +1 -0
- package/dist/hooks/deriveds/use-partial-node.d.ts +22 -0
- package/dist/hooks/deriveds/use-partial-node.d.ts.map +1 -0
- package/dist/hooks/deriveds/use-partial-node.js +25 -0
- package/dist/hooks/deriveds/use-partial-node.js.map +1 -0
- package/dist/hooks/deriveds/use-when.d.ts +28 -0
- package/dist/hooks/deriveds/use-when.d.ts.map +1 -0
- package/dist/hooks/deriveds/use-when.js +35 -0
- package/dist/hooks/deriveds/use-when.js.map +1 -0
- package/dist/hooks/index.d.ts +16 -0
- package/dist/hooks/index.d.ts.map +1 -0
- package/dist/hooks/index.js +16 -0
- package/dist/hooks/index.js.map +1 -0
- package/dist/hooks/use-child.d.ts +24 -0
- package/dist/hooks/use-child.d.ts.map +1 -0
- package/dist/hooks/use-child.js +37 -0
- package/dist/hooks/use-child.js.map +1 -0
- package/dist/hooks/use-computed.d.ts +28 -0
- package/dist/hooks/use-computed.d.ts.map +1 -0
- package/dist/hooks/use-computed.js +41 -0
- package/dist/hooks/use-computed.js.map +1 -0
- package/dist/hooks/use-context.d.ts +58 -0
- package/dist/hooks/use-context.d.ts.map +1 -0
- package/dist/hooks/use-context.js +77 -0
- package/dist/hooks/use-context.js.map +1 -0
- package/dist/hooks/use-effect.d.ts +24 -0
- package/dist/hooks/use-effect.d.ts.map +1 -0
- package/dist/hooks/use-effect.js +63 -0
- package/dist/hooks/use-effect.js.map +1 -0
- package/dist/hooks/use-event.d.ts +29 -0
- package/dist/hooks/use-event.d.ts.map +1 -0
- package/dist/hooks/use-event.js +30 -0
- package/dist/hooks/use-event.js.map +1 -0
- package/dist/hooks/use-game.d.ts +17 -0
- package/dist/hooks/use-game.d.ts.map +1 -0
- package/dist/hooks/use-game.js +35 -0
- package/dist/hooks/use-game.js.map +1 -0
- package/dist/hooks/use-mount.d.ts +21 -0
- package/dist/hooks/use-mount.d.ts.map +1 -0
- package/dist/hooks/use-mount.js +33 -0
- package/dist/hooks/use-mount.js.map +1 -0
- package/dist/hooks/use-node.d.ts +42 -0
- package/dist/hooks/use-node.d.ts.map +1 -0
- package/dist/hooks/use-node.js +63 -0
- package/dist/hooks/use-node.js.map +1 -0
- package/dist/hooks/use-ref.d.ts +27 -0
- package/dist/hooks/use-ref.d.ts.map +1 -0
- package/dist/hooks/use-ref.js +33 -0
- package/dist/hooks/use-ref.js.map +1 -0
- package/dist/hooks/use-script.d.ts +33 -0
- package/dist/hooks/use-script.d.ts.map +1 -0
- package/dist/hooks/use-script.js +40 -0
- package/dist/hooks/use-script.js.map +1 -0
- package/dist/hooks/use-signal.d.ts +25 -0
- package/dist/hooks/use-signal.d.ts.map +1 -0
- package/dist/hooks/use-signal.js +36 -0
- package/dist/hooks/use-signal.js.map +1 -0
- package/dist/hooks/use-spawn.d.ts +27 -0
- package/dist/hooks/use-spawn.d.ts.map +1 -0
- package/dist/hooks/use-spawn.js +39 -0
- package/dist/hooks/use-spawn.js.map +1 -0
- package/dist/hooks/use-trigger.d.ts +51 -0
- package/dist/hooks/use-trigger.d.ts.map +1 -0
- package/dist/hooks/use-trigger.js +68 -0
- package/dist/hooks/use-trigger.js.map +1 -0
- package/dist/index.d.ts +11 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +11 -0
- package/dist/index.js.map +1 -0
- package/dist/input/input.d.ts +46 -0
- package/dist/input/input.d.ts.map +1 -0
- package/dist/input/input.js +159 -0
- package/dist/input/input.js.map +1 -0
- package/dist/jsx/components/fragment.d.ts +3 -0
- package/dist/jsx/components/fragment.d.ts.map +1 -0
- package/dist/jsx/components/fragment.js +7 -0
- package/dist/jsx/components/fragment.js.map +1 -0
- package/dist/jsx/components/game.d.ts +21 -0
- package/dist/jsx/components/game.d.ts.map +1 -0
- package/dist/jsx/components/game.js +17 -0
- package/dist/jsx/components/game.js.map +1 -0
- package/dist/jsx/components/index.d.ts +5 -0
- package/dist/jsx/components/index.d.ts.map +1 -0
- package/dist/jsx/components/index.js +5 -0
- package/dist/jsx/components/index.js.map +1 -0
- package/dist/jsx/components/list.d.ts +88 -0
- package/dist/jsx/components/list.d.ts.map +1 -0
- package/dist/jsx/components/list.js +93 -0
- package/dist/jsx/components/list.js.map +1 -0
- package/dist/jsx/components/scene.d.ts +40 -0
- package/dist/jsx/components/scene.d.ts.map +1 -0
- package/dist/jsx/components/scene.js +20 -0
- package/dist/jsx/components/scene.js.map +1 -0
- package/dist/jsx/index.d.ts +5 -0
- package/dist/jsx/index.d.ts.map +1 -0
- package/dist/jsx/index.js +5 -0
- package/dist/jsx/index.js.map +1 -0
- package/dist/jsx/jsx.d.ts +3 -0
- package/dist/jsx/jsx.d.ts.map +1 -0
- package/dist/jsx/jsx.js +4 -0
- package/dist/jsx/jsx.js.map +1 -0
- package/dist/jsx/render/game.d.ts +41 -0
- package/dist/jsx/render/game.d.ts.map +1 -0
- package/dist/jsx/render/game.js +86 -0
- package/dist/jsx/render/game.js.map +1 -0
- package/dist/jsx/render/index.d.ts +3 -0
- package/dist/jsx/render/index.d.ts.map +1 -0
- package/dist/jsx/render/index.js +3 -0
- package/dist/jsx/render/index.js.map +1 -0
- package/dist/jsx/render/to-nodes.d.ts +10 -0
- package/dist/jsx/render/to-nodes.d.ts.map +1 -0
- package/dist/jsx/render/to-nodes.js +52 -0
- package/dist/jsx/render/to-nodes.js.map +1 -0
- package/dist/jsx/render/types/class-component.d.ts +4 -0
- package/dist/jsx/render/types/class-component.d.ts.map +1 -0
- package/dist/jsx/render/types/class-component.js +8 -0
- package/dist/jsx/render/types/class-component.js.map +1 -0
- package/dist/jsx/render/types/func-components.d.ts +4 -0
- package/dist/jsx/render/types/func-components.d.ts.map +1 -0
- package/dist/jsx/render/types/func-components.js +8 -0
- package/dist/jsx/render/types/func-components.js.map +1 -0
- package/dist/jsx/render/types/instrinsic-elements.d.ts +6 -0
- package/dist/jsx/render/types/instrinsic-elements.d.ts.map +1 -0
- package/dist/jsx/render/types/instrinsic-elements.js +41 -0
- package/dist/jsx/render/types/instrinsic-elements.js.map +1 -0
- package/dist/jsx/types.d.ts +41 -0
- package/dist/jsx/types.d.ts.map +1 -0
- package/dist/jsx/types.js +2 -0
- package/dist/jsx/types.js.map +1 -0
- package/dist/jsx/utils.d.ts +4 -0
- package/dist/jsx/utils.d.ts.map +1 -0
- package/dist/jsx/utils.js +15 -0
- package/dist/jsx/utils.js.map +1 -0
- package/dist/jsx-runtime.d.ts +6 -0
- package/dist/jsx-runtime.d.ts.map +1 -0
- package/dist/jsx-runtime.js +6 -0
- package/dist/jsx-runtime.js.map +1 -0
- package/dist/math/index.d.ts +3 -0
- package/dist/math/index.d.ts.map +1 -0
- package/dist/math/index.js +2 -0
- package/dist/math/index.js.map +1 -0
- package/dist/math/types.d.ts +13 -0
- package/dist/math/types.d.ts.map +1 -0
- package/dist/math/types.js +2 -0
- package/dist/math/types.js.map +1 -0
- package/dist/math/vector2.d.ts +145 -0
- package/dist/math/vector2.d.ts.map +1 -0
- package/dist/math/vector2.js +164 -0
- package/dist/math/vector2.js.map +1 -0
- package/dist/nodes/_node.d.ts +283 -0
- package/dist/nodes/_node.d.ts.map +1 -0
- package/dist/nodes/_node.js +371 -0
- package/dist/nodes/_node.js.map +1 -0
- package/dist/nodes/animation-player.d.ts +208 -0
- package/dist/nodes/animation-player.d.ts.map +1 -0
- package/dist/nodes/animation-player.js +249 -0
- package/dist/nodes/animation-player.js.map +1 -0
- package/dist/nodes/audio-player.d.ts +128 -0
- package/dist/nodes/audio-player.d.ts.map +1 -0
- package/dist/nodes/audio-player.js +173 -0
- package/dist/nodes/audio-player.js.map +1 -0
- package/dist/nodes/group.d.ts +55 -0
- package/dist/nodes/group.d.ts.map +1 -0
- package/dist/nodes/group.js +54 -0
- package/dist/nodes/group.js.map +1 -0
- package/dist/nodes/index.d.ts +8 -0
- package/dist/nodes/index.d.ts.map +1 -0
- package/dist/nodes/index.js +7 -0
- package/dist/nodes/index.js.map +1 -0
- package/dist/nodes/lib/enum.d.ts +42 -0
- package/dist/nodes/lib/enum.d.ts.map +1 -0
- package/dist/nodes/lib/enum.js +43 -0
- package/dist/nodes/lib/enum.js.map +1 -0
- package/dist/nodes/lib/index.d.ts +5 -0
- package/dist/nodes/lib/index.d.ts.map +1 -0
- package/dist/nodes/lib/index.js +5 -0
- package/dist/nodes/lib/index.js.map +1 -0
- package/dist/nodes/lib/registry.d.ts +43 -0
- package/dist/nodes/lib/registry.d.ts.map +1 -0
- package/dist/nodes/lib/registry.js +46 -0
- package/dist/nodes/lib/registry.js.map +1 -0
- package/dist/nodes/lib/types.d.ts +89 -0
- package/dist/nodes/lib/types.d.ts.map +1 -0
- package/dist/nodes/lib/types.js +2 -0
- package/dist/nodes/lib/types.js.map +1 -0
- package/dist/nodes/lib/utils.d.ts +35 -0
- package/dist/nodes/lib/utils.d.ts.map +1 -0
- package/dist/nodes/lib/utils.js +58 -0
- package/dist/nodes/lib/utils.js.map +1 -0
- package/dist/nodes/node2d/_node2d.d.ts +59 -0
- package/dist/nodes/node2d/_node2d.d.ts.map +1 -0
- package/dist/nodes/node2d/_node2d.js +57 -0
- package/dist/nodes/node2d/_node2d.js.map +1 -0
- package/dist/nodes/node2d/camera.d.ts +64 -0
- package/dist/nodes/node2d/camera.d.ts.map +1 -0
- package/dist/nodes/node2d/camera.js +72 -0
- package/dist/nodes/node2d/camera.js.map +1 -0
- package/dist/nodes/node2d/clickable.d.ts +96 -0
- package/dist/nodes/node2d/clickable.d.ts.map +1 -0
- package/dist/nodes/node2d/clickable.js +117 -0
- package/dist/nodes/node2d/clickable.js.map +1 -0
- package/dist/nodes/node2d/collider.d.ts +96 -0
- package/dist/nodes/node2d/collider.d.ts.map +1 -0
- package/dist/nodes/node2d/collider.js +116 -0
- package/dist/nodes/node2d/collider.js.map +1 -0
- package/dist/nodes/node2d/index.d.ts +12 -0
- package/dist/nodes/node2d/index.d.ts.map +1 -0
- package/dist/nodes/node2d/index.js +11 -0
- package/dist/nodes/node2d/index.js.map +1 -0
- package/dist/nodes/node2d/lib/index.d.ts +2 -0
- package/dist/nodes/node2d/lib/index.d.ts.map +1 -0
- package/dist/nodes/node2d/lib/index.js +2 -0
- package/dist/nodes/node2d/lib/index.js.map +1 -0
- package/dist/nodes/node2d/lib/utils.d.ts +4 -0
- package/dist/nodes/node2d/lib/utils.d.ts.map +1 -0
- package/dist/nodes/node2d/lib/utils.js +14 -0
- package/dist/nodes/node2d/lib/utils.js.map +1 -0
- package/dist/nodes/node2d/ray-cast.d.ts +115 -0
- package/dist/nodes/node2d/ray-cast.d.ts.map +1 -0
- package/dist/nodes/node2d/ray-cast.js +129 -0
- package/dist/nodes/node2d/ray-cast.js.map +1 -0
- package/dist/nodes/node2d/rectangle.d.ts +87 -0
- package/dist/nodes/node2d/rectangle.d.ts.map +1 -0
- package/dist/nodes/node2d/rectangle.js +60 -0
- package/dist/nodes/node2d/rectangle.js.map +1 -0
- package/dist/nodes/node2d/rigid-body.d.ts +65 -0
- package/dist/nodes/node2d/rigid-body.d.ts.map +1 -0
- package/dist/nodes/node2d/rigid-body.js +56 -0
- package/dist/nodes/node2d/rigid-body.js.map +1 -0
- package/dist/nodes/node2d/sprite.d.ts +285 -0
- package/dist/nodes/node2d/sprite.d.ts.map +1 -0
- package/dist/nodes/node2d/sprite.js +226 -0
- package/dist/nodes/node2d/sprite.js.map +1 -0
- package/dist/nodes/node2d/text.d.ts +62 -0
- package/dist/nodes/node2d/text.d.ts.map +1 -0
- package/dist/nodes/node2d/text.js +52 -0
- package/dist/nodes/node2d/text.js.map +1 -0
- package/dist/nodes/node2d/transform.d.ts +32 -0
- package/dist/nodes/node2d/transform.d.ts.map +1 -0
- package/dist/nodes/node2d/transform.js +30 -0
- package/dist/nodes/node2d/transform.js.map +1 -0
- package/dist/nodes/timer.d.ts +107 -0
- package/dist/nodes/timer.d.ts.map +1 -0
- package/dist/nodes/timer.js +108 -0
- package/dist/nodes/timer.js.map +1 -0
- package/dist/reactivity/index.d.ts +5 -0
- package/dist/reactivity/index.d.ts.map +1 -0
- package/dist/reactivity/index.js +5 -0
- package/dist/reactivity/index.js.map +1 -0
- package/dist/reactivity/reactive.d.ts +4 -0
- package/dist/reactivity/reactive.d.ts.map +1 -0
- package/dist/reactivity/reactive.js +50 -0
- package/dist/reactivity/reactive.js.map +1 -0
- package/dist/reactivity/register.d.ts +7 -0
- package/dist/reactivity/register.d.ts.map +1 -0
- package/dist/reactivity/register.js +18 -0
- package/dist/reactivity/register.js.map +1 -0
- package/dist/reactivity/signal.d.ts +126 -0
- package/dist/reactivity/signal.d.ts.map +1 -0
- package/dist/reactivity/signal.js +152 -0
- package/dist/reactivity/signal.js.map +1 -0
- package/dist/reactivity/types.d.ts +31 -0
- package/dist/reactivity/types.d.ts.map +1 -0
- package/dist/reactivity/types.js +2 -0
- package/dist/reactivity/types.js.map +1 -0
- package/dist/scripts/index.d.ts +2 -0
- package/dist/scripts/index.d.ts.map +1 -0
- package/dist/scripts/index.js +2 -0
- package/dist/scripts/index.js.map +1 -0
- package/dist/scripts/script.d.ts +80 -0
- package/dist/scripts/script.d.ts.map +1 -0
- package/dist/scripts/script.js +75 -0
- package/dist/scripts/script.js.map +1 -0
- package/dist/utils/dpr.d.ts +2 -0
- package/dist/utils/dpr.d.ts.map +1 -0
- package/dist/utils/dpr.js +14 -0
- package/dist/utils/dpr.js.map +1 -0
- package/dist/utils/ternaries.d.ts +6 -0
- package/dist/utils/ternaries.d.ts.map +1 -0
- package/dist/utils/ternaries.js +17 -0
- package/dist/utils/ternaries.js.map +1 -0
- package/package.json +56 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transform.d.ts","sourceRoot":"","sources":["../../../src/nodes/node2d/transform.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAC5C,OAAO,EAAE,MAAM,EAAE,KAAK,aAAa,EAAE,MAAM,cAAc,CAAA;AAGzD;;;GAGG;AACH,MAAM,WAAW,gBAAiB,SAAQ,aAAa,CAAC,WAAW,CAAC,SAAS,CAAC;CAAG;AAEjF;;;;;;;;;;;;;;;;;;;GAmBG;AACH,qBAAa,SAAU,SAAQ,MAAM,CAAC,WAAW,CAAC,SAAS,CAAC;gBAC9C,OAAO,EAAE,gBAAgB;CAGtC"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { PrimaryNode } from '../lib/enum.js';
|
|
2
|
+
import { Node2D } from './_node2d.js';
|
|
3
|
+
import { Nodes } from '../lib/registry.js';
|
|
4
|
+
/**
|
|
5
|
+
* The **`Transform`** node is a container for positioning and organizing child nodes.
|
|
6
|
+
* It has no visual representation but provides a coordinate system for its children.
|
|
7
|
+
*
|
|
8
|
+
* @example
|
|
9
|
+
* ```tsx
|
|
10
|
+
* import { useNode } from 'dinix/hooks'
|
|
11
|
+
* import { PrimaryNode } from 'dinix/nodes/enum'
|
|
12
|
+
*
|
|
13
|
+
* function Player() {
|
|
14
|
+
* const body = useNode(PrimaryNode.Transform)
|
|
15
|
+
*
|
|
16
|
+
* return (
|
|
17
|
+
* <transform ref={body} position={new Vector2(100, 200)}>
|
|
18
|
+
* <sprite textureId={PLAYER} />
|
|
19
|
+
* </transform>
|
|
20
|
+
* )
|
|
21
|
+
* }
|
|
22
|
+
* ```
|
|
23
|
+
*/
|
|
24
|
+
export class Transform extends Node2D {
|
|
25
|
+
constructor(options) {
|
|
26
|
+
super(PrimaryNode.Transform, options);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
Nodes.transform = Transform;
|
|
30
|
+
//# sourceMappingURL=transform.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transform.js","sourceRoot":"","sources":["../../../src/nodes/node2d/transform.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAC5C,OAAO,EAAE,MAAM,EAAsB,MAAM,cAAc,CAAA;AACzD,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAA;AAQ1C;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,OAAO,SAAU,SAAQ,MAA6B;IAC1D,YAAY,OAAyB;QACnC,KAAK,CAAC,WAAW,CAAC,SAAS,EAAE,OAAO,CAAC,CAAA;IACvC,CAAC;CACF;AAED,KAAK,CAAC,SAAS,GAAG,SAAS,CAAA"}
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
import { Event } from '../events/event.js';
|
|
2
|
+
import { PrimaryNode } from './lib/enum.js';
|
|
3
|
+
import { Node, type NodeOptions } from './_node.js';
|
|
4
|
+
import type { Reactive } from '../reactivity/types.js';
|
|
5
|
+
/**
|
|
6
|
+
* The **`TimerOptions`** interface defines the options for a `Timer` node.
|
|
7
|
+
*/
|
|
8
|
+
export interface TimerOptions extends NodeOptions<PrimaryNode.Timer> {
|
|
9
|
+
/**
|
|
10
|
+
* The **`duration`** property defines the total duration of the timer in seconds.
|
|
11
|
+
*
|
|
12
|
+
* @example
|
|
13
|
+
* ```tsx
|
|
14
|
+
* // 5 second timer
|
|
15
|
+
* <timer duration={5} />
|
|
16
|
+
* ```
|
|
17
|
+
*/
|
|
18
|
+
duration: Reactive<number>;
|
|
19
|
+
/**
|
|
20
|
+
* The **`autoPlay`** property determines whether the timer starts automatically.
|
|
21
|
+
*
|
|
22
|
+
* @default false
|
|
23
|
+
*
|
|
24
|
+
* @example
|
|
25
|
+
* ```tsx
|
|
26
|
+
* // Auto-starts when the node is added to the scene
|
|
27
|
+
* <timer duration={3} autoPlay />
|
|
28
|
+
* ```
|
|
29
|
+
*/
|
|
30
|
+
autoPlay?: boolean;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* The **`Timer`** node counts up to a duration and emits events when time changes or the timer completes.
|
|
34
|
+
* It has no visual representation but can contain child nodes.
|
|
35
|
+
*
|
|
36
|
+
* @example
|
|
37
|
+
* ```tsx
|
|
38
|
+
* import { useNode, useEvent } from 'dinix/hooks'
|
|
39
|
+
* import { PrimaryNode } from 'dinix/nodes/enum'
|
|
40
|
+
*
|
|
41
|
+
* function CooldownTimer() {
|
|
42
|
+
* const timer = useNode(PrimaryNode.Timer)
|
|
43
|
+
*
|
|
44
|
+
* useEvent(timer, 'timeout', () => {
|
|
45
|
+
* console.log('Cooldown finished!')
|
|
46
|
+
* })
|
|
47
|
+
*
|
|
48
|
+
* useEvent(timer, 'timeChanged', (time) => {
|
|
49
|
+
* console.log('Time:', time)
|
|
50
|
+
* })
|
|
51
|
+
*
|
|
52
|
+
* return (
|
|
53
|
+
* <timer ref={timer} duration={5} autoPlay />
|
|
54
|
+
* )
|
|
55
|
+
* }
|
|
56
|
+
* ```
|
|
57
|
+
*/
|
|
58
|
+
export declare class Timer extends Node<PrimaryNode.Timer> {
|
|
59
|
+
#private;
|
|
60
|
+
/**
|
|
61
|
+
* The **`duration`** property defines the total duration of the timer in seconds.
|
|
62
|
+
*/
|
|
63
|
+
duration: number;
|
|
64
|
+
constructor(options: TimerOptions);
|
|
65
|
+
/**
|
|
66
|
+
* The **`timeout`** event fires when the timer reaches its duration.
|
|
67
|
+
*/
|
|
68
|
+
timeout: Event<[], "timeout">;
|
|
69
|
+
/**
|
|
70
|
+
* The **`timeChanged`** event fires every frame while the timer is playing.
|
|
71
|
+
* The callback receives the current elapsed time in seconds.
|
|
72
|
+
*/
|
|
73
|
+
timeChanged: Event<[_time: number], "timeChange">;
|
|
74
|
+
/**
|
|
75
|
+
* The **`play`** method starts or resumes the timer.
|
|
76
|
+
* @param from Optional time in seconds to start from. Clamped to `[0, duration]`.
|
|
77
|
+
*
|
|
78
|
+
* @example
|
|
79
|
+
* ```tsx
|
|
80
|
+
* timer.node.play() // Resume from current position
|
|
81
|
+
* timer.node.play(0) // Start from the beginning
|
|
82
|
+
* timer.node.play(2.5) // Start from 2.5 seconds
|
|
83
|
+
* ```
|
|
84
|
+
*/
|
|
85
|
+
play(from?: number): void;
|
|
86
|
+
/**
|
|
87
|
+
* The **`pause`** method pauses the timer without resetting its position.
|
|
88
|
+
*
|
|
89
|
+
* @example
|
|
90
|
+
* ```tsx
|
|
91
|
+
* timer.node.pause()
|
|
92
|
+
* ```
|
|
93
|
+
*/
|
|
94
|
+
pause(): void;
|
|
95
|
+
/**
|
|
96
|
+
* The **`stop`** method stops the timer and resets the elapsed time to zero.
|
|
97
|
+
*
|
|
98
|
+
* @example
|
|
99
|
+
* ```tsx
|
|
100
|
+
* timer.node.stop()
|
|
101
|
+
* ```
|
|
102
|
+
*/
|
|
103
|
+
stop(): void;
|
|
104
|
+
/** @internal Updates the timer each frame. */
|
|
105
|
+
update(delta: number): void;
|
|
106
|
+
}
|
|
107
|
+
//# sourceMappingURL=timer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"timer.d.ts","sourceRoot":"","sources":["../../src/nodes/timer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAA;AAC1C,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAC3C,OAAO,EAAE,IAAI,EAAE,KAAK,WAAW,EAAE,MAAM,YAAY,CAAA;AAEnD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAA;AAGtD;;GAEG;AACH,MAAM,WAAW,YAAa,SAAQ,WAAW,CAAC,WAAW,CAAC,KAAK,CAAC;IAClE;;;;;;;;OAQG;IACH,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAA;IAC1B;;;;;;;;;;OAUG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,qBAAa,KAAM,SAAQ,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;;IAEhD;;OAEG;IACH,QAAQ,EAAE,MAAM,CAAA;gBAGJ,OAAO,EAAE,YAAY;IAMjC;;OAEG;IACH,OAAO,uBAAiC;IAExC;;;OAGG;IACH,WAAW,uCAAiD;IAE5D;;;;;;;;;;OAUG;IACH,IAAI,CAAC,IAAI,CAAC,EAAE,MAAM;IAKlB;;;;;;;OAOG;IACH,KAAK;IAIL;;;;;;;OAOG;IACH,IAAI;IAKJ,8CAA8C;IAC9C,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;CAa5B"}
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
import { Event } from '../events/event.js';
|
|
2
|
+
import { PrimaryNode } from './lib/enum.js';
|
|
3
|
+
import { Node } from './_node.js';
|
|
4
|
+
import { Nodes } from './lib/registry.js';
|
|
5
|
+
import { propSignal } from '../utils/ternaries.js';
|
|
6
|
+
/**
|
|
7
|
+
* The **`Timer`** node counts up to a duration and emits events when time changes or the timer completes.
|
|
8
|
+
* It has no visual representation but can contain child nodes.
|
|
9
|
+
*
|
|
10
|
+
* @example
|
|
11
|
+
* ```tsx
|
|
12
|
+
* import { useNode, useEvent } from 'dinix/hooks'
|
|
13
|
+
* import { PrimaryNode } from 'dinix/nodes/enum'
|
|
14
|
+
*
|
|
15
|
+
* function CooldownTimer() {
|
|
16
|
+
* const timer = useNode(PrimaryNode.Timer)
|
|
17
|
+
*
|
|
18
|
+
* useEvent(timer, 'timeout', () => {
|
|
19
|
+
* console.log('Cooldown finished!')
|
|
20
|
+
* })
|
|
21
|
+
*
|
|
22
|
+
* useEvent(timer, 'timeChanged', (time) => {
|
|
23
|
+
* console.log('Time:', time)
|
|
24
|
+
* })
|
|
25
|
+
*
|
|
26
|
+
* return (
|
|
27
|
+
* <timer ref={timer} duration={5} autoPlay />
|
|
28
|
+
* )
|
|
29
|
+
* }
|
|
30
|
+
* ```
|
|
31
|
+
*/
|
|
32
|
+
export class Timer extends Node {
|
|
33
|
+
#counter = 0;
|
|
34
|
+
/**
|
|
35
|
+
* The **`duration`** property defines the total duration of the timer in seconds.
|
|
36
|
+
*/
|
|
37
|
+
duration;
|
|
38
|
+
#isPlaying = false;
|
|
39
|
+
constructor(options) {
|
|
40
|
+
super(PrimaryNode.Timer, options);
|
|
41
|
+
this.duration = propSignal(this, 'duration', options.duration);
|
|
42
|
+
if (options.autoPlay)
|
|
43
|
+
this.play();
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* The **`timeout`** event fires when the timer reaches its duration.
|
|
47
|
+
*/
|
|
48
|
+
timeout = new Event('timeout', () => { });
|
|
49
|
+
/**
|
|
50
|
+
* The **`timeChanged`** event fires every frame while the timer is playing.
|
|
51
|
+
* The callback receives the current elapsed time in seconds.
|
|
52
|
+
*/
|
|
53
|
+
timeChanged = new Event('timeChange', (_time) => { });
|
|
54
|
+
/**
|
|
55
|
+
* The **`play`** method starts or resumes the timer.
|
|
56
|
+
* @param from Optional time in seconds to start from. Clamped to `[0, duration]`.
|
|
57
|
+
*
|
|
58
|
+
* @example
|
|
59
|
+
* ```tsx
|
|
60
|
+
* timer.node.play() // Resume from current position
|
|
61
|
+
* timer.node.play(0) // Start from the beginning
|
|
62
|
+
* timer.node.play(2.5) // Start from 2.5 seconds
|
|
63
|
+
* ```
|
|
64
|
+
*/
|
|
65
|
+
play(from) {
|
|
66
|
+
this.#counter = Math.min(from ?? this.#counter, this.duration);
|
|
67
|
+
this.#isPlaying = true;
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* The **`pause`** method pauses the timer without resetting its position.
|
|
71
|
+
*
|
|
72
|
+
* @example
|
|
73
|
+
* ```tsx
|
|
74
|
+
* timer.node.pause()
|
|
75
|
+
* ```
|
|
76
|
+
*/
|
|
77
|
+
pause() {
|
|
78
|
+
this.#isPlaying = false;
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* The **`stop`** method stops the timer and resets the elapsed time to zero.
|
|
82
|
+
*
|
|
83
|
+
* @example
|
|
84
|
+
* ```tsx
|
|
85
|
+
* timer.node.stop()
|
|
86
|
+
* ```
|
|
87
|
+
*/
|
|
88
|
+
stop() {
|
|
89
|
+
this.#isPlaying = false;
|
|
90
|
+
this.#counter = 0;
|
|
91
|
+
}
|
|
92
|
+
/** @internal Updates the timer each frame. */
|
|
93
|
+
update(delta) {
|
|
94
|
+
if (this.#isPlaying) {
|
|
95
|
+
if (this.#counter >= this.duration) {
|
|
96
|
+
this.stop();
|
|
97
|
+
this.timeout.emit();
|
|
98
|
+
}
|
|
99
|
+
else {
|
|
100
|
+
this.timeChanged.emit(this.#counter);
|
|
101
|
+
this.#counter += delta;
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
super.update(delta);
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
Nodes.timer = Timer;
|
|
108
|
+
//# sourceMappingURL=timer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"timer.js","sourceRoot":"","sources":["../../src/nodes/timer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAA;AAC1C,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAC3C,OAAO,EAAE,IAAI,EAAoB,MAAM,YAAY,CAAA;AACnD,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAA;AAEzC,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAA;AA8BlD;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,MAAM,OAAO,KAAM,SAAQ,IAAuB;IAChD,QAAQ,GAAG,CAAC,CAAA;IACZ;;OAEG;IACH,QAAQ,CAAQ;IAChB,UAAU,GAAG,KAAK,CAAA;IAElB,YAAY,OAAqB;QAC/B,KAAK,CAAC,WAAW,CAAC,KAAK,EAAE,OAAO,CAAC,CAAA;QACjC,IAAI,CAAC,QAAQ,GAAG,UAAU,CAAC,IAAI,EAAE,UAAU,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAA;QAC9D,IAAI,OAAO,CAAC,QAAQ;YAAE,IAAI,CAAC,IAAI,EAAE,CAAA;IACnC,CAAC;IAED;;OAEG;IACH,OAAO,GAAG,IAAI,KAAK,CAAC,SAAS,EAAE,GAAG,EAAE,GAAE,CAAC,CAAC,CAAA;IAExC;;;OAGG;IACH,WAAW,GAAG,IAAI,KAAK,CAAC,YAAY,EAAE,CAAC,KAAa,EAAE,EAAE,GAAE,CAAC,CAAC,CAAA;IAE5D;;;;;;;;;;OAUG;IACH,IAAI,CAAC,IAAa;QAChB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,IAAI,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAA;QAC9D,IAAI,CAAC,UAAU,GAAG,IAAI,CAAA;IACxB,CAAC;IAED;;;;;;;OAOG;IACH,KAAK;QACH,IAAI,CAAC,UAAU,GAAG,KAAK,CAAA;IACzB,CAAC;IAED;;;;;;;OAOG;IACH,IAAI;QACF,IAAI,CAAC,UAAU,GAAG,KAAK,CAAA;QACvB,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAA;IACnB,CAAC;IAED,8CAA8C;IAC9C,MAAM,CAAC,KAAa;QAClB,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACpB,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACnC,IAAI,CAAC,IAAI,EAAE,CAAA;gBACX,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAA;YACrB,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;gBACpC,IAAI,CAAC,QAAQ,IAAI,KAAK,CAAA;YACxB,CAAC;QACH,CAAC;QAED,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;IACrB,CAAC;CACF;AAED,KAAK,CAAC,KAAK,GAAG,KAAK,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/reactivity/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAA;AAC3B,cAAc,eAAe,CAAA;AAC7B,cAAc,eAAe,CAAA;AAC7B,cAAc,YAAY,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/reactivity/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAA;AAC3B,cAAc,eAAe,CAAA;AAC7B,cAAc,eAAe,CAAA;AAC7B,cAAc,YAAY,CAAA"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { Reactive, SignalGetterLike } from './types.js';
|
|
2
|
+
export declare function subReactive<T>(value: Reactive<T>, onUse: (value: T) => void, onSet?: (unsub: () => void) => void): T;
|
|
3
|
+
export declare function reactive<T>(value: Reactive<T>): SignalGetterLike<T>;
|
|
4
|
+
//# sourceMappingURL=reactive.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reactive.d.ts","sourceRoot":"","sources":["../../src/reactivity/reactive.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAA;AAE5D,wBAAgB,WAAW,CAAC,CAAC,EAC3B,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,EAClB,KAAK,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,IAAI,EACzB,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,IAAI,KAAK,IAAI,GAClC,CAAC,CA0BH;AAED,wBAAgB,QAAQ,CAAC,CAAC,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,GAAG,gBAAgB,CAAC,CAAC,CAAC,CA4BnE"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { SignalRegister } from './register.js';
|
|
2
|
+
export function subReactive(value, onUse, onSet) {
|
|
3
|
+
if (typeof value !== 'function')
|
|
4
|
+
return value;
|
|
5
|
+
const signal = value;
|
|
6
|
+
const currentSignals = [];
|
|
7
|
+
let currentValue = null;
|
|
8
|
+
let first = true;
|
|
9
|
+
const refresh = () => {
|
|
10
|
+
currentSignals.forEach((s) => s.unsub(refresh));
|
|
11
|
+
currentValue = SignalRegister.watch(signal, (signals) => {
|
|
12
|
+
currentSignals.length = 0;
|
|
13
|
+
currentSignals.push(...signals);
|
|
14
|
+
});
|
|
15
|
+
if (!first) {
|
|
16
|
+
onUse(currentValue);
|
|
17
|
+
}
|
|
18
|
+
else {
|
|
19
|
+
first = false;
|
|
20
|
+
}
|
|
21
|
+
currentSignals.forEach((s) => s.sub(refresh));
|
|
22
|
+
};
|
|
23
|
+
refresh();
|
|
24
|
+
onSet?.(() => currentSignals.forEach((s) => s.unsub(refresh)));
|
|
25
|
+
return currentValue;
|
|
26
|
+
}
|
|
27
|
+
export function reactive(value) {
|
|
28
|
+
if (typeof value !== 'function')
|
|
29
|
+
return () => value;
|
|
30
|
+
const signal = value;
|
|
31
|
+
let currentSignals = [];
|
|
32
|
+
let currentValue = null;
|
|
33
|
+
const refresh = () => {
|
|
34
|
+
currentSignals.forEach((s) => s.unsub(refresh));
|
|
35
|
+
evaluateAndTrack();
|
|
36
|
+
currentSignals.forEach((s) => s.sub(refresh));
|
|
37
|
+
};
|
|
38
|
+
const evaluateAndTrack = () => {
|
|
39
|
+
currentValue = SignalRegister.watch(signal, (signals) => {
|
|
40
|
+
currentSignals = signals;
|
|
41
|
+
});
|
|
42
|
+
};
|
|
43
|
+
refresh();
|
|
44
|
+
const getter = () => {
|
|
45
|
+
currentSignals.forEach((signal) => SignalRegister.register(signal));
|
|
46
|
+
return currentValue;
|
|
47
|
+
};
|
|
48
|
+
return getter;
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=reactive.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reactive.js","sourceRoot":"","sources":["../../src/reactivity/reactive.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAA;AAI9C,MAAM,UAAU,WAAW,CACzB,KAAkB,EAClB,KAAyB,EACzB,KAAmC;IAEnC,IAAI,OAAO,KAAK,KAAK,UAAU;QAAE,OAAO,KAAK,CAAA;IAC7C,MAAM,MAAM,GAAG,KAA4B,CAAA;IAE3C,MAAM,cAAc,GAAkB,EAAE,CAAA;IACxC,IAAI,YAAY,GAAa,IAAI,CAAA;IACjC,IAAI,KAAK,GAAG,IAAI,CAAA;IAEhB,MAAM,OAAO,GAAG,GAAG,EAAE;QACnB,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAA;QAC/C,YAAY,GAAG,cAAc,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,OAAO,EAAE,EAAE;YACtD,cAAc,CAAC,MAAM,GAAG,CAAC,CAAA;YACzB,cAAc,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,CAAA;QACjC,CAAC,CAAC,CAAA;QACF,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,KAAK,CAAC,YAAY,CAAC,CAAA;QACrB,CAAC;aAAM,CAAC;YACN,KAAK,GAAG,KAAK,CAAA;QACf,CAAC;QACD,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAA;IAC/C,CAAC,CAAA;IAED,OAAO,EAAE,CAAA;IACT,KAAK,EAAE,CAAC,GAAG,EAAE,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA;IAE9D,OAAO,YAAa,CAAA;AACtB,CAAC;AAED,MAAM,UAAU,QAAQ,CAAI,KAAkB;IAC5C,IAAI,OAAO,KAAK,KAAK,UAAU;QAAE,OAAO,GAAG,EAAE,CAAC,KAAK,CAAA;IACnD,MAAM,MAAM,GAAG,KAA4B,CAAA;IAE3C,IAAI,cAAc,GAAkB,EAAE,CAAA;IAEtC,IAAI,YAAY,GAAM,IAAK,CAAA;IAE3B,MAAM,OAAO,GAAG,GAAG,EAAE;QACnB,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAA;QAC/C,gBAAgB,EAAE,CAAA;QAClB,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAA;IAC/C,CAAC,CAAA;IAED,MAAM,gBAAgB,GAAG,GAAG,EAAE;QAC5B,YAAY,GAAG,cAAc,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,OAAO,EAAE,EAAE;YACtD,cAAc,GAAG,OAAO,CAAA;QAC1B,CAAC,CAAC,CAAA;IACJ,CAAC,CAAA;IAED,OAAO,EAAE,CAAA;IAET,MAAM,MAAM,GAAG,GAAG,EAAE;QAClB,cAAc,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,cAAc,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAA;QACnE,OAAO,YAAY,CAAA;IACrB,CAAC,CAAA;IAED,OAAO,MAAM,CAAA;AACf,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"register.d.ts","sourceRoot":"","sources":["../../src/reactivity/register.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAA;AAEjC,qBAAa,cAAc;;IAGzB,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,KAAK,IAAI;IAQnE,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC;CAKpC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { Signal } from './signal';
|
|
2
|
+
export class SignalRegister {
|
|
3
|
+
static #signals = [];
|
|
4
|
+
static watch(fn, deps) {
|
|
5
|
+
this.#signals.push(new Set());
|
|
6
|
+
const val = fn();
|
|
7
|
+
deps(Array.from(this.#signals.at(-1) ?? []));
|
|
8
|
+
this.#signals.pop();
|
|
9
|
+
return val;
|
|
10
|
+
}
|
|
11
|
+
static register(signal) {
|
|
12
|
+
const s = this.#signals.at(-1);
|
|
13
|
+
if (s == null)
|
|
14
|
+
return;
|
|
15
|
+
s.add(signal);
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=register.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"register.js","sourceRoot":"","sources":["../../src/reactivity/register.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAA;AAEjC,MAAM,OAAO,cAAc;IACzB,MAAM,CAAC,QAAQ,GAAuB,EAAE,CAAA;IAExC,MAAM,CAAC,KAAK,CAAI,EAAW,EAAE,IAAsC;QACjE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,CAAA;QAC7B,MAAM,GAAG,GAAG,EAAE,EAAE,CAAA;QAChB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAA;QAC5C,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAA;QACnB,OAAO,GAAG,CAAA;IACZ,CAAC;IAED,MAAM,CAAC,QAAQ,CAAC,MAAmB;QACjC,MAAM,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAA;QAC9B,IAAI,CAAC,IAAI,IAAI;YAAE,OAAM;QACrB,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;IACf,CAAC"}
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
import type { SignalGetter, SignalSetter } from './types';
|
|
2
|
+
/**
|
|
3
|
+
* The **`Signal`** class is a reactive primitive that holds a value and notifies subscribers when it changes.
|
|
4
|
+
*
|
|
5
|
+
* @typeParam T The type of the value held by the signal.
|
|
6
|
+
*
|
|
7
|
+
* @example
|
|
8
|
+
* ```ts
|
|
9
|
+
* const health = new Signal(100)
|
|
10
|
+
*
|
|
11
|
+
* health.sub((value) => {
|
|
12
|
+
* console.log('Health changed to:', value)
|
|
13
|
+
* })
|
|
14
|
+
*
|
|
15
|
+
* health.value = 50 // logs: "Health changed to: 50"
|
|
16
|
+
* ```
|
|
17
|
+
*/
|
|
18
|
+
export declare class Signal<T> {
|
|
19
|
+
#private;
|
|
20
|
+
/**
|
|
21
|
+
* Creates a new `Signal` with an initial value.
|
|
22
|
+
* Automatically creates bound `getter` and `setter` functions that integrate
|
|
23
|
+
* with the reactivity system (`SignalRegister`).
|
|
24
|
+
*
|
|
25
|
+
* @param initialValue The initial value of the signal.
|
|
26
|
+
*/
|
|
27
|
+
constructor(initialValue: T);
|
|
28
|
+
/**
|
|
29
|
+
* Sets the signal value and notifies all subscribers.
|
|
30
|
+
* @example
|
|
31
|
+
* ```ts
|
|
32
|
+
* const score = new Signal(0)
|
|
33
|
+
* score.value = 10
|
|
34
|
+
* console.log(score.value) // 10
|
|
35
|
+
* ```
|
|
36
|
+
*/
|
|
37
|
+
set value(val: T);
|
|
38
|
+
/**
|
|
39
|
+
* Gets the current signal value.
|
|
40
|
+
* @example
|
|
41
|
+
* ```ts
|
|
42
|
+
* const speed = new Signal(5)
|
|
43
|
+
* console.log(speed.value) // 5
|
|
44
|
+
* ```
|
|
45
|
+
*/
|
|
46
|
+
get value(): T;
|
|
47
|
+
/**
|
|
48
|
+
* A bound getter function that returns the current value.
|
|
49
|
+
* Calling it as a function (`getter()`) automatically registers the signal
|
|
50
|
+
* as a dependency of the current `SignalRegister.watch` context.
|
|
51
|
+
* Calling `.value()` bypasses dependency tracking.
|
|
52
|
+
*
|
|
53
|
+
* @example
|
|
54
|
+
* ```ts
|
|
55
|
+
* const health = new Signal(100)
|
|
56
|
+
*
|
|
57
|
+
* // Call as function — tracks dependency
|
|
58
|
+
* const val = health.getter() // 100
|
|
59
|
+
*
|
|
60
|
+
* // Use .value() — no dependency tracking
|
|
61
|
+
* const val2 = health.getter.value() // 100
|
|
62
|
+
* ```
|
|
63
|
+
*/
|
|
64
|
+
getter: SignalGetter<T>;
|
|
65
|
+
/**
|
|
66
|
+
* A bound setter function that updates the value and notifies subscribers.
|
|
67
|
+
* Equivalent to setting `signal.value = val`.
|
|
68
|
+
*
|
|
69
|
+
* @example
|
|
70
|
+
* ```ts
|
|
71
|
+
* const health = new Signal(100)
|
|
72
|
+
* health.setter(50) // equivalent to health.value = 50
|
|
73
|
+
* ```
|
|
74
|
+
*/
|
|
75
|
+
setter: SignalSetter<T>;
|
|
76
|
+
/**
|
|
77
|
+
* The **`sub`** method subscribes a listener that is called whenever the signal value changes.
|
|
78
|
+
* @param fn The callback function to invoke when the value changes.
|
|
79
|
+
*
|
|
80
|
+
* @example
|
|
81
|
+
* ```ts
|
|
82
|
+
* const damage = new Signal(0)
|
|
83
|
+
*
|
|
84
|
+
* damage.sub((val) => {
|
|
85
|
+
* console.log('Damage taken:', val)
|
|
86
|
+
* })
|
|
87
|
+
*
|
|
88
|
+
* damage.value = 25 // logs: "Damage taken: 25"
|
|
89
|
+
* ```
|
|
90
|
+
*/
|
|
91
|
+
sub(fn: (value: T) => void): void;
|
|
92
|
+
/**
|
|
93
|
+
* The **`unsub`** method removes a previously subscribed listener.
|
|
94
|
+
* @param fn The callback function to remove.
|
|
95
|
+
*
|
|
96
|
+
* @example
|
|
97
|
+
* ```ts
|
|
98
|
+
* const mana = new Signal(100)
|
|
99
|
+
*
|
|
100
|
+
* const onManaChange = (val: number) => {
|
|
101
|
+
* console.log('Mana:', val)
|
|
102
|
+
* }
|
|
103
|
+
*
|
|
104
|
+
* mana.sub(onManaChange)
|
|
105
|
+
* mana.unsub(onManaChange)
|
|
106
|
+
* ```
|
|
107
|
+
*/
|
|
108
|
+
unsub(fn: (value: T) => void): void;
|
|
109
|
+
/**
|
|
110
|
+
* The **`clearSubs`** method removes all subscribers of this signal.
|
|
111
|
+
*
|
|
112
|
+
* @example
|
|
113
|
+
* ```ts
|
|
114
|
+
* const damage = new Signal(0)
|
|
115
|
+
* const log = (val: number) => console.log('Damage:', val)
|
|
116
|
+
*
|
|
117
|
+
* damage.sub(log)
|
|
118
|
+
* damage.value = 25 // logs: "Damage: 25"
|
|
119
|
+
*
|
|
120
|
+
* damage.clearSubs()
|
|
121
|
+
* damage.value = 50 // nothing logged — listener removed
|
|
122
|
+
* ```
|
|
123
|
+
*/
|
|
124
|
+
clearSubs(): void;
|
|
125
|
+
}
|
|
126
|
+
//# sourceMappingURL=signal.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"signal.d.ts","sourceRoot":"","sources":["../../src/reactivity/signal.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AAEzD;;;;;;;;;;;;;;;GAeG;AACH,qBAAa,MAAM,CAAC,CAAC;;IAInB;;;;;;OAMG;gBACS,YAAY,EAAE,CAAC;IAe3B;;;;;;;;OAQG;IACH,IAAI,KAAK,CAAC,GAAG,EAeA,CAAC,AAfD,EAKZ;IAED;;;;;;;OAOG;IACH,IAAI,KAAK,IAAI,CAAC,CAEb;IAED;;;;;;;;;;;;;;;;OAgBG;IACH,MAAM,EAAE,YAAY,CAAC,CAAC,CAAC,CAAA;IACvB;;;;;;;;;OASG;IACH,MAAM,EAAE,YAAY,CAAC,CAAC,CAAC,CAAA;IAEvB;;;;;;;;;;;;;;OAcG;IACH,GAAG,CAAC,EAAE,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,IAAI;IAI1B;;;;;;;;;;;;;;;OAeG;IACH,KAAK,CAAC,EAAE,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,IAAI;IAI5B;;;;;;;;;;;;;;OAcG;IACH,SAAS;CAGV"}
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
import { SignalRegister } from './register';
|
|
2
|
+
/**
|
|
3
|
+
* The **`Signal`** class is a reactive primitive that holds a value and notifies subscribers when it changes.
|
|
4
|
+
*
|
|
5
|
+
* @typeParam T The type of the value held by the signal.
|
|
6
|
+
*
|
|
7
|
+
* @example
|
|
8
|
+
* ```ts
|
|
9
|
+
* const health = new Signal(100)
|
|
10
|
+
*
|
|
11
|
+
* health.sub((value) => {
|
|
12
|
+
* console.log('Health changed to:', value)
|
|
13
|
+
* })
|
|
14
|
+
*
|
|
15
|
+
* health.value = 50 // logs: "Health changed to: 50"
|
|
16
|
+
* ```
|
|
17
|
+
*/
|
|
18
|
+
export class Signal {
|
|
19
|
+
#value;
|
|
20
|
+
#listeners = new Set();
|
|
21
|
+
/**
|
|
22
|
+
* Creates a new `Signal` with an initial value.
|
|
23
|
+
* Automatically creates bound `getter` and `setter` functions that integrate
|
|
24
|
+
* with the reactivity system (`SignalRegister`).
|
|
25
|
+
*
|
|
26
|
+
* @param initialValue The initial value of the signal.
|
|
27
|
+
*/
|
|
28
|
+
constructor(initialValue) {
|
|
29
|
+
this.#value = initialValue;
|
|
30
|
+
// setter & getter
|
|
31
|
+
this.getter = (() => {
|
|
32
|
+
SignalRegister.register(this);
|
|
33
|
+
return this.value;
|
|
34
|
+
});
|
|
35
|
+
this.getter.value = () => this.value;
|
|
36
|
+
this.setter = ((value) => {
|
|
37
|
+
this.value = value;
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Sets the signal value and notifies all subscribers.
|
|
42
|
+
* @example
|
|
43
|
+
* ```ts
|
|
44
|
+
* const score = new Signal(0)
|
|
45
|
+
* score.value = 10
|
|
46
|
+
* console.log(score.value) // 10
|
|
47
|
+
* ```
|
|
48
|
+
*/
|
|
49
|
+
set value(val) {
|
|
50
|
+
if (val === this.#value)
|
|
51
|
+
return;
|
|
52
|
+
this.#value = val;
|
|
53
|
+
const currentListeners = Array.from(this.#listeners);
|
|
54
|
+
currentListeners.forEach((fn) => fn(val));
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Gets the current signal value.
|
|
58
|
+
* @example
|
|
59
|
+
* ```ts
|
|
60
|
+
* const speed = new Signal(5)
|
|
61
|
+
* console.log(speed.value) // 5
|
|
62
|
+
* ```
|
|
63
|
+
*/
|
|
64
|
+
get value() {
|
|
65
|
+
return this.#value;
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* A bound getter function that returns the current value.
|
|
69
|
+
* Calling it as a function (`getter()`) automatically registers the signal
|
|
70
|
+
* as a dependency of the current `SignalRegister.watch` context.
|
|
71
|
+
* Calling `.value()` bypasses dependency tracking.
|
|
72
|
+
*
|
|
73
|
+
* @example
|
|
74
|
+
* ```ts
|
|
75
|
+
* const health = new Signal(100)
|
|
76
|
+
*
|
|
77
|
+
* // Call as function — tracks dependency
|
|
78
|
+
* const val = health.getter() // 100
|
|
79
|
+
*
|
|
80
|
+
* // Use .value() — no dependency tracking
|
|
81
|
+
* const val2 = health.getter.value() // 100
|
|
82
|
+
* ```
|
|
83
|
+
*/
|
|
84
|
+
getter;
|
|
85
|
+
/**
|
|
86
|
+
* A bound setter function that updates the value and notifies subscribers.
|
|
87
|
+
* Equivalent to setting `signal.value = val`.
|
|
88
|
+
*
|
|
89
|
+
* @example
|
|
90
|
+
* ```ts
|
|
91
|
+
* const health = new Signal(100)
|
|
92
|
+
* health.setter(50) // equivalent to health.value = 50
|
|
93
|
+
* ```
|
|
94
|
+
*/
|
|
95
|
+
setter;
|
|
96
|
+
/**
|
|
97
|
+
* The **`sub`** method subscribes a listener that is called whenever the signal value changes.
|
|
98
|
+
* @param fn The callback function to invoke when the value changes.
|
|
99
|
+
*
|
|
100
|
+
* @example
|
|
101
|
+
* ```ts
|
|
102
|
+
* const damage = new Signal(0)
|
|
103
|
+
*
|
|
104
|
+
* damage.sub((val) => {
|
|
105
|
+
* console.log('Damage taken:', val)
|
|
106
|
+
* })
|
|
107
|
+
*
|
|
108
|
+
* damage.value = 25 // logs: "Damage taken: 25"
|
|
109
|
+
* ```
|
|
110
|
+
*/
|
|
111
|
+
sub(fn) {
|
|
112
|
+
this.#listeners.add(fn);
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* The **`unsub`** method removes a previously subscribed listener.
|
|
116
|
+
* @param fn The callback function to remove.
|
|
117
|
+
*
|
|
118
|
+
* @example
|
|
119
|
+
* ```ts
|
|
120
|
+
* const mana = new Signal(100)
|
|
121
|
+
*
|
|
122
|
+
* const onManaChange = (val: number) => {
|
|
123
|
+
* console.log('Mana:', val)
|
|
124
|
+
* }
|
|
125
|
+
*
|
|
126
|
+
* mana.sub(onManaChange)
|
|
127
|
+
* mana.unsub(onManaChange)
|
|
128
|
+
* ```
|
|
129
|
+
*/
|
|
130
|
+
unsub(fn) {
|
|
131
|
+
this.#listeners.delete(fn);
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* The **`clearSubs`** method removes all subscribers of this signal.
|
|
135
|
+
*
|
|
136
|
+
* @example
|
|
137
|
+
* ```ts
|
|
138
|
+
* const damage = new Signal(0)
|
|
139
|
+
* const log = (val: number) => console.log('Damage:', val)
|
|
140
|
+
*
|
|
141
|
+
* damage.sub(log)
|
|
142
|
+
* damage.value = 25 // logs: "Damage: 25"
|
|
143
|
+
*
|
|
144
|
+
* damage.clearSubs()
|
|
145
|
+
* damage.value = 50 // nothing logged — listener removed
|
|
146
|
+
* ```
|
|
147
|
+
*/
|
|
148
|
+
clearSubs() {
|
|
149
|
+
this.#listeners.clear();
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
//# sourceMappingURL=signal.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"signal.js","sourceRoot":"","sources":["../../src/reactivity/signal.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAG3C;;;;;;;;;;;;;;;GAeG;AACH,MAAM,OAAO,MAAM;IACjB,MAAM,CAAG;IACT,UAAU,GAAG,IAAI,GAAG,EAAsB,CAAA;IAE1C;;;;;;OAMG;IACH,YAAY,YAAe;QACzB,IAAI,CAAC,MAAM,GAAG,YAAY,CAAA;QAE1B,kBAAkB;QAClB,IAAI,CAAC,MAAM,GAAG,CAAC,GAAG,EAAE;YAClB,cAAc,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAA;YAC7B,OAAO,IAAI,CAAC,KAAK,CAAA;QACnB,CAAC,CAAoB,CAAA;QACrB,IAAI,CAAC,MAAM,CAAC,KAAK,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK,CAAA;QAEpC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;YACvB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAA;QACpB,CAAC,CAAoB,CAAA;IACvB,CAAC;IAED;;;;;;;;OAQG;IACH,IAAI,KAAK,CAAC,GAAG;QACX,IAAI,GAAG,KAAK,IAAI,CAAC,MAAM;YAAE,OAAM;QAC/B,IAAI,CAAC,MAAM,GAAG,GAAG,CAAA;QACjB,MAAM,gBAAgB,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;QACpD,gBAAgB,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAA;IAC3C,CAAC;IAED;;;;;;;OAOG;IACH,IAAI,KAAK;QACP,OAAO,IAAI,CAAC,MAAM,CAAA;IACpB,CAAC;IAED;;;;;;;;;;;;;;;;OAgBG;IACH,MAAM,CAAiB;IACvB;;;;;;;;;OASG;IACH,MAAM,CAAiB;IAEvB;;;;;;;;;;;;;;OAcG;IACH,GAAG,CAAC,EAAsB;QACxB,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;IACzB,CAAC;IAED;;;;;;;;;;;;;;;OAeG;IACH,KAAK,CAAC,EAAsB;QAC1B,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;IAC5B,CAAC;IAED;;;;;;;;;;;;;;OAcG;IACH,SAAS;QACP,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAA;IACzB,CAAC;CACF"}
|