y-mxgraph 0.8.1 → 0.8.3

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/y-mxgraph.cjs CHANGED
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
- const transform = require("./index-CaG-EdEK.cjs");
3
+ const transform = require("./index-D3Hk2QcW.cjs");
4
4
  const Y = require("yjs");
5
5
  const colord = require("colord");
6
6
  function _interopNamespaceDefault(e) {
@@ -20,6 +20,54 @@ function _interopNamespaceDefault(e) {
20
20
  return Object.freeze(n);
21
21
  }
22
22
  const Y__namespace = /* @__PURE__ */ _interopNamespaceDefault(Y);
23
+ function patchValueToXmlAttr(value) {
24
+ try {
25
+ const parsed = JSON.parse(value);
26
+ if (typeof parsed === "string") return parsed;
27
+ } catch (e) {
28
+ }
29
+ return value;
30
+ }
31
+ function xmlAttrToPatchValue(value) {
32
+ return JSON.stringify(value);
33
+ }
34
+ function getBackground(diagram) {
35
+ const gm = transform.getMap(diagram, transform.key);
36
+ if (!gm) return void 0;
37
+ const bg = gm.get(transform.backgroundKey);
38
+ return bg || void 0;
39
+ }
40
+ function setBackground(diagram, background) {
41
+ const gm = transform.getMap(diagram, transform.key);
42
+ if (!gm) return;
43
+ if (background != null && background !== "") {
44
+ gm.set(transform.backgroundKey, background);
45
+ } else {
46
+ gm.delete(transform.backgroundKey);
47
+ }
48
+ }
49
+ function diffBackgroundViewPatch(prev, curr) {
50
+ const pv = prev != null ? prev : "";
51
+ const cv = curr != null ? curr : "";
52
+ if (pv === cv) return void 0;
53
+ return {
54
+ background: cv === "" ? '""' : xmlAttrToPatchValue(cv)
55
+ };
56
+ }
57
+ function applyViewPatch(diagram, viewPatch) {
58
+ if (!("background" in viewPatch)) return;
59
+ const raw = viewPatch.background;
60
+ if (raw === null || raw === void 0) {
61
+ setBackground(diagram, void 0);
62
+ return;
63
+ }
64
+ const str = String(raw);
65
+ if (str === "" || str === '""' || str === "null") {
66
+ setBackground(diagram, void 0);
67
+ } else {
68
+ setBackground(diagram, patchValueToXmlAttr(str));
69
+ }
70
+ }
23
71
  var __defProp$1 = Object.defineProperty;
24
72
  var __defProps = Object.defineProperties;
25
73
  var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
@@ -72,11 +120,39 @@ function ensureUniqueOrder(orderArr) {
72
120
  dupIdx.sort((a, b) => b - a).forEach((idx) => orderArr.delete(idx, 1));
73
121
  }
74
122
  }
