@rxflow/manhattan 0.0.1-alpha.10 → 0.0.1-alpha.12

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 (49) hide show
  1. package/cjs/geometry/Rectangle.d.ts +1 -1
  2. package/cjs/geometry/Rectangle.js +2 -2
  3. package/cjs/getManHattanPath.d.ts.map +1 -1
  4. package/cjs/getManHattanPath.js +153 -20
  5. package/cjs/obstacle/ObstacleMap.d.ts +7 -1
  6. package/cjs/obstacle/ObstacleMap.d.ts.map +1 -1
  7. package/cjs/obstacle/ObstacleMap.js +53 -1
  8. package/cjs/options/defaults.d.ts +1 -1
  9. package/cjs/options/defaults.d.ts.map +1 -1
  10. package/cjs/options/defaults.js +1 -1
  11. package/cjs/options/resolver.d.ts.map +1 -1
  12. package/cjs/options/resolver.js +4 -2
  13. package/cjs/options/types.d.ts +19 -6
  14. package/cjs/options/types.d.ts.map +1 -1
  15. package/cjs/pathfinder/findRoute.d.ts.map +1 -1
  16. package/cjs/pathfinder/findRoute.js +184 -13
  17. package/cjs/svg/pathConverter.d.ts.map +1 -1
  18. package/cjs/svg/pathConverter.js +23 -12
  19. package/cjs/utils/getAnchorPoints.d.ts +15 -0
  20. package/cjs/utils/getAnchorPoints.d.ts.map +1 -0
  21. package/cjs/utils/getAnchorPoints.js +75 -0
  22. package/cjs/utils/index.d.ts +1 -0
  23. package/cjs/utils/index.d.ts.map +1 -1
  24. package/cjs/utils/index.js +11 -0
  25. package/esm/geometry/Rectangle.d.ts +1 -1
  26. package/esm/geometry/Rectangle.js +2 -2
  27. package/esm/getManHattanPath.d.ts.map +1 -1
  28. package/esm/getManHattanPath.js +162 -22
  29. package/esm/obstacle/ObstacleMap.d.ts +7 -1
  30. package/esm/obstacle/ObstacleMap.d.ts.map +1 -1
  31. package/esm/obstacle/ObstacleMap.js +78 -0
  32. package/esm/options/defaults.d.ts +1 -1
  33. package/esm/options/defaults.d.ts.map +1 -1
  34. package/esm/options/defaults.js +1 -1
  35. package/esm/options/resolver.d.ts.map +1 -1
  36. package/esm/options/resolver.js +5 -3
  37. package/esm/options/types.d.ts +19 -6
  38. package/esm/options/types.d.ts.map +1 -1
  39. package/esm/pathfinder/findRoute.d.ts.map +1 -1
  40. package/esm/pathfinder/findRoute.js +206 -21
  41. package/esm/svg/pathConverter.d.ts.map +1 -1
  42. package/esm/svg/pathConverter.js +23 -12
  43. package/esm/utils/getAnchorPoints.d.ts +15 -0
  44. package/esm/utils/getAnchorPoints.d.ts.map +1 -0
  45. package/esm/utils/getAnchorPoints.js +69 -0
  46. package/esm/utils/index.d.ts +1 -0
  47. package/esm/utils/index.d.ts.map +1 -1
  48. package/esm/utils/index.js +2 -1
  49. package/package.json +1 -1
@@ -1,3 +1,4 @@
1
+ function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
1
2
  function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
2
3
  function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
3
4
  function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); }
@@ -8,12 +9,17 @@ function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o =
8
9
  function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
9
10
  function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
10
11
  function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
12
+ function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
13
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
14
+ function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
15
+ function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : String(i); }
16
+ function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
11
17
  import { getSmoothStepPath } from '@xyflow/react';
12
18
  import { Point, Rectangle } from "./geometry";
13
19
  import { ObstacleMap } from "./obstacle";
14
20
  import { resolveOptions } from "./options";
15
21
  import { findRoute } from "./pathfinder";
16
- import { pointsToPath, snapPathToGrid, parseSVGPath, simplifyPath } from "./svg";
22
+ import { pointsToPath, parseSVGPath } from "./svg";
17
23
  import { getNodeDimensions, getNodePosition, pathIntersectsObstacles } from "./utils";
