lostpage 0.0.0-stage → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +390 -2
- package/dist/catalog.d.ts +2 -0
- package/dist/catalog.js +1 -0
- package/dist/catalog.json +11438 -0
- package/dist/cdn/c/ascii-3d-LO5K5SPJ.js +3 -0
- package/dist/cdn/c/astronaut-LH5N45GT.js +2 -0
- package/dist/cdn/c/aurora-XF7DCQ7M.js +129 -0
- package/dist/cdn/c/autumn-V5GRVYCX.js +1 -0
- package/dist/cdn/c/balloon-404-KV6ISJWV.js +1 -0
- package/dist/cdn/c/beach-OGS53KAQ.js +95 -0
- package/dist/cdn/c/black-hole-635WWF67.js +124 -0
- package/dist/cdn/c/block-drop-QU7NYBNQ.js +1 -0
- package/dist/cdn/c/blue-screen-GKLGT7XD.js +70 -0
- package/dist/cdn/c/breakout-EGDE3QDC.js +1 -0
- package/dist/cdn/c/bricks-C6XPPQ64.js +1 -0
- package/dist/cdn/c/broken-link-U47D6LR2.js +11 -0
- package/dist/cdn/c/brutalist-QFXIHFAD.js +15 -0
- package/dist/cdn/c/bubble-wrap-45ZWIQMW.js +1 -0
- package/dist/cdn/c/campfire-TFG4DUUS.js +88 -0
- package/dist/cdn/c/card-GH5VVMRG.js +15 -0
- package/dist/cdn/c/cassette-33OUQ4CF.js +15 -0
- package/dist/cdn/c/chalkboard-NAPUHNER.js +3 -0
- package/dist/cdn/c/chrome-404-QVPFIQEF.js +1 -0
- package/dist/cdn/c/chunk-4ZBXB36L.js +1 -0
- package/dist/cdn/c/chunk-A44JMJWI.js +1 -0
- package/dist/cdn/c/chunk-HXSSPN2I.js +1 -0
- package/dist/cdn/c/chunk-IETNWEVK.js +1 -0
- package/dist/cdn/c/chunk-JLRXT2AZ.js +4 -0
- package/dist/cdn/c/chunk-LMRCHEWX.js +1 -0
- package/dist/cdn/c/chunk-NUQBEDA4.js +296 -0
- package/dist/cdn/c/chunk-QHXVYCR6.js +1 -0
- package/dist/cdn/c/chunk-QJZBGT2Q.js +75 -0
- package/dist/cdn/c/chunk-URWX3LLV.js +1 -0
- package/dist/cdn/c/chunk-YNREKTFR.js +70 -0
- package/dist/cdn/c/circuit-board-V6VT4OTX.js +1 -0
- package/dist/cdn/c/claw-machine-LLCPLZ6W.js +1 -0
- package/dist/cdn/c/clay-404-SMDVAQCV.js +1 -0
- package/dist/cdn/c/constellation-J5QMY7IB.js +1 -0
- package/dist/cdn/c/countdown-2TEFVO73.js +14 -0
- package/dist/cdn/c/cross-stitch-N5H5GLAG.js +2 -0
- package/dist/cdn/c/deep-sea-ILDVMW5M.js +85 -0
- package/dist/cdn/c/divider-PMT4UZEF.js +9 -0
- package/dist/cdn/c/dna-CAAKBMRK.js +2 -0
- package/dist/cdn/c/dominoes-VLA5MBXM.js +1 -0
- package/dist/cdn/c/dot-grid-O7LJO44U.js +11 -0
- package/dist/cdn/c/editorial-4C5Z33WO.js +11 -0
- package/dist/cdn/c/elevator-EFNB6FVO.js +36 -0
- package/dist/cdn/c/emoji-EHAJDQSM.js +8 -0
- package/dist/cdn/c/error-cascade-CIJCQLP3.js +18 -0
- package/dist/cdn/c/evidence-board-Z7DXMGNE.js +18 -0
- package/dist/cdn/c/eyes-VPOHW2CX.js +2 -0
- package/dist/cdn/c/fireworks-QLWJ3S43.js +1 -0
- package/dist/cdn/c/flashlight-QXI7QT74.js +57 -0
- package/dist/cdn/c/flatline-3GBK7IVS.js +1 -0
- package/dist/cdn/c/flock-RLSZ7EZQ.js +1 -0
- package/dist/cdn/c/foggy-glass-A56REA7E.js +1 -0
- package/dist/cdn/c/gears-4HJO7H74.js +5 -0
- package/dist/cdn/c/glass-404-WZRMDFTP.js +1 -0
- package/dist/cdn/c/glitch-Y4CIADF3.js +60 -0
- package/dist/cdn/c/gradient-404-YNSTOPNA.js +6 -0
- package/dist/cdn/c/halftone-XZ7F75B4.js +43 -0
- package/dist/cdn/c/hanging-letters-Y3VH7EVP.js +1 -0
- package/dist/cdn/c/hanging-sign-2KUXPLZE.js +1 -0
- package/dist/cdn/c/helpful-links-UFGTWTRQ.js +18 -0
- package/dist/cdn/c/hyperspace-R34QNI7J.js +57 -0
- package/dist/cdn/c/hypnosis-MK6AV3SC.js +26 -0
- package/dist/cdn/c/ink-S332BOPS.js +43 -0
- package/dist/cdn/c/invaders-ZSY3Z443.js +1 -0
- package/dist/cdn/c/kaleidoscope-BLGSIK4F.js +34 -0
- package/dist/cdn/c/lava-lamp-VYY5XFG5.js +55 -0
- package/dist/cdn/c/life-QBWZL5FY.js +1 -0
- package/dist/cdn/c/lighthouse-QX7QIIPX.js +60 -0
- package/dist/cdn/c/loading-LIS67QF7.js +34 -0
- package/dist/cdn/c/lost-at-sea-QNURIHBY.js +258 -0
- package/dist/cdn/c/magic-8-ball-W3TRJALZ.js +2 -0
- package/dist/cdn/c/matrix-rain-4V4SVGGG.js +3 -0
- package/dist/cdn/c/maze-QL5TRCE5.js +1 -0
- package/dist/cdn/c/mesh-gradient-UISGI62K.js +34 -0
- package/dist/cdn/c/metro-map-H64EHOZM.js +30 -0
- package/dist/cdn/c/milk-carton-3SDLA5AY.js +53 -0
- package/dist/cdn/c/minimal-SB6FU3DE.js +9 -0
- package/dist/cdn/c/mirage-IQ3IA3VB.js +70 -0
- package/dist/cdn/c/moon-landing-TKZE4Q6G.js +1 -0
- package/dist/cdn/c/neon-sign-XGMN75MH.js +1 -0
- package/dist/cdn/c/newspaper-YECAUY77.js +49 -0
- package/dist/cdn/c/nixie-CQBRCVDE.js +1 -0
- package/dist/cdn/c/no-signal-HL4A4CFZ.js +82 -0
- package/dist/cdn/c/one-bit-AFIZQPHK.js +49 -0
- package/dist/cdn/c/outline-404-REB5E5EN.js +9 -0
- package/dist/cdn/c/paint-splash-GZGPOURW.js +1 -0
- package/dist/cdn/c/paper-plane-KDCSE3RM.js +2 -0
- package/dist/cdn/c/particles-7UMRMT2M.js +1 -0
- package/dist/cdn/c/path-not-found-VUEXOVO7.js +14 -0
- package/dist/cdn/c/planet-H6QGPDVC.js +157 -0
- package/dist/cdn/c/pond-6DL43VUQ.js +106 -0
- package/dist/cdn/c/pong-B2ZGAY7T.js +1 -0
- package/dist/cdn/c/radar-22JCPGQZ.js +4 -0
- package/dist/cdn/c/rainy-window-DTGLJVAR.js +114 -0
- package/dist/cdn/c/receipt-ZOYUSMN3.js +32 -0
- package/dist/cdn/c/road-closed-3OS55UBX.js +1 -0
- package/dist/cdn/c/rpg-dialog-FV53YYNJ.js +14 -0
- package/dist/cdn/c/runner-NANXJTQG.js +1 -0
- package/dist/cdn/c/scratch-card-GC6U4ZZN.js +1 -0
- package/dist/cdn/c/screensaver-UXKJVQUU.js +1 -0
- package/dist/cdn/c/search-404-HFKZ4DUA.js +17 -0
- package/dist/cdn/c/server-default-RBMMRAHS.js +10 -0
- package/dist/cdn/c/server-room-QSKAUFUY.js +1 -0
- package/dist/cdn/c/skyline-OMZMF5R6.js +1 -0
- package/dist/cdn/c/skywriting-RYNQWJ6I.js +1 -0
- package/dist/cdn/c/slot-machine-XXCVI2HK.js +33 -0
- package/dist/cdn/c/snake-6Z5V3QA3.js +1 -0
- package/dist/cdn/c/snow-globe-RLDPNA2J.js +2 -0
- package/dist/cdn/c/soft-blobs-FYEFGINV.js +15 -0
- package/dist/cdn/c/solar-system-CQAP6WFU.js +2 -0
- package/dist/cdn/c/split-flap-O7JGD5Q4.js +37 -0
- package/dist/cdn/c/split-panel-QGXZ24E4.js +12 -0
- package/dist/cdn/c/stage-GBZR3JQS.js +2 -0
- package/dist/cdn/c/swiss-poster-OON4HBUG.js +20 -0
- package/dist/cdn/c/terminal-7BTUDZDB.js +41 -0
- package/dist/cdn/c/thunderstorm-FRCKHKXY.js +1 -0
- package/dist/cdn/c/topographic-3RIQXKIQ.js +38 -0
- package/dist/cdn/c/torn-page-6UT5ZQHG.js +16 -0
- package/dist/cdn/c/treasure-map-FALAEBL5.js +3 -0
- package/dist/cdn/c/typewriter-7TIO42MH.js +23 -0
- package/dist/cdn/c/ufo-6UW34TI3.js +1 -0
- package/dist/cdn/c/unplugged-QXKDDH4S.js +1 -0
- package/dist/cdn/c/vending-machine-SH3MNFMY.js +27 -0
- package/dist/cdn/c/vinyl-3FUP3LSO.js +2 -0
- package/dist/cdn/c/voxel-404-LMC43X4B.js +102 -0
- package/dist/cdn/c/wormhole-I2RWIMRW.js +113 -0
- package/dist/cdn/c/zen-garden-HMAMASJK.js +1 -0
- package/dist/cdn/element.js +1 -0
- package/dist/cdn/index.js +1 -0
- package/dist/chunks/chunk-3ISI6SOJ.js +1 -0
- package/dist/chunks/chunk-6HZC24J2.js +296 -0
- package/dist/chunks/chunk-7XMDQMDO.js +1 -0
- package/dist/chunks/chunk-B2NBRLO2.js +1 -0
- package/dist/chunks/chunk-B4TY5M55.js +1 -0
- package/dist/chunks/chunk-DAZOIOF7.js +1 -0
- package/dist/chunks/chunk-ES56TX4X.js +1 -0
- package/dist/chunks/chunk-FVGCB66F.js +1 -0
- package/dist/chunks/chunk-KIYSQVWX.js +1 -0
- package/dist/chunks/chunk-MNUNTC4L.js +4 -0
- package/dist/chunks/chunk-SH72TE6I.js +75 -0
- package/dist/chunks/chunk-URB3NNOB.js +70 -0
- package/dist/cli.js +97 -0
- package/dist/core/canvas2d.d.ts +18 -0
- package/dist/core/define.d.ts +16 -0
- package/dist/core/gl.d.ts +50 -0
- package/dist/core/glsl.d.ts +10 -0
- package/dist/core/overlay.d.ts +5 -0
- package/dist/core/runtime.d.ts +8 -0
- package/dist/core/shader.d.ts +22 -0
- package/dist/core/styles.d.ts +4 -0
- package/dist/core/text.d.ts +54 -0
- package/dist/core/types.d.ts +170 -0
- package/dist/core/util.d.ts +16 -0
- package/dist/core.d.ts +8 -0
- package/dist/core.js +1 -0
- package/dist/element.cdn.js +1 -0
- package/dist/element.d.ts +21 -0
- package/dist/element.js +1 -0
- package/dist/engines/arcade.d.ts +25 -0
- package/dist/engines/text3d.d.ts +37 -0
- package/dist/generated/all.d.ts +2 -0
- package/dist/generated/catalog.d.ts +2 -0
- package/dist/generated/registry.d.ts +5 -0
- package/dist/index.d.ts +23 -0
- package/dist/index.js +1 -0
- package/dist/lostpage.global.js +3222 -0
- package/dist/react.d.ts +21 -0
- package/dist/react.js +2 -0
- package/dist/scenes/_simple.d.ts +10 -0
- package/dist/scenes/ascii-3d.d.ts +10 -0
- package/dist/scenes/ascii-3d.js +3 -0
- package/dist/scenes/astronaut.d.ts +10 -0
- package/dist/scenes/astronaut.js +2 -0
- package/dist/scenes/aurora.d.ts +14 -0
- package/dist/scenes/aurora.js +129 -0
- package/dist/scenes/autumn.d.ts +8 -0
- package/dist/scenes/autumn.js +1 -0
- package/dist/scenes/balloon-404.d.ts +9 -0
- package/dist/scenes/balloon-404.js +1 -0
- package/dist/scenes/beach.d.ts +14 -0
- package/dist/scenes/beach.js +95 -0
- package/dist/scenes/black-hole.d.ts +15 -0
- package/dist/scenes/black-hole.js +124 -0
- package/dist/scenes/block-drop.d.ts +9 -0
- package/dist/scenes/block-drop.js +1 -0
- package/dist/scenes/blue-screen.d.ts +5 -0
- package/dist/scenes/blue-screen.js +70 -0
- package/dist/scenes/breakout.d.ts +10 -0
- package/dist/scenes/breakout.js +1 -0
- package/dist/scenes/bricks.d.ts +7 -0
- package/dist/scenes/bricks.js +1 -0
- package/dist/scenes/broken-link.d.ts +8 -0
- package/dist/scenes/broken-link.js +11 -0
- package/dist/scenes/brutalist.d.ts +7 -0
- package/dist/scenes/brutalist.js +15 -0
- package/dist/scenes/bubble-wrap.d.ts +9 -0
- package/dist/scenes/bubble-wrap.js +1 -0
- package/dist/scenes/campfire.d.ts +11 -0
- package/dist/scenes/campfire.js +88 -0
- package/dist/scenes/card.d.ts +8 -0
- package/dist/scenes/card.js +15 -0
- package/dist/scenes/cassette.d.ts +9 -0
- package/dist/scenes/cassette.js +15 -0
- package/dist/scenes/chalkboard.d.ts +8 -0
- package/dist/scenes/chalkboard.js +3 -0
- package/dist/scenes/chrome-404.d.ts +13 -0
- package/dist/scenes/chrome-404.js +1 -0
- package/dist/scenes/circuit-board.d.ts +9 -0
- package/dist/scenes/circuit-board.js +1 -0
- package/dist/scenes/claw-machine.d.ts +8 -0
- package/dist/scenes/claw-machine.js +1 -0
- package/dist/scenes/clay-404.d.ts +11 -0
- package/dist/scenes/clay-404.js +1 -0
- package/dist/scenes/constellation.d.ts +10 -0
- package/dist/scenes/constellation.js +1 -0
- package/dist/scenes/countdown.d.ts +9 -0
- package/dist/scenes/countdown.js +14 -0
- package/dist/scenes/cross-stitch.d.ts +8 -0
- package/dist/scenes/cross-stitch.js +2 -0
- package/dist/scenes/deep-sea.d.ts +9 -0
- package/dist/scenes/deep-sea.js +85 -0
- package/dist/scenes/divider.d.ts +6 -0
- package/dist/scenes/divider.js +9 -0
- package/dist/scenes/dna.d.ts +9 -0
- package/dist/scenes/dna.js +2 -0
- package/dist/scenes/dominoes.d.ts +9 -0
- package/dist/scenes/dominoes.js +1 -0
- package/dist/scenes/dot-grid.d.ts +9 -0
- package/dist/scenes/dot-grid.js +11 -0
- package/dist/scenes/editorial.d.ts +6 -0
- package/dist/scenes/editorial.js +11 -0
- package/dist/scenes/elevator.d.ts +10 -0
- package/dist/scenes/elevator.js +36 -0
- package/dist/scenes/emoji.d.ts +7 -0
- package/dist/scenes/emoji.js +8 -0
- package/dist/scenes/error-cascade.d.ts +6 -0
- package/dist/scenes/error-cascade.js +18 -0
- package/dist/scenes/evidence-board.d.ts +7 -0
- package/dist/scenes/evidence-board.js +18 -0
- package/dist/scenes/eyes.d.ts +12 -0
- package/dist/scenes/eyes.js +2 -0
- package/dist/scenes/fireworks.d.ts +8 -0
- package/dist/scenes/fireworks.js +1 -0
- package/dist/scenes/flashlight.d.ts +12 -0
- package/dist/scenes/flashlight.js +57 -0
- package/dist/scenes/flatline.d.ts +9 -0
- package/dist/scenes/flatline.js +1 -0
- package/dist/scenes/flock.d.ts +13 -0
- package/dist/scenes/flock.js +1 -0
- package/dist/scenes/foggy-glass.d.ts +9 -0
- package/dist/scenes/foggy-glass.js +1 -0
- package/dist/scenes/gears.d.ts +10 -0
- package/dist/scenes/gears.js +5 -0
- package/dist/scenes/glass-404.d.ts +11 -0
- package/dist/scenes/glass-404.js +1 -0
- package/dist/scenes/glitch.d.ts +15 -0
- package/dist/scenes/glitch.js +60 -0
- package/dist/scenes/gradient-404.d.ts +9 -0
- package/dist/scenes/gradient-404.js +6 -0
- package/dist/scenes/halftone.d.ts +11 -0
- package/dist/scenes/halftone.js +43 -0
- package/dist/scenes/hanging-letters.d.ts +10 -0
- package/dist/scenes/hanging-letters.js +1 -0
- package/dist/scenes/hanging-sign.d.ts +9 -0
- package/dist/scenes/hanging-sign.js +1 -0
- package/dist/scenes/helpful-links.d.ts +6 -0
- package/dist/scenes/helpful-links.js +18 -0
- package/dist/scenes/hyperspace.d.ts +11 -0
- package/dist/scenes/hyperspace.js +57 -0
- package/dist/scenes/hypnosis.d.ts +10 -0
- package/dist/scenes/hypnosis.js +26 -0
- package/dist/scenes/ink.d.ts +10 -0
- package/dist/scenes/ink.js +43 -0
- package/dist/scenes/invaders.d.ts +10 -0
- package/dist/scenes/invaders.js +1 -0
- package/dist/scenes/kaleidoscope.d.ts +10 -0
- package/dist/scenes/kaleidoscope.js +34 -0
- package/dist/scenes/lava-lamp.d.ts +11 -0
- package/dist/scenes/lava-lamp.js +55 -0
- package/dist/scenes/life.d.ts +13 -0
- package/dist/scenes/life.js +1 -0
- package/dist/scenes/lighthouse.d.ts +11 -0
- package/dist/scenes/lighthouse.js +60 -0
- package/dist/scenes/loading.d.ts +6 -0
- package/dist/scenes/loading.js +34 -0
- package/dist/scenes/lost-at-sea.d.ts +35 -0
- package/dist/scenes/lost-at-sea.js +258 -0
- package/dist/scenes/magic-8-ball.d.ts +10 -0
- package/dist/scenes/magic-8-ball.js +2 -0
- package/dist/scenes/matrix-rain.d.ts +13 -0
- package/dist/scenes/matrix-rain.js +3 -0
- package/dist/scenes/maze.d.ts +9 -0
- package/dist/scenes/maze.js +1 -0
- package/dist/scenes/mesh-gradient.d.ts +13 -0
- package/dist/scenes/mesh-gradient.js +34 -0
- package/dist/scenes/metro-map.d.ts +8 -0
- package/dist/scenes/metro-map.js +30 -0
- package/dist/scenes/milk-carton.d.ts +9 -0
- package/dist/scenes/milk-carton.js +53 -0
- package/dist/scenes/minimal.d.ts +6 -0
- package/dist/scenes/minimal.js +9 -0
- package/dist/scenes/mirage.d.ts +10 -0
- package/dist/scenes/mirage.js +70 -0
- package/dist/scenes/moon-landing.d.ts +8 -0
- package/dist/scenes/moon-landing.js +1 -0
- package/dist/scenes/neon-sign.d.ts +15 -0
- package/dist/scenes/neon-sign.js +1 -0
- package/dist/scenes/newspaper.d.ts +10 -0
- package/dist/scenes/newspaper.js +49 -0
- package/dist/scenes/nixie.d.ts +11 -0
- package/dist/scenes/nixie.js +1 -0
- package/dist/scenes/no-signal.d.ts +11 -0
- package/dist/scenes/no-signal.js +82 -0
- package/dist/scenes/one-bit.d.ts +8 -0
- package/dist/scenes/one-bit.js +49 -0
- package/dist/scenes/outline-404.d.ts +8 -0
- package/dist/scenes/outline-404.js +9 -0
- package/dist/scenes/paint-splash.d.ts +6 -0
- package/dist/scenes/paint-splash.js +1 -0
- package/dist/scenes/paper-plane.d.ts +9 -0
- package/dist/scenes/paper-plane.js +2 -0
- package/dist/scenes/particles.d.ts +22 -0
- package/dist/scenes/particles.js +1 -0
- package/dist/scenes/path-not-found.d.ts +6 -0
- package/dist/scenes/path-not-found.js +14 -0
- package/dist/scenes/planet.d.ts +19 -0
- package/dist/scenes/planet.js +157 -0
- package/dist/scenes/pond.d.ts +11 -0
- package/dist/scenes/pond.js +106 -0
- package/dist/scenes/pong.d.ts +8 -0
- package/dist/scenes/pong.js +1 -0
- package/dist/scenes/radar.d.ts +9 -0
- package/dist/scenes/radar.js +4 -0
- package/dist/scenes/rainy-window.d.ts +11 -0
- package/dist/scenes/rainy-window.js +114 -0
- package/dist/scenes/receipt.d.ts +8 -0
- package/dist/scenes/receipt.js +32 -0
- package/dist/scenes/road-closed.d.ts +9 -0
- package/dist/scenes/road-closed.js +1 -0
- package/dist/scenes/rpg-dialog.d.ts +11 -0
- package/dist/scenes/rpg-dialog.js +14 -0
- package/dist/scenes/runner.d.ts +10 -0
- package/dist/scenes/runner.js +1 -0
- package/dist/scenes/scratch-card.d.ts +9 -0
- package/dist/scenes/scratch-card.js +1 -0
- package/dist/scenes/screensaver.d.ts +8 -0
- package/dist/scenes/screensaver.js +1 -0
- package/dist/scenes/search-404.d.ts +9 -0
- package/dist/scenes/search-404.js +17 -0
- package/dist/scenes/server-default.d.ts +6 -0
- package/dist/scenes/server-default.js +10 -0
- package/dist/scenes/server-room.d.ts +9 -0
- package/dist/scenes/server-room.js +1 -0
- package/dist/scenes/skyline.d.ts +10 -0
- package/dist/scenes/skyline.js +1 -0
- package/dist/scenes/skywriting.d.ts +8 -0
- package/dist/scenes/skywriting.js +1 -0
- package/dist/scenes/slot-machine.d.ts +10 -0
- package/dist/scenes/slot-machine.js +33 -0
- package/dist/scenes/snake.d.ts +13 -0
- package/dist/scenes/snake.js +1 -0
- package/dist/scenes/snow-globe.d.ts +10 -0
- package/dist/scenes/snow-globe.js +2 -0
- package/dist/scenes/soft-blobs.d.ts +9 -0
- package/dist/scenes/soft-blobs.js +15 -0
- package/dist/scenes/solar-system.d.ts +9 -0
- package/dist/scenes/solar-system.js +2 -0
- package/dist/scenes/split-flap.d.ts +15 -0
- package/dist/scenes/split-flap.js +37 -0
- package/dist/scenes/split-panel.d.ts +8 -0
- package/dist/scenes/split-panel.js +12 -0
- package/dist/scenes/stage.d.ts +10 -0
- package/dist/scenes/stage.js +2 -0
- package/dist/scenes/swiss-poster.d.ts +9 -0
- package/dist/scenes/swiss-poster.js +20 -0
- package/dist/scenes/terminal.d.ts +13 -0
- package/dist/scenes/terminal.js +41 -0
- package/dist/scenes/thunderstorm.d.ts +11 -0
- package/dist/scenes/thunderstorm.js +1 -0
- package/dist/scenes/topographic.d.ts +13 -0
- package/dist/scenes/topographic.js +38 -0
- package/dist/scenes/torn-page.d.ts +9 -0
- package/dist/scenes/torn-page.js +16 -0
- package/dist/scenes/treasure-map.d.ts +10 -0
- package/dist/scenes/treasure-map.js +3 -0
- package/dist/scenes/typewriter.d.ts +10 -0
- package/dist/scenes/typewriter.js +23 -0
- package/dist/scenes/ufo.d.ts +11 -0
- package/dist/scenes/ufo.js +1 -0
- package/dist/scenes/unplugged.d.ts +9 -0
- package/dist/scenes/unplugged.js +1 -0
- package/dist/scenes/vending-machine.d.ts +7 -0
- package/dist/scenes/vending-machine.js +27 -0
- package/dist/scenes/vinyl.d.ts +9 -0
- package/dist/scenes/vinyl.js +2 -0
- package/dist/scenes/voxel-404.d.ts +13 -0
- package/dist/scenes/voxel-404.js +102 -0
- package/dist/scenes/wormhole.d.ts +13 -0
- package/dist/scenes/wormhole.js +113 -0
- package/dist/scenes/zen-garden.d.ts +8 -0
- package/dist/scenes/zen-garden.js +1 -0
- package/dist/svelte.d.ts +17 -0
- package/dist/svelte.js +1 -0
- package/dist/vue.d.ts +66 -0
- package/dist/vue.js +1 -0
- package/package.json +114 -4
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import"../chunks/chunk-KIYSQVWX.js";import"../chunks/chunk-7XMDQMDO.js";var esc=s=>s.replace(/[&<>"]/g,c=>({"&":"&","<":"<",">":">",'"':"""})[c]),ITEMS=["\u{1F964}","\u{1F36B}","\u{1F36A}","\u{1F968}","\u{1F9C3}","\u{1F36C}","\u{1F35F}","\u{1F95C}","\u{1F369}","\u{1F9CB}","\u{1F36D}","\u{1F96F}"],vending_machine_default={id:"vending-machine",name:"Sold Out",description:"A glowing vending machine where every slot is stocked except yours. Type the code into the keypad and watch what happens.",category:"Playful",kind:"2d",motion:"interactive",tags:["dom","vending","funny","interactive","retro","neon","keypad"],layout:"right",copy:{eyebrow:"Slot 404",title:"This one's sold out.",message:"Everything else is in stock. Try the keypad, or pick something from the homepage.",actions:[{label:"Browse the homepage",href:"/",variant:"primary"}]},params:{body:"#d62839",glass:"#0d1424",accent:"#3dff8a"},theme:{bg:"#121826",fg:"#f2f5ff",accent:"#3dff8a","accent-fg":"#021208"},presetName:"Cola Red",presets:{green:{name:"Tea Machine",params:{body:"#2a7a4a",glass:"#06140c",accent:"#ffd23f"},theme:{accent:"#ffd23f","accent-fg":"#1a1400"}},blue:{name:"Midnight Blue",params:{body:"#1f4e9c",glass:"#081020",accent:"#7fd3ff"},theme:{accent:"#7fd3ff","accent-fg":"#04121f"}},tokyo:{name:"Tokyo White",params:{body:"#f2f2f2",glass:"#101418",accent:"#ff3b5c"},theme:{bg:"#e7e9ee",fg:"#101418",accent:"#ff3b5c","accent-fg":"#fff"}}},css:`
|
|
2
|
+
& .vm-wrap{position:absolute;inset:0;display:flex;align-items:center;justify-content:flex-start;padding-left:clamp(20px,10cqw,180px)}
|
|
3
|
+
& .vm{--u:clamp(8px,1.05cqh,12px);position:relative;width:calc(var(--u)*44);height:calc(var(--u)*72);background:linear-gradient(90deg,color-mix(in srgb,var(--body) 75%,#000),var(--body) 12%,var(--body) 88%,color-mix(in srgb,var(--body) 70%,#000));
|
|
4
|
+
border-radius:calc(var(--u)*1.6);padding:calc(var(--u)*2.4);display:grid;grid-template-columns:1fr calc(var(--u)*10);gap:calc(var(--u)*1.6);box-shadow:0 40px 80px -30px rgba(0,0,0,.7)}
|
|
5
|
+
& .vm::before{content:"";position:absolute;left:0;right:0;top:calc(var(--u)*-2.6);height:calc(var(--u)*3);border-radius:calc(var(--u)*1) calc(var(--u)*1) 0 0;background:color-mix(in srgb,var(--body) 80%,#fff)}
|
|
6
|
+
& .vm-glass{position:relative;background:var(--glass);border-radius:calc(var(--u)*.8);padding:calc(var(--u)*1.2);display:grid;grid-template-columns:repeat(3,1fr);grid-auto-rows:1fr;gap:calc(var(--u)*.8);
|
|
7
|
+
box-shadow:inset 0 0 calc(var(--u)*3) rgba(120,200,255,.25);overflow:hidden}
|
|
8
|
+
& .vm-glass::after{content:"";position:absolute;inset:0;background:linear-gradient(115deg,rgba(255,255,255,.14),transparent 30%,transparent 60%,rgba(255,255,255,.06));pointer-events:none}
|
|
9
|
+
& .vm-slot{position:relative;display:flex;flex-direction:column;align-items:center;justify-content:flex-end;border-bottom:calc(var(--u)*.35) solid #9aa3b5}
|
|
10
|
+
& .vm-slot .it{font-size:calc(var(--u)*3.3);line-height:1;transition:transform .6s cubic-bezier(.5,0,.75,0)}
|
|
11
|
+
& .vm-slot .tag{font:700 calc(var(--u)*.95)/1 var(--lp-font-mono);color:#cfd6e6;margin-top:calc(var(--u)*.5)}
|
|
12
|
+
& .vm-slot.out .it{opacity:.18;filter:grayscale(1)}
|
|
13
|
+
& .vm-slot.out .so{position:absolute;inset:auto 0 calc(var(--u)*2.4);margin:auto;width:max-content;transform:rotate(-12deg);font:800 calc(var(--u)*1.1)/1 var(--lp-font);color:#fff;background:#e5484d;padding:calc(var(--u)*.35) calc(var(--u)*.6);border-radius:4px;letter-spacing:.08em}
|
|
14
|
+
& .vm-slot.drop .it{transform:translateY(calc(var(--u)*30))}
|
|
15
|
+
& .vm-side{display:flex;flex-direction:column;gap:calc(var(--u)*1.2)}
|
|
16
|
+
& .vm-screen{background:#071009;color:var(--accent);font:700 calc(var(--u)*1.5)/1.2 var(--lp-font-mono);padding:calc(var(--u)*.9);border-radius:6px;text-shadow:0 0 8px var(--accent);min-height:calc(var(--u)*6);display:flex;align-items:center;justify-content:center;text-align:center}
|
|
17
|
+
& .vm-keys{display:grid;grid-template-columns:repeat(3,1fr);gap:calc(var(--u)*.5)}
|
|
18
|
+
& .vm-keys button{aspect-ratio:1;border:0;border-radius:6px;background:linear-gradient(180deg,#f2f2f2,#c9ced6);font:800 calc(var(--u)*1.4)/1 var(--lp-font-mono);color:#222;cursor:pointer;box-shadow:0 3px 0 #8e949c;pointer-events:auto}
|
|
19
|
+
& .vm-keys button:active{transform:translateY(2px);box-shadow:0 1px 0 #8e949c}
|
|
20
|
+
& .vm-coin{height:calc(var(--u)*5);border-radius:6px;background:#0b0b0b;display:flex;align-items:center;justify-content:center}
|
|
21
|
+
& .vm-coin i{width:calc(var(--u)*.6);height:calc(var(--u)*3);background:#555;border-radius:3px}
|
|
22
|
+
& .vm-tray{grid-column:1/-1;height:calc(var(--u)*7);background:#0b0b0b;border-radius:calc(var(--u)*.8);box-shadow:inset 0 calc(var(--u)*.6) calc(var(--u)*1.2) rgba(0,0,0,.9);display:flex;align-items:center;justify-content:center;color:#666;font:700 calc(var(--u)*1.1)/1 var(--lp-font-mono);letter-spacing:.2em}
|
|
23
|
+
& .lp-overlay{padding-right:clamp(24px,8cqw,140px)}& .lp-head,& .lp-body{max-width:min(460px,40cqw)}
|
|
24
|
+
@container (max-width:820px){& .vm-wrap{justify-content:center;align-items:flex-start;padding:4cqh 0 0}& .vm{--u:clamp(6px,.8cqh,9px)}& .lp-overlay{justify-content:flex-end}& .lp-head,& .lp-body{max-width:none}& .lp-code{display:none}}
|
|
25
|
+
`,setup(ctx){let p=ctx.params,c=ctx.copy,wrap=document.createElement("div");wrap.className="vm-wrap",wrap.style.setProperty("--body",p.body),wrap.style.setProperty("--glass",p.glass),wrap.style.setProperty("--accent",p.accent);let slots=ITEMS.map((it,i)=>{let code=i===7?c.code:`${String.fromCharCode(65+Math.floor(i/3))}${i%3+1}`;return{it,code,out:i===7}});wrap.innerHTML=`<div class="vm"><div class="vm-glass">${slots.map((s,i)=>`<div class="vm-slot${s.out?" out":""}" data-i="${i}"><span class="it">${s.it}</span>${s.out?'<span class="so">SOLD OUT</span>':""}<span class="tag">${esc(s.code)}</span></div>`).join("")}</div>
|
|
26
|
+
<div class="vm-side"><div class="vm-screen" aria-live="polite">INSERT<br>CODE</div><div class="vm-keys">${["1","2","3","4","5","6","7","8","9","A","0","B"].map(k=>`<button type="button" aria-label="Key ${k}">${k}</button>`).join("")}</div>
|
|
27
|
+
<div class="vm-coin"><i></i></div></div><div class="vm-tray">PUSH</div></div>`,ctx.stage.append(wrap),ctx.stage.removeAttribute("aria-hidden");let screen=wrap.querySelector(".vm-screen"),typed="",busy=!1,vend=code=>{busy=!0;let idx=slots.findIndex(s=>s.code.toUpperCase()===code.toUpperCase());if(idx<0)screen.innerHTML="INVALID<br>CODE";else if(slots[idx].out)screen.innerHTML=`${esc(code)}<br>SOLD OUT`;else{screen.innerHTML=`VENDING<br>${esc(code)}`;let el=wrap.querySelector(`.vm-slot[data-i="${idx}"]`);el.classList.add("drop"),setTimeout(()=>el.classList.remove("drop"),1600)}setTimeout(()=>{typed="",busy=!1,screen.innerHTML="INSERT<br>CODE"},1800)};wrap.querySelectorAll(".vm-keys button").forEach(b=>b.addEventListener("click",()=>{if(busy)return;typed+=b.textContent,screen.textContent=typed;let isTarget=c.code.startsWith(typed)||/^[A-D][1-3]$/.test(typed);(typed.length>=c.code.length||/^[A-D][1-3]$/.test(typed)||!isTarget)&&vend(typed)}));let demo=ctx.reducedMotion?-1:2.5,demoIdx=0;return{frame(t){demo<0||ctx.pointer.engaged||busy||t>demo&&(demoIdx<c.code.length?(typed+=c.code[demoIdx++],screen.textContent=typed,demo=t+.45):(vend(typed),demoIdx=0,demo=t+7))},destroy(){wrap.remove()}}}};export{vending_machine_default as default};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{canvas2d}from"../chunks/chunk-DAZOIOF7.js";import{rgba}from"../chunks/chunk-FVGCB66F.js";import{SANS}from"../chunks/chunk-3ISI6SOJ.js";import"../chunks/chunk-KIYSQVWX.js";import"../chunks/chunk-7XMDQMDO.js";var vinyl_default={id:"vinyl",name:"Broken Record",description:"A turntable spins a record pressed with the error. Every few seconds the needle skips back and the same groove plays again.",category:"Retro Tech",kind:"2d",motion:"live",tags:["canvas","vinyl","music","turntable","retro","warm","illustration"],layout:"right",copy:{eyebrow:"Now playing",title:"Sounds like a broken record.",message:"This page keeps skipping back to the same spot: not found, not found, not found. Change the record.",actions:[{label:"Change the record",href:"/",variant:"primary"}]},params:{deck:"#d9cbb4",record:"#111111",label:"#e4572e",labelInk:"#fff4e6",bg:"#f2e8d8"},theme:{bg:"#f2e8d8",fg:"#2a1a0d",accent:"#2a1a0d","accent-fg":"#fff"},presetName:"Walnut",presets:{black:{name:"Studio Black",params:{deck:"#1d1d20",record:"#0a0a0a",label:"#f2f2f2",labelInk:"#111111",bg:"#0e0e10"},theme:{bg:"#0e0e10",fg:"#f2f2f2",accent:"#f2f2f2","accent-fg":"#000"}},color:{name:"Coloured Vinyl",params:{deck:"#f4f1ea",record:"#c2185b",label:"#ffd23f",labelInk:"#3a0a22",bg:"#ffe6ee"},theme:{bg:"#ffe6ee",fg:"#3a0a22",accent:"#3a0a22"}},jazz:{name:"Blue Note",params:{deck:"#16202e",record:"#0b0b0b",label:"#2b59ff",labelInk:"#ffffff",bg:"#0d1622"},theme:{bg:"#0d1622",fg:"#e6eeff",accent:"#e6eeff","accent-fg":"#0d1622"}}},css:`& .lp-overlay{padding-right:clamp(24px,8cqw,140px)}& .lp-head,& .lp-body{max-width:min(460px,40cqw)}
|
|
2
|
+
@container (max-width:760px){& .lp-head,& .lp-body{max-width:none}& .lp-overlay{justify-content:flex-end}}`,setup(ctx){let p=ctx.params,c=canvas2d(ctx),ang=0,skipT=0;return{resize(){c.reset()},frame(t,dt){let g=c.g;c.reset(),g.fillStyle=p.bg,g.fillRect(0,0,c.w,c.h);let narrow=c.w<760,R=narrow?Math.min(c.w*.36,c.h*.24):Math.min(c.h*.36,c.w*.24),cx=narrow?c.w/2:c.w*.32,cy=narrow?c.h*.3:c.h*.5;g.fillStyle="rgba(0,0,0,.18)",g.beginPath(),g.roundRect(cx-R*1.3+10,cy-R*1.2+16,R*2.75,R*2.4,R*.08),g.fill(),g.fillStyle=p.deck,g.beginPath(),g.roundRect(cx-R*1.3,cy-R*1.2,R*2.75,R*2.4,R*.08),g.fill(),ang+=dt*(33.3/60)*Math.PI*2,skipT+=dt;let jump=0;skipT>2.6&&(skipT=0,jump=1),g.fillStyle="#2a2a2a",g.beginPath(),g.arc(cx,cy,R*1.04,0,Math.PI*2),g.fill(),g.save(),g.translate(cx,cy),g.rotate(ang),g.fillStyle=p.record,g.beginPath(),g.arc(0,0,R,0,Math.PI*2),g.fill(),g.strokeStyle=rgba("#ffffff",.05),g.lineWidth=1;for(let r=R*.38;r<R*.98;r+=3)g.beginPath(),g.arc(0,0,r,0,Math.PI*2),g.stroke();g.fillStyle=p.label,g.beginPath(),g.arc(0,0,R*.34,0,Math.PI*2),g.fill(),g.fillStyle=p.labelInk,g.textAlign="center",g.textBaseline="middle",g.font=`900 ${R*.16}px ${SANS}`,g.fillText(ctx.copy.code,0,-R*.06),g.font=`700 ${R*.045}px ${SANS}`,g.fillText("NOT FOUND \xB7 33\u2153 RPM",0,R*.1),g.fillStyle="#ddd",g.beginPath(),g.arc(0,0,R*.025,0,Math.PI*2),g.fill(),g.restore();let sh=g.createLinearGradient(cx-R,cy-R,cx+R,cy+R);sh.addColorStop(.3,"rgba(255,255,255,0)"),sh.addColorStop(.5,"rgba(255,255,255,.12)"),sh.addColorStop(.7,"rgba(255,255,255,0)"),g.fillStyle=sh,g.beginPath(),g.arc(cx,cy,R,0,Math.PI*2),g.fill();let px=cx+R*1.15,py=cy-R*.85,armA=2.25+(jump?-.04:0)+Math.sin(t*40)*.002;g.fillStyle="#c9c9cc",g.beginPath(),g.arc(px,py,R*.11,0,Math.PI*2),g.fill(),g.strokeStyle="#d9d9dc",g.lineWidth=R*.035,g.lineCap="round";let ex=px+Math.cos(armA)*R*1.05,ey=py+Math.sin(armA)*R*1.05;g.beginPath(),g.moveTo(px,py),g.lineTo(ex,ey),g.stroke(),g.fillStyle="#3a3a3a",g.save(),g.translate(ex,ey),g.rotate(armA+.4),g.fillRect(-R*.04,-R*.07,R*.08,R*.16),g.restore(),skipT<.25&&(g.fillStyle=rgba(p.label,1-skipT*4),g.font=`700 ${R*.09}px ${SANS}`,g.fillText("*skip*",ex+R*.2,ey-R*.1))}}}};export{vinyl_default as default};
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
interface Params {
|
|
2
|
+
top: string;
|
|
3
|
+
side: string;
|
|
4
|
+
side2: string;
|
|
5
|
+
bg: string;
|
|
6
|
+
bg2: string;
|
|
7
|
+
ground: string;
|
|
8
|
+
depth: number;
|
|
9
|
+
/** 0 earthy (grass/dirt), 1 solid tint, 2 neon edges */
|
|
10
|
+
look: number;
|
|
11
|
+
}
|
|
12
|
+
declare const _default: import("..").SceneDef<Params>;
|
|
13
|
+
export default _default;
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
import{codeBitmap}from"../chunks/chunk-MNUNTC4L.js";import{shaderScene}from"../chunks/chunk-B4TY5M55.js";import{HASH,POST}from"../chunks/chunk-SH72TE6I.js";import{linear}from"../chunks/chunk-FVGCB66F.js";import"../chunks/chunk-3ISI6SOJ.js";import"../chunks/chunk-KIYSQVWX.js";import"../chunks/chunk-7XMDQMDO.js";var FRAG=`
|
|
2
|
+
uniform sampler2D uGrid;
|
|
3
|
+
uniform vec3 uDim;
|
|
4
|
+
uniform vec3 uTop, uSide, uSide2, uBg, uBg2, uGround;
|
|
5
|
+
uniform float uLook;
|
|
6
|
+
${HASH}
|
|
7
|
+
${POST}
|
|
8
|
+
|
|
9
|
+
bool filled(ivec3 c) {
|
|
10
|
+
if (c.x < 0 || c.y < 0 || c.z < 0 || c.x >= int(uDim.x) || c.y >= int(uDim.y) || c.z >= int(uDim.z)) return false;
|
|
11
|
+
return texelFetch(uGrid, ivec2(c.x, int(uDim.y) - 1 - c.y), 0).r > 0.5;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
vec2 boxHit(vec3 ro, vec3 rd, vec3 bmin, vec3 bmax) {
|
|
15
|
+
vec3 inv = 1.0 / rd;
|
|
16
|
+
vec3 t0 = (bmin - ro) * inv, t1 = (bmax - ro) * inv;
|
|
17
|
+
vec3 tn = min(t0, t1), tf = max(t0, t1);
|
|
18
|
+
return vec2(max(max(tn.x, tn.y), tn.z), min(min(tf.x, tf.y), tf.z));
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
void main() {
|
|
22
|
+
vec2 fc = gl_FragCoord.xy;
|
|
23
|
+
vec2 uv = (fc - 0.5 * uRes) / uRes.y;
|
|
24
|
+
float t = uTime;
|
|
25
|
+
vec3 col = mix(uBg2, uBg, smoothstep(-0.5, 0.6, uv.y));
|
|
26
|
+
float yaw = sin(t * 0.35) * 0.55 + uMouse.x * 0.6;
|
|
27
|
+
float pitch = 0.32 + sin(t * 0.27) * 0.08 - uMouse.y * 0.2;
|
|
28
|
+
float aspect = uRes.x / uRes.y;
|
|
29
|
+
float dist = max(uDim.x * 1.9 / (0.74 * min(aspect, 2.0)), uDim.y * 1.9 / 0.42);
|
|
30
|
+
vec3 target = vec3(0.0, uDim.y * 0.08, 0.0);
|
|
31
|
+
vec3 ro = target + dist * vec3(sin(yaw) * cos(pitch), sin(pitch), cos(yaw) * cos(pitch));
|
|
32
|
+
vec3 fw = normalize(target - ro);
|
|
33
|
+
vec3 rt = normalize(cross(fw, vec3(0, 1, 0)));
|
|
34
|
+
vec3 up = cross(rt, fw);
|
|
35
|
+
vec3 rd = normalize(fw * 1.9 + rt * uv.x + up * (uv.y - 0.22));
|
|
36
|
+
vec3 off = -uDim * 0.5;
|
|
37
|
+
// ground plane with a soft shadow of the blocks
|
|
38
|
+
float tg = (-uDim.y * 0.5 - 0.02 - ro.y) / rd.y;
|
|
39
|
+
if (tg > 0.0) {
|
|
40
|
+
vec3 gp = ro + rd * tg;
|
|
41
|
+
vec2 g = gp.xz;
|
|
42
|
+
float fade = exp(-length(g) / (uDim.x * 0.9));
|
|
43
|
+
vec3 gc = mix(col, uGround, fade);
|
|
44
|
+
// fake shadow: project the footprint straight down, blurred
|
|
45
|
+
vec2 sh = (gp.xz - off.xz) ;
|
|
46
|
+
float occ = 0.0;
|
|
47
|
+
for (int i = 0; i < 8; i++) {
|
|
48
|
+
vec2 o = vec2(cos(float(i) * 0.785), sin(float(i) * 0.785)) * 1.5;
|
|
49
|
+
ivec3 cc = ivec3(floor(vec3(sh.x + o.x + 2.0, 0.0, sh.y + o.y + 1.0)));
|
|
50
|
+
for (int y = 0; y < 64; y++) { if (float(y) >= uDim.y) break; if (filled(ivec3(cc.x, y, cc.z))) { occ += 1.0; break; } }
|
|
51
|
+
}
|
|
52
|
+
gc *= 1.0 - occ / 8.0 * 0.45 * fade;
|
|
53
|
+
col = gc;
|
|
54
|
+
}
|
|
55
|
+
vec2 bh = boxHit(ro, rd, off, off + uDim);
|
|
56
|
+
if (bh.x < bh.y && bh.y > 0.0) {
|
|
57
|
+
vec3 p = ro + rd * max(bh.x, 0.0) - off;
|
|
58
|
+
ivec3 c = ivec3(floor(clamp(p, vec3(0.0), uDim - 0.001)));
|
|
59
|
+
vec3 stepv = sign(rd);
|
|
60
|
+
vec3 tDelta = abs(1.0 / rd);
|
|
61
|
+
vec3 tMax = (vec3(c) + max(stepv, 0.0) - p) / rd;
|
|
62
|
+
vec3 n = vec3(0.0);
|
|
63
|
+
// which face we entered through
|
|
64
|
+
vec3 e = p - vec3(c);
|
|
65
|
+
if (bh.x > 0.0) {
|
|
66
|
+
vec3 d = min(e, 1.0 - e);
|
|
67
|
+
n = d.x < d.y && d.x < d.z ? vec3(-stepv.x, 0, 0) : d.y < d.z ? vec3(0, -stepv.y, 0) : vec3(0, 0, -stepv.z);
|
|
68
|
+
}
|
|
69
|
+
bool hit = false;
|
|
70
|
+
for (int i = 0; i < 220; i++) {
|
|
71
|
+
if (filled(c)) { hit = true; break; }
|
|
72
|
+
if (tMax.x < tMax.y && tMax.x < tMax.z) { c.x += int(stepv.x); tMax.x += tDelta.x; n = vec3(-stepv.x, 0, 0); }
|
|
73
|
+
else if (tMax.y < tMax.z) { c.y += int(stepv.y); tMax.y += tDelta.y; n = vec3(0, -stepv.y, 0); }
|
|
74
|
+
else { c.z += int(stepv.z); tMax.z += tDelta.z; n = vec3(0, 0, -stepv.z); }
|
|
75
|
+
if (c.x < -1 || c.y < -1 || c.z < -1 || c.x > int(uDim.x) || c.y > int(uDim.y) || c.z > int(uDim.z)) break;
|
|
76
|
+
}
|
|
77
|
+
if (hit) {
|
|
78
|
+
float th = max(max(max(tMax.x - tDelta.x, tMax.y - tDelta.y), tMax.z - tDelta.z), 0.0);
|
|
79
|
+
vec3 hp = p + rd * th;
|
|
80
|
+
vec3 f = fract(hp);
|
|
81
|
+
float rnd = hash13(vec3(c));
|
|
82
|
+
vec3 base;
|
|
83
|
+
if (uLook < 0.5) {
|
|
84
|
+
bool topFace = n.y > 0.5;
|
|
85
|
+
bool grassRim = !filled(c + ivec3(0, 1, 0)) && f.y > 0.82 && n.y < 0.5;
|
|
86
|
+
base = topFace || grassRim ? uTop : mix(uSide, uSide2, step(0.5, hash13(floor(hp * 4.0))));
|
|
87
|
+
} else base = mix(uSide, uSide2, rnd * 0.5) * (n.y > 0.5 ? 1.15 : 1.0);
|
|
88
|
+
vec3 L = normalize(vec3(0.5, 0.9, 0.4));
|
|
89
|
+
float dif = 0.45 + 0.55 * max(dot(n, L), 0.0);
|
|
90
|
+
// edge darkening for the chunky look
|
|
91
|
+
vec2 fe = n.x != 0.0 ? f.yz : n.y != 0.0 ? f.xz : f.xy;
|
|
92
|
+
float edge = smoothstep(0.0, 0.08, min(min(fe.x, 1.0 - fe.x), min(fe.y, 1.0 - fe.y)));
|
|
93
|
+
// occlusion from the neighbour above
|
|
94
|
+
float ao = filled(c + ivec3(0, 1, 0)) && n.y < 0.5 ? 0.85 : 1.0;
|
|
95
|
+
col = base * dif * ao * (0.75 + 0.25 * edge) * (0.92 + 0.08 * rnd);
|
|
96
|
+
if (uLook > 1.5) col = mix(uBg2 * 0.6, uTop * 1.6, 1.0 - edge) + base * 0.15;
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
col = toSRGB(col);
|
|
100
|
+
fragColor = vec4(col, 1.0);
|
|
101
|
+
}
|
|
102
|
+
`,voxel_404_default={id:"voxel-404",name:"Voxel Blocks",description:"The error built out of chunky 3D blocks, grass on top and dirt underneath, turning slowly on its own little patch of ground.",category:"Typography",kind:"3d",motion:"live",tags:["webgl","voxel","blocks","3d","pixel","game","playful"],layout:"bottom",codeInScene:!0,copy:{eyebrow:"Chunk not loaded",title:"This part of the world isn't generated.",message:"You've wandered past the render distance. Respawn at the homepage.",actions:[{label:"Respawn",href:"/",variant:"primary"}]},params:{top:"#5fbf3a",side:"#8a5a32",side2:"#7a4e2a",bg:"#8fd0ff",bg2:"#d9f0ff",ground:"#c9e6b8",depth:4,look:0},theme:{bg:"#b9e2ff",fg:"#10202e",accent:"#10202e","accent-fg":"#fff","font-display":"var(--lp-font-mono)","title-weight":"700"},presetName:"Grassland",presets:{snow:{name:"Tundra",params:{top:"#ffffff",side:"#7a8a99",side2:"#6b7a88",bg:"#c9d8e6",bg2:"#f2f6fa",ground:"#ffffff"},theme:{bg:"#e6eef5"}},desert:{name:"Sandstone",params:{top:"#f2d9a0",side:"#d9b874",side2:"#c9a35a",bg:"#ffb38a",bg2:"#ffe6c7",ground:"#f2d9a0",look:1},theme:{bg:"#ffd8b8",fg:"#2a1405"}},candy:{name:"Candy Blocks",params:{top:"#ffc2d9",side:"#ff8fb1",side2:"#b9a6ff",bg:"#fff2f8",bg2:"#ffffff",ground:"#ffe6f0",look:1},theme:{bg:"#fff2f8",fg:"#3a0a22"}},nether:{name:"Netherrack",params:{top:"#ff5a1f",side:"#6b1a1a",side2:"#4a1010",bg:"#1a0505",bg2:"#3a0a08",ground:"#2a0808",look:1},theme:{bg:"#1a0505",fg:"#ffe0d6",accent:"#ff7a3d","accent-fg":"#1a0505"}},neon:{name:"Wireframe",params:{top:"#3bffe6",side:"#0a1a2a",side2:"#081420",bg:"#02060c",bg2:"#06101c",ground:"#02060c",look:2},theme:{bg:"#02060c",fg:"#e6fffb",accent:"#3bffe6","accent-fg":"#02060c"}}},setup(ctx){let p=ctx.params,cols=26,rows=9,bm=codeBitmap(ctx.copy.code||"404",cols,rows,900),data=new Uint8Array(cols*rows);for(let y=0;y<rows;y++)for(let x=0;x<cols;x++)data[y*cols+x]=bm[y*cols+x]?255:0;let tex;return shaderScene(ctx,{frag:FRAG,init(gl){tex=gl.createTexture(),gl.bindTexture(gl.TEXTURE_2D,tex),gl.pixelStorei(gl.UNPACK_ALIGNMENT,1),gl.texImage2D(gl.TEXTURE_2D,0,gl.R8,cols,rows,0,gl.RED,gl.UNSIGNED_BYTE,data),gl.texParameteri(gl.TEXTURE_2D,gl.TEXTURE_MIN_FILTER,gl.NEAREST),gl.texParameteri(gl.TEXTURE_2D,gl.TEXTURE_MAG_FILTER,gl.NEAREST)},uniforms:()=>({uGrid:tex,uDim:[cols,rows,p.depth],uTop:linear(p.top),uSide:linear(p.side),uSide2:linear(p.side2),uBg:linear(p.bg),uBg2:linear(p.bg2),uGround:linear(p.ground),uLook:p.look})})}};export{voxel_404_default as default};
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
interface Params {
|
|
2
|
+
a: string;
|
|
3
|
+
b: string;
|
|
4
|
+
glow: string;
|
|
5
|
+
base: string;
|
|
6
|
+
speed: number;
|
|
7
|
+
/** 0 neon grid · 1 rings · 2 organic · 3 data hex */
|
|
8
|
+
style: number;
|
|
9
|
+
radius: number;
|
|
10
|
+
fog: number;
|
|
11
|
+
}
|
|
12
|
+
declare const _default: import("..").SceneDef<Params>;
|
|
13
|
+
export default _default;
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
import{shaderScene}from"../chunks/chunk-B4TY5M55.js";import{HASH,NOISE,POST}from"../chunks/chunk-SH72TE6I.js";import{linear}from"../chunks/chunk-FVGCB66F.js";import"../chunks/chunk-KIYSQVWX.js";import"../chunks/chunk-7XMDQMDO.js";var FRAG=`
|
|
2
|
+
uniform vec3 uA, uB, uGlow, uBase;
|
|
3
|
+
uniform float uSpeed, uStyle, uRadius, uFog;
|
|
4
|
+
${HASH}
|
|
5
|
+
${NOISE}
|
|
6
|
+
${POST}
|
|
7
|
+
|
|
8
|
+
vec2 path(float z) { return vec2(sin(z * 0.11) * 3.2 + sin(z * 0.047) * 2.0, cos(z * 0.09) * 2.4 + sin(z * 0.031) * 1.4); }
|
|
9
|
+
|
|
10
|
+
float map(vec3 p) {
|
|
11
|
+
vec2 c = path(p.z);
|
|
12
|
+
float r = uRadius;
|
|
13
|
+
if (uStyle > 1.5 && uStyle < 2.5) {
|
|
14
|
+
vec2 dir = normalize(p.xy - c + 1e-4);
|
|
15
|
+
r += 0.22 * sin(p.z * 0.9 + uTime) + 0.16 * vnoise3(vec3(dir * 1.5, p.z * 0.6));
|
|
16
|
+
}
|
|
17
|
+
return (r - length(p.xy - c)) * 0.8;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
vec3 wallColor(vec3 p, vec3 n, float dist) {
|
|
21
|
+
vec2 c = path(p.z);
|
|
22
|
+
float ang = atan(p.y - c.y, p.x - c.x);
|
|
23
|
+
float u = ang / 6.28318 + 0.5;
|
|
24
|
+
float z = p.z;
|
|
25
|
+
vec3 col = uBase;
|
|
26
|
+
if (uStyle < 0.5) {
|
|
27
|
+
// neon grid
|
|
28
|
+
float gx = abs(fract(u * 24.0) - 0.5);
|
|
29
|
+
float gz = abs(fract(z * 0.5) - 0.5);
|
|
30
|
+
float line = smoothstep(0.05, 0.0, min(gx, gz * 0.9) - 0.004);
|
|
31
|
+
vec3 lc = mix(uA, uB, 0.5 + 0.5 * sin(z * 0.08 + uTime * 0.4));
|
|
32
|
+
col += lc * line * 2.2;
|
|
33
|
+
col += lc * 0.1 * exp(-min(gx, gz) * 14.0);
|
|
34
|
+
} else if (uStyle < 1.5) {
|
|
35
|
+
// light rings
|
|
36
|
+
float rz = abs(fract(z * 0.12) - 0.5);
|
|
37
|
+
float ring = smoothstep(0.03, 0.0, rz - 0.005);
|
|
38
|
+
float halo = exp(-rz * 18.0);
|
|
39
|
+
vec3 lc = mix(uA, uB, 0.5 + 0.5 * sin(floor(z * 0.12) * 1.7));
|
|
40
|
+
float panel = smoothstep(0.02, 0.0, abs(fract(u * 16.0) - 0.5) - 0.47);
|
|
41
|
+
col = uBase * (0.6 + 0.4 * vnoise(vec2(u * 80.0, z * 3.0))) + uBase * panel * 0.5;
|
|
42
|
+
col += lc * (ring * 4.0 + halo * 0.35);
|
|
43
|
+
} else if (uStyle < 2.5) {
|
|
44
|
+
// organic: veins and wet highlights
|
|
45
|
+
vec2 dir = normalize(p.xy - c + 1e-4);
|
|
46
|
+
float v = fbm3(vec3(dir * 2.2, z * 0.45 - uTime * 0.1));
|
|
47
|
+
float vein = smoothstep(0.025, 0.0, abs(v - 0.5));
|
|
48
|
+
col = mix(uBase, uA, smoothstep(0.3, 0.8, v)) * 0.8;
|
|
49
|
+
col += uB * vein * 0.6;
|
|
50
|
+
} else {
|
|
51
|
+
// data hex
|
|
52
|
+
vec2 q = vec2(u * 32.0, z * 1.1);
|
|
53
|
+
vec2 id = floor(q);
|
|
54
|
+
float h = hash12(id);
|
|
55
|
+
float on = step(0.72, fract(h + uTime * 0.25 * hash12(id + 3.0)));
|
|
56
|
+
vec2 f = fract(q) - 0.5;
|
|
57
|
+
float cell = smoothstep(0.42, 0.36, max(abs(f.x), abs(f.y)));
|
|
58
|
+
col += mix(uA, uB, h) * on * cell * 1.6;
|
|
59
|
+
col += uA * 0.05 * cell;
|
|
60
|
+
}
|
|
61
|
+
return col;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
void main() {
|
|
65
|
+
vec2 fc = gl_FragCoord.xy;
|
|
66
|
+
vec2 uv = (fc - 0.5 * uRes) / uRes.y;
|
|
67
|
+
float t = uTime * uSpeed;
|
|
68
|
+
float z0 = t * 6.0;
|
|
69
|
+
vec3 ro = vec3(path(z0), z0);
|
|
70
|
+
vec3 ta = vec3(path(z0 + 6.0), z0 + 6.0);
|
|
71
|
+
ta.xy += uMouse * 1.2;
|
|
72
|
+
vec3 fw = normalize(ta - ro);
|
|
73
|
+
vec3 rt = normalize(cross(vec3(sin(t * 0.07) * 0.3, 1.0, 0.0), fw));
|
|
74
|
+
vec3 up = cross(fw, rt);
|
|
75
|
+
vec3 rd = normalize(fw * 1.3 + rt * uv.x + up * uv.y);
|
|
76
|
+
|
|
77
|
+
float d = 0.0;
|
|
78
|
+
vec3 p = ro;
|
|
79
|
+
for (int i = 0; i < 90; i++) {
|
|
80
|
+
p = ro + rd * d;
|
|
81
|
+
float h = map(p);
|
|
82
|
+
if (h < 0.002 * d + 0.001) break;
|
|
83
|
+
d += h * 0.7;
|
|
84
|
+
if (d > 80.0) break;
|
|
85
|
+
}
|
|
86
|
+
vec3 col;
|
|
87
|
+
float fogT = 1.0 - exp(-d * uFog);
|
|
88
|
+
if (d < 80.0) {
|
|
89
|
+
vec2 e = vec2(0.01, 0.0);
|
|
90
|
+
vec3 n = normalize(vec3(map(p + e.xyy) - map(p - e.xyy), map(p + e.yxy) - map(p - e.yxy), map(p + e.yyx) - map(p - e.yyx)));
|
|
91
|
+
col = wallColor(p, n, d);
|
|
92
|
+
float head = max(dot(n, -rd), 0.0);
|
|
93
|
+
if (uStyle > 1.5 && uStyle < 2.5) col *= 0.35 + 0.9 * head;
|
|
94
|
+
float spec = pow(max(dot(reflect(rd, n), -rd), 0.0), 30.0);
|
|
95
|
+
col += uGlow * spec * 0.25;
|
|
96
|
+
} else {
|
|
97
|
+
col = uGlow;
|
|
98
|
+
}
|
|
99
|
+
// light at the end of the tunnel
|
|
100
|
+
vec3 far = vec3(path(z0 + 70.0), z0 + 70.0);
|
|
101
|
+
float g = max(dot(rd, normalize(far - ro)), 0.0);
|
|
102
|
+
vec3 fogCol = mix(uBase * 0.4, uGlow * 1.2, pow(g, 160.0));
|
|
103
|
+
col = mix(col, fogCol, fogT);
|
|
104
|
+
col += uGlow * (pow(g, 900.0) * 2.5 + pow(g, 90.0) * 0.12);
|
|
105
|
+
|
|
106
|
+
col = aces(col);
|
|
107
|
+
col = toSRGB(col);
|
|
108
|
+
col *= mix(0.6, 1.0, vignette(vUv, 0.3));
|
|
109
|
+
col += grain(fc, uTime) * 0.015;
|
|
110
|
+
fragColor = vec4(col, 1.0);
|
|
111
|
+
}
|
|
112
|
+
`,wormhole_default={id:"wormhole",name:"Wormhole",description:"An endless flight down a curving 3D tunnel toward the light at the end. Steer it with the pointer.",category:"Space",kind:"3d",motion:"live",tags:["webgl","raymarching","tunnel","neon","flight","synthwave","sci-fi"],layout:"center",copy:{eyebrow:"Wrong turn in spacetime",title:"This wormhole goes nowhere.",message:"We followed the link through the tunnel and came out at a page that doesn't exist.",actions:[{label:"Return to origin",href:"/",variant:"primary"}]},params:{a:"#ff2bd6",b:"#22d3ff",glow:"#fff1ff",base:"#07020f",speed:1,style:0,radius:2.4,fog:.035},theme:{bg:"#07020f","code-color":"rgba(255,255,255,.92)",accent:"#ffffff","accent-fg":"#12001f"},presetName:"Neon Grid",presets:{sunset:{name:"Sunset Grid",params:{a:"#ff7a1f",b:"#b026ff",glow:"#ffe2c2",base:"#12030f",style:0},theme:{bg:"#12030f",accent:"#ff9a4a","accent-fg":"#12030f"}},gold:{name:"Golden Rings",params:{a:"#ffd36b",b:"#fff2c9",glow:"#fff8e6",base:"#0d0802",style:1,radius:2.8},theme:{bg:"#0d0802",accent:"#ffd36b","accent-fg":"#0d0802"}},toxic:{name:"Toxic Gut",eyebrow:"Something's not right",title:"Swallowed by the internet.",params:{a:"#5ac83a",b:"#e6ff6b",glow:"#f0ffd0",base:"#0b1a05",style:2,fog:.05},theme:{bg:"#0b1a05",accent:"#e6ff6b","accent-fg":"#0b1a05"}},mono:{name:"Wireframe",params:{a:"#ffffff",b:"#9a9a9a",glow:"#ffffff",base:"#000000",style:0,speed:.7},theme:{bg:"#000",accent:"#fff","accent-fg":"#000"}},rings:{name:"Light Rings",params:{a:"#ffb547",b:"#ff5a36",glow:"#fff4e0",base:"#0a0603",style:1,radius:2.6},theme:{bg:"#0a0603",accent:"#ffb547","accent-fg":"#1a0d00"}},organic:{name:"Organic",eyebrow:"Something swallowed it",title:"This page got eaten.",message:"We're deep inside something and the page isn't in here. Let's get out.",params:{a:"#b8324f",b:"#ffc2a8",glow:"#ffe0d4",base:"#2a060e",style:2,radius:2.2,fog:.05},theme:{bg:"#2a060e",accent:"#ffd2c2","accent-fg":"#2a060e"}},data:{name:"Data Stream",eyebrow:"Packet lost",title:"Lost in transit.",message:"Your request went down the pipe and never came back out.",params:{a:"#39ff88",b:"#00b3ff",glow:"#d9ffe9",base:"#010604",style:3,radius:2.3},theme:{bg:"#010604",accent:"#39ff88","accent-fg":"#00170a","font-display":"var(--lp-font-mono)"}},ice:{name:"Ice Cave",params:{a:"#bfe9ff",b:"#5fb7ff",glow:"#ffffff",base:"#0b2a44",style:1,radius:2.5,fog:.045,speed:.6},theme:{bg:"#0b2a44",accent:"#e6f6ff","accent-fg":"#0b2a44"}}},css:`& .lp-code{font-weight:700;letter-spacing:-.04em;text-shadow:0 0 40px rgba(255,255,255,.35)}
|
|
113
|
+
& .lp-title{font-weight:600}`,setup(ctx){let p=ctx.params;return shaderScene(ctx,{frag:FRAG,uniforms:()=>({uA:linear(p.a),uB:linear(p.b),uGlow:linear(p.glow),uBase:linear(p.base),uSpeed:p.speed,uStyle:p.style,uRadius:p.radius,uFog:p.fog})})}};export{wormhole_default as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{canvas2d}from"../chunks/chunk-DAZOIOF7.js";import{rgba}from"../chunks/chunk-FVGCB66F.js";import{SANS}from"../chunks/chunk-3ISI6SOJ.js";import"../chunks/chunk-KIYSQVWX.js";import"../chunks/chunk-7XMDQMDO.js";var zen_garden_default={id:"zen-garden",name:"Zen Garden",description:"A raked sand garden with three stones, the error drawn into the gravel. Drag to rake new lines and breathe.",category:"Nature",kind:"2d",motion:"interactive",tags:["canvas","zen","calm","sand","draw","interactive","light","minimal"],layout:"bottom",codeInScene:!0,copy:{eyebrow:"Breathe",title:"Let go of this page.",message:"It isn't here, and that's alright. Rake the sand for a while, then return home.",actions:[{label:"Return, mindfully",href:"/",variant:"primary"}]},params:{sand:"#e8e1d3",groove:"#c9bfa9",stone:"#6b6760",moss:"#6b8a4a"},theme:{bg:"#e8e1d3",fg:"#3a352c",accent:"#3a352c","accent-fg":"#f4efe6","font-display":"var(--lp-font-serif)","title-weight":"400"},presetName:"Kyoto",presets:{moss:{name:"Moss Garden",params:{sand:"#d9dcc9",groove:"#b8bca5",stone:"#4a4a44",moss:"#3a6a2a"},theme:{bg:"#d9dcc9",fg:"#22281a"}},dark:{name:"Black Gravel",params:{sand:"#2a2a2c",groove:"#1b1b1d",stone:"#8a8a8f",moss:"#4a6a3a"},theme:{bg:"#2a2a2c",fg:"#ece8e0",accent:"#ece8e0","accent-fg":"#2a2a2c"}},rose:{name:"Rose Sand",params:{sand:"#efd9d2",groove:"#d8bdb3",stone:"#7a6a66",moss:"#7a8a5a"},theme:{bg:"#efd9d2",fg:"#3a2a28"}}},setup(ctx){let p=ctx.params,c=canvas2d(ctx),rnd=ctx.random,rake,rg,stones=[],last=null,sc=()=>Math.min(2,ctx.dpr),tines=(x0,y0,x1,y1,width=46)=>{let ang=Math.atan2(y1-y0,x1-x0),nx=-Math.sin(ang),ny=Math.cos(ang);for(let k=-3;k<=3;k++){let o=k/3*width*.5;rg.strokeStyle=rgba(p.groove,.9),rg.lineWidth=3,rg.beginPath(),rg.moveTo(x0+nx*o,y0+ny*o),rg.lineTo(x1+nx*o,y1+ny*o),rg.stroke(),rg.strokeStyle=rgba("#ffffff",.35),rg.lineWidth=1.2,rg.beginPath(),rg.moveTo(x0+nx*(o-2),y0+ny*(o-2)),rg.lineTo(x1+nx*(o-2),y1+ny*(o-2)),rg.stroke()}},build=()=>{let s=sc();rake=document.createElement("canvas"),rake.width=c.w*s,rake.height=c.h*s,rg=rake.getContext("2d"),rg.scale(s,s),rg.fillStyle=p.sand,rg.fillRect(0,0,c.w,c.h);for(let i=0;i<c.w*c.h/18;i++)rg.fillStyle=`rgba(${rnd()>.5?"255,255,255":"0,0,0"},${rnd()*.07})`,rg.fillRect(rnd()*c.w,rnd()*c.h,1.2,1.2);for(let y=10;y<c.h;y+=14){rg.strokeStyle=rgba(p.groove,.7),rg.lineWidth=3,rg.beginPath();for(let x=0;x<=c.w;x+=20)rg.lineTo(x,y+Math.sin(x*.01+y)*1.5);rg.stroke()}stones=[{x:c.w*.16,y:c.h*.28,r:Math.min(c.w,c.h)*.07},{x:c.w*.84,y:c.h*.22,r:Math.min(c.w,c.h)*.05},{x:c.w*.78,y:c.h*.56,r:Math.min(c.w,c.h)*.035}];for(let st of stones)for(let k=1;k<=5;k++)rg.fillStyle=p.sand,rg.beginPath(),rg.ellipse(st.x,st.y,st.r*(1+k*.35)+6,st.r*(.7+k*.25)+6,0,0,Math.PI*2),rg.fill();for(let st of stones)for(let k=5;k>=1;k--)rg.strokeStyle=rgba(p.groove,.85),rg.lineWidth=3,rg.beginPath(),rg.ellipse(st.x,st.y,st.r*(1+k*.35),st.r*(.7+k*.25),0,0,Math.PI*2),rg.stroke();let size=Math.min(c.w*.26,c.h*.36);rg.font=`300 ${size}px ${SANS}`,rg.textAlign="center",rg.textBaseline="middle",rg.lineJoin="round",rg.strokeStyle=rgba(p.groove,1),rg.lineWidth=size*.05,rg.strokeText(ctx.copy.code||"404",c.w/2,c.h*.37),rg.strokeStyle=rgba("#ffffff",.35),rg.lineWidth=size*.012,rg.strokeText(ctx.copy.code||"404",c.w/2-2,c.h*.37-2)};build(),ctx.on("pointermove",e=>{if(!(e.buttons||e.pointerType==="touch"))return last=null;let q={x:ctx.pointer.x,y:ctx.pointer.y};last&&Math.hypot(q.x-last.x,q.y-last.y)>3&&tines(last.x,last.y,q.x,q.y),last=q}),ctx.on("pointerup",()=>last=null);let auto=0;return{resize(){c.reset(),build()},frame(t,dt){let g=c.g;if(c.reset(),!ctx.pointer.engaged&&!ctx.reducedMotion&&dt>0&&auto<1){let a0=auto;auto=Math.min(1,auto+dt*.08);let f=k=>({x:c.w*(.05+k*.9),y:c.h*.66+Math.sin(k*12)*c.h*.03}),A=f(a0),B=f(auto);tines(A.x,A.y,B.x,B.y,40)}g.drawImage(rake,0,0,c.w,c.h);for(let st of stones){g.fillStyle=rgba(p.moss,.85),g.beginPath(),g.ellipse(st.x,st.y+st.r*.25,st.r*1.25,st.r*.55,0,0,Math.PI*2),g.fill();let grd=g.createRadialGradient(st.x-st.r*.3,st.y-st.r*.4,st.r*.1,st.x,st.y,st.r*1.1);grd.addColorStop(0,rgba("#ffffff",.35)),grd.addColorStop(.3,p.stone),grd.addColorStop(1,rgba("#000000",.6)),g.fillStyle=grd,g.beginPath(),g.ellipse(st.x,st.y,st.r,st.r*.78,-.2,0,Math.PI*2),g.fill()}let px=t*30%(c.w+100)-50,py=c.h*.1+t*18%(c.h*.7)+Math.sin(t*2)*10;g.fillStyle="#f4b6c2",g.beginPath(),g.ellipse(px,py,6,3,t*2,0,Math.PI*2),g.fill()}}}};export{zen_garden_default as default};
|
package/dist/svelte.d.ts
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { type MountOptions, type SceneDef } from "lostpage";
|
|
2
|
+
export interface LostPageActionOptions extends MountOptions {
|
|
3
|
+
scene: string | SceneDef;
|
|
4
|
+
}
|
|
5
|
+
/**
|
|
6
|
+
* Svelte action (Svelte 3, 4 and 5).
|
|
7
|
+
*
|
|
8
|
+
* ```svelte
|
|
9
|
+
* <script>import { lostpage } from "lostpage/svelte";</script>
|
|
10
|
+
* <div use:lostpage={{ scene: "lost-at-sea", preset: "storm" }} />
|
|
11
|
+
* ```
|
|
12
|
+
*/
|
|
13
|
+
export declare function lostpage(node: HTMLElement, options: LostPageActionOptions): {
|
|
14
|
+
update(next: LostPageActionOptions): void;
|
|
15
|
+
destroy(): void;
|
|
16
|
+
};
|
|
17
|
+
export default lostpage;
|
package/dist/svelte.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{mount}from"lostpage";function lostpage(node,options){let current=options,handle=mount(node,options.scene,options);return{update(next){(typeof next.scene=="string"?next.scene:next.scene.id)===(typeof current.scene=="string"?current.scene:current.scene.id)?handle.update(next):(handle.destroy(),handle=mount(node,next.scene,next)),current=next},destroy(){handle.destroy()}}}var svelte_default=lostpage;export{svelte_default as default,lostpage};
|
package/dist/vue.d.ts
ADDED
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import { type PropType } from "vue";
|
|
2
|
+
import { type LostAction, type SceneDef } from "lostpage";
|
|
3
|
+
/**
|
|
4
|
+
* ```vue
|
|
5
|
+
* <LostPage scene="lost-at-sea" preset="moonlit" title="Nothing but moonlight here." />
|
|
6
|
+
* ```
|
|
7
|
+
*/
|
|
8
|
+
export declare const LostPage: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
|
|
9
|
+
scene: {
|
|
10
|
+
type: PropType<string | SceneDef>;
|
|
11
|
+
required: true;
|
|
12
|
+
};
|
|
13
|
+
preset: StringConstructor;
|
|
14
|
+
code: StringConstructor;
|
|
15
|
+
eyebrow: StringConstructor;
|
|
16
|
+
title: StringConstructor;
|
|
17
|
+
message: StringConstructor;
|
|
18
|
+
actions: PropType<LostAction[]>;
|
|
19
|
+
params: PropType<Record<string, unknown>>;
|
|
20
|
+
theme: PropType<Record<string, string>>;
|
|
21
|
+
overlay: {
|
|
22
|
+
type: BooleanConstructor;
|
|
23
|
+
default: undefined;
|
|
24
|
+
};
|
|
25
|
+
interactive: {
|
|
26
|
+
type: BooleanConstructor;
|
|
27
|
+
default: undefined;
|
|
28
|
+
};
|
|
29
|
+
motion: PropType<"auto" | "reduce" | "full">;
|
|
30
|
+
height: StringConstructor;
|
|
31
|
+
maxDpr: NumberConstructor;
|
|
32
|
+
seed: NumberConstructor;
|
|
33
|
+
}>, () => import("vue").VNode<import("vue").RendererNode, import("vue").RendererElement, {
|
|
34
|
+
[key: string]: any;
|
|
35
|
+
}>, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, "navigate"[], "navigate", import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
|
|
36
|
+
scene: {
|
|
37
|
+
type: PropType<string | SceneDef>;
|
|
38
|
+
required: true;
|
|
39
|
+
};
|
|
40
|
+
preset: StringConstructor;
|
|
41
|
+
code: StringConstructor;
|
|
42
|
+
eyebrow: StringConstructor;
|
|
43
|
+
title: StringConstructor;
|
|
44
|
+
message: StringConstructor;
|
|
45
|
+
actions: PropType<LostAction[]>;
|
|
46
|
+
params: PropType<Record<string, unknown>>;
|
|
47
|
+
theme: PropType<Record<string, string>>;
|
|
48
|
+
overlay: {
|
|
49
|
+
type: BooleanConstructor;
|
|
50
|
+
default: undefined;
|
|
51
|
+
};
|
|
52
|
+
interactive: {
|
|
53
|
+
type: BooleanConstructor;
|
|
54
|
+
default: undefined;
|
|
55
|
+
};
|
|
56
|
+
motion: PropType<"auto" | "reduce" | "full">;
|
|
57
|
+
height: StringConstructor;
|
|
58
|
+
maxDpr: NumberConstructor;
|
|
59
|
+
seed: NumberConstructor;
|
|
60
|
+
}>> & Readonly<{
|
|
61
|
+
onNavigate?: ((...args: any[]) => any) | undefined;
|
|
62
|
+
}>, {
|
|
63
|
+
interactive: boolean;
|
|
64
|
+
overlay: boolean;
|
|
65
|
+
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
|
|
66
|
+
export default LostPage;
|
package/dist/vue.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{defineComponent,getCurrentInstance,h,onBeforeUnmount,onMounted,ref,watch}from"vue";import{mount}from"lostpage";var LostPage=defineComponent({name:"LostPage",props:{scene:{type:[String,Object],required:!0},preset:String,code:String,eyebrow:String,title:String,message:String,actions:Array,params:Object,theme:Object,overlay:{type:Boolean,default:void 0},interactive:{type:Boolean,default:void 0},motion:String,height:String,maxDpr:Number,seed:Number},emits:["navigate"],setup(props,{slots,emit}){let host=ref(null),instance=getCurrentInstance(),hasNavigateListener=()=>!!instance?.vnode.props?.onNavigate,handle=null,options=()=>{let{scene:_s,...rest}=props,o={};for(let[k,v]of Object.entries(rest))v!==void 0&&(o[k]=v);return slots.default&&(o.overlay=!1),hasNavigateListener()&&(o.onNavigate=(href,e)=>emit("navigate",href,e)),o},start=()=>{handle?.destroy(),host.value&&(handle=mount(host.value,props.scene,options()))};return onMounted(start),onBeforeUnmount(()=>handle?.destroy()),watch(()=>typeof props.scene=="string"?props.scene:props.scene.id,start),watch(()=>JSON.stringify(options()),()=>handle?.update(options())),()=>h("div",{ref:host,"data-lostpage-host":"",style:{position:"relative",minHeight:props.height??"100dvh"}},slots.default?[h("div",{class:"lp-custom"},slots.default())]:[])}}),vue_default=LostPage;export{LostPage,vue_default as default};
|
package/package.json
CHANGED
|
@@ -1,6 +1,116 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "lostpage",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"
|
|
5
|
-
"
|
|
6
|
-
|
|
3
|
+
"version": "0.2.0",
|
|
4
|
+
"description": "Immersive 404 pages for every framework: WebGL oceans, black holes, chrome 3D type, playable games, retro terminals, plus simple everyday 404s. 116 scenes, 650+ designs, zero dependencies.",
|
|
5
|
+
"keywords": [
|
|
6
|
+
"404",
|
|
7
|
+
"404-page",
|
|
8
|
+
"not-found",
|
|
9
|
+
"error-page",
|
|
10
|
+
"page-not-found",
|
|
11
|
+
"webgl",
|
|
12
|
+
"canvas",
|
|
13
|
+
"animation",
|
|
14
|
+
"react",
|
|
15
|
+
"nextjs",
|
|
16
|
+
"vue",
|
|
17
|
+
"nuxt",
|
|
18
|
+
"svelte",
|
|
19
|
+
"sveltekit",
|
|
20
|
+
"angular",
|
|
21
|
+
"astro",
|
|
22
|
+
"web-component",
|
|
23
|
+
"custom-element"
|
|
24
|
+
],
|
|
25
|
+
"license": "MIT",
|
|
26
|
+
"author": "Satender Maurya",
|
|
27
|
+
"type": "module",
|
|
28
|
+
"sideEffects": [
|
|
29
|
+
"./dist/element.js",
|
|
30
|
+
"./dist/lostpage.global.js"
|
|
31
|
+
],
|
|
32
|
+
"main": "./dist/index.js",
|
|
33
|
+
"module": "./dist/index.js",
|
|
34
|
+
"types": "./dist/index.d.ts",
|
|
35
|
+
"exports": {
|
|
36
|
+
".": {
|
|
37
|
+
"types": "./dist/index.d.ts",
|
|
38
|
+
"default": "./dist/index.js"
|
|
39
|
+
},
|
|
40
|
+
"./core": {
|
|
41
|
+
"types": "./dist/core.d.ts",
|
|
42
|
+
"default": "./dist/core.js"
|
|
43
|
+
},
|
|
44
|
+
"./catalog": {
|
|
45
|
+
"types": "./dist/catalog.d.ts",
|
|
46
|
+
"default": "./dist/catalog.js"
|
|
47
|
+
},
|
|
48
|
+
"./react": {
|
|
49
|
+
"types": "./dist/react.d.ts",
|
|
50
|
+
"default": "./dist/react.js"
|
|
51
|
+
},
|
|
52
|
+
"./vue": {
|
|
53
|
+
"types": "./dist/vue.d.ts",
|
|
54
|
+
"default": "./dist/vue.js"
|
|
55
|
+
},
|
|
56
|
+
"./svelte": {
|
|
57
|
+
"types": "./dist/svelte.d.ts",
|
|
58
|
+
"default": "./dist/svelte.js"
|
|
59
|
+
},
|
|
60
|
+
"./element": {
|
|
61
|
+
"types": "./dist/element.d.ts",
|
|
62
|
+
"default": "./dist/element.js"
|
|
63
|
+
},
|
|
64
|
+
"./scenes/*": {
|
|
65
|
+
"types": "./dist/scenes/*.d.ts",
|
|
66
|
+
"default": "./dist/scenes/*.js"
|
|
67
|
+
},
|
|
68
|
+
"./global": "./dist/lostpage.global.js",
|
|
69
|
+
"./package.json": "./package.json",
|
|
70
|
+
"./cdn/*": "./dist/cdn/*"
|
|
71
|
+
},
|
|
72
|
+
"bin": {
|
|
73
|
+
"lostpage": "./dist/cli.js"
|
|
74
|
+
},
|
|
75
|
+
"files": [
|
|
76
|
+
"dist",
|
|
77
|
+
"README.md",
|
|
78
|
+
"LICENSE"
|
|
79
|
+
],
|
|
80
|
+
"scripts": {
|
|
81
|
+
"gen": "node scripts/gen.mjs",
|
|
82
|
+
"build": "node scripts/build.mjs",
|
|
83
|
+
"dev": "node scripts/dev.mjs",
|
|
84
|
+
"typecheck": "tsc --noEmit",
|
|
85
|
+
"prepublishOnly": "node scripts/build.mjs",
|
|
86
|
+
"readme": "node scripts/readme.mjs"
|
|
87
|
+
},
|
|
88
|
+
"peerDependencies": {
|
|
89
|
+
"react": ">=17",
|
|
90
|
+
"vue": ">=3.2"
|
|
91
|
+
},
|
|
92
|
+
"peerDependenciesMeta": {
|
|
93
|
+
"react": {
|
|
94
|
+
"optional": true
|
|
95
|
+
},
|
|
96
|
+
"vue": {
|
|
97
|
+
"optional": true
|
|
98
|
+
}
|
|
99
|
+
},
|
|
100
|
+
"devDependencies": {
|
|
101
|
+
"@types/react": "^19",
|
|
102
|
+
"esbuild": "^0.25.0",
|
|
103
|
+
"react": "^19.2.0",
|
|
104
|
+
"typescript": "^5.9.3",
|
|
105
|
+
"vue": "^3.5.0",
|
|
106
|
+
"@types/node": "^20"
|
|
107
|
+
},
|
|
108
|
+
"unpkg": "./dist/lostpage.global.js",
|
|
109
|
+
"jsdelivr": "./dist/lostpage.global.js",
|
|
110
|
+
"engines": {
|
|
111
|
+
"node": ">=18"
|
|
112
|
+
},
|
|
113
|
+
"publishConfig": {
|
|
114
|
+
"access": "public"
|
|
115
|
+
}
|
|
116
|
+
}
|