@iwsdk/core 0.4.2 → 0.5.1

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 (312) hide show
  1. package/README.md +4 -7
  2. package/dist/asset/asset-manager.d.ts +136 -8
  3. package/dist/asset/asset-manager.d.ts.map +1 -1
  4. package/dist/asset/asset-manager.js +491 -47
  5. package/dist/asset/asset-manager.js.map +1 -1
  6. package/dist/asset/cache-manager.d.ts +4 -2
  7. package/dist/asset/cache-manager.d.ts.map +1 -1
  8. package/dist/asset/cache-manager.js +10 -3
  9. package/dist/asset/cache-manager.js.map +1 -1
  10. package/dist/asset/loaders/audio-loader.d.ts +1 -1
  11. package/dist/asset/loaders/audio-loader.d.ts.map +1 -1
  12. package/dist/asset/loaders/audio-loader.js +8 -26
  13. package/dist/asset/loaders/audio-loader.js.map +1 -1
  14. package/dist/asset/loaders/cached-asset-load.d.ts +35 -0
  15. package/dist/asset/loaders/cached-asset-load.d.ts.map +1 -0
  16. package/dist/asset/loaders/cached-asset-load.js +100 -0
  17. package/dist/asset/loaders/cached-asset-load.js.map +1 -0
  18. package/dist/asset/loaders/gltf-loader.d.ts +28 -1
  19. package/dist/asset/loaders/gltf-loader.d.ts.map +1 -1
  20. package/dist/asset/loaders/gltf-loader.js +254 -33
  21. package/dist/asset/loaders/gltf-loader.js.map +1 -1
  22. package/dist/asset/loaders/hdr-texture-loader.d.ts +1 -1
  23. package/dist/asset/loaders/hdr-texture-loader.d.ts.map +1 -1
  24. package/dist/asset/loaders/hdr-texture-loader.js +19 -29
  25. package/dist/asset/loaders/hdr-texture-loader.js.map +1 -1
  26. package/dist/asset/loaders/texture-loader.d.ts +1 -1
  27. package/dist/asset/loaders/texture-loader.d.ts.map +1 -1
  28. package/dist/asset/loaders/texture-loader.js +9 -26
  29. package/dist/asset/loaders/texture-loader.js.map +1 -1
  30. package/dist/asset/loaders/uikitml-loader.d.ts +12 -0
  31. package/dist/asset/loaders/uikitml-loader.d.ts.map +1 -0
  32. package/dist/asset/loaders/uikitml-loader.js +44 -0
  33. package/dist/asset/loaders/uikitml-loader.js.map +1 -0
  34. package/dist/audio/audio-pool.d.ts +7 -0
  35. package/dist/audio/audio-pool.d.ts.map +1 -1
  36. package/dist/audio/audio-pool.js.map +1 -1
  37. package/dist/audio/audio-system.d.ts +1 -0
  38. package/dist/audio/audio-system.d.ts.map +1 -1
  39. package/dist/audio/audio-system.js +16 -2
  40. package/dist/audio/audio-system.js.map +1 -1
  41. package/dist/camera/camera-system.d.ts.map +1 -1
  42. package/dist/camera/camera-system.js +5 -3
  43. package/dist/camera/camera-system.js.map +1 -1
  44. package/dist/depth/depth-sensing-system.d.ts.map +1 -1
  45. package/dist/depth/depth-sensing-system.js +31 -10
  46. package/dist/depth/depth-sensing-system.js.map +1 -1
  47. package/dist/ecs/builtin-components.d.ts +1239 -0
  48. package/dist/ecs/builtin-components.d.ts.map +1 -0
  49. package/dist/ecs/builtin-components.js +87 -0
  50. package/dist/ecs/builtin-components.js.map +1 -0
  51. package/dist/ecs/component-editor-metadata.d.ts +19 -0
  52. package/dist/ecs/component-editor-metadata.d.ts.map +1 -0
  53. package/dist/ecs/component-editor-metadata.js +19 -0
  54. package/dist/ecs/component-editor-metadata.js.map +1 -0
  55. package/dist/ecs/component-manifest.d.ts +24 -0
  56. package/dist/ecs/component-manifest.d.ts.map +1 -0
  57. package/dist/ecs/component-manifest.js +121 -0
  58. package/dist/ecs/component-manifest.js.map +1 -0
  59. package/dist/ecs/component.d.ts +1 -0
  60. package/dist/ecs/component.d.ts.map +1 -1
  61. package/dist/ecs/entity.d.ts +20 -2
  62. package/dist/ecs/entity.d.ts.map +1 -1
  63. package/dist/ecs/entity.js +59 -3
  64. package/dist/ecs/entity.js.map +1 -1
  65. package/dist/ecs/index.d.ts +3 -1
  66. package/dist/ecs/index.d.ts.map +1 -1
  67. package/dist/ecs/system.d.ts +9 -0
  68. package/dist/ecs/system.d.ts.map +1 -1
  69. package/dist/ecs/system.js.map +1 -1
  70. package/dist/ecs/world.d.ts +158 -4
  71. package/dist/ecs/world.d.ts.map +1 -1
  72. package/dist/ecs/world.js +304 -5
  73. package/dist/ecs/world.js.map +1 -1
  74. package/dist/environment/dome-gradient.d.ts +2 -1
  75. package/dist/environment/dome-gradient.d.ts.map +1 -1
  76. package/dist/environment/dome-gradient.js +2 -1
  77. package/dist/environment/dome-gradient.js.map +1 -1
  78. package/dist/environment/environment-system.d.ts +19 -3
  79. package/dist/environment/environment-system.d.ts.map +1 -1
  80. package/dist/environment/environment-system.js +78 -48
  81. package/dist/environment/environment-system.js.map +1 -1
  82. package/dist/environment/gradient-environment.d.ts.map +1 -1
  83. package/dist/environment/gradient-environment.js +13 -7
  84. package/dist/environment/gradient-environment.js.map +1 -1
  85. package/dist/environment/scene-ar-environment.d.ts +39 -0
  86. package/dist/environment/scene-ar-environment.d.ts.map +1 -0
  87. package/dist/environment/scene-ar-environment.js +93 -0
  88. package/dist/environment/scene-ar-environment.js.map +1 -0
  89. package/dist/grab/grab-helpers.d.ts +39 -0
  90. package/dist/grab/grab-helpers.d.ts.map +1 -0
  91. package/dist/grab/grab-helpers.js +59 -0
  92. package/dist/grab/grab-helpers.js.map +1 -0
  93. package/dist/grab/grab-system.d.ts +45 -0
  94. package/dist/grab/grab-system.d.ts.map +1 -1
  95. package/dist/grab/grab-system.js +67 -5
  96. package/dist/grab/grab-system.js.map +1 -1
  97. package/dist/grab/grab-warnings.d.ts +14 -0
  98. package/dist/grab/grab-warnings.d.ts.map +1 -0
  99. package/dist/grab/grab-warnings.js +53 -0
  100. package/dist/grab/grab-warnings.js.map +1 -0
  101. package/dist/grab/handles.d.ts.map +1 -1
  102. package/dist/grab/handles.js +8 -3
  103. package/dist/grab/handles.js.map +1 -1
  104. package/dist/index.d.ts +4 -0
  105. package/dist/index.d.ts.map +1 -1
  106. package/dist/index.js +42 -16
  107. package/dist/index.js.map +1 -1
  108. package/dist/init/world-initializer.d.ts +11 -7
  109. package/dist/init/world-initializer.d.ts.map +1 -1
  110. package/dist/init/world-initializer.js +118 -57
  111. package/dist/init/world-initializer.js.map +1 -1
  112. package/dist/init/xr.d.ts +0 -1
  113. package/dist/init/xr.d.ts.map +1 -1
  114. package/dist/init/xr.js +12 -3
  115. package/dist/init/xr.js.map +1 -1
  116. package/dist/input/input-system.d.ts.map +1 -1
  117. package/dist/input/input-system.js +26 -11
  118. package/dist/input/input-system.js.map +1 -1
  119. package/dist/layers/xr-layer-state.d.ts +47 -0
  120. package/dist/layers/xr-layer-state.d.ts.map +1 -0
  121. package/dist/layers/xr-layer-state.js +23 -0
  122. package/dist/layers/xr-layer-state.js.map +1 -0
  123. package/dist/layers/xr-layer-system.d.ts +45 -93
  124. package/dist/layers/xr-layer-system.d.ts.map +1 -1
  125. package/dist/layers/xr-layer-system.js +4 -25
  126. package/dist/layers/xr-layer-system.js.map +1 -1
  127. package/dist/level/index.d.ts +6 -2
  128. package/dist/level/index.d.ts.map +1 -1
  129. package/dist/level/level-component-applier.d.ts +24 -0
  130. package/dist/level/level-component-applier.d.ts.map +1 -0
  131. package/dist/level/level-component-applier.js +199 -0
  132. package/dist/level/level-component-applier.js.map +1 -0
  133. package/dist/level/level-player-rig.d.ts +17 -0
  134. package/dist/level/level-player-rig.d.ts.map +1 -0
  135. package/dist/level/level-player-rig.js +113 -0
  136. package/dist/level/level-player-rig.js.map +1 -0
  137. package/dist/level/level-scene-environment.d.ts +28 -0
  138. package/dist/level/level-scene-environment.d.ts.map +1 -0
  139. package/dist/level/level-scene-environment.js +121 -0
  140. package/dist/level/level-scene-environment.js.map +1 -0
  141. package/dist/level/level-scene-json-importer.d.ts +53 -0
  142. package/dist/level/level-scene-json-importer.d.ts.map +1 -0
  143. package/dist/level/level-scene-json-importer.js +256 -0
  144. package/dist/level/level-scene-json-importer.js.map +1 -0
  145. package/dist/level/level-scene-material.d.ts +22 -0
  146. package/dist/level/level-scene-material.d.ts.map +1 -0
  147. package/dist/level/level-scene-material.js +231 -0
  148. package/dist/level/level-scene-material.js.map +1 -0
  149. package/dist/level/level-scene-object.d.ts +49 -0
  150. package/dist/level/level-scene-object.d.ts.map +1 -0
  151. package/dist/level/level-scene-object.js +396 -0
  152. package/dist/level/level-scene-object.js.map +1 -0
  153. package/dist/level/level-scene-primitive.d.ts +21 -0
  154. package/dist/level/level-scene-primitive.d.ts.map +1 -0
  155. package/dist/level/level-scene-primitive.js +159 -0
  156. package/dist/level/level-scene-primitive.js.map +1 -0
  157. package/dist/level/level-system.d.ts +14 -20
  158. package/dist/level/level-system.d.ts.map +1 -1
  159. package/dist/level/level-system.js +114 -49
  160. package/dist/level/level-system.js.map +1 -1
  161. package/dist/lighting/index.d.ts +10 -0
  162. package/dist/lighting/index.d.ts.map +1 -0
  163. package/dist/lighting/index.js +4 -0
  164. package/dist/lighting/index.js.map +1 -0
  165. package/dist/lighting/light-binding.d.ts +76 -0
  166. package/dist/lighting/light-binding.d.ts.map +1 -0
  167. package/dist/lighting/light-binding.js +229 -0
  168. package/dist/lighting/light-binding.js.map +1 -0
  169. package/dist/lighting/light-components.d.ts +885 -0
  170. package/dist/lighting/light-components.d.ts.map +1 -0
  171. package/dist/lighting/light-components.js +146 -0
  172. package/dist/lighting/light-components.js.map +1 -0
  173. package/dist/lighting/light-system.d.ts +919 -0
  174. package/dist/lighting/light-system.d.ts.map +1 -0
  175. package/dist/lighting/light-system.js +244 -0
  176. package/dist/lighting/light-system.js.map +1 -0
  177. package/dist/locomotion/locomotion-environment.d.ts +27 -0
  178. package/dist/locomotion/locomotion-environment.d.ts.map +1 -0
  179. package/dist/locomotion/locomotion-environment.js +22 -0
  180. package/dist/locomotion/locomotion-environment.js.map +1 -0
  181. package/dist/locomotion/locomotion.d.ts +5 -34
  182. package/dist/locomotion/locomotion.d.ts.map +1 -1
  183. package/dist/locomotion/locomotion.js +33 -31
  184. package/dist/locomotion/locomotion.js.map +1 -1
  185. package/dist/locomotion/materials/line.js +1 -1
  186. package/dist/locomotion/slide.d.ts.map +1 -1
  187. package/dist/locomotion/slide.js +2 -2
  188. package/dist/locomotion/slide.js.map +1 -1
  189. package/dist/mcp/ecs-debug-tools.d.ts.map +1 -1
  190. package/dist/mcp/ecs-debug-tools.js +10 -2
  191. package/dist/mcp/ecs-debug-tools.js.map +1 -1
  192. package/dist/mcp/mcp-runtime.d.ts.map +1 -1
  193. package/dist/mcp/mcp-runtime.js +4 -1
  194. package/dist/mcp/mcp-runtime.js.map +1 -1
  195. package/dist/mcp/scene-tools.d.ts +152 -1
  196. package/dist/mcp/scene-tools.d.ts.map +1 -1
  197. package/dist/mcp/scene-tools.js +538 -8
  198. package/dist/mcp/scene-tools.js.map +1 -1
  199. package/dist/physics/index.js +11 -4
  200. package/dist/physics/index.js.map +1 -1
  201. package/dist/physics/physics-system.d.ts +704 -11
  202. package/dist/physics/physics-system.d.ts.map +1 -1
  203. package/dist/physics/physics-system.js +307 -25
  204. package/dist/physics/physics-system.js.map +1 -1
  205. package/dist/physics/physicsBody.d.ts +40 -1
  206. package/dist/physics/physicsBody.d.ts.map +1 -1
  207. package/dist/physics/physicsBody.js +39 -0
  208. package/dist/physics/physicsBody.js.map +1 -1
  209. package/dist/physics/physicsManipulation.d.ts +1 -1
  210. package/dist/physics/physicsManipulation.d.ts.map +1 -1
  211. package/dist/physics/physicsShape.d.ts +5 -3
  212. package/dist/physics/physicsShape.d.ts.map +1 -1
  213. package/dist/physics/physicsShape.js +2 -1
  214. package/dist/physics/physicsShape.js.map +1 -1
  215. package/dist/physics/utils.d.ts +10 -0
  216. package/dist/physics/utils.d.ts.map +1 -1
  217. package/dist/physics/utils.js +82 -48
  218. package/dist/physics/utils.js.map +1 -1
  219. package/dist/project/index.d.ts +11 -0
  220. package/dist/project/index.d.ts.map +1 -0
  221. package/dist/project/index.js +5 -0
  222. package/dist/project/index.js.map +1 -0
  223. package/dist/project/normalize.d.ts +19 -0
  224. package/dist/project/normalize.d.ts.map +1 -0
  225. package/dist/project/normalize.js +206 -0
  226. package/dist/project/normalize.js.map +1 -0
  227. package/dist/project/paths.d.ts +21 -0
  228. package/dist/project/paths.d.ts.map +1 -0
  229. package/dist/project/paths.js +75 -0
  230. package/dist/project/paths.js.map +1 -0
  231. package/dist/project/types.d.ts +159 -0
  232. package/dist/project/types.d.ts.map +1 -0
  233. package/dist/project/types.js +11 -0
  234. package/dist/project/types.js.map +1 -0
  235. package/dist/project/validation.d.ts +17 -0
  236. package/dist/project/validation.d.ts.map +1 -0
  237. package/dist/project/validation.js +501 -0
  238. package/dist/project/validation.js.map +1 -0
  239. package/dist/scene-understanding/scene-understanding-system.d.ts +23 -2
  240. package/dist/scene-understanding/scene-understanding-system.d.ts.map +1 -1
  241. package/dist/scene-understanding/scene-understanding-system.js +76 -54
  242. package/dist/scene-understanding/scene-understanding-system.js.map +1 -1
  243. package/dist/schemas/iwsdk-project.v1.schema.json +305 -0
  244. package/dist/transform/transform-component.d.ts +32 -0
  245. package/dist/transform/transform-component.d.ts.map +1 -0
  246. package/dist/transform/transform-component.js +24 -0
  247. package/dist/transform/transform-component.js.map +1 -0
  248. package/dist/transform/transform.d.ts +9 -42
  249. package/dist/transform/transform.d.ts.map +1 -1
  250. package/dist/transform/transform.js +8 -25
  251. package/dist/transform/transform.js.map +1 -1
  252. package/dist/ui/document.d.ts +9 -2
  253. package/dist/ui/document.d.ts.map +1 -1
  254. package/dist/ui/document.js +30 -5
  255. package/dist/ui/document.js.map +1 -1
  256. package/dist/ui/follow-component.d.ts +57 -0
  257. package/dist/ui/follow-component.d.ts.map +1 -0
  258. package/dist/ui/follow-component.js +38 -0
  259. package/dist/ui/follow-component.js.map +1 -0
  260. package/dist/ui/follow.d.ts +28 -102
  261. package/dist/ui/follow.d.ts.map +1 -1
  262. package/dist/ui/follow.js +10 -48
  263. package/dist/ui/follow.js.map +1 -1
  264. package/dist/ui/index.d.ts +3 -0
  265. package/dist/ui/index.d.ts.map +1 -1
  266. package/dist/ui/panel-components.d.ts +29 -0
  267. package/dist/ui/panel-components.d.ts.map +1 -0
  268. package/dist/ui/panel-components.js +22 -0
  269. package/dist/ui/panel-components.js.map +1 -0
  270. package/dist/ui/screenspace-component.d.ts +39 -0
  271. package/dist/ui/screenspace-component.d.ts.map +1 -0
  272. package/dist/ui/screenspace-component.js +21 -0
  273. package/dist/ui/screenspace-component.js.map +1 -0
  274. package/dist/ui/screenspace.d.ts +47 -135
  275. package/dist/ui/screenspace.d.ts.map +1 -1
  276. package/dist/ui/screenspace.js +127 -65
  277. package/dist/ui/screenspace.js.map +1 -1
  278. package/dist/ui/ui.d.ts +20 -122
  279. package/dist/ui/ui.d.ts.map +1 -1
  280. package/dist/ui/ui.js +44 -107
  281. package/dist/ui/ui.js.map +1 -1
  282. package/dist/ui/uikitml-asset.d.ts +25 -0
  283. package/dist/ui/uikitml-asset.d.ts.map +1 -0
  284. package/dist/ui/uikitml-asset.js +56 -0
  285. package/dist/ui/uikitml-asset.js.map +1 -0
  286. package/dist/ui/uikitml.d.ts +41 -0
  287. package/dist/ui/uikitml.d.ts.map +1 -0
  288. package/dist/ui/uikitml.js +119 -0
  289. package/dist/ui/uikitml.js.map +1 -0
  290. package/dist/version.d.ts +1 -1
  291. package/dist/version.js +1 -1
  292. package/dist/visibility/visibility-component.d.ts +14 -0
  293. package/dist/visibility/visibility-component.d.ts.map +1 -0
  294. package/dist/visibility/visibility-component.js +15 -0
  295. package/dist/visibility/visibility-component.js.map +1 -0
  296. package/dist/visibility/visibility.d.ts +3 -10
  297. package/dist/visibility/visibility.d.ts.map +1 -1
  298. package/dist/visibility/visibility.js +9 -12
  299. package/dist/visibility/visibility.js.map +1 -1
  300. package/package.json +36 -8
  301. package/dist/ecs/component-registry.d.ts +0 -54
  302. package/dist/ecs/component-registry.d.ts.map +0 -1
  303. package/dist/ecs/component-registry.js +0 -86
  304. package/dist/ecs/component-registry.js.map +0 -1
  305. package/dist/level/level-entity-creator.d.ts +0 -27
  306. package/dist/level/level-entity-creator.d.ts.map +0 -1
  307. package/dist/level/level-entity-creator.js +0 -108
  308. package/dist/level/level-entity-creator.js.map +0 -1
  309. package/dist/level/level-glxf-importer.d.ts +0 -23
  310. package/dist/level/level-glxf-importer.d.ts.map +0 -1
  311. package/dist/level/level-glxf-importer.js +0 -40
  312. package/dist/level/level-glxf-importer.js.map +0 -1
