@nebula-spatial/cad-loader 0.1.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 (59) hide show
  1. package/README.md +46 -0
  2. package/dist/core/cad-types.d.ts +26 -0
  3. package/dist/core/errors.d.ts +5 -0
  4. package/dist/core/index.d.ts +24 -0
  5. package/dist/core/index.js +2262 -0
  6. package/dist/core/parser/bin-group-reader.d.ts +9 -0
  7. package/dist/core/parser/bin-parser.d.ts +65 -0
  8. package/dist/core/parser/dxbs-sidecar.d.ts +24 -0
  9. package/dist/core/parser/geometry-segments.d.ts +20 -0
  10. package/dist/core/parser/text-roundtrip.d.ts +4 -0
  11. package/dist/core/parser/types.d.ts +80 -0
  12. package/dist/core/runtime-text-decoder.d.ts +8 -0
  13. package/dist/core/types.d.ts +147 -0
  14. package/dist/core/utils/insert-bbox.d.ts +10 -0
  15. package/dist/core/utils/viewport-rect.d.ts +21 -0
  16. package/dist/index.d.ts +26 -0
  17. package/dist/index.js +4435 -0
  18. package/dist/loader/geo-loader.d.ts +56 -0
  19. package/dist/loader/internal/external-variant-sidecar-fetch.d.ts +13 -0
  20. package/dist/loader/internal/flow-control.d.ts +29 -0
  21. package/dist/loader/internal/frame-budget-scheduler.d.ts +21 -0
  22. package/dist/loader/internal/geo-compact-executor.d.ts +19 -0
  23. package/dist/loader/internal/geo-loader-local-adapter.d.ts +2 -0
  24. package/dist/loader/internal/geo-loader-pipeline.d.ts +81 -0
  25. package/dist/loader/internal/geo-loader-worker-adapter.d.ts +7 -0
  26. package/dist/loader/internal/geo-node-builder.d.ts +29 -0
  27. package/dist/loader/internal/geo-node-load-sink.d.ts +28 -0
  28. package/dist/loader/internal/geo-node.d.ts +284 -0
  29. package/dist/loader/internal/geo-prepare-worker-types.d.ts +87 -0
  30. package/dist/loader/internal/geo-prepare.d.ts +38 -0
  31. package/dist/loader/internal/geo-prepare.worker.d.ts +1 -0
  32. package/dist/loader/internal/insert-model-builder.d.ts +10 -0
  33. package/dist/loader/internal/insert-runtime-geometry.d.ts +15 -0
  34. package/dist/loader/internal/line-canonical.d.ts +37 -0
  35. package/dist/loader/internal/line-quality.d.ts +9 -0
  36. package/dist/loader/internal/prepare-credit-gate.d.ts +20 -0
  37. package/dist/loader/internal/transport.d.ts +2 -0
  38. package/dist/scene/geo-cad-line-geometry.d.ts +28 -0
  39. package/dist/scene/geo-cad-line-material.d.ts +18 -0
  40. package/dist/scene/instancing/block-geometry-registry.d.ts +35 -0
  41. package/dist/scene/instancing/insert-instance-table.d.ts +23 -0
  42. package/dist/scene/instancing/viewport-instance-presenter.d.ts +66 -0
  43. package/dist/selection/cad-insert-selection.d.ts +35 -0
  44. package/dist/session/load-session.d.ts +90 -0
  45. package/dist/shared/abort.d.ts +3 -0
  46. package/dist/shared/cad-display-color.d.ts +55 -0
  47. package/dist/shared/cad-load-source.d.ts +8 -0
  48. package/dist/shared/color-buffer.d.ts +6 -0
  49. package/dist/shared/constants.d.ts +11 -0
  50. package/dist/shared/display-color-buffer.d.ts +27 -0
  51. package/dist/shared/errors.d.ts +2 -0
  52. package/dist/shared/text-font.d.ts +12 -0
  53. package/dist/shared/types.d.ts +57 -0
  54. package/dist/shared/utils/insert-bbox.d.ts +1 -0
  55. package/dist/shared/utils/timing.d.ts +2 -0
  56. package/dist/shared/utils/viewport-rect.d.ts +1 -0
  57. package/dist/shared/viewer-theme.d.ts +2 -0
  58. package/dist/workers/geo-prepare.worker.js +2166 -0
  59. package/package.json +61 -0
