@foblex/flow 17.0.6 → 17.0.7

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 (61) hide show
  1. package/domain/f-connection/find-closest-input/find-closest-input.execution.d.ts +11 -0
  2. package/domain/f-connection/{find-closest-input-using-snap-threshold/find-closest-input-using-snap-threshold.request.d.ts → find-closest-input/find-closest-input.request.d.ts} +2 -3
  3. package/domain/f-connection/find-closest-input/i-closest-input.d.ts +7 -0
  4. package/domain/f-connection/find-closest-input/index.d.ts +3 -0
  5. package/domain/f-connection/get-connector-with-rect/get-connector-with-rect.execution.d.ts +2 -3
  6. package/domain/f-connection/index.d.ts +1 -1
  7. package/domain/f-connection/providers.d.ts +2 -2
  8. package/domain/get-normalized-element-rect/get-normalized-element-rect-request.d.ts +2 -1
  9. package/domain/providers.d.ts +1 -1
  10. package/esm2022/domain/f-connection/calculate-connection-line-by-behavior/calculate-connection-line-by-behavior.request.mjs +1 -1
  11. package/esm2022/domain/f-connection/calculate-connection-line-by-behavior/fixed-center-behavior.mjs +5 -3
  12. package/esm2022/domain/f-connection/calculate-connection-line-by-behavior/fixed-outbound-behavior.mjs +19 -29
  13. package/esm2022/domain/f-connection/calculate-connection-line-by-behavior/floating-behavior.mjs +6 -3
  14. package/esm2022/domain/f-connection/find-closest-input/find-closest-input.execution.mjs +42 -0
  15. package/esm2022/domain/f-connection/find-closest-input/find-closest-input.request.mjs +9 -0
  16. package/esm2022/domain/f-connection/find-closest-input/i-closest-input.mjs +2 -0
  17. package/esm2022/domain/f-connection/find-closest-input/index.mjs +4 -0
  18. package/esm2022/domain/f-connection/get-connector-with-rect/get-connector-with-rect-request.mjs +1 -1
  19. package/esm2022/domain/f-connection/get-connector-with-rect/get-connector-with-rect.execution.mjs +7 -11
  20. package/esm2022/domain/f-connection/index.mjs +2 -2
  21. package/esm2022/domain/f-connection/providers.mjs +3 -3
  22. package/esm2022/domain/f-connection/redraw-connections/redraw-connections.execution.mjs +2 -2
  23. package/esm2022/domain/f-selection/get-can-be-selected-items/get-can-be-selected-items.execution.mjs +3 -3
  24. package/esm2022/domain/get-normalized-element-rect/get-normalized-element-rect-request.mjs +4 -2
  25. package/esm2022/domain/get-normalized-element-rect/get-normalized-element-rect.execution.mjs +5 -5
  26. package/esm2022/f-connection/f-connection/f-connection.component.mjs +6 -5
  27. package/esm2022/f-draggable/connections/create-connection/create-connection.drag-handler.mjs +33 -19
  28. package/esm2022/f-draggable/connections/reassign-connection/reassign-connection.drag-handler.mjs +29 -21
  29. package/esm2022/f-draggable/domain/get-normalized-parent-node-rect/get-normalized-parent-node-rect.execution.mjs +2 -2
  30. package/esm2022/f-draggable/domain/is-connection-under-node/is-connection-under-node.execution.mjs +2 -2
  31. package/esm2022/f-draggable/node/connection-base-drag-handler.mjs +2 -2
  32. package/esm2022/f-draggable/node/connection-source.drag-handler.mjs +2 -2
  33. package/esm2022/f-draggable/node/connection-target.drag-handler.mjs +2 -2
  34. package/esm2022/f-draggable/node/connection.drag-handler.mjs +2 -2
  35. package/esm2022/f-draggable/node/create-move-nodes-drag-model-from-selection/domain/get-node-move-restrictions/get-node-move-restrictions.execution.mjs +2 -2
  36. package/esm2022/f-draggable/node/node-drag-to-parent-preparation/node-drag-to-parent-preparation.execution.mjs +15 -8
  37. package/esm2022/f-draggable/node/node-drag-to-parent.drag-handler.mjs +32 -17
  38. package/esm2022/f-draggable/node/node-move-finalize/node-move-finalize.execution.mjs +1 -1
  39. package/esm2022/f-draggable/node-resize/get-normalized-children-nodes-rect/get-normalized-children-nodes-rect.execution.mjs +2 -2
  40. package/esm2022/f-draggable/node-resize/node-resize.drag-handler.mjs +2 -2
  41. package/esm2022/f-external-item/domain/external-item-finalize/external-item-finalize.execution.mjs +2 -2
  42. package/esm2022/f-line-alignment/domain/index.mjs +1 -2
  43. package/esm2022/f-line-alignment/f-line-alignment.component.mjs +17 -12
  44. package/f-connection/f-connection/f-connection.component.d.ts +4 -2
  45. package/f-draggable/connections/create-connection/create-connection.drag-handler.d.ts +8 -4
  46. package/f-draggable/connections/reassign-connection/reassign-connection.drag-handler.d.ts +7 -4
  47. package/f-draggable/node/connection-base-drag-handler.d.ts +1 -1
  48. package/f-draggable/node/node-drag-to-parent-preparation/node-drag-to-parent-preparation.execution.d.ts +4 -3
  49. package/f-draggable/node/node-drag-to-parent.drag-handler.d.ts +9 -4
  50. package/f-line-alignment/domain/index.d.ts +0 -1
  51. package/f-line-alignment/f-line-alignment.component.d.ts +2 -1
  52. package/fesm2022/foblex-flow.mjs +185 -242
  53. package/fesm2022/foblex-flow.mjs.map +1 -1
  54. package/package.json +3 -3
  55. package/domain/f-connection/find-closest-input-using-snap-threshold/find-closest-input-using-snap-threshold.execution.d.ts +0 -11
  56. package/domain/f-connection/find-closest-input-using-snap-threshold/index.d.ts +0 -2
  57. package/esm2022/domain/f-connection/find-closest-input-using-snap-threshold/find-closest-input-using-snap-threshold.execution.mjs +0 -39
  58. package/esm2022/domain/f-connection/find-closest-input-using-snap-threshold/find-closest-input-using-snap-threshold.request.mjs +0 -11
  59. package/esm2022/domain/f-connection/find-closest-input-using-snap-threshold/index.mjs +0 -3
  60. package/esm2022/f-line-alignment/domain/nearest-coordinate.mjs +0 -104
  61. package/f-line-alignment/domain/nearest-coordinate.d.ts +0 -27
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@foblex/flow",
3
- "version": "17.0.6",
3
+ "version": "17.0.7",
4
4
  "description": "An Angular library designed to simplify the creation and manipulation of dynamic flow. Provides components for flows, nodes, and connections, automating node manipulation and inter-node connections.",
