@netless/appliance-plugin 1.1.36 → 1.1.38-beta.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (44) hide show
  1. package/READMA.zh-CN.md +9 -4
  2. package/README.md +7 -2
  3. package/dist/appliance-plugin.js +1 -1
  4. package/dist/appliance-plugin.mjs +1 -1
  5. package/dist/assets/{fullWorker-JXQULSul.js → fullWorker-B0Pt8Py_.js} +1 -1
  6. package/dist/assets/{subWorker-DhFJemMO.js → subWorker-CleNZH9d.js} +1 -1
  7. package/dist/{bridge-Cz4mGULo.mjs → bridge-DwZ1Wbur.mjs} +5 -5
  8. package/dist/{bridge-CfmWHJhk.js → bridge-Dy4qAJh2.js} +1 -1
  9. package/dist/bridge.js +1 -1
  10. package/dist/bridge.mjs +1 -1
  11. package/dist/component/svg/manager.d.ts +1 -1
  12. package/dist/component/svg/markmap-runtime.d.ts +39 -0
  13. package/dist/component/svg/mermaid.d.ts +12 -3
  14. package/dist/component/svg/snapshot.d.ts +1 -1
  15. package/dist/component/svg/svgElemt.d.ts +2 -2
  16. package/dist/component/textEditor/utils.d.ts +11 -0
  17. package/dist/core/mainEngine.d.ts +1 -0
  18. package/dist/fullWorker.js +1 -1
  19. package/dist/index-BQ6rzeq9.js +1 -0
  20. package/dist/{index-BfMoaIvs.mjs → index-BhVU2Mya.mjs} +1813 -1710
  21. package/dist/{index-rbiUTgEA.mjs → index-C2MVZqzb.mjs} +1543 -1458
  22. package/dist/{index-BQ5RFl7S.mjs → index-CElZ0WHE.mjs} +1 -1
  23. package/dist/index-CsPVcYdq.js +1 -0
  24. package/dist/{index-6Wdw5Peg.js → index-DTbzQbDD.js} +1 -1
  25. package/dist/index-DZ-ZGSXh.js +1 -0
  26. package/dist/{index-C74ZK6xj.js → index-I3Kp1ALi.js} +1 -1
  27. package/dist/index-RGIk2cUF.mjs +771 -0
  28. package/dist/index-S9-T6OvV.mjs +769 -0
  29. package/dist/index-WaXfuCxD.js +1 -0
  30. package/dist/{index-BDK2SG9v.mjs → index-_2fP_0Sl.mjs} +1 -1
  31. package/dist/markmap-runtime-Cg3OxuZ2.mjs +25 -0
  32. package/dist/markmap-runtime-CsBCTpRs.js +1 -0
  33. package/dist/markmap.d.ts +1 -0
  34. package/dist/markmap.js +3 -0
  35. package/dist/markmap.mjs +535 -0
  36. package/dist/plugin/types.d.ts +1 -1
  37. package/dist/subWorker.js +1 -1
  38. package/package.json +23 -4
  39. package/dist/index-B3JYNjTS.mjs +0 -1262
  40. package/dist/index-B6Z-HNvr.js +0 -3
  41. package/dist/index-BteU9Eqf.js +0 -3
  42. package/dist/index-C0RLN5ik.mjs +0 -1263
  43. package/dist/index-CPeyvSwP.js +0 -1
  44. package/dist/index-Cr7tTnaV.js +0 -1
