@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.
Files changed (2) hide show
  1. package/dist/index.js +55 -22
  2. 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.344",
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.1.1";
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 loadManifoldFromCDN = async () => {
28889
+ const initManifold = async (ManifoldModule) => {
28882
28890
  try {
28883
- const manifoldURL = `${MANIFOLD_CDN_BASE_URL}/manifold.js`;
28884
- const { default: ManifoldModule } = await import(
28885
- /* @vite-ignore */
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 load Manifold from CDN:", error);
28895
+ console.error("Failed to initialize Manifold:", error);
28901
28896
  setManifoldLoadingError(
28902
- `Failed to load Manifold module: ${error instanceof Error ? error.message : "Unknown error"}`
28897
+ `Failed to initialize Manifold: ${error instanceof Error ? error.message : "Unknown error"}`
28903
28898
  );
28904
28899
  }
28905
28900
  };
28906
- loadManifoldFromCDN();
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,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tscircuit/3d-viewer",
3
- "version": "0.0.345",
3
+ "version": "0.0.347",
4
4
  "main": "./dist/index.js",
5
5
  "module": "./dist/index.js",
6
6
  "type": "module",