@univerjs/drawing 0.5.4 → 0.5.5-experimental.20250123-34738ff

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