@selvajs/selva 4.7.0-beta.3 → 4.7.0-beta.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 (380) hide show
  1. package/build/client/_app/immutable/chunks/{CP-uwdvv.js → 7KmSQDNg.js} +1 -1
  2. package/build/client/_app/immutable/chunks/7KmSQDNg.js.br +0 -0
  3. package/build/client/_app/immutable/chunks/7KmSQDNg.js.gz +0 -0
  4. package/build/client/_app/immutable/chunks/{98yDWdDP2.js → BEq7tnZv2.js} +1 -1
  5. package/build/client/_app/immutable/chunks/BEq7tnZv2.js.br +0 -0
  6. package/build/client/_app/immutable/chunks/BEq7tnZv2.js.gz +0 -0
  7. package/build/client/_app/immutable/chunks/BPtz4qQZ2.js +1 -0
  8. package/build/client/_app/immutable/chunks/BPtz4qQZ2.js.br +0 -0
  9. package/build/client/_app/immutable/chunks/BPtz4qQZ2.js.gz +0 -0
  10. package/build/client/_app/immutable/chunks/{DjxaiTC2.js → BYGjvVR1.js} +1 -1
  11. package/build/client/_app/immutable/chunks/BYGjvVR1.js.br +0 -0
  12. package/build/client/_app/immutable/chunks/BYGjvVR1.js.gz +0 -0
  13. package/build/client/_app/immutable/chunks/{mHHlwTIC.js → CF05CSCN.js} +1 -1
  14. package/build/client/_app/immutable/chunks/CF05CSCN.js.br +0 -0
  15. package/build/client/_app/immutable/chunks/CF05CSCN.js.gz +0 -0
  16. package/build/client/_app/immutable/chunks/CVdpVA5-2.js +1 -0
  17. package/build/client/_app/immutable/chunks/CVdpVA5-2.js.br +2 -0
  18. package/build/client/_app/immutable/chunks/CVdpVA5-2.js.gz +0 -0
  19. package/build/client/_app/immutable/chunks/DIVddIqF.js +2 -0
  20. package/build/client/_app/immutable/chunks/DIVddIqF.js.br +0 -0
  21. package/build/client/_app/immutable/chunks/DIVddIqF.js.gz +0 -0
  22. package/build/client/_app/immutable/chunks/DXTlR_fj.js +5462 -0
  23. package/build/client/_app/immutable/chunks/DXTlR_fj.js.br +0 -0
  24. package/build/client/_app/immutable/chunks/DXTlR_fj.js.gz +0 -0
  25. package/build/client/_app/immutable/chunks/{C0dvFiQZ2.js → Dylhiw0P2.js} +1 -1
  26. package/build/client/_app/immutable/chunks/Dylhiw0P2.js.br +0 -0
  27. package/build/client/_app/immutable/chunks/Dylhiw0P2.js.gz +0 -0
  28. package/build/client/_app/immutable/chunks/{5jv0Mvxq.js → blphzly5.js} +1 -1
  29. package/build/client/_app/immutable/chunks/blphzly5.js.br +2 -0
  30. package/build/client/_app/immutable/chunks/blphzly5.js.gz +0 -0
  31. package/build/client/_app/immutable/entry/{app.nA6FWjJw.js → app.DVv5Cs5X.js} +2 -2
  32. package/build/client/_app/immutable/entry/app.DVv5Cs5X.js.br +0 -0
  33. package/build/client/_app/immutable/entry/app.DVv5Cs5X.js.gz +0 -0
  34. package/build/client/_app/immutable/entry/start.44XxKImR.js +1 -0
  35. package/build/client/_app/immutable/entry/start.44XxKImR.js.br +1 -0
  36. package/build/client/_app/immutable/entry/start.44XxKImR.js.gz +0 -0
  37. package/build/client/_app/immutable/nodes/{1.Be6vSNB-.js → 1.DEfTriL7.js} +1 -1
  38. package/build/client/_app/immutable/nodes/1.DEfTriL7.js.br +0 -0
  39. package/build/client/_app/immutable/nodes/1.DEfTriL7.js.gz +0 -0
  40. package/build/client/_app/immutable/nodes/{11.C0Q9fRO2.js → 11.BcXDrSue.js} +1 -1
  41. package/build/client/_app/immutable/nodes/11.BcXDrSue.js.br +0 -0
  42. package/build/client/_app/immutable/nodes/11.BcXDrSue.js.gz +0 -0
  43. package/build/client/_app/immutable/nodes/{13.CedLh4LC.js → 13.otRhkMKy.js} +1 -1
  44. package/build/client/_app/immutable/nodes/13.otRhkMKy.js.br +0 -0
  45. package/build/client/_app/immutable/nodes/13.otRhkMKy.js.gz +0 -0
  46. package/build/client/_app/immutable/nodes/{14.kH0zVFuq.js → 14.C0FzqRRX.js} +1 -1
  47. package/build/client/_app/immutable/nodes/14.C0FzqRRX.js.br +0 -0
  48. package/build/client/_app/immutable/nodes/14.C0FzqRRX.js.gz +0 -0
  49. package/build/client/_app/immutable/nodes/{15.CrGWXR_b.js → 15.rIiFqYaN.js} +1 -1
  50. package/build/client/_app/immutable/nodes/15.rIiFqYaN.js.br +0 -0
  51. package/build/client/_app/immutable/nodes/15.rIiFqYaN.js.gz +0 -0
  52. package/build/client/_app/immutable/nodes/{16.BpzwC_7R.js → 16.C7jD28xO.js} +1 -1
  53. package/build/client/_app/immutable/nodes/16.C7jD28xO.js.br +0 -0
  54. package/build/client/_app/immutable/nodes/16.C7jD28xO.js.gz +0 -0
  55. package/build/client/_app/immutable/nodes/{17.BAd6cLcK.js → 17.BWcO6PBP.js} +1 -1
  56. package/build/client/_app/immutable/nodes/17.BWcO6PBP.js.br +0 -0
  57. package/build/client/_app/immutable/nodes/17.BWcO6PBP.js.gz +0 -0
  58. package/build/client/_app/immutable/nodes/{19.C2M0Gsw8.js → 19.Ce2gGmlG.js} +1 -1
  59. package/build/client/_app/immutable/nodes/19.Ce2gGmlG.js.br +0 -0
  60. package/build/client/_app/immutable/nodes/19.Ce2gGmlG.js.gz +0 -0
  61. package/build/client/_app/immutable/nodes/{2.DCOz2pgm.js → 2.CY20qKG8.js} +1 -1
  62. package/build/client/_app/immutable/nodes/2.CY20qKG8.js.br +0 -0
  63. package/build/client/_app/immutable/nodes/2.CY20qKG8.js.gz +0 -0
  64. package/build/client/_app/immutable/nodes/20.C9y4Pq5e.js +12 -0
  65. package/build/client/_app/immutable/nodes/20.C9y4Pq5e.js.br +0 -0
  66. package/build/client/_app/immutable/nodes/20.C9y4Pq5e.js.gz +0 -0
  67. package/build/client/_app/immutable/nodes/{21.BYQk6N76.js → 21.BaNiUOuW.js} +1 -1
  68. package/build/client/_app/immutable/nodes/21.BaNiUOuW.js.br +0 -0
  69. package/build/client/_app/immutable/nodes/21.BaNiUOuW.js.gz +0 -0
  70. package/build/client/_app/immutable/nodes/{23.awLvoHTA.js → 23.Cs1CpKOT.js} +1 -1
  71. package/build/client/_app/immutable/nodes/23.Cs1CpKOT.js.br +0 -0
  72. package/build/client/_app/immutable/nodes/23.Cs1CpKOT.js.gz +0 -0
  73. package/build/client/_app/immutable/nodes/{24.C4Mj39LU.js → 24.BDPW7D3H.js} +1 -1
  74. package/build/client/_app/immutable/nodes/24.BDPW7D3H.js.br +0 -0
  75. package/build/client/_app/immutable/nodes/24.BDPW7D3H.js.gz +0 -0
  76. package/build/client/_app/immutable/nodes/{27.wW5vDHDP.js → 27.xwzED8a8.js} +1 -1
  77. package/build/client/_app/immutable/nodes/27.xwzED8a8.js.br +0 -0
  78. package/build/client/_app/immutable/nodes/27.xwzED8a8.js.gz +0 -0
  79. package/build/client/_app/immutable/nodes/{28.B5qVpudr.js → 28.3i_My3fJ.js} +1 -1
  80. package/build/client/_app/immutable/nodes/28.3i_My3fJ.js.br +0 -0
  81. package/build/client/_app/immutable/nodes/28.3i_My3fJ.js.gz +0 -0
  82. package/build/client/_app/immutable/nodes/{29.Cd65rWw6.js → 29.CEcPe16D.js} +1 -1
  83. package/build/client/_app/immutable/nodes/29.CEcPe16D.js.br +0 -0
  84. package/build/client/_app/immutable/nodes/29.CEcPe16D.js.gz +0 -0
  85. package/build/client/_app/immutable/nodes/{3.BtG32r4S.js → 3.DIECCgcY.js} +1 -1
  86. package/build/client/_app/immutable/nodes/3.DIECCgcY.js.br +0 -0
  87. package/build/client/_app/immutable/nodes/3.DIECCgcY.js.gz +0 -0
  88. package/build/client/_app/immutable/nodes/{30.DSQJo5j4.js → 30.BRsGl_6g.js} +1 -1
  89. package/build/client/_app/immutable/nodes/30.BRsGl_6g.js.br +0 -0
  90. package/build/client/_app/immutable/nodes/30.BRsGl_6g.js.gz +0 -0
  91. package/build/client/_app/immutable/nodes/{5.CFazNCMc.js → 5.2RlfC8B_.js} +1 -1
  92. package/build/client/_app/immutable/nodes/5.2RlfC8B_.js.br +0 -0
  93. package/build/client/_app/immutable/nodes/5.2RlfC8B_.js.gz +0 -0
  94. package/build/client/_app/immutable/nodes/{6.Ds4bdzGT.js → 6.C6BKkT5y.js} +1 -1
  95. package/build/client/_app/immutable/nodes/6.C6BKkT5y.js.br +0 -0
  96. package/build/client/_app/immutable/nodes/6.C6BKkT5y.js.gz +0 -0
  97. package/build/client/_app/immutable/nodes/{7.DobLGX2q.js → 7.CirOm0bn.js} +1 -1
  98. package/build/client/_app/immutable/nodes/7.CirOm0bn.js.br +0 -0
  99. package/build/client/_app/immutable/nodes/7.CirOm0bn.js.gz +0 -0
  100. package/build/client/_app/immutable/nodes/{8.ymwDCA4x.js → 8.FMalYuF8.js} +1 -1
  101. package/build/client/_app/immutable/nodes/8.FMalYuF8.js.br +0 -0
  102. package/build/client/_app/immutable/nodes/8.FMalYuF8.js.gz +0 -0
  103. package/build/client/_app/immutable/nodes/{9.DjD6fOLl.js → 9.CZ8pmye1.js} +1 -1
  104. package/build/client/_app/immutable/nodes/9.CZ8pmye1.js.br +0 -0
  105. package/build/client/_app/immutable/nodes/9.CZ8pmye1.js.gz +0 -0
  106. package/build/client/_app/version.json +1 -1
  107. package/build/client/_app/version.json.br +0 -0
  108. package/build/client/_app/version.json.gz +0 -0
  109. package/build/handler.js +4 -4
  110. package/build/index.js +4 -4
  111. package/build/server/chunks/chunks/{AppHeader.js-BfbJ9Wvh.js → AppHeader.js-DPeXjmPi.js} +3 -3
  112. package/build/server/chunks/chunks/{AppHeader.js-BfbJ9Wvh.js.map → AppHeader.js-DPeXjmPi.js.map} +1 -1
  113. package/build/server/chunks/chunks/{SideNav.js-CioG2cH9.js → SideNav.js-Dp1EFlHe.js} +2 -2
  114. package/build/server/chunks/chunks/{SideNav.js-CioG2cH9.js.map → SideNav.js-Dp1EFlHe.js.map} +1 -1
  115. package/build/server/chunks/chunks/{UserChip.js-2mLw8DG-.js → UserChip.js-JYI3D9Nt.js} +3 -3
  116. package/build/server/chunks/chunks/{UserChip.js-2mLw8DG-.js.map → UserChip.js-JYI3D9Nt.js.map} +1 -1
  117. package/build/server/chunks/chunks/{admin-auth.server.js-CpJLI73r.js → admin-auth.server.js-DBasnefm.js} +2 -2
  118. package/build/server/chunks/chunks/{admin-auth.server.js-CpJLI73r.js.map → admin-auth.server.js-DBasnefm.js.map} +1 -1
  119. package/build/server/chunks/chunks/admin-config.js-PsmeJe8H.js +3 -0
  120. package/build/server/chunks/chunks/admin-config.js-PsmeJe8H.js.map +1 -0
  121. package/build/server/chunks/chunks/{chunk-3SEQKFGD.js-hLBC6n0U.js → chunk-6TMSTNHN.js-3Bz2KNTb.js} +3 -3
  122. package/build/server/chunks/chunks/{chunk-3SEQKFGD.js-hLBC6n0U.js.map → chunk-6TMSTNHN.js-3Bz2KNTb.js.map} +1 -1
  123. package/build/server/chunks/chunks/chunk-NVMSD4CC.js-BgY8vvUs.js +2919 -0
  124. package/build/server/chunks/chunks/chunk-NVMSD4CC.js-BgY8vvUs.js.map +1 -0
  125. package/build/server/chunks/chunks/{client.js-0QVINoWt.js → client.js-Bpq0VuTu.js} +2 -2
  126. package/build/server/chunks/chunks/{client.js-0QVINoWt.js.map → client.js-Bpq0VuTu.js.map} +1 -1
  127. package/build/server/chunks/chunks/{clientCache.server.js-DnMvUcHP.js → clientCache.server.js-C9I-Kcfi.js} +4 -4
  128. package/build/server/chunks/chunks/{clientCache.server.js-DnMvUcHP.js.map → clientCache.server.js-C9I-Kcfi.js.map} +1 -1
  129. package/build/server/chunks/chunks/{compute.js-C2CcEWW8.js → compute.js-DGTy3YjO.js} +4 -4
  130. package/build/server/chunks/chunks/compute.js-DGTy3YjO.js.map +1 -0
  131. package/build/server/chunks/chunks/{computeLimits.js-vDIRMhzi.js → computeLimits.js-BxiPi8XP.js} +2 -2
  132. package/build/server/chunks/chunks/{computeLimits.js-vDIRMhzi.js.map → computeLimits.js-BxiPi8XP.js.map} +1 -1
  133. package/build/server/chunks/chunks/{evictChangedServers.js-Cym-2rnu.js → evictChangedServers.js-jOAazwbs.js} +2 -2
  134. package/build/server/chunks/chunks/{evictChangedServers.js-Cym-2rnu.js.map → evictChangedServers.js-jOAazwbs.js.map} +1 -1
  135. package/build/server/chunks/chunks/forms.js-BPoi2g-_.js +2 -0
  136. package/build/server/chunks/chunks/forms.js-BPoi2g-_.js.map +1 -0
  137. package/build/server/chunks/chunks/internal.js-WBVEU67X.js.map +1 -1
  138. package/build/server/chunks/chunks/{internal2.js-DcssKd4i.js → internal2.js-Bh_dm6kd.js} +3 -3
  139. package/build/server/chunks/chunks/{internal2.js-DcssKd4i.js.map → internal2.js-Bh_dm6kd.js.map} +1 -1
  140. package/build/server/chunks/chunks/navigation.js-BPoi2g-_.js +2 -0
  141. package/build/server/chunks/chunks/navigation.js-BPoi2g-_.js.map +1 -0
  142. package/build/server/chunks/chunks/{package.js-q_o0ZSj1.js → package.js-JTfJ56QW.js} +13 -2
  143. package/build/server/chunks/chunks/package.js-JTfJ56QW.js.map +1 -0
  144. package/build/server/chunks/chunks/{state.js-CCKu0CaC.js → state.js-DRIvCY3h.js} +2 -2
  145. package/build/server/chunks/chunks/{state.js-CCKu0CaC.js.map → state.js-DRIvCY3h.js.map} +1 -1
  146. package/build/server/chunks/chunks/{stores.js-Ce8w77Gm.js → stores.js-BB7k-hH4.js} +2 -2
  147. package/build/server/chunks/chunks/{stores.js-Ce8w77Gm.js.map → stores.js-BB7k-hH4.js.map} +1 -1
  148. package/build/server/chunks/chunks/visualization-BIHTM2KJ.js-tLehqRSm.js +21 -0
  149. package/build/server/chunks/chunks/visualization-BIHTM2KJ.js-tLehqRSm.js.map +1 -0
  150. package/build/server/chunks/entries/endpoints/admin/api/compute/{_server.ts.js-CGQtDXgk.js → _server.ts.js-C_ZbbcKO.js} +6 -6
  151. package/build/server/chunks/entries/endpoints/admin/api/compute/{_server.ts.js-CGQtDXgk.js.map → _server.ts.js-C_ZbbcKO.js.map} +1 -1
  152. package/build/server/chunks/entries/endpoints/admin/api/orgs/_id_/assets/_kind_/{_server.ts.js-Dud1t6SV.js → _server.ts.js-B8BM3nKO.js} +4 -4
  153. package/build/server/chunks/entries/endpoints/admin/api/orgs/_id_/assets/_kind_/{_server.ts.js-Dud1t6SV.js.map → _server.ts.js-B8BM3nKO.js.map} +1 -1
  154. package/build/server/chunks/entries/endpoints/api/compute/{_server.ts.js-CIagEbAJ.js → _server.ts.js-M1fUGfJP.js} +0 -0
  155. package/build/server/chunks/entries/endpoints/api/compute/{_server.ts.js-CIagEbAJ.js.map → _server.ts.js-M1fUGfJP.js.map} +1 -1
  156. package/build/server/chunks/entries/endpoints/api/compute/schema/{_server.ts.js-B_OO7fR2.js → _server.ts.js-GXDupsWm.js} +5 -5
  157. package/build/server/chunks/entries/endpoints/api/compute/schema/{_server.ts.js-B_OO7fR2.js.map → _server.ts.js-GXDupsWm.js.map} +1 -1
  158. package/build/server/chunks/entries/endpoints/api/definitions/_guid_/{_server.ts.js-B36u-OKF.js → _server.ts.js-Do6zqNwU.js} +4 -4
  159. package/build/server/chunks/entries/endpoints/api/definitions/_guid_/{_server.ts.js-B36u-OKF.js.map → _server.ts.js-Do6zqNwU.js.map} +1 -1
  160. package/build/server/chunks/entries/endpoints/api/definitions/_guid_/image/_filename_/{_server.ts.js-DWDGwsDg.js → _server.ts.js-BG-xa8K0.js} +4 -4
  161. package/build/server/chunks/entries/endpoints/api/definitions/_guid_/image/_filename_/{_server.ts.js-DWDGwsDg.js.map → _server.ts.js-BG-xa8K0.js.map} +1 -1
  162. package/build/server/chunks/entries/endpoints/api/definitions/_guid_/image/{_server.ts.js-BSb3_snz.js → _server.ts.js-DLZ0bJbO.js} +4 -4
  163. package/build/server/chunks/entries/endpoints/api/definitions/_guid_/image/{_server.ts.js-BSb3_snz.js.map → _server.ts.js-DLZ0bJbO.js.map} +1 -1
  164. package/build/server/chunks/entries/endpoints/api/definitions/{_server.ts.js-C5S1tEiY.js → _server.ts.js-Nd67z7Ul.js} +4 -4
  165. package/build/server/chunks/entries/endpoints/api/definitions/{_server.ts.js-C5S1tEiY.js.map → _server.ts.js-Nd67z7Ul.js.map} +1 -1
  166. package/build/server/chunks/entries/endpoints/api/org/compute/{_server.ts.js-DKhLOB_A.js → _server.ts.js-Cb3PJwZ1.js} +6 -6
  167. package/build/server/chunks/entries/endpoints/api/org/compute/{_server.ts.js-DKhLOB_A.js.map → _server.ts.js-Cb3PJwZ1.js.map} +1 -1
  168. package/build/server/chunks/entries/endpoints/auth/email/callback/{_server.ts.js-DCjY9UXh.js → _server.ts.js-BLbLoQ6f.js} +4 -4
  169. package/build/server/chunks/entries/endpoints/auth/email/callback/{_server.ts.js-DCjY9UXh.js.map → _server.ts.js-BLbLoQ6f.js.map} +1 -1
  170. package/build/server/chunks/entries/endpoints/auth/supabase/callback/{_server.ts.js-BG9aKYc1.js → _server.ts.js-BXmQuVvj.js} +4 -4
  171. package/build/server/chunks/entries/endpoints/auth/supabase/callback/{_server.ts.js-BG9aKYc1.js.map → _server.ts.js-BXmQuVvj.js.map} +1 -1
  172. package/build/server/chunks/entries/{hooks.server.js-XyglROqL.js → hooks.server.js-Bjj2EDCz.js} +4 -4
  173. package/build/server/chunks/entries/{hooks.server.js-XyglROqL.js.map → hooks.server.js-Bjj2EDCz.js.map} +1 -1
  174. package/build/server/chunks/entries/pages/{_error.svelte.js-DiCS9ZOL.js → _error.svelte.js-DWRpiLmd.js} +4 -4
  175. package/build/server/chunks/entries/pages/{_error.svelte.js-DiCS9ZOL.js.map → _error.svelte.js-DWRpiLmd.js.map} +1 -1
  176. package/build/server/chunks/entries/pages/{_page.svelte.js-2vvLdcex.js → _page.svelte.js-nw14XI4h.js} +6 -6
  177. package/build/server/chunks/entries/pages/{_page.svelte.js-2vvLdcex.js.map → _page.svelte.js-nw14XI4h.js.map} +1 -1
  178. package/build/server/chunks/entries/pages/accept-invite/{_page.server.ts.js-CxZpwJjl.js → _page.server.ts.js-Bt4yAkIi.js} +2 -2
  179. package/build/server/chunks/entries/pages/accept-invite/{_page.server.ts.js-CxZpwJjl.js.map → _page.server.ts.js-Bt4yAkIi.js.map} +1 -1
  180. package/build/server/chunks/entries/pages/accept-invite/{_page.svelte.js-D9QFHAsb.js → _page.svelte.js-shC-47yR.js} +4 -4
  181. package/build/server/chunks/entries/pages/accept-invite/{_page.svelte.js-D9QFHAsb.js.map → _page.svelte.js-shC-47yR.js.map} +1 -1
  182. package/build/server/chunks/entries/pages/admin/{_error.svelte.js-GXV5rID_.js → _error.svelte.js-DmBK1tNB.js} +4 -4
  183. package/build/server/chunks/entries/pages/admin/{_error.svelte.js-GXV5rID_.js.map → _error.svelte.js-DmBK1tNB.js.map} +1 -1
  184. package/build/server/chunks/entries/pages/admin/{_layout.svelte.js-DWK57cLF.js → _layout.svelte.js-BnQZ2Iy-.js} +7 -7
  185. package/build/server/chunks/entries/pages/admin/{_layout.svelte.js-DWK57cLF.js.map → _layout.svelte.js-BnQZ2Iy-.js.map} +1 -1
  186. package/build/server/chunks/entries/pages/admin/{_page.server.ts.js-DHyOJHu3.js → _page.server.ts.js-BqXsNjw_.js} +2 -2
  187. package/build/server/chunks/entries/pages/admin/{_page.server.ts.js-DHyOJHu3.js.map → _page.server.ts.js-BqXsNjw_.js.map} +1 -1
  188. package/build/server/chunks/entries/pages/admin/{_page.svelte.js-ZrOgAK44.js → _page.svelte.js-CbnxKkHH.js} +4 -4
  189. package/build/server/chunks/entries/pages/admin/{_page.svelte.js-ZrOgAK44.js.map → _page.svelte.js-CbnxKkHH.js.map} +1 -1
  190. package/build/server/chunks/entries/pages/admin/compute/{_page.svelte.js-Xc5KUiyr.js → _page.svelte.js-Du8Boz9T.js} +3 -3
  191. package/build/server/chunks/entries/pages/admin/compute/{_page.svelte.js-Xc5KUiyr.js.map → _page.svelte.js-Du8Boz9T.js.map} +1 -1
  192. package/build/server/chunks/entries/pages/admin/projects/_id_/{_page.svelte.js-CoN7LVs8.js → _page.svelte.js-D6tOb9S5.js} +3 -3
  193. package/build/server/chunks/entries/pages/admin/projects/_id_/{_page.svelte.js-CoN7LVs8.js.map → _page.svelte.js-D6tOb9S5.js.map} +1 -1
  194. package/build/server/chunks/entries/pages/admin/projects/{_page.svelte.js-C8I9RSSC.js → _page.svelte.js-COB9cKx0.js} +3 -3
  195. package/build/server/chunks/entries/pages/admin/projects/{_page.svelte.js-C8I9RSSC.js.map → _page.svelte.js-COB9cKx0.js.map} +1 -1
  196. package/build/server/chunks/entries/pages/admin/system/{_page.server.ts.js-5x0QUJqa.js → _page.server.ts.js-Bq7uxxR-.js} +3 -3
  197. package/build/server/chunks/entries/pages/admin/system/{_page.server.ts.js-5x0QUJqa.js.map → _page.server.ts.js-Bq7uxxR-.js.map} +1 -1
  198. package/build/server/chunks/entries/pages/admin/system/{_page.svelte.js-CSgpyJ77.js → _page.svelte.js-DtoVK7-K.js} +3 -3
  199. package/build/server/chunks/entries/pages/admin/system/{_page.svelte.js-CSgpyJ77.js.map → _page.svelte.js-DtoVK7-K.js.map} +1 -1
  200. package/build/server/chunks/entries/pages/admin/users/{_page.svelte.js-b_IBx7X1.js → _page.svelte.js-DMfzvW8J.js} +3 -3
  201. package/build/server/chunks/entries/pages/admin/users/{_page.svelte.js-b_IBx7X1.js.map → _page.svelte.js-DMfzvW8J.js.map} +1 -1
  202. package/build/server/chunks/entries/pages/auth/email/sent/{_page.svelte.js-sm6XU5LM.js → _page.svelte.js-CXxAG1xz.js} +4 -4
  203. package/build/server/chunks/entries/pages/auth/email/sent/{_page.svelte.js-sm6XU5LM.js.map → _page.svelte.js-CXxAG1xz.js.map} +1 -1
  204. package/build/server/chunks/entries/pages/auth/email/start/{_page.server.ts.js-BHpJppCP.js → _page.server.ts.js-DpzMyA3w.js} +2 -2
  205. package/build/server/chunks/entries/pages/auth/email/start/{_page.server.ts.js-BHpJppCP.js.map → _page.server.ts.js-DpzMyA3w.js.map} +1 -1
  206. package/build/server/chunks/entries/pages/library/_guid_/{_page.server.ts.js-D7rAHAZH.js → _page.server.ts.js-CECsYZWP.js} +3 -3
  207. package/build/server/chunks/entries/pages/library/_guid_/{_page.server.ts.js-D7rAHAZH.js.map → _page.server.ts.js-CECsYZWP.js.map} +1 -1
  208. package/build/server/chunks/entries/pages/library/_guid_/{_page.svelte.js-QmIuEZ6d.js → _page.svelte.js-DaCwd-Yj.js} +9 -8
  209. package/build/server/chunks/entries/pages/library/_guid_/{_page.svelte.js-QmIuEZ6d.js.map → _page.svelte.js-DaCwd-Yj.js.map} +1 -1
  210. package/build/server/chunks/entries/pages/library/{_page.svelte.js-BBecVQfU.js → _page.svelte.js-B4Nzrzfy.js} +6 -6
  211. package/build/server/chunks/entries/pages/library/{_page.svelte.js-BBecVQfU.js.map → _page.svelte.js-B4Nzrzfy.js.map} +1 -1
  212. package/build/server/chunks/entries/pages/login/{_page.server.ts.js-Zrm-wLis.js → _page.server.ts.js-CtQ4IGT7.js} +2 -2
  213. package/build/server/chunks/entries/pages/login/{_page.server.ts.js-Zrm-wLis.js.map → _page.server.ts.js-CtQ4IGT7.js.map} +1 -1
  214. package/build/server/chunks/entries/pages/login/{_page.svelte.js-mB5w-Owi.js → _page.svelte.js-Y6Yl4z9a.js} +4 -4
  215. package/build/server/chunks/entries/pages/login/{_page.svelte.js-mB5w-Owi.js.map → _page.svelte.js-Y6Yl4z9a.js.map} +1 -1
  216. package/build/server/chunks/entries/pages/logout/{_page.server.ts.js-DwVfN95n.js → _page.server.ts.js-xm3Vp1lV.js} +2 -2
  217. package/build/server/chunks/entries/pages/logout/{_page.server.ts.js-DwVfN95n.js.map → _page.server.ts.js-xm3Vp1lV.js.map} +1 -1
  218. package/build/server/chunks/entries/pages/projects/{_layout.svelte.js-B4At_98Y.js → _layout.svelte.js--dRe-afl.js} +6 -6
  219. package/build/server/chunks/entries/pages/projects/{_layout.svelte.js-B4At_98Y.js.map → _layout.svelte.js--dRe-afl.js.map} +1 -1
  220. package/build/server/chunks/entries/pages/projects/{_page.svelte.js-CWVFHh-G.js → _page.svelte.js-Db6fcqq1.js} +4 -4
  221. package/build/server/chunks/entries/pages/projects/{_page.svelte.js-CWVFHh-G.js.map → _page.svelte.js-Db6fcqq1.js.map} +1 -1
  222. package/build/server/chunks/entries/pages/setup/{_page.server.ts.js-BmWf9JNV.js → _page.server.ts.js-BR-dzHN4.js} +2 -2
  223. package/build/server/chunks/entries/pages/setup/{_page.server.ts.js-BmWf9JNV.js.map → _page.server.ts.js-BR-dzHN4.js.map} +1 -1
  224. package/build/server/chunks/entries/pages/setup/{_page.svelte.js-b-ulOSEP.js → _page.svelte.js-v-m0SHvj.js} +4 -4
  225. package/build/server/chunks/entries/pages/setup/{_page.svelte.js-b-ulOSEP.js.map → _page.svelte.js-v-m0SHvj.js.map} +1 -1
  226. package/build/server/chunks/entries/pages/team/{_layout.svelte.js-BvrC26--.js → _layout.svelte.js-BUcQyc61.js} +8 -8
  227. package/build/server/chunks/entries/pages/team/{_layout.svelte.js-BvrC26--.js.map → _layout.svelte.js-BUcQyc61.js.map} +1 -1
  228. package/build/server/chunks/entries/pages/team/compute/{_page.svelte.js-C9_52_y0.js → _page.svelte.js-Czydk6by.js} +4 -4
  229. package/build/server/chunks/entries/pages/team/compute/{_page.svelte.js-C9_52_y0.js.map → _page.svelte.js-Czydk6by.js.map} +1 -1
  230. package/build/server/chunks/entries/pages/team/members/{_page.svelte.js-BQJjsfNw.js → _page.svelte.js-CKin7PK3.js} +3 -3
  231. package/build/server/chunks/entries/pages/team/members/{_page.svelte.js-BQJjsfNw.js.map → _page.svelte.js-CKin7PK3.js.map} +1 -1
  232. package/build/server/chunks/entries/pages/team/projects/{_page.svelte.js-D309SyRZ.js → _page.svelte.js-DsISYtRg.js} +3 -3
  233. package/build/server/chunks/entries/pages/team/projects/{_page.svelte.js-D309SyRZ.js.map → _page.svelte.js-DsISYtRg.js.map} +1 -1
  234. package/build/server/chunks/entries/pages/team/reclaim/{_page.svelte.js-Cr2oIwjO.js → _page.svelte.js-D9V8gXac.js} +3 -3
  235. package/build/server/chunks/entries/pages/team/reclaim/{_page.svelte.js-Cr2oIwjO.js.map → _page.svelte.js-D9V8gXac.js.map} +1 -1
  236. package/build/server/chunks/{handler-BV0yMUrL.js → handler-xpfg6e-f.js} +3 -3
  237. package/build/server/chunks/{handler-BV0yMUrL.js.map → handler-xpfg6e-f.js.map} +1 -1
  238. package/build/server/chunks/{index.js-DYSFX7_4.js → index.js-BcDJb77u.js} +2 -2
  239. package/build/server/chunks/{index.js-DYSFX7_4.js.map → index.js-BcDJb77u.js.map} +1 -1
  240. package/build/server/chunks/{manifest.js-Dr8Qybxj.js → manifest.js-Djr-18fd.js} +38 -38
  241. package/build/server/chunks/{manifest.js-Dr8Qybxj.js.map → manifest.js-Djr-18fd.js.map} +1 -1
  242. package/build/server/chunks/nodes/{1.js-C-8Rfvho.js → 1.js-Qwdz1CC8.js} +3 -3
  243. package/build/server/chunks/nodes/{1.js-C-8Rfvho.js.map → 1.js-Qwdz1CC8.js.map} +1 -1
  244. package/build/server/chunks/nodes/{11.js-D1t3p85u.js → 11.js-DyFhqyc4.js} +3 -3
  245. package/build/server/chunks/nodes/{11.js-D1t3p85u.js.map → 11.js-DyFhqyc4.js.map} +1 -1
  246. package/build/server/chunks/nodes/{13.js-BUz2QEML.js → 13.js-ivS1Km9a.js} +3 -3
  247. package/build/server/chunks/nodes/{13.js-BUz2QEML.js.map → 13.js-ivS1Km9a.js.map} +1 -1
  248. package/build/server/chunks/nodes/{14.js-Bh_aAo2q.js → 14.js-DF8nXoZC.js} +3 -3
  249. package/build/server/chunks/nodes/{14.js-Bh_aAo2q.js.map → 14.js-DF8nXoZC.js.map} +1 -1
  250. package/build/server/chunks/nodes/{15.js-BeW2j8Pn.js → 15.js-CfihB92I.js} +8 -8
  251. package/build/server/chunks/nodes/{15.js-BeW2j8Pn.js.map → 15.js-CfihB92I.js.map} +1 -1
  252. package/build/server/chunks/nodes/{16.js-DpZU13_f.js → 16.js-30AnGDQF.js} +3 -3
  253. package/build/server/chunks/nodes/{16.js-DpZU13_f.js.map → 16.js-30AnGDQF.js.map} +1 -1
  254. package/build/server/chunks/nodes/{17.js-D6i2VLcE.js → 17.js-BTEGLUwj.js} +3 -3
  255. package/build/server/chunks/nodes/{17.js-D6i2VLcE.js.map → 17.js-BTEGLUwj.js.map} +1 -1
  256. package/build/server/chunks/nodes/{18.js-B0WEVjij.js → 18.js-DFfwIgO9.js} +5 -5
  257. package/build/server/chunks/nodes/{18.js-B0WEVjij.js.map → 18.js-DFfwIgO9.js.map} +1 -1
  258. package/build/server/chunks/nodes/{19.js-DEfe9zf5.js → 19.js-s2v5H_-E.js} +3 -3
  259. package/build/server/chunks/nodes/{19.js-DEfe9zf5.js.map → 19.js-s2v5H_-E.js.map} +1 -1
  260. package/build/server/chunks/nodes/{2.js-Co6yIP6U.js → 2.js-Beis-UKR.js} +3 -3
  261. package/build/server/chunks/nodes/{2.js-Co6yIP6U.js.map → 2.js-Beis-UKR.js.map} +1 -1
  262. package/build/server/chunks/nodes/{20.js-ClLuWFt_.js → 20.js-XXOyBU-M.js} +8 -8
  263. package/build/server/chunks/nodes/{20.js-ClLuWFt_.js.map → 20.js-XXOyBU-M.js.map} +1 -1
  264. package/build/server/chunks/nodes/{21.js-Bo0uqbOG.js → 21.js-mmKZktUK.js} +7 -7
  265. package/build/server/chunks/nodes/{21.js-Bo0uqbOG.js.map → 21.js-mmKZktUK.js.map} +1 -1
  266. package/build/server/chunks/nodes/{22.js-CZoQ-vGw.js → 22.js-WVUfBPzO.js} +5 -5
  267. package/build/server/chunks/nodes/{22.js-CZoQ-vGw.js.map → 22.js-WVUfBPzO.js.map} +1 -1
  268. package/build/server/chunks/nodes/{23.js-D3waTlCu.js → 23.js-C-5MtLa1.js} +3 -3
  269. package/build/server/chunks/nodes/{23.js-D3waTlCu.js.map → 23.js-C-5MtLa1.js.map} +1 -1
  270. package/build/server/chunks/nodes/{24.js-Brn465TS.js → 24.js-BAoMMD0a.js} +7 -7
  271. package/build/server/chunks/nodes/{24.js-Brn465TS.js.map → 24.js-BAoMMD0a.js.map} +1 -1
  272. package/build/server/chunks/nodes/{27.js-B7ISOOoI.js → 27.js-BI-YylUw.js} +3 -3
  273. package/build/server/chunks/nodes/{27.js-B7ISOOoI.js.map → 27.js-BI-YylUw.js.map} +1 -1
  274. package/build/server/chunks/nodes/{28.js-cV9efQ5F.js → 28.js-CbrX0sU8.js} +3 -3
  275. package/build/server/chunks/nodes/{28.js-cV9efQ5F.js.map → 28.js-CbrX0sU8.js.map} +1 -1
  276. package/build/server/chunks/nodes/{29.js-DPR3YsDG.js → 29.js-6jAIILUg.js} +3 -3
  277. package/build/server/chunks/nodes/{29.js-DPR3YsDG.js.map → 29.js-6jAIILUg.js.map} +1 -1
  278. package/build/server/chunks/nodes/{3.js-C7QkwQVS.js → 3.js-BTGDPklb.js} +3 -3
  279. package/build/server/chunks/nodes/{3.js-C7QkwQVS.js.map → 3.js-BTGDPklb.js.map} +1 -1
  280. package/build/server/chunks/nodes/{30.js-abRTzcez.js → 30.js-VMNOzeyu.js} +3 -3
  281. package/build/server/chunks/nodes/{30.js-abRTzcez.js.map → 30.js-VMNOzeyu.js.map} +1 -1
  282. package/build/server/chunks/nodes/{5.js-B1bqOaKM.js → 5.js-C9QDVqtj.js} +3 -3
  283. package/build/server/chunks/nodes/{5.js-B1bqOaKM.js.map → 5.js-C9QDVqtj.js.map} +1 -1
  284. package/build/server/chunks/nodes/{6.js-M_KLp3Ex.js → 6.js-CnEl-9M2.js} +3 -3
  285. package/build/server/chunks/nodes/{6.js-M_KLp3Ex.js.map → 6.js-CnEl-9M2.js.map} +1 -1
  286. package/build/server/chunks/nodes/{7.js-CnAZu4qX.js → 7.js-jYRFJJNd.js} +3 -3
  287. package/build/server/chunks/nodes/{7.js-CnAZu4qX.js.map → 7.js-jYRFJJNd.js.map} +1 -1
  288. package/build/server/chunks/nodes/{8.js-Cw_xT2FY.js → 8.js-o3KjyiXF.js} +7 -7
  289. package/build/server/chunks/nodes/{8.js-Cw_xT2FY.js.map → 8.js-o3KjyiXF.js.map} +1 -1
  290. package/build/server/chunks/nodes/{9.js-D6yL5RtR.js → 9.js-B7WFq5go.js} +5 -5
  291. package/build/server/chunks/nodes/{9.js-D6yL5RtR.js.map → 9.js-B7WFq5go.js.map} +1 -1
  292. package/package.json +17 -6
  293. package/build/client/_app/immutable/chunks/5jv0Mvxq.js.br +0 -0
  294. package/build/client/_app/immutable/chunks/5jv0Mvxq.js.gz +0 -0
  295. package/build/client/_app/immutable/chunks/98yDWdDP2.js.br +0 -0
  296. package/build/client/_app/immutable/chunks/98yDWdDP2.js.gz +0 -0
  297. package/build/client/_app/immutable/chunks/B_9q-Ef12.js +0 -1
  298. package/build/client/_app/immutable/chunks/B_9q-Ef12.js.br +0 -2
  299. package/build/client/_app/immutable/chunks/B_9q-Ef12.js.gz +0 -0
  300. package/build/client/_app/immutable/chunks/C0dvFiQZ2.js.br +0 -0
  301. package/build/client/_app/immutable/chunks/C0dvFiQZ2.js.gz +0 -0
  302. package/build/client/_app/immutable/chunks/CP-uwdvv.js.br +0 -0
  303. package/build/client/_app/immutable/chunks/CP-uwdvv.js.gz +0 -0
  304. package/build/client/_app/immutable/chunks/CYR7f9ts.js +0 -5404
  305. package/build/client/_app/immutable/chunks/CYR7f9ts.js.br +0 -0
  306. package/build/client/_app/immutable/chunks/CYR7f9ts.js.gz +0 -0
  307. package/build/client/_app/immutable/chunks/D4wDk12M2.js +0 -1
  308. package/build/client/_app/immutable/chunks/D4wDk12M2.js.br +0 -0
  309. package/build/client/_app/immutable/chunks/D4wDk12M2.js.gz +0 -0
  310. package/build/client/_app/immutable/chunks/DjxaiTC2.js.br +0 -0
  311. package/build/client/_app/immutable/chunks/DjxaiTC2.js.gz +0 -0
  312. package/build/client/_app/immutable/chunks/Dn9CnbHs.js +0 -2
  313. package/build/client/_app/immutable/chunks/Dn9CnbHs.js.br +0 -0
  314. package/build/client/_app/immutable/chunks/Dn9CnbHs.js.gz +0 -0
  315. package/build/client/_app/immutable/chunks/mHHlwTIC.js.br +0 -0
  316. package/build/client/_app/immutable/chunks/mHHlwTIC.js.gz +0 -0
  317. package/build/client/_app/immutable/entry/app.nA6FWjJw.js.br +0 -0
  318. package/build/client/_app/immutable/entry/app.nA6FWjJw.js.gz +0 -0
  319. package/build/client/_app/immutable/entry/start.B5X4Akfe.js +0 -1
  320. package/build/client/_app/immutable/entry/start.B5X4Akfe.js.br +0 -0
  321. package/build/client/_app/immutable/entry/start.B5X4Akfe.js.gz +0 -0
  322. package/build/client/_app/immutable/nodes/1.Be6vSNB-.js.br +0 -0
  323. package/build/client/_app/immutable/nodes/1.Be6vSNB-.js.gz +0 -0
  324. package/build/client/_app/immutable/nodes/11.C0Q9fRO2.js.br +0 -0
  325. package/build/client/_app/immutable/nodes/11.C0Q9fRO2.js.gz +0 -0
  326. package/build/client/_app/immutable/nodes/13.CedLh4LC.js.br +0 -0
  327. package/build/client/_app/immutable/nodes/13.CedLh4LC.js.gz +0 -0
  328. package/build/client/_app/immutable/nodes/14.kH0zVFuq.js.br +0 -0
  329. package/build/client/_app/immutable/nodes/14.kH0zVFuq.js.gz +0 -0
  330. package/build/client/_app/immutable/nodes/15.CrGWXR_b.js.br +0 -0
  331. package/build/client/_app/immutable/nodes/15.CrGWXR_b.js.gz +0 -0
  332. package/build/client/_app/immutable/nodes/16.BpzwC_7R.js.br +0 -0
  333. package/build/client/_app/immutable/nodes/16.BpzwC_7R.js.gz +0 -0
  334. package/build/client/_app/immutable/nodes/17.BAd6cLcK.js.br +0 -0
  335. package/build/client/_app/immutable/nodes/17.BAd6cLcK.js.gz +0 -0
  336. package/build/client/_app/immutable/nodes/19.C2M0Gsw8.js.br +0 -0
  337. package/build/client/_app/immutable/nodes/19.C2M0Gsw8.js.gz +0 -0
  338. package/build/client/_app/immutable/nodes/2.DCOz2pgm.js.br +0 -0
  339. package/build/client/_app/immutable/nodes/2.DCOz2pgm.js.gz +0 -0
  340. package/build/client/_app/immutable/nodes/20.BBFt5t9T.js +0 -12
  341. package/build/client/_app/immutable/nodes/20.BBFt5t9T.js.br +0 -0
  342. package/build/client/_app/immutable/nodes/20.BBFt5t9T.js.gz +0 -0
  343. package/build/client/_app/immutable/nodes/21.BYQk6N76.js.br +0 -0
  344. package/build/client/_app/immutable/nodes/21.BYQk6N76.js.gz +0 -0
  345. package/build/client/_app/immutable/nodes/23.awLvoHTA.js.br +0 -0
  346. package/build/client/_app/immutable/nodes/23.awLvoHTA.js.gz +0 -0
  347. package/build/client/_app/immutable/nodes/24.C4Mj39LU.js.br +0 -0
  348. package/build/client/_app/immutable/nodes/24.C4Mj39LU.js.gz +0 -0
  349. package/build/client/_app/immutable/nodes/27.wW5vDHDP.js.br +0 -0
  350. package/build/client/_app/immutable/nodes/27.wW5vDHDP.js.gz +0 -0
  351. package/build/client/_app/immutable/nodes/28.B5qVpudr.js.br +0 -0
  352. package/build/client/_app/immutable/nodes/28.B5qVpudr.js.gz +0 -0
  353. package/build/client/_app/immutable/nodes/29.Cd65rWw6.js.br +0 -0
  354. package/build/client/_app/immutable/nodes/29.Cd65rWw6.js.gz +0 -0
  355. package/build/client/_app/immutable/nodes/3.BtG32r4S.js.br +0 -0
  356. package/build/client/_app/immutable/nodes/3.BtG32r4S.js.gz +0 -0
  357. package/build/client/_app/immutable/nodes/30.DSQJo5j4.js.br +0 -0
  358. package/build/client/_app/immutable/nodes/30.DSQJo5j4.js.gz +0 -0
  359. package/build/client/_app/immutable/nodes/5.CFazNCMc.js.br +0 -2
  360. package/build/client/_app/immutable/nodes/5.CFazNCMc.js.gz +0 -0
  361. package/build/client/_app/immutable/nodes/6.Ds4bdzGT.js.br +0 -0
  362. package/build/client/_app/immutable/nodes/6.Ds4bdzGT.js.gz +0 -0
  363. package/build/client/_app/immutable/nodes/7.DobLGX2q.js.br +0 -0
  364. package/build/client/_app/immutable/nodes/7.DobLGX2q.js.gz +0 -0
  365. package/build/client/_app/immutable/nodes/8.ymwDCA4x.js.br +0 -0
  366. package/build/client/_app/immutable/nodes/8.ymwDCA4x.js.gz +0 -0
  367. package/build/client/_app/immutable/nodes/9.DjD6fOLl.js.br +0 -0
  368. package/build/client/_app/immutable/nodes/9.DjD6fOLl.js.gz +0 -0
  369. package/build/server/chunks/chunks/admin-config.js-0akIzvfH.js +0 -3
  370. package/build/server/chunks/chunks/admin-config.js-0akIzvfH.js.map +0 -1
  371. package/build/server/chunks/chunks/chunk-INP5HVA2.js-ncp7W0Gu.js +0 -2194
  372. package/build/server/chunks/chunks/chunk-INP5HVA2.js-ncp7W0Gu.js.map +0 -1
  373. package/build/server/chunks/chunks/compute.js-C2CcEWW8.js.map +0 -1
  374. package/build/server/chunks/chunks/forms.js-B5Ttvmbg.js +0 -2
  375. package/build/server/chunks/chunks/forms.js-B5Ttvmbg.js.map +0 -1
  376. package/build/server/chunks/chunks/navigation.js-B5Ttvmbg.js +0 -2
  377. package/build/server/chunks/chunks/navigation.js-B5Ttvmbg.js.map +0 -1
  378. package/build/server/chunks/chunks/package.js-q_o0ZSj1.js.map +0 -1
  379. package/build/server/chunks/chunks/visualization-5RH6RSLV.js-DfUogATJ.js +0 -20
  380. package/build/server/chunks/chunks/visualization-5RH6RSLV.js-DfUogATJ.js.map +0 -1
