@tscircuit/rectdiff 0.0.19 → 0.0.21

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.
Files changed (117) hide show
  1. package/.github/workflows/bun-test.yml +1 -1
  2. package/dist/index.d.ts +1 -0
  3. package/dist/index.js +28 -35
  4. package/lib/solvers/RectDiffExpansionSolver/RectDiffExpansionSolver.ts +6 -3
  5. package/lib/solvers/RectDiffGridSolverPipeline/buildObstacleIndexes.ts +2 -1
  6. package/lib/solvers/RectDiffSeedingSolver/RectDiffSeedingSolver.ts +2 -7
  7. package/lib/types/capacity-mesh-types.ts +1 -0
  8. package/lib/utils/expandRectFromSeed.ts +3 -0
  9. package/lib/utils/rectToTree.ts +5 -1
  10. package/lib/utils/resizeSoftOverlaps.ts +8 -16
  11. package/package.json +1 -1
  12. package/tests/solver/__snapshots__/rectDiffGridSolverPipeline.snap.svg +3 -3
  13. package/tests/solver/both-points-equivalent/__snapshots__/both-points-equivalent.snap.svg +44 -0
  14. package/tests/solver/both-points-equivalent/both-points-equivalent.srj.json +64 -0
  15. package/tests/solver/both-points-equivalent/both-points-equivalent.test.ts +92 -0
  16. package/tests/solver/bugreport01-be84eb/__snapshots__/bugreport01-be84eb.snap.svg +44 -0
  17. package/tests/solver/bugreport01-be84eb/bugreport01-be84eb.json +929 -0
  18. package/tests/solver/bugreport01-be84eb/bugreport01-be84eb.test.ts +93 -0
  19. package/tests/solver/bugreport02-bc4361/__snapshots__/bugreport02-bc4361.snap.svg +44 -0
  20. package/tests/solver/bugreport02-bc4361/bugreport02-bc4361.json +1276 -0
  21. package/tests/solver/bugreport02-bc4361/bugreport02-bc4361.test.ts +93 -0
  22. package/tests/solver/bugreport03-fe4a17/__snapshots__/bugreport03-fe4a17.snap.svg +44 -0
  23. package/tests/solver/bugreport03-fe4a17/bugreport03-fe4a17.json +986 -0
  24. package/tests/solver/bugreport03-fe4a17/bugreport03-fe4a17.test.ts +93 -0
  25. package/tests/solver/bugreport07-d3f3be/__snapshots__/bugreport07-d3f3be.snap.svg +44 -0
  26. package/tests/solver/bugreport07-d3f3be/bugreport07-d3f3be.json +1211 -0
  27. package/tests/solver/bugreport07-d3f3be/bugreport07-d3f3be.test.ts +93 -0
  28. package/tests/solver/bugreport08-e3ec95/__snapshots__/bugreport08-e3ec95.snap.svg +44 -0
  29. package/tests/solver/bugreport08-e3ec95/bugreport08-e3ec95.json +1511 -0
  30. package/tests/solver/bugreport08-e3ec95/bugreport08-e3ec95.test.ts +93 -0
  31. package/tests/solver/bugreport09-618e09/__snapshots__/bugreport09-618e09.snap.svg +44 -0
  32. package/tests/solver/bugreport09-618e09/bugreport09-618e09.json +2827 -0
  33. package/tests/solver/bugreport09-618e09/bugreport09-618e09.test.ts +93 -0
  34. package/tests/solver/bugreport10-71239a/__snapshots__/bugreport10-71239a.snap.svg +44 -0
  35. package/tests/solver/bugreport10-71239a/bugreport10-71239a.json +890 -0
  36. package/tests/solver/bugreport10-71239a/bugreport10-71239a.test.ts +93 -0
  37. package/tests/solver/bugreport11-b2de3c/__snapshots__/bugreport11-b2de3c.snap.svg +44 -0
  38. package/tests/solver/bugreport11-b2de3c/bugreport11-b2de3c.json +4315 -0
  39. package/tests/solver/bugreport11-b2de3c/bugreport11-b2de3c.test.ts +93 -0
  40. package/tests/solver/bugreport12-35ce1c/__snapshots__/bugreport12-35ce1c.snap.svg +44 -0
  41. package/tests/solver/bugreport12-35ce1c/bugreport12-35ce1c.json +475 -0
  42. package/tests/solver/bugreport12-35ce1c/bugreport12-35ce1c.test.ts +93 -0
  43. package/tests/solver/bugreport13-b9a758/__snapshots__/bugreport13-b9a758.snap.svg +44 -0
  44. package/tests/solver/bugreport13-b9a758/bugreport13-b9a758.json +15815 -0
  45. package/tests/solver/bugreport13-b9a758/bugreport13-b9a758.test.ts +93 -0
  46. package/tests/solver/bugreport16-d95f38/__snapshots__/bugreport16-d95f38.snap.svg +44 -0
  47. package/tests/solver/bugreport16-d95f38/bugreport16-d95f38.json +623 -0
  48. package/tests/solver/bugreport16-d95f38/bugreport16-d95f38.test.ts +93 -0
  49. package/tests/solver/bugreport18-1b2d06/__snapshots__/bugreport18-1b2d06.snap.svg +44 -0
  50. package/tests/solver/bugreport18-1b2d06/bugreport18-1b2d06.json +543 -0
  51. package/tests/solver/bugreport18-1b2d06/bugreport18-1b2d06.test.ts +93 -0
  52. package/tests/solver/bugreport19/__snapshots__/bugreport19.snap.svg +44 -0
  53. package/tests/solver/bugreport19/bugreport19.json +678 -0
  54. package/tests/solver/bugreport19/bugreport19.test.ts +93 -0
  55. package/tests/solver/bugreport20-obstacle-clipping/__snapshots__/bugreport20-obstacle-clipping.snap.svg +44 -0
  56. package/tests/solver/bugreport20-obstacle-clipping/bugreport20-obstacle-clipping.json +109 -0
  57. package/tests/solver/bugreport20-obstacle-clipping/bugreport20-obstacle-clipping.test.ts +93 -0
  58. package/tests/solver/bugreport21-board-outline/__snapshots__/bugreport21-board-outline.snap.svg +44 -0
  59. package/tests/solver/bugreport21-board-outline/bugreport21-board-outline.json +148 -0
  60. package/tests/solver/bugreport21-board-outline/bugreport21-board-outline.test.ts +93 -0
  61. package/tests/solver/bugreport22-2a75ce/__snapshots__/bugreport22-2a75ce.snap.svg +44 -0
  62. package/tests/solver/bugreport22-2a75ce/bugreport22-2a75ce.json +1550 -0
  63. package/tests/solver/bugreport22-2a75ce/bugreport22-2a75ce.test.ts +93 -0
  64. package/tests/solver/bugreport23-LGA15x4/__snapshots__/bugreport23-LGA15x4.snap.svg +44 -0
  65. package/tests/solver/bugreport23-LGA15x4/bugreport23-LGA15x4.srj.json +2401 -0
  66. package/tests/solver/bugreport23-LGA15x4/bugreport23-LGA15x4.test.ts +92 -0
  67. package/tests/solver/bugreport24-05597c/__snapshots__/bugreport24-05597c.snap.svg +44 -0
  68. package/tests/solver/bugreport24-05597c/bugreport24-05597c.json +8427 -0
  69. package/tests/solver/bugreport24-05597c/bugreport24-05597c.test.ts +93 -0
  70. package/tests/solver/bugreport25-4b1d55/__snapshots__/bugreport25-4b1d55.snap.svg +44 -0
  71. package/tests/solver/bugreport25-4b1d55/bugreport25-4b1d55.json +119 -0
  72. package/tests/solver/bugreport25-4b1d55/bugreport25-4b1d55.test.ts +93 -0
  73. package/tests/solver/bugreport26-66b0b2/__snapshots__/bugreport26-66b0b2.snap.svg +44 -0
  74. package/tests/solver/bugreport26-66b0b2/bugreport26-66b0b2.json +1651 -0
  75. package/tests/solver/bugreport26-66b0b2/bugreport26-66b0b2.test.ts +93 -0
  76. package/tests/solver/bugreport27-dd3734/__snapshots__/bugreport27-dd3734.snap.svg +44 -0
  77. package/tests/solver/bugreport27-dd3734/bugreport27-dd3734.json +4116 -0
  78. package/tests/solver/bugreport27-dd3734/bugreport27-dd3734.test.ts +93 -0
  79. package/tests/solver/bugreport28-18a9ef/__snapshots__/bugreport28-18a9ef.snap.svg +44 -0
  80. package/tests/solver/bugreport28-18a9ef/bugreport28-18a9ef.json +4116 -0
  81. package/tests/solver/bugreport28-18a9ef/bugreport28-18a9ef.test.ts +93 -0
  82. package/tests/solver/bugreport29-7deae8/__snapshots__/bugreport29-7deae8.snap.svg +44 -0
  83. package/tests/solver/bugreport29-7deae8/bugreport29-7deae8.json +4118 -0
  84. package/tests/solver/bugreport29-7deae8/bugreport29-7deae8.test.ts +93 -0
  85. package/tests/solver/bugreport30-2174c8/__snapshots__/bugreport30-2174c8.snap.svg +44 -0
  86. package/tests/solver/bugreport30-2174c8/bugreport30-2174c8.json +4007 -0
  87. package/tests/solver/bugreport30-2174c8/bugreport30-2174c8.test.ts +93 -0
  88. package/tests/solver/bugreport33-213d45/__snapshots__/bugreport33-213d45.snap.svg +44 -0
  89. package/tests/solver/bugreport33-213d45/bugreport33-213d45.json +5089 -0
  90. package/tests/solver/bugreport33-213d45/bugreport33-213d45.test.ts +93 -0
  91. package/tests/solver/bugreport34-e9dea2/__snapshots__/bugreport34-e9dea2.snap.svg +44 -0
  92. package/tests/solver/bugreport34-e9dea2/bugreport34-e9dea2.json +3924 -0
  93. package/tests/solver/bugreport34-e9dea2/bugreport34-e9dea2.test.ts +93 -0
  94. package/tests/solver/bugreport35-191db9/__snapshots__/bugreport35-191db9.snap.svg +44 -0
  95. package/tests/solver/bugreport35-191db9/bugreport35-191db9.json +4237 -0
  96. package/tests/solver/bugreport35-191db9/bugreport35-191db9.test.ts +93 -0
  97. package/tests/solver/bugreport36-bf8303/__snapshots__/bugreport36-bf8303.snap.svg +44 -0
  98. package/tests/solver/bugreport36-bf8303/bugreport36-bf8303.json +29660 -0
  99. package/tests/solver/bugreport36-bf8303/bugreport36-bf8303.test.ts +93 -0
  100. package/tests/solver/interaction/__snapshots__/interaction.snap.svg +44 -0
  101. package/tests/solver/interaction/interaction.srj.json +58 -0
  102. package/tests/solver/interaction/interaction.test.ts +92 -0
  103. package/tests/solver/multi-point/__snapshots__/multi-point.snap.svg +44 -0
  104. package/tests/solver/multi-point/multi-point.srj.json +57 -0
  105. package/tests/solver/multi-point/multi-point.test.ts +92 -0
  106. package/tests/solver/no-better-path/__snapshots__/no-better-path.snap.svg +44 -0
  107. package/tests/solver/no-better-path/no-better-path.srj.json +48 -0
  108. package/tests/solver/no-better-path/no-better-path.test.ts +92 -0
  109. package/tests/solver/offboardconnects01/__snapshots__/offboardconnects01.snap.svg +44 -0
  110. package/tests/solver/offboardconnects01/offboardconnects01.srj.json +53 -0
  111. package/tests/solver/offboardconnects01/offboardconnects01.test.ts +92 -0
  112. package/tests/solver/pcb_trace_id-should-return-root-connection-name/__snapshots__/pcb_trace_id-should-return-root-connection-name.snap.svg +44 -0
  113. package/tests/solver/pcb_trace_id-should-return-root-connection-name/pcb_trace_id-should-return-root-connection-name.srj.json +129 -0
  114. package/tests/solver/pcb_trace_id-should-return-root-connection-name/pcb_trace_id-should-return-root-connection-name.test.ts +92 -0
  115. package/tests/solver/transitivity/__snapshots__/transitivity.snap.svg +44 -0
  116. package/tests/solver/transitivity/transitivity.srj.json +64 -0
  117. package/tests/solver/transitivity/transitivity.test.ts +92 -0