@@ -1,1263 +0,0 @@
1
- var K = Object.defineProperty;
2
- var j = (o, e, t) => e in o ? K(o, e, { enumerable: !0, configurable: !0, writable: !0, value: t }) : o[e] = t;
3
- var u = (o, e, t) => j(o, typeof e != "symbol" ? e + "" : e, t);
4
- import { E as B, a as y, b as D, c as M, d as E, V as P, S as Z } from "./index-rbiUTgEA.mjs";
5
- import { isEqual as W, isString as _, clone as J, throttle as Q } from "lodash";
6
- import "white-web-sdk";
7
- import "spritejs";
8
- import "lz-string";
9
- import "clipper-lib";
10
- import "lineclip";
11
- import "xss";
12
- import "react-dom";
13
- import "react";
14
- import * as z from "markmap-view";
15
- import { Transformer as ee } from "markmap-lib";
16
- import { O as te } from "./ObserverMap-BudneEfB.mjs";
17
- class re {
18
- constructor() {
19
- u(this, "threadEngine");
20
- }
21
- registerBackgroundThread(e) {
22
- return this.threadEngine = e, this;
23
- }
24
- }
25
- class ae extends re {
26
- constructor() {
27
- super(...arguments);
28
- u(this, "emitEventType", B.CopyNode);
29
- }
30
- async consume(t) {
31
- const { msgType: r, dataType: s, emitEventType: i } = t;
32
- if (r === y.FullWork && s === D.Local && i === this.emitEventType)
33
- return this.consumeForLocalWorker(t), !0;
34
- }
35
- async consumeForLocalWorker(t) {
36
- var s;
37
- const { workId: r } = t;
38
- r && await ((s = this.threadEngine) == null ? void 0 : s.consumeFull(t));
39
- }
40
- }
41
- class se {
42
- constructor(e) {
43
- u(this, "builders", /* @__PURE__ */ new Map());
44
- this.builders = new Map(e.map((t) => [t, this.build(t)]));
45
- }
46
- build(e) {
47
- switch (e) {
48
- case B.CopyNode:
49
- return new ae();
50
- }
51
- }
52
- registerForBackgroundThread(e) {
53
- return this.builders.forEach((t) => {
54
- t && t.registerBackgroundThread(e);
55
- }), this;
56
- }
57
- async consumeForBackgroundThread(e) {
58
- for (const t of this.builders.values())
59
- if (await (t == null ? void 0 : t.consume(e)))
60
- return !0;
61
- return !1;
62
- }
63
- }
64
- let N = null, C = null, $ = !1;
65
- function q(o) {
66
- return !o || typeof o != "string" ? !1 : /```\s*mermaid[\s\S]*?```/i.test(o);
67
- }
68
- async function ie() {
69
- return N || C || (C = import("mermaid").then((o) => (N = o, C = null, o)).catch((o) => {
70
- throw C = null, o;
71
- }), C);
72
- }
73
- async function ne() {
74
- const o = await ie();
75
- return $ || (o.default.initialize({
76
- startOnLoad: !1,
77
- theme: "default"
78
- }), $ = !0), o;
79
- }
80
- function oe() {
81
- return (N == null ? void 0 : N.default) || null;
82
- }
83
- const T = class T {
84
- constructor() {
85
- // 使用 workId 作为 key,存储每个实例的 mermaid 代码块
86
- u(this, "mermaidCodeBlocksByWorkId", /* @__PURE__ */ new Map());
87
- }
88
- /**
89
- * 获取 MermaidManager 单例实例
90
- */
91
- static getInstance() {
92
- return T.instance || (T.instance = new T()), T.instance;
93
- }
94
- /**
95
- * 生成唯一的 mermaid ID
96
- */
97
- generateId() {
98
- return `mermaid-${Math.random().toString(36).substr(2, 9)}`;
99
- }
100
- /**
101
- * 生成 mermaid HTML 容器
102
- * @param id mermaid ID
103
- * @param mermaidCode mermaid 代码(可选,如果提供则存储)
104
- * @param workId 工作 ID(用于命名空间隔离)
105
- * @returns HTML 字符串
106
- */
107
- createContainer(e, t, r) {
108
- if (t && r) {
109
- let s = this.mermaidCodeBlocksByWorkId.get(r);
110
- s || (s = /* @__PURE__ */ new Map(), this.mermaidCodeBlocksByWorkId.set(r, s)), s.set(e, t);
111
- }
112
- return `<div class="mermaid-container" data-mermaid-id="${e}"><div class="mermaid-placeholder" id="${e}">正在渲染图表...</div></div>`;
113
- }
114
- /**
115
- * 获取 mermaid 代码块
116
- * @param id mermaid ID
117
- * @param workId 工作 ID(用于命名空间隔离)
118
- * @returns mermaid 代码或 undefined
119
- */
120
- getCode(e, t) {
121
- const r = this.mermaidCodeBlocksByWorkId.get(t);
122
- return r == null ? void 0 : r.get(e);
123
- }
124
- /**
125
- * 清空指定 workId 的 mermaid 代码块
126
- * @param workId 工作 ID(如果未提供,清空所有)
127
- */
128
- clear(e) {
129
- e ? this.mermaidCodeBlocksByWorkId.delete(e) : this.mermaidCodeBlocksByWorkId.clear();
130
- }
131
- /**
132
- * 扩展 markdown-it 的渲染规则,处理 mermaid 代码块
133
- * @param transformer Transformer 实例
134
- * @param workId 工作 ID(用于命名空间隔离)
135
- */
136
- extendMarkdown(e, t) {
137
- const r = e.md.renderer, s = r.rules.fence, i = this;
138
- r.rules.fence = (a, n, c, h, g) => {
139
- const p = a[n];
140
- if (p.info.trim() === "mermaid") {
141
- const f = i.generateId();
142
- return i.createContainer(f, p.content, t);
143
- }
144
- return s ? s(a, n, c, h, g) : "";
145
- };
146
- }
147
- // 为了向后兼容,保留静态方法(内部使用单例)
148
- static generateId() {
149
- return T.getInstance().generateId();
150
- }
151
- static createContainer(e, t, r) {
152
- return T.getInstance().createContainer(
153
- e,
154
- t,
155
- r
156
- );
157
- }
158
- static getCode(e, t) {
159
- return T.getInstance().getCode(e, t);
160
- }
161
- static clear(e) {
162
- T.getInstance().clear(e);
163
- }
164
- static extendMarkdown(e, t) {
165
- T.getInstance().extendMarkdown(e, t);
166
- }
167
- };
168
- u(T, "instance", null);
169
- let O = T;
170
- class b {
171
- /**
172
- * 检查 markmap 节点及其子节点是否包含 mermaid 代码块
173
- * @param node markmap 节点数据
174
- * @returns 如果节点或其子节点包含 mermaid 代码块,返回 true
175
- */
176
- static checkNodeHasMermaid(e) {
177
- if (!e)
178
- return !1;
179
- if (e.content && typeof e.content == "string" && (e.content.includes('class="mermaid-container"') || e.content.includes("class='mermaid-container'") || e.content.includes("data-mermaid-id=") || e.content.includes("mermaid-placeholder")))
180
- return !0;
181
- if (e.children && Array.isArray(e.children)) {
182
- for (const t of e.children)
183
- if (b.checkNodeHasMermaid(t))
184
- return !0;
185
- }
186
- return !1;
187
- }
188
- /**
189
- * 等待 DOM 更新后渲染 Mermaid 图表
190
- * @param svgElement SVG 元素
191
- * @param workId 工作 ID
192
- * @returns Promise<void>
193
- */
194
- static async renderMermaidAfterDOMUpdate(e, t) {
195
- await b.renderMermaidBlocks(e, t);
196
- }
197
- /**
198
- * 渲染所有 mermaid 容器中的图表
199
- * @param svgElement SVG 元素
200
- * @param workId 工作 ID
201
- * @returns Promise<void>
202
- */
203
- static async renderMermaidBlocks(e, t) {
204
- if (!e)
205
- return;
206
- try {
207
- await ne();
208
- } catch (n) {
209
- console.error("[renderMermaidBlocks] error: ", n);
210
- return;
211
- }
212
- const r = oe();
213
- if (!r)
214
- return;
215
- let s = null, i = !1;
216
- for (let n = 0; n < 30; n++) {
217
- const c = e.querySelectorAll("foreignObject");
218
- if (s = e.querySelectorAll(".mermaid-container"), s.length > 0 || (c.length > 0 && (i = !0), await new Promise((h) => setTimeout(h, 50)), i && n >= 20))
219
- break;
220
- }
221
- if (!s || s.length === 0)
222
- return;
223
- const a = Array.from(s).map(
224
- async (n, c) => {
225
- const h = n, g = h.getAttribute("data-mermaid-id"), p = g ? O.getCode(g, t) : void 0, d = h.querySelector(
226
- ".mermaid-placeholder"
227
- );
228
- if (!(!d || !p))
229
- try {
230
- const w = `mermaid-${t.replace(/[^a-zA-Z0-9_-]/g, "-")}-${Date.now()}-${c}`, { svg: v } = await r.render(w, p);
231
- if (d && d.parentNode) {
232
- const I = document.createElement("div");
233
- I.innerHTML = v;
234
- const l = I.querySelector("svg");
235
- if (l) {
236
- if (!l.getAttribute("viewBox") && l.getAttribute("width") && l.getAttribute("height")) {
237
- const S = l.getAttribute("width"), k = l.getAttribute("height"), x = parseFloat((S == null ? void 0 : S.replace(/px|%/, "")) || "0"), A = parseFloat(
238
- (k == null ? void 0 : k.replace(/px|%/, "")) || "0"
239
- );
240
- x > 0 && A > 0 && l.setAttribute(
241
- "viewBox",
242
- `0 0 ${x} ${A}`
243
- );
244
- }
245
- l.style.display = "block", l.style.maxWidth = "100%", l.style.width = "auto", l.style.height = "auto", l.style.overflow = "visible", l.style.verticalAlign = "top", l.style.objectFit = "contain";
246
- const m = document.createElement("div");
247
- m.className = "mermaid-wrapper", m.style.width = "100%", m.style.height = "auto", m.style.overflow = "hidden", m.style.display = "inline-block", m.style.verticalAlign = "top", m.style.margin = "0", m.style.padding = "0", m.style.boxSizing = "border-box", m.style.position = "relative", this.isSafari() && (m.style.clipPath = "inset(100% 0 0 0)", m.style.pointerEvents = "none"), m.appendChild(l), l.style.width = "100%", l.style.height = "100%", l.style.maxWidth = "100%", l.style.maxHeight = "100%", l.style.objectFit = "contain", l.setAttribute("data-type", "mermaid"), this.isSafari() && (l.style.opacity = "0"), d.parentNode.replaceChild(m, d);
248
- } else
249
- d.outerHTML = v;
250
- }
251
- } catch (f) {
252
- const w = f instanceof Error ? f.message : String(f);
253
- d && (d.textContent = `Mermaid 渲染失败: ${w}`, d.style.color = "red", d.style.fontSize = "12px");
254
- }
255
- }
256
- );
257
- await Promise.all(a);
258
- }
259
- /**
260
- * 检测是否是 Safari 浏览器
261
- * @returns 如果是 Safari 返回 true,否则返回 false
262
- */
263
- static isSafari() {
264
- const e = navigator.userAgent.toLowerCase(), t = e.indexOf("safari") !== -1 && e.indexOf("chrome") === -1 && e.indexOf("chromium") === -1, r = !!(navigator.vendor && navigator.vendor.indexOf("Apple") !== -1);
265
- return t || r;
266
- }
267
- /**
268
- * 将 mermaid SVG 从 foreignObject 移出,直接添加到 markmap SVG 中(Safari 兼容性处理)
269
- * 克隆 mermaid SVG 元素,设置正确的尺寸和位置,然后将 foreignObject 中的 mermaid-container 透明度设为 0
270
- * @param svgElement markmap SVG 元素
271
- * @returns Promise<void>
272
- */
273
- static async transformMermaidSvgToMarkmapSvg(e) {
274
- if (!e)
275
- return;
276
- await new Promise((a) => setTimeout(a, 200));
277
- const t = e.querySelectorAll(
278
- 'g[data-mermaid-wrapper][data-mermaid-clone="true"]'
279
- ), r = e.querySelectorAll("foreignObject"), s = /* @__PURE__ */ new Set();
280
- if (r.forEach((a) => {
281
- const n = a.querySelector(
282
- ".mermaid-container"
283
- ), c = n == null ? void 0 : n.getAttribute("data-mermaid-id");
284
- c && s.add(c);
285
- }), t.forEach((a) => {
286
- const n = a.getAttribute("data-mermaid-id");
287
- n && !s.has(n) && a.remove();
288
- }), r.length === 0)
289
- return;
290
- const i = Array.from(r).map(
291
- async (a) => {
292
- let n = a.querySelector(
293
- 'svg[data-type="mermaid"]'
294
- );
295
- if (!n) {
296
- const g = a.querySelector(".mermaid-wrapper");
297
- g && (n = g.querySelector(
298
- 'svg[data-type="mermaid"]'
299
- ));
300
- }
301
- if (!n)
302
- return;
303
- const c = a.querySelector(
304
- ".mermaid-container"
305
- ), h = c == null ? void 0 : c.getAttribute("data-mermaid-id");
306
- if (h)
307
- try {
308
- const g = parseFloat(a.getAttribute("x") || "0"), p = parseFloat(a.getAttribute("y") || "0"), d = parseFloat(
309
- a.getAttribute("width") || "0"
310
- ), f = parseFloat(
311
- a.getAttribute("height") || "0"
312
- );
313
- if (d <= 0 || f <= 0)
314
- return;
315
- const w = a.parentElement;
316
- if (!w || w.tagName !== "g")
317
- return;
318
- let v = w.getAttribute("transform");
319
- if (!v)
320
- v = `translate(${g}, ${p})`;
321
- else {
322
- const k = v.match(
323
- /translate\(([^,]+),([^)]+)\)/
324
- );
325
- if (k) {
326
- const x = parseFloat(k[1]), A = parseFloat(k[2]), F = x + g, R = A + p;
327
- v = v.replace(
328
- /translate\([^)]+\)/,
329
- `translate(${F}, ${R})`
330
- );
331
- } else
332
- v = `translate(${g}, ${p}) ${v}`;
333
- }
334
- const I = e.querySelector(
335
- `g[data-mermaid-wrapper][data-mermaid-id="${h}"][data-mermaid-clone="true"]`
336
- );
337
- let l;
338
- if (I) {
339
- l = I;
340
- const k = l.querySelector('svg[data-type="mermaid"]');
341
- k && l.removeChild(k);
342
- } else
343
- l = document.createElementNS(
344
- "http://www.w3.org/2000/svg",
345
- "g"
346
- ), l.setAttribute("data-mermaid-wrapper", "true"), l.setAttribute("data-mermaid-clone", "true"), l.setAttribute("data-mermaid-id", h);
347
- l.setAttribute("transform", v);
348
- const m = n.cloneNode(!0);
349
- if (m.setAttribute("width", d.toString()), m.setAttribute("height", f.toString()), m.setAttribute("data-mermaid-transformed", "true"), m.style.width = "", m.style.height = "", m.style.maxWidth = "", m.style.maxHeight = "", m.style.transform = "", m.style.transformOrigin = "", m.style.display = "block", m.style.overflow = "visible", m.style.opacity = "1", !m.getAttribute("viewBox")) {
350
- const k = m.getAttribute("width"), x = m.getAttribute("height");
351
- if (k && x) {
352
- const A = parseFloat(
353
- k.replace(/px|%/, "") || "0"
354
- ), F = parseFloat(
355
- x.replace(/px|%/, "") || "0"
356
- );
357
- A > 0 && F > 0 && m.setAttribute(
358
- "viewBox",
359
- `0 0 ${A} ${F}`
360
- );
361
- }
362
- }
363
- l.appendChild(m), I || (w && w.parentNode ? w.parentNode.insertBefore(l, w.nextSibling) : e.appendChild(l)), c && (c.style.opacity = "0", c.style.pointerEvents = "none");
364
- } catch (g) {
365
- console.error("[transformMermaidSvgToMarkmapSvg] error: ", g);
366
- }
367
- }
368
- );
369
- await Promise.all(i);
370
- }
371
- /**
372
- * 在 root 数据中注入 mermaid HTML
373
- * 找到包含 mermaid 代码块的节点,将 HTML 添加到其 content 中
374
- * @param root markmap root 数据
375
- * @param markdown markdown 文本
376
- * @param workId 工作 ID(用于命名空间隔离)
377
- * @returns 修改后的 root 数据
378
- */
379
- static injectMermaidHtml(e, t, r) {
380
- const s = [], i = t.split(`
381
- `);
382
- let a = "", n = !1, c = [], h = -1;
383
- for (let p = 0; p < i.length; p++) {
384
- const d = i[p], f = d.match(/^(#{1,6})\s+(.+)$/);
385
- if (f && (a = f[2].trim()), d.trim().startsWith("```mermaid"))
386
- n = !0, c = [], h = p;
387
- else if (n && d.trim() === "```") {
388
- n = !1;
389
- const w = c.join(`
390
- `);
391
- w && a && s.push({
392
- title: a,
393
- content: w,
394
- index: h
395
- }), c = [];
396
- } else n && c.push(d);
397
- }
398
- const g = (p) => {
399
- if (!p) return;
400
- const d = p.content || "", f = b.decodeHtmlEntities(d);
401
- for (const w of s)
402
- if (f.includes(w.title) || d.includes(w.title)) {
403
- const v = O.generateId(), I = O.createContainer(
404
- v,
405
- w.content,
406
- r
407
- );
408
- p.content ? p.content = p.content + I : p.content = I;
409
- break;
410
- }
411
- p.children && p.children.length > 0 && p.children.forEach((w) => {
412
- g(w);
413
- });
414
- };
415
- return g(e), e;
416
- }
417
- /**
418
- * 解码 HTML 实体
419
- * @param str HTML 字符串
420
- * @returns 解码后的字符串
421
- */
422
- static decodeHtmlEntities(e) {
423
- const t = document.createElement("textarea");
424
- return t.innerHTML = e, t.value;
425
- }
426
- /**
427
- * 检查 divElement 中是否包含 mermaid SVG 元素
428
- * @param divElement HTMLDivElement 或 SVGSVGElement 元素
429
- * @returns 如果包含 mermaid SVG 元素,返回 true,否则返回 false
430
- */
431
- static hasMermaidSvg(e) {
432
- return e.querySelectorAll("svg[data-type='mermaid']").length > 0;
433
- }
434
- }
435
- class U extends ee {
436
- constructor(t) {
437
- super(t);
438
- u(this, "currentWorkId", null);
439
- }
440
- /**
441
- * 设置当前工作 ID(用于命名空间隔离)
442
- * @param workId 工作 ID
443
- */
444
- setWorkId(t) {
445
- this.currentWorkId = t, t && O.extendMarkdown(this, t);
446
- }
447
- transform(t, r) {
448
- this.currentWorkId ? O.clear(this.currentWorkId) : O.clear();
449
- const s = this.convertKatexToText(t), i = super.transform(s, r);
450
- return i.root && this.processKatexInRoot(i.root), i;
451
- }
452
- /**
453
- * 将 markdown 内容中的 katex 公式转换为普通文本
454
- * 处理 $...$ 和 $$...$$ 格式的公式
455
- * 由于 Safari 对 katex 的兼容性问题,将公式转换为普通文本显示
456
- * @param content markdown 内容
457
- * @returns 处理后的内容
458
- */
459
- convertKatexToText(t) {
460
- if (!t)
461
- return t;
462
- let r = t.replace(
463
- /\$\$([\s\S]*?)\$\$/g,
464
- (s, i) => i.replace(/\\/g, "").replace(/\{/g, "").replace(/\}/g, "").replace(/\\over/g, "/").replace(/\\pm/g, "±").replace(/\\sqrt/g, "√").replace(/\\frac/g, "/").trim()
465
- );
466
- return r = r.replace(
467
- /\$([^$\n]+?)\$/g,
468
- (s, i) => i.replace(/\\/g, "").replace(/\{/g, "").replace(/\}/g, "").replace(/\\over/g, "/").replace(/\\pm/g, "±").replace(/\\sqrt/g, "√").replace(/\\frac/g, "/").trim()
469
- ), r;
470
- }
471
- /**
472
- * 处理转换结果中的 katex HTML,将其转换为普通文本
473
- * 递归处理节点树,查找包含 katex 的内容并转换
474
- * 由于 Safari 对 katex 的兼容性问题,将 katex HTML 转换为普通文本显示
475
- * @param node markmap 节点
476
- */
477
- processKatexInRoot(t) {
478
- if (t) {
479
- if (t.content && typeof t.content == "string" && (t.content.includes("katex") || t.content.includes("katex-mathml"))) {
480
- const r = t.content.match(
481
- /<annotation[^>]*encoding="application\/x-tex">([^<]+)<\/annotation>/
482
- );
483
- if (r) {
484
- const s = r[1].replace(/&lt;/g, "<").replace(/&gt;/g, ">").replace(/&amp;/g, "&").replace(/\\/g, "").replace(/\{/g, "").replace(/\}/g, "").replace(/\\over/g, "/").replace(/\\pm/g, "±").replace(/\\sqrt/g, "√").replace(/\\frac/g, "/").trim();
485
- t.content = t.content.replace(
486
- /<div[^>]*xmlns="http:\/\/www\.w3\.org\/1999\/xhtml"[^>]*>Katex:\s*<span[^>]*class="katex"[^>]*>[\s\S]*?<\/span><\/div>/g,
487
- s
488
- );
489
- } else {
490
- const s = document.createElement("div");
491
- s.innerHTML = t.content;
492
- const i = s.querySelector(".katex");
493
- if (i) {
494
- let a = i.textContent || "";
495
- a = a.replace(/^Katex:\s*/i, "").trim(), t.content = t.content.replace(
496
- /<div[^>]*xmlns="http:\/\/www\.w3\.org\/1999\/xhtml"[^>]*>Katex:\s*<span[^>]*class="katex"[^>]*>[\s\S]*?<\/span><\/div>/g,
497
- a || "公式"
498
- );
499
- } else {
500
- const a = t.content.replace(/<[^>]+>/g, " ").replace(/\s+/g, " ").replace(/^Katex:\s*/i, "").trim();
501
- t.content = a || "公式";
502
- }
503
- }
504
- }
505
- t.children && Array.isArray(t.children) && t.children.forEach((r) => {
506
- this.processKatexInRoot(r);
507
- });
508
- }
509
- }
510
- /**
511
- * 等待 markmap foreignObject 内所有图片加载完成
512
- * 用于在调用 fit() 之前确保所有图片都已加载,以便正确计算尺寸
513
- * @param svgElement SVG 元素
514
- * @param timeout 超时时间(毫秒),默认 10 秒
515
- * @returns Promise<void> 当所有图片加载完成时 resolve
516
- */
517
- static async waitForImagesInForeignObjects(t, r = 1e4) {
518
- if (!t)
519
- return;
520
- const s = t.querySelectorAll(
521
- "foreignObject.markmap-foreign img"
522
- );
523
- if (s.length === 0)
524
- return;
525
- const i = [], a = /* @__PURE__ */ new Set();
526
- s.forEach((n) => {
527
- const c = n.src || n.getAttribute("src");
528
- if (!c || a.has(c) || (a.add(c), n.complete && n.naturalWidth > 0))
529
- return;
530
- const h = new Promise((g) => {
531
- const p = setTimeout(() => {
532
- g();
533
- }, r);
534
- if (n.complete && n.naturalWidth > 0) {
535
- clearTimeout(p), g();
536
- return;
537
- }
538
- const d = () => {
539
- clearTimeout(p), n.removeEventListener("load", d), n.removeEventListener("error", f), g();
540
- }, f = () => {
541
- clearTimeout(p), n.removeEventListener("load", d), n.removeEventListener("error", f), g();
542
- };
543
- n.addEventListener("load", d), n.addEventListener("error", f), !n.src && c && (n.src = c);
544
- });
545
- i.push(h);
546
- }), i.length > 0 && await Promise.all(i);
547
- }
548
- }
549
- const L = new U(), { loadCSS: ce, loadJS: le, Markmap: he } = z, { scripts: H, styles: V } = L.getAssets();
550
- V && ce(V);
551
- H && le(H, {
552
- getMarkmap: () => z
553
- });
554
- async function de(o) {
555
- const e = o.querySelectorAll("img"), t = Array.from(e).map((i) => {
556
- if (!i.crossOrigin && i.src && !i.src.startsWith("data:") && (i.crossOrigin = "anonymous", i.complete)) {
557
- const a = i.src;
558
- i.src = "", i.src = a;
559
- }
560
- return i.complete && i.crossOrigin ? Promise.resolve() : new Promise((a) => {
561
- i.onload = () => {
562
- a(void 0);
563
- }, i.onerror = () => {
564
- a(void 0);
565
- };
566
- });
567
- });
568
- return o.querySelectorAll("svg").forEach((i) => {
569
- i.querySelectorAll("image").forEach((n) => {
570
- n.href && !n.href.baseVal.startsWith("data:") && (n.getAttribute("crossorigin") || n.setAttribute("crossorigin", "anonymous"), t.push(
571
- new Promise((c) => {
572
- const h = new Image();
573
- h.crossOrigin = "anonymous", h.onload = () => {
574
- c(void 0);
575
- }, h.onerror = () => {
576
- c(void 0);
577
- }, h.src = n.href.baseVal;
578
- })
579
- ));
580
- });
581
- }), await Promise.all(t);
582
- }
583
- async function me(o) {
584
- const r = Date.now();
585
- let s = !1;
586
- for (; Date.now() - r < 5e3; ) {
587
- const i = o.querySelectorAll("path");
588
- if (i.length > 0 && (s = Array.from(i).some((a) => {
589
- const n = a.getAttribute("d") || "";
590
- return n !== "M0,0C0,0,0,0,0,0" && n.length > 10;
591
- }), s))
592
- break;
593
- await new Promise((a) => setTimeout(a, 50));
594
- }
595
- }
596
- async function pe(o) {
597
- const e = o.querySelectorAll("svg");
598
- if (!e.length)
599
- return;
600
- const t = [];
601
- for (let r = 0; r < e.length; r++) {
602
- const s = e[r];
603
- t.push(me(s));
604
- }
605
- await Promise.all(t);
606
- }
607
- async function G(o) {
608
- if (b.hasMermaidSvg(o)) {
609
- const r = Date.now();
610
- let s = !1;
611
- for (; Date.now() - r < 5e3 && !s; ) {
612
- const i = o.querySelectorAll("foreignObject");
613
- if (i.length > 0) {
614
- let a = !0;
615
- for (const n of Array.from(i)) {
616
- const c = parseFloat(n.getAttribute("width") || "0"), h = parseFloat(n.getAttribute("height") || "0");
617
- if (n.querySelector(".mermaid-container") && (c < 50 || h < 50)) {
618
- a = !1;
619
- break;
620
- }
621
- }
622
- if (a) {
623
- s = !0;
624
- break;
625
- }
626
- } else
627
- s = !0;
628
- await new Promise((a) => setTimeout(a, 50));
629
- }
630
- }
631
- }
632
- async function ue(o, e = {}) {
633
- const { width: t = o.offsetWidth, height: r = o.offsetHeight } = e, s = o.offsetWidth || t, i = o.offsetHeight || r;
634
- try {
635
- const { loadSvgToImageLib: a, getSvgToImageLib: n } = await import("./svgToImageLoader-DZz5bAo4.mjs");
636
- let c = n();
637
- if (!c)
638
- try {
639
- c = await a();
640
- } catch (d) {
641
- return console.error("[loadSvgToImageLib] error: ", d), null;
642
- }
643
- const h = o.style.width, g = o.style.height, p = o.style.display;
644
- o.style.width || (o.style.width = `${s}px`), o.style.height || (o.style.height = `${i}px`), (!o.style.display || o.style.display === "none") && (o.style.display = "block");
645
- try {
646
- await new Promise((f) => {
647
- requestAnimationFrame(() => {
648
- requestAnimationFrame(() => {
649
- f();
650
- });
651
- });
652
- });
653
- const d = await c.toPng(o, {
654
- width: s,
655
- height: i,
656
- quality: 1
657
- });
658
- return o.style.width = h, o.style.height = g, o.style.display = p, new Promise((f) => {
659
- const w = new Image();
660
- w.crossOrigin = "anonymous", w.onload = () => {
661
- f(w);
662
- }, w.onerror = () => {
663
- f(null);
664
- }, w.src = d;
665
- });
666
- } catch (d) {
667
- return o.style.width = h, o.style.height = g, o.style.display = p, console.error("[divToImageElement] error: ", d), null;
668
- }
669
- } catch (a) {
670
- return console.error("[divToImageElement] error: ", a), null;
671
- }
672
- }
673
- class ge {
674
- constructor(e) {
675
- u(this, "toolsType", M.BackgroundSVG);
676
- u(this, "vNodes");
677
- u(this, "workOptions");
678
- u(this, "workId");
679
- u(this, "markmapInstance", null);
680
- u(this, "isDestroyed", !1);
681
- u(this, "element");
682
- u(this, "manager");
683
- const { vNodes: t, workId: r, toolsOpt: s, manager: i } = e;
684
- this.workId = r, this.vNodes = t, this.workOptions = s, this.manager = i, this.element = this.createElement(), this.manager.fullLayer.appendChild(this.element), this.vNodes.setInfo(this.workId, {
685
- workShape: this
686
- });
687
- }
688
- get fullLayer() {
689
- return this.manager.fullLayer;
690
- }
691
- get collector() {
692
- return this.manager.master.control.collector;
693
- }
694
- get scenePath() {
695
- return this.manager.master.control.viewContainerManager.getCurScenePath(
696
- this.manager.viewId
697
- );
698
- }
699
- async init() {
700
- await this.render();
701
- }
702
- createElement() {
703
- const { type: e } = this.workOptions;
704
- let t;
705
- return e === E.markmap ? (t = document.createElementNS("http://www.w3.org/2000/svg", "svg"), t.classList.add("svg")) : (t = document.createElement("img"), t.classList.add("img")), t.id = this.workId, t.setAttribute("data-id", this.workId), t;
706
- }
707
- async render(e) {
708
- this.isDestroyed || !this.element || !this.element.parentNode || (this.updateElementPosition(e), await this.updateSvg(e));
709
- }
710
- isSameSize(e) {
711
- const { width: t, height: r } = e, { width: s, height: i } = this.workOptions, a = t * this.manager.camera.scale, n = r * this.manager.camera.scale, c = s * this.manager.camera.scale, h = i * this.manager.camera.scale;
712
- return a === c && n === h;
713
- }
714
- isSamePosition(e) {
715
- const { centerX: t, centerY: r } = e, { centerX: s, centerY: i } = this.workOptions, a = this.manager.getPagePoint(s, i), n = this.manager.getPagePoint(t, r);
716
- return W(n, a);
717
- }
718
- isSameZIndex(e) {
719
- const { zIndex: t } = e, { zIndex: r } = this.workOptions;
720
- return t === r;
721
- }
722
- isSameState(e) {
723
- const { state: t } = e, { state: r } = this.workOptions;
724
- return W(t, r);
725
- }
726
- isSameData(e) {
727
- const { data: t } = e, { data: r } = this.workOptions;
728
- return W(t, r);
729
- }
730
- updateElementPosition(e) {
731
- if (this.isDestroyed || !this.element || !this.fullLayer)
732
- return;
733
- const { centerX: t, centerY: r, width: s, height: i, zIndex: a } = this.workOptions, n = this.manager.getPagePoint(t, r), c = s * this.manager.camera.scale, h = i * this.manager.camera.scale;
734
- (!e || e && !this.isSameSize(e)) && (this.element.setAttribute("width", `${c}`), this.element.setAttribute("height", `${h}`), this.element.style.width = `${c}px`, this.element.style.height = `${h}px`), (!e || e && !this.isSamePosition(e)) && (this.element.style.left = `${n.x}px`, this.element.style.top = `${n.y}px`), (!e || e && !this.isSameZIndex(e)) && (this.element.style.zIndex = (a || 0).toString());
735
- }
736
- async updateSvg(e) {
737
- const { type: t, state: r } = this.workOptions;
738
- if (t === E.markmap) {
739
- const { data: s } = this.workOptions;
740
- if (this.markmapInstance || (this.markmapInstance = he.create(
741
- this.element,
742
- this.manager.markmapOptions
743
- ), this.markmapInstance.handleClick = async (n, c) => {
744
- var p, d, f;
745
- (p = this.markmapInstance) == null || p.toggleNode(c);
746
- const h = this.serializeData((d = this.markmapInstance) == null ? void 0 : d.state.data);
747
- this.setWorkOptions(
748
- {
749
- ...this.workOptions,
750
- state: h
751
- },
752
- !1
753
- ), b.checkNodeHasMermaid(c) && await b.renderMermaidAfterDOMUpdate(
754
- this.element,
755
- this.workId
756
- ), this.scenePath && this.collector && ((f = this.collector) == null || f.dispatch({
757
- type: y.UpdateNode,
758
- workId: this.workId,
759
- opt: this.workOptions,
760
- isSync: !0,
761
- viewId: this.manager.viewId,
762
- scenePath: this.scenePath
763
- }));
764
- }), e && this.isSameState(e) && this.isSameSize(e) && this.isSameData(e))
765
- return;
766
- L.setWorkId(this.workId);
767
- const i = L.transform(s);
768
- let { root: a } = i;
769
- s && q(s) && (a = b.injectMermaidHtml(a, s, this.workId));
770
- try {
771
- r && Array.isArray(r) && this.transformState(
772
- r,
773
- a
774
- ), await this.markmapInstance.setData(a), !this.isDestroyed && this.element && this.fullLayer && this.markmapInstance && (window.markmapInstance = this.markmapInstance, s && q(s) && await b.renderMermaidAfterDOMUpdate(
775
- this.element,
776
- this.workId
777
- ), await this.fit(
778
- !e || e && !this.isSameData(e)
779
- ));
780
- } catch (n) {
781
- console.error("[updateSvg] error: ", n);
782
- }
783
- } else {
784
- const { src: s, crossOrigin: i } = this.workOptions;
785
- this.element.src = s, this.element.crossOrigin = _(i) ? i : "anonymous";
786
- try {
787
- await new Promise((a, n) => {
788
- this.element.onload = () => {
789
- a();
790
- }, this.element.onerror = function() {
791
- n();
792
- };
793
- });
794
- } catch (a) {
795
- console.error("[updateSvg] error: ", a);
796
- }
797
- }
798
- }
799
- async fit(e = !0) {
800
- var t;
801
- !this.isDestroyed && this.element && this.fullLayer && this.markmapInstance && (e && this.element && await U.waitForImagesInForeignObjects(
802
- this.element
803
- ), await ((t = this.markmapInstance) == null ? void 0 : t.fit()), this.element && b.isSafari() && b.hasMermaidSvg(this.element) && (await G(this.element), await b.transformMermaidSvgToMarkmapSvg(
804
- this.element
805
- )));
806
- }
807
- serializeData(e) {
808
- var s;
809
- const t = [e], r = [];
810
- for (; t.length > 0; ) {
811
- const i = t.pop();
812
- i && (i != null && i.children && t.push(...i.children), r.push(((s = i == null ? void 0 : i.payload) == null ? void 0 : s.fold) || 0));
813
- }
814
- return r;
815
- }
816
- transformState(e, t) {
817
- const r = [t];
818
- for (; r.length > 0; ) {
819
- const s = r.pop();
820
- s && (s != null && s.children && r.push(...s.children), s.payload ? s.payload.fold = e.shift() : e.shift());
821
- }
822
- }
823
- async updateCamera() {
824
- this.updateElementPosition(), await this.fit(!1);
825
- }
826
- async setWorkOptions(e, t = !0) {
827
- if (!W(this.workOptions, e)) {
828
- const r = J(this.workOptions);
829
- this.workOptions = e, t && await this.render(r);
830
- }
831
- }
832
- destroy() {
833
- this.isDestroyed = !0, this.element.remove();
834
- }
835
- getRectFromLayer() {
836
- const e = this.element.getBoundingClientRect();
837
- return {
838
- x: e.x,
839
- y: e.y,
840
- w: e.width,
841
- h: e.height
842
- };
843
- }
844
- }
845
- function X(o) {
846
- const { toolsType: e, ...t } = o;
847
- switch (e) {
848
- case M.BackgroundSVG:
849
- return new ge(t);
850
- default:
851
- return;
852
- }
853
- }
854
- class Y {
855
- constructor(e) {
856
- u(this, "viewId");
857
- u(this, "fullLayer");
858
- u(this, "curNodeMap");
859
- this.viewId = e, this.curNodeMap = new te();
860
- }
861
- init(e) {
862
- this.fullLayer = e;
863
- }
864
- get(e) {
865
- return this.curNodeMap.get(e);
866
- }
867
- setInfo(e, t) {
868
- const r = this.curNodeMap.get(
869
- e
870
- ) || {
871
- name: e,
872
- workShape: t.workShape
873
- };
874
- t.workShape && (r.workShape = t.workShape), this.curNodeMap.set(e, r);
875
- }
876
- getNodeRectFormShape(e) {
877
- const t = this.curNodeMap.get(e);
878
- if (t && t.workShape)
879
- return t.workShape.getRectFromLayer();
880
- }
881
- delete(e) {
882
- const t = this.curNodeMap.get(e);
883
- t && t.workShape.destroy(), this.curNodeMap.delete(e);
884
- }
885
- clear() {
886
- for (const e of this.curNodeMap.values())
887
- e.workShape.destroy();
888
- this.curNodeMap.clear();
889
- }
890
- }
891
- class fe {
892
- constructor(e, t) {
893
- u(this, "opt");
894
- u(this, "viewId");
895
- u(this, "fullLayer");
896
- u(this, "vNodes");
897
- u(this, "master");
898
- u(this, "cameraOpt");
899
- u(this, "methodBuilder");
900
- u(this, "updateCamera", Q(async (e) => {
901
- const { cameraOpt: t } = e;
902
- t && !W(this.cameraOpt, t) && await this.setCameraOpt(t);
903
- }, 100));
904
- this.viewId = e, this.opt = t, this.master = t.master, this.fullLayer = t.container, this.methodBuilder = new se([
905
- B.CopyNode
906
- ]).registerForBackgroundThread(this), this.vNodes = new Y(e), this.vNodes.init(this.fullLayer);
907
- }
908
- get camera() {
909
- return this.cameraOpt || {
910
- scale: 1,
911
- centerX: 0,
912
- centerY: 0,
913
- width: 0,
914
- height: 0
915
- };
916
- }
917
- get view() {
918
- var e;
919
- return (e = this.master.control.viewContainerManager.getView(this.viewId)) == null ? void 0 : e.viewData;
920
- }
921
- get markmapOptions() {
922
- return this.master.control.pluginOptions.extras.markmap.options;
923
- }
924
- getPagePoint(e, t) {
925
- const { scale: r, centerX: s, centerY: i, width: a, height: n } = this.camera;
926
- return {
927
- x: (e - s) * r + a / 2,
928
- y: (t - i) * r + n / 2
929
- };
930
- }
931
- async setCameraOpt(e) {
932
- this.cameraOpt = e;
933
- for (const t of this.vNodes.curNodeMap.values()) {
934
- const { workShape: r } = t;
935
- r && await r.updateCamera();
936
- }
937
- }
938
- clearAll() {
939
- this.vNodes.clear();
940
- }
941
- canUseFullLayer(e) {
942
- return e === M.BackgroundSVG;
943
- }
944
- async consumeFull(e) {
945
- const { toolsType: t, opt: r, workId: s } = e;
946
- if (s != null && s.toString() && t && this.canUseFullLayer(t))
947
- switch (t) {
948
- case M.BackgroundSVG:
949
- await this.setFullWork({
950
- toolsType: t,
951
- opt: r,
952
- workId: s
953
- });
954
- break;
955
- }
956
- }
957
- async setFullWork(e) {
958
- const { workId: t, opt: r, toolsType: s } = e;
959
- if (t && r && s) {
960
- const i = t.toString();
961
- let a;
962
- const n = this.vNodes.get(i);
963
- return !n || !n.workShape ? (a = this.createWorkShapeNode({
964
- toolsOpt: r,
965
- toolsType: M.BackgroundSVG,
966
- workId: i
967
- }), a && await a.init()) : (a = n.workShape, await a.setWorkOptions(r)), a;
968
- }
969
- }
970
- createWorkShapeNode(e) {
971
- return X({
972
- ...e,
973
- vNodes: this.vNodes,
974
- manager: this
975
- });
976
- }
977
- removeWork(e) {
978
- const { workId: t } = e, r = t == null ? void 0 : t.toString();
979
- r && this.removeNode(r);
980
- }
981
- removeNode(e) {
982
- this.vNodes.delete(e);
983
- }
984
- async on(e) {
985
- if (!await this.methodBuilder.consumeForBackgroundThread(e)) {
986
- const { msgType: t, toolsType: r } = e;
987
- switch (t) {
988
- case y.Destroy: {
989
- this.destroy();
990
- break;
991
- }
992
- case y.Clear: {
993
- this.clearAll();
994
- break;
995
- }
996
- case y.UpdateCamera: {
997
- this.updateCamera(e);
998
- break;
999
- }
1000
- case y.UpdateTools: {
1001
- this.toggleFullLayer(r === M.Clicker);
1002
- break;
1003
- }
1004
- case y.BackgroundSVGUpdate:
1005
- case y.UpdateNode:
1006
- case y.FullWork: {
1007
- r && this.canUseFullLayer(r) && await this.consumeFull(e);
1008
- break;
1009
- }
1010
- case y.BackgroundSVGDelete: {
1011
- this.removeWork(e);
1012
- break;
1013
- }
1014
- }
1015
- }
1016
- }
1017
- toggleFullLayer(e) {
1018
- this.fullLayer.classList.toggle(
1019
- "appliance-plugin-background-svg-active",
1020
- e
1021
- );
1022
- }
1023
- destroy() {
1024
- this.vNodes.clear();
1025
- }
1026
- }
1027
- class we {
1028
- constructor(e, t) {
1029
- u(this, "viewId");
1030
- u(this, "fullLayer");
1031
- u(this, "master");
1032
- u(this, "vNodes");
1033
- u(this, "cameraOpt");
1034
- u(this, "opt");
1035
- u(this, "workShapes", /* @__PURE__ */ new Map());
1036
- this.viewId = e, this.opt = t, this.master = t.master, this.fullLayer = t.container, this.vNodes = new Y(e), this.vNodes.init(this.fullLayer);
1037
- }
1038
- get camera() {
1039
- return this.cameraOpt || {
1040
- scale: 1,
1041
- centerX: 0,
1042
- centerY: 0,
1043
- width: 0,
1044
- height: 0
1045
- };
1046
- }
1047
- get view() {
1048
- var e;
1049
- return (e = this.master.control.viewContainerManager.getView(this.viewId)) == null ? void 0 : e.viewData;
1050
- }
1051
- get markmapOptions() {
1052
- return this.master.control.pluginOptions.extras.markmap.options;
1053
- }
1054
- createOffscreenCanvas(e) {
1055
- const { width: t, height: r } = e.canvasOpt, s = new OffscreenCanvas(
1056
- e.canvasOpt.width,
1057
- e.canvasOpt.height
1058
- );
1059
- s.width = t, s.height = r;
1060
- }
1061
- async setCameraOpt(e) {
1062
- this.cameraOpt = e;
1063
- for (const t of this.vNodes.curNodeMap.values()) {
1064
- const { workShape: r } = t;
1065
- r && await r.updateCamera();
1066
- }
1067
- }
1068
- getPagePoint(e, t) {
1069
- const { scale: r, centerX: s, centerY: i, width: a, height: n } = this.camera;
1070
- return {
1071
- x: (e - s) * r + a / 2,
1072
- y: (t - i) * r + n / 2
1073
- };
1074
- }
1075
- async getSnapshot(e) {
1076
- const { scenePath: t, scenes: r, cameraOpt: s } = e;
1077
- if (t && r && s) {
1078
- await this.setCameraOpt(s);
1079
- for (const [i, a] of Object.entries(r))
1080
- if (a != null && a.type && (a == null ? void 0 : a.toolsType) === M.BackgroundSVG)
1081
- switch (a == null ? void 0 : a.type) {
1082
- case y.UpdateNode:
1083
- case y.FullWork: {
1084
- const { opt: n } = a, c = {
1085
- ...a,
1086
- opt: n,
1087
- workId: i,
1088
- msgType: y.FullWork,
1089
- dataType: D.Service,
1090
- viewId: this.viewId
1091
- };
1092
- await this.runFullWork(c);
1093
- break;
1094
- }
1095
- }
1096
- try {
1097
- if (t) {
1098
- await G(this.fullLayer), await de(this.fullLayer), await pe(this.fullLayer);
1099
- const i = await ue(this.fullLayer);
1100
- i && this.opt.post({
1101
- sp: [
1102
- {
1103
- type: y.Snapshot,
1104
- scenePath: t,
1105
- imageElement: i,
1106
- viewId: this.viewId,
1107
- index: 1
1108
- }
1109
- ]
1110
- });
1111
- }
1112
- } catch (i) {
1113
- const a = i && i instanceof Error ? i.message : i == null ? void 0 : i.toString();
1114
- this.opt.post({
1115
- sp: [
1116
- {
1117
- type: y.ReportError,
1118
- reportString: `[SnapshotThreadImpl] getSnapshotRender error: ${a}`
1119
- }
1120
- ]
1121
- });
1122
- }
1123
- }
1124
- }
1125
- createWorkShapeNode(e) {
1126
- return X({
1127
- ...e,
1128
- vNodes: this.vNodes,
1129
- manager: this
1130
- });
1131
- }
1132
- async setFullWork(e) {
1133
- const { workId: t, opt: r, toolsType: s } = e;
1134
- if (t && r && s) {
1135
- const i = t.toString();
1136
- let a;
1137
- const n = this.vNodes.get(i);
1138
- return !n || !n.workShape ? (a = this.createWorkShapeNode({
1139
- toolsOpt: r,
1140
- toolsType: M.BackgroundSVG,
1141
- workId: i
1142
- }), a && await a.init()) : (a = n.workShape, await a.setWorkOptions(r)), a;
1143
- }
1144
- }
1145
- async runFullWork(e) {
1146
- const { toolsType: t, opt: r, workId: s } = e;
1147
- await this.setFullWork({
1148
- toolsType: t,
1149
- opt: r,
1150
- workId: s
1151
- });
1152
- }
1153
- destroy() {
1154
- this.fullLayer.innerHTML = "", this.fullLayer.style.width = "", this.fullLayer.style.height = "";
1155
- }
1156
- }
1157
- class We {
1158
- constructor(e) {
1159
- u(this, "backgroundThreadMap", /* @__PURE__ */ new Map());
1160
- u(this, "snapshotThread");
1161
- u(this, "master");
1162
- u(this, "post", (e) => {
1163
- const { sp: t } = e;
1164
- t && this.master.collectorSyncData(t);
1165
- });
1166
- this.master = e, this.backgroundThreadMap = /* @__PURE__ */ new Map();
1167
- }
1168
- createBackgroundThread(e, t) {
1169
- return new fe(e, t);
1170
- }
1171
- createSnapshotThread(e, t) {
1172
- return new we(e, t);
1173
- }
1174
- async consume(e) {
1175
- var t, r, s, i, a, n;
1176
- for (const c of e.values()) {
1177
- const {
1178
- msgType: h,
1179
- viewId: g,
1180
- layerOpt: p,
1181
- offscreenCanvasOpt: d,
1182
- cameraOpt: f,
1183
- tasksqueue: w,
1184
- mainTasksqueueCount: v
1185
- } = c;
1186
- if (h === y.Console) {
1187
- console.log(this);
1188
- continue;
1189
- }
1190
- if (h === y.Init) {
1191
- const l = (t = this.master.control.viewContainerManager.getView(g)) == null ? void 0 : t.displayer, m = (r = l == null ? void 0 : l.backgroundContainerRef) == null ? void 0 : r.current;
1192
- if (l && m && p && d) {
1193
- const S = this.backgroundThreadMap.get(g);
1194
- S == null || S.destroy();
1195
- const k = this.createBackgroundThread(g, {
1196
- displayer: l,
1197
- container: m,
1198
- layerOpt: p,
1199
- master: this.master,
1200
- canvasOpt: d,
1201
- post: this.post
1202
- });
1203
- this.backgroundThreadMap.set(g, k), k && f && await k.setCameraOpt(f);
1204
- }
1205
- continue;
1206
- }
1207
- if (h === y.Snapshot) {
1208
- const l = (s = this.master.control.viewContainerManager.getView(g)) == null ? void 0 : s.displayer, S = (a = ((i = this.master.control.viewContainerManager.mainView) == null ? void 0 : i.displayer).backgroundSnapshotContainerRef) == null ? void 0 : a.current;
1209
- if (l && S && f) {
1210
- (n = this.snapshotThread) == null || n.destroy(), S.style.width = `${f.width}px`, S.style.height = `${f.height}px`;
1211
- const k = {
1212
- ...P.defaultLayerOpt,
1213
- offscreen: !1,
1214
- width: f.width,
1215
- height: f.height
1216
- }, x = {
1217
- ...P.defaultScreenCanvasOpt,
1218
- width: f.width,
1219
- height: f.height
1220
- };
1221
- this.snapshotThread = this.createSnapshotThread(g, {
1222
- displayer: l,
1223
- container: S,
1224
- layerOpt: k,
1225
- master: this.master,
1226
- canvasOpt: x,
1227
- post: this.post
1228
- }), await this.snapshotThread.getSnapshot(c), this.snapshotThread.destroy(), this.snapshotThread = void 0;
1229
- continue;
1230
- }
1231
- }
1232
- if (h === y.TasksQueue && (w != null && w.size)) {
1233
- for (const [l, m] of this.backgroundThreadMap.entries()) {
1234
- const S = w.get(l);
1235
- S && (await m.on(S), v && this.post({ workerTasksqueueCount: v }));
1236
- }
1237
- continue;
1238
- }
1239
- if (g === Z) {
1240
- for (const l of this.backgroundThreadMap.values())
1241
- await l.on(c);
1242
- h === y.Destroy && this.backgroundThreadMap.clear();
1243
- continue;
1244
- }
1245
- const I = this.backgroundThreadMap.get(g);
1246
- I && (await I.on(c), h === y.Destroy && this.backgroundThreadMap.delete(g));
1247
- }
1248
- }
1249
- async consumeTargetOne(e, t) {
1250
- const r = this.backgroundThreadMap.get(e);
1251
- r && await r.on(t);
1252
- }
1253
- destroy() {
1254
- var e;
1255
- (e = this.snapshotThread) == null || e.destroy(), this.snapshotThread = void 0;
1256
- for (const t of this.backgroundThreadMap.values())
1257
- t.destroy();
1258
- this.backgroundThreadMap.clear();
1259
- }
1260
- }
1261
- export {
1262
- We as BackgroundThreadManagerImpl
1263
- };