@holoscript/core 8.0.8 → 8.0.10

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 (463) hide show
  1. package/LICENSE +21 -0
  2. package/bin/holoscript.cjs +5 -1
  3. package/dist/GLTFPipeline-L76YTXKA.js +15 -0
  4. package/dist/GLTFPipeline-ZWJN7GI6.cjs +36 -0
  5. package/dist/HoloCompositionParser-K76KTEEE.js +12 -0
  6. package/dist/HoloCompositionParser-UZH6Y4HO.cjs +45 -0
  7. package/dist/HoloScriptCodeParser-2D4ERFUZ.js +6 -0
  8. package/dist/HoloScriptCodeParser-UDRLDA7I.cjs +23 -0
  9. package/dist/HoloScriptPlusParser-FTMCGWXD.js +13 -0
  10. package/dist/HoloScriptPlusParser-LQR5GIKF.cjs +30 -0
  11. package/dist/HoloScriptRuntime-UTRLJI5L.js +12 -0
  12. package/dist/HoloScriptRuntime-YBYXJHJN.cjs +21 -0
  13. package/dist/SceneIRCompiler-63KA3M2F.js +17 -0
  14. package/dist/SceneIRCompiler-KWUFHZ4O.cjs +42 -0
  15. package/dist/{USDZExporter-AUHZODOF.cjs → USDZExporter-ML4UMIGC.cjs} +3 -3
  16. package/dist/{USDZExporter-GXB4AUSG.js → USDZExporter-ZFKLQ76G.js} +3 -3
  17. package/dist/agents/index.cjs +1 -1
  18. package/dist/agents/index.js +1 -1
  19. package/dist/audit/AuditLogger.d.ts +106 -0
  20. package/dist/audit/AuditQueryBuilder.d.ts +79 -0
  21. package/dist/audit/ComplianceReporter.d.ts +90 -0
  22. package/dist/audit/index.d.ts +13 -0
  23. package/dist/{chunk-FGMDMJM7.js → chunk-2BYAUHBO.js} +3 -3
  24. package/dist/{chunk-EDPYCLRC.cjs → chunk-2E6PP5UE.cjs} +83 -59
  25. package/dist/{chunk-GASCWJK5.js → chunk-2EGGAZT3.js} +65 -287
  26. package/dist/{chunk-SIEXCILW.js → chunk-2I3XAGMF.js} +3 -3
  27. package/dist/{chunk-OS533P33.cjs → chunk-2KKOYZYI.cjs} +1074 -1655
  28. package/dist/chunk-2MQKNDNH.js +51 -0
  29. package/dist/{chunk-7DMMMBCY.cjs → chunk-2X3IPCBK.cjs} +10 -10
  30. package/dist/chunk-2ZOTBO25.cjs +202 -0
  31. package/dist/chunk-356N4NPM.cjs +152 -0
  32. package/dist/{chunk-X3GJPRVK.cjs → chunk-36NPLOI4.cjs} +92 -81
  33. package/dist/{chunk-SLU6UPJI.cjs → chunk-37HHY7RH.cjs} +5 -5
  34. package/dist/{chunk-YDPEHCCI.cjs → chunk-3CDDRUER.cjs} +3 -118
  35. package/dist/chunk-3F7ZZWIN.js +1651 -0
  36. package/dist/chunk-3ILD7TKP.cjs +187 -0
  37. package/dist/{chunk-X27QRG4C.cjs → chunk-3IUHTGDD.cjs} +153 -41
  38. package/dist/{chunk-PXNZ6TME.js → chunk-4376VHNJ.js} +60 -36
  39. package/dist/{chunk-YKGPCZEE.cjs → chunk-4FIBOJW6.cjs} +10 -10
  40. package/dist/chunk-4Q7RKQQI.cjs +14195 -0
  41. package/dist/{chunk-YCM6QQRT.cjs → chunk-566ZB4LZ.cjs} +180 -8
  42. package/dist/{chunk-2Y3V22SG.js → chunk-5CURIYGT.js} +3 -3
  43. package/dist/{chunk-QBWNJXNR.js → chunk-5FYMCVBY.js} +5 -5
  44. package/dist/{chunk-ZA34AN3R.js → chunk-5LVFTGKH.js} +841 -12
  45. package/dist/{chunk-Z6PMDS4G.js → chunk-5OUOMBKK.js} +1090 -53
  46. package/dist/chunk-63AUAIL6.js +48 -0
  47. package/dist/chunk-655FATJU.js +110 -0
  48. package/dist/{chunk-TQ377OLB.cjs → chunk-65S62L4D.cjs} +28 -22
  49. package/dist/chunk-6NTAZN5Z.cjs +502 -0
  50. package/dist/chunk-6TRX6AR2.js +9376 -0
  51. package/dist/chunk-6ZCCLKS2.cjs +51 -0
  52. package/dist/{chunk-MDR235RZ.js → chunk-734OB5SK.js} +721 -8
  53. package/dist/{chunk-Q2Q34NF3.js → chunk-77QI552M.js} +6 -6
  54. package/dist/{chunk-WKX5AMOY.js → chunk-7I74JWPW.js} +3 -3
  55. package/dist/{chunk-5FSKKMR7.cjs → chunk-7IDJDMPU.cjs} +232 -4
  56. package/dist/chunk-7VBKRGIZ.cjs +847 -0
  57. package/dist/{chunk-KCPHASCO.js → chunk-AATYYLYK.js} +5 -5
  58. package/dist/{chunk-DTGBOSEM.cjs → chunk-AWXFEAQL.cjs} +12 -12
  59. package/dist/{chunk-THCK6ECW.js → chunk-B3CWTCK2.js} +231 -3
  60. package/dist/chunk-BCP4E7MD.cjs +997 -0
  61. package/dist/chunk-BG7RPYJP.js +91 -0
  62. package/dist/{chunk-VF257YKO.js → chunk-BP4KTMLY.js} +117 -5
  63. package/dist/{chunk-YN6IETRZ.js → chunk-BQJ3YBF3.js} +6424 -987
  64. package/dist/{chunk-7X5PNIQJ.js → chunk-BXSOEQI3.js} +27 -25
  65. package/dist/{chunk-WFKVS2K4.cjs → chunk-C65C5VED.cjs} +1101 -55
  66. package/dist/{chunk-KOUAQL2B.cjs → chunk-CANAL6CT.cjs} +1569 -168
  67. package/dist/{chunk-FDSGHPAK.js → chunk-CBSDJF3B.js} +3 -3
  68. package/dist/{chunk-FEWUHQNM.cjs → chunk-CFVK26P4.cjs} +4 -4
  69. package/dist/{chunk-M7K4LE66.cjs → chunk-CI33NINL.cjs} +4 -4
  70. package/dist/{chunk-2OWDB4FB.js → chunk-CKV5NYAE.js} +6 -6
  71. package/dist/{chunk-LPS5AMQD.cjs → chunk-CM4NHXVO.cjs} +24 -24
  72. package/dist/chunk-D3HSRXYB.js +115 -0
  73. package/dist/{chunk-FNHJRI32.js → chunk-DBH3D2MU.js} +1561 -160
  74. package/dist/{chunk-GW3LKD5C.js → chunk-DJNH4HFW.js} +3 -3
  75. package/dist/{chunk-2GCNOI2U.cjs → chunk-DN6F4DHH.cjs} +9 -3
  76. package/dist/chunk-DQRJ5RJG.js +432 -0
  77. package/dist/{chunk-C7ZBSV2Q.js → chunk-DUG3OQAS.js} +106 -43
  78. package/dist/chunk-ECUYJOJ2.cjs +199 -0
  79. package/dist/chunk-EEMTCAK7.js +182 -0
  80. package/dist/{chunk-3SKLAUDD.cjs → chunk-EI3J6LTW.cjs} +359 -581
  81. package/dist/{chunk-SSSN7VAM.js → chunk-EM2OGPYE.js} +4 -4
  82. package/dist/{chunk-56VOWURB.cjs → chunk-ENZCIQZC.cjs} +522 -453
  83. package/dist/chunk-ESBXUYOC.cjs +836 -0
  84. package/dist/{chunk-L5U4W6JC.js → chunk-ESSEF6U2.js} +4 -4
  85. package/dist/chunk-ET3AN4W3.js +824 -0
  86. package/dist/chunk-EXKSFGSX.cjs +14 -14
  87. package/dist/{chunk-I76GIKN7.cjs → chunk-F3YT6GUF.cjs} +17 -17
  88. package/dist/{chunk-WRWEX5ZF.js → chunk-F75DZBBI.js} +3 -3
  89. package/dist/{chunk-4JGRWHZJ.js → chunk-FG6PYGIZ.js} +12 -6
  90. package/dist/chunk-FGGJQRLZ.js +14 -14
  91. package/dist/{chunk-SXOSDZD6.js → chunk-FWCHPCD4.js} +128 -10
  92. package/dist/{chunk-XW6IXEQH.cjs → chunk-G35CAQ7I.cjs} +5 -5
  93. package/dist/{chunk-7VMGP2FW.js → chunk-G6KACNMO.js} +132 -188
  94. package/dist/{chunk-FJPADH77.cjs → chunk-GAWJJAGT.cjs} +6 -6
  95. package/dist/chunk-GGR7QUKK.cjs +4724 -0
  96. package/dist/chunk-GIBF4BHH.js +14098 -0
  97. package/dist/{chunk-AWB7QYY6.cjs → chunk-GILYQ5VH.cjs} +6 -6
  98. package/dist/{chunk-FWVYAMNW.cjs → chunk-GKFCHGCM.cjs} +4 -4
  99. package/dist/{chunk-Y3ZFVUUU.js → chunk-GLEJ2TLS.js} +3 -3
  100. package/dist/{chunk-3GWWJT7L.js → chunk-GP3OKSKT.js} +13 -13
  101. package/dist/chunk-GTIPOEHN.js +196 -0
  102. package/dist/{chunk-LMJ5EBV7.cjs → chunk-GZPUA2TL.cjs} +16 -15
  103. package/dist/{chunk-IELX2OKI.js → chunk-H4LJ4HEA.js} +3 -115
  104. package/dist/{chunk-ACVWFGBI.cjs → chunk-HCX4SMFK.cjs} +3 -3
  105. package/dist/{chunk-HYNTS5CP.js → chunk-HHRZ6STP.js} +24 -2
  106. package/dist/chunk-HIDEIEFG.js +48 -0
  107. package/dist/{chunk-W6RW64BB.cjs → chunk-HSWBIDZM.cjs} +228 -5
  108. package/dist/{chunk-GSOUNWEL.js → chunk-HVX7QQYK.js} +1035 -1616
  109. package/dist/{chunk-TRCGG42I.cjs → chunk-IFW5IW4L.cjs} +6502 -1019
  110. package/dist/{chunk-F5LKJ6F5.cjs → chunk-IJU6AS67.cjs} +32 -28
  111. package/dist/{chunk-TVANHNJ7.js → chunk-IK6Z2HNC.js} +173 -3
  112. package/dist/{chunk-QGMUTVVH.cjs → chunk-IS7NTKY5.cjs} +20 -20
  113. package/dist/{chunk-YFVQWSNJ.js → chunk-IXWGYWH6.js} +3 -3
  114. package/dist/chunk-J2DAS2PL.js +148 -0
  115. package/dist/chunk-JBQXZIWB.js +148 -0
  116. package/dist/chunk-JBYBMBMW.js +261 -0
  117. package/dist/{chunk-LWUOUCYL.js → chunk-JEJ7TT54.js} +5 -5
  118. package/dist/{chunk-DUCB6LGL.js → chunk-JOTCTHN5.js} +211 -5
  119. package/dist/{chunk-47RUFYKR.js → chunk-K56UVEXV.js} +3 -3
  120. package/dist/{chunk-XSFNHP2E.js → chunk-KB26H447.js} +3 -3
  121. package/dist/{chunk-3NGDZZR4.js → chunk-KEYG7HGY.js} +430 -37
  122. package/dist/{chunk-DY72BMU5.js → chunk-KFVNCW4Q.js} +4 -4
  123. package/dist/chunk-KPGC7SK2.js +192 -0
  124. package/dist/chunk-KROXXBK5.cjs +53 -0
  125. package/dist/{chunk-ZPZAVHXL.cjs → chunk-LB3ZZMKT.cjs} +137 -19
  126. package/dist/chunk-LDYZWNJW.cjs +1654 -0
  127. package/dist/{chunk-UGXHYIWT.cjs → chunk-LHNHO27U.cjs} +28 -28
  128. package/dist/{chunk-ULMSSHCJ.cjs → chunk-LMB555QB.cjs} +405 -38
  129. package/dist/{chunk-CBJY23VL.js → chunk-MD4IVS42.js} +3 -3
  130. package/dist/{chunk-VMLKSV26.js → chunk-MDDWEBCX.js} +226 -3
  131. package/dist/chunk-MUWH4QK5.cjs +94 -0
  132. package/dist/{chunk-T6W3Z3SH.cjs → chunk-N2ILK7BF.cjs} +4 -4
  133. package/dist/{chunk-6EX3I5P4.cjs → chunk-N74QRJGP.cjs} +6 -6
  134. package/dist/chunk-NFFHLX37.cjs +132 -0
  135. package/dist/chunk-NJSYWX7H.js +190 -0
  136. package/dist/{chunk-SH5PPVK7.cjs → chunk-NQN5LFN4.cjs} +165 -221
  137. package/dist/chunk-NTQRFOPP.cjs +56 -0
  138. package/dist/{chunk-YFWRJW4B.js → chunk-NWMJPTVL.js} +51 -55
  139. package/dist/{chunk-63ZGNR2T.cjs → chunk-OC6GV5QH.cjs} +42 -42
  140. package/dist/{chunk-7E7GCQCK.js → chunk-OG3MBHM3.js} +9 -3
  141. package/dist/chunk-OMNHTCS4.cjs +264 -0
  142. package/dist/chunk-OQXB6NNC.cjs +117 -0
  143. package/dist/{chunk-Y57W2CT5.cjs → chunk-OV46CCA2.cjs} +51 -55
  144. package/dist/{chunk-6PRZIHGL.cjs → chunk-OV6HHKLE.cjs} +21 -266
  145. package/dist/{chunk-C37BHB7N.cjs → chunk-P26YYPOO.cjs} +5 -5
  146. package/dist/{chunk-2BZHWUSR.cjs → chunk-P7JEKJTZ.cjs} +16 -16
  147. package/dist/{chunk-NGBXXZLL.cjs → chunk-PDXX5UI4.cjs} +45 -45
  148. package/dist/{chunk-FHQFPYV4.js → chunk-PJFTTSKE.js} +8 -7
  149. package/dist/{chunk-GVFJ6T4S.cjs → chunk-PVODJEJ7.cjs} +721 -8
  150. package/dist/{chunk-ZZ7RO2UQ.js → chunk-Q265VZJ4.js} +3 -3
  151. package/dist/{chunk-E7JP3BS3.cjs → chunk-Q47JEE2C.cjs} +4 -4
  152. package/dist/chunk-QBY7LRN2.js +281 -0
  153. package/dist/{chunk-GH6C2QGW.cjs → chunk-QEDMOGF3.cjs} +857 -16
  154. package/dist/{chunk-5WUNN6ZN.cjs → chunk-QHSAVOOL.cjs} +24 -2
  155. package/dist/chunk-QJNCDVYM.cjs +137 -0
  156. package/dist/chunk-QM7FJB5W.js +4717 -0
  157. package/dist/chunk-QQFB4RT2.cjs +448 -0
  158. package/dist/chunk-QSYBHQAD.cjs +196 -0
  159. package/dist/{chunk-2YSNA2F2.cjs → chunk-QVJMDVYZ.cjs} +5 -5
  160. package/dist/chunk-RAJMAX6D.js +131 -0
  161. package/dist/{chunk-VVKVQZI6.js → chunk-RAN3ECAS.js} +3 -3
  162. package/dist/chunk-RKGUZBOC.js +79 -0
  163. package/dist/{chunk-HLFDZ35S.cjs → chunk-RRQIAJLQ.cjs} +8 -8
  164. package/dist/{chunk-PABONWKI.js → chunk-RXQNRZ5F.js} +3 -3
  165. package/dist/{chunk-7ZHYEITD.cjs → chunk-S4O7CFHQ.cjs} +10 -11
  166. package/dist/chunk-SE7ANBGN.js +128 -0
  167. package/dist/{chunk-X2AVEAZM.cjs → chunk-SJIRCTIS.cjs} +176 -2
  168. package/dist/{chunk-WXQ57LAO.js → chunk-SQXAZHDG.js} +4 -4
  169. package/dist/chunk-SR73L5ZP.cjs +84 -0
  170. package/dist/{chunk-OABEO6HH.js → chunk-SZOLTWWD.js} +2349 -214
  171. package/dist/{chunk-5JEU52DW.js → chunk-TPZ3BN2D.js} +3 -3
  172. package/dist/{chunk-QFU53KRH.js → chunk-TSTFYGGX.js} +4 -5
  173. package/dist/{chunk-EBS32AJI.cjs → chunk-TZCFKZ6Z.cjs} +5 -5
  174. package/dist/chunk-UCVZXQ63.js +724 -0
  175. package/dist/chunk-UGQ3QNV6.js +992 -0
  176. package/dist/chunk-UNMVGZVW.js +142 -0
  177. package/dist/{chunk-TEVX443G.js → chunk-UTUD6GJI.js} +178 -6
  178. package/dist/chunk-UXBYA7DV.cjs +155 -0
  179. package/dist/chunk-V6GXFSK7.cjs +443 -0
  180. package/dist/chunk-VHORVGCG.cjs +761 -0
  181. package/dist/{chunk-B4EKV6HQ.js → chunk-VKCTYLDN.js} +500 -442
  182. package/dist/{chunk-O3MGZDCT.cjs → chunk-VTEXJOSD.cjs} +63 -63
  183. package/dist/chunk-VVAAZITA.cjs +287 -0
  184. package/dist/{chunk-V7AKE5VT.cjs → chunk-W2GA3EQB.cjs} +435 -42
  185. package/dist/chunk-W4GABFCR.js +37 -0
  186. package/dist/chunk-WKEK4NCA.js +490 -0
  187. package/dist/{chunk-5A4TCHOC.cjs → chunk-WNYXT4TE.cjs} +4 -4
  188. package/dist/{chunk-S762UEV5.js → chunk-WTH23ISI.js} +6 -6
  189. package/dist/{chunk-BTKZGHAV.js → chunk-WWNCM473.js} +10 -6
  190. package/dist/{chunk-4YNYPHH3.cjs → chunk-X75H75UY.cjs} +2351 -213
  191. package/dist/{chunk-LYJJI7ZK.cjs → chunk-XCUDDFKC.cjs} +216 -9
  192. package/dist/chunk-YAO4HPJL.cjs +120 -0
  193. package/dist/chunk-YKY2JBER.cjs +9443 -0
  194. package/dist/chunk-YP5CHEYU.cjs +154 -0
  195. package/dist/{chunk-WRNEH5MO.js → chunk-YW3I2FQL.js} +18 -7
  196. package/dist/{chunk-BRNUPDHJ.js → chunk-Z557DVYN.js} +386 -19
  197. package/dist/{chunk-VSACG2AR.js → chunk-Z6LZUYZF.js} +21 -264
  198. package/dist/chunk-ZHPMP447.cjs +43 -0
  199. package/dist/{chunk-LODTHGST.cjs → chunk-ZK7KX5CD.cjs} +133 -70
  200. package/dist/{chunk-CCPSNT6B.cjs → chunk-ZRPALBQB.cjs} +5 -5
  201. package/dist/chunk-ZVFHPMC5.js +824 -0
  202. package/dist/chunk-ZVQMKUGJ.js +443 -0
  203. package/dist/cli/holoscript-runner.cjs +86 -48
  204. package/dist/cli/holoscript-runner.js +54 -16
  205. package/dist/codebase/index.cjs +1 -1
  206. package/dist/codebase/index.js +1 -1
  207. package/dist/compiler/agent-inference.cjs +11 -11
  208. package/dist/compiler/agent-inference.js +9 -6
  209. package/dist/compiler/android-xr.cjs +13 -12
  210. package/dist/compiler/android-xr.js +11 -10
  211. package/dist/compiler/android.cjs +12 -12
  212. package/dist/compiler/android.js +10 -10
  213. package/dist/compiler/business-quest.cjs +10 -10
  214. package/dist/compiler/business-quest.js +2 -2
  215. package/dist/compiler/coco.cjs +1 -1
  216. package/dist/compiler/coco.js +1 -1
  217. package/dist/compiler/context.cjs +9 -9
  218. package/dist/compiler/context.js +6 -6
  219. package/dist/compiler/daimon-seed.cjs +36 -0
  220. package/dist/compiler/daimon-seed.js +12 -0
  221. package/dist/compiler/domain-block-utils.cjs +205 -156
  222. package/dist/compiler/domain-block-utils.js +8 -7
  223. package/dist/compiler/dtdl.cjs +10 -10
  224. package/dist/compiler/dtdl.js +7 -7
  225. package/dist/compiler/gltf-pipeline.cjs +9 -9
  226. package/dist/compiler/gltf-pipeline.js +2 -2
  227. package/dist/compiler/godot.cjs +10 -9
  228. package/dist/compiler/godot.js +9 -8
  229. package/dist/compiler/incremental.cjs +11 -11
  230. package/dist/compiler/incremental.js +6 -6
  231. package/dist/compiler/index.cjs +2585 -3273
  232. package/dist/compiler/index.d.ts +149 -35
  233. package/dist/compiler/index.js +2197 -3102
  234. package/dist/compiler/ios.cjs +11 -11
  235. package/dist/compiler/ios.js +9 -9
  236. package/dist/compiler/llm-provider-capabilities.cjs +9 -9
  237. package/dist/compiler/llm-provider-capabilities.js +6 -6
  238. package/dist/compiler/nodetoy.cjs +1 -1
  239. package/dist/compiler/nodetoy.js +1 -1
  240. package/dist/compiler/openxr.cjs +11 -10
  241. package/dist/compiler/openxr.js +10 -9
  242. package/dist/compiler/remotion.cjs +1 -1
  243. package/dist/compiler/remotion.js +1 -1
  244. package/dist/compiler/reproducibility.cjs +1 -1
  245. package/dist/compiler/reproducibility.js +1 -1
  246. package/dist/compiler/sdf.cjs +11 -10
  247. package/dist/compiler/sdf.js +9 -8
  248. package/dist/compiler/semantic-scene.cjs +7 -7
  249. package/dist/compiler/semantic-scene.js +2 -2
  250. package/dist/compiler/state.cjs +9 -9
  251. package/dist/compiler/state.js +7 -7
  252. package/dist/compiler/trait-composition.cjs +11 -11
  253. package/dist/compiler/trait-composition.js +7 -7
  254. package/dist/compiler/traits/ProvenanceSemiring.d.ts +167 -0
  255. package/dist/compiler/traits/Semiring.d.ts +26 -0
  256. package/dist/compiler/unity.cjs +11 -10
  257. package/dist/compiler/unity.js +10 -9
  258. package/dist/compiler/unreal.cjs +12 -11
  259. package/dist/compiler/unreal.js +10 -9
  260. package/dist/compiler/urdf.cjs +18 -17
  261. package/dist/compiler/urdf.js +9 -8
  262. package/dist/compiler/usd-physics.cjs +11 -10
  263. package/dist/compiler/usd-physics.js +8 -7
  264. package/dist/compiler/visionos.cjs +11 -10
  265. package/dist/compiler/visionos.js +10 -9
  266. package/dist/compiler/vrchat.cjs +11 -10
  267. package/dist/compiler/vrchat.js +9 -8
  268. package/dist/compiler/wasm.cjs +14 -13
  269. package/dist/compiler/wasm.js +9 -8
  270. package/dist/compiler/webgpu.cjs +10 -9
  271. package/dist/compiler/webgpu.js +9 -8
  272. package/dist/constants.cjs +398 -0
  273. package/dist/constants.js +9 -0
  274. package/dist/coordinators/index.cjs +4 -1
  275. package/dist/coordinators/index.js +4 -1
  276. package/dist/debugger.cjs +11 -9
  277. package/dist/debugger.js +9 -7
  278. package/dist/{dist-ACXG6IH5.cjs → dist-GRMOP2UL.cjs} +341 -65
  279. package/dist/{dist-VD4L6V7Q.js → dist-ZBUKU2JG.js} +333 -63
  280. package/dist/entries/interop.cjs +23 -23
  281. package/dist/entries/interop.js +3 -3
  282. package/dist/entries/scripting.cjs +12 -11
  283. package/dist/entries/scripting.js +8 -7
  284. package/dist/evolution/index.cjs +66 -0
  285. package/dist/evolution/index.d.ts +162 -0
  286. package/dist/evolution/index.js +17 -0
  287. package/dist/hololand/index.cjs +41 -37
  288. package/dist/hololand/index.js +3 -3
  289. package/dist/index.cjs +12394 -3224
  290. package/dist/index.d.ts +260 -18
  291. package/dist/index.js +10755 -2182
  292. package/dist/keyword-registry/PluginKeywordRegistry.d.ts +138 -0
  293. package/dist/keyword-registry/index.cjs +29 -0
  294. package/dist/keyword-registry/index.d.ts +1 -0
  295. package/dist/keyword-registry/index.js +4 -0
  296. package/dist/math/tropical-spmv.cjs +11 -11
  297. package/dist/math/tropical-spmv.d.ts +1 -0
  298. package/dist/math/tropical-spmv.js +2 -2
  299. package/dist/math/tropicalSpmv.d.ts +43 -0
  300. package/dist/math/vec3.cjs +1 -1
  301. package/dist/math/vec3.js +1 -1
  302. package/dist/matter/StagedMatter.d.ts +82 -0
  303. package/dist/matter/index.cjs +17 -0
  304. package/dist/matter/index.d.ts +1 -0
  305. package/dist/matter/index.js +4 -0
  306. package/dist/{ml-dsa-Z7JDKW4L.js → ml-dsa-J6VKVT4K.js} +3 -3
  307. package/dist/{ml-dsa-FSKBTE3W.cjs → ml-dsa-MTIK4ZUQ.cjs} +23 -23
  308. package/dist/paper-0c-spike/index.cjs +1 -1
  309. package/dist/paper-0c-spike/index.js +1 -1
  310. package/dist/parameter-envelope/ParameterEnvelope.d.ts +128 -0
  311. package/dist/parameter-envelope/index.cjs +17 -0
  312. package/dist/parameter-envelope/index.d.ts +2 -0
  313. package/dist/parameter-envelope/index.js +4 -0
  314. package/dist/parser/HoloCompositionTypes.d.ts +2013 -0
  315. package/dist/parser/PipelineParser.d.ts +162 -0
  316. package/dist/parser.cjs +36 -20
  317. package/dist/parser.js +13 -9
  318. package/dist/plugin-manifest/ManifestAutoLoader.d.ts +35 -0
  319. package/dist/plugin-manifest/PluginManifest.d.ts +156 -0
  320. package/dist/plugin-manifest/index.cjs +25 -0
  321. package/dist/plugin-manifest/index.d.ts +2 -0
  322. package/dist/plugin-manifest/index.js +4 -0
  323. package/dist/plugin-solver-contract/PluginSolverContract.d.ts +288 -0
  324. package/dist/plugin-solver-contract/index.cjs +41 -0
  325. package/dist/plugin-solver-contract/index.d.ts +1 -0
  326. package/dist/plugin-solver-contract/index.js +4 -0
  327. package/dist/policy/ContentPolicyGate.d.ts +51 -0
  328. package/dist/policy/PolicyPack.d.ts +120 -0
  329. package/dist/policy/blocklist.d.ts +32 -0
  330. package/dist/policy/defaults.d.ts +44 -0
  331. package/dist/policy/index.cjs +106 -0
  332. package/dist/policy/index.d.ts +17 -0
  333. package/dist/policy/index.js +5 -0
  334. package/dist/policy/jsonLogic.d.ts +31 -0
  335. package/dist/policy/types.d.ts +174 -0
  336. package/dist/proof-composition/ProofCompositionLaw.d.ts +93 -0
  337. package/dist/proof-composition/index.cjs +25 -0
  338. package/dist/proof-composition/index.d.ts +1 -0
  339. package/dist/proof-composition/index.js +4 -0
  340. package/dist/receipts/hash-policy.d.ts +85 -0
  341. package/dist/reconstruction/index.cjs +75 -47
  342. package/dist/reconstruction/index.js +5 -5
  343. package/dist/runtime/plugin-trait-registrar.d.ts +36 -0
  344. package/dist/runtime.cjs +81 -79
  345. package/dist/runtime.js +9 -7
  346. package/dist/scene-presets-EDKYZ5GW.js +4 -0
  347. package/dist/scene-presets-NCW2CFRS.cjs +17 -0
  348. package/dist/self-improvement/index.cjs +1 -1
  349. package/dist/self-improvement/index.js +1 -1
  350. package/dist/{src-PT2FERDV.cjs → src-G3D7ZATQ.cjs} +545 -21
  351. package/dist/{src-J6CM4AUR.js → src-UXYA7HM6.js} +539 -16
  352. package/dist/storage/index.cjs +10 -10
  353. package/dist/storage/index.js +3 -3
  354. package/dist/testing.cjs +1 -1
  355. package/dist/testing.js +1 -1
  356. package/dist/tools/index.cjs +3631 -0
  357. package/dist/tools/index.js +3581 -0
  358. package/dist/traitDocs/traitDocs.cjs +9 -9
  359. package/dist/traitDocs/traitDocs.d.ts +1 -0
  360. package/dist/traitDocs/traitDocs.js +3 -3
  361. package/dist/traits/ControlLoopTrait.d.ts +154 -0
  362. package/dist/traits/KinematicChainTrait.d.ts +116 -0
  363. package/dist/traits/SensorSamplingTrait.d.ts +154 -0
  364. package/dist/traits/TraitTypes.d.ts +270 -0
  365. package/dist/traits/TransactionTrait.d.ts +121 -0
  366. package/dist/traits/botanical-lotus.cjs +54 -50
  367. package/dist/traits/botanical-lotus.js +2 -5
  368. package/dist/traits/control-loop.cjs +21 -0
  369. package/dist/traits/control-loop.d.ts +1 -0
  370. package/dist/traits/control-loop.js +4 -0
  371. package/dist/traits/engines/cloth-verlet.d.ts +65 -0
  372. package/dist/traits/engines/index.cjs +19 -19
  373. package/dist/traits/engines/index.d.ts +15 -275
  374. package/dist/traits/engines/index.js +3 -3
  375. package/dist/traits/engines/motion-data-schema.d.ts +119 -0
  376. package/dist/traits/engines/motion-matching.d.ts +102 -0
  377. package/dist/traits/engines/noise.d.ts +25 -0
  378. package/dist/traits/engines/onnx-adapter.d.ts +173 -0
  379. package/dist/traits/engines/onnx-motion-matching.d.ts +163 -0
  380. package/dist/traits/engines/pfnn-network.d.ts +92 -0
  381. package/dist/traits/engines/synthetic-walk-cycle.d.ts +38 -0
  382. package/dist/traits/engines/tensor-ops.d.ts +15 -0
  383. package/dist/traits/index.cjs +2789 -1259
  384. package/dist/traits/index.d.ts +35 -0
  385. package/dist/traits/index.js +1692 -411
  386. package/dist/traits/kinematic-chain.cjs +25 -0
  387. package/dist/traits/kinematic-chain.d.ts +1 -0
  388. package/dist/traits/kinematic-chain.js +4 -0
  389. package/dist/traits/sensor-sampling.cjs +33 -0
  390. package/dist/traits/sensor-sampling.d.ts +1 -0
  391. package/dist/traits/sensor-sampling.js +4 -0
  392. package/dist/traits/simulation-solver-factory.cjs +1 -1
  393. package/dist/traits/simulation-solver-factory.js +1 -1
  394. package/dist/traits/transaction.cjs +29 -0
  395. package/dist/traits/transaction.d.ts +1 -0
  396. package/dist/traits/transaction.js +4 -0
  397. package/dist/traits/webcam-gaze.cjs +1 -1
  398. package/dist/traits/webcam-gaze.js +1 -1
  399. package/dist/type-checker.cjs +7 -6
  400. package/dist/type-checker.js +5 -4
  401. package/dist/types/AdvancedTypeSystem.d.ts +489 -0
  402. package/dist/types/HoloScriptPlus.d.ts +810 -0
  403. package/dist/types/base.d.ts +248 -0
  404. package/dist/types.d.ts +799 -0
  405. package/dist/world/index.cjs +3 -4
  406. package/dist/world/index.js +3 -4
  407. package/dist/world-model/index.cjs +1 -1
  408. package/dist/world-model/index.js +1 -1
  409. package/dist/wot/index.cjs +1 -1
  410. package/dist/wot/index.js +1 -1
  411. package/package.json +135 -69
  412. package/dist/GLTFPipeline-3EJLL3TS.cjs +0 -38
  413. package/dist/GLTFPipeline-3OWJV2VK.js +0 -17
  414. package/dist/HoloScriptPlusParser-ADWRY5OS.cjs +0 -698
  415. package/dist/HoloScriptPlusParser-JLJDXHSC.js +0 -693
  416. package/dist/HoloScriptPlusParser-QCGFPWIL.cjs +0 -27
  417. package/dist/HoloScriptPlusParser-WENAFEFV.js +0 -10
  418. package/dist/HoloScriptRuntime-GGRVEU4T.cjs +0 -19
  419. package/dist/HoloScriptRuntime-GJK6VJPH.js +0 -10
  420. package/dist/chunk-22Q5A6RV.js +0 -979
  421. package/dist/chunk-4C57PR42.js +0 -468
  422. package/dist/chunk-4W5G5QVL.cjs +0 -847
  423. package/dist/chunk-5ET6L4NS.js +0 -487
  424. package/dist/chunk-C4GSLCHE.cjs +0 -7153
  425. package/dist/chunk-F2G6CWFT.js +0 -7089
  426. package/dist/chunk-G6PNEASF.cjs +0 -814
  427. package/dist/chunk-GTA4Q3A3.js +0 -1491
  428. package/dist/chunk-HCCQLAA4.cjs +0 -74
  429. package/dist/chunk-HFSVMKM3.cjs +0 -72
  430. package/dist/chunk-KAIVDEIG.cjs +0 -4539
  431. package/dist/chunk-KQU64CIX.cjs +0 -1508
  432. package/dist/chunk-MSYSQ2AJ.js +0 -4533
  433. package/dist/chunk-NHJLP37F.js +0 -70
  434. package/dist/chunk-NHYRRAGI.cjs +0 -490
  435. package/dist/chunk-OIQYIIO3.cjs +0 -473
  436. package/dist/chunk-OL46QLBJ.js +0 -61
  437. package/dist/chunk-SKZPC5AG.cjs +0 -984
  438. package/dist/chunk-SLHLXUMO.js +0 -445
  439. package/dist/chunk-UOIGFQXC.cjs +0 -9750
  440. package/dist/chunk-UOL6Y5TD.cjs +0 -759
  441. package/dist/chunk-UVFI7XIR.cjs +0 -452
  442. package/dist/chunk-VEPGBETF.js +0 -844
  443. package/dist/chunk-XQ5MWMP2.js +0 -756
  444. package/dist/chunk-XT6JY5W5.js +0 -9684
  445. package/dist/chunk-YRRAUB35.js +0 -811
  446. package/dist/compiler/GasOptimizationAnalyzer.d.ts +0 -73
  447. package/dist/compiler/NFTMarketplaceCompiler.d.ts +0 -23
  448. package/dist/compiler/ar.cjs +0 -23
  449. package/dist/compiler/ar.js +0 -11
  450. package/dist/compiler/babylon.cjs +0 -21
  451. package/dist/compiler/babylon.js +0 -15
  452. package/dist/compiler/multi-layer.cjs +0 -24
  453. package/dist/compiler/multi-layer.js +0 -15
  454. package/dist/compiler/playcanvas.cjs +0 -19
  455. package/dist/compiler/playcanvas.js +0 -13
  456. package/dist/compiler/r3f.cjs +0 -39
  457. package/dist/compiler/r3f.d.ts +0 -22
  458. package/dist/compiler/r3f.js +0 -17
  459. package/dist/compiler/vrr.cjs +0 -24
  460. package/dist/compiler/vrr.js +0 -12
  461. package/dist/parser/NFTMarketplaceTypes.d.ts +0 -191
  462. package/dist/playwright-3AT3AKTV.cjs +0 -98673
  463. package/dist/playwright-VZPDVUEQ.js +0 -98660
