@felbrasil/dreamy 0.0.0-stage → 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (450) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +69 -2
  3. package/dist/api.d.ts +1 -0
  4. package/dist/api.js +2 -0
  5. package/dist/api.js.map +7 -0
  6. package/dist/chunks/chunk-72DMUKP3.js +1470 -0
  7. package/dist/chunks/chunk-72DMUKP3.js.map +7 -0
  8. package/dist/chunks/chunk-VZMBE5MV.js +5936 -0
  9. package/dist/chunks/chunk-VZMBE5MV.js.map +7 -0
  10. package/dist/chunks/chunk-ZU72KKME.js +8600 -0
  11. package/dist/chunks/chunk-ZU72KKME.js.map +7 -0
  12. package/dist/core.d.ts +1 -0
  13. package/dist/core.js +34 -0
  14. package/dist/core.js.map +7 -0
  15. package/dist/dreamy_evaluator.wasm +0 -0
  16. package/dist/evaluator.d.ts +1 -0
  17. package/dist/evaluator.js +52 -0
  18. package/dist/evaluator.js.map +7 -0
  19. package/dist/index.d.ts +1 -0
  20. package/dist/index.js +7280 -0
  21. package/dist/index.js.map +7 -0
  22. package/dist/styles.css +1 -0
  23. package/dist/types/api/src/commands/command.d.ts +7 -0
  24. package/dist/types/api/src/commands/decal-commands.d.ts +35 -0
  25. package/dist/types/api/src/commands/palette-commands.d.ts +14 -0
  26. package/dist/types/api/src/commands/rig-commands.d.ts +229 -0
  27. package/dist/types/api/src/commands/scene-commands.d.ts +64 -0
  28. package/dist/types/api/src/commands/sculpt-commands.d.ts +111 -0
  29. package/dist/types/api/src/commands/stamp-spec.d.ts +3 -0
  30. package/dist/types/api/src/commands/target.d.ts +8 -0
  31. package/dist/types/api/src/creation-api.d.ts +52 -0
  32. package/dist/types/api/src/events/creation-event.d.ts +7 -0
  33. package/dist/types/api/src/events/decal-events.d.ts +20 -0
  34. package/dist/types/api/src/events/event-of.d.ts +6 -0
  35. package/dist/types/api/src/events/palette-events.d.ts +8 -0
  36. package/dist/types/api/src/events/rig-events.d.ts +161 -0
  37. package/dist/types/api/src/events/scene-events.d.ts +34 -0
  38. package/dist/types/api/src/events/sculpt-events.d.ts +53 -0
  39. package/dist/types/api/src/id.d.ts +1 -0
  40. package/dist/types/api/src/index.d.ts +31 -0
  41. package/dist/types/api/src/model/creation.d.ts +22 -0
  42. package/dist/types/api/src/model/decal.d.ts +48 -0
  43. package/dist/types/api/src/model/look.d.ts +56 -0
  44. package/dist/types/api/src/model/math.d.ts +18 -0
  45. package/dist/types/api/src/model/palette.d.ts +11 -0
  46. package/dist/types/api/src/model/rig.d.ts +125 -0
  47. package/dist/types/api/src/model/scene-object.d.ts +22 -0
  48. package/dist/types/api/src/model/sculpt.d.ts +13 -0
  49. package/dist/types/api/src/model/stamp.d.ts +53 -0
  50. package/dist/types/api/src/model/wing.d.ts +35 -0
  51. package/dist/types/api/src/ports/basic-ports.d.ts +7 -0
  52. package/dist/types/api/src/ports/evaluator.d.ts +62 -0
  53. package/dist/types/api/src/ports/persistence.d.ts +89 -0
  54. package/dist/types/api/src/ports/viewport.d.ts +125 -0
  55. package/dist/types/core/src/apply/body-part-added.d.ts +2 -0
  56. package/dist/types/core/src/apply/body-part-removed.d.ts +2 -0
  57. package/dist/types/core/src/apply/bone-removed.d.ts +3 -0
  58. package/dist/types/core/src/apply/bone-renamed.d.ts +2 -0
  59. package/dist/types/core/src/apply/bone-reparented.d.ts +2 -0
  60. package/dist/types/core/src/apply/bone-sizes-set.d.ts +3 -0
  61. package/dist/types/core/src/apply/bone-tags-set.d.ts +2 -0
  62. package/dist/types/core/src/apply/bone-transforms-set.d.ts +6 -0
  63. package/dist/types/core/src/apply/bones-added.d.ts +2 -0
  64. package/dist/types/core/src/apply/creature-generated.d.ts +3 -0
  65. package/dist/types/core/src/apply/decal-removed.d.ts +2 -0
  66. package/dist/types/core/src/apply/decals-added.d.ts +2 -0
  67. package/dist/types/core/src/apply/design-deleted.d.ts +2 -0
  68. package/dist/types/core/src/apply/design-saved.d.ts +2 -0
  69. package/dist/types/core/src/apply/flat-wings-set.d.ts +2 -0
  70. package/dist/types/core/src/apply/object-renamed.d.ts +2 -0
  71. package/dist/types/core/src/apply/object-reparented.d.ts +2 -0
  72. package/dist/types/core/src/apply/object-transforms-set.d.ts +2 -0
  73. package/dist/types/core/src/apply/objects-deleted.d.ts +2 -0
  74. package/dist/types/core/src/apply/objects-duplicated.d.ts +3 -0
  75. package/dist/types/core/src/apply/palette-color-set.d.ts +2 -0
  76. package/dist/types/core/src/apply/palette-reset.d.ts +2 -0
  77. package/dist/types/core/src/apply/part-grafted.d.ts +3 -0
  78. package/dist/types/core/src/apply/part-slot-swapped.d.ts +3 -0
  79. package/dist/types/core/src/apply/pivot-set.d.ts +2 -0
  80. package/dist/types/core/src/apply/pose-preset-applied.d.ts +3 -0
  81. package/dist/types/core/src/apply/pose-reset.d.ts +3 -0
  82. package/dist/types/core/src/apply/premade-applied.d.ts +3 -0
  83. package/dist/types/core/src/apply/region-blend-set.d.ts +3 -0
  84. package/dist/types/core/src/apply/rig-created.d.ts +2 -0
  85. package/dist/types/core/src/apply/rig-mirror-set.d.ts +2 -0
  86. package/dist/types/core/src/apply/rig-mode-set.d.ts +2 -0
  87. package/dist/types/core/src/apply/sculpt-created.d.ts +2 -0
  88. package/dist/types/core/src/apply/sculpt-look-set.d.ts +3 -0
  89. package/dist/types/core/src/apply/smear-group-set.d.ts +2 -0
  90. package/dist/types/core/src/apply/stamp-placements-set.d.ts +2 -0
  91. package/dist/types/core/src/apply/stamp-props-set.d.ts +2 -0
  92. package/dist/types/core/src/apply/stamps-added.d.ts +2 -0
  93. package/dist/types/core/src/apply/stamps-removed.d.ts +2 -0
  94. package/dist/types/core/src/apply/symmetry-set-for-all.d.ts +2 -0
  95. package/dist/types/core/src/atoms/check/check.d.ts +7 -0
  96. package/dist/types/core/src/atoms/decal/decal-limits.d.ts +6 -0
  97. package/dist/types/core/src/atoms/decal/decal-problem.d.ts +4 -0
  98. package/dist/types/core/src/atoms/decal/design-problem.d.ts +4 -0
  99. package/dist/types/core/src/atoms/look/catalogs.d.ts +9 -0
  100. package/dist/types/core/src/atoms/look/default-look.d.ts +4 -0
  101. package/dist/types/core/src/atoms/look/look-problem.d.ts +7 -0
  102. package/dist/types/core/src/atoms/look/merge-look.d.ts +3 -0
  103. package/dist/types/core/src/atoms/math/mat4.d.ts +14 -0
  104. package/dist/types/core/src/atoms/math/quat.d.ts +18 -0
  105. package/dist/types/core/src/atoms/math/transform.d.ts +7 -0
  106. package/dist/types/core/src/atoms/math/vec3.d.ts +18 -0
  107. package/dist/types/core/src/atoms/palette/default-palette.d.ts +4 -0
  108. package/dist/types/core/src/atoms/palette/is-color-ref.d.ts +2 -0
  109. package/dist/types/core/src/atoms/palette/poc-color-ref.d.ts +6 -0
  110. package/dist/types/core/src/atoms/rig/bone-matrices.d.ts +8 -0
  111. package/dist/types/core/src/atoms/rig/bone-region.d.ts +8 -0
  112. package/dist/types/core/src/atoms/rig/bone-role.d.ts +11 -0
  113. package/dist/types/core/src/atoms/rig/bone-size.d.ts +7 -0
  114. package/dist/types/core/src/atoms/rig/compose-local.d.ts +6 -0
  115. package/dist/types/core/src/atoms/rig/find-rig.d.ts +11 -0
  116. package/dist/types/core/src/atoms/rig/mirror-partner.d.ts +3 -0
  117. package/dist/types/core/src/atoms/rig/mirror-sculpt.d.ts +9 -0
  118. package/dist/types/core/src/atoms/rig/mirror-transform.d.ts +9 -0
  119. package/dist/types/core/src/atoms/rig/partner-target.d.ts +3 -0
  120. package/dist/types/core/src/atoms/rig/pose-presets.d.ts +11 -0
  121. package/dist/types/core/src/atoms/rig/pose-rule.d.ts +48 -0
  122. package/dist/types/core/src/atoms/rig/pose-template-rules.d.ts +8 -0
  123. package/dist/types/core/src/atoms/rig/rebase-pose.d.ts +6 -0
  124. package/dist/types/core/src/atoms/rig/resize-bones.d.ts +12 -0
  125. package/dist/types/core/src/atoms/rig/rig-extent.d.ts +3 -0
  126. package/dist/types/core/src/atoms/rig/side-from-name.d.ts +7 -0
  127. package/dist/types/core/src/atoms/rig/size-frame.d.ts +18 -0
  128. package/dist/types/core/src/atoms/rig/with-slot-parts.d.ts +9 -0
  129. package/dist/types/core/src/atoms/scene/copy-with-new-ids.d.ts +7 -0
  130. package/dist/types/core/src/atoms/scene/object-tree.d.ts +8 -0
  131. package/dist/types/core/src/atoms/scene/place-in-order.d.ts +7 -0
  132. package/dist/types/core/src/atoms/scene/unique-name.d.ts +4 -0
  133. package/dist/types/core/src/atoms/scene/world-matrix.d.ts +4 -0
  134. package/dist/types/core/src/atoms/sculpt/all-sculpts.d.ts +3 -0
  135. package/dist/types/core/src/atoms/sculpt/is-wing-target.d.ts +3 -0
  136. package/dist/types/core/src/atoms/sculpt/target-sculpt.d.ts +10 -0
  137. package/dist/types/core/src/atoms/sculpt/update-target.d.ts +8 -0
  138. package/dist/types/core/src/atoms/stamp/apply-stamp-props.d.ts +11 -0
  139. package/dist/types/core/src/atoms/stamp/clamp-symmetry.d.ts +11 -0
  140. package/dist/types/core/src/atoms/stamp/clean-props.d.ts +3 -0
  141. package/dist/types/core/src/atoms/stamp/emptied-groups.d.ts +3 -0
  142. package/dist/types/core/src/atoms/stamp/move-locked-groups.d.ts +12 -0
  143. package/dist/types/core/src/atoms/stamp/normalize-base.d.ts +6 -0
  144. package/dist/types/core/src/atoms/stamp/resolve-stamp-props.d.ts +14 -0
  145. package/dist/types/core/src/atoms/stamp/smear.d.ts +15 -0
  146. package/dist/types/core/src/atoms/stamp/stamp-problem.d.ts +7 -0
  147. package/dist/types/core/src/atoms/wing/wing-problem.d.ts +6 -0
  148. package/dist/types/core/src/create-creation-api.d.ts +12 -0
  149. package/dist/types/core/src/decide.d.ts +4 -0
  150. package/dist/types/core/src/empty-creation.d.ts +2 -0
  151. package/dist/types/core/src/fold.d.ts +6 -0
  152. package/dist/types/core/src/index.d.ts +9 -0
  153. package/dist/types/core/src/molecules/add-body-part.d.ts +8 -0
  154. package/dist/types/core/src/molecules/add-bone.d.ts +8 -0
  155. package/dist/types/core/src/molecules/add-decals.d.ts +4 -0
  156. package/dist/types/core/src/molecules/add-stamps.d.ts +8 -0
  157. package/dist/types/core/src/molecules/apply-pose-preset.d.ts +4 -0
  158. package/dist/types/core/src/molecules/apply-premade.d.ts +9 -0
  159. package/dist/types/core/src/molecules/auto-tag-sides.d.ts +4 -0
  160. package/dist/types/core/src/molecules/create-rig.d.ts +4 -0
  161. package/dist/types/core/src/molecules/create-sculpt.d.ts +4 -0
  162. package/dist/types/core/src/molecules/delete-design.d.ts +4 -0
  163. package/dist/types/core/src/molecules/delete-objects.d.ts +4 -0
  164. package/dist/types/core/src/molecules/duplicate-objects.d.ts +6 -0
  165. package/dist/types/core/src/molecules/generate-creature.d.ts +7 -0
  166. package/dist/types/core/src/molecules/graft-part.d.ts +4 -0
  167. package/dist/types/core/src/molecules/mirror-objects.d.ts +7 -0
  168. package/dist/types/core/src/molecules/molecule.d.ts +17 -0
  169. package/dist/types/core/src/molecules/remove-body-part.d.ts +3 -0
  170. package/dist/types/core/src/molecules/remove-bone.d.ts +4 -0
  171. package/dist/types/core/src/molecules/remove-decal.d.ts +3 -0
  172. package/dist/types/core/src/molecules/remove-smear-group.d.ts +4 -0
  173. package/dist/types/core/src/molecules/remove-stamps.d.ts +4 -0
  174. package/dist/types/core/src/molecules/rename-bone.d.ts +3 -0
  175. package/dist/types/core/src/molecules/rename-object.d.ts +3 -0
  176. package/dist/types/core/src/molecules/reparent-bone.d.ts +4 -0
  177. package/dist/types/core/src/molecules/reparent-object.d.ts +4 -0
  178. package/dist/types/core/src/molecules/reset-palette.d.ts +3 -0
  179. package/dist/types/core/src/molecules/reset-pose.d.ts +3 -0
  180. package/dist/types/core/src/molecules/save-design.d.ts +4 -0
  181. package/dist/types/core/src/molecules/set-bone-sizes.d.ts +8 -0
  182. package/dist/types/core/src/molecules/set-bone-tags.d.ts +4 -0
  183. package/dist/types/core/src/molecules/set-bone-transforms.d.ts +7 -0
  184. package/dist/types/core/src/molecules/set-flat-wings.d.ts +4 -0
  185. package/dist/types/core/src/molecules/set-object-transforms.d.ts +3 -0
  186. package/dist/types/core/src/molecules/set-palette-color.d.ts +3 -0
  187. package/dist/types/core/src/molecules/set-pivot.d.ts +3 -0
  188. package/dist/types/core/src/molecules/set-region-blend.d.ts +4 -0
  189. package/dist/types/core/src/molecules/set-rig-mirror.d.ts +3 -0
  190. package/dist/types/core/src/molecules/set-rig-mode.d.ts +3 -0
  191. package/dist/types/core/src/molecules/set-sculpt-look.d.ts +7 -0
  192. package/dist/types/core/src/molecules/set-smear-group.d.ts +4 -0
  193. package/dist/types/core/src/molecules/set-stamp-placements.d.ts +4 -0
  194. package/dist/types/core/src/molecules/set-stamp-props.d.ts +3 -0
  195. package/dist/types/core/src/molecules/set-symmetry-for-all.d.ts +4 -0
  196. package/dist/types/core/src/molecules/swap-part-slot.d.ts +7 -0
  197. package/dist/types/core/src/premades/ant-bake.d.ts +2 -0
  198. package/dist/types/core/src/premades/bake-authoring.d.ts +35 -0
  199. package/dist/types/core/src/premades/bake-types.d.ts +65 -0
  200. package/dist/types/core/src/premades/baked-part-for.d.ts +11 -0
  201. package/dist/types/core/src/premades/bee-bake.d.ts +2 -0
  202. package/dist/types/core/src/premades/bird-bake.d.ts +2 -0
  203. package/dist/types/core/src/premades/body-stamps-for-bone.d.ts +14 -0
  204. package/dist/types/core/src/premades/bone-tree.d.ts +15 -0
  205. package/dist/types/core/src/premades/build-premade-rig.d.ts +23 -0
  206. package/dist/types/core/src/premades/build-template.d.ts +6 -0
  207. package/dist/types/core/src/premades/centipede-bake.d.ts +2 -0
  208. package/dist/types/core/src/premades/coat-stamps.d.ts +3 -0
  209. package/dist/types/core/src/premades/crab-bake.d.ts +2 -0
  210. package/dist/types/core/src/premades/dragon-bake.d.ts +2 -0
  211. package/dist/types/core/src/premades/face-decals.d.ts +17 -0
  212. package/dist/types/core/src/premades/fish-bake.d.ts +2 -0
  213. package/dist/types/core/src/premades/fit-part-slot.d.ts +21 -0
  214. package/dist/types/core/src/premades/generate-creature.d.ts +21 -0
  215. package/dist/types/core/src/premades/gorilla-bake.d.ts +2 -0
  216. package/dist/types/core/src/premades/graft-slot.d.ts +34 -0
  217. package/dist/types/core/src/premades/humanoid-bake.d.ts +2 -0
  218. package/dist/types/core/src/premades/insect6-bake.d.ts +2 -0
  219. package/dist/types/core/src/premades/jellyfish-bake.d.ts +2 -0
  220. package/dist/types/core/src/premades/lizard-bake.d.ts +2 -0
  221. package/dist/types/core/src/premades/make-baked-part.d.ts +9 -0
  222. package/dist/types/core/src/premades/make-body-part.d.ts +9 -0
  223. package/dist/types/core/src/premades/make-flat-part.d.ts +13 -0
  224. package/dist/types/core/src/premades/part-context.d.ts +20 -0
  225. package/dist/types/core/src/premades/part-kits.d.ts +36 -0
  226. package/dist/types/core/src/premades/part-slots.d.ts +17 -0
  227. package/dist/types/core/src/premades/part-stamp.d.ts +13 -0
  228. package/dist/types/core/src/premades/part-styles.d.ts +44 -0
  229. package/dist/types/core/src/premades/premade-fit.d.ts +18 -0
  230. package/dist/types/core/src/premades/premade-infos.d.ts +3 -0
  231. package/dist/types/core/src/premades/reseat-attachments.d.ts +31 -0
  232. package/dist/types/core/src/premades/rig-builder.d.ts +51 -0
  233. package/dist/types/core/src/premades/rodent-bake.d.ts +2 -0
  234. package/dist/types/core/src/premades/scorpion-bake.d.ts +2 -0
  235. package/dist/types/core/src/premades/shark-bake.d.ts +2 -0
  236. package/dist/types/core/src/premades/sitter-bake.d.ts +3 -0
  237. package/dist/types/core/src/premades/skeleton-bakes.d.ts +4 -0
  238. package/dist/types/core/src/premades/snake-bake.d.ts +2 -0
  239. package/dist/types/core/src/premades/spider-bake.d.ts +2 -0
  240. package/dist/types/core/src/premades/stamps-box.d.ts +9 -0
  241. package/dist/types/core/src/premades/style-for-bone.d.ts +7 -0
  242. package/dist/types/core/src/premades/swap-slot.d.ts +13 -0
  243. package/dist/types/core/src/premades/template-catalog.d.ts +20 -0
  244. package/dist/types/core/src/premades/template-color.d.ts +9 -0
  245. package/dist/types/core/src/premades/turtle-bake.d.ts +2 -0
  246. package/dist/types/core/src/premades/variants/aquatic-variants.d.ts +16 -0
  247. package/dist/types/core/src/premades/variants/coat-variants.d.ts +7 -0
  248. package/dist/types/core/src/premades/variants/ear-variants.d.ts +8 -0
  249. package/dist/types/core/src/premades/variants/fantasy-more-variants.d.ts +3 -0
  250. package/dist/types/core/src/premades/variants/fantasy-variants.d.ts +17 -0
  251. package/dist/types/core/src/premades/variants/head-variants.d.ts +9 -0
  252. package/dist/types/core/src/premades/variants/horn-variants.d.ts +7 -0
  253. package/dist/types/core/src/premades/variants/index.d.ts +10 -0
  254. package/dist/types/core/src/premades/variants/land-variants.d.ts +3 -0
  255. package/dist/types/core/src/premades/variants/leg-variants.d.ts +7 -0
  256. package/dist/types/core/src/premades/variants/part-variant.d.ts +14 -0
  257. package/dist/types/core/src/premades/variants/tail-variants.d.ts +6 -0
  258. package/dist/types/core/src/premades/variants/variant-authoring.d.ts +29 -0
  259. package/dist/types/core/src/premades/whale-bake.d.ts +2 -0
  260. package/dist/types/core/src/premades/wing-defaults.d.ts +4 -0
  261. package/dist/types/core/src/premades/wing-frame.d.ts +10 -0
  262. package/dist/types/core/src/premades/wolf-bake.d.ts +2 -0
  263. package/dist/types/core/src/premades/worm-bake.d.ts +2 -0
  264. package/dist/types/evaluator/src/abi.d.ts +64 -0
  265. package/dist/types/evaluator/src/chunks.d.ts +53 -0
  266. package/dist/types/evaluator/src/index.d.ts +11 -0
  267. package/dist/types/evaluator/src/prep/colors.d.ts +11 -0
  268. package/dist/types/evaluator/src/prep/mat3.d.ts +13 -0
  269. package/dist/types/evaluator/src/prep/pack.d.ts +23 -0
  270. package/dist/types/evaluator/src/prep/props.d.ts +16 -0
  271. package/dist/types/evaluator/src/prep/symmetry.d.ts +23 -0
  272. package/dist/types/evaluator/src/reference/core.d.ts +3 -0
  273. package/dist/types/evaluator/src/reference/mesher.d.ts +22 -0
  274. package/dist/types/evaluator/src/reference/skin.d.ts +8 -0
  275. package/dist/types/evaluator/src/session.d.ts +21 -0
  276. package/dist/types/evaluator/src/wasm/core.d.ts +9 -0
  277. package/dist/types/evaluator/src/worker/client.d.ts +28 -0
  278. package/dist/types/evaluator/src/worker/host.d.ts +8 -0
  279. package/dist/types/evaluator/src/worker/protocol.d.ts +39 -0
  280. package/dist/types/evaluator/src/worker/spawn.d.ts +6 -0
  281. package/dist/types/evaluator/src/worker/worker-inline.d.ts +1 -0
  282. package/dist/types/evaluator/src/worker/worker.d.ts +1 -0
  283. package/dist/types/module/src/index.d.ts +2 -0
  284. package/dist/types/module/src/ui/atoms/action-button.d.ts +10 -0
  285. package/dist/types/module/src/ui/atoms/badge.d.ts +9 -0
  286. package/dist/types/module/src/ui/atoms/checkbox.d.ts +6 -0
  287. package/dist/types/module/src/ui/atoms/color-input.d.ts +10 -0
  288. package/dist/types/module/src/ui/atoms/hex-chip.d.ts +5 -0
  289. package/dist/types/module/src/ui/atoms/icon-button.d.ts +14 -0
  290. package/dist/types/module/src/ui/atoms/icon.d.ts +8 -0
  291. package/dist/types/module/src/ui/atoms/kbd.d.ts +4 -0
  292. package/dist/types/module/src/ui/atoms/match-button.d.ts +10 -0
  293. package/dist/types/module/src/ui/atoms/number-input.d.ts +11 -0
  294. package/dist/types/module/src/ui/atoms/pill-button.d.ts +11 -0
  295. package/dist/types/module/src/ui/atoms/range-input.d.ts +17 -0
  296. package/dist/types/module/src/ui/atoms/select-input.d.ts +12 -0
  297. package/dist/types/module/src/ui/atoms/separator.d.ts +2 -0
  298. package/dist/types/module/src/ui/atoms/side-button.d.ts +13 -0
  299. package/dist/types/module/src/ui/atoms/swatch.d.ts +13 -0
  300. package/dist/types/module/src/ui/atoms/tool-button.d.ts +22 -0
  301. package/dist/types/module/src/ui/hooks/editor-actions.d.ts +50 -0
  302. package/dist/types/module/src/ui/hooks/editor-context.d.ts +37 -0
  303. package/dist/types/module/src/ui/hooks/use-compact.d.ts +2 -0
  304. package/dist/types/module/src/ui/hooks/use-editor-controller.d.ts +17 -0
  305. package/dist/types/module/src/ui/hooks/use-keyboard.d.ts +11 -0
  306. package/dist/types/module/src/ui/lib/catalog.d.ts +76 -0
  307. package/dist/types/module/src/ui/lib/colors.d.ts +15 -0
  308. package/dist/types/module/src/ui/lib/decals.d.ts +6 -0
  309. package/dist/types/module/src/ui/lib/design-geometry.d.ts +60 -0
  310. package/dist/types/module/src/ui/lib/math.d.ts +18 -0
  311. package/dist/types/module/src/ui/lib/placement.d.ts +8 -0
  312. package/dist/types/module/src/ui/lib/scene.d.ts +51 -0
  313. package/dist/types/module/src/ui/lib/symmetry.d.ts +5 -0
  314. package/dist/types/module/src/ui/lib/targets.d.ts +28 -0
  315. package/dist/types/module/src/ui/lib/view-state.d.ts +74 -0
  316. package/dist/types/module/src/ui/molecules/axis-pill.d.ts +7 -0
  317. package/dist/types/module/src/ui/molecules/color-field.d.ts +14 -0
  318. package/dist/types/module/src/ui/molecules/count-stepper.d.ts +9 -0
  319. package/dist/types/module/src/ui/molecules/floating-panel.d.ts +26 -0
  320. package/dist/types/module/src/ui/molecules/help-row.d.ts +8 -0
  321. package/dist/types/module/src/ui/molecules/inline-edit.d.ts +9 -0
  322. package/dist/types/module/src/ui/molecules/list-row.d.ts +25 -0
  323. package/dist/types/module/src/ui/molecules/modal.d.ts +11 -0
  324. package/dist/types/module/src/ui/molecules/mode-pill.d.ts +7 -0
  325. package/dist/types/module/src/ui/molecules/scroll-row.d.ts +10 -0
  326. package/dist/types/module/src/ui/molecules/slider-row.d.ts +16 -0
  327. package/dist/types/module/src/ui/molecules/swatch-row.d.ts +11 -0
  328. package/dist/types/module/src/ui/molecules/tab-bar.d.ts +9 -0
  329. package/dist/types/module/src/ui/molecules/toolbar-pill.d.ts +7 -0
  330. package/dist/types/module/src/ui/molecules/toolbar.d.ts +10 -0
  331. package/dist/types/module/src/ui/molecules/vec3-field.d.ts +10 -0
  332. package/dist/types/module/src/ui/organisms/bone-panel.d.ts +2 -0
  333. package/dist/types/module/src/ui/organisms/bone-size-sliders.d.ts +9 -0
  334. package/dist/types/module/src/ui/organisms/category-bar.d.ts +2 -0
  335. package/dist/types/module/src/ui/organisms/decal-bar.d.ts +2 -0
  336. package/dist/types/module/src/ui/organisms/decal-editor.d.ts +2 -0
  337. package/dist/types/module/src/ui/organisms/fleck-style-tab.d.ts +7 -0
  338. package/dist/types/module/src/ui/organisms/git-sync-panel.d.ts +10 -0
  339. package/dist/types/module/src/ui/organisms/help-panel.d.ts +2 -0
  340. package/dist/types/module/src/ui/organisms/material-tab.d.ts +3 -0
  341. package/dist/types/module/src/ui/organisms/object-list-panel.d.ts +2 -0
  342. package/dist/types/module/src/ui/organisms/palette-panel.d.ts +2 -0
  343. package/dist/types/module/src/ui/organisms/parts-tab.d.ts +26 -0
  344. package/dist/types/module/src/ui/organisms/pattern-tab.d.ts +3 -0
  345. package/dist/types/module/src/ui/organisms/pose-tab.d.ts +8 -0
  346. package/dist/types/module/src/ui/organisms/premade-picker.d.ts +2 -0
  347. package/dist/types/module/src/ui/organisms/properties-panel.d.ts +2 -0
  348. package/dist/types/module/src/ui/organisms/region-blends.d.ts +5 -0
  349. package/dist/types/module/src/ui/organisms/rendering-bar.d.ts +5 -0
  350. package/dist/types/module/src/ui/organisms/rig-bar.d.ts +2 -0
  351. package/dist/types/module/src/ui/organisms/scenes-modal.d.ts +2 -0
  352. package/dist/types/module/src/ui/organisms/select-hint.d.ts +2 -0
  353. package/dist/types/module/src/ui/organisms/shape-list-panel.d.ts +2 -0
  354. package/dist/types/module/src/ui/organisms/side-dock.d.ts +4 -0
  355. package/dist/types/module/src/ui/organisms/stamp-bar.d.ts +2 -0
  356. package/dist/types/module/src/ui/organisms/stamp-props-panel.d.ts +2 -0
  357. package/dist/types/module/src/ui/organisms/stamp-size-panel.d.ts +4 -0
  358. package/dist/types/module/src/ui/organisms/stats-badge.d.ts +2 -0
  359. package/dist/types/module/src/ui/organisms/style-bar.d.ts +2 -0
  360. package/dist/types/module/src/ui/organisms/symmetry-bar.d.ts +2 -0
  361. package/dist/types/module/src/ui/organisms/toast.d.ts +2 -0
  362. package/dist/types/module/src/ui/organisms/token-guide.d.ts +5 -0
  363. package/dist/types/module/src/ui/organisms/touch-mods.d.ts +2 -0
  364. package/dist/types/module/src/ui/organisms/transform-bar.d.ts +2 -0
  365. package/dist/types/module/src/ui/organisms/transform-tab.d.ts +2 -0
  366. package/dist/types/module/src/ui/organisms/utilities-bar.d.ts +2 -0
  367. package/dist/types/module/src/ui/organisms/viewport-host.d.ts +2 -0
  368. package/dist/types/module/src/ui/organisms/voxel-panel.d.ts +2 -0
  369. package/dist/types/module/src/ui/organisms/wing-tab.d.ts +10 -0
  370. package/dist/types/module/src/ui/pages/editor-page.d.ts +9 -0
  371. package/dist/types/module/src/ui/templates/editor-shell.d.ts +2 -0
  372. package/dist/types/studio/src/browser-files.d.ts +3 -0
  373. package/dist/types/studio/src/clock.d.ts +2 -0
  374. package/dist/types/studio/src/creation-file.d.ts +21 -0
  375. package/dist/types/studio/src/git-remote.d.ts +36 -0
  376. package/dist/types/studio/src/git-sync.d.ts +33 -0
  377. package/dist/types/studio/src/ids.d.ts +3 -0
  378. package/dist/types/studio/src/index.d.ts +15 -0
  379. package/dist/types/studio/src/indexed-db-library.d.ts +2 -0
  380. package/dist/types/studio/src/library-persistence.d.ts +29 -0
  381. package/dist/types/studio/src/library-sync.d.ts +29 -0
  382. package/dist/types/studio/src/preferences.d.ts +9 -0
  383. package/dist/types/studio/src/seed.d.ts +3 -0
  384. package/dist/types/studio/src/studio.d.ts +17 -0
  385. package/dist/types/viewport/src/create-viewport.d.ts +10 -0
  386. package/dist/types/viewport/src/decals/builtin-art.d.ts +19 -0
  387. package/dist/types/viewport/src/decals/builtin-docs.d.ts +7 -0
  388. package/dist/types/viewport/src/decals/decal-atlas.d.ts +37 -0
  389. package/dist/types/viewport/src/decals/decal-catalog.d.ts +17 -0
  390. package/dist/types/viewport/src/decals/decal-glsl.d.ts +2 -0
  391. package/dist/types/viewport/src/decals/decal-limits.d.ts +11 -0
  392. package/dist/types/viewport/src/decals/decal-uniforms.d.ts +40 -0
  393. package/dist/types/viewport/src/decals/design-raster.d.ts +8 -0
  394. package/dist/types/viewport/src/decals/interior-thumbs.d.ts +6 -0
  395. package/dist/types/viewport/src/index.d.ts +1 -0
  396. package/dist/types/viewport/src/interaction/bone-tool.d.ts +13 -0
  397. package/dist/types/viewport/src/interaction/bones-visible.d.ts +7 -0
  398. package/dist/types/viewport/src/interaction/cursor.d.ts +3 -0
  399. package/dist/types/viewport/src/interaction/decal-tool.d.ts +18 -0
  400. package/dist/types/viewport/src/interaction/esc-hold.d.ts +13 -0
  401. package/dist/types/viewport/src/interaction/ghost-geometry.d.ts +6 -0
  402. package/dist/types/viewport/src/interaction/gizmo.d.ts +34 -0
  403. package/dist/types/viewport/src/interaction/interaction-context.d.ts +41 -0
  404. package/dist/types/viewport/src/interaction/marquee.d.ts +8 -0
  405. package/dist/types/viewport/src/interaction/pivot-helper.d.ts +13 -0
  406. package/dist/types/viewport/src/interaction/select-tool.d.ts +30 -0
  407. package/dist/types/viewport/src/interaction/selection-boxes.d.ts +11 -0
  408. package/dist/types/viewport/src/interaction/stamp-tool.d.ts +41 -0
  409. package/dist/types/viewport/src/interaction/stamp-wires.d.ts +18 -0
  410. package/dist/types/viewport/src/interaction/surface-hit.d.ts +14 -0
  411. package/dist/types/viewport/src/materials/fleck-material.d.ts +69 -0
  412. package/dist/types/viewport/src/materials/global-uniforms.d.ts +15 -0
  413. package/dist/types/viewport/src/materials/skin.d.ts +18 -0
  414. package/dist/types/viewport/src/materials/wing-material.d.ts +21 -0
  415. package/dist/types/viewport/src/math/colors.d.ts +29 -0
  416. package/dist/types/viewport/src/math/convert.d.ts +15 -0
  417. package/dist/types/viewport/src/math/decal-pose.d.ts +7 -0
  418. package/dist/types/viewport/src/math/lod.d.ts +16 -0
  419. package/dist/types/viewport/src/math/picking.d.ts +32 -0
  420. package/dist/types/viewport/src/math/pixel-palette.d.ts +15 -0
  421. package/dist/types/viewport/src/math/screen.d.ts +26 -0
  422. package/dist/types/viewport/src/math/skeleton-math.d.ts +32 -0
  423. package/dist/types/viewport/src/math/smear.d.ts +20 -0
  424. package/dist/types/viewport/src/math/symmetry.d.ts +21 -0
  425. package/dist/types/viewport/src/objects/default-look.d.ts +3 -0
  426. package/dist/types/viewport/src/objects/mesh-driver.d.ts +26 -0
  427. package/dist/types/viewport/src/objects/mesh-key.d.ts +8 -0
  428. package/dist/types/viewport/src/objects/rig-view.d.ts +31 -0
  429. package/dist/types/viewport/src/objects/scene-views.d.ts +53 -0
  430. package/dist/types/viewport/src/objects/sculpt-view.d.ts +66 -0
  431. package/dist/types/viewport/src/objects/view-context.d.ts +19 -0
  432. package/dist/types/viewport/src/objects/wing-view.d.ts +27 -0
  433. package/dist/types/viewport/src/rig/bone-viz.d.ts +13 -0
  434. package/dist/types/viewport/src/scene/camera-motion.d.ts +10 -0
  435. package/dist/types/viewport/src/scene/camera-sun.d.ts +3 -0
  436. package/dist/types/viewport/src/scene/environment.d.ts +3 -0
  437. package/dist/types/viewport/src/scene/frame-camera.d.ts +10 -0
  438. package/dist/types/viewport/src/scene/play-mode.d.ts +9 -0
  439. package/dist/types/viewport/src/scene/render-pipeline.d.ts +26 -0
  440. package/dist/types/viewport/src/scene/render-settings.d.ts +18 -0
  441. package/dist/types/viewport/src/scene/resolve-frag.d.ts +3 -0
  442. package/dist/types/viewport/src/scene/stage.d.ts +38 -0
  443. package/dist/types/viewport/src/scene/stress-test.d.ts +6 -0
  444. package/dist/types/viewport/src/wings/wing-mesh.d.ts +19 -0
  445. package/dist/types/viewport/src/wings/wing-outlines.d.ts +32 -0
  446. package/dist/types/viewport/src/wings/wing-pattern.d.ts +7 -0
  447. package/dist/viewport.d.ts +1 -0
  448. package/dist/viewport.js +8 -0
  449. package/dist/viewport.js.map +7 -0
  450. package/package.json +74 -4