123
+ function pruneEmptyPatch(patch) {
124
+ var _a, _b;
125
+ if (!patch[DIFF_UPDATE]) return patch;
126
+ for (const id of Object.keys(patch[DIFF_UPDATE])) {
127
+ const u = patch[DIFF_UPDATE][id];
128
+ const cells = u.cells;
129
+ if (cells == null ? void 0 : cells[DIFF_UPDATE]) {
130
+ for (const cid of Object.keys(cells[DIFF_UPDATE])) {
131
+ if (Object.keys(cells[DIFF_UPDATE][cid]).length === 0) {
132
+ delete cells[DIFF_UPDATE][cid];
133
+ }
134
+ }
135
+ if (Object.keys(cells[DIFF_UPDATE]).length === 0) {
136
+ delete cells[DIFF_UPDATE];
137
+ }
138
+ }
139
+ if (cells && !((_a = cells[DIFF_REMOVE]) == null ? void 0 : _a.length) && !((_b = cells[DIFF_INSERT]) == null ? void 0 : _b.length) && (!cells[DIFF_UPDATE] || Object.keys(cells[DIFF_UPDATE]).length === 0)) {
140
+ delete u.cells;
141
+ }
142
+ if (Object.keys(u).length === 0) {
143
+ delete patch[DIFF_UPDATE][id];
144
+ }
145
+ }
146
+ if (Object.keys(patch[DIFF_UPDATE]).length === 0) {
147
+ delete patch[DIFF_UPDATE];
148
+ }
149
+ return patch;
150
+ }
75
151
  function applyFilePatch(doc, patch, options) {
76
152
  doc.transact(() => {
77
- const mxfile = doc.getMap(transform.key);
153
+ const mxfile = doc.getMap(transform.key$1);
78
154
  if (patch[DIFF_REMOVE]) {
79
- const diagramsMap = mxfile.get(transform.key$1);
155
+ const diagramsMap = mxfile.get(transform.key$2);
80
156
  const orderArr = mxfile.get(
81
157
  transform.diagramOrderKey
82
158
  );
@@ -90,7 +166,7 @@ function applyFilePatch(doc, patch, options) {
90
166
  }
91
167
  }
92
168
  if (patch[DIFF_INSERT]) {
93
- const diagramsMap = mxfile.get(transform.key$1);
169
+ const diagramsMap = mxfile.get(transform.key$2);
94
170
  const orderArr = mxfile.get(
95
171
  transform.diagramOrderKey
96
172
  );
@@ -161,7 +237,7 @@ function applyFilePatch(doc, patch, options) {
161
237
  if (patch[DIFF_UPDATE]) {
162
238
  Object.keys(patch[DIFF_UPDATE]).forEach((id) => {
163
239
  const diagramsMap = mxfile.get(
164
- transform.key$1
240
+ transform.key$2
165
241
  );
166
242
  const diagram = diagramsMap.get(id);
167
243
  if (diagram) {
@@ -172,8 +248,11 @@ function applyFilePatch(doc, patch, options) {
172
248
  update.name || ""
173
249
  );
174
250
  }
251
+ if (update.view && typeof update.view === "object") {
252
+ applyViewPatch(diagram, update.view);
253
+ }
175
254
  if (update.cells) {
176
- const yMxGraphModel = diagram.get(transform.key$2);
255
+ const yMxGraphModel = diagram.get(transform.key);
177
256
  if (!yMxGraphModel) return;
178
257
  const cellsMap = yMxGraphModel.get(transform.key$3);
179
258
  const orderArr = yMxGraphModel.get(transform.mxCellOrderKey);
@@ -308,8 +387,8 @@ function applyFilePatch(doc, patch, options) {
308
387
  }
309
388
  function initDocSnapshot(doc, resetSnapshot = false) {
310
389
  try {
311
- const mxfile = doc.getMap(transform.key);
312
- const diagramsMap = mxfile.get(transform.key$1);
390
+ const mxfile = doc.getMap(transform.key$1);
391
+ const diagramsMap = mxfile.get(transform.key$2);
313
392
  const orderArr = mxfile.get(transform.diagramOrderKey);
314
393
  const orderIds = orderArr ? orderArr.toArray() : [];
315
394
  const allDiagramIds = orderIds.length > 0 ? orderIds : diagramsMap ? Array.from(diagramsMap.keys()) : [];
@@ -317,13 +396,14 @@ function initDocSnapshot(doc, resetSnapshot = false) {
317
396
  const snap = {
318
397
  diagramOrder,
319
398
  cellsOrder: /* @__PURE__ */ new Map(),
320
- cellAttrs: /* @__PURE__ */ new Map()
399
+ cellAttrs: /* @__PURE__ */ new Map(),
400
+ diagramBackground: /* @__PURE__ */ new Map()
321
401
  };
322
402
  const diagrams = diagramOrder.map((id) => diagramsMap.get(id)).filter((d) => !!d);
323
403
  for (const d of diagrams) {
324
404
  const did = d.get("id") || "";
325
405
  if (!did) continue;
326
- const gm = d.get(transform.key$2);
406
+ const gm = d.get(transform.key);
327
407
  if (gm) {
328
408
  const order = gm.get(transform.mxCellOrderKey);
329
409
  const ids = order ? order.toArray().slice() : [];
@@ -346,6 +426,7 @@ function initDocSnapshot(doc, resetSnapshot = false) {
346
426
  snap.cellsOrder.set(did, []);
347
427
  snap.cellAttrs.set(did, /* @__PURE__ */ new Map());
348
428
  }
429
+ snap.diagramBackground.set(did, getBackground(d));
349
430
  }
350
431
  docSnapshots.set(doc, snap);
351
432
  } catch (e) {
@@ -358,21 +439,23 @@ function generatePatch(events, explicitDoc) {
358
439
  const doc = (_b = (_a = events[0]) == null ? void 0 : _a.transaction) == null ? void 0 : _b.doc;
359
440
  if (!doc) return patch;
360
441
  if (!events || events.length === 0) return patch;
361
- const mxfile = doc.getMap(transform.key);
362
- const diagramsMap = mxfile.get(transform.key$1);
442
+ const mxfile = doc.getMap(transform.key$1);
443
+ const diagramsMap = mxfile.get(transform.key$2);
363
444
  const orderArr = mxfile.get(transform.diagramOrderKey);
364
445
  let snap = docSnapshots.get(doc);
365
446
  if (!snap) {
366
447
  snap = {
367
448
  diagramOrder: null,
368
449
  cellsOrder: /* @__PURE__ */ new Map(),
369
- cellAttrs: /* @__PURE__ */ new Map()
450
+ cellAttrs: /* @__PURE__ */ new Map(),
451
+ diagramBackground: /* @__PURE__ */ new Map()
370
452
  };
371
453
  docSnapshots.set(doc, snap);
372
454
  }
373
455
  const prevDiagramOrder = snap.diagramOrder;
374
456
  const prevCellsOrder = snap.cellsOrder;
375
457
  const prevCellsAttrs = snap.cellAttrs;
458
+ const prevDiagramBackground = snap.diagramBackground;
376
459
  const ensureUpdate = (diagramId) => {
377
460
  patch[DIFF_UPDATE] = patch[DIFF_UPDATE] || {};
378
461
  patch[DIFF_UPDATE][diagramId] = patch[DIFF_UPDATE][diagramId] || {};
@@ -388,10 +471,12 @@ function generatePatch(events, explicitDoc) {
388
471
  const diagramsList = currDiagramOrder.map((id) => diagramsMap.get(id)).filter((d) => !!d);
389
472
  const currCellsOrder = /* @__PURE__ */ new Map();
390
473
  const cellAttrMap = /* @__PURE__ */ new Map();
474
+ const currDiagramBackground = /* @__PURE__ */ new Map();
391
475
  for (const d of diagramsList) {
392
476
  const did = d.get("id") || "";
477
+ currDiagramBackground.set(did, getBackground(d));
393
478
  const attrs = /* @__PURE__ */ new Map();
394
- const gm = d.get(transform.key$2);
479
+ const gm = d.get(transform.key);
395
480
  if (gm) {
396
481
  const cellsMap = gm.get(transform.key$3);
397
482
  const orderArr2 = gm.get(transform.mxCellOrderKey);
@@ -511,19 +596,35 @@ function generatePatch(events, explicitDoc) {
511
596
  if (!(target instanceof Y__namespace.Map)) continue;
512
597
  if (!diagramSet.has(target)) continue;
513
598
  const changed = ev.keysChanged || /* @__PURE__ */ new Set();
514
- if (!changed || !changed.has("name")) continue;
599
+ if (!(changed == null ? void 0 : changed.has("name"))) continue;
515
600
  const did = target.get("id") || "";
516
601
  if (!did || insertedDiagramIdGlobal.has(did)) continue;
517
- const u = ensureUpdate(did);
518
- u.name = target.get("name") || "";
602
+ ensureUpdate(did).name = target.get("name") || "";
519
603
  }
520
604
  }
521
605
  if (!prevDiagramOrder) {
522
606
  for (const d of diagramsList) {
523
607
  const did = d.get("id") || "";
524
608
  if (!did) continue;
525
- const u = ensureUpdate(did);
526
- u.name = d.get("name") || "";
609
+ ensureUpdate(did).name = d.get("name") || "";
610
+ }
611
+ }
612
+ for (const ev of events) {
613
+ const target = ev.target;
614
+ if (!(target instanceof Y__namespace.Map)) continue;
615
+ for (const d of diagramsList) {
616
+ const gm = d.get(transform.key);
617
+ if (gm !== target) continue;
618
+ const changed = ev.keysChanged || /* @__PURE__ */ new Set();
619
+ if (!changed.has(transform.backgroundKey)) continue;
620
+ const did = d.get("id") || "";
621
+ if (!did || insertedDiagramIdGlobal.has(did)) continue;
622
+ const viewDiff = diffBackgroundViewPatch(
623
+ prevDiagramBackground.get(did),
624
+ getBackground(d)
625
+ );
626
+ if (viewDiff) ensureUpdate(did).view = viewDiff;
627
+ break;
527
628
  }
528
629
  }
529
630
  for (const ev of events) {
@@ -552,6 +653,14 @@ function generatePatch(events, explicitDoc) {
552
653
  }
553
654
  }
554
655
  if (prevDiagramOrder) {
656
+ for (const [did, currBg] of currDiagramBackground.entries()) {
657
+ if (insertedDiagramIdGlobal.has(did)) continue;
658
+ const viewDiff = diffBackgroundViewPatch(
659
+ prevDiagramBackground.get(did),
660
+ currBg
661
+ );
662
+ if (viewDiff) ensureUpdate(did).view = viewDiff;
663
+ }
555
664
  for (const [did, currAttrsMap] of cellAttrMap.entries()) {
556
665
  const prevAttrsMap = prevCellsAttrs.get(did) || /* @__PURE__ */ new Map();
557
666
  const cellsPatch = ensureCellSection(did);
@@ -599,8 +708,12 @@ function generatePatch(events, explicitDoc) {
599
708
  }
600
709
  snap.cellsOrder = newCellsOrder;
601
710
  snap.cellAttrs = newCellsAttrs;
711
+ snap.diagramBackground = /* @__PURE__ */ new Map();
712
+ for (const [did, bg] of currDiagramBackground.entries()) {
713
+ snap.diagramBackground.set(did, bg);
714
+ }
602
715
  docSnapshots.set(doc, snap);
603
- return patch;
716
+ return pruneEmptyPatch(patch);
604
717
  }
605
718
  const LOCAL_ORIGIN = {};
606
719
  function createMxEventObject(name, props) {
@@ -1273,8 +1386,8 @@ function mergeFileIntoDoc(doc, fileXml, strategy) {
1273
1386
  );
1274
1387
  return false;
1275
1388
  }
1276
- const mxfileMap = doc.getMap(transform.key);
1277
- const diagramMap = mxfileMap.get(transform.key$1);
1389
+ const mxfileMap = doc.getMap(transform.key$1);
1390
+ const diagramMap = mxfileMap.get(transform.key$2);
1278
1391
  const diagramOrder = mxfileMap.get(transform.diagramOrderKey);
1279
1392
  if (!diagramMap || !diagramOrder) {
1280
1393
  console.warn("[y-mxgraph] 合并失败,doc 结构不完整,回退到 replace");
@@ -1301,7 +1414,7 @@ function mergeFileIntoDoc(doc, fileXml, strategy) {
1301
1414
  return true;
1302
1415
  }
1303
1416
  function reconcileInitialContent(doc, file, strategy, applyFileData) {
1304
- const mxfileMap = doc.getMap(transform.key);
1417
+ const mxfileMap = doc.getMap(transform.key$1);
1305
1418
  const docHasData = mxfileMap.size > 0;
1306
1419
  const fileHasAnyData = !!file.data;
1307
1420
  const fileHasDiagrams = fileHasAnyData && file.data.includes("<diagram");
@@ -1432,8 +1545,8 @@ class Binding {
1432
1545
  return;
1433
1546
  }
1434
1547
  if (this.shouldReplaceWhenDocHasData && !transaction.local) {
1435
- const mxfileMap = doc.getMap(transform.key);
1436
- const diagramMap = mxfileMap.get(transform.key$1);
1548
+ const mxfileMap = doc.getMap(transform.key$1);
1549
+ const diagramMap = mxfileMap.get(transform.key$2);
1437
1550
  if (diagramMap && diagramMap.size > 0) {
1438
1551
  const xml = transform.ydoc2xml(doc);
1439
1552
  if (xml && xml.includes("<diagram")) {
@@ -1465,7 +1578,7 @@ class Binding {
1465
1578
  this.suppressLocalApply = false;
1466
1579
  }
1467
1580
  };
1468
- doc.getMap(transform.key).observeDeep(this.docObserver);
1581
+ doc.getMap(transform.key$1).observeDeep(this.docObserver);
1469
1582
  if (awareness) {
1470
1583
  this.cleanupCollaborator = bindCollaborator(file, {
1471
1584
  awareness,
@@ -1500,7 +1613,7 @@ class Binding {
1500
1613
  destroy(deep = false) {
1501
1614
  var _a, _b;
1502
1615
  this.mxGraphModel.removeListener("change", this.mxListener);
1503
- this.doc.getMap(transform.key).unobserveDeep(this.docObserver);
1616
+ this.doc.getMap(transform.key$1).unobserveDeep(this.docObserver);
1504
1617
  if (deep) {
1505
1618
  (_a = this.cleanupCollaborator) == null ? void 0 : _a.call(this);
1506
1619
  (_b = this.cleanupUndoManager) == null ? void 0 : _b.call(this);