terra-draw 1.0.0-beta.9 → 1.1.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.
Files changed (133) hide show
  1. package/.versionrc.cjs +9 -0
  2. package/README.md +12 -26
  3. package/dist/common/adapter-listener.spec.d.ts +1 -0
  4. package/dist/{adapters/common → common}/base.adapter.d.ts +1 -1
  5. package/dist/common.d.ts +8 -5
  6. package/dist/extend.d.ts +4 -3
  7. package/dist/geometry/boolean/is-valid-coordinate.spec.d.ts +1 -0
  8. package/dist/geometry/boolean/point-in-polygon.spec.d.ts +1 -0
  9. package/dist/geometry/boolean/self-intersects.spec.d.ts +1 -0
  10. package/dist/geometry/calculate-relative-angle.d.ts +2 -10
  11. package/dist/geometry/calculate-relative-angle.spec.d.ts +1 -0
  12. package/dist/geometry/centroid.spec.d.ts +1 -0
  13. package/dist/geometry/clockwise.d.ts +2 -10
  14. package/dist/geometry/clockwise.spec.d.ts +1 -0
  15. package/dist/geometry/coordinates-identical.spec.d.ts +1 -0
  16. package/dist/geometry/determine-halfplane.d.ts +2 -10
  17. package/dist/geometry/determine-halfplane.spec.d.ts +1 -0
  18. package/dist/geometry/get-coordinates-as-points.spec.d.ts +1 -0
  19. package/dist/geometry/get-midpoint.spec.d.ts +1 -0
  20. package/dist/geometry/limit-decimal-precision.spec.d.ts +1 -0
  21. package/dist/geometry/measure/bearing.d.ts +2 -7
  22. package/dist/geometry/measure/bearing.spec.d.ts +1 -0
  23. package/dist/geometry/measure/desination.spec.d.ts +1 -0
  24. package/dist/geometry/measure/destination.d.ts +2 -7
  25. package/dist/geometry/measure/haversine-distance.spec.d.ts +1 -0
  26. package/dist/geometry/measure/pixel-distance-to-line.d.ts +2 -10
  27. package/dist/geometry/measure/pixel-distance-to-line.spec.d.ts +1 -0
  28. package/dist/geometry/measure/pixel-distance.d.ts +2 -7
  29. package/dist/geometry/measure/pixel-distance.spec.d.ts +1 -0
  30. package/dist/geometry/measure/rhumb-bearing.spec.d.ts +1 -0
  31. package/dist/geometry/measure/rhumb-destination.spec.d.ts +1 -0
  32. package/dist/geometry/measure/rhumb-distance.spec.d.ts +1 -0
  33. package/dist/geometry/point-on-line.d.ts +6 -0
  34. package/dist/geometry/point-on-line.spec.d.ts +1 -0
  35. package/dist/geometry/project/web-mercator.d.ts +2 -4
  36. package/dist/geometry/project/web-mercator.spec.d.ts +1 -0
  37. package/dist/geometry/shape/create-bbox.spec.d.ts +1 -0
  38. package/dist/geometry/shape/create-circle.spec.d.ts +1 -0
  39. package/dist/geometry/shape/great-circle-coordinates.spec.d.ts +1 -0
  40. package/dist/geometry/shape/web-mercator-distortion.spec.d.ts +1 -0
  41. package/dist/geometry/transform/rotate.spec.d.ts +1 -0
  42. package/dist/geometry/transform/scale.spec.d.ts +1 -0
  43. package/dist/geometry/web-mercator-centroid.d.ts +2 -4
  44. package/dist/geometry/web-mercator-centroid.spec.d.ts +1 -0
  45. package/dist/geometry/web-mercator-point-on-line.d.ts +12 -0
  46. package/dist/geometry/web-mercator-point-on-line.spec.d.ts +1 -0
  47. package/dist/modes/angled-rectangle/angled-rectangle.mode.d.ts +0 -1
  48. package/dist/modes/angled-rectangle/angled-rectangle.mode.spec.d.ts +1 -0
  49. package/dist/modes/circle/circle.mode.spec.d.ts +1 -0
  50. package/dist/modes/click-bounding-box.behavior.spec.d.ts +1 -0
  51. package/dist/modes/coordinate-snapping.behavior.d.ts +21 -0
  52. package/dist/modes/coordinate-snapping.behavior.spec.d.ts +1 -0
  53. package/dist/modes/freehand/freehand.mode.spec.d.ts +1 -0
  54. package/dist/modes/insert-coordinates.behavior.spec.d.ts +1 -0
  55. package/dist/modes/{snapping.behavior.d.ts → line-snapping.behavior.d.ts} +8 -3
  56. package/dist/modes/line-snapping.behavior.spec.d.ts +1 -0
  57. package/dist/modes/linestring/linestring.mode.d.ts +14 -3
  58. package/dist/modes/linestring/linestring.mode.spec.d.ts +1 -0
  59. package/dist/modes/pixel-distance.behavior.spec.d.ts +1 -0
  60. package/dist/modes/point/point.mode.d.ts +16 -4
  61. package/dist/modes/point/point.mode.spec.d.ts +1 -0
  62. package/dist/modes/polygon/behaviors/closing-points.behavior.spec.d.ts +1 -0
  63. package/dist/modes/polygon/polygon.mode.d.ts +32 -6
  64. package/dist/modes/polygon/polygon.mode.spec.d.ts +1 -0
  65. package/dist/modes/rectangle/rectangle.mode.spec.d.ts +1 -0
  66. package/dist/modes/render/render.mode.spec.d.ts +1 -0
  67. package/dist/modes/sector/sector.mode.spec.d.ts +1 -0
  68. package/dist/modes/select/behaviors/drag-coordinate-resize.behavior.spec.d.ts +1 -0
  69. package/dist/modes/select/behaviors/drag-coordinate.behavior.spec.d.ts +1 -0
  70. package/dist/modes/select/behaviors/drag-feature.behavior.spec.d.ts +1 -0
  71. package/dist/modes/select/behaviors/feature-at-pointer-event.behavior.spec.d.ts +1 -0
  72. package/dist/modes/select/behaviors/midpoint.behavior.spec.d.ts +1 -0
  73. package/dist/modes/select/behaviors/rotate-feature.behavior.spec.d.ts +1 -0
  74. package/dist/modes/select/behaviors/scale-feature.behavior.spec.d.ts +1 -0
  75. package/dist/modes/select/behaviors/selection-point.behavior.spec.d.ts +1 -0
  76. package/dist/modes/select/select.mode.spec.d.ts +1 -0
  77. package/dist/modes/sensor/sensor.mode.spec.d.ts +1 -0
  78. package/dist/modes/static/static.mode.spec.d.ts +1 -0
  79. package/dist/store/spatial-index/quickselect.spec.d.ts +1 -0
  80. package/dist/store/spatial-index/rbush.spec.d.ts +1 -0
  81. package/dist/store/spatial-index/spatial-index.spec.d.ts +1 -0
  82. package/dist/store/store-validation.spec.d.ts +1 -0
  83. package/dist/store/store.spec.d.ts +1 -0
  84. package/dist/terra-draw.cjs +1 -1
  85. package/dist/terra-draw.cjs.map +1 -1
  86. package/dist/terra-draw.d.ts +9 -46
  87. package/dist/terra-draw.extensions.spec.d.ts +28 -0
  88. package/dist/terra-draw.modern.js +1 -1
  89. package/dist/terra-draw.modern.js.map +1 -1
  90. package/dist/terra-draw.module.js +1 -1
  91. package/dist/terra-draw.module.js.map +1 -1
  92. package/dist/terra-draw.spec.d.ts +1 -0
  93. package/dist/terra-draw.umd.js +1 -1
  94. package/dist/terra-draw.umd.js.map +1 -1
  95. package/dist/test/create-store-features.d.ts +6 -0
  96. package/dist/test/mock-behavior-config.d.ts +2 -0
  97. package/dist/test/mock-cursor-event.d.ts +6 -0
  98. package/dist/test/mock-features.d.ts +4 -0
  99. package/dist/test/mock-keyboard-event.d.ts +5 -0
  100. package/dist/test/mock-mode-config.d.ts +21 -0
  101. package/dist/util/geom.spec.d.ts +1 -0
  102. package/dist/util/id.spec.d.ts +1 -0
  103. package/dist/util/styling.spec.d.ts +1 -0
  104. package/dist/validations/linestring.validation.spec.d.ts +1 -0
  105. package/dist/validations/max-size.validation.spec.d.ts +1 -0
  106. package/dist/validations/min-size.validation.spec.d.ts +1 -0
  107. package/dist/validations/not-self-intersecting.validation.spec.d.ts +1 -0
  108. package/dist/validations/point.validation.spec.d.ts +1 -0
  109. package/dist/validations/polygon.validation.spec.d.ts +1 -0
  110. package/jest.nocheck.config.ts +5 -14
  111. package/package.json +8 -119
  112. package/tsconfig.json +6 -25
  113. package/.devcontainer/Dockerfile +0 -8
  114. package/.devcontainer/devcontainer.json +0 -27
  115. package/.devcontainer/post-create.sh +0 -16
  116. package/LICENSE +0 -8
  117. package/dist/adapters/arcgis-maps-sdk.adapter.d.ts +0 -106
  118. package/dist/adapters/google-maps.adapter.d.ts +0 -90
  119. package/dist/adapters/leaflet.adapter.d.ts +0 -99
  120. package/dist/adapters/mapbox-gl.adapter.d.ts +0 -90
  121. package/dist/adapters/maplibre-gl.adapter.d.ts +0 -72
  122. package/dist/adapters/openlayers.adapter.d.ts +0 -121
  123. package/e2e/README.md +0 -29
  124. package/e2e/package-lock.json +0 -4275
  125. package/e2e/package.json +0 -26
  126. package/e2e/playwright.config.ts +0 -77
  127. package/e2e/public/favicon.ico +0 -0
  128. package/e2e/public/index.html +0 -55
  129. package/e2e/tests/leaflet.spec.ts +0 -1040
  130. package/e2e/tests/setup.ts +0 -208
  131. package/e2e/webpack.config.js +0 -36
  132. package/eslint.config.js +0 -31
  133. /package/dist/{adapters/common → common}/adapter-listener.d.ts +0 -0
@@ -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
- };
@@ -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
- ];