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,88 @@
|
|
|
1
|
+
import{a as i}from"./chunk-LMRCHEWX.js";import{a,b as s,c as r}from"./chunk-QJZBGT2Q.js";import{e as t}from"./chunk-HXSSPN2I.js";import"./chunk-URWX3LLV.js";var f=`
|
|
2
|
+
uniform vec3 uSkyTop, uSkyBottom, uGround, uTrees, uFire;
|
|
3
|
+
uniform float uEmbers, uTent;
|
|
4
|
+
${a}
|
|
5
|
+
${s}
|
|
6
|
+
${r}
|
|
7
|
+
|
|
8
|
+
float pine(vec2 p, float h) {
|
|
9
|
+
float w = (1.0 - clamp(p.y / h, 0.0, 1.0)) * h * 0.32 * (0.82 + 0.18 * abs(sin(p.y / h * 18.0)));
|
|
10
|
+
return step(abs(p.x), w) * step(0.0, p.y) * step(p.y, h);
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
void main() {
|
|
14
|
+
vec2 fc = gl_FragCoord.xy;
|
|
15
|
+
vec2 uv = fc / uRes;
|
|
16
|
+
vec2 p = (fc - 0.5 * uRes) / uRes.y + uMouse * vec2(0.015, 0.008);
|
|
17
|
+
float t = uTime;
|
|
18
|
+
float groundY = -0.18;
|
|
19
|
+
vec3 col = mix(uSkyBottom, uSkyTop, smoothstep(-0.2, 0.6, p.y));
|
|
20
|
+
// stars + milky way band
|
|
21
|
+
vec2 g = p * 160.0;
|
|
22
|
+
vec2 id = floor(g);
|
|
23
|
+
vec2 f = fract(g) - 0.5 - (hash22(id) - 0.5) * 0.7;
|
|
24
|
+
float st = smoothstep(0.1, 0.0, length(f)) * step(0.975, hash12(id)) * (0.6 + 0.4 * sin(t * 2.0 + hash12(id) * 40.0));
|
|
25
|
+
col += vec3(0.9, 0.92, 1.0) * st * smoothstep(-0.05, 0.3, p.y);
|
|
26
|
+
float band = exp(-pow((p.y - p.x * 0.35 - 0.25) * 4.0, 2.0)) * fbm(p * 6.0);
|
|
27
|
+
col += vec3(0.5, 0.55, 0.8) * band * 0.25;
|
|
28
|
+
// treeline silhouettes, two layers
|
|
29
|
+
float far = 0.0;
|
|
30
|
+
for (int i = 0; i < 2; i++) {
|
|
31
|
+
float fi = float(i);
|
|
32
|
+
float sc = 22.0 - fi * 8.0;
|
|
33
|
+
float x = p.x * sc;
|
|
34
|
+
float cell = floor(x);
|
|
35
|
+
float hx = hash11(cell + fi * 10.0);
|
|
36
|
+
float h = (0.12 + 0.12 * hx) * sc * (0.6 + fi * 0.4);
|
|
37
|
+
vec2 q = vec2(fract(x) - 0.5, (p.y - groundY + 0.02 - fi * 0.0) * sc);
|
|
38
|
+
float tr = pine(q, h * 0.25);
|
|
39
|
+
vec3 tc = mix(uTrees, uSkyBottom, 0.5 - fi * 0.45);
|
|
40
|
+
col = mix(col, tc, tr);
|
|
41
|
+
}
|
|
42
|
+
// ground
|
|
43
|
+
if (p.y < groundY) col = uGround * (0.7 + 0.3 * fbm(p * 30.0));
|
|
44
|
+
// the fire
|
|
45
|
+
vec2 fp = p - vec2(0.0, groundY);
|
|
46
|
+
float flick = 0.85 + 0.15 * sin(t * 13.0) * sin(t * 7.3);
|
|
47
|
+
// logs
|
|
48
|
+
float logs = step(abs(mat2(0.94, 0.34, -0.34, 0.94) * fp - vec2(0.0, 0.012)).x, 0.11) * step(abs((mat2(0.94, 0.34, -0.34, 0.94) * fp).y - 0.012), 0.012);
|
|
49
|
+
logs = max(logs, step(abs((mat2(0.94, -0.34, 0.34, 0.94) * fp).x), 0.11) * step(abs((mat2(0.94, -0.34, 0.34, 0.94) * fp).y - 0.012), 0.012));
|
|
50
|
+
// flame shape: noise-displaced teardrop
|
|
51
|
+
vec2 q = fp;
|
|
52
|
+
q.x += (fbm(vec2(q.y * 8.0 - t * 2.0, t)) - 0.5) * 0.06 * smoothstep(0.0, 0.2, q.y);
|
|
53
|
+
float n = fbm(vec2(q.x * 9.0, q.y * 6.0 - t * 3.5));
|
|
54
|
+
float shape = smoothstep(0.09, 0.0, abs(q.x) - (0.07 - q.y * 0.28)) * smoothstep(-0.01, 0.02, q.y) * smoothstep(0.28, 0.05, q.y + n * 0.08);
|
|
55
|
+
float heat = shape * (0.6 + 0.6 * n) * flick;
|
|
56
|
+
vec3 fireCol = mix(uFire, vec3(1.0, 0.95, 0.7), smoothstep(0.5, 1.0, heat));
|
|
57
|
+
fireCol = mix(vec3(0.6, 0.08, 0.02), fireCol, smoothstep(0.15, 0.45, heat));
|
|
58
|
+
// light from the fire on the ground and trees
|
|
59
|
+
float lightR = length(fp * vec2(1.0, 2.2));
|
|
60
|
+
vec3 glow = uFire * flick * 0.55 / (1.0 + lightR * lightR * 60.0);
|
|
61
|
+
col += glow * (p.y < groundY + 0.02 ? 1.4 : 0.5);
|
|
62
|
+
col = mix(col, vec3(0.08, 0.04, 0.02), logs);
|
|
63
|
+
col += fireCol * heat * 2.2;
|
|
64
|
+
// tent, lit on one side
|
|
65
|
+
if (uTent > 0.5) {
|
|
66
|
+
vec2 tp = p - vec2(-0.42, groundY);
|
|
67
|
+
float tri = step(abs(tp.x), (0.2 - tp.y) * 0.95) * step(0.0, tp.y) * step(tp.y, 0.2);
|
|
68
|
+
vec3 tcol = vec3(0.22, 0.32, 0.25) * (0.35 + 1.6 * glow.r * (1.0 + tp.x * 3.0));
|
|
69
|
+
float door = step(abs(tp.x + 0.0), (0.12 - tp.y) * 0.45) * step(0.0, tp.y) * step(tp.y, 0.12);
|
|
70
|
+
tcol = mix(tcol, vec3(0.03), door);
|
|
71
|
+
col = mix(col, tcol, tri);
|
|
72
|
+
}
|
|
73
|
+
// rising embers
|
|
74
|
+
for (int i = 0; i < 40; i++) {
|
|
75
|
+
float fi = float(i);
|
|
76
|
+
if (fi > uEmbers) break;
|
|
77
|
+
float life = fract(t * (0.12 + hash11(fi) * 0.15) + hash11(fi * 7.0));
|
|
78
|
+
vec2 ep = vec2((hash11(fi * 3.0) - 0.5) * 0.1 + sin(life * 9.0 + fi) * 0.05 * life, groundY + 0.05 + life * 0.6);
|
|
79
|
+
float d = length(p - ep);
|
|
80
|
+
col += uFire * (1.0 - life) * smoothstep(0.004, 0.0, d) * 2.0;
|
|
81
|
+
col += uFire * (1.0 - life) * 0.04 * exp(-d * 120.0);
|
|
82
|
+
}
|
|
83
|
+
col = toSRGB(aces(col * 1.1));
|
|
84
|
+
col *= mix(0.65, 1.0, vignette(uv, 0.3));
|
|
85
|
+
col += grain(fc, t) * 0.02;
|
|
86
|
+
fragColor = vec4(col, 1.0);
|
|
87
|
+
}
|
|
88
|
+
`,n={id:"campfire",name:"Campfire",description:"Lost in the woods at night. A crackling fire, embers drifting up into a sky full of stars, and a tent waiting.",category:"Nature",kind:"2d",motion:"live",tags:["webgl","fire","camping","night","stars","cozy","nature"],layout:"top",copy:{eyebrow:"Off the trail",title:"Lost in the woods.",message:"The trail to this page has gone cold. Warm up by the fire, then follow the path home.",actions:[{label:"Follow the trail home",href:"/",variant:"primary"}]},params:{skyTop:"#020414",skyBottom:"#0f1a33",ground:"#0b0906",trees:"#020406",fire:"#ff7a1f",embers:40,tent:!0},theme:{bg:"#050814",fg:"#ffeedd",accent:"#ff9a4a","accent-fg":"#1a0a00","code-color":"rgba(255,238,221,.16)"},presetName:"Pine Forest",presets:{autumn:{name:"Autumn Woods",params:{skyTop:"#0a0618",skyBottom:"#3a1f2a",trees:"#0a0505",fire:"#ff8a1f"},theme:{bg:"#1a0d12"}},green:{name:"Witch Fire",eyebrow:"Something brews",params:{fire:"#7dff3b",skyBottom:"#0a1a12"},theme:{accent:"#b8ff8a","accent-fg":"#031400"}},desert:{name:"Desert Camp",params:{skyTop:"#0a0618",skyBottom:"#3a1f3a",ground:"#2a1608",trees:"#120a08",tent:!1},theme:{bg:"#160d18"}},blue:{name:"Spirit Fire",eyebrow:"Something strange",params:{fire:"#3bb8ff"},theme:{accent:"#7fd3ff","accent-fg":"#00121f"}},winter:{name:"Winter",params:{ground:"#5a6070",skyBottom:"#1d2a44",trees:"#05080d"},theme:{bg:"#0e1626"}}},css:"& .lp-overlay{padding-top:clamp(28px,7cqh,80px)}& .lp-code{--lp-code-size:clamp(80px,12cqw,170px);font-weight:300}",setup(o){let e=o.params;return i(o,{frag:f,uniforms:()=>({uSkyTop:t(e.skyTop),uSkyBottom:t(e.skyBottom),uGround:t(e.ground),uTrees:t(e.trees),uFire:t(e.fire),uEmbers:e.embers,uTent:e.tent?1:0})})}};export{n as default};
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import{a as r,c as o,d as n,e as i}from"./chunk-A44JMJWI.js";import"./chunk-QHXVYCR6.js";import"./chunk-URWX3LLV.js";var c={compass:'<circle cx="12" cy="12" r="9"/><path d="m15.5 8.5-2 5-5 2 2-5z"/>',search:'<circle cx="11" cy="11" r="6.5"/><path d="m20 20-4.2-4.2M9 9l4 4M13 9l-4 4"/>',link:'<path d="M10 14a4 4 0 0 0 5.7 0l3-3a4 4 0 0 0-5.7-5.7l-1 1M14 10a4 4 0 0 0-5.7 0l-3 3a4 4 0 0 0 5.7 5.7l1-1M4 4l16 16"/>',alert:'<path d="M12 3 2 20h20zM12 10v4M12 17v.5"/>'},p={id:"card",name:"Card",description:"A centred card with an icon badge, headline, message and buttons. Fits inside any dashboard or app shell without fighting its design.",category:"Simple",kind:"2d",motion:"static",tags:["simple","card","app","dashboard","saas","static","fast"],layout:"none",copy:{title:"Page not found",message:"The page you\u2019re looking for doesn\u2019t exist or you don\u2019t have access to it.",actions:[{label:"Back to dashboard",href:"/"},{label:"Get help",href:"/help",variant:"secondary",icon:"arrow"}]},params:{page:"#f4f5f7",icon:"compass"},theme:{bg:"#ffffff",fg:"#101828",accent:"#101828","accent-fg":"#ffffff",radius:"10px"},presetName:"Light",presets:{dark:{name:"Dark",params:{page:"#09090b"},theme:{bg:"#18181b",fg:"#fafafa",accent:"#fafafa","accent-fg":"#18181b"}},search:{name:"Search icon",params:{page:"#eef4ff",icon:"search"},theme:{accent:"#2563eb","accent-fg":"#fff"}},broken:{name:"Broken link",title:"This link is broken",params:{page:"#fff7ed",icon:"link"},theme:{accent:"#ea580c","accent-fg":"#fff"}}},css:`
|
|
2
|
+
&{background:var(--page)}
|
|
3
|
+
& .cr{position:absolute;inset:0;display:grid;place-items:center;padding:16px;overflow:auto}
|
|
4
|
+
& .cr .box{width:min(440px,100%);background:var(--lp-bg);border-radius:16px;padding:clamp(24px,4cqw,40px);text-align:center;
|
|
5
|
+
border:1px solid color-mix(in srgb,var(--lp-fg) 9%,transparent);box-shadow:0 1px 2px rgba(16,24,40,.05),0 20px 40px -20px rgba(16,24,40,.18)}
|
|
6
|
+
& .cr .ic{width:52px;height:52px;margin:0 auto 18px;border-radius:14px;display:grid;place-items:center;
|
|
7
|
+
background:color-mix(in srgb,var(--lp-accent) 10%,transparent);color:var(--lp-accent);outline:8px solid color-mix(in srgb,var(--lp-accent) 5%,transparent)}
|
|
8
|
+
& .cr .ic svg{width:26px;height:26px;fill:none;stroke:currentColor;stroke-width:1.7;stroke-linecap:round;stroke-linejoin:round}
|
|
9
|
+
& .cr .code{font-size:12.5px;font-weight:600;color:var(--lp-muted)}
|
|
10
|
+
& .cr h1{margin:6px 0 0;font-size:clamp(22px,2.6cqw,28px);font-weight:700;letter-spacing:-.02em}
|
|
11
|
+
& .cr p{margin:10px 0 0;color:var(--lp-muted);font-size:14.5px;line-height:1.6}
|
|
12
|
+
& .cr .lp-actions{margin-top:26px;flex-direction:column-reverse;gap:10px;align-items:stretch}
|
|
13
|
+
& .cr .lp-btn{justify-content:center;font-weight:600}
|
|
14
|
+
& .cr .lp-btn--secondary{border:1px solid color-mix(in srgb,var(--lp-fg) 16%,transparent);border-radius:var(--lp-radius);padding:12px 20px}
|
|
15
|
+
`,setup(e){let a=e.copy;e.root.style.setProperty("--page",e.params.page);let t=n(e,"cr",`<div class="box"><div class="ic" aria-hidden="true"><svg viewBox="0 0 24 24">${c[e.params.icon]??c.compass}</svg></div><span class="code">Error ${r(a.code)}</span><h1>${i(a.code)}${r(a.title)}</h1><p>${r(a.message)}</p></div>`);return t.querySelector(".box").append(o(e)),{destroy:()=>t.remove()}}};export{p as default};
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import"./chunk-URWX3LLV.js";var d=r=>r.replace(/[&<>"]/g,e=>({"&":"&","<":"<",">":">",'"':"""})[e]),h={id:"cassette",name:"Mixtape",description:"A cassette whose tape has come unspooled in a long tangle. The reels still turn, but this side of the mixtape won't play.",category:"Retro Tech",kind:"2d",motion:"live",tags:["svg","cassette","retro","80s","music","nostalgia","illustration"],layout:"bottom",codeInScene:!0,copy:{eyebrow:"Side B",title:"This track got chewed up.",message:"The tape for this page tangled in the deck. Grab a pencil, or just rewind to the homepage.",actions:[{label:"Rewind to home",href:"/",variant:"primary"}]},params:{shell:"#1d1d22",label:"#ffd23f",ink:"#1d1d22",bg:"#ff6b6b",tape:"#3a2a1a"},theme:{bg:"#ff6b6b",fg:"#1d1d22",accent:"#1d1d22","accent-fg":"#fff"},presetName:"Hot Coral",presets:{clear:{name:"Clear Shell",params:{shell:"#d9e2ec",label:"#ffffff",ink:"#1b3a5a",bg:"#9fd3ff",tape:"#2a1a10"},theme:{bg:"#9fd3ff",fg:"#0b2340",accent:"#0b2340"}},synth:{name:"Synthwave",params:{shell:"#120a24",label:"#ff3bd4",ink:"#120a24",bg:"#2a0f4a",tape:"#3bd6ff"},theme:{bg:"#2a0f4a",fg:"#ffe6fb",accent:"#ff3bd4","accent-fg":"#fff"}},mint:{name:"Mint",params:{shell:"#f4f1ea",label:"#2ec4b6",ink:"#1d1d22",bg:"#cbf3f0",tape:"#3a2a1a"},theme:{bg:"#cbf3f0",fg:"#0a2a26",accent:"#0a2a26"}}},css:`& .cs{position:absolute;inset:0;display:flex;align-items:flex-start;justify-content:center;padding-top:clamp(16px,5cqh,56px)}
|
|
2
|
+
& .cs svg{width:min(540px,78cqw);height:auto;overflow:visible;filter:drop-shadow(0 26px 30px rgba(0,0,0,.28))}`,setup(r){let e=r.params,t=document.createElement("div");t.className="cs",t.style.background=e.bg,t.setAttribute("aria-hidden","true");let s=a=>`<g transform="translate(${a} 150)"><circle r="34" fill="#f4f4f4"/><circle r="30" fill="${e.tape}"/><g data-reel>${Array.from({length:6},(l,i)=>`<rect x="-3" y="-18" width="6" height="9" fill="#f4f4f4" transform="rotate(${i*60})"/>`).join("")}<circle r="10" fill="#f4f4f4"/></g></g>`;t.innerHTML=`<svg viewBox="0 0 600 420">
|
|
3
|
+
<path data-tape d="" fill="none" stroke="${e.tape}" stroke-width="5" stroke-linecap="round"/>
|
|
4
|
+
<rect x="10" y="10" width="580" height="370" rx="24" fill="${e.shell}"/>
|
|
5
|
+
<rect x="40" y="36" width="520" height="200" rx="10" fill="${e.label}"/>
|
|
6
|
+
<rect x="40" y="36" width="520" height="34" rx="10" fill="rgba(0,0,0,.12)"/>
|
|
7
|
+
<text x="60" y="60" font-family="Marker Felt,Comic Sans MS,cursive" font-size="20" fill="${e.ink}">MIXTAPE ${d(r.copy.code)} \xB7 SIDE B</text>
|
|
8
|
+
<path d="M60 220 H540" stroke="${e.ink}" stroke-opacity=".3"/>
|
|
9
|
+
<rect x="150" y="110" width="300" height="80" rx="40" fill="#111"/>
|
|
10
|
+
${s(210)}${s(390)}
|
|
11
|
+
<rect x="250" y="135" width="100" height="30" rx="4" fill="rgba(255,255,255,.08)"/>
|
|
12
|
+
<path d="M120 380 L150 300 H450 L480 380 Z" fill="rgba(0,0,0,.25)"/>
|
|
13
|
+
${[170,230,300,370,430].map(a=>`<circle cx="${a}" cy="350" r="7" fill="#111"/>`).join("")}
|
|
14
|
+
<circle cx="40" cy="350" r="9" fill="rgba(255,255,255,.18)"/><circle cx="560" cy="350" r="9" fill="rgba(255,255,255,.18)"/>
|
|
15
|
+
</svg>`,r.stage.append(t);let f=[...t.querySelectorAll("[data-reel]")],n=t.querySelector("[data-tape]");return{frame(a){f.forEach((c,o)=>c.setAttribute("transform",`rotate(${a*(o?80:110)})`));let l=Math.sin(a*.9)*18,i=Math.cos(a*.7)*24;n.setAttribute("d",`M260 372 C 240 440, ${150+l} 430, ${120+l} 470 S ${180+i} 520, ${300+l} 490 S ${450-i} 430, ${480+l} 470 S ${420+i} 520, 340 372`)},destroy(){t.remove()}}}};export{h as default};
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import{a as x}from"./chunk-4ZBXB36L.js";import{f as p}from"./chunk-HXSSPN2I.js";import"./chunk-URWX3LLV.js";var C='"Chalkboard SE","Chalkduster","Marker Felt","Comic Sans MS","Segoe Print",cursive',R={id:"chalkboard",name:"Chalkboard",description:"A classroom blackboard where the lesson is the error: the 404 drawn in chalk, a little equation to prove it, and smudges where someone tried to erase it.",category:"Paper & Print",kind:"2d",motion:"live",tags:["canvas","chalk","school","handwritten","math","retro","education"],layout:"none",copy:{title:"Today's lesson: page not found.",message:"Homework: go back to the homepage.",actions:[{label:"Class dismissed",href:"/",variant:"primary"}]},params:{board:"#22352b",chalk:"#f2f2ea",frame:"#6b4a2a",accent:"#ffd76b"},theme:{bg:"#22352b",fg:"#f2f2ea",accent:"#f2f2ea","accent-fg":"#22352b"},presetName:"Green Board",presets:{black:{name:"Blackboard",params:{board:"#1d1f22",chalk:"#f4f4f0",frame:"#8a6a4a",accent:"#ff9ec4"},theme:{bg:"#1d1f22"}},blue:{name:"Blue Board",params:{board:"#1f3550",chalk:"#eef4ff",frame:"#a8a8a8",accent:"#ffe14d"},theme:{bg:"#1f3550"}},white:{name:"Whiteboard",params:{board:"#f4f6f8",chalk:"#1d4fc4",frame:"#c9ced6",accent:"#e5484d"},theme:{bg:"#f4f6f8",fg:"#1d4fc4",accent:"#1d4fc4","accent-fg":"#fff"}}},css:`& .cb-links{position:absolute;right:clamp(28px,7cqw,90px);bottom:clamp(40px,10cqh,110px);display:flex;flex-direction:column;align-items:flex-end;gap:8px;z-index:3}
|
|
2
|
+
& .cb-links a{font:400 clamp(18px,1.8cqw,26px)/1.2 ${C};color:var(--lp-fg);text-decoration:none;border-bottom:2px dashed currentColor;opacity:.92}
|
|
3
|
+
& .cb-links a:hover{opacity:1}`,setup(d){let i=d.params,e=x(d),g=d.random,b=d.copy,w,u=document.createElement("div");u.className="cb-links";let y=l=>l.replace(/[&<>"]/g,t=>({"&":"&","<":"<",">":">",'"':"""})[t]);u.innerHTML=`<h1 class="lp-sr">Error ${y(b.code)}: ${y(b.title)}</h1>`+b.actions.map(l=>`<a href="${y(l.href??"/")}">${y(l.label)} \u2192</a>`).join(""),d.root.append(u),u.querySelectorAll("a").forEach(l=>l.addEventListener("click",t=>{t.metaKey||t.ctrlKey||(t.preventDefault(),d.navigate(l.getAttribute("href"),t))}));let S=()=>{let l=Math.min(2,d.dpr);w=document.createElement("canvas"),w.width=e.w*l,w.height=e.h*l;let t=w.getContext("2d");t.scale(l,l),t.fillStyle=i.frame,t.fillRect(0,0,e.w,e.h);let o=Math.max(14,e.w*.018);t.fillStyle=i.board,t.fillRect(o,o,e.w-o*2,e.h-o*2.6);for(let c=0;c<26;c++){let r=g()*e.w,a=g()*e.h,h=40+g()*160,n=t.createRadialGradient(r,a,0,r,a,h);n.addColorStop(0,p(i.chalk,.05)),n.addColorStop(1,p(i.chalk,0)),t.fillStyle=n,t.fillRect(r-h,a-h,h*2,h*2)}for(let c=0;c<e.w*e.h/30;c++)t.fillStyle=p(i.chalk,g()*.04),t.fillRect(g()*e.w,g()*e.h,1,1);t.fillStyle=p("#000000",.25),t.fillRect(o,e.h-o*1.6,e.w-o*2,o*.4),t.fillStyle="#f4f4f0",t.fillRect(e.w*.2,e.h-o*1.9,40,7),t.fillStyle="#ff9ec4",t.fillRect(e.w*.25,e.h-o*1.9,30,7),t.fillStyle="#3a2a1a",t.fillRect(e.w*.62,e.h-o*2.4,90,16),t.fillStyle="#8a8a8a",t.fillRect(e.w*.62,e.h-o*2.4+12,90,5)};S();let v=(l,t,o,c,r,a,h,n="left")=>{if(a<=0)return;l.save(),l.font=`400 ${r}px ${C}`,l.textAlign=n,l.textBaseline="alphabetic";let m=l.measureText(t).width,s=n==="center"?o-m/2:o;l.beginPath(),l.rect(s-10,c-r,(m+20)*a,r*1.5),l.clip(),l.fillStyle=p(h,.92),l.fillText(t,o,c),l.globalCompositeOperation="destination-out";for(let f=0;f<m*r/18;f++)l.fillStyle=`rgba(0,0,0,${Math.random()*.6})`,l.fillRect(s+Math.random()*m,c-r+Math.random()*r*1.2,1.4,1.4);l.restore()},k=null,M=-1;return{resize(){e.reset(),S(),M=-1},frame(l){let t=e.g;e.reset();let o=d.reducedMotion?99:l,c=Math.min(Math.floor(o*20)/20,6.5);if(c!==M||!k){M=c;let r=Math.min(2,d.dpr);k=document.createElement("canvas"),k.width=e.w*r,k.height=e.h*r;let a=k.getContext("2d");a.scale(r,r);let h=Math.min(e.w*.26,e.h*.36),n=(s,f)=>Math.max(0,Math.min(1,(o-s)/f));v(a,b.code,e.w*.08,e.h*.42,h,n(.2,1.4),i.chalk),n(1.6,.4)>0&&(a.strokeStyle=p(i.accent,.85),a.lineWidth=5,a.beginPath(),a.moveTo(e.w*.08,e.h*.47),a.lineTo(e.w*.08+h*1.9*n(1.6,.4),e.h*.47+6),a.stroke());let m=Math.min(e.w*.03,34);if(v(a,b.title,e.w*.08,e.h*.58,m,n(2,1.4),i.chalk),v(a,`page + link \u2212 server = ${b.code}`,e.w*.08,e.h*.66,m*.8,n(3.4,1.4),i.accent),v(a,b.message,e.w*.08,e.h*.74,m*.75,n(4.8,1.2),i.chalk),n(2.4,1)>0){a.strokeStyle=p(i.chalk,.7),a.lineWidth=3;let s=e.w*.78,f=e.h*.26;a.beginPath(),a.arc(s,f,46,0,Math.PI*2*n(2.4,1)),a.stroke(),n(3.4,.4)>0&&(a.beginPath(),a.moveTo(s-14,f-10),a.lineTo(s-14,f-2),a.moveTo(s+14,f-10),a.lineTo(s+14,f-2),a.arc(s,f+26,16,Math.PI*1.15,Math.PI*1.85),a.stroke())}}t.drawImage(w,0,0,e.w,e.h),t.drawImage(k,0,0,e.w,e.h)},destroy(){u.remove()}}}};export{R as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{a as f}from"./chunk-NUQBEDA4.js";import"./chunk-QJZBGT2Q.js";import"./chunk-HXSSPN2I.js";import"./chunk-IETNWEVK.js";import"./chunk-URWX3LLV.js";var n={id:"chrome-404",name:"Liquid Chrome",description:"Mirror-polished 3D numerals in a photo studio. Softboxes slide across the surface and the letters reflect each other.",category:"Typography",kind:"3d",motion:"live",tags:["webgl","raymarching","chrome","metal","studio","y2k","luxury"],layout:"bottom",codeInScene:!0,copy:{eyebrow:"Error 404",title:"Polished. Perfect. Missing.",message:"We buffed every surface and still couldn't find this page.",actions:[{label:"Take me home",href:"/",variant:"primary"}]},params:{tint:"#e9edf2",tint2:"#e9edf2",tint3:"#e9edf2",bgTop:"#2a2e36",bgBottom:"#07080a",light:"#ffffff",depth:.24,bevel:.05,sway:.28},theme:{bg:"#0b0c10",accent:"#f1f3f6","accent-fg":"#0b0c10"},presetName:"Chrome",presets:{titanium:{name:"Titanium",params:{tint:"#9aa5b1",tint2:"#9aa5b1",tint3:"#9aa5b1",bgTop:"#1b2433",bgBottom:"#05070b",light:"#e6f0ff"},theme:{bg:"#0c1119",accent:"#d6e2f0","accent-fg":"#0c1119"}},emerald:{name:"Emerald Metal",params:{tint:"#3bd18a",tint2:"#3bd18a",tint3:"#3bd18a",bgTop:"#0d2a1f",bgBottom:"#020806",light:"#eafff3"},theme:{bg:"#06140e",accent:"#5ff0a8","accent-fg":"#02140b"}},ruby:{name:"Candy Red",title:"Shiny, red, and nowhere.",params:{tint:"#ff3b5c",tint2:"#ff3b5c",tint3:"#ff3b5c",bgTop:"#2a0a12",bgBottom:"#070103",light:"#ffeef1"},theme:{bg:"#14050a",accent:"#ff6b84","accent-fg":"#1a0208"}},pearl:{name:"Pearl",params:{tint:"#fff1f6",tint2:"#e9f3ff",tint3:"#f6f0ff",bgTop:"#f4f1f6",bgBottom:"#cfc8d6",light:"#ffffff"},theme:{bg:"#e4dfe9",fg:"#1d1823",accent:"#1d1823","accent-fg":"#fff"}},medals:{name:"Gold \xB7 Silver \xB7 Bronze",title:"Every medal, no page.",params:{tint:"#ffcf73",tint2:"#e9edf2",tint3:"#e8875a",bgTop:"#202530",bgBottom:"#05060a",light:"#ffffff"},theme:{bg:"#0b0d12",accent:"#ffcf73","accent-fg":"#1a1206"}},gold:{name:"24k Gold",title:"Worth its weight. Still missing.",message:"Solid gold numerals, zero pages. Let's take you somewhere real.",params:{tint:"#ffcf73",tint2:"#ffcf73",tint3:"#ffcf73",bgTop:"#2a1f12",bgBottom:"#070504",light:"#fff2d9"},theme:{bg:"#120d07",accent:"#ffd27a","accent-fg":"#1a1206"}},"rose-gold":{name:"Rose Gold",params:{tint:"#f4b8a4",tint2:"#f4b8a4",tint3:"#f4b8a4",bgTop:"#3a2a2c",bgBottom:"#0c0808",light:"#fff0ec"},theme:{bg:"#1a1112",accent:"#f7c6b6","accent-fg":"#24120f"}},"black-chrome":{name:"Black Chrome",title:"Dark matter.",message:"This page absorbed all the light. Nothing left to show.",params:{tint:"#3b3f46",tint2:"#3b3f46",tint3:"#3b3f46",bgTop:"#121317",bgBottom:"#020203",light:"#ffffff",bevel:.08},theme:{bg:"#060608",accent:"#ffffff","accent-fg":"#000"}},holo:{name:"Holographic",title:"Iridescent, and irrelevant.",message:"A shimmering 404 for a page that never was.",params:{tint:"#9ef3ff",tint2:"#f6a6ff",tint3:"#fff1a0",bgTop:"#e9e6f5",bgBottom:"#b7b3cc",light:"#ffffff"},theme:{bg:"#d8d5e8",fg:"#15131f",accent:"#15131f","accent-fg":"#fff"}},copper:{name:"Copper",params:{tint:"#e8875a",tint2:"#e8875a",tint3:"#e8875a",bgTop:"#1d2626",bgBottom:"#050707",light:"#fff4e6"},theme:{bg:"#0d1212",accent:"#f0a07a","accent-fg":"#1d0d06"}}},css:"& .lp-title{font-weight:600}",setup(e){let t=e.params;return f(e,{material:"chrome",colors:{a:t.tint,b:t.tint2,c:t.tint3,bg0:t.bgTop,bg1:t.bgBottom,light:t.light},depth:t.depth,round:t.bevel,spin:t.sway,envSpeed:.12,floor:!1,y:.1})}};export{n as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
function c(e,t={}){let a=e.canvas({z:t.z,scale:t.scale}),n=a.getContext("2d",{alpha:t.alpha??!1}),r={canvas:a,g:n,get w(){return e.width},get h(){return e.height},reset(){let o=a.width/Math.max(1,e.width),s=a.height/Math.max(1,e.height);n.setTransform(o,0,0,s,0,0)}};return r.reset(),r}function d(e,t=64,a=.15){let n=document.createElement("canvas");n.width=n.height=t;let r=n.getContext("2d"),o=r.createRadialGradient(t/2,t/2,0,t/2,t/2,t/2);return o.addColorStop(0,e),o.addColorStop(a,e),o.addColorStop(1,"rgba(0,0,0,0)"),r.fillStyle=o,r.fillRect(0,0,t,t),n}export{c as a,d as b};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{a as s}from"./chunk-QHXVYCR6.js";var i=t=>t.replace(/[&<>"]/g,e=>({"&":"&","<":"<",">":">",'"':"""})[e]),l=()=>typeof location<"u"?location.pathname+location.search:"/missing-page";function m(t,e="lp-actions"){let n=document.createElement("div");n.className=e;for(let r of t.copy.actions)n.append(s(r,t.navigate));return n}function g(t,e,n,r={}){let o=document.createElement("div");o.className=e;for(let[c,a]of Object.entries(r))o.style.setProperty(`--${c}`,String(a));return o.innerHTML=n,t.root.append(o),o}var d=t=>`<span class="lp-sr">Error ${i(t)}: </span>`;export{i as a,l as b,m as c,g as d,d as e};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{a as p}from"./chunk-URWX3LLV.js";var w={};p(w,{TAU:()=>l,clamp:()=>b,damp:()=>f,fract:()=>h,isBrowser:()=>$,lerp:()=>s,linear:()=>d,mixColor:()=>x,rgb:()=>m,rgba:()=>M,rng:()=>g,smoothstep:()=>a});var b=(r,t=0,n=1)=>r<t?t:r>n?n:r,s=(r,t,n)=>r+(t-r)*n,a=(r,t,n)=>{let e=b((n-r)/(t-r));return e*e*(3-2*e)},h=r=>r-Math.floor(r),l=Math.PI*2,f=(r,t,n,e)=>s(r,t,1-Math.exp(-n*e));function g(r=1){let t=r>>>0||1;return()=>{t=t+1831565813>>>0;let n=t;return n=Math.imul(n^n>>>15,n|1),n^=n+Math.imul(n^n>>>7,n|61),((n^n>>>14)>>>0)/4294967296}}function m(r){let t=r.trim();if(t.startsWith("#")){let e=t.slice(1);(e.length===3||e.length===4)&&(e=e.split("").map(u=>u+u).join(""));let o=parseInt(e.slice(0,6),16);return[(o>>16&255)/255,(o>>8&255)/255,(o&255)/255]}let n=t.match(/[\d.]+/g);return n&&n.length>=3?[+n[0]/255,+n[1]/255,+n[2]/255]:[1,1,1]}function d(r){return m(r).map(t=>t<=.04045?t/12.92:Math.pow((t+.055)/1.055,2.4))}function x(r,t,n){let e=m(r),o=m(t),u=e.map((i,c)=>Math.round(s(i,o[c],n)*255));return`rgb(${u[0]},${u[1]},${u[2]})`}function M(r,t){let[n,e,o]=m(r);return`rgba(${Math.round(n*255)},${Math.round(e*255)},${Math.round(o*255)},${t})`}var $=()=>typeof window<"u"&&typeof document<"u";export{b as a,f as b,g as c,m as d,d as e,M as f,$ as g,w as h};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{a as T}from"./chunk-URWX3LLV.js";var $={};T($,{MONO:()=>S,SANS:()=>A,SERIF:()=>C,blurField:()=>M,drawFittedText:()=>w,sdfFromAlpha:()=>F,textCanvas:()=>y,textPoints:()=>D,textSDF:()=>I});var A='"Inter","SF Pro Display",ui-sans-serif,system-ui,-apple-system,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif',S='"JetBrains Mono","SF Mono",ui-monospace,SFMono-Regular,Menlo,Consolas,monospace',C='"Fraunces","Playfair Display",ui-serif,Georgia,"Times New Roman",serif';function y(s,e){let t=document.createElement("canvas");t.width=Math.max(1,Math.round(e.width)),t.height=Math.max(1,Math.round(e.height));let i=t.getContext("2d");return w(i,s,e),t}function w(s,e,t){let i=t.fit??.8,c=t.font??A,o=t.weight??800,a=t.style??"normal",l=100;s.font=`${a} ${o} ${l}px ${c}`;let n=t.tracking??-.02,r=()=>{let m=s.measureText(e),g=m.width+n*l*(e.length-1),B=(m.actualBoundingBoxAscent||l*.72)+(m.actualBoundingBoxDescent||0);return{w:g,h:B,asc:m.actualBoundingBoxAscent||l*.72,desc:m.actualBoundingBoxDescent||0}},h=r();l=Math.min(t.width*i/h.w,t.height*i/h.h)*100,s.font=`${a} ${o} ${l}px ${c}`,h=r();let u=t.width*(t.cx??.5),x=t.height*(t.cy??.5);s.fillStyle=t.color??"#fff",s.textBaseline="alphabetic";let f=x+(h.asc-h.desc)/2;if(Math.abs(n)<1e-4)s.textAlign="center",s.fillText(e,u,f);else{s.textAlign="left";let m=u-h.w/2;for(let g of e)s.fillText(g,m,f),m+=s.measureText(g).width+n*l}return{size:l,width:h.w,height:h.h,x:u-h.w/2,y:f-h.asc}}function D(s,e){let i=y(s,{...e,width:e.width*1,height:e.height*1}),c=i.getContext("2d"),{data:o,width:a,height:l}=c.getImageData(0,0,i.width,i.height),n=[],r=e.random??Math.random,h=e.jitter??0;for(let u=0;u<l;u+=e.step)for(let x=0;x<a;x+=e.step)o[(u*a+x)*4+3]>140&&n.push(x/1+(r()-.5)*h*e.step,u/1+(r()-.5)*h*e.step);return new Float32Array(n)}var d=1e20;function p(s,e,t,i,c){let o=0;i[0]=0,c[0]=-d,c[1]=d;for(let a=1;a<e;a++){let l=(s[a]+a*a-(s[i[o]]+i[o]*i[o]))/(2*a-2*i[o]);for(;l<=c[o];)o--,l=(s[a]+a*a-(s[i[o]]+i[o]*i[o]))/(2*a-2*i[o]);o++,i[o]=a,c[o]=l,c[o+1]=d}o=0;for(let a=0;a<e;a++){for(;c[o+1]<a;)o++;t[a]=(a-i[o])*(a-i[o])+s[i[o]]}}function b(s,e,t){let i=Math.max(e,t),c=new Float64Array(i),o=new Float64Array(i),a=new Int32Array(i),l=new Float64Array(i+1);for(let n=0;n<e;n++){for(let r=0;r<t;r++)c[r]=s[r*e+n];p(c,t,o,a,l);for(let r=0;r<t;r++)s[r*e+n]=o[r]}for(let n=0;n<t;n++){for(let r=0;r<e;r++)c[r]=s[n*e+r];p(c,e,o,a,l);for(let r=0;r<e;r++)s[n*e+r]=o[r]}}function F(s,e,t,i=4,c=3){let o=new Float64Array(e*t),a=new Float64Array(e*t);for(let n=0;n<e*t;n++){let r=s[n*i+c]/255;if(r>=.999)o[n]=0,a[n]=d;else if(r<=.001)o[n]=d,a[n]=0;else{let h=Math.max(0,.5-r),u=Math.max(0,r-.5);o[n]=h*h,a[n]=u*u}}b(o,e,t),b(a,e,t);let l=new Float32Array(e*t);for(let n=0;n<e*t;n++)l[n]=Math.sqrt(o[n])-Math.sqrt(a[n]);return l}function M(s,e,t,i=1.6){let c=Math.ceil(i*2.5),o=[],a=0;for(let n=-c;n<=c;n++){let r=Math.exp(-(n*n)/(2*i*i));o.push(r),a+=r}for(let n=0;n<o.length;n++)o[n]/=a;let l=new Float32Array(s.length);for(let n=0;n<t;n++){let r=n*e;for(let h=0;h<e;h++){let u=0;for(let x=-c;x<=c;x++)u+=s[r+Math.min(e-1,Math.max(0,h+x))]*o[x+c];l[r+h]=u}}for(let n=0;n<e;n++)for(let r=0;r<t;r++){let h=0;for(let u=-c;u<=c;u++)h+=l[Math.min(t-1,Math.max(0,r+u))*e+n]*o[u+c];s[r*e+n]=h}return s}function I(s,e){let t=y(s,e),c=t.getContext("2d").getImageData(0,0,t.width,t.height),o=F(c.data,t.width,t.height);(e.smooth??1.8)>0&&M(o,t.width,t.height,e.smooth??1.8);let a=new Float32Array(o.length);for(let l=0;l<t.height;l++)a.set(o.subarray(l*t.width,(l+1)*t.width),(t.height-1-l)*t.width);return{data:a,width:t.width,height:t.height}}export{A as a,S as b,C as c,y as d,w as e,D as f,I as g,$ as h};
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import{a as u,d as c}from"./chunk-IETNWEVK.js";var f={ArrowLeft:"left",KeyA:"left",ArrowRight:"right",KeyD:"right",ArrowUp:"up",KeyW:"up",ArrowDown:"down",KeyS:"down",Space:"action",Enter:"action"};function d(e,i={}){let r=!1,n={left:!1,right:!1,up:!1,down:!1,action:!1,playing:!1,swipe:null,pressed(){let t=r;return r=!1,t}},s=()=>{let t=document.activeElement;return!!t&&(t.tagName==="INPUT"||t.tagName==="TEXTAREA"||t.isContentEditable)};e.onWindow("keydown",t=>{let o=f[t.code];if(!o||!e.visible()||s()||t.metaKey||t.ctrlKey)return;let p=e.root.getBoundingClientRect();p.top<innerHeight*.5&&p.bottom>innerHeight*.5&&t.preventDefault(),!n[o]&&o==="action"&&(r=!0),!n[o]&&o==="up"&&(r=!0),n[o]=!0,n.playing=!0}),e.onWindow("keyup",t=>{let o=f[t.code];o&&(n[o]=!1)});let l=0,a=0;return e.on("pointerdown",t=>{t.target.closest("a,button")||(l=t.clientX,a=t.clientY,r=!0,i.pointerPlays!==!1&&(n.playing=!0))}),e.on("pointerup",t=>{let o=t.clientX-l,p=t.clientY-a;Math.hypot(o,p)>30&&(n.swipe=Math.abs(o)>Math.abs(p)?o>0?"right":"left":p>0?"down":"up")}),i.pointerPlays&&e.on("pointermove",()=>n.playing=!0),n}function y(e,i,r,n=900){let l=c(e,{width:i,height:r,font:u,weight:n,fit:1}).getContext("2d").getImageData(0,0,i,r).data,a=[];for(let t=0;t<i*r;t++)a.push(l[t*4+3]>120);return a}var g='"Press Start 2P","Silkscreen","VT323",ui-monospace,SFMono-Regular,Menlo,monospace';function b(e,i,r,n,s,l,a="left"){e.font=`700 ${s}px ${g}`,e.textAlign=a,e.textBaseline="top",e.fillStyle=l,e.fillText(i,r,n)}function h(e){try{return Number(localStorage.getItem(`lostpage:${e}`)||0)}catch{return 0}}function w(e,i){try{localStorage.setItem(`lostpage:${e}`,String(i))}catch{}}var x=`& .lp-title{--lp-title-size:clamp(22px,2.6vw,34px)}
|
|
2
|
+
& .lp-message{margin-top:8px}
|
|
3
|
+
& .lp-actions{margin-top:16px}
|
|
4
|
+
& .lp-eyebrow{font-family:var(--lp-font-mono);letter-spacing:.2em}`;export{d as a,y as b,g as c,b as d,h as e,w as f,x as g};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{e as r,k as i}from"./chunk-QJZBGT2Q.js";function m(n,e){let o=n.canvas({scale:e.scale??1,adaptive:e.adaptive??!0,z:e.z}),a=r(o),s=i(a,e.frag);return e.init?.(a,s),{gl:a,pass:s,frame(t,p){s.draw({uTime:t,uMouse:[n.pointer.sx,n.pointer.sy],...e.uniforms?.(t,p)??{}})}}}export{m as a};
|
|
@@ -0,0 +1,296 @@
|
|
|
1
|
+
import{a as p,b as d,c as m,e as v,j as h,k as x}from"./chunk-QJZBGT2Q.js";import{e as o}from"./chunk-HXSSPN2I.js";import{a as f,g as u}from"./chunk-IETNWEVK.js";var k=`
|
|
2
|
+
uniform sampler2D uSdf;
|
|
3
|
+
uniform vec2 uHalf; // half extents of the SDF box (world)
|
|
4
|
+
uniform float uScale; // sdf px -> world
|
|
5
|
+
uniform float uInflate;
|
|
6
|
+
uniform float uDepth, uRound, uSpin, uFloat, uGloss, uEnvSpeed, uStrings, uDisp, uFloor, uSize, uY;
|
|
7
|
+
uniform vec3 uA, uB, uC, uBg0, uBg1, uLight;
|
|
8
|
+
${p}
|
|
9
|
+
${d}
|
|
10
|
+
${m}
|
|
11
|
+
|
|
12
|
+
mat3 rotY(float a){ float c = cos(a), s = sin(a); return mat3(c,0,-s, 0,1,0, s,0,c); }
|
|
13
|
+
mat3 rotX(float a){ float c = cos(a), s = sin(a); return mat3(1,0,0, 0,c,s, 0,-s,c); }
|
|
14
|
+
|
|
15
|
+
// Cubic B-spline filtering from 4 bilinear taps: C2-smooth distances, so normals don't kink at texel edges.
|
|
16
|
+
float sdfBicubic(vec2 uv) {
|
|
17
|
+
vec2 size = vec2(textureSize(uSdf, 0));
|
|
18
|
+
vec2 st = uv * size - 0.5;
|
|
19
|
+
vec2 i = floor(st);
|
|
20
|
+
vec2 f = st - i;
|
|
21
|
+
vec2 f2 = f * f, f3 = f2 * f;
|
|
22
|
+
vec2 w0 = (1.0 - 3.0 * f + 3.0 * f2 - f3) / 6.0;
|
|
23
|
+
vec2 w1 = (4.0 - 6.0 * f2 + 3.0 * f3) / 6.0;
|
|
24
|
+
vec2 w2 = (1.0 + 3.0 * f + 3.0 * f2 - 3.0 * f3) / 6.0;
|
|
25
|
+
vec2 w3 = f3 / 6.0;
|
|
26
|
+
vec2 g0 = w0 + w1, g1 = w2 + w3;
|
|
27
|
+
vec2 h0 = (w1 / g0 - 1.0 + i + 0.5) / size;
|
|
28
|
+
vec2 h1 = (w3 / g1 + 1.0 + i + 0.5) / size;
|
|
29
|
+
float a = texture(uSdf, vec2(h0.x, h0.y)).r, b = texture(uSdf, vec2(h1.x, h0.y)).r;
|
|
30
|
+
float c = texture(uSdf, vec2(h0.x, h1.y)).r, d = texture(uSdf, vec2(h1.x, h1.y)).r;
|
|
31
|
+
return mix(mix(d, c, g0.x), mix(b, a, g0.x), g0.y);
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
float sdText2(vec2 p) {
|
|
35
|
+
vec2 uv = p / (2.0 * uHalf) + 0.5;
|
|
36
|
+
vec2 q = clamp(uv, 0.004, 0.996);
|
|
37
|
+
float d = sdfBicubic(q) * uScale;
|
|
38
|
+
return d + length((uv - q) * 2.0 * uHalf);
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
mat3 objRot;
|
|
42
|
+
vec3 objOff;
|
|
43
|
+
float floorY = -1.15;
|
|
44
|
+
|
|
45
|
+
float mapText(vec3 p) {
|
|
46
|
+
p = objRot * (p - objOff);
|
|
47
|
+
if (uInflate > 0.0) {
|
|
48
|
+
// pillow: thickness grows with distance from the outline along a circular profile
|
|
49
|
+
float d2 = sdText2(p.xy);
|
|
50
|
+
float s = clamp(-d2 / uInflate, 0.0, 1.0);
|
|
51
|
+
float h = uDepth * sqrt(max(1.0 - (1.0 - s) * (1.0 - s), 0.0));
|
|
52
|
+
return max(d2, abs(p.z) - h) * 0.6;
|
|
53
|
+
}
|
|
54
|
+
float d2 = sdText2(p.xy) + uRound;
|
|
55
|
+
vec2 w = vec2(d2, abs(p.z) - uDepth);
|
|
56
|
+
return min(max(w.x, w.y), 0.0) + length(max(w, 0.0)) - uRound;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
// which letter (0,1,2) a point belongs to, by x position in object space
|
|
60
|
+
float letterId(vec3 p) {
|
|
61
|
+
vec3 q = objRot * (p - objOff);
|
|
62
|
+
return clamp(floor((q.x / (2.0 * uHalf.x) + 0.5) * 3.0), 0.0, 2.0);
|
|
63
|
+
}
|
|
64
|
+
vec3 letterColor(vec3 p) {
|
|
65
|
+
float id = letterId(p);
|
|
66
|
+
return id < 0.5 ? uA : id < 1.5 ? uB : uC;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
float mapStrings(vec3 p) {
|
|
70
|
+
if (uStrings < 0.5) return 1e5;
|
|
71
|
+
vec3 q = objRot * (p - objOff);
|
|
72
|
+
float d = 1e5;
|
|
73
|
+
for (int i = 0; i < 3; i++) {
|
|
74
|
+
float x = (float(i) - 1.0) * uHalf.x * 0.62;
|
|
75
|
+
float sway = sin(uTime * 0.9 + float(i) * 1.7) * 0.08 * (-q.y - uHalf.y * 0.7);
|
|
76
|
+
vec3 a = vec3(x + sway, q.y, 0.0);
|
|
77
|
+
float inY = step(q.y, -uHalf.y * 0.55);
|
|
78
|
+
float dd = length(q.xz - a.xz) - 0.006;
|
|
79
|
+
d = min(d, mix(1e5, dd, inY));
|
|
80
|
+
}
|
|
81
|
+
return d;
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
float map(vec3 p) {
|
|
85
|
+
float d = mapText(p);
|
|
86
|
+
d = min(d, mapStrings(p));
|
|
87
|
+
if (uFloor > 0.5) d = min(d, p.y - floorY);
|
|
88
|
+
return d;
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
vec3 calcNormal(vec3 p) {
|
|
92
|
+
const vec2 k = vec2(1, -1);
|
|
93
|
+
float e = 0.003;
|
|
94
|
+
return normalize(k.xyy * map(p + k.xyy * e) + k.yyx * map(p + k.yyx * e) + k.yxy * map(p + k.yxy * e) + k.xxx * map(p + k.xxx * e));
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
float trace(vec3 ro, vec3 rd, float tmax) {
|
|
98
|
+
float t = 0.0;
|
|
99
|
+
for (int i = 0; i < 140; i++) {
|
|
100
|
+
float d = map(ro + rd * t);
|
|
101
|
+
if (d < 0.00012 * t + 0.0002) return t;
|
|
102
|
+
t += d * 0.85;
|
|
103
|
+
if (t > tmax) break;
|
|
104
|
+
}
|
|
105
|
+
return -1.0;
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
float softShadow(vec3 ro, vec3 rd) {
|
|
109
|
+
float res = 1.0, t = 0.02;
|
|
110
|
+
for (int i = 0; i < 40; i++) {
|
|
111
|
+
float h = mapText(ro + rd * t);
|
|
112
|
+
res = min(res, 10.0 * h / t);
|
|
113
|
+
t += clamp(h, 0.02, 0.25);
|
|
114
|
+
if (res < 0.002 || t > 6.0) break;
|
|
115
|
+
}
|
|
116
|
+
return clamp(res, 0.0, 1.0);
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
float ao(vec3 p, vec3 n) {
|
|
120
|
+
float occ = 0.0, s = 1.0;
|
|
121
|
+
for (int i = 1; i <= 5; i++) {
|
|
122
|
+
float h = 0.03 * float(i) * float(i);
|
|
123
|
+
occ += (h - map(p + n * h)) * s;
|
|
124
|
+
s *= 0.6;
|
|
125
|
+
}
|
|
126
|
+
return clamp(1.0 - 1.6 * occ, 0.0, 1.0);
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
// A photo-studio environment: dark floor, gradient walls, long softboxes and a ring light.
|
|
130
|
+
vec3 studio(vec3 r) {
|
|
131
|
+
float a = uTime * uEnvSpeed;
|
|
132
|
+
r = rotY(a) * r;
|
|
133
|
+
vec3 c = mix(uBg1 * 0.6 + 0.04, uBg0 * 1.6 + 0.08, smoothstep(-0.25, 0.9, r.y));
|
|
134
|
+
c = mix(c, uBg1 * 0.15, smoothstep(-0.02, -0.35, r.y));
|
|
135
|
+
// broad gradient bands so curved surfaces always pick up something
|
|
136
|
+
c += uLight * 0.35 * smoothstep(0.6, 1.0, sin(atan(r.x, r.z) * 3.0 + 0.6) * 0.5 + 0.5) * smoothstep(-0.1, 0.4, r.y);
|
|
137
|
+
// horizon line
|
|
138
|
+
c += uLight * 0.9 * exp(-abs(r.y + 0.02) * 60.0);
|
|
139
|
+
// overhead strip softboxes
|
|
140
|
+
float strip1 = smoothstep(0.08, 0.06, abs(r.x - 0.35)) * smoothstep(0.35, 0.45, r.y);
|
|
141
|
+
float strip2 = smoothstep(0.05, 0.03, abs(r.x + 0.55)) * smoothstep(0.1, 0.25, r.y) * smoothstep(0.95, 0.75, r.y);
|
|
142
|
+
float box = smoothstep(0.02, 0.0, max(abs(r.z + 0.55) - 0.32, abs(r.y - 0.25) - 0.18)) * step(0.0, r.x);
|
|
143
|
+
float ring = smoothstep(0.03, 0.0, abs(length(r.xy - vec2(-0.2, 0.55)) - 0.22)) * step(0.0, -r.z);
|
|
144
|
+
c += uLight * (strip1 * 6.0 + strip2 * 4.0 + box * 3.0 + ring * 2.5);
|
|
145
|
+
// behind the camera: a big diffused panel split by a dark gap, so front faces read as polished metal
|
|
146
|
+
float fz = smoothstep(0.35, 0.95, r.z);
|
|
147
|
+
float diag = r.x * 0.8 + r.y * 0.6;
|
|
148
|
+
float panel = smoothstep(-0.05, 0.05, diag + 0.1) * smoothstep(0.75, 0.2, diag) + 0.55 * smoothstep(-0.3, -0.18, diag) * smoothstep(-0.05, -0.15, diag);
|
|
149
|
+
c += uLight * fz * panel * 1.1;
|
|
150
|
+
return c;
|
|
151
|
+
}
|
|
152
|
+
`,B=`
|
|
153
|
+
vec3 background(vec2 uv, vec2 fc) {
|
|
154
|
+
vec3 c = mix(uBg1, uBg0, smoothstep(-0.6, 0.6, uv.y));
|
|
155
|
+
return c;
|
|
156
|
+
}
|
|
157
|
+
`,L=`
|
|
158
|
+
// moving colour fields behind the glass
|
|
159
|
+
vec3 background(vec2 uv, vec2 fc) {
|
|
160
|
+
float t = uTime * 0.12;
|
|
161
|
+
vec3 c = mix(uBg1, uBg0, smoothstep(-0.7, 0.7, uv.y));
|
|
162
|
+
for (int i = 0; i < 4; i++) {
|
|
163
|
+
float fi = float(i);
|
|
164
|
+
vec2 cp = vec2(sin(t * (1.0 + fi * 0.3) + fi * 2.1) * 0.75, cos(t * (0.8 + fi * 0.2) + fi * 1.3) * 0.38);
|
|
165
|
+
vec3 col = fi < 0.5 ? uA : fi < 1.5 ? uB : fi < 2.5 ? uC : mix(uA, uB, 0.5);
|
|
166
|
+
c = mix(c, col, smoothstep(0.75, 0.0, length(uv - cp)) * 0.85);
|
|
167
|
+
}
|
|
168
|
+
// fine stripes make refraction readable
|
|
169
|
+
c *= 0.92 + 0.08 * smoothstep(0.3, 0.7, abs(fract(uv.x * 9.0 + uv.y * 3.0) - 0.5) * 2.0);
|
|
170
|
+
return c;
|
|
171
|
+
}
|
|
172
|
+
`,T=r=>`
|
|
173
|
+
void main() {
|
|
174
|
+
vec2 fc = gl_FragCoord.xy;
|
|
175
|
+
vec2 uv = (fc - 0.5 * uRes) / uRes.y;
|
|
176
|
+
float t = uTime;
|
|
177
|
+
float aspect = uRes.x / uRes.y;
|
|
178
|
+
|
|
179
|
+
// object motion: gentle sway, follows the pointer
|
|
180
|
+
float sway = sin(t * 0.45) * uSpin + uMouse.x * 0.45;
|
|
181
|
+
float tilt = sin(t * 0.33 + 1.0) * uSpin * 0.35 - uMouse.y * 0.25;
|
|
182
|
+
objRot = rotX(tilt) * rotY(sway);
|
|
183
|
+
// fit text width to the screen (and never taller than ~42% of it)
|
|
184
|
+
float fov = 1.8;
|
|
185
|
+
float dist = max(uHalf.x * 2.0 * fov / (uSize * min(aspect, 2.2)), uHalf.y * 2.0 * fov / 0.42);
|
|
186
|
+
objOff = vec3(0.0, sin(t * 0.8) * uFloat + uY * dist / fov, 0.0);
|
|
187
|
+
floorY = uY * dist / fov - uHalf.y - 0.45;
|
|
188
|
+
vec3 ro = vec3(0.0, 0.0, dist);
|
|
189
|
+
vec3 rd = normalize(vec3(uv, -fov));
|
|
190
|
+
|
|
191
|
+
vec3 col = background(uv, fc);
|
|
192
|
+
float tmax = dist + 8.0;
|
|
193
|
+
float th = trace(ro, rd, tmax);
|
|
194
|
+
|
|
195
|
+
if (th > 0.0) {
|
|
196
|
+
vec3 p = ro + rd * th;
|
|
197
|
+
vec3 n = calcNormal(p);
|
|
198
|
+
bool isFloor = uFloor > 0.5 && p.y < floorY + 0.02 && mapText(p) > 0.01;
|
|
199
|
+
vec3 L = normalize(vec3(0.55, 0.85, 0.6));
|
|
200
|
+
${F[r]}
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
col = aces(col * 1.0);
|
|
204
|
+
col = toSRGB(col);
|
|
205
|
+
col += grain(fc, t) * 0.012;
|
|
206
|
+
fragColor = vec4(col, 1.0);
|
|
207
|
+
}
|
|
208
|
+
`,F={chrome:`
|
|
209
|
+
if (isFloor) {
|
|
210
|
+
vec3 r = reflect(rd, n);
|
|
211
|
+
float tr = trace(p + n * 0.01, r, 8.0);
|
|
212
|
+
vec3 rc = col * 0.6;
|
|
213
|
+
if (tr > 0.0) { vec3 q = p + n * 0.01 + r * tr; vec3 qn = calcNormal(q); rc = studio(reflect(r, qn)) * letterColor(q) * 0.7; }
|
|
214
|
+
float fr = 0.04 + 0.5 * pow(1.0 - max(dot(n, -rd), 0.0), 5.0);
|
|
215
|
+
col = mix(col * 0.8, rc, fr + 0.15) * smoothstep(9.0, 2.0, length(p.xz));
|
|
216
|
+
} else {
|
|
217
|
+
vec3 r = reflect(rd, n);
|
|
218
|
+
vec3 tint = letterColor(p);
|
|
219
|
+
vec3 rc = studio(r);
|
|
220
|
+
// one inter-reflection so the letters mirror each other
|
|
221
|
+
float tr = trace(p + n * 0.004, r, 6.0);
|
|
222
|
+
if (tr > 0.0) { vec3 q = p + n * 0.004 + r * tr; vec3 qn = calcNormal(q); rc = studio(reflect(r, qn)) * letterColor(q) * 0.85; }
|
|
223
|
+
float ndv = max(dot(n, -rd), 0.0);
|
|
224
|
+
vec3 F = tint + (1.0 - tint) * pow(1.0 - ndv, 5.0);
|
|
225
|
+
col = rc * F;
|
|
226
|
+
col += uLight * pow(max(dot(r, L), 0.0), 160.0) * 3.0;
|
|
227
|
+
col *= 0.65 + 0.35 * ao(p, n);
|
|
228
|
+
}`,glass:`
|
|
229
|
+
float ndv = max(dot(n, -rd), 0.0);
|
|
230
|
+
float fres = 0.04 + 0.96 * pow(1.0 - ndv, 5.0);
|
|
231
|
+
vec3 refl = studio(reflect(rd, n)) * 0.55;
|
|
232
|
+
vec3 acc = vec3(0.0);
|
|
233
|
+
for (int ch = 0; ch < 3; ch++) {
|
|
234
|
+
float ior = 1.45 + (float(ch) - 1.0) * 0.035 * uDisp;
|
|
235
|
+
vec3 rdi = refract(rd, n, 1.0 / ior);
|
|
236
|
+
// march through the inside to the back face
|
|
237
|
+
vec3 q = p - n * 0.003;
|
|
238
|
+
float s = 0.0;
|
|
239
|
+
for (int i = 0; i < 48; i++) {
|
|
240
|
+
float d = -mapText(q + rdi * s);
|
|
241
|
+
if (d < 0.0008) break;
|
|
242
|
+
s += max(d, 0.004);
|
|
243
|
+
}
|
|
244
|
+
vec3 qb = q + rdi * s;
|
|
245
|
+
vec3 nb = -calcNormal(qb);
|
|
246
|
+
vec3 rdo = refract(rdi, nb, ior);
|
|
247
|
+
if (dot(rdo, rdo) < 1e-4) rdo = reflect(rdi, nb);
|
|
248
|
+
vec2 suv = uv + rdo.xy * 0.22 + rdi.xy * s * 0.05;
|
|
249
|
+
vec3 b = background(suv, fc);
|
|
250
|
+
b *= exp(-s * (1.0 - letterColor(p)) * 0.9);
|
|
251
|
+
acc[ch] = b[ch];
|
|
252
|
+
}
|
|
253
|
+
col = mix(acc, refl, fres);
|
|
254
|
+
col += uLight * pow(max(dot(reflect(rd, n), L), 0.0), 220.0) * 2.5;
|
|
255
|
+
col += uLight * 0.25 * pow(1.0 - ndv, 3.0);`,clay:`
|
|
256
|
+
vec3 base = isFloor ? mix(uBg1, uBg0, 0.35) : letterColor(p);
|
|
257
|
+
float dif = clamp(dot(n, L) * 0.5 + 0.5, 0.0, 1.0);
|
|
258
|
+
dif *= dif;
|
|
259
|
+
float sh = softShadow(p + n * 0.01, L);
|
|
260
|
+
float occ = ao(p, n);
|
|
261
|
+
float rim = pow(1.0 - max(dot(n, -rd), 0.0), 3.0);
|
|
262
|
+
vec3 sky = mix(uBg1, uBg0, 0.7);
|
|
263
|
+
vec3 lit = base * (0.42 * sky * occ + 0.95 * uLight * dif * mix(0.35, 1.0, sh));
|
|
264
|
+
lit += base * rim * 0.35 * occ;
|
|
265
|
+
if (!isFloor) {
|
|
266
|
+
vec3 h = normalize(L - rd);
|
|
267
|
+
lit += uLight * pow(max(dot(n, h), 0.0), 60.0) * uGloss * sh * 0.9;
|
|
268
|
+
// subtle surface tooth
|
|
269
|
+
lit *= 0.97 + 0.03 * vnoise(p.xy * 90.0);
|
|
270
|
+
} else {
|
|
271
|
+
float fade = smoothstep(9.0, 1.5, length(p.xz));
|
|
272
|
+
lit = mix(col, lit, fade);
|
|
273
|
+
}
|
|
274
|
+
col = lit;`,foil:`
|
|
275
|
+
if (isFloor) {
|
|
276
|
+
float sh = softShadow(p + n * 0.01, L);
|
|
277
|
+
vec3 fl = mix(uBg1, uBg0, 0.3) * (0.55 + 0.45 * sh);
|
|
278
|
+
col = mix(col, fl, smoothstep(9.0, 1.5, length(p.xz)));
|
|
279
|
+
} else if (mapStrings(p) < mapText(p)) {
|
|
280
|
+
col = vec3(0.85) * (0.6 + 0.4 * dot(n, L));
|
|
281
|
+
} else {
|
|
282
|
+
vec3 q = objRot * (p - objOff);
|
|
283
|
+
// crinkles: low-amplitude noise on the normal
|
|
284
|
+
vec3 bump = vec3(vnoise(q.xy * 18.0) - 0.5, vnoise(q.yx * 18.0 + 3.0) - 0.5, 0.0) * 0.18;
|
|
285
|
+
vec3 nn = normalize(n + bump * (0.3 + 0.7 * smoothstep(0.0, 0.2, uDepth - abs(q.z))));
|
|
286
|
+
vec3 r = reflect(rd, nn);
|
|
287
|
+
vec3 tint = letterColor(p);
|
|
288
|
+
vec3 rc = studio(r);
|
|
289
|
+
float ndv = max(dot(nn, -rd), 0.0);
|
|
290
|
+
vec3 F = tint * 0.85 + (1.0 - tint * 0.85) * pow(1.0 - ndv, 4.0);
|
|
291
|
+
col = rc * F + tint * 0.08;
|
|
292
|
+
col += uLight * pow(max(dot(r, L), 0.0), 90.0) * 2.0;
|
|
293
|
+
// seam around the edge
|
|
294
|
+
float seam = smoothstep(0.012, 0.0, abs(q.z)) * 0.5;
|
|
295
|
+
col *= 1.0 - seam;
|
|
296
|
+
}`};function Y(r,t){let g=r.canvas({adaptive:!0}),i=v(g),b=x(i,k+(t.material==="glass"?L:B)+T(t.material)),y=r.copy.code||"404",c=1024,s=400,a=u(y,{width:c,height:s,font:t.font??f,weight:t.weight??800,fit:.86,tracking:-.01}),w=h(i,a.data,a.width,a.height,1),l=2,n=l*2/c,S=s*n/2,e=t.colors,q={uSdf:w,uHalf:[l,S],uScale:n,uDepth:t.depth??.22,uInflate:t.inflate??0,uRound:t.round??.04,uSpin:t.spin??.25,uFloat:t.float??.03,uGloss:t.gloss??.4,uEnvSpeed:t.envSpeed??.08,uStrings:t.strings?1:0,uDisp:t.dispersion??1,uFloor:t.floor?1:0,uSize:t.scale??.62,uY:t.y??.08,uA:o(e.a),uB:o(e.b),uC:o(e.c??e.a),uBg0:o(e.bg0),uBg1:o(e.bg1),uLight:o(e.light??"#ffffff")};return{frame(z){b.draw({...q,uTime:z,uMouse:[r.pointer.sx,r.pointer.sy]})}}}export{Y as a};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var l={back:'<svg data-dir="back" viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M13 8H3M7 4 3 8l4 4"/></svg>',arrow:'<svg data-dir="arrow" viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M5 11 11 5M6 5h5v5"/></svg>',home:'<svg data-dir="home" viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M2.5 7.5 8 3l5.5 4.5M4 6.5V13h8V6.5"/></svg>'};function o(e,a,i){let n=document.createElement(e);return n.className=a,i!==void 0&&(n.textContent=i),n}function p(e,a){let i=e.variant??"primary",n=e.href!==void 0?o("a",`lp-btn lp-btn--${i}`):o("button",`lp-btn lp-btn--${i}`);n instanceof HTMLAnchorElement?n.href=e.href:n.type="button";let d=e.icon??(i==="primary"?"back":"arrow"),s=o("span","lp-btn-label",e.label);if(d!=="none"&&l[d]){let t=document.createElement("span");t.innerHTML=l[d];let r=t.firstChild;d==="arrow"?n.append(s,r):n.append(r,s)}else n.append(s);return n.addEventListener("click",t=>{let r=t;e.onClick?.(r),!r.defaultPrevented&&e.href!==void 0&&a&&!(r.metaKey||r.ctrlKey||r.shiftKey||r.button===1)&&(r.preventDefault(),a(e.href,r))}),n}function c(e,a,i){let n=o("div",`lp-overlay lp-layout-${a} lp-fadein`),d=o("div","lp-head");if(e.eyebrow&&d.append(o("p","lp-eyebrow",e.eyebrow)),e.code){let t=o("div","lp-code",e.code);t.setAttribute("aria-hidden","true"),d.append(t)}let s=o("div","lp-body");if(e.title){let t=o("h1","lp-title");e.code&&t.append(o("span","lp-sr",`Error ${e.code}: `)),t.append(e.title),s.append(t)}if(e.message&&s.append(o("p","lp-message",e.message)),e.actions?.length){let t=o("div","lp-actions");for(let r of e.actions)t.append(p(r,i));s.append(t)}return n.append(d,s),n}export{p as a,c as b};
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import{a as R}from"./chunk-URWX3LLV.js";var S={};R(S,{HASH:()=>U,NOISE:()=>F,POST:()=>y,SDF2:()=>G,SIMPLEX:()=>P});var U=`
|
|
2
|
+
float hash11(float p){ p = fract(p * .1031); p *= p + 33.33; p *= p + p; return fract(p); }
|
|
3
|
+
float hash12(vec2 p){ vec3 p3 = fract(vec3(p.xyx) * .1031); p3 += dot(p3, p3.yzx + 33.33); return fract((p3.x + p3.y) * p3.z); }
|
|
4
|
+
vec2 hash22(vec2 p){ vec3 p3 = fract(vec3(p.xyx) * vec3(.1031, .1030, .0973)); p3 += dot(p3, p3.yzx + 33.33); return fract((p3.xx + p3.yz) * p3.zy); }
|
|
5
|
+
vec3 hash32(vec2 p){ vec3 p3 = fract(vec3(p.xyx) * vec3(.1031, .1030, .0973)); p3 += dot(p3, p3.yxz + 33.33); return fract((p3.xxy + p3.yzz) * p3.zyx); }
|
|
6
|
+
float hash13(vec3 p3){ p3 = fract(p3 * .1031); p3 += dot(p3, p3.zyx + 31.32); return fract((p3.x + p3.y) * p3.z); }
|
|
7
|
+
`,F=`
|
|
8
|
+
float vnoise(vec2 p){
|
|
9
|
+
vec2 i = floor(p), f = fract(p);
|
|
10
|
+
vec2 u = f * f * (3.0 - 2.0 * f);
|
|
11
|
+
return mix(mix(hash12(i), hash12(i + vec2(1,0)), u.x), mix(hash12(i + vec2(0,1)), hash12(i + vec2(1,1)), u.x), u.y);
|
|
12
|
+
}
|
|
13
|
+
float vnoise3(vec3 p){
|
|
14
|
+
vec3 i = floor(p), f = fract(p);
|
|
15
|
+
vec3 u = f * f * (3.0 - 2.0 * f);
|
|
16
|
+
return mix(mix(mix(hash13(i), hash13(i + vec3(1,0,0)), u.x), mix(hash13(i + vec3(0,1,0)), hash13(i + vec3(1,1,0)), u.x), u.y),
|
|
17
|
+
mix(mix(hash13(i + vec3(0,0,1)), hash13(i + vec3(1,0,1)), u.x), mix(hash13(i + vec3(0,1,1)), hash13(i + vec3(1,1,1)), u.x), u.y), u.z);
|
|
18
|
+
}
|
|
19
|
+
float fbm(vec2 p){ float a = .5, s = 0.; mat2 r = mat2(.8, -.6, .6, .8); for(int i = 0; i < 6; i++){ s += a * vnoise(p); p = r * p * 2.03 + 11.7; a *= .5; } return s; }
|
|
20
|
+
float fbm3(vec3 p){ float a = .5, s = 0.; for(int i = 0; i < 5; i++){ s += a * vnoise3(p); p = p * 2.02 + vec3(13.1, 7.7, 3.3); a *= .5; } return s; }
|
|
21
|
+
`,P=`
|
|
22
|
+
vec3 _sxp(vec3 x){ return mod(((x * 34.0) + 1.0) * x, 289.0); }
|
|
23
|
+
float snoise(vec2 v){
|
|
24
|
+
const vec4 C = vec4(0.211324865405187, 0.366025403784439, -0.577350269189626, 0.024390243902439);
|
|
25
|
+
vec2 i = floor(v + dot(v, C.yy));
|
|
26
|
+
vec2 x0 = v - i + dot(i, C.xx);
|
|
27
|
+
vec2 i1 = (x0.x > x0.y) ? vec2(1.0, 0.0) : vec2(0.0, 1.0);
|
|
28
|
+
vec4 x12 = x0.xyxy + C.xxzz; x12.xy -= i1;
|
|
29
|
+
i = mod(i, 289.0);
|
|
30
|
+
vec3 p = _sxp(_sxp(i.y + vec3(0.0, i1.y, 1.0)) + i.x + vec3(0.0, i1.x, 1.0));
|
|
31
|
+
vec3 m = max(0.5 - vec3(dot(x0, x0), dot(x12.xy, x12.xy), dot(x12.zw, x12.zw)), 0.0);
|
|
32
|
+
m = m * m; m = m * m;
|
|
33
|
+
vec3 x = 2.0 * fract(p * C.www) - 1.0;
|
|
34
|
+
vec3 h = abs(x) - 0.5;
|
|
35
|
+
vec3 ox = floor(x + 0.5);
|
|
36
|
+
vec3 a0 = x - ox;
|
|
37
|
+
m *= 1.79284291400159 - 0.85373472095314 * (a0 * a0 + h * h);
|
|
38
|
+
vec3 g; g.x = a0.x * x0.x + h.x * x0.y; g.yz = a0.yz * x12.xz + h.yz * x12.yw;
|
|
39
|
+
return 130.0 * dot(m, g);
|
|
40
|
+
}
|
|
41
|
+
`,y=`
|
|
42
|
+
vec3 aces(vec3 x){ return clamp((x * (2.51 * x + 0.03)) / (x * (2.43 * x + 0.59) + 0.14), 0.0, 1.0); }
|
|
43
|
+
vec3 toSRGB(vec3 c){ c = max(c, vec3(0.0)); return mix(c * 12.92, 1.055 * pow(max(c, vec3(1e-6)), vec3(1.0 / 2.4)) - 0.055, step(0.0031308, c)); }
|
|
44
|
+
vec3 toLinear(vec3 c){ return pow(max(c, vec3(1e-6)), vec3(2.2)); }
|
|
45
|
+
float grain(vec2 fc, float t){ return fract(sin(dot(fc + fract(t) * 91.7, vec2(12.9898, 78.233))) * 43758.5453) - 0.5; }
|
|
46
|
+
float vignette(vec2 uv, float k){ uv = uv * (1.0 - uv.yx); return pow(max(uv.x * uv.y * 16.0, 1e-5), k); }
|
|
47
|
+
`,G=`
|
|
48
|
+
float sdBox(vec2 p, vec2 b){ vec2 d = abs(p) - b; return length(max(d, 0.0)) + min(max(d.x, d.y), 0.0); }
|
|
49
|
+
float sdRoundBox(vec2 p, vec2 b, float r){ return sdBox(p, b - r) - r; }
|
|
50
|
+
float sdSeg(vec2 p, vec2 a, vec2 b){ vec2 pa = p - a, ba = b - a; float h = clamp(dot(pa, ba) / dot(ba, ba), 0.0, 1.0); return length(pa - ba * h); }
|
|
51
|
+
float sdCircle(vec2 p, float r){ return length(p) - r; }
|
|
52
|
+
float sdTrap(vec2 p, float r1, float r2, float he){
|
|
53
|
+
vec2 k1 = vec2(r2, he); vec2 k2 = vec2(r2 - r1, 2.0 * he);
|
|
54
|
+
p.x = abs(p.x);
|
|
55
|
+
vec2 ca = vec2(p.x - min(p.x, (p.y < 0.0) ? r1 : r2), abs(p.y) - he);
|
|
56
|
+
vec2 cb = p - k1 + k2 * clamp(dot(k1 - p, k2) / dot(k2, k2), 0.0, 1.0);
|
|
57
|
+
float s = (cb.x < 0.0 && ca.y < 0.0) ? -1.0 : 1.0;
|
|
58
|
+
return s * sqrt(min(dot(ca, ca), dot(cb, cb)));
|
|
59
|
+
}
|
|
60
|
+
mat2 rot(float a){ float c = cos(a), s = sin(a); return mat2(c, -s, s, c); }
|
|
61
|
+
`;var N={};R(N,{FS_PRELUDE:()=>b,FULLSCREEN_VS:()=>A,dataTexture:()=>X,getGL:()=>D,pass:()=>B,program:()=>d,swapTargets:()=>I,target:()=>v,texture:()=>M,updateTexture:()=>L});function D(e,t={}){let o=e.getContext("webgl2",{alpha:!1,antialias:!1,depth:!1,stencil:!1,premultipliedAlpha:!0,powerPreference:"high-performance",preserveDrawingBuffer:!1,...t});if(!o)throw new Error("WebGL2 unavailable");return e.__lpgl=o,o}var A=`#version 300 es
|
|
62
|
+
in vec2 aPos;
|
|
63
|
+
out vec2 vUv;
|
|
64
|
+
void main(){ vUv = aPos * 0.5 + 0.5; gl_Position = vec4(aPos, 0.0, 1.0); }`,b=`#version 300 es
|
|
65
|
+
precision highp float;
|
|
66
|
+
precision highp int;
|
|
67
|
+
in vec2 vUv;
|
|
68
|
+
out vec4 fragColor;
|
|
69
|
+
uniform vec2 uRes;
|
|
70
|
+
uniform float uTime;
|
|
71
|
+
uniform vec2 uMouse;
|
|
72
|
+
`;function _(e,t,o){let r=e.createShader(t);if(e.shaderSource(r,o),e.compileShader(r),!e.getShaderParameter(r,e.COMPILE_STATUS)){let a=e.getShaderInfoLog(r)??"",c=o.split(`
|
|
73
|
+
`),s=a.match(/ERROR: \d+:(\d+)/),f=s?+s[1]:0,x=f?c.slice(Math.max(0,f-3),f+2).map((E,p)=>`${f-2+p}: ${E}`).join(`
|
|
74
|
+
`):"";throw e.deleteShader(r),new Error(`[lostpage] shader compile failed: ${a}
|
|
75
|
+
${x}`)}return r}function d(e,t,o){let r=e.createProgram();if(e.attachShader(r,_(e,e.VERTEX_SHADER,t)),e.attachShader(r,_(e,e.FRAGMENT_SHADER,o)),e.bindAttribLocation(r,0,"aPos"),e.linkProgram(r),!e.getProgramParameter(r,e.LINK_STATUS))throw new Error(`[lostpage] link failed: ${e.getProgramInfoLog(r)}`);return r}var h=new WeakMap;function w(e){let t=h.get(e);if(t)return t;t=e.createVertexArray(),e.bindVertexArray(t);let o=e.createBuffer();return e.bindBuffer(e.ARRAY_BUFFER,o),e.bufferData(e.ARRAY_BUFFER,new Float32Array([-1,-1,3,-1,-1,3]),e.STATIC_DRAW),e.enableVertexAttribArray(0),e.vertexAttribPointer(0,2,e.FLOAT,!1,0,0),e.bindVertexArray(null),h.set(e,t),t}function v(e,t,o,r={}){r.float&&e.getExtension("EXT_color_buffer_float"),r.float&&e.getExtension("OES_texture_float_linear");let a=e.createTexture(),c=e.createFramebuffer(),s=r.filter==="nearest"?e.NEAREST:e.LINEAR,f=r.wrap==="repeat"?e.REPEAT:e.CLAMP_TO_EDGE,x=r.channels??4,E=r.half??!0,p=x===1?e.RED:x===2?e.RG:e.RGBA,n=r.float?E?x===1?e.R16F:x===2?e.RG16F:e.RGBA16F:x===1?e.R32F:x===2?e.RG32F:e.RGBA32F:x===1?e.R8:x===2?e.RG8:e.RGBA8,i=r.float?E?e.HALF_FLOAT:e.FLOAT:e.UNSIGNED_BYTE,u={fbo:c,tex:a,width:0,height:0,resize(T,m){T=Math.max(1,Math.round(T)),m=Math.max(1,Math.round(m)),!(T===u.width&&m===u.height)&&(u.width=T,u.height=m,e.bindTexture(e.TEXTURE_2D,a),e.texImage2D(e.TEXTURE_2D,0,n,T,m,0,p,i,null),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,s),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,s),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,f),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,f),e.bindFramebuffer(e.FRAMEBUFFER,c),e.framebufferTexture2D(e.FRAMEBUFFER,e.COLOR_ATTACHMENT0,e.TEXTURE_2D,a,0),e.viewport(0,0,T,m),e.clearColor(0,0,0,0),e.clear(e.COLOR_BUFFER_BIT),e.bindFramebuffer(e.FRAMEBUFFER,null))}};return u.resize(t,o),u}function I(e,t,o,r={}){let a={read:v(e,t,o,r),write:v(e,t,o,r),swap(){let c=a.read;a.read=a.write,a.write=c},resize(c,s){a.read.resize(c,s),a.write.resize(c,s)}};return a}function M(e,t,o={}){let r=e.createTexture();return L(e,r,t,o),r}function L(e,t,o,r={}){e.bindTexture(e.TEXTURE_2D,t),e.pixelStorei(e.UNPACK_FLIP_Y_WEBGL,r.flipY??!0),e.pixelStorei(e.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!1),o?e.texImage2D(e.TEXTURE_2D,0,e.RGBA,e.RGBA,e.UNSIGNED_BYTE,o):e.texImage2D(e.TEXTURE_2D,0,e.RGBA,1,1,0,e.RGBA,e.UNSIGNED_BYTE,new Uint8Array([0,0,0,255]));let a=r.filter??"linear";e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,a==="nearest"?e.NEAREST:a==="mipmap"?e.LINEAR_MIPMAP_LINEAR:e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,a==="nearest"?e.NEAREST:e.LINEAR);let c=r.wrap==="repeat"?e.REPEAT:e.CLAMP_TO_EDGE;e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,c),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,c),a==="mipmap"&&o&&e.generateMipmap(e.TEXTURE_2D),e.pixelStorei(e.UNPACK_FLIP_Y_WEBGL,!1)}function X(e,t,o,r,a=1,c="linear"){let s=e.createTexture();e.bindTexture(e.TEXTURE_2D,s),e.pixelStorei(e.UNPACK_ALIGNMENT,1),a===1?e.texImage2D(e.TEXTURE_2D,0,e.R16F,o,r,0,e.RED,e.FLOAT,t):e.texImage2D(e.TEXTURE_2D,0,e.RGBA16F,o,r,0,e.RGBA,e.FLOAT,t);let f=c==="linear"?e.LINEAR:e.NEAREST;return e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,f),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,f),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.CLAMP_TO_EDGE),s}function B(e,t,o=A){let r=t.trimStart().startsWith("#version")?t:b+t,a=d(e,o,r),c=w(e),s=new Map,f=e.getProgramParameter(a,e.ACTIVE_UNIFORMS),x=0;for(let p=0;p<f;p++){let n=e.getActiveUniform(a,p),i=n.name.replace(/\[0\]$/,""),u=e.getUniformLocation(a,n.name),T=n.type===e.SAMPLER_2D||n.type===e.SAMPLER_3D||n.type===e.SAMPLER_CUBE;s.set(i,{loc:u,type:n.type,unit:T?x++:-1})}function E(p,n){let i=s.get(p);if(!(!i||n===null||n===void 0))switch(i.type){case e.FLOAT:return e.uniform1f(i.loc,Number(n));case e.INT:case e.BOOL:return e.uniform1i(i.loc,Number(n));case e.FLOAT_VEC2:return e.uniform2fv(i.loc,n);case e.FLOAT_VEC3:return e.uniform3fv(i.loc,n);case e.FLOAT_VEC4:return e.uniform4fv(i.loc,n);case e.FLOAT_MAT3:return e.uniformMatrix3fv(i.loc,!1,n);case e.FLOAT_MAT4:return e.uniformMatrix4fv(i.loc,!1,n);case e.SAMPLER_2D:{e.activeTexture(e.TEXTURE0+i.unit);let u=n.tex??n;return e.bindTexture(e.TEXTURE_2D,u),e.uniform1i(i.loc,i.unit)}}}return{program:a,draw(p={},n=null){e.useProgram(a);for(let i in p)E(i,p[i]);n?(e.bindFramebuffer(e.FRAMEBUFFER,n.fbo),e.viewport(0,0,n.width,n.height),E("uRes",[n.width,n.height])):(e.bindFramebuffer(e.FRAMEBUFFER,null),e.viewport(0,0,e.drawingBufferWidth,e.drawingBufferHeight),"uRes"in p||E("uRes",[e.drawingBufferWidth,e.drawingBufferHeight])),e.bindVertexArray(c),e.drawArrays(e.TRIANGLES,0,3),e.bindVertexArray(null)}}}export{U as a,F as b,y as c,S as d,D as e,v as f,I as g,M as h,L as i,X as j,B as k,N as l};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var i=Object.defineProperty;var p=(e,t,o)=>t in e?i(e,t,{enumerable:!0,configurable:!0,writable:!0,value:o}):e[t]=o;var u=(e,t)=>{for(var o in t)i(e,o,{get:t[o],enumerable:!0})};var y=(e,t,o)=>p(e,typeof t!="symbol"?t+"":t,o);function P(e){return e}var f={code:"404",eyebrow:"Error 404",title:"Page not found",message:"The page you were looking for doesn't exist or has moved.",actions:[{label:"Back to home",href:"/",variant:"primary",icon:"back"}]},m=["code","eyebrow","title","message","actions"];function l(e,t={}){let o=t.preset&&e.presets?.[t.preset]?t.preset:"default",n=o==="default"?void 0:e.presets[o],r={...f};for(let a of[e.copy,n,t])if(a)for(let c of m){let s=a[c];s!=null&&(r[c]=s)}return{preset:o,params:{...e.params,...n?.params??{},...t.params??{}},copy:r,theme:{...e.theme??{},...n?.theme??{},...t.theme??{}}}}function h(e){return["default",...Object.keys(e.presets??{})]}export{u as a,y as b,P as c,f as d,l as e,h as f};
|