@@ -0,0 +1,119 @@
1
+ import { instantiate, resolveKitComponentSets, parse } from '@drawcall/uikitml';
2
+ import { reversePainterSortStable, StyleSheet } from '@pmndrs/uikit';
3
+ import { AssetManager } from '../asset/asset-manager.js';
4
+ import { CacheManager } from '../asset/cache-manager.js';
5
+ import { UIKitDocument } from './document.js';
6
+ import { UIKitMLAsset } from './uikitml-asset.js';
7
+
8
+ /**
9
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
10
+ *
11
+ * This source code is licensed under the MIT license found in the
12
+ * LICENSE file in the root directory of this source tree.
13
+ */
14
+ /** Default component collection for IWSDK panels. */
15
+ const DEFAULT_UIKITML_KIT = 'horizon';
16
+ /** Configure a renderer for UIKit clipping and transparent painter order. */
17
+ function configureUIKitRenderer(renderer) {
18
+ renderer.setTransparentSort(reversePainterSortStable);
19
+ renderer.localClippingEnabled = true;
20
+ }
21
+ function formatParseError(error) {
22
+ var _a;
23
+ const position = (_a = error.range) === null || _a === void 0 ? void 0 : _a.start;
24
+ const location = position ? ` at ${position.line}:${position.column}` : '';
25
+ return `${error.message}${location}`;
26
+ }
27
+ function resolveFontFaceURLs(ast, sourceURL) {
28
+ if (!sourceURL || !ast.fontFaces) {
29
+ return;
30
+ }
31
+ for (const fontFace of ast.fontFaces) {
32
+ try {
33
+ fontFace.src = new URL(fontFace.src, sourceURL).href;
34
+ }
35
+ catch (_a) {
36
+ // Preserve values such as application-owned URL schemes that the
37
+ // platform loader may still understand.
38
+ }
39
+ }
40
+ }
41
+ function getComponentSets(options) {
42
+ var _a, _b;
43
+ return [
44
+ ...resolveKitComponentSets((_a = options.kit) !== null && _a !== void 0 ? _a : DEFAULT_UIKITML_KIT),
45
+ ...((_b = options.componentSets) !== null && _b !== void 0 ? _b : []),
46
+ ];
47
+ }
48
+ async function preloadTTFFonts(root, ast) {
49
+ var _a, _b;
50
+ // UIKit does not expose its resolved font loaders until the component is
51
+ // attached, but UIKitML installs them on the root's constructor input.
52
+ const fontFamilies = (_a = root.inputProperties) === null || _a === void 0 ? void 0 : _a.fontFamilies;
53
+ if (!fontFamilies ||
54
+ typeof fontFamilies !== 'object' ||
55
+ Array.isArray(fontFamilies)) {
56
+ return;
57
+ }
58
+ // UIKitML's font loaders share their generated atlas cache. Resolve the
59
+ // declared faces serially before the first render so text cannot disappear
60
+ // from an initial runtime frame or editor preview capture.
61
+ for (const fontFace of (_b = ast.fontFaces) !== null && _b !== void 0 ? _b : []) {
62
+ const family = fontFamilies[fontFace.fontFamily];
63
+ if (!family || typeof family !== 'object' || Array.isArray(family)) {
64
+ continue;
65
+ }
66
+ const load = family[fontFace.fontWeight];
67
+ if (typeof load === 'function') {
68
+ await load();
69
+ }
70
+ }
71
+ }
72
+ /**
73
+ * Parse UIKitML source and resolve its relative TTF declarations.
74
+ *
75
+ * @param source UIKitML markup.
76
+ * @param sourceURL URL of the UIKitML document, used as the base for font URLs.
77
+ * @param options Parser and component-set options.
78
+ */
79
+ function parseUIKitMLSource(source, sourceURL, options = {}) {
80
+ const componentSets = getComponentSets(options);
81
+ const result = parse(source, { componentSets });
82
+ if (!result.success) {
83
+ throw new Error(result.errors.map(formatParseError).join('\n'));
84
+ }
85
+ resolveFontFaceURLs(result.ast, sourceURL);
86
+ return result.ast;
87
+ }
88
+ /** Fetch, parse, and instantiate a UIKitML document. */
89
+ async function loadUIKitMLComponent(configURL, options = {}) {
90
+ const source = await AssetManager.loadUIKitML(configURL, undefined, options.forceReload);
91
+ const resolvedURL = CacheManager.resolveUrl(configURL);
92
+ const sourceURL = typeof document === 'undefined'
93
+ ? resolvedURL
94
+ : new URL(resolvedURL, document.baseURI).href;
95
+ const componentSets = getComponentSets(options);
96
+ let ast;
97
+ try {
98
+ ast = parseUIKitMLSource(source, sourceURL, options);
99
+ }
100
+ catch (error) {
101
+ throw new Error(`Failed to parse UIKitML ${configURL}:\n${error instanceof Error ? error.message : String(error)}`);
102
+ }
103
+ // UIKit resolves class names through its shared stylesheet registry.
104
+ Object.assign(StyleSheet, ast.stylesheet);
105
+ const root = instantiate(ast, {
106
+ componentSets,
107
+ preferredColorScheme: options.preferredColorScheme,
108
+ });
109
+ await preloadTTFFonts(root, ast);
110
+ return root;
111
+ }
112
+ /** Fetch, parse, and instantiate a UIKitML file as a placeable scene asset. */
113
+ async function loadUIKitMLAsset(assetIdOrURL, options = {}) {
114
+ const root = await loadUIKitMLComponent(assetIdOrURL, options);
115
+ return new UIKitMLAsset(assetIdOrURL, new UIKitDocument(root));
116
+ }
117
+
118
+ export { DEFAULT_UIKITML_KIT, configureUIKitRenderer, loadUIKitMLAsset, loadUIKitMLComponent, parseUIKitMLSource };
119
+ //# sourceMappingURL=uikitml.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"uikitml.js","sources":["../../src/ui/uikitml.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
package/dist/version.d.ts CHANGED
@@ -1,2 +1,2 @@
1
- export declare const VERSION = "0.4.2";
1
+ export declare const VERSION = "0.5.1";
2
2
  //# sourceMappingURL=version.d.ts.map
