@tscircuit/pcb-viewer 1.11.315 → 1.11.317

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
@@ -7846,10 +7846,6 @@ var convertElementToPrimitives = (element, allElements) => {
7846
7846
  return [];
7847
7847
  };
7848
7848
 
7849
- // src/components/CanvasPrimitiveRenderer.tsx
7850
- import { SuperGrid, toMMSI } from "react-supergrid";
7851
- import { useEffect as useEffect4, useRef as useRef2 } from "react";
7852
-
7853
7849
  // src/lib/Drawer.ts
7854
7850
  import {
7855
7851
  applyToPoint as applyToPoint3,
@@ -8621,6 +8617,265 @@ var Drawer = class {
8621
8617
  }
8622
8618
  };
8623
8619
 
8620
+ // src/lib/draw-copper-pour.ts
8621
+ import { CircuitToCanvasDrawer } from "circuit-to-canvas";
8622
+ function isCopperPourElement(element) {
8623
+ return element.type === "pcb_copper_pour";
8624
+ }
8625
+ function drawCopperPourElementsForLayer({
8626
+ canvas,
8627
+ elements,
8628
+ layers,
8629
+ realToCanvasMat
8630
+ }) {
8631
+ const copperPourElements = elements.filter(isCopperPourElement);
8632
+ if (copperPourElements.length === 0) return;
8633
+ const drawer = new CircuitToCanvasDrawer(canvas);
8634
+ drawer.realToCanvasMat = realToCanvasMat;
8635
+ drawer.drawElements(copperPourElements, { layers });
8636
+ }
8637
+
8638
+ // src/lib/draw-fabrication-note.ts
8639
+ import {
8640
+ CircuitToCanvasDrawer as CircuitToCanvasDrawer2,
8641
+ DEFAULT_PCB_COLOR_MAP
8642
+ } from "circuit-to-canvas";
8643
+ var PCB_VIEWER_COLOR_MAP = {
8644
+ ...DEFAULT_PCB_COLOR_MAP,
8645
+ silkscreen: {
8646
+ top: colors_default.board.f_fab,
8647
+ bottom: colors_default.board.b_fab
8648
+ }
8649
+ };
8650
+ function isFabricationNote(element) {
8651
+ return element.type.includes("pcb_fabrication_note");
8652
+ }
8653
+ function drawFabricationNoteElementsForLayer({
8654
+ canvas,
8655
+ elements,
8656
+ layers,
8657
+ realToCanvasMat
8658
+ }) {
8659
+ const drawer = new CircuitToCanvasDrawer2(canvas);
8660
+ drawer.configure({
8661
+ colorOverrides: PCB_VIEWER_COLOR_MAP
8662
+ });
8663
+ drawer.realToCanvasMat = realToCanvasMat;
8664
+ const fabricationElements = elements.filter(isFabricationNote);
8665
+ drawer.drawElements(fabricationElements, { layers });
8666
+ }
8667
+
8668
+ // src/lib/draw-hole.ts
8669
+ import { CircuitToCanvasDrawer as CircuitToCanvasDrawer3 } from "circuit-to-canvas";
8670
+ function isPcbHole(element) {
8671
+ return element.type === "pcb_hole";
8672
+ }
8673
+ function drawPcbHoleElementsForLayer({
8674
+ canvas,
8675
+ elements,
8676
+ layers,
8677
+ realToCanvasMat,
8678
+ drawSoldermask
8679
+ }) {
8680
+ const drawer = new CircuitToCanvasDrawer3(canvas);
8681
+ drawer.realToCanvasMat = realToCanvasMat;
8682
+ const holeElements = elements.filter(isPcbHole);
8683
+ drawer.drawElements(holeElements, { layers, drawSoldermask });
8684
+ }
8685
+
8686
+ // src/lib/draw-pcb-board.ts
8687
+ import { CircuitToCanvasDrawer as CircuitToCanvasDrawer4 } from "circuit-to-canvas";
8688
+ function isPcbBoardElement(element) {
8689
+ return element.type === "pcb_board";
8690
+ }
8691
+ function drawPcbBoardElements({
8692
+ canvas,
8693
+ elements,
8694
+ layers,
8695
+ realToCanvasMat,
8696
+ drawSoldermask
8697
+ }) {
8698
+ const drawer = new CircuitToCanvasDrawer4(canvas);
8699
+ drawer.realToCanvasMat = realToCanvasMat;
8700
+ const pcbBoardElements = elements.filter(isPcbBoardElement);
8701
+ drawer.drawElements(pcbBoardElements, { layers, drawSoldermask });
8702
+ }
8703
+
8704
+ // src/lib/draw-pcb-cutout.ts
8705
+ import { CircuitToCanvasDrawer as CircuitToCanvasDrawer5 } from "circuit-to-canvas";
8706
+ function isPcbCutout(element) {
8707
+ return element.type === "pcb_cutout";
8708
+ }
8709
+ function drawPcbCutoutElementsForLayer({
8710
+ canvas,
8711
+ elements,
8712
+ layers,
8713
+ realToCanvasMat
8714
+ }) {
8715
+ const drawer = new CircuitToCanvasDrawer5(canvas);
8716
+ drawer.realToCanvasMat = realToCanvasMat;
8717
+ const cutoutElements = elements.filter(isPcbCutout);
8718
+ drawer.drawElements(cutoutElements, { layers });
8719
+ }
8720
+
8721
+ // src/lib/draw-pcb-keepout.ts
8722
+ import { CircuitToCanvasDrawer as CircuitToCanvasDrawer6 } from "circuit-to-canvas";
8723
+ function isPcbKeepout(element) {
8724
+ return element.type === "pcb_keepout";
8725
+ }
8726
+ function drawPcbKeepoutElementsForLayer({
8727
+ canvas,
8728
+ elements,
8729
+ layers,
8730
+ realToCanvasMat
8731
+ }) {
8732
+ const keepoutElements = elements.filter(isPcbKeepout);
8733
+ if (keepoutElements.length === 0) return;
8734
+ const drawer = new CircuitToCanvasDrawer6(canvas);
8735
+ drawer.realToCanvasMat = realToCanvasMat;
8736
+ drawer.drawElements(keepoutElements, { layers: [] });
8737
+ }
8738
+
8739
+ // src/lib/draw-pcb-note.ts
8740
+ import {
8741
+ CircuitToCanvasDrawer as CircuitToCanvasDrawer7
8742
+ } from "circuit-to-canvas";
8743
+ function isPcbNote(element) {
8744
+ return element.type.startsWith("pcb_note_");
8745
+ }
8746
+ function drawPcbNoteElementsForLayer({
8747
+ canvas,
8748
+ elements,
8749
+ layers,
8750
+ realToCanvasMat
8751
+ }) {
8752
+ const drawer = new CircuitToCanvasDrawer7(canvas);
8753
+ drawer.realToCanvasMat = realToCanvasMat;
8754
+ const pcbNoteElements = elements.filter(isPcbNote);
8755
+ drawer.drawElements(pcbNoteElements, { layers });
8756
+ }
8757
+
8758
+ // src/lib/draw-pcb-smtpad.ts
8759
+ import {
8760
+ CircuitToCanvasDrawer as CircuitToCanvasDrawer8,
8761
+ DEFAULT_PCB_COLOR_MAP as DEFAULT_PCB_COLOR_MAP3
8762
+ } from "circuit-to-canvas";
8763
+ import color from "color";
8764
+ var HOVER_COLOR_MAP = {
8765
+ ...DEFAULT_PCB_COLOR_MAP3,
8766
+ copper: {
8767
+ ...DEFAULT_PCB_COLOR_MAP3.copper,
8768
+ top: color(colors_default.board.pad_front).lighten(0.5).toString(),
8769
+ bottom: color(colors_default.board.pad_back).lighten(0.5).toString()
8770
+ }
8771
+ };
8772
+ function isPcbSmtPad(element) {
8773
+ return element.type === "pcb_smtpad";
8774
+ }
8775
+ function drawPcbSmtPadElementsForLayer({
8776
+ canvas,
8777
+ elements,
8778
+ layers,
8779
+ realToCanvasMat,
8780
+ primitives,
8781
+ drawSoldermask
8782
+ }) {
8783
+ const smtPadElements = elements.filter(isPcbSmtPad).filter((element) => {
8784
+ const elementLayer = element.layer;
8785
+ return layers.some((layer) => {
8786
+ if (layer === "top_copper" && elementLayer === "top") return true;
8787
+ if (layer === "bottom_copper" && elementLayer === "bottom") return true;
8788
+ return false;
8789
+ });
8790
+ });
8791
+ if (smtPadElements.length === 0) return;
8792
+ const highlightedElementIds = /* @__PURE__ */ new Set();
8793
+ if (primitives) {
8794
+ for (const primitive of primitives) {
8795
+ if ((primitive.is_mouse_over || primitive.is_in_highlighted_net) && primitive._element?.type === "pcb_smtpad") {
8796
+ highlightedElementIds.add(primitive._element.pcb_smtpad_id);
8797
+ }
8798
+ }
8799
+ }
8800
+ const highlightedElements = smtPadElements.filter(
8801
+ (element) => highlightedElementIds.has(element.pcb_smtpad_id)
8802
+ );
8803
+ const nonHighlightedElements = smtPadElements.filter(
8804
+ (element) => !highlightedElementIds.has(element.pcb_smtpad_id)
8805
+ );
8806
+ if (nonHighlightedElements.length > 0) {
8807
+ const drawer = new CircuitToCanvasDrawer8(canvas);
8808
+ drawer.realToCanvasMat = realToCanvasMat;
8809
+ drawer.drawElements(nonHighlightedElements, { layers: [], drawSoldermask });
8810
+ }
8811
+ if (highlightedElements.length > 0) {
8812
+ const highlightDrawer = new CircuitToCanvasDrawer8(canvas);
8813
+ highlightDrawer.configure({ colorOverrides: HOVER_COLOR_MAP });
8814
+ highlightDrawer.realToCanvasMat = realToCanvasMat;
8815
+ highlightDrawer.drawElements(highlightedElements, {
8816
+ layers: [],
8817
+ drawSoldermask
8818
+ });
8819
+ }
8820
+ }
8821
+
8822
+ // src/lib/draw-plated-hole.ts
8823
+ import {
8824
+ CircuitToCanvasDrawer as CircuitToCanvasDrawer9,
8825
+ DEFAULT_PCB_COLOR_MAP as DEFAULT_PCB_COLOR_MAP4
8826
+ } from "circuit-to-canvas";
8827
+ import color2 from "color";
8828
+ var HOVER_COLOR_MAP2 = {
8829
+ ...DEFAULT_PCB_COLOR_MAP4,
8830
+ copper: {
8831
+ ...DEFAULT_PCB_COLOR_MAP4.copper,
8832
+ top: color2(colors_default.board.pad_front).lighten(0.5).toString(),
8833
+ bottom: color2(colors_default.board.pad_back).lighten(0.5).toString()
8834
+ }
8835
+ };
8836
+ function isPlatedHole(element) {
8837
+ return element.type === "pcb_plated_hole";
8838
+ }
8839
+ function drawPlatedHolePads({
8840
+ canvas,
8841
+ elements,
8842
+ layers,
8843
+ realToCanvasMat,
8844
+ primitives,
8845
+ drawSoldermask
8846
+ }) {
8847
+ const platedHoleElements = elements.filter(isPlatedHole);
8848
+ if (platedHoleElements.length === 0) return;
8849
+ const highlightedElementIds = /* @__PURE__ */ new Set();
8850
+ if (primitives) {
8851
+ for (const primitive of primitives) {
8852
+ if ((primitive.is_mouse_over || primitive.is_in_highlighted_net) && primitive._element?.type === "pcb_plated_hole") {
8853
+ highlightedElementIds.add(primitive._element.pcb_plated_hole_id);
8854
+ }
8855
+ }
8856
+ }
8857
+ const highlightedElements = platedHoleElements.filter(
8858
+ (element) => highlightedElementIds.has(element.pcb_plated_hole_id)
8859
+ );
8860
+ const nonHighlightedElements = platedHoleElements.filter(
8861
+ (element) => !highlightedElementIds.has(element.pcb_plated_hole_id)
8862
+ );
8863
+ if (nonHighlightedElements.length > 0) {
8864
+ const drawer = new CircuitToCanvasDrawer9(canvas);
8865
+ drawer.realToCanvasMat = realToCanvasMat;
8866
+ drawer.drawElements(nonHighlightedElements, { layers, drawSoldermask });
8867
+ }
8868
+ if (highlightedElements.length > 0) {
8869
+ const highlightDrawer = new CircuitToCanvasDrawer9(canvas);
8870
+ highlightDrawer.configure({ colorOverrides: HOVER_COLOR_MAP2 });
8871
+ highlightDrawer.realToCanvasMat = realToCanvasMat;
8872
+ highlightDrawer.drawElements(highlightedElements, {
8873
+ layers,
8874
+ drawSoldermask
8875
+ });
8876
+ }
8877
+ }
8878
+
8624
8879
  // src/lib/util/rotate-text.ts
