@cavegiant/cave-world-r3f 1.0.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 (339) hide show
  1. package/CHANGELOG.md +25 -0
  2. package/LICENSE +21 -0
  3. package/README.md +189 -0
  4. package/dist/core/connector-label/readiness.d.ts +11 -0
  5. package/dist/core/connector-label/readiness.d.ts.map +1 -0
  6. package/dist/core/connector-label/readiness.js +31 -0
  7. package/dist/core/connector-label/readiness.js.map +1 -0
  8. package/dist/core/connector-label/types.d.ts +64 -0
  9. package/dist/core/connector-label/types.d.ts.map +1 -0
  10. package/dist/core/connector-label/types.js +47 -0
  11. package/dist/core/connector-label/types.js.map +1 -0
  12. package/dist/core/context/cave-world-context.d.ts +96 -0
  13. package/dist/core/context/cave-world-context.d.ts.map +1 -0
  14. package/dist/core/context/cave-world-context.js +100 -0
  15. package/dist/core/context/cave-world-context.js.map +1 -0
  16. package/dist/core/errors.d.ts +34 -0
  17. package/dist/core/errors.d.ts.map +1 -0
  18. package/dist/core/errors.js +17 -0
  19. package/dist/core/errors.js.map +1 -0
  20. package/dist/core/events/event-bus.d.ts +122 -0
  21. package/dist/core/events/event-bus.d.ts.map +1 -0
  22. package/dist/core/events/event-bus.js +62 -0
  23. package/dist/core/events/event-bus.js.map +1 -0
  24. package/dist/core/hooks/use-cave-event.d.ts +13 -0
  25. package/dist/core/hooks/use-cave-event.d.ts.map +1 -0
  26. package/dist/core/hooks/use-cave-event.js +12 -0
  27. package/dist/core/hooks/use-cave-event.js.map +1 -0
  28. package/dist/core/i18n/messages.d.ts +82 -0
  29. package/dist/core/i18n/messages.d.ts.map +1 -0
  30. package/dist/core/i18n/messages.js +131 -0
  31. package/dist/core/i18n/messages.js.map +1 -0
  32. package/dist/core/index.d.ts +11 -0
  33. package/dist/core/index.d.ts.map +1 -0
  34. package/dist/core/index.js +47 -0
  35. package/dist/core/index.js.map +1 -0
  36. package/dist/core/logging/logger.d.ts +29 -0
  37. package/dist/core/logging/logger.d.ts.map +1 -0
  38. package/dist/core/logging/logger.js +47 -0
  39. package/dist/core/logging/logger.js.map +1 -0
  40. package/dist/core/registry/component-registry.d.ts +41 -0
  41. package/dist/core/registry/component-registry.d.ts.map +1 -0
  42. package/dist/core/registry/component-registry.js +34 -0
  43. package/dist/core/registry/component-registry.js.map +1 -0
  44. package/dist/core/registry/object-registry.d.ts +38 -0
  45. package/dist/core/registry/object-registry.d.ts.map +1 -0
  46. package/dist/core/registry/object-registry.js +32 -0
  47. package/dist/core/registry/object-registry.js.map +1 -0
  48. package/dist/explore/cave-explore.d.ts +85 -0
  49. package/dist/explore/cave-explore.d.ts.map +1 -0
  50. package/dist/explore/cave-explore.js +204 -0
  51. package/dist/explore/cave-explore.js.map +1 -0
  52. package/dist/explore/cave-orbit-viewer.d.ts +76 -0
  53. package/dist/explore/cave-orbit-viewer.d.ts.map +1 -0
  54. package/dist/explore/cave-orbit-viewer.js +123 -0
  55. package/dist/explore/cave-orbit-viewer.js.map +1 -0
  56. package/dist/explore/characters/character-configs.d.ts +38 -0
  57. package/dist/explore/characters/character-configs.d.ts.map +1 -0
  58. package/dist/explore/characters/character-configs.js +45 -0
  59. package/dist/explore/characters/character-configs.js.map +1 -0
  60. package/dist/explore/characters/character-controls.d.ts +44 -0
  61. package/dist/explore/characters/character-controls.d.ts.map +1 -0
  62. package/dist/explore/characters/character-pose.d.ts +19 -0
  63. package/dist/explore/characters/character-pose.d.ts.map +1 -0
  64. package/dist/explore/characters/character-pose.js +13 -0
  65. package/dist/explore/characters/character-pose.js.map +1 -0
  66. package/dist/explore/characters/local-character-model.d.ts +53 -0
  67. package/dist/explore/characters/local-character-model.d.ts.map +1 -0
  68. package/dist/explore/characters/local-character-model.js +36 -0
  69. package/dist/explore/characters/local-character-model.js.map +1 -0
  70. package/dist/explore/characters/mixamo-style-bone-map.d.ts +9 -0
  71. package/dist/explore/characters/mixamo-style-bone-map.d.ts.map +1 -0
  72. package/dist/explore/characters/mixamo-style-bone-map.js +28 -0
  73. package/dist/explore/characters/mixamo-style-bone-map.js.map +1 -0
  74. package/dist/explore/characters/remote-character-controller.d.ts +38 -0
  75. package/dist/explore/characters/remote-character-controller.d.ts.map +1 -0
  76. package/dist/explore/characters/remote-character-controller.js +135 -0
  77. package/dist/explore/characters/remote-character-controller.js.map +1 -0
  78. package/dist/explore/characters/remote-character.d.ts +19 -0
  79. package/dist/explore/characters/remote-character.d.ts.map +1 -0
  80. package/dist/explore/characters/remote-character.js +63 -0
  81. package/dist/explore/characters/remote-character.js.map +1 -0
  82. package/dist/explore/connected-spaces-renderer.d.ts +16 -0
  83. package/dist/explore/connected-spaces-renderer.d.ts.map +1 -0
  84. package/dist/explore/connected-spaces-renderer.js +103 -0
  85. package/dist/explore/connected-spaces-renderer.js.map +1 -0
  86. package/dist/explore/hooks/use-action-shortcuts.d.ts +16 -0
  87. package/dist/explore/hooks/use-action-shortcuts.d.ts.map +1 -0
  88. package/dist/explore/hooks/use-action-shortcuts.js +23 -0
  89. package/dist/explore/hooks/use-action-shortcuts.js.map +1 -0
  90. package/dist/explore/hooks/use-active-space-notify.d.ts +11 -0
  91. package/dist/explore/hooks/use-active-space-notify.d.ts.map +1 -0
  92. package/dist/explore/hooks/use-active-space-notify.js +17 -0
  93. package/dist/explore/hooks/use-active-space-notify.js.map +1 -0
  94. package/dist/explore/hooks/use-character-sync.d.ts +46 -0
  95. package/dist/explore/hooks/use-character-sync.d.ts.map +1 -0
  96. package/dist/explore/hooks/use-character-sync.js +72 -0
  97. package/dist/explore/hooks/use-character-sync.js.map +1 -0
  98. package/dist/explore/hooks/use-connector-preloader.d.ts +20 -0
  99. package/dist/explore/hooks/use-connector-preloader.d.ts.map +1 -0
  100. package/dist/explore/hooks/use-connector-preloader.js +78 -0
  101. package/dist/explore/hooks/use-connector-preloader.js.map +1 -0
  102. package/dist/explore/hooks/use-connector-transitions.d.ts +31 -0
  103. package/dist/explore/hooks/use-connector-transitions.d.ts.map +1 -0
  104. package/dist/explore/hooks/use-connector-transitions.js +63 -0
  105. package/dist/explore/hooks/use-connector-transitions.js.map +1 -0
  106. package/dist/explore/hooks/use-explore-actions.d.ts +17 -0
  107. package/dist/explore/hooks/use-explore-actions.d.ts.map +1 -0
  108. package/dist/explore/hooks/use-explore-actions.js +134 -0
  109. package/dist/explore/hooks/use-explore-actions.js.map +1 -0
  110. package/dist/explore/hooks/use-load-error-notify.d.ts +11 -0
  111. package/dist/explore/hooks/use-load-error-notify.d.ts.map +1 -0
  112. package/dist/explore/hooks/use-load-error-notify.js +18 -0
  113. package/dist/explore/hooks/use-load-error-notify.js.map +1 -0
  114. package/dist/explore/hooks/use-primary-space-loader.d.ts +24 -0
  115. package/dist/explore/hooks/use-primary-space-loader.d.ts.map +1 -0
  116. package/dist/explore/hooks/use-primary-space-loader.js +29 -0
  117. package/dist/explore/hooks/use-primary-space-loader.js.map +1 -0
  118. package/dist/explore/index.d.ts +37 -0
  119. package/dist/explore/index.d.ts.map +1 -0
  120. package/dist/explore/index.js +107 -0
  121. package/dist/explore/index.js.map +1 -0
  122. package/dist/explore/loaders/cave-loader.d.ts +58 -0
  123. package/dist/explore/loaders/cave-loader.d.ts.map +1 -0
  124. package/dist/explore/loaders/cave-loader.js +79 -0
  125. package/dist/explore/loaders/cave-loader.js.map +1 -0
  126. package/dist/explore/math/space-transforms.d.ts +49 -0
  127. package/dist/explore/math/space-transforms.d.ts.map +1 -0
  128. package/dist/explore/math/space-transforms.js +54 -0
  129. package/dist/explore/math/space-transforms.js.map +1 -0
  130. package/dist/explore/overlays/action-bubble.d.ts +8 -0
  131. package/dist/explore/overlays/action-bubble.d.ts.map +1 -0
  132. package/dist/explore/overlays/action-bubble.js +18 -0
  133. package/dist/explore/overlays/action-bubble.js.map +1 -0
  134. package/dist/explore/overlays/action-panel.d.ts +12 -0
  135. package/dist/explore/overlays/action-panel.d.ts.map +1 -0
  136. package/dist/explore/overlays/action-panel.js +69 -0
  137. package/dist/explore/overlays/action-panel.js.map +1 -0
  138. package/dist/explore/overlays/connector-label-beacon.d.ts +11 -0
  139. package/dist/explore/overlays/connector-label-beacon.d.ts.map +1 -0
  140. package/dist/explore/overlays/connector-label-beacon.js +38 -0
  141. package/dist/explore/overlays/connector-label-beacon.js.map +1 -0
  142. package/dist/explore/overlays/connector-label-tag-shell.d.ts +16 -0
  143. package/dist/explore/overlays/connector-label-tag-shell.d.ts.map +1 -0
  144. package/dist/explore/overlays/connector-label-tag-shell.js +18 -0
  145. package/dist/explore/overlays/connector-label-tag-shell.js.map +1 -0
  146. package/dist/explore/overlays/detail-window.d.ts +9 -0
  147. package/dist/explore/overlays/detail-window.d.ts.map +1 -0
  148. package/dist/explore/overlays/detail-window.js +92 -0
  149. package/dist/explore/overlays/detail-window.js.map +1 -0
  150. package/dist/explore/overlays/explore-helper.d.ts +44 -0
  151. package/dist/explore/overlays/explore-helper.d.ts.map +1 -0
  152. package/dist/explore/overlays/explore-helper.js +57 -0
  153. package/dist/explore/overlays/explore-helper.js.map +1 -0
  154. package/dist/explore/overlays/icons.d.ts +16 -0
  155. package/dist/explore/overlays/icons.d.ts.map +1 -0
  156. package/dist/explore/overlays/icons.js +34 -0
  157. package/dist/explore/overlays/icons.js.map +1 -0
  158. package/dist/explore/overlays/space-load-error-overlay.d.ts +27 -0
  159. package/dist/explore/overlays/space-load-error-overlay.d.ts.map +1 -0
  160. package/dist/explore/overlays/space-load-error-overlay.js +24 -0
  161. package/dist/explore/overlays/space-load-error-overlay.js.map +1 -0
  162. package/dist/explore/services/websocket.service.d.ts +180 -0
  163. package/dist/explore/services/websocket.service.d.ts.map +1 -0
  164. package/dist/explore/services/websocket.service.js +187 -0
  165. package/dist/explore/services/websocket.service.js.map +1 -0
  166. package/dist/explore/simple-character.d.ts +46 -0
  167. package/dist/explore/simple-character.d.ts.map +1 -0
  168. package/dist/explore/simple-character.js +119 -0
  169. package/dist/explore/simple-character.js.map +1 -0
  170. package/dist/explore/stores/action-prompt.store.d.ts +27 -0
  171. package/dist/explore/stores/action-prompt.store.d.ts.map +1 -0
  172. package/dist/explore/stores/action-prompt.store.js +14 -0
  173. package/dist/explore/stores/action-prompt.store.js.map +1 -0
  174. package/dist/explore/stores/cave-explore.store.d.ts +77 -0
  175. package/dist/explore/stores/cave-explore.store.d.ts.map +1 -0
  176. package/dist/explore/stores/cave-explore.store.js +66 -0
  177. package/dist/explore/stores/cave-explore.store.js.map +1 -0
  178. package/dist/explore/stores/explore-context.d.ts +35 -0
  179. package/dist/explore/stores/explore-context.d.ts.map +1 -0
  180. package/dist/explore/stores/explore-context.js +43 -0
  181. package/dist/explore/stores/explore-context.js.map +1 -0
  182. package/dist/explore/styles/cave-world-css.d.ts +10 -0
  183. package/dist/explore/styles/cave-world-css.d.ts.map +1 -0
  184. package/dist/explore/styles/cave-world-css.js +935 -0
  185. package/dist/explore/styles/cave-world-css.js.map +1 -0
  186. package/dist/explore/styles/inject.d.ts +32 -0
  187. package/dist/explore/styles/inject.d.ts.map +1 -0
  188. package/dist/explore/styles/inject.js +40 -0
  189. package/dist/explore/styles/inject.js.map +1 -0
  190. package/dist/explore/utils/schedule-idle.d.ts +12 -0
  191. package/dist/explore/utils/schedule-idle.d.ts.map +1 -0
  192. package/dist/explore/utils/schedule-idle.js +16 -0
  193. package/dist/explore/utils/schedule-idle.js.map +1 -0
  194. package/dist/explore/viewer-shared.d.ts +56 -0
  195. package/dist/explore/viewer-shared.d.ts.map +1 -0
  196. package/dist/index.d.ts +16 -0
  197. package/dist/index.d.ts.map +1 -0
  198. package/dist/index.js +78 -0
  199. package/dist/index.js.map +1 -0
  200. package/dist/space/cave-base-layer.d.ts +42 -0
  201. package/dist/space/cave-base-layer.d.ts.map +1 -0
  202. package/dist/space/cave-base-layer.js +221 -0
  203. package/dist/space/cave-base-layer.js.map +1 -0
  204. package/dist/space/cave-custom-layer.d.ts +12 -0
  205. package/dist/space/cave-custom-layer.d.ts.map +1 -0
  206. package/dist/space/cave-custom-layer.js +17 -0
  207. package/dist/space/cave-custom-layer.js.map +1 -0
  208. package/dist/space/cave-env.d.ts +6 -0
  209. package/dist/space/cave-env.d.ts.map +1 -0
  210. package/dist/space/cave-env.js +23 -0
  211. package/dist/space/cave-env.js.map +1 -0
  212. package/dist/space/cave-space.d.ts +46 -0
  213. package/dist/space/cave-space.d.ts.map +1 -0
  214. package/dist/space/cave-space.js +37 -0
  215. package/dist/space/cave-space.js.map +1 -0
  216. package/dist/space/connector-label-host.d.ts +21 -0
  217. package/dist/space/connector-label-host.d.ts.map +1 -0
  218. package/dist/space/connector-label-host.js +65 -0
  219. package/dist/space/connector-label-host.js.map +1 -0
  220. package/dist/space/index.d.ts +18 -0
  221. package/dist/space/index.d.ts.map +1 -0
  222. package/dist/space/index.js +47 -0
  223. package/dist/space/index.js.map +1 -0
  224. package/dist/space/objects/builtin-registrar.d.ts +17 -0
  225. package/dist/space/objects/builtin-registrar.d.ts.map +1 -0
  226. package/dist/space/objects/builtin-registrar.js +19 -0
  227. package/dist/space/objects/builtin-registrar.js.map +1 -0
  228. package/dist/space/objects/custom-object.d.ts +9 -0
  229. package/dist/space/objects/custom-object.d.ts.map +1 -0
  230. package/dist/space/objects/custom-object.js +56 -0
  231. package/dist/space/objects/custom-object.js.map +1 -0
  232. package/dist/space/objects/image-object.d.ts +7 -0
  233. package/dist/space/objects/image-object.d.ts.map +1 -0
  234. package/dist/space/objects/image-object.js +14 -0
  235. package/dist/space/objects/image-object.js.map +1 -0
  236. package/dist/space/objects/model-object/fbx-object.d.ts +8 -0
  237. package/dist/space/objects/model-object/fbx-object.d.ts.map +1 -0
  238. package/dist/space/objects/model-object/fbx-object.js +26 -0
  239. package/dist/space/objects/model-object/fbx-object.js.map +1 -0
  240. package/dist/space/objects/model-object/gltf-object.d.ts +9 -0
  241. package/dist/space/objects/model-object/gltf-object.d.ts.map +1 -0
  242. package/dist/space/objects/model-object/gltf-object.js +66 -0
  243. package/dist/space/objects/model-object/gltf-object.js.map +1 -0
  244. package/dist/space/objects/model-object/index.d.ts +9 -0
  245. package/dist/space/objects/model-object/index.d.ts.map +1 -0
  246. package/dist/space/objects/model-object/index.js +12 -0
  247. package/dist/space/objects/model-object/index.js.map +1 -0
  248. package/dist/space/objects/model-object/splat-object.d.ts +9 -0
  249. package/dist/space/objects/model-object/splat-object.d.ts.map +1 -0
  250. package/dist/space/objects/model-object/splat-object.js +19 -0
  251. package/dist/space/objects/model-object/splat-object.js.map +1 -0
  252. package/dist/space/objects/object-components/windows/index.d.ts +5 -0
  253. package/dist/space/objects/object-components/windows/index.d.ts.map +1 -0
  254. package/dist/space/objects/object-components/windows/index.js +20 -0
  255. package/dist/space/objects/object-components/windows/index.js.map +1 -0
  256. package/dist/space/objects/placeholder-object.d.ts +7 -0
  257. package/dist/space/objects/placeholder-object.d.ts.map +1 -0
  258. package/dist/space/objects/placeholder-object.js +12 -0
  259. package/dist/space/objects/placeholder-object.js.map +1 -0
  260. package/dist/space/objects/poi-object.d.ts +7 -0
  261. package/dist/space/objects/poi-object.d.ts.map +1 -0
  262. package/dist/space/objects/poi-object.js +38 -0
  263. package/dist/space/objects/poi-object.js.map +1 -0
  264. package/dist/space/objects/portal-object.d.ts +7 -0
  265. package/dist/space/objects/portal-object.d.ts.map +1 -0
  266. package/dist/space/objects/portal-object.js +84 -0
  267. package/dist/space/objects/portal-object.js.map +1 -0
  268. package/dist/space/objects/video-object.d.ts +7 -0
  269. package/dist/space/objects/video-object.d.ts.map +1 -0
  270. package/dist/space/objects/video-object.js +32 -0
  271. package/dist/space/objects/video-object.js.map +1 -0
  272. package/dist/space/polygon-boundary.d.ts +10 -0
  273. package/dist/space/polygon-boundary.d.ts.map +1 -0
  274. package/dist/space/polygon-boundary.js +205 -0
  275. package/dist/space/polygon-boundary.js.map +1 -0
  276. package/dist/space/splats/spark/robust-splat-mesh.d.ts +59 -0
  277. package/dist/space/splats/spark/robust-splat-mesh.d.ts.map +1 -0
  278. package/dist/space/splats/spark/robust-splat-mesh.js +105 -0
  279. package/dist/space/splats/spark/robust-splat-mesh.js.map +1 -0
  280. package/dist/space/splats/spark/splat-mesh.d.ts +5 -0
  281. package/dist/space/splats/spark/splat-mesh.d.ts.map +1 -0
  282. package/dist/space/splats/spark/splat-mesh.js +7 -0
  283. package/dist/space/splats/spark/splat-mesh.js.map +1 -0
  284. package/dist/space/splats/spark/splat-spread-reveal.d.ts +14 -0
  285. package/dist/space/splats/spark/splat-spread-reveal.d.ts.map +1 -0
  286. package/dist/space/splats/spark/splat-spread-reveal.js +45 -0
  287. package/dist/space/splats/spark/splat-spread-reveal.js.map +1 -0
  288. package/dist/space/utils/cave-world-player.d.ts +3 -0
  289. package/dist/space/utils/cave-world-player.d.ts.map +1 -0
  290. package/dist/space/utils/cave-world-player.js +5 -0
  291. package/dist/space/utils/cave-world-player.js.map +1 -0
  292. package/dist/space/utils/configure-canvas.d.ts +20 -0
  293. package/dist/space/utils/configure-canvas.d.ts.map +1 -0
  294. package/dist/space/utils/configure-canvas.js +12 -0
  295. package/dist/space/utils/configure-canvas.js.map +1 -0
  296. package/dist/space/utils/polygon-boundary-geometry.d.ts +8 -0
  297. package/dist/space/utils/polygon-boundary-geometry.d.ts.map +1 -0
  298. package/dist/space/utils/polygon-boundary-geometry.js +20 -0
  299. package/dist/space/utils/polygon-boundary-geometry.js.map +1 -0
  300. package/dist/space/utils/polygon-boundary-segments.d.ts +50 -0
  301. package/dist/space/utils/polygon-boundary-segments.d.ts.map +1 -0
  302. package/dist/space/utils/polygon-boundary-segments.js +64 -0
  303. package/dist/space/utils/polygon-boundary-segments.js.map +1 -0
  304. package/dist/space/utils/rotation-compat.d.ts +4 -0
  305. package/dist/space/utils/rotation-compat.d.ts.map +1 -0
  306. package/dist/space/utils/rotation-compat.js +9 -0
  307. package/dist/space/utils/rotation-compat.js.map +1 -0
  308. package/dist/space/utils/select-splat-level.d.ts +52 -0
  309. package/dist/space/utils/select-splat-level.d.ts.map +1 -0
  310. package/dist/space/utils/select-splat-level.js +43 -0
  311. package/dist/space/utils/select-splat-level.js.map +1 -0
  312. package/dist/space/utils/spark-performance.d.ts +10 -0
  313. package/dist/space/utils/spark-performance.d.ts.map +1 -0
  314. package/dist/space/utils/spark-performance.js +10 -0
  315. package/dist/space/utils/spark-performance.js.map +1 -0
  316. package/dist/space/utils/splat-collider-helper.d.ts +5 -0
  317. package/dist/space/utils/splat-collider-helper.d.ts.map +1 -0
  318. package/dist/space/utils/splat-collider-helper.js +162 -0
  319. package/dist/space/utils/splat-collider-helper.js.map +1 -0
  320. package/dist/space/utils/touch-primary-device.d.ts +16 -0
  321. package/dist/space/utils/touch-primary-device.d.ts.map +1 -0
  322. package/dist/space/utils/touch-primary-device.js +52 -0
  323. package/dist/space/utils/touch-primary-device.js.map +1 -0
  324. package/dist/space/utils/use-visibility-frameloop.d.ts +20 -0
  325. package/dist/space/utils/use-visibility-frameloop.d.ts.map +1 -0
  326. package/dist/space/utils/use-visibility-frameloop.js +18 -0
  327. package/dist/space/utils/use-visibility-frameloop.js.map +1 -0
  328. package/dist/styles.css +930 -0
  329. package/dist/types/index.d.ts +2 -0
  330. package/dist/types/index.d.ts.map +1 -0
  331. package/dist/types/index.js +2 -0
  332. package/dist/types/index.js.map +1 -0
  333. package/dist/types/space-types.d.ts +404 -0
  334. package/dist/types/space-types.d.ts.map +1 -0
  335. package/doc/API.md +617 -0
  336. package/doc/ARCHITECTURE.md +264 -0
  337. package/doc/multiplayer-protocol.md +757 -0
  338. package/doc/scene-json-structure.md +567 -0
  339. package/package.json +131 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"touch-primary-device.js","sources":["../../../space/utils/touch-primary-device.ts"],"sourcesContent":["import { useEffect, useSyncExternalStore } from 'react'\n\n/** Same media query as `@react-three/viverse` `useIsMobile`. */\nexport const VIVERSE_MOBILE_MEDIA_QUERY = '(hover: none) and (pointer: coarse)'\n\nconst TOUCH_PRIMARY_WATCH_QUERIES = [\n VIVERSE_MOBILE_MEDIA_QUERY,\n '(hover: none)',\n '(hover: hover)',\n '(pointer: fine)',\n '(any-pointer: coarse)',\n '(max-width: 1024px)'\n] as const\n\nconst TOUCH_CONTROLS_STYLE_ID = 'cave-world-touch-controls-style'\n\n/**\n * Whether the device should use on-screen joystick + touch look controls.\n *\n * viverse's `useIsMobile()` only matches `(hover: none) and (pointer: coarse)`.\n * Some phone browsers / in-app WebViews (WeChat, etc.) report `pointer: fine`, so\n * they get desktop pointer-lock bindings and `.mobile-only` UI stays hidden.\n */\nexport function isTouchPrimaryDevice(): boolean {\n if (typeof window === 'undefined' || typeof window.matchMedia !== 'function') {\n return false\n }\n\n if (window.matchMedia(VIVERSE_MOBILE_MEDIA_QUERY).matches) {\n return true\n }\n\n const hasTouch = (navigator.maxTouchPoints ?? 0) > 0 || 'ontouchstart' in window\n\n if (!hasTouch) {\n return false\n }\n\n // Touchscreen laptop with mouse — keep desktop keyboard + pointer-lock UX.\n if (window.matchMedia('(pointer: fine)').matches && window.matchMedia('(hover: hover)').matches) {\n return false\n }\n\n // Typical phones / tablets, including WebViews that misreport pointer type.\n if (window.matchMedia('(max-width: 1024px)').matches) {\n return true\n }\n\n if (window.matchMedia('(hover: none)').matches) {\n return true\n }\n\n if (window.matchMedia('(any-pointer: coarse)').matches) {\n return true\n }\n\n return false\n}\n\nfunction subscribeTouchPrimary(onStoreChange: () => void): () => void {\n if (typeof window === 'undefined' || typeof window.matchMedia !== 'function') {\n return () => {}\n }\n\n const mediaQueries = TOUCH_PRIMARY_WATCH_QUERIES.map((query) => window.matchMedia(query))\n const handler = () => onStoreChange()\n\n for (const mediaQuery of mediaQueries) {\n mediaQuery.addEventListener('change', handler)\n }\n\n return () => {\n for (const mediaQuery of mediaQueries) {\n mediaQuery.removeEventListener('change', handler)\n }\n }\n}\n\nfunction getTouchPrimarySnapshot(): boolean {\n return isTouchPrimaryDevice()\n}\n\nfunction ensureTouchControlsStyles(): void {\n if (typeof document === 'undefined' || document.getElementById(TOUCH_CONTROLS_STYLE_ID)) {\n return\n }\n\n const style = document.createElement('style')\n style.id = TOUCH_CONTROLS_STYLE_ID\n // viverse injects `.mobile-only { display: none }` unless the coarse-pointer MQ\n // matches — override when our broader touch detection says controls are needed.\n style.textContent = 'html.cave-world-touch-controls .mobile-only{display:unset!important;}'\n document.head.appendChild(style)\n}\n\nfunction syncTouchControlsDocumentClass(isTouchPrimary: boolean): void {\n if (typeof document === 'undefined') return\n ensureTouchControlsStyles()\n document.documentElement.classList.toggle('cave-world-touch-controls', isTouchPrimary)\n}\n\n/**\n * Drop-in replacement for viverse `useIsMobile()` wherever touch locomotion UI\n * is chosen (joystick, jump button, pointer-capture look).\n */\nexport function useTouchPrimaryDevice(): boolean {\n const isTouchPrimary = useSyncExternalStore(\n subscribeTouchPrimary,\n getTouchPrimarySnapshot,\n () => false\n )\n\n useEffect(() => {\n syncTouchControlsDocumentClass(isTouchPrimary)\n }, [isTouchPrimary])\n\n return isTouchPrimary\n}\n"],"names":["VIVERSE_MOBILE_MEDIA_QUERY","TOUCH_PRIMARY_WATCH_QUERIES","TOUCH_CONTROLS_STYLE_ID","isTouchPrimaryDevice","subscribeTouchPrimary","onStoreChange","mediaQueries","query","handler","mediaQuery","getTouchPrimarySnapshot","ensureTouchControlsStyles","style","syncTouchControlsDocumentClass","isTouchPrimary","useTouchPrimaryDevice","useSyncExternalStore","useEffect"],"mappings":";AAGO,MAAMA,IAA6B,uCAEpCC,IAA8B;AAAA,EAClCD;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAEME,IAA0B;AASzB,SAASC,IAAgC;AAC9C,SAAI,OAAO,SAAW,OAAe,OAAO,OAAO,cAAe,aACzD,KAGL,OAAO,WAAWH,CAA0B,EAAE,UACzC,KAKL,GAFc,UAAU,kBAAkB,KAAK,KAAK,kBAAkB,WAOtE,OAAO,WAAW,iBAAiB,EAAE,WAAW,OAAO,WAAW,gBAAgB,EAAE,UAC/E,KAIL,UAAO,WAAW,qBAAqB,EAAE,WAIzC,OAAO,WAAW,eAAe,EAAE,WAInC,OAAO,WAAW,uBAAuB,EAAE;AAKjD;AAEA,SAASI,EAAsBC,GAAuC;AACpE,MAAI,OAAO,SAAW,OAAe,OAAO,OAAO,cAAe;AAChE,WAAO,MAAM;AAAA,IAAC;AAGhB,QAAMC,IAAeL,EAA4B,IAAI,CAACM,MAAU,OAAO,WAAWA,CAAK,CAAC,GAClFC,IAAU,MAAMH,EAAA;AAEtB,aAAWI,KAAcH;AACvB,IAAAG,EAAW,iBAAiB,UAAUD,CAAO;AAG/C,SAAO,MAAM;AACX,eAAWC,KAAcH;AACvB,MAAAG,EAAW,oBAAoB,UAAUD,CAAO;AAAA,EAEpD;AACF;AAEA,SAASE,IAAmC;AAC1C,SAAOP,EAAA;AACT;AAEA,SAASQ,IAAkC;AACzC,MAAI,OAAO,WAAa,OAAe,SAAS,eAAeT,CAAuB;AACpF;AAGF,QAAMU,IAAQ,SAAS,cAAc,OAAO;AAC5C,EAAAA,EAAM,KAAKV,GAGXU,EAAM,cAAc,yEACpB,SAAS,KAAK,YAAYA,CAAK;AACjC;AAEA,SAASC,EAA+BC,GAA+B;AACrE,EAAI,OAAO,WAAa,QACxBH,EAAA,GACA,SAAS,gBAAgB,UAAU,OAAO,6BAA6BG,CAAc;AACvF;AAMO,SAASC,IAAiC;AAC/C,QAAMD,IAAiBE;AAAA,IACrBZ;AAAA,IACAM;AAAA,IACA,MAAM;AAAA,EAAA;AAGR,SAAAO,EAAU,MAAM;AACd,IAAAJ,EAA+BC,CAAc;AAAA,EAC/C,GAAG,CAACA,CAAc,CAAC,GAEZA;AACT;"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * R3F `frameloop` value driven by Page Visibility.
