forgecad 0.9.13 → 0.9.14

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 (57) hide show
  1. package/dist/assets/{AdminPage-DramHHDf.js → AdminPage-eWGs2K6H.js} +1 -1
  2. package/dist/assets/{BenchmarkPage-Bjgkh5m9.js → BenchmarkPage-CTrLKfpo.js} +1 -1
  3. package/dist/assets/{BlogPage-n_HGP3Qm.js → BlogPage-5nPesyds.js} +1 -1
  4. package/dist/assets/{DocsPage-WCIkPmzC.js → DocsPage-C4Y3nbYc.js} +1 -1
  5. package/dist/assets/{EditorApp-CP9Za6tm.js → EditorApp-lXv53A1m.js} +9 -29
  6. package/dist/assets/{EmbedViewer-DEZKqdfW.js → EmbedViewer-C8fB4n5U.js} +2 -2
  7. package/dist/assets/{LandingPageProofDriven-CeRIctuj.js → LandingPageProofDriven-jSz0LaMM.js} +1 -1
  8. package/dist/assets/{PricingPage-rIRa8p4Y.js → PricingPage-B83B90zh.js} +1 -1
  9. package/dist/assets/{SettingsPage-BqCUvEXM.js → SettingsPage-DY889pcu.js} +1 -1
  10. package/dist/assets/{app-BUZqJvSO.js → app-bEww1ic4.js} +26 -28
  11. package/dist/assets/cli/{render-lhGxj50Y.js → render-Cho2uKG_.js} +88 -25
  12. package/dist/assets/{constructionHistoryWorker-ipD1jcIv.js → constructionHistoryWorker-HYwzJY4m.js} +1 -1
  13. package/dist/assets/{evalWorker-CHXSe_-u.js → evalWorker-CjQwJSE-.js} +3 -3
  14. package/dist/assets/{forgecad_geometry-BVnIeXMG.js → forgecad_geometry-CH2nvuLA.js} +1 -1
  15. package/dist/assets/forgecad_geometry_bg-C5_E9Oa9.wasm +0 -0
  16. package/dist/assets/{manifold-D1LZIHqn.js → manifold-CG9Fokx-.js} +1 -1
  17. package/dist/assets/{manifold-BTkzxi9V.js → manifold-rmfAcdwF.js} +1 -1
  18. package/dist/assets/{manifold-C2fwoTgd.js → manifold-uRzgk5O8.js} +2 -2
  19. package/dist/assets/{reportWorker-Cq1qGmg0.js → reportWorker-4cW_ZpoS.js} +3 -3
  20. package/dist/assets/{scalar-sampling-budget-D9Qv_UlJ.js → scalar-sampling-budget-CfDiFvh7.js} +12 -18
  21. package/dist/assets/{solver-BZ9LPTHs.js → solver-DuJAO8S6.js} +1 -1
  22. package/dist/assets/solver_bg-CWvv4lnN.wasm +0 -0
  23. package/dist/assets/{renderSceneState-Dr0xPq1A.js → targets-D6PWsv6X.js} +27 -1
  24. package/dist/cli/render.html +1 -1
  25. package/dist/docs/index.html +2 -2
  26. package/dist/docs-raw/AI/usage.md +6 -5
  27. package/dist/docs-raw/CLI.md +41 -11
  28. package/dist/docs-raw/generated/concepts.md +3 -3
  29. package/dist/docs-raw/generated/viewport.md +3 -3
  30. package/dist/docs-raw/harbor-cli.md +854 -0
  31. package/dist/docs-raw/rl-environments.md +100 -258
  32. package/dist/docs-raw/skills/forgecad-3d-reconstruction.md +2 -2
  33. package/dist/docs-raw/skills/forgecad-make-a-model.md +3 -3
  34. package/dist/docs-raw/skills/forgecad-reconstruction-benchmark.md +3 -3
  35. package/dist/index.html +1 -1
  36. package/dist/sitemap.xml +7 -7
  37. package/dist-cli/{check-compiler-LOXCPEOI.js → check-compiler-U5SOPN7X.js} +2 -2
  38. package/dist-cli/{check-query-propagation-BAKNVWXR.js → check-query-propagation-XOKNSSYU.js} +2 -2
  39. package/dist-cli/{chunk-RY43WF46.js → chunk-EXWGNL6K.js} +342 -2
  40. package/dist-cli/{chunk-RY43WF46.js.map → chunk-EXWGNL6K.js.map} +1 -1
  41. package/dist-cli/forgecad.js +733 -352
  42. package/dist-cli/forgecad.js.map +1 -1
  43. package/dist-cli/forgecad_geometry_bg.wasm +0 -0
  44. package/dist-cli/solver_bg.wasm +0 -0
  45. package/dist-skill/CONTEXT.md +3 -3
  46. package/dist-skill/docs/CLI.md +41 -11
  47. package/dist-skill/docs/generated/viewport.md +3 -3
  48. package/dist-skill/docs-dev/CLI.md +41 -11
  49. package/dist-skill/docs-dev/generated/viewport.md +3 -3
  50. package/dist-skill/library/forgecad-3d-reconstruction/SKILL.md +2 -2
  51. package/dist-skill/library/forgecad-make-a-model/SKILL.md +3 -3
  52. package/dist-skill/library/forgecad-reconstruction-benchmark/SKILL.md +3 -3
  53. package/package.json +1 -6
  54. package/dist/assets/forgecad_geometry_bg-DufhhCBV.wasm +0 -0
  55. package/dist/assets/solver_bg-DAHZJ_rw.wasm +0 -0
  56. /package/dist-cli/{check-compiler-LOXCPEOI.js.map → check-compiler-U5SOPN7X.js.map} +0 -0
  57. /package/dist-cli/{check-query-propagation-BAKNVWXR.js.map → check-query-propagation-XOKNSSYU.js.map} +0 -0
@@ -1,6 +1,6 @@
1
1
  import { r as reactExports, j as jsxRuntimeExports } from "./vendor-react-Da3A2QmU.js";