18
24
 
19
25
  /**
@@ -55,8 +61,17 @@ export function getManHattanPath(params) {
55
61
  _params$options = params.options,
56
62
  userOptions = _params$options === void 0 ? {} : _params$options;
57
63
 
58
- // Resolve options
59
- var options = resolveOptions(userOptions);
64
+ // Resolve options and add position information
65
+ var options = resolveOptions(_objectSpread(_objectSpread({}, userOptions), {}, {
66
+ sourcePosition: sourcePosition,
67
+ targetPosition: targetPosition
68
+ }));
69
+
70
+ // Direction control is automatically handled by getRectPoints:
71
+ // - When anchor is on an edge, only outward directions are allowed (via isDirectionOutward)
72
+ // - For sourcePosition="right": anchor on right edge -> only extends right
73
+ // - For targetPosition="left": anchor on left edge -> path approaches from right (outward from left)
74
+ // This ensures paths follow the sourcePosition and targetPosition constraints
60
75
 
61
76
  // Get source and target nodes
62
77
  var sourceNode = nodeLookup.get(sourceNodeId);
@@ -125,6 +140,19 @@ export function getManHattanPath(params) {
125
140
  console.log('[getManHattanPath] Source anchor:', "(".concat(sourceAnchor.x, ", ").concat(sourceAnchor.y, ")"));
126
141
  console.log('[getManHattanPath] Target anchor:', "(".concat(targetAnchor.x, ", ").concat(targetAnchor.y, ")"));
127
142
 
143
+ // If using smart point generation (sourcePosition/targetPosition specified),
144
+ // the route already contains the correct extension points, so skip manual processing
145
+ var useSmartPoints = sourcePosition || targetPosition;
146
+ if (useSmartPoints) {
147
+ console.log('[getManHattanPath] Using smart points, skipping manual extension point processing');
148
+ // Add source and target anchors to route
149
+ var _finalRoute = [sourceAnchor].concat(_toConsumableArray(route), [targetAnchor]);
150
+ console.log('[getManHattanPath] Final route:', _finalRoute.map(function (p) {
151
+ return "(".concat(p.x, ", ").concat(p.y, ")");
152
+ }));
153
+ return pointsToPath(_finalRoute, options.precision, options.borderRadius);
154
+ }
155
+
128
156
  // Remove extension points from route that were added by getRectPoints
129
157
  // We will add our own with fixed step distance
130
158
  var step = options.step;
@@ -168,10 +196,9 @@ export function getManHattanPath(params) {
168
196
  }
169
197
  }
170
198
 
171
- // Insert extension point at source - always extend away from node edge by fixed step distance
172
- // Add borderRadius to extension distance to account for rounded corners
199
+ // Insert extension point at source - always extend away from node edge by fixed distance
173
200
  if (route.length > 0) {
174
- var extensionDistance = step + options.borderRadius;
201
+ var extensionDistance = options.extensionDistance;
175
202
  var _firstPoint = route[0];
176
203
 
177
204
  // Determine which edge the source anchor is on
@@ -221,10 +248,77 @@ export function getManHattanPath(params) {
221
248
  }
222
249
  }
223
250
 
224
- // Insert extension point at target - always extend away from node edge by fixed step distance
225
- // Add borderRadius to extension distance to account for rounded corners
251
+ // Remove redundant points after source extension
252
+ // If the first route point has the same x or y coordinate as the source anchor, it's redundant
253
+ if (route.length > 2) {
254
+ var firstRoutePoint = route[0]; // Extension point
255
+ var secondRoutePoint = route[1]; // Corner point (if exists)
256
+ var thirdRoutePoint = route[2]; // Original A* point
257
+
258
+ // Check if the third point (original A* point) is redundant
259
+ // It's redundant if it's on the same line as the corner point and can be skipped
260
+ var sameX = Math.abs(thirdRoutePoint.x - sourceAnchor.x) < tolerance;
261
+ var sameY = Math.abs(thirdRoutePoint.y - sourceAnchor.y) < tolerance;
262
+ if (sameX || sameY) {
263
+ // The third point is aligned with the source anchor, likely redundant
264
+ // Check if we can skip it by connecting corner point directly to the next point
265
+ if (route.length > 3) {
266
+ var fourthPoint = route[3];
267
+ // If corner point and fourth point form a straight line, remove the third point
268
+ var cornerToThird = Math.abs(secondRoutePoint.x - thirdRoutePoint.x) < tolerance || Math.abs(secondRoutePoint.y - thirdRoutePoint.y) < tolerance;
269
+ var thirdToFourth = Math.abs(thirdRoutePoint.x - fourthPoint.x) < tolerance || Math.abs(thirdRoutePoint.y - fourthPoint.y) < tolerance;
270
+ if (cornerToThird && thirdToFourth) {
271
+ console.log('[getManHattanPath] Removing redundant point:', "(".concat(thirdRoutePoint.x, ", ").concat(thirdRoutePoint.y, ")"));
272
+ route.splice(2, 1); // Remove the third point
273
+ }
274
+ }
275
+ }
276
+ }
277
+
278
+ // Optimize zigzag patterns BEFORE inserting target extension
279
+ // Check for patterns like: (1360, 16) -> (815, 16) -> (815, -134)
280
+ // where the middle segment goes to target edge and then moves along it
281
+ // Use target bbox with padding (same as ObstacleMap)
282
+ var targetBBoxWithPadding = targetBBox.moveAndExpand(options.paddingBox);
283
+ console.log('[getManHattanPath] Route before zigzag check:', route.map(function (p) {
284
+ return "(".concat(p.x, ", ").concat(p.y, ")");
285
+ }));
286
+ console.log('[getManHattanPath] Target BBox with padding:', "x=".concat(targetBBoxWithPadding.x, ", y=").concat(targetBBoxWithPadding.y));
287
+ if (route.length >= 3) {
288
+ var _i = 0;
289
+ while (_i < route.length - 2) {
290
+ var p1 = route[_i];
291
+ var p2 = route[_i + 1];
292
+ var p3 = route[_i + 2];
293
+
294
+ // Check if p2 is on the target bbox edge (with padding)
295
+ var p2OnTargetLeftEdge = Math.abs(p2.x - targetBBoxWithPadding.x) < tolerance;
296
+ var p2OnTargetRightEdge = Math.abs(p2.x - (targetBBoxWithPadding.x + targetBBoxWithPadding.width)) < tolerance;
297
+ var p2OnTargetTopEdge = Math.abs(p2.y - targetBBoxWithPadding.y) < tolerance;
298
+ var p2OnTargetBottomEdge = Math.abs(p2.y - (targetBBoxWithPadding.y + targetBBoxWithPadding.height)) < tolerance;
299
+ var p2OnTargetEdge = p2OnTargetLeftEdge || p2OnTargetRightEdge || p2OnTargetTopEdge || p2OnTargetBottomEdge;
300
+ console.log("[getManHattanPath] Checking i=".concat(_i, ": p2=(").concat(p2.x, ", ").concat(p2.y, "), onEdge=").concat(p2OnTargetEdge));
301
+ if (p2OnTargetEdge) {
302
+ // Check if p1 -> p2 -> p3 forms a zigzag
303
+ var p1ToP2Horizontal = Math.abs(p1.y - p2.y) < tolerance;
304
+ var p2ToP3Vertical = Math.abs(p2.x - p3.x) < tolerance;
305
+ var p1ToP2Vertical = Math.abs(p1.x - p2.x) < tolerance;
306
+ var p2ToP3Horizontal = Math.abs(p2.y - p3.y) < tolerance;
307
+ console.log("[getManHattanPath] Zigzag pattern: H->V=".concat(p1ToP2Horizontal && p2ToP3Vertical, ", V->H=").concat(p1ToP2Vertical && p2ToP3Horizontal));
308
+ if (p1ToP2Horizontal && p2ToP3Vertical || p1ToP2Vertical && p2ToP3Horizontal) {
309
+ // We have a zigzag at target edge, remove p2 and p3
310
+ console.log('[getManHattanPath] Removing zigzag at target edge:', "(".concat(p2.x, ", ").concat(p2.y, ")"), "and (".concat(p3.x, ", ").concat(p3.y, ")"));
311
+ route.splice(_i + 1, 2); // Remove p2 and p3
312
+ continue;
313
+ }
314
+ }
315
+ _i++;
316
+ }
317
+ }
318
+
319
+ // Insert extension point at target - always extend away from node edge by fixed distance
226
320
  if (route.length > 0) {
227
- var _extensionDistance = step + options.borderRadius;
321
+ var _extensionDistance = options.extensionDistance;
228
322
  var _lastPoint = route[route.length - 1];
229
323
 
230
324
  // Determine which edge the target anchor is on
@@ -273,22 +367,68 @@ export function getManHattanPath(params) {
273
367
  }
274
368
  }
275
369
 
276
- // Add source and target anchors to route
277
- var fullRoute = [sourceAnchor].concat(_toConsumableArray(route), [targetAnchor]);
278
- console.log('[getManHattanPath] Full route:', fullRoute.map(function (p) {
279
- return "(".concat(p.x, ", ").concat(p.y, ")");
280
- }));
370
+ // Remove redundant points before target extension
371
+ // Similar logic for target side
372
+ if (route.length > 2) {
373
+ var lastIdx = route.length - 1;
374
+ var lastRoutePoint = route[lastIdx]; // Extension point
375
+ var secondLastPoint = route[lastIdx - 1]; // Corner point (if exists)
376
+ var thirdLastPoint = route[lastIdx - 2]; // Original A* point
281
377
 
282
- // Snap to grid if enabled
283
- var finalRoute = fullRoute;
284
- if (options.snapToGrid) {
285
- // Use step size as grid size for snapping
286
- finalRoute = snapPathToGrid(fullRoute, options.step);
378
+ // Check if the third-to-last point is redundant
379
+ var _sameX = Math.abs(thirdLastPoint.x - targetAnchor.x) < tolerance;
380
+ var _sameY = Math.abs(thirdLastPoint.y - targetAnchor.y) < tolerance;
381
+ if (_sameX || _sameY) {
382
+ if (route.length > 3) {
383
+ var fourthLastPoint = route[lastIdx - 3];
384
+ var fourthToThird = Math.abs(fourthLastPoint.x - thirdLastPoint.x) < tolerance || Math.abs(fourthLastPoint.y - thirdLastPoint.y) < tolerance;
385
+ var thirdToSecond = Math.abs(thirdLastPoint.x - secondLastPoint.x) < tolerance || Math.abs(thirdLastPoint.y - secondLastPoint.y) < tolerance;
386
+ if (fourthToThird && thirdToSecond) {
387
+ console.log('[getManHattanPath] Removing redundant point:', "(".concat(thirdLastPoint.x, ", ").concat(thirdLastPoint.y, ")"));
388
+ route.splice(lastIdx - 2, 1); // Remove the third-to-last point
389
+ }
390
+ }
391
+ }
287
392
  }
288
393
 
289
- // Simplify path by removing collinear points
290
- finalRoute = simplifyPath(finalRoute);
291
- console.log('[getManHattanPath] Simplified route:', finalRoute.map(function (p) {
394
+ // Additional optimization: Remove unnecessary zigzag patterns near target
395
+ // Check for patterns like: (1360, 16) -> (815, 16) -> (815, -134) -> (800, -134)
396
+ // where (815, 16) and (815, -134) form a zigzag at the target edge
397
+ var i = 0;
398
+ while (i < route.length - 2) {
399
+ var _p = route[i];
400
+ var _p2 = route[i + 1];
401
+ var _p3 = route[i + 2];
402
+
403
+ // Check if p2 is on the target bbox edge
404
+ var _p2OnTargetLeftEdge = Math.abs(_p2.x - targetBBox.x) < tolerance;
405
+ var _p2OnTargetRightEdge = Math.abs(_p2.x - (targetBBox.x + targetBBox.width)) < tolerance;
406
+ var _p2OnTargetTopEdge = Math.abs(_p2.y - targetBBox.y) < tolerance;
407
+ var _p2OnTargetBottomEdge = Math.abs(_p2.y - (targetBBox.y + targetBBox.height)) < tolerance;
408
+ var _p2OnTargetEdge = _p2OnTargetLeftEdge || _p2OnTargetRightEdge || _p2OnTargetTopEdge || _p2OnTargetBottomEdge;
409
+ if (_p2OnTargetEdge) {
410
+ // Check if p1 -> p2 -> p3 forms a zigzag
411
+ var _p1ToP2Horizontal = Math.abs(_p.y - _p2.y) < tolerance;
412
+ var _p2ToP3Vertical = Math.abs(_p2.x - _p3.x) < tolerance;
413
+ if (_p1ToP2Horizontal && _p2ToP3Vertical && i < route.length - 3) {
414
+ // We have horizontal -> vertical at target edge
415
+ // Check if we can skip p2 and p3
416
+ var p4 = route[i + 3];
417
+ var p3ToP4Horizontal = Math.abs(_p3.y - p4.y) < tolerance;
418
+ if (p3ToP4Horizontal) {
419
+ // Pattern: horizontal -> vertical -> horizontal (zigzag)
420
+ console.log('[getManHattanPath] Removing zigzag at target edge:', "(".concat(_p2.x, ", ").concat(_p2.y, ")"), "and (".concat(_p3.x, ", ").concat(_p3.y, ")"));
421
+ route.splice(i + 1, 2); // Remove p2 and p3
422
+ continue;
423
+ }
424
+ }
425
+ }
426
+ i++;
427
+ }
428
+
429
+ // Add source and target anchors to route
430
+ var finalRoute = [sourceAnchor].concat(_toConsumableArray(route), [targetAnchor]);
431
+ console.log('[getManHattanPath] Final route:', finalRoute.map(function (p) {
292
432
  return "(".concat(p.x, ", ").concat(p.y, ")");
293
433
  }));
294
434
 
@@ -22,7 +22,13 @@ export declare class ObstacleMap {
22
22
  private shrinkBBoxAroundAnchor;
23
23
  /**
24
24
  * Check if a point is accessible (not inside any obstacle)
25
+ * Uses binary search optimization: step -> step/2 -> step/4 -> ... -> 1px
25
26
  */
