@fieldnotes/core 0.45.0 → 0.46.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/dist/index.cjs CHANGED
@@ -2232,6 +2232,7 @@ var Background = class {
2232
2232
  };
2233
2233
 
2234
2234
  // src/core/event-bus.ts
2235
+ var EMPTY_META = Object.freeze({});
2235
2236
  var EventBus = class {
2236
2237
  listeners = /* @__PURE__ */ new Map();
2237
2238
  on(event, listener) {
@@ -2247,10 +2248,10 @@ var EventBus = class {
2247
2248
  off(event, listener) {
2248
2249
  this.listeners.get(event)?.delete(listener);
2249
2250
  }
2250
- emit(event, data) {
2251
+ emit(event, data, meta = EMPTY_META) {
2251
2252
  this.listeners.get(event)?.forEach((listener) => {
2252
2253
  try {
2253
- listener(data);
2254
+ listener(data, meta);
2254
2255
  } catch (err) {
2255
2256
  console.error(`[fieldnotes] listener error for "${String(event)}"`, err);
2256
2257
  }
@@ -2570,15 +2571,15 @@ var ElementStore = class {
2570
2571
  const angle = element.rotation ?? 0;
2571
2572
  return angle === 0 ? bounds : rotatedAABB(bounds, angle);
2572
2573
  }
2573
- add(element) {
2574
+ add(element, meta) {
2574
2575
  this.sortedCache = null;
2575
2576
  this._versions.set(element.id, 0);
2576
2577
  this.elements.set(element.id, element);
2577
2578
  const bounds = this.indexBounds(element);
2578
2579
  if (bounds) this.spatialIndex.insert(element.id, bounds);
2579
- this.bus.emit("add", element);
2580
+ this.bus.emit("add", element, meta);
2580
2581
  }
2581
- update(id, partial) {
2582
+ update(id, partial, meta) {
2582
2583
  const existing = this.elements.get(id);
2583
2584
  if (!existing) return;
2584
2585
  this.sortedCache = null;
@@ -2605,28 +2606,28 @@ var ElementStore = class {
2605
2606
  if (newBounds) {
2606
2607
  this.spatialIndex.update(id, newBounds);
2607
2608
  }
2608
- this.bus.emit("update", { previous: existing, current: updated });
2609
+ this.bus.emit("update", { previous: existing, current: updated }, meta);
2609
2610
  }
2610
- remove(id) {
2611
+ remove(id, meta) {
2611
2612
  const element = this.elements.get(id);
2612
2613
  if (!element) return;
2613
2614
  this.sortedCache = null;
2614
2615
  this._versions.delete(id);
2615
2616
  this.elements.delete(id);
2616
2617
  this.spatialIndex.remove(id);
2617
- this.bus.emit("remove", element);
2618
+ this.bus.emit("remove", element, meta);
2618
2619
  }
2619
- clear() {
2620
+ clear(meta) {
2620
2621
  this.sortedCache = null;
2621
2622
  this._versions.clear();
2622
2623
  this.elements.clear();
2623
2624
  this.spatialIndex.clear();
2624
- this.bus.emit("clear", null);
2625
+ this.bus.emit("clear", null, meta);
2625
2626
  }
2626
2627
  snapshot() {
2627
2628
  return this.getAll().map((el) => ({ ...el }));
2628
2629
  }
2629
- loadSnapshot(elements) {
2630
+ loadSnapshot(elements, meta) {
2630
2631
  this.sortedCache = null;
2631
2632
  this._versions.clear();
2632
2633
  this.elements.clear();
@@ -2643,9 +2644,9 @@ var ElementStore = class {
2643
2644
  el.cachedControlPoint = getArrowControlPoint(el.from, el.to, el.bend);
2644
2645
  }
2645
2646
  }
2646
- this.bus.emit("clear", null);
2647
+ this.bus.emit("clear", null, meta);
2647
2648
  for (const el of elements) {
2648
- this.bus.emit("add", el);
2649
+ this.bus.emit("add", el, meta);
2649
2650
  }
2650
2651
  }
2651
2652
  bringToFront(id) {
@@ -4920,15 +4921,18 @@ var UpdateLayerCommand = class {
4920
4921
  };
4921
4922
 
4922
4923
  // src/history/history-recorder.ts
4924
+ function isExternalChange(meta) {
4925
+ return meta.origin !== void 0 && meta.origin !== "local";
4926
+ }
4923
4927
  var HistoryRecorder = class {
4924
4928
  constructor(store, stack, layerManager) {
4925
4929
  this.store = store;
4926
4930
  this.stack = stack;
4927
4931
  this.layerManager = layerManager;
4928
4932
  this.unsubscribers = [
4929
- store.on("add", (el) => this.onAdd(el)),
4930
- store.on("remove", (el) => this.onRemove(el)),
4931
- store.on("update", ({ previous, current }) => this.onUpdate(previous, current))
4933
+ store.on("add", (el, meta) => this.onAdd(el, meta)),
4934
+ store.on("remove", (el, meta) => this.onRemove(el, meta)),
4935
+ store.on("update", ({ previous, current }, meta) => this.onUpdate(previous, current, meta))
4932
4936
  ];
4933
4937
  if (layerManager) {
4934
4938
  this.unsubscribers.push(
@@ -4984,18 +4988,21 @@ var HistoryRecorder = class {
4984
4988
  this.stack.push(command);
4985
4989
  }
4986
4990
  }
4987
- onAdd(element) {
4991
+ onAdd(element, meta) {
4992
+ if (isExternalChange(meta)) return;
4988
4993
  if (!this.recording) return;
4989
4994
  this.record(new AddElementCommand(element));
4990
4995
  }
4991
- onRemove(element) {
4996
+ onRemove(element, meta) {
4997
+ if (isExternalChange(meta)) return;
4992
4998
  if (!this.recording) return;
4993
4999
  if (this.transaction && this.updateSnapshots.has(element.id)) {
4994
5000
  this.updateSnapshots.delete(element.id);
4995
5001
  }
4996
5002
  this.record(new RemoveElementCommand(element));
4997
5003
  }
4998
- onUpdate(previous, current) {
5004
+ onUpdate(previous, current, meta) {
5005
+ if (isExternalChange(meta)) return;
4999
5006
  if (!this.recording) return;
5000
5007
  if (this.transaction) {
5001
5008
  if (!this.updateSnapshots.has(current.id)) {
@@ -10167,7 +10174,7 @@ var LaserTool = class {
10167
10174
  };
10168
10175
 
10169
10176
  // src/index.ts
10170
- var VERSION = "0.45.0";
10177
+ var VERSION = "0.46.0";
10171
10178
  // Annotate the CommonJS export names for ESM import in node:
10172
10179
  0 && (module.exports = {
10173
10180
  ArrowTool,