@@ -0,0 +1,2919 @@
1
+ import { _ as _e$1, m, h, p, l, a as x } from './chunk-Y3M7P3BW.js-qwxSY5dh.js';
2
+ import { i as inflateSync } from './esm2.js-C_Dsvb5P.js';
3
+ import * as z from 'three';
4
+ import { ViewHelper } from 'three/addons/helpers/ViewHelper.js';
5
+ import { LineSegmentsGeometry } from 'three/addons/lines/LineSegmentsGeometry.js';
6
+ import { LineSegments2 } from 'three/addons/lines/LineSegments2.js';
7
+ import { LineMaterial } from 'three/addons/lines/LineMaterial.js';
8
+ import { Pass, FullScreenQuad } from 'three/addons/postprocessing/Pass.js';
9
+ import { EffectComposer } from 'three/addons/postprocessing/EffectComposer.js';
10
+ import { RenderPass } from 'three/addons/postprocessing/RenderPass.js';
11
+ import { GTAOPass } from 'three/addons/postprocessing/GTAOPass.js';
12
+ import { SMAAPass } from 'three/addons/postprocessing/SMAAPass.js';
13
+ import { OutputPass } from 'three/addons/postprocessing/OutputPass.js';
14
+ import { CSS2DRenderer, CSS2DObject } from 'three/addons/renderers/CSS2DRenderer.js';
15
+ import { Line2 } from 'three/addons/lines/Line2.js';
16
+ import { LineGeometry } from 'three/addons/lines/LineGeometry.js';
17
+ import { OrbitControls } from 'three/addons/controls/OrbitControls.js';
18
+ import { HDRLoader } from 'three/addons/loaders/HDRLoader.js';
19
+
20
+ //#region ../compute/dist/chunk-NVMSD4CC.js
21
+ var Ln = {};
22
+ _e$1(Ln, {
23
+ CONCRETE_MATERIAL: () => ht,
24
+ EMISSIVE_MATERIAL: () => pt,
25
+ GLASS_MATERIAL: () => yt,
26
+ METAL_MATERIAL: () => Et,
27
+ PLASTIC_MATERIAL: () => gt,
28
+ RUBBER_MATERIAL: () => bt,
29
+ SHARED_MATERIALS: () => We,
30
+ WOOD_MATERIAL: () => Tt
31
+ });
32
+ var pt = new z.MeshPhysicalMaterial({
33
+ color: 0,
34
+ emissive: new z.Color(16777215),
35
+ emissiveIntensity: 5,
36
+ metalness: 0,
37
+ roughness: .2,
38
+ clearcoat: .3,
39
+ clearcoatRoughness: .2,
40
+ depthWrite: true,
41
+ depthTest: true,
42
+ transparent: false,
43
+ alphaTest: 0,
44
+ polygonOffset: true,
45
+ polygonOffsetFactor: 1,
46
+ polygonOffsetUnits: 1,
47
+ side: z.FrontSide,
48
+ dithering: true
49
+ });
50
+ var Et = new z.MeshPhysicalMaterial({
51
+ color: new z.Color(0),
52
+ metalness: .9,
53
+ roughness: .3,
54
+ envMapIntensity: 1.2,
55
+ clearcoat: .3,
56
+ clearcoatRoughness: .2,
57
+ reflectivity: 1,
58
+ ior: 2.5,
59
+ thickness: 1,
60
+ depthWrite: true,
61
+ transparent: false,
62
+ alphaTest: 0,
63
+ depthTest: true,
64
+ polygonOffset: true,
65
+ polygonOffsetFactor: 1,
66
+ polygonOffsetUnits: 1,
67
+ side: z.FrontSide,
68
+ dithering: true
69
+ });
70
+ var ht = new z.MeshPhysicalMaterial({
71
+ color: new z.Color(13421772),
72
+ metalness: 0,
73
+ roughness: .92,
74
+ envMapIntensity: .15,
75
+ clearcoat: .05,
76
+ clearcoatRoughness: .9,
77
+ reflectivity: .15,
78
+ transmission: 0,
79
+ ior: 1.45,
80
+ thickness: 0,
81
+ depthWrite: true,
82
+ transparent: false,
83
+ alphaTest: 0,
84
+ depthTest: true,
85
+ polygonOffset: true,
86
+ polygonOffsetFactor: 1,
87
+ polygonOffsetUnits: 1,
88
+ side: z.FrontSide,
89
+ dithering: true
90
+ });
91
+ var gt = new z.MeshPhysicalMaterial({
92
+ color: new z.Color(16777215),
93
+ metalness: 0,
94
+ roughness: .3,
95
+ envMapIntensity: .5,
96
+ clearcoat: .5,
97
+ clearcoatRoughness: .1,
98
+ reflectivity: .5,
99
+ ior: 1.4,
100
+ transmission: 0,
101
+ transparent: false,
102
+ depthWrite: true,
103
+ side: z.FrontSide,
104
+ dithering: true,
105
+ polygonOffset: true,
106
+ polygonOffsetFactor: 1,
107
+ polygonOffsetUnits: 1
108
+ });
109
+ var yt = new z.MeshPhysicalMaterial({
110
+ color: new z.Color(16777215),
111
+ metalness: 0,
112
+ roughness: 0,
113
+ transmission: .95,
114
+ transparent: true,
115
+ depthWrite: false,
116
+ envMapIntensity: 1,
117
+ clearcoat: 1,
118
+ clearcoatRoughness: 0,
119
+ ior: 1.52,
120
+ reflectivity: .9,
121
+ thickness: 1,
122
+ side: z.DoubleSide,
123
+ polygonOffset: true,
124
+ polygonOffsetFactor: 1,
125
+ polygonOffsetUnits: 1
126
+ });
127
+ var bt = new z.MeshPhysicalMaterial({
128
+ color: new z.Color(1710618),
129
+ metalness: 0,
130
+ roughness: .9,
131
+ envMapIntensity: .2,
132
+ clearcoat: .1,
133
+ clearcoatRoughness: .8,
134
+ reflectivity: .2,
135
+ ior: 1.3,
136
+ transmission: 0,
137
+ depthWrite: true,
138
+ side: z.FrontSide,
139
+ polygonOffset: true,
140
+ polygonOffsetFactor: 1,
141
+ polygonOffsetUnits: 1
142
+ });
143
+ var Tt = new z.MeshPhysicalMaterial({
144
+ color: new z.Color(8934707),
145
+ metalness: 0,
146
+ roughness: .7,
147
+ envMapIntensity: .3,
148
+ clearcoat: .3,
149
+ clearcoatRoughness: .4,
150
+ reflectivity: .3,
151
+ ior: 1.3,
152
+ transmission: 0,
153
+ depthWrite: true,
154
+ side: z.FrontSide,
155
+ dithering: true,
156
+ polygonOffset: true,
157
+ polygonOffsetFactor: 1,
158
+ polygonOffsetUnits: 1
159
+ });
160
+ var We = /* @__PURE__ */ new Set([
161
+ pt,
162
+ Et,
163
+ ht,
164
+ gt,
165
+ yt,
166
+ bt,
167
+ Tt
168
+ ]);
169
+ var ae = {
170
+ HUGE_THRESHOLD: 1e4,
171
+ LARGE_THRESHOLD: 1e3,
172
+ SCALE_RATIO_THRESHOLD: 100,
173
+ NEAR_PLANE_FACTOR: {
174
+ TINY: 1e-4,
175
+ SMALL: .001,
176
+ NORMAL: .01
177
+ },
178
+ FAR_PLANE_FACTOR: {
179
+ HUGE: 100,
180
+ LARGE: 50,
181
+ NORMAL: 20
182
+ },
183
+ INITIAL_DISTANCE_MULTIPLIER: 4
184
+ };
185
+ function ba(e, n, t, r, a) {
186
+ if (Fn(e), n.length === 0) return;
187
+ n.forEach((u) => {
188
+ e.add(u);
189
+ });
190
+ let o = $e(n), i = o.getCenter(new z.Vector3()), l = o.getSize(new z.Vector3()), s = Math.max(l.x, l.y, l.z);
191
+ if (s / Math.min(l.x || 1, l.y || 1, l.z || 1) > ae.SCALE_RATIO_THRESHOLD || s > ae.HUGE_THRESHOLD ? (t.near = s * ae.NEAR_PLANE_FACTOR.TINY, t.far = s * ae.FAR_PLANE_FACTOR.HUGE) : s > ae.LARGE_THRESHOLD ? (t.near = s * ae.NEAR_PLANE_FACTOR.SMALL, t.far = s * ae.FAR_PLANE_FACTOR.LARGE) : (t.near = Math.max(.01, s * ae.NEAR_PLANE_FACTOR.NORMAL), t.far = Math.max(2e3, s * ae.FAR_PLANE_FACTOR.NORMAL)), t.updateProjectionMatrix(), !a) {
192
+ let u = s * ae.INITIAL_DISTANCE_MULTIPLIER;
193
+ t.position.set(i.x + u * .8, i.y + u, i.z + u * 1.2), r.target.copy(i), r.update();
194
+ }
195
+ }
196
+ function Rt(e) {
197
+ if (!e || typeof e != "string") return m().warn(`Invalid color input: ${e}, using white`), new z.Color(16777215);
198
+ let n = e.trim();
199
+ if (/^#?[0-9A-Fa-f]{6}$/.test(n)) try {
200
+ let r = n.startsWith("#") ? n : `#${n}`;
201
+ return new z.Color(r);
202
+ } catch {
203
+ return m().warn(`Invalid hex color: ${e}, using white`), new z.Color(16777215);
204
+ }
205
+ if (n.includes(",")) {
206
+ let r = n.split(",").map((a) => parseInt(a.trim(), 10));
207
+ if (r.length === 3 && r.every((a) => !isNaN(a) && a >= 0 && a <= 255)) return new z.Color(r[0] / 255, r[1] / 255, r[2] / 255);
208
+ }
209
+ let t = n.toLowerCase();
210
+ return t in z.Color.NAMES ? new z.Color(z.Color.NAMES[t]) : (m().warn(`Invalid color string: ${e}, using white`), new z.Color(16777215));
211
+ }
212
+ function xt(e, n, t = "z") {
213
+ e.forEach((r) => {
214
+ r.position[t] -= n;
215
+ });
216
+ }
217
+ function $e(e) {
218
+ let n = new z.Box3();
219
+ return e.length === 0 || e.forEach((t) => {
220
+ t.updateMatrixWorld(true);
221
+ let r = new z.Box3().setFromObject(t);
222
+ n.union(r);
223
+ }), n;
224
+ }
225
+ var On = /* @__PURE__ */ new Set([
226
+ "grid",
227
+ "floor",
228
+ "label-layer",
229
+ "measure"
230
+ ]);
231
+ function In(e) {
232
+ let n = e;
233
+ for (; n;) {
234
+ if (typeof n.userData.id == "string" && On.has(n.userData.id)) return true;
235
+ n = n.parent;
236
+ }
237
+ return false;
238
+ }
239
+ function le(e) {
240
+ e.updateMatrixWorld(true);
241
+ let n = new z.Box3();
242
+ return e.traverse((t) => {
243
+ let r = t;
244
+ t.visible && !In(t) && r.geometry && n.expandByObject(t);
245
+ }), n;
246
+ }
247
+ var Pn = /* @__PURE__ */ new Set([
248
+ "floor",
249
+ "grid",
250
+ "label-layer"
251
+ ]);
252
+ var Se = "selvaGeometryCache";
253
+ function Fn(e) {
254
+ [...e.children].forEach((t) => {
255
+ Pn.has(t.userData.id) || t.userData.source !== "user" && (t.traverse((r) => {
256
+ let a = r;
257
+ if (!a.geometry && !a.material) return;
258
+ a.geometry?.userData?.[Se] || a.geometry?.dispose();
259
+ let o = a.material;
260
+ if (!o) return;
261
+ (Array.isArray(o) ? o : [o]).forEach((l) => {
262
+ if (!We.has(l)) {
263
+ for (let s of Object.values(l)) s instanceof z.Texture && s.dispose();
264
+ l.dispose();
265
+ }
266
+ });
267
+ }), t.removeFromParent());
268
+ });
269
+ }
270
+ function Bn(e) {
271
+ let n = e.clone().normalize(), t = new z.Vector3(0, 0, 1), r = new z.Vector3(0, 1, 0), a = Math.abs(n.dot(t)) > .9 ? r : t, o = new z.Vector3().crossVectors(n, a).normalize(), i = new z.Vector3().crossVectors(o, n).normalize();
272
+ return {
273
+ top: n.clone(),
274
+ bottom: n.clone().negate(),
275
+ front: i.clone(),
276
+ back: i.clone().negate(),
277
+ right: o.clone(),
278
+ left: o.clone().negate(),
279
+ iso: i.clone().multiplyScalar(1.2).add(o.clone()).add(n.clone()).normalize()
280
+ };
281
+ }
282
+ function vt(e) {
283
+ let { scene: n, perspective: t, controls: r, onActiveCameraChange: a } = e, o = (e.up ?? t.up).clone().normalize(), i = Bn(o), l = new z.OrthographicCamera(-1, 1, 1, -1, t.near, t.far);
284
+ l.up.copy(o);
285
+ let s = "perspective", c = t.aspect, u = () => s === "perspective" ? t : l, d = null, E = () => {
286
+ d?.cancel(), d = null;
287
+ }, T = () => {
288
+ let h = (s === "orthographic" ? l : t).position.distanceTo(r.target) * Math.tan(t.fov * Math.PI / 360), b = h * c;
289
+ l.left = -b, l.right = b, l.top = h, l.bottom = -h, l.near = t.near, l.far = t.far, l.updateProjectionMatrix();
290
+ }, v = (p) => {
291
+ if (p !== s) {
292
+ if (E(), p === "orthographic") l.position.copy(t.position), l.up.copy(t.up), l.lookAt(r.target), l.zoom = 1, T();
293
+ else {
294
+ let h = (l.top - l.bottom) / (2 * l.zoom) / Math.tan(t.fov * Math.PI / 360), b = l.position.clone().sub(r.target);
295
+ b.lengthSq() < 1e-12 && b.copy(o), b.normalize(), t.position.copy(r.target).add(b.multiplyScalar(h));
296
+ }
297
+ s = p, r.object = u(), r.update(), a(u());
298
+ }
299
+ }, y = (p, f, h, b) => {
300
+ let C = t.fov * (Math.PI / 180), H = f / (2 * Math.tan(C / 2)) * 1.5, L = kn(h, o), P = p.clone().add(L.clone().multiplyScalar(H)), k = u();
301
+ s === "orthographic" && (l.zoom = 1), E(), b ? d = _n(k, r, P, p, () => {
302
+ s === "orthographic" && T();
303
+ }) : (k.position.copy(P), r.target.copy(p), s === "orthographic" && T(), r.update());
304
+ }, m = (p, f = true) => {
305
+ let h = le(n), b = h.isEmpty() ? r.target.clone() : h.getCenter(new z.Vector3()), C = h.isEmpty() ? new z.Vector3(1, 1, 1) : h.getSize(new z.Vector3()), H = Math.max(C.x, C.y, C.z) || 1;
306
+ y(b, H, p, f);
307
+ };
308
+ return {
309
+ getActiveCamera: u,
310
+ getProjection: () => s,
311
+ setProjection: v,
312
+ toggleProjection: () => (v(s === "perspective" ? "orthographic" : "perspective"), s),
313
+ setView: (p, f = true) => {
314
+ m(i[p], f);
315
+ },
316
+ setViewDirection: m,
317
+ frameBounds: (p, f = true) => {
318
+ if (p.isEmpty()) return;
319
+ let h = p.getCenter(new z.Vector3()), b = p.getSize(new z.Vector3()), C = Math.max(b.x, b.y, b.z) || 1, H = u().position.clone().sub(r.target);
320
+ H.lengthSq() < 1e-12 && H.copy(i.iso), y(h, C, H.normalize(), f);
321
+ },
322
+ setRotateEnabled: (p) => {
323
+ r.enableRotate = p;
324
+ },
325
+ isRotateEnabled: () => r.enableRotate,
326
+ updateAspect: (p, f) => {
327
+ c = f === 0 ? c : p / f, s === "orthographic" && T();
328
+ },
329
+ dispose: E
330
+ };
331
+ }
332
+ function kn(e, n) {
333
+ let t = n.clone().normalize(), r = e.clone().normalize();
334
+ if (Math.abs(r.dot(t)) < .9999) return e;
335
+ let a = Math.abs(t.dot(new z.Vector3(0, 0, 1))) > .9 ? new z.Vector3(0, 1, 0) : new z.Vector3(0, 0, 1), o = new z.Vector3().crossVectors(t, a).normalize(), i = .5 * Math.PI / 180;
336
+ return r.multiplyScalar(Math.cos(i)).add(o.multiplyScalar(Math.sin(i))).normalize();
337
+ }
338
+ var Un = (e) => 1 - Math.pow(1 - e, 3);
339
+ function _n(e, n, t, r, a, o = 250) {
340
+ let i = e.position.clone(), l = n.target.clone(), s = performance.now(), c = null, u = () => {
341
+ c = null;
342
+ let d = Un(Math.min((performance.now() - s) / o, 1));
343
+ e.position.lerpVectors(i, t, d), n.target.lerpVectors(l, r, d), a(), n.update(), d < 1 && (c = requestAnimationFrame(u));
344
+ };
345
+ return c = requestAnimationFrame(u), { cancel: () => {
346
+ c !== null && (cancelAnimationFrame(c), c = null);
347
+ } };
348
+ }
349
+ function Vn(e) {
350
+ if (!(e > 0) || !Number.isFinite(e)) return 1;
351
+ let t = Math.pow(10, Math.floor(Math.log10(e))), r = e / t;
352
+ return (r >= 5 ? 5 : r >= 2 ? 2 : 1) * t;
353
+ }
354
+ var zn = `
355
+ varying vec3 vWorldPos;
356
+ void main() {
357
+ vec4 world = modelMatrix * vec4(position, 1.0);
358
+ vWorldPos = world.xyz;
359
+ gl_Position = projectionMatrix * viewMatrix * world;
360
+ }
361
+ `;
362
+ var Gn = `
363
+ precision highp float;
364
+ varying vec3 vWorldPos;
365
+
366
+ uniform vec2 uAxes; // indices (0=x,1=y,2=z) of the two in-plane world axes
367
+ uniform float uCell;
368
+ uniform float uMajor;
369
+ uniform vec3 uCellColor;
370
+ uniform vec3 uMajorColor;
371
+ uniform vec3 uCenter; // fade center (camera position), projected onto plane
372
+ uniform float uFade;
373
+
374
+ // Antialiased grid line intensity for a given spacing, using screen-space derivatives so lines
375
+ // stay ~1px regardless of zoom (the standard "pristine grid" technique).
376
+ float gridLine(vec2 coord, float spacing) {
377
+ vec2 c = coord / spacing;
378
+ vec2 d = fwidth(c);
379
+ vec2 g = abs(fract(c - 0.5) - 0.5) / max(d, 1e-6);
380
+ float line = min(g.x, g.y);
381
+ return 1.0 - clamp(line, 0.0, 1.0);
382
+ }
383
+
384
+ // Index a vec3 by a float axis id (0/1/2) without dynamic indexing (WebGL1-safe).
385
+ float axis(vec3 v, float i) {
386
+ return i < 0.5 ? v.x : (i < 1.5 ? v.y : v.z);
387
+ }
388
+
389
+ void main() {
390
+ // Pick the two in-plane world coordinates.
391
+ vec2 coord = vec2(axis(vWorldPos, uAxes.x), axis(vWorldPos, uAxes.y));
392
+
393
+ float minor = gridLine(coord, uCell);
394
+ float major = gridLine(coord, uCell * uMajor);
395
+
396
+ vec3 color = mix(uCellColor, uMajorColor, major);
397
+ float alpha = max(minor, major);
398
+
399
+ // Radial fade from the camera-projected center.
400
+ float dist = distance(vWorldPos, uCenter);
401
+ float fade = 1.0 - clamp(dist / uFade, 0.0, 1.0);
402
+ alpha *= fade * fade;
403
+
404
+ if (alpha < 0.001) discard;
405
+ gl_FragColor = vec4(color, alpha);
406
+ }
407
+ `;
408
+ function wt(e = {}) {
409
+ let { cellSize: n = 1, majorEvery: t = 10, cellColor: r = 8947848, majorColor: a = 4473924, fadeDistance: o = 100, plane: i = "y" } = e, l = i === "y" ? new z.Vector2(0, 2) : i === "z" ? new z.Vector2(0, 1) : new z.Vector2(1, 2), s = 2.5, c = new z.PlaneGeometry(1, 1);
410
+ i === "y" ? c.rotateX(-Math.PI / 2) : i === "x" && c.rotateY(Math.PI / 2);
411
+ let u = new z.ShaderMaterial({
412
+ vertexShader: zn,
413
+ fragmentShader: Gn,
414
+ transparent: true,
415
+ depthWrite: false,
416
+ side: z.DoubleSide,
417
+ uniforms: {
418
+ uAxes: { value: l },
419
+ uCell: { value: n },
420
+ uMajor: { value: t },
421
+ uCellColor: { value: new z.Color(r) },
422
+ uMajorColor: { value: new z.Color(a) },
423
+ uCenter: { value: new z.Vector3() },
424
+ uFade: { value: o }
425
+ }
426
+ }), d = new z.Mesh(c, u);
427
+ d.name = "grid", d.userData.id = "grid", d.renderOrder = -1;
428
+ let E = o, T = o * s, v = new z.Vector3();
429
+ return {
430
+ object: d,
431
+ update: (y) => {
432
+ i === "y" ? (d.position.set(y.x, 0, y.z), v.set(y.x, 0, y.z)) : i === "z" ? (d.position.set(y.x, y.y, 0), v.set(y.x, y.y, 0)) : (d.position.set(0, y.y, y.z), v.set(0, y.y, y.z)), u.uniforms.uCenter.value.copy(v), d.scale.setScalar(T);
433
+ },
434
+ fitToContent: (y) => {
435
+ if (y.isEmpty()) return;
436
+ let m = y.getSize(new z.Vector3()), g = (M, p) => p === 0 ? M.x : p === 1 ? M.y : M.z, R = Math.max(g(m, l.x), g(m, l.y));
437
+ if (!(R > 0) || !Number.isFinite(R)) return;
438
+ let x = 20;
439
+ u.uniforms.uCell.value = Vn(R / x), E = R * 2, u.uniforms.uFade.value = E, T = E * s;
440
+ },
441
+ setVisible: (y) => {
442
+ d.visible = y;
443
+ },
444
+ dispose: () => {
445
+ d.removeFromParent(), c.dispose(), u.dispose();
446
+ }
447
+ };
448
+ }
449
+ function Mt(e) {
450
+ let { camera: n, domElement: t, controller: r } = e, a = new ViewHelper(n, t);
451
+ a.setLabels("X", "Y", "Z");
452
+ let o = true, i = 128, l = new z.Raycaster(), s = new z.OrthographicCamera(-2, 2, 2, -2, 0, 4);
453
+ s.position.set(0, 0, 2), s.updateMatrixWorld();
454
+ let c = {
455
+ posX: new z.Vector3(1, 0, 0),
456
+ negX: new z.Vector3(-1, 0, 0),
457
+ posY: new z.Vector3(0, 1, 0),
458
+ negY: new z.Vector3(0, -1, 0),
459
+ posZ: new z.Vector3(0, 0, 1),
460
+ negZ: new z.Vector3(0, 0, -1)
461
+ }, u = (E) => {
462
+ let T = t.getBoundingClientRect(), v = T.left + t.offsetWidth - i - a.location.right, y = T.top + t.offsetHeight - i - a.location.bottom, m = new z.Vector2((E.clientX - v) / i * 2 - 1, -((E.clientY - y) / i) * 2 + 1);
463
+ if (Math.abs(m.x) > 1 || Math.abs(m.y) > 1) return null;
464
+ a.quaternion.copy(n.quaternion).invert(), a.updateMatrixWorld(), l.setFromCamera(m, s);
465
+ let g = l.intersectObjects(a.children, false);
466
+ for (let R of g) {
467
+ let x = R.object.userData?.type;
468
+ if (typeof x == "string" && x in c) return x;
469
+ }
470
+ return null;
471
+ };
472
+ return {
473
+ render: (E) => {
474
+ if (!o) return;
475
+ let T = E.autoClear;
476
+ E.autoClear = false, a.render(E), E.autoClear = T;
477
+ },
478
+ update: () => {},
479
+ handleClick: (E) => {
480
+ if (!o) return false;
481
+ let T = u(E);
482
+ return T ? (r.getProjection() === "orthographic" && r.setProjection("perspective"), r.setViewDirection(c[T], false), true) : false;
483
+ },
484
+ isAnimating: false,
485
+ setVisible: (E) => {
486
+ o = E;
487
+ },
488
+ isVisible: () => o,
489
+ dispose: () => a.dispose()
490
+ };
491
+ }
492
+ function De(e, n, t) {
493
+ let o = Math.cos(Math.PI / 180 * t), i = e.length / 3;
494
+ if (i >= 67108864) throw new Error(`extractEdgeSegments: ${i} vertices exceeds 2^26 limit`);
495
+ let l = new Float64Array(i), s = new Float64Array(i), c = new Float64Array(i);
496
+ for (let f = 0; f < i; f++) l[f] = Math.round(e[3 * f] * 1e4), s[f] = Math.round(e[3 * f + 1] * 1e4), c[f] = Math.round(e[3 * f + 2] * 1e4);
497
+ let u = 16;
498
+ for (; u < i * 2;) u <<= 1;
499
+ let d = u - 1, E = new Int32Array(u).fill(-1), T = new Int32Array(i);
500
+ for (let f = 0; f < i; f++) {
501
+ let h = (Math.imul(l[f] | 0, 73856093) ^ Math.imul(s[f] | 0, 19349663) ^ Math.imul(c[f] | 0, 83492791)) & d;
502
+ for (;;) {
503
+ let b = E[h];
504
+ if (b === -1) {
505
+ E[h] = f, T[f] = f;
506
+ break;
507
+ }
508
+ if (l[b] === l[f] && s[b] === s[f] && c[b] === c[f]) {
509
+ T[f] = b;
510
+ break;
511
+ }
512
+ h = h + 1 & d;
513
+ }
514
+ }
515
+ let v = /* @__PURE__ */ new Float32Array(4096), y = 0, m = (f, h) => {
516
+ if (y + 6 > v.length) {
517
+ let b = new Float32Array(v.length * 2);
518
+ b.set(v), v = b;
519
+ }
520
+ v[y++] = e[3 * f], v[y++] = e[3 * f + 1], v[y++] = e[3 * f + 2], v[y++] = e[3 * h], v[y++] = e[3 * h + 1], v[y++] = e[3 * h + 2];
521
+ }, g = /* @__PURE__ */ new Map(), R = [], x = [], M = [], p = (n ? n.length : i) / 3;
522
+ for (let f = 0; f < p; f++) {
523
+ let h = n ? n[3 * f] : 3 * f, b = n ? n[3 * f + 1] : 3 * f + 1, C = n ? n[3 * f + 2] : 3 * f + 2, H = T[h], L = T[b], P = T[C];
524
+ if (H === L || L === P || P === H) continue;
525
+ let k = e[3 * C] - e[3 * b], O = e[3 * C + 1] - e[3 * b + 1], I = e[3 * C + 2] - e[3 * b + 2], S = e[3 * h] - e[3 * b], D = e[3 * h + 1] - e[3 * b + 1], G = e[3 * h + 2] - e[3 * b + 2], j = O * G - I * D, $ = I * S - k * G, U = k * D - O * S, Q = j * j + $ * $ + U * U;
526
+ if (Q > 0) {
527
+ let K = 1 / Math.sqrt(Q);
528
+ j *= K, $ *= K, U *= K;
529
+ } else j = 0, $ = 0, U = 0;
530
+ for (let K = 0; K < 3; K++) {
531
+ let de, fe, ne, se;
532
+ K === 0 ? (de = h, fe = b, ne = H, se = L) : K === 1 ? (de = b, fe = C, ne = L, se = P) : (de = C, fe = h, ne = P, se = H);
533
+ let Ae = se * 67108864 + ne, me = g.get(Ae);
534
+ if (me !== void 0 && me !== -1) j * M[3 * me] + $ * M[3 * me + 1] + U * M[3 * me + 2] <= o && m(de, fe), g.set(Ae, -1);
535
+ else {
536
+ let ge = ne * 67108864 + se;
537
+ if (!g.has(ge)) {
538
+ let je = R.length;
539
+ g.set(ge, je), R.push(de), x.push(fe), M.push(j, $, U);
540
+ }
541
+ }
542
+ }
543
+ }
544
+ for (let f of g.values()) f !== -1 && m(R[f], x[f]);
545
+ return v.slice(0, y);
546
+ }
547
+ function Ct() {
548
+ return [
549
+ `const extract = ${De.toString()};`,
550
+ "self.onmessage = (event) => {",
551
+ " const { id, positions, index, thresholdAngle } = event.data;",
552
+ " try {",
553
+ " const segments = extract(positions, index, thresholdAngle);",
554
+ " self.postMessage({ id, segments }, [segments.buffer]);",
555
+ " } catch (error) {",
556
+ " self.postMessage({ id, error: String((error && error.message) || error) });",
557
+ " }",
558
+ "};"
559
+ ].join(`
560
+ `);
561
+ }
562
+ var xe = "edge-overlay";
563
+ var Qe = "triangle-cap";
564
+ var qn = 2236962;
565
+ var Yn = 1.5;
566
+ var Xn = 44;
567
+ var Kn = .75;
568
+ var Zn = 4e6;
569
+ var Jn = 2e6;
570
+ var Qn = 25e3;
571
+ var Ht = 128 * 1024 * 1024;
572
+ var er = 80;
573
+ var At = 20;
574
+ var tr = 1;
575
+ var nr = 2;
576
+ function Dt(e, n) {
577
+ let t = Array.isArray(e.material) ? e.material : [e.material];
578
+ for (let r of t) r && (r.polygonOffset = n, r.polygonOffsetFactor = n ? tr : 0, r.polygonOffsetUnits = n ? nr : 0);
579
+ }
580
+ function Ye(e) {
581
+ let n = e.getAttribute("position");
582
+ return n ? (e.index ? e.index.count : n.count) / 3 : 0;
583
+ }
584
+ function Lt(e) {
585
+ let n = e.getAttribute("position");
586
+ if (!n || n.isInterleavedBufferAttribute || n.itemSize !== 3 || !(n.array instanceof Float32Array) || n.count >= 67108864) return null;
587
+ let t = e.index;
588
+ return t && !(t.array instanceof Uint32Array) && !(t.array instanceof Uint16Array) ? null : {
589
+ positions: n.array,
590
+ index: t ? t.array : null
591
+ };
592
+ }
593
+ function Ot(e, n) {
594
+ let r = 2166136261, a = (s) => {
595
+ r ^= s, r = Math.imul(r, 16777619);
596
+ }, o = new Uint32Array(e.positions.buffer, e.positions.byteOffset, e.positions.length), i = Math.min(4096, o.length);
597
+ for (let s = 0; s < i; s++) a(o[s]);
598
+ for (let s = Math.max(i, o.length - 4096); s < o.length; s++) a(o[s]);
599
+ let l = 0;
600
+ if (e.index) {
601
+ l = e.index.length;
602
+ let s = Math.min(4096, l);
603
+ for (let c = 0; c < s; c++) a(e.index[c]);
604
+ for (let c = Math.max(s, l - 4096); c < l; c++) a(e.index[c]);
605
+ }
606
+ return `${n}:${e.positions.length}:${l}:${r >>> 0}`;
607
+ }
608
+ var ce = /* @__PURE__ */ new Map();
609
+ var Le = 0;
610
+ function It(e) {
611
+ let n = ce.get(e);
612
+ return n && (ce.delete(e), ce.set(e, n)), n;
613
+ }
614
+ function Pt(e, n) {
615
+ if (n.byteLength > Ht) return;
616
+ let t = ce.get(e);
617
+ for (t && (Le -= t.byteLength, ce.delete(e)), ce.set(e, n), Le += n.byteLength; Le > Ht;) {
618
+ let r = ce.keys().next().value;
619
+ Le -= ce.get(r).byteLength, ce.delete(r);
620
+ }
621
+ }
622
+ function rr(e, n) {
623
+ let t = new z.EdgesGeometry(e, n), r = t.attributes.position ? t.attributes.position.array : /* @__PURE__ */ new Float32Array(0);
624
+ return t.dispose(), r;
625
+ }
626
+ function Xe(e, n) {
627
+ let t = Lt(e);
628
+ if (!t) return rr(e, n);
629
+ let r = Ot(t, n), a = It(r);
630
+ if (a) return a;
631
+ let o = De(t.positions, t.index, n);
632
+ return Pt(r, o), o;
633
+ }
634
+ var Ee;
635
+ var Re = /* @__PURE__ */ new Map();
636
+ var or = 1;
637
+ function ar() {
638
+ if (Ee !== void 0) return Ee;
639
+ if (typeof Worker > "u" || typeof Blob > "u" || typeof URL > "u" || typeof URL.createObjectURL != "function") return Ee = null, null;
640
+ try {
641
+ let e = URL.createObjectURL(new Blob([Ct()], { type: "text/javascript" })), n = new Worker(e);
642
+ n.onmessage = (t) => {
643
+ let { id: r, segments: a, error: o } = t.data, i = Re.get(r);
644
+ i && (Re.delete(r), a ? i.resolve(a) : i.reject(new Error(o ?? "edge extraction failed in worker")));
645
+ }, n.onerror = () => {
646
+ for (let t of Re.values()) t.reject(/* @__PURE__ */ new Error("edge extraction worker crashed"));
647
+ Re.clear(), n.terminate(), Ee = null;
648
+ }, Ee = n;
649
+ } catch {
650
+ Ee = null;
651
+ }
652
+ return Ee;
653
+ }
654
+ function ir(e, n, t) {
655
+ return new Promise((r, a) => {
656
+ let o = or++;
657
+ Re.set(o, {
658
+ resolve: r,
659
+ reject: a
660
+ });
661
+ let i = n.positions.slice(), l = n.index ? n.index.slice() : null, s = [i.buffer];
662
+ l && s.push(l.buffer), e.postMessage({
663
+ id: o,
664
+ positions: i,
665
+ index: l,
666
+ thresholdAngle: t
667
+ }, s);
668
+ });
669
+ }
670
+ var qe = /* @__PURE__ */ new Map();
671
+ function sr(e, n) {
672
+ let t = Lt(e);
673
+ if (!t || Ye(e) < Qn) return Promise.resolve(Xe(e, n));
674
+ let r = Ot(t, n), a = It(r);
675
+ if (a) return Promise.resolve(a);
676
+ let o = qe.get(r);
677
+ if (o) return o;
678
+ let i = ar();
679
+ if (!i) return Promise.resolve(Xe(e, n));
680
+ let l = ir(i, t, n).catch(() => De(t.positions, t.index, n)).then((s) => (Pt(r, s), s)).finally(() => {
681
+ qe.delete(r);
682
+ });
683
+ return qe.set(r, l), l;
684
+ }
685
+ var Oe = /* @__PURE__ */ new WeakMap();
686
+ function Ke(e, n) {
687
+ return Oe.get(e)?.get(n);
688
+ }
689
+ function Ft(e, n, t) {
690
+ let r = Oe.get(e);
691
+ r || (r = /* @__PURE__ */ new Map(), Oe.set(e, r));
692
+ let a = new LineSegmentsGeometry();
693
+ a.setPositions(t);
694
+ let o = {
695
+ geometry: a,
696
+ refCount: 0,
697
+ segmentCount: t.length / 6
698
+ };
699
+ return r.set(n, o), o;
700
+ }
701
+ function lr(e) {
702
+ let n = e.userData, t = n.edgeSource && Oe.get(n.edgeSource), r = n.edgeThresholdAngle != null ? t?.get(n.edgeThresholdAngle) : void 0;
703
+ if (!r || r.geometry !== e.geometry) {
704
+ e.geometry.dispose();
705
+ return;
706
+ }
707
+ r.refCount -= 1, r.refCount <= 0 && (r.geometry.dispose(), t.delete(n.edgeThresholdAngle));
708
+ }
709
+ function Bt(e) {
710
+ return {
711
+ forcedColor: e.color != null ? new z.Color(e.color) : null,
712
+ darken: z.MathUtils.clamp(e.darken ?? Kn, 0, 1),
713
+ width: e.width ?? Yn,
714
+ thresholdAngle: e.thresholdAngle ?? Xn,
715
+ distanceFade: e.distanceFade ?? true,
716
+ maxTriangles: e.maxTriangles ?? Zn,
717
+ maxSegments: e.maxSegments ?? Jn
718
+ };
719
+ }
720
+ function cr(e, n) {
721
+ let r = (Array.isArray(e.material) ? e.material[0] : e.material)?.color;
722
+ return r ? r.clone().multiplyScalar(1 - n) : new z.Color(qn);
723
+ }
724
+ var Ie = class {
725
+ constructor(n) {
726
+ h(this, "options", n);
727
+ h(this, "byKey", /* @__PURE__ */ new Map());
728
+ }
729
+ for(n, t) {
730
+ let r = this.options.forcedColor ?? cr(n, this.options.darken), a = r.getHex() * 2 + (t ? 1 : 0), o = this.byKey.get(a);
731
+ return o || (o = ur(r, this.options.width, t), this.byKey.set(a, o)), o;
732
+ }
733
+ disposeUnused(n) {
734
+ let t = new Set(n.map((r) => r.material));
735
+ for (let r of this.byKey.values()) t.has(r) || r.dispose();
736
+ }
737
+ };
738
+ function ur(e, n, t) {
739
+ let r = new LineMaterial({ color: e });
740
+ return r.linewidth = n, t && (r.transparent = true), r;
741
+ }
742
+ function dr(e, n, t, r, a) {
743
+ n.refCount += 1;
744
+ let o = new LineSegments2(n.geometry, t);
745
+ return o.userData.kind = xe, o.userData.edgeSource = e, o.userData.edgeThresholdAngle = r, o.raycast = () => {}, a && pr(o), o;
746
+ }
747
+ var St = new z.Vector3();
748
+ var mr = new z.Vector3();
749
+ function fr(e, n, t) {
750
+ e.geometry.boundingSphere || e.geometry.computeBoundingSphere();
751
+ let r = e.geometry.boundingSphere;
752
+ if (!r || r.radius <= 0) return Infinity;
753
+ let a = r.radius * e.matrixWorld.getMaxScaleOnAxis();
754
+ if (St.copy(r.center).applyMatrix4(e.matrixWorld), n.isPerspectiveCamera) {
755
+ let o = n, i = mr.setFromMatrixPosition(n.matrixWorld).distanceTo(St);
756
+ if (i <= a) return Infinity;
757
+ return a / (i * Math.tan(z.MathUtils.degToRad(o.fov) * .5)) * t;
758
+ }
759
+ if (n.isOrthographicCamera) {
760
+ let o = n, i = (o.top - o.bottom) / o.zoom;
761
+ return i > 0 ? 2 * a / i * t : Infinity;
762
+ }
763
+ return Infinity;
764
+ }
765
+ function pr(e) {
766
+ e.onBeforeRender = (n, t, r) => {
767
+ LineSegments2.prototype.onBeforeRender.call(e, n);
768
+ let a = e.material, o = fr(e, r, a.resolution.y);
769
+ a.opacity = z.MathUtils.clamp((o - At) / (er - At), 0, 1);
770
+ };
771
+ }
772
+ function Er(e) {
773
+ return e.userData?.kind === xe;
774
+ }
775
+ function kt(e, n) {
776
+ let t = [];
777
+ return e.traverse((r) => {
778
+ if (r instanceof z.Mesh && !(r.userData.id === "floor" || r.userData.id === "grid") && r.userData.kind !== "edge-overlay" && !r.children.some((a) => a.userData?.kind === "edge-overlay") && r.geometry) {
779
+ if (Ye(r.geometry) > n) {
780
+ r.userData.edgesSkipped = Qe, console.debug(`[edges] skipping mesh over triangle cap (${Ye(r.geometry)} > ${n})`);
781
+ return;
782
+ }
783
+ delete r.userData.edgesSkipped, t.push(r);
784
+ }
785
+ }), t;
786
+ }
787
+ function Ut(e, n, t, r) {
788
+ let a = r.distanceFade && n.segmentCount <= r.maxSegments, o = dr(e.geometry, n, t.for(e, a), r.thresholdAngle, a);
789
+ return e.add(o), Dt(e, true), o;
790
+ }
791
+ function La(e, n = {}) {
792
+ let t = Bt(n), r = new Ie(t), a = [];
793
+ for (let o of kt(e, t.maxTriangles)) {
794
+ let i = Ke(o.geometry, t.thresholdAngle) ?? Ft(o.geometry, t.thresholdAngle, Xe(o.geometry, t.thresholdAngle));
795
+ a.push(Ut(o, i, r, t));
796
+ }
797
+ return r.disposeUnused(a), a;
798
+ }
799
+ var _t = /* @__PURE__ */ new WeakMap();
800
+ function Ze(e) {
801
+ return _t.get(e) ?? 0;
802
+ }
803
+ function hr(e, n) {
804
+ for (let t = e; t; t = t.parent) if (t === n) return true;
805
+ return false;
806
+ }
807
+ async function Vt(e, n = {}) {
808
+ let t = Bt(n), r = new Ie(t), a = Ze(e), o = [], i = kt(e, t.maxTriangles).map(async (l) => {
809
+ let s = Ke(l.geometry, t.thresholdAngle);
810
+ if (!s) {
811
+ let c = await sr(l.geometry, t.thresholdAngle);
812
+ if (Ze(e) !== a || !hr(l, e) || l.children.some((u) => u.userData?.kind === "edge-overlay")) return;
813
+ s = Ke(l.geometry, t.thresholdAngle), s || (s = Ft(l.geometry, t.thresholdAngle, c));
814
+ }
815
+ o.push(Ut(l, s, r, t));
816
+ });
817
+ return await Promise.all(i), r.disposeUnused(o), o;
818
+ }
819
+ function zt(e) {
820
+ _t.set(e, Ze(e) + 1);
821
+ let n = [];
822
+ e.traverse((r) => {
823
+ r instanceof LineSegments2 && Er(r) && n.push(r);
824
+ });
825
+ let t = /* @__PURE__ */ new Set();
826
+ for (let r of n) lr(r), t.add(r.material), r.parent instanceof z.Mesh && Dt(r.parent, false), r.removeFromParent();
827
+ return t.forEach((r) => r.dispose()), n.length;
828
+ }
829
+ var et = {
830
+ uniforms: {
831
+ tDiffuse: { value: null },
832
+ tNormal: { value: null },
833
+ tDepth: { value: null },
834
+ uResolution: { value: new z.Vector2(1, 1) },
835
+ uColor: { value: new z.Color(2236962) },
836
+ uOpacity: { value: 1 },
837
+ uNormalThreshold: { value: .4 },
838
+ uDepthThreshold: { value: .02 },
839
+ uThickness: { value: 1 },
840
+ uNear: { value: .1 },
841
+ uFar: { value: 1e3 },
842
+ uPerspective: { value: 1 }
843
+ },
844
+ vertexShader: `
845
+ varying vec2 vUv;
846
+ void main() {
847
+ vUv = uv;
848
+ gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);
849
+ }
850
+ `,
851
+ fragmentShader: `
852
+ uniform sampler2D tDiffuse;
853
+ uniform sampler2D tNormal;
854
+ uniform sampler2D tDepth;
855
+ uniform vec2 uResolution;
856
+ uniform vec3 uColor;
857
+ uniform float uOpacity;
858
+ uniform float uNormalThreshold;
859
+ uniform float uDepthThreshold;
860
+ uniform float uThickness;
861
+ uniform float uNear;
862
+ uniform float uFar;
863
+ uniform float uPerspective;
864
+ varying vec2 vUv;
865
+
866
+ float viewZOf(const in float depth) {
867
+ float perspective = (uNear * uFar) / ((uFar - uNear) * depth - uFar);
868
+ float orthographic = -(depth * (uFar - uNear) + uNear);
869
+ return mix(orthographic, perspective, uPerspective);
870
+ }
871
+
872
+ void main() {
873
+ vec4 color = texture2D(tDiffuse, vUv);
874
+ vec2 texel = uThickness / uResolution;
875
+
876
+ // Roberts cross over the two diagonal pairs.
877
+ vec2 offsetA = vec2(texel.x, texel.y);
878
+ vec2 offsetB = vec2(texel.x, -texel.y);
879
+
880
+ float z0 = viewZOf(texture2D(tDepth, vUv + offsetA).x);
881
+ float z1 = viewZOf(texture2D(tDepth, vUv - offsetA).x);
882
+ float z2 = viewZOf(texture2D(tDepth, vUv + offsetB).x);
883
+ float z3 = viewZOf(texture2D(tDepth, vUv - offsetB).x);
884
+ float zCenter = viewZOf(texture2D(tDepth, vUv).x);
885
+ // Relative difference: a constant threshold in absolute Z turns distant geometry into
886
+ // noise (depth precision) and near geometry blind; normalizing by the center depth keeps
887
+ // the response scale-invariant across the viewer's mm\u2192m scenes.
888
+ float depthDelta = (abs(z0 - z1) + abs(z2 - z3)) / max(abs(zCenter), 1e-6);
889
+ float depthEdge = step(uDepthThreshold, depthDelta);
890
+
891
+ vec3 n0 = texture2D(tNormal, vUv + offsetA).rgb * 2.0 - 1.0;
892
+ vec3 n1 = texture2D(tNormal, vUv - offsetA).rgb * 2.0 - 1.0;
893
+ vec3 n2 = texture2D(tNormal, vUv + offsetB).rgb * 2.0 - 1.0;
894
+ vec3 n3 = texture2D(tNormal, vUv - offsetB).rgb * 2.0 - 1.0;
895
+ float normalDelta = (1.0 - dot(n0, n1)) + (1.0 - dot(n2, n3));
896
+ float normalEdge = step(uNormalThreshold, normalDelta);
897
+
898
+ float edge = max(depthEdge, normalEdge) * uOpacity;
899
+ gl_FragColor = vec4(mix(color.rgb, uColor, edge), color.a);
900
+ }
901
+ `
902
+ };
903
+ var Pe = class extends Pass {
904
+ constructor(t, r, a, o, i = {}) {
905
+ super();
906
+ h(this, "camera");
907
+ h(this, "scene");
908
+ h(this, "normalMaterial");
909
+ h(this, "edgeMaterial");
910
+ h(this, "fsQuad");
911
+ h(this, "normalTarget", null);
912
+ h(this, "width");
913
+ h(this, "height");
914
+ this.scene = t, this.camera = r, this.width = Math.max(1, a), this.height = Math.max(1, o), this.normalMaterial = new z.MeshNormalMaterial(), this.normalMaterial.blending = z.NoBlending, this.edgeMaterial = new z.ShaderMaterial({
915
+ uniforms: z.UniformsUtils.clone(et.uniforms),
916
+ vertexShader: et.vertexShader,
917
+ fragmentShader: et.fragmentShader
918
+ });
919
+ let l = this.edgeMaterial.uniforms;
920
+ l.uColor.value = new z.Color(i.color ?? 2236962), l.uOpacity.value = i.opacity ?? 1, l.uNormalThreshold.value = i.normalThreshold ?? .4, l.uDepthThreshold.value = i.depthThreshold ?? .02, l.uThickness.value = i.thickness ?? 1, this.fsQuad = new FullScreenQuad(this.edgeMaterial), this.needsSwap = true;
921
+ }
922
+ acquireNormalTarget() {
923
+ if (!this.normalTarget) {
924
+ let t = new z.DepthTexture(this.width, this.height);
925
+ this.normalTarget = new z.WebGLRenderTarget(this.width, this.height, {
926
+ minFilter: z.NearestFilter,
927
+ magFilter: z.NearestFilter,
928
+ depthTexture: t
929
+ });
930
+ }
931
+ return this.normalTarget;
932
+ }
933
+ setSize(t, r) {
934
+ this.width = Math.max(1, t), this.height = Math.max(1, r), this.normalTarget?.setSize(this.width, this.height);
935
+ }
936
+ render(t, r, a) {
937
+ let o = this.acquireNormalTarget(), i = t.getRenderTarget(), l = t.autoClear, s = t.getClearColor(new z.Color()), c = t.getClearAlpha(), u = this.scene.overrideMaterial;
938
+ t.setRenderTarget(o), t.setClearColor(7829503, 1), t.autoClear = true, this.scene.overrideMaterial = this.normalMaterial, t.render(this.scene, this.camera), this.scene.overrideMaterial = u, t.setClearColor(s, c), t.autoClear = l;
939
+ let d = this.edgeMaterial.uniforms;
940
+ d.tDiffuse.value = a.texture, d.tNormal.value = o.texture, d.tDepth.value = o.depthTexture, d.uResolution.value.set(this.width, this.height);
941
+ let E = this.camera;
942
+ d.uPerspective.value = E.isPerspectiveCamera ? 1 : 0, d.uNear.value = this.camera.near ?? .1, d.uFar.value = this.camera.far ?? 1e3, t.setRenderTarget(this.renderToScreen ? null : r), this.fsQuad.render(t), t.setRenderTarget(i);
943
+ }
944
+ dispose() {
945
+ this.normalTarget?.dispose(), this.normalMaterial.dispose(), this.edgeMaterial.dispose(), this.fsQuad.dispose();
946
+ }
947
+ };
948
+ function Gt(e, n, t, r, a, o) {
949
+ let i = new EffectComposer(e), l = new RenderPass(n, t);
950
+ i.addPass(l);
951
+ let s = null;
952
+ (o.ambientOcclusion ?? true) && (s = new GTAOPass(n, t, r, a), s.blendIntensity = o.aoIntensity ?? 1, s.updateGtaoMaterial({ screenSpaceRadius: true }), i.addPass(s));
953
+ let u = new Pe(n, t, r, a, typeof o.edgeDetection == "object" ? o.edgeDetection : {});
954
+ u.enabled = !!o.edgeDetection, i.addPass(u);
955
+ let d = new SMAAPass();
956
+ i.addPass(d);
957
+ let E = new OutputPass();
958
+ i.addPass(E), e.toneMapping = o.toneMapping, e.toneMappingExposure = o.toneMappingExposure;
959
+ let T = o.aoPixelRatio ?? 1;
960
+ return i.setSize(r, a), {
961
+ render: (v) => i.render(v),
962
+ setSize: (v, y, m) => {
963
+ i.setPixelRatio(Math.min(m, T)), i.setSize(v, y);
964
+ },
965
+ setCamera: (v) => {
966
+ if (l.camera = v, u.camera = v, !s) return;
967
+ s.camera = v;
968
+ let y = v.isPerspectiveCamera ? 1 : 0;
969
+ s.gtaoMaterial.defines.PERSPECTIVE_CAMERA !== y && (s.gtaoMaterial.defines.PERSPECTIVE_CAMERA = y, s.gtaoMaterial.needsUpdate = true);
970
+ },
971
+ setEdgeDetection: (v) => {
972
+ u.enabled = v;
973
+ },
974
+ edgeDetectionEnabled: () => u.enabled,
975
+ dispose: () => {
976
+ i.dispose(), s?.dispose(), u.dispose(), d.dispose(), E.dispose();
977
+ }
978
+ };
979
+ }
980
+ function jt(e, n) {
981
+ let t = new CSS2DRenderer(), r = t.domElement;
982
+ r.style.position = "absolute", r.style.top = "0", r.style.left = "0", r.style.overflow = "hidden", r.style.pointerEvents = "none", r.style.zIndex = "30", getComputedStyle(e).position === "static" && (e.style.position = "relative"), e.appendChild(r);
983
+ let a = {
984
+ width: e.clientWidth || 1,
985
+ height: e.clientHeight || 1
986
+ };
987
+ t.setSize(a.width, a.height);
988
+ let o = new z.Group();
989
+ o.name = "label-layer", o.userData.id = "label-layer", n.add(o);
990
+ let i = /* @__PURE__ */ new Set();
991
+ return {
992
+ addLabel: (s, c, u) => {
993
+ let d = document.createElement("div");
994
+ d.textContent = s, u ? d.className = u : Object.assign(d.style, {
995
+ padding: "2px 6px",
996
+ borderRadius: "4px",
997
+ background: "rgba(20, 20, 20, 0.78)",
998
+ color: "#fff",
999
+ font: "12px/1.3 system-ui, sans-serif",
1000
+ whiteSpace: "pre",
1001
+ textAlign: "center",
1002
+ userSelect: "none"
1003
+ }), d.style.pointerEvents = "none";
1004
+ let E = new CSS2DObject(d);
1005
+ return E.position.copy(c), o.add(E), i.add(E), {
1006
+ object: E,
1007
+ setPosition: (T) => E.position.copy(T),
1008
+ setText: (T) => {
1009
+ d.textContent = T;
1010
+ },
1011
+ remove: () => {
1012
+ E.removeFromParent(), d.remove(), i.delete(E);
1013
+ }
1014
+ };
1015
+ },
1016
+ render: (s, c) => t.render(s, c),
1017
+ setSize: (s, c) => t.setSize(s, c),
1018
+ dispose: () => {
1019
+ i.forEach((s) => {
1020
+ s.removeFromParent(), s.element.remove();
1021
+ }), i.clear(), o.removeFromParent(), r.remove();
1022
+ }
1023
+ };
1024
+ }
1025
+ var Sr = 12;
1026
+ var Dr = 16763904;
1027
+ var Wt = .015;
1028
+ var $t = {
1029
+ Millimeters: {
1030
+ metersPerUnit: 1 / 1e3,
1031
+ suffix: "mm"
1032
+ },
1033
+ Centimeters: {
1034
+ metersPerUnit: 1 / 100,
1035
+ suffix: "cm"
1036
+ },
1037
+ Meters: {
1038
+ metersPerUnit: 1,
1039
+ suffix: "m"
1040
+ },
1041
+ Inches: {
1042
+ metersPerUnit: 1 / 39.37,
1043
+ suffix: "in"
1044
+ },
1045
+ Feet: {
1046
+ metersPerUnit: 1 / 3.28084,
1047
+ suffix: "ft"
1048
+ }
1049
+ };
1050
+ function Lr(e) {
1051
+ let n = e && $t[e] || $t.Meters;
1052
+ return (t) => `${(t / n.metersPerUnit).toPrecision(3)} ${n.suffix}`;
1053
+ }
1054
+ function Or(e, n) {
1055
+ if (e.isOrthographicCamera) {
1056
+ let r = e;
1057
+ return Math.abs(r.top - r.bottom) / (r.zoom || 1) * Wt;
1058
+ }
1059
+ return ((n ? e.position.distanceTo(n) : e.position.length()) || 1) * Wt;
1060
+ }
1061
+ function Ir(e) {
1062
+ let n = e.object;
1063
+ if (n instanceof z.Mesh) return e.face ? [
1064
+ e.face.a,
1065
+ e.face.b,
1066
+ e.face.c
1067
+ ] : null;
1068
+ if (n instanceof z.Points) return e.index != null ? [e.index] : null;
1069
+ if (n instanceof z.Line) {
1070
+ if (e.index == null) return null;
1071
+ let t = n.geometry.index;
1072
+ return t ? e.index + 1 >= t.count ? null : [t.getX(e.index), t.getX(e.index + 1)] : [e.index, e.index + 1];
1073
+ }
1074
+ return null;
1075
+ }
1076
+ function Pr(e, n, t, r) {
1077
+ let a = e.point.clone(), o = e.object, i = Ir(e);
1078
+ if (!i || !o.geometry) return a;
1079
+ let l = o.geometry.attributes.position;
1080
+ if (!l) return a;
1081
+ let s = (E) => {
1082
+ let T = E.clone().project(n);
1083
+ return new z.Vector2((T.x + 1) / 2 * t.width, (1 - T.y) / 2 * t.height);
1084
+ }, c = s(a), u = a, d = r;
1085
+ for (let E of i) {
1086
+ if (E >= l.count) continue;
1087
+ let v = new z.Vector3().fromBufferAttribute(l, E).applyMatrix4(o.matrixWorld), y = s(v).distanceTo(c);
1088
+ y < d && (d = y, u = v);
1089
+ }
1090
+ return u;
1091
+ }
1092
+ function qt(e) {
1093
+ let { canvas: n, scene: t, getActiveCamera: r, getViewTarget: a, labelLayer: o, options: i = {} } = e, l = i.snapPixels ?? Sr, s = new z.Color(i.color ?? Dr), c = Lr(i.displayUnit), u = (S, D) => `${c(S)}
1094
+ \u0394x ${c(D.x)} \u0394y ${c(D.y)} \u0394z ${c(D.z)}`, d = i.format ?? u, E = new z.Raycaster(), T = new z.Vector2(), v = false, y = [], m = [], g = null, R = null, x = new z.PointsMaterial({
1095
+ color: s,
1096
+ size: 8,
1097
+ sizeAttenuation: false,
1098
+ depthTest: false
1099
+ }), M = new z.PointsMaterial({
1100
+ color: s,
1101
+ size: 11,
1102
+ sizeAttenuation: false,
1103
+ depthTest: false,
1104
+ transparent: true,
1105
+ opacity: .5
1106
+ }), p = null, f = (S) => {
1107
+ if (!S) {
1108
+ p && (p.visible = false);
1109
+ return;
1110
+ }
1111
+ if (!p) {
1112
+ let D = new z.BufferGeometry();
1113
+ D.setAttribute("position", new z.Float32BufferAttribute([
1114
+ 0,
1115
+ 0,
1116
+ 0
1117
+ ], 3)), p = new z.Points(D, M), p.renderOrder = 1e3, p.userData.id = "measure", p.raycast = () => {}, t.add(p);
1118
+ }
1119
+ p.position.copy(S), p.visible = true;
1120
+ }, h = (S) => {
1121
+ let D = new z.BufferGeometry();
1122
+ D.setAttribute("position", new z.Float32BufferAttribute([
1123
+ S.x,
1124
+ S.y,
1125
+ S.z
1126
+ ], 3));
1127
+ let G = new z.Points(D, x);
1128
+ return G.renderOrder = 999, G.userData.id = "measure", G.raycast = () => {}, t.add(G), G;
1129
+ }, b = () => {
1130
+ y.length = 0, m.forEach((S) => {
1131
+ S.geometry.dispose(), S.removeFromParent();
1132
+ }), m.length = 0, g && (g.geometry.dispose(), g.material.dispose(), g.removeFromParent(), g = null), R?.remove(), R = null;
1133
+ }, C = () => {
1134
+ if (y.length !== 2) return;
1135
+ let [S, D] = y, G = new LineGeometry();
1136
+ G.setPositions([
1137
+ S.x,
1138
+ S.y,
1139
+ S.z,
1140
+ D.x,
1141
+ D.y,
1142
+ D.z
1143
+ ]);
1144
+ let j = new LineMaterial({ color: s });
1145
+ j.linewidth = 2, j.depthTest = false, g = new Line2(G, j), g.renderOrder = 998, g.userData.id = "measure", g.raycast = () => {}, t.add(g);
1146
+ let $ = S.clone().add(D).multiplyScalar(.5), U = new z.Vector3(Math.abs(D.x - S.x), Math.abs(D.y - S.y), Math.abs(D.z - S.z));
1147
+ R = o.addLabel(d(S.distanceTo(D), U), $, i.labelClassName);
1148
+ }, H = (S) => {
1149
+ let D = n.getBoundingClientRect();
1150
+ T.x = (S.clientX - D.left) / D.width * 2 - 1, T.y = -((S.clientY - D.top) / D.height) * 2 + 1;
1151
+ let G = r();
1152
+ E.setFromCamera(T, G);
1153
+ let j = Or(G, a?.());
1154
+ E.params.Line.threshold = j, E.params.Points.threshold = j;
1155
+ let $ = E.intersectObjects(t.children, true).filter((U) => U.object.userData.id !== "measure" && U.object.userData.id !== "grid");
1156
+ return $.length === 0 ? null : Pr($[0], G, {
1157
+ width: D.width,
1158
+ height: D.height
1159
+ }, l);
1160
+ }, L = null, P = 0, k = () => {
1161
+ P && (cancelAnimationFrame(P), P = 0), L = null;
1162
+ };
1163
+ return {
1164
+ setEnabled: (S) => {
1165
+ v = S, S || (k(), b(), f(null));
1166
+ },
1167
+ isEnabled: () => v,
1168
+ handleClick: (S) => {
1169
+ if (!v) return false;
1170
+ y.length === 2 && b();
1171
+ let D = H(S);
1172
+ return D === null || (y.push(D), m.push(h(D)), y.length === 2 && C()), true;
1173
+ },
1174
+ handleMove: (S) => {
1175
+ v && (L = S, !P && (P = requestAnimationFrame(() => {
1176
+ P = 0;
1177
+ let D = L;
1178
+ L = null, !(!v || !D) && f(H(D));
1179
+ })));
1180
+ },
1181
+ clear: b,
1182
+ dispose: () => {
1183
+ k(), b(), p && (p.geometry.dispose(), p.removeFromParent(), p = null), x.dispose(), M.dispose();
1184
+ }
1185
+ };
1186
+ }
1187
+ var Fr = 64;
1188
+ var Br = 256;
1189
+ var oe = /* @__PURE__ */ new Map();
1190
+ var ve = /* @__PURE__ */ new Map();
1191
+ var Fe = 0;
1192
+ var ke = class extends Error {
1193
+ constructor(n) {
1194
+ super(`Texture load for ${n} resolved after clearTextureCache(); texture disposed.`), this.name = "StaleTextureLoadError";
1195
+ }
1196
+ };
1197
+ var Be = 1;
1198
+ function Yt(e) {
1199
+ Be = Math.max(1, e);
1200
+ for (let n of oe.values()) n.anisotropy !== Be && (n.anisotropy = Be, n.needsUpdate = true);
1201
+ }
1202
+ function Xt(e, n) {
1203
+ let t = kr(n), r = oe.get(t);
1204
+ if (r) {
1205
+ oe.delete(t), oe.set(t, r), e.map = r, e.needsUpdate = true;
1206
+ return;
1207
+ }
1208
+ typeof document > "u" || Vr(n, t).then((a) => {
1209
+ e.map = a, e.needsUpdate = true;
1210
+ }).catch((a) => {
1211
+ a instanceof ke || m().warn(`Failed to load material texture ${n}:`, a);
1212
+ });
1213
+ }
1214
+ function Za() {
1215
+ Fe++;
1216
+ for (let e of oe.values()) e.dispose();
1217
+ oe.clear(), ve.clear();
1218
+ }
1219
+ function kr(e) {
1220
+ return e.length <= Br ? e : `data-uri:${Ur(e).toString(16)}:${e.length}`;
1221
+ }
1222
+ function Ur(e) {
1223
+ let n = 2166136261;
1224
+ for (let t = 0; t < e.length; t++) n ^= e.charCodeAt(t), n = Math.imul(n, 16777619);
1225
+ return n >>> 0;
1226
+ }
1227
+ function _r(e, n) {
1228
+ for (oe.set(e, n); oe.size > 64;) {
1229
+ let t = oe.keys().next().value, r = oe.get(t);
1230
+ oe.delete(t), r.dispose();
1231
+ }
1232
+ }
1233
+ function Vr(e, n) {
1234
+ let t = ve.get(n);
1235
+ if (!t) {
1236
+ let r = Fe;
1237
+ t = new Promise((a, o) => {
1238
+ new z.TextureLoader().load(e, (i) => {
1239
+ if (r !== Fe) {
1240
+ i.dispose(), o(new ke(e));
1241
+ return;
1242
+ }
1243
+ i.colorSpace = z.SRGBColorSpace, i.anisotropy = Be, _r(n, i), ve.delete(n), a(i);
1244
+ }, void 0, (i) => {
1245
+ r === Fe && ve.delete(n), o(i);
1246
+ });
1247
+ }), ve.set(n, t);
1248
+ }
1249
+ return t;
1250
+ }
1251
+ var zr = .5;
1252
+ var Gr = .01;
1253
+ var Nr = .05;
1254
+ function Kt({ camera: e, scene: n, groundNormals: t = [] }) {
1255
+ let r = e.near, a = e.near, o = new z.Vector3(), i = new z.Vector3();
1256
+ return { update: () => {
1257
+ e.near !== a && (r = e.near);
1258
+ let s = le(n), c = r;
1259
+ if (!s.isEmpty()) {
1260
+ let u = s.getSize(i).length() * .5, d = e.position.distanceTo(s.getCenter(o)) - u;
1261
+ for (let E of t) d = Math.min(d, Math.abs(e.position.dot(E)));
1262
+ c = z.MathUtils.clamp(d * zr, r, e.far * Gr);
1263
+ }
1264
+ Math.abs(c - a) > a * Nr && (e.near = c, e.updateProjectionMatrix(), a = c);
1265
+ } };
1266
+ }
1267
+ var Te = new z.Vector3(0, 0, 1);
1268
+ var $r = "technical";
1269
+ var tt = {
1270
+ studio: {
1271
+ toneMapping: z.ACESFilmicToneMapping,
1272
+ toneMappingExposure: 1,
1273
+ envMapIntensity: 1,
1274
+ environmentIntensity: 1,
1275
+ hemisphereIntensity: .75,
1276
+ ambientIntensity: .4,
1277
+ cullBackfaces: false,
1278
+ ambientOcclusion: false
1279
+ },
1280
+ technical: {
1281
+ toneMapping: z.NeutralToneMapping,
1282
+ toneMappingExposure: 1,
1283
+ envMapIntensity: .9,
1284
+ environmentIntensity: 1,
1285
+ hemisphereIntensity: .35,
1286
+ ambientIntensity: .25,
1287
+ cullBackfaces: false,
1288
+ ambientOcclusion: false
1289
+ },
1290
+ showcase: {
1291
+ toneMapping: z.ACESFilmicToneMapping,
1292
+ toneMappingExposure: 1.15,
1293
+ envMapIntensity: 1.4,
1294
+ environmentIntensity: 1.25,
1295
+ hemisphereIntensity: .35,
1296
+ ambientIntensity: .15,
1297
+ cullBackfaces: false,
1298
+ ambientOcclusion: false
1299
+ }
1300
+ };
1301
+ function qr(e) {
1302
+ let n = tt[e];
1303
+ return {
1304
+ envMapIntensity: n.envMapIntensity,
1305
+ cullBackfaces: n.cullBackfaces
1306
+ };
1307
+ }
1308
+ function Yr(e) {
1309
+ let n = Math.abs(e.x), t = Math.abs(e.y), r = Math.abs(e.z);
1310
+ return r >= n && r >= t ? "z" : t >= n && t >= r ? "y" : "x";
1311
+ }
1312
+ var pi = function(e, n) {
1313
+ let t = Xr(n || {}), r = t.environment?.sceneUp || Te, a = t.render.pixelRatio ?? Math.min(window.devicePixelRatio, 2), o = Zr(t), i = no(t, e);
1314
+ i.up.copy(r);
1315
+ let l = ro(e, t, a);
1316
+ Yt(l.capabilities.getMaxAnisotropy());
1317
+ let s = ao(i, e, t), c = vt({
1318
+ scene: o,
1319
+ perspective: i,
1320
+ controls: s,
1321
+ onActiveCameraChange: () => {},
1322
+ up: r
1323
+ }), u = () => c.getActiveCamera(), d = false;
1324
+ Qr(o, l, t, () => d);
1325
+ let E = eo(o, t), T = E.sun, v = () => {
1326
+ T && Kr(T, le(o));
1327
+ };
1328
+ t.floor?.enabled && to(o, t);
1329
+ let y = t.grid.enabled ? wt({
1330
+ cellSize: t.grid.cellSize,
1331
+ majorEvery: t.grid.majorEvery,
1332
+ cellColor: t.grid.cellColor,
1333
+ majorColor: t.grid.majorColor,
1334
+ fadeDistance: t.grid.fadeDistance,
1335
+ plane: t.grid.plane
1336
+ }) : null;
1337
+ y && o.add(y.object);
1338
+ let m = () => {
1339
+ y && y.fitToContent(le(o));
1340
+ }, g = t.gizmo.enabled ? Mt({
1341
+ camera: i,
1342
+ domElement: e,
1343
+ controller: c
1344
+ }) : null, R = [];
1345
+ if (y) {
1346
+ let A = t.grid.plane ?? "z";
1347
+ R.push(new z.Vector3(A === "x" ? 1 : 0, A === "y" ? 1 : 0, A === "z" ? 1 : 0));
1348
+ }
1349
+ t.floor.enabled && R.push(r.clone().normalize());
1350
+ let x = t.camera.dynamicNear ? Kt({
1351
+ camera: i,
1352
+ scene: o,
1353
+ groundNormals: R
1354
+ }) : null, M = e.parentElement ?? e, p = t.measure.enabled ? jt(M, o) : null, f = t.measure.enabled && p ? qt({
1355
+ canvas: e,
1356
+ scene: o,
1357
+ getActiveCamera: u,
1358
+ labelLayer: p,
1359
+ options: {
1360
+ snapPixels: t.measure.snapPixels,
1361
+ color: t.measure.color,
1362
+ labelClassName: t.measure.labelClassName,
1363
+ displayUnit: t.measure.displayUnit,
1364
+ format: t.measure.format
1365
+ }
1366
+ }) : null, h = t.events.enableEventHandlers !== false ? oo(e, o, c, t) : {
1367
+ dispose: () => {},
1368
+ fitToView: () => {},
1369
+ clearSelection: () => {}
1370
+ }, b = 5, C = 0, H = 0, L = (A) => {
1371
+ C = A.clientX, H = A.clientY;
1372
+ }, P = (A) => Math.hypot(A.clientX - C, A.clientY - H) > b, k = (A) => {
1373
+ if (!P(A)) {
1374
+ if (f?.handleClick(A)) {
1375
+ A.stopImmediatePropagation();
1376
+ return;
1377
+ }
1378
+ g?.handleClick(A) && A.stopImmediatePropagation();
1379
+ }
1380
+ };
1381
+ (g || f) && (e.addEventListener("mousedown", L, { capture: true }), e.addEventListener("click", k, { capture: true }));
1382
+ let O = (A) => f?.handleMove(A);
1383
+ f && e.addEventListener("mousemove", O, { passive: true });
1384
+ let I = () => {}, S = (A) => {
1385
+ Vt(A, {
1386
+ color: t.edges.color,
1387
+ darken: t.edges.darken,
1388
+ width: t.edges.width,
1389
+ thresholdAngle: t.edges.thresholdAngle,
1390
+ distanceFade: t.edges.distanceFade,
1391
+ maxTriangles: t.edges.maxTriangles,
1392
+ maxSegments: t.edges.maxSegments
1393
+ }).then(() => {
1394
+ D(A), I();
1395
+ });
1396
+ }, D = (A) => {
1397
+ if (t.edges.screenSpaceFallback === false) return;
1398
+ let B = false;
1399
+ A.traverse((Z) => {
1400
+ Z.userData?.edgesSkipped === "triangle-cap" && (B = true);
1401
+ }), B !== K && (K = B, ne());
1402
+ }, G = (A) => {
1403
+ zt(A), K && (K = false, ne()), I();
1404
+ }, j = e.parentElement, $ = () => j ? {
1405
+ width: j.clientWidth,
1406
+ height: j.clientHeight
1407
+ } : {
1408
+ width: window.innerWidth,
1409
+ height: window.innerHeight
1410
+ }, U = null, Q = !!t.render.ambientOcclusion, K = false, de = false, fe = (A) => {
1411
+ let { width: B, height: Z } = $(), pe = Gt(l, o, u(), Math.max(1, B), Math.max(1, Z), {
1412
+ toneMapping: t.render.toneMapping ?? z.NeutralToneMapping,
1413
+ toneMappingExposure: t.render.toneMappingExposure ?? 1,
1414
+ ambientOcclusion: A,
1415
+ aoIntensity: t.render.aoIntensity,
1416
+ aoPixelRatio: t.render.aoPixelRatio,
1417
+ edgeDetection: false
1418
+ });
1419
+ return pe.setSize(Math.max(1, B), Math.max(1, Z), a), pe;
1420
+ }, ne = () => {
1421
+ if (!(Q || K)) {
1422
+ U?.dispose(), U = null, I();
1423
+ return;
1424
+ }
1425
+ (!U || de !== Q) && (U?.dispose(), U = fe(Q), de = Q), U.setEdgeDetection(K), I();
1426
+ }, se = () => {
1427
+ U?.dispose(), U = null, ne();
1428
+ }, Ae = (A) => {
1429
+ Q = A, ne();
1430
+ };
1431
+ ne();
1432
+ let me = (A) => {
1433
+ A.ambientIntensity !== void 0 && (E.ambient.intensity = A.ambientIntensity), A.hemisphereIntensity !== void 0 && !E.hemisphere && A.hemisphereIntensity > 0 && (E.hemisphere = new z.HemisphereLight(A.hemisphereSkyColor ?? t.lighting.hemisphereSkyColor, A.hemisphereGroundColor ?? t.lighting.hemisphereGroundColor, A.hemisphereIntensity), E.hemisphere.position.copy(t.environment.sceneUp ?? Te), o.add(E.hemisphere)), E.hemisphere && (A.hemisphereIntensity !== void 0 && (E.hemisphere.intensity = A.hemisphereIntensity), A.hemisphereSkyColor !== void 0 && E.hemisphere.color.set(A.hemisphereSkyColor), A.hemisphereGroundColor !== void 0 && E.hemisphere.groundColor.set(A.hemisphereGroundColor)), I();
1434
+ }, ge = (A) => {
1435
+ t.environment.environmentIntensity = A, o.environmentIntensity = A, I();
1436
+ }, je = (A) => {
1437
+ t.render.toneMappingExposure = A, l.toneMappingExposure = A, U && se();
1438
+ }, Rn = (A) => {
1439
+ t.render.aoIntensity = A, U && se();
1440
+ }, xn = (A) => {
1441
+ let B = tt[A];
1442
+ ct = A, l.toneMapping = B.toneMapping, l.toneMappingExposure = B.toneMappingExposure, t.render.toneMapping = B.toneMapping, t.render.toneMappingExposure = B.toneMappingExposure, me({
1443
+ hemisphereIntensity: B.hemisphereIntensity,
1444
+ ambientIntensity: B.ambientIntensity
1445
+ }), ge(B.environmentIntensity), Q = B.ambientOcclusion, U ? se() : ne(), o.traverse((Z) => {
1446
+ if (Z.userData.source !== "compute") return;
1447
+ let pe = Z, Sn = Array.isArray(pe.material) ? pe.material : pe.material ? [pe.material] : [];
1448
+ for (let mt of Sn) "envMapIntensity" in mt && (mt.envMapIntensity = B.envMapIntensity);
1449
+ }), I();
1450
+ }, ct = t.look, vn = () => qr(ct), { animate: wn, dispose: Mn, invalidate: ut } = Jr(l, o, i, u, c, s, $, a, t.events.onFrame, y, g, () => U, p, x, t.render.onDemand ?? true);
1451
+ I = ut, wn(), o.up.set(r.x, r.y, r.z), v(), m();
1452
+ let dt = (A) => {
1453
+ A.traverse((B) => {
1454
+ let Z = B;
1455
+ !Z.geometry && !Z.material || (Z.geometry?.dispose(), Array.isArray(Z.material) ? Z.material.forEach(_e) : Z.material && _e(Z.material));
1456
+ });
1457
+ }, Cn = (A) => {
1458
+ A.userData.source = "user", o.add(A);
1459
+ }, Hn = (A) => {
1460
+ A.removeFromParent(), dt(A);
1461
+ }, An = () => {
1462
+ o.children.filter((B) => B.userData.source === "user").forEach((B) => {
1463
+ B.removeFromParent(), dt(B);
1464
+ });
1465
+ };
1466
+ return {
1467
+ scene: o,
1468
+ camera: i,
1469
+ controls: s,
1470
+ renderer: l,
1471
+ cameraController: c,
1472
+ grid: y,
1473
+ gizmo: g,
1474
+ measureTool: f,
1475
+ applyEdges: S,
1476
+ clearEdges: G,
1477
+ invalidate: ut,
1478
+ setAmbientOcclusion: Ae,
1479
+ setLook: xn,
1480
+ setFillLights: me,
1481
+ setEnvironmentIntensity: ge,
1482
+ setToneMappingExposure: je,
1483
+ setAoIntensity: Rn,
1484
+ getMaterialAppearance: vn,
1485
+ updateShadowBounds: v,
1486
+ updateGridScale: m,
1487
+ dispose: () => {
1488
+ d || (d = true, Mn(), h.dispose(), (g || f) && (e.removeEventListener("mousedown", L, { capture: true }), e.removeEventListener("click", k, { capture: true })), f && e.removeEventListener("mousemove", O), f?.dispose(), p?.dispose(), g?.dispose(), y?.dispose(), U?.dispose(), c.dispose(), s.dispose(), l.dispose(), l.forceContextLoss(), o.traverse((A) => {
1489
+ let B = A;
1490
+ !B.geometry && !B.material || (B.geometry?.dispose(), Array.isArray(B.material) ? B.material.forEach(_e) : B.material && _e(B.material));
1491
+ }), o.environment?.dispose(), o.background instanceof z.Texture && o.background.dispose());
1492
+ },
1493
+ fitToView: h.fitToView,
1494
+ clearSelection: h.clearSelection,
1495
+ addUserGeometry: Cn,
1496
+ removeUserGeometry: Hn,
1497
+ clearUserGeometry: An
1498
+ };
1499
+ };
1500
+ function Xr(e) {
1501
+ let n = e.sceneScale || "m", r = {
1502
+ mm: {
1503
+ cameraDistance: 20,
1504
+ near: .1,
1505
+ far: 2e3,
1506
+ floorSize: 100,
1507
+ lightDistance: 10,
1508
+ lightHeight: 20,
1509
+ minDistance: .1,
1510
+ shadowSize: 100,
1511
+ scaleFactor: 1e3
1512
+ },
1513
+ cm: {
1514
+ cameraDistance: 20,
1515
+ near: .1,
1516
+ far: 2e3,
1517
+ floorSize: 100,
1518
+ lightDistance: 25,
1519
+ lightHeight: 50,
1520
+ minDistance: .1,
1521
+ shadowSize: 100,
1522
+ scaleFactor: 100
1523
+ },
1524
+ m: {
1525
+ cameraDistance: 10,
1526
+ near: .01,
1527
+ far: 2e3,
1528
+ floorSize: 50,
1529
+ lightDistance: 25,
1530
+ lightHeight: 50,
1531
+ minDistance: .001,
1532
+ shadowSize: 100,
1533
+ scaleFactor: 1
1534
+ },
1535
+ inches: {
1536
+ cameraDistance: 15,
1537
+ near: .1,
1538
+ far: 2e3,
1539
+ floorSize: 80,
1540
+ lightDistance: 20,
1541
+ lightHeight: 40,
1542
+ minDistance: .1,
1543
+ shadowSize: 80,
1544
+ scaleFactor: 39.37
1545
+ },
1546
+ feet: {
1547
+ cameraDistance: 8,
1548
+ near: .1,
1549
+ far: 2e3,
1550
+ floorSize: 40,
1551
+ lightDistance: 15,
1552
+ lightHeight: 30,
1553
+ minDistance: .1,
1554
+ shadowSize: 60,
1555
+ scaleFactor: 3.28084
1556
+ }
1557
+ }[n], a = e.look ?? $r, o = tt[a];
1558
+ return {
1559
+ sceneScale: n,
1560
+ look: a,
1561
+ camera: {
1562
+ position: e.camera?.position || new z.Vector3(-r.cameraDistance, -r.cameraDistance, r.cameraDistance),
1563
+ fov: e.camera?.fov || 20,
1564
+ near: e.camera?.near || r.near,
1565
+ far: e.camera?.far || r.far,
1566
+ target: e.camera?.target || new z.Vector3(0, 0, 0),
1567
+ dynamicNear: e.camera?.dynamicNear ?? true
1568
+ },
1569
+ lighting: {
1570
+ enableSunlight: e.lighting?.enableSunlight ?? true,
1571
+ sunlightIntensity: e.lighting?.sunlightIntensity ?? 1,
1572
+ sunlightPosition: e.lighting?.sunlightPosition || new z.Vector3(r.lightDistance, r.lightDistance, r.lightHeight),
1573
+ ambientLightColor: e.lighting?.ambientLightColor || new z.Color(4210752),
1574
+ ambientLightIntensity: e.lighting?.ambientLightIntensity ?? o.ambientIntensity,
1575
+ sunlightColor: e.lighting?.sunlightColor || 16777215,
1576
+ enableHemisphereLight: e.lighting?.enableHemisphereLight ?? o.hemisphereIntensity > 0,
1577
+ hemisphereSkyColor: e.lighting?.hemisphereSkyColor ?? 14673663,
1578
+ hemisphereGroundColor: e.lighting?.hemisphereGroundColor ?? 7036754,
1579
+ hemisphereIntensity: e.lighting?.hemisphereIntensity ?? o.hemisphereIntensity
1580
+ },
1581
+ environment: {
1582
+ hdrPath: e.environment?.hdrPath || "/baseHDR.hdr",
1583
+ backgroundColor: e.environment?.backgroundColor || new z.Color(15790320),
1584
+ enableEnvironmentLighting: e.environment?.enableEnvironmentLighting ?? true,
1585
+ sceneUp: e.environment?.sceneUp || Te,
1586
+ showEnvironment: e.environment?.showEnvironment ?? false,
1587
+ environmentIntensity: e.environment?.environmentIntensity ?? o.environmentIntensity
1588
+ },
1589
+ floor: {
1590
+ enabled: e.floor?.enabled ?? false,
1591
+ size: e.floor?.size || r.floorSize,
1592
+ color: e.floor?.color || new z.Color(8421504),
1593
+ roughness: e.floor?.roughness ?? .7,
1594
+ metalness: e.floor?.metalness ?? 0,
1595
+ receiveShadow: e.floor?.receiveShadow ?? true
1596
+ },
1597
+ render: {
1598
+ enableShadows: e.render?.enableShadows ?? true,
1599
+ shadowMapSize: e.render?.shadowMapSize || 2048,
1600
+ antialias: e.render?.antialias ?? true,
1601
+ pixelRatio: e.render?.pixelRatio || Math.min(window.devicePixelRatio, 2),
1602
+ toneMapping: e.render?.toneMapping ?? o.toneMapping,
1603
+ toneMappingExposure: e.render?.toneMappingExposure ?? o.toneMappingExposure,
1604
+ preserveDrawingBuffer: e.render?.preserveDrawingBuffer ?? false,
1605
+ ambientOcclusion: e.render?.ambientOcclusion ?? o.ambientOcclusion,
1606
+ aoIntensity: e.render?.aoIntensity ?? 1,
1607
+ aoPixelRatio: e.render?.aoPixelRatio ?? 1,
1608
+ onDemand: e.render?.onDemand ?? true
1609
+ },
1610
+ controls: {
1611
+ enableDamping: e.controls?.enableDamping ?? false,
1612
+ dampingFactor: e.controls?.dampingFactor || .05,
1613
+ autoRotate: e.controls?.autoRotate ?? false,
1614
+ autoRotateSpeed: e.controls?.autoRotateSpeed || .5,
1615
+ enableZoom: e.controls?.enableZoom ?? true,
1616
+ enablePan: e.controls?.enablePan ?? true,
1617
+ minDistance: e.controls?.minDistance || r.minDistance,
1618
+ maxDistance: e.controls?.maxDistance || Infinity
1619
+ },
1620
+ grid: {
1621
+ enabled: e.grid?.enabled ?? false,
1622
+ cellSize: e.grid?.cellSize ?? 1,
1623
+ majorEvery: e.grid?.majorEvery ?? 10,
1624
+ cellColor: e.grid?.cellColor ?? 8947848,
1625
+ majorColor: e.grid?.majorColor ?? 4473924,
1626
+ fadeDistance: e.grid?.fadeDistance ?? 100,
1627
+ plane: e.grid?.plane ?? Yr(e.environment?.sceneUp ?? Te)
1628
+ },
1629
+ gizmo: { enabled: e.gizmo?.enabled ?? false },
1630
+ edges: {
1631
+ enabled: e.edges?.enabled ?? false,
1632
+ color: e.edges?.color,
1633
+ darken: e.edges?.darken,
1634
+ width: e.edges?.width ?? 1.5,
1635
+ thresholdAngle: e.edges?.thresholdAngle ?? 44,
1636
+ distanceFade: e.edges?.distanceFade ?? true
1637
+ },
1638
+ measure: {
1639
+ enabled: e.measure?.enabled ?? false,
1640
+ snapPixels: e.measure?.snapPixels,
1641
+ color: e.measure?.color,
1642
+ labelClassName: e.measure?.labelClassName,
1643
+ displayUnit: e.measure?.displayUnit,
1644
+ format: e.measure?.format
1645
+ },
1646
+ events: {
1647
+ onBackgroundClicked: e.events?.onBackgroundClicked,
1648
+ onObjectSelected: e.events?.onObjectSelected,
1649
+ onMeshMetadataClicked: e.events?.onMeshMetadataClicked,
1650
+ onMeshDoubleClicked: e.events?.onMeshDoubleClicked,
1651
+ selectionColor: e.events?.selectionColor || "#ff0000",
1652
+ enableEventHandlers: e.events?.enableEventHandlers ?? true,
1653
+ enableKeyboardControls: e.events?.enableKeyboardControls ?? true,
1654
+ enableClickToFocus: e.events?.enableClickToFocus ?? true,
1655
+ enableDoubleClickZoom: e.events?.enableDoubleClickZoom ?? true,
1656
+ onReady: e.events?.onReady,
1657
+ onFrame: e.events?.onFrame
1658
+ }
1659
+ };
1660
+ }
1661
+ function _e(e) {
1662
+ for (let n of Object.values(e)) n instanceof z.Texture && n.dispose();
1663
+ e.dispose();
1664
+ }
1665
+ function Kr(e, n) {
1666
+ if (n.isEmpty()) return;
1667
+ let t = n.getCenter(new z.Vector3()), r = n.getSize(new z.Vector3()).length() * .5 * 1.2, a = e.shadow.camera;
1668
+ a.left = -r, a.right = r, a.top = r, a.bottom = -r, e.target.position.copy(t), e.target.updateMatrixWorld();
1669
+ let o = e.position.distanceTo(t);
1670
+ a.near = Math.max(r * .01, o - r), a.far = o + r, a.updateProjectionMatrix();
1671
+ }
1672
+ function Zr(e) {
1673
+ let n = new z.Scene();
1674
+ return n.background = (typeof e.environment.backgroundColor == "string" ? new z.Color(e.environment.backgroundColor) : e.environment.backgroundColor) || null, n;
1675
+ }
1676
+ function Jr(e, n, t, r, a, o, i, l, s, c, u, d, E, T, v = true) {
1677
+ let y = null, m = performance.now(), g = true, R = 0, x = 500, M = new z.Matrix4(), p = new z.Matrix4(), f = null, h = () => {
1678
+ g = true;
1679
+ }, b = (O) => {
1680
+ O.updateMatrixWorld();
1681
+ let I = f !== O || !M.equals(O.matrixWorld) || !p.equals(O.projectionMatrix);
1682
+ return I && (f = O, M.copy(O.matrixWorld), p.copy(O.projectionMatrix)), I;
1683
+ }, C = e.domElement, H = [
1684
+ "pointerdown",
1685
+ "pointerup",
1686
+ "wheel"
1687
+ ];
1688
+ if (v) for (let O of H) C.addEventListener(O, h, { passive: true });
1689
+ let L = () => {
1690
+ let { width: O, height: I } = i();
1691
+ if (O === 0 || I === 0) return;
1692
+ let S = Math.floor(O * l), D = Math.floor(I * l);
1693
+ (e.domElement.width !== S || e.domElement.height !== D) && (e.setPixelRatio(l), e.setSize(O, I, false), t.aspect = O / I, t.updateProjectionMatrix(), a.updateAspect(O, I), d?.()?.setSize(O, I, l), E?.setSize(O, I), h());
1694
+ }, P = function() {
1695
+ y = requestAnimationFrame(P);
1696
+ let O = performance.now(), I = (O - m) / 1e3;
1697
+ m = O, L(), (o.enableDamping || o.autoRotate) && o.update(), c && c.update(r().position), u && u.update(I), T && T.update(), s?.(I);
1698
+ let S = r();
1699
+ if (v) {
1700
+ if (!(g || b(S) || O - R >= x)) return;
1701
+ g = false, R = O;
1702
+ }
1703
+ let D = d?.();
1704
+ D ? (D.setCamera(S), D.render(I)) : e.render(n, S), E && E.render(n, S), u && u.render(e);
1705
+ };
1706
+ return {
1707
+ animate: P,
1708
+ dispose: () => {
1709
+ if (y !== null && (cancelAnimationFrame(y), y = null), v) for (let O of H) C.removeEventListener(O, h);
1710
+ },
1711
+ invalidate: h
1712
+ };
1713
+ }
1714
+ function Qr(e, n, t, r) {
1715
+ t.environment.enableEnvironmentLighting ? new HDRLoader().load(t.environment.hdrPath || "/baseHDR.hdr", function(a) {
1716
+ if (r()) {
1717
+ a.dispose();
1718
+ return;
1719
+ }
1720
+ if (!a?.image) {
1721
+ m().warn("HDR loaded without image data; skipping environment map."), a?.dispose(), t.events.onReady?.();
1722
+ return;
1723
+ }
1724
+ a.mapping = z.EquirectangularReflectionMapping;
1725
+ let o = new z.PMREMGenerator(n);
1726
+ o.compileEquirectangularShader();
1727
+ let i = o.fromEquirectangular(a).texture;
1728
+ o.dispose(), e.environment = i, e.environmentIntensity = t.environment.environmentIntensity ?? 1, t.environment.showEnvironment ? e.background = a : a.dispose(), t.events.onReady?.();
1729
+ }, void 0, function(a) {
1730
+ r() || (m().warn("HDR texture could not be loaded, falling back to basic lighting:", a), t.events.onReady?.());
1731
+ }) : t.events.onReady?.();
1732
+ }
1733
+ function eo(e, n) {
1734
+ let t = new z.AmbientLight(n.lighting.ambientLightColor, n.lighting.ambientLightIntensity);
1735
+ e.add(t);
1736
+ let r = null;
1737
+ if (n.lighting.enableHemisphereLight) {
1738
+ r = new z.HemisphereLight(n.lighting.hemisphereSkyColor, n.lighting.hemisphereGroundColor, n.lighting.hemisphereIntensity);
1739
+ let i = n.environment.sceneUp ?? Te;
1740
+ r.position.copy(i), e.add(r);
1741
+ }
1742
+ if (!n.lighting.enableSunlight) return {
1743
+ ambient: t,
1744
+ hemisphere: r,
1745
+ sun: null
1746
+ };
1747
+ let a = new z.DirectionalLight(n.lighting.sunlightColor ?? 16777215, n.lighting.sunlightIntensity), o = n.lighting.sunlightPosition;
1748
+ return o && a.position.set(o.x, o.y, o.z), n.render.enableShadows ? (a.castShadow = true, a.shadow.mapSize.width = n.render.shadowMapSize || 2048, a.shadow.mapSize.height = n.render.shadowMapSize || 2048, a.shadow.bias = -1e-4, a.shadow.normalBias = .02, a.shadow.radius = 4, e.add(a), e.add(a.target), {
1749
+ ambient: t,
1750
+ hemisphere: r,
1751
+ sun: a
1752
+ }) : (e.add(a), {
1753
+ ambient: t,
1754
+ hemisphere: r,
1755
+ sun: null
1756
+ });
1757
+ }
1758
+ function to(e, n) {
1759
+ let t = n.floor.size, r = new z.PlaneGeometry(t, t), a = typeof n.floor.color == "string" ? new z.Color(n.floor.color) : n.floor.color, o = new z.MeshStandardMaterial({
1760
+ color: a,
1761
+ roughness: n.floor.roughness,
1762
+ metalness: n.floor.metalness,
1763
+ side: z.DoubleSide
1764
+ }), i = new z.Mesh(r, o);
1765
+ i.userData.id = "floor", i.name = "floor";
1766
+ let l = (n.environment?.sceneUp || Te).clone().normalize();
1767
+ i.quaternion.setFromUnitVectors(new z.Vector3(0, 0, 1), l), i.position.set(0, 0, 0), n.floor.receiveShadow && n.render.enableShadows && (i.receiveShadow = true), e.add(i);
1768
+ }
1769
+ function no(e, n) {
1770
+ let t = n.parentElement, r = t ? t.clientWidth : window.innerWidth, a = t ? t.clientHeight : window.innerHeight, o = new z.PerspectiveCamera(e.camera.fov, r / a, e.camera.near, e.camera.far), i = e.camera.position;
1771
+ return i && o.position.set(i.x, i.y, i.z), o;
1772
+ }
1773
+ function ro(e, n, t) {
1774
+ let r = new z.WebGLRenderer({
1775
+ antialias: n.render.antialias,
1776
+ canvas: e,
1777
+ alpha: true,
1778
+ powerPreference: "high-performance",
1779
+ preserveDrawingBuffer: n.render.preserveDrawingBuffer,
1780
+ logarithmicDepthBuffer: false
1781
+ }), a = e.parentElement, o = a ? a.clientWidth : window.innerWidth, i = a ? a.clientHeight : window.innerHeight;
1782
+ return a && (e.style.width = "100%", e.style.height = "100%", e.style.display = "block"), r.setSize(o, i, false), r.setPixelRatio(t), n.render.enableShadows && (r.shadowMap.enabled = true, r.shadowMap.type = z.VSMShadowMap), r.toneMapping = n.render.toneMapping, r.toneMappingExposure = n.render.toneMappingExposure ?? 1, r.outputColorSpace = z.SRGBColorSpace, r.sortObjects = true, r;
1783
+ }
1784
+ function oo(e, n, t, r) {
1785
+ let a = /* @__PURE__ */ new Set(), o = /* @__PURE__ */ new Map(), i = new z.Raycaster(), l = new z.Vector2(), s = new z.Vector2(), c = () => t.getActiveCamera(), u = (p) => {
1786
+ let f = p;
1787
+ for (; f;) {
1788
+ if (!f.visible) return false;
1789
+ f = f.parent;
1790
+ }
1791
+ return true;
1792
+ }, d = () => {
1793
+ let p = le(n);
1794
+ if (p.isEmpty()) {
1795
+ m().warn("No objects to fit to view");
1796
+ return;
1797
+ }
1798
+ t.frameBounds(p, false);
1799
+ }, E = typeof r.events.selectionColor == "string" ? new z.Color(r.events.selectionColor) : r.events.selectionColor instanceof z.Color ? r.events.selectionColor : new z.Color("#ff0000"), T = () => {
1800
+ a.forEach((p) => {
1801
+ let f = p;
1802
+ if (o.has(p)) {
1803
+ let h = o.get(p), b = f.material;
1804
+ b instanceof z.Material ? b.dispose() : Array.isArray(b) && b.forEach((H) => H.dispose()), f.material = h, o.delete(p);
1805
+ let C = p;
1806
+ for (; C.parent;) C = C.parent;
1807
+ C !== n && (h instanceof z.Material ? h.dispose() : h.forEach((H) => H.dispose()));
1808
+ }
1809
+ }), a.clear();
1810
+ }, v = (p) => {
1811
+ let f = p;
1812
+ if (!(f.material instanceof z.Material)) return false;
1813
+ o.set(p, f.material);
1814
+ let h = f.material.clone();
1815
+ return p instanceof z.Mesh && "emissive" in h ? h.emissive = E.clone() : "color" in h && (h.color = E.clone()), f.material = h, true;
1816
+ }, y = () => {
1817
+ let p = le(n), f = p.isEmpty() ? 1 : p.getSize(new z.Vector3()).length();
1818
+ i.params.Points.threshold = f * .01;
1819
+ }, m$1 = (p) => {
1820
+ s.set(p.clientX, p.clientY);
1821
+ }, g = (p) => {
1822
+ let f = new z.Vector2(p.clientX, p.clientY);
1823
+ if (s.distanceTo(f) > 5) return;
1824
+ let h = e.getBoundingClientRect();
1825
+ l.x = (p.clientX - h.left) / h.width * 2 - 1, l.y = -((p.clientY - h.top) / h.height) * 2 + 1, y(), i.setFromCamera(l, c());
1826
+ let b = i.intersectObjects(n.children, true).filter((C) => u(C.object));
1827
+ if (b.length > 0) {
1828
+ let C = b[0].object;
1829
+ a.has(C) || (T(), a.add(C), v(C), r.events?.onObjectSelected?.(C), C instanceof z.Mesh && Object.keys(C.userData).length > 0 && r.events?.onMeshMetadataClicked?.(C.userData));
1830
+ } else T(), r.events?.onBackgroundClicked?.({
1831
+ x: l.x,
1832
+ y: l.y
1833
+ });
1834
+ }, R = (p) => {
1835
+ let f = e.getBoundingClientRect();
1836
+ l.x = (p.clientX - f.left) / f.width * 2 - 1, l.y = -((p.clientY - f.top) / f.height) * 2 + 1, y(), i.setFromCamera(l, c());
1837
+ let h = i.intersectObjects(n.children, true).filter((H) => u(H.object));
1838
+ if (h.length === 0) return;
1839
+ let b = h[0].object;
1840
+ if (r.events?.onMeshDoubleClicked?.(b), !r.events?.enableDoubleClickZoom) return;
1841
+ let C = new z.Box3().setFromObject(b);
1842
+ C.isEmpty() || t.frameBounds(C, true);
1843
+ }, x = (p) => {
1844
+ if (r.events?.enableKeyboardControls) switch (p.key.toLowerCase()) {
1845
+ case "f":
1846
+ p.preventDefault(), d();
1847
+ break;
1848
+ case "escape":
1849
+ p.preventDefault(), T();
1850
+ break;
1851
+ case " ":
1852
+ p.preventDefault(), d();
1853
+ break;
1854
+ }
1855
+ };
1856
+ return r.events?.enableClickToFocus && (e.addEventListener("mousedown", m$1), e.addEventListener("click", g), e.addEventListener("dblclick", R)), r.events?.enableKeyboardControls && (e.setAttribute("tabindex", "0"), e.addEventListener("keydown", x)), {
1857
+ dispose: () => {
1858
+ e.removeEventListener("mousedown", m$1), e.removeEventListener("click", g), e.removeEventListener("dblclick", R), e.removeEventListener("keydown", x), T();
1859
+ },
1860
+ fitToView: d,
1861
+ clearSelection: T
1862
+ };
1863
+ }
1864
+ function ao(e, n, t) {
1865
+ let r = new OrbitControls(e, n), a = t.camera.target;
1866
+ return a && r.target.set(a.x, a.y, a.z), r.enableDamping = t.controls.enableDamping || false, r.dampingFactor = t.controls.dampingFactor || .05, r.autoRotate = t.controls.autoRotate || false, r.autoRotateSpeed = t.controls.autoRotateSpeed || .5, r.enableZoom = t.controls.enableZoom ?? true, r.enablePan = t.controls.enablePan ?? true, r.minDistance = t.controls.minDistance || .001, r.maxDistance = t.controls.maxDistance || Infinity, r.screenSpacePanning = false, r.maxPolarAngle = Math.PI, r.update(), r;
1867
+ }
1868
+ var hi = [
1869
+ "technical",
1870
+ "studio",
1871
+ "showcase"
1872
+ ];
1873
+ function Ve(e, n, t, r = true) {
1874
+ return {
1875
+ x: e,
1876
+ y: n,
1877
+ z: t
1878
+ };
1879
+ }
1880
+ var co = "#ffffff";
1881
+ var Zt = 12;
1882
+ var uo = 4e-4;
1883
+ var mo = 12;
1884
+ var fo = .05;
1885
+ function Jt(e, n = {}) {
1886
+ if (!e || e.length === 0) return [];
1887
+ let { rhino: t, applyTransforms: r = true } = n, a = [];
1888
+ for (let o of e) switch (o.kind) {
1889
+ case "curve": {
1890
+ let i = Eo(o, t, r);
1891
+ i && a.push(i);
1892
+ break;
1893
+ }
1894
+ case "point": {
1895
+ let i = ho(o, r);
1896
+ i && a.push(i);
1897
+ break;
1898
+ }
1899
+ default: {
1900
+ let l = o;
1901
+ m().warn(`Skipping unknown display item kind: ${String(l.kind)}`);
1902
+ break;
1903
+ }
1904
+ }
1905
+ return a;
1906
+ }
1907
+ var po = 2;
1908
+ function Eo(e, n, t) {
1909
+ if (!n) return m().warn("No rhino3dm instance provided; skipping curve display item."), null;
1910
+ let r = go(e.json, n);
1911
+ if (!r) return null;
1912
+ let a;
1913
+ try {
1914
+ a = yo(r, t);
1915
+ } catch (d) {
1916
+ return m().warn("Failed to tessellate curve display item; skipping.", d), null;
1917
+ } finally {
1918
+ Me(r);
1919
+ }
1920
+ if (a.length < 2) return null;
1921
+ let o = [];
1922
+ for (let d of a) o.push(d.x, d.y, d.z);
1923
+ let i = new LineGeometry();
1924
+ i.setPositions(o);
1925
+ let l = Qt(e.color, e.opacity), s = new LineMaterial({ color: l.color }), c = s;
1926
+ c.linewidth = e.width ?? po, c.transparent = l.transparent, c.opacity = l.opacity;
1927
+ let u = new Line2(i, s);
1928
+ return u.computeLineDistances(), u.name = e.name, u.userData = {
1929
+ source: "compute",
1930
+ id: e.id,
1931
+ layer: e.layer,
1932
+ kind: "curve",
1933
+ metadata: e.metadata
1934
+ }, u;
1935
+ }
1936
+ function ho(e, n) {
1937
+ let { position: t } = e;
1938
+ if (!t || typeof t.X != "number" || !Number.isFinite(t.X) || typeof t.Y != "number" || !Number.isFinite(t.Y) || typeof t.Z != "number" || !Number.isFinite(t.Z)) return m().warn(`Skipping point display item with missing or non-finite position (id: ${String(e.id)}).`), null;
1939
+ let { x: r, y: a, z: o } = Ve(t.X, t.Y, t.Z, n), i = new z.BufferGeometry();
1940
+ i.setAttribute("position", new z.Float32BufferAttribute([
1941
+ r,
1942
+ a,
1943
+ o
1944
+ ], 3));
1945
+ let l = new z.PointsMaterial({
1946
+ ...Qt(e.color, e.opacity),
1947
+ size: 6,
1948
+ sizeAttenuation: false
1949
+ }), s = new z.Points(i, l);
1950
+ return s.name = e.name, s.userData = {
1951
+ source: "compute",
1952
+ id: e.id,
1953
+ layer: e.layer,
1954
+ kind: "point",
1955
+ metadata: e.metadata
1956
+ }, s;
1957
+ }
1958
+ function Me(e) {
1959
+ e?.delete?.();
1960
+ }
1961
+ function go(e, n) {
1962
+ try {
1963
+ let t = JSON.parse(e), r = n.CommonObject.decode(t);
1964
+ return r && typeof r.pointAt == "function" ? r : (Me(r), m().warn("Decoded display-item JSON is not a curve; skipping."), null);
1965
+ } catch (t) {
1966
+ return m().warn("Failed to decode curve display item JSON:", t), null;
1967
+ }
1968
+ }
1969
+ function yo(e, n) {
1970
+ return bo(e, n) || To(e, n);
1971
+ }
1972
+ function bo(e, n) {
1973
+ if (!e.isPolyline()) return null;
1974
+ let t = e.tryGetPolyline(), r = Array.isArray(t) ? t[1] : t;
1975
+ if (!r || typeof r.count != "number" || r.count < 2) return Me(r), null;
1976
+ let a = [];
1977
+ for (let o = 0; o < r.count; o++) {
1978
+ let i = r.get(o), { x: l, y: s, z: c } = Ve(i[0], i[1], i[2], n);
1979
+ a.push(new z.Vector3(l, s, c));
1980
+ }
1981
+ return Me(r), a;
1982
+ }
1983
+ function To(e, n) {
1984
+ let t = e.domain, r = t[0], o = t[1] - r, i = (d) => {
1985
+ let E = e.pointAt(d), { x: T, y: v, z: y } = Ve(E[0], E[1], E[2], n);
1986
+ return new z.Vector3(T, v, y);
1987
+ }, l = Ro(e), s = r, c = i(r), u = [c];
1988
+ for (let d = 0; d < Zt; d++) {
1989
+ let E = r + o * (d + 1) / Zt, T = i(E);
1990
+ nt(s, c, E, T, i, l, mo, u), u.push(T), s = E, c = T;
1991
+ }
1992
+ return u;
1993
+ }
1994
+ function nt(e, n, t, r, a, o, i, l) {
1995
+ if (i <= 0) return;
1996
+ let s = (e + t) / 2, c = a(s), u = vo(c, n, r), d = xo(n, c, r);
1997
+ u <= o && d <= fo || (nt(e, n, s, c, a, o, i - 1, l), l.push(c), nt(s, c, t, r, a, o, i - 1, l));
1998
+ }
1999
+ function Ro(e) {
2000
+ let n = e.getBoundingBox(), t = n.min, r = n.max;
2001
+ Me(n);
2002
+ let a = Math.hypot(r[0] - t[0], r[1] - t[1], r[2] - t[2]);
2003
+ return Math.max(a * uo, 1e-6);
2004
+ }
2005
+ function xo(e, n, t) {
2006
+ let r = n.x - e.x, a = n.y - e.y, o = n.z - e.z, i = t.x - n.x, l = t.y - n.y, s = t.z - n.z, c = Math.sqrt(r * r + a * a + o * o), u = Math.sqrt(i * i + l * l + s * s);
2007
+ if (c === 0 || u === 0) return 0;
2008
+ let d = r * i + a * l + o * s, E = Math.max(-1, Math.min(1, d / (c * u)));
2009
+ return Math.acos(E);
2010
+ }
2011
+ function vo(e, n, t) {
2012
+ let r = t.x - n.x, a = t.y - n.y, o = t.z - n.z, i = r * r + a * a + o * o;
2013
+ if (i === 0) return e.distanceTo(n);
2014
+ let l = e.x - n.x, s = e.y - n.y, c = e.z - n.z, u = Math.max(0, Math.min(1, (l * r + s * a + c * o) / i)), d = l - r * u, E = s - a * u, T = c - o * u;
2015
+ return Math.sqrt(d * d + E * E + T * T);
2016
+ }
2017
+ function Qt(e, n) {
2018
+ let t = n ?? 1;
2019
+ return {
2020
+ color: new z.Color(e ?? co),
2021
+ transparent: t < 1,
2022
+ opacity: t
2023
+ };
2024
+ }
2025
+ var en = 1096174675;
2026
+ var Mo = 1515605075;
2027
+ var tn = 3;
2028
+ var nn = 1;
2029
+ var ot = 1;
2030
+ var Co = 2;
2031
+ var Ho = 4;
2032
+ var Ao = 8;
2033
+ var So = 16;
2034
+ var Ai = 0;
2035
+ var Do = 1;
2036
+ var rn = 12;
2037
+ var on = 56;
2038
+ var Lo = new Uint16Array(new Uint8Array([1, 0]).buffer)[0] === 1;
2039
+ function at(e) {
2040
+ let n = it(e), t;
2041
+ n.isFloat32 ? t = n.vertexData : n.deltaEncoded ? t = Vo(n.vertexData) : t = n.vertexData;
2042
+ let r = n.indexData;
2043
+ return n.deltaEncoded && (r = r instanceof Uint16Array ? zo(r) : Go(r)), _o(r, n.vertexCount), {
2044
+ metadata: n.metadata,
2045
+ flags: n.flags,
2046
+ vertices: t,
2047
+ indices: r,
2048
+ origin: n.origin,
2049
+ scale: n.scale,
2050
+ uvs: n.uvs,
2051
+ colors: n.colors
2052
+ };
2053
+ }
2054
+ function it(e) {
2055
+ if (!Lo) throw new p("SLVA parsing requires a little-endian host: the zero-copy geometry readers view the wire bytes in host byte order.", l.ENVIRONMENT_ERROR);
2056
+ let n = Fo(Po(e)), t = new DataView(n.buffer, n.byteOffset, n.byteLength);
2057
+ if (n.byteLength < rn) throw X("Blob too small to contain SLVA header.", {
2058
+ expectedBytes: rn,
2059
+ availableBytes: n.byteLength
2060
+ });
2061
+ let r = 0, a = t.getUint32(r, true);
2062
+ if (r += 4, a !== 1096174675) throw X(`Invalid SLVA magic: 0x${a.toString(16)}`, {
2063
+ expectedMagic: `0x${en.toString(16)}`,
2064
+ actualMagic: `0x${a.toString(16)}`
2065
+ });
2066
+ let o = t.getUint32(r, true);
2067
+ if (r += 4, o < 1 || o > 3) throw X(`Unsupported SLVA version: ${o}`, {
2068
+ minSupportedVersion: 1,
2069
+ maxSupportedVersion: 3,
2070
+ actualVersion: o
2071
+ });
2072
+ let i = t.getUint32(r, true);
2073
+ if (r += 4, r + i > n.byteLength) throw X("Insufficient data to read metadata JSON.", {
2074
+ expectedBytes: i,
2075
+ availableBytes: n.byteLength - r,
2076
+ offset: r
2077
+ });
2078
+ let l$1 = n.subarray(r, r + i);
2079
+ r += i;
2080
+ let s;
2081
+ try {
2082
+ s = JSON.parse(Bo(l$1));
2083
+ } catch (I) {
2084
+ throw X(`Failed to parse metadata JSON: ${I instanceof Error ? I.message : String(I)}`, { metadataLen: i });
2085
+ }
2086
+ if (r + on > n.byteLength) throw X("Insufficient data to read geometry header.", {
2087
+ expectedBytes: on,
2088
+ availableBytes: n.byteLength - r,
2089
+ offset: r
2090
+ });
2091
+ let c = t.getUint32(r, true);
2092
+ r += 4;
2093
+ let u = t.getFloat64(r, true);
2094
+ r += 8;
2095
+ let d = t.getFloat64(r, true);
2096
+ r += 8;
2097
+ let E = t.getFloat64(r, true);
2098
+ r += 8;
2099
+ let T = t.getFloat64(r, true);
2100
+ r += 8;
2101
+ let v = t.getFloat64(r, true);
2102
+ r += 8;
2103
+ let y = t.getFloat64(r, true);
2104
+ r += 8;
2105
+ let m = t.getUint32(r, true);
2106
+ r += 4;
2107
+ let g = (c & 1) !== 0, R = (c & 4) !== 0, x = m * 3, p$1 = x * (g ? 4 : 2);
2108
+ if (r + p$1 > n.byteLength) throw X("Insufficient data to read vertices.", {
2109
+ expectedBytes: p$1,
2110
+ availableBytes: n.byteLength - r,
2111
+ offset: r,
2112
+ useFloat32: g,
2113
+ vertexCount: m
2114
+ });
2115
+ let f = n.byteOffset + r, h;
2116
+ if (g ? h = sn(n.buffer, f, x) : R ? h = rt(n.buffer, f, x) : h = ko(n.buffer, f, x), r += p$1, r + 4 > n.byteLength) throw X("Insufficient data to read index count.", {
2117
+ expectedBytes: 4,
2118
+ availableBytes: n.byteLength - r,
2119
+ offset: r
2120
+ });
2121
+ let b = t.getUint32(r, true);
2122
+ r += 4;
2123
+ let C = (c & 2) !== 0, L = b * (C ? 2 : 4);
2124
+ if (r + L > n.byteLength) throw X("Insufficient data to read indices.", {
2125
+ expectedBytes: L,
2126
+ availableBytes: n.byteLength - r,
2127
+ offset: r,
2128
+ indexCount: b,
2129
+ useUint16Indices: C
2130
+ });
2131
+ let P = C ? rt(n.buffer, n.byteOffset + r, b) : Uo(n.buffer, n.byteOffset + r, b);
2132
+ r += L;
2133
+ let k = null;
2134
+ if ((c & 8) !== 0) {
2135
+ let I = Oo(n, t, r, m, R);
2136
+ k = I.uvs, r = I.offset;
2137
+ }
2138
+ let O = null;
2139
+ return c & 16 && (O = Io(n, r, m, R)), {
2140
+ metadata: s,
2141
+ flags: c,
2142
+ vertexData: h,
2143
+ indexData: P,
2144
+ isFloat32: g,
2145
+ deltaEncoded: R,
2146
+ vertexCount: m,
2147
+ origin: [
2148
+ u,
2149
+ d,
2150
+ E
2151
+ ],
2152
+ scale: [
2153
+ T,
2154
+ v,
2155
+ y
2156
+ ],
2157
+ uvs: k,
2158
+ colors: O
2159
+ };
2160
+ }
2161
+ var an = 36;
2162
+ function Oo(e, n, t, r, a) {
2163
+ if (t + an > e.byteLength) throw X("Insufficient data to read UV chunk header.", {
2164
+ expectedBytes: an,
2165
+ availableBytes: e.byteLength - t,
2166
+ offset: t
2167
+ });
2168
+ let o = n.getUint32(t, true);
2169
+ t += 4;
2170
+ let i = n.getFloat64(t, true);
2171
+ t += 8;
2172
+ let l = n.getFloat64(t, true);
2173
+ t += 8;
2174
+ let s = n.getFloat64(t, true);
2175
+ t += 8;
2176
+ let c = n.getFloat64(t, true);
2177
+ t += 8;
2178
+ let u = r * 2, d = o === 1, E = u * (d ? 4 : 2);
2179
+ if (t + E > e.byteLength) throw X("Insufficient data to read UV chunk.", {
2180
+ expectedBytes: E,
2181
+ availableBytes: e.byteLength - t,
2182
+ offset: t,
2183
+ uvFormat: o,
2184
+ vertexCount: r
2185
+ });
2186
+ let T = e.byteOffset + t, v;
2187
+ if (d) v = sn(e.buffer, T, u).slice();
2188
+ else {
2189
+ let y = rt(e.buffer, T, u);
2190
+ v = new Float32Array(u);
2191
+ let m = 0, g = 0;
2192
+ for (let R = 0; R < u; R += 2) a ? (m = m + ie(y[R]) & 65535, g = g + ie(y[R + 1]) & 65535) : (m = y[R], g = y[R + 1]), v[R] = i + m * s, v[R + 1] = l + g * c;
2193
+ }
2194
+ return {
2195
+ uvs: v,
2196
+ offset: t + E
2197
+ };
2198
+ }
2199
+ function Io(e, n, t, r) {
2200
+ let a = t * 3;
2201
+ if (n + a > e.byteLength) throw X("Insufficient data to read vertex-color chunk.", {
2202
+ expectedBytes: a,
2203
+ availableBytes: e.byteLength - n,
2204
+ offset: n,
2205
+ vertexCount: t
2206
+ });
2207
+ let o = e.subarray(n, n + a);
2208
+ if (!r) return o.slice();
2209
+ let i = new Uint8Array(a), l = 0, s = 0, c = 0;
2210
+ for (let u = 0; u < a; u += 3) l = l + ie(o[u]) & 255, s = s + ie(o[u + 1]) & 255, c = c + ie(o[u + 2]) & 255, i[u] = l, i[u + 1] = s, i[u + 2] = c;
2211
+ return i;
2212
+ }
2213
+ function Po(e) {
2214
+ return typeof e == "string" ? x(e) : e instanceof Uint8Array ? e : new Uint8Array(e);
2215
+ }
2216
+ function Fo(e) {
2217
+ if (e.byteLength < 8) return e;
2218
+ let n = new DataView(e.buffer, e.byteOffset, e.byteLength);
2219
+ if (n.getUint32(0, true) !== 1515605075) return e;
2220
+ let t = n.getUint32(4, true), r = e.subarray(8), a = Math.max(r.byteLength * 1032 + 1024, 1 << 20);
2221
+ if (t > a) throw X("SLVZ header declares an implausible uncompressed length", {
2222
+ uncompressedLen: t,
2223
+ deflatedBytes: r.byteLength,
2224
+ maxPlausibleLen: a
2225
+ });
2226
+ let o;
2227
+ try {
2228
+ o = inflateSync(r, { out: new Uint8Array(t + 1) });
2229
+ } catch (i) {
2230
+ throw X(`Failed to inflate SLVZ blob: ${i instanceof Error ? i.message : String(i)}`, {
2231
+ uncompressedLen: t,
2232
+ deflatedBytes: r.byteLength
2233
+ });
2234
+ }
2235
+ if (o.byteLength !== t) throw X("SLVZ payload inflated to a different size than the header declares.", {
2236
+ declaredLen: t,
2237
+ actualLen: o.byteLength,
2238
+ deflatedBytes: r.byteLength
2239
+ });
2240
+ return o;
2241
+ }
2242
+ function Bo(e) {
2243
+ if (typeof TextDecoder < "u") return new TextDecoder("utf-8").decode(e);
2244
+ if (typeof globalThis.Buffer < "u") return globalThis.Buffer.from(e).toString("utf-8");
2245
+ throw new p("No UTF-8 decoder available in this environment.", l.INVALID_STATE);
2246
+ }
2247
+ function ko(e, n, t) {
2248
+ if (t === 0) return /* @__PURE__ */ new Int16Array(0);
2249
+ if (n % 2 === 0) return new Int16Array(e, n, t);
2250
+ let r = new Uint8Array(t * 2);
2251
+ return r.set(new Uint8Array(e, n, t * 2)), new Int16Array(r.buffer);
2252
+ }
2253
+ function sn(e, n, t) {
2254
+ if (t === 0) return /* @__PURE__ */ new Float32Array(0);
2255
+ if (n % 4 === 0) return new Float32Array(e, n, t);
2256
+ let r = new Uint8Array(t * 4);
2257
+ return r.set(new Uint8Array(e, n, t * 4)), new Float32Array(r.buffer);
2258
+ }
2259
+ function rt(e, n, t) {
2260
+ if (t === 0) return /* @__PURE__ */ new Uint16Array(0);
2261
+ if (n % 2 === 0) return new Uint16Array(e, n, t);
2262
+ let r = new Uint8Array(t * 2);
2263
+ return r.set(new Uint8Array(e, n, t * 2)), new Uint16Array(r.buffer);
2264
+ }
2265
+ function Uo(e, n, t) {
2266
+ if (t === 0) return /* @__PURE__ */ new Uint32Array(0);
2267
+ if (n % 4 === 0) return new Uint32Array(e, n, t);
2268
+ let r = new Uint8Array(t * 4);
2269
+ return r.set(new Uint8Array(e, n, t * 4)), new Uint32Array(r.buffer);
2270
+ }
2271
+ function _o(e, n) {
2272
+ if (e.length !== 0 && !(e instanceof Uint16Array && n > 65535)) {
2273
+ for (let t = 0; t < e.length; t++) if (e[t] >= n) throw X("Index out of range of vertexCount.", {
2274
+ indexPosition: t,
2275
+ indexValue: e[t],
2276
+ vertexCount: n
2277
+ });
2278
+ }
2279
+ }
2280
+ function ie(e) {
2281
+ return e >>> 1 ^ -(e & 1);
2282
+ }
2283
+ function Vo(e) {
2284
+ let n = new Int16Array(e.length), t = 0, r = 0, a = 0;
2285
+ for (let o = 0; o < e.length; o += 3) t = t + ie(e[o]) << 16 >> 16, r = r + ie(e[o + 1]) << 16 >> 16, a = a + ie(e[o + 2]) << 16 >> 16, n[o] = t, n[o + 1] = r, n[o + 2] = a;
2286
+ return n;
2287
+ }
2288
+ function zo(e) {
2289
+ let n = new Uint16Array(e.length), t = 0;
2290
+ for (let r = 0; r < e.length; r++) t = t + ie(e[r]) & 65535, n[r] = t;
2291
+ return n;
2292
+ }
2293
+ function Go(e) {
2294
+ let n = new Uint32Array(e.length), t = 0;
2295
+ for (let r = 0; r < e.length; r++) t = t + ie(e[r]) >>> 0, n[r] = t;
2296
+ return n;
2297
+ }
2298
+ function X(e, n) {
2299
+ return new p(e, l.VALIDATION_ERROR, { context: n });
2300
+ }
2301
+ var ln = 256 * 1024 * 1024;
2302
+ var ze = 1024;
2303
+ var ue = /* @__PURE__ */ new Map();
2304
+ var st = 0;
2305
+ function cn(e, n) {
2306
+ let t = 2166136261, r = (a) => {
2307
+ t ^= a, t = Math.imul(t, 16777619);
2308
+ };
2309
+ for (let a = 0; a < n.length; a++) r(n.charCodeAt(a));
2310
+ for (let a of e) {
2311
+ if (!a) {
2312
+ r(57005);
2313
+ continue;
2314
+ }
2315
+ let o = a.byteLength;
2316
+ if (r(o), (a.byteOffset & 3) === 0 && (o & 3) === 0) {
2317
+ let i = new Uint32Array(a.buffer, a.byteOffset, o >> 2), l = Math.min(ze, i.length);
2318
+ for (let s = 0; s < l; s++) r(i[s]);
2319
+ for (let s = Math.max(l, i.length - ze); s < i.length; s++) r(i[s]);
2320
+ } else {
2321
+ let i = new Uint8Array(a.buffer, a.byteOffset, o), l = Math.min(ze * 4, i.length);
2322
+ for (let s = 0; s < l; s++) r(i[s]);
2323
+ for (let s = Math.max(l, i.length - ze * 4); s < i.length; s++) r(i[s]);
2324
+ }
2325
+ }
2326
+ return `${(t >>> 0).toString(36)}:${e.length}`;
2327
+ }
2328
+ function No(e) {
2329
+ let n = e.index?.array.byteLength ?? 0;
2330
+ for (let t of Object.values(e.attributes)) n += t.array.byteLength;
2331
+ return n;
2332
+ }
2333
+ function Ge(e) {
2334
+ let n = ue.get(e);
2335
+ if (n) return ue.delete(e), ue.set(e, n), n.geometry;
2336
+ }
2337
+ function Ne(e, n) {
2338
+ let t = No(n);
2339
+ if (!(t > ln || (n.userData[Se] = true, ue.get(e)))) for (ue.set(e, {
2340
+ geometry: n,
2341
+ bytes: t
2342
+ }), st += t; st > ln && ue.size > 1;) {
2343
+ let a = ue.keys().next().value, o = ue.get(a);
2344
+ ue.delete(a), st -= o.bytes, delete o.geometry.userData[Se], o.geometry.dispose();
2345
+ }
2346
+ }
2347
+ function jo(e) {
2348
+ let { isFloat32: n, deltaEncoded: t, origin: r, scale: a, uvs: o, colors: i, jobs: l } = e, s = (m) => m >>> 1 ^ -(m & 1), c;
2349
+ if (n) c = e.vertexData;
2350
+ else {
2351
+ let m;
2352
+ if (t) {
2353
+ let h = e.vertexData;
2354
+ m = new Int16Array(h.length);
2355
+ let b = 0, C = 0, H = 0;
2356
+ for (let L = 0; L < h.length; L += 3) b = b + s(h[L]) << 16 >> 16, C = C + s(h[L + 1]) << 16 >> 16, H = H + s(h[L + 2]) << 16 >> 16, m[L] = b, m[L + 1] = C, m[L + 2] = H;
2357
+ } else m = e.vertexData;
2358
+ c = new Float32Array(m.length);
2359
+ let g = r[0], R = r[1], x = r[2], M = a[0], p = a[1], f = a[2];
2360
+ for (let h = 0; h < m.length; h += 3) c[h] = g + (m[h] + 32767) * M, c[h + 1] = R + (m[h + 1] + 32767) * p, c[h + 2] = x + (m[h + 2] + 32767) * f;
2361
+ }
2362
+ let u;
2363
+ if (t) {
2364
+ let m = e.indexData;
2365
+ if (m instanceof Uint16Array) {
2366
+ let g = new Uint16Array(m.length), R = 0;
2367
+ for (let x = 0; x < m.length; x++) R = R + s(m[x]) & 65535, g[x] = R;
2368
+ u = g;
2369
+ } else {
2370
+ let g = new Uint32Array(m.length), R = 0;
2371
+ for (let x = 0; x < m.length; x++) R = R + s(m[x]) >>> 0, g[x] = R;
2372
+ u = g;
2373
+ }
2374
+ } else u = e.indexData;
2375
+ let d = c.length / 3;
2376
+ for (let m = 0; m < u.length; m++) if (u[m] >= d) throw new Error(`Index ${u[m]} out of range of vertexCount ${d}`);
2377
+ let E = 1024, T = (m, g) => {
2378
+ let R = 2166136261, x = (M) => {
2379
+ R ^= M, R = Math.imul(R, 16777619);
2380
+ };
2381
+ for (let M = 0; M < g.length; M++) x(g.charCodeAt(M));
2382
+ for (let M of m) {
2383
+ if (!M) {
2384
+ x(57005);
2385
+ continue;
2386
+ }
2387
+ let p = M.byteLength;
2388
+ if (x(p), (M.byteOffset & 3) === 0 && (p & 3) === 0) {
2389
+ let f = new Uint32Array(M.buffer, M.byteOffset, p >> 2), h = Math.min(E, f.length);
2390
+ for (let b = 0; b < h; b++) x(f[b]);
2391
+ for (let b = Math.max(h, f.length - E); b < f.length; b++) x(f[b]);
2392
+ } else {
2393
+ let f = new Uint8Array(M.buffer, M.byteOffset, p), h = Math.min(E * 4, f.length);
2394
+ for (let b = 0; b < h; b++) x(f[b]);
2395
+ for (let b = Math.max(h, f.length - E * 4); b < f.length; b++) x(f[b]);
2396
+ }
2397
+ }
2398
+ return `${(R >>> 0).toString(36)}:${m.length}`;
2399
+ }, v = (m, g) => {
2400
+ let R = [], x = m;
2401
+ for (let M of g) {
2402
+ x += `|${M.vertexStart},${M.vertexCount},${M.indexStart},${M.indexCount}`;
2403
+ let p = M.vertexStart * 3, f = p + M.vertexCount * 3;
2404
+ R.push(c.subarray(p, f)), R.push(u.subarray(M.indexStart, M.indexStart + M.indexCount)), R.push(o ? o.subarray(M.vertexStart * 2, (M.vertexStart + M.vertexCount) * 2) : null), R.push(i ? i.subarray(p, f) : null);
2405
+ }
2406
+ return T(R, x);
2407
+ }, y = [];
2408
+ for (let m of l) {
2409
+ let g = 0, R = 0;
2410
+ for (let H of m.windows) g += H.vertexCount, R += H.indexCount;
2411
+ let x = new Float32Array(g * 3), M = new Uint32Array(R), p = o ? new Float32Array(g * 2) : null, f = i ? new Uint8Array(g * 3) : null, h = 0, b = 0;
2412
+ for (let H of m.windows) {
2413
+ let L = H.vertexStart * 3;
2414
+ x.set(c.subarray(L, L + H.vertexCount * 3), h * 3), p && o && p.set(o.subarray(H.vertexStart * 2, (H.vertexStart + H.vertexCount) * 2), h * 2), f && i && f.set(i.subarray(L, L + H.vertexCount * 3), h * 3);
2415
+ let P = H.vertexStart, k = H.vertexStart + H.vertexCount, O = h - H.vertexStart;
2416
+ for (let I = 0; I < H.indexCount; I++) {
2417
+ let S = u[H.indexStart + I];
2418
+ if (S < P || S >= k) throw new Error(`Index ${S} outside vertex window [${P}, ${k})`);
2419
+ M[b + I] = S + O;
2420
+ }
2421
+ h += H.vertexCount, b += H.indexCount;
2422
+ }
2423
+ let C = new Float32Array(g * 3);
2424
+ for (let H = 0; H < M.length; H += 3) {
2425
+ let L = M[H] * 3, P = M[H + 1] * 3, k = M[H + 2] * 3, O = x[k] - x[P], I = x[k + 1] - x[P + 1], S = x[k + 2] - x[P + 2], D = x[L] - x[P], G = x[L + 1] - x[P + 1], j = x[L + 2] - x[P + 2], $ = I * j - S * G, U = S * D - O * j, Q = O * G - I * D;
2426
+ C[L] += $, C[L + 1] += U, C[L + 2] += Q, C[P] += $, C[P + 1] += U, C[P + 2] += Q, C[k] += $, C[k + 1] += U, C[k + 2] += Q;
2427
+ }
2428
+ for (let H = 0; H < C.length; H += 3) {
2429
+ let L = C[H], P = C[H + 1], k = C[H + 2], O = Math.sqrt(L * L + P * P + k * k) || 1;
2430
+ C[H] = L / O, C[H + 1] = P / O, C[H + 2] = k / O;
2431
+ }
2432
+ y.push({
2433
+ key: v(m.kind, m.windows),
2434
+ positions: x,
2435
+ normals: C,
2436
+ indices: M,
2437
+ uvs: p,
2438
+ colors: f
2439
+ });
2440
+ }
2441
+ return y;
2442
+ }
2443
+ function un() {
2444
+ return [
2445
+ `const assemble = ${jo.toString()};`,
2446
+ "self.onmessage = (event) => {",
2447
+ " const { id, input } = event.data;",
2448
+ " try {",
2449
+ " const geometries = assemble(input);",
2450
+ " const transfer = [];",
2451
+ " for (const g of geometries) {",
2452
+ " transfer.push(g.positions.buffer, g.normals.buffer, g.indices.buffer);",
2453
+ " if (g.uvs) transfer.push(g.uvs.buffer);",
2454
+ " if (g.colors) transfer.push(g.colors.buffer);",
2455
+ " }",
2456
+ " self.postMessage({ id, geometries }, transfer);",
2457
+ " } catch (error) {",
2458
+ " self.postMessage({ id, error: String((error && error.message) || error) });",
2459
+ " }",
2460
+ "};"
2461
+ ].join(`
2462
+ `);
2463
+ }
2464
+ async function Vi(e, n) {
2465
+ let { debug: t = false } = n ?? {}, r = t ? performance.now() : 0, a, o = performance.now();
2466
+ try {
2467
+ a = JSON.parse(e);
2468
+ } catch (l) {
2469
+ return m().error("Error parsing mesh batch envelope JSON:", l), [];
2470
+ }
2471
+ let i = performance.now() - o;
2472
+ return await lt(a, n, {
2473
+ parseTime: i,
2474
+ perfStart: r
2475
+ });
2476
+ }
2477
+ async function lt(e, n, t) {
2478
+ let { mergeByMaterial: r = true, applyTransforms: a = true, debug: o = false, material: i } = n ?? {}, { parseTime: l = 0, perfStart: s = o ? performance.now() : 0 } = t ?? {};
2479
+ if (!e.compressedData) return [];
2480
+ let c = await En(e.compressedData, {
2481
+ mergeByMaterial: r,
2482
+ debug: o,
2483
+ material: i,
2484
+ fallback: {
2485
+ materials: e.materials,
2486
+ groups: e.groups,
2487
+ sourceComponentId: e.sourceComponentId
2488
+ }
2489
+ });
2490
+ if (c) return c;
2491
+ let u = performance.now();
2492
+ return dn(at(e.compressedData), {
2493
+ mergeByMaterial: r,
2494
+ applyTransforms: a,
2495
+ debug: o,
2496
+ material: i,
2497
+ parseTime: l,
2498
+ decodeTime: performance.now() - u,
2499
+ perfStart: s,
2500
+ blobBytes: o ? ra(e.compressedData) : 0,
2501
+ fallback: {
2502
+ materials: e.materials,
2503
+ groups: e.groups,
2504
+ sourceComponentId: e.sourceComponentId
2505
+ }
2506
+ });
2507
+ }
2508
+ async function zi(e, n) {
2509
+ let { mergeByMaterial: t = true, applyTransforms: r = true, debug: a = false, material: o } = n ?? {}, i = a ? performance.now() : 0, l = await En(e, {
2510
+ mergeByMaterial: t,
2511
+ debug: a,
2512
+ material: o
2513
+ });
2514
+ if (l) return l;
2515
+ let s = performance.now(), c = at(e), u = performance.now() - s, d = e.byteLength;
2516
+ return dn(c, {
2517
+ mergeByMaterial: t,
2518
+ applyTransforms: r,
2519
+ debug: a,
2520
+ material: o,
2521
+ parseTime: 0,
2522
+ decodeTime: u,
2523
+ perfStart: i,
2524
+ blobBytes: d
2525
+ });
2526
+ }
2527
+ function dn(e, n) {
2528
+ let { mergeByMaterial: t, applyTransforms: r, debug: a, material: o, parseTime: i, decodeTime: l, perfStart: s, blobBytes: c, fallback: u } = n, d = e.metadata.materials ?? u?.materials ?? [], E = e.metadata.groups ?? u?.groups ?? [], T = u?.sourceComponentId ?? e.metadata.sourceComponentId, v = (e.flags & 1) !== 0;
2529
+ mn(E, d.length, e.vertices.length / 3, e.indices.length);
2530
+ let y = v ? $o(e.vertices) : Wo(e.vertices, e.origin, e.scale);
2531
+ if (a) {
2532
+ let M = e.vertices.byteLength + e.indices.byteLength;
2533
+ m().debug("Mesh Batch Stats:"), m().debug(` Materials: ${d.length} | Groups: ${E.length}`), m().debug(` Vertices: ${e.vertices.length / 3} | Indices: ${e.indices.length}`), m().debug(` Format: ${v ? "float32" : "int16 quantized"}`), m().debug(` Blob: ${(c / 1024 / 1024).toFixed(2)} MB | Geometry on wire: ${(M / 1024 / 1024).toFixed(2)} MB`);
2534
+ }
2535
+ let m$2 = performance.now(), g = d.map((M) => hn(M, {
2536
+ vertexColors: e.colors != null,
2537
+ appearance: o
2538
+ })), R = [];
2539
+ for (let M of E) if (t && M.meshes.length > 1) {
2540
+ let p = ta(M, y, e.indices, g, e.uvs, e.colors);
2541
+ p.userData.sourceComponentId = T ?? null, R.push(p);
2542
+ } else {
2543
+ let p = na(M, y, e.indices, g, e.uvs, e.colors);
2544
+ for (let f of p) f.userData.sourceComponentId = T ?? null;
2545
+ R.push(...p);
2546
+ }
2547
+ let x = performance.now() - m$2;
2548
+ if (a) {
2549
+ let M = performance.now() - s;
2550
+ m().debug("Performance:"), i > 0 && m().debug(` Parse JSON: ${i.toFixed(2)}ms`), m().debug(` Decode binary: ${l.toFixed(2)}ms`), m().debug(` Create Meshes: ${x.toFixed(2)}ms`), m().debug(` Total: ${M.toFixed(2)}ms`);
2551
+ }
2552
+ return Promise.resolve(R);
2553
+ }
2554
+ function Ce(e, n) {
2555
+ return new p(e, l.VALIDATION_ERROR, { context: n });
2556
+ }
2557
+ function mn(e, n, t, r) {
2558
+ for (let a of e) {
2559
+ if (!Number.isInteger(a.materialId) || a.materialId < 0 || a.materialId >= n) throw Ce("Group materialId out of range of the materials array.", {
2560
+ materialId: a.materialId,
2561
+ materialCount: n
2562
+ });
2563
+ for (let o of a.meshes) {
2564
+ let i = {
2565
+ vertexStart: o.vertexStart,
2566
+ vertexCount: o.vertexCount,
2567
+ indexStart: o.indexStart,
2568
+ indexCount: o.indexCount
2569
+ };
2570
+ for (let [l, s] of Object.entries(i)) if (!Number.isInteger(s) || s < 0) throw Ce(`Mesh metadata field "${l}" must be a non-negative integer.`, {
2571
+ meshName: o.name,
2572
+ field: l,
2573
+ value: s
2574
+ });
2575
+ if (o.vertexStart + o.vertexCount > t) throw Ce("Mesh vertex window exceeds the batch vertex buffer.", {
2576
+ meshName: o.name,
2577
+ vertexStart: o.vertexStart,
2578
+ vertexCount: o.vertexCount,
2579
+ totalVertexCount: t
2580
+ });
2581
+ if (o.indexStart + o.indexCount > r) throw Ce("Mesh index window exceeds the batch index buffer.", {
2582
+ meshName: o.name,
2583
+ indexStart: o.indexStart,
2584
+ indexCount: o.indexCount,
2585
+ totalIndexCount: r
2586
+ });
2587
+ }
2588
+ }
2589
+ }
2590
+ function fn(e, n) {
2591
+ return Ce("Index references a vertex outside its mesh's vertex window.", {
2592
+ meshName: n.name,
2593
+ indexValue: e,
2594
+ vertexStart: n.vertexStart,
2595
+ vertexCount: n.vertexCount
2596
+ });
2597
+ }
2598
+ function pn(e, n, t, r, a, o) {
2599
+ let i = [], l = e;
2600
+ for (let s of n) {
2601
+ l += `|${s.vertexStart},${s.vertexCount},${s.indexStart},${s.indexCount}`;
2602
+ let c = s.vertexStart * 3, u = c + s.vertexCount * 3;
2603
+ i.push(t.subarray(c, u)), i.push(r.subarray(s.indexStart, s.indexStart + s.indexCount)), i.push(a ? a.subarray(s.vertexStart * 2, (s.vertexStart + s.vertexCount) * 2) : null), i.push(o ? o.subarray(c, u) : null);
2604
+ }
2605
+ return cn(i, l);
2606
+ }
2607
+ function Wo(e, n, t, r) {
2608
+ let a = new Float32Array(e.length), o = n[0], i = n[1], l = n[2], s = t[0], c = t[1], u = t[2];
2609
+ for (let d = 0; d < e.length; d += 3) a[d] = o + (e[d] + 32767) * s, a[d + 1] = i + (e[d + 1] + 32767) * c, a[d + 2] = l + (e[d + 2] + 32767) * u;
2610
+ return a;
2611
+ }
2612
+ function $o(e, n) {
2613
+ return e;
2614
+ }
2615
+ var qo = 5e4;
2616
+ var he;
2617
+ var He = /* @__PURE__ */ new Map();
2618
+ var Yo = 1;
2619
+ function Xo() {
2620
+ if (he !== void 0) return he;
2621
+ if (typeof Worker > "u" || typeof Blob > "u" || typeof URL > "u" || typeof URL.createObjectURL != "function") return he = null, null;
2622
+ try {
2623
+ let e = URL.createObjectURL(new Blob([un()], { type: "text/javascript" })), n = new Worker(e);
2624
+ n.onmessage = (t) => {
2625
+ let { id: r, geometries: a, error: o } = t.data, i = He.get(r);
2626
+ i && (He.delete(r), a ? i.resolve(a) : i.reject(new Error(o ?? "mesh assembly failed in worker")));
2627
+ }, n.onerror = () => {
2628
+ for (let t of He.values()) t.reject(/* @__PURE__ */ new Error("mesh assembly worker crashed"));
2629
+ He.clear(), n.terminate(), he = null;
2630
+ }, he = n;
2631
+ } catch {
2632
+ he = null;
2633
+ }
2634
+ return he;
2635
+ }
2636
+ function Ko(e, n, t) {
2637
+ return new Promise((r, a) => {
2638
+ let o = Yo++;
2639
+ He.set(o, {
2640
+ resolve: r,
2641
+ reject: a
2642
+ }), e.postMessage({
2643
+ id: o,
2644
+ input: n
2645
+ }, t);
2646
+ });
2647
+ }
2648
+ async function En(e, n) {
2649
+ if (typeof Worker > "u") return null;
2650
+ let t = it(e);
2651
+ if (t.indexData.length / 3 < qo) return null;
2652
+ let r = Xo();
2653
+ if (!r) return null;
2654
+ let a = t.metadata.materials ?? n.fallback?.materials ?? [], o = t.metadata.groups ?? n.fallback?.groups ?? [], i = n.fallback?.sourceComponentId ?? t.metadata.sourceComponentId;
2655
+ mn(o, a.length, t.vertexCount, t.indexData.length);
2656
+ let l = (m) => ({
2657
+ vertexStart: m.vertexStart,
2658
+ vertexCount: m.vertexCount,
2659
+ indexStart: m.indexStart,
2660
+ indexCount: m.indexCount
2661
+ }), s = [], c = [];
2662
+ for (let m of o) if (n.mergeByMaterial && m.meshes.length > 1) s.push({
2663
+ kind: "merged",
2664
+ windows: m.meshes.map(l)
2665
+ }), c.push({
2666
+ kind: "merged",
2667
+ group: m
2668
+ });
2669
+ else for (let g of m.meshes) s.push({
2670
+ kind: "single",
2671
+ windows: [l(g)]
2672
+ }), c.push({
2673
+ kind: "single",
2674
+ group: m,
2675
+ meshMeta: g
2676
+ });
2677
+ let u = t.vertexData.slice(), d = t.indexData.slice(), E = [u.buffer, d.buffer];
2678
+ t.uvs && E.push(t.uvs.buffer), t.colors && E.push(t.colors.buffer);
2679
+ let T;
2680
+ try {
2681
+ T = await Ko(r, {
2682
+ vertexData: u,
2683
+ isFloat32: t.isFloat32,
2684
+ deltaEncoded: t.deltaEncoded,
2685
+ origin: t.origin,
2686
+ scale: t.scale,
2687
+ indexData: d,
2688
+ uvs: t.uvs,
2689
+ colors: t.colors,
2690
+ jobs: s
2691
+ }, E);
2692
+ } catch (m$3) {
2693
+ return m().warn("Mesh assembly worker failed; falling back to main-thread parse.", m$3), null;
2694
+ }
2695
+ if (T.length !== s.length) return null;
2696
+ let v = a.map((m) => hn(m, {
2697
+ vertexColors: t.colors != null,
2698
+ appearance: n.material
2699
+ })), y = [];
2700
+ for (let m = 0; m < T.length; m++) {
2701
+ let g = T[m], R = c[m], x = Ge(g.key);
2702
+ x || (x = new z.BufferGeometry(), x.setAttribute("position", new z.BufferAttribute(g.positions, 3)), x.setAttribute("normal", new z.BufferAttribute(g.normals, 3)), x.setIndex(new z.BufferAttribute(g.indices, 1)), g.uvs && x.setAttribute("uv", new z.BufferAttribute(g.uvs, 2)), g.colors && x.setAttribute("color", new z.BufferAttribute(g.colors, 3, true)), Ne(g.key, x));
2703
+ let M = R.kind === "merged" ? gn(x, R.group, v) : yn(x, R.meshMeta, R.group, v);
2704
+ M.userData.sourceComponentId = i ?? null, y.push(M);
2705
+ }
2706
+ return n.debug && m().debug(`Mesh batch assembled off-thread: ${y.length} meshes, ${t.indexData.length / 3} triangles`), y;
2707
+ }
2708
+ var Zo = .5;
2709
+ var Jo = .5;
2710
+ var Qo = .3;
2711
+ function hn(e, n) {
2712
+ let t = Rt(e.color), r = n?.vertexColors ?? false, a = n?.appearance, o = new z.MeshPhysicalMaterial({
2713
+ color: t,
2714
+ metalness: e.metalness,
2715
+ roughness: e.roughness,
2716
+ opacity: e.opacity,
2717
+ transparent: e.transparent,
2718
+ vertexColors: r,
2719
+ side: a?.cullBackfaces ? z.FrontSide : z.DoubleSide,
2720
+ polygonOffset: true,
2721
+ polygonOffsetFactor: .5,
2722
+ polygonOffsetUnits: .5,
2723
+ depthWrite: true,
2724
+ depthTest: true
2725
+ });
2726
+ return a?.envMapIntensity != null && (o.envMapIntensity = a.envMapIntensity), e.metalness > Zo && (o.clearcoat = Jo, o.clearcoatRoughness = Qo), r && ea(o), e.map && Xt(o, e.map), o;
2727
+ }
2728
+ function ea(e) {
2729
+ e.onBeforeCompile = (n) => {
2730
+ n.vertexShader = n.vertexShader.replace("#include <color_vertex>", `#include <color_vertex>
2731
+ #if defined( USE_COLOR ) || defined( USE_COLOR_ALPHA )
2732
+ vColor.rgb = mix(
2733
+ vColor.rgb / 12.92,
2734
+ pow( ( vColor.rgb + 0.055 ) / 1.055, vec3( 2.4 ) ),
2735
+ step( vec3( 0.04045 ), vColor.rgb )
2736
+ );
2737
+ #endif`);
2738
+ };
2739
+ }
2740
+ function ta(e, n, t, r, a = null, o = null) {
2741
+ let i = pn("merged", e.meshes, n, t, a, o), l = Ge(i);
2742
+ if (!l) {
2743
+ let s = 0, c = 0;
2744
+ for (let m of e.meshes) s += m.vertexCount, c += m.indexCount;
2745
+ let u = new Float32Array(s * 3), d = new Uint32Array(c), E = a ? new Float32Array(s * 2) : null, T = o ? new Uint8Array(s * 3) : null, v = 0, y = 0;
2746
+ for (let m of e.meshes) {
2747
+ let g = m.vertexStart * 3, R = m.vertexCount * 3;
2748
+ if (u.set(n.subarray(g, g + R), v * 3), E && a) {
2749
+ let h = m.vertexStart * 2;
2750
+ E.set(a.subarray(h, h + m.vertexCount * 2), v * 2);
2751
+ }
2752
+ T && o && T.set(o.subarray(g, g + R), v * 3);
2753
+ let x = t.subarray(m.indexStart, m.indexStart + m.indexCount), M = v - m.vertexStart, p = m.vertexStart, f = m.vertexStart + m.vertexCount;
2754
+ for (let h = 0; h < x.length; h++) {
2755
+ let b = x[h];
2756
+ if (b < p || b >= f) throw fn(b, m);
2757
+ d[y + h] = b + M;
2758
+ }
2759
+ v += m.vertexCount, y += m.indexCount;
2760
+ }
2761
+ l = new z.BufferGeometry(), l.setAttribute("position", new z.BufferAttribute(u, 3)), l.setIndex(new z.BufferAttribute(d, 1)), E && l.setAttribute("uv", new z.BufferAttribute(E, 2)), T && l.setAttribute("color", new z.BufferAttribute(T, 3, true)), l.computeVertexNormals(), Ne(i, l);
2762
+ }
2763
+ return gn(l, e, r);
2764
+ }
2765
+ function gn(e, n, t) {
2766
+ let r = new z.Mesh(e, t[n.materialId]), a = n.meshes[0], o = n.meshes.map((i) => i.name).filter((i) => i && i.length > 0);
2767
+ return r.name = o.length > 0 ? o[0] : `merged_material_${n.materialId}`, r.castShadow = true, r.receiveShadow = true, r.userData = {
2768
+ source: "compute",
2769
+ name: r.name,
2770
+ layer: a?.layer ?? "",
2771
+ originalIndex: a?.originalIndex ?? 0,
2772
+ metadata: a?.metadata ?? {},
2773
+ mergedFrom: n.meshes.slice(1).map((i) => ({
2774
+ name: i.name,
2775
+ layer: i.layer,
2776
+ originalIndex: i.originalIndex
2777
+ }))
2778
+ }, r;
2779
+ }
2780
+ function na(e, n, t, r, a = null, o = null) {
2781
+ let i = [];
2782
+ for (let l of e.meshes) {
2783
+ let s = l.vertexStart * 3, c = l.vertexCount * 3, u = pn("single", [l], n, t, a, o), d = Ge(u);
2784
+ if (!d) {
2785
+ let E = n.slice(s, s + c), T = t.subarray(l.indexStart, l.indexStart + l.indexCount), v = new Uint32Array(T.length), y = l.vertexStart, m = l.vertexStart + l.vertexCount;
2786
+ for (let g = 0; g < T.length; g++) {
2787
+ let R = T[g];
2788
+ if (R < y || R >= m) throw fn(R, l);
2789
+ v[g] = R - y;
2790
+ }
2791
+ if (d = new z.BufferGeometry(), d.setAttribute("position", new z.BufferAttribute(E, 3)), d.setIndex(new z.BufferAttribute(v, 1)), a) {
2792
+ let g = l.vertexStart * 2, R = a.slice(g, g + l.vertexCount * 2);
2793
+ d.setAttribute("uv", new z.BufferAttribute(R, 2));
2794
+ }
2795
+ if (o) {
2796
+ let g = o.slice(s, s + c);
2797
+ d.setAttribute("color", new z.BufferAttribute(g, 3, true));
2798
+ }
2799
+ d.computeVertexNormals(), Ne(u, d);
2800
+ }
2801
+ i.push(yn(d, l, e, r));
2802
+ }
2803
+ return i;
2804
+ }
2805
+ function yn(e, n, t, r) {
2806
+ let a = new z.Mesh(e, r[t.materialId]);
2807
+ return a.name = n.name, a.userData = {
2808
+ source: "compute",
2809
+ name: n.name,
2810
+ layer: n.layer ?? "",
2811
+ originalIndex: n.originalIndex,
2812
+ metadata: n.metadata ?? {}
2813
+ }, a.castShadow = true, a.receiveShadow = true, a;
2814
+ }
2815
+ function ra(e) {
2816
+ return Math.floor(e.length * 3 / 4);
2817
+ }
2818
+ var bn = {
2819
+ Angstroms: 1e-10,
2820
+ Nanometers: 1e-9,
2821
+ Microns: 1e-6,
2822
+ Millimeters: .001,
2823
+ Centimeters: .01,
2824
+ Decimeters: .1,
2825
+ Meters: 1,
2826
+ Dekameters: 10,
2827
+ Hectometers: 100,
2828
+ Kilometers: 1e3,
2829
+ Megameters: 1e6,
2830
+ Gigameters: 1e9,
2831
+ Microinches: 2.54e-8,
2832
+ Mils: 254e-7,
2833
+ Inches: .0254,
2834
+ Feet: .3048,
2835
+ Yards: .9144,
2836
+ Miles: 1609.344,
2837
+ NauticalMiles: 1852
2838
+ };
2839
+ var oa = "Display";
2840
+ var aa = "DisplayBatch";
2841
+ function ia(e) {
2842
+ let n = e.split(".");
2843
+ return n.includes(oa) || n.includes(aa);
2844
+ }
2845
+ var Tn = /* @__PURE__ */ new Set();
2846
+ async function qi(e, n) {
2847
+ let t = performance.now(), r = [], { allowScaling: a = true, allowAutoPosition: o = true, rhino: i, debug: l = false, parsing: s = {} } = n ?? {};
2848
+ try {
2849
+ return await la(e, r, a ? sa(e.modelunits) : 1, s, i, l), o && ma(r), r;
2850
+ } catch (c) {
2851
+ throw fa(c, r), c;
2852
+ } finally {
2853
+ l && Ea(t);
2854
+ }
2855
+ }
2856
+ function sa(e) {
2857
+ let n = bn[e];
2858
+ return n !== void 0 ? n : (Tn.has(e) || (Tn.add(e), m().warn(`Unknown Rhino model unit "${e}" \u2014 geometry will not be scaled (factor 1). Known units: ${Object.keys(bn).join(", ")}.`)), 1);
2859
+ }
2860
+ async function la(e, n, t, r, a, o) {
2861
+ for (let i of e.values) {
2862
+ let l = i.InnerTree;
2863
+ for (let s in l) {
2864
+ let c = l[s];
2865
+ c && await ca(c, n, t, r, a, o);
2866
+ }
2867
+ }
2868
+ }
2869
+ async function ca(e, n, t, r, a, o) {
2870
+ for (let i of e) {
2871
+ if (!ia(i.type)) continue;
2872
+ let l = {
2873
+ mergeByMaterial: true,
2874
+ applyTransforms: true,
2875
+ debug: false,
2876
+ ...r
2877
+ }, s = ua(i.data);
2878
+ if (!s) {
2879
+ m().error("Error parsing display batch envelope: invalid JSON");
2880
+ continue;
2881
+ }
2882
+ let c = await lt(s, l), u = Jt(s.items, {
2883
+ rhino: a,
2884
+ applyTransforms: l.applyTransforms
2885
+ }), d = [...c, ...u];
2886
+ if (t !== 1) for (let E of d) E.scale.set(t, t, t);
2887
+ n.push(...d), o && m().debug(`Extracted ${c.length} meshes and ${u.length} items from batch`);
2888
+ }
2889
+ }
2890
+ function ua(e) {
2891
+ return typeof e == "string" ? da(e) : e;
2892
+ }
2893
+ function da(e) {
2894
+ try {
2895
+ return JSON.parse(e);
2896
+ } catch {
2897
+ return;
2898
+ }
2899
+ }
2900
+ function ma(e) {
2901
+ if (e.length === 0) return;
2902
+ xt(e, $e(e).min.z, "z");
2903
+ }
2904
+ function fa(e, n) {
2905
+ m().error("An unexpected error occurred:", e), pa(n);
2906
+ }
2907
+ function pa(e) {
2908
+ for (let n of e) {
2909
+ let t = n;
2910
+ t.geometry && t.geometry.dispose(), t.material && (Array.isArray(t.material) ? t.material.forEach((r) => r.dispose()) : t.material.dispose());
2911
+ }
2912
+ }
2913
+ function Ea(e) {
2914
+ let n = performance.now() - e;
2915
+ m().info("Time to process meshes:", `${n.toFixed(2)}ms`);
2916
+ }
2917
+
2918
+ export { $e as $, Ao as A, Co as C, Do as D, Er as E, Fr as F, Gt as G, Ho as H, Jt as J, Ln as L, Mo as M, Pr as P, Qe as Q, Rt as R, So as S, Vt as V, Yt as Y, Za as Z, Ai as a, bn as b, La as c, xt as d, en as e, Mt as f, qi as g, hi as h, qr as i, jt as j, at as k, Vi as l, lt as m, nn as n, ot as o, pi as p, qt as q, zt as r, ba as s, tn as t, vt as v, wt as w, xe as x, zi as z };
2919
+ //# sourceMappingURL=chunk-NVMSD4CC.js-BgY8vvUs.js.map