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