forgecad 0.9.14 → 0.9.15

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (219) hide show
  1. package/LICENSE +6 -4
  2. package/README.md +8 -4
  3. package/dist/assets/{AdminPage-eWGs2K6H.js → AdminPage-CDyGUinA.js} +2 -2
  4. package/dist/assets/{BenchmarkPage-CTrLKfpo.js → BenchmarkPage-DfPMY_-d.js} +4 -15
  5. package/dist/assets/{BlogPage-5nPesyds.js → BlogPage-kF0fkdJT.js} +2 -2
  6. package/dist/assets/{DocsPage-C4Y3nbYc.js → DocsPage-B954L3YN.js} +9 -3
  7. package/dist/assets/EditorApp-Beb-IZ0y.js +14014 -0
  8. package/dist/assets/{EditorApp-BAnckbsk.css → EditorApp-CuDLxKqL.css} +698 -0
  9. package/dist/assets/{EmbedViewer-C8fB4n5U.js → EmbedViewer-C77B-TrF.js} +3 -3
  10. package/dist/assets/{LandingPageProofDriven-jSz0LaMM.js → LandingPageProofDriven-Cr6fXMDj.js} +35 -37
  11. package/dist/assets/LegalPage-BRlScr9A.css +91 -0
  12. package/dist/assets/LegalPage-Dzklqmmg.js +39 -0
  13. package/dist/assets/{PricingPage-BMedqFef.css → PricingPage-BPF6HKyO.css} +25 -0
  14. package/dist/assets/{PricingPage-B83B90zh.js → PricingPage-zWXkvlwl.js} +19 -19
  15. package/dist/assets/{SettingsPage-DY889pcu.js → SettingsPage-Bz0of4KQ.js} +2 -2
  16. package/dist/assets/app-CE3sYcV7.css +3890 -0
  17. package/dist/assets/{app-bEww1ic4.js → app-D3kDkggg.js} +2293 -946
  18. package/dist/assets/cli/{render-Cho2uKG_.js → render-DSY3mMQa.js} +337 -7
  19. package/dist/assets/{constructionHistoryWorker-HYwzJY4m.js → constructionHistoryWorker-gpDo-uH2.js} +927 -243
  20. package/dist/assets/{evalWorker-CjQwJSE-.js → evalWorker-CU0Ke6DP.js} +7800 -4164
  21. package/dist/assets/{forgecad_geometry-CH2nvuLA.js → forgecad_geometry-Dgceylq9.js} +43 -1
  22. package/dist/assets/forgecad_geometry_bg-dD4RNQF1.wasm +0 -0
  23. package/dist/assets/{inspectWorker-DeRnMVv1.js → inspectWorker-COyp8XXA.js} +927 -243
  24. package/dist/assets/{javascript-70-4uGcz.js → javascript-1kQXfVaz.js} +1 -1
  25. package/dist/assets/landing-proof-driven-DiGqdtWa.js +18 -0
  26. package/dist/assets/{landing-proof-driven-oFYW6mjz.css → landing-proof-driven-ORyigZ6p.css} +13 -7
  27. package/dist/assets/legalContent-ZfFGMmi4.js +251 -0
  28. package/dist/assets/{manifold-CG9Fokx-.js → manifold-BRI5prcH.js} +1 -1
  29. package/dist/assets/{manifold-uRzgk5O8.js → manifold-C-3h2M7p.js} +2 -2
  30. package/dist/assets/{manifold-rmfAcdwF.js → manifold-DNkrUWpA.js} +1 -1
  31. package/dist/assets/{reportWorker-4cW_ZpoS.js → reportWorker-CdBz5bNg.js} +7538 -10857
  32. package/dist/assets/{scalar-sampling-budget-CfDiFvh7.js → scalar-sampling-budget-wJF98aY9.js} +6935 -4331
  33. package/dist/assets/{scanProxyWorker-Bs2TDgLw.js → scanProxyWorker-B-9VbLIs.js} +32 -1
  34. package/dist/assets/{solver-DuJAO8S6.js → solver-BZ9LPTHs.js} +1 -1
  35. package/dist/assets/solver_bg-DAHZJ_rw.wasm +0 -0
  36. package/dist/assets/{targets-D6PWsv6X.js → targets-B9sGB5nB.js} +1 -1
  37. package/dist/assets/{vendor-react-Da3A2QmU.js → vendor-react-6j1Kke-Y.js} +6 -5
  38. package/dist/cli/render.html +1 -1
  39. package/dist/docs/index.html +2 -2
  40. package/dist/docs-raw/AI/ai-native-cad.md +50 -0
  41. package/dist/docs-raw/AI/usage.md +3 -12
  42. package/dist/docs-raw/CLI.md +30 -10
  43. package/dist/docs-raw/component-model.md +27 -11
  44. package/dist/docs-raw/generated/assembly.md +301 -212
  45. package/dist/docs-raw/generated/concepts.md +235 -237
  46. package/dist/docs-raw/generated/core.md +283 -6
  47. package/dist/docs-raw/generated/curves.md +274 -361
  48. package/dist/docs-raw/generated/lib.md +7 -1
  49. package/dist/docs-raw/generated/output.md +19 -4
  50. package/dist/docs-raw/generated/runtime-names.md +41 -0
  51. package/dist/docs-raw/generated/sdf.md +31 -0
  52. package/dist/docs-raw/generated/sheet-metal.md +9 -0
  53. package/dist/docs-raw/generated/sketch.md +44 -1
  54. package/dist/docs-raw/generated/viewport.md +11 -3
  55. package/dist/docs-raw/guides/coordinate-system.md +20 -16
  56. package/dist/docs-raw/guides/geometry-conventions.md +2 -2
  57. package/dist/docs-raw/guides/inspection-bundles.md +2 -1
  58. package/dist/docs-raw/guides/joint-design.md +24 -0
  59. package/dist/docs-raw/guides/positioning.md +13 -3
  60. package/dist/docs-raw/legal/privacy.md +63 -0
  61. package/dist/docs-raw/legal/software-license.md +55 -0
  62. package/dist/docs-raw/legal/terms.md +87 -0
  63. package/dist/docs-raw/skills/forgecad-3d-reconstruction.md +1 -1
  64. package/dist/docs-raw/skills/forgecad-blockout-model.md +1 -1
  65. package/dist/docs-raw/skills/forgecad-component-model.md +11 -2
  66. package/dist/docs-raw/skills/forgecad-high-level-spec.md +1 -1
  67. package/dist/docs-raw/skills/forgecad-image-replicator.md +8 -8
  68. package/dist/docs-raw/skills/forgecad-lld.md +1 -1
  69. package/dist/docs-raw/skills/forgecad-make-a-model.md +1 -1
  70. package/dist/docs-raw/skills/forgecad-model-grader.md +2 -2
  71. package/dist/docs-raw/skills/forgecad-prepare-prompt.md +2 -2
  72. package/dist/docs-raw/skills/forgecad-project.md +1 -1
  73. package/dist/docs-raw/skills/forgecad-reconstruction-benchmark.md +1 -1
  74. package/dist/docs-raw/skills/forgecad-render-inspect.md +4 -2
  75. package/dist/docs-raw/skills/forgecad-visual-spec.md +1 -1
  76. package/dist/docs-raw/skills/forgecad.md +4 -3
  77. package/dist/index.html +40 -12
  78. package/dist/llms.txt +8 -0
  79. package/dist/site.webmanifest +1 -1
  80. package/dist/sitemap.xml +49 -13
  81. package/dist-cli/{check-compiler-U5SOPN7X.js → check-compiler-SDX5QIXI.js} +1 -2
  82. package/dist-cli/{check-query-propagation-XOKNSSYU.js → check-query-propagation-EAYEFT77.js} +1 -2
  83. package/dist-cli/{chunk-EXWGNL6K.js → chunk-N4O47JLF.js} +12540 -9046
  84. package/dist-cli/forgecad.js +1786 -679
  85. package/dist-cli/{forgecad_geometry-GYVNKPIE.js → forgecad_geometry-QOQIIP53.js} +42 -1
  86. package/dist-cli/forgecad_geometry_bg.wasm +0 -0
  87. package/dist-cli/{solver-46FFSK2U.js → solver-OK4HECRH.js} +0 -1
  88. package/dist-cli/solver_bg.wasm +0 -0
  89. package/dist-skill/CONTEXT.md +1117 -721
  90. package/dist-skill/SKILL.md +3 -2
  91. package/dist-skill/docs/API/core/concepts.md +64 -1
  92. package/dist-skill/docs/CLI.md +30 -10
  93. package/dist-skill/docs/generated/assembly.md +277 -229
  94. package/dist-skill/docs/generated/core.md +283 -6
  95. package/dist-skill/docs/generated/curves.md +272 -362
  96. package/dist-skill/docs/generated/lib.md +7 -1
  97. package/dist-skill/docs/generated/output.md +19 -4
  98. package/dist-skill/docs/generated/runtime-names.md +41 -0
  99. package/dist-skill/docs/generated/sdf.md +31 -0
  100. package/dist-skill/docs/generated/sheet-metal.md +9 -0
  101. package/dist-skill/docs/generated/sketch.md +44 -2
  102. package/dist-skill/docs/generated/viewport.md +2 -87
  103. package/dist-skill/docs/guides/coordinate-system.md +20 -16
  104. package/dist-skill/docs/guides/geometry-conventions.md +2 -2
  105. package/dist-skill/docs/guides/inspection-bundles.md +2 -1
  106. package/dist-skill/docs/guides/joint-design.md +24 -0
  107. package/dist-skill/docs/guides/positioning.md +13 -3
  108. package/dist-skill/library/forgecad-component-model/SKILL.md +10 -1
  109. package/dist-skill/library/forgecad-image-replicator/SKILL.md +6 -6
  110. package/dist-skill/library/forgecad-image-replicator/scripts/compare_images.py +166 -0
  111. package/dist-skill/library/forgecad-model-grader/SKILL.md +1 -1
  112. package/dist-skill/library/forgecad-prepare-prompt/SKILL.md +1 -1
  113. package/dist-skill/library/forgecad-render-inspect/SKILL.md +3 -1
  114. package/examples/api/assembly-kinematics-foundation.forge.js +65 -0
  115. package/examples/api/assembly-kinematics-four-bar.forge.js +115 -0
  116. package/examples/api/assembly-kinematics-limb.forge.js +116 -0
  117. package/examples/api/connector-frame-rig-chain.forge.js +102 -0
  118. package/examples/api/exact-sheet-shell-assembly.forge.js +0 -2
  119. package/examples/api/exact-surface-studio.forge.js +6 -8
  120. package/examples/api/helix-basics.forge.js +6 -6
  121. package/examples/api/lean-foundations/README.md +12 -0
  122. package/examples/api/lean-foundations/curve-blend-exact.forge.js +22 -0
  123. package/examples/api/lean-foundations/curve-fit-interpolation.forge.js +18 -0
  124. package/examples/api/lean-foundations/curve-helix-canonicalization.forge.js +27 -0
  125. package/examples/api/lean-foundations/curve-route-canonicalization.forge.js +16 -0
  126. package/examples/api/lean-foundations/curve-trim-reverse.forge.js +24 -0
  127. package/examples/api/lean-foundations/exact-curve-arc.forge.js +36 -0
  128. package/examples/api/mixed-edge-finishes-proof.forge.js +8 -11
  129. package/examples/api/route3d-elbow.forge.js +68 -0
  130. package/examples/api/transition-curves.forge.js +44 -15
  131. package/examples/api/y-blend-corner-showcase.forge.js +0 -2
  132. package/examples/generative/coral-vase.forge.js +1 -1
  133. package/examples/nurbs-tube.forge.js +1 -1
  134. package/package.json +14 -13
  135. package/dist/assets/EditorApp-lXv53A1m.js +0 -13610
  136. package/dist/assets/app-CsHnaBWt.css +0 -1789
  137. package/dist/assets/forgecad_geometry_bg-C5_E9Oa9.wasm +0 -0
  138. package/dist/assets/solver_bg-CWvv4lnN.wasm +0 -0
  139. package/dist/docs-raw/API/README.md +0 -16
  140. package/dist/docs-raw/API/core/concepts.md +0 -118
  141. package/dist/docs-raw/INDEX.md +0 -138
  142. package/dist/docs-raw/RELEASING.md +0 -87
  143. package/dist/docs-raw/agent-native-api.md +0 -27
  144. package/dist/docs-raw/beta-deployment.md +0 -304
  145. package/dist/docs-raw/beta-operations.md +0 -325
  146. package/dist/docs-raw/blueprint-first.md +0 -145
  147. package/dist/docs-raw/cli-monetization.md +0 -112
  148. package/dist/docs-raw/coding-best-practices.md +0 -120
  149. package/dist/docs-raw/coding.md +0 -340
  150. package/dist/docs-raw/deployment.md +0 -374
  151. package/dist/docs-raw/guides/skill-maintenance.md +0 -161
  152. package/dist/docs-raw/guides/surface-members.md +0 -82
  153. package/dist/docs-raw/harbor-cli.md +0 -854
  154. package/dist/docs-raw/internals/backend-vocabulary.md +0 -35
  155. package/dist/docs-raw/internals/compiler.md +0 -307
  156. package/dist/docs-raw/internals/constraint-solver-quality.md +0 -161
  157. package/dist/docs-raw/internals/constraint-solver.md +0 -176
  158. package/dist/docs-raw/internals/shape-from-slices.md +0 -152
  159. package/dist/docs-raw/internals/sketch-2d-pipeline.md +0 -108
  160. package/dist/docs-raw/platform/admin.md +0 -45
  161. package/dist/docs-raw/platform/architecture.md +0 -82
  162. package/dist/docs-raw/platform/auth.md +0 -139
  163. package/dist/docs-raw/platform/email.md +0 -67
  164. package/dist/docs-raw/platform/google-oauth-setup.md +0 -88
  165. package/dist/docs-raw/platform/observability.md +0 -197
  166. package/dist/docs-raw/platform/projects.md +0 -111
  167. package/dist/docs-raw/platform/sharing.md +0 -90
  168. package/dist/docs-raw/product/README.md +0 -39
  169. package/dist/docs-raw/product/api-as-product-language.md +0 -13
  170. package/dist/docs-raw/product/business-model.md +0 -15
  171. package/dist/docs-raw/product/competitive-positioning.md +0 -17
  172. package/dist/docs-raw/product/creative-manufacturing.md +0 -15
  173. package/dist/docs-raw/product/founder-story.md +0 -11
  174. package/dist/docs-raw/product/manufacturing-workflows.md +0 -15
  175. package/dist/docs-raw/product/onboarding-first-experience.md +0 -256
  176. package/dist/docs-raw/product/product-loop.md +0 -17
  177. package/dist/docs-raw/product/strategic-decisions.md +0 -22
  178. package/dist/docs-raw/product/user-outreach-email-templates.md +0 -161
  179. package/dist/docs-raw/product/user-segments.md +0 -15
  180. package/dist/docs-raw/product/vision.md +0 -26
  181. package/dist/docs-raw/rl-environments.md +0 -350
  182. package/dist/docs-raw/runbook.md +0 -611
  183. package/dist-cli/check-compiler-U5SOPN7X.js.map +0 -1
  184. package/dist-cli/check-query-propagation-XOKNSSYU.js.map +0 -1
  185. package/dist-cli/chunk-EXWGNL6K.js.map +0 -1
  186. package/dist-cli/forgecad.js.map +0 -1
  187. package/dist-cli/forgecad_geometry-GYVNKPIE.js.map +0 -1
  188. package/dist-cli/solver-46FFSK2U.js.map +0 -1
  189. package/dist-skill/SKILL-dev.md +0 -145
  190. package/dist-skill/docs-dev/API/core/concepts.md +0 -118
  191. package/dist-skill/docs-dev/CLI.md +0 -677
  192. package/dist-skill/docs-dev/agent-native-api.md +0 -27
  193. package/dist-skill/docs-dev/blueprint-first.md +0 -145
  194. package/dist-skill/docs-dev/coding-best-practices.md +0 -120
  195. package/dist-skill/docs-dev/coding.md +0 -340
  196. package/dist-skill/docs-dev/component-model.md +0 -164
  197. package/dist-skill/docs-dev/generated/assembly.md +0 -794
  198. package/dist-skill/docs-dev/generated/core.md +0 -2117
  199. package/dist-skill/docs-dev/generated/curves.md +0 -2583
  200. package/dist-skill/docs-dev/generated/lib.md +0 -169
  201. package/dist-skill/docs-dev/generated/output.md +0 -247
  202. package/dist-skill/docs-dev/generated/sdf.md +0 -446
  203. package/dist-skill/docs-dev/generated/sheet-metal.md +0 -504
  204. package/dist-skill/docs-dev/generated/sketch.md +0 -1811
  205. package/dist-skill/docs-dev/generated/viewport.md +0 -585
  206. package/dist-skill/docs-dev/generated/wood.md +0 -108
  207. package/dist-skill/docs-dev/guides/coordinate-system.md +0 -46
  208. package/dist-skill/docs-dev/guides/geometry-conventions.md +0 -52
  209. package/dist-skill/docs-dev/guides/inspection-bundles.md +0 -485
  210. package/dist-skill/docs-dev/guides/joint-design.md +0 -78
  211. package/dist-skill/docs-dev/guides/modeling-recipes.md +0 -78
  212. package/dist-skill/docs-dev/guides/positioning.md +0 -161
  213. package/dist-skill/docs-dev/guides/skill-maintenance.md +0 -161
  214. package/dist-skill/docs-dev/internals/backend-vocabulary.md +0 -35
  215. package/dist-skill/docs-dev/internals/compiler.md +0 -307
  216. package/dist-skill/docs-dev/internals/constraint-solver-quality.md +0 -161
  217. package/dist-skill/docs-dev/internals/constraint-solver.md +0 -176
  218. package/dist-skill/docs-dev/internals/sketch-2d-pipeline.md +0 -108
  219. package/dist-skill/library/forgecad-image-replicator/scripts/compare_images.mjs +0 -289