26
- isAccessible(point: Point): boolean;
27
+ isAccessible(point: Point, checkRadius?: number): boolean;
28
+ /**
29
+ * Check accessibility using binary search optimization
30
+ * Tries step -> step/2 -> step/4 -> ... -> 1px
31
+ */
32
+ private isAccessibleWithBinarySearch;
27
33
  }
28
34
  //# sourceMappingURL=ObstacleMap.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ObstacleMap.d.ts","sourceRoot":"","sources":["../../src/obstacle/ObstacleMap.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAa,MAAM,aAAa,CAAA;AAC9C,OAAO,KAAK,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AAG7D;;;GAGG;AACH,qBAAa,WAAW;IACtB,OAAO,CAAC,OAAO,CAAiB;IAChC,OAAO,CAAC,WAAW,CAAQ;IAC3B,OAAO,CAAC,GAAG,CAA0B;IACrC,OAAO,CAAC,YAAY,CAAC,CAAO;IAC5B,OAAO,CAAC,YAAY,CAAC,CAAO;gBAEhB,OAAO,EAAE,eAAe;IAMpC;;OAEG;IACH,KAAK,CACH,UAAU,EAAE,UAAU,EACtB,YAAY,EAAE,MAAM,EACpB,YAAY,EAAE,MAAM,EACpB,YAAY,CAAC,EAAE,KAAK,EACpB,YAAY,CAAC,EAAE,KAAK,GACnB,WAAW;IAiEd;;;OAGG;IACH,OAAO,CAAC,sBAAsB;IA6D9B;;OAEG;IACH,YAAY,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO;CA2CpC"}
