terra-draw 1.0.0-beta.1 → 1.0.0-beta.10

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 (60) hide show
  1. package/README.md +9 -2
  2. package/dist/adapters/common/adapter-listener.d.ts +22 -0
  3. package/dist/adapters/common/base.adapter.d.ts +59 -0
  4. package/dist/adapters/mapbox-gl.adapter.d.ts +0 -1
  5. package/dist/adapters/openlayers.adapter.d.ts +14 -13
  6. package/dist/common.d.ts +11 -9
  7. package/dist/extend.d.ts +4 -0
  8. package/dist/geometry/calculate-relative-angle.d.ts +2 -10
  9. package/dist/geometry/clockwise.d.ts +2 -0
  10. package/dist/geometry/determine-halfplane.d.ts +2 -10
  11. package/dist/geometry/measure/bearing.d.ts +3 -7
  12. package/dist/geometry/measure/destination.d.ts +2 -7
  13. package/dist/geometry/measure/pixel-distance-to-line.d.ts +2 -10
  14. package/dist/geometry/measure/pixel-distance.d.ts +2 -7
  15. package/dist/geometry/point-on-line.d.ts +5 -0
  16. package/dist/geometry/project/web-mercator.d.ts +2 -4
  17. package/dist/geometry/web-mercator-centroid.d.ts +2 -4
  18. package/dist/geometry/web-mercator-point-on-line.d.ts +11 -0
  19. package/dist/modes/angled-rectangle/angled-rectangle.mode.d.ts +2 -7
  20. package/dist/modes/base.mode.d.ts +3 -1
  21. package/dist/modes/circle/circle.mode.d.ts +3 -2
  22. package/dist/modes/coordinate-snapping.behavior.d.ts +16 -0
  23. package/dist/modes/freehand/freehand.mode.d.ts +8 -2
  24. package/dist/modes/{snapping.behavior.d.ts → line-snapping.behavior.d.ts} +1 -1
  25. package/dist/modes/linestring/linestring.mode.d.ts +11 -4
  26. package/dist/modes/point/point.mode.d.ts +2 -2
  27. package/dist/modes/polygon/polygon.mode.d.ts +14 -4
  28. package/dist/modes/rectangle/rectangle.mode.d.ts +2 -2
  29. package/dist/modes/render/render.mode.d.ts +2 -1
  30. package/dist/modes/sector/sector.mode.d.ts +60 -0
  31. package/dist/modes/select/behaviors/drag-feature.behavior.d.ts +2 -2
  32. package/dist/modes/sensor/sensor.mode.d.ts +69 -0
  33. package/dist/store/store-feature-validation.d.ts +8 -2
  34. package/dist/store/store.d.ts +7 -3
  35. package/dist/terra-draw.cjs +1 -1
  36. package/dist/terra-draw.cjs.map +1 -1
  37. package/dist/terra-draw.d.ts +12 -13
  38. package/dist/terra-draw.modern.js +1 -1
  39. package/dist/terra-draw.modern.js.map +1 -1
  40. package/dist/terra-draw.module.js +1 -1
  41. package/dist/terra-draw.module.js.map +1 -1
  42. package/dist/terra-draw.umd.js +1 -1
  43. package/dist/terra-draw.umd.js.map +1 -1
  44. package/dist/validation-reasons.d.ts +13 -0
  45. package/dist/validations/common-validations.d.ts +2 -0
  46. package/dist/validations/linestring.validation.d.ts +4 -1
  47. package/dist/validations/max-size.validation.d.ts +3 -1
  48. package/dist/validations/min-size.validation.d.ts +3 -1
  49. package/dist/validations/not-self-intersecting.validation.d.ts +4 -1
  50. package/dist/validations/point.validation.d.ts +4 -1
  51. package/dist/validations/polygon.validation.d.ts +8 -2
  52. package/e2e/package-lock.json +5 -4
  53. package/e2e/package.json +1 -1
  54. package/e2e/public/index.html +2 -0
  55. package/e2e/tests/leaflet.spec.ts +412 -18
  56. package/e2e/tests/setup.ts +16 -5
  57. package/eslint.config.js +31 -0
  58. package/package.json +29 -28
  59. package/tsconfig.json +2 -1
  60. package/readme.gif +0 -0
