@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.
- package/LICENSE +21 -0
- package/README.md +69 -2
- package/dist/api.d.ts +1 -0
- package/dist/api.js +2 -0
- package/dist/api.js.map +7 -0
- package/dist/chunks/chunk-72DMUKP3.js +1470 -0
- package/dist/chunks/chunk-72DMUKP3.js.map +7 -0
- package/dist/chunks/chunk-VZMBE5MV.js +5936 -0
- package/dist/chunks/chunk-VZMBE5MV.js.map +7 -0
- package/dist/chunks/chunk-ZU72KKME.js +8600 -0
- package/dist/chunks/chunk-ZU72KKME.js.map +7 -0
- package/dist/core.d.ts +1 -0
- package/dist/core.js +34 -0
- package/dist/core.js.map +7 -0
- package/dist/dreamy_evaluator.wasm +0 -0
- package/dist/evaluator.d.ts +1 -0
- package/dist/evaluator.js +52 -0
- package/dist/evaluator.js.map +7 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +7280 -0
- package/dist/index.js.map +7 -0
- package/dist/styles.css +1 -0
- package/dist/types/api/src/commands/command.d.ts +7 -0
- package/dist/types/api/src/commands/decal-commands.d.ts +35 -0
- package/dist/types/api/src/commands/palette-commands.d.ts +14 -0
- package/dist/types/api/src/commands/rig-commands.d.ts +229 -0
- package/dist/types/api/src/commands/scene-commands.d.ts +64 -0
- package/dist/types/api/src/commands/sculpt-commands.d.ts +111 -0
- package/dist/types/api/src/commands/stamp-spec.d.ts +3 -0
- package/dist/types/api/src/commands/target.d.ts +8 -0
- package/dist/types/api/src/creation-api.d.ts +52 -0
- package/dist/types/api/src/events/creation-event.d.ts +7 -0
- package/dist/types/api/src/events/decal-events.d.ts +20 -0
- package/dist/types/api/src/events/event-of.d.ts +6 -0
- package/dist/types/api/src/events/palette-events.d.ts +8 -0
- package/dist/types/api/src/events/rig-events.d.ts +161 -0
- package/dist/types/api/src/events/scene-events.d.ts +34 -0
- package/dist/types/api/src/events/sculpt-events.d.ts +53 -0
- package/dist/types/api/src/id.d.ts +1 -0
- package/dist/types/api/src/index.d.ts +31 -0
- package/dist/types/api/src/model/creation.d.ts +22 -0
- package/dist/types/api/src/model/decal.d.ts +48 -0
- package/dist/types/api/src/model/look.d.ts +56 -0
- package/dist/types/api/src/model/math.d.ts +18 -0
- package/dist/types/api/src/model/palette.d.ts +11 -0
- package/dist/types/api/src/model/rig.d.ts +125 -0
- package/dist/types/api/src/model/scene-object.d.ts +22 -0
- package/dist/types/api/src/model/sculpt.d.ts +13 -0
- package/dist/types/api/src/model/stamp.d.ts +53 -0
- package/dist/types/api/src/model/wing.d.ts +35 -0
- package/dist/types/api/src/ports/basic-ports.d.ts +7 -0
- package/dist/types/api/src/ports/evaluator.d.ts +62 -0
- package/dist/types/api/src/ports/persistence.d.ts +89 -0
- package/dist/types/api/src/ports/viewport.d.ts +125 -0
- package/dist/types/core/src/apply/body-part-added.d.ts +2 -0
- package/dist/types/core/src/apply/body-part-removed.d.ts +2 -0
- package/dist/types/core/src/apply/bone-removed.d.ts +3 -0
- package/dist/types/core/src/apply/bone-renamed.d.ts +2 -0
- package/dist/types/core/src/apply/bone-reparented.d.ts +2 -0
- package/dist/types/core/src/apply/bone-sizes-set.d.ts +3 -0
- package/dist/types/core/src/apply/bone-tags-set.d.ts +2 -0
- package/dist/types/core/src/apply/bone-transforms-set.d.ts +6 -0
- package/dist/types/core/src/apply/bones-added.d.ts +2 -0
- package/dist/types/core/src/apply/creature-generated.d.ts +3 -0
- package/dist/types/core/src/apply/decal-removed.d.ts +2 -0
- package/dist/types/core/src/apply/decals-added.d.ts +2 -0
- package/dist/types/core/src/apply/design-deleted.d.ts +2 -0
- package/dist/types/core/src/apply/design-saved.d.ts +2 -0
- package/dist/types/core/src/apply/flat-wings-set.d.ts +2 -0
- package/dist/types/core/src/apply/object-renamed.d.ts +2 -0
- package/dist/types/core/src/apply/object-reparented.d.ts +2 -0
- package/dist/types/core/src/apply/object-transforms-set.d.ts +2 -0
- package/dist/types/core/src/apply/objects-deleted.d.ts +2 -0
- package/dist/types/core/src/apply/objects-duplicated.d.ts +3 -0
- package/dist/types/core/src/apply/palette-color-set.d.ts +2 -0
- package/dist/types/core/src/apply/palette-reset.d.ts +2 -0
- package/dist/types/core/src/apply/part-grafted.d.ts +3 -0
- package/dist/types/core/src/apply/part-slot-swapped.d.ts +3 -0
- package/dist/types/core/src/apply/pivot-set.d.ts +2 -0
- package/dist/types/core/src/apply/pose-preset-applied.d.ts +3 -0
- package/dist/types/core/src/apply/pose-reset.d.ts +3 -0
- package/dist/types/core/src/apply/premade-applied.d.ts +3 -0
- package/dist/types/core/src/apply/region-blend-set.d.ts +3 -0
- package/dist/types/core/src/apply/rig-created.d.ts +2 -0
- package/dist/types/core/src/apply/rig-mirror-set.d.ts +2 -0
- package/dist/types/core/src/apply/rig-mode-set.d.ts +2 -0
- package/dist/types/core/src/apply/sculpt-created.d.ts +2 -0
- package/dist/types/core/src/apply/sculpt-look-set.d.ts +3 -0
- package/dist/types/core/src/apply/smear-group-set.d.ts +2 -0
- package/dist/types/core/src/apply/stamp-placements-set.d.ts +2 -0
- package/dist/types/core/src/apply/stamp-props-set.d.ts +2 -0
- package/dist/types/core/src/apply/stamps-added.d.ts +2 -0
- package/dist/types/core/src/apply/stamps-removed.d.ts +2 -0
- package/dist/types/core/src/apply/symmetry-set-for-all.d.ts +2 -0
- package/dist/types/core/src/atoms/check/check.d.ts +7 -0
- package/dist/types/core/src/atoms/decal/decal-limits.d.ts +6 -0
- package/dist/types/core/src/atoms/decal/decal-problem.d.ts +4 -0
- package/dist/types/core/src/atoms/decal/design-problem.d.ts +4 -0
- package/dist/types/core/src/atoms/look/catalogs.d.ts +9 -0
- package/dist/types/core/src/atoms/look/default-look.d.ts +4 -0
- package/dist/types/core/src/atoms/look/look-problem.d.ts +7 -0
- package/dist/types/core/src/atoms/look/merge-look.d.ts +3 -0
- package/dist/types/core/src/atoms/math/mat4.d.ts +14 -0
- package/dist/types/core/src/atoms/math/quat.d.ts +18 -0
- package/dist/types/core/src/atoms/math/transform.d.ts +7 -0
- package/dist/types/core/src/atoms/math/vec3.d.ts +18 -0
- package/dist/types/core/src/atoms/palette/default-palette.d.ts +4 -0
- package/dist/types/core/src/atoms/palette/is-color-ref.d.ts +2 -0
- package/dist/types/core/src/atoms/palette/poc-color-ref.d.ts +6 -0
- package/dist/types/core/src/atoms/rig/bone-matrices.d.ts +8 -0
- package/dist/types/core/src/atoms/rig/bone-region.d.ts +8 -0
- package/dist/types/core/src/atoms/rig/bone-role.d.ts +11 -0
- package/dist/types/core/src/atoms/rig/bone-size.d.ts +7 -0
- package/dist/types/core/src/atoms/rig/compose-local.d.ts +6 -0
- package/dist/types/core/src/atoms/rig/find-rig.d.ts +11 -0
- package/dist/types/core/src/atoms/rig/mirror-partner.d.ts +3 -0
- package/dist/types/core/src/atoms/rig/mirror-sculpt.d.ts +9 -0
- package/dist/types/core/src/atoms/rig/mirror-transform.d.ts +9 -0
- package/dist/types/core/src/atoms/rig/partner-target.d.ts +3 -0
- package/dist/types/core/src/atoms/rig/pose-presets.d.ts +11 -0
- package/dist/types/core/src/atoms/rig/pose-rule.d.ts +48 -0
- package/dist/types/core/src/atoms/rig/pose-template-rules.d.ts +8 -0
- package/dist/types/core/src/atoms/rig/rebase-pose.d.ts +6 -0
- package/dist/types/core/src/atoms/rig/resize-bones.d.ts +12 -0
- package/dist/types/core/src/atoms/rig/rig-extent.d.ts +3 -0
- package/dist/types/core/src/atoms/rig/side-from-name.d.ts +7 -0
- package/dist/types/core/src/atoms/rig/size-frame.d.ts +18 -0
- package/dist/types/core/src/atoms/rig/with-slot-parts.d.ts +9 -0
- package/dist/types/core/src/atoms/scene/copy-with-new-ids.d.ts +7 -0
- package/dist/types/core/src/atoms/scene/object-tree.d.ts +8 -0
- package/dist/types/core/src/atoms/scene/place-in-order.d.ts +7 -0
- package/dist/types/core/src/atoms/scene/unique-name.d.ts +4 -0
- package/dist/types/core/src/atoms/scene/world-matrix.d.ts +4 -0
- package/dist/types/core/src/atoms/sculpt/all-sculpts.d.ts +3 -0
- package/dist/types/core/src/atoms/sculpt/is-wing-target.d.ts +3 -0
- package/dist/types/core/src/atoms/sculpt/target-sculpt.d.ts +10 -0
- package/dist/types/core/src/atoms/sculpt/update-target.d.ts +8 -0
- package/dist/types/core/src/atoms/stamp/apply-stamp-props.d.ts +11 -0
- package/dist/types/core/src/atoms/stamp/clamp-symmetry.d.ts +11 -0
- package/dist/types/core/src/atoms/stamp/clean-props.d.ts +3 -0
- package/dist/types/core/src/atoms/stamp/emptied-groups.d.ts +3 -0
- package/dist/types/core/src/atoms/stamp/move-locked-groups.d.ts +12 -0
- package/dist/types/core/src/atoms/stamp/normalize-base.d.ts +6 -0
- package/dist/types/core/src/atoms/stamp/resolve-stamp-props.d.ts +14 -0
- package/dist/types/core/src/atoms/stamp/smear.d.ts +15 -0
- package/dist/types/core/src/atoms/stamp/stamp-problem.d.ts +7 -0
- package/dist/types/core/src/atoms/wing/wing-problem.d.ts +6 -0
- package/dist/types/core/src/create-creation-api.d.ts +12 -0
- package/dist/types/core/src/decide.d.ts +4 -0
- package/dist/types/core/src/empty-creation.d.ts +2 -0
- package/dist/types/core/src/fold.d.ts +6 -0
- package/dist/types/core/src/index.d.ts +9 -0
- package/dist/types/core/src/molecules/add-body-part.d.ts +8 -0
- package/dist/types/core/src/molecules/add-bone.d.ts +8 -0
- package/dist/types/core/src/molecules/add-decals.d.ts +4 -0
- package/dist/types/core/src/molecules/add-stamps.d.ts +8 -0
- package/dist/types/core/src/molecules/apply-pose-preset.d.ts +4 -0
- package/dist/types/core/src/molecules/apply-premade.d.ts +9 -0
- package/dist/types/core/src/molecules/auto-tag-sides.d.ts +4 -0
- package/dist/types/core/src/molecules/create-rig.d.ts +4 -0
- package/dist/types/core/src/molecules/create-sculpt.d.ts +4 -0
- package/dist/types/core/src/molecules/delete-design.d.ts +4 -0
- package/dist/types/core/src/molecules/delete-objects.d.ts +4 -0
- package/dist/types/core/src/molecules/duplicate-objects.d.ts +6 -0
- package/dist/types/core/src/molecules/generate-creature.d.ts +7 -0
- package/dist/types/core/src/molecules/graft-part.d.ts +4 -0
- package/dist/types/core/src/molecules/mirror-objects.d.ts +7 -0
- package/dist/types/core/src/molecules/molecule.d.ts +17 -0
- package/dist/types/core/src/molecules/remove-body-part.d.ts +3 -0
- package/dist/types/core/src/molecules/remove-bone.d.ts +4 -0
- package/dist/types/core/src/molecules/remove-decal.d.ts +3 -0
- package/dist/types/core/src/molecules/remove-smear-group.d.ts +4 -0
- package/dist/types/core/src/molecules/remove-stamps.d.ts +4 -0
- package/dist/types/core/src/molecules/rename-bone.d.ts +3 -0
- package/dist/types/core/src/molecules/rename-object.d.ts +3 -0
- package/dist/types/core/src/molecules/reparent-bone.d.ts +4 -0
- package/dist/types/core/src/molecules/reparent-object.d.ts +4 -0
- package/dist/types/core/src/molecules/reset-palette.d.ts +3 -0
- package/dist/types/core/src/molecules/reset-pose.d.ts +3 -0
- package/dist/types/core/src/molecules/save-design.d.ts +4 -0
- package/dist/types/core/src/molecules/set-bone-sizes.d.ts +8 -0
- package/dist/types/core/src/molecules/set-bone-tags.d.ts +4 -0
- package/dist/types/core/src/molecules/set-bone-transforms.d.ts +7 -0
- package/dist/types/core/src/molecules/set-flat-wings.d.ts +4 -0
- package/dist/types/core/src/molecules/set-object-transforms.d.ts +3 -0
- package/dist/types/core/src/molecules/set-palette-color.d.ts +3 -0
- package/dist/types/core/src/molecules/set-pivot.d.ts +3 -0
- package/dist/types/core/src/molecules/set-region-blend.d.ts +4 -0
- package/dist/types/core/src/molecules/set-rig-mirror.d.ts +3 -0
- package/dist/types/core/src/molecules/set-rig-mode.d.ts +3 -0
- package/dist/types/core/src/molecules/set-sculpt-look.d.ts +7 -0
- package/dist/types/core/src/molecules/set-smear-group.d.ts +4 -0
- package/dist/types/core/src/molecules/set-stamp-placements.d.ts +4 -0
- package/dist/types/core/src/molecules/set-stamp-props.d.ts +3 -0
- package/dist/types/core/src/molecules/set-symmetry-for-all.d.ts +4 -0
- package/dist/types/core/src/molecules/swap-part-slot.d.ts +7 -0
- package/dist/types/core/src/premades/ant-bake.d.ts +2 -0
- package/dist/types/core/src/premades/bake-authoring.d.ts +35 -0
- package/dist/types/core/src/premades/bake-types.d.ts +65 -0
- package/dist/types/core/src/premades/baked-part-for.d.ts +11 -0
- package/dist/types/core/src/premades/bee-bake.d.ts +2 -0
- package/dist/types/core/src/premades/bird-bake.d.ts +2 -0
- package/dist/types/core/src/premades/body-stamps-for-bone.d.ts +14 -0
- package/dist/types/core/src/premades/bone-tree.d.ts +15 -0
- package/dist/types/core/src/premades/build-premade-rig.d.ts +23 -0
- package/dist/types/core/src/premades/build-template.d.ts +6 -0
- package/dist/types/core/src/premades/centipede-bake.d.ts +2 -0
- package/dist/types/core/src/premades/coat-stamps.d.ts +3 -0
- package/dist/types/core/src/premades/crab-bake.d.ts +2 -0
- package/dist/types/core/src/premades/dragon-bake.d.ts +2 -0
- package/dist/types/core/src/premades/face-decals.d.ts +17 -0
- package/dist/types/core/src/premades/fish-bake.d.ts +2 -0
- package/dist/types/core/src/premades/fit-part-slot.d.ts +21 -0
- package/dist/types/core/src/premades/generate-creature.d.ts +21 -0
- package/dist/types/core/src/premades/gorilla-bake.d.ts +2 -0
- package/dist/types/core/src/premades/graft-slot.d.ts +34 -0
- package/dist/types/core/src/premades/humanoid-bake.d.ts +2 -0
- package/dist/types/core/src/premades/insect6-bake.d.ts +2 -0
- package/dist/types/core/src/premades/jellyfish-bake.d.ts +2 -0
- package/dist/types/core/src/premades/lizard-bake.d.ts +2 -0
- package/dist/types/core/src/premades/make-baked-part.d.ts +9 -0
- package/dist/types/core/src/premades/make-body-part.d.ts +9 -0
- package/dist/types/core/src/premades/make-flat-part.d.ts +13 -0
- package/dist/types/core/src/premades/part-context.d.ts +20 -0
- package/dist/types/core/src/premades/part-kits.d.ts +36 -0
- package/dist/types/core/src/premades/part-slots.d.ts +17 -0
- package/dist/types/core/src/premades/part-stamp.d.ts +13 -0
- package/dist/types/core/src/premades/part-styles.d.ts +44 -0
- package/dist/types/core/src/premades/premade-fit.d.ts +18 -0
- package/dist/types/core/src/premades/premade-infos.d.ts +3 -0
- package/dist/types/core/src/premades/reseat-attachments.d.ts +31 -0
- package/dist/types/core/src/premades/rig-builder.d.ts +51 -0
- package/dist/types/core/src/premades/rodent-bake.d.ts +2 -0
- package/dist/types/core/src/premades/scorpion-bake.d.ts +2 -0
- package/dist/types/core/src/premades/shark-bake.d.ts +2 -0
- package/dist/types/core/src/premades/sitter-bake.d.ts +3 -0
- package/dist/types/core/src/premades/skeleton-bakes.d.ts +4 -0
- package/dist/types/core/src/premades/snake-bake.d.ts +2 -0
- package/dist/types/core/src/premades/spider-bake.d.ts +2 -0
- package/dist/types/core/src/premades/stamps-box.d.ts +9 -0
- package/dist/types/core/src/premades/style-for-bone.d.ts +7 -0
- package/dist/types/core/src/premades/swap-slot.d.ts +13 -0
- package/dist/types/core/src/premades/template-catalog.d.ts +20 -0
- package/dist/types/core/src/premades/template-color.d.ts +9 -0
- package/dist/types/core/src/premades/turtle-bake.d.ts +2 -0
- package/dist/types/core/src/premades/variants/aquatic-variants.d.ts +16 -0
- package/dist/types/core/src/premades/variants/coat-variants.d.ts +7 -0
- package/dist/types/core/src/premades/variants/ear-variants.d.ts +8 -0
- package/dist/types/core/src/premades/variants/fantasy-more-variants.d.ts +3 -0
- package/dist/types/core/src/premades/variants/fantasy-variants.d.ts +17 -0
- package/dist/types/core/src/premades/variants/head-variants.d.ts +9 -0
- package/dist/types/core/src/premades/variants/horn-variants.d.ts +7 -0
- package/dist/types/core/src/premades/variants/index.d.ts +10 -0
- package/dist/types/core/src/premades/variants/land-variants.d.ts +3 -0
- package/dist/types/core/src/premades/variants/leg-variants.d.ts +7 -0
- package/dist/types/core/src/premades/variants/part-variant.d.ts +14 -0
- package/dist/types/core/src/premades/variants/tail-variants.d.ts +6 -0
- package/dist/types/core/src/premades/variants/variant-authoring.d.ts +29 -0
- package/dist/types/core/src/premades/whale-bake.d.ts +2 -0
- package/dist/types/core/src/premades/wing-defaults.d.ts +4 -0
- package/dist/types/core/src/premades/wing-frame.d.ts +10 -0
- package/dist/types/core/src/premades/wolf-bake.d.ts +2 -0
- package/dist/types/core/src/premades/worm-bake.d.ts +2 -0
- package/dist/types/evaluator/src/abi.d.ts +64 -0
- package/dist/types/evaluator/src/chunks.d.ts +53 -0
- package/dist/types/evaluator/src/index.d.ts +11 -0
- package/dist/types/evaluator/src/prep/colors.d.ts +11 -0
- package/dist/types/evaluator/src/prep/mat3.d.ts +13 -0
- package/dist/types/evaluator/src/prep/pack.d.ts +23 -0
- package/dist/types/evaluator/src/prep/props.d.ts +16 -0
- package/dist/types/evaluator/src/prep/symmetry.d.ts +23 -0
- package/dist/types/evaluator/src/reference/core.d.ts +3 -0
- package/dist/types/evaluator/src/reference/mesher.d.ts +22 -0
- package/dist/types/evaluator/src/reference/skin.d.ts +8 -0
- package/dist/types/evaluator/src/session.d.ts +21 -0
- package/dist/types/evaluator/src/wasm/core.d.ts +9 -0
- package/dist/types/evaluator/src/worker/client.d.ts +28 -0
- package/dist/types/evaluator/src/worker/host.d.ts +8 -0
- package/dist/types/evaluator/src/worker/protocol.d.ts +39 -0
- package/dist/types/evaluator/src/worker/spawn.d.ts +6 -0
- package/dist/types/evaluator/src/worker/worker-inline.d.ts +1 -0
- package/dist/types/evaluator/src/worker/worker.d.ts +1 -0
- package/dist/types/module/src/index.d.ts +2 -0
- package/dist/types/module/src/ui/atoms/action-button.d.ts +10 -0
- package/dist/types/module/src/ui/atoms/badge.d.ts +9 -0
- package/dist/types/module/src/ui/atoms/checkbox.d.ts +6 -0
- package/dist/types/module/src/ui/atoms/color-input.d.ts +10 -0
- package/dist/types/module/src/ui/atoms/hex-chip.d.ts +5 -0
- package/dist/types/module/src/ui/atoms/icon-button.d.ts +14 -0
- package/dist/types/module/src/ui/atoms/icon.d.ts +8 -0
- package/dist/types/module/src/ui/atoms/kbd.d.ts +4 -0
- package/dist/types/module/src/ui/atoms/match-button.d.ts +10 -0
- package/dist/types/module/src/ui/atoms/number-input.d.ts +11 -0
- package/dist/types/module/src/ui/atoms/pill-button.d.ts +11 -0
- package/dist/types/module/src/ui/atoms/range-input.d.ts +17 -0
- package/dist/types/module/src/ui/atoms/select-input.d.ts +12 -0
- package/dist/types/module/src/ui/atoms/separator.d.ts +2 -0
- package/dist/types/module/src/ui/atoms/side-button.d.ts +13 -0
- package/dist/types/module/src/ui/atoms/swatch.d.ts +13 -0
- package/dist/types/module/src/ui/atoms/tool-button.d.ts +22 -0
- package/dist/types/module/src/ui/hooks/editor-actions.d.ts +50 -0
- package/dist/types/module/src/ui/hooks/editor-context.d.ts +37 -0
- package/dist/types/module/src/ui/hooks/use-compact.d.ts +2 -0
- package/dist/types/module/src/ui/hooks/use-editor-controller.d.ts +17 -0
- package/dist/types/module/src/ui/hooks/use-keyboard.d.ts +11 -0
- package/dist/types/module/src/ui/lib/catalog.d.ts +76 -0
- package/dist/types/module/src/ui/lib/colors.d.ts +15 -0
- package/dist/types/module/src/ui/lib/decals.d.ts +6 -0
- package/dist/types/module/src/ui/lib/design-geometry.d.ts +60 -0
- package/dist/types/module/src/ui/lib/math.d.ts +18 -0
- package/dist/types/module/src/ui/lib/placement.d.ts +8 -0
- package/dist/types/module/src/ui/lib/scene.d.ts +51 -0
- package/dist/types/module/src/ui/lib/symmetry.d.ts +5 -0
- package/dist/types/module/src/ui/lib/targets.d.ts +28 -0
- package/dist/types/module/src/ui/lib/view-state.d.ts +74 -0
- package/dist/types/module/src/ui/molecules/axis-pill.d.ts +7 -0
- package/dist/types/module/src/ui/molecules/color-field.d.ts +14 -0
- package/dist/types/module/src/ui/molecules/count-stepper.d.ts +9 -0
- package/dist/types/module/src/ui/molecules/floating-panel.d.ts +26 -0
- package/dist/types/module/src/ui/molecules/help-row.d.ts +8 -0
- package/dist/types/module/src/ui/molecules/inline-edit.d.ts +9 -0
- package/dist/types/module/src/ui/molecules/list-row.d.ts +25 -0
- package/dist/types/module/src/ui/molecules/modal.d.ts +11 -0
- package/dist/types/module/src/ui/molecules/mode-pill.d.ts +7 -0
- package/dist/types/module/src/ui/molecules/scroll-row.d.ts +10 -0
- package/dist/types/module/src/ui/molecules/slider-row.d.ts +16 -0
- package/dist/types/module/src/ui/molecules/swatch-row.d.ts +11 -0
- package/dist/types/module/src/ui/molecules/tab-bar.d.ts +9 -0
- package/dist/types/module/src/ui/molecules/toolbar-pill.d.ts +7 -0
- package/dist/types/module/src/ui/molecules/toolbar.d.ts +10 -0
- package/dist/types/module/src/ui/molecules/vec3-field.d.ts +10 -0
- package/dist/types/module/src/ui/organisms/bone-panel.d.ts +2 -0
- package/dist/types/module/src/ui/organisms/bone-size-sliders.d.ts +9 -0
- package/dist/types/module/src/ui/organisms/category-bar.d.ts +2 -0
- package/dist/types/module/src/ui/organisms/decal-bar.d.ts +2 -0
- package/dist/types/module/src/ui/organisms/decal-editor.d.ts +2 -0
- package/dist/types/module/src/ui/organisms/fleck-style-tab.d.ts +7 -0
- package/dist/types/module/src/ui/organisms/git-sync-panel.d.ts +10 -0
- package/dist/types/module/src/ui/organisms/help-panel.d.ts +2 -0
- package/dist/types/module/src/ui/organisms/material-tab.d.ts +3 -0
- package/dist/types/module/src/ui/organisms/object-list-panel.d.ts +2 -0
- package/dist/types/module/src/ui/organisms/palette-panel.d.ts +2 -0
- package/dist/types/module/src/ui/organisms/parts-tab.d.ts +26 -0
- package/dist/types/module/src/ui/organisms/pattern-tab.d.ts +3 -0
- package/dist/types/module/src/ui/organisms/pose-tab.d.ts +8 -0
- package/dist/types/module/src/ui/organisms/premade-picker.d.ts +2 -0
- package/dist/types/module/src/ui/organisms/properties-panel.d.ts +2 -0
- package/dist/types/module/src/ui/organisms/region-blends.d.ts +5 -0
- package/dist/types/module/src/ui/organisms/rendering-bar.d.ts +5 -0
- package/dist/types/module/src/ui/organisms/rig-bar.d.ts +2 -0
- package/dist/types/module/src/ui/organisms/scenes-modal.d.ts +2 -0
- package/dist/types/module/src/ui/organisms/select-hint.d.ts +2 -0
- package/dist/types/module/src/ui/organisms/shape-list-panel.d.ts +2 -0
- package/dist/types/module/src/ui/organisms/side-dock.d.ts +4 -0
- package/dist/types/module/src/ui/organisms/stamp-bar.d.ts +2 -0
- package/dist/types/module/src/ui/organisms/stamp-props-panel.d.ts +2 -0
- package/dist/types/module/src/ui/organisms/stamp-size-panel.d.ts +4 -0
- package/dist/types/module/src/ui/organisms/stats-badge.d.ts +2 -0
- package/dist/types/module/src/ui/organisms/style-bar.d.ts +2 -0
- package/dist/types/module/src/ui/organisms/symmetry-bar.d.ts +2 -0
- package/dist/types/module/src/ui/organisms/toast.d.ts +2 -0
- package/dist/types/module/src/ui/organisms/token-guide.d.ts +5 -0
- package/dist/types/module/src/ui/organisms/touch-mods.d.ts +2 -0
- package/dist/types/module/src/ui/organisms/transform-bar.d.ts +2 -0
- package/dist/types/module/src/ui/organisms/transform-tab.d.ts +2 -0
- package/dist/types/module/src/ui/organisms/utilities-bar.d.ts +2 -0
- package/dist/types/module/src/ui/organisms/viewport-host.d.ts +2 -0
- package/dist/types/module/src/ui/organisms/voxel-panel.d.ts +2 -0
- package/dist/types/module/src/ui/organisms/wing-tab.d.ts +10 -0
- package/dist/types/module/src/ui/pages/editor-page.d.ts +9 -0
- package/dist/types/module/src/ui/templates/editor-shell.d.ts +2 -0
- package/dist/types/studio/src/browser-files.d.ts +3 -0
- package/dist/types/studio/src/clock.d.ts +2 -0
- package/dist/types/studio/src/creation-file.d.ts +21 -0
- package/dist/types/studio/src/git-remote.d.ts +36 -0
- package/dist/types/studio/src/git-sync.d.ts +33 -0
- package/dist/types/studio/src/ids.d.ts +3 -0
- package/dist/types/studio/src/index.d.ts +15 -0
- package/dist/types/studio/src/indexed-db-library.d.ts +2 -0
- package/dist/types/studio/src/library-persistence.d.ts +29 -0
- package/dist/types/studio/src/library-sync.d.ts +29 -0
- package/dist/types/studio/src/preferences.d.ts +9 -0
- package/dist/types/studio/src/seed.d.ts +3 -0
- package/dist/types/studio/src/studio.d.ts +17 -0
- package/dist/types/viewport/src/create-viewport.d.ts +10 -0
- package/dist/types/viewport/src/decals/builtin-art.d.ts +19 -0
- package/dist/types/viewport/src/decals/builtin-docs.d.ts +7 -0
- package/dist/types/viewport/src/decals/decal-atlas.d.ts +37 -0
- package/dist/types/viewport/src/decals/decal-catalog.d.ts +17 -0
- package/dist/types/viewport/src/decals/decal-glsl.d.ts +2 -0
- package/dist/types/viewport/src/decals/decal-limits.d.ts +11 -0
- package/dist/types/viewport/src/decals/decal-uniforms.d.ts +40 -0
- package/dist/types/viewport/src/decals/design-raster.d.ts +8 -0
- package/dist/types/viewport/src/decals/interior-thumbs.d.ts +6 -0
- package/dist/types/viewport/src/index.d.ts +1 -0
- package/dist/types/viewport/src/interaction/bone-tool.d.ts +13 -0
- package/dist/types/viewport/src/interaction/bones-visible.d.ts +7 -0
- package/dist/types/viewport/src/interaction/cursor.d.ts +3 -0
- package/dist/types/viewport/src/interaction/decal-tool.d.ts +18 -0
- package/dist/types/viewport/src/interaction/esc-hold.d.ts +13 -0
- package/dist/types/viewport/src/interaction/ghost-geometry.d.ts +6 -0
- package/dist/types/viewport/src/interaction/gizmo.d.ts +34 -0
- package/dist/types/viewport/src/interaction/interaction-context.d.ts +41 -0
- package/dist/types/viewport/src/interaction/marquee.d.ts +8 -0
- package/dist/types/viewport/src/interaction/pivot-helper.d.ts +13 -0
- package/dist/types/viewport/src/interaction/select-tool.d.ts +30 -0
- package/dist/types/viewport/src/interaction/selection-boxes.d.ts +11 -0
- package/dist/types/viewport/src/interaction/stamp-tool.d.ts +41 -0
- package/dist/types/viewport/src/interaction/stamp-wires.d.ts +18 -0
- package/dist/types/viewport/src/interaction/surface-hit.d.ts +14 -0
- package/dist/types/viewport/src/materials/fleck-material.d.ts +69 -0
- package/dist/types/viewport/src/materials/global-uniforms.d.ts +15 -0
- package/dist/types/viewport/src/materials/skin.d.ts +18 -0
- package/dist/types/viewport/src/materials/wing-material.d.ts +21 -0
- package/dist/types/viewport/src/math/colors.d.ts +29 -0
- package/dist/types/viewport/src/math/convert.d.ts +15 -0
- package/dist/types/viewport/src/math/decal-pose.d.ts +7 -0
- package/dist/types/viewport/src/math/lod.d.ts +16 -0
- package/dist/types/viewport/src/math/picking.d.ts +32 -0
- package/dist/types/viewport/src/math/pixel-palette.d.ts +15 -0
- package/dist/types/viewport/src/math/screen.d.ts +26 -0
- package/dist/types/viewport/src/math/skeleton-math.d.ts +32 -0
- package/dist/types/viewport/src/math/smear.d.ts +20 -0
- package/dist/types/viewport/src/math/symmetry.d.ts +21 -0
- package/dist/types/viewport/src/objects/default-look.d.ts +3 -0
- package/dist/types/viewport/src/objects/mesh-driver.d.ts +26 -0
- package/dist/types/viewport/src/objects/mesh-key.d.ts +8 -0
- package/dist/types/viewport/src/objects/rig-view.d.ts +31 -0
- package/dist/types/viewport/src/objects/scene-views.d.ts +53 -0
- package/dist/types/viewport/src/objects/sculpt-view.d.ts +66 -0
- package/dist/types/viewport/src/objects/view-context.d.ts +19 -0
- package/dist/types/viewport/src/objects/wing-view.d.ts +27 -0
- package/dist/types/viewport/src/rig/bone-viz.d.ts +13 -0
- package/dist/types/viewport/src/scene/camera-motion.d.ts +10 -0
- package/dist/types/viewport/src/scene/camera-sun.d.ts +3 -0
- package/dist/types/viewport/src/scene/environment.d.ts +3 -0
- package/dist/types/viewport/src/scene/frame-camera.d.ts +10 -0
- package/dist/types/viewport/src/scene/play-mode.d.ts +9 -0
- package/dist/types/viewport/src/scene/render-pipeline.d.ts +26 -0
- package/dist/types/viewport/src/scene/render-settings.d.ts +18 -0
- package/dist/types/viewport/src/scene/resolve-frag.d.ts +3 -0
- package/dist/types/viewport/src/scene/stage.d.ts +38 -0
- package/dist/types/viewport/src/scene/stress-test.d.ts +6 -0
- package/dist/types/viewport/src/wings/wing-mesh.d.ts +19 -0
- package/dist/types/viewport/src/wings/wing-outlines.d.ts +32 -0
- package/dist/types/viewport/src/wings/wing-pattern.d.ts +7 -0
- package/dist/viewport.d.ts +1 -0
- package/dist/viewport.js +8 -0
- package/dist/viewport.js.map +7 -0
- package/package.json +74 -4
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../evaluator/src/abi.ts", "../../../evaluator/src/reference/mesher.ts", "../../../evaluator/src/reference/skin.ts", "../../../evaluator/src/reference/core.ts", "../../../evaluator/src/prep/colors.ts", "../../../evaluator/src/prep/mat3.ts", "../../../evaluator/src/prep/props.ts", "../../../evaluator/src/prep/symmetry.ts", "../../../evaluator/src/prep/pack.ts", "../../../evaluator/src/chunks.ts", "../../../evaluator/src/session.ts", "dreamy:inline-worker", "../../../evaluator/src/worker/client.ts", "../../../evaluator/src/worker/protocol.ts", "../../../evaluator/src/worker/host.ts", "../../../evaluator/src/wasm/core.ts"],
|
|
4
|
+
"sourcesContent": ["/**\n * The mesher ABI shared by the Rust / WASM core and the TypeScript reference core.\n *\n * Stamp table: `STAMP_STRIDE` f64 per stamp, in CSG order (stamp 0 starts the stack):\n * 0 shape code (SHAPE_CODE) 1 mode code (MODE_CODE)\n * 2..4 position 5..13 inverse rotation, row-major 3x3 (local = SR * (p - position))\n * 14..16 half sizes 17 blend\n * 18 bounding radius 19 bound scale (lower-bound factor of stretched shapes)\n * 20..22 color rgb 23..25 foundation rgb\n * 26..29 roughness, metalness, glow, flecks (f32-rounded)\n * 30 override mask (bit k = material channel k is the stamp's own) 31 unused\n *\n * Grid params: `PARAMS_LEN` f64:\n * 0..2 origin of sample (0,0,0) 3..5 step 6..8 samples per axis (RX, RY, RZ)\n * 9 own (first index along an edge's axis that emits quads; chunks own their low side only)\n * 10 cache slot (-1: none) 11..16 inclusive voxel box to evaluate x0 x1 y0 y1 z0 z1 (x0 > x1: none)\n *\n * The optional stamp list (i32) holds the stamp indices to apply, in order; empty means all.\n * When a slot's arrays have to be (re)allocated, the core evaluates the whole grid whatever the box says.\n */\nexport const STAMP_STRIDE = 32;\nexport const PARAMS_LEN = 17;\n\nexport const SHAPE_CODE = {\n cube: 0,\n sphere: 1,\n cylinder: 2,\n torus: 3,\n cone: 4,\n pyramid: 5,\n prism: 6,\n octahedron: 7,\n capsule: 8,\n dome: 9,\n} as const;\n\nexport const MODE_CODE = { add: 0, subtract: 1, intersect: 2, paint: 3 } as const;\n\n/** Skin segment table: 7 f64 per segment: head xyz, end xyz, bone index. */\nexport const SEGMENT_STRIDE = 7;\n\nexport type RawMesh = {\n readonly positions: Float32Array;\n readonly normals: Float32Array;\n readonly colors: Float32Array;\n readonly foundation: Float32Array;\n readonly material: Float32Array;\n readonly indices: Uint32Array;\n /** Vertex AABB (zeros for an empty mesh). */\n readonly bounds: readonly [number, number, number, number, number, number];\n};\n\nexport type RawSkin = {\n readonly boneIndices: Float32Array;\n readonly boneWeights: Float32Array;\n};\n\n/** One mesher implementation. Every output array is freshly allocated (safe to transfer). */\nexport type MesherCore = {\n readonly kind: \"wasm\" | \"reference\";\n mesh(table: Float64Array, stampCount: number, params: Float64Array, list: Int32Array | null): RawMesh;\n /** Frees a cache slot's voxel arrays. */\n dropSlot(slot: number): void;\n skin(positions: Float32Array, segments: Float64Array, segmentCount: number, boneCount: number): RawSkin;\n};\n", "import { STAMP_STRIDE, type RawMesh } from \"../abi.js\";\n\n/*\n * TypeScript reference of the mesher core (POC sdf.js + mesher.js), operation for operation the same as\n * rust/src/lib.rs so both produce bit-identical buffers. min / max / clamp are plain comparisons (not\n * Math.min / Math.max) because Rust's f64::min / max treat signed zeros and NaN differently.\n */\n\nexport type VoxArrays = {\n readonly field: Float32Array;\n readonly cR: Float32Array;\n readonly cG: Float32Array;\n readonly cB: Float32Array;\n readonly fR: Float32Array;\n readonly fG: Float32Array;\n readonly fB: Float32Array;\n /** 4 per voxel: roughness, metalness, glow, flecks. */\n readonly mat: Float32Array;\n};\n\nexport function newVoxArrays(total: number): VoxArrays {\n const f = (): Float32Array => new Float32Array(total);\n return { field: f(), cR: f(), cG: f(), cB: f(), fR: f(), fG: f(), fB: f(), mat: new Float32Array(total * 4) };\n}\n\nconst mn = (a: number, b: number): number => (a < b ? a : b);\nconst mx = (a: number, b: number): number => (a > b ? a : b);\nconst clamp01 = (v: number): number => mx(0, mn(1, v));\nconst fround = Math.fround;\n\n/** Signed distance of a shape in its local frame, with per-axis half sizes. */\nexport function sdShape(code: number, x: number, y: number, z: number, hx: number, hy: number, hz: number): number {\n if (code === 0) {\n const dx = Math.abs(x) - hx;\n const dy = Math.abs(y) - hy;\n const dz = Math.abs(z) - hz;\n const ox = mx(dx, 0);\n const oy = mx(dy, 0);\n const oz = mx(dz, 0);\n const outLen = Math.sqrt(ox * ox + oy * oy + oz * oz);\n const inDist = mn(mx(dx, mx(dy, dz)), 0);\n return outLen + inDist;\n }\n const qx = x / hx;\n const qy = y / hy;\n const qz = z / hz;\n const minH = mn(mn(hx, hy), hz);\n switch (code) {\n case 1:\n return (Math.sqrt(qx * qx + qy * qy + qz * qz) - 1) * minH;\n case 2: {\n const dXZ = (Math.sqrt(qx * qx + qz * qz) - 1) * mn(hx, hz);\n const dY = Math.abs(y) - hy;\n const ox = mx(dXZ, 0);\n const oy = mx(dY, 0);\n return mn(mx(dXZ, dY), 0) + Math.sqrt(ox * ox + oy * oy);\n }\n case 3: {\n const a = Math.sqrt(qx * qx + qz * qz) - 0.8;\n return (Math.sqrt(a * a + qy * qy) - 0.3) * minH;\n }\n case 4: {\n const rx = Math.sqrt(qx * qx + qz * qz);\n const ry = qy;\n const cax = rx - mn(rx, ry < 0 ? 1 : 0);\n const cay = Math.abs(ry) - 1;\n const t = mx(0, mn(1, (rx + 2 - 2 * ry) / 5));\n const cbx = rx - t;\n const cby = ry - 1 + 2 * t;\n const s = cbx < 0 && cay < 0 ? -1 : 1;\n return s * Math.sqrt(mn(cax * cax + cay * cay, cbx * cbx + cby * cby)) * minH;\n }\n case 5: {\n const S5 = 2.236068;\n return mx(mx((2 * Math.abs(qx) + qy - 1) / S5, (2 * Math.abs(qz) + qy - 1) / S5), -qy - 1) * minH;\n }\n case 6:\n return mx(mx((2 * Math.abs(qx) + qy - 1) / 2.236068, -qy - 1), Math.abs(qz) - 1) * minH;\n case 7:\n return ((Math.abs(qx) + Math.abs(qy) + Math.abs(qz) - 1) / 1.7320508) * minH;\n case 8: {\n const dq = Math.sqrt(qx * qx + qz * qz);\n const dyc = mx(Math.abs(qy) - 0.5, 0) / 0.5;\n return (Math.sqrt(dq * dq + dyc * dyc) - 1) * minH * 0.5;\n }\n case 9: {\n const a = Math.sqrt(qx * qx + (qy + 1) * (qy + 1) + qz * qz) - 1;\n return mx(a, -(qy + 1)) * minH;\n }\n default:\n return 1e5;\n }\n}\n\n/**\n * Evaluates the stamp stack at every sample of the inclusive box [x0..x1, y0..y1, z0..z1] of a grid\n * with RX x RY samples per layer, writing distance, color, foundation and material into A.\n */\nexport function evalRange(\n T: Float64Array,\n list: Int32Array,\n A: VoxArrays,\n RX: number,\n RY: number,\n ox: number,\n oy: number,\n oz: number,\n sx: number,\n sy: number,\n sz: number,\n x0: number,\n x1: number,\n y0: number,\n y1: number,\n z0: number,\n z1: number,\n): void {\n const { field, cR, cG, cB, fR, fG, fB, mat } = A;\n const nL = list.length;\n const S = STAMP_STRIDE;\n for (let z = z0; z <= z1; z++) {\n const pz = oz + z * sz;\n for (let y = y0; y <= y1; y++) {\n const py = oy + y * sy;\n for (let x = x0; x <= x1; x++) {\n const px = ox + x * sx;\n const idx = x + y * RX + z * RX * RY;\n\n let d = 1e5;\n let r = T[20]!, g = T[21]!, b = T[22]!;\n let fr = T[23]!, fg = T[24]!, fb = T[25]!;\n let m0 = T[26]!, m1 = T[27]!, m2 = T[28]!, m3 = T[29]!;\n\n for (let li = 0; li < nL; li++) {\n const s = list[li]!;\n const o = s * S;\n const mode = T[o + 1]!;\n const k = T[o + 17]!;\n const dx = px - T[o + 2]!, dy = py - T[o + 3]!, dz = pz - T[o + 4]!;\n\n if (s > 0) {\n let lb = Math.sqrt(dx * dx + dy * dy + dz * dz) - T[o + 18]!;\n if (lb > 0) lb *= T[o + 19]!;\n if (mode === 0 && lb - d >= k) continue;\n if (mode === 1 && lb + d >= k) continue;\n if (mode === 3 && lb >= k * 0.5) continue;\n }\n\n const lx = T[o + 5]! * dx + T[o + 6]! * dy + T[o + 7]! * dz;\n const ly = T[o + 8]! * dx + T[o + 9]! * dy + T[o + 10]! * dz;\n const lz = T[o + 11]! * dx + T[o + 12]! * dy + T[o + 13]! * dz;\n const sd = sdShape(T[o]!, lx, ly, lz, T[o + 14]!, T[o + 15]!, T[o + 16]!);\n\n if (s > 0) {\n const kk = mx(k, 1e-4);\n if (mode === 0 ? sd - d >= kk : mode === 1 && sd + d >= kk) continue;\n }\n\n const sr = T[o + 20]!, sg = T[o + 21]!, sb = T[o + 22]!;\n const sfr = T[o + 23]!, sfg = T[o + 24]!, sfb = T[o + 25]!;\n const s0 = T[o + 26]!, s1 = T[o + 27]!, s2 = T[o + 28]!, s3 = T[o + 29]!;\n const ov = T[o + 30]!;\n\n if (mode === 0) {\n if (s === 0) {\n d = sd;\n r = sr; g = sg; b = sb;\n fr = sfr; fg = sfg; fb = sfb;\n } else {\n const h = clamp01(0.5 + (0.5 * (sd - d)) / mx(k, 1e-4));\n r = sr + (r - sr) * h; g = sg + (g - sg) * h; b = sb + (b - sb) * h;\n fr = sfr + (fr - sfr) * h; fg = sfg + (fg - sfg) * h; fb = sfb + (fb - sfb) * h;\n d = sd * (1 - h) + d * h - k * h * (1 - h);\n m0 = fround(s0 + (m0 - s0) * h);\n m1 = fround(s1 + (m1 - s1) * h);\n m2 = fround(s2 + (m2 - s2) * h);\n m3 = fround(s3 + (m3 - s3) * h);\n }\n } else if (mode === 1) {\n const h = clamp01(0.5 - (0.5 * (sd + d)) / mx(k, 1e-4));\n r = r + (sr - r) * h; g = g + (sg - g) * h; b = b + (sb - b) * h;\n fr = fr + (sfr - fr) * h; fg = fg + (sfg - fg) * h; fb = fb + (sfb - fb) * h;\n d = d * (1 - h) - sd * h + k * h * (1 - h);\n if (ov !== 0) {\n if (ov & 1) m0 = fround(m0 + (s0 - m0) * h);\n if (ov & 2) m1 = fround(m1 + (s1 - m1) * h);\n if (ov & 4) m2 = fround(m2 + (s2 - m2) * h);\n if (ov & 8) m3 = fround(m3 + (s3 - m3) * h);\n }\n } else if (mode === 2) {\n const h = clamp01(0.5 - (0.5 * (sd - d)) / mx(k, 1e-4));\n r = sr + (r - sr) * h; g = sg + (g - sg) * h; b = sb + (b - sb) * h;\n fr = sfr + (fr - sfr) * h; fg = sfg + (fg - sfg) * h; fb = sfb + (fb - sfb) * h;\n d = sd * (1 - h) + d * h + k * h * (1 - h);\n if (ov !== 0) {\n if (ov & 1) m0 = fround(s0 + (m0 - s0) * h);\n if (ov & 2) m1 = fround(s1 + (m1 - s1) * h);\n if (ov & 4) m2 = fround(s2 + (m2 - s2) * h);\n if (ov & 8) m3 = fround(s3 + (m3 - s3) * h);\n }\n } else if (mode === 3) {\n if (sd < k * 0.5) {\n const f = clamp01(1 - sd / mx(k * 0.5, 0.05));\n r = r + (sr - r) * f; g = g + (sg - g) * f; b = b + (sb - b) * f;\n fr = fr + (sfr - fr) * f; fg = fg + (sfg - fg) * f; fb = fb + (sfb - fb) * f;\n if (ov !== 0) {\n if (ov & 1) m0 = fround(m0 + (s0 - m0) * f);\n if (ov & 2) m1 = fround(m1 + (s1 - m1) * f);\n if (ov & 4) m2 = fround(m2 + (s2 - m2) * f);\n if (ov & 8) m3 = fround(m3 + (s3 - m3) * f);\n }\n }\n }\n }\n\n field[idx] = d;\n cR[idx] = r; cG[idx] = g; cB[idx] = b;\n fR[idx] = fr; fG[idx] = fg; fB[idx] = fb;\n const m4 = idx * 4;\n mat[m4] = m0; mat[m4 + 1] = m1; mat[m4 + 2] = m2; mat[m4 + 3] = m3;\n }\n }\n }\n}\n\nconst CORNER_X = [0, 1, 0, 1, 0, 1, 0, 1];\nconst CORNER_Y = [0, 0, 1, 1, 0, 0, 1, 1];\nconst CORNER_Z = [0, 0, 0, 0, 1, 1, 1, 1];\nconst EDGE_A = [0, 2, 4, 6, 0, 1, 4, 5, 0, 1, 2, 3];\nconst EDGE_B = [1, 3, 5, 7, 2, 3, 6, 7, 4, 5, 6, 7];\n\n/** Surface Nets over the whole grid, with per-vertex gradient normals and interpolated channels. */\nexport function surfaceNets(\n A: VoxArrays,\n RX: number,\n RY: number,\n RZ: number,\n ox: number,\n oy: number,\n oz: number,\n sx: number,\n sy: number,\n sz: number,\n own: number,\n): RawMesh {\n const { field, cR, cG, cB, fR, fG, fB, mat } = A;\n const pos: number[] = [];\n const nor: number[] = [];\n const col: number[] = [];\n const fnd: number[] = [];\n const mats: number[] = [];\n const idxOut: number[] = [];\n\n const cx = RX - 1, cy = RY - 1, cz = RZ - 1;\n const cellIndex = new Int32Array(Math.max(0, cx * cy * cz)).fill(-1);\n const vals = new Float64Array(8);\n const idxs = new Int32Array(8);\n let vertCount = 0;\n\n for (let z = 0; z < cz; z++) {\n for (let y = 0; y < cy; y++) {\n for (let x = 0; x < cx; x++) {\n let mask = 0;\n for (let c = 0; c < 8; c++) {\n const i = x + CORNER_X[c]! + (y + CORNER_Y[c]!) * RX + (z + CORNER_Z[c]!) * RX * RY;\n idxs[c] = i;\n const v = field[i]!;\n vals[c] = v;\n if (v < 0) mask |= 1 << c;\n }\n if (mask === 0 || mask === 255) continue;\n\n let px = 0, py = 0, pz = 0, r = 0, g = 0, b = 0, fr = 0, fg = 0, fb = 0, n = 0;\n let m0 = 0, m1 = 0, m2 = 0, m3 = 0;\n for (let e = 0; e < 12; e++) {\n const a = EDGE_A[e]!, bb = EDGE_B[e]!;\n const va = vals[a]!, vb = vals[bb]!;\n if (va < 0 === vb < 0) continue;\n const t = va / (va - vb);\n px += CORNER_X[a]! + t * (CORNER_X[bb]! - CORNER_X[a]!);\n py += CORNER_Y[a]! + t * (CORNER_Y[bb]! - CORNER_Y[a]!);\n pz += CORNER_Z[a]! + t * (CORNER_Z[bb]! - CORNER_Z[a]!);\n const ia = idxs[a]!, ib = idxs[bb]!;\n r += cR[ia]! + t * (cR[ib]! - cR[ia]!);\n g += cG[ia]! + t * (cG[ib]! - cG[ia]!);\n b += cB[ia]! + t * (cB[ib]! - cB[ia]!);\n fr += fR[ia]! + t * (fR[ib]! - fR[ia]!);\n fg += fG[ia]! + t * (fG[ib]! - fG[ia]!);\n fb += fB[ia]! + t * (fB[ib]! - fB[ia]!);\n const a4 = ia * 4, b4 = ib * 4;\n m0 += mat[a4]! + t * (mat[b4]! - mat[a4]!);\n m1 += mat[a4 + 1]! + t * (mat[b4 + 1]! - mat[a4 + 1]!);\n m2 += mat[a4 + 2]! + t * (mat[b4 + 2]! - mat[a4 + 2]!);\n m3 += mat[a4 + 3]! + t * (mat[b4 + 3]! - mat[a4 + 3]!);\n n++;\n }\n const v0 = vals[0]!, v1 = vals[1]!, v2 = vals[2]!, v3 = vals[3]!;\n const v4 = vals[4]!, v5 = vals[5]!, v6 = vals[6]!, v7 = vals[7]!;\n const gx = (v1 - v0 + (v3 - v2) + (v5 - v4) + (v7 - v6)) / sx;\n const gy = (v2 - v0 + (v3 - v1) + (v6 - v4) + (v7 - v5)) / sy;\n const gz = (v4 - v0 + (v5 - v1) + (v6 - v2) + (v7 - v3)) / sz;\n const gl = Math.sqrt(gx * gx + gy * gy + gz * gz);\n if (gl > 1e-12) nor.push(gx / gl, gy / gl, gz / gl);\n else nor.push(0, 1, 0);\n const inv = 1 / n;\n pos.push(ox + (x + px * inv) * sx, oy + (y + py * inv) * sy, oz + (z + pz * inv) * sz);\n col.push(r * inv, g * inv, b * inv);\n fnd.push(fr * inv, fg * inv, fb * inv);\n mats.push(m0 * inv, m1 * inv, m2 * inv, m3 * inv);\n cellIndex[x + y * cx + z * cx * cy] = vertCount++;\n }\n }\n }\n\n const dims = [RX, RY, RZ];\n const cdims = [cx, cy, cz];\n const cs = [1, cx, cx * cy];\n const fs = [1, RX, RX * RY];\n const p = [0, 0, 0];\n for (let z = 0; z < RZ; z++) {\n for (let y = 0; y < RY; y++) {\n for (let x = 0; x < RX; x++) {\n p[0] = x; p[1] = y; p[2] = z;\n const i = x + y * RX + z * RX * RY;\n for (let axis = 0; axis < 3; axis++) {\n const v = (axis + 1) % 3;\n const w = (axis + 2) % 3;\n const pa = p[axis]!, pv = p[v]!, pw = p[w]!;\n if (pa >= dims[axis]! - 1 || pa < own) continue;\n if (pv < 1 || pv > cdims[v]! - 1) continue;\n if (pw < 1 || pw > cdims[w]! - 1) continue;\n const in0 = field[i]! < 0;\n const in1 = field[i + fs[axis]!]! < 0;\n if (in0 === in1) continue;\n const base = pa * cs[axis]!;\n const a = cellIndex[base + (pv - 1) * cs[v]! + (pw - 1) * cs[w]!]!;\n const b = cellIndex[base + pv * cs[v]! + (pw - 1) * cs[w]!]!;\n const c = cellIndex[base + pv * cs[v]! + pw * cs[w]!]!;\n const d = cellIndex[base + (pv - 1) * cs[v]! + pw * cs[w]!]!;\n if (a < 0 || b < 0 || c < 0 || d < 0) continue;\n if (in0) idxOut.push(a, b, c, a, c, d);\n else idxOut.push(a, c, b, a, d, c);\n }\n }\n }\n }\n\n const positions = Float32Array.from(pos);\n let x0 = 0, y0 = 0, z0 = 0, x1 = 0, y1 = 0, z1 = 0;\n if (positions.length > 0) {\n x0 = x1 = positions[0]!;\n y0 = y1 = positions[1]!;\n z0 = z1 = positions[2]!;\n for (let i = 3; i < positions.length; i += 3) {\n const px = positions[i]!, py = positions[i + 1]!, pz = positions[i + 2]!;\n if (px < x0) x0 = px;\n if (px > x1) x1 = px;\n if (py < y0) y0 = py;\n if (py > y1) y1 = py;\n if (pz < z0) z0 = pz;\n if (pz > z1) z1 = pz;\n }\n }\n return {\n positions,\n normals: Float32Array.from(nor),\n colors: Float32Array.from(col),\n foundation: Float32Array.from(fnd),\n material: Float32Array.from(mats),\n indices: Uint32Array.from(idxOut),\n bounds: [x0, y0, z0, x1, y1, z1],\n };\n}\n", "import { SEGMENT_STRIDE, type RawSkin } from \"../abi.js\";\n\n/** POC skeleton.js: auto-weights softness (larger = softer blends between bones). */\nexport const WEIGHT_FALLOFF = 0.08;\n\n/**\n * Distance-based auto weights (POC computeSkinWeights): each bone's distance is its nearest segment's\n * squared distance; the 4 nearest bones get 1 / (d + falloff)^2, normalized.\n */\nexport function skinWeights(positions: Float32Array, segs: Float64Array, segCount: number, boneCount: number): RawSkin {\n const n = Math.floor(positions.length / 3);\n const I = new Float32Array(n * 4);\n const W = new Float32Array(n * 4);\n if (boneCount === 0) return { boneIndices: I, boneWeights: W };\n const dist = new Float32Array(boneCount);\n for (let v = 0; v < n; v++) {\n const px = positions[v * 3]!, py = positions[v * 3 + 1]!, pz = positions[v * 3 + 2]!;\n dist.fill(Infinity);\n for (let s = 0; s < segCount; s++) {\n const o = s * SEGMENT_STRIDE;\n const ax = segs[o]!, ay = segs[o + 1]!, az = segs[o + 2]!;\n const abx = segs[o + 3]! - ax, aby = segs[o + 4]! - ay, abz = segs[o + 5]! - az;\n const bone = segs[o + 6]!;\n const apx = px - ax, apy = py - ay, apz = pz - az;\n const len2 = abx * abx + aby * aby + abz * abz;\n let t = len2 > 1e-8 ? (apx * abx + apy * aby + apz * abz) / len2 : 0;\n t = t < 0 ? 0 : t > 1 ? 1 : t;\n const dx = apx - abx * t, dy = apy - aby * t, dz = apz - abz * t;\n const d2 = dx * dx + dy * dy + dz * dz;\n if (d2 < dist[bone]!) dist[bone] = d2;\n }\n let wsum = 0;\n for (let k = 0; k < 4; k++) {\n let bi = -1;\n let m = Infinity;\n for (let j = 0; j < boneCount; j++) {\n if (dist[j]! < m) {\n m = dist[j]!;\n bi = j;\n }\n }\n if (bi < 0) {\n I[v * 4 + k] = 0;\n W[v * 4 + k] = 0;\n continue;\n }\n const q = m + WEIGHT_FALLOFF;\n const w = 1 / (q * q);\n I[v * 4 + k] = bi;\n W[v * 4 + k] = w;\n wsum += w;\n dist[bi] = Infinity;\n }\n for (let k = 0; k < 4; k++) W[v * 4 + k] = W[v * 4 + k]! / wsum;\n }\n return { boneIndices: I, boneWeights: W };\n}\n", "import type { MesherCore, RawMesh } from \"../abi.js\";\nimport { evalRange, newVoxArrays, surfaceNets, type VoxArrays } from \"./mesher.js\";\nimport { skinWeights } from \"./skin.js\";\n\n/** The TypeScript mesher core: the WASM fallback and the parity oracle. */\nexport function createReferenceCore(): MesherCore {\n const slots = new Map<number, VoxArrays>();\n const scratch = new Map<number, VoxArrays>();\n return {\n kind: \"reference\",\n mesh(table, stampCount, params, list): RawMesh {\n const RX = params[6]!, RY = params[7]!, RZ = params[8]!;\n const total = RX * RY * RZ;\n const slot = params[10]!;\n let A: VoxArrays | undefined;\n let full = true;\n if (slot >= 0) {\n A = slots.get(slot);\n if (A && A.field.length === total) full = false;\n else {\n A = newVoxArrays(total);\n slots.set(slot, A);\n }\n } else {\n A = scratch.get(total);\n if (!A) {\n A = newVoxArrays(total);\n scratch.set(total, A);\n }\n }\n let order = list;\n if (!order || order.length === 0) {\n order = new Int32Array(stampCount);\n for (let i = 0; i < stampCount; i++) order[i] = i;\n }\n const box = full ? [0, RX - 1, 0, RY - 1, 0, RZ - 1] : [params[11]!, params[12]!, params[13]!, params[14]!, params[15]!, params[16]!];\n if (stampCount > 0) {\n evalRange(table, order, A, RX, RY, params[0]!, params[1]!, params[2]!, params[3]!, params[4]!, params[5]!,\n box[0]!, box[1]!, box[2]!, box[3]!, box[4]!, box[5]!);\n } else {\n A.field.fill(1e5);\n }\n return surfaceNets(A, RX, RY, RZ, params[0]!, params[1]!, params[2]!, params[3]!, params[4]!, params[5]!, params[9]!);\n },\n dropSlot(slot) {\n slots.delete(slot);\n },\n skin(positions, segments, segmentCount, boneCount) {\n return skinWeights(positions, segments, segmentCount, boneCount);\n },\n };\n}\n", "import type { ColorRef, FixedColor, Palette, Rgb } from \"@dreamy/api\";\n\n/** Fixed colors: always available, never edited (POC FIXED_COLORS). */\nexport const FIXED_COLORS: { readonly [C in FixedColor]: Rgb } = { tongue: 0xf4768f, teeth: 0xfbfbfa, black: 0x111111 };\n\n/** POC colorHex fallback for an unknown reference. */\nconst MISSING = 0xff00ff;\n\nexport function colorHex(ref: ColorRef, palette: Palette): Rgb {\n if (ref === \"tongue\" || ref === \"teeth\" || ref === \"black\") return FIXED_COLORS[ref];\n const v = palette[ref];\n return typeof v === \"number\" ? v : MISSING;\n}\n\n/**\n * The shader-space RGB of a color: byte / 255 per channel, exactly what the POC's r128\n * `new THREE.Color(hex)` held (and its shaders treated as linear).\n */\nexport function rgbOf(ref: ColorRef, palette: Palette): readonly [number, number, number] {\n const hex = colorHex(ref, palette);\n return [((hex >> 16) & 255) / 255, ((hex >> 8) & 255) / 255, (hex & 255) / 255];\n}\n", "import type { Quaternion } from \"@dreamy/api\";\n\n/** Row-major 3x3 matrix. */\nexport type Mat3 = readonly [number, number, number, number, number, number, number, number, number];\n\nexport const IDENTITY: Mat3 = [1, 0, 0, 0, 1, 0, 0, 0, 1];\n\n/** Rotation of a (normalized) quaternion, as THREE.Matrix4.makeRotationFromQuaternion. */\nexport function fromQuaternion(q: Quaternion): Mat3 {\n const l = Math.sqrt(q.x * q.x + q.y * q.y + q.z * q.z + q.w * q.w) || 1;\n const x = q.x / l, y = q.y / l, z = q.z / l, w = q.w / l;\n const x2 = x + x, y2 = y + y, z2 = z + z;\n const xx = x * x2, xy = x * y2, xz = x * z2;\n const yy = y * y2, yz = y * z2, zz = z * z2;\n const wx = w * x2, wy = w * y2, wz = w * z2;\n return [1 - (yy + zz), xy - wz, xz + wy, xy + wz, 1 - (xx + zz), yz - wx, xz - wy, yz + wx, 1 - (xx + yy)];\n}\n\n/** Rotation by `angle` about a unit axis, as THREE.Matrix4.makeRotationAxis. */\nexport function fromAxisAngle(ax: number, ay: number, az: number, angle: number): Mat3 {\n const c = Math.cos(angle), s = Math.sin(angle), t = 1 - c;\n const tx = t * ax, ty = t * ay;\n return [\n tx * ax + c, tx * ay - s * az, tx * az + s * ay,\n tx * ay + s * az, ty * ay + c, ty * az - s * ax,\n tx * az - s * ay, ty * az + s * ax, t * az * az + c,\n ];\n}\n\nexport function scale(sx: number, sy: number, sz: number): Mat3 {\n return [sx, 0, 0, 0, sy, 0, 0, 0, sz];\n}\n\nexport function mul(a: Mat3, b: Mat3): Mat3 {\n const o: number[] = [];\n for (let r = 0; r < 3; r++) {\n 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]!);\n }\n return o as unknown as Mat3;\n}\n\nexport function transpose(m: Mat3): Mat3 {\n return [m[0], m[3], m[6], m[1], m[4], m[7], m[2], m[5], m[8]];\n}\n\nexport function det(m: Mat3): number {\n 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]);\n}\n\nexport function apply(m: Mat3, x: number, y: number, z: number): [number, number, number] {\n 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];\n}\n", "import type { ColorRef, MaterialOverrides, Sculpt, Stamp, StampMode, Symmetry } from \"@dreamy/api\";\n\n/** A stamp's effective settings: its smear group's when it belongs to one (POC resolveStampProps). */\nexport type StampProps = {\n readonly mode: StampMode;\n readonly blend: number;\n readonly color: ColorRef;\n readonly foundationColor: ColorRef;\n readonly material: MaterialOverrides;\n readonly symmetry: Symmetry | undefined;\n};\n\n/**\n * The group wins for mode, color, foundation, blend and symmetry. Material overrides stay the stamp's\n * (a smear group carries none in the contract). Colors fall back to the sculpt's look; a foundation\n * follows the stamp's own color when only that is set, else the look's foundation.\n */\nexport function resolveStampProps(stamp: Stamp, sculpt: Sculpt): StampProps {\n const group = stamp.smearGroupId === undefined ? undefined : sculpt.smearGroups.find((g) => g.id === stamp.smearGroupId);\n const look = sculpt.look;\n if (group) {\n return {\n mode: group.mode,\n blend: group.blend,\n color: group.color,\n foundationColor: group.foundationColor ?? group.color,\n material: stamp.material ?? {},\n symmetry: group.symmetry,\n };\n }\n return {\n mode: stamp.mode,\n blend: stamp.blend ?? look.blend,\n color: stamp.color ?? look.color,\n foundationColor: stamp.foundationColor ?? (stamp.color !== undefined ? stamp.color : look.foundationColor),\n material: stamp.material ?? {},\n symmetry: stamp.symmetry,\n };\n}\n", "import type { Pivot, SymmetryAxis, Vec3 } from \"@dreamy/api\";\nimport { apply, det, fromAxisAngle, fromQuaternion, IDENTITY, mul, scale, transpose, type Mat3 } from \"./mat3.js\";\n\n/* POC symmetry.js: kaleidoscope instances are derived at mesh time, never stored. */\n\nexport const SYM_MAX_N = 12;\nexport const SYM_MAX_INSTANCES = 128;\nexport const SYM_STAMP_CAP = 1024;\n\nconst AXIS_ORDER: readonly SymmetryAxis[] = [\"x\", \"y\", \"z\"];\nconst AXIS_VEC = { x: [1, 0, 0], y: [0, 1, 0], z: [0, 0, 1] } as const;\nconst MIRROR = { x: scale(-1, 1, 1), y: scale(1, -1, 1), z: scale(1, 1, -1) } as const;\nconst FLIP_X = scale(-1, 1, 1);\n\nexport function symAxesOf(axes: readonly SymmetryAxis[] | undefined): SymmetryAxis[] {\n return AXIS_ORDER.filter((a) => (axes ?? []).includes(a));\n}\n\n/** N clamped to [1, 12] and so that N^(axis count) <= 128. */\nexport function symClampN(n: number, axes: readonly SymmetryAxis[] | undefined): number {\n let N = Math.max(1, Math.min(SYM_MAX_N, Math.round(n) || 1));\n const len = symAxesOf(axes).length;\n while (len > 0 && N > 1 && Math.pow(N, len) > SYM_MAX_INSTANCES) N--;\n return N;\n}\n\nconst isIdentity = (m: Mat3): boolean => m.every((v, i) => Math.abs(v - IDENTITY[i]!) <= 1e-6);\n\nconst matCache = new Map<string, readonly Mat3[]>();\n\n/**\n * Every non-identity transform of a source shape: k * 360/N about each selected axis, composed X then Y\n * then Z; N = 2 mirrors across the axis' plane. No axis: off (N = 1) or N-fold about Y.\n */\nexport function symInstanceMatrices(n: number, axes: readonly SymmetryAxis[] | undefined): readonly Mat3[] {\n const sel = symAxesOf(axes);\n const key = n + \"|\" + sel.join(\"\");\n const hit = matCache.get(key);\n if (hit) return hit;\n const plan = sel.length ? sel : n > 1 ? [\"y\"] : [];\n let list: Mat3[] = plan.length ? [IDENTITY] : [];\n for (const a of AXIS_ORDER) {\n if (!plan.includes(a)) continue;\n const gens: Mat3[] = [];\n if (n === 2) gens.push(IDENTITY, MIRROR[a]);\n else {\n const v = AXIS_VEC[a];\n for (let k = 0; k < n; k++) gens.push(fromAxisAngle(v[0], v[1], v[2], (k * Math.PI * 2) / n));\n }\n const next: Mat3[] = [];\n for (const base of list) for (const g of gens) next.push(mul(base, g));\n list = next;\n }\n const seen = new Set<string>();\n const unique: Mat3[] = [];\n for (const m of list) {\n if (isIdentity(m)) continue;\n const k = m.map((v) => Math.round(v * 1e5)).join(\",\");\n if (seen.has(k)) continue;\n seen.add(k);\n unique.push(m);\n }\n matCache.set(key, unique);\n return unique;\n}\n\nexport type Placement = {\n readonly position: readonly [number, number, number];\n /** Shape rotation (local -> sculpt space), a proper rotation. */\n readonly rotation: Mat3;\n};\n\n/**\n * Instance placements of one shape about the pivot. A reflection has no rotation, but every primitive\n * is symmetric about its local x = 0 plane, so L*R*Fx (a proper rotation) replaces the mirrored L*R.\n */\nexport function symInstancesOf(position: Vec3, rotation: Mat3, pivot: Pivot, n: number, axes: readonly SymmetryAxis[] | undefined): Placement[] {\n const P = fromQuaternion(pivot.rotation);\n const Pinv = transpose(P);\n const pp = pivot.position;\n return symInstanceMatrices(n, axes).map((L0) => {\n const L = mul(mul(P, L0), Pinv);\n const r = apply(L, position.x - pp.x, position.y - pp.y, position.z - pp.z);\n let M = mul(L, rotation);\n if (det(L) < 0) M = mul(M, FLIP_X);\n return { position: [pp.x + r[0], pp.y + r[1], pp.z + r[2]], rotation: M };\n });\n}\n", "import type { Palette, Sculpt, StampShape } from \"@dreamy/api\";\nimport { MODE_CODE, SHAPE_CODE, STAMP_STRIDE } from \"../abi.js\";\nimport { rgbOf } from \"./colors.js\";\nimport { fromQuaternion, type Mat3 } from \"./mat3.js\";\nimport { resolveStampProps } from \"./props.js\";\nimport { SYM_STAMP_CAP, symClampN, symInstancesOf } from \"./symmetry.js\";\n\nexport type Packed = {\n /** STAMP_STRIDE f64 per expanded stamp (see abi.ts). */\n readonly table: Float64Array;\n readonly count: number;\n /** Derived copies dropped by the 1024-stamp cap. */\n readonly overflow: number;\n readonly maxBlend: number;\n /** Grid box (stamp bounds padded by the blend margin). */\n readonly bMin: readonly [number, number, number];\n readonly bSize: readonly [number, number, number];\n};\n\n/** Resolution clamp: the POC base is 16\u201364 and LOD goes down to 12. */\nexport const MIN_RESOLUTION = 4;\nexport const MAX_RESOLUTION = 128;\n\nexport function clampResolution(r: number): number {\n return Math.max(MIN_RESOLUTION, Math.min(MAX_RESOLUTION, Math.round(r) || 36));\n}\n\n/** POC lod.js: the three levels derived from a base resolution, finest first. */\nexport function lodLevels(base: number): readonly [number, number, number] {\n const r = Math.max(16, Math.min(64, Math.round(base) || 36));\n return [r, Math.max(16, Math.round(r * 0.67)), Math.max(12, Math.round(r * 0.44))];\n}\n\n\n/** Bounding-sphere radius used by the far-away early-outs. */\nfunction boundRadius(shape: StampShape, hx: number, hy: number, hz: number): number {\n if (shape === \"sphere\") return Math.max(hx, hy, hz);\n if (shape === \"cylinder\") {\n const r = Math.max(hx, hz);\n return Math.sqrt(r * r + hy * hy);\n }\n if (shape === \"torus\") {\n const r = 1.1 * Math.max(hx, hz), t = 0.3 * hy;\n return Math.sqrt(r * r + t * t);\n }\n return Math.sqrt(hx * hx + hy * hy + hz * hz);\n}\n\n/**\n * Expands symmetry, resolves smear-group props, colors and material channels, and packs the stamp\n * table plus the grid box (POC _extractSculptMeshImpl up to the voxel pass).\n */\nexport function packSculpt(sculpt: Sculpt, palette: Palette): Packed {\n type Row = { shape: StampShape; pos: readonly [number, number, number]; rot: Mat3; sx: number; sy: number; sz: number; si: number };\n const rows: Row[] = [];\n const props = sculpt.stamps.map((s) => resolveStampProps(s, sculpt));\n let overflow = 0;\n sculpt.stamps.forEach((s, si) => {\n const rot = fromQuaternion(s.rotation);\n const base = { shape: s.shape, sx: s.scale.x, sy: s.scale.y, sz: s.scale.z, si };\n rows.push({ ...base, pos: [s.position.x, s.position.y, s.position.z], rot });\n const sym = props[si]!.symmetry;\n const n = symClampN(sym?.count ?? 1, sym?.axes);\n for (const inst of symInstancesOf(s.position, rot, sculpt.pivot, n, sym?.axes)) {\n if (rows.length >= SYM_STAMP_CAP) {\n overflow++;\n continue;\n }\n rows.push({ ...base, pos: inst.position, rot: inst.rotation });\n }\n });\n\n const count = rows.length;\n const T = new Float64Array(count * STAMP_STRIDE);\n const mat = sculpt.look.material;\n const defaults = [mat.roughness, mat.metalness, mat.glow, 1];\n let lo = [Infinity, Infinity, Infinity], hi = [-Infinity, -Infinity, -Infinity];\n let maxBlend = -Infinity;\n rows.forEach((row, i) => {\n const p = props[row.si]!;\n const o = i * STAMP_STRIDE;\n const hx = row.sx * 0.5, hy = row.sy * 0.5, hz = row.sz * 0.5;\n T[o] = SHAPE_CODE[row.shape] ?? -1;\n T[o + 1] = MODE_CODE[p.mode] ?? 4;\n T[o + 2] = row.pos[0]; T[o + 3] = row.pos[1]; T[o + 4] = row.pos[2];\n // inverse rotation = transpose, row-major\n const R = row.rot;\n T[o + 5] = R[0]; T[o + 6] = R[3]; T[o + 7] = R[6];\n T[o + 8] = R[1]; T[o + 9] = R[4]; T[o + 10] = R[7];\n T[o + 11] = R[2]; T[o + 12] = R[5]; T[o + 13] = R[8];\n T[o + 14] = hx; T[o + 15] = hy; T[o + 16] = hz;\n T[o + 17] = p.blend;\n T[o + 18] = boundRadius(row.shape, hx, hy, hz);\n T[o + 19] = row.shape === \"cube\" ? 1 : Math.min(hx, hy, hz) / Math.max(hx, hy, hz, 1e-4);\n const c = rgbOf(p.color, palette), f = rgbOf(p.foundationColor, palette);\n T[o + 20] = c[0]; T[o + 21] = c[1]; T[o + 22] = c[2];\n T[o + 23] = f[0]; T[o + 24] = f[1]; T[o + 25] = f[2];\n const own = [p.material.roughness, p.material.metalness, p.material.glow, p.material.flecks === undefined ? undefined : p.material.flecks ? 1 : 0];\n let mask = 0;\n for (let k = 0; k < 4; k++) {\n const v = own[k];\n if (v !== undefined) mask |= 1 << k;\n T[o + 26 + k] = Math.fround(v ?? defaults[k]!);\n }\n T[o + 30] = mask;\n maxBlend = Math.max(maxBlend, p.blend);\n const pad = [row.sx * 0.7, row.sy * 0.7, row.sz * 0.7];\n for (let a = 0; a < 3; a++) {\n lo[a] = Math.min(lo[a]!, row.pos[a]! - pad[a]!);\n hi[a] = Math.max(hi[a]!, row.pos[a]! + pad[a]!);\n }\n });\n if (count === 0) {\n lo = [0, 0, 0];\n hi = [0, 0, 0];\n maxBlend = 0;\n }\n const size0 = [hi[0]! - lo[0]!, hi[1]! - lo[1]!, hi[2]! - lo[2]!];\n const margin = Math.max(Math.min(0.6, 0.35 * Math.max(size0[0]!, size0[1]!, size0[2]!)), maxBlend * 1.5);\n const bMin = [lo[0]! - margin, lo[1]! - margin, lo[2]! - margin] as const;\n const bMax = [hi[0]! + margin, hi[1]! + margin, hi[2]! + margin] as const;\n return {\n table: T,\n count,\n overflow,\n maxBlend,\n bMin,\n bSize: [bMax[0] - bMin[0], bMax[1] - bMin[1], bMax[2] - bMin[2]],\n };\n}\n", "/* Chunked clipmap LOD for large standalone sculpts (the POC's chunks.js), on the mesher ABI.\n\n A big sculpt is split into fixed-size chunks (16 cells per side at the finest level). Each chunk is meshed on\n its own at a level chosen by its distance to the camera: level 0 = finest, each next level has cells twice as\n big. All chunks share one lattice and own only their low side, so same-level neighbours produce identical\n border vertices; normals come from the field gradient, so there are no lighting seams. Where neighbours have\n different levels the surface does not line up, so such chunks get skirts (strips hung inward from their open\n border edges). The chunk meshes are merged into one result, so the viewport sees a single mesh.\n\n Edits only rebuild the chunks near the stamps that changed (the voxel cache's reach rule); camera moves only\n rebuild chunks whose wanted level changed. Runtime state per key, never saved. */\nimport { PARAMS_LEN, STAMP_STRIDE, type MesherCore } from \"./abi.js\";\nimport type { Packed } from \"./prep/pack.js\";\n\nexport const CHUNK_MIN_EXTENT = 8; // sculpts at least this big (local units, longest side) use chunks\nexport const CHUNK_CELLS = 144; // finest cells across the longest side\nconst CHUNK_C0 = 16; // cells per chunk side at the finest level\nconst CHUNK_LEVELS = 3;\nconst CHUNK_TARGET_PX = 20; // largest on-screen size, in pixels, one cell may have\nconst CHUNK_HYST = 0.25; // going coarser needs this much slack, so orbiting doesn't flicker\n\nexport type ChunkView = { readonly camera: { readonly x: number; readonly y: number; readonly z: number }; readonly pixelsPerUnitAtDistance1: number };\n\ntype Part = {\n readonly nV: number;\n readonly pos: Float32Array;\n readonly nor: Float32Array;\n readonly col: Float32Array;\n readonly fcol: Float32Array;\n readonly mat: Float32Array;\n readonly idx: Uint32Array;\n};\nconst EMPTY: Part = {\n nV: 0, pos: new Float32Array(0), nor: new Float32Array(0), col: new Float32Array(0),\n fcol: new Float32Array(0), mat: new Float32Array(0), idx: new Uint32Array(0),\n};\n\ntype Rec = {\n readonly i: number;\n readonly j: number;\n readonly k: number;\n level: number | null;\n readonly meshes: Map<number, Part>;\n skirt: Part | null;\n skirtDepth: number;\n skirtOf: Part | null;\n};\n\nexport type ChunkState = {\n readonly h0: number;\n readonly W: number;\n readonly chunks: Map<string, Rec>;\n table: Float64Array;\n count: number;\n};\n\nexport type ChunkOutput = Part & { readonly bounds: readonly [number, number, number, number, number, number]; readonly chunks: number };\n\n/** Whether this sculpt meshes in chunks (a little slack once chunked, so it doesn't flip back and forth). */\nexport function wantsChunks(P: Packed, chunkedBefore: boolean): boolean {\n const ext = Math.max(P.bSize[0], P.bSize[1], P.bSize[2]);\n return ext >= CHUNK_MIN_EXTENT * (chunkedBefore ? 0.8 : 1);\n}\n\n// Lattice step 1 / 1.25 / 1.5 / 2 / 2.5 / 3 / 4 / 5 / 6 / 8 \u00D7 10^k: growing the sculpt a little keeps the lattice\nfunction niceStep(x: number): number {\n const e = Math.floor(Math.log10(x)), m = x / Math.pow(10, e);\n 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);\n return 10 * Math.pow(10, e);\n}\n\nfunction suffixMax(table: Float64Array, count: number): Float64Array {\n const o = new Float64Array(count + 1);\n for (let i = count - 1; i >= 0; i--) o[i] = Math.max(o[i + 1]!, table[i * STAMP_STRIDE + 17]!);\n return o;\n}\n\n/** World boxes the changed stamps can reach ([x0,y0,z0,x1,y1,z1,margin]), or null: treat everything as changed. */\nfunction dirtyBoxes(oldT: Float64Array, nOld: number, cur: Float64Array, nNew: number): number[][] | null {\n const nMin = Math.min(nOld, nNew), changedOld: number[] = [], changedNew: number[] = [];\n for (let i = 0; i < nMin; i++) {\n const a = i * STAMP_STRIDE;\n for (let k = 0; k < STAMP_STRIDE; k++) {\n if (oldT[a + k] !== cur[a + k]) {\n changedOld.push(i);\n changedNew.push(i);\n break;\n }\n }\n }\n for (let i = nMin; i < nOld; i++) changedOld.push(i);\n for (let i = nMin; i < nNew; i++) changedNew.push(i);\n const boxes: number[][] = [];\n let bad = false;\n const reach = (T: Float64Array, suf: Float64Array, i: number): void => {\n const o = i * STAMP_STRIDE, mode = T[o + 1]!, k = T[o + 17]!;\n if (mode === 2 || mode > 3) { bad = true; return; } // intersect can change values anywhere\n const kk = mode === 3 ? 0.5 * k : k + suf[i + 1]!;\n const inv = 1.25 / Math.max(T[o + 19]!, 0.02), r = T[o + 18]! + kk * inv;\n const x = T[o + 2]!, y = T[o + 3]!, z = T[o + 4]!;\n boxes.push([x - r, y - r, z - r, x + r, y + r, z + r, 3 * inv]);\n };\n const sufOld = suffixMax(oldT, nOld), sufNew = suffixMax(cur, nNew);\n for (const i of changedOld) reach(oldT, sufOld, i);\n for (const i of changedNew) reach(cur, sufNew, i);\n return bad ? null : boxes;\n}\n\n/** Stamps that can reach a chunk box (subtract / intersect always kept, and stamp 0); null when no add reaches it. */\nfunction shapeList(T: Float64Array, n: number, suf: Float64Array, lo: number[], hi: number[], step: number): Int32Array | null {\n const out: number[] = [];\n let hasAdd = false;\n for (let i = 0; i < n; i++) {\n const o = i * STAMP_STRIDE, mode = T[o + 1]!;\n let reaches = true;\n if (mode === 0 || mode === 3) {\n const kk = mode === 3 ? 0.5 * T[o + 17]! : T[o + 17]! + suf[i + 1]!;\n const r = T[o + 18]! + ((kk + 3 * step) * 1.25) / Math.max(T[o + 19]!, 0.02);\n const px = T[o + 2]!, py = T[o + 3]!, pz = T[o + 4]!;\n 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]!);\n reaches = dx * dx + dy * dy + dz * dz <= r * r;\n }\n if (mode === 0 && reaches) hasAdd = true;\n if (reaches || i === 0) out.push(i);\n }\n return hasAdd ? Int32Array.from(out) : null;\n}\n\nfunction buildChunk(core: MesherCore, st: ChunkState, P: Packed, suf: Float64Array, rec: Rec, L: number): Part {\n const h0 = st.h0, f = 1 << L, n = CHUNK_C0 >> L, h = f * h0, RX = n + 2;\n // samples run from one cell before the chunk to its far border, so borders line up with the neighbours'\n const ox = (rec.i * CHUNK_C0 - f) * h0, oy = (rec.j * CHUNK_C0 - f) * h0, oz = (rec.k * CHUNK_C0 - f) * h0;\n const W = st.W, pad = 2 * h;\n const list = shapeList(P.table, P.count, suf,\n [rec.i * W - pad, rec.j * W - pad, rec.k * W - pad], [(rec.i + 1) * W + pad, (rec.j + 1) * W + pad, (rec.k + 1) * W + pad], h);\n if (!list) return EMPTY;\n const params = new Float64Array(PARAMS_LEN);\n params.set([ox, oy, oz, h, h, h, RX, RX, RX, 1, -1, 0, RX - 1, 0, RX - 1, 0, RX - 1]);\n const m = core.mesh(P.table, P.count, params, list);\n if (!m.indices.length) return EMPTY;\n return {\n nV: m.positions.length / 3, pos: m.positions.slice(), nor: m.normals.slice(), col: m.colors.slice(),\n fcol: m.foundation.slice(), mat: m.material.slice(), idx: m.indices.slice(),\n };\n}\n\n// Strips hung inward from every open border edge, so a crack to a neighbour of another level is hidden.\n// Both windings, so it shows whichever way the material culls.\nfunction skirtOf(mesh: Part, depth: number): Part | null {\n const idx = mesh.idx, cnt = new Map<number, number>();\n const key = (a: number, b: number) => (a < b ? a * mesh.nV + b : b * mesh.nV + a);\n for (let t = 0; t < idx.length; t += 3) {\n for (let e = 0; e < 3; e++) {\n const kk = key(idx[t + e]!, idx[t + ((e + 1) % 3)]!);\n cnt.set(kk, (cnt.get(kk) ?? 0) + 1);\n }\n }\n const edges: number[] = [];\n for (let t = 0; t < idx.length; t += 3) {\n for (let e = 0; e < 3; e++) {\n const a = idx[t + e]!, b = idx[t + ((e + 1) % 3)]!;\n if (cnt.get(key(a, b)) === 1) edges.push(a, b);\n }\n }\n const nE = edges.length / 2;\n if (!nE) return null;\n const nV = nE * 4, pos = new Float32Array(nV * 3), nor = new Float32Array(nV * 3), col = new Float32Array(nV * 3);\n const fcol = new Float32Array(nV * 3), mat = new Float32Array(nV * 4), ix = new Uint32Array(nE * 12);\n for (let e = 0; e < nE; e++) {\n const a = edges[e * 2]!, b = edges[e * 2 + 1]!, o = e * 4;\n [a, b, b, a].forEach((src, q) => {\n const d = (o + q) * 3, s = src * 3, drop = q >= 2 ? depth : 0;\n for (let c = 0; c < 3; c++) {\n pos[d + c] = mesh.pos[s + c]! - mesh.nor[s + c]! * drop;\n nor[d + c] = mesh.nor[s + c]!;\n col[d + c] = mesh.col[s + c]!;\n fcol[d + c] = mesh.fcol[s + c]!;\n }\n for (let c = 0; c < 4; c++) mat[(o + q) * 4 + c] = mesh.mat[src * 4 + c]!;\n });\n ix.set([o, o + 1, o + 2, o, o + 2, o + 3, o, o + 2, o + 1, o, o + 3, o + 2], e * 12);\n }\n return { nV, pos, nor, col, fcol, mat, idx: ix };\n}\n\nfunction wantLevel(st: ChunkState, rec: Rec, view: ChunkView): number {\n const W = st.W, c = view.camera;\n const dx = Math.max(rec.i * W - c.x, 0, c.x - (rec.i + 1) * W);\n const dy = Math.max(rec.j * W - c.y, 0, c.y - (rec.j + 1) * W);\n const dz = Math.max(rec.k * W - c.z, 0, c.z - (rec.k + 1) * W);\n const dist = Math.max(Math.sqrt(dx * dx + dy * dy + dz * dz), 1e-3);\n const pxAt = (L: number) => (st.h0 * (1 << L) * view.pixelsPerUnitAtDistance1) / dist;\n let ideal = 0;\n for (let L = CHUNK_LEVELS - 1; L >= 0; L--) if (pxAt(L) <= CHUNK_TARGET_PX) { ideal = L; break; }\n const cur = rec.level;\n if (cur === null || ideal <= cur) return ideal; // more detail is wanted at once\n return pxAt(ideal) * (1 + CHUNK_HYST) <= CHUNK_TARGET_PX ? ideal : cur;\n}\n\nfunction skirtFor(st: ChunkState, rec: Rec, mesh: Part): Part | null {\n let depth = 0;\n for (let a = -1; a <= 1; a++) for (let b = -1; b <= 1; b++) for (let c = -1; c <= 1; c++) {\n if (!a && !b && !c) continue;\n const nb = st.chunks.get(`${rec.i + a},${rec.j + b},${rec.k + c}`);\n if (!nb || nb.level === null || nb.level === rec.level) continue;\n const nm = nb.meshes.get(nb.level);\n if (!nm || !nm.nV) continue;\n depth = Math.max(depth, st.h0 * (1 << Math.max(nb.level, rec.level ?? 0)));\n }\n if (!depth) return null;\n if (rec.skirt && rec.skirtDepth === depth && rec.skirtOf === mesh) return rec.skirt;\n rec.skirt = skirtOf(mesh, depth);\n rec.skirtDepth = depth;\n rec.skirtOf = mesh;\n return rec.skirt;\n}\n\nfunction merge(st: ChunkState): ChunkOutput {\n const parts: Part[] = [];\n let nV = 0, nI = 0;\n for (const rec of st.chunks.values()) {\n const m = rec.level === null ? null : rec.meshes.get(rec.level);\n if (!m || !m.nV) continue;\n parts.push(m);\n nV += m.nV;\n nI += m.idx.length;\n const sk = skirtFor(st, rec, m);\n if (sk) { parts.push(sk); nV += sk.nV; nI += sk.idx.length; }\n }\n const pos = new Float32Array(nV * 3), nor = new Float32Array(nV * 3), col = new Float32Array(nV * 3);\n const fcol = new Float32Array(nV * 3), mat = new Float32Array(nV * 4), idx = new Uint32Array(nI);\n let v = 0, t = 0;\n const lo = [Infinity, Infinity, Infinity], hi = [-Infinity, -Infinity, -Infinity];\n for (const m of parts) {\n pos.set(m.pos, v * 3); nor.set(m.nor, v * 3); col.set(m.col, v * 3); fcol.set(m.fcol, v * 3); mat.set(m.mat, v * 4);\n for (let q = 0; q < m.idx.length; q++) idx[t + q] = m.idx[q]! + v;\n v += m.nV;\n t += m.idx.length;\n }\n for (let p = 0; p < pos.length; p += 3) {\n for (let c = 0; c < 3; c++) { lo[c] = Math.min(lo[c]!, pos[p + c]!); hi[c] = Math.max(hi[c]!, pos[p + c]!); }\n }\n const bounds = (nV ? [lo[0]!, lo[1]!, lo[2]!, hi[0]!, hi[1]!, hi[2]!] : [0, 0, 0, 0, 0, 0]) as [number, number, number, number, number, number];\n return { nV, pos, nor, col, fcol, mat, idx, bounds, chunks: st.chunks.size };\n}\n\n/**\n * Meshes a packed sculpt in chunks around the view. `prev` is the key's previous state (null on the first\n * chunked mesh); returns the new state and the merged mesh.\n */\nexport function chunkMesh(core: MesherCore, prev: ChunkState | null, P: Packed, view: ChunkView): { state: ChunkState; out: ChunkOutput } {\n const ext = Math.max(P.bSize[0], P.bSize[1], P.bSize[2]);\n const h0 = niceStep(ext / CHUNK_CELLS), W = CHUNK_C0 * h0;\n let st = prev;\n if (!st || st.h0 !== h0) st = { h0, W, chunks: new Map(), table: new Float64Array(0), count: 0 };\n const dirty = st.count ? dirtyBoxes(st.table, st.count, P.table, P.count) : null;\n st.table = P.table;\n st.count = P.count;\n const suf = suffixMax(P.table, P.count);\n\n // chunks covering the sculpt's (padded) box\n const lo = [0, 1, 2].map((a) => Math.floor(P.bMin[a as 0 | 1 | 2] / W));\n const hi = [0, 1, 2].map((a) => Math.ceil((P.bMin[a as 0 | 1 | 2] + P.bSize[a as 0 | 1 | 2]) / W) - 1);\n const alive = new Set<string>();\n 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++) {\n const key = `${i},${j},${k}`;\n alive.add(key);\n if (!st.chunks.has(key)) st.chunks.set(key, { i, j, k, level: null, meshes: new Map(), skirt: null, skirtDepth: 0, skirtOf: null });\n }\n for (const key of [...st.chunks.keys()]) if (!alive.has(key)) st.chunks.delete(key);\n\n // chunk meshes a changed stamp can reach are dropped\n for (const rec of st.chunks.values()) {\n for (const L of [...rec.meshes.keys()]) {\n let hit = dirty === null;\n if (!hit) {\n const h = h0 * (1 << L);\n hit = dirty!.some((bx) => {\n const p = (2 + bx[6]!) * h;\n return bx[0]! <= (rec.i + 1) * W + p && bx[3]! >= rec.i * W - p && bx[1]! <= (rec.j + 1) * W + p &&\n bx[4]! >= rec.j * W - p && bx[2]! <= (rec.k + 1) * W + p && bx[5]! >= rec.k * W - p;\n });\n }\n if (hit) { rec.meshes.delete(L); rec.skirt = null; }\n }\n }\n\n // every chunk at the level the camera wants (kept: at most the last two levels per chunk)\n for (const rec of st.chunks.values()) {\n const L = wantLevel(st, rec, view);\n if (!rec.meshes.has(L)) rec.meshes.set(L, buildChunk(core, st, P, suf, rec, L));\n const prevLevel = rec.level;\n rec.level = L;\n for (const key of [...rec.meshes.keys()]) if (key !== L && key !== prevLevel) rec.meshes.delete(key);\n }\n return { state: st, out: merge(st) };\n}\n", "import type { MeshRequest, MeshResult, SkinRequest, SkinResult } from \"@dreamy/api\";\nimport { PARAMS_LEN, SEGMENT_STRIDE, STAMP_STRIDE, type MesherCore } from \"./abi.js\";\nimport { chunkMesh, wantsChunks, type ChunkState } from \"./chunks.js\";\nimport { clampResolution, packSculpt, type Packed } from \"./prep/pack.js\";\n\n/* Dirty-region voxel cache (POC mesher.js _voxPlan): each key keeps its voxel grids in a core slot, and an\n edit re-evaluates only the box the changed stamps can reach. Anything unusual (new grid fit, another\n resolution, intersect stamps, a big box) evaluates the whole grid. The mesh is identical either way. */\nexport const VOX_CACHE_MAX = 4;\nconst VOX_FULL_FRACTION = 0.6;\n\ntype CacheEntry = {\n readonly slot: number;\n res: number;\n bMin: readonly [number, number, number];\n bSize: readonly [number, number, number];\n table: Float64Array;\n count: number;\n};\n\nexport type RemeshInfo = { readonly mode: \"full\" | \"region\" | \"none\" | \"chunks\"; readonly voxels: number; readonly total: number };\n\nexport type MeshSession = {\n readonly core: MesherCore;\n mesh(request: MeshRequest): MeshResult;\n skinWeights(request: SkinRequest): SkinResult;\n /** Frees the key's cached voxels. */\n forget(key: string): void;\n /** How the last mesh was evaluated (for stats and tests). */\n lastInfo(): RemeshInfo;\n};\n\nconst now = (): number => (typeof performance !== \"undefined\" ? performance.now() : Date.now());\n\nfunction suffixMax(table: Float64Array, count: number): Float64Array {\n const o = new Float64Array(count + 1);\n for (let i = count - 1; i >= 0; i--) o[i] = Math.max(o[i + 1]!, table[i * STAMP_STRIDE + 17]!);\n return o;\n}\n\n/** The inclusive voxel box to re-evaluate, \"none\", or null for a full pass. */\nfunction dirtyBox(e: CacheEntry, P: Packed, R: number, step: readonly number[]): number[] | \"none\" | null {\n const nOld = e.count, nNew = P.count, nMin = Math.min(nOld, nNew);\n const changedOld: number[] = [], changedNew: number[] = [];\n for (let i = 0; i < nMin; i++) {\n const a = i * STAMP_STRIDE;\n for (let k = 0; k < STAMP_STRIDE; k++) {\n if (e.table[a + k] !== P.table[a + k]) {\n changedOld.push(i);\n changedNew.push(i);\n break;\n }\n }\n }\n for (let i = nMin; i < nOld; i++) changedOld.push(i);\n for (let i = nMin; i < nNew; i++) changedNew.push(i);\n\n const st = Math.max(step[0]!, step[1]!, step[2]!);\n const [bx, by, bz] = P.bMin;\n const [wx, wy, wz] = P.bSize;\n let x0 = Infinity, y0 = Infinity, z0 = Infinity, x1 = -Infinity, y1 = -Infinity, z1 = -Infinity;\n let bad = false;\n const reach = (T: Float64Array, suf: Float64Array, i: number): void => {\n const o = i * STAMP_STRIDE;\n const mode = T[o + 1]!, k = T[o + 17]!;\n if (mode === 2 || mode > 3) {\n bad = true;\n return;\n }\n const kk = mode === 3 ? 0.5 * k : k + suf[i + 1]!;\n const r = T[o + 18]! + ((kk + 3 * st) * 1.25) / Math.max(T[o + 19]!, 0.02);\n if (!(r < 4 * wx + 4 * wy + 4 * wz)) {\n bad = true;\n return;\n }\n const px = T[o + 2]!, py = T[o + 3]!, pz = T[o + 4]!;\n x0 = Math.min(x0, Math.floor((px - r - bx) / step[0]!)); x1 = Math.max(x1, Math.ceil((px + r - bx) / step[0]!));\n y0 = Math.min(y0, Math.floor((py - r - by) / step[1]!)); y1 = Math.max(y1, Math.ceil((py + r - by) / step[1]!));\n z0 = Math.min(z0, Math.floor((pz - r - bz) / step[2]!)); z1 = Math.max(z1, Math.ceil((pz + r - bz) / step[2]!));\n };\n const sufOld = suffixMax(e.table, nOld), sufNew = suffixMax(P.table, nNew);\n for (const i of changedOld) reach(e.table, sufOld, i);\n for (const i of changedNew) reach(P.table, sufNew, i);\n if (bad) return null;\n if (x0 === Infinity) return \"none\";\n x0 = Math.max(0, x0); y0 = Math.max(0, y0); z0 = Math.max(0, z0);\n x1 = Math.min(R - 1, x1); y1 = Math.min(R - 1, y1); z1 = Math.min(R - 1, z1);\n const vox = Math.max(0, x1 - x0 + 1) * Math.max(0, y1 - y0 + 1) * Math.max(0, z1 - z0 + 1);\n if (vox > VOX_FULL_FRACTION * R * R * R) return null;\n return [x0, x1, y0, y1, z0, z1];\n}\n\n/** Synchronous meshing over one core: what the Worker host runs, and what Node tests call directly. */\nexport function createMeshSession(core: MesherCore, options: { readonly cache?: boolean } = {}): MeshSession {\n const useCache = options.cache ?? true;\n /** Map order = least recently used first. */\n const cache = new Map<string, CacheEntry>();\n const freeSlots: number[] = [];\n for (let i = VOX_CACHE_MAX - 1; i >= 0; i--) freeSlots.push(i);\n let info: RemeshInfo = { mode: \"full\", voxels: 0, total: 0 };\n /** Chunked LOD state per key (large sculpts meshed around a view). */\n const chunked = new Map<string, ChunkState>();\n\n const takeSlot = (key: string): CacheEntry => {\n let e = cache.get(key);\n if (e) {\n cache.delete(key);\n cache.set(key, e);\n return e;\n }\n if (!freeSlots.length) {\n const [oldKey, old] = cache.entries().next().value as [string, CacheEntry];\n cache.delete(oldKey);\n core.dropSlot(old.slot);\n freeSlots.push(old.slot);\n }\n e = { slot: freeSlots.pop()!, res: -1, bMin: [NaN, NaN, NaN], bSize: [NaN, NaN, NaN], table: new Float64Array(0), count: 0 };\n cache.set(key, e);\n return e;\n };\n\n return {\n core,\n mesh(request) {\n const t0 = now();\n const R = clampResolution(request.resolution);\n const P = packSculpt(request.sculpt, request.palette);\n const prevChunks = chunked.get(request.key) ?? null;\n if (request.view && wantsChunks(P, prevChunks !== null)) {\n const { state, out } = chunkMesh(core, prevChunks, P, request.view);\n chunked.set(request.key, state);\n info = { mode: \"chunks\", voxels: out.chunks, total: out.chunks };\n const b = out.bounds;\n return {\n key: request.key, positions: out.pos, normals: out.nor, colors: out.col, foundation: out.fcol,\n material: out.mat, indices: out.idx,\n boundsMin: { x: b[0], y: b[1], z: b[2] }, boundsMax: { x: b[3], y: b[4], z: b[5] },\n ms: now() - t0,\n ...(P.overflow ? { overflow: P.overflow } : {}),\n };\n }\n chunked.delete(request.key);\n const step = [P.bSize[0] / (R - 1), P.bSize[1] / (R - 1), P.bSize[2] / (R - 1)];\n const total = R * R * R;\n const params = new Float64Array(PARAMS_LEN);\n 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]);\n info = { mode: \"full\", voxels: total, total };\n let entry: CacheEntry | null = null;\n if (useCache) {\n entry = takeSlot(request.key);\n params[10] = entry.slot;\n const sameGrid = entry.res === R && entry.bMin.every((v, i) => v === P.bMin[i]) && entry.bSize.every((v, i) => v === P.bSize[i]);\n const box = sameGrid ? dirtyBox(entry, P, R, step) : null;\n if (box === \"none\") {\n params.set([0, -1, 0, -1, 0, -1], 11);\n info = { mode: \"none\", voxels: 0, total };\n } else if (box) {\n params.set(box, 11);\n info = { mode: \"region\", voxels: (box[1]! - box[0]! + 1) * (box[3]! - box[2]! + 1) * (box[5]! - box[4]! + 1), total };\n }\n }\n const raw = core.mesh(P.table, P.count, params, null);\n if (entry) {\n entry.res = R;\n entry.bMin = P.bMin;\n entry.bSize = P.bSize;\n entry.table = P.table;\n entry.count = P.count;\n }\n const b = raw.bounds;\n return {\n key: request.key,\n positions: raw.positions,\n normals: raw.normals,\n colors: raw.colors,\n foundation: raw.foundation,\n material: raw.material,\n indices: raw.indices,\n boundsMin: { x: b[0], y: b[1], z: b[2] },\n boundsMax: { x: b[3], y: b[4], z: b[5] },\n ms: now() - t0,\n ...(P.overflow ? { overflow: P.overflow } : {}),\n };\n },\n skinWeights(request) {\n const segs: number[] = [];\n request.bones.forEach((bone, bi) => {\n const h = bone.head;\n if (!bone.childHeads.length) segs.push(h.x, h.y, h.z, h.x, h.y, h.z, bi);\n else for (const c of bone.childHeads) segs.push(h.x, h.y, h.z, c.x, c.y, c.z, bi);\n });\n const raw = core.skin(request.positions, Float64Array.from(segs), segs.length / SEGMENT_STRIDE, request.bones.length);\n return { key: request.key, boneIndices: raw.boneIndices, boneWeights: raw.boneWeights };\n },\n forget(key) {\n chunked.delete(key);\n const e = cache.get(key);\n if (!e) return;\n cache.delete(key);\n core.dropSlot(e.slot);\n freeSlots.push(e.slot);\n },\n lastInfo: () => info,\n };\n}\n", "const 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&<(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\";\nlet url;\nexport function spawnWorker() {\n url ??= URL.createObjectURL(new Blob([code], { type: \"text/javascript\" }));\n return new Worker(url);\n}", "import type { Evaluator, MeshRequest, MeshResult, SkinRequest, SkinResult } from \"@dreamy/api\";\nimport type { MesherCore } from \"../abi.js\";\nimport { createReferenceCore } from \"../reference/core.js\";\nimport { createMeshSession, type MeshSession } from \"../session.js\";\nimport type { ClientMessage, HostMessage, PortLike } from \"./protocol.js\";\nimport { spawnWorker } from \"./spawn.js\";\n\nexport type CoreKind = \"wasm\" | \"reference\";\n\n/** The Evaluator port plus which core ended up running. */\nexport type EvaluatorHandle = Evaluator & {\n /** Resolves once the core is loaded: \"reference\" when WASM (or the Worker) failed. */\n readonly ready: Promise<CoreKind>;\n};\n\n/** Superseded (a newer request for the key), cancelled and disposed jobs reject with this. */\nexport class AbortError extends Error {\n override readonly name = \"AbortError\";\n}\n\ntype Job =\n | { kind: \"mesh\"; req: MeshRequest; resolve: (r: MeshResult) => void; reject: (e: unknown) => void; dead: boolean }\n | { kind: \"skin\"; req: SkinRequest; resolve: (r: SkinResult) => void; reject: (e: unknown) => void; dead: boolean };\n\n/** How the queue runs one job and frees a key's cache. */\ntype Backend = {\n run(job: Job): Promise<MeshResult | SkinResult>;\n forget(key: string): void;\n dispose(): void;\n};\n\n/**\n * One job in flight; pending jobs are keyed (mesh and skin separately), so a newer request for a key\n * replaces the pending one in place (newest wins, the old promise rejects with AbortError).\n */\nfunction queuedEvaluator(backend: () => Backend, ready: Promise<CoreKind>): EvaluatorHandle {\n const pending = new Map<string, Job>();\n let running: { id: string; job: Job } | null = null;\n let disposed = false;\n\n const pump = (): void => {\n if (running || disposed) return;\n const next = pending.entries().next();\n if (next.done) return;\n const [id, job] = next.value;\n pending.delete(id);\n running = { id, job };\n backend()\n .run(job)\n .then(\n (res) => {\n if (job.dead) return;\n (job.resolve as (r: MeshResult | SkinResult) => void)(res);\n },\n (e: unknown) => {\n if (!job.dead) job.reject(e);\n },\n )\n .finally(() => {\n running = null;\n pump();\n });\n };\n\n const enqueue = (id: string, job: Job): void => {\n if (disposed) {\n job.reject(new AbortError(\"evaluator disposed\"));\n return;\n }\n const old = pending.get(id);\n if (old) old.reject(new AbortError(\"superseded\"));\n pending.set(id, job);\n pump();\n };\n\n return {\n ready,\n mesh(req) {\n return new Promise<MeshResult>((resolve, reject) => enqueue(\"m:\" + req.key, { kind: \"mesh\", req, resolve, reject, dead: false }));\n },\n skinWeights(req) {\n return new Promise<SkinResult>((resolve, reject) => enqueue(\"s:\" + req.key, { kind: \"skin\", req, resolve, reject, dead: false }));\n },\n cancel(key) {\n for (const id of [\"m:\" + key, \"s:\" + key]) {\n const job = pending.get(id);\n if (job) {\n pending.delete(id);\n job.reject(new AbortError(\"cancelled\"));\n }\n if (running && running.id === id && !running.job.dead) {\n running.job.dead = true;\n running.job.reject(new AbortError(\"cancelled\"));\n }\n }\n if (!disposed) backend().forget(key);\n },\n dispose() {\n if (disposed) return;\n disposed = true;\n for (const job of pending.values()) job.reject(new AbortError(\"evaluator disposed\"));\n pending.clear();\n if (running && !running.job.dead) {\n running.job.dead = true;\n running.job.reject(new AbortError(\"evaluator disposed\"));\n }\n backend().dispose();\n },\n };\n}\n\nfunction inlineBackend(session: MeshSession): Backend {\n return {\n run: (job) =>\n new Promise((resolve, reject) => {\n // a macrotask, so requests issued in the same tick coalesce before work starts\n setTimeout(() => {\n try {\n resolve(job.kind === \"mesh\" ? session.mesh(job.req) : session.skinWeights(job.req));\n } catch (e) {\n reject(e);\n }\n }, 0);\n }),\n forget: (key) => session.forget(key),\n dispose: () => {},\n };\n}\n\n/** Runs in this thread over a core (Node tests, or when no Worker is available). */\nexport function createInlineEvaluator(core: MesherCore = createReferenceCore()): EvaluatorHandle {\n const backend = inlineBackend(createMeshSession(core));\n return queuedEvaluator(() => backend, Promise.resolve(core.kind));\n}\n\nexport type WorkerEvaluatorOptions = {\n /** Port to a running host: a Worker on worker.ts, or a MessagePort in tests. */\n readonly port: PortLike;\n /** Called on dispose (e.g. worker.terminate()). */\n readonly close?: () => void;\n};\n\n/** An Evaluator over a Worker host. A Worker that errors before it is ready falls back to inline TS. */\nexport function createWorkerEvaluator(options: WorkerEvaluatorOptions): EvaluatorHandle {\n const { port } = options;\n let nextId = 1;\n const waiting = new Map<number, { job: Job; resolve: (r: MeshResult | SkinResult) => void; reject: (e: unknown) => void }>();\n let fallback: Backend | null = null;\n let resolveReady!: (k: CoreKind) => void;\n const ready = new Promise<CoreKind>((r) => (resolveReady = r));\n\n port.onmessage = (ev: MessageEvent) => {\n const m = ev.data as ClientMessage;\n if (m.t === \"ready\") {\n resolveReady(m.core);\n return;\n }\n const w = waiting.get(m.id);\n if (!w) return;\n waiting.delete(m.id);\n if (m.t === \"err\") w.reject(new Error(m.message));\n else w.resolve(m.res);\n };\n\n const remote: Backend = {\n run(job) {\n const id = nextId++;\n return new Promise((resolve, reject) => {\n waiting.set(id, { job, resolve, reject });\n const msg: HostMessage = job.kind === \"mesh\" ? { t: \"mesh\", id, req: job.req } : { t: \"skin\", id, req: job.req };\n port.postMessage(msg);\n });\n },\n forget(key) {\n port.postMessage({ t: \"forget\", key } satisfies HostMessage);\n },\n dispose() {\n for (const w of waiting.values()) w.reject(new AbortError(\"evaluator disposed\"));\n waiting.clear();\n options.close?.();\n },\n };\n\n const asWorker = port as Partial<Worker>;\n if (typeof asWorker.addEventListener === \"function\" && typeof asWorker.terminate === \"function\") {\n asWorker.addEventListener(\"error\", () => {\n if (fallback) return;\n fallback = inlineBackend(createMeshSession(createReferenceCore()));\n resolveReady(\"reference\");\n // the job sent to the broken worker runs again inline\n const lost = [...waiting.values()];\n waiting.clear();\n for (const w of lost) fallback.run(w.job).then(w.resolve, w.reject);\n asWorker.terminate?.();\n });\n }\n\n return queuedEvaluator(() => fallback ?? remote, ready);\n}\n\n/**\n * The default Evaluator: the WASM core in a module Worker, falling back to the TS reference (in the\n * Worker when WASM fails to load, inline when Workers are unavailable).\n */\nexport function createEvaluator(): EvaluatorHandle {\n if (typeof Worker === \"undefined\") return createInlineEvaluator();\n let worker: Worker;\n try {\n worker = spawnWorker();\n } catch {\n return createInlineEvaluator();\n }\n return createWorkerEvaluator({ port: worker as unknown as PortLike, close: () => worker.terminate() });\n}\n", "import type { MeshRequest, MeshResult, SkinRequest, SkinResult } from \"@dreamy/api\";\n\n/** Client -> host. */\nexport type HostMessage =\n | { readonly t: \"mesh\"; readonly id: number; readonly req: MeshRequest }\n | { readonly t: \"skin\"; readonly id: number; readonly req: SkinRequest }\n | { readonly t: \"forget\"; readonly key: string };\n\n/** Host -> client. */\nexport type ClientMessage =\n | { readonly t: \"ready\"; readonly core: \"wasm\" | \"reference\"; readonly error?: string }\n | { readonly t: \"mesh\"; readonly id: number; readonly res: MeshResult }\n | { readonly t: \"skin\"; readonly id: number; readonly res: SkinResult }\n | { readonly t: \"err\"; readonly id: number; readonly message: string };\n\n/** What a Worker, a DedicatedWorkerGlobalScope and a MessagePort have in common. */\nexport type PortLike = {\n postMessage(message: unknown, transfer?: Transferable[]): void;\n onmessage: ((event: MessageEvent) => void) | null;\n};\n\nexport function meshTransfer(r: MeshResult): Transferable[] {\n return [r.positions.buffer, r.normals.buffer, r.colors.buffer, r.foundation.buffer, r.material.buffer, r.indices.buffer] as Transferable[];\n}\n\nexport function skinTransfer(r: SkinResult): Transferable[] {\n return [r.boneIndices.buffer, r.boneWeights.buffer] as Transferable[];\n}\n", "import type { MesherCore } from \"../abi.js\";\nimport { createMeshSession, type MeshSession } from \"../session.js\";\nimport { meshTransfer, skinTransfer, type ClientMessage, type HostMessage, type PortLike } from \"./protocol.js\";\n\n/**\n * Serves mesh / skin jobs on a port (the Worker's global scope, or a MessagePort in tests). Jobs that\n * arrive before the core is loaded wait for it. If loading fails, `fallback` provides the core.\n */\nexport function startWorkerHost(port: PortLike, load: () => Promise<MesherCore>, fallback: () => MesherCore): Promise<MeshSession> {\n const post = (m: ClientMessage, transfer: Transferable[] = []): void => port.postMessage(m, transfer);\n const ready = load()\n .then((core) => {\n post({ t: \"ready\", core: core.kind });\n return createMeshSession(core);\n })\n .catch((e: unknown) => {\n const core = fallback();\n post({ t: \"ready\", core: core.kind, error: String(e) });\n return createMeshSession(core);\n });\n port.onmessage = (ev: MessageEvent) => {\n const msg = ev.data as HostMessage;\n void ready.then((session) => {\n if (msg.t === \"forget\") {\n session.forget(msg.key);\n return;\n }\n try {\n if (msg.t === \"mesh\") {\n const res = session.mesh(msg.req);\n post({ t: \"mesh\", id: msg.id, res }, meshTransfer(res));\n } else {\n const res = session.skinWeights(msg.req);\n post({ t: \"skin\", id: msg.id, res }, skinTransfer(res));\n }\n } catch (e) {\n post({ t: \"err\", id: msg.id, message: e instanceof Error ? e.message : String(e) });\n }\n });\n };\n return ready;\n}\n", "import { PARAMS_LEN, SEGMENT_STRIDE, STAMP_STRIDE, type MesherCore, type RawMesh } from \"../abi.js\";\n\ntype Exports = {\n readonly memory: WebAssembly.Memory;\n alloc(size: number): number;\n free(ptr: number, size: number): void;\n mesh(table: number, stampCount: number, params: number, list: number, listLen: number): number;\n drop_slot(slot: number): void;\n skin(positions: number, vertexCount: number, segments: number, segmentCount: number, boneCount: number): number;\n};\n\n/** The module's location inside the package (bundlers resolve it as an asset). */\nexport const WASM_URL: URL = new URL(\"../dreamy_evaluator.wasm\", import.meta.url);\n\n/** Wraps an instantiated module. Inputs go through one reusable scratch block; outputs are copied out. */\nexport function wasmCoreFromInstance(instance: WebAssembly.Instance): MesherCore {\n const ex = instance.exports as unknown as Exports;\n let block = 0;\n let blockSize = 0;\n const reserve = (bytes: number): number => {\n if (bytes > blockSize) {\n if (block) ex.free(block, blockSize);\n blockSize = Math.max(bytes, blockSize * 2, 4096);\n block = ex.alloc(blockSize);\n }\n return block;\n };\n const align8 = (n: number): number => (n + 7) & ~7;\n return {\n kind: \"wasm\",\n mesh(table, stampCount, params, list): RawMesh {\n const tBytes = align8(stampCount * STAMP_STRIDE * 8);\n const pBytes = PARAMS_LEN * 8;\n const lLen = list ? list.length : 0;\n const base = reserve(tBytes + pBytes + lLen * 4);\n const mem = ex.memory.buffer;\n new Float64Array(mem, base, stampCount * STAMP_STRIDE).set(table.subarray(0, stampCount * STAMP_STRIDE));\n new Float64Array(mem, base + tBytes, PARAMS_LEN).set(params.subarray(0, PARAMS_LEN));\n if (list && lLen) new Int32Array(mem, base + tBytes + pBytes, lLen).set(list);\n const hp = ex.mesh(base, stampCount, base + tBytes, base + tBytes + pBytes, lLen);\n const buf = ex.memory.buffer; // may have grown\n const h = new Uint32Array(buf, hp, 16);\n const nv = h[0]!, ni = h[1]!;\n const f32 = (ptr: number, len: number): Float32Array => new Float32Array(buf, ptr, len).slice();\n const b = new Float32Array(buf, hp + 32, 6);\n return {\n positions: f32(h[2]!, nv * 3),\n normals: f32(h[3]!, nv * 3),\n colors: f32(h[4]!, nv * 3),\n foundation: f32(h[5]!, nv * 3),\n material: f32(h[6]!, nv * 4),\n indices: new Uint32Array(buf, h[7]!, ni).slice(),\n bounds: [b[0]!, b[1]!, b[2]!, b[3]!, b[4]!, b[5]!],\n };\n },\n dropSlot(slot) {\n ex.drop_slot(slot);\n },\n skin(positions, segments, segmentCount, boneCount) {\n const n = Math.floor(positions.length / 3);\n const pBytes = align8(n * 3 * 4);\n const base = reserve(pBytes + segmentCount * SEGMENT_STRIDE * 8);\n const mem = ex.memory.buffer;\n new Float32Array(mem, base, n * 3).set(positions.subarray(0, n * 3));\n new Float64Array(mem, base + pBytes, segmentCount * SEGMENT_STRIDE).set(segments.subarray(0, segmentCount * SEGMENT_STRIDE));\n const op = ex.skin(base, n, base + pBytes, segmentCount, boneCount);\n const buf = ex.memory.buffer;\n return {\n boneIndices: new Float32Array(buf, op, n * 4).slice(),\n boneWeights: new Float32Array(buf, op + n * 16, n * 4).slice(),\n };\n },\n };\n}\n\n/** Instantiates the module from its bytes (Node tests, or a host that fetched it itself). */\nexport async function loadWasmCore(bytes: BufferSource): Promise<MesherCore> {\n const { instance } = await WebAssembly.instantiate(bytes, {});\n return wasmCoreFromInstance(instance);\n}\n\n/** Fetches and instantiates the module (browser / Worker). */\nexport async function fetchWasmCore(url: string | URL = WASM_URL): Promise<MesherCore> {\n const res = await fetch(url);\n if (!res.ok) throw new Error(`evaluator wasm: HTTP ${res.status}`);\n if (typeof WebAssembly.instantiateStreaming === \"function\" && res.headers.get(\"content-type\")?.includes(\"application/wasm\")) {\n const { instance } = await WebAssembly.instantiateStreaming(res, {});\n return wasmCoreFromInstance(instance);\n }\n return loadWasmCore(await res.arrayBuffer());\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["code", "suffixMax", "b", "url"]
|
|
7
|
+
}
|