@rxflow/manhattan 0.0.2 → 0.0.3

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 (176) hide show
  1. package/cjs/geometry/Line.d.ts +21 -0
  2. package/cjs/geometry/Line.d.ts.map +1 -0
  3. package/cjs/geometry/Line.js +88 -0
  4. package/cjs/geometry/Point.d.ts +49 -0
  5. package/cjs/geometry/Point.d.ts.map +1 -0
  6. package/cjs/geometry/Point.js +94 -0
  7. package/cjs/geometry/Rectangle.d.ts +41 -0
  8. package/cjs/geometry/Rectangle.d.ts.map +1 -0
  9. package/cjs/geometry/Rectangle.js +65 -0
  10. package/cjs/geometry/collision.d.ts +15 -0
  11. package/cjs/geometry/collision.d.ts.map +1 -0
  12. package/cjs/geometry/collision.js +81 -0
  13. package/cjs/geometry/index.d.ts +5 -0
  14. package/cjs/geometry/index.d.ts.map +1 -0
  15. package/cjs/geometry/index.js +45 -0
  16. package/cjs/getManHattanPath.d.ts +53 -0
  17. package/cjs/getManHattanPath.d.ts.map +1 -0
  18. package/cjs/getManHattanPath.js +449 -0
  19. package/cjs/index.d.ts +16 -0
  20. package/cjs/index.d.ts.map +1 -0
  21. package/cjs/index.js +117 -0
  22. package/cjs/obstacle/ObstacleMap.d.ts +66 -0
  23. package/cjs/obstacle/ObstacleMap.d.ts.map +1 -0
  24. package/cjs/obstacle/ObstacleMap.js +328 -0
  25. package/cjs/obstacle/QuadTree.d.ts +119 -0
  26. package/cjs/obstacle/QuadTree.d.ts.map +1 -0
  27. package/cjs/obstacle/QuadTree.js +334 -0
  28. package/cjs/obstacle/index.d.ts +2 -0
  29. package/cjs/obstacle/index.d.ts.map +1 -0
  30. package/cjs/obstacle/index.js +12 -0
  31. package/cjs/options/defaults.d.ts +16 -0
  32. package/cjs/options/defaults.d.ts.map +1 -0
  33. package/cjs/options/defaults.js +39 -0
  34. package/cjs/options/index.d.ts +4 -0
  35. package/cjs/options/index.d.ts.map +1 -0
  36. package/cjs/options/index.js +38 -0
  37. package/cjs/options/resolver.d.ts +10 -0
  38. package/cjs/options/resolver.d.ts.map +1 -0
  39. package/cjs/options/resolver.js +248 -0
  40. package/cjs/options/types.d.ts +210 -0
  41. package/cjs/options/types.d.ts.map +1 -0
  42. package/cjs/options/types.js +5 -0
  43. package/cjs/pathfinder/PathCache.d.ts +92 -0
  44. package/cjs/pathfinder/PathCache.d.ts.map +1 -0
  45. package/cjs/pathfinder/PathCache.js +249 -0
  46. package/cjs/pathfinder/SortedSet.d.ts +35 -0
  47. package/cjs/pathfinder/SortedSet.d.ts.map +1 -0
  48. package/cjs/pathfinder/SortedSet.js +95 -0
  49. package/cjs/pathfinder/findRoute.d.ts +8 -0
  50. package/cjs/pathfinder/findRoute.d.ts.map +1 -0
  51. package/cjs/pathfinder/findRoute.js +395 -0
  52. package/cjs/pathfinder/index.d.ts +4 -0
  53. package/cjs/pathfinder/index.d.ts.map +1 -0
  54. package/cjs/pathfinder/index.js +44 -0
  55. package/cjs/svg/index.d.ts +3 -0
  56. package/cjs/svg/index.d.ts.map +1 -0
  57. package/cjs/svg/index.js +31 -0
  58. package/cjs/svg/pathConverter.d.ts +23 -0
  59. package/cjs/svg/pathConverter.d.ts.map +1 -0
  60. package/cjs/svg/pathConverter.js +285 -0
  61. package/cjs/svg/pathParser.d.ts +11 -0
  62. package/cjs/svg/pathParser.d.ts.map +1 -0
  63. package/cjs/svg/pathParser.js +76 -0
  64. package/cjs/utils/AdaptiveStepCalculator.d.ts +90 -0
  65. package/cjs/utils/AdaptiveStepCalculator.d.ts.map +1 -0
  66. package/cjs/utils/AdaptiveStepCalculator.js +224 -0
  67. package/cjs/utils/ErrorRecovery.d.ts +182 -0
  68. package/cjs/utils/ErrorRecovery.d.ts.map +1 -0
  69. package/cjs/utils/ErrorRecovery.js +413 -0
  70. package/cjs/utils/GlobalGrid.d.ts +99 -0
  71. package/cjs/utils/GlobalGrid.d.ts.map +1 -0
  72. package/cjs/utils/GlobalGrid.js +224 -0
  73. package/cjs/utils/PerformanceMonitor.d.ts +139 -0
  74. package/cjs/utils/PerformanceMonitor.d.ts.map +1 -0
  75. package/cjs/utils/PerformanceMonitor.js +305 -0
  76. package/cjs/utils/direction.d.ts +24 -0
  77. package/cjs/utils/direction.d.ts.map +1 -0
  78. package/cjs/utils/direction.js +54 -0
  79. package/cjs/utils/getAnchorPoints.d.ts +15 -0
  80. package/cjs/utils/getAnchorPoints.d.ts.map +1 -0
  81. package/cjs/utils/getAnchorPoints.js +71 -0
  82. package/cjs/utils/grid.d.ts +42 -0
  83. package/cjs/utils/grid.d.ts.map +1 -0
  84. package/cjs/utils/grid.js +73 -0
  85. package/cjs/utils/heuristics.d.ts +61 -0
  86. package/cjs/utils/heuristics.d.ts.map +1 -0
  87. package/cjs/utils/heuristics.js +141 -0
  88. package/cjs/utils/index.d.ts +14 -0
  89. package/cjs/utils/index.d.ts.map +1 -0
  90. package/cjs/utils/index.js +148 -0
  91. package/cjs/utils/node.d.ts +27 -0
  92. package/cjs/utils/node.d.ts.map +1 -0
  93. package/cjs/utils/node.js +36 -0
  94. package/cjs/utils/pathProcessing.d.ts +45 -0
  95. package/cjs/utils/pathProcessing.d.ts.map +1 -0
  96. package/cjs/utils/pathProcessing.js +270 -0
  97. package/cjs/utils/pathValidation.d.ts +11 -0
  98. package/cjs/utils/pathValidation.d.ts.map +1 -0
  99. package/cjs/utils/pathValidation.js +129 -0
  100. package/cjs/utils/rect.d.ts +9 -0
  101. package/cjs/utils/rect.d.ts.map +1 -0
  102. package/cjs/utils/rect.js +110 -0
  103. package/cjs/utils/route.d.ts +19 -0
  104. package/cjs/utils/route.d.ts.map +1 -0
  105. package/cjs/utils/route.js +92 -0
  106. package/esm/geometry/Line.d.ts +21 -0
  107. package/esm/geometry/Line.d.ts.map +1 -0
  108. package/esm/geometry/Point.d.ts +49 -0
  109. package/esm/geometry/Point.d.ts.map +1 -0
  110. package/esm/geometry/Rectangle.d.ts +41 -0
  111. package/esm/geometry/Rectangle.d.ts.map +1 -0
  112. package/esm/geometry/collision.d.ts +15 -0
  113. package/esm/geometry/collision.d.ts.map +1 -0
  114. package/esm/geometry/index.d.ts +5 -0
  115. package/esm/geometry/index.d.ts.map +1 -0
  116. package/esm/getManHattanPath.d.ts +53 -0
  117. package/esm/getManHattanPath.d.ts.map +1 -0
  118. package/esm/index.d.ts +16 -0
  119. package/esm/index.d.ts.map +1 -0
  120. package/esm/obstacle/ObstacleMap.d.ts +66 -0
  121. package/esm/obstacle/ObstacleMap.d.ts.map +1 -0
  122. package/esm/obstacle/QuadTree.d.ts +119 -0
  123. package/esm/obstacle/QuadTree.d.ts.map +1 -0
  124. package/esm/obstacle/index.d.ts +2 -0
  125. package/esm/obstacle/index.d.ts.map +1 -0
  126. package/esm/options/defaults.d.ts +16 -0
  127. package/esm/options/defaults.d.ts.map +1 -0
  128. package/esm/options/index.d.ts +4 -0
  129. package/esm/options/index.d.ts.map +1 -0
  130. package/esm/options/resolver.d.ts +10 -0
  131. package/esm/options/resolver.d.ts.map +1 -0
  132. package/esm/options/types.d.ts +210 -0
  133. package/esm/options/types.d.ts.map +1 -0
  134. package/esm/pathfinder/PathCache.d.ts +92 -0
  135. package/esm/pathfinder/PathCache.d.ts.map +1 -0
  136. package/esm/pathfinder/SortedSet.d.ts +35 -0
  137. package/esm/pathfinder/SortedSet.d.ts.map +1 -0
  138. package/esm/pathfinder/findRoute.d.ts +8 -0
  139. package/esm/pathfinder/findRoute.d.ts.map +1 -0
  140. package/esm/pathfinder/index.d.ts +4 -0
  141. package/esm/pathfinder/index.d.ts.map +1 -0
  142. package/esm/svg/index.d.ts +3 -0
  143. package/esm/svg/index.d.ts.map +1 -0
  144. package/esm/svg/pathConverter.d.ts +23 -0
  145. package/esm/svg/pathConverter.d.ts.map +1 -0
  146. package/esm/svg/pathParser.d.ts +11 -0
  147. package/esm/svg/pathParser.d.ts.map +1 -0
  148. package/esm/utils/AdaptiveStepCalculator.d.ts +90 -0
  149. package/esm/utils/AdaptiveStepCalculator.d.ts.map +1 -0
  150. package/esm/utils/ErrorRecovery.d.ts +182 -0
  151. package/esm/utils/ErrorRecovery.d.ts.map +1 -0
  152. package/esm/utils/GlobalGrid.d.ts +99 -0
  153. package/esm/utils/GlobalGrid.d.ts.map +1 -0
  154. package/esm/utils/PerformanceMonitor.d.ts +139 -0
  155. package/esm/utils/PerformanceMonitor.d.ts.map +1 -0
  156. package/esm/utils/direction.d.ts +24 -0
  157. package/esm/utils/direction.d.ts.map +1 -0
  158. package/esm/utils/getAnchorPoints.d.ts +15 -0
  159. package/esm/utils/getAnchorPoints.d.ts.map +1 -0
  160. package/esm/utils/grid.d.ts +42 -0
  161. package/esm/utils/grid.d.ts.map +1 -0
  162. package/esm/utils/heuristics.d.ts +61 -0
  163. package/esm/utils/heuristics.d.ts.map +1 -0
  164. package/esm/utils/index.d.ts +14 -0
  165. package/esm/utils/index.d.ts.map +1 -0
  166. package/esm/utils/node.d.ts +27 -0
  167. package/esm/utils/node.d.ts.map +1 -0
  168. package/esm/utils/pathProcessing.d.ts +45 -0
  169. package/esm/utils/pathProcessing.d.ts.map +1 -0
  170. package/esm/utils/pathValidation.d.ts +11 -0
  171. package/esm/utils/pathValidation.d.ts.map +1 -0
  172. package/esm/utils/rect.d.ts +9 -0
  173. package/esm/utils/rect.d.ts.map +1 -0
  174. package/esm/utils/route.d.ts +19 -0
  175. package/esm/utils/route.d.ts.map +1 -0
  176. package/package.json +1 -1