1
+ {"version":3,"file":"ObstacleMap.d.ts","sourceRoot":"","sources":["../../src/obstacle/ObstacleMap.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAa,MAAM,aAAa,CAAA;AAC9C,OAAO,KAAK,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AAG7D;;;GAGG;AACH,qBAAa,WAAW;IACtB,OAAO,CAAC,OAAO,CAAiB;IAChC,OAAO,CAAC,WAAW,CAAQ;IAC3B,OAAO,CAAC,GAAG,CAA0B;IACrC,OAAO,CAAC,YAAY,CAAC,CAAO;IAC5B,OAAO,CAAC,YAAY,CAAC,CAAO;gBAEhB,OAAO,EAAE,eAAe;IAMpC;;OAEG;IACH,KAAK,CACH,UAAU,EAAE,UAAU,EACtB,YAAY,EAAE,MAAM,EACpB,YAAY,EAAE,MAAM,EACpB,YAAY,CAAC,EAAE,KAAK,EACpB,YAAY,CAAC,EAAE,KAAK,GACnB,WAAW;IAiEd;;;OAGG;IACH,OAAO,CAAC,sBAAsB;IA6D9B;;;OAGG;IACH,YAAY,CAAC,KAAK,EAAE,KAAK,EAAE,WAAW,GAAE,MAAU,GAAG,OAAO;IAiD5D;;;OAGG;IACH,OAAO,CAAC,4BAA4B;CAqCrC"}
@@ -1,4 +1,7 @@
1
1
  function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
2
+ function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }
3
+ function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
4
+ function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
2
5
  function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
