terra-draw 1.0.0 → 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.
package/README.md CHANGED
@@ -1,7 +1,36 @@
1
- # Terra Draw
1
+ <picture>
2
+ <source media="(prefers-color-scheme: dark)" srcset="./assets/logo-dark-mode.png">
3
+ <source media="(prefers-color-scheme: light)" srcset="./assets/logo.png">
4
+ <img alt="Terra Draw logo" src="./assets/logo.png" width="400px">
5
+ </picture>
2
6
 
3
- This package is the core package for Terra Draw. You can read more context about what Terra Draw is in [the root level README](../../README.md) and more information on how to get started in the [GUIDES section of the Terra Draw monorepo](../../guides/1.GETTING_STARTED.md).
7
+ <p></p>
4
8
 
5
- ## License
9
+ ![Terra Draw CI Badge](https://github.com/JamesLMilner/terra-draw/actions/workflows/ci.yml/badge.svg)
10
+ [![npm version](https://badge.fury.io/js/terra-draw.svg)](https://badge.fury.io/js/terra-draw)
6
11
 
7
- [MIT](../../LICENSE)
12
+ Frictionless map drawing across mapping libraries.
13
+
14
+ Terra Draw centralizes map drawing logic and provides a host of out-of-the-box drawing modes that work across different JavaScript mapping libraries. It also allows you to bring your own modes!
15
+
16
+ ### Supported Mapping Libraries
17
+
18
+ Terra Draw works with your mapping library of choice via adapters. Please pick the adapter for the mapping library you are working with:
19
+
20
+ * [terra-draw-maplibre-gl-js-adapter](https://www.npmjs.com/package/terra-draw-maplibre-gl-js-adapter)
21
+ * [terra-draw-leaflet-adapter](https://www.npmjs.com/package/terra-draw-leaflet-adapter)
22
+ * [terra-draw-google-maps-adapter](https://www.npmjs.com/package/terra-draw-googl-emaps-adapter)
23
+ * [terra-draw-mapbox-gl-js-adapter](https://www.npmjs.com/package/terra-draw-mapbox-gl-js-adapter)
24
+ * [terra-draw-google-maps-adapter](https://www.npmjs.com/package/terra-draw-google-maps-adapter)
25
+ * [terra-draw-arcgis-adapter](https://www.npmjs.com/package/terra-draw-arcgis-adapter)
26
+
27
+ ### Getting Started
28
+
29
+ * [Getting started guide](https://github.com/JamesLMilner/terra-draw/blob/main/guides/1.GETTING_STARTED.md)
30
+ * [API Docs](https://terradraw.io/#/api)
31
+ * [Repository](https://www.github.com/JamesLMilner/terra-draw)
32
+ * [Website](https://www.terradraw.io)
33
+
34
+ ### License
35
+
36
+ MIT
package/dist/common.d.ts CHANGED
@@ -114,6 +114,7 @@ export declare const SELECT_PROPERTIES: {
114
114
  readonly SELECTION_POINT: "selectionPoint";
115
115
  };
116
116
  export declare const COMMON_PROPERTIES: {
117
+ EDITED: string;
117
118
  CLOSING_POINT: string;
118
119
  SNAPPING_POINT: string;
119
120
  };
@@ -2,4 +2,5 @@ import { Position } from "geojson";
2
2
  export declare function nearestPointOnLine(inputCoordinate: Position, lines: [Position, Position][]): {
3
3
  coordinate: Position;
4
4
  distance: number;
5
+ lineIndex: number;
5
6
  } | undefined;
@@ -7,5 +7,6 @@ import { Position } from "geojson";
7
7
  */
8
8
  export declare function webMercatorNearestPointOnLine(inputCoordinate: Position, lines: [Position, Position][]): {
9
9
  coordinate: Position;
10
+ lineIndex: number;
10
11
  distance: number;
11
12
  } | undefined;
@@ -1,6 +1,6 @@
1
1
  import { BehaviorConfig, TerraDrawModeBehavior } from "./base.behavior";
2
2
  import { TerraDrawMouseEvent } from "../common";
3
- import { Position } from "geojson";
3
+ import { Feature, Position } from "geojson";
4
4
  import { ClickBoundingBoxBehavior } from "./click-bounding-box.behavior";
5
5
  import { FeatureId } from "../store/store";
6
6
  import { PixelDistanceBehavior } from "./pixel-distance.behavior";
@@ -12,5 +12,10 @@ export declare class CoordinateSnappingBehavior extends TerraDrawModeBehavior {
12
12
  /** Returns the nearest snappable coordinate - on first click there is no currentId so no need to provide */
13
13
  getSnappableCoordinateFirstClick: (event: TerraDrawMouseEvent) => Position | undefined;
14
14
  getSnappableCoordinate: (event: TerraDrawMouseEvent, currentFeatureId: FeatureId) => Position | undefined;
15
- private getSnappable;
15
+ getSnappable(event: TerraDrawMouseEvent, filter?: (feature: Feature) => boolean): {
16
+ coordinate: undefined | Position;
17
+ minDist: number;
18
+ featureId: undefined | FeatureId;
19
+ featureCoordinateIndex: undefined | number;
20
+ };
16
21
  }
@@ -1,6 +1,6 @@
1
1
  import { BehaviorConfig, TerraDrawModeBehavior } from "./base.behavior";
2
2
  import { TerraDrawMouseEvent } from "../common";
3
- import { Position } from "geojson";
3
+ import { Feature, Position } from "geojson";
4
4
  import { ClickBoundingBoxBehavior } from "./click-bounding-box.behavior";
5
5
  import { FeatureId } from "../store/store";
6
6
  import { PixelDistanceBehavior } from "./pixel-distance.behavior";
@@ -12,5 +12,10 @@ export declare class LineSnappingBehavior extends TerraDrawModeBehavior {
12
12
  /** Returns the nearest snappable coordinate - on first click there is no currentId so no need to provide */
13
13
  getSnappableCoordinateFirstClick: (event: TerraDrawMouseEvent) => Position | undefined;
14
14
  getSnappableCoordinate: (event: TerraDrawMouseEvent, currentFeatureId: FeatureId) => Position | undefined;
15
- private getSnappable;
15
+ getSnappable(event: TerraDrawMouseEvent, filter?: (feature: Feature) => boolean): {
16
+ coordinate: undefined | Position;
17
+ minDistance: number;
18
+ featureId: undefined | FeatureId;
19
+ featureCoordinateIndex: undefined | number;
20
+ };
16
21
  }
@@ -1,21 +1,33 @@
1
1
  import { TerraDrawMouseEvent, TerraDrawAdapterStyling, NumericStyling, HexColorStyling, Cursor } from "../../common";
2
2
  import { GeoJSONStoreFeatures, StoreValidation } from "../../store/store";
3
3
  import { BaseModeOptions, CustomStyling, TerraDrawBaseDrawMode } from "../base.mode";
4
+ import { BehaviorConfig } from "../base.behavior";
4
5
  type PointModeStyling = {
5
6
  pointWidth: NumericStyling;
6
7
  pointColor: HexColorStyling;
7
8
  pointOutlineColor: HexColorStyling;
8
9
  pointOutlineWidth: NumericStyling;
10
+ editedPointColor: HexColorStyling;
11
+ editedPointWidth: NumericStyling;
12
+ editedPointOutlineColor: HexColorStyling;
13
+ editedPointOutlineWidth: NumericStyling;
9
14
  };
10
15
  interface Cursors {
11
16
  create?: Cursor;
17
+ dragStart?: Cursor;
18
+ dragEnd?: Cursor;
12
19
  }
13
20
  interface TerraDrawPointModeOptions<T extends CustomStyling> extends BaseModeOptions<T> {
14
21
  cursors?: Cursors;
22
+ editable?: boolean;
15
23
  }
16
24
  export declare class TerraDrawPointMode extends TerraDrawBaseDrawMode<PointModeStyling> {
17
25
  mode: string;
18
26
  private cursors;
27
+ private editable;
28
+ private editedFeatureId;
29
+ private pixelDistance;
30
+ private clickBoundingBox;
19
31
  constructor(options?: TerraDrawPointModeOptions<PointModeStyling>);
20
32
  /** @internal */
21
33
  start(): void;
@@ -31,12 +43,12 @@ export declare class TerraDrawPointMode extends TerraDrawBaseDrawMode<PointModeS
31
43
  onKeyUp(): void;
32
44
  /** @internal */
33
45
  cleanUp(): void;
46
+ onDragStart(event: TerraDrawMouseEvent, setMapDraggability: (enabled: boolean) => void): void;
34
47
  /** @internal */
35
- onDragStart(): void;
48
+ onDrag(event: TerraDrawMouseEvent, setMapDraggability: (enabled: boolean) => void): void;
36
49
  /** @internal */
37
- onDrag(): void;
38
- /** @internal */
39
- onDragEnd(): void;
50
+ onDragEnd(_: TerraDrawMouseEvent, setMapDraggability: (enabled: boolean) => void): void;
51
+ registerBehaviors(config: BehaviorConfig): void;
40
52
  /** @internal */
41
53
  styleFeature(feature: GeoJSONStoreFeatures): TerraDrawAdapterStyling;
42
54
  validateFeature(feature: unknown): StoreValidation;
@@ -20,10 +20,16 @@ type PolygonStyling = {
20
20
  snappingPointColor: HexColorStyling;
21
21
  snappingPointOutlineWidth: NumericStyling;
22
22
  snappingPointOutlineColor: HexColorStyling;
23
+ editedPointWidth: NumericStyling;
24
+ editedPointColor: HexColorStyling;
25
+ editedPointOutlineWidth: NumericStyling;
26
+ editedPointOutlineColor: HexColorStyling;
23
27
  };
24
28
  interface Cursors {
25
29
  start?: Cursor;
26
30
  close?: Cursor;
31
+ dragStart?: Cursor;
32
+ dragEnd?: Cursor;
27
33
  }
28
34
  interface Snapping {
29
35
  toLine?: boolean;
@@ -35,6 +41,7 @@ interface TerraDrawPolygonModeOptions<T extends CustomStyling> extends BaseModeO
35
41
  pointerDistance?: number;
36
42
  keyEvents?: TerraDrawPolygonModeKeyEvents | null;
37
43
  cursors?: Cursors;
44
+ editable?: boolean;
38
45
  }
39
46
  export declare class TerraDrawPolygonMode extends TerraDrawBaseDrawMode<PolygonStyling> {
40
47
  mode: string;
@@ -42,11 +49,18 @@ export declare class TerraDrawPolygonMode extends TerraDrawBaseDrawMode<PolygonS
42
49
  private currentId;
43
50
  private keyEvents;
44
51
  private snapping;
52
+ private editable;
45
53
  private snappedPointId;
54
+ private editedFeatureId;
55
+ private editedFeatureCoordinateIndex;
56
+ private editedSnapType;
57
+ private editedInsertIndex;
58
+ private editedPointId;
46
59
  private lineSnapping;
47
60
  private coordinateSnapping;
48
61
  private pixelDistance;
49
62
  private closingPoints;
63
+ private clickBoundingBox;
50
64
  private cursors;
51
65
  private mouseMove;
52
66
  constructor(options?: TerraDrawPolygonModeOptions<PolygonStyling>);
@@ -67,12 +81,11 @@ export declare class TerraDrawPolygonMode extends TerraDrawBaseDrawMode<PolygonS
67
81
  onKeyUp(event: TerraDrawKeyboardEvent): void;
68
82
  /** @internal */
69
83
  onKeyDown(): void;
84
+ onDragStart(event: TerraDrawMouseEvent, setMapDraggability: (enabled: boolean) => void): void;
70
85
  /** @internal */
71
- onDragStart(): void;
86
+ onDrag(event: TerraDrawMouseEvent, setMapDraggability: (enabled: boolean) => void): void;
72
87
  /** @internal */
73
- onDrag(): void;
74
- /** @internal */
75
- onDragEnd(): void;
88
+ onDragEnd(_: TerraDrawMouseEvent, setMapDraggability: (enabled: boolean) => void): void;
76
89
  /** @internal */
77
90
  cleanUp(): void;
78
91
  /** @internal */