@tscircuit/3d-viewer 0.0.355 → 0.0.356

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 +25 -22
  2. package/package.json +1 -1
package/dist/index.js CHANGED
@@ -25583,7 +25583,7 @@ import * as THREE10 from "three";
25583
25583
  // package.json
25584
25584
  var package_default = {
25585
25585
  name: "@tscircuit/3d-viewer",
25586
- version: "0.0.354",
25586
+ version: "0.0.355",
25587
25587
  main: "./dist/index.js",
25588
25588
  module: "./dist/index.js",
25589
25589
  type: "module",
@@ -26299,16 +26299,6 @@ var useConvertChildrenToSoup = (children) => {
26299
26299
  // src/hooks/use-stls-from-geom.ts
26300
26300
  import { useState as useState7, useEffect as useEffect15 } from "react";
26301
26301
  import stlSerializer from "@jscad/stl-serializer";
26302
- function blobToBase64Url(blob) {
26303
- return new Promise((resolve, reject) => {
26304
- const reader = new FileReader();
26305
- reader.onload = () => {
26306
- resolve(reader.result);
26307
- };
26308
- reader.onerror = reject;
26309
- reader.readAsDataURL(blob);
26310
- });
26311
- }
26312
26302
  var useStlsFromGeom = (geom) => {
26313
26303
  const [stls, setStls] = useState7([]);
26314
26304
  const [loading, setLoading] = useState7(true);
@@ -26318,10 +26308,10 @@ var useStlsFromGeom = (geom) => {
26318
26308
  setLoading(true);
26319
26309
  const geometries2 = Array.isArray(geom) ? geom : [geom];
26320
26310
  const stlPromises = geometries2.map(async (g) => {
26321
- const rawData = stlSerializer.serialize({ binary: true }, [g]);
26322
- const blobData = new Blob(rawData);
26323
- const stlUrl = await blobToBase64Url(blobData);
26324
- return { stlUrl, color: g.color };
26311
+ const rawParts = stlSerializer.serialize({ binary: true }, [g]);
26312
+ const blob = new Blob(rawParts);
26313
+ const stlData = await blob.arrayBuffer();
26314
+ return { stlData, color: g.color };
26325
26315
  });
26326
26316
  try {
26327
26317
  const generatedStls = await Promise.all(stlPromises);
@@ -27621,6 +27611,7 @@ import * as THREE12 from "three";
27621
27611
  import { STLLoader } from "three-stdlib";
27622
27612
  function STLModel({
27623
27613
  stlUrl,
27614
+ stlData,
27624
27615
  mtlUrl,
27625
27616
  color,
27626
27617
  opacity = 1
@@ -27629,10 +27620,22 @@ function STLModel({
27629
27620
  const [geom, setGeom] = useState10(null);
27630
27621
  useEffect18(() => {
27631
27622
  const loader = new STLLoader();
27632
- loader.load(stlUrl, (geometry) => {
27633
- setGeom(geometry);
27634
- });
27635
- }, [stlUrl]);
27623
+ if (stlData) {
27624
+ try {
27625
+ const geometry = loader.parse(stlData);
27626
+ setGeom(geometry);
27627
+ } catch (e) {
27628
+ console.error("Failed to parse STL data", e);
27629
+ setGeom(null);
27630
+ }
27631
+ return;
27632
+ }
27633
+ if (stlUrl) {
27634
+ loader.load(stlUrl, (geometry) => {
27635
+ setGeom(geometry);
27636
+ });
27637
+ }
27638
+ }, [stlUrl, stlData]);
27636
27639
  const mesh = useMemo15(() => {
27637
27640
  if (!geom) return null;
27638
27641
  const material = new THREE12.MeshStandardMaterial({
@@ -27735,14 +27738,14 @@ var CadViewerJscad = forwardRef3(
27735
27738
  boardDimensions,
27736
27739
  onUserInteraction,
27737
27740
  children: [
27738
- boardStls.map(({ stlUrl, color }, index) => /* @__PURE__ */ jsx12(
27741
+ boardStls.map(({ stlData, color }, index) => /* @__PURE__ */ jsx12(
27739
27742
  STLModel,
27740
27743
  {
27741
- stlUrl,
27744
+ stlData,
27742
27745
  color,
27743
27746
  opacity: index === 0 ? 0.95 : 1
27744
27747
  },
27745
- stlUrl
27748
+ `board-${index - boardStls.length}`
27746
27749
  )),
27747
27750
  cad_components.map((cad_component2) => /* @__PURE__ */ jsx12(
27748
27751
  ThreeErrorBoundary,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tscircuit/3d-viewer",
3
- "version": "0.0.355",
3
+ "version": "0.0.356",
4
4
  "main": "./dist/index.js",
5
5
  "module": "./dist/index.js",
6
6
  "type": "module",