package/dist/version.js CHANGED
@@ -1,4 +1,4 @@
1
- const VERSION = "0.4.2";
1
+ const VERSION = "0.5.1";
2
2
 
3
3
  export { VERSION };
4
4
  //# sourceMappingURL=version.js.map
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
3
+ *
4
+ * This source code is licensed under the MIT license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ */
7
+ import { Types } from '../ecs/component.js';
8
+ export declare const Visibility: import("elics").Component<{
9
+ isVisible: {
10
+ type: Types.Boolean;
11
+ default: true;
12
+ };
13
+ }>;
14
+ //# sourceMappingURL=visibility-component.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"visibility-component.d.ts","sourceRoot":"","sources":["../../src/visibility/visibility-component.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,KAAK,EAAmB,MAAM,qBAAqB,CAAC;AAE7D,eAAO,MAAM,UAAU;;;;;EAStB,CAAC"}
@@ -0,0 +1,15 @@
1
+ import { setComponentEditorMetadata } from '../ecs/component-editor-metadata.js';
2
+ import { createComponent, Types } from 'elics';
3
+
4
+ /**
5
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
6
+ *
7
+ * This source code is licensed under the MIT license found in the
8
+ * LICENSE file in the root directory of this source tree.
9
+ */
10
+ const Visibility = setComponentEditorMetadata(createComponent('Visibility', {
11
+ isVisible: { type: Types.Boolean, default: true },
12
+ }, 'Component to control if an entity object is visible'), { hidden: true, intrinsic: true });
13
+
14
+ export { Visibility };
15
+ //# sourceMappingURL=visibility-component.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"visibility-component.js","sources":["../../src/visibility/visibility-component.ts"],"sourcesContent":[null],"names":[],"mappings":";;;AAAA;;;;;AAKG;MAKU,UAAU,GAAG,0BAA0B,CAClD,eAAe,CACb,YAAY,EACZ;IACE,SAAS,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE;AAClD,CAAA,EACD,qDAAqD,CACtD,EACD,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE;;;;"}
@@ -4,18 +4,12 @@
4
4
  * This source code is licensed under the MIT license found in the
