@tscircuit/pcb-viewer 1.9.3 → 1.10.0

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
  };
@@ -12825,7 +12830,6 @@ var convertElementToPrimitives = function(element, allElements) {
12825
12830
  y: y2,
12826
12831
  r: hole_diameter / 2,
12827
12832
  layer: "drill",
12828
- _element: element,
12829
12833
  _parent_pcb_component: _parent_pcb_component,
12830
12834
  _parent_source_component: _parent_source_component
12831
12835
  }
@@ -12970,6 +12974,7 @@ var convertElementToPrimitives = function(element, allElements) {
12970
12974
  var expandedStroke = getExpandedStroke(strokeInput, 0.5);
12971
12975
  primitives.push({
12972
12976
  _pcb_drawing_object_id: "polygon_".concat(globalPcbDrawingObjectCount++),
12977
+ _element: element,
12973
12978
  pcb_drawing_type: "polygon",
12974
12979
  points: expandedStroke,
12975
12980
  layer: element.route[0].layer
@@ -12978,6 +12983,7 @@ var convertElementToPrimitives = function(element, allElements) {
12978
12983
  if (r.route_type === "via") {
12979
12984
  primitives.push({
12980
12985
  _pcb_drawing_object_id: "circle_".concat(globalPcbDrawingObjectCount++),
12986
+ _element: element,
12981
12987
  pcb_drawing_type: "circle",
12982
12988
  x: r.x,
12983
12989
  y: r.y,
@@ -12999,6 +13005,7 @@ var convertElementToPrimitives = function(element, allElements) {
12999
13005
  if (prevX !== null && prevY !== null) {
13000
13006
  primitives.push({
13001
13007
  _pcb_drawing_object_id: "line_".concat(globalPcbDrawingObjectCount++),
13008
+ _element: element,
13002
13009
  pcb_drawing_type: "line",
13003
13010
  x1: prevX,
13004
13011
  y1: prevY,
@@ -13051,7 +13058,6 @@ var convertElementToPrimitives = function(element, allElements) {
13051
13058
  y: y7,
13052
13059
  r: hole_diameter2 / 2,
13053
13060
  layer: "drill",
13054
- _element: element,
13055
13061
  _parent_pcb_component: _parent_pcb_component,
13056
13062
  _parent_source_component: _parent_source_component
13057
13063
  },
@@ -13713,7 +13719,7 @@ var import_soup2 = __toESM(require_dist());
13713
13719
  // package.json
13714
13720
  var package_default = {
13715
13721
  name: "@tscircuit/pcb-viewer",
13716
- version: "1.9.2",
13722
+ version: "1.9.3",
13717
13723
  main: "dist/index.js",
13718
13724
  repository: "tscircuit/pcb-viewer",
13719
13725
  license: "MIT",
@@ -13764,6 +13770,7 @@ var package_default = {
13764
13770
  },
13765
13771
  dependencies: {
13766
13772
  "@emotion/css": "^11.11.2",
13773
+ "circuit-json-to-connectivity-map": "^0.0.8",
13767
13774
  color: "^4.2.3",
13768
13775
  "react-supergrid": "^1.0.10",
13769
13776
  "react-toastify": "^10.0.5",
@@ -14761,37 +14768,37 @@ var RatsNestOverlay = function(param) {
14761
14768
  });
14762
14769
  };
14763
14770
  // src/components/CanvasElementsRenderer.tsx
14771
+ var import_circuit_json_to_connectivity_map = require("circuit-json-to-connectivity-map");
14764
14772
  var import_jsx_runtime13 = require("react/jsx-runtime");
14765
14773
  var CanvasElementsRenderer = function(props) {
14766
14774
  var transform = props.transform, elements = props.elements;
14767
- var primitivesWithoutInteractionMetadata = (0, import_react16.useMemo)(function() {
14775
+ var _ref = _sliced_to_array((0, import_react16.useMemo)(function() {
14768
14776
  var primitivesWithoutInteractionMetadata2 = props.elements.flatMap(function(elm) {
14769
14777
  return convertElementToPrimitives(elm, props.elements);
14770
14778
  });
14771
- return primitivesWithoutInteractionMetadata2;
14779
+ var connectivityMap2 = (0, import_circuit_json_to_connectivity_map.getFullConnectivityMapFromCircuitJson)(props.elements);
14780
+ return [
14781
+ primitivesWithoutInteractionMetadata2,
14782
+ connectivityMap2
14783
+ ];
14772
14784
  }, [
14773
14785
  props.elements
14774
- ]);
14775
- var _ref = _sliced_to_array((0, import_react15.useState)(primitivesWithoutInteractionMetadata), 2), primitives = _ref[0], setPrimitives = _ref[1];
14786
+ ]), 2), primitivesWithoutInteractionMetadata = _ref[0], connectivityMap = _ref[1];
14787
+ var _ref1 = _sliced_to_array((0, import_react15.useState)(primitivesWithoutInteractionMetadata), 2), primitives = _ref1[0], setPrimitives = _ref1[1];
14776
14788
  return /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(MouseElementTracker, {
14777
14789
  transform: transform,
14778
14790
  primitives: primitivesWithoutInteractionMetadata,
14779
14791
  onMouseHoverOverPrimitives: function(primitivesHoveredOver) {
14780
- var primitiveIdsWithMouseOver = new Set(primitivesHoveredOver.map(function(p) {
14781
- return p._pcb_drawing_object_id;
14782
- }));
14783
- var newPrimitives = [];
14792
+ var connectedPrimitiveIds = [];
14784
14793
  var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
14785
14794
  try {
14786
- for(var _iterator = primitivesWithoutInteractionMetadata[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){
14795
+ for(var _iterator = primitivesHoveredOver[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){
14787
14796
  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;
14797
+ if (primitive._element && "pcb_port_id" in primitive._element) {
14798
+ var _connectedPrimitiveIds;
14799
+ var connectedPrimitivesList = connectivityMap.getNetConnectedToId(primitive._element.pcb_port_id);
14800
+ (_connectedPrimitiveIds = connectedPrimitiveIds).push.apply(_connectedPrimitiveIds, _to_consumable_array(connectivityMap.getIdsConnectedToNet(connectedPrimitivesList)));
14793
14801
  }
14794
- newPrimitives.push(newPrimitive);
14795
14802
  }
14796
14803
  } catch (err) {
14797
14804
  _didIteratorError = true;
@@ -14807,6 +14814,39 @@ var CanvasElementsRenderer = function(props) {
14807
14814
  }
14808
14815
  }
14809
14816
  }
14817
+ var primitiveIdsWithMouseOver = new Set(primitivesHoveredOver.map(function(p) {
14818
+ return p._pcb_drawing_object_id;
14819
+ }));
14820
+ var newPrimitives = [];
14821
+ var _iteratorNormalCompletion1 = true, _didIteratorError1 = false, _iteratorError1 = undefined;
14822
+ try {
14823
+ for(var _iterator1 = primitivesWithoutInteractionMetadata[Symbol.iterator](), _step1; !(_iteratorNormalCompletion1 = (_step1 = _iterator1.next()).done); _iteratorNormalCompletion1 = true){
14824
+ var primitive1 = _step1.value;
14825
+ var newPrimitive = _object_spread({}, primitive1);
14826
+ if (primitiveIdsWithMouseOver.has(primitive1._pcb_drawing_object_id)) {
14827
+ newPrimitive.is_mouse_over = true;
14828
+ } else if (primitive1._element && ("pcb_trace_id" in primitive1._element && connectedPrimitiveIds.includes(primitive1._element.pcb_trace_id) || "pcb_port_id" in primitive1._element && connectedPrimitiveIds.includes(primitive1._element.pcb_port_id))) {
14829
+ newPrimitive.is_in_highlighted_net = true;
14830
+ } else {
14831
+ newPrimitive.is_in_highlighted_net = false;
14832
+ newPrimitive.is_mouse_over = false;
14833
+ }
14834
+ newPrimitives.push(newPrimitive);
14835
+ }
14836
+ } catch (err) {
14837
+ _didIteratorError1 = true;
14838
+ _iteratorError1 = err;
14839
+ } finally{
14840
+ try {
14841
+ if (!_iteratorNormalCompletion1 && _iterator1.return != null) {
14842
+ _iterator1.return();
14843
+ }
14844
+ } finally{
14845
+ if (_didIteratorError1) {
14846
+ throw _iteratorError1;
14847
+ }
14848
+ }
14849
+ }
14810
14850
  setPrimitives(newPrimitives);
14811
14851
  },
14812
14852
  children: /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(EditPlacementOverlay, {