@tscircuit/3d-viewer 0.0.345 → 0.0.347
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +55 -22
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -25582,7 +25582,7 @@ import * as THREE10 from "three";
|
|
|
25582
25582
|
// package.json
|
|
25583
25583
|
var package_default = {
|
|
25584
25584
|
name: "@tscircuit/3d-viewer",
|
|
25585
|
-
version: "0.0.
|
|
25585
|
+
version: "0.0.346",
|
|
25586
25586
|
main: "./dist/index.js",
|
|
25587
25587
|
module: "./dist/index.js",
|
|
25588
25588
|
type: "module",
|
|
@@ -25846,6 +25846,13 @@ import {
|
|
|
25846
25846
|
useMemo as useMemo8
|
|
25847
25847
|
} from "react";
|
|
25848
25848
|
import * as THREE7 from "three";
|
|
25849
|
+
|
|
25850
|
+
// src/react-three/remove-existing-canvases.ts
|
|
25851
|
+
function removeExistingCanvases(container) {
|
|
25852
|
+
container.querySelectorAll("canvas").forEach((existingCanvas) => existingCanvas.remove());
|
|
25853
|
+
}
|
|
25854
|
+
|
|
25855
|
+
// src/react-three/Canvas.tsx
|
|
25849
25856
|
import { jsx as jsx9 } from "react/jsx-runtime";
|
|
25850
25857
|
var Canvas = forwardRef(
|
|
25851
25858
|
({ children, scene: sceneProps, camera: cameraProps, style }, ref) => {
|
|
@@ -25878,6 +25885,7 @@ var Canvas = forwardRef(
|
|
|
25878
25885
|
useImperativeHandle(ref, () => rootObject.current);
|
|
25879
25886
|
useEffect10(() => {
|
|
25880
25887
|
if (!mountRef.current) return;
|
|
25888
|
+
removeExistingCanvases(mountRef.current);
|
|
25881
25889
|
const renderer = new THREE7.WebGLRenderer({ antialias: true, alpha: true });
|
|
25882
25890
|
renderer.setSize(
|
|
25883
25891
|
mountRef.current.clientWidth,
|
|
@@ -28863,7 +28871,7 @@ var BoardMeshes = ({
|
|
|
28863
28871
|
}, [rootObject, geometryMeshes, textureMeshes]);
|
|
28864
28872
|
return null;
|
|
28865
28873
|
};
|
|
28866
|
-
var MANIFOLD_CDN_BASE_URL = "https://cdn.jsdelivr.net/npm/manifold-3d@3.
|
|
28874
|
+
var MANIFOLD_CDN_BASE_URL = "https://cdn.jsdelivr.net/npm/manifold-3d@3.2.1";
|
|
28867
28875
|
var CadViewerManifold = ({
|
|
28868
28876
|
circuitJson: circuitJsonProp,
|
|
28869
28877
|
autoRotateDisabled,
|
|
@@ -28878,32 +28886,57 @@ var CadViewerManifold = ({
|
|
|
28878
28886
|
const [manifoldJSModule, setManifoldJSModule] = useState13(null);
|
|
28879
28887
|
const [manifoldLoadingError, setManifoldLoadingError] = useState13(null);
|
|
28880
28888
|
useEffect20(() => {
|
|
28881
|
-
const
|
|
28889
|
+
const initManifold = async (ManifoldModule) => {
|
|
28882
28890
|
try {
|
|
28883
|
-
const
|
|
28884
|
-
|
|
28885
|
-
|
|
28886
|
-
manifoldURL
|
|
28887
|
-
);
|
|
28888
|
-
if (ManifoldModule) {
|
|
28889
|
-
const loadedModule = await ManifoldModule({
|
|
28890
|
-
locateFile: () => `${MANIFOLD_CDN_BASE_URL}/manifold.wasm`
|
|
28891
|
-
});
|
|
28892
|
-
loadedModule.setup();
|
|
28893
|
-
setManifoldJSModule(loadedModule);
|
|
28894
|
-
} else {
|
|
28895
|
-
throw new Error(
|
|
28896
|
-
"ManifoldModule not found in dynamically imported module"
|
|
28897
|
-
);
|
|
28898
|
-
}
|
|
28891
|
+
const loadedModule = await ManifoldModule();
|
|
28892
|
+
loadedModule.setup();
|
|
28893
|
+
setManifoldJSModule(loadedModule);
|
|
28899
28894
|
} catch (error) {
|
|
28900
|
-
console.error("Failed to
|
|
28895
|
+
console.error("Failed to initialize Manifold:", error);
|
|
28901
28896
|
setManifoldLoadingError(
|
|
28902
|
-
`Failed to
|
|
28897
|
+
`Failed to initialize Manifold: ${error instanceof Error ? error.message : "Unknown error"}`
|
|
28903
28898
|
);
|
|
28904
28899
|
}
|
|
28905
28900
|
};
|
|
28906
|
-
|
|
28901
|
+
if (window.ManifoldModule) {
|
|
28902
|
+
initManifold(window.ManifoldModule);
|
|
28903
|
+
return;
|
|
28904
|
+
}
|
|
28905
|
+
const eventName = "manifoldLoaded";
|
|
28906
|
+
const handleLoad = () => {
|
|
28907
|
+
if (window.ManifoldModule) {
|
|
28908
|
+
initManifold(window.ManifoldModule);
|
|
28909
|
+
} else {
|
|
28910
|
+
const errText = "ManifoldModule not found on window after script load.";
|
|
28911
|
+
console.error(errText);
|
|
28912
|
+
setManifoldLoadingError(errText);
|
|
28913
|
+
}
|
|
28914
|
+
};
|
|
28915
|
+
window.addEventListener(eventName, handleLoad, { once: true });
|
|
28916
|
+
const script = document.createElement("script");
|
|
28917
|
+
script.type = "module";
|
|
28918
|
+
script.innerHTML = `
|
|
28919
|
+
try {
|
|
28920
|
+
const { default: ManifoldModule } = await import('${MANIFOLD_CDN_BASE_URL}/manifold.js');
|
|
28921
|
+
window.ManifoldModule = ManifoldModule;
|
|
28922
|
+
} catch (e) {
|
|
28923
|
+
console.error('Error importing manifold in dynamic script:', e);
|
|
28924
|
+
} finally {
|
|
28925
|
+
window.dispatchEvent(new CustomEvent('${eventName}'));
|
|
28926
|
+
}
|
|
28927
|
+
`.trim();
|
|
28928
|
+
const scriptError = (err) => {
|
|
28929
|
+
const errText = "Failed to load Manifold loader script.";
|
|
28930
|
+
console.error(errText, err);
|
|
28931
|
+
setManifoldLoadingError(errText);
|
|
28932
|
+
window.removeEventListener(eventName, handleLoad);
|
|
28933
|
+
};
|
|
28934
|
+
script.addEventListener("error", scriptError);
|
|
28935
|
+
document.body.appendChild(script);
|
|
28936
|
+
return () => {
|
|
28937
|
+
window.removeEventListener(eventName, handleLoad);
|
|
28938
|
+
script.removeEventListener("error", scriptError);
|
|
28939
|
+
};
|
|
28907
28940
|
}, []);
|
|
28908
28941
|
const {
|
|
28909
28942
|
geoms,
|