8625
8880
  import { compose as compose4, translate as translate8, rotate, applyToPoint as applyToPoint4 } from "transformation-matrix";
8626
8881
  function rotateText(rotateTextParams) {
@@ -8737,11 +8992,11 @@ var convertTextToLines = (text) => {
8737
8992
  };
8738
8993
 
8739
8994
  // src/lib/draw-primitives.ts
8740
- import color from "color";
8995
+ import color3 from "color";
8741
8996
  function getColor(primitive) {
8742
8997
  const explicitColor = primitive.color;
8743
8998
  const baseColorString = explicitColor ?? LAYER_NAME_TO_COLOR[primitive.layer];
8744
- let c = color(baseColorString);
8999
+ let c = color3(baseColorString);
8745
9000
  if (primitive._element?.type === "pcb_copper_pour") {
8746
9001
  c = c.alpha(0.7);
8747
9002
  }
@@ -9016,11 +9271,11 @@ var drawPrimitives = (drawer, primitives) => {
9016
9271
 
9017
9272
  // src/lib/draw-silkscreen.ts
9018
9273
  import {
9019
- DEFAULT_PCB_COLOR_MAP,
9020
- CircuitToCanvasDrawer
9274
+ CircuitToCanvasDrawer as CircuitToCanvasDrawer10,
9275
+ DEFAULT_PCB_COLOR_MAP as DEFAULT_PCB_COLOR_MAP5
9021
9276
  } from "circuit-to-canvas";
9022
- var PCB_VIEWER_COLOR_MAP = {
9023
- ...DEFAULT_PCB_COLOR_MAP,
9277
+ var PCB_VIEWER_COLOR_MAP2 = {
9278
+ ...DEFAULT_PCB_COLOR_MAP5,
9024
9279
  silkscreen: {
9025
9280
  top: colors_default.board.f_silks,
9026
9281
  bottom: colors_default.board.b_silks
@@ -9029,226 +9284,25 @@ var PCB_VIEWER_COLOR_MAP = {
9029
9284
  function isSilkscreenElement(element) {
9030
9285
  return element.type.includes("pcb_silkscreen");
9031
9286
  }
9032
- function drawSilkscreenElementsForLayer(canvas, elements, layers, realToCanvasMat) {
9033
- const drawer = new CircuitToCanvasDrawer(canvas);
9034
- drawer.configure({
9035
- colorOverrides: PCB_VIEWER_COLOR_MAP
9036
- });
9037
- drawer.realToCanvasMat = realToCanvasMat;
9038
- const silkscreenElements = elements.filter(isSilkscreenElement);
9039
- drawer.drawElements(silkscreenElements, { layers });
9040
- }
9041
-
9042
- // src/lib/draw-plated-hole.ts
9043
- import {
9044
- DEFAULT_PCB_COLOR_MAP as DEFAULT_PCB_COLOR_MAP2,
9045
- CircuitToCanvasDrawer as CircuitToCanvasDrawer2
9046
- } from "circuit-to-canvas";
9047
- import color2 from "color";
9048
- var HOVER_COLOR_MAP = {
9049
- ...DEFAULT_PCB_COLOR_MAP2,
9050
- copper: {
9051
- ...DEFAULT_PCB_COLOR_MAP2.copper,
9052
- top: color2(colors_default.board.pad_front).lighten(0.5).toString(),
9053
- bottom: color2(colors_default.board.pad_back).lighten(0.5).toString()
9054
- }
9055
- };
9056
- function isPlatedHole(element) {
9057
- return element.type === "pcb_plated_hole";
9058
- }
9059
- function drawPlatedHolePads({
9287
+ function drawSilkscreenElementsForLayer({
9060
9288
  canvas,
9061
9289
  elements,
9062
9290
  layers,
9063
- realToCanvasMat,
9064
- primitives
9291
+ realToCanvasMat
9065
9292
  }) {
9066
- const platedHoleElements = elements.filter(isPlatedHole);
9067
- if (platedHoleElements.length === 0) return;
9068
- const highlightedElementIds = /* @__PURE__ */ new Set();
9069
- if (primitives) {
9070
- for (const primitive of primitives) {
9071
- if ((primitive.is_mouse_over || primitive.is_in_highlighted_net) && primitive._element?.type === "pcb_plated_hole") {
9072
- highlightedElementIds.add(primitive._element.pcb_plated_hole_id);
9073
- }
9074
- }
9075
- }
9076
- const highlightedElements = platedHoleElements.filter(
9077
- (element) => highlightedElementIds.has(element.pcb_plated_hole_id)
9078
- );
9079
- const nonHighlightedElements = platedHoleElements.filter(
9080
- (element) => !highlightedElementIds.has(element.pcb_plated_hole_id)
9081
- );
9082
- if (nonHighlightedElements.length > 0) {
9083
- const drawer = new CircuitToCanvasDrawer2(canvas);
9084
- drawer.realToCanvasMat = realToCanvasMat;
9085
- drawer.drawElements(nonHighlightedElements, { layers });
9086
- }
9087
- if (highlightedElements.length > 0) {
9088
- const highlightDrawer = new CircuitToCanvasDrawer2(canvas);
9089
- highlightDrawer.configure({ colorOverrides: HOVER_COLOR_MAP });
9090
- highlightDrawer.realToCanvasMat = realToCanvasMat;
9091
- highlightDrawer.drawElements(highlightedElements, { layers });
9092
- }
9093
- }
9094
-
9095
- // src/lib/draw-fabrication-note.ts
9096
- import {
9097
- DEFAULT_PCB_COLOR_MAP as DEFAULT_PCB_COLOR_MAP3,
9098
- CircuitToCanvasDrawer as CircuitToCanvasDrawer3
9099
- } from "circuit-to-canvas";
9100
- var PCB_VIEWER_COLOR_MAP2 = {
9101
- ...DEFAULT_PCB_COLOR_MAP3,
9102
- silkscreen: {
9103
- top: colors_default.board.f_fab,
9104
- bottom: colors_default.board.b_fab
9105
- }
9106
- };
9107
- function isFabricationNote(element) {
9108
- return element.type.includes("pcb_fabrication_note");
9109
- }
9110
- function drawFabricationNoteElementsForLayer(canvas, elements, layers, realToCanvasMat) {
9111
- const drawer = new CircuitToCanvasDrawer3(canvas);
9293
+ const drawer = new CircuitToCanvasDrawer10(canvas);
9112
9294
  drawer.configure({
9113
9295
  colorOverrides: PCB_VIEWER_COLOR_MAP2
9114
9296
  });
9115
9297
  drawer.realToCanvasMat = realToCanvasMat;
9116
- const fabricationElements = elements.filter(isFabricationNote);
9117
- drawer.drawElements(fabricationElements, { layers });
9118
- }
9119
-
9120
- // src/lib/draw-pcb-note.ts
9121
- import {
9122
- CircuitToCanvasDrawer as CircuitToCanvasDrawer4
9123
- } from "circuit-to-canvas";
9124
- function isPcbNote(element) {
9125
- return element.type.startsWith("pcb_note_");
9126
- }
9127
- function drawPcbNoteElementsForLayer(canvas, elements, layers, realToCanvasMat) {
9128
- const drawer = new CircuitToCanvasDrawer4(canvas);
9129
- drawer.realToCanvasMat = realToCanvasMat;
9130
- const pcbNoteElements = elements.filter(isPcbNote);
9131
- drawer.drawElements(pcbNoteElements, { layers });
9132
- }
9133
-
9134
- // src/lib/draw-hole.ts
9135
- import { CircuitToCanvasDrawer as CircuitToCanvasDrawer5 } from "circuit-to-canvas";
9136
- function isPcbHole(element) {
9137
- return element.type === "pcb_hole";
9138
- }
9139
- function drawPcbHoleElementsForLayer(canvas, elements, layers, realToCanvasMat) {
9140
- const drawer = new CircuitToCanvasDrawer5(canvas);
9141
- drawer.realToCanvasMat = realToCanvasMat;
9142
- const holeElements = elements.filter(isPcbHole);
9143
- drawer.drawElements(holeElements, { layers });
9144
- }
9145
-
9146
- // src/lib/draw-pcb-board.ts
9147
- import { CircuitToCanvasDrawer as CircuitToCanvasDrawer6 } from "circuit-to-canvas";
9148
- function isPcbBoardElement(element) {
9149
- return element.type === "pcb_board";
9150
- }
9151
- function drawPcbBoardElements(canvas, elements, layers, realToCanvasMat) {
9152
- const drawer = new CircuitToCanvasDrawer6(canvas);
9153
- drawer.realToCanvasMat = realToCanvasMat;
9154
- const pcbBoardElements = elements.filter(isPcbBoardElement);
9155
- drawer.drawElements(pcbBoardElements, { layers });
9156
- }
9157
-
9158
- // src/lib/draw-pcb-cutout.ts
9159
- import { CircuitToCanvasDrawer as CircuitToCanvasDrawer7 } from "circuit-to-canvas";
9160
- function isPcbCutout(element) {
9161
- return element.type === "pcb_cutout";
9162
- }
9163
- function drawPcbCutoutElementsForLayer(canvas, elements, layers, realToCanvasMat) {
9164
- const drawer = new CircuitToCanvasDrawer7(canvas);
9165
- drawer.realToCanvasMat = realToCanvasMat;
9166
- const cutoutElements = elements.filter(isPcbCutout);
9167
- drawer.drawElements(cutoutElements, { layers });
9168
- }
9169
-
9170
- // src/lib/draw-pcb-smtpad.ts
9171
- import {
9172
- DEFAULT_PCB_COLOR_MAP as DEFAULT_PCB_COLOR_MAP5,
9173
- CircuitToCanvasDrawer as CircuitToCanvasDrawer8
9174
- } from "circuit-to-canvas";
9175
- import color3 from "color";
9176
- var HOVER_COLOR_MAP2 = {
9177
- ...DEFAULT_PCB_COLOR_MAP5,
9178
- copper: {
9179
- ...DEFAULT_PCB_COLOR_MAP5.copper,
9180
- top: color3(colors_default.board.pad_front).lighten(0.5).toString(),
9181
- bottom: color3(colors_default.board.pad_back).lighten(0.5).toString()
9182
- }
9183
- };
9184
- function isPcbSmtPad(element) {
9185
- return element.type === "pcb_smtpad";
9186
- }
9187
- function drawPcbSmtPadElementsForLayer({
9188
- canvas,
9189
- elements,
9190
- layers,
9191
- realToCanvasMat,
9192
- primitives
9193
- }) {
9194
- const smtPadElements = elements.filter(isPcbSmtPad).filter((element) => {
9195
- const elementLayer = element.layer;
9196
- return layers.some((layer) => {
9197
- if (layer === "top_copper" && elementLayer === "top") return true;
9198
- if (layer === "bottom_copper" && elementLayer === "bottom") return true;
9199
- return false;
9200
- });
9201
- });
9202
- if (smtPadElements.length === 0) return;
9203
- const highlightedElementIds = /* @__PURE__ */ new Set();
9204
- if (primitives) {
9205
- for (const primitive of primitives) {
9206
- if ((primitive.is_mouse_over || primitive.is_in_highlighted_net) && primitive._element?.type === "pcb_smtpad") {
9207
- highlightedElementIds.add(primitive._element.pcb_smtpad_id);
9208
- }
9209
- }
9210
- }
9211
- const highlightedElements = smtPadElements.filter(
9212
- (element) => highlightedElementIds.has(element.pcb_smtpad_id)
9213
- );
9214
- const nonHighlightedElements = smtPadElements.filter(
9215
- (element) => !highlightedElementIds.has(element.pcb_smtpad_id)
9216
- );
9217
- if (nonHighlightedElements.length > 0) {
9218
- const drawer = new CircuitToCanvasDrawer8(canvas);
9219
- drawer.realToCanvasMat = realToCanvasMat;
9220
- drawer.drawElements(nonHighlightedElements, { layers: [] });
9221
- }
9222
- if (highlightedElements.length > 0) {
9223
- const highlightDrawer = new CircuitToCanvasDrawer8(canvas);
9224
- highlightDrawer.configure({ colorOverrides: HOVER_COLOR_MAP2 });
9225
- highlightDrawer.realToCanvasMat = realToCanvasMat;
9226
- highlightDrawer.drawElements(highlightedElements, { layers: [] });
9227
- }
9228
- }
9229
-
9230
- // src/lib/draw-pcb-keepout.ts
9231
- import { CircuitToCanvasDrawer as CircuitToCanvasDrawer9 } from "circuit-to-canvas";
9232
- function isPcbKeepout(element) {
9233
- return element.type === "pcb_keepout";
9234
- }
9235
- function drawPcbKeepoutElementsForLayer({
9236
- canvas,
9237
- elements,
9238
- layers,
9239
- realToCanvasMat
9240
- }) {
9241
- const keepoutElements = elements.filter(isPcbKeepout);
9242
- if (keepoutElements.length === 0) return;
9243
- const drawer = new CircuitToCanvasDrawer9(canvas);
9244
- drawer.realToCanvasMat = realToCanvasMat;
9245
- drawer.drawElements(keepoutElements, { layers: [] });
9298
+ const silkscreenElements = elements.filter(isSilkscreenElement);
9299
+ drawer.drawElements(silkscreenElements, { layers });
9246
9300
  }
9247
9301
 
9248
9302
  // src/lib/draw-via.ts
9249
9303
  import {
9250
9304
  DEFAULT_PCB_COLOR_MAP as DEFAULT_PCB_COLOR_MAP6,
9251
- CircuitToCanvasDrawer as CircuitToCanvasDrawer10
9305
+ CircuitToCanvasDrawer as CircuitToCanvasDrawer11
9252
9306
  } from "circuit-to-canvas";
9253
9307
  import color4 from "color";
9254
9308
  var HOVER_COLOR_MAP3 = {
@@ -9288,37 +9342,21 @@ function drawPcbViaElementsForLayer({
9288
9342
  (element) => !highlightedElementIds.has(element.pcb_via_id)
9289
9343
  );
9290
9344
  if (nonHighlightedElements.length > 0) {
9291
- const drawer = new CircuitToCanvasDrawer10(canvas);
9345
+ const drawer = new CircuitToCanvasDrawer11(canvas);
9292
9346
  drawer.realToCanvasMat = realToCanvasMat;
9293
9347
  drawer.drawElements(nonHighlightedElements, { layers });
9294
9348
  }
9295
9349
  if (highlightedElements.length > 0) {
9296
- const highlightDrawer = new CircuitToCanvasDrawer10(canvas);
9350
+ const highlightDrawer = new CircuitToCanvasDrawer11(canvas);
9297
9351
  highlightDrawer.configure({ colorOverrides: HOVER_COLOR_MAP3 });
9298
9352
  highlightDrawer.realToCanvasMat = realToCanvasMat;
9299
9353
  highlightDrawer.drawElements(highlightedElements, { layers });
9300
9354
  }
9301
9355
  }
9302
9356
 
9303
- // src/lib/draw-copper-pour.ts
9304
- import { CircuitToCanvasDrawer as CircuitToCanvasDrawer11 } from "circuit-to-canvas";
9305
- function isCopperPourElement(element) {
9306
- return element.type === "pcb_copper_pour";
9307
- }
9308
- function drawCopperPourElementsForLayer({
9309
- canvas,
9310
- elements,
9311
- layers,
9312
- realToCanvasMat
9313
- }) {
9314
- const copperPourElements = elements.filter(isCopperPourElement);
9315
- if (copperPourElements.length === 0) return;
9316
- const drawer = new CircuitToCanvasDrawer11(canvas);
9317
- drawer.realToCanvasMat = realToCanvasMat;
9318
- drawer.drawElements(copperPourElements, { layers });
9319
- }
9320
-
9321
9357
  // src/components/CanvasPrimitiveRenderer.tsx
9358
+ import { useEffect as useEffect4, useRef as useRef2 } from "react";
9359
+ import { SuperGrid, toMMSI } from "react-supergrid";
9322
9360
  import { jsx as jsx3, jsxs } from "react/jsx-runtime";
9323
9361
  var orderedLayers = [
9324
9362
  "board",
@@ -9382,7 +9420,8 @@ var CanvasPrimitiveRenderer = ({
9382
9420
  elements,
9383
9421
  layers: ["top_copper"],
9384
9422
  realToCanvasMat: transform,
9385
- primitives
9423
+ primitives,
9424
+ drawSoldermask: isShowingSolderMask
9386
9425
  });
9387
9426
  }
9388
9427
  const bottomCanvas = canvasRefs.current.bottom;
@@ -9392,7 +9431,8 @@ var CanvasPrimitiveRenderer = ({
9392
9431
  elements,
9393
9432
  layers: ["bottom_copper"],
9394
9433
  realToCanvasMat: transform,
9395
- primitives
9434
+ primitives,
9435
+ drawSoldermask: isShowingSolderMask
9396
9436
  });
9397
9437
  }
9398
9438
  if (topCanvas) {
@@ -9401,7 +9441,8 @@ var CanvasPrimitiveRenderer = ({
9401
9441
  elements,
9402
9442
  layers: ["top_copper"],
9403
9443
  realToCanvasMat: transform,
9404
- primitives
9444
+ primitives,
9445
+ drawSoldermask: isShowingSolderMask
9405
9446
  });
9406
9447
  }
9407
9448
  if (bottomCanvas) {
@@ -9410,7 +9451,8 @@ var CanvasPrimitiveRenderer = ({
9410
9451
  elements,
9411
9452
  layers: ["bottom_copper"],
9412
9453
  realToCanvasMat: transform,
9413
- primitives
9454
+ primitives,
9455
+ drawSoldermask: isShowingSolderMask
9414
9456
  });
9415
9457
  }
9416
9458
  if (topCanvas) {
@@ -9449,74 +9491,86 @@ var CanvasPrimitiveRenderer = ({
9449
9491
  }
9450
9492
  const topSilkscreenCanvas = canvasRefs.current.top_silkscreen;
9451
9493
  if (topSilkscreenCanvas) {
9452
- drawSilkscreenElementsForLayer(
9453
- topSilkscreenCanvas,
9494
+ drawSilkscreenElementsForLayer({
9495
+ canvas: topSilkscreenCanvas,
9454
9496
  elements,
9455
- ["top_silkscreen"],
9456
- transform
9457
- );
9497
+ layers: ["top_silkscreen"],
9498
+ realToCanvasMat: transform
9499
+ });
9458
9500
  }
9459
9501
  const bottomSilkscreenCanvas = canvasRefs.current.bottom_silkscreen;
9460
9502
  if (bottomSilkscreenCanvas) {
9461
- drawSilkscreenElementsForLayer(
9462
- bottomSilkscreenCanvas,
9503
+ drawSilkscreenElementsForLayer({
9504
+ canvas: bottomSilkscreenCanvas,
9463
9505
  elements,
9464
- ["bottom_silkscreen"],
9465
- transform
9466
- );
9506
+ layers: ["bottom_silkscreen"],
9507
+ realToCanvasMat: transform
9508
+ });
9467
9509
  }
9468
9510
  const topFabCanvas = canvasRefs.current.top_fabrication;
9469
9511
  if (topFabCanvas) {
9470
- drawFabricationNoteElementsForLayer(
9471
- topFabCanvas,
9512
+ drawFabricationNoteElementsForLayer({
9513
+ canvas: topFabCanvas,
9472
9514
  elements,
9473
- ["top_fabrication_note"],
9474
- transform
9475
- );
9515
+ layers: ["top_fabrication_note"],
9516
+ realToCanvasMat: transform
9517
+ });
9476
9518
  }
9477
9519
  const bottomFabCanvas = canvasRefs.current.bottom_fabrication;
9478
9520
  if (bottomFabCanvas) {
9479
- drawFabricationNoteElementsForLayer(
9480
- bottomFabCanvas,
9521
+ drawFabricationNoteElementsForLayer({
9522
+ canvas: bottomFabCanvas,
9481
9523
  elements,
9482
- ["bottom_fabrication_note"],
9483
- transform
9484
- );
9524
+ layers: ["bottom_fabrication_note"],
9525
+ realToCanvasMat: transform
9526
+ });
9485
9527
  }
9486
9528
  const bottomNotesCanvas = canvasRefs.current.bottom_notes;
9487
9529
  if (bottomNotesCanvas) {
9488
- drawPcbNoteElementsForLayer(
9489
- bottomNotesCanvas,
9530
+ drawPcbNoteElementsForLayer({
9531
+ canvas: bottomNotesCanvas,
9490
9532
  elements,
9491
- ["bottom_user_note"],
9492
- transform
9493
- );
9533
+ layers: ["bottom_user_note"],
9534
+ realToCanvasMat: transform
9535
+ });
9494
9536
  }
9495
9537
  const topNotesCanvas = canvasRefs.current.top_notes;
9496
9538
  if (topNotesCanvas) {
9497
- drawPcbNoteElementsForLayer(
9498
- topNotesCanvas,
9539
+ drawPcbNoteElementsForLayer({
9540
+ canvas: topNotesCanvas,
9499
9541
  elements,
9500
- ["top_user_note"],
9501
- transform
9502
- );
9542
+ layers: ["top_user_note"],
9543
+ realToCanvasMat: transform
9544
+ });
9503
9545
  }
9504
9546
  const drillCanvas = canvasRefs.current.drill;
9505
9547
  if (drillCanvas) {
9506
- drawPcbHoleElementsForLayer(drillCanvas, elements, ["drill"], transform);
9548
+ drawPcbHoleElementsForLayer({
9549
+ canvas: drillCanvas,
9550
+ elements,
9551
+ layers: ["drill"],
9552
+ realToCanvasMat: transform,
9553
+ drawSoldermask: isShowingSolderMask
9554
+ });
9507
9555
  }
9508
9556
  const boardCanvas = canvasRefs.current.board;
9509
9557
  if (boardCanvas) {
9510
- drawPcbBoardElements(boardCanvas, elements, [], transform);
9558
+ drawPcbBoardElements({
9559
+ canvas: boardCanvas,
9560
+ elements,
9561
+ layers: [],
9562
+ realToCanvasMat: transform,
9563
+ drawSoldermask: isShowingSolderMask
9564
+ });
9511
9565
  }
9512
9566
  const edgeCutsCanvas = canvasRefs.current.edge_cuts;
9513
9567
  if (edgeCutsCanvas) {
9514
- drawPcbCutoutElementsForLayer(
9515
- edgeCutsCanvas,
9568
+ drawPcbCutoutElementsForLayer({
9569
+ canvas: edgeCutsCanvas,
9516
9570
  elements,
9517
- ["edge_cuts"],
9518
- transform
9519
- );
9571
+ layers: ["edge_cuts"],
9572
+ realToCanvasMat: transform
9573
+ });
9520
9574
  }
9521
9575
  if (topCanvas) {
9522
9576
  drawPcbKeepoutElementsForLayer({
@@ -10574,6 +10628,10 @@ var DimensionOverlay = ({
10574
10628
  );
10575
10629
  useEffect7(() => {
10576
10630
  const down = (e) => {
10631
+ const target = e.target;
10632
+ if (target.tagName === "INPUT" || target.tagName === "TEXTAREA" || target.isContentEditable) {
10633
+ return;
10634
+ }
10577
10635
  const containerHasFocus = containerRef.current?.contains(document.activeElement) || document.activeElement === containerRef.current;
10578
10636
  if (!isMouseOverContainer && !containerHasFocus) return;
10579
10637
  if (e.key === "d") {
@@ -13565,7 +13623,7 @@ import { css as css3 } from "@emotion/css";
13565
13623
  // package.json
13566
13624
  var package_default = {
13567
13625
  name: "@tscircuit/pcb-viewer",
13568
- version: "1.11.314",
13626
+ version: "1.11.316",
13569
13627
  main: "dist/index.js",
13570
13628
  type: "module",
13571
13629
  repository: "tscircuit/pcb-viewer",
@@ -13619,7 +13677,7 @@ var package_default = {
13619
13677
  "@tscircuit/math-utils": "^0.0.29",
13620
13678
  "@vitejs/plugin-react": "^5.0.2",
13621
13679
  "circuit-json": "^0.0.356",
13622
- "circuit-to-canvas": "^0.0.50",
13680
+ "circuit-to-canvas": "^0.0.52",
13623
13681
  "circuit-to-svg": "^0.0.271",
13624
13682
  color: "^4.2.3",
13625
13683
  "react-supergrid": "^1.0.10",
@@ -13646,6 +13704,10 @@ var useHotKey = (key, onUse, containerRef) => {
13646
13704
  useEffect13(() => {
13647
13705
  if (!key) return;
13648
13706
  const handleKeyDown = (event) => {
13707
+ const target = event.target;
13708
+ if (target.tagName === "INPUT" || target.tagName === "TEXTAREA" || target.isContentEditable) {
13709
+ return;
13710
+ }
13649
13711
  const keyParts = key.split("+");
13650
13712
  const ctrlRequired = keyParts.includes("ctrl");
13651
13713
  const shiftRequired = keyParts.includes("shift");