@@ -1,11 +1,12 @@
1
1
  'use strict';
2
2
 
3
- var chunkLODTHGST_cjs = require('./chunk-LODTHGST.cjs');
4
- var chunkHCCQLAA4_cjs = require('./chunk-HCCQLAA4.cjs');
3
+ var chunkVHORVGCG_cjs = require('./chunk-VHORVGCG.cjs');
4
+ var chunkZK7KX5CD_cjs = require('./chunk-ZK7KX5CD.cjs');
5
+ var chunkZHPMP447_cjs = require('./chunk-ZHPMP447.cjs');
5
6
 
6
7
  // src/compiler/DomainBlockCompilerMixin.ts
7
8
  function esc(value, target) {
8
- return chunkLODTHGST_cjs.escapeStringValue(value, target);
9
+ return chunkZK7KX5CD_cjs.escapeStringValue(value, target);
9
10
  }
10
11
  function isPhysicalMaterial(mat) {
11
12
  return PHYSICAL_MATERIAL_KEYS.some((k) => mat[k] !== void 0);
@@ -46,6 +47,662 @@ function compileMaterialBlock(block) {
46
47
  traits: block.traits || []
47
48
  };
48
49
  }
50
+ function compileMaterialGraphBlock(block) {
51
+ const props = block.properties || {};
52
+ const nodes = [];
53
+ for (const [key, raw] of Object.entries(props)) {
54
+ if (key === "connections") continue;
55
+ const nodeObj = raw && typeof raw === "object" ? raw : {};
56
+ const { type: nodeType, ...params } = nodeObj;
57
+ nodes.push({
58
+ id: key,
59
+ nodeType: typeof nodeType === "string" ? nodeType : "constant",
60
+ params
61
+ });
62
+ }
63
+ const rawConns = Array.isArray(props.connections) ? props.connections : [];
64
+ const edges = [];
65
+ for (const c of rawConns) {
66
+ const from = typeof c.from === "string" ? c.from : "";
67
+ const to = typeof c.to === "string" ? c.to : "";
68
+ if (!from || !to) continue;
69
+ const dot = to.indexOf(".");
70
+ const toNode = dot >= 0 ? to.slice(0, dot) : to;
71
+ const toPort = dot >= 0 ? to.slice(dot + 1) : "in";
72
+ edges.push({ from, toNode, toPort });
73
+ }
74
+ return {
75
+ name: block.name || "unnamed",
76
+ nodes,
77
+ edges,
78
+ traits: block.traits || []
79
+ };
80
+ }
81
+ function sanitizeMgIdent(id) {
82
+ const s = id.replace(/[^A-Za-z0-9_]/g, "_");
83
+ return /^[A-Za-z_]/.test(s) ? s : `n_${s}`;
84
+ }
85
+ function mgHexToVec3(value) {
86
+ const hex = typeof value === "string" ? value : "";
87
+ const m = /^#?([0-9a-fA-F]{6})$/.exec(hex.trim());
88
+ if (!m) return "vec3<f32>(0.5, 0.5, 0.5)";
89
+ const n = parseInt(m[1], 16);
90
+ const r = (n >> 16 & 255) / 255;
91
+ const g = (n >> 8 & 255) / 255;
92
+ const b = (n & 255) / 255;
93
+ return `vec3<f32>(${r.toFixed(4)}, ${g.toFixed(4)}, ${b.toFixed(4)})`;
94
+ }
95
+ function materialGraphToWGSL(graph) {
96
+ const safeName = sanitizeMgIdent(graph.name);
97
+ const fnName = `evalMaterialGraph_${safeName}`;
98
+ const warnings = [];
99
+ const nodeById = new Map(graph.nodes.map((n) => [n.id, n]));
100
+ const inputs = /* @__PURE__ */ new Map();
101
+ for (const n of graph.nodes) inputs.set(n.id, /* @__PURE__ */ new Map());
102
+ for (const e of graph.edges) {
103
+ if (!nodeById.has(e.from)) {
104
+ warnings.push(`edge from unknown node "${e.from}"`);
105
+ continue;
106
+ }
107
+ if (!inputs.has(e.toNode)) {
108
+ warnings.push(`edge to unknown node "${e.toNode}"`);
109
+ continue;
110
+ }
111
+ inputs.get(e.toNode).set(e.toPort, e.from);
112
+ }
113
+ const indeg = /* @__PURE__ */ new Map();
114
+ const adj = /* @__PURE__ */ new Map();
115
+ for (const n of graph.nodes) {
116
+ indeg.set(n.id, 0);
117
+ adj.set(n.id, []);
118
+ }
119
+ for (const e of graph.edges) {
120
+ if (!nodeById.has(e.from) || !nodeById.has(e.toNode)) continue;
121
+ adj.get(e.from).push(e.toNode);
122
+ indeg.set(e.toNode, (indeg.get(e.toNode) || 0) + 1);
123
+ }
124
+ const queue = graph.nodes.filter((n) => (indeg.get(n.id) || 0) === 0).map((n) => n.id);
125
+ const order = [];
126
+ while (queue.length) {
127
+ const id = queue.shift();
128
+ order.push(id);
129
+ for (const next of adj.get(id) || []) {
130
+ indeg.set(next, (indeg.get(next) || 0) - 1);
131
+ if ((indeg.get(next) || 0) === 0) queue.push(next);
132
+ }
133
+ }
134
+ if (order.length < graph.nodes.length) {
135
+ warnings.push("material graph has a cycle; emitting nodes in declaration order");
136
+ for (const n of graph.nodes) if (!order.includes(n.id)) order.push(n.id);
137
+ }
138
+ const values = /* @__PURE__ */ new Map();
139
+ const inPort = (nodeId, port) => {
140
+ const from = inputs.get(nodeId)?.get(port);
141
+ return from ? values.get(from) : void 0;
142
+ };
143
+ const body = [];
144
+ let output = null;
145
+ for (const id of order) {
146
+ const node = nodeById.get(id);
147
+ const v = sanitizeMgIdent(id);
148
+ switch (node.nodeType) {
149
+ case "constant": {
150
+ if (typeof node.params.value === "number") {
151
+ body.push(` let mg_${v} = ${node.params.value.toFixed(4)}; // constant`);
152
+ values.set(id, { ref: `mg_${v}`, type: "f32" });
153
+ } else {
154
+ body.push(` let mg_${v} = ${mgHexToVec3(node.params.value)}; // constant`);
155
+ values.set(id, { ref: `mg_${v}`, type: "vec3" });
156
+ }
157
+ break;
158
+ }
159
+ case "noise": {
160
+ const scale = typeof node.params.scale === "number" ? node.params.scale : 1;
161
+ body.push(` let mg_${v} = mgNoise(uv * ${scale.toFixed(4)}); // noise`);
162
+ values.set(id, { ref: `mg_${v}`, type: "f32" });
163
+ break;
164
+ }
165
+ case "fresnel": {
166
+ const power = typeof node.params.power === "number" ? node.params.power : 5;
167
+ body.push(
168
+ ` let mg_${v} = pow(1.0 - max(dot(N, V), 0.0), ${power.toFixed(4)}); // fresnel`
169
+ );
170
+ values.set(id, { ref: `mg_${v}`, type: "f32" });
171
+ break;
172
+ }
173
+ case "multiply":
174
+ case "add": {
175
+ const a = inPort(id, "a");
176
+ const b = inPort(id, "b");
177
+ const op = node.nodeType === "multiply" ? "*" : "+";
178
+ const asVec = a?.type === "vec3" || b?.type === "vec3";
179
+ if (asVec) {
180
+ body.push(` let mg_${v} = ${mgToVec3(a)} ${op} ${mgToVec3(b)}; // ${node.nodeType}`);
181
+ values.set(id, { ref: `mg_${v}`, type: "vec3" });
182
+ } else {
183
+ body.push(` let mg_${v} = ${mgToF32(a)} ${op} ${mgToF32(b)}; // ${node.nodeType}`);
184
+ values.set(id, { ref: `mg_${v}`, type: "f32" });
185
+ }
186
+ break;
187
+ }
188
+ case "lerp": {
189
+ const a = inPort(id, "a");
190
+ const b = inPort(id, "b");
191
+ const t = inPort(id, "t");
192
+ body.push(
193
+ ` let mg_${v} = mix(${mgToVec3(a)}, ${mgToVec3(b)}, vec3<f32>(${mgToF32(t)})); // lerp`
194
+ );
195
+ values.set(id, { ref: `mg_${v}`, type: "vec3" });
196
+ break;
197
+ }
198
+ case "output": {
199
+ output = { id };
200
+ break;
201
+ }
202
+ default: {
203
+ warnings.push(`unknown node type "${node.nodeType}" (node "${id}") \u2014 treated as black`);
204
+ body.push(` let mg_${v} = vec3<f32>(0.0); // unknown:${esc(node.nodeType, "TypeScript")}`);
205
+ values.set(id, { ref: `mg_${v}`, type: "vec3" });
206
+ }
207
+ }
208
+ }
209
+ const baseColorIn = output ? inPort(output.id, "base_color") : void 0;
210
+ const roughnessIn = output ? inPort(output.id, "roughness") : void 0;
211
+ const metallicIn = output ? inPort(output.id, "metallic") : void 0;
212
+ const emissiveIn = output ? inPort(output.id, "emissive") : void 0;
213
+ const baseColor = baseColorIn ? mgToVec3(baseColorIn) : "vec3<f32>(0.8)";
214
+ const roughness = roughnessIn ? mgToF32(roughnessIn, "0.5") : "0.5";
215
+ const metallic = metallicIn ? mgToF32(metallicIn, "0.0") : "0.0";
216
+ const emissive = emissiveIn ? mgToVec3(emissiveIn) : "vec3<f32>(0.0)";
217
+ const header = [
218
+ `// Material Graph "${esc(graph.name, "TypeScript")}" \u2014 generated by HoloScript TSLCompiler`,
219
+ `// Nodes: ${graph.nodes.length} | Edges: ${graph.edges.length} | topo-ordered: [${order.map((o) => esc(o, "TypeScript")).join(" -> ")}]`,
220
+ ...warnings.map((w) => `// WARNING: ${esc(w, "TypeScript")}`)
221
+ ];
222
+ const wgsl = [
223
+ ...header,
224
+ "",
225
+ "struct MaterialGraphSurface {",
226
+ " baseColor: vec3<f32>,",
227
+ " roughness: f32,",
228
+ " metallic: f32,",
229
+ " emissive: vec3<f32>,",
230
+ "};",
231
+ "",
232
+ "// Cheap value-noise helper (hash-based); replace with a texture sample for AAA fidelity.",
233
+ "fn mgNoise(p: vec2<f32>) -> f32 {",
234
+ " return fract(sin(dot(p, vec2<f32>(12.9898, 78.233))) * 43758.5453);",
235
+ "}",
236
+ "",
237
+ `fn ${fnName}(uv: vec2<f32>, N: vec3<f32>, V: vec3<f32>, time: f32) -> MaterialGraphSurface {`,
238
+ ...body,
239
+ " var surface: MaterialGraphSurface;",
240
+ ` surface.baseColor = ${baseColor};`,
241
+ ` surface.roughness = ${roughness};`,
242
+ ` surface.metallic = ${metallic};`,
243
+ ` surface.emissive = ${emissive};`,
244
+ " return surface;",
245
+ "}"
246
+ ].join("\n");
247
+ return { fnName, wgsl };
248
+ }
249
+ function compileParticleFieldBlock(block) {
250
+ const props = block.properties || {};
251
+ const forces = [];
252
+ let count = 1e3;
253
+ let lifetime = 2;
254
+ for (const [key, raw] of Object.entries(props)) {
255
+ if (key === "count" && typeof raw === "number") {
256
+ count = raw;
257
+ continue;
258
+ }
259
+ if (key === "lifetime" && typeof raw === "number") {
260
+ lifetime = raw;
261
+ continue;
262
+ }
263
+ if (raw && typeof raw === "object" && !Array.isArray(raw)) {
264
+ const { type, ...params } = raw;
265
+ if (typeof type === "string") forces.push({ id: key, forceType: type, params });
266
+ }
267
+ }
268
+ return { name: block.name || "unnamed", count, lifetime, forces, traits: block.traits || [] };
269
+ }
270
+ function particleFieldToWGSL(field) {
271
+ const safe = sanitizeMgIdent(field.name);
272
+ const fnName = `cs_particle_field_${safe}`;
273
+ const warnings = [];
274
+ const num = (p, k, d) => typeof p[k] === "number" ? p[k] : d;
275
+ const forceLines = [];
276
+ for (const f of field.forces) {
277
+ const p = f.params;
278
+ switch (f.forceType) {
279
+ case "gravity":
280
+ forceLines.push(
281
+ ` accel += vec3<f32>(0.0, ${num(p, "strength", -9.81).toFixed(4)}, 0.0); // gravity:${esc(f.id, "TypeScript")}`
282
+ );
283
+ break;
284
+ case "drag":
285
+ forceLines.push(
286
+ ` accel -= p.vel * ${num(p, "coefficient", 0.1).toFixed(4)}; // drag:${esc(f.id, "TypeScript")}`
287
+ );
288
+ break;
289
+ case "vortex":
290
+ forceLines.push(
291
+ ` accel += normalize(vec3<f32>(-p.pos.z, 0.0, p.pos.x) + vec3<f32>(1e-4)) * ${num(p, "strength", 1).toFixed(4)}; // vortex:${esc(f.id, "TypeScript")}`
292
+ );
293
+ break;
294
+ case "attractor":
295
+ forceLines.push(
296
+ ` accel += -normalize(p.pos + vec3<f32>(1e-4)) * ${num(p, "strength", 1).toFixed(4)}; // attractor:${esc(f.id, "TypeScript")}`
297
+ );
298
+ break;
299
+ case "curl_noise":
300
+ case "turbulence":
301
+ forceLines.push(
302
+ ` accel += pfCurl(p.pos * ${num(p, "scale", 1).toFixed(4)}) * ${num(p, "strength", 1).toFixed(4)}; // ${f.forceType}:${esc(f.id, "TypeScript")}`
303
+ );
304
+ break;
305
+ default:
306
+ warnings.push(`unknown force "${f.forceType}" (node "${f.id}") \u2014 skipped`);
307
+ forceLines.push(` // unknown force ${esc(f.forceType, "TypeScript")}:${esc(f.id, "TypeScript")}`);
308
+ }
309
+ }
310
+ if (forceLines.length === 0) forceLines.push(" // no forces declared \u2014 particles drift inertially");
311
+ const wgsl = [
312
+ `// Particle Field "${esc(field.name, "TypeScript")}" \u2014 generated by HoloScript TSLCompiler`,
313
+ `// count: ${field.count} | lifetime: ${field.lifetime} | forces: [${field.forces.map((f) => `${esc(f.forceType, "TypeScript")}:${esc(f.id, "TypeScript")}`).join(", ")}]`,
314
+ ...warnings.map((w) => `// WARNING: ${esc(w, "TypeScript")}`),
315
+ "",
316
+ `struct ParticleField_${safe} {`,
317
+ " pos: vec3<f32>,",
318
+ " life: f32,",
319
+ " vel: vec3<f32>,",
320
+ " _pad: f32,",
321
+ "};",
322
+ "",
323
+ "// hash-based value noise \u2192 cheap curl approximation for turbulent forces",
324
+ "fn pfHash3(p: vec3<f32>) -> f32 {",
325
+ " return fract(sin(dot(p, vec3<f32>(12.9898, 78.233, 37.719))) * 43758.5453);",
326
+ "}",
327
+ "fn pfCurl(p: vec3<f32>) -> vec3<f32> {",
328
+ " let e = 0.1;",
329
+ " let dx = pfHash3(p + vec3<f32>(e, 0.0, 0.0)) - pfHash3(p - vec3<f32>(e, 0.0, 0.0));",
330
+ " let dy = pfHash3(p + vec3<f32>(0.0, e, 0.0)) - pfHash3(p - vec3<f32>(0.0, e, 0.0));",
331
+ " let dz = pfHash3(p + vec3<f32>(0.0, 0.0, e)) - pfHash3(p - vec3<f32>(0.0, 0.0, e));",
332
+ " return vec3<f32>(dy - dz, dz - dx, dx - dy);",
333
+ "}",
334
+ "",
335
+ `@group(0) @binding(0) var<storage, read> pfIn_${safe}: array<ParticleField_${safe}>;`,
336
+ `@group(0) @binding(1) var<storage, read_write> pfOut_${safe}: array<ParticleField_${safe}>;`,
337
+ `@group(0) @binding(2) var<uniform> pfDt_${safe}: f32;`,
338
+ "",
339
+ "@compute @workgroup_size(64)",
340
+ `fn ${fnName}(@builtin(global_invocation_id) gid: vec3<u32>) {`,
341
+ ` let i = gid.x;`,
342
+ ` if (i >= arrayLength(&pfIn_${safe})) { return; }`,
343
+ ` var p = pfIn_${safe}[i];`,
344
+ ` let dt = pfDt_${safe};`,
345
+ " var accel = vec3<f32>(0.0);",
346
+ ...forceLines,
347
+ " p.vel += accel * dt;",
348
+ " p.pos += p.vel * dt;",
349
+ " p.life -= dt;",
350
+ " if (p.life <= 0.0) {",
351
+ " p.pos = vec3<f32>(0.0);",
352
+ " p.vel = vec3<f32>(0.0, 1.0, 0.0);",
353
+ ` p.life = ${field.lifetime.toFixed(4)};`,
354
+ " }",
355
+ ` pfOut_${safe}[i] = p;`,
356
+ "}"
357
+ ].join("\n");
358
+ return { fnName, wgsl };
359
+ }
360
+ function compileLightFieldBlock(block) {
361
+ const props = block.properties || {};
362
+ const lights = [];
363
+ let ambient = "#000000";
364
+ let bounces = 1;
365
+ let intensity = 1;
366
+ for (const [key, raw] of Object.entries(props)) {
367
+ if (key === "ambient" && typeof raw === "string") {
368
+ ambient = raw;
369
+ continue;
370
+ }
371
+ if (key === "bounces" && typeof raw === "number") {
372
+ bounces = raw;
373
+ continue;
374
+ }
375
+ if (key === "intensity" && typeof raw === "number") {
376
+ intensity = raw;
377
+ continue;
378
+ }
379
+ if (raw && typeof raw === "object" && !Array.isArray(raw)) {
380
+ const { type, ...params } = raw;
381
+ if (typeof type === "string") lights.push({ id: key, lightType: type, params });
382
+ }
383
+ }
384
+ return { name: block.name || "unnamed", ambient, bounces, intensity, lights, traits: block.traits || [] };
385
+ }
386
+ function lightFieldToWGSL(field) {
387
+ const safe = sanitizeMgIdent(field.name);
388
+ const fnName = `evalLightField_${safe}`;
389
+ const warnings = [];
390
+ const num = (p, k, d) => typeof p[k] === "number" ? p[k] : d;
391
+ const lightBlocks = [];
392
+ for (const l of field.lights) {
393
+ const p = l.params;
394
+ const color = mgHexToVec3(p.color);
395
+ const intensity = num(p, "intensity", 1).toFixed(4);
396
+ switch (l.lightType) {
397
+ case "directional":
398
+ case "sun":
399
+ lightBlocks.push(
400
+ [
401
+ ` { // directional:${esc(l.id, "TypeScript")}`,
402
+ ` let L = normalize(-vec3<f32>(${num(p, "dir_x", 0).toFixed(4)}, ${num(p, "dir_y", -1).toFixed(4)}, ${num(p, "dir_z", 0).toFixed(4)}));`,
403
+ ` let NdotL = max(dot(N, L), 0.0);`,
404
+ ` radiance += albedo * ${color} * ${intensity} * NdotL;`,
405
+ ` }`
406
+ ].join("\n")
407
+ );
408
+ break;
409
+ case "point":
410
+ lightBlocks.push(
411
+ [
412
+ ` { // point:${esc(l.id, "TypeScript")}`,
413
+ ` let d = vec3<f32>(${num(p, "pos_x", 0).toFixed(4)}, ${num(p, "pos_y", 0).toFixed(4)}, ${num(p, "pos_z", 0).toFixed(4)}) - worldPos;`,
414
+ ` let dist = length(d);`,
415
+ ` let L = d / max(dist, 1e-4);`,
416
+ ` let NdotL = max(dot(N, L), 0.0);`,
417
+ ` let atten = 1.0 / (1.0 + (dist * dist) / (${num(p, "range", 10).toFixed(4)} * ${num(p, "range", 10).toFixed(4)}));`,
418
+ ` radiance += albedo * ${color} * ${intensity} * NdotL * atten;`,
419
+ ` }`
420
+ ].join("\n")
421
+ );
422
+ break;
423
+ case "spot":
424
+ lightBlocks.push(
425
+ [
426
+ ` { // spot:${esc(l.id, "TypeScript")}`,
427
+ ` let d = vec3<f32>(${num(p, "pos_x", 0).toFixed(4)}, ${num(p, "pos_y", 5).toFixed(4)}, ${num(p, "pos_z", 0).toFixed(4)}) - worldPos;`,
428
+ ` let dist = length(d);`,
429
+ ` let L = d / max(dist, 1e-4);`,
430
+ ` let spotDir = normalize(vec3<f32>(${num(p, "dir_x", 0).toFixed(4)}, ${num(p, "dir_y", -1).toFixed(4)}, ${num(p, "dir_z", 0).toFixed(4)}));`,
431
+ ` let cone = smoothstep(${Math.cos(num(p, "cone", 30) * Math.PI / 180).toFixed(4)}, 1.0, dot(-L, spotDir));`,
432
+ ` let NdotL = max(dot(N, L), 0.0);`,
433
+ ` let atten = 1.0 / (1.0 + (dist * dist) / (${num(p, "range", 10).toFixed(4)} * ${num(p, "range", 10).toFixed(4)}));`,
434
+ ` radiance += albedo * ${color} * ${intensity} * NdotL * atten * cone;`,
435
+ ` }`
436
+ ].join("\n")
437
+ );
438
+ break;
439
+ case "ambient":
440
+ case "ambient_probe":
441
+ case "sky":
442
+ lightBlocks.push(
443
+ [
444
+ ` { // ambient:${esc(l.id, "TypeScript")}`,
445
+ ` radiance += albedo * ${color} * ${intensity};`,
446
+ ` }`
447
+ ].join("\n")
448
+ );
449
+ break;
450
+ default:
451
+ warnings.push(`unknown light "${l.lightType}" (node "${l.id}") \u2014 skipped`);
452
+ lightBlocks.push(` // unknown light ${esc(l.lightType, "TypeScript")}:${esc(l.id, "TypeScript")}`);
453
+ }
454
+ }
455
+ const giScale = `(${field.intensity.toFixed(4)} * (1.0 + f32(${Math.round(field.bounces)}) * 0.5))`;
456
+ const wgsl = [
457
+ `// Light Field "${esc(field.name, "TypeScript")}" \u2014 generated by HoloScript TSLCompiler`,
458
+ `// ambient: ${esc(field.ambient, "TypeScript")} | bounces: ${field.bounces} | lights: [${field.lights.map((l) => `${esc(l.lightType, "TypeScript")}:${esc(l.id, "TypeScript")}`).join(", ")}]`,
459
+ ...warnings.map((w) => `// WARNING: ${esc(w, "TypeScript")}`),
460
+ "",
461
+ `fn ${fnName}(worldPos: vec3<f32>, N: vec3<f32>, V: vec3<f32>, albedo: vec3<f32>, roughness: f32, metallic: f32) -> vec3<f32> {`,
462
+ " var radiance = vec3<f32>(0.0);",
463
+ " // ambient / GI base \u2014 bounces approximated as an indirect ambient lift",
464
+ ` radiance += albedo * ${mgHexToVec3(field.ambient)} * ${giScale};`,
465
+ ...lightBlocks,
466
+ " return radiance;",
467
+ "}"
468
+ ].join("\n");
469
+ return { fnName, wgsl };
470
+ }
471
+ function compileNavFieldBlock(block) {
472
+ const props = block.properties || {};
473
+ const behaviors = [];
474
+ let agents = 256;
475
+ let maxSpeed = 2;
476
+ for (const [key, raw] of Object.entries(props)) {
477
+ if (key === "agents" && typeof raw === "number") {
478
+ agents = raw;
479
+ continue;
480
+ }
481
+ if ((key === "max_speed" || key === "maxSpeed") && typeof raw === "number") {
482
+ maxSpeed = raw;
483
+ continue;
484
+ }
485
+ if (raw && typeof raw === "object" && !Array.isArray(raw)) {
486
+ const { type, ...params } = raw;
487
+ if (typeof type === "string") behaviors.push({ id: key, behaviorType: type, params });
488
+ }
489
+ }
490
+ return { name: block.name || "unnamed", agents, maxSpeed, behaviors, traits: block.traits || [] };
491
+ }
492
+ function navFieldToWGSL(field) {
493
+ const safe = sanitizeMgIdent(field.name);
494
+ const fnName = `cs_nav_field_${safe}`;
495
+ const ms = field.maxSpeed.toFixed(4);
496
+ const warnings = [];
497
+ const num = (p, k, d) => typeof p[k] === "number" ? p[k] : d;
498
+ const steerLines = [];
499
+ for (const b of field.behaviors) {
500
+ const p = b.params;
501
+ const w = num(p, "weight", 1).toFixed(4);
502
+ const target = `vec3<f32>(${num(p, "target_x", 0).toFixed(4)}, ${num(p, "target_y", 0).toFixed(4)}, ${num(p, "target_z", 0).toFixed(4)})`;
503
+ switch (b.behaviorType) {
504
+ case "seek":
505
+ steerLines.push(
506
+ ` { let desired = normalize(${target} - a.pos + vec3<f32>(1e-4)) * ${ms}; steer += (desired - a.vel) * ${w}; } // seek:${esc(b.id, "TypeScript")}`
507
+ );
508
+ break;
509
+ case "flee":
510
+ steerLines.push(
511
+ ` { let desired = normalize(a.pos - ${target} + vec3<f32>(1e-4)) * ${ms}; steer += (desired - a.vel) * ${w}; } // flee:${esc(b.id, "TypeScript")}`
512
+ );
513
+ break;
514
+ case "flow":
515
+ steerLines.push(
516
+ ` { let desired = normalize(vec3<f32>(${num(p, "dir_x", 1).toFixed(4)}, ${num(p, "dir_y", 0).toFixed(4)}, ${num(p, "dir_z", 0).toFixed(4)}) + vec3<f32>(1e-4)) * ${ms}; steer += (desired - a.vel) * ${w}; } // flow:${esc(b.id, "TypeScript")}`
517
+ );
518
+ break;
519
+ case "arrive":
520
+ steerLines.push(
521
+ [
522
+ ` { // arrive:${esc(b.id, "TypeScript")}`,
523
+ ` let to = ${target} - a.pos;`,
524
+ ` let dist = length(to);`,
525
+ ` let speed = ${ms} * clamp(dist / ${num(p, "slow_radius", 3).toFixed(4)}, 0.0, 1.0);`,
526
+ ` let desired = normalize(to + vec3<f32>(1e-4)) * speed;`,
527
+ ` steer += (desired - a.vel) * ${w};`,
528
+ ` }`
529
+ ].join("\n")
530
+ );
531
+ break;
532
+ default:
533
+ warnings.push(`unknown behavior "${b.behaviorType}" (node "${b.id}") \u2014 skipped`);
534
+ steerLines.push(` // unknown behavior ${esc(b.behaviorType, "TypeScript")}:${esc(b.id, "TypeScript")}`);
535
+ }
536
+ }
537
+ if (steerLines.length === 0) steerLines.push(" // no behaviors declared \u2014 agents coast");
538
+ const wgsl = [
539
+ `// Nav Field "${esc(field.name, "TypeScript")}" \u2014 generated by HoloScript TSLCompiler`,
540
+ `// agents: ${field.agents} | max_speed: ${field.maxSpeed} | behaviors: [${field.behaviors.map((b) => `${esc(b.behaviorType, "TypeScript")}:${esc(b.id, "TypeScript")}`).join(", ")}]`,
541
+ ...warnings.map((w) => `// WARNING: ${esc(w, "TypeScript")}`),
542
+ "",
543
+ `struct NavAgent_${safe} {`,
544
+ " pos: vec3<f32>,",
545
+ " _pad0: f32,",
546
+ " vel: vec3<f32>,",
547
+ " _pad1: f32,",
548
+ "};",
549
+ "",
550
+ `@group(0) @binding(0) var<storage, read> navIn_${safe}: array<NavAgent_${safe}>;`,
551
+ `@group(0) @binding(1) var<storage, read_write> navOut_${safe}: array<NavAgent_${safe}>;`,
552
+ `@group(0) @binding(2) var<uniform> navDt_${safe}: f32;`,
553
+ "",
554
+ "@compute @workgroup_size(64)",
555
+ `fn ${fnName}(@builtin(global_invocation_id) gid: vec3<u32>) {`,
556
+ ` let i = gid.x;`,
557
+ ` if (i >= arrayLength(&navIn_${safe})) { return; }`,
558
+ ` var a = navIn_${safe}[i];`,
559
+ ` let dt = navDt_${safe};`,
560
+ " var steer = vec3<f32>(0.0);",
561
+ ...steerLines,
562
+ " a.vel += steer * dt;",
563
+ ` let sp = length(a.vel);`,
564
+ ` if (sp > ${ms}) { a.vel = a.vel / sp * ${ms}; }`,
565
+ " a.pos += a.vel * dt;",
566
+ ` navOut_${safe}[i] = a;`,
567
+ "}"
568
+ ].join("\n");
569
+ return { fnName, wgsl };
570
+ }
571
+ function compilePhysicsContractBlock(block) {
572
+ const props = block.properties || {};
573
+ const bodies = [];
574
+ const constraints = [];
575
+ const gravity = [0, -9.81, 0];
576
+ let substeps = 1;
577
+ const numOf = (v, d) => typeof v === "number" ? v : d;
578
+ for (const [key, raw] of Object.entries(props)) {
579
+ if (key === "gravity" && Array.isArray(raw)) {
580
+ gravity[0] = numOf(raw[0], gravity[0]);
581
+ gravity[1] = numOf(raw[1], gravity[1]);
582
+ gravity[2] = numOf(raw[2], gravity[2]);
583
+ continue;
584
+ }
585
+ if (key === "gravity_x" && typeof raw === "number") {
586
+ gravity[0] = raw;
587
+ continue;
588
+ }
589
+ if (key === "gravity_y" && typeof raw === "number") {
590
+ gravity[1] = raw;
591
+ continue;
592
+ }
593
+ if (key === "gravity_z" && typeof raw === "number") {
594
+ gravity[2] = raw;
595
+ continue;
596
+ }
597
+ if (key === "substeps" && typeof raw === "number") {
598
+ substeps = Math.max(1, Math.floor(raw));
599
+ continue;
600
+ }
601
+ if (raw && typeof raw === "object" && !Array.isArray(raw)) {
602
+ const sub = raw;
603
+ const kind = sub.kind;
604
+ if (kind === "body") {
605
+ bodies.push({
606
+ id: key,
607
+ mass: numOf(sub.mass, 1),
608
+ shape: typeof sub.shape === "string" ? sub.shape : "box",
609
+ pos: [numOf(sub.pos_x, 0), numOf(sub.pos_y, 0), numOf(sub.pos_z, 0)]
610
+ });
611
+ } else if (kind === "constraint") {
612
+ const { kind: _k, type, body_a, body_b, ...params } = sub;
613
+ constraints.push({
614
+ id: key,
615
+ constraintType: typeof type === "string" ? type : "distance",
616
+ bodyA: typeof body_a === "string" ? body_a : "",
617
+ bodyB: typeof body_b === "string" ? body_b : "",
618
+ params
619
+ });
620
+ }
621
+ }
622
+ }
623
+ return { name: block.name || "unnamed", gravity, substeps, bodies, constraints, traits: block.traits || [] };
624
+ }
625
+ function physicsContractToWGSL(field) {
626
+ const safe = sanitizeMgIdent(field.name);
627
+ const fnName = `cs_physics_contract_${safe}`;
628
+ const warnings = [];
629
+ const idx = new Map(field.bodies.map((b, i) => [b.id, i]));
630
+ const num = (p, k, d) => typeof p[k] === "number" ? p[k] : d;
631
+ const g = `vec3<f32>(${field.gravity[0].toFixed(4)}, ${field.gravity[1].toFixed(4)}, ${field.gravity[2].toFixed(4)})`;
632
+ const substeps = Math.max(1, field.substeps);
633
+ const constraintLines = [];
634
+ for (const c of field.constraints) {
635
+ const aIdx = idx.get(c.bodyA);
636
+ const bIdx = idx.get(c.bodyB);
637
+ if (aIdx === void 0 || bIdx === void 0) {
638
+ warnings.push(`constraint "${c.id}" (${c.constraintType}) references unknown body \u2014 skipped`);
639
+ constraintLines.push(` // ${esc(c.constraintType, "TypeScript")}:${esc(c.id, "TypeScript")} \u2014 unresolved body ref, skipped`);
640
+ continue;
641
+ }
642
+ const a = `${aIdx}u`;
643
+ const b = `${bIdx}u`;
644
+ const p = c.params;
645
+ if (c.constraintType === "distance" || c.constraintType === "hinge") {
646
+ const rest = (c.constraintType === "hinge" ? num(p, "rest", 0) : num(p, "rest", 1)).toFixed(4);
647
+ const stiff = num(p, "stiffness", 1).toFixed(4);
648
+ const axisNote = c.constraintType === "hinge" ? ` axis (${num(p, "axis_x", 0).toFixed(2)},${num(p, "axis_y", 1).toFixed(2)},${num(p, "axis_z", 0).toFixed(2)}) \u2014 angular limit deferred` : "";
649
+ constraintLines.push(
650
+ [
651
+ ` // ${c.constraintType}:${esc(c.id, "TypeScript")}${axisNote}`,
652
+ ` if (i == ${a}) { let o = physIn_${safe}[${b}]; let d = p.pos - o.pos; let dist = length(d) + 1e-6; let n = d / dist; let C = dist - ${rest}; let w = p.invMass + o.invMass + 1e-6; p.pos -= n * (C * (p.invMass / w) * ${stiff}); }`,
653
+ ` if (i == ${b}) { let o = physIn_${safe}[${a}]; let d = p.pos - o.pos; let dist = length(d) + 1e-6; let n = d / dist; let C = dist - ${rest}; let w = p.invMass + o.invMass + 1e-6; p.pos -= n * (C * (p.invMass / w) * ${stiff}); }`
654
+ ].join("\n")
655
+ );
656
+ } else if (c.constraintType === "fixed") {
657
+ const off = `vec3<f32>(${num(p, "rest_x", 0).toFixed(4)}, ${num(p, "rest_y", 0).toFixed(4)}, ${num(p, "rest_z", 0).toFixed(4)})`;
658
+ constraintLines.push(
659
+ [
660
+ ` // fixed:${esc(c.id, "TypeScript")} \u2014 3-DoF weld (rotational lock deferred)`,
661
+ ` if (i == ${a}) { let o = physIn_${safe}[${b}]; let e = (o.pos - p.pos) - ${off}; let w = p.invMass + o.invMass + 1e-6; p.pos += e * (p.invMass / w); }`,
662
+ ` if (i == ${b}) { let o = physIn_${safe}[${a}]; let e = (p.pos - o.pos) - ${off}; let w = p.invMass + o.invMass + 1e-6; p.pos -= e * (p.invMass / w); }`
663
+ ].join("\n")
664
+ );
665
+ } else {
666
+ warnings.push(`unknown constraint "${c.constraintType}" (node "${c.id}") \u2014 skipped`);
667
+ constraintLines.push(` // unknown constraint ${esc(c.constraintType, "TypeScript")}:${esc(c.id, "TypeScript")} \u2014 skipped`);
668
+ }
669
+ }
670
+ if (constraintLines.length === 0) constraintLines.push(" // no constraints declared \u2014 free integration only");
671
+ const wgsl = [
672
+ `// Physics Contract "${esc(field.name, "TypeScript")}" \u2014 generated by HoloScript TSLCompiler`,
673
+ `// bodies: ${field.bodies.length} | constraints: ${field.constraints.length} | gravity: [${field.gravity.join(", ")}] | substeps: ${substeps}`,
674
+ `// Upload: physIn[i] = { pos, invMass (= mass>0 ? 1/mass : 0), vel, _pad } from the authored body stack.`,
675
+ ...warnings.map((w) => `// WARNING: ${esc(w, "TypeScript")}`),
676
+ "",
677
+ `struct PhysBody_${safe} {`,
678
+ " pos: vec3<f32>,",
679
+ " invMass: f32,",
680
+ " vel: vec3<f32>,",
681
+ " _pad: f32,",
682
+ "};",
683
+ "",
684
+ `@group(0) @binding(0) var<storage, read> physIn_${safe}: array<PhysBody_${safe}>;`,
685
+ `@group(0) @binding(1) var<storage, read_write> physOut_${safe}: array<PhysBody_${safe}>;`,
686
+ `@group(0) @binding(2) var<uniform> physDt_${safe}: f32;`,
687
+ "",
688
+ "@compute @workgroup_size(64)",
689
+ `fn ${fnName}(@builtin(global_invocation_id) gid: vec3<u32>) {`,
690
+ ` let i = gid.x;`,
691
+ ` if (i >= arrayLength(&physIn_${safe})) { return; }`,
692
+ ` var p = physIn_${safe}[i];`,
693
+ ` let subDt = physDt_${safe} / ${substeps}.0;`,
694
+ ` for (var s = 0u; s < ${substeps}u; s = s + 1u) {`,
695
+ " if (p.invMass > 0.0) {",
696
+ ` p.vel += ${g} * subDt;`,
697
+ " p.pos += p.vel * subDt;",
698
+ " }",
699
+ ...constraintLines,
700
+ " }",
701
+ ` physOut_${safe}[i] = p;`,
702
+ "}"
703
+ ].join("\n");
704
+ return { fnName, wgsl };
705
+ }
49
706
  function compilePhysicsBlock(block) {
50
707
  const colliders = [];
51
708
  const forceFields = [];
@@ -2727,6 +3384,102 @@ function iotToUSDA(iot) {
2727
3384
  lines.push("}");
2728
3385
  return lines.join("\n");
2729
3386
  }
3387
+ function stringProperty(props, keys) {
3388
+ for (const key of keys) {
3389
+ const value = props[key];
3390
+ if (typeof value === "string" && value.trim()) return value.trim();
3391
+ }
3392
+ return void 0;
3393
+ }
3394
+ function numberProperty(props, keys) {
3395
+ for (const key of keys) {
3396
+ const value = props[key];
3397
+ if (typeof value === "number" && Number.isFinite(value)) return value;
3398
+ }
3399
+ return void 0;
3400
+ }
3401
+ function booleanProperty(props, keys) {
3402
+ for (const key of keys) {
3403
+ const value = props[key];
3404
+ if (typeof value === "boolean") return value;
3405
+ }
3406
+ return void 0;
3407
+ }
3408
+ function stringArrayProperty(props, keys) {
3409
+ for (const key of keys) {
3410
+ const value = props[key];
3411
+ if (Array.isArray(value) && value.every((entry) => typeof entry === "string")) {
3412
+ return [...value];
3413
+ }
3414
+ }
3415
+ return void 0;
3416
+ }
3417
+ function gradientStopsProperty(props, keys) {
3418
+ for (const key of keys) {
3419
+ const value = props[key];
3420
+ if (!Array.isArray(value)) continue;
3421
+ const stops = [];
3422
+ for (const entry of value) {
3423
+ if (entry && typeof entry === "object" && typeof entry.t === "number" && typeof entry.color === "string") {
3424
+ const stop = entry;
3425
+ stops.push({ t: stop.t, color: stop.color });
3426
+ }
3427
+ }
3428
+ if (stops.length > 0) return stops;
3429
+ }
3430
+ return void 0;
3431
+ }
3432
+ function sampledStopsFromColors(colors) {
3433
+ if (colors.length === 0) return [];
3434
+ if (colors.length === 1) return [{ t: 0, color: colors[0] }];
3435
+ return colors.map((color, index) => ({
3436
+ t: index / (colors.length - 1),
3437
+ color
3438
+ }));
3439
+ }
3440
+ function buildPerceptualColorMetadata(props, traits, fallbackColorMap = "viridis") {
3441
+ const colorMap = stringProperty(props, ["color_map", "colormap", "colorMap"]);
3442
+ const palette = stringArrayProperty(props, ["palette", "colors"]);
3443
+ const gradient = gradientStopsProperty(props, ["gradient", "color_gradient", "colorGradient"]) ?? stringArrayProperty(props, ["gradient", "color_gradient", "colorGradient"]);
3444
+ const enabled = traits.includes("perceptual_color") || booleanProperty(props, ["perceptual_color", "perceptualColor", "scientific"]) === true || colorMap !== void 0 || palette !== void 0 || gradient !== void 0;
3445
+ if (!enabled) return void 0;
3446
+ const input = {
3447
+ colorMap: colorMap ?? (palette || gradient ? void 0 : fallbackColorMap),
3448
+ palette,
3449
+ gradient,
3450
+ steps: numberProperty(props, ["steps", "color_steps", "colorSteps"]),
3451
+ dampening: numberProperty(props, ["dampening", "perceptual_dampening", "perceptualDampening"]),
3452
+ targetDeltaE: numberProperty(props, ["target_delta_e", "targetDeltaE"]),
3453
+ neutralAxis: booleanProperty(props, ["neutral_axis", "neutralAxis"]),
3454
+ scientific: true
3455
+ };
3456
+ const pass = chunkVHORVGCG_cjs.applyPerceptualColorPass(input);
3457
+ const source = pass.colorMap ?? pass.gradient ?? pass.palette;
3458
+ const colors = source?.colors ?? [];
3459
+ const stops = pass.colorMap?.stops ?? pass.gradient?.stops ?? sampledStopsFromColors(colors);
3460
+ return {
3461
+ mapName: pass.colorMap?.name ?? colorMap ?? (palette ? "palette" : gradient ? "gradient" : fallbackColorMap),
3462
+ colors,
3463
+ stops,
3464
+ minDeltaE: source?.minDeltaE ?? 0,
3465
+ maxDeltaE: source?.maxDeltaE ?? 0,
3466
+ meanDeltaE: source?.meanDeltaE ?? 0,
3467
+ warnings: pass.warnings,
3468
+ pass
3469
+ };
3470
+ }
3471
+ function perceptualColorRampFloat32(metadata) {
3472
+ return metadata.colors.map((color) => {
3473
+ const [r, g, b] = hexToRGBTuple(color);
3474
+ return `${r}, ${g}, ${b}, 1.0`;
3475
+ }).join(", ");
3476
+ }
3477
+ function perceptualColorRampLinearColors(metadata) {
3478
+ return metadata.colors.map((color) => {
3479
+ const [r, g, b] = hexToRGBTuple(color);
3480
+ return `FLinearColor(${r}f, ${g}f, ${b}f, 1.0f)`;
3481
+ }).join(", ");
3482
+ }
2730
3483
  function compileDataVizBlock(block) {
2731
3484
  const props = block.properties || {};
2732
3485
  let axes;
@@ -2740,6 +3493,9 @@ function compileDataVizBlock(block) {
2740
3493
  if (props.width != null || props.height != null) {
2741
3494
  dimensions = { width: props.width ?? 400, height: props.height ?? 300 };
2742
3495
  }
3496
+ const traits = block.traits || [];
3497
+ const colorMap = stringProperty(props, ["color_map", "colormap", "colorMap"]);
3498
+ const perceptualColorPass = buildPerceptualColorMetadata(props, traits, colorMap ?? "viridis");
2743
3499
  return {
2744
3500
  name: block.name || "unnamed",
2745
3501
  keyword: block.keyword,
@@ -2749,11 +3505,14 @@ function compileDataVizBlock(block) {
2749
3505
  aggregation: props.aggregation,
2750
3506
  refreshInterval: props.refresh_interval,
2751
3507
  dimensions,
2752
- traits: block.traits || [],
3508
+ colorMap: colorMap ?? perceptualColorPass?.mapName,
3509
+ perceptualColorPass,
3510
+ traits,
2753
3511
  properties: props
2754
3512
  };
2755
3513
  }
2756
3514
  function datavizToR3F(dv) {
3515
+ const perceptual = dv.perceptualColorPass;
2757
3516
  const safeName = dv.name.replace(/[^a-zA-Z0-9_]/g, "_");
2758
3517
  const lines = [];
2759
3518
  lines.push(`// DataViz: ${dv.name} (${dv.keyword})`);
@@ -2767,10 +3526,15 @@ function datavizToR3F(dv) {
2767
3526
  if (dv.refreshInterval) lines.push(` refreshInterval: ${dv.refreshInterval},`);
2768
3527
  if (dv.dimensions)
2769
3528
  lines.push(` dimensions: { width: ${dv.dimensions.width}, height: ${dv.dimensions.height} },`);
3529
+ if (dv.colorMap)
3530
+ lines.push(` colorMap: ${JSON.stringify(dv.colorMap)},`);
3531
+ if (perceptual)
3532
+ lines.push(` perceptualColorPass: ${JSON.stringify(perceptual)},`);
2770
3533
  lines.push("};");
2771
3534
  return lines.join("\n");
2772
3535
  }
2773
3536
  function datavizToUnity(dv) {
3537
+ const perceptual = dv.perceptualColorPass;
2774
3538
  const safeName = dv.name.replace(/[^a-zA-Z0-9_]/g, "_");
2775
3539
  const lines = [];
2776
3540
  lines.push(`// DataViz: ${dv.name}`);
@@ -2784,9 +3548,58 @@ function datavizToUnity(dv) {
2784
3548
  lines.push(` public float width = ${dv.dimensions.width}f;`);
2785
3549
  lines.push(` public float height = ${dv.dimensions.height}f;`);
2786
3550
  }
3551
+ if (dv.colorMap)
3552
+ lines.push(` public string colorMap = "${esc(dv.colorMap, "CSharp")}";`);
3553
+ if (perceptual) {
3554
+ lines.push(
3555
+ ` public string[] perceptualColorRamp = new string[] { ${perceptual.colors.map((color) => `"${color}"`).join(", ")} };`
3556
+ );
3557
+ lines.push(` public float perceptualMinDeltaE = ${perceptual.minDeltaE.toFixed(3)}f;`);
3558
+ lines.push(` public float perceptualMeanDeltaE = ${perceptual.meanDeltaE.toFixed(3)}f;`);
3559
+ }
2787
3560
  lines.push("}");
2788
3561
  return lines.join("\n");
2789
3562
  }
3563
+ function datavizToUnreal(dv, varPrefix) {
3564
+ const perceptual = dv.perceptualColorPass;
3565
+ const lines = [];
3566
+ lines.push(`// DataViz: ${dv.name}`);
3567
+ lines.push(`FString ${varPrefix}DataVizType = TEXT("${esc(dv.keyword, "CSharp")}");`);
3568
+ if (dv.chartType) lines.push(`FString ${varPrefix}ChartType = TEXT("${esc(dv.chartType, "CSharp")}");`);
3569
+ if (dv.dataSource) lines.push(`FString ${varPrefix}DataSource = TEXT("${esc(dv.dataSource, "CSharp")}");`);
3570
+ if (perceptual) {
3571
+ lines.push(`// PerceptualColorPass: ${perceptual.mapName}, ${perceptual.colors.length} stops`);
3572
+ lines.push(`TArray<FLinearColor> ${varPrefix}PerceptualColorRamp = { ${perceptualColorRampLinearColors(perceptual)} };`);
3573
+ lines.push(`float ${varPrefix}PerceptualMinDeltaE = ${perceptual.minDeltaE.toFixed(3)}f;`);
3574
+ }
3575
+ return lines.join("\n");
3576
+ }
3577
+ function datavizToWebGPU(dv, varPrefix) {
3578
+ const perceptual = dv.perceptualColorPass;
3579
+ const lines = [];
3580
+ lines.push(`// DataViz: ${dv.name}`);
3581
+ lines.push(`const ${varPrefix}DataVizConfig = ${JSON.stringify({
3582
+ name: dv.name,
3583
+ type: dv.keyword,
3584
+ chartType: dv.chartType,
3585
+ dataSource: dv.dataSource,
3586
+ axes: dv.axes,
3587
+ aggregation: dv.aggregation,
3588
+ refreshInterval: dv.refreshInterval,
3589
+ dimensions: dv.dimensions,
3590
+ colorMap: dv.colorMap
3591
+ })};`);
3592
+ if (perceptual) {
3593
+ lines.push(`const ${varPrefix}PerceptualColorRamp = new Float32Array([${perceptualColorRampFloat32(perceptual)}]);`);
3594
+ lines.push(`const ${varPrefix}PerceptualColorStats = ${JSON.stringify({
3595
+ minDeltaE: perceptual.minDeltaE,
3596
+ maxDeltaE: perceptual.maxDeltaE,
3597
+ meanDeltaE: perceptual.meanDeltaE,
3598
+ warnings: perceptual.warnings
3599
+ })};`);
3600
+ }
3601
+ return lines.join("\n");
3602
+ }
2790
3603
  function datavizToGodot(dv) {
2791
3604
  const lines = [];
2792
3605
  lines.push(`# DataViz: ${dv.name}`);
@@ -3734,13 +4547,19 @@ function compileSimulationBlock(block) {
3734
4547
  const c = child;
3735
4548
  if (c.traits?.includes("scalar_field_overlay") || c.keyword === "scalar_field_overlay") {
3736
4549
  const p = c.properties || {};
4550
+ const colormap = p.colormap ?? "turbo";
3737
4551
  overlays.push({
3738
4552
  source: p.source ?? "",
3739
- colormap: p.colormap ?? "turbo",
4553
+ colormap,
3740
4554
  range: p.range ?? [0, 1],
3741
4555
  opacity: p.opacity ?? 0.7,
3742
4556
  visible: p.visible ?? true,
3743
- label: p.label ?? ""
4557
+ label: p.label ?? "",
4558
+ perceptualColorPass: buildPerceptualColorMetadata(
4559
+ { ...p, colormap },
4560
+ c.traits || [],
4561
+ colormap
4562
+ )
3744
4563
  });
3745
4564
  }
3746
4565
  }
@@ -3776,9 +4595,16 @@ function simulationEnvironmentToR3FChunks(env) {
3776
4595
  function simulationToR3F(sim) {
3777
4596
  const configExpr = JSON.stringify(sim.config);
3778
4597
  const { visualLines, userDataExpr } = simulationEnvironmentToR3FChunks(sim.environment);
3779
- const overlayJSX = sim.overlays.map(
3780
- (o) => `<ScalarFieldOverlay colormap="${o.colormap}" range={[${o.range.join(", ")}]} opacity={${o.opacity}} visible={${o.visible}} label="${o.label}" />`
3781
- ).join("\n ");
4598
+ const overlayJSX = sim.overlays.map((o) => {
4599
+ const perceptualComment = o.perceptualColorPass ? `{/* PerceptualColorPass ${JSON.stringify({
4600
+ mapName: o.perceptualColorPass.mapName,
4601
+ colors: o.perceptualColorPass.colors,
4602
+ minDeltaE: o.perceptualColorPass.minDeltaE,
4603
+ meanDeltaE: o.perceptualColorPass.meanDeltaE
4604
+ })} */}
4605
+ ` : "";
4606
+ return `${perceptualComment}<ScalarFieldOverlay colormap="${o.colormap}" range={[${o.range.join(", ")}]} opacity={${o.opacity}} visible={${o.visible}} label="${o.label}" />`;
4607
+ }).join("\n ");
3782
4608
  const envVisual = visualLines.length > 0 ? `${visualLines.join("\n ")}
3783
4609
  ` : "";
3784
4610
  const wrapWithGroup = (body) => userDataExpr ? `<group userData={${userDataExpr}}>
@@ -3821,13 +4647,14 @@ function hexToRGBA(hex, alpha) {
3821
4647
  ];
3822
4648
  }
3823
4649
  function getRequiredCapability() {
3824
- return chunkLODTHGST_cjs.ANSCapabilityPath.DOMAIN_BLOCK;
4650
+ return chunkZK7KX5CD_cjs.ANSCapabilityPath.DOMAIN_BLOCK;
3825
4651
  }
3826
- var PHYSICAL_MATERIAL_KEYS; exports.DOMAIN_BLOCK_COMPILER_MIXIN_CAPABILITY = void 0;
3827
- var init_DomainBlockCompilerMixin = chunkHCCQLAA4_cjs.__esm({
4652
+ var PHYSICAL_MATERIAL_KEYS, mgToVec3, mgToF32; exports.DOMAIN_BLOCK_COMPILER_MIXIN_CAPABILITY = void 0;
4653
+ var init_DomainBlockCompilerMixin = chunkZHPMP447_cjs.__esm({
3828
4654
  "src/compiler/DomainBlockCompilerMixin.ts"() {
3829
- chunkLODTHGST_cjs.init_CompilerBase();
3830
- chunkLODTHGST_cjs.init_ANSNamespace();
4655
+ chunkZK7KX5CD_cjs.init_CompilerBase();
4656
+ chunkZK7KX5CD_cjs.init_ANSNamespace();
4657
+ chunkVHORVGCG_cjs.init_PerceptualColorPass();
3831
4658
  PHYSICAL_MATERIAL_KEYS = [
3832
4659
  "clearcoat",
3833
4660
  "clearcoatRoughness",
@@ -3841,6 +4668,8 @@ var init_DomainBlockCompilerMixin = chunkHCCQLAA4_cjs.__esm({
3841
4668
  "attenuationColor",
3842
4669
  "attenuationDistance"
3843
4670
  ];
4671
+ mgToVec3 = (v) => !v ? "vec3<f32>(0.0)" : v.type === "vec3" ? v.ref : `vec3<f32>(${v.ref})`;
4672
+ mgToF32 = (v, fallback = "0.0") => !v ? fallback : v.type === "f32" ? v.ref : `(${v.ref}).x`;
3844
4673
  exports.DOMAIN_BLOCK_COMPILER_MIXIN_CAPABILITY = "/compile/mixin/domain-block";
3845
4674
  }
3846
4675
  });
@@ -3867,13 +4696,18 @@ exports.compileEducationBlock = compileEducationBlock;
3867
4696
  exports.compileHealthcareBlock = compileHealthcareBlock;
3868
4697
  exports.compileInputBlock = compileInputBlock;
3869
4698
  exports.compileIoTBlock = compileIoTBlock;
4699
+ exports.compileLightFieldBlock = compileLightFieldBlock;
3870
4700
  exports.compileMaterialBlock = compileMaterialBlock;
4701
+ exports.compileMaterialGraphBlock = compileMaterialGraphBlock;
3871
4702
  exports.compileMusicBlock = compileMusicBlock;
3872
4703
  exports.compileNarrativeBlock = compileNarrativeBlock;
4704
+ exports.compileNavFieldBlock = compileNavFieldBlock;
3873
4705
  exports.compileNavigationBlock = compileNavigationBlock;
3874
4706
  exports.compileParticleBlock = compileParticleBlock;
4707
+ exports.compileParticleFieldBlock = compileParticleFieldBlock;
3875
4708
  exports.compilePaymentBlock = compilePaymentBlock;
3876
4709
  exports.compilePhysicsBlock = compilePhysicsBlock;
4710
+ exports.compilePhysicsContractBlock = compilePhysicsContractBlock;
3877
4711
  exports.compilePostProcessingBlock = compilePostProcessingBlock;
3878
4712
  exports.compileProceduralBlock = compileProceduralBlock;
3879
4713
  exports.compileRenderingBlock = compileRenderingBlock;
@@ -3885,7 +4719,9 @@ exports.datavizToGodot = datavizToGodot;
3885
4719
  exports.datavizToR3F = datavizToR3F;
3886
4720
  exports.datavizToUSDA = datavizToUSDA;
3887
4721
  exports.datavizToUnity = datavizToUnity;
4722
+ exports.datavizToUnreal = datavizToUnreal;
3888
4723
  exports.datavizToVRChat = datavizToVRChat;
4724
+ exports.datavizToWebGPU = datavizToWebGPU;
3889
4725
  exports.educationToGodot = educationToGodot;
3890
4726
  exports.educationToR3F = educationToR3F;
3891
4727
  exports.educationToUSDA = educationToUSDA;
@@ -3909,6 +4745,8 @@ exports.iotToUSDA = iotToUSDA;
3909
4745
  exports.iotToUnity = iotToUnity;
3910
4746
  exports.iotToVRChat = iotToVRChat;
3911
4747
  exports.isPhysicalMaterial = isPhysicalMaterial;
4748
+ exports.lightFieldToWGSL = lightFieldToWGSL;
4749
+ exports.materialGraphToWGSL = materialGraphToWGSL;
3912
4750
  exports.materialToAndroidXR = materialToAndroidXR;
3913
4751
  exports.materialToBabylon = materialToBabylon;
3914
4752
  exports.materialToGLTF = materialToGLTF;
@@ -3932,11 +4770,13 @@ exports.narrativeToR3F = narrativeToR3F;
3932
4770
  exports.narrativeToUSDA = narrativeToUSDA;
3933
4771
  exports.narrativeToUnity = narrativeToUnity;
3934
4772
  exports.narrativeToVRChat = narrativeToVRChat;
4773
+ exports.navFieldToWGSL = navFieldToWGSL;
3935
4774
  exports.navigationToGodot = navigationToGodot;
3936
4775
  exports.navigationToR3F = navigationToR3F;
3937
4776
  exports.navigationToUSDA = navigationToUSDA;
3938
4777
  exports.navigationToUnity = navigationToUnity;
3939
4778
  exports.navigationToVRChat = navigationToVRChat;
4779
+ exports.particleFieldToWGSL = particleFieldToWGSL;
3940
4780
  exports.particlesToAndroidXR = particlesToAndroidXR;
3941
4781
  exports.particlesToBabylon = particlesToBabylon;
3942
4782
  exports.particlesToGodot = particlesToGodot;
@@ -3951,6 +4791,7 @@ exports.paymentToR3F = paymentToR3F;
3951
4791
  exports.paymentToUSDA = paymentToUSDA;
3952
4792
  exports.paymentToUnity = paymentToUnity;
3953
4793
  exports.paymentToVRChat = paymentToVRChat;
4794
+ exports.physicsContractToWGSL = physicsContractToWGSL;
3954
4795
  exports.physicsToAndroidXR = physicsToAndroidXR;
3955
4796
  exports.physicsToBabylon = physicsToBabylon;
3956
4797
  exports.physicsToGodot = physicsToGodot;
@@ -3994,5 +4835,5 @@ exports.web3ToR3F = web3ToR3F;
3994
4835
  exports.web3ToUSDA = web3ToUSDA;
3995
4836
  exports.web3ToUnity = web3ToUnity;
3996
4837
  exports.web3ToVRChat = web3ToVRChat;
3997
- //# sourceMappingURL=chunk-GH6C2QGW.cjs.map
3998
- //# sourceMappingURL=chunk-GH6C2QGW.cjs.map
4838
+ //# sourceMappingURL=chunk-QEDMOGF3.cjs.map
4839
+ //# sourceMappingURL=chunk-QEDMOGF3.cjs.map