inspector-ng 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md ADDED
@@ -0,0 +1,24 @@
1
+ # inspector
2
+
3
+ This library was generated with [Angular CLI](https://github.com/angular/angular-cli) version 17.3.0.
4
+
5
+ ## Code scaffolding
6
+
7
+ Run `ng generate component component-name --project inspector` to generate a new component. You can also use `ng generate directive|pipe|service|class|guard|interface|enum|module --project inspector`.
8
+ > Note: Don't forget to add `--project inspector` or else it will be added to the default project in your `angular.json` file.
9
+
10
+ ## Build
11
+
12
+ Run `ng build inspector` to build the project. The build artifacts will be stored in the `dist/` directory.
13
+
14
+ ## Publishing
15
+
16
+ After building your library with `ng build inspector`, go to the dist folder `cd dist/inspector` and run `npm publish`.
17
+
18
+ ## Running unit tests
19
+
20
+ Run `ng test inspector` to execute the unit tests via [Karma](https://karma-runner.github.io).
21
+
22
+ ## Further help
23
+
24
+ To get more help on the Angular CLI use `ng help` or go check out the [Angular CLI Overview and Command Reference](https://angular.io/cli) page.
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Generated bundle index. Do not edit.
3
+ */
4
+ export * from './public-api';
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5zcGVjdG9yLW5nLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vcHJvamVjdHMvaW5zcGVjdG9yLW5nL3NyYy9pbnNwZWN0b3ItbmcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxjQUFjLGNBQWMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogR2VuZXJhdGVkIGJ1bmRsZSBpbmRleC4gRG8gbm90IGVkaXQuXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9wdWJsaWMtYXBpJztcbiJdfQ==
@@ -0,0 +1,5 @@
1
+ export const inspector_STORAGE_KEY = "inspector-state";
2
+ export const inspector_STATE_VERSION = 1;
3
+ export const GUIDE_SNAP_DISTANCE = 10;
4
+ export const GUIDE_HITBOX_SIZE = 14;
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RhbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvaW5zcGVjdG9yLW5nL3NyYy9saWIvY29uc3RhbnRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sQ0FBQyxNQUFNLHFCQUFxQixHQUFHLGlCQUFpQixDQUFDO0FBQ3ZELE1BQU0sQ0FBQyxNQUFNLHVCQUF1QixHQUFHLENBQUMsQ0FBQztBQUN6QyxNQUFNLENBQUMsTUFBTSxtQkFBbUIsR0FBRyxFQUFFLENBQUM7QUFDdEMsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQUcsRUFBRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNvbnN0IGluc3BlY3Rvcl9TVE9SQUdFX0tFWSA9IFwiaW5zcGVjdG9yLXN0YXRlXCI7XG5leHBvcnQgY29uc3QgaW5zcGVjdG9yX1NUQVRFX1ZFUlNJT04gPSAxO1xuZXhwb3J0IGNvbnN0IEdVSURFX1NOQVBfRElTVEFOQ0UgPSAxMDtcbmV4cG9ydCBjb25zdCBHVUlERV9ISVRCT1hfU0laRSA9IDE0O1xuIl19
@@ -0,0 +1,59 @@
1
+ import { clamp, getViewportSize } from './geometry';
2
+ export const getDistanceOverlay = (rectA, rectB) => {
3
+ const rightA = rectA.left + rectA.width;
4
+ const bottomA = rectA.top + rectA.height;
5
+ const rightB = rectB.left + rectB.width;
6
+ const bottomB = rectB.top + rectB.height;
7
+ const centerAX = rectA.left + rectA.width / 2;
8
+ const centerAY = rectA.top + rectA.height / 2;
9
+ let horizontal = null;
10
+ let vertical = null;
11
+ const connectors = [];
12
+ const separatedX = rightA <= rectB.left || rightB <= rectA.left;
13
+ const separatedY = bottomA <= rectB.top || bottomB <= rectA.top;
14
+ if (separatedX) {
15
+ const aIsLeft = rightA <= rectB.left;
16
+ const x1 = aIsLeft ? rightA : rightB;
17
+ const x2 = aIsLeft ? rectB.left : rectA.left;
18
+ const y = centerAY;
19
+ horizontal = { x1, x2, y, value: Math.abs(x2 - x1) };
20
+ const edgeBX = aIsLeft ? rectB.left : rightB;
21
+ if (y < rectB.top) {
22
+ connectors.push({ x1: edgeBX, y1: y, x2: edgeBX, y2: rectB.top });
23
+ }
24
+ else if (y > bottomB) {
25
+ connectors.push({ x1: edgeBX, y1: y, x2: edgeBX, y2: bottomB });
26
+ }
27
+ }
28
+ if (separatedY) {
29
+ const aIsTop = bottomA <= rectB.top;
30
+ const y1 = aIsTop ? bottomA : bottomB;
31
+ const y2 = aIsTop ? rectB.top : rectA.top;
32
+ const x = centerAX;
33
+ vertical = { y1, y2, x, value: Math.abs(y2 - y1) };
34
+ const edgeBY = aIsTop ? rectB.top : bottomB;
35
+ if (x < rectB.left) {
36
+ connectors.push({ x1: x, y1: edgeBY, x2: rectB.left, y2: edgeBY });
37
+ }
38
+ else if (x > rightB) {
39
+ connectors.push({ x1: x, y1: edgeBY, x2: rightB, y2: edgeBY });
40
+ }
41
+ }
42
+ const viewport = getViewportSize();
43
+ return {
44
+ rectA,
45
+ rectB,
46
+ horizontal,
47
+ vertical,
48
+ connectors: connectors
49
+ .map((segment) => ({
50
+ x1: clamp(segment.x1, 0, viewport.width),
51
+ y1: clamp(segment.y1, 0, viewport.height),
52
+ x2: clamp(segment.x2, 0, viewport.width),
53
+ y2: clamp(segment.y2, 0, viewport.height),
54
+ }))
55
+ .filter((segment) => Math.abs(segment.x1 - segment.x2) > 0.5 ||
56
+ Math.abs(segment.y1 - segment.y2) > 0.5),
57
+ };
58
+ };
59
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlzdGFuY2VzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvaW5zcGVjdG9yLW5nL3NyYy9saWIvZGlzdGFuY2VzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxLQUFLLEVBQUUsZUFBZSxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBR3BELE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFHLENBQUMsS0FBVyxFQUFFLEtBQVcsRUFBbUIsRUFBRTtJQUM5RSxNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUM7SUFDeEMsTUFBTSxPQUFPLEdBQUcsS0FBSyxDQUFDLEdBQUcsR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDO0lBQ3pDLE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQztJQUN4QyxNQUFNLE9BQU8sR0FBRyxLQUFLLENBQUMsR0FBRyxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUM7SUFDekMsTUFBTSxRQUFRLEdBQUcsS0FBSyxDQUFDLElBQUksR0FBRyxLQUFLLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztJQUM5QyxNQUFNLFFBQVEsR0FBRyxLQUFLLENBQUMsR0FBRyxHQUFHLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0lBRTlDLElBQUksVUFBVSxHQUFrQyxJQUFJLENBQUM7SUFDckQsSUFBSSxRQUFRLEdBQWdDLElBQUksQ0FBQztJQUNqRCxNQUFNLFVBQVUsR0FBa0MsRUFBRSxDQUFDO0lBRXJELE1BQU0sVUFBVSxHQUFHLE1BQU0sSUFBSSxLQUFLLENBQUMsSUFBSSxJQUFJLE1BQU0sSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDO0lBQ2hFLE1BQU0sVUFBVSxHQUFHLE9BQU8sSUFBSSxLQUFLLENBQUMsR0FBRyxJQUFJLE9BQU8sSUFBSSxLQUFLLENBQUMsR0FBRyxDQUFDO0lBRWhFLElBQUksVUFBVSxFQUFFLENBQUM7UUFDZixNQUFNLE9BQU8sR0FBRyxNQUFNLElBQUksS0FBSyxDQUFDLElBQUksQ0FBQztRQUNyQyxNQUFNLEVBQUUsR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDO1FBQ3JDLE1BQU0sRUFBRSxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQztRQUM3QyxNQUFNLENBQUMsR0FBRyxRQUFRLENBQUM7UUFDbkIsVUFBVSxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUM7UUFFckQsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM7UUFDN0MsSUFBSSxDQUFDLEdBQUcsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDO1lBQ2xCLFVBQVUsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7UUFDcEUsQ0FBQzthQUFNLElBQUksQ0FBQyxHQUFHLE9BQU8sRUFBRSxDQUFDO1lBQ3ZCLFVBQVUsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztRQUNsRSxDQUFDO0lBQ0gsQ0FBQztJQUVELElBQUksVUFBVSxFQUFFLENBQUM7UUFDZixNQUFNLE1BQU0sR0FBRyxPQUFPLElBQUksS0FBSyxDQUFDLEdBQUcsQ0FBQztRQUNwQyxNQUFNLEVBQUUsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDO1FBQ3RDLE1BQU0sRUFBRSxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQztRQUMxQyxNQUFNLENBQUMsR0FBRyxRQUFRLENBQUM7UUFDbkIsUUFBUSxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUM7UUFFbkQsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUM7UUFDNUMsSUFBSSxDQUFDLEdBQUcsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ25CLFVBQVUsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLEtBQUssQ0FBQyxJQUFJLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7UUFDckUsQ0FBQzthQUFNLElBQUksQ0FBQyxHQUFHLE1BQU0sRUFBRSxDQUFDO1lBQ3RCLFVBQVUsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztRQUNqRSxDQUFDO0lBQ0gsQ0FBQztJQUVELE1BQU0sUUFBUSxHQUFHLGVBQWUsRUFBRSxDQUFDO0lBRW5DLE9BQU87UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLFVBQVU7UUFDVixRQUFRO1FBQ1IsVUFBVSxFQUFFLFVBQVU7YUFDbkIsR0FBRyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQ2pCLEVBQUUsRUFBRSxLQUFLLENBQUMsT0FBTyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsUUFBUSxDQUFDLEtBQUssQ0FBQztZQUN4QyxFQUFFLEVBQUUsS0FBSyxDQUFDLE9BQU8sQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxNQUFNLENBQUM7WUFDekMsRUFBRSxFQUFFLEtBQUssQ0FBQyxPQUFPLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxRQUFRLENBQUMsS0FBSyxDQUFDO1lBQ3hDLEVBQUUsRUFBRSxLQUFLLENBQUMsT0FBTyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsUUFBUSxDQUFDLE1BQU0sQ0FBQztTQUMxQyxDQUFDLENBQUM7YUFDRixNQUFNLENBQ0wsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUNWLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEVBQUUsR0FBRyxPQUFPLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRztZQUN2QyxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxFQUFFLEdBQUcsT0FBTyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FDMUM7S0FDSixDQUFDO0FBQ0osQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY2xhbXAsIGdldFZpZXdwb3J0U2l6ZSB9IGZyb20gJy4vZ2VvbWV0cnknO1xuaW1wb3J0IHsgRGlzdGFuY2VPdmVybGF5LCBSZWN0IH0gZnJvbSAnLi90eXBlcyc7XG5cbmV4cG9ydCBjb25zdCBnZXREaXN0YW5jZU92ZXJsYXkgPSAocmVjdEE6IFJlY3QsIHJlY3RCOiBSZWN0KTogRGlzdGFuY2VPdmVybGF5ID0+IHtcbiAgY29uc3QgcmlnaHRBID0gcmVjdEEubGVmdCArIHJlY3RBLndpZHRoO1xuICBjb25zdCBib3R0b21BID0gcmVjdEEudG9wICsgcmVjdEEuaGVpZ2h0O1xuICBjb25zdCByaWdodEIgPSByZWN0Qi5sZWZ0ICsgcmVjdEIud2lkdGg7XG4gIGNvbnN0IGJvdHRvbUIgPSByZWN0Qi50b3AgKyByZWN0Qi5oZWlnaHQ7XG4gIGNvbnN0IGNlbnRlckFYID0gcmVjdEEubGVmdCArIHJlY3RBLndpZHRoIC8gMjtcbiAgY29uc3QgY2VudGVyQVkgPSByZWN0QS50b3AgKyByZWN0QS5oZWlnaHQgLyAyO1xuXG4gIGxldCBob3Jpem9udGFsOiBEaXN0YW5jZU92ZXJsYXlbJ2hvcml6b250YWwnXSA9IG51bGw7XG4gIGxldCB2ZXJ0aWNhbDogRGlzdGFuY2VPdmVybGF5Wyd2ZXJ0aWNhbCddID0gbnVsbDtcbiAgY29uc3QgY29ubmVjdG9yczogRGlzdGFuY2VPdmVybGF5Wydjb25uZWN0b3JzJ10gPSBbXTtcblxuICBjb25zdCBzZXBhcmF0ZWRYID0gcmlnaHRBIDw9IHJlY3RCLmxlZnQgfHwgcmlnaHRCIDw9IHJlY3RBLmxlZnQ7XG4gIGNvbnN0IHNlcGFyYXRlZFkgPSBib3R0b21BIDw9IHJlY3RCLnRvcCB8fCBib3R0b21CIDw9IHJlY3RBLnRvcDtcblxuICBpZiAoc2VwYXJhdGVkWCkge1xuICAgIGNvbnN0IGFJc0xlZnQgPSByaWdodEEgPD0gcmVjdEIubGVmdDtcbiAgICBjb25zdCB4MSA9IGFJc0xlZnQgPyByaWdodEEgOiByaWdodEI7XG4gICAgY29uc3QgeDIgPSBhSXNMZWZ0ID8gcmVjdEIubGVmdCA6IHJlY3RBLmxlZnQ7XG4gICAgY29uc3QgeSA9IGNlbnRlckFZO1xuICAgIGhvcml6b250YWwgPSB7IHgxLCB4MiwgeSwgdmFsdWU6IE1hdGguYWJzKHgyIC0geDEpIH07XG5cbiAgICBjb25zdCBlZGdlQlggPSBhSXNMZWZ0ID8gcmVjdEIubGVmdCA6IHJpZ2h0QjtcbiAgICBpZiAoeSA8IHJlY3RCLnRvcCkge1xuICAgICAgY29ubmVjdG9ycy5wdXNoKHsgeDE6IGVkZ2VCWCwgeTE6IHksIHgyOiBlZGdlQlgsIHkyOiByZWN0Qi50b3AgfSk7XG4gICAgfSBlbHNlIGlmICh5ID4gYm90dG9tQikge1xuICAgICAgY29ubmVjdG9ycy5wdXNoKHsgeDE6IGVkZ2VCWCwgeTE6IHksIHgyOiBlZGdlQlgsIHkyOiBib3R0b21CIH0pO1xuICAgIH1cbiAgfVxuXG4gIGlmIChzZXBhcmF0ZWRZKSB7XG4gICAgY29uc3QgYUlzVG9wID0gYm90dG9tQSA8PSByZWN0Qi50b3A7XG4gICAgY29uc3QgeTEgPSBhSXNUb3AgPyBib3R0b21BIDogYm90dG9tQjtcbiAgICBjb25zdCB5MiA9IGFJc1RvcCA/IHJlY3RCLnRvcCA6IHJlY3RBLnRvcDtcbiAgICBjb25zdCB4ID0gY2VudGVyQVg7XG4gICAgdmVydGljYWwgPSB7IHkxLCB5MiwgeCwgdmFsdWU6IE1hdGguYWJzKHkyIC0geTEpIH07XG5cbiAgICBjb25zdCBlZGdlQlkgPSBhSXNUb3AgPyByZWN0Qi50b3AgOiBib3R0b21CO1xuICAgIGlmICh4IDwgcmVjdEIubGVmdCkge1xuICAgICAgY29ubmVjdG9ycy5wdXNoKHsgeDE6IHgsIHkxOiBlZGdlQlksIHgyOiByZWN0Qi5sZWZ0LCB5MjogZWRnZUJZIH0pO1xuICAgIH0gZWxzZSBpZiAoeCA+IHJpZ2h0Qikge1xuICAgICAgY29ubmVjdG9ycy5wdXNoKHsgeDE6IHgsIHkxOiBlZGdlQlksIHgyOiByaWdodEIsIHkyOiBlZGdlQlkgfSk7XG4gICAgfVxuICB9XG5cbiAgY29uc3Qgdmlld3BvcnQgPSBnZXRWaWV3cG9ydFNpemUoKTtcblxuICByZXR1cm4ge1xuICAgIHJlY3RBLFxuICAgIHJlY3RCLFxuICAgIGhvcml6b250YWwsXG4gICAgdmVydGljYWwsXG4gICAgY29ubmVjdG9yczogY29ubmVjdG9yc1xuICAgICAgLm1hcCgoc2VnbWVudCkgPT4gKHtcbiAgICAgICAgeDE6IGNsYW1wKHNlZ21lbnQueDEsIDAsIHZpZXdwb3J0LndpZHRoKSxcbiAgICAgICAgeTE6IGNsYW1wKHNlZ21lbnQueTEsIDAsIHZpZXdwb3J0LmhlaWdodCksXG4gICAgICAgIHgyOiBjbGFtcChzZWdtZW50LngyLCAwLCB2aWV3cG9ydC53aWR0aCksXG4gICAgICAgIHkyOiBjbGFtcChzZWdtZW50LnkyLCAwLCB2aWV3cG9ydC5oZWlnaHQpLFxuICAgICAgfSkpXG4gICAgICAuZmlsdGVyKFxuICAgICAgICAoc2VnbWVudCkgPT5cbiAgICAgICAgICBNYXRoLmFicyhzZWdtZW50LngxIC0gc2VnbWVudC54MikgPiAwLjUgfHxcbiAgICAgICAgICBNYXRoLmFicyhzZWdtZW50LnkxIC0gc2VnbWVudC55MikgPiAwLjUsXG4gICAgICApLFxuICB9O1xufTtcbiJdfQ==
@@ -0,0 +1,180 @@
1
+ export const getRectFromDom = (element) => {
2
+ const rect = element.getBoundingClientRect();
3
+ return {
4
+ left: rect.left,
5
+ top: rect.top,
6
+ width: rect.width,
7
+ height: rect.height,
8
+ };
9
+ };
10
+ export const getElementLabel = (element) => {
11
+ const tag = element.tagName.toLowerCase();
12
+ const id = element.id ? `#${element.id}` : '';
13
+ const className = element.className
14
+ ? `.${element.className.toString().split(' ')[0]}`
15
+ : '';
16
+ return `${tag}${id}${className}`;
17
+ };
18
+ const toHex = (value) => value.toString(16).padStart(2, '0');
19
+ const normalizeColorToHex = (color) => {
20
+ const trimmed = color.trim().toLowerCase();
21
+ if (trimmed.startsWith('#')) {
22
+ if (trimmed.length === 4) {
23
+ return `#${trimmed[1]}${trimmed[1]}${trimmed[2]}${trimmed[2]}${trimmed[3]}${trimmed[3]}`;
24
+ }
25
+ return trimmed;
26
+ }
27
+ const rgbMatch = trimmed.match(/^rgba?\(\s*([0-9.]+)\s*,\s*([0-9.]+)\s*,\s*([0-9.]+)(?:\s*,\s*[0-9.]+\s*)?\)$/);
28
+ if (!rgbMatch) {
29
+ return color;
30
+ }
31
+ const [, r, g, b] = rgbMatch;
32
+ return `#${toHex(Math.round(Number(r)))}${toHex(Math.round(Number(g)))}${toHex(Math.round(Number(b)))}`;
33
+ };
34
+ export const getTextInspection = (element) => {
35
+ const style = window.getComputedStyle(element);
36
+ return {
37
+ fontFamily: style.fontFamily,
38
+ fontSize: style.fontSize,
39
+ fontWeight: style.fontWeight,
40
+ lineHeight: style.lineHeight,
41
+ letterSpacing: style.letterSpacing,
42
+ color: normalizeColorToHex(style.color),
43
+ textAlign: style.textAlign,
44
+ };
45
+ };
46
+ const parseEdge = (value) => Number.parseFloat(value) || 0;
47
+ export const getInspectMeasurement = (element) => {
48
+ const rect = getRectFromDom(element);
49
+ const style = window.getComputedStyle(element);
50
+ const parentElement = element.parentElement;
51
+ const parentStyle = parentElement ? window.getComputedStyle(parentElement) : null;
52
+ const padding = {
53
+ top: parseEdge(style.paddingTop),
54
+ right: parseEdge(style.paddingRight),
55
+ bottom: parseEdge(style.paddingBottom),
56
+ left: parseEdge(style.paddingLeft),
57
+ };
58
+ const margin = {
59
+ top: parseEdge(style.marginTop),
60
+ right: parseEdge(style.marginRight),
61
+ bottom: parseEdge(style.marginBottom),
62
+ left: parseEdge(style.marginLeft),
63
+ };
64
+ const rowGap = parentStyle ? parseEdge(parentStyle.rowGap) : 0;
65
+ const columnGap = parentStyle ? parseEdge(parentStyle.columnGap) : 0;
66
+ const parentDisplay = parentStyle?.display ?? '';
67
+ const hasGap = !!parentElement &&
68
+ (parentDisplay.includes('flex') || parentDisplay.includes('grid')) &&
69
+ (rowGap > 0 || columnGap > 0);
70
+ return {
71
+ rect,
72
+ paddingRect: {
73
+ left: rect.left + padding.left,
74
+ top: rect.top + padding.top,
75
+ width: Math.max(0, rect.width - padding.left - padding.right),
76
+ height: Math.max(0, rect.height - padding.top - padding.bottom),
77
+ },
78
+ marginRect: {
79
+ left: rect.left - margin.left,
80
+ top: rect.top - margin.top,
81
+ width: rect.width + margin.left + margin.right,
82
+ height: rect.height + margin.top + margin.bottom,
83
+ },
84
+ padding,
85
+ margin,
86
+ gap: {
87
+ row: rowGap,
88
+ column: columnGap,
89
+ active: hasGap,
90
+ },
91
+ parentRect: hasGap && parentElement ? getRectFromDom(parentElement) : null,
92
+ label: getElementLabel(element),
93
+ styles: getTextInspection(element),
94
+ };
95
+ };
96
+ const isVisibleTextCandidate = (element) => {
97
+ const text = element.innerText?.trim() ?? '';
98
+ if (!text) {
99
+ return false;
100
+ }
101
+ const style = window.getComputedStyle(element);
102
+ if (style.display === 'none' ||
103
+ style.visibility === 'hidden' ||
104
+ Number.parseFloat(style.opacity || '1') === 0) {
105
+ return false;
106
+ }
107
+ const rect = element.getBoundingClientRect();
108
+ if (rect.width < 8 || rect.height < 8) {
109
+ return false;
110
+ }
111
+ for (const child of Array.from(element.children)) {
112
+ if (!(child instanceof HTMLElement)) {
113
+ continue;
114
+ }
115
+ if ((child.innerText?.trim() ?? '') && child.getBoundingClientRect().height > 0) {
116
+ return false;
117
+ }
118
+ }
119
+ return true;
120
+ };
121
+ export const getVisibleTextBlocks = (overlayElement, limit = 160) => {
122
+ if (typeof document === 'undefined') {
123
+ return [];
124
+ }
125
+ const nodes = Array.from(document.querySelectorAll('body *'));
126
+ const blocks = [];
127
+ for (const node of nodes) {
128
+ if (!(node instanceof HTMLElement)) {
129
+ continue;
130
+ }
131
+ if (overlayElement && overlayElement.contains(node)) {
132
+ continue;
133
+ }
134
+ if (!isVisibleTextCandidate(node)) {
135
+ continue;
136
+ }
137
+ const rect = getRectFromDom(node);
138
+ const text = (node.innerText || node.textContent || '').replace(/\s+/g, ' ').trim();
139
+ blocks.push({
140
+ id: `${node.tagName.toLowerCase()}-${Math.round(rect.left)}-${Math.round(rect.top)}-${text.slice(0, 24)}`,
141
+ rect,
142
+ text,
143
+ styles: getTextInspection(node),
144
+ });
145
+ if (blocks.length >= limit) {
146
+ break;
147
+ }
148
+ }
149
+ return blocks;
150
+ };
151
+ export const getTargetElement = (point, overlayElement) => {
152
+ if (typeof document === 'undefined') {
153
+ return null;
154
+ }
155
+ if (overlayElement) {
156
+ const previous = overlayElement.style.pointerEvents;
157
+ overlayElement.style.pointerEvents = 'none';
158
+ const elements = document.elementsFromPoint(point.x, point.y);
159
+ overlayElement.style.pointerEvents = previous;
160
+ for (const element of elements) {
161
+ if (!(element instanceof HTMLElement)) {
162
+ continue;
163
+ }
164
+ if (overlayElement.contains(element)) {
165
+ continue;
166
+ }
167
+ if (element === document.body || element === document.documentElement) {
168
+ continue;
169
+ }
170
+ const rect = element.getBoundingClientRect();
171
+ if (rect.width <= 2 || rect.height <= 2) {
172
+ continue;
173
+ }
174
+ return element;
175
+ }
176
+ return null;
177
+ }
178
+ return document.elementFromPoint(point.x, point.y);
179
+ };
180
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9tLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvaW5zcGVjdG9yLW5nL3NyYy9saWIvZG9tLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE1BQU0sQ0FBQyxNQUFNLGNBQWMsR0FBRyxDQUFDLE9BQWdCLEVBQVEsRUFBRTtJQUN2RCxNQUFNLElBQUksR0FBRyxPQUFPLENBQUMscUJBQXFCLEVBQUUsQ0FBQztJQUM3QyxPQUFPO1FBQ0wsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJO1FBQ2YsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHO1FBQ2IsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLO1FBQ2pCLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTTtLQUNwQixDQUFDO0FBQ0osQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sZUFBZSxHQUFHLENBQUMsT0FBb0IsRUFBRSxFQUFFO0lBQ3RELE1BQU0sR0FBRyxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDMUMsTUFBTSxFQUFFLEdBQUcsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxPQUFPLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztJQUM5QyxNQUFNLFNBQVMsR0FBRyxPQUFPLENBQUMsU0FBUztRQUNqQyxDQUFDLENBQUMsSUFBSSxPQUFPLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRTtRQUNsRCxDQUFDLENBQUMsRUFBRSxDQUFDO0lBQ1AsT0FBTyxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsU0FBUyxFQUFFLENBQUM7QUFDbkMsQ0FBQyxDQUFDO0FBRUYsTUFBTSxLQUFLLEdBQUcsQ0FBQyxLQUFhLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUMs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QUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUF1QixDQUFDO0FBQzNFLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluc3BlY3RNZWFzdXJlbWVudCwgUmVjdCwgVGV4dEJsb2NrQW5ub3RhdGlvbiwgVGV4dEluc3BlY3Rpb24gfSBmcm9tICcuL3R5cGVzJztcblxuZXhwb3J0IGNvbnN0IGdldFJlY3RGcm9tRG9tID0gKGVsZW1lbnQ6IEVsZW1lbnQpOiBSZWN0ID0+IHtcbiAgY29uc3QgcmVjdCA9IGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gIHJldHVybiB7XG4gICAgbGVmdDogcmVjdC5sZWZ0LFxuICAgIHRvcDogcmVjdC50b3AsXG4gICAgd2lkdGg6IHJlY3Qud2lkdGgsXG4gICAgaGVpZ2h0OiByZWN0LmhlaWdodCxcbiAgfTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRFbGVtZW50TGFiZWwgPSAoZWxlbWVudDogSFRNTEVsZW1lbnQpID0+IHtcbiAgY29uc3QgdGFnID0gZWxlbWVudC50YWdOYW1lLnRvTG93ZXJDYXNlKCk7XG4gIGNvbnN0IGlkID0gZWxlbWVudC5pZCA/IGAjJHtlbGVtZW50LmlkfWAgOiAnJztcbiAgY29uc3QgY2xhc3NOYW1lID0gZWxlbWVudC5jbGFzc05hbWVcbiAgICA/IGAuJHtlbGVtZW50LmNsYXNzTmFtZS50b1N0cmluZygpLnNwbGl0KCcgJylbMF19YFxuICAgIDogJyc7XG4gIHJldHVybiBgJHt0YWd9JHtpZH0ke2NsYXNzTmFtZX1gO1xufTtcblxuY29uc3QgdG9IZXggPSAodmFsdWU6IG51bWJlcikgPT4gdmFsdWUudG9TdHJpbmcoMTYpLnBhZFN0YXJ0KDIsICcwJyk7XG5cbmNvbnN0IG5vcm1hbGl6ZUNvbG9yVG9IZXggPSAoY29sb3I6IHN0cmluZykgPT4ge1xuICBjb25zdCB0cmltbWVkID0gY29sb3IudHJpbSgpLnRvTG93ZXJDYXNlKCk7XG4gIGlmICh0cmltbWVkLnN0YXJ0c1dpdGgoJyMnKSkge1xuICAgIGlmICh0cmltbWVkLmxlbmd0aCA9PT0gNCkge1xuICAgICAgcmV0dXJuIGAjJHt0cmltbWVkWzFdfSR7dHJpbW1lZFsxXX0ke3RyaW1tZWRbMl19JHt0cmltbWVkWzJdfSR7dHJpbW1lZFszXX0ke3RyaW1tZWRbM119YDtcbiAgICB9XG4gICAgcmV0dXJuIHRyaW1tZWQ7XG4gIH1cblxuICBjb25zdCByZ2JNYXRjaCA9IHRyaW1tZWQubWF0Y2goXG4gICAgL15yZ2JhP1xcKFxccyooWzAtOS5dKylcXHMqLFxccyooWzAtOS5dKylcXHMqLFxccyooWzAtOS5dKykoPzpcXHMqLFxccypbMC05Ll0rXFxzKik/XFwpJC8sXG4gICk7XG4gIGlmICghcmdiTWF0Y2gpIHtcbiAgICByZXR1cm4gY29sb3I7XG4gIH1cblxuICBjb25zdCBbLCByLCBnLCBiXSA9IHJnYk1hdGNoO1xuICByZXR1cm4gYCMke3RvSGV4KE1hdGgucm91bmQoTnVtYmVyKHIpKSl9JHt0b0hleChNYXRoLnJvdW5kKE51bWJlcihnKSkpfSR7dG9IZXgoTWF0aC5yb3VuZChOdW1iZXIoYikpKX1gO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFRleHRJbnNwZWN0aW9uID0gKGVsZW1lbnQ6IEhUTUxFbGVtZW50KTogVGV4dEluc3BlY3Rpb24gPT4ge1xuICBjb25zdCBzdHlsZSA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpO1xuICByZXR1cm4ge1xuICAgIGZvbnRGYW1pbHk6IHN0eWxlLmZvbnRGYW1pbHksXG4gICAgZm9udFNpemU6IHN0eWxlLmZvbnRTaXplLFxuICAgIGZvbnRXZWlnaHQ6IHN0eWxlLmZvbnRXZWlnaHQsXG4gICAgbGluZUhlaWdodDogc3R5bGUubGluZUhlaWdodCxcbiAgICBsZXR0ZXJTcGFjaW5nOiBzdHlsZS5sZXR0ZXJTcGFjaW5nLFxuICAgIGNvbG9yOiBub3JtYWxpemVDb2xvclRvSGV4KHN0eWxlLmNvbG9yKSxcbiAgICB0ZXh0QWxpZ246IHN0eWxlLnRleHRBbGlnbixcbiAgfTtcbn07XG5cbmNvbnN0IHBhcnNlRWRnZSA9ICh2YWx1ZTogc3RyaW5nKSA9PiBOdW1iZXIucGFyc2VGbG9hdCh2YWx1ZSkgfHwgMDtcblxuZXhwb3J0IGNvbnN0IGdldEluc3BlY3RNZWFzdXJlbWVudCA9IChlbGVtZW50OiBIVE1MRWxlbWVudCk6IEluc3BlY3RNZWFzdXJlbWVudCA9PiB7XG4gIGNvbnN0IHJlY3QgPSBnZXRSZWN0RnJvbURvbShlbGVtZW50KTtcbiAgY29uc3Qgc3R5bGUgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KTtcbiAgY29uc3QgcGFyZW50RWxlbWVudCA9IGVsZW1lbnQucGFyZW50RWxlbWVudDtcbiAgY29uc3QgcGFyZW50U3R5bGUgPSBwYXJlbnRFbGVtZW50ID8gd2luZG93LmdldENvbXB1dGVkU3R5bGUocGFyZW50RWxlbWVudCkgOiBudWxsO1xuICBjb25zdCBwYWRkaW5nID0ge1xuICAgIHRvcDogcGFyc2VFZGdlKHN0eWxlLnBhZGRpbmdUb3ApLFxuICAgIHJpZ2h0OiBwYXJzZUVkZ2Uoc3R5bGUucGFkZGluZ1JpZ2h0KSxcbiAgICBib3R0b206IHBhcnNlRWRnZShzdHlsZS5wYWRkaW5nQm90dG9tKSxcbiAgICBsZWZ0OiBwYXJzZUVkZ2Uoc3R5bGUucGFkZGluZ0xlZnQpLFxuICB9O1xuICBjb25zdCBtYXJnaW4gPSB7XG4gICAgdG9wOiBwYXJzZUVkZ2Uoc3R5bGUubWFyZ2luVG9wKSxcbiAgICByaWdodDogcGFyc2VFZGdlKHN0eWxlLm1hcmdpblJpZ2h0KSxcbiAgICBib3R0b206IHBhcnNlRWRnZShzdHlsZS5tYXJnaW5Cb3R0b20pLFxuICAgIGxlZnQ6IHBhcnNlRWRnZShzdHlsZS5tYXJnaW5MZWZ0KSxcbiAgfTtcbiAgY29uc3Qgcm93R2FwID0gcGFyZW50U3R5bGUgPyBwYXJzZUVkZ2UocGFyZW50U3R5bGUucm93R2FwKSA6IDA7XG4gIGNvbnN0IGNvbHVtbkdhcCA9IHBhcmVudFN0eWxlID8gcGFyc2VFZGdlKHBhcmVudFN0eWxlLmNvbHVtbkdhcCkgOiAwO1xuICBjb25zdCBwYXJlbnREaXNwbGF5ID0gcGFyZW50U3R5bGU/LmRpc3BsYXkgPz8gJyc7XG4gIGNvbnN0IGhhc0dhcCA9XG4gICAgISFwYXJlbnRFbGVtZW50ICYmXG4gICAgKHBhcmVudERpc3BsYXkuaW5jbHVkZXMoJ2ZsZXgnKSB8fCBwYXJlbnREaXNwbGF5LmluY2x1ZGVzKCdncmlkJykpICYmXG4gICAgKHJvd0dhcCA+IDAgfHwgY29sdW1uR2FwID4gMCk7XG5cbiAgcmV0dXJuIHtcbiAgICByZWN0LFxuICAgIHBhZGRpbmdSZWN0OiB7XG4gICAgICBsZWZ0OiByZWN0LmxlZnQgKyBwYWRkaW5nLmxlZnQsXG4gICAgICB0b3A6IHJlY3QudG9wICsgcGFkZGluZy50b3AsXG4gICAgICB3aWR0aDogTWF0aC5tYXgoMCwgcmVjdC53aWR0aCAtIHBhZGRpbmcubGVmdCAtIHBhZGRpbmcucmlnaHQpLFxuICAgICAgaGVpZ2h0OiBNYXRoLm1heCgwLCByZWN0LmhlaWdodCAtIHBhZGRpbmcudG9wIC0gcGFkZGluZy5ib3R0b20pLFxuICAgIH0sXG4gICAgbWFyZ2luUmVjdDoge1xuICAgICAgbGVmdDogcmVjdC5sZWZ0IC0gbWFyZ2luLmxlZnQsXG4gICAgICB0b3A6IHJlY3QudG9wIC0gbWFyZ2luLnRvcCxcbiAgICAgIHdpZHRoOiByZWN0LndpZHRoICsgbWFyZ2luLmxlZnQgKyBtYXJnaW4ucmlnaHQsXG4gICAgICBoZWlnaHQ6IHJlY3QuaGVpZ2h0ICsgbWFyZ2luLnRvcCArIG1hcmdpbi5ib3R0b20sXG4gICAgfSxcbiAgICBwYWRkaW5nLFxuICAgIG1hcmdpbixcbiAgICBnYXA6IHtcbiAgICAgIHJvdzogcm93R2FwLFxuICAgICAgY29sdW1uOiBjb2x1bW5HYXAsXG4gICAgICBhY3RpdmU6IGhhc0dhcCxcbiAgICB9LFxuICAgIHBhcmVudFJlY3Q6IGhhc0dhcCAmJiBwYXJlbnRFbGVtZW50ID8gZ2V0UmVjdEZyb21Eb20ocGFyZW50RWxlbWVudCkgOiBudWxsLFxuICAgIGxhYmVsOiBnZXRFbGVtZW50TGFiZWwoZWxlbWVudCksXG4gICAgc3R5bGVzOiBnZXRUZXh0SW5zcGVjdGlvbihlbGVtZW50KSxcbiAgfTtcbn07XG5cbmNvbnN0IGlzVmlzaWJsZVRleHRDYW5kaWRhdGUgPSAoZWxlbWVudDogSFRNTEVsZW1lbnQpID0+IHtcbiAgY29uc3QgdGV4dCA9IGVsZW1lbnQuaW5uZXJUZXh0Py50cmltKCkgPz8gJyc7XG4gIGlmICghdGV4dCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGNvbnN0IHN0eWxlID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUoZWxlbWVudCk7XG4gIGlmIChcbiAgICBzdHlsZS5kaXNwbGF5ID09PSAnbm9uZScgfHxcbiAgICBzdHlsZS52aXNpYmlsaXR5ID09PSAnaGlkZGVuJyB8fFxuICAgIE51bWJlci5wYXJzZUZsb2F0KHN0eWxlLm9wYWNpdHkgfHwgJzEnKSA9PT0gMFxuICApIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBjb25zdCByZWN0ID0gZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgaWYgKHJlY3Qud2lkdGggPCA4IHx8IHJlY3QuaGVpZ2h0IDwgOCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGZvciAoY29uc3QgY2hpbGQgb2YgQXJyYXkuZnJvbShlbGVtZW50LmNoaWxkcmVuKSkge1xuICAgIGlmICghKGNoaWxkIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgaWYgKChjaGlsZC5pbm5lclRleHQ/LnRyaW0oKSA/PyAnJykgJiYgY2hpbGQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuaGVpZ2h0ID4gMCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFZpc2libGVUZXh0QmxvY2tzID0gKFxuICBvdmVybGF5RWxlbWVudDogSFRNTEVsZW1lbnQgfCBudWxsLFxuICBsaW1pdCA9IDE2MCxcbik6IFRleHRCbG9ja0Fubm90YXRpb25bXSA9PiB7XG4gIGlmICh0eXBlb2YgZG9jdW1lbnQgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgY29uc3Qgbm9kZXMgPSBBcnJheS5mcm9tKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2JvZHkgKicpKTtcbiAgY29uc3QgYmxvY2tzOiBUZXh0QmxvY2tBbm5vdGF0aW9uW10gPSBbXTtcblxuICBmb3IgKGNvbnN0IG5vZGUgb2Ygbm9kZXMpIHtcbiAgICBpZiAoIShub2RlIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgaWYgKG92ZXJsYXlFbGVtZW50ICYmIG92ZXJsYXlFbGVtZW50LmNvbnRhaW5zKG5vZGUpKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgaWYgKCFpc1Zpc2libGVUZXh0Q2FuZGlkYXRlKG5vZGUpKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBjb25zdCByZWN0ID0gZ2V0UmVjdEZyb21Eb20obm9kZSk7XG4gICAgY29uc3QgdGV4dCA9IChub2RlLmlubmVyVGV4dCB8fCBub2RlLnRleHRDb250ZW50IHx8ICcnKS5yZXBsYWNlKC9cXHMrL2csICcgJykudHJpbSgpO1xuICAgIGJsb2Nrcy5wdXNoKHtcbiAgICAgIGlkOiBgJHtub2RlLnRhZ05hbWUudG9Mb3dlckNhc2UoKX0tJHtNYXRoLnJvdW5kKHJlY3QubGVmdCl9LSR7TWF0aC5yb3VuZChyZWN0LnRvcCl9LSR7dGV4dC5zbGljZSgwLCAyNCl9YCxcbiAgICAgIHJlY3QsXG4gICAgICB0ZXh0LFxuICAgICAgc3R5bGVzOiBnZXRUZXh0SW5zcGVjdGlvbihub2RlKSxcbiAgICB9KTtcblxuICAgIGlmIChibG9ja3MubGVuZ3RoID49IGxpbWl0KSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICByZXR1cm4gYmxvY2tzO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFRhcmdldEVsZW1lbnQgPSAoXG4gIHBvaW50OiB7IHg6IG51bWJlcjsgeTogbnVtYmVyIH0sXG4gIG92ZXJsYXlFbGVtZW50OiBIVE1MRWxlbWVudCB8IG51bGwsXG4pID0+IHtcbiAgaWYgKHR5cGVvZiBkb2N1bWVudCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGlmIChvdmVybGF5RWxlbWVudCkge1xuICAgIGNvbnN0IHByZXZpb3VzID0gb3ZlcmxheUVsZW1lbnQuc3R5bGUucG9pbnRlckV2ZW50cztcbiAgICBvdmVybGF5RWxlbWVudC5zdHlsZS5wb2ludGVyRXZlbnRzID0gJ25vbmUnO1xuICAgIGNvbnN0IGVsZW1lbnRzID0gZG9jdW1lbnQuZWxlbWVudHNGcm9tUG9pbnQocG9pbnQueCwgcG9pbnQueSk7XG4gICAgb3ZlcmxheUVsZW1lbnQuc3R5bGUucG9pbnRlckV2ZW50cyA9IHByZXZpb3VzO1xuXG4gICAgZm9yIChjb25zdCBlbGVtZW50IG9mIGVsZW1lbnRzKSB7XG4gICAgICBpZiAoIShlbGVtZW50IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgaWYgKG92ZXJsYXlFbGVtZW50LmNvbnRhaW5zKGVsZW1lbnQpKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgaWYgKGVsZW1lbnQgPT09IGRvY3VtZW50LmJvZHkgfHwgZWxlbWVudCA9PT0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgY29uc3QgcmVjdCA9IGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICBpZiAocmVjdC53aWR0aCA8PSAyIHx8IHJlY3QuaGVpZ2h0IDw9IDIpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICByZXR1cm4gZWxlbWVudDtcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHJldHVybiBkb2N1bWVudC5lbGVtZW50RnJvbVBvaW50KHBvaW50LngsIHBvaW50LnkpIGFzIEhUTUxFbGVtZW50IHwgbnVsbDtcbn07XG4iXX0=
@@ -0,0 +1,22 @@
1
+ export const clamp = (value, min, max) => Math.max(min, Math.min(max, value));
2
+ export const getViewportSize = () => ({
3
+ width: typeof window === 'undefined' ? 1 : window.innerWidth || 1,
4
+ height: typeof window === 'undefined' ? 1 : window.innerHeight || 1,
5
+ });
6
+ export const rectContainsPoint = (rect, point) => point.x >= rect.left &&
7
+ point.x <= rect.left + rect.width &&
8
+ point.y >= rect.top &&
9
+ point.y <= rect.top + rect.height;
10
+ export const rectsEqual = (a, b, epsilon = 0.5) => {
11
+ if (a === b) {
12
+ return true;
13
+ }
14
+ if (!a || !b) {
15
+ return false;
16
+ }
17
+ return (Math.abs(a.left - b.left) < epsilon &&
18
+ Math.abs(a.top - b.top) < epsilon &&
19
+ Math.abs(a.width - b.width) < epsilon &&
20
+ Math.abs(a.height - b.height) < epsilon);
21
+ };
22
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VvbWV0cnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9pbnNwZWN0b3Itbmcvc3JjL2xpYi9nZW9tZXRyeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxNQUFNLENBQUMsTUFBTSxLQUFLLEdBQUcsQ0FBQyxLQUFhLEVBQUUsR0FBVyxFQUFFLEdBQVcsRUFBRSxFQUFFLENBQy9ELElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7QUFFdEMsTUFBTSxDQUFDLE1BQU0sZUFBZSxHQUFHLEdBQUcsRUFBRSxDQUFDLENBQUM7SUFDcEMsS0FBSyxFQUFFLE9BQU8sTUFBTSxLQUFLLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsVUFBVSxJQUFJLENBQUM7SUFDakUsTUFBTSxFQUFFLE9BQU8sTUFBTSxLQUFLLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsV0FBVyxJQUFJLENBQUM7Q0FDcEUsQ0FBQyxDQUFDO0FBRUgsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQUcsQ0FDL0IsSUFBVSxFQUNWLEtBQStCLEVBQy9CLEVBQUUsQ0FDRixLQUFLLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJO0lBQ3BCLEtBQUssQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSztJQUNqQyxLQUFLLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxHQUFHO0lBQ25CLEtBQUssQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO0FBRXBDLE1BQU0sQ0FBQyxNQUFNLFVBQVUsR0FBRyxDQUFDLENBQWMsRUFBRSxDQUFjLEVBQUUsT0FBTyxHQUFHLEdBQUcsRUFBRSxFQUFFO0lBQzFFLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQ1osT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ2IsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRUQsT0FBTyxDQUNMLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsT0FBTztRQUNuQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLE9BQU87UUFDakMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxPQUFPO1FBQ3JDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsT0FBTyxDQUN4QyxDQUFDO0FBQ0osQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUmVjdCB9IGZyb20gJy4vdHlwZXMnO1xuXG5leHBvcnQgY29uc3QgY2xhbXAgPSAodmFsdWU6IG51bWJlciwgbWluOiBudW1iZXIsIG1heDogbnVtYmVyKSA9PlxuICBNYXRoLm1heChtaW4sIE1hdGgubWluKG1heCwgdmFsdWUpKTtcblxuZXhwb3J0IGNvbnN0IGdldFZpZXdwb3J0U2l6ZSA9ICgpID0+ICh7XG4gIHdpZHRoOiB0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJyA/IDEgOiB3aW5kb3cuaW5uZXJXaWR0aCB8fCAxLFxuICBoZWlnaHQ6IHR5cGVvZiB3aW5kb3cgPT09ICd1bmRlZmluZWQnID8gMSA6IHdpbmRvdy5pbm5lckhlaWdodCB8fCAxLFxufSk7XG5cbmV4cG9ydCBjb25zdCByZWN0Q29udGFpbnNQb2ludCA9IChcbiAgcmVjdDogUmVjdCxcbiAgcG9pbnQ6IHsgeDogbnVtYmVyOyB5OiBudW1iZXIgfSxcbikgPT5cbiAgcG9pbnQueCA+PSByZWN0LmxlZnQgJiZcbiAgcG9pbnQueCA8PSByZWN0LmxlZnQgKyByZWN0LndpZHRoICYmXG4gIHBvaW50LnkgPj0gcmVjdC50b3AgJiZcbiAgcG9pbnQueSA8PSByZWN0LnRvcCArIHJlY3QuaGVpZ2h0O1xuXG5leHBvcnQgY29uc3QgcmVjdHNFcXVhbCA9IChhOiBSZWN0IHwgbnVsbCwgYjogUmVjdCB8IG51bGwsIGVwc2lsb24gPSAwLjUpID0+IHtcbiAgaWYgKGEgPT09IGIpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGlmICghYSB8fCAhYikge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgTWF0aC5hYnMoYS5sZWZ0IC0gYi5sZWZ0KSA8IGVwc2lsb24gJiZcbiAgICBNYXRoLmFicyhhLnRvcCAtIGIudG9wKSA8IGVwc2lsb24gJiZcbiAgICBNYXRoLmFicyhhLndpZHRoIC0gYi53aWR0aCkgPCBlcHNpbG9uICYmXG4gICAgTWF0aC5hYnMoYS5oZWlnaHQgLSBiLmhlaWdodCkgPCBlcHNpbG9uXG4gICk7XG59O1xuIl19