@@ -0,0 +1,210 @@
1
+ import { Point } from '../geometry';
2
+ import type { AdaptiveStepConfig } from '../utils/AdaptiveStepCalculator';
3
+ /**
4
+ * Direction type for routing
5
+ */
6
+ export type Direction = 'top' | 'right' | 'bottom' | 'left';
7
+ /**
8
+ * ReactFlow internal node structure
9
+ * Based on ReactFlow's InternalNodeBase type
10
+ */
11
+ export interface InternalNode {
12
+ id: string;
13
+ position: {
14
+ x: number;
15
+ y: number;
16
+ };
17
+ internals: {
18
+ positionAbsolute: {
19
+ x: number;
20
+ y: number;
21
+ };
22
+ };
23
+ measured?: {
24
+ width?: number;
25
+ height?: number;
26
+ };
27
+ width?: number;
28
+ height?: number;
29
+ initialWidth?: number;
30
+ initialHeight?: number;
31
+ type?: string;
32
+ [key: string]: any;
33
+ }
34
+ /**
35
+ * Node lookup map type (ReactFlow's internal structure)
36
+ */
37
+ export type NodeLookup = Map<string, InternalNode>;
38
+ /**
39
+ * Performance optimization configuration
40
+ */
41
+ export interface PerformanceConfig {
42
+ /** Enable path caching */
43
+ enableCache?: boolean;
44
+ /** Maximum cache size */
45
+ cacheSize?: number;
46
+ /** Enable QuadTree for obstacle queries */
47
+ enableQuadTree?: boolean;
48
+ /** Enable early termination when good path found */
49
+ earlyTermination?: boolean;
50
+ }
51
+ /**
52
+ * Debug configuration
53
+ */
54
+ export interface DebugConfig {
55
+ /** Enable logging */
56
+ enableLogging?: boolean;
57
+ /** Enable performance metrics collection */
58
+ enableMetrics?: boolean;
59
+ /** Log level */
60
+ logLevel?: 'error' | 'warn' | 'info' | 'debug';
61
+ }
62
+ /**
63
+ * Manhattan router configuration options
64
+ */
65
+ export interface ManhattanRouterOptions {
66
+ /**
67
+ * The size of step to find a route (the grid of the manhattan pathfinder)
68
+ * @default 10
69
+ */
70
+ step?: number;
71
+ /**
72
+ * The number of route finding loops that cause the router to abort and return fallback route instead
73
+ * @default 2000
74
+ */
75
+ maxLoopCount?: number;
76
+ /**
77
+ * The number of decimal places to round floating point coordinates
78
+ * @default 1
79
+ */
80
+ precision?: number;
81
+ /**
82
+ * The maximum change of direction (in degrees)
83
+ * @default 90
84
+ */
85
+ maxDirectionChange?: number;
86
+ /**
87
+ * Possible starting directions from a node
88
+ * @default ['top', 'right', 'bottom', 'left']
89
+ */
90
+ startDirections?: Direction[];
91
+ /**
92
+ * Possible ending directions to a node
93
+ * @default ['top', 'right', 'bottom', 'left']
94
+ */
95
+ endDirections?: Direction[];
96
+ /**
97
+ * Should certain nodes not be considered as obstacles?
98
+ */
99
+ excludeNodes?: string[];
100
+ /**
101
+ * Should certain types of nodes not be considered as obstacles?
102
+ */
103
+ excludeShapes?: string[];
104
+ /**
105
+ * Should the source and/or target not be considered as obstacles?
106
+ */
107
+ excludeTerminals?: ('source' | 'target')[];
108
+ /**
109
+ * The padding applied on the element bounding boxes
110
+ */
111
+ padding?: number | {
112
+ top: number;
113
+ right: number;
114
+ bottom: number;
115
+ left: number;
116
+ };
117
+ /**
118
+ * Border radius for rounded corners at path turns (in pixels)
119
+ * Set to 0 for sharp corners
120
+ * @default 5
121
+ */
122
+ borderRadius?: number;
123
+ /**
124
+ * Extension distance from node edge for path start/end points (in pixels)
125
+ * This controls how far the path extends away from the node before turning
126
+ * @default 20
127
+ */
128
+ extensionDistance?: number;
129
+ /**
130
+ * Source position (from ReactFlow)
131
+ * Used for smart point generation
132
+ */
133
+ sourcePosition?: string;
134
+ /**
135
+ * Target position (from ReactFlow)
136
+ * Used for smart point generation
137
+ */
138
+ targetPosition?: string;
139
+ /**
140
+ * A penalty received for direction change
141
+ */
142
+ penalties?: {
143
+ [angle: number]: number;
144
+ };
145
+ /**
146
+ * Fallback route function when pathfinding fails
147
+ */
148
+ fallbackRoute?: (from: Point, to: Point) => Point[];
149
+ /**
150
+ * Adaptive step configuration
151
+ * Automatically adjusts step size based on node density and path distance
152
+ */
153
+ adaptiveStep?: Partial<AdaptiveStepConfig>;
154
+ /**
155
+ * Performance optimization configuration
156
+ */
157
+ performance?: PerformanceConfig;
158
+ /**
159
+ * Debug configuration
160
+ */
161
+ debug?: DebugConfig;
162
+ }
163
+ /**
164
+ * Resolved options with all defaults applied
165
+ */
166
+ export interface ResolvedOptions {
167
+ step: number;
168
+ maxLoopCount: number;
169
+ precision: number;
170
+ maxDirectionChange: number;
171
+ startDirections: Direction[];
172
+ endDirections: Direction[];
173
+ excludeNodes: string[];
174
+ excludeShapes: string[];
175
+ excludeTerminals: ('source' | 'target')[];
176
+ paddingBox: {
177
+ x: number;
178
+ y: number;
179
+ width: number;
180
+ height: number;
181
+ };
182
+ borderRadius: number;
183
+ extensionDistance: number;
184
+ sourcePosition?: string;
185
+ targetPosition?: string;
186
+ directionMap: {
187
+ top: Point;
188
+ right: Point;
189
+ bottom: Point;
190
+ left: Point;
191
+ };
192
+ directions: Array<{
193
+ cost: number;
194
+ offsetX: number;
195
+ offsetY: number;
196
+ angle?: number;
197
+ gridOffsetX?: number;
198
+ gridOffsetY?: number;
199
+ }>;
200
+ penalties: {
201
+ [angle: number]: number;
202
+ };
203
+ cost: number;
204
+ fallbackRoute?: (from: Point, to: Point) => Point[];
205
+ previousDirectionAngle?: number | null;
206
+ adaptiveStep: AdaptiveStepConfig;
207
+ performance: Required<PerformanceConfig>;
208
+ debug: Required<DebugConfig>;
209
+ }
210
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/options/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,92 @@
1
+ /**
2
+ * PathCache - LRU cache for computed paths
3
+ * Feature: manhattan-optimization
4
+ *
5
+ * Implements a Least Recently Used (LRU) cache for storing computed paths.
6
+ * This improves performance by avoiding redundant path calculations for
7
+ * identical source-target-options combinations.
8
+ *
9
+ * Requirements: 3.4
10
+ */
11
+ import { Point, Rectangle } from '../geometry';
12
+ import type { ResolvedOptions } from '../options';
13
+ /**
14
+ * Cache entry containing the computed path and metadata
15
+ */
16
+ export interface CacheEntry {
17
+ path: Point[];
18
+ timestamp: number;
19
+ hitCount: number;
20
+ }
21
+ /**
22
+ * Configuration for PathCache
23
+ */
24
+ export interface PathCacheConfig {
25
+ /** Maximum number of entries in the cache */
26
+ maxSize: number;
27
+ /** Time-to-live in milliseconds (0 = no expiration) */
28
+ ttl: number;
29
+ /** Whether caching is enabled */
30
+ enabled: boolean;
31
+ }
32
+ /**
33
+ * Generate a cache key from path parameters
34
+ */
35
+ export declare function generateCacheKey(sourceBBox: Rectangle, targetBBox: Rectangle, sourceAnchor: Point, targetAnchor: Point, options: ResolvedOptions): string;
36
+ /**
37
+ * LRU Cache for computed paths
38
+ */
39
+ export declare class PathCache {
40
+ private cache;
41
+ private config;
42
+ private hits;
43
+ private misses;
44
+ constructor(config?: Partial<PathCacheConfig>);
45
+ /**
46
+ * Get a cached path if available and not expired
47
+ */
48
+ get(key: string): Point[] | null;
49
+ /**
50
+ * Store a path in the cache
51
+ */
52
+ set(key: string, path: Point[]): void;
53
+ /**
54
+ * Check if a key exists in the cache (without updating LRU order)
55
+ */
56
+ has(key: string): boolean;
57
+ /**
58
+ * Clear all cached entries
59
+ */
60
+ clear(): void;
61
+ /**
62
+ * Get cache statistics
63
+ */
64
+ getStats(): {
65
+ size: number;
66
+ maxSize: number;
67
+ hits: number;
68
+ misses: number;
69
+ hitRate: number;
70
+ };
71
+ /**
72
+ * Update cache configuration
73
+ */
74
+ updateConfig(config: Partial<PathCacheConfig>): void;
75
+ /**
76
+ * Get current configuration
77
+ */
78
+ getConfig(): PathCacheConfig;
79
+ /**
80
+ * Remove expired entries (useful for periodic cleanup)
81
+ */
82
+ cleanup(): number;
83
+ }
84
+ /**
85
+ * Get the global path cache instance
86
+ */
87
+ export declare function getGlobalPathCache(): PathCache;
88
+ /**
89
+ * Reset the global path cache (useful for testing)
90
+ */
91
+ export declare function resetGlobalPathCache(): void;
92
+ //# sourceMappingURL=PathCache.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PathCache.d.ts","sourceRoot":"","sources":["../../src/pathfinder/PathCache.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAC9C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AAEjD;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,KAAK,EAAE,CAAA;IACb,SAAS,EAAE,MAAM,CAAA;IACjB,QAAQ,EAAE,MAAM,CAAA;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,6CAA6C;IAC7C,OAAO,EAAE,MAAM,CAAA;IACf,uDAAuD;IACvD,GAAG,EAAE,MAAM,CAAA;IACX,iCAAiC;IACjC,OAAO,EAAE,OAAO,CAAA;CACjB;AAWD;;GAEG;AACH,wBAAgB,gBAAgB,CAC9B,UAAU,EAAE,SAAS,EACrB,UAAU,EAAE,SAAS,EACrB,YAAY,EAAE,KAAK,EACnB,YAAY,EAAE,KAAK,EACnB,OAAO,EAAE,eAAe,GACvB,MAAM,CAsBR;AAED;;GAEG;AACH,qBAAa,SAAS;IACpB,OAAO,CAAC,KAAK,CAAyB;IACtC,OAAO,CAAC,MAAM,CAAiB;IAC/B,OAAO,CAAC,IAAI,CAAY;IACxB,OAAO,CAAC,MAAM,CAAY;gBAEd,MAAM,GAAE,OAAO,CAAC,eAAe,CAAM;IAKjD;;OAEG;IACH,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,KAAK,EAAE,GAAG,IAAI;IAiChC;;OAEG;IACH,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,IAAI;IAoBrC;;OAEG;IACH,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAsBzB;;OAEG;IACH,KAAK,IAAI,IAAI;IAMb;;OAEG;IACH,QAAQ,IAAI;QACV,IAAI,EAAE,MAAM,CAAA;QACZ,OAAO,EAAE,MAAM,CAAA;QACf,IAAI,EAAE,MAAM,CAAA;QACZ,MAAM,EAAE,MAAM,CAAA;QACd,OAAO,EAAE,MAAM,CAAA;KAChB;IAWD;;OAEG;IACH,YAAY,CAAC,MAAM,EAAE,OAAO,CAAC,eAAe,CAAC,GAAG,IAAI;IAiBpD;;OAEG;IACH,SAAS,IAAI,eAAe;IAI5B;;OAEG;IACH,OAAO,IAAI,MAAM;CAiBlB;AAOD;;GAEG;AACH,wBAAgB,kBAAkB,IAAI,SAAS,CAK9C;AAED;;GAEG;AACH,wBAAgB,oBAAoB,IAAI,IAAI,CAK3C"}
@@ -0,0 +1,35 @@
1
+ /**
2
+ * SortedSet class for managing open and closed sets in A* algorithm
3
+ * Maintains items sorted by their values
4
+ */
5
+ export declare class SortedSet {
6
+ private items;
7
+ private hash;
8
+ private values;
9
+ constructor();
10
+ /**
11
+ * Add an item with its value, maintaining sorted order
12
+ */
13
+ add(item: string, value: number): void;
14
+ /**
15
+ * Pop the item with minimum value and mark it as closed
16
+ */
17
+ pop(): string | undefined;
18
+ /**
19
+ * Check if item is in open set
20
+ */
21
+ isOpen(item: string): boolean;
22
+ /**
23
+ * Check if item is in closed set
24
+ */
25
+ isClose(item: string): boolean;
26
+ /**
27
+ * Check if open set is empty
28
+ */
29
+ isEmpty(): boolean;
30
+ /**
31
+ * Find sorted insertion index for an item
32
+ */
33
+ private sortedIndexBy;
34
+ }
35
+ //# sourceMappingURL=SortedSet.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SortedSet.d.ts","sourceRoot":"","sources":["../../src/pathfinder/SortedSet.ts"],"names":[],"mappings":"AAGA;;;GAGG;AACH,qBAAa,SAAS;IACpB,OAAO,CAAC,KAAK,CAAU;IACvB,OAAO,CAAC,IAAI,CAAqB;IACjC,OAAO,CAAC,MAAM,CAAqB;;IAQnC;;OAEG;IACH,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAkBtC;;OAEG;IACH,GAAG,IAAI,MAAM,GAAG,SAAS;IAQzB;;OAEG;IACH,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAI7B;;OAEG;IACH,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAI9B;;OAEG;IACH,OAAO,IAAI,OAAO;IAIlB;;OAEG;IACH,OAAO,CAAC,aAAa;CAiBtB"}
@@ -0,0 +1,8 @@
1
+ import { Point, Rectangle } from '../geometry';
2
+ import type { ResolvedOptions } from '../options';
3
+ import type { ObstacleMap } from '../obstacle';
4
+ /**
5
+ * Find route between two points using A* algorithm
6
+ */
7
+ export declare function findRoute(sourceBBox: Rectangle, targetBBox: Rectangle, sourceAnchor: Point, targetAnchor: Point, map: ObstacleMap, options: ResolvedOptions): Point[] | null;
8
+ //# sourceMappingURL=findRoute.d.ts.map
@@ -0,0 +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;AAiI9C;;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,CA2XhB"}
@@ -0,0 +1,4 @@
1
+ export { SortedSet } from './SortedSet';
2
+ export { findRoute } from './findRoute';
3
+ export { PathCache, generateCacheKey, getGlobalPathCache, resetGlobalPathCache, type CacheEntry, type PathCacheConfig, } from './PathCache';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/pathfinder/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AACvC,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AACvC,OAAO,EACL,SAAS,EACT,gBAAgB,EAChB,kBAAkB,EAClB,oBAAoB,EACpB,KAAK,UAAU,EACf,KAAK,eAAe,GACrB,MAAM,aAAa,CAAA"}
@@ -0,0 +1,3 @@
1
+ export { pointsToPath, snapPathToGrid } from './pathConverter';
2
+ export { parseSVGPath, simplifyPath } from './pathParser';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/svg/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAA;AAC9D,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA"}
@@ -0,0 +1,23 @@
1
+ import { Point } from '../geometry';
2
+ /**
3
+ * Convert array of points to SVG path string
4
+ */
5
+ export declare function pointsToPath(points: Point[], precision: number, borderRadius?: number): string;
6
+ /**
7
+ * Convert array of points to SVG path string with cubic bezier curves
8
+ * Provides smoother corners than quadratic bezier
9
+ */
10
+ export declare function pointsToPathCubic(points: Point[], precision: number, borderRadius?: number): string;
11
+ /**
12
+ * Snap path to grid by aligning consecutive points
13
+ */
14
+ export declare function snapPathToGrid(points: Point[], gridSize: number): Point[];
15
+ /**
16
+ * Check if an SVG path contains rounded corners (Q or C commands)
17
+ */
18
+ export declare function hasRoundedCorners(path: string): boolean;
19
+ /**
20
+ * Count the number of corners in a path
21
+ */
22
+ export declare function countCorners(points: Point[]): number;
23
+ //# sourceMappingURL=pathConverter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pathConverter.d.ts","sourceRoot":"","sources":["../../src/svg/pathConverter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAA;AA4CnC;;GAEG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,YAAY,GAAE,MAAU,GAAG,MAAM,CAwFjG;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,YAAY,GAAE,MAAU,GAAG,MAAM,CAgGtG;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,QAAQ,EAAE,MAAM,GAAG,KAAK,EAAE,CAgCzE;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEvD;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,CAUpD"}
@@ -0,0 +1,11 @@
1
+ import { Point } from '../geometry';
2
+ /**
3
+ * Parse SVG path string to extract points
4
+ * Simplified parser that handles M, L, Q commands
5
+ */
6
+ export declare function parseSVGPath(pathString: string): Point[];
7
+ /**
8
+ * Simplify path by removing collinear intermediate points
9
+ */
10
+ export declare function simplifyPath(points: Point[]): Point[];
11
+ //# sourceMappingURL=pathParser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pathParser.d.ts","sourceRoot":"","sources":["../../src/svg/pathParser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAA;AAEnC;;;GAGG;AACH,wBAAgB,YAAY,CAAC,UAAU,EAAE,MAAM,GAAG,KAAK,EAAE,CA2CxD;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,KAAK,EAAE,CA0BrD"}
@@ -0,0 +1,90 @@
1
+ /**
2
+ * AdaptiveStepCalculator - 自适应步长计算器
3
+ *
4
+ * 根据场景自动调整网格步长,平衡性能和路径质量
5
+ * - 高密度区域使用小步长,提高路径精度
6
+ * - 长距离路径使用大步长,提高计算性能
7
+ *
8
+ * Feature: manhattan-optimization
9
+ * Requirements: 2.3, 2.4
10
+ */
11
+ import type { InternalNode, NodeLookup } from '../options/types';
12
+ import { Point } from '../geometry';
13
+ /**
14
+ * 自适应步长配置
15
+ */
16
+ export interface AdaptiveStepConfig {
17
+ /** 是否启用自适应步长 */
18
+ enabled: boolean;
19
+ /** 最小步长 */
20
+ minStep: number;
21
+ /** 最大步长 */
22
+ maxStep: number;
23
+ /** 基于密度的调整配置 */
24
+ densityBased: {
25
+ enabled: boolean;
26
+ /** 节点密度阈值(节点数/10000平方像素) */
27
+ threshold: number;
28
+ };
29
+ /** 基于距离的调整配置 */
30
+ distanceBased: {
31
+ enabled: boolean;
32
+ /** 短路径阈值(像素) */
33
+ shortPathThreshold: number;
34
+ /** 长路径阈值(像素) */
35
+ longPathThreshold: number;
36
+ };
37
+ }
38
+ /**
39
+ * 默认自适应步长配置
40
+ */
41
+ export declare const DEFAULT_ADAPTIVE_STEP_CONFIG: AdaptiveStepConfig;
42
+ /**
43
+ * 自适应步长计算器
44
+ */
45
+ export declare class AdaptiveStepCalculator {
46
+ private config;
47
+ constructor(config?: Partial<AdaptiveStepConfig>);
48
+ /**
49
+ * 合并配置与默认值
50
+ */
51
+ private mergeConfig;
52
+ /**
53
+ * 计算节点密度
54
+ * @param nodeLookup 节点查找表
55
+ * @returns 密度值(节点数/10000平方像素)
56
+ */
57
+ calculateNodeDensity(nodeLookup: NodeLookup): number;
58
+ /**
59
+ * 计算两点之间的曼哈顿距离
60
+ */
61
+ calculateDistance(source: Point | {
62
+ x: number;
63
+ y: number;
64
+ }, target: Point | {
65
+ x: number;
66
+ y: number;
67
+ }): number;
68
+ /**
69
+ * 基于距离计算步长
70
+ */
71
+ calculateDistanceBasedStep(distance: number): number;
72
+ /**
73
+ * 基于密度计算步长
74
+ */
75
+ calculateDensityBasedStep(density: number): number;
76
+ /**
77
+ * 计算自适应步长
78
+ * 综合考虑距离和密度因素
79
+ */
80
+ calculateStep(sourceNode: InternalNode, targetNode: InternalNode, nodeLookup: NodeLookup): number;
81
+ /**
82
+ * 获取当前配置
83
+ */
84
+ getConfig(): AdaptiveStepConfig;
85
+ /**
86
+ * 更新配置
87
+ */
88
+ updateConfig(config: Partial<AdaptiveStepConfig>): void;
89
+ }
90
+ //# sourceMappingURL=AdaptiveStepCalculator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AdaptiveStepCalculator.d.ts","sourceRoot":"","sources":["../../src/utils/AdaptiveStepCalculator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAChE,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAA;AAEnC;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,gBAAgB;IAChB,OAAO,EAAE,OAAO,CAAA;IAChB,WAAW;IACX,OAAO,EAAE,MAAM,CAAA;IACf,WAAW;IACX,OAAO,EAAE,MAAM,CAAA;IACf,gBAAgB;IAChB,YAAY,EAAE;QACZ,OAAO,EAAE,OAAO,CAAA;QAChB,4BAA4B;QAC5B,SAAS,EAAE,MAAM,CAAA;KAClB,CAAA;IACD,gBAAgB;IAChB,aAAa,EAAE;QACb,OAAO,EAAE,OAAO,CAAA;QAChB,gBAAgB;QAChB,kBAAkB,EAAE,MAAM,CAAA;QAC1B,gBAAgB;QAChB,iBAAiB,EAAE,MAAM,CAAA;KAC1B,CAAA;CACF;AAED;;GAEG;AACH,eAAO,MAAM,4BAA4B,EAAE,kBAa1C,CAAA;AAED;;GAEG;AACH,qBAAa,sBAAsB;IACjC,OAAO,CAAC,MAAM,CAAoB;gBAEtB,MAAM,GAAE,OAAO,CAAC,kBAAkB,CAAM;IAIpD;;OAEG;IACH,OAAO,CAAC,WAAW;IAiBnB;;;;OAIG;IACH,oBAAoB,CAAC,UAAU,EAAE,UAAU,GAAG,MAAM;IA2BpD;;OAEG;IACH,iBAAiB,CAAC,MAAM,EAAE,KAAK,GAAG;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,EAAE,MAAM,EAAE,KAAK,GAAG;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,MAAM;IAI7G;;OAEG;IACH,0BAA0B,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM;IAsBpD;;OAEG;IACH,yBAAyB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM;IAsBlD;;;OAGG;IACH,aAAa,CACX,UAAU,EAAE,YAAY,EACxB,UAAU,EAAE,YAAY,EACxB,UAAU,EAAE,UAAU,GACrB,MAAM;IAyCT;;OAEG;IACH,SAAS,IAAI,kBAAkB;IAI/B;;OAEG;IACH,YAAY,CAAC,MAAM,EAAE,OAAO,CAAC,kBAAkB,CAAC,GAAG,IAAI;CAGxD"}