terra-draw 1.0.0-beta.9 → 1.0.0
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/.versionrc.cjs +9 -0
- package/README.md +4 -47
- package/dist/common/adapter-listener.spec.d.ts +1 -0
- package/dist/{adapters/common → common}/base.adapter.d.ts +1 -1
- package/dist/common.d.ts +7 -5
- package/dist/extend.d.ts +4 -3
- package/dist/geometry/boolean/is-valid-coordinate.spec.d.ts +1 -0
- package/dist/geometry/boolean/point-in-polygon.spec.d.ts +1 -0
- package/dist/geometry/boolean/self-intersects.spec.d.ts +1 -0
- package/dist/geometry/calculate-relative-angle.d.ts +2 -10
- package/dist/geometry/calculate-relative-angle.spec.d.ts +1 -0
- package/dist/geometry/centroid.spec.d.ts +1 -0
- package/dist/geometry/clockwise.d.ts +2 -10
- package/dist/geometry/clockwise.spec.d.ts +1 -0
- package/dist/geometry/coordinates-identical.spec.d.ts +1 -0
- package/dist/geometry/determine-halfplane.d.ts +2 -10
- package/dist/geometry/determine-halfplane.spec.d.ts +1 -0
- package/dist/geometry/get-coordinates-as-points.spec.d.ts +1 -0
- package/dist/geometry/get-midpoint.spec.d.ts +1 -0
- package/dist/geometry/limit-decimal-precision.spec.d.ts +1 -0
- package/dist/geometry/measure/bearing.d.ts +2 -7
- package/dist/geometry/measure/bearing.spec.d.ts +1 -0
- package/dist/geometry/measure/desination.spec.d.ts +1 -0
- package/dist/geometry/measure/destination.d.ts +2 -7
- package/dist/geometry/measure/haversine-distance.spec.d.ts +1 -0
- package/dist/geometry/measure/pixel-distance-to-line.d.ts +2 -10
- package/dist/geometry/measure/pixel-distance-to-line.spec.d.ts +1 -0
- package/dist/geometry/measure/pixel-distance.d.ts +2 -7
- package/dist/geometry/measure/pixel-distance.spec.d.ts +1 -0
- package/dist/geometry/measure/rhumb-bearing.spec.d.ts +1 -0
- package/dist/geometry/measure/rhumb-destination.spec.d.ts +1 -0
- package/dist/geometry/measure/rhumb-distance.spec.d.ts +1 -0
- package/dist/geometry/point-on-line.d.ts +5 -0
- package/dist/geometry/point-on-line.spec.d.ts +1 -0
- package/dist/geometry/project/web-mercator.d.ts +2 -4
- package/dist/geometry/project/web-mercator.spec.d.ts +1 -0
- package/dist/geometry/shape/create-bbox.spec.d.ts +1 -0
- package/dist/geometry/shape/create-circle.spec.d.ts +1 -0
- package/dist/geometry/shape/great-circle-coordinates.spec.d.ts +1 -0
- package/dist/geometry/shape/web-mercator-distortion.spec.d.ts +1 -0
- package/dist/geometry/transform/rotate.spec.d.ts +1 -0
- package/dist/geometry/transform/scale.spec.d.ts +1 -0
- package/dist/geometry/web-mercator-centroid.d.ts +2 -4
- package/dist/geometry/web-mercator-centroid.spec.d.ts +1 -0
- package/dist/geometry/web-mercator-point-on-line.d.ts +11 -0
- package/dist/geometry/web-mercator-point-on-line.spec.d.ts +1 -0
- package/dist/modes/angled-rectangle/angled-rectangle.mode.d.ts +0 -1
- package/dist/modes/angled-rectangle/angled-rectangle.mode.spec.d.ts +1 -0
- package/dist/modes/circle/circle.mode.spec.d.ts +1 -0
- package/dist/modes/click-bounding-box.behavior.spec.d.ts +1 -0
- package/dist/modes/coordinate-snapping.behavior.d.ts +16 -0
- package/dist/modes/coordinate-snapping.behavior.spec.d.ts +1 -0
- package/dist/modes/freehand/freehand.mode.spec.d.ts +1 -0
- package/dist/modes/insert-coordinates.behavior.spec.d.ts +1 -0
- package/dist/modes/{snapping.behavior.d.ts → line-snapping.behavior.d.ts} +1 -1
- package/dist/modes/line-snapping.behavior.spec.d.ts +1 -0
- package/dist/modes/linestring/linestring.mode.d.ts +14 -3
- package/dist/modes/linestring/linestring.mode.spec.d.ts +1 -0
- package/dist/modes/pixel-distance.behavior.spec.d.ts +1 -0
- package/dist/modes/point/point.mode.spec.d.ts +1 -0
- package/dist/modes/polygon/behaviors/closing-points.behavior.spec.d.ts +1 -0
- package/dist/modes/polygon/polygon.mode.d.ts +15 -2
- package/dist/modes/polygon/polygon.mode.spec.d.ts +1 -0
- package/dist/modes/rectangle/rectangle.mode.spec.d.ts +1 -0
- package/dist/modes/render/render.mode.spec.d.ts +1 -0
- package/dist/modes/sector/sector.mode.spec.d.ts +1 -0
- package/dist/modes/select/behaviors/drag-coordinate-resize.behavior.spec.d.ts +1 -0
- package/dist/modes/select/behaviors/drag-coordinate.behavior.spec.d.ts +1 -0
- package/dist/modes/select/behaviors/drag-feature.behavior.spec.d.ts +1 -0
- package/dist/modes/select/behaviors/feature-at-pointer-event.behavior.spec.d.ts +1 -0
- package/dist/modes/select/behaviors/midpoint.behavior.spec.d.ts +1 -0
- package/dist/modes/select/behaviors/rotate-feature.behavior.spec.d.ts +1 -0
- package/dist/modes/select/behaviors/scale-feature.behavior.spec.d.ts +1 -0
- package/dist/modes/select/behaviors/selection-point.behavior.spec.d.ts +1 -0
- package/dist/modes/select/select.mode.spec.d.ts +1 -0
- package/dist/modes/sensor/sensor.mode.spec.d.ts +1 -0
- package/dist/modes/static/static.mode.spec.d.ts +1 -0
- package/dist/store/spatial-index/quickselect.spec.d.ts +1 -0
- package/dist/store/spatial-index/rbush.spec.d.ts +1 -0
- package/dist/store/spatial-index/spatial-index.spec.d.ts +1 -0
- package/dist/store/store-validation.spec.d.ts +1 -0
- package/dist/store/store.spec.d.ts +1 -0
- package/dist/terra-draw.cjs +1 -1
- package/dist/terra-draw.cjs.map +1 -1
- package/dist/terra-draw.d.ts +6 -8
- package/dist/terra-draw.extensions.spec.d.ts +28 -0
- package/dist/terra-draw.modern.js +1 -1
- package/dist/terra-draw.modern.js.map +1 -1
- package/dist/terra-draw.module.js +1 -1
- package/dist/terra-draw.module.js.map +1 -1
- package/dist/terra-draw.spec.d.ts +1 -0
- package/dist/terra-draw.umd.js +1 -1
- package/dist/terra-draw.umd.js.map +1 -1
- package/dist/test/create-store-features.d.ts +6 -0
- package/dist/test/jest.matchers.d.ts +1 -0
- package/dist/test/mock-behavior-config.d.ts +2 -0
- package/dist/test/mock-callbacks.d.ts +2 -0
- package/dist/test/mock-cursor-event.d.ts +6 -0
- package/dist/test/mock-features.d.ts +4 -0
- package/dist/test/mock-keyboard-event.d.ts +5 -0
- package/dist/test/mock-mode-config.d.ts +21 -0
- package/dist/test/mock-pointer-event.d.ts +1 -0
- package/dist/util/geom.spec.d.ts +1 -0
- package/dist/util/id.spec.d.ts +1 -0
- package/dist/util/styling.spec.d.ts +1 -0
- package/dist/validations/linestring.validation.spec.d.ts +1 -0
- package/dist/validations/max-size.validation.spec.d.ts +1 -0
- package/dist/validations/min-size.validation.spec.d.ts +1 -0
- package/dist/validations/not-self-intersecting.validation.spec.d.ts +1 -0
- package/dist/validations/point.validation.spec.d.ts +1 -0
- package/dist/validations/polygon.validation.spec.d.ts +1 -0
- package/jest.nocheck.config.ts +5 -14
- package/package.json +8 -119
- package/tsconfig.json +6 -25
- package/.devcontainer/Dockerfile +0 -8
- package/.devcontainer/devcontainer.json +0 -27
- package/.devcontainer/post-create.sh +0 -16
- package/LICENSE +0 -8
- package/dist/adapters/arcgis-maps-sdk.adapter.d.ts +0 -106
- package/dist/adapters/google-maps.adapter.d.ts +0 -90
- package/dist/adapters/leaflet.adapter.d.ts +0 -99
- package/dist/adapters/mapbox-gl.adapter.d.ts +0 -90
- package/dist/adapters/maplibre-gl.adapter.d.ts +0 -72
- package/dist/adapters/openlayers.adapter.d.ts +0 -121
- package/e2e/README.md +0 -29
- package/e2e/package-lock.json +0 -4275
- package/e2e/package.json +0 -26
- package/e2e/playwright.config.ts +0 -77
- package/e2e/public/favicon.ico +0 -0
- package/e2e/public/index.html +0 -55
- package/e2e/tests/leaflet.spec.ts +0 -1040
- package/e2e/tests/setup.ts +0 -208
- package/e2e/webpack.config.js +0 -36
- package/eslint.config.js +0 -31
- /package/dist/{adapters/common → common}/adapter-listener.d.ts +0 -0
package/e2e/tests/setup.ts
DELETED
|
@@ -1,208 +0,0 @@
|
|
|
1
|
-
import { Page, expect } from "@playwright/test";
|
|
2
|
-
|
|
3
|
-
export const pageUrl = "http://localhost:3000/";
|
|
4
|
-
|
|
5
|
-
export type TestConfigOptions =
|
|
6
|
-
| "validationSuccess"
|
|
7
|
-
| "validationFailure"
|
|
8
|
-
| "insertCoordinates"
|
|
9
|
-
| "insertCoordinatesGlobe"
|
|
10
|
-
| "globeCircle"
|
|
11
|
-
| "globeSelect";
|
|
12
|
-
|
|
13
|
-
export const setupMap = async ({
|
|
14
|
-
page,
|
|
15
|
-
configQueryParam,
|
|
16
|
-
}: {
|
|
17
|
-
page: Page;
|
|
18
|
-
configQueryParam?: TestConfigOptions[];
|
|
19
|
-
}): Promise<{
|
|
20
|
-
x: number;
|
|
21
|
-
y: number;
|
|
22
|
-
width: number;
|
|
23
|
-
height: number;
|
|
24
|
-
}> => {
|
|
25
|
-
if (configQueryParam) {
|
|
26
|
-
if (configQueryParam.length > 1) {
|
|
27
|
-
await page.goto(
|
|
28
|
-
pageUrl +
|
|
29
|
-
"?config=" +
|
|
30
|
-
configQueryParam.map((config) => config).join(","),
|
|
31
|
-
);
|
|
32
|
-
} else {
|
|
33
|
-
await page.goto(pageUrl + "?config=" + configQueryParam);
|
|
34
|
-
}
|
|
35
|
-
} else {
|
|
36
|
-
await page.goto(pageUrl);
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
const mapDiv = await page.getByRole("application");
|
|
40
|
-
|
|
41
|
-
// Get the bounding box of the div
|
|
42
|
-
const mapBoundingBox = await mapDiv.boundingBox();
|
|
43
|
-
|
|
44
|
-
if (!mapBoundingBox) {
|
|
45
|
-
throw new Error();
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
return mapBoundingBox;
|
|
49
|
-
};
|
|
50
|
-
|
|
51
|
-
export const changeMode = async ({
|
|
52
|
-
page,
|
|
53
|
-
mode,
|
|
54
|
-
}: {
|
|
55
|
-
page: Page;
|
|
56
|
-
mode:
|
|
57
|
-
| "point"
|
|
58
|
-
| "polygon"
|
|
59
|
-
| "linestring"
|
|
60
|
-
| "select"
|
|
61
|
-
| "rectangle"
|
|
62
|
-
| "circle"
|
|
63
|
-
| "angled-rectangle"
|
|
64
|
-
| "sector"
|
|
65
|
-
| "sensor";
|
|
66
|
-
}) => {
|
|
67
|
-
let modeText = mode.charAt(0).toUpperCase() + mode.slice(1);
|
|
68
|
-
|
|
69
|
-
if (mode.includes("-")) {
|
|
70
|
-
modeText = mode
|
|
71
|
-
.split("-")
|
|
72
|
-
.map((word) => word.charAt(0).toUpperCase() + word.slice(1))
|
|
73
|
-
.join(" ");
|
|
74
|
-
} else {
|
|
75
|
-
modeText = mode.charAt(0).toUpperCase() + mode.slice(1);
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
const buttons = page.getByTestId("buttons");
|
|
79
|
-
const button = buttons.getByText(modeText, { exact: true });
|
|
80
|
-
|
|
81
|
-
// Click the mode button
|
|
82
|
-
await button.click();
|
|
83
|
-
|
|
84
|
-
// Ensure it has been clickde and updatedc correctly
|
|
85
|
-
const color = await button.evaluate((el) =>
|
|
86
|
-
window.getComputedStyle(el).getPropertyValue("color"),
|
|
87
|
-
);
|
|
88
|
-
expect(
|
|
89
|
-
color,
|
|
90
|
-
"Text rgb color should match the expected selected button color",
|
|
91
|
-
).toBe("rgb(39, 204, 255)"); // We set hex but it gets computed to rgb
|
|
92
|
-
};
|
|
93
|
-
|
|
94
|
-
export const expectPaths = async ({
|
|
95
|
-
page,
|
|
96
|
-
count,
|
|
97
|
-
}: {
|
|
98
|
-
page: Page;
|
|
99
|
-
count: number;
|
|
100
|
-
}) => {
|
|
101
|
-
const selector = "svg > g > path";
|
|
102
|
-
|
|
103
|
-
if (count > 0) {
|
|
104
|
-
await page.waitForSelector(selector);
|
|
105
|
-
expect(await page.locator(selector).count()).toBe(count);
|
|
106
|
-
} else {
|
|
107
|
-
await expect(
|
|
108
|
-
await page.locator(selector).count(),
|
|
109
|
-
`locator count should be greater than 0 for selector ${selector}`,
|
|
110
|
-
).toBe(0);
|
|
111
|
-
}
|
|
112
|
-
};
|
|
113
|
-
|
|
114
|
-
export const expectPathDimensions = async ({
|
|
115
|
-
page,
|
|
116
|
-
width,
|
|
117
|
-
height,
|
|
118
|
-
item = 0,
|
|
119
|
-
}: {
|
|
120
|
-
page: Page;
|
|
121
|
-
width: number;
|
|
122
|
-
height: number;
|
|
123
|
-
item?: number;
|
|
124
|
-
}) => {
|
|
125
|
-
const selector = "svg > g > path";
|
|
126
|
-
|
|
127
|
-
const boundingBox = await page.locator(selector).nth(item).boundingBox();
|
|
128
|
-
|
|
129
|
-
expect(boundingBox?.width).toBe(width);
|
|
130
|
-
expect(boundingBox?.height).toBe(height);
|
|
131
|
-
};
|
|
132
|
-
|
|
133
|
-
export const expectGroupPosition = async ({
|
|
134
|
-
page,
|
|
135
|
-
x,
|
|
136
|
-
y,
|
|
137
|
-
}: {
|
|
138
|
-
page: Page;
|
|
139
|
-
x: number;
|
|
140
|
-
y: number;
|
|
141
|
-
}) => {
|
|
142
|
-
const selector = "svg > g > path";
|
|
143
|
-
|
|
144
|
-
const boundingBox = await page.locator(selector).boundingBox();
|
|
145
|
-
|
|
146
|
-
expect(boundingBox?.x).toBe(x);
|
|
147
|
-
expect(boundingBox?.y).toBe(y);
|
|
148
|
-
};
|
|
149
|
-
|
|
150
|
-
export const drawRectangularPolygon = async ({
|
|
151
|
-
mapDiv,
|
|
152
|
-
page,
|
|
153
|
-
size = "regular",
|
|
154
|
-
}: {
|
|
155
|
-
mapDiv: {
|
|
156
|
-
x: number;
|
|
157
|
-
y: number;
|
|
158
|
-
width: number;
|
|
159
|
-
height: number;
|
|
160
|
-
};
|
|
161
|
-
page: Page;
|
|
162
|
-
size?: "regular" | "small";
|
|
163
|
-
}) => {
|
|
164
|
-
// Draw a rectangle
|
|
165
|
-
const sideLength = size === "regular" ? 100 : 70;
|
|
166
|
-
const halfLength = sideLength / 2;
|
|
167
|
-
const centerX = mapDiv.width / 2;
|
|
168
|
-
const centerY = mapDiv.height / 2;
|
|
169
|
-
const topLeft = { x: centerX - halfLength, y: centerY - halfLength };
|
|
170
|
-
const topRight = { x: centerX + halfLength, y: centerY - halfLength };
|
|
171
|
-
const bottomLeft = { x: centerX - halfLength, y: centerY + halfLength };
|
|
172
|
-
const bottomRight = { x: centerX + halfLength, y: centerY + halfLength };
|
|
173
|
-
await page.mouse.click(topLeft.x, topLeft.y);
|
|
174
|
-
await page.mouse.click(topRight.x, topRight.y);
|
|
175
|
-
await page.mouse.click(bottomRight.x, bottomRight.y);
|
|
176
|
-
await page.mouse.click(bottomLeft.x, bottomLeft.y);
|
|
177
|
-
await page.mouse.click(bottomLeft.x, bottomLeft.y); // Closed
|
|
178
|
-
|
|
179
|
-
return { topLeft, topRight, bottomRight, bottomLeft };
|
|
180
|
-
};
|
|
181
|
-
|
|
182
|
-
export const drawTwoClickShape = async ({
|
|
183
|
-
mapDiv,
|
|
184
|
-
page,
|
|
185
|
-
}: {
|
|
186
|
-
mapDiv: {
|
|
187
|
-
x: number;
|
|
188
|
-
y: number;
|
|
189
|
-
width: number;
|
|
190
|
-
height: number;
|
|
191
|
-
};
|
|
192
|
-
page: Page;
|
|
193
|
-
}) => {
|
|
194
|
-
// Draw a rectangle
|
|
195
|
-
const sideLength = 100;
|
|
196
|
-
const halfLength = sideLength / 2;
|
|
197
|
-
const centerX = mapDiv.width / 2;
|
|
198
|
-
const centerY = mapDiv.height / 2;
|
|
199
|
-
const topLeft = { x: centerX - halfLength, y: centerY - halfLength };
|
|
200
|
-
const topRight = { x: centerX + halfLength, y: centerY - halfLength };
|
|
201
|
-
const bottomLeft = { x: centerX - halfLength, y: centerY + halfLength };
|
|
202
|
-
const bottomRight = { x: centerX + halfLength, y: centerY + halfLength };
|
|
203
|
-
await page.mouse.click(topLeft.x, topLeft.y);
|
|
204
|
-
|
|
205
|
-
await page.mouse.click(bottomRight.x, bottomRight.y); // Closed
|
|
206
|
-
|
|
207
|
-
return { topLeft, topRight, bottomRight, bottomLeft };
|
|
208
|
-
};
|
package/e2e/webpack.config.js
DELETED
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
const path = require("path");
|
|
2
|
-
const Dotenv = require("dotenv-webpack");
|
|
3
|
-
|
|
4
|
-
module.exports = {
|
|
5
|
-
mode: "development",
|
|
6
|
-
entry: "./src/index.ts",
|
|
7
|
-
devtool: "inline-source-map",
|
|
8
|
-
plugins: [new Dotenv()],
|
|
9
|
-
module: {
|
|
10
|
-
rules: [
|
|
11
|
-
{
|
|
12
|
-
test: /\.tsx?$/,
|
|
13
|
-
use: "ts-loader",
|
|
14
|
-
exclude: /node_modules/,
|
|
15
|
-
},
|
|
16
|
-
],
|
|
17
|
-
},
|
|
18
|
-
resolve: {
|
|
19
|
-
extensions: [".tsx", ".ts", ".js"],
|
|
20
|
-
},
|
|
21
|
-
output: {
|
|
22
|
-
filename: "bundle.js",
|
|
23
|
-
path: path.resolve(__dirname, "dist"),
|
|
24
|
-
},
|
|
25
|
-
devServer: {
|
|
26
|
-
static: {
|
|
27
|
-
directory: path.join(__dirname, "public"),
|
|
28
|
-
},
|
|
29
|
-
liveReload: !process.env.CI,
|
|
30
|
-
watchFiles: !process.env.CI
|
|
31
|
-
? ["./src", "./*.{js,json,ts,html}", "../src", "../*.{js,json,ts,html}"]
|
|
32
|
-
: [],
|
|
33
|
-
compress: true,
|
|
34
|
-
port: 3000,
|
|
35
|
-
},
|
|
36
|
-
};
|
package/eslint.config.js
DELETED
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
import typescriptEslint from "@typescript-eslint/eslint-plugin";
|
|
2
|
-
import tsParser from "@typescript-eslint/parser";
|
|
3
|
-
import eslintPluginPrettier from "eslint-plugin-prettier";
|
|
4
|
-
import prettierConfig from "eslint-config-prettier";
|
|
5
|
-
|
|
6
|
-
export default [
|
|
7
|
-
{
|
|
8
|
-
name: "prettier", // Configuration name
|
|
9
|
-
files: ["**/*.{js,jsx,ts,tsx,json,md,yml,yaml,html,css}"],
|
|
10
|
-
plugins: {
|
|
11
|
-
prettier: eslintPluginPrettier, // Include Prettier plugin
|
|
12
|
-
},
|
|
13
|
-
rules: {
|
|
14
|
-
...prettierConfig.rules, // Disable ESLint rules that conflict with Prettier
|
|
15
|
-
},
|
|
16
|
-
},
|
|
17
|
-
{
|
|
18
|
-
name: "typescript", // Configuration name
|
|
19
|
-
files: ["**/*.ts"], // TypeScript-specific configuration
|
|
20
|
-
plugins: {
|
|
21
|
-
"@typescript-eslint": typescriptEslint, // Include TypeScript ESLint plugin
|
|
22
|
-
},
|
|
23
|
-
languageOptions: {
|
|
24
|
-
parser: tsParser,
|
|
25
|
-
},
|
|
26
|
-
rules: {
|
|
27
|
-
"@typescript-eslint/no-empty-function": "warn",
|
|
28
|
-
"@typescript-eslint/no-explicit-any": "warn",
|
|
29
|
-
},
|
|
30
|
-
},
|
|
31
|
-
];
|
|
File without changes
|