ol 10.4.1-dev.1738253405574 → 10.4.1-dev.1738263573255

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.
@@ -1,6 +1,7 @@
1
1
  export type SnapEventType = string;
2
2
  export namespace SnapEventType {
3
3
  let SNAP: string;
4
+ let UNSNAP: string;
4
5
  }
5
6
  /**
6
7
  * @classdesc
@@ -1 +1 @@
1
- {"version":3,"file":"SnapEvent.d.ts","sourceRoot":"","sources":["SnapEvent.js"],"names":[],"mappings":"4BAMU,MAAM;;;;AAWhB;;;GAGG;AACH;IACE;;;;;;;OAOG;IACH,kBAPW,aAAa,WAErB;QAAuD,MAAM,EAArD,OAAO,kBAAkB,EAAE,UAAU;QACU,WAAW,EAA1D,OAAO,kBAAkB,EAAE,UAAU;QACI,OAAO,EAAhD,OAAO,eAAe,EAAE,OAAO;QAC4B,OAAO,EAAlE,KAAK,CAAC,OAAO,kBAAkB,EAAE,UAAU,CAAC,GAAC,IAAI;KAC3D,EA2BA;IAxBC;;;;OAIG;IACH,QAHU,OAAO,kBAAkB,EAAE,UAAU,CAGnB;IAC5B;;;;OAIG;IACH,aAHU,KAAK,CAAC,MAAM,CAAC,GAAC,KAAK,CAAC,MAAM,CAAC,CAGC;IACtC;;;;OAIG;IACH,SAHU,OAAO,eAAe,EAAE,OAAO,CAAC,OAAO,qBAAqB,EAAE,OAAO,CAAC,CAGlD;IAC9B;;;;OAIG;IACH,SAHU,KAAK,CAAC,OAAO,kBAAkB,EAAE,UAAU,CAAC,GAAC,IAAI,CAG7B;CAEjC;kBAtDiB,YAAY"}
1
+ {"version":3,"file":"SnapEvent.d.ts","sourceRoot":"","sources":["SnapEvent.js"],"names":[],"mappings":"4BAMU,MAAM;;;;;AAYhB;;;GAGG;AACH;IACE;;;;;;;OAOG;IACH,kBAPW,aAAa,WAErB;QAAuD,MAAM,EAArD,OAAO,kBAAkB,EAAE,UAAU;QACU,WAAW,EAA1D,OAAO,kBAAkB,EAAE,UAAU;QACI,OAAO,EAAhD,OAAO,eAAe,EAAE,OAAO;QAC4B,OAAO,EAAlE,KAAK,CAAC,OAAO,kBAAkB,EAAE,UAAU,CAAC,GAAC,IAAI;KAC3D,EA2BA;IAxBC;;;;OAIG;IACH,QAHU,OAAO,kBAAkB,EAAE,UAAU,CAGnB;IAC5B;;;;OAIG;IACH,aAHU,KAAK,CAAC,MAAM,CAAC,GAAC,KAAK,CAAC,MAAM,CAAC,CAGC;IACtC;;;;OAIG;IACH,SAHU,OAAO,eAAe,EAAE,OAAO,CAAC,OAAO,qBAAqB,EAAE,OAAO,CAAC,CAGlD;IAC9B;;;;OAIG;IACH,SAHU,KAAK,CAAC,OAAO,kBAAkB,EAAE,UAAU,CAAC,GAAC,IAAI,CAG7B;CAEjC;kBAvDiB,YAAY"}
@@ -13,6 +13,7 @@ export const SnapEventType = {
13
13
  * @api
14
14
  */
15
15
  SNAP: 'snap',
16
+ UNSNAP: 'unsnap',
16
17
  };
17
18
 
18
19
  /**
@@ -50,6 +50,27 @@ export type Options = {
50
50
  */
51
51
  source?: import("../source/Vector.js").default<import("../Feature.js").default<import("../geom/Geometry.js").default>> | undefined;
52
52
  };
