@tscircuit/pcb-viewer 1.11.322 → 1.11.324

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 CHANGED
@@ -8161,7 +8161,7 @@ var Drawer = class {
8161
8161
  const drawLines = (angle2) => {
8162
8162
  const sin = Math.sin(angle2);
8163
8163
  const cos = Math.cos(angle2);
8164
- const diag = Math.sqrt(Math.pow(x2 - x1, 2) + Math.pow(y2 - y1, 2));
8164
+ const diag = Math.sqrt((x2 - x1) ** 2 + (y2 - y1) ** 2);
8165
8165
  for (let i = -diag; i <= diag; i += spacing$) {
8166
8166
  ctx.beginPath();
8167
8167
  ctx.moveTo(x1 + i * cos - diag * sin, y1 + i * sin + diag * cos);
@@ -8383,7 +8383,7 @@ var Drawer = class {
8383
8383
  const [x$, y$] = applyToPoint3(this.transform, [x, y]);
8384
8384
  this.applyAperture();
8385
8385
  const ctx = this.getLayerCtx();
8386
- ctx.font = `10px sans-serif`;
8386
+ ctx.font = "10px sans-serif";
8387
8387
  ctx.fillText(text, x$, y$);
8388
8388
  }
8389
8389
  getLayerCtx() {
@@ -8418,9 +8418,9 @@ var Drawer = class {
8418
8418
  ];
8419
8419
  const order = [
8420
8420
  ...DEFAULT_DRAW_ORDER.filter((l) => !layersToShiftToTop.includes(l)),
8421
- ...associatedSilkscreen ? [associatedSilkscreen] : [],
8422
8421
  foregroundLayer,
8423
8422
  ...maskWithCopperLayerForForeground ? [maskWithCopperLayerForForeground] : [],
8423
+ ...associatedSilkscreen ? [associatedSilkscreen] : [],
8424
8424
  "drill"
8425
8425
  ];
8426
8426
  order.forEach((layer, i) => {
@@ -8432,23 +8432,23 @@ var Drawer = class {
8432
8432
  }
8433
8433
  applyAperture() {
8434
8434
  const { transform, aperture } = this;
8435
- let { size, mode, color: color5, fontSize, layer } = aperture;
8435
+ let { size, mode, color: color6, fontSize, layer } = aperture;
8436
8436
  if (!(layer in this.ctxLayerMap)) this.aperture.layer = "other";
8437
8437
  const ctx = this.getLayerCtx();
8438
8438
  if (!ctx) {
8439
8439
  throw new Error(`No context for layer "${this.foregroundLayer}"`);
8440
8440
  }
8441
- if (!color5) color5 = "undefined";
8441
+ if (!color6) color6 = "undefined";
8442
8442
  ctx.lineWidth = scaleOnly(transform, size);
8443
8443
  ctx.lineCap = "round";
8444
8444
  if (mode === "add") {
8445
8445
  ctx.globalCompositeOperation = "source-over";
8446
- let colorString = LAYER_NAME_TO_COLOR[color5.toLowerCase()];
8446
+ let colorString = LAYER_NAME_TO_COLOR[color6.toLowerCase()];
8447
8447
  if (!colorString)
8448
8448
  try {
8449
- colorString = colorParser(color5).rgb().toString();
8449
+ colorString = colorParser(color6).rgb().toString();
8450
8450
  } catch (error) {
8451
- console.warn(`Invalid color format: '${color5}'`);
8451
+ console.warn(`Invalid color format: '${color6}'`);
8452
8452
  colorString = "white";
8453
8453
  }
8454
8454
  ctx.fillStyle = colorString;
@@ -8467,7 +8467,7 @@ var Drawer = class {
8467
8467
  const [x$, y$] = applyToPoint3(this.transform, [x, y]);
8468
8468
  const { size, shape, mode } = this.aperture;
8469
8469
  const size$ = scaleOnly(this.transform, size);
8470
- let { lastPoint } = this;
8470
+ const { lastPoint } = this;
8471
8471
  const lastPoint$ = applyToPoint3(this.transform, lastPoint);
8472
8472
  this.applyAperture();
8473
8473
  const ctx = this.getLayerCtx();
@@ -8698,9 +8698,29 @@ function drawPcbNoteElementsForLayer({
8698
8698
  drawer.drawElements(pcbNoteElements, { layers });
8699
8699
  }
8700
8700
 
8701
+ // src/lib/draw-pcb-panel.ts
8702
+ import { CircuitToCanvasDrawer as CircuitToCanvasDrawer8 } from "circuit-to-canvas";
8703
+ function isPcbPanelElement(element) {
8704
+ return element.type === "pcb_panel";
8705
+ }
8706
+ function drawPcbPanelElements({
8707
+ canvas,
8708
+ elements,
8709
+ layers,
8710
+ realToCanvasMat,
8711
+ drawSoldermask
8712
+ }) {
8713
+ const drawer = new CircuitToCanvasDrawer8(canvas);
8714
+ drawer.realToCanvasMat = realToCanvasMat;
8715
+ const pcbPanelElements = elements.filter(isPcbPanelElement);
8716
+ for (const element of pcbPanelElements) {
8717
+ drawer.drawElements([element], { layers, drawSoldermask });
8718
+ }
8719
+ }
8720
+
8701
8721
  // src/lib/draw-pcb-smtpad.ts
8702
8722
  import {
8703
- CircuitToCanvasDrawer as CircuitToCanvasDrawer8,
8723
+ CircuitToCanvasDrawer as CircuitToCanvasDrawer9,
8704
8724
  DEFAULT_PCB_COLOR_MAP as DEFAULT_PCB_COLOR_MAP3
8705
8725
  } from "circuit-to-canvas";
8706
8726
  import color from "color";
@@ -8759,12 +8779,12 @@ function drawPcbSmtPadElementsForLayer({
8759
8779
  (element) => !highlightedElementIds.has(element.pcb_smtpad_id)
8760
8780
  );
8761
8781
  if (nonHighlightedElements.length > 0) {
8762
- const drawer = new CircuitToCanvasDrawer8(canvas);
8782
+ const drawer = new CircuitToCanvasDrawer9(canvas);
8763
8783
  drawer.realToCanvasMat = realToCanvasMat;
8764
8784
  drawer.drawElements(nonHighlightedElements, { layers: [], drawSoldermask });
8765
8785
  }
8766
8786
  if (highlightedElements.length > 0) {
8767
- const highlightDrawer = new CircuitToCanvasDrawer8(canvas);
8787
+ const highlightDrawer = new CircuitToCanvasDrawer9(canvas);
8768
8788
  highlightDrawer.configure({ colorOverrides: HOVER_COLOR_MAP });
8769
8789
  highlightDrawer.realToCanvasMat = realToCanvasMat;
8770
8790
  highlightDrawer.drawElements(highlightedElements, {
@@ -8774,9 +8794,9 @@ function drawPcbSmtPadElementsForLayer({
8774
8794
  }
8775
8795
  }
8776
8796
 
8777
- // src/lib/draw-plated-hole.ts
8797
+ // src/lib/draw-pcb-trace.ts
8778
8798
  import {
8779
- CircuitToCanvasDrawer as CircuitToCanvasDrawer9,
8799
+ CircuitToCanvasDrawer as CircuitToCanvasDrawer10,
8780
8800
  DEFAULT_PCB_COLOR_MAP as DEFAULT_PCB_COLOR_MAP4
8781
8801
  } from "circuit-to-canvas";
8782
8802
  import color2 from "color";
@@ -8785,7 +8805,74 @@ var HOVER_COLOR_MAP2 = {
8785
8805
  copper: {
8786
8806
  ...DEFAULT_PCB_COLOR_MAP4.copper,
8787
8807
  top: color2(colors_default.board.pad_front).lighten(0.5).toString(),
8788
- bottom: color2(colors_default.board.pad_back).lighten(0.5).toString()
8808
+ bottom: color2(colors_default.board.pad_back).lighten(0.5).toString(),
8809
+ inner1: color2(colors_default.board.copper.in1).lighten(0.5).toString(),
8810
+ inner2: color2(colors_default.board.copper.in2).lighten(0.5).toString(),
8811
+ inner3: color2(colors_default.board.copper.in3).lighten(0.5).toString(),
8812
+ inner4: color2(colors_default.board.copper.in4).lighten(0.5).toString(),
8813
+ inner5: color2(colors_default.board.copper.in5).lighten(0.5).toString(),
8814
+ inner6: color2(colors_default.board.copper.in6).lighten(0.5).toString()
8815
+ }
8816
+ };
8817
+ function isPcbTrace(element) {
8818
+ return element.type === "pcb_trace";
8819
+ }
8820
+ var normalizeCopperLayers = (layers) => layers.map(
8821
+ (layer) => layer.endsWith("_copper") ? layer.replace("_copper", "") : layer
8822
+ );
8823
+ function drawPcbTraceElementsForLayer({
8824
+ canvas,
8825
+ elements,
8826
+ layers,
8827
+ realToCanvasMat,
8828
+ primitives
8829
+ }) {
8830
+ const targetLayers = new Set(normalizeCopperLayers(layers));
8831
+ const traceElements = elements.filter(isPcbTrace).filter(
8832
+ (element) => element.route.some(
8833
+ (segment) => segment.route_type === "wire" && "layer" in segment && targetLayers.has(segment.layer)
8834
+ )
8835
+ );
8836
+ if (traceElements.length === 0) return;
8837
+ const highlightedElementIds = /* @__PURE__ */ new Set();
8838
+ if (primitives) {
8839
+ for (const primitive of primitives) {
8840
+ if ((primitive.is_mouse_over || primitive.is_in_highlighted_net) && primitive._element?.type === "pcb_trace") {
8841
+ highlightedElementIds.add(primitive._element.pcb_trace_id);
8842
+ }
8843
+ }
8844
+ }
8845
+ const highlightedElements = traceElements.filter(
8846
+ (element) => highlightedElementIds.has(element.pcb_trace_id)
8847
+ );
8848
+ const nonHighlightedElements = traceElements.filter(
8849
+ (element) => !highlightedElementIds.has(element.pcb_trace_id)
8850
+ );
8851
+ if (nonHighlightedElements.length > 0) {
8852
+ const drawer = new CircuitToCanvasDrawer10(canvas);
8853
+ drawer.realToCanvasMat = realToCanvasMat;
8854
+ drawer.drawElements(nonHighlightedElements, { layers });
8855
+ }
8856
+ if (highlightedElements.length > 0) {
8857
+ const highlightDrawer = new CircuitToCanvasDrawer10(canvas);
8858
+ highlightDrawer.configure({ colorOverrides: HOVER_COLOR_MAP2 });
8859
+ highlightDrawer.realToCanvasMat = realToCanvasMat;
8860
+ highlightDrawer.drawElements(highlightedElements, { layers });
8861
+ }
8862
+ }
8863
+
8864
+ // src/lib/draw-plated-hole.ts
8865
+ import {
8866
+ CircuitToCanvasDrawer as CircuitToCanvasDrawer11,
8867
+ DEFAULT_PCB_COLOR_MAP as DEFAULT_PCB_COLOR_MAP5
8868
+ } from "circuit-to-canvas";
8869
+ import color3 from "color";
8870
+ var HOVER_COLOR_MAP3 = {
8871
+ ...DEFAULT_PCB_COLOR_MAP5,
8872
+ copper: {
8873
+ ...DEFAULT_PCB_COLOR_MAP5.copper,
8874
+ top: color3(colors_default.board.pad_front).lighten(0.5).toString(),
8875
+ bottom: color3(colors_default.board.pad_back).lighten(0.5).toString()
8789
8876
  }
8790
8877
  };
8791
8878
  function isPlatedHole(element) {
@@ -8816,13 +8903,13 @@ function drawPlatedHolePads({
8816
8903
  (element) => !highlightedElementIds.has(element.pcb_plated_hole_id)
8817
8904
  );
8818
8905
  if (nonHighlightedElements.length > 0) {
8819
- const drawer = new CircuitToCanvasDrawer9(canvas);
8906
+ const drawer = new CircuitToCanvasDrawer11(canvas);
8820
8907
  drawer.realToCanvasMat = realToCanvasMat;
8821
8908
  drawer.drawElements(nonHighlightedElements, { layers, drawSoldermask });
8822
8909
  }
8823
8910
  if (highlightedElements.length > 0) {
8824
- const highlightDrawer = new CircuitToCanvasDrawer9(canvas);
8825
- highlightDrawer.configure({ colorOverrides: HOVER_COLOR_MAP2 });
8911
+ const highlightDrawer = new CircuitToCanvasDrawer11(canvas);
8912
+ highlightDrawer.configure({ colorOverrides: HOVER_COLOR_MAP3 });
8826
8913
  highlightDrawer.realToCanvasMat = realToCanvasMat;
8827
8914
  highlightDrawer.drawElements(highlightedElements, {
8828
8915
  layers,
@@ -8947,11 +9034,11 @@ var convertTextToLines = (text) => {
8947
9034
  };
8948
9035
 
8949
9036
  // src/lib/draw-primitives.ts
8950
- import color3 from "color";
9037
+ import color4 from "color";
8951
9038
  function getColor(primitive) {
8952
9039
  const explicitColor = primitive.color;
8953
9040
  const baseColorString = explicitColor ?? LAYER_NAME_TO_COLOR[primitive.layer];
8954
- let c = color3(baseColorString);
9041
+ let c = color4(baseColorString);
8955
9042
  if (primitive._element?.type === "pcb_copper_pour") {
8956
9043
  c = c.alpha(0.7);
8957
9044
  }
@@ -9226,11 +9313,11 @@ var drawPrimitives = (drawer, primitives) => {
9226
9313
 
9227
9314
  // src/lib/draw-silkscreen.ts
9228
9315
  import {
9229
- CircuitToCanvasDrawer as CircuitToCanvasDrawer10,
9230
- DEFAULT_PCB_COLOR_MAP as DEFAULT_PCB_COLOR_MAP5
9316
+ CircuitToCanvasDrawer as CircuitToCanvasDrawer12,
9317
+ DEFAULT_PCB_COLOR_MAP as DEFAULT_PCB_COLOR_MAP6
9231
9318
  } from "circuit-to-canvas";
9232
9319
  var PCB_VIEWER_COLOR_MAP2 = {
9233
- ...DEFAULT_PCB_COLOR_MAP5,
9320
+ ...DEFAULT_PCB_COLOR_MAP6,
9234
9321
  silkscreen: {
9235
9322
  top: colors_default.board.f_silks,
9236
9323
  bottom: colors_default.board.b_silks
@@ -9245,7 +9332,7 @@ function drawSilkscreenElementsForLayer({
9245
9332
  layers,
9246
9333
  realToCanvasMat
9247
9334
  }) {
9248
- const drawer = new CircuitToCanvasDrawer10(canvas);
9335
+ const drawer = new CircuitToCanvasDrawer12(canvas);
9249
9336
  drawer.configure({
9250
9337
  colorOverrides: PCB_VIEWER_COLOR_MAP2
9251
9338
  });
@@ -9256,16 +9343,16 @@ function drawSilkscreenElementsForLayer({
9256
9343
 
9257
9344
  // src/lib/draw-via.ts
9258
9345
  import {
9259
- DEFAULT_PCB_COLOR_MAP as DEFAULT_PCB_COLOR_MAP6,
9260
- CircuitToCanvasDrawer as CircuitToCanvasDrawer11
9346
+ DEFAULT_PCB_COLOR_MAP as DEFAULT_PCB_COLOR_MAP7,
9347
+ CircuitToCanvasDrawer as CircuitToCanvasDrawer13
9261
9348
  } from "circuit-to-canvas";
9262
- import color4 from "color";
9263
- var HOVER_COLOR_MAP3 = {
9264
- ...DEFAULT_PCB_COLOR_MAP6,
9349
+ import color5 from "color";
9350
+ var HOVER_COLOR_MAP4 = {
9351
+ ...DEFAULT_PCB_COLOR_MAP7,
9265
9352
  copper: {
9266
- ...DEFAULT_PCB_COLOR_MAP6.copper,
9267
- top: color4(colors_default.board.pad_front).lighten(0.5).toString(),
9268
- bottom: color4(colors_default.board.pad_back).lighten(0.5).toString()
9353
+ ...DEFAULT_PCB_COLOR_MAP7.copper,
9354
+ top: color5(colors_default.board.pad_front).lighten(0.5).toString(),
9355
+ bottom: color5(colors_default.board.pad_back).lighten(0.5).toString()
9269
9356
  }
9270
9357
  };
9271
9358
  function isPcbVia(element) {
@@ -9297,13 +9384,13 @@ function drawPcbViaElementsForLayer({
9297
9384
  (element) => !highlightedElementIds.has(element.pcb_via_id)
9298
9385
  );
9299
9386
  if (nonHighlightedElements.length > 0) {
9300
- const drawer = new CircuitToCanvasDrawer11(canvas);
9387
+ const drawer = new CircuitToCanvasDrawer13(canvas);
9301
9388
  drawer.realToCanvasMat = realToCanvasMat;
9302
9389
  drawer.drawElements(nonHighlightedElements, { layers });
9303
9390
  }
9304
9391
  if (highlightedElements.length > 0) {
9305
- const highlightDrawer = new CircuitToCanvasDrawer11(canvas);
9306
- highlightDrawer.configure({ colorOverrides: HOVER_COLOR_MAP3 });
9392
+ const highlightDrawer = new CircuitToCanvasDrawer13(canvas);
9393
+ highlightDrawer.configure({ colorOverrides: HOVER_COLOR_MAP4 });
9307
9394
  highlightDrawer.realToCanvasMat = realToCanvasMat;
9308
9395
  highlightDrawer.drawElements(highlightedElements, { layers });
9309
9396
  }
@@ -9312,39 +9399,15 @@ function drawPcbViaElementsForLayer({
9312
9399
  // src/components/CanvasPrimitiveRenderer.tsx
9313
9400
  import { useEffect as useEffect4, useRef as useRef2 } from "react";
9314
9401
  import { SuperGrid, toMMSI } from "react-supergrid";
9315
-
9316
- // src/lib/draw-pcb-panel.ts
9317
- import { CircuitToCanvasDrawer as CircuitToCanvasDrawer12 } from "circuit-to-canvas";
9318
- function isPcbPanelElement(element) {
9319
- return element.type === "pcb_panel";
9320
- }
9321
- function drawPcbPanelElements({
9322
- canvas,
9323
- elements,
9324
- layers,
9325
- realToCanvasMat,
9326
- drawSoldermask
9327
- }) {
9328
- const drawer = new CircuitToCanvasDrawer12(canvas);
9329
- drawer.realToCanvasMat = realToCanvasMat;
9330
- const pcbPanelElements = elements.filter(isPcbPanelElement);
9331
- for (const element of pcbPanelElements) {
9332
- drawer.drawElements([element], { layers, drawSoldermask });
9333
- }
9334
- }
9335
-
9336
- // src/components/CanvasPrimitiveRenderer.tsx
9337
9402
  import { jsx as jsx3, jsxs } from "react/jsx-runtime";
9338
9403
  var orderedLayers = [
9339
9404
  "board",
9340
- "bottom_silkscreen",
9341
9405
  "bottom",
9342
9406
  "soldermask_bottom",
9343
9407
  "top",
9344
9408
  "soldermask_top",
9345
9409
  "soldermask_with_copper_bottom",
9346
9410
  "soldermask_with_copper_top",
9347
- "top_silkscreen",
9348
9411
  "top_fabrication",
9349
9412
  "bottom_fabrication",
9350
9413
  "inner1",
@@ -9357,6 +9420,8 @@ var orderedLayers = [
9357
9420
  "edge_cuts",
9358
9421
  "bottom_notes",
9359
9422
  "top_notes",
9423
+ "top_silkscreen",
9424
+ "bottom_silkscreen",
9360
9425
  "other"
9361
9426
  ];
9362
9427
  var CanvasPrimitiveRenderer = ({
@@ -9387,7 +9452,7 @@ var CanvasPrimitiveRenderer = ({
9387
9452
  if (transform) drawer.transform = transform;
9388
9453
  drawer.clear();
9389
9454
  drawer.foregroundLayer = selectedLayer;
9390
- const filteredPrimitives = primitives.filter((p) => isShowingSolderMask || !p.layer?.includes("soldermask")).filter((p) => p.layer !== "board").filter((p) => p._element?.type !== "pcb_smtpad").filter((p) => p._element?.type !== "pcb_plated_hole").filter((p) => p._element?.type !== "pcb_via");
9455
+ const filteredPrimitives = primitives.filter((p) => isShowingSolderMask || !p.layer?.includes("soldermask")).filter((p) => p.layer !== "board").filter((p) => p._element?.type !== "pcb_smtpad").filter((p) => p._element?.type !== "pcb_plated_hole").filter((p) => p._element?.type !== "pcb_via").filter((p) => p._element?.type !== "pcb_trace");
9391
9456
  drawPrimitives(drawer, filteredPrimitives);
9392
9457
  if (transform) {
9393
9458
  const topCanvas = canvasRefs.current.top;
@@ -9419,80 +9484,47 @@ var CanvasPrimitiveRenderer = ({
9419
9484
  });
9420
9485
  }
9421
9486
  if (topCanvas) {
9422
- drawPcbSmtPadElementsForLayer({
9487
+ drawCopperPourElementsForLayer({
9423
9488
  canvas: topCanvas,
9424
9489
  elements,
9425
9490
  layers: ["top_copper"],
9426
- realToCanvasMat: transform,
9427
- primitives,
9428
- drawSoldermask: isShowingSolderMask
9491
+ realToCanvasMat: transform
9429
9492
  });
9430
9493
  }
9431
9494
  if (bottomCanvas) {
9432
- drawPcbSmtPadElementsForLayer({
9495
+ drawCopperPourElementsForLayer({
9433
9496
  canvas: bottomCanvas,
9434
9497
  elements,
9435
9498
  layers: ["bottom_copper"],
9436
- realToCanvasMat: transform,
9437
- primitives,
9438
- drawSoldermask: isShowingSolderMask
9439
- });
9440
- }
9441
- if (inner1Canvas) {
9442
- drawPcbSmtPadElementsForLayer({
9443
- canvas: inner1Canvas,
9444
- elements,
9445
- layers: ["inner1_copper"],
9446
- realToCanvasMat: transform,
9447
- primitives,
9448
- drawSoldermask: isShowingSolderMask
9449
- });
9450
- }
9451
- if (inner2Canvas) {
9452
- drawPcbSmtPadElementsForLayer({
9453
- canvas: inner2Canvas,
9454
- elements,
9455
- layers: ["inner2_copper"],
9456
- realToCanvasMat: transform,
9457
- primitives,
9458
- drawSoldermask: isShowingSolderMask
9459
- });
9460
- }
9461
- if (inner3Canvas) {
9462
- drawPcbSmtPadElementsForLayer({
9463
- canvas: inner3Canvas,
9464
- elements,
9465
- layers: ["inner3_copper"],
9466
- realToCanvasMat: transform,
9467
- primitives,
9468
- drawSoldermask: isShowingSolderMask
9469
- });
9470
- }
9471
- if (inner4Canvas) {
9472
- drawPcbSmtPadElementsForLayer({
9473
- canvas: inner4Canvas,
9474
- elements,
9475
- layers: ["inner4_copper"],
9476
- realToCanvasMat: transform,
9477
- primitives,
9478
- drawSoldermask: isShowingSolderMask
9499
+ realToCanvasMat: transform
9479
9500
  });
9480
9501
  }
9481
- if (inner5Canvas) {
9482
- drawPcbSmtPadElementsForLayer({
9483
- canvas: inner5Canvas,
9502
+ const copperLayers = [
9503
+ { canvas: topCanvas, copperLayer: "top_copper" },
9504
+ { canvas: bottomCanvas, copperLayer: "bottom_copper" },
9505
+ { canvas: inner1Canvas, copperLayer: "inner1_copper" },
9506
+ { canvas: inner2Canvas, copperLayer: "inner2_copper" },
9507
+ { canvas: inner3Canvas, copperLayer: "inner3_copper" },
9508
+ { canvas: inner4Canvas, copperLayer: "inner4_copper" },
9509
+ { canvas: inner5Canvas, copperLayer: "inner5_copper" },
9510
+ { canvas: inner6Canvas, copperLayer: "inner6_copper" }
9511
+ ];
9512
+ for (const { canvas, copperLayer } of copperLayers) {
9513
+ if (!canvas) continue;
9514
+ drawPcbTraceElementsForLayer({
9515
+ canvas,
9484
9516
  elements,
9485
- layers: ["inner5_copper"],
9517
+ layers: [copperLayer],
9486
9518
  realToCanvasMat: transform,
9487
- primitives,
9488
- drawSoldermask: isShowingSolderMask
9519
+ primitives
9489
9520
  });
9490
9521
  }
9491
- if (inner6Canvas) {
9522
+ for (const { canvas, copperLayer } of copperLayers) {
9523
+ if (!canvas) continue;
9492
9524
  drawPcbSmtPadElementsForLayer({
9493
- canvas: inner6Canvas,
9525
+ canvas,
9494
9526
  elements,
9495
- layers: ["inner6_copper"],
9527
+ layers: [copperLayer],
9496
9528
  realToCanvasMat: transform,
9497
9529
  primitives,
9498
9530
  drawSoldermask: isShowingSolderMask
@@ -9516,22 +9548,6 @@ var CanvasPrimitiveRenderer = ({
9516
9548
  primitives
9517
9549
  });
9518
9550
  }
9519
- if (topCanvas) {
9520
- drawCopperPourElementsForLayer({
9521
- canvas: topCanvas,
9522
- elements,
9523
- layers: ["top_copper"],
9524
- realToCanvasMat: transform
9525
- });
9526
- }
9527
- if (bottomCanvas) {
9528
- drawCopperPourElementsForLayer({
9529
- canvas: bottomCanvas,
9530
- elements,
9531
- layers: ["bottom_copper"],
9532
- realToCanvasMat: transform
9533
- });
9534
- }
9535
9551
  const topSilkscreenCanvas = canvasRefs.current.top_silkscreen;
9536
9552
  if (topSilkscreenCanvas) {
9537
9553
  drawSilkscreenElementsForLayer({
@@ -9622,19 +9638,16 @@ var CanvasPrimitiveRenderer = ({
9622
9638
  realToCanvasMat: transform
9623
9639
  });
9624
9640
  }
9625
- if (topCanvas) {
9626
- drawPcbKeepoutElementsForLayer({
9627
- canvas: topCanvas,
9628
- elements,
9629
- layers: ["top"],
9630
- realToCanvasMat: transform
9631
- });
9632
- }
9633
- if (bottomCanvas) {
9641
+ const keepoutLayers = [
9642
+ { canvas: topCanvas, layer: "top" },
9643
+ { canvas: bottomCanvas, layer: "bottom" }
9644
+ ];
9645
+ for (const { canvas, layer } of keepoutLayers) {
9646
+ if (!canvas) continue;
9634
9647
  drawPcbKeepoutElementsForLayer({
9635
- canvas: bottomCanvas,
9648
+ canvas,
9636
9649
  elements,
9637
- layers: ["bottom"],
9650
+ layers: [layer],
9638
9651
  realToCanvasMat: transform
9639
9652
  });
9640
9653
  }
@@ -12230,7 +12243,7 @@ var HighlightedPrimitiveBoxWithText = ({
12230
12243
  ];
12231
12244
  const si = primitive.same_space_index ?? 0;
12232
12245
  const sip = 26;
12233
- const color5 = layerColorHightlightMap[primitive?._element?.layer] ?? "red";
12246
+ const color6 = layerColorHightlightMap[primitive?._element?.layer] ?? "red";
12234
12247
  let rotation = 0;
12235
12248
  if (primitiveElement.type === "pcb_smtpad" && primitiveElement?.shape === "rotated_rect") {
12236
12249
  rotation = primitiveElement?.ccw_rotation ?? 0;
@@ -12252,7 +12265,7 @@ var HighlightedPrimitiveBoxWithText = ({
12252
12265
  position: "absolute",
12253
12266
  left: mousePos.x,
12254
12267
  top: yOffset,
12255
- color: color5,
12268
+ color: color6,
12256
12269
  pointerEvents: "none",
12257
12270
  transform: "translateX(-50%)"
12258
12271
  },
@@ -12292,7 +12305,7 @@ var HighlightedPrimitiveBoxWithText = ({
12292
12305
  top: y - h / 2 - 8,
12293
12306
  width: w + 16,
12294
12307
  height: h + 16,
12295
- color: color5,
12308
+ color: color6,
12296
12309
  transform: `rotate(${-rotation}deg)`,
12297
12310
  transformOrigin: "center center"
12298
12311
  },
@@ -12308,7 +12321,7 @@ var HighlightedPrimitiveBoxWithText = ({
12308
12321
  height: finalState ? `calc(100% + ${sip * 2 * si}px)` : "100%",
12309
12322
  marginLeft: finalState ? `${-sip * si}px` : 0,
12310
12323
  marginTop: finalState ? `${-sip * si}px` : 0,
12311
- border: `1px solid ${color5}`,
12324
+ border: `1px solid ${color6}`,
12312
12325
  opacity: finalState ? 1 : si === 0 ? 1 : 0,
12313
12326
  transition: "width 0.2s, height 0.2s, margin-left 0.2s, margin-top 0.2s, opacity 0.2s"
12314
12327
  },
@@ -13673,7 +13686,7 @@ import { css as css3 } from "@emotion/css";
13673
13686
  // package.json
13674
13687
  var package_default = {
13675
13688
  name: "@tscircuit/pcb-viewer",
13676
- version: "1.11.321",
13689
+ version: "1.11.323",
13677
13690
  main: "dist/index.js",
13678
13691
  type: "module",
13679
13692
  repository: "tscircuit/pcb-viewer",
@@ -13710,7 +13723,7 @@ var package_default = {
13710
13723
  "react-cosmos-plugin-vite": "7.0.0-beta.0",
13711
13724
  "react-dom": "19.1.0",
13712
13725
  "react-use": "^17.4.0",
13713
- tscircuit: "^0.0.1173",
13726
+ tscircuit: "^0.0.1212",
13714
13727
  tsup: "^8.0.2",
13715
13728
  "type-fest": "^3.0.0",
13716
13729
  typescript: "^5.4.4",
@@ -13727,7 +13740,7 @@ var package_default = {
13727
13740
  "@tscircuit/math-utils": "^0.0.29",
13728
13741
  "@vitejs/plugin-react": "^5.0.2",
13729
13742
  "circuit-json": "^0.0.356",
13730
- "circuit-to-canvas": "^0.0.58",
13743
+ "circuit-to-canvas": "^0.0.60",
13731
13744
  "circuit-to-svg": "^0.0.271",
13732
13745
  color: "^4.2.3",
13733
13746
  "react-supergrid": "^1.0.10",