@@ -28,4 +28,4 @@ jobs:
28
28
  run: bun install
29
29
 
30
30
  - name: Run tests
31
- run: bun test
31
+ run: bun test --timeout 9999
package/dist/index.d.ts CHANGED
@@ -113,6 +113,7 @@ type RTreeRect = XYRect & {
113
113
  minY: number;
114
114
  maxX: number;
115
115
  maxY: number;
116
+ zLayers: number[];
116
117
  };
117
118
 
118
119
  interface SegmentWithAdjacentEmptySpace {
package/dist/index.js CHANGED
@@ -1063,6 +1063,7 @@ function expandRectFromSeed(params) {
1063
1063
  const initialH = Math.max(minSide, minReq.height);
1064
1064
  const blockers = [];
1065
1065
  const seen = /* @__PURE__ */ new Set();
1066
+ const totalLayers = placedIndexByLayer.length;
1066
1067
  const collectBlockers = (searchRect) => {
1067
1068
  const query = toQueryRect({ bounds, rect: searchRect });
1068
1069
  if (!query) return;
@@ -1075,6 +1076,8 @@ function expandRectFromSeed(params) {
1075
1076
  const placedLayer = placedIndexByLayer[z];
1076
1077
  if (placedLayer) {
1077
1078
  for (const entry of placedLayer.search(query)) {
1079
+ const isFullStack = entry.zLayers.length >= totalLayers;
1080
+ if (!isFullStack) continue;
1078
1081
  const rect = toRect(entry);
1079
1082
  if (isSelfRect({
1080
1083
  rect,
@@ -1573,6 +1576,16 @@ function allLayerNode(params) {
1573
1576
  return out;
1574
1577
  }
1575
1578
 
1579
+ // lib/utils/rectToTree.ts
1580
+ var rectToTree = (rect, opts) => ({
1581
+ ...rect,
1582
+ minX: rect.x,
1583
+ minY: rect.y,
1584
+ maxX: rect.x + rect.width,
1585
+ maxY: rect.y + rect.height,
1586
+ zLayers: opts.zLayers
1587
+ });
1588
+
1576
1589
  // lib/utils/resizeSoftOverlaps.ts
1577
1590
  function resizeSoftOverlaps(params, newIndex) {
1578
1591
  const newcomer = params.placed[newIndex];
@@ -1607,20 +1620,17 @@ function resizeSoftOverlaps(params, newIndex) {
1607
1620
  }
1608
1621
  }
1609
1622
  }
1610
- const rectToTree2 = (rect) => ({
1611
- ...rect,
1612
- minX: rect.x,
1613
- minY: rect.y,
1614
- maxX: rect.x + rect.width,
1615
- maxY: rect.y + rect.height
1616
- });
1617
1623
  const sameRect = (a, b) => a.minX === b.minX && a.minY === b.minY && a.maxX === b.maxX && a.maxY === b.maxY;
1618
1624
  removeIdx.sort((a, b) => b - a).forEach((idx) => {
1619
1625
  const rem = params.placed.splice(idx, 1)[0];
1620
1626
  if (params.placedIndexByLayer) {
1621
1627
  for (const z of rem.zLayers) {
1622
1628
  const tree = params.placedIndexByLayer[z];
1623
- if (tree) tree.remove(rectToTree2(rem.rect), sameRect);
1629
+ if (tree)
1630
+ tree.remove(
1631
+ rectToTree(rem.rect, { zLayers: rem.zLayers }),
1632
+ sameRect
1633
+ );
1624
1634
  }
1625
1635
  }
1626
1636
  });
@@ -1630,13 +1640,7 @@ function resizeSoftOverlaps(params, newIndex) {
1630
1640
  if (params.placedIndexByLayer) {
1631
1641
  const idx = params.placedIndexByLayer[z];
1632
1642
  if (idx) {
1633
- idx.insert({
1634
- ...p.rect,
1635
- minX: p.rect.x,
1636
- minY: p.rect.y,
1637
- maxX: p.rect.x + p.rect.width,
1638
- maxY: p.rect.y + p.rect.height
1639
- });
1643
+ idx.insert(rectToTree(p.rect, { zLayers: p.zLayers.slice() }));
1640
1644
  }
1641
1645
  }
1642
1646
  }
@@ -1839,13 +1843,7 @@ var RectDiffSeedingSolver = class extends BaseSolver3 {
1839
1843
  for (const z of attempt.layers) {
1840
1844
  const idx = this.placedIndexByLayer[z];
1841
1845
  if (idx) {
1842
- idx.insert({
1843
- ...rect,
1844
- minX: rect.x,
1845
- minY: rect.y,
1846
- maxX: rect.x + rect.width,
1847
- maxY: rect.y + rect.height
1848
- });
1846
+ idx.insert(rectToTree(rect, { zLayers: placed.zLayers }));
1849
1847
  }
1850
1848
  }
1851
1849
  resizeSoftOverlaps(
@@ -2077,15 +2075,6 @@ function rectsToMeshNodes(rects) {
2077
2075
  // lib/solvers/RectDiffExpansionSolver/RectDiffExpansionSolver.ts
2078
2076
  import RBush4 from "rbush";
2079
2077
 
2080
- // lib/utils/rectToTree.ts
2081
- var rectToTree = (rect) => ({
2082
- ...rect,
2083
- minX: rect.x,
2084
- minY: rect.y,
2085
- maxX: rect.x + rect.width,
2086
- maxY: rect.y + rect.height
2087
- });
2088
-
2089
2078
  // lib/utils/sameTreeRect.ts
2090
2079
  var sameTreeRect = (a, b) => a.minX === b.minX && a.minY === b.minY && a.maxX === b.maxX && a.maxY === b.maxY;
2091
2080
 
@@ -2108,7 +2097,10 @@ var RectDiffExpansionSolver = class extends BaseSolver4 {
2108
2097
  for (const placement of this.input.placed) {
2109
2098
  for (const z of placement.zLayers) {
2110
2099
  const placedIndex = this.placedIndexByLayer[z];
2111
- if (placedIndex) placedIndex.insert(rectToTree(placement.rect));
2100
+ if (placedIndex)
2101
+ placedIndex.insert(
2102
+ rectToTree(placement.rect, { zLayers: placement.zLayers })
2103
+ );
2112
2104
  }
2113
2105
  }
2114
2106
  }
@@ -2146,8 +2138,8 @@ var RectDiffExpansionSolver = class extends BaseSolver4 {
2146
2138
  for (const z of p.zLayers) {
2147
2139
  const tree = this.placedIndexByLayer[z];
2148
2140
  if (tree) {
2149
- tree.remove(rectToTree(oldRect), sameTreeRect);
2150
- tree.insert(rectToTree(expanded));
2141
+ tree.remove(rectToTree(oldRect, { zLayers: p.zLayers }), sameTreeRect);
2142
+ tree.insert(rectToTree(expanded, { zLayers: p.zLayers }));
2151
2143
  }
2152
2144
  }
2153
2145
  resizeSoftOverlaps(
@@ -2250,7 +2242,8 @@ var buildObstacleIndexesByLayer = (params) => {
2250
2242
  minX: rect.x,
2251
2243
  minY: rect.y,
2252
2244
  maxX: rect.x + rect.width,
2253
- maxY: rect.y + rect.height
2245
+ maxY: rect.y + rect.height,
2246
+ zLayers: [z]
2254
2247
  };
2255
2248
  obstacleIndexByLayer[z]?.insert(treeRect);
2256
2249
  };
@@ -56,7 +56,10 @@ export class RectDiffExpansionSolver extends BaseSolver {
56
56
  for (const placement of this.input.placed) {
57
57
  for (const z of placement.zLayers) {
58
58
  const placedIndex = this.placedIndexByLayer[z]
59
- if (placedIndex) placedIndex.insert(rectToTree(placement.rect))
59
+ if (placedIndex)
60
+ placedIndex.insert(
61
+ rectToTree(placement.rect, { zLayers: placement.zLayers }),
62
+ )
60
63
  }
61
64
  }
62
65
  }
@@ -104,8 +107,8 @@ export class RectDiffExpansionSolver extends BaseSolver {
104
107
  for (const z of p.zLayers) {
105
108
  const tree = this.placedIndexByLayer[z]
106
109
  if (tree) {
107
- tree.remove(rectToTree(oldRect), sameTreeRect)
108
- tree.insert(rectToTree(expanded))
110
+ tree.remove(rectToTree(oldRect, { zLayers: p.zLayers }), sameTreeRect)
111
+ tree.insert(rectToTree(expanded, { zLayers: p.zLayers }))
109
112
  }
110
113
  }
111
114
 
@@ -30,12 +30,13 @@ export const buildObstacleIndexesByLayer = (params: {
30
30
  )
31
31
 
32
32
  const insertObstacle = (rect: XYRect, z: number) => {
33
- const treeRect = {
33
+ const treeRect: RTreeRect = {
34
34
  ...rect,
35
35
  minX: rect.x,
36
36
  minY: rect.y,
37
37
  maxX: rect.x + rect.width,
38
38
  maxY: rect.y + rect.height,
39
+ zLayers: [z],
39
40
  }
40
41
  obstacleIndexByLayer[z]?.insert(treeRect)
41
42
  }
@@ -21,6 +21,7 @@ import { resizeSoftOverlaps } from "../../utils/resizeSoftOverlaps"
21
21
  import { getColorForZLayer } from "lib/utils/getColorForZLayer"
22
22
  import RBush from "rbush"
23
23
  import type { RTreeRect } from "lib/types/capacity-mesh-types"
24
+ import { rectToTree } from "lib/utils/rectToTree"
24
25
 
25
26
  export type RectDiffSeedingSolverInput = {
26
27
  simpleRouteJson: SimpleRouteJson
@@ -258,13 +259,7 @@ export class RectDiffSeedingSolver extends BaseSolver {
258
259
  for (const z of attempt.layers) {
259
260
  const idx = this.placedIndexByLayer[z]
260
261
  if (idx) {
261
- idx.insert({
262
- ...rect,
263
- minX: rect.x,
264
- minY: rect.y,
265
- maxX: rect.x + rect.width,
266
- maxY: rect.y + rect.height,
267
- })
262
+ idx.insert(rectToTree(rect, { zLayers: placed.zLayers }))
268
263
  }
269
264
  }
270
265
 
@@ -39,4 +39,5 @@ export type RTreeRect = XYRect & {
39
39
  minY: number
40
40
  maxX: number
41
41
  maxY: number
42
+ zLayers: number[]
42
43
  }
@@ -216,6 +216,7 @@ export function expandRectFromSeed(params: {
216
216
  const initialH = Math.max(minSide, minReq.height)
217
217
  const blockers: XYRect[] = []
218
218
  const seen = new Set<string>()
219
+ const totalLayers = placedIndexByLayer.length
219
220
 
220
221
  // Ignore the existing placement we are expanding so it doesn't self-block.
221
222
 
@@ -232,6 +233,8 @@ export function expandRectFromSeed(params: {
232
233
  const placedLayer = placedIndexByLayer[z]
233
234
  if (placedLayer) {
234
235
  for (const entry of placedLayer.search(query)) {
236
+ const isFullStack = entry.zLayers.length >= totalLayers
237
+ if (!isFullStack) continue
235
238
  const rect = toRect(entry)
236
239
  if (
237
240
  isSelfRect({
@@ -1,10 +1,14 @@
1
1
  import type { XYRect } from "lib/rectdiff-types"
2
2
  import type { RTreeRect } from "lib/types/capacity-mesh-types"
3
3
 
4
- export const rectToTree = (rect: XYRect): RTreeRect => ({
4
+ export const rectToTree = (
5
+ rect: XYRect,
6
+ opts: { zLayers: number[] },
7
+ ): RTreeRect => ({
5
8
  ...rect,
6
9
  minX: rect.x,
7
10
  minY: rect.y,
8
11
  maxX: rect.x + rect.width,
9
12
  maxY: rect.y + rect.height,
13
+ zLayers: opts.zLayers,
10
14
  })
@@ -1,7 +1,8 @@
1
1
  import type { RTreeRect } from "lib/types/capacity-mesh-types"
2
- import type { Placed3D, XYRect } from "../rectdiff-types"
2
+ import type { Placed3D } from "../rectdiff-types"
3
3
  import { overlaps, subtractRect2D, EPS } from "./rectdiff-geometry"
4
4
  import type RBush from "rbush"
5
+ import { rectToTree } from "./rectToTree"
5
6
 
6
7
  export function resizeSoftOverlaps(
7
8
  params: {
@@ -57,13 +58,6 @@ export function resizeSoftOverlaps(
57
58
  }
58
59
 
59
60
  // Remove fully overlapped nodes and keep indexes in sync
60
- const rectToTree = (rect: XYRect): RTreeRect => ({
61
- ...rect,
62
- minX: rect.x,
63
- minY: rect.y,
64
- maxX: rect.x + rect.width,
65
- maxY: rect.y + rect.height,
66
- })
67
61
  const sameRect = (a: RTreeRect, b: RTreeRect) =>
68
62
  a.minX === b.minX &&
69
63
  a.minY === b.minY &&
@@ -77,7 +71,11 @@ export function resizeSoftOverlaps(
77
71
  if (params.placedIndexByLayer) {
78
72
  for (const z of rem.zLayers) {
79
73
  const tree = params.placedIndexByLayer[z]
80
- if (tree) tree.remove(rectToTree(rem.rect), sameRect)
74
+ if (tree)
75
+ tree.remove(
76
+ rectToTree(rem.rect, { zLayers: rem.zLayers }),
77
+ sameRect,
78
+ )
81
79
  }
82
80
  }
83
81
  })
@@ -89,13 +87,7 @@ export function resizeSoftOverlaps(
89
87
  if (params.placedIndexByLayer) {
90
88
  const idx = params.placedIndexByLayer[z]
91
89
  if (idx) {
92
- idx.insert({
93
- ...p.rect,
94
- minX: p.rect.x,
95
- minY: p.rect.y,
96
- maxX: p.rect.x + p.rect.width,
97
- maxY: p.rect.y + p.rect.height,
98
- })
90
+ idx.insert(rectToTree(p.rect, { zLayers: p.zLayers.slice() }))
99
91
  }
100
92
  }
101
93
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tscircuit/rectdiff",
3
- "version": "0.0.19",
3
+ "version": "0.0.21",
4
4
  "type": "module",
5
5
  "main": "dist/index.js",
6
6
  "scripts": {