@tscircuit/pcb-viewer 1.9.3 → 1.10.1

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
@@ -11866,7 +11866,7 @@ var LAYER_NAME_TO_COLOR = _object_spread({
11866
11866
  red: "red",
11867
11867
  black: "black",
11868
11868
  green: "green",
11869
- board: "white",
11869
+ board: "rgb(255, 255, 255)",
11870
11870
  other: "#eee",
11871
11871
  // TODO more builtin html colors
11872
11872
  // Common eagle names
@@ -12340,7 +12340,7 @@ var convertTextToLines = function(text) {
12340
12340
  // src/lib/draw-primitives.ts
12341
12341
  var import_color = __toESM(require("color"));
12342
12342
  function getColor(primitive) {
12343
- if (primitive.is_mouse_over) {
12343
+ if (primitive.is_mouse_over || primitive.is_in_highlighted_net) {
12344
12344
  return (0, import_color.default)(LAYER_NAME_TO_COLOR[primitive.layer]).lighten(0.5).rgb().toString();
12345
12345
  }
12346
12346
  return LAYER_NAME_TO_COLOR[primitive.layer];
@@ -12349,7 +12349,8 @@ var drawLine = function(drawer, line) {
12349
12349
  drawer.equip({
12350
12350
  size: line.zoomIndependent ? line.width / drawer.transform.a : line.width,
12351
12351
  shape: line.squareCap ? "square" : "circle",
12352
- color: line.layer
12352
+ color: getColor(line),
12353
+ layer: line.layer
12353
12354
  });
12354
12355
  drawer.moveTo(line.x1, line.y1);
12355
12356
  drawer.lineTo(line.x2, line.y2);
@@ -12414,25 +12415,29 @@ var drawRect = function(drawer, rect) {
12414
12415
  };
12415
12416
  var drawCircle = function(drawer, circle) {
12416
12417
  drawer.equip({
12417
- color: circle.layer
12418
+ color: getColor(circle),
12419
+ layer: circle.layer
12418
12420
  });
12419
12421
  drawer.circle(circle.x, circle.y, circle.r, circle.mesh_fill);
12420
12422
  };
12421
12423
  var drawOval = function(drawer, oval) {
12422
12424
  drawer.equip({
12423
- color: oval.layer
12425
+ color: getColor(oval),
12426
+ layer: oval.layer
12424
12427
  });
12425
12428
  drawer.oval(oval.x, oval.y, oval.rX, oval.rY);
12426
12429
  };
12427
12430
  var drawPill = function(drawer, pill) {
12428
12431
  drawer.equip({
12429
- color: pill.layer
12432
+ color: getColor(pill),
12433
+ layer: pill.layer
12430
12434
  });
12431
12435
  drawer.pill(pill.x, pill.y, pill.w, pill.h);
12432
12436
  };
12433
12437
  var drawPolygon = function(drawer, polygon) {
12434
12438
  drawer.equip({
12435
- color: polygon.layer
12439
+ color: getColor(polygon),
12440
+ layer: polygon.layer
12436
12441
  });
12437
12442
  drawer.polygon(polygon.points);
12438
12443
  };
@@ -12858,7 +12863,8 @@ var convertElementToPrimitives = function(element, allElements) {
12858
12863
  y: y3,
12859
12864
  r: hole_diameter1 / 2,
12860
12865
  // TODO support layer on pcb_plated_hole
12861
- layer: "drill"
12866
+ layer: "drill",
12867
+ _element: element
12862
12868
  }
12863
12869
  ];
12864
12870
  } else if (element.shape === "oval") {
@@ -12880,6 +12886,7 @@ var convertElementToPrimitives = function(element, allElements) {
12880
12886
  },
12881
12887
  {
12882
12888
  _pcb_drawing_object_id: "oval_".concat(globalPcbDrawingObjectCount++),
12889
+ _element: element,
12883
12890
  pcb_drawing_type: "oval",
12884
12891
  x: x4,
12885
12892
  y: y4,
@@ -12907,6 +12914,7 @@ var convertElementToPrimitives = function(element, allElements) {
12907
12914
  },
12908
12915
  {
12909
12916
  _pcb_drawing_object_id: "pill_".concat(globalPcbDrawingObjectCount++),
12917
+ _element: element,
12910
12918
  pcb_drawing_type: "pill",
12911
12919
  x: x5,
12912
12920
  y: y5,
@@ -12970,6 +12978,7 @@ var convertElementToPrimitives = function(element, allElements) {
12970
12978
  var expandedStroke = getExpandedStroke(strokeInput, 0.5);
12971
12979
  primitives.push({
12972
12980
  _pcb_drawing_object_id: "polygon_".concat(globalPcbDrawingObjectCount++),
12981
+ _element: element,
12973
12982
  pcb_drawing_type: "polygon",
12974
12983
  points: expandedStroke,
12975
12984
  layer: element.route[0].layer
@@ -12978,6 +12987,7 @@ var convertElementToPrimitives = function(element, allElements) {
12978
12987
  if (r.route_type === "via") {
12979
12988
  primitives.push({
12980
12989
  _pcb_drawing_object_id: "circle_".concat(globalPcbDrawingObjectCount++),
12990
+ _element: element,
12981
12991
  pcb_drawing_type: "circle",
12982
12992
  x: r.x,
12983
12993
  y: r.y,
@@ -12999,6 +13009,7 @@ var convertElementToPrimitives = function(element, allElements) {
12999
13009
  if (prevX !== null && prevY !== null) {
13000
13010
  primitives.push({
13001
13011
  _pcb_drawing_object_id: "line_".concat(globalPcbDrawingObjectCount++),
13012
+ _element: element,
13002
13013
  pcb_drawing_type: "line",
13003
13014
  x1: prevX,
13004
13015
  y1: prevY,
@@ -13046,12 +13057,12 @@ var convertElementToPrimitives = function(element, allElements) {
13046
13057
  },
13047
13058
  {
13048
13059
  _pcb_drawing_object_id: "circle_".concat(globalPcbDrawingObjectCount++),
13060
+ _element: element,
13049
13061
  pcb_drawing_type: "circle",
13050
13062
  x: x7,
13051
13063
  y: y7,
13052
13064
  r: hole_diameter2 / 2,
13053
13065
  layer: "drill",
13054
- _element: element,
13055
13066
  _parent_pcb_component: _parent_pcb_component,
13056
13067
  _parent_source_component: _parent_source_component
13057
13068
  },
@@ -13345,6 +13356,7 @@ var MouseElementTracker = function(param) {
13345
13356
  var _primitive__element, _primitive__element1;
13346
13357
  if (((_primitive__element = primitive._element) === null || _primitive__element === void 0 ? void 0 : _primitive__element.type) === "pcb_via") return "continue";
13347
13358
  if (((_primitive__element1 = primitive._element) === null || _primitive__element1 === void 0 ? void 0 : _primitive__element1.type) === "pcb_component") return "continue";
13359
+ if ((primitive === null || primitive === void 0 ? void 0 : primitive.layer) === "drill") return "continue";
13348
13360
  var screenPos = (0, import_transformation_matrix2.applyToPoint)(transform, primitive);
13349
13361
  var w = "w" in primitive ? primitive.w : "r" in primitive ? primitive.r * 2 : 0;
13350
13362
  var h = "h" in primitive ? primitive.h : "r" in primitive ? primitive.r * 2 : 0;
@@ -13713,7 +13725,7 @@ var import_soup2 = __toESM(require_dist());
13713
13725
  // package.json
13714
13726
  var package_default = {
13715
13727
  name: "@tscircuit/pcb-viewer",
13716
- version: "1.9.2",
13728
+ version: "1.10.0",
13717
13729
  main: "dist/index.js",
13718
13730
  repository: "tscircuit/pcb-viewer",
13719
13731
  license: "MIT",
@@ -13764,6 +13776,7 @@ var package_default = {
13764
13776
  },
13765
13777
  dependencies: {
13766
13778
  "@emotion/css": "^11.11.2",
13779
+ "circuit-json-to-connectivity-map": "^0.0.8",
13767
13780
  color: "^4.2.3",
13768
13781
  "react-supergrid": "^1.0.10",
13769
13782
  "react-toastify": "^10.0.5",
@@ -14761,37 +14774,76 @@ var RatsNestOverlay = function(param) {
14761
14774
  });
14762
14775
  };
14763
14776
  // src/components/CanvasElementsRenderer.tsx
14777
+ var import_circuit_json_to_connectivity_map = require("circuit-json-to-connectivity-map");
14778
+ // src/lib/util/addInteractionMetadataToPrimitives.ts
14779
+ function addInteractionMetadataToPrimitives(param) {
14780
+ var primitivesWithoutInteractionMetadata = param.primitivesWithoutInteractionMetadata, drawingObjectIdsWithMouseOver = param.drawingObjectIdsWithMouseOver, primitiveIdsInMousedOverNet = param.primitiveIdsInMousedOverNet;
14781
+ var newPrimitives = [];
14782
+ var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
14783
+ try {
14784
+ for(var _iterator = primitivesWithoutInteractionMetadata[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){
14785
+ var primitive = _step.value;
14786
+ var newPrimitive = _object_spread({}, primitive);
14787
+ if ((primitive === null || primitive === void 0 ? void 0 : primitive.layer) === "drill") {
14788
+ newPrimitive.is_in_highlighted_net = false;
14789
+ newPrimitive.is_mouse_over = false;
14790
+ } else if (drawingObjectIdsWithMouseOver.has(primitive._pcb_drawing_object_id)) {
14791
+ newPrimitive.is_mouse_over = true;
14792
+ } else if (primitive._element && ("pcb_trace_id" in primitive._element && primitiveIdsInMousedOverNet.includes(primitive._element.pcb_trace_id) || "pcb_port_id" in primitive._element && primitiveIdsInMousedOverNet.includes(primitive._element.pcb_port_id))) {
14793
+ newPrimitive.is_in_highlighted_net = true;
14794
+ } else {
14795
+ newPrimitive.is_in_highlighted_net = false;
14796
+ newPrimitive.is_mouse_over = false;
14797
+ }
14798
+ newPrimitives.push(newPrimitive);
14799
+ }
14800
+ } catch (err) {
14801
+ _didIteratorError = true;
14802
+ _iteratorError = err;
14803
+ } finally{
14804
+ try {
14805
+ if (!_iteratorNormalCompletion && _iterator.return != null) {
14806
+ _iterator.return();
14807
+ }
14808
+ } finally{
14809
+ if (_didIteratorError) {
14810
+ throw _iteratorError;
14811
+ }
14812
+ }
14813
+ }
14814
+ return newPrimitives;
14815
+ }
14816
+ // src/components/CanvasElementsRenderer.tsx
14764
14817
  var import_jsx_runtime13 = require("react/jsx-runtime");
14765
14818
  var CanvasElementsRenderer = function(props) {
14766
14819
  var transform = props.transform, elements = props.elements;
14767
- var primitivesWithoutInteractionMetadata = (0, import_react16.useMemo)(function() {
14820
+ var _ref = _sliced_to_array((0, import_react16.useMemo)(function() {
14768
14821
  var primitivesWithoutInteractionMetadata2 = props.elements.flatMap(function(elm) {
14769
14822
  return convertElementToPrimitives(elm, props.elements);
14770
14823
  });
14771
- return primitivesWithoutInteractionMetadata2;
14824
+ var connectivityMap2 = (0, import_circuit_json_to_connectivity_map.getFullConnectivityMapFromCircuitJson)(props.elements);
14825
+ return [
14826
+ primitivesWithoutInteractionMetadata2,
14827
+ connectivityMap2
14828
+ ];
14772
14829
  }, [
14773
14830
  props.elements
14774
- ]);
14775
- var _ref = _sliced_to_array((0, import_react15.useState)(primitivesWithoutInteractionMetadata), 2), primitives = _ref[0], setPrimitives = _ref[1];
14831
+ ]), 2), primitivesWithoutInteractionMetadata = _ref[0], connectivityMap = _ref[1];
14832
+ var _ref1 = _sliced_to_array((0, import_react15.useState)(primitivesWithoutInteractionMetadata), 2), primitives = _ref1[0], setPrimitives = _ref1[1];
14776
14833
  return /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(MouseElementTracker, {
14777
14834
  transform: transform,
14778
14835
  primitives: primitivesWithoutInteractionMetadata,
14779
14836
  onMouseHoverOverPrimitives: function(primitivesHoveredOver) {
14780
- var primitiveIdsWithMouseOver = new Set(primitivesHoveredOver.map(function(p) {
14781
- return p._pcb_drawing_object_id;
14782
- }));
14783
- var newPrimitives = [];
14837
+ var primitiveIdsInMousedOverNet = [];
14784
14838
  var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
14785
14839
  try {
14786
- for(var _iterator = primitivesWithoutInteractionMetadata[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){
14840
+ for(var _iterator = primitivesHoveredOver[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){
14787
14841
  var primitive = _step.value;
14788
- var newPrimitive = _object_spread({}, primitive);
14789
- if (primitiveIdsWithMouseOver.has(primitive._pcb_drawing_object_id)) {
14790
- newPrimitive.is_mouse_over = true;
14791
- } else {
14792
- newPrimitive.is_mouse_over = false;
14842
+ if (primitive._element && "pcb_port_id" in primitive._element) {
14843
+ var _primitiveIdsInMousedOverNet;
14844
+ var connectedPrimitivesList = connectivityMap.getNetConnectedToId(primitive._element.pcb_port_id);
14845
+ (_primitiveIdsInMousedOverNet = primitiveIdsInMousedOverNet).push.apply(_primitiveIdsInMousedOverNet, _to_consumable_array(connectivityMap.getIdsConnectedToNet(connectedPrimitivesList)));
14793
14846
  }
14794
- newPrimitives.push(newPrimitive);
14795
14847
  }
14796
14848
  } catch (err) {
14797
14849
  _didIteratorError = true;
@@ -14807,6 +14859,14 @@ var CanvasElementsRenderer = function(props) {
14807
14859
  }
14808
14860
  }
14809
14861
  }
14862
+ var drawingObjectIdsWithMouseOver = new Set(primitivesHoveredOver.map(function(p) {
14863
+ return p._pcb_drawing_object_id;
14864
+ }));
14865
+ var newPrimitives = addInteractionMetadataToPrimitives({
14866
+ primitivesWithoutInteractionMetadata: primitivesWithoutInteractionMetadata,
14867
+ drawingObjectIdsWithMouseOver: drawingObjectIdsWithMouseOver,
14868
+ primitiveIdsInMousedOverNet: primitiveIdsInMousedOverNet
14869
+ });
14810
14870
  setPrimitives(newPrimitives);
14811
14871
  },
14812
14872
  children: /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(EditPlacementOverlay, {