@univerjs/drawing 0.2.5 → 0.2.6

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/lib/es/index.js CHANGED
@@ -1,115 +1,123 @@
1
- var Pt = Object.defineProperty;
2
- var Mt = (n, e, t) => e in n ? Pt(n, e, { enumerable: !0, configurable: !0, writable: !0, value: t }) : n[e] = t;
3
- var V = (n, e, t) => Mt(n, typeof e != "symbol" ? e + "" : e, t);
4
- import { Subject as we } from "rxjs";
5
- import { sortRules as Ut, sortRulesByDesc as Nt, createIdentifier as It, Tools as kt, Inject as Rt, Injector as St, Plugin as Tt, mergeOverrideWithDependencies as jt } from "@univerjs/core";
6
- const sn = 500, on = 500, ln = 10, $t = 5 * 1024 * 1024, Wt = ["image/png", "image/jpeg", "image/jpg", "image/gif", "image/bmp"];
7
- var Ce = typeof globalThis < "u" ? globalThis : typeof window < "u" ? window : typeof global < "u" ? global : typeof self < "u" ? self : {}, F = {}, Ct = {}, ct = {};
8
- Object.defineProperty(ct, "__esModule", { value: !0 });
9
- function Gt(n, e) {
10
- if (Array.isArray(e))
1
+ var __defProp = Object.defineProperty;
2
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: !0, configurable: !0, writable: !0, value }) : obj[key] = value;
3
+ var __name = (target, value) => __defProp(target, "name", { value, configurable: !0 });
4
+ var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key != "symbol" ? key + "" : key, value);
5
+ import { Subject } from "rxjs";
6
+ import { sortRules, sortRulesByDesc, createIdentifier, Tools, Inject, Injector, Plugin, mergeOverrideWithDependencies } from "@univerjs/core";
7
+ const DRAWING_IMAGE_WIDTH_LIMIT = 500, DRAWING_IMAGE_HEIGHT_LIMIT = 500, DRAWING_IMAGE_COUNT_LIMIT = 10, DRAWING_IMAGE_ALLOW_SIZE = 5 * 1024 * 1024, DRAWING_IMAGE_ALLOW_IMAGE_LIST = ["image/png", "image/jpeg", "image/jpg", "image/gif", "image/bmp"];
8
+ var commonjsGlobal = typeof globalThis < "u" ? globalThis : typeof window < "u" ? window : typeof global < "u" ? global : typeof self < "u" ? self : {}, dist$1 = {}, json1_release = {}, deepEqual$1 = {};
9
+ Object.defineProperty(deepEqual$1, "__esModule", { value: !0 });
10
+ function eqObj(a, b) {
11
+ if (Array.isArray(b))
11
12
  return !1;
12
- for (let t in n)
13
- if (!ut(n[t], e[t]))
13
+ for (let k in a)
14
+ if (!deepEqual(a[k], b[k]))
14
15
  return !1;
15
- for (let t in e)
16
- if (n[t] === void 0)
16
+ for (let k in b)
17
+ if (a[k] === void 0)
17
18
  return !1;
18
19
  return !0;
19
20
  }