3
6
  function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } }
4
7
  function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
@@ -135,10 +138,12 @@ export var ObstacleMap = /*#__PURE__*/function () {
135
138
 
136
139
  /**
137
140
  * Check if a point is accessible (not inside any obstacle)
141
+ * Uses binary search optimization: step -> step/2 -> step/4 -> ... -> 1px
138
142
  */
139
143
  }, {
140
144
  key: "isAccessible",
141
145
  value: function isAccessible(point) {
146
+ var checkRadius = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
142
147
  var key = point.clone().snapToGrid(this.mapGridSize).toString();
143
148
  var rects = this.map.get(key);
144
149
  if (!rects) {
@@ -161,6 +166,11 @@ export var ObstacleMap = /*#__PURE__*/function () {
161
166
  return true;
162
167
  }
163
168
  }
169
+
170
+ // If checkRadius is specified, use binary search to find accessible points
171
+ if (checkRadius > 0) {
172
+ return this.isAccessibleWithBinarySearch(point, checkRadius, rects);
173
+ }
164
174
  var accessible = rects.every(function (rect) {
165
175
  return !rect.containsPoint(point);
166
176
  });
@@ -178,6 +188,74 @@ export var ObstacleMap = /*#__PURE__*/function () {
178
188
  }
179
189
  return accessible;
180
190
  }
191
+
192
+ /**
193
+ * Check accessibility using binary search optimization
194
+ * Tries step -> step/2 -> step/4 -> ... -> 1px
195
+ */
196
+ }, {
197
+ key: "isAccessibleWithBinarySearch",
198
+ value: function isAccessibleWithBinarySearch(point, maxRadius, rects) {
199
+ // First check the point itself
200
+ if (rects.every(function (rect) {
201
+ return !rect.containsPoint(point);
202
+ })) {
203
+ return true;
204
+ }
205
+
206
+ // Binary search: start with step, then halve until we reach 1px
207
+ var radius = maxRadius;
208
+ var offsets = [{
209
+ dx: 1,
210
+ dy: 0
211
+ },
212
+ // right
213
+ {
214
+ dx: -1,
215
+ dy: 0
216
+ },
217
+ // left
218
+ {
219
+ dx: 0,
220
+ dy: 1
221
+ },
222
+ // down
223
+ {
224
+ dx: 0,
225
+ dy: -1
226
+ } // up
227
+ ];
228
+ while (radius >= 1) {
229
+ var _iterator = _createForOfIteratorHelper(offsets),
230
+ _step;
231
+ try {
232
+ var _loop = function _loop() {
233
+ var offset = _step.value;
234
+ var testPoint = new Point(point.x + offset.dx * radius, point.y + offset.dy * radius);
235
+ if (rects.every(function (rect) {
236
+ return !rect.containsPoint(testPoint);
237
+ })) {
238
+ return {
239
+ v: true
240
+ };
241
+ }
242
+ },
243
+ _ret;
244
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
245
+ _ret = _loop();
246
+ if (_ret) return _ret.v;
247
+ }
248
+
249
+ // Halve the radius for next iteration
250
+ } catch (err) {
251
+ _iterator.e(err);
252
+ } finally {
253
+ _iterator.f();
254
+ }
255
+ radius = Math.floor(radius / 2);
256
+ }
257
+ return false;
258
+ }
181
259
  }]);
