@mulmoclaude/shapescript-plugin 1.3.0 → 1.4.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 (40) hide show
  1. package/README.md +19 -0
  2. package/dist/core/dispatch.d.ts +8 -3
  3. package/dist/core/dispatch.d.ts.map +1 -1
  4. package/dist/core/index.d.ts +5 -2
  5. package/dist/core/index.d.ts.map +1 -1
  6. package/dist/core/paths.d.ts +5 -0
  7. package/dist/core/paths.d.ts.map +1 -1
  8. package/dist/core-CpVzK-0i.js +53 -0
  9. package/dist/core-bcFgqR_m.cjs +1 -0
  10. package/dist/core.cjs +1 -1
  11. package/dist/core.js +4 -3
  12. package/dist/export/tool.d.ts +45 -0
  13. package/dist/export/tool.d.ts.map +1 -0
  14. package/dist/export/usdz.d.ts +17 -0
  15. package/dist/export/usdz.d.ts.map +1 -0
  16. package/dist/index.cjs +1 -1
  17. package/dist/index.js +4 -4
  18. package/dist/lang/de.d.ts.map +1 -1
  19. package/dist/lang/en.d.ts.map +1 -1
  20. package/dist/lang/es.d.ts.map +1 -1
  21. package/dist/lang/fr.d.ts.map +1 -1
  22. package/dist/lang/ja.d.ts.map +1 -1
  23. package/dist/lang/ko.d.ts.map +1 -1
  24. package/dist/lang/messages.d.ts +2 -0
  25. package/dist/lang/messages.d.ts.map +1 -1
  26. package/dist/lang/ptBR.d.ts.map +1 -1
  27. package/dist/lang/zh.d.ts.map +1 -1
  28. package/dist/render.cjs +2 -2
  29. package/dist/render.js +9 -9
  30. package/dist/samples-DPOGWslc.js +1038 -0
  31. package/dist/samples-DZNAeuSZ.cjs +210 -0
  32. package/dist/style.css +1 -1
  33. package/dist/{toThreeJS-B5LiF110.js → toThreeJS-BX_aeGdA.js} +18 -18
  34. package/dist/{toThreeJS-BOBpx5Dc.cjs → toThreeJS-XGDoVISb.cjs} +1 -1
  35. package/dist/vue/View.vue.d.ts.map +1 -1
  36. package/dist/vue.cjs +16 -16
  37. package/dist/vue.js +1760 -1716
  38. package/package.json +1 -1
  39. package/dist/samples-DHEKUNs5.cjs +0 -186
  40. package/dist/samples-SaXsqbHJ.js +0 -180