20
- function Bt(n, e) {
21
- if (!Array.isArray(e) || n.length !== e.length)
21
+ __name(eqObj, "eqObj");
22
+ function eqArr(a, b) {
23
+ if (!Array.isArray(b) || a.length !== b.length)
22
24
  return !1;
23
- for (let t = 0; t < n.length; t++)
24
- if (!ut(n[t], e[t]))
25
+ for (let i = 0; i < a.length; i++)
26
+ if (!deepEqual(a[i], b[i]))
25
27
  return !1;
26
28
  return !0;
27
29
  }
28
- function ut(n, e) {
29
- return n === e ? !0 : n === null || e === null || typeof n != "object" || typeof e != "object" ? !1 : Array.isArray(n) ? Bt(n, e) : Gt(n, e);
30
+ __name(eqArr, "eqArr");
31
+ function deepEqual(a, b) {
32
+ return a === b ? !0 : a === null || b === null || typeof a != "object" || typeof b != "object" ? !1 : Array.isArray(a) ? eqArr(a, b) : eqObj(a, b);
30
33
  }
31
- ct.default = ut;
32
- var dt = {};
33
- Object.defineProperty(dt, "__esModule", { value: !0 });
34
- function lt(n) {
35
- if (n === null)
34
+ __name(deepEqual, "deepEqual");
35
+ deepEqual$1.default = deepEqual;
36
+ var deepClone$1 = {};
37
+ Object.defineProperty(deepClone$1, "__esModule", { value: !0 });
38
+ function deepClone(old) {
39
+ if (old === null)
36
40
  return null;
37
- if (Array.isArray(n))
38
- return n.map(lt);
39
- if (typeof n == "object") {
40
- const e = {};
41
- for (let t in n)
42
- e[t] = lt(n[t]);
43
- return e;
41
+ if (Array.isArray(old))
42
+ return old.map(deepClone);
43
+ if (typeof old == "object") {
44
+ const o = {};
45
+ for (let k in old)
46
+ o[k] = deepClone(old[k]);
47
+ return o;
44
48
  } else
45
- return n;
49
+ return old;
46
50
  }
47
- dt.default = lt;
48
- var ft = {};
49
- (function(n) {
50
- Object.defineProperty(n, "__esModule", { value: !0 }), n.eachChildOf = n.advancer = n.readCursor = n.writeCursor = n.WriteCursor = n.ReadCursor = n.isValidPathItem = void 0;
51
- function e(O, o) {
52
- if (!O)
53
- throw new Error(o);
54
- }
55
- const t = (O) => O != null && typeof O == "object" && !Array.isArray(O), i = (O, o) => (
51
+ __name(deepClone, "deepClone");
52
+ deepClone$1.default = deepClone;
53
+ var cursor = {};
54
+ (function(exports) {
55
+ Object.defineProperty(exports, "__esModule", { value: !0 }), exports.eachChildOf = exports.advancer = exports.readCursor = exports.writeCursor = exports.WriteCursor = exports.ReadCursor = exports.isValidPathItem = void 0;
56
+ function assert(pred, msg) {
57
+ if (!pred)
58
+ throw new Error(msg);
59
+ }
60
+ __name(assert, "assert");
61
+ const isObject = /* @__PURE__ */ __name((o) => o != null && typeof o == "object" && !Array.isArray(o), "isObject"), isGreaterKey = /* @__PURE__ */ __name((a, b) => (
56
62
  // All the numbers, then all the letters. Just as the gods of ascii intended.
57
- typeof O == typeof o ? O > o : typeof O == "string" && typeof o == "number"
58
- );
59
- function s(O, o) {
60
- for (let c in O) {
61
- const h = c;
62
- o.write(h, O[h]);
63
+ typeof a == typeof b ? a > b : typeof a == "string" && typeof b == "number"
64
+ ), "isGreaterKey");
65
+ function copyAll(c, w) {
66
+ for (let _k in c) {
67
+ const k = _k;
68
+ w.write(k, c[k]);
63
69
  }
64
70
  }
65
- n.isValidPathItem = (O) => typeof O == "number" || typeof O == "string" && O !== "__proto__";
66
- class d {
67
- constructor(o = null) {
68
- this.parents = [], this.indexes = [], this.lcIdx = -1, this.idx = -1, this.container = o;
71
+ __name(copyAll, "copyAll"), exports.isValidPathItem = (k) => typeof k == "number" || typeof k == "string" && k !== "__proto__";
72
+ const _Cursor = class _Cursor {
73
+ constructor(op = null) {
74
+ this.parents = [], this.indexes = [], this.lcIdx = -1, this.idx = -1, this.container = op;
69
75
  }
70
76
  ascend() {
71
- e(this.parents.length === this.indexes.length / 2), this.idx === 0 ? this.parents.length ? (this.lcIdx = this.indexes.pop(), this.container = this.parents.pop(), this.idx = this.indexes.pop()) : (this.lcIdx = 0, this.idx = -1) : (e(this.idx > 0), this.idx--, t(this.container[this.idx]) && this.idx--);
77
+ assert(this.parents.length === this.indexes.length / 2), this.idx === 0 ? this.parents.length ? (this.lcIdx = this.indexes.pop(), this.container = this.parents.pop(), this.idx = this.indexes.pop()) : (this.lcIdx = 0, this.idx = -1) : (assert(this.idx > 0), this.idx--, isObject(this.container[this.idx]) && this.idx--);
72
78
  }
73
79
  getPath() {
74
- const o = [];
75
- let c = this.container, h = this.parents.length - 1, R = this.idx;
76
- for (; R >= 0; )
77
- o.unshift(c[R]), R === 0 ? (R = this.indexes[h * 2], c = this.parents[h--]) : R -= t(c[R - 1]) ? 2 : 1;
78
- return o;
80
+ const path = [];
81
+ let c = this.container, p = this.parents.length - 1, i = this.idx;
82
+ for (; i >= 0; )
83
+ path.unshift(c[i]), i === 0 ? (i = this.indexes[p * 2], c = this.parents[p--]) : i -= isObject(c[i - 1]) ? 2 : 1;
84
+ return path;
79
85
  }
80
- }
81
- class l extends d {
86
+ };
87
+ __name(_Cursor, "Cursor");
88
+ let Cursor = _Cursor;
89
+ const _ReadCursor = class _ReadCursor extends Cursor {
82
90
  get() {
83
91
  return this.container ? this.container.slice(this.idx + 1) : null;
84
92
  }
85
93
  // Its only valid to call this after descending into a child.
86
94
  getKey() {
87
- return e(this.container != null, "Invalid call to getKey before cursor descended"), this.container[this.idx];
95
+ return assert(this.container != null, "Invalid call to getKey before cursor descended"), this.container[this.idx];
88
96
  }
89
97
  getComponent() {
90
- let o;
91
- return this.container && this.container.length > this.idx + 1 && t(o = this.container[this.idx + 1]) ? o : null;
98
+ let c;
99
+ return this.container && this.container.length > this.idx + 1 && isObject(c = this.container[this.idx + 1]) ? c : null;
92
100
  }
93
101
  descendFirst() {
94
- let o = this.idx + 1;
95
- if (!this.container || o >= this.container.length || t(this.container[o]) && o + 1 >= this.container.length)
102
+ let i = this.idx + 1;
103
+ if (!this.container || i >= this.container.length || isObject(this.container[i]) && i + 1 >= this.container.length)
96
104
  return !1;
97
- t(this.container[o]) && o++;
98
- const c = this.container[o];
99
- return Array.isArray(c) ? (this.indexes.push(this.idx), this.parents.push(this.container), this.indexes.push(o), this.idx = 0, this.container = c) : this.idx = o, !0;
105
+ isObject(this.container[i]) && i++;
106
+ const firstChild = this.container[i];
107
+ return Array.isArray(firstChild) ? (this.indexes.push(this.idx), this.parents.push(this.container), this.indexes.push(i), this.idx = 0, this.container = firstChild) : this.idx = i, !0;
100
108
  }
101
109
  nextSibling() {
102
- if (e(this.parents.length === this.indexes.length / 2), this.idx > 0 || this.parents.length === 0)
110
+ if (assert(this.parents.length === this.indexes.length / 2), this.idx > 0 || this.parents.length === 0)
103
111
  return !1;
104
- const o = this.indexes[this.indexes.length - 1] + 1, c = this.parents[this.parents.length - 1];
105
- return o >= c.length ? !1 : (e(!isNaN(o)), this.indexes[this.indexes.length - 1] = o, this.container = c[o], !0);
112
+ const i = this.indexes[this.indexes.length - 1] + 1, c = this.parents[this.parents.length - 1];
113
+ return i >= c.length ? !1 : (assert(!isNaN(i)), this.indexes[this.indexes.length - 1] = i, this.container = c[i], !0);
106
114
  }
107
- _init(o, c, h, R) {
108
- this.container = o, this.idx = c, this.parents = h.slice(), this.indexes = R.slice();
115
+ _init(_container, _idx, _parents, _indexes) {
116
+ this.container = _container, this.idx = _idx, this.parents = _parents.slice(), this.indexes = _indexes.slice();
109
117
  }
110
118
  clone() {
111
- const o = new l();
112
- return o._init(this.container, this.idx, this.parents, this.indexes), o;
119
+ const c = new _ReadCursor();
120
+ return c._init(this.container, this.idx, this.parents, this.indexes), c;
113
121
  }
114
122
  *[Symbol.iterator]() {
115
123
  if (this.descendFirst()) {
@@ -122,49 +130,51 @@ var ft = {};
122
130
  // TODO(cleanup): Consider moving these functions out of cursor, since
123
131
  // they're really just helper methods.
124
132
  // It'd be really nice to do this using generators.
125
- traverse(o, c) {
126
- const h = this.getComponent();
127
- h && c(h, o);
128
- for (const R of this)
129
- o && o.descend(R), this.traverse(o, c), o && o.ascend();
133
+ traverse(w, fn) {
134
+ const c = this.getComponent();
135
+ c && fn(c, w);
136
+ for (const key of this)
137
+ w && w.descend(key), this.traverse(w, fn), w && w.ascend();
130
138
  }
131
- eachPick(o, c) {
132
- this.traverse(o, (h, R) => {
133
- h.p != null && c(h.p, R);
139
+ eachPick(w, fn) {
140
+ this.traverse(w, (c, w2) => {
141
+ c.p != null && fn(c.p, w2);
134
142
  });
135
143
  }
136
- eachDrop(o, c) {
137
- this.traverse(o, (h, R) => {
138
- h.d != null && c(h.d, R);
144
+ eachDrop(w, fn) {
145
+ this.traverse(w, (c, w2) => {
146
+ c.d != null && fn(c.d, w2);
139
147
  });
140
148
  }
141
- }
142
- n.ReadCursor = l;
143
- class a extends d {
144
- constructor(o = null) {
145
- super(o), this.pendingDescent = [], this._op = o;
149
+ };
150
+ __name(_ReadCursor, "ReadCursor");
151
+ let ReadCursor = _ReadCursor;
152
+ exports.ReadCursor = ReadCursor;
153
+ const _WriteCursor = class _WriteCursor extends Cursor {
154
+ constructor(op = null) {
155
+ super(op), this.pendingDescent = [], this._op = op;
146
156
  }
147
157
  flushDescent() {
148
- e(this.parents.length === this.indexes.length / 2), this.container === null && (this._op = this.container = []);
149
- for (let o = 0; o < this.pendingDescent.length; o++) {
150
- const c = this.pendingDescent[o];
151
- let h = this.idx + 1;
152
- if (h < this.container.length && t(this.container[h]) && h++, e(h === this.container.length || !t(this.container[h])), h === this.container.length)
153
- this.container.push(c), this.idx = h;
154
- else if (this.container[h] === c)
155
- this.idx = h;
158
+ assert(this.parents.length === this.indexes.length / 2), this.container === null && (this._op = this.container = []);
159
+ for (let j = 0; j < this.pendingDescent.length; j++) {
160
+ const k = this.pendingDescent[j];
161
+ let i = this.idx + 1;
162
+ if (i < this.container.length && isObject(this.container[i]) && i++, assert(i === this.container.length || !isObject(this.container[i])), i === this.container.length)
163
+ this.container.push(k), this.idx = i;
164
+ else if (this.container[i] === k)
165
+ this.idx = i;
156
166
  else {
157
- if (!Array.isArray(this.container[h])) {
158
- const R = this.container.splice(h, this.container.length - h);
159
- this.container.push(R), this.lcIdx > -1 && (this.lcIdx = h);
167
+ if (!Array.isArray(this.container[i])) {
168
+ const oldChild = this.container.splice(i, this.container.length - i);
169
+ this.container.push(oldChild), this.lcIdx > -1 && (this.lcIdx = i);
160
170
  }
161
- for (this.indexes.push(this.idx), this.parents.push(this.container), this.lcIdx !== -1 && (e(i(c, this.container[this.lcIdx][0])), h = this.lcIdx + 1, this.lcIdx = -1); h < this.container.length && i(c, this.container[h][0]); )
162
- h++;
163
- if (this.indexes.push(h), this.idx = 0, h < this.container.length && this.container[h][0] === c)
164
- this.container = this.container[h];
171
+ for (this.indexes.push(this.idx), this.parents.push(this.container), this.lcIdx !== -1 && (assert(isGreaterKey(k, this.container[this.lcIdx][0])), i = this.lcIdx + 1, this.lcIdx = -1); i < this.container.length && isGreaterKey(k, this.container[i][0]); )
172
+ i++;
173
+ if (this.indexes.push(i), this.idx = 0, i < this.container.length && this.container[i][0] === k)
174
+ this.container = this.container[i];
165
175
  else {
166
- const R = [c];
167
- this.container.splice(h, 0, R), this.container = R;
176
+ const child = [k];
177
+ this.container.splice(i, 0, child), this.container = child;
168
178
  }
169
179
  }
170
180
  }
@@ -178,437 +188,448 @@ var ft = {};
178
188
  // components.
179
189
  getComponent() {
180
190
  this.flushDescent();
181
- const o = this.idx + 1;
182
- if (o < this.container.length && t(this.container[o]))
183
- return this.container[o];
191
+ const i = this.idx + 1;
192
+ if (i < this.container.length && isObject(this.container[i]))
193
+ return this.container[i];
184
194
  {
185
- const c = {};
186
- return this.container.splice(o, 0, c), c;
195
+ const component = {};
196
+ return this.container.splice(i, 0, component), component;
187
197
  }
188
198
  }
189
- write(o, c) {
190
- const h = this.getComponent();
191
- e(h[o] == null || h[o] === c, "Internal consistency error: Overwritten component. File a bug"), h[o] = c;
199
+ write(key, value) {
200
+ const component = this.getComponent();
201
+ assert(component[key] == null || component[key] === value, "Internal consistency error: Overwritten component. File a bug"), component[key] = value;
192
202
  }
193
203
  get() {
194
204
  return this._op;
195
205
  }
196
- descend(o) {
197
- if (!n.isValidPathItem(o))
206
+ descend(key) {
207
+ if (!exports.isValidPathItem(key))
198
208
  throw Error("Invalid JSON key");
199
- this.pendingDescent.push(o);
209
+ this.pendingDescent.push(key);
200
210
  }
201
- descendPath(o) {
202
- return this.pendingDescent.push(...o), this;
211
+ descendPath(path) {
212
+ return this.pendingDescent.push(...path), this;
203
213
  }
204
214
  ascend() {
205
215
  this.pendingDescent.length ? this.pendingDescent.pop() : super.ascend();
206
216
  }
207
- mergeTree(o, c = s) {
208
- if (o === null)
217
+ mergeTree(data, mergeFn = copyAll) {
218
+ if (data === null)
209
219
  return;
210
- if (e(Array.isArray(o)), o === this._op)
220
+ if (assert(Array.isArray(data)), data === this._op)
211
221
  throw Error("Cannot merge into my own tree");
212
- const h = this.lcIdx, R = this.parents.length;
213
- let Z = 0;
214
- for (let pe = 0; pe < o.length; pe++) {
215
- const J = o[pe];
216
- typeof J == "string" || typeof J == "number" ? (Z++, this.descend(J)) : Array.isArray(J) ? this.mergeTree(J, c) : typeof J == "object" && c(J, this);
222
+ const _lcIdx = this.lcIdx, oldDepth = this.parents.length;
223
+ let depth = 0;
224
+ for (let i = 0; i < data.length; i++) {
225
+ const c = data[i];
226
+ typeof c == "string" || typeof c == "number" ? (depth++, this.descend(c)) : Array.isArray(c) ? this.mergeTree(c, mergeFn) : typeof c == "object" && mergeFn(c, this);
217
227
  }
218
- for (; Z--; )
228
+ for (; depth--; )
219
229
  this.ascend();
220
- this.lcIdx = this.parents.length === R ? h : -1;
230
+ this.lcIdx = this.parents.length === oldDepth ? _lcIdx : -1;
221
231
  }
222
- at(o, c) {
223
- this.descendPath(o), c(this);
224
- for (let h = 0; h < o.length; h++)
232
+ at(path, fn) {
233
+ this.descendPath(path), fn(this);
234
+ for (let i = 0; i < path.length; i++)
225
235
  this.ascend();
226
236
  return this;
227
237
  }
228
238
  // This is used by helpers, so the strict ordering guarantees are
229
239
  // relaxed.
230
- writeAtPath(o, c, h) {
231
- return this.at(o, () => this.write(c, h)), this.reset(), this;
240
+ writeAtPath(path, key, value) {
241
+ return this.at(path, () => this.write(key, value)), this.reset(), this;
232
242
  }
233
- writeMove(o, c, h = 0) {
234
- return this.writeAtPath(o, "p", h).writeAtPath(c, "d", h);
243
+ writeMove(path1, path2, slot = 0) {
244
+ return this.writeAtPath(path1, "p", slot).writeAtPath(path2, "d", slot);
235
245
  }
236
246
  getPath() {
237
- const o = super.getPath();
238
- return o.push(...this.pendingDescent), o;
247
+ const path = super.getPath();
248
+ return path.push(...this.pendingDescent), path;
239
249
  }
240
- }
241
- n.WriteCursor = a, n.writeCursor = () => new a(), n.readCursor = (O) => new l(O);
242
- function E(O, o, c) {
243
- let h, R;
244
- R = h = O ? O.descendFirst() : !1;
245
- function Z(pe) {
246
- let J;
247
- for (; R; ) {
248
- const Ie = J = O.getKey();
249
- if (pe != null) {
250
- let xe = !1;
251
- if (o && typeof Ie == "number" && (J = o(Ie, O.getComponent()), J < 0 && (J = ~J, xe = !0)), i(J, pe))
250
+ };
251
+ __name(_WriteCursor, "WriteCursor");
252
+ let WriteCursor = _WriteCursor;
253
+ exports.WriteCursor = WriteCursor, exports.writeCursor = () => new WriteCursor(), exports.readCursor = (op) => new ReadCursor(op);
254
+ function advancer(r, listMap, listAdv) {
255
+ let didDescend, valid;
256
+ valid = didDescend = r ? r.descendFirst() : !1;
257
+ function adv(ktarget) {
258
+ let k2_;
259
+ for (; valid; ) {
260
+ const k2 = k2_ = r.getKey();
261
+ if (ktarget != null) {
262
+ let skip = !1;
263
+ if (listMap && typeof k2 == "number" && (k2_ = listMap(k2, r.getComponent()), k2_ < 0 && (k2_ = ~k2_, skip = !0)), isGreaterKey(k2_, ktarget))
252
264
  return null;
253
- if (J === pe && !xe)
254
- return O;
265
+ if (k2_ === ktarget && !skip)
266
+ return r;
255
267
  }
256
- c && typeof J == "number" && c(J, O.getComponent()), R = O.nextSibling();
268
+ listAdv && typeof k2_ == "number" && listAdv(k2_, r.getComponent()), valid = r.nextSibling();
257
269
  }
258
270
  return null;
259
271
  }
260
- return Z.end = () => {
261
- h && O.ascend();
262
- }, Z;
263
- }
264
- n.advancer = E;
265
- function W(O, o, c) {
266
- let h, R, Z, pe;
267
- for (h = R = O && O.descendFirst(), Z = pe = o && o.descendFirst(); h || Z; ) {
268
- let J = h ? O.getKey() : null, Ie = Z ? o.getKey() : null;
269
- J !== null && Ie !== null && (i(Ie, J) ? Ie = null : J !== Ie && (J = null)), c(J == null ? Ie : J, J != null ? O : null, Ie != null ? o : null), J != null && h && (h = O.nextSibling()), Ie != null && Z && (Z = o.nextSibling());
272
+ return __name(adv, "adv"), adv.end = () => {
273
+ didDescend && r.ascend();
274
+ }, adv;
275
+ }
276
+ __name(advancer, "advancer"), exports.advancer = advancer;
277
+ function eachChildOf(r1, r2, fn) {
278
+ let hasChild1, descended1, hasChild2, descended2;
279
+ for (hasChild1 = descended1 = r1 && r1.descendFirst(), hasChild2 = descended2 = r2 && r2.descendFirst(); hasChild1 || hasChild2; ) {
280
+ let k1 = hasChild1 ? r1.getKey() : null, k2 = hasChild2 ? r2.getKey() : null;
281
+ k1 !== null && k2 !== null && (isGreaterKey(k2, k1) ? k2 = null : k1 !== k2 && (k1 = null)), fn(k1 == null ? k2 : k1, k1 != null ? r1 : null, k2 != null ? r2 : null), k1 != null && hasChild1 && (hasChild1 = r1.nextSibling()), k2 != null && hasChild2 && (hasChild2 = r2.nextSibling());
270
282
  }
271
- R && O.ascend(), pe && o.ascend();
272
- }
273
- n.eachChildOf = W;
274
- })(ft);
275
- var ht = {};
276
- (function(n) {
277
- Object.defineProperty(n, "__esModule", { value: !0 }), n.ConflictType = void 0, function(e) {
278
- e[e.RM_UNEXPECTED_CONTENT = 1] = "RM_UNEXPECTED_CONTENT", e[e.DROP_COLLISION = 2] = "DROP_COLLISION", e[e.BLACKHOLE = 3] = "BLACKHOLE";
279
- }(n.ConflictType || (n.ConflictType = {}));
280
- })(ht);
281
- var it = {}, Fe = {}, vt;
282
- function pt() {
283
- return vt || (vt = 1, Object.defineProperty(Fe, "__esModule", { value: !0 }), Fe.uniToStrPos = Fe.strPosToUni = void 0, Fe.strPosToUni = (n, e = n.length) => {
284
- let t = 0, i = 0;
285
- for (; i < e; i++) {
286
- const s = n.charCodeAt(i);
287
- s >= 55296 && s <= 57343 && (t++, i++);
283
+ descended1 && r1.ascend(), descended2 && r2.ascend();
284
+ }
285
+ __name(eachChildOf, "eachChildOf"), exports.eachChildOf = eachChildOf;
286
+ })(cursor);
287
+ var types = {};
288
+ (function(exports) {
289
+ Object.defineProperty(exports, "__esModule", { value: !0 }), exports.ConflictType = void 0, function(ConflictType) {
290
+ ConflictType[ConflictType.RM_UNEXPECTED_CONTENT = 1] = "RM_UNEXPECTED_CONTENT", ConflictType[ConflictType.DROP_COLLISION = 2] = "DROP_COLLISION", ConflictType[ConflictType.BLACKHOLE = 3] = "BLACKHOLE";
291
+ }(exports.ConflictType || (exports.ConflictType = {}));
292
+ })(types);
293
+ var dist = {}, unicount = {}, hasRequiredUnicount;
294
+ function requireUnicount() {
295
+ return hasRequiredUnicount || (hasRequiredUnicount = 1, Object.defineProperty(unicount, "__esModule", { value: !0 }), unicount.uniToStrPos = unicount.strPosToUni = void 0, unicount.strPosToUni = (s, strOffset = s.length) => {
296
+ let pairs = 0, i = 0;
297
+ for (; i < strOffset; i++) {
298
+ const code = s.charCodeAt(i);
299
+ code >= 55296 && code <= 57343 && (pairs++, i++);
288
300
  }
289
- if (i !== e)
301
+ if (i !== strOffset)
290
302
  throw Error("Invalid offset - splits unicode bytes");
291
- return i - t;
292
- }, Fe.uniToStrPos = (n, e) => {
293
- let t = 0;
294
- for (; e > 0; e--) {
295
- const i = n.charCodeAt(t);
296
- t += i >= 55296 && i <= 57343 ? 2 : 1;
303
+ return i - pairs;
304
+ }, unicount.uniToStrPos = (s, uniOffset) => {
305
+ let pos = 0;
306
+ for (; uniOffset > 0; uniOffset--) {
307
+ const code = s.charCodeAt(pos);
308
+ pos += code >= 55296 && code <= 57343 ? 2 : 1;
297
309
  }
298
- return t;
299
- }), Fe;
310
+ return pos;
311
+ }), unicount;
300
312
  }
301
- var st = {}, yt;
302
- function at() {
303
- return yt || (yt = 1, function(n) {
304
- Object.defineProperty(n, "__esModule", { value: !0 }), n.uniSlice = n.dlen = n.eachOp = void 0;
305
- const e = pt(), t = (f) => {
306
- if (!Array.isArray(f))
313
+ __name(requireUnicount, "requireUnicount");
314
+ var type = {}, hasRequiredType;
315
+ function requireType() {
316
+ return hasRequiredType || (hasRequiredType = 1, function(exports) {
317
+ Object.defineProperty(exports, "__esModule", { value: !0 }), exports.uniSlice = exports.dlen = exports.eachOp = void 0;
318
+ const unicount_1 = requireUnicount(), checkOp = /* @__PURE__ */ __name((op) => {
319
+ if (!Array.isArray(op))
307
320
  throw Error("Op must be an array of components");
308
- let _ = null;
309
- for (let w = 0; w < f.length; w++) {
310
- const L = f[w];
311
- switch (typeof L) {
321
+ let last = null;
322
+ for (let i = 0; i < op.length; i++) {
323
+ const c = op[i];
324
+ switch (typeof c) {
312
325
  case "object":
313
- if (typeof L.d != "number" && typeof L.d != "string")
326
+ if (typeof c.d != "number" && typeof c.d != "string")
314
327
  throw Error("Delete must be number or string");
315
- if (n.dlen(L.d) <= 0)
328
+ if (exports.dlen(c.d) <= 0)
316
329
  throw Error("Deletes must not be empty");
317
330
  break;
318
331
  case "string":
319
- if (!(L.length > 0))
332
+ if (!(c.length > 0))
320
333
  throw Error("Inserts cannot be empty");
321
334
  break;
322
335
  case "number":
323
- if (!(L > 0))
336
+ if (!(c > 0))
324
337
  throw Error("Skip components must be >0");
325
- if (typeof _ == "number")
338
+ if (typeof last == "number")
326
339
  throw Error("Adjacent skip components should be combined");
327
340
  break;
328
341
  }
329
- _ = L;
342
+ last = c;
330
343
  }
331
- if (typeof _ == "number")
344
+ if (typeof last == "number")
332
345
  throw Error("Op has a trailing skip");
333
- };
334
- function i(f, _) {
335
- let w = 0, L = 0;
336
- for (let z = 0; z < f.length; z++) {
337
- const H = f[z];
338
- switch (_(H, w, L), typeof H) {
346
+ }, "checkOp");
347
+ function eachOp(op, fn) {
348
+ let prePos = 0, postPos = 0;
349
+ for (let i = 0; i < op.length; i++) {
350
+ const c = op[i];
351
+ switch (fn(c, prePos, postPos), typeof c) {
339
352
  case "object":
340
- w += n.dlen(H.d);
353
+ prePos += exports.dlen(c.d);
341
354
  break;
342
355
  case "string":
343
- L += e.strPosToUni(H);
356
+ postPos += unicount_1.strPosToUni(c);
344
357
  break;
345
358
  case "number":
346
- w += H, L += H;
359
+ prePos += c, postPos += c;
347
360
  break;
348
361
  }
349
362
  }
350
363
  }
351
- n.eachOp = i;
352
- function s(f, _) {
353
- const w = [], L = a(w);
354
- return i(f, (z, H, De) => {
355
- L(_(z, H, De));
356
- }), o(w);
364
+ __name(eachOp, "eachOp"), exports.eachOp = eachOp;
365
+ function mapOp(op, fn) {
366
+ const newOp = [], append = makeAppend(newOp);
367
+ return eachOp(op, (c, prePos, postPos) => {
368
+ append(fn(c, prePos, postPos));
369
+ }), trim(newOp);
357
370
  }
358
- const d = (f) => f, l = (f) => s(f, d);
359
- n.dlen = (f) => typeof f == "number" ? f : e.strPosToUni(f);
360
- const a = (f) => (_) => {
361
- if (!(!_ || _.d === 0 || _.d === "")) if (f.length === 0)
362
- f.push(_);
363
- else if (typeof _ == typeof f[f.length - 1])
364
- if (typeof _ == "object") {
365
- const w = f[f.length - 1];
366
- w.d = typeof w.d == "string" && typeof _.d == "string" ? w.d + _.d : n.dlen(w.d) + n.dlen(_.d);
371
+ __name(mapOp, "mapOp");
372
+ const id = /* @__PURE__ */ __name((x) => x, "id"), normalize = /* @__PURE__ */ __name((op) => mapOp(op, id), "normalize");
373
+ exports.dlen = (d) => typeof d == "number" ? d : unicount_1.strPosToUni(d);
374
+ const makeAppend = /* @__PURE__ */ __name((op) => (component) => {
375
+ if (!(!component || component.d === 0 || component.d === "")) if (op.length === 0)
376
+ op.push(component);
377
+ else if (typeof component == typeof op[op.length - 1])
378
+ if (typeof component == "object") {
379
+ const last = op[op.length - 1];
380
+ last.d = typeof last.d == "string" && typeof component.d == "string" ? last.d + component.d : exports.dlen(last.d) + exports.dlen(component.d);
367
381
  } else
368
- f[f.length - 1] += _;
382
+ op[op.length - 1] += component;
369
383
  else
370
- f.push(_);
371
- }, E = (f) => typeof f == "number" ? f : typeof f == "string" ? e.strPosToUni(f) : typeof f.d == "number" ? f.d : e.strPosToUni(f.d);
372
- n.uniSlice = (f, _, w) => {
373
- const L = e.uniToStrPos(f, _), z = w == null ? 1 / 0 : e.uniToStrPos(f, w);
374
- return f.slice(L, z);
384
+ op.push(component);
385
+ }, "makeAppend"), componentLength = /* @__PURE__ */ __name((c) => typeof c == "number" ? c : typeof c == "string" ? unicount_1.strPosToUni(c) : typeof c.d == "number" ? c.d : unicount_1.strPosToUni(c.d), "componentLength");
386
+ exports.uniSlice = (s, startUni, endUni) => {
387
+ const start = unicount_1.uniToStrPos(s, startUni), end = endUni == null ? 1 / 0 : unicount_1.uniToStrPos(s, endUni);
388
+ return s.slice(start, end);
375
389
  };
376
- const W = (f, _, w) => typeof f == "number" ? w == null ? f - _ : Math.min(f, w) - _ : n.uniSlice(f, _, w), O = (f) => {
377
- let _ = 0, w = 0;
378
- return { take: (H, De) => {
379
- if (_ === f.length)
380
- return H === -1 ? null : H;
381
- const ue = f[_];
382
- let ne;
383
- if (typeof ue == "number")
384
- return H === -1 || ue - w <= H ? (ne = ue - w, ++_, w = 0, ne) : (w += H, H);
385
- if (typeof ue == "string") {
386
- if (H === -1 || De === "i" || e.strPosToUni(ue.slice(w)) <= H)
387
- return ne = ue.slice(w), ++_, w = 0, ne;
390
+ const dslice = /* @__PURE__ */ __name((d, start, end) => typeof d == "number" ? end == null ? d - start : Math.min(d, end) - start : exports.uniSlice(d, start, end), "dslice"), makeTake = /* @__PURE__ */ __name((op) => {
391
+ let idx = 0, offset = 0;
392
+ return { take: /* @__PURE__ */ __name((n, indivisableField) => {
393
+ if (idx === op.length)
394
+ return n === -1 ? null : n;
395
+ const c = op[idx];
396
+ let part;
397
+ if (typeof c == "number")
398
+ return n === -1 || c - offset <= n ? (part = c - offset, ++idx, offset = 0, part) : (offset += n, n);
399
+ if (typeof c == "string") {
400
+ if (n === -1 || indivisableField === "i" || unicount_1.strPosToUni(c.slice(offset)) <= n)
401
+ return part = c.slice(offset), ++idx, offset = 0, part;
388
402
  {
389
- const ae = w + e.uniToStrPos(ue.slice(w), H);
390
- return ne = ue.slice(w, ae), w = ae, ne;
403
+ const offset2 = offset + unicount_1.uniToStrPos(c.slice(offset), n);
404
+ return part = c.slice(offset, offset2), offset = offset2, part;
391
405
  }
392
406
  } else {
393
- if (H === -1 || De === "d" || n.dlen(ue.d) - w <= H)
394
- return ne = { d: W(ue.d, w) }, ++_, w = 0, ne;
407
+ if (n === -1 || indivisableField === "d" || exports.dlen(c.d) - offset <= n)
408
+ return part = { d: dslice(c.d, offset) }, ++idx, offset = 0, part;
395
409
  {
396
- let ae = W(ue.d, w, w + H);
397
- return w += H, { d: ae };
410
+ let result = dslice(c.d, offset, offset + n);
411
+ return offset += n, { d: result };
398
412
  }
399
413
  }
400
- }, peek: () => f[_] };
401
- }, o = (f) => (f.length > 0 && typeof f[f.length - 1] == "number" && f.pop(), f);
402
- function c(f, _, w) {
403
- if (w !== "left" && w !== "right")
404
- throw Error("side (" + w + ") must be 'left' or 'right'");
405
- t(f), t(_);
406
- const L = [], z = a(L), { take: H, peek: De } = O(f);
407
- for (let ne = 0; ne < _.length; ne++) {
408
- const ae = _[ne];
409
- let ge, Ae;
410
- switch (typeof ae) {
414
+ }, "take"), peek: /* @__PURE__ */ __name(() => op[idx], "peek") };
415
+ }, "makeTake"), trim = /* @__PURE__ */ __name((op) => (op.length > 0 && typeof op[op.length - 1] == "number" && op.pop(), op), "trim");
416
+ function transform(op1, op2, side) {
417
+ if (side !== "left" && side !== "right")
418
+ throw Error("side (" + side + ") must be 'left' or 'right'");
419
+ checkOp(op1), checkOp(op2);
420
+ const newOp = [], append = makeAppend(newOp), { take, peek } = makeTake(op1);
421
+ for (let i = 0; i < op2.length; i++) {
422
+ const c2 = op2[i];
423
+ let length, c1;
424
+ switch (typeof c2) {
411
425
  case "number":
412
- for (ge = ae; ge > 0; )
413
- Ae = H(ge, "i"), z(Ae), typeof Ae != "string" && (ge -= E(Ae));
426
+ for (length = c2; length > 0; )
427
+ c1 = take(length, "i"), append(c1), typeof c1 != "string" && (length -= componentLength(c1));
414
428
  break;
415
429
  case "string":
416
- w === "left" && typeof De() == "string" && z(H(-1)), z(e.strPosToUni(ae));
430
+ side === "left" && typeof peek() == "string" && append(take(-1)), append(unicount_1.strPosToUni(c2));
417
431
  break;
418
432
  case "object":
419
- for (ge = n.dlen(ae.d); ge > 0; )
420
- switch (Ae = H(ge, "i"), typeof Ae) {
433
+ for (length = exports.dlen(c2.d); length > 0; )
434
+ switch (c1 = take(length, "i"), typeof c1) {
421
435
  case "number":
422
- ge -= Ae;
436
+ length -= c1;
423
437
  break;
424
438
  case "string":
425
- z(Ae);
439
+ append(c1);
426
440
  break;
427
441
  case "object":
428
- ge -= n.dlen(Ae.d);
442
+ length -= exports.dlen(c1.d);
429
443
  }
430
444
  break;
431
445
  }
432
446
  }
433
- let ue;
434
- for (; ue = H(-1); )
435
- z(ue);
436
- return o(L);
447
+ let c;
448
+ for (; c = take(-1); )
449
+ append(c);
450
+ return trim(newOp);
437
451
  }
438
- function h(f, _) {
439
- t(f), t(_);
440
- const w = [], L = a(w), { take: z } = O(f);
441
- for (let De = 0; De < _.length; De++) {
442
- const ue = _[De];
443
- let ne, ae;
444
- switch (typeof ue) {
452
+ __name(transform, "transform");
453
+ function compose(op1, op2) {
454
+ checkOp(op1), checkOp(op2);
455
+ const result = [], append = makeAppend(result), { take } = makeTake(op1);
456
+ for (let i = 0; i < op2.length; i++) {
457
+ const component = op2[i];
458
+ let length, chunk;
459
+ switch (typeof component) {
445
460
  case "number":
446
- for (ne = ue; ne > 0; )
447
- ae = z(ne, "d"), L(ae), typeof ae != "object" && (ne -= E(ae));
461
+ for (length = component; length > 0; )
462
+ chunk = take(length, "d"), append(chunk), typeof chunk != "object" && (length -= componentLength(chunk));
448
463
  break;
449
464
  case "string":
450
- L(ue);
465
+ append(component);
451
466
  break;
452
467
  case "object":
453
- ne = n.dlen(ue.d);
454
- let ge = 0;
455
- for (; ge < ne; )
456
- switch (ae = z(ne - ge, "d"), typeof ae) {
468
+ length = exports.dlen(component.d);
469
+ let offset = 0;
470
+ for (; offset < length; )
471
+ switch (chunk = take(length - offset, "d"), typeof chunk) {
457
472
  case "number":
458
- L({ d: W(ue.d, ge, ge + ae) }), ge += ae;
473
+ append({ d: dslice(component.d, offset, offset + chunk) }), offset += chunk;
459
474
  break;
460
475
  case "string":
461
- ge += e.strPosToUni(ae);
476
+ offset += unicount_1.strPosToUni(chunk);
462
477
  break;
463
478
  case "object":
464
- L(ae);
479
+ append(chunk);
465
480
  }
466
481
  break;
467
482
  }
468
483
  }
469
- let H;
470
- for (; H = z(-1); )
471
- L(H);
472
- return o(w);
484
+ let c;
485
+ for (; c = take(-1); )
486
+ append(c);
487
+ return trim(result);
473
488
  }
474
- const R = (f, _) => {
475
- let w = 0;
476
- for (let L = 0; L < _.length && f > w; L++) {
477
- const z = _[L];
478
- switch (typeof z) {
489
+ __name(compose, "compose");
490
+ const transformPosition = /* @__PURE__ */ __name((cursor2, op) => {
491
+ let pos = 0;
492
+ for (let i = 0; i < op.length && cursor2 > pos; i++) {
493
+ const c = op[i];
494
+ switch (typeof c) {
479
495
  case "number": {
480
- w += z;
496
+ pos += c;
481
497
  break;
482
498
  }
483
499
  case "string":
484
- const H = e.strPosToUni(z);
485
- w += H, f += H;
500
+ const offset = unicount_1.strPosToUni(c);
501
+ pos += offset, cursor2 += offset;
486
502
  break;
487
503
  case "object":
488
- f -= Math.min(n.dlen(z.d), f - w);
504
+ cursor2 -= Math.min(exports.dlen(c.d), cursor2 - pos);
489
505
  break;
490
506
  }
491
507
  }
492
- return f;
493
- }, Z = (f, _) => typeof f == "number" ? R(f, _) : f.map((w) => R(w, _));
494
- function pe(f, _, w) {
495
- return s(f, (L, z) => typeof L == "object" && typeof L.d == "number" ? { d: w.slice(_, z, z + L.d) } : L);
508
+ return cursor2;
509
+ }, "transformPosition"), transformSelection = /* @__PURE__ */ __name((selection, op) => typeof selection == "number" ? transformPosition(selection, op) : selection.map((s) => transformPosition(s, op)), "transformSelection");
510
+ function makeInvertible(op, doc, ropeImpl) {
511
+ return mapOp(op, (c, prePos) => typeof c == "object" && typeof c.d == "number" ? { d: ropeImpl.slice(doc, prePos, prePos + c.d) } : c);
496
512
  }
497
- function J(f) {
498
- return s(f, (_) => {
499
- switch (typeof _) {
513
+ __name(makeInvertible, "makeInvertible");
514
+ function invert(op) {
515
+ return mapOp(op, (c) => {
516
+ switch (typeof c) {
500
517
  case "object":
501
- if (typeof _.d == "number")
518
+ if (typeof c.d == "number")
502
519
  throw Error("Cannot invert text op: Deleted characters missing from operation. makeInvertible must be called first.");
503
- return _.d;
520
+ return c.d;
504
521
  case "string":
505
- return { d: _ };
522
+ return { d: c };
506
523
  case "number":
507
- return _;
524
+ return c;
508
525
  }
509
526
  });
510
527
  }
511
- function Ie(f) {
512
- return s(f, (_) => typeof _ == "object" && typeof _.d == "string" ? { d: e.strPosToUni(_.d) } : _);
528
+ __name(invert, "invert");
529
+ function stripInvertible(op) {
530
+ return mapOp(op, (c) => typeof c == "object" && typeof c.d == "string" ? { d: unicount_1.strPosToUni(c.d) } : c);
513
531
  }
514
- function xe(f) {
515
- let _ = !0;
516
- return i(f, (w) => {
517
- typeof w == "object" && typeof w.d == "number" && (_ = !1);
518
- }), _;
532
+ __name(stripInvertible, "stripInvertible");
533
+ function isInvertible(op) {
534
+ let invertible = !0;
535
+ return eachOp(op, (c) => {
536
+ typeof c == "object" && typeof c.d == "number" && (invertible = !1);
537
+ }), invertible;
519
538
  }
520
- function ve(f) {
539
+ __name(isInvertible, "isInvertible");
540
+ function makeType(ropeImpl) {
521
541
  return {
522
542
  name: "text-unicode",
523
543
  uri: "http://sharejs.org/types/text-unicode",
524
- trim: o,
525
- normalize: l,
526
- checkOp: t,
544
+ trim,
545
+ normalize,
546
+ checkOp,
527
547
  /** Create a new text snapshot.
528
548
  *
529
549
  * @param {string} initial - initial snapshot data. Optional. Defaults to ''.
530
550
  * @returns {Snap} Initial document snapshot object
531
551
  */
532
- create(_ = "") {
533
- if (typeof _ != "string")
552
+ create(initial = "") {
553
+ if (typeof initial != "string")
534
554
  throw Error("Initial data must be a string");
535
- return f.create(_);
555
+ return ropeImpl.create(initial);
536
556
  },
537
557
  /** Apply an operation to a document snapshot
538
558
  */
539
- apply(_, w) {
540
- t(w);
541
- const L = f.builder(_);
542
- for (let z = 0; z < w.length; z++) {
543
- const H = w[z];
544
- switch (typeof H) {
559
+ apply(str, op) {
560
+ checkOp(op);
561
+ const builder = ropeImpl.builder(str);
562
+ for (let i = 0; i < op.length; i++) {
563
+ const component = op[i];
564
+ switch (typeof component) {
545
565
  case "number":
546
- L.skip(H);
566
+ builder.skip(component);
547
567
  break;
548
568
  case "string":
549
- L.append(H);
569
+ builder.append(component);
550
570
  break;
551
571
  case "object":
552
- L.del(n.dlen(H.d));
572
+ builder.del(exports.dlen(component.d));
553
573
  break;
554
574
  }
555
575
  }
556
- return L.build();
576
+ return builder.build();
557
577
  },
558
- transform: c,
559
- compose: h,
560
- transformPosition: R,
561
- transformSelection: Z,
562
- isInvertible: xe,
563
- makeInvertible(_, w) {
564
- return pe(_, w, f);
578
+ transform,
579
+ compose,
580
+ transformPosition,
581
+ transformSelection,
582
+ isInvertible,
583
+ makeInvertible(op, doc) {
584
+ return makeInvertible(op, doc, ropeImpl);
565
585
  },
566
- stripInvertible: Ie,
567
- invert: J,
568
- invertWithDoc(_, w) {
569
- return J(pe(_, w, f));
586
+ stripInvertible,
587
+ invert,
588
+ invertWithDoc(op, doc) {
589
+ return invert(makeInvertible(op, doc, ropeImpl));
570
590
  },
571
- isNoop: (_) => _.length === 0
591
+ isNoop: /* @__PURE__ */ __name((op) => op.length === 0, "isNoop")
572
592
  };
573
593
  }
574
- n.default = ve;
575
- }(st)), st;
594
+ __name(makeType, "makeType"), exports.default = makeType;
595
+ }(type)), type;
576
596
  }
577
- var Qe = {}, mt;
578
- function xt() {
579
- if (mt) return Qe;
580
- mt = 1, Object.defineProperty(Qe, "__esModule", { value: !0 });
581
- const n = at(), e = pt();
582
- function t(i, s) {
597
+ __name(requireType, "requireType");
598
+ var api = {}, hasRequiredApi;
599
+ function requireApi() {
600
+ if (hasRequiredApi) return api;
601
+ hasRequiredApi = 1, Object.defineProperty(api, "__esModule", { value: !0 });
602
+ const type_1 = requireType(), unicount_1 = requireUnicount();
603
+ function api$1(getSnapshot, submitOp) {
583
604
  return {
584
605
  // Returns the text content of the document
585
- get: i,
606
+ get: getSnapshot,
586
607
  // Returns the number of characters in the string
587
608
  getLength() {
588
- return i().length;
609
+ return getSnapshot().length;
589
610
  },
590
611
  // Insert the specified text at the given position in the document
591
- insert(d, l, a) {
592
- const E = e.strPosToUni(i(), d);
593
- return s([E, l], a);
612
+ insert(pos, text, callback) {
613
+ const uniPos = unicount_1.strPosToUni(getSnapshot(), pos);
614
+ return submitOp([uniPos, text], callback);
594
615
  },
595
- remove(d, l, a) {
596
- const E = e.strPosToUni(i(), d);
597
- return s([E, { d: l }], a);
616
+ remove(pos, lengthOrContent, callback) {
617
+ const uniPos = unicount_1.strPosToUni(getSnapshot(), pos);
618
+ return submitOp([uniPos, { d: lengthOrContent }], callback);
598
619
  },
599
620
  // When you use this API, you should implement these two methods
600
621
  // in your editing context.
601
622
  //onInsert: function(pos, text) {},
602
623
  //onRemove: function(pos, removedLength) {},
603
- _onOp(d) {
604
- n.eachOp(d, (l, a, E) => {
605
- switch (typeof l) {
624
+ _onOp(op) {
625
+ type_1.eachOp(op, (component, prePos, postPos) => {
626
+ switch (typeof component) {
606
627
  case "string":
607
- this.onInsert && this.onInsert(E, l);
628
+ this.onInsert && this.onInsert(postPos, component);
608
629
  break;
609
630
  case "object":
610
- const W = n.dlen(l.d);
611
- this.onRemove && this.onRemove(E, W);
631
+ const dl = type_1.dlen(component.d);
632
+ this.onRemove && this.onRemove(postPos, dl);
612
633
  }
613
634
  });
614
635
  },
@@ -616,1044 +637,1062 @@ function xt() {
616
637
  onRemove: null
617
638
  };
618
639
  }
619
- return Qe.default = t, t.provides = { text: !0 }, Qe;
640
+ return __name(api$1, "api$1"), api.default = api$1, api$1.provides = { text: !0 }, api;
620
641
  }
621
- var bt;
622
- function Lt() {
623
- return bt || (bt = 1, function(n) {
624
- var e = Ce && Ce.__createBinding || (Object.create ? function(c, h, R, Z) {
625
- Z === void 0 && (Z = R), Object.defineProperty(c, Z, { enumerable: !0, get: function() {
626
- return h[R];
627
- } });
628
- } : function(c, h, R, Z) {
629
- Z === void 0 && (Z = R), c[Z] = h[R];
630
- }), t = Ce && Ce.__setModuleDefault || (Object.create ? function(c, h) {
631
- Object.defineProperty(c, "default", { enumerable: !0, value: h });
632
- } : function(c, h) {
633
- c.default = h;
634
- }), i = Ce && Ce.__importStar || function(c) {
635
- if (c && c.__esModule) return c;
636
- var h = {};
637
- if (c != null) for (var R in c) Object.hasOwnProperty.call(c, R) && e(h, c, R);
638
- return t(h, c), h;
639
- }, s = Ce && Ce.__importDefault || function(c) {
640
- return c && c.__esModule ? c : { default: c };
642
+ __name(requireApi, "requireApi");
643
+ var hasRequiredDist;
644
+ function requireDist() {
645
+ return hasRequiredDist || (hasRequiredDist = 1, function(exports) {
646
+ var __createBinding = commonjsGlobal && commonjsGlobal.__createBinding || (Object.create ? function(o, m, k, k2) {
647
+ k2 === void 0 && (k2 = k), Object.defineProperty(o, k2, { enumerable: !0, get: /* @__PURE__ */ __name(function() {
648
+ return m[k];
649
+ }, "get") });
650
+ } : function(o, m, k, k2) {
651
+ k2 === void 0 && (k2 = k), o[k2] = m[k];
652
+ }), __setModuleDefault = commonjsGlobal && commonjsGlobal.__setModuleDefault || (Object.create ? function(o, v) {
653
+ Object.defineProperty(o, "default", { enumerable: !0, value: v });
654
+ } : function(o, v) {
655
+ o.default = v;
656
+ }), __importStar = commonjsGlobal && commonjsGlobal.__importStar || function(mod) {
657
+ if (mod && mod.__esModule) return mod;
658
+ var result = {};
659
+ if (mod != null) for (var k in mod) Object.hasOwnProperty.call(mod, k) && __createBinding(result, mod, k);
660
+ return __setModuleDefault(result, mod), result;
661
+ }, __importDefault = commonjsGlobal && commonjsGlobal.__importDefault || function(mod) {
662
+ return mod && mod.__esModule ? mod : { default: mod };
641
663
  };
642
- Object.defineProperty(n, "__esModule", { value: !0 }), n.type = n.remove = n.insert = void 0;
643
- const d = pt(), l = i(at()), a = s(xt()), E = {
644
- create(c) {
645
- return c;
664
+ Object.defineProperty(exports, "__esModule", { value: !0 }), exports.type = exports.remove = exports.insert = void 0;
665
+ const unicount_1 = requireUnicount(), type_1 = __importStar(requireType()), api_1 = __importDefault(requireApi()), ropeImplUnicodeString = {
666
+ create(s) {
667
+ return s;
646
668
  },
647
- toString(c) {
648
- return c;
669
+ toString(s) {
670
+ return s;
649
671
  },
650
- builder(c) {
651
- if (typeof c != "string")
652
- throw Error("Invalid document snapshot: " + c);
653
- const h = [];
672
+ builder(oldDoc) {
673
+ if (typeof oldDoc != "string")
674
+ throw Error("Invalid document snapshot: " + oldDoc);
675
+ const newDoc = [];
654
676
  return {
655
- skip(R) {
656
- let Z = d.uniToStrPos(c, R);
657
- if (Z > c.length)
677
+ skip(n) {
678
+ let offset = unicount_1.uniToStrPos(oldDoc, n);
679
+ if (offset > oldDoc.length)
658
680
  throw Error("The op is too long for this document");
659
- h.push(c.slice(0, Z)), c = c.slice(Z);
681
+ newDoc.push(oldDoc.slice(0, offset)), oldDoc = oldDoc.slice(offset);
660
682
  },
661
- append(R) {
662
- h.push(R);
683
+ append(s) {
684
+ newDoc.push(s);
663
685
  },
664
- del(R) {
665
- c = c.slice(d.uniToStrPos(c, R));
686
+ del(n) {
687
+ oldDoc = oldDoc.slice(unicount_1.uniToStrPos(oldDoc, n));
666
688
  },
667
689
  build() {
668
- return h.join("") + c;
690
+ return newDoc.join("") + oldDoc;
669
691
  }
670
692
  };
671
693
  },
672
- slice: l.uniSlice
673
- }, W = l.default(E), O = Object.assign(Object.assign({}, W), { api: a.default });
674
- n.type = O, n.insert = (c, h) => h.length === 0 ? [] : c === 0 ? [h] : [c, h], n.remove = (c, h) => l.dlen(h) === 0 ? [] : c === 0 ? [{ d: h }] : [c, { d: h }];
675
- var o = at();
676
- Object.defineProperty(n, "makeType", { enumerable: !0, get: function() {
677
- return o.default;
678
- } });
679
- }(it)), it;
694
+ slice: type_1.uniSlice
695
+ }, textString = type_1.default(ropeImplUnicodeString), type2 = Object.assign(Object.assign({}, textString), { api: api_1.default });
696
+ exports.type = type2, exports.insert = (pos, text) => text.length === 0 ? [] : pos === 0 ? [text] : [pos, text], exports.remove = (pos, textOrLen) => type_1.dlen(textOrLen) === 0 ? [] : pos === 0 ? [{ d: textOrLen }] : [pos, { d: textOrLen }];
697
+ var type_2 = requireType();
698
+ Object.defineProperty(exports, "makeType", { enumerable: !0, get: /* @__PURE__ */ __name(function() {
699
+ return type_2.default;
700
+ }, "get") });
701
+ }(dist)), dist;
680
702
  }
681
- (function(n) {
682
- var e = Ce && Ce.__importDefault || function(r) {
683
- return r && r.__esModule ? r : {
684
- default: r
703
+ __name(requireDist, "requireDist");
704
+ (function(exports) {
705
+ var __importDefault = commonjsGlobal && commonjsGlobal.__importDefault || function(mod) {
706
+ return mod && mod.__esModule ? mod : {
707
+ default: mod
685
708
  };
686
709
  };
687
- Object.defineProperty(n, "__esModule", {
710
+ Object.defineProperty(exports, "__esModule", {
688
711
  value: !0
689
- }), n.editOp = n.replaceOp = n.insertOp = n.moveOp = n.removeOp = n.type = void 0;
690
- const t = e(ct), i = e(dt), s = ft, d = ht;
691
- function l(r, u) {
692
- if (!r) throw new Error(u);
712
+ }), exports.editOp = exports.replaceOp = exports.insertOp = exports.moveOp = exports.removeOp = exports.type = void 0;
713
+ const deepEqual_js_1 = __importDefault(deepEqual$1), deepClone_js_1 = __importDefault(deepClone$1), cursor_js_1 = cursor, types_js_1 = types;
714
+ function assert(pred, msg) {
715
+ if (!pred) throw new Error(msg);
693
716
  }
694
- n.type = {
717
+ __name(assert, "assert"), exports.type = {
695
718
  name: "json1",
696
719
  uri: "http://sharejs.org/types/JSONv1",
697
- readCursor: s.readCursor,
698
- writeCursor: s.writeCursor,
699
- create: (r) => r,
700
- isNoop: (r) => r == null,
701
- setDebug(r) {
720
+ readCursor: cursor_js_1.readCursor,
721
+ writeCursor: cursor_js_1.writeCursor,
722
+ create: /* @__PURE__ */ __name((data) => data, "create"),
723
+ isNoop: /* @__PURE__ */ __name((op) => op == null, "isNoop"),
724
+ setDebug(val) {
702
725
  },
703
- registerSubtype: J,
704
- checkValidOp: z,
705
- normalize: H,
706
- apply: De,
707
- transformPosition: ue,
708
- compose: ne,
709
- tryTransform: nt,
710
- transform: Dt,
711
- makeInvertible: Ae,
712
- invert: ae,
713
- invertWithDoc: Et,
714
- RM_UNEXPECTED_CONTENT: d.ConflictType.RM_UNEXPECTED_CONTENT,
715
- DROP_COLLISION: d.ConflictType.DROP_COLLISION,
716
- BLACKHOLE: d.ConflictType.BLACKHOLE,
717
- transformNoConflict: (r, u, y) => _t(() => !0, r, u, y),
718
- typeAllowingConflictsPred: (r) => Object.assign(Object.assign({}, n.type), {
719
- transform: (u, y, D) => _t(r, u, y, D)
720
- })
721
- };
722
- const a = (r) => r ? r.getComponent() : null;
723
- function E(r) {
724
- return r && typeof r == "object" && !Array.isArray(r);
725
- }
726
- const W = (r) => Array.isArray(r) ? r.slice() : r !== null && typeof r == "object" ? Object.assign({}, r) : r, O = (r) => r && (r.p != null || r.r !== void 0), o = (r) => r && (r.d != null || r.i !== void 0);
727
- function c(r, u) {
728
- return l(r != null), typeof u == "number" ? (l(Array.isArray(r), "Invalid key - child is not an array"), (r = r.slice()).splice(u, 1)) : (l(E(r), "Invalid key - child is not an object"), delete (r = Object.assign({}, r))[u]), r;
729
- }
730
- function h(r, u, y) {
731
- return typeof u == "number" ? (l(r != null, "Container is missing for key"), l(Array.isArray(r), "Cannot use numerical key for object container"), l(r.length >= u, "Cannot insert into out of bounds index"), r.splice(u, 0, y)) : (l(E(r), "Cannot insert into missing item"), l(r[u] === void 0, "Trying to overwrite value at key. Your op needs to remove it first"), r[u] = y), y;
732
- }
733
- n.removeOp = (r, u = !0) => s.writeCursor().writeAtPath(r, "r", u).get(), n.moveOp = (r, u) => s.writeCursor().writeMove(r, u).get(), n.insertOp = (r, u) => s.writeCursor().writeAtPath(r, "i", u).get(), n.replaceOp = (r, u, y) => s.writeCursor().at(r, (D) => {
734
- D.write("r", u), D.write("i", y);
735
- }).get(), n.editOp = (r, u, y, D = !1) => s.writeCursor().at(r, (m) => _(m, u, y, D)).get();
736
- const R = (r, u) => r != null && (typeof u == "number" ? Array.isArray(r) : typeof r == "object"), Z = (r, u) => R(r, u) ? r[u] : void 0, pe = {};
737
- function J(r) {
738
- let u = r.type ? r.type : r;
739
- u.name && (pe[u.name] = u), u.uri && (pe[u.uri] = u);
740
- }
741
- const Ie = (r) => {
742
- const u = pe[r];
743
- if (u) return u;
744
- throw Error("Missing type: " + r);
726
+ registerSubtype,
727
+ checkValidOp,
728
+ normalize,
729
+ apply,
730
+ transformPosition,
731
+ compose,
732
+ tryTransform,
733
+ transform,
734
+ makeInvertible,
735
+ invert,
736
+ invertWithDoc,
737
+ RM_UNEXPECTED_CONTENT: types_js_1.ConflictType.RM_UNEXPECTED_CONTENT,
738
+ DROP_COLLISION: types_js_1.ConflictType.DROP_COLLISION,
739
+ BLACKHOLE: types_js_1.ConflictType.BLACKHOLE,
740
+ transformNoConflict: /* @__PURE__ */ __name((op1, op2, side) => transformWithConflictsPred(() => !0, op1, op2, side), "transformNoConflict"),
741
+ typeAllowingConflictsPred: /* @__PURE__ */ __name((allowConflict) => Object.assign(Object.assign({}, exports.type), {
742
+ transform: /* @__PURE__ */ __name((op1, op2, side) => transformWithConflictsPred(allowConflict, op1, op2, side), "transform")
743
+ }), "typeAllowingConflictsPred")
745
744
  };
746
- J(Lt());
747
- const xe = (r, u) => r + u;
748
- J({
745
+ const getComponent = /* @__PURE__ */ __name((r) => r ? r.getComponent() : null, "getComponent");
746
+ function isObject(o) {
747
+ return o && typeof o == "object" && !Array.isArray(o);
748
+ }
749
+ __name(isObject, "isObject");
750
+ const shallowClone = /* @__PURE__ */ __name((obj) => Array.isArray(obj) ? obj.slice() : obj !== null && typeof obj == "object" ? Object.assign({}, obj) : obj, "shallowClone"), hasPick = /* @__PURE__ */ __name((c) => c && (c.p != null || c.r !== void 0), "hasPick"), hasDrop = /* @__PURE__ */ __name((c) => c && (c.d != null || c.i !== void 0), "hasDrop");
751
+ function removeChild(container, key) {
752
+ return assert(container != null), typeof key == "number" ? (assert(Array.isArray(container), "Invalid key - child is not an array"), (container = container.slice()).splice(key, 1)) : (assert(isObject(container), "Invalid key - child is not an object"), delete (container = Object.assign({}, container))[key]), container;
753
+ }
754
+ __name(removeChild, "removeChild");
755
+ function insertChildMut(container, key, value) {
756
+ return typeof key == "number" ? (assert(container != null, "Container is missing for key"), assert(Array.isArray(container), "Cannot use numerical key for object container"), assert(container.length >= key, "Cannot insert into out of bounds index"), container.splice(key, 0, value)) : (assert(isObject(container), "Cannot insert into missing item"), assert(container[key] === void 0, "Trying to overwrite value at key. Your op needs to remove it first"), container[key] = value), value;
757
+ }
758
+ __name(insertChildMut, "insertChildMut"), exports.removeOp = (path, value = !0) => cursor_js_1.writeCursor().writeAtPath(path, "r", value).get(), exports.moveOp = (from, to) => cursor_js_1.writeCursor().writeMove(from, to).get(), exports.insertOp = (path, value) => cursor_js_1.writeCursor().writeAtPath(path, "i", value).get(), exports.replaceOp = (path, oldVal, newVal) => cursor_js_1.writeCursor().at(path, (w) => {
759
+ w.write("r", oldVal), w.write("i", newVal);
760
+ }).get(), exports.editOp = (path, type2, subOp, preserveNoop = !1) => cursor_js_1.writeCursor().at(path, (w) => writeEdit(w, type2, subOp, preserveNoop)).get();
761
+ const isValidKey = /* @__PURE__ */ __name((container, key) => container != null && (typeof key == "number" ? Array.isArray(container) : typeof container == "object"), "isValidKey"), maybeGetChild = /* @__PURE__ */ __name((container, key) => isValidKey(container, key) ? container[key] : void 0, "maybeGetChild"), subtypes = {};
762
+ function registerSubtype(subtype) {
763
+ let _subtype = subtype.type ? subtype.type : subtype;
764
+ _subtype.name && (subtypes[_subtype.name] = _subtype), _subtype.uri && (subtypes[_subtype.uri] = _subtype);
765
+ }
766
+ __name(registerSubtype, "registerSubtype");
767
+ const typeOrThrow = /* @__PURE__ */ __name((name) => {
768
+ const type2 = subtypes[name];
769
+ if (type2) return type2;
770
+ throw Error("Missing type: " + name);
771
+ }, "typeOrThrow");
772
+ registerSubtype(requireDist());
773
+ const add = /* @__PURE__ */ __name((a, b) => a + b, "add");
774
+ registerSubtype({
749
775
  name: "number",
750
- apply: xe,
751
- compose: xe,
752
- invert: (r) => -r,
753
- transform: (r) => r
776
+ apply: add,
777
+ compose: add,
778
+ invert: /* @__PURE__ */ __name((n) => -n, "invert"),
779
+ transform: /* @__PURE__ */ __name((a) => a, "transform")
754
780
  });
755
- const ve = (r) => r == null ? null : r.et ? Ie(r.et) : r.es ? pe["text-unicode"] : r.ena != null ? pe.number : null, f = (r) => r.es ? r.es : r.ena != null ? r.ena : r.e, _ = (r, u, y, D = !1) => {
756
- const [m, C] = typeof u == "string" ? [Ie(u), u] : [u, u.name];
757
- !D && m.isNoop && m.isNoop(y) || (C === "number" ? r.write("ena", y) : C === "text-unicode" ? r.write("es", y) : (r.write("et", C), r.write("e", y)));
758
- };
759
- function w(r) {
760
- l(typeof r == "number"), l(r >= 0), l(r === (0 | r));
761
- }
762
- function L(r) {
763
- typeof r == "number" ? w(r) : l(typeof r == "string");
764
- }
765
- function z(r) {
766
- if (r === null) return;
767
- const u = /* @__PURE__ */ new Set(), y = /* @__PURE__ */ new Set(), D = (C) => {
768
- let $ = !0, T = !1;
769
- for (let p in C) {
770
- const v = C[p];
771
- if ($ = !1, l(p === "p" || p === "r" || p === "d" || p === "i" || p === "e" || p === "es" || p === "ena" || p === "et", "Invalid component item '" + p + "'"), p === "p") w(v), l(!u.has(v)), u.add(v), l(C.r === void 0);
772
- else if (p === "d") w(v), l(!y.has(v)), y.add(v), l(C.i === void 0);
773
- else if (p === "e" || p === "es" || p === "ena") {
774
- l(!T), T = !0;
775
- const b = ve(C);
776
- l(b, "Missing type in edit"), b.checkValidOp && b.checkValidOp(f(C));
781
+ const getEditType = /* @__PURE__ */ __name((c) => c == null ? null : c.et ? typeOrThrow(c.et) : c.es ? subtypes["text-unicode"] : c.ena != null ? subtypes.number : null, "getEditType"), getEdit = /* @__PURE__ */ __name((c) => c.es ? c.es : c.ena != null ? c.ena : c.e, "getEdit"), writeEdit = /* @__PURE__ */ __name((w, typeOrName, edit, preserveNoop = !1) => {
782
+ const [type2, name] = typeof typeOrName == "string" ? [typeOrThrow(typeOrName), typeOrName] : [typeOrName, typeOrName.name];
783
+ !preserveNoop && type2.isNoop && type2.isNoop(edit) || (name === "number" ? w.write("ena", edit) : name === "text-unicode" ? w.write("es", edit) : (w.write("et", name), w.write("e", edit)));
784
+ }, "writeEdit");
785
+ function checkNonNegInteger(n) {
786
+ assert(typeof n == "number"), assert(n >= 0), assert(n === (0 | n));
787
+ }
788
+ __name(checkNonNegInteger, "checkNonNegInteger");
789
+ function checkScalar(s) {
790
+ typeof s == "number" ? checkNonNegInteger(s) : assert(typeof s == "string");
791
+ }
792
+ __name(checkScalar, "checkScalar");
793
+ function checkValidOp(op) {
794
+ if (op === null) return;
795
+ const pickedSlots = /* @__PURE__ */ new Set(), droppedSlots = /* @__PURE__ */ new Set(), checkComponent = /* @__PURE__ */ __name((e) => {
796
+ let empty = !0, hasEdit = !1;
797
+ for (let k in e) {
798
+ const v = e[k];
799
+ if (empty = !1, assert(k === "p" || k === "r" || k === "d" || k === "i" || k === "e" || k === "es" || k === "ena" || k === "et", "Invalid component item '" + k + "'"), k === "p") checkNonNegInteger(v), assert(!pickedSlots.has(v)), pickedSlots.add(v), assert(e.r === void 0);
800
+ else if (k === "d") checkNonNegInteger(v), assert(!droppedSlots.has(v)), droppedSlots.add(v), assert(e.i === void 0);
801
+ else if (k === "e" || k === "es" || k === "ena") {
802
+ assert(!hasEdit), hasEdit = !0;
803
+ const t = getEditType(e);
804
+ assert(t, "Missing type in edit"), t.checkValidOp && t.checkValidOp(getEdit(e));
777
805
  }
778
806
  }
779
- l(!$);
780
- }, m = (C, $, T) => {
781
- if (!Array.isArray(C)) throw Error("Op must be null or a list");
782
- if (C.length === 0) throw Error("Empty descent");
783
- $ || L(C[0]);
784
- let p = 1, v = 0, b = 0;
785
- for (let I = 0; I < C.length; I++) {
786
- const j = C[I];
787
- if (l(j != null), Array.isArray(j)) {
788
- const G = m(j, !1);
789
- if (v) {
790
- const g = typeof b, N = typeof G;
791
- g === N ? l(b < G, "descent keys are not in order") : l(g === "number" && N === "string");
807
+ assert(!empty);
808
+ }, "checkComponent"), checkDescent = /* @__PURE__ */ __name((descent, isRoot, removed) => {
809
+ if (!Array.isArray(descent)) throw Error("Op must be null or a list");
810
+ if (descent.length === 0) throw Error("Empty descent");
811
+ isRoot || checkScalar(descent[0]);
812
+ let last = 1, numDescents = 0, lastKey = 0;
813
+ for (let i = 0; i < descent.length; i++) {
814
+ const d = descent[i];
815
+ if (assert(d != null), Array.isArray(d)) {
816
+ const key = checkDescent(d, !1);
817
+ if (numDescents) {
818
+ const t1 = typeof lastKey, t2 = typeof key;
819
+ t1 === t2 ? assert(lastKey < key, "descent keys are not in order") : assert(t1 === "number" && t2 === "string");
792
820
  }
793
- b = G, v++, p = 3;
794
- } else typeof j == "object" ? (l(p === 1, `Prev not scalar - instead ${p}`), D(j), p = 2) : (l(p !== 3), L(j), l(s.isValidPathItem(j), "Invalid path key"), p = 1);
821
+ lastKey = key, numDescents++, last = 3;
822
+ } else typeof d == "object" ? (assert(last === 1, `Prev not scalar - instead ${last}`), checkComponent(d), last = 2) : (assert(last !== 3), checkScalar(d), assert(cursor_js_1.isValidPathItem(d), "Invalid path key"), last = 1);
795
823
  }
796
- return l(v !== 1, "Operation makes multiple descents. Remove some []"), l(p === 2 || p === 3), C[0];
797
- };
798
- m(r, !0), l(u.size === y.size, "Mismatched picks and drops in op");
799
- for (let C = 0; C < u.size; C++) l(u.has(C)), l(y.has(C));
800
- }
801
- function H(r) {
802
- let u = 0, y = [];
803
- const D = s.writeCursor();
804
- return D.mergeTree(r, (m, C) => {
805
- const $ = ve(m);
806
- if ($) {
807
- const p = f(m);
808
- _(C, $, $.normalize ? $.normalize(p) : p);
824
+ return assert(numDescents !== 1, "Operation makes multiple descents. Remove some []"), assert(last === 2 || last === 3), descent[0];
825
+ }, "checkDescent");
826
+ checkDescent(op, !0), assert(pickedSlots.size === droppedSlots.size, "Mismatched picks and drops in op");
827
+ for (let i = 0; i < pickedSlots.size; i++) assert(pickedSlots.has(i)), assert(droppedSlots.has(i));
828
+ }
829
+ __name(checkValidOp, "checkValidOp");
830
+ function normalize(op) {
831
+ let nextSlot = 0, slotMap = [];
832
+ const w = cursor_js_1.writeCursor();
833
+ return w.mergeTree(op, (c, w2) => {
834
+ const t = getEditType(c);
835
+ if (t) {
836
+ const op2 = getEdit(c);
837
+ writeEdit(w2, t, t.normalize ? t.normalize(op2) : op2);
809
838
  }
810
- for (const p of ["r", "p", "i", "d"]) if (m[p] !== void 0) {
811
- const v = p === "p" || p === "d" ? (T = m[p], y[T] == null && (y[T] = u++), y[T]) : m[p];
812
- C.write(p, v);
839
+ for (const k of ["r", "p", "i", "d"]) if (c[k] !== void 0) {
840
+ const r = k === "p" || k === "d" ? (inSlot = c[k], slotMap[inSlot] == null && (slotMap[inSlot] = nextSlot++), slotMap[inSlot]) : c[k];
841
+ w2.write(k, r);
813
842
  }
814
- var T;
815
- }), D.get();
816
- }
817
- function De(r, u) {
818
- if (z(u), u === null) return r;
819
- const y = [];
820
- return function D(m, C) {
821
- let $ = m, T = 0, p = {
822
- root: m
823
- }, v = 0, b = p, I = "root";
824
- function j() {
825
- for (; v < T; v++) {
826
- let G = C[v];
827
- typeof G != "object" && (l(R(b, I)), b = b[I] = W(b[I]), I = G);
843
+ var inSlot;
844
+ }), w.get();
845
+ }
846
+ __name(normalize, "normalize");
847
+ function apply(snapshot, op) {
848
+ if (checkValidOp(op), op === null) return snapshot;
849
+ const held = [];
850
+ return (/* @__PURE__ */ __name(function drop(root, descent) {
851
+ let subDoc = root, i = 0, rootContainer = {
852
+ root
853
+ }, m = 0, container = rootContainer, key = "root";
854
+ function mut() {
855
+ for (; m < i; m++) {
856
+ let d = descent[m];
857
+ typeof d != "object" && (assert(isValidKey(container, key)), container = container[key] = shallowClone(container[key]), key = d);
828
858
  }
829
859
  }
830
- for (; T < C.length; T++) {
831
- const G = C[T];
832
- if (Array.isArray(G)) {
833
- const g = D($, G);
834
- g !== $ && g !== void 0 && (j(), $ = b[I] = g);
835
- } else if (typeof G == "object") {
836
- G.d != null ? (j(), $ = h(b, I, y[G.d])) : G.i !== void 0 && (j(), $ = h(b, I, G.i));
837
- const g = ve(G);
838
- if (g) j(), $ = b[I] = g.apply($, f(G));
839
- else if (G.e !== void 0) throw Error("Subtype " + G.et + " undefined");
840
- } else $ = Z($, G);
860
+ for (__name(mut, "mut"); i < descent.length; i++) {
861
+ const d = descent[i];
862
+ if (Array.isArray(d)) {
863
+ const child = drop(subDoc, d);
864
+ child !== subDoc && child !== void 0 && (mut(), subDoc = container[key] = child);
865
+ } else if (typeof d == "object") {
866
+ d.d != null ? (mut(), subDoc = insertChildMut(container, key, held[d.d])) : d.i !== void 0 && (mut(), subDoc = insertChildMut(container, key, d.i));
867
+ const t = getEditType(d);
868
+ if (t) mut(), subDoc = container[key] = t.apply(subDoc, getEdit(d));
869
+ else if (d.e !== void 0) throw Error("Subtype " + d.et + " undefined");
870
+ } else subDoc = maybeGetChild(subDoc, d);
841
871
  }
842
- return p.root;
843
- }(r = function D(m, C) {
844
- const $ = [];
845
- let T = 0;
846
- for (; T < C.length; T++) {
847
- const I = C[T];
848
- if (Array.isArray(I)) break;
849
- typeof I != "object" && ($.push(m), m = Z(m, I));
872
+ return rootContainer.root;
873
+ }, "drop"))(snapshot = (/* @__PURE__ */ __name(function pick(subDoc, descent) {
874
+ const stack = [];
875
+ let i = 0;
876
+ for (; i < descent.length; i++) {
877
+ const d = descent[i];
878
+ if (Array.isArray(d)) break;
879
+ typeof d != "object" && (stack.push(subDoc), subDoc = maybeGetChild(subDoc, d));
850
880
  }
851
- for (let I = C.length - 1; I >= T; I--) m = D(m, C[I]);
852
- for (--T; T >= 0; T--) {
853
- const I = C[T];
854
- if (typeof I != "object") {
855
- const j = $.pop();
856
- m = m === Z(j, I) ? j : m === void 0 ? c(j, I) : (v = I, b = m, (p = W(p = j))[v] = b, p);
857
- } else O(I) && (l(m !== void 0, "Cannot pick up or remove undefined"), I.p != null && (y[I.p] = m), m = void 0);
881
+ for (let j = descent.length - 1; j >= i; j--) subDoc = pick(subDoc, descent[j]);
882
+ for (--i; i >= 0; i--) {
883
+ const d = descent[i];
884
+ if (typeof d != "object") {
885
+ const container = stack.pop();
886
+ subDoc = subDoc === maybeGetChild(container, d) ? container : subDoc === void 0 ? removeChild(container, d) : (k = d, v = subDoc, (obj = shallowClone(obj = container))[k] = v, obj);
887
+ } else hasPick(d) && (assert(subDoc !== void 0, "Cannot pick up or remove undefined"), d.p != null && (held[d.p] = subDoc), subDoc = void 0);
858
888
  }
859
- var p, v, b;
860
- return m;
861
- }(r, u), u);
862
- }
863
- function ue(r, u) {
864
- r = r.slice(), z(u);
865
- const y = s.readCursor(u);
866
- let D, m, C = !1;
867
- const $ = [];
868
- for (let p = 0; ; p++) {
869
- const v = r[p], b = y.getComponent();
870
- if (b && (b.r !== void 0 ? C = !0 : b.p != null && (C = !1, D = b.p, m = p)), p >= r.length) break;
871
- let I = 0;
872
- const j = s.advancer(y, void 0, (g, N) => {
873
- O(N) && I++;
889
+ var obj, k, v;
890
+ return subDoc;
891
+ }, "pick"))(snapshot, op), op);
892
+ }
893
+ __name(apply, "apply");
894
+ function transformPosition(path, op) {
895
+ path = path.slice(), checkValidOp(op);
896
+ const r = cursor_js_1.readCursor(op);
897
+ let pickedAtSlot, pickIndex, removed = !1;
898
+ const advStack = [];
899
+ for (let i = 0; ; i++) {
900
+ const k = path[i], c = r.getComponent();
901
+ if (c && (c.r !== void 0 ? removed = !0 : c.p != null && (removed = !1, pickedAtSlot = c.p, pickIndex = i)), i >= path.length) break;
902
+ let pickOffset = 0;
903
+ const pickAdv = cursor_js_1.advancer(r, void 0, (k2, c2) => {
904
+ hasPick(c2) && pickOffset++;
874
905
  });
875
- $.unshift(j);
876
- const G = j(v);
877
- if (typeof v == "number" && (r[p] -= I), !G) break;
906
+ advStack.unshift(pickAdv);
907
+ const hasNext = pickAdv(k);
908
+ if (typeof k == "number" && (path[i] -= pickOffset), !hasNext) break;
878
909
  }
879
- if ($.forEach((p) => p.end()), C) return null;
880
- const T = () => {
881
- let p = 0;
882
- if (D != null) {
883
- const v = y.getPath();
884
- p = v.length, r = v.concat(r.slice(m));
910
+ if (advStack.forEach((pickAdv) => pickAdv.end()), removed) return null;
911
+ const handleDrop = /* @__PURE__ */ __name(() => {
912
+ let i = 0;
913
+ if (pickedAtSlot != null) {
914
+ const rPath = r.getPath();
915
+ i = rPath.length, path = rPath.concat(path.slice(pickIndex));
885
916
  }
886
- for (; p < r.length; p++) {
887
- const v = r[p], b = a(y), I = ve(b);
888
- if (I) {
889
- const g = f(b);
890
- I.transformPosition && (r[p] = I.transformPosition(r[p], g));
917
+ for (; i < path.length; i++) {
918
+ const k = path[i], c = getComponent(r), et = getEditType(c);
919
+ if (et) {
920
+ const e = getEdit(c);
921
+ et.transformPosition && (path[i] = et.transformPosition(path[i], e));
891
922
  break;
892
923
  }
893
- let j = 0;
894
- const G = s.advancer(y, (g, N) => o(N) ? ~(g - j) : g - j, (g, N) => {
895
- o(N) && j++;
896
- })(v);
897
- if (typeof v == "number" && (r[p] += j), !G) break;
924
+ let dropOffset = 0;
925
+ const hasNext = cursor_js_1.advancer(r, (k2, c2) => hasDrop(c2) ? ~(k2 - dropOffset) : k2 - dropOffset, (k2, c2) => {
926
+ hasDrop(c2) && dropOffset++;
927
+ })(k);
928
+ if (typeof k == "number" && (path[i] += dropOffset), !hasNext) break;
898
929
  }
899
- };
900
- return D != null ? y.eachDrop(null, (p) => {
901
- p === D && T();
902
- }) : T(), r;
903
- }
904
- function ne(r, u) {
905
- if (z(r), z(u), r == null) return u;
906
- if (u == null) return r;
907
- let y = 0;
908
- const D = s.readCursor(r), m = s.readCursor(u), C = s.writeCursor(), $ = [], T = [], p = [], v = [], b = [], I = [], j = /* @__PURE__ */ new Set();
909
- D.traverse(null, (g) => {
910
- g.p != null && (p[g.p] = D.clone());
911
- }), m.traverse(null, (g) => {
912
- g.d != null && (v[g.d] = m.clone());
930
+ }, "handleDrop");
931
+ return pickedAtSlot != null ? r.eachDrop(null, (slot) => {
932
+ slot === pickedAtSlot && handleDrop();
933
+ }) : handleDrop(), path;
934
+ }
935
+ __name(transformPosition, "transformPosition");
936
+ function compose(op1, op2) {
937
+ if (checkValidOp(op1), checkValidOp(op2), op1 == null) return op2;
938
+ if (op2 == null) return op1;
939
+ let nextSlot = 0;
940
+ const r1 = cursor_js_1.readCursor(op1), r2 = cursor_js_1.readCursor(op2), w = cursor_js_1.writeCursor(), heldPickWrites = [], heldDropWrites = [], held1Pick = [], held2Drop = [], p1SlotMap = [], p2SlotMap = [], visitedOp2EditCs = /* @__PURE__ */ new Set();
941
+ r1.traverse(null, (c) => {
942
+ c.p != null && (held1Pick[c.p] = r1.clone());
943
+ }), r2.traverse(null, (c) => {
944
+ c.d != null && (held2Drop[c.d] = r2.clone());
913
945
  });
914
- const G = s.writeCursor();
915
- return function g(N, re, te, K, se, je, me, _e) {
916
- l(re || te);
917
- const oe = a(re), Pe = a(te), Ue = !!Pe && Pe.r !== void 0, Le = !!oe && oe.i !== void 0, Me = oe ? oe.d : null, Ee = Pe ? Pe.p : null, $e = (je || Ue) && Ee == null;
918
- if (Ee != null) K = v[Ee], me = T[Ee] = new s.WriteCursor();
919
- else if (Pe && Pe.r !== void 0) K = null;
946
+ const w2 = cursor_js_1.writeCursor();
947
+ return (/* @__PURE__ */ __name(function xfBoundary(r1Pick, r1Drop, r2Pick, r2Drop, litIn, rmParent, wd, wp) {
948
+ assert(r1Drop || r2Pick);
949
+ const c1d = getComponent(r1Drop), c2p = getComponent(r2Pick), rmHere = !!c2p && c2p.r !== void 0, insHere = !!c1d && c1d.i !== void 0, drop1Slot = c1d ? c1d.d : null, pick2Slot = c2p ? c2p.p : null, rmChildren = (rmParent || rmHere) && pick2Slot == null;
950
+ if (pick2Slot != null) r2Drop = held2Drop[pick2Slot], wd = heldDropWrites[pick2Slot] = new cursor_js_1.WriteCursor();
951
+ else if (c2p && c2p.r !== void 0) r2Drop = null;
920
952
  else {
921
- const P = a(K);
922
- P && P.d != null && (K = null);
953
+ const c2d2 = getComponent(r2Drop);
954
+ c2d2 && c2d2.d != null && (r2Drop = null);
923
955
  }
924
- const Q = a(K);
925
- if (Me != null) if (N = p[Me], _e = $[Me] = new s.WriteCursor(), $e) je && !Ue && _e.write("r", !0);
956
+ const c2d = getComponent(r2Drop);
957
+ if (drop1Slot != null) if (r1Pick = held1Pick[drop1Slot], wp = heldPickWrites[drop1Slot] = new cursor_js_1.WriteCursor(), rmChildren) rmParent && !rmHere && wp.write("r", !0);
926
958
  else {
927
- const P = b[Me] = y++;
928
- me.write("d", P);
959
+ const slot = p1SlotMap[drop1Slot] = nextSlot++;
960
+ wd.write("d", slot);
929
961
  }
930
- else if (oe && oe.i !== void 0) N = null;
962
+ else if (c1d && c1d.i !== void 0) r1Pick = null;
931
963
  else {
932
- const P = a(N);
933
- P && P.p != null && (N = null);
964
+ const c1p = getComponent(r1Pick);
965
+ c1p && c1p.p != null && (r1Pick = null);
934
966
  }
935
- let M;
936
- Le ? (l(se === void 0), M = oe.i) : M = se;
937
- const B = (Ee == null ? !Le || je || Ue : M === void 0) ? null : me.getComponent();
938
- if (Ee != null) {
939
- if (!(se !== void 0 || Le)) {
940
- const P = Me != null ? b[Me] : y++;
941
- I[Ee] = P, _e.write("p", P);
967
+ let litOut;
968
+ insHere ? (assert(litIn === void 0), litOut = c1d.i) : litOut = litIn;
969
+ const insComponent = (pick2Slot == null ? !insHere || rmParent || rmHere : litOut === void 0) ? null : wd.getComponent();
970
+ if (pick2Slot != null) {
971
+ if (!(litIn !== void 0 || insHere)) {
972
+ const slot = drop1Slot != null ? p1SlotMap[drop1Slot] : nextSlot++;
973
+ p2SlotMap[pick2Slot] = slot, wp.write("p", slot);
942
974
  }
943
- } else Ue && (Le || se !== void 0 || (Pe.r, _e.write("r", Pe.r)));
944
- const U = $e ? null : ve(oe), A = ve(Q);
945
- if ((U || A) && (U && U.name, A && A.name), U && A) {
946
- l(U === A);
947
- const P = f(oe), x = f(Q), he = U.compose(P, x);
948
- _(me, U, he), j.add(Q);
949
- } else U ? _(me, U, f(oe)) : A && (_(me, A, f(Q)), j.add(Q));
950
- const k = typeof M == "object" && M != null;
951
- let X = !1, Y = 0, ee = 0, fe = 0, de = 0, le = 0;
952
- const ye = s.advancer(K, (P, x) => o(x) ? de - P - 1 : P - de, (P, x) => {
953
- o(x) && de++;
954
- }), q = s.advancer(N, (P, x) => O(x) ? Y - P - 1 : P - Y, (P, x) => {
955
- O(x) && Y++;
975
+ } else rmHere && (insHere || litIn !== void 0 || (c2p.r, wp.write("r", c2p.r)));
976
+ const type1 = rmChildren ? null : getEditType(c1d), type2 = getEditType(c2d);
977
+ if ((type1 || type2) && (type1 && type1.name, type2 && type2.name), type1 && type2) {
978
+ assert(type1 === type2);
979
+ const e1 = getEdit(c1d), e2 = getEdit(c2d), r = type1.compose(e1, e2);
980
+ writeEdit(wd, type1, r), visitedOp2EditCs.add(c2d);
981
+ } else type1 ? writeEdit(wd, type1, getEdit(c1d)) : type2 && (writeEdit(wd, type2, getEdit(c2d)), visitedOp2EditCs.add(c2d));
982
+ const hasContainerLiteral = typeof litOut == "object" && litOut != null;
983
+ let isCloned = !1, p1PickOff = 0, p1DropOff = 0, p2PickOff = 0, p2DropOff = 0, litOff = 0;
984
+ const p2DropAdv = cursor_js_1.advancer(r2Drop, (k, c) => hasDrop(c) ? p2DropOff - k - 1 : k - p2DropOff, (k, c) => {
985
+ hasDrop(c) && p2DropOff++;
986
+ }), p1PickAdv = cursor_js_1.advancer(r1Pick, (k, c) => hasPick(c) ? p1PickOff - k - 1 : k - p1PickOff, (k, c) => {
987
+ hasPick(c) && p1PickOff++;
956
988
  });
957
- if (s.eachChildOf(re, te, (P, x, he) => {
958
- let be, We, He = P, Ne = P, Ye = P;
959
- if (typeof P == "number") {
960
- let Oe = P + fe;
961
- We = ye(Oe), Ne = Oe + de;
962
- let ce = P + ee;
963
- be = q(ce), o(a(We)) && (be = null), He = ce + Y, Ye = P + le, l(He >= 0, "p1PickKey is negative"), l(Ne >= 0, "p2DropKey is negative");
964
- const ke = o(a(x)), Ge = O(a(he));
965
- (ke || Ge && !$e) && le--, ke && ee--, Ge && fe--;
966
- } else be = q(P), We = ye(P);
967
- _e.descend(He), me.descend(Ne);
968
- const ze = k && !o(a(x)) ? M[Ye] : void 0, Se = g(be, x, he, We, ze, $e, me, _e);
969
- var Te, S, ie;
970
- k && !$e ? ze !== Se && (X || (M = Array.isArray(M) ? M.slice() : Object.assign({}, M), X = !0), Te = M, ie = Se, typeof (S = Ye) == "number" ? (l(Array.isArray(Te)), l(S < Te.length)) : (l(!Array.isArray(Te)), l(Te[S] !== void 0)), ie === void 0 ? typeof S == "number" ? Te.splice(S, 1) : delete Te[S] : Te[S] = ie) : l(Se === void 0), me.ascend(), _e.ascend();
971
- }), q.end(), ye.end(), B != null) B.i = M;
972
- else if (!je && !Ue && Ee == null) return M;
973
- }(D, D.clone(), m, m.clone(), void 0, !1, C, G), C.reset(), C.mergeTree(G.get()), C.reset(), C.get(), $.map((g) => g.get()), T.map((g) => g.get()), D.traverse(C, (g, N) => {
974
- const re = g.p;
975
- if (re != null) {
976
- const te = b[re];
977
- te != null && N.write("p", te);
978
- const K = $[re];
979
- K && K.get(), K && N.mergeTree(K.get());
980
- } else g.r !== void 0 && N.write("r", g.r);
981
- }), C.reset(), C.get(), m.traverse(C, (g, N) => {
982
- const re = g.d;
983
- if (re != null) {
984
- const K = I[re];
985
- K != null && N.write("d", K);
986
- const se = T[re];
987
- se && N.mergeTree(se.get());
988
- } else g.i !== void 0 && N.write("i", g.i);
989
- const te = ve(g);
990
- te && !j.has(g) && _(N, te, f(g));
991
- }), C.get();
992
- }
993
- function ae(r) {
994
- if (r == null) return null;
995
- const u = new s.ReadCursor(r), y = new s.WriteCursor();
996
- let D;
997
- const m = [], C = [];
998
- return function $(T, p, v) {
999
- const b = T.getComponent();
1000
- let I, j = !1;
1001
- if (b) {
1002
- b.p != null && (p.write("d", b.p), m[b.p] = T.clone()), b.r !== void 0 && p.write("i", b.r), b.d != null && (p.write("p", b.d), v = void 0), b.i !== void 0 && (v = I = b.i);
1003
- const g = ve(b);
1004
- g && (v === void 0 ? (D || (D = /* @__PURE__ */ new Set()), D.add(b)) : (f(b), v = g.apply(v, f(b)), j = !0));
989
+ if (cursor_js_1.eachChildOf(r1Drop, r2Pick, (inKey, _p1Drop, _p2Pick) => {
990
+ let _p1Pick, _p2Drop, p1PickKey = inKey, p2DropKey = inKey, litKey = inKey;
991
+ if (typeof inKey == "number") {
992
+ let p2Mid = inKey + p2PickOff;
993
+ _p2Drop = p2DropAdv(p2Mid), p2DropKey = p2Mid + p2DropOff;
994
+ let p1Mid = inKey + p1DropOff;
995
+ _p1Pick = p1PickAdv(p1Mid), hasDrop(getComponent(_p2Drop)) && (_p1Pick = null), p1PickKey = p1Mid + p1PickOff, litKey = inKey + litOff, assert(p1PickKey >= 0, "p1PickKey is negative"), assert(p2DropKey >= 0, "p2DropKey is negative");
996
+ const hd1 = hasDrop(getComponent(_p1Drop)), hp2 = hasPick(getComponent(_p2Pick));
997
+ (hd1 || hp2 && !rmChildren) && litOff--, hd1 && p1DropOff--, hp2 && p2PickOff--;
998
+ } else _p1Pick = p1PickAdv(inKey), _p2Drop = p2DropAdv(inKey);
999
+ wp.descend(p1PickKey), wd.descend(p2DropKey);
1000
+ const _lit = hasContainerLiteral && !hasDrop(getComponent(_p1Drop)) ? litOut[litKey] : void 0, _litResult = xfBoundary(_p1Pick, _p1Drop, _p2Pick, _p2Drop, _lit, rmChildren, wd, wp);
1001
+ var container, key, child;
1002
+ hasContainerLiteral && !rmChildren ? _lit !== _litResult && (isCloned || (litOut = Array.isArray(litOut) ? litOut.slice() : Object.assign({}, litOut), isCloned = !0), container = litOut, child = _litResult, typeof (key = litKey) == "number" ? (assert(Array.isArray(container)), assert(key < container.length)) : (assert(!Array.isArray(container)), assert(container[key] !== void 0)), child === void 0 ? typeof key == "number" ? container.splice(key, 1) : delete container[key] : container[key] = child) : assert(_litResult === void 0), wd.ascend(), wp.ascend();
1003
+ }), p1PickAdv.end(), p2DropAdv.end(), insComponent != null) insComponent.i = litOut;
1004
+ else if (!rmParent && !rmHere && pick2Slot == null) return litOut;
1005
+ }, "xfBoundary"))(r1, r1.clone(), r2, r2.clone(), void 0, !1, w, w2), w.reset(), w.mergeTree(w2.get()), w.reset(), w.get(), heldPickWrites.map((w3) => w3.get()), heldDropWrites.map((w3) => w3.get()), r1.traverse(w, (c, w3) => {
1006
+ const slot1 = c.p;
1007
+ if (slot1 != null) {
1008
+ const slot = p1SlotMap[slot1];
1009
+ slot != null && w3.write("p", slot);
1010
+ const _w = heldPickWrites[slot1];
1011
+ _w && _w.get(), _w && w3.mergeTree(_w.get());
1012
+ } else c.r !== void 0 && w3.write("r", c.r);
1013
+ }), w.reset(), w.get(), r2.traverse(w, (c, w3) => {
1014
+ const slot2 = c.d;
1015
+ if (slot2 != null) {
1016
+ const slot = p2SlotMap[slot2];
1017
+ slot != null && w3.write("d", slot);
1018
+ const _w = heldDropWrites[slot2];
1019
+ _w && w3.mergeTree(_w.get());
1020
+ } else c.i !== void 0 && w3.write("i", c.i);
1021
+ const t = getEditType(c);
1022
+ t && !visitedOp2EditCs.has(c) && writeEdit(w3, t, getEdit(c));
1023
+ }), w.get();
1024
+ }
1025
+ __name(compose, "compose");
1026
+ function invert(op) {
1027
+ if (op == null) return null;
1028
+ const r = new cursor_js_1.ReadCursor(op), w = new cursor_js_1.WriteCursor();
1029
+ let editsToTransform;
1030
+ const heldPick = [], heldWrites = [];
1031
+ return (/* @__PURE__ */ __name(function invertSimple(r2, w2, subDoc) {
1032
+ const c = r2.getComponent();
1033
+ let insertHere, subdocModified = !1;
1034
+ if (c) {
1035
+ c.p != null && (w2.write("d", c.p), heldPick[c.p] = r2.clone()), c.r !== void 0 && w2.write("i", c.r), c.d != null && (w2.write("p", c.d), subDoc = void 0), c.i !== void 0 && (subDoc = insertHere = c.i);
1036
+ const t = getEditType(c);
1037
+ t && (subDoc === void 0 ? (editsToTransform || (editsToTransform = /* @__PURE__ */ new Set()), editsToTransform.add(c)) : (getEdit(c), subDoc = t.apply(subDoc, getEdit(c)), subdocModified = !0));
1005
1038
  }
1006
- let G = 0;
1007
- for (const g of T) {
1008
- p.descend(g);
1009
- const N = typeof g == "number" ? g - G : g, re = Z(v, N);
1010
- o(T.getComponent()) && G++;
1011
- const te = $(T, p, re);
1012
- if (v !== void 0 && te !== void 0) {
1013
- if (j || (j = !0, v = W(v)), !R(v, N)) throw Error("Cannot modify child - invalid operation");
1014
- v[N] = te;
1039
+ let dropOff = 0;
1040
+ for (const key of r2) {
1041
+ w2.descend(key);
1042
+ const raw = typeof key == "number" ? key - dropOff : key, childIn = maybeGetChild(subDoc, raw);
1043
+ hasDrop(r2.getComponent()) && dropOff++;
1044
+ const childOut = invertSimple(r2, w2, childIn);
1045
+ if (subDoc !== void 0 && childOut !== void 0) {
1046
+ if (subdocModified || (subdocModified = !0, subDoc = shallowClone(subDoc)), !isValidKey(subDoc, raw)) throw Error("Cannot modify child - invalid operation");
1047
+ subDoc[raw] = childOut;
1015
1048
  }
1016
- p.ascend();
1049
+ w2.ascend();
1017
1050
  }
1018
- if (I === void 0) return j ? v : void 0;
1019
- p.write("r", v);
1020
- }(u, y, void 0), D && (y.reset(), function $(T, p, v) {
1021
- const b = p.getComponent();
1022
- if (b) {
1023
- const g = b.d;
1024
- if (g != null && (T = m[g], v = C[g] = s.writeCursor()), D.has(b)) {
1025
- const N = ve(b);
1026
- if (!N.invert) throw Error(`Cannot invert subtype ${N.name}`);
1027
- _(v, N, N.invert(f(b)));
1051
+ if (insertHere === void 0) return subdocModified ? subDoc : void 0;
1052
+ w2.write("r", subDoc);
1053
+ }, "invertSimple"))(r, w, void 0), editsToTransform && (w.reset(), (/* @__PURE__ */ __name(function transformEdits(rPick, rDrop, w2) {
1054
+ const cd = rDrop.getComponent();
1055
+ if (cd) {
1056
+ const dropSlot = cd.d;
1057
+ if (dropSlot != null && (rPick = heldPick[dropSlot], w2 = heldWrites[dropSlot] = cursor_js_1.writeCursor()), editsToTransform.has(cd)) {
1058
+ const t = getEditType(cd);
1059
+ if (!t.invert) throw Error(`Cannot invert subtype ${t.name}`);
1060
+ writeEdit(w2, t, t.invert(getEdit(cd)));
1028
1061
  }
1029
1062
  }
1030
- let I = 0, j = 0;
1031
- const G = s.advancer(T, (g, N) => O(N) ? I - g - 1 : g - I, (g, N) => {
1032
- O(N) && I++;
1063
+ let pickOff = 0, dropOff = 0;
1064
+ const ap = cursor_js_1.advancer(rPick, (k, c) => hasPick(c) ? pickOff - k - 1 : k - pickOff, (k, c) => {
1065
+ hasPick(c) && pickOff++;
1033
1066
  });
1034
- for (const g of p) if (typeof g == "number") {
1035
- const N = g - j, re = G(N), te = N + I;
1036
- v.descend(te), $(re, p, v), o(p.getComponent()) && j++, v.ascend();
1037
- } else v.descend(g), $(G(g), p, v), v.ascend();
1038
- G.end();
1039
- }(u.clone(), u, y), C.length && (y.reset(), u.traverse(y, ($, T) => {
1040
- const p = $.p;
1041
- if (p != null) {
1042
- const v = C[p];
1043
- v && v.get(), v && T.mergeTree(v.get());
1067
+ for (const key of rDrop) if (typeof key == "number") {
1068
+ const mid = key - dropOff, _rPick = ap(mid), raw = mid + pickOff;
1069
+ w2.descend(raw), transformEdits(_rPick, rDrop, w2), hasDrop(rDrop.getComponent()) && dropOff++, w2.ascend();
1070
+ } else w2.descend(key), transformEdits(ap(key), rDrop, w2), w2.ascend();
1071
+ ap.end();
1072
+ }, "transformEdits"))(r.clone(), r, w), heldWrites.length && (w.reset(), r.traverse(w, (c, w2) => {
1073
+ const slot = c.p;
1074
+ if (slot != null) {
1075
+ const _w = heldWrites[slot];
1076
+ _w && _w.get(), _w && w2.mergeTree(_w.get());
1044
1077
  }
1045
- }))), y.get();
1046
- }
1047
- const ge = (r, u) => r.some((y) => typeof y == "object" && (Array.isArray(y) ? ge(y, u) : u(y)));
1048
- function Ae(r, u) {
1049
- if (r == null || !ge(r, (p) => {
1050
- var v;
1051
- return p.r !== void 0 || ((v = ve(p)) === null || v === void 0 ? void 0 : v.makeInvertible) != null;
1052
- })) return r;
1053
- const y = new s.ReadCursor(r), D = new s.WriteCursor();
1054
- let m = !1;
1055
- const C = [], $ = [], T = (p, v, b) => {
1056
- const I = p.getComponent();
1057
- let j = !1;
1058
- if (I) {
1059
- I.d != null && v.write("d", I.d), I.i !== void 0 && v.write("i", I.i);
1060
- const g = I.p;
1061
- if (g != null && (C[g] = p.clone(), l(b !== void 0, "Operation picks up at an invalid key"), $[g] = b, v.write("p", I.p)), I.r !== void 0 && b === void 0) throw Error("Invalid doc / op in makeInvertible: removed item missing from doc");
1062
- const N = ve(I);
1063
- N && (N.makeInvertible ? m = !0 : _(v, N, f(I), !0));
1078
+ }))), w.get();
1079
+ }
1080
+ __name(invert, "invert");
1081
+ const anyComponent = /* @__PURE__ */ __name((op, fn) => op.some((c) => typeof c == "object" && (Array.isArray(c) ? anyComponent(c, fn) : fn(c))), "anyComponent");
1082
+ function makeInvertible(op, doc) {
1083
+ if (op == null || !anyComponent(op, (c) => {
1084
+ var _a2;
1085
+ return c.r !== void 0 || ((_a2 = getEditType(c)) === null || _a2 === void 0 ? void 0 : _a2.makeInvertible) != null;
1086
+ })) return op;
1087
+ const r = new cursor_js_1.ReadCursor(op), w = new cursor_js_1.WriteCursor();
1088
+ let hasEdits = !1;
1089
+ const heldPick = [], heldDoc = [], traversePick = /* @__PURE__ */ __name((r2, w2, subDoc) => {
1090
+ const c = r2.getComponent();
1091
+ let modified = !1;
1092
+ if (c) {
1093
+ c.d != null && w2.write("d", c.d), c.i !== void 0 && w2.write("i", c.i);
1094
+ const pickSlot = c.p;
1095
+ if (pickSlot != null && (heldPick[pickSlot] = r2.clone(), assert(subDoc !== void 0, "Operation picks up at an invalid key"), heldDoc[pickSlot] = subDoc, w2.write("p", c.p)), c.r !== void 0 && subDoc === void 0) throw Error("Invalid doc / op in makeInvertible: removed item missing from doc");
1096
+ const t = getEditType(c);
1097
+ t && (t.makeInvertible ? hasEdits = !0 : writeEdit(w2, t, getEdit(c), !0));
1064
1098
  }
1065
- let G = 0;
1066
- for (const g of p) {
1067
- v.descend(g);
1068
- const N = typeof g == "number" ? g - G : g, re = Z(b, N), te = T(p, v, re);
1069
- re !== te && (j || (j = !0, b = W(b)), te === void 0 ? (b = c(b, N), typeof g == "number" && G++) : b[N] = te), v.ascend();
1099
+ let listOff = 0;
1100
+ for (const key of r2) {
1101
+ w2.descend(key);
1102
+ const keyRaw = typeof key == "number" ? key - listOff : key, childIn = maybeGetChild(subDoc, keyRaw), childOut = traversePick(r2, w2, childIn);
1103
+ childIn !== childOut && (modified || (modified = !0, subDoc = shallowClone(subDoc)), childOut === void 0 ? (subDoc = removeChild(subDoc, keyRaw), typeof key == "number" && listOff++) : subDoc[keyRaw] = childOut), w2.ascend();
1070
1104
  }
1071
- return I && (I.r !== void 0 ? (v.write("r", i.default(b)), b = void 0) : I.p != null && (b = void 0)), b;
1072
- };
1073
- return T(y, D, u), D.get(), m && (D.reset(), function p(v, b, I, j, G) {
1074
- const g = b.getComponent();
1075
- if (g) {
1076
- g.i !== void 0 ? (j = g.i, G = !0) : g.d != null && (j = $[g.d], v = C[g.d], G = !1, g.d);
1077
- let K = ve(g);
1078
- if (K && K.makeInvertible) {
1079
- const se = f(g);
1080
- _(I, K, K.makeInvertible(se, j), !0);
1105
+ return c && (c.r !== void 0 ? (w2.write("r", deepClone_js_1.default(subDoc)), subDoc = void 0) : c.p != null && (subDoc = void 0)), subDoc;
1106
+ }, "traversePick");
1107
+ return traversePick(r, w, doc), w.get(), hasEdits && (w.reset(), (/* @__PURE__ */ __name(function traverseDrop(rPick, rDrop, w2, subDoc, isLiteral) {
1108
+ const c = rDrop.getComponent();
1109
+ if (c) {
1110
+ c.i !== void 0 ? (subDoc = c.i, isLiteral = !0) : c.d != null && (subDoc = heldDoc[c.d], rPick = heldPick[c.d], isLiteral = !1, c.d);
1111
+ let t = getEditType(c);
1112
+ if (t && t.makeInvertible) {
1113
+ const edit = getEdit(c);
1114
+ writeEdit(w2, t, t.makeInvertible(edit, subDoc), !0);
1081
1115
  }
1082
1116
  }
1083
- let N = 0, re = 0;
1084
- const te = s.advancer(v, (K, se) => O(se) ? N - K - 1 : K - N, (K, se) => {
1085
- O(se) && N++;
1117
+ let pickOff = 0, dropOff = 0;
1118
+ const ap = cursor_js_1.advancer(rPick, (k, c2) => hasPick(c2) ? pickOff - k - 1 : k - pickOff, (k, c2) => {
1119
+ hasPick(c2) && pickOff++;
1086
1120
  });
1087
- for (const K of b) if (typeof K == "number") {
1088
- const se = K - re, je = te(se), me = se + N, _e = Z(j, G ? se : me);
1089
- I.descend(K), p(je, b, I, _e, G), o(b.getComponent()) && re++, I.ascend();
1121
+ for (const key of rDrop) if (typeof key == "number") {
1122
+ const mid = key - dropOff, _rPick = ap(mid), raw = mid + pickOff, child = maybeGetChild(subDoc, isLiteral ? mid : raw);
1123
+ w2.descend(key), traverseDrop(_rPick, rDrop, w2, child, isLiteral), hasDrop(rDrop.getComponent()) && dropOff++, w2.ascend();
1090
1124
  } else {
1091
- const se = Z(j, K);
1092
- I.descend(K), p(te(K), b, I, se, G), I.ascend();
1125
+ const child = maybeGetChild(subDoc, key);
1126
+ w2.descend(key), traverseDrop(ap(key), rDrop, w2, child, isLiteral), w2.ascend();
1093
1127
  }
1094
- te.end();
1095
- }(y.clone(), y, D, u, !1)), D.get();
1096
- }
1097
- function Et(r, u) {
1098
- return ae(Ae(r, u));
1099
- }
1100
- const tt = (r) => {
1101
- if (r == null) return null;
1102
- const u = r.slice();
1103
- for (let y = 0; y < r.length; y++) {
1104
- const D = u[y];
1105
- Array.isArray(D) && (u[y] = tt(D));
1128
+ ap.end();
1129
+ }, "traverseDrop"))(r.clone(), r, w, doc, !1)), w.get();
1130
+ }
1131
+ __name(makeInvertible, "makeInvertible");
1132
+ function invertWithDoc(op, doc) {
1133
+ return invert(makeInvertible(op, doc));
1134
+ }
1135
+ __name(invertWithDoc, "invertWithDoc");
1136
+ const shallowCloneOp = /* @__PURE__ */ __name((op) => {
1137
+ if (op == null) return null;
1138
+ const result = op.slice();
1139
+ for (let i = 0; i < op.length; i++) {
1140
+ const c = result[i];
1141
+ Array.isArray(c) && (result[i] = shallowCloneOp(c));
1106
1142
  }
1107
- return u;
1108
- };
1109
- function nt(r, u, y) {
1110
- l(y === "left" || y === "right", "Direction must be left or right");
1111
- const D = y === "left" ? 0 : 1;
1112
- if (u == null) return {
1143
+ return result;
1144
+ }, "shallowCloneOp");
1145
+ function tryTransform(op1, op2, direction) {
1146
+ assert(direction === "left" || direction === "right", "Direction must be left or right");
1147
+ const side = direction === "left" ? 0 : 1;
1148
+ if (op2 == null) return {
1113
1149
  ok: !0,
1114
- result: r
1150
+ result: op1
1115
1151
  };
1116
- z(r), z(u);
1117
- let m = null;
1118
- const C = [], $ = [], T = [], p = [], v = [], b = [], I = [], j = [], G = [], g = [], N = [], re = [], te = [], K = [], se = [];
1119
- let je = 0;
1120
- const me = s.readCursor(r), _e = s.readCursor(u), oe = s.writeCursor();
1121
- if (function Q(M, B = null, U) {
1122
- const A = a(B);
1123
- A && (A.r !== void 0 ? U = B.clone() : A.p != null && (U = null, b[A.p] = M.clone()));
1124
- const k = M.getComponent();
1125
- let X;
1126
- k && (X = k.p) != null && (v[X] = B ? B.clone() : null, T[X] = M.clone(), U && (g[X] = !0, G[X] = U), A && A.p != null && (K[X] = A.p));
1127
- const Y = s.advancer(B);
1128
- for (const ee of M) Q(M, Y(ee), U);
1129
- Y.end();
1130
- }(_e, me, null), function Q(M, B, U, A, k) {
1131
- const X = U.getComponent();
1132
- let Y, ee = !1;
1133
- X && ((Y = X.d) != null ? (p[Y] = U.clone(), A != null && (se[A] == null && (se[A] = []), se[A].push(Y)), M = v[Y] || null, B = T[Y] || null, g[Y] ? (k && (N[Y] = !0), k = G[Y] || null) : !k || D !== 1 && K[Y] != null || m == null && (m = {
1134
- type: d.ConflictType.RM_UNEXPECTED_CONTENT,
1135
- op1: n.removeOp(k.getPath()),
1136
- op2: n.moveOp(B.getPath(), U.getPath())
1137
- }), ee = !0) : X.i !== void 0 && (M = B = null, ee = !0, k && m == null && (m = {
1138
- type: d.ConflictType.RM_UNEXPECTED_CONTENT,
1139
- op1: n.removeOp(k.getPath()),
1140
- op2: n.insertOp(U.getPath(), X.i)
1152
+ checkValidOp(op1), checkValidOp(op2);
1153
+ let conflict = null;
1154
+ const heldOp1PickByOp1 = [], heldOp1DropByOp1 = [], heldOp2PickByOp2 = [], heldOp2DropByOp2 = [], heldOp1PickByOp2 = [], heldOp2PickByOp1 = [], heldOp2DropByOp1 = [], heldOp2RmForOp1 = [], heldOp1RmForOp2 = [], cancelledOp2 = [], discardedOp2Drop = [], heldPickWrites = [], heldDropWrites = [], op1PickAtOp2Pick = [], op1PicksOp2DropSlots = [];
1155
+ let nextSlot = 0;
1156
+ const r1 = cursor_js_1.readCursor(op1), r2 = cursor_js_1.readCursor(op2), w = cursor_js_1.writeCursor();
1157
+ if ((/* @__PURE__ */ __name(function scanOp2Pick(r2Pick, r1Pick = null, removed1) {
1158
+ const c1 = getComponent(r1Pick);
1159
+ c1 && (c1.r !== void 0 ? removed1 = r1Pick.clone() : c1.p != null && (removed1 = null, heldOp2PickByOp1[c1.p] = r2Pick.clone()));
1160
+ const c2 = r2Pick.getComponent();
1161
+ let slot2;
1162
+ c2 && (slot2 = c2.p) != null && (heldOp1PickByOp2[slot2] = r1Pick ? r1Pick.clone() : null, heldOp2PickByOp2[slot2] = r2Pick.clone(), removed1 && (cancelledOp2[slot2] = !0, heldOp1RmForOp2[slot2] = removed1), c1 && c1.p != null && (op1PickAtOp2Pick[slot2] = c1.p));
1163
+ const ap1 = cursor_js_1.advancer(r1Pick);
1164
+ for (const key of r2Pick) scanOp2Pick(r2Pick, ap1(key), removed1);
1165
+ ap1.end();
1166
+ }, "scanOp2Pick"))(r2, r1, null), (/* @__PURE__ */ __name(function scanOp2Drop(r1Pick, r2Pick, r2Drop, pickSlot1, removed1) {
1167
+ const c2d = r2Drop.getComponent();
1168
+ let slot2, droppedHere = !1;
1169
+ c2d && ((slot2 = c2d.d) != null ? (heldOp2DropByOp2[slot2] = r2Drop.clone(), pickSlot1 != null && (op1PicksOp2DropSlots[pickSlot1] == null && (op1PicksOp2DropSlots[pickSlot1] = []), op1PicksOp2DropSlots[pickSlot1].push(slot2)), r1Pick = heldOp1PickByOp2[slot2] || null, r2Pick = heldOp2PickByOp2[slot2] || null, cancelledOp2[slot2] ? (removed1 && (discardedOp2Drop[slot2] = !0), removed1 = heldOp1RmForOp2[slot2] || null) : !removed1 || side !== 1 && op1PickAtOp2Pick[slot2] != null || conflict == null && (conflict = {
1170
+ type: types_js_1.ConflictType.RM_UNEXPECTED_CONTENT,
1171
+ op1: exports.removeOp(removed1.getPath()),
1172
+ op2: exports.moveOp(r2Pick.getPath(), r2Drop.getPath())
1173
+ }), droppedHere = !0) : c2d.i !== void 0 && (r1Pick = r2Pick = null, droppedHere = !0, removed1 && conflict == null && (conflict = {
1174
+ type: types_js_1.ConflictType.RM_UNEXPECTED_CONTENT,
1175
+ op1: exports.removeOp(removed1.getPath()),
1176
+ op2: exports.insertOp(r2Drop.getPath(), c2d.i)
1141
1177
  })));
1142
- const fe = a(M);
1143
- fe && (fe.r !== void 0 ? k = M.clone() : fe.p != null && (fe.p, A = fe.p, k = null));
1144
- const de = ve(X);
1145
- de && k && m == null && (m = {
1146
- type: d.ConflictType.RM_UNEXPECTED_CONTENT,
1147
- op1: n.removeOp(k.getPath()),
1148
- op2: n.editOp(U.getPath(), de, f(X), !0)
1178
+ const c1p = getComponent(r1Pick);
1179
+ c1p && (c1p.r !== void 0 ? removed1 = r1Pick.clone() : c1p.p != null && (c1p.p, pickSlot1 = c1p.p, removed1 = null));
1180
+ const t2 = getEditType(c2d);
1181
+ t2 && removed1 && conflict == null && (conflict = {
1182
+ type: types_js_1.ConflictType.RM_UNEXPECTED_CONTENT,
1183
+ op1: exports.removeOp(removed1.getPath()),
1184
+ op2: exports.editOp(r2Drop.getPath(), t2, getEdit(c2d), !0)
1149
1185
  });
1150
- let le = 0, ye = 0;
1151
- const q = s.advancer(B, (x, he) => O(he) ? le - x - 1 : x - le, (x, he) => {
1152
- O(he) && le++;
1153
- }), P = s.advancer(M);
1154
- for (const x of U) if (typeof x == "number") {
1155
- const he = x - ye, be = q(he);
1156
- ye += +Q(P(he + le), be, U, A, k);
1186
+ let p2PickOff = 0, p2DropOff = 0;
1187
+ const ap2 = cursor_js_1.advancer(r2Pick, (k, c) => hasPick(c) ? p2PickOff - k - 1 : k - p2PickOff, (k, c) => {
1188
+ hasPick(c) && p2PickOff++;
1189
+ }), ap1 = cursor_js_1.advancer(r1Pick);
1190
+ for (const key of r2Drop) if (typeof key == "number") {
1191
+ const p2Mid = key - p2DropOff, _p2Pick = ap2(p2Mid);
1192
+ p2DropOff += +scanOp2Drop(ap1(p2Mid + p2PickOff), _p2Pick, r2Drop, pickSlot1, removed1);
1157
1193
  } else {
1158
- const he = q(x);
1159
- Q(P(x), he, U, A, k);
1194
+ const _p2Pick = ap2(key);
1195
+ scanOp2Drop(ap1(key), _p2Pick, r2Drop, pickSlot1, removed1);
1160
1196
  }
1161
- return q.end(), P.end(), ee;
1162
- }(me, _e, _e.clone(), null, null), p.map((Q) => Q && Q.get()), m) return {
1197
+ return ap2.end(), ap1.end(), droppedHere;
1198
+ }, "scanOp2Drop"))(r1, r2, r2.clone(), null, null), heldOp2DropByOp2.map((x) => x && x.get()), conflict) return {
1163
1199
  ok: !1,
1164
- conflict: m
1200
+ conflict
1165
1201
  };
1166
- N.map((Q) => !!Q);
1167
- const Pe = [];
1168
- let Ue = null;
1169
- (function Q(M, B, U, A, k) {
1170
- let X = !1;
1171
- const Y = a(B);
1172
- if (O(Y)) {
1173
- const q = Y.p;
1174
- q != null ? (U = p[q], A = re[q] = s.writeCursor(), X = !0, k = null) : (U = null, k = B.clone());
1175
- } else o(a(U)) && (U = null);
1176
- const ee = M.getComponent();
1177
- if (ee) {
1178
- const q = ee.p;
1179
- q != null ? (k && (j[q] = k), Pe[q] = k || D === 1 && X ? null : A.getComponent(), C[q] = M.clone(), U && (I[q] = U.clone())) : ee.r !== void 0 && (k || A.write("r", !0), (k || X) && (Ue == null && (Ue = /* @__PURE__ */ new Set()), Ue.add(ee)));
1202
+ discardedOp2Drop.map((x) => !!x);
1203
+ const pickComponents = [];
1204
+ let cancelledRemoves = null;
1205
+ (/* @__PURE__ */ __name(function writeOp1Pick(r1Pick, r2Pick, r2Drop, w2, removed2) {
1206
+ let iAmMoved = !1;
1207
+ const c2p = getComponent(r2Pick);
1208
+ if (hasPick(c2p)) {
1209
+ const slot2 = c2p.p;
1210
+ slot2 != null ? (r2Drop = heldOp2DropByOp2[slot2], w2 = heldPickWrites[slot2] = cursor_js_1.writeCursor(), iAmMoved = !0, removed2 = null) : (r2Drop = null, removed2 = r2Pick.clone());
1211
+ } else hasDrop(getComponent(r2Drop)) && (r2Drop = null);
1212
+ const c1 = r1Pick.getComponent();
1213
+ if (c1) {
1214
+ const slot1 = c1.p;
1215
+ slot1 != null ? (removed2 && (heldOp2RmForOp1[slot1] = removed2), pickComponents[slot1] = removed2 || side === 1 && iAmMoved ? null : w2.getComponent(), heldOp1PickByOp1[slot1] = r1Pick.clone(), r2Drop && (heldOp2DropByOp1[slot1] = r2Drop.clone())) : c1.r !== void 0 && (removed2 || w2.write("r", !0), (removed2 || iAmMoved) && (cancelledRemoves == null && (cancelledRemoves = /* @__PURE__ */ new Set()), cancelledRemoves.add(c1)));
1180
1216
  }
1181
- let fe = 0, de = 0;
1182
- const le = s.advancer(B, void 0, (q, P) => {
1183
- O(P) && fe++;
1184
- }), ye = s.advancer(U, (q, P) => o(P) ? ~(q - de) : q - de, (q, P) => {
1185
- o(P) && de++;
1217
+ let p2PickOff = 0, p2DropOff = 0;
1218
+ const ap2Pick = cursor_js_1.advancer(r2Pick, void 0, (k, c) => {
1219
+ hasPick(c) && p2PickOff++;
1220
+ }), ap2Drop = cursor_js_1.advancer(r2Drop, (k, c) => hasDrop(c) ? ~(k - p2DropOff) : k - p2DropOff, (k, c) => {
1221
+ hasDrop(c) && p2DropOff++;
1186
1222
  });
1187
- if (M) for (const q of M) if (typeof q == "string") {
1188
- const P = le(q), x = ye(q);
1189
- A.descend(q), Q(M, P, x, A, k), A.ascend();
1223
+ if (r1Pick) for (const key of r1Pick) if (typeof key == "string") {
1224
+ const p2Pick_ = ap2Pick(key), p2Drop_ = ap2Drop(key);
1225
+ w2.descend(key), writeOp1Pick(r1Pick, p2Pick_, p2Drop_, w2, removed2), w2.ascend();
1190
1226
  } else {
1191
- const P = le(q), x = q - fe, he = O(a(P)) ? null : ye(x), be = x + de;
1192
- l(be >= 0), A.descend(be), Q(M, P, he, A, k), A.ascend();
1227
+ const p2Pick_ = ap2Pick(key), p2Mid = key - p2PickOff, p2Drop_ = hasPick(getComponent(p2Pick_)) ? null : ap2Drop(p2Mid), finalKey = p2Mid + p2DropOff;
1228
+ assert(finalKey >= 0), w2.descend(finalKey), writeOp1Pick(r1Pick, p2Pick_, p2Drop_, w2, removed2), w2.ascend();
1193
1229
  }
1194
- le.end(), ye.end();
1195
- })(me, _e, _e.clone(), oe, null), oe.reset();
1196
- let Le = [];
1197
- if (function Q(M, B, U, A, k, X) {
1198
- l(B);
1199
- const Y = B.getComponent();
1200
- let ee = a(A), fe = !1;
1201
- const de = (S, ie, Oe) => S ? n.moveOp(S.getPath(), ie.getPath()) : n.insertOp(ie.getPath(), Oe.i);
1202
- if (o(Y)) {
1203
- const S = Y.d;
1204
- S != null && ($[S] = B.clone());
1205
- const ie = S != null ? Pe[S] : null;
1206
- let Oe = !1;
1207
- if (Y.i !== void 0 || S != null && ie) {
1208
- let ce;
1209
- ee && (ee.i !== void 0 || (ce = ee.d) != null && !g[ce]) && (Oe = ce != null ? S != null && S === K[ce] : t.default(ee.i, Y.i), Oe || ce != null && D !== 1 && K[ce] != null || m == null && (m = {
1210
- type: d.ConflictType.DROP_COLLISION,
1211
- op1: de(S != null ? C[S] : null, B, Y),
1212
- op2: de(ce != null ? T[ce] : null, A, ee)
1213
- })), Oe || (X ? m == null && (m = {
1214
- type: d.ConflictType.RM_UNEXPECTED_CONTENT,
1215
- op1: de(S != null ? C[S] : null, B, Y),
1216
- op2: n.removeOp(X.getPath())
1217
- }) : (S != null ? (Le[je] = S, k.write("d", ie.p = je++)) : k.write("i", i.default(Y.i)), fe = !0));
1218
- } else if (S != null && !ie) {
1219
- const ce = j[S];
1220
- ce && (X = ce.clone());
1230
+ ap2Pick.end(), ap2Drop.end();
1231
+ }, "writeOp1Pick"))(r1, r2, r2.clone(), w, null), w.reset();
1232
+ let outputSlotMap = [];
1233
+ if ((/* @__PURE__ */ __name(function writeOp1Drop(p1Pick, p1Drop, p2Pick, p2Drop, w2, removed2) {
1234
+ assert(p1Drop);
1235
+ const c1d = p1Drop.getComponent();
1236
+ let c2d = getComponent(p2Drop), droppedHere = !1;
1237
+ const insOrMv = /* @__PURE__ */ __name((r12, r22, c) => r12 ? exports.moveOp(r12.getPath(), r22.getPath()) : exports.insertOp(r22.getPath(), c.i), "insOrMv");
1238
+ if (hasDrop(c1d)) {
1239
+ const slot1 = c1d.d;
1240
+ slot1 != null && (heldOp1DropByOp1[slot1] = p1Drop.clone());
1241
+ const pc = slot1 != null ? pickComponents[slot1] : null;
1242
+ let identical = !1;
1243
+ if (c1d.i !== void 0 || slot1 != null && pc) {
1244
+ let slot2;
1245
+ c2d && (c2d.i !== void 0 || (slot2 = c2d.d) != null && !cancelledOp2[slot2]) && (identical = slot2 != null ? slot1 != null && slot1 === op1PickAtOp2Pick[slot2] : deepEqual_js_1.default(c2d.i, c1d.i), identical || slot2 != null && side !== 1 && op1PickAtOp2Pick[slot2] != null || conflict == null && (conflict = {
1246
+ type: types_js_1.ConflictType.DROP_COLLISION,
1247
+ op1: insOrMv(slot1 != null ? heldOp1PickByOp1[slot1] : null, p1Drop, c1d),
1248
+ op2: insOrMv(slot2 != null ? heldOp2PickByOp2[slot2] : null, p2Drop, c2d)
1249
+ })), identical || (removed2 ? conflict == null && (conflict = {
1250
+ type: types_js_1.ConflictType.RM_UNEXPECTED_CONTENT,
1251
+ op1: insOrMv(slot1 != null ? heldOp1PickByOp1[slot1] : null, p1Drop, c1d),
1252
+ op2: exports.removeOp(removed2.getPath())
1253
+ }) : (slot1 != null ? (outputSlotMap[nextSlot] = slot1, w2.write("d", pc.p = nextSlot++)) : w2.write("i", deepClone_js_1.default(c1d.i)), droppedHere = !0));
1254
+ } else if (slot1 != null && !pc) {
1255
+ const h = heldOp2RmForOp1[slot1];
1256
+ h && (removed2 = h.clone());
1221
1257
  }
1222
- S != null ? (M = C[S], U = b[S], A = I[S]) : Y.i !== void 0 && (M = U = null, Oe || (A = null));
1223
- } else O(a(M)) && (M = U = A = null);
1224
- const le = a(M), ye = a(U);
1225
- if (O(ye)) {
1226
- const S = ye.p;
1227
- ye.r !== void 0 && (!le || le.r === void 0) || g[S] ? (A = null, X = U.clone()) : S != null && (A = p[S], D !== 1 && K[S] != null || ((k = te[S]) || (k = te[S] = s.writeCursor()), k.reset(), X = null));
1228
- } else !o(Y) && o(ee) && (A = null);
1229
- ee = A != null ? A.getComponent() : null;
1230
- const q = ve(Y);
1231
- if (q) {
1232
- const S = f(Y);
1233
- if (X) m == null && (m = {
1234
- type: d.ConflictType.RM_UNEXPECTED_CONTENT,
1235
- op1: n.editOp(B.getPath(), q, S, !0),
1236
- op2: n.removeOp(X.getPath())
1258
+ slot1 != null ? (p1Pick = heldOp1PickByOp1[slot1], p2Pick = heldOp2PickByOp1[slot1], p2Drop = heldOp2DropByOp1[slot1]) : c1d.i !== void 0 && (p1Pick = p2Pick = null, identical || (p2Drop = null));
1259
+ } else hasPick(getComponent(p1Pick)) && (p1Pick = p2Pick = p2Drop = null);
1260
+ const c1p = getComponent(p1Pick), c2p = getComponent(p2Pick);
1261
+ if (hasPick(c2p)) {
1262
+ const slot2 = c2p.p;
1263
+ c2p.r !== void 0 && (!c1p || c1p.r === void 0) || cancelledOp2[slot2] ? (p2Drop = null, removed2 = p2Pick.clone()) : slot2 != null && (p2Drop = heldOp2DropByOp2[slot2], side !== 1 && op1PickAtOp2Pick[slot2] != null || ((w2 = heldDropWrites[slot2]) || (w2 = heldDropWrites[slot2] = cursor_js_1.writeCursor()), w2.reset(), removed2 = null));
1264
+ } else !hasDrop(c1d) && hasDrop(c2d) && (p2Drop = null);
1265
+ c2d = p2Drop != null ? p2Drop.getComponent() : null;
1266
+ const t1 = getEditType(c1d);
1267
+ if (t1) {
1268
+ const e1 = getEdit(c1d);
1269
+ if (removed2) conflict == null && (conflict = {
1270
+ type: types_js_1.ConflictType.RM_UNEXPECTED_CONTENT,
1271
+ op1: exports.editOp(p1Drop.getPath(), t1, e1, !0),
1272
+ op2: exports.removeOp(removed2.getPath())
1237
1273
  });
1238
1274
  else {
1239
- const ie = ve(ee);
1240
- let Oe;
1241
- if (ie) {
1242
- if (q !== ie) throw Error("Transforming incompatible types");
1243
- const ce = f(ee);
1244
- Oe = q.transform(S, ce, y);
1245
- } else Oe = i.default(S);
1246
- _(k, q, Oe);
1275
+ const t2 = getEditType(c2d);
1276
+ let e;
1277
+ if (t2) {
1278
+ if (t1 !== t2) throw Error("Transforming incompatible types");
1279
+ const e2 = getEdit(c2d);
1280
+ e = t1.transform(e1, e2, direction);
1281
+ } else e = deepClone_js_1.default(e1);
1282
+ writeEdit(w2, t1, e);
1247
1283
  }
1248
1284
  }
1249
- let P = 0, x = 0, he = 0, be = 0, We = 0, He = 0, Ne = M != null && M.descendFirst(), Ye = Ne;
1250
- const ze = s.advancer(U, void 0, (S, ie) => {
1251
- O(ie) && he++;
1285
+ let p1PickOff = 0, p1DropOff = 0, p2PickOff = 0, p2DropOff = 0, outPickOff = 0, outDropOff = 0, p1pValid = p1Pick != null && p1Pick.descendFirst(), p1pDidDescend = p1pValid;
1286
+ const ap2p = cursor_js_1.advancer(p2Pick, void 0, (k, c) => {
1287
+ hasPick(c) && p2PickOff++;
1252
1288
  });
1253
- let Se = A != null && A.descendFirst(), Te = Se;
1254
- for (const S of B) if (typeof S == "number") {
1255
- let ie;
1256
- const Oe = o(B.getComponent()), ce = S - x;
1289
+ let p2dValid = p2Drop != null && p2Drop.descendFirst(), p2dDidDescend = p2dValid;
1290
+ for (const key of p1Drop) if (typeof key == "number") {
1291
+ let _p1Pick;
1292
+ const hd1 = hasDrop(p1Drop.getComponent()), k1Mid = key - p1DropOff;
1257
1293
  {
1258
- let Be;
1259
- for (; Ne && typeof (Be = M.getKey()) == "number"; ) {
1260
- Be += P;
1261
- const Re = M.getComponent(), Xe = O(Re);
1262
- if (Be > ce || Be === ce && (!Xe || D === 0 && Oe)) break;
1263
- if (Xe) {
1264
- P--;
1265
- const Ke = Re.p;
1266
- K.includes(Ke), Re.d, a(te[Re.d]), O(a(te[Re.d])), (Re.r === void 0 || Ue && Ue.has(Re)) && (Ke == null || !Pe[Ke] || D !== 1 && K.includes(Ke)) || We--;
1294
+ let p1k;
1295
+ for (; p1pValid && typeof (p1k = p1Pick.getKey()) == "number"; ) {
1296
+ p1k += p1PickOff;
1297
+ const c = p1Pick.getComponent(), hp = hasPick(c);
1298
+ if (p1k > k1Mid || p1k === k1Mid && (!hp || side === 0 && hd1)) break;
1299
+ if (hp) {
1300
+ p1PickOff--;
1301
+ const slot1 = c.p;
1302
+ op1PickAtOp2Pick.includes(slot1), c.d, getComponent(heldDropWrites[c.d]), hasPick(getComponent(heldDropWrites[c.d])), (c.r === void 0 || cancelledRemoves && cancelledRemoves.has(c)) && (slot1 == null || !pickComponents[slot1] || side !== 1 && op1PickAtOp2Pick.includes(slot1)) || outPickOff--;
1267
1303
  }
1268
- Ne = M.nextSibling();
1304
+ p1pValid = p1Pick.nextSibling();
1269
1305
  }
1270
- ie = Ne && Be === ce ? M : null;
1306
+ _p1Pick = p1pValid && p1k === k1Mid ? p1Pick : null;
1271
1307
  }
1272
- const ke = ce - P;
1273
- let Ge = ze(ke);
1274
- const rt = ke - he;
1275
- let Je = null;
1308
+ const raw = k1Mid - p1PickOff;
1309
+ let _p2Pick = ap2p(raw);
1310
+ const k2Mid = raw - p2PickOff;
1311
+ let _p2Drop = null;
1276
1312
  {
1277
- let Be, Re;
1278
- for (; Se && typeof (Be = A.getKey()) == "number"; ) {
1279
- Re = Be - be;
1280
- const Xe = A.getComponent(), Ke = o(Xe);
1281
- if (Re > rt) break;
1282
- if (Re === rt) {
1283
- if (!Ke) {
1284
- Je = A;
1313
+ let p2dk, op2Mid;
1314
+ for (; p2dValid && typeof (p2dk = p2Drop.getKey()) == "number"; ) {
1315
+ op2Mid = p2dk - p2DropOff;
1316
+ const c = p2Drop.getComponent(), hd2 = hasDrop(c);
1317
+ if (op2Mid > k2Mid) break;
1318
+ if (op2Mid === k2Mid) {
1319
+ if (!hd2) {
1320
+ _p2Drop = p2Drop;
1285
1321
  break;
1286
1322
  }
1287
1323
  {
1288
- if (D === 0 && Oe) {
1289
- Je = A;
1324
+ if (side === 0 && hd1) {
1325
+ _p2Drop = p2Drop;
1290
1326
  break;
1291
1327
  }
1292
- const Ve = Ge && O(Ge.getComponent());
1293
- if (D === 0 && Ve) break;
1328
+ const hp2 = _p2Pick && hasPick(_p2Pick.getComponent());
1329
+ if (side === 0 && hp2) break;
1294
1330
  }
1295
1331
  }
1296
- if (Ke) {
1297
- const Ve = Xe.d;
1298
- K[Ve], Xe.i === void 0 && (g[Ve] || K[Ve] != null && D !== 1) ? (g[Ve] || K[Ve] != null && D === 0) && (be++, He--) : be++;
1332
+ if (hd2) {
1333
+ const slot2 = c.d;
1334
+ op1PickAtOp2Pick[slot2], c.i === void 0 && (cancelledOp2[slot2] || op1PickAtOp2Pick[slot2] != null && side !== 1) ? (cancelledOp2[slot2] || op1PickAtOp2Pick[slot2] != null && side === 0) && (p2DropOff++, outDropOff--) : p2DropOff++;
1299
1335
  }
1300
- Se = A.nextSibling();
1336
+ p2dValid = p2Drop.nextSibling();
1301
1337
  }
1302
1338
  }
1303
- const Ot = rt + be + We + He;
1304
- l(Ot >= 0, "trying to descend to a negative index"), k.descend(Ot), Oe && (ie = Ge = Je = null, x++), Q(ie, B, Ge, Je, k, X) && He++, k.ascend();
1339
+ const descend = k2Mid + p2DropOff + outPickOff + outDropOff;
1340
+ assert(descend >= 0, "trying to descend to a negative index"), w2.descend(descend), hd1 && (_p1Pick = _p2Pick = _p2Drop = null, p1DropOff++), writeOp1Drop(_p1Pick, p1Drop, _p2Pick, _p2Drop, w2, removed2) && outDropOff++, w2.ascend();
1305
1341
  } else {
1306
- let ie;
1307
- for (; Ne && (ie = M.getKey(), typeof ie != "string" || !(ie > S || ie === S)); ) Ne = M.nextSibling();
1308
- const Oe = Ne && ie === S ? M : null, ce = ze(S);
1309
- let ke;
1310
- for (; Se && (ke = A.getKey(), typeof ke != "string" || !(ke > S || ke === S)); ) Se = A.nextSibling();
1311
- const Ge = Se && ke === S ? A : null;
1312
- k.descend(S), Q(Oe, B, ce, Ge, k, X), k.ascend();
1342
+ let p1k;
1343
+ for (; p1pValid && (p1k = p1Pick.getKey(), typeof p1k != "string" || !(p1k > key || p1k === key)); ) p1pValid = p1Pick.nextSibling();
1344
+ const _p1Pick = p1pValid && p1k === key ? p1Pick : null, _p2Pick = ap2p(key);
1345
+ let p2dk;
1346
+ for (; p2dValid && (p2dk = p2Drop.getKey(), typeof p2dk != "string" || !(p2dk > key || p2dk === key)); ) p2dValid = p2Drop.nextSibling();
1347
+ const _p2Drop = p2dValid && p2dk === key ? p2Drop : null;
1348
+ w2.descend(key), writeOp1Drop(_p1Pick, p1Drop, _p2Pick, _p2Drop, w2, removed2), w2.ascend();
1313
1349
  }
1314
- return ze.end(), Ye && M.ascend(), Te && A.ascend(), fe;
1315
- }(me, me.clone(), _e, _e.clone(), oe, null), m) return {
1350
+ return ap2p.end(), p1pDidDescend && p1Pick.ascend(), p2dDidDescend && p2Drop.ascend(), droppedHere;
1351
+ }, "writeOp1Drop"))(r1, r1.clone(), r2, r2.clone(), w, null), conflict) return {
1316
1352
  ok: !1,
1317
- conflict: m
1353
+ conflict
1318
1354
  };
1319
- oe.reset();
1320
- const Me = (Q, M, B) => Q.traverse(M, (U, A) => {
1321
- U.d != null && B(U.d, Q, A);
1322
- });
1323
- (g.length || re.length) && (Me(_e, oe, (Q, M, B) => {
1324
- g[Q] && !N[Q] && B.write("r", !0), re[Q] && B.mergeTree(re[Q].get());
1325
- }), oe.reset());
1326
- const Ee = [], $e = [];
1327
- if ((te.length || g.length) && !m) {
1328
- const Q = s.readCursor(tt(oe.get()));
1329
- if (Me(Q, null, (M, B) => {
1330
- Ee[M] = B.clone();
1331
- }), te.forEach((M) => {
1332
- M && Me(s.readCursor(M.get()), null, (B, U) => {
1333
- Ee[B] = U.clone();
1355
+ w.reset();
1356
+ const eachDrop = /* @__PURE__ */ __name((r, w2, fn) => r.traverse(w2, (c, w3) => {
1357
+ c.d != null && fn(c.d, r, w3);
1358
+ }), "eachDrop");
1359
+ (cancelledOp2.length || heldPickWrites.length) && (eachDrop(r2, w, (slot2, r, w2) => {
1360
+ cancelledOp2[slot2] && !discardedOp2Drop[slot2] && w2.write("r", !0), heldPickWrites[slot2] && w2.mergeTree(heldPickWrites[slot2].get());
1361
+ }), w.reset());
1362
+ const heldOutDropRead = [], heldOutDropWrites = [];
1363
+ if ((heldDropWrites.length || cancelledOp2.length) && !conflict) {
1364
+ const rOut = cursor_js_1.readCursor(shallowCloneOp(w.get()));
1365
+ if (eachDrop(rOut, null, (slotOut, r) => {
1366
+ heldOutDropRead[slotOut] = r.clone();
1367
+ }), heldDropWrites.forEach((hdw) => {
1368
+ hdw && eachDrop(cursor_js_1.readCursor(hdw.get()), null, (slotOut, r) => {
1369
+ heldOutDropRead[slotOut] = r.clone();
1334
1370
  });
1335
- }), function M(B, U, A, k, X, Y) {
1336
- const ee = a(U);
1337
- if (ee && O(ee)) if (ee.p != null) {
1338
- const P = ee.p;
1339
- Ee[P].getPath(), A = Ee[P], k = $e[P] = s.writeCursor();
1340
- } else ee.r !== void 0 && (A = null);
1341
- else o(a(A)) && (A = null);
1342
- const fe = B.getComponent();
1343
- if (fe) {
1344
- let P;
1345
- if ((P = fe.d) != null) {
1346
- const x = te[P];
1347
- x && (x.get(), k.mergeTree(x.get()), A = s.readCursor(x.get()));
1371
+ }), (/* @__PURE__ */ __name(function writeHeldOp2Drop(p2Drop, outPick, outDrop, w2, parentC, removedOut) {
1372
+ const coutp = getComponent(outPick);
1373
+ if (coutp && hasPick(coutp)) if (coutp.p != null) {
1374
+ const slot = coutp.p;
1375
+ heldOutDropRead[slot].getPath(), outDrop = heldOutDropRead[slot], w2 = heldOutDropWrites[slot] = cursor_js_1.writeCursor();
1376
+ } else coutp.r !== void 0 && (outDrop = null);
1377
+ else hasDrop(getComponent(outDrop)) && (outDrop = null);
1378
+ const c2 = p2Drop.getComponent();
1379
+ if (c2) {
1380
+ let slot2;
1381
+ if ((slot2 = c2.d) != null) {
1382
+ const _w = heldDropWrites[slot2];
1383
+ _w && (_w.get(), w2.mergeTree(_w.get()), outDrop = cursor_js_1.readCursor(_w.get()));
1348
1384
  }
1349
1385
  }
1350
- let de = 0, le = 0;
1351
- const ye = s.advancer(U, void 0, (P, x) => {
1352
- O(x) && de--;
1353
- }), q = s.advancer(A, (P, x) => o(x) ? -(P - le) - 1 : P - le, (P, x) => {
1354
- o(x) && le++;
1386
+ let outPickOff = 0, outDropOff = 0;
1387
+ const oPickAdv = cursor_js_1.advancer(outPick, void 0, (k, c) => {
1388
+ hasPick(c) && outPickOff--;
1389
+ }), oDropAdv = cursor_js_1.advancer(outDrop, (k, c) => hasDrop(c) ? -(k - outDropOff) - 1 : k - outDropOff, (k, c) => {
1390
+ hasDrop(c) && outDropOff++;
1355
1391
  });
1356
- for (const P of B) if (typeof P == "number") {
1357
- const x = ye(P), he = P + de, be = q(he), We = he + le;
1358
- k.descend(We), M(B, x, be, k), k.ascend();
1359
- } else k.descend(P), M(B, ye(P), q(P), k), k.ascend();
1360
- ye.end(), q.end();
1361
- }(_e, Q, Q.clone(), oe), oe.reset(), m) return {
1392
+ for (const o2dk of p2Drop) if (typeof o2dk == "number") {
1393
+ const _outPick = oPickAdv(o2dk), rmid = o2dk + outPickOff, _outDrop = oDropAdv(rmid), rfinal = rmid + outDropOff;
1394
+ w2.descend(rfinal), writeHeldOp2Drop(p2Drop, _outPick, _outDrop, w2), w2.ascend();
1395
+ } else w2.descend(o2dk), writeHeldOp2Drop(p2Drop, oPickAdv(o2dk), oDropAdv(o2dk), w2), w2.ascend();
1396
+ oPickAdv.end(), oDropAdv.end();
1397
+ }, "writeHeldOp2Drop"))(r2, rOut, rOut.clone(), w), w.reset(), conflict) return {
1362
1398
  ok: !1,
1363
- conflict: m
1399
+ conflict
1364
1400
  };
1365
- if (oe.get(), $e.length) {
1366
- const M = $e.map((U) => U ? U.get() : null), B = s.readCursor(tt(oe.get()));
1367
- if (Me(B, oe, (U, A, k) => {
1368
- const X = M[U];
1369
- X && (k.mergeTree(X), M[U] = null);
1370
- }), M.find((U) => U)) {
1371
- const U = s.writeCursor(), A = s.writeCursor();
1372
- let k = 0, X = 0;
1373
- M.forEach((Y) => {
1374
- Y != null && Me(s.readCursor(Y), null, (ee) => {
1375
- const fe = Le[ee];
1376
- U.writeMove(C[fe].getPath(), $[fe].getPath(), k++);
1377
- const de = se[fe];
1378
- de && de.forEach((le) => {
1379
- g[le] || D !== 1 && K[le] != null || A.writeMove(T[le].getPath(), p[le].getPath(), X++);
1401
+ if (w.get(), heldOutDropWrites.length) {
1402
+ const heldOutDropContent = heldOutDropWrites.map((w2) => w2 ? w2.get() : null), rOut2 = cursor_js_1.readCursor(shallowCloneOp(w.get()));
1403
+ if (eachDrop(rOut2, w, (slotOut, r, w2) => {
1404
+ const data = heldOutDropContent[slotOut];
1405
+ data && (w2.mergeTree(data), heldOutDropContent[slotOut] = null);
1406
+ }), heldOutDropContent.find((x) => x)) {
1407
+ const w1 = cursor_js_1.writeCursor(), w2 = cursor_js_1.writeCursor();
1408
+ let nextSlot1 = 0, nextSlot2 = 0;
1409
+ heldOutDropContent.forEach((data) => {
1410
+ data != null && eachDrop(cursor_js_1.readCursor(data), null, (c) => {
1411
+ const slot1 = outputSlotMap[c];
1412
+ w1.writeMove(heldOp1PickByOp1[slot1].getPath(), heldOp1DropByOp1[slot1].getPath(), nextSlot1++);
1413
+ const slot2s = op1PicksOp2DropSlots[slot1];
1414
+ slot2s && slot2s.forEach((slot2) => {
1415
+ cancelledOp2[slot2] || side !== 1 && op1PickAtOp2Pick[slot2] != null || w2.writeMove(heldOp2PickByOp2[slot2].getPath(), heldOp2DropByOp2[slot2].getPath(), nextSlot2++);
1380
1416
  });
1381
1417
  });
1382
- }), m = {
1383
- type: d.ConflictType.BLACKHOLE,
1384
- op1: U.get(),
1385
- op2: A.get()
1418
+ }), conflict = {
1419
+ type: types_js_1.ConflictType.BLACKHOLE,
1420
+ op1: w1.get(),
1421
+ op2: w2.get()
1386
1422
  };
1387
1423
  }
1388
1424
  }
1389
1425
  }
1390
- return m ? {
1426
+ return conflict ? {
1391
1427
  ok: !1,
1392
- conflict: m
1428
+ conflict
1393
1429
  } : {
1394
1430
  ok: !0,
1395
- result: oe.get()
1431
+ result: w.get()
1396
1432
  };
1397
1433
  }
1398
- const gt = (r) => {
1399
- const u = new Error("Transform detected write conflict");
1400
- throw u.conflict = r, u.type = u.name = "writeConflict", u;
1401
- };
1402
- function Dt(r, u, y) {
1403
- const D = nt(r, u, y);
1404
- if (D.ok) return D.result;
1405
- gt(D.conflict);
1406
- }
1407
- const qe = (r) => {
1408
- const u = s.writeCursor();
1409
- return s.readCursor(r).traverse(u, (y, D) => {
1410
- (o(y) || ve(y)) && D.write("r", !0);
1411
- }), u.get();
1412
- }, At = (r, u) => {
1413
- const { type: y, op1: D, op2: m } = r;
1414
- switch (y) {
1415
- case d.ConflictType.DROP_COLLISION:
1416
- return u === "left" ? [null, qe(m)] : [qe(D), null];
1417
- case d.ConflictType.RM_UNEXPECTED_CONTENT:
1418
- let C = !1;
1419
- return s.readCursor(D).traverse(null, ($) => {
1420
- $.r !== void 0 && (C = !0);
1421
- }), C ? [null, qe(m)] : [qe(D), null];
1422
- case d.ConflictType.BLACKHOLE:
1423
- return [qe(D), qe(m)];
1434
+ __name(tryTransform, "tryTransform");
1435
+ const throwConflictErr = /* @__PURE__ */ __name((conflict) => {
1436
+ const err = new Error("Transform detected write conflict");
1437
+ throw err.conflict = conflict, err.type = err.name = "writeConflict", err;
1438
+ }, "throwConflictErr");
1439
+ function transform(op1, op2, side) {
1440
+ const res = tryTransform(op1, op2, side);
1441
+ if (res.ok) return res.result;
1442
+ throwConflictErr(res.conflict);
1443
+ }
1444
+ __name(transform, "transform");
1445
+ const opThatRemovesDE = /* @__PURE__ */ __name((op) => {
1446
+ const w = cursor_js_1.writeCursor();
1447
+ return cursor_js_1.readCursor(op).traverse(w, (c, w2) => {
1448
+ (hasDrop(c) || getEditType(c)) && w2.write("r", !0);
1449
+ }), w.get();
1450
+ }, "opThatRemovesDE"), resolveConflict = /* @__PURE__ */ __name((conflict, side) => {
1451
+ const { type: type2, op1, op2 } = conflict;
1452
+ switch (type2) {
1453
+ case types_js_1.ConflictType.DROP_COLLISION:
1454
+ return side === "left" ? [null, opThatRemovesDE(op2)] : [opThatRemovesDE(op1), null];
1455
+ case types_js_1.ConflictType.RM_UNEXPECTED_CONTENT:
1456
+ let op1HasRemove = !1;
1457
+ return cursor_js_1.readCursor(op1).traverse(null, (c) => {
1458
+ c.r !== void 0 && (op1HasRemove = !0);
1459
+ }), op1HasRemove ? [null, opThatRemovesDE(op2)] : [opThatRemovesDE(op1), null];
1460
+ case types_js_1.ConflictType.BLACKHOLE:
1461
+ return [opThatRemovesDE(op1), opThatRemovesDE(op2)];
1424
1462
  default:
1425
- throw Error("Unrecognised conflict: " + y);
1463
+ throw Error("Unrecognised conflict: " + type2);
1426
1464
  }
1427
- };
1428
- function _t(r, u, y, D) {
1429
- let m = null;
1465
+ }, "resolveConflict");
1466
+ function transformWithConflictsPred(allowConflict, op1, op2, side) {
1467
+ let r2Aggregate = null;
1430
1468
  for (; ; ) {
1431
- const C = nt(u, y, D);
1432
- if (C.ok) return ne(m, C.result);
1469
+ const res = tryTransform(op1, op2, side);
1470
+ if (res.ok) return compose(r2Aggregate, res.result);
1433
1471
  {
1434
- const { conflict: $ } = C;
1435
- r($) || gt($);
1436
- const [T, p] = At($, D);
1437
- u = ne(H(u), T), y = ne(H(y), p), m = ne(m, p);
1472
+ const { conflict } = res;
1473
+ allowConflict(conflict) || throwConflictErr(conflict);
1474
+ const [r1, r2] = resolveConflict(conflict, side);
1475
+ op1 = compose(normalize(op1), r1), op2 = compose(normalize(op2), r2), r2Aggregate = compose(r2Aggregate, r2);
1438
1476
  }
1439
1477
  }
1440
1478
  }
1441
- })(Ct);
1442
- (function(n) {
1443
- var e = Ce && Ce.__createBinding || (Object.create ? function(d, l, a, E) {
1444
- E === void 0 && (E = a), Object.defineProperty(d, E, { enumerable: !0, get: function() {
1445
- return l[a];
1446
- } });
1447
- } : function(d, l, a, E) {
1448
- E === void 0 && (E = a), d[E] = l[a];
1449
- }), t = Ce && Ce.__exportStar || function(d, l) {
1450
- for (var a in d) a !== "default" && !l.hasOwnProperty(a) && e(l, d, a);
1479
+ __name(transformWithConflictsPred, "transformWithConflictsPred");
1480
+ })(json1_release);
1481
+ (function(exports) {
1482
+ var __createBinding = commonjsGlobal && commonjsGlobal.__createBinding || (Object.create ? function(o, m, k, k2) {
1483
+ k2 === void 0 && (k2 = k), Object.defineProperty(o, k2, { enumerable: !0, get: /* @__PURE__ */ __name(function() {
1484
+ return m[k];
1485
+ }, "get") });
1486
+ } : function(o, m, k, k2) {
1487
+ k2 === void 0 && (k2 = k), o[k2] = m[k];
1488
+ }), __exportStar = commonjsGlobal && commonjsGlobal.__exportStar || function(m, exports2) {
1489
+ for (var p in m) p !== "default" && !exports2.hasOwnProperty(p) && __createBinding(exports2, m, p);
1451
1490
  };
1452
- Object.defineProperty(n, "__esModule", { value: !0 }), t(Ct, n);
1453
- var i = ft;
1454
- Object.defineProperty(n, "ReadCursor", { enumerable: !0, get: function() {
1455
- return i.ReadCursor;
1456
- } }), Object.defineProperty(n, "WriteCursor", { enumerable: !0, get: function() {
1457
- return i.WriteCursor;
1458
- } });
1459
- var s = ht;
1460
- Object.defineProperty(n, "ConflictType", { enumerable: !0, get: function() {
1461
- return s.ConflictType;
1462
- } });
1463
- })(F);
1464
- class Ht {
1491
+ Object.defineProperty(exports, "__esModule", { value: !0 }), __exportStar(json1_release, exports);
1492
+ var cursor_js_1 = cursor;
1493
+ Object.defineProperty(exports, "ReadCursor", { enumerable: !0, get: /* @__PURE__ */ __name(function() {
1494
+ return cursor_js_1.ReadCursor;
1495
+ }, "get") }), Object.defineProperty(exports, "WriteCursor", { enumerable: !0, get: /* @__PURE__ */ __name(function() {
1496
+ return cursor_js_1.WriteCursor;
1497
+ }, "get") });
1498
+ var types_1 = types;
1499
+ Object.defineProperty(exports, "ConflictType", { enumerable: !0, get: /* @__PURE__ */ __name(function() {
1500
+ return types_1.ConflictType;
1501
+ }, "get") });
1502
+ })(dist$1);
1503
+ const _UnitDrawingService = class _UnitDrawingService {
1465
1504
  constructor() {
1466
- V(this, "drawingManagerData", {});
1467
- V(this, "_oldDrawingManagerData", {});
1468
- V(this, "_focusDrawings", []);
1469
- V(this, "_remove$", new we());
1470
- V(this, "remove$", this._remove$.asObservable());
1471
- V(this, "_add$", new we());
1472
- V(this, "add$", this._add$.asObservable());
1473
- V(this, "_update$", new we());
1474
- V(this, "update$", this._update$.asObservable());
1475
- V(this, "_order$", new we());
1476
- V(this, "order$", this._order$.asObservable());
1477
- V(this, "_group$", new we());
1478
- V(this, "group$", this._group$.asObservable());
1479
- V(this, "_ungroup$", new we());
1480
- V(this, "ungroup$", this._ungroup$.asObservable());
1481
- V(this, "_refreshTransform$", new we());
1482
- V(this, "refreshTransform$", this._refreshTransform$.asObservable());
1483
- V(this, "_visible$", new we());
1484
- V(this, "visible$", this._visible$.asObservable());
1505
+ __publicField(this, "drawingManagerData", {});
1506
+ __publicField(this, "_oldDrawingManagerData", {});
1507
+ __publicField(this, "_focusDrawings", []);
1508
+ __publicField(this, "_remove$", new Subject());
1509
+ __publicField(this, "remove$", this._remove$.asObservable());
1510
+ __publicField(this, "_add$", new Subject());
1511
+ __publicField(this, "add$", this._add$.asObservable());
1512
+ __publicField(this, "_update$", new Subject());
1513
+ __publicField(this, "update$", this._update$.asObservable());
1514
+ __publicField(this, "_order$", new Subject());
1515
+ __publicField(this, "order$", this._order$.asObservable());
1516
+ __publicField(this, "_group$", new Subject());
1517
+ __publicField(this, "group$", this._group$.asObservable());
1518
+ __publicField(this, "_ungroup$", new Subject());
1519
+ __publicField(this, "ungroup$", this._ungroup$.asObservable());
1520
+ __publicField(this, "_refreshTransform$", new Subject());
1521
+ __publicField(this, "refreshTransform$", this._refreshTransform$.asObservable());
1522
+ __publicField(this, "_visible$", new Subject());
1523
+ __publicField(this, "visible$", this._visible$.asObservable());
1485
1524
  // private readonly _externalUpdate$ = new Subject<T[]>();
1486
1525
  // readonly externalUpdate$ = this._externalUpdate$.asObservable();
1487
- V(this, "_focus$", new we());
1488
- V(this, "focus$", this._focus$.asObservable());
1489
- V(this, "_featurePluginUpdate$", new we());
1490
- V(this, "featurePluginUpdate$", this._featurePluginUpdate$.asObservable());
1491
- V(this, "_featurePluginAdd$", new we());
1492
- V(this, "featurePluginAdd$", this._featurePluginAdd$.asObservable());
1493
- V(this, "_featurePluginRemove$", new we());
1494
- V(this, "featurePluginRemove$", this._featurePluginRemove$.asObservable());
1495
- V(this, "_featurePluginOrderUpdate$", new we());
1496
- V(this, "featurePluginOrderUpdate$", this._featurePluginOrderUpdate$.asObservable());
1497
- V(this, "_featurePluginGroupUpdate$", new we());
1498
- V(this, "featurePluginGroupUpdate$", this._featurePluginGroupUpdate$.asObservable());
1499
- V(this, "_featurePluginUngroupUpdate$", new we());
1500
- V(this, "featurePluginUngroupUpdate$", this._featurePluginUngroupUpdate$.asObservable());
1501
- V(this, "_visible", !0);
1502
- V(this, "_editable", !0);
1526
+ __publicField(this, "_focus$", new Subject());
1527
+ __publicField(this, "focus$", this._focus$.asObservable());
1528
+ __publicField(this, "_featurePluginUpdate$", new Subject());
1529
+ __publicField(this, "featurePluginUpdate$", this._featurePluginUpdate$.asObservable());
1530
+ __publicField(this, "_featurePluginAdd$", new Subject());
1531
+ __publicField(this, "featurePluginAdd$", this._featurePluginAdd$.asObservable());
1532
+ __publicField(this, "_featurePluginRemove$", new Subject());
1533
+ __publicField(this, "featurePluginRemove$", this._featurePluginRemove$.asObservable());
1534
+ __publicField(this, "_featurePluginOrderUpdate$", new Subject());
1535
+ __publicField(this, "featurePluginOrderUpdate$", this._featurePluginOrderUpdate$.asObservable());
1536
+ __publicField(this, "_featurePluginGroupUpdate$", new Subject());
1537
+ __publicField(this, "featurePluginGroupUpdate$", this._featurePluginGroupUpdate$.asObservable());
1538
+ __publicField(this, "_featurePluginUngroupUpdate$", new Subject());
1539
+ __publicField(this, "featurePluginUngroupUpdate$", this._featurePluginUngroupUpdate$.asObservable());
1540
+ __publicField(this, "_visible", !0);
1541
+ __publicField(this, "_editable", !0);
1503
1542
  }
1504
1543
  dispose() {
1505
1544
  this._remove$.complete(), this._add$.complete(), this._update$.complete(), this._order$.complete(), this._focus$.complete(), this._featurePluginUpdate$.complete(), this._featurePluginAdd$.complete(), this._featurePluginRemove$.complete(), this._featurePluginOrderUpdate$.complete(), this.drawingManagerData = {}, this._oldDrawingManagerData = {};
1506
1545
  }
1507
- visibleNotification(e) {
1508
- this._visible$.next(e);
1546
+ visibleNotification(visibleParams) {
1547
+ this._visible$.next(visibleParams);
1509
1548
  }
1510
- refreshTransform(e) {
1511
- e.forEach((t) => {
1512
- const i = this._getCurrentBySearch(t);
1513
- i != null && (i.transform = t.transform, i.transforms = t.transforms, i.isMultiTransform = t.isMultiTransform);
1514
- }), this.refreshTransformNotification(e);
1549
+ refreshTransform(updateParams) {
1550
+ updateParams.forEach((updateParam) => {
1551
+ const param = this._getCurrentBySearch(updateParam);
1552
+ param != null && (param.transform = updateParam.transform, param.transforms = updateParam.transforms, param.isMultiTransform = updateParam.isMultiTransform);
1553
+ }), this.refreshTransformNotification(updateParams);
1515
1554
  }
1516
- getDrawingDataForUnit(e) {
1517
- return this.drawingManagerData[e];
1555
+ getDrawingDataForUnit(unitId) {
1556
+ return this.drawingManagerData[unitId];
1518
1557
  }
1519
- removeDrawingDataForUnit(e) {
1520
- const t = this.drawingManagerData[e];
1521
- if (t == null)
1558
+ removeDrawingDataForUnit(unitId) {
1559
+ const subUnits = this.drawingManagerData[unitId];
1560
+ if (subUnits == null)
1522
1561
  return;
1523
- delete this.drawingManagerData[e];
1524
- const i = [];
1525
- Object.keys(t).forEach((s) => {
1526
- const d = t[s];
1527
- (d == null ? void 0 : d.data) != null && Object.keys(d.data).forEach((l) => {
1528
- i.push({ unitId: e, subUnitId: s, drawingId: l });
1562
+ delete this.drawingManagerData[unitId];
1563
+ const drawings = [];
1564
+ Object.keys(subUnits).forEach((subUnitId) => {
1565
+ const subUnit = subUnits[subUnitId];
1566
+ (subUnit == null ? void 0 : subUnit.data) != null && Object.keys(subUnit.data).forEach((drawingId) => {
1567
+ drawings.push({ unitId, subUnitId, drawingId });
1529
1568
  });
1530
- }), i.length > 0 && this.removeNotification(i);
1531
- }
1532
- registerDrawingData(e, t) {
1533
- this.drawingManagerData[e] = t;
1534
- }
1535
- initializeNotification(e) {
1536
- const t = [], i = this.drawingManagerData[e];
1537
- i != null && (Object.keys(i).forEach((s) => {
1538
- this._establishDrawingMap(e, s);
1539
- const d = i[s];
1540
- Object.keys(d.data).forEach((l) => {
1541
- const a = d.data[l];
1542
- a.unitId = e, a.subUnitId = s, t.push(a);
1569
+ }), drawings.length > 0 && this.removeNotification(drawings);
1570
+ }
1571
+ registerDrawingData(unitId, data) {
1572
+ this.drawingManagerData[unitId] = data;
1573
+ }
1574
+ initializeNotification(unitId) {
1575
+ const drawings = [], data = this.drawingManagerData[unitId];
1576
+ data != null && (Object.keys(data).forEach((subUnitId) => {
1577
+ this._establishDrawingMap(unitId, subUnitId);
1578
+ const subUnitData = data[subUnitId];
1579
+ Object.keys(subUnitData.data).forEach((drawingId) => {
1580
+ const drawing = subUnitData.data[drawingId];
1581
+ drawing.unitId = unitId, drawing.subUnitId = subUnitId, drawings.push(drawing);
1543
1582
  });
1544
- }), t.length > 0 && this.addNotification(t));
1583
+ }), drawings.length > 0 && this.addNotification(drawings));
1545
1584
  }
1546
- getDrawingData(e, t) {
1547
- return this._getDrawingData(e, t);
1585
+ getDrawingData(unitId, subUnitId) {
1586
+ return this._getDrawingData(unitId, subUnitId);
1548
1587
  }
1549
1588
  // Use in doc only.
1550
- setDrawingData(e, t, i) {
1551
- this.drawingManagerData[e][t].data = i;
1552
- }
1553
- getBatchAddOp(e) {
1554
- const t = [], i = [], s = [];
1555
- e.forEach((W) => {
1556
- const { op: O, invertOp: o } = this._addByParam(W);
1557
- t.push({ unitId: W.unitId, subUnitId: W.subUnitId, drawingId: W.drawingId }), i.push(O), s.push(o);
1589
+ setDrawingData(unitId, subUnitId, data) {
1590
+ this.drawingManagerData[unitId][subUnitId].data = data;
1591
+ }
1592
+ getBatchAddOp(insertParams) {
1593
+ const objects = [], ops = [], invertOps = [];
1594
+ insertParams.forEach((insertParam) => {
1595
+ const { op: op2, invertOp: invertOp2 } = this._addByParam(insertParam);
1596
+ objects.push({ unitId: insertParam.unitId, subUnitId: insertParam.subUnitId, drawingId: insertParam.drawingId }), ops.push(op2), invertOps.push(invertOp2);
1558
1597
  });
1559
- const d = i.reduce(F.type.compose, null), l = s.reduce(F.type.compose, null), { unitId: a, subUnitId: E } = e[0];
1560
- return { undo: l, redo: d, unitId: a, subUnitId: E, objects: t };
1561
- }
1562
- getBatchRemoveOp(e) {
1563
- const t = [], i = [];
1564
- e.forEach((E) => {
1565
- const { op: W, invertOp: O } = this._removeByParam(E);
1566
- t.push(W), i.push(O);
1598
+ const op = ops.reduce(dist$1.type.compose, null), invertOp = invertOps.reduce(dist$1.type.compose, null), { unitId, subUnitId } = insertParams[0];
1599
+ return { undo: invertOp, redo: op, unitId, subUnitId, objects };
1600
+ }
1601
+ getBatchRemoveOp(removeParams) {
1602
+ const ops = [], invertOps = [];
1603
+ removeParams.forEach((removeParam) => {
1604
+ const { op: op2, invertOp: invertOp2 } = this._removeByParam(removeParam);
1605
+ ops.push(op2), invertOps.push(invertOp2);
1567
1606
  });
1568
- const s = t.reduce(F.type.compose, null), d = i.reduce(F.type.compose, null), { unitId: l, subUnitId: a } = e[0];
1569
- return { undo: d, redo: s, unitId: l, subUnitId: a, objects: e };
1570
- }
1571
- getBatchUpdateOp(e) {
1572
- const t = [], i = [], s = [];
1573
- e.forEach((W) => {
1574
- const { op: O, invertOp: o } = this._updateByParam(W);
1575
- t.push({ unitId: W.unitId, subUnitId: W.subUnitId, drawingId: W.drawingId }), i.push(O), s.push(o);
1607
+ const op = ops.reduce(dist$1.type.compose, null), invertOp = invertOps.reduce(dist$1.type.compose, null), { unitId, subUnitId } = removeParams[0];
1608
+ return { undo: invertOp, redo: op, unitId, subUnitId, objects: removeParams };
1609
+ }
1610
+ getBatchUpdateOp(updateParams) {
1611
+ const objects = [], ops = [], invertOps = [];
1612
+ updateParams.forEach((updateParam) => {
1613
+ const { op: op2, invertOp: invertOp2 } = this._updateByParam(updateParam);
1614
+ objects.push({ unitId: updateParam.unitId, subUnitId: updateParam.subUnitId, drawingId: updateParam.drawingId }), ops.push(op2), invertOps.push(invertOp2);
1576
1615
  });
1577
- const d = i.reduce(F.type.compose, null), l = s.reduce(F.type.compose, null), { unitId: a, subUnitId: E } = e[0];
1578
- return { undo: l, redo: d, unitId: a, subUnitId: E, objects: t };
1616
+ const op = ops.reduce(dist$1.type.compose, null), invertOp = invertOps.reduce(dist$1.type.compose, null), { unitId, subUnitId } = updateParams[0];
1617
+ return { undo: invertOp, redo: op, unitId, subUnitId, objects };
1579
1618
  }
1580
- removeNotification(e) {
1581
- this._remove$.next(e);
1619
+ removeNotification(removeParams) {
1620
+ this._remove$.next(removeParams);
1582
1621
  }
1583
- addNotification(e) {
1584
- this._add$.next(e);
1622
+ addNotification(insertParams) {
1623
+ this._add$.next(insertParams);
1585
1624
  }
1586
- updateNotification(e) {
1587
- this._update$.next(e);
1625
+ updateNotification(updateParams) {
1626
+ this._update$.next(updateParams);
1588
1627
  }
1589
- orderNotification(e) {
1590
- this._order$.next(e);
1628
+ orderNotification(orderParams) {
1629
+ this._order$.next(orderParams);
1591
1630
  }
1592
- groupUpdateNotification(e) {
1593
- this._group$.next(e);
1631
+ groupUpdateNotification(groupParams) {
1632
+ this._group$.next(groupParams);
1594
1633
  }
1595
- ungroupUpdateNotification(e) {
1596
- this._ungroup$.next(e);
1634
+ ungroupUpdateNotification(groupParams) {
1635
+ this._ungroup$.next(groupParams);
1597
1636
  }
1598
- refreshTransformNotification(e) {
1599
- this._refreshTransform$.next(e);
1637
+ refreshTransformNotification(refreshParams) {
1638
+ this._refreshTransform$.next(refreshParams);
1600
1639
  }
1601
- getGroupDrawingOp(e) {
1602
- const t = [], { unitId: i, subUnitId: s } = e[0].parent;
1603
- e.forEach((a) => {
1604
- t.push(this._getGroupDrawingOp(a));
1640
+ getGroupDrawingOp(groupParams) {
1641
+ const ops = [], { unitId, subUnitId } = groupParams[0].parent;
1642
+ groupParams.forEach((groupParam) => {
1643
+ ops.push(this._getGroupDrawingOp(groupParam));
1605
1644
  });
1606
- const d = t.reduce(F.type.compose, null);
1607
- return { undo: F.type.invertWithDoc(d, this.drawingManagerData), redo: d, unitId: i, subUnitId: s, objects: e };
1645
+ const op = ops.reduce(dist$1.type.compose, null);
1646
+ return { undo: dist$1.type.invertWithDoc(op, this.drawingManagerData), redo: op, unitId, subUnitId, objects: groupParams };
1608
1647
  }
1609
- getUngroupDrawingOp(e) {
1610
- const t = [], { unitId: i, subUnitId: s } = e[0].parent;
1611
- e.forEach((a) => {
1612
- t.push(this._getUngroupDrawingOp(a));
1648
+ getUngroupDrawingOp(groupParams) {
1649
+ const ops = [], { unitId, subUnitId } = groupParams[0].parent;
1650
+ groupParams.forEach((groupParam) => {
1651
+ ops.push(this._getUngroupDrawingOp(groupParam));
1613
1652
  });
1614
- const d = t.reduce(F.type.compose, null);
1615
- return { undo: F.type.invertWithDoc(d, this.drawingManagerData), redo: d, unitId: i, subUnitId: s, objects: e };
1653
+ const op = ops.reduce(dist$1.type.compose, null);
1654
+ return { undo: dist$1.type.invertWithDoc(op, this.drawingManagerData), redo: op, unitId, subUnitId, objects: groupParams };
1616
1655
  }
1617
- getDrawingsByGroup(e) {
1618
- const { unitId: t, subUnitId: i, drawingId: s } = e;
1619
- if (this.getDrawingByParam({ unitId: t, subUnitId: i, drawingId: s }) == null)
1656
+ getDrawingsByGroup(groupParam) {
1657
+ const { unitId, subUnitId, drawingId } = groupParam;
1658
+ if (this.getDrawingByParam({ unitId, subUnitId, drawingId }) == null)
1620
1659
  return [];
1621
- const l = this._getDrawingData(t, i), a = [];
1622
- return Object.keys(l).forEach((E) => {
1623
- const W = l[E];
1624
- W.groupId === s && a.push(W);
1625
- }), a;
1626
- }
1627
- _getGroupDrawingOp(e) {
1628
- const { parent: t, children: i } = e, { unitId: s, subUnitId: d, drawingId: l } = t, a = [];
1629
- a.push(
1630
- F.insertOp([s, d, "data", l], t)
1660
+ const drawings = this._getDrawingData(unitId, subUnitId), children = [];
1661
+ return Object.keys(drawings).forEach((key) => {
1662
+ const drawing = drawings[key];
1663
+ drawing.groupId === drawingId && children.push(drawing);
1664
+ }), children;
1665
+ }
1666
+ _getGroupDrawingOp(groupParam) {
1667
+ const { parent, children } = groupParam, { unitId: groupUnitId, subUnitId: groupSubUnitId, drawingId: groupDrawingId } = parent, ops = [];
1668
+ ops.push(
1669
+ dist$1.insertOp([groupUnitId, groupSubUnitId, "data", groupDrawingId], parent)
1631
1670
  );
1632
- let E = Number.NEGATIVE_INFINITY;
1633
- return i.forEach((W) => {
1634
- const { unitId: O, subUnitId: o, drawingId: c } = W, h = this._hasDrawingOrder({ unitId: O, subUnitId: o, drawingId: c });
1635
- E = Math.max(E, h), a.push(
1636
- ...this._getUpdateParamCompareOp(W, this.getDrawingByParam({ unitId: O, subUnitId: o, drawingId: c }))
1671
+ let maxChildIndex = Number.NEGATIVE_INFINITY;
1672
+ return children.forEach((child) => {
1673
+ const { unitId, subUnitId, drawingId } = child, index = this._hasDrawingOrder({ unitId, subUnitId, drawingId });
1674
+ maxChildIndex = Math.max(maxChildIndex, index), ops.push(
1675
+ ...this._getUpdateParamCompareOp(child, this.getDrawingByParam({ unitId, subUnitId, drawingId }))
1637
1676
  );
1638
- }), E === Number.NEGATIVE_INFINITY && (E = this._getDrawingOrder(s, d).length), a.push(
1639
- F.insertOp([s, d, "order", E], l)
1640
- ), a.reduce(F.type.compose, null);
1641
- }
1642
- _getUngroupDrawingOp(e) {
1643
- const { parent: t, children: i } = e, { unitId: s, subUnitId: d, drawingId: l } = t, a = [];
1644
- return i.forEach((E) => {
1645
- const { unitId: W, subUnitId: O, drawingId: o } = E;
1646
- a.push(
1647
- ...this._getUpdateParamCompareOp(E, this.getDrawingByParam({ unitId: W, subUnitId: O, drawingId: o }))
1677
+ }), maxChildIndex === Number.NEGATIVE_INFINITY && (maxChildIndex = this._getDrawingOrder(groupUnitId, groupSubUnitId).length), ops.push(
1678
+ dist$1.insertOp([groupUnitId, groupSubUnitId, "order", maxChildIndex], groupDrawingId)
1679
+ ), ops.reduce(dist$1.type.compose, null);
1680
+ }
1681
+ _getUngroupDrawingOp(groupParam) {
1682
+ const { parent, children } = groupParam, { unitId: groupUnitId, subUnitId: groupSubUnitId, drawingId: groupDrawingId } = parent, ops = [];
1683
+ return children.forEach((child) => {
1684
+ const { unitId, subUnitId, drawingId } = child;
1685
+ ops.push(
1686
+ ...this._getUpdateParamCompareOp(child, this.getDrawingByParam({ unitId, subUnitId, drawingId }))
1648
1687
  );
1649
- }), a.push(
1650
- F.removeOp([s, d, "data", l], !0)
1651
- ), a.push(
1652
- F.removeOp([s, d, "order", this._getDrawingOrder(s, d).indexOf(l)], !0)
1653
- ), a.reduce(F.type.compose, null);
1688
+ }), ops.push(
1689
+ dist$1.removeOp([groupUnitId, groupSubUnitId, "data", groupDrawingId], !0)
1690
+ ), ops.push(
1691
+ dist$1.removeOp([groupUnitId, groupSubUnitId, "order", this._getDrawingOrder(groupUnitId, groupSubUnitId).indexOf(groupDrawingId)], !0)
1692
+ ), ops.reduce(dist$1.type.compose, null);
1654
1693
  }
1655
- applyJson1(e, t, i) {
1656
- this._establishDrawingMap(e, t), this._oldDrawingManagerData = { ...this.drawingManagerData }, this.drawingManagerData = F.type.apply(this.drawingManagerData, i);
1694
+ applyJson1(unitId, subUnitId, jsonOp) {
1695
+ this._establishDrawingMap(unitId, subUnitId), this._oldDrawingManagerData = { ...this.drawingManagerData }, this.drawingManagerData = dist$1.type.apply(this.drawingManagerData, jsonOp);
1657
1696
  }
1658
1697
  // private _fillMissingFields(jsonOp: JSONOp) {
1659
1698
  // if (jsonOp == null) {
@@ -1675,163 +1714,163 @@ class Ht {
1675
1714
  // }
1676
1715
  // }
1677
1716
  // }
1678
- featurePluginUpdateNotification(e) {
1679
- this._featurePluginUpdate$.next(e);
1717
+ featurePluginUpdateNotification(updateParams) {
1718
+ this._featurePluginUpdate$.next(updateParams);
1680
1719
  }
1681
- featurePluginOrderUpdateNotification(e) {
1682
- this._featurePluginOrderUpdate$.next(e);
1720
+ featurePluginOrderUpdateNotification(drawingOrderUpdateParam) {
1721
+ this._featurePluginOrderUpdate$.next(drawingOrderUpdateParam);
1683
1722
  }
1684
- featurePluginAddNotification(e) {
1685
- this._featurePluginAdd$.next(e);
1723
+ featurePluginAddNotification(insertParams) {
1724
+ this._featurePluginAdd$.next(insertParams);
1686
1725
  }
1687
- featurePluginRemoveNotification(e) {
1688
- this._featurePluginRemove$.next(e);
1726
+ featurePluginRemoveNotification(removeParams) {
1727
+ this._featurePluginRemove$.next(removeParams);
1689
1728
  }
1690
- featurePluginGroupUpdateNotification(e) {
1691
- this._featurePluginGroupUpdate$.next(e);
1729
+ featurePluginGroupUpdateNotification(groupParams) {
1730
+ this._featurePluginGroupUpdate$.next(groupParams);
1692
1731
  }
1693
- featurePluginUngroupUpdateNotification(e) {
1694
- this._featurePluginUngroupUpdate$.next(e);
1732
+ featurePluginUngroupUpdateNotification(groupParams) {
1733
+ this._featurePluginUngroupUpdate$.next(groupParams);
1695
1734
  }
1696
- getDrawingByParam(e) {
1697
- return this._getCurrentBySearch(e);
1735
+ getDrawingByParam(param) {
1736
+ return this._getCurrentBySearch(param);
1698
1737
  }
1699
- getOldDrawingByParam(e) {
1700
- return this._getOldBySearch(e);
1738
+ getOldDrawingByParam(param) {
1739
+ return this._getOldBySearch(param);
1701
1740
  }
1702
- getDrawingOKey(e) {
1703
- const [t, i, s] = e.split("#-#");
1704
- return this._getCurrentBySearch({ unitId: t, subUnitId: i, drawingId: s });
1741
+ getDrawingOKey(oKey) {
1742
+ const [unitId, subUnitId, drawingId] = oKey.split("#-#");
1743
+ return this._getCurrentBySearch({ unitId, subUnitId, drawingId });
1705
1744
  }
1706
- focusDrawing(e) {
1707
- if (e == null) {
1745
+ focusDrawing(params) {
1746
+ if (params == null) {
1708
1747
  this._focusDrawings = [], this._focus$.next([]);
1709
1748
  return;
1710
1749
  }
1711
- const t = [];
1712
- e.forEach((i) => {
1713
- var E;
1714
- const { unitId: s, subUnitId: d, drawingId: l } = i, a = (E = this._getDrawingData(s, d)) == null ? void 0 : E[l];
1715
- a != null && t.push(a);
1716
- }), t.length > 0 && (this._focusDrawings = t, this._focus$.next(t));
1750
+ const drawingParams = [];
1751
+ params.forEach((param) => {
1752
+ var _a2;
1753
+ const { unitId, subUnitId, drawingId } = param, item = (_a2 = this._getDrawingData(unitId, subUnitId)) == null ? void 0 : _a2[drawingId];
1754
+ item != null && drawingParams.push(item);
1755
+ }), drawingParams.length > 0 && (this._focusDrawings = drawingParams, this._focus$.next(drawingParams));
1717
1756
  }
1718
1757
  getFocusDrawings() {
1719
- const e = [];
1720
- return this._focusDrawings.forEach((t) => {
1721
- var a;
1722
- const { unitId: i, subUnitId: s, drawingId: d } = t, l = (a = this._getDrawingData(i, s)) == null ? void 0 : a[d];
1723
- l != null && e.push(l);
1724
- }), e;
1758
+ const drawingParams = [];
1759
+ return this._focusDrawings.forEach((param) => {
1760
+ var _a2;
1761
+ const { unitId, subUnitId, drawingId } = param, item = (_a2 = this._getDrawingData(unitId, subUnitId)) == null ? void 0 : _a2[drawingId];
1762
+ item != null && drawingParams.push(item);
1763
+ }), drawingParams;
1725
1764
  }
1726
- getDrawingOrder(e, t) {
1727
- return this._getDrawingOrder(e, t);
1765
+ getDrawingOrder(unitId, subUnitId) {
1766
+ return this._getDrawingOrder(unitId, subUnitId);
1728
1767
  }
1729
1768
  // Use in doc only.
1730
- setDrawingOrder(e, t, i) {
1731
- this.drawingManagerData[e][t].order = i;
1769
+ setDrawingOrder(unitId, subUnitId, order) {
1770
+ this.drawingManagerData[unitId][subUnitId].order = order;
1732
1771
  }
1733
- orderUpdateNotification(e) {
1734
- this._order$.next(e);
1772
+ orderUpdateNotification(orderParams) {
1773
+ this._order$.next(orderParams);
1735
1774
  }
1736
- getForwardDrawingsOp(e) {
1737
- const { unitId: t, subUnitId: i, drawingIds: s } = e, d = [], l = this.getDrawingOrder(t, i), a = [...s];
1738
- s.forEach((O) => {
1739
- const o = this._hasDrawingOrder({ unitId: t, subUnitId: i, drawingId: O });
1740
- if (o === -1 || o === l.length - 1)
1775
+ getForwardDrawingsOp(orderParams) {
1776
+ const { unitId, subUnitId, drawingIds } = orderParams, ops = [], orders = this.getDrawingOrder(unitId, subUnitId), newIds = [...drawingIds];
1777
+ drawingIds.forEach((drawingId) => {
1778
+ const index = this._hasDrawingOrder({ unitId, subUnitId, drawingId });
1779
+ if (index === -1 || index === orders.length - 1)
1741
1780
  return;
1742
- const c = F.moveOp([t, i, "order", o], [t, i, "order", o + 1]);
1743
- d.push(c), a.includes(l[o + 1]) || a.push(l[o + 1]);
1781
+ const op2 = dist$1.moveOp([unitId, subUnitId, "order", index], [unitId, subUnitId, "order", index + 1]);
1782
+ ops.push(op2), newIds.includes(orders[index + 1]) || newIds.push(orders[index + 1]);
1744
1783
  });
1745
- const E = d.reduce(F.type.compose, null);
1746
- return { undo: F.type.invertWithDoc(E, this.drawingManagerData), redo: E, unitId: t, subUnitId: i, objects: { ...e, drawingIds: a } };
1747
- }
1748
- getBackwardDrawingOp(e) {
1749
- const { unitId: t, subUnitId: i, drawingIds: s } = e, d = [], l = this.getDrawingOrder(t, i), a = [...s];
1750
- s.forEach((O) => {
1751
- const o = this._hasDrawingOrder({ unitId: t, subUnitId: i, drawingId: O });
1752
- if (o === -1 || o === 0)
1784
+ const op = ops.reduce(dist$1.type.compose, null);
1785
+ return { undo: dist$1.type.invertWithDoc(op, this.drawingManagerData), redo: op, unitId, subUnitId, objects: { ...orderParams, drawingIds: newIds } };
1786
+ }
1787
+ getBackwardDrawingOp(orderParams) {
1788
+ const { unitId, subUnitId, drawingIds } = orderParams, ops = [], orders = this.getDrawingOrder(unitId, subUnitId), newIds = [...drawingIds];
1789
+ drawingIds.forEach((drawingId) => {
1790
+ const index = this._hasDrawingOrder({ unitId, subUnitId, drawingId });
1791
+ if (index === -1 || index === 0)
1753
1792
  return;
1754
- const c = F.moveOp([t, i, "order", o], [t, i, "order", o - 1]);
1755
- d.push(c), a.includes(l[o - 1]) || a.push(l[o - 1]);
1793
+ const op2 = dist$1.moveOp([unitId, subUnitId, "order", index], [unitId, subUnitId, "order", index - 1]);
1794
+ ops.push(op2), newIds.includes(orders[index - 1]) || newIds.push(orders[index - 1]);
1756
1795
  });
1757
- const E = d.reduce(F.type.compose, null);
1758
- return { undo: F.type.invertWithDoc(E, this.drawingManagerData), redo: E, unitId: t, subUnitId: i, objects: { ...e, drawingIds: a } };
1759
- }
1760
- getFrontDrawingsOp(e) {
1761
- const { unitId: t, subUnitId: i, drawingIds: s } = e, d = this._getOrderFromSearchParams(t, i, s), l = [...s], a = this.getDrawingOrder(t, i), E = [];
1762
- d.forEach((o) => {
1763
- const { drawingId: c } = o, h = this._getDrawingCount(t, i) - 1, R = F.moveOp([t, i, "order", this._getDrawingOrder(t, i).indexOf(c)], [t, i, "order", h]);
1764
- E.push(R), l.includes(a[h]) || l.push(a[h]);
1796
+ const op = ops.reduce(dist$1.type.compose, null);
1797
+ return { undo: dist$1.type.invertWithDoc(op, this.drawingManagerData), redo: op, unitId, subUnitId, objects: { ...orderParams, drawingIds: newIds } };
1798
+ }
1799
+ getFrontDrawingsOp(orderParams) {
1800
+ const { unitId, subUnitId, drawingIds } = orderParams, orderDrawingIds = this._getOrderFromSearchParams(unitId, subUnitId, drawingIds), newIds = [...drawingIds], orders = this.getDrawingOrder(unitId, subUnitId), ops = [];
1801
+ orderDrawingIds.forEach((orderDrawingId) => {
1802
+ const { drawingId } = orderDrawingId, index = this._getDrawingCount(unitId, subUnitId) - 1, op2 = dist$1.moveOp([unitId, subUnitId, "order", this._getDrawingOrder(unitId, subUnitId).indexOf(drawingId)], [unitId, subUnitId, "order", index]);
1803
+ ops.push(op2), newIds.includes(orders[index]) || newIds.push(orders[index]);
1765
1804
  });
1766
- const W = E.reduce(F.type.compose, null);
1767
- return { undo: F.type.invertWithDoc(W, this.drawingManagerData), redo: W, unitId: t, subUnitId: i, objects: { ...e, drawingIds: l } };
1768
- }
1769
- getBackDrawingsOp(e) {
1770
- const { unitId: t, subUnitId: i, drawingIds: s } = e, d = this._getOrderFromSearchParams(t, i, s, !0), l = [...s], a = this.getDrawingOrder(t, i), E = [];
1771
- d.forEach((o) => {
1772
- const { drawingId: c } = o, h = F.moveOp([t, i, "order", this._getDrawingOrder(t, i).indexOf(c)], [t, i, "order", 0]);
1773
- E.push(h), l.includes(a[0]) || l.push(a[0]);
1805
+ const op = ops.reduce(dist$1.type.compose, null);
1806
+ return { undo: dist$1.type.invertWithDoc(op, this.drawingManagerData), redo: op, unitId, subUnitId, objects: { ...orderParams, drawingIds: newIds } };
1807
+ }
1808
+ getBackDrawingsOp(orderParams) {
1809
+ const { unitId, subUnitId, drawingIds } = orderParams, orderSearchParams = this._getOrderFromSearchParams(unitId, subUnitId, drawingIds, !0), newIds = [...drawingIds], orders = this.getDrawingOrder(unitId, subUnitId), ops = [];
1810
+ orderSearchParams.forEach((orderSearchParam) => {
1811
+ const { drawingId } = orderSearchParam, op2 = dist$1.moveOp([unitId, subUnitId, "order", this._getDrawingOrder(unitId, subUnitId).indexOf(drawingId)], [unitId, subUnitId, "order", 0]);
1812
+ ops.push(op2), newIds.includes(orders[0]) || newIds.push(orders[0]);
1774
1813
  });
1775
- const W = E.reduce(F.type.compose, null);
1776
- return { undo: F.type.invertWithDoc(W, this.drawingManagerData), redo: W, unitId: t, subUnitId: i, objects: { ...e, drawingIds: l } };
1814
+ const op = ops.reduce(dist$1.type.compose, null);
1815
+ return { undo: dist$1.type.invertWithDoc(op, this.drawingManagerData), redo: op, unitId, subUnitId, objects: { ...orderParams, drawingIds: newIds } };
1777
1816
  }
1778
- _getDrawingCount(e, t) {
1779
- return this.getDrawingOrder(e, t).length || 0;
1817
+ _getDrawingCount(unitId, subUnitId) {
1818
+ return this.getDrawingOrder(unitId, subUnitId).length || 0;
1780
1819
  }
1781
- _getOrderFromSearchParams(e, t, i, s = !1) {
1782
- return i.map((d) => {
1783
- const l = this._hasDrawingOrder({ unitId: e, subUnitId: t, drawingId: d });
1784
- return { drawingId: d, zIndex: l };
1785
- }).sort(s === !1 ? Ut : Nt);
1820
+ _getOrderFromSearchParams(unitId, subUnitId, drawingIds, isDesc = !1) {
1821
+ return drawingIds.map((drawingId) => {
1822
+ const zIndex = this._hasDrawingOrder({ unitId, subUnitId, drawingId });
1823
+ return { drawingId, zIndex };
1824
+ }).sort(isDesc === !1 ? sortRules : sortRulesByDesc);
1786
1825
  }
1787
- _hasDrawingOrder(e) {
1788
- if (e == null)
1826
+ _hasDrawingOrder(searchParam) {
1827
+ if (searchParam == null)
1789
1828
  return -1;
1790
- const { unitId: t, subUnitId: i, drawingId: s } = e;
1791
- return this._establishDrawingMap(t, i), this._getDrawingOrder(t, i).indexOf(s);
1829
+ const { unitId, subUnitId, drawingId } = searchParam;
1830
+ return this._establishDrawingMap(unitId, subUnitId), this._getDrawingOrder(unitId, subUnitId).indexOf(drawingId);
1792
1831
  }
1793
- _getCurrentBySearch(e) {
1794
- var d, l, a;
1795
- if (e == null)
1832
+ _getCurrentBySearch(searchParam) {
1833
+ var _a2, _b, _c;
1834
+ if (searchParam == null)
1796
1835
  return;
1797
- const { unitId: t, subUnitId: i, drawingId: s } = e;
1798
- return (a = (l = (d = this.drawingManagerData[t]) == null ? void 0 : d[i]) == null ? void 0 : l.data) == null ? void 0 : a[s];
1836
+ const { unitId, subUnitId, drawingId } = searchParam;
1837
+ return (_c = (_b = (_a2 = this.drawingManagerData[unitId]) == null ? void 0 : _a2[subUnitId]) == null ? void 0 : _b.data) == null ? void 0 : _c[drawingId];
1799
1838
  }
1800
- _getOldBySearch(e) {
1801
- var d, l, a;
1802
- if (e == null)
1839
+ _getOldBySearch(searchParam) {
1840
+ var _a2, _b, _c;
1841
+ if (searchParam == null)
1803
1842
  return;
1804
- const { unitId: t, subUnitId: i, drawingId: s } = e;
1805
- return (a = (l = (d = this._oldDrawingManagerData[t]) == null ? void 0 : d[i]) == null ? void 0 : l.data) == null ? void 0 : a[s];
1843
+ const { unitId, subUnitId, drawingId } = searchParam;
1844
+ return (_c = (_b = (_a2 = this._oldDrawingManagerData[unitId]) == null ? void 0 : _a2[subUnitId]) == null ? void 0 : _b.data) == null ? void 0 : _c[drawingId];
1806
1845
  }
1807
- _establishDrawingMap(e, t, i) {
1808
- var s;
1809
- return this.drawingManagerData[e] || (this.drawingManagerData[e] = {}), this.drawingManagerData[e][t] || (this.drawingManagerData[e][t] = {
1846
+ _establishDrawingMap(unitId, subUnitId, drawingId) {
1847
+ var _a2;
1848
+ return this.drawingManagerData[unitId] || (this.drawingManagerData[unitId] = {}), this.drawingManagerData[unitId][subUnitId] || (this.drawingManagerData[unitId][subUnitId] = {
1810
1849
  data: {},
1811
1850
  order: []
1812
- }), i == null ? null : (s = this.drawingManagerData[e][t].data) == null ? void 0 : s[i];
1851
+ }), drawingId == null ? null : (_a2 = this.drawingManagerData[unitId][subUnitId].data) == null ? void 0 : _a2[drawingId];
1813
1852
  }
1814
- _addByParam(e) {
1815
- const { unitId: t, subUnitId: i, drawingId: s } = e;
1816
- this._establishDrawingMap(t, i, s);
1817
- const d = F.insertOp([t, i, "data", s], e), l = F.insertOp([t, i, "order", this._getDrawingOrder(t, i).length], s), a = [d, l].reduce(F.type.compose, null), E = F.type.invertWithDoc(a, this.drawingManagerData);
1818
- return { op: a, invertOp: E };
1853
+ _addByParam(insertParam) {
1854
+ const { unitId, subUnitId, drawingId } = insertParam;
1855
+ this._establishDrawingMap(unitId, subUnitId, drawingId);
1856
+ const op1 = dist$1.insertOp([unitId, subUnitId, "data", drawingId], insertParam), op2 = dist$1.insertOp([unitId, subUnitId, "order", this._getDrawingOrder(unitId, subUnitId).length], drawingId), op = [op1, op2].reduce(dist$1.type.compose, null), invertOp = dist$1.type.invertWithDoc(op, this.drawingManagerData);
1857
+ return { op, invertOp };
1819
1858
  }
1820
- _removeByParam(e) {
1821
- if (e == null)
1859
+ _removeByParam(searchParam) {
1860
+ if (searchParam == null)
1822
1861
  return { op: [], invertOp: [] };
1823
- const { unitId: t, subUnitId: i, drawingId: s } = e;
1824
- if (this._establishDrawingMap(t, i, s) == null)
1862
+ const { unitId, subUnitId, drawingId } = searchParam;
1863
+ if (this._establishDrawingMap(unitId, subUnitId, drawingId) == null)
1825
1864
  return { op: [], invertOp: [] };
1826
- const l = F.removeOp([t, i, "data", s], !0), a = F.removeOp([t, i, "order", this._getDrawingOrder(t, i).indexOf(s)], !0), E = [l, a].reduce(F.type.compose, null), W = F.type.invertWithDoc(E, this.drawingManagerData);
1827
- return { op: E, invertOp: W };
1865
+ const op1 = dist$1.removeOp([unitId, subUnitId, "data", drawingId], !0), op2 = dist$1.removeOp([unitId, subUnitId, "order", this._getDrawingOrder(unitId, subUnitId).indexOf(drawingId)], !0), op = [op1, op2].reduce(dist$1.type.compose, null), invertOp = dist$1.type.invertWithDoc(op, this.drawingManagerData);
1866
+ return { op, invertOp };
1828
1867
  }
1829
- _updateByParam(e) {
1830
- const { unitId: t, subUnitId: i, drawingId: s } = e, d = this._establishDrawingMap(t, i, s);
1831
- if (d == null)
1868
+ _updateByParam(updateParam) {
1869
+ const { unitId, subUnitId, drawingId } = updateParam, object = this._establishDrawingMap(unitId, subUnitId, drawingId);
1870
+ if (object == null)
1832
1871
  return { op: [], invertOp: [] };
1833
- const a = this._getUpdateParamCompareOp(e, d).reduce(F.type.compose, null), E = F.type.invertWithDoc(a, this.drawingManagerData);
1834
- return { op: a, invertOp: E };
1872
+ const op = this._getUpdateParamCompareOp(updateParam, object).reduce(dist$1.type.compose, null), invertOp = dist$1.type.invertWithDoc(op, this.drawingManagerData);
1873
+ return { op, invertOp };
1835
1874
  }
1836
1875
  // private _initializeDrawingData(updateParam: T, oldParam: T) {
1837
1876
  // Object.keys(updateParam).forEach((key) => {
@@ -1840,22 +1879,22 @@ class Ht {
1840
1879
  // }
1841
1880
  // });
1842
1881
  // }
1843
- _getUpdateParamCompareOp(e, t) {
1844
- const { unitId: i, subUnitId: s, drawingId: d } = e, l = [];
1845
- return Object.keys(e).forEach((a) => {
1846
- const E = e[a], W = t[a];
1847
- W !== E && l.push(
1848
- F.replaceOp([i, s, "data", d, a], W, E)
1882
+ _getUpdateParamCompareOp(newParam, oldParam) {
1883
+ const { unitId, subUnitId, drawingId } = newParam, ops = [];
1884
+ return Object.keys(newParam).forEach((key) => {
1885
+ const newVal = newParam[key], oldVal = oldParam[key];
1886
+ oldVal !== newVal && ops.push(
1887
+ dist$1.replaceOp([unitId, subUnitId, "data", drawingId, key], oldVal, newVal)
1849
1888
  );
1850
- }), l;
1889
+ }), ops;
1851
1890
  }
1852
- _getDrawingData(e, t) {
1853
- var i, s;
1854
- return ((s = (i = this.drawingManagerData[e]) == null ? void 0 : i[t]) == null ? void 0 : s.data) || {};
1891
+ _getDrawingData(unitId, subUnitId) {
1892
+ var _a2, _b;
1893
+ return ((_b = (_a2 = this.drawingManagerData[unitId]) == null ? void 0 : _a2[subUnitId]) == null ? void 0 : _b.data) || {};
1855
1894
  }
1856
- _getDrawingOrder(e, t) {
1857
- var i, s;
1858
- return ((s = (i = this.drawingManagerData[e]) == null ? void 0 : i[t]) == null ? void 0 : s.order) || [];
1895
+ _getDrawingOrder(unitId, subUnitId) {
1896
+ var _a2, _b;
1897
+ return ((_b = (_a2 = this.drawingManagerData[unitId]) == null ? void 0 : _a2[subUnitId]) == null ? void 0 : _b.order) || [];
1859
1898
  }
1860
1899
  getDrawingVisible() {
1861
1900
  return this._visible;
@@ -1863,80 +1902,84 @@ class Ht {
1863
1902
  getDrawingEditable() {
1864
1903
  return this._editable;
1865
1904
  }
1866
- setDrawingVisible(e) {
1867
- this._visible = e;
1905
+ setDrawingVisible(visible) {
1906
+ this._visible = visible;
1868
1907
  }
1869
- setDrawingEditable(e) {
1870
- this._editable = e;
1908
+ setDrawingEditable(editable) {
1909
+ this._editable = editable;
1871
1910
  }
1911
+ };
1912
+ __name(_UnitDrawingService, "UnitDrawingService");
1913
+ let UnitDrawingService = _UnitDrawingService;
1914
+ const _DrawingManagerService = class _DrawingManagerService extends UnitDrawingService {
1915
+ };
1916
+ __name(_DrawingManagerService, "DrawingManagerService");
1917
+ let DrawingManagerService = _DrawingManagerService;
1918
+ function getDrawingShapeKeyByDrawingSearch({ unitId, subUnitId, drawingId }, index) {
1919
+ return typeof index == "number" ? `${unitId}#-#${subUnitId}#-#${drawingId}#-#${index}` : `${unitId}#-#${subUnitId}#-#${drawingId}`;
1872
1920
  }
1873
- class Kt extends Ht {
1874
- }
1875
- function an({ unitId: n, subUnitId: e, drawingId: t }, i) {
1876
- return typeof i == "number" ? `${n}#-#${e}#-#${t}#-#${i}` : `${n}#-#${e}#-#${t}`;
1877
- }
1878
- const cn = async (n) => new Promise((e, t) => {
1879
- const i = new Image();
1880
- i.src = n, i.onload = () => {
1881
- e({
1882
- width: i.width,
1883
- height: i.height,
1884
- image: i
1921
+ __name(getDrawingShapeKeyByDrawingSearch, "getDrawingShapeKeyByDrawingSearch");
1922
+ const getImageSize = /* @__PURE__ */ __name(async (src) => new Promise((resolve, reject) => {
1923
+ const image = new Image();
1924
+ image.src = src, image.onload = () => {
1925
+ resolve({
1926
+ width: image.width,
1927
+ height: image.height,
1928
+ image
1885
1929
  });
1886
- }, i.onerror = (s) => {
1887
- t(s);
1930
+ }, image.onerror = (error) => {
1931
+ reject(error);
1888
1932
  };
1889
- });
1890
- var et = /* @__PURE__ */ ((n) => (n.URL = "URL", n.UUID = "UUID", n.BASE64 = "BASE64", n))(et || {}), Ze = /* @__PURE__ */ ((n) => (n.SUCCUSS = "0", n.ERROR_EXCEED_SIZE = "1", n.ERROR_IMAGE_TYPE = "2", n.ERROR_UPLOAD_COUNT_LIMIT = "3", n.ERROR_IMAGE = "4", n))(Ze || {});
1891
- const Vt = It("core.image-io.service");
1892
- class Ft {
1933
+ }), "getImageSize");
1934
+ var ImageSourceType = /* @__PURE__ */ ((ImageSourceType2) => (ImageSourceType2.URL = "URL", ImageSourceType2.UUID = "UUID", ImageSourceType2.BASE64 = "BASE64", ImageSourceType2))(ImageSourceType || {}), ImageUploadStatusType = /* @__PURE__ */ ((ImageUploadStatusType2) => (ImageUploadStatusType2.SUCCUSS = "0", ImageUploadStatusType2.ERROR_EXCEED_SIZE = "1", ImageUploadStatusType2.ERROR_IMAGE_TYPE = "2", ImageUploadStatusType2.ERROR_UPLOAD_COUNT_LIMIT = "3", ImageUploadStatusType2.ERROR_IMAGE = "4", ImageUploadStatusType2))(ImageUploadStatusType || {});
1935
+ const IImageIoService = createIdentifier("core.image-io.service"), _ImageIoService = class _ImageIoService {
1893
1936
  constructor() {
1894
- V(this, "_waitCount", 0);
1895
- V(this, "_change$", new we());
1896
- V(this, "change$", this._change$);
1897
- V(this, "_imageSourceCache", /* @__PURE__ */ new Map());
1898
- }
1899
- setWaitCount(e) {
1900
- this._waitCount = e, this._change$.next(e);
1901
- }
1902
- getImageSourceCache(e, t) {
1903
- if (t === et.BASE64) {
1904
- const i = new Image();
1905
- return i.src = e, i;
1937
+ __publicField(this, "_waitCount", 0);
1938
+ __publicField(this, "_change$", new Subject());
1939
+ __publicField(this, "change$", this._change$);
1940
+ __publicField(this, "_imageSourceCache", /* @__PURE__ */ new Map());
1941
+ }
1942
+ setWaitCount(count) {
1943
+ this._waitCount = count, this._change$.next(count);
1944
+ }
1945
+ getImageSourceCache(source, imageSourceType) {
1946
+ if (imageSourceType === ImageSourceType.BASE64) {
1947
+ const image = new Image();
1948
+ return image.src = source, image;
1906
1949
  }
1907
- return this._imageSourceCache.get(e);
1950
+ return this._imageSourceCache.get(source);
1908
1951
  }
1909
- addImageSourceCache(e, t, i) {
1910
- t === et.BASE64 || i == null || this._imageSourceCache.set(e, i);
1952
+ addImageSourceCache(source, imageSourceType, imageSource) {
1953
+ imageSourceType === ImageSourceType.BASE64 || imageSource == null || this._imageSourceCache.set(source, imageSource);
1911
1954
  }
1912
- async getImage(e) {
1913
- return Promise.resolve(e);
1955
+ async getImage(imageId) {
1956
+ return Promise.resolve(imageId);
1914
1957
  }
1915
- async saveImage(e) {
1916
- return new Promise((t, i) => {
1917
- if (!Wt.includes(e.type)) {
1918
- i(new Error(Ze.ERROR_IMAGE_TYPE)), this._decreaseWaiting();
1958
+ async saveImage(imageFile) {
1959
+ return new Promise((resolve, reject) => {
1960
+ if (!DRAWING_IMAGE_ALLOW_IMAGE_LIST.includes(imageFile.type)) {
1961
+ reject(new Error(ImageUploadStatusType.ERROR_IMAGE_TYPE)), this._decreaseWaiting();
1919
1962
  return;
1920
1963
  }
1921
- if (e.size > $t) {
1922
- i(new Error(Ze.ERROR_EXCEED_SIZE)), this._decreaseWaiting();
1964
+ if (imageFile.size > DRAWING_IMAGE_ALLOW_SIZE) {
1965
+ reject(new Error(ImageUploadStatusType.ERROR_EXCEED_SIZE)), this._decreaseWaiting();
1923
1966
  return;
1924
1967
  }
1925
- const s = new FileReader();
1926
- s.readAsDataURL(e), s.onload = (d) => {
1927
- var E;
1928
- const l = (E = d.target) == null ? void 0 : E.result;
1929
- if (l == null) {
1930
- i(new Error(Ze.ERROR_IMAGE)), this._decreaseWaiting();
1968
+ const reader = new FileReader();
1969
+ reader.readAsDataURL(imageFile), reader.onload = (evt) => {
1970
+ var _a2;
1971
+ const replaceSrc = (_a2 = evt.target) == null ? void 0 : _a2.result;
1972
+ if (replaceSrc == null) {
1973
+ reject(new Error(ImageUploadStatusType.ERROR_IMAGE)), this._decreaseWaiting();
1931
1974
  return;
1932
1975
  }
1933
- const a = kt.generateRandomId(6);
1934
- t({
1935
- imageId: a,
1936
- imageSourceType: et.BASE64,
1937
- source: l,
1938
- base64Cache: l,
1939
- status: Ze.SUCCUSS
1976
+ const imageId = Tools.generateRandomId(6);
1977
+ resolve({
1978
+ imageId,
1979
+ imageSourceType: ImageSourceType.BASE64,
1980
+ source: replaceSrc,
1981
+ base64Cache: replaceSrc,
1982
+ status: ImageUploadStatusType.SUCCUSS
1940
1983
  }), this._decreaseWaiting();
1941
1984
  };
1942
1985
  });
@@ -1944,52 +1987,54 @@ class Ft {
1944
1987
  _decreaseWaiting() {
1945
1988
  this._waitCount -= 1, this._change$.next(this._waitCount);
1946
1989
  }
1947
- }
1948
- const un = "__default_document_sub_component_id20231101__";
1949
- var qt = /* @__PURE__ */ ((n) => (n[n.forward = 0] = "forward", n[n.backward = 1] = "backward", n[n.front = 2] = "front", n[n.back = 3] = "back", n))(qt || {}), zt = /* @__PURE__ */ ((n) => (n[n.UNRECOGNIZED = -1] = "UNRECOGNIZED", n[n.DRAWING_IMAGE = 0] = "DRAWING_IMAGE", n[n.DRAWING_SHAPE = 1] = "DRAWING_SHAPE", n[n.DRAWING_CHART = 2] = "DRAWING_CHART", n[n.DRAWING_TABLE = 3] = "DRAWING_TABLE", n[n.DRAWING_SMART_ART = 4] = "DRAWING_SMART_ART", n[n.DRAWING_VIDEO = 5] = "DRAWING_VIDEO", n[n.DRAWING_GROUP = 6] = "DRAWING_GROUP", n[n.DRAWING_UNIT = 7] = "DRAWING_UNIT", n[n.DRAWING_DOM = 8] = "DRAWING_DOM", n))(zt || {});
1950
- const Xt = It("univer.drawing-manager.service");
1951
- var Yt = Object.defineProperty, Zt = Object.getOwnPropertyDescriptor, Jt = (n, e, t, i) => {
1952
- for (var s = i > 1 ? void 0 : i ? Zt(e, t) : e, d = n.length - 1, l; d >= 0; d--)
1953
- (l = n[d]) && (s = (i ? l(e, t, s) : l(s)) || s);
1954
- return i && s && Yt(e, t, s), s;
1955
- }, Qt = (n, e) => (t, i) => e(t, i, n);
1956
- const en = "DRAWING_PLUGIN";
1957
- var ot;
1958
- let wt = (ot = class extends Tt {
1959
- constructor(n, e) {
1960
- super(), this._config = n, this._injector = e;
1961
- }
1962
- onStarting(n) {
1963
- this._initDependencies(n);
1964
- }
1965
- _initDependencies(n) {
1966
- var i;
1967
- jt([
1968
- [Vt, { useClass: Ft }],
1969
- [Xt, { useClass: Kt }]
1970
- ], (i = this._config) == null ? void 0 : i.override).forEach((s) => n.add(s));
1971
- }
1972
- }, V(ot, "pluginName", en), ot);
1973
- wt = Jt([
1974
- Qt(1, Rt(St))
1975
- ], wt);
1990
+ };
1991
+ __name(_ImageIoService, "ImageIoService");
1992
+ let ImageIoService = _ImageIoService;
1993
+ const DEFAULT_DOCUMENT_SUB_COMPONENT_ID = "__default_document_sub_component_id20231101__";
1994
+ var ArrangeTypeEnum = /* @__PURE__ */ ((ArrangeTypeEnum2) => (ArrangeTypeEnum2[ArrangeTypeEnum2.forward = 0] = "forward", ArrangeTypeEnum2[ArrangeTypeEnum2.backward = 1] = "backward", ArrangeTypeEnum2[ArrangeTypeEnum2.front = 2] = "front", ArrangeTypeEnum2[ArrangeTypeEnum2.back = 3] = "back", ArrangeTypeEnum2))(ArrangeTypeEnum || {}), DrawingTypeEnum = /* @__PURE__ */ ((DrawingTypeEnum2) => (DrawingTypeEnum2[DrawingTypeEnum2.UNRECOGNIZED = -1] = "UNRECOGNIZED", DrawingTypeEnum2[DrawingTypeEnum2.DRAWING_IMAGE = 0] = "DRAWING_IMAGE", DrawingTypeEnum2[DrawingTypeEnum2.DRAWING_SHAPE = 1] = "DRAWING_SHAPE", DrawingTypeEnum2[DrawingTypeEnum2.DRAWING_CHART = 2] = "DRAWING_CHART", DrawingTypeEnum2[DrawingTypeEnum2.DRAWING_TABLE = 3] = "DRAWING_TABLE", DrawingTypeEnum2[DrawingTypeEnum2.DRAWING_SMART_ART = 4] = "DRAWING_SMART_ART", DrawingTypeEnum2[DrawingTypeEnum2.DRAWING_VIDEO = 5] = "DRAWING_VIDEO", DrawingTypeEnum2[DrawingTypeEnum2.DRAWING_GROUP = 6] = "DRAWING_GROUP", DrawingTypeEnum2[DrawingTypeEnum2.DRAWING_UNIT = 7] = "DRAWING_UNIT", DrawingTypeEnum2[DrawingTypeEnum2.DRAWING_DOM = 8] = "DRAWING_DOM", DrawingTypeEnum2))(DrawingTypeEnum || {});
1995
+ const IDrawingManagerService = createIdentifier("univer.drawing-manager.service");
1996
+ var __defProp2 = Object.defineProperty, __getOwnPropDesc = Object.getOwnPropertyDescriptor, __decorateClass = /* @__PURE__ */ __name((decorators, target, key, kind) => {
1997
+ for (var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc(target, key) : target, i = decorators.length - 1, decorator; i >= 0; i--)
1998
+ (decorator = decorators[i]) && (result = (kind ? decorator(target, key, result) : decorator(result)) || result);
1999
+ return kind && result && __defProp2(target, key, result), result;
2000
+ }, "__decorateClass"), __decorateParam = /* @__PURE__ */ __name((index, decorator) => (target, key) => decorator(target, key, index), "__decorateParam");
2001
+ const PLUGIN_NAME = "DRAWING_PLUGIN";
2002
+ var _a;
2003
+ let UniverDrawingPlugin = (_a = class extends Plugin {
2004
+ constructor(_config, _injector) {
2005
+ super(), this._config = _config, this._injector = _injector;
2006
+ }
2007
+ onStarting() {
2008
+ this._initDependencies();
2009
+ }
2010
+ _initDependencies() {
2011
+ var _a2;
2012
+ mergeOverrideWithDependencies([
2013
+ [IImageIoService, { useClass: ImageIoService }],
2014
+ [IDrawingManagerService, { useClass: DrawingManagerService }]
2015
+ ], (_a2 = this._config) == null ? void 0 : _a2.override).forEach((d) => this._injector.add(d));
2016
+ }
2017
+ }, __name(_a, "UniverDrawingPlugin"), __publicField(_a, "pluginName", PLUGIN_NAME), _a);
2018
+ UniverDrawingPlugin = __decorateClass([
2019
+ __decorateParam(1, Inject(Injector))
2020
+ ], UniverDrawingPlugin);
1976
2021
  export {
1977
- qt as ArrangeTypeEnum,
1978
- un as DEFAULT_DOCUMENT_SUB_COMPONENT_ID,
1979
- Wt as DRAWING_IMAGE_ALLOW_IMAGE_LIST,
1980
- $t as DRAWING_IMAGE_ALLOW_SIZE,
1981
- ln as DRAWING_IMAGE_COUNT_LIMIT,
1982
- on as DRAWING_IMAGE_HEIGHT_LIMIT,
1983
- sn as DRAWING_IMAGE_WIDTH_LIMIT,
1984
- Kt as DrawingManagerService,
1985
- zt as DrawingTypeEnum,
1986
- Xt as IDrawingManagerService,
1987
- Vt as IImageIoService,
1988
- Ft as ImageIoService,
1989
- et as ImageSourceType,
1990
- Ze as ImageUploadStatusType,
1991
- Ht as UnitDrawingService,
1992
- wt as UniverDrawingPlugin,
1993
- an as getDrawingShapeKeyByDrawingSearch,
1994
- cn as getImageSize
2022
+ ArrangeTypeEnum,
2023
+ DEFAULT_DOCUMENT_SUB_COMPONENT_ID,
2024
+ DRAWING_IMAGE_ALLOW_IMAGE_LIST,
2025
+ DRAWING_IMAGE_ALLOW_SIZE,
2026
+ DRAWING_IMAGE_COUNT_LIMIT,
2027
+ DRAWING_IMAGE_HEIGHT_LIMIT,
2028
+ DRAWING_IMAGE_WIDTH_LIMIT,
2029
+ DrawingManagerService,
2030
+ DrawingTypeEnum,
2031
+ IDrawingManagerService,
2032
+ IImageIoService,
2033
+ ImageIoService,
2034
+ ImageSourceType,
2035
+ ImageUploadStatusType,
2036
+ UnitDrawingService,
2037
+ UniverDrawingPlugin,
2038
+ getDrawingShapeKeyByDrawingSearch,
2039
+ getImageSize
1995
2040
  };