@@ -1,8 +1,8 @@
1
1
  var __defProp = Object.defineProperty;
2
2
  var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
3
3
  var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
4
- import { D as DoubleSide, cB as initSolverWasm, cA as initKernel, S as Scene, cC as BoxGeometry, bR as MeshStandardMaterial, a4 as BackSide, b3 as PointLight, M as Mesh, aa as MeshBasicMaterial, cD as localAabbPlaneRelation, h as Vector2, cE as ShapeUtils, cF as analyzePhysicalConnectivity, g as Vector3, $ as Matrix4, cG as Frustum, G as Box3, a0 as MathUtils, cH as meshContactDataFor, cI as AabbSpatialIndex, cJ as detectPhysicalContact, cK as resolveThicknessInspectionOptions, R as Raycaster, cL as thicknessColor, cM as thicknessClass, aX as BufferAttribute, cN as roughnessClassForAngle, cO as resolveRoughnessInspectionOptions, cP as roughnessColorForAngle, cQ as roughnessScoreForAngle, cR as activateBackend, e as Color, b6 as COMPARISON_COLORS, aF as resolveForgeRenderStyle, bt as getRenderStylePreset, ax as setParamOverrides, bh as runScript, cl as scanProxyGridForBounds, cS as Group, ba as shapeToGeometry, bi as MeshPhysicalMaterial, bw as NormalBlending, cT as createScanProxyGeometry, bv as AdditiveBlending, aK as LineBasicMaterial, bj as LineSegments, aJ as BufferGeometry, P as PerspectiveCamera, bo as worldAuthorPlaneToLocal, cU as resolveSectionHatchMetrics, ct as buildGeometryComparisonPointCloud, cr as triangleSoupFromMeshes, O as OrthographicCamera, k as ShaderMaterial, bC as ZEBRA_STRIPE_FRAGMENT_SHADER, bD as ZEBRA_STRIPE_VERTEX_SHADER, bx as ZEBRA_STRIPE_SOFTNESS, by as ZEBRA_STRIPE_SCALE, bz as ZEBRA_LIGHT_COLOR, bA as ZEBRA_DARK_COLOR, bB as ZEBRA_ACCENT_COLOR, bs as geometryWithVisibleVertexColors, cV as intersectWithPlane, cW as setActiveBackend, W as WebGLRenderer, A as ACESFilmicToneMapping, c as SRGBColorSpace, cX as parseCameraCliSpec, cY as PMREMGenerator, aY as CanvasTexture, aZ as Object3D, a_ as FogExp2, a$ as Fog, b0 as AmbientLight, b4 as DirectionalLight, b1 as HemisphereLight, cd as findJointAnimationClip, p as Plane, bF as SURFACE_FIELD_FRAGMENT_SHADER, bG as SURFACE_FIELD_VERTEX_SHADER, bE as SCAN_PROXY_LAYER_STYLES, Y as Vector4, bU as SDF_RAYMARCH_PROXY_VERTEX_SHADER, bT as buildSdfRaymarchFragmentShader, ce as resolveJointAnimation, cf as resolveJointViewValues, bL as ROUGHNESS_COLORS, cZ as PointsMaterial, c_ as Points, b5 as heatPointsForSide, c$ as analyzeCollisionIntersections, d0 as serializeCollisionFinding, d1 as summarizeThicknessSamples, bN as THICKNESS_COLORS, b2 as SpotLight, cx as resolveScalarSceneSampleBudget, bb as buildComparisonHeatPatchGeometry, bc as EdgesGeometry, b7 as comparisonHeatDepthTest, b8 as comparisonHeatEdgeOpacity, b9 as comparisonHeatPatchOpacity, cz as comparisonCandidateContextOpacity, d2 as DEFAULT_COMPARISON_CANDIDATE_OPACITY } from "../scalar-sampling-budget-CfDiFvh7.js";
5
- import { m as mergeViewportRenderSceneStates, p as parseRenderSceneCliSpec, g as getSceneObjectTreePath } from "../targets-D6PWsv6X.js";
4
+ import { D as DoubleSide, cC as initSolverWasm, cB as initKernel, S as Scene, cD as BoxGeometry, bV as MeshStandardMaterial, a4 as BackSide, b7 as PointLight, M as Mesh, aa as MeshBasicMaterial, cE as localAabbPlaneRelation, h as Vector2, cF as ShapeUtils, cG as analyzePhysicalConnectivity, g as Vector3, $ as Matrix4, cH as Frustum, G as Box3, a0 as MathUtils, cI as meshContactDataFor, cJ as AabbSpatialIndex, cK as detectPhysicalContact, cL as resolveThicknessInspectionOptions, R as Raycaster, cM as thicknessColor, cN as thicknessClass, a$ as BufferAttribute, cO as roughnessClassForAngle, cP as resolveRoughnessInspectionOptions, cQ as roughnessColorForAngle, cR as roughnessScoreForAngle, cS as activateBackend, e as Color, ba as COMPARISON_COLORS, ay as resolveForgeRenderStyle, by as getRenderStylePreset, ax as setParamOverrides, bl as runScript, cm as scanProxyGridForBounds, cT as Group, be as shapeToGeometry, bm as MeshPhysicalMaterial, bA as NormalBlending, cU as createScanProxyGeometry, bw as AdditiveBlending, aO as LineBasicMaterial, bn as LineSegments, aN as BufferGeometry, P as PerspectiveCamera, cj as DEFAULT_VIEW_CONFIG, bs as worldAuthorPlaneToLocal, cV as resolveSectionHatchMetrics, cu as buildGeometryComparisonPointCloud, cs as triangleSoupFromMeshes, O as OrthographicCamera, k as ShaderMaterial, bG as ZEBRA_STRIPE_FRAGMENT_SHADER, bH as ZEBRA_STRIPE_VERTEX_SHADER, bB as ZEBRA_STRIPE_SOFTNESS, bC as ZEBRA_STRIPE_SCALE, bD as ZEBRA_LIGHT_COLOR, bE as ZEBRA_DARK_COLOR, bF as ZEBRA_ACCENT_COLOR, bx as geometryWithVisibleVertexColors, cW as intersectWithPlane, cX as setActiveBackend, W as WebGLRenderer, A as ACESFilmicToneMapping, c as SRGBColorSpace, cY as parseCameraCliSpec, cZ as PMREMGenerator, b0 as CanvasTexture, b1 as Object3D, b2 as FogExp2, b3 as Fog, b4 as AmbientLight, b8 as DirectionalLight, b5 as HemisphereLight, aI as findJointAnimationClip, p as Plane, bJ as SURFACE_FIELD_FRAGMENT_SHADER, bK as SURFACE_FIELD_VERTEX_SHADER, bI as SCAN_PROXY_LAYER_STYLES, Y as Vector4, bY as SDF_RAYMARCH_PROXY_VERTEX_SHADER, bX as buildSdfRaymarchFragmentShader, aJ as resolveJointAnimation, aK as resolveJointViewValues, bP as ROUGHNESS_COLORS, c_ as PointsMaterial, c$ as Points, b9 as heatPointsForSide, d0 as analyzeCollisionIntersections, d1 as serializeCollisionFinding, d2 as summarizeThicknessSamples, bR as THICKNESS_COLORS, b6 as SpotLight, c0 as CylinderGeometry, d3 as TorusGeometry, bM as CatmullRomCurve3, bN as TubeGeometry, cy as resolveScalarSceneSampleBudget, bf as buildComparisonHeatPatchGeometry, bg as EdgesGeometry, d4 as SphereGeometry, d5 as ConeGeometry, bb as comparisonHeatDepthTest, bc as comparisonHeatEdgeOpacity, bd as comparisonHeatPatchOpacity, cA as comparisonCandidateContextOpacity, d6 as DEFAULT_COMPARISON_CANDIDATE_OPACITY } from "../scalar-sampling-budget-wJF98aY9.js";
5
+ import { m as mergeViewportRenderSceneStates, p as parseRenderSceneCliSpec, g as getSceneObjectTreePath } from "../targets-B9sGB5nB.js";
6
6
  const CAD_MATERIAL_PROPS = {
7
7
  color: 6003669,
8
8
  metalness: 0.05,
@@ -1767,6 +1767,10 @@ const exportCtx = exportCanvas.getContext("2d");
1767
1767
  const DEFAULT_BACKGROUND = 2434342;
1768
1768
  const DEFAULT_PITCH_DEG = 18;
1769
1769
  const DEFAULT_FIXED_DIR = new Vector3(0, -1, 0.32).normalize();
1770
+ const RIG_SHADOW_COLOR = [6, 10, 18];
1771
+ const RIG_LINK_COLOR = [20, 220, 255];
1772
+ const RIG_PART_LINK_COLOR = [174, 255, 92];
1773
+ const RIG_HIDDEN_LINK_COLOR = [116, 136, 148];
1770
1774
  const ORTHO_BASE_SIZE = 960;
1771
1775
  const CAPTURE_RUNTIME_CAPABILITIES = {
1772
1776
  version: 3,
@@ -2790,6 +2794,314 @@ function renderCurrentMask(session) {
2790
2794
  });
2791
2795
  }