2
- import { cA as initKernel, cB as initSolverWasm } from "./scalar-sampling-budget-D9Qv_UlJ.js";
3
- import { g as useForgeStore, af as getExternalUrl, ag as getGistId, l as fetchUrlModel, k as fetchGistModel, al as buildShareUrl, B as BrandMark, ah as Viewport } from "./app-BUZqJvSO.js";
2
+ import { cA as initKernel, cB as initSolverWasm } from "./scalar-sampling-budget-CfDiFvh7.js";
3
+ import { g as useForgeStore, af as getExternalUrl, ag as getGistId, l as fetchUrlModel, k as fetchGistModel, al as buildShareUrl, B as BrandMark, ah as Viewport } from "./app-bEww1ic4.js";
4
4
  function EmbedViewer() {
5
5
  const kernelReady = useForgeStore((s) => s.kernelReady);
6
6
  const setKernelReady = useForgeStore((s) => s.setKernelReady);
@@ -1,5 +1,5 @@
1
1
  import { r as reactExports, j as jsxRuntimeExports, L as Link } from "./vendor-react-Da3A2QmU.js";
2
- import { B as BrandMark } from "./app-BUZqJvSO.js";
2
+ import { B as BrandMark } from "./app-bEww1ic4.js";
3
3
  /* empty css */
4
4
  const LINKS = {
5
5
  glasses: {
@@ -1,5 +1,5 @@
1
1
  import { f as useNavigate, r as reactExports, j as jsxRuntimeExports, L as Link } from "./vendor-react-Da3A2QmU.js";
2
- import { u as useAuthStore, b as authFetch, B as BrandMark } from "./app-BUZqJvSO.js";
2
+ import { u as useAuthStore, b as authFetch, B as BrandMark } from "./app-bEww1ic4.js";
3
3
  import { C as COMMERCIAL_USE_CASES } from "./copy-DQcpKfiX.js";
4
4
  /* empty css */
5
5
  function checkoutIntentPath(interval) {
@@ -1,5 +1,5 @@
1
1
  import { r as reactExports, j as jsxRuntimeExports, L as Link } from "./vendor-react-Da3A2QmU.js";
2
- import { u as useAuthStore, b as authFetch, s as storageUsagePercent, f as formatStorageBytes } from "./app-BUZqJvSO.js";
2
+ import { u as useAuthStore, b as authFetch, s as storageUsagePercent, f as formatStorageBytes } from "./app-bEww1ic4.js";
3
3
  import { C as COMMERCIAL_USE_CASES, P as PRO_STORAGE_UPGRADE_COPY } from "./copy-DQcpKfiX.js";
4
4
  function timeAgo(dateStr) {
5
5
  const ms = Date.now() - new Date(dateStr).getTime();
@@ -4,7 +4,7 @@ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { en
4
4
  var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
5
5
  var _a2;
6
6
  import { c as create, j as jsxRuntimeExports, r as reactExports, a as createWithEqualityFn, R as React, T as Tb, s as schedulerExports, b as clientExports, d as reactDomExports, u as useParams, e as useSearchParams, f as useNavigate, L as Link, B as BrowserRouter, g as Routes, h as Route, N as Navigate } from "./vendor-react-Da3A2QmU.js";
7
- import { _ as __vitePreload, z as zipSync, s as strToU8, W as WebGLRenderer, R as Raycaster, O as OrthographicCamera$1, P as PerspectiveCamera$1, S as Scene, a as PCFSoftShadowMap, V as VSMShadowMap, b as PCFShadowMap, B as BasicShadowMap, C as ColorManagement, L as LinearSRGBColorSpace, c as SRGBColorSpace, N as NoToneMapping, A as ACESFilmicToneMapping, d as Layers, e as Color, f as RGBAFormat, U as UnsignedByteType, g as Vector3, h as Vector2, i as Clock, T as THREE, D as DoubleSide, j as REVISION, M as Mesh, I as IcosahedronGeometry, k as ShaderMaterial, l as Spherical, Q as Quaternion, m as MOUSE, n as TOUCH, o as Ray, p as Plane, q as DataTextureLoader, H as HalfFloatType, F as FloatType, r as DataUtils, t as LinearFilter, u as RedFormat, v as InstancedBufferGeometry, w as Float32BufferAttribute, x as InstancedInterleavedBuffer, y as InterleavedBufferAttribute, E as WireframeGeometry, G as Box3, J as Sphere, K as UniformsUtils, X as UniformsLib, Y as Vector4, Z as Line3, $ as Matrix4, a0 as MathUtils, a1 as Uniform, a2 as WebGLRenderTarget, a3 as DepthTexture, a4 as BackSide, a5 as ClampToEdgeWrapping, a6 as PlaneGeometry, a7 as UVMapping, a8 as DataTexture, a9 as Texture, aa as MeshBasicMaterial, ab as IntType, ac as ShortType, ad as ByteType, ae as UnsignedIntType, af as Loader, ag as LoadingManager, ah as LinearMipMapLinearFilter, ai as FileLoader, aj as NoBlending, ak as CubeReflectionMapping, al as EquirectangularReflectionMapping, am as CubeTextureLoader, an as WebGLCubeRenderTarget, ao as ConstraintSketch, ap as setSketchPlacement3D, aq as Sketch, ar as PROFILE_BACKEND_MARKER, as as FrozenShape, at as setShapeCompilePlan, au as hasAnyPorts, av as setShapePortsInternal, aw as markShapePortsUsed, ax as setParamOverrides, ay as DEFAULT_ACTIVE_BACKEND, az as isConstraintSketch, aA as updateConstraintValue, aB as linearizeMultiObjectSteps, aC as getShapeCompilePlan, aD as resolveScanProxyGranularity, aE as SCAN_PROXY_GRANULARITY_DEFAULT, aF as resolveForgeRenderStyle, aG as publishSolverWasmRunDebug, aH as resolveForgeQualityPreset, aI as resolveImportPath, aJ as BufferGeometry, aK as LineBasicMaterial, aL as Line$1, aM as LineDashedMaterial, aN as DepthStencilFormat, aO as UnsignedInt248Type, aP as MeshNormalMaterial, aQ as NearestFilter, aR as BasicDepthPacking, aS as EventDispatcher$1, aT as NoColorSpace, aU as FrontSide, aV as Material, aW as AlwaysDepth, aX as BufferAttribute, aY as CanvasTexture, aZ as Object3D, a_ as FogExp2, a$ as Fog, b0 as AmbientLight, b1 as HemisphereLight, b2 as SpotLight, b3 as PointLight, b4 as DirectionalLight, b5 as heatPointsForSide, b6 as COMPARISON_COLORS, b7 as comparisonHeatDepthTest, b8 as comparisonHeatEdgeOpacity, b9 as comparisonHeatPatchOpacity, ba as shapeToGeometry, bb as buildComparisonHeatPatchGeometry, bc as EdgesGeometry, bd as buildShapeFromCompilePlan, be as buildVisibleHistoryStacks, bf as sketchToSvg, bg as sketchToDxf, bh as runScript, bi as MeshPhysicalMaterial, bj as LineSegments, bk as findDesignTraceNodeForConstructionStep, bl as formatDesignTraceAnchor, bm as waitForAnimationFrame, bn as selectBuildLedgerNodes, bo as worldAuthorPlaneToLocal, bp as scanProxySourceBytes, bq as disposeScanProxyGeometry, br as scanProxyGeometryFromPayload, bs as geometryWithVisibleVertexColors, bt as getRenderStylePreset, bu as SCAN_RENDER_COLORS, bv as AdditiveBlending, bw as NormalBlending, 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, bC as ZEBRA_STRIPE_FRAGMENT_SHADER, bD as ZEBRA_STRIPE_VERTEX_SHADER, bE as SCAN_PROXY_LAYER_STYLES, bF as SURFACE_FIELD_FRAGMENT_SHADER, bG as SURFACE_FIELD_VERTEX_SHADER, bH as WORLD_UP, bI as CatmullRomCurve3, bJ as TubeGeometry, bK as DEFAULT_ROUGHNESS_INSPECTION_OPTIONS, bL as ROUGHNESS_COLORS, bM as DEFAULT_THICKNESS_INSPECTION_OPTIONS, bN as THICKNESS_COLORS, bO as formatPerformanceCount, bP as PERFORMANCE_SAMPLE_INTERVAL_SEC, bQ as NON_TEXT_INPUT_TYPES, bR as MeshStandardMaterial, bS as compileSdfNode3, bT as buildSdfRaymarchFragmentShader, bU as SDF_RAYMARCH_PROXY_VERTEX_SHADER, bV as Shape, bW as ShapeGeometry, bX as ShaderLib, bY as CylinderGeometry, bZ as VIEWPORT_CAMERA_STORAGE_KEY, b_ as parseViewportCameraState, b$ as createResolvedExplodeConfig, c0 as explodeBoundsCenter, c1 as explodeMergeBounds, c2 as resolveExplodeDirective, c3 as computeExplodeMotion, c4 as getSketchWorldMatrix, c5 as explodeAdd, c6 as hasExplodeOverride, c7 as resolveExplodeLocalFanDirection, c8 as explodeMul, c9 as explodeLeafFanStage, ca as normalizeCutPlane, cb as toClippingPlane, cc as isObjectExcludedFromCutPlane, cd as findJointAnimationClip, ce as resolveJointAnimation, cf as resolveJointViewValues, cg as getShapePorts, ch as getShapeUsedPorts, ci as DEFAULT_VIEW_CONFIG, cj as SECTION_EXPLORER_PLANE_NAME, ck as ZERO_OFFSET, cl as scanProxyGridForBounds, cm as IDENTITY_MATRIX$2, cn as OBJECT_CONTEXT_MENU_MARGIN, co as OBJECT_CONTEXT_MENU_WIDTH, cp as OBJECT_CONTEXT_MENU_HEIGHT, cq as getKernelFaceNameForTriangle, cr as triangleSoupFromMeshes, cs as compareTriangleSoups, ct as buildGeometryComparisonPointCloud, cu as aabbOverlaps, cv as aabbOverlapVolume, cw as DEFAULT_COLLISION_INSPECTION_OPTIONS, cx as resolveScalarSceneSampleBudget, cy as FOCUS_MODE_DIM_OPACITY, cz as comparisonCandidateContextOpacity, cA as initKernel, cB as initSolverWasm } from "./scalar-sampling-budget-D9Qv_UlJ.js";
7
+ import { _ as __vitePreload, z as zipSync, s as strToU8, W as WebGLRenderer, R as Raycaster, O as OrthographicCamera$1, P as PerspectiveCamera$1, S as Scene, a as PCFSoftShadowMap, V as VSMShadowMap, b as PCFShadowMap, B as BasicShadowMap, C as ColorManagement, L as LinearSRGBColorSpace, c as SRGBColorSpace, N as NoToneMapping, A as ACESFilmicToneMapping, d as Layers, e as Color, f as RGBAFormat, U as UnsignedByteType, g as Vector3, h as Vector2, i as Clock, T as THREE, D as DoubleSide, j as REVISION, M as Mesh, I as IcosahedronGeometry, k as ShaderMaterial, l as Spherical, Q as Quaternion, m as MOUSE, n as TOUCH, o as Ray, p as Plane, q as DataTextureLoader, H as HalfFloatType, F as FloatType, r as DataUtils, t as LinearFilter, u as RedFormat, v as InstancedBufferGeometry, w as Float32BufferAttribute, x as InstancedInterleavedBuffer, y as InterleavedBufferAttribute, E as WireframeGeometry, G as Box3, J as Sphere, K as UniformsUtils, X as UniformsLib, Y as Vector4, Z as Line3, $ as Matrix4, a0 as MathUtils, a1 as Uniform, a2 as WebGLRenderTarget, a3 as DepthTexture, a4 as BackSide, a5 as ClampToEdgeWrapping, a6 as PlaneGeometry, a7 as UVMapping, a8 as DataTexture, a9 as Texture, aa as MeshBasicMaterial, ab as IntType, ac as ShortType, ad as ByteType, ae as UnsignedIntType, af as Loader, ag as LoadingManager, ah as LinearMipMapLinearFilter, ai as FileLoader, aj as NoBlending, ak as CubeReflectionMapping, al as EquirectangularReflectionMapping, am as CubeTextureLoader, an as WebGLCubeRenderTarget, ao as ConstraintSketch, ap as setSketchPlacement3D, aq as Sketch, ar as PROFILE_BACKEND_MARKER, as as FrozenShape, at as setShapeCompilePlan, au as hasAnyPorts, av as setShapePortsInternal, aw as markShapePortsUsed, ax as setParamOverrides, ay as DEFAULT_ACTIVE_BACKEND, az as isConstraintSketch, aA as updateConstraintValue, aB as linearizeMultiObjectSteps, aC as getShapeCompilePlan, aD as resolveScanProxyGranularity, aE as SCAN_PROXY_GRANULARITY_DEFAULT, aF as resolveForgeRenderStyle, aG as publishSolverWasmRunDebug, aH as resolveForgeQualityPreset, aI as resolveImportPath, aJ as BufferGeometry, aK as LineBasicMaterial, aL as Line$1, aM as LineDashedMaterial, aN as DepthStencilFormat, aO as UnsignedInt248Type, aP as MeshNormalMaterial, aQ as NearestFilter, aR as BasicDepthPacking, aS as EventDispatcher$1, aT as NoColorSpace, aU as FrontSide, aV as Material, aW as AlwaysDepth, aX as BufferAttribute, aY as CanvasTexture, aZ as Object3D, a_ as FogExp2, a$ as Fog, b0 as AmbientLight, b1 as HemisphereLight, b2 as SpotLight, b3 as PointLight, b4 as DirectionalLight, b5 as heatPointsForSide, b6 as COMPARISON_COLORS, b7 as comparisonHeatDepthTest, b8 as comparisonHeatEdgeOpacity, b9 as comparisonHeatPatchOpacity, ba as shapeToGeometry, bb as buildComparisonHeatPatchGeometry, bc as EdgesGeometry, bd as buildShapeFromCompilePlan, be as buildVisibleHistoryStacks, bf as sketchToSvg, bg as sketchToDxf, bh as runScript, bi as MeshPhysicalMaterial, bj as LineSegments, bk as findDesignTraceNodeForConstructionStep, bl as formatDesignTraceAnchor, bm as waitForAnimationFrame, bn as selectBuildLedgerNodes, bo as worldAuthorPlaneToLocal, bp as scanProxySourceBytes, bq as disposeScanProxyGeometry, br as scanProxyGeometryFromPayload, bs as geometryWithVisibleVertexColors, bt as getRenderStylePreset, bu as SCAN_RENDER_COLORS, bv as AdditiveBlending, bw as NormalBlending, 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, bC as ZEBRA_STRIPE_FRAGMENT_SHADER, bD as ZEBRA_STRIPE_VERTEX_SHADER, bE as SCAN_PROXY_LAYER_STYLES, bF as SURFACE_FIELD_FRAGMENT_SHADER, bG as SURFACE_FIELD_VERTEX_SHADER, bH as WORLD_UP, bI as CatmullRomCurve3, bJ as TubeGeometry, bK as DEFAULT_ROUGHNESS_INSPECTION_OPTIONS, bL as ROUGHNESS_COLORS, bM as DEFAULT_THICKNESS_INSPECTION_OPTIONS, bN as THICKNESS_COLORS, bO as formatPerformanceCount, bP as PERFORMANCE_SAMPLE_INTERVAL_SEC, bQ as NON_TEXT_INPUT_TYPES, bR as MeshStandardMaterial, bS as compileSdfNode3, bT as buildSdfRaymarchFragmentShader, bU as SDF_RAYMARCH_PROXY_VERTEX_SHADER, bV as Shape, bW as ShapeGeometry, bX as ShaderLib, bY as CylinderGeometry, bZ as VIEWPORT_CAMERA_STORAGE_KEY, b_ as parseViewportCameraState, b$ as createResolvedExplodeConfig, c0 as explodeBoundsCenter, c1 as explodeMergeBounds, c2 as resolveExplodeDirective, c3 as computeExplodeMotion, c4 as getSketchWorldMatrix, c5 as explodeAdd, c6 as hasExplodeOverride, c7 as resolveExplodeLocalFanDirection, c8 as explodeMul, c9 as explodeLeafFanStage, ca as normalizeCutPlane, cb as toClippingPlane, cc as isObjectExcludedFromCutPlane, cd as findJointAnimationClip, ce as resolveJointAnimation, cf as resolveJointViewValues, cg as getShapePorts, ch as getShapeUsedPorts, ci as DEFAULT_VIEW_CONFIG, cj as SECTION_EXPLORER_PLANE_NAME, ck as ZERO_OFFSET, cl as scanProxyGridForBounds, cm as IDENTITY_MATRIX$2, cn as OBJECT_CONTEXT_MENU_MARGIN, co as OBJECT_CONTEXT_MENU_WIDTH, cp as OBJECT_CONTEXT_MENU_HEIGHT, cq as getKernelFaceNameForTriangle, cr as triangleSoupFromMeshes, cs as compareTriangleSoups, ct as buildGeometryComparisonPointCloud, cu as aabbOverlaps, cv as aabbOverlapVolume, cw as DEFAULT_COLLISION_INSPECTION_OPTIONS, cx as resolveScalarSceneSampleBudget, cy as FOCUS_MODE_DIM_OPACITY, cz as comparisonCandidateContextOpacity, cA as initKernel, cB as initSolverWasm } from "./scalar-sampling-budget-CfDiFvh7.js";
8
8
  function getCsrfToken() {
9
9
  const match = document.cookie.match(/(?:^|;\s*)fc-csrf-token=([^;]+)/);
10
10
  return match == null ? void 0 : match[1];
@@ -15594,7 +15594,7 @@ const CRASH_COOLDOWN_MS = 2e3;
15594
15594
  class EvalWorkerClient {
15595
15595
  constructor(workerFactory = () => new Worker(new URL(
15596
15596
  /* @vite-ignore */
15597
- "/assets/evalWorker-CHXSe_-u.js",
15597
+ "/assets/evalWorker-CjQwJSE-.js",
15598
15598
  import.meta.url
15599
15599
  ), { type: "module" })) {
15600
15600
  __publicField(this, "worker", null);
@@ -26852,7 +26852,7 @@ function ConstructionGhostOverlay({ matrix }) {
26852
26852
  class ConstructionHistoryWorkerClient {
26853
26853
  constructor(workerFactory = () => new Worker(new URL(
26854
26854
  /* @vite-ignore */
26855
- "/assets/constructionHistoryWorker-ipD1jcIv.js",
26855
+ "/assets/constructionHistoryWorker-HYwzJY4m.js",
26856
26856
  import.meta.url
26857
26857
  ), { type: "module" })) {
26858
26858
  __publicField(this, "worker", null);
@@ -29236,7 +29236,7 @@ function generateReportInWorker(options) {
29236
29236
  return new Promise((resolve2, reject) => {
29237
29237
  const worker = new Worker(new URL(
29238
29238
  /* @vite-ignore */
29239
- "/assets/reportWorker-Cq1qGmg0.js",
29239
+ "/assets/reportWorker-4cW_ZpoS.js",
29240
29240
  import.meta.url
29241
29241
  ), { type: "module" });
29242
29242
  const cleanup = () => {
@@ -33287,14 +33287,12 @@ function ScanProxyLayer({
33287
33287
  color: color2,
33288
33288
  fillOpacity,
33289
33289
  wireOpacity,
33290
- fillOrder,
33291
- wireOrder,
33292
33290
  clippingPlanes,
33293
33291
  additiveWire
33294
33292
  }) {
33295
33293
  if (!geometry) return null;
33296
33294
  return /* @__PURE__ */ jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, { children: [
33297
- /* @__PURE__ */ jsxRuntimeExports.jsx("mesh", { geometry, raycast: () => null, renderOrder: fillOrder, children: /* @__PURE__ */ jsxRuntimeExports.jsx(
33295
+ /* @__PURE__ */ jsxRuntimeExports.jsx("mesh", { geometry, raycast: () => null, children: /* @__PURE__ */ jsxRuntimeExports.jsx(
33298
33296
  "meshBasicMaterial",
33299
33297
  {
33300
33298
  color: color2,
@@ -33306,7 +33304,7 @@ function ScanProxyLayer({
33306
33304
  clippingPlanes
33307
33305
  }
33308
33306
  ) }),
33309
- /* @__PURE__ */ jsxRuntimeExports.jsx("mesh", { geometry, raycast: () => null, renderOrder: wireOrder, children: /* @__PURE__ */ jsxRuntimeExports.jsx(
33307
+ /* @__PURE__ */ jsxRuntimeExports.jsx("mesh", { geometry, raycast: () => null, children: /* @__PURE__ */ jsxRuntimeExports.jsx(
33310
33308
  "meshBasicMaterial",
33311
33309
  {
33312
33310
  color: color2,
@@ -33491,7 +33489,7 @@ function ForgeObject({
33491
33489
  onDoubleClick,
33492
33490
  onContextMenu,
33493
33491
  children: [
33494
- showFloatingContext && /* @__PURE__ */ jsxRuntimeExports.jsx("mesh", { geometry: solidGeo, userData: { forgeMesh: true }, renderOrder: 1, children: /* @__PURE__ */ jsxRuntimeExports.jsx(
33492
+ showFloatingContext && /* @__PURE__ */ jsxRuntimeExports.jsx("mesh", { geometry: solidGeo, userData: { forgeMesh: true }, children: /* @__PURE__ */ jsxRuntimeExports.jsx(
33495
33493
  "meshBasicMaterial",
33496
33494
  {
33497
33495
  color: rgbToHex(FLOATING_CONTEXT_COLOR),
@@ -33526,7 +33524,7 @@ function ForgeObject({
33526
33524
  }
33527
33525
  ) }),
33528
33526
  showSolid && inspectChannel === "zebra" && /* @__PURE__ */ jsxRuntimeExports.jsx("mesh", { geometry: solidGeo, userData: { forgeMesh: true }, children: /* @__PURE__ */ jsxRuntimeExports.jsx(ZebraInspectionMaterial, { clippingPlanes: effectiveClippingPlanes }) }),
33529
- showHiddenPickMesh && /* @__PURE__ */ jsxRuntimeExports.jsx("mesh", { geometry: solidGeo, userData: { forgeMesh: true }, renderOrder: 1, children: /* @__PURE__ */ jsxRuntimeExports.jsx(
33527
+ showHiddenPickMesh && /* @__PURE__ */ jsxRuntimeExports.jsx("mesh", { geometry: solidGeo, userData: { forgeMesh: true }, children: /* @__PURE__ */ jsxRuntimeExports.jsx(
33530
33528
  "meshBasicMaterial",
33531
33529
  {
33532
33530
  color: SCAN_RENDER_COLORS.void,
@@ -33540,7 +33538,7 @@ function ForgeObject({
33540
33538
  }
33541
33539
  ) }),
33542
33540
  showScalarScanProxy && /* @__PURE__ */ jsxRuntimeExports.jsx(ScanProxyVolume, { proxy: scanProxy, clippingPlanes: effectiveClippingPlanes }),
33543
- showSolid && showScalarContextMesh && !showScalarScanProxy && /* @__PURE__ */ jsxRuntimeExports.jsx("mesh", { geometry: solidGeo, userData: { forgeMesh: true }, renderOrder: 3, children: /* @__PURE__ */ jsxRuntimeExports.jsx(
33541
+ showSolid && showScalarContextMesh && !showScalarScanProxy && /* @__PURE__ */ jsxRuntimeExports.jsx("mesh", { geometry: solidGeo, userData: { forgeMesh: true }, children: /* @__PURE__ */ jsxRuntimeExports.jsx(
33544
33542
  "meshBasicMaterial",
33545
33543
  {
33546
33544
  color: isScalarScan ? rgbToHex(SCAN_CONTEXT_COLOR) : "#26313a",
@@ -33553,7 +33551,7 @@ function ForgeObject({
33553
33551
  clippingPlanes: effectiveClippingPlanes
33554
33552
  }
33555
33553
  ) }),
33556
- showSolid && isScalarScan && !showScalarScanProxy && edgesGeo && /* @__PURE__ */ jsxRuntimeExports.jsx("lineSegments", { geometry: edgesGeo, raycast: () => null, renderOrder: 4, children: /* @__PURE__ */ jsxRuntimeExports.jsx(
33554
+ showSolid && isScalarScan && !showScalarScanProxy && edgesGeo && /* @__PURE__ */ jsxRuntimeExports.jsx("lineSegments", { geometry: edgesGeo, raycast: () => null, children: /* @__PURE__ */ jsxRuntimeExports.jsx(
33557
33555
  "lineBasicMaterial",
33558
33556
  {
33559
33557
  color: rgbToHex(SCAN_CONTEXT_EDGE_COLOR),
@@ -33564,7 +33562,7 @@ function ForgeObject({
33564
33562
  clippingPlanes: effectiveClippingPlanes
33565
33563
  }
33566
33564
  ) }),
33567
- showSolid && showInspectHeatmap && inspectHeatmapField && /* @__PURE__ */ jsxRuntimeExports.jsx("mesh", { geometry: solidGeo, userData: { forgeMesh: true }, renderOrder: 4, children: /* @__PURE__ */ jsxRuntimeExports.jsx(
33565
+ showSolid && showInspectHeatmap && inspectHeatmapField && /* @__PURE__ */ jsxRuntimeExports.jsx("mesh", { geometry: solidGeo, userData: { forgeMesh: true }, children: /* @__PURE__ */ jsxRuntimeExports.jsx(
33568
33566
  "shaderMaterial",
33569
33567
  {
33570
33568
  vertexShader: INSPECT_HEATMAP_VERTEX_SHADER,
@@ -33580,7 +33578,7 @@ function ForgeObject({
33580
33578
  clippingPlanes: effectiveClippingPlanes
33581
33579
  }
33582
33580
  ) }),
33583
- showInspectPoints && inspectPointGeo && /* @__PURE__ */ jsxRuntimeExports.jsx("points", { geometry: inspectPointGeo, raycast: () => null, renderOrder: isScalarScan ? 9 : 5, children: /* @__PURE__ */ jsxRuntimeExports.jsx(
33581
+ showInspectPoints && inspectPointGeo && /* @__PURE__ */ jsxRuntimeExports.jsx("points", { geometry: inspectPointGeo, raycast: () => null, children: /* @__PURE__ */ jsxRuntimeExports.jsx(
33584
33582
  "pointsMaterial",
33585
33583
  {
33586
33584
  size: isScalarScan ? 4 : 3,
@@ -33609,7 +33607,7 @@ function ForgeObject({
33609
33607
  }
33610
33608
  ) }),
33611
33609
  showSolid && inspectChannel === "comparison" && /* @__PURE__ */ jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, { children: [
33612
- /* @__PURE__ */ jsxRuntimeExports.jsx("mesh", { geometry: solidGeo, userData: { forgeMesh: true }, renderOrder: 2, children: /* @__PURE__ */ jsxRuntimeExports.jsx(
33610
+ /* @__PURE__ */ jsxRuntimeExports.jsx("mesh", { geometry: solidGeo, userData: { forgeMesh: true }, children: /* @__PURE__ */ jsxRuntimeExports.jsx(
33613
33611
  "meshBasicMaterial",
33614
33612
  {
33615
33613
  color: "#aeb8c2",
@@ -33621,10 +33619,10 @@ function ForgeObject({
33621
33619
  clippingPlanes: effectiveClippingPlanes
33622
33620
  }
33623
33621
  ) }),
33624
- edgesGeo && /* @__PURE__ */ jsxRuntimeExports.jsx("lineSegments", { geometry: edgesGeo, raycast: () => null, renderOrder: 3, children: /* @__PURE__ */ jsxRuntimeExports.jsx("lineBasicMaterial", { color: "#d7e1eb", transparent: true, opacity: 0.36, depthWrite: false, clippingPlanes: effectiveClippingPlanes }) })
33622
+ edgesGeo && /* @__PURE__ */ jsxRuntimeExports.jsx("lineSegments", { geometry: edgesGeo, raycast: () => null, children: /* @__PURE__ */ jsxRuntimeExports.jsx("lineBasicMaterial", { color: "#d7e1eb", transparent: true, opacity: 0.36, depthWrite: false, clippingPlanes: effectiveClippingPlanes }) })
33625
33623
  ] }),
33626
33624
  showScanRenderStyle && (scanProxy ? /* @__PURE__ */ jsxRuntimeExports.jsx(ScanProxyVolume, { proxy: scanProxy, clippingPlanes: effectiveClippingPlanes, objectColor: settings.color }) : /* @__PURE__ */ jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, { children: [
33627
- showScanFallbackMesh && /* @__PURE__ */ jsxRuntimeExports.jsx("mesh", { geometry: solidGeo, raycast: () => null, renderOrder: 2, children: /* @__PURE__ */ jsxRuntimeExports.jsx(
33625
+ showScanFallbackMesh && /* @__PURE__ */ jsxRuntimeExports.jsx("mesh", { geometry: solidGeo, raycast: () => null, children: /* @__PURE__ */ jsxRuntimeExports.jsx(
33628
33626
  "meshBasicMaterial",
33629
33627
  {
33630
33628
  color: settings.color,
@@ -33637,7 +33635,7 @@ function ForgeObject({
33637
33635
  clippingPlanes: effectiveClippingPlanes
33638
33636
  }
33639
33637
  ) }),
33640
- edgesGeo && /* @__PURE__ */ jsxRuntimeExports.jsx("lineSegments", { geometry: edgesGeo, raycast: () => null, renderOrder: 3, children: /* @__PURE__ */ jsxRuntimeExports.jsx(
33638
+ edgesGeo && /* @__PURE__ */ jsxRuntimeExports.jsx("lineSegments", { geometry: edgesGeo, raycast: () => null, children: /* @__PURE__ */ jsxRuntimeExports.jsx(
33641
33639
  "lineBasicMaterial",
33642
33640
  {
33643
33641
  color: settings.color,
@@ -43470,7 +43468,7 @@ function Viewport() {
43470
43468
  }
43471
43469
  );
43472
43470
  }
43473
- const EditorApp$1 = reactExports.lazy(() => __vitePreload(() => import("./EditorApp-CP9Za6tm.js"), true ? __vite__mapDeps([0]) : void 0).then((m2) => ({ default: m2.EditorApp })));
43471
+ const EditorApp$1 = reactExports.lazy(() => __vitePreload(() => import("./EditorApp-lXv53A1m.js"), true ? __vite__mapDeps([0]) : void 0).then((m2) => ({ default: m2.EditorApp })));
43474
43472
  const PENDING_SHARE_COPY_KEY = "fc-pending-share-copy";
43475
43473
  function storePendingShareCopy(shareId) {
43476
43474
  sessionStorage.setItem(PENDING_SHARE_COPY_KEY, shareId);
@@ -43657,16 +43655,16 @@ const PublishedModelPage$1 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Objec
43657
43655
  consumePendingShareCopy,
43658
43656
  storePendingShareCopy
43659
43657
  }, Symbol.toStringTag, { value: "Module" }));
43660
- reactExports.lazy(() => __vitePreload(() => import("./LandingPageProofDriven-CeRIctuj.js"), true ? __vite__mapDeps([1]) : void 0).then((m2) => ({ default: m2.LandingPageProofDriven })));
43661
- const DocsPage = reactExports.lazy(() => __vitePreload(() => import("./DocsPage-WCIkPmzC.js"), true ? [] : void 0).then((m2) => ({ default: m2.DocsPage })));
43662
- reactExports.lazy(() => __vitePreload(() => import("./BlogPage-n_HGP3Qm.js"), true ? [] : void 0).then((m2) => ({ default: m2.BlogPage })));
43663
- reactExports.lazy(() => __vitePreload(() => import("./BenchmarkPage-Bjgkh5m9.js"), true ? __vite__mapDeps([2,1]) : void 0).then((m2) => ({ default: m2.BenchmarkPage })));
43664
- reactExports.lazy(() => __vitePreload(() => import("./AdminPage-DramHHDf.js"), true ? [] : void 0).then((m2) => ({ default: m2.AdminPage })));
43658
+ reactExports.lazy(() => __vitePreload(() => import("./LandingPageProofDriven-jSz0LaMM.js"), true ? __vite__mapDeps([1]) : void 0).then((m2) => ({ default: m2.LandingPageProofDriven })));
43659
+ const DocsPage = reactExports.lazy(() => __vitePreload(() => import("./DocsPage-C4Y3nbYc.js"), true ? [] : void 0).then((m2) => ({ default: m2.DocsPage })));
43660
+ reactExports.lazy(() => __vitePreload(() => import("./BlogPage-5nPesyds.js"), true ? [] : void 0).then((m2) => ({ default: m2.BlogPage })));
43661
+ reactExports.lazy(() => __vitePreload(() => import("./BenchmarkPage-CTrLKfpo.js"), true ? __vite__mapDeps([2,1]) : void 0).then((m2) => ({ default: m2.BenchmarkPage })));
43662
+ reactExports.lazy(() => __vitePreload(() => import("./AdminPage-eWGs2K6H.js"), true ? [] : void 0).then((m2) => ({ default: m2.AdminPage })));
43665
43663
  reactExports.lazy(() => __vitePreload(() => Promise.resolve().then(() => PublishedModelPage$1), true ? void 0 : void 0).then((m2) => ({ default: m2.PublishedModelPage })));
43666
- reactExports.lazy(() => __vitePreload(() => import("./SettingsPage-BqCUvEXM.js"), true ? [] : void 0).then((m2) => ({ default: m2.SettingsPage })));
43667
- reactExports.lazy(() => __vitePreload(() => import("./PricingPage-rIRa8p4Y.js"), true ? __vite__mapDeps([3,1]) : void 0).then((m2) => ({ default: m2.PricingPage })));
43668
- const EditorApp = reactExports.lazy(() => __vitePreload(() => import("./EditorApp-CP9Za6tm.js"), true ? __vite__mapDeps([0]) : void 0).then((m2) => ({ default: m2.EditorApp })));
43669
- const EmbedViewer = reactExports.lazy(() => __vitePreload(() => import("./EmbedViewer-DEZKqdfW.js"), true ? [] : void 0).then((m2) => ({ default: m2.EmbedViewer })));
43664
+ reactExports.lazy(() => __vitePreload(() => import("./SettingsPage-DY889pcu.js"), true ? [] : void 0).then((m2) => ({ default: m2.SettingsPage })));
43665
+ reactExports.lazy(() => __vitePreload(() => import("./PricingPage-B83B90zh.js"), true ? __vite__mapDeps([3,1]) : void 0).then((m2) => ({ default: m2.PricingPage })));
43666
+ const EditorApp = reactExports.lazy(() => __vitePreload(() => import("./EditorApp-lXv53A1m.js"), true ? __vite__mapDeps([0]) : void 0).then((m2) => ({ default: m2.EditorApp })));
43667
+ const EmbedViewer = reactExports.lazy(() => __vitePreload(() => import("./EmbedViewer-C8fB4n5U.js"), true ? [] : void 0).then((m2) => ({ default: m2.EmbedViewer })));
43670
43668
  const embedMode = isEmbedMode() && !window.location.pathname.startsWith("/m/");
43671
43669
  const EDITABLE_CRASH_FILE = /\.(?:forge\.js|[cm]?[jt]sx?|json|md|txt|svg|dxf)$/i;
43672
43670
  function firstMeaningfulLine(text) {
@@ -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, $ as Matrix4, cG as Frustum, G as Box3, g as Vector3, 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, a0 as MathUtils, 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-D9Qv_UlJ.js";
5
- import { m as mergeViewportRenderSceneStates, p as parseRenderSceneCliSpec } from "../renderSceneState-Dr0xPq1A.js";
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";
6
6
  const CAD_MATERIAL_PROPS = {
7
7
  color: 6003669,
8
8
  metalness: 0.05,
@@ -648,6 +648,8 @@ function analyzeDistanceInspection(entries, rawOptions = {}) {
648
648
  warnings: [...connectivity.warnings]
649
649
  };
650
650
  }
651
+ const DEFAULT_PERSPECTIVE_FIT_MARGIN = 1.1;
652
+ const DEFAULT_MIN_CAMERA_DISTANCE = 1;
651
653
  function bboxCorners$1(bbox) {
652
654
  const [minX, minY, minZ] = bbox.min;
653
655
  const [maxX, maxY, maxZ] = bbox.max;
@@ -662,9 +664,59 @@ function bboxCorners$1(bbox) {
662
664
  new Vector3(maxX, maxY, maxZ)
663
665
  ];
664
666
  }
667
+ function bboxCenter(bbox) {
668
+ return new Vector3((bbox.min[0] + bbox.max[0]) * 0.5, (bbox.min[1] + bbox.max[1]) * 0.5, (bbox.min[2] + bbox.max[2]) * 0.5);
669
+ }
670
+ function finitePositive(value, label) {
671
+ if (!Number.isFinite(value) || value <= 0) {
672
+ throw new Error(`${label} must be a positive finite number.`);
673
+ }
674
+ return value;
675
+ }
676
+ function cameraRightFor(backward, up) {
677
+ const normalizedUp = up.lengthSq() > 1e-8 ? up.clone().normalize() : new Vector3(0, 0, 1);
678
+ let right = new Vector3().crossVectors(normalizedUp, backward);
679
+ if (right.lengthSq() > 1e-8) return right.normalize();
680
+ const fallbackUp = Math.abs(backward.z) > 0.92 ? new Vector3(0, 1, 0) : new Vector3(0, 0, 1);
681
+ right = new Vector3().crossVectors(fallbackUp, backward);
682
+ if (right.lengthSq() > 1e-8) return right.normalize();
683
+ return new Vector3(1, 0, 0);
684
+ }
665
685
  function objectBox(input) {
666
686
  return new Box3(new Vector3(...input.bbox.min), new Vector3(...input.bbox.max));
667
687
  }
688
+ function perspectiveCameraDistanceForBounds(bbox, directionFromTargetToCamera, options) {
689
+ const backward = new Vector3(...directionFromTargetToCamera);
690
+ if (backward.lengthSq() <= 1e-8) {
691
+ throw new Error("directionFromTargetToCamera must be a non-zero vector.");
692
+ }
693
+ backward.normalize();
694
+ const fovDeg = finitePositive(options.fovDeg, "fovDeg");
695
+ if (fovDeg >= 180) {
696
+ throw new Error("fovDeg must be less than 180 degrees.");
697
+ }
698
+ const aspect = finitePositive(options.aspect ?? 1, "aspect");
699
+ const margin = finitePositive(options.margin ?? DEFAULT_PERSPECTIVE_FIT_MARGIN, "margin");
700
+ const minDistance = finitePositive(options.minDistance ?? DEFAULT_MIN_CAMERA_DISTANCE, "minDistance");
701
+ const tanHalfVerticalFov = Math.tan(MathUtils.degToRad(fovDeg) * 0.5);
702
+ const tanHalfHorizontalFov = tanHalfVerticalFov * aspect;
703
+ const right = cameraRightFor(backward, new Vector3(...options.up ?? [0, 0, 1]));
704
+ const screenUp = new Vector3().crossVectors(backward, right).normalize();
705
+ const center = bboxCenter(bbox);
706
+ let requiredDistance = minDistance;
707
+ for (const corner of bboxCorners$1(bbox)) {
708
+ const offset = corner.sub(center);
709
+ const depthOffset = offset.dot(backward);
710
+ const horizontalOffset = Math.abs(offset.dot(right));
711
+ const verticalOffset = Math.abs(offset.dot(screenUp));
712
+ requiredDistance = Math.max(
713
+ requiredDistance,
714
+ horizontalOffset * margin / tanHalfHorizontalFov + depthOffset,
715
+ verticalOffset * margin / tanHalfVerticalFov + depthOffset
716
+ );
717
+ }
718
+ return requiredDistance;
719
+ }
668
720
  function cameraFrustum(camera) {
669
721
  camera.updateMatrixWorld(true);
670
722
  if ("updateProjectionMatrix" in camera && typeof camera.updateProjectionMatrix === "function") {
@@ -2035,7 +2087,12 @@ function updateSdfRaymarchUniforms(session) {
2035
2087
  }
2036
2088
  function applyDirectionCamera(session, dir, distanceOverride) {
2037
2089
  const d = normalizeCameraDirection(dir);
2038
- const dist = distanceOverride ?? session.distance;
2090
+ const fov = session.camera instanceof PerspectiveCamera ? session.camera.fov : 45;
2091
+ const dist = distanceOverride ?? perspectiveCameraDistanceForBounds(session.bbox, d, {
2092
+ fovDeg: fov,
2093
+ aspect: session.camera instanceof PerspectiveCamera ? session.camera.aspect : 1,
2094
+ up: [0, 0, 1]
2095
+ });
2039
2096
  session.camera.position.set(session.center.x + d[0] * dist, session.center.y + d[1] * dist, session.center.z + d[2] * dist);
2040
2097
  session.camera.up.set(0, 0, 1);
2041
2098
  session.camera.lookAt(session.center);
@@ -2199,15 +2256,15 @@ function mergeBounds(a, b) {
2199
2256
  function boundsCenter(bounds) {
2200
2257
  return new Vector3((bounds.min[0] + bounds.max[0]) / 2, (bounds.min[1] + bounds.max[1]) / 2, (bounds.min[2] + bounds.max[2]) / 2);
2201
2258
  }
2202
- function boundsMaxDim(bounds) {
2203
- return Math.max(1, bounds.max[0] - bounds.min[0], bounds.max[1] - bounds.min[1], bounds.max[2] - bounds.min[2]);
2204
- }
2205
2259
  function applyDirectionCameraToBounds(session, bounds, dir, distanceOverride) {
2206
2260
  const d = normalizeCameraDirection(dir);
2207
2261
  const center = boundsCenter(bounds);
2208
- const maxDim = boundsMaxDim(bounds);
2209
2262
  const fov = session.camera instanceof PerspectiveCamera ? session.camera.fov : 45;
2210
- const dist = distanceOverride ?? maxDim / (2 * Math.tan(fov * Math.PI / 360)) * 1.6;
2263
+ const dist = distanceOverride ?? perspectiveCameraDistanceForBounds(bounds, d, {
2264
+ fovDeg: fov,
2265
+ aspect: session.camera instanceof PerspectiveCamera ? session.camera.aspect : 1,
2266
+ up: [0, 0, 1]
2267
+ });
2211
2268
  session.camera.position.set(center.x + d[0] * dist, center.y + d[1] * dist, center.z + d[2] * dist);
2212
2269
  session.camera.up.set(0, 0, 1);
2213
2270
  session.camera.lookAt(center);
@@ -3800,7 +3857,6 @@ function createScanProxyGroup(proxy, clippingPlanes, objectColor) {
3800
3857
  clippingPlanes
3801
3858
  })
3802
3859
  );
3803
- fill.renderOrder = layer.fillOrder;
3804
3860
  fill.raycast = () => null;
3805
3861
  group.add(fill);
3806
3862
  const wire = new Mesh(
@@ -3813,7 +3869,6 @@ function createScanProxyGroup(proxy, clippingPlanes, objectColor) {
3813
3869
  clippingPlanes
3814
3870
  })
3815
3871
  );
3816
- wire.renderOrder = layer.wireOrder;
3817
3872
  wire.raycast = () => null;
3818
3873
  group.add(wire);
3819
3874
  }
@@ -4583,29 +4638,37 @@ function destroyCaptureSession() {
4583
4638
  function isFocusVisible(obj, focus, hide) {
4584
4639
  if (focus === "no-mocks") return !obj.mock;
4585
4640
  if (Array.isArray(focus)) {
4586
- const lower = obj.name.toLowerCase();
4641
+ const candidates = objectFocusCandidates(obj);
4587
4642
  return focus.some((p) => {
4588
- const pl = p.toLowerCase();
4643
+ const pl = normalizeFocusCandidate(p);
4589
4644
  if (pl.includes("*") || pl.includes("?")) {
4590
4645
  const regex = pl.replace(/[.+^${}()|[\]\\]/g, "\\$&").replace(/\*/g, ".*").replace(/\?/g, ".");
4591
- return new RegExp(`^${regex}$`).test(lower);
4646
+ return candidates.some((candidate) => new RegExp(`^${regex}$`).test(candidate));
4592
4647
  }
4593
- return lower === pl;
4648
+ return candidates.includes(pl);
4594
4649
  });
4595
4650
  }
4596
4651
  if (Array.isArray(hide)) {
4597
- const lower = obj.name.toLowerCase();
4652
+ const candidates = objectFocusCandidates(obj);
4598
4653
  return !hide.some((p) => {
4599
- const pl = p.toLowerCase();
4654
+ const pl = normalizeFocusCandidate(p);
4600
4655
  if (pl.includes("*") || pl.includes("?")) {
4601
4656
  const regex = pl.replace(/[.+^${}()|[\]\\]/g, "\\$&").replace(/\*/g, ".*").replace(/\?/g, ".");
4602
- return new RegExp(`^${regex}$`).test(lower);
4657
+ return candidates.some((candidate) => new RegExp(`^${regex}$`).test(candidate));
4603
4658
  }
4604
- return lower === pl;
4659
+ return candidates.includes(pl);
4605
4660
  });
4606
4661
  }
4607
4662
  return true;
4608
4663
  }
4664
+ function normalizeFocusCandidate(value) {
4665
+ return value.trim().replace(/\\/g, "/").replace(/\s*\/\s*/g, "/").replace(/\s*\.\s*/g, ".").toLowerCase();
4666
+ }
4667
+ function objectFocusCandidates(obj) {
4668
+ const treePath = getSceneObjectTreePath(obj);
4669
+ const candidates = [obj.id, obj.name, treePath.join("/"), treePath.join("."), obj.groupName ?? ""];
4670
+ return candidates.map(normalizeFocusCandidate).filter(Boolean);
4671
+ }
4609
4672
  function availableRenderableObjectNames(entries) {
4610
4673
  return entries.map((entry) => entry.source.name).join(", ") || "(none)";
4611
4674
  }
@@ -4779,7 +4842,9 @@ function createSession(code, opts) {
4779
4842
  const surfaceFieldScale = maxDim / 5;
4780
4843
  const scanProxyGrid = scanProxyGridForBounds(bb, opts == null ? void 0 : opts.scanGranularity);
4781
4844
  const fov = 45;
4782
- const distance = maxDim / (2 * Math.tan(fov * Math.PI / 360)) * 1.6;
4845
+ const distance = perspectiveCameraDistanceForBounds(bbox, [DEFAULT_FIXED_DIR.x, DEFAULT_FIXED_DIR.y, DEFAULT_FIXED_DIR.z], {
4846
+ fovDeg: fov
4847
+ });
4783
4848
  const cameraFov = ((_c = requestedSceneState == null ? void 0 : requestedSceneState.camera) == null ? void 0 : _c.fov) ?? ((_d = sceneConfig == null ? void 0 : sceneConfig.camera) == null ? void 0 : _d.fov) ?? fov;
4784
4849
  try {
4785
4850
  if (opts == null ? void 0 : opts.cameraToken) {
@@ -4791,7 +4856,10 @@ function createSession(code, opts) {
4791
4856
  }
4792
4857
  const parsed = parseCameraToken(opts.cameraToken);
4793
4858
  const dir = normalizeCameraDirection(parsed.dir);
4794
- const tokenDistance = parsed.distance ?? distance;
4859
+ const tokenDistance = parsed.distance ?? perspectiveCameraDistanceForBounds(bbox, dir, {
4860
+ fovDeg: cameraFov,
4861
+ up: [0, 0, 1]
4862
+ });
4795
4863
  requestedSceneState = mergeViewportRenderSceneStates(requestedSceneState, {
4796
4864
  camera: {
4797
4865
  projectionMode: "perspective",
@@ -4959,9 +5027,6 @@ function createSession(code, opts) {
4959
5027
  });
4960
5028
  }
4961
5029
  }
4962
- if (isScanRenderStyle) {
4963
- solid.renderOrder = 2;
4964
- }
4965
5030
  if (isScanRenderStyle && !scanProxy) {
4966
5031
  shell = new Mesh(
4967
5032
  geo.solid,
@@ -4976,7 +5041,6 @@ function createSession(code, opts) {
4976
5041
  })
4977
5042
  );
4978
5043
  shell.scale.setScalar(0.992);
4979
- shell.renderOrder = 1;
4980
5044
  shell.raycast = () => null;
4981
5045
  } else if (hasAuthoredTransparency && renderStylePreset.glassShell.enabled) {
4982
5046
  shell = new Mesh(
@@ -5004,7 +5068,6 @@ function createSession(code, opts) {
5004
5068
  clippingPlanes: applicableCutPlanes
5005
5069
  });
5006
5070
  wire = new LineSegments(geo.edges, wireMaterial);
5007
- if (isScanRenderStyle) wire.renderOrder = 3;
5008
5071
  sectionMesh = sweep ? buildSectionMeshPayload(obj.source.id, obj.shape, debug, objectLabel) : null;
5009
5072
  } else if (obj.sdf) {
5010
5073
  const sdfStart = performance.now();
@@ -28541,7 +28541,7 @@ async function initTruckGeometryWasm() {
28541
28541
  if (_initPromise) return _initPromise;
28542
28542
  _initPromise = (async () => {
28543
28543
  try {
28544
- const geometryModule = await import("./forgecad_geometry-BVnIeXMG.js");
28544
+ const geometryModule = await import("./forgecad_geometry-CH2nvuLA.js");
28545
28545
  const isNode = isNodeRuntime();
28546
28546
  if (isNode) {
28547
28547
  const { readFileSync, existsSync } = await import("./__vite-browser-external-Dhvy_jtL.js");
@@ -11151,7 +11151,7 @@ let _wasm$1 = null;
11151
11151
  async function initManifoldWasm() {
11152
11152
  if (_wasm$1) return _wasm$1;
11153
11153
  performance.mark("manifold:start");
11154
- const Module = (await import("./manifold-BTkzxi9V.js")).default;
11154
+ const Module = (await import("./manifold-rmfAcdwF.js")).default;
11155
11155
  performance.mark("manifold:imported");
11156
11156
  const wasm = await Module();
11157
11157
  wasm.setup();
@@ -23559,7 +23559,7 @@ async function initTruckGeometryWasm() {
23559
23559
  if (_initPromise$1) return _initPromise$1;
23560
23560
  _initPromise$1 = (async () => {
23561
23561
  try {
23562
- const geometryModule = await import("./forgecad_geometry-BVnIeXMG.js");
23562
+ const geometryModule = await import("./forgecad_geometry-CH2nvuLA.js");
23563
23563
  const isNode = isNodeRuntime();
23564
23564
  if (isNode) {
23565
23565
  const { readFileSync, existsSync } = await Promise.resolve().then(function() {
@@ -42240,7 +42240,7 @@ async function initSolverWasm() {
42240
42240
  performance.mark("solver:start");
42241
42241
  const solverModule = await import(
42242
42242
  /* webpackChunkName: "solver-wasm" */
42243
- "./solver-BZ9LPTHs.js"
42243
+ "./solver-DuJAO8S6.js"
42244
42244
  );
42245
42245
  performance.mark("solver:imported");
42246
42246
  const isNode = typeof process !== "undefined" && ((_a3 = process.versions) == null ? void 0 : _a3.node);
@@ -717,7 +717,7 @@ async function __wbg_init(module_or_path) {
717
717
  }
718
718
  }
719
719
  if (module_or_path === void 0) {
720
- module_or_path = new URL("/assets/forgecad_geometry_bg-DufhhCBV.wasm", import.meta.url);
720
+ module_or_path = new URL("/assets/forgecad_geometry_bg-C5_E9Oa9.wasm", import.meta.url);
721
721
  }
722
722
  const imports = __wbg_get_imports();
723
723
  if (typeof module_or_path === "string" || typeof Request === "function" && module_or_path instanceof Request || typeof URL === "function" && module_or_path instanceof URL) {
@@ -12,7 +12,7 @@ var Module = (() => {
12
12
  var ENVIRONMENT_IS_WORKER = typeof WorkerGlobalScope != "undefined";
13
13
  var ENVIRONMENT_IS_NODE = typeof process == "object" && typeof process.versions == "object" && typeof process.versions.node == "string" && process.type != "renderer";
14
14
  if (ENVIRONMENT_IS_NODE) {
15
- const { createRequire } = await import("./reportWorker-Cq1qGmg0.js").then(function(n) {
15
+ const { createRequire } = await import("./reportWorker-4cW_ZpoS.js").then(function(n) {
16
16
  return n._;
17
17
  });
18
18
  var require2 = createRequire(import.meta.url);
@@ -12,7 +12,7 @@ var Module = (() => {
12
12
  var ENVIRONMENT_IS_WORKER = typeof WorkerGlobalScope != "undefined";
13
13
  var ENVIRONMENT_IS_NODE = typeof process == "object" && typeof process.versions == "object" && typeof process.versions.node == "string" && process.type != "renderer";
14
14
  if (ENVIRONMENT_IS_NODE) {
15
- const { createRequire } = await import("./evalWorker-CHXSe_-u.js").then(function(n) {
15
+ const { createRequire } = await import("./evalWorker-CjQwJSE-.js").then(function(n) {
16
16
  return n._;
17
17
  });
18
18
  var require2 = createRequire(import.meta.url);
@@ -1,4 +1,4 @@
1
- import { _ as __vitePreload } from "./scalar-sampling-budget-D9Qv_UlJ.js";
1
+ import { _ as __vitePreload } from "./scalar-sampling-budget-CfDiFvh7.js";
2
2
  var Module = (() => {
3
3
  var _scriptName = import.meta.url;
4
4
  return (async function(moduleArg = {}) {
@@ -14,7 +14,7 @@ var Module = (() => {
14
14
  var ENVIRONMENT_IS_NODE = typeof process == "object" && typeof process.versions == "object" && typeof process.versions.node == "string" && process.type != "renderer";
15
15
  if (ENVIRONMENT_IS_NODE) {
16
16
  const { createRequire } = await __vitePreload(async () => {
17
- const { createRequire: createRequire2 } = await import("./scalar-sampling-budget-D9Qv_UlJ.js").then((n) => n.db);
17
+ const { createRequire: createRequire2 } = await import("./scalar-sampling-budget-CfDiFvh7.js").then((n) => n.db);
18
18
  return { createRequire: createRequire2 };
19
19
  }, true ? [] : void 0);
20
20
  var require2 = createRequire(import.meta.url);
@@ -10655,7 +10655,7 @@ let _wasm$1 = null;
10655
10655
  async function initManifoldWasm() {
10656
10656
  if (_wasm$1) return _wasm$1;
10657
10657
  performance.mark("manifold:start");
10658
- const Module = (await import("./manifold-D1LZIHqn.js")).default;
10658
+ const Module = (await import("./manifold-CG9Fokx-.js")).default;
10659
10659
  performance.mark("manifold:imported");
10660
10660
  const wasm = await Module();
10661
10661
  wasm.setup();
@@ -23053,7 +23053,7 @@ async function initTruckGeometryWasm() {
23053
23053
  if (_initPromise$1) return _initPromise$1;
23054
23054
  _initPromise$1 = (async () => {
23055
23055
  try {
23056
- const geometryModule = await import("./forgecad_geometry-BVnIeXMG.js");
23056
+ const geometryModule = await import("./forgecad_geometry-CH2nvuLA.js");
23057
23057
  const isNode = isNodeRuntime();
23058
23058
  if (isNode) {
23059
23059
  const { readFileSync, existsSync } = await Promise.resolve().then(function() {
@@ -41713,7 +41713,7 @@ async function initSolverWasm() {
41713
41713
  performance.mark("solver:start");
41714
41714
  const solverModule = await import(
41715
41715
  /* webpackChunkName: "solver-wasm" */
41716
- "./solver-BZ9LPTHs.js"
41716
+ "./solver-DuJAO8S6.js"
41717
41717
  );
41718
41718
  performance.mark("solver:imported");
41719
41719
  const isNode = typeof process !== "undefined" && ((_a3 = process.versions) == null ? void 0 : _a3.node);