@@ -0,0 +1,1038 @@
1
+ import { In as e, Ln as t, Rn as n, i as r, it as i, m as a, n as o, r as s } from "./toThreeJS-BX_aeGdA.js";
2
+ import { ARTIFACTS_ROOT as c, buildArtifactRelPath as l, classifyFilePath as u, hasUnsafePathSegment as d, slugifyArtifact as f, toWorkspaceArtifactPath as p } from "@mulmoclaude/core/artifacts";
3
+ //#region src/core/definition.ts
4
+ var m = "presentShapeScript", h = {
5
+ type: "function",
6
+ name: m,
7
+ description: "Display interactive 3D visualizations using ShapeScript with expressions, variables, control flow, and functions. A new `script` is saved to `artifacts/shapes/` and the returned `filePath` names it; pass `path` instead to present a source that already exists.",
8
+ parameters: {
9
+ type: "object",
10
+ properties: {
11
+ title: {
12
+ type: "string",
13
+ description: "Title for the 3D visualization"
14
+ },
15
+ script: {
16
+ type: "string",
17
+ description: "ShapeScript code defining the 3D scene. Supported features and syntax are listed below. Syntax, evaluation, geometry and resource-limit errors are returned as diagnostics; correct the script and retry.\n\n## SYNTAX OVERVIEW:\n\n### Expressions & Operators:\n- Arithmetic: +, -, *, /, % with proper precedence\n- Comparison: =, <>, <, <=, >, >=\n- Boolean: and, or, not\n- Parentheses for grouping: (2 + 3) * 4\n\n### Variables:\ndefine radius 2\ndefine red (1 0 0)\nsphere { size radius color red }\n\n### Control Flow:\n\nFor loops with variables:\nfor i in 1 to 5 {\n cube { position (i * 2) 0 0 size 1 }\n}\n\nFor loops with step:\nfor i in 0 to 10 step 2 {\n sphere { position 0 i 0 }\n}\n\nIf/else conditionals:\ndefine showSphere 1\nif showSphere {\n sphere { size 2 }\n} else {\n cube { size 2 }\n}\n\nSwitch statements:\ndefine shape 2\nswitch shape {\ncase 1\n cube\ncase 2\n sphere\nelse\n cone\n}\n\n### Built-in Functions:\n\nMath: round, floor, ceil, abs, sign, sqrt, pow, min, max\nTrig: sin, cos, tan, asin, acos, atan, atan2 (uses radians)\nVector: dot, cross, length, normalize, sum\n\nIMPORTANT: Function calls require NO space between name and parenthesis:\n- sin(x) ✓ function call\n- sin (x) ✗ NOT a function call (identifier + parenthesized expression)\n\nExamples:\nfor i in 1 to 8 {\n define angle (i * 0.785) // 45 degrees in radians\n cube { position (cos(angle) * 3) 0 (sin(angle) * 3) }\n}\n\n### Primitives & Properties:\n\nShapes: cube, sphere, cylinder, cone, torus, circle, square, polygon (sides 3–256)\nProperties: position X Y Z, rotation X Y Z, size X Y Z\nMaterials: color R G B (0-1), opacity (0-1)\n\n### CSG Operations:\nunion, difference, intersection, xor, stencil\n\nExample:\ndifference {\n sphere { size 2 color (1 0.5 0) }\n cube { size 1.5 }\n}\n\n### Builders:\n- extrude: extrude { polygon { sides 3 } } or extrude path { point 0 0 point 1 0 point 0 1 }\n- fill: fill { square } or fill path { ... }\n- lathe: lathe path { point 1 0 curve 0 2 1 -1 } (revolves about Y)\n- loft: loft { square translate 0 0 2 circle } (closed planar sections joined with caps)\n- hull: hull { cube { position -1 0 0 } cube { position 1 0 0 } } (convex envelope)\n- stencil preserves the first shape and paints its surface with later shapes' materials.\nLoft sections must each have one perimeter and enclose an area; extrude/fill primitive profiles must lie in XY.\n\n### Additional Expressions:\n- Constants: pi, tau, true, false\n- Scientific notation and unary plus: 1e-3, +2\n- Tuple/vector members: vector.x, vector.y, vector.z; color.red/green/blue/alpha\n- Tuple/string length: value.count; zero-based indexing: values[0]\n- String literals, join(...), trim(...); min/max also accept tuples\n- Custom shapes with options:\ndefine post { option height 2 cylinder { size 0.2 height } }\npost { height 3 }\n\n### Compatibility:\nThis plugin implements the documented modeling subset, not all upstream ShapeScript syntax.\nFunction calls use name(...); trig functions and rotation/orientation properties use radians.\nRelative rotate/orientation commands and path rotate use turns (1 = 360 degrees).\nPath point/curve coordinates are relative steps. Curves accept optional control-point offsets.\nImports, textures, text/fonts, arbitrary objects, and general user-defined functions are not supported.\n\n### Comments:\n// Single-line comment\n/* Multi-line\n comment */\n\n## COMPLETE EXAMPLES:\n\nLinear arrangement with expressions:\ndefine spacing 1.5\nfor i in 1 to 4 {\n cylinder { position ((i - 2.5) * spacing) 0 0 size 0.4 1 }\n}\n\nCircular pattern:\ndefine count 12\nfor i in 1 to count {\n define angle ((i / count) * 6.283) // 2 * PI\n cube {\n position (cos(angle) * 3) 0 (sin(angle) * 3)\n color (i / count) 0.5 (1 - i / count)\n size 0.5\n }\n}\n\nConditional geometry:\ndefine makeHollow 1\nif makeHollow {\n difference {\n sphere { size 2 color (1 0 0) }\n sphere { size 1.7 }\n }\n} else {\n sphere { size 2 color (1 0 0) }\n}\n\nMathematical visualization:\nfor x in -5 to 5 {\n for z in -5 to 5 {\n define height (sin(x * 0.5) * cos(z * 0.5) * 2)\n cube {\n position (x * 0.3) height (z * 0.3)\n size 0.25 (abs(height) + 0.1) 0.25\n color (0.5 + height * 0.25) 0.3 (0.5 - height * 0.25)\n }\n }\n}"
18
+ },
19
+ path: {
20
+ type: "string",
21
+ description: "Path to an EXISTING ShapeScript source to present in place, instead of `script` — a `.shape` file this tool saved earlier (`artifacts/shapes/…`) or any other on disk. Provide either `script` or `path`, never both. Edits the user makes in the view write back to that same file."
22
+ }
23
+ },
24
+ required: ["title"]
25
+ }
26
+ }, g = "shapes", _ = "shape", v = [".shape"];
27
+ function y(e, t = _) {
28
+ return f(e, t);
29
+ }
30
+ function b() {
31
+ let e = globalThis.crypto;
32
+ if (e?.getRandomValues) {
33
+ let t = e.getRandomValues(/* @__PURE__ */ new Uint8Array(4));
34
+ return Array.from(t, (e) => e.toString(16).padStart(2, "0")).join("");
35
+ }
36
+ return Math.random().toString(16).slice(2, 10).padEnd(8, "0");
37
+ }
38
+ function x(e, t = /* @__PURE__ */ new Date(), n = b()) {
39
+ let r = l({
40
+ dir: g,
41
+ title: e,
42
+ ext: ".shape",
43
+ fallback: _,
44
+ now: t,
45
+ partitioned: !1,
46
+ suffix: n
47
+ });
48
+ return {
49
+ relPath: r,
50
+ filePath: p(r)
51
+ };
52
+ }
53
+ function S(e, t = /* @__PURE__ */ new Date(), n = b()) {
54
+ let r = l({
55
+ dir: g,
56
+ title: e,
57
+ ext: ".usdz",
58
+ fallback: _,
59
+ now: t,
60
+ partitioned: !1,
61
+ suffix: n
62
+ });
63
+ return {
64
+ relPath: r,
65
+ filePath: p(r)
66
+ };
67
+ }
68
+ function C(e) {
69
+ return !e.startsWith(`${c}/${g}/`) || !e.endsWith(".shape") ? !1 : !d(e);
70
+ }
71
+ function w(e) {
72
+ return e.startsWith(`${c}/`) ? e.slice(c.length + 1) : e;
73
+ }
74
+ function T(e) {
75
+ return u(e, v) !== null;
76
+ }
77
+ //#endregion
78
+ //#region src/core/dispatch.ts
79
+ function E(e, t) {
80
+ if (C(t)) return {
81
+ files: e.files.artifacts,
82
+ rel: w(t)
83
+ };
84
+ let n = e.files.byPath;
85
+ return n && T(t) ? {
86
+ files: n,
87
+ rel: t
88
+ } : null;
89
+ }
90
+ async function D(e, t) {
91
+ if (typeof t?.path != "string") throw Error("path must be an existing .shape file");
92
+ let n = E(e, t.path);
93
+ if (!n) throw Error("path must be an existing .shape file");
94
+ switch (t.kind) {
95
+ case "loadShape": return { script: await n.files.read(n.rel) };
96
+ case "saveShape":
97
+ if (typeof t.script != "string") throw Error("saveShape requires `script` as a string");
98
+ if (!await n.files.exists(n.rel)) throw Error(`No ShapeScript exists at ${t.path}`);
99
+ return await n.files.write(n.rel, t.script), { path: t.path };
100
+ default: throw Error(`shapescript plugin: unknown dispatch kind ${JSON.stringify(t)}`);
101
+ }
102
+ }
103
+ //#endregion
104
+ //#region src/core/plugin.ts
105
+ var O = "Acknowledge that the 3D visualization has been created and is displayed to the user. They can rotate, zoom, and pan the camera.", k = (e) => typeof e == "string" && e.trim() !== "";
106
+ function A(t) {
107
+ r(s(e(t)));
108
+ }
109
+ async function j(e, t) {
110
+ let n = e.files;
111
+ if (!n) throw Error("This host cannot open a ShapeScript by path — pass the source as `script` instead");
112
+ let r = E({ files: n }, t);
113
+ if (!r) throw Error("`path` must be a .shape file, without `.` / `..` segments");
114
+ if (!await r.files.exists(r.rel)) throw Error(`No ShapeScript exists at ${t}`);
115
+ return r.files.read(r.rel);
116
+ }
117
+ var M = 5;
118
+ async function N(e, t, n) {
119
+ let r = e.files?.artifacts;
120
+ if (r) {
121
+ for (let e = 0; e < M; e++) {
122
+ let { relPath: e, filePath: i } = x(n);
123
+ if (!await r.exists(e)) return await r.write(e, t), i;
124
+ }
125
+ throw Error("Could not allocate a free path under artifacts/shapes — try again with a different title");
126
+ }
127
+ }
128
+ async function P(e, t) {
129
+ if (k(t.path) && k(t.script)) throw Error("Provide either `script` or `path`, not both");
130
+ if (k(t.path)) return {
131
+ script: await j(e, t.path),
132
+ filePath: t.path
133
+ };
134
+ if (!k(t.script)) throw Error("ShapeScript code is required but was not provided");
135
+ return { script: t.script };
136
+ }
137
+ var F = async (e, r) => {
138
+ let i = "INVALID_ARGUMENT";
139
+ try {
140
+ if (!n(r)) throw Error("presentShapeScript args must be an object with `script` or `path`");
141
+ if (!k(r.title)) throw Error("A nonempty visualization title is required");
142
+ let t = await P(e ?? {}, r);
143
+ i = "EVALUATION_ERROR", A(t.script);
144
+ let a = t.filePath ?? await N(e ?? {}, t.script, r.title);
145
+ return {
146
+ message: a ? `Saved ShapeScript to ${a}` : `Created 3D visualization: ${r.title}`,
147
+ title: r.title,
148
+ data: a ? {
149
+ script: t.script,
150
+ filePath: a
151
+ } : { script: t.script },
152
+ instructions: O
153
+ };
154
+ } catch (e) {
155
+ let n = {
156
+ code: e instanceof t ? "PARSE_ERROR" : e instanceof o ? "LIMIT_EXCEEDED" : i,
157
+ message: e instanceof Error ? e.message : String(e),
158
+ ...e instanceof t && e.line !== void 0 ? { line: e.line } : {},
159
+ ...e instanceof t && e.column !== void 0 ? { column: e.column } : {}
160
+ };
161
+ return {
162
+ message: `ShapeScript error: ${n.message}`,
163
+ error: n,
164
+ jsonData: { error: n },
165
+ instructions: "The visualization was not created. Correct the ShapeScript using the returned diagnostic and call presentShapeScript again."
166
+ };
167
+ }
168
+ }, ee = {
169
+ toolDefinition: h,
170
+ execute: F,
171
+ generatingMessage: "Creating 3D visualization...",
172
+ waitingMessage: "Tell the user that the 3D visualization was created and will be presented shortly.",
173
+ isEnabled: () => !0
174
+ }, I = F, L = Uint8Array, R = Uint16Array, z = Int32Array, te = new L([
175
+ 0,
176
+ 0,
177
+ 0,
178
+ 0,
179
+ 0,
180
+ 0,
181
+ 0,
182
+ 0,
183
+ 1,
184
+ 1,
185
+ 1,
186
+ 1,
187
+ 2,
188
+ 2,
189
+ 2,
190
+ 2,
191
+ 3,
192
+ 3,
193
+ 3,
194
+ 3,
195
+ 4,
196
+ 4,
197
+ 4,
198
+ 4,
199
+ 5,
200
+ 5,
201
+ 5,
202
+ 5,
203
+ 0,
204
+ 0,
205
+ 0,
206
+ 0
207
+ ]), ne = new L([
208
+ 0,
209
+ 0,
210
+ 0,
211
+ 0,
212
+ 1,
213
+ 1,
214
+ 2,
215
+ 2,
216
+ 3,
217
+ 3,
218
+ 4,
219
+ 4,
220
+ 5,
221
+ 5,
222
+ 6,
223
+ 6,
224
+ 7,
225
+ 7,
226
+ 8,
227
+ 8,
228
+ 9,
229
+ 9,
230
+ 10,
231
+ 10,
232
+ 11,
233
+ 11,
234
+ 12,
235
+ 12,
236
+ 13,
237
+ 13,
238
+ 0,
239
+ 0
240
+ ]), re = new L([
241
+ 16,
242
+ 17,
243
+ 18,
244
+ 0,
245
+ 8,
246
+ 7,
247
+ 9,
248
+ 6,
249
+ 10,
250
+ 5,
251
+ 11,
252
+ 4,
253
+ 12,
254
+ 3,
255
+ 13,
256
+ 2,
257
+ 14,
258
+ 1,
259
+ 15
260
+ ]), B = function(e, t) {
261
+ for (var n = new R(31), r = 0; r < 31; ++r) n[r] = t += 1 << e[r - 1];
262
+ for (var i = new z(n[30]), r = 1; r < 30; ++r) for (var a = n[r]; a < n[r + 1]; ++a) i[a] = a - n[r] << 5 | r;
263
+ return {
264
+ b: n,
265
+ r: i
266
+ };
267
+ }, V = B(te, 2), H = V.b, ie = V.r;
268
+ H[28] = 258, ie[258] = 28;
269
+ var ae = B(ne, 0);
270
+ ae.b;
271
+ for (var oe = ae.r, U = new R(32768), W = 0; W < 32768; ++W) {
272
+ var G = (W & 43690) >> 1 | (W & 21845) << 1;
273
+ G = (G & 52428) >> 2 | (G & 13107) << 2, G = (G & 61680) >> 4 | (G & 3855) << 4, U[W] = ((G & 65280) >> 8 | (G & 255) << 8) >> 1;
274
+ }
275
+ for (var K = (function(e, t, n) {
276
+ for (var r = e.length, i = 0, a = new R(t); i < r; ++i) e[i] && ++a[e[i] - 1];
277
+ var o = new R(t);
278
+ for (i = 1; i < t; ++i) o[i] = o[i - 1] + a[i - 1] << 1;
279
+ var s;
280
+ if (n) {
281
+ s = new R(1 << t);
282
+ var c = 15 - t;
283
+ for (i = 0; i < r; ++i) if (e[i]) for (var l = i << 4 | e[i], u = t - e[i], d = o[e[i] - 1]++ << u, f = d | (1 << u) - 1; d <= f; ++d) s[U[d] >> c] = l;
284
+ } else for (s = new R(r), i = 0; i < r; ++i) e[i] && (s[i] = U[o[e[i] - 1]++] >> 15 - e[i]);
285
+ return s;
286
+ }), q = new L(288), W = 0; W < 144; ++W) q[W] = 8;
287
+ for (var W = 144; W < 256; ++W) q[W] = 9;
288
+ for (var W = 256; W < 280; ++W) q[W] = 7;
289
+ for (var W = 280; W < 288; ++W) q[W] = 8;
290
+ for (var J = new L(32), W = 0; W < 32; ++W) J[W] = 5;
291
+ var se = /*#__PURE__*/ K(q, 9, 0), ce = /*#__PURE__*/ K(J, 5, 0), le = function(e) {
292
+ return (e + 7) / 8 | 0;
293
+ }, ue = function(e, t, n) {
294
+ return (t == null || t < 0) && (t = 0), (n == null || n > e.length) && (n = e.length), new L(e.subarray(t, n));
295
+ }, de = [
296
+ "unexpected EOF",
297
+ "invalid block type",
298
+ "invalid length/literal",
299
+ "invalid distance",
300
+ "stream finished",
301
+ "no stream handler",
302
+ ,
303
+ "no callback",
304
+ "invalid UTF-8 data",
305
+ "extra field too long",
306
+ "date not in range 1980-2099",
307
+ "filename too long",
308
+ "stream finishing",
309
+ "invalid zip data"
310
+ ], fe = function(e, t, n) {
311
+ var r = Error(t || de[e]);
312
+ if (r.code = e, Error.captureStackTrace && Error.captureStackTrace(r, fe), !n) throw r;
313
+ return r;
314
+ }, Y = function(e, t, n) {
315
+ n <<= t & 7;
316
+ var r = t / 8 | 0;
317
+ e[r] |= n, e[r + 1] |= n >> 8;
318
+ }, X = function(e, t, n) {
319
+ n <<= t & 7;
320
+ var r = t / 8 | 0;
321
+ e[r] |= n, e[r + 1] |= n >> 8, e[r + 2] |= n >> 16;
322
+ }, pe = function(e, t) {
323
+ for (var n = [], r = 0; r < e.length; ++r) e[r] && n.push({
324
+ s: r,
325
+ f: e[r]
326
+ });
327
+ var i = n.length, a = n.slice();
328
+ if (!i) return {
329
+ t: be,
330
+ l: 0
331
+ };
332
+ if (i == 1) {
333
+ var o = new L(n[0].s + 1);
334
+ return o[n[0].s] = 1, {
335
+ t: o,
336
+ l: 1
337
+ };
338
+ }
339
+ n.sort(function(e, t) {
340
+ return e.f - t.f;
341
+ }), n.push({
342
+ s: -1,
343
+ f: 25001
344
+ });
345
+ var s = n[0], c = n[1], l = 0, u = 1, d = 2;
346
+ for (n[0] = {
347
+ s: -1,
348
+ f: s.f + c.f,
349
+ l: s,
350
+ r: c
351
+ }; u != i - 1;) s = n[n[l].f < n[d].f ? l++ : d++], c = n[l != u && n[l].f < n[d].f ? l++ : d++], n[u++] = {
352
+ s: -1,
353
+ f: s.f + c.f,
354
+ l: s,
355
+ r: c
356
+ };
357
+ for (var f = a[0].s, r = 1; r < i; ++r) a[r].s > f && (f = a[r].s);
358
+ var p = new R(f + 1), m = me(n[u - 1], p, 0);
359
+ if (m > t) {
360
+ var r = 0, h = 0, g = m - t, _ = 1 << g;
361
+ for (a.sort(function(e, t) {
362
+ return p[t.s] - p[e.s] || e.f - t.f;
363
+ }); r < i; ++r) {
364
+ var v = a[r].s;
365
+ if (p[v] > t) h += _ - (1 << m - p[v]), p[v] = t;
366
+ else break;
367
+ }
368
+ for (h >>= g; h > 0;) {
369
+ var y = a[r].s;
370
+ p[y] < t ? h -= 1 << t - p[y]++ - 1 : ++r;
371
+ }
372
+ for (; r >= 0 && h; --r) {
373
+ var b = a[r].s;
374
+ p[b] == t && (--p[b], ++h);
375
+ }
376
+ m = t;
377
+ }
378
+ return {
379
+ t: new L(p),
380
+ l: m
381
+ };
382
+ }, me = function(e, t, n) {
383
+ return e.s == -1 ? Math.max(me(e.l, t, n + 1), me(e.r, t, n + 1)) : t[e.s] = n;
384
+ }, he = function(e) {
385
+ for (var t = e.length; t && !e[--t];);
386
+ for (var n = new R(++t), r = 0, i = e[0], a = 1, o = function(e) {
387
+ n[r++] = e;
388
+ }, s = 1; s <= t; ++s) if (e[s] == i && s != t) ++a;
389
+ else {
390
+ if (!i && a > 2) {
391
+ for (; a > 138; a -= 138) o(32754);
392
+ a > 2 && (o(a > 10 ? a - 11 << 5 | 28690 : a - 3 << 5 | 12305), a = 0);
393
+ } else if (a > 3) {
394
+ for (o(i), --a; a > 6; a -= 6) o(8304);
395
+ a > 2 && (o(a - 3 << 5 | 8208), a = 0);
396
+ }
397
+ for (; a--;) o(i);
398
+ a = 1, i = e[s];
399
+ }
400
+ return {
401
+ c: n.subarray(0, r),
402
+ n: t
403
+ };
404
+ }, ge = function(e, t) {
405
+ for (var n = 0, r = 0; r < t.length; ++r) n += e[r] * t[r];
406
+ return n;
407
+ }, _e = function(e, t, n) {
408
+ var r = n.length, i = le(t + 2);
409
+ e[i] = r & 255, e[i + 1] = r >> 8, e[i + 2] = e[i] ^ 255, e[i + 3] = e[i + 1] ^ 255;
410
+ for (var a = 0; a < r; ++a) e[i + a + 4] = n[a];
411
+ return (i + 4 + r) * 8;
412
+ }, ve = function(e, t, n, r, i, a, o, s, c, l, u) {
413
+ Y(t, u++, n), ++i[256];
414
+ for (var d = pe(i, 15), f = d.t, p = d.l, m = pe(a, 15), h = m.t, g = m.l, _ = he(f), v = _.c, y = _.n, b = he(h), x = b.c, S = b.n, C = new R(19), w = 0; w < v.length; ++w) ++C[v[w] & 31];
415
+ for (var w = 0; w < x.length; ++w) ++C[x[w] & 31];
416
+ for (var T = pe(C, 7), E = T.t, D = T.l, O = 19; O > 4 && !E[re[O - 1]]; --O);
417
+ var k = l + 5 << 3, A = ge(i, q) + ge(a, J) + o, j = ge(i, f) + ge(a, h) + o + 14 + 3 * O + ge(C, E) + 2 * C[16] + 3 * C[17] + 7 * C[18];
418
+ if (c >= 0 && k <= A && k <= j) return _e(t, u, e.subarray(c, c + l));
419
+ var M, N, P, F;
420
+ if (Y(t, u, 1 + (j < A)), u += 2, j < A) {
421
+ M = K(f, p, 0), N = f, P = K(h, g, 0), F = h;
422
+ var ee = K(E, D, 0);
423
+ Y(t, u, y - 257), Y(t, u + 5, S - 1), Y(t, u + 10, O - 4), u += 14;
424
+ for (var w = 0; w < O; ++w) Y(t, u + 3 * w, E[re[w]]);
425
+ u += 3 * O;
426
+ for (var I = [v, x], L = 0; L < 2; ++L) for (var z = I[L], w = 0; w < z.length; ++w) {
427
+ var B = z[w] & 31;
428
+ Y(t, u, ee[B]), u += E[B], B > 15 && (Y(t, u, z[w] >> 5 & 127), u += z[w] >> 12);
429
+ }
430
+ } else M = se, N = q, P = ce, F = J;
431
+ for (var w = 0; w < s; ++w) {
432
+ var V = r[w];
433
+ if (V > 255) {
434
+ var B = V >> 18 & 31;
435
+ X(t, u, M[B + 257]), u += N[B + 257], B > 7 && (Y(t, u, V >> 23 & 31), u += te[B]);
436
+ var H = V & 31;
437
+ X(t, u, P[H]), u += F[H], H > 3 && (X(t, u, V >> 5 & 8191), u += ne[H]);
438
+ } else X(t, u, M[V]), u += N[V];
439
+ }
440
+ return X(t, u, M[256]), u + N[256];
441
+ }, ye = /*#__PURE__*/ new z([
442
+ 65540,
443
+ 131080,
444
+ 131088,
445
+ 131104,
446
+ 262176,
447
+ 1048704,
448
+ 1048832,
449
+ 2114560,
450
+ 2117632
451
+ ]), be = /*#__PURE__*/ new L(0), xe = function(e, t, n, r, i, a) {
452
+ var o = a.z || e.length, s = new L(r + o + 5 * (1 + Math.ceil(o / 7e3)) + i), c = s.subarray(r, s.length - i), l = a.l, u = (a.r || 0) & 7;
453
+ if (t) {
454
+ u && (c[0] = a.r >> 3);
455
+ for (var d = ye[t - 1], f = d >> 13, p = d & 8191, m = (1 << n) - 1, h = a.p || new R(32768), g = a.h || new R(m + 1), _ = Math.ceil(n / 3), v = 2 * _, y = function(t) {
456
+ return (e[t] ^ e[t + 1] << _ ^ e[t + 2] << v) & m;
457
+ }, b = new z(25e3), x = new R(288), S = new R(32), C = 0, w = 0, T = a.i || 0, E = 0, D = a.w || 0, O = 0; T + 2 < o; ++T) {
458
+ var k = y(T), A = T & 32767, j = g[k];
459
+ if (h[A] = j, g[k] = A, D <= T) {
460
+ var M = o - T;
461
+ if ((C > 7e3 || E > 24576) && (M > 423 || !l)) {
462
+ u = ve(e, c, 0, b, x, S, w, E, O, T - O, u), E = C = w = 0, O = T;
463
+ for (var N = 0; N < 286; ++N) x[N] = 0;
464
+ for (var N = 0; N < 30; ++N) S[N] = 0;
465
+ }
466
+ var P = 2, F = 0, ee = p, I = A - j & 32767;
467
+ if (M > 2 && k == y(T - I)) for (var re = Math.min(f, M) - 1, B = Math.min(32767, T), V = Math.min(258, M); I <= B && --ee && A != j;) {
468
+ if (e[T + P] == e[T + P - I]) {
469
+ for (var H = 0; H < V && e[T + H] == e[T + H - I]; ++H);
470
+ if (H > P) {
471
+ if (P = H, F = I, H > re) break;
472
+ for (var ae = Math.min(I, H - 2), U = 0, N = 0; N < ae; ++N) {
473
+ var W = T - I + N & 32767, G = W - h[W] & 32767;
474
+ G > U && (U = G, j = W);
475
+ }
476
+ }
477
+ }
478
+ A = j, j = h[A], I += A - j & 32767;
479
+ }
480
+ if (F) {
481
+ b[E++] = 268435456 | ie[P] << 18 | oe[F];
482
+ var K = ie[P] & 31, q = oe[F] & 31;
483
+ w += te[K] + ne[q], ++x[257 + K], ++S[q], D = T + P, ++C;
484
+ } else b[E++] = e[T], ++x[e[T]];
485
+ }
486
+ }
487
+ for (T = Math.max(T, D); T < o; ++T) b[E++] = e[T], ++x[e[T]];
488
+ u = ve(e, c, l, b, x, S, w, E, O, T - O, u), l || (a.r = u & 7 | c[u / 8 | 0] << 3, u -= 7, a.h = g, a.p = h, a.i = T, a.w = D);
489
+ } else {
490
+ for (var T = a.w || 0; T < o + l; T += 65535) {
491
+ var J = T + 65535;
492
+ J >= o && (c[u / 8 | 0] = l, J = o), u = _e(c, u + 1, e.subarray(T, J));
493
+ }
494
+ a.i = o;
495
+ }
496
+ return ue(s, 0, r + le(u) + i);
497
+ }, Se = /*#__PURE__*/ (function() {
498
+ for (var e = /* @__PURE__ */ new Int32Array(256), t = 0; t < 256; ++t) {
499
+ for (var n = t, r = 9; --r;) n = (n & 1 && -306674912) ^ n >>> 1;
500
+ e[t] = n;
501
+ }
502
+ return e;
503
+ })(), Ce = function() {
504
+ var e = -1;
505
+ return {
506
+ p: function(t) {
507
+ for (var n = e, r = 0; r < t.length; ++r) n = Se[n & 255 ^ t[r]] ^ n >>> 8;
508
+ e = n;
509
+ },
510
+ d: function() {
511
+ return ~e;
512
+ }
513
+ };
514
+ }, we = function(e, t, n, r, i) {
515
+ if (!i && (i = { l: 1 }, t.dictionary)) {
516
+ var a = t.dictionary.subarray(-32768), o = new L(a.length + e.length);
517
+ o.set(a), o.set(e, a.length), e = o, i.w = a.length;
518
+ }
519
+ return xe(e, t.level == null ? 6 : t.level, t.mem == null ? i.l ? Math.ceil(Math.max(8, Math.min(13, Math.log(e.length))) * 1.5) : 20 : 12 + t.mem, n, r, i);
520
+ }, Te = function(e, t) {
521
+ var n = {};
522
+ for (var r in e) n[r] = e[r];
523
+ for (var r in t) n[r] = t[r];
524
+ return n;
525
+ }, Z = function(e, t, n) {
526
+ for (; n; ++t) e[t] = n, n >>>= 8;
527
+ };
528
+ function Ee(e, t) {
529
+ return we(e, t || {}, 0, 0);
530
+ }
531
+ var De = function(e, t, n, r) {
532
+ for (var i in e) {
533
+ var a = e[i], o = t + i, s = r;
534
+ Array.isArray(a) && (s = Te(r, a[1]), a = a[0]), a instanceof L ? n[o] = [a, s] : (n[o += "/"] = [new L(0), s], De(a, o, n, r));
535
+ }
536
+ }, Oe = typeof TextEncoder < "u" && /*#__PURE__*/ new TextEncoder(), ke = typeof TextDecoder < "u" && /*#__PURE__*/ new TextDecoder();
537
+ try {
538
+ ke.decode(be, { stream: !0 });
539
+ } catch {}
540
+ function Ae(e, t) {
541
+ if (t) {
542
+ for (var n = new L(e.length), r = 0; r < e.length; ++r) n[r] = e.charCodeAt(r);
543
+ return n;
544
+ }
545
+ if (Oe) return Oe.encode(e);
546
+ for (var i = e.length, a = new L(e.length + (e.length >> 1)), o = 0, s = function(e) {
547
+ a[o++] = e;
548
+ }, r = 0; r < i; ++r) {
549
+ if (o + 5 > a.length) {
550
+ var c = new L(o + 8 + (i - r << 1));
551
+ c.set(a), a = c;
552
+ }
553
+ var l = e.charCodeAt(r);
554
+ l < 128 || t ? s(l) : l < 2048 ? (s(192 | l >> 6), s(128 | l & 63)) : l > 55295 && l < 57344 ? (l = 65536 + (l & 1047552) | e.charCodeAt(++r) & 1023, s(240 | l >> 18), s(128 | l >> 12 & 63), s(128 | l >> 6 & 63), s(128 | l & 63)) : (s(224 | l >> 12), s(128 | l >> 6 & 63), s(128 | l & 63));
555
+ }
556
+ return ue(a, 0, o);
557
+ }
558
+ var je = function(e) {
559
+ var t = 0;
560
+ if (e) for (var n in e) {
561
+ var r = e[n].length;
562
+ r > 65535 && fe(9), t += r + 4;
563
+ }
564
+ return t;
565
+ }, Me = function(e, t, n, r, i, a, o, s) {
566
+ var c = r.length, l = n.extra, u = s && s.length, d = je(l);
567
+ Z(e, t, o == null ? 67324752 : 33639248), t += 4, o != null && (e[t++] = 20, e[t++] = n.os), e[t] = 20, t += 2, e[t++] = n.flag << 1 | (a < 0 && 8), e[t++] = i && 8, e[t++] = n.compression & 255, e[t++] = n.compression >> 8;
568
+ var f = new Date(n.mtime == null ? Date.now() : n.mtime), p = f.getFullYear() - 1980;
569
+ if ((p < 0 || p > 119) && fe(10), Z(e, t, p << 25 | f.getMonth() + 1 << 21 | f.getDate() << 16 | f.getHours() << 11 | f.getMinutes() << 5 | f.getSeconds() >> 1), t += 4, a != -1 && (Z(e, t, n.crc), Z(e, t + 4, a < 0 ? -a - 2 : a), Z(e, t + 8, n.size)), Z(e, t + 12, c), Z(e, t + 14, d), t += 16, o != null && (Z(e, t, u), Z(e, t + 6, n.attrs), Z(e, t + 10, o), t += 14), e.set(r, t), t += c, d) for (var m in l) {
570
+ var h = l[m], g = h.length;
571
+ Z(e, t, +m), Z(e, t + 2, g), e.set(h, t + 4), t += 4 + g;
572
+ }
573
+ return u && (e.set(s, t), t += u), t;
574
+ }, Ne = function(e, t, n, r, i) {
575
+ Z(e, t, 101010256), Z(e, t + 8, n), Z(e, t + 10, n), Z(e, t + 12, r), Z(e, t + 16, i);
576
+ };
577
+ function Pe(e, t) {
578
+ t ||= {};
579
+ var n = {}, r = [];
580
+ De(e, "", n, t);
581
+ var i = 0, a = 0;
582
+ for (var o in n) {
583
+ var s = n[o], c = s[0], l = s[1], u = l.level == 0 ? 0 : 8, d = Ae(o), f = d.length, p = l.comment, m = p && Ae(p), h = m && m.length, g = je(l.extra);
584
+ f > 65535 && fe(11);
585
+ var _ = u ? Ee(c, l) : c, v = _.length, y = Ce();
586
+ y.p(c), r.push(Te(l, {
587
+ size: c.length,
588
+ crc: y.d(),
589
+ c: _,
590
+ f: d,
591
+ m,
592
+ u: f != o.length || m && p.length != h,
593
+ o: i,
594
+ compression: u
595
+ })), i += 30 + f + g + v, a += 76 + 2 * (f + g) + (h || 0) + v;
596
+ }
597
+ for (var b = new L(a + 22), x = i, S = a - i, C = 0; C < r.length; ++C) {
598
+ var d = r[C];
599
+ Me(b, d.o, d, d.f, d.u, d.c.length);
600
+ var w = 30 + d.f.length + je(d.extra);
601
+ b.set(d.c, d.o + w), Me(b, i, d, d.f, d.u, d.c.length, d.o, d.m), i += 16 + w + (d.m ? d.m.length : 0);
602
+ }
603
+ return Ne(b, i, r.length, S, x), b;
604
+ }
605
+ //#endregion
606
+ //#region ../../../node_modules/three/examples/jsm/exporters/USDZExporter.js
607
+ var Q = class {
608
+ constructor(e, t = "", n = [], r = []) {
609
+ this.name = e, this.type = t, this.metadata = n, this.properties = r, this.children = [];
610
+ }
611
+ addMetadata(e, t) {
612
+ this.metadata.push({
613
+ key: e,
614
+ value: t
615
+ });
616
+ }
617
+ addProperty(e, t = []) {
618
+ this.properties.push({
619
+ property: e,
620
+ metadata: t
621
+ });
622
+ }
623
+ addChild(e) {
624
+ this.children.push(e);
625
+ }
626
+ toString(e = 0) {
627
+ let t = " ".repeat(e), n = this.metadata.map((e) => {
628
+ let n = e.key, r = e.value;
629
+ if (Array.isArray(r)) {
630
+ let e = [];
631
+ return e.push(`${n} = {`), r.forEach((n) => {
632
+ e.push(`${t}\t\t${n}`);
633
+ }), e.push(`${t}\t}`), e.join("\n");
634
+ }
635
+ return `${n} = ${r}`;
636
+ }), r = n.length ? ` (\n${n.map((e) => `${t}\t${e}`).join("\n")}\n${t})` : "", i = this.properties.map((e) => {
637
+ let n = e.property.replace(/\n/g, "\n" + t + " "), r = e.metadata.length ? ` (\n${e.metadata.map((e) => `${t}\t\t${e}`).join("\n")}\n${t}\t)` : "";
638
+ return `${t}\t${n}${r}`;
639
+ }), a = this.children.map((t) => t.toString(e + 1)), o = [];
640
+ if (i.length > 0 && o.push(...i), a.length > 0) {
641
+ i.length > 0 && o.push("");
642
+ for (let e = 0; e < a.length; e++) o.push(a[e]), e < a.length - 1 && o.push("");
643
+ }
644
+ let s = o.join("\n");
645
+ return `${t}def ${this.type ? this.type + " " : ""}"${this.name}"${r}\n${t}{\n${s}\n${t}}`;
646
+ }
647
+ }, Fe = class {
648
+ constructor() {
649
+ this.textureUtils = null;
650
+ }
651
+ setTextureUtils(e) {
652
+ this.textureUtils = e;
653
+ }
654
+ parse(e, t, n, r) {
655
+ this.parseAsync(e, r).then(t).catch(n);
656
+ }
657
+ async parseAsync(e, t = {}) {
658
+ t = Object.assign({
659
+ ar: {
660
+ anchoring: { type: "plane" },
661
+ planeAnchoring: { alignment: "horizontal" }
662
+ },
663
+ includeAnchoringProperties: !0,
664
+ onlyVisible: !0,
665
+ quickLookCompatible: !1,
666
+ maxTextureSize: 1024,
667
+ animations: [],
668
+ animationFrameRate: 60
669
+ }, t);
670
+ let n = /* @__PURE__ */ new Set(), r = {}, i = "model.usda";
671
+ r[i] = null;
672
+ let a = Be(e, t.animations);
673
+ t.animationTracks = a;
674
+ let o = new Q("Root", "Xform"), s = new Q("Scenes", "Scope");
675
+ s.addMetadata("kind", "\"sceneLibrary\""), o.addChild(s);
676
+ let c = "Scene", l = new Q(c, "Xform");
677
+ l.addMetadata("customData", ["bool preliminary_collidesWithEnvironment = 0", `string sceneName = "${c}"`]), l.addMetadata("sceneName", `"${c}"`), t.includeAnchoringProperties && (l.addProperty(`token preliminary:anchoring:type = "${t.ar.anchoring.type}"`), l.addProperty(`token preliminary:planeAnchoring:alignment = "${t.ar.planeAnchoring.alignment}"`)), s.addChild(l);
678
+ let u, d = {}, f = {};
679
+ e.isScene ? We(e, l, d, n, r, t) : Ge(e, l, d, n, r, t);
680
+ let p = rt(d, f, t.quickLookCompatible);
681
+ u = ze(a.size > 0 ? {
682
+ fps: t.animationFrameRate,
683
+ endTimeCode: Ve(t.animations) * t.animationFrameRate
684
+ } : null) + "\n" + o.toString() + "\n\n" + p.toString(), r[i] = Ae(u), u = null;
685
+ for (let e in f) {
686
+ let n = f[e];
687
+ if (n.isCompressedTexture === !0) {
688
+ if (this.textureUtils === null) throw Error("THREE.USDZExporter: setTextureUtils() must be called to process compressed textures.");
689
+ n = await this.textureUtils.decompress(n);
690
+ }
691
+ let i = Re(n.image, n.flipY, t.maxTextureSize), a = n.userData.mimeType === "image/jpeg" ? "image/jpeg" : "image/png", o = await new Promise((e) => i.toBlob(e, a));
692
+ r[`textures/Texture_${e}.${Le(n)}`] = new Uint8Array(await o.arrayBuffer());
693
+ }
694
+ let m = 0;
695
+ for (let e in r) {
696
+ let t = r[e], n = 34 + e.length;
697
+ m += n;
698
+ let i = m & 63;
699
+ if (i !== 4) {
700
+ let n = 64 - i;
701
+ r[e] = [t, { extra: { 12345: new Uint8Array(n) } }];
702
+ }
703
+ m = t.length;
704
+ }
705
+ return Pe(r, { level: 0 });
706
+ }
707
+ };
708
+ function Ie(e, t) {
709
+ let n = e.name;
710
+ return n = n.replace(/[^A-Za-z0-9_]/g, ""), /^[0-9]/.test(n) && (n = "_" + n), n === "" && (n = e.isCamera ? "Camera" : "Object"), t.has(n) && (n = n + "_" + e.id), t.add(n), n;
711
+ }
712
+ function Le(e) {
713
+ return e.userData.mimeType === "image/jpeg" ? "jpg" : "png";
714
+ }
715
+ function Re(e, t, n) {
716
+ if (typeof HTMLImageElement < "u" && e instanceof HTMLImageElement || typeof HTMLCanvasElement < "u" && e instanceof HTMLCanvasElement || typeof OffscreenCanvas < "u" && e instanceof OffscreenCanvas || typeof ImageBitmap < "u" && e instanceof ImageBitmap) {
717
+ let r = n / Math.max(e.width, e.height), i = document.createElement("canvas");
718
+ i.width = e.width * Math.min(1, r), i.height = e.height * Math.min(1, r);
719
+ let a = i.getContext("2d");
720
+ return t === !0 && (a.translate(0, i.height), a.scale(1, -1)), a.drawImage(e, 0, 0, i.width, i.height), i;
721
+ }
722
+ throw Error("THREE.USDZExporter: No valid image data found. Unable to process texture.");
723
+ }
724
+ var $ = 7;
725
+ function ze(e = null) {
726
+ return `#usda 1.0
727
+ (
728
+ customLayerData = {
729
+ string creator = "Three.js USDZExporter"
730
+ }
731
+ defaultPrim = "Root"
732
+ metersPerUnit = 1
733
+ upAxis = "Y"${e ? `
734
+ startTimeCode = 0
735
+ endTimeCode = ${e.endTimeCode}
736
+ timeCodesPerSecond = ${e.fps}
737
+ framesPerSecond = ${e.fps}` : ""}
738
+ )
739
+ `;
740
+ }
741
+ function Be(e, t) {
742
+ let n = /* @__PURE__ */ new Map();
743
+ for (let r = 0; r < t.length; r++) {
744
+ let a = t[r];
745
+ for (let t = 0; t < a.tracks.length; t++) {
746
+ let r = a.tracks[t], o = i.parseTrackName(r.name), s = i.findNode(e, o.nodeName);
747
+ if (s == null) continue;
748
+ let c = o.propertyName;
749
+ if (c !== "position" && c !== "quaternion" && c !== "scale") continue;
750
+ let l = n.get(s);
751
+ l === void 0 && (l = {}, n.set(s, l)), l[c] = r;
752
+ }
753
+ }
754
+ return n;
755
+ }
756
+ function Ve(e) {
757
+ let t = 0;
758
+ for (let n = 0; n < e.length; n++) e[n].duration > t && (t = e[n].duration);
759
+ return t;
760
+ }
761
+ function He(e, t, n, r) {
762
+ let i = n.times, a = n.values, o = [];
763
+ for (let e = 0; e < i.length; e++) {
764
+ let t = e * 3;
765
+ o.push(`${(i[e] * r).toPrecision($)}: (${a[t].toPrecision($)}, ${a[t + 1].toPrecision($)}, ${a[t + 2].toPrecision($)})`);
766
+ }
767
+ return `${t} ${e}.timeSamples = {\n\t${o.join(",\n ")},\n}`;
768
+ }
769
+ function Ue(e, t) {
770
+ let n = e.times, r = e.values, i = [];
771
+ for (let e = 0; e < n.length; e++) {
772
+ let a = e * 4;
773
+ i.push(`${(n[e] * t).toPrecision($)}: (${r[a + 3].toPrecision($)}, ${r[a].toPrecision($)}, ${r[a + 1].toPrecision($)}, ${r[a + 2].toPrecision($)})`);
774
+ }
775
+ return `quatf xformOp:orient.timeSamples = {\n\t${i.join(",\n ")},\n}`;
776
+ }
777
+ function We(e, t, n, r, i, a) {
778
+ for (let o = 0, s = e.children.length; o < s; o++) Ge(e.children[o], t, n, r, i, a);
779
+ }
780
+ function Ge(e, t, n, r, i, a) {
781
+ if (e.visible === !1 && a.onlyVisible === !0) return;
782
+ let o;
783
+ if (e.isMesh) {
784
+ let t = e.geometry, s = Array.isArray(e.material), c = s ? e.material : [e.material];
785
+ for (let e = 0; e < c.length; e++) {
786
+ let t = c[e];
787
+ t.isMeshStandardMaterial || console.warn("THREE.USDZExporter: Use MeshStandardMaterial for best results."), t.uuid in n || (n[t.uuid] = t);
788
+ }
789
+ let l = c.map((e) => n[e.uuid]);
790
+ if (s === !1) {
791
+ let e = `geometries/Geometry_${t.id}.usda`;
792
+ if (!(e in i)) {
793
+ let n = Ze(t);
794
+ i[e] = Ae(ze() + "\n" + n.toString());
795
+ }
796
+ }
797
+ o = Je(e, t, l, r, a);
798
+ } else o = e.isCamera ? ct(e, r, a) : qe(e, r, a);
799
+ t.addChild(o), We(e, o, n, r, i, a);
800
+ }
801
+ function Ke(e, t, n) {
802
+ let r = n.animationTracks.get(t), i = t.pivot !== null;
803
+ if (!i && r === void 0) {
804
+ let n = Ye(t.matrix);
805
+ e.addProperty(`matrix4d xformOp:transform = ${n}`), e.addProperty("uniform token[] xformOpOrder = [\"xformOp:transform\"]");
806
+ return;
807
+ }
808
+ let a = n.animationFrameRate, o = t.position, s = t.quaternion, c = t.scale;
809
+ if (r !== void 0 && r.position !== void 0 ? e.addProperty(He("xformOp:translate", "float3", r.position, a)) : e.addProperty(`float3 xformOp:translate = (${o.x.toPrecision($)}, ${o.y.toPrecision($)}, ${o.z.toPrecision($)})`), i) {
810
+ let n = t.pivot;
811
+ e.addProperty(`float3 xformOp:translate:pivot = (${n.x.toPrecision($)}, ${n.y.toPrecision($)}, ${n.z.toPrecision($)})`);
812
+ }
813
+ r !== void 0 && r.quaternion !== void 0 ? e.addProperty(Ue(r.quaternion, a)) : e.addProperty(`quatf xformOp:orient = (${s.w.toPrecision($)}, ${s.x.toPrecision($)}, ${s.y.toPrecision($)}, ${s.z.toPrecision($)})`), r !== void 0 && r.scale !== void 0 ? e.addProperty(He("xformOp:scale", "float3", r.scale, a)) : e.addProperty(`float3 xformOp:scale = (${c.x.toPrecision($)}, ${c.y.toPrecision($)}, ${c.z.toPrecision($)})`), i ? e.addProperty("uniform token[] xformOpOrder = [\"xformOp:translate\", \"xformOp:translate:pivot\", \"xformOp:orient\", \"xformOp:scale\", \"!invert!xformOp:translate:pivot\"]") : e.addProperty("uniform token[] xformOpOrder = [\"xformOp:translate\", \"xformOp:orient\", \"xformOp:scale\"]");
814
+ }
815
+ function qe(e, t, n) {
816
+ let r = Ie(e, t);
817
+ e.matrix.determinant() < 0 && console.warn("THREE.USDZExporter: USDZ does not support negative scales", e);
818
+ let i = new Q(r, "Xform");
819
+ return Ke(i, e, n), i;
820
+ }
821
+ function Je(e, t, n, r, i) {
822
+ let a = qe(e, r, i);
823
+ return n.length === 1 ? (a.addMetadata("prepend references", `@./geometries/Geometry_${t.id}.usda@</Geometry>`), a.addMetadata("prepend apiSchemas", "[\"MaterialBindingAPI\"]"), a.addProperty(`rel material:binding = </Materials/Material_${n[0].id}>`)) : a.addChild(Qe(t, n)), a;
824
+ }
825
+ function Ye(e) {
826
+ let t = e.elements;
827
+ return `( ${Xe(t, 0)}, ${Xe(t, 4)}, ${Xe(t, 8)}, ${Xe(t, 12)} )`;
828
+ }
829
+ function Xe(e, t) {
830
+ return `(${e[t + 0]}, ${e[t + 1]}, ${e[t + 2]}, ${e[t + 3]})`;
831
+ }
832
+ function Ze(e) {
833
+ let t = new Q("Geometry"), n = Qe(e);
834
+ return t.addChild(n), t;
835
+ }
836
+ function Qe(e, t = null) {
837
+ let n = e.attributes, r = n.position.count, i = new Q("Geometry", "Mesh");
838
+ i.addProperty(`int[] faceVertexCounts = [${$e(e)}]`), i.addProperty(`int[] faceVertexIndices = [${et(e)}]`), i.addProperty(`normal3f[] normals = [${tt(n.normal, r)}]`, ["interpolation = \"vertex\""]), i.addProperty(`point3f[] points = [${tt(n.position, r)}]`);
839
+ for (let e = 0; e < 4; e++) {
840
+ let t = e > 0 ? e : "", r = n["uv" + t];
841
+ r !== void 0 && i.addProperty(`texCoord2f[] primvars:st${t} = [${nt(r)}]`, ["interpolation = \"vertex\""]);
842
+ }
843
+ let a = n.color;
844
+ if (a !== void 0 && i.addProperty(`color3f[] primvars:displayColor = [${tt(a, r)}]`, ["interpolation = \"vertex\""]), i.addProperty("uniform token subdivisionScheme = \"none\""), t !== null) {
845
+ let r = e.groups, a = (e.index === null ? n.position.count : e.index.count) / 3;
846
+ for (let e = 0; e < r.length; e++) {
847
+ let n = r[e], o = t[n.materialIndex];
848
+ if (o === void 0) continue;
849
+ let s = Math.floor(n.start / 3), c = Math.min(s + Math.floor(n.count / 3), a), l = [];
850
+ for (let e = s; e < c; e++) l.push(e);
851
+ let u = new Q(`subset_${e}`, "GeomSubset");
852
+ u.addMetadata("prepend apiSchemas", "[\"MaterialBindingAPI\"]"), u.addProperty("uniform token elementType = \"face\""), u.addProperty("uniform token familyName = \"materialBind\""), u.addProperty(`int[] indices = [${l.join(", ")}]`), u.addProperty(`rel material:binding = </Materials/Material_${o.id}>`), i.addChild(u);
853
+ }
854
+ }
855
+ return i;
856
+ }
857
+ function $e(e) {
858
+ let t = e.index === null ? e.attributes.position.count : e.index.count;
859
+ return Array(t / 3).fill(3).join(", ");
860
+ }
861
+ function et(e) {
862
+ let t = e.index, n = [];
863
+ if (t !== null) for (let e = 0; e < t.count; e++) n.push(t.getX(e));
864
+ else {
865
+ let t = e.attributes.position.count;
866
+ for (let e = 0; e < t; e++) n.push(e);
867
+ }
868
+ return n.join(", ");
869
+ }
870
+ function tt(e, t) {
871
+ if (e === void 0) return console.warn("USDZExporter: Normals missing."), Array(t).fill("(0, 0, 0)").join(", ");
872
+ let n = [];
873
+ for (let t = 0; t < e.count; t++) {
874
+ let r = e.getX(t), i = e.getY(t), a = e.getZ(t);
875
+ n.push(`(${r.toPrecision($)}, ${i.toPrecision($)}, ${a.toPrecision($)})`);
876
+ }
877
+ return n.join(", ");
878
+ }
879
+ function nt(e) {
880
+ let t = [];
881
+ for (let n = 0; n < e.count; n++) {
882
+ let r = e.getX(n), i = e.getY(n);
883
+ t.push(`(${r.toPrecision($)}, ${1 - i.toPrecision($)})`);
884
+ }
885
+ return t.join(", ");
886
+ }
887
+ function rt(e, t, n = !1) {
888
+ let r = new Q("Materials");
889
+ for (let i in e) {
890
+ let a = e[i];
891
+ r.addChild(it(a, t, n));
892
+ }
893
+ return r;
894
+ }
895
+ function it(e, t, n = !1) {
896
+ let r = new Q(`Material_${e.id}`, "Material");
897
+ function i(r, i, a) {
898
+ let o = r.source.id + "_" + r.flipY;
899
+ t[o] = r;
900
+ let s = r.channel > 0 ? "st" + r.channel : "st", c = {
901
+ 1e3: "repeat",
902
+ 1001: "clamp",
903
+ 1002: "mirror"
904
+ }, l = r.repeat.clone(), u = r.offset.clone(), d = r.rotation, f = Math.sin(d), p = Math.cos(d);
905
+ u.y = 1 - u.y - l.y, n ? (u.x /= l.x, u.y /= l.y, u.x += f / l.x, u.y += p - 1) : (u.x += f * l.x, u.y += (1 - p) * l.y);
906
+ let m = new Q(`PrimvarReader_${i}`, "Shader");
907
+ m.addProperty("uniform token info:id = \"UsdPrimvarReader_float2\""), m.addProperty("float2 inputs:fallback = (0.0, 0.0)"), m.addProperty(`string inputs:varname = "${s}"`), m.addProperty("float2 outputs:result");
908
+ let h = new Q(`Transform2d_${i}`, "Shader");
909
+ h.addProperty("uniform token info:id = \"UsdTransform2d\""), h.addProperty(`float2 inputs:in.connect = </Materials/Material_${e.id}/PrimvarReader_${i}.outputs:result>`), h.addProperty(`float inputs:rotation = ${(180 / Math.PI * d).toFixed($)}`), h.addProperty(`float2 inputs:scale = ${st(l)}`), h.addProperty(`float2 inputs:translation = ${st(u)}`), h.addProperty("float2 outputs:result");
910
+ let g = new Q(`Texture_${r.id}_${i}`, "Shader");
911
+ if (g.addProperty("uniform token info:id = \"UsdUVTexture\""), g.addProperty(`asset inputs:file = @textures/Texture_${o}.${Le(r)}@`), g.addProperty(`float2 inputs:st.connect = </Materials/Material_${e.id}/Transform2d_${i}.outputs:result>`), a !== void 0) {
912
+ let t = i === "diffuse" ? e.opacity : 1;
913
+ g.addProperty(`float4 inputs:scale = ${ot(a, t)}`);
914
+ }
915
+ if (i === "normal") {
916
+ let t = e.normalScale.x;
917
+ g.addProperty(`float4 inputs:scale = (${2 * t}, ${2 * t}, 2, 1)`), g.addProperty(`float4 inputs:bias = (${-t}, ${-t}, -1, 0)`);
918
+ }
919
+ return g.addProperty(`token inputs:sourceColorSpace = "${r.colorSpace === "" ? "raw" : "sRGB"}"`), g.addProperty(`token inputs:wrapS = "${c[r.wrapS]}"`), g.addProperty(`token inputs:wrapT = "${c[r.wrapT]}"`), g.addProperty("float outputs:r"), g.addProperty("float outputs:g"), g.addProperty("float outputs:b"), g.addProperty("float3 outputs:rgb"), (e.transparent || e.alphaTest > 0) && g.addProperty("float outputs:a"), [
920
+ m,
921
+ h,
922
+ g
923
+ ];
924
+ }
925
+ e.side === 2 && console.warn("THREE.USDZExporter: USDZ does not support double sided materials", e);
926
+ let o = new Q("PreviewSurface", "Shader");
927
+ if (o.addProperty("uniform token info:id = \"UsdPreviewSurface\""), e.map === null ? o.addProperty(`color3f inputs:diffuseColor = ${at(e.color)}`) : (o.addProperty(`color3f inputs:diffuseColor.connect = </Materials/Material_${e.id}/Texture_${e.map.id}_diffuse.outputs:rgb>`), e.transparent ? o.addProperty(`float inputs:opacity.connect = </Materials/Material_${e.id}/Texture_${e.map.id}_diffuse.outputs:a>`) : e.alphaTest > 0 && (o.addProperty(`float inputs:opacity.connect = </Materials/Material_${e.id}/Texture_${e.map.id}_diffuse.outputs:a>`), o.addProperty(`float inputs:opacityThreshold = ${e.alphaTest}`)), i(e.map, "diffuse", e.color).forEach((e) => r.addChild(e))), e.emissive) {
928
+ let t = e.emissiveIntensity ?? 1;
929
+ if (e.emissiveMap) {
930
+ o.addProperty(`color3f inputs:emissiveColor.connect = </Materials/Material_${e.id}/Texture_${e.emissiveMap.id}_emissive.outputs:rgb>`);
931
+ let n = new a(e.emissive.r * t, e.emissive.g * t, e.emissive.b * t);
932
+ i(e.emissiveMap, "emissive", n).forEach((e) => r.addChild(e));
933
+ } else e.emissive.getHex() > 0 && o.addProperty(`color3f inputs:emissiveColor = ${at(e.emissive)}`);
934
+ }
935
+ if (e.normalMap && (o.addProperty(`normal3f inputs:normal.connect = </Materials/Material_${e.id}/Texture_${e.normalMap.id}_normal.outputs:rgb>`), i(e.normalMap, "normal").forEach((e) => r.addChild(e))), e.aoMap) {
936
+ o.addProperty(`float inputs:occlusion.connect = </Materials/Material_${e.id}/Texture_${e.aoMap.id}_occlusion.outputs:r>`);
937
+ let t = e.aoMapIntensity ?? 1, n = new a(t, t, t);
938
+ i(e.aoMap, "occlusion", n).forEach((e) => r.addChild(e));
939
+ }
940
+ if (e.roughnessMap) {
941
+ o.addProperty(`float inputs:roughness.connect = </Materials/Material_${e.id}/Texture_${e.roughnessMap.id}_roughness.outputs:g>`);
942
+ let t = new a(e.roughness, e.roughness, e.roughness);
943
+ i(e.roughnessMap, "roughness", t).forEach((e) => r.addChild(e));
944
+ } else o.addProperty(`float inputs:roughness = ${e.roughness ?? 1}`);
945
+ if (e.metalnessMap) {
946
+ o.addProperty(`float inputs:metallic.connect = </Materials/Material_${e.id}/Texture_${e.metalnessMap.id}_metallic.outputs:b>`);
947
+ let t = new a(e.metalness, e.metalness, e.metalness);
948
+ i(e.metalnessMap, "metallic", t).forEach((e) => r.addChild(e));
949
+ } else o.addProperty(`float inputs:metallic = ${e.metalness ?? 0}`);
950
+ if (e.alphaMap ? (o.addProperty(`float inputs:opacity.connect = </Materials/Material_${e.id}/Texture_${e.alphaMap.id}_opacity.outputs:r>`), o.addProperty("float inputs:opacityThreshold = 0.0001"), i(e.alphaMap, "opacity").forEach((e) => r.addChild(e))) : o.addProperty(`float inputs:opacity = ${e.opacity}`), e.isMeshPhysicalMaterial) {
951
+ if (e.clearcoatMap !== null) {
952
+ o.addProperty(`float inputs:clearcoat.connect = </Materials/Material_${e.id}/Texture_${e.clearcoatMap.id}_clearcoat.outputs:r>`);
953
+ let t = new a(e.clearcoat, e.clearcoat, e.clearcoat);
954
+ i(e.clearcoatMap, "clearcoat", t).forEach((e) => r.addChild(e));
955
+ } else o.addProperty(`float inputs:clearcoat = ${e.clearcoat}`);
956
+ if (e.clearcoatRoughnessMap !== null) {
957
+ o.addProperty(`float inputs:clearcoatRoughness.connect = </Materials/Material_${e.id}/Texture_${e.clearcoatRoughnessMap.id}_clearcoatRoughness.outputs:g>`);
958
+ let t = new a(e.clearcoatRoughness, e.clearcoatRoughness, e.clearcoatRoughness);
959
+ i(e.clearcoatRoughnessMap, "clearcoatRoughness", t).forEach((e) => r.addChild(e));
960
+ } else o.addProperty(`float inputs:clearcoatRoughness = ${e.clearcoatRoughness}`);
961
+ o.addProperty(`float inputs:ior = ${e.ior}`);
962
+ }
963
+ return o.addProperty("int inputs:useSpecularWorkflow = 0"), o.addProperty("token outputs:surface"), r.addChild(o), r.addProperty(`token outputs:surface.connect = </Materials/Material_${e.id}/PreviewSurface.outputs:surface>`), r;
964
+ }
965
+ function at(e) {
966
+ return `(${e.r}, ${e.g}, ${e.b})`;
967
+ }
968
+ function ot(e, t = 1) {
969
+ return `(${e.r}, ${e.g}, ${e.b}, ${t})`;
970
+ }
971
+ function st(e) {
972
+ return `(${e.x}, ${e.y})`;
973
+ }
974
+ function ct(e, t, n) {
975
+ let r = Ie(e, t);
976
+ e.matrix.determinant() < 0 && console.warn("THREE.USDZExporter: USDZ does not support negative scales", e);
977
+ let i = new Q(r, "Camera");
978
+ Ke(i, e, n);
979
+ let a = e.isOrthographicCamera ? "orthographic" : "perspective";
980
+ i.addProperty(`token projection = "${a}"`);
981
+ let o = `(${e.near.toPrecision($)}, ${e.far.toPrecision($)})`;
982
+ i.addProperty(`float2 clippingRange = ${o}`);
983
+ let s;
984
+ s = e.isOrthographicCamera ? ((Math.abs(e.left) + Math.abs(e.right)) * 10).toPrecision($) : e.getFilmWidth().toPrecision($), i.addProperty(`float horizontalAperture = ${s}`);
985
+ let c;
986
+ if (c = e.isOrthographicCamera ? ((Math.abs(e.top) + Math.abs(e.bottom)) * 10).toPrecision($) : e.getFilmHeight().toPrecision($), i.addProperty(`float verticalAperture = ${c}`), e.isPerspectiveCamera) {
987
+ let t = e.getFocalLength().toPrecision($);
988
+ i.addProperty(`float focalLength = ${t}`);
989
+ let n = e.focus.toPrecision($);
990
+ i.addProperty(`float focusDistance = ${n}`);
991
+ }
992
+ return i;
993
+ }
994
+ //#endregion
995
+ //#region src/export/usdz.ts
996
+ var lt = "model/vnd.usdz+zip", ut = ".usdz";
997
+ async function dt(e) {
998
+ let t = await new Fe().parseAsync(e, { quickLookCompatible: !0 });
999
+ return new Uint8Array(t);
1000
+ }
1001
+ async function ft(t, n = {}) {
1002
+ let i = s(e(t), {
1003
+ ...n,
1004
+ wireframe: !1
1005
+ });
1006
+ try {
1007
+ return await dt(i);
1008
+ } finally {
1009
+ r(i);
1010
+ }
1011
+ }
1012
+ //#endregion
1013
+ //#region src/core/samples.ts
1014
+ var pt = [
1015
+ {
1016
+ name: "Basic Shapes",
1017
+ args: {
1018
+ title: "Basic 3D Shapes",
1019
+ script: "// Basic shapes demonstration\ncube { position -2 0 0 size 1 color (1 0.3 0.3) }\nsphere { position 0 0 0 size 1 color (0.3 1 0.3) }\ncylinder { position 2 0 0 size 0.5 1 color (0.3 0.3 1) }"
1020
+ }
1021
+ },
1022
+ {
1023
+ name: "Circular Pattern",
1024
+ args: {
1025
+ title: "Circular Pattern",
1026
+ script: "// 12個の立方体を円形に配置\n\ndefine count 12\ndefine radius 3\n\nfor i in 1 to count {\n // 各立方体の角度を計算(2 * PI = 6.283ラジアン)\n define angle ((i / count) * 6.283)\n\n // 円形配置のためのX座標とZ座標を計算\n define x (cos(angle) * radius)\n define z (sin(angle) * radius)\n\n // グラデーションカラーを作成\n define colorValue (i / count)\n\n cube {\n position x 0 z\n size 0.5\n color colorValue 0.5 (1 - colorValue)\n }\n}\n\n// 中心に参考用の球体を配置\nsphere {\n position 0 0 0\n size 0.3\n color 1 1 0\n opacity 0.5\n}"
1027
+ }
1028
+ },
1029
+ {
1030
+ name: "CSG Difference",
1031
+ args: {
1032
+ title: "Hollow Sphere",
1033
+ script: "// Create a hollow sphere using CSG difference\ndifference {\n sphere { size 2 color (1 0.5 0) }\n sphere { size 1.7 color (1 1 1) }\n cube { position 0 0 2 size 2 }\n}"
1034
+ }
1035
+ }
1036
+ ];
1037
+ //#endregion
1038
+ export { S as _, ft as a, F as c, v as d, T as f, w as g, y as h, dt as i, D as l, x as m, ut as n, I as o, C as p, lt as r, ee as s, pt as t, E as u, h as v, m as y };