2792
2796
  }
2797
+ function tupleFromVector(value) {
2798
+ return [Number(value.x.toFixed(6)), Number(value.y.toFixed(6)), Number(value.z.toFixed(6))];
2799
+ }
2800
+ function isFiniteVector(value) {
2801
+ return Number.isFinite(value.x) && Number.isFinite(value.y) && Number.isFinite(value.z);
2802
+ }
2803
+ function clampRadius(value, min, max) {
2804
+ return MathUtils.clamp(value, min, max);
2805
+ }
2806
+ function rigObjectMatchesChild(renderable, child) {
2807
+ return renderable.name === child || renderable.groupName === child;
2808
+ }
2809
+ function rigChildCenter(session, child) {
2810
+ const bounds = new Box3();
2811
+ let hasBounds = false;
2812
+ for (const renderable of session.renderables) {
2813
+ if (!rigObjectMatchesChild(renderable, child)) continue;
2814
+ renderable.root.updateMatrixWorld(true);
2815
+ const objectBounds = new Box3().setFromObject(renderable.root);
2816
+ if (!objectBounds.isEmpty()) {
2817
+ bounds.union(objectBounds);
2818
+ hasBounds = true;
2819
+ }
2820
+ }
2821
+ if (!hasBounds) return null;
2822
+ const center = bounds.getCenter(new Vector3());
2823
+ return isFiniteVector(center) ? center : null;
2824
+ }
2825
+ function resolveRigArcReferenceDirection(axisWorld) {
2826
+ const candidates = [new Vector3(0, 0, 1), new Vector3(0, 1, 0), new Vector3(1, 0, 0)];
2827
+ for (const candidate of candidates) {
2828
+ const projected = candidate.clone().addScaledVector(axisWorld, -candidate.dot(axisWorld));
2829
+ if (projected.lengthSq() > 1e-8) return projected.normalize();
2830
+ }
2831
+ return new Vector3(1, 0, 0);
2832
+ }
2833
+ function resolveRigVisualArcAngleDeg(valueDeg, visualLimitDeg) {
2834
+ if (!Number.isFinite(valueDeg)) return 0;
2835
+ const limit = MathUtils.clamp(visualLimitDeg, 0, 360);
2836
+ if (limit <= 1e-8) return 0;
2837
+ if (Math.abs(valueDeg) <= 360) return MathUtils.clamp(valueDeg, -limit, limit);
2838
+ return MathUtils.clamp(valueDeg % 360, -limit, limit);
2839
+ }
2840
+ function addRigCylinder(group, start, end, radius, color, opacity, renderOrder) {
2841
+ const direction = end.clone().sub(start);
2842
+ const length = direction.length();
2843
+ if (length <= 1e-6) return null;
2844
+ direction.multiplyScalar(1 / length);
2845
+ const geometry = new CylinderGeometry(radius, radius, length, 18);
2846
+ const material = new MeshBasicMaterial({
2847
+ color: Array.isArray(color) ? colorHex(color) : color,
2848
+ transparent: opacity < 1,
2849
+ opacity,
2850
+ depthTest: false,
2851
+ depthWrite: false,
2852
+ blending: AdditiveBlending,
2853
+ toneMapped: false
2854
+ });
2855
+ const mesh = new Mesh(geometry, material);
2856
+ mesh.position.copy(start).add(end).multiplyScalar(0.5);
2857
+ mesh.quaternion.setFromUnitVectors(new Vector3(0, 1, 0), direction);
2858
+ mesh.renderOrder = renderOrder;
2859
+ group.add(mesh);
2860
+ return mesh;
2861
+ }
2862
+ function addRigSphere(group, position, radius, color, renderOrder) {
2863
+ const mesh = new Mesh(
2864
+ new SphereGeometry(radius, 18, 18),
2865
+ new MeshBasicMaterial({ color, depthTest: false, toneMapped: false })
2866
+ );
2867
+ mesh.position.copy(position);
2868
+ mesh.renderOrder = renderOrder;
2869
+ group.add(mesh);
2870
+ }
2871
+ function addRigCone(group, position, direction, radius, length, color) {
2872
+ if (direction.lengthSq() <= 1e-8) return;
2873
+ const mesh = new Mesh(
2874
+ new ConeGeometry(radius, length, 18),
2875
+ new MeshBasicMaterial({ color, depthTest: false, toneMapped: false })
2876
+ );
2877
+ mesh.position.copy(position);
2878
+ mesh.quaternion.setFromUnitVectors(new Vector3(0, 1, 0), direction.clone().normalize());
2879
+ mesh.renderOrder = 96;
2880
+ group.add(mesh);
2881
+ }
2882
+ function addRigJointVisual(group, entry, config, axisLength, hidden) {
2883
+ const pivot = new Vector3(...entry.pivot);
2884
+ const axis = new Vector3(...entry.axis).normalize();
2885
+ const axisColor = hidden ? colorHex(RIG_HIDDEN_LINK_COLOR) : config.axisColor;
2886
+ const arcColor = hidden ? colorHex(RIG_HIDDEN_LINK_COLOR) : config.arcColor;
2887
+ const coreColor = hidden ? "#d7e7ee" : config.axisCoreColor;
2888
+ const zeroColor = hidden ? "#aebbc4" : config.zeroColor;
2889
+ const length = axisLength * (hidden ? 0.78 : 1);
2890
+ const axisRadius = clampRadius(length * config.axisLineRadiusScale, config.axisLineRadiusMin, config.axisLineRadiusMax);
2891
+ const spokeRadius = clampRadius(length * config.spokeLineRadiusScale, config.spokeLineRadiusMin, config.spokeLineRadiusMax);
2892
+ const arcLineRadius = clampRadius(length * config.arcLineRadiusScale, config.arcLineRadiusMin, config.arcLineRadiusMax);
2893
+ const dotRadius = Math.max(config.axisDotRadiusMin, length * config.axisDotRadiusScale);
2894
+ const arrowRadius = Math.max(config.axisArrowRadiusMin, length * config.axisArrowRadiusScale);
2895
+ const arrowLength = Math.max(config.axisArrowLengthMin, length * config.axisArrowLengthScale);
2896
+ const axisStart = pivot.clone().addScaledVector(axis, -length * 0.5);
2897
+ const axisEnd = pivot.clone().addScaledVector(axis, length * 0.5);
2898
+ addRigCylinder(group, axisStart, axisEnd, axisRadius, axisColor, hidden ? 0.55 : 0.98, 95);
2899
+ addRigSphere(group, pivot, dotRadius, coreColor, 96);
2900
+ addRigCone(
2901
+ group,
2902
+ axisEnd.clone().addScaledVector(axis, arrowLength * config.axisArrowOffsetFactor),
2903
+ axis,
2904
+ arrowRadius,
2905
+ arrowLength,
2906
+ axisColor
2907
+ );
2908
+ const ringRadius = Math.max(config.arcRadiusMin, length * config.arcRadiusScale);
2909
+ const ring = new Mesh(
2910
+ new TorusGeometry(ringRadius, arcLineRadius * 0.78, 10, 72),
2911
+ new MeshBasicMaterial({
2912
+ color: hidden ? colorHex(RIG_HIDDEN_LINK_COLOR) : config.axisColor,
2913
+ transparent: true,
2914
+ opacity: hidden ? 0.34 : 0.58,
2915
+ depthTest: false,
2916
+ depthWrite: false,
2917
+ blending: AdditiveBlending,
2918
+ toneMapped: false
2919
+ })
2920
+ );
2921
+ ring.position.copy(pivot);
2922
+ ring.quaternion.setFromUnitVectors(new Vector3(0, 0, 1), axis);
2923
+ ring.renderOrder = 92;
2924
+ group.add(ring);
2925
+ if (entry.type !== "revolute") return;
2926
+ const arcStartDirection = resolveRigArcReferenceDirection(axis);
2927
+ const arcAngleRad = MathUtils.degToRad(resolveRigVisualArcAngleDeg(entry.value, config.arcVisualLimitDeg));
2928
+ const arcStartPoint = pivot.clone().addScaledVector(arcStartDirection, ringRadius);
2929
+ const arcEndDirection = arcStartDirection.clone().applyAxisAngle(axis, arcAngleRad);
2930
+ const arcEndPoint = pivot.clone().addScaledVector(arcEndDirection, ringRadius);
2931
+ addRigCylinder(group, pivot, arcStartPoint, spokeRadius, zeroColor, hidden ? 0.45 : 0.9, 97);
2932
+ addRigCylinder(group, pivot, arcEndPoint, spokeRadius, arcColor, hidden ? 0.5 : 0.96, 97);
2933
+ addRigSphere(group, arcStartPoint, Math.max(config.arcDotRadiusMin, length * config.arcDotRadiusScale), zeroColor, 98);
2934
+ addRigSphere(group, arcEndPoint, Math.max(config.arcDotRadiusMin, length * config.arcDotRadiusScale), arcColor, 98);
2935
+ if (Math.abs(arcAngleRad) > 1e-4) {
2936
+ const visualDeg = MathUtils.radToDeg(Math.abs(arcAngleRad));
2937
+ const steps = Math.max(config.arcMinSteps, Math.ceil(visualDeg / config.arcStepDeg));
2938
+ const points = [];
2939
+ for (let i = 0; i <= steps; i += 1) {
2940
+ const direction = arcStartDirection.clone().applyAxisAngle(axis, arcAngleRad * (i / steps));
2941
+ points.push(pivot.clone().addScaledVector(direction, ringRadius));
2942
+ }
2943
+ const curve = new CatmullRomCurve3(points, false, "centripetal");
2944
+ const tubeSegments = Math.max(config.arcTubeSegmentsMin, Math.ceil(points.length * config.arcTubeSegmentsFactor));
2945
+ const tube = new Mesh(
2946
+ new TubeGeometry(curve, tubeSegments, arcLineRadius, config.arcTubeRadialSegments, false),
2947
+ new MeshBasicMaterial({
2948
+ color: arcColor,
2949
+ transparent: true,
2950
+ opacity: hidden ? 0.5 : 0.98,
2951
+ depthTest: false,
2952
+ depthWrite: false,
2953
+ blending: AdditiveBlending,
2954
+ toneMapped: false
2955
+ })
2956
+ );
2957
+ tube.renderOrder = 98;
2958
+ group.add(tube);
2959
+ }
2960
+ }
2961
+ function buildRigSceneGroup(session) {
2962
+ var _a;
2963
+ const group = new Group();
2964
+ const config = session.jointOverlayConfig;
2965
+ const bbox = new Box3(new Vector3(...session.bbox.min), new Vector3(...session.bbox.max));
2966
+ const diagonal = Math.max(1, bbox.getSize(new Vector3()).length());
2967
+ const axisLength = Math.max(config.axisLengthMin, diagonal * config.axisLengthScale);
2968
+ const animatedValues = resolveJointAnimation(session.selectedAnimation, 0, session.baseJointValues);
2969
+ const effectiveJointValues = resolveJointViewValues(session.joints, session.jointCouplings, animatedValues);
2970
+ const jointMatrices = computeJointNodeMatrices(session.joints, effectiveJointValues);
2971
+ const joints = [];
2972
+ const links = [];
2973
+ const jointByChild = /* @__PURE__ */ new Map();
2974
+ for (let index = 0; index < session.joints.length; index += 1) {
2975
+ const joint = session.joints[index];
2976
+ const parentMatrix = joint.parent ? ((_a = jointMatrices.get(joint.parent)) == null ? void 0 : _a.clone()) ?? new Matrix4() : new Matrix4();
2977
+ const axisLocal = new Vector3(joint.axis[0], joint.axis[1], joint.axis[2]).normalize();
2978
+ const axisWorld = axisLocal.clone().transformDirection(parentMatrix);
2979
+ if (axisWorld.lengthSq() <= 1e-8) axisWorld.copy(axisLocal);
2980
+ axisWorld.normalize();
2981
+ if (axisWorld.lengthSq() <= 1e-8 || !isFiniteVector(axisWorld)) continue;
2982
+ const pivotWorld = new Vector3(joint.pivot[0], joint.pivot[1], joint.pivot[2]).applyMatrix4(parentMatrix);
2983
+ if (!isFiniteVector(pivotWorld)) continue;
2984
+ const rawValue = effectiveJointValues[joint.name] ?? joint.defaultValue;
2985
+ const entry = {
2986
+ index,
2987
+ name: joint.name,
2988
+ type: joint.type,
2989
+ child: joint.child,
2990
+ ...joint.parent ? { parent: joint.parent } : {},
2991
+ hidden: joint.hidden === true,
2992
+ value: Number.isFinite(rawValue) ? rawValue : joint.defaultValue,
2993
+ pivot: tupleFromVector(pivotWorld),
2994
+ axis: tupleFromVector(axisWorld)
2995
+ };
2996
+ joints.push(entry);
2997
+ jointByChild.set(joint.child, entry);
2998
+ }
2999
+ const pushLink = (entry, kind, start, end) => {
3000
+ if (!start || !end || !isFiniteVector(start) || !isFiniteVector(end)) return;
3001
+ if (start.distanceToSquared(end) <= 1e-6) return;
3002
+ const id = `${entry.name}:${kind}`;
3003
+ links.push({
3004
+ id,
3005
+ kind,
3006
+ joint: entry.name,
3007
+ hidden: entry.hidden,
3008
+ start: tupleFromVector(start),
3009
+ end: tupleFromVector(end)
3010
+ });
3011
+ };
3012
+ for (const entry of joints) {
3013
+ const pivot = new Vector3(...entry.pivot);
3014
+ const parent = entry.parent ? jointByChild.get(entry.parent) : null;
3015
+ pushLink(entry, "hierarchy", parent ? new Vector3(...parent.pivot) : null, pivot);
3016
+ pushLink(entry, "part", pivot, rigChildCenter(session, entry.child));
3017
+ }
3018
+ const hierarchyRadius = clampRadius(axisLength * 0.013, 0.55, 2.4);
3019
+ const partRadius = clampRadius(axisLength * 8e-3, 0.34, 1.45);
3020
+ for (const link of links) {
3021
+ addRigCylinder(
3022
+ group,
3023
+ new Vector3(...link.start),
3024
+ new Vector3(...link.end),
3025
+ link.kind === "hierarchy" ? hierarchyRadius : partRadius,
3026
+ link.hidden ? RIG_HIDDEN_LINK_COLOR : link.kind === "hierarchy" ? RIG_LINK_COLOR : RIG_PART_LINK_COLOR,
3027
+ link.hidden ? 0.36 : link.kind === "hierarchy" ? 0.82 : 0.58,
3028
+ 88
3029
+ );
3030
+ }
3031
+ if (config.enabled) {
3032
+ for (const joint of joints) {
3033
+ addRigJointVisual(group, joint, config, axisLength, joint.hidden);
3034
+ }
3035
+ }
3036
+ return {
3037
+ group,
3038
+ report: {
3039
+ method: "rig-skeleton-shadow-v1",
3040
+ objectCount: session.renderables.length,
3041
+ jointCount: joints.length,
3042
+ linkCount: links.length,
3043
+ hiddenJointCount: joints.filter((joint) => joint.hidden).length,
3044
+ joints,
3045
+ links,
3046
+ palette: {
3047
+ shadow: RIG_SHADOW_COLOR,
3048
+ hierarchyLink: RIG_LINK_COLOR,
3049
+ partLink: RIG_PART_LINK_COLOR,
3050
+ hiddenLink: RIG_HIDDEN_LINK_COLOR
3051
+ }
3052
+ }
3053
+ };
3054
+ }
3055
+ function renderCurrentRig(session) {
3056
+ const r = getRenderer(session.size, session.pixelRatio);
3057
+ const { group, report } = buildRigSceneGroup(session);
3058
+ const replacements = session.renderables.map((renderable) => {
3059
+ var _a, _b;
3060
+ const material = new MeshBasicMaterial({
3061
+ color: colorHex(RIG_SHADOW_COLOR),
3062
+ transparent: true,
3063
+ opacity: 0.16,
3064
+ side: DoubleSide,
3065
+ depthWrite: false,
3066
+ toneMapped: false,
3067
+ clippingPlanes: renderable.solidMaterial.clippingPlanes
3068
+ });
3069
+ const previous = {
3070
+ solidVisible: renderable.solid.visible,
3071
+ wireVisible: renderable.wire.visible,
3072
+ shellVisible: (_a = renderable.shell) == null ? void 0 : _a.visible,
3073
+ scanProxyVisible: (_b = renderable.scanProxy) == null ? void 0 : _b.visible,
3074
+ material: renderable.solid.material,
3075
+ replacement: material
3076
+ };
3077
+ renderable.solid.material = material;
3078
+ renderable.solid.visible = true;
3079
+ renderable.wire.visible = false;
3080
+ if (renderable.shell) renderable.shell.visible = false;
3081
+ if (renderable.scanProxy) renderable.scanProxy.visible = false;
3082
+ return { renderable, previous };
3083
+ });
3084
+ session.scene.add(group);
3085
+ try {
3086
+ const png = withTemporarySceneBackground(session, new Color(132105), () => {
3087
+ updateSdfRaymarchUniforms(session);
3088
+ r.render(session.scene, session.camera);
3089
+ return captureRenderedPng(session.size);
3090
+ });
3091
+ return { png, report };
3092
+ } finally {
3093
+ session.scene.remove(group);
3094
+ disposeObjectTree(group);
3095
+ replacements.forEach(({ renderable, previous }) => {
3096
+ renderable.solid.material = previous.material;
3097
+ renderable.solid.visible = previous.solidVisible;
3098
+ renderable.wire.visible = previous.wireVisible;
3099
+ if (renderable.shell && previous.shellVisible !== void 0) renderable.shell.visible = previous.shellVisible;
3100
+ if (renderable.scanProxy && previous.scanProxyVisible !== void 0) renderable.scanProxy.visible = previous.scanProxyVisible;
3101
+ previous.replacement.dispose();
3102
+ });
3103
+ }
3104
+ }
2793
3105
  function analyzeSessionConnectivity(session) {
2794
3106
  if (!session.physicalConnectivity) {
2795
3107
  session.physicalConnectivity = analyzePhysicalConnectivity(session.connectivityEntries);
@@ -3792,9 +4104,6 @@ function addRenderStyleLights(scene, style) {
3792
4104
  new HemisphereLight(new Color(lights.hemisphereSky), new Color(lights.hemisphereGround), lights.hemisphereIntensity)
3793
4105
  );
3794
4106
  }
3795
- function fieldKindUniform(kind) {
3796
- return kind === "hybrid" ? 1 : 0;
3797
- }
3798
4107
  function createSurfaceFieldMaterial({
3799
4108
  field,
3800
4109
  objectColor,
@@ -3808,7 +4117,6 @@ function createSurfaceFieldMaterial({
3808
4117
  uAccentColor: { value: new Color(field.accentColor) },
3809
4118
  uBaseColor: { value: new Color(field.baseColor) },
3810
4119
  uDarkColor: { value: new Color(field.darkColor) },
3811
- uFieldKind: { value: fieldKindUniform(field.kind) },
3812
4120
  uFieldScale: { value: fieldScale },
3813
4121
  uGlow: { value: field.glow },
3814
4122
  uLineColor: { value: new Color(field.lineColor) },
@@ -4693,7 +5001,7 @@ Available renderable objects: ${available}`;
4693
5001
  return "No visible renderable objects found.";
4694
5002
  }
4695
5003
  function createSession(code, opts) {
4696
- var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n, _o;
5004
+ var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n, _o, _p;
4697
5005
  const size = (opts == null ? void 0 : opts.size) ?? 1024;
4698
5006
  const pixelRatio = (opts == null ? void 0 : opts.pixelRatio) ?? 1;
4699
5007
  const debug = createCaptureDebugLogger(opts == null ? void 0 : opts.debug);
@@ -4706,6 +5014,12 @@ function createSession(code, opts) {
4706
5014
  });
4707
5015
  const r = getRenderer(size, pixelRatio);
4708
5016
  const renderStyle = resolveForgeRenderStyle(opts == null ? void 0 : opts.renderStyle);
5017
+ if (renderStyle === "matrix") {
5018
+ return {
5019
+ ok: false,
5020
+ error: "Matrix render style is only supported in the interactive viewport; CLI rendering does not support the glyph volume yet."
5021
+ };
5022
+ }
4709
5023
  const renderStylePreset = getRenderStylePreset(renderStyle);
4710
5024
  let requestedSceneState = null;
4711
5025
  try {
@@ -5190,6 +5504,7 @@ function createSession(code, opts) {
5190
5504
  roughnessInspection: null,
5191
5505
  joints,
5192
5506
  jointCouplings,
5507
+ jointOverlayConfig: ((_p = result.viewConfig) == null ? void 0 : _p.jointOverlay) ?? DEFAULT_VIEW_CONFIG.jointOverlay,
5193
5508
  animationClips,
5194
5509
  defaultAnimation,
5195
5510
  selectedAnimation,
@@ -5336,6 +5651,7 @@ window.__forgeRender = async (code, opts) => {
5336
5651
  const depthRenders = {};
5337
5652
  const normalRenders = {};
5338
5653
  const zebraRenders = {};
5654
+ const rigRenders = {};
5339
5655
  const maskRenders = {};
5340
5656
  const connectivityRenders = {};
5341
5657
  const floatingRenders = {};
@@ -5348,6 +5664,7 @@ window.__forgeRender = async (code, opts) => {
5348
5664
  let connectivityReport = null;
5349
5665
  let floatingReport = null;
5350
5666
  let distanceReport = null;
5667
+ let rigReport = null;
5351
5668
  const comparisonViewStats = {};
5352
5669
  let comparisonPointCloud = null;
5353
5670
  let collisionReport = null;
@@ -5423,6 +5740,13 @@ window.__forgeRender = async (code, opts) => {
5423
5740
  zebraRenders[label] = renderCurrentZebra(session);
5424
5741
  await markChannelViewDone("zebra", label);
5425
5742
  }
5743
+ if (requestedChannels.has("rig")) {
5744
+ await markChannelViewStart("rig", label);
5745
+ const rig = renderCurrentRig(session);
5746
+ rigRenders[label] = rig.png;
5747
+ rigReport = rig.report;
5748
+ await markChannelViewDone("rig", label);
5749
+ }
5426
5750
  if (requestedChannels.has("roughness")) {
5427
5751
  await markChannelViewStart("roughness", label);
5428
5752
  const roughness = renderCurrentRoughness(session, opts == null ? void 0 : opts.roughness);
@@ -5518,6 +5842,12 @@ window.__forgeRender = async (code, opts) => {
5518
5842
  depth: depthRenders,
5519
5843
  normals: normalRenders,
5520
5844
  zebra: zebraRenders,
5845
+ rig: rigReport ? {
5846
+ ...rigReport,
5847
+ views: rigRenders
5848
+ } : {
5849
+ views: rigRenders
5850
+ },
5521
5851
  roughness: roughnessReport ? {
5522
5852
  ...roughnessReport,
5523
5853
  pointCloud: roughnessPointCloud,