@@ -1,5 +1,5 @@
1
1
  import { TerraDrawMouseEvent, TerraDrawAdapterStyling, TerraDrawKeyboardEvent, HexColorStyling, NumericStyling, Cursor } from "../../common";
2
- import { GeoJSONStoreFeatures } from "../../store/store";
2
+ import { GeoJSONStoreFeatures, StoreValidation } from "../../store/store";
3
3
  import { BaseModeOptions, CustomStyling, TerraDrawBaseDrawMode } from "../base.mode";
4
4
  type TerraDrawRectangleModeKeyEvents = {
5
5
  cancel: KeyboardEvent["key"] | null;
@@ -50,6 +50,6 @@ export declare class TerraDrawRectangleMode extends TerraDrawBaseDrawMode<Rectan
50
50
  cleanUp(): void;
51
51
  /** @internal */
52
52
  styleFeature(feature: GeoJSONStoreFeatures): TerraDrawAdapterStyling;
53
- validateFeature(feature: unknown): feature is GeoJSONStoreFeatures;
53
+ validateFeature(feature: unknown): StoreValidation;
54
54
  }
55
55
  export {};
@@ -2,6 +2,7 @@ import { HexColorStyling, NumericStyling, TerraDrawAdapterStyling } from "../../
2
2
  import { BaseModeOptions, CustomStyling, ModeTypes, TerraDrawBaseDrawMode } from "../base.mode";
3
3
  import { BehaviorConfig } from "../base.behavior";
4
4
  import { GeoJSONStoreFeatures } from "../../terra-draw";
5
+ import { StoreValidation } from "../../store/store";
5
6
  type RenderModeStyling = {
6
7
  pointColor: HexColorStyling;
7
8
  pointWidth: NumericStyling;
@@ -47,6 +48,6 @@ export declare class TerraDrawRenderMode extends TerraDrawBaseDrawMode<RenderMod
47
48
  cleanUp(): void;
48
49
  /** @internal */
49
50
  styleFeature(feature: GeoJSONStoreFeatures): TerraDrawAdapterStyling;
50
- validateFeature(feature: unknown): feature is GeoJSONStoreFeatures;
51
+ validateFeature(feature: unknown): StoreValidation;
51
52
  }
52
53
  export {};
@@ -0,0 +1,60 @@
1
+ import { TerraDrawMouseEvent, TerraDrawAdapterStyling, TerraDrawKeyboardEvent, HexColorStyling, NumericStyling, Cursor } from "../../common";
2
+ import { TerraDrawBaseDrawMode, BaseModeOptions, CustomStyling } from "../base.mode";
3
+ import { GeoJSONStoreFeatures, StoreValidation } from "../../store/store";
4
+ type TerraDrawSectorModeKeyEvents = {
5
+ cancel?: KeyboardEvent["key"] | null;
6
+ finish?: KeyboardEvent["key"] | null;
7
+ };
8
+ type SectorPolygonStyling = {
9
+ fillColor: HexColorStyling;
10
+ outlineColor: HexColorStyling;
11
+ outlineWidth: NumericStyling;
12
+ fillOpacity: NumericStyling;
13
+ };
14
+ interface Cursors {
15
+ start?: Cursor;
16
+ close?: Cursor;
17
+ }
18
+ interface TerraDrawSectorModeOptions<T extends CustomStyling> extends BaseModeOptions<T> {
19
+ arcPoints?: number;
20
+ pointerDistance?: number;
21
+ keyEvents?: TerraDrawSectorModeKeyEvents | null;
22
+ cursors?: Cursors;
23
+ }
24
+ export declare class TerraDrawSectorMode extends TerraDrawBaseDrawMode<SectorPolygonStyling> {
25
+ mode: string;
26
+ private currentCoordinate;
27
+ private currentId;
28
+ private keyEvents;
29
+ private direction;
30
+ private arcPoints;
31
+ private cursors;
32
+ private mouseMove;
33
+ constructor(options?: TerraDrawSectorModeOptions<SectorPolygonStyling>);
34
+ private close;
35
+ /** @internal */
36
+ start(): void;
37
+ /** @internal */
38
+ stop(): void;
39
+ /** @internal */
40
+ onMouseMove(event: TerraDrawMouseEvent): void;
41
+ private updatePolygonGeometry;
42
+ /** @internal */
43
+ onClick(event: TerraDrawMouseEvent): void;
44
+ /** @internal */
45
+ onKeyUp(event: TerraDrawKeyboardEvent): void;
46
+ /** @internal */
47
+ onKeyDown(): void;
48
+ /** @internal */
49
+ onDragStart(): void;
50
+ /** @internal */
51
+ onDrag(): void;
52
+ /** @internal */
53
+ onDragEnd(): void;
54
+ /** @internal */
55
+ cleanUp(): void;
56
+ /** @internal */
57
+ styleFeature(feature: GeoJSONStoreFeatures): TerraDrawAdapterStyling;
58
+ validateFeature(feature: unknown): StoreValidation;
59
+ }
60
+ export {};
@@ -6,10 +6,10 @@ import { MidPointBehavior } from "./midpoint.behavior";
6
6
  import { FeatureId } from "../../../store/store";