182
260
  return ObstacleMap;
183
261
  }();
@@ -3,7 +3,7 @@ import type { ManhattanRouterOptions } from './types';
3
3
  /**
4
4
  * Default configuration for Manhattan router
5
5
  */
6
- export declare const defaults: Required<Omit<ManhattanRouterOptions, 'fallbackRoute'>>;
6
+ export declare const defaults: Required<Omit<ManhattanRouterOptions, 'fallbackRoute' | 'sourcePosition' | 'targetPosition'>>;
7
7
  /**
8
8
  * Direction map - maps direction names to unit vectors
9
9
  */
@@ -1 +1 @@
1
- {"version":3,"file":"defaults.d.ts","sourceRoot":"","sources":["../../src/options/defaults.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAA;AACnC,OAAO,KAAK,EAAE,sBAAsB,EAAa,MAAM,SAAS,CAAA;AAEhE;;GAEG;AACH,eAAO,MAAM,QAAQ,EAAE,QAAQ,CAAC,IAAI,CAAC,sBAAsB,EAAE,eAAe,CAAC,CAkB5E,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,YAAY;;;;;CAKxB,CAAA"}
1
+ {"version":3,"file":"defaults.d.ts","sourceRoot":"","sources":["../../src/options/defaults.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAA;AACnC,OAAO,KAAK,EAAE,sBAAsB,EAAa,MAAM,SAAS,CAAA;AAEhE;;GAEG;AACH,eAAO,MAAM,QAAQ,EAAE,QAAQ,CAAC,IAAI,CAAC,sBAAsB,EAAE,eAAe,GAAG,gBAAgB,GAAG,gBAAgB,CAAC,CAkBlH,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,YAAY;;;;;CAKxB,CAAA"}
@@ -13,8 +13,8 @@ export var defaults = {
13
13
  excludeShapes: [],
14
14
  excludeTerminals: [],
15
15
  padding: 15,
16
- snapToGrid: true,
17
16
  borderRadius: 5,
17
+ extensionDistance: 20,
18
18
  penalties: {
19
19
  0: 0,
20
20
  45: 5,
@@ -1 +1 @@
1
- {"version":3,"file":"resolver.d.ts","sourceRoot":"","sources":["../../src/options/resolver.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,sBAAsB,EAAE,eAAe,EAAE,MAAM,SAAS,CAAA;AAetE;;GAEG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAQpD;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,OAAO,GAAE,sBAA2B,GAAG,eAAe,CA+DpF"}
1
+ {"version":3,"file":"resolver.d.ts","sourceRoot":"","sources":["../../src/options/resolver.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,sBAAsB,EAAE,eAAe,EAAE,MAAM,SAAS,CAAA;AAetE;;GAEG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAQpD;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,OAAO,GAAE,sBAA2B,GAAG,eAAe,CAiEpF"}
@@ -33,7 +33,7 @@ export function normalizeAngle(angle) {
33
33
  * Resolve options by merging user options with defaults
34
34
  */
35
35
  export function resolveOptions() {
36
- var _options$step, _options$maxLoopCount, _options$precision, _options$maxDirection, _options$startDirecti, _options$endDirection, _options$excludeNodes, _options$excludeShape, _options$excludeTermi, _options$snapToGrid, _options$borderRadius, _options$penalties, _options$padding;
36
+ var _options$step, _options$maxLoopCount, _options$precision, _options$maxDirection, _options$startDirecti, _options$endDirection, _options$excludeNodes, _options$excludeShape, _options$excludeTermi, _options$borderRadius, _options$extensionDis, _options$penalties, _options$padding;
37
37
  var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
38
38
  var step = (_options$step = options.step) !== null && _options$step !== void 0 ? _options$step : defaults.step;
39
39
  var maxLoopCount = (_options$maxLoopCount = options.maxLoopCount) !== null && _options$maxLoopCount !== void 0 ? _options$maxLoopCount : defaults.maxLoopCount;
@@ -44,8 +44,8 @@ export function resolveOptions() {
44
44
  var excludeNodes = (_options$excludeNodes = options.excludeNodes) !== null && _options$excludeNodes !== void 0 ? _options$excludeNodes : defaults.excludeNodes;
45
45
  var excludeShapes = (_options$excludeShape = options.excludeShapes) !== null && _options$excludeShape !== void 0 ? _options$excludeShape : defaults.excludeShapes;
46
46
  var excludeTerminals = (_options$excludeTermi = options.excludeTerminals) !== null && _options$excludeTermi !== void 0 ? _options$excludeTermi : defaults.excludeTerminals;
47
- var snapToGrid = (_options$snapToGrid = options.snapToGrid) !== null && _options$snapToGrid !== void 0 ? _options$snapToGrid : defaults.snapToGrid;
48
47
  var borderRadius = (_options$borderRadius = options.borderRadius) !== null && _options$borderRadius !== void 0 ? _options$borderRadius : defaults.borderRadius;
48
+ var extensionDistance = (_options$extensionDis = options.extensionDistance) !== null && _options$extensionDis !== void 0 ? _options$extensionDis : defaults.extensionDistance;
49
49
  var penalties = (_options$penalties = options.penalties) !== null && _options$penalties !== void 0 ? _options$penalties : defaults.penalties;
50
50
  var fallbackRoute = options.fallbackRoute;
51
51
 
@@ -102,8 +102,10 @@ export function resolveOptions() {
102
102
  excludeShapes: excludeShapes,
103
103
  excludeTerminals: excludeTerminals,
104
104
  paddingBox: paddingBox,
105
- snapToGrid: snapToGrid,
106
105
  borderRadius: borderRadius,
106
+ extensionDistance: extensionDistance,
107
+ sourcePosition: options.sourcePosition,
108
+ targetPosition: options.targetPosition,
107
109
  directionMap: directionMap,
108
110
  directions: directions,
109
111
  penalties: penalties,
@@ -89,17 +89,28 @@ export interface ManhattanRouterOptions {
89
89
  bottom: number;
90
90
  left: number;
91
91
  };
92
- /**
93
- * Whether the calculation results are aligned with the grid
94
- * @default true
95
- */
96
- snapToGrid?: boolean;
97
92
  /**
98
93
  * Border radius for rounded corners at path turns (in pixels)
99
94
  * Set to 0 for sharp corners
100
95
  * @default 5
101
96
  */
102
97
  borderRadius?: number;
98
+ /**
99
+ * Extension distance from node edge for path start/end points (in pixels)
100
+ * This controls how far the path extends away from the node before turning
101
+ * @default 20
102
+ */
103
+ extensionDistance?: number;
104
+ /**
105
+ * Source position (from ReactFlow)
106
+ * Used for smart point generation
107
+ */
108
+ sourcePosition?: string;
109
+ /**
110
+ * Target position (from ReactFlow)
111
+ * Used for smart point generation
112
+ */
113
+ targetPosition?: string;
103
114
  /**
104
115
  * A penalty received for direction change
105
116
  */
@@ -130,8 +141,10 @@ export interface ResolvedOptions {
130
141
  width: number;
131
142
  height: number;
132
143
  };
133
- snapToGrid: boolean;
134
144
  borderRadius: number;
145
+ extensionDistance: number;
146
+ sourcePosition?: string;
147
+ targetPosition?: string;
135
148
  directionMap: {
136
149
  top: Point;
137
150
  right: Point;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/options/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/options/types.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"findRoute.d.ts","sourceRoot":"","sources":["../../src/pathfinder/findRoute.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAC9C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AACjD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAe9C;;GAEG;AACH,wBAAgB,SAAS,CACvB,UAAU,EAAE,SAAS,EACrB,UAAU,EAAE,SAAS,EACrB,YAAY,EAAE,KAAK,EACnB,YAAY,EAAE,KAAK,EACnB,GAAG,EAAE,WAAW,EAChB,OAAO,EAAE,eAAe,GACvB,KAAK,EAAE,GAAG,IAAI,CAsNhB"}
1
+ {"version":3,"file":"findRoute.d.ts","sourceRoot":"","sources":["../../src/pathfinder/findRoute.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAC9C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AACjD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AA+I9C;;GAEG;AACH,wBAAgB,SAAS,CACvB,UAAU,EAAE,SAAS,EACrB,UAAU,EAAE,SAAS,EACrB,YAAY,EAAE,KAAK,EACnB,YAAY,EAAE,KAAK,EACnB,GAAG,EAAE,WAAW,EAChB,OAAO,EAAE,eAAe,GACvB,KAAK,EAAE,GAAG,IAAI,CA6ShB"}