@tscircuit/3d-viewer 0.0.201 → 0.0.203

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 +389 -135
  2. package/package.json +2 -2
package/dist/index.js CHANGED
@@ -195,9 +195,9 @@ var require_trigonometry = __commonJS({
195
195
  "use strict";
196
196
  var { NEPS } = require_constants();
197
197
  var rezero = (n) => Math.abs(n) < NEPS ? 0 : n;
198
- var sin = (radians) => rezero(Math.sin(radians));
199
- var cos = (radians) => rezero(Math.cos(radians));
200
- module.exports = { sin, cos };
198
+ var sin2 = (radians) => rezero(Math.sin(radians));
199
+ var cos2 = (radians) => rezero(Math.cos(radians));
200
+ module.exports = { sin: sin2, cos: cos2 };
201
201
  }
202
202
  });
203
203
 
@@ -205,10 +205,10 @@ var require_trigonometry = __commonJS({
205
205
  var require_fromAngleRadians = __commonJS({
206
206
  "node_modules/@jscad/modeling/src/maths/vec2/fromAngleRadians.js"(exports, module) {
207
207
  "use strict";
208
- var { sin, cos } = require_trigonometry();
208
+ var { sin: sin2, cos: cos2 } = require_trigonometry();
209
209
  var fromAngleRadians = (out, radians) => {
210
- out[0] = cos(radians);
211
- out[1] = sin(radians);
210
+ out[0] = cos2(radians);
211
+ out[1] = sin2(radians);
212
212
  return out;
213
213
  };
214
214
  module.exports = fromAngleRadians;
@@ -333,7 +333,7 @@ var require_negate = __commonJS({
333
333
  var require_rotate = __commonJS({
334
334
  "node_modules/@jscad/modeling/src/maths/vec2/rotate.js"(exports, module) {
335
335
  "use strict";
336
- var rotate = (out, vector, origin, radians) => {
336
+ var rotate2 = (out, vector, origin, radians) => {
337
337
  const x = vector[0] - origin[0];
338
338
  const y = vector[1] - origin[1];
339
339
  const c = Math.cos(radians);
@@ -342,7 +342,7 @@ var require_rotate = __commonJS({
342
342
  out[1] = x * s + y * c + origin[1];
343
343
  return out;
344
344
  };
345
- module.exports = rotate;
345
+ module.exports = rotate2;
346
346
  }
347
347
  });
348
348
 
@@ -352,8 +352,8 @@ var require_normal = __commonJS({
352
352
  "use strict";
353
353
  var { TAU } = require_constants();
354
354
  var create = require_create();
355
- var rotate = require_rotate();
356
- var normal = (out, vector) => rotate(out, vector, create(), TAU / 4);
355
+ var rotate2 = require_rotate();
356
+ var normal = (out, vector) => rotate2(out, vector, create(), TAU / 4);
357
357
  module.exports = normal;
358
358
  }
359
359
  });
@@ -381,12 +381,12 @@ var require_normalize = __commonJS({
381
381
  var require_scale = __commonJS({
382
382
  "node_modules/@jscad/modeling/src/maths/vec2/scale.js"(exports, module) {
383
383
  "use strict";
384
- var scale = (out, vector, amount) => {
384
+ var scale2 = (out, vector, amount) => {
385
385
  out[0] = vector[0] * amount;
386
386
  out[1] = vector[1] * amount;
387
387
  return out;
388
388
  };
389
- module.exports = scale;
389
+ module.exports = scale2;
390
390
  }
391
391
  });
392
392
 
@@ -455,14 +455,14 @@ var require_toString = __commonJS({
455
455
  var require_transform = __commonJS({
456
456
  "node_modules/@jscad/modeling/src/maths/vec2/transform.js"(exports, module) {
457
457
  "use strict";
458
- var transform = (out, vector, matrix) => {
458
+ var transform2 = (out, vector, matrix) => {
459
459
  const x = vector[0];
460
460
  const y = vector[1];
461
461
  out[0] = matrix[0] * x + matrix[4] * y + matrix[12];
462
462
  out[1] = matrix[1] * x + matrix[5] * y + matrix[13];
463
463
  return out;
464
464
  };
465
- module.exports = transform;
465
+ module.exports = transform2;
466
466
  }
467
467
  });
468
468
 
@@ -754,7 +754,7 @@ var require_fromRotation = __commonJS({
754
754
  "node_modules/@jscad/modeling/src/maths/mat4/fromRotation.js"(exports, module) {
755
755
  "use strict";
756
756
  var { EPS } = require_constants();
757
- var { sin, cos } = require_trigonometry();
757
+ var { sin: sin2, cos: cos2 } = require_trigonometry();
758
758
  var identity = require_identity();
759
759
  var fromRotation = (out, rad, axis) => {
760
760
  let [x, y, z] = axis;
@@ -766,8 +766,8 @@ var require_fromRotation = __commonJS({
766
766
  x *= len;
767
767
  y *= len;
768
768
  z *= len;
769
- const s = sin(rad);
770
- const c = cos(rad);
769
+ const s = sin2(rad);
770
+ const c = cos2(rad);
771
771
  const t = 1 - c;
772
772
  out[0] = x * x * t + c;
773
773
  out[1] = y * x * t + z * s;
@@ -822,14 +822,14 @@ var require_fromScaling = __commonJS({
822
822
  var require_fromTaitBryanRotation = __commonJS({
823
823
  "node_modules/@jscad/modeling/src/maths/mat4/fromTaitBryanRotation.js"(exports, module) {
824
824
  "use strict";
825
- var { sin, cos } = require_trigonometry();
825
+ var { sin: sin2, cos: cos2 } = require_trigonometry();
826
826
  var fromTaitBryanRotation = (out, yaw, pitch, roll) => {
827
- const sy = sin(yaw);
828
- const cy = cos(yaw);
829
- const sp = sin(pitch);
830
- const cp = cos(pitch);
831
- const sr = sin(roll);
832
- const cr = cos(roll);
827
+ const sy = sin2(yaw);
828
+ const cy = cos2(yaw);
829
+ const sp = sin2(pitch);
830
+ const cp = cos2(pitch);
831
+ const sr = sin2(roll);
832
+ const cr = cos2(roll);
833
833
  out[0] = cp * cy;
834
834
  out[1] = cp * sy;
835
835
  out[2] = -sp;
@@ -1298,13 +1298,13 @@ var require_rotateZ = __commonJS({
1298
1298
  var require_scale2 = __commonJS({
1299
1299
  "node_modules/@jscad/modeling/src/maths/vec3/scale.js"(exports, module) {
1300
1300
  "use strict";
1301
- var scale = (out, vector, amount) => {
1301
+ var scale2 = (out, vector, amount) => {
1302
1302
  out[0] = vector[0] * amount;
1303
1303
  out[1] = vector[1] * amount;
1304
1304
  out[2] = vector[2] * amount;
1305
1305
  return out;
1306
1306
  };
1307
- module.exports = scale;
1307
+ module.exports = scale2;
1308
1308
  }
1309
1309
  });
1310
1310
 
@@ -1377,7 +1377,7 @@ var require_toString2 = __commonJS({
1377
1377
  var require_transform2 = __commonJS({
1378
1378
  "node_modules/@jscad/modeling/src/maths/vec3/transform.js"(exports, module) {
1379
1379
  "use strict";
1380
- var transform = (out, vector, matrix) => {
1380
+ var transform2 = (out, vector, matrix) => {
1381
1381
  const x = vector[0];
1382
1382
  const y = vector[1];
1383
1383
  const z = vector[2];
@@ -1388,7 +1388,7 @@ var require_transform2 = __commonJS({
1388
1388
  out[2] = (matrix[2] * x + matrix[6] * y + matrix[10] * z + matrix[14]) / w;
1389
1389
  return out;
1390
1390
  };
1391
- module.exports = transform;
1391
+ module.exports = transform2;
1392
1392
  }
1393
1393
  });
1394
1394
 
@@ -1472,10 +1472,10 @@ var require_fromVectorRotation = __commonJS({
1472
1472
  var require_fromXRotation = __commonJS({
1473
1473
  "node_modules/@jscad/modeling/src/maths/mat4/fromXRotation.js"(exports, module) {
1474
1474
  "use strict";
1475
- var { sin, cos } = require_trigonometry();
1475
+ var { sin: sin2, cos: cos2 } = require_trigonometry();
1476
1476
  var fromXRotation = (out, radians) => {
1477
- const s = sin(radians);
1478
- const c = cos(radians);
1477
+ const s = sin2(radians);
1478
+ const c = cos2(radians);
1479
1479
  out[0] = 1;
1480
1480
  out[1] = 0;
1481
1481
  out[2] = 0;
@@ -1502,10 +1502,10 @@ var require_fromXRotation = __commonJS({
1502
1502
  var require_fromYRotation = __commonJS({
1503
1503
  "node_modules/@jscad/modeling/src/maths/mat4/fromYRotation.js"(exports, module) {
1504
1504
  "use strict";
1505
- var { sin, cos } = require_trigonometry();
1505
+ var { sin: sin2, cos: cos2 } = require_trigonometry();
1506
1506
  var fromYRotation = (out, radians) => {
1507
- const s = sin(radians);
1508
- const c = cos(radians);
1507
+ const s = sin2(radians);
1508
+ const c = cos2(radians);
1509
1509
  out[0] = c;
1510
1510
  out[1] = 0;
1511
1511
  out[2] = -s;
@@ -1532,10 +1532,10 @@ var require_fromYRotation = __commonJS({
1532
1532
  var require_fromZRotation = __commonJS({
1533
1533
  "node_modules/@jscad/modeling/src/maths/mat4/fromZRotation.js"(exports, module) {
1534
1534
  "use strict";
1535
- var { sin, cos } = require_trigonometry();
1535
+ var { sin: sin2, cos: cos2 } = require_trigonometry();
1536
1536
  var fromZRotation = (out, radians) => {
1537
- const s = sin(radians);
1538
- const c = cos(radians);
1537
+ const s = sin2(radians);
1538
+ const c = cos2(radians);
1539
1539
  out[0] = c;
1540
1540
  out[1] = s;
1541
1541
  out[2] = 0;
@@ -1687,9 +1687,9 @@ var require_rotate2 = __commonJS({
1687
1687
  "node_modules/@jscad/modeling/src/maths/mat4/rotate.js"(exports, module) {
1688
1688
  "use strict";
1689
1689
  var { EPS } = require_constants();
1690
- var { sin, cos } = require_trigonometry();
1690
+ var { sin: sin2, cos: cos2 } = require_trigonometry();
1691
1691
  var copy = require_copy2();
1692
- var rotate = (out, matrix, radians, axis) => {
1692
+ var rotate2 = (out, matrix, radians, axis) => {
1693
1693
  let [x, y, z] = axis;
1694
1694
  const lengthSquared = x * x + y * y + z * z;
1695
1695
  if (Math.abs(lengthSquared) < EPS) {
@@ -1699,8 +1699,8 @@ var require_rotate2 = __commonJS({
1699
1699
  x *= len;
1700
1700
  y *= len;
1701
1701
  z *= len;
1702
- const s = sin(radians);
1703
- const c = cos(radians);
1702
+ const s = sin2(radians);
1703
+ const c = cos2(radians);
1704
1704
  const t = 1 - c;
1705
1705
  const a00 = matrix[0];
1706
1706
  const a01 = matrix[1];
@@ -1743,7 +1743,7 @@ var require_rotate2 = __commonJS({
1743
1743
  }
1744
1744
  return out;
1745
1745
  };
1746
- module.exports = rotate;
1746
+ module.exports = rotate2;
1747
1747
  }
1748
1748
  });
1749
1749
 
@@ -1751,10 +1751,10 @@ var require_rotate2 = __commonJS({
1751
1751
  var require_rotateX2 = __commonJS({
1752
1752
  "node_modules/@jscad/modeling/src/maths/mat4/rotateX.js"(exports, module) {
1753
1753
  "use strict";
1754
- var { sin, cos } = require_trigonometry();
1754
+ var { sin: sin2, cos: cos2 } = require_trigonometry();
1755
1755
  var rotateX = (out, matrix, radians) => {
1756
- const s = sin(radians);
1757
- const c = cos(radians);
1756
+ const s = sin2(radians);
1757
+ const c = cos2(radians);
1758
1758
  const a10 = matrix[4];
1759
1759
  const a11 = matrix[5];
1760
1760
  const a12 = matrix[6];
@@ -1791,10 +1791,10 @@ var require_rotateX2 = __commonJS({
1791
1791
  var require_rotateY2 = __commonJS({
1792
1792
  "node_modules/@jscad/modeling/src/maths/mat4/rotateY.js"(exports, module) {
1793
1793
  "use strict";
1794
- var { sin, cos } = require_trigonometry();
1794
+ var { sin: sin2, cos: cos2 } = require_trigonometry();
1795
1795
  var rotateY = (out, matrix, radians) => {
1796
- const s = sin(radians);
1797
- const c = cos(radians);
1796
+ const s = sin2(radians);
1797
+ const c = cos2(radians);
1798
1798
  const a00 = matrix[0];
1799
1799
  const a01 = matrix[1];
1800
1800
  const a02 = matrix[2];
@@ -1831,10 +1831,10 @@ var require_rotateY2 = __commonJS({
1831
1831
  var require_rotateZ2 = __commonJS({
1832
1832
  "node_modules/@jscad/modeling/src/maths/mat4/rotateZ.js"(exports, module) {
1833
1833
  "use strict";
1834
- var { sin, cos } = require_trigonometry();
1834
+ var { sin: sin2, cos: cos2 } = require_trigonometry();
1835
1835
  var rotateZ = (out, matrix, radians) => {
1836
- const s = sin(radians);
1837
- const c = cos(radians);
1836
+ const s = sin2(radians);
1837
+ const c = cos2(radians);
1838
1838
  const a00 = matrix[0];
1839
1839
  const a01 = matrix[1];
1840
1840
  const a02 = matrix[2];
@@ -1871,7 +1871,7 @@ var require_rotateZ2 = __commonJS({
1871
1871
  var require_scale3 = __commonJS({
1872
1872
  "node_modules/@jscad/modeling/src/maths/mat4/scale.js"(exports, module) {
1873
1873
  "use strict";
1874
- var scale = (out, matrix, dimensions) => {
1874
+ var scale2 = (out, matrix, dimensions) => {
1875
1875
  const x = dimensions[0];
1876
1876
  const y = dimensions[1];
1877
1877
  const z = dimensions[2];
@@ -1893,7 +1893,7 @@ var require_scale3 = __commonJS({
1893
1893
  out[15] = matrix[15];
1894
1894
  return out;
1895
1895
  };
1896
- module.exports = scale;
1896
+ module.exports = scale2;
1897
1897
  }
1898
1898
  });
1899
1899
 
@@ -1937,7 +1937,7 @@ var require_toString3 = __commonJS({
1937
1937
  var require_translate = __commonJS({
1938
1938
  "node_modules/@jscad/modeling/src/maths/mat4/translate.js"(exports, module) {
1939
1939
  "use strict";
1940
- var translate3 = (out, matrix, offsets) => {
1940
+ var translate4 = (out, matrix, offsets) => {
1941
1941
  const x = offsets[0];
1942
1942
  const y = offsets[1];
1943
1943
  const z = offsets[2];
@@ -1990,7 +1990,7 @@ var require_translate = __commonJS({
1990
1990
  }
1991
1991
  return out;
1992
1992
  };
1993
- module.exports = translate3;
1993
+ module.exports = translate4;
1994
1994
  }
1995
1995
  });
1996
1996
 
@@ -2515,11 +2515,11 @@ var require_transform3 = __commonJS({
2515
2515
  "node_modules/@jscad/modeling/src/geometries/path2/transform.js"(exports, module) {
2516
2516
  "use strict";
2517
2517
  var mat4 = require_mat4();
2518
- var transform = (matrix, geometry) => {
2518
+ var transform2 = (matrix, geometry) => {
2519
2519
  const transforms = mat4.multiply(mat4.create(), matrix, geometry.transforms);
2520
2520
  return Object.assign({}, geometry, { transforms });
2521
2521
  };
2522
- module.exports = transform;
2522
+ module.exports = transform2;
2523
2523
  }
2524
2524
  });
2525
2525
 
@@ -2992,7 +2992,7 @@ var require_transform4 = __commonJS({
2992
2992
  "use strict";
2993
2993
  var mat4 = require_mat4();
2994
2994
  var reverse = require_reverse2();
2995
- var transform = (matrix, geometry) => {
2995
+ var transform2 = (matrix, geometry) => {
2996
2996
  const transforms = mat4.multiply(mat4.create(), matrix, geometry.transforms);
2997
2997
  const transformed = Object.assign({}, geometry, { transforms });
2998
2998
  if (matrix[0] * matrix[5] - matrix[4] * matrix[1] < 0) {
@@ -3000,7 +3000,7 @@ var require_transform4 = __commonJS({
3000
3000
  }
3001
3001
  return transformed;
3002
3002
  };
3003
- module.exports = transform;
3003
+ module.exports = transform2;
3004
3004
  }
3005
3005
  });
3006
3006
 
@@ -3058,7 +3058,7 @@ var require_ellipse = __commonJS({
3058
3058
  var { EPS, TAU } = require_constants();
3059
3059
  var vec2 = require_vec2();
3060
3060
  var geom2 = require_geom2();
3061
- var { sin, cos } = require_trigonometry();
3061
+ var { sin: sin2, cos: cos2 } = require_trigonometry();
3062
3062
  var { isGTE, isNumberArray } = require_commonChecks();
3063
3063
  var ellipse = (options) => {
3064
3064
  const defaults = {
@@ -3095,7 +3095,7 @@ var require_ellipse = __commonJS({
3095
3095
  segments = rotation < TAU ? segments + 1 : segments;
3096
3096
  for (let i = 0; i < segments; i++) {
3097
3097
  const angle = step * i + startAngle;
3098
- const point = vec2.fromValues(radius[0] * cos(angle), radius[1] * sin(angle));
3098
+ const point = vec2.fromValues(radius[0] * cos2(angle), radius[1] * sin2(angle));
3099
3099
  vec2.add(point, centerv, point);
3100
3100
  points.push(point);
3101
3101
  }
@@ -3405,7 +3405,7 @@ var require_Face = __commonJS({
3405
3405
  var dot = require_dot2();
3406
3406
  var length = require_length2();
3407
3407
  var normalize = require_normalize2();
3408
- var scale = require_scale2();
3408
+ var scale2 = require_scale2();
3409
3409
  var subtract3 = require_subtract2();
3410
3410
  var HalfEdge = require_HalfEdge();
3411
3411
  var VISIBLE = 0;
@@ -3453,7 +3453,7 @@ var require_Face = __commonJS({
3453
3453
  this.nVertices += 1;
3454
3454
  }
3455
3455
  this.area = length(this.normal);
3456
- this.normal = scale(this.normal, this.normal, 1 / this.area);
3456
+ this.normal = scale2(this.normal, this.normal, 1 / this.area);
3457
3457
  }
3458
3458
  computeNormalMinArea(minArea) {
3459
3459
  this.computeNormal();
@@ -3473,9 +3473,9 @@ var require_Face = __commonJS({
3473
3473
  const p2 = maxEdge.head().point;
3474
3474
  const maxVector = subtract3([], p2, p1);
3475
3475
  const maxLength = Math.sqrt(maxSquaredLength);
3476
- scale(maxVector, maxVector, 1 / maxLength);
3476
+ scale2(maxVector, maxVector, 1 / maxLength);
3477
3477
  const maxProjection = dot(this.normal, maxVector);
3478
- scale(maxVector, maxVector, -maxProjection);
3478
+ scale2(maxVector, maxVector, -maxProjection);
3479
3479
  add(this.normal, this.normal, maxVector);
3480
3480
  normalize(this.normal, this.normal);
3481
3481
  }
@@ -3487,7 +3487,7 @@ var require_Face = __commonJS({
3487
3487
  add(this.centroid, this.centroid, edge.head().point);
3488
3488
  edge = edge.next;
3489
3489
  } while (edge !== this.edge);
3490
- scale(this.centroid, this.centroid, 1 / this.nVertices);
3490
+ scale2(this.centroid, this.centroid, 1 / this.nVertices);
3491
3491
  }
3492
3492
  computeNormalAndCentroid(minArea) {
3493
3493
  if (typeof minArea !== "undefined") {
@@ -4518,7 +4518,7 @@ var require_transform5 = __commonJS({
4518
4518
  var vec3 = require_vec3();
4519
4519
  var fromPoints = require_fromPoints4();
4520
4520
  var flip = require_flip();
4521
- var transform = (out, plane, matrix) => {
4521
+ var transform2 = (out, plane, matrix) => {
4522
4522
  const ismirror = mat4.isMirroring(matrix);
4523
4523
  const r = vec3.orthogonal(vec3.create(), plane);
4524
4524
  const u = vec3.cross(r, plane, r);
@@ -4536,7 +4536,7 @@ var require_transform5 = __commonJS({
4536
4536
  }
4537
4537
  return out;
4538
4538
  };
4539
- module.exports = transform;
4539
+ module.exports = transform2;
4540
4540
  }
4541
4541
  });
4542
4542
 
@@ -4788,7 +4788,7 @@ var require_fromScalar3 = __commonJS({
4788
4788
  var require_transform6 = __commonJS({
4789
4789
  "node_modules/@jscad/modeling/src/maths/vec4/transform.js"(exports, module) {
4790
4790
  "use strict";
4791
- var transform = (out, vector, matrix) => {
4791
+ var transform2 = (out, vector, matrix) => {
4792
4792
  const [x, y, z, w] = vector;
4793
4793
  out[0] = matrix[0] * x + matrix[4] * y + matrix[8] * z + matrix[12] * w;
4794
4794
  out[1] = matrix[1] * x + matrix[5] * y + matrix[9] * z + matrix[13] * w;
@@ -4796,7 +4796,7 @@ var require_transform6 = __commonJS({
4796
4796
  out[3] = matrix[3] * x + matrix[7] * y + matrix[11] * z + matrix[15] * w;
4797
4797
  return out;
4798
4798
  };
4799
- module.exports = transform;
4799
+ module.exports = transform2;
4800
4800
  }
4801
4801
  });
4802
4802
 
@@ -4917,14 +4917,14 @@ var require_transform7 = __commonJS({
4917
4917
  var mat4 = require_mat4();
4918
4918
  var vec3 = require_vec3();
4919
4919
  var create = require_create7();
4920
- var transform = (matrix, polygon2) => {
4920
+ var transform2 = (matrix, polygon2) => {
4921
4921
  const vertices = polygon2.vertices.map((vertex) => vec3.transform(vec3.create(), vertex, matrix));
4922
4922
  if (mat4.isMirroring(matrix)) {
4923
4923
  vertices.reverse();
4924
4924
  }
4925
4925
  return create(vertices);
4926
4926
  };
4927
- module.exports = transform;
4927
+ module.exports = transform2;
4928
4928
  }
4929
4929
  });
4930
4930
 
@@ -5231,11 +5231,11 @@ var require_transform8 = __commonJS({
5231
5231
  "node_modules/@jscad/modeling/src/geometries/geom3/transform.js"(exports, module) {
5232
5232
  "use strict";
5233
5233
  var mat4 = require_mat4();
5234
- var transform = (matrix, geometry) => {
5234
+ var transform2 = (matrix, geometry) => {
5235
5235
  const transforms = mat4.multiply(mat4.create(), matrix, geometry.transforms);
5236
5236
  return Object.assign({}, geometry, { transforms });
5237
5237
  };
5238
- module.exports = transform;
5238
+ module.exports = transform2;
5239
5239
  }
5240
5240
  });
5241
5241
 
@@ -5377,7 +5377,7 @@ var require_cylinderElliptic = __commonJS({
5377
5377
  var vec3 = require_vec3();
5378
5378
  var geom3 = require_geom3();
5379
5379
  var poly3 = require_poly3();
5380
- var { sin, cos } = require_trigonometry();
5380
+ var { sin: sin2, cos: cos2 } = require_trigonometry();
5381
5381
  var { isGT, isGTE, isNumberArray } = require_commonChecks();
5382
5382
  var cylinderElliptic = (options) => {
5383
5383
  const defaults = {
@@ -5423,8 +5423,8 @@ var require_cylinderElliptic = __commonJS({
5423
5423
  const v3 = vec3.create();
5424
5424
  const point = (stack, slice, radius) => {
5425
5425
  const angle = slice * rotation + startAngle;
5426
- vec3.scale(v1, axisX, radius[0] * cos(angle));
5427
- vec3.scale(v2, axisY, radius[1] * sin(angle));
5426
+ vec3.scale(v1, axisX, radius[0] * cos2(angle));
5427
+ vec3.scale(v2, axisY, radius[1] * sin2(angle));
5428
5428
  vec3.add(v1, v1, v2);
5429
5429
  vec3.scale(v3, ray, stack);
5430
5430
  vec3.add(v3, v3, start);
@@ -5509,7 +5509,7 @@ var require_ellipsoid = __commonJS({
5509
5509
  var vec3 = require_vec3();
5510
5510
  var geom3 = require_geom3();
5511
5511
  var poly3 = require_poly3();
5512
- var { sin, cos } = require_trigonometry();
5512
+ var { sin: sin2, cos: cos2 } = require_trigonometry();
5513
5513
  var { isGTE, isNumberArray } = require_commonChecks();
5514
5514
  var ellipsoid = (options) => {
5515
5515
  const defaults = {
@@ -5534,13 +5534,13 @@ var require_ellipsoid = __commonJS({
5534
5534
  const p2 = vec3.create();
5535
5535
  for (let slice1 = 0; slice1 <= segments; slice1++) {
5536
5536
  const angle = TAU * slice1 / segments;
5537
- const cylinderpoint = vec3.add(vec3.create(), vec3.scale(p1, xvector, cos(angle)), vec3.scale(p2, yvector, sin(angle)));
5537
+ const cylinderpoint = vec3.add(vec3.create(), vec3.scale(p1, xvector, cos2(angle)), vec3.scale(p2, yvector, sin2(angle)));
5538
5538
  if (slice1 > 0) {
5539
5539
  let prevcospitch, prevsinpitch;
5540
5540
  for (let slice2 = 0; slice2 <= qsegments; slice2++) {
5541
5541
  const pitch = TAU / 4 * slice2 / qsegments;
5542
- const cospitch = cos(pitch);
5543
- const sinpitch = sin(pitch);
5542
+ const cospitch = cos2(pitch);
5543
+ const sinpitch = sin2(pitch);
5544
5544
  if (slice2 > 0) {
5545
5545
  let points = [];
5546
5546
  let point;
@@ -5864,13 +5864,13 @@ var require_roundedCuboid = __commonJS({
5864
5864
  var vec3 = require_vec3();
5865
5865
  var geom3 = require_geom3();
5866
5866
  var poly3 = require_poly3();
5867
- var { sin, cos } = require_trigonometry();
5867
+ var { sin: sin2, cos: cos2 } = require_trigonometry();
5868
5868
  var { isGTE, isNumberArray } = require_commonChecks();
5869
5869
  var cuboid4 = require_cuboid();
5870
5870
  var createCorners = (center, size, radius, segments, slice, positive) => {
5871
5871
  const pitch = TAU / 4 * slice / segments;
5872
- const cospitch = cos(pitch);
5873
- const sinpitch = sin(pitch);
5872
+ const cospitch = cos2(pitch);
5873
+ const sinpitch = sin2(pitch);
5874
5874
  const layersegments = segments - slice;
5875
5875
  let layerradius = radius * cospitch;
5876
5876
  let layeroffset = size[2] - (radius - radius * sinpitch);
@@ -6016,7 +6016,7 @@ var require_roundedCylinder = __commonJS({
6016
6016
  var vec3 = require_vec3();
6017
6017
  var geom3 = require_geom3();
6018
6018
  var poly3 = require_poly3();
6019
- var { sin, cos } = require_trigonometry();
6019
+ var { sin: sin2, cos: cos2 } = require_trigonometry();
6020
6020
  var { isGTE, isNumberArray } = require_commonChecks();
6021
6021
  var cylinder3 = require_cylinder();
6022
6022
  var roundedCylinder = (options) => {
@@ -6063,7 +6063,7 @@ var require_roundedCylinder = __commonJS({
6063
6063
  let prevcylinderpoint;
6064
6064
  for (let slice1 = 0; slice1 <= segments; slice1++) {
6065
6065
  const angle = TAU * slice1 / segments;
6066
- const cylinderpoint = vec3.add(vec3.create(), vec3.scale(v1, xvector, cos(angle)), vec3.scale(v2, yvector, sin(angle)));
6066
+ const cylinderpoint = vec3.add(vec3.create(), vec3.scale(v1, xvector, cos2(angle)), vec3.scale(v2, yvector, sin2(angle)));
6067
6067
  if (slice1 > 0) {
6068
6068
  let points = [];
6069
6069
  points.push(vec3.add(vec3.create(), start, cylinderpoint));
@@ -6074,8 +6074,8 @@ var require_roundedCylinder = __commonJS({
6074
6074
  let prevcospitch, prevsinpitch;
6075
6075
  for (let slice2 = 0; slice2 <= qsegments; slice2++) {
6076
6076
  const pitch = TAU / 4 * slice2 / qsegments;
6077
- const cospitch = cos(pitch);
6078
- const sinpitch = sin(pitch);
6077
+ const cospitch = cos2(pitch);
6078
+ const sinpitch = sin2(pitch);
6079
6079
  if (slice2 > 0) {
6080
6080
  points = [];
6081
6081
  let point;
@@ -6792,10 +6792,10 @@ var require_eliminateHoles = __commonJS({
6792
6792
  p = m;
6793
6793
  do {
6794
6794
  if (hx >= p.x && p.x >= mx && hx !== p.x && pointInTriangle(hy < my ? hx : qx, hy, mx, my, hy < my ? qx : hx, hy, p.x, p.y)) {
6795
- const tan = Math.abs(hy - p.y) / (hx - p.x);
6796
- if (locallyInside(p, hole) && (tan < tanMin || tan === tanMin && (p.x > m.x || p.x === m.x && sectorContainsSector(m, p)))) {
6795
+ const tan2 = Math.abs(hy - p.y) / (hx - p.x);
6796
+ if (locallyInside(p, hole) && (tan2 < tanMin || tan2 === tanMin && (p.x > m.x || p.x === m.x && sectorContainsSector(m, p)))) {
6797
6797
  m = p;
6798
- tanMin = tan;
6798
+ tanMin = tan2;
6799
6799
  }
6800
6800
  }
6801
6801
  p = p.next;
@@ -7346,11 +7346,11 @@ var require_transform9 = __commonJS({
7346
7346
  "use strict";
7347
7347
  var vec3 = require_vec3();
7348
7348
  var create = require_create9();
7349
- var transform = (matrix, slice) => {
7349
+ var transform2 = (matrix, slice) => {
7350
7350
  const edges = slice.edges.map((edge) => [vec3.transform(vec3.create(), edge[0], matrix), vec3.transform(vec3.create(), edge[1], matrix)]);
7351
7351
  return create(edges);
7352
7352
  };
7353
- module.exports = transform;
7353
+ module.exports = transform2;
7354
7354
  }
7355
7355
  });
7356
7356
 
@@ -7660,7 +7660,7 @@ var require_rotate3 = __commonJS({
7660
7660
  var geom2 = require_geom2();
7661
7661
  var geom3 = require_geom3();
7662
7662
  var path2 = require_path2();
7663
- var rotate = (angles, ...objects) => {
7663
+ var rotate2 = (angles, ...objects) => {
7664
7664
  if (!Array.isArray(angles)) throw new Error("angles must be an array");
7665
7665
  objects = flatten(objects);
7666
7666
  if (objects.length === 0) throw new Error("wrong number of arguments");
@@ -7678,11 +7678,11 @@ var require_rotate3 = __commonJS({
7678
7678
  });
7679
7679
  return results.length === 1 ? results[0] : results;
7680
7680
  };
7681
- var rotateX = (angle, ...objects) => rotate([angle, 0, 0], objects);
7682
- var rotateY = (angle, ...objects) => rotate([0, angle, 0], objects);
7683
- var rotateZ = (angle, ...objects) => rotate([0, 0, angle], objects);
7681
+ var rotateX = (angle, ...objects) => rotate2([angle, 0, 0], objects);
7682
+ var rotateY = (angle, ...objects) => rotate2([0, angle, 0], objects);
7683
+ var rotateZ = (angle, ...objects) => rotate2([0, 0, angle], objects);
7684
7684
  module.exports = {
7685
- rotate,
7685
+ rotate: rotate2,
7686
7686
  rotateX,
7687
7687
  rotateY,
7688
7688
  rotateZ
@@ -7699,7 +7699,7 @@ var require_translate2 = __commonJS({
7699
7699
  var geom2 = require_geom2();
7700
7700
  var geom3 = require_geom3();
7701
7701
  var path2 = require_path2();
7702
- var translate3 = (offset, ...objects) => {
7702
+ var translate4 = (offset, ...objects) => {
7703
7703
  if (!Array.isArray(offset)) throw new Error("offset must be an array");
7704
7704
  objects = flatten(objects);
7705
7705
  if (objects.length === 0) throw new Error("wrong number of arguments");
@@ -7714,11 +7714,11 @@ var require_translate2 = __commonJS({
7714
7714
  });
7715
7715
  return results.length === 1 ? results[0] : results;
7716
7716
  };
7717
- var translateX = (offset, ...objects) => translate3([offset, 0, 0], objects);
7718
- var translateY = (offset, ...objects) => translate3([0, offset, 0], objects);
7719
- var translateZ = (offset, ...objects) => translate3([0, 0, offset], objects);
7717
+ var translateX = (offset, ...objects) => translate4([offset, 0, 0], objects);
7718
+ var translateY = (offset, ...objects) => translate4([0, offset, 0], objects);
7719
+ var translateZ = (offset, ...objects) => translate4([0, 0, offset], objects);
7720
7720
  module.exports = {
7721
- translate: translate3,
7721
+ translate: translate4,
7722
7722
  translateX,
7723
7723
  translateY,
7724
7724
  translateZ
@@ -7732,8 +7732,8 @@ var require_torus = __commonJS({
7732
7732
  "use strict";
7733
7733
  var { TAU } = require_constants();
7734
7734
  var extrudeRotate = require_extrudeRotate();
7735
- var { rotate } = require_rotate3();
7736
- var { translate: translate3 } = require_translate2();
7735
+ var { rotate: rotate2 } = require_rotate3();
7736
+ var { translate: translate4 } = require_translate2();
7737
7737
  var circle = require_circle();
7738
7738
  var { isGT, isGTE } = require_commonChecks();
7739
7739
  var torus = (options) => {
@@ -7756,9 +7756,9 @@ var require_torus = __commonJS({
7756
7756
  if (innerRadius >= outerRadius) throw new Error("inner circle is too large to rotate about the outer circle");
7757
7757
  let innerCircle = circle({ radius: innerRadius, segments: innerSegments });
7758
7758
  if (innerRotation !== 0) {
7759
- innerCircle = rotate([0, 0, innerRotation], innerCircle);
7759
+ innerCircle = rotate2([0, 0, innerRotation], innerCircle);
7760
7760
  }
7761
- innerCircle = translate3([outerRadius, 0], innerCircle);
7761
+ innerCircle = translate4([outerRadius, 0], innerCircle);
7762
7762
  const extrudeOptions = {
7763
7763
  startAngle,
7764
7764
  angle: outerRotation,
@@ -8687,14 +8687,14 @@ var require_transform10 = __commonJS({
8687
8687
  var fromPoints = require_fromPoints7();
8688
8688
  var origin = require_origin();
8689
8689
  var direction = require_direction();
8690
- var transform = (out, line2, matrix) => {
8690
+ var transform2 = (out, line2, matrix) => {
8691
8691
  const org = origin(line2);
8692
8692
  const dir = direction(line2);
8693
8693
  vec2.transform(org, org, matrix);
8694
8694
  vec2.transform(dir, dir, matrix);
8695
8695
  return fromPoints(out, org, dir);
8696
8696
  };
8697
- module.exports = transform;
8697
+ module.exports = transform2;
8698
8698
  }
8699
8699
  });
8700
8700
 
@@ -10922,7 +10922,7 @@ var require_align = __commonJS({
10922
10922
  var flatten = require_flatten();
10923
10923
  var padArrayToLength = require_padArrayToLength();
10924
10924
  var measureAggregateBoundingBox = require_measureAggregateBoundingBox();
10925
- var { translate: translate3 } = require_translate2();
10925
+ var { translate: translate4 } = require_translate2();
10926
10926
  var validateOptions = (options) => {
10927
10927
  if (!Array.isArray(options.modes) || options.modes.length > 3) throw new Error("align(): modes must be an array of length <= 3");
10928
10928
  options.modes = padArrayToLength(options.modes, "none", 3);
@@ -10959,7 +10959,7 @@ var require_align = __commonJS({
10959
10959
  translation[i] = relativeTo[i] - bounds[0][i];
10960
10960
  }
10961
10961
  }
10962
- return translate3(translation, geometry);
10962
+ return translate4(translation, geometry);
10963
10963
  };
10964
10964
  var align = (options, ...geometries) => {
10965
10965
  const defaults = {
@@ -10996,7 +10996,7 @@ var require_center = __commonJS({
10996
10996
  var geom3 = require_geom3();
10997
10997
  var path2 = require_path2();
10998
10998
  var measureBoundingBox = require_measureBoundingBox2();
10999
- var { translate: translate3 } = require_translate2();
10999
+ var { translate: translate4 } = require_translate2();
11000
11000
  var centerGeometry = (options, object) => {
11001
11001
  const defaults = {
11002
11002
  axes: [true, true, true],
@@ -11008,7 +11008,7 @@ var require_center = __commonJS({
11008
11008
  if (axes[0]) offset[0] = relativeTo[0] - (bounds[0][0] + (bounds[1][0] - bounds[0][0]) / 2);
11009
11009
  if (axes[1]) offset[1] = relativeTo[1] - (bounds[0][1] + (bounds[1][1] - bounds[0][1]) / 2);
11010
11010
  if (axes[2]) offset[2] = relativeTo[2] - (bounds[0][2] + (bounds[1][2] - bounds[0][2]) / 2);
11011
- return translate3(offset, object);
11011
+ return translate4(offset, object);
11012
11012
  };
11013
11013
  var center = (options, ...objects) => {
11014
11014
  const defaults = {
@@ -11050,7 +11050,7 @@ var require_scale4 = __commonJS({
11050
11050
  var geom2 = require_geom2();
11051
11051
  var geom3 = require_geom3();
11052
11052
  var path2 = require_path2();
11053
- var scale = (factors, ...objects) => {
11053
+ var scale2 = (factors, ...objects) => {
11054
11054
  if (!Array.isArray(factors)) throw new Error("factors must be an array");
11055
11055
  objects = flatten(objects);
11056
11056
  if (objects.length === 0) throw new Error("wrong number of arguments");
@@ -11066,11 +11066,11 @@ var require_scale4 = __commonJS({
11066
11066
  });
11067
11067
  return results.length === 1 ? results[0] : results;
11068
11068
  };
11069
- var scaleX = (factor, ...objects) => scale([factor, 1, 1], objects);
11070
- var scaleY = (factor, ...objects) => scale([1, factor, 1], objects);
11071
- var scaleZ = (factor, ...objects) => scale([1, 1, factor], objects);
11069
+ var scaleX = (factor, ...objects) => scale2([factor, 1, 1], objects);
11070
+ var scaleY = (factor, ...objects) => scale2([1, factor, 1], objects);
11071
+ var scaleZ = (factor, ...objects) => scale2([1, 1, factor], objects);
11072
11072
  module.exports = {
11073
- scale,
11073
+ scale: scale2,
11074
11074
  scaleX,
11075
11075
  scaleY,
11076
11076
  scaleZ
@@ -11086,7 +11086,7 @@ var require_transform11 = __commonJS({
11086
11086
  var geom2 = require_geom2();
11087
11087
  var geom3 = require_geom3();
11088
11088
  var path2 = require_path2();
11089
- var transform = (matrix, ...objects) => {
11089
+ var transform2 = (matrix, ...objects) => {
11090
11090
  objects = flatten(objects);
11091
11091
  if (objects.length === 0) throw new Error("wrong number of arguments");
11092
11092
  const results = objects.map((object) => {
@@ -11097,7 +11097,7 @@ var require_transform11 = __commonJS({
11097
11097
  });
11098
11098
  return results.length === 1 ? results[0] : results;
11099
11099
  };
11100
- module.exports = transform;
11100
+ module.exports = transform2;
11101
11101
  }
11102
11102
  });
11103
11103
 
@@ -12259,7 +12259,7 @@ var require_transform12 = __commonJS({
12259
12259
  "use strict";
12260
12260
  var vec3 = require_vec3();
12261
12261
  var fromPointAndDirection = require_fromPointAndDirection();
12262
- var transform = (out, line2, matrix) => {
12262
+ var transform2 = (out, line2, matrix) => {
12263
12263
  const point = line2[0];
12264
12264
  const direction = line2[1];
12265
12265
  const pointPlusDirection = vec3.add(vec3.create(), point, direction);
@@ -12268,7 +12268,7 @@ var require_transform12 = __commonJS({
12268
12268
  const newdirection = vec3.subtract(newPointPlusDirection, newPointPlusDirection, newpoint);
12269
12269
  return fromPointAndDirection(out, newpoint, newdirection);
12270
12270
  };
12271
- module.exports = transform;
12271
+ module.exports = transform2;
12272
12272
  }
12273
12273
  });
12274
12274
 
@@ -15509,15 +15509,15 @@ var GLTFWriter = class {
15509
15509
  if (options.trs) {
15510
15510
  const rotation = object.quaternion.toArray();
15511
15511
  const position = object.position.toArray();
15512
- const scale = object.scale.toArray();
15512
+ const scale2 = object.scale.toArray();
15513
15513
  if (!equalArray(rotation, [0, 0, 0, 1])) {
15514
15514
  nodeDef.rotation = rotation;
15515
15515
  }
15516
15516
  if (!equalArray(position, [0, 0, 0])) {
15517
15517
  nodeDef.translation = position;
15518
15518
  }
15519
- if (!equalArray(scale, [1, 1, 1])) {
15520
- nodeDef.scale = scale;
15519
+ if (!equalArray(scale2, [1, 1, 1])) {
15520
+ nodeDef.scale = scale2;
15521
15521
  }
15522
15522
  } else {
15523
15523
  if (object.matrixAutoUpdate) {
@@ -16982,7 +16982,7 @@ import { Canvas, useFrame as useFrame2 } from "@react-three/fiber";
16982
16982
  // package.json
16983
16983
  var package_default = {
16984
16984
  name: "@tscircuit/3d-viewer",
16985
- version: "0.0.200",
16985
+ version: "0.0.202",
16986
16986
  main: "./dist/index.js",
16987
16987
  module: "./dist/index.js",
16988
16988
  type: "module",
@@ -17013,7 +17013,7 @@ var package_default = {
17013
17013
  "@jscad/stl-serializer": "^2.1.20",
17014
17014
  "@react-three/drei": "^9.121.4",
17015
17015
  "@react-three/fiber": "^8.17.14",
17016
- "@tscircuit/core": "^0.0.374",
17016
+ "@tscircuit/core": "^0.0.377",
17017
17017
  "@tscircuit/props": "^0.0.172",
17018
17018
  "@tscircuit/soup-util": "^0.0.41",
17019
17019
  "jscad-electronics": "^0.0.27",
@@ -17512,11 +17512,224 @@ var import_expansions = __toESM(require_expansions(), 1);
17512
17512
 
17513
17513
  // src/geoms/create-geoms-for-silkscreen-text.ts
17514
17514
  var import_text = __toESM(require_text(), 1);
17515
+
17516
+ // node_modules/transformation-matrix/src/applyToPoint.js
17517
+ function applyToPoint(matrix, point) {
17518
+ return Array.isArray(point) ? [
17519
+ matrix.a * point[0] + matrix.c * point[1] + matrix.e,
17520
+ matrix.b * point[0] + matrix.d * point[1] + matrix.f
17521
+ ] : {
17522
+ x: matrix.a * point.x + matrix.c * point.y + matrix.e,
17523
+ y: matrix.b * point.x + matrix.d * point.y + matrix.f
17524
+ };
17525
+ }
17526
+
17527
+ // node_modules/transformation-matrix/src/utils.js
17528
+ function isUndefined(val) {
17529
+ return typeof val === "undefined";
17530
+ }
17531
+
17532
+ // node_modules/transformation-matrix/src/translate.js
17533
+ function translate2(tx, ty = 0) {
17534
+ return {
17535
+ a: 1,
17536
+ c: 0,
17537
+ e: tx,
17538
+ b: 0,
17539
+ d: 1,
17540
+ f: ty
17541
+ };
17542
+ }
17543
+
17544
+ // node_modules/transformation-matrix/src/transform.js
17545
+ function transform(...matrices) {
17546
+ matrices = Array.isArray(matrices[0]) ? matrices[0] : matrices;
17547
+ const multiply = (m1, m2) => {
17548
+ return {
17549
+ a: m1.a * m2.a + m1.c * m2.b,
17550
+ c: m1.a * m2.c + m1.c * m2.d,
17551
+ e: m1.a * m2.e + m1.c * m2.f + m1.e,
17552
+ b: m1.b * m2.a + m1.d * m2.b,
17553
+ d: m1.b * m2.c + m1.d * m2.d,
17554
+ f: m1.b * m2.e + m1.d * m2.f + m1.f
17555
+ };
17556
+ };
17557
+ switch (matrices.length) {
17558
+ case 0:
17559
+ throw new Error("no matrices provided");
17560
+ case 1:
17561
+ return matrices[0];
17562
+ case 2:
17563
+ return multiply(matrices[0], matrices[1]);
17564
+ default: {
17565
+ const [m1, m2, ...rest] = matrices;
17566
+ const m = multiply(m1, m2);
17567
+ return transform(m, ...rest);
17568
+ }
17569
+ }
17570
+ }
17571
+ function compose(...matrices) {
17572
+ return transform(...matrices);
17573
+ }
17574
+
17575
+ // node_modules/transformation-matrix/src/rotate.js
17576
+ var { cos, sin, PI } = Math;
17577
+ function rotate(angle, cx, cy) {
17578
+ const cosAngle = cos(angle);
17579
+ const sinAngle = sin(angle);
17580
+ const rotationMatrix = {
17581
+ a: cosAngle,
17582
+ c: -sinAngle,
17583
+ e: 0,
17584
+ b: sinAngle,
17585
+ d: cosAngle,
17586
+ f: 0
17587
+ };
17588
+ if (isUndefined(cx) || isUndefined(cy)) {
17589
+ return rotationMatrix;
17590
+ }
17591
+ return transform([
17592
+ translate2(cx, cy),
17593
+ rotationMatrix,
17594
+ translate2(-cx, -cy)
17595
+ ]);
17596
+ }
17597
+
17598
+ // node_modules/transformation-matrix/src/skew.js
17599
+ var { tan } = Math;
17600
+
17601
+ // node_modules/transformation-matrix/src/fromTransformAttribute.autogenerated.js
17602
+ function peg$subclass(child, parent) {
17603
+ function C() {
17604
+ this.constructor = child;
17605
+ }
17606
+ C.prototype = parent.prototype;
17607
+ child.prototype = new C();
17608
+ }
17609
+ function peg$SyntaxError(message, expected, found, location) {
17610
+ var self = Error.call(this, message);
17611
+ if (Object.setPrototypeOf) {
17612
+ Object.setPrototypeOf(self, peg$SyntaxError.prototype);
17613
+ }
17614
+ self.expected = expected;
17615
+ self.found = found;
17616
+ self.location = location;
17617
+ self.name = "SyntaxError";
17618
+ return self;
17619
+ }
17620
+ peg$subclass(peg$SyntaxError, Error);
17621
+ function peg$padEnd(str, targetLength, padString) {
17622
+ padString = padString || " ";
17623
+ if (str.length > targetLength) {
17624
+ return str;
17625
+ }
17626
+ targetLength -= str.length;
17627
+ padString += padString.repeat(targetLength);
17628
+ return str + padString.slice(0, targetLength);
17629
+ }
17630
+ peg$SyntaxError.prototype.format = function(sources) {
17631
+ var str = "Error: " + this.message;
17632
+ if (this.location) {
17633
+ var src = null;
17634
+ var k;
17635
+ for (k = 0; k < sources.length; k++) {
17636
+ if (sources[k].source === this.location.source) {
17637
+ src = sources[k].text.split(/\r\n|\n|\r/g);
17638
+ break;
17639
+ }
17640
+ }
17641
+ var s = this.location.start;
17642
+ var offset_s = this.location.source && typeof this.location.source.offset === "function" ? this.location.source.offset(s) : s;
17643
+ var loc = this.location.source + ":" + offset_s.line + ":" + offset_s.column;
17644
+ if (src) {
17645
+ var e = this.location.end;
17646
+ var filler = peg$padEnd("", offset_s.line.toString().length, " ");
17647
+ var line2 = src[s.line - 1];
17648
+ var last = s.line === e.line ? e.column : line2.length + 1;
17649
+ var hatLen = last - s.column || 1;
17650
+ str += "\n --> " + loc + "\n" + filler + " |\n" + offset_s.line + " | " + line2 + "\n" + filler + " | " + peg$padEnd("", s.column - 1, " ") + peg$padEnd("", hatLen, "^");
17651
+ } else {
17652
+ str += "\n at " + loc;
17653
+ }
17654
+ }
17655
+ return str;
17656
+ };
17657
+ peg$SyntaxError.buildMessage = function(expected, found) {
17658
+ var DESCRIBE_EXPECTATION_FNS = {
17659
+ literal: function(expectation) {
17660
+ return '"' + literalEscape(expectation.text) + '"';
17661
+ },
17662
+ class: function(expectation) {
17663
+ var escapedParts = expectation.parts.map(function(part) {
17664
+ return Array.isArray(part) ? classEscape(part[0]) + "-" + classEscape(part[1]) : classEscape(part);
17665
+ });
17666
+ return "[" + (expectation.inverted ? "^" : "") + escapedParts.join("") + "]";
17667
+ },
17668
+ any: function() {
17669
+ return "any character";
17670
+ },
17671
+ end: function() {
17672
+ return "end of input";
17673
+ },
17674
+ other: function(expectation) {
17675
+ return expectation.description;
17676
+ }
17677
+ };
17678
+ function hex(ch) {
17679
+ return ch.charCodeAt(0).toString(16).toUpperCase();
17680
+ }
17681
+ function literalEscape(s) {
17682
+ return s.replace(/\\/g, "\\\\").replace(/"/g, '\\"').replace(/\0/g, "\\0").replace(/\t/g, "\\t").replace(/\n/g, "\\n").replace(/\r/g, "\\r").replace(/[\x00-\x0F]/g, function(ch) {
17683
+ return "\\x0" + hex(ch);
17684
+ }).replace(/[\x10-\x1F\x7F-\x9F]/g, function(ch) {
17685
+ return "\\x" + hex(ch);
17686
+ });
17687
+ }
17688
+ function classEscape(s) {
17689
+ return s.replace(/\\/g, "\\\\").replace(/\]/g, "\\]").replace(/\^/g, "\\^").replace(/-/g, "\\-").replace(/\0/g, "\\0").replace(/\t/g, "\\t").replace(/\n/g, "\\n").replace(/\r/g, "\\r").replace(/[\x00-\x0F]/g, function(ch) {
17690
+ return "\\x0" + hex(ch);
17691
+ }).replace(/[\x10-\x1F\x7F-\x9F]/g, function(ch) {
17692
+ return "\\x" + hex(ch);
17693
+ });
17694
+ }
17695
+ function describeExpectation(expectation) {
17696
+ return DESCRIBE_EXPECTATION_FNS[expectation.type](expectation);
17697
+ }
17698
+ function describeExpected(expected2) {
17699
+ var descriptions = expected2.map(describeExpectation);
17700
+ var i, j;
17701
+ descriptions.sort();
17702
+ if (descriptions.length > 0) {
17703
+ for (i = 1, j = 1; i < descriptions.length; i++) {
17704
+ if (descriptions[i - 1] !== descriptions[i]) {
17705
+ descriptions[j] = descriptions[i];
17706
+ j++;
17707
+ }
17708
+ }
17709
+ descriptions.length = j;
17710
+ }
17711
+ switch (descriptions.length) {
17712
+ case 1:
17713
+ return descriptions[0];
17714
+ case 2:
17715
+ return descriptions[0] + " or " + descriptions[1];
17716
+ default:
17717
+ return descriptions.slice(0, -1).join(", ") + ", or " + descriptions[descriptions.length - 1];
17718
+ }
17719
+ }
17720
+ function describeFound(found2) {
17721
+ return found2 ? '"' + literalEscape(found2) + '"' : "end of input";
17722
+ }
17723
+ return "Expected " + describeExpected(expected) + " but " + describeFound(found) + " found.";
17724
+ };
17725
+
17726
+ // src/geoms/create-geoms-for-silkscreen-text.ts
17515
17727
  function createSilkscreenTextGeoms(silkscreenText) {
17516
17728
  const textOutlines = (0, import_text.vectorText)({
17517
17729
  height: silkscreenText.font_size,
17518
17730
  input: silkscreenText.text
17519
17731
  });
17732
+ let rotationDegrees = silkscreenText.ccw_rotation ?? 0;
17520
17733
  textOutlines.forEach((outline) => {
17521
17734
  if (outline.length === 29) {
17522
17735
  textOutlines.splice(
@@ -17563,7 +17776,39 @@ function createSilkscreenTextGeoms(silkscreenText) {
17563
17776
  } else if (silkscreenText.anchor_alignment?.includes("bottom")) {
17564
17777
  yOffset = -textBounds.minY;
17565
17778
  }
17566
- return { textOutlines, xOffset, yOffset };
17779
+ const transforms = [];
17780
+ if (silkscreenText.layer === "bottom") {
17781
+ transforms.push(
17782
+ translate2(centerX, centerY),
17783
+ { a: -1, b: 0, c: 0, d: 1, e: 0, f: 0 },
17784
+ // horizontal flip matrix
17785
+ translate2(-centerX, -centerY)
17786
+ );
17787
+ rotationDegrees = -rotationDegrees;
17788
+ }
17789
+ if (rotationDegrees) {
17790
+ const rad = rotationDegrees * Math.PI / 180;
17791
+ transforms.push(
17792
+ translate2(centerX, centerY),
17793
+ rotate(rad),
17794
+ translate2(-centerX, -centerY)
17795
+ );
17796
+ }
17797
+ let transformedOutlines = textOutlines;
17798
+ if (transforms.length > 0) {
17799
+ const matrix = compose(...transforms);
17800
+ transformedOutlines = textOutlines.map(
17801
+ (outline) => outline.map(([x, y]) => {
17802
+ const { x: nx, y: ny } = applyToPoint(matrix, { x, y });
17803
+ return [nx, ny];
17804
+ })
17805
+ );
17806
+ }
17807
+ return {
17808
+ textOutlines: transformedOutlines,
17809
+ xOffset,
17810
+ yOffset
17811
+ };
17567
17812
  }
17568
17813
 
17569
17814
  // src/BoardGeomBuilder.ts
@@ -17878,11 +18123,20 @@ var BoardGeomBuilder = class {
17878
18123
  { delta: expansionDelta, corners: "round" },
17879
18124
  textPath
17880
18125
  );
17881
- let textGeom = (0, import_transforms2.translate)(
17882
- [0, 0, this.ctx.pcbThickness / 2 + M],
17883
- // Position above board
17884
- (0, import_extrusions2.extrudeLinear)({ height: 0.012 }, expandedPath)
17885
- );
18126
+ let textGeom;
18127
+ if (st.layer === "bottom") {
18128
+ textGeom = (0, import_transforms2.translate)(
18129
+ [0, 0, -this.ctx.pcbThickness / 2 - M],
18130
+ // Position above board
18131
+ (0, import_extrusions2.extrudeLinear)({ height: 0.012 }, expandedPath)
18132
+ );
18133
+ } else {
18134
+ textGeom = (0, import_transforms2.translate)(
18135
+ [0, 0, this.ctx.pcbThickness / 2 + M],
18136
+ // Position above board
18137
+ (0, import_extrusions2.extrudeLinear)({ height: 0.012 }, expandedPath)
18138
+ );
18139
+ }
17886
18140
  textGeom = (0, import_colors3.colorize)([1, 1, 1], textGeom);
17887
18141
  this.silkscreenGeoms.push(textGeom);
17888
18142
  }
@@ -18727,8 +18981,8 @@ async function convertCircuitJsonTo3dSvg(circuitJson, options = {}) {
18727
18981
  scene.position.sub(center);
18728
18982
  const maxDim = Math.max(size.x, size.y, size.z);
18729
18983
  if (maxDim > 0) {
18730
- const scale = (1 - padding / 100) / maxDim;
18731
- scene.scale.multiplyScalar(scale * 100);
18984
+ const scale2 = (1 - padding / 100) / maxDim;
18985
+ scene.scale.multiplyScalar(scale2 * 100);
18732
18986
  }
18733
18987
  camera.updateProjectionMatrix();
18734
18988
  renderer.render(scene, camera);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tscircuit/3d-viewer",
3
- "version": "0.0.201",
3
+ "version": "0.0.203",
4
4
  "main": "./dist/index.js",
5
5
  "module": "./dist/index.js",
6
6
  "type": "module",
@@ -31,7 +31,7 @@
31
31
  "@jscad/stl-serializer": "^2.1.20",
32
32
  "@react-three/drei": "^9.121.4",
33
33
  "@react-three/fiber": "^8.17.14",
34
- "@tscircuit/core": "^0.0.374",
34
+ "@tscircuit/core": "^0.0.377",
35
35
  "@tscircuit/props": "^0.0.172",
36
36
  "@tscircuit/soup-util": "^0.0.41",
37
37
  "jscad-electronics": "^0.0.27",