terra-draw
Advanced tools
Comparing version 0.0.1-alpha.68 to 0.0.1-alpha.69
@@ -1,2 +0,1 @@ | ||
/// <reference types="google.maps" /> | ||
import { TerraDrawChanges, SetCursor, TerraDrawStylingFunction, TerraDrawCallbacks } from "../common"; | ||
@@ -3,0 +2,0 @@ import { BaseAdapterConfig, TerraDrawBaseAdapter } from "./common/base.adapter"; |
@@ -48,2 +48,3 @@ import { StoreChangeHandler, GeoJSONStore, GeoJSONStoreFeatures, FeatureId } from "./store/store"; | ||
} | null; | ||
export type Projection = "web-mercator" | "globe"; | ||
export type OnFinishContext = { | ||
@@ -50,0 +51,0 @@ mode: string; |
@@ -10,2 +10,2 @@ import { Feature, Polygon } from "geojson"; | ||
pointerDistance: number; | ||
}): Feature<Polygon, import("geojson").GeoJsonProperties>; | ||
}): Feature<Polygon>; |
@@ -8,1 +8,7 @@ import { Feature, Polygon, Position } from "geojson"; | ||
}): Feature<Polygon>; | ||
export declare function circleWebMercator(options: { | ||
center: Position; | ||
radiusKilometers: number; | ||
coordinatePrecision: number; | ||
steps?: number; | ||
}): GeoJSON.Feature<GeoJSON.Polygon>; |
@@ -1,2 +0,2 @@ | ||
import { TerraDrawMouseEvent, TerraDrawAdapterStyling, TerraDrawKeyboardEvent, HexColorStyling, NumericStyling, Cursor } from "../../common"; | ||
import { TerraDrawMouseEvent, TerraDrawAdapterStyling, TerraDrawKeyboardEvent, HexColorStyling, NumericStyling, Cursor, Projection } from "../../common"; | ||
import { GeoJSONStoreFeatures } from "../../store/store"; | ||
@@ -21,5 +21,7 @@ import { BaseModeOptions, CustomStyling, TerraDrawBaseDrawMode } from "../base.mode"; | ||
startingRadiusKilometers?: number; | ||
projection?: Projection; | ||
} | ||
export declare class TerraDrawCircleMode extends TerraDrawBaseDrawMode<CirclePolygonStyling> { | ||
mode: string; | ||
private projection; | ||
private center; | ||
@@ -26,0 +28,0 @@ private clickCount; |
@@ -1,2 +0,2 @@ | ||
import { TerraDrawMouseEvent, TerraDrawAdapterStyling, TerraDrawKeyboardEvent, HexColorStyling, NumericStyling, Cursor } from "../../common"; | ||
import { TerraDrawMouseEvent, TerraDrawAdapterStyling, TerraDrawKeyboardEvent, HexColorStyling, NumericStyling, Cursor, Projection } from "../../common"; | ||
import { BaseModeOptions, CustomStyling, TerraDrawBaseDrawMode } from "../base.mode"; | ||
@@ -21,2 +21,6 @@ import { BehaviorConfig } from "../base.behavior"; | ||
} | ||
interface InertCoordinates { | ||
strategy: "amount"; | ||
value: number; | ||
} | ||
interface TerraDrawLineStringModeOptions<T extends CustomStyling> extends BaseModeOptions<T> { | ||
@@ -27,5 +31,8 @@ snapping?: boolean; | ||
cursors?: Cursors; | ||
insertCoordinates?: InertCoordinates; | ||
projection?: Projection; | ||
} | ||
export declare class TerraDrawLineStringMode extends TerraDrawBaseDrawMode<LineStringStyling> { | ||
mode: string; | ||
private projection; | ||
private currentCoordinate; | ||
@@ -38,6 +45,13 @@ private currentId; | ||
private mouseMove; | ||
private insertCoordinates; | ||
private lastCommitedCoordinates; | ||
private snapping; | ||
private insertPoint; | ||
constructor(options?: TerraDrawLineStringModeOptions<LineStringStyling>); | ||
private close; | ||
private updateGeometries; | ||
private generateInsertCoordinates; | ||
private createLine; | ||
private firstUpdateToLine; | ||
private updateToLine; | ||
/** @internal */ | ||
@@ -44,0 +58,0 @@ registerBehaviors(config: BehaviorConfig): void; |
@@ -19,12 +19,12 @@ import { TerraDrawAdapterStyling } from "../../common"; | ||
styleFeature(): { | ||
pointColor: `#${string}`; | ||
pointColor: import("../../common").HexColor; | ||
pointWidth: number; | ||
pointOutlineColor: `#${string}`; | ||
pointOutlineColor: import("../../common").HexColor; | ||
pointOutlineWidth: number; | ||
polygonFillColor: `#${string}`; | ||
polygonFillColor: import("../../common").HexColor; | ||
polygonFillOpacity: number; | ||
polygonOutlineColor: `#${string}`; | ||
polygonOutlineColor: import("../../common").HexColor; | ||
polygonOutlineWidth: number; | ||
lineStringWidth: number; | ||
lineStringColor: `#${string}`; | ||
lineStringColor: import("../../common").HexColor; | ||
zIndex: number; | ||
@@ -31,0 +31,0 @@ }; |
@@ -12,3 +12,2 @@ import { TerraDrawGoogleMapsAdapter } from "./adapters/google-maps.adapter"; | ||
import { TerraDrawFreehandMode } from "./modes/freehand/freehand.mode"; | ||
import { TerraDrawGreatCircleMode } from "./modes/greatcircle/great-circle.mode"; | ||
import { TerraDrawLineStringMode } from "./modes/linestring/linestring.mode"; | ||
@@ -224,2 +223,2 @@ import { TerraDrawPointMode } from "./modes/point/point.mode"; | ||
}; | ||
export { TerraDraw, TerraDrawSelectMode, TerraDrawPointMode, TerraDrawLineStringMode, TerraDrawGreatCircleMode, TerraDrawPolygonMode, TerraDrawCircleMode, TerraDrawFreehandMode, TerraDrawRenderMode, TerraDrawRectangleMode, TerraDrawGoogleMapsAdapter, TerraDrawMapboxGLAdapter, TerraDrawLeafletAdapter, TerraDrawMapLibreGLAdapter, TerraDrawOpenLayersAdapter, TerraDrawArcGISMapsSDKAdapter, TerraDrawExtend, BehaviorConfig, GeoJSONStoreFeatures, HexColor, TerraDrawMouseEvent, TerraDrawAdapterStyling, TerraDrawKeyboardEvent, TerraDrawChanges, TerraDrawStylingFunction, Project, Unproject, SetCursor, GetLngLatFromEvent, ValidateMinAreaSquareMeters, ValidateMaxAreaSquareMeters, ValidateNotSelfIntersecting, }; | ||
export { TerraDraw, TerraDrawSelectMode, TerraDrawPointMode, TerraDrawLineStringMode, TerraDrawPolygonMode, TerraDrawCircleMode, TerraDrawFreehandMode, TerraDrawRenderMode, TerraDrawRectangleMode, TerraDrawGoogleMapsAdapter, TerraDrawMapboxGLAdapter, TerraDrawLeafletAdapter, TerraDrawMapLibreGLAdapter, TerraDrawOpenLayersAdapter, TerraDrawArcGISMapsSDKAdapter, TerraDrawExtend, BehaviorConfig, GeoJSONStoreFeatures, HexColor, TerraDrawMouseEvent, TerraDrawAdapterStyling, TerraDrawKeyboardEvent, TerraDrawChanges, TerraDrawStylingFunction, Project, Unproject, SetCursor, GetLngLatFromEvent, ValidateMinAreaSquareMeters, ValidateMaxAreaSquareMeters, ValidateNotSelfIntersecting, }; |
import { GeoJSONStoreFeatures } from "../terra-draw"; | ||
export declare const ValidateMaxAreaSquareMeters: (feature: GeoJSONStoreFeatures, minSize: number) => boolean; | ||
export declare const ValidateMaxAreaSquareMeters: (feature: GeoJSONStoreFeatures, maxSize: number) => boolean; |
@@ -21,3 +21,3 @@ { | ||
"ts-loader": "9.5.1", | ||
"typescript": "5.4.4", | ||
"typescript": "5.5.2", | ||
"webpack": "5.73.0", | ||
@@ -24,0 +24,0 @@ "webpack-cli": "4.10.0", |
@@ -11,2 +11,3 @@ import { test, expect } from "@playwright/test"; | ||
setupMap, | ||
TestConfigOptions, | ||
} from "./setup"; | ||
@@ -81,51 +82,116 @@ | ||
test("mode can set and can be used to create a linestring", async ({ | ||
page, | ||
}) => { | ||
const mapDiv = await setupMap({ page }); | ||
await changeMode({ page, mode }); | ||
const options = [ | ||
{ name: "", config: undefined }, | ||
{ | ||
name: " with insert coordinates for web mercator projection", | ||
config: "insertCoordinates", | ||
}, | ||
{ | ||
name: " with insert coordinates for globe projection", | ||
config: "insertCoordinatesGlobe", | ||
}, | ||
] as { name: string; config: TestConfigOptions }[]; | ||
await page.mouse.move(mapDiv.width / 2, mapDiv.height / 2); | ||
await page.mouse.click(mapDiv.width / 2, mapDiv.height / 2); | ||
await page.mouse.move(mapDiv.width / 3, mapDiv.height / 3); | ||
await page.mouse.click(mapDiv.width / 3, mapDiv.height / 3); | ||
for (const { name, config } of options) { | ||
test(`mode can set and can be used to create a linestring${name}`, async ({ | ||
page, | ||
}) => { | ||
const mapDiv = await setupMap({ page, configQueryParam: config }); | ||
await changeMode({ page, mode }); | ||
await page.mouse.click(mapDiv.width / 3, mapDiv.height / 3); | ||
await page.mouse.move(mapDiv.width / 2, mapDiv.height / 2); | ||
await page.mouse.click(mapDiv.width / 2, mapDiv.height / 2); | ||
await page.mouse.move(mapDiv.width / 3, mapDiv.height / 3); | ||
await page.mouse.click(mapDiv.width / 3, mapDiv.height / 3); | ||
await expectPaths({ page, count: 1 }); | ||
}); | ||
// Close | ||
await page.mouse.click(mapDiv.width / 3, mapDiv.height / 3); | ||
test("mode can set and can be used to create multiple linestrings", async ({ | ||
page, | ||
}) => { | ||
const mapDiv = await setupMap({ page }); | ||
await changeMode({ page, mode }); | ||
await expectPaths({ page, count: 1 }); | ||
}); | ||
// First line | ||
await page.mouse.move(mapDiv.width / 2, mapDiv.height / 2); | ||
await page.mouse.click(mapDiv.width / 2, mapDiv.height / 2); | ||
await page.mouse.move(mapDiv.width / 3, mapDiv.height / 3); | ||
await page.mouse.click(mapDiv.width / 3, mapDiv.height / 3); | ||
test(`mode can set and can be used to create a linestring with multiple points${name}`, async ({ | ||
page, | ||
}) => { | ||
const mapDiv = await setupMap({ page, configQueryParam: config }); | ||
await changeMode({ page, mode }); | ||
// One point + one line | ||
await expectPaths({ page, count: 2 }); | ||
await page.mouse.move(mapDiv.width / 2, mapDiv.height / 2); | ||
await page.mouse.click(mapDiv.width / 2, mapDiv.height / 2); | ||
await page.mouse.move(mapDiv.width / 3, mapDiv.height / 3); | ||
await page.mouse.click(mapDiv.width / 3, mapDiv.height / 3); | ||
// Close first line | ||
await page.mouse.click(mapDiv.width / 3, mapDiv.height / 3); | ||
// Draw coordinate 2 | ||
await page.mouse.move(mapDiv.width / 3, mapDiv.height / 2); | ||
await page.mouse.click(mapDiv.width / 3, mapDiv.height / 2); | ||
// One line | ||
await expectPaths({ page, count: 1 }); | ||
// Draw coordinate 3 | ||
await page.mouse.move(mapDiv.width / 2, mapDiv.height / 3); | ||
await page.mouse.click(mapDiv.width / 2, mapDiv.height / 3); | ||
// Second line | ||
await page.mouse.move(mapDiv.width / 4, mapDiv.height / 4); | ||
await page.mouse.click(mapDiv.width / 4, mapDiv.height / 4); | ||
await page.mouse.move(mapDiv.width / 5, mapDiv.height / 5); | ||
await page.mouse.click(mapDiv.width / 5, mapDiv.height / 5); | ||
// Close | ||
await page.mouse.click(mapDiv.width / 2, mapDiv.height / 3); | ||
// Close second line | ||
await page.mouse.click(mapDiv.width / 5, mapDiv.height / 5); | ||
await expectPaths({ page, count: 1 }); | ||
}); | ||
// Two lines | ||
await expectPaths({ page, count: 2 }); | ||
}); | ||
test(`mode can set and can be used to create a linestring with multiple clicked points${name}`, async ({ | ||
page, | ||
}) => { | ||
const mapDiv = await setupMap({ page, configQueryParam: config }); | ||
await changeMode({ page, mode }); | ||
await page.mouse.move(mapDiv.width / 2, mapDiv.height / 2); | ||
await page.mouse.click(mapDiv.width / 2, mapDiv.height / 2); | ||
await page.mouse.move(mapDiv.width / 3, mapDiv.height / 3); | ||
await page.mouse.click(mapDiv.width / 3, mapDiv.height / 3); | ||
// Draw coordinate 2 | ||
await page.mouse.move(mapDiv.width / 3, mapDiv.height / 2); | ||
await page.mouse.click(mapDiv.width / 3, mapDiv.height / 2); | ||
// Draw coordinate 3 | ||
await page.mouse.move(mapDiv.width / 2, mapDiv.height / 3); | ||
await page.mouse.click(mapDiv.width / 2, mapDiv.height / 3); | ||
// Close | ||
await page.mouse.click(mapDiv.width / 2, mapDiv.height / 3); | ||
await expectPaths({ page, count: 1 }); | ||
}); | ||
test(`mode can set and can be used to create multiple linestrings${name}`, async ({ | ||
page, | ||
}) => { | ||
const mapDiv = await setupMap({ page, configQueryParam: config }); | ||
await changeMode({ page, mode }); | ||
// First line | ||
await page.mouse.move(mapDiv.width / 2, mapDiv.height / 2); | ||
await page.mouse.click(mapDiv.width / 2, mapDiv.height / 2); | ||
await page.mouse.move(mapDiv.width / 3, mapDiv.height / 3); | ||
await page.mouse.click(mapDiv.width / 3, mapDiv.height / 3); | ||
// One point + one line | ||
await expectPaths({ page, count: 2 }); | ||
// Close first line | ||
await page.mouse.click(mapDiv.width / 3, mapDiv.height / 3); | ||
// One line | ||
await expectPaths({ page, count: 1 }); | ||
// Second line | ||
await page.mouse.move(mapDiv.width / 4, mapDiv.height / 4); | ||
await page.mouse.click(mapDiv.width / 4, mapDiv.height / 4); | ||
await page.mouse.move(mapDiv.width / 5, mapDiv.height / 5); | ||
await page.mouse.click(mapDiv.width / 5, mapDiv.height / 5); | ||
// Close second line | ||
await page.mouse.click(mapDiv.width / 5, mapDiv.height / 5); | ||
// Two lines | ||
await expectPaths({ page, count: 2 }); | ||
}); | ||
} | ||
}); | ||
@@ -270,3 +336,5 @@ | ||
test("mode can set and can be used to create a circle", async ({ page }) => { | ||
test("mode can set and can be used to create a web mercator circle", async ({ | ||
page, | ||
}) => { | ||
const mapDiv = await setupMap({ page }); | ||
@@ -283,11 +351,7 @@ await changeMode({ page, mode }); | ||
}); | ||
}); | ||
test.describe("greatcircle mode", () => { | ||
const mode = "greatcircle"; | ||
test("mode can set and can be used to create a greatcircle", async ({ | ||
test("mode can set and can be used to create a geodesic circle", async ({ | ||
page, | ||
}) => { | ||
const mapDiv = await setupMap({ page }); | ||
const mapDiv = await setupMap({ page, configQueryParam: "geodesicCircle" }); | ||
await changeMode({ page, mode }); | ||
@@ -300,2 +364,4 @@ | ||
await expectPaths({ page, count: 1 }); | ||
await expectPathDimensions({ page, width: 146, height: 146 }); | ||
}); | ||
@@ -302,0 +368,0 @@ }); |
@@ -5,2 +5,9 @@ import { Page, expect } from "@playwright/test"; | ||
export type TestConfigOptions = | ||
| "validationSuccess" | ||
| "validationFailure" | ||
| "insertCoordinates" | ||
| "insertCoordinatesGlobe" | ||
| "geodesicCircle"; | ||
export const setupMap = async ({ | ||
@@ -11,3 +18,3 @@ page, | ||
page: Page; | ||
configQueryParam?: "validationSuccess" | "validationFailure"; | ||
configQueryParam?: TestConfigOptions; | ||
}): Promise<{ | ||
@@ -42,10 +49,3 @@ x: number; | ||
page: Page; | ||
mode: | ||
| "point" | ||
| "polygon" | ||
| "linestring" | ||
| "select" | ||
| "rectangle" | ||
| "circle" | ||
| "greatcircle"; | ||
mode: "point" | "polygon" | "linestring" | "select" | "rectangle" | "circle"; | ||
}) => { | ||
@@ -52,0 +52,0 @@ const modeText = mode.charAt(0).toUpperCase() + mode.slice(1); |
{ | ||
"name": "terra-draw", | ||
"version": "0.0.1-alpha.68", | ||
"version": "0.0.1-alpha.69", | ||
"description": "Frictionless map drawing across mapping provider", | ||
@@ -62,7 +62,7 @@ "scripts": { | ||
"@types/jest": "29.5.12", | ||
"@types/leaflet": "1.7.11", | ||
"@types/leaflet": "^1.9.12", | ||
"@types/mapbox-gl": "2.7.3", | ||
"@types/rbush": "3.0.0", | ||
"@typescript-eslint/eslint-plugin": "7.5.0", | ||
"@typescript-eslint/parser": "7.5.0", | ||
"@typescript-eslint/eslint-plugin": "7.14.1", | ||
"@typescript-eslint/parser": "7.14.1", | ||
"eslint": "8.57.0", | ||
@@ -74,3 +74,3 @@ "eslint-config-prettier": "9.0.0", | ||
"jest-environment-jsdom": "29.7.0", | ||
"leaflet": "1.8.0", | ||
"leaflet": "^1.9.4", | ||
"mapbox-gl": "2.13.0", | ||
@@ -85,4 +85,4 @@ "maplibre-gl": "3.2.0", | ||
"tsx": "4.7.2", | ||
"typedoc": "0.25.12", | ||
"typescript": "5.4.4" | ||
"typedoc": "^0.26.2", | ||
"typescript": "5.5.2" | ||
}, | ||
@@ -160,3 +160,4 @@ "commitlint": { | ||
] | ||
} | ||
}, | ||
"sideEffects": false | ||
} |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is not supported yet
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
100
4246226
9343