5
5
  "main": "index.js",
6
6
  "types": "index.d.ts",
@@ -32,8 +32,8 @@
32
32
  "@angular/common": ">=15.0.0",
33
33
  "@angular/core": ">=15.0.0",
34
34
  "@foblex/platform": "1.0.4",
35
- "@foblex/mediator": "1.1.0",
36
- "@foblex/2d": "1.1.5",
35
+ "@foblex/mediator": "1.1.2",
36
+ "@foblex/2d": "1.1.7",
37
37
  "@foblex/drag-toolkit": "1.1.0",
38
38
  "@foblex/utils": "1.1.0"
39
39
  },
@@ -1,11 +0,0 @@
1
- import { FindClosestInputUsingSnapThresholdRequest } from './find-closest-input-using-snap-threshold.request';
2
- import { IExecution } from '@foblex/mediator';
3
- import { IConnectorWithRect } from '../get-connector-with-rect';
4
- import * as i0 from "@angular/core";
5
- export declare class FindClosestInputUsingSnapThresholdExecution implements IExecution<FindClosestInputUsingSnapThresholdRequest, IConnectorWithRect | undefined> {
6
- handle(payload: FindClosestInputUsingSnapThresholdRequest): IConnectorWithRect | undefined;
7
- private distanceToRectangle;
8
- private clamp;
9
- static ɵfac: i0.ɵɵFactoryDeclaration<FindClosestInputUsingSnapThresholdExecution, never>;
10
- static ɵprov: i0.ɵɵInjectableDeclaration<FindClosestInputUsingSnapThresholdExecution>;
11
- }
@@ -1,2 +0,0 @@
1
- export * from './find-closest-input-using-snap-threshold.request';
2
- export * from './find-closest-input-using-snap-threshold.execution';
@@ -1,39 +0,0 @@
1
- import { __decorate } from "tslib";
2
- import { FindClosestInputUsingSnapThresholdRequest } from './find-closest-input-using-snap-threshold.request';
3
- import { Injectable } from '@angular/core';
4
- import { FExecutionRegister } from '@foblex/mediator';
5
- import * as i0 from "@angular/core";
6
- let FindClosestInputUsingSnapThresholdExecution = class FindClosestInputUsingSnapThresholdExecution {
7
- handle(payload) {
8
- let result;
9
- let minDistance = Infinity;
10
- for (const element of payload.canBeConnectedInputs) {
11
- const distance = this.distanceToRectangle(payload.position, element);
12
- if (distance < minDistance) {
13
- minDistance = distance;
14
- result = element;
15
- }
16
- }
17
- return minDistance < payload.snapThreshold ? result : undefined;
18
- }
19
- distanceToRectangle(point, inputWithRect) {
20
- const closestX = this.clamp(point.x, inputWithRect.fRect.x, inputWithRect.fRect.x + inputWithRect.fRect.width);
21
- const closestY = this.clamp(point.y, inputWithRect.fRect.y, inputWithRect.fRect.y + inputWithRect.fRect.height);
22
- const dx = point.x - closestX;
23
- const dy = point.y - closestY;
24
- return Math.sqrt(dx * dx + dy * dy);
25
- }
26
- clamp(value, min, max) {
27
- return Math.max(min, Math.min(max, value));
28
- }
29
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.4", ngImport: i0, type: FindClosestInputUsingSnapThresholdExecution, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
30
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.4", ngImport: i0, type: FindClosestInputUsingSnapThresholdExecution });
31
- };
32
- FindClosestInputUsingSnapThresholdExecution = __decorate([
33
- FExecutionRegister(FindClosestInputUsingSnapThresholdRequest)
34
- ], FindClosestInputUsingSnapThresholdExecution);
35
- export { FindClosestInputUsingSnapThresholdExecution };
36
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.4", ngImport: i0, type: FindClosestInputUsingSnapThresholdExecution, decorators: [{
37
- type: Injectable
38
- }] });
39
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmluZC1jbG9zZXN0LWlucHV0LXVzaW5nLXNuYXAtdGhyZXNob2xkLmV4ZWN1dGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2YtZmxvdy9zcmMvZG9tYWluL2YtY29ubmVjdGlvbi9maW5kLWNsb3Nlc3QtaW5wdXQtdXNpbmctc25hcC10aHJlc2hvbGQvZmluZC1jbG9zZXN0LWlucHV0LXVzaW5nLXNuYXAtdGhyZXNob2xkLmV4ZWN1dGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLHlDQUF5QyxFQUFFLE1BQU0sbURBQW1ELENBQUM7QUFDOUcsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsa0JBQWtCLEVBQWMsTUFBTSxrQkFBa0IsQ0FBQzs7QUFNM0QsSUFBTSwyQ0FBMkMsR0FBakQsTUFBTSwyQ0FBMkM7SUFJL0MsTUFBTSxDQUFDLE9BQWtEO1FBQzlELElBQUksTUFBc0MsQ0FBQztRQUMzQyxJQUFJLFdBQVcsR0FBRyxRQUFRLENBQUM7UUFFM0IsS0FBSyxNQUFNLE9BQU8sSUFBSSxPQUFPLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztZQUNuRCxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsQ0FBQztZQUVyRSxJQUFJLFFBQVEsR0FBRyxXQUFXLEVBQUUsQ0FBQztnQkFDM0IsV0FBVyxHQUFHLFFBQVEsQ0FBQztnQkFDdkIsTUFBTSxHQUFHLE9BQU8sQ0FBQztZQUNuQixDQUFDO1FBQ0gsQ0FBQztRQUVELE9BQU8sV0FBVyxHQUFHLE9BQU8sQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO0lBQ2xFLENBQUM7SUFFTyxtQkFBbUIsQ0FBQyxLQUFhLEVBQUUsYUFBaUM7UUFDMUUsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLGFBQWEsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDL0csTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLGFBQWEsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7UUFFaEgsTUFBTSxFQUFFLEdBQUcsS0FBSyxDQUFDLENBQUMsR0FBRyxRQUFRLENBQUM7UUFDOUIsTUFBTSxFQUFFLEdBQUcsS0FBSyxDQUFDLENBQUMsR0FBRyxRQUFRLENBQUM7UUFFOUIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO0lBQ3RDLENBQUM7SUFFTyxLQUFLLENBQUMsS0FBYSxFQUFFLEdBQVcsRUFBRSxHQUFXO1FBQ25ELE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUM3QyxDQUFDO3VHQWhDVSwyQ0FBMkM7MkdBQTNDLDJDQUEyQzs7QUFBM0MsMkNBQTJDO0lBRHZELGtCQUFrQixDQUFDLHlDQUF5QyxDQUFDO0dBQ2pELDJDQUEyQyxDQWlDdkQ7OzJGQWpDWSwyQ0FBMkM7a0JBRnZELFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBGaW5kQ2xvc2VzdElucHV0VXNpbmdTbmFwVGhyZXNob2xkUmVxdWVzdCB9IGZyb20gJy4vZmluZC1jbG9zZXN0LWlucHV0LXVzaW5nLXNuYXAtdGhyZXNob2xkLnJlcXVlc3QnO1xuaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRkV4ZWN1dGlvblJlZ2lzdGVyLCBJRXhlY3V0aW9uIH0gZnJvbSAnQGZvYmxleC9tZWRpYXRvcic7XG5pbXBvcnQgeyBJUG9pbnQgfSBmcm9tICdAZm9ibGV4LzJkJztcbmltcG9ydCB7IElDb25uZWN0b3JXaXRoUmVjdCB9IGZyb20gJy4uL2dldC1jb25uZWN0b3Itd2l0aC1yZWN0JztcblxuQEluamVjdGFibGUoKVxuQEZFeGVjdXRpb25SZWdpc3RlcihGaW5kQ2xvc2VzdElucHV0VXNpbmdTbmFwVGhyZXNob2xkUmVxdWVzdClcbmV4cG9ydCBjbGFzcyBGaW5kQ2xvc2VzdElucHV0VXNpbmdTbmFwVGhyZXNob2xkRXhlY3V0aW9uXG4gIGltcGxlbWVudHMgSUV4ZWN1dGlvbjxGaW5kQ2xvc2VzdElucHV0VXNpbmdTbmFwVGhyZXNob2xkUmVxdWVzdCwgSUNvbm5lY3RvcldpdGhSZWN0IHwgdW5kZWZpbmVkPiB7XG5cblxuICBwdWJsaWMgaGFuZGxlKHBheWxvYWQ6IEZpbmRDbG9zZXN0SW5wdXRVc2luZ1NuYXBUaHJlc2hvbGRSZXF1ZXN0KTogSUNvbm5lY3RvcldpdGhSZWN0IHwgdW5kZWZpbmVkIHtcbiAgICBsZXQgcmVzdWx0OiBJQ29ubmVjdG9yV2l0aFJlY3QgfCB1bmRlZmluZWQ7XG4gICAgbGV0IG1pbkRpc3RhbmNlID0gSW5maW5pdHk7XG5cbiAgICBmb3IgKGNvbnN0IGVsZW1lbnQgb2YgcGF5bG9hZC5jYW5CZUNvbm5lY3RlZElucHV0cykge1xuICAgICAgY29uc3QgZGlzdGFuY2UgPSB0aGlzLmRpc3RhbmNlVG9SZWN0YW5nbGUocGF5bG9hZC5wb3NpdGlvbiwgZWxlbWVudCk7XG5cbiAgICAgIGlmIChkaXN0YW5jZSA8IG1pbkRpc3RhbmNlKSB7XG4gICAgICAgIG1pbkRpc3RhbmNlID0gZGlzdGFuY2U7XG4gICAgICAgIHJlc3VsdCA9IGVsZW1lbnQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG1pbkRpc3RhbmNlIDwgcGF5bG9hZC5zbmFwVGhyZXNob2xkID8gcmVzdWx0IDogdW5kZWZpbmVkO1xuICB9XG5cbiAgcHJpdmF0ZSBkaXN0YW5jZVRvUmVjdGFuZ2xlKHBvaW50OiBJUG9pbnQsIGlucHV0V2l0aFJlY3Q6IElDb25uZWN0b3JXaXRoUmVjdCk6IG51bWJlciB7XG4gICAgY29uc3QgY2xvc2VzdFggPSB0aGlzLmNsYW1wKHBvaW50LngsIGlucHV0V2l0aFJlY3QuZlJlY3QueCwgaW5wdXRXaXRoUmVjdC5mUmVjdC54ICsgaW5wdXRXaXRoUmVjdC5mUmVjdC53aWR0aCk7XG4gICAgY29uc3QgY2xvc2VzdFkgPSB0aGlzLmNsYW1wKHBvaW50LnksIGlucHV0V2l0aFJlY3QuZlJlY3QueSwgaW5wdXRXaXRoUmVjdC5mUmVjdC55ICsgaW5wdXRXaXRoUmVjdC5mUmVjdC5oZWlnaHQpO1xuXG4gICAgY29uc3QgZHggPSBwb2ludC54IC0gY2xvc2VzdFg7XG4gICAgY29uc3QgZHkgPSBwb2ludC55IC0gY2xvc2VzdFk7XG5cbiAgICByZXR1cm4gTWF0aC5zcXJ0KGR4ICogZHggKyBkeSAqIGR5KTtcbiAgfVxuXG4gIHByaXZhdGUgY2xhbXAodmFsdWU6IG51bWJlciwgbWluOiBudW1iZXIsIG1heDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICByZXR1cm4gTWF0aC5tYXgobWluLCBNYXRoLm1pbihtYXgsIHZhbHVlKSk7XG4gIH1cbn1cbiJdfQ==
@@ -1,11 +0,0 @@
1
- export class FindClosestInputUsingSnapThresholdRequest {
2
- position;
3
- canBeConnectedInputs;
4
- snapThreshold;
5
- constructor(position, canBeConnectedInputs, snapThreshold) {
6
- this.position = position;
7
- this.canBeConnectedInputs = canBeConnectedInputs;
8
- this.snapThreshold = snapThreshold;
9
- }
10
- }
11
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmluZC1jbG9zZXN0LWlucHV0LXVzaW5nLXNuYXAtdGhyZXNob2xkLnJlcXVlc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9mLWZsb3cvc3JjL2RvbWFpbi9mLWNvbm5lY3Rpb24vZmluZC1jbG9zZXN0LWlucHV0LXVzaW5nLXNuYXAtdGhyZXNob2xkL2ZpbmQtY2xvc2VzdC1pbnB1dC11c2luZy1zbmFwLXRocmVzaG9sZC5yZXF1ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUdBLE1BQU0sT0FBTyx5Q0FBeUM7SUFHM0M7SUFDQTtJQUNBO0lBSFQsWUFDUyxRQUFnQixFQUNoQixvQkFBMEMsRUFDMUMsYUFBcUI7UUFGckIsYUFBUSxHQUFSLFFBQVEsQ0FBUTtRQUNoQix5QkFBb0IsR0FBcEIsb0JBQW9CLENBQXNCO1FBQzFDLGtCQUFhLEdBQWIsYUFBYSxDQUFRO0lBRTlCLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IElQb2ludCB9IGZyb20gJ0Bmb2JsZXgvMmQnO1xuaW1wb3J0IHsgSUNvbm5lY3RvcldpdGhSZWN0IH0gZnJvbSAnLi4vZ2V0LWNvbm5lY3Rvci13aXRoLXJlY3QnO1xuXG5leHBvcnQgY2xhc3MgRmluZENsb3Nlc3RJbnB1dFVzaW5nU25hcFRocmVzaG9sZFJlcXVlc3Qge1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyBwb3NpdGlvbjogSVBvaW50LFxuICAgIHB1YmxpYyBjYW5CZUNvbm5lY3RlZElucHV0czogSUNvbm5lY3RvcldpdGhSZWN0W10sXG4gICAgcHVibGljIHNuYXBUaHJlc2hvbGQ6IG51bWJlclxuICApIHtcbiAgfVxufVxuIl19
@@ -1,3 +0,0 @@
1
- export * from './find-closest-input-using-snap-threshold.request';
2
- export * from './find-closest-input-using-snap-threshold.execution';
3
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9mLWZsb3cvc3JjL2RvbWFpbi9mLWNvbm5lY3Rpb24vZmluZC1jbG9zZXN0LWlucHV0LXVzaW5nLXNuYXAtdGhyZXNob2xkL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsbURBQW1ELENBQUM7QUFFbEUsY0FBYyxxREFBcUQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vZmluZC1jbG9zZXN0LWlucHV0LXVzaW5nLXNuYXAtdGhyZXNob2xkLnJlcXVlc3QnO1xuXG5leHBvcnQgKiBmcm9tICcuL2ZpbmQtY2xvc2VzdC1pbnB1dC11c2luZy1zbmFwLXRocmVzaG9sZC5leGVjdXRpb24nO1xuIl19
@@ -1,104 +0,0 @@
1
- /**
2
- * A class to find the nearest coordinate.
3
- */
4
- export class NearestCoordinateFinder {
5
- alignThreshold;
6
- elements;
7
- target;
8
- /**
9
- * Constructor to initialize the NearestCoordinateFinder.
10
- * @param elements - The array of IRect elements.
11
- * @param target - The target IRect element.
12
- * @param alignThreshold - The threshold to align the elements.
13
- */
14
- constructor(elements, target, alignThreshold = 10) {
15
- this.alignThreshold = alignThreshold;
16
- this.elements = elements;
17
- this.target = target;
18
- }
19
- /**
20
- * Finds the nearest coordinate on a specified axis.
21
- * @returns The nearest coordinate and its distance.
22
- */
23
- findNearestCoordinateByX() {
24
- let nearest;
25
- let minDistance;
26
- for (const element of this.elements) {
27
- const distanceLeftLeft = this.target.x - element.x;
28
- const distanceLeftRight = this.target.x - (element.x + element.width);
29
- const distanceCenterCenter = this.target.gravityCenter.x - element.gravityCenter.x;
30
- const distanceRightLeft = (this.target.x + this.target.width) - element.x;
31
- const distanceRightRight = (this.target.x + this.target.width) - (element.x + element.width);
32
- if (Math.abs(distanceLeftLeft) <= this.alignThreshold ||
33
- Math.abs(distanceLeftRight) <= this.alignThreshold ||
34
- Math.abs(distanceCenterCenter) <= this.alignThreshold ||
35
- Math.abs(distanceRightLeft) <= this.alignThreshold ||
36
- Math.abs(distanceRightRight) <= this.alignThreshold) {
37
- if (minDistance === undefined || Math.abs(distanceCenterCenter) < Math.abs(minDistance)) {
38
- minDistance = distanceCenterCenter;
39
- nearest = element.gravityCenter.x;
40
- }
41
- if (Math.abs(distanceLeftLeft) < Math.abs(minDistance)) {
42
- minDistance = distanceLeftLeft;
43
- nearest = element.x;
44
- }
45
- if (Math.abs(distanceRightRight) < Math.abs(minDistance)) {
46
- minDistance = distanceRightRight;
47
- nearest = element.x + element.width;
48
- }
49
- if (Math.abs(distanceLeftRight) < Math.abs(minDistance)) {
50
- minDistance = distanceLeftRight;
51
- nearest = element.x + element.width;
52
- }
53
- if (Math.abs(distanceRightLeft) < Math.abs(minDistance)) {
54
- minDistance = distanceRightLeft;
55
- nearest = element.x;
56
- }
57
- }
58
- }
59
- return { value: nearest, distance: minDistance };
60
- }
61
- /**
62
- * Finds the nearest coordinate on a specified axis.
63
- * @returns The nearest coordinate and its distance.
64
- */
65
- findNearestCoordinateByY() {
66
- let nearest;
67
- let minDistance;
68
- for (const element of this.elements) {
69
- const distanceTopTop = this.target.y - element.y;
70
- const distanceTopBottom = this.target.y - (element.y + element.height);
71
- const distanceCenterCenter = this.target.gravityCenter.y - element.gravityCenter.y;
72
- const distanceBottomTop = (this.target.y + this.target.height) - element.y;
73
- const distanceBottomBottom = (this.target.y + this.target.height) - (element.y + element.height);
74
- if (Math.abs(distanceTopTop) <= this.alignThreshold ||
75
- Math.abs(distanceTopBottom) <= this.alignThreshold ||
76
- Math.abs(distanceCenterCenter) <= this.alignThreshold ||
77
- Math.abs(distanceBottomTop) <= this.alignThreshold ||
78
- Math.abs(distanceBottomBottom) <= this.alignThreshold) {
79
- if (minDistance === undefined || Math.abs(distanceCenterCenter) < Math.abs(minDistance)) {
80
- minDistance = distanceCenterCenter;
81
- nearest = element.gravityCenter.y;
82
- }
83
- if (Math.abs(distanceTopTop) < Math.abs(minDistance)) {
84
- minDistance = distanceTopTop;
85
- nearest = element.y;
86
- }
87
- if (Math.abs(distanceBottomBottom) < Math.abs(minDistance)) {
88
- minDistance = distanceBottomBottom;
89
- nearest = element.y + element.height;
90
- }
91
- if (Math.abs(distanceTopBottom) < Math.abs(minDistance)) {
92
- minDistance = distanceTopBottom;
93
- nearest = element.y + element.height;
94
- }
95
- if (Math.abs(distanceBottomTop) < Math.abs(minDistance)) {
96
- minDistance = distanceBottomTop;
97
- nearest = element.y;
98
- }
99
- }
100
- }
101
- return { value: nearest, distance: minDistance };
102
- }
103
- }
104
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmVhcmVzdC1jb29yZGluYXRlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZi1mbG93L3NyYy9mLWxpbmUtYWxpZ25tZW50L2RvbWFpbi9uZWFyZXN0LWNvb3JkaW5hdGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBR0E7O0dBRUc7QUFDSCxNQUFNLE9BQU8sdUJBQXVCO0lBWW9CO0lBVDlDLFFBQVEsQ0FBVTtJQUNsQixNQUFNLENBQVE7SUFFdEI7Ozs7O09BS0c7SUFDSCxZQUFZLFFBQWlCLEVBQUUsTUFBYSxFQUFVLGlCQUF5QixFQUFFO1FBQTNCLG1CQUFjLEdBQWQsY0FBYyxDQUFhO1FBQy9FLElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO0lBQ3ZCLENBQUM7SUFFRDs7O09BR0c7SUFDSSx3QkFBd0I7UUFDN0IsSUFBSSxPQUEyQixDQUFDO1FBQ2hDLElBQUksV0FBK0IsQ0FBQztRQUVwQyxLQUFLLE1BQU0sT0FBTyxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNwQyxNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUM7WUFDbkQsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3RFLE1BQU0sb0JBQW9CLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDO1lBQ25GLE1BQU0saUJBQWlCLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLE9B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LFdBQVcsR0FBRyxjQUFjLENBQUM7b0JBQzdCLE9BQU8sR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDO2dCQUN0QixDQUFDO2dCQUNELElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxvQkFBb0IsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQztvQkFDM0QsV0FBVyxHQUFHLG9CQUFvQixDQUFDO29CQUNuQyxPQUFPLEdBQUcsT0FBTyxDQUFDLENBQUMsR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDO2dCQUN2QyxDQUFDO2dCQUNELElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQztvQkFDeEQsV0FBVyxHQUFHLGlCQUFpQixDQUFDO29CQUNoQyxPQUFPLEdBQUcsT0FBTyxDQUFDLENBQUMsR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDO2dCQUN2QyxDQUFDO2dCQUNELElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQztvQkFDeEQsV0FBVyxHQUFHLGlCQUFpQixDQUFDO29CQUNoQyxPQUFPLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQztnQkFDdEIsQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDO1FBRUQsT0FBTyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRSxDQUFDO0lBQ25ELENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IElSZWN0IH0gZnJvbSAnQGZvYmxleC8yZCc7XG5pbXBvcnQgeyBJTmVhcmVzdENvb3JkaW5hdGVSZXN1bHQgfSBmcm9tICcuL2ktbmVhcmVzdC1jb29yZGluYXRlLXJlc3VsdCc7XG5cbi8qKlxuICogQSBjbGFzcyB0byBmaW5kIHRoZSBuZWFyZXN0IGNvb3JkaW5hdGUuXG4gKi9cbmV4cG9ydCBjbGFzcyBOZWFyZXN0Q29vcmRpbmF0ZUZpbmRlciB7XG5cblxuICBwcml2YXRlIGVsZW1lbnRzOiBJUmVjdFtdO1xuICBwcml2YXRlIHRhcmdldDogSVJlY3Q7XG5cbiAgLyoqXG4gICAqIENvbnN0cnVjdG9yIHRvIGluaXRpYWxpemUgdGhlIE5lYXJlc3RDb29yZGluYXRlRmluZGVyLlxuICAgKiBAcGFyYW0gZWxlbWVudHMgLSBUaGUgYXJyYXkgb2YgSVJlY3QgZWxlbWVudHMuXG4gICAqIEBwYXJhbSB0YXJnZXQgLSBUaGUgdGFyZ2V0IElSZWN0IGVsZW1lbnQuXG4gICAqIEBwYXJhbSBhbGlnblRocmVzaG9sZCAtIFRoZSB0aHJlc2hvbGQgdG8gYWxpZ24gdGhlIGVsZW1lbnRzLlxuICAgKi9cbiAgY29uc3RydWN0b3IoZWxlbWVudHM6IElSZWN0W10sIHRhcmdldDogSVJlY3QsIHByaXZhdGUgYWxpZ25UaHJlc2hvbGQ6IG51bWJlciA9IDEwKSB7XG4gICAgdGhpcy5lbGVtZW50cyA9IGVsZW1lbnRzO1xuICAgIHRoaXMudGFyZ2V0ID0gdGFyZ2V0O1xuICB9XG5cbiAgLyoqXG4gICAqIEZpbmRzIHRoZSBuZWFyZXN0IGNvb3JkaW5hdGUgb24gYSBzcGVjaWZpZWQgYXhpcy5cbiAgICogQHJldHVybnMgVGhlIG5lYXJlc3QgY29vcmRpbmF0ZSBhbmQgaXRzIGRpc3RhbmNlLlxuICAgKi9cbiAgcHVibGljIGZpbmROZWFyZXN0Q29vcmRpbmF0ZUJ5WCgpOiBJTmVhcmVzdENvb3JkaW5hdGVSZXN1bHQge1xuICAgIGxldCBuZWFyZXN0OiBudW1iZXIgfCB1bmRlZmluZWQ7XG4gICAgbGV0IG1pbkRpc3RhbmNlOiBudW1iZXIgfCB1bmRlZmluZWQ7XG5cbiAgICBmb3IgKGNvbnN0IGVsZW1lbnQgb2YgdGhpcy5lbGVtZW50cykge1xuICAgICAgY29uc3QgZGlzdGFuY2VMZWZ0TGVmdCA9IHRoaXMudGFyZ2V0LnggLSBlbGVtZW50Lng7XG4gICAgICBjb25zdCBkaXN0YW5jZUxlZnRSaWdodCA9IHRoaXMudGFyZ2V0LnggLSAoZWxlbWVudC54ICsgZWxlbWVudC53aWR0aCk7XG4gICAgICBjb25zdCBkaXN0YW5jZUNlbnRlckNlbnRlciA9IHRoaXMudGFyZ2V0LmdyYXZpdHlDZW50ZXIueCAtIGVsZW1lbnQuZ3Jhdml0eUNlbnRlci54O1xuICAgICAgY29uc3QgZGlzdGFuY2VSaWdodExlZnQgPSAodGhpcy50YXJnZXQueCArIHRoaXMudGFyZ2V0LndpZHRoKSAtIGVsZW1lbnQueDtcbiAgICAgIGNvbnN0IGRpc3RhbmNlUmlnaHRSaWdodCA9ICh0aGlzLnRhcmdldC54ICsgdGhpcy50YXJnZXQud2lkdGgpIC0gKGVsZW1lbnQueCArIGVsZW1lbnQud2lkdGgpO1xuXG4gICAgICBpZiAoXG4gICAgICAgICAgTWF0aC5hYnMoZGlzdGFuY2VMZWZ0TGVmdCkgPD0gdGhpcy5hbGlnblRocmVzaG9sZCB8fFxuICAgICAgICAgIE1hdGguYWJzKGRpc3RhbmNlTGVmdFJpZ2h0KSA8PSB0aGlzLmFsaWduVGhyZXNob2xkIHx8XG4gICAgICAgICAgTWF0aC5hYnMoZGlzdGFuY2VDZW50ZXJDZW50ZXIpIDw9IHRoaXMuYWxpZ25UaHJlc2hvbGQgfHxcbiAgICAgICAgICBNYXRoLmFicyhkaXN0YW5jZVJpZ2h0TGVmdCkgPD0gdGhpcy5hbGlnblRocmVzaG9sZCB8fFxuICAgICAgICAgIE1hdGguYWJzKGRpc3RhbmNlUmlnaHRSaWdodCkgPD0gdGhpcy5hbGlnblRocmVzaG9sZFxuICAgICAgKSB7XG4gICAgICAgIGlmIChtaW5EaXN0YW5jZSA9PT0gdW5kZWZpbmVkIHx8IE1hdGguYWJzKGRpc3RhbmNlQ2VudGVyQ2VudGVyKSA8IE1hdGguYWJzKG1pbkRpc3RhbmNlKSkge1xuICAgICAgICAgIG1pbkRpc3RhbmNlID0gZGlzdGFuY2VDZW50ZXJDZW50ZXI7XG4gICAgICAgICAgbmVhcmVzdCA9IGVsZW1lbnQuZ3Jhdml0eUNlbnRlci54O1xuICAgICAgICB9XG4gICAgICAgIGlmIChNYXRoLmFicyhkaXN0YW5jZUxlZnRMZWZ0KSA8IE1hdGguYWJzKG1pbkRpc3RhbmNlKSkge1xuICAgICAgICAgIG1pbkRpc3RhbmNlID0gZGlzdGFuY2VMZWZ0TGVmdDtcbiAgICAgICAgICBuZWFyZXN0ID0gZWxlbWVudC54O1xuICAgICAgICB9XG4gICAgICAgIGlmIChNYXRoLmFicyhkaXN0YW5jZVJpZ2h0UmlnaHQpIDwgTWF0aC5hYnMobWluRGlzdGFuY2UpKSB7XG4gICAgICAgICAgbWluRGlzdGFuY2UgPSBkaXN0YW5jZVJpZ2h0UmlnaHQ7XG4gICAgICAgICAgbmVhcmVzdCA9IGVsZW1lbnQueCArIGVsZW1lbnQud2lkdGg7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKE1hdGguYWJzKGRpc3RhbmNlTGVmdFJpZ2h0KSA8IE1hdGguYWJzKG1pbkRpc3RhbmNlKSkge1xuICAgICAgICAgIG1pbkRpc3RhbmNlID0gZGlzdGFuY2VMZWZ0UmlnaHQ7XG4gICAgICAgICAgbmVhcmVzdCA9IGVsZW1lbnQueCArIGVsZW1lbnQud2lkdGg7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKE1hdGguYWJzKGRpc3RhbmNlUmlnaHRMZWZ0KSA8IE1hdGguYWJzKG1pbkRpc3RhbmNlKSkge1xuICAgICAgICAgIG1pbkRpc3RhbmNlID0gZGlzdGFuY2VSaWdodExlZnQ7XG4gICAgICAgICAgbmVhcmVzdCA9IGVsZW1lbnQueDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4geyB2YWx1ZTogbmVhcmVzdCwgZGlzdGFuY2U6IG1pbkRpc3RhbmNlIH07XG4gIH1cblxuXG4gIC8qKlxuICAgKiBGaW5kcyB0aGUgbmVhcmVzdCBjb29yZGluYXRlIG9uIGEgc3BlY2lmaWVkIGF4aXMuXG4gICAqIEByZXR1cm5zIFRoZSBuZWFyZXN0IGNvb3JkaW5hdGUgYW5kIGl0cyBkaXN0YW5jZS5cbiAgICovXG4gIHB1YmxpYyBmaW5kTmVhcmVzdENvb3JkaW5hdGVCeVkoKTogSU5lYXJlc3RDb29yZGluYXRlUmVzdWx0IHtcbiAgICBsZXQgbmVhcmVzdDogbnVtYmVyIHwgdW5kZWZpbmVkO1xuICAgIGxldCBtaW5EaXN0YW5jZTogbnVtYmVyIHwgdW5kZWZpbmVkO1xuXG4gICAgZm9yIChjb25zdCBlbGVtZW50IG9mIHRoaXMuZWxlbWVudHMpIHtcbiAgICAgIGNvbnN0IGRpc3RhbmNlVG9wVG9wID0gdGhpcy50YXJnZXQueSAtIGVsZW1lbnQueTtcbiAgICAgIGNvbnN0IGRpc3RhbmNlVG9wQm90dG9tID0gdGhpcy50YXJnZXQueSAtIChlbGVtZW50LnkgKyBlbGVtZW50LmhlaWdodCk7XG4gICAgICBjb25zdCBkaXN0YW5jZUNlbnRlckNlbnRlciA9IHRoaXMudGFyZ2V0LmdyYXZpdHlDZW50ZXIueSAtIGVsZW1lbnQuZ3Jhdml0eUNlbnRlci55O1xuICAgICAgY29uc3QgZGlzdGFuY2VCb3R0b21Ub3AgPSAodGhpcy50YXJnZXQueSArIHRoaXMudGFyZ2V0LmhlaWdodCkgLSBlbGVtZW50Lnk7XG4gICAgICBjb25zdCBkaXN0YW5jZUJvdHRvbUJvdHRvbSA9ICh0aGlzLnRhcmdldC55ICsgdGhpcy50YXJnZXQuaGVpZ2h0KSAtIChlbGVtZW50LnkgKyBlbGVtZW50LmhlaWdodCk7XG5cbiAgICAgIGlmIChcbiAgICAgICAgICBNYXRoLmFicyhkaXN0YW5jZVRvcFRvcCkgPD0gdGhpcy5hbGlnblRocmVzaG9sZCB8fFxuICAgICAgICAgIE1hdGguYWJzKGRpc3RhbmNlVG9wQm90dG9tKSA8PSB0aGlzLmFsaWduVGhyZXNob2xkIHx8XG4gICAgICAgICAgTWF0aC5hYnMoZGlzdGFuY2VDZW50ZXJDZW50ZXIpIDw9IHRoaXMuYWxpZ25UaHJlc2hvbGQgfHxcbiAgICAgICAgICBNYXRoLmFicyhkaXN0YW5jZUJvdHRvbVRvcCkgPD0gdGhpcy5hbGlnblRocmVzaG9sZCB8fFxuICAgICAgICAgIE1hdGguYWJzKGRpc3RhbmNlQm90dG9tQm90dG9tKSA8PSB0aGlzLmFsaWduVGhyZXNob2xkXG4gICAgICApIHtcbiAgICAgICAgaWYgKG1pbkRpc3RhbmNlID09PSB1bmRlZmluZWQgfHwgTWF0aC5hYnMoZGlzdGFuY2VDZW50ZXJDZW50ZXIpIDwgTWF0aC5hYnMobWluRGlzdGFuY2UpKSB7XG4gICAgICAgICAgbWluRGlzdGFuY2UgPSBkaXN0YW5jZUNlbnRlckNlbnRlcjtcbiAgICAgICAgICBuZWFyZXN0ID0gZWxlbWVudC5ncmF2aXR5Q2VudGVyLnk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKE1hdGguYWJzKGRpc3RhbmNlVG9wVG9wKSA8IE1hdGguYWJzKG1pbkRpc3RhbmNlKSkge1xuICAgICAgICAgIG1pbkRpc3RhbmNlID0gZGlzdGFuY2VUb3BUb3A7XG4gICAgICAgICAgbmVhcmVzdCA9IGVsZW1lbnQueTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoTWF0aC5hYnMoZGlzdGFuY2VCb3R0b21Cb3R0b20pIDwgTWF0aC5hYnMobWluRGlzdGFuY2UpKSB7XG4gICAgICAgICAgbWluRGlzdGFuY2UgPSBkaXN0YW5jZUJvdHRvbUJvdHRvbTtcbiAgICAgICAgICBuZWFyZXN0ID0gZWxlbWVudC55ICsgZWxlbWVudC5oZWlnaHQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKE1hdGguYWJzKGRpc3RhbmNlVG9wQm90dG9tKSA8IE1hdGguYWJzKG1pbkRpc3RhbmNlKSkge1xuICAgICAgICAgIG1pbkRpc3RhbmNlID0gZGlzdGFuY2VUb3BCb3R0b207XG4gICAgICAgICAgbmVhcmVzdCA9IGVsZW1lbnQueSArIGVsZW1lbnQuaGVpZ2h0O1xuICAgICAgICB9XG4gICAgICAgIGlmIChNYXRoLmFicyhkaXN0YW5jZUJvdHRvbVRvcCkgPCBNYXRoLmFicyhtaW5EaXN0YW5jZSkpIHtcbiAgICAgICAgICBtaW5EaXN0YW5jZSA9IGRpc3RhbmNlQm90dG9tVG9wO1xuICAgICAgICAgIG5lYXJlc3QgPSBlbGVtZW50Lnk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4geyB2YWx1ZTogbmVhcmVzdCwgZGlzdGFuY2U6IG1pbkRpc3RhbmNlIH07XG4gIH1cbn1cblxuIl19
@@ -1,27 +0,0 @@
1
- import { IRect } from '@foblex/2d';
2
- import { INearestCoordinateResult } from './i-nearest-coordinate-result';
3
- /**
4
- * A class to find the nearest coordinate.
5
- */
6
- export declare class NearestCoordinateFinder {
7
- private alignThreshold;
8
- private elements;
9
- private target;
10
- /**
11
- * Constructor to initialize the NearestCoordinateFinder.
12
- * @param elements - The array of IRect elements.
13
- * @param target - The target IRect element.
14
- * @param alignThreshold - The threshold to align the elements.
15
- */
16
- constructor(elements: IRect[], target: IRect, alignThreshold?: number);
17
- /**
18
- * Finds the nearest coordinate on a specified axis.
19
- * @returns The nearest coordinate and its distance.
20
- */
21
- findNearestCoordinateByX(): INearestCoordinateResult;
22
- /**
23
- * Finds the nearest coordinate on a specified axis.
24
- * @returns The nearest coordinate and its distance.
25
- */
26
- findNearestCoordinateByY(): INearestCoordinateResult;
27
- }