terra-draw 0.0.1-alpha.9 → 1.0.0-beta.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.
Files changed (122) hide show
  1. package/.devcontainer/Dockerfile +8 -0
  2. package/.devcontainer/devcontainer.json +27 -0
  3. package/.devcontainer/post-create.sh +16 -0
  4. package/README.md +23 -13
  5. package/dist/adapters/arcgis-maps-sdk.adapter.d.ts +106 -0
  6. package/dist/adapters/google-maps.adapter.d.ts +90 -39
  7. package/dist/adapters/leaflet.adapter.d.ts +99 -33
  8. package/dist/adapters/mapbox-gl.adapter.d.ts +91 -37
  9. package/dist/adapters/maplibre-gl.adapter.d.ts +72 -0
  10. package/dist/adapters/openlayers.adapter.d.ts +120 -0
  11. package/dist/common.d.ts +118 -98
  12. package/dist/geometry/boolean/is-valid-coordinate.d.ts +4 -0
  13. package/dist/geometry/boolean/point-in-polygon.d.ts +2 -2
  14. package/dist/geometry/boolean/self-intersects.d.ts +2 -2
  15. package/dist/geometry/calculate-relative-angle.d.ts +17 -0
  16. package/dist/geometry/centroid.d.ts +2 -2
  17. package/dist/geometry/coordinates-identical.d.ts +2 -2
  18. package/dist/geometry/determine-halfplane.d.ts +10 -0
  19. package/dist/geometry/get-coordinates-as-points.d.ts +6 -6
  20. package/dist/geometry/get-midpoints.d.ts +14 -7
  21. package/dist/geometry/helpers.d.ts +4 -4
  22. package/dist/geometry/limit-decimal-precision.d.ts +1 -1
  23. package/dist/geometry/measure/area.d.ts +2 -0
  24. package/dist/geometry/measure/bearing.d.ts +9 -0
  25. package/dist/geometry/measure/destination.d.ts +9 -0
  26. package/dist/geometry/measure/haversine-distance.d.ts +2 -2
  27. package/dist/geometry/measure/pixel-distance-to-line.d.ts +10 -10
  28. package/dist/geometry/measure/pixel-distance.d.ts +7 -7
  29. package/dist/geometry/measure/rhumb-bearing.d.ts +2 -2
  30. package/dist/geometry/measure/rhumb-destination.d.ts +2 -2
  31. package/dist/geometry/measure/rhumb-distance.d.ts +2 -2
  32. package/dist/geometry/measure/slice-along.d.ts +2 -0
  33. package/dist/geometry/midpoint-coordinate.d.ts +4 -2
  34. package/dist/geometry/project/web-mercator.d.ts +20 -0
  35. package/dist/geometry/shape/create-bbox.d.ts +10 -0
  36. package/dist/geometry/shape/create-circle.d.ts +13 -7
  37. package/dist/geometry/shape/great-circle-coordinates.d.ts +2 -0
  38. package/dist/geometry/shape/web-mercator-distortion.d.ts +2 -0
  39. package/dist/geometry/transform/rotate.d.ts +9 -2
  40. package/dist/geometry/transform/scale.d.ts +9 -2
  41. package/dist/geometry/web-mercator-centroid.d.ts +11 -0
  42. package/dist/modes/angled-rectangle/angled-rectangle.mode.d.ts +62 -0
  43. package/dist/modes/base.behavior.d.ts +21 -19
  44. package/dist/modes/base.mode.d.ts +66 -33
  45. package/dist/modes/circle/circle.mode.d.ts +66 -37
  46. package/dist/modes/click-bounding-box.behavior.d.ts +6 -7
  47. package/dist/modes/freehand/freehand.mode.d.ts +63 -43
  48. package/dist/modes/insert-coordinates.behavior.d.ts +9 -0
  49. package/dist/modes/linestring/linestring.mode.d.ts +78 -47
  50. package/dist/modes/pixel-distance.behavior.d.ts +7 -7
  51. package/dist/modes/point/point.mode.d.ts +44 -26
  52. package/dist/modes/polygon/behaviors/closing-points.behavior.d.ts +19 -19
  53. package/dist/modes/polygon/polygon.mode.d.ts +69 -51
  54. package/dist/modes/rectangle/rectangle.mode.d.ts +55 -0
  55. package/dist/modes/render/render.mode.d.ts +52 -23
  56. package/dist/modes/select/behaviors/drag-coordinate-resize.behavior.d.ts +62 -0
  57. package/dist/modes/select/behaviors/drag-coordinate.behavior.d.ts +20 -13
  58. package/dist/modes/select/behaviors/drag-feature.behavior.d.ts +20 -17
  59. package/dist/modes/select/behaviors/{features-at-mouse-event.behavior.d.ts → feature-at-pointer-event.behavior.d.ts} +15 -15
  60. package/dist/modes/select/behaviors/midpoint.behavior.d.ts +19 -18
  61. package/dist/modes/select/behaviors/rotate-feature.behavior.d.ts +14 -13
  62. package/dist/modes/select/behaviors/scale-feature.behavior.d.ts +14 -13
  63. package/dist/modes/select/behaviors/selection-point.behavior.d.ts +19 -18
  64. package/dist/modes/select/select.mode.d.ts +119 -78
  65. package/dist/modes/snapping.behavior.d.ts +16 -13
  66. package/dist/modes/static/static.mode.d.ts +32 -30
  67. package/dist/store/spatial-index/quickselect.d.ts +2 -2
  68. package/dist/store/spatial-index/rbush.d.ts +35 -35
  69. package/dist/store/spatial-index/spatial-index.d.ts +18 -18
  70. package/dist/store/store-feature-validation.d.ts +16 -0
  71. package/dist/store/store.d.ts +59 -48
  72. package/dist/terra-draw.cjs +1 -1
  73. package/dist/terra-draw.cjs.map +1 -1
  74. package/dist/terra-draw.d.ts +223 -48
  75. package/dist/terra-draw.modern.js +1 -1
  76. package/dist/terra-draw.modern.js.map +1 -1
  77. package/dist/terra-draw.module.js +1 -1
  78. package/dist/terra-draw.module.js.map +1 -1
  79. package/dist/terra-draw.umd.js +1 -1
  80. package/dist/terra-draw.umd.js.map +1 -1
  81. package/dist/util/geoms.d.ts +3 -3
  82. package/dist/util/id.d.ts +1 -1
  83. package/dist/util/styling.d.ts +2 -2
  84. package/dist/validations/linestring.validation.d.ts +2 -0
  85. package/dist/validations/max-size.validation.d.ts +2 -0
  86. package/dist/validations/min-size.validation.d.ts +2 -0
  87. package/dist/validations/not-self-intersecting.validation.d.ts +2 -0
  88. package/dist/validations/point.validation.d.ts +2 -0
  89. package/dist/validations/polygon.validation.d.ts +3 -0
  90. package/e2e/README.md +29 -0
  91. package/e2e/package-lock.json +4274 -0
  92. package/e2e/package.json +26 -0
  93. package/e2e/playwright.config.ts +77 -0
  94. package/e2e/public/favicon.ico +0 -0
  95. package/e2e/public/index.html +53 -0
  96. package/e2e/tests/leaflet.spec.ts +739 -0
  97. package/e2e/tests/setup.ts +198 -0
  98. package/e2e/webpack.config.js +36 -0
  99. package/jest.nocheck.config.ts +17 -0
  100. package/package.json +158 -87
  101. package/readme.gif +0 -0
  102. package/tsconfig.json +25 -12
  103. package/CODE_OF_CONDUCT.md +0 -36
  104. package/CONTRIBUTING.md +0 -17
  105. package/DEVELOPMENT.md +0 -77
  106. package/dist/bundle.js +0 -6
  107. package/dist/bundle.js.LICENSE.txt +0 -4
  108. package/dist/geometry/create-circle.d.ts +0 -6
  109. package/dist/geometry/get-pixel-distance-to-line.d.ts +0 -10
  110. package/dist/geometry/get-pixel-distance.d.ts +0 -7
  111. package/dist/geometry/haversine-distance.d.ts +0 -1
  112. package/dist/geometry/point-in-polygon.d.ts +0 -1
  113. package/dist/geometry/self-intersects.d.ts +0 -2
  114. package/dist/modes/circle.mode.d.ts +0 -18
  115. package/dist/modes/freehand.mode.d.ts +0 -20
  116. package/dist/modes/line-string.mode.d.ts +0 -21
  117. package/dist/modes/point.mode.d.ts +0 -14
  118. package/dist/modes/polygon/behaviors/start-end-point.behavior.d.ts +0 -11
  119. package/dist/modes/polygon.mode.d.ts +0 -21
  120. package/dist/modes/select.mode.d.ts +0 -21
  121. package/dist/modes/static.mode.d.ts +0 -10
  122. package/jest.config.ts +0 -27
@@ -1,48 +1,223 @@
1
- import { TerraDrawGoogleMapsAdapter } from "./adapters/google-maps.adapter";
2
- import { TerraDrawLeafletAdapter } from "./adapters/leaflet.adapter";
3
- import { TerraDrawMapboxGLAdapter } from "./adapters/mapbox-gl.adapter";
4
- import { TerraDrawMode, TerraDrawAdapter, TerraDrawAdapterStyling } from "./common";
5
- import { TerraDrawCircleMode } from "./modes/circle/circle.mode";
6
- import { TerraDrawFreehandMode } from "./modes/freehand/freehand.mode";
7
- import { TerraDrawLineStringMode } from "./modes/linestring/linestring.mode";
8
- import { TerraDrawPointMode } from "./modes/point/point.mode";
9
- import { TerraDrawPolygonMode } from "./modes/polygon/polygon.mode";
10
- import { TerraDrawRenderMode } from "./modes/render/render.mode";
11
- import { TerraDrawSelectMode } from "./modes/select/select.mode";
12
- import { GeoJSONStoreFeatures } from "./store/store";
13
- declare type ChangeListener = (ids: string[], type: string) => void;
14
- declare type SelectListener = (id: string) => void;
15
- declare type DeselectListener = () => void;
16
- interface TerraDrawEventListeners {
17
- change: ChangeListener;
18
- select: SelectListener;
19
- deselect: DeselectListener;
20
- }
21
- declare type TerraDrawEvents = keyof TerraDrawEventListeners;
22
- declare class TerraDraw {
23
- private _modes;
24
- private _mode;
25
- private _adapter;
26
- private _enabled;
27
- private _store;
28
- private _eventListeners;
29
- constructor(options: {
30
- adapter: TerraDrawAdapter;
31
- modes: {
32
- [mode: string]: TerraDrawMode;
33
- };
34
- data?: GeoJSONStoreFeatures[];
35
- });
36
- private getModeStyles;
37
- setModeStyles(mode: string, styles: TerraDrawAdapterStyling): void;
38
- getSnapshot(): GeoJSONStoreFeatures[];
39
- get enabled(): boolean;
40
- set enabled(_: boolean);
41
- getCurrentMode(): string;
42
- changeMode(mode: string): void;
43
- start(): void;
44
- stop(): void;
45
- on<T extends TerraDrawEvents>(event: T, callback: TerraDrawEventListeners[T]): void;
46
- off<T extends TerraDrawEvents>(event: TerraDrawEvents, callback: TerraDrawEventListeners[T]): void;
47
- }
48
- export { TerraDraw, TerraDrawSelectMode, TerraDrawPointMode, TerraDrawLineStringMode, TerraDrawPolygonMode, TerraDrawCircleMode, TerraDrawFreehandMode, TerraDrawRenderMode, TerraDrawGoogleMapsAdapter, TerraDrawMapboxGLAdapter, TerraDrawLeafletAdapter, };
1
+ import { TerraDrawGoogleMapsAdapter } from "./adapters/google-maps.adapter";
2
+ import { TerraDrawLeafletAdapter } from "./adapters/leaflet.adapter";
3
+ import { TerraDrawMapboxGLAdapter } from "./adapters/mapbox-gl.adapter";
4
+ import { TerraDrawMapLibreGLAdapter } from "./adapters/maplibre-gl.adapter";
5
+ import { TerraDrawOpenLayersAdapter } from "./adapters/openlayers.adapter";
6
+ import { TerraDrawArcGISMapsSDKAdapter } from "./adapters/arcgis-maps-sdk.adapter";
7
+ import { TerraDrawAdapter, TerraDrawAdapterStyling, GetLngLatFromEvent, Project, SetCursor, TerraDrawChanges, TerraDrawStylingFunction, Unproject, HexColor, TerraDrawKeyboardEvent, TerraDrawMouseEvent, OnFinishContext } from "./common";
8
+ import { TerraDrawBaseAdapter } from "./adapters/common/base.adapter";
9
+ import { TerraDrawBaseDrawMode } from "./modes/base.mode";
10
+ import { TerraDrawCircleMode } from "./modes/circle/circle.mode";
11
+ import { TerraDrawFreehandMode } from "./modes/freehand/freehand.mode";
12
+ import { TerraDrawLineStringMode } from "./modes/linestring/linestring.mode";
13
+ import { TerraDrawPointMode } from "./modes/point/point.mode";
14
+ import { TerraDrawPolygonMode } from "./modes/polygon/polygon.mode";
15
+ import { TerraDrawRectangleMode } from "./modes/rectangle/rectangle.mode";
16
+ import { TerraDrawRenderMode } from "./modes/render/render.mode";
17
+ import { TerraDrawSelectMode } from "./modes/select/select.mode";
18
+ import { FeatureId, GeoJSONStoreFeatures, IdStrategy } from "./store/store";
19
+ import { BehaviorConfig } from "./modes/base.behavior";
20
+ import { ValidateMinAreaSquareMeters } from "./validations/min-size.validation";
21
+ import { ValidateMaxAreaSquareMeters } from "./validations/max-size.validation";
22
+ import { ValidateNotSelfIntersecting } from "./validations/not-self-intersecting.validation";
23
+ import { TerraDrawAngledRectangleMode } from "./modes/angled-rectangle/angled-rectangle.mode";
24
+ type FinishListener = (id: FeatureId, context: OnFinishContext) => void;
25
+ type ChangeListener = (ids: FeatureId[], type: string) => void;
26
+ type SelectListener = (id: FeatureId) => void;
27
+ type DeselectListener = () => void;
28
+ interface TerraDrawEventListeners {
29
+ ready: () => void;
30
+ finish: FinishListener;
31
+ change: ChangeListener;
32
+ select: SelectListener;
33
+ deselect: DeselectListener;
34
+ }
35
+ type TerraDrawEvents = keyof TerraDrawEventListeners;
36
+ declare class TerraDraw {
37
+ private _modes;
38
+ private _mode;
39
+ private _adapter;
40
+ private _enabled;
41
+ private _store;
42
+ private _eventListeners;
43
+ private _instanceSelectMode;
44
+ constructor(options: {
45
+ adapter: TerraDrawAdapter;
46
+ modes: TerraDrawBaseDrawMode<any>[];
47
+ idStrategy?: IdStrategy<FeatureId>;
48
+ tracked?: boolean;
49
+ });
50
+ private checkEnabled;
51
+ private getModeStyles;
52
+ private featuresAtLocation;
53
+ private getSelectMode;
54
+ /**
55
+ * Allows the setting of a style for a given mode
56
+ *
57
+ * @param mode - The mode you wish to set a style for
58
+ * @param styles - The styles you wish to set for the mode - this is
59
+ * the same as the initialisation style schema
60
+ *
61
+ * @beta
62
+ */
63
+ setModeStyles<Styling extends Record<string, number | HexColor>>(mode: string, styles: Styling): void;
64
+ /**
65
+ * Allows the user to get a snapshot (copy) of all given features
66
+ *
67
+ * @returns An array of all given Feature Geometries in the instances store
68
+ *
69
+ * @beta
70
+ */
71
+ getSnapshot(): GeoJSONStoreFeatures[];
72
+ /**
73
+ * Removes all data from the current store and removes any rendered layers
74
+ * via the registering the adapter.
75
+ *
76
+ * @beta
77
+ */
78
+ clear(): void;
79
+ /**
80
+ * A property used to determine whether the instance is active or not. You
81
+ * can use the start method to set this to true, and stop method to set this to false.
82
+ * This is a read only property.
83
+ *
84
+ * @return true or false depending on if the instance is stopped or started
85
+ * @readonly
86
+ * @beta
87
+ */
88
+ get enabled(): boolean;
89
+ /**
90
+ * enabled is a read only property and will throw and error if you try and set it.
91
+ *
92
+ * @beta
93
+ */
94
+ set enabled(_: boolean);
95
+ /**
96
+ * A method for getting the current mode name
97
+ *
98
+ * @return the current mode name
99
+ *
100
+ * @beta
101
+ */
102
+ getMode(): string;
103
+ /**
104
+ * A method for setting the current mode by name. Under the hood this will stop
105
+ * the previous mode and start the new one.
106
+ * @param mode - The mode name you wish to start
107
+ *
108
+ * @beta
109
+ */
110
+ setMode(mode: string): void;
111
+ /**
112
+ * A method for removing features to the store
113
+ * @param ids
114
+ * @returns
115
+ *
116
+ * @beta
117
+ */
118
+ removeFeatures(ids: FeatureId[]): void;
119
+ /**
120
+ * Provides the ability to programmatically select a feature using the instances provided select mode.
121
+ * If not select mode is provided in the instance, an error will be thrown. If the instance is not currently
122
+ * in the select mode, it will switch to it.
123
+ * @param id - the id of the feature to select
124
+ * @beta
125
+ */
126
+ selectFeature(id: FeatureId): void;
127
+ /**
128
+ * Provides the ability to programmatically deselect a feature using the instances provided select mode.
129
+ * If not select mode is provided in the instance, an error will be thrown. If the instance is not currently
130
+ * in the select mode, it will switch to it.
131
+ * @param id - the id of the feature to deselect
132
+ * @beta
133
+ */
134
+ deselectFeature(id: FeatureId): void;
135
+ /**
136
+ * Returns the next feature id from the store - defaults to UUID4 unless you have
137
+ * set a custom idStrategy. This method can be useful if you are needing creating features
138
+ * outside of the Terra Draw instance but want to add them in to the store.
139
+ * @returns a id, either number of string based on whatever the configured idStrategy is
140
+ *
141
+ * @beta
142
+ */
143
+ getFeatureId(): FeatureId;
144
+ /**
145
+ * Returns true or false depending on if the Terra Draw instance has a feature with a given id
146
+ * @returns a boolean determining if the instance has a feature with the given id
147
+ *
148
+ * @beta
149
+ */
150
+ hasFeature(id: FeatureId): boolean;
151
+ /**
152
+ * A method for adding features to the store. This method will validate the features.
153
+ * Features must match one of the modes enabled in the instance.
154
+ * @param mode
155
+ * @param features
156
+ * @returns
157
+ *
158
+ * @beta
159
+ */
160
+ addFeatures(features: GeoJSONStoreFeatures[]): void;
161
+ /**
162
+ * A method starting Terra Draw. It put the instance into a started state, and
163
+ * in registers the passed adapter giving it all the callbacks required to operate.
164
+ *
165
+ * @beta
166
+ */
167
+ start(): void;
168
+ /**
169
+ * Gets the features at a given longitude and latitude.
170
+ * Will return point and linestrings that are a given pixel distance
171
+ * away from the lng/lat and any polygons which contain it.
172
+ *
173
+ * @beta
174
+ */
175
+ getFeaturesAtLngLat(lngLat: {
176
+ lng: number;
177
+ lat: number;
178
+ }, options?: {
179
+ pointerDistance: number;
180
+ ignoreSelectFeatures: boolean;
181
+ }): GeoJSONStoreFeatures[];
182
+ /**
183
+ * Takes a given pointer event and
184
+ * Will return point and linestrings that are a given pixel distance
185
+ * away from the lng/lat and any polygons which contain it.
186
+ *
187
+ * @beta
188
+ */
189
+ getFeaturesAtPointerEvent(event: PointerEvent | MouseEvent, options?: {
190
+ pointerDistance: number;
191
+ ignoreSelectFeatures: boolean;
192
+ }): GeoJSONStoreFeatures[];
193
+ /**
194
+ * A method for stopping Terra Draw. Will clear the store, deregister the adapter and
195
+ * remove any rendered layers in the process.
196
+ *
197
+ * @beta
198
+ */
199
+ stop(): void;
200
+ /**
201
+ * Registers a Terra Draw event
202
+ *
203
+ * @param event - The name of the event you wish to listen for
204
+ * @param callback - The callback with you wish to be called when this event occurs
205
+ *
206
+ * @beta
207
+ */
208
+ on<T extends TerraDrawEvents>(event: T, callback: TerraDrawEventListeners[T]): void;
209
+ /**
210
+ * Unregisters a Terra Draw event
211
+ *
212
+ * @param event - The name of the event you wish to unregister
213
+ * @param callback - The callback you originally provided to the 'on' method
214
+ *
215
+ * @beta
216
+ */
217
+ off<T extends TerraDrawEvents>(event: TerraDrawEvents, callback: TerraDrawEventListeners[T]): void;
218
+ }
219
+ declare const TerraDrawExtend: {
220
+ TerraDrawBaseDrawMode: typeof TerraDrawBaseDrawMode;
221
+ TerraDrawBaseAdapter: typeof TerraDrawBaseAdapter;
222
+ };
223
+ export { TerraDraw, TerraDrawSelectMode, TerraDrawPointMode, TerraDrawLineStringMode, TerraDrawPolygonMode, TerraDrawCircleMode, TerraDrawFreehandMode, TerraDrawRenderMode, TerraDrawRectangleMode, TerraDrawAngledRectangleMode, TerraDrawGoogleMapsAdapter, TerraDrawMapboxGLAdapter, TerraDrawLeafletAdapter, TerraDrawMapLibreGLAdapter, TerraDrawOpenLayersAdapter, TerraDrawArcGISMapsSDKAdapter, TerraDrawExtend, BehaviorConfig, GeoJSONStoreFeatures, HexColor, TerraDrawMouseEvent, TerraDrawAdapterStyling, TerraDrawKeyboardEvent, TerraDrawChanges, TerraDrawStylingFunction, Project, Unproject, SetCursor, GetLngLatFromEvent, ValidateMinAreaSquareMeters, ValidateMaxAreaSquareMeters, ValidateNotSelfIntersecting, };