1681-engine 0.0.0-stage → 0.5.8
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/CHANGELOG.md +304 -0
- package/LICENSE +21 -0
- package/README.md +164 -2
- package/dist/1681-engine.js +417 -0
- package/dist/1681-engine.js.map +1 -0
- package/dist/ambient/ColorGrade.js +41 -0
- package/dist/ambient/ColorGrade.js.map +1 -0
- package/dist/ambient/DayClock.js +57 -0
- package/dist/ambient/DayClock.js.map +1 -0
- package/dist/ambient/WeatherLayer.js +91 -0
- package/dist/ambient/WeatherLayer.js.map +1 -0
- package/dist/ambient/grade.js +13 -0
- package/dist/ambient/grade.js.map +1 -0
- package/dist/ambient/weather.js +52 -0
- package/dist/ambient/weather.js.map +1 -0
- package/dist/anim/AnimStateMachine.js +164 -0
- package/dist/anim/AnimStateMachine.js.map +1 -0
- package/dist/anim/Animator.js +67 -0
- package/dist/anim/Animator.js.map +1 -0
- package/dist/anim/animStateCompile.js +113 -0
- package/dist/anim/animStateCompile.js.map +1 -0
- package/dist/anim/animStateSystem.js +17 -0
- package/dist/anim/animStateSystem.js.map +1 -0
- package/dist/anim/animationSystem.js +15 -0
- package/dist/anim/animationSystem.js.map +1 -0
- package/dist/anim/asepriteSlices.js +22 -0
- package/dist/anim/asepriteSlices.js.map +1 -0
- package/dist/anim/asepriteTags.js +35 -0
- package/dist/anim/asepriteTags.js.map +1 -0
- package/dist/anim/parseAseprite.js +83 -0
- package/dist/anim/parseAseprite.js.map +1 -0
- package/dist/assets/AssetLoader.js +104 -0
- package/dist/assets/AssetLoader.js.map +1 -0
- package/dist/assets/loadAseprite.js +50 -0
- package/dist/assets/loadAseprite.js.map +1 -0
- package/dist/assets/takeCleanerWorker-DTcI_Jqr.js +31 -0
- package/dist/assets/takeCleanerWorker-DTcI_Jqr.js.map +1 -0
- package/dist/audio/Footsteps.js +26 -0
- package/dist/audio/Footsteps.js.map +1 -0
- package/dist/audio/MusicPlayer.js +78 -0
- package/dist/audio/MusicPlayer.js.map +1 -0
- package/dist/audio/SoundEngine.js +119 -0
- package/dist/audio/SoundEngine.js.map +1 -0
- package/dist/audio/cleanTake.js +30 -0
- package/dist/audio/cleanTake.js.map +1 -0
- package/dist/audio/music/ElementVoice.js +35 -0
- package/dist/audio/music/ElementVoice.js.map +1 -0
- package/dist/audio/music/GraphVoice.js +39 -0
- package/dist/audio/music/GraphVoice.js.map +1 -0
- package/dist/audio/music/MusicChannel.js +58 -0
- package/dist/audio/music/MusicChannel.js.map +1 -0
- package/dist/audio/music/musicVoice.js +13 -0
- package/dist/audio/music/musicVoice.js.map +1 -0
- package/dist/audio/sampleBank.js +82 -0
- package/dist/audio/sampleBank.js.map +1 -0
- package/dist/audio/soundTable.js +9 -0
- package/dist/audio/soundTable.js.map +1 -0
- package/dist/audio/synth.js +36 -0
- package/dist/audio/synth.js.map +1 -0
- package/dist/core/BitmapLabel.js +49 -0
- package/dist/core/BitmapLabel.js.map +1 -0
- package/dist/core/Camera.js +150 -0
- package/dist/core/Camera.js.map +1 -0
- package/dist/core/Clock.js +30 -0
- package/dist/core/Clock.js.map +1 -0
- package/dist/core/Graphics.js +69 -0
- package/dist/core/Graphics.js.map +1 -0
- package/dist/core/Group.js +29 -0
- package/dist/core/Group.js.map +1 -0
- package/dist/core/Image.js +51 -0
- package/dist/core/Image.js.map +1 -0
- package/dist/core/ObjectFactory.js +55 -0
- package/dist/core/ObjectFactory.js.map +1 -0
- package/dist/core/Pointer.js +58 -0
- package/dist/core/Pointer.js.map +1 -0
- package/dist/core/Rectangle.js +51 -0
- package/dist/core/Rectangle.js.map +1 -0
- package/dist/core/Stage.js +86 -0
- package/dist/core/Stage.js.map +1 -0
- package/dist/core/Text.js +22 -0
- package/dist/core/Text.js.map +1 -0
- package/dist/core/TextureRegistry.js +111 -0
- package/dist/core/TextureRegistry.js.map +1 -0
- package/dist/core/Timeline.js +211 -0
- package/dist/core/Timeline.js.map +1 -0
- package/dist/core/TimelineBuilder.js +73 -0
- package/dist/core/TimelineBuilder.js.map +1 -0
- package/dist/core/TimelineChild.js +84 -0
- package/dist/core/TimelineChild.js.map +1 -0
- package/dist/core/Tweener.js +136 -0
- package/dist/core/Tweener.js.map +1 -0
- package/dist/core/atlas.js +38 -0
- package/dist/core/atlas.js.map +1 -0
- package/dist/core/atlasPlan.js +22 -0
- package/dist/core/atlasPlan.js.map +1 -0
- package/dist/core/eases.js +21 -0
- package/dist/core/eases.js.map +1 -0
- package/dist/core/gameObject.js +115 -0
- package/dist/core/gameObject.js.map +1 -0
- package/dist/core/pixiPatches.js +18 -0
- package/dist/core/pixiPatches.js.map +1 -0
- package/dist/core/timelinePlace.js +24 -0
- package/dist/core/timelinePlace.js.map +1 -0
- package/dist/core/tweenProps.js +12 -0
- package/dist/core/tweenProps.js.map +1 -0
- package/dist/debug/DebugOverlay.js +94 -0
- package/dist/debug/DebugOverlay.js.map +1 -0
- package/dist/debug/DrawCallCounter.js +41 -0
- package/dist/debug/DrawCallCounter.js.map +1 -0
- package/dist/debug/ErrorLog.js +22 -0
- package/dist/debug/ErrorLog.js.map +1 -0
- package/dist/debug/FrameStats.js +42 -0
- package/dist/debug/FrameStats.js.map +1 -0
- package/dist/debug/inspectWorld.js +29 -0
- package/dist/debug/inspectWorld.js.map +1 -0
- package/dist/diagnostics/ErrorDeduper.js +27 -0
- package/dist/diagnostics/ErrorDeduper.js.map +1 -0
- package/dist/diagnostics/FrameSampler.js +42 -0
- package/dist/diagnostics/FrameSampler.js.map +1 -0
- package/dist/diagnostics/bootWatch.js +21 -0
- package/dist/diagnostics/bootWatch.js.map +1 -0
- package/dist/diagnostics/captureErrors.js +27 -0
- package/dist/diagnostics/captureErrors.js.map +1 -0
- package/dist/diagnostics/contextLoss.js +25 -0
- package/dist/diagnostics/contextLoss.js.map +1 -0
- package/dist/diagnostics/frameStats.js +31 -0
- package/dist/diagnostics/frameStats.js.map +1 -0
- package/dist/diagnostics/gpuInfo.js +22 -0
- package/dist/diagnostics/gpuInfo.js.map +1 -0
- package/dist/diagnostics/renderGuard.js +24 -0
- package/dist/diagnostics/renderGuard.js.map +1 -0
- package/dist/ecs/SparseSet.js +55 -0
- package/dist/ecs/SparseSet.js.map +1 -0
- package/dist/ecs/World.js +307 -0
- package/dist/ecs/World.js.map +1 -0
- package/dist/ecs/fields.js +26 -0
- package/dist/ecs/fields.js.map +1 -0
- package/dist/engine/Engine.js +82 -0
- package/dist/engine/Engine.js.map +1 -0
- package/dist/engine/FixedLoop.js +37 -0
- package/dist/engine/FixedLoop.js.map +1 -0
- package/dist/engine/Scene.js +79 -0
- package/dist/engine/Scene.js.map +1 -0
- package/dist/engine/SceneManager.js +73 -0
- package/dist/engine/SceneManager.js.map +1 -0
- package/dist/events/EventBus.js +42 -0
- package/dist/events/EventBus.js.map +1 -0
- package/dist/fx/FloatingText.js +72 -0
- package/dist/fx/FloatingText.js.map +1 -0
- package/dist/fx/hitStop.js +28 -0
- package/dist/fx/hitStop.js.map +1 -0
- package/dist/fx/viewCull.js +10 -0
- package/dist/fx/viewCull.js.map +1 -0
- package/dist/i18n/Translator.js +72 -0
- package/dist/i18n/Translator.js.map +1 -0
- package/dist/i18n/extractStrings.js +58 -0
- package/dist/i18n/extractStrings.js.map +1 -0
- package/dist/i18n/formatMessage.js +19 -0
- package/dist/i18n/formatMessage.js.map +1 -0
- package/dist/input/Actions.js +131 -0
- package/dist/input/Actions.js.map +1 -0
- package/dist/input/AimGesture.js +75 -0
- package/dist/input/AimGesture.js.map +1 -0
- package/dist/input/Keyboard.js +54 -0
- package/dist/input/Keyboard.js.map +1 -0
- package/dist/input/Keymap.js +171 -0
- package/dist/input/Keymap.js.map +1 -0
- package/dist/input/TargetLock.js +73 -0
- package/dist/input/TargetLock.js.map +1 -0
- package/dist/input/aimAxis.js +8 -0
- package/dist/input/aimAxis.js.map +1 -0
- package/dist/input/keyChord.js +29 -0
- package/dist/input/keyChord.js.map +1 -0
- package/dist/input/longPress.js +32 -0
- package/dist/input/longPress.js.map +1 -0
- package/dist/input/stickAxis.js +23 -0
- package/dist/input/stickAxis.js.map +1 -0
- package/dist/input/touchDetect.js +7 -0
- package/dist/input/touchDetect.js.map +1 -0
- package/dist/light/LightLayer.js +84 -0
- package/dist/light/LightLayer.js.map +1 -0
- package/dist/nav/MinHeap.js +39 -0
- package/dist/nav/MinHeap.js.map +1 -0
- package/dist/nav/findPath.js +78 -0
- package/dist/nav/findPath.js.map +1 -0
- package/dist/nav/navGrid.js +36 -0
- package/dist/nav/navGrid.js.map +1 -0
- package/dist/nav/nearestOpen.js +19 -0
- package/dist/nav/nearestOpen.js.map +1 -0
- package/dist/nav/straightenPath.js +51 -0
- package/dist/nav/straightenPath.js.map +1 -0
- package/dist/net/Connection.js +84 -0
- package/dist/net/Connection.js.map +1 -0
- package/dist/net/InterpolationBuffer.js +57 -0
- package/dist/net/InterpolationBuffer.js.map +1 -0
- package/dist/net/PredictedMover.js +61 -0
- package/dist/net/PredictedMover.js.map +1 -0
- package/dist/net/Room.js +92 -0
- package/dist/net/Room.js.map +1 -0
- package/dist/net/RoomHost.js +101 -0
- package/dist/net/RoomHost.js.map +1 -0
- package/dist/net/cadence.js +22 -0
- package/dist/net/cadence.js.map +1 -0
- package/dist/net/constants.js +11 -0
- package/dist/net/constants.js.map +1 -0
- package/dist/net/lobby/LobbyClient.js +124 -0
- package/dist/net/lobby/LobbyClient.js.map +1 -0
- package/dist/net/lobby/LobbyHost.js +366 -0
- package/dist/net/lobby/LobbyHost.js.map +1 -0
- package/dist/net/lobby/LobbyRooms.js +66 -0
- package/dist/net/lobby/LobbyRooms.js.map +1 -0
- package/dist/net/lobby/Matchmaker.js +106 -0
- package/dist/net/lobby/Matchmaker.js.map +1 -0
- package/dist/net/movement.js +83 -0
- package/dist/net/movement.js.map +1 -0
- package/dist/net/protocol.js +11 -0
- package/dist/net/protocol.js.map +1 -0
- package/dist/net/serverClock.js +22 -0
- package/dist/net/serverClock.js.map +1 -0
- package/dist/net/snapshotCodec.js +92 -0
- package/dist/net/snapshotCodec.js.map +1 -0
- package/dist/parallax/Parallax.js +32 -0
- package/dist/parallax/Parallax.js.map +1 -0
- package/dist/parallax/ParallaxLayer.js +70 -0
- package/dist/parallax/ParallaxLayer.js.map +1 -0
- package/dist/parallax/parallaxMath.js +27 -0
- package/dist/parallax/parallaxMath.js.map +1 -0
- package/dist/particles/Emitter.js +108 -0
- package/dist/particles/Emitter.js.map +1 -0
- package/dist/particles/ParticleBudget.js +32 -0
- package/dist/particles/ParticleBudget.js.map +1 -0
- package/dist/particles/ParticleSim.js +60 -0
- package/dist/particles/ParticleSim.js.map +1 -0
- package/dist/particles/particleCurves.js +48 -0
- package/dist/particles/particleCurves.js.map +1 -0
- package/dist/particles/particleSampling.js +30 -0
- package/dist/particles/particleSampling.js.map +1 -0
- package/dist/physics/Body.js +202 -0
- package/dist/physics/Body.js.map +1 -0
- package/dist/physics/BroadPhase.js +56 -0
- package/dist/physics/BroadPhase.js.map +1 -0
- package/dist/physics/Contact.js +76 -0
- package/dist/physics/Contact.js.map +1 -0
- package/dist/physics/ContactSolver.js +70 -0
- package/dist/physics/ContactSolver.js.map +1 -0
- package/dist/physics/PhysicsWorld.js +221 -0
- package/dist/physics/PhysicsWorld.js.map +1 -0
- package/dist/physics/SpatialHash.js +39 -0
- package/dist/physics/SpatialHash.js.map +1 -0
- package/dist/physics/collide.js +76 -0
- package/dist/physics/collide.js.map +1 -0
- package/dist/physics/collidePolygon.js +94 -0
- package/dist/physics/collidePolygon.js.map +1 -0
- package/dist/physics/contactReport.js +14 -0
- package/dist/physics/contactReport.js.map +1 -0
- package/dist/physics/drawColliders.js +31 -0
- package/dist/physics/drawColliders.js.map +1 -0
- package/dist/physics/physicsSystem.js +8 -0
- package/dist/physics/physicsSystem.js.map +1 -0
- package/dist/physics/polygon.js +80 -0
- package/dist/physics/polygon.js.map +1 -0
- package/dist/physics/raycast.js +62 -0
- package/dist/physics/raycast.js.map +1 -0
- package/dist/physics/syncToBody.js +19 -0
- package/dist/physics/syncToBody.js.map +1 -0
- package/dist/physics/tileBodies.js +59 -0
- package/dist/physics/tileBodies.js.map +1 -0
- package/dist/physics/types.js +8 -0
- package/dist/physics/types.js.map +1 -0
- package/dist/pixel/Darkness.js +166 -0
- package/dist/pixel/Darkness.js.map +1 -0
- package/dist/pixel/DitherVignette.js +57 -0
- package/dist/pixel/DitherVignette.js.map +1 -0
- package/dist/pixel/Evaporation.js +85 -0
- package/dist/pixel/Evaporation.js.map +1 -0
- package/dist/pixel/NightShade.js +34 -0
- package/dist/pixel/NightShade.js.map +1 -0
- package/dist/pixel/PixelLayer.js +211 -0
- package/dist/pixel/PixelLayer.js.map +1 -0
- package/dist/pixel/SwayProp.js +75 -0
- package/dist/pixel/SwayProp.js.map +1 -0
- package/dist/pixel/lights.js +44 -0
- package/dist/pixel/lights.js.map +1 -0
- package/dist/pixel/nineSlice.js +62 -0
- package/dist/pixel/nineSlice.js.map +1 -0
- package/dist/pixel/paintLayer.js +36 -0
- package/dist/pixel/paintLayer.js.map +1 -0
- package/dist/pixel/palette.js +57 -0
- package/dist/pixel/palette.js.map +1 -0
- package/dist/pixel/pixel.js +278 -0
- package/dist/pixel/pixel.js.map +1 -0
- package/dist/pixel/pixelPaint.js +194 -0
- package/dist/pixel/pixelPaint.js.map +1 -0
- package/dist/pixel/pixelTone.js +164 -0
- package/dist/pixel/pixelTone.js.map +1 -0
- package/dist/pixel/propKit.js +41 -0
- package/dist/pixel/propKit.js.map +1 -0
- package/dist/pixel/ramp.js +102 -0
- package/dist/pixel/ramp.js.map +1 -0
- package/dist/pixel/selout.js +35 -0
- package/dist/pixel/selout.js.map +1 -0
- package/dist/pixel/spritePixels.js +59 -0
- package/dist/pixel/spritePixels.js.map +1 -0
- package/dist/pixel/swayRig.js +87 -0
- package/dist/pixel/swayRig.js.map +1 -0
- package/dist/pixel/vignetteMask.js +24 -0
- package/dist/pixel/vignetteMask.js.map +1 -0
- package/dist/pixel/weatherArt.js +61 -0
- package/dist/pixel/weatherArt.js.map +1 -0
- package/dist/pixel.js +90 -0
- package/dist/pixel.js.map +1 -0
- package/dist/platform/touch.js +33 -0
- package/dist/platform/touch.js.map +1 -0
- package/dist/postfx/BloomFilter.js +65 -0
- package/dist/postfx/BloomFilter.js.map +1 -0
- package/dist/postfx/ChromaticAberrationFilter.js +25 -0
- package/dist/postfx/ChromaticAberrationFilter.js.map +1 -0
- package/dist/postfx/ColorAdjustFilter.js +76 -0
- package/dist/postfx/ColorAdjustFilter.js.map +1 -0
- package/dist/postfx/CrtFilter.js +42 -0
- package/dist/postfx/CrtFilter.js.map +1 -0
- package/dist/postfx/PixelateFilter.js +27 -0
- package/dist/postfx/PixelateFilter.js.map +1 -0
- package/dist/postfx/PostFx.js +123 -0
- package/dist/postfx/PostFx.js.map +1 -0
- package/dist/postfx/ShockwaveFilter.js +49 -0
- package/dist/postfx/ShockwaveFilter.js.map +1 -0
- package/dist/postfx/VignetteFilter.js +37 -0
- package/dist/postfx/VignetteFilter.js.map +1 -0
- package/dist/postfx/fxAnimator.js +38 -0
- package/dist/postfx/fxAnimator.js.map +1 -0
- package/dist/postfx/fxShader.js +128 -0
- package/dist/postfx/fxShader.js.map +1 -0
- package/dist/postfx.js +26 -0
- package/dist/postfx.js.map +1 -0
- package/dist/react/ChoiceDialog.js +51 -0
- package/dist/react/ChoiceDialog.js.map +1 -0
- package/dist/react/ConfirmDialog.js +53 -0
- package/dist/react/ConfirmDialog.js.map +1 -0
- package/dist/react/Glyph.js +63 -0
- package/dist/react/Glyph.js.map +1 -0
- package/dist/react/Modal.js +38 -0
- package/dist/react/Modal.js.map +1 -0
- package/dist/react/Panel.js +24 -0
- package/dist/react/Panel.js.map +1 -0
- package/dist/react/PixelImage.js +24 -0
- package/dist/react/PixelImage.js.map +1 -0
- package/dist/react/Select.js +99 -0
- package/dist/react/Select.js.map +1 -0
- package/dist/react/Slider.js +62 -0
- package/dist/react/Slider.js.map +1 -0
- package/dist/react/SplitPane.js +24 -0
- package/dist/react/SplitPane.js.map +1 -0
- package/dist/react/TabStrip.js +32 -0
- package/dist/react/TabStrip.js.map +1 -0
- package/dist/react/TitleTips.js +42 -0
- package/dist/react/TitleTips.js.map +1 -0
- package/dist/react/Tooltip.js +28 -0
- package/dist/react/Tooltip.js.map +1 -0
- package/dist/react/UiProvider.js +50 -0
- package/dist/react/UiProvider.js.map +1 -0
- package/dist/react/baseCss.js +222 -0
- package/dist/react/baseCss.js.map +1 -0
- package/dist/react/choiceStore.js +23 -0
- package/dist/react/choiceStore.js.map +1 -0
- package/dist/react/classNames.js +19 -0
- package/dist/react/classNames.js.map +1 -0
- package/dist/react/confirmStore.js +30 -0
- package/dist/react/confirmStore.js.map +1 -0
- package/dist/react/labels.js +18 -0
- package/dist/react/labels.js.map +1 -0
- package/dist/react/placement.js +49 -0
- package/dist/react/placement.js.map +1 -0
- package/dist/react/useFillSheet.js +23 -0
- package/dist/react/useFillSheet.js.map +1 -0
- package/dist/react/useFitToViewport.js +29 -0
- package/dist/react/useFitToViewport.js.map +1 -0
- package/dist/react/usePicked.js +13 -0
- package/dist/react/usePicked.js.map +1 -0
- package/dist/react/useStore.js +9 -0
- package/dist/react/useStore.js.map +1 -0
- package/dist/react/useViewport.js +17 -0
- package/dist/react/useViewport.js.map +1 -0
- package/dist/react.js +78 -0
- package/dist/react.js.map +1 -0
- package/dist/rig/PosePlayer.js +92 -0
- package/dist/rig/PosePlayer.js.map +1 -0
- package/dist/rig/RigView.js +125 -0
- package/dist/rig/RigView.js.map +1 -0
- package/dist/rig/Skeleton.js +31 -0
- package/dist/rig/Skeleton.js.map +1 -0
- package/dist/rig/humanoid.js +6 -0
- package/dist/rig/humanoid.js.map +1 -0
- package/dist/rig/humanoid.json.js +30 -0
- package/dist/rig/humanoid.json.js.map +1 -0
- package/dist/rig/humanoidPoses.js +30 -0
- package/dist/rig/humanoidPoses.js.map +1 -0
- package/dist/rig/poseMath.js +54 -0
- package/dist/rig/poseMath.js.map +1 -0
- package/dist/rig/poses.json.js +150 -0
- package/dist/rig/poses.json.js.map +1 -0
- package/dist/save/Autosaver.js +54 -0
- package/dist/save/Autosaver.js.map +1 -0
- package/dist/save/MemoryBackend.js +19 -0
- package/dist/save/MemoryBackend.js.map +1 -0
- package/dist/save/SaveStore.js +103 -0
- package/dist/save/SaveStore.js.map +1 -0
- package/dist/save/WebStorageBackend.js +27 -0
- package/dist/save/WebStorageBackend.js.map +1 -0
- package/dist/save/checksum.js +10 -0
- package/dist/save/checksum.js.map +1 -0
- package/dist/save/migrateSave.js +27 -0
- package/dist/save/migrateSave.js.map +1 -0
- package/dist/settings.js +27 -0
- package/dist/settings.js.map +1 -0
- package/dist/tilemap/TilemapView.js +69 -0
- package/dist/tilemap/TilemapView.js.map +1 -0
- package/dist/tilemap/collision.js +25 -0
- package/dist/tilemap/collision.js.map +1 -0
- package/dist/tilemap/tiled.js +138 -0
- package/dist/tilemap/tiled.js.map +1 -0
- package/dist/transitions/CrossfadeTransition.js +24 -0
- package/dist/transitions/CrossfadeTransition.js.map +1 -0
- package/dist/transitions/DitherWipeTransition.js +70 -0
- package/dist/transitions/DitherWipeTransition.js.map +1 -0
- package/dist/transitions/FadeTransition.js +34 -0
- package/dist/transitions/FadeTransition.js.map +1 -0
- package/dist/transitions/Letterbox.js +42 -0
- package/dist/transitions/Letterbox.js.map +1 -0
- package/dist/transitions/ditherMask.js +15 -0
- package/dist/transitions/ditherMask.js.map +1 -0
- package/dist/transitions/transitionTo.js +28 -0
- package/dist/transitions/transitionTo.js.map +1 -0
- package/dist/transitions/tweenDone.js +15 -0
- package/dist/transitions/tweenDone.js.map +1 -0
- package/dist/types/ambient/ColorGrade.d.ts +41 -0
- package/dist/types/ambient/ColorGrade.d.ts.map +1 -0
- package/dist/types/ambient/DayClock.d.ts +80 -0
- package/dist/types/ambient/DayClock.d.ts.map +1 -0
- package/dist/types/ambient/WeatherLayer.d.ts +78 -0
- package/dist/types/ambient/WeatherLayer.d.ts.map +1 -0
- package/dist/types/ambient/grade.d.ts +22 -0
- package/dist/types/ambient/grade.d.ts.map +1 -0
- package/dist/types/ambient/weather.d.ts +49 -0
- package/dist/types/ambient/weather.d.ts.map +1 -0
- package/dist/types/anim/AnimStateMachine.d.ts +80 -0
- package/dist/types/anim/AnimStateMachine.d.ts.map +1 -0
- package/dist/types/anim/Animator.d.ts +50 -0
- package/dist/types/anim/Animator.d.ts.map +1 -0
- package/dist/types/anim/animStateCompile.d.ts +52 -0
- package/dist/types/anim/animStateCompile.d.ts.map +1 -0
- package/dist/types/anim/animStateSystem.d.ts +10 -0
- package/dist/types/anim/animStateSystem.d.ts.map +1 -0
- package/dist/types/anim/animStateTypes.d.ts +50 -0
- package/dist/types/anim/animStateTypes.d.ts.map +1 -0
- package/dist/types/anim/animationSystem.d.ts +13 -0
- package/dist/types/anim/animationSystem.d.ts.map +1 -0
- package/dist/types/anim/asepriteSlices.d.ts +19 -0
- package/dist/types/anim/asepriteSlices.d.ts.map +1 -0
- package/dist/types/anim/asepriteTags.d.ts +16 -0
- package/dist/types/anim/asepriteTags.d.ts.map +1 -0
- package/dist/types/anim/asepriteTypes.d.ts +159 -0
- package/dist/types/anim/asepriteTypes.d.ts.map +1 -0
- package/dist/types/anim/parseAseprite.d.ts +21 -0
- package/dist/types/anim/parseAseprite.d.ts.map +1 -0
- package/dist/types/assets/AssetLoader.d.ts +85 -0
- package/dist/types/assets/AssetLoader.d.ts.map +1 -0
- package/dist/types/assets/loadAseprite.d.ts +27 -0
- package/dist/types/assets/loadAseprite.d.ts.map +1 -0
- package/dist/types/audio/Footsteps.d.ts +33 -0
- package/dist/types/audio/Footsteps.d.ts.map +1 -0
- package/dist/types/audio/MusicPlayer.d.ts +65 -0
- package/dist/types/audio/MusicPlayer.d.ts.map +1 -0
- package/dist/types/audio/SoundEngine.d.ts +42 -0
- package/dist/types/audio/SoundEngine.d.ts.map +1 -0
- package/dist/types/audio/cleanTake.d.ts +3 -0
- package/dist/types/audio/cleanTake.d.ts.map +1 -0
- package/dist/types/audio/music/ElementVoice.d.ts +14 -0
- package/dist/types/audio/music/ElementVoice.d.ts.map +1 -0
- package/dist/types/audio/music/GraphVoice.d.ts +22 -0
- package/dist/types/audio/music/GraphVoice.d.ts.map +1 -0
- package/dist/types/audio/music/MusicChannel.d.ts +35 -0
- package/dist/types/audio/music/MusicChannel.d.ts.map +1 -0
- package/dist/types/audio/music/musicVoice.d.ts +26 -0
- package/dist/types/audio/music/musicVoice.d.ts.map +1 -0
- package/dist/types/audio/sampleBank.d.ts +27 -0
- package/dist/types/audio/sampleBank.d.ts.map +1 -0
- package/dist/types/audio/soundTable.d.ts +14 -0
- package/dist/types/audio/soundTable.d.ts.map +1 -0
- package/dist/types/audio/synth.d.ts +34 -0
- package/dist/types/audio/synth.d.ts.map +1 -0
- package/dist/types/audio/takeCleanerWorker.d.ts +2 -0
- package/dist/types/audio/takeCleanerWorker.d.ts.map +1 -0
- package/dist/types/core/BitmapLabel.d.ts +36 -0
- package/dist/types/core/BitmapLabel.d.ts.map +1 -0
- package/dist/types/core/Camera.d.ts +115 -0
- package/dist/types/core/Camera.d.ts.map +1 -0
- package/dist/types/core/Clock.d.ts +11 -0
- package/dist/types/core/Clock.d.ts.map +1 -0
- package/dist/types/core/Graphics.d.ts +37 -0
- package/dist/types/core/Graphics.d.ts.map +1 -0
- package/dist/types/core/Group.d.ts +15 -0
- package/dist/types/core/Group.d.ts.map +1 -0
- package/dist/types/core/Image.d.ts +25 -0
- package/dist/types/core/Image.d.ts.map +1 -0
- package/dist/types/core/ObjectFactory.d.ts +34 -0
- package/dist/types/core/ObjectFactory.d.ts.map +1 -0
- package/dist/types/core/Pointer.d.ts +27 -0
- package/dist/types/core/Pointer.d.ts.map +1 -0
- package/dist/types/core/Rectangle.d.ts +26 -0
- package/dist/types/core/Rectangle.d.ts.map +1 -0
- package/dist/types/core/Stage.d.ts +58 -0
- package/dist/types/core/Stage.d.ts.map +1 -0
- package/dist/types/core/Text.d.ts +22 -0
- package/dist/types/core/Text.d.ts.map +1 -0
- package/dist/types/core/TextureRegistry.d.ts +51 -0
- package/dist/types/core/TextureRegistry.d.ts.map +1 -0
- package/dist/types/core/Timeline.d.ts +115 -0
- package/dist/types/core/Timeline.d.ts.map +1 -0
- package/dist/types/core/TimelineBuilder.d.ts +53 -0
- package/dist/types/core/TimelineBuilder.d.ts.map +1 -0
- package/dist/types/core/TimelineChild.d.ts +51 -0
- package/dist/types/core/TimelineChild.d.ts.map +1 -0
- package/dist/types/core/Tweener.d.ts +70 -0
- package/dist/types/core/Tweener.d.ts.map +1 -0
- package/dist/types/core/atlas.d.ts +16 -0
- package/dist/types/core/atlas.d.ts.map +1 -0
- package/dist/types/core/atlasPlan.d.ts +34 -0
- package/dist/types/core/atlasPlan.d.ts.map +1 -0
- package/dist/types/core/eases.d.ts +3 -0
- package/dist/types/core/eases.d.ts.map +1 -0
- package/dist/types/core/gameObject.d.ts +42 -0
- package/dist/types/core/gameObject.d.ts.map +1 -0
- package/dist/types/core/pixiPatches.d.ts +9 -0
- package/dist/types/core/pixiPatches.d.ts.map +1 -0
- package/dist/types/core/timelinePlace.d.ts +23 -0
- package/dist/types/core/timelinePlace.d.ts.map +1 -0
- package/dist/types/core/tweenProps.d.ts +8 -0
- package/dist/types/core/tweenProps.d.ts.map +1 -0
- package/dist/types/core/types.d.ts +4 -0
- package/dist/types/core/types.d.ts.map +1 -0
- package/dist/types/debug/DebugOverlay.d.ts +63 -0
- package/dist/types/debug/DebugOverlay.d.ts.map +1 -0
- package/dist/types/debug/DrawCallCounter.d.ts +20 -0
- package/dist/types/debug/DrawCallCounter.d.ts.map +1 -0
- package/dist/types/debug/ErrorLog.d.ts +20 -0
- package/dist/types/debug/ErrorLog.d.ts.map +1 -0
- package/dist/types/debug/FrameStats.d.ts +21 -0
- package/dist/types/debug/FrameStats.d.ts.map +1 -0
- package/dist/types/debug/inspectWorld.d.ts +14 -0
- package/dist/types/debug/inspectWorld.d.ts.map +1 -0
- package/dist/types/diagnostics/ErrorDeduper.d.ts +17 -0
- package/dist/types/diagnostics/ErrorDeduper.d.ts.map +1 -0
- package/dist/types/diagnostics/FrameSampler.d.ts +37 -0
- package/dist/types/diagnostics/FrameSampler.d.ts.map +1 -0
- package/dist/types/diagnostics/bootWatch.d.ts +25 -0
- package/dist/types/diagnostics/bootWatch.d.ts.map +1 -0
- package/dist/types/diagnostics/captureErrors.d.ts +24 -0
- package/dist/types/diagnostics/captureErrors.d.ts.map +1 -0
- package/dist/types/diagnostics/contextLoss.d.ts +35 -0
- package/dist/types/diagnostics/contextLoss.d.ts.map +1 -0
- package/dist/types/diagnostics/frameStats.d.ts +30 -0
- package/dist/types/diagnostics/frameStats.d.ts.map +1 -0
- package/dist/types/diagnostics/gpuInfo.d.ts +9 -0
- package/dist/types/diagnostics/gpuInfo.d.ts.map +1 -0
- package/dist/types/diagnostics/renderGuard.d.ts +12 -0
- package/dist/types/diagnostics/renderGuard.d.ts.map +1 -0
- package/dist/types/ecs/SparseSet.d.ts +25 -0
- package/dist/types/ecs/SparseSet.d.ts.map +1 -0
- package/dist/types/ecs/World.d.ts +137 -0
- package/dist/types/ecs/World.d.ts.map +1 -0
- package/dist/types/ecs/fields.d.ts +34 -0
- package/dist/types/ecs/fields.d.ts.map +1 -0
- package/dist/types/engine/Engine.d.ts +80 -0
- package/dist/types/engine/Engine.d.ts.map +1 -0
- package/dist/types/engine/FixedLoop.d.ts +32 -0
- package/dist/types/engine/FixedLoop.d.ts.map +1 -0
- package/dist/types/engine/Scene.d.ts +67 -0
- package/dist/types/engine/Scene.d.ts.map +1 -0
- package/dist/types/engine/SceneManager.d.ts +36 -0
- package/dist/types/engine/SceneManager.d.ts.map +1 -0
- package/dist/types/events/EventBus.d.ts +20 -0
- package/dist/types/events/EventBus.d.ts.map +1 -0
- package/dist/types/fx/FloatingText.d.ts +71 -0
- package/dist/types/fx/FloatingText.d.ts.map +1 -0
- package/dist/types/fx/hitStop.d.ts +20 -0
- package/dist/types/fx/hitStop.d.ts.map +1 -0
- package/dist/types/fx/viewCull.d.ts +14 -0
- package/dist/types/fx/viewCull.d.ts.map +1 -0
- package/dist/types/i18n/Translator.d.ts +52 -0
- package/dist/types/i18n/Translator.d.ts.map +1 -0
- package/dist/types/i18n/extractStrings.d.ts +25 -0
- package/dist/types/i18n/extractStrings.d.ts.map +1 -0
- package/dist/types/i18n/formatMessage.d.ts +10 -0
- package/dist/types/i18n/formatMessage.d.ts.map +1 -0
- package/dist/types/index.d.ts +149 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/input/Actions.d.ts +94 -0
- package/dist/types/input/Actions.d.ts.map +1 -0
- package/dist/types/input/AimGesture.d.ts +106 -0
- package/dist/types/input/AimGesture.d.ts.map +1 -0
- package/dist/types/input/Keyboard.d.ts +30 -0
- package/dist/types/input/Keyboard.d.ts.map +1 -0
- package/dist/types/input/Keymap.d.ts +85 -0
- package/dist/types/input/Keymap.d.ts.map +1 -0
- package/dist/types/input/TargetLock.d.ts +56 -0
- package/dist/types/input/TargetLock.d.ts.map +1 -0
- package/dist/types/input/aimAxis.d.ts +9 -0
- package/dist/types/input/aimAxis.d.ts.map +1 -0
- package/dist/types/input/keyChord.d.ts +15 -0
- package/dist/types/input/keyChord.d.ts.map +1 -0
- package/dist/types/input/longPress.d.ts +21 -0
- package/dist/types/input/longPress.d.ts.map +1 -0
- package/dist/types/input/stickAxis.d.ts +26 -0
- package/dist/types/input/stickAxis.d.ts.map +1 -0
- package/dist/types/input/touchDetect.d.ts +18 -0
- package/dist/types/input/touchDetect.d.ts.map +1 -0
- package/dist/types/light/LightLayer.d.ts +65 -0
- package/dist/types/light/LightLayer.d.ts.map +1 -0
- package/dist/types/nav/MinHeap.d.ts +15 -0
- package/dist/types/nav/MinHeap.d.ts.map +1 -0
- package/dist/types/nav/findPath.d.ts +38 -0
- package/dist/types/nav/findPath.d.ts.map +1 -0
- package/dist/types/nav/navGrid.d.ts +48 -0
- package/dist/types/nav/navGrid.d.ts.map +1 -0
- package/dist/types/nav/nearestOpen.d.ts +8 -0
- package/dist/types/nav/nearestOpen.d.ts.map +1 -0
- package/dist/types/nav/straightenPath.d.ts +13 -0
- package/dist/types/nav/straightenPath.d.ts.map +1 -0
- package/dist/types/net/Connection.d.ts +66 -0
- package/dist/types/net/Connection.d.ts.map +1 -0
- package/dist/types/net/InterpolationBuffer.d.ts +36 -0
- package/dist/types/net/InterpolationBuffer.d.ts.map +1 -0
- package/dist/types/net/PredictedMover.d.ts +43 -0
- package/dist/types/net/PredictedMover.d.ts.map +1 -0
- package/dist/types/net/Room.d.ts +69 -0
- package/dist/types/net/Room.d.ts.map +1 -0
- package/dist/types/net/RoomHost.d.ts +74 -0
- package/dist/types/net/RoomHost.d.ts.map +1 -0
- package/dist/types/net/cadence.d.ts +22 -0
- package/dist/types/net/cadence.d.ts.map +1 -0
- package/dist/types/net/constants.d.ts +24 -0
- package/dist/types/net/constants.d.ts.map +1 -0
- package/dist/types/net/lobby/LobbyClient.d.ts +107 -0
- package/dist/types/net/lobby/LobbyClient.d.ts.map +1 -0
- package/dist/types/net/lobby/LobbyHost.d.ts +147 -0
- package/dist/types/net/lobby/LobbyHost.d.ts.map +1 -0
- package/dist/types/net/lobby/LobbyRooms.d.ts +56 -0
- package/dist/types/net/lobby/LobbyRooms.d.ts.map +1 -0
- package/dist/types/net/lobby/Matchmaker.d.ts +57 -0
- package/dist/types/net/lobby/Matchmaker.d.ts.map +1 -0
- package/dist/types/net/lobby/index.d.ts +6 -0
- package/dist/types/net/lobby/index.d.ts.map +1 -0
- package/dist/types/net/lobby/lobbyProtocol.d.ts +143 -0
- package/dist/types/net/lobby/lobbyProtocol.d.ts.map +1 -0
- package/dist/types/net/movement.d.ts +50 -0
- package/dist/types/net/movement.d.ts.map +1 -0
- package/dist/types/net/protocol.d.ts +59 -0
- package/dist/types/net/protocol.d.ts.map +1 -0
- package/dist/types/net/serverClock.d.ts +14 -0
- package/dist/types/net/serverClock.d.ts.map +1 -0
- package/dist/types/net/snapshotCodec.d.ts +55 -0
- package/dist/types/net/snapshotCodec.d.ts.map +1 -0
- package/dist/types/parallax/Parallax.d.ts +37 -0
- package/dist/types/parallax/Parallax.d.ts.map +1 -0
- package/dist/types/parallax/ParallaxLayer.d.ts +80 -0
- package/dist/types/parallax/ParallaxLayer.d.ts.map +1 -0
- package/dist/types/parallax/parallaxMath.d.ts +50 -0
- package/dist/types/parallax/parallaxMath.d.ts.map +1 -0
- package/dist/types/particles/Emitter.d.ts +97 -0
- package/dist/types/particles/Emitter.d.ts.map +1 -0
- package/dist/types/particles/ParticleBudget.d.ts +28 -0
- package/dist/types/particles/ParticleBudget.d.ts.map +1 -0
- package/dist/types/particles/ParticleSim.d.ts +38 -0
- package/dist/types/particles/ParticleSim.d.ts.map +1 -0
- package/dist/types/particles/particleCurves.d.ts +21 -0
- package/dist/types/particles/particleCurves.d.ts.map +1 -0
- package/dist/types/particles/particleSampling.d.ts +20 -0
- package/dist/types/particles/particleSampling.d.ts.map +1 -0
- package/dist/types/physics/Body.d.ts +130 -0
- package/dist/types/physics/Body.d.ts.map +1 -0
- package/dist/types/physics/BroadPhase.d.ts +26 -0
- package/dist/types/physics/BroadPhase.d.ts.map +1 -0
- package/dist/types/physics/Contact.d.ts +62 -0
- package/dist/types/physics/Contact.d.ts.map +1 -0
- package/dist/types/physics/ContactSolver.d.ts +29 -0
- package/dist/types/physics/ContactSolver.d.ts.map +1 -0
- package/dist/types/physics/PhysicsWorld.d.ts +78 -0
- package/dist/types/physics/PhysicsWorld.d.ts.map +1 -0
- package/dist/types/physics/PhysicsWorldOptions.d.ts +24 -0
- package/dist/types/physics/PhysicsWorldOptions.d.ts.map +1 -0
- package/dist/types/physics/SpatialHash.d.ts +23 -0
- package/dist/types/physics/SpatialHash.d.ts.map +1 -0
- package/dist/types/physics/collide.d.ts +27 -0
- package/dist/types/physics/collide.d.ts.map +1 -0
- package/dist/types/physics/collidePolygon.d.ts +14 -0
- package/dist/types/physics/collidePolygon.d.ts.map +1 -0
- package/dist/types/physics/contactReport.d.ts +8 -0
- package/dist/types/physics/contactReport.d.ts.map +1 -0
- package/dist/types/physics/drawColliders.d.ts +43 -0
- package/dist/types/physics/drawColliders.d.ts.map +1 -0
- package/dist/types/physics/physicsSystem.d.ts +5 -0
- package/dist/types/physics/physicsSystem.d.ts.map +1 -0
- package/dist/types/physics/polygon.d.ts +28 -0
- package/dist/types/physics/polygon.d.ts.map +1 -0
- package/dist/types/physics/raycast.d.ts +19 -0
- package/dist/types/physics/raycast.d.ts.map +1 -0
- package/dist/types/physics/syncToBody.d.ts +16 -0
- package/dist/types/physics/syncToBody.d.ts.map +1 -0
- package/dist/types/physics/tileBodies.d.ts +36 -0
- package/dist/types/physics/tileBodies.d.ts.map +1 -0
- package/dist/types/physics/types.d.ts +116 -0
- package/dist/types/physics/types.d.ts.map +1 -0
- package/dist/types/pixel/Darkness.d.ts +78 -0
- package/dist/types/pixel/Darkness.d.ts.map +1 -0
- package/dist/types/pixel/DitherVignette.d.ts +35 -0
- package/dist/types/pixel/DitherVignette.d.ts.map +1 -0
- package/dist/types/pixel/Evaporation.d.ts +30 -0
- package/dist/types/pixel/Evaporation.d.ts.map +1 -0
- package/dist/types/pixel/NightShade.d.ts +38 -0
- package/dist/types/pixel/NightShade.d.ts.map +1 -0
- package/dist/types/pixel/PixelLayer.d.ts +85 -0
- package/dist/types/pixel/PixelLayer.d.ts.map +1 -0
- package/dist/types/pixel/SwayProp.d.ts +52 -0
- package/dist/types/pixel/SwayProp.d.ts.map +1 -0
- package/dist/types/pixel/index.d.ts +31 -0
- package/dist/types/pixel/index.d.ts.map +1 -0
- package/dist/types/pixel/lights.d.ts +34 -0
- package/dist/types/pixel/lights.d.ts.map +1 -0
- package/dist/types/pixel/nineSlice.d.ts +71 -0
- package/dist/types/pixel/nineSlice.d.ts.map +1 -0
- package/dist/types/pixel/paintLayer.d.ts +35 -0
- package/dist/types/pixel/paintLayer.d.ts.map +1 -0
- package/dist/types/pixel/palette.d.ts +58 -0
- package/dist/types/pixel/palette.d.ts.map +1 -0
- package/dist/types/pixel/pixel.d.ts +80 -0
- package/dist/types/pixel/pixel.d.ts.map +1 -0
- package/dist/types/pixel/pixelPaint.d.ts +43 -0
- package/dist/types/pixel/pixelPaint.d.ts.map +1 -0
- package/dist/types/pixel/pixelTone.d.ts +51 -0
- package/dist/types/pixel/pixelTone.d.ts.map +1 -0
- package/dist/types/pixel/propKit.d.ts +26 -0
- package/dist/types/pixel/propKit.d.ts.map +1 -0
- package/dist/types/pixel/ramp.d.ts +57 -0
- package/dist/types/pixel/ramp.d.ts.map +1 -0
- package/dist/types/pixel/selout.d.ts +3 -0
- package/dist/types/pixel/selout.d.ts.map +1 -0
- package/dist/types/pixel/spritePixels.d.ts +29 -0
- package/dist/types/pixel/spritePixels.d.ts.map +1 -0
- package/dist/types/pixel/swayRig.d.ts +72 -0
- package/dist/types/pixel/swayRig.d.ts.map +1 -0
- package/dist/types/pixel/vignetteMask.d.ts +16 -0
- package/dist/types/pixel/vignetteMask.d.ts.map +1 -0
- package/dist/types/pixel/weatherArt.d.ts +29 -0
- package/dist/types/pixel/weatherArt.d.ts.map +1 -0
- package/dist/types/platform/touch.d.ts +10 -0
- package/dist/types/platform/touch.d.ts.map +1 -0
- package/dist/types/postfx/BloomFilter.d.ts +33 -0
- package/dist/types/postfx/BloomFilter.d.ts.map +1 -0
- package/dist/types/postfx/ChromaticAberrationFilter.d.ts +11 -0
- package/dist/types/postfx/ChromaticAberrationFilter.d.ts.map +1 -0
- package/dist/types/postfx/ColorAdjustFilter.d.ts +32 -0
- package/dist/types/postfx/ColorAdjustFilter.d.ts.map +1 -0
- package/dist/types/postfx/CrtFilter.d.ts +16 -0
- package/dist/types/postfx/CrtFilter.d.ts.map +1 -0
- package/dist/types/postfx/PixelateFilter.d.ts +8 -0
- package/dist/types/postfx/PixelateFilter.d.ts.map +1 -0
- package/dist/types/postfx/PostFx.d.ts +92 -0
- package/dist/types/postfx/PostFx.d.ts.map +1 -0
- package/dist/types/postfx/ShockwaveFilter.d.ts +20 -0
- package/dist/types/postfx/ShockwaveFilter.d.ts.map +1 -0
- package/dist/types/postfx/VignetteFilter.d.ts +19 -0
- package/dist/types/postfx/VignetteFilter.d.ts.map +1 -0
- package/dist/types/postfx/fxAnimator.d.ts +32 -0
- package/dist/types/postfx/fxAnimator.d.ts.map +1 -0
- package/dist/types/postfx/fxShader.d.ts +49 -0
- package/dist/types/postfx/fxShader.d.ts.map +1 -0
- package/dist/types/postfx/index.d.ts +11 -0
- package/dist/types/postfx/index.d.ts.map +1 -0
- package/dist/types/react/ChoiceDialog.d.ts +8 -0
- package/dist/types/react/ChoiceDialog.d.ts.map +1 -0
- package/dist/types/react/ConfirmDialog.d.ts +9 -0
- package/dist/types/react/ConfirmDialog.d.ts.map +1 -0
- package/dist/types/react/Glyph.d.ts +54 -0
- package/dist/types/react/Glyph.d.ts.map +1 -0
- package/dist/types/react/Modal.d.ts +22 -0
- package/dist/types/react/Modal.d.ts.map +1 -0
- package/dist/types/react/Panel.d.ts +29 -0
- package/dist/types/react/Panel.d.ts.map +1 -0
- package/dist/types/react/PixelImage.d.ts +19 -0
- package/dist/types/react/PixelImage.d.ts.map +1 -0
- package/dist/types/react/Select.d.ts +27 -0
- package/dist/types/react/Select.d.ts.map +1 -0
- package/dist/types/react/Slider.d.ts +24 -0
- package/dist/types/react/Slider.d.ts.map +1 -0
- package/dist/types/react/SplitPane.d.ts +26 -0
- package/dist/types/react/SplitPane.d.ts.map +1 -0
- package/dist/types/react/TabStrip.d.ts +31 -0
- package/dist/types/react/TabStrip.d.ts.map +1 -0
- package/dist/types/react/TitleTips.d.ts +15 -0
- package/dist/types/react/TitleTips.d.ts.map +1 -0
- package/dist/types/react/Tooltip.d.ts +22 -0
- package/dist/types/react/Tooltip.d.ts.map +1 -0
- package/dist/types/react/UiProvider.d.ts +52 -0
- package/dist/types/react/UiProvider.d.ts.map +1 -0
- package/dist/types/react/baseCss.d.ts +27 -0
- package/dist/types/react/baseCss.d.ts.map +1 -0
- package/dist/types/react/choiceStore.d.ts +34 -0
- package/dist/types/react/choiceStore.d.ts.map +1 -0
- package/dist/types/react/classNames.d.ts +12 -0
- package/dist/types/react/classNames.d.ts.map +1 -0
- package/dist/types/react/confirmStore.d.ts +30 -0
- package/dist/types/react/confirmStore.d.ts.map +1 -0
- package/dist/types/react/index.d.ts +33 -0
- package/dist/types/react/index.d.ts.map +1 -0
- package/dist/types/react/labels.d.ts +24 -0
- package/dist/types/react/labels.d.ts.map +1 -0
- package/dist/types/react/placement.d.ts +59 -0
- package/dist/types/react/placement.d.ts.map +1 -0
- package/dist/types/react/useFillSheet.d.ts +9 -0
- package/dist/types/react/useFillSheet.d.ts.map +1 -0
- package/dist/types/react/useFitToViewport.d.ts +20 -0
- package/dist/types/react/useFitToViewport.d.ts.map +1 -0
- package/dist/types/react/usePicked.d.ts +9 -0
- package/dist/types/react/usePicked.d.ts.map +1 -0
- package/dist/types/react/useStore.d.ts +8 -0
- package/dist/types/react/useStore.d.ts.map +1 -0
- package/dist/types/react/useViewport.d.ts +4 -0
- package/dist/types/react/useViewport.d.ts.map +1 -0
- package/dist/types/rig/PosePlayer.d.ts +64 -0
- package/dist/types/rig/PosePlayer.d.ts.map +1 -0
- package/dist/types/rig/RigView.d.ts +68 -0
- package/dist/types/rig/RigView.d.ts.map +1 -0
- package/dist/types/rig/Skeleton.d.ts +14 -0
- package/dist/types/rig/Skeleton.d.ts.map +1 -0
- package/dist/types/rig/humanoid.d.ts +4 -0
- package/dist/types/rig/humanoid.d.ts.map +1 -0
- package/dist/types/rig/humanoidPoses.d.ts +117 -0
- package/dist/types/rig/humanoidPoses.d.ts.map +1 -0
- package/dist/types/rig/poseMath.d.ts +14 -0
- package/dist/types/rig/poseMath.d.ts.map +1 -0
- package/dist/types/rig/rigTypes.d.ts +82 -0
- package/dist/types/rig/rigTypes.d.ts.map +1 -0
- package/dist/types/save/Autosaver.d.ts +43 -0
- package/dist/types/save/Autosaver.d.ts.map +1 -0
- package/dist/types/save/MemoryBackend.d.ts +10 -0
- package/dist/types/save/MemoryBackend.d.ts.map +1 -0
- package/dist/types/save/SaveBackend.d.ts +14 -0
- package/dist/types/save/SaveBackend.d.ts.map +1 -0
- package/dist/types/save/SaveStore.d.ts +73 -0
- package/dist/types/save/SaveStore.d.ts.map +1 -0
- package/dist/types/save/WebStorageBackend.d.ts +14 -0
- package/dist/types/save/WebStorageBackend.d.ts.map +1 -0
- package/dist/types/save/checksum.d.ts +7 -0
- package/dist/types/save/checksum.d.ts.map +1 -0
- package/dist/types/save/migrateSave.d.ts +17 -0
- package/dist/types/save/migrateSave.d.ts.map +1 -0
- package/dist/types/settings.d.ts +25 -0
- package/dist/types/settings.d.ts.map +1 -0
- package/dist/types/tilemap/TilemapView.d.ts +42 -0
- package/dist/types/tilemap/TilemapView.d.ts.map +1 -0
- package/dist/types/tilemap/collision.d.ts +16 -0
- package/dist/types/tilemap/collision.d.ts.map +1 -0
- package/dist/types/tilemap/tiled.d.ts +104 -0
- package/dist/types/tilemap/tiled.d.ts.map +1 -0
- package/dist/types/transitions/CrossfadeTransition.d.ts +20 -0
- package/dist/types/transitions/CrossfadeTransition.d.ts.map +1 -0
- package/dist/types/transitions/DitherWipeTransition.d.ts +35 -0
- package/dist/types/transitions/DitherWipeTransition.d.ts.map +1 -0
- package/dist/types/transitions/FadeTransition.d.ts +20 -0
- package/dist/types/transitions/FadeTransition.d.ts.map +1 -0
- package/dist/types/transitions/Letterbox.d.ts +33 -0
- package/dist/types/transitions/Letterbox.d.ts.map +1 -0
- package/dist/types/transitions/Transition.d.ts +22 -0
- package/dist/types/transitions/Transition.d.ts.map +1 -0
- package/dist/types/transitions/ditherMask.d.ts +13 -0
- package/dist/types/transitions/ditherMask.d.ts.map +1 -0
- package/dist/types/transitions/transitionTo.d.ts +16 -0
- package/dist/types/transitions/transitionTo.d.ts.map +1 -0
- package/dist/types/transitions/tweenDone.d.ts +5 -0
- package/dist/types/transitions/tweenDone.d.ts.map +1 -0
- package/dist/types/ui/Bar.d.ts +41 -0
- package/dist/types/ui/Bar.d.ts.map +1 -0
- package/dist/types/ui/Button.d.ts +47 -0
- package/dist/types/ui/Button.d.ts.map +1 -0
- package/dist/types/ui/Dialog.d.ts +47 -0
- package/dist/types/ui/Dialog.d.ts.map +1 -0
- package/dist/types/ui/FocusManager.d.ts +53 -0
- package/dist/types/ui/FocusManager.d.ts.map +1 -0
- package/dist/types/ui/Label.d.ts +24 -0
- package/dist/types/ui/Label.d.ts.map +1 -0
- package/dist/types/ui/List.d.ts +23 -0
- package/dist/types/ui/List.d.ts.map +1 -0
- package/dist/types/ui/Panel.d.ts +38 -0
- package/dist/types/ui/Panel.d.ts.map +1 -0
- package/dist/types/ui/ScrollView.d.ts +56 -0
- package/dist/types/ui/ScrollView.d.ts.map +1 -0
- package/dist/types/ui/Slider.d.ts +47 -0
- package/dist/types/ui/Slider.d.ts.map +1 -0
- package/dist/types/ui/Stack.d.ts +16 -0
- package/dist/types/ui/Stack.d.ts.map +1 -0
- package/dist/types/ui/Toggle.d.ts +31 -0
- package/dist/types/ui/Toggle.d.ts.map +1 -0
- package/dist/types/ui/UiHost.d.ts +18 -0
- package/dist/types/ui/UiHost.d.ts.map +1 -0
- package/dist/types/ui/UiPointerGate.d.ts +17 -0
- package/dist/types/ui/UiPointerGate.d.ts.map +1 -0
- package/dist/types/ui/UiRoot.d.ts +73 -0
- package/dist/types/ui/UiRoot.d.ts.map +1 -0
- package/dist/types/ui/Widget.d.ts +56 -0
- package/dist/types/ui/Widget.d.ts.map +1 -0
- package/dist/types/ui/dom/DomOverlay.d.ts +52 -0
- package/dist/types/ui/dom/DomOverlay.d.ts.map +1 -0
- package/dist/types/ui/dom/DomWorldAnchors.d.ts +50 -0
- package/dist/types/ui/dom/DomWorldAnchors.d.ts.map +1 -0
- package/dist/types/ui/dom/InputShield.d.ts +20 -0
- package/dist/types/ui/dom/InputShield.d.ts.map +1 -0
- package/dist/types/ui/dom/createStore.d.ts +22 -0
- package/dist/types/ui/dom/createStore.d.ts.map +1 -0
- package/dist/types/ui/dom/shieldDecision.d.ts +34 -0
- package/dist/types/ui/dom/shieldDecision.d.ts.map +1 -0
- package/dist/types/ui/dom/worldToScreen.d.ts +24 -0
- package/dist/types/ui/dom/worldToScreen.d.ts.map +1 -0
- package/dist/types/ui/index.d.ts +38 -0
- package/dist/types/ui/index.d.ts.map +1 -0
- package/dist/types/ui/layout/anchor.d.ts +9 -0
- package/dist/types/ui/layout/anchor.d.ts.map +1 -0
- package/dist/types/ui/layout/barDrain.d.ts +25 -0
- package/dist/types/ui/layout/barDrain.d.ts.map +1 -0
- package/dist/types/ui/layout/fitToViewport.d.ts +32 -0
- package/dist/types/ui/layout/fitToViewport.d.ts.map +1 -0
- package/dist/types/ui/layout/focusNav.d.ts +13 -0
- package/dist/types/ui/layout/focusNav.d.ts.map +1 -0
- package/dist/types/ui/layout/geometry.d.ts +35 -0
- package/dist/types/ui/layout/geometry.d.ts.map +1 -0
- package/dist/types/ui/layout/listWidth.d.ts +13 -0
- package/dist/types/ui/layout/listWidth.d.ts.map +1 -0
- package/dist/types/ui/layout/placeTooltip.d.ts +23 -0
- package/dist/types/ui/layout/placeTooltip.d.ts.map +1 -0
- package/dist/types/ui/layout/scroll.d.ts +17 -0
- package/dist/types/ui/layout/scroll.d.ts.map +1 -0
- package/dist/types/ui/layout/slider.d.ts +7 -0
- package/dist/types/ui/layout/slider.d.ts.map +1 -0
- package/dist/types/ui/layout/stack.d.ts +26 -0
- package/dist/types/ui/layout/stack.d.ts.map +1 -0
- package/dist/types/ui/layout/wrapRow.d.ts +6 -0
- package/dist/types/ui/layout/wrapRow.d.ts.map +1 -0
- package/dist/ui/Bar.js +54 -0
- package/dist/ui/Bar.js.map +1 -0
- package/dist/ui/Button.js +58 -0
- package/dist/ui/Button.js.map +1 -0
- package/dist/ui/Dialog.js +56 -0
- package/dist/ui/Dialog.js.map +1 -0
- package/dist/ui/FocusManager.js +97 -0
- package/dist/ui/FocusManager.js.map +1 -0
- package/dist/ui/Label.js +36 -0
- package/dist/ui/Label.js.map +1 -0
- package/dist/ui/List.js +45 -0
- package/dist/ui/List.js.map +1 -0
- package/dist/ui/Panel.js +38 -0
- package/dist/ui/Panel.js.map +1 -0
- package/dist/ui/ScrollView.js +96 -0
- package/dist/ui/ScrollView.js.map +1 -0
- package/dist/ui/Slider.js +55 -0
- package/dist/ui/Slider.js.map +1 -0
- package/dist/ui/Stack.js +28 -0
- package/dist/ui/Stack.js.map +1 -0
- package/dist/ui/Toggle.js +37 -0
- package/dist/ui/Toggle.js.map +1 -0
- package/dist/ui/UiHost.js +9 -0
- package/dist/ui/UiHost.js.map +1 -0
- package/dist/ui/UiPointerGate.js +25 -0
- package/dist/ui/UiPointerGate.js.map +1 -0
- package/dist/ui/UiRoot.js +93 -0
- package/dist/ui/UiRoot.js.map +1 -0
- package/dist/ui/Widget.js +90 -0
- package/dist/ui/Widget.js.map +1 -0
- package/dist/ui/dom/DomOverlay.js +59 -0
- package/dist/ui/dom/DomOverlay.js.map +1 -0
- package/dist/ui/dom/DomWorldAnchors.js +59 -0
- package/dist/ui/dom/DomWorldAnchors.js.map +1 -0
- package/dist/ui/dom/InputShield.js +27 -0
- package/dist/ui/dom/InputShield.js.map +1 -0
- package/dist/ui/dom/createStore.js +42 -0
- package/dist/ui/dom/createStore.js.map +1 -0
- package/dist/ui/dom/shieldDecision.js +36 -0
- package/dist/ui/dom/shieldDecision.js.map +1 -0
- package/dist/ui/dom/worldToScreen.js +11 -0
- package/dist/ui/dom/worldToScreen.js.map +1 -0
- package/dist/ui/layout/anchor.js +20 -0
- package/dist/ui/layout/anchor.js.map +1 -0
- package/dist/ui/layout/barDrain.js +25 -0
- package/dist/ui/layout/barDrain.js.map +1 -0
- package/dist/ui/layout/fitToViewport.js +17 -0
- package/dist/ui/layout/fitToViewport.js.map +1 -0
- package/dist/ui/layout/focusNav.js +42 -0
- package/dist/ui/layout/focusNav.js.map +1 -0
- package/dist/ui/layout/geometry.js +21 -0
- package/dist/ui/layout/geometry.js.map +1 -0
- package/dist/ui/layout/listWidth.js +10 -0
- package/dist/ui/layout/listWidth.js.map +1 -0
- package/dist/ui/layout/placeTooltip.js +28 -0
- package/dist/ui/layout/placeTooltip.js.map +1 -0
- package/dist/ui/layout/scroll.js +24 -0
- package/dist/ui/layout/scroll.js.map +1 -0
- package/dist/ui/layout/slider.js +20 -0
- package/dist/ui/layout/slider.js.map +1 -0
- package/dist/ui/layout/stack.js +27 -0
- package/dist/ui/layout/stack.js.map +1 -0
- package/dist/ui/layout/wrapRow.js +13 -0
- package/dist/ui/layout/wrapRow.js.map +1 -0
- package/dist/ui.js +85 -0
- package/dist/ui.js.map +1 -0
- package/package.json +115 -4
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
import { Filter as p, UniformGroup as a, Texture as f, GpuProgram as m, GlProgram as c } from "pixi.js";
|
|
2
|
+
const l = { f32: "float", "vec2<f32>": "vec2", "vec3<f32>": "vec3", "vec4<f32>": "vec4" }, s = `in vec2 aPosition;
|
|
3
|
+
out vec2 vTextureCoord;
|
|
4
|
+
uniform vec4 uInputSize;
|
|
5
|
+
uniform vec4 uOutputFrame;
|
|
6
|
+
uniform vec4 uOutputTexture;
|
|
7
|
+
void main(void) {
|
|
8
|
+
vec2 position = aPosition * uOutputFrame.zw + uOutputFrame.xy;
|
|
9
|
+
position.x = position.x * (2.0 / uOutputTexture.x) - 1.0;
|
|
10
|
+
position.y = position.y * (2.0 * uOutputTexture.z / uOutputTexture.y) - uOutputTexture.z;
|
|
11
|
+
gl_Position = vec4(position, 0.0, 1.0);
|
|
12
|
+
vTextureCoord = aPosition * (uOutputFrame.zw * uInputSize.zw);
|
|
13
|
+
}
|
|
14
|
+
`;
|
|
15
|
+
function v(e) {
|
|
16
|
+
const u = Object.entries(e.uniforms).map(([t, r]) => `uniform ${l[r.type]} ${t};`).join(`
|
|
17
|
+
`);
|
|
18
|
+
return `in vec2 vTextureCoord;
|
|
19
|
+
out vec4 finalColor;
|
|
20
|
+
uniform sampler2D uTexture;
|
|
21
|
+
${e.map ? "uniform sampler2D uMap;" : ""}
|
|
22
|
+
uniform vec4 uInputSize;
|
|
23
|
+
uniform vec4 uInputClamp;
|
|
24
|
+
uniform vec4 uOutputFrame;
|
|
25
|
+
${u}
|
|
26
|
+
vec4 sampleAt(vec2 c) { return texture(uTexture, clamp(c, uInputClamp.xy, uInputClamp.zw)); }
|
|
27
|
+
${e.map ? "vec4 sampleMap(vec2 c) { return texture(uMap, clamp(c, uInputClamp.xy, uInputClamp.zw)); }" : ""}
|
|
28
|
+
vec2 toCoord(vec2 uv) { return uv * uOutputFrame.zw * uInputSize.zw; }
|
|
29
|
+
void main(void) {
|
|
30
|
+
vec2 coord = vTextureCoord;
|
|
31
|
+
vec2 framePx = uOutputFrame.zw;
|
|
32
|
+
vec2 frameUv = coord * uInputSize.xy / framePx;
|
|
33
|
+
vec2 texel = uInputSize.zw;
|
|
34
|
+
vec4 src = texture(uTexture, coord);
|
|
35
|
+
vec4 result = src;
|
|
36
|
+
${e.glsl}
|
|
37
|
+
finalColor = result;
|
|
38
|
+
}
|
|
39
|
+
`;
|
|
40
|
+
}
|
|
41
|
+
function x(e) {
|
|
42
|
+
return `struct GlobalFilterUniforms {
|
|
43
|
+
uInputSize: vec4<f32>,
|
|
44
|
+
uInputPixel: vec4<f32>,
|
|
45
|
+
uInputClamp: vec4<f32>,
|
|
46
|
+
uOutputFrame: vec4<f32>,
|
|
47
|
+
uGlobalFrame: vec4<f32>,
|
|
48
|
+
uOutputTexture: vec4<f32>,
|
|
49
|
+
};
|
|
50
|
+
struct FxUniforms {
|
|
51
|
+
${Object.entries(e.uniforms).map(([t, r]) => ` ${t}: ${r.type},`).join(`
|
|
52
|
+
`)}
|
|
53
|
+
};
|
|
54
|
+
@group(0) @binding(0) var<uniform> gfu: GlobalFilterUniforms;
|
|
55
|
+
@group(0) @binding(1) var uTexture: texture_2d<f32>;
|
|
56
|
+
@group(0) @binding(2) var uSampler: sampler;
|
|
57
|
+
@group(1) @binding(0) var<uniform> fx: FxUniforms;
|
|
58
|
+
${e.map ? "@group(1) @binding(1) var uMap: texture_2d<f32>;" : ""}
|
|
59
|
+
struct VSOutput {
|
|
60
|
+
@builtin(position) position: vec4<f32>,
|
|
61
|
+
@location(0) uv: vec2<f32>,
|
|
62
|
+
};
|
|
63
|
+
@vertex
|
|
64
|
+
fn mainVertex(@location(0) aPosition: vec2<f32>) -> VSOutput {
|
|
65
|
+
var position = aPosition * gfu.uOutputFrame.zw + gfu.uOutputFrame.xy;
|
|
66
|
+
position.x = position.x * (2.0 / gfu.uOutputTexture.x) - 1.0;
|
|
67
|
+
position.y = position.y * (2.0 * gfu.uOutputTexture.z / gfu.uOutputTexture.y) - gfu.uOutputTexture.z;
|
|
68
|
+
return VSOutput(vec4<f32>(position, 0.0, 1.0), aPosition * (gfu.uOutputFrame.zw * gfu.uInputSize.zw));
|
|
69
|
+
}
|
|
70
|
+
fn sampleAt(c: vec2<f32>) -> vec4<f32> { return textureSampleLevel(uTexture, uSampler, clamp(c, gfu.uInputClamp.xy, gfu.uInputClamp.zw), 0.0); }
|
|
71
|
+
${e.map ? "fn sampleMap(c: vec2<f32>) -> vec4<f32> { return textureSampleLevel(uMap, uSampler, clamp(c, gfu.uInputClamp.xy, gfu.uInputClamp.zw), 0.0); }" : ""}
|
|
72
|
+
fn toCoord(uv: vec2<f32>) -> vec2<f32> { return uv * gfu.uOutputFrame.zw * gfu.uInputSize.zw; }
|
|
73
|
+
@fragment
|
|
74
|
+
fn mainFragment(@location(0) uv: vec2<f32>) -> @location(0) vec4<f32> {
|
|
75
|
+
let coord = uv;
|
|
76
|
+
let framePx = gfu.uOutputFrame.zw;
|
|
77
|
+
let frameUv = coord * gfu.uInputSize.xy / framePx;
|
|
78
|
+
let texel = gfu.uInputSize.zw;
|
|
79
|
+
let src = textureSampleLevel(uTexture, uSampler, coord, 0.0);
|
|
80
|
+
var result = src;
|
|
81
|
+
${e.wgsl}
|
|
82
|
+
return result;
|
|
83
|
+
}
|
|
84
|
+
`;
|
|
85
|
+
}
|
|
86
|
+
class z extends p {
|
|
87
|
+
fxName;
|
|
88
|
+
group;
|
|
89
|
+
constructor(u) {
|
|
90
|
+
const t = {};
|
|
91
|
+
for (const [n, i] of Object.entries(u.uniforms)) t[n] = { value: typeof i.value == "number" ? i.value : new Float32Array(i.value), type: i.type };
|
|
92
|
+
const r = new a(t), o = x(u);
|
|
93
|
+
super({
|
|
94
|
+
// highp: the uniforms the vertex shader shares with it must match its precision, or the program will not link
|
|
95
|
+
glProgram: c.from({ vertex: s, fragment: v(u), name: `fx-${u.name}`, preferredFragmentPrecision: "highp" }),
|
|
96
|
+
gpuProgram: m.from({ vertex: { source: o, entryPoint: "mainVertex" }, fragment: { source: o, entryPoint: "mainFragment" } }),
|
|
97
|
+
resources: u.map ? { fxUniforms: r, uMap: f.WHITE.source } : { fxUniforms: r },
|
|
98
|
+
// as sharp as the canvas: a pixel game's effects land on its own pixels
|
|
99
|
+
resolution: "inherit"
|
|
100
|
+
}), this.fxName = u.name, this.group = r;
|
|
101
|
+
}
|
|
102
|
+
/** A uniform's value (a number, or the live array of a vector). */
|
|
103
|
+
get(u) {
|
|
104
|
+
return this.group.uniforms[u];
|
|
105
|
+
}
|
|
106
|
+
/** Sets a number uniform, or the components of a vector one. */
|
|
107
|
+
set(u, ...t) {
|
|
108
|
+
const r = this.group.uniforms, o = r[u];
|
|
109
|
+
if (o === void 0) throw new Error(`${this.fxName}: no uniform '${u}'`);
|
|
110
|
+
if (typeof o == "number") r[u] = t[0] ?? 0;
|
|
111
|
+
else for (let n = 0; n < o.length && n < t.length; n++) o[n] = t[n];
|
|
112
|
+
return this.group.update(), this;
|
|
113
|
+
}
|
|
114
|
+
/** A number uniform, for the subclasses' getters. */
|
|
115
|
+
num(u) {
|
|
116
|
+
return this.group.uniforms[u];
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
function d(e) {
|
|
120
|
+
return [(e >> 16 & 255) / 255, (e >> 8 & 255) / 255, (e & 255) / 255];
|
|
121
|
+
}
|
|
122
|
+
export {
|
|
123
|
+
z as FxFilter,
|
|
124
|
+
v as glslSource,
|
|
125
|
+
d as rgb,
|
|
126
|
+
x as wgslSource
|
|
127
|
+
};
|
|
128
|
+
//# sourceMappingURL=fxShader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fxShader.js","sources":["../../src/postfx/fxShader.ts"],"sourcesContent":["import { Filter, GlProgram, GpuProgram, Texture, UniformGroup } from 'pixi.js';\n\n/** The uniform types an effect may declare. */\nexport type FxUniformType = 'f32' | 'vec2<f32>' | 'vec3<f32>' | 'vec4<f32>';\n\nexport interface FxUniform {\n type: FxUniformType;\n value: number | Float32Array;\n}\n\nexport type FxUniforms = Record<string, FxUniform>;\n\n/**\n * One effect's shader: its uniforms, and the body of its fragment function in GLSL (WebGL 2) and WGSL (WebGPU).\n *\n * Both bodies are given the same helpers, so they read alike:\n * - `frameUv` (vec2): 0–1 across the filtered area, whatever the size of the texture Pixi hands over;\n * - `framePx` (vec2): the filtered area's size in pixels; `texel` (vec2): one input pixel in texture coordinates;\n * - `sampleAt(coord)`: the input at a texture coordinate, clamped inside the area; `toCoord(uv)`: frame uv back to one;\n * - `coord`: this fragment's texture coordinate; `src`: the input there (premultiplied alpha);\n * - `uMap` / `sampleMap(coord)` when the effect has a second texture (`map: true`).\n * GLSL reads its uniforms by name; WGSL through `fx.<name>`. Each body ends by writing `result`.\n */\nexport interface FxShaderSpec {\n name: string;\n uniforms: FxUniforms;\n glsl: string;\n wgsl: string;\n /** A second texture the effect samples (bloom's blurred light). */\n map?: boolean;\n}\n\nconst GLSL_TYPE: Record<FxUniformType, string> = { f32: 'float', 'vec2<f32>': 'vec2', 'vec3<f32>': 'vec3', 'vec4<f32>': 'vec4' };\n\nconst VERTEX_GLSL = `in vec2 aPosition;\nout vec2 vTextureCoord;\nuniform vec4 uInputSize;\nuniform vec4 uOutputFrame;\nuniform vec4 uOutputTexture;\nvoid main(void) {\n vec2 position = aPosition * uOutputFrame.zw + uOutputFrame.xy;\n position.x = position.x * (2.0 / uOutputTexture.x) - 1.0;\n position.y = position.y * (2.0 * uOutputTexture.z / uOutputTexture.y) - uOutputTexture.z;\n gl_Position = vec4(position, 0.0, 1.0);\n vTextureCoord = aPosition * (uOutputFrame.zw * uInputSize.zw);\n}\n`;\n\n/** The GLSL fragment shader of an effect. */\nexport function glslSource(spec: FxShaderSpec): string {\n const decl = Object.entries(spec.uniforms)\n .map(([n, u]) => `uniform ${GLSL_TYPE[u.type]} ${n};`)\n .join('\\n');\n return `in vec2 vTextureCoord;\nout vec4 finalColor;\nuniform sampler2D uTexture;\n${spec.map ? 'uniform sampler2D uMap;' : ''}\nuniform vec4 uInputSize;\nuniform vec4 uInputClamp;\nuniform vec4 uOutputFrame;\n${decl}\nvec4 sampleAt(vec2 c) { return texture(uTexture, clamp(c, uInputClamp.xy, uInputClamp.zw)); }\n${spec.map ? 'vec4 sampleMap(vec2 c) { return texture(uMap, clamp(c, uInputClamp.xy, uInputClamp.zw)); }' : ''}\nvec2 toCoord(vec2 uv) { return uv * uOutputFrame.zw * uInputSize.zw; }\nvoid main(void) {\n vec2 coord = vTextureCoord;\n vec2 framePx = uOutputFrame.zw;\n vec2 frameUv = coord * uInputSize.xy / framePx;\n vec2 texel = uInputSize.zw;\n vec4 src = texture(uTexture, coord);\n vec4 result = src;\n${spec.glsl}\n finalColor = result;\n}\n`;\n}\n\n/** The WGSL module of an effect (vertex and fragment). */\nexport function wgslSource(spec: FxShaderSpec): string {\n const fields = Object.entries(spec.uniforms)\n .map(([n, u]) => ` ${n}: ${u.type},`)\n .join('\\n');\n return `struct GlobalFilterUniforms {\n uInputSize: vec4<f32>,\n uInputPixel: vec4<f32>,\n uInputClamp: vec4<f32>,\n uOutputFrame: vec4<f32>,\n uGlobalFrame: vec4<f32>,\n uOutputTexture: vec4<f32>,\n};\nstruct FxUniforms {\n${fields}\n};\n@group(0) @binding(0) var<uniform> gfu: GlobalFilterUniforms;\n@group(0) @binding(1) var uTexture: texture_2d<f32>;\n@group(0) @binding(2) var uSampler: sampler;\n@group(1) @binding(0) var<uniform> fx: FxUniforms;\n${spec.map ? '@group(1) @binding(1) var uMap: texture_2d<f32>;' : ''}\nstruct VSOutput {\n @builtin(position) position: vec4<f32>,\n @location(0) uv: vec2<f32>,\n};\n@vertex\nfn mainVertex(@location(0) aPosition: vec2<f32>) -> VSOutput {\n var position = aPosition * gfu.uOutputFrame.zw + gfu.uOutputFrame.xy;\n position.x = position.x * (2.0 / gfu.uOutputTexture.x) - 1.0;\n position.y = position.y * (2.0 * gfu.uOutputTexture.z / gfu.uOutputTexture.y) - gfu.uOutputTexture.z;\n return VSOutput(vec4<f32>(position, 0.0, 1.0), aPosition * (gfu.uOutputFrame.zw * gfu.uInputSize.zw));\n}\nfn sampleAt(c: vec2<f32>) -> vec4<f32> { return textureSampleLevel(uTexture, uSampler, clamp(c, gfu.uInputClamp.xy, gfu.uInputClamp.zw), 0.0); }\n${spec.map ? 'fn sampleMap(c: vec2<f32>) -> vec4<f32> { return textureSampleLevel(uMap, uSampler, clamp(c, gfu.uInputClamp.xy, gfu.uInputClamp.zw), 0.0); }' : ''}\nfn toCoord(uv: vec2<f32>) -> vec2<f32> { return uv * gfu.uOutputFrame.zw * gfu.uInputSize.zw; }\n@fragment\nfn mainFragment(@location(0) uv: vec2<f32>) -> @location(0) vec4<f32> {\n let coord = uv;\n let framePx = gfu.uOutputFrame.zw;\n let frameUv = coord * gfu.uInputSize.xy / framePx;\n let texel = gfu.uInputSize.zw;\n let src = textureSampleLevel(uTexture, uSampler, coord, 0.0);\n var result = src;\n${spec.wgsl}\n return result;\n}\n`;\n}\n\n/**\n * A full-screen effect built from an `FxShaderSpec`: a Pixi `Filter` whose uniforms are read and written by name\n * (`fx.set('strength', 0.5)`, or the subclasses' own properties). Works on both renderers.\n */\nexport class FxFilter extends Filter {\n readonly fxName: string;\n private readonly group: UniformGroup;\n\n constructor(spec: FxShaderSpec) {\n const uniforms: Record<string, { value: number | Float32Array; type: FxUniformType }> = {};\n for (const [n, u] of Object.entries(spec.uniforms)) uniforms[n] = { value: typeof u.value === 'number' ? u.value : new Float32Array(u.value), type: u.type };\n const group = new UniformGroup(uniforms);\n const wgsl = wgslSource(spec);\n super({\n // highp: the uniforms the vertex shader shares with it must match its precision, or the program will not link\n glProgram: GlProgram.from({ vertex: VERTEX_GLSL, fragment: glslSource(spec), name: `fx-${spec.name}`, preferredFragmentPrecision: 'highp' }),\n gpuProgram: GpuProgram.from({ vertex: { source: wgsl, entryPoint: 'mainVertex' }, fragment: { source: wgsl, entryPoint: 'mainFragment' } }),\n resources: spec.map ? { fxUniforms: group, uMap: Texture.WHITE.source } : { fxUniforms: group },\n // as sharp as the canvas: a pixel game's effects land on its own pixels\n resolution: 'inherit',\n });\n this.fxName = spec.name;\n this.group = group;\n }\n\n /** A uniform's value (a number, or the live array of a vector). */\n get(name: string): number | Float32Array {\n return this.group.uniforms[name] as number | Float32Array;\n }\n\n /** Sets a number uniform, or the components of a vector one. */\n set(name: string, ...values: number[]): this {\n const u = this.group.uniforms as Record<string, number | Float32Array>;\n const cur = u[name];\n if (cur === undefined) throw new Error(`${this.fxName}: no uniform '${name}'`);\n if (typeof cur === 'number') u[name] = values[0] ?? 0;\n else for (let i = 0; i < cur.length && i < values.length; i++) cur[i] = values[i]!;\n this.group.update();\n return this;\n }\n\n /** A number uniform, for the subclasses' getters. */\n protected num(name: string): number {\n return this.group.uniforms[name] as number;\n }\n}\n\n/** A 0xRRGGBB colour as three 0–1 channels. */\nexport function rgb(color: number): [number, number, number] {\n return [((color >> 16) & 0xff) / 255, ((color >> 8) & 0xff) / 255, (color & 0xff) / 255];\n}\n"],"names":["GLSL_TYPE","VERTEX_GLSL","glslSource","spec","decl","n","u","wgslSource","FxFilter","Filter","uniforms","group","UniformGroup","wgsl","GlProgram","GpuProgram","Texture","name","values","cur","i","rgb","color"],"mappings":"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"}
|
package/dist/postfx.js
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { PostFx as t } from "./postfx/PostFx.js";
|
|
2
|
+
import { FxFilter as l, glslSource as x, rgb as i, wgslSource as m } from "./postfx/fxShader.js";
|
|
3
|
+
import { FxAnimator as f } from "./postfx/fxAnimator.js";
|
|
4
|
+
import { VignetteFilter as a } from "./postfx/VignetteFilter.js";
|
|
5
|
+
import { ChromaticAberrationFilter as g } from "./postfx/ChromaticAberrationFilter.js";
|
|
6
|
+
import { PixelateFilter as n } from "./postfx/PixelateFilter.js";
|
|
7
|
+
import { CrtFilter as A } from "./postfx/CrtFilter.js";
|
|
8
|
+
import { ColorAdjustFilter as S } from "./postfx/ColorAdjustFilter.js";
|
|
9
|
+
import { ShockwaveFilter as h } from "./postfx/ShockwaveFilter.js";
|
|
10
|
+
import { BloomFilter as P } from "./postfx/BloomFilter.js";
|
|
11
|
+
export {
|
|
12
|
+
P as BloomFilter,
|
|
13
|
+
g as ChromaticAberrationFilter,
|
|
14
|
+
S as ColorAdjustFilter,
|
|
15
|
+
A as CrtFilter,
|
|
16
|
+
f as FxAnimator,
|
|
17
|
+
l as FxFilter,
|
|
18
|
+
n as PixelateFilter,
|
|
19
|
+
t as PostFx,
|
|
20
|
+
h as ShockwaveFilter,
|
|
21
|
+
a as VignetteFilter,
|
|
22
|
+
x as glslSource,
|
|
23
|
+
i as rgb,
|
|
24
|
+
m as wgslSource
|
|
25
|
+
};
|
|
26
|
+
//# sourceMappingURL=postfx.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"postfx.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { jsxs as s, jsx as c, Fragment as C } from "react/jsx-runtime";
|
|
2
|
+
import { useState as k, useEffect as N, useCallback as f } from "react";
|
|
3
|
+
import { firstChoice as x, answerChoice as a, choiceStore as g } from "./choiceStore.js";
|
|
4
|
+
import { Modal as v } from "./Modal.js";
|
|
5
|
+
import { useStore as S } from "./useStore.js";
|
|
6
|
+
import { useCx as j, useUi as w } from "./UiProvider.js";
|
|
7
|
+
const y = (t) => t.pending;
|
|
8
|
+
function U({ width: t = 400 }) {
|
|
9
|
+
const e = j(), r = w(), o = S(g, y), [n, m] = k(null);
|
|
10
|
+
N(() => m(o ? x(o.options) : null), [o]);
|
|
11
|
+
const h = f(() => a(null), []), p = f(() => {
|
|
12
|
+
n && a(n);
|
|
13
|
+
}, [n]);
|
|
14
|
+
return o ? /* @__PURE__ */ s(
|
|
15
|
+
v,
|
|
16
|
+
{
|
|
17
|
+
width: t,
|
|
18
|
+
onCancel: h,
|
|
19
|
+
onConfirm: p,
|
|
20
|
+
className: e("e1681-choice"),
|
|
21
|
+
actions: /* @__PURE__ */ s(C, { children: [
|
|
22
|
+
/* @__PURE__ */ c("button", { type: "button", className: e("e1681-button ghost"), onClick: h, children: o.cancel ?? r.labels.cancel }),
|
|
23
|
+
/* @__PURE__ */ c("button", { type: "button", className: e("e1681-button"), disabled: !n, onClick: p, children: o.confirm ?? r.labels.choose })
|
|
24
|
+
] }),
|
|
25
|
+
children: [
|
|
26
|
+
/* @__PURE__ */ c("div", { className: e("e1681-confirm-text"), children: o.text }),
|
|
27
|
+
/* @__PURE__ */ c("div", { className: e("e1681-choice-list"), role: "listbox", children: o.options.map(({ id: i, label: b, icon: u, note: d, disabled: l }) => /* @__PURE__ */ s(
|
|
28
|
+
"div",
|
|
29
|
+
{
|
|
30
|
+
role: "option",
|
|
31
|
+
"aria-selected": n === i,
|
|
32
|
+
"aria-disabled": l || void 0,
|
|
33
|
+
className: e(`e1681-row e1681-pickable${n === i ? " picked" : ""}${l ? " disabled" : ""}`),
|
|
34
|
+
onClick: () => !l && m(i),
|
|
35
|
+
onDoubleClick: () => !l && a(i),
|
|
36
|
+
children: [
|
|
37
|
+
u !== void 0 && /* @__PURE__ */ c("span", { className: e("e1681-choice-icon"), children: u }),
|
|
38
|
+
/* @__PURE__ */ c("span", { className: e("e1681-choice-label"), children: b }),
|
|
39
|
+
d !== void 0 && /* @__PURE__ */ c("span", { className: e("e1681-choice-note"), children: d })
|
|
40
|
+
]
|
|
41
|
+
},
|
|
42
|
+
i
|
|
43
|
+
)) })
|
|
44
|
+
]
|
|
45
|
+
}
|
|
46
|
+
) : null;
|
|
47
|
+
}
|
|
48
|
+
export {
|
|
49
|
+
U as ChoiceDialog
|
|
50
|
+
};
|
|
51
|
+
//# sourceMappingURL=ChoiceDialog.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ChoiceDialog.js","sources":["../../src/react/ChoiceDialog.tsx"],"sourcesContent":["import { useCallback, useEffect, useState } from 'react';\nimport { answerChoice, choiceStore, firstChoice, type ChoiceQuestion } from './choiceStore';\nimport { Modal } from './Modal';\nimport { useStore } from './useStore';\nimport { useUi, useCx } from './UiProvider';\n\nconst selectPending = (s: { pending: ChoiceQuestion | null }) => s.pending;\n\n/**\n * The open `askChoice`, if any: mounted once at the UI's root. A row per option, the first that can be taken picked;\n * Enter takes the picked one, Esc or a press outside cancels.\n */\nexport function ChoiceDialog({ width = 400 }: { width?: number }) {\n const cx = useCx();\n const ui = useUi();\n const pending = useStore(choiceStore, selectPending);\n const [picked, setPicked] = useState<string | null>(null);\n useEffect(() => setPicked(pending ? firstChoice(pending.options) : null), [pending]);\n const cancel = useCallback(() => answerChoice(null), []);\n const confirm = useCallback(() => {\n if (picked) answerChoice(picked);\n }, [picked]);\n if (!pending) return null;\n return (\n <Modal\n width={width}\n onCancel={cancel}\n onConfirm={confirm}\n className={cx('e1681-choice')}\n actions={\n <>\n <button type=\"button\" className={cx('e1681-button ghost')} onClick={cancel}>\n {pending.cancel ?? ui.labels.cancel}\n </button>\n <button type=\"button\" className={cx('e1681-button')} disabled={!picked} onClick={confirm}>\n {pending.confirm ?? ui.labels.choose}\n </button>\n </>\n }\n >\n <div className={cx('e1681-confirm-text')}>{pending.text}</div>\n <div className={cx('e1681-choice-list')} role=\"listbox\">\n {pending.options.map(({ id, label, icon, note, disabled }) => (\n <div\n key={id}\n role=\"option\"\n aria-selected={picked === id}\n aria-disabled={disabled || undefined}\n className={cx(`e1681-row e1681-pickable${picked === id ? ' picked' : ''}${disabled ? ' disabled' : ''}`)}\n onClick={() => !disabled && setPicked(id)}\n onDoubleClick={() => !disabled && answerChoice(id)}\n >\n {icon !== undefined && <span className={cx('e1681-choice-icon')}>{icon}</span>}\n <span className={cx('e1681-choice-label')}>{label}</span>\n {note !== undefined && <span className={cx('e1681-choice-note')}>{note}</span>}\n </div>\n ))}\n </div>\n </Modal>\n );\n}\n"],"names":["selectPending","s","ChoiceDialog","width","cx","useCx","ui","useUi","pending","useStore","choiceStore","picked","setPicked","useState","useEffect","firstChoice","cancel","useCallback","answerChoice","confirm","jsxs","Modal","Fragment","jsx","id","label","icon","note","disabled"],"mappings":";;;;;;AAMA,MAAMA,IAAgB,CAACC,MAA0CA,EAAE;AAM5D,SAASC,EAAa,EAAE,OAAAC,IAAQ,OAA2B;AAChE,QAAMC,IAAKC,EAAA,GACLC,IAAKC,EAAA,GACLC,IAAUC,EAASC,GAAaV,CAAa,GAC7C,CAACW,GAAQC,CAAS,IAAIC,EAAwB,IAAI;AACxD,EAAAC,EAAU,MAAMF,EAAUJ,IAAUO,EAAYP,EAAQ,OAAO,IAAI,IAAI,GAAG,CAACA,CAAO,CAAC;AACnF,QAAMQ,IAASC,EAAY,MAAMC,EAAa,IAAI,GAAG,CAAA,CAAE,GACjDC,IAAUF,EAAY,MAAM;AAChC,IAAIN,OAAqBA,CAAM;AAAA,EACjC,GAAG,CAACA,CAAM,CAAC;AACX,SAAKH,IAEH,gBAAAY;AAAA,IAACC;AAAA,IAAA;AAAA,MACC,OAAAlB;AAAA,MACA,UAAUa;AAAA,MACV,WAAWG;AAAA,MACX,WAAWf,EAAG,cAAc;AAAA,MAC5B,SACE,gBAAAgB,EAAAE,GAAA,EACE,UAAA;AAAA,QAAA,gBAAAC,EAAC,UAAA,EAAO,MAAK,UAAS,WAAWnB,EAAG,oBAAoB,GAAG,SAASY,GACjE,UAAAR,EAAQ,UAAUF,EAAG,OAAO,QAC/B;AAAA,0BACC,UAAA,EAAO,MAAK,UAAS,WAAWF,EAAG,cAAc,GAAG,UAAU,CAACO,GAAQ,SAASQ,GAC9E,YAAQ,WAAWb,EAAG,OAAO,OAAA,CAChC;AAAA,MAAA,GACF;AAAA,MAGF,UAAA;AAAA,QAAA,gBAAAiB,EAAC,SAAI,WAAWnB,EAAG,oBAAoB,GAAI,YAAQ,MAAK;AAAA,0BACvD,OAAA,EAAI,WAAWA,EAAG,mBAAmB,GAAG,MAAK,WAC3C,UAAAI,EAAQ,QAAQ,IAAI,CAAC,EAAE,IAAAgB,GAAI,OAAAC,GAAO,MAAAC,GAAM,MAAAC,GAAM,UAAAC,QAC7C,gBAAAR;AAAA,UAAC;AAAA,UAAA;AAAA,YAEC,MAAK;AAAA,YACL,iBAAeT,MAAWa;AAAA,YAC1B,iBAAeI,KAAY;AAAA,YAC3B,WAAWxB,EAAG,2BAA2BO,MAAWa,IAAK,YAAY,EAAE,GAAGI,IAAW,cAAc,EAAE,EAAE;AAAA,YACvG,SAAS,MAAM,CAACA,KAAYhB,EAAUY,CAAE;AAAA,YACxC,eAAe,MAAM,CAACI,KAAYV,EAAaM,CAAE;AAAA,YAEhD,UAAA;AAAA,cAAAE,MAAS,UAAa,gBAAAH,EAAC,QAAA,EAAK,WAAWnB,EAAG,mBAAmB,GAAI,UAAAsB,GAAK;AAAA,gCACtE,QAAA,EAAK,WAAWtB,EAAG,oBAAoB,GAAI,UAAAqB,GAAM;AAAA,cACjDE,MAAS,UAAa,gBAAAJ,EAAC,QAAA,EAAK,WAAWnB,EAAG,mBAAmB,GAAI,UAAAuB,EAAA,CAAK;AAAA,YAAA;AAAA,UAAA;AAAA,UAVlEH;AAAA,QAAA,CAYR,EAAA,CACH;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA,IAnCiB;AAsCvB;"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { jsxs as m, jsx as t, Fragment as h } from "react/jsx-runtime";
|
|
2
|
+
import { useState as x, useEffect as g, useCallback as f } from "react";
|
|
3
|
+
import { answerConfirm as b, parseQuantity as y, confirmStore as C } from "./confirmStore.js";
|
|
4
|
+
import { Glyph as d } from "./Glyph.js";
|
|
5
|
+
import { Modal as N } from "./Modal.js";
|
|
6
|
+
import { Slider as k } from "./Slider.js";
|
|
7
|
+
import { useStore as q } from "./useStore.js";
|
|
8
|
+
import { useCx as v, useUi as M } from "./UiProvider.js";
|
|
9
|
+
const S = (s) => s.pending;
|
|
10
|
+
function U({ width: s = 360 }) {
|
|
11
|
+
const e = v(), a = M(), n = q(C, S), [o, l] = x(1);
|
|
12
|
+
g(() => l(Math.max(1, n?.max ?? 1)), [n]);
|
|
13
|
+
const c = (n?.max ?? 0) > 1, u = f(() => b(0), []), p = f(() => b(c ? o : 1), [c, o]);
|
|
14
|
+
if (!n) return null;
|
|
15
|
+
const r = n.max;
|
|
16
|
+
return /* @__PURE__ */ m(
|
|
17
|
+
N,
|
|
18
|
+
{
|
|
19
|
+
role: "alertdialog",
|
|
20
|
+
width: s,
|
|
21
|
+
onCancel: u,
|
|
22
|
+
onConfirm: p,
|
|
23
|
+
className: e("e1681-confirm"),
|
|
24
|
+
actions: /* @__PURE__ */ m(h, { children: [
|
|
25
|
+
/* @__PURE__ */ t("button", { type: "button", className: e("e1681-button ghost"), onClick: u, children: n.cancel ?? a.labels.cancel }),
|
|
26
|
+
/* @__PURE__ */ t("button", { type: "button", className: e("e1681-button"), autoFocus: !a.touch, onClick: p, children: n.ok ?? a.labels.ok })
|
|
27
|
+
] }),
|
|
28
|
+
children: [
|
|
29
|
+
/* @__PURE__ */ t("div", { className: e("e1681-confirm-text"), children: n.text }),
|
|
30
|
+
c && /* @__PURE__ */ m("div", { className: e("e1681-confirm-qty"), children: [
|
|
31
|
+
/* @__PURE__ */ t("button", { type: "button", className: e("e1681-button ghost small"), "aria-label": "-1", onClick: () => l(Math.max(1, o - 1)), children: /* @__PURE__ */ t(d, { id: "minus" }) }),
|
|
32
|
+
/* @__PURE__ */ t(k, { value: o, min: 1, max: r, step: 1, format: (i) => `x${i}`, label: a.labels.quantity, onChange: l }),
|
|
33
|
+
/* @__PURE__ */ t("button", { type: "button", className: e("e1681-button ghost small"), "aria-label": "+1", onClick: () => l(Math.min(r, o + 1)), children: /* @__PURE__ */ t(d, { id: "plus" }) }),
|
|
34
|
+
/* @__PURE__ */ t(
|
|
35
|
+
"input",
|
|
36
|
+
{
|
|
37
|
+
className: e("e1681-input e1681-confirm-qty-input"),
|
|
38
|
+
inputMode: "numeric",
|
|
39
|
+
"aria-label": a.labels.quantity,
|
|
40
|
+
value: o,
|
|
41
|
+
onChange: (i) => l(y(i.target.value, r)),
|
|
42
|
+
onFocus: (i) => i.target.select()
|
|
43
|
+
}
|
|
44
|
+
)
|
|
45
|
+
] })
|
|
46
|
+
]
|
|
47
|
+
}
|
|
48
|
+
);
|
|
49
|
+
}
|
|
50
|
+
export {
|
|
51
|
+
U as ConfirmDialog
|
|
52
|
+
};
|
|
53
|
+
//# sourceMappingURL=ConfirmDialog.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ConfirmDialog.js","sources":["../../src/react/ConfirmDialog.tsx"],"sourcesContent":["import { useCallback, useEffect, useState } from 'react';\nimport { answerConfirm, confirmStore, parseQuantity, type ConfirmQuestion } from './confirmStore';\nimport { Glyph } from './Glyph';\nimport { Modal } from './Modal';\nimport { Slider } from './Slider';\nimport { useStore } from './useStore';\nimport { useUi, useCx } from './UiProvider';\n\nconst selectPending = (s: { pending: ConfirmQuestion | null }) => s.pending;\n\n/**\n * The open `askConfirm` / `askQuantity` question, if any: mounted once at the UI's root. Enter confirms, Esc or a\n * press outside cancels. A quantity is asked with a slider, − and + and a field for an exact number (a slider over 99\n * cannot land on 37 with a thumb).\n */\nexport function ConfirmDialog({ width = 360 }: { width?: number }) {\n const cx = useCx();\n const ui = useUi();\n const pending = useStore(confirmStore, selectPending);\n const [qty, setQty] = useState(1);\n useEffect(() => setQty(Math.max(1, pending?.max ?? 1)), [pending]);\n const many = (pending?.max ?? 0) > 1;\n const cancel = useCallback(() => answerConfirm(0), []);\n const confirm = useCallback(() => answerConfirm(many ? qty : 1), [many, qty]);\n if (!pending) return null;\n const max = pending.max;\n return (\n <Modal\n role=\"alertdialog\"\n width={width}\n onCancel={cancel}\n onConfirm={confirm}\n className={cx('e1681-confirm')}\n actions={\n <>\n <button type=\"button\" className={cx('e1681-button ghost')} onClick={cancel}>\n {pending.cancel ?? ui.labels.cancel}\n </button>\n <button type=\"button\" className={cx('e1681-button')} autoFocus={!ui.touch} onClick={confirm}>\n {pending.ok ?? ui.labels.ok}\n </button>\n </>\n }\n >\n <div className={cx('e1681-confirm-text')}>{pending.text}</div>\n {many && (\n <div className={cx('e1681-confirm-qty')}>\n <button type=\"button\" className={cx('e1681-button ghost small')} aria-label=\"-1\" onClick={() => setQty(Math.max(1, qty - 1))}>\n <Glyph id=\"minus\" />\n </button>\n <Slider value={qty} min={1} max={max} step={1} format={(v) => `x${v}`} label={ui.labels.quantity} onChange={setQty} />\n <button type=\"button\" className={cx('e1681-button ghost small')} aria-label=\"+1\" onClick={() => setQty(Math.min(max, qty + 1))}>\n <Glyph id=\"plus\" />\n </button>\n <input\n className={cx('e1681-input e1681-confirm-qty-input')}\n inputMode=\"numeric\"\n aria-label={ui.labels.quantity}\n value={qty}\n onChange={(e) => setQty(parseQuantity(e.target.value, max))}\n onFocus={(e) => e.target.select()}\n />\n </div>\n )}\n </Modal>\n );\n}\n"],"names":["selectPending","ConfirmDialog","width","cx","useCx","ui","useUi","pending","useStore","confirmStore","qty","setQty","useState","useEffect","many","cancel","useCallback","answerConfirm","confirm","max","jsxs","Modal","Fragment","jsx","Glyph","Slider","v","e","parseQuantity"],"mappings":";;;;;;;;AAQA,MAAMA,IAAgB,CAAC,MAA2C,EAAE;AAO7D,SAASC,EAAc,EAAE,OAAAC,IAAQ,OAA2B;AACjE,QAAMC,IAAKC,EAAA,GACLC,IAAKC,EAAA,GACLC,IAAUC,EAASC,GAAcT,CAAa,GAC9C,CAACU,GAAKC,CAAM,IAAIC,EAAS,CAAC;AAChC,EAAAC,EAAU,MAAMF,EAAO,KAAK,IAAI,GAAGJ,GAAS,OAAO,CAAC,CAAC,GAAG,CAACA,CAAO,CAAC;AACjE,QAAMO,KAAQP,GAAS,OAAO,KAAK,GAC7BQ,IAASC,EAAY,MAAMC,EAAc,CAAC,GAAG,CAAA,CAAE,GAC/CC,IAAUF,EAAY,MAAMC,EAAcH,IAAOJ,IAAM,CAAC,GAAG,CAACI,GAAMJ,CAAG,CAAC;AAC5E,MAAI,CAACH,EAAS,QAAO;AACrB,QAAMY,IAAMZ,EAAQ;AACpB,SACE,gBAAAa;AAAA,IAACC;AAAA,IAAA;AAAA,MACC,MAAK;AAAA,MACL,OAAAnB;AAAA,MACA,UAAUa;AAAA,MACV,WAAWG;AAAA,MACX,WAAWf,EAAG,eAAe;AAAA,MAC7B,SACE,gBAAAiB,EAAAE,GAAA,EACE,UAAA;AAAA,QAAA,gBAAAC,EAAC,UAAA,EAAO,MAAK,UAAS,WAAWpB,EAAG,oBAAoB,GAAG,SAASY,GACjE,UAAAR,EAAQ,UAAUF,EAAG,OAAO,QAC/B;AAAA,0BACC,UAAA,EAAO,MAAK,UAAS,WAAWF,EAAG,cAAc,GAAG,WAAW,CAACE,EAAG,OAAO,SAASa,GACjF,YAAQ,MAAMb,EAAG,OAAO,GAAA,CAC3B;AAAA,MAAA,GACF;AAAA,MAGF,UAAA;AAAA,QAAA,gBAAAkB,EAAC,SAAI,WAAWpB,EAAG,oBAAoB,GAAI,YAAQ,MAAK;AAAA,QACvDW,KACC,gBAAAM,EAAC,OAAA,EAAI,WAAWjB,EAAG,mBAAmB,GACpC,UAAA;AAAA,UAAA,gBAAAoB,EAAC,UAAA,EAAO,MAAK,UAAS,WAAWpB,EAAG,0BAA0B,GAAG,cAAW,MAAK,SAAS,MAAMQ,EAAO,KAAK,IAAI,GAAGD,IAAM,CAAC,CAAC,GACzH,UAAA,gBAAAa,EAACC,GAAA,EAAM,IAAG,QAAA,CAAQ,EAAA,CACpB;AAAA,UACA,gBAAAD,EAACE,KAAO,OAAOf,GAAK,KAAK,GAAG,KAAAS,GAAU,MAAM,GAAG,QAAQ,CAACO,MAAM,IAAIA,CAAC,IAAI,OAAOrB,EAAG,OAAO,UAAU,UAAUM,GAAQ;AAAA,UACpH,gBAAAY,EAAC,UAAA,EAAO,MAAK,UAAS,WAAWpB,EAAG,0BAA0B,GAAG,cAAW,MAAK,SAAS,MAAMQ,EAAO,KAAK,IAAIQ,GAAKT,IAAM,CAAC,CAAC,GAC3H,UAAA,gBAAAa,EAACC,GAAA,EAAM,IAAG,OAAA,CAAO,EAAA,CACnB;AAAA,UACA,gBAAAD;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,WAAWpB,EAAG,qCAAqC;AAAA,cACnD,WAAU;AAAA,cACV,cAAYE,EAAG,OAAO;AAAA,cACtB,OAAOK;AAAA,cACP,UAAU,CAACiB,MAAMhB,EAAOiB,EAAcD,EAAE,OAAO,OAAOR,CAAG,CAAC;AAAA,cAC1D,SAAS,CAACQ,MAAMA,EAAE,OAAO,OAAA;AAAA,YAAO;AAAA,UAAA;AAAA,QAClC,EAAA,CACF;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAIR;"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { jsx as c } from "react/jsx-runtime";
|
|
2
|
+
import { memo as u } from "react";
|
|
3
|
+
import { useCx as m } from "./UiProvider.js";
|
|
4
|
+
const d = {
|
|
5
|
+
close: ["X.....X", ".X...X.", "..X.X..", "...X...", "..X.X..", ".X...X.", "X.....X"],
|
|
6
|
+
check: [".......", "......X", ".....XX", "X...XX.", "XX.XX..", ".XXX...", "..X...."],
|
|
7
|
+
down: [".......", ".......", "XXXXXXX", ".XXXXX.", "..XXX..", "...X...", "......."],
|
|
8
|
+
up: [".......", "...X...", "..XXX..", ".XXXXX.", "XXXXXXX", ".......", "......."],
|
|
9
|
+
right: ["..X....", "..XX...", "..XXX..", "..XXXX.", "..XXX..", "..XX...", "..X...."],
|
|
10
|
+
left: ["....X..", "...XX..", "..XXX..", ".XXXX..", "..XXX..", "...XX..", "....X.."],
|
|
11
|
+
arrow: [".......", "....X..", ".....X.", "XXXXXXX", ".....X.", "....X..", "......."],
|
|
12
|
+
back: ["..X....", ".XX....", "XXXXXX.", ".XX...X", "..X...X", "......X", "..XXXX."],
|
|
13
|
+
star: ["...X...", "...X...", "XXXXXXX", ".XXXXX.", "..XXX..", ".XX.XX.", "X.....X"],
|
|
14
|
+
diamond: ["...X...", "..XXX..", ".XXXXX.", "XXXXXXX", ".XXXXX.", "..XXX..", "...X..."],
|
|
15
|
+
diamondOpen: ["...X...", "..X.X..", ".X...X.", "X.....X", ".X...X.", "..X.X..", "...X..."],
|
|
16
|
+
menu: [".......", "XXXXXXX", ".......", "XXXXXXX", ".......", "XXXXXXX", "......."],
|
|
17
|
+
plus: [".......", "...X...", "...X...", ".XXXXX.", "...X...", "...X...", "......."],
|
|
18
|
+
minus: [".......", ".......", ".......", ".XXXXX.", ".......", ".......", "......."],
|
|
19
|
+
warn: ["...X...", "..XXX..", "..X.X..", ".XX.XX.", ".X...X.", "XX.X.XX", "XXXXXXX"],
|
|
20
|
+
spark: ["...X...", "...X...", "..XXX..", "XXXXXXX", "..XXX..", "...X...", "...X..."],
|
|
21
|
+
lock: ["..XXX..", ".X...X.", ".X...X.", "XXXXXXX", "XXX.XXX", "XXX.XXX", "XXXXXXX"],
|
|
22
|
+
pin: [".XXXXX.", "..XXX..", "..XXX..", ".XXXXX.", "XXXXXXX", "...X...", "...X..."],
|
|
23
|
+
mail: [".......", "XXXXXXX", "XX...XX", "X.X.X.X", "X..X..X", "X.....X", "XXXXXXX"]
|
|
24
|
+
}, a = /* @__PURE__ */ new Map();
|
|
25
|
+
function p(o, e) {
|
|
26
|
+
return o.flatMap((t, s) => [...t].flatMap((n, r) => n === e ? [`M${r} ${s}h1v1h-1z`] : [])).join("");
|
|
27
|
+
}
|
|
28
|
+
function f(o, e) {
|
|
29
|
+
const { rows: t, tones: s } = Array.isArray(e) ? { rows: e, tones: void 0 } : e, n = Math.max(t.length, ...t.map((X) => X.length)), r = [];
|
|
30
|
+
t.some((X) => X.includes("X")) && r.push(["currentColor", p(t, "X")]);
|
|
31
|
+
for (const [X, i] of Object.entries(s ?? {})) r.push([i, p(t, X)]);
|
|
32
|
+
a.set(o, { size: n, layers: r });
|
|
33
|
+
}
|
|
34
|
+
for (const [o, e] of Object.entries(d)) f(o, e);
|
|
35
|
+
function x(o) {
|
|
36
|
+
return a.has(o);
|
|
37
|
+
}
|
|
38
|
+
const M = u(function({ id: e, scale: t = 2, className: s, label: n }) {
|
|
39
|
+
const r = m(), X = a.get(e);
|
|
40
|
+
if (!X) return null;
|
|
41
|
+
const i = X.size * Math.max(1, Math.round(t));
|
|
42
|
+
return /* @__PURE__ */ c(
|
|
43
|
+
"svg",
|
|
44
|
+
{
|
|
45
|
+
className: r(s ? `e1681-glyph ${s}` : "e1681-glyph"),
|
|
46
|
+
width: i,
|
|
47
|
+
height: i,
|
|
48
|
+
viewBox: `0 0 ${X.size} ${X.size}`,
|
|
49
|
+
shapeRendering: "crispEdges",
|
|
50
|
+
role: n ? "img" : void 0,
|
|
51
|
+
"aria-label": n,
|
|
52
|
+
"aria-hidden": n ? void 0 : !0,
|
|
53
|
+
children: X.layers.map(([h, l]) => /* @__PURE__ */ c("path", { d: l, fill: h }, h))
|
|
54
|
+
}
|
|
55
|
+
);
|
|
56
|
+
});
|
|
57
|
+
export {
|
|
58
|
+
M as Glyph,
|
|
59
|
+
p as glyphPath,
|
|
60
|
+
x as hasGlyph,
|
|
61
|
+
f as registerGlyph
|
|
62
|
+
};
|
|
63
|
+
//# sourceMappingURL=Glyph.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Glyph.js","sources":["../../src/react/Glyph.tsx"],"sourcesContent":["import { memo } from 'react';\nimport { useCx } from './UiProvider';\n\n/**\n * Small marks (close, check, arrows, a star…) as pixel art on a square grid, drawn in the text's colour. A pixel font\n * usually carries letters and punctuation only, so a ✕, ✓, ▾ or → typed into the UI falls through to a system font\n * and reads as a smooth vector glyph in the middle of pixel text. `scale` is screen pixels per glyph pixel: a whole\n * number, so the mark keeps its pixels square.\n *\n * Rows are strings, one character a pixel: `.` is empty, `X` the text's colour; any other letter takes its colour\n * from the glyph's `tones` (a coloured glyph, lit like the world's art).\n */\nexport interface GlyphArt {\n rows: readonly string[];\n tones?: Readonly<Record<string, string>>;\n}\n\nconst BUILT_IN = {\n close: ['X.....X', '.X...X.', '..X.X..', '...X...', '..X.X..', '.X...X.', 'X.....X'],\n check: ['.......', '......X', '.....XX', 'X...XX.', 'XX.XX..', '.XXX...', '..X....'],\n down: ['.......', '.......', 'XXXXXXX', '.XXXXX.', '..XXX..', '...X...', '.......'],\n up: ['.......', '...X...', '..XXX..', '.XXXXX.', 'XXXXXXX', '.......', '.......'],\n right: ['..X....', '..XX...', '..XXX..', '..XXXX.', '..XXX..', '..XX...', '..X....'],\n left: ['....X..', '...XX..', '..XXX..', '.XXXX..', '..XXX..', '...XX..', '....X..'],\n arrow: ['.......', '....X..', '.....X.', 'XXXXXXX', '.....X.', '....X..', '.......'],\n back: ['..X....', '.XX....', 'XXXXXX.', '.XX...X', '..X...X', '......X', '..XXXX.'],\n star: ['...X...', '...X...', 'XXXXXXX', '.XXXXX.', '..XXX..', '.XX.XX.', 'X.....X'],\n diamond: ['...X...', '..XXX..', '.XXXXX.', 'XXXXXXX', '.XXXXX.', '..XXX..', '...X...'],\n diamondOpen: ['...X...', '..X.X..', '.X...X.', 'X.....X', '.X...X.', '..X.X..', '...X...'],\n menu: ['.......', 'XXXXXXX', '.......', 'XXXXXXX', '.......', 'XXXXXXX', '.......'],\n plus: ['.......', '...X...', '...X...', '.XXXXX.', '...X...', '...X...', '.......'],\n minus: ['.......', '.......', '.......', '.XXXXX.', '.......', '.......', '.......'],\n warn: ['...X...', '..XXX..', '..X.X..', '.XX.XX.', '.X...X.', 'XX.X.XX', 'XXXXXXX'],\n spark: ['...X...', '...X...', '..XXX..', 'XXXXXXX', '..XXX..', '...X...', '...X...'],\n lock: ['..XXX..', '.X...X.', '.X...X.', 'XXXXXXX', 'XXX.XXX', 'XXX.XXX', 'XXXXXXX'],\n pin: ['.XXXXX.', '..XXX..', '..XXX..', '.XXXXX.', 'XXXXXXX', '...X...', '...X...'],\n mail: ['.......', 'XXXXXXX', 'XX...XX', 'X.X.X.X', 'X..X..X', 'X.....X', 'XXXXXXX'],\n} as const;\n\n/** The marks the engine draws itself; a game adds its own with `registerGlyph`. */\nexport type BuiltInGlyph = keyof typeof BUILT_IN;\nexport type GlyphId = BuiltInGlyph | (string & {});\n\n/** Each glyph as [fill, path] pairs, built once: one pair in the text's colour, or one per tone. */\nconst LAYERS = new Map<string, { size: number; layers: [string, string][] }>();\n\n/** The cells of one letter as one SVG path of 1x1 squares. */\nexport function glyphPath(rows: readonly string[], letter: string): string {\n return rows.flatMap((row, y) => [...row].flatMap((c, x) => (c === letter ? [`M${x} ${y}h1v1h-1z`] : []))).join('');\n}\n\n/** Adds a mark (or replaces one, a built-in included): a coin in the game's own colours, a class crest. */\nexport function registerGlyph(id: string, art: GlyphArt | readonly string[]): void {\n const { rows, tones } = Array.isArray(art) ? { rows: art as readonly string[], tones: undefined } : (art as GlyphArt);\n const size = Math.max(rows.length, ...rows.map((r) => r.length));\n const layers: [string, string][] = [];\n if (rows.some((r) => r.includes('X'))) layers.push(['currentColor', glyphPath(rows, 'X')]);\n for (const [letter, fill] of Object.entries(tones ?? {})) layers.push([fill, glyphPath(rows, letter)]);\n LAYERS.set(id, { size, layers });\n}\n\nfor (const [id, rows] of Object.entries(BUILT_IN)) registerGlyph(id, rows);\n\n/** Whether `id` has art (built in or registered). */\nexport function hasGlyph(id: string): boolean {\n return LAYERS.has(id);\n}\n\nexport interface GlyphProps {\n id: GlyphId;\n /** Screen pixels per glyph pixel (default 2). */\n scale?: number;\n className?: string;\n /** Spoken name; without it the mark is hidden from screen readers (it sits beside words that say it). */\n label?: string;\n}\n\nexport const Glyph = memo(function Glyph({ id, scale = 2, className, label }: GlyphProps) {\n const cx = useCx();\n const art = LAYERS.get(id);\n if (!art) return null;\n const px = art.size * Math.max(1, Math.round(scale));\n return (\n <svg\n className={cx(className ? `e1681-glyph ${className}` : 'e1681-glyph')}\n width={px}\n height={px}\n viewBox={`0 0 ${art.size} ${art.size}`}\n shapeRendering=\"crispEdges\"\n role={label ? 'img' : undefined}\n aria-label={label}\n aria-hidden={label ? undefined : true}\n >\n {art.layers.map(([fill, d]) => (\n <path key={fill} d={d} fill={fill} />\n ))}\n </svg>\n );\n});\n"],"names":["BUILT_IN","LAYERS","glyphPath","rows","letter","row","y","c","x","registerGlyph","id","art","tones","size","r","layers","fill","hasGlyph","Glyph","memo","scale","className","label","cx","useCx","px","jsx","d"],"mappings":"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"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { jsx as s, jsxs as g } from "react/jsx-runtime";
|
|
2
|
+
import { useRef as k, useEffect as y } from "react";
|
|
3
|
+
import { createPortal as w } from "react-dom";
|
|
4
|
+
import { useFitToViewport as x, SCROLL_CLASS as b } from "./useFitToViewport.js";
|
|
5
|
+
import { useCx as E, useUi as L } from "./UiProvider.js";
|
|
6
|
+
function D({ onCancel: r, onConfirm: i, width: a, role: m = "dialog", label: u, className: n, children: f, actions: d }) {
|
|
7
|
+
const o = E(), v = L(), l = k(null);
|
|
8
|
+
x(l, { enabled: !0, ...a !== void 0 ? { width: a } : {} }), y(() => {
|
|
9
|
+
const e = (t) => {
|
|
10
|
+
if (t.key === "Escape") r();
|
|
11
|
+
else if (t.key === "Enter" && i) i();
|
|
12
|
+
else return;
|
|
13
|
+
t.preventDefault(), t.stopImmediatePropagation();
|
|
14
|
+
};
|
|
15
|
+
return window.addEventListener("keydown", e, !0), () => window.removeEventListener("keydown", e, !0);
|
|
16
|
+
}, [r, i]);
|
|
17
|
+
const c = v.portal(), p = /* @__PURE__ */ s("div", { className: o("e1681-backdrop"), onPointerDown: (e) => e.stopPropagation(), onClick: r, children: /* @__PURE__ */ g(
|
|
18
|
+
"div",
|
|
19
|
+
{
|
|
20
|
+
ref: l,
|
|
21
|
+
className: o(`e1681-dialog e1681-frame${n ? ` ${n}` : ""}`),
|
|
22
|
+
role: m,
|
|
23
|
+
"aria-modal": "true",
|
|
24
|
+
"aria-label": u,
|
|
25
|
+
style: { width: a },
|
|
26
|
+
onClick: (e) => e.stopPropagation(),
|
|
27
|
+
children: [
|
|
28
|
+
/* @__PURE__ */ s("div", { className: o(`e1681-dialog-body ${b}`), children: f }),
|
|
29
|
+
d !== void 0 && /* @__PURE__ */ s("div", { className: o("e1681-dialog-actions"), children: d })
|
|
30
|
+
]
|
|
31
|
+
}
|
|
32
|
+
) });
|
|
33
|
+
return c ? w(p, c) : p;
|
|
34
|
+
}
|
|
35
|
+
export {
|
|
36
|
+
D as Modal
|
|
37
|
+
};
|
|
38
|
+
//# sourceMappingURL=Modal.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Modal.js","sources":["../../src/react/Modal.tsx"],"sourcesContent":["import { type ReactNode, useEffect, useRef } from 'react';\nimport { createPortal } from 'react-dom';\nimport { SCROLL_CLASS, useFitToViewport } from './useFitToViewport';\nimport { useUi, useCx } from './UiProvider';\n\nexport interface ModalProps {\n /** Esc, or a press on the backdrop. */\n onCancel: () => void;\n /** Enter (a text field's own Enter included). */\n onConfirm?: () => void;\n /** The box's preferred width, px. */\n width?: number;\n role?: 'dialog' | 'alertdialog';\n label?: string;\n className?: string;\n children: ReactNode;\n /** Under the scrolling body, never scrolled away: the dialog's buttons. */\n actions?: ReactNode;\n}\n\n/**\n * A dialog box over a backdrop, fitted into the viewport like a window (`fitToViewport`, centred in whole pixels) and\n * portalled to the `UiProvider`'s `portal`. Esc and Enter are caught on the window in the capture phase, so they do\n * not also close the window underneath or reach the game's keys.\n */\nexport function Modal({ onCancel, onConfirm, width, role = 'dialog', label, className, children, actions }: ModalProps) {\n const cx = useCx();\n const ui = useUi();\n const ref = useRef<HTMLDivElement>(null);\n useFitToViewport(ref, { enabled: true, ...(width !== undefined ? { width } : {}) });\n\n useEffect(() => {\n const onKey = (e: KeyboardEvent) => {\n if (e.key === 'Escape') onCancel();\n else if (e.key === 'Enter' && onConfirm) onConfirm();\n else return;\n e.preventDefault();\n e.stopImmediatePropagation();\n };\n window.addEventListener('keydown', onKey, true);\n return () => window.removeEventListener('keydown', onKey, true);\n }, [onCancel, onConfirm]);\n\n const target = ui.portal();\n const box = (\n <div className={cx('e1681-backdrop')} onPointerDown={(e) => e.stopPropagation()} onClick={onCancel}>\n <div\n ref={ref}\n className={cx(`e1681-dialog e1681-frame${className ? ` ${className}` : ''}`)}\n role={role}\n aria-modal=\"true\"\n aria-label={label}\n style={{ width }}\n onClick={(e) => e.stopPropagation()}\n >\n <div className={cx(`e1681-dialog-body ${SCROLL_CLASS}`)}>{children}</div>\n {actions !== undefined && <div className={cx('e1681-dialog-actions')}>{actions}</div>}\n </div>\n </div>\n );\n return target ? createPortal(box, target) : box;\n}\n"],"names":["Modal","onCancel","onConfirm","width","role","label","className","children","actions","cx","useCx","ui","useUi","ref","useRef","useFitToViewport","useEffect","onKey","e","target","box","jsx","jsxs","SCROLL_CLASS","createPortal"],"mappings":";;;;;AAyBO,SAASA,EAAM,EAAE,UAAAC,GAAU,WAAAC,GAAW,OAAAC,GAAO,MAAAC,IAAO,UAAU,OAAAC,GAAO,WAAAC,GAAW,UAAAC,GAAU,SAAAC,EAAA,GAAuB;AACtH,QAAMC,IAAKC,EAAA,GACLC,IAAKC,EAAA,GACLC,IAAMC,EAAuB,IAAI;AACvC,EAAAC,EAAiBF,GAAK,EAAE,SAAS,IAAM,GAAIV,MAAU,SAAY,EAAE,OAAAA,MAAU,CAAA,GAAK,GAElFa,EAAU,MAAM;AACd,UAAMC,IAAQ,CAACC,MAAqB;AAClC,UAAIA,EAAE,QAAQ,SAAU,CAAAjB,EAAA;AAAA,eACfiB,EAAE,QAAQ,WAAWhB,EAAW,CAAAA,EAAA;AAAA,UACpC;AACL,MAAAgB,EAAE,eAAA,GACFA,EAAE,yBAAA;AAAA,IACJ;AACA,kBAAO,iBAAiB,WAAWD,GAAO,EAAI,GACvC,MAAM,OAAO,oBAAoB,WAAWA,GAAO,EAAI;AAAA,EAChE,GAAG,CAAChB,GAAUC,CAAS,CAAC;AAExB,QAAMiB,IAASR,EAAG,OAAA,GACZS,IACJ,gBAAAC,EAAC,OAAA,EAAI,WAAWZ,EAAG,gBAAgB,GAAG,eAAe,CAAC,MAAM,EAAE,gBAAA,GAAmB,SAASR,GACxF,UAAA,gBAAAqB;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,KAAAT;AAAA,MACA,WAAWJ,EAAG,2BAA2BH,IAAY,IAAIA,CAAS,KAAK,EAAE,EAAE;AAAA,MAC3E,MAAAF;AAAA,MACA,cAAW;AAAA,MACX,cAAYC;AAAA,MACZ,OAAO,EAAE,OAAAF,EAAA;AAAA,MACT,SAAS,CAAC,MAAM,EAAE,gBAAA;AAAA,MAElB,UAAA;AAAA,QAAA,gBAAAkB,EAAC,SAAI,WAAWZ,EAAG,qBAAqBc,CAAY,EAAE,GAAI,UAAAhB,GAAS;AAAA,QAClEC,MAAY,UAAa,gBAAAa,EAAC,OAAA,EAAI,WAAWZ,EAAG,sBAAsB,GAAI,UAAAD,EAAA,CAAQ;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA,GAEnF;AAEF,SAAOW,IAASK,EAAaJ,GAAKD,CAAM,IAAIC;AAC9C;"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { jsxs as m, jsx as l } from "react/jsx-runtime";
|
|
2
|
+
import { useRef as N } from "react";
|
|
3
|
+
import { Glyph as S } from "./Glyph.js";
|
|
4
|
+
import { fillLabel as x } from "./labels.js";
|
|
5
|
+
import { sheetScaleStyle as L } from "./placement.js";
|
|
6
|
+
import { useFitToViewport as g, SCROLL_CLASS as j } from "./useFitToViewport.js";
|
|
7
|
+
import { useCx as C, useUi as P } from "./UiProvider.js";
|
|
8
|
+
function G({ title: s, onClose: t, children: p, width: a, at: i, footer: n, className: d, style: f, titleText: h }) {
|
|
9
|
+
const e = C(), o = P(), r = N(null);
|
|
10
|
+
g(r, { enabled: !o.touch, ...a !== void 0 ? { width: a } : {}, ...i ? { at: i } : {} });
|
|
11
|
+
const c = h ?? (typeof s == "string" ? s : ""), u = /* @__PURE__ */ m("div", { className: e("e1681-panel-header"), children: [
|
|
12
|
+
/* @__PURE__ */ l("h3", { className: e("e1681-panel-title"), children: s }),
|
|
13
|
+
t && /* @__PURE__ */ l("button", { type: "button", className: e("e1681-close"), onClick: t, title: o.labels.closeHint, "aria-label": x(o.labels.close, c).trim(), children: /* @__PURE__ */ l(S, { id: "close" }) })
|
|
14
|
+
] }), b = ["e1681-panel", "e1681-frame", o.touch ? "e1681-sheet" : "", d ?? ""].filter(Boolean).join(" "), v = o.touch ? { ...L(o.sheetScale) } : { width: a };
|
|
15
|
+
return /* @__PURE__ */ m("div", { ref: r, className: e(b), style: { ...v, ...f }, role: "dialog", "aria-label": c || void 0, onPointerDown: (y) => y.stopPropagation(), children: [
|
|
16
|
+
u,
|
|
17
|
+
/* @__PURE__ */ l("div", { className: e(`e1681-panel-body ${j}`), children: p }),
|
|
18
|
+
n !== void 0 && /* @__PURE__ */ l("div", { className: e("e1681-panel-footer"), children: n })
|
|
19
|
+
] });
|
|
20
|
+
}
|
|
21
|
+
export {
|
|
22
|
+
G as Panel
|
|
23
|
+
};
|
|
24
|
+
//# sourceMappingURL=Panel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Panel.js","sources":["../../src/react/Panel.tsx"],"sourcesContent":["import { type CSSProperties, type ReactNode, useRef } from 'react';\nimport type { Point } from '../ui/layout/geometry';\nimport { Glyph } from './Glyph';\nimport { fillLabel } from './labels';\nimport { sheetScaleStyle } from './placement';\nimport { SCROLL_CLASS, useFitToViewport } from './useFitToViewport';\nimport { useUi, useCx } from './UiProvider';\n\nexport interface PanelProps {\n title: ReactNode;\n /** The close button's action; no close button without it. */\n onClose?: () => void;\n children?: ReactNode;\n /** The width it wants, in px (its own units); default: as wide as its content. */\n width?: number;\n /** Where it wants to stand, screen px; default: centred. It is moved back inside the screen either way. */\n at?: Point;\n /** Under the scrolling body, never scrolled away (a row of buttons). */\n footer?: ReactNode;\n className?: string;\n style?: CSSProperties;\n /** The title as plain text, for the close button's spoken name when `title` is not a string. */\n titleText?: string;\n}\n\n/**\n * A window that never overflows the screen: fitted by `fitToViewport` (moved inside the edges, cut to what is left,\n * shrunk to `minScale` when the `UiProvider` allows it) with its header kept and its body scrolling under it. Placed\n * in whole pixels by `left`/`top`, never centred with `translate(-50%)`, which stood an odd-width window half a pixel\n * off the grid and smeared every icon in it.\n *\n * On a touch screen it is a full-screen sheet instead (`.e1681-sheet`): no width of its own, the header put and the\n * body scrolling, laid out at the provider's `sheetScale`. A press inside never reaches the world under it.\n */\nexport function Panel({ title, onClose, children, width, at, footer, className, style, titleText }: PanelProps) {\n const cx = useCx();\n const ui = useUi();\n const ref = useRef<HTMLDivElement>(null);\n useFitToViewport(ref, { enabled: !ui.touch, ...(width !== undefined ? { width } : {}), ...(at ? { at } : {}) });\n const name = titleText ?? (typeof title === 'string' ? title : '');\n const header = (\n <div className={cx('e1681-panel-header')}>\n <h3 className={cx('e1681-panel-title')}>{title}</h3>\n {onClose && (\n <button type=\"button\" className={cx('e1681-close')} onClick={onClose} title={ui.labels.closeHint} aria-label={fillLabel(ui.labels.close, name).trim()}>\n <Glyph id=\"close\" />\n </button>\n )}\n </div>\n );\n const classes = ['e1681-panel', 'e1681-frame', ui.touch ? 'e1681-sheet' : '', className ?? ''].filter(Boolean).join(' ');\n const own: CSSProperties = ui.touch ? { ...sheetScaleStyle(ui.sheetScale) } : { width };\n return (\n <div ref={ref} className={cx(classes)} style={{ ...own, ...style }} role=\"dialog\" aria-label={name || undefined} onPointerDown={(e) => e.stopPropagation()}>\n {header}\n <div className={cx(`e1681-panel-body ${SCROLL_CLASS}`)}>{children}</div>\n {footer !== undefined && <div className={cx('e1681-panel-footer')}>{footer}</div>}\n </div>\n );\n}\n"],"names":["Panel","title","onClose","children","width","at","footer","className","style","titleText","cx","useCx","ui","useUi","ref","useRef","useFitToViewport","name","header","jsxs","jsx","fillLabel","Glyph","classes","own","sheetScaleStyle","e","SCROLL_CLASS"],"mappings":";;;;;;;AAkCO,SAASA,EAAM,EAAE,OAAAC,GAAO,SAAAC,GAAS,UAAAC,GAAU,OAAAC,GAAO,IAAAC,GAAI,QAAAC,GAAQ,WAAAC,GAAW,OAAAC,GAAO,WAAAC,EAAA,GAAyB;AAC9G,QAAMC,IAAKC,EAAA,GACLC,IAAKC,EAAA,GACLC,IAAMC,EAAuB,IAAI;AACvC,EAAAC,EAAiBF,GAAK,EAAE,SAAS,CAACF,EAAG,OAAO,GAAIR,MAAU,SAAY,EAAE,OAAAA,MAAU,CAAA,GAAK,GAAIC,IAAK,EAAE,IAAAA,EAAA,IAAO,CAAA,GAAK;AAC9G,QAAMY,IAAOR,MAAc,OAAOR,KAAU,WAAWA,IAAQ,KACzDiB,IACJ,gBAAAC,EAAC,OAAA,EAAI,WAAWT,EAAG,oBAAoB,GACrC,UAAA;AAAA,IAAA,gBAAAU,EAAC,MAAA,EAAG,WAAWV,EAAG,mBAAmB,GAAI,UAAAT,GAAM;AAAA,IAC9CC,KACC,gBAAAkB,EAAC,UAAA,EAAO,MAAK,UAAS,WAAWV,EAAG,aAAa,GAAG,SAASR,GAAS,OAAOU,EAAG,OAAO,WAAW,cAAYS,EAAUT,EAAG,OAAO,OAAOK,CAAI,EAAE,KAAA,GAC7I,UAAA,gBAAAG,EAACE,GAAA,EAAM,IAAG,QAAA,CAAQ,EAAA,CACpB;AAAA,EAAA,GAEJ,GAEIC,IAAU,CAAC,eAAe,eAAeX,EAAG,QAAQ,gBAAgB,IAAIL,KAAa,EAAE,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG,GACjHiB,IAAqBZ,EAAG,QAAQ,EAAE,GAAGa,EAAgBb,EAAG,UAAU,MAAM,EAAE,OAAAR,EAAA;AAChF,SACE,gBAAAe,EAAC,OAAA,EAAI,KAAAL,GAAU,WAAWJ,EAAGa,CAAO,GAAG,OAAO,EAAE,GAAGC,GAAK,GAAGhB,KAAS,MAAK,UAAS,cAAYS,KAAQ,QAAW,eAAe,CAACS,MAAMA,EAAE,gBAAA,GACtI,UAAA;AAAA,IAAAR;AAAA,IACD,gBAAAE,EAAC,SAAI,WAAWV,EAAG,oBAAoBiB,CAAY,EAAE,GAAI,UAAAxB,GAAS;AAAA,IACjEG,MAAW,UAAa,gBAAAc,EAAC,OAAA,EAAI,WAAWV,EAAG,oBAAoB,GAAI,UAAAJ,EAAA,CAAO;AAAA,EAAA,GAC7E;AAEJ;"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { jsx as m } from "react/jsx-runtime";
|
|
2
|
+
import { useState as x } from "react";
|
|
3
|
+
import { pixelFit as c } from "./placement.js";
|
|
4
|
+
import { useCx as d } from "./UiProvider.js";
|
|
5
|
+
function j({ src: t, width: r, height: n, upscaled: o = 1, maxScale: s, alt: g = "", className: l }) {
|
|
6
|
+
const h = d(), [e, p] = x(null), i = e?.src === t ? c(e.w, e.h, r, n, s) : null;
|
|
7
|
+
return /* @__PURE__ */ m("span", { className: h(l ? `e1681-pixel-image ${l}` : "e1681-pixel-image"), style: { width: r, height: n }, children: /* @__PURE__ */ m(
|
|
8
|
+
"img",
|
|
9
|
+
{
|
|
10
|
+
src: t,
|
|
11
|
+
alt: g,
|
|
12
|
+
draggable: !1,
|
|
13
|
+
style: i ? { width: i.width, height: i.height } : { visibility: "hidden" },
|
|
14
|
+
onLoad: (u) => {
|
|
15
|
+
const a = u.currentTarget;
|
|
16
|
+
p({ src: t, w: a.naturalWidth / o, h: a.naturalHeight / o });
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
) });
|
|
20
|
+
}
|
|
21
|
+
export {
|
|
22
|
+
j as PixelImage
|
|
23
|
+
};
|
|
24
|
+
//# sourceMappingURL=PixelImage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PixelImage.js","sources":["../../src/react/PixelImage.tsx"],"sourcesContent":["import { useState } from 'react';\nimport { pixelFit } from './placement';\nimport { useCx } from './UiProvider';\n\nexport interface PixelImageProps {\n src: string;\n /** The box, CSS px. */\n width: number;\n height: number;\n /** Image pixels the URL already spends on one art pixel (a sheet painted at 4x). */\n upscaled?: number;\n /** Caps the multiple, so a row of sprites of different sizes keeps their sizes against each other. */\n maxScale?: number;\n alt?: string;\n className?: string;\n}\n\n/**\n * A sprite whose size is not known ahead (a creature, a portrait), shown at the largest **whole** multiple of its\n * art that fits the box, centred (`pixelFit`); a sprite bigger than the box is shrunk by a whole divisor. Hidden until\n * it has loaded and been measured, so it never flashes at the wrong size.\n */\nexport function PixelImage({ src, width, height, upscaled = 1, maxScale, alt = '', className }: PixelImageProps) {\n const cx = useCx();\n const [art, setArt] = useState<{ src: string; w: number; h: number } | null>(null);\n const size = art?.src === src ? pixelFit(art.w, art.h, width, height, maxScale) : null;\n return (\n <span className={cx(className ? `e1681-pixel-image ${className}` : 'e1681-pixel-image')} style={{ width, height }}>\n <img\n src={src}\n alt={alt}\n draggable={false}\n style={size ? { width: size.width, height: size.height } : { visibility: 'hidden' }}\n onLoad={(e) => {\n const img = e.currentTarget;\n setArt({ src, w: img.naturalWidth / upscaled, h: img.naturalHeight / upscaled });\n }}\n />\n </span>\n );\n}\n"],"names":["PixelImage","src","width","height","upscaled","maxScale","alt","className","cx","useCx","art","setArt","useState","size","pixelFit","jsx","e","img"],"mappings":";;;;AAsBO,SAASA,EAAW,EAAE,KAAAC,GAAK,OAAAC,GAAO,QAAAC,GAAQ,UAAAC,IAAW,GAAG,UAAAC,GAAU,KAAAC,IAAM,IAAI,WAAAC,EAAA,GAA8B;AAC/G,QAAMC,IAAKC,EAAA,GACL,CAACC,GAAKC,CAAM,IAAIC,EAAuD,IAAI,GAC3EC,IAAOH,GAAK,QAAQT,IAAMa,EAASJ,EAAI,GAAGA,EAAI,GAAGR,GAAOC,GAAQE,CAAQ,IAAI;AAClF,SACE,gBAAAU,EAAC,QAAA,EAAK,WAAWP,EAAGD,IAAY,qBAAqBA,CAAS,KAAK,mBAAmB,GAAG,OAAO,EAAE,OAAAL,GAAO,QAAAC,KACvG,UAAA,gBAAAY;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,KAAAd;AAAA,MACA,KAAAK;AAAA,MACA,WAAW;AAAA,MACX,OAAOO,IAAO,EAAE,OAAOA,EAAK,OAAO,QAAQA,EAAK,OAAA,IAAW,EAAE,YAAY,SAAA;AAAA,MACzE,QAAQ,CAACG,MAAM;AACb,cAAMC,IAAMD,EAAE;AACd,QAAAL,EAAO,EAAE,KAAAV,GAAK,GAAGgB,EAAI,eAAeb,GAAU,GAAGa,EAAI,gBAAgBb,EAAA,CAAU;AAAA,MACjF;AAAA,IAAA;AAAA,EAAA,GAEJ;AAEJ;"}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
import { jsx as f, jsxs as C, Fragment as K } from "react/jsx-runtime";
|
|
2
|
+
import { useState as D, useRef as M, useLayoutEffect as O, useEffect as R } from "react";
|
|
3
|
+
import { createPortal as U } from "react-dom";
|
|
4
|
+
import { listWidth as B } from "../ui/layout/listWidth.js";
|
|
5
|
+
import { scrollIntoView as F } from "../ui/layout/scroll.js";
|
|
6
|
+
import { Glyph as G } from "./Glyph.js";
|
|
7
|
+
import { listPlacement as V } from "./placement.js";
|
|
8
|
+
import { useCx as _, useUi as q } from "./UiProvider.js";
|
|
9
|
+
function T(d, r, s) {
|
|
10
|
+
return s > 0 ? ((Math.max(0, d) + r) % s + s) % s : 0;
|
|
11
|
+
}
|
|
12
|
+
function oe({ value: d, options: r, onChange: s, label: E, grow: j, className: P, disabled: $ }) {
|
|
13
|
+
const a = _(), c = q(), [n, g] = D(!1), [o, H] = D(null), [h, v] = D(0), y = M(null), p = M(null), l = r.findIndex((e) => e.value === d);
|
|
14
|
+
O(() => {
|
|
15
|
+
const e = p.current, t = y.current;
|
|
16
|
+
if (!n || !e || !t || o) return;
|
|
17
|
+
const i = Array.from(e.children), u = i.reduce((w, k) => Math.max(w, k.offsetWidth), 0), W = c.viewport(), A = B(
|
|
18
|
+
i.map((w, k) => String(k)),
|
|
19
|
+
(w) => i[Number(w)]?.offsetWidth ?? 0,
|
|
20
|
+
{ padding: e.offsetWidth - u, min: Math.round(t.offsetWidth), max: W.width - 2 * c.margin }
|
|
21
|
+
), m = t.getBoundingClientRect(), I = V({ x: m.left, y: m.top, width: m.width, height: m.height }, { width: A, height: e.offsetHeight }, W, 2, c.margin);
|
|
22
|
+
H({ ...I, width: A });
|
|
23
|
+
}, [n, o, c]), R(() => {
|
|
24
|
+
const e = p.current, t = e?.children[h];
|
|
25
|
+
e && t && (e.scrollTop = F(e.scrollTop, t.offsetTop, t.offsetHeight, e.clientHeight, e.scrollHeight));
|
|
26
|
+
}, [h, o]), R(() => {
|
|
27
|
+
if (!n) return;
|
|
28
|
+
const e = (i) => {
|
|
29
|
+
const u = i.target;
|
|
30
|
+
!y.current?.contains(u) && !p.current?.contains(u) && g(!1);
|
|
31
|
+
}, t = () => g(!1);
|
|
32
|
+
return document.addEventListener("pointerdown", e, !0), window.addEventListener("resize", t), () => {
|
|
33
|
+
document.removeEventListener("pointerdown", e, !0), window.removeEventListener("resize", t);
|
|
34
|
+
};
|
|
35
|
+
}, [n]);
|
|
36
|
+
const x = (e) => {
|
|
37
|
+
H(null), g(e);
|
|
38
|
+
}, b = (e) => {
|
|
39
|
+
const t = r[e];
|
|
40
|
+
x(!1), t && t.value !== d && s(t.value);
|
|
41
|
+
}, L = () => {
|
|
42
|
+
$ || (v(Math.max(0, l)), x(!n));
|
|
43
|
+
}, z = (e) => {
|
|
44
|
+
if (e.stopPropagation(), e.key === "ArrowDown" || e.key === "ArrowUp") {
|
|
45
|
+
e.preventDefault();
|
|
46
|
+
const t = e.key === "ArrowDown" ? 1 : -1;
|
|
47
|
+
n ? v((i) => T(i, t, r.length)) : b(T(l, t, r.length));
|
|
48
|
+
} else e.key === "Enter" || e.key === " " ? (e.preventDefault(), n ? b(h) : L()) : e.key === "Escape" && n && (e.preventDefault(), x(!1));
|
|
49
|
+
}, N = c.portal(), S = /* @__PURE__ */ f(
|
|
50
|
+
"div",
|
|
51
|
+
{
|
|
52
|
+
ref: p,
|
|
53
|
+
className: a(`e1681-select-list e1681-tip-frame${o ? "" : " measuring"}`),
|
|
54
|
+
role: "listbox",
|
|
55
|
+
"aria-label": E,
|
|
56
|
+
style: o ? { left: o.x, top: o.y, width: o.width, maxHeight: o.height } : { left: 0, top: 0, visibility: "hidden" },
|
|
57
|
+
onPointerDown: (e) => e.preventDefault(),
|
|
58
|
+
children: r.map((e, t) => /* @__PURE__ */ f(
|
|
59
|
+
"div",
|
|
60
|
+
{
|
|
61
|
+
role: "option",
|
|
62
|
+
"aria-selected": t === l,
|
|
63
|
+
className: a(`e1681-select-option${t === l ? " picked" : ""}${t === h ? " hot" : ""}`),
|
|
64
|
+
onPointerEnter: () => v(t),
|
|
65
|
+
onClick: () => b(t),
|
|
66
|
+
children: e.label
|
|
67
|
+
},
|
|
68
|
+
String(e.value)
|
|
69
|
+
))
|
|
70
|
+
}
|
|
71
|
+
);
|
|
72
|
+
return /* @__PURE__ */ C(K, { children: [
|
|
73
|
+
/* @__PURE__ */ C(
|
|
74
|
+
"button",
|
|
75
|
+
{
|
|
76
|
+
ref: y,
|
|
77
|
+
type: "button",
|
|
78
|
+
className: a(`e1681-select${n ? " open" : ""}${j ? " grow" : ""}${P ? ` ${P}` : ""}`),
|
|
79
|
+
"aria-label": E,
|
|
80
|
+
"aria-haspopup": "listbox",
|
|
81
|
+
"aria-expanded": n,
|
|
82
|
+
disabled: $,
|
|
83
|
+
onPointerDown: (e) => e.preventDefault(),
|
|
84
|
+
onClick: L,
|
|
85
|
+
onKeyDown: z,
|
|
86
|
+
children: [
|
|
87
|
+
/* @__PURE__ */ f("span", { className: a("e1681-select-labels"), children: r.map((e, t) => /* @__PURE__ */ f("span", { className: a(t === l ? "shown" : void 0), "aria-hidden": t !== l, children: e.label }, String(e.value))) }),
|
|
88
|
+
/* @__PURE__ */ f(G, { id: n ? "up" : "down" })
|
|
89
|
+
]
|
|
90
|
+
}
|
|
91
|
+
),
|
|
92
|
+
n && (N ? U(S, N) : S)
|
|
93
|
+
] });
|
|
94
|
+
}
|
|
95
|
+
export {
|
|
96
|
+
oe as Select,
|
|
97
|
+
T as stepOption
|
|
98
|
+
};
|
|
99
|
+
//# sourceMappingURL=Select.js.map
|