53
+ /**
54
+ * Information about the last snapped state.
55
+ */
56
+ export type SnappedInfo = {
57
+ /**
58
+ * - The snapped vertex.
59
+ */
60
+ vertex: import("../coordinate.js").Coordinate | null;
61
+ /**
62
+ * - The pixel of the snapped vertex.
63
+ */
64
+ vertexPixel: import("../coordinate.js").Coordinate | null;
65
+ /**
66
+ * - The feature being snapped.
67
+ */
68
+ feature: import("../Feature.js").default | null;
69
+ /**
70
+ * - Segment, or `null` if snapped to a vertex.
71
+ */
72
+ segment: Array<import("../coordinate.js").Coordinate> | null;
73
+ };
53
74
  /**
54
75
  * *
55
76
  */
@@ -160,6 +181,12 @@ declare class Snap extends PointerInteraction {
160
181
  * @private
161
182
  */
162
183
  private rBush_;
184
+ /**
185
+ * Holds information about the last snapped state.
186
+ * @type {SnappedInfo|null}
187
+ * @private
188
+ */
189
+ private snapped_;
163
190
  /**
164
191
  * @const
165
192
  * @private
@@ -179,6 +206,16 @@ declare class Snap extends PointerInteraction {
179
206
  * @private
180
207
  */
181
208
  private getFeatures_;
209
+ /**
210
+ * Checks if two snap data sets are equal.
211
+ * Compares the segment and the feature.
212
+ *
213
+ * @param {SnappedInfo} data1 The first snap data set.
214
+ * @param {SnappedInfo} data2 The second snap data set.
215
+ * @return {boolean} `true` if the data sets are equal, otherwise `false`.
216
+ * @private
217
+ */
218
+ private areSnapDataEqual_;
182
219
  /**
183
220
  * @param {import("../source/Vector.js").VectorSourceEvent|import("../Collection.js").CollectionEvent<import("../Feature.js").default>} evt Event.
184
221
  * @private
@@ -1 +1 @@
1
- {"version":3,"file":"Snap.d.ts","sourceRoot":"","sources":["Snap.js"],"names":[],"mappings":";;;;;YA4Bc,OAAO,kBAAkB,EAAE,UAAU,GAAC,IAAI;;;;iBAC1C,OAAO,aAAa,EAAE,KAAK,GAAC,IAAI;;;;aAChC,OAAO,eAAe,EAAE,OAAO,GAAC,IAAI;;;;aACpC,KAAK,CAAC,OAAO,kBAAkB,EAAE,UAAU,CAAC,GAAC,IAAI;;;;;;aAKjD,OAAO,eAAe,EAAE,OAAO;;;;aAC/B,KAAK,CAAC,OAAO,kBAAkB,EAAE,UAAU,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;4BAuC7C,MAAM,IACN,OAAO,eAAe,EAAE,WAAW,CAAC,OAAO,eAAe,EAAE,UAAU,EAAE,OAAO,oBAAoB,EAAE,OAAO,EAAE,MAAM,CAAC,GACjI,OAAW,eAAe,EAAE,WAAW,CAAC,OAAO,oBAAoB,EAAE,KAAK,GAC1E,eAAqB,EAAE,OAAO,WAAW,EAAE,WAAW,EAAE,MAAM,CAAC,GAC/D,OAAW,eAAe,EAAE,WAAW,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,CAAC,GAClE,OAAW,eAAe,EAAE,mBAAmB,CAAC,OAAO,eAAe,EAAE,UAAU,GAAC,OAAO,oBAAoB,EAAE,KAAK,GACrH,eAAqB,GAAC,MAAM,EAAE,MAAM,CAAC;AAPtC;;;;;;;;GAQG;AAEH;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH;IACE;;OAEG;IACH,sBAFW,OAAO,EAqHjB;IAlGC;;OAEG;IACH,IAFU,eAAe,CAAC,OAAO,WAAW,EAAE,SAAS,CAAC,CAEjD;IAEP;;OAEG;IACH,MAFU,eAAe,CAAC,OAAO,WAAW,EAAE,SAAS,CAAC,CAE/C;IAET;;OAEG;IACH,IAFU,eAAe,CAAC,IAAI,CAAC,CAExB;IAEP;;;OAGG;IACH,gBAAqD;IAErD;;;OAGG;IACH,gBAAmE;IAEnE;;;OAGG;IACH,cAA6D;IAE7D;;;OAGG;IACH,kBAA2D;IAE3D;;;OAGG;IACH,8BAA+B;IAE/B;;;OAGG;IACH,mCAAoC;IAEpC;;;;;OAKG;IACH,gCAAiC;IAEjC;;;;;;OAMG;IACH,yBAA0B;IAE1B;;;OAGG;IACH,wBACoE;IAEpE;;;;OAIG;IACH,eAAyB;IAEzB;;;;OAIG;IACH,6BAUC;IAGH;;;;;;OAMG;IACH,oBALW,OAAO,eAAe,EAAE,OAAO,aAC/B,OAAO,QAwCjB;IAED;;;OAGG;IACH,qBASC;IAyBD;;;OAGG;IACH,0BAKC;IAED;;;OAGG;IACH,6BAKC;IAED;;;OAGG;IACH,6BAUC;IAiBD;;;;;;OAMG;IACH,uBALW,OAAO,eAAe,EAAE,OAAO,aAC/B,OAAO,QAyBjB;IAED;;;;;;OAMG;IACH,qBAHW,OAAO,WAAW,EAAE,OAAO,QAqDrC;IAED;;;;;OAKG;IACH,cALW,OAAO,aAAa,EAAE,KAAK,mBAC3B,OAAO,kBAAkB,EAAE,UAAU,OACrC,OAAO,WAAW,EAAE,OAAO,GAC1B,MAAM,GAAC,IAAI,CAgHtB;IAED;;;OAGG;IACH,uBAGC;IAED;;;;OAIG;IACH,+BAiBC;IAED;;;;OAIG;IACH,2CAQC;IAED;;;;OAIG;IACH,mCAKC;IAED;;;;OAIG;IACH,wCAQC;IAED;;;;OAIG;IACH,mCAIC;IAED;;;;OAIG;IACH,qCAWC;IAED;;;;OAIG;IACH,8BAEC;IAED;;;;OAIG;IACH,gCAQC;CACF;0BAlrBsC,wBAAwB;+BAchC,cAAc"}
1
+ {"version":3,"file":"Snap.d.ts","sourceRoot":"","sources":["Snap.js"],"names":[],"mappings":";;;;;YA4Bc,OAAO,kBAAkB,EAAE,UAAU,GAAC,IAAI;;;;iBAC1C,OAAO,aAAa,EAAE,KAAK,GAAC,IAAI;;;;aAChC,OAAO,eAAe,EAAE,OAAO,GAAC,IAAI;;;;aACpC,KAAK,CAAC,OAAO,kBAAkB,EAAE,UAAU,CAAC,GAAC,IAAI;;;;;;aAKjD,OAAO,eAAe,EAAE,OAAO;;;;aAC/B,KAAK,CAAC,OAAO,kBAAkB,EAAE,UAAU,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;YAgB5C,OAAO,kBAAkB,EAAE,UAAU,GAAC,IAAI;;;;iBAC1C,OAAO,kBAAkB,EAAE,UAAU,GAAC,IAAI;;;;aAC1C,OAAO,eAAe,EAAE,OAAO,GAAC,IAAI;;;;aACpC,KAAK,CAAC,OAAO,kBAAkB,EAAE,UAAU,CAAC,GAAC,IAAI;;;;;4BA6BlD,MAAM,IACN,OAAO,eAAe,EAAE,WAAW,CAAC,OAAO,eAAe,EAAE,UAAU,EAAE,OAAO,oBAAoB,EAAE,OAAO,EAAE,MAAM,CAAC,GACjI,OAAW,eAAe,EAAE,WAAW,CAAC,OAAO,oBAAoB,EAAE,KAAK,GAC1E,eAAqB,EAAE,OAAO,WAAW,EAAE,WAAW,EAAE,MAAM,CAAC,GAC/D,OAAW,eAAe,EAAE,WAAW,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,CAAC,GAClE,OAAW,eAAe,EAAE,mBAAmB,CAAC,OAAO,eAAe,EAAE,UAAU,GAAC,OAAO,oBAAoB,EAAE,KAAK,GACrH,eAAqB,GAAC,MAAM,EAAE,MAAM,CAAC;AAPtC;;;;;;;;GAQG;AAEH;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH;IACE;;OAEG;IACH,sBAFW,OAAO,EA4HjB;IAzGC;;OAEG;IACH,IAFU,eAAe,CAAC,OAAO,WAAW,EAAE,SAAS,CAAC,CAEjD;IAEP;;OAEG;IACH,MAFU,eAAe,CAAC,OAAO,WAAW,EAAE,SAAS,CAAC,CAE/C;IAET;;OAEG;IACH,IAFU,eAAe,CAAC,IAAI,CAAC,CAExB;IAEP;;;OAGG;IACH,gBAAqD;IAErD;;;OAGG;IACH,gBAAmE;IAEnE;;;OAGG;IACH,cAA6D;IAE7D;;;OAGG;IACH,kBAA2D;IAE3D;;;OAGG;IACH,8BAA+B;IAE/B;;;OAGG;IACH,mCAAoC;IAEpC;;;;;OAKG;IACH,gCAAiC;IAEjC;;;;;;OAMG;IACH,yBAA0B;IAE1B;;;OAGG;IACH,wBACoE;IAEpE;;;;OAIG;IACH,eAAyB;IAEzB;;;;OAIG;IACH,iBAAoB;IAEpB;;;;OAIG;IACH,6BAUC;IAGH;;;;;;OAMG;IACH,oBALW,OAAO,eAAe,EAAE,OAAO,aAC/B,OAAO,QAwCjB;IAED;;;OAGG;IACH,qBASC;IAED;;;;;;;;OAQG;IACH,0BAEC;IAoCD;;;OAGG;IACH,0BAKC;IAED;;;OAGG;IACH,6BAKC;IAED;;;OAGG;IACH,6BAUC;IAiBD;;;;;;OAMG;IACH,uBALW,OAAO,eAAe,EAAE,OAAO,aAC/B,OAAO,QAyBjB;IAED;;;;;;OAMG;IACH,qBAHW,OAAO,WAAW,EAAE,OAAO,QAqDrC;IAED;;;;;OAKG;IACH,cALW,OAAO,aAAa,EAAE,KAAK,mBAC3B,OAAO,kBAAkB,EAAE,UAAU,OACrC,OAAO,WAAW,EAAE,OAAO,GAC1B,MAAM,GAAC,IAAI,CAgHtB;IAED;;;OAGG;IACH,uBAGC;IAED;;;;OAIG;IACH,+BAiBC;IAED;;;;OAIG;IACH,2CAQC;IAED;;;;OAIG;IACH,mCAKC;IAED;;;;OAIG;IACH,wCAQC;IAED;;;;OAIG;IACH,mCAIC;IAED;;;;OAIG;IACH,qCAWC;IAED;;;;OAIG;IACH,8BAEC;IAED;;;;OAIG;IACH,gCAQC;CACF;0BA1tBsC,wBAAwB;+BAchC,cAAc"}
@@ -48,6 +48,15 @@ import PointerInteraction from './Pointer.js';
48
48
  * @property {import("../source/Vector.js").default} [source] Snap to features from this source. Either this option or features should be provided
49
49
  */
50
50
 
51
+ /**
52
+ * Information about the last snapped state.
53
+ * @typedef {Object} SnappedInfo
54
+ * @property {import("../coordinate.js").Coordinate|null} vertex - The snapped vertex.
55
+ * @property {import("../coordinate.js").Coordinate|null} vertexPixel - The pixel of the snapped vertex.
56
+ * @property {import("../Feature.js").default|null} feature - The feature being snapped.
57
+ * @property {Array<import("../coordinate.js").Coordinate>|null} segment - Segment, or `null` if snapped to a vertex.
58
+ */
59
+
51
60
  /**
52
61
  * @param {import("../source/Vector.js").VectorSourceEvent|import("../Collection.js").CollectionEvent<import("../Feature.js").default>} evt Event.
53
62
  * @return {import("../Feature.js").default|null} Feature.
@@ -210,6 +219,13 @@ class Snap extends PointerInteraction {
210
219
  */
211
220
  this.rBush_ = new RBush();
212
221
 
222
+ /**
223
+ * Holds information about the last snapped state.
224
+ * @type {SnappedInfo|null}
225
+ * @private
226
+ */
227
+ this.snapped_ = null;
228
+
213
229
  /**
214
230
  * @const
215
231
  * @private
@@ -288,6 +304,19 @@ class Snap extends PointerInteraction {
288
304
  return features;
289
305
  }
290
306
 
307
+ /**
308
+ * Checks if two snap data sets are equal.
309
+ * Compares the segment and the feature.
310
+ *
311
+ * @param {SnappedInfo} data1 The first snap data set.
312
+ * @param {SnappedInfo} data2 The second snap data set.
313
+ * @return {boolean} `true` if the data sets are equal, otherwise `false`.
314
+ * @private
315
+ */
316
+ areSnapDataEqual_(data1, data2) {
317
+ return data1.segment === data2.segment && data1.feature === data2.feature;
318
+ }
319
+
291
320
  /**
292
321
  * @param {import("../MapBrowserEvent.js").default} evt Map browser event.
293
322
  * @return {boolean} `false` to stop event propagation.
@@ -296,18 +325,29 @@ class Snap extends PointerInteraction {
296
325
  */
297
326
  handleEvent(evt) {
298
327
  const result = this.snapTo(evt.pixel, evt.coordinate, evt.map);
328
+
299
329
  if (result) {
300
330
  evt.coordinate = result.vertex.slice(0, 2);
301
331
  evt.pixel = result.vertexPixel;
302
- this.dispatchEvent(
303
- new SnapEvent(SnapEventType.SNAP, {
304
- vertex: evt.coordinate,
305
- vertexPixel: evt.pixel,
306
- feature: result.feature,
307
- segment: result.segment,
308
- }),
309
- );
332
+
333
+ // Dispatch UNSNAP event if already snapped
334
+ if (this.snapped_ && !this.areSnapDataEqual_(this.snapped_, result)) {
335
+ this.dispatchEvent(new SnapEvent(SnapEventType.UNSNAP, this.snapped_));
336
+ }
337
+
338
+ this.snapped_ = {
339
+ vertex: evt.coordinate,
340
+ vertexPixel: evt.pixel,
341
+ feature: result.feature,
342
+ segment: result.segment,
343
+ };
344
+ this.dispatchEvent(new SnapEvent(SnapEventType.SNAP, this.snapped_));
345
+ } else if (this.snapped_) {
346
+ // Dispatch UNSNAP event if no longer snapped
347
+ this.dispatchEvent(new SnapEvent(SnapEventType.UNSNAP, this.snapped_));
348
+ this.snapped_ = null;
310
349
  }
350
+
311
351
  return super.handleEvent(evt);
312
352
  }
313
353
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ol",
3
- "version": "10.4.1-dev.1738253405574",
3
+ "version": "10.4.1-dev.1738263573255",
4
4
  "description": "OpenLayers mapping library",
5
5
  "keywords": [
6
6
  "map",
package/util.js CHANGED
@@ -33,4 +33,4 @@ export function getUid(obj) {
33
33
  * OpenLayers version.
34
34
  * @type {string}
35
35
  */
36
- export const VERSION = '10.4.1-dev.1738253405574';
36
+ export const VERSION = '10.4.1-dev.1738263573255';