@holoscript/core 6.0.2 → 6.0.4

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 (229) hide show
  1. package/README.md +38 -38
  2. package/dist/GLTFPipeline-DEN36VNK.js +12 -0
  3. package/dist/GLTFPipeline-YPCAK236.cjs +33 -0
  4. package/dist/{HoloScriptPlusParser-BZR5DELQ.js → HoloScriptPlusParser-BN6KVRCM.js} +5 -5
  5. package/dist/{HoloScriptPlusParser-SBMYDNXO.cjs → HoloScriptPlusParser-NC5FE6AL.cjs} +16 -16
  6. package/dist/{USDZExporter-YA55ZS35.js → USDZExporter-NTMBNTDB.js} +3 -3
  7. package/dist/{USDZExporter-MHEHXZB4.cjs → USDZExporter-UWGWNMMD.cjs} +3 -3
  8. package/dist/{chunk-32TWR3HE.js → chunk-2CWOLHTE.js} +3 -4
  9. package/dist/{chunk-2UX5LRAP.cjs → chunk-33LSUQDD.cjs} +33 -31
  10. package/dist/{chunk-LBPEZQAF.js → chunk-3FJCK5XA.js} +7 -7
  11. package/dist/{chunk-EGIZHYJP.cjs → chunk-3SAK5KFL.cjs} +2 -4
  12. package/dist/{chunk-PJMOXFPR.cjs → chunk-4XSNJCLC.cjs} +25 -27
  13. package/dist/{chunk-HKCVM6OK.cjs → chunk-5BGSECRJ.cjs} +21 -21
  14. package/dist/{chunk-EMO7HAKJ.cjs → chunk-5O6TQC6M.cjs} +26 -30
  15. package/dist/{chunk-XSUZMPVQ.cjs → chunk-5OEOHAAW.cjs} +26 -26
  16. package/dist/{chunk-EJA7G2C4.cjs → chunk-5WUNN6ZN.cjs} +2 -2
  17. package/dist/{chunk-CQDOF3G7.cjs → chunk-6TZPZCOJ.cjs} +18 -18
  18. package/dist/{chunk-NRUB55IT.cjs → chunk-6UEHYZ7V.cjs} +18 -16
  19. package/dist/{chunk-V42NTCFH.js → chunk-6XSERL6L.js} +4230 -2197
  20. package/dist/{chunk-X4YVN7H3.cjs → chunk-72EQECGT.cjs} +37 -17
  21. package/dist/{chunk-4KJ2R7VP.cjs → chunk-7AGYRWKW.cjs} +19 -19
  22. package/dist/{chunk-UQW6SLM5.js → chunk-A7PIMZGU.js} +110 -19
  23. package/dist/{chunk-RT7LJRSF.cjs → chunk-ATSKSYVE.cjs} +1013 -6708
  24. package/dist/{chunk-WN3YF33G.cjs → chunk-B5TCIAPQ.cjs} +9 -10
  25. package/dist/{chunk-AIUXRS74.cjs → chunk-BF2235SI.cjs} +4275 -2242
  26. package/dist/{chunk-DIEDKX5B.cjs → chunk-BND3ST2K.cjs} +18 -16
  27. package/dist/{chunk-EPWRXL6S.js → chunk-BU7VWW2K.js} +29 -29
  28. package/dist/{chunk-6OQBLABR.js → chunk-BWFJEM5A.js} +368 -189
  29. package/dist/{chunk-ARNKA274.cjs → chunk-CAUCGUEA.cjs} +6 -6
  30. package/dist/{chunk-YCMQQQ5U.cjs → chunk-CBJSLA2E.cjs} +398 -219
  31. package/dist/{chunk-BU5ZAFMC.js → chunk-CDPGV4DN.js} +6 -7
  32. package/dist/{chunk-CO2VM2DK.js → chunk-CS2EMTGF.js} +10 -9
  33. package/dist/{chunk-AW7WAELW.js → chunk-DMG7C4H2.js} +4 -4
  34. package/dist/{chunk-XSF76QRU.js → chunk-DXJQDCFL.js} +3 -3
  35. package/dist/{chunk-4FCZDTD5.js → chunk-E3FWRT3Z.js} +7 -9
  36. package/dist/{chunk-KYM4XRFG.js → chunk-E3UALNFA.js} +4 -4
  37. package/dist/{chunk-GC3YU46J.js → chunk-EONILVMF.js} +2 -2
  38. package/dist/{chunk-VJVCD5T5.cjs → chunk-EQV4R3EV.cjs} +22 -22
  39. package/dist/{chunk-FEFHPUEM.cjs → chunk-F3HH56EB.cjs} +74 -658
  40. package/dist/{chunk-WYH4GVZ5.js → chunk-F4IULT7N.js} +2 -2
  41. package/dist/{chunk-XDXZM3ZP.cjs → chunk-FFKU7BTK.cjs} +19 -19
  42. package/dist/{chunk-NKRKT6V2.js → chunk-FHQVYCH2.js} +11 -10
  43. package/dist/{chunk-7H5UNJZD.cjs → chunk-FSF7EQVA.cjs} +11 -10
  44. package/dist/{chunk-KUJRR4FJ.js → chunk-G4VZTCIB.js} +9 -7
  45. package/dist/{chunk-A6GO3DPZ.cjs → chunk-G7CT3EMP.cjs} +4 -4
  46. package/dist/{chunk-EUFLX2PI.js → chunk-GGHSW2NN.js} +989 -6611
  47. package/dist/chunk-GVUR45UF.cjs +777 -0
  48. package/dist/{chunk-ODGMVILH.js → chunk-H5Z7NASB.js} +3 -3
  49. package/dist/{chunk-7KPI4EKH.cjs → chunk-HE7ULERA.cjs} +45 -49
  50. package/dist/{chunk-26TLYBFD.js → chunk-HPS76H7Q.js} +3 -3
  51. package/dist/{chunk-RE3OKSYF.cjs → chunk-HQUEA5R6.cjs} +6 -6
  52. package/dist/{chunk-ZGTGVSTZ.js → chunk-HYNTS5CP.js} +2 -2
  53. package/dist/{chunk-PBA6NXCT.cjs → chunk-IBDG74G2.cjs} +6 -3
  54. package/dist/chunk-IFNQFCTM.js +3098 -0
  55. package/dist/{chunk-ZL6VJ6SN.js → chunk-IWI6J7FX.js} +5 -5
  56. package/dist/{chunk-3KEU5QYY.cjs → chunk-K3JDKWGI.cjs} +118 -23
  57. package/dist/{chunk-NLPSZT4C.js → chunk-K6EKD26I.js} +6 -6
  58. package/dist/chunk-KCQ5NDYC.cjs +3172 -0
  59. package/dist/{chunk-ELLQPFAF.js → chunk-KED34ILP.js} +11 -9
  60. package/dist/{chunk-BY3B7ZYV.cjs → chunk-KSGXLT74.cjs} +3 -3
  61. package/dist/{chunk-65RFOWZI.js → chunk-L4G4RLXX.js} +9 -7
  62. package/dist/{chunk-4SMUJFHL.js → chunk-LDP5OK6G.js} +6 -3
  63. package/dist/{chunk-VZNKJZTT.cjs → chunk-LGGRPKTV.cjs} +82 -96
  64. package/dist/{chunk-C2QHVHZF.js → chunk-LSW7P7ML.js} +23 -414
  65. package/dist/{chunk-HHS6FMOU.cjs → chunk-LXJ4667L.cjs} +83 -22
  66. package/dist/{chunk-H6WMMLQK.cjs → chunk-LZ266PCM.cjs} +20 -13
  67. package/dist/{chunk-V2ILLPHK.cjs → chunk-MD6KDHVE.cjs} +10 -10
  68. package/dist/{chunk-6WNCRE6F.js → chunk-MEASWI2Y.js} +5 -5
  69. package/dist/chunk-MPXBVFHQ.js +768 -0
  70. package/dist/{chunk-WUXIRGZP.cjs → chunk-NCUKG4SK.cjs} +304 -144
  71. package/dist/chunk-NDQNIJEH.js +1715 -0
  72. package/dist/{chunk-Y5MUAYTO.js → chunk-NOZZ46QU.js} +9 -8
  73. package/dist/{chunk-F5LVGHNT.js → chunk-OFKWH2IP.js} +3 -3
  74. package/dist/{chunk-SPDELRRV.cjs → chunk-PMGODDJA.cjs} +12 -12
  75. package/dist/{chunk-I3XGTIHM.cjs → chunk-Q4QX3AET.cjs} +2 -2
  76. package/dist/{chunk-Y7VK5TH3.cjs → chunk-Q5JT3YML.cjs} +10 -10
  77. package/dist/{chunk-TSWTWZ42.cjs → chunk-Q5SJOGHQ.cjs} +247 -205
  78. package/dist/{chunk-M6FU6S22.js → chunk-QGKNANZ3.js} +251 -91
  79. package/dist/{chunk-WFJIDI2N.cjs → chunk-QLEAOI3Q.cjs} +10 -10
  80. package/dist/{chunk-VK5AXKO3.js → chunk-R7MA7QWV.js} +70 -84
  81. package/dist/{chunk-W76ETJTI.js → chunk-RVYPEYPX.js} +6 -6
  82. package/dist/{chunk-MWEFR6YQ.js → chunk-S2N5TNMA.js} +7 -9
  83. package/dist/{chunk-NCUHGRTZ.js → chunk-S565K7NK.js} +7 -7
  84. package/dist/{chunk-AC4BSHFV.js → chunk-SDAMZIRE.js} +5 -5
  85. package/dist/{chunk-HBZYCASG.js → chunk-T36DDXSF.js} +75 -33
  86. package/dist/{chunk-BO2OKHIY.js → chunk-T4NKMBDL.js} +30 -611
  87. package/dist/{chunk-7X2IEJIE.cjs → chunk-T7LEXZUZ.cjs} +29 -29
  88. package/dist/{chunk-HUFNKFA6.js → chunk-TEWCN33Y.js} +8 -12
  89. package/dist/{chunk-L3Z2HIWJ.cjs → chunk-TQSZUOW5.cjs} +2 -2
  90. package/dist/chunk-TSH3MSQU.cjs +129 -0
  91. package/dist/{chunk-PLMYCCA4.js → chunk-UERJ3YJV.js} +6 -6
  92. package/dist/{chunk-7N3JIJMT.js → chunk-UPJBDCVF.js} +6 -6
  93. package/dist/{chunk-CMYAWUX3.js → chunk-V3NN3HPP.js} +12 -5
  94. package/dist/{chunk-SUCBB66F.js → chunk-WB4Z63GG.js} +3 -3
  95. package/dist/{chunk-PPULB4GG.cjs → chunk-WDW67DZB.cjs} +68 -68
  96. package/dist/chunk-WGMEAYBG.js +126 -0
  97. package/dist/{chunk-VSXOIUCF.cjs → chunk-X4ZF6CNE.cjs} +7 -7
  98. package/dist/{chunk-HF4OFY25.cjs → chunk-X6SEAXAX.cjs} +29 -445
  99. package/dist/{chunk-C7BNX4XJ.js → chunk-XCWFGZAA.js} +6 -6
  100. package/dist/{chunk-CNVM7J3M.js → chunk-XD6IYDUX.js} +34 -14
  101. package/dist/chunk-XG23EUQX.cjs +1717 -0
  102. package/dist/{chunk-DN7UFU63.cjs → chunk-XRKWN5PL.cjs} +12 -11
  103. package/dist/{chunk-XNMEH2BI.js → chunk-XUTX5CBW.js} +3 -3
  104. package/dist/{chunk-PQLGZKMC.cjs → chunk-XWPNTWDN.cjs} +26 -26
  105. package/dist/{chunk-NTMZSDXM.cjs → chunk-XXINBTZK.cjs} +43 -43
  106. package/dist/{chunk-74YCHHTE.js → chunk-YCXFCXDS.js} +8 -12
  107. package/dist/{chunk-KDB6BUMB.js → chunk-YQK5JNFK.js} +77 -18
  108. package/dist/{chunk-DH5G2JUA.cjs → chunk-Z34RLXRA.cjs} +44 -46
  109. package/dist/{chunk-XH7SE4HH.cjs → chunk-ZP4D3CSX.cjs} +19 -19
  110. package/dist/cli/holoscript-runner.cjs +33 -32
  111. package/dist/cli/holoscript-runner.js +13 -12
  112. package/dist/codebase/index.cjs +1 -1
  113. package/dist/codebase/index.d.ts +25 -0
  114. package/dist/codebase/index.js +1 -1
  115. package/dist/compiler/agent-inference.cjs +7 -8
  116. package/dist/compiler/agent-inference.js +3 -4
  117. package/dist/compiler/android-xr.cjs +7 -8
  118. package/dist/compiler/android-xr.js +5 -6
  119. package/dist/compiler/android.cjs +8 -9
  120. package/dist/compiler/android.js +6 -7
  121. package/dist/compiler/ar.cjs +6 -7
  122. package/dist/compiler/ar.js +4 -5
  123. package/dist/compiler/babylon.cjs +8 -9
  124. package/dist/compiler/babylon.js +7 -8
  125. package/dist/compiler/coco.cjs +1 -1
  126. package/dist/compiler/coco.js +1 -1
  127. package/dist/compiler/domain-block-utils.cjs +158 -151
  128. package/dist/compiler/domain-block-utils.js +4 -5
  129. package/dist/compiler/dtdl.cjs +7 -8
  130. package/dist/compiler/dtdl.js +4 -5
  131. package/dist/compiler/gltf-pipeline.cjs +9 -9
  132. package/dist/compiler/gltf-pipeline.js +2 -2
  133. package/dist/compiler/godot.cjs +6 -7
  134. package/dist/compiler/godot.js +5 -6
  135. package/dist/compiler/incremental.cjs +7 -8
  136. package/dist/compiler/incremental.js +2 -3
  137. package/dist/compiler/index.cjs +1934 -878
  138. package/dist/compiler/index.js +1904 -842
  139. package/dist/compiler/ios.cjs +8 -9
  140. package/dist/compiler/ios.js +6 -7
  141. package/dist/compiler/multi-layer.cjs +10 -17
  142. package/dist/compiler/multi-layer.js +9 -10
  143. package/dist/compiler/nodetoy.cjs +1 -1
  144. package/dist/compiler/nodetoy.js +1 -1
  145. package/dist/compiler/openxr.cjs +6 -7
  146. package/dist/compiler/openxr.js +5 -6
  147. package/dist/compiler/playcanvas.cjs +7 -8
  148. package/dist/compiler/playcanvas.js +6 -7
  149. package/dist/compiler/r3f.cjs +13 -14
  150. package/dist/compiler/r3f.js +8 -9
  151. package/dist/compiler/remotion.cjs +1 -1
  152. package/dist/compiler/remotion.js +1 -1
  153. package/dist/compiler/reproducibility.cjs +1 -1
  154. package/dist/compiler/reproducibility.js +1 -1
  155. package/dist/compiler/sdf.cjs +7 -8
  156. package/dist/compiler/sdf.js +5 -6
  157. package/dist/compiler/semantic-scene.cjs +7 -7
  158. package/dist/compiler/semantic-scene.js +2 -2
  159. package/dist/compiler/state.cjs +5 -6
  160. package/dist/compiler/state.js +3 -4
  161. package/dist/compiler/trait-composition.cjs +7 -8
  162. package/dist/compiler/trait-composition.js +3 -4
  163. package/dist/compiler/unity.cjs +6 -7
  164. package/dist/compiler/unity.js +5 -6
  165. package/dist/compiler/unreal.cjs +7 -8
  166. package/dist/compiler/unreal.js +5 -6
  167. package/dist/compiler/urdf.cjs +13 -14
  168. package/dist/compiler/urdf.js +5 -6
  169. package/dist/compiler/usd-physics.cjs +7 -8
  170. package/dist/compiler/usd-physics.js +4 -5
  171. package/dist/compiler/visionos.cjs +6 -7
  172. package/dist/compiler/visionos.js +5 -6
  173. package/dist/compiler/vrchat.cjs +7 -8
  174. package/dist/compiler/vrchat.js +5 -6
  175. package/dist/compiler/vrr.cjs +7 -8
  176. package/dist/compiler/vrr.js +5 -6
  177. package/dist/compiler/wasm.cjs +10 -11
  178. package/dist/compiler/wasm.js +5 -6
  179. package/dist/compiler/webgpu.cjs +6 -7
  180. package/dist/compiler/webgpu.js +5 -6
  181. package/dist/constants.d.ts +3 -0
  182. package/dist/debugger.cjs +7 -7
  183. package/dist/debugger.js +5 -5
  184. package/dist/entries/interop.cjs +1 -1
  185. package/dist/entries/interop.d.ts +9 -0
  186. package/dist/entries/interop.js +1 -1
  187. package/dist/entries/scripting.cjs +18 -17
  188. package/dist/entries/scripting.d.ts +7 -0
  189. package/dist/entries/scripting.js +8 -7
  190. package/dist/index.cjs +6773 -27555
  191. package/dist/index.d.ts +19 -0
  192. package/dist/index.js +5212 -26101
  193. package/dist/math/vec3.cjs +1 -1
  194. package/dist/math/vec3.js +1 -1
  195. package/dist/ml-dsa-PHCWUBPX.cjs +1178 -0
  196. package/dist/ml-dsa-WYLJHJO6.js +1178 -0
  197. package/dist/parser.cjs +11 -10
  198. package/dist/parser.js +8 -7
  199. package/dist/{playwright-BIZXMLD2.js → playwright-5OSAPTNH.js} +3 -3
  200. package/dist/{playwright-7DTEQCBD.cjs → playwright-RL6GY4F7.cjs} +1985 -1985
  201. package/dist/runtime.cjs +5 -5
  202. package/dist/runtime.js +4 -4
  203. package/dist/self-improvement/index.d.ts +0 -48
  204. package/dist/storage/index.cjs +1 -1
  205. package/dist/storage/index.d.ts +24 -0
  206. package/dist/storage/index.js +1 -1
  207. package/dist/tools/index.d.ts +12 -0
  208. package/dist/traits/index.cjs +925 -607
  209. package/dist/traits/index.js +137 -20
  210. package/dist/type-checker.cjs +4 -4
  211. package/dist/type-checker.js +2 -2
  212. package/package.json +54 -19
  213. package/LICENSE +0 -21
  214. package/dist/GLTFPipeline-3KLWWUQO.cjs +0 -34
  215. package/dist/GLTFPipeline-LYII2ZVQ.js +0 -13
  216. package/dist/chunk-CN4NOESF.cjs +0 -416
  217. package/dist/chunk-DXVCEFZB.js +0 -2027
  218. package/dist/chunk-ENV7K6XA.js +0 -282
  219. package/dist/chunk-H7XMORZI.js +0 -2731
  220. package/dist/chunk-HAN4V3PF.cjs +0 -2037
  221. package/dist/chunk-LER4WXW5.cjs +0 -286
  222. package/dist/chunk-QHVVVN47.cjs +0 -2033
  223. package/dist/chunk-QWKUKVRE.js +0 -2026
  224. package/dist/chunk-UITWA6DV.cjs +0 -2829
  225. package/dist/chunk-X67XRI2T.js +0 -410
  226. package/dist/post-quantum-JTTAAGO3.cjs +0 -6
  227. package/dist/post-quantum-RVPVDEPI.js +0 -4
  228. package/dist/wot/index.cjs +0 -29
  229. package/dist/wot/index.js +0 -4
