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 +24 -0
- package/esm2022/inspector-ng.mjs +5 -0
- package/esm2022/lib/constants.mjs +5 -0
- package/esm2022/lib/distances.mjs +59 -0
- package/esm2022/lib/dom.mjs +180 -0
- package/esm2022/lib/geometry.mjs +22 -0
- package/esm2022/lib/inspector.component.mjs +408 -0
- package/esm2022/lib/types.mjs +2 -0
- package/esm2022/lib/utils.mjs +5 -0
- package/esm2022/public-api.mjs +8 -0
- package/fesm2022/inspector-ng.mjs +680 -0
- package/fesm2022/inspector-ng.mjs.map +1 -0
- package/index.d.ts +5 -0
- package/lib/constants.d.ts +4 -0
- package/lib/distances.d.ts +2 -0
- package/lib/dom.d.ts +10 -0
- package/lib/geometry.d.ts +11 -0
- package/lib/inspector.component.d.ts +65 -0
- package/lib/types.d.ts +88 -0
- package/lib/utils.d.ts +2 -0
- package/package.json +25 -0
- package/public-api.d.ts +7 -0
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlzdGFuY2VzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvaW5zcGVjdG9yLW5nL3NyYy9saWIvZGlzdGFuY2VzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxLQUFLLEVBQUUsZUFBZSxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBR3BELE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFHLENBQUMsS0FBVyxFQUFFLEtBQVcsRUFBbUIsRUFBRTtJQUM5RSxNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUM7SUFDeEMsTUFBTSxPQUFPLEdBQUcsS0FBSyxDQUFDLEdBQUcsR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDO0lBQ3pDLE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQztJQUN4QyxNQUFNLE9BQU8sR0FBRyxLQUFLLENBQUMsR0FBRyxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUM7SUFDekMsTUFBTSxRQUFRLEdBQUcsS0FBSyxDQUFDLElBQUksR0FBRyxLQUFLLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztJQUM5QyxNQUFNLFFBQVEsR0FBRyxLQUFLLENBQUMsR0FBRyxHQUFHLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0lBRTlDLElBQUksVUFBVSxHQUFrQyxJQUFJLENBQUM7SUFDckQsSUFBSSxRQUFRLEdBQWdDLElBQUksQ0FBQztJQUNqRCxNQUFNLFVBQVUsR0FBa0MsRUFBRSxDQUFDO0lBRXJELE1BQU0sVUFBVSxHQUFHLE1BQU0sSUFBSSxLQUFLLENBQUMsSUFBSSxJQUFJLE1BQU0sSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDO0lBQ2hFLE1BQU0sVUFBVSxHQUFHLE9BQU8sSUFBSSxLQUFLLENBQUMsR0FBRyxJQUFJLE9BQU8sSUFBSSxLQUFLLENBQUMsR0FBRyxDQUFD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QUFDO1lBQ2pCLEVBQUUsRUFBRSxLQUFLLENBQUMsT0FBTyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsUUFBUSxDQUFDLEtBQUssQ0FBQztZQUN4QyxFQUFFLEVBQUUsS0FBSyxDQUFDLE9BQU8sQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxNQUFNLENBQUM7WUFDekMsRUFBRSxFQUFFLEtBQUssQ0FBQyxPQUFPLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxRQUFRLENBQUMsS0FBSyxDQUFDO1lBQ3hDLEVBQUUsRUFBRSxLQUFLLENBQUMsT0FBTyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsUUFBUSxDQUFDLE1BQU0sQ0FBQztTQUMxQyxDQUFDLENBQUM7YUFDRixNQUFNLENBQ0wsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUNWLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEVBQUUsR0FBRyxPQUFPLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRztZQUN2QyxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxFQUFFLEdBQUcsT0FBTyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FDMUM7S0FDSixDQUFDO0FBQ0osQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY2xhbXAsIGdldFZpZXdwb3J0U2l6ZSB9IGZyb20gJy4vZ2VvbWV0cnknO1xuaW1wb3J0IHsgRGlzdGFuY2VPdmVybGF5LCBSZWN0IH0gZnJvbSAnLi90eXBlcyc7XG5cbmV4cG9ydCBjb25zdCBnZXREaXN0YW5jZU92ZXJsYXkgPSAocmVjdEE6IFJlY3QsIHJlY3RCOiBSZWN0KTogRGlzdGFuY2VPdmVybGF5ID0+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
|