@@ -0,0 +1,2166 @@
1
+ var Fe = Object.defineProperty;
2
+ var jt = (t) => {
3
+ throw TypeError(t);
4
+ };
5
+ var Xe = (t, e, n) => e in t ? Fe(t, e, { enumerable: !0, configurable: !0, writable: !0, value: n }) : t[e] = n;
6
+ var J = (t, e, n) => Xe(t, typeof e != "symbol" ? e + "" : e, n), Ye = (t, e, n) => e.has(t) || jt("Cannot " + n);
7
+ var et = (t, e, n) => (Ye(t, e, "read from private field"), n ? n.call(t) : e.get(t)), Wt = (t, e, n) => e.has(t) ? jt("Cannot add the same private member more than once") : e instanceof WeakSet ? e.add(t) : e.set(t, n);
8
+ class l extends Error {
9
+ constructor(n, r) {
10
+ super(r);
11
+ J(this, "code");
12
+ this.name = "GeoLoaderError", this.code = n;
13
+ }
14
+ }
15
+ const Ut = 4096;
16
+ function ye(t) {
17
+ return t >= 6 ? "u16_lw" : t >= 5 ? "u8_lw" : t >= 4 ? "u16" : "u8";
18
+ }
19
+ function xe(t) {
20
+ return t === "u16_lw" ? 13 : t === "u8_lw" ? 12 : t === "u16" ? 9 : 8;
21
+ }
22
+ function _e(t, e, n) {
23
+ return n === "u16" || n === "u16_lw" ? t.getUint16(e + 7, !0) : t.getUint8(e + 7);
24
+ }
25
+ function ze(t) {
26
+ return t === "u16" || t === "u16_lw" ? 2 : 1;
27
+ }
28
+ function Ee(t, e, n) {
29
+ if (!(n !== "u8_lw" && n !== "u16_lw"))
30
+ return t.getFloat32(e + 7 + ze(n), !0);
31
+ }
32
+ function we(t, e, n, r, o = t.byteLength, s = "u8") {
33
+ if (n > o || o > t.byteLength)
34
+ throw new l("E_GROUP_RANGE", "Group byte range exceeds payload length");
35
+ let i = n;
36
+ const a = r * 2, c = a * 4;
37
+ if (i + c > o)
38
+ throw new l("E_GROUP_RANGE", "Group position bytes exceed payload length");
39
+ let u;
40
+ if (a > 0) {
41
+ const w = new Uint8Array(t, i, c), y = new Uint8Array(c), f = a;
42
+ for (let _ = 0; _ < a; _++)
43
+ y[_ * 4] = w[_], y[_ * 4 + 1] = w[f + _], y[_ * 4 + 2] = w[f * 2 + _], y[_ * 4 + 3] = w[f * 3 + _];
44
+ u = new Float32Array(y.buffer);
45
+ } else
46
+ u = new Float32Array(0);
47
+ if (i += c, i + 4 > o)
48
+ throw new l("E_GROUP_RANGE", "Missing seg_count field for group");
49
+ const m = e.getUint32(i, !0);
50
+ i += 4;
51
+ const g = [];
52
+ let d = 0;
53
+ const h = xe(s);
54
+ for (let w = 0; w < m; w++) {
55
+ if (i + h > o)
56
+ throw new l("E_GROUP_RANGE", "Segment record exceeds payload length");
57
+ const y = e.getUint32(i, !0), f = e.getUint8(i + 4), _ = e.getUint8(i + 5), b = e.getUint8(i + 6), E = _e(e, i, s), p = Ee(e, i, s);
58
+ if (d + y > r)
59
+ throw new l("E_SEGMENT_SUM", "Segment vertex_count sum exceeds group count");
60
+ g.push({
61
+ startVertex: d,
62
+ vertexCount: y,
63
+ color: [f, _, b],
64
+ layerIndex: E,
65
+ ...p === void 0 ? {} : { lineweightPx: p }
66
+ }), i += h;
67
+ const S = d * 2;
68
+ if (y > 1) {
69
+ let N = u[S], C = u[S + 1];
70
+ for (let G = 1; G < y; G++) {
71
+ const U = S + G * 2;
72
+ N += u[U], C += u[U + 1], u[U] = N, u[U + 1] = C;
73
+ }
74
+ }
75
+ d += y;
76
+ }
77
+ if (d !== r)
78
+ throw new l("E_SEGMENT_SUM", `Segment vertex_count sum ${d} does not match group count ${r}`);
79
+ return {
80
+ chunk: { pos: u, count: r, segments: g },
81
+ offset: i
82
+ };
83
+ }
84
+ function He(t, e, n, r, o = "u8") {
85
+ const s = r * 2, i = s * 4;
86
+ if (n + i > t.byteLength)
87
+ throw new l("E_GROUP_RANGE", "Group position bytes exceed payload length");
88
+ const a = new Uint8Array(t, n, i);
89
+ let c = n + i;
90
+ if (c + 4 > t.byteLength)
91
+ throw new l("E_GROUP_RANGE", "Missing seg_count field for group");
92
+ const u = e.getUint32(c, !0);
93
+ c += 4;
94
+ const m = [];
95
+ let g = 0;
96
+ const d = xe(o);
97
+ for (let h = 0; h < u; h++) {
98
+ if (c + d > t.byteLength)
99
+ throw new l("E_GROUP_RANGE", "Segment record exceeds payload length");
100
+ const w = e.getUint32(c, !0), y = e.getUint8(c + 4), f = e.getUint8(c + 5), _ = e.getUint8(c + 6), b = _e(e, c, o), E = Ee(e, c, o);
101
+ if (c += d, g + w > r)
102
+ throw new l("E_SEGMENT_SUM", "Segment vertex_count sum exceeds group count");
103
+ m.push({
104
+ startVertex: g,
105
+ vertexCount: w,
106
+ color: [y, f, _],
107
+ layerIndex: b,
108
+ ...E === void 0 ? {} : { lineweightPx: E }
109
+ }), g += w;
110
+ }
111
+ if (g !== r)
112
+ throw new l("E_SEGMENT_SUM", `Segment vertex_count sum ${g} does not match group count ${r}`);
113
+ return {
114
+ shuffled: a,
115
+ plane: s,
116
+ segments: m,
117
+ offset: c
118
+ };
119
+ }
120
+ function Ke(t, e, n, r) {
121
+ if (r === 0)
122
+ return new Float32Array(0);
123
+ const o = new Uint8Array(r * 4);
124
+ for (let s = 0; s < r; s++)
125
+ o[s * 4] = t[n + s], o[s * 4 + 1] = t[e + n + s], o[s * 4 + 2] = t[e * 2 + n + s], o[s * 4 + 3] = t[e * 3 + n + s];
126
+ return new Float32Array(o.buffer);
127
+ }
128
+ function je(t, e, n, r, o) {
129
+ const s = Ke(
130
+ t.shuffled,
131
+ t.plane,
132
+ (e.startVertex + n) * 2,
133
+ r * 2
134
+ );
135
+ let i = (o == null ? void 0 : o[0]) ?? 0, a = (o == null ? void 0 : o[1]) ?? 0;
136
+ if (r > 0) {
137
+ n === 0 ? (i = s[0], a = s[1]) : (i += s[0], a += s[1], s[0] = i, s[1] = a);
138
+ for (let u = 1; u < r; u++) {
139
+ const m = u * 2;
140
+ i += s[m], a += s[m + 1], s[m] = i, s[m + 1] = a;
141
+ }
142
+ }
143
+ const c = r > 0 ? [{
144
+ startVertex: 0,
145
+ vertexCount: r,
146
+ color: [e.color[0], e.color[1], e.color[2]],
147
+ layerIndex: e.layerIndex,
148
+ ...e.lineweightPx === void 0 ? {} : { lineweightPx: e.lineweightPx }
149
+ }] : [];
150
+ return {
151
+ chunk: { pos: s, count: r, segments: c },
152
+ lastPoint: r > 0 ? [i, a] : o
153
+ };
154
+ }
155
+ function* We(t, e, n, r, o = "u8") {
156
+ const s = He(t, e, n, r, o);
157
+ if (r === 0)
158
+ return yield { pos: new Float32Array(0), count: 0, segments: [] }, s.offset;
159
+ for (const i of s.segments) {
160
+ let a = null;
161
+ for (let c = 0; c < i.vertexCount; c += Ut) {
162
+ const u = Math.min(Ut, i.vertexCount - c), m = je(s, i, c, u, a);
163
+ a = m.lastPoint, yield m.chunk;
164
+ }
165
+ }
166
+ return s.offset;
167
+ }
168
+ function pe() {
169
+ const t = globalThis.TextDecoder;
170
+ if (!t)
171
+ throw new l("E_HEADER_JSON", "TextDecoder is required to parse CAD pack metadata");
172
+ return new t();
173
+ }
174
+ function ot(t) {
175
+ return t ? {
176
+ minX: t.minX,
177
+ minY: t.minY,
178
+ maxX: t.maxX,
179
+ maxY: t.maxY
180
+ } : null;
181
+ }
182
+ function Ct(t) {
183
+ return !!t && Number.isFinite(t.minX) && Number.isFinite(t.minY) && Number.isFinite(t.maxX) && Number.isFinite(t.maxY);
184
+ }
185
+ function mt(t) {
186
+ return Ct(t) ? ot(t) : null;
187
+ }
188
+ function be(t, e) {
189
+ const n = Ct(t) ? t : null, r = Ct(e) ? e : null;
190
+ return n ? r ? {
191
+ minX: Math.min(n.minX, r.minX),
192
+ minY: Math.min(n.minY, r.minY),
193
+ maxX: Math.max(n.maxX, r.maxX),
194
+ maxY: Math.max(n.maxY, r.maxY)
195
+ } : ot(n) : ot(r);
196
+ }
197
+ function qe(t, e, n, r = 0, o = 1) {
198
+ if (e <= 0 || n <= 0) return null;
199
+ let s = Number.POSITIVE_INFINITY, i = Number.POSITIVE_INFINITY, a = Number.NEGATIVE_INFINITY, c = Number.NEGATIVE_INFINITY, u = !1;
200
+ for (let m = 0; m < e; m += 1) {
201
+ const g = m * n, d = t[g + r], h = t[g + o];
202
+ !Number.isFinite(d) || !Number.isFinite(h) || (d < s && (s = d), h < i && (i = h), d > a && (a = d), h > c && (c = h), u = !0);
203
+ }
204
+ return u ? { minX: s, minY: i, maxX: a, maxY: c } : null;
205
+ }
206
+ function Ae(t, e) {
207
+ const n = t.minX, r = t.minY, o = t.maxX, s = t.maxY, { matA: i, matB: a, matC: c, matD: u, tx: m, ty: g } = e;
208
+ let d = i * n + c * r + m, h = a * n + u * r + g, w = d, y = h, f = d, _ = h;
209
+ return d = i * n + c * s + m, h = a * n + u * s + g, d < w && (w = d), h < y && (y = h), d > f && (f = d), h > _ && (_ = h), d = i * o + c * r + m, h = a * o + u * r + g, d < w && (w = d), h < y && (y = h), d > f && (f = d), h > _ && (_ = h), d = i * o + c * s + m, h = a * o + u * s + g, d < w && (w = d), h < y && (y = h), d > f && (f = d), h > _ && (_ = h), { minX: w, minY: y, maxX: f, maxY: _ };
210
+ }
211
+ function Je(t) {
212
+ return Math.hypot(t.maxX - t.minX, t.maxY - t.minY);
213
+ }
214
+ function Ze(t, e) {
215
+ const n = (t.minX + t.maxX) / 2, r = (t.minY + t.maxY) / 2, o = (e.minX + e.maxX) / 2, s = (e.minY + e.maxY) / 2;
216
+ return Math.hypot(n - o, r - s);
217
+ }
218
+ const Qe = {};
219
+ function qt(t) {
220
+ return typeof t == "object" && t !== null;
221
+ }
222
+ function ut(t, e) {
223
+ return Object.prototype.hasOwnProperty.call(t, e);
224
+ }
225
+ function H(t) {
226
+ if (t.length === 0) return "$";
227
+ let e = "";
228
+ for (const n of t) {
229
+ if (typeof n == "number") {
230
+ e += `[${n}]`;
231
+ continue;
232
+ }
233
+ e += e.length === 0 ? n : `.${n}`;
234
+ }
235
+ return e;
236
+ }
237
+ function Jt(t, e, n, r) {
238
+ return new l("E_TEXT_ROUNDTRIP", `Text roundtrip mismatch at stage=${t} index=${e} path=${n}: ${r}`);
239
+ }
240
+ function Pt(t, e, n) {
241
+ if (Object.is(t, e)) return null;
242
+ if (Array.isArray(t)) {
243
+ if (!Array.isArray(e))
244
+ return { path: H(n), reason: `expected array but found ${typeof e}` };
245
+ if (t.length !== e.length)
246
+ return { path: H([...n, "length"]), reason: `array length ${t.length} !== ${e.length}` };
247
+ for (let r = 0; r < t.length; r += 1) {
248
+ const o = Pt(t[r], e[r], [...n, r]);
249
+ if (o) return o;
250
+ }
251
+ return null;
252
+ }
253
+ if (qt(t)) {
254
+ if (!qt(e) || Array.isArray(e))
255
+ return { path: H(n), reason: `expected object but found ${Array.isArray(e) ? "array" : typeof e}` };
256
+ const r = Object.keys(t), o = Object.keys(e);
257
+ if (r.length !== o.length) {
258
+ const s = r.find((a) => !ut(e, a));
259
+ if (s !== void 0)
260
+ return {
261
+ path: H([...n, s]),
262
+ reason: "missing key on actual"
263
+ };
264
+ const i = o.find((a) => !ut(t, a));
265
+ if (i !== void 0)
266
+ return {
267
+ path: H([...n, i]),
268
+ reason: "extra key on actual"
269
+ };
270
+ }
271
+ for (const s of r) {
272
+ if (!ut(e, s))
273
+ return { path: H([...n, s]), reason: "missing key on actual" };
274
+ const i = Pt(t[s], e[s], [...n, s]);
275
+ if (i) return i;
276
+ }
277
+ for (const s of o)
278
+ if (!ut(t, s))
279
+ return { path: H([...n, s]), reason: "extra key on actual" };
280
+ return null;
281
+ }
282
+ return { path: H(n), reason: `expected ${String(t)} but found ${String(e)}` };
283
+ }
284
+ function tn(t, e) {
285
+ return Pt(t, e, []);
286
+ }
287
+ function Zt(t) {
288
+ if (t === !0 || t === "1" || t === "true") return !0;
289
+ if (t === !1 || t === "0" || t === "false") return !1;
290
+ }
291
+ function en() {
292
+ var o, s;
293
+ const t = globalThis.process, e = Zt(
294
+ ((o = t == null ? void 0 : t.env) == null ? void 0 : o.DXF_STRICT_TEXT_ROUNDTRIP) ?? ((s = t == null ? void 0 : t.env) == null ? void 0 : s.VITE_DXF_STRICT_TEXT_ROUNDTRIP)
295
+ );
296
+ if (e !== void 0) return e;
297
+ const n = Qe, r = Zt(n == null ? void 0 : n.VITE_DXF_STRICT_TEXT_ROUNDTRIP);
298
+ return r !== void 0 ? r : !1;
299
+ }
300
+ function nn(t, e, n) {
301
+ if (e.length !== n.length)
302
+ throw Jt(t, Math.min(e.length, n.length), "$length", `text count ${e.length} !== ${n.length}`);
303
+ for (let r = 0; r < e.length; r += 1) {
304
+ const o = tn(e[r], n[r]);
305
+ if (o)
306
+ throw Jt(t, r, o.path, o.reason);
307
+ }
308
+ }
309
+ pe();
310
+ function Qt(t, e) {
311
+ if (t > BigInt(Number.MAX_SAFE_INTEGER))
312
+ throw new l("E_GROUP_RANGE", `${e} exceeds safe integer range`);
313
+ return Number(t);
314
+ }
315
+ function te(t, e, n, r) {
316
+ if (!Number.isInteger(t) || !Number.isInteger(e) || t < 0 || e < 0 || t + e > n)
317
+ throw new l("E_GROUP_RANGE", `${r} exceeds payload length`);
318
+ }
319
+ function rn(t) {
320
+ if (t.byteLength < 4) return !1;
321
+ const e = new Uint8Array(t, 0, 4);
322
+ return e[0] === 68 && e[1] === 88 && e[2] === 66 && e[3] === 83;
323
+ }
324
+ function on(t) {
325
+ if (t.byteLength < 20)
326
+ throw new l("E_HEADER", "DXBS payload too small: missing container header");
327
+ if (!rn(t))
328
+ throw new l("E_HEADER", "DXBS payload missing magic");
329
+ const e = new DataView(t), n = e.getUint16(4, !0), r = e.getUint16(6, !0), o = e.getUint16(8, !0), s = e.getUint16(10, !0), i = e.getUint16(12, !0), a = e.getUint16(14, !0), c = e.getUint32(16, !0);
330
+ if (n !== 3 || r < 3 || r > 6)
331
+ throw new l("E_GROUP_RANGE", `Unsupported DXBS version: ${n}.${r}`);
332
+ if (o !== 0)
333
+ throw new l("E_GROUP_RANGE", `Unsupported DXBS sidecar kind: ${o}`);
334
+ if (a !== 0)
335
+ throw new l("E_GROUP_RANGE", `Invalid DXBS reserved field: ${a}`);
336
+ if (s < 24)
337
+ throw new l("E_GROUP_RANGE", `Invalid DXBS directory entry size: ${s}`);
338
+ if (c !== s * i)
339
+ throw new l("E_GROUP_RANGE", "DXBS directory byte size mismatch");
340
+ const u = 20;
341
+ te(u, c, t.byteLength, "DXBS section directory");
342
+ const m = /* @__PURE__ */ new Map();
343
+ for (let g = 0; g < i; g += 1) {
344
+ const d = u + g * s, h = e.getUint16(d, !0), w = e.getUint16(d + 2, !0), y = e.getUint32(d + 4, !0), f = Qt(e.getBigUint64(d + 8, !0), "DXBS section offset"), _ = Qt(e.getBigUint64(d + 16, !0), "DXBS section length");
345
+ if (w !== 0)
346
+ throw new l("E_GROUP_RANGE", `Unsupported DXBS section flags for type ${h}: ${w}`);
347
+ if (y !== 0)
348
+ throw new l("E_GROUP_RANGE", `Invalid DXBS section reserved field for type ${h}: ${y}`);
349
+ te(f, _, t.byteLength, `DXBS section ${h}`), m.set(h, { type: h, flags: w, offset: f, length: _ });
350
+ }
351
+ return { versionMajor: n, versionMinor: r, sections: m };
352
+ }
353
+ function sn(t, e, n) {
354
+ const r = t.sections.get(e);
355
+ if (!r)
356
+ throw new l("E_GROUP_RANGE", `Missing DXBS section ${n}`);
357
+ return r;
358
+ }
359
+ function an() {
360
+ return {
361
+ pos: new Float32Array(0),
362
+ count: 0,
363
+ segments: []
364
+ };
365
+ }
366
+ function St(t) {
367
+ if (t.segments && t.segments.length > 0)
368
+ return un(t.segments, t.count), t.segments;
369
+ if (t.count <= 0) return [];
370
+ if (!t.col || !t.lay)
371
+ throw new l("E_GROUP_RANGE", "Geometry chunk is missing segment or expanded color/layer metadata");
372
+ return cn(t.col, t.lay, t.count);
373
+ }
374
+ function ee(t) {
375
+ const e = [];
376
+ for (const n of t) {
377
+ const r = e[e.length - 1];
378
+ if (r && r.startVertex + r.vertexCount === n.startVertex && r.layerIndex === n.layerIndex && r.color[0] === n.color[0] && r.color[1] === n.color[1] && r.color[2] === n.color[2] && r.lineweightPx === n.lineweightPx) {
379
+ e[e.length - 1] = {
380
+ ...r,
381
+ vertexCount: r.vertexCount + n.vertexCount
382
+ };
383
+ continue;
384
+ }
385
+ e.push({
386
+ startVertex: n.startVertex,
387
+ vertexCount: n.vertexCount,
388
+ color: ln(n),
389
+ layerIndex: n.layerIndex,
390
+ ...n.lineweightPx === void 0 ? {} : { lineweightPx: n.lineweightPx }
391
+ });
392
+ }
393
+ return e;
394
+ }
395
+ function cn(t, e, n) {
396
+ if (t.length < n * 3 || e.length < n)
397
+ throw new l("E_GROUP_RANGE", "Expanded color/layer metadata is shorter than geometry count");
398
+ const r = [];
399
+ let o = 0;
400
+ for (; o < n; ) {
401
+ const s = o * 3, i = t[s] ?? 0, a = t[s + 1] ?? 0, c = t[s + 2] ?? 0, u = e[o] ?? 0;
402
+ let m = o + 1;
403
+ for (; m < n; ) {
404
+ const g = m * 3;
405
+ if (e[m] !== u || t[g] !== i || t[g + 1] !== a || t[g + 2] !== c)
406
+ break;
407
+ m += 1;
408
+ }
409
+ r.push({
410
+ startVertex: o,
411
+ vertexCount: m - o,
412
+ color: [i, a, c],
413
+ layerIndex: u
414
+ }), o = m;
415
+ }
416
+ return r;
417
+ }
418
+ function un(t, e) {
419
+ let n = 0;
420
+ for (const r of t) {
421
+ if (r.vertexCount < 0 || r.startVertex !== n)
422
+ throw new l("E_SEGMENT_SUM", "Geometry segments must be contiguous and non-negative");
423
+ n += r.vertexCount;
424
+ }
425
+ if (n !== e)
426
+ throw new l("E_SEGMENT_SUM", `Geometry segment vertex sum ${n} does not match count ${e}`);
427
+ }
428
+ function ln(t) {
429
+ return [t.color[0], t.color[1], t.color[2]];
430
+ }
431
+ const fn = 8e6, Ot = pe(), dn = ["left", "center", "right"], mn = ["top", "middle", "bottom", "alphabetic"];
432
+ function ne(t, e, n) {
433
+ for (const r of t)
434
+ n(r);
435
+ for (const r of e)
436
+ n(r);
437
+ }
438
+ function rt(t) {
439
+ return typeof t == "object" && t !== null;
440
+ }
441
+ function hn(t) {
442
+ return Array.isArray(t) ? "array" : t === null ? "null" : typeof t;
443
+ }
444
+ function gn(t) {
445
+ return !(!rt(t) || Array.isArray(t) || typeof t.t != "string" || typeof t.x != "number" || typeof t.y != "number" || typeof t.h != "number" || typeof t.r != "number" || !Array.isArray(t.c) || t.c.length !== 3 || !t.c.every((e) => typeof e == "number") || typeof t.li != "number" || t.ha !== "left" && t.ha !== "center" && t.ha !== "right" || t.va !== "top" && t.va !== "middle" && t.va !== "bottom" && t.va !== "alphabetic" || typeof t.lh != "number" || t.w !== void 0 && typeof t.w != "number" || t.wf !== void 0 && typeof t.wf != "number" || t.iv !== void 0 && typeof t.iv != "number" || t.io !== void 0 && typeof t.io != "number" || t.mx !== void 0 && t.mx !== !0 || t.my !== void 0 && t.my !== !0);
446
+ }
447
+ function yn(t) {
448
+ return t.map((e, n) => ({
449
+ index: n,
450
+ name: e.name,
451
+ color: [...e.color],
452
+ lw_px: e.lw_px,
453
+ visible: e.visible ?? !0
454
+ }));
455
+ }
456
+ function Ie(t) {
457
+ const e = t.texts, n = Array.isArray(e) ? e : [], r = n.filter(gn), o = en();
458
+ if (o && e !== void 0 && !Array.isArray(e))
459
+ throw new l(
460
+ "E_TEXT_ROUNDTRIP",
461
+ `Text roundtrip mismatch at stage=Boundary-2:header->stream index=0 path=$: expected array but found ${hn(e)}`
462
+ );
463
+ return o && nn("Boundary-2:header->stream", n, r), {
464
+ bounds: [...t.bounds],
465
+ entityCount: Number(t.entity_count || 0),
466
+ lineCount: Number(t.line_count || 0),
467
+ fillCount: Number(t.fill_count || 0),
468
+ dotCount: Number(t.dot_count || 0),
469
+ textCount: r.length,
470
+ layers: yn(t.layers ?? []),
471
+ texts: r
472
+ };
473
+ }
474
+ function xn(t) {
475
+ const e = t == null ? void 0 : t.maxExpandedInstanceVertices, n = typeof e == "number" && Number.isFinite(e) && e >= 0 ? Math.floor(e) : fn;
476
+ return {
477
+ hiddenInstanceIds: t != null && t.hiddenInstanceIds ? new Set(t.hiddenInstanceIds) : /* @__PURE__ */ new Set(),
478
+ keepTextsForHiddenInstances: (t == null ? void 0 : t.keepTextsForHiddenInstances) === !0,
479
+ loadBlocks: (t == null ? void 0 : t.loadBlocks) !== !1,
480
+ suppressExpandedInsertGeometry: (t == null ? void 0 : t.suppressExpandedInsertGeometry) === !0,
481
+ maxExpandedInstanceVertices: n,
482
+ expandedInstanceVertices: 0,
483
+ externalVariantBuffers: t == null ? void 0 : t.externalVariantBuffers,
484
+ requiredExternalVariantIds: t == null ? void 0 : t.requiredExternalVariantIds,
485
+ externalVariantDeltaOnly: (t == null ? void 0 : t.externalVariantDeltaOnly) === !0,
486
+ deferExternalVariantGeometry: (t == null ? void 0 : t.deferExternalVariantGeometry) === !0
487
+ };
488
+ }
489
+ function _n(t) {
490
+ return t.loadBlocks && !t.suppressExpandedInsertGeometry;
491
+ }
492
+ function Re(t, e) {
493
+ return _n(e) && !e.hiddenInstanceIds.has(t);
494
+ }
495
+ function En(t, e, n) {
496
+ if (n <= 0)
497
+ return;
498
+ const r = t.expandedInstanceVertices + n;
499
+ if (r > t.maxExpandedInstanceVertices)
500
+ throw new l(
501
+ "E_EXPANSION_BUDGET",
502
+ `CPU-expanded ${e} instance vertices exceed budget: ${r}/${t.maxExpandedInstanceVertices}. Disable block loading or raise maxExpandedInstanceVertices.`
503
+ );
504
+ t.expandedInstanceVertices = r;
505
+ }
506
+ function wn(t, e, n) {
507
+ return n.loadBlocks ? n.hiddenInstanceIds.size === 0 || n.keepTextsForHiddenInstances ? t : t.filter((r) => {
508
+ if (!Number.isInteger(r.iv) || !Number.isInteger(r.io))
509
+ return !0;
510
+ const o = e.get(`${r.iv}:${r.io}`);
511
+ return o === void 0 || !n.hiddenInstanceIds.has(o);
512
+ }) : t.filter((r) => !Number.isInteger(r.iv) || !Number.isInteger(r.io));
513
+ }
514
+ function pn(t, e) {
515
+ const n = /* @__PURE__ */ new Map();
516
+ return t.forEach((r, o) => {
517
+ if (!Number.isInteger(r.iv) || !Number.isInteger(r.io))
518
+ return;
519
+ const s = e.get(`${r.iv}:${r.io}`);
520
+ if (s === void 0)
521
+ return;
522
+ const i = n.get(s);
523
+ i ? i.push(o) : n.set(s, [o]);
524
+ }), n;
525
+ }
526
+ function bn(t, e, n, r, o, s, i) {
527
+ const a = e.map((c, u) => ({
528
+ id: c.id,
529
+ blockName: Ve(c, u),
530
+ line: n[u].line,
531
+ fill: n[u].fill,
532
+ dot: n[u].dot,
533
+ texts: r.get(c.id) ?? []
534
+ }));
535
+ return {
536
+ layer0Index: t,
537
+ variants: a,
538
+ instances: o,
539
+ textIndexesByInstanceId: pn(s, i),
540
+ ownerInstanceIdByVariantOrdinal: i
541
+ };
542
+ }
543
+ function An(t) {
544
+ if (t.byteLength < 4)
545
+ throw new l("E_HEADER", "Payload too small: missing header length");
546
+ const e = new DataView(t), n = e.getUint32(0, !0), r = 4, o = r + n;
547
+ if (o > t.byteLength)
548
+ throw new l("E_HEADER", "Header length exceeds payload length");
549
+ let s;
550
+ try {
551
+ s = JSON.parse(Ot.decode(new Uint8Array(t, r, n)));
552
+ } catch (i) {
553
+ throw new l("E_HEADER_JSON", `Invalid JSON header: ${i.message}`);
554
+ }
555
+ return {
556
+ meta: s,
557
+ header: Ie(s),
558
+ dataOffset: o,
559
+ view: e
560
+ };
561
+ }
562
+ function Ve(t, e) {
563
+ var s, i, a;
564
+ const n = (s = t.name) == null ? void 0 : s.trim();
565
+ if (n)
566
+ return n;
567
+ const r = (i = t.block_name) == null ? void 0 : i.trim();
568
+ if (r)
569
+ return r;
570
+ const o = (a = t.blockName) == null ? void 0 : a.trim();
571
+ return o || `block_${e}`;
572
+ }
573
+ function In(t) {
574
+ const e = Number(t.version ?? 1), n = String(t.encoding ?? "").toLowerCase();
575
+ if (e === 2) {
576
+ const r = n ? ` ${n}` : "";
577
+ throw new l(
578
+ "E_UNSUPPORTED_PACK_VERSION",
579
+ `当前文件是 V2${r} pack,前端不再兼容解析;请升级到最新版本后再打开。`
580
+ );
581
+ }
582
+ }
583
+ function Rn(t) {
584
+ const e = An(t);
585
+ return In(e.meta), e;
586
+ }
587
+ function Vn(t) {
588
+ if (t.byteLength < 4)
589
+ return !1;
590
+ const e = new Uint8Array(t, 0, 4);
591
+ return e[0] === 68 && e[1] === 88 && e[2] === 66 && e[3] === 51;
592
+ }
593
+ function re(t, e) {
594
+ if (t > BigInt(Number.MAX_SAFE_INTEGER))
595
+ throw new l("E_GROUP_RANGE", `${e} exceeds safe integer range`);
596
+ return Number(t);
597
+ }
598
+ function st(t, e, n, r) {
599
+ if (!Number.isInteger(t) || !Number.isInteger(e) || t < 0 || e < 0 || t + e > n)
600
+ throw new l("E_GROUP_RANGE", `${r} exceeds payload length`);
601
+ }
602
+ function Nn(t) {
603
+ if (t.byteLength < 20)
604
+ throw new l("E_HEADER", "V3 payload too small: missing container header");
605
+ const e = new DataView(t), n = e.getUint16(4, !0), r = e.getUint16(6, !0), o = e.getUint32(8, !0), s = e.getUint16(12, !0), i = e.getUint16(14, !0), a = e.getUint32(16, !0);
606
+ if (n !== 3 || r > 6)
607
+ throw new l("E_GROUP_RANGE", `Unsupported V3 version: ${n}.${r}`);
608
+ if (o !== 0)
609
+ throw new l("E_GROUP_RANGE", `Unsupported V3 file flags: ${o}`);
610
+ if (s < 24)
611
+ throw new l("E_GROUP_RANGE", `Invalid V3 directory entry size: ${s}`);
612
+ if (a !== s * i)
613
+ throw new l("E_GROUP_RANGE", "V3 directory byte size mismatch");
614
+ const c = 20;
615
+ st(c, a, t.byteLength, "V3 section directory");
616
+ const u = /* @__PURE__ */ new Map();
617
+ for (let m = 0; m < i; m += 1) {
618
+ const g = c + m * s, d = e.getUint16(g, !0), h = e.getUint16(g + 2, !0), w = e.getUint32(g + 4, !0), y = re(e.getBigUint64(g + 8, !0), "V3 section offset"), f = re(e.getBigUint64(g + 16, !0), "V3 section length");
619
+ if (h !== 0)
620
+ throw new l("E_GROUP_RANGE", `Unsupported V3 section flags for type ${d}: ${h}`);
621
+ if (w !== 0)
622
+ throw new l("E_GROUP_RANGE", `Invalid V3 section reserved field for type ${d}: ${w}`);
623
+ st(y, f, t.byteLength, `V3 section ${d}`), u.set(d, { type: d, flags: h, offset: y, length: f });
624
+ }
625
+ return { versionMinor: r, sections: u };
626
+ }
627
+ function Z(t, e, n) {
628
+ const r = t.get(e);
629
+ if (!r)
630
+ throw new l("E_GROUP_RANGE", `Missing V3 section ${n}`);
631
+ return r;
632
+ }
633
+ function xt(t, e) {
634
+ return t.get(e) ?? { type: e, flags: 0, offset: 0, length: 0 };
635
+ }
636
+ function Gn(t, e, n) {
637
+ try {
638
+ return JSON.parse(Ot.decode(new Uint8Array(t, e.offset, e.length)));
639
+ } catch (r) {
640
+ throw new l("E_HEADER_JSON", `Invalid V3 ${n} JSON: ${r.message}`);
641
+ }
642
+ }
643
+ function Un(t) {
644
+ const e = String(t.encoding ?? "").toLowerCase();
645
+ return e === "nested_instanced_external" || e === "nested_instanced_external_annotations";
646
+ }
647
+ function Cn(t) {
648
+ return String(t.encoding ?? "").toLowerCase() === "nested_instanced_external_annotations";
649
+ }
650
+ function Pn(t, e, n) {
651
+ const r = t.features, o = r && typeof r == "object" && !Array.isArray(r) ? { ...r } : {};
652
+ return e && (o.has_external_variant_geometry = !0), n && (o.has_external_annotations = !0), Object.keys(o).length ? o : void 0;
653
+ }
654
+ function k(t, e) {
655
+ if (!Number.isInteger(t) || Number(t) < 0)
656
+ throw new l("E_HEADER", `${e} must be a non-negative integer`);
657
+ return Number(t);
658
+ }
659
+ function Ne(t, e) {
660
+ if (typeof t != "string" || !t.trim())
661
+ throw new l("E_HEADER", `${e} must be a non-empty string`);
662
+ return t;
663
+ }
664
+ function oe(t, e) {
665
+ if (t == null)
666
+ return null;
667
+ if (!Array.isArray(t) || t.length !== 4 || t.some((n) => typeof n != "number" || !Number.isFinite(n)))
668
+ throw new l("E_HEADER", `${e} must be null or [minX, minY, maxX, maxY]`);
669
+ return [t[0], t[1], t[2], t[3]];
670
+ }
671
+ function Tt(t, e) {
672
+ if (!rt(t) || Array.isArray(t))
673
+ throw new l("E_HEADER", `${e} must be an object`);
674
+ return {
675
+ line_count: k(t.line_count, `${e}.line_count`),
676
+ fill_count: k(t.fill_count, `${e}.fill_count`),
677
+ dot_count: k(t.dot_count, `${e}.dot_count`),
678
+ bbox: oe(t.bbox, `${e}.bbox`),
679
+ own_bbox: oe(t.own_bbox, `${e}.own_bbox`)
680
+ };
681
+ }
682
+ function Sn(t) {
683
+ return t ? { minX: t[0], minY: t[1], maxX: t[2], maxY: t[3] } : null;
684
+ }
685
+ function Tn(t, e) {
686
+ const n = t.external_variants;
687
+ if (!Array.isArray(n))
688
+ throw new l("E_HEADER", "V3 external SCENE_META.external_variants must be an array");
689
+ if (n.length !== e)
690
+ throw new l(
691
+ "E_GROUP_RANGE",
692
+ `V3 external variant manifest count mismatch: manifest=${n.length}, table=${e}`
693
+ );
694
+ return n.map((r, o) => {
695
+ if (!rt(r) || Array.isArray(r))
696
+ throw new l("E_HEADER", `V3 external_variants[${o}] must be an object`);
697
+ const s = k(r.id, `V3 external_variants[${o}].id`);
698
+ if (s !== o)
699
+ throw new l("E_GROUP_RANGE", `V3 external_variants[${o}].id must equal ${o}, found ${s}`);
700
+ const i = Ne(r.href, `V3 external_variants[${o}].href`), a = k(r.raw_size, `V3 external_variants[${o}].raw_size`);
701
+ if ("normal" in r || "annotation" in r) {
702
+ const c = Tt(r.annotation, `V3 external_variants[${o}].annotation`);
703
+ return {
704
+ id: s,
705
+ href: i,
706
+ raw_size: a,
707
+ normal: Tt(r.normal, `V3 external_variants[${o}].normal`),
708
+ annotation: {
709
+ ...c,
710
+ text_count: k(
711
+ rt(r.annotation) && !Array.isArray(r.annotation) ? r.annotation.text_count : void 0,
712
+ `V3 external_variants[${o}].annotation.text_count`
713
+ )
714
+ }
715
+ };
716
+ }
717
+ return {
718
+ id: s,
719
+ href: i,
720
+ raw_size: a,
721
+ line_count: k(r.line_count, `V3 external_variants[${o}].line_count`),
722
+ fill_count: k(r.fill_count, `V3 external_variants[${o}].fill_count`),
723
+ dot_count: k(r.dot_count, `V3 external_variants[${o}].dot_count`)
724
+ };
725
+ });
726
+ }
727
+ function Bn(t) {
728
+ const e = t.external_annotations;
729
+ if (e == null) return null;
730
+ if (!rt(e) || Array.isArray(e))
731
+ throw new l("E_HEADER", "V3 external_annotations must be an object");
732
+ const n = e.scene;
733
+ if (n == null) return {};
734
+ if (!rt(n) || Array.isArray(n))
735
+ throw new l("E_HEADER", "V3 external_annotations.scene must be an object");
736
+ const r = Tt(n, "V3 external_annotations.scene");
737
+ return {
738
+ scene: {
739
+ href: Ne(n.href, "V3 external_annotations.scene.href"),
740
+ raw_size: k(n.raw_size, "V3 external_annotations.scene.raw_size"),
741
+ ...r,
742
+ text_count: k(n.text_count, "V3 external_annotations.scene.text_count")
743
+ }
744
+ };
745
+ }
746
+ function ht(t, e, n, r) {
747
+ return st(e, n, t.byteLength, r), Ot.decode(t.subarray(e, e + n));
748
+ }
749
+ function $n(t, e, n) {
750
+ if (e.length % 20 !== 0)
751
+ throw new l("E_GROUP_RANGE", "V3 LAYER_TABLE length must be a multiple of 20");
752
+ const r = new DataView(t), o = [];
753
+ for (let s = e.offset; s < e.offset + e.length; s += 20) {
754
+ const i = r.getUint32(s, !0), a = r.getUint32(s + 4, !0);
755
+ o.push({
756
+ name: ht(n, i, a, "V3 layer name"),
757
+ color: [r.getUint8(s + 8), r.getUint8(s + 9), r.getUint8(s + 10)],
758
+ visible: r.getUint8(s + 11) !== 0,
759
+ lw_px: r.getFloat32(s + 12, !0)
760
+ });
761
+ }
762
+ return o;
763
+ }
764
+ function ft(t, e, n, r, o, s) {
765
+ if (n + 4 > r)
766
+ throw new l("E_GROUP_RANGE", `Missing ${o} vertex_count`);
767
+ const i = e.getUint32(n, !0), a = n + 4, c = we(t, e, a, i, r, s);
768
+ if (c.offset > r)
769
+ throw new l("E_GROUP_RANGE", `${o} exceeds section bounds`);
770
+ return {
771
+ chunk: c.chunk,
772
+ offset: c.offset
773
+ };
774
+ }
775
+ function Ge(t, e, n, r, o, s) {
776
+ const i = ft(t, e, n, r, o, s), a = n + 4;
777
+ return {
778
+ chunk: i.chunk,
779
+ snapshot: {
780
+ count: i.chunk.count,
781
+ raw: new Uint8Array(t, a, i.offset - a).slice(),
782
+ groupLayerEncoding: s
783
+ },
784
+ offset: i.offset
785
+ };
786
+ }
787
+ function dt(t = "u8") {
788
+ return {
789
+ chunk: { pos: new Float32Array(0), col: new Uint8Array(0), lay: new Uint8Array(0), count: 0 },
790
+ snapshot: { count: 0, raw: new Uint8Array(0), groupLayerEncoding: t }
791
+ };
792
+ }
793
+ function On(t = "u8") {
794
+ return {
795
+ line: dt(t),
796
+ fill: dt(t),
797
+ dot: dt(t)
798
+ };
799
+ }
800
+ function vn(t, e, n) {
801
+ var r;
802
+ return !!(e && n && t.deferExternalVariantGeometry && !((r = t.externalVariantBuffers) != null && r.has(e.id)));
803
+ }
804
+ function _t(t, e, n, r, o, s, i) {
805
+ if (o === 0)
806
+ return dt(i);
807
+ st(r, o, n.length, s);
808
+ const a = n.offset + r, c = a + o, u = Ge(t, e, a, c, s, i);
809
+ if (u.offset !== c)
810
+ throw new l("E_GROUP_RANGE", `${s} has trailing bytes`);
811
+ return { chunk: u.chunk, snapshot: u.snapshot };
812
+ }
813
+ function Ue(t, e, n) {
814
+ if ([
815
+ t.getUint32(e + 8, !0),
816
+ t.getUint32(e + 12, !0),
817
+ t.getUint32(e + 16, !0),
818
+ t.getUint32(e + 20, !0),
819
+ t.getUint32(e + 24, !0),
820
+ t.getUint32(e + 28, !0)
821
+ ].some((o) => o !== 0))
822
+ throw new l("E_GROUP_RANGE", `V3 external variant ${n} must use zero inline geometry offsets`);
823
+ }
824
+ function nt(t, e, n, r, o, s) {
825
+ const i = Ge(t, e, n, t.byteLength, o, s);
826
+ if (i.chunk.count !== r)
827
+ throw new l(
828
+ "E_GROUP_RANGE",
829
+ `${o} vertex_count mismatch: manifest=${r}, sidecar=${i.chunk.count}`
830
+ );
831
+ return i;
832
+ }
833
+ function vt(t) {
834
+ return "normal" in t ? t.normal : t;
835
+ }
836
+ function Mn(t, e, n) {
837
+ const r = vt(t), o = new DataView(e);
838
+ let s = 0;
839
+ const i = nt(e, o, s, r.line_count, `V3 external variant ${t.id} line blob`, n);
840
+ s = i.offset;
841
+ const a = nt(e, o, s, r.fill_count, `V3 external variant ${t.id} fill blob`, n);
842
+ s = a.offset;
843
+ const c = nt(e, o, s, r.dot_count, `V3 external variant ${t.id} dot blob`, n);
844
+ if (s = c.offset, s !== e.byteLength)
845
+ throw new l("E_GROUP_RANGE", `V3 external variant ${t.id} sidecar has trailing bytes`);
846
+ return {
847
+ line: { chunk: i.chunk, snapshot: i.snapshot },
848
+ fill: { chunk: a.chunk, snapshot: a.snapshot },
849
+ dot: { chunk: c.chunk, snapshot: c.snapshot }
850
+ };
851
+ }
852
+ function Dn(t, e) {
853
+ const n = on(e), r = sn(n, 257, "BLOCK_NORMAL_GEOMETRY"), o = new DataView(e);
854
+ let s = r.offset;
855
+ const i = r.offset + r.length, a = ye(n.versionMinor), c = nt(e, o, s, t.normal.line_count, `V3.3 external variant ${t.id} normal line blob`, a);
856
+ s = c.offset;
857
+ const u = nt(e, o, s, t.normal.fill_count, `V3.3 external variant ${t.id} normal fill blob`, a);
858
+ s = u.offset;
859
+ const m = nt(e, o, s, t.normal.dot_count, `V3.3 external variant ${t.id} normal dot blob`, a);
860
+ if (s = m.offset, s !== i)
861
+ throw new l("E_GROUP_RANGE", `V3.3 external variant ${t.id} normal geometry section has trailing bytes`);
862
+ return {
863
+ line: { chunk: c.chunk, snapshot: c.snapshot },
864
+ fill: { chunk: u.chunk, snapshot: u.snapshot },
865
+ dot: { chunk: m.chunk, snapshot: m.snapshot }
866
+ };
867
+ }
868
+ function kn(t, e, n = "u8") {
869
+ if (e.byteLength !== t.raw_size)
870
+ throw new l(
871
+ "E_GROUP_RANGE",
872
+ `V3 external variant ${t.id} raw_size mismatch: manifest=${t.raw_size}, sidecar=${e.byteLength}`
873
+ );
874
+ return "normal" in t ? Dn(t, e) : Mn(t, e, n);
875
+ }
876
+ function Ln(t, e, n) {
877
+ const r = e == null ? void 0 : e.get(t.id);
878
+ if (!r)
879
+ throw new l("E_GROUP_RANGE", `Missing V3 external sidecar buffer for variant ${t.id}`);
880
+ return kn(t, r, n);
881
+ }
882
+ function Et(t, e, n, r, o) {
883
+ if (r === 0)
884
+ return 0;
885
+ if (st(n, r, e.length, o), r < 4)
886
+ throw new l("E_GROUP_RANGE", `Missing ${o} vertex_count`);
887
+ return t.getUint32(e.offset + n, !0);
888
+ }
889
+ function Fn(t, e, n, r) {
890
+ const o = n.offset + n.length;
891
+ let s = n.offset;
892
+ const i = ft(t, e, s, o, "V3 BASE_GEOMETRY line", r);
893
+ s = i.offset;
894
+ const a = ft(t, e, s, o, "V3 BASE_GEOMETRY fill", r);
895
+ s = a.offset;
896
+ const c = ft(t, e, s, o, "V3 BASE_GEOMETRY dot", r);
897
+ if (s = c.offset, s !== o)
898
+ throw new l("E_GROUP_RANGE", "V3 BASE_GEOMETRY has trailing bytes");
899
+ return {
900
+ line: i.chunk,
901
+ fill: a.chunk,
902
+ dot: c.chunk
903
+ };
904
+ }
905
+ function wt(t) {
906
+ return qe(t.pos, t.count, 2);
907
+ }
908
+ function Xn(t, e, n) {
909
+ return Bt(Bt(wt(t), wt(e)), wt(n));
910
+ }
911
+ function Ce(t) {
912
+ return "normal" in t ? Sn(t.normal.bbox ?? t.normal.own_bbox ?? null) : null;
913
+ }
914
+ function Yn(t, e, n, r, o, s, i, a) {
915
+ if (n.length % 60 !== 0)
916
+ throw new l("E_GROUP_RANGE", "V3 VARIANT_TABLE length must be a multiple of 60");
917
+ const c = [], u = /* @__PURE__ */ new Map(), m = [], g = n.length / 60;
918
+ for (let d = 0; d < g; d += 1) {
919
+ const h = n.offset + d * 60, w = e.getUint32(h, !0), y = e.getUint32(h + 4, !0), f = (s == null ? void 0 : s[d]) ?? null, _ = !f || !a.requiredExternalVariantIds || a.requiredExternalVariantIds.has(d), b = vn(a, f, _), E = f ? (Ue(e, h, d), !_ || b ? On(i) : Ln(f, a.externalVariantBuffers, i)) : {
920
+ line: _t(
921
+ t,
922
+ e,
923
+ r,
924
+ e.getUint32(h + 8, !0),
925
+ e.getUint32(h + 12, !0),
926
+ `V3 variant ${d} line blob`,
927
+ i
928
+ ),
929
+ fill: _t(
930
+ t,
931
+ e,
932
+ r,
933
+ e.getUint32(h + 16, !0),
934
+ e.getUint32(h + 20, !0),
935
+ `V3 variant ${d} fill blob`,
936
+ i
937
+ ),
938
+ dot: _t(
939
+ t,
940
+ e,
941
+ r,
942
+ e.getUint32(h + 24, !0),
943
+ e.getUint32(h + 28, !0),
944
+ `V3 variant ${d} dot blob`,
945
+ i
946
+ )
947
+ }, p = f ? vt(f) : null, S = (p == null ? void 0 : p.line_count) ?? E.line.chunk.count, N = (p == null ? void 0 : p.fill_count) ?? E.fill.chunk.count, C = (p == null ? void 0 : p.dot_count) ?? E.dot.chunk.count, G = f && (!_ || b) ? Ce(f) : Xn(E.line.chunk, E.fill.chunk, E.dot.chunk), U = {
948
+ id: d,
949
+ name: ht(o, w, y, `V3 variant ${d} name`),
950
+ line_count: b ? S : E.line.chunk.count,
951
+ fill_count: b ? N : E.fill.chunk.count,
952
+ dot_count: b ? C : E.dot.chunk.count,
953
+ sourceLineCount: S,
954
+ sourceFillCount: N,
955
+ sourceDotCount: C,
956
+ nestedStart: e.getUint32(h + 32, !0),
957
+ nestedCount: e.getUint32(h + 36, !0),
958
+ textStart: e.getUint32(h + 40, !0),
959
+ textCount: e.getUint32(h + 44, !0),
960
+ precisionOriginX: e.getFloat32(h + 48, !0),
961
+ precisionOriginY: e.getFloat32(h + 52, !0),
962
+ lineSnapshot: E.line.snapshot,
963
+ fillSnapshot: E.fill.snapshot,
964
+ dotSnapshot: E.dot.snapshot,
965
+ bbox: G
966
+ };
967
+ c.push(U), u.set(d, { line: E.line.chunk, fill: E.fill.chunk, dot: E.dot.chunk }), m.push({ line: E.line.snapshot, fill: E.fill.snapshot, dot: E.dot.snapshot });
968
+ }
969
+ return { variantsById: c, variants: u, snapshots: m };
970
+ }
971
+ function zn(t, e, n, r, o) {
972
+ if (e.length % 60 !== 0)
973
+ throw new l("E_GROUP_RANGE", "V3 VARIANT_TABLE length must be a multiple of 60");
974
+ const s = [], i = e.length / 60;
975
+ for (let a = 0; a < i; a += 1) {
976
+ const c = e.offset + a * 60, u = t.getUint32(c, !0), m = t.getUint32(c + 4, !0), g = (o == null ? void 0 : o[a]) ?? null;
977
+ g && Ue(t, c, a);
978
+ const d = g ? vt(g) : null, h = t.getFloat32(c + 48, !0), w = t.getFloat32(c + 52, !0);
979
+ s.push({
980
+ id: a,
981
+ name: ht(r, u, m, `V3 variant ${a} name`),
982
+ line_count: g ? d.line_count : Et(
983
+ t,
984
+ n,
985
+ t.getUint32(c + 8, !0),
986
+ t.getUint32(c + 12, !0),
987
+ `V3 variant ${a} line blob`
988
+ ),
989
+ fill_count: g ? d.fill_count : Et(
990
+ t,
991
+ n,
992
+ t.getUint32(c + 16, !0),
993
+ t.getUint32(c + 20, !0),
994
+ `V3 variant ${a} fill blob`
995
+ ),
996
+ dot_count: g ? d.dot_count : Et(
997
+ t,
998
+ n,
999
+ t.getUint32(c + 24, !0),
1000
+ t.getUint32(c + 28, !0),
1001
+ `V3 variant ${a} dot blob`
1002
+ ),
1003
+ nestedStart: t.getUint32(c + 32, !0),
1004
+ nestedCount: t.getUint32(c + 36, !0),
1005
+ textStart: t.getUint32(c + 40, !0),
1006
+ textCount: t.getUint32(c + 44, !0),
1007
+ precisionOriginX: h,
1008
+ precisionOriginY: w,
1009
+ bbox: g ? Ce(g) : null
1010
+ });
1011
+ }
1012
+ return s;
1013
+ }
1014
+ function lt(t, e, n) {
1015
+ if (e.length % 32 !== 0)
1016
+ throw new l("E_GROUP_RANGE", `${n} length must be a multiple of 32`);
1017
+ const r = new DataView(t), o = [];
1018
+ for (let s = e.offset; s < e.offset + e.length; s += 32) {
1019
+ const i = r.getUint16(s + 30, !0);
1020
+ nr(i), o.push({
1021
+ variantId: r.getUint32(s, !0),
1022
+ matA: r.getFloat32(s + 4, !0),
1023
+ matB: r.getFloat32(s + 8, !0),
1024
+ matC: r.getFloat32(s + 12, !0),
1025
+ matD: r.getFloat32(s + 16, !0),
1026
+ tx: r.getFloat32(s + 20, !0),
1027
+ ty: r.getFloat32(s + 24, !0),
1028
+ insLayerIdx: r.getUint16(s + 28, !0),
1029
+ flags: i
1030
+ });
1031
+ }
1032
+ return o;
1033
+ }
1034
+ function Hn(t, e, n) {
1035
+ const r = t.getUint32(e, !0), o = t.getUint32(e + 4, !0), s = t.getUint8(e + 42), i = t.getUint8(e + 43), a = t.getFloat32(e + 24, !0), c = t.getFloat32(e + 28, !0);
1036
+ return {
1037
+ t: ht(n, r, o, "V3 text value"),
1038
+ x: t.getFloat32(e + 8, !0),
1039
+ y: t.getFloat32(e + 12, !0),
1040
+ h: t.getFloat32(e + 16, !0),
1041
+ r: t.getFloat32(e + 20, !0),
1042
+ c: [t.getUint8(e + 36), t.getUint8(e + 37), t.getUint8(e + 38)],
1043
+ li: t.getUint16(e + 40, !0),
1044
+ ha: dn[s & 3] ?? "left",
1045
+ va: mn[s >> 2 & 3] ?? "alphabetic",
1046
+ lh: t.getFloat32(e + 32, !0),
1047
+ ...a ? { w: a } : {},
1048
+ ...c !== 1 ? { wf: c } : {},
1049
+ ...i & 1 ? { mx: !0 } : {},
1050
+ ...i & 2 ? { my: !0 } : {}
1051
+ };
1052
+ }
1053
+ function pt(t, e, n, r) {
1054
+ if (e.length % 44 !== 0)
1055
+ throw new l("E_GROUP_RANGE", `${r} length must be a multiple of 44`);
1056
+ const o = [], s = new DataView(t);
1057
+ for (let i = e.offset; i < e.offset + e.length; i += 44)
1058
+ o.push(Hn(s, i, n));
1059
+ return o;
1060
+ }
1061
+ function Kn(t, e) {
1062
+ if (t.length % 44 !== 0)
1063
+ throw new l("E_GROUP_RANGE", `${e} length must be a multiple of 44`);
1064
+ return t.length / 44;
1065
+ }
1066
+ function jn(t, e, n, r) {
1067
+ return {
1068
+ instanceId: n,
1069
+ variantId: e.variantId,
1070
+ matA: t.matA * e.matA + t.matC * e.matB,
1071
+ matB: t.matB * e.matA + t.matD * e.matB,
1072
+ matC: t.matA * e.matC + t.matC * e.matD,
1073
+ matD: t.matB * e.matC + t.matD * e.matD,
1074
+ tx: t.matA * e.tx + t.matC * e.ty + t.tx,
1075
+ ty: t.matB * e.tx + t.matD * e.ty + t.ty,
1076
+ insLayerIdx: r
1077
+ };
1078
+ }
1079
+ function Wn(t, e, n, r) {
1080
+ var y;
1081
+ const o = ((y = r[e.insLayerIdx]) == null ? void 0 : y.visible) === !1, s = e.matA * t.x + e.matC * t.y + e.tx, i = e.matB * t.x + e.matD * t.y + e.ty, a = Math.hypot(e.matA, e.matB), c = Math.hypot(e.matC, e.matD), u = c > 1e-12 ? c : a > 1e-12 ? a : 1, m = a > 1e-12 && u > 1e-12 ? a / u : 1, g = qn(t, e), { mx: d, my: h, ...w } = t;
1082
+ return {
1083
+ ...w,
1084
+ x: s,
1085
+ y: i,
1086
+ h: t.h * u,
1087
+ w: t.w === void 0 ? void 0 : t.w * u,
1088
+ wf: (t.wf ?? 1) * m,
1089
+ r: g.r,
1090
+ ...g.mx ? { mx: !0 } : {},
1091
+ ...g.my ? { my: !0 } : {},
1092
+ li: o || t.li === n ? e.insLayerIdx : t.li
1093
+ };
1094
+ }
1095
+ function qn(t, e) {
1096
+ const n = t.r * Math.PI / 180, r = Math.cos(n), o = Math.sin(n), s = t.mx ? -1 : 1, i = t.my ? -1 : 1, a = s * (e.matA * r + e.matC * o), c = s * (e.matB * r + e.matD * o), u = i * (e.matC * r - e.matA * o), m = i * (e.matD * r - e.matB * o), g = a * m - c * u, d = Math.atan2(c, a) * 180 / Math.PI;
1097
+ return g < 0 ? { r: Math.atan2(-c, -a) * 180 / Math.PI, mx: !0 } : { r: d };
1098
+ }
1099
+ function Jn(t, e) {
1100
+ return t === e ? e : t;
1101
+ }
1102
+ function Zn(t, e, n) {
1103
+ return t === n ? e : t;
1104
+ }
1105
+ function Qn(t, e) {
1106
+ const n = new DataView(t), { versionMinor: r, sections: o } = Nn(t), s = ye(r), i = Z(o, 1, "SCENE_META"), a = Z(o, 2, "LAYER_TABLE"), c = Z(o, 3, "STRING_TABLE"), u = Z(o, 4, "BASE_GEOMETRY"), m = Z(o, 5, "VARIANT_TABLE"), g = Z(o, 6, "VARIANT_GEOMETRY"), d = Z(o, 7, "SCENE_INSTANCE_TABLE"), h = xt(o, 8), w = xt(o, 9), y = xt(o, 10), f = Gn(t, i, "SCENE_META"), _ = Un(f) ? Tn(f, m.length / 60) : null, b = Cn(f), E = b ? Bn(f) : null, p = Pn(f, _, b), S = b ? "nested_instanced_external_annotations" : _ ? "nested_instanced_external" : "nested_instanced", N = new Uint8Array(t, c.offset, c.length), C = $n(t, a, N), G = Number(f.layer0_index ?? 0), U = Ie({
1107
+ bounds: f.bounds ?? [0, 0, 0, 0],
1108
+ entity_count: Number(f.entity_count ?? 0),
1109
+ line_count: Number(f.base_line_count ?? 0),
1110
+ fill_count: Number(f.base_fill_count ?? 0),
1111
+ dot_count: Number(f.base_dot_count ?? 0),
1112
+ layers: C,
1113
+ texts: []
1114
+ });
1115
+ er(G, U.layers);
1116
+ const R = Fn(t, n, u, s);
1117
+ if (!e.loadBlocks) {
1118
+ const x = zn(n, m, g, N, _), A = lt(t, d, "V3 SCENE_INSTANCE_TABLE"), O = lt(t, h, "V3 NESTED_INSTANCE_TABLE"), P = pt(t, w, N, "V3 SCENE_TEXT_TABLE"), T = Kn(y, "V3 VARIANT_TEXT_TABLE");
1119
+ if (Number(f.variant_count ?? x.length) !== x.length)
1120
+ throw new l("E_GROUP_RANGE", "V3 variant count mismatch");
1121
+ if (Number(f.scene_instance_count ?? A.length) !== A.length)
1122
+ throw new l("E_GROUP_RANGE", "V3 scene instance count mismatch");
1123
+ if (Number(f.nested_instance_count ?? O.length) !== O.length)
1124
+ throw new l("E_GROUP_RANGE", "V3 nested instance count mismatch");
1125
+ if (Number(f.scene_text_count ?? P.length) !== P.length)
1126
+ throw new l("E_GROUP_RANGE", "V3 scene text count mismatch");
1127
+ if (Number(f.variant_text_count ?? T) !== T)
1128
+ throw new l("E_GROUP_RANGE", "V3 variant text count mismatch");
1129
+ for (const I of x) {
1130
+ if (I.nestedStart + I.nestedCount > O.length)
1131
+ throw new l("E_GROUP_RANGE", `V3 variant ${I.id} nested range exceeds table`);
1132
+ if (I.textStart + I.textCount > T)
1133
+ throw new l("E_GROUP_RANGE", `V3 variant ${I.id} text range exceeds table`);
1134
+ }
1135
+ return ne(A, O, (I) => {
1136
+ if (!x[I.variantId])
1137
+ throw new l("E_GROUP_RANGE", `Unknown V3 variantId ${I.variantId}`);
1138
+ ce(I.insLayerIdx, C.length);
1139
+ }), {
1140
+ meta: {
1141
+ bounds: f.bounds ?? [0, 0, 0, 0],
1142
+ entity_count: Number(f.entity_count ?? 0),
1143
+ line_count: R.line.count,
1144
+ fill_count: R.fill.count,
1145
+ dot_count: R.dot.count,
1146
+ version: 3,
1147
+ version_minor: r,
1148
+ encoding: S,
1149
+ ...p ? { features: p } : {},
1150
+ ..._ ? { external_variants: [..._] } : {},
1151
+ ...E ? { external_annotations: E } : {},
1152
+ layer0_index: G,
1153
+ block_variants: x.map((I) => ({
1154
+ id: I.id,
1155
+ name: I.name,
1156
+ line_count: I.line_count,
1157
+ fill_count: I.fill_count,
1158
+ dot_count: I.dot_count
1159
+ })),
1160
+ instance_count: A.length,
1161
+ layers: C,
1162
+ texts: P
1163
+ },
1164
+ header: {
1165
+ ...U,
1166
+ lineCount: R.line.count,
1167
+ fillCount: R.fill.count,
1168
+ dotCount: R.dot.count,
1169
+ textCount: P.length,
1170
+ texts: P
1171
+ },
1172
+ decoded: {
1173
+ baseLine: R.line,
1174
+ baseFill: R.fill,
1175
+ baseDot: R.dot,
1176
+ variants: /* @__PURE__ */ new Map(),
1177
+ instances: [],
1178
+ instanceIdByVariantOrdinal: /* @__PURE__ */ new Map()
1179
+ }
1180
+ };
1181
+ }
1182
+ const { variantsById: V, variants: L, snapshots: F } = Yn(
1183
+ t,
1184
+ n,
1185
+ m,
1186
+ g,
1187
+ N,
1188
+ _,
1189
+ s,
1190
+ e
1191
+ ), z = lt(t, d, "V3 SCENE_INSTANCE_TABLE"), $ = lt(t, h, "V3 NESTED_INSTANCE_TABLE"), v = pt(t, w, N, "V3 SCENE_TEXT_TABLE"), B = pt(t, y, N, "V3 VARIANT_TEXT_TABLE");
1192
+ if (Number(f.variant_count ?? V.length) !== V.length)
1193
+ throw new l("E_GROUP_RANGE", "V3 variant count mismatch");
1194
+ if (Number(f.scene_instance_count ?? z.length) !== z.length)
1195
+ throw new l("E_GROUP_RANGE", "V3 scene instance count mismatch");
1196
+ if (Number(f.nested_instance_count ?? $.length) !== $.length)
1197
+ throw new l("E_GROUP_RANGE", "V3 nested instance count mismatch");
1198
+ if (Number(f.scene_text_count ?? v.length) !== v.length)
1199
+ throw new l("E_GROUP_RANGE", "V3 scene text count mismatch");
1200
+ if (Number(f.variant_text_count ?? B.length) !== B.length)
1201
+ throw new l("E_GROUP_RANGE", "V3 variant text count mismatch");
1202
+ for (const x of V) {
1203
+ if (x.nestedStart + x.nestedCount > $.length)
1204
+ throw new l("E_GROUP_RANGE", `V3 variant ${x.id} nested range exceeds table`);
1205
+ if (x.textStart + x.textCount > B.length)
1206
+ throw new l("E_GROUP_RANGE", `V3 variant ${x.id} text range exceeds table`);
1207
+ }
1208
+ ne(z, $, (x) => {
1209
+ if (!V[x.variantId])
1210
+ throw new l("E_GROUP_RANGE", `Unknown V3 variantId ${x.variantId}`);
1211
+ ce(x.insLayerIdx, C.length);
1212
+ });
1213
+ const Mt = /* @__PURE__ */ new Map();
1214
+ for (const x of V)
1215
+ Mt.set(
1216
+ x.id,
1217
+ B.slice(x.textStart, x.textStart + x.textCount)
1218
+ );
1219
+ const it = [], M = e.externalVariantDeltaOnly, Dt = M ? [] : [...v], gt = /* @__PURE__ */ new Map(), at = /* @__PURE__ */ new Map(), kt = /* @__PURE__ */ new Map(), $e = (x, A) => {
1220
+ gt.set(x, Bt(gt.get(x) ?? null, A));
1221
+ }, Lt = (x, A, O, P, T, j) => {
1222
+ var Kt;
1223
+ if (T > 64)
1224
+ throw new l("E_GROUP_RANGE", "V3 nested instance depth exceeds limit");
1225
+ if (j.has(x))
1226
+ throw new l("E_GROUP_RANGE", `V3 nested variant cycle detected at ${x}`);
1227
+ const I = V[x];
1228
+ if (!I)
1229
+ throw new l("E_GROUP_RANGE", `Unknown V3 variantId ${x}`);
1230
+ j.add(x);
1231
+ const W = !e.requiredExternalVariantIds || e.requiredExternalVariantIds.has(x), X = M ? ((Kt = e.requiredExternalVariantIds) == null ? void 0 : Kt.has(x)) === !0 : W;
1232
+ let D = !1;
1233
+ const Ht = !!(I.line_count || I.fill_count || I.dot_count), Me = I.textCount > 0;
1234
+ if (X && (Ht || Me) && (it.push({
1235
+ instanceId: A.instanceId,
1236
+ variantId: x,
1237
+ matA: A.matA,
1238
+ matB: A.matB,
1239
+ matC: A.matC,
1240
+ matD: A.matD,
1241
+ tx: A.tx,
1242
+ ty: A.ty,
1243
+ insLayerIdx: A.insLayerIdx
1244
+ }), Ht && $e(A.instanceId, I.bbox ? Pe(I.bbox, A) : null), D = !0), X) {
1245
+ I.textCount > 0 && (D = !0);
1246
+ for (let q = 0; q < I.textCount; q += 1) {
1247
+ const tt = Wn(B[I.textStart + q], A, G, U.layers);
1248
+ Dt.push({
1249
+ ...tt,
1250
+ iv: O,
1251
+ io: P
1252
+ });
1253
+ }
1254
+ }
1255
+ for (let q = 0; q < I.nestedCount; q += 1) {
1256
+ const tt = $[I.nestedStart + q], De = Zn(tt.insLayerIdx, A.insLayerIdx, G), ke = tr(tt, I, V[tt.variantId]), Le = jn(A, ke, A.instanceId, De);
1257
+ D = Lt(tt.variantId, Le, O, P, T + 1, j) || D;
1258
+ }
1259
+ return j.delete(x), D;
1260
+ }, yt = /* @__PURE__ */ new Map();
1261
+ z.forEach((x, A) => {
1262
+ if (!V[x.variantId])
1263
+ throw new l("E_GROUP_RANGE", `Unknown V3 scene variantId ${x.variantId}`);
1264
+ const P = kt.get(x.variantId) ?? 0;
1265
+ kt.set(x.variantId, P + 1), at.set(`${x.variantId}:${P}`, A);
1266
+ const T = Jn(x.insLayerIdx, G), j = {
1267
+ instanceId: A,
1268
+ variantId: x.variantId,
1269
+ matA: x.matA,
1270
+ matB: x.matB,
1271
+ matC: x.matC,
1272
+ matD: x.matD,
1273
+ tx: x.tx,
1274
+ ty: x.ty,
1275
+ insLayerIdx: T
1276
+ }, I = Lt(x.variantId, j, x.variantId, P, 0, /* @__PURE__ */ new Set());
1277
+ if (M && !I)
1278
+ return;
1279
+ let W = yt.get(T);
1280
+ W || (W = /* @__PURE__ */ new Map(), yt.set(T, W));
1281
+ let X = W.get(x.variantId);
1282
+ X || (X = { count: 0, bboxes: [], inserts: [] }, W.set(x.variantId, X)), X.count += 1;
1283
+ const D = gt.get(A) ?? null;
1284
+ D && X.bboxes.push(D), X.inserts.push({
1285
+ instanceId: A,
1286
+ variantId: x.variantId,
1287
+ label: `#${A + 1} (${x.tx.toFixed(1)}, ${x.ty.toFixed(1)})`,
1288
+ tx: x.tx,
1289
+ ty: x.ty,
1290
+ canHighlight: D !== null,
1291
+ ...D ? { bbox: D } : {}
1292
+ });
1293
+ });
1294
+ const Ft = /* @__PURE__ */ new Map();
1295
+ for (const [x, A] of yt) {
1296
+ const O = [];
1297
+ for (const [P, T] of A)
1298
+ O.push({
1299
+ variantId: P,
1300
+ blockName: Ve(V[P], P),
1301
+ instanceCount: T.count,
1302
+ bboxes: T.bboxes,
1303
+ inserts: T.inserts
1304
+ });
1305
+ O.sort((P, T) => T.instanceCount - P.instanceCount), Ft.set(x, O);
1306
+ }
1307
+ let Xt = M ? 0 : R.line.count, Yt = M ? 0 : R.fill.count, zt = M ? 0 : R.dot.count;
1308
+ for (const x of it) {
1309
+ const A = V[x.variantId];
1310
+ !(e.deferExternalVariantGeometry && A.lineSnapshot.count === 0 && A.fillSnapshot.count === 0 && A.dotSnapshot.count === 0) && !Re(x.instanceId, e) || (Xt += A.line_count, Yt += A.fill_count, zt += A.dot_count);
1311
+ }
1312
+ const ct = wn(Dt, at, e), Oe = {
1313
+ bounds: f.bounds ?? [0, 0, 0, 0],
1314
+ entity_count: M ? 0 : Number(f.entity_count ?? 0),
1315
+ line_count: R.line.count,
1316
+ fill_count: R.fill.count,
1317
+ dot_count: R.dot.count,
1318
+ version: 3,
1319
+ version_minor: r,
1320
+ encoding: S,
1321
+ ...p ? { features: p } : {},
1322
+ ..._ ? { external_variants: [..._] } : {},
1323
+ ...E ? { external_annotations: E } : {},
1324
+ layer0_index: G,
1325
+ block_variants: V.map((x) => ({
1326
+ id: x.id,
1327
+ name: x.name,
1328
+ line_count: x.sourceLineCount,
1329
+ fill_count: x.sourceFillCount,
1330
+ dot_count: x.sourceDotCount
1331
+ })),
1332
+ instance_count: z.length,
1333
+ layers: C,
1334
+ texts: ct
1335
+ }, ve = {
1336
+ ...U,
1337
+ entityCount: M ? 0 : U.entityCount,
1338
+ lineCount: Xt,
1339
+ fillCount: Yt,
1340
+ dotCount: zt,
1341
+ textCount: ct.length,
1342
+ texts: ct,
1343
+ ...e.loadBlocks ? {
1344
+ layerBlockUsages: Ft,
1345
+ insertRuntime: bn(
1346
+ G,
1347
+ V,
1348
+ F,
1349
+ Mt,
1350
+ it,
1351
+ ct,
1352
+ at
1353
+ )
1354
+ } : {}
1355
+ };
1356
+ return {
1357
+ meta: Oe,
1358
+ header: ve,
1359
+ decoded: {
1360
+ baseLine: M ? At() : R.line,
1361
+ baseFill: M ? At() : R.fill,
1362
+ baseDot: M ? At() : R.dot,
1363
+ variants: L,
1364
+ instances: it,
1365
+ instanceIdByVariantOrdinal: at
1366
+ }
1367
+ };
1368
+ }
1369
+ function Bt(t, e) {
1370
+ return be(t, e);
1371
+ }
1372
+ function Pe(t, e) {
1373
+ return Ae(t, e);
1374
+ }
1375
+ function se(t) {
1376
+ return Je(t);
1377
+ }
1378
+ function ie(t, e) {
1379
+ return Ze(t, e);
1380
+ }
1381
+ function ae(t, e) {
1382
+ return Pe(t, {
1383
+ variantId: e.variantId,
1384
+ matA: e.matA,
1385
+ matB: e.matB,
1386
+ matC: e.matC,
1387
+ matD: e.matD,
1388
+ tx: e.tx,
1389
+ ty: e.ty,
1390
+ insLayerIdx: e.insLayerIdx
1391
+ });
1392
+ }
1393
+ function tr(t, e, n) {
1394
+ if (!(n != null && n.bbox) || !e.bbox)
1395
+ return t;
1396
+ const r = e.precisionOriginX, o = e.precisionOriginY;
1397
+ if (!Number.isFinite(r) || !Number.isFinite(o) || r === 0 && o === 0)
1398
+ return t;
1399
+ const s = {
1400
+ ...t,
1401
+ tx: t.tx - r,
1402
+ ty: t.ty - o
1403
+ }, i = ae(n.bbox, t), a = ae(n.bbox, s), c = Math.max(se(e.bbox), se(n.bbox), 1), u = Math.hypot(r, o), m = Math.hypot(t.tx, t.ty), g = Math.hypot(s.tx, s.ty);
1404
+ if (u <= c * 16 || m <= c * 16)
1405
+ return t;
1406
+ const d = ie(e.bbox, i), h = ie(e.bbox, a);
1407
+ return d > c * 16 && h * 4 < d && g * 4 < m ? s : t;
1408
+ }
1409
+ function ce(t, e) {
1410
+ if (t >= e)
1411
+ throw new l("E_GROUP_RANGE", `Instance layer index ${t} exceeds layer count ${e}`);
1412
+ }
1413
+ function er(t, e) {
1414
+ if (!Number.isInteger(t) || t < 0 || t >= e.length)
1415
+ throw new l("E_GROUP_RANGE", `layer0_index out of range: ${t}`);
1416
+ if (e[t].name !== "0")
1417
+ throw new l("E_GROUP_RANGE", `layer0_index must reference layer "0": ${t}`);
1418
+ }
1419
+ function nr(t) {
1420
+ if (t !== 0)
1421
+ throw new l("E_GROUP_RANGE", `Instance flags must be zero for Stage 1, found ${t}`);
1422
+ }
1423
+ function* rr(t, e, n, r, o) {
1424
+ let s = n;
1425
+ const i = [
1426
+ { kind: "line", count: r.lineCount },
1427
+ { kind: "fill", count: r.fillCount },
1428
+ { kind: "dot", count: r.dotCount }
1429
+ ];
1430
+ for (const a of i) {
1431
+ const c = We(t, e, s, a.count);
1432
+ for (; ; ) {
1433
+ const u = c.next();
1434
+ if (u.done) {
1435
+ s = u.value;
1436
+ break;
1437
+ }
1438
+ yield { kind: a.kind, payload: u.value };
1439
+ }
1440
+ }
1441
+ if (s !== t.byteLength)
1442
+ throw new l("E_GROUP_RANGE", `Trailing bytes detected: offset=${s}, size=${t.byteLength}`);
1443
+ for (const a of r.texts)
1444
+ yield { kind: "text", payload: a };
1445
+ }
1446
+ function* or(t, e, n, r) {
1447
+ yield* rr(t, e, n, r);
1448
+ }
1449
+ function* bt(t, e, n, r, o, s, i, a) {
1450
+ if (En(a, t, Math.max(0, e - n.count)), e === 0) {
1451
+ yield { kind: t, payload: an() };
1452
+ return;
1453
+ }
1454
+ const c = Ut;
1455
+ let u = new Float32Array(c * 2), m = [], g = 0, d = 0;
1456
+ const h = function* () {
1457
+ if (g <= 0)
1458
+ return;
1459
+ const f = g === c ? { pos: u, count: g, segments: ee(m) } : { pos: u.slice(0, g * 2), count: g, segments: ee(m) };
1460
+ yield { kind: t, payload: f }, d += g, g = 0, u = new Float32Array(c * 2), m = [];
1461
+ }, w = (f, _, b, E) => {
1462
+ if (f <= 0)
1463
+ return;
1464
+ const p = m[m.length - 1];
1465
+ if (p && p.startVertex + p.vertexCount === g && p.layerIndex === b && p.color[0] === _[0] && p.color[1] === _[1] && p.color[2] === _[2] && p.lineweightPx === E) {
1466
+ m[m.length - 1] = {
1467
+ ...p,
1468
+ vertexCount: p.vertexCount + f
1469
+ };
1470
+ return;
1471
+ }
1472
+ m.push({
1473
+ startVertex: g,
1474
+ vertexCount: f,
1475
+ color: [_[0], _[1], _[2]],
1476
+ layerIndex: b,
1477
+ ...E === void 0 ? {} : { lineweightPx: E }
1478
+ });
1479
+ };
1480
+ yield* function* () {
1481
+ for (const f of St(n)) {
1482
+ let _ = f.startVertex;
1483
+ const b = f.startVertex + f.vertexCount;
1484
+ for (; _ < b; ) {
1485
+ const E = Math.min(c - g, b - _), p = _ * 2, S = g * 2;
1486
+ u.set(n.pos.subarray(p, p + E * 2), S), w(E, f.color, f.layerIndex, f.lineweightPx), _ += E, g += E, g === c && (yield* h());
1487
+ }
1488
+ }
1489
+ }();
1490
+ for (const f of o) {
1491
+ if (!Re(f.instanceId, a))
1492
+ continue;
1493
+ const _ = r.get(f.variantId);
1494
+ if (!_)
1495
+ throw new l("E_GROUP_RANGE", `Unknown variantId ${f.variantId}`);
1496
+ const b = _[t], E = i[f.insLayerIdx].visible === !1;
1497
+ for (const p of St(b)) {
1498
+ const S = E || p.layerIndex === s ? f.insLayerIdx : p.layerIndex;
1499
+ let N = p.startVertex;
1500
+ const C = p.startVertex + p.vertexCount;
1501
+ for (; N < C; ) {
1502
+ const G = Math.min(c - g, C - N);
1503
+ for (let U = 0; U < G; U += 1) {
1504
+ const R = (N + U) * 2, V = (g + U) * 2, L = b.pos[R], F = b.pos[R + 1];
1505
+ u[V] = f.matA * L + f.matC * F + f.tx, u[V + 1] = f.matB * L + f.matD * F + f.ty;
1506
+ }
1507
+ w(G, p.color, S, p.lineweightPx), N += G, g += G, g === c && (yield* h());
1508
+ }
1509
+ }
1510
+ }
1511
+ if (yield* h(), d !== e)
1512
+ throw new l("E_GROUP_RANGE", `Expanded ${t} count mismatch: header=${e}, emitted=${d}`);
1513
+ }
1514
+ function* sr(t, e, n, r) {
1515
+ yield* bt(
1516
+ "line",
1517
+ e.lineCount,
1518
+ t.baseLine,
1519
+ t.variants,
1520
+ t.instances,
1521
+ n.layer0_index,
1522
+ e.layers,
1523
+ r
1524
+ ), yield* bt(
1525
+ "fill",
1526
+ e.fillCount,
1527
+ t.baseFill,
1528
+ t.variants,
1529
+ t.instances,
1530
+ n.layer0_index,
1531
+ e.layers,
1532
+ r
1533
+ ), yield* bt(
1534
+ "dot",
1535
+ e.dotCount,
1536
+ t.baseDot,
1537
+ t.variants,
1538
+ t.instances,
1539
+ n.layer0_index,
1540
+ e.layers,
1541
+ r
1542
+ );
1543
+ for (const o of e.texts)
1544
+ yield { kind: "text", payload: o };
1545
+ }
1546
+ function ir(t, e) {
1547
+ const n = xn(e), r = Qn(t, n);
1548
+ return {
1549
+ header: r.header,
1550
+ chunks: sr(
1551
+ r.decoded,
1552
+ r.header,
1553
+ { layer0_index: r.meta.layer0_index ?? 0 },
1554
+ n
1555
+ )
1556
+ };
1557
+ }
1558
+ function ar(t, e) {
1559
+ if (Vn(t))
1560
+ return ir(t, e);
1561
+ const n = Rn(t);
1562
+ return {
1563
+ header: n.header,
1564
+ chunks: or(t, n.view, n.dataOffset, n.header)
1565
+ };
1566
+ }
1567
+ function At() {
1568
+ return {
1569
+ pos: new Float32Array(0),
1570
+ col: new Uint8Array(0),
1571
+ lay: new Uint8Array(0),
1572
+ count: 0
1573
+ };
1574
+ }
1575
+ function cr(t, e) {
1576
+ return t ? mt(Ae(t, e)) : null;
1577
+ }
1578
+ async function ur(t) {
1579
+ const e = ue(), n = t.fetchImpl ?? fetch, r = new Map(
1580
+ t.entries.map((u) => [u.id, u])
1581
+ ), o = Array.from(new Set(t.requiredVariantIds)).sort((u, m) => u - m), s = /* @__PURE__ */ new Map(), i = lr(t.concurrency);
1582
+ let a = 0;
1583
+ async function c() {
1584
+ for (; a < o.length; ) {
1585
+ const u = o[a++], m = r.get(u);
1586
+ if (!m)
1587
+ throw new Error(`External block ${u} is missing from manifest`);
1588
+ const g = new URL(m.href, t.baseUrl).href, d = await n(g, { signal: t.signal });
1589
+ if (!d.ok) {
1590
+ const w = "status" in d ? d.status : void 0, y = "statusText" in d ? d.statusText : void 0, f = [w, y].filter((_) => _ !== void 0 && _ !== "").join(" ");
1591
+ throw new Error(`External block ${u} fetch failed${f ? `: ${f}` : ""}`);
1592
+ }
1593
+ const h = await d.arrayBuffer();
1594
+ if (h.byteLength !== m.raw_size)
1595
+ throw new Error(
1596
+ `External block ${u} raw_size mismatch: manifest=${m.raw_size}, response=${h.byteLength}`
1597
+ );
1598
+ s.set(u, h);
1599
+ }
1600
+ }
1601
+ return await Promise.all(Array.from({ length: Math.min(i, o.length) }, c)), { buffers: s, fetchMs: ue() - e };
1602
+ }
1603
+ function lr(t) {
1604
+ const e = Math.floor(t ?? 3);
1605
+ return Number.isFinite(e) ? Math.max(1, Math.min(e, 8)) : 3;
1606
+ }
1607
+ function ue() {
1608
+ var t, e;
1609
+ return ((e = (t = globalThis.performance) == null ? void 0 : t.now) == null ? void 0 : e.call(t)) ?? Date.now();
1610
+ }
1611
+ var K;
1612
+ class fr {
1613
+ constructor() {
1614
+ Wt(this, K, /* @__PURE__ */ new Map());
1615
+ }
1616
+ get size() {
1617
+ return et(this, K).size;
1618
+ }
1619
+ append(e) {
1620
+ let n = 0;
1621
+ for (const r of e) {
1622
+ if (r.count <= 0) continue;
1623
+ const o = $t(r.layerIndex, r.lineweightPx);
1624
+ let s = et(this, K).get(o), i = r.pos, a = r.positionItemSize;
1625
+ const c = r.linePositionKind ?? null;
1626
+ s ? s.positionItemSize !== a && (le(s), a !== 3 && (i = Te(i, r.count, a)), s.positionItemSize = 3, a = 3, s.linePositionKind = null) : (s = {
1627
+ layerIndex: r.layerIndex,
1628
+ ...r.lineweightPx === void 0 ? {} : { lineweightPx: r.lineweightPx },
1629
+ posParts: [],
1630
+ positionItemSize: a,
1631
+ colParts: [],
1632
+ colorRunParts: [],
1633
+ linePositionKind: c,
1634
+ count: 0,
1635
+ bbox: null
1636
+ }, et(this, K).set(o, s));
1637
+ const u = s.count > 0;
1638
+ s.posParts.push(i), s.colParts.push(r.col);
1639
+ const m = Er(
1640
+ r.colorRuns ?? wr(r.col),
1641
+ s.count
1642
+ );
1643
+ s.colorRunParts.push(m), s.linePositionKind !== c && (s.linePositionKind = null), s.positionItemSize === 2 && s.linePositionKind === null && le(s), s.count += r.count, s.bbox = u && s.bbox === null ? null : mr(s.bbox, r.bbox), n += r.count;
1644
+ }
1645
+ return n;
1646
+ }
1647
+ drain() {
1648
+ const e = [];
1649
+ for (const n of et(this, K).values()) {
1650
+ if (n.count <= 0) continue;
1651
+ const r = n.posParts.length === 1 ? n.posParts[0] : xr(n.posParts, n.count * n.positionItemSize), o = n.colParts.length === 1 ? n.colParts[0] : _r(n.colParts, n.count * 3), s = Be(n.colorRunParts.flat()), i = {
1652
+ layerIndex: n.layerIndex,
1653
+ pos: r,
1654
+ positionItemSize: n.positionItemSize,
1655
+ col: o,
1656
+ count: n.count,
1657
+ bbox: mt(n.bbox),
1658
+ colorRuns: s
1659
+ };
1660
+ n.lineweightPx !== void 0 && (i.lineweightPx = n.lineweightPx), n.linePositionKind && (i.linePositionKind = n.linePositionKind), e.push(i);
1661
+ }
1662
+ return et(this, K).clear(), e;
1663
+ }
1664
+ }
1665
+ K = new WeakMap();
1666
+ function It() {
1667
+ return new fr();
1668
+ }
1669
+ function dr() {
1670
+ return {
1671
+ line: It(),
1672
+ fill: It(),
1673
+ dot: It()
1674
+ };
1675
+ }
1676
+ function mr(t, e) {
1677
+ const n = mt(e);
1678
+ return t ? n ? {
1679
+ minX: Math.min(t.minX, n.minX),
1680
+ minY: Math.min(t.minY, n.minY),
1681
+ maxX: Math.max(t.maxX, n.maxX),
1682
+ maxY: Math.max(t.maxY, n.maxY)
1683
+ } : null : n;
1684
+ }
1685
+ function Se(t, e = {}) {
1686
+ if (t.count <= 0) return [];
1687
+ const n = St(t), r = [], o = /* @__PURE__ */ new Map(), s = /* @__PURE__ */ new Map(), i = /* @__PURE__ */ new Map(), a = e.markLinePositionXy === !0 || e.splitLineweight === !0;
1688
+ for (const y of n) {
1689
+ if (y.vertexCount <= 0) continue;
1690
+ const f = y.layerIndex, _ = a ? y.lineweightPx : void 0, b = $t(f, _), E = o.get(b);
1691
+ E === void 0 ? (o.set(b, y.vertexCount), s.set(b, f), i.set(b, _), r.push(b)) : o.set(b, E + y.vertexCount);
1692
+ }
1693
+ const c = /* @__PURE__ */ new Map(), u = /* @__PURE__ */ new Map(), m = /* @__PURE__ */ new Map(), g = /* @__PURE__ */ new Set(), d = e.markLinePositionXy === !0 ? "xy-zero-z" : void 0, h = d ? 2 : 3;
1694
+ for (const y of r) {
1695
+ const f = s.get(y), _ = i.get(y), b = o.get(y) ?? 0, E = {
1696
+ layerIndex: f,
1697
+ ..._ === void 0 ? {} : { lineweightPx: _ },
1698
+ pos: new Float32Array(b * h),
1699
+ positionItemSize: h,
1700
+ col: new Uint8Array(b * 3),
1701
+ count: b,
1702
+ bbox: null,
1703
+ colorRuns: []
1704
+ };
1705
+ d && (E.linePositionKind = d), c.set(y, E), u.set(y, 0), m.set(y, null);
1706
+ }
1707
+ for (const y of n) {
1708
+ if (y.vertexCount <= 0) continue;
1709
+ const f = y.layerIndex, _ = a ? y.lineweightPx : void 0, b = $t(f, _), E = c.get(b), p = u.get(b), S = p, N = y.color[0], C = y.color[1], G = y.color[2];
1710
+ for (let U = 0; U < y.vertexCount; U += 1) {
1711
+ const R = y.startVertex + U, V = p + U, L = V * h, F = V * 3, z = R * 2, $ = t.pos[z], v = t.pos[z + 1];
1712
+ E.pos[L] = $, E.pos[L + 1] = v, h === 3 && (E.pos[L + 2] = 0), E.col[F] = N, E.col[F + 1] = C, E.col[F + 2] = G;
1713
+ const B = m.get(b);
1714
+ !Number.isFinite($) || !Number.isFinite(v) ? g.add(b) : B ? ($ < B.minX && (B.minX = $), v < B.minY && (B.minY = v), $ > B.maxX && (B.maxX = $), v > B.maxY && (B.maxY = v)) : m.set(b, { minX: $, minY: v, maxX: $, maxY: v });
1715
+ }
1716
+ E.colorRuns.push({
1717
+ startVertex: S,
1718
+ vertexCount: y.vertexCount,
1719
+ color: [N, C, G]
1720
+ }), u.set(b, p + y.vertexCount);
1721
+ }
1722
+ const w = [];
1723
+ for (const y of r) {
1724
+ const f = c.get(y);
1725
+ f && (f.bbox = g.has(y) ? null : mt(m.get(y) ?? null), f.colorRuns = Be(f.colorRuns ?? []), w.push(f));
1726
+ }
1727
+ return w;
1728
+ }
1729
+ function $t(t, e) {
1730
+ return e === void 0 ? `${t}:` : `${t}:${e}`;
1731
+ }
1732
+ function hr(t, e) {
1733
+ return t.append(e);
1734
+ }
1735
+ function gr(t) {
1736
+ return t.drain();
1737
+ }
1738
+ function yr(t) {
1739
+ const e = [], n = /* @__PURE__ */ new Set();
1740
+ for (const r of t)
1741
+ fe(e, n, r.pos.buffer), fe(e, n, r.col.buffer);
1742
+ return e;
1743
+ }
1744
+ function xr(t, e) {
1745
+ const n = new Float32Array(e);
1746
+ let r = 0;
1747
+ for (const o of t)
1748
+ n.set(o, r), r += o.length;
1749
+ return n;
1750
+ }
1751
+ function Te(t, e, n) {
1752
+ if (n === 3) return t;
1753
+ const r = new Float32Array(e * 3);
1754
+ for (let o = 0; o < e; o += 1) {
1755
+ const s = o * 2, i = o * 3;
1756
+ r[i] = t[s] ?? 0, r[i + 1] = t[s + 1] ?? 0, r[i + 2] = 0;
1757
+ }
1758
+ return r;
1759
+ }
1760
+ function le(t) {
1761
+ if (t.positionItemSize === 3) return;
1762
+ const e = t.positionItemSize;
1763
+ t.posParts = t.posParts.map((n) => Te(n, n.length / e, e)), t.positionItemSize = 3, t.linePositionKind = null;
1764
+ }
1765
+ function _r(t, e) {
1766
+ const n = new Uint8Array(e);
1767
+ let r = 0;
1768
+ for (const o of t)
1769
+ n.set(o, r), r += o.length;
1770
+ return n;
1771
+ }
1772
+ function Er(t, e) {
1773
+ return t.map((n) => ({
1774
+ startVertex: n.startVertex + e,
1775
+ vertexCount: n.vertexCount,
1776
+ color: [n.color[0], n.color[1], n.color[2]]
1777
+ }));
1778
+ }
1779
+ function Be(t) {
1780
+ const e = [];
1781
+ for (const n of t) {
1782
+ const r = e[e.length - 1];
1783
+ if (r && r.startVertex + r.vertexCount === n.startVertex && r.color[0] === n.color[0] && r.color[1] === n.color[1] && r.color[2] === n.color[2]) {
1784
+ e[e.length - 1] = {
1785
+ ...r,
1786
+ vertexCount: r.vertexCount + n.vertexCount
1787
+ };
1788
+ continue;
1789
+ }
1790
+ e.push({
1791
+ startVertex: n.startVertex,
1792
+ vertexCount: n.vertexCount,
1793
+ color: [n.color[0], n.color[1], n.color[2]]
1794
+ });
1795
+ }
1796
+ return e;
1797
+ }
1798
+ function wr(t) {
1799
+ const e = Math.floor(t.length / 3), n = [];
1800
+ let r = 0;
1801
+ for (; r < e; ) {
1802
+ const o = r * 3, s = t[o] ?? 0, i = t[o + 1] ?? 0, a = t[o + 2] ?? 0;
1803
+ let c = r + 1;
1804
+ for (; c < e; ) {
1805
+ const u = c * 3;
1806
+ if (t[u] !== s || t[u + 1] !== i || t[u + 2] !== a) break;
1807
+ c += 1;
1808
+ }
1809
+ n.push({ startVertex: r, vertexCount: c - r, color: [s, i, a] }), r = c;
1810
+ }
1811
+ return n;
1812
+ }
1813
+ function fe(t, e, n) {
1814
+ n instanceof ArrayBuffer && (e.has(n) || (e.add(n), t.push(n)));
1815
+ }
1816
+ function pr(t, e, n = "u8") {
1817
+ if (e <= 0 && t.byteLength === 0)
1818
+ return { pos: new Float32Array(0), count: 0, segments: [] };
1819
+ const { buffer: r, startOffset: o, endOffset: s } = Rr(t), i = new DataView(r), a = we(r, i, o, e, s, n);
1820
+ if (a.offset !== s)
1821
+ throw new l(
1822
+ "E_GROUP_RANGE",
1823
+ `Insert runtime geometry chunk has trailing bytes: offset=${a.offset - o}, length=${t.byteLength}`
1824
+ );
1825
+ return a.chunk;
1826
+ }
1827
+ function br(t) {
1828
+ const e = (n) => {
1829
+ const r = t[n], o = pr(
1830
+ r.raw,
1831
+ r.count,
1832
+ r.groupLayerEncoding
1833
+ ), s = Se(o, { splitLineweight: n === "line" }), i = /* @__PURE__ */ new Map();
1834
+ for (const a of s)
1835
+ i.set(Ar(a.layerIndex, a.lineweightPx), {
1836
+ layerIndex: a.layerIndex,
1837
+ ...a.lineweightPx === void 0 ? {} : { lineweightPx: a.lineweightPx },
1838
+ pos: a.pos,
1839
+ col: a.col,
1840
+ count: a.count,
1841
+ bbox: ot(a.bbox)
1842
+ });
1843
+ return i;
1844
+ };
1845
+ return {
1846
+ line: e("line"),
1847
+ fill: e("fill"),
1848
+ dot: e("dot")
1849
+ };
1850
+ }
1851
+ function Ar(t, e) {
1852
+ return e === void 0 ? `${t}:` : `${t}:${e}`;
1853
+ }
1854
+ function Ir(t, e) {
1855
+ let n = e ? ot(e) : null;
1856
+ for (const r of ["line", "fill", "dot"])
1857
+ for (const o of t[r].values())
1858
+ n = be(n, o.bbox);
1859
+ return n;
1860
+ }
1861
+ function Rr(t) {
1862
+ if (t.buffer instanceof ArrayBuffer)
1863
+ return {
1864
+ buffer: t.buffer,
1865
+ startOffset: t.byteOffset,
1866
+ endOffset: t.byteOffset + t.byteLength
1867
+ };
1868
+ const e = Uint8Array.from(t);
1869
+ return {
1870
+ buffer: e.buffer,
1871
+ startOffset: e.byteOffset,
1872
+ endOffset: e.byteOffset + e.byteLength
1873
+ };
1874
+ }
1875
+ function Vr(t) {
1876
+ const e = t.insertRuntime;
1877
+ if (!e || e.instances.length === 0) return null;
1878
+ const n = [], r = /* @__PURE__ */ new Map(), o = /* @__PURE__ */ new Set();
1879
+ for (const c of e.variants) {
1880
+ const u = br(c), m = Rt(u.line), g = Rt(u.fill), d = Rt(u.dot), h = m.length > 0 || g.length > 0 || d.length > 0;
1881
+ r.set(c.id, h ? Ir(u, null) : null), h && (o.add(c.id), n.push({
1882
+ variantId: c.id,
1883
+ line: m,
1884
+ fill: g,
1885
+ dot: d
1886
+ }));
1887
+ }
1888
+ const s = e.instances.filter((c) => o.has(c.variantId));
1889
+ if (s.length === 0) return null;
1890
+ const i = Ur(s, r), a = Pr(n, i);
1891
+ return {
1892
+ variants: n,
1893
+ instances: i,
1894
+ bytes: a,
1895
+ cost: i.count
1896
+ };
1897
+ }
1898
+ function Nr(t) {
1899
+ const e = [], n = /* @__PURE__ */ new Set(), r = (o) => {
1900
+ n.has(o) || (n.add(o), e.push(o));
1901
+ };
1902
+ r(t.instances.meta.buffer), r(t.instances.mats.buffer), r(t.instances.bboxes.buffer);
1903
+ for (const o of t.variants)
1904
+ Nt(o.line, r), Nt(o.fill, r), Nt(o.dot, r);
1905
+ return e;
1906
+ }
1907
+ function Rt(t) {
1908
+ const e = [];
1909
+ for (const n of t.values())
1910
+ n.count <= 0 || e.push(Gr(n));
1911
+ return e;
1912
+ }
1913
+ function Gr(t) {
1914
+ return {
1915
+ pos: t.pos,
1916
+ col: t.col,
1917
+ count: t.count,
1918
+ layerIndex: t.layerIndex,
1919
+ ...t.lineweightPx === void 0 ? {} : { lineweightPx: t.lineweightPx },
1920
+ bbox: t.bbox
1921
+ };
1922
+ }
1923
+ function Ur(t, e) {
1924
+ const n = t.length, r = new Uint32Array(n * 3), o = new Float32Array(n * 6), s = new Float32Array(n * 4);
1925
+ for (let i = 0; i < n; i += 1) {
1926
+ const a = t[i], c = i * 3;
1927
+ r[c] = a.instanceId, r[c + 1] = a.variantId, r[c + 2] = a.insLayerIdx;
1928
+ const u = i * 6;
1929
+ o[u] = a.matA, o[u + 1] = a.matB, o[u + 2] = a.matC, o[u + 3] = a.matD, o[u + 4] = a.tx, o[u + 5] = a.ty;
1930
+ const m = cr(e.get(a.variantId) ?? null, a);
1931
+ Cr(s, i * 4, m);
1932
+ }
1933
+ return { meta: r, mats: o, bboxes: s, count: n };
1934
+ }
1935
+ function Cr(t, e, n) {
1936
+ if (!n) {
1937
+ t[e] = Number.POSITIVE_INFINITY, t[e + 1] = Number.POSITIVE_INFINITY, t[e + 2] = Number.NEGATIVE_INFINITY, t[e + 3] = Number.NEGATIVE_INFINITY;
1938
+ return;
1939
+ }
1940
+ t[e] = n.minX, t[e + 1] = n.minY, t[e + 2] = n.maxX, t[e + 3] = n.maxY;
1941
+ }
1942
+ function Pr(t, e) {
1943
+ let n = e.meta.byteLength + e.mats.byteLength + e.bboxes.byteLength;
1944
+ for (const r of t)
1945
+ n += Vt(r.line), n += Vt(r.fill), n += Vt(r.dot);
1946
+ return n;
1947
+ }
1948
+ function Vt(t) {
1949
+ return t.reduce((e, n) => e + n.pos.byteLength + n.col.byteLength, 0);
1950
+ }
1951
+ function Nt(t, e) {
1952
+ for (const n of t)
1953
+ e(n.pos.buffer), e(n.col.buffer);
1954
+ }
1955
+ function de() {
1956
+ return typeof performance < "u" && typeof performance.now == "function" ? performance.now() : Date.now();
1957
+ }
1958
+ class Sr {
1959
+ constructor() {
1960
+ J(this, "geometryCredits", 0);
1961
+ J(this, "textCredits", 0);
1962
+ J(this, "cancelled", !1);
1963
+ J(this, "geometryWaiters", []);
1964
+ J(this, "textWaiters", []);
1965
+ }
1966
+ grant(e) {
1967
+ this.cancelled || (this.geometryCredits += Math.max(0, e.geometryCredits), this.textCredits += Math.max(0, e.textCredits), this.flushWaiters());
1968
+ }
1969
+ cancel() {
1970
+ if (!this.cancelled) {
1971
+ this.cancelled = !0, this.geometryCredits = 0, this.textCredits = 0;
1972
+ for (const e of this.geometryWaiters.splice(0, this.geometryWaiters.length))
1973
+ e(!1);
1974
+ for (const e of this.textWaiters.splice(0, this.textWaiters.length))
1975
+ e(!1);
1976
+ }
1977
+ }
1978
+ take(e) {
1979
+ return this.cancelled ? Promise.resolve(!1) : e === "geometry" && this.geometryCredits > 0 ? (this.geometryCredits -= 1, Promise.resolve(!0)) : e === "text" && this.textCredits > 0 ? (this.textCredits -= 1, Promise.resolve(!0)) : new Promise((n) => {
1980
+ this.getWaiters(e).push(n);
1981
+ });
1982
+ }
1983
+ flushWaiters() {
1984
+ this.flushKind("geometry"), this.flushKind("text");
1985
+ }
1986
+ flushKind(e) {
1987
+ const n = this.getWaiters(e);
1988
+ for (; n.length > 0 && this.getCredits(e) > 0; ) {
1989
+ this.setCredits(e, this.getCredits(e) - 1);
1990
+ const r = n.shift();
1991
+ r == null || r(!0);
1992
+ }
1993
+ }
1994
+ getCredits(e) {
1995
+ return e === "geometry" ? this.geometryCredits : this.textCredits;
1996
+ }
1997
+ setCredits(e, n) {
1998
+ if (e === "geometry") {
1999
+ this.geometryCredits = n;
2000
+ return;
2001
+ }
2002
+ this.textCredits = n;
2003
+ }
2004
+ getWaiters(e) {
2005
+ return e === "geometry" ? this.geometryWaiters : this.textWaiters;
2006
+ }
2007
+ }
2008
+ const me = 262144, Tr = Number.MAX_SAFE_INTEGER, he = 524288, Br = Number.MAX_SAFE_INTEGER, $r = 5e6, Or = 64, Q = self;
2009
+ let Y = null;
2010
+ async function Gt(t, e, n) {
2011
+ const r = gr(e);
2012
+ if (!r.length || !await n.take("geometry")) return 0;
2013
+ const s = r.reduce((a, c) => a + c.count, 0), i = {
2014
+ type: "geometry",
2015
+ kind: t,
2016
+ layers: r,
2017
+ cost: s
2018
+ };
2019
+ return Q.postMessage(i, yr(r)), s;
2020
+ }
2021
+ async function vr(t, e) {
2022
+ return await Gt("line", t.line, e) + await Gt("fill", t.fill, e) + await Gt("dot", t.dot, e);
2023
+ }
2024
+ async function ge(t, e) {
2025
+ if (!t.length || !await e.take("text")) return 0;
2026
+ const r = t.slice();
2027
+ t.length = 0;
2028
+ const o = {
2029
+ type: "text",
2030
+ texts: r,
2031
+ cost: r.length
2032
+ };
2033
+ return Q.postMessage(o), r.length;
2034
+ }
2035
+ function Mr(t) {
2036
+ return t.lineCount + t.fillCount + t.dotCount;
2037
+ }
2038
+ function Dr(t, e) {
2039
+ return Mr(t) >= $r ? {
2040
+ initial: he,
2041
+ steady: e ? he : Br
2042
+ } : {
2043
+ initial: me,
2044
+ steady: e ? me : Tr
2045
+ };
2046
+ }
2047
+ function kr(t) {
2048
+ return t instanceof Error ? t : new Error(String(t));
2049
+ }
2050
+ function Lr(t) {
2051
+ if (!(!t || t.length === 0))
2052
+ return new Map(t.map((e) => [e.variantId, e.buffer]));
2053
+ }
2054
+ function Fr(t) {
2055
+ if (t !== void 0)
2056
+ return new Set(t);
2057
+ }
2058
+ async function Xr(t, e, n) {
2059
+ const r = Lr(e);
2060
+ if (!t || !n || n.length === 0)
2061
+ return r;
2062
+ const o = Array.from(new Set(n)).filter((a) => !(r != null && r.has(a))).sort((a, c) => a - c);
2063
+ if (o.length === 0)
2064
+ return r;
2065
+ const s = await ur({
2066
+ baseUrl: t.baseUrl,
2067
+ entries: t.entries,
2068
+ requiredVariantIds: o
2069
+ }), i = new Map(r ?? []);
2070
+ for (const [a, c] of s.buffers)
2071
+ i.set(a, c);
2072
+ return i;
2073
+ }
2074
+ async function Yr(t, e, n, r, o = !0, s, i, a, c, u, m, g, d) {
2075
+ const h = dr(), w = [];
2076
+ let y = 0, f = !1;
2077
+ const _ = c === !0, b = typeof i == "number" && Number.isFinite(i) && i >= 0, E = await Xr(
2078
+ a,
2079
+ u,
2080
+ g
2081
+ ), p = Fr(m), S = n && n.length > 0 || r === !0 || o === !1 || s === !0 || b || _ || E || p !== void 0 || d === !0 ? {
2082
+ ...n && n.length > 0 ? { hiddenInstanceIds: new Set(n) } : {},
2083
+ ...r === !0 ? { keepTextsForHiddenInstances: !0 } : {},
2084
+ ...o === !1 ? { loadBlocks: !1 } : {},
2085
+ ...s === !0 ? { suppressExpandedInsertGeometry: !0 } : {},
2086
+ ...b ? { maxExpandedInstanceVertices: i } : {},
2087
+ ..._ ? { deferExternalVariantGeometry: !0 } : {},
2088
+ ...E ? { externalVariantBuffers: E } : {},
2089
+ ...p !== void 0 ? { requiredExternalVariantIds: p } : {},
2090
+ ...d === !0 ? { externalVariantDeltaOnly: !0 } : {}
2091
+ } : void 0, N = ar(t, S), C = Dr(N.header, d === !0);
2092
+ Q.postMessage({
2093
+ type: "header",
2094
+ header: N.header
2095
+ });
2096
+ const G = async () => {
2097
+ const V = await vr(h, e);
2098
+ return y = 0, V > 0 && (f = !0), V;
2099
+ };
2100
+ for (const V of N.chunks) {
2101
+ if (V.kind === "text") {
2102
+ w.push(V.payload), w.length >= Or && await ge(w, e);
2103
+ continue;
2104
+ }
2105
+ const L = Se(V.payload, {
2106
+ markLinePositionXy: V.kind === "line"
2107
+ });
2108
+ y += hr(h[V.kind], L);
2109
+ const F = f ? C.steady : C.initial;
2110
+ y >= F && await G();
2111
+ }
2112
+ await G(), await ge(w, e), Q.postMessage({ type: "done" });
2113
+ const U = de(), R = Vr(N.header);
2114
+ R && Q.postMessage(
2115
+ {
2116
+ type: "insertModel",
2117
+ variants: R.variants,
2118
+ instances: R.instances,
2119
+ cost: R.cost,
2120
+ bytes: R.bytes,
2121
+ planMs: de() - U
2122
+ },
2123
+ Nr(R)
2124
+ ), Q.postMessage({ type: "complete" });
2125
+ }
2126
+ self.addEventListener("message", (t) => {
2127
+ const e = t.data;
2128
+ if (!e) return;
2129
+ if (e.type === "grant") {
2130
+ Y == null || Y.grant({
2131
+ geometryCredits: e.geometryCredits,
2132
+ textCredits: e.textCredits
2133
+ });
2134
+ return;
2135
+ }
2136
+ if (e.type === "cancel") {
2137
+ Y == null || Y.cancel();
2138
+ return;
2139
+ }
2140
+ if (e.type !== "parse") return;
2141
+ const n = new Sr();
2142
+ Y = n, Yr(
2143
+ e.buffer,
2144
+ n,
2145
+ e.hiddenInstanceIds,
2146
+ e.keepTextsForHiddenInstances,
2147
+ e.loadBlocks,
2148
+ e.suppressExpandedInsertGeometry,
2149
+ e.maxExpandedInstanceVertices,
2150
+ e.externalVariantFetchSource,
2151
+ e.deferExternalVariantGeometry,
2152
+ e.externalVariantBuffers,
2153
+ e.requiredExternalVariantIds,
2154
+ e.externalVariantGeometryFetchIds,
2155
+ e.externalVariantDeltaOnly
2156
+ ).catch((r) => {
2157
+ const o = kr(r), s = o.code;
2158
+ Q.postMessage({
2159
+ type: "error",
2160
+ message: o.message,
2161
+ code: typeof s == "string" ? s : void 0
2162
+ });
2163
+ }).finally(() => {
2164
+ Y === n && (Y = null);
2165
+ });
2166
+ });