@eviav/maps-draw 0.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/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Eviav
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,118 @@
1
+ # @eviav/maps-draw
2
+
3
+ Dibujo y edición interactiva de **polígonos, líneas y puntos** sobre MapLibre GL JS
4
+ (o [`@eviav/maps`](https://www.npmjs.com/package/@eviav/maps), que extiende el mismo
5
+ `Map`) — como `mapbox-gl-draw`, sin dependencias externas de dibujo.
6
+
7
+ ```bash
8
+ npm install @eviav/maps-draw maplibre-gl
9
+ ```
10
+
11
+ `maplibre-gl` es un peer dependency. Funciona con cualquier `maplibregl.Map`, incluida
12
+ una instancia de `EviavMap` (`@eviav/maps`).
13
+
14
+ ## Quickstart — dibujar una geocerca
15
+
16
+ El uso típico: el usuario dibuja un polígono y lo mandás a
17
+ [`POST /v1/geofences`](https://eviav.com/docs#geofencing) del SDK
18
+ [`@eviav/api-client`](https://www.npmjs.com/package/@eviav/api-client) (o `fetch`
19
+ directo) — la geometría que entrega `EviavDraw` ya es GeoJSON `Polygon` válido.
20
+
21
+ ```ts
22
+ import { EviavMap } from "@eviav/maps";
23
+ import { EviavDraw } from "@eviav/maps-draw";
24
+
25
+ const map = new EviavMap({ container: "map", apiKey: "TU_API_KEY" });
26
+ const draw = new EviavDraw(map);
27
+
28
+ draw.changeMode("draw_polygon");
29
+
30
+ draw.on("create", async (feature) => {
31
+ // feature.geometry: { type: "Polygon", coordinates: [...] }
32
+ await fetch("https://api.eviav.com/v1/geofences", {
33
+ method: "POST",
34
+ headers: { "content-type": "application/json", "x-api-key": "TU_API_KEY" },
35
+ body: JSON.stringify({ name: "Zona de reparto", geometry: feature.geometry }),
36
+ });
37
+ });
38
+ ```
39
+
40
+ ## Interacción
41
+
42
+ **Modo `simple_select`** (el default, nada dibujándose):
43
+
44
+ - Clic en una figura → la selecciona (aparecen sus vértices y los puntos medios).
45
+ - Arrastra un vértice → lo mueve. Arrastra un punto medio → inserta un vértice ahí.
46
+ - Arrastra el cuerpo de la figura seleccionada → la traslada entera.
47
+ - `Supr` / `Backspace` con una figura seleccionada → la borra. `Esc` → deselecciona.
48
+
49
+ **Modos de dibujo** (`draw_polygon` / `draw_line` / `draw_point`):
50
+
51
+ - Clic para marcar cada punto. Doble clic o `Enter` → termina la figura.
52
+ - Polígono: clic de nuevo sobre el **primer punto** → cierra y termina (como Google Maps).
53
+ - `Supr` / `Backspace` → quita el último punto marcado. `Esc` → cancela el dibujo.
54
+ - `draw_point`: el siguiente clic coloca un punto y vuelve a `simple_select`.
55
+
56
+ ## API — `EviavDraw`
57
+
58
+ ```ts
59
+ const draw = new EviavDraw(map, {
60
+ mode: "simple_select", // modo inicial (default)
61
+ style: { // opcional — default es el naranja de marca Eviav
62
+ fillColor: "#E85410", fillOpacity: 0.22,
63
+ strokeColor: "#E85410", strokeWidth: 2.5,
64
+ vertexColor: "#E85410", vertexRadius: 5,
65
+ midpointColor: "#E85410", midpointRadius: 4,
66
+ },
67
+ });
68
+ ```
69
+
70
+ | Método | Descripción |
71
+ |---|---|
72
+ | `changeMode(mode)` | `"simple_select" \| "draw_polygon" \| "draw_line" \| "draw_point"`. Entrar a un modo `draw_*` limpia cualquier dibujo en curso previo. |
73
+ | `add(feature)` | Agrega una figura ya existente (p. ej. una geocerca guardada) para editarla. Devuelve el `id` asignado. |
74
+ | `get(id)` | Figura por id, o `undefined`. |
75
+ | `getAll()` | `FeatureCollection` con todas las figuras dibujadas/agregadas. |
76
+ | `getSelected()` | La figura seleccionada, o `null`. |
77
+ | `delete(id)` / `deleteAll()` | Borra una figura o todas. |
78
+ | `getMode()` | Modo actual. |
79
+ | `destroy()` | Quita capas, listeners y restaura el mapa (dragPan, doubleClickZoom, cursor). |
80
+
81
+ ### Eventos
82
+
83
+ ```ts
84
+ draw.on("create", (feature) => { ... }); // se terminó de dibujar una figura nueva
85
+ draw.on("update", (feature) => { ... }); // se arrastró un vértice / punto medio / el cuerpo
86
+ draw.on("delete", (id) => { ... }); // se borró una figura
87
+ draw.on("selectionchange", (feature | null) => { ... });
88
+ draw.on("modechange", (mode) => { ... });
89
+ ```
90
+
91
+ ### Estilo por figura
92
+
93
+ Cualquier `properties` que pases a `add()` se conserva; `fill`, `fillOpacity`, `stroke`
94
+ y `strokeWidth` sobreescriben el color por defecto para esa figura puntual:
95
+
96
+ ```ts
97
+ draw.add({
98
+ geometry: { type: "Polygon", coordinates: [[...]] },
99
+ properties: { fill: "#2E8F5E", stroke: "#2E8F5E" }, // geocerca verde, en vez de naranja
100
+ });
101
+ ```
102
+
103
+ ## Límites conocidos (v1)
104
+
105
+ - Polígonos sin huecos (un solo anillo exterior). Para geocercas con huecos, edítalas
106
+ fuera de `EviavDraw` y usá `add()` solo para mostrarlas (sin handles de edición).
107
+ - Un modo `draw_*` produce **una** figura por llamada — para dibujar varias seguidas,
108
+ volvé a llamar `changeMode("draw_polygon")` en el handler de `"create"`.
109
+
110
+ ## Recursos
111
+
112
+ - 📖 Documentación completa: <https://eviav.com/docs#impl-draw>
113
+ - 💬 Soporte: <support@eviav.com>
114
+ - 🐛 Issues: <https://github.com/eviav-platform/sdk-js/issues>
115
+
116
+ ## Licencia
117
+
118
+ MIT
@@ -0,0 +1,146 @@
1
+ /**
2
+ * @eviav/maps-draw — dibujo y edición interactiva de polígonos, líneas y puntos
3
+ * sobre MapLibre GL JS (o @eviav/maps, que extiende el mismo `Map`).
4
+ *
5
+ * Sin dependencias de dibujo externas (no usa mapbox-gl-draw): el motor es
6
+ * vanilla, sobre las mismas primitivas (sources/layers GeoJSON + eventos de
7
+ * capa) que ya usa el resto del ecosistema Eviav.
8
+ *
9
+ * Quickstart:
10
+ * ```ts
11
+ * import { EviavDraw } from "@eviav/maps-draw";
12
+ *
13
+ * const draw = new EviavDraw(map);
14
+ * draw.changeMode("draw_polygon");
15
+ * draw.on("create", (feature) => {
16
+ * // feature.geometry es un Polygon GeoJSON — listo para POST /v1/geofences
17
+ * });
18
+ * ```
19
+ *
20
+ * Interacción (modo `simple_select`, el default):
21
+ * · Clic en una figura → selecciona (aparecen sus vértices y los puntos medios).
22
+ * · Arrastra un vértice → lo mueve. Arrastra un punto medio → inserta un vértice ahí.
23
+ * · Arrastra el cuerpo de la figura seleccionada → la traslada entera.
24
+ * · Supr/Backspace con una figura seleccionada → la borra.
25
+ * · Esc → deselecciona (o cancela el dibujo en curso).
26
+ *
27
+ * Dibujo (`draw_polygon` / `draw_line`):
28
+ * · Clic para marcar cada punto. Doble clic o Enter → termina.
29
+ * · Polígono: clic de nuevo sobre el primer punto → cierra y termina.
30
+ * · Supr/Backspace → quita el último punto marcado.
31
+ */
32
+ import type maplibregl from "maplibre-gl";
33
+ /** Coordenada [lon, lat] (formato GeoJSON), igual que el resto del SDK Eviav. */
34
+ export type EviavDrawPosition = [number, number];
35
+ export type EviavDrawGeometry = {
36
+ type: "Point";
37
+ coordinates: EviavDrawPosition;
38
+ } | {
39
+ type: "LineString";
40
+ coordinates: EviavDrawPosition[];
41
+ } | {
42
+ type: "Polygon";
43
+ coordinates: EviavDrawPosition[][];
44
+ };
45
+ export type EviavDrawGeometryType = EviavDrawGeometry["type"];
46
+ /** Feature GeoJSON con `id` (string) siempre presente — estructuralmente compatible
47
+ * con `GeoJSON.Feature` real: se puede pasar tal cual a `fetch`/`JSON.stringify`. */
48
+ export interface EviavDrawFeature {
49
+ type: "Feature";
50
+ id: string;
51
+ properties: Record<string, unknown>;
52
+ geometry: EviavDrawGeometry;
53
+ }
54
+ export type EviavDrawMode = "simple_select" | "draw_polygon" | "draw_line" | "draw_point";
55
+ export interface EviavDrawStyle {
56
+ fillColor?: string;
57
+ fillOpacity?: number;
58
+ strokeColor?: string;
59
+ strokeWidth?: number;
60
+ vertexColor?: string;
61
+ vertexRadius?: number;
62
+ midpointColor?: string;
63
+ midpointRadius?: number;
64
+ }
65
+ export interface EviavDrawOptions {
66
+ /** Modo inicial. Default: `simple_select` (nada dibujándose, listo para seleccionar). */
67
+ mode?: EviavDrawMode;
68
+ /** Colores/tamaños por defecto de las figuras. Una figura individual puede
69
+ * sobreescribirlos con `properties.fill` / `.stroke` / `.strokeWidth` / `.fillOpacity`. */
70
+ style?: EviavDrawStyle;
71
+ }
72
+ type EviavDrawEventMap = {
73
+ create: EviavDrawFeature;
74
+ update: EviavDrawFeature;
75
+ delete: string;
76
+ selectionchange: EviavDrawFeature | null;
77
+ modechange: EviavDrawMode;
78
+ };
79
+ /**
80
+ * EviavDraw — motor de dibujo/edición sobre un `maplibregl.Map` (o `EviavMap`
81
+ * de `@eviav/maps`, que lo extiende). Una instancia por mapa.
82
+ */
83
+ export declare class EviavDraw {
84
+ private _map;
85
+ private _style;
86
+ private _mode;
87
+ private _features;
88
+ private _selectedId;
89
+ private _draft;
90
+ private _draftPreview;
91
+ private _dragVertex;
92
+ private _dragBody;
93
+ private _suppressClick;
94
+ private _destroyed;
95
+ private _listeners;
96
+ constructor(map: maplibregl.Map, options?: EviavDrawOptions);
97
+ private _setup;
98
+ /** Quita capas/sources/listeners y restaura el cursor y las interacciones del mapa. */
99
+ destroy(): void;
100
+ /** Modo actual. */
101
+ getMode(): EviavDrawMode;
102
+ /** Cambia de modo. Entrar a `draw_*` limpia cualquier dibujo en curso previo;
103
+ * salir de `simple_select` deselecciona la figura actual. */
104
+ changeMode(mode: EviavDrawMode): void;
105
+ /** Agrega una figura ya existente (p. ej. una geocerca guardada) para editarla.
106
+ * Devuelve el id asignado (o el que traiga `feature.id`). No la selecciona. */
107
+ add(feature: {
108
+ id?: string;
109
+ properties?: Record<string, unknown>;
110
+ geometry: EviavDrawGeometry;
111
+ }): string;
112
+ get(id: string): EviavDrawFeature | undefined;
113
+ getAll(): {
114
+ type: "FeatureCollection";
115
+ features: EviavDrawFeature[];
116
+ };
117
+ getSelected(): EviavDrawFeature | null;
118
+ delete(id: string): void;
119
+ deleteAll(): void;
120
+ on<K extends keyof EviavDrawEventMap>(event: K, handler: (arg: EviavDrawEventMap[K]) => void): void;
121
+ off<K extends keyof EviavDrawEventMap>(event: K, handler: (arg: EviavDrawEventMap[K]) => void): void;
122
+ private _emit;
123
+ private _syncModeSideEffects;
124
+ private _commit;
125
+ private _finishDraft;
126
+ private _bindEvents;
127
+ private _onStyleData;
128
+ private _setCursorPointer;
129
+ private _setCursorDefault;
130
+ private _onFillEnter;
131
+ private _onMouseMovePreview;
132
+ private _onClick;
133
+ private _onDblClick;
134
+ private _onKeyDown;
135
+ private _onVertexMouseDown;
136
+ private _onMidpointMouseDown;
137
+ private _startVertexDrag;
138
+ private _onVertexDragMove;
139
+ private _onVertexDragEnd;
140
+ private _onBodyMouseDown;
141
+ private _onBodyDragMove;
142
+ private _onBodyDragEnd;
143
+ private _render;
144
+ }
145
+ export {};
146
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js ADDED
@@ -0,0 +1,618 @@
1
+ /**
2
+ * @eviav/maps-draw — dibujo y edición interactiva de polígonos, líneas y puntos
3
+ * sobre MapLibre GL JS (o @eviav/maps, que extiende el mismo `Map`).
4
+ *
5
+ * Sin dependencias de dibujo externas (no usa mapbox-gl-draw): el motor es
6
+ * vanilla, sobre las mismas primitivas (sources/layers GeoJSON + eventos de
7
+ * capa) que ya usa el resto del ecosistema Eviav.
8
+ *
9
+ * Quickstart:
10
+ * ```ts
11
+ * import { EviavDraw } from "@eviav/maps-draw";
12
+ *
13
+ * const draw = new EviavDraw(map);
14
+ * draw.changeMode("draw_polygon");
15
+ * draw.on("create", (feature) => {
16
+ * // feature.geometry es un Polygon GeoJSON — listo para POST /v1/geofences
17
+ * });
18
+ * ```
19
+ *
20
+ * Interacción (modo `simple_select`, el default):
21
+ * · Clic en una figura → selecciona (aparecen sus vértices y los puntos medios).
22
+ * · Arrastra un vértice → lo mueve. Arrastra un punto medio → inserta un vértice ahí.
23
+ * · Arrastra el cuerpo de la figura seleccionada → la traslada entera.
24
+ * · Supr/Backspace con una figura seleccionada → la borra.
25
+ * · Esc → deselecciona (o cancela el dibujo en curso).
26
+ *
27
+ * Dibujo (`draw_polygon` / `draw_line`):
28
+ * · Clic para marcar cada punto. Doble clic o Enter → termina.
29
+ * · Polígono: clic de nuevo sobre el primer punto → cierra y termina.
30
+ * · Supr/Backspace → quita el último punto marcado.
31
+ */
32
+ const DEFAULT_STYLE = {
33
+ fillColor: "#E85410",
34
+ fillOpacity: 0.22,
35
+ strokeColor: "#E85410",
36
+ strokeWidth: 2.5,
37
+ vertexColor: "#E85410",
38
+ vertexRadius: 5,
39
+ midpointColor: "#E85410",
40
+ midpointRadius: 4,
41
+ };
42
+ const SRC_FILL = "eviav-draw-fill";
43
+ const SRC_OUTLINE = "eviav-draw-outline";
44
+ const LYR_OUTLINE_DRAFT = "eviav-draw-outline-draft"; // capa hermana del mismo source: line-dasharray
45
+ // no acepta expresiones basadas en datos (solo de zoom), así que el trazo punteado del
46
+ // dibujo en curso necesita su propia capa filtrada en vez de variar por `properties.draft`.
47
+ const SRC_MIDPOINT = "eviav-draw-midpoint";
48
+ const SRC_VERTEX = "eviav-draw-vertex";
49
+ let _seq = 0;
50
+ function nextId() {
51
+ if (typeof crypto !== "undefined" && "randomUUID" in crypto)
52
+ return crypto.randomUUID();
53
+ return `eviav-draw-${Date.now()}-${_seq++}`;
54
+ }
55
+ function rawFeature(geometry, properties) {
56
+ return { type: "Feature", properties, geometry };
57
+ }
58
+ function fc(features) {
59
+ return { type: "FeatureCollection", features };
60
+ }
61
+ function midpoint(a, b) {
62
+ return [(a[0] + b[0]) / 2, (a[1] + b[1]) / 2];
63
+ }
64
+ function cloneGeometry(g) {
65
+ return typeof structuredClone === "function" ? structuredClone(g) : JSON.parse(JSON.stringify(g));
66
+ }
67
+ function cloneFeature(f) {
68
+ return { ...f, properties: { ...f.properties }, geometry: cloneGeometry(f.geometry) };
69
+ }
70
+ function translateGeometry(g, dx, dy) {
71
+ if (g.type === "Point") {
72
+ g.coordinates = [g.coordinates[0] + dx, g.coordinates[1] + dy];
73
+ return;
74
+ }
75
+ if (g.type === "LineString") {
76
+ g.coordinates = g.coordinates.map((p) => [p[0] + dx, p[1] + dy]);
77
+ return;
78
+ }
79
+ g.coordinates = g.coordinates.map((ring) => ring.map((p) => [p[0] + dx, p[1] + dy]));
80
+ }
81
+ /**
82
+ * EviavDraw — motor de dibujo/edición sobre un `maplibregl.Map` (o `EviavMap`
83
+ * de `@eviav/maps`, que lo extiende). Una instancia por mapa.
84
+ */
85
+ export class EviavDraw {
86
+ _map;
87
+ _style;
88
+ _mode;
89
+ _features = new Map();
90
+ _selectedId = null;
91
+ _draft = [];
92
+ _draftPreview = null;
93
+ _dragVertex = null;
94
+ _dragBody = null;
95
+ _suppressClick = false;
96
+ _destroyed = false;
97
+ _listeners = new Map();
98
+ constructor(map, options = {}) {
99
+ this._map = map;
100
+ this._mode = options.mode ?? "simple_select";
101
+ this._style = { ...DEFAULT_STYLE, ...options.style };
102
+ this._bindEvents();
103
+ this._syncModeSideEffects();
104
+ if (map.isStyleLoaded())
105
+ this._setup();
106
+ else
107
+ map.once("load", () => { if (!this._destroyed)
108
+ this._setup(); });
109
+ }
110
+ // ── Ciclo de vida ───────────────────────────────────────────────────────
111
+ _setup() {
112
+ const m = this._map;
113
+ if (m.getSource(SRC_FILL))
114
+ return; // ya montado (sobrevive a setStyle re-montando)
115
+ m.addSource(SRC_FILL, { type: "geojson", data: fc([]) });
116
+ m.addSource(SRC_OUTLINE, { type: "geojson", data: fc([]) });
117
+ m.addSource(SRC_MIDPOINT, { type: "geojson", data: fc([]) });
118
+ m.addSource(SRC_VERTEX, { type: "geojson", data: fc([]) });
119
+ m.addLayer({
120
+ id: SRC_FILL, type: "fill", source: SRC_FILL,
121
+ paint: {
122
+ "fill-color": ["coalesce", ["get", "fill"], this._style.fillColor],
123
+ "fill-opacity": ["coalesce", ["get", "fillOpacity"], this._style.fillOpacity],
124
+ },
125
+ });
126
+ m.addLayer({
127
+ id: SRC_OUTLINE, type: "line", source: SRC_OUTLINE,
128
+ filter: ["!=", ["get", "draft"], true],
129
+ layout: { "line-cap": "round", "line-join": "round" },
130
+ paint: {
131
+ "line-color": ["coalesce", ["get", "stroke"], this._style.strokeColor],
132
+ "line-width": ["coalesce", ["get", "strokeWidth"], this._style.strokeWidth],
133
+ },
134
+ });
135
+ m.addLayer({
136
+ id: LYR_OUTLINE_DRAFT, type: "line", source: SRC_OUTLINE,
137
+ filter: ["==", ["get", "draft"], true],
138
+ layout: { "line-cap": "round", "line-join": "round" },
139
+ paint: {
140
+ "line-color": this._style.strokeColor,
141
+ "line-width": this._style.strokeWidth,
142
+ "line-dasharray": ["literal", [2, 1.6]],
143
+ },
144
+ });
145
+ m.addLayer({
146
+ id: SRC_MIDPOINT, type: "circle", source: SRC_MIDPOINT,
147
+ paint: {
148
+ "circle-radius": this._style.midpointRadius,
149
+ "circle-color": this._style.midpointColor,
150
+ "circle-opacity": 0.55,
151
+ "circle-stroke-color": "#fff",
152
+ "circle-stroke-width": 1.5,
153
+ },
154
+ });
155
+ m.addLayer({
156
+ id: SRC_VERTEX, type: "circle", source: SRC_VERTEX,
157
+ paint: {
158
+ "circle-radius": ["case", ["==", ["get", "isFirst"], true], this._style.vertexRadius + 2, this._style.vertexRadius],
159
+ "circle-color": ["coalesce", ["get", "color"], this._style.vertexColor],
160
+ "circle-stroke-color": "#fff",
161
+ "circle-stroke-width": 2,
162
+ },
163
+ });
164
+ this._render();
165
+ }
166
+ /** Quita capas/sources/listeners y restaura el cursor y las interacciones del mapa. */
167
+ destroy() {
168
+ if (this._destroyed)
169
+ return;
170
+ this._destroyed = true;
171
+ const m = this._map;
172
+ m.off("click", this._onClick);
173
+ m.off("dblclick", this._onDblClick);
174
+ m.off("mousedown", SRC_VERTEX, this._onVertexMouseDown);
175
+ m.off("mousedown", SRC_MIDPOINT, this._onMidpointMouseDown);
176
+ m.off("mousedown", SRC_FILL, this._onBodyMouseDown);
177
+ m.off("mouseenter", SRC_VERTEX, this._setCursorPointer);
178
+ m.off("mouseleave", SRC_VERTEX, this._setCursorDefault);
179
+ m.off("mouseenter", SRC_MIDPOINT, this._setCursorPointer);
180
+ m.off("mouseleave", SRC_MIDPOINT, this._setCursorDefault);
181
+ m.off("mouseenter", SRC_FILL, this._onFillEnter);
182
+ m.off("mouseleave", SRC_FILL, this._setCursorDefault);
183
+ m.off("mousemove", this._onMouseMovePreview);
184
+ m.off("mousemove", this._onVertexDragMove);
185
+ m.off("mousemove", this._onBodyDragMove);
186
+ m.off("styledata", this._onStyleData);
187
+ window.removeEventListener("keydown", this._onKeyDown);
188
+ if (m.getLayer(LYR_OUTLINE_DRAFT))
189
+ m.removeLayer(LYR_OUTLINE_DRAFT);
190
+ for (const id of [SRC_FILL, SRC_OUTLINE, SRC_MIDPOINT, SRC_VERTEX]) {
191
+ if (m.getLayer(id))
192
+ m.removeLayer(id);
193
+ if (m.getSource(id))
194
+ m.removeSource(id);
195
+ }
196
+ m.doubleClickZoom.enable();
197
+ m.dragPan.enable();
198
+ m.getCanvas().style.cursor = "";
199
+ this._listeners.clear();
200
+ }
201
+ // ── API pública de datos ─────────────────────────────────────────────────
202
+ /** Modo actual. */
203
+ getMode() {
204
+ return this._mode;
205
+ }
206
+ /** Cambia de modo. Entrar a `draw_*` limpia cualquier dibujo en curso previo;
207
+ * salir de `simple_select` deselecciona la figura actual. */
208
+ changeMode(mode) {
209
+ if (mode === this._mode)
210
+ return;
211
+ this._draft = [];
212
+ this._draftPreview = null;
213
+ if (mode !== "simple_select")
214
+ this._selectedId = null;
215
+ this._mode = mode;
216
+ this._syncModeSideEffects();
217
+ this._render();
218
+ this._emit("modechange", mode);
219
+ }
220
+ /** Agrega una figura ya existente (p. ej. una geocerca guardada) para editarla.
221
+ * Devuelve el id asignado (o el que traiga `feature.id`). No la selecciona. */
222
+ add(feature) {
223
+ const id = feature.id ? String(feature.id) : nextId();
224
+ const geometry = cloneGeometry(feature.geometry);
225
+ if (geometry.type === "Polygon") {
226
+ for (const ring of geometry.coordinates) {
227
+ const first = ring[0];
228
+ const last = ring[ring.length - 1];
229
+ if (first[0] !== last[0] || first[1] !== last[1])
230
+ ring.push([first[0], first[1]]);
231
+ }
232
+ }
233
+ const stored = { type: "Feature", id, properties: { ...(feature.properties ?? {}), id }, geometry };
234
+ this._features.set(id, stored);
235
+ this._render();
236
+ return id;
237
+ }
238
+ get(id) {
239
+ const f = this._features.get(id);
240
+ return f ? cloneFeature(f) : undefined;
241
+ }
242
+ getAll() {
243
+ return { type: "FeatureCollection", features: Array.from(this._features.values()).map(cloneFeature) };
244
+ }
245
+ getSelected() {
246
+ return this._selectedId ? (this.get(this._selectedId) ?? null) : null;
247
+ }
248
+ delete(id) {
249
+ if (!this._features.has(id))
250
+ return;
251
+ this._features.delete(id);
252
+ if (this._selectedId === id)
253
+ this._selectedId = null;
254
+ this._render();
255
+ this._emit("delete", id);
256
+ }
257
+ deleteAll() {
258
+ const ids = Array.from(this._features.keys());
259
+ this._features.clear();
260
+ this._selectedId = null;
261
+ this._render();
262
+ for (const id of ids)
263
+ this._emit("delete", id);
264
+ }
265
+ on(event, handler) {
266
+ if (!this._listeners.has(event))
267
+ this._listeners.set(event, new Set());
268
+ this._listeners.get(event).add(handler);
269
+ }
270
+ off(event, handler) {
271
+ this._listeners.get(event)?.delete(handler);
272
+ }
273
+ _emit(event, arg) {
274
+ for (const h of this._listeners.get(event) ?? [])
275
+ h(arg);
276
+ }
277
+ // ── Modo: efectos secundarios (cursor, doble-clic-zoom, preview) ────────
278
+ _syncModeSideEffects() {
279
+ const m = this._map;
280
+ const drawing = this._mode === "draw_polygon" || this._mode === "draw_line" || this._mode === "draw_point";
281
+ m.getCanvas().style.cursor = drawing ? "crosshair" : "";
282
+ if (drawing)
283
+ m.doubleClickZoom.disable();
284
+ else
285
+ m.doubleClickZoom.enable();
286
+ m.off("mousemove", this._onMouseMovePreview);
287
+ if (this._mode === "draw_polygon" || this._mode === "draw_line")
288
+ m.on("mousemove", this._onMouseMovePreview);
289
+ }
290
+ _commit(geometry) {
291
+ const id = nextId();
292
+ const feature = { type: "Feature", id, properties: { id }, geometry };
293
+ this._features.set(id, feature);
294
+ return feature;
295
+ }
296
+ _finishDraft() {
297
+ if (this._mode === "draw_polygon" && this._draft.length >= 3) {
298
+ const ring = [...this._draft, this._draft[0]];
299
+ const f = this._commit({ type: "Polygon", coordinates: [ring] });
300
+ this._selectedId = f.id;
301
+ this.changeMode("simple_select");
302
+ this._emit("create", cloneFeature(f));
303
+ }
304
+ else if (this._mode === "draw_line" && this._draft.length >= 2) {
305
+ const f = this._commit({ type: "LineString", coordinates: [...this._draft] });
306
+ this._selectedId = f.id;
307
+ this.changeMode("simple_select");
308
+ this._emit("create", cloneFeature(f));
309
+ }
310
+ }
311
+ // ── Eventos del mapa ──────────────────────────────────────────────────────
312
+ _bindEvents() {
313
+ const m = this._map;
314
+ m.on("click", this._onClick);
315
+ m.on("dblclick", this._onDblClick);
316
+ m.on("mousedown", SRC_VERTEX, this._onVertexMouseDown);
317
+ m.on("mousedown", SRC_MIDPOINT, this._onMidpointMouseDown);
318
+ m.on("mousedown", SRC_FILL, this._onBodyMouseDown);
319
+ m.on("mouseenter", SRC_VERTEX, this._setCursorPointer);
320
+ m.on("mouseleave", SRC_VERTEX, this._setCursorDefault);
321
+ m.on("mouseenter", SRC_MIDPOINT, this._setCursorPointer);
322
+ m.on("mouseleave", SRC_MIDPOINT, this._setCursorDefault);
323
+ m.on("mouseenter", SRC_FILL, this._onFillEnter);
324
+ m.on("mouseleave", SRC_FILL, this._setCursorDefault);
325
+ m.on("styledata", this._onStyleData);
326
+ window.addEventListener("keydown", this._onKeyDown);
327
+ }
328
+ _onStyleData = () => {
329
+ if (!this._destroyed && !this._map.getSource(SRC_FILL))
330
+ this._setup();
331
+ };
332
+ _setCursorPointer = () => {
333
+ if (this._mode === "simple_select")
334
+ this._map.getCanvas().style.cursor = "pointer";
335
+ };
336
+ _setCursorDefault = () => {
337
+ if (this._mode === "simple_select")
338
+ this._map.getCanvas().style.cursor = "";
339
+ };
340
+ _onFillEnter = (e) => {
341
+ if (this._mode !== "simple_select")
342
+ return;
343
+ const f = e.features?.[0];
344
+ const isSelected = !!f && String(f.properties?.id) === this._selectedId;
345
+ this._map.getCanvas().style.cursor = isSelected ? "move" : "pointer";
346
+ };
347
+ _onMouseMovePreview = (e) => {
348
+ this._draftPreview = [e.lngLat.lng, e.lngLat.lat];
349
+ this._render();
350
+ };
351
+ _onClick = (e) => {
352
+ if (this._suppressClick) {
353
+ this._suppressClick = false;
354
+ return;
355
+ }
356
+ const lngLat = [e.lngLat.lng, e.lngLat.lat];
357
+ if (this._mode === "draw_point") {
358
+ const f = this._commit({ type: "Point", coordinates: lngLat });
359
+ this._selectedId = f.id;
360
+ this.changeMode("simple_select");
361
+ this._emit("create", cloneFeature(f));
362
+ return;
363
+ }
364
+ if (this._mode === "draw_polygon" || this._mode === "draw_line") {
365
+ if (this._mode === "draw_polygon" && this._draft.length >= 3) {
366
+ const hit = this._map
367
+ .queryRenderedFeatures(e.point, { layers: [SRC_VERTEX] })
368
+ .find((rf) => rf.properties?.draft === true && rf.properties?.isFirst === true);
369
+ if (hit) {
370
+ this._finishDraft();
371
+ return;
372
+ }
373
+ }
374
+ this._draft.push(lngLat);
375
+ this._render();
376
+ return;
377
+ }
378
+ // simple_select: clic en vacío deselecciona; clic en una figura la selecciona.
379
+ const hits = this._map.queryRenderedFeatures(e.point, { layers: [SRC_VERTEX, SRC_OUTLINE, SRC_FILL] });
380
+ if (hits.length === 0) {
381
+ if (this._selectedId !== null) {
382
+ this._selectedId = null;
383
+ this._render();
384
+ this._emit("selectionchange", null);
385
+ }
386
+ return;
387
+ }
388
+ const id = String(hits[0].properties?.id ?? hits[0].properties?.featureId ?? "");
389
+ if (id && id !== this._selectedId) {
390
+ this._selectedId = id;
391
+ this._render();
392
+ this._emit("selectionchange", this.get(id) ?? null);
393
+ }
394
+ };
395
+ _onDblClick = (e) => {
396
+ if (this._mode === "draw_line" && this._draft.length >= 2) {
397
+ e.preventDefault();
398
+ this._finishDraft();
399
+ }
400
+ else if (this._mode === "draw_polygon" && this._draft.length >= 3) {
401
+ e.preventDefault();
402
+ this._finishDraft();
403
+ }
404
+ };
405
+ _onKeyDown = (ev) => {
406
+ if (this._destroyed)
407
+ return;
408
+ const tag = ev.target?.tagName;
409
+ if (tag === "INPUT" || tag === "TEXTAREA")
410
+ return;
411
+ if (ev.key === "Escape") {
412
+ if (this._mode === "draw_polygon" || this._mode === "draw_line")
413
+ this.changeMode("simple_select");
414
+ else if (this._selectedId) {
415
+ this._selectedId = null;
416
+ this._render();
417
+ this._emit("selectionchange", null);
418
+ }
419
+ return;
420
+ }
421
+ if (ev.key === "Enter") {
422
+ this._finishDraft();
423
+ return;
424
+ }
425
+ if (ev.key === "Delete" || ev.key === "Backspace") {
426
+ if (this._mode === "simple_select" && this._selectedId) {
427
+ ev.preventDefault();
428
+ this.delete(this._selectedId);
429
+ }
430
+ else if ((this._mode === "draw_polygon" || this._mode === "draw_line") && this._draft.length > 0) {
431
+ this._draft.pop();
432
+ this._render();
433
+ }
434
+ }
435
+ };
436
+ // ── Arrastre de vértices / puntos medios / cuerpo completo ───────────────
437
+ _onVertexMouseDown = (e) => {
438
+ if (this._mode !== "simple_select")
439
+ return;
440
+ const f = e.features?.[0];
441
+ if (!f)
442
+ return;
443
+ const featureId = String(f.properties?.featureId ?? "");
444
+ if (!featureId || featureId !== this._selectedId)
445
+ return;
446
+ e.preventDefault();
447
+ this._startVertexDrag(featureId, Number(f.properties?.index ?? 0));
448
+ };
449
+ _onMidpointMouseDown = (e) => {
450
+ if (this._mode !== "simple_select")
451
+ return;
452
+ const f = e.features?.[0];
453
+ if (!f)
454
+ return;
455
+ const featureId = String(f.properties?.featureId ?? "");
456
+ if (!featureId || featureId !== this._selectedId)
457
+ return;
458
+ const edgeIndex = Number(f.properties?.edgeIndex ?? 0);
459
+ const feature = this._features.get(featureId);
460
+ if (!feature)
461
+ return;
462
+ const pos = [e.lngLat.lng, e.lngLat.lat];
463
+ if (feature.geometry.type === "LineString") {
464
+ feature.geometry.coordinates.splice(edgeIndex + 1, 0, pos);
465
+ }
466
+ else if (feature.geometry.type === "Polygon") {
467
+ feature.geometry.coordinates[0].splice(edgeIndex + 1, 0, pos);
468
+ }
469
+ else {
470
+ return;
471
+ }
472
+ e.preventDefault();
473
+ this._render();
474
+ this._startVertexDrag(featureId, edgeIndex + 1);
475
+ };
476
+ _startVertexDrag(featureId, index) {
477
+ this._map.dragPan.disable();
478
+ this._dragVertex = { featureId, index };
479
+ this._map.getCanvas().style.cursor = "grabbing";
480
+ this._map.on("mousemove", this._onVertexDragMove);
481
+ this._map.once("mouseup", this._onVertexDragEnd);
482
+ }
483
+ _onVertexDragMove = (e) => {
484
+ if (!this._dragVertex)
485
+ return;
486
+ const { featureId, index } = this._dragVertex;
487
+ const f = this._features.get(featureId);
488
+ if (!f)
489
+ return;
490
+ const pos = [e.lngLat.lng, e.lngLat.lat];
491
+ if (f.geometry.type === "Point") {
492
+ f.geometry.coordinates = pos;
493
+ }
494
+ else if (f.geometry.type === "LineString") {
495
+ f.geometry.coordinates[index] = pos;
496
+ }
497
+ else if (f.geometry.type === "Polygon") {
498
+ const ring = f.geometry.coordinates[0];
499
+ ring[index] = pos;
500
+ if (index === 0)
501
+ ring[ring.length - 1] = pos;
502
+ }
503
+ this._render();
504
+ };
505
+ _onVertexDragEnd = () => {
506
+ if (!this._dragVertex)
507
+ return;
508
+ const { featureId } = this._dragVertex;
509
+ this._dragVertex = null;
510
+ this._map.off("mousemove", this._onVertexDragMove);
511
+ this._map.dragPan.enable();
512
+ this._map.getCanvas().style.cursor = "pointer";
513
+ this._suppressClick = true;
514
+ const f = this._features.get(featureId);
515
+ if (f)
516
+ this._emit("update", cloneFeature(f));
517
+ };
518
+ _onBodyMouseDown = (e) => {
519
+ if (this._mode !== "simple_select")
520
+ return;
521
+ const f = e.features?.[0];
522
+ if (!f)
523
+ return;
524
+ const featureId = String(f.properties?.id ?? "");
525
+ if (!featureId || featureId !== this._selectedId)
526
+ return;
527
+ this._map.dragPan.disable();
528
+ this._dragBody = { featureId, last: [e.lngLat.lng, e.lngLat.lat] };
529
+ this._map.getCanvas().style.cursor = "grabbing";
530
+ this._map.on("mousemove", this._onBodyDragMove);
531
+ this._map.once("mouseup", this._onBodyDragEnd);
532
+ };
533
+ _onBodyDragMove = (e) => {
534
+ if (!this._dragBody)
535
+ return;
536
+ const f = this._features.get(this._dragBody.featureId);
537
+ if (!f)
538
+ return;
539
+ const cur = [e.lngLat.lng, e.lngLat.lat];
540
+ translateGeometry(f.geometry, cur[0] - this._dragBody.last[0], cur[1] - this._dragBody.last[1]);
541
+ this._dragBody.last = cur;
542
+ this._render();
543
+ };
544
+ _onBodyDragEnd = () => {
545
+ if (!this._dragBody)
546
+ return;
547
+ const { featureId } = this._dragBody;
548
+ this._dragBody = null;
549
+ this._map.off("mousemove", this._onBodyDragMove);
550
+ this._map.dragPan.enable();
551
+ this._map.getCanvas().style.cursor = "move";
552
+ this._suppressClick = true;
553
+ const f = this._features.get(featureId);
554
+ if (f)
555
+ this._emit("update", cloneFeature(f));
556
+ };
557
+ // ── Render: recalcula las 4 fuentes GeoJSON desde el estado actual ───────
558
+ _render() {
559
+ const m = this._map;
560
+ if (!m.getSource(SRC_FILL))
561
+ return;
562
+ const fillFeats = [];
563
+ const outlineFeats = [];
564
+ const vertexFeats = [];
565
+ const midpointFeats = [];
566
+ for (const f of this._features.values()) {
567
+ const p = f.properties;
568
+ if (f.geometry.type === "Polygon") {
569
+ fillFeats.push(rawFeature(f.geometry, { id: f.id, fill: p.fill, fillOpacity: p.fillOpacity }));
570
+ outlineFeats.push(rawFeature({ type: "LineString", coordinates: f.geometry.coordinates[0] }, { id: f.id, stroke: p.stroke, strokeWidth: p.strokeWidth }));
571
+ }
572
+ else if (f.geometry.type === "LineString") {
573
+ outlineFeats.push(rawFeature(f.geometry, { id: f.id, stroke: p.stroke, strokeWidth: p.strokeWidth }));
574
+ }
575
+ else {
576
+ vertexFeats.push(rawFeature(f.geometry, { featureId: f.id, index: 0, isFirst: false, draft: false, color: p.fill ?? p.stroke }));
577
+ }
578
+ if (f.id === this._selectedId && this._mode === "simple_select") {
579
+ if (f.geometry.type === "Polygon") {
580
+ const ring = f.geometry.coordinates[0];
581
+ const n = ring.length - 1; // vértices reales (sin el punto de cierre duplicado)
582
+ for (let i = 0; i < n; i++) {
583
+ vertexFeats.push(rawFeature({ type: "Point", coordinates: ring[i] }, { featureId: f.id, index: i, isFirst: false, draft: false }));
584
+ }
585
+ for (let i = 0; i < n; i++) {
586
+ midpointFeats.push(rawFeature({ type: "Point", coordinates: midpoint(ring[i], ring[(i + 1) % n]) }, { featureId: f.id, edgeIndex: i }));
587
+ }
588
+ }
589
+ else if (f.geometry.type === "LineString") {
590
+ const line = f.geometry.coordinates;
591
+ for (let i = 0; i < line.length; i++) {
592
+ vertexFeats.push(rawFeature({ type: "Point", coordinates: line[i] }, { featureId: f.id, index: i, isFirst: false, draft: false }));
593
+ }
594
+ for (let i = 0; i < line.length - 1; i++) {
595
+ midpointFeats.push(rawFeature({ type: "Point", coordinates: midpoint(line[i], line[i + 1]) }, { featureId: f.id, edgeIndex: i }));
596
+ }
597
+ }
598
+ }
599
+ }
600
+ if (this._draft.length > 0) {
601
+ const pts = this._draftPreview ? [...this._draft, this._draftPreview] : this._draft;
602
+ if (this._mode === "draw_polygon" && pts.length >= 3) {
603
+ fillFeats.push(rawFeature({ type: "Polygon", coordinates: [[...pts, pts[0]]] }, { draft: true }));
604
+ }
605
+ if (pts.length >= 2) {
606
+ outlineFeats.push(rawFeature({ type: "LineString", coordinates: pts }, { draft: true }));
607
+ }
608
+ this._draft.forEach((p, i) => {
609
+ vertexFeats.push(rawFeature({ type: "Point", coordinates: p }, { draft: true, isFirst: i === 0, index: i }));
610
+ });
611
+ }
612
+ m.getSource(SRC_FILL).setData(fc(fillFeats));
613
+ m.getSource(SRC_OUTLINE).setData(fc(outlineFeats));
614
+ m.getSource(SRC_MIDPOINT).setData(fc(midpointFeats));
615
+ m.getSource(SRC_VERTEX).setData(fc(vertexFeats));
616
+ }
617
+ }
618
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,38 @@
1
+ {
2
+ "name": "@eviav/maps-draw",
3
+ "version": "0.1.0",
4
+ "description": "Herramienta de dibujo y edición de polígonos, líneas y puntos sobre @eviav/maps / MapLibre GL JS — como mapbox-gl-draw, sin dependencias externas de dibujo.",
5
+ "license": "MIT",
6
+ "repository": { "type": "git", "url": "git+https://github.com/eviav-platform/sdk-js.git", "directory": "packages/maps-draw" },
7
+ "homepage": "https://eviav.com/docs#impl-draw",
8
+ "bugs": { "url": "mailto:support@eviav.com" },
9
+ "author": "Eviav <support@eviav.com>",
10
+ "keywords": ["eviav", "maps", "maplibre", "draw", "geofence", "polygon", "editor", "geospatial", "latam"],
11
+ "type": "module",
12
+ "main": "./dist/index.js",
13
+ "module": "./dist/index.js",
14
+ "types": "./dist/index.d.ts",
15
+ "exports": {
16
+ ".": {
17
+ "types": "./dist/index.d.ts",
18
+ "import": "./dist/index.js"
19
+ }
20
+ },
21
+ "files": ["dist", "README.md", "LICENSE"],
22
+ "scripts": {
23
+ "build": "tsc -p tsconfig.json",
24
+ "typecheck": "tsc -p tsconfig.json --noEmit",
25
+ "lint": "eslint ."
26
+ },
27
+ "peerDependencies": {
28
+ "maplibre-gl": ">=4.0.0"
29
+ },
30
+ "devDependencies": {
31
+ "@types/node": "^22.13.1",
32
+ "maplibre-gl": "^5.1.0",
33
+ "typescript": "^5.7.3"
34
+ },
35
+ "publishConfig": {
36
+ "access": "public"
37
+ }
38
+ }