@@ -1,13 +1,14 @@
1
1
  'use strict';
2
2
 
3
- var chunkQHVVVN47_cjs = require('./chunk-QHVVVN47.cjs');
4
- var chunkV2ILLPHK_cjs = require('./chunk-V2ILLPHK.cjs');
5
- var chunkARNKA274_cjs = require('./chunk-ARNKA274.cjs');
6
- var chunkEGIZHYJP_cjs = require('./chunk-EGIZHYJP.cjs');
3
+ var chunkMD6KDHVE_cjs = require('./chunk-MD6KDHVE.cjs');
4
+ var chunkCAUCGUEA_cjs = require('./chunk-CAUCGUEA.cjs');
5
+ var chunkBF2235SI_cjs = require('./chunk-BF2235SI.cjs');
6
+ var chunk3SAK5KFL_cjs = require('./chunk-3SAK5KFL.cjs');
7
+ var platform = require('@holoscript/platform');
7
8
 
8
9
  // src/compiler/IOSCompiler.ts
9
10
  var IOSCompiler_exports = {};
10
- chunkEGIZHYJP_cjs.__export(IOSCompiler_exports, {
11
+ chunk3SAK5KFL_cjs.__export(IOSCompiler_exports, {
11
12
  IOSCompiler: () => exports.IOSCompiler,
12
13
  compileToIOS: () => compileToIOS
13
14
  });
@@ -16,21 +17,20 @@ function compileToIOS(composition, options) {
16
17
  return compiler.compile(composition, "test-token");
17
18
  }
18
19
  exports.IOSCompiler = void 0;
19
- var init_IOSCompiler = chunkEGIZHYJP_cjs.__esm({
20
+ var init_IOSCompiler = chunk3SAK5KFL_cjs.__esm({
20
21
  "src/compiler/IOSCompiler.ts"() {
21
- chunkQHVVVN47_cjs.init_CompilerBase();
22
- chunkQHVVVN47_cjs.init_ANSNamespace();
23
- chunkV2ILLPHK_cjs.init_roomplan();
24
- chunkV2ILLPHK_cjs.init_lidar_scanner();
25
- chunkARNKA274_cjs.init_npu_scene();
26
- chunkARNKA274_cjs.init_portal_ar();
27
- chunkARNKA274_cjs.init_camera_hand_tracking();
28
- chunkV2ILLPHK_cjs.init_face_tracking();
29
- chunkV2ILLPHK_cjs.init_ios_object_capture();
30
- chunkV2ILLPHK_cjs.init_shareplay();
31
- chunkV2ILLPHK_cjs.init_uwb_positioning();
32
- chunkV2ILLPHK_cjs.init_airpods_spatial_audio();
33
- exports.IOSCompiler = class extends chunkQHVVVN47_cjs.CompilerBase {
22
+ chunkBF2235SI_cjs.init_CompilerBase();
23
+ chunkMD6KDHVE_cjs.init_roomplan();
24
+ chunkMD6KDHVE_cjs.init_lidar_scanner();
25
+ chunkCAUCGUEA_cjs.init_npu_scene();
26
+ chunkCAUCGUEA_cjs.init_portal_ar();
27
+ chunkCAUCGUEA_cjs.init_camera_hand_tracking();
28
+ chunkMD6KDHVE_cjs.init_face_tracking();
29
+ chunkMD6KDHVE_cjs.init_ios_object_capture();
30
+ chunkMD6KDHVE_cjs.init_shareplay();
31
+ chunkMD6KDHVE_cjs.init_uwb_positioning();
32
+ chunkMD6KDHVE_cjs.init_airpods_spatial_audio();
33
+ exports.IOSCompiler = class extends chunkBF2235SI_cjs.CompilerBase {
34
34
  constructor(options = {}) {
35
35
  super();
36
36
  this.compilerName = "IOSCompiler";
@@ -46,7 +46,7 @@ var init_IOSCompiler = chunkEGIZHYJP_cjs.__esm({
46
46
  };
47
47
  }
48
48
  getRequiredCapability() {
49
- return chunkQHVVVN47_cjs.ANSCapabilityPath.IOS;
49
+ return platform.ANSCapabilityPath.IOS;
50
50
  }
51
51
  compile(composition, agentToken, outputPath) {
52
52
  this.validateCompilerAccess(agentToken, outputPath);
@@ -669,9 +669,7 @@ var init_IOSCompiler = chunkEGIZHYJP_cjs.__esm({
669
669
  const name = this.sanitizeName(action.name);
670
670
  this.emit(`func ${name}() {`);
671
671
  this.indentLevel++;
672
- this.emit(
673
- `print("[HoloScript] Action: ${this.escapeStringValue(action.name, "Swift")}")`
674
- );
672
+ this.emit(`print("[HoloScript] Action: ${this.escapeStringValue(action.name, "Swift")}")`);
675
673
  this.emit("// Action implementation");
676
674
  this.indentLevel--;
677
675
  this.emit("}");
@@ -732,7 +730,9 @@ var init_IOSCompiler = chunkEGIZHYJP_cjs.__esm({
732
730
  this.indentLevel--;
733
731
  this.emit("} else {");
734
732
  this.indentLevel++;
735
- this.emit('print("[HoloScript] ARGeoTracking not available: \\(error?.localizedDescription ?? \\"unknown\\")")');
733
+ this.emit(
734
+ 'print("[HoloScript] ARGeoTracking not available: \\(error?.localizedDescription ?? \\"unknown\\")")'
735
+ );
736
736
  this.indentLevel--;
737
737
  this.emit("}");
738
738
  this.indentLevel--;
@@ -767,9 +767,13 @@ var init_IOSCompiler = chunkEGIZHYJP_cjs.__esm({
767
767
  const heading = headingConfig.degrees ?? 0;
768
768
  this.emit(`// Geo-anchor: ${this.escapeStringValue(obj.name, "Swift")}`);
769
769
  if (usesARGeoAnchor) {
770
- this.emit(`createGeoAnchor(name: "${this.escapeStringValue(obj.name, "Swift")}", latitude: ${lat}, longitude: ${lng}, altitude: ${alt}, heading: ${heading})`);
770
+ this.emit(
771
+ `createGeoAnchor(name: "${this.escapeStringValue(obj.name, "Swift")}", latitude: ${lat}, longitude: ${lng}, altitude: ${alt}, heading: ${heading})`
772
+ );
771
773
  } else {
772
- this.emit(`createLocationAnchor(name: "${this.escapeStringValue(obj.name, "Swift")}", latitude: ${lat}, longitude: ${lng}, altitude: ${alt})`);
774
+ this.emit(
775
+ `createLocationAnchor(name: "${this.escapeStringValue(obj.name, "Swift")}", latitude: ${lat}, longitude: ${lng}, altitude: ${alt})`
776
+ );
773
777
  }
774
778
  }
775
779
  const usesPersist = this.compositionHasTrait(composition, "geo_persist");
@@ -782,20 +786,28 @@ var init_IOSCompiler = chunkEGIZHYJP_cjs.__esm({
782
786
  this.emit("}");
783
787
  this.emit("");
784
788
  if (usesARGeoAnchor) {
785
- this.emit("func createGeoAnchor(name: String, latitude: Double, longitude: Double, altitude: Double, heading: Double) {");
789
+ this.emit(
790
+ "func createGeoAnchor(name: String, latitude: Double, longitude: Double, altitude: Double, heading: Double) {"
791
+ );
786
792
  this.indentLevel++;
787
793
  this.emit("guard let arView = arView else { return }");
788
- this.emit("let coordinate = CLLocationCoordinate2D(latitude: latitude, longitude: longitude)");
794
+ this.emit(
795
+ "let coordinate = CLLocationCoordinate2D(latitude: latitude, longitude: longitude)"
796
+ );
789
797
  this.emit("let geoAnchor = ARGeoAnchor(coordinate: coordinate, altitude: altitude)");
790
798
  this.emit("geoAnchor.name = name");
791
799
  this.emit("arView.session.add(anchor: geoAnchor)");
792
800
  this.emit("geoAnchors[name] = geoAnchor");
793
- this.emit('print("[HoloScript] Geo-anchored: \\(name) at (\\(latitude), \\(longitude), \\(altitude))")');
801
+ this.emit(
802
+ 'print("[HoloScript] Geo-anchored: \\(name) at (\\(latitude), \\(longitude), \\(altitude))")'
803
+ );
794
804
  this.indentLevel--;
795
805
  this.emit("}");
796
806
  this.emit("");
797
807
  }
798
- this.emit("func createLocationAnchor(name: String, latitude: Double, longitude: Double, altitude: Double) {");
808
+ this.emit(
809
+ "func createLocationAnchor(name: String, latitude: Double, longitude: Double, altitude: Double) {"
810
+ );
799
811
  this.indentLevel++;
800
812
  this.emit("guard let arView = arView else { return }");
801
813
  this.emit("let _ = CLLocation(latitude: latitude, longitude: longitude)");
@@ -820,14 +832,18 @@ var init_IOSCompiler = chunkEGIZHYJP_cjs.__esm({
820
832
  this.indentLevel++;
821
833
  this.emit("guard let map = worldMap else {");
822
834
  this.indentLevel++;
823
- this.emit('print("[HoloScript] Failed to get world map: \\(error?.localizedDescription ?? \\"unknown\\")")');
835
+ this.emit(
836
+ 'print("[HoloScript] Failed to get world map: \\(error?.localizedDescription ?? \\"unknown\\")")'
837
+ );
824
838
  this.emit("return");
825
839
  this.indentLevel--;
826
840
  this.emit("}");
827
841
  this.emit("");
828
842
  this.emit("do {");
829
843
  this.indentLevel++;
830
- this.emit("let data = try NSKeyedArchiver.archivedData(withRootObject: map, requiringSecureCoding: true)");
844
+ this.emit(
845
+ "let data = try NSKeyedArchiver.archivedData(withRootObject: map, requiringSecureCoding: true)"
846
+ );
831
847
  this.emit("let url = self.worldMapURL()");
832
848
  this.emit("try data.write(to: url)");
833
849
  this.emit('print("[HoloScript] World map saved to \\(url)")');
@@ -846,7 +862,9 @@ var init_IOSCompiler = chunkEGIZHYJP_cjs.__esm({
846
862
  this.indentLevel++;
847
863
  this.emit("let url = worldMapURL()");
848
864
  this.emit("guard let data = try? Data(contentsOf: url),");
849
- this.emit(" let worldMap = try? NSKeyedUnarchiver.unarchivedObject(ofClass: ARWorldMap.self, from: data) else {");
865
+ this.emit(
866
+ " let worldMap = try? NSKeyedUnarchiver.unarchivedObject(ofClass: ARWorldMap.self, from: data) else {"
867
+ );
850
868
  this.indentLevel++;
851
869
  this.emit('print("[HoloScript] No saved world map found")');
852
870
  this.emit("return");
@@ -857,14 +875,18 @@ var init_IOSCompiler = chunkEGIZHYJP_cjs.__esm({
857
875
  this.emit("let configuration = ARWorldTrackingConfiguration()");
858
876
  this.emit("configuration.planeDetection = [.horizontal, .vertical]");
859
877
  this.emit("configuration.initialWorldMap = worldMap");
860
- this.emit("arView.session.run(configuration, options: [.resetTracking, .removeExistingAnchors])");
878
+ this.emit(
879
+ "arView.session.run(configuration, options: [.resetTracking, .removeExistingAnchors])"
880
+ );
861
881
  this.emit('print("[HoloScript] World map restored with \\(worldMap.anchors.count) anchors")');
862
882
  this.indentLevel--;
863
883
  this.emit("}");
864
884
  this.emit("");
865
885
  this.emit("private func worldMapURL() -> URL {");
866
886
  this.indentLevel++;
867
- this.emit("let documentsPath = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first!");
887
+ this.emit(
888
+ "let documentsPath = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first!"
889
+ );
868
890
  this.emit('return documentsPath.appendingPathComponent("holoscript_worldmap.arworldmap")');
869
891
  this.indentLevel--;
870
892
  this.emit("}");
@@ -876,7 +898,7 @@ var init_IOSCompiler = chunkEGIZHYJP_cjs.__esm({
876
898
  * Check whether the composition references any roomplan_* traits.
877
899
  */
878
900
  hasRoomPlanTraits(composition) {
879
- const roomplanNames = chunkV2ILLPHK_cjs.ROOMPLAN_TRAITS;
901
+ const roomplanNames = chunkMD6KDHVE_cjs.ROOMPLAN_TRAITS;
880
902
  for (const obj of composition.objects || []) {
881
903
  if (obj.traits?.some((t) => roomplanNames.includes(t.name))) {
882
904
  return true;
@@ -911,9 +933,7 @@ var init_IOSCompiler = chunkEGIZHYJP_cjs.__esm({
911
933
  this.emit("import SceneKit");
912
934
  this.emit("import SwiftUI");
913
935
  this.emit("");
914
- this.emit(
915
- "/// A single entity in the HoloScript scene graph produced from a RoomPlan scan."
916
- );
936
+ this.emit("/// A single entity in the HoloScript scene graph produced from a RoomPlan scan.");
917
937
  this.emit("struct HoloEntity: Identifiable {");
918
938
  this.indentLevel++;
919
939
  this.emit("let id: UUID");
@@ -972,9 +992,7 @@ var init_IOSCompiler = chunkEGIZHYJP_cjs.__esm({
972
992
  this.emit("");
973
993
  this.emit("// MARK: - Surface mapping");
974
994
  this.emit("");
975
- this.emit(
976
- "private func mapSurface(_ surface: CapturedRoom.Surface) -> HoloEntity {"
977
- );
995
+ this.emit("private func mapSurface(_ surface: CapturedRoom.Surface) -> HoloEntity {");
978
996
  this.indentLevel++;
979
997
  this.emit("let (label, category, traits) = surfaceMeta(surface)");
980
998
  this.emit("return HoloEntity(");
@@ -1030,9 +1048,7 @@ var init_IOSCompiler = chunkEGIZHYJP_cjs.__esm({
1030
1048
  this.emit("");
1031
1049
  this.emit("// MARK: - Object mapping");
1032
1050
  this.emit("");
1033
- this.emit(
1034
- "private func mapObject(_ object: CapturedRoom.Object) -> HoloEntity {"
1035
- );
1051
+ this.emit("private func mapObject(_ object: CapturedRoom.Object) -> HoloEntity {");
1036
1052
  this.indentLevel++;
1037
1053
  this.emit("let (label, traits) = objectMeta(object)");
1038
1054
  this.emit("return HoloEntity(");
@@ -1049,9 +1065,7 @@ var init_IOSCompiler = chunkEGIZHYJP_cjs.__esm({
1049
1065
  this.indentLevel--;
1050
1066
  this.emit("}");
1051
1067
  this.emit("");
1052
- this.emit(
1053
- "private func objectMeta(_ o: CapturedRoom.Object) -> (String, [String]) {"
1054
- );
1068
+ this.emit("private func objectMeta(_ o: CapturedRoom.Object) -> (String, [String]) {");
1055
1069
  this.indentLevel++;
1056
1070
  this.emit("switch o.category {");
1057
1071
  this.emit("case .table:");
@@ -1105,9 +1119,7 @@ var init_IOSCompiler = chunkEGIZHYJP_cjs.__esm({
1105
1119
  this.emit("self.capturedRoom = room");
1106
1120
  this.emit("var result: [HoloEntity] = []");
1107
1121
  this.emit("");
1108
- this.emit(
1109
- "for surface in room.walls + room.doors + room.windows + room.openings {"
1110
- );
1122
+ this.emit("for surface in room.walls + room.doors + room.windows + room.openings {");
1111
1123
  this.indentLevel++;
1112
1124
  this.emit("result.append(mapSurface(surface))");
1113
1125
  this.indentLevel--;
@@ -1126,35 +1138,27 @@ var init_IOSCompiler = chunkEGIZHYJP_cjs.__esm({
1126
1138
  this.emit("}");
1127
1139
  this.emit("");
1128
1140
  this.emit("self.entities = result");
1129
- this.emit(
1130
- 'print("[HoloScript] Processed \\(result.count) entities from RoomPlan scan")'
1131
- );
1141
+ this.emit('print("[HoloScript] Processed \\(result.count) entities from RoomPlan scan")');
1132
1142
  this.indentLevel--;
1133
1143
  this.emit("}");
1134
1144
  this.emit("");
1135
1145
  this.emit("// MARK: - .holo export");
1136
1146
  this.emit("");
1137
- this.emit(
1138
- "/// Serialize captured entities to a HoloScript .holo scene string."
1139
- );
1147
+ this.emit("/// Serialize captured entities to a HoloScript .holo scene string.");
1140
1148
  this.emit("func exportToHolo() -> String {");
1141
1149
  this.indentLevel++;
1142
1150
  this.emit("var lines: [String] = []");
1143
1151
  this.emit('lines.append("composition RoomScan {")');
1144
1152
  this.emit("for entity in entities {");
1145
1153
  this.indentLevel++;
1146
- this.emit(
1147
- 'lines.append(" object \\(entity.label)_\\(entity.id.uuidString.prefix(8)) {")'
1148
- );
1154
+ this.emit('lines.append(" object \\(entity.label)_\\(entity.id.uuidString.prefix(8)) {")');
1149
1155
  this.emit(
1150
1156
  'lines.append(" position: [\\(entity.position.x), \\(entity.position.y), \\(entity.position.z)]")'
1151
1157
  );
1152
1158
  this.emit(
1153
1159
  'lines.append(" dimensions: [\\(entity.dimensions.x), \\(entity.dimensions.y), \\(entity.dimensions.z)]")'
1154
1160
  );
1155
- this.emit(
1156
- 'lines.append(" category: \\"\\(entity.category)\\"")'
1157
- );
1161
+ this.emit('lines.append(" category: \\"\\(entity.category)\\"")');
1158
1162
  this.emit("for trait in entity.traits {");
1159
1163
  this.indentLevel++;
1160
1164
  this.emit('lines.append(" trait \\(trait)")');
@@ -1170,13 +1174,9 @@ var init_IOSCompiler = chunkEGIZHYJP_cjs.__esm({
1170
1174
  this.indentLevel--;
1171
1175
  this.emit("}");
1172
1176
  this.emit("");
1173
- this.emit(
1174
- `extension ${cls}RoomPlanManager: RoomCaptureSessionDelegate {`
1175
- );
1177
+ this.emit(`extension ${cls}RoomPlanManager: RoomCaptureSessionDelegate {`);
1176
1178
  this.indentLevel++;
1177
- this.emit(
1178
- "func captureSession(_ session: RoomCaptureSession, didUpdate room: CapturedRoom) {"
1179
- );
1179
+ this.emit("func captureSession(_ session: RoomCaptureSession, didUpdate room: CapturedRoom) {");
1180
1180
  this.indentLevel++;
1181
1181
  this.emit("DispatchQueue.main.async { [weak self] in");
1182
1182
  this.indentLevel++;
@@ -1195,9 +1195,7 @@ var init_IOSCompiler = chunkEGIZHYJP_cjs.__esm({
1195
1195
  this.emit("self?.isScanning = false");
1196
1196
  this.emit("if let error = error {");
1197
1197
  this.indentLevel++;
1198
- this.emit(
1199
- 'print("[HoloScript] RoomPlan error: \\(error.localizedDescription)")'
1200
- );
1198
+ this.emit('print("[HoloScript] RoomPlan error: \\(error.localizedDescription)")');
1201
1199
  this.emit("return");
1202
1200
  this.indentLevel--;
1203
1201
  this.emit("}");
@@ -1213,9 +1211,7 @@ var init_IOSCompiler = chunkEGIZHYJP_cjs.__esm({
1213
1211
  this.emit("");
1214
1212
  this.emit(`struct ${cls}RoomPlanView: View {`);
1215
1213
  this.indentLevel++;
1216
- this.emit(
1217
- `@StateObject private var manager = ${cls}RoomPlanManager()`
1218
- );
1214
+ this.emit(`@StateObject private var manager = ${cls}RoomPlanManager()`);
1219
1215
  this.emit("");
1220
1216
  this.emit("var body: some View {");
1221
1217
  this.indentLevel++;
@@ -1245,12 +1241,8 @@ var init_IOSCompiler = chunkEGIZHYJP_cjs.__esm({
1245
1241
  this.emit("VStack(alignment: .leading) {");
1246
1242
  this.indentLevel++;
1247
1243
  this.emit("Text(entity.label).font(.headline)");
1248
- this.emit(
1249
- "Text(entity.category).font(.caption).foregroundColor(.secondary)"
1250
- );
1251
- this.emit(
1252
- 'Text(entity.traits.joined(separator: ", ")).font(.caption2)'
1253
- );
1244
+ this.emit("Text(entity.category).font(.caption).foregroundColor(.secondary)");
1245
+ this.emit('Text(entity.traits.joined(separator: ", ")).font(.caption2)');
1254
1246
  this.indentLevel--;
1255
1247
  this.emit("}");
1256
1248
  this.indentLevel--;
@@ -1265,14 +1257,14 @@ var init_IOSCompiler = chunkEGIZHYJP_cjs.__esm({
1265
1257
  }
1266
1258
  // === LiDAR Scanner (iOS 15+, LiDAR hardware — M.010.02a) ===
1267
1259
  hasLiDARTraits(composition) {
1268
- const lidarNames = chunkV2ILLPHK_cjs.LIDAR_SCANNER_TRAITS;
1260
+ const lidarNames = chunkMD6KDHVE_cjs.LIDAR_SCANNER_TRAITS;
1269
1261
  for (const obj of composition.objects || []) {
1270
1262
  if (obj.traits?.some((t) => lidarNames.includes(t.name))) return true;
1271
1263
  }
1272
1264
  return false;
1273
1265
  }
1274
1266
  collectLiDARTraits(composition) {
1275
- const lidarNames = chunkV2ILLPHK_cjs.LIDAR_SCANNER_TRAITS;
1267
+ const lidarNames = chunkMD6KDHVE_cjs.LIDAR_SCANNER_TRAITS;
1276
1268
  const found = /* @__PURE__ */ new Set();
1277
1269
  for (const obj of composition.objects || []) {
1278
1270
  for (const t of obj.traits || []) {
@@ -1298,7 +1290,9 @@ var init_IOSCompiler = chunkEGIZHYJP_cjs.__esm({
1298
1290
  const cls = this.options.className;
1299
1291
  const traits = this.collectLiDARTraits(composition);
1300
1292
  this.emit("// Auto-generated by HoloScript IOSCompiler \u2014 LiDAR Scanner integration");
1301
- this.emit(`// Source: composition "${this.escapeStringValue(composition.name, "Swift")}"`);
1293
+ this.emit(
1294
+ `// Source: composition "${this.escapeStringValue(composition.name, "Swift")}"`
1295
+ );
1302
1296
  this.emit("// Requires iOS 15.0+, device with LiDAR sensor");
1303
1297
  this.emit("// Do not edit manually \u2014 regenerate from .holo source");
1304
1298
  this.emit("");
@@ -1354,7 +1348,8 @@ var init_IOSCompiler = chunkEGIZHYJP_cjs.__esm({
1354
1348
  this.emit("@Published var meshAnchors: [ARMeshAnchor] = []");
1355
1349
  if (traits.has("lidar_point_cloud")) this.emit("@Published var pointCloud: [simd_float3] = []");
1356
1350
  if (traits.has("lidar_depth_map")) this.emit("@Published var depthMap: CVPixelBuffer?");
1357
- if (traits.has("lidar_depth_confidence")) this.emit("@Published var confidenceMap: CVPixelBuffer?");
1351
+ if (traits.has("lidar_depth_confidence"))
1352
+ this.emit("@Published var confidenceMap: CVPixelBuffer?");
1358
1353
  this.emit("");
1359
1354
  this.emit("private var arSession: ARSession?");
1360
1355
  this.emit("");
@@ -1367,7 +1362,9 @@ var init_IOSCompiler = chunkEGIZHYJP_cjs.__esm({
1367
1362
  this.emit("/// Begin a LiDAR scanning session.");
1368
1363
  this.emit("func startScan() {");
1369
1364
  this.indentLevel++;
1370
- this.emit("guard ARWorldTrackingConfiguration.supportsSceneReconstruction(.meshWithClassification) else {");
1365
+ this.emit(
1366
+ "guard ARWorldTrackingConfiguration.supportsSceneReconstruction(.meshWithClassification) else {"
1367
+ );
1371
1368
  this.indentLevel++;
1372
1369
  this.emit('print("[HoloScript] LiDAR scene reconstruction is not supported on this device")');
1373
1370
  this.emit("return");
@@ -1402,7 +1399,9 @@ var init_IOSCompiler = chunkEGIZHYJP_cjs.__esm({
1402
1399
  this.emit("// MARK: - Mesh extraction");
1403
1400
  this.emit("");
1404
1401
  this.emit("/// Extract vertices, normals, and faces from an ARMeshGeometry.");
1405
- this.emit("func extractGeometry(_ meshGeometry: ARMeshGeometry) -> (vertices: [simd_float3], normals: [simd_float3], faces: [[UInt32]]) {");
1402
+ this.emit(
1403
+ "func extractGeometry(_ meshGeometry: ARMeshGeometry) -> (vertices: [simd_float3], normals: [simd_float3], faces: [[UInt32]]) {"
1404
+ );
1406
1405
  this.indentLevel++;
1407
1406
  this.emit("var vertices: [simd_float3] = []");
1408
1407
  this.emit("var normals: [simd_float3] = []");
@@ -1411,7 +1410,9 @@ var init_IOSCompiler = chunkEGIZHYJP_cjs.__esm({
1411
1410
  this.emit("let vertexBuffer = meshGeometry.vertices");
1412
1411
  this.emit("for i in 0..<vertexBuffer.count {");
1413
1412
  this.indentLevel++;
1414
- this.emit("let ptr = vertexBuffer.buffer.contents().advanced(by: vertexBuffer.offset + vertexBuffer.stride * i)");
1413
+ this.emit(
1414
+ "let ptr = vertexBuffer.buffer.contents().advanced(by: vertexBuffer.offset + vertexBuffer.stride * i)"
1415
+ );
1415
1416
  this.emit("let vertex = ptr.assumingMemoryBound(to: simd_float3.self).pointee");
1416
1417
  this.emit("vertices.append(vertex)");
1417
1418
  this.indentLevel--;
@@ -1420,7 +1421,9 @@ var init_IOSCompiler = chunkEGIZHYJP_cjs.__esm({
1420
1421
  this.emit("let normalBuffer = meshGeometry.normals");
1421
1422
  this.emit("for i in 0..<normalBuffer.count {");
1422
1423
  this.indentLevel++;
1423
- this.emit("let ptr = normalBuffer.buffer.contents().advanced(by: normalBuffer.offset + normalBuffer.stride * i)");
1424
+ this.emit(
1425
+ "let ptr = normalBuffer.buffer.contents().advanced(by: normalBuffer.offset + normalBuffer.stride * i)"
1426
+ );
1424
1427
  this.emit("let normal = ptr.assumingMemoryBound(to: simd_float3.self).pointee");
1425
1428
  this.emit("normals.append(normal)");
1426
1429
  this.indentLevel--;
@@ -1432,7 +1435,9 @@ var init_IOSCompiler = chunkEGIZHYJP_cjs.__esm({
1432
1435
  this.emit("var indices: [UInt32] = []");
1433
1436
  this.emit("for j in 0..<faceBuffer.indexCountPerPrimitive {");
1434
1437
  this.indentLevel++;
1435
- this.emit("let ptr = faceBuffer.buffer.contents().advanced(by: faceBuffer.offset + (i * faceBuffer.indexCountPerPrimitive + j) * faceBuffer.bytesPerIndex)");
1438
+ this.emit(
1439
+ "let ptr = faceBuffer.buffer.contents().advanced(by: faceBuffer.offset + (i * faceBuffer.indexCountPerPrimitive + j) * faceBuffer.bytesPerIndex)"
1440
+ );
1436
1441
  this.emit("let index = ptr.assumingMemoryBound(to: UInt32.self).pointee");
1437
1442
  this.emit("indices.append(index)");
1438
1443
  this.indentLevel--;
@@ -1455,7 +1460,9 @@ var init_IOSCompiler = chunkEGIZHYJP_cjs.__esm({
1455
1460
  this.emit("var classifications: [ARMeshClassification] = []");
1456
1461
  this.emit("for i in 0..<classBuffer.count {");
1457
1462
  this.indentLevel++;
1458
- this.emit("let ptr = classBuffer.buffer.contents().advanced(by: classBuffer.offset + classBuffer.stride * i)");
1463
+ this.emit(
1464
+ "let ptr = classBuffer.buffer.contents().advanced(by: classBuffer.offset + classBuffer.stride * i)"
1465
+ );
1459
1466
  this.emit("let raw = ptr.assumingMemoryBound(to: UInt8.self).pointee");
1460
1467
  this.emit("let classification = ARMeshClassification(rawValue: Int(raw)) ?? .none");
1461
1468
  this.emit("classifications.append(classification)");
@@ -1475,7 +1482,9 @@ var init_IOSCompiler = chunkEGIZHYJP_cjs.__esm({
1475
1482
  if (traits.has("lidar_mesh_classification") || traits.has("lidar_mesh_to_holo")) {
1476
1483
  this.emit("let classifications = extractClassifications(anchor)");
1477
1484
  this.emit("");
1478
- this.emit("var grouped: [ARMeshClassification: (verts: [simd_float3], norms: [simd_float3], faces: [[UInt32]])] = [:]");
1485
+ this.emit(
1486
+ "var grouped: [ARMeshClassification: (verts: [simd_float3], norms: [simd_float3], faces: [[UInt32]])] = [:]"
1487
+ );
1479
1488
  this.emit("for (i, face) in faces.enumerated() {");
1480
1489
  this.indentLevel++;
1481
1490
  this.emit("let cls = i < classifications.count ? classifications[i] : .none");
@@ -1503,7 +1512,9 @@ var init_IOSCompiler = chunkEGIZHYJP_cjs.__esm({
1503
1512
  this.emit("normals: data.norms,");
1504
1513
  this.emit("faces: data.faces,");
1505
1514
  this.emit("transform: anchor.transform,");
1506
- this.emit('traits: ["lidar_mesh_classification", "lidar_\\(holoLabel(for: classification))"]');
1515
+ this.emit(
1516
+ 'traits: ["lidar_mesh_classification", "lidar_\\(holoLabel(for: classification))"]'
1517
+ );
1507
1518
  this.indentLevel--;
1508
1519
  this.emit("))");
1509
1520
  this.indentLevel--;
@@ -1564,7 +1575,9 @@ var init_IOSCompiler = chunkEGIZHYJP_cjs.__esm({
1564
1575
  this.emit("let asset = MDLAsset(bufferAllocator: allocator)");
1565
1576
  this.emit("for anchor in meshAnchors {");
1566
1577
  this.indentLevel++;
1567
- this.emit("let mdlMesh = anchor.geometry.toMDLMesh(device: MTLCreateSystemDefaultDevice()!, allocator: allocator)");
1578
+ this.emit(
1579
+ "let mdlMesh = anchor.geometry.toMDLMesh(device: MTLCreateSystemDefaultDevice()!, allocator: allocator)"
1580
+ );
1568
1581
  this.emit("asset.add(mdlMesh)");
1569
1582
  this.indentLevel--;
1570
1583
  this.emit("}");
@@ -1606,7 +1619,9 @@ var init_IOSCompiler = chunkEGIZHYJP_cjs.__esm({
1606
1619
  this.indentLevel++;
1607
1620
  this.emit("let device = MTLCreateSystemDefaultDevice()!");
1608
1621
  this.emit("let allocator = MTKMeshBufferAllocator(device: device)");
1609
- this.emit("let simplified = MDLMesh(meshBySubdividing: mdlMesh, submeshIndex: 0, subdivisionLevels: 0, allocator: allocator)");
1622
+ this.emit(
1623
+ "let simplified = MDLMesh(meshBySubdividing: mdlMesh, submeshIndex: 0, subdivisionLevels: 0, allocator: allocator)"
1624
+ );
1610
1625
  this.emit('print("[HoloScript] Mesh simplified to target face count: \\(targetFaceCount)")');
1611
1626
  this.emit("return simplified");
1612
1627
  this.indentLevel--;
@@ -1671,7 +1686,9 @@ var init_IOSCompiler = chunkEGIZHYJP_cjs.__esm({
1671
1686
  this.emit("self?.entities.append(contentsOf: newEntities)");
1672
1687
  this.indentLevel--;
1673
1688
  this.emit("}");
1674
- this.emit('print("[HoloScript] LiDAR mesh updated: \\(self?.meshAnchors.count ?? 0) anchors, \\(self?.entities.count ?? 0) entities")');
1689
+ this.emit(
1690
+ 'print("[HoloScript] LiDAR mesh updated: \\(self?.meshAnchors.count ?? 0) anchors, \\(self?.entities.count ?? 0) entities")'
1691
+ );
1675
1692
  this.indentLevel--;
1676
1693
  this.emit("}");
1677
1694
  this.indentLevel--;
@@ -1737,7 +1754,7 @@ var init_IOSCompiler = chunkEGIZHYJP_cjs.__esm({
1737
1754
  * Check whether the composition references any npu_* scene understanding traits.
1738
1755
  */
1739
1756
  hasNPUSceneTraits(composition) {
1740
- const npuNames = chunkARNKA274_cjs.NPU_SCENE_TRAITS;
1757
+ const npuNames = chunkCAUCGUEA_cjs.NPU_SCENE_TRAITS;
1741
1758
  for (const obj of composition.objects || []) {
1742
1759
  if (obj.traits?.some((t) => {
1743
1760
  const name = typeof t === "string" ? t : t.name;
@@ -1763,7 +1780,7 @@ var init_IOSCompiler = chunkEGIZHYJP_cjs.__esm({
1763
1780
  this.lines = [];
1764
1781
  this.indentLevel = 0;
1765
1782
  const cls = this.options.className;
1766
- const defaults = chunkARNKA274_cjs.NPU_SCENE_DEFAULTS;
1783
+ const defaults = chunkCAUCGUEA_cjs.NPU_SCENE_DEFAULTS;
1767
1784
  this.emit("// Auto-generated by HoloScript IOSCompiler \u2014 NPU Scene Understanding");
1768
1785
  this.emit(
1769
1786
  `// Source: composition "${this.escapeStringValue(composition.name, "Swift")}"`
@@ -1810,7 +1827,7 @@ var init_IOSCompiler = chunkEGIZHYJP_cjs.__esm({
1810
1827
  for (const obj of composition.objects || []) {
1811
1828
  for (const trait of obj.traits || []) {
1812
1829
  const name = typeof trait === "string" ? trait : trait.name;
1813
- if (chunkARNKA274_cjs.NPU_SCENE_TRAITS.includes(name)) {
1830
+ if (chunkCAUCGUEA_cjs.NPU_SCENE_TRAITS.includes(name)) {
1814
1831
  usedTraits.add(name);
1815
1832
  }
1816
1833
  }
@@ -1823,7 +1840,9 @@ var init_IOSCompiler = chunkEGIZHYJP_cjs.__esm({
1823
1840
  this.emit("let request = VNClassifyImageRequest { [weak self] request, error in");
1824
1841
  this.indentLevel++;
1825
1842
  this.emit("guard let self = self, error == nil else { return }");
1826
- this.emit("guard let results = request.results as? [VNClassificationObservation] else { return }");
1843
+ this.emit(
1844
+ "guard let results = request.results as? [VNClassificationObservation] else { return }"
1845
+ );
1827
1846
  this.emit("let filtered = results.filter { $0.confidence >= self.confidenceThreshold }");
1828
1847
  this.emit(" .prefix(self.maxDetections)");
1829
1848
  this.emit("DispatchQueue.main.async {");
@@ -1831,7 +1850,9 @@ var init_IOSCompiler = chunkEGIZHYJP_cjs.__esm({
1831
1850
  this.emit("self.detections = filtered.map { obs in");
1832
1851
  this.indentLevel++;
1833
1852
  this.emit("NPUDetection(label: obs.identifier, confidence: obs.confidence,");
1834
- this.emit(" boundingBox: nil, position: nil, segmentationMask: nil, depthValue: nil)");
1853
+ this.emit(
1854
+ " boundingBox: nil, position: nil, segmentationMask: nil, depthValue: nil)"
1855
+ );
1835
1856
  this.indentLevel--;
1836
1857
  this.emit("}");
1837
1858
  this.emit("self.inferenceCount += 1");
@@ -1875,7 +1896,9 @@ var init_IOSCompiler = chunkEGIZHYJP_cjs.__esm({
1875
1896
  this.emit("");
1876
1897
  this.emit("private func handleDetectionResults(_ results: [VNObservation]?) {");
1877
1898
  this.indentLevel++;
1878
- this.emit("guard let observations = results as? [VNRecognizedObjectObservation] else { return }");
1899
+ this.emit(
1900
+ "guard let observations = results as? [VNRecognizedObjectObservation] else { return }"
1901
+ );
1879
1902
  this.emit("let filtered = observations.filter { $0.confidence >= confidenceThreshold }");
1880
1903
  this.emit(" .prefix(maxDetections)");
1881
1904
  this.emit("DispatchQueue.main.async { [weak self] in");
@@ -1945,7 +1968,9 @@ var init_IOSCompiler = chunkEGIZHYJP_cjs.__esm({
1945
1968
  this.emit("if #available(iOS 18.0, *) {");
1946
1969
  this.indentLevel++;
1947
1970
  this.emit("let request = VNGenerateDepthRequest()");
1948
- this.emit("let handler = VNImageRequestHandler(cvPixelBuffer: frame.capturedImage, options: [:])");
1971
+ this.emit(
1972
+ "let handler = VNImageRequestHandler(cvPixelBuffer: frame.capturedImage, options: [:])"
1973
+ );
1949
1974
  this.emit("try? handler.perform([request])");
1950
1975
  this.emit("if let result = request.results?.first {");
1951
1976
  this.indentLevel++;
@@ -1970,14 +1995,18 @@ var init_IOSCompiler = chunkEGIZHYJP_cjs.__esm({
1970
1995
  if (usedTraits.has("npu_entity_pipe")) {
1971
1996
  this.emit("// MARK: - Entity Pipeline (npu_entity_pipe)");
1972
1997
  this.emit("");
1973
- this.emit("func mapDetectionsToEntities(_ detections: [NPUDetection], in sceneView: ARSCNView) -> [SCNNode] {");
1998
+ this.emit(
1999
+ "func mapDetectionsToEntities(_ detections: [NPUDetection], in sceneView: ARSCNView) -> [SCNNode] {"
2000
+ );
1974
2001
  this.indentLevel++;
1975
2002
  this.emit("var nodes: [SCNNode] = []");
1976
2003
  this.emit("for detection in detections {");
1977
2004
  this.indentLevel++;
1978
2005
  this.emit("guard let bbox = detection.boundingBox else { continue }");
1979
2006
  this.emit("let center = CGPoint(x: bbox.midX, y: bbox.midY)");
1980
- this.emit("guard let query = sceneView.raycastQuery(from: center, allowing: .estimatedPlane, alignment: .any),");
2007
+ this.emit(
2008
+ "guard let query = sceneView.raycastQuery(from: center, allowing: .estimatedPlane, alignment: .any),"
2009
+ );
1981
2010
  this.emit(" let result = sceneView.session.raycast(query).first else { continue }");
1982
2011
  this.emit("let anchor = ARAnchor(name: detection.label, transform: result.worldTransform)");
1983
2012
  this.emit("sceneView.session.add(anchor: anchor)");
@@ -1985,7 +2014,9 @@ var init_IOSCompiler = chunkEGIZHYJP_cjs.__esm({
1985
2014
  this.emit("node.name = detection.label");
1986
2015
  this.emit(`node.simdWorldPosition = simd_make_float3(result.worldTransform.columns.3)`);
1987
2016
  this.emit(`let sphere = SCNSphere(radius: CGFloat(entityScale))`);
1988
- this.emit("sphere.firstMaterial?.diffuse.contents = UIColor.systemBlue.withAlphaComponent(0.6)");
2017
+ this.emit(
2018
+ "sphere.firstMaterial?.diffuse.contents = UIColor.systemBlue.withAlphaComponent(0.6)"
2019
+ );
1989
2020
  this.emit("node.geometry = sphere");
1990
2021
  this.emit("nodes.append(node)");
1991
2022
  this.indentLevel--;
@@ -2037,9 +2068,13 @@ var init_IOSCompiler = chunkEGIZHYJP_cjs.__esm({
2037
2068
  this.emit("");
2038
2069
  this.emit("func loadCustomModel(named name: String) throws {");
2039
2070
  this.indentLevel++;
2040
- this.emit('guard let url = Bundle.main.url(forResource: name, withExtension: "mlmodelc") else {');
2071
+ this.emit(
2072
+ 'guard let url = Bundle.main.url(forResource: name, withExtension: "mlmodelc") else {'
2073
+ );
2041
2074
  this.indentLevel++;
2042
- this.emit('throw NSError(domain: "HoloScript", code: -1, userInfo: [NSLocalizedDescriptionKey: "Model \\(name) not found"])');
2075
+ this.emit(
2076
+ 'throw NSError(domain: "HoloScript", code: -1, userInfo: [NSLocalizedDescriptionKey: "Model \\(name) not found"])'
2077
+ );
2043
2078
  this.indentLevel--;
2044
2079
  this.emit("}");
2045
2080
  this.emit("try loadCustomModel(at: url)");
@@ -2052,7 +2087,9 @@ var init_IOSCompiler = chunkEGIZHYJP_cjs.__esm({
2052
2087
  this.emit("");
2053
2088
  this.emit("func createLabelNode(for detection: NPUDetection) -> SCNNode {");
2054
2089
  this.indentLevel++;
2055
- this.emit('let text = SCNText(string: "\\(detection.label) (\\(String(format: "%.0f%%", detection.confidence * 100)))", extrusionDepth: 0.5)');
2090
+ this.emit(
2091
+ 'let text = SCNText(string: "\\(detection.label) (\\(String(format: "%.0f%%", detection.confidence * 100)))", extrusionDepth: 0.5)'
2092
+ );
2056
2093
  this.emit("text.font = UIFont.systemFont(ofSize: 4, weight: .bold)");
2057
2094
  this.emit("text.firstMaterial?.diffuse.contents = UIColor.white");
2058
2095
  this.emit("text.firstMaterial?.isDoubleSided = true");
@@ -2216,7 +2253,7 @@ var init_IOSCompiler = chunkEGIZHYJP_cjs.__esm({
2216
2253
  }
2217
2254
  // === Portal AR Methods (M.010.06) ===
2218
2255
  hasPortalARTraits(composition) {
2219
- const portalNames = chunkARNKA274_cjs.PORTAL_AR_TRAITS;
2256
+ const portalNames = chunkCAUCGUEA_cjs.PORTAL_AR_TRAITS;
2220
2257
  for (const obj of composition.objects || []) {
2221
2258
  for (const trait of obj.traits || []) {
2222
2259
  const name = typeof trait === "string" ? trait : trait.name;
@@ -2284,7 +2321,9 @@ var init_IOSCompiler = chunkEGIZHYJP_cjs.__esm({
2284
2321
  if (this.compositionHasTrait(composition, "portal_people_occlusion")) {
2285
2322
  this.emit("");
2286
2323
  this.emit("// People occlusion via ARKit person segmentation");
2287
- this.emit("if ARWorldTrackingConfiguration.supportsFrameSemantics(.personSegmentationWithDepth) {");
2324
+ this.emit(
2325
+ "if ARWorldTrackingConfiguration.supportsFrameSemantics(.personSegmentationWithDepth) {"
2326
+ );
2288
2327
  this.indentLevel++;
2289
2328
  this.emit("config.frameSemantics.insert(.personSegmentationWithDepth)");
2290
2329
  this.indentLevel--;
@@ -2317,14 +2356,20 @@ var init_IOSCompiler = chunkEGIZHYJP_cjs.__esm({
2317
2356
  this.emit("// Apply depth-based occlusion to holographic layer");
2318
2357
  this.emit("for child in holographicLayer.childNodes {");
2319
2358
  this.indentLevel++;
2320
- this.emit("let screenPoint = frame.camera.projectPoint(child.worldPosition, orientation: .portrait, viewportSize: CGSize(width: 1, height: 1))");
2321
- this.emit("child.isHidden = isOccluded(at: screenPoint, depthMap: depthMap, nodeDepth: child.worldPosition.z)");
2359
+ this.emit(
2360
+ "let screenPoint = frame.camera.projectPoint(child.worldPosition, orientation: .portrait, viewportSize: CGSize(width: 1, height: 1))"
2361
+ );
2362
+ this.emit(
2363
+ "child.isHidden = isOccluded(at: screenPoint, depthMap: depthMap, nodeDepth: child.worldPosition.z)"
2364
+ );
2322
2365
  this.indentLevel--;
2323
2366
  this.emit("}");
2324
2367
  this.indentLevel--;
2325
2368
  this.emit("}");
2326
2369
  this.emit("");
2327
- this.emit("private func isOccluded(at point: CGPoint, depthMap: CVPixelBuffer, nodeDepth: Float) -> Bool {");
2370
+ this.emit(
2371
+ "private func isOccluded(at point: CGPoint, depthMap: CVPixelBuffer, nodeDepth: Float) -> Bool {"
2372
+ );
2328
2373
  this.indentLevel++;
2329
2374
  this.emit("CVPixelBufferLockBaseAddress(depthMap, .readOnly)");
2330
2375
  this.emit("defer { CVPixelBufferUnlockBaseAddress(depthMap, .readOnly) }");
@@ -2348,8 +2393,12 @@ var init_IOSCompiler = chunkEGIZHYJP_cjs.__esm({
2348
2393
  this.emit("guard let segmentation = frame.segmentationBuffer else { return }");
2349
2394
  this.emit("guard let estimatedDepth = frame.estimatedDepthData else { return }");
2350
2395
  this.emit("// Use matteGenerator for alpha matte of people");
2351
- this.emit("let matteGenerator = ARMatteGenerator(device: MTLCreateSystemDefaultDevice()!, matteResolution: .half)");
2352
- this.emit("let matte = matteGenerator.generateMatte(from: frame, commandBuffer: MTLCreateSystemDefaultDevice()!.makeCommandQueue()!.makeCommandBuffer()!)");
2396
+ this.emit(
2397
+ "let matteGenerator = ARMatteGenerator(device: MTLCreateSystemDefaultDevice()!, matteResolution: .half)"
2398
+ );
2399
+ this.emit(
2400
+ "let matte = matteGenerator.generateMatte(from: frame, commandBuffer: MTLCreateSystemDefaultDevice()!.makeCommandQueue()!.makeCommandBuffer()!)"
2401
+ );
2353
2402
  this.emit("// Apply people matte to holographic layer rendering");
2354
2403
  this.emit('portalScene.rootNode.setValue(matte, forKey: "peopleOcclusionMatte")');
2355
2404
  this.indentLevel--;
@@ -2361,14 +2410,20 @@ var init_IOSCompiler = chunkEGIZHYJP_cjs.__esm({
2361
2410
  this.emit("func applyParallaxCorrection(frame: ARFrame) {");
2362
2411
  this.indentLevel++;
2363
2412
  this.emit("let cameraTransform = frame.camera.transform");
2364
- this.emit("let cameraPosition = SIMD3<Float>(cameraTransform.columns.3.x, cameraTransform.columns.3.y, cameraTransform.columns.3.z)");
2413
+ this.emit(
2414
+ "let cameraPosition = SIMD3<Float>(cameraTransform.columns.3.x, cameraTransform.columns.3.y, cameraTransform.columns.3.z)"
2415
+ );
2365
2416
  this.emit("// Offset holographic layer based on camera movement for parallax");
2366
2417
  this.emit("for child in holographicLayer.childNodes {");
2367
2418
  this.indentLevel++;
2368
2419
  this.emit("let depth = child.worldPosition.z");
2369
2420
  this.emit("let parallaxFactor: Float = 1.0 - (depth / 10.0)");
2370
- this.emit("child.position.x += (cameraPosition.x - child.position.x) * parallaxFactor * 0.01");
2371
- this.emit("child.position.y += (cameraPosition.y - child.position.y) * parallaxFactor * 0.01");
2421
+ this.emit(
2422
+ "child.position.x += (cameraPosition.x - child.position.x) * parallaxFactor * 0.01"
2423
+ );
2424
+ this.emit(
2425
+ "child.position.y += (cameraPosition.y - child.position.y) * parallaxFactor * 0.01"
2426
+ );
2372
2427
  this.indentLevel--;
2373
2428
  this.emit("}");
2374
2429
  this.indentLevel--;
@@ -2380,15 +2435,21 @@ var init_IOSCompiler = chunkEGIZHYJP_cjs.__esm({
2380
2435
  this.emit("func applyDepthFade(frame: ARFrame) {");
2381
2436
  this.indentLevel++;
2382
2437
  this.emit("let cameraTransform = frame.camera.transform");
2383
- this.emit("let cameraPos = SIMD3<Float>(cameraTransform.columns.3.x, cameraTransform.columns.3.y, cameraTransform.columns.3.z)");
2438
+ this.emit(
2439
+ "let cameraPos = SIMD3<Float>(cameraTransform.columns.3.x, cameraTransform.columns.3.y, cameraTransform.columns.3.z)"
2440
+ );
2384
2441
  this.emit("let nearPlane: Float = 0.1");
2385
2442
  this.emit("let farPlane: Float = 10.0");
2386
2443
  this.emit("");
2387
2444
  this.emit("for child in holographicLayer.childNodes {");
2388
2445
  this.indentLevel++;
2389
- this.emit("let nodePos = SIMD3<Float>(child.worldPosition.x, child.worldPosition.y, child.worldPosition.z)");
2446
+ this.emit(
2447
+ "let nodePos = SIMD3<Float>(child.worldPosition.x, child.worldPosition.y, child.worldPosition.z)"
2448
+ );
2390
2449
  this.emit("let distance = simd_distance(cameraPos, nodePos)");
2391
- this.emit("let alpha = max(0, min(1, 1.0 - (distance - nearPlane) / (farPlane - nearPlane)))");
2450
+ this.emit(
2451
+ "let alpha = max(0, min(1, 1.0 - (distance - nearPlane) / (farPlane - nearPlane)))"
2452
+ );
2392
2453
  this.emit("child.opacity = CGFloat(alpha)");
2393
2454
  this.indentLevel--;
2394
2455
  this.emit("}");
@@ -2397,7 +2458,9 @@ var init_IOSCompiler = chunkEGIZHYJP_cjs.__esm({
2397
2458
  this.emit("");
2398
2459
  }
2399
2460
  if (this.compositionHasTrait(composition, "portal_lighting_match")) {
2400
- this.emit("// Portal lighting match: match hologram lighting to real environment via ARKit environment probe");
2461
+ this.emit(
2462
+ "// Portal lighting match: match hologram lighting to real environment via ARKit environment probe"
2463
+ );
2401
2464
  this.emit("func updateLightingMatch(frame: ARFrame) {");
2402
2465
  this.indentLevel++;
2403
2466
  this.emit("guard let lightEstimate = frame.lightEstimate else { return }");
@@ -2405,7 +2468,9 @@ var init_IOSCompiler = chunkEGIZHYJP_cjs.__esm({
2405
2468
  this.emit("let temperature = lightEstimate.ambientColorTemperature");
2406
2469
  this.emit("");
2407
2470
  this.emit("// Update holographic scene lighting");
2408
- this.emit('if let light = holographicLayer.childNode(withName: "portalAmbientLight", recursively: true)?.light {');
2471
+ this.emit(
2472
+ 'if let light = holographicLayer.childNode(withName: "portalAmbientLight", recursively: true)?.light {'
2473
+ );
2409
2474
  this.indentLevel++;
2410
2475
  this.emit("light.intensity = intensity");
2411
2476
  this.emit("light.temperature = temperature");
@@ -2427,7 +2492,9 @@ var init_IOSCompiler = chunkEGIZHYJP_cjs.__esm({
2427
2492
  }
2428
2493
  if (this.compositionHasTrait(composition, "portal_boundary")) {
2429
2494
  this.emit("// Portal boundary: define portal edges with configurable shape");
2430
- this.emit('func createPortalBoundary(shape: String = "circle", radius: Float = 1.5) -> SCNNode {');
2495
+ this.emit(
2496
+ 'func createPortalBoundary(shape: String = "circle", radius: Float = 1.5) -> SCNNode {'
2497
+ );
2431
2498
  this.indentLevel++;
2432
2499
  this.emit("let boundaryNode = SCNNode()");
2433
2500
  this.emit('boundaryNode.name = "portalBoundary"');
@@ -2441,7 +2508,9 @@ var init_IOSCompiler = chunkEGIZHYJP_cjs.__esm({
2441
2508
  this.indentLevel--;
2442
2509
  this.emit('case "rect":');
2443
2510
  this.indentLevel++;
2444
- this.emit("let box = SCNBox(width: CGFloat(radius * 2), height: CGFloat(radius * 2), length: 0.02, chamferRadius: 0.01)");
2511
+ this.emit(
2512
+ "let box = SCNBox(width: CGFloat(radius * 2), height: CGFloat(radius * 2), length: 0.02, chamferRadius: 0.01)"
2513
+ );
2445
2514
  this.emit("box.firstMaterial?.diffuse.contents = UIColor.cyan.withAlphaComponent(0.8)");
2446
2515
  this.emit("boundaryNode.geometry = box");
2447
2516
  this.indentLevel--;
@@ -2465,8 +2534,12 @@ var init_IOSCompiler = chunkEGIZHYJP_cjs.__esm({
2465
2534
  this.emit(" float glowIntensity;");
2466
2535
  this.emit(" float time;");
2467
2536
  this.emit(" #pragma body");
2468
- this.emit(" float edgeFactor = 1.0 - abs(dot(normalize(_surface.normal), normalize(_surface.view)));");
2469
- this.emit(" float glow = pow(edgeFactor, 3.0) * glowIntensity * (0.8 + 0.2 * sin(time * 2.0));");
2537
+ this.emit(
2538
+ " float edgeFactor = 1.0 - abs(dot(normalize(_surface.normal), normalize(_surface.view)));"
2539
+ );
2540
+ this.emit(
2541
+ " float glow = pow(edgeFactor, 3.0) * glowIntensity * (0.8 + 0.2 * sin(time * 2.0));"
2542
+ );
2470
2543
  this.emit(" _output.color.rgb += vec3(0.0, glow * 0.8, glow);");
2471
2544
  this.emit('"""');
2472
2545
  this.emit("");
@@ -2475,7 +2548,9 @@ var init_IOSCompiler = chunkEGIZHYJP_cjs.__esm({
2475
2548
  this.emit(".fragment: glowShader");
2476
2549
  this.indentLevel--;
2477
2550
  this.emit("]");
2478
- this.emit('boundaryNode.geometry?.firstMaterial?.setValue(Float(1.5), forKey: "glowIntensity")');
2551
+ this.emit(
2552
+ 'boundaryNode.geometry?.firstMaterial?.setValue(Float(1.5), forKey: "glowIntensity")'
2553
+ );
2479
2554
  this.indentLevel--;
2480
2555
  this.emit("}");
2481
2556
  this.emit("");
@@ -2486,7 +2561,9 @@ var init_IOSCompiler = chunkEGIZHYJP_cjs.__esm({
2486
2561
  this.indentLevel++;
2487
2562
  this.emit("let cameraTransform = frame.camera.transform");
2488
2563
  this.emit("// Calculate tilt angle from camera orientation");
2489
- this.emit("let forward = SIMD3<Float>(cameraTransform.columns.2.x, cameraTransform.columns.2.y, cameraTransform.columns.2.z)");
2564
+ this.emit(
2565
+ "let forward = SIMD3<Float>(cameraTransform.columns.2.x, cameraTransform.columns.2.y, cameraTransform.columns.2.z)"
2566
+ );
2490
2567
  this.emit("let tiltAngle = abs(asin(forward.y)) * 180.0 / .pi");
2491
2568
  this.emit("let tiltThreshold: Float = 30.0");
2492
2569
  this.emit("portalEnabled = tiltAngle > tiltThreshold");
@@ -2525,7 +2602,7 @@ var init_IOSCompiler = chunkEGIZHYJP_cjs.__esm({
2525
2602
  }
2526
2603
  // === Camera Hand Tracking Methods (M.010.04) ===
2527
2604
  hasHandTrackingTraits(composition) {
2528
- const handTraitNames = chunkARNKA274_cjs.CAMERA_HAND_TRACKING_TRAITS;
2605
+ const handTraitNames = chunkCAUCGUEA_cjs.CAMERA_HAND_TRACKING_TRAITS;
2529
2606
  for (const obj of composition.objects || []) {
2530
2607
  for (const trait of obj.traits || []) {
2531
2608
  const name = typeof trait === "string" ? trait : trait.name;
@@ -2548,7 +2625,9 @@ var init_IOSCompiler = chunkEGIZHYJP_cjs.__esm({
2548
2625
  const hasSkeleton = this.compositionHasTrait(composition, "camera_hand_skeleton");
2549
2626
  const hasToSpatial = this.compositionHasTrait(composition, "camera_hand_to_spatial");
2550
2627
  this.emit("// Auto-generated by HoloScript IOSCompiler \u2014 Hand Tracking integration");
2551
- this.emit(`// Source: composition "${this.escapeStringValue(composition.name, "Swift")}"`);
2628
+ this.emit(
2629
+ `// Source: composition "${this.escapeStringValue(composition.name, "Swift")}"`
2630
+ );
2552
2631
  this.emit("// Requires iOS 14.0+, Vision framework");
2553
2632
  this.emit("// Do not edit manually \u2014 regenerate from .holo source");
2554
2633
  this.emit("");
@@ -2573,7 +2652,9 @@ var init_IOSCompiler = chunkEGIZHYJP_cjs.__esm({
2573
2652
  this.emit("@Published var currentGesture: HandGesture = .none");
2574
2653
  this.emit("@Published var handCount: Int = 0");
2575
2654
  if (hasSkeleton) {
2576
- this.emit("@Published var jointPositions: [[VNHumanHandPoseObservation.JointName: VNRecognizedPoint]] = []");
2655
+ this.emit(
2656
+ "@Published var jointPositions: [[VNHumanHandPoseObservation.JointName: VNRecognizedPoint]] = []"
2657
+ );
2577
2658
  }
2578
2659
  this.emit("");
2579
2660
  this.emit("private var captureSession: AVCaptureSession?");
@@ -2597,7 +2678,9 @@ var init_IOSCompiler = chunkEGIZHYJP_cjs.__esm({
2597
2678
  this.emit("let session = AVCaptureSession()");
2598
2679
  this.emit("session.sessionPreset = .high");
2599
2680
  this.emit("");
2600
- this.emit("guard let device = AVCaptureDevice.default(.builtInWideAngleCamera, for: .video, position: .front),");
2681
+ this.emit(
2682
+ "guard let device = AVCaptureDevice.default(.builtInWideAngleCamera, for: .video, position: .front),"
2683
+ );
2601
2684
  this.emit(" let input = try? AVCaptureDeviceInput(device: device) else {");
2602
2685
  this.indentLevel++;
2603
2686
  this.emit('print("[HoloScript] Failed to access front camera")');
@@ -2644,7 +2727,9 @@ var init_IOSCompiler = chunkEGIZHYJP_cjs.__esm({
2644
2727
  this.emit("");
2645
2728
  if (hasConfidence) {
2646
2729
  this.emit("// Filter low-confidence joints");
2647
- this.emit("guard thumbTip.confidence > minConfidence && indexTip.confidence > minConfidence else { return }");
2730
+ this.emit(
2731
+ "guard thumbTip.confidence > minConfidence && indexTip.confidence > minConfidence else { return }"
2732
+ );
2648
2733
  this.emit("");
2649
2734
  }
2650
2735
  if (hasSkeleton) {
@@ -2672,7 +2757,9 @@ var init_IOSCompiler = chunkEGIZHYJP_cjs.__esm({
2672
2757
  }
2673
2758
  if (hasPinch) {
2674
2759
  this.emit("// Pinch gesture: thumb tip close to index tip");
2675
- this.emit("let pinchDist = hypot(thumbTip.location.x - indexTip.location.x, thumbTip.location.y - indexTip.location.y)");
2760
+ this.emit(
2761
+ "let pinchDist = hypot(thumbTip.location.x - indexTip.location.x, thumbTip.location.y - indexTip.location.y)"
2762
+ );
2676
2763
  this.emit("if pinchDist < 0.05 {");
2677
2764
  this.indentLevel++;
2678
2765
  this.emit("DispatchQueue.main.async { self.currentGesture = .pinch }");
@@ -2758,13 +2845,19 @@ var init_IOSCompiler = chunkEGIZHYJP_cjs.__esm({
2758
2845
  this.indentLevel--;
2759
2846
  this.emit("}");
2760
2847
  this.emit("");
2761
- this.emit(`extension ${cls}HandTrackingManager: AVCaptureVideoDataOutputSampleBufferDelegate {`);
2848
+ this.emit(
2849
+ `extension ${cls}HandTrackingManager: AVCaptureVideoDataOutputSampleBufferDelegate {`
2850
+ );
2762
2851
  this.indentLevel++;
2763
- this.emit("func captureOutput(_ output: AVCaptureOutput, didOutput sampleBuffer: CMSampleBuffer, from connection: AVCaptureConnection) {");
2852
+ this.emit(
2853
+ "func captureOutput(_ output: AVCaptureOutput, didOutput sampleBuffer: CMSampleBuffer, from connection: AVCaptureConnection) {"
2854
+ );
2764
2855
  this.indentLevel++;
2765
2856
  this.emit("guard let pixelBuffer = CMSampleBufferGetImageBuffer(sampleBuffer) else { return }");
2766
2857
  this.emit("");
2767
- this.emit("let handler = VNImageRequestHandler(cvPixelBuffer: pixelBuffer, orientation: .up, options: [:])");
2858
+ this.emit(
2859
+ "let handler = VNImageRequestHandler(cvPixelBuffer: pixelBuffer, orientation: .up, options: [:])"
2860
+ );
2768
2861
  this.emit("do {");
2769
2862
  this.indentLevel++;
2770
2863
  this.emit("try handler.perform([handPoseRequest])");
@@ -2803,7 +2896,7 @@ var init_IOSCompiler = chunkEGIZHYJP_cjs.__esm({
2803
2896
  }
2804
2897
  // ─── Object Capture (iOS 17+, M.010.10) ────────────────────────────
2805
2898
  hasObjectCaptureTraits(composition) {
2806
- const captureNames = chunkV2ILLPHK_cjs.IOS_OBJECT_CAPTURE_TRAITS;
2899
+ const captureNames = chunkMD6KDHVE_cjs.IOS_OBJECT_CAPTURE_TRAITS;
2807
2900
  for (const obj of composition.objects || []) {
2808
2901
  for (const trait of obj.traits || []) {
2809
2902
  const name = typeof trait === "string" ? trait : trait.name;
@@ -2813,7 +2906,7 @@ var init_IOSCompiler = chunkEGIZHYJP_cjs.__esm({
2813
2906
  return false;
2814
2907
  }
2815
2908
  collectObjectCaptureTraits(composition) {
2816
- const captureNames = chunkV2ILLPHK_cjs.IOS_OBJECT_CAPTURE_TRAITS;
2909
+ const captureNames = chunkMD6KDHVE_cjs.IOS_OBJECT_CAPTURE_TRAITS;
2817
2910
  const found = /* @__PURE__ */ new Set();
2818
2911
  for (const obj of composition.objects || []) {
2819
2912
  for (const t of obj.traits || []) {
@@ -2896,7 +2989,9 @@ var init_IOSCompiler = chunkEGIZHYJP_cjs.__esm({
2896
2989
  this.emit(`class ${cls}ObjectCaptureManager: ObservableObject {`);
2897
2990
  this.indentLevel++;
2898
2991
  this.emit("");
2899
- this.emit('private let logger = Logger(subsystem: "net.holoscript", category: "ObjectCapture")');
2992
+ this.emit(
2993
+ 'private let logger = Logger(subsystem: "net.holoscript", category: "ObjectCapture")'
2994
+ );
2900
2995
  this.emit("");
2901
2996
  this.emit("enum CaptureState: Equatable {");
2902
2997
  this.indentLevel++;
@@ -2930,9 +3025,15 @@ var init_IOSCompiler = chunkEGIZHYJP_cjs.__esm({
2930
3025
  this.emit("");
2931
3026
  this.emit("init() {");
2932
3027
  this.indentLevel++;
2933
- this.emit("let docs = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first!");
2934
- this.emit('self.outputDirectory = docs.appendingPathComponent("HoloCaptures", isDirectory: true)');
2935
- this.emit("try? FileManager.default.createDirectory(at: outputDirectory, withIntermediateDirectories: true)");
3028
+ this.emit(
3029
+ "let docs = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first!"
3030
+ );
3031
+ this.emit(
3032
+ 'self.outputDirectory = docs.appendingPathComponent("HoloCaptures", isDirectory: true)'
3033
+ );
3034
+ this.emit(
3035
+ "try? FileManager.default.createDirectory(at: outputDirectory, withIntermediateDirectories: true)"
3036
+ );
2936
3037
  this.indentLevel--;
2937
3038
  this.emit("}");
2938
3039
  this.emit("");
@@ -2955,7 +3056,9 @@ var init_IOSCompiler = chunkEGIZHYJP_cjs.__esm({
2955
3056
  this.emit("self.captureSession = session");
2956
3057
  this.emit("");
2957
3058
  this.emit("var configuration = ObjectCaptureSession.Configuration()");
2958
- this.emit('configuration.checkpointDirectory = outputDirectory.appendingPathComponent("Checkpoints")');
3059
+ this.emit(
3060
+ 'configuration.checkpointDirectory = outputDirectory.appendingPathComponent("Checkpoints")'
3061
+ );
2959
3062
  this.emit("configuration.isOverCaptureEnabled = true");
2960
3063
  this.emit('session.start(imagesDirectory: outputDirectory.appendingPathComponent("Images"),');
2961
3064
  this.emit(" configuration: configuration)");
@@ -3070,7 +3173,9 @@ var init_IOSCompiler = chunkEGIZHYJP_cjs.__esm({
3070
3173
  this.emit("private func makePhotogrammetryRequest() -> PhotogrammetrySession.Request {");
3071
3174
  this.indentLevel++;
3072
3175
  this.emit('let outputURL = outputDirectory.appendingPathComponent("model.usdz")');
3073
- this.emit("// .full detail level captures PBR maps (diffuse, normal, roughness, metallic, AO)");
3176
+ this.emit(
3177
+ "// .full detail level captures PBR maps (diffuse, normal, roughness, metallic, AO)"
3178
+ );
3074
3179
  this.emit("return .modelFile(url: outputURL, detail: .full)");
3075
3180
  this.indentLevel--;
3076
3181
  this.emit("}");
@@ -3083,7 +3188,9 @@ var init_IOSCompiler = chunkEGIZHYJP_cjs.__esm({
3083
3188
  this.emit("");
3084
3189
  this.emit("for level in HoloCapturedEntity.DetailLevel.allCases {");
3085
3190
  this.indentLevel++;
3086
- this.emit('let url = outputDirectory.appendingPathComponent("model_\\(level.rawValue).usdz")');
3191
+ this.emit(
3192
+ 'let url = outputDirectory.appendingPathComponent("model_\\(level.rawValue).usdz")'
3193
+ );
3087
3194
  this.emit("let detail: PhotogrammetrySession.Request.Detail");
3088
3195
  this.emit("switch level {");
3089
3196
  this.emit("case .preview: detail = .preview");
@@ -3107,7 +3214,9 @@ var init_IOSCompiler = chunkEGIZHYJP_cjs.__esm({
3107
3214
  this.emit("");
3108
3215
  }
3109
3216
  if (traits.has("pbr_texture_extract") || traits.has("object_capture")) {
3110
- this.emit("private func extractPBRMaterials(from modelURL: URL) -> HoloCapturedEntity.PBRMaterialSet? {");
3217
+ this.emit(
3218
+ "private func extractPBRMaterials(from modelURL: URL) -> HoloCapturedEntity.PBRMaterialSet? {"
3219
+ );
3111
3220
  this.indentLevel++;
3112
3221
  this.emit("let baseDir = modelURL.deletingLastPathComponent()");
3113
3222
  this.emit('let diffuse = baseDir.appendingPathComponent("diffuse.png")');
@@ -3117,10 +3226,18 @@ var init_IOSCompiler = chunkEGIZHYJP_cjs.__esm({
3117
3226
  this.emit('let ao = baseDir.appendingPathComponent("ao.png")');
3118
3227
  this.emit("");
3119
3228
  this.emit("return HoloCapturedEntity.PBRMaterialSet(");
3120
- this.emit(" diffuseMap: FileManager.default.fileExists(atPath: diffuse.path) ? diffuse : nil,");
3121
- this.emit(" normalMap: FileManager.default.fileExists(atPath: normal.path) ? normal : nil,");
3122
- this.emit(" roughnessMap: FileManager.default.fileExists(atPath: roughness.path) ? roughness : nil,");
3123
- this.emit(" metallicMap: FileManager.default.fileExists(atPath: metallic.path) ? metallic : nil,");
3229
+ this.emit(
3230
+ " diffuseMap: FileManager.default.fileExists(atPath: diffuse.path) ? diffuse : nil,"
3231
+ );
3232
+ this.emit(
3233
+ " normalMap: FileManager.default.fileExists(atPath: normal.path) ? normal : nil,"
3234
+ );
3235
+ this.emit(
3236
+ " roughnessMap: FileManager.default.fileExists(atPath: roughness.path) ? roughness : nil,"
3237
+ );
3238
+ this.emit(
3239
+ " metallicMap: FileManager.default.fileExists(atPath: metallic.path) ? metallic : nil,"
3240
+ );
3124
3241
  this.emit(" aoMap: FileManager.default.fileExists(atPath: ao.path) ? ao : nil");
3125
3242
  this.emit(")");
3126
3243
  this.indentLevel--;
@@ -3185,16 +3302,24 @@ var init_IOSCompiler = chunkEGIZHYJP_cjs.__esm({
3185
3302
  this.emit('var holo = "scene CapturedObject {\\n"');
3186
3303
  this.emit('holo += " object \\(entity.name) {\\n"');
3187
3304
  this.emit('holo += " model: \\"\\(entity.modelURL.lastPathComponent)\\"\\n"');
3188
- this.emit('holo += " position: [\\(entity.boundingBox.center.x), \\(entity.boundingBox.center.y), \\(entity.boundingBox.center.z)]\\n"');
3189
- this.emit('holo += " scale: [\\(entity.boundingBox.extents.x), \\(entity.boundingBox.extents.y), \\(entity.boundingBox.extents.z)]\\n"');
3305
+ this.emit(
3306
+ 'holo += " position: [\\(entity.boundingBox.center.x), \\(entity.boundingBox.center.y), \\(entity.boundingBox.center.z)]\\n"'
3307
+ );
3308
+ this.emit(
3309
+ 'holo += " scale: [\\(entity.boundingBox.extents.x), \\(entity.boundingBox.extents.y), \\(entity.boundingBox.extents.z)]\\n"'
3310
+ );
3190
3311
  this.emit('holo += " traits: [object_capture, photogrammetry_scan]\\n"');
3191
3312
  if (traits.has("pbr_texture_extract")) {
3192
3313
  this.emit("if let pbr = entity.pbrMaterials {");
3193
3314
  this.indentLevel++;
3194
3315
  this.emit('if pbr.diffuseMap != nil { holo += " diffuse_map: \\"diffuse.png\\"\\n" }');
3195
3316
  this.emit('if pbr.normalMap != nil { holo += " normal_map: \\"normal.png\\"\\n" }');
3196
- this.emit('if pbr.roughnessMap != nil { holo += " roughness_map: \\"roughness.png\\"\\n" }');
3197
- this.emit('if pbr.metallicMap != nil { holo += " metallic_map: \\"metallic.png\\"\\n" }');
3317
+ this.emit(
3318
+ 'if pbr.roughnessMap != nil { holo += " roughness_map: \\"roughness.png\\"\\n" }'
3319
+ );
3320
+ this.emit(
3321
+ 'if pbr.metallicMap != nil { holo += " metallic_map: \\"metallic.png\\"\\n" }'
3322
+ );
3198
3323
  this.emit('if pbr.aoMap != nil { holo += " ao_map: \\"ao.png\\"\\n" }');
3199
3324
  this.indentLevel--;
3200
3325
  this.emit("}");
@@ -3323,7 +3448,7 @@ var init_IOSCompiler = chunkEGIZHYJP_cjs.__esm({
3323
3448
  }
3324
3449
  // ─── SharePlay Multi-User AR (M.010.12) ──────────────────────────────
3325
3450
  hasSharePlayTraits(composition) {
3326
- const sharePlayNames = chunkV2ILLPHK_cjs.SHAREPLAY_TRAITS;
3451
+ const sharePlayNames = chunkMD6KDHVE_cjs.SHAREPLAY_TRAITS;
3327
3452
  for (const obj of composition.objects || []) {
3328
3453
  for (const trait of obj.traits || []) {
3329
3454
  const name = typeof trait === "string" ? trait : trait.name;
@@ -3437,7 +3562,9 @@ var init_IOSCompiler = chunkEGIZHYJP_cjs.__esm({
3437
3562
  this.emit("");
3438
3563
  }
3439
3564
  if (this.compositionHasTrait(composition, "shareplay_anchor_local")) {
3440
- this.emit("// Local AR anchor mapping \u2014 each participant maps shared positions to local space");
3565
+ this.emit(
3566
+ "// Local AR anchor mapping \u2014 each participant maps shared positions to local space"
3567
+ );
3441
3568
  this.emit("private var localWorldTransform: simd_float4x4 = matrix_identity_float4x4");
3442
3569
  this.emit("private var sharedToLocalOffset: simd_float3 = .zero");
3443
3570
  this.emit("");
@@ -3528,9 +3655,7 @@ var init_IOSCompiler = chunkEGIZHYJP_cjs.__esm({
3528
3655
  this.emit("func becomeHost() {");
3529
3656
  this.indentLevel++;
3530
3657
  this.emit("isHost = true");
3531
- this.emit(
3532
- "broadcastSceneState() // Host pushes authoritative state to all participants"
3533
- );
3658
+ this.emit("broadcastSceneState() // Host pushes authoritative state to all participants");
3534
3659
  this.indentLevel--;
3535
3660
  this.emit("}");
3536
3661
  this.emit("");
@@ -3776,9 +3901,7 @@ var init_IOSCompiler = chunkEGIZHYJP_cjs.__esm({
3776
3901
  if (this.compositionHasTrait(composition, "shareplay_anchor_local")) {
3777
3902
  this.emit("// MARK: - Local Anchor Mapping");
3778
3903
  this.emit("");
3779
- this.emit(
3780
- "func calibrateLocalAnchor(arFrame: ARFrame, sharedReferencePoint: simd_float3) {"
3781
- );
3904
+ this.emit("func calibrateLocalAnchor(arFrame: ARFrame, sharedReferencePoint: simd_float3) {");
3782
3905
  this.indentLevel++;
3783
3906
  this.emit("// Each participant creates a local ARKit anchor and maps shared positions");
3784
3907
  this.emit("let cameraPos = arFrame.camera.transform.columns.3");
@@ -3807,9 +3930,7 @@ var init_IOSCompiler = chunkEGIZHYJP_cjs.__esm({
3807
3930
  this.emit("");
3808
3931
  this.emit("func configureSpatialAudio() {");
3809
3932
  this.indentLevel++;
3810
- this.emit(
3811
- "// SpatialAudioExperience.custom(fixedToScene: true) for participant voices"
3812
- );
3933
+ this.emit("// SpatialAudioExperience.custom(fixedToScene: true) for participant voices");
3813
3934
  this.emit("guard let session = groupSession else { return }");
3814
3935
  this.emit("session.spatialAudioExperience = .custom(fixedToScene: true)");
3815
3936
  this.indentLevel--;
@@ -3819,9 +3940,7 @@ var init_IOSCompiler = chunkEGIZHYJP_cjs.__esm({
3819
3940
  if (this.compositionHasTrait(composition, "shareplay_mute_zone")) {
3820
3941
  this.emit("// MARK: - Mute Zones");
3821
3942
  this.emit("");
3822
- this.emit(
3823
- "func addMuteZone(center: simd_float3, radius: Float, attenuation: Float = 0.0) {"
3824
- );
3943
+ this.emit("func addMuteZone(center: simd_float3, radius: Float, attenuation: Float = 0.0) {");
3825
3944
  this.indentLevel++;
3826
3945
  this.emit(
3827
3946
  "muteZones.append(MuteZone(center: center, radius: radius, attenuation: attenuation))"
@@ -3838,9 +3957,7 @@ var init_IOSCompiler = chunkEGIZHYJP_cjs.__esm({
3838
3957
  this.emit("if distance < zone.radius {");
3839
3958
  this.indentLevel++;
3840
3959
  this.emit("let factor = distance / zone.radius");
3841
- this.emit(
3842
- "let zoneAttenuation = zone.attenuation + (1.0 - zone.attenuation) * factor"
3843
- );
3960
+ this.emit("let zoneAttenuation = zone.attenuation + (1.0 - zone.attenuation) * factor");
3844
3961
  this.emit("minAttenuation = min(minAttenuation, zoneAttenuation)");
3845
3962
  this.indentLevel--;
3846
3963
  this.emit("}");
@@ -3880,12 +3997,8 @@ var init_IOSCompiler = chunkEGIZHYJP_cjs.__esm({
3880
3997
  this.emit("// Session status");
3881
3998
  this.emit("HStack {");
3882
3999
  this.indentLevel++;
3883
- this.emit(
3884
- 'Image(systemName: manager.isSessionActive ? "person.2.fill" : "person.2")'
3885
- );
3886
- this.emit(
3887
- 'Text(manager.isSessionActive ? "SharePlay Active" : "SharePlay Inactive")'
3888
- );
4000
+ this.emit('Image(systemName: manager.isSessionActive ? "person.2.fill" : "person.2")');
4001
+ this.emit('Text(manager.isSessionActive ? "SharePlay Active" : "SharePlay Inactive")');
3889
4002
  this.indentLevel--;
3890
4003
  this.emit("}");
3891
4004
  this.emit(".padding()");
@@ -3928,7 +4041,7 @@ var init_IOSCompiler = chunkEGIZHYJP_cjs.__esm({
3928
4041
  }
3929
4042
  // ─── TrueDepth Face Tracking (M.010.14) ─────────────────────────────
3930
4043
  hasFaceTrackingTraits(composition) {
3931
- const faceTraitNames = chunkV2ILLPHK_cjs.FACE_TRACKING_TRAITS;
4044
+ const faceTraitNames = chunkMD6KDHVE_cjs.FACE_TRACKING_TRAITS;
3932
4045
  for (const obj of composition.objects || []) {
3933
4046
  for (const trait of obj.traits || []) {
3934
4047
  const name = typeof trait === "string" ? trait : trait.name;
@@ -3952,7 +4065,9 @@ var init_IOSCompiler = chunkEGIZHYJP_cjs.__esm({
3952
4065
  const hasGaze = this.compositionHasTrait(composition, "face_gaze_direction");
3953
4066
  const hasTongue = this.compositionHasTrait(composition, "face_tongue_detect");
3954
4067
  this.emit("// Auto-generated by HoloScript IOSCompiler \u2014 TrueDepth Face Tracking");
3955
- this.emit(`// Source: composition "${this.escapeStringValue(composition.name, "Swift")}"`);
4068
+ this.emit(
4069
+ `// Source: composition "${this.escapeStringValue(composition.name, "Swift")}"`
4070
+ );
3956
4071
  this.emit("// Requires iOS 11.0+, ARKit, TrueDepth camera");
3957
4072
  this.emit("// Do not edit manually \u2014 regenerate from .holo source");
3958
4073
  this.emit("");
@@ -3998,7 +4113,9 @@ var init_IOSCompiler = chunkEGIZHYJP_cjs.__esm({
3998
4113
  }
3999
4114
  if (hasRetarget) {
4000
4115
  this.emit("@Published var retargetedBlendShapes: [String: Float] = [:]");
4001
- this.emit("var retargetMap: [ARFaceAnchor.BlendShapeLocation: (target: String, scale: Float)] = [:]");
4116
+ this.emit(
4117
+ "var retargetMap: [ARFaceAnchor.BlendShapeLocation: (target: String, scale: Float)] = [:]"
4118
+ );
4002
4119
  }
4003
4120
  this.emit("");
4004
4121
  this.emit("private var arSession: ARSession?");
@@ -4054,7 +4171,9 @@ var init_IOSCompiler = chunkEGIZHYJP_cjs.__esm({
4054
4171
  this.emit("");
4055
4172
  this.emit("func session(_ session: ARSession, didUpdate anchors: [ARAnchor]) {");
4056
4173
  this.indentLevel++;
4057
- this.emit("guard let faceAnchor = anchors.compactMap({ $0 as? ARFaceAnchor }).first else { return }");
4174
+ this.emit(
4175
+ "guard let faceAnchor = anchors.compactMap({ $0 as? ARFaceAnchor }).first else { return }"
4176
+ );
4058
4177
  this.emit("");
4059
4178
  if (hasBlendshapes || hasAvatarDrive || hasMirror || hasPuppet) {
4060
4179
  this.emit("let shapes = faceAnchor.blendShapes");
@@ -4151,7 +4270,9 @@ var init_IOSCompiler = chunkEGIZHYJP_cjs.__esm({
4151
4270
  this.emit("// MARK: - Puppet Mode");
4152
4271
  this.emit("");
4153
4272
  this.emit("/// Puppet mode: avatar responds exclusively to face input.");
4154
- this.emit("/// Returns a complete morph target dictionary derived solely from face tracking.");
4273
+ this.emit(
4274
+ "/// Returns a complete morph target dictionary derived solely from face tracking."
4275
+ );
4155
4276
  this.emit("func getPuppetMorphTargets() -> [String: Float] {");
4156
4277
  this.indentLevel++;
4157
4278
  this.emit("var targets: [String: Float] = [:]");
@@ -4168,8 +4289,12 @@ var init_IOSCompiler = chunkEGIZHYJP_cjs.__esm({
4168
4289
  if (hasRetarget) {
4169
4290
  this.emit("// MARK: - Retargeting");
4170
4291
  this.emit("");
4171
- this.emit("/// Applies retarget map to remap/scale blendshapes for non-human avatar topologies.");
4172
- this.emit("private func applyRetargeting(from shapes: [ARFaceAnchor.BlendShapeLocation: NSNumber]) {");
4292
+ this.emit(
4293
+ "/// Applies retarget map to remap/scale blendshapes for non-human avatar topologies."
4294
+ );
4295
+ this.emit(
4296
+ "private func applyRetargeting(from shapes: [ARFaceAnchor.BlendShapeLocation: NSNumber]) {"
4297
+ );
4173
4298
  this.indentLevel++;
4174
4299
  this.emit("var result: [String: Float] = [:]");
4175
4300
  this.emit("for (arkitShape, value) in shapes {");
@@ -4198,7 +4323,9 @@ var init_IOSCompiler = chunkEGIZHYJP_cjs.__esm({
4198
4323
  this.emit("// MARK: - Emotion Detection");
4199
4324
  this.emit("");
4200
4325
  this.emit("/// Derives emotion from blendshape combinations.");
4201
- this.emit("private func detectEmotion(from shapes: [ARFaceAnchor.BlendShapeLocation: NSNumber]) {");
4326
+ this.emit(
4327
+ "private func detectEmotion(from shapes: [ARFaceAnchor.BlendShapeLocation: NSNumber]) {"
4328
+ );
4202
4329
  this.indentLevel++;
4203
4330
  this.emit("let mouthSmileL = shapes[.mouthSmileLeft]?.floatValue ?? 0.0");
4204
4331
  this.emit("let mouthSmileR = shapes[.mouthSmileRight]?.floatValue ?? 0.0");
@@ -4230,7 +4357,9 @@ var init_IOSCompiler = chunkEGIZHYJP_cjs.__esm({
4230
4357
  this.emit("emotion = .surprised");
4231
4358
  this.indentLevel--;
4232
4359
  this.emit("// Angry: browDown + mouthPress");
4233
- this.emit("} else if ((browDownL + browDownR) / 2.0 > 0.4) && ((mouthPressL + mouthPressR) / 2.0 > 0.3) {");
4360
+ this.emit(
4361
+ "} else if ((browDownL + browDownR) / 2.0 > 0.4) && ((mouthPressL + mouthPressR) / 2.0 > 0.3) {"
4362
+ );
4234
4363
  this.indentLevel++;
4235
4364
  this.emit("emotion = .angry");
4236
4365
  this.indentLevel--;
@@ -4269,7 +4398,9 @@ var init_IOSCompiler = chunkEGIZHYJP_cjs.__esm({
4269
4398
  this.emit('Text("Blendshapes (\\(manager.blendShapes.count))").font(.subheadline)');
4270
4399
  this.emit("ScrollView {");
4271
4400
  this.indentLevel++;
4272
- this.emit("ForEach(Array(manager.blendShapes.keys).sorted(by: { $0.rawValue < $1.rawValue }), id: \\.rawValue) { key in");
4401
+ this.emit(
4402
+ "ForEach(Array(manager.blendShapes.keys).sorted(by: { $0.rawValue < $1.rawValue }), id: \\.rawValue) { key in"
4403
+ );
4273
4404
  this.indentLevel++;
4274
4405
  this.emit("HStack {");
4275
4406
  this.indentLevel++;
@@ -4286,7 +4417,9 @@ var init_IOSCompiler = chunkEGIZHYJP_cjs.__esm({
4286
4417
  this.emit('Text("Emotion: \\(manager.currentEmotion.rawValue)").font(.subheadline)');
4287
4418
  }
4288
4419
  if (hasGaze) {
4289
- this.emit('Text("Gaze: \\(manager.gazeDirection.x, specifier: "%.2f"), \\(manager.gazeDirection.y, specifier: "%.2f"), \\(manager.gazeDirection.z, specifier: "%.2f")").font(.caption)');
4420
+ this.emit(
4421
+ 'Text("Gaze: \\(manager.gazeDirection.x, specifier: "%.2f"), \\(manager.gazeDirection.y, specifier: "%.2f"), \\(manager.gazeDirection.z, specifier: "%.2f")").font(.caption)'
4422
+ );
4290
4423
  }
4291
4424
  if (hasTongue) {
4292
4425
  this.emit('Text("Tongue Out: \\(manager.isTongueOut ? "Yes" : "No")").font(.caption)');
@@ -4313,7 +4446,7 @@ var init_IOSCompiler = chunkEGIZHYJP_cjs.__esm({
4313
4446
  }
4314
4447
  // ─── UWB Positioning (iOS 16+, Nearby Interaction — M.010.13) ────────
4315
4448
  hasUWBPositioningTraits(composition) {
4316
- const uwbNames = chunkV2ILLPHK_cjs.UWB_POSITIONING_TRAITS;
4449
+ const uwbNames = chunkMD6KDHVE_cjs.UWB_POSITIONING_TRAITS;
4317
4450
  for (const obj of composition.objects || []) {
4318
4451
  for (const trait of obj.traits || []) {
4319
4452
  const name = typeof trait === "string" ? trait : trait.name;
@@ -4418,11 +4551,15 @@ var init_IOSCompiler = chunkEGIZHYJP_cjs.__esm({
4418
4551
  this.indentLevel++;
4419
4552
  this.emit("guard !isScanning else { return }");
4420
4553
  this.emit("");
4421
- this.emit("let session = MCSession(peer: localPeerId, securityIdentity: nil, encryptionPreference: .required)");
4554
+ this.emit(
4555
+ "let session = MCSession(peer: localPeerId, securityIdentity: nil, encryptionPreference: .required)"
4556
+ );
4422
4557
  this.emit("session.delegate = self");
4423
4558
  this.emit("mcSession = session");
4424
4559
  this.emit("");
4425
- this.emit("mcAdvertiser = MCNearbyServiceAdvertiser(peer: localPeerId, discoveryInfo: nil, serviceType: serviceType)");
4560
+ this.emit(
4561
+ "mcAdvertiser = MCNearbyServiceAdvertiser(peer: localPeerId, discoveryInfo: nil, serviceType: serviceType)"
4562
+ );
4426
4563
  this.emit("mcAdvertiser?.delegate = self");
4427
4564
  this.emit("mcAdvertiser?.startAdvertisingPeer()");
4428
4565
  this.emit("");
@@ -4508,9 +4645,13 @@ var init_IOSCompiler = chunkEGIZHYJP_cjs.__esm({
4508
4645
  this.indentLevel--;
4509
4646
  this.emit("]");
4510
4647
  this.emit("");
4511
- this.emit("guard let data = try? JSONSerialization.data(withJSONObject: payload) else { return }");
4648
+ this.emit(
4649
+ "guard let data = try? JSONSerialization.data(withJSONObject: payload) else { return }"
4650
+ );
4512
4651
  this.emit("");
4513
- this.emit("if let mcPeer = session.connectedPeers.first(where: { $0.displayName == peerId }) {");
4652
+ this.emit(
4653
+ "if let mcPeer = session.connectedPeers.first(where: { $0.displayName == peerId }) {"
4654
+ );
4514
4655
  this.indentLevel++;
4515
4656
  this.emit("try? session.send(data, toPeers: [mcPeer], with: .reliable)");
4516
4657
  this.emit('print("[UWB] Handoff entity \\(entityId) to \\(peerId)")');
@@ -4571,7 +4712,9 @@ var init_IOSCompiler = chunkEGIZHYJP_cjs.__esm({
4571
4712
  this.emit("private func shareDiscoveryToken(with mcPeer: MCPeerID) {");
4572
4713
  this.indentLevel++;
4573
4714
  this.emit("guard let token = niSession?.discoveryToken,");
4574
- this.emit(" let data = try? NSKeyedArchiver.archivedData(withRootObject: token, requiringSecureCoding: true) else { return }");
4715
+ this.emit(
4716
+ " let data = try? NSKeyedArchiver.archivedData(withRootObject: token, requiringSecureCoding: true) else { return }"
4717
+ );
4575
4718
  this.emit("try? mcSession?.send(data, toPeers: [mcPeer], with: .reliable)");
4576
4719
  this.indentLevel--;
4577
4720
  this.emit("}");
@@ -4607,7 +4750,9 @@ var init_IOSCompiler = chunkEGIZHYJP_cjs.__esm({
4607
4750
  this.emit("for obj in nearbyObjects {");
4608
4751
  this.indentLevel++;
4609
4752
  this.emit("guard let peerId = peerTokenMap[obj.discoveryToken] else { continue }");
4610
- this.emit("var peer = peers[peerId] ?? UWBPeer(id: peerId, discoveryToken: obj.discoveryToken)");
4753
+ this.emit(
4754
+ "var peer = peers[peerId] ?? UWBPeer(id: peerId, discoveryToken: obj.discoveryToken)"
4755
+ );
4611
4756
  this.emit("peer.distance = obj.distance");
4612
4757
  this.emit("peer.direction = obj.direction");
4613
4758
  this.emit("peer.lastSeen = Date()");
@@ -4618,7 +4763,9 @@ var init_IOSCompiler = chunkEGIZHYJP_cjs.__esm({
4618
4763
  this.indentLevel--;
4619
4764
  this.emit("}");
4620
4765
  this.emit("");
4621
- this.emit("func session(_ session: NISession, didRemove nearbyObjects: [NINearbyObject], reason: NINearbyObject.RemovalReason) {");
4766
+ this.emit(
4767
+ "func session(_ session: NISession, didRemove nearbyObjects: [NINearbyObject], reason: NINearbyObject.RemovalReason) {"
4768
+ );
4622
4769
  this.indentLevel++;
4623
4770
  this.emit("for obj in nearbyObjects {");
4624
4771
  this.indentLevel++;
@@ -4663,7 +4810,9 @@ var init_IOSCompiler = chunkEGIZHYJP_cjs.__esm({
4663
4810
  this.emit(`extension ${cls}UWBManager: MCSessionDelegate {`);
4664
4811
  this.indentLevel++;
4665
4812
  this.emit("");
4666
- this.emit("func session(_ session: MCSession, peer peerID: MCPeerID, didChange state: MCSessionState) {");
4813
+ this.emit(
4814
+ "func session(_ session: MCSession, peer peerID: MCPeerID, didChange state: MCSessionState) {"
4815
+ );
4667
4816
  this.indentLevel++;
4668
4817
  this.emit("switch state {");
4669
4818
  this.emit("case .connected:");
@@ -4689,10 +4838,14 @@ var init_IOSCompiler = chunkEGIZHYJP_cjs.__esm({
4689
4838
  this.indentLevel--;
4690
4839
  this.emit("}");
4691
4840
  this.emit("");
4692
- this.emit("func session(_ session: MCSession, didReceive data: Data, fromPeer peerID: MCPeerID) {");
4841
+ this.emit(
4842
+ "func session(_ session: MCSession, didReceive data: Data, fromPeer peerID: MCPeerID) {"
4843
+ );
4693
4844
  this.indentLevel++;
4694
4845
  this.emit("// Try to decode as NI discovery token");
4695
- this.emit("if let token = try? NSKeyedUnarchiver.unarchivedObject(ofClass: NIDiscoveryToken.self, from: data) {");
4846
+ this.emit(
4847
+ "if let token = try? NSKeyedUnarchiver.unarchivedObject(ofClass: NIDiscoveryToken.self, from: data) {"
4848
+ );
4696
4849
  this.indentLevel++;
4697
4850
  this.emit("peerTokenMap[token] = peerID.displayName");
4698
4851
  this.emit("let peer = UWBPeer(id: peerID.displayName, discoveryToken: token)");
@@ -4705,7 +4858,9 @@ var init_IOSCompiler = chunkEGIZHYJP_cjs.__esm({
4705
4858
  if (this.compositionHasTrait(composition, "uwb_handoff")) {
4706
4859
  this.emit("");
4707
4860
  this.emit("// Try to decode as handoff payload");
4708
- this.emit("if let json = try? JSONSerialization.jsonObject(with: data) as? [String: String],");
4861
+ this.emit(
4862
+ "if let json = try? JSONSerialization.jsonObject(with: data) as? [String: String],"
4863
+ );
4709
4864
  this.emit(' json["type"] == "uwb_handoff",');
4710
4865
  this.emit(' let entityId = json["entityId"],');
4711
4866
  this.emit(" let peer = peers[peerID.displayName] {");
@@ -4717,9 +4872,15 @@ var init_IOSCompiler = chunkEGIZHYJP_cjs.__esm({
4717
4872
  this.indentLevel--;
4718
4873
  this.emit("}");
4719
4874
  this.emit("");
4720
- this.emit("func session(_ session: MCSession, didReceive stream: InputStream, withName streamName: String, fromPeer peerID: MCPeerID) {}");
4721
- this.emit("func session(_ session: MCSession, didStartReceivingResourceWithName resourceName: String, fromPeer peerID: MCPeerID, with progress: Progress) {}");
4722
- this.emit("func session(_ session: MCSession, didFinishReceivingResourceWithName resourceName: String, fromPeer peerID: MCPeerID, at localURL: URL?, withError error: Error?) {}");
4875
+ this.emit(
4876
+ "func session(_ session: MCSession, didReceive stream: InputStream, withName streamName: String, fromPeer peerID: MCPeerID) {}"
4877
+ );
4878
+ this.emit(
4879
+ "func session(_ session: MCSession, didStartReceivingResourceWithName resourceName: String, fromPeer peerID: MCPeerID, with progress: Progress) {}"
4880
+ );
4881
+ this.emit(
4882
+ "func session(_ session: MCSession, didFinishReceivingResourceWithName resourceName: String, fromPeer peerID: MCPeerID, at localURL: URL?, withError error: Error?) {}"
4883
+ );
4723
4884
  this.indentLevel--;
4724
4885
  this.emit("}");
4725
4886
  this.emit("");
@@ -4728,7 +4889,9 @@ var init_IOSCompiler = chunkEGIZHYJP_cjs.__esm({
4728
4889
  this.emit(`extension ${cls}UWBManager: MCNearbyServiceAdvertiserDelegate {`);
4729
4890
  this.indentLevel++;
4730
4891
  this.emit("");
4731
- this.emit("func advertiser(_ advertiser: MCNearbyServiceAdvertiser, didReceiveInvitationFromPeer peerID: MCPeerID, withContext context: Data?, invitationHandler: @escaping (Bool, MCSession?) -> Void) {");
4892
+ this.emit(
4893
+ "func advertiser(_ advertiser: MCNearbyServiceAdvertiser, didReceiveInvitationFromPeer peerID: MCPeerID, withContext context: Data?, invitationHandler: @escaping (Bool, MCSession?) -> Void) {"
4894
+ );
4732
4895
  this.indentLevel++;
4733
4896
  this.emit("invitationHandler(true, mcSession)");
4734
4897
  this.indentLevel--;
@@ -4741,7 +4904,9 @@ var init_IOSCompiler = chunkEGIZHYJP_cjs.__esm({
4741
4904
  this.emit(`extension ${cls}UWBManager: MCNearbyServiceBrowserDelegate {`);
4742
4905
  this.indentLevel++;
4743
4906
  this.emit("");
4744
- this.emit("func browser(_ browser: MCNearbyServiceBrowser, foundPeer peerID: MCPeerID, withDiscoveryInfo info: [String: String]?) {");
4907
+ this.emit(
4908
+ "func browser(_ browser: MCNearbyServiceBrowser, foundPeer peerID: MCPeerID, withDiscoveryInfo info: [String: String]?) {"
4909
+ );
4745
4910
  this.indentLevel++;
4746
4911
  this.emit("guard let session = mcSession else { return }");
4747
4912
  this.emit("browser.invitePeer(peerID, to: session, withContext: nil, timeout: 10)");
@@ -4798,7 +4963,7 @@ var init_IOSCompiler = chunkEGIZHYJP_cjs.__esm({
4798
4963
  }
4799
4964
  // === AirPods Spatial Audio (iOS 15+, AVFoundation PHASE + CMHeadphoneMotionManager — M.010.11) ===
4800
4965
  hasSpatialAudioTraits(composition) {
4801
- const spatialNames = chunkV2ILLPHK_cjs.AIRPODS_SPATIAL_AUDIO_TRAITS;
4966
+ const spatialNames = chunkMD6KDHVE_cjs.AIRPODS_SPATIAL_AUDIO_TRAITS;
4802
4967
  for (const obj of composition.objects || []) {
4803
4968
  for (const trait of obj.traits || []) {
4804
4969
  const name = typeof trait === "string" ? trait : trait.name;
@@ -4808,7 +4973,7 @@ var init_IOSCompiler = chunkEGIZHYJP_cjs.__esm({
4808
4973
  return false;
4809
4974
  }
4810
4975
  collectSpatialAudioTraits(composition) {
4811
- const spatialNames = chunkV2ILLPHK_cjs.AIRPODS_SPATIAL_AUDIO_TRAITS;
4976
+ const spatialNames = chunkMD6KDHVE_cjs.AIRPODS_SPATIAL_AUDIO_TRAITS;
4812
4977
  const found = /* @__PURE__ */ new Set();
4813
4978
  for (const obj of composition.objects || []) {
4814
4979
  for (const t of obj.traits || []) {
@@ -4932,7 +5097,9 @@ var init_IOSCompiler = chunkEGIZHYJP_cjs.__esm({
4932
5097
  this.indentLevel--;
4933
5098
  this.emit("}");
4934
5099
  this.emit("");
4935
- this.emit("headphoneMotionManager.startDeviceMotionUpdates(to: .main) { [weak self] motion, error in");
5100
+ this.emit(
5101
+ "headphoneMotionManager.startDeviceMotionUpdates(to: .main) { [weak self] motion, error in"
5102
+ );
4936
5103
  this.indentLevel++;
4937
5104
  this.emit("guard let self = self, let motion = motion else { return }");
4938
5105
  this.emit("self.headTrackingActive = true");
@@ -4980,7 +5147,9 @@ var init_IOSCompiler = chunkEGIZHYJP_cjs.__esm({
4980
5147
  this.emit("sources[source.id] = phaseSource");
4981
5148
  this.emit("audioSources.append(source)");
4982
5149
  this.emit("");
4983
- this.emit("loadAndPlayAudio(sourceId: source.id, audioFile: source.audioFile, gain: source.gain)");
5150
+ this.emit(
5151
+ "loadAndPlayAudio(sourceId: source.id, audioFile: source.audioFile, gain: source.gain)"
5152
+ );
4984
5153
  this.indentLevel--;
4985
5154
  this.emit("}");
4986
5155
  this.emit("");
@@ -5042,7 +5211,9 @@ var init_IOSCompiler = chunkEGIZHYJP_cjs.__esm({
5042
5211
  this.indentLevel--;
5043
5212
  this.emit(")");
5044
5213
  this.emit("samplerNodeDef.playbackMode = .looping");
5045
- this.emit("samplerNodeDef.setCalibrationMode(calibrationMode: .relativeSpl, level: Double(gain * 20))");
5214
+ this.emit(
5215
+ "samplerNodeDef.setCalibrationMode(calibrationMode: .relativeSpl, level: Double(gain * 20))"
5216
+ );
5046
5217
  this.emit("");
5047
5218
  if (traits.has("audio_falloff")) {
5048
5219
  this.emit("// Distance-based falloff (audio_falloff)");
@@ -5055,7 +5226,9 @@ var init_IOSCompiler = chunkEGIZHYJP_cjs.__esm({
5055
5226
  this.emit("distanceModelParameters.rolloffFactor = 1.0");
5056
5227
  this.emit("");
5057
5228
  this.emit("let spatialPipelineDef = PHASESpatialPipeline(flags: [.directPathTransmission])!");
5058
- this.emit("spatialPipelineDef.entries[PHASESpatialCategory.directPath]!.sendLevel = Double(gain)");
5229
+ this.emit(
5230
+ "spatialPipelineDef.entries[PHASESpatialCategory.directPath]!.sendLevel = Double(gain)"
5231
+ );
5059
5232
  this.emit("");
5060
5233
  this.emit("let spatialMixerDef = PHASESpatialMixerDefinition(");
5061
5234
  this.indentLevel++;
@@ -5065,7 +5238,9 @@ var init_IOSCompiler = chunkEGIZHYJP_cjs.__esm({
5065
5238
  this.emit("spatialMixerDef.distanceModelParameters = distanceModelParameters");
5066
5239
  } else {
5067
5240
  this.emit("let spatialPipelineDef = PHASESpatialPipeline(flags: [.directPathTransmission])!");
5068
- this.emit("spatialPipelineDef.entries[PHASESpatialCategory.directPath]!.sendLevel = Double(gain)");
5241
+ this.emit(
5242
+ "spatialPipelineDef.entries[PHASESpatialCategory.directPath]!.sendLevel = Double(gain)"
5243
+ );
5069
5244
  this.emit("");
5070
5245
  this.emit("let spatialMixerDef = PHASESpatialMixerDefinition(");
5071
5246
  this.indentLevel++;
@@ -5139,7 +5314,9 @@ var init_IOSCompiler = chunkEGIZHYJP_cjs.__esm({
5139
5314
  if (traits.has("audio_occlusion")) {
5140
5315
  this.emit("// MARK: - Audio Occlusion (audio_occlusion)");
5141
5316
  this.emit("");
5142
- this.emit("func updateOcclusionForSource(id: String, occluded: Bool, attenuationDb: Float = -12.0) {");
5317
+ this.emit(
5318
+ "func updateOcclusionForSource(id: String, occluded: Bool, attenuationDb: Float = -12.0) {"
5319
+ );
5143
5320
  this.indentLevel++;
5144
5321
  this.emit("guard let event = soundEvents[id] else { return }");
5145
5322
  this.emit("if occluded {");
@@ -5213,7 +5390,9 @@ var init_IOSCompiler = chunkEGIZHYJP_cjs.__esm({
5213
5390
  this.emit('Image(systemName: "speaker.wave.3")');
5214
5391
  this.emit("Text(source.id)");
5215
5392
  this.emit("Spacer()");
5216
- this.emit('Text(String(format: "(%.1f, %.1f, %.1f)", source.position.x, source.position.y, source.position.z))');
5393
+ this.emit(
5394
+ 'Text(String(format: "(%.1f, %.1f, %.1f)", source.position.x, source.position.y, source.position.z))'
5395
+ );
5217
5396
  this.indentLevel--;
5218
5397
  this.emit("}");
5219
5398
  this.indentLevel--;
@@ -5240,5 +5419,5 @@ var init_IOSCompiler = chunkEGIZHYJP_cjs.__esm({
5240
5419
  exports.IOSCompiler_exports = IOSCompiler_exports;
5241
5420
  exports.compileToIOS = compileToIOS;
5242
5421
  exports.init_IOSCompiler = init_IOSCompiler;
5243
- //# sourceMappingURL=chunk-YCMQQQ5U.cjs.map
5244
- //# sourceMappingURL=chunk-YCMQQQ5U.cjs.map
5422
+ //# sourceMappingURL=chunk-CBJSLA2E.cjs.map
5423
+ //# sourceMappingURL=chunk-CBJSLA2E.cjs.map