@@ -0,0 +1,1470 @@
1
+ "use client";
2
+
3
+ // ../evaluator/src/abi.ts
4
+ var STAMP_STRIDE = 32;
5
+ var PARAMS_LEN = 17;
6
+ var SHAPE_CODE = {
7
+ cube: 0,
8
+ sphere: 1,
9
+ cylinder: 2,
10
+ torus: 3,
11
+ cone: 4,
12
+ pyramid: 5,
13
+ prism: 6,
14
+ octahedron: 7,
15
+ capsule: 8,
16
+ dome: 9
17
+ };
18
+ var MODE_CODE = { add: 0, subtract: 1, intersect: 2, paint: 3 };
19
+ var SEGMENT_STRIDE = 7;
20
+
21
+ // ../evaluator/src/reference/mesher.ts
22
+ function newVoxArrays(total) {
23
+ const f = () => new Float32Array(total);
24
+ return { field: f(), cR: f(), cG: f(), cB: f(), fR: f(), fG: f(), fB: f(), mat: new Float32Array(total * 4) };
25
+ }
26
+ var mn = (a, b) => a < b ? a : b;
27
+ var mx = (a, b) => a > b ? a : b;
28
+ var clamp01 = (v) => mx(0, mn(1, v));
29
+ var fround = Math.fround;
30
+ function sdShape(code2, x, y, z, hx, hy, hz) {
31
+ if (code2 === 0) {
32
+ const dx = Math.abs(x) - hx;
33
+ const dy = Math.abs(y) - hy;
34
+ const dz = Math.abs(z) - hz;
35
+ const ox = mx(dx, 0);
36
+ const oy = mx(dy, 0);
37
+ const oz = mx(dz, 0);
38
+ const outLen = Math.sqrt(ox * ox + oy * oy + oz * oz);
39
+ const inDist = mn(mx(dx, mx(dy, dz)), 0);
40
+ return outLen + inDist;
41
+ }
42
+ const qx = x / hx;
43
+ const qy = y / hy;
44
+ const qz = z / hz;
45
+ const minH = mn(mn(hx, hy), hz);
46
+ switch (code2) {
47
+ case 1:
48
+ return (Math.sqrt(qx * qx + qy * qy + qz * qz) - 1) * minH;
49
+ case 2: {
50
+ const dXZ = (Math.sqrt(qx * qx + qz * qz) - 1) * mn(hx, hz);
51
+ const dY = Math.abs(y) - hy;
52
+ const ox = mx(dXZ, 0);
53
+ const oy = mx(dY, 0);
54
+ return mn(mx(dXZ, dY), 0) + Math.sqrt(ox * ox + oy * oy);
55
+ }
56
+ case 3: {
57
+ const a = Math.sqrt(qx * qx + qz * qz) - 0.8;
58
+ return (Math.sqrt(a * a + qy * qy) - 0.3) * minH;
59
+ }
60
+ case 4: {
61
+ const rx = Math.sqrt(qx * qx + qz * qz);
62
+ const ry = qy;
63
+ const cax = rx - mn(rx, ry < 0 ? 1 : 0);
64
+ const cay = Math.abs(ry) - 1;
65
+ const t = mx(0, mn(1, (rx + 2 - 2 * ry) / 5));
66
+ const cbx = rx - t;
67
+ const cby = ry - 1 + 2 * t;
68
+ const s = cbx < 0 && cay < 0 ? -1 : 1;
69
+ return s * Math.sqrt(mn(cax * cax + cay * cay, cbx * cbx + cby * cby)) * minH;
70
+ }
71
+ case 5: {
72
+ const S5 = 2.236068;
73
+ return mx(mx((2 * Math.abs(qx) + qy - 1) / S5, (2 * Math.abs(qz) + qy - 1) / S5), -qy - 1) * minH;
74
+ }
75
+ case 6:
76
+ return mx(mx((2 * Math.abs(qx) + qy - 1) / 2.236068, -qy - 1), Math.abs(qz) - 1) * minH;
77
+ case 7:
78
+ return (Math.abs(qx) + Math.abs(qy) + Math.abs(qz) - 1) / 1.7320508 * minH;
79
+ case 8: {
80
+ const dq = Math.sqrt(qx * qx + qz * qz);
81
+ const dyc = mx(Math.abs(qy) - 0.5, 0) / 0.5;
82
+ return (Math.sqrt(dq * dq + dyc * dyc) - 1) * minH * 0.5;
83
+ }
84
+ case 9: {
85
+ const a = Math.sqrt(qx * qx + (qy + 1) * (qy + 1) + qz * qz) - 1;
86
+ return mx(a, -(qy + 1)) * minH;
87
+ }
88
+ default:
89
+ return 1e5;
90
+ }
91
+ }
92
+ function evalRange(T, list, A, RX, RY, ox, oy, oz, sx, sy, sz, x0, x1, y0, y1, z0, z1) {
93
+ const { field, cR, cG, cB, fR, fG, fB, mat } = A;
94
+ const nL = list.length;
95
+ const S = STAMP_STRIDE;
96
+ for (let z = z0; z <= z1; z++) {
97
+ const pz = oz + z * sz;
98
+ for (let y = y0; y <= y1; y++) {
99
+ const py = oy + y * sy;
100
+ for (let x = x0; x <= x1; x++) {
101
+ const px = ox + x * sx;
102
+ const idx = x + y * RX + z * RX * RY;
103
+ let d = 1e5;
104
+ let r = T[20], g = T[21], b = T[22];
105
+ let fr = T[23], fg = T[24], fb = T[25];
106
+ let m0 = T[26], m1 = T[27], m2 = T[28], m3 = T[29];
107
+ for (let li = 0; li < nL; li++) {
108
+ const s = list[li];
109
+ const o = s * S;
110
+ const mode = T[o + 1];
111
+ const k = T[o + 17];
112
+ const dx = px - T[o + 2], dy = py - T[o + 3], dz = pz - T[o + 4];
113
+ if (s > 0) {
114
+ let lb = Math.sqrt(dx * dx + dy * dy + dz * dz) - T[o + 18];
115
+ if (lb > 0) lb *= T[o + 19];
116
+ if (mode === 0 && lb - d >= k) continue;
117
+ if (mode === 1 && lb + d >= k) continue;
118
+ if (mode === 3 && lb >= k * 0.5) continue;
119
+ }
120
+ const lx = T[o + 5] * dx + T[o + 6] * dy + T[o + 7] * dz;
121
+ const ly = T[o + 8] * dx + T[o + 9] * dy + T[o + 10] * dz;
122
+ const lz = T[o + 11] * dx + T[o + 12] * dy + T[o + 13] * dz;
123
+ const sd = sdShape(T[o], lx, ly, lz, T[o + 14], T[o + 15], T[o + 16]);
124
+ if (s > 0) {
125
+ const kk = mx(k, 1e-4);
126
+ if (mode === 0 ? sd - d >= kk : mode === 1 && sd + d >= kk) continue;
127
+ }
128
+ const sr = T[o + 20], sg = T[o + 21], sb = T[o + 22];
129
+ const sfr = T[o + 23], sfg = T[o + 24], sfb = T[o + 25];
130
+ const s0 = T[o + 26], s1 = T[o + 27], s2 = T[o + 28], s3 = T[o + 29];
131
+ const ov = T[o + 30];
132
+ if (mode === 0) {
133
+ if (s === 0) {
134
+ d = sd;
135
+ r = sr;
136
+ g = sg;
137
+ b = sb;
138
+ fr = sfr;
139
+ fg = sfg;
140
+ fb = sfb;
141
+ } else {
142
+ const h = clamp01(0.5 + 0.5 * (sd - d) / mx(k, 1e-4));
143
+ r = sr + (r - sr) * h;
144
+ g = sg + (g - sg) * h;
145
+ b = sb + (b - sb) * h;
146
+ fr = sfr + (fr - sfr) * h;
147
+ fg = sfg + (fg - sfg) * h;
148
+ fb = sfb + (fb - sfb) * h;
149
+ d = sd * (1 - h) + d * h - k * h * (1 - h);
150
+ m0 = fround(s0 + (m0 - s0) * h);
151
+ m1 = fround(s1 + (m1 - s1) * h);
152
+ m2 = fround(s2 + (m2 - s2) * h);
153
+ m3 = fround(s3 + (m3 - s3) * h);
154
+ }
155
+ } else if (mode === 1) {
156
+ const h = clamp01(0.5 - 0.5 * (sd + d) / mx(k, 1e-4));
157
+ r = r + (sr - r) * h;
158
+ g = g + (sg - g) * h;
159
+ b = b + (sb - b) * h;
160
+ fr = fr + (sfr - fr) * h;
161
+ fg = fg + (sfg - fg) * h;
162
+ fb = fb + (sfb - fb) * h;
163
+ d = d * (1 - h) - sd * h + k * h * (1 - h);
164
+ if (ov !== 0) {
165
+ if (ov & 1) m0 = fround(m0 + (s0 - m0) * h);
166
+ if (ov & 2) m1 = fround(m1 + (s1 - m1) * h);
167
+ if (ov & 4) m2 = fround(m2 + (s2 - m2) * h);
168
+ if (ov & 8) m3 = fround(m3 + (s3 - m3) * h);
169
+ }
170
+ } else if (mode === 2) {
171
+ const h = clamp01(0.5 - 0.5 * (sd - d) / mx(k, 1e-4));
172
+ r = sr + (r - sr) * h;
173
+ g = sg + (g - sg) * h;
174
+ b = sb + (b - sb) * h;
175
+ fr = sfr + (fr - sfr) * h;
176
+ fg = sfg + (fg - sfg) * h;
177
+ fb = sfb + (fb - sfb) * h;
178
+ d = sd * (1 - h) + d * h + k * h * (1 - h);
179
+ if (ov !== 0) {
180
+ if (ov & 1) m0 = fround(s0 + (m0 - s0) * h);
181
+ if (ov & 2) m1 = fround(s1 + (m1 - s1) * h);
182
+ if (ov & 4) m2 = fround(s2 + (m2 - s2) * h);
183
+ if (ov & 8) m3 = fround(s3 + (m3 - s3) * h);
184
+ }
185
+ } else if (mode === 3) {
186
+ if (sd < k * 0.5) {
187
+ const f = clamp01(1 - sd / mx(k * 0.5, 0.05));
188
+ r = r + (sr - r) * f;
189
+ g = g + (sg - g) * f;
190
+ b = b + (sb - b) * f;
191
+ fr = fr + (sfr - fr) * f;
192
+ fg = fg + (sfg - fg) * f;
193
+ fb = fb + (sfb - fb) * f;
194
+ if (ov !== 0) {
195
+ if (ov & 1) m0 = fround(m0 + (s0 - m0) * f);
196
+ if (ov & 2) m1 = fround(m1 + (s1 - m1) * f);
197
+ if (ov & 4) m2 = fround(m2 + (s2 - m2) * f);
198
+ if (ov & 8) m3 = fround(m3 + (s3 - m3) * f);
199
+ }
200
+ }
201
+ }
202
+ }
203
+ field[idx] = d;
204
+ cR[idx] = r;
205
+ cG[idx] = g;
206
+ cB[idx] = b;
207
+ fR[idx] = fr;
208
+ fG[idx] = fg;
209
+ fB[idx] = fb;
210
+ const m4 = idx * 4;
211
+ mat[m4] = m0;
212
+ mat[m4 + 1] = m1;
213
+ mat[m4 + 2] = m2;
214
+ mat[m4 + 3] = m3;
215
+ }
216
+ }
217
+ }
218
+ }
219
+ var CORNER_X = [0, 1, 0, 1, 0, 1, 0, 1];
220
+ var CORNER_Y = [0, 0, 1, 1, 0, 0, 1, 1];
221
+ var CORNER_Z = [0, 0, 0, 0, 1, 1, 1, 1];
222
+ var EDGE_A = [0, 2, 4, 6, 0, 1, 4, 5, 0, 1, 2, 3];
223
+ var EDGE_B = [1, 3, 5, 7, 2, 3, 6, 7, 4, 5, 6, 7];
224
+ function surfaceNets(A, RX, RY, RZ, ox, oy, oz, sx, sy, sz, own) {
225
+ const { field, cR, cG, cB, fR, fG, fB, mat } = A;
226
+ const pos = [];
227
+ const nor = [];
228
+ const col = [];
229
+ const fnd = [];
230
+ const mats = [];
231
+ const idxOut = [];
232
+ const cx = RX - 1, cy = RY - 1, cz = RZ - 1;
233
+ const cellIndex = new Int32Array(Math.max(0, cx * cy * cz)).fill(-1);
234
+ const vals = new Float64Array(8);
235
+ const idxs = new Int32Array(8);
236
+ let vertCount = 0;
237
+ for (let z = 0; z < cz; z++) {
238
+ for (let y = 0; y < cy; y++) {
239
+ for (let x = 0; x < cx; x++) {
240
+ let mask = 0;
241
+ for (let c = 0; c < 8; c++) {
242
+ const i = x + CORNER_X[c] + (y + CORNER_Y[c]) * RX + (z + CORNER_Z[c]) * RX * RY;
243
+ idxs[c] = i;
244
+ const v = field[i];
245
+ vals[c] = v;
246
+ if (v < 0) mask |= 1 << c;
247
+ }
248
+ if (mask === 0 || mask === 255) continue;
249
+ let px = 0, py = 0, pz = 0, r = 0, g = 0, b = 0, fr = 0, fg = 0, fb = 0, n = 0;
250
+ let m0 = 0, m1 = 0, m2 = 0, m3 = 0;
251
+ for (let e = 0; e < 12; e++) {
252
+ const a = EDGE_A[e], bb = EDGE_B[e];
253
+ const va = vals[a], vb = vals[bb];
254
+ if (va < 0 === vb < 0) continue;
255
+ const t = va / (va - vb);
256
+ px += CORNER_X[a] + t * (CORNER_X[bb] - CORNER_X[a]);
257
+ py += CORNER_Y[a] + t * (CORNER_Y[bb] - CORNER_Y[a]);
258
+ pz += CORNER_Z[a] + t * (CORNER_Z[bb] - CORNER_Z[a]);
259
+ const ia = idxs[a], ib = idxs[bb];
260
+ r += cR[ia] + t * (cR[ib] - cR[ia]);
261
+ g += cG[ia] + t * (cG[ib] - cG[ia]);
262
+ b += cB[ia] + t * (cB[ib] - cB[ia]);
263
+ fr += fR[ia] + t * (fR[ib] - fR[ia]);
264
+ fg += fG[ia] + t * (fG[ib] - fG[ia]);
265
+ fb += fB[ia] + t * (fB[ib] - fB[ia]);
266
+ const a4 = ia * 4, b4 = ib * 4;
267
+ m0 += mat[a4] + t * (mat[b4] - mat[a4]);
268
+ m1 += mat[a4 + 1] + t * (mat[b4 + 1] - mat[a4 + 1]);
269
+ m2 += mat[a4 + 2] + t * (mat[b4 + 2] - mat[a4 + 2]);
270
+ m3 += mat[a4 + 3] + t * (mat[b4 + 3] - mat[a4 + 3]);
271
+ n++;
272
+ }
273
+ const v0 = vals[0], v1 = vals[1], v2 = vals[2], v3 = vals[3];
274
+ const v4 = vals[4], v5 = vals[5], v6 = vals[6], v7 = vals[7];
275
+ const gx = (v1 - v0 + (v3 - v2) + (v5 - v4) + (v7 - v6)) / sx;
276
+ const gy = (v2 - v0 + (v3 - v1) + (v6 - v4) + (v7 - v5)) / sy;
277
+ const gz = (v4 - v0 + (v5 - v1) + (v6 - v2) + (v7 - v3)) / sz;
278
+ const gl = Math.sqrt(gx * gx + gy * gy + gz * gz);
279
+ if (gl > 1e-12) nor.push(gx / gl, gy / gl, gz / gl);
280
+ else nor.push(0, 1, 0);
281
+ const inv = 1 / n;
282
+ pos.push(ox + (x + px * inv) * sx, oy + (y + py * inv) * sy, oz + (z + pz * inv) * sz);
283
+ col.push(r * inv, g * inv, b * inv);
284
+ fnd.push(fr * inv, fg * inv, fb * inv);
285
+ mats.push(m0 * inv, m1 * inv, m2 * inv, m3 * inv);
286
+ cellIndex[x + y * cx + z * cx * cy] = vertCount++;
287
+ }
288
+ }
289
+ }
290
+ const dims = [RX, RY, RZ];
291
+ const cdims = [cx, cy, cz];
292
+ const cs = [1, cx, cx * cy];
293
+ const fs = [1, RX, RX * RY];
294
+ const p = [0, 0, 0];
295
+ for (let z = 0; z < RZ; z++) {
296
+ for (let y = 0; y < RY; y++) {
297
+ for (let x = 0; x < RX; x++) {
298
+ p[0] = x;
299
+ p[1] = y;
300
+ p[2] = z;
301
+ const i = x + y * RX + z * RX * RY;
302
+ for (let axis = 0; axis < 3; axis++) {
303
+ const v = (axis + 1) % 3;
304
+ const w = (axis + 2) % 3;
305
+ const pa = p[axis], pv = p[v], pw = p[w];
306
+ if (pa >= dims[axis] - 1 || pa < own) continue;
307
+ if (pv < 1 || pv > cdims[v] - 1) continue;
308
+ if (pw < 1 || pw > cdims[w] - 1) continue;
309
+ const in0 = field[i] < 0;
310
+ const in1 = field[i + fs[axis]] < 0;
311
+ if (in0 === in1) continue;
312
+ const base = pa * cs[axis];
313
+ const a = cellIndex[base + (pv - 1) * cs[v] + (pw - 1) * cs[w]];
314
+ const b = cellIndex[base + pv * cs[v] + (pw - 1) * cs[w]];
315
+ const c = cellIndex[base + pv * cs[v] + pw * cs[w]];
316
+ const d = cellIndex[base + (pv - 1) * cs[v] + pw * cs[w]];
317
+ if (a < 0 || b < 0 || c < 0 || d < 0) continue;
318
+ if (in0) idxOut.push(a, b, c, a, c, d);
319
+ else idxOut.push(a, c, b, a, d, c);
320
+ }
321
+ }
322
+ }
323
+ }
324
+ const positions = Float32Array.from(pos);
325
+ let x0 = 0, y0 = 0, z0 = 0, x1 = 0, y1 = 0, z1 = 0;
326
+ if (positions.length > 0) {
327
+ x0 = x1 = positions[0];
328
+ y0 = y1 = positions[1];
329
+ z0 = z1 = positions[2];
330
+ for (let i = 3; i < positions.length; i += 3) {
331
+ const px = positions[i], py = positions[i + 1], pz = positions[i + 2];
332
+ if (px < x0) x0 = px;
333
+ if (px > x1) x1 = px;
334
+ if (py < y0) y0 = py;
335
+ if (py > y1) y1 = py;
336
+ if (pz < z0) z0 = pz;
337
+ if (pz > z1) z1 = pz;
338
+ }
339
+ }
340
+ return {
341
+ positions,
342
+ normals: Float32Array.from(nor),
343
+ colors: Float32Array.from(col),
344
+ foundation: Float32Array.from(fnd),
345
+ material: Float32Array.from(mats),
346
+ indices: Uint32Array.from(idxOut),
347
+ bounds: [x0, y0, z0, x1, y1, z1]
348
+ };
349
+ }
350
+
351
+ // ../evaluator/src/reference/skin.ts
352
+ var WEIGHT_FALLOFF = 0.08;
353
+ function skinWeights(positions, segs, segCount, boneCount) {
354
+ const n = Math.floor(positions.length / 3);
355
+ const I = new Float32Array(n * 4);
356
+ const W = new Float32Array(n * 4);
357
+ if (boneCount === 0) return { boneIndices: I, boneWeights: W };
358
+ const dist = new Float32Array(boneCount);
359
+ for (let v = 0; v < n; v++) {
360
+ const px = positions[v * 3], py = positions[v * 3 + 1], pz = positions[v * 3 + 2];
361
+ dist.fill(Infinity);
362
+ for (let s = 0; s < segCount; s++) {
363
+ const o = s * SEGMENT_STRIDE;
364
+ const ax = segs[o], ay = segs[o + 1], az = segs[o + 2];
365
+ const abx = segs[o + 3] - ax, aby = segs[o + 4] - ay, abz = segs[o + 5] - az;
366
+ const bone = segs[o + 6];
367
+ const apx = px - ax, apy = py - ay, apz = pz - az;
368
+ const len2 = abx * abx + aby * aby + abz * abz;
369
+ let t = len2 > 1e-8 ? (apx * abx + apy * aby + apz * abz) / len2 : 0;
370
+ t = t < 0 ? 0 : t > 1 ? 1 : t;
371
+ const dx = apx - abx * t, dy = apy - aby * t, dz = apz - abz * t;
372
+ const d2 = dx * dx + dy * dy + dz * dz;
373
+ if (d2 < dist[bone]) dist[bone] = d2;
374
+ }
375
+ let wsum = 0;
376
+ for (let k = 0; k < 4; k++) {
377
+ let bi = -1;
378
+ let m = Infinity;
379
+ for (let j = 0; j < boneCount; j++) {
380
+ if (dist[j] < m) {
381
+ m = dist[j];
382
+ bi = j;
383
+ }
384
+ }
385
+ if (bi < 0) {
386
+ I[v * 4 + k] = 0;
387
+ W[v * 4 + k] = 0;
388
+ continue;
389
+ }
390
+ const q = m + WEIGHT_FALLOFF;
391
+ const w = 1 / (q * q);
392
+ I[v * 4 + k] = bi;
393
+ W[v * 4 + k] = w;
394
+ wsum += w;
395
+ dist[bi] = Infinity;
396
+ }
397
+ for (let k = 0; k < 4; k++) W[v * 4 + k] = W[v * 4 + k] / wsum;
398
+ }
399
+ return { boneIndices: I, boneWeights: W };
400
+ }
401
+
402
+ // ../evaluator/src/reference/core.ts
403
+ function createReferenceCore() {
404
+ const slots = /* @__PURE__ */ new Map();
405
+ const scratch = /* @__PURE__ */ new Map();
406
+ return {
407
+ kind: "reference",
408
+ mesh(table, stampCount, params, list) {
409
+ const RX = params[6], RY = params[7], RZ = params[8];
410
+ const total = RX * RY * RZ;
411
+ const slot = params[10];
412
+ let A;
413
+ let full = true;
414
+ if (slot >= 0) {
415
+ A = slots.get(slot);
416
+ if (A && A.field.length === total) full = false;
417
+ else {
418
+ A = newVoxArrays(total);
419
+ slots.set(slot, A);
420
+ }
421
+ } else {
422
+ A = scratch.get(total);
423
+ if (!A) {
424
+ A = newVoxArrays(total);
425
+ scratch.set(total, A);
426
+ }
427
+ }
428
+ let order = list;
429
+ if (!order || order.length === 0) {
430
+ order = new Int32Array(stampCount);
431
+ for (let i = 0; i < stampCount; i++) order[i] = i;
432
+ }
433
+ const box = full ? [0, RX - 1, 0, RY - 1, 0, RZ - 1] : [params[11], params[12], params[13], params[14], params[15], params[16]];
434
+ if (stampCount > 0) {
435
+ evalRange(
436
+ table,
437
+ order,
438
+ A,
439
+ RX,
440
+ RY,
441
+ params[0],
442
+ params[1],
443
+ params[2],
444
+ params[3],
445
+ params[4],
446
+ params[5],
447
+ box[0],
448
+ box[1],
449
+ box[2],
450
+ box[3],
451
+ box[4],
452
+ box[5]
453
+ );
454
+ } else {
455
+ A.field.fill(1e5);
456
+ }
457
+ return surfaceNets(A, RX, RY, RZ, params[0], params[1], params[2], params[3], params[4], params[5], params[9]);
458
+ },
459
+ dropSlot(slot) {
460
+ slots.delete(slot);
461
+ },
462
+ skin(positions, segments, segmentCount, boneCount) {
463
+ return skinWeights(positions, segments, segmentCount, boneCount);
464
+ }
465
+ };
466
+ }
467
+
468
+ // ../evaluator/src/prep/colors.ts
469
+ var FIXED_COLORS = { tongue: 16021135, teeth: 16514042, black: 1118481 };
470
+ var MISSING = 16711935;
471
+ function colorHex(ref, palette) {
472
+ if (ref === "tongue" || ref === "teeth" || ref === "black") return FIXED_COLORS[ref];
473
+ const v = palette[ref];
474
+ return typeof v === "number" ? v : MISSING;
475
+ }
476
+ function rgbOf(ref, palette) {
477
+ const hex = colorHex(ref, palette);
478
+ return [(hex >> 16 & 255) / 255, (hex >> 8 & 255) / 255, (hex & 255) / 255];
479
+ }
480
+
481
+ // ../evaluator/src/prep/mat3.ts
482
+ var IDENTITY = [1, 0, 0, 0, 1, 0, 0, 0, 1];
483
+ function fromQuaternion(q) {
484
+ const l = Math.sqrt(q.x * q.x + q.y * q.y + q.z * q.z + q.w * q.w) || 1;
485
+ const x = q.x / l, y = q.y / l, z = q.z / l, w = q.w / l;
486
+ const x2 = x + x, y2 = y + y, z2 = z + z;
487
+ const xx = x * x2, xy = x * y2, xz = x * z2;
488
+ const yy = y * y2, yz = y * z2, zz = z * z2;
489
+ const wx = w * x2, wy = w * y2, wz = w * z2;
490
+ return [1 - (yy + zz), xy - wz, xz + wy, xy + wz, 1 - (xx + zz), yz - wx, xz - wy, yz + wx, 1 - (xx + yy)];
491
+ }
492
+ function fromAxisAngle(ax, ay, az, angle) {
493
+ const c = Math.cos(angle), s = Math.sin(angle), t = 1 - c;
494
+ const tx = t * ax, ty = t * ay;
495
+ return [
496
+ tx * ax + c,
497
+ tx * ay - s * az,
498
+ tx * az + s * ay,
499
+ tx * ay + s * az,
500
+ ty * ay + c,
501
+ ty * az - s * ax,
502
+ tx * az - s * ay,
503
+ ty * az + s * ax,
504
+ t * az * az + c
505
+ ];
506
+ }
507
+ function scale(sx, sy, sz) {
508
+ return [sx, 0, 0, 0, sy, 0, 0, 0, sz];
509
+ }
510
+ function mul(a, b) {
511
+ const o = [];
512
+ for (let r = 0; r < 3; r++) {
513
+ for (let c = 0; c < 3; c++) o.push(a[r * 3] * b[c] + a[r * 3 + 1] * b[3 + c] + a[r * 3 + 2] * b[6 + c]);
514
+ }
515
+ return o;
516
+ }
517
+ function transpose(m) {
518
+ return [m[0], m[3], m[6], m[1], m[4], m[7], m[2], m[5], m[8]];
519
+ }
520
+ function det(m) {
521
+ return m[0] * (m[4] * m[8] - m[5] * m[7]) - m[1] * (m[3] * m[8] - m[5] * m[6]) + m[2] * (m[3] * m[7] - m[4] * m[6]);
522
+ }
523
+ function apply(m, x, y, z) {
524
+ return [m[0] * x + m[1] * y + m[2] * z, m[3] * x + m[4] * y + m[5] * z, m[6] * x + m[7] * y + m[8] * z];
525
+ }
526
+
527
+ // ../evaluator/src/prep/props.ts
528
+ function resolveStampProps(stamp, sculpt) {
529
+ const group = stamp.smearGroupId === void 0 ? void 0 : sculpt.smearGroups.find((g) => g.id === stamp.smearGroupId);
530
+ const look = sculpt.look;
531
+ if (group) {
532
+ return {
533
+ mode: group.mode,
534
+ blend: group.blend,
535
+ color: group.color,
536
+ foundationColor: group.foundationColor ?? group.color,
537
+ material: stamp.material ?? {},
538
+ symmetry: group.symmetry
539
+ };
540
+ }
541
+ return {
542
+ mode: stamp.mode,
543
+ blend: stamp.blend ?? look.blend,
544
+ color: stamp.color ?? look.color,
545
+ foundationColor: stamp.foundationColor ?? (stamp.color !== void 0 ? stamp.color : look.foundationColor),
546
+ material: stamp.material ?? {},
547
+ symmetry: stamp.symmetry
548
+ };
549
+ }
550
+
551
+ // ../evaluator/src/prep/symmetry.ts
552
+ var SYM_MAX_N = 12;
553
+ var SYM_MAX_INSTANCES = 128;
554
+ var SYM_STAMP_CAP = 1024;
555
+ var AXIS_ORDER = ["x", "y", "z"];
556
+ var AXIS_VEC = { x: [1, 0, 0], y: [0, 1, 0], z: [0, 0, 1] };
557
+ var MIRROR = { x: scale(-1, 1, 1), y: scale(1, -1, 1), z: scale(1, 1, -1) };
558
+ var FLIP_X = scale(-1, 1, 1);
559
+ function symAxesOf(axes) {
560
+ return AXIS_ORDER.filter((a) => (axes ?? []).includes(a));
561
+ }
562
+ function symClampN(n, axes) {
563
+ let N = Math.max(1, Math.min(SYM_MAX_N, Math.round(n) || 1));
564
+ const len = symAxesOf(axes).length;
565
+ while (len > 0 && N > 1 && Math.pow(N, len) > SYM_MAX_INSTANCES) N--;
566
+ return N;
567
+ }
568
+ var isIdentity = (m) => m.every((v, i) => Math.abs(v - IDENTITY[i]) <= 1e-6);
569
+ var matCache = /* @__PURE__ */ new Map();
570
+ function symInstanceMatrices(n, axes) {
571
+ const sel = symAxesOf(axes);
572
+ const key = n + "|" + sel.join("");
573
+ const hit = matCache.get(key);
574
+ if (hit) return hit;
575
+ const plan = sel.length ? sel : n > 1 ? ["y"] : [];
576
+ let list = plan.length ? [IDENTITY] : [];
577
+ for (const a of AXIS_ORDER) {
578
+ if (!plan.includes(a)) continue;
579
+ const gens = [];
580
+ if (n === 2) gens.push(IDENTITY, MIRROR[a]);
581
+ else {
582
+ const v = AXIS_VEC[a];
583
+ for (let k = 0; k < n; k++) gens.push(fromAxisAngle(v[0], v[1], v[2], k * Math.PI * 2 / n));
584
+ }
585
+ const next = [];
586
+ for (const base of list) for (const g of gens) next.push(mul(base, g));
587
+ list = next;
588
+ }
589
+ const seen = /* @__PURE__ */ new Set();
590
+ const unique = [];
591
+ for (const m of list) {
592
+ if (isIdentity(m)) continue;
593
+ const k = m.map((v) => Math.round(v * 1e5)).join(",");
594
+ if (seen.has(k)) continue;
595
+ seen.add(k);
596
+ unique.push(m);
597
+ }
598
+ matCache.set(key, unique);
599
+ return unique;
600
+ }
601
+ function symInstancesOf(position, rotation, pivot, n, axes) {
602
+ const P = fromQuaternion(pivot.rotation);
603
+ const Pinv = transpose(P);
604
+ const pp = pivot.position;
605
+ return symInstanceMatrices(n, axes).map((L0) => {
606
+ const L = mul(mul(P, L0), Pinv);
607
+ const r = apply(L, position.x - pp.x, position.y - pp.y, position.z - pp.z);
608
+ let M = mul(L, rotation);
609
+ if (det(L) < 0) M = mul(M, FLIP_X);
610
+ return { position: [pp.x + r[0], pp.y + r[1], pp.z + r[2]], rotation: M };
611
+ });
612
+ }
613
+
614
+ // ../evaluator/src/prep/pack.ts
615
+ var MIN_RESOLUTION = 4;
616
+ var MAX_RESOLUTION = 128;
617
+ function clampResolution(r) {
618
+ return Math.max(MIN_RESOLUTION, Math.min(MAX_RESOLUTION, Math.round(r) || 36));
619
+ }
620
+ function lodLevels(base) {
621
+ const r = Math.max(16, Math.min(64, Math.round(base) || 36));
622
+ return [r, Math.max(16, Math.round(r * 0.67)), Math.max(12, Math.round(r * 0.44))];
623
+ }
624
+ function boundRadius(shape, hx, hy, hz) {
625
+ if (shape === "sphere") return Math.max(hx, hy, hz);
626
+ if (shape === "cylinder") {
627
+ const r = Math.max(hx, hz);
628
+ return Math.sqrt(r * r + hy * hy);
629
+ }
630
+ if (shape === "torus") {
631
+ const r = 1.1 * Math.max(hx, hz), t = 0.3 * hy;
632
+ return Math.sqrt(r * r + t * t);
633
+ }
634
+ return Math.sqrt(hx * hx + hy * hy + hz * hz);
635
+ }
636
+ function packSculpt(sculpt, palette) {
637
+ const rows = [];
638
+ const props = sculpt.stamps.map((s) => resolveStampProps(s, sculpt));
639
+ let overflow = 0;
640
+ sculpt.stamps.forEach((s, si) => {
641
+ const rot = fromQuaternion(s.rotation);
642
+ const base = { shape: s.shape, sx: s.scale.x, sy: s.scale.y, sz: s.scale.z, si };
643
+ rows.push({ ...base, pos: [s.position.x, s.position.y, s.position.z], rot });
644
+ const sym = props[si].symmetry;
645
+ const n = symClampN(sym?.count ?? 1, sym?.axes);
646
+ for (const inst of symInstancesOf(s.position, rot, sculpt.pivot, n, sym?.axes)) {
647
+ if (rows.length >= SYM_STAMP_CAP) {
648
+ overflow++;
649
+ continue;
650
+ }
651
+ rows.push({ ...base, pos: inst.position, rot: inst.rotation });
652
+ }
653
+ });
654
+ const count = rows.length;
655
+ const T = new Float64Array(count * STAMP_STRIDE);
656
+ const mat = sculpt.look.material;
657
+ const defaults = [mat.roughness, mat.metalness, mat.glow, 1];
658
+ let lo = [Infinity, Infinity, Infinity], hi = [-Infinity, -Infinity, -Infinity];
659
+ let maxBlend = -Infinity;
660
+ rows.forEach((row, i) => {
661
+ const p = props[row.si];
662
+ const o = i * STAMP_STRIDE;
663
+ const hx = row.sx * 0.5, hy = row.sy * 0.5, hz = row.sz * 0.5;
664
+ T[o] = SHAPE_CODE[row.shape] ?? -1;
665
+ T[o + 1] = MODE_CODE[p.mode] ?? 4;
666
+ T[o + 2] = row.pos[0];
667
+ T[o + 3] = row.pos[1];
668
+ T[o + 4] = row.pos[2];
669
+ const R = row.rot;
670
+ T[o + 5] = R[0];
671
+ T[o + 6] = R[3];
672
+ T[o + 7] = R[6];
673
+ T[o + 8] = R[1];
674
+ T[o + 9] = R[4];
675
+ T[o + 10] = R[7];
676
+ T[o + 11] = R[2];
677
+ T[o + 12] = R[5];
678
+ T[o + 13] = R[8];
679
+ T[o + 14] = hx;
680
+ T[o + 15] = hy;
681
+ T[o + 16] = hz;
682
+ T[o + 17] = p.blend;
683
+ T[o + 18] = boundRadius(row.shape, hx, hy, hz);
684
+ T[o + 19] = row.shape === "cube" ? 1 : Math.min(hx, hy, hz) / Math.max(hx, hy, hz, 1e-4);
685
+ const c = rgbOf(p.color, palette), f = rgbOf(p.foundationColor, palette);
686
+ T[o + 20] = c[0];
687
+ T[o + 21] = c[1];
688
+ T[o + 22] = c[2];
689
+ T[o + 23] = f[0];
690
+ T[o + 24] = f[1];
691
+ T[o + 25] = f[2];
692
+ const own = [p.material.roughness, p.material.metalness, p.material.glow, p.material.flecks === void 0 ? void 0 : p.material.flecks ? 1 : 0];
693
+ let mask = 0;
694
+ for (let k = 0; k < 4; k++) {
695
+ const v = own[k];
696
+ if (v !== void 0) mask |= 1 << k;
697
+ T[o + 26 + k] = Math.fround(v ?? defaults[k]);
698
+ }
699
+ T[o + 30] = mask;
700
+ maxBlend = Math.max(maxBlend, p.blend);
701
+ const pad = [row.sx * 0.7, row.sy * 0.7, row.sz * 0.7];
702
+ for (let a = 0; a < 3; a++) {
703
+ lo[a] = Math.min(lo[a], row.pos[a] - pad[a]);
704
+ hi[a] = Math.max(hi[a], row.pos[a] + pad[a]);
705
+ }
706
+ });
707
+ if (count === 0) {
708
+ lo = [0, 0, 0];
709
+ hi = [0, 0, 0];
710
+ maxBlend = 0;
711
+ }
712
+ const size0 = [hi[0] - lo[0], hi[1] - lo[1], hi[2] - lo[2]];
713
+ const margin = Math.max(Math.min(0.6, 0.35 * Math.max(size0[0], size0[1], size0[2])), maxBlend * 1.5);
714
+ const bMin = [lo[0] - margin, lo[1] - margin, lo[2] - margin];
715
+ const bMax = [hi[0] + margin, hi[1] + margin, hi[2] + margin];
716
+ return {
717
+ table: T,
718
+ count,
719
+ overflow,
720
+ maxBlend,
721
+ bMin,
722
+ bSize: [bMax[0] - bMin[0], bMax[1] - bMin[1], bMax[2] - bMin[2]]
723
+ };
724
+ }
725
+
726
+ // ../evaluator/src/chunks.ts
727
+ var CHUNK_MIN_EXTENT = 8;
728
+ var CHUNK_CELLS = 144;
729
+ var CHUNK_C0 = 16;
730
+ var CHUNK_LEVELS = 3;
731
+ var CHUNK_TARGET_PX = 20;
732
+ var CHUNK_HYST = 0.25;
733
+ var EMPTY = {
734
+ nV: 0,
735
+ pos: new Float32Array(0),
736
+ nor: new Float32Array(0),
737
+ col: new Float32Array(0),
738
+ fcol: new Float32Array(0),
739
+ mat: new Float32Array(0),
740
+ idx: new Uint32Array(0)
741
+ };
742
+ function wantsChunks(P, chunkedBefore) {
743
+ const ext = Math.max(P.bSize[0], P.bSize[1], P.bSize[2]);
744
+ return ext >= CHUNK_MIN_EXTENT * (chunkedBefore ? 0.8 : 1);
745
+ }
746
+ function niceStep(x) {
747
+ const e = Math.floor(Math.log10(x)), m = x / Math.pow(10, e);
748
+ for (const v of [1, 1.25, 1.5, 2, 2.5, 3, 4, 5, 6, 8, 10]) if (m <= v + 1e-9) return v * Math.pow(10, e);
749
+ return 10 * Math.pow(10, e);
750
+ }
751
+ function suffixMax(table, count) {
752
+ const o = new Float64Array(count + 1);
753
+ for (let i = count - 1; i >= 0; i--) o[i] = Math.max(o[i + 1], table[i * STAMP_STRIDE + 17]);
754
+ return o;
755
+ }
756
+ function dirtyBoxes(oldT, nOld, cur, nNew) {
757
+ const nMin = Math.min(nOld, nNew), changedOld = [], changedNew = [];
758
+ for (let i = 0; i < nMin; i++) {
759
+ const a = i * STAMP_STRIDE;
760
+ for (let k = 0; k < STAMP_STRIDE; k++) {
761
+ if (oldT[a + k] !== cur[a + k]) {
762
+ changedOld.push(i);
763
+ changedNew.push(i);
764
+ break;
765
+ }
766
+ }
767
+ }
768
+ for (let i = nMin; i < nOld; i++) changedOld.push(i);
769
+ for (let i = nMin; i < nNew; i++) changedNew.push(i);
770
+ const boxes = [];
771
+ let bad = false;
772
+ const reach = (T, suf, i) => {
773
+ const o = i * STAMP_STRIDE, mode = T[o + 1], k = T[o + 17];
774
+ if (mode === 2 || mode > 3) {
775
+ bad = true;
776
+ return;
777
+ }
778
+ const kk = mode === 3 ? 0.5 * k : k + suf[i + 1];
779
+ const inv = 1.25 / Math.max(T[o + 19], 0.02), r = T[o + 18] + kk * inv;
780
+ const x = T[o + 2], y = T[o + 3], z = T[o + 4];
781
+ boxes.push([x - r, y - r, z - r, x + r, y + r, z + r, 3 * inv]);
782
+ };
783
+ const sufOld = suffixMax(oldT, nOld), sufNew = suffixMax(cur, nNew);
784
+ for (const i of changedOld) reach(oldT, sufOld, i);
785
+ for (const i of changedNew) reach(cur, sufNew, i);
786
+ return bad ? null : boxes;
787
+ }
788
+ function shapeList(T, n, suf, lo, hi, step) {
789
+ const out = [];
790
+ let hasAdd = false;
791
+ for (let i = 0; i < n; i++) {
792
+ const o = i * STAMP_STRIDE, mode = T[o + 1];
793
+ let reaches = true;
794
+ if (mode === 0 || mode === 3) {
795
+ const kk = mode === 3 ? 0.5 * T[o + 17] : T[o + 17] + suf[i + 1];
796
+ const r = T[o + 18] + (kk + 3 * step) * 1.25 / Math.max(T[o + 19], 0.02);
797
+ const px = T[o + 2], py = T[o + 3], pz = T[o + 4];
798
+ const dx = Math.max(lo[0] - px, 0, px - hi[0]), dy = Math.max(lo[1] - py, 0, py - hi[1]), dz = Math.max(lo[2] - pz, 0, pz - hi[2]);
799
+ reaches = dx * dx + dy * dy + dz * dz <= r * r;
800
+ }
801
+ if (mode === 0 && reaches) hasAdd = true;
802
+ if (reaches || i === 0) out.push(i);
803
+ }
804
+ return hasAdd ? Int32Array.from(out) : null;
805
+ }
806
+ function buildChunk(core, st, P, suf, rec, L) {
807
+ const h0 = st.h0, f = 1 << L, n = CHUNK_C0 >> L, h = f * h0, RX = n + 2;
808
+ const ox = (rec.i * CHUNK_C0 - f) * h0, oy = (rec.j * CHUNK_C0 - f) * h0, oz = (rec.k * CHUNK_C0 - f) * h0;
809
+ const W = st.W, pad = 2 * h;
810
+ const list = shapeList(
811
+ P.table,
812
+ P.count,
813
+ suf,
814
+ [rec.i * W - pad, rec.j * W - pad, rec.k * W - pad],
815
+ [(rec.i + 1) * W + pad, (rec.j + 1) * W + pad, (rec.k + 1) * W + pad],
816
+ h
817
+ );
818
+ if (!list) return EMPTY;
819
+ const params = new Float64Array(PARAMS_LEN);
820
+ params.set([ox, oy, oz, h, h, h, RX, RX, RX, 1, -1, 0, RX - 1, 0, RX - 1, 0, RX - 1]);
821
+ const m = core.mesh(P.table, P.count, params, list);
822
+ if (!m.indices.length) return EMPTY;
823
+ return {
824
+ nV: m.positions.length / 3,
825
+ pos: m.positions.slice(),
826
+ nor: m.normals.slice(),
827
+ col: m.colors.slice(),
828
+ fcol: m.foundation.slice(),
829
+ mat: m.material.slice(),
830
+ idx: m.indices.slice()
831
+ };
832
+ }
833
+ function skirtOf(mesh, depth) {
834
+ const idx = mesh.idx, cnt = /* @__PURE__ */ new Map();
835
+ const key = (a, b) => a < b ? a * mesh.nV + b : b * mesh.nV + a;
836
+ for (let t = 0; t < idx.length; t += 3) {
837
+ for (let e = 0; e < 3; e++) {
838
+ const kk = key(idx[t + e], idx[t + (e + 1) % 3]);
839
+ cnt.set(kk, (cnt.get(kk) ?? 0) + 1);
840
+ }
841
+ }
842
+ const edges = [];
843
+ for (let t = 0; t < idx.length; t += 3) {
844
+ for (let e = 0; e < 3; e++) {
845
+ const a = idx[t + e], b = idx[t + (e + 1) % 3];
846
+ if (cnt.get(key(a, b)) === 1) edges.push(a, b);
847
+ }
848
+ }
849
+ const nE = edges.length / 2;
850
+ if (!nE) return null;
851
+ const nV = nE * 4, pos = new Float32Array(nV * 3), nor = new Float32Array(nV * 3), col = new Float32Array(nV * 3);
852
+ const fcol = new Float32Array(nV * 3), mat = new Float32Array(nV * 4), ix = new Uint32Array(nE * 12);
853
+ for (let e = 0; e < nE; e++) {
854
+ const a = edges[e * 2], b = edges[e * 2 + 1], o = e * 4;
855
+ [a, b, b, a].forEach((src, q) => {
856
+ const d = (o + q) * 3, s = src * 3, drop = q >= 2 ? depth : 0;
857
+ for (let c = 0; c < 3; c++) {
858
+ pos[d + c] = mesh.pos[s + c] - mesh.nor[s + c] * drop;
859
+ nor[d + c] = mesh.nor[s + c];
860
+ col[d + c] = mesh.col[s + c];
861
+ fcol[d + c] = mesh.fcol[s + c];
862
+ }
863
+ for (let c = 0; c < 4; c++) mat[(o + q) * 4 + c] = mesh.mat[src * 4 + c];
864
+ });
865
+ ix.set([o, o + 1, o + 2, o, o + 2, o + 3, o, o + 2, o + 1, o, o + 3, o + 2], e * 12);
866
+ }
867
+ return { nV, pos, nor, col, fcol, mat, idx: ix };
868
+ }
869
+ function wantLevel(st, rec, view) {
870
+ const W = st.W, c = view.camera;
871
+ const dx = Math.max(rec.i * W - c.x, 0, c.x - (rec.i + 1) * W);
872
+ const dy = Math.max(rec.j * W - c.y, 0, c.y - (rec.j + 1) * W);
873
+ const dz = Math.max(rec.k * W - c.z, 0, c.z - (rec.k + 1) * W);
874
+ const dist = Math.max(Math.sqrt(dx * dx + dy * dy + dz * dz), 1e-3);
875
+ const pxAt = (L) => st.h0 * (1 << L) * view.pixelsPerUnitAtDistance1 / dist;
876
+ let ideal = 0;
877
+ for (let L = CHUNK_LEVELS - 1; L >= 0; L--) if (pxAt(L) <= CHUNK_TARGET_PX) {
878
+ ideal = L;
879
+ break;
880
+ }
881
+ const cur = rec.level;
882
+ if (cur === null || ideal <= cur) return ideal;
883
+ return pxAt(ideal) * (1 + CHUNK_HYST) <= CHUNK_TARGET_PX ? ideal : cur;
884
+ }
885
+ function skirtFor(st, rec, mesh) {
886
+ let depth = 0;
887
+ for (let a = -1; a <= 1; a++) for (let b = -1; b <= 1; b++) for (let c = -1; c <= 1; c++) {
888
+ if (!a && !b && !c) continue;
889
+ const nb = st.chunks.get(`${rec.i + a},${rec.j + b},${rec.k + c}`);
890
+ if (!nb || nb.level === null || nb.level === rec.level) continue;
891
+ const nm = nb.meshes.get(nb.level);
892
+ if (!nm || !nm.nV) continue;
893
+ depth = Math.max(depth, st.h0 * (1 << Math.max(nb.level, rec.level ?? 0)));
894
+ }
895
+ if (!depth) return null;
896
+ if (rec.skirt && rec.skirtDepth === depth && rec.skirtOf === mesh) return rec.skirt;
897
+ rec.skirt = skirtOf(mesh, depth);
898
+ rec.skirtDepth = depth;
899
+ rec.skirtOf = mesh;
900
+ return rec.skirt;
901
+ }
902
+ function merge(st) {
903
+ const parts = [];
904
+ let nV = 0, nI = 0;
905
+ for (const rec of st.chunks.values()) {
906
+ const m = rec.level === null ? null : rec.meshes.get(rec.level);
907
+ if (!m || !m.nV) continue;
908
+ parts.push(m);
909
+ nV += m.nV;
910
+ nI += m.idx.length;
911
+ const sk = skirtFor(st, rec, m);
912
+ if (sk) {
913
+ parts.push(sk);
914
+ nV += sk.nV;
915
+ nI += sk.idx.length;
916
+ }
917
+ }
918
+ const pos = new Float32Array(nV * 3), nor = new Float32Array(nV * 3), col = new Float32Array(nV * 3);
919
+ const fcol = new Float32Array(nV * 3), mat = new Float32Array(nV * 4), idx = new Uint32Array(nI);
920
+ let v = 0, t = 0;
921
+ const lo = [Infinity, Infinity, Infinity], hi = [-Infinity, -Infinity, -Infinity];
922
+ for (const m of parts) {
923
+ pos.set(m.pos, v * 3);
924
+ nor.set(m.nor, v * 3);
925
+ col.set(m.col, v * 3);
926
+ fcol.set(m.fcol, v * 3);
927
+ mat.set(m.mat, v * 4);
928
+ for (let q = 0; q < m.idx.length; q++) idx[t + q] = m.idx[q] + v;
929
+ v += m.nV;
930
+ t += m.idx.length;
931
+ }
932
+ for (let p = 0; p < pos.length; p += 3) {
933
+ for (let c = 0; c < 3; c++) {
934
+ lo[c] = Math.min(lo[c], pos[p + c]);
935
+ hi[c] = Math.max(hi[c], pos[p + c]);
936
+ }
937
+ }
938
+ const bounds = nV ? [lo[0], lo[1], lo[2], hi[0], hi[1], hi[2]] : [0, 0, 0, 0, 0, 0];
939
+ return { nV, pos, nor, col, fcol, mat, idx, bounds, chunks: st.chunks.size };
940
+ }
941
+ function chunkMesh(core, prev, P, view) {
942
+ const ext = Math.max(P.bSize[0], P.bSize[1], P.bSize[2]);
943
+ const h0 = niceStep(ext / CHUNK_CELLS), W = CHUNK_C0 * h0;
944
+ let st = prev;
945
+ if (!st || st.h0 !== h0) st = { h0, W, chunks: /* @__PURE__ */ new Map(), table: new Float64Array(0), count: 0 };
946
+ const dirty = st.count ? dirtyBoxes(st.table, st.count, P.table, P.count) : null;
947
+ st.table = P.table;
948
+ st.count = P.count;
949
+ const suf = suffixMax(P.table, P.count);
950
+ const lo = [0, 1, 2].map((a) => Math.floor(P.bMin[a] / W));
951
+ const hi = [0, 1, 2].map((a) => Math.ceil((P.bMin[a] + P.bSize[a]) / W) - 1);
952
+ const alive = /* @__PURE__ */ new Set();
953
+ for (let k = lo[2]; k <= hi[2]; k++) for (let j = lo[1]; j <= hi[1]; j++) for (let i = lo[0]; i <= hi[0]; i++) {
954
+ const key = `${i},${j},${k}`;
955
+ alive.add(key);
956
+ if (!st.chunks.has(key)) st.chunks.set(key, { i, j, k, level: null, meshes: /* @__PURE__ */ new Map(), skirt: null, skirtDepth: 0, skirtOf: null });
957
+ }
958
+ for (const key of [...st.chunks.keys()]) if (!alive.has(key)) st.chunks.delete(key);
959
+ for (const rec of st.chunks.values()) {
960
+ for (const L of [...rec.meshes.keys()]) {
961
+ let hit = dirty === null;
962
+ if (!hit) {
963
+ const h = h0 * (1 << L);
964
+ hit = dirty.some((bx) => {
965
+ const p = (2 + bx[6]) * h;
966
+ return bx[0] <= (rec.i + 1) * W + p && bx[3] >= rec.i * W - p && bx[1] <= (rec.j + 1) * W + p && bx[4] >= rec.j * W - p && bx[2] <= (rec.k + 1) * W + p && bx[5] >= rec.k * W - p;
967
+ });
968
+ }
969
+ if (hit) {
970
+ rec.meshes.delete(L);
971
+ rec.skirt = null;
972
+ }
973
+ }
974
+ }
975
+ for (const rec of st.chunks.values()) {
976
+ const L = wantLevel(st, rec, view);
977
+ if (!rec.meshes.has(L)) rec.meshes.set(L, buildChunk(core, st, P, suf, rec, L));
978
+ const prevLevel = rec.level;
979
+ rec.level = L;
980
+ for (const key of [...rec.meshes.keys()]) if (key !== L && key !== prevLevel) rec.meshes.delete(key);
981
+ }
982
+ return { state: st, out: merge(st) };
983
+ }
984
+
985
+ // ../evaluator/src/session.ts
986
+ var VOX_CACHE_MAX = 4;
987
+ var VOX_FULL_FRACTION = 0.6;
988
+ var now = () => typeof performance !== "undefined" ? performance.now() : Date.now();
989
+ function suffixMax2(table, count) {
990
+ const o = new Float64Array(count + 1);
991
+ for (let i = count - 1; i >= 0; i--) o[i] = Math.max(o[i + 1], table[i * STAMP_STRIDE + 17]);
992
+ return o;
993
+ }
994
+ function dirtyBox(e, P, R, step) {
995
+ const nOld = e.count, nNew = P.count, nMin = Math.min(nOld, nNew);
996
+ const changedOld = [], changedNew = [];
997
+ for (let i = 0; i < nMin; i++) {
998
+ const a = i * STAMP_STRIDE;
999
+ for (let k = 0; k < STAMP_STRIDE; k++) {
1000
+ if (e.table[a + k] !== P.table[a + k]) {
1001
+ changedOld.push(i);
1002
+ changedNew.push(i);
1003
+ break;
1004
+ }
1005
+ }
1006
+ }
1007
+ for (let i = nMin; i < nOld; i++) changedOld.push(i);
1008
+ for (let i = nMin; i < nNew; i++) changedNew.push(i);
1009
+ const st = Math.max(step[0], step[1], step[2]);
1010
+ const [bx, by, bz] = P.bMin;
1011
+ const [wx, wy, wz] = P.bSize;
1012
+ let x0 = Infinity, y0 = Infinity, z0 = Infinity, x1 = -Infinity, y1 = -Infinity, z1 = -Infinity;
1013
+ let bad = false;
1014
+ const reach = (T, suf, i) => {
1015
+ const o = i * STAMP_STRIDE;
1016
+ const mode = T[o + 1], k = T[o + 17];
1017
+ if (mode === 2 || mode > 3) {
1018
+ bad = true;
1019
+ return;
1020
+ }
1021
+ const kk = mode === 3 ? 0.5 * k : k + suf[i + 1];
1022
+ const r = T[o + 18] + (kk + 3 * st) * 1.25 / Math.max(T[o + 19], 0.02);
1023
+ if (!(r < 4 * wx + 4 * wy + 4 * wz)) {
1024
+ bad = true;
1025
+ return;
1026
+ }
1027
+ const px = T[o + 2], py = T[o + 3], pz = T[o + 4];
1028
+ x0 = Math.min(x0, Math.floor((px - r - bx) / step[0]));
1029
+ x1 = Math.max(x1, Math.ceil((px + r - bx) / step[0]));
1030
+ y0 = Math.min(y0, Math.floor((py - r - by) / step[1]));
1031
+ y1 = Math.max(y1, Math.ceil((py + r - by) / step[1]));
1032
+ z0 = Math.min(z0, Math.floor((pz - r - bz) / step[2]));
1033
+ z1 = Math.max(z1, Math.ceil((pz + r - bz) / step[2]));
1034
+ };
1035
+ const sufOld = suffixMax2(e.table, nOld), sufNew = suffixMax2(P.table, nNew);
1036
+ for (const i of changedOld) reach(e.table, sufOld, i);
1037
+ for (const i of changedNew) reach(P.table, sufNew, i);
1038
+ if (bad) return null;
1039
+ if (x0 === Infinity) return "none";
1040
+ x0 = Math.max(0, x0);
1041
+ y0 = Math.max(0, y0);
1042
+ z0 = Math.max(0, z0);
1043
+ x1 = Math.min(R - 1, x1);
1044
+ y1 = Math.min(R - 1, y1);
1045
+ z1 = Math.min(R - 1, z1);
1046
+ const vox = Math.max(0, x1 - x0 + 1) * Math.max(0, y1 - y0 + 1) * Math.max(0, z1 - z0 + 1);
1047
+ if (vox > VOX_FULL_FRACTION * R * R * R) return null;
1048
+ return [x0, x1, y0, y1, z0, z1];
1049
+ }
1050
+ function createMeshSession(core, options = {}) {
1051
+ const useCache = options.cache ?? true;
1052
+ const cache = /* @__PURE__ */ new Map();
1053
+ const freeSlots = [];
1054
+ for (let i = VOX_CACHE_MAX - 1; i >= 0; i--) freeSlots.push(i);
1055
+ let info = { mode: "full", voxels: 0, total: 0 };
1056
+ const chunked = /* @__PURE__ */ new Map();
1057
+ const takeSlot = (key) => {
1058
+ let e = cache.get(key);
1059
+ if (e) {
1060
+ cache.delete(key);
1061
+ cache.set(key, e);
1062
+ return e;
1063
+ }
1064
+ if (!freeSlots.length) {
1065
+ const [oldKey, old] = cache.entries().next().value;
1066
+ cache.delete(oldKey);
1067
+ core.dropSlot(old.slot);
1068
+ freeSlots.push(old.slot);
1069
+ }
1070
+ e = { slot: freeSlots.pop(), res: -1, bMin: [NaN, NaN, NaN], bSize: [NaN, NaN, NaN], table: new Float64Array(0), count: 0 };
1071
+ cache.set(key, e);
1072
+ return e;
1073
+ };
1074
+ return {
1075
+ core,
1076
+ mesh(request) {
1077
+ const t0 = now();
1078
+ const R = clampResolution(request.resolution);
1079
+ const P = packSculpt(request.sculpt, request.palette);
1080
+ const prevChunks = chunked.get(request.key) ?? null;
1081
+ if (request.view && wantsChunks(P, prevChunks !== null)) {
1082
+ const { state, out } = chunkMesh(core, prevChunks, P, request.view);
1083
+ chunked.set(request.key, state);
1084
+ info = { mode: "chunks", voxels: out.chunks, total: out.chunks };
1085
+ const b2 = out.bounds;
1086
+ return {
1087
+ key: request.key,
1088
+ positions: out.pos,
1089
+ normals: out.nor,
1090
+ colors: out.col,
1091
+ foundation: out.fcol,
1092
+ material: out.mat,
1093
+ indices: out.idx,
1094
+ boundsMin: { x: b2[0], y: b2[1], z: b2[2] },
1095
+ boundsMax: { x: b2[3], y: b2[4], z: b2[5] },
1096
+ ms: now() - t0,
1097
+ ...P.overflow ? { overflow: P.overflow } : {}
1098
+ };
1099
+ }
1100
+ chunked.delete(request.key);
1101
+ const step = [P.bSize[0] / (R - 1), P.bSize[1] / (R - 1), P.bSize[2] / (R - 1)];
1102
+ const total = R * R * R;
1103
+ const params = new Float64Array(PARAMS_LEN);
1104
+ params.set([P.bMin[0], P.bMin[1], P.bMin[2], step[0], step[1], step[2], R, R, R, 0, -1, 0, R - 1, 0, R - 1, 0, R - 1]);
1105
+ info = { mode: "full", voxels: total, total };
1106
+ let entry = null;
1107
+ if (useCache) {
1108
+ entry = takeSlot(request.key);
1109
+ params[10] = entry.slot;
1110
+ const sameGrid = entry.res === R && entry.bMin.every((v, i) => v === P.bMin[i]) && entry.bSize.every((v, i) => v === P.bSize[i]);
1111
+ const box = sameGrid ? dirtyBox(entry, P, R, step) : null;
1112
+ if (box === "none") {
1113
+ params.set([0, -1, 0, -1, 0, -1], 11);
1114
+ info = { mode: "none", voxels: 0, total };
1115
+ } else if (box) {
1116
+ params.set(box, 11);
1117
+ info = { mode: "region", voxels: (box[1] - box[0] + 1) * (box[3] - box[2] + 1) * (box[5] - box[4] + 1), total };
1118
+ }
1119
+ }
1120
+ const raw = core.mesh(P.table, P.count, params, null);
1121
+ if (entry) {
1122
+ entry.res = R;
1123
+ entry.bMin = P.bMin;
1124
+ entry.bSize = P.bSize;
1125
+ entry.table = P.table;
1126
+ entry.count = P.count;
1127
+ }
1128
+ const b = raw.bounds;
1129
+ return {
1130
+ key: request.key,
1131
+ positions: raw.positions,
1132
+ normals: raw.normals,
1133
+ colors: raw.colors,
1134
+ foundation: raw.foundation,
1135
+ material: raw.material,
1136
+ indices: raw.indices,
1137
+ boundsMin: { x: b[0], y: b[1], z: b[2] },
1138
+ boundsMax: { x: b[3], y: b[4], z: b[5] },
1139
+ ms: now() - t0,
1140
+ ...P.overflow ? { overflow: P.overflow } : {}
1141
+ };
1142
+ },
1143
+ skinWeights(request) {
1144
+ const segs = [];
1145
+ request.bones.forEach((bone, bi) => {
1146
+ const h = bone.head;
1147
+ if (!bone.childHeads.length) segs.push(h.x, h.y, h.z, h.x, h.y, h.z, bi);
1148
+ else for (const c of bone.childHeads) segs.push(h.x, h.y, h.z, c.x, c.y, c.z, bi);
1149
+ });
1150
+ const raw = core.skin(request.positions, Float64Array.from(segs), segs.length / SEGMENT_STRIDE, request.bones.length);
1151
+ return { key: request.key, boneIndices: raw.boneIndices, boneWeights: raw.boneWeights };
1152
+ },
1153
+ forget(key) {
1154
+ chunked.delete(key);
1155
+ const e = cache.get(key);
1156
+ if (!e) return;
1157
+ cache.delete(key);
1158
+ core.dropSlot(e.slot);
1159
+ freeSlots.push(e.slot);
1160
+ },
1161
+ lastInfo: () => info
1162
+ };
1163
+ }
1164
+
1165
+ // dreamy:inline-worker
1166
+ var code = '"use strict";(()=>{var YA=Uint8Array.fromBase64||(()=>{for(var A=new Uint8Array(128),t=0;t<64;t++)A[t<26?t+65:t<52?t+71:t<62?t-4:t*4-205]=t;return e=>{for(var n=e.length,s=new Uint8Array((n-(e[n-1]=="=")-(e[n-2]=="="))*3/4|0),y=0,r=0;y<n;){var i=A[e.charCodeAt(y++)],o=A[e.charCodeAt(y++)],m=A[e.charCodeAt(y++)],c=A[e.charCodeAt(y++)];s[r++]=i<<2|o>>4,s[r++]=o<<4|m>>2,s[r++]=m<<6|c}return s}})();var QA=YA("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");var TA={cube:0,sphere:1,cylinder:2,torus:3,cone:4,pyramid:5,prism:6,octahedron:7,capsule:8,dome:9},At={add:0,subtract:1,intersect:2,paint:3},EA=7;function JA(A){let t=()=>new Float32Array(A);return{field:t(),cR:t(),cG:t(),cB:t(),fR:t(),fG:t(),fB:t(),mat:new Float32Array(A*4)}}var MA=(A,t)=>A<t?A:t,O=(A,t)=>A>t?A:t,$A=A=>O(0,MA(1,A)),AA=Math.fround;function Ft(A,t,e,n,s,y,r){if(A===0){let j=Math.abs(t)-s,d=Math.abs(e)-y,a=Math.abs(n)-r,u=O(j,0),f=O(d,0),l=O(a,0),b=Math.sqrt(u*u+f*f+l*l),h=MA(O(j,O(d,a)),0);return b+h}let i=t/s,o=e/y,m=n/r,c=MA(MA(s,y),r);switch(A){case 1:return(Math.sqrt(i*i+o*o+m*m)-1)*c;case 2:{let j=(Math.sqrt(i*i+m*m)-1)*MA(s,r),d=Math.abs(e)-y,a=O(j,0),u=O(d,0);return MA(O(j,d),0)+Math.sqrt(a*a+u*u)}case 3:{let j=Math.sqrt(i*i+m*m)-.8;return(Math.sqrt(j*j+o*o)-.3)*c}case 4:{let j=Math.sqrt(i*i+m*m),d=o,a=j-MA(j,d<0?1:0),u=Math.abs(d)-1,f=O(0,MA(1,(j+2-2*d)/5)),l=j-f,b=d-1+2*f;return(l<0&&u<0?-1:1)*Math.sqrt(MA(a*a+u*u,l*l+b*b))*c}case 5:return O(O((2*Math.abs(i)+o-1)/2.236068,(2*Math.abs(m)+o-1)/2.236068),-o-1)*c;case 6:return O(O((2*Math.abs(i)+o-1)/2.236068,-o-1),Math.abs(m)-1)*c;case 7:return(Math.abs(i)+Math.abs(o)+Math.abs(m)-1)/1.7320508*c;case 8:{let j=Math.sqrt(i*i+m*m),d=O(Math.abs(o)-.5,0)/.5;return(Math.sqrt(j*j+d*d)-1)*c*.5}case 9:{let j=Math.sqrt(i*i+(o+1)*(o+1)+m*m)-1;return O(j,-(o+1))*c}default:return 1e5}}function tt(A,t,e,n,s,y,r,i,o,m,c,j,d,a,u,f,l){let{field:b,cR:h,cG:M,cB:x,fR:k,fG:F,fB:D,mat:N}=e,L=t.length,P=32;for(let I=f;I<=l;I++){let H=i+I*c;for(let q=a;q<=u;q++){let R=r+q*m;for(let fA=j;fA<=d;fA++){let FA=y+fA*o,oA=fA+q*n+I*n*s,v=1e5,J=A[20],B=A[21],g=A[22],V=A[23],W=A[24],U=A[25],X=A[26],Z=A[27],Y=A[28],S=A[29];for(let K=0;K<L;K++){let Q=t[K],E=Q*P,G=A[E+1],w=A[E+17],jA=FA-A[E+2],tA=R-A[E+3],eA=H-A[E+4];if(Q>0){let p=Math.sqrt(jA*jA+tA*tA+eA*eA)-A[E+18];if(p>0&&(p*=A[E+19]),G===0&&p-v>=w||G===1&&p+v>=w||G===3&&p>=w*.5)continue}let DA=A[E+5]*jA+A[E+6]*tA+A[E+7]*eA,SA=A[E+8]*jA+A[E+9]*tA+A[E+10]*eA,xA=A[E+11]*jA+A[E+12]*tA+A[E+13]*eA,$=Ft(A[E],DA,SA,xA,A[E+14],A[E+15],A[E+16]);if(Q>0){let p=O(w,1e-4);if(G===0?$-v>=p:G===1&&$+v>=p)continue}let nA=A[E+20],T=A[E+21],rA=A[E+22],dA=A[E+23],cA=A[E+24],uA=A[E+25],yA=A[E+26],bA=A[E+27],hA=A[E+28],pA=A[E+29],z=A[E+30];if(G===0)if(Q===0)v=$,J=nA,B=T,g=rA,V=dA,W=cA,U=uA;else{let p=$A(.5+.5*($-v)/O(w,1e-4));J=nA+(J-nA)*p,B=T+(B-T)*p,g=rA+(g-rA)*p,V=dA+(V-dA)*p,W=cA+(W-cA)*p,U=uA+(U-uA)*p,v=$*(1-p)+v*p-w*p*(1-p),X=AA(yA+(X-yA)*p),Z=AA(bA+(Z-bA)*p),Y=AA(hA+(Y-hA)*p),S=AA(pA+(S-pA)*p)}else if(G===1){let p=$A(.5-.5*($+v)/O(w,1e-4));J=J+(nA-J)*p,B=B+(T-B)*p,g=g+(rA-g)*p,V=V+(dA-V)*p,W=W+(cA-W)*p,U=U+(uA-U)*p,v=v*(1-p)-$*p+w*p*(1-p),z!==0&&(z&1&&(X=AA(X+(yA-X)*p)),z&2&&(Z=AA(Z+(bA-Z)*p)),z&4&&(Y=AA(Y+(hA-Y)*p)),z&8&&(S=AA(S+(pA-S)*p)))}else if(G===2){let p=$A(.5-.5*($-v)/O(w,1e-4));J=nA+(J-nA)*p,B=T+(B-T)*p,g=rA+(g-rA)*p,V=dA+(V-dA)*p,W=cA+(W-cA)*p,U=uA+(U-uA)*p,v=$*(1-p)+v*p+w*p*(1-p),z!==0&&(z&1&&(X=AA(yA+(X-yA)*p)),z&2&&(Z=AA(bA+(Z-bA)*p)),z&4&&(Y=AA(hA+(Y-hA)*p)),z&8&&(S=AA(pA+(S-pA)*p)))}else if(G===3&&$<w*.5){let p=$A(1-$/O(w*.5,.05));J=J+(nA-J)*p,B=B+(T-B)*p,g=g+(rA-g)*p,V=V+(dA-V)*p,W=W+(cA-W)*p,U=U+(uA-U)*p,z!==0&&(z&1&&(X=AA(X+(yA-X)*p)),z&2&&(Z=AA(Z+(bA-Z)*p)),z&4&&(Y=AA(Y+(hA-Y)*p)),z&8&&(S=AA(S+(pA-S)*p)))}}b[oA]=v,h[oA]=J,M[oA]=B,x[oA]=g,k[oA]=V,F[oA]=W,D[oA]=U;let C=oA*4;N[C]=X,N[C+1]=Z,N[C+2]=Y,N[C+3]=S}}}}var RA=[0,1,0,1,0,1,0,1],KA=[0,0,1,1,0,0,1,1],GA=[0,0,0,0,1,1,1,1],St=[0,2,4,6,0,1,4,5,0,1,2,3],gt=[1,3,5,7,2,3,6,7,4,5,6,7];function et(A,t,e,n,s,y,r,i,o,m,c){let{field:j,cR:d,cG:a,cB:u,fR:f,fG:l,fB:b,mat:h}=A,M=[],x=[],k=[],F=[],D=[],N=[],L=t-1,P=e-1,I=n-1,H=new Int32Array(Math.max(0,L*P*I)).fill(-1),q=new Float64Array(8),R=new Int32Array(8),fA=0;for(let S=0;S<I;S++)for(let C=0;C<P;C++)for(let K=0;K<L;K++){let Q=0;for(let aA=0;aA<8;aA++){let mA=K+RA[aA]+(C+KA[aA])*t+(S+GA[aA])*t*e;R[aA]=mA;let kA=j[mA];q[aA]=kA,kA<0&&(Q|=1<<aA)}if(Q===0||Q===255)continue;let E=0,G=0,w=0,jA=0,tA=0,eA=0,DA=0,SA=0,xA=0,$=0,nA=0,T=0,rA=0,dA=0;for(let aA=0;aA<12;aA++){let mA=St[aA],kA=gt[aA],NA=q[mA],ZA=q[kA];if(NA<0==ZA<0)continue;let lA=NA/(NA-ZA);E+=RA[mA]+lA*(RA[kA]-RA[mA]),G+=KA[mA]+lA*(KA[kA]-KA[mA]),w+=GA[mA]+lA*(GA[kA]-GA[mA]);let iA=R[mA],IA=R[kA];jA+=d[iA]+lA*(d[IA]-d[iA]),tA+=a[iA]+lA*(a[IA]-a[iA]),eA+=u[iA]+lA*(u[IA]-u[iA]),DA+=f[iA]+lA*(f[IA]-f[iA]),SA+=l[iA]+lA*(l[IA]-l[iA]),xA+=b[iA]+lA*(b[IA]-b[iA]);let qA=iA*4,CA=IA*4;nA+=h[qA]+lA*(h[CA]-h[qA]),T+=h[qA+1]+lA*(h[CA+1]-h[qA+1]),rA+=h[qA+2]+lA*(h[CA+2]-h[qA+2]),dA+=h[qA+3]+lA*(h[CA+3]-h[qA+3]),$++}let cA=q[0],uA=q[1],yA=q[2],bA=q[3],hA=q[4],pA=q[5],z=q[6],p=q[7],LA=(uA-cA+(bA-yA)+(pA-hA)+(p-z))/i,PA=(yA-cA+(bA-uA)+(z-hA)+(p-pA))/o,HA=(hA-cA+(pA-uA)+(z-yA)+(p-bA))/m,OA=Math.sqrt(LA*LA+PA*PA+HA*HA);OA>1e-12?x.push(LA/OA,PA/OA,HA/OA):x.push(0,1,0);let sA=1/$;M.push(s+(K+E*sA)*i,y+(C+G*sA)*o,r+(S+w*sA)*m),k.push(jA*sA,tA*sA,eA*sA),F.push(DA*sA,SA*sA,xA*sA),D.push(nA*sA,T*sA,rA*sA,dA*sA),H[K+C*L+S*L*P]=fA++}let FA=[t,e,n],oA=[L,P,I],v=[1,L,L*P],J=[1,t,t*e],B=[0,0,0];for(let S=0;S<n;S++)for(let C=0;C<e;C++)for(let K=0;K<t;K++){B[0]=K,B[1]=C,B[2]=S;let Q=K+C*t+S*t*e;for(let E=0;E<3;E++){let G=(E+1)%3,w=(E+2)%3,jA=B[E],tA=B[G],eA=B[w];if(jA>=FA[E]-1||jA<c||tA<1||tA>oA[G]-1||eA<1||eA>oA[w]-1)continue;let DA=j[Q]<0,SA=j[Q+J[E]]<0;if(DA===SA)continue;let xA=jA*v[E],$=H[xA+(tA-1)*v[G]+(eA-1)*v[w]],nA=H[xA+tA*v[G]+(eA-1)*v[w]],T=H[xA+tA*v[G]+eA*v[w]],rA=H[xA+(tA-1)*v[G]+eA*v[w]];$<0||nA<0||T<0||rA<0||(DA?N.push($,nA,T,$,T,rA):N.push($,T,nA,$,rA,T))}}let g=Float32Array.from(M),V=0,W=0,U=0,X=0,Z=0,Y=0;if(g.length>0){V=X=g[0],W=Z=g[1],U=Y=g[2];for(let S=3;S<g.length;S+=3){let C=g[S],K=g[S+1],Q=g[S+2];C<V&&(V=C),C>X&&(X=C),K<W&&(W=K),K>Z&&(Z=K),Q<U&&(U=Q),Q>Y&&(Y=Q)}}return{positions:g,normals:Float32Array.from(x),colors:Float32Array.from(k),foundation:Float32Array.from(F),material:Float32Array.from(D),indices:Uint32Array.from(N),bounds:[V,W,U,X,Z,Y]}}var Bt=.08;function nt(A,t,e,n){let s=Math.floor(A.length/3),y=new Float32Array(s*4),r=new Float32Array(s*4);if(n===0)return{boneIndices:y,boneWeights:r};let i=new Float32Array(n);for(let o=0;o<s;o++){let m=A[o*3],c=A[o*3+1],j=A[o*3+2];i.fill(1/0);for(let a=0;a<e;a++){let u=a*EA,f=t[u],l=t[u+1],b=t[u+2],h=t[u+3]-f,M=t[u+4]-l,x=t[u+5]-b,k=t[u+6],F=m-f,D=c-l,N=j-b,L=h*h+M*M+x*x,P=L>1e-8?(F*h+D*M+N*x)/L:0;P=P<0?0:P>1?1:P;let I=F-h*P,H=D-M*P,q=N-x*P,R=I*I+H*H+q*q;R<i[k]&&(i[k]=R)}let d=0;for(let a=0;a<4;a++){let u=-1,f=1/0;for(let h=0;h<n;h++)i[h]<f&&(f=i[h],u=h);if(u<0){y[o*4+a]=0,r[o*4+a]=0;continue}let l=f+Bt,b=1/(l*l);y[o*4+a]=u,r[o*4+a]=b,d+=b,i[u]=1/0}for(let a=0;a<4;a++)r[o*4+a]=r[o*4+a]/d}return{boneIndices:y,boneWeights:r}}function rt(){let A=new Map,t=new Map;return{kind:"reference",mesh(e,n,s,y){let r=s[6],i=s[7],o=s[8],m=r*i*o,c=s[10],j,d=!0;c>=0?(j=A.get(c),j&&j.field.length===m?d=!1:(j=JA(m),A.set(c,j))):(j=t.get(m),j||(j=JA(m),t.set(m,j)));let a=y;if(!a||a.length===0){a=new Int32Array(n);for(let f=0;f<n;f++)a[f]=f}let u=d?[0,r-1,0,i-1,0,o-1]:[s[11],s[12],s[13],s[14],s[15],s[16]];return n>0?tt(e,a,j,r,i,s[0],s[1],s[2],s[3],s[4],s[5],u[0],u[1],u[2],u[3],u[4],u[5]):j.field.fill(1e5),et(j,r,i,o,s[0],s[1],s[2],s[3],s[4],s[5],s[9])},dropSlot(e){A.delete(e)},skin(e,n,s,y){return nt(e,n,s,y)}}}function wt(A){let t=A.exports,e=0,n=0,s=r=>(r>n&&(e&&t.free(e,n),n=Math.max(r,n*2,4096),e=t.alloc(n)),e),y=r=>r+7&-8;return{kind:"wasm",mesh(r,i,o,m){let c=y(i*32*8),j=136,d=m?m.length:0,a=s(c+j+d*4),u=t.memory.buffer;new Float64Array(u,a,i*32).set(r.subarray(0,i*32)),new Float64Array(u,a+c,17).set(o.subarray(0,17)),m&&d&&new Int32Array(u,a+c+j,d).set(m);let f=t.mesh(a,i,a+c,a+c+j,d),l=t.memory.buffer,b=new Uint32Array(l,f,16),h=b[0],M=b[1],x=(F,D)=>new Float32Array(l,F,D).slice(),k=new Float32Array(l,f+32,6);return{positions:x(b[2],h*3),normals:x(b[3],h*3),colors:x(b[4],h*3),foundation:x(b[5],h*3),material:x(b[6],h*4),indices:new Uint32Array(l,b[7],M).slice(),bounds:[k[0],k[1],k[2],k[3],k[4],k[5]]}},dropSlot(r){t.drop_slot(r)},skin(r,i,o,m){let c=Math.floor(r.length/3),j=y(c*3*4),d=s(j+o*EA*8),a=t.memory.buffer;new Float32Array(a,d,c*3).set(r.subarray(0,c*3)),new Float64Array(a,d+j,o*EA).set(i.subarray(0,o*EA));let u=t.skin(d,c,d+j,o,m),f=t.memory.buffer;return{boneIndices:new Float32Array(f,u,c*4).slice(),boneWeights:new Float32Array(f,u+c*16,c*4).slice()}}}}async function ot(A){let{instance:t}=await WebAssembly.instantiate(A,{});return wt(t)}var Ot=8,Ct=144,BA=16,$t=3,st=20,Rt=.25,at={nV:0,pos:new Float32Array(0),nor:new Float32Array(0),col:new Float32Array(0),fcol:new Float32Array(0),mat:new Float32Array(0),idx:new Uint32Array(0)};function lt(A,t){return Math.max(A.bSize[0],A.bSize[1],A.bSize[2])>=Ot*(t?.8:1)}function Kt(A){let t=Math.floor(Math.log10(A)),e=A/Math.pow(10,t);for(let n of[1,1.25,1.5,2,2.5,3,4,5,6,8,10])if(e<=n+1e-9)return n*Math.pow(10,t);return 10*Math.pow(10,t)}function VA(A,t){let e=new Float64Array(t+1);for(let n=t-1;n>=0;n--)e[n]=Math.max(e[n+1],A[n*32+17]);return e}function Gt(A,t,e,n){let s=Math.min(t,n),y=[],r=[];for(let d=0;d<s;d++){let a=d*32;for(let u=0;u<32;u++)if(A[a+u]!==e[a+u]){y.push(d),r.push(d);break}}for(let d=s;d<t;d++)y.push(d);for(let d=s;d<n;d++)r.push(d);let i=[],o=!1,m=(d,a,u)=>{let f=u*32,l=d[f+1],b=d[f+17];if(l===2||l>3){o=!0;return}let h=l===3?.5*b:b+a[u+1],M=1.25/Math.max(d[f+19],.02),x=d[f+18]+h*M,k=d[f+2],F=d[f+3],D=d[f+4];i.push([k-x,F-x,D-x,k+x,F+x,D+x,3*M])},c=VA(A,t),j=VA(e,n);for(let d of y)m(A,c,d);for(let d of r)m(e,j,d);return o?null:i}function zt(A,t,e,n,s,y){let r=[],i=!1;for(let o=0;o<t;o++){let m=o*32,c=A[m+1],j=!0;if(c===0||c===3){let d=c===3?.5*A[m+17]:A[m+17]+e[o+1],a=A[m+18]+(d+3*y)*1.25/Math.max(A[m+19],.02),u=A[m+2],f=A[m+3],l=A[m+4],b=Math.max(n[0]-u,0,u-s[0]),h=Math.max(n[1]-f,0,f-s[1]),M=Math.max(n[2]-l,0,l-s[2]);j=b*b+h*h+M*M<=a*a}c===0&&j&&(i=!0),(j||o===0)&&r.push(o)}return i?Int32Array.from(r):null}function _t(A,t,e,n,s,y){let r=t.h0,i=1<<y,o=BA>>y,m=i*r,c=o+2,j=(s.i*BA-i)*r,d=(s.j*BA-i)*r,a=(s.k*BA-i)*r,u=t.W,f=2*m,l=zt(e.table,e.count,n,[s.i*u-f,s.j*u-f,s.k*u-f],[(s.i+1)*u+f,(s.j+1)*u+f,(s.k+1)*u+f],m);if(!l)return at;let b=new Float64Array(17);b.set([j,d,a,m,m,m,c,c,c,1,-1,0,c-1,0,c-1,0,c-1]);let h=A.mesh(e.table,e.count,b,l);return h.indices.length?{nV:h.positions.length/3,pos:h.positions.slice(),nor:h.normals.slice(),col:h.colors.slice(),fcol:h.foundation.slice(),mat:h.material.slice(),idx:h.indices.slice()}:at}function Lt(A,t){let e=A.idx,n=new Map,s=(u,f)=>u<f?u*A.nV+f:f*A.nV+u;for(let u=0;u<e.length;u+=3)for(let f=0;f<3;f++){let l=s(e[u+f],e[u+(f+1)%3]);n.set(l,(n.get(l)??0)+1)}let y=[];for(let u=0;u<e.length;u+=3)for(let f=0;f<3;f++){let l=e[u+f],b=e[u+(f+1)%3];n.get(s(l,b))===1&&y.push(l,b)}let r=y.length/2;if(!r)return null;let i=r*4,o=new Float32Array(i*3),m=new Float32Array(i*3),c=new Float32Array(i*3),j=new Float32Array(i*3),d=new Float32Array(i*4),a=new Uint32Array(r*12);for(let u=0;u<r;u++){let f=y[u*2],l=y[u*2+1],b=u*4;[f,l,l,f].forEach((h,M)=>{let x=(b+M)*3,k=h*3,F=M>=2?t:0;for(let D=0;D<3;D++)o[x+D]=A.pos[k+D]-A.nor[k+D]*F,m[x+D]=A.nor[k+D],c[x+D]=A.col[k+D],j[x+D]=A.fcol[k+D];for(let D=0;D<4;D++)d[(b+M)*4+D]=A.mat[h*4+D]}),a.set([b,b+1,b+2,b,b+2,b+3,b,b+2,b+1,b,b+3,b+2],u*12)}return{nV:i,pos:o,nor:m,col:c,fcol:j,mat:d,idx:a}}function Pt(A,t,e){let n=A.W,s=e.camera,y=Math.max(t.i*n-s.x,0,s.x-(t.i+1)*n),r=Math.max(t.j*n-s.y,0,s.y-(t.j+1)*n),i=Math.max(t.k*n-s.z,0,s.z-(t.k+1)*n),o=Math.max(Math.sqrt(y*y+r*r+i*i),.001),m=d=>A.h0*(1<<d)*e.pixelsPerUnitAtDistance1/o,c=0;for(let d=$t-1;d>=0;d--)if(m(d)<=st){c=d;break}let j=t.level;return j===null||c<=j||m(c)*(1+Rt)<=st?c:j}function Ht(A,t,e){let n=0;for(let s=-1;s<=1;s++)for(let y=-1;y<=1;y++)for(let r=-1;r<=1;r++){if(!s&&!y&&!r)continue;let i=A.chunks.get(`${t.i+s},${t.j+y},${t.k+r}`);if(!i||i.level===null||i.level===t.level)continue;let o=i.meshes.get(i.level);!o||!o.nV||(n=Math.max(n,A.h0*(1<<Math.max(i.level,t.level??0))))}return n?(t.skirt&&t.skirtDepth===n&&t.skirtOf===e||(t.skirt=Lt(e,n),t.skirtDepth=n,t.skirtOf=e),t.skirt):null}function Nt(A){let t=[],e=0,n=0;for(let f of A.chunks.values()){let l=f.level===null?null:f.meshes.get(f.level);if(!l||!l.nV)continue;t.push(l),e+=l.nV,n+=l.idx.length;let b=Ht(A,f,l);b&&(t.push(b),e+=b.nV,n+=b.idx.length)}let s=new Float32Array(e*3),y=new Float32Array(e*3),r=new Float32Array(e*3),i=new Float32Array(e*3),o=new Float32Array(e*4),m=new Uint32Array(n),c=0,j=0,d=[1/0,1/0,1/0],a=[-1/0,-1/0,-1/0];for(let f of t){s.set(f.pos,c*3),y.set(f.nor,c*3),r.set(f.col,c*3),i.set(f.fcol,c*3),o.set(f.mat,c*4);for(let l=0;l<f.idx.length;l++)m[j+l]=f.idx[l]+c;c+=f.nV,j+=f.idx.length}for(let f=0;f<s.length;f+=3)for(let l=0;l<3;l++)d[l]=Math.min(d[l],s[f+l]),a[l]=Math.max(a[l],s[f+l]);let u=e?[d[0],d[1],d[2],a[0],a[1],a[2]]:[0,0,0,0,0,0];return{nV:e,pos:s,nor:y,col:r,fcol:i,mat:o,idx:m,bounds:u,chunks:A.chunks.size}}function it(A,t,e,n){let s=Math.max(e.bSize[0],e.bSize[1],e.bSize[2]),y=Kt(s/Ct),r=BA*y,i=t;(!i||i.h0!==y)&&(i={h0:y,W:r,chunks:new Map,table:new Float64Array(0),count:0});let o=i.count?Gt(i.table,i.count,e.table,e.count):null;i.table=e.table,i.count=e.count;let m=VA(e.table,e.count),c=[0,1,2].map(a=>Math.floor(e.bMin[a]/r)),j=[0,1,2].map(a=>Math.ceil((e.bMin[a]+e.bSize[a])/r)-1),d=new Set;for(let a=c[2];a<=j[2];a++)for(let u=c[1];u<=j[1];u++)for(let f=c[0];f<=j[0];f++){let l=`${f},${u},${a}`;d.add(l),i.chunks.has(l)||i.chunks.set(l,{i:f,j:u,k:a,level:null,meshes:new Map,skirt:null,skirtDepth:0,skirtOf:null})}for(let a of[...i.chunks.keys()])d.has(a)||i.chunks.delete(a);for(let a of i.chunks.values())for(let u of[...a.meshes.keys()]){let f=o===null;if(!f){let l=y*(1<<u);f=o.some(b=>{let h=(2+b[6])*l;return b[0]<=(a.i+1)*r+h&&b[3]>=a.i*r-h&&b[1]<=(a.j+1)*r+h&&b[4]>=a.j*r-h&&b[2]<=(a.k+1)*r+h&&b[5]>=a.k*r-h})}f&&(a.meshes.delete(u),a.skirt=null)}for(let a of i.chunks.values()){let u=Pt(i,a,n);a.meshes.has(u)||a.meshes.set(u,_t(A,i,e,m,a,u));let f=a.level;a.level=u;for(let l of[...a.meshes.keys()])l!==u&&l!==f&&a.meshes.delete(l)}return{state:i,out:Nt(i)}}var Jt={tongue:16021135,teeth:16514042,black:1118481},Vt=16711935;function Wt(A,t){if(A==="tongue"||A==="teeth"||A==="black")return Jt[A];let e=t[A];return typeof e=="number"?e:Vt}function WA(A,t){let e=Wt(A,t);return[(e>>16&255)/255,(e>>8&255)/255,(e&255)/255]}var zA=[1,0,0,0,1,0,0,0,1];function _A(A){let t=Math.sqrt(A.x*A.x+A.y*A.y+A.z*A.z+A.w*A.w)||1,e=A.x/t,n=A.y/t,s=A.z/t,y=A.w/t,r=e+e,i=n+n,o=s+s,m=e*r,c=e*i,j=e*o,d=n*i,a=n*o,u=s*o,f=y*r,l=y*i,b=y*o;return[1-(d+u),c-b,j+l,c+b,1-(m+u),a-f,j-l,a+f,1-(m+d)]}function jt(A,t,e,n){let s=Math.cos(n),y=Math.sin(n),r=1-s,i=r*A,o=r*t;return[i*A+s,i*t-y*e,i*e+y*t,i*t+y*e,o*t+s,o*e-y*A,i*e-y*t,o*e+y*A,r*e*e+s]}function wA(A,t,e){return[A,0,0,0,t,0,0,0,e]}function gA(A,t){let e=[];for(let n=0;n<3;n++)for(let s=0;s<3;s++)e.push(A[n*3]*t[s]+A[n*3+1]*t[3+s]+A[n*3+2]*t[6+s]);return e}function ct(A){return[A[0],A[3],A[6],A[1],A[4],A[7],A[2],A[5],A[8]]}function ut(A){return A[0]*(A[4]*A[8]-A[5]*A[7])-A[1]*(A[3]*A[8]-A[5]*A[6])+A[2]*(A[3]*A[7]-A[4]*A[6])}function mt(A,t,e,n){return[A[0]*t+A[1]*e+A[2]*n,A[3]*t+A[4]*e+A[5]*n,A[6]*t+A[7]*e+A[8]*n]}function ft(A,t){let e=A.smearGroupId===void 0?void 0:t.smearGroups.find(s=>s.id===A.smearGroupId),n=t.look;return e?{mode:e.mode,blend:e.blend,color:e.color,foundationColor:e.foundationColor??e.color,material:A.material??{},symmetry:e.symmetry}:{mode:A.mode,blend:A.blend??n.blend,color:A.color??n.color,foundationColor:A.foundationColor??(A.color!==void 0?A.color:n.foundationColor),material:A.material??{},symmetry:A.symmetry}}var Ut=12,Xt=128,yt=1024,bt=["x","y","z"],Zt={x:[1,0,0],y:[0,1,0],z:[0,0,1]},Yt={x:wA(-1,1,1),y:wA(1,-1,1),z:wA(1,1,-1)},Qt=wA(-1,1,1);function ht(A){return bt.filter(t=>(A??[]).includes(t))}function pt(A,t){let e=Math.max(1,Math.min(Ut,Math.round(A)||1)),n=ht(t).length;for(;n>0&&e>1&&Math.pow(e,n)>Xt;)e--;return e}var Tt=A=>A.every((t,e)=>Math.abs(t-zA[e])<=1e-6),dt=new Map;function Ae(A,t){let e=ht(t),n=A+"|"+e.join(""),s=dt.get(n);if(s)return s;let y=e.length?e:A>1?["y"]:[],r=y.length?[zA]:[];for(let m of bt){if(!y.includes(m))continue;let c=[];if(A===2)c.push(zA,Yt[m]);else{let d=Zt[m];for(let a=0;a<A;a++)c.push(jt(d[0],d[1],d[2],a*Math.PI*2/A))}let j=[];for(let d of r)for(let a of c)j.push(gA(d,a));r=j}let i=new Set,o=[];for(let m of r){if(Tt(m))continue;let c=m.map(j=>Math.round(j*1e5)).join(",");i.has(c)||(i.add(c),o.push(m))}return dt.set(n,o),o}function xt(A,t,e,n,s){let y=_A(e.rotation),r=ct(y),i=e.position;return Ae(n,s).map(o=>{let m=gA(gA(y,o),r),c=mt(m,A.x-i.x,A.y-i.y,A.z-i.z),j=gA(m,t);return ut(m)<0&&(j=gA(j,Qt)),{position:[i.x+c[0],i.y+c[1],i.z+c[2]],rotation:j}})}var te=4,ee=128;function Mt(A){return Math.max(te,Math.min(ee,Math.round(A)||36))}function ne(A,t,e,n){if(A==="sphere")return Math.max(t,e,n);if(A==="cylinder"){let s=Math.max(t,n);return Math.sqrt(s*s+e*e)}if(A==="torus"){let s=1.1*Math.max(t,n),y=.3*e;return Math.sqrt(s*s+y*y)}return Math.sqrt(t*t+e*e+n*n)}function kt(A,t){let e=[],n=A.stamps.map(l=>ft(l,A)),s=0;A.stamps.forEach((l,b)=>{let h=_A(l.rotation),M={shape:l.shape,sx:l.scale.x,sy:l.scale.y,sz:l.scale.z,si:b};e.push({...M,pos:[l.position.x,l.position.y,l.position.z],rot:h});let x=n[b].symmetry,k=pt(x?.count??1,x?.axes);for(let F of xt(l.position,h,A.pivot,k,x?.axes)){if(e.length>=yt){s++;continue}e.push({...M,pos:F.position,rot:F.rotation})}});let y=e.length,r=new Float64Array(y*32),i=A.look.material,o=[i.roughness,i.metalness,i.glow,1],m=[1/0,1/0,1/0],c=[-1/0,-1/0,-1/0],j=-1/0;e.forEach((l,b)=>{let h=n[l.si],M=b*32,x=l.sx*.5,k=l.sy*.5,F=l.sz*.5;r[M]=TA[l.shape]??-1,r[M+1]=At[h.mode]??4,r[M+2]=l.pos[0],r[M+3]=l.pos[1],r[M+4]=l.pos[2];let D=l.rot;r[M+5]=D[0],r[M+6]=D[3],r[M+7]=D[6],r[M+8]=D[1],r[M+9]=D[4],r[M+10]=D[7],r[M+11]=D[2],r[M+12]=D[5],r[M+13]=D[8],r[M+14]=x,r[M+15]=k,r[M+16]=F,r[M+17]=h.blend,r[M+18]=ne(l.shape,x,k,F),r[M+19]=l.shape==="cube"?1:Math.min(x,k,F)/Math.max(x,k,F,1e-4);let N=WA(h.color,t),L=WA(h.foundationColor,t);r[M+20]=N[0],r[M+21]=N[1],r[M+22]=N[2],r[M+23]=L[0],r[M+24]=L[1],r[M+25]=L[2];let P=[h.material.roughness,h.material.metalness,h.material.glow,h.material.flecks===void 0?void 0:h.material.flecks?1:0],I=0;for(let q=0;q<4;q++){let R=P[q];R!==void 0&&(I|=1<<q),r[M+26+q]=Math.fround(R??o[q])}r[M+30]=I,j=Math.max(j,h.blend);let H=[l.sx*.7,l.sy*.7,l.sz*.7];for(let q=0;q<3;q++)m[q]=Math.min(m[q],l.pos[q]-H[q]),c[q]=Math.max(c[q],l.pos[q]+H[q])}),y===0&&(m=[0,0,0],c=[0,0,0],j=0);let d=[c[0]-m[0],c[1]-m[1],c[2]-m[2]],a=Math.max(Math.min(.6,.35*Math.max(d[0],d[1],d[2])),j*1.5),u=[m[0]-a,m[1]-a,m[2]-a],f=[c[0]+a,c[1]+a,c[2]+a];return{table:r,count:y,overflow:s,maxBlend:j,bMin:u,bSize:[f[0]-u[0],f[1]-u[1],f[2]-u[2]]}}var re=4,oe=.6,UA=()=>typeof performance<"u"?performance.now():Date.now();function qt(A,t){let e=new Float64Array(t+1);for(let n=t-1;n>=0;n--)e[n]=Math.max(e[n+1],A[n*32+17]);return e}function se(A,t,e,n){let s=A.count,y=t.count,r=Math.min(s,y),i=[],o=[];for(let I=0;I<r;I++){let H=I*32;for(let q=0;q<32;q++)if(A.table[H+q]!==t.table[H+q]){i.push(I),o.push(I);break}}for(let I=r;I<s;I++)i.push(I);for(let I=r;I<y;I++)o.push(I);let m=Math.max(n[0],n[1],n[2]),[c,j,d]=t.bMin,[a,u,f]=t.bSize,l=1/0,b=1/0,h=1/0,M=-1/0,x=-1/0,k=-1/0,F=!1,D=(I,H,q)=>{let R=q*32,fA=I[R+1],FA=I[R+17];if(fA===2||fA>3){F=!0;return}let oA=fA===3?.5*FA:FA+H[q+1],v=I[R+18]+(oA+3*m)*1.25/Math.max(I[R+19],.02);if(!(v<4*a+4*u+4*f)){F=!0;return}let J=I[R+2],B=I[R+3],g=I[R+4];l=Math.min(l,Math.floor((J-v-c)/n[0])),M=Math.max(M,Math.ceil((J+v-c)/n[0])),b=Math.min(b,Math.floor((B-v-j)/n[1])),x=Math.max(x,Math.ceil((B+v-j)/n[1])),h=Math.min(h,Math.floor((g-v-d)/n[2])),k=Math.max(k,Math.ceil((g+v-d)/n[2]))},N=qt(A.table,s),L=qt(t.table,y);for(let I of i)D(A.table,N,I);for(let I of o)D(t.table,L,I);return F?null:l===1/0?"none":(l=Math.max(0,l),b=Math.max(0,b),h=Math.max(0,h),M=Math.min(e-1,M),x=Math.min(e-1,x),k=Math.min(e-1,k),Math.max(0,M-l+1)*Math.max(0,x-b+1)*Math.max(0,k-h+1)>oe*e*e*e?null:[l,M,b,x,h,k])}function XA(A,t={}){let e=t.cache??!0,n=new Map,s=[];for(let o=re-1;o>=0;o--)s.push(o);let y={mode:"full",voxels:0,total:0},r=new Map,i=o=>{let m=n.get(o);if(m)return n.delete(o),n.set(o,m),m;if(!s.length){let[c,j]=n.entries().next().value;n.delete(c),A.dropSlot(j.slot),s.push(j.slot)}return m={slot:s.pop(),res:-1,bMin:[NaN,NaN,NaN],bSize:[NaN,NaN,NaN],table:new Float64Array(0),count:0},n.set(o,m),m};return{core:A,mesh(o){let m=UA(),c=Mt(o.resolution),j=kt(o.sculpt,o.palette),d=r.get(o.key)??null;if(o.view&&lt(j,d!==null)){let{state:M,out:x}=it(A,d,j,o.view);r.set(o.key,M),y={mode:"chunks",voxels:x.chunks,total:x.chunks};let k=x.bounds;return{key:o.key,positions:x.pos,normals:x.nor,colors:x.col,foundation:x.fcol,material:x.mat,indices:x.idx,boundsMin:{x:k[0],y:k[1],z:k[2]},boundsMax:{x:k[3],y:k[4],z:k[5]},ms:UA()-m,...j.overflow?{overflow:j.overflow}:{}}}r.delete(o.key);let a=[j.bSize[0]/(c-1),j.bSize[1]/(c-1),j.bSize[2]/(c-1)],u=c*c*c,f=new Float64Array(17);f.set([j.bMin[0],j.bMin[1],j.bMin[2],a[0],a[1],a[2],c,c,c,0,-1,0,c-1,0,c-1,0,c-1]),y={mode:"full",voxels:u,total:u};let l=null;if(e){l=i(o.key),f[10]=l.slot;let x=l.res===c&&l.bMin.every((k,F)=>k===j.bMin[F])&&l.bSize.every((k,F)=>k===j.bSize[F])?se(l,j,c,a):null;x==="none"?(f.set([0,-1,0,-1,0,-1],11),y={mode:"none",voxels:0,total:u}):x&&(f.set(x,11),y={mode:"region",voxels:(x[1]-x[0]+1)*(x[3]-x[2]+1)*(x[5]-x[4]+1),total:u})}let b=A.mesh(j.table,j.count,f,null);l&&(l.res=c,l.bMin=j.bMin,l.bSize=j.bSize,l.table=j.table,l.count=j.count);let h=b.bounds;return{key:o.key,positions:b.positions,normals:b.normals,colors:b.colors,foundation:b.foundation,material:b.material,indices:b.indices,boundsMin:{x:h[0],y:h[1],z:h[2]},boundsMax:{x:h[3],y:h[4],z:h[5]},ms:UA()-m,...j.overflow?{overflow:j.overflow}:{}}},skinWeights(o){let m=[];o.bones.forEach((j,d)=>{let a=j.head;if(!j.childHeads.length)m.push(a.x,a.y,a.z,a.x,a.y,a.z,d);else for(let u of j.childHeads)m.push(a.x,a.y,a.z,u.x,u.y,u.z,d)});let c=A.skin(o.positions,Float64Array.from(m),m.length/EA,o.bones.length);return{key:o.key,boneIndices:c.boneIndices,boneWeights:c.boneWeights}},forget(o){r.delete(o);let m=n.get(o);m&&(n.delete(o),A.dropSlot(m.slot),s.push(m.slot))},lastInfo:()=>y}}function Et(A){return[A.positions.buffer,A.normals.buffer,A.colors.buffer,A.foundation.buffer,A.material.buffer,A.indices.buffer]}function Dt(A){return[A.boneIndices.buffer,A.boneWeights.buffer]}function It(A,t,e){let n=(y,r=[])=>A.postMessage(y,r),s=t().then(y=>(n({t:"ready",core:y.kind}),XA(y))).catch(y=>{let r=e();return n({t:"ready",core:r.kind,error:String(y)}),XA(r)});return A.onmessage=y=>{let r=y.data;s.then(i=>{if(r.t==="forget"){i.forget(r.key);return}try{if(r.t==="mesh"){let o=i.mesh(r.req);n({t:"mesh",id:r.id,res:o},Et(o))}else{let o=i.skinWeights(r.req);n({t:"skin",id:r.id,res:o},Dt(o))}}catch(o){n({t:"err",id:r.id,message:o instanceof Error?o.message:String(o)})}})},s}It(globalThis,()=>ot(QA),rt);})();\n';
1167
+ var url;
1168
+ function spawnWorker() {
1169
+ url ??= URL.createObjectURL(new Blob([code], { type: "text/javascript" }));
1170
+ return new Worker(url);
1171
+ }
1172
+
1173
+ // ../evaluator/src/worker/client.ts
1174
+ var AbortError = class extends Error {
1175
+ name = "AbortError";
1176
+ };
1177
+ function queuedEvaluator(backend, ready) {
1178
+ const pending = /* @__PURE__ */ new Map();
1179
+ let running = null;
1180
+ let disposed = false;
1181
+ const pump = () => {
1182
+ if (running || disposed) return;
1183
+ const next = pending.entries().next();
1184
+ if (next.done) return;
1185
+ const [id, job] = next.value;
1186
+ pending.delete(id);
1187
+ running = { id, job };
1188
+ backend().run(job).then(
1189
+ (res) => {
1190
+ if (job.dead) return;
1191
+ job.resolve(res);
1192
+ },
1193
+ (e) => {
1194
+ if (!job.dead) job.reject(e);
1195
+ }
1196
+ ).finally(() => {
1197
+ running = null;
1198
+ pump();
1199
+ });
1200
+ };
1201
+ const enqueue = (id, job) => {
1202
+ if (disposed) {
1203
+ job.reject(new AbortError("evaluator disposed"));
1204
+ return;
1205
+ }
1206
+ const old = pending.get(id);
1207
+ if (old) old.reject(new AbortError("superseded"));
1208
+ pending.set(id, job);
1209
+ pump();
1210
+ };
1211
+ return {
1212
+ ready,
1213
+ mesh(req) {
1214
+ return new Promise((resolve, reject) => enqueue("m:" + req.key, { kind: "mesh", req, resolve, reject, dead: false }));
1215
+ },
1216
+ skinWeights(req) {
1217
+ return new Promise((resolve, reject) => enqueue("s:" + req.key, { kind: "skin", req, resolve, reject, dead: false }));
1218
+ },
1219
+ cancel(key) {
1220
+ for (const id of ["m:" + key, "s:" + key]) {
1221
+ const job = pending.get(id);
1222
+ if (job) {
1223
+ pending.delete(id);
1224
+ job.reject(new AbortError("cancelled"));
1225
+ }
1226
+ if (running && running.id === id && !running.job.dead) {
1227
+ running.job.dead = true;
1228
+ running.job.reject(new AbortError("cancelled"));
1229
+ }
1230
+ }
1231
+ if (!disposed) backend().forget(key);
1232
+ },
1233
+ dispose() {
1234
+ if (disposed) return;
1235
+ disposed = true;
1236
+ for (const job of pending.values()) job.reject(new AbortError("evaluator disposed"));
1237
+ pending.clear();
1238
+ if (running && !running.job.dead) {
1239
+ running.job.dead = true;
1240
+ running.job.reject(new AbortError("evaluator disposed"));
1241
+ }
1242
+ backend().dispose();
1243
+ }
1244
+ };
1245
+ }
1246
+ function inlineBackend(session) {
1247
+ return {
1248
+ run: (job) => new Promise((resolve, reject) => {
1249
+ setTimeout(() => {
1250
+ try {
1251
+ resolve(job.kind === "mesh" ? session.mesh(job.req) : session.skinWeights(job.req));
1252
+ } catch (e) {
1253
+ reject(e);
1254
+ }
1255
+ }, 0);
1256
+ }),
1257
+ forget: (key) => session.forget(key),
1258
+ dispose: () => {
1259
+ }
1260
+ };
1261
+ }
1262
+ function createInlineEvaluator(core = createReferenceCore()) {
1263
+ const backend = inlineBackend(createMeshSession(core));
1264
+ return queuedEvaluator(() => backend, Promise.resolve(core.kind));
1265
+ }
1266
+ function createWorkerEvaluator(options) {
1267
+ const { port } = options;
1268
+ let nextId = 1;
1269
+ const waiting = /* @__PURE__ */ new Map();
1270
+ let fallback = null;
1271
+ let resolveReady;
1272
+ const ready = new Promise((r) => resolveReady = r);
1273
+ port.onmessage = (ev) => {
1274
+ const m = ev.data;
1275
+ if (m.t === "ready") {
1276
+ resolveReady(m.core);
1277
+ return;
1278
+ }
1279
+ const w = waiting.get(m.id);
1280
+ if (!w) return;
1281
+ waiting.delete(m.id);
1282
+ if (m.t === "err") w.reject(new Error(m.message));
1283
+ else w.resolve(m.res);
1284
+ };
1285
+ const remote = {
1286
+ run(job) {
1287
+ const id = nextId++;
1288
+ return new Promise((resolve, reject) => {
1289
+ waiting.set(id, { job, resolve, reject });
1290
+ const msg = job.kind === "mesh" ? { t: "mesh", id, req: job.req } : { t: "skin", id, req: job.req };
1291
+ port.postMessage(msg);
1292
+ });
1293
+ },
1294
+ forget(key) {
1295
+ port.postMessage({ t: "forget", key });
1296
+ },
1297
+ dispose() {
1298
+ for (const w of waiting.values()) w.reject(new AbortError("evaluator disposed"));
1299
+ waiting.clear();
1300
+ options.close?.();
1301
+ }
1302
+ };
1303
+ const asWorker = port;
1304
+ if (typeof asWorker.addEventListener === "function" && typeof asWorker.terminate === "function") {
1305
+ asWorker.addEventListener("error", () => {
1306
+ if (fallback) return;
1307
+ fallback = inlineBackend(createMeshSession(createReferenceCore()));
1308
+ resolveReady("reference");
1309
+ const lost = [...waiting.values()];
1310
+ waiting.clear();
1311
+ for (const w of lost) fallback.run(w.job).then(w.resolve, w.reject);
1312
+ asWorker.terminate?.();
1313
+ });
1314
+ }
1315
+ return queuedEvaluator(() => fallback ?? remote, ready);
1316
+ }
1317
+ function createEvaluator() {
1318
+ if (typeof Worker === "undefined") return createInlineEvaluator();
1319
+ let worker;
1320
+ try {
1321
+ worker = spawnWorker();
1322
+ } catch {
1323
+ return createInlineEvaluator();
1324
+ }
1325
+ return createWorkerEvaluator({ port: worker, close: () => worker.terminate() });
1326
+ }
1327
+
1328
+ // ../evaluator/src/worker/protocol.ts
1329
+ function meshTransfer(r) {
1330
+ return [r.positions.buffer, r.normals.buffer, r.colors.buffer, r.foundation.buffer, r.material.buffer, r.indices.buffer];
1331
+ }
1332
+ function skinTransfer(r) {
1333
+ return [r.boneIndices.buffer, r.boneWeights.buffer];
1334
+ }
1335
+
1336
+ // ../evaluator/src/worker/host.ts
1337
+ function startWorkerHost(port, load, fallback) {
1338
+ const post = (m, transfer = []) => port.postMessage(m, transfer);
1339
+ const ready = load().then((core) => {
1340
+ post({ t: "ready", core: core.kind });
1341
+ return createMeshSession(core);
1342
+ }).catch((e) => {
1343
+ const core = fallback();
1344
+ post({ t: "ready", core: core.kind, error: String(e) });
1345
+ return createMeshSession(core);
1346
+ });
1347
+ port.onmessage = (ev) => {
1348
+ const msg = ev.data;
1349
+ void ready.then((session) => {
1350
+ if (msg.t === "forget") {
1351
+ session.forget(msg.key);
1352
+ return;
1353
+ }
1354
+ try {
1355
+ if (msg.t === "mesh") {
1356
+ const res = session.mesh(msg.req);
1357
+ post({ t: "mesh", id: msg.id, res }, meshTransfer(res));
1358
+ } else {
1359
+ const res = session.skinWeights(msg.req);
1360
+ post({ t: "skin", id: msg.id, res }, skinTransfer(res));
1361
+ }
1362
+ } catch (e) {
1363
+ post({ t: "err", id: msg.id, message: e instanceof Error ? e.message : String(e) });
1364
+ }
1365
+ });
1366
+ };
1367
+ return ready;
1368
+ }
1369
+
1370
+ // ../evaluator/src/wasm/core.ts
1371
+ var WASM_URL = new URL("../dreamy_evaluator.wasm", import.meta.url);
1372
+ function wasmCoreFromInstance(instance) {
1373
+ const ex = instance.exports;
1374
+ let block = 0;
1375
+ let blockSize = 0;
1376
+ const reserve = (bytes) => {
1377
+ if (bytes > blockSize) {
1378
+ if (block) ex.free(block, blockSize);
1379
+ blockSize = Math.max(bytes, blockSize * 2, 4096);
1380
+ block = ex.alloc(blockSize);
1381
+ }
1382
+ return block;
1383
+ };
1384
+ const align8 = (n) => n + 7 & ~7;
1385
+ return {
1386
+ kind: "wasm",
1387
+ mesh(table, stampCount, params, list) {
1388
+ const tBytes = align8(stampCount * STAMP_STRIDE * 8);
1389
+ const pBytes = PARAMS_LEN * 8;
1390
+ const lLen = list ? list.length : 0;
1391
+ const base = reserve(tBytes + pBytes + lLen * 4);
1392
+ const mem = ex.memory.buffer;
1393
+ new Float64Array(mem, base, stampCount * STAMP_STRIDE).set(table.subarray(0, stampCount * STAMP_STRIDE));
1394
+ new Float64Array(mem, base + tBytes, PARAMS_LEN).set(params.subarray(0, PARAMS_LEN));
1395
+ if (list && lLen) new Int32Array(mem, base + tBytes + pBytes, lLen).set(list);
1396
+ const hp = ex.mesh(base, stampCount, base + tBytes, base + tBytes + pBytes, lLen);
1397
+ const buf = ex.memory.buffer;
1398
+ const h = new Uint32Array(buf, hp, 16);
1399
+ const nv = h[0], ni = h[1];
1400
+ const f32 = (ptr, len) => new Float32Array(buf, ptr, len).slice();
1401
+ const b = new Float32Array(buf, hp + 32, 6);
1402
+ return {
1403
+ positions: f32(h[2], nv * 3),
1404
+ normals: f32(h[3], nv * 3),
1405
+ colors: f32(h[4], nv * 3),
1406
+ foundation: f32(h[5], nv * 3),
1407
+ material: f32(h[6], nv * 4),
1408
+ indices: new Uint32Array(buf, h[7], ni).slice(),
1409
+ bounds: [b[0], b[1], b[2], b[3], b[4], b[5]]
1410
+ };
1411
+ },
1412
+ dropSlot(slot) {
1413
+ ex.drop_slot(slot);
1414
+ },
1415
+ skin(positions, segments, segmentCount, boneCount) {
1416
+ const n = Math.floor(positions.length / 3);
1417
+ const pBytes = align8(n * 3 * 4);
1418
+ const base = reserve(pBytes + segmentCount * SEGMENT_STRIDE * 8);
1419
+ const mem = ex.memory.buffer;
1420
+ new Float32Array(mem, base, n * 3).set(positions.subarray(0, n * 3));
1421
+ new Float64Array(mem, base + pBytes, segmentCount * SEGMENT_STRIDE).set(segments.subarray(0, segmentCount * SEGMENT_STRIDE));
1422
+ const op = ex.skin(base, n, base + pBytes, segmentCount, boneCount);
1423
+ const buf = ex.memory.buffer;
1424
+ return {
1425
+ boneIndices: new Float32Array(buf, op, n * 4).slice(),
1426
+ boneWeights: new Float32Array(buf, op + n * 16, n * 4).slice()
1427
+ };
1428
+ }
1429
+ };
1430
+ }
1431
+ async function loadWasmCore(bytes) {
1432
+ const { instance } = await WebAssembly.instantiate(bytes, {});
1433
+ return wasmCoreFromInstance(instance);
1434
+ }
1435
+ async function fetchWasmCore(url2 = WASM_URL) {
1436
+ const res = await fetch(url2);
1437
+ if (!res.ok) throw new Error(`evaluator wasm: HTTP ${res.status}`);
1438
+ if (typeof WebAssembly.instantiateStreaming === "function" && res.headers.get("content-type")?.includes("application/wasm")) {
1439
+ const { instance } = await WebAssembly.instantiateStreaming(res, {});
1440
+ return wasmCoreFromInstance(instance);
1441
+ }
1442
+ return loadWasmCore(await res.arrayBuffer());
1443
+ }
1444
+
1445
+ export {
1446
+ STAMP_STRIDE,
1447
+ PARAMS_LEN,
1448
+ SHAPE_CODE,
1449
+ MODE_CODE,
1450
+ SEGMENT_STRIDE,
1451
+ createReferenceCore,
1452
+ FIXED_COLORS,
1453
+ colorHex,
1454
+ rgbOf,
1455
+ clampResolution,
1456
+ lodLevels,
1457
+ packSculpt,
1458
+ VOX_CACHE_MAX,
1459
+ createMeshSession,
1460
+ AbortError,
1461
+ createInlineEvaluator,
1462
+ createWorkerEvaluator,
1463
+ createEvaluator,
1464
+ startWorkerHost,
1465
+ WASM_URL,
1466
+ wasmCoreFromInstance,
1467
+ loadWasmCore,
1468
+ fetchWasmCore
1469
+ };
1470
+ //# sourceMappingURL=chunk-72DMUKP3.js.map