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.
Files changed (411) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +390 -2
  3. package/dist/catalog.d.ts +2 -0
  4. package/dist/catalog.js +1 -0
  5. package/dist/catalog.json +11438 -0
  6. package/dist/cdn/c/ascii-3d-LO5K5SPJ.js +3 -0
  7. package/dist/cdn/c/astronaut-LH5N45GT.js +2 -0
  8. package/dist/cdn/c/aurora-XF7DCQ7M.js +129 -0
  9. package/dist/cdn/c/autumn-V5GRVYCX.js +1 -0
  10. package/dist/cdn/c/balloon-404-KV6ISJWV.js +1 -0
  11. package/dist/cdn/c/beach-OGS53KAQ.js +95 -0
  12. package/dist/cdn/c/black-hole-635WWF67.js +124 -0
  13. package/dist/cdn/c/block-drop-QU7NYBNQ.js +1 -0
  14. package/dist/cdn/c/blue-screen-GKLGT7XD.js +70 -0
  15. package/dist/cdn/c/breakout-EGDE3QDC.js +1 -0
  16. package/dist/cdn/c/bricks-C6XPPQ64.js +1 -0
  17. package/dist/cdn/c/broken-link-U47D6LR2.js +11 -0
  18. package/dist/cdn/c/brutalist-QFXIHFAD.js +15 -0
  19. package/dist/cdn/c/bubble-wrap-45ZWIQMW.js +1 -0
  20. package/dist/cdn/c/campfire-TFG4DUUS.js +88 -0
  21. package/dist/cdn/c/card-GH5VVMRG.js +15 -0
  22. package/dist/cdn/c/cassette-33OUQ4CF.js +15 -0
  23. package/dist/cdn/c/chalkboard-NAPUHNER.js +3 -0
  24. package/dist/cdn/c/chrome-404-QVPFIQEF.js +1 -0
  25. package/dist/cdn/c/chunk-4ZBXB36L.js +1 -0
  26. package/dist/cdn/c/chunk-A44JMJWI.js +1 -0
  27. package/dist/cdn/c/chunk-HXSSPN2I.js +1 -0
  28. package/dist/cdn/c/chunk-IETNWEVK.js +1 -0
  29. package/dist/cdn/c/chunk-JLRXT2AZ.js +4 -0
  30. package/dist/cdn/c/chunk-LMRCHEWX.js +1 -0
  31. package/dist/cdn/c/chunk-NUQBEDA4.js +296 -0
  32. package/dist/cdn/c/chunk-QHXVYCR6.js +1 -0
  33. package/dist/cdn/c/chunk-QJZBGT2Q.js +75 -0
  34. package/dist/cdn/c/chunk-URWX3LLV.js +1 -0
  35. package/dist/cdn/c/chunk-YNREKTFR.js +70 -0
  36. package/dist/cdn/c/circuit-board-V6VT4OTX.js +1 -0
  37. package/dist/cdn/c/claw-machine-LLCPLZ6W.js +1 -0
  38. package/dist/cdn/c/clay-404-SMDVAQCV.js +1 -0
  39. package/dist/cdn/c/constellation-J5QMY7IB.js +1 -0
  40. package/dist/cdn/c/countdown-2TEFVO73.js +14 -0
  41. package/dist/cdn/c/cross-stitch-N5H5GLAG.js +2 -0
  42. package/dist/cdn/c/deep-sea-ILDVMW5M.js +85 -0
  43. package/dist/cdn/c/divider-PMT4UZEF.js +9 -0
  44. package/dist/cdn/c/dna-CAAKBMRK.js +2 -0
  45. package/dist/cdn/c/dominoes-VLA5MBXM.js +1 -0
  46. package/dist/cdn/c/dot-grid-O7LJO44U.js +11 -0
  47. package/dist/cdn/c/editorial-4C5Z33WO.js +11 -0
  48. package/dist/cdn/c/elevator-EFNB6FVO.js +36 -0
  49. package/dist/cdn/c/emoji-EHAJDQSM.js +8 -0
  50. package/dist/cdn/c/error-cascade-CIJCQLP3.js +18 -0
  51. package/dist/cdn/c/evidence-board-Z7DXMGNE.js +18 -0
  52. package/dist/cdn/c/eyes-VPOHW2CX.js +2 -0
  53. package/dist/cdn/c/fireworks-QLWJ3S43.js +1 -0
  54. package/dist/cdn/c/flashlight-QXI7QT74.js +57 -0
  55. package/dist/cdn/c/flatline-3GBK7IVS.js +1 -0
  56. package/dist/cdn/c/flock-RLSZ7EZQ.js +1 -0
  57. package/dist/cdn/c/foggy-glass-A56REA7E.js +1 -0
  58. package/dist/cdn/c/gears-4HJO7H74.js +5 -0
  59. package/dist/cdn/c/glass-404-WZRMDFTP.js +1 -0
  60. package/dist/cdn/c/glitch-Y4CIADF3.js +60 -0
  61. package/dist/cdn/c/gradient-404-YNSTOPNA.js +6 -0
  62. package/dist/cdn/c/halftone-XZ7F75B4.js +43 -0
  63. package/dist/cdn/c/hanging-letters-Y3VH7EVP.js +1 -0
  64. package/dist/cdn/c/hanging-sign-2KUXPLZE.js +1 -0
  65. package/dist/cdn/c/helpful-links-UFGTWTRQ.js +18 -0
  66. package/dist/cdn/c/hyperspace-R34QNI7J.js +57 -0
  67. package/dist/cdn/c/hypnosis-MK6AV3SC.js +26 -0
  68. package/dist/cdn/c/ink-S332BOPS.js +43 -0
  69. package/dist/cdn/c/invaders-ZSY3Z443.js +1 -0
  70. package/dist/cdn/c/kaleidoscope-BLGSIK4F.js +34 -0
  71. package/dist/cdn/c/lava-lamp-VYY5XFG5.js +55 -0
  72. package/dist/cdn/c/life-QBWZL5FY.js +1 -0
  73. package/dist/cdn/c/lighthouse-QX7QIIPX.js +60 -0
  74. package/dist/cdn/c/loading-LIS67QF7.js +34 -0
  75. package/dist/cdn/c/lost-at-sea-QNURIHBY.js +258 -0
  76. package/dist/cdn/c/magic-8-ball-W3TRJALZ.js +2 -0
  77. package/dist/cdn/c/matrix-rain-4V4SVGGG.js +3 -0
  78. package/dist/cdn/c/maze-QL5TRCE5.js +1 -0
  79. package/dist/cdn/c/mesh-gradient-UISGI62K.js +34 -0
  80. package/dist/cdn/c/metro-map-H64EHOZM.js +30 -0
  81. package/dist/cdn/c/milk-carton-3SDLA5AY.js +53 -0
  82. package/dist/cdn/c/minimal-SB6FU3DE.js +9 -0
  83. package/dist/cdn/c/mirage-IQ3IA3VB.js +70 -0
  84. package/dist/cdn/c/moon-landing-TKZE4Q6G.js +1 -0
  85. package/dist/cdn/c/neon-sign-XGMN75MH.js +1 -0
  86. package/dist/cdn/c/newspaper-YECAUY77.js +49 -0
  87. package/dist/cdn/c/nixie-CQBRCVDE.js +1 -0
  88. package/dist/cdn/c/no-signal-HL4A4CFZ.js +82 -0
  89. package/dist/cdn/c/one-bit-AFIZQPHK.js +49 -0
  90. package/dist/cdn/c/outline-404-REB5E5EN.js +9 -0
  91. package/dist/cdn/c/paint-splash-GZGPOURW.js +1 -0
  92. package/dist/cdn/c/paper-plane-KDCSE3RM.js +2 -0
  93. package/dist/cdn/c/particles-7UMRMT2M.js +1 -0
  94. package/dist/cdn/c/path-not-found-VUEXOVO7.js +14 -0
  95. package/dist/cdn/c/planet-H6QGPDVC.js +157 -0
  96. package/dist/cdn/c/pond-6DL43VUQ.js +106 -0
  97. package/dist/cdn/c/pong-B2ZGAY7T.js +1 -0
  98. package/dist/cdn/c/radar-22JCPGQZ.js +4 -0
  99. package/dist/cdn/c/rainy-window-DTGLJVAR.js +114 -0
  100. package/dist/cdn/c/receipt-ZOYUSMN3.js +32 -0
  101. package/dist/cdn/c/road-closed-3OS55UBX.js +1 -0
  102. package/dist/cdn/c/rpg-dialog-FV53YYNJ.js +14 -0
  103. package/dist/cdn/c/runner-NANXJTQG.js +1 -0
  104. package/dist/cdn/c/scratch-card-GC6U4ZZN.js +1 -0
  105. package/dist/cdn/c/screensaver-UXKJVQUU.js +1 -0
  106. package/dist/cdn/c/search-404-HFKZ4DUA.js +17 -0
  107. package/dist/cdn/c/server-default-RBMMRAHS.js +10 -0
  108. package/dist/cdn/c/server-room-QSKAUFUY.js +1 -0
  109. package/dist/cdn/c/skyline-OMZMF5R6.js +1 -0
  110. package/dist/cdn/c/skywriting-RYNQWJ6I.js +1 -0
  111. package/dist/cdn/c/slot-machine-XXCVI2HK.js +33 -0
  112. package/dist/cdn/c/snake-6Z5V3QA3.js +1 -0
  113. package/dist/cdn/c/snow-globe-RLDPNA2J.js +2 -0
  114. package/dist/cdn/c/soft-blobs-FYEFGINV.js +15 -0
  115. package/dist/cdn/c/solar-system-CQAP6WFU.js +2 -0
  116. package/dist/cdn/c/split-flap-O7JGD5Q4.js +37 -0
  117. package/dist/cdn/c/split-panel-QGXZ24E4.js +12 -0
  118. package/dist/cdn/c/stage-GBZR3JQS.js +2 -0
  119. package/dist/cdn/c/swiss-poster-OON4HBUG.js +20 -0
  120. package/dist/cdn/c/terminal-7BTUDZDB.js +41 -0
  121. package/dist/cdn/c/thunderstorm-FRCKHKXY.js +1 -0
  122. package/dist/cdn/c/topographic-3RIQXKIQ.js +38 -0
  123. package/dist/cdn/c/torn-page-6UT5ZQHG.js +16 -0
  124. package/dist/cdn/c/treasure-map-FALAEBL5.js +3 -0
  125. package/dist/cdn/c/typewriter-7TIO42MH.js +23 -0
  126. package/dist/cdn/c/ufo-6UW34TI3.js +1 -0
  127. package/dist/cdn/c/unplugged-QXKDDH4S.js +1 -0
  128. package/dist/cdn/c/vending-machine-SH3MNFMY.js +27 -0
  129. package/dist/cdn/c/vinyl-3FUP3LSO.js +2 -0
  130. package/dist/cdn/c/voxel-404-LMC43X4B.js +102 -0
  131. package/dist/cdn/c/wormhole-I2RWIMRW.js +113 -0
  132. package/dist/cdn/c/zen-garden-HMAMASJK.js +1 -0
  133. package/dist/cdn/element.js +1 -0
  134. package/dist/cdn/index.js +1 -0
  135. package/dist/chunks/chunk-3ISI6SOJ.js +1 -0
  136. package/dist/chunks/chunk-6HZC24J2.js +296 -0
  137. package/dist/chunks/chunk-7XMDQMDO.js +1 -0
  138. package/dist/chunks/chunk-B2NBRLO2.js +1 -0
  139. package/dist/chunks/chunk-B4TY5M55.js +1 -0
  140. package/dist/chunks/chunk-DAZOIOF7.js +1 -0
  141. package/dist/chunks/chunk-ES56TX4X.js +1 -0
  142. package/dist/chunks/chunk-FVGCB66F.js +1 -0
  143. package/dist/chunks/chunk-KIYSQVWX.js +1 -0
  144. package/dist/chunks/chunk-MNUNTC4L.js +4 -0
  145. package/dist/chunks/chunk-SH72TE6I.js +75 -0
  146. package/dist/chunks/chunk-URB3NNOB.js +70 -0
  147. package/dist/cli.js +97 -0
  148. package/dist/core/canvas2d.d.ts +18 -0
  149. package/dist/core/define.d.ts +16 -0
  150. package/dist/core/gl.d.ts +50 -0
  151. package/dist/core/glsl.d.ts +10 -0
  152. package/dist/core/overlay.d.ts +5 -0
  153. package/dist/core/runtime.d.ts +8 -0
  154. package/dist/core/shader.d.ts +22 -0
  155. package/dist/core/styles.d.ts +4 -0
  156. package/dist/core/text.d.ts +54 -0
  157. package/dist/core/types.d.ts +170 -0
  158. package/dist/core/util.d.ts +16 -0
  159. package/dist/core.d.ts +8 -0
  160. package/dist/core.js +1 -0
  161. package/dist/element.cdn.js +1 -0
  162. package/dist/element.d.ts +21 -0
  163. package/dist/element.js +1 -0
  164. package/dist/engines/arcade.d.ts +25 -0
  165. package/dist/engines/text3d.d.ts +37 -0
  166. package/dist/generated/all.d.ts +2 -0
  167. package/dist/generated/catalog.d.ts +2 -0
  168. package/dist/generated/registry.d.ts +5 -0
  169. package/dist/index.d.ts +23 -0
  170. package/dist/index.js +1 -0
  171. package/dist/lostpage.global.js +3222 -0
  172. package/dist/react.d.ts +21 -0
  173. package/dist/react.js +2 -0
  174. package/dist/scenes/_simple.d.ts +10 -0
  175. package/dist/scenes/ascii-3d.d.ts +10 -0
  176. package/dist/scenes/ascii-3d.js +3 -0
  177. package/dist/scenes/astronaut.d.ts +10 -0
  178. package/dist/scenes/astronaut.js +2 -0
  179. package/dist/scenes/aurora.d.ts +14 -0
  180. package/dist/scenes/aurora.js +129 -0
  181. package/dist/scenes/autumn.d.ts +8 -0
  182. package/dist/scenes/autumn.js +1 -0
  183. package/dist/scenes/balloon-404.d.ts +9 -0
  184. package/dist/scenes/balloon-404.js +1 -0
  185. package/dist/scenes/beach.d.ts +14 -0
  186. package/dist/scenes/beach.js +95 -0
  187. package/dist/scenes/black-hole.d.ts +15 -0
  188. package/dist/scenes/black-hole.js +124 -0
  189. package/dist/scenes/block-drop.d.ts +9 -0
  190. package/dist/scenes/block-drop.js +1 -0
  191. package/dist/scenes/blue-screen.d.ts +5 -0
  192. package/dist/scenes/blue-screen.js +70 -0
  193. package/dist/scenes/breakout.d.ts +10 -0
  194. package/dist/scenes/breakout.js +1 -0
  195. package/dist/scenes/bricks.d.ts +7 -0
  196. package/dist/scenes/bricks.js +1 -0
  197. package/dist/scenes/broken-link.d.ts +8 -0
  198. package/dist/scenes/broken-link.js +11 -0
  199. package/dist/scenes/brutalist.d.ts +7 -0
  200. package/dist/scenes/brutalist.js +15 -0
  201. package/dist/scenes/bubble-wrap.d.ts +9 -0
  202. package/dist/scenes/bubble-wrap.js +1 -0
  203. package/dist/scenes/campfire.d.ts +11 -0
  204. package/dist/scenes/campfire.js +88 -0
  205. package/dist/scenes/card.d.ts +8 -0
  206. package/dist/scenes/card.js +15 -0
  207. package/dist/scenes/cassette.d.ts +9 -0
  208. package/dist/scenes/cassette.js +15 -0
  209. package/dist/scenes/chalkboard.d.ts +8 -0
  210. package/dist/scenes/chalkboard.js +3 -0
  211. package/dist/scenes/chrome-404.d.ts +13 -0
  212. package/dist/scenes/chrome-404.js +1 -0
  213. package/dist/scenes/circuit-board.d.ts +9 -0
  214. package/dist/scenes/circuit-board.js +1 -0
  215. package/dist/scenes/claw-machine.d.ts +8 -0
  216. package/dist/scenes/claw-machine.js +1 -0
  217. package/dist/scenes/clay-404.d.ts +11 -0
  218. package/dist/scenes/clay-404.js +1 -0
  219. package/dist/scenes/constellation.d.ts +10 -0
  220. package/dist/scenes/constellation.js +1 -0
  221. package/dist/scenes/countdown.d.ts +9 -0
  222. package/dist/scenes/countdown.js +14 -0
  223. package/dist/scenes/cross-stitch.d.ts +8 -0
  224. package/dist/scenes/cross-stitch.js +2 -0
  225. package/dist/scenes/deep-sea.d.ts +9 -0
  226. package/dist/scenes/deep-sea.js +85 -0
  227. package/dist/scenes/divider.d.ts +6 -0
  228. package/dist/scenes/divider.js +9 -0
  229. package/dist/scenes/dna.d.ts +9 -0
  230. package/dist/scenes/dna.js +2 -0
  231. package/dist/scenes/dominoes.d.ts +9 -0
  232. package/dist/scenes/dominoes.js +1 -0
  233. package/dist/scenes/dot-grid.d.ts +9 -0
  234. package/dist/scenes/dot-grid.js +11 -0
  235. package/dist/scenes/editorial.d.ts +6 -0
  236. package/dist/scenes/editorial.js +11 -0
  237. package/dist/scenes/elevator.d.ts +10 -0
  238. package/dist/scenes/elevator.js +36 -0
  239. package/dist/scenes/emoji.d.ts +7 -0
  240. package/dist/scenes/emoji.js +8 -0
  241. package/dist/scenes/error-cascade.d.ts +6 -0
  242. package/dist/scenes/error-cascade.js +18 -0
  243. package/dist/scenes/evidence-board.d.ts +7 -0
  244. package/dist/scenes/evidence-board.js +18 -0
  245. package/dist/scenes/eyes.d.ts +12 -0
  246. package/dist/scenes/eyes.js +2 -0
  247. package/dist/scenes/fireworks.d.ts +8 -0
  248. package/dist/scenes/fireworks.js +1 -0
  249. package/dist/scenes/flashlight.d.ts +12 -0
  250. package/dist/scenes/flashlight.js +57 -0
  251. package/dist/scenes/flatline.d.ts +9 -0
  252. package/dist/scenes/flatline.js +1 -0
  253. package/dist/scenes/flock.d.ts +13 -0
  254. package/dist/scenes/flock.js +1 -0
  255. package/dist/scenes/foggy-glass.d.ts +9 -0
  256. package/dist/scenes/foggy-glass.js +1 -0
  257. package/dist/scenes/gears.d.ts +10 -0
  258. package/dist/scenes/gears.js +5 -0
  259. package/dist/scenes/glass-404.d.ts +11 -0
  260. package/dist/scenes/glass-404.js +1 -0
  261. package/dist/scenes/glitch.d.ts +15 -0
  262. package/dist/scenes/glitch.js +60 -0
  263. package/dist/scenes/gradient-404.d.ts +9 -0
  264. package/dist/scenes/gradient-404.js +6 -0
  265. package/dist/scenes/halftone.d.ts +11 -0
  266. package/dist/scenes/halftone.js +43 -0
  267. package/dist/scenes/hanging-letters.d.ts +10 -0
  268. package/dist/scenes/hanging-letters.js +1 -0
  269. package/dist/scenes/hanging-sign.d.ts +9 -0
  270. package/dist/scenes/hanging-sign.js +1 -0
  271. package/dist/scenes/helpful-links.d.ts +6 -0
  272. package/dist/scenes/helpful-links.js +18 -0
  273. package/dist/scenes/hyperspace.d.ts +11 -0
  274. package/dist/scenes/hyperspace.js +57 -0
  275. package/dist/scenes/hypnosis.d.ts +10 -0
  276. package/dist/scenes/hypnosis.js +26 -0
  277. package/dist/scenes/ink.d.ts +10 -0
  278. package/dist/scenes/ink.js +43 -0
  279. package/dist/scenes/invaders.d.ts +10 -0
  280. package/dist/scenes/invaders.js +1 -0
  281. package/dist/scenes/kaleidoscope.d.ts +10 -0
  282. package/dist/scenes/kaleidoscope.js +34 -0
  283. package/dist/scenes/lava-lamp.d.ts +11 -0
  284. package/dist/scenes/lava-lamp.js +55 -0
  285. package/dist/scenes/life.d.ts +13 -0
  286. package/dist/scenes/life.js +1 -0
  287. package/dist/scenes/lighthouse.d.ts +11 -0
  288. package/dist/scenes/lighthouse.js +60 -0
  289. package/dist/scenes/loading.d.ts +6 -0
  290. package/dist/scenes/loading.js +34 -0
  291. package/dist/scenes/lost-at-sea.d.ts +35 -0
  292. package/dist/scenes/lost-at-sea.js +258 -0
  293. package/dist/scenes/magic-8-ball.d.ts +10 -0
  294. package/dist/scenes/magic-8-ball.js +2 -0
  295. package/dist/scenes/matrix-rain.d.ts +13 -0
  296. package/dist/scenes/matrix-rain.js +3 -0
  297. package/dist/scenes/maze.d.ts +9 -0
  298. package/dist/scenes/maze.js +1 -0
  299. package/dist/scenes/mesh-gradient.d.ts +13 -0
  300. package/dist/scenes/mesh-gradient.js +34 -0
  301. package/dist/scenes/metro-map.d.ts +8 -0
  302. package/dist/scenes/metro-map.js +30 -0
  303. package/dist/scenes/milk-carton.d.ts +9 -0
  304. package/dist/scenes/milk-carton.js +53 -0
  305. package/dist/scenes/minimal.d.ts +6 -0
  306. package/dist/scenes/minimal.js +9 -0
  307. package/dist/scenes/mirage.d.ts +10 -0
  308. package/dist/scenes/mirage.js +70 -0
  309. package/dist/scenes/moon-landing.d.ts +8 -0
  310. package/dist/scenes/moon-landing.js +1 -0
  311. package/dist/scenes/neon-sign.d.ts +15 -0
  312. package/dist/scenes/neon-sign.js +1 -0
  313. package/dist/scenes/newspaper.d.ts +10 -0
  314. package/dist/scenes/newspaper.js +49 -0
  315. package/dist/scenes/nixie.d.ts +11 -0
  316. package/dist/scenes/nixie.js +1 -0
  317. package/dist/scenes/no-signal.d.ts +11 -0
  318. package/dist/scenes/no-signal.js +82 -0
  319. package/dist/scenes/one-bit.d.ts +8 -0
  320. package/dist/scenes/one-bit.js +49 -0
  321. package/dist/scenes/outline-404.d.ts +8 -0
  322. package/dist/scenes/outline-404.js +9 -0
  323. package/dist/scenes/paint-splash.d.ts +6 -0
  324. package/dist/scenes/paint-splash.js +1 -0
  325. package/dist/scenes/paper-plane.d.ts +9 -0
  326. package/dist/scenes/paper-plane.js +2 -0
  327. package/dist/scenes/particles.d.ts +22 -0
  328. package/dist/scenes/particles.js +1 -0
  329. package/dist/scenes/path-not-found.d.ts +6 -0
  330. package/dist/scenes/path-not-found.js +14 -0
  331. package/dist/scenes/planet.d.ts +19 -0
  332. package/dist/scenes/planet.js +157 -0
  333. package/dist/scenes/pond.d.ts +11 -0
  334. package/dist/scenes/pond.js +106 -0
  335. package/dist/scenes/pong.d.ts +8 -0
  336. package/dist/scenes/pong.js +1 -0
  337. package/dist/scenes/radar.d.ts +9 -0
  338. package/dist/scenes/radar.js +4 -0
  339. package/dist/scenes/rainy-window.d.ts +11 -0
  340. package/dist/scenes/rainy-window.js +114 -0
  341. package/dist/scenes/receipt.d.ts +8 -0
  342. package/dist/scenes/receipt.js +32 -0
  343. package/dist/scenes/road-closed.d.ts +9 -0
  344. package/dist/scenes/road-closed.js +1 -0
  345. package/dist/scenes/rpg-dialog.d.ts +11 -0
  346. package/dist/scenes/rpg-dialog.js +14 -0
  347. package/dist/scenes/runner.d.ts +10 -0
  348. package/dist/scenes/runner.js +1 -0
  349. package/dist/scenes/scratch-card.d.ts +9 -0
  350. package/dist/scenes/scratch-card.js +1 -0
  351. package/dist/scenes/screensaver.d.ts +8 -0
  352. package/dist/scenes/screensaver.js +1 -0
  353. package/dist/scenes/search-404.d.ts +9 -0
  354. package/dist/scenes/search-404.js +17 -0
  355. package/dist/scenes/server-default.d.ts +6 -0
  356. package/dist/scenes/server-default.js +10 -0
  357. package/dist/scenes/server-room.d.ts +9 -0
  358. package/dist/scenes/server-room.js +1 -0
  359. package/dist/scenes/skyline.d.ts +10 -0
  360. package/dist/scenes/skyline.js +1 -0
  361. package/dist/scenes/skywriting.d.ts +8 -0
  362. package/dist/scenes/skywriting.js +1 -0
  363. package/dist/scenes/slot-machine.d.ts +10 -0
  364. package/dist/scenes/slot-machine.js +33 -0
  365. package/dist/scenes/snake.d.ts +13 -0
  366. package/dist/scenes/snake.js +1 -0
  367. package/dist/scenes/snow-globe.d.ts +10 -0
  368. package/dist/scenes/snow-globe.js +2 -0
  369. package/dist/scenes/soft-blobs.d.ts +9 -0
  370. package/dist/scenes/soft-blobs.js +15 -0
  371. package/dist/scenes/solar-system.d.ts +9 -0
  372. package/dist/scenes/solar-system.js +2 -0
  373. package/dist/scenes/split-flap.d.ts +15 -0
  374. package/dist/scenes/split-flap.js +37 -0
  375. package/dist/scenes/split-panel.d.ts +8 -0
  376. package/dist/scenes/split-panel.js +12 -0
  377. package/dist/scenes/stage.d.ts +10 -0
  378. package/dist/scenes/stage.js +2 -0
  379. package/dist/scenes/swiss-poster.d.ts +9 -0
  380. package/dist/scenes/swiss-poster.js +20 -0
  381. package/dist/scenes/terminal.d.ts +13 -0
  382. package/dist/scenes/terminal.js +41 -0
  383. package/dist/scenes/thunderstorm.d.ts +11 -0
  384. package/dist/scenes/thunderstorm.js +1 -0
  385. package/dist/scenes/topographic.d.ts +13 -0
  386. package/dist/scenes/topographic.js +38 -0
  387. package/dist/scenes/torn-page.d.ts +9 -0
  388. package/dist/scenes/torn-page.js +16 -0
  389. package/dist/scenes/treasure-map.d.ts +10 -0
  390. package/dist/scenes/treasure-map.js +3 -0
  391. package/dist/scenes/typewriter.d.ts +10 -0
  392. package/dist/scenes/typewriter.js +23 -0
  393. package/dist/scenes/ufo.d.ts +11 -0
  394. package/dist/scenes/ufo.js +1 -0
  395. package/dist/scenes/unplugged.d.ts +9 -0
  396. package/dist/scenes/unplugged.js +1 -0
  397. package/dist/scenes/vending-machine.d.ts +7 -0
  398. package/dist/scenes/vending-machine.js +27 -0
  399. package/dist/scenes/vinyl.d.ts +9 -0
  400. package/dist/scenes/vinyl.js +2 -0
  401. package/dist/scenes/voxel-404.d.ts +13 -0
  402. package/dist/scenes/voxel-404.js +102 -0
  403. package/dist/scenes/wormhole.d.ts +13 -0
  404. package/dist/scenes/wormhole.js +113 -0
  405. package/dist/scenes/zen-garden.d.ts +8 -0
  406. package/dist/scenes/zen-garden.js +1 -0
  407. package/dist/svelte.d.ts +17 -0
  408. package/dist/svelte.js +1 -0
  409. package/dist/vue.d.ts +66 -0
  410. package/dist/vue.js +1 -0
  411. 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=>({"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;"})[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,9 @@
1
+ interface Params {
2
+ deck: string;
3
+ record: string;
4
+ label: string;
5
+ labelInk: string;
6
+ bg: string;
7
+ }
8
+ declare const _default: import("..").SceneDef<Params>;
9
+ export default _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,8 @@
1
+ interface Params {
2
+ sand: string;
3
+ groove: string;
4
+ stone: string;
5
+ moss: string;
6
+ }
7
+ declare const _default: import("..").SceneDef<Params>;
8
+ export default _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};
@@ -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.0.0-stage",
4
- "stub": true,
5
- "description": "Temporary package placeholder for staged publishing"
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
+ }