3
+ *
4
+ * When the page is hidden (tab switch, app backgrounded, screen lock) the
5
+ * render loop is stopped (`'never'`) so the GPU does zero work — splat scenes
6
+ * are extremely expensive to keep rendering at full frame rate and are the main
7
+ * driver of device heat. When the page is visible the loop runs normally
8
+ * (`'always'`), so behaviour is identical to the default when in foreground.
9
+ *
10
+ * Browsers throttle background `requestAnimationFrame` on their own, but the
11
+ * behaviour is inconsistent across mobile in-app WebViews (WeChat, etc.) and
12
+ * lock-screen states; setting `'never'` explicitly guarantees the loop halts.
13
+ */
14
+ export type VisibilityFrameloop = 'always' | 'never';
15
+ /**
16
+ * Returns the R3F `frameloop` mode that should be passed to a splat `<Canvas>`:
17
+ * `'never'` while the page is hidden, `'always'` while visible.
18
+ */
19
+ export declare function useVisibilityFrameloop(): VisibilityFrameloop;
20
+ //# sourceMappingURL=use-visibility-frameloop.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-visibility-frameloop.d.ts","sourceRoot":"","sources":["../../../space/utils/use-visibility-frameloop.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;GAYG;AACH,MAAM,MAAM,mBAAmB,GAAG,QAAQ,GAAG,OAAO,CAAA;AAiBpD;;;GAGG;AACH,wBAAgB,sBAAsB,IAAI,mBAAmB,CAE5D"}
@@ -0,0 +1,18 @@
1
+ import { useSyncExternalStore as i } from "react";
2
+ function n(e) {
3
+ return typeof document > "u" ? () => {
4
+ } : (document.addEventListener("visibilitychange", e), () => document.removeEventListener("visibilitychange", e));
5
+ }
6
+ function t() {
7
+ return typeof document > "u" ? "always" : document.hidden ? "never" : "always";
8
+ }
9
+ function r() {
10
+ return "always";
11
+ }
12
+ function o() {
13
+ return i(n, t, r);
14
+ }
15
+ export {
16
+ o as useVisibilityFrameloop
17
+ };
18
+ //# sourceMappingURL=use-visibility-frameloop.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-visibility-frameloop.js","sources":["../../../space/utils/use-visibility-frameloop.ts"],"sourcesContent":["import { useSyncExternalStore } from 'react'\n\n/**\n * R3F `frameloop` value driven by Page Visibility.\n *\n * When the page is hidden (tab switch, app backgrounded, screen lock) the\n * render loop is stopped (`'never'`) so the GPU does zero work — splat scenes\n * are extremely expensive to keep rendering at full frame rate and are the main\n * driver of device heat. When the page is visible the loop runs normally\n * (`'always'`), so behaviour is identical to the default when in foreground.\n *\n * Browsers throttle background `requestAnimationFrame` on their own, but the\n * behaviour is inconsistent across mobile in-app WebViews (WeChat, etc.) and\n * lock-screen states; setting `'never'` explicitly guarantees the loop halts.\n */\nexport type VisibilityFrameloop = 'always' | 'never'\n\nfunction subscribeVisibility(onStoreChange: () => void): () => void {\n if (typeof document === 'undefined') return () => {}\n document.addEventListener('visibilitychange', onStoreChange)\n return () => document.removeEventListener('visibilitychange', onStoreChange)\n}\n\nfunction getVisibilitySnapshot(): VisibilityFrameloop {\n if (typeof document === 'undefined') return 'always'\n return document.hidden ? 'never' : 'always'\n}\n\nfunction getServerSnapshot(): VisibilityFrameloop {\n return 'always'\n}\n\n/**\n * Returns the R3F `frameloop` mode that should be passed to a splat `<Canvas>`:\n * `'never'` while the page is hidden, `'always'` while visible.\n */\nexport function useVisibilityFrameloop(): VisibilityFrameloop {\n return useSyncExternalStore(subscribeVisibility, getVisibilitySnapshot, getServerSnapshot)\n}\n"],"names":["subscribeVisibility","onStoreChange","getVisibilitySnapshot","getServerSnapshot","useVisibilityFrameloop","useSyncExternalStore"],"mappings":";AAiBA,SAASA,EAAoBC,GAAuC;AAClE,SAAI,OAAO,WAAa,MAAoB,MAAM;AAAA,EAAC,KACnD,SAAS,iBAAiB,oBAAoBA,CAAa,GACpD,MAAM,SAAS,oBAAoB,oBAAoBA,CAAa;AAC7E;AAEA,SAASC,IAA6C;AACpD,SAAI,OAAO,WAAa,MAAoB,WACrC,SAAS,SAAS,UAAU;AACrC;AAEA,SAASC,IAAyC;AAChD,SAAO;AACT;AAMO,SAASC,IAA8C;AAC5D,SAAOC,EAAqBL,GAAqBE,GAAuBC,CAAiB;AAC3F;"}