5
5
  * LICENSE file in the root directory of this source tree.
6
6
  */
7
- import { Types } from '../ecs/component.js';
8
- export declare const Visibility: import("elics").Component<{
9
- isVisible: {
10
- type: Types.Boolean;
11
- default: true;
12
- };
13
- }>;
7
+ export { Visibility } from './visibility-component.js';
14
8
  declare const VisibilitySystem_base: import("elics").SystemConstructor<import("elics").SystemSchema, {
15
9
  visibility: {
16
10
  required: import("elics").Component<{
17
11
  isVisible: {
18
- type: Types.Boolean;
12
+ type: import("elics").Types.Boolean;
19
13
  default: true;
20
14
  };
21
15
  }>[];
@@ -24,7 +18,7 @@ declare const VisibilitySystem_base: import("elics").SystemConstructor<import("e
24
18
  visibility: {
25
19
  required: import("elics").Component<{
26
20
  isVisible: {
27
- type: Types.Boolean;
21
+ type: import("elics").Types.Boolean;
28
22
  default: true;
29
23
  };
30
24
  }>[];
@@ -33,5 +27,4 @@ declare const VisibilitySystem_base: import("elics").SystemConstructor<import("e
33
27
  export declare class VisibilitySystem extends VisibilitySystem_base {
34
28
  init(): void;
35
29
  }
36
- export {};
37
30
  //# sourceMappingURL=visibility.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"visibility.d.ts","sourceRoot":"","sources":["../../src/visibility/visibility.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,KAAK,EAAmB,MAAM,qBAAqB,CAAC;AAG7D,eAAO,MAAM,UAAU;;;;;EAQtB,CAAC;;;;;;;;;;;;;;;;;;;;AAiCF,qBAAa,gBAAiB,SAAQ,qBAEpC;IACA,IAAI,IAAI,IAAI;CAIb"}
1
+ {"version":3,"file":"visibility.d.ts","sourceRoot":"","sources":["../../src/visibility/visibility.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;;;;;;;;;;;;;;;;;;;;AAmCvD,qBAAa,gBAAiB,SAAQ,qBAEpC;IACA,IAAI,IAAI,IAAI;CAIb"}
@@ -1,5 +1,5 @@
1
- import { createComponent, Types } from 'elics';
2
1
  import { createSystem } from '../ecs/system.js';
2
+ import { Visibility } from './visibility-component.js';
3
3
 
4
4
  /**
5
5
  * Copyright (c) Meta Platforms, Inc. and affiliates.
@@ -7,20 +7,14 @@ import { createSystem } from '../ecs/system.js';
7
7
  * This source code is licensed under the MIT license found in the
8
8
  * LICENSE file in the root directory of this source tree.
9
9
  */
10
- const Visibility = createComponent('Visibility', {
11
- isVisible: { type: Types.Boolean, default: true },
12
- }, 'Component to control if an entity object is visible',
13
- // @ts-ignore - 4th argument is parsed by vite-plugin-metaspatial for XML generation
14
- { hideInEditor: true });
15
10
  function attachToEntity(entity) {
16
11
  const object3D = entity.object3D;
17
- if (!object3D) {
12
+ if (!object3D || object3D.__visibilityAttached) {
18
13
  return;
19
14
  }
15
+ object3D.__visibilityAttached = true;
20
16
  Object.defineProperty(object3D, 'visible', {
21
- get: () => {
22
- return entity.getValue(Visibility, 'isVisible');
23
- },
17
+ get: () => Boolean(Visibility.data.isVisible[entity.index]),
24
18
  set: (value) => {
25
19
  entity.setValue(Visibility, 'isVisible', value);
26
20
  },
@@ -30,14 +24,17 @@ function attachToEntity(entity) {
30
24
  }
31
25
  function detachFromEntity(entity) {
32
26
  const object3D = entity.object3D;
33
- if (!object3D) {
27
+ if (!object3D || !object3D.__visibilityAttached) {
34
28
  return;
35
29
  }
30
+ const visible = Boolean(Visibility.data.isVisible[entity.index]);
36
31
  Object.defineProperty(object3D, 'visible', {
37
- value: object3D.visible,
32
+ value: visible,
33
+ writable: true,
38
34
  enumerable: true,
39
35
  configurable: true,
40
36
  });
37
+ delete object3D.__visibilityAttached;
41
38
  }
42
39
  class VisibilitySystem extends createSystem({
43
40
  visibility: { required: [Visibility] },
@@ -1 +1 @@
1
- {"version":3,"file":"visibility.js","sources":["../../src/visibility/visibility.ts"],"sourcesContent":[null],"names":[],"mappings":";;;AAAA;;;;;AAKG;AAKI,MAAM,UAAU,GAAG,eAAe,CACvC,YAAY,EACZ;IACE,SAAS,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE;AAClD,CAAA,EACD,qDAAqD;AACrD;AACA,EAAE,YAAY,EAAE,IAAI,EAAE;AAGxB,SAAS,cAAc,CAAC,MAAc,EAAA;AACpC,IAAA,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ;IAChC,IAAI,CAAC,QAAQ,EAAE;QACb;IACF;AAEA,IAAA,MAAM,CAAC,cAAc,CAAC,QAAQ,EAAE,SAAS,EAAE;QACzC,GAAG,EAAE,MAAK;YACR,OAAO,MAAM,CAAC,QAAQ,CAAC,UAAU,EAAE,WAAW,CAAC;QACjD,CAAC;AACD,QAAA,GAAG,EAAE,CAAC,KAAc,KAAI;YACtB,MAAM,CAAC,QAAQ,CAAC,UAAU,EAAE,WAAW,EAAE,KAAK,CAAC;QACjD,CAAC;AACD,QAAA,UAAU,EAAE,IAAI;AAChB,QAAA,YAAY,EAAE,IAAI;AACnB,KAAA,CAAC;AACJ;AAEA,SAAS,gBAAgB,CAAC,MAAc,EAAA;AACtC,IAAA,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ;IAChC,IAAI,CAAC,QAAQ,EAAE;QACb;IACF;AAEA,IAAA,MAAM,CAAC,cAAc,CAAC,QAAQ,EAAE,SAAS,EAAE;QACzC,KAAK,EAAE,QAAQ,CAAC,OAAO;AACvB,QAAA,UAAU,EAAE,IAAI;AAChB,QAAA,YAAY,EAAE,IAAI;AACnB,KAAA,CAAC;AACJ;AAEM,MAAO,gBAAiB,SAAQ,YAAY,CAAC;AACjD,IAAA,UAAU,EAAE,EAAE,QAAQ,EAAE,CAAC,UAAU,CAAC,EAAE;CACvC,CAAC,CAAA;IACA,IAAI,GAAA;QACF,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,SAAS,CAAC,SAAS,EAAE,cAAc,CAAC;QAC5D,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,SAAS,CAAC,YAAY,EAAE,gBAAgB,CAAC;IACnE;AACD;;;;"}
1
+ {"version":3,"file":"visibility.js","sources":["../../src/visibility/visibility.ts"],"sourcesContent":[null],"names":[],"mappings":";;;AAAA;;;;;AAKG;AAQH,SAAS,cAAc,CAAC,MAAc,EAAA;AACpC,IAAA,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ;AAChC,IAAA,IAAI,CAAC,QAAQ,IAAK,QAAgB,CAAC,oBAAoB,EAAE;QACvD;IACF;AACC,IAAA,QAAgB,CAAC,oBAAoB,GAAG,IAAI;AAE7C,IAAA,MAAM,CAAC,cAAc,CAAC,QAAQ,EAAE,SAAS,EAAE;AACzC,QAAA,GAAG,EAAE,MAAM,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAC3D,QAAA,GAAG,EAAE,CAAC,KAAc,KAAI;YACtB,MAAM,CAAC,QAAQ,CAAC,UAAU,EAAE,WAAW,EAAE,KAAK,CAAC;QACjD,CAAC;AACD,QAAA,UAAU,EAAE,IAAI;AAChB,QAAA,YAAY,EAAE,IAAI;AACnB,KAAA,CAAC;AACJ;AAEA,SAAS,gBAAgB,CAAC,MAAc,EAAA;AACtC,IAAA,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ;IAChC,IAAI,CAAC,QAAQ,IAAI,CAAE,QAAgB,CAAC,oBAAoB,EAAE;QACxD;IACF;AACA,IAAA,MAAM,OAAO,GAAG,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAEhE,IAAA,MAAM,CAAC,cAAc,CAAC,QAAQ,EAAE,SAAS,EAAE;AACzC,QAAA,KAAK,EAAE,OAAO;AACd,QAAA,QAAQ,EAAE,IAAI;AACd,QAAA,UAAU,EAAE,IAAI;AAChB,QAAA,YAAY,EAAE,IAAI;AACnB,KAAA,CAAC;IACF,OAAQ,QAAgB,CAAC,oBAAoB;AAC/C;AAEM,MAAO,gBAAiB,SAAQ,YAAY,CAAC;AACjD,IAAA,UAAU,EAAE,EAAE,QAAQ,EAAE,CAAC,UAAU,CAAC,EAAE;CACvC,CAAC,CAAA;IACA,IAAI,GAAA;QACF,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,SAAS,CAAC,SAAS,EAAE,cAAc,CAAC;QAC5D,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,SAAS,CAAC,YAAY,EAAE,gBAAgB,CAAC;IACnE;AACD;;;;"}
package/package.json CHANGED
@@ -1,10 +1,35 @@
1
1
  {
2
2
  "name": "@iwsdk/core",
3
- "version": "0.4.2",
3
+ "version": "0.5.1",
4
4
  "description": "Javascript WebXR Runtime for Emulation",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
7
7
  "types": "dist/index.d.ts",
8
+ "typesVersions": {
9
+ "*": {
10
+ "lighting": [
11
+ "dist/lighting/index.d.ts"
12
+ ],
13
+ "project": [
14
+ "dist/project/index.d.ts"
15
+ ]
16
+ }
17
+ },
18
+ "exports": {
19
+ ".": {
20
+ "types": "./dist/index.d.ts",
21
+ "import": "./dist/index.js"
22
+ },
23
+ "./lighting": {
24
+ "types": "./dist/lighting/index.d.ts",
25
+ "import": "./dist/lighting/index.js"
26
+ },
27
+ "./project": {
28
+ "types": "./dist/project/index.d.ts",
29
+ "import": "./dist/project/index.js"
30
+ },
31
+ "./package.json": "./package.json"
32
+ },
8
33
  "files": [
9
34
  "dist"
10
35
  ],
@@ -21,6 +46,7 @@
21
46
  "dist/init/**",
22
47
  "dist/input/**",
23
48
  "dist/layers/**",
49
+ "dist/lighting/**",
24
50
  "dist/level/**",
25
51
  "dist/locomotion/**",
26
52
  "dist/mcp/**",
@@ -45,24 +71,26 @@
45
71
  "homepage": "https://github.com/facebook/immersive-web-sdk#readme",
46
72
  "dependencies": {
47
73
  "@babylonjs/havok": "^1.3.10",
74
+ "@drawcall/uikitml": "0.1.8",
48
75
  "@pmndrs/handle": "^6.6.16",
49
76
  "@pmndrs/pointer-events": "^6.6.22",
50
- "@pmndrs/uikit": "^1.0.62",
51
- "@pmndrs/uikitml": "^0.1.12",
77
+ "@pmndrs/uikit": "^1.0.74",
52
78
  "@preact/signals-core": "^1.11.0",
79
+ "@types/three": "^0.181.0",
80
+ "@types/webxr": "^0.5.0",
53
81
  "elics": "^3.4.1",
54
82
  "three": "*",
55
83
  "three-mesh-bvh": "^0.9.1",
56
- "@iwsdk/xr-input": "0.4.2",
57
- "@iwsdk/glxf": "0.4.2",
58
- "@iwsdk/locomotor": "0.4.2"
84
+ "@iwsdk/locomotor": "0.5.1",
85
+ "@iwsdk/scene-composition": "0.5.1",
86
+ "@iwsdk/xr-input": "0.5.1"
59
87
  },
60
88
  "engines": {
61
89
  "node": ">=20.19.0 <21.0.0-0 || >=22.12.0 <23.0.0-0 || >=24.0.0"
62
90
  },
63
91
  "devDependencies": {
64
- "vitest": "^4.0.0",
65
- "@vitest/coverage-v8": "^4.0.0"
92
+ "@vitest/coverage-v8": "^4.1.10",
93
+ "vitest": "^4.1.10"
66
94
  },
67
95
  "scripts": {
68
96
  "prebuild": "node -p \"'export const VERSION = ' + JSON.stringify(require('./package.json').version) + ';'\" > src/version.ts",
@@ -1,54 +0,0 @@
1
- /**
2
- * Copyright (c) Meta Platforms, Inc. and affiliates.
3
- *
4
- * This source code is licensed under the MIT license found in the
5
- * LICENSE file in the root directory of this source tree.
6
- */
7
- import type { Component } from 'elics';
8
- import type { Entity } from './entity.js';
9
- import { World } from './world.js';
10
- /** Field shape for GLXF component metadata. @category ECS */
11
- export interface GLXFComponentData {
12
- [key: string]: {
13
- keyString: string;
14
- type: string;
15
- value: any;
16
- alias?: string;
17
- };
18
- }
19
- /** Mapping entry from GLXF name → component class and optional mapper. @category ECS */
20
- export interface ComponentRegistryEntry {
21
- componentClass: Component<any>;
22
- description?: string;
23
- mapper?: (glxfData: GLXFComponentData) => Record<string, any>;
24
- }
25
- /**
26
- * Registry that maps GLXF component names to ECS component classes.
27
- *
28
- * @remarks
29
- * - Separate from `elics`' built-in registry to avoid naming conflicts.
30
- * - Supports custom field mappers to translate GLXF metadata to component props.
31
- *
32
- * @category ECS
33
- */
34
- export declare class GLXFComponentRegistry {
35
- private static registry;
36
- private static componentToName;
37
- /** Register an ECS component class under a GLXF component name. */
38
- static register(glxfComponentName: string, componentClass: Component<any>, description?: string, mapper?: (glxfData: GLXFComponentData) => Record<string, any>): void;
39
- /** Return the GLXF name for a given component class. */
40
- static getComponentName(component: Component<any>): string | undefined;
41
- /** Lookup a registered mapping entry by GLXF name. */
42
- static getComponent(glxfComponentName: string): ComponentRegistryEntry | undefined;
43
- /** Apply mapped components from GLXF metadata to an entity. */
44
- static applyComponents(entity: Entity, world: World, glxfComponents: Record<string, GLXFComponentData>): void;
45
- /** Default mapper converting GLXF `{ key: { value } }` shape to props. */
46
- private static defaultMapper;
47
- /** List all registered GLXF component names. */
48
- static getRegisteredComponents(): string[];
49
- /** Clear the registry (useful for tests). */
50
- static clear(): void;
51
- /** Placeholder to wire built‑in mappings from generated metadata. */
52
- static setupBuiltinComponents(): void;
53
- }
54
- //# sourceMappingURL=component-registry.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"component-registry.d.ts","sourceRoot":"","sources":["../../src/ecs/component-registry.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACvC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAGnC,6DAA6D;AAC7D,MAAM,WAAW,iBAAiB;IAChC,CAAC,GAAG,EAAE,MAAM,GAAG;QACb,SAAS,EAAE,MAAM,CAAC;QAClB,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,EAAE,GAAG,CAAC;QACX,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,CAAC;CACH;AAGD,wFAAwF;AACxF,MAAM,WAAW,sBAAsB;IACrC,cAAc,EAAE,SAAS,CAAC,GAAG,CAAC,CAAC;IAC/B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,CAAC,QAAQ,EAAE,iBAAiB,KAAK,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAC/D;AAED;;;;;;;;GAQG;AACH,qBAAa,qBAAqB;IAChC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAA6C;IACpE,OAAO,CAAC,MAAM,CAAC,eAAe,CAAqC;IAEnE,mEAAmE;IACnE,MAAM,CAAC,QAAQ,CACb,iBAAiB,EAAE,MAAM,EACzB,cAAc,EAAE,SAAS,CAAC,GAAG,CAAC,EAC9B,WAAW,CAAC,EAAE,MAAM,EACpB,MAAM,CAAC,EAAE,CAAC,QAAQ,EAAE,iBAAiB,KAAK,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAC5D,IAAI;IASP,wDAAwD;IACxD,MAAM,CAAC,gBAAgB,CAAC,SAAS,EAAE,SAAS,CAAC,GAAG,CAAC,GAAG,MAAM,GAAG,SAAS;IAItE,sDAAsD;IACtD,MAAM,CAAC,YAAY,CACjB,iBAAiB,EAAE,MAAM,GACxB,sBAAsB,GAAG,SAAS;IAIrC,+DAA+D;IAC/D,MAAM,CAAC,eAAe,CACpB,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,KAAK,EACZ,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAC,GAChD,IAAI;IA2BP,0EAA0E;IAC1E,OAAO,CAAC,MAAM,CAAC,aAAa;IAc5B,gDAAgD;IAChD,MAAM,CAAC,uBAAuB,IAAI,MAAM,EAAE;IAI1C,6CAA6C;IAC7C,MAAM,CAAC,KAAK,IAAI,IAAI;IAKpB,qEAAqE;IACrE,MAAM,CAAC,sBAAsB,IAAI,IAAI;CAOtC"}
@@ -1,86 +0,0 @@
1
- /**
2
- * Copyright (c) Meta Platforms, Inc. and affiliates.
3
- *
4
- * This source code is licensed under the MIT license found in the
5
- * LICENSE file in the root directory of this source tree.
6
- */
7
- /**
8
- * Registry that maps GLXF component names to ECS component classes.
9
- *
10
- * @remarks
11
- * - Separate from `elics`' built-in registry to avoid naming conflicts.
12
- * - Supports custom field mappers to translate GLXF metadata to component props.
13
- *
14
- * @category ECS
15
- */
16
- class GLXFComponentRegistry {
17
- /** Register an ECS component class under a GLXF component name. */
18
- static register(glxfComponentName, componentClass, description, mapper) {
19
- this.registry.set(glxfComponentName, {
20
- componentClass,
21
- description,
22
- mapper,
23
- });
24
- this.componentToName.set(componentClass, glxfComponentName);
25
- }
26
- /** Return the GLXF name for a given component class. */
27
- static getComponentName(component) {
28
- return this.componentToName.get(component);
29
- }
30
- /** Lookup a registered mapping entry by GLXF name. */
31
- static getComponent(glxfComponentName) {
32
- return this.registry.get(glxfComponentName);
33
- }
34
- /** Apply mapped components from GLXF metadata to an entity. */
35
- static applyComponents(entity, world, glxfComponents) {
36
- Object.entries(glxfComponents).forEach(([componentName, componentData]) => {
37
- const entry = this.getComponent(componentName);
38
- if (entry) {
39
- // Use custom mapper if provided, otherwise use default mapping
40
- const componentProps = entry.mapper
41
- ? entry.mapper(componentData)
42
- : this.defaultMapper(componentData);
43
- console.log(`Applying component "${componentName}" to entity with props:`, componentProps);
44
- if (!entry.componentClass.bitmask) {
45
- world.registerComponent(entry.componentClass);
46
- }
47
- entity.addComponent(entry.componentClass, componentProps);
48
- }
49
- else {
50
- console.warn(`Component "${componentName}" not found in registry. Available components:`, Array.from(this.registry.keys()));
51
- }
52
- });
53
- }
54
- /** Default mapper converting GLXF `{ key: { value } }` shape to props. */
55
- static defaultMapper(glxfData) {
56
- const props = {};
57
- Object.entries(glxfData).forEach(([key, fieldData]) => {
58
- if (fieldData && typeof fieldData === 'object' && 'value' in fieldData) {
59
- props[key] = fieldData.value;
60
- }
61
- });
62
- return props;
63
- }
64
- /** List all registered GLXF component names. */
65
- static getRegisteredComponents() {
66
- return Array.from(this.registry.keys());
67
- }
68
- /** Clear the registry (useful for tests). */
69
- static clear() {
70
- this.registry.clear();
71
- this.componentToName.clear();
72
- }
73
- /** Placeholder to wire built‑in mappings from generated metadata. */
74
- static setupBuiltinComponents() {
75
- // This will be populated with the actual component imports
76
- // For now, we'll register the components we know about
77
- // Note: This is a temporary solution. In a real implementation,
78
- // we would need to import the actual component objects and register them
79
- // with their correct names from the components.json
80
- }
81
- }
82
- GLXFComponentRegistry.registry = new Map();
83
- GLXFComponentRegistry.componentToName = new Map();
84
-
85
- export { GLXFComponentRegistry };
86
- //# sourceMappingURL=component-registry.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"component-registry.js","sources":["../../src/ecs/component-registry.ts"],"sourcesContent":[null],"names":[],"mappings":"AAAA;;;;;AAKG;AAyBH;;;;;;;;AAQG;MACU,qBAAqB,CAAA;;IAKhC,OAAO,QAAQ,CACb,iBAAyB,EACzB,cAA8B,EAC9B,WAAoB,EACpB,MAA6D,EAAA;AAE7D,QAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,iBAAiB,EAAE;YACnC,cAAc;YACd,WAAW;YACX,MAAM;AACP,SAAA,CAAC;QACF,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,cAAc,EAAE,iBAAiB,CAAC;IAC7D;;IAGA,OAAO,gBAAgB,CAAC,SAAyB,EAAA;QAC/C,OAAO,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,SAAS,CAAC;IAC5C;;IAGA,OAAO,YAAY,CACjB,iBAAyB,EAAA;QAEzB,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,iBAAiB,CAAC;IAC7C;;AAGA,IAAA,OAAO,eAAe,CACpB,MAAc,EACd,KAAY,EACZ,cAAiD,EAAA;AAEjD,QAAA,MAAM,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,aAAa,EAAE,aAAa,CAAC,KAAI;YACxE,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC;YAC9C,IAAI,KAAK,EAAE;;AAET,gBAAA,MAAM,cAAc,GAAG,KAAK,CAAC;AAC3B,sBAAE,KAAK,CAAC,MAAM,CAAC,aAAa;AAC5B,sBAAE,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC;gBAErC,OAAO,CAAC,GAAG,CACT,CAAA,oBAAA,EAAuB,aAAa,CAAA,uBAAA,CAAyB,EAC7D,cAAc,CACf;AAED,gBAAA,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,OAAO,EAAE;AACjC,oBAAA,KAAK,CAAC,iBAAiB,CAAC,KAAK,CAAC,cAAc,CAAC;gBAC/C;gBACA,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,cAAc,EAAE,cAAc,CAAC;YAC3D;iBAAO;AACL,gBAAA,OAAO,CAAC,IAAI,CACV,cAAc,aAAa,CAAA,8CAAA,CAAgD,EAC3E,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,CACjC;YACH;AACF,QAAA,CAAC,CAAC;IACJ;;IAGQ,OAAO,aAAa,CAC1B,QAA2B,EAAA;QAE3B,MAAM,KAAK,GAAwB,EAAE;AAErC,QAAA,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,SAAS,CAAC,KAAI;YACpD,IAAI,SAAS,IAAI,OAAO,SAAS,KAAK,QAAQ,IAAI,OAAO,IAAI,SAAS,EAAE;AACtE,gBAAA,KAAK,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,KAAK;YAC9B;AACF,QAAA,CAAC,CAAC;AAEF,QAAA,OAAO,KAAK;IACd;;AAGA,IAAA,OAAO,uBAAuB,GAAA;QAC5B,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;IACzC;;AAGA,IAAA,OAAO,KAAK,GAAA;AACV,QAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE;AACrB,QAAA,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE;IAC9B;;AAGA,IAAA,OAAO,sBAAsB,GAAA;;;;;;IAM7B;;AA/Fe,qBAAA,CAAA,QAAQ,GAAG,IAAI,GAAG,EAAkC;AACpD,qBAAA,CAAA,eAAe,GAAG,IAAI,GAAG,EAA0B;;;;"}
@@ -1,27 +0,0 @@
1
- /**
2
- * Copyright (c) Meta Platforms, Inc. and affiliates.
3
- *
4
- * This source code is licensed under the MIT license found in the
5
- * LICENSE file in the root directory of this source tree.
6
- */
7
- import { Entity } from '../ecs/entity.js';
8
- import type { World } from '../ecs/world.js';
9
- import { Object3D } from '../runtime/index.js';
10
- /**
11
- * Creates ECS entities from Three.js Object3D graphs and applies IWSDK components
12
- * found in GLXF `meta_spatial.components` extras.
13
- *
14
- * @remarks
15
- * - Only nodes present in the GLXF `nodes` array are converted to entities.
16
- * - Component ids are matched against the registry by `com.iwsdk.components.<id>`.
17
- * - Panel UI extras are mapped to {@link PanelUI} with JSON config paths.
18
- *
19
- * @category Scene
20
- */
21
- export declare class EntityCreator {
22
- static createEntitiesFromObject3D(object: Object3D, nodes: Object3D[], parentEntity: Entity, world: World): void;
23
- private static applyComponents;
24
- private static mapGLXFDataToProps;
25
- private static handleMetaSpatialPanelComponents;
26
- }
27
- //# sourceMappingURL=level-entity-creator.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"level-entity-creator.d.ts","sourceRoot":"","sources":["../../src/level/level-entity-creator.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC1C,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAM/C;;;;;;;;;;GAUG;AACH,qBAAa,aAAa;IACxB,MAAM,CAAC,0BAA0B,CAC/B,MAAM,EAAE,QAAQ,EAChB,KAAK,EAAE,QAAQ,EAAE,EACjB,YAAY,EAAE,MAAM,EACpB,KAAK,EAAE,KAAK,GACX,IAAI;IAsCP,OAAO,CAAC,MAAM,CAAC,eAAe;IAoC9B,OAAO,CAAC,MAAM,CAAC,kBAAkB;IAiBjC,OAAO,CAAC,MAAM,CAAC,gCAAgC;CAuBhD"}
@@ -1,108 +0,0 @@
1
- import { ComponentRegistry, Types } from 'elics';
2
- import '@pmndrs/uikit';
3
- import '@preact/signals-core';
4
- import 'three';
5
- import { PanelUI } from '../ui/ui.js';
6
- import '../ui/follow.js';
7
- import '../ui/screenspace.js';
8
-
9
- /**
10
- * Copyright (c) Meta Platforms, Inc. and affiliates.
11
- *
12
- * This source code is licensed under the MIT license found in the
13
- * LICENSE file in the root directory of this source tree.
14
- */
15
- /** Component id prefix expected in GLXF extras. */
16
- const PACKAGE_PREFIX = 'com.iwsdk.components.';
17
- /**
18
- * Creates ECS entities from Three.js Object3D graphs and applies IWSDK components
19
- * found in GLXF `meta_spatial.components` extras.
20
- *
21
- * @remarks
22
- * - Only nodes present in the GLXF `nodes` array are converted to entities.
23
- * - Component ids are matched against the registry by `com.iwsdk.components.<id>`.
24
- * - Panel UI extras are mapped to {@link PanelUI} with JSON config paths.
25
- *
26
- * @category Scene
27
- */
28
- class EntityCreator {
29
- static createEntitiesFromObject3D(object, nodes, parentEntity, world) {
30
- var _a, _b, _c, _d;
31
- const inNodes = nodes.includes(object);
32
- if (!inNodes) {
33
- return;
34
- }
35
- const isLevelMetaEntity = typeof object.name === 'string' && object.name.toLowerCase() === 'level';
36
- // Special case: a GLXF node named "level" acts as a container for level-root components.
37
- // Do not create a new ECS entity for it; attach its components to the existing parentEntity (level root),
38
- // and continue processing its children under the same parentEntity.
39
- if (isLevelMetaEntity && ((_b = (_a = object.userData) === null || _a === void 0 ? void 0 : _a.meta_spatial) === null || _b === void 0 ? void 0 : _b.components)) {
40
- this.applyComponents(parentEntity, object.userData.meta_spatial.components, world);
41
- // Remove the carrier node from the scene graph; it's metadata-only
42
- object.removeFromParent();
43
- return;
44
- }
45
- const entity = world.createTransformEntity(object, parentEntity);
46
- if ((_d = (_c = object.userData) === null || _c === void 0 ? void 0 : _c.meta_spatial) === null || _d === void 0 ? void 0 : _d.components) {
47
- this.applyComponents(entity, object.userData.meta_spatial.components, world);
48
- }
49
- object.children.forEach((child) => {
50
- this.createEntitiesFromObject3D(child, nodes, entity, world);
51
- });
52
- }
53
- static applyComponents(entity, glxfComponents, world) {
54
- const allComponents = ComponentRegistry.getAllComponents();
55
- this.handleMetaSpatialPanelComponents(entity, glxfComponents, world);
56
- Object.entries(glxfComponents).forEach(([componentName, componentData]) => {
57
- if (componentName === 'com.iwsdk.components.PanelUI') {
58
- return;
59
- }
60
- if (!componentName.startsWith(PACKAGE_PREFIX)) {
61
- return;
62
- }
63
- const targetId = componentName.slice(PACKAGE_PREFIX.length);
64
- const component = allComponents.find((comp) => comp.id === targetId);
65
- if (component) {
66
- const componentProps = this.mapGLXFDataToProps(component, componentData);
67
- if (!component.bitmask) {
68
- world.registerComponent(component);
69
- }
70
- entity.addComponent(component, componentProps);
71
- }
72
- else {
73
- console.warn(`Component "${componentName}" not found in registry. Available components:`, allComponents.map((comp) => comp.id));
74
- }
75
- });
76
- }
77
- static mapGLXFDataToProps(component, glxfData) {
78
- const props = {};
79
- Object.entries(glxfData).forEach(([key, fieldData]) => {
80
- if (fieldData && typeof fieldData === 'object' && component.schema[key]) {
81
- if (component.schema[key].type === Types.Enum && 'alias' in fieldData) {
82
- props[key] = fieldData.alias;
83
- }
84
- else if ('value' in fieldData) {
85
- props[key] = fieldData.value;
86
- }
87
- }
88
- });
89
- return props;
90
- }
91
- static handleMetaSpatialPanelComponents(entity, glxfComponents, world) {
92
- var _a, _b, _c, _d, _e;
93
- const panelComponent = glxfComponents['com.iwsdk.components.PanelUI'];
94
- if (!panelComponent || !((_a = panelComponent.config) === null || _a === void 0 ? void 0 : _a.value)) {
95
- return;
96
- }
97
- const config = panelComponent.config.value.replace('.uikitml', '.json');
98
- const maxWidth = ((_c = (_b = panelComponent.maxWidth) === null || _b === void 0 ? void 0 : _b.value) !== null && _c !== void 0 ? _c : 1);
99
- const maxHeight = ((_e = (_d = panelComponent.maxHeight) === null || _d === void 0 ? void 0 : _d.value) !== null && _e !== void 0 ? _e : 1);
100
- if (!PanelUI.bitmask) {
101
- world.registerComponent(PanelUI);
102
- }
103
- entity.addComponent(PanelUI, { config, maxWidth, maxHeight });
104
- }
105
- }
106
-
107
- export { EntityCreator };
108
- //# sourceMappingURL=level-entity-creator.js.map