7
7
  export declare class DragFeatureBehavior extends TerraDrawModeBehavior {
8
8
  readonly config: BehaviorConfig;
9
- private readonly featuresAtMouseEvent;
9
+ private readonly featuresAtCursorEvent;
10
10
  private readonly selectionPoints;
11
11
  private readonly midPoints;
12
- constructor(config: BehaviorConfig, featuresAtMouseEvent: FeatureAtPointerEventBehavior, selectionPoints: SelectionPointBehavior, midPoints: MidPointBehavior);
12
+ constructor(config: BehaviorConfig, featuresAtCursorEvent: FeatureAtPointerEventBehavior, selectionPoints: SelectionPointBehavior, midPoints: MidPointBehavior);
13
13
  private draggedFeatureId;
14
14
  private dragPosition;
15
15
  startDragging(event: TerraDrawMouseEvent, id: FeatureId): void;
@@ -0,0 +1,69 @@
1
+ import { TerraDrawMouseEvent, TerraDrawAdapterStyling, TerraDrawKeyboardEvent, HexColorStyling, NumericStyling, Cursor } from "../../common";
2
+ import { TerraDrawBaseDrawMode, BaseModeOptions, CustomStyling } from "../base.mode";
3
+ import { GeoJSONStoreFeatures, StoreValidation } from "../../store/store";
4
+ type TerraDrawSensorModeKeyEvents = {
5
+ cancel?: KeyboardEvent["key"] | null;
6
+ finish?: KeyboardEvent["key"] | null;
7
+ };
8
+ type SensorPolygonStyling = {
9
+ centerPointColor: HexColorStyling;
10
+ centerPointWidth: NumericStyling;
11
+ centerPointOutlineColor: HexColorStyling;
12
+ centerPointOutlineWidth: NumericStyling;
13
+ fillColor: HexColorStyling;
14
+ outlineColor: HexColorStyling;
15
+ outlineWidth: NumericStyling;
16
+ fillOpacity: NumericStyling;
17
+ };
18
+ interface Cursors {
19
+ start?: Cursor;
20
+ close?: Cursor;
21
+ }
22
+ interface TerraDrawSensorModeOptions<T extends CustomStyling> extends BaseModeOptions<T> {
23
+ arcPoints?: number;
24
+ pointerDistance?: number;
25
+ keyEvents?: TerraDrawSensorModeKeyEvents | null;
26
+ cursors?: Cursors;
27
+ }
28
+ export declare class TerraDrawSensorMode extends TerraDrawBaseDrawMode<SensorPolygonStyling> {
29
+ mode: string;
30
+ private currentCoordinate;
31
+ private currentId;
32
+ private currentInitialArcId;
33
+ private currentStartingPointId;
34
+ private keyEvents;
35
+ private direction;
36
+ private arcPoints;
37
+ private cursors;
38
+ private mouseMove;
39
+ constructor(options?: TerraDrawSensorModeOptions<SensorPolygonStyling>);
40
+ private close;
41
+ /** @internal */
42
+ start(): void;
43
+ /** @internal */
44
+ stop(): void;
45
+ /** @internal */
46
+ onMouseMove(event: TerraDrawMouseEvent): void;
47
+ private updateLineStringGeometry;
48
+ private updatePolygonGeometry;
49
+ /** @internal */
50
+ onClick(event: TerraDrawMouseEvent): void;
51
+ /** @internal */
52
+ onKeyUp(event: TerraDrawKeyboardEvent): void;
53
+ /** @internal */
54
+ onKeyDown(): void;
55
+ /** @internal */
56
+ onDragStart(): void;
57
+ /** @internal */
58
+ onDrag(): void;
59
+ /** @internal */
60
+ onDragEnd(): void;
61
+ /** @internal */
62
+ cleanUp(): void;
63
+ /** @internal */
64
+ styleFeature(feature: GeoJSONStoreFeatures): TerraDrawAdapterStyling;
65
+ validateFeature(feature: unknown): StoreValidation;
66
+ private getDeltaBearing;
67
+ private notInSector;
68
+ }
69
+ export {};
@@ -1,4 +1,5 @@
1
- import { FeatureId, GeoJSONStoreFeatures, IdStrategy } from "./store";
1
+ import { Validation } from "../common";
2
+ import { FeatureId, IdStrategy } from "./store";
2
3
  export declare const StoreValidationErrors: {
3
4
  readonly FeatureHasNoId: "Feature has no id";
4
5
  readonly FeatureIsNotObject: "Feature is not object";
@@ -12,5 +13,10 @@ export declare const StoreValidationErrors: {
12
13
  readonly FeatureCoordinatesNotAnArray: "Feature coordinates is not an array";
13
14
  readonly InvalidModeProperty: "Feature does not have a valid mode property";
14
15
  };
16
+ export declare function hasModeProperty(feature: unknown): feature is {
17
+ properties: {
18
+ mode: string;
19
+ };
20
+ };
15
21
  export declare function isValidTimestamp(timestamp: unknown): boolean;
16
- export declare function isValidStoreFeature(feature: unknown, isValidId: IdStrategy<FeatureId>["isValidId"]): feature is GeoJSONStoreFeatures;
22
+ export declare function isValidStoreFeature(feature: unknown, isValidId: IdStrategy<FeatureId>["isValidId"]): ReturnType<Validation>;
@@ -1,4 +1,5 @@
1
1
  import { Feature, Point, Polygon, LineString } from "geojson";
2
+ import { Validation } from "../common";
2
3
  type JSON = string | number | boolean | null | JSONArray | JSONObject;
3
4
  export interface JSONObject {
4
5
  [member: string]: JSON;
@@ -8,14 +9,17 @@ type DefinedProperties = Record<string, JSON>;
8
9
  export type GeoJSONStoreGeometries = Polygon | LineString | Point;
9
10
  export type BBoxPolygon = Feature<Polygon, DefinedProperties>;
10
11
  export type GeoJSONStoreFeatures = Feature<GeoJSONStoreGeometries, DefinedProperties>;
11
- export type StoreChangeEvents = "delete" | "create" | "update" | "styling";
12
+ export type StoreValidation = {
13
+ id?: FeatureId;
14
+ } & ReturnType<Validation>;
15
+ type StoreChangeEvents = "delete" | "create" | "update" | "styling";
12
16
  export type StoreChangeHandler = (ids: FeatureId[], change: StoreChangeEvents) => void;
13
17
  export type FeatureId = string | number;
14
18
  export type IdStrategy<Id extends FeatureId> = {
15
19
  isValidId: (id: Id) => boolean;
16
20
  getId: () => Id;
17
21
  };
18
- export type GeoJSONStoreConfig<Id extends FeatureId> = {
22
+ type GeoJSONStoreConfig<Id extends FeatureId> = {
19
23
  idStrategy?: IdStrategy<Id>;
20
24
  tracked?: boolean;
21
25
  };
@@ -33,7 +37,7 @@ export declare class GeoJSONStore<Id extends FeatureId = FeatureId> {
33
37
  private clone;
34
38
  getId(): FeatureId;
35
39
  has(id: FeatureId): boolean;
36
- load(data: GeoJSONStoreFeatures[], featureValidation?: (feature: unknown, tracked?: boolean) => boolean): void;
40
+ load(data: GeoJSONStoreFeatures[], featureValidation?: (feature: unknown, tracked?: boolean) => StoreValidation): StoreValidation[];
37
41
  search(bbox: BBoxPolygon, filter?: (feature: GeoJSONStoreFeatures) => boolean): GeoJSONStoreFeatures[];
38
42
  registerOnChange(onChange: StoreChangeHandler): void;
39
43
  getGeometryCopy<T extends GeoJSONStoreGeometries>(id: FeatureId): T;