@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,47 @@
1
+ import { CaveEventBus as o } from "./events/event-bus.js";
2
+ import { ObjectRegistry as s } from "./registry/object-registry.js";
3
+ import { ComponentRegistry as l } from "./registry/component-registry.js";
4
+ import { CaveWorldProvider as n, createCaveWorldStore as v, useCaveEventBus as g, useCaveWorld as i, useCaveWorldMessages as m, useCaveWorldStore as p, useCaveWorldStoreApi as d, useComponentRegistry as f, useObjectRegistry as u } from "./context/cave-world-context.js";
5
+ import { useCaveEvent as L } from "./hooks/use-cave-event.js";
6
+ import { createLogger as S, setCaveWorldLogLevel as W, setCaveWorldLogSink as x } from "./logging/logger.js";
7
+ import { CaveWorldError as y, isCaveWorldError as b } from "./errors.js";
8
+ import { DEFAULT_MESSAGES as A, formatMessage as P, en as h, zhCN as B, resolveMessages as M } from "./i18n/messages.js";
9
+ import { FALLBACK_LABEL_TEXT as _, computeLabelVisibility as j, getPortalTargetsWithSpaces as F, resolveConnectorLabel as O, shouldShowConnectorLabel as k } from "./connector-label/types.js";
10
+ import { getConnectorPortalTargets as z, getReadyPortalTargets as D, isConnectorPortalNavigable as G, isPortalTargetReady as K, isSpaceTransferReady as U, resolveConnectorTransferStatus as V } from "./connector-label/readiness.js";
11
+ export {
12
+ o as CaveEventBus,
13
+ y as CaveWorldError,
14
+ n as CaveWorldProvider,
15
+ l as ComponentRegistry,
16
+ A as DEFAULT_MESSAGES,
17
+ _ as FALLBACK_LABEL_TEXT,
18
+ s as ObjectRegistry,
19
+ j as computeLabelVisibility,
20
+ v as createCaveWorldStore,
21
+ S as createLogger,
22
+ P as formatMessage,
23
+ z as getConnectorPortalTargets,
24
+ F as getPortalTargetsWithSpaces,
25
+ D as getReadyPortalTargets,
26
+ b as isCaveWorldError,
27
+ G as isConnectorPortalNavigable,
28
+ K as isPortalTargetReady,
29
+ U as isSpaceTransferReady,
30
+ h as messagesEn,
31
+ B as messagesZhCN,
32
+ O as resolveConnectorLabel,
33
+ V as resolveConnectorTransferStatus,
34
+ M as resolveMessages,
35
+ W as setCaveWorldLogLevel,
36
+ x as setCaveWorldLogSink,
37
+ k as shouldShowConnectorLabel,
38
+ L as useCaveEvent,
39
+ g as useCaveEventBus,
40
+ i as useCaveWorld,
41
+ m as useCaveWorldMessages,
42
+ p as useCaveWorldStore,
43
+ d as useCaveWorldStoreApi,
44
+ f as useComponentRegistry,
45
+ u as useObjectRegistry
46
+ };
47
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;"}
@@ -0,0 +1,29 @@
1
+ /**
2
+ * Minimal leveled logger used by every SDK module instead of raw `console.*`.
3
+ *
4
+ * A library embedded in someone else's app must not decide how noisy their
5
+ * console is, so the default level only surfaces warnings and errors. Hosts can
6
+ * raise it for debugging or silence it entirely, and can replace the sink to
7
+ * forward SDK diagnostics into their own telemetry.
8
+ */
9
+ export type CaveWorldLogLevel = 'debug' | 'info' | 'warn' | 'error' | 'silent';
10
+ export interface CaveWorldLogSink {
11
+ debug(...args: unknown[]): void;
12
+ info(...args: unknown[]): void;
13
+ warn(...args: unknown[]): void;
14
+ error(...args: unknown[]): void;
15
+ }
16
+ export interface CaveWorldLogger extends CaveWorldLogSink {
17
+ /** Derive a nested logger, e.g. `createLogger('space').child('splat')`. */
18
+ child(scope: string): CaveWorldLogger;
19
+ }
20
+ /**
21
+ * Set the global SDK log level. Defaults to `'warn'`; use `'debug'` while
22
+ * integrating and `'silent'` to mute the SDK entirely.
23
+ */
24
+ export declare function setCaveWorldLogLevel(level: CaveWorldLogLevel): void;
25
+ /** Route SDK diagnostics somewhere other than `console` (e.g. Sentry). */
26
+ export declare function setCaveWorldLogSink(sink: CaveWorldLogSink | undefined): void;
27
+ /** Create a scoped logger. Messages are prefixed with `[cave-world:<scope>]`. */
28
+ export declare function createLogger(scope: string): CaveWorldLogger;
29
+ //# sourceMappingURL=logger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../../core/logging/logger.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,MAAM,MAAM,iBAAiB,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,QAAQ,CAAA;AAE9E,MAAM,WAAW,gBAAgB;IAC/B,KAAK,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAAA;IAC/B,IAAI,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAAA;IAC9B,IAAI,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAAA;IAC9B,KAAK,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAAA;CAChC;AAED,MAAM,WAAW,eAAgB,SAAQ,gBAAgB;IACvD,2EAA2E;IAC3E,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,eAAe,CAAA;CACtC;AAsBD;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,iBAAiB,GAAG,IAAI,CAEnE;AAED,0EAA0E;AAC1E,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,gBAAgB,GAAG,SAAS,GAAG,IAAI,CAE5E;AAMD,iFAAiF;AACjF,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,eAAe,CAkB3D"}
@@ -0,0 +1,47 @@
1
+ const t = {
2
+ debug: 10,
3
+ info: 20,
4
+ warn: 30,
5
+ error: 40
6
+ }, u = Number.POSITIVE_INFINITY;
7
+ let c = t.warn;
8
+ const f = {
9
+ debug: (...r) => console.debug(...r),
10
+ info: (...r) => console.info(...r),
11
+ warn: (...r) => console.warn(...r),
12
+ error: (...r) => console.error(...r)
13
+ };
14
+ let e = f;
15
+ function l(r) {
16
+ c = r === "silent" ? u : t[r];
17
+ }
18
+ function d(r) {
19
+ e = r ?? f;
20
+ }
21
+ function i(r) {
22
+ return t[r] >= c;
23
+ }
24
+ function a(r) {
25
+ const o = `[cave-world:${r}]`;
26
+ return {
27
+ debug: (...n) => {
28
+ i("debug") && e.debug(o, ...n);
29
+ },
30
+ info: (...n) => {
31
+ i("info") && e.info(o, ...n);
32
+ },
33
+ warn: (...n) => {
34
+ i("warn") && e.warn(o, ...n);
35
+ },
36
+ error: (...n) => {
37
+ i("error") && e.error(o, ...n);
38
+ },
39
+ child: (n) => a(`${r}:${n}`)
40
+ };
41
+ }
42
+ export {
43
+ a as createLogger,
44
+ l as setCaveWorldLogLevel,
45
+ d as setCaveWorldLogSink
46
+ };
47
+ //# sourceMappingURL=logger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.js","sources":["../../../core/logging/logger.ts"],"sourcesContent":["/**\n * Minimal leveled logger used by every SDK module instead of raw `console.*`.\n *\n * A library embedded in someone else's app must not decide how noisy their\n * console is, so the default level only surfaces warnings and errors. Hosts can\n * raise it for debugging or silence it entirely, and can replace the sink to\n * forward SDK diagnostics into their own telemetry.\n */\n\nexport type CaveWorldLogLevel = 'debug' | 'info' | 'warn' | 'error' | 'silent'\n\nexport interface CaveWorldLogSink {\n debug(...args: unknown[]): void\n info(...args: unknown[]): void\n warn(...args: unknown[]): void\n error(...args: unknown[]): void\n}\n\nexport interface CaveWorldLogger extends CaveWorldLogSink {\n /** Derive a nested logger, e.g. `createLogger('space').child('splat')`. */\n child(scope: string): CaveWorldLogger\n}\n\nconst LEVEL_RANK: Record<Exclude<CaveWorldLogLevel, 'silent'>, number> = {\n debug: 10,\n info: 20,\n warn: 30,\n error: 40\n}\n\nconst SILENT_RANK = Number.POSITIVE_INFINITY\n\nlet currentRank: number = LEVEL_RANK.warn\n\nconst consoleSink: CaveWorldLogSink = {\n debug: (...args) => console.debug(...args),\n info: (...args) => console.info(...args),\n warn: (...args) => console.warn(...args),\n error: (...args) => console.error(...args)\n}\n\nlet currentSink: CaveWorldLogSink = consoleSink\n\n/**\n * Set the global SDK log level. Defaults to `'warn'`; use `'debug'` while\n * integrating and `'silent'` to mute the SDK entirely.\n */\nexport function setCaveWorldLogLevel(level: CaveWorldLogLevel): void {\n currentRank = level === 'silent' ? SILENT_RANK : LEVEL_RANK[level]\n}\n\n/** Route SDK diagnostics somewhere other than `console` (e.g. Sentry). */\nexport function setCaveWorldLogSink(sink: CaveWorldLogSink | undefined): void {\n currentSink = sink ?? consoleSink\n}\n\nfunction enabled(level: Exclude<CaveWorldLogLevel, 'silent'>): boolean {\n return LEVEL_RANK[level] >= currentRank\n}\n\n/** Create a scoped logger. Messages are prefixed with `[cave-world:<scope>]`. */\nexport function createLogger(scope: string): CaveWorldLogger {\n const prefix = `[cave-world:${scope}]`\n\n return {\n debug: (...args) => {\n if (enabled('debug')) currentSink.debug(prefix, ...args)\n },\n info: (...args) => {\n if (enabled('info')) currentSink.info(prefix, ...args)\n },\n warn: (...args) => {\n if (enabled('warn')) currentSink.warn(prefix, ...args)\n },\n error: (...args) => {\n if (enabled('error')) currentSink.error(prefix, ...args)\n },\n child: (childScope) => createLogger(`${scope}:${childScope}`)\n }\n}\n"],"names":["LEVEL_RANK","SILENT_RANK","currentRank","consoleSink","args","currentSink","setCaveWorldLogLevel","level","setCaveWorldLogSink","sink","enabled","createLogger","scope","prefix","childScope"],"mappings":"AAuBA,MAAMA,IAAmE;AAAA,EACvE,OAAO;AAAA,EACP,MAAM;AAAA,EACN,MAAM;AAAA,EACN,OAAO;AACT,GAEMC,IAAc,OAAO;AAE3B,IAAIC,IAAsBF,EAAW;AAErC,MAAMG,IAAgC;AAAA,EACpC,OAAO,IAAIC,MAAS,QAAQ,MAAM,GAAGA,CAAI;AAAA,EACzC,MAAM,IAAIA,MAAS,QAAQ,KAAK,GAAGA,CAAI;AAAA,EACvC,MAAM,IAAIA,MAAS,QAAQ,KAAK,GAAGA,CAAI;AAAA,EACvC,OAAO,IAAIA,MAAS,QAAQ,MAAM,GAAGA,CAAI;AAC3C;AAEA,IAAIC,IAAgCF;AAM7B,SAASG,EAAqBC,GAAgC;AACnE,EAAAL,IAAcK,MAAU,WAAWN,IAAcD,EAAWO,CAAK;AACnE;AAGO,SAASC,EAAoBC,GAA0C;AAC5E,EAAAJ,IAAcI,KAAQN;AACxB;AAEA,SAASO,EAAQH,GAAsD;AACrE,SAAOP,EAAWO,CAAK,KAAKL;AAC9B;AAGO,SAASS,EAAaC,GAAgC;AAC3D,QAAMC,IAAS,eAAeD,CAAK;AAEnC,SAAO;AAAA,IACL,OAAO,IAAIR,MAAS;AAClB,MAAIM,EAAQ,OAAO,OAAe,MAAMG,GAAQ,GAAGT,CAAI;AAAA,IACzD;AAAA,IACA,MAAM,IAAIA,MAAS;AACjB,MAAIM,EAAQ,MAAM,OAAe,KAAKG,GAAQ,GAAGT,CAAI;AAAA,IACvD;AAAA,IACA,MAAM,IAAIA,MAAS;AACjB,MAAIM,EAAQ,MAAM,OAAe,KAAKG,GAAQ,GAAGT,CAAI;AAAA,IACvD;AAAA,IACA,OAAO,IAAIA,MAAS;AAClB,MAAIM,EAAQ,OAAO,OAAe,MAAMG,GAAQ,GAAGT,CAAI;AAAA,IACzD;AAAA,IACA,OAAO,CAACU,MAAeH,EAAa,GAAGC,CAAK,IAAIE,CAAU,EAAE;AAAA,EAAA;AAEhE;"}
@@ -0,0 +1,41 @@
1
+ import type { ComponentType } from 'react';
2
+ import type { CustomObject } from '../../types/index.js';
3
+ export interface ObjectComponentProps {
4
+ /** The object this behavior is attached to. */
5
+ object: CustomObject;
6
+ }
7
+ export type ObjectComponent = ComponentType<ObjectComponentProps>;
8
+ export interface ComponentRegistryEntry {
9
+ component: ObjectComponent;
10
+ /**
11
+ * When true, objects carrying this component get an `onClick` handler wired
12
+ * by `CustomObject` (which emits `object:click`).
13
+ */
14
+ requiresInteraction: boolean;
15
+ }
16
+ export interface ComponentRegistryOptions {
17
+ requiresInteraction?: boolean;
18
+ }
19
+ /**
20
+ * Maps `CustomObject.components` keys from the scene JSON to React components.
21
+ *
22
+ * Behaviors are Unity-style: each one is self-contained and manages its own
23
+ * sensors, state, and event emission. Built-ins are installed with
24
+ * {@link registerDefault}, so host registrations made before mount always win.
25
+ */
26
+ export declare class ComponentRegistry {
27
+ private components;
28
+ /** Register (or replace) a behavior component. */
29
+ register(name: string, component: ObjectComponent, options?: ComponentRegistryOptions): void;
30
+ /**
31
+ * Register only if the name is not taken. Used for SDK built-ins.
32
+ *
33
+ * @returns whether the component was installed.
34
+ */
35
+ registerDefault(name: string, component: ObjectComponent, options?: ComponentRegistryOptions): boolean;
36
+ unregister(name: string): void;
37
+ get(name: string): ComponentRegistryEntry | undefined;
38
+ has(name: string): boolean;
39
+ getRegisteredNames(): string[];
40
+ }
41
+ //# sourceMappingURL=component-registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"component-registry.d.ts","sourceRoot":"","sources":["../../../core/registry/component-registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,OAAO,CAAA;AAC1C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAE/C,MAAM,WAAW,oBAAoB;IACnC,+CAA+C;IAC/C,MAAM,EAAE,YAAY,CAAA;CACrB;AAED,MAAM,MAAM,eAAe,GAAG,aAAa,CAAC,oBAAoB,CAAC,CAAA;AAEjE,MAAM,WAAW,sBAAsB;IACrC,SAAS,EAAE,eAAe,CAAA;IAC1B;;;OAGG;IACH,mBAAmB,EAAE,OAAO,CAAA;CAC7B;AAED,MAAM,WAAW,wBAAwB;IACvC,mBAAmB,CAAC,EAAE,OAAO,CAAA;CAC9B;AAED;;;;;;GAMG;AACH,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,UAAU,CAA4C;IAE9D,kDAAkD;IAClD,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,eAAe,EAAE,OAAO,CAAC,EAAE,wBAAwB,GAAG,IAAI;IAO5F;;;;OAIG;IACH,eAAe,CACb,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,eAAe,EAC1B,OAAO,CAAC,EAAE,wBAAwB,GACjC,OAAO;IAMV,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAI9B,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,sBAAsB,GAAG,SAAS;IAIrD,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAI1B,kBAAkB,IAAI,MAAM,EAAE;CAG/B"}
@@ -0,0 +1,34 @@
1
+ class n {
2
+ components = /* @__PURE__ */ new Map();
3
+ /** Register (or replace) a behavior component. */
4
+ register(e, t, s) {
5
+ this.components.set(e, {
6
+ component: t,
7
+ requiresInteraction: s?.requiresInteraction ?? !1
8
+ });
9
+ }
10
+ /**
11
+ * Register only if the name is not taken. Used for SDK built-ins.
12
+ *
13
+ * @returns whether the component was installed.
14
+ */
15
+ registerDefault(e, t, s) {
16
+ return this.components.has(e) ? !1 : (this.register(e, t, s), !0);
17
+ }
18
+ unregister(e) {
19
+ this.components.delete(e);
20
+ }
21
+ get(e) {
22
+ return this.components.get(e);
23
+ }
24
+ has(e) {
25
+ return this.components.has(e);
26
+ }
27
+ getRegisteredNames() {
28
+ return Array.from(this.components.keys());
29
+ }
30
+ }
31
+ export {
32
+ n as ComponentRegistry
33
+ };
34
+ //# sourceMappingURL=component-registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"component-registry.js","sources":["../../../core/registry/component-registry.ts"],"sourcesContent":["import type { ComponentType } from 'react'\nimport type { CustomObject } from '../../types'\n\nexport interface ObjectComponentProps {\n /** The object this behavior is attached to. */\n object: CustomObject\n}\n\nexport type ObjectComponent = ComponentType<ObjectComponentProps>\n\nexport interface ComponentRegistryEntry {\n component: ObjectComponent\n /**\n * When true, objects carrying this component get an `onClick` handler wired\n * by `CustomObject` (which emits `object:click`).\n */\n requiresInteraction: boolean\n}\n\nexport interface ComponentRegistryOptions {\n requiresInteraction?: boolean\n}\n\n/**\n * Maps `CustomObject.components` keys from the scene JSON to React components.\n *\n * Behaviors are Unity-style: each one is self-contained and manages its own\n * sensors, state, and event emission. Built-ins are installed with\n * {@link registerDefault}, so host registrations made before mount always win.\n */\nexport class ComponentRegistry {\n private components = new Map<string, ComponentRegistryEntry>()\n\n /** Register (or replace) a behavior component. */\n register(name: string, component: ObjectComponent, options?: ComponentRegistryOptions): void {\n this.components.set(name, {\n component,\n requiresInteraction: options?.requiresInteraction ?? false\n })\n }\n\n /**\n * Register only if the name is not taken. Used for SDK built-ins.\n *\n * @returns whether the component was installed.\n */\n registerDefault(\n name: string,\n component: ObjectComponent,\n options?: ComponentRegistryOptions\n ): boolean {\n if (this.components.has(name)) return false\n this.register(name, component, options)\n return true\n }\n\n unregister(name: string): void {\n this.components.delete(name)\n }\n\n get(name: string): ComponentRegistryEntry | undefined {\n return this.components.get(name)\n }\n\n has(name: string): boolean {\n return this.components.has(name)\n }\n\n getRegisteredNames(): string[] {\n return Array.from(this.components.keys())\n }\n}\n"],"names":["ComponentRegistry","name","component","options"],"mappings":"AA8BO,MAAMA,EAAkB;AAAA,EACrB,iCAAiB,IAAA;AAAA;AAAA,EAGzB,SAASC,GAAcC,GAA4BC,GAA0C;AAC3F,SAAK,WAAW,IAAIF,GAAM;AAAA,MACxB,WAAAC;AAAA,MACA,qBAAqBC,GAAS,uBAAuB;AAAA,IAAA,CACtD;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,gBACEF,GACAC,GACAC,GACS;AACT,WAAI,KAAK,WAAW,IAAIF,CAAI,IAAU,MACtC,KAAK,SAASA,GAAMC,GAAWC,CAAO,GAC/B;AAAA,EACT;AAAA,EAEA,WAAWF,GAAoB;AAC7B,SAAK,WAAW,OAAOA,CAAI;AAAA,EAC7B;AAAA,EAEA,IAAIA,GAAkD;AACpD,WAAO,KAAK,WAAW,IAAIA,CAAI;AAAA,EACjC;AAAA,EAEA,IAAIA,GAAuB;AACzB,WAAO,KAAK,WAAW,IAAIA,CAAI;AAAA,EACjC;AAAA,EAEA,qBAA+B;AAC7B,WAAO,MAAM,KAAK,KAAK,WAAW,MAAM;AAAA,EAC1C;AACF;"}
@@ -0,0 +1,38 @@
1
+ import type { ComponentType } from 'react';
2
+ import type { ThreeEvent } from '@react-three/fiber';
3
+ import type { CustomObject } from '../../types/index.js';
4
+ export interface ObjectRendererProps {
5
+ /** Full object entry from the scene JSON. */
6
+ object: CustomObject;
7
+ /** Click handler pre-wired to emit `object:click`; attach it to your mesh. */
8
+ onClick?: (event: ThreeEvent<MouseEvent>) => void;
9
+ /** Whether the owning space currently has physics enabled. */
10
+ physics?: boolean;
11
+ /** Whether the object should skip animation work (non-active space). */
12
+ static?: boolean;
13
+ }
14
+ export type ObjectRenderer = ComponentType<ObjectRendererProps>;
15
+ /**
16
+ * Maps `CustomObject.type` values from the scene JSON to React components.
17
+ *
18
+ * Pass your own instance to a viewer to add object types, or to replace a
19
+ * built-in renderer. Built-ins are installed with {@link registerDefault}, so
20
+ * anything you `register()` before mount always wins.
21
+ */
22
+ export declare class ObjectRegistry {
23
+ private renderers;
24
+ /** Register (or replace) the renderer for an object type. */
25
+ register(type: string, renderer: ObjectRenderer): void;
26
+ /**
27
+ * Register only if the type is not taken. Used for SDK built-ins so a host
28
+ * registration made before mount is never clobbered.
29
+ *
30
+ * @returns whether the renderer was installed.
31
+ */
32
+ registerDefault(type: string, renderer: ObjectRenderer): boolean;
33
+ unregister(type: string): void;
34
+ get(type: string): ObjectRenderer | undefined;
35
+ has(type: string): boolean;
36
+ getRegisteredTypes(): string[];
37
+ }
38
+ //# sourceMappingURL=object-registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"object-registry.d.ts","sourceRoot":"","sources":["../../../core/registry/object-registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,OAAO,CAAA;AAC1C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAA;AACpD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAE/C,MAAM,WAAW,mBAAmB;IAClC,6CAA6C;IAC7C,MAAM,EAAE,YAAY,CAAA;IACpB,8EAA8E;IAC9E,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,CAAC,UAAU,CAAC,KAAK,IAAI,CAAA;IACjD,8DAA8D;IAC9D,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,wEAAwE;IACxE,MAAM,CAAC,EAAE,OAAO,CAAA;CACjB;AAED,MAAM,MAAM,cAAc,GAAG,aAAa,CAAC,mBAAmB,CAAC,CAAA;AAE/D;;;;;;GAMG;AACH,qBAAa,cAAc;IACzB,OAAO,CAAC,SAAS,CAAoC;IAErD,6DAA6D;IAC7D,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,cAAc,GAAG,IAAI;IAItD;;;;;OAKG;IACH,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,cAAc,GAAG,OAAO;IAMhE,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAI9B,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS;IAI7C,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAI1B,kBAAkB,IAAI,MAAM,EAAE;CAG/B"}
@@ -0,0 +1,32 @@
1
+ class t {
2
+ renderers = /* @__PURE__ */ new Map();
3
+ /** Register (or replace) the renderer for an object type. */
4
+ register(e, r) {
5
+ this.renderers.set(e, r);
6
+ }
7
+ /**
8
+ * Register only if the type is not taken. Used for SDK built-ins so a host
9
+ * registration made before mount is never clobbered.
10
+ *
11
+ * @returns whether the renderer was installed.
12
+ */
13
+ registerDefault(e, r) {
14
+ return this.renderers.has(e) ? !1 : (this.renderers.set(e, r), !0);
15
+ }
16
+ unregister(e) {
17
+ this.renderers.delete(e);
18
+ }
19
+ get(e) {
20
+ return this.renderers.get(e);
21
+ }
22
+ has(e) {
23
+ return this.renderers.has(e);
24
+ }
25
+ getRegisteredTypes() {
26
+ return Array.from(this.renderers.keys());
27
+ }
28
+ }
29
+ export {
30
+ t as ObjectRegistry
31
+ };
32
+ //# sourceMappingURL=object-registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"object-registry.js","sources":["../../../core/registry/object-registry.ts"],"sourcesContent":["import type { ComponentType } from 'react'\nimport type { ThreeEvent } from '@react-three/fiber'\nimport type { CustomObject } from '../../types'\n\nexport interface ObjectRendererProps {\n /** Full object entry from the scene JSON. */\n object: CustomObject\n /** Click handler pre-wired to emit `object:click`; attach it to your mesh. */\n onClick?: (event: ThreeEvent<MouseEvent>) => void\n /** Whether the owning space currently has physics enabled. */\n physics?: boolean\n /** Whether the object should skip animation work (non-active space). */\n static?: boolean\n}\n\nexport type ObjectRenderer = ComponentType<ObjectRendererProps>\n\n/**\n * Maps `CustomObject.type` values from the scene JSON to React components.\n *\n * Pass your own instance to a viewer to add object types, or to replace a\n * built-in renderer. Built-ins are installed with {@link registerDefault}, so\n * anything you `register()` before mount always wins.\n */\nexport class ObjectRegistry {\n private renderers = new Map<string, ObjectRenderer>()\n\n /** Register (or replace) the renderer for an object type. */\n register(type: string, renderer: ObjectRenderer): void {\n this.renderers.set(type, renderer)\n }\n\n /**\n * Register only if the type is not taken. Used for SDK built-ins so a host\n * registration made before mount is never clobbered.\n *\n * @returns whether the renderer was installed.\n */\n registerDefault(type: string, renderer: ObjectRenderer): boolean {\n if (this.renderers.has(type)) return false\n this.renderers.set(type, renderer)\n return true\n }\n\n unregister(type: string): void {\n this.renderers.delete(type)\n }\n\n get(type: string): ObjectRenderer | undefined {\n return this.renderers.get(type)\n }\n\n has(type: string): boolean {\n return this.renderers.has(type)\n }\n\n getRegisteredTypes(): string[] {\n return Array.from(this.renderers.keys())\n }\n}\n"],"names":["ObjectRegistry","type","renderer"],"mappings":"AAwBO,MAAMA,EAAe;AAAA,EAClB,gCAAgB,IAAA;AAAA;AAAA,EAGxB,SAASC,GAAcC,GAAgC;AACrD,SAAK,UAAU,IAAID,GAAMC,CAAQ;AAAA,EACnC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,gBAAgBD,GAAcC,GAAmC;AAC/D,WAAI,KAAK,UAAU,IAAID,CAAI,IAAU,MACrC,KAAK,UAAU,IAAIA,GAAMC,CAAQ,GAC1B;AAAA,EACT;AAAA,EAEA,WAAWD,GAAoB;AAC7B,SAAK,UAAU,OAAOA,CAAI;AAAA,EAC5B;AAAA,EAEA,IAAIA,GAA0C;AAC5C,WAAO,KAAK,UAAU,IAAIA,CAAI;AAAA,EAChC;AAAA,EAEA,IAAIA,GAAuB;AACzB,WAAO,KAAK,UAAU,IAAIA,CAAI;AAAA,EAChC;AAAA,EAEA,qBAA+B;AAC7B,WAAO,MAAM,KAAK,KAAK,UAAU,MAAM;AAAA,EACzC;AACF;"}
@@ -0,0 +1,85 @@
1
+ import { type ConnectorLabelMode, type ConnectorLabelRenderer } from '../core/index.js';
2
+ import type { CharacterControlsConfig } from './characters/character-controls.js';
3
+ import type { LocalCharacterModelProp } from './characters/local-character-model.js';
4
+ import { type PortalNavigateHandler } from './hooks/use-explore-actions.js';
5
+ import { type ExploreHelperConfig, type ExploreHelperRenderer } from './overlays/explore-helper.js';
6
+ import { type ExploreSimpleCharacterRoot, type MultiplayerRuntimeConfig } from './simple-character.js';
7
+ import type { CaveViewerBaseProps, ActiveSpaceChangeHandler } from './viewer-shared.js';
8
+ /**
9
+ * Enable multiplayer with an explicit config object, or pass `true` only when
10
+ * you also supply `url` via a follow-up object — bare `true` is rejected.
11
+ */
12
+ export type MultiplayerProp = boolean | MultiplayerRuntimeConfig;
13
+ /** Imperative handle exposed through `ref` on `CaveExplore`. */
14
+ export interface CaveExploreHandle {
15
+ /** Local player's root object, or `null` before the scene mounts. */
16
+ getCharacter(): ExploreSimpleCharacterRoot | null;
17
+ /** Space the player is currently in. */
18
+ getActiveSpaceId(): string | undefined;
19
+ /**
20
+ * Move the local player. Coordinates are base-layer-local in the active
21
+ * space, matching `spawnPoint` / connector conventions; `yaw = 0` faces +Z.
22
+ */
23
+ teleport(pose: {
24
+ position: [number, number, number];
25
+ yaw?: number;
26
+ }): void;
27
+ }
28
+ export interface CaveExploreProps extends CaveViewerBaseProps {
29
+ /**
30
+ * Fired with the id (and loaded config) of the scene the player is currently
31
+ * in — once for the initial scene and again after every seamless / portal
32
+ * transition. Use it to keep scene-scoped UI in sync during cross-scene
33
+ * travel; read the scene name from `space.metadata.name`.
34
+ */
35
+ onActiveSpaceChange?: ActiveSpaceChangeHandler;
36
+ /**
37
+ * Multiplayer character sync. Requires an explicit `url`. Pass `avatars`
38
+ * (or `BUILTIN_AVATARS`) for remote meshes — omitting it does not fall back
39
+ * to the CaveGiant CDN.
40
+ * @default false
41
+ */
42
+ multiplayer?: MultiplayerProp;
43
+ /**
44
+ * Third-person local player mesh. Omit for the viverse mannequin; pass a
45
+ * config with `url` (+ `boneMap` for non-VRM rigs) for a custom GLB/VRM.
46
+ * First-person always hides the body.
47
+ *
48
+ * Must be a stable reference (module constant or `useMemo`) — a new object
49
+ * each render re-loads the GLB and resets locomotion state.
50
+ */
51
+ localCharacterModel?: LocalCharacterModelProp;
52
+ /** Locomotion speeds and input bindings for the local player. */
53
+ characterControls?: CharacterControlsConfig;
54
+ /** Global default for connector wayfinding labels. @default 'auto' */
55
+ connectorLabel?: ConnectorLabelMode;
56
+ /** Replace the built-in connector label visuals. */
57
+ renderConnectorLabel?: ConnectorLabelRenderer;
58
+ /** Configure the first-run controls hint, or `false` to disable it. */
59
+ exploreHelper?: ExploreHelperConfig | false;
60
+ /** Replace the first-run controls hint UI. */
61
+ renderExploreHelper?: ExploreHelperRenderer;
62
+ /**
63
+ * Handle activation of `portal` objects (in-app routes, deep links). Return
64
+ * `true` if handled; otherwise the SDK opens absolute `http(s)` URLs only.
65
+ */
66
+ onPortalNavigate?: PortalNavigateHandler;
67
+ }
68
+ /**
69
+ * Full first/third-person virtual tour: canvas, physics, character controls,
70
+ * cross-scene travel, and the built-in interaction overlays.
71
+ *
72
+ * The container must have a definite width and height — the viewer fills it.
73
+ *
74
+ * @example
75
+ * ```tsx
76
+ * <div style={{ width: '100vw', height: '100vh' }}>
77
+ * <CaveExplore spaceId="my-space" />
78
+ * </div>
79
+ * ```
80
+ */
81
+ declare const CaveExplore: import("react").ForwardRefExoticComponent<CaveExploreProps & import("react").RefAttributes<CaveExploreHandle>>;
82
+ export default CaveExplore;
83
+ /** Re-exported so `ref` consumers don't need a deep import. */
84
+ export type { ExploreSimpleCharacterRoot };
85
+ //# sourceMappingURL=cave-explore.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cave-explore.d.ts","sourceRoot":"","sources":["../../explore/cave-explore.tsx"],"names":[],"mappings":"AAYA,OAAO,EAGL,KAAK,kBAAkB,EACvB,KAAK,sBAAsB,EAC5B,MAAM,SAAS,CAAA;AAUhB,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,iCAAiC,CAAA;AAC9E,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,oCAAoC,CAAA;AAMjF,OAAO,EAAqB,KAAK,qBAAqB,EAAE,MAAM,6BAA6B,CAAA;AAQ3F,OAAsB,EACpB,KAAK,mBAAmB,EACxB,KAAK,qBAAqB,EAC3B,MAAM,2BAA2B,CAAA;AAElC,OAA+B,EAC7B,KAAK,0BAA0B,EAC/B,KAAK,wBAAwB,EAC9B,MAAM,oBAAoB,CAAA;AAQ3B,OAAO,KAAK,EAAE,mBAAmB,EAAE,wBAAwB,EAAE,MAAM,iBAAiB,CAAA;AAMpF;;;GAGG;AACH,MAAM,MAAM,eAAe,GAAG,OAAO,GAAG,wBAAwB,CAAA;AA6BhE,gEAAgE;AAChE,MAAM,WAAW,iBAAiB;IAChC,qEAAqE;IACrE,YAAY,IAAI,0BAA0B,GAAG,IAAI,CAAA;IACjD,wCAAwC;IACxC,gBAAgB,IAAI,MAAM,GAAG,SAAS,CAAA;IACtC;;;OAGG;IACH,QAAQ,CAAC,IAAI,EAAE;QAAE,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;QAAC,GAAG,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAA;CAC3E;AAED,MAAM,WAAW,gBAAiB,SAAQ,mBAAmB;IAC3D;;;;;OAKG;IACH,mBAAmB,CAAC,EAAE,wBAAwB,CAAA;IAE9C;;;;;OAKG;IACH,WAAW,CAAC,EAAE,eAAe,CAAA;IAE7B;;;;;;;OAOG;IACH,mBAAmB,CAAC,EAAE,uBAAuB,CAAA;IAC7C,iEAAiE;IACjE,iBAAiB,CAAC,EAAE,uBAAuB,CAAA;IAE3C,sEAAsE;IACtE,cAAc,CAAC,EAAE,kBAAkB,CAAA;IACnC,oDAAoD;IACpD,oBAAoB,CAAC,EAAE,sBAAsB,CAAA;IAE7C,uEAAuE;IACvE,aAAa,CAAC,EAAE,mBAAmB,GAAG,KAAK,CAAA;IAC3C,8CAA8C;IAC9C,mBAAmB,CAAC,EAAE,qBAAqB,CAAA;IAE3C;;;OAGG;IACH,gBAAgB,CAAC,EAAE,qBAAqB,CAAA;CACzC;AAiND;;;;;;;;;;;;GAYG;AACH,QAAA,MAAM,WAAW,gHAiBhB,CAAA;AAED,eAAe,WAAW,CAAA;AAE1B,+DAA+D;AAC/D,YAAY,EAAE,0BAA0B,EAAE,CAAA"}
@@ -0,0 +1,204 @@
1
+ import { jsx as t, jsxs as A } from "react/jsx-runtime";
2
+ import { forwardRef as X, useState as Y, useRef as b, useCallback as m, useEffect as x, useImperativeHandle as Z, useMemo as $, Suspense as v } from "react";
3
+ import { Canvas as ee } from "@react-three/fiber";
4
+ import { BvhPhysicsWorld as re } from "@react-three/viverse";
5
+ import { CaveWorldProvider as te } from "../core/context/cave-world-context.js";
6
+ import { createLogger as oe } from "../core/logging/logger.js";
7
+ import { REVEAL_ON_ENTER_DEFAULT_ENABLED as ae } from "../space/splats/spark/splat-spread-reveal.js";
8
+ import { useVisibilityFrameloop as ne } from "../space/utils/use-visibility-frameloop.js";
9
+ import { getSparkCanvasDpr as ie } from "../space/utils/spark-performance.js";
10
+ import { configureSparkWebGLRenderer as ce, configureCaveCanvasDomElement as se } from "../space/utils/configure-canvas.js";
11
+ import { applyCharacterPose as R } from "./characters/character-pose.js";
12
+ import le from "./connected-spaces-renderer.js";
13
+ import { useActionShortcuts as me } from "./hooks/use-action-shortcuts.js";
14
+ import { useActiveSpaceNotify as pe } from "./hooks/use-active-space-notify.js";
15
+ import { preloadSpaceAssets as ue, useConnectorPreloader as de } from "./hooks/use-connector-preloader.js";
16
+ import { useConnectorTransitions as fe } from "./hooks/use-connector-transitions.js";
17
+ import { useExploreActions as ve } from "./hooks/use-explore-actions.js";
18
+ import { useLoadErrorNotify as Se } from "./hooks/use-load-error-notify.js";
19
+ import { usePrimarySpaceLoader as Ce } from "./hooks/use-primary-space-loader.js";
20
+ import { DefaultCaveSpaceLoader as ye } from "./loaders/cave-loader.js";
21
+ import Ee from "./overlays/action-bubble.js";
22
+ import ge from "./overlays/action-panel.js";
23
+ import Le from "./overlays/connector-label-beacon.js";
24
+ import he from "./overlays/detail-window.js";
25
+ import Ae from "./overlays/explore-helper.js";
26
+ import be from "./overlays/space-load-error-overlay.js";
27
+ import xe from "./simple-character.js";
28
+ import { CaveExploreProvider as Re, useCaveExploreStore as we, useActionPromptStore as Pe } from "./stores/explore-context.js";
29
+ import { computeSpawnPose as w, matrixFromM16 as P } from "./math/space-transforms.js";
30
+ import { useCaveWorldStyles as Ie } from "./styles/inject.js";
31
+ const De = { fov: 65, near: 0.1, far: 3e3 }, Te = { antialias: !1 }, I = oe("explore:multiplayer");
32
+ function ke(c) {
33
+ if (!c) return;
34
+ const r = c === !0 ? {} : c;
35
+ if (!r.url) {
36
+ I.warn(
37
+ 'multiplayer requires an explicit `url` (e.g. multiplayer={{ url: "wss://…" }}). Bare `true` or a config without `url` is ignored. Import DEFAULT_WEBSOCKET_URL only if you intentionally use the CaveGiant demo backend.'
38
+ );
39
+ return;
40
+ }
41
+ return r.avatars || I.warn(
42
+ "multiplayer.avatars was omitted — remote players will not resolve against the CaveGiant CDN. Pass your own catalog, or import BUILTIN_AVATARS for the demo assets."
43
+ ), {
44
+ url: r.url,
45
+ avatarId: r.avatarId,
46
+ avatars: r.avatars,
47
+ maxRemoteCharacters: r.maxRemoteCharacters
48
+ };
49
+ }
50
+ function Be({
51
+ props: c,
52
+ handleRef: r
53
+ }) {
54
+ const {
55
+ spaceId: o,
56
+ caveSpaceLoader: S = ye,
57
+ onSpaceInitialized: C,
58
+ onActiveSpaceChange: D,
59
+ multiplayer: y,
60
+ localCharacterModel: T,
61
+ characterControls: k,
62
+ revealOnEnter: B,
63
+ injectStyles: N,
64
+ exploreHelper: E,
65
+ renderExploreHelper: _,
66
+ renderDetailWindow: g,
67
+ onPortalNavigate: M,
68
+ onLoadError: W,
69
+ onLoadErrorExit: F,
70
+ renderLoadError: U,
71
+ children: j
72
+ } = c, a = we(), p = Pe(), [u, L] = Y(!1), s = b(null), f = b(void 0);
73
+ Ie(N ?? !0);
74
+ const H = m(() => {
75
+ L(!1), f.current = void 0, p.getState().clearActions(), a.getState().setActiveConnector(void 0);
76
+ }, [p, a]), O = m(
77
+ (e, n) => {
78
+ ue(n);
79
+ const i = a.getState();
80
+ i.setConnectedSpace(e, n), i.setActiveSpaceId(e);
81
+ },
82
+ [a]
83
+ );
84
+ Ce({
85
+ spaceId: o,
86
+ loader: S,
87
+ onLoaded: O,
88
+ onReset: H
89
+ }), pe(D), Se(W), de(S, o, u), fe(o, s), ve(M), me();
90
+ const q = m(() => {
91
+ L(!0), C?.();
92
+ }, [C]);
93
+ x(() => {
94
+ const e = a, n = p;
95
+ return () => {
96
+ n.getState().clearActions(), e.getState().clearConnectedSpaces();
97
+ };
98
+ }, [a, p]);
99
+ const h = m(
100
+ (e) => {
101
+ const n = s.current;
102
+ if (!n) return;
103
+ const i = a.getState(), l = i.activeSpaceId, d = l ? i.connectedSpaces[l] : void 0;
104
+ if (!d) return;
105
+ const { position: J, quaternion: Q } = w(
106
+ { position: e.position, yaw: e.yaw ?? 0 },
107
+ d.baseLayer.transform,
108
+ l ? P(i.spaceTransforms[l]) : void 0
109
+ );
110
+ R(n, J, Q);
111
+ },
112
+ [a]
113
+ );
114
+ Z(
115
+ r,
116
+ () => ({
117
+ getCharacter: () => s.current,
118
+ getActiveSpaceId: () => a.getState().activeSpaceId,
119
+ teleport: h
120
+ }),
121
+ [a, h]
122
+ ), x(() => {
123
+ if (!u || !o || !s.current || f.current === o) return;
124
+ f.current = o;
125
+ const e = a.getState(), n = e.connectedSpaces[o], i = n?.baseLayer?.spawnPoint;
126
+ if (!i) return;
127
+ const { position: l, quaternion: d } = w(
128
+ i,
129
+ n.baseLayer.transform,
130
+ P(e.spaceTransforms[o])
131
+ );
132
+ R(s.current, l, d);
133
+ }, [u, o, a]);
134
+ const G = ne(), V = ie(), z = $(() => ke(y), [y]), K = m((e) => {
135
+ if (e.button === 2) {
136
+ document.exitPointerLock();
137
+ return;
138
+ }
139
+ e.pointerType === "mouse" && e.button === 0 && e.target instanceof HTMLCanvasElement && e.target.requestPointerLock();
140
+ }, []);
141
+ return /* @__PURE__ */ A("div", { className: "cw-root", children: [
142
+ /* @__PURE__ */ t(
143
+ ee,
144
+ {
145
+ dpr: V,
146
+ frameloop: G,
147
+ gl: Te,
148
+ camera: De,
149
+ onCreated: ({ gl: e }) => {
150
+ ce(e), se(e.domElement);
151
+ },
152
+ onPointerDown: K,
153
+ children: /* @__PURE__ */ t(v, { fallback: null, children: /* @__PURE__ */ A(re, { children: [
154
+ /* @__PURE__ */ t(
155
+ le,
156
+ {
157
+ primarySpaceId: o,
158
+ revealOnEnter: B ?? ae,
159
+ connectorLabels: !0,
160
+ onPrimaryInitialized: q
161
+ }
162
+ ),
163
+ /* @__PURE__ */ t(v, { fallback: null, children: /* @__PURE__ */ t(
164
+ xe,
165
+ {
166
+ ref: s,
167
+ spaceInited: u,
168
+ spaceId: o,
169
+ multiplayer: z,
170
+ localCharacterModel: T,
171
+ characterControls: k
172
+ }
173
+ ) }),
174
+ /* @__PURE__ */ t(Ee, {}),
175
+ /* @__PURE__ */ t(v, { fallback: null, children: j })
176
+ ] }) })
177
+ }
178
+ ),
179
+ g ? g() : /* @__PURE__ */ t(he, {}),
180
+ /* @__PURE__ */ t(ge, {}),
181
+ E === !1 ? null : /* @__PURE__ */ t(Ae, { config: E, render: _ }),
182
+ /* @__PURE__ */ t(be, { onExit: F, render: U })
183
+ ] });
184
+ }
185
+ const mr = X(
186
+ function(r, o) {
187
+ return /* @__PURE__ */ t(
188
+ te,
189
+ {
190
+ eventBus: r.eventBus,
191
+ objectRegistry: r.objectRegistry,
192
+ componentRegistry: r.componentRegistry,
193
+ messages: r.messages,
194
+ connectorLabel: r.connectorLabel ?? "auto",
195
+ connectorLabelRenderer: r.renderConnectorLabel ?? Le,
196
+ children: /* @__PURE__ */ t(Re, { children: /* @__PURE__ */ t(Be, { props: r, handleRef: o }) })
197
+ }
198
+ );
199
+ }
200
+ );
201
+ export {
202
+ mr as default
203
+ };
204
+ //# sourceMappingURL=cave-explore.js.map