@tscircuit/pcb-viewer 1.11.391 → 1.11.393

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
@@ -4852,23 +4852,23 @@ var Drawer = class {
4852
4852
  }
4853
4853
  applyAperture() {
4854
4854
  const { transform, aperture } = this;
4855
- let { size, mode, color: color7, fontSize, layer } = aperture;
4855
+ let { size, mode, color: color8, fontSize, layer } = aperture;
4856
4856
  if (!(layer in this.ctxLayerMap)) this.aperture.layer = "other";
4857
4857
  const ctx = this.getLayerCtx();
4858
4858
  if (!ctx) {
4859
4859
  throw new Error(`No context for layer "${this.foregroundLayer}"`);
4860
4860
  }
4861
- if (!color7) color7 = "undefined";
4861
+ if (!color8) color8 = "undefined";
4862
4862
  ctx.lineWidth = scaleOnly(transform, size);
4863
4863
  ctx.lineCap = "round";
4864
4864
  if (mode === "add") {
4865
4865
  ctx.globalCompositeOperation = "source-over";
4866
- let colorString = LAYER_NAME_TO_COLOR[color7.toLowerCase()];
4866
+ let colorString = LAYER_NAME_TO_COLOR[color8.toLowerCase()];
4867
4867
  if (!colorString)
4868
4868
  try {
4869
- colorString = colorParser(color7).rgb().toString();
4869
+ colorString = colorParser(color8).rgb().toString();
4870
4870
  } catch (error) {
4871
- console.warn(`Invalid color format: '${color7}'`);
4871
+ console.warn(`Invalid color format: '${color8}'`);
4872
4872
  colorString = "white";
4873
4873
  }
4874
4874
  ctx.fillStyle = colorString;
@@ -5183,20 +5183,41 @@ function drawPcbCutoutElementsForLayer({
5183
5183
 
5184
5184
  // src/lib/draw-pcb-keepout.ts
5185
5185
  import { CircuitToCanvasDrawer as CircuitToCanvasDrawer8 } from "circuit-to-canvas";
5186
+ import color from "color";
5186
5187
  function isPcbKeepout(element) {
5187
5188
  return element.type === "pcb_keepout";
5188
5189
  }
5190
+ function getPcbKeepoutElementsForLayer({
5191
+ elements,
5192
+ layer
5193
+ }) {
5194
+ return elements.filter(isPcbKeepout).filter((keepout) => keepout.layers.includes(layer));
5195
+ }
5196
+ function getPcbKeepoutColorForLayer(layer) {
5197
+ return color(LAYER_NAME_TO_COLOR[layer]).lighten(0.4).hex();
5198
+ }
5189
5199
  function drawPcbKeepoutElementsForLayer({
5190
5200
  canvas,
5191
5201
  elements,
5192
- layers,
5202
+ layer,
5193
5203
  realToCanvasMat
5194
5204
  }) {
5195
- const keepoutElements = elements.filter(isPcbKeepout);
5205
+ const keepoutElements = getPcbKeepoutElementsForLayer({ elements, layer });
5196
5206
  if (keepoutElements.length === 0) return;
5197
5207
  const drawer = new CircuitToCanvasDrawer8(canvas);
5208
+ const keepoutColor = getPcbKeepoutColorForLayer(layer);
5209
+ drawer.configure({
5210
+ colorOverrides: {
5211
+ keepout: {
5212
+ top: keepoutColor,
5213
+ bottom: keepoutColor
5214
+ }
5215
+ }
5216
+ });
5198
5217
  drawer.realToCanvasMat = realToCanvasMat;
5199
- drawer.drawElements(keepoutElements, { layers: [] });
5218
+ drawer.drawElements(keepoutElements, {
5219
+ layers: [getCopperRenderLayer(layer)]
5220
+ });
5200
5221
  }
5201
5222
 
5202
5223
  // src/lib/draw-pcb-note.ts
@@ -5243,21 +5264,21 @@ import {
5243
5264
  CircuitToCanvasDrawer as CircuitToCanvasDrawer11,
5244
5265
  DEFAULT_PCB_COLOR_MAP as DEFAULT_PCB_COLOR_MAP4
5245
5266
  } from "circuit-to-canvas";
5246
- import color from "color";
5267
+ import color2 from "color";
5247
5268
  var HOVER_COLOR_MAP = {
5248
5269
  ...DEFAULT_PCB_COLOR_MAP4,
5249
5270
  copper: {
5250
5271
  ...DEFAULT_PCB_COLOR_MAP4.copper,
5251
- top: color(colors_default.board.pad_front).lighten(0.5).toString(),
5252
- bottom: color(colors_default.board.pad_back).lighten(0.5).toString(),
5253
- inner1: color(colors_default.board.copper.in1).lighten(0.5).toString(),
5254
- inner2: color(colors_default.board.copper.in2).lighten(0.5).toString(),
5255
- inner3: color(colors_default.board.copper.in3).lighten(0.5).toString(),
5256
- inner4: color(colors_default.board.copper.in4).lighten(0.5).toString(),
5257
- inner5: color(colors_default.board.copper.in5).lighten(0.5).toString(),
5258
- inner6: color(colors_default.board.copper.in6).lighten(0.5).toString(),
5259
- inner7: color(colors_default.board.copper.in7).lighten(0.5).toString(),
5260
- inner8: color(colors_default.board.copper.in8).lighten(0.5).toString()
5272
+ top: color2(colors_default.board.pad_front).lighten(0.5).toString(),
5273
+ bottom: color2(colors_default.board.pad_back).lighten(0.5).toString(),
5274
+ inner1: color2(colors_default.board.copper.in1).lighten(0.5).toString(),
5275
+ inner2: color2(colors_default.board.copper.in2).lighten(0.5).toString(),
5276
+ inner3: color2(colors_default.board.copper.in3).lighten(0.5).toString(),
5277
+ inner4: color2(colors_default.board.copper.in4).lighten(0.5).toString(),
5278
+ inner5: color2(colors_default.board.copper.in5).lighten(0.5).toString(),
5279
+ inner6: color2(colors_default.board.copper.in6).lighten(0.5).toString(),
5280
+ inner7: color2(colors_default.board.copper.in7).lighten(0.5).toString(),
5281
+ inner8: color2(colors_default.board.copper.in8).lighten(0.5).toString()
5261
5282
  }
5262
5283
  };
5263
5284
  function isPcbSmtPad(element) {
@@ -5309,13 +5330,13 @@ import {
5309
5330
  CircuitToCanvasDrawer as CircuitToCanvasDrawer12,
5310
5331
  DEFAULT_PCB_COLOR_MAP as DEFAULT_PCB_COLOR_MAP5
5311
5332
  } from "circuit-to-canvas";
5312
- import color2 from "color";
5333
+ import color3 from "color";
5313
5334
  var HOVER_COLOR_MAP2 = {
5314
5335
  ...DEFAULT_PCB_COLOR_MAP5,
5315
5336
  copper: Object.fromEntries(
5316
5337
  Object.entries(DEFAULT_PCB_COLOR_MAP5.copper).map(([layer, layerColor]) => [
5317
5338
  layer,
5318
- color2(layerColor).lighten(0.5).toString()
5339
+ color3(layerColor).lighten(0.5).toString()
5319
5340
  ])
5320
5341
  )
5321
5342
  };
@@ -5418,21 +5439,21 @@ import {
5418
5439
  CircuitToCanvasDrawer as CircuitToCanvasDrawer13,
5419
5440
  DEFAULT_PCB_COLOR_MAP as DEFAULT_PCB_COLOR_MAP6
5420
5441
  } from "circuit-to-canvas";
5421
- import color3 from "color";
5442
+ import color4 from "color";
5422
5443
  var HOVER_COLOR_MAP3 = {
5423
5444
  ...DEFAULT_PCB_COLOR_MAP6,
5424
5445
  copper: {
5425
5446
  ...DEFAULT_PCB_COLOR_MAP6.copper,
5426
- top: color3(colors_default.board.pad_front).lighten(0.5).toString(),
5427
- bottom: color3(colors_default.board.pad_back).lighten(0.5).toString(),
5428
- inner1: color3(colors_default.board.copper.in1).lighten(0.5).toString(),
5429
- inner2: color3(colors_default.board.copper.in2).lighten(0.5).toString(),
5430
- inner3: color3(colors_default.board.copper.in3).lighten(0.5).toString(),
5431
- inner4: color3(colors_default.board.copper.in4).lighten(0.5).toString(),
5432
- inner5: color3(colors_default.board.copper.in5).lighten(0.5).toString(),
5433
- inner6: color3(colors_default.board.copper.in6).lighten(0.5).toString(),
5434
- inner7: color3(colors_default.board.copper.in7).lighten(0.5).toString(),
5435
- inner8: color3(colors_default.board.copper.in8).lighten(0.5).toString()
5447
+ top: color4(colors_default.board.pad_front).lighten(0.5).toString(),
5448
+ bottom: color4(colors_default.board.pad_back).lighten(0.5).toString(),
5449
+ inner1: color4(colors_default.board.copper.in1).lighten(0.5).toString(),
5450
+ inner2: color4(colors_default.board.copper.in2).lighten(0.5).toString(),
5451
+ inner3: color4(colors_default.board.copper.in3).lighten(0.5).toString(),
5452
+ inner4: color4(colors_default.board.copper.in4).lighten(0.5).toString(),
5453
+ inner5: color4(colors_default.board.copper.in5).lighten(0.5).toString(),
5454
+ inner6: color4(colors_default.board.copper.in6).lighten(0.5).toString(),
5455
+ inner7: color4(colors_default.board.copper.in7).lighten(0.5).toString(),
5456
+ inner8: color4(colors_default.board.copper.in8).lighten(0.5).toString()
5436
5457
  }
5437
5458
  };
5438
5459
  function isPlatedHole(element) {
@@ -5594,11 +5615,11 @@ var convertTextToLines = (text) => {
5594
5615
  };
5595
5616
 
5596
5617
  // src/lib/draw-primitives.ts
5597
- import color4 from "color";
5618
+ import color5 from "color";
5598
5619
  function getColor(primitive) {
5599
5620
  const explicitColor = primitive.color;
5600
5621
  const baseColorString = explicitColor ?? LAYER_NAME_TO_COLOR[primitive.layer];
5601
- let c = color4(baseColorString);
5622
+ let c = color5(baseColorString);
5602
5623
  if (primitive._element?.type === "pcb_copper_pour") {
5603
5624
  c = c.alpha(0.7);
5604
5625
  }
@@ -5906,26 +5927,26 @@ import {
5906
5927
  CircuitToCanvasDrawer as CircuitToCanvasDrawer15,
5907
5928
  DEFAULT_PCB_COLOR_MAP as DEFAULT_PCB_COLOR_MAP8
5908
5929
  } from "circuit-to-canvas";
5909
- import color5 from "color";
5930
+ import color6 from "color";
5910
5931
  var HOVER_SOLDERMASK_COLOR_MAP = {
5911
5932
  ...DEFAULT_PCB_COLOR_MAP8,
5912
5933
  copper: {
5913
5934
  ...DEFAULT_PCB_COLOR_MAP8.copper,
5914
- top: color5(colors_default.board.pad_front).lighten(0.5).toString(),
5915
- bottom: color5(colors_default.board.pad_back).lighten(0.5).toString(),
5916
- inner1: color5(colors_default.board.copper.in1).lighten(0.5).toString(),
5917
- inner2: color5(colors_default.board.copper.in2).lighten(0.5).toString(),
5918
- inner3: color5(colors_default.board.copper.in3).lighten(0.5).toString(),
5919
- inner4: color5(colors_default.board.copper.in4).lighten(0.5).toString(),
5920
- inner5: color5(colors_default.board.copper.in5).lighten(0.5).toString(),
5921
- inner6: color5(colors_default.board.copper.in6).lighten(0.5).toString(),
5922
- inner7: color5(colors_default.board.copper.in7).lighten(0.5).toString(),
5923
- inner8: color5(colors_default.board.copper.in8).lighten(0.5).toString()
5935
+ top: color6(colors_default.board.pad_front).lighten(0.5).toString(),
5936
+ bottom: color6(colors_default.board.pad_back).lighten(0.5).toString(),
5937
+ inner1: color6(colors_default.board.copper.in1).lighten(0.5).toString(),
5938
+ inner2: color6(colors_default.board.copper.in2).lighten(0.5).toString(),
5939
+ inner3: color6(colors_default.board.copper.in3).lighten(0.5).toString(),
5940
+ inner4: color6(colors_default.board.copper.in4).lighten(0.5).toString(),
5941
+ inner5: color6(colors_default.board.copper.in5).lighten(0.5).toString(),
5942
+ inner6: color6(colors_default.board.copper.in6).lighten(0.5).toString(),
5943
+ inner7: color6(colors_default.board.copper.in7).lighten(0.5).toString(),
5944
+ inner8: color6(colors_default.board.copper.in8).lighten(0.5).toString()
5924
5945
  },
5925
5946
  soldermask: {
5926
5947
  ...DEFAULT_PCB_COLOR_MAP8.soldermask,
5927
- top: color5(colors_default.board.soldermask.top).lighten(0.35).toString(),
5928
- bottom: color5(colors_default.board.soldermask.bottom).lighten(0.35).toString()
5948
+ top: color6(colors_default.board.soldermask.top).lighten(0.35).toString(),
5949
+ bottom: color6(colors_default.board.soldermask.bottom).lighten(0.35).toString()
5929
5950
  }
5930
5951
  };
5931
5952
  function drawSoldermaskElementsForLayer({
@@ -6006,21 +6027,21 @@ import {
6006
6027
  DEFAULT_PCB_COLOR_MAP as DEFAULT_PCB_COLOR_MAP9,
6007
6028
  CircuitToCanvasDrawer as CircuitToCanvasDrawer16
6008
6029
  } from "circuit-to-canvas";
6009
- import color6 from "color";
6030
+ import color7 from "color";
6010
6031
  var HOVER_COLOR_MAP4 = {
6011
6032
  ...DEFAULT_PCB_COLOR_MAP9,
6012
6033
  copper: {
6013
6034
  ...DEFAULT_PCB_COLOR_MAP9.copper,
6014
- top: color6(colors_default.board.pad_front).lighten(0.5).toString(),
6015
- bottom: color6(colors_default.board.pad_back).lighten(0.5).toString(),
6016
- inner1: color6(colors_default.board.copper.in1).lighten(0.5).toString(),
6017
- inner2: color6(colors_default.board.copper.in2).lighten(0.5).toString(),
6018
- inner3: color6(colors_default.board.copper.in3).lighten(0.5).toString(),
6019
- inner4: color6(colors_default.board.copper.in4).lighten(0.5).toString(),
6020
- inner5: color6(colors_default.board.copper.in5).lighten(0.5).toString(),
6021
- inner6: color6(colors_default.board.copper.in6).lighten(0.5).toString(),
6022
- inner7: color6(colors_default.board.copper.in7).lighten(0.5).toString(),
6023
- inner8: color6(colors_default.board.copper.in8).lighten(0.5).toString()
6035
+ top: color7(colors_default.board.pad_front).lighten(0.5).toString(),
6036
+ bottom: color7(colors_default.board.pad_back).lighten(0.5).toString(),
6037
+ inner1: color7(colors_default.board.copper.in1).lighten(0.5).toString(),
6038
+ inner2: color7(colors_default.board.copper.in2).lighten(0.5).toString(),
6039
+ inner3: color7(colors_default.board.copper.in3).lighten(0.5).toString(),
6040
+ inner4: color7(colors_default.board.copper.in4).lighten(0.5).toString(),
6041
+ inner5: color7(colors_default.board.copper.in5).lighten(0.5).toString(),
6042
+ inner6: color7(colors_default.board.copper.in6).lighten(0.5).toString(),
6043
+ inner7: color7(colors_default.board.copper.in7).lighten(0.5).toString(),
6044
+ inner8: color7(colors_default.board.copper.in8).lighten(0.5).toString()
6024
6045
  }
6025
6046
  };
6026
6047
  function isPcbVia(element) {
@@ -6068,6 +6089,22 @@ function drawPcbViaElementsForLayer({
6068
6089
  }
6069
6090
  }
6070
6091
 
6092
+ // src/lib/get-primitives-for-drawer.ts
6093
+ var getPrimitivesForDrawer = ({
6094
+ primitives,
6095
+ isShowingSolderMask,
6096
+ isShowingSilkscreen,
6097
+ isShowingFabricationNotes
6098
+ }) => primitives.filter(
6099
+ (primitive) => isShowingSolderMask || !primitive.layer?.includes("soldermask")
6100
+ ).filter(
6101
+ (primitive) => isShowingSilkscreen || !primitive.layer?.includes("silkscreen")
6102
+ ).filter(
6103
+ (primitive) => isShowingFabricationNotes || !primitive.layer?.includes("fabrication")
6104
+ ).filter((primitive) => primitive.layer !== "board").filter((primitive) => primitive._element?.type !== "pcb_smtpad").filter(
6105
+ (primitive) => primitive._element?.type !== "pcb_plated_hole" || primitive.layer === "drill"
6106
+ ).filter((primitive) => primitive._element?.type !== "pcb_via").filter((primitive) => primitive._element?.type !== "pcb_trace").filter((primitive) => primitive._element?.type !== "pcb_copper_text");
6107
+
6071
6108
  // src/components/CanvasPrimitiveRenderer.tsx
6072
6109
  import { useEffect as useEffect5, useRef as useRef3 } from "react";
6073
6110
  import { SuperGrid, toMMSI } from "react-supergrid";
@@ -6104,13 +6141,14 @@ var CanvasPrimitiveRenderer = ({
6104
6141
  if (transform) drawer.transform = transform;
6105
6142
  drawer.clear();
6106
6143
  drawer.foregroundLayer = selectedLayer;
6107
- const filteredPrimitives = primitives.filter((p) => isShowingSolderMask || !p.layer?.includes("soldermask")).filter((p) => isShowingSilkscreen || !p.layer?.includes("silkscreen")).filter(
6108
- (p) => isShowingFabricationNotes || !p.layer?.includes("fabrication")
6109
- ).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").filter((p) => p._element?.type !== "pcb_copper_text");
6144
+ const filteredPrimitives = getPrimitivesForDrawer({
6145
+ primitives,
6146
+ isShowingSolderMask,
6147
+ isShowingSilkscreen,
6148
+ isShowingFabricationNotes
6149
+ });
6110
6150
  drawPrimitives(drawer, filteredPrimitives);
6111
6151
  if (transform) {
6112
- const topCanvas = canvasRefs.current.top;
6113
- const bottomCanvas = canvasRefs.current.bottom;
6114
6152
  const copperLayers = getCopperLayerRefsFromElements(elements).map((layer) => ({
6115
6153
  canvas: canvasRefs.current[layer],
6116
6154
  layer,
@@ -6322,16 +6360,12 @@ var CanvasPrimitiveRenderer = ({
6322
6360
  realToCanvasMat: transform
6323
6361
  });
6324
6362
  }
6325
- const keepoutLayers = [
6326
- { canvas: topCanvas, layer: "top" },
6327
- { canvas: bottomCanvas, layer: "bottom" }
6328
- ];
6329
- for (const { canvas, layer } of keepoutLayers) {
6363
+ for (const { canvas, layer } of copperLayers) {
6330
6364
  if (!canvas) continue;
6331
6365
  drawPcbKeepoutElementsForLayer({
6332
6366
  canvas,
6333
6367
  elements,
6334
- layers: [layer],
6368
+ layer,
6335
6369
  realToCanvasMat: transform
6336
6370
  });
6337
6371
  }
@@ -7023,10 +7057,10 @@ function drawGraphicsToCanvas(graphics, target, options = {}) {
7023
7057
  const geometry = getArrowGeometry(arrow);
7024
7058
  const shaftStart = applyToPoint7(matrix, geometry.shaftStart);
7025
7059
  const shaftEnd = applyToPoint7(matrix, geometry.shaftEnd);
7026
- const color7 = arrow.color || defaultColors[arrowIndex % defaultColors.length];
7060
+ const color8 = arrow.color || defaultColors[arrowIndex % defaultColors.length];
7027
7061
  const scaleFactor = Math.hypot(matrix.a, matrix.b);
7028
- ctx.strokeStyle = color7;
7029
- ctx.fillStyle = color7;
7062
+ ctx.strokeStyle = color8;
7063
+ ctx.fillStyle = color8;
7030
7064
  ctx.lineWidth = geometry.shaftWidth * (scaleFactor || 1);
7031
7065
  ctx.lineCap = "round";
7032
7066
  ctx.setLineDash([]);
@@ -7060,7 +7094,7 @@ function drawGraphicsToCanvas(graphics, target, options = {}) {
7060
7094
  normalPadding: 12,
7061
7095
  alongOffset: arrow.inlineLabel ? -alongSeparation : 0
7062
7096
  });
7063
- ctx.fillStyle = color7;
7097
+ ctx.fillStyle = color8;
7064
7098
  ctx.font = `${fontSize}px sans-serif`;
7065
7099
  if (!labelsDisabled && arrow.label) {
7066
7100
  const labelX = arrowLabelLayout.x;
@@ -9787,7 +9821,7 @@ var HighlightedPrimitiveBoxWithText = ({
9787
9821
  ];
9788
9822
  const si = primitive.same_space_index ?? 0;
9789
9823
  const sip = 26;
9790
- const color7 = layerColorHightlightMap[primitive?._element?.layer] ?? "red";
9824
+ const color8 = layerColorHightlightMap[primitive?._element?.layer] ?? "red";
9791
9825
  let rotation = 0;
9792
9826
  if (primitiveElement.type === "pcb_smtpad" && primitiveElement?.shape === "rotated_rect") {
9793
9827
  rotation = primitiveElement?.ccw_rotation ?? 0;
@@ -9808,7 +9842,7 @@ var HighlightedPrimitiveBoxWithText = ({
9808
9842
  position: "absolute",
9809
9843
  left: mousePos.x + 12,
9810
9844
  top: mousePos.y + 12,
9811
- color: color7,
9845
+ color: color8,
9812
9846
  pointerEvents: "none"
9813
9847
  },
9814
9848
  children: /* @__PURE__ */ jsxs9(
@@ -9858,7 +9892,7 @@ var HighlightedPrimitiveBoxWithText = ({
9858
9892
  top: y - h / 2 - 8,
9859
9893
  width: w + 16,
9860
9894
  height: h + 16,
9861
- color: color7,
9895
+ color: color8,
9862
9896
  transform: `rotate(${-rotation}deg)`,
9863
9897
  transformOrigin: "center center"
9864
9898
  },
@@ -9874,7 +9908,7 @@ var HighlightedPrimitiveBoxWithText = ({
9874
9908
  height: finalState ? `calc(100% + ${sip * 2 * si}px)` : "100%",
9875
9909
  marginLeft: finalState ? `${-sip * si}px` : 0,
9876
9910
  marginTop: finalState ? `${-sip * si}px` : 0,
9877
- border: `1px solid ${color7}`,
9911
+ border: `1px solid ${color8}`,
9878
9912
  opacity: finalState ? 1 : si === 0 ? 1 : 0,
9879
9913
  transition: "width 0.2s, height 0.2s, margin-left 0.2s, margin-top 0.2s, opacity 0.2s"
9880
9914
  },
@@ -10602,7 +10636,7 @@ import { css as css2 } from "@emotion/css";
10602
10636
  // package.json
10603
10637
  var package_default = {
10604
10638
  name: "@tscircuit/pcb-viewer",
10605
- version: "1.11.390",
10639
+ version: "1.11.392",
10606
10640
  main: "dist/index.js",
10607
10641
  type: "module",
10608
10642
  repository: {