@tscircuit/pcb-viewer 1.9.0 → 1.9.2

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.d.ts CHANGED
@@ -35,6 +35,7 @@ type EditEvent = EditComponentLocationEvent | EditTraceHintEvent;
35
35
 
36
36
  interface State {
37
37
  selected_layer: LayerRef;
38
+ pcb_viewer_id: string;
38
39
  in_edit_mode: boolean;
39
40
  in_move_footprint_mode: boolean;
40
41
  in_draw_trace_mode: boolean;
package/dist/index.js CHANGED
@@ -11455,20 +11455,20 @@ var require_dist3 = __commonJS({
11455
11455
  });
11456
11456
  module2.exports = __toCommonJS2(src_exports2);
11457
11457
  var import_transformation_matrix10 = require("transformation-matrix");
11458
- var import_react18 = require("react");
11458
+ var import_react19 = require("react");
11459
11459
  var useMouseMatrixTransform2 = function() {
11460
11460
  var props = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {};
11461
- var extRef = (0, import_react18.useRef)(null);
11462
- var _ref = _sliced_to_array((0, import_react18.useState)(0), 2), lastDragCancelTime = _ref[0], setLastDragCancelTime = _ref[1];
11461
+ var extRef = (0, import_react19.useRef)(null);
11462
+ var _ref = _sliced_to_array((0, import_react19.useState)(0), 2), lastDragCancelTime = _ref[0], setLastDragCancelTime = _ref[1];
11463
11463
  var _props_canvasElm;
11464
11464
  var outerCanvasElm = (_props_canvasElm = props.canvasElm) !== null && _props_canvasElm !== void 0 ? _props_canvasElm : extRef.current;
11465
11465
  var _props_initialTransform;
11466
- var _ref1 = _sliced_to_array((0, import_react18.useState)((_props_initialTransform = props.initialTransform) !== null && _props_initialTransform !== void 0 ? _props_initialTransform : (0, import_transformation_matrix10.identity)()), 2), internalTransform = _ref1[0], setInternalTransform = _ref1[1];
11467
- var _ref2 = _sliced_to_array((0, import_react18.useState)(0), 2), waitCounter = _ref2[0], setWaitCounter = _ref2[1];
11468
- var _ref3 = _sliced_to_array((0, import_react18.useReducer)(function(s) {
11466
+ var _ref1 = _sliced_to_array((0, import_react19.useState)((_props_initialTransform = props.initialTransform) !== null && _props_initialTransform !== void 0 ? _props_initialTransform : (0, import_transformation_matrix10.identity)()), 2), internalTransform = _ref1[0], setInternalTransform = _ref1[1];
11467
+ var _ref2 = _sliced_to_array((0, import_react19.useState)(0), 2), waitCounter = _ref2[0], setWaitCounter = _ref2[1];
11468
+ var _ref3 = _sliced_to_array((0, import_react19.useReducer)(function(s) {
11469
11469
  return s + 1;
11470
11470
  }, 0), 2), extChangeCounter = _ref3[0], incExtChangeCounter = _ref3[1];
11471
- var setTransform = (0, import_react18.useCallback)(function(newTransform) {
11471
+ var setTransform = (0, import_react19.useCallback)(function(newTransform) {
11472
11472
  if (props.onSetTransform) {
11473
11473
  props.onSetTransform(newTransform);
11474
11474
  }
@@ -11479,7 +11479,7 @@ var require_dist3 = __commonJS({
11479
11479
  props.onSetTransform,
11480
11480
  setInternalTransform
11481
11481
  ]);
11482
- var setTransformExt = (0, import_react18.useCallback)(function(newTransform) {
11482
+ var setTransformExt = (0, import_react19.useCallback)(function(newTransform) {
11483
11483
  setTransform(newTransform);
11484
11484
  incExtChangeCounter();
11485
11485
  }, [
@@ -11487,10 +11487,10 @@ var require_dist3 = __commonJS({
11487
11487
  ]);
11488
11488
  var _props_transform;
11489
11489
  var transform = (_props_transform = props.transform) !== null && _props_transform !== void 0 ? _props_transform : internalTransform;
11490
- var cancelDrag = (0, import_react18.useCallback)(function() {
11490
+ var cancelDrag = (0, import_react19.useCallback)(function() {
11491
11491
  setLastDragCancelTime(Date.now());
11492
11492
  }, []);
11493
- (0, import_react18.useEffect)(function() {
11493
+ (0, import_react19.useEffect)(function() {
11494
11494
  var handleMouseDown = function handleMouseDown(e) {
11495
11495
  m0 = getMousePos(e);
11496
11496
  if (Date.now() - lastDragCancelTime < 100) return;
@@ -11582,7 +11582,7 @@ var require_dist3 = __commonJS({
11582
11582
  extChangeCounter,
11583
11583
  lastDragCancelTime
11584
11584
  ]);
11585
- var applyTransformToPoint = (0, import_react18.useCallback)(function(obj) {
11585
+ var applyTransformToPoint = (0, import_react19.useCallback)(function(obj) {
11586
11586
  return (0, import_transformation_matrix10.applyToPoint)(transform, obj);
11587
11587
  }, [
11588
11588
  transform
@@ -11613,7 +11613,7 @@ __export(src_exports, {
11613
11613
  });
11614
11614
  module.exports = __toCommonJS(src_exports);
11615
11615
  // src/PCBViewer.tsx
11616
- var import_react17 = require("react");
11616
+ var import_react18 = require("react");
11617
11617
  var import_react_fiber = require("@tscircuit/react-fiber");
11618
11618
  var import_builder2 = require("@tscircuit/builder");
11619
11619
  // src/components/CanvasPrimitiveRenderer.tsx
@@ -12481,6 +12481,7 @@ var createStore = function() {
12481
12481
  return (0, import_zustand.createStore)(function(set) {
12482
12482
  return _object_spread_props(_object_spread({
12483
12483
  selected_layer: "top",
12484
+ pcb_viewer_id: "pcb_viewer_".concat(Math.random().toString().slice(2, 10)),
12484
12485
  in_edit_mode: false,
12485
12486
  in_move_footprint_mode: false,
12486
12487
  in_draw_trace_mode: false,
@@ -12593,7 +12594,7 @@ var CanvasPrimitiveRenderer = function(param) {
12593
12594
  });
12594
12595
  };
12595
12596
  // src/components/CanvasElementsRenderer.tsx
12596
- var import_react14 = require("react");
12597
+ var import_react15 = require("react");
12597
12598
  // src/lib/convert-element-to-primitive.ts
12598
12599
  var import_soup_util = __toESM(require_dist2());
12599
12600
  // src/lib/util/expand-stroke.ts
@@ -12919,7 +12920,7 @@ var convertElementToPrimitives = function(element, allElements) {
12919
12920
  y: y6,
12920
12921
  w: width2,
12921
12922
  h: height2,
12922
- layer: "drill",
12923
+ layer: "top",
12923
12924
  _element: element,
12924
12925
  _parent_pcb_component: _parent_pcb_component,
12925
12926
  _parent_source_component: _parent_source_component,
@@ -13656,7 +13657,7 @@ var import_soup2 = __toESM(require_dist());
13656
13657
  // package.json
13657
13658
  var package_default = {
13658
13659
  name: "@tscircuit/pcb-viewer",
13659
- version: "1.8.2",
13660
+ version: "1.9.1",
13660
13661
  main: "dist/index.js",
13661
13662
  repository: "tscircuit/pcb-viewer",
13662
13663
  license: "MIT",
@@ -13680,6 +13681,7 @@ var package_default = {
13680
13681
  "@storybook/react": "^8.0.6",
13681
13682
  "@swc/core": "^1.4.12",
13682
13683
  "@tscircuit/builder": "^1.11.4",
13684
+ "@tscircuit/core": "^0.0.41",
13683
13685
  "@tscircuit/eagle-xml-converter": "^0.0.6",
13684
13686
  "@tscircuit/props": "^0.0.46",
13685
13687
  "@tscircuit/react-fiber": "^1.1.25",
@@ -13707,6 +13709,7 @@ var package_default = {
13707
13709
  "@emotion/css": "^11.11.2",
13708
13710
  color: "^4.2.3",
13709
13711
  "react-supergrid": "^1.0.10",
13712
+ "react-toastify": "^10.0.5",
13710
13713
  "transformation-matrix": "^2.13.0",
13711
13714
  zustand: "^4.5.2"
13712
13715
  }
@@ -14225,7 +14228,7 @@ var EditPlacementOverlay = function(param) {
14225
14228
  };
14226
14229
  // src/components/EditTraceHintOverlay.tsx
14227
14230
  var import_soup_util2 = __toESM(require_dist2());
14228
- var import_react13 = require("react");
14231
+ var import_react14 = require("react");
14229
14232
  var import_transformation_matrix6 = require("transformation-matrix");
14230
14233
  // src/components/HotkeyActionMenu.tsx
14231
14234
  var import_css3 = require("@emotion/css");
@@ -14268,8 +14271,42 @@ var HotkeyActionMenu = function(param) {
14268
14271
  })
14269
14272
  });
14270
14273
  };
14271
- // src/components/EditTraceHintOverlay.tsx
14274
+ // src/lib/toast.tsx
14275
+ var import_react13 = require("react");
14276
+ var import_react_toastify = require("react-toastify");
14277
+ var import_inject_style = require("react-toastify/dist/inject-style");
14272
14278
  var import_jsx_runtime10 = require("react/jsx-runtime");
14279
+ var useToast = function() {
14280
+ var pcb_viewer_id = useGlobalStore(function(s) {
14281
+ return s.pcb_viewer_id;
14282
+ });
14283
+ var toast = function(message, opts) {
14284
+ return (0, import_react_toastify.toast)(message, _object_spread({
14285
+ containerId: pcb_viewer_id
14286
+ }, opts));
14287
+ };
14288
+ toast.error = function(message, opts) {
14289
+ return import_react_toastify.toast.error(message, _object_spread({
14290
+ containerId: pcb_viewer_id
14291
+ }, opts));
14292
+ };
14293
+ toast.promise = import_react_toastify.toast.promise;
14294
+ return toast;
14295
+ };
14296
+ var ToastContainer = function() {
14297
+ (0, import_react13.useEffect)(function() {
14298
+ (0, import_inject_style.injectStyle)();
14299
+ }, []);
14300
+ var pcb_viewer_id = useGlobalStore(function(s) {
14301
+ return s.pcb_viewer_id;
14302
+ });
14303
+ return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(import_react_toastify.ToastContainer, {
14304
+ position: "top-center",
14305
+ containerId: pcb_viewer_id
14306
+ });
14307
+ };
14308
+ // src/components/EditTraceHintOverlay.tsx
14309
+ var import_jsx_runtime11 = require("react/jsx-runtime");
14273
14310
  var isInsideOfSmtpad = function(elm, point) {
14274
14311
  var padding = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : 0;
14275
14312
  if (elm.shape === "circle") {
@@ -14302,11 +14339,12 @@ var EditTraceHintOverlay = function(param) {
14302
14339
  var children = param.children, disabledProp = param.disabled, transform = param.transform, soup = param.soup, cancelPanDrag = param.cancelPanDrag, onCreateEditEvent = param.onCreateEditEvent, onModifyEditEvent = param.onModifyEditEvent;
14303
14340
  var _containerRef_current;
14304
14341
  if (!transform) transform = (0, import_transformation_matrix6.identity)();
14305
- var containerRef = (0, import_react13.useRef)(null);
14342
+ var containerRef = (0, import_react14.useRef)(null);
14306
14343
  var containerBounds = (_containerRef_current = containerRef.current) === null || _containerRef_current === void 0 ? void 0 : _containerRef_current.getBoundingClientRect();
14307
- var _ref = _sliced_to_array((0, import_react13.useState)(null), 2), selectedElement = _ref[0], setSelectedElement = _ref[1];
14308
- var _ref1 = _sliced_to_array((0, import_react13.useState)(null), 2), dragState = _ref1[0], setDragState = _ref1[1];
14309
- var _ref2 = _sliced_to_array((0, import_react13.useState)(false), 2), shouldCreateAsVia = _ref2[0], setShouldCreateAsVia = _ref2[1];
14344
+ var _ref = _sliced_to_array((0, import_react14.useState)(null), 2), selectedElement = _ref[0], setSelectedElement = _ref[1];
14345
+ var toast = useToast();
14346
+ var _ref1 = _sliced_to_array((0, import_react14.useState)(null), 2), dragState = _ref1[0], setDragState = _ref1[1];
14347
+ var _ref2 = _sliced_to_array((0, import_react14.useState)(false), 2), shouldCreateAsVia = _ref2[0], setShouldCreateAsVia = _ref2[1];
14310
14348
  var isElementSelected = selectedElement !== null;
14311
14349
  var in_edit_trace_mode = useGlobalStore(function(s) {
14312
14350
  return s.in_draw_trace_mode;
@@ -14317,7 +14355,7 @@ var EditTraceHintOverlay = function(param) {
14317
14355
  ogCenterScreen = (0, import_transformation_matrix6.applyToPoint)(transform, dragState === null || dragState === void 0 ? void 0 : dragState.originalCenter);
14318
14356
  dragEndScreen = (0, import_transformation_matrix6.applyToPoint)(transform, dragState === null || dragState === void 0 ? void 0 : dragState.dragEnd);
14319
14357
  }
14320
- (0, import_react13.useEffect)(function() {
14358
+ (0, import_react14.useEffect)(function() {
14321
14359
  var keyDown = function keyDown(e) {
14322
14360
  if (e.key === "Escape") {
14323
14361
  setSelectedElement(null);
@@ -14332,7 +14370,7 @@ var EditTraceHintOverlay = function(param) {
14332
14370
  }, [
14333
14371
  isElementSelected
14334
14372
  ]);
14335
- return /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("div", {
14373
+ return /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)("div", {
14336
14374
  ref: containerRef,
14337
14375
  style: {
14338
14376
  position: "relative",
@@ -14354,6 +14392,10 @@ var EditTraceHintOverlay = function(param) {
14354
14392
  for(var _iterator = soup[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){
14355
14393
  var e2 = _step.value;
14356
14394
  if (e2.type === "pcb_smtpad" && isInsideOfSmtpad(e2, rwMousePoint, 10 / transform.a) || e2.type === "pcb_plated_hole" && isInsideOfPlatedHole(e2, rwMousePoint, 10 / transform.a)) {
14395
+ if (!e2.pcb_port_id) {
14396
+ toast.error('pcb_port_id is null on the selected "'.concat(e2.type, '"'));
14397
+ return;
14398
+ }
14357
14399
  setSelectedElement(e2);
14358
14400
  setShouldCreateAsVia(false);
14359
14401
  setDragState({
@@ -14454,7 +14496,7 @@ var EditTraceHintOverlay = function(param) {
14454
14496
  },
14455
14497
  children: [
14456
14498
  children,
14457
- in_edit_trace_mode && (dragState === null || dragState === void 0 ? void 0 : dragState.editEvent) && ogCenterScreen && dragEndScreen && /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("svg", {
14499
+ in_edit_trace_mode && (dragState === null || dragState === void 0 ? void 0 : dragState.editEvent) && ogCenterScreen && dragEndScreen && /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)("svg", {
14458
14500
  style: {
14459
14501
  position: "absolute",
14460
14502
  left: 0,
@@ -14466,7 +14508,7 @@ var EditTraceHintOverlay = function(param) {
14466
14508
  width: containerBounds === null || containerBounds === void 0 ? void 0 : containerBounds.width,
14467
14509
  height: containerBounds === null || containerBounds === void 0 ? void 0 : containerBounds.height,
14468
14510
  children: [
14469
- /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("path", {
14511
+ /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("path", {
14470
14512
  stroke: "red",
14471
14513
  d: "M ".concat(ogCenterScreen.x, " ").concat(ogCenterScreen.y, " ").concat(dragState === null || dragState === void 0 ? void 0 : dragState.editEvent.route.map(function(p) {
14472
14514
  return (0, import_transformation_matrix6.applyToPoint)(transform, p);
@@ -14476,15 +14518,15 @@ var EditTraceHintOverlay = function(param) {
14476
14518
  }),
14477
14519
  dragState === null || dragState === void 0 ? void 0 : dragState.editEvent.route.map(function(r, i) {
14478
14520
  var rScreen = (0, import_transformation_matrix6.applyToPoint)(transform, r);
14479
- return /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(import_react13.Fragment, {
14521
+ return /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)(import_react14.Fragment, {
14480
14522
  children: [
14481
- r.via && /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("circle", {
14523
+ r.via && /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("circle", {
14482
14524
  cx: rScreen.x,
14483
14525
  cy: rScreen.y,
14484
14526
  r: 16,
14485
14527
  stroke: "red"
14486
14528
  }),
14487
- /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("circle", {
14529
+ /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("circle", {
14488
14530
  cx: rScreen.x,
14489
14531
  cy: rScreen.y,
14490
14532
  r: 8,
@@ -14493,13 +14535,13 @@ var EditTraceHintOverlay = function(param) {
14493
14535
  ]
14494
14536
  }, "r-".concat(i));
14495
14537
  }),
14496
- shouldCreateAsVia && /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("circle", {
14538
+ shouldCreateAsVia && /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("circle", {
14497
14539
  cx: dragEndScreen.x,
14498
14540
  cy: dragEndScreen.y,
14499
14541
  r: 16,
14500
14542
  stroke: "red"
14501
14543
  }, "via-outer-circle"),
14502
- /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("circle", {
14544
+ /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("circle", {
14503
14545
  cx: dragEndScreen.x,
14504
14546
  cy: dragEndScreen.y,
14505
14547
  r: 8,
@@ -14507,7 +14549,7 @@ var EditTraceHintOverlay = function(param) {
14507
14549
  })
14508
14550
  ]
14509
14551
  }),
14510
- !disabled && /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("svg", {
14552
+ !disabled && /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("svg", {
14511
14553
  style: {
14512
14554
  position: "absolute",
14513
14555
  left: 0,
@@ -14524,16 +14566,16 @@ var EditTraceHintOverlay = function(param) {
14524
14566
  var route = e.route;
14525
14567
  var pcb_port = (0, import_soup_util2.su)(soup).pcb_port.get(e.pcb_port_id);
14526
14568
  var pcb_port_screen = (0, import_transformation_matrix6.applyToPoint)(transform, pcb_port);
14527
- return /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(import_react13.Fragment, {
14569
+ return /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)(import_react14.Fragment, {
14528
14570
  children: [
14529
- /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("rect", {
14571
+ /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("rect", {
14530
14572
  x: pcb_port_screen.x - 10,
14531
14573
  y: pcb_port_screen.y - 10,
14532
14574
  width: 20,
14533
14575
  height: 20,
14534
14576
  stroke: "red"
14535
14577
  }, "rect-".concat(e.pcb_port_id)),
14536
- /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("path", {
14578
+ /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("path", {
14537
14579
  stroke: "red",
14538
14580
  d: "M ".concat(pcb_port_screen.x, " ").concat(pcb_port_screen.y, " ").concat(route.map(function(r) {
14539
14581
  return (0, import_transformation_matrix6.applyToPoint)(transform, r);
@@ -14544,15 +14586,15 @@ var EditTraceHintOverlay = function(param) {
14544
14586
  route.map(function(r) {
14545
14587
  return _object_spread({}, r, (0, import_transformation_matrix6.applyToPoint)(transform, r));
14546
14588
  }).map(function(r, i) {
14547
- return /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(import_react13.Fragment, {
14589
+ return /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)(import_react14.Fragment, {
14548
14590
  children: [
14549
- /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("circle", {
14591
+ /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("circle", {
14550
14592
  cx: r.x,
14551
14593
  cy: r.y,
14552
14594
  r: 8,
14553
14595
  stroke: "red"
14554
14596
  }),
14555
- r.via && /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("circle", {
14597
+ r.via && /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("circle", {
14556
14598
  cx: r.x,
14557
14599
  cy: r.y,
14558
14600
  r: 16,
@@ -14566,13 +14608,13 @@ var EditTraceHintOverlay = function(param) {
14566
14608
  }, e.pcb_trace_hint_id);
14567
14609
  })
14568
14610
  }, "pcb-trace-hints"),
14569
- /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("div", {
14611
+ /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("div", {
14570
14612
  style: {
14571
14613
  position: "absolute",
14572
14614
  right: 0,
14573
14615
  bottom: 0
14574
14616
  },
14575
- children: isElementSelected && /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(HotkeyActionMenu, {
14617
+ children: isElementSelected && /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(HotkeyActionMenu, {
14576
14618
  hotkeys: [
14577
14619
  {
14578
14620
  key: "v",
@@ -14590,7 +14632,7 @@ var EditTraceHintOverlay = function(param) {
14590
14632
  // src/components/RatsNestOverlay.tsx
14591
14633
  var import_transformation_matrix7 = require("transformation-matrix");
14592
14634
  var import_soup_util3 = __toESM(require_dist2());
14593
- var import_jsx_runtime11 = require("react/jsx-runtime");
14635
+ var import_jsx_runtime12 = require("react/jsx-runtime");
14594
14636
  var RatsNestOverlay = function(param) {
14595
14637
  var transform = param.transform, soup = param.soup, children = param.children;
14596
14638
  var isShowingRatsNest = useGlobalStore(function(s) {
@@ -14612,13 +14654,13 @@ var RatsNestOverlay = function(param) {
14612
14654
  groups.push(group);
14613
14655
  }
14614
14656
  });
14615
- return /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)("div", {
14657
+ return /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)("div", {
14616
14658
  style: {
14617
14659
  position: "relative"
14618
14660
  },
14619
14661
  children: [
14620
14662
  children,
14621
- /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("svg", {
14663
+ /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("svg", {
14622
14664
  style: {
14623
14665
  position: "absolute",
14624
14666
  left: 0,
@@ -14647,7 +14689,7 @@ var RatsNestOverlay = function(param) {
14647
14689
  }
14648
14690
  return lines.map(function(param, index2) {
14649
14691
  var _param = _sliced_to_array(param, 2), start = _param[0], end = _param[1];
14650
- return /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("line", {
14692
+ return /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("line", {
14651
14693
  x1: start.x,
14652
14694
  y1: start.y,
14653
14695
  x2: end.x,
@@ -14662,10 +14704,10 @@ var RatsNestOverlay = function(param) {
14662
14704
  });
14663
14705
  };
14664
14706
  // src/components/CanvasElementsRenderer.tsx
14665
- var import_jsx_runtime12 = require("react/jsx-runtime");
14707
+ var import_jsx_runtime13 = require("react/jsx-runtime");
14666
14708
  var CanvasElementsRenderer = function(props) {
14667
14709
  var transform = props.transform, elements = props.elements;
14668
- var primitives = (0, import_react14.useMemo)(function() {
14710
+ var primitives = (0, import_react15.useMemo)(function() {
14669
14711
  var primitives2 = props.elements.flatMap(function(elm) {
14670
14712
  return convertElementToPrimitives(elm, props.elements);
14671
14713
  });
@@ -14673,34 +14715,34 @@ var CanvasElementsRenderer = function(props) {
14673
14715
  }, [
14674
14716
  props.elements
14675
14717
  ]);
14676
- return /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(MouseElementTracker, {
14718
+ return /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(MouseElementTracker, {
14677
14719
  transform: transform,
14678
14720
  primitives: primitives,
14679
- children: /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(EditPlacementOverlay, {
14721
+ children: /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(EditPlacementOverlay, {
14680
14722
  disabled: !props.allowEditing,
14681
14723
  transform: transform,
14682
14724
  soup: elements,
14683
14725
  cancelPanDrag: props.cancelPanDrag,
14684
14726
  onCreateEditEvent: props.onCreateEditEvent,
14685
14727
  onModifyEditEvent: props.onModifyEditEvent,
14686
- children: /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(EditTraceHintOverlay, {
14728
+ children: /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(EditTraceHintOverlay, {
14687
14729
  disabled: !props.allowEditing,
14688
14730
  transform: transform,
14689
14731
  soup: elements,
14690
14732
  cancelPanDrag: props.cancelPanDrag,
14691
14733
  onCreateEditEvent: props.onCreateEditEvent,
14692
14734
  onModifyEditEvent: props.onModifyEditEvent,
14693
- children: /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(DimensionOverlay, {
14735
+ children: /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(DimensionOverlay, {
14694
14736
  transform: transform,
14695
- children: /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(ToolbarOverlay, {
14737
+ children: /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(ToolbarOverlay, {
14696
14738
  elements: elements,
14697
- children: /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(ErrorOverlay, {
14739
+ children: /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(ErrorOverlay, {
14698
14740
  transform: transform,
14699
14741
  elements: elements,
14700
- children: /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(RatsNestOverlay, {
14742
+ children: /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(RatsNestOverlay, {
14701
14743
  transform: transform,
14702
14744
  soup: elements,
14703
- children: /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(CanvasPrimitiveRenderer, {
14745
+ children: /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(CanvasPrimitiveRenderer, {
14704
14746
  transform: transform,
14705
14747
  primitives: primitives,
14706
14748
  width: props.width,
@@ -14721,11 +14763,11 @@ var import_use_mouse_matrix_transform = __toESM(require_dist3());
14721
14763
  var noop = function noop() {};
14722
14764
  var isBrowser = typeof window !== "undefined";
14723
14765
  // node_modules/react-use/esm/useIsomorphicLayoutEffect.js
14724
- var import_react15 = require("react");
14725
- var useIsomorphicLayoutEffect = isBrowser ? import_react15.useLayoutEffect : import_react15.useEffect;
14766
+ var import_react16 = require("react");
14767
+ var useIsomorphicLayoutEffect = isBrowser ? import_react16.useLayoutEffect : import_react16.useEffect;
14726
14768
  var useIsomorphicLayoutEffect_default = useIsomorphicLayoutEffect;
14727
14769
  // node_modules/react-use/esm/useMeasure.js
14728
- var import_react16 = require("react");
14770
+ var import_react17 = require("react");
14729
14771
  var defaultState = {
14730
14772
  x: 0,
14731
14773
  y: 0,
@@ -14737,9 +14779,9 @@ var defaultState = {
14737
14779
  right: 0
14738
14780
  };
14739
14781
  function useMeasure() {
14740
- var _a = (0, import_react16.useState)(null), element = _a[0], ref = _a[1];
14741
- var _b = (0, import_react16.useState)(defaultState), rect = _b[0], setRect = _b[1];
14742
- var observer = (0, import_react16.useMemo)(function() {
14782
+ var _a = (0, import_react17.useState)(null), element = _a[0], ref = _a[1];
14783
+ var _b = (0, import_react17.useState)(defaultState), rect = _b[0], setRect = _b[1];
14784
+ var observer = (0, import_react17.useMemo)(function() {
14743
14785
  return new window.ResizeObserver(function(entries) {
14744
14786
  if (entries[0]) {
14745
14787
  var _a2 = entries[0].contentRect, x = _a2.x, y = _a2.y, width = _a2.width, height = _a2.height, top_1 = _a2.top, left = _a2.left, bottom = _a2.bottom, right = _a2.right;
@@ -14844,20 +14886,20 @@ var applyEditEvents = function(soup, edit_events) {
14844
14886
  return soup;
14845
14887
  };
14846
14888
  // src/PCBViewer.tsx
14847
- var import_jsx_runtime13 = require("react/jsx-runtime");
14889
+ var import_jsx_runtime14 = require("react/jsx-runtime");
14848
14890
  var defaultTransform = (0, import_transformation_matrix9.compose)((0, import_transformation_matrix9.translate)(400, 300), (0, import_transformation_matrix9.scale)(40, -40));
14849
14891
  var PCBViewer = function(param) {
14850
14892
  var children = param.children, soup = param.soup, _param_height = param.height, height = _param_height === void 0 ? 600 : _param_height, initialState = param.initialState, _param_allowEditing = param.allowEditing, allowEditing = _param_allowEditing === void 0 ? true : _param_allowEditing, editEventsProp = param.editEvents, onEditEventsChanged = param.onEditEventsChanged;
14851
- var _ref = _sliced_to_array((0, import_react17.useState)([]), 2), stateElements = _ref[0], setStateElements = _ref[1];
14893
+ var _ref = _sliced_to_array((0, import_react18.useState)([]), 2), stateElements = _ref[0], setStateElements = _ref[1];
14852
14894
  var _useMeasure_default = _sliced_to_array(useMeasure_default(), 2), ref = _useMeasure_default[0], refDimensions = _useMeasure_default[1];
14853
- var _ref1 = _sliced_to_array((0, import_react17.useState)(defaultTransform), 2), transform = _ref1[0], setTransformInternal = _ref1[1];
14895
+ var _ref1 = _sliced_to_array((0, import_react18.useState)(defaultTransform), 2), transform = _ref1[0], setTransformInternal = _ref1[1];
14854
14896
  var _ref2 = (0, import_use_mouse_matrix_transform.default)({
14855
14897
  transform: transform,
14856
14898
  onSetTransform: setTransformInternal
14857
14899
  }), transformRef = _ref2.ref, setTransform = _ref2.setTransform, cancelPanDrag = _ref2.cancelDrag;
14858
- var _ref3 = _sliced_to_array((0, import_react17.useState)([]), 2), editEvents = _ref3[0], setEditEvents = _ref3[1];
14900
+ var _ref3 = _sliced_to_array((0, import_react18.useState)([]), 2), editEvents = _ref3[0], setEditEvents = _ref3[1];
14859
14901
  editEvents = editEventsProp !== null && editEventsProp !== void 0 ? editEventsProp : editEvents;
14860
- var _ref4 = _sliced_to_array((0, import_react17.useState)(null), 2), error = _ref4[0], setError = _ref4[1];
14902
+ var _ref4 = _sliced_to_array((0, import_react18.useState)(null), 2), error = _ref4[0], setError = _ref4[1];
14861
14903
  var resetTransform = function() {
14862
14904
  var elmBounds = (refDimensions === null || refDimensions === void 0 ? void 0 : refDimensions.width) > 0 ? refDimensions : {
14863
14905
  width: 500,
@@ -14881,7 +14923,7 @@ var PCBViewer = function(param) {
14881
14923
  setTransform((0, import_transformation_matrix9.compose)((0, import_transformation_matrix9.translate)(((_elmBounds_width1 = elmBounds.width) !== null && _elmBounds_width1 !== void 0 ? _elmBounds_width1 : 0) / 2, ((_elmBounds_height1 = elmBounds.height) !== null && _elmBounds_height1 !== void 0 ? _elmBounds_height1 : 0) / 2), // translate(100, 0),
14882
14924
  (0, import_transformation_matrix9.scale)(scaleFactor, -scaleFactor, 0, 0), (0, import_transformation_matrix9.translate)(-center.x, -center.y)));
14883
14925
  };
14884
- (0, import_react17.useEffect)(function() {
14926
+ (0, import_react18.useEffect)(function() {
14885
14927
  var doRender = function doRender() {
14886
14928
  return _doRender.apply(this, arguments);
14887
14929
  };
@@ -14917,7 +14959,7 @@ var PCBViewer = function(param) {
14917
14959
  }, [
14918
14960
  children
14919
14961
  ]);
14920
- (0, import_react17.useEffect)(function() {
14962
+ (0, import_react18.useEffect)(function() {
14921
14963
  if (refDimensions && refDimensions.width !== 0 && (children || soup)) {
14922
14964
  resetTransform();
14923
14965
  }
@@ -14925,7 +14967,7 @@ var PCBViewer = function(param) {
14925
14967
  children,
14926
14968
  refDimensions
14927
14969
  ]);
14928
- if (error) return /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)("div", {
14970
+ if (error) return /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)("div", {
14929
14971
  style: {
14930
14972
  color: "red"
14931
14973
  },
@@ -14938,7 +14980,7 @@ var PCBViewer = function(param) {
14938
14980
  var pcbElmsPreEdit = (soup !== null && soup !== void 0 ? soup : stateElements).filter(function(e) {
14939
14981
  return e.type.startsWith("pcb_") || e.type.startsWith("source_");
14940
14982
  });
14941
- var elements = (0, import_react17.useMemo)(function() {
14983
+ var elements = (0, import_react18.useMemo)(function() {
14942
14984
  return applyEditEvents(pcbElmsPreEdit, editEvents);
14943
14985
  }, [
14944
14986
  pcbElmsPreEdit,
@@ -14959,31 +15001,34 @@ var PCBViewer = function(param) {
14959
15001
  setEditEvents(newEditEvents);
14960
15002
  onEditEventsChanged === null || onEditEventsChanged === void 0 ? void 0 : onEditEventsChanged(newEditEvents);
14961
15003
  };
14962
- return /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("div", {
15004
+ return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("div", {
14963
15005
  ref: transformRef,
14964
- children: /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("div", {
15006
+ children: /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("div", {
14965
15007
  ref: ref,
14966
- children: /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(ContextProviders, {
15008
+ children: /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)(ContextProviders, {
14967
15009
  initialState: initialState,
14968
- children: /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(CanvasElementsRenderer, {
14969
- transform: transform,
14970
- height: height,
14971
- width: refDimensions.width,
14972
- allowEditing: allowEditing,
14973
- cancelPanDrag: cancelPanDrag,
14974
- onCreateEditEvent: onCreateEditEvent,
14975
- onModifyEditEvent: onModifyEditEvent,
14976
- grid: {
14977
- spacing: 1,
14978
- view_window: {
14979
- left: 0,
14980
- right: refDimensions.width || 500,
14981
- top: height,
14982
- bottom: 0
14983
- }
14984
- },
14985
- elements: elements
14986
- }, refDimensions.width)
15010
+ children: [
15011
+ /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(CanvasElementsRenderer, {
15012
+ transform: transform,
15013
+ height: height,
15014
+ width: refDimensions.width,
15015
+ allowEditing: allowEditing,
15016
+ cancelPanDrag: cancelPanDrag,
15017
+ onCreateEditEvent: onCreateEditEvent,
15018
+ onModifyEditEvent: onModifyEditEvent,
15019
+ grid: {
15020
+ spacing: 1,
15021
+ view_window: {
15022
+ left: 0,
15023
+ right: refDimensions.width || 500,
15024
+ top: height,
15025
+ bottom: 0
15026
+ }
15027
+ },
15028
+ elements: elements
15029
+ }, refDimensions.width),
15030
+ /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(ToastContainer, {})
15031
+ ]
14987
15032
  })
14988
15033
  })
14989
15034
  });