@solid-labs/fab-one-widget 1.0.9 → 1.0.11

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.
@@ -1,16 +1,16 @@
1
- import { jsxs as F, jsx as i, Fragment as He } from "react/jsx-runtime";
2
- import { createContext as io, Component as so, useCallback as Q, useMemo as H, useState as B, memo as lo, useEffect as K, useRef as ie, forwardRef as ao, createElement as cn } from "react";
3
- import { useFrame as xn, useThree as bn, Canvas as co } from "@react-three/fiber";
4
- import { Html as Ze, Line as de, OrbitControls as yn } from "@react-three/drei";
1
+ import { jsxs as F, jsx as i, Fragment as Ee } from "react/jsx-runtime";
2
+ import { createContext as co, Component as fo, useCallback as J, useMemo as j, useState as W, memo as uo, useEffect as q, useRef as le, forwardRef as po, createElement as fn } from "react";
3
+ import { useFrame as yn, useThree as wn, Canvas as ho } from "@react-three/fiber";
4
+ import { Html as je, Line as de, OrbitControls as Sn } from "@react-three/drei";
5
5
  import * as O from "three";
6
- import { Plane as St, Vector3 as M, Box3 as wn, Line3 as Sn, Raycaster as fo } from "three";
7
- import { create as uo } from "zustand";
8
- import { OBJLoader as vn } from "three/examples/jsm/loaders/OBJLoader.js";
9
- import { STLLoader as po } from "three/examples/jsm/loaders/STLLoader.js";
10
- import { MeshBVH as vt } from "three-mesh-bvh";
11
- let Lr, bt, br, Dn;
6
+ import { Plane as xt, Vector3 as z, Box3 as vn, Line3 as Cn, Raycaster as go } from "three";
7
+ import { create as mo } from "zustand";
8
+ import { OBJLoader as zn } from "three/examples/jsm/loaders/OBJLoader.js";
9
+ import { STLLoader as xo } from "three/examples/jsm/loaders/STLLoader.js";
10
+ import { MeshBVH as bt } from "three-mesh-bvh";
11
+ let _r, ht, vr, Rn;
12
12
  let __tla = (async () => {
13
- const ho = {
13
+ const bo = {
14
14
  showDragDrop: true,
15
15
  showStartOver: true,
16
16
  showDebug: true,
@@ -19,7 +19,7 @@ let __tla = (async () => {
19
19
  showNavigation: true,
20
20
  showToolbar: false,
21
21
  showSaveButton: true
22
- }, go = {
22
+ }, yo = {
23
23
  showDragDrop: false,
24
24
  showStartOver: false,
25
25
  showDebug: false,
@@ -28,7 +28,7 @@ let __tla = (async () => {
28
28
  showNavigation: false,
29
29
  showToolbar: false,
30
30
  showSaveButton: false
31
- }, mo = io(ho), Nt = uo((t, r) => ({
31
+ }, wo = co(bo), Ht = mo((t, r) => ({
32
32
  landmarkPoints: [],
33
33
  isAligned: false,
34
34
  isCut: false,
@@ -64,13 +64,13 @@ let __tla = (async () => {
64
64
  isAligned: false,
65
65
  isCut: false
66
66
  })
67
- })), xo = 0.45, Ct = 3, Vt = 1e-3, yt = 25.4, bo = [
67
+ })), So = 0.45, yt = 3, Ot = 1e-3, gt = 25.4, vo = [
68
68
  0.25,
69
69
  -0.25,
70
70
  0.5,
71
71
  -0.5
72
72
  ];
73
- function yo(t) {
73
+ function Co(t) {
74
74
  var _a;
75
75
  const r = t.match(/^v\s+\S+\s+\S+\s+\S+(.*)$/m);
76
76
  if (!r || !((_a = r[1]) == null ? void 0 : _a.trim().includes(" "))) return null;
@@ -90,68 +90,68 @@ let __tla = (async () => {
90
90
  colors: new Float32Array(s)
91
91
  } : null;
92
92
  }
93
- function wo(t, r, n, o) {
93
+ function zo(t, r, n, o) {
94
94
  const s = t.getAttribute("position"), a = s.count, c = new Float32Array(a * 3), l = r.length / 3;
95
95
  let e = 1 / 0, m = 1 / 0, d = 1 / 0, f = -1 / 0, u = -1 / 0, x = -1 / 0;
96
- for (let _ = 0; _ < l; _++) {
97
- const E = r[_ * 3] * o, V = r[_ * 3 + 1] * o, Y = r[_ * 3 + 2] * o;
98
- E < e && (e = E), E > f && (f = E), V < m && (m = V), V > u && (u = V), Y < d && (d = Y), Y > x && (x = Y);
96
+ for (let D = 0; D < l; D++) {
97
+ const E = r[D * 3] * o, V = r[D * 3 + 1] * o, X = r[D * 3 + 2] * o;
98
+ E < e && (e = E), E > f && (f = E), V < m && (m = V), V > u && (u = V), X < d && (d = X), X > x && (x = X);
99
99
  }
100
- const S = (e + f) * 0.5, p = (m + u) * 0.5, g = (d + x) * 0.5, b = f - e + 1e-6, A = u - m + 1e-6, P = x - d + 1e-6, v = b * 0.5, k = A * 0.5, w = P * 0.5, z = Math.min(128, Math.max(16, Math.round(Math.cbrt(l)))), h = b / z, C = A / z, L = P / z, I = /* @__PURE__ */ new Map();
101
- for (let _ = 0; _ < l; _++) {
102
- const E = r[_ * 3] * o - S, V = r[_ * 3 + 1] * o - p, Y = r[_ * 3 + 2] * o - g, q = Math.min(z - 1, Math.max(0, Math.floor((E + v) / h))), ye = Math.min(z - 1, Math.max(0, Math.floor((V + k) / C))), ae = Math.min(z - 1, Math.max(0, Math.floor((Y + w) / L))), fe = q * z * z + ye * z + ae;
103
- let se = I.get(fe);
104
- se || (se = [], I.set(fe, se)), se.push(_);
100
+ const S = (e + f) * 0.5, p = (m + u) * 0.5, g = (d + x) * 0.5, b = f - e + 1e-6, A = u - m + 1e-6, L = x - d + 1e-6, v = b * 0.5, k = A * 0.5, w = L * 0.5, M = Math.min(128, Math.max(16, Math.round(Math.cbrt(l)))), h = b / M, C = A / M, P = L / M, I = /* @__PURE__ */ new Map();
101
+ for (let D = 0; D < l; D++) {
102
+ const E = r[D * 3] * o - S, V = r[D * 3 + 1] * o - p, X = r[D * 3 + 2] * o - g, Q = Math.min(M - 1, Math.max(0, Math.floor((E + v) / h))), be = Math.min(M - 1, Math.max(0, Math.floor((V + k) / C))), ae = Math.min(M - 1, Math.max(0, Math.floor((X + w) / P))), fe = Q * M * M + be * M + ae;
103
+ let re = I.get(fe);
104
+ re || (re = [], I.set(fe, re)), re.push(D);
105
105
  }
106
- for (let _ = 0; _ < a; _++) {
107
- const E = s.getX(_), V = s.getY(_), Y = s.getZ(_), q = Math.min(z - 1, Math.max(0, Math.floor((E + v) / h))), ye = Math.min(z - 1, Math.max(0, Math.floor((V + k) / C))), ae = Math.min(z - 1, Math.max(0, Math.floor((Y + w) / L)));
108
- let fe = 1 / 0, se = 0;
109
- for (let ee = 0; ee <= z && fe > 0; ee++) {
110
- for (let X = -ee; X <= ee; X++) for (let ue = -ee; ue <= ee; ue++) for (let Z = -ee; Z <= ee; Z++) {
111
- if (ee > 0 && Math.abs(X) < ee && Math.abs(ue) < ee && Math.abs(Z) < ee) continue;
112
- const pe = q + X, me = ye + ue, he = ae + Z;
113
- if (pe < 0 || pe >= z || me < 0 || me >= z || he < 0 || he >= z) continue;
114
- const $ = I.get(pe * z * z + me * z + he);
115
- if ($) for (const ne of $) {
116
- const xe = r[ne * 3] * o - S, Se = r[ne * 3 + 1] * o - p, we = r[ne * 3 + 2] * o - g, re = (E - xe) ** 2 + (V - Se) ** 2 + (Y - we) ** 2;
117
- re < fe && (fe = re, se = ne);
106
+ for (let D = 0; D < a; D++) {
107
+ const E = s.getX(D), V = s.getY(D), X = s.getZ(D), Q = Math.min(M - 1, Math.max(0, Math.floor((E + v) / h))), be = Math.min(M - 1, Math.max(0, Math.floor((V + k) / C))), ae = Math.min(M - 1, Math.max(0, Math.floor((X + w) / P)));
108
+ let fe = 1 / 0, re = 0;
109
+ for (let ee = 0; ee <= M && fe > 0; ee++) {
110
+ for (let G = -ee; G <= ee; G++) for (let ue = -ee; ue <= ee; ue++) for (let Z = -ee; Z <= ee; Z++) {
111
+ if (ee > 0 && Math.abs(G) < ee && Math.abs(ue) < ee && Math.abs(Z) < ee) continue;
112
+ const pe = Q + G, me = be + ue, he = ae + Z;
113
+ if (pe < 0 || pe >= M || me < 0 || me >= M || he < 0 || he >= M) continue;
114
+ const H = I.get(pe * M * M + me * M + he);
115
+ if (H) for (const ne of H) {
116
+ const xe = r[ne * 3] * o - S, we = r[ne * 3 + 1] * o - p, ye = r[ne * 3 + 2] * o - g, oe = (E - xe) ** 2 + (V - we) ** 2 + (X - ye) ** 2;
117
+ oe < fe && (fe = oe, re = ne);
118
118
  }
119
119
  }
120
120
  if (fe < 1 / 0) break;
121
121
  }
122
- c[_ * 3] = n[se * 3], c[_ * 3 + 1] = n[se * 3 + 1], c[_ * 3 + 2] = n[se * 3 + 2];
122
+ c[D * 3] = n[re * 3], c[D * 3 + 1] = n[re * 3 + 1], c[D * 3 + 2] = n[re * 3 + 2];
123
123
  }
124
124
  t.setAttribute("color", new O.Float32BufferAttribute(c, 3));
125
125
  }
126
- const dn = {
126
+ const un = {
127
127
  debug: 0,
128
128
  info: 1,
129
129
  warn: 2,
130
130
  error: 3
131
131
  };
132
- let Cn = "warn", Mn = null;
132
+ let Mn = "warn", An = null;
133
133
  const ce = {
134
134
  setLevel(t) {
135
- Cn = t;
135
+ Mn = t;
136
136
  },
137
137
  setHandler(t) {
138
- Mn = t;
138
+ An = t;
139
139
  },
140
140
  debug(t, r, n) {
141
- mt("debug", t, r, n);
141
+ ut("debug", t, r, n);
142
142
  },
143
143
  info(t, r, n) {
144
- mt("info", t, r, n);
144
+ ut("info", t, r, n);
145
145
  },
146
146
  warn(t, r, n) {
147
- mt("warn", t, r, n);
147
+ ut("warn", t, r, n);
148
148
  },
149
149
  error(t, r, n) {
150
- mt("error", t, r, n);
150
+ ut("error", t, r, n);
151
151
  }
152
152
  };
153
- function mt(t, r, n, o) {
154
- if (dn[t] < dn[Cn]) return;
153
+ function ut(t, r, n, o) {
154
+ if (un[t] < un[Mn]) return;
155
155
  const s = `[${r}]`, a = o !== void 0 ? [
156
156
  s,
157
157
  n,
@@ -174,9 +174,9 @@ let __tla = (async () => {
174
174
  console.error(...a);
175
175
  break;
176
176
  }
177
- Mn == null ? void 0 : Mn(t, r, n, o);
177
+ An == null ? void 0 : An(t, r, n, o);
178
178
  }
179
- function wt(t) {
179
+ function mt(t) {
180
180
  const r = t.getAttribute("position"), n = new Float32Array(r.array), o = t.getIndex();
181
181
  if (o) return {
182
182
  positions: n,
@@ -189,20 +189,20 @@ let __tla = (async () => {
189
189
  indices: a
190
190
  };
191
191
  }
192
- function zn(t, r) {
192
+ function kn(t, r) {
193
193
  const n = new O.BufferGeometry();
194
194
  return n.setAttribute("position", new O.Float32BufferAttribute(t, 3)), n.setIndex(new O.BufferAttribute(r, 1)), n.computeVertexNormals(), n;
195
195
  }
196
- async function So(t, r, n) {
196
+ async function Mo(t, r, n) {
197
197
  try {
198
- const o = yo(t);
198
+ const o = Co(t);
199
199
  n == null ? void 0 : n("Parsing mesh...");
200
- const a = new vn().parse(t);
200
+ const a = new zn().parse(t);
201
201
  let c = null;
202
202
  if (a.traverse((b) => {
203
203
  b.isMesh && !c && (c = b.geometry);
204
204
  }), !c) return null;
205
- const { positions: l, indices: e } = wt(c);
205
+ const { positions: l, indices: e } = mt(c);
206
206
  if (l.length < 9 || e.length < 3) return ce.warn("wasm", `Mesh too small: positions=${l.length} indices=${e.length}`), null;
207
207
  for (let b = 0; b < Math.min(l.length, 300); b++) if (!isFinite(l[b])) return ce.error("wasm", `Invalid position data: NaN/Infinity at index ${b}`), null;
208
208
  const m = l.length / 3;
@@ -211,10 +211,10 @@ let __tla = (async () => {
211
211
  const d = r.preprocess_mesh(l, e, 10, 1e-4, 500), f = d.positions(), u = d.indices(), x = d.unit_converted(), S = d.detected_unit(), p = d.log();
212
212
  if (ce.debug("wasm", "preprocess result", p), f.length === 0) return null;
213
213
  n == null ? void 0 : n("Building geometry...");
214
- const g = zn(f, u);
214
+ const g = kn(f, u);
215
215
  if (o) {
216
216
  const b = x ? 1e3 : 1;
217
- wo(g, o.positions, o.colors, b);
217
+ zo(g, o.positions, o.colors, b);
218
218
  }
219
219
  return {
220
220
  geometry: g,
@@ -226,15 +226,15 @@ let __tla = (async () => {
226
226
  return ce.error("wasm", "Processing failed", o), null;
227
227
  }
228
228
  }
229
- function vo(t) {
230
- const n = new vn().parse(t);
229
+ function Ao(t) {
230
+ const n = new zn().parse(t);
231
231
  let o = null;
232
232
  return n.traverse((s) => {
233
233
  s.isMesh && !o && (o = s.geometry);
234
234
  }), o;
235
235
  }
236
- async function $t(t) {
237
- const r = await t.arrayBuffer(), s = new po().parse(r).getAttribute("position");
236
+ async function Et(t) {
237
+ const r = await t.arrayBuffer(), s = new xo().parse(r).getAttribute("position");
238
238
  if (!s || s.count === 0) throw new Error("Empty STL geometry");
239
239
  const a = [];
240
240
  for (let c = 0; c < s.count; c++) a.push(`v ${s.getX(c)} ${s.getY(c)} ${s.getZ(c)}`);
@@ -242,25 +242,25 @@ let __tla = (async () => {
242
242
  return a.join(`
243
243
  `);
244
244
  }
245
- function Co(t, r) {
245
+ function ko(t, r) {
246
246
  const n = 1 / r;
247
247
  return `${Math.round(t.x * n)}_${Math.round(t.y * n)}_${Math.round(t.z * n)}`;
248
248
  }
249
- function Mo(t, r) {
249
+ function Fo(t, r) {
250
250
  if (!t.length) return [];
251
251
  const n = [];
252
252
  for (const o of t) (n.length === 0 || n[n.length - 1].distanceTo(o) > r) && n.push(o.clone());
253
253
  return n.length > 2 && n[0].distanceTo(n[n.length - 1]) > r && n.push(n[0].clone()), n;
254
254
  }
255
- function Je(t) {
255
+ function Xe(t) {
256
256
  let r = 0;
257
257
  for (let n = 0; n < t.length - 1; n++) r += t[n].distanceTo(t[n + 1]);
258
258
  return r;
259
259
  }
260
- function An(t, r = 1e-3, n = false) {
260
+ function Fn(t, r = 1e-3, n = false) {
261
261
  if (!t.length) return [];
262
262
  const o = /* @__PURE__ */ new Map(), s = (f) => {
263
- const u = Co(f, r);
263
+ const u = ko(f, r);
264
264
  let x = o.get(u);
265
265
  return x || (x = f.clone(), o.set(u, x)), x;
266
266
  }, a = t.map((f) => ({
@@ -285,13 +285,13 @@ let __tla = (async () => {
285
285
  a.splice(p, 1), x = true;
286
286
  }
287
287
  }
288
- const S = Mo(u, r);
288
+ const S = Fo(u, r);
289
289
  S.length > 1 && c.push(S);
290
290
  }
291
291
  if (!c.length) return [];
292
292
  if (n) {
293
- c.sort((x, S) => Je(S) - Je(x));
294
- const f = Je(c[0]), u = c.filter((x) => Je(x) >= f * 0.3);
293
+ c.sort((x, S) => Xe(S) - Xe(x));
294
+ const f = Xe(c[0]), u = c.filter((x) => Xe(x) >= f * 0.3);
295
295
  return u[u.length - 1] ?? c[0];
296
296
  }
297
297
  const l = c.filter((f) => f.length >= 3 && f[0].distanceTo(f[f.length - 1]) < r * 10), e = l.length > 0 ? l : c;
@@ -306,16 +306,16 @@ let __tla = (async () => {
306
306
  }
307
307
  return m;
308
308
  }
309
- function fn(t, r, n, o = false) {
310
- const s = new St(new M(0, 1, 0), -n), a = [], c = new wn();
309
+ function pn(t, r, n, o = false) {
310
+ const s = new xt(new z(0, 1, 0), -n), a = [], c = new vn();
311
311
  c.setFromBufferAttribute(r.getAttribute("position"));
312
312
  const l = {
313
313
  linePoints: [],
314
314
  lineLength: 0,
315
- rightmostPoint: new M(0, n, 0)
315
+ rightmostPoint: new z(0, n, 0)
316
316
  };
317
317
  if (!s.intersectsBox(c)) return l;
318
- const e = new Sn(), m = new M();
318
+ const e = new Cn(), m = new z();
319
319
  t.shapecast({
320
320
  intersectsBounds: (p) => s.intersectsBox(p),
321
321
  intersectsTriangle: (p) => {
@@ -326,12 +326,12 @@ let __tla = (async () => {
326
326
  });
327
327
  }
328
328
  });
329
- const d = An(a, Vt, o);
329
+ const d = Fn(a, Ot, o);
330
330
  if (d.length < 2) return l;
331
- const f = Je(d);
332
- let u = -1 / 0, x = new M(0, n, 0);
331
+ const f = Xe(d);
332
+ let u = -1 / 0, x = new z(0, n, 0);
333
333
  for (const p of d) p.x > u && (u = p.x, x = p.clone());
334
- const S = d.length > 2 && d[0].distanceTo(d[d.length - 1]) < Vt * 10;
334
+ const S = d.length > 2 && d[0].distanceTo(d[d.length - 1]) < Ot * 10;
335
335
  return {
336
336
  linePoints: d,
337
337
  lineLength: f,
@@ -339,22 +339,22 @@ let __tla = (async () => {
339
339
  isClosed: S
340
340
  };
341
341
  }
342
- function Ge(t, r, n, o = false) {
343
- const s = fn(t, r, n, o);
342
+ function He(t, r, n, o = false) {
343
+ const s = pn(t, r, n, o);
344
344
  if (s.isClosed && s.linePoints.length >= 3) return s;
345
345
  ce.debug("slice", `y=${n.toFixed(2)} failed (pts=${s.linePoints.length}, closed=${s.isClosed}), retrying...`);
346
346
  let a = s;
347
- for (const c of bo) {
348
- const l = fn(t, r, n + c, o);
347
+ for (const c of vo) {
348
+ const l = pn(t, r, n + c, o);
349
349
  if (l.isClosed && l.linePoints.length >= 3) return ce.debug("slice", `y=${n.toFixed(2)} recovered with offset ${c > 0 ? "+" : ""}${c}mm (pts=${l.linePoints.length}, len=${l.lineLength.toFixed(1)}mm)`), l;
350
350
  l.linePoints.length > a.linePoints.length && (a = l);
351
351
  }
352
352
  return ce.warn("slice", `y=${n.toFixed(2)} all retries exhausted (pts=${a.linePoints.length}, closed=${a.isClosed})`), a;
353
353
  }
354
- function zo(t, r, n, o) {
355
- const s = new St().setFromNormalAndCoplanarPoint(o.clone().normalize(), n), a = new wn();
354
+ function Po(t, r, n, o) {
355
+ const s = new xt().setFromNormalAndCoplanarPoint(o.clone().normalize(), n), a = new vn();
356
356
  if (a.setFromBufferAttribute(r.getAttribute("position")), !s.intersectsBox(a)) return 0;
357
- const c = [], l = new Sn(), e = new M();
357
+ const c = [], l = new Cn(), e = new z();
358
358
  t.shapecast({
359
359
  intersectsBounds: (d) => s.intersectsBox(d),
360
360
  intersectsTriangle: (d) => {
@@ -365,15 +365,15 @@ let __tla = (async () => {
365
365
  });
366
366
  }
367
367
  });
368
- const m = An(c, Vt);
369
- return Je(m);
368
+ const m = Fn(c, Ot);
369
+ return Xe(m);
370
370
  }
371
- function jt(t) {
372
- return new vt(t, {
373
- maxLeafTris: Ct
371
+ function $t(t) {
372
+ return new bt(t, {
373
+ maxLeafTris: yt
374
374
  });
375
375
  }
376
- function Ao(t, r, n, o) {
376
+ function Lo(t, r, n, o) {
377
377
  const s = t.getIndex(), a = s ? s.count / 3 : 0;
378
378
  if (a < 10) return {
379
379
  valid: false,
@@ -388,9 +388,9 @@ let __tla = (async () => {
388
388
  valid: false,
389
389
  reason: `Height too large (${c.toFixed(1)}mm > 1000mm)`
390
390
  };
391
- const l = new vt(t, {
392
- maxLeafTris: Ct
393
- }), e = Ge(l, t, r);
391
+ const l = new bt(t, {
392
+ maxLeafTris: yt
393
+ }), e = He(l, t, r);
394
394
  if (e.lineLength === 0) return {
395
395
  valid: false,
396
396
  reason: "No circumference at green point \u2014 mesh may be empty at that height"
@@ -400,7 +400,7 @@ let __tla = (async () => {
400
400
  valid: true,
401
401
  reason: ""
402
402
  };
403
- const d = Ge(l, t, m);
403
+ const d = He(l, t, m);
404
404
  if (e.lineLength > 0 && d.lineLength > 0) {
405
405
  const u = e.lineLength / d.lineLength;
406
406
  if (u < 0.5) return {
@@ -410,7 +410,7 @@ let __tla = (async () => {
410
410
  }
411
411
  const f = r - o * 2;
412
412
  if (f > n) {
413
- const u = Ge(l, t, f);
413
+ const u = He(l, t, f);
414
414
  if (d.lineLength > 0 && u.lineLength > 0) {
415
415
  const x = d.lineLength / u.lineLength;
416
416
  if (x < 0.5) return {
@@ -424,31 +424,31 @@ let __tla = (async () => {
424
424
  reason: ""
425
425
  };
426
426
  }
427
- const Pe = "pipeline";
428
- function ko(t, r, n, o) {
427
+ const Fe = "pipeline";
428
+ function Io(t, r, n, o) {
429
429
  var _a, _b, _c, _d;
430
430
  const s = t.geometry.clone(), a = r.map((l) => ({
431
431
  ...l
432
432
  })), c = o.wasmModule;
433
433
  try {
434
- let l = t.geometry, e = a.map(($) => new M($.position.x, $.position.y, $.position.z));
434
+ let l = t.geometry, e = a.map((H) => new z(H.position.x, H.position.y, H.position.z));
435
435
  const m = e[0], d = e[1];
436
436
  if (!c) {
437
- o.onStatus("Aligning mesh (JS fallback)..."), ce.warn(Pe, "WASM not available, using JS fallback alignment");
438
- const $ = new M(0, 1, 0), ne = new M().subVectors(d, m).normalize(), xe = ne.dot($), Se = new M().crossVectors(ne, $);
439
- if (Se.length() > 1e-4) {
440
- Se.normalize();
441
- const N = new O.Quaternion().setFromAxisAngle(Se, Math.acos(Math.min(1, Math.max(-1, xe))));
442
- l.applyMatrix4(new O.Matrix4().makeRotationFromQuaternion(N)), e = e.map((Ie) => Ie.clone().applyQuaternion(N));
437
+ o.onStatus("Aligning mesh (JS fallback)..."), ce.warn(Fe, "WASM not available, using JS fallback alignment");
438
+ const H = new z(0, 1, 0), ne = new z().subVectors(d, m).normalize(), xe = ne.dot(H), we = new z().crossVectors(ne, H);
439
+ if (we.length() > 1e-4) {
440
+ we.normalize();
441
+ const Y = new O.Quaternion().setFromAxisAngle(we, Math.acos(Math.min(1, Math.max(-1, xe))));
442
+ l.applyMatrix4(new O.Matrix4().makeRotationFromQuaternion(Y)), e = e.map((Pe) => Pe.clone().applyQuaternion(Y));
443
443
  }
444
444
  if (e[0].y > e[1].y) {
445
- const N = new O.Quaternion().setFromAxisAngle(new M(1, 0, 0), Math.PI);
446
- l.applyMatrix4(new O.Matrix4().makeRotationFromQuaternion(N)), e = e.map((Ie) => Ie.clone().applyQuaternion(N));
445
+ const Y = new O.Quaternion().setFromAxisAngle(new z(1, 0, 0), Math.PI);
446
+ l.applyMatrix4(new O.Matrix4().makeRotationFromQuaternion(Y)), e = e.map((Pe) => Pe.clone().applyQuaternion(Y));
447
447
  }
448
- const we = e[0].clone();
449
- l.translate(-we.x, -we.y, -we.z), e = e.map((N) => new M(N.x - we.x, N.y - we.y, N.z - we.z)), l.computeVertexNormals(), l.computeBoundingBox();
450
- const re = new M(e[0].x, e[0].y, e[0].z);
451
- e.push(re), o.addLandmarkPoint({
448
+ const ye = e[0].clone();
449
+ l.translate(-ye.x, -ye.y, -ye.z), e = e.map((Y) => new z(Y.x - ye.x, Y.y - ye.y, Y.z - ye.z)), l.computeVertexNormals(), l.computeBoundingBox();
450
+ const oe = new z(e[0].x, e[0].y, e[0].z);
451
+ e.push(oe), o.addLandmarkPoint({
452
452
  faceIndex: -1,
453
453
  vertexIndices: [
454
454
  0,
@@ -456,25 +456,25 @@ let __tla = (async () => {
456
456
  2
457
457
  ],
458
458
  position: {
459
- x: re.x,
460
- y: re.y,
461
- z: re.z
459
+ x: oe.x,
460
+ y: oe.y,
461
+ z: oe.z
462
462
  },
463
463
  barycentricCoords: {
464
464
  u: 0.33,
465
465
  v: 0.33,
466
466
  w: 0.34
467
467
  }
468
- }), o.updateLandmarkPositions(e.map((N) => ({
469
- x: N.x,
470
- y: N.y,
471
- z: N.z
472
- }))), o.setAligned(true), o.setCut(true), o.setAdjustedStartY(null), o.setAdjustedEndY(null), o.setOriginalEndY(e[1].y + 2 * yt);
473
- const j = new M();
474
- l.computeBoundingBox(), l.boundingBox.getSize(j), o.setModelSize(Math.max(j.x, j.y, j.z)), s.dispose();
468
+ }), o.updateLandmarkPositions(e.map((Y) => ({
469
+ x: Y.x,
470
+ y: Y.y,
471
+ z: Y.z
472
+ }))), o.setAligned(true), o.setCut(true), o.setAdjustedStartY(null), o.setAdjustedEndY(null), o.setOriginalEndY(e[1].y + 2 * gt);
473
+ const N = new z();
474
+ l.computeBoundingBox(), l.boundingBox.getSize(N), o.setModelSize(Math.max(N.x, N.y, N.z)), s.dispose();
475
475
  return;
476
476
  }
477
- const { positions: f, indices: u } = wt(l), x = new Float32Array([
477
+ const { positions: f, indices: u } = mt(l), x = new Float32Array([
478
478
  m.x,
479
479
  m.y,
480
480
  m.z
@@ -485,66 +485,66 @@ let __tla = (async () => {
485
485
  ]);
486
486
  o.onStatus("Detecting shell type...");
487
487
  const p = c.detect_shell(f, u, S, 40), g = p.is_double_shell(), b = p.surface_normal();
488
- ce.info(Pe, `Shell: ${g ? "DOUBLE" : "SINGLE"}`, p.details()), (_a = o.setDoubleShell) == null ? void 0 : _a.call(o, g), o.onStatus("Finding cross-section plane...");
488
+ ce.info(Fe, `Shell: ${g ? "DOUBLE" : "SINGLE"}`, p.details()), (_a = o.setDoubleShell) == null ? void 0 : _a.call(o, g), o.onStatus("Finding cross-section plane...");
489
489
  const A = new Float32Array([
490
490
  b[0],
491
491
  b[1],
492
492
  b[2]
493
- ]), P = c.find_min_cross_section(f, u, S, A, 10), v = P.plane_normal();
494
- ce.info(Pe, "Cross-section found", P.details()), o.onStatus("Aligning mesh...");
493
+ ]), L = c.find_min_cross_section(f, u, S, A, 10), v = L.plane_normal();
494
+ ce.info(Fe, "Cross-section found", L.details()), o.onStatus("Aligning mesh...");
495
495
  const k = new Float32Array([
496
496
  v[0],
497
497
  v[1],
498
498
  v[2]
499
499
  ]), w = c.align_to_origin(f, x, S, k);
500
- let z = w.positions(), h = w.mpt(), C = w.origin();
501
- const L = w.transform();
502
- ce.info(Pe, "Alignment complete", w.details());
500
+ let M = w.positions(), h = w.mpt(), C = w.origin();
501
+ const P = w.transform();
502
+ ce.info(Fe, "Alignment complete", w.details());
503
503
  const I = [
504
- L[3],
505
- L[4],
506
- L[5],
507
- L[6],
508
- L[7],
509
- L[8],
510
- L[9],
511
- L[10],
512
- L[11]
513
- ], _ = new Float32Array([
504
+ P[3],
505
+ P[4],
506
+ P[5],
507
+ P[6],
508
+ P[7],
509
+ P[8],
510
+ P[9],
511
+ P[10],
512
+ P[11]
513
+ ], D = new Float32Array([
514
514
  I[0] * v[0] + I[1] * v[1] + I[2] * v[2],
515
515
  I[3] * v[0] + I[4] * v[1] + I[5] * v[2],
516
516
  I[6] * v[0] + I[7] * v[1] + I[8] * v[2]
517
517
  ]);
518
518
  o.onStatus("Generating measurement points...");
519
- const E = c.subdivide_origin_to_plane(new Float32Array(C), new Float32Array(h), _);
520
- ce.debug(Pe, `Subdivide: ${E.count()} pts, spacing=${E.spacing().toFixed(1)}mm`);
521
- const V = E.points(), Y = E.count(), q = 2, ye = 1, ae = [];
522
- for (let $ = q; $ < Y - ye; $++) ae.push(V[$ * 3 + 1]);
519
+ const E = c.subdivide_origin_to_plane(new Float32Array(C), new Float32Array(h), D);
520
+ ce.debug(Fe, `Subdivide: ${E.count()} pts, spacing=${E.spacing().toFixed(1)}mm`);
521
+ const V = E.points(), X = E.count(), Q = 2, be = 1, ae = [];
522
+ for (let H = Q; H < X - be; H++) ae.push(V[H * 3 + 1]);
523
523
  o.onStatus("Computing cross-sections...");
524
524
  let fe = [];
525
525
  if (ae.length >= 2) {
526
- const ne = (g ? c.batch_cross_sections_y_inner.bind(c) : c.batch_cross_sections_y.bind(c))(z, u, new Float32Array(ae), 10);
527
- ce.debug(Pe, "Batch (subdivision)", ne.details());
528
- const xe = ne.all_loop_points(), Se = ne.offsets(), we = ne.circumferences();
529
- for (let re = 0; re < Se.length - 1; re++) {
530
- const j = Se[re], N = Se[re + 1];
531
- if (N <= j || we[re] <= 0) continue;
532
- const Ie = (N - j) / 3;
533
- if (Ie < 3) continue;
534
- let Le = 0, Ke = 0, le = 0;
535
- for (let ke = j; ke < N; ke += 3) Le += xe[ke], Ke += xe[ke + 1], le += xe[ke + 2];
536
- fe.push(Le / Ie, Ke / Ie, le / Ie);
526
+ const ne = (g ? c.batch_cross_sections_y_inner.bind(c) : c.batch_cross_sections_y.bind(c))(M, u, new Float32Array(ae), 10);
527
+ ce.debug(Fe, "Batch (subdivision)", ne.details());
528
+ const xe = ne.all_loop_points(), we = ne.offsets(), ye = ne.circumferences();
529
+ for (let oe = 0; oe < we.length - 1; oe++) {
530
+ const N = we[oe], Y = we[oe + 1];
531
+ if (Y <= N || ye[oe] <= 0) continue;
532
+ const Pe = (Y - N) / 3;
533
+ if (Pe < 3) continue;
534
+ let ke = 0, Ve = 0, ie = 0;
535
+ for (let Ae = N; Ae < Y; Ae += 3) ke += xe[Ae], Ve += xe[Ae + 1], ie += xe[Ae + 2];
536
+ fe.push(ke / Pe, Ve / Pe, ie / Pe);
537
537
  }
538
538
  }
539
539
  if (fe.length >= 6) {
540
540
  o.onStatus("Refining alignment...");
541
- const $ = c.refine_alignment(new Float32Array(fe), z, new Float32Array(C), new Float32Array(h));
542
- ce.info(Pe, "Refinement complete", $.details()), z = $.positions(), h = $.mpt(), C = $.origin();
541
+ const H = c.refine_alignment(new Float32Array(fe), M, new Float32Array(C), new Float32Array(h));
542
+ ce.info(Fe, "Refinement complete", H.details()), M = H.positions(), h = H.mpt(), C = H.origin();
543
543
  }
544
- const se = l.getAttribute("color"), ee = zn(z, u);
545
- se && ee.setAttribute("color", se), l.dispose(), l = ee, t.geometry = l, l.computeVertexNormals(), l.computeBoundingBox(), e[0] = new M(C[0], C[1], C[2]), e[1] = new M(h[0], h[1], h[2]), o.onStatus("Setting blue point...");
546
- const X = new M(e[0].x, e[0].y, e[0].z);
547
- e.push(X), o.addLandmarkPoint({
544
+ const re = l.getAttribute("color"), ee = kn(M, u);
545
+ re && ee.setAttribute("color", re), l.dispose(), l = ee, t.geometry = l, l.computeVertexNormals(), l.computeBoundingBox(), e[0] = new z(C[0], C[1], C[2]), e[1] = new z(h[0], h[1], h[2]), o.onStatus("Setting blue point...");
546
+ const G = new z(e[0].x, e[0].y, e[0].z);
547
+ e.push(G), o.addLandmarkPoint({
548
548
  faceIndex: -1,
549
549
  vertexIndices: [
550
550
  0,
@@ -552,55 +552,55 @@ let __tla = (async () => {
552
552
  2
553
553
  ],
554
554
  position: {
555
- x: X.x,
556
- y: X.y,
557
- z: X.z
555
+ x: G.x,
556
+ y: G.y,
557
+ z: G.z
558
558
  },
559
559
  barycentricCoords: {
560
560
  u: 0.33,
561
561
  v: 0.33,
562
562
  w: 0.34
563
563
  }
564
- }), o.updateLandmarkPositions(e.map(($) => ({
565
- x: $.x,
566
- y: $.y,
567
- z: $.z
564
+ }), o.updateLandmarkPositions(e.map((H) => ({
565
+ x: H.x,
566
+ y: H.y,
567
+ z: H.z
568
568
  }))), o.setAligned(true);
569
- const ue = l.boundingBox, Z = new M();
570
- ue.getSize(Z), o.setModelSize(Math.max(Z.x, Z.y, Z.z)), o.setCut(true), o.setAdjustedStartY(null), o.setAdjustedEndY(null), o.setOriginalEndY(e[1].y + 2 * yt), o.onStatus("Computing final measurements...");
569
+ const ue = l.boundingBox, Z = new z();
570
+ ue.getSize(Z), o.setModelSize(Math.max(Z.x, Z.y, Z.z)), o.setCut(true), o.setAdjustedStartY(null), o.setAdjustedEndY(null), o.setOriginalEndY(e[1].y + 2 * gt), o.onStatus("Computing final measurements...");
571
571
  {
572
- const $ = wt(l), ne = e[1].y, xe = e[0].y;
573
- let Se = 1 / 0, we = -1 / 0;
574
- const re = $.positions;
575
- for (let le = 1; le < re.length; le += 3) re[le] < Se && (Se = re[le]), re[le] > we && (we = re[le]);
576
- const j = 25.4, N = [];
577
- N.push(ne);
578
- for (let le = 1; le <= 2; le++) {
579
- const ke = ne + le * j;
580
- ke < we - 1 && N.push(ke);
572
+ const H = mt(l), ne = e[1].y, xe = e[0].y;
573
+ let we = 1 / 0, ye = -1 / 0;
574
+ const oe = H.positions;
575
+ for (let ie = 1; ie < oe.length; ie += 3) oe[ie] < we && (we = oe[ie]), oe[ie] > ye && (ye = oe[ie]);
576
+ const N = 25.4, Y = [];
577
+ Y.push(ne);
578
+ for (let ie = 1; ie <= 2; ie++) {
579
+ const Ae = ne + ie * N;
580
+ Ae < ye - 1 && Y.push(Ae);
581
581
  }
582
- for (let le = ne - j; le > xe; le -= j) N.push(le);
583
- N.sort((le, ke) => le - ke), ce.info(Pe, `Horizontal slices: ${N.length} Y planes, range ${(_b = N[0]) == null ? void 0 : _b.toFixed(1)} \u2192 ${(_c = N[N.length - 1]) == null ? void 0 : _c.toFixed(1)} mm`);
584
- const Le = (g ? c.batch_cross_sections_y_inner.bind(c) : c.batch_cross_sections_y.bind(c))($.positions, $.indices, new Float32Array(N), 10);
585
- ce.info(Pe, `Horizontal slices (${g ? "inner" : "outer"}): ${Le.count()}/${N.length} valid`), ce.debug(Pe, "Slice details", Le.details());
586
- const Ke = {
587
- yValues: N,
588
- circumferences: Array.from(Le.circumferences()),
589
- allLoopPoints: new Float32Array(Le.all_loop_points()),
590
- offsets: new Uint32Array(Le.offsets()),
582
+ for (let ie = ne - N; ie > xe; ie -= N) Y.push(ie);
583
+ Y.sort((ie, Ae) => ie - Ae), ce.info(Fe, `Horizontal slices: ${Y.length} Y planes, range ${(_b = Y[0]) == null ? void 0 : _b.toFixed(1)} \u2192 ${(_c = Y[Y.length - 1]) == null ? void 0 : _c.toFixed(1)} mm`);
584
+ const ke = (g ? c.batch_cross_sections_y_inner.bind(c) : c.batch_cross_sections_y.bind(c))(H.positions, H.indices, new Float32Array(Y), 10);
585
+ ce.info(Fe, `Horizontal slices (${g ? "inner" : "outer"}): ${ke.count()}/${Y.length} valid`), ce.debug(Fe, "Slice details", ke.details());
586
+ const Ve = {
587
+ yValues: Y,
588
+ circumferences: Array.from(ke.circumferences()),
589
+ allLoopPoints: new Float32Array(ke.all_loop_points()),
590
+ offsets: new Uint32Array(ke.offsets()),
591
591
  mptY: ne,
592
592
  originY: xe
593
593
  };
594
- (_d = o.setWasmSlices) == null ? void 0 : _d.call(o, Ke);
594
+ (_d = o.setWasmSlices) == null ? void 0 : _d.call(o, Ve);
595
595
  }
596
596
  o.onStatus("Validating results...");
597
- const pe = e[1].y, me = e[0].y, he = Ao(l, pe, me, n);
598
- he.valid || ce.warn(Pe, `Validation: ${he.reason}`), o.setClippedReferenceGeometry ? (s.computeVertexNormals(), o.setClippedReferenceGeometry(s)) : s.dispose();
597
+ const pe = e[1].y, me = e[0].y, he = Lo(l, pe, me, n);
598
+ he.valid || ce.warn(Fe, `Validation: ${he.reason}`), o.setClippedReferenceGeometry ? (s.computeVertexNormals(), o.setClippedReferenceGeometry(s)) : s.dispose();
599
599
  } catch (l) {
600
- ce.error(Pe, "Processing failed", l), o.setError(l instanceof Error ? l.message : "Failed to process mesh."), s.dispose();
600
+ ce.error(Fe, "Processing failed", l), o.setError(l instanceof Error ? l.message : "Failed to process mesh."), s.dispose();
601
601
  }
602
602
  }
603
- class Fo extends so {
603
+ class _o extends fo {
604
604
  constructor() {
605
605
  super(...arguments), this.state = {
606
606
  error: null
@@ -667,7 +667,7 @@ let __tla = (async () => {
667
667
  }) : this.props.children;
668
668
  }
669
669
  }
670
- const Lo = ({ message: t, onDismiss: r }) => F("div", {
670
+ const Do = ({ message: t, onDismiss: r }) => F("div", {
671
671
  style: {
672
672
  position: "absolute",
673
673
  top: 16,
@@ -720,7 +720,7 @@ let __tla = (async () => {
720
720
  children: "x"
721
721
  })
722
722
  ]
723
- }), un = ({ message: t }) => F("div", {
723
+ }), hn = ({ message: t }) => F("div", {
724
724
  style: {
725
725
  position: "absolute",
726
726
  top: 0,
@@ -758,16 +758,16 @@ let __tla = (async () => {
758
758
  })
759
759
  ]
760
760
  });
761
- function Po(t, r, n, o) {
762
- const s = new M().subVectors(n, r), a = new M().subVectors(o, r), c = new M().subVectors(t, r), l = s.dot(s), e = s.dot(a), m = s.dot(c), d = a.dot(a), f = a.dot(c), u = 1 / (l * d - e * e), x = (d * m - e * f) * u, S = (l * f - e * m) * u;
761
+ function Ro(t, r, n, o) {
762
+ const s = new z().subVectors(n, r), a = new z().subVectors(o, r), c = new z().subVectors(t, r), l = s.dot(s), e = s.dot(a), m = s.dot(c), d = a.dot(a), f = a.dot(c), u = 1 / (l * d - e * e), x = (d * m - e * f) * u, S = (l * f - e * m) * u;
763
763
  return {
764
764
  u: 1 - x - S,
765
765
  v: x,
766
766
  w: S
767
767
  };
768
768
  }
769
- const Io = ({ mesh: t, maxPoints: r = 2, meshColor: n = "#c8c8c8", meshOpacity: o = 1, frontFaceOnly: s = false, doubleShellTransparency: a = false }) => {
770
- const { addLandmarkPoint: c, landmarkPoints: l } = Nt(), e = Q((x) => {
769
+ const Wo = ({ mesh: t, maxPoints: r = 2, meshColor: n = "#c8c8c8", meshOpacity: o = 1, frontFaceOnly: s = false, doubleShellTransparency: a = false }) => {
770
+ const { addLandmarkPoint: c, landmarkPoints: l } = Ht(), e = J((x) => {
771
771
  if (l.length >= r) return;
772
772
  x.stopPropagation();
773
773
  const S = x.intersections[0], p = S == null ? void 0 : S.faceIndex;
@@ -783,15 +783,15 @@ let __tla = (async () => {
783
783
  p * 3 + 1,
784
784
  p * 3 + 2
785
785
  ];
786
- const P = g.getAttribute("position"), v = new M().fromBufferAttribute(P, A[0]), k = new M().fromBufferAttribute(P, A[1]), w = new M().fromBufferAttribute(P, A[2]);
786
+ const L = g.getAttribute("position"), v = new z().fromBufferAttribute(L, A[0]), k = new z().fromBufferAttribute(L, A[1]), w = new z().fromBufferAttribute(L, A[2]);
787
787
  v.applyMatrix4(t.matrixWorld), k.applyMatrix4(t.matrixWorld), w.applyMatrix4(t.matrixWorld);
788
- const z = S.point, h = Po(z, v, k, w), C = {
788
+ const M = S.point, h = Ro(M, v, k, w), C = {
789
789
  faceIndex: p,
790
790
  vertexIndices: A,
791
791
  position: {
792
- x: z.x,
793
- y: z.y,
794
- z: z.z
792
+ x: M.x,
793
+ y: M.y,
794
+ z: M.z
795
795
  },
796
796
  barycentricCoords: h
797
797
  };
@@ -801,9 +801,9 @@ let __tla = (async () => {
801
801
  c,
802
802
  l.length,
803
803
  r
804
- ]), m = H(() => !!t.geometry.getAttribute("color"), [
804
+ ]), m = j(() => !!t.geometry.getAttribute("color"), [
805
805
  t
806
- ]), d = a ? Math.min(o, 0.65) : o, f = d < 1, u = H(() => new O.MeshStandardMaterial({
806
+ ]), d = a ? Math.min(o, 0.65) : o, f = d < 1, u = j(() => new O.MeshStandardMaterial({
807
807
  color: m ? "#ffffff" : n,
808
808
  side: s ? O.FrontSide : O.DoubleSide,
809
809
  roughness: 0.6,
@@ -826,8 +826,8 @@ let __tla = (async () => {
826
826
  material: u,
827
827
  renderOrder: a ? 0 : void 0
828
828
  });
829
- }, Do = ({ point: t, index: r, markerSize: n, color: o, label: s }) => {
830
- const [a, c] = B(false);
829
+ }, Bo = ({ point: t, index: r, markerSize: n, color: o, label: s }) => {
830
+ const [a, c] = W(false);
831
831
  return F("mesh", {
832
832
  position: [
833
833
  t.position.x,
@@ -847,7 +847,7 @@ let __tla = (async () => {
847
847
  i("meshBasicMaterial", {
848
848
  color: o
849
849
  }),
850
- a && i(Ze, {
850
+ a && i(je, {
851
851
  center: true,
852
852
  style: {
853
853
  pointerEvents: "none"
@@ -868,8 +868,8 @@ let __tla = (async () => {
868
868
  })
869
869
  ]
870
870
  }, r);
871
- }, _o = ({ modelSize: t, labels: r }) => {
872
- const { landmarkPoints: n } = Nt(), o = t * 0.02, s = [
871
+ }, Eo = ({ modelSize: t, labels: r }) => {
872
+ const { landmarkPoints: n } = Ht(), o = t * 0.02, s = [
873
873
  "#44ff44",
874
874
  "#ff4444",
875
875
  "#4444ff"
@@ -878,8 +878,8 @@ let __tla = (async () => {
878
878
  "Origin",
879
879
  "Cut Plane"
880
880
  ];
881
- return i(He, {
882
- children: n.map((l, e) => i(Do, {
881
+ return i(Ee, {
882
+ children: n.map((l, e) => i(Bo, {
883
883
  point: l,
884
884
  index: e,
885
885
  markerSize: o,
@@ -888,28 +888,28 @@ let __tla = (async () => {
888
888
  }, e))
889
889
  });
890
890
  };
891
- function kn(t) {
892
- return H(() => t ? new vt(t, {
893
- maxLeafTris: Ct
891
+ function Pn(t) {
892
+ return j(() => t ? new bt(t, {
893
+ maxLeafTris: yt
894
894
  }) : null, [
895
895
  t
896
896
  ]);
897
897
  }
898
- const pn = (t, r) => {
898
+ const gn = (t, r) => {
899
899
  const n = Math.abs(t - r);
900
900
  return n <= 7 ? "#8BC34A" : n <= 20 ? "#FFC107" : "#FF5722";
901
- }, hn = new O.Color("#8BC34A"), gn = new O.Color("#FFC107"), Ro = new O.Color("#FF5722"), Wo = (t) => {
902
- if (t <= 7) return hn.clone();
901
+ }, mn = new O.Color("#8BC34A"), xn = new O.Color("#FFC107"), To = new O.Color("#FF5722"), Oo = (t) => {
902
+ if (t <= 7) return mn.clone();
903
903
  if (t <= 20) {
904
904
  const n = (t - 7) / 13;
905
- return hn.clone().lerp(gn, n);
905
+ return mn.clone().lerp(xn, n);
906
906
  }
907
907
  const r = Math.min((t - 20) / 20, 1);
908
- return gn.clone().lerp(Ro, r);
909
- }, Bo = (t, r) => {
908
+ return xn.clone().lerp(To, r);
909
+ }, $o = (t, r) => {
910
910
  const n = t.length, o = new Float32Array(n * 2 * 3), s = new Float32Array(n * 2 * 3), a = [];
911
911
  for (let e = 0; e < n; e++) {
912
- const m = t[e], d = r[e], f = m.distanceTo(d), u = Wo(f);
912
+ const m = t[e], d = r[e], f = m.distanceTo(d), u = Oo(f);
913
913
  if (o[e * 6] = m.x, o[e * 6 + 1] = m.y, o[e * 6 + 2] = m.z, s[e * 6] = u.r, s[e * 6 + 1] = u.g, s[e * 6 + 2] = u.b, o[e * 6 + 3] = d.x, o[e * 6 + 4] = d.y, o[e * 6 + 5] = d.z, s[e * 6 + 3] = u.r, s[e * 6 + 4] = u.g, s[e * 6 + 5] = u.b, e < n - 1) {
914
914
  const x = e * 2, S = x + 1, p = (e + 1) * 2, g = p + 1;
915
915
  a.push(x, S, p, S, g, p);
@@ -926,47 +926,47 @@ let __tla = (async () => {
926
926
  depthWrite: false
927
927
  });
928
928
  return new O.Mesh(c, l);
929
- }, Eo = ({ bvh: t, geometry: r, yPosition: n, color: o = "#00ff00", labelX: s, onDataChange: a, displayUnit: c = "mm", useInnerSurface: l = false, formValue: e, lineWidth: m = 1.5, wasmLoopPoints: d, wasmCircumference: f }) => {
930
- const u = H(() => d && f != null ? null : Ge(t, r, n, l), [
929
+ }, Ho = ({ bvh: t, geometry: r, yPosition: n, color: o = "#00ff00", labelX: s, onDataChange: a, displayUnit: c = "mm", useInnerSurface: l = false, formValue: e, lineWidth: m = 1.5, wasmLoopPoints: d, wasmCircumference: f }) => {
930
+ const u = j(() => d && f != null ? null : He(t, r, n, l), [
931
931
  t,
932
932
  r,
933
933
  n,
934
934
  l,
935
935
  d,
936
936
  f
937
- ]), x = d ?? (u == null ? void 0 : u.linePoints) ?? [], S = f ?? (u == null ? void 0 : u.lineLength) ?? 0, p = H(() => {
937
+ ]), x = d ?? (u == null ? void 0 : u.linePoints) ?? [], S = f ?? (u == null ? void 0 : u.lineLength) ?? 0, p = j(() => {
938
938
  if (e == null || e === 0 || S <= 0 || x.length < 2) return null;
939
- const P = e / S, v = x.reduce((w, z) => w + z.x, 0) / x.length, k = x.reduce((w, z) => w + z.z, 0) / x.length;
940
- return x.map((w) => new M(v + (w.x - v) * P, w.y, k + (w.z - k) * P));
939
+ const L = e / S, v = x.reduce((w, M) => w + M.x, 0) / x.length, k = x.reduce((w, M) => w + M.z, 0) / x.length;
940
+ return x.map((w) => new z(v + (w.x - v) * L, w.y, k + (w.z - k) * L));
941
941
  }, [
942
942
  x,
943
943
  S,
944
944
  e
945
- ]), g = H(() => !p || x.length < 2 ? null : Bo(x, p), [
945
+ ]), g = j(() => !p || x.length < 2 ? null : $o(x, p), [
946
946
  x,
947
947
  p
948
948
  ]);
949
- K(() => () => {
949
+ q(() => () => {
950
950
  g && (g.geometry.dispose(), g.material.dispose());
951
951
  }, [
952
952
  g
953
953
  ]);
954
- const b = ie(null), A = H(() => {
955
- const P = new O.BufferGeometry();
956
- P.setAttribute("position", new O.Float32BufferAttribute(new Float32Array(6), 3));
954
+ const b = le(null), A = j(() => {
955
+ const L = new O.BufferGeometry();
956
+ L.setAttribute("position", new O.Float32BufferAttribute(new Float32Array(6), 3));
957
957
  const v = new O.LineBasicMaterial({
958
958
  color: 6710886,
959
959
  depthTest: false,
960
960
  depthWrite: false,
961
961
  transparent: true
962
962
  });
963
- return new O.Line(P, v);
963
+ return new O.Line(L, v);
964
964
  }, []);
965
- return K(() => () => {
965
+ return q(() => () => {
966
966
  A.geometry.dispose(), A.material.dispose();
967
967
  }, [
968
968
  A
969
- ]), K(() => {
969
+ ]), q(() => {
970
970
  S > 0 && (a == null ? void 0 : a({
971
971
  yPosition: n,
972
972
  originalValue: S,
@@ -976,23 +976,23 @@ let __tla = (async () => {
976
976
  S,
977
977
  n,
978
978
  a
979
- ]), xn(({ camera: P }) => {
979
+ ]), yn(({ camera: L }) => {
980
980
  if (!b.current || x.length < 2) return;
981
- const v = new M();
982
- P.getWorldDirection(v);
983
- const k = new M(v.x, 0, v.z);
981
+ const v = new z();
982
+ L.getWorldDirection(v);
983
+ const k = new z(v.x, 0, v.z);
984
984
  if (k.lengthSq() < 1e-8) return;
985
985
  k.normalize();
986
- const w = new M().crossVectors(k, new M(0, 1, 0)).normalize();
987
- let z = -1 / 0, h = x[0];
988
- for (const _ of x) {
989
- const E = w.x * _.x + w.z * _.z;
990
- E > z && (z = E, h = _);
986
+ const w = new z().crossVectors(k, new z(0, 1, 0)).normalize();
987
+ let M = -1 / 0, h = x[0];
988
+ for (const D of x) {
989
+ const E = w.x * D.x + w.z * D.z;
990
+ E > M && (M = E, h = D);
991
991
  }
992
- const C = s * 0.35, L = new M(h.x + w.x * C, n, h.z + w.z * C);
993
- b.current.position.copy(L);
992
+ const C = s * 0.35, P = new z(h.x + w.x * C, n, h.z + w.z * C);
993
+ b.current.position.copy(P);
994
994
  const I = A.geometry.getAttribute("position");
995
- I.setXYZ(0, h.x, h.y, h.z), I.setXYZ(1, L.x, L.y, L.z), I.needsUpdate = true;
995
+ I.setXYZ(0, h.x, h.y, h.z), I.setXYZ(1, P.x, P.y, P.z), I.needsUpdate = true;
996
996
  }), x.length < 2 ? null : F("group", {
997
997
  renderOrder: 10,
998
998
  children: [
@@ -1011,7 +1011,7 @@ let __tla = (async () => {
1011
1011
  }),
1012
1012
  p && e != null && e !== 0 && i(de, {
1013
1013
  points: p,
1014
- color: pn(S, e),
1014
+ color: gn(S, e),
1015
1015
  lineWidth: 2.5,
1016
1016
  dashed: true,
1017
1017
  dashSize: 2,
@@ -1028,7 +1028,7 @@ let __tla = (async () => {
1028
1028
  }),
1029
1029
  i("group", {
1030
1030
  ref: b,
1031
- children: i(Ze, {
1031
+ children: i(je, {
1032
1032
  zIndexRange: [
1033
1033
  100,
1034
1034
  0
@@ -1078,7 +1078,7 @@ let __tla = (async () => {
1078
1078
  ]
1079
1079
  }),
1080
1080
  e != null && e !== 0 && S > 0 && (() => {
1081
- const P = S - e, v = P > 0.5 ? "\u25B2" : P < -0.5 ? "\u25BC" : "", k = pn(S, e);
1081
+ const L = S - e, v = L > 0.5 ? "\u25B2" : L < -0.5 ? "\u25BC" : "", k = gn(S, e);
1082
1082
  return F("div", {
1083
1083
  style: {
1084
1084
  display: "flex",
@@ -1106,8 +1106,8 @@ let __tla = (async () => {
1106
1106
  fontWeight: 600
1107
1107
  },
1108
1108
  children: [
1109
- P > 0 ? "+" : "",
1110
- c === "inch" ? (P / 25.4).toFixed(2) : P.toFixed(1)
1109
+ L > 0 ? "+" : "",
1110
+ c === "inch" ? (L / 25.4).toFixed(2) : L.toFixed(1)
1111
1111
  ]
1112
1112
  }),
1113
1113
  F("span", {
@@ -1130,20 +1130,20 @@ let __tla = (async () => {
1130
1130
  })
1131
1131
  ]
1132
1132
  });
1133
- }, To = lo(Eo), Oo = ({ mesh: t, startY: r, endY: n, spacing: o, modelSize: s, onMeasurementsChange: a, reverseOrder: c = false, displayUnit: l = "mm", useInnerSurface: e = false, formMeasurements: m, originY: d, wasmSlices: f }) => {
1134
- const u = ie(/* @__PURE__ */ new Map()), x = t.geometry, S = kn(x), p = H(() => {
1133
+ }, jo = uo(Ho), Vo = ({ mesh: t, startY: r, endY: n, spacing: o, modelSize: s, onMeasurementsChange: a, reverseOrder: c = false, displayUnit: l = "mm", useInnerSurface: e = false, formMeasurements: m, originY: d, wasmSlices: f }) => {
1134
+ const u = le(/* @__PURE__ */ new Map()), x = t.geometry, S = Pn(x), p = j(() => {
1135
1135
  if (f) {
1136
- let z = [
1136
+ let M = [
1137
1137
  ...f.yValues
1138
1138
  ];
1139
1139
  if (o > 25.4 + 0.1) {
1140
1140
  const h = f.mptY;
1141
- z = z.filter((C) => {
1142
- const L = Math.abs(C - h);
1143
- return L < 0.5 || Math.abs(Math.round(L / o) * o - L) < 0.5;
1141
+ M = M.filter((C) => {
1142
+ const P = Math.abs(C - h);
1143
+ return P < 0.5 || Math.abs(Math.round(P / o) * o - P) < 0.5;
1144
1144
  });
1145
1145
  }
1146
- return c ? z.sort((h, C) => C - h) : z.sort((h, C) => h - C), z;
1146
+ return c ? M.sort((h, C) => C - h) : M.sort((h, C) => h - C), M;
1147
1147
  }
1148
1148
  const k = [];
1149
1149
  if (c) for (let w = n; w >= r; w -= o) k.push(w);
@@ -1155,20 +1155,20 @@ let __tla = (async () => {
1155
1155
  o,
1156
1156
  c,
1157
1157
  f
1158
- ]), g = H(() => {
1158
+ ]), g = j(() => {
1159
1159
  if (!f) return null;
1160
- const k = /* @__PURE__ */ new Map(), { allLoopPoints: w, offsets: z, yValues: h } = f;
1161
- for (let C = 0; C < z.length - 1; C++) {
1162
- const L = z[C], I = z[C + 1];
1163
- if (I <= L) continue;
1164
- const _ = [];
1165
- for (let E = L; E < I; E += 3) _.push(new M(w[E], w[E + 1], w[E + 2]));
1166
- _.length >= 3 && k.set(h[C], _);
1160
+ const k = /* @__PURE__ */ new Map(), { allLoopPoints: w, offsets: M, yValues: h } = f;
1161
+ for (let C = 0; C < M.length - 1; C++) {
1162
+ const P = M[C], I = M[C + 1];
1163
+ if (I <= P) continue;
1164
+ const D = [];
1165
+ for (let E = P; E < I; E += 3) D.push(new z(w[E], w[E + 1], w[E + 2]));
1166
+ D.length >= 3 && k.set(h[C], D);
1167
1167
  }
1168
1168
  return k;
1169
1169
  }, [
1170
1170
  f
1171
- ]), b = H(() => {
1171
+ ]), b = j(() => {
1172
1172
  if (!f) return null;
1173
1173
  const k = /* @__PURE__ */ new Map();
1174
1174
  for (let w = 0; w < f.yValues.length; w++) k.set(f.yValues[w], f.circumferences[w]);
@@ -1176,11 +1176,11 @@ let __tla = (async () => {
1176
1176
  }, [
1177
1177
  f
1178
1178
  ]);
1179
- K(() => {
1179
+ q(() => {
1180
1180
  u.current.clear();
1181
1181
  }, [
1182
1182
  p
1183
- ]), K(() => {
1183
+ ]), q(() => {
1184
1184
  if (!b || !a) return;
1185
1185
  const k = p.filter((w) => (b.get(w) ?? 0) > 0).map((w) => ({
1186
1186
  yPosition: w,
@@ -1195,23 +1195,23 @@ let __tla = (async () => {
1195
1195
  ]);
1196
1196
  const A = [
1197
1197
  "#5B9BD5"
1198
- ], P = s * xo, v = Q((k) => {
1198
+ ], L = s * So, v = J((k) => {
1199
1199
  if (b) return;
1200
1200
  u.current.set(k.yPosition, k);
1201
- const w = Array.from(u.current.values()).sort((z, h) => c ? h.yPosition - z.yPosition : z.yPosition - h.yPosition);
1201
+ const w = Array.from(u.current.values()).sort((M, h) => c ? h.yPosition - M.yPosition : M.yPosition - h.yPosition);
1202
1202
  a == null ? void 0 : a(w);
1203
1203
  }, [
1204
1204
  a,
1205
1205
  c,
1206
1206
  b
1207
1207
  ]);
1208
- return S ? i(He, {
1209
- children: p.map((k, w) => i(To, {
1208
+ return S ? i(Ee, {
1209
+ children: p.map((k, w) => i(jo, {
1210
1210
  bvh: S,
1211
1211
  geometry: x,
1212
1212
  yPosition: k,
1213
1213
  color: d != null && Math.abs(k - d) < o * 0.5 ? "#44ff44" : A[w % A.length],
1214
- labelX: P,
1214
+ labelX: L,
1215
1215
  onDataChange: v,
1216
1216
  displayUnit: l,
1217
1217
  useInnerSurface: e,
@@ -1221,27 +1221,27 @@ let __tla = (async () => {
1221
1221
  wasmCircumference: b == null ? void 0 : b.get(k)
1222
1222
  }, k))
1223
1223
  }) : null;
1224
- }, $o = (t, r) => {
1224
+ }, No = (t, r) => {
1225
1225
  const n = Math.abs(t - r);
1226
1226
  return n <= 7 ? "#4caf50" : n <= 15 ? "#ff9800" : "#f44336";
1227
- }, Ho = ({ mesh: t, greenY: r, modelSize: n, displayUnit: o = "mm", bottomY: s, formHeight: a }) => {
1227
+ }, Yo = ({ mesh: t, greenY: r, modelSize: n, displayUnit: o = "mm", bottomY: s, formHeight: a }) => {
1228
1228
  var _a;
1229
1229
  const c = t.geometry;
1230
1230
  c.computeBoundingBox();
1231
- const l = s ?? ((_a = c.boundingBox) == null ? void 0 : _a.min.y) ?? 0, e = r - l, m = n * 0.4, d = n * 0.03, f = ie(null);
1232
- xn(({ camera: w }) => {
1231
+ const l = s ?? ((_a = c.boundingBox) == null ? void 0 : _a.min.y) ?? 0, e = r - l, m = n * 0.4, d = n * 0.03, f = le(null);
1232
+ yn(({ camera: w }) => {
1233
1233
  if (!f.current) return;
1234
- const z = new M();
1235
- w.getWorldDirection(z);
1236
- const h = new M(z.x, 0, z.z);
1234
+ const M = new z();
1235
+ w.getWorldDirection(M);
1236
+ const h = new z(M.x, 0, M.z);
1237
1237
  if (h.lengthSq() < 1e-8) return;
1238
1238
  h.normalize();
1239
- const C = new M().crossVectors(new M(0, 1, 0), h).normalize();
1239
+ const C = new z().crossVectors(new z(0, 1, 0), h).normalize();
1240
1240
  f.current.position.set(C.x * m, 0, C.z * m);
1241
- const L = w.position.x - f.current.position.x, I = w.position.z - f.current.position.z;
1242
- f.current.rotation.y = Math.atan2(L, I);
1241
+ const P = w.position.x - f.current.position.x, I = w.position.z - f.current.position.z;
1242
+ f.current.rotation.y = Math.atan2(P, I);
1243
1243
  });
1244
- const u = new M(0, r, 0), x = new M(0, l, 0), S = new M(0, (r + l) / 2, 0), p = new M(-d, r, 0), g = new M(d, r, 0), b = new M(-d, l, 0), A = new M(d, l, 0), P = a != null && a > 0, v = P ? e - a : 0, k = P ? $o(e, a) : "#fff";
1244
+ const u = new z(0, r, 0), x = new z(0, l, 0), S = new z(0, (r + l) / 2, 0), p = new z(-d, r, 0), g = new z(d, r, 0), b = new z(-d, l, 0), A = new z(d, l, 0), L = a != null && a > 0, v = L ? e - a : 0, k = L ? No(e, a) : "#fff";
1245
1245
  return F("group", {
1246
1246
  ref: f,
1247
1247
  children: [
@@ -1271,7 +1271,7 @@ let __tla = (async () => {
1271
1271
  }),
1272
1272
  i("mesh", {
1273
1273
  position: S,
1274
- children: i(Ze, {
1274
+ children: i(je, {
1275
1275
  center: true,
1276
1276
  style: {
1277
1277
  pointerEvents: "none"
@@ -1295,7 +1295,7 @@ let __tla = (async () => {
1295
1295
  style: {
1296
1296
  padding: "4px 8px",
1297
1297
  backgroundColor: "rgba(0, 0, 0, 0.75)",
1298
- borderRadius: P ? "4px 4px 0 0" : 4,
1298
+ borderRadius: L ? "4px 4px 0 0" : 4,
1299
1299
  color: "#fff",
1300
1300
  fontSize: 16,
1301
1301
  fontFamily: "monospace",
@@ -1308,7 +1308,7 @@ let __tla = (async () => {
1308
1308
  o === "inch" ? "in" : "mm"
1309
1309
  ]
1310
1310
  }),
1311
- P && F("div", {
1311
+ L && F("div", {
1312
1312
  style: {
1313
1313
  display: "flex",
1314
1314
  alignItems: "center",
@@ -1360,26 +1360,26 @@ let __tla = (async () => {
1360
1360
  })
1361
1361
  ]
1362
1362
  });
1363
- }, Vo = ({ modelSize: t, isAligned: r, isCut: n, mesh: o, viewMode: s, sliceY: a, landmarkCount: c = 0, measurementGeometry: l, resetCameraToFrontRef: e }) => {
1364
- const { set: m, size: d, camera: f, invalidate: u } = bn(), x = ie(false), S = ie(s), p = ie(new M()), g = ie(null), b = ie(c), A = ie(r), P = ie(n), v = ie(l), k = ie(0), w = Q(() => {
1363
+ }, Xo = ({ modelSize: t, isAligned: r, isCut: n, mesh: o, viewMode: s, sliceY: a, landmarkCount: c = 0, measurementGeometry: l, resetCameraToFrontRef: e }) => {
1364
+ const { set: m, size: d, camera: f, invalidate: u } = wn(), x = le(false), S = le(s), p = le(new z()), g = le(null), b = le(c), A = le(r), L = le(n), v = le(l), k = le(0), w = J(() => {
1365
1365
  if (!o || t <= 0) return null;
1366
1366
  const h = l ?? o.geometry;
1367
1367
  h.computeBoundingBox();
1368
- const C = h.boundingBox, L = new M();
1369
- C.getCenter(L);
1370
- const I = new M();
1368
+ const C = h.boundingBox, P = new z();
1369
+ C.getCenter(P);
1370
+ const I = new z();
1371
1371
  C.getSize(I), p.current.copy(I);
1372
- const _ = d.width / d.height, E = Math.max(I.y, I.x / _) * 1.6, V = E * _, Y = L.y - I.y * 0.05;
1373
- k.current = Y;
1374
- const q = new O.OrthographicCamera(-V / 2, V / 2, E / 2, -E / 2, 0.1, t * 10);
1375
- return q.position.set(0, Y, t * 2), q.lookAt(0, Y, 0), q;
1372
+ const D = d.width / d.height, E = Math.max(I.y, I.x / D) * 1.6, V = E * D, X = P.y - I.y * 0.05;
1373
+ k.current = X;
1374
+ const Q = new O.OrthographicCamera(-V / 2, V / 2, E / 2, -E / 2, 0.1, t * 10);
1375
+ return Q.position.set(0, X, t * 2), Q.lookAt(0, X, 0), Q;
1376
1376
  }, [
1377
1377
  o,
1378
1378
  t,
1379
1379
  d,
1380
1380
  l
1381
1381
  ]);
1382
- K(() => {
1382
+ q(() => {
1383
1383
  if (e) return e.current = () => {
1384
1384
  const h = w();
1385
1385
  h && (m({
@@ -1394,37 +1394,37 @@ let __tla = (async () => {
1394
1394
  m,
1395
1395
  u
1396
1396
  ]);
1397
- const z = Q((h) => {
1398
- const C = h.position.clone(), L = C.length(), I = Math.atan2(C.x, C.z), _ = Math.acos(C.y / L), V = I + 0.02;
1399
- h.position.set(L * Math.sin(_) * Math.sin(V), L * Math.cos(_), L * Math.sin(_) * Math.cos(V)), h.lookAt(0, 0, 0), h.updateMatrixWorld(true), u();
1397
+ const M = J((h) => {
1398
+ const C = h.position.clone(), P = C.length(), I = Math.atan2(C.x, C.z), D = Math.acos(C.y / P), V = I + 0.02;
1399
+ h.position.set(P * Math.sin(D) * Math.sin(V), P * Math.cos(D), P * Math.sin(D) * Math.cos(V)), h.lookAt(0, 0, 0), h.updateMatrixWorld(true), u();
1400
1400
  }, [
1401
1401
  u
1402
1402
  ]);
1403
- return K(() => {
1403
+ return q(() => {
1404
1404
  if (t > 0 && !x.current && !r) {
1405
1405
  x.current = true;
1406
1406
  const h = new O.PerspectiveCamera(50, d.width / d.height, 0.1, t * 10);
1407
1407
  h.position.set(t * 0.3, t * 0.2, t * 1.5), h.lookAt(0, 0, 0), m({
1408
1408
  camera: h
1409
- }), requestAnimationFrame(() => z(h));
1409
+ }), requestAnimationFrame(() => M(h));
1410
1410
  }
1411
1411
  }, [
1412
1412
  t,
1413
1413
  d,
1414
1414
  m,
1415
1415
  r,
1416
- z
1417
- ]), K(() => {
1416
+ M
1417
+ ]), q(() => {
1418
1418
  const h = b.current;
1419
- b.current = c, h === 0 && c === 1 && !r && requestAnimationFrame(() => z(f));
1419
+ b.current = c, h === 0 && c === 1 && !r && requestAnimationFrame(() => M(f));
1420
1420
  }, [
1421
1421
  c,
1422
1422
  r,
1423
1423
  f,
1424
- z
1425
- ]), K(() => {
1426
- const h = A.current !== r, C = P.current !== n, L = !v.current && !!l;
1427
- if (A.current = r, P.current = n, v.current = l, !h && !C && !L || !r || s !== "3D") return;
1424
+ M
1425
+ ]), q(() => {
1426
+ const h = A.current !== r, C = L.current !== n, P = !v.current && !!l;
1427
+ if (A.current = r, L.current = n, v.current = l, !h && !C && !P || !r || s !== "3D") return;
1428
1428
  const I = w();
1429
1429
  I && m({
1430
1430
  camera: I
@@ -1436,26 +1436,26 @@ let __tla = (async () => {
1436
1436
  l,
1437
1437
  w,
1438
1438
  m
1439
- ]), K(() => {
1439
+ ]), q(() => {
1440
1440
  if (S.current === s) return;
1441
1441
  const h = S.current;
1442
1442
  if (S.current = s, !(!r || !o || t <= 0)) {
1443
1443
  if (s === "2D" && a != null) {
1444
1444
  g.current = f;
1445
- const C = o.geometry, L = C.getAttribute("position"), I = L.array, _ = t * 0.15;
1446
- let E = 1 / 0, V = -1 / 0, Y = 1 / 0, q = -1 / 0, ye = false;
1447
- for (let he = 0; he < L.count; he++) if (Math.abs(I[he * 3 + 1] - a) < _) {
1448
- const $ = I[he * 3], ne = I[he * 3 + 2];
1449
- $ < E && (E = $), $ > V && (V = $), ne < Y && (Y = ne), ne > q && (q = ne), ye = true;
1445
+ const C = o.geometry, P = C.getAttribute("position"), I = P.array, D = t * 0.15;
1446
+ let E = 1 / 0, V = -1 / 0, X = 1 / 0, Q = -1 / 0, be = false;
1447
+ for (let he = 0; he < P.count; he++) if (Math.abs(I[he * 3 + 1] - a) < D) {
1448
+ const H = I[he * 3], ne = I[he * 3 + 2];
1449
+ H < E && (E = H), H > V && (V = H), ne < X && (X = ne), ne > Q && (Q = ne), be = true;
1450
1450
  }
1451
- if (!ye) {
1451
+ if (!be) {
1452
1452
  C.computeBoundingBox();
1453
1453
  const he = C.boundingBox;
1454
- E = he.min.x, V = he.max.x, Y = he.min.z, q = he.max.z;
1454
+ E = he.min.x, V = he.max.x, X = he.min.z, Q = he.max.z;
1455
1455
  }
1456
- const ae = (E + V) / 2, fe = (Y + q) / 2, se = d.width / d.height, ee = 1.4, X = (V - E) * ee, ue = (q - Y) * ee;
1456
+ const ae = (E + V) / 2, fe = (X + Q) / 2, re = d.width / d.height, ee = 1.4, G = (V - E) * ee, ue = (Q - X) * ee;
1457
1457
  let Z, pe;
1458
- X / ue > se ? (Z = X, pe = X / se) : (pe = ue, Z = ue * se);
1458
+ G / ue > re ? (Z = G, pe = G / re) : (pe = ue, Z = ue * re);
1459
1459
  const me = new O.OrthographicCamera(-Z / 2, Z / 2, pe / 2, -pe / 2, 0.1, t * 10);
1460
1460
  me.position.set(ae, a + t * 2, fe), me.up.set(0, 0, -1), me.lookAt(ae, a, fe), m({
1461
1461
  camera: me
@@ -1480,28 +1480,28 @@ let __tla = (async () => {
1480
1480
  m,
1481
1481
  f,
1482
1482
  w
1483
- ]), K(() => {
1483
+ ]), q(() => {
1484
1484
  if (!r || !f || !f.isOrthographicCamera) return;
1485
1485
  const h = f;
1486
1486
  if (s === "2D") {
1487
1487
  if (!o || a == null) return;
1488
- const C = o.geometry, L = C.getAttribute("position"), I = L.array, _ = t * 0.15;
1489
- let E = 1 / 0, V = -1 / 0, Y = 1 / 0, q = -1 / 0, ye = false;
1490
- for (let Z = 0; Z < L.count; Z++) if (Math.abs(I[Z * 3 + 1] - a) < _) {
1488
+ const C = o.geometry, P = C.getAttribute("position"), I = P.array, D = t * 0.15;
1489
+ let E = 1 / 0, V = -1 / 0, X = 1 / 0, Q = -1 / 0, be = false;
1490
+ for (let Z = 0; Z < P.count; Z++) if (Math.abs(I[Z * 3 + 1] - a) < D) {
1491
1491
  const pe = I[Z * 3], me = I[Z * 3 + 2];
1492
- pe < E && (E = pe), pe > V && (V = pe), me < Y && (Y = me), me > q && (q = me), ye = true;
1492
+ pe < E && (E = pe), pe > V && (V = pe), me < X && (X = me), me > Q && (Q = me), be = true;
1493
1493
  }
1494
- if (!ye) {
1494
+ if (!be) {
1495
1495
  C.computeBoundingBox();
1496
1496
  const Z = C.boundingBox;
1497
- E = Z.min.x, V = Z.max.x, Y = Z.min.z, q = Z.max.z;
1497
+ E = Z.min.x, V = Z.max.x, X = Z.min.z, Q = Z.max.z;
1498
1498
  }
1499
- const ae = d.width / d.height, fe = 1.4, se = (V - E) * fe, ee = (q - Y) * fe;
1500
- let X, ue;
1501
- se / ee > ae ? (X = se, ue = se / ae) : (ue = ee, X = ee * ae), h.left = -X / 2, h.right = X / 2, h.top = ue / 2, h.bottom = -ue / 2;
1499
+ const ae = d.width / d.height, fe = 1.4, re = (V - E) * fe, ee = (Q - X) * fe;
1500
+ let G, ue;
1501
+ re / ee > ae ? (G = re, ue = re / ae) : (ue = ee, G = ee * ae), h.left = -G / 2, h.right = G / 2, h.top = ue / 2, h.bottom = -ue / 2;
1502
1502
  } else {
1503
- const C = p.current, L = d.width / d.height, I = Math.max(C.y, C.x / L) * 1.6, _ = I * L;
1504
- h.left = -_ / 2, h.right = _ / 2, h.top = I / 2, h.bottom = -I / 2;
1503
+ const C = p.current, P = d.width / d.height, I = Math.max(C.y, C.x / P) * 1.6, D = I * P;
1504
+ h.left = -D / 2, h.right = D / 2, h.top = I / 2, h.bottom = -I / 2;
1505
1505
  }
1506
1506
  h.updateProjectionMatrix();
1507
1507
  }, [
@@ -1512,12 +1512,12 @@ let __tla = (async () => {
1512
1512
  s,
1513
1513
  o
1514
1514
  ]), null;
1515
- }, jo = ({ mesh: t, isDragging: r }) => {
1515
+ }, Go = ({ mesh: t, isDragging: r }) => {
1516
1516
  var _a;
1517
1517
  const n = t.geometry;
1518
1518
  n.computeBoundingBox();
1519
- const o = new M();
1520
- return (_a = n.boundingBox) == null ? void 0 : _a.getCenter(o), i(yn, {
1519
+ const o = new z();
1520
+ return (_a = n.boundingBox) == null ? void 0 : _a.getCenter(o), i(Sn, {
1521
1521
  enableDamping: false,
1522
1522
  enablePan: false,
1523
1523
  minPolarAngle: Math.PI * 0.15,
@@ -1531,7 +1531,7 @@ let __tla = (async () => {
1531
1531
  o.z
1532
1532
  ]
1533
1533
  });
1534
- }, No = ({ wasAutoScaled: t, onDismiss: r }) => F("div", {
1534
+ }, Zo = ({ wasAutoScaled: t, onDismiss: r }) => F("div", {
1535
1535
  style: {
1536
1536
  position: "absolute",
1537
1537
  bottom: 16,
@@ -1572,7 +1572,7 @@ let __tla = (async () => {
1572
1572
  children: "X"
1573
1573
  })
1574
1574
  ]
1575
- }), Yo = ({ isDoubleShell: t, onDismiss: r }) => F("div", {
1575
+ }), Ko = ({ isDoubleShell: t, onDismiss: r }) => F("div", {
1576
1576
  style: {
1577
1577
  position: "absolute",
1578
1578
  bottom: 68,
@@ -1613,7 +1613,7 @@ let __tla = (async () => {
1613
1613
  children: "X"
1614
1614
  })
1615
1615
  ]
1616
- }), Xo = ({ steps: t, currentStep: r, accentColor: n = "rgb(12, 67, 173)" }) => i("div", {
1616
+ }), qo = ({ steps: t, currentStep: r, accentColor: n = "rgb(12, 67, 173)" }) => i("div", {
1617
1617
  style: {
1618
1618
  backgroundColor: "#fff",
1619
1619
  borderBottom: "1px solid #e0e0e0",
@@ -1677,41 +1677,41 @@ let __tla = (async () => {
1677
1677
  ]
1678
1678
  }, o.number);
1679
1679
  })
1680
- }), Go = ({ mesh: t, upperY: r, originY: n, modelSize: o, meshColor: s = "#c8c8c8", displayUnit: a = "mm" }) => {
1681
- const c = t.geometry, l = H(() => new vt(c, {
1682
- maxLeafTris: Ct
1680
+ }), Uo = ({ mesh: t, upperY: r, originY: n, modelSize: o, meshColor: s = "#c8c8c8", displayUnit: a = "mm" }) => {
1681
+ const c = t.geometry, l = j(() => new bt(c, {
1682
+ maxLeafTris: yt
1683
1683
  }), [
1684
1684
  c
1685
- ]), e = H(() => Ge(l, c, n), [
1685
+ ]), e = j(() => He(l, c, n), [
1686
1686
  l,
1687
1687
  c,
1688
1688
  n
1689
- ]), m = H(() => new St(new M(0, -1, 0), r), [
1689
+ ]), m = j(() => new xt(new z(0, -1, 0), r), [
1690
1690
  r
1691
- ]), { mlLine: d, apLine: f, mlWidth: u, apWidth: x } = H(() => {
1692
- let g = null, b = null, A = 0, P = 0;
1691
+ ]), { mlLine: d, apLine: f, mlWidth: u, apWidth: x } = j(() => {
1692
+ let g = null, b = null, A = 0, L = 0;
1693
1693
  if (e.linePoints.length >= 2) {
1694
- let v = e.linePoints[0], k = e.linePoints[0], w = e.linePoints[0], z = e.linePoints[0];
1695
- for (const h of e.linePoints) h.x < v.x && (v = h), h.x > k.x && (k = h), h.z < w.z && (w = h), h.z > z.z && (z = h);
1694
+ let v = e.linePoints[0], k = e.linePoints[0], w = e.linePoints[0], M = e.linePoints[0];
1695
+ for (const h of e.linePoints) h.x < v.x && (v = h), h.x > k.x && (k = h), h.z < w.z && (w = h), h.z > M.z && (M = h);
1696
1696
  g = [
1697
- new M(v.x, n, v.z),
1698
- new M(k.x, n, k.z)
1697
+ new z(v.x, n, v.z),
1698
+ new z(k.x, n, k.z)
1699
1699
  ], b = [
1700
- new M(w.x, n, w.z),
1701
- new M(z.x, n, z.z)
1702
- ], A = g[0].distanceTo(g[1]), P = b[0].distanceTo(b[1]);
1700
+ new z(w.x, n, w.z),
1701
+ new z(M.x, n, M.z)
1702
+ ], A = g[0].distanceTo(g[1]), L = b[0].distanceTo(b[1]);
1703
1703
  }
1704
1704
  return {
1705
1705
  mlLine: g,
1706
1706
  apLine: b,
1707
1707
  mlWidth: A,
1708
- apWidth: P
1708
+ apWidth: L
1709
1709
  };
1710
1710
  }, [
1711
1711
  e,
1712
1712
  n
1713
1713
  ]), S = (g) => a === "inch" ? (g / 25.4).toFixed(2) : g.toFixed(1), p = a === "inch" ? "in" : "mm";
1714
- return F(He, {
1714
+ return F(Ee, {
1715
1715
  children: [
1716
1716
  i("mesh", {
1717
1717
  geometry: t.geometry,
@@ -1734,7 +1734,7 @@ let __tla = (async () => {
1734
1734
  depthWrite: false,
1735
1735
  transparent: true
1736
1736
  }),
1737
- d && F(He, {
1737
+ d && F(Ee, {
1738
1738
  children: [
1739
1739
  i(de, {
1740
1740
  points: d,
@@ -1744,7 +1744,7 @@ let __tla = (async () => {
1744
1744
  depthWrite: false,
1745
1745
  transparent: true
1746
1746
  }),
1747
- i(Ze, {
1747
+ i(je, {
1748
1748
  position: [
1749
1749
  d[0].x,
1750
1750
  n,
@@ -1778,7 +1778,7 @@ let __tla = (async () => {
1778
1778
  })
1779
1779
  ]
1780
1780
  }),
1781
- f && F(He, {
1781
+ f && F(Ee, {
1782
1782
  children: [
1783
1783
  i(de, {
1784
1784
  points: f,
@@ -1788,7 +1788,7 @@ let __tla = (async () => {
1788
1788
  depthWrite: false,
1789
1789
  transparent: true
1790
1790
  }),
1791
- i(Ze, {
1791
+ i(je, {
1792
1792
  position: [
1793
1793
  Math.max(f[0].x, f[1].x) + o * 0.02,
1794
1794
  n,
@@ -1824,61 +1824,61 @@ let __tla = (async () => {
1824
1824
  })
1825
1825
  ]
1826
1826
  });
1827
- }, Zo = ({ mesh: t, yPosition: r, onYChange: n, minY: o, maxY: s, modelSize: a, color: c, hoverColor: l, dragColor: e, label: m, onDragStart: d, onDragEnd: f }) => {
1828
- const [u, x] = B(false), [S, p] = B(false), { camera: g, gl: b } = bn(), A = ie(0), P = t.geometry, v = kn(P), k = H(() => v ? Ge(v, P, r) : {
1827
+ }, Jo = ({ mesh: t, yPosition: r, onYChange: n, minY: o, maxY: s, modelSize: a, color: c, hoverColor: l, dragColor: e, label: m, onDragStart: d, onDragEnd: f }) => {
1828
+ const [u, x] = W(false), [S, p] = W(false), { camera: g, gl: b } = wn(), A = le(0), L = t.geometry, v = Pn(L), k = j(() => v ? He(v, L, r) : {
1829
1829
  linePoints: [],
1830
1830
  lineLength: 0,
1831
- rightmostPoint: new M()
1831
+ rightmostPoint: new z()
1832
1832
  }, [
1833
1833
  v,
1834
- P,
1834
+ L,
1835
1835
  r
1836
- ]), w = Q((I, _) => {
1837
- const E = b.domElement.getBoundingClientRect(), V = (I - E.left) / E.width * 2 - 1, Y = -((_ - E.top) / E.height) * 2 + 1, q = new fo();
1838
- q.setFromCamera(new O.Vector2(V, Y), g);
1839
- const ye = new St(new M(0, 0, 1), 0), ae = new M();
1840
- return q.ray.intersectPlane(ye, ae), ae ? ae.y : r;
1836
+ ]), w = J((I, D) => {
1837
+ const E = b.domElement.getBoundingClientRect(), V = (I - E.left) / E.width * 2 - 1, X = -((D - E.top) / E.height) * 2 + 1, Q = new go();
1838
+ Q.setFromCamera(new O.Vector2(V, X), g);
1839
+ const be = new xt(new z(0, 0, 1), 0), ae = new z();
1840
+ return Q.ray.intersectPlane(be, ae), ae ? ae.y : r;
1841
1841
  }, [
1842
1842
  g,
1843
1843
  b,
1844
1844
  r
1845
- ]), z = Q((I) => {
1845
+ ]), M = J((I) => {
1846
1846
  I.stopPropagation(), x(true), b.domElement.style.cursor = "ns-resize", A.current = r - w(I.clientX, I.clientY), I.target.setPointerCapture(I.pointerId), d == null ? void 0 : d();
1847
1847
  }, [
1848
1848
  r,
1849
1849
  b,
1850
1850
  w,
1851
1851
  d
1852
- ]), h = Q((I) => {
1852
+ ]), h = J((I) => {
1853
1853
  if (!u) return;
1854
- let _ = w(I.clientX, I.clientY) + A.current;
1855
- _ = Math.max(o, Math.min(s, _)), n(_);
1854
+ let D = w(I.clientX, I.clientY) + A.current;
1855
+ D = Math.max(o, Math.min(s, D)), n(D);
1856
1856
  }, [
1857
1857
  u,
1858
1858
  w,
1859
1859
  n,
1860
1860
  o,
1861
1861
  s
1862
- ]), C = Q((I) => {
1862
+ ]), C = J((I) => {
1863
1863
  x(false), b.domElement.style.cursor = "auto", I.target.releasePointerCapture(I.pointerId), f == null ? void 0 : f();
1864
1864
  }, [
1865
1865
  b,
1866
1866
  f
1867
1867
  ]);
1868
1868
  if (k.linePoints.length < 2) return null;
1869
- const L = u ? e : S ? l : c;
1869
+ const P = u ? e : S ? l : c;
1870
1870
  return F("group", {
1871
1871
  renderOrder: 10,
1872
1872
  children: [
1873
1873
  i(de, {
1874
1874
  points: k.linePoints,
1875
- color: L,
1875
+ color: P,
1876
1876
  lineWidth: u ? 6 : S ? 5 : 4,
1877
1877
  depthTest: false,
1878
1878
  depthWrite: false,
1879
1879
  transparent: true,
1880
1880
  renderOrder: 10,
1881
- onPointerDown: z,
1881
+ onPointerDown: M,
1882
1882
  onPointerMove: h,
1883
1883
  onPointerUp: C,
1884
1884
  onPointerEnter: () => {
@@ -1894,14 +1894,14 @@ let __tla = (async () => {
1894
1894
  r,
1895
1895
  0
1896
1896
  ],
1897
- children: i(Ze, {
1897
+ children: i(je, {
1898
1898
  center: true,
1899
1899
  children: i("div", {
1900
1900
  style: {
1901
1901
  padding: "4px 8px",
1902
1902
  backgroundColor: "rgba(0, 0, 0, 0.8)",
1903
1903
  borderRadius: 4,
1904
- color: L,
1904
+ color: P,
1905
1905
  fontSize: 11,
1906
1906
  whiteSpace: "nowrap",
1907
1907
  pointerEvents: "none"
@@ -1913,17 +1913,17 @@ let __tla = (async () => {
1913
1913
  ]
1914
1914
  });
1915
1915
  };
1916
- function Ko(t, r) {
1916
+ function Qo(t, r) {
1917
1917
  if (t == null) return {};
1918
1918
  var n = {}, o = Object.keys(t), s, a;
1919
1919
  for (a = 0; a < o.length; a++) s = o[a], !(r.indexOf(s) >= 0) && (n[s] = t[s]);
1920
1920
  return n;
1921
1921
  }
1922
- var Uo = [
1922
+ var er = [
1923
1923
  "color"
1924
- ], Jo = ao(function(t, r) {
1925
- var n = t.color, o = n === void 0 ? "currentColor" : n, s = Ko(t, Uo);
1926
- return cn("svg", Object.assign({
1924
+ ], tr = po(function(t, r) {
1925
+ var n = t.color, o = n === void 0 ? "currentColor" : n, s = Qo(t, er);
1926
+ return fn("svg", Object.assign({
1927
1927
  width: "15",
1928
1928
  height: "15",
1929
1929
  viewBox: "0 0 15 15",
@@ -1931,20 +1931,20 @@ let __tla = (async () => {
1931
1931
  xmlns: "http://www.w3.org/2000/svg"
1932
1932
  }, s, {
1933
1933
  ref: r
1934
- }), cn("path", {
1934
+ }), fn("path", {
1935
1935
  d: "M7.5 2C7.77614 2 8 2.22386 8 2.5L8 11.2929L11.1464 8.14645C11.3417 7.95118 11.6583 7.95118 11.8536 8.14645C12.0488 8.34171 12.0488 8.65829 11.8536 8.85355L7.85355 12.8536C7.75979 12.9473 7.63261 13 7.5 13C7.36739 13 7.24021 12.9473 7.14645 12.8536L3.14645 8.85355C2.95118 8.65829 2.95118 8.34171 3.14645 8.14645C3.34171 7.95118 3.65829 7.95118 3.85355 8.14645L7 11.2929L7 2.5C7 2.22386 7.22386 2 7.5 2Z",
1936
1936
  fill: o,
1937
1937
  fillRule: "evenodd",
1938
1938
  clipRule: "evenodd"
1939
1939
  }));
1940
1940
  });
1941
- const Qo = [
1941
+ const nr = [
1942
1942
  "Scan doesn't load properly",
1943
1943
  "Takes too long",
1944
1944
  "I don't want to",
1945
1945
  "I want a second opinion",
1946
1946
  "I measured from IT"
1947
- ], xt = {
1947
+ ], pt = {
1948
1948
  padding: "8px 20px",
1949
1949
  borderRadius: 4,
1950
1950
  fontSize: 14,
@@ -1953,7 +1953,7 @@ let __tla = (async () => {
1953
1953
  fontFamily: "system-ui, sans-serif",
1954
1954
  letterSpacing: "0.4px",
1955
1955
  lineHeight: "36px"
1956
- }, qo = {
1956
+ }, or = {
1957
1957
  width: "100%",
1958
1958
  padding: "10px 12px",
1959
1959
  fontSize: 15,
@@ -1962,15 +1962,15 @@ let __tla = (async () => {
1962
1962
  outline: "none",
1963
1963
  boxSizing: "border-box",
1964
1964
  fontFamily: "system-ui, sans-serif"
1965
- }, Fn = ({ onSkip: t, onCancel: r }) => {
1966
- const [n, o] = B("confirm"), [s, a] = B(null), [c, l] = B(""), e = Q(() => {
1965
+ }, Ln = ({ onSkip: t, onCancel: r }) => {
1966
+ const [n, o] = W("confirm"), [s, a] = W(null), [c, l] = W(""), e = J(() => {
1967
1967
  o("reasons");
1968
- }, []), m = Q(() => {
1968
+ }, []), m = J(() => {
1969
1969
  n === "reasons" ? (o("confirm"), a(null), l("")) : r();
1970
1970
  }, [
1971
1971
  n,
1972
1972
  r
1973
- ]), d = s != null && (s !== "Other" || c.trim() !== ""), f = Q(() => {
1973
+ ]), d = s != null && (s !== "Other" || c.trim() !== ""), f = J(() => {
1974
1974
  !d || !s || t(s === "Other" ? `Other: ${c.trim()}` : s);
1975
1975
  }, [
1976
1976
  d,
@@ -2031,7 +2031,7 @@ let __tla = (async () => {
2031
2031
  },
2032
2032
  children: [
2033
2033
  [
2034
- ...Qo,
2034
+ ...nr,
2035
2035
  "Other"
2036
2036
  ].map((u) => F("label", {
2037
2037
  style: {
@@ -2078,7 +2078,7 @@ let __tla = (async () => {
2078
2078
  u.key === "Enter" && f();
2079
2079
  },
2080
2080
  style: {
2081
- ...qo,
2081
+ ...or,
2082
2082
  marginTop: 8,
2083
2083
  marginLeft: 40,
2084
2084
  width: "calc(100% - 40px)",
@@ -2099,7 +2099,7 @@ let __tla = (async () => {
2099
2099
  i("button", {
2100
2100
  onClick: m,
2101
2101
  style: {
2102
- ...xt,
2102
+ ...pt,
2103
2103
  backgroundColor: "#fff",
2104
2104
  border: "1px solid #ddd",
2105
2105
  color: "#666"
@@ -2110,7 +2110,7 @@ let __tla = (async () => {
2110
2110
  onClick: f,
2111
2111
  disabled: !d,
2112
2112
  style: {
2113
- ...xt,
2113
+ ...pt,
2114
2114
  backgroundColor: d ? "rgb(12, 67, 173)" : "#e0e0e0",
2115
2115
  border: "none",
2116
2116
  color: d ? "#fff" : "#9e9e9e",
@@ -2171,7 +2171,7 @@ let __tla = (async () => {
2171
2171
  i("button", {
2172
2172
  onClick: r,
2173
2173
  style: {
2174
- ...xt,
2174
+ ...pt,
2175
2175
  backgroundColor: "#fff",
2176
2176
  border: "1px solid #bdbdbd",
2177
2177
  color: "#333"
@@ -2181,7 +2181,7 @@ let __tla = (async () => {
2181
2181
  i("button", {
2182
2182
  onClick: e,
2183
2183
  style: {
2184
- ...xt,
2184
+ ...pt,
2185
2185
  backgroundColor: "rgb(12, 67, 173)",
2186
2186
  border: "none",
2187
2187
  color: "#fff"
@@ -2193,7 +2193,7 @@ let __tla = (async () => {
2193
2193
  ]
2194
2194
  })
2195
2195
  });
2196
- }, Ht = {
2196
+ }, Tt = {
2197
2197
  padding: "8px 20px",
2198
2198
  borderRadius: 4,
2199
2199
  fontSize: 14,
@@ -2202,7 +2202,7 @@ let __tla = (async () => {
2202
2202
  fontFamily: "system-ui, sans-serif",
2203
2203
  letterSpacing: "0.4px",
2204
2204
  lineHeight: "36px"
2205
- }, mn = {
2205
+ }, bn = {
2206
2206
  width: "100%",
2207
2207
  padding: "10px 12px",
2208
2208
  fontSize: 15,
@@ -2211,8 +2211,8 @@ let __tla = (async () => {
2211
2211
  outline: "none",
2212
2212
  boxSizing: "border-box",
2213
2213
  fontFamily: "system-ui, sans-serif"
2214
- }, er = ({ amputationType: t, spacingInches: r, scanMeasurements: n, scanFrontalHeight: o, onSave: s, onSkip: a, onFormChange: c, onHeightChange: l, initialValues: e, initialFrontalHeight: m }) => {
2215
- const d = t === "AK" ? "IT" : "MPT", f = r, u = t === "AK" ? 18 : 9, x = H(() => {
2214
+ }, rr = ({ amputationType: t, spacingInches: r, scanMeasurements: n, scanFrontalHeight: o, onSave: s, onSkip: a, onFormChange: c, onHeightChange: l, initialValues: e, initialFrontalHeight: m }) => {
2215
+ const d = t === "AK" ? "IT" : "MPT", f = r, u = t === "AK" ? 18 : 9, x = j(() => {
2216
2216
  const h = [];
2217
2217
  for (let C = 2; C >= 1; C -= f) h.push(`${C}\u2033 above ${d}`);
2218
2218
  h.push(`At ${d}`);
@@ -2222,38 +2222,38 @@ let __tla = (async () => {
2222
2222
  f,
2223
2223
  d,
2224
2224
  u
2225
- ]), [S, p] = B(() => {
2225
+ ]), [S, p] = W(() => {
2226
2226
  if (!e) return {};
2227
2227
  const h = {};
2228
- return x.forEach((C, L) => {
2229
- e[L] != null && e[L] !== 0 && (h[C] = e[L].toFixed(1));
2228
+ return x.forEach((C, P) => {
2229
+ e[P] != null && e[P] !== 0 && (h[C] = e[P].toFixed(1));
2230
2230
  }), h;
2231
- }), [g, b] = B(m && m > 0 ? m.toFixed(1) : ""), [A, P] = B(false), v = H(() => x.map((h) => {
2231
+ }), [g, b] = W(m && m > 0 ? m.toFixed(1) : ""), [A, L] = W(false), v = j(() => x.map((h) => {
2232
2232
  const C = S[h];
2233
2233
  return C != null && C !== "" && !isNaN(parseFloat(C)) ? parseFloat(C) : 0;
2234
2234
  }), [
2235
2235
  x,
2236
2236
  S
2237
2237
  ]);
2238
- K(() => {
2238
+ q(() => {
2239
2239
  c == null ? void 0 : c(v);
2240
2240
  }, [
2241
2241
  v,
2242
2242
  c
2243
- ]), K(() => {
2243
+ ]), q(() => {
2244
2244
  const h = g !== "" && !isNaN(parseFloat(g)) ? parseFloat(g) : void 0;
2245
2245
  l == null ? void 0 : l(h);
2246
2246
  }, [
2247
2247
  g,
2248
2248
  l
2249
2249
  ]);
2250
- const k = H(() => {
2251
- const h = g !== "" && !isNaN(parseFloat(g)), C = v.some((L) => L !== 0);
2250
+ const k = j(() => {
2251
+ const h = g !== "" && !isNaN(parseFloat(g)), C = v.some((P) => P !== 0);
2252
2252
  return h || C;
2253
2253
  }, [
2254
2254
  v,
2255
2255
  g
2256
- ]), w = Q(() => {
2256
+ ]), w = J(() => {
2257
2257
  if (!k) return;
2258
2258
  const h = g !== "" && !isNaN(parseFloat(g)) ? parseFloat(g) : 0;
2259
2259
  s({
@@ -2265,13 +2265,13 @@ let __tla = (async () => {
2265
2265
  v,
2266
2266
  g,
2267
2267
  s
2268
- ]), z = Q(() => {
2268
+ ]), M = J(() => {
2269
2269
  const h = {};
2270
- x.forEach((C, L) => {
2271
- const I = n[L];
2270
+ x.forEach((C, P) => {
2271
+ const I = n[P];
2272
2272
  if (I) {
2273
- const _ = I.modifiedValue ?? I.originalValue;
2274
- h[C] = _.toFixed(1);
2273
+ const D = I.modifiedValue ?? I.originalValue;
2274
+ h[C] = D.toFixed(1);
2275
2275
  }
2276
2276
  }), p(h), o > 0 && b(o.toFixed(1));
2277
2277
  }, [
@@ -2288,9 +2288,9 @@ let __tla = (async () => {
2288
2288
  fontFamily: "system-ui, sans-serif"
2289
2289
  },
2290
2290
  children: [
2291
- A && i(Fn, {
2291
+ A && i(Ln, {
2292
2292
  onSkip: a,
2293
- onCancel: () => P(false)
2293
+ onCancel: () => L(false)
2294
2294
  }),
2295
2295
  F("div", {
2296
2296
  style: {
@@ -2325,9 +2325,9 @@ let __tla = (async () => {
2325
2325
  ]
2326
2326
  }),
2327
2327
  i("button", {
2328
- onClick: z,
2328
+ onClick: M,
2329
2329
  style: {
2330
- ...Ht,
2330
+ ...Tt,
2331
2331
  backgroundColor: "#fff",
2332
2332
  border: "2px solid rgb(12, 67, 173)",
2333
2333
  color: "rgb(12, 67, 173)",
@@ -2345,7 +2345,7 @@ let __tla = (async () => {
2345
2345
  gap: 4
2346
2346
  },
2347
2347
  children: [
2348
- i(Jo, {
2348
+ i(tr, {
2349
2349
  style: {
2350
2350
  width: 14,
2351
2351
  height: 14
@@ -2403,12 +2403,12 @@ let __tla = (async () => {
2403
2403
  type: "number",
2404
2404
  step: "0.1",
2405
2405
  value: S[h] ?? "",
2406
- onChange: (L) => p((I) => ({
2406
+ onChange: (P) => p((I) => ({
2407
2407
  ...I,
2408
- [h]: L.target.value
2408
+ [h]: P.target.value
2409
2409
  })),
2410
2410
  style: {
2411
- ...mn,
2411
+ ...bn,
2412
2412
  padding: "6px 8px",
2413
2413
  fontSize: 13,
2414
2414
  borderColor: S[h] ? "rgb(12, 67, 173)" : "#ccc",
@@ -2451,7 +2451,7 @@ let __tla = (async () => {
2451
2451
  value: g,
2452
2452
  onChange: (h) => b(h.target.value),
2453
2453
  style: {
2454
- ...mn,
2454
+ ...bn,
2455
2455
  padding: "6px 8px",
2456
2456
  fontSize: 13,
2457
2457
  borderColor: g ? "rgb(12, 67, 173)" : "#ccc",
@@ -2478,7 +2478,7 @@ let __tla = (async () => {
2478
2478
  onClick: w,
2479
2479
  disabled: !k,
2480
2480
  style: {
2481
- ...Ht,
2481
+ ...Tt,
2482
2482
  backgroundColor: k ? "rgb(12, 67, 173)" : "#e0e0e0",
2483
2483
  border: "none",
2484
2484
  color: k ? "#fff" : "#9e9e9e",
@@ -2490,9 +2490,9 @@ let __tla = (async () => {
2490
2490
  children: "Save Measurements"
2491
2491
  }),
2492
2492
  i("button", {
2493
- onClick: () => P(true),
2493
+ onClick: () => L(true),
2494
2494
  style: {
2495
- ...Ht,
2495
+ ...Tt,
2496
2496
  backgroundColor: "#fff",
2497
2497
  border: "1px solid #bdbdbd",
2498
2498
  color: "#666",
@@ -2507,37 +2507,37 @@ let __tla = (async () => {
2507
2507
  ]
2508
2508
  });
2509
2509
  };
2510
- function Ln(t, r, n) {
2510
+ function In(t, r, n) {
2511
2511
  const o = t.getAttribute("position"), s = n - r;
2512
2512
  if (s < 1) return null;
2513
2513
  const a = 30, c = s / a, l = [];
2514
2514
  for (let g = 0; g < a; g++) {
2515
2515
  const b = r + g * c, A = r + (g + 1) * c;
2516
- let P = 0, v = 0, k = 0, w = 0;
2517
- for (let z = 0; z < o.count; z++) {
2518
- const h = o.getY(z);
2519
- h >= b && h < A && (P += o.getX(z), v += h, k += o.getZ(z), w++);
2516
+ let L = 0, v = 0, k = 0, w = 0;
2517
+ for (let M = 0; M < o.count; M++) {
2518
+ const h = o.getY(M);
2519
+ h >= b && h < A && (L += o.getX(M), v += h, k += o.getZ(M), w++);
2520
2520
  }
2521
- w > 20 && l.push(new M(P / w, v / w, k / w));
2521
+ w > 20 && l.push(new z(L / w, v / w, k / w));
2522
2522
  }
2523
2523
  if (l.length < 5) return null;
2524
- const e = new M();
2524
+ const e = new z();
2525
2525
  for (const g of l) e.add(g);
2526
2526
  e.divideScalar(l.length);
2527
2527
  let m = 0, d = 0, f = 0, u = 0, x = 0, S = 0;
2528
2528
  for (const g of l) {
2529
- const b = g.x - e.x, A = g.y - e.y, P = g.z - e.z;
2530
- m += b * b, d += b * A, f += b * P, u += A * A, x += A * P, S += P * P;
2529
+ const b = g.x - e.x, A = g.y - e.y, L = g.z - e.z;
2530
+ m += b * b, d += b * A, f += b * L, u += A * A, x += A * L, S += L * L;
2531
2531
  }
2532
- let p = new M(0.01, 1, 0.01).normalize();
2532
+ let p = new z(0.01, 1, 0.01).normalize();
2533
2533
  for (let g = 0; g < 30; g++) {
2534
- const b = m * p.x + d * p.y + f * p.z, A = d * p.x + u * p.y + x * p.z, P = f * p.x + x * p.y + S * p.z, v = new M(b, A, P), k = v.length();
2534
+ const b = m * p.x + d * p.y + f * p.z, A = d * p.x + u * p.y + x * p.z, L = f * p.x + x * p.y + S * p.z, v = new z(b, A, L), k = v.length();
2535
2535
  if (k < 1e-10 || (v.divideScalar(k), p.distanceTo(v) < 1e-8)) break;
2536
2536
  p = v;
2537
2537
  }
2538
2538
  return p.y < 0 && p.negate(), p;
2539
2539
  }
2540
- const tr = {
2540
+ const ir = {
2541
2541
  pcaAxes: true,
2542
2542
  obb: true,
2543
2543
  obbAxis: true,
@@ -2547,13 +2547,13 @@ let __tla = (async () => {
2547
2547
  landmarkAxis: true,
2548
2548
  iterativePCA: false,
2549
2549
  fullRegionPCA: true
2550
- }, nr = [
2550
+ }, sr = [
2551
2551
  "#ff4444",
2552
2552
  "#44cc44",
2553
2553
  "#4488ff"
2554
2554
  ];
2555
- function Pn(t) {
2556
- const r = t.getAttribute("position"), n = r.count, o = new M();
2555
+ function _n(t) {
2556
+ const r = t.getAttribute("position"), n = r.count, o = new z();
2557
2557
  for (let p = 0; p < n; p++) o.x += r.getX(p), o.y += r.getY(p), o.z += r.getZ(p);
2558
2558
  o.divideScalar(n);
2559
2559
  let s = 0, a = 0, c = 0, l = 0, e = 0, m = 0;
@@ -2580,9 +2580,9 @@ let __tla = (async () => {
2580
2580
  ]
2581
2581
  ];
2582
2582
  for (let p = 0; p < 3; p++) {
2583
- let g = new M(1 + p * 0.1, 1 - p * 0.1, 0.5 + p * 0.3).normalize(), b = 0;
2583
+ let g = new z(1 + p * 0.1, 1 - p * 0.1, 0.5 + p * 0.3).normalize(), b = 0;
2584
2584
  for (let A = 0; A < 100; A++) {
2585
- const P = u[0][0] * g.x + u[0][1] * g.y + u[0][2] * g.z, v = u[1][0] * g.x + u[1][1] * g.y + u[1][2] * g.z, k = u[2][0] * g.x + u[2][1] * g.y + u[2][2] * g.z, w = new M(P, v, k);
2585
+ const L = u[0][0] * g.x + u[0][1] * g.y + u[0][2] * g.z, v = u[1][0] * g.x + u[1][1] * g.y + u[1][2] * g.z, k = u[2][0] * g.x + u[2][1] * g.y + u[2][2] * g.z, w = new z(L, v, k);
2586
2586
  if (b = w.length(), b < 1e-12) break;
2587
2587
  if (w.divideScalar(b), g.distanceTo(w) < 1e-10) {
2588
2588
  g = w;
@@ -2591,7 +2591,7 @@ let __tla = (async () => {
2591
2591
  g = w;
2592
2592
  }
2593
2593
  d.push(g.clone()), f.push(b);
2594
- for (let A = 0; A < 3; A++) for (let P = 0; P < 3; P++) {
2594
+ for (let A = 0; A < 3; A++) for (let L = 0; L < 3; L++) {
2595
2595
  const v = [
2596
2596
  g.x,
2597
2597
  g.y,
@@ -2600,11 +2600,11 @@ let __tla = (async () => {
2600
2600
  g.x,
2601
2601
  g.y,
2602
2602
  g.z
2603
- ][P];
2604
- u[A][P] -= b * v * k;
2603
+ ][L];
2604
+ u[A][L] -= b * v * k;
2605
2605
  }
2606
2606
  }
2607
- const x = new M();
2607
+ const x = new z();
2608
2608
  for (let p = 0; p < n; p++) x.x += r.getX(p), x.y += r.getY(p), x.z += r.getZ(p);
2609
2609
  x.divideScalar(n);
2610
2610
  const S = [
@@ -2615,9 +2615,9 @@ let __tla = (async () => {
2615
2615
  for (let p = 0; p < 3; p++) {
2616
2616
  let g = 1 / 0, b = -1 / 0;
2617
2617
  const A = d[p];
2618
- for (let P = 0; P < n; P++) {
2619
- const v = r.getX(P) - x.x, k = r.getY(P) - x.y, w = r.getZ(P) - x.z, z = v * A.x + k * A.y + w * A.z;
2620
- z < g && (g = z), z > b && (b = z);
2618
+ for (let L = 0; L < n; L++) {
2619
+ const v = r.getX(L) - x.x, k = r.getY(L) - x.y, w = r.getZ(L) - x.z, M = v * A.x + k * A.y + w * A.z;
2620
+ M < g && (g = M), M > b && (b = M);
2621
2621
  }
2622
2622
  S[p] = (b - g) / 2;
2623
2623
  }
@@ -2628,7 +2628,7 @@ let __tla = (async () => {
2628
2628
  halfExtents: S
2629
2629
  };
2630
2630
  }
2631
- function or({ pca: t }) {
2631
+ function lr({ pca: t }) {
2632
2632
  return i("group", {
2633
2633
  children: t.axes.map((r, n) => {
2634
2634
  const o = t.center.clone().addScaledVector(r, t.halfExtents[n]), s = t.center.clone().addScaledVector(r, -t.halfExtents[n]);
@@ -2637,14 +2637,14 @@ let __tla = (async () => {
2637
2637
  s,
2638
2638
  o
2639
2639
  ],
2640
- color: nr[n],
2640
+ color: sr[n],
2641
2641
  lineWidth: 2
2642
2642
  }, n);
2643
2643
  })
2644
2644
  });
2645
2645
  }
2646
- function rr({ pca: t }) {
2647
- const r = H(() => {
2646
+ function ar({ pca: t }) {
2647
+ const r = j(() => {
2648
2648
  const { center: n, axes: o, halfExtents: s } = t, a = [];
2649
2649
  for (let l = -1; l <= 1; l += 2) for (let e = -1; e <= 1; e += 2) for (let m = -1; m <= 1; m += 2) a.push(n.clone().addScaledVector(o[0], l * s[0]).addScaledVector(o[1], e * s[1]).addScaledVector(o[2], m * s[2]));
2650
2650
  return [
@@ -2713,12 +2713,12 @@ let __tla = (async () => {
2713
2713
  }, o))
2714
2714
  });
2715
2715
  }
2716
- function ir({ redPoint: t, greenPoint: r }) {
2717
- const n = H(() => new M().subVectors(r, t).normalize(), [
2716
+ function cr({ redPoint: t, greenPoint: r }) {
2717
+ const n = j(() => new z().subVectors(r, t).normalize(), [
2718
2718
  t,
2719
2719
  r
2720
- ]), o = H(() => {
2721
- const a = n.dot(new M(0, 1, 0));
2720
+ ]), o = j(() => {
2721
+ const a = n.dot(new z(0, 1, 0));
2722
2722
  return Math.acos(Math.min(1, Math.abs(a))) * 180 / Math.PI;
2723
2723
  }, [
2724
2724
  n
@@ -2766,13 +2766,13 @@ let __tla = (async () => {
2766
2766
  ]
2767
2767
  });
2768
2768
  }
2769
- function sr({ geometry: t, redY: r, greenY: n, modelSize: o }) {
2770
- const a = o * 0.15, c = H(() => {
2769
+ function dr({ geometry: t, redY: r, greenY: n, modelSize: o }) {
2770
+ const a = o * 0.15, c = j(() => {
2771
2771
  const l = [];
2772
2772
  let e = n - 10;
2773
- const m = new M(0, 1, 0);
2773
+ const m = new z(0, 1, 0);
2774
2774
  for (; e > r; ) {
2775
- const d = Math.min(e, n), f = Math.max(e, n), u = Ln(t, d, f);
2775
+ const d = Math.min(e, n), f = Math.max(e, n), u = In(t, d, f);
2776
2776
  if (u) {
2777
2777
  const x = u.dot(m), S = Math.acos(Math.min(1, Math.abs(x))) * 180 / Math.PI;
2778
2778
  l.push({
@@ -2792,7 +2792,7 @@ let __tla = (async () => {
2792
2792
  ]);
2793
2793
  return i("group", {
2794
2794
  children: c.map((l, e) => {
2795
- const m = (l.regionMin + l.regionMax) / 2, d = new M(0, m, 0), f = d.clone().addScaledVector(l.axis, a), u = d.clone().addScaledVector(l.axis, -a), x = e / Math.max(1, c.length - 1), S = l.angleDeg < 0.5 ? `hsl(${120 - x * 120}, 80%, 60%)` : `hsl(${40 - l.angleDeg * 2}, 90%, 55%)`;
2795
+ const m = (l.regionMin + l.regionMax) / 2, d = new z(0, m, 0), f = d.clone().addScaledVector(l.axis, a), u = d.clone().addScaledVector(l.axis, -a), x = e / Math.max(1, c.length - 1), S = l.angleDeg < 0.5 ? `hsl(${120 - x * 120}, 80%, 60%)` : `hsl(${40 - l.angleDeg * 2}, 90%, 55%)`;
2796
2796
  return F("group", {
2797
2797
  children: [
2798
2798
  i(de, {
@@ -2807,8 +2807,8 @@ let __tla = (async () => {
2807
2807
  }),
2808
2808
  i(de, {
2809
2809
  points: [
2810
- new M(-a * 0.3, l.regionMin, 0),
2811
- new M(a * 0.3, l.regionMin, 0)
2810
+ new z(-a * 0.3, l.regionMin, 0),
2811
+ new z(a * 0.3, l.regionMin, 0)
2812
2812
  ],
2813
2813
  color: S,
2814
2814
  lineWidth: 0.5,
@@ -2820,11 +2820,11 @@ let __tla = (async () => {
2820
2820
  })
2821
2821
  });
2822
2822
  }
2823
- function lr({ geometry: t, redY: r, greenY: n, modelSize: o }) {
2824
- const s = H(() => {
2825
- const f = Ln(t, r, n);
2823
+ function fr({ geometry: t, redY: r, greenY: n, modelSize: o }) {
2824
+ const s = j(() => {
2825
+ const f = In(t, r, n);
2826
2826
  if (!f) return null;
2827
- const u = f.dot(new M(0, 1, 0)), x = Math.acos(Math.min(1, Math.abs(u))) * 180 / Math.PI;
2827
+ const u = f.dot(new z(0, 1, 0)), x = Math.acos(Math.min(1, Math.abs(u))) * 180 / Math.PI;
2828
2828
  return {
2829
2829
  axis: f,
2830
2830
  angleDeg: x
@@ -2835,7 +2835,7 @@ let __tla = (async () => {
2835
2835
  n
2836
2836
  ]);
2837
2837
  if (!s) return null;
2838
- const a = (r + n) / 2, c = new M(0, a, 0), l = o * 0.4, e = c.clone().addScaledVector(s.axis, l), m = c.clone().addScaledVector(s.axis, -l), d = s.angleDeg < 0.5 ? "#00ffff" : s.angleDeg < 2 ? "#ffcc00" : "#ff6600";
2838
+ const a = (r + n) / 2, c = new z(0, a, 0), l = o * 0.4, e = c.clone().addScaledVector(s.axis, l), m = c.clone().addScaledVector(s.axis, -l), d = s.angleDeg < 0.5 ? "#00ffff" : s.angleDeg < 2 ? "#ffcc00" : "#ff6600";
2839
2839
  return i("group", {
2840
2840
  children: i(de, {
2841
2841
  points: [
@@ -2850,7 +2850,7 @@ let __tla = (async () => {
2850
2850
  })
2851
2851
  });
2852
2852
  }
2853
- function ar({ pca: t, modelSize: r }) {
2853
+ function ur({ pca: t, modelSize: r }) {
2854
2854
  const n = t.axes[0], o = r * 0.6, s = t.center.clone().addScaledVector(n, o), a = t.center.clone().addScaledVector(n, -o);
2855
2855
  return i(de, {
2856
2856
  points: [
@@ -2864,24 +2864,24 @@ let __tla = (async () => {
2864
2864
  gapSize: 2
2865
2865
  });
2866
2866
  }
2867
- function cr({ geometry: t, redY: r, greenY: n, modelSize: o, measurementGeometry: s }) {
2868
- const a = H(() => {
2869
- const d = s ?? t, f = jt(d), u = new M(0, 1, 0), x = 5, p = n + 3 * 25.4, g = [];
2867
+ function pr({ geometry: t, redY: r, greenY: n, modelSize: o, measurementGeometry: s }) {
2868
+ const a = j(() => {
2869
+ const d = s ?? t, f = $t(d), u = new z(0, 1, 0), x = 5, p = n + 3 * 25.4, g = [];
2870
2870
  for (let h = r + x; h < p; h += x) {
2871
- const C = zo(f, d, new M(0, h, 0), u);
2871
+ const C = Po(f, d, new z(0, h, 0), u);
2872
2872
  C > 0 && g.push({
2873
2873
  y: h,
2874
2874
  circ: C
2875
2875
  });
2876
2876
  }
2877
2877
  if (g.length < 5) return null;
2878
- const b = n - r, A = r + b * 0.3, P = r + b * 0.7, v = g.filter((h) => h.y >= A && h.y <= P);
2878
+ const b = n - r, A = r + b * 0.3, L = r + b * 0.7, v = g.filter((h) => h.y >= A && h.y <= L);
2879
2879
  if (v.length < 3) return null;
2880
- const k = v.map((h) => h.circ).sort((h, C) => h - C), w = k[Math.floor(k.length / 2)], z = Math.max(...g.map((h) => h.circ));
2880
+ const k = v.map((h) => h.circ).sort((h, C) => h - C), w = k[Math.floor(k.length / 2)], M = Math.max(...g.map((h) => h.circ));
2881
2881
  return {
2882
2882
  circumferences: g,
2883
2883
  baseline: w,
2884
- maxCirc: z
2884
+ maxCirc: M
2885
2885
  };
2886
2886
  }, [
2887
2887
  t,
@@ -2896,8 +2896,8 @@ let __tla = (async () => {
2896
2896
  const x = f / l, S = x > 1.6 ? "#ff4444" : x > 1.3 ? "#ffcc00" : "#22cc66", p = f * m;
2897
2897
  return i(de, {
2898
2898
  points: [
2899
- new M(-p, d, 0),
2900
- new M(p, d, 0)
2899
+ new z(-p, d, 0),
2900
+ new z(p, d, 0)
2901
2901
  ],
2902
2902
  color: S,
2903
2903
  lineWidth: 1.5,
@@ -2907,12 +2907,12 @@ let __tla = (async () => {
2907
2907
  }),
2908
2908
  (() => {
2909
2909
  const d = l * 1.6 * m, f = c[0].y, u = c[c.length - 1].y;
2910
- return F(He, {
2910
+ return F(Ee, {
2911
2911
  children: [
2912
2912
  i(de, {
2913
2913
  points: [
2914
- new M(-d, f, 0),
2915
- new M(-d, u, 0)
2914
+ new z(-d, f, 0),
2915
+ new z(-d, u, 0)
2916
2916
  ],
2917
2917
  color: "#ff4444",
2918
2918
  lineWidth: 1,
@@ -2924,8 +2924,8 @@ let __tla = (async () => {
2924
2924
  }),
2925
2925
  i(de, {
2926
2926
  points: [
2927
- new M(d, f, 0),
2928
- new M(d, u, 0)
2927
+ new z(d, f, 0),
2928
+ new z(d, u, 0)
2929
2929
  ],
2930
2930
  color: "#ff4444",
2931
2931
  lineWidth: 1,
@@ -2941,12 +2941,12 @@ let __tla = (async () => {
2941
2941
  ]
2942
2942
  });
2943
2943
  }
2944
- function dr({ componentDebug: t }) {
2944
+ function hr({ componentDebug: t }) {
2945
2945
  return i("group", {
2946
2946
  children: t.geometries.map((r, n) => {
2947
2947
  const o = t.colors[n] ?? "#888888", s = n === t.innerIdx;
2948
2948
  r.computeBoundingBox();
2949
- const a = new M();
2949
+ const a = new z();
2950
2950
  return r.boundingBox.getCenter(a), F("group", {
2951
2951
  children: [
2952
2952
  i("mesh", {
@@ -2975,7 +2975,7 @@ let __tla = (async () => {
2975
2975
  }),
2976
2976
  i("group", {
2977
2977
  position: a,
2978
- children: i(Ze, {
2978
+ children: i(je, {
2979
2979
  center: true,
2980
2980
  style: {
2981
2981
  pointerEvents: "none"
@@ -3005,8 +3005,8 @@ let __tla = (async () => {
3005
3005
  })
3006
3006
  });
3007
3007
  }
3008
- function fr({ geometry: t, aoData: r }) {
3009
- const n = H(() => {
3008
+ function gr({ geometry: t, aoData: r }) {
3009
+ const n = j(() => {
3010
3010
  const o = t.toNonIndexed(), s = o.getAttribute("position"), a = r.length, c = s.count, l = new Float32Array(c * 3);
3011
3011
  for (let e = 0; e < a && e * 3 + 2 < c; e++) {
3012
3012
  const m = r[e], d = m, f = m < 0.5 ? 0.8 - m * 1.2 : 0.2 * (1 - m), u = 1 - m;
@@ -3020,7 +3020,7 @@ let __tla = (async () => {
3020
3020
  t,
3021
3021
  r
3022
3022
  ]);
3023
- return H(() => () => n.dispose(), [
3023
+ return j(() => () => n.dispose(), [
3024
3024
  n
3025
3025
  ]), i("mesh", {
3026
3026
  geometry: n,
@@ -3034,35 +3034,35 @@ let __tla = (async () => {
3034
3034
  })
3035
3035
  });
3036
3036
  }
3037
- function ur({ mesh: t, layers: r, landmarkPoints: n, componentDebug: o, aoData: s, aoGeometry: a, measurementGeometry: c }) {
3038
- const l = t.geometry, e = H(() => l.getAttribute("position") ? Pn(l) : null, [
3037
+ function mr({ mesh: t, layers: r, landmarkPoints: n, componentDebug: o, aoData: s, aoGeometry: a, measurementGeometry: c }) {
3038
+ const l = t.geometry, e = j(() => l.getAttribute("position") ? _n(l) : null, [
3039
3039
  l
3040
- ]), m = H(() => !n || n.length < 2 ? null : {
3041
- red: new M(n[1].position.x, n[1].position.y, n[1].position.z),
3042
- green: new M(n[0].position.x, n[0].position.y, n[0].position.z)
3040
+ ]), m = j(() => !n || n.length < 2 ? null : {
3041
+ red: new z(n[1].position.x, n[1].position.y, n[1].position.z),
3042
+ green: new z(n[0].position.x, n[0].position.y, n[0].position.z)
3043
3043
  }, [
3044
3044
  n
3045
3045
  ]);
3046
3046
  return F("group", {
3047
3047
  children: [
3048
- r.pcaAxes && e && i(or, {
3048
+ r.pcaAxes && e && i(lr, {
3049
3049
  pca: e
3050
3050
  }),
3051
- r.obb && e && i(rr, {
3051
+ r.obb && e && i(ar, {
3052
3052
  pca: e
3053
3053
  }),
3054
- r.obbAxis && e && i(ar, {
3054
+ r.obbAxis && e && i(ur, {
3055
3055
  pca: e,
3056
3056
  modelSize: e.halfExtents[0] ? Math.max(...e.halfExtents) * 2 : 100
3057
3057
  }),
3058
- r.shellComponents && o && i(dr, {
3058
+ r.shellComponents && o && i(hr, {
3059
3059
  componentDebug: o
3060
3060
  }),
3061
- r.ambientOcclusion && s && s.length > 0 && i(fr, {
3061
+ r.ambientOcclusion && s && s.length > 0 && i(gr, {
3062
3062
  geometry: a ?? l,
3063
3063
  aoData: s
3064
3064
  }),
3065
- r.circumferenceScan && m && i(cr, {
3065
+ r.circumferenceScan && m && i(pr, {
3066
3066
  geometry: l,
3067
3067
  redY: m.red.y,
3068
3068
  greenY: m.green.y,
@@ -3080,17 +3080,17 @@ let __tla = (async () => {
3080
3080
  depthWrite: false
3081
3081
  })
3082
3082
  }),
3083
- r.landmarkAxis && m && i(ir, {
3083
+ r.landmarkAxis && m && i(cr, {
3084
3084
  redPoint: m.red,
3085
3085
  greenPoint: m.green
3086
3086
  }),
3087
- r.iterativePCA && m && i(sr, {
3087
+ r.iterativePCA && m && i(dr, {
3088
3088
  geometry: l,
3089
3089
  redY: m.red.y,
3090
3090
  greenY: m.green.y,
3091
3091
  modelSize: (e == null ? void 0 : e.halfExtents[0]) ? Math.max(...e.halfExtents) * 2 : 100
3092
3092
  }),
3093
- r.fullRegionPCA && m && i(lr, {
3093
+ r.fullRegionPCA && m && i(fr, {
3094
3094
  geometry: l,
3095
3095
  redY: m.red.y,
3096
3096
  greenY: m.green.y,
@@ -3099,10 +3099,10 @@ let __tla = (async () => {
3099
3099
  ]
3100
3100
  });
3101
3101
  }
3102
- function pr({ mesh: t }) {
3103
- const r = t.geometry, n = H(() => {
3102
+ function xr({ mesh: t }) {
3103
+ const r = t.geometry, n = j(() => {
3104
3104
  if (!r.getAttribute("position")) return null;
3105
- const a = Pn(r), c = a.axes[0], l = a.halfExtents[0] * 1.3;
3105
+ const a = _n(r), c = a.axes[0], l = a.halfExtents[0] * 1.3;
3106
3106
  return {
3107
3107
  axis: c,
3108
3108
  center: a.center,
@@ -3129,7 +3129,7 @@ let __tla = (async () => {
3129
3129
  renderOrder: 999
3130
3130
  });
3131
3131
  }
3132
- const In = [
3132
+ const Dn = [
3133
3133
  {
3134
3134
  key: "pcaAxes",
3135
3135
  label: "PCA Axes (full mesh)",
@@ -3185,10 +3185,10 @@ let __tla = (async () => {
3185
3185
  color: "#00ffff",
3186
3186
  group: "Alignment"
3187
3187
  }
3188
- ], hr = [
3189
- ...new Set(In.map((t) => t.group))
3188
+ ], br = [
3189
+ ...new Set(Dn.map((t) => t.group))
3190
3190
  ];
3191
- function gr({ layers: t, onToggleLayer: r, isDoubleShell: n }) {
3191
+ function yr({ layers: t, onToggleLayer: r, isDoubleShell: n }) {
3192
3192
  return F("div", {
3193
3193
  style: {
3194
3194
  position: "absolute",
@@ -3217,8 +3217,8 @@ let __tla = (async () => {
3217
3217
  },
3218
3218
  children: "Debug Layers"
3219
3219
  }),
3220
- hr.map((o) => {
3221
- const s = In.filter((a) => a.group === o && !(a.hideWhenDoubleShell && n));
3220
+ br.map((o) => {
3221
+ const s = Dn.filter((a) => a.group === o && !(a.hideWhenDoubleShell && n));
3222
3222
  return s.length === 0 ? null : F("div", {
3223
3223
  children: [
3224
3224
  i("div", {
@@ -3278,493 +3278,497 @@ let __tla = (async () => {
3278
3278
  ]
3279
3279
  });
3280
3280
  }
3281
- const mr = ({ config: t, spacingType: r, scanUrl: n, formMeasurements: o, onComplete: s, isDebugUser: a = false, onAnalyticsEvent: c, wasmModule: l }) => {
3282
- const [e, m] = B(null), [d, f] = B(0), [u, x] = B(false), [S, p] = B(false), [g, b] = B(""), [A, P] = B("3D"), [v, k] = B(r === "AK" ? 2 : 1), [w, z] = B(false), [h, C] = B(null), [L, I] = B(r ?? null), [_, E] = B("mm"), [V, Y] = B(false), [q, ye] = B(""), [ae, fe] = B(false), [se, ee] = B(false), [X, ue] = B(false), [Z, pe] = B(false), [me, he] = B(null), [$, ne] = B(null), [xe, Se] = B(null), [we, re] = B(false), [j, N] = B([]), [Ie, Le] = B(null), [Ke, le] = B(null), [ke, Mt] = B(null), [zt, Yt] = B(null), [_n, Xt] = B(false), [At, Gt] = B(null), [kt, De] = B(null), [We, Rn] = B(false), [Zt, Wn] = B(tr), [Ve, Kt] = B("obj"), [ve, Ft] = B(o), [Qe, Lt] = B(true), [je, st] = B(false), [lt, Ut] = B(false), [ze, at] = B(false), [Bn, Pt] = B(false), [qe, En] = B(null), [Tn, On] = B(void 0), [$n, Hn] = B(void 0), [Jt] = B("#c8c8c8"), [Vn] = B(1), [Te, jn] = B(false), [It, Qt] = B([]), ct = ie(null), Ne = ie(null), dt = ie(false), Nn = ie(null), Dt = ie(null), _t = ie(null), qt = ie(null);
3283
- K(() => {
3284
- import("./html2canvas.esm-Dmi1NfiH.js").then((y) => {
3285
- qt.current = y.default;
3286
- }).catch(() => {
3287
- });
3288
- }, []);
3289
- const et = Q(async () => {
3290
- if (_t.current) try {
3291
- const y = qt.current ?? (await import("./html2canvas.esm-Dmi1NfiH.js")).default, D = _t.current, W = 2, R = async (J = false) => {
3292
- const oe = await y(D, {
3293
- backgroundColor: null,
3294
- useCORS: true,
3295
- scale: W,
3296
- ignoreElements: (ot) => {
3297
- var _a, _b;
3298
- const rt = (_a = ot.style) == null ? void 0 : _a.zIndex;
3299
- return rt === "10" || rt === "50" || ((_b = ot.hasAttribute) == null ? void 0 : _b.call(ot, "data-finalizing-overlay"));
3300
- }
3301
- }), te = D.getBoundingClientRect(), Fe = te.width, Be = te.height;
3302
- let Me, Ae, be, $e;
3303
- if (J) {
3304
- const _e = oe.getContext("2d").getImageData(0, 0, oe.width, oe.height).data;
3305
- let Re = oe.width, Ee = oe.height, it = 0, gt = 0;
3306
- for (let Ye = 0; Ye < oe.height; Ye++) for (let Xe = 0; Xe < oe.width; Xe++) {
3307
- const ro = (Ye * oe.width + Xe) * 4;
3308
- _e[ro + 3] > 20 && (Xe < Re && (Re = Xe), Xe > it && (it = Xe), Ye < Ee && (Ee = Ye), Ye > gt && (gt = Ye));
3309
- }
3310
- it <= Re && (Re = 0, Ee = 0, it = oe.width, gt = oe.height), Me = Re / W, Ae = Ee / W, be = it / W, $e = gt / W;
3311
- } else {
3312
- const ot = D.querySelectorAll("[style*='pointer-events: none']");
3313
- Me = 1 / 0, Ae = 1 / 0, be = -1 / 0, $e = -1 / 0, ot.forEach((rt) => {
3314
- const _e = rt.getBoundingClientRect();
3281
+ const wr = ({ config: t, spacingType: r, scanUrl: n, formMeasurements: o, onComplete: s, isDebugUser: a = false, onAnalyticsEvent: c, wasmModule: l }) => {
3282
+ const [e, m] = W(null), [d, f] = W(0), [u, x] = W(false), [S, p] = W(false), [g, b] = W(""), [A, L] = W("3D"), [v, k] = W(r === "AK" ? 2 : 1), [w, M] = W(false), [h, C] = W(null), [P, I] = W(r ?? null), [D, E] = W("mm"), [V, X] = W(false), [Q, be] = W(""), [ae, fe] = W(false), [re, ee] = W(false), [G, ue] = W(false), [Z, pe] = W(false), [me, he] = W(null), [H, ne] = W(null), [xe, we] = W(null), [ye, oe] = W(false), [N, Y] = W([]), [Pe, ke] = W(null), [Ve, ie] = W(null), [Ae, wt] = W(null), [St, jt] = W(null), [Wn, Vt] = W(false), [vt, Nt] = W(null), [Ct, Le] = W(null), [De, Bn] = W(false), [Yt, En] = W(ir), [Te, Xt] = W("obj"), [Se, zt] = W(o), [Ge, Mt] = W(true), [Oe, tt] = W(false), [nt, Gt] = W(false), [ze, ot] = W(false), [Tn, At] = W(false), [Ze, On] = W(null), [$n, Hn] = W(void 0), [jn, Vn] = W(void 0), [Zt] = W("#c8c8c8"), [Nn] = W(1), [We, Yn] = W(false), [kt, Kt] = W([]), rt = le(null), $e = le(null), it = le(false), Xn = le(null), Ft = le(null), Pt = le(null), Ke = J(async () => {
3283
+ if (Pt.current) try {
3284
+ const y = Pt.current, _ = () => {
3285
+ const U = y.querySelector("canvas");
3286
+ if (!U) return;
3287
+ const $ = y.getBoundingClientRect(), ge = U.width, Ce = U.height, te = ge / $.width, Me = Ce / $.height, Re = document.createElement("canvas");
3288
+ Re.width = ge, Re.height = Ce;
3289
+ const se = Re.getContext("2d");
3290
+ return se.drawImage(U, 0, 0), y.querySelectorAll("[style*='pointer-events']").forEach((Ie) => {
3291
+ const nn = Ie;
3292
+ if (nn.hasAttribute("data-finalizing-overlay")) return;
3293
+ const on = nn.querySelectorAll("div[style*='background']");
3294
+ on.length !== 0 && on.forEach((Ye) => {
3295
+ var _a;
3296
+ const _e = Ye.getBoundingClientRect();
3315
3297
  if (_e.width === 0 || _e.height === 0) return;
3316
- const Re = _e.left - te.left, Ee = _e.top - te.top;
3317
- Re < Me && (Me = Re), Ee < Ae && (Ae = Ee), Re + _e.width > be && (be = Re + _e.width), Ee + _e.height > $e && ($e = Ee + _e.height);
3318
- }), Me === 1 / 0 && (Me = 0, Ae = 0, be = Fe, $e = Be);
3319
- }
3320
- const ln = Math.max(Fe, Be) * 0.03, an = Math.max(Fe, Be) * 0.06;
3321
- Me = Math.max(0, Me - ln), Ae = Math.max(0, Ae - an), be = Math.min(Fe, be + ln), $e = Math.min(Be, $e + an);
3322
- const Tt = (be - Me) * W, Ot = ($e - Ae) * W, no = Math.max(0, Me * W), oo = Math.max(0, Ae * W), ht = document.createElement("canvas");
3323
- return ht.width = Math.round(Tt), ht.height = Math.round(Ot), ht.getContext("2d").drawImage(oe, Math.round(no), Math.round(oo), Math.round(Tt), Math.round(Ot), 0, 0, Math.round(Tt), Math.round(Ot)), ht.toDataURL("image/png");
3298
+ let Rt = 0, Qe = Ye;
3299
+ for (; Qe && Qe !== y; ) {
3300
+ const ft = (Qe.style.transform || "").match(/rotate\((-?\d+)deg\)/);
3301
+ if (ft) {
3302
+ Rt = parseFloat(ft[1]);
3303
+ break;
3304
+ }
3305
+ Qe = Qe.parentElement;
3306
+ }
3307
+ const rn = (_e.left + _e.width / 2 - $.left) * te, sn = (_e.top + _e.height / 2 - $.top) * Me, ct = Math.abs(Rt) > 1, ln = (ct ? _e.height : _e.width) * te, an = (ct ? _e.width : _e.height) * Me;
3308
+ se.save(), se.translate(rn, sn), ct && se.rotate(Rt * Math.PI / 180);
3309
+ const ro = Ye.style.backgroundColor || "rgba(0,0,0,0.75)";
3310
+ se.fillStyle = ro;
3311
+ const io = 4 * te;
3312
+ se.beginPath(), se.roundRect(-ln / 2, -an / 2, ln, an, io), se.fill();
3313
+ const cn = ((_a = Ye.textContent) == null ? void 0 : _a.trim()) || "";
3314
+ if (cn) {
3315
+ const dt = window.getComputedStyle(Ye), ft = parseFloat(dt.fontSize || "14") * Me;
3316
+ se.font = `${dt.fontWeight || "normal"} ${ft}px monospace`, se.fillStyle = dt.color || "#fff", se.textAlign = "center", se.textBaseline = "middle";
3317
+ const dn = Ye.querySelectorAll("span");
3318
+ dn.length > 0 && !ct ? dn.forEach((Wt) => {
3319
+ const et = Wt.getBoundingClientRect();
3320
+ if (et.width === 0) return;
3321
+ const so = (et.left + et.width / 2 - $.left) * te - rn, lo = (et.top + et.height / 2 - $.top) * Me - sn, Bt = window.getComputedStyle(Wt), ao = parseFloat(Bt.fontSize) * Me;
3322
+ se.font = `${Bt.fontWeight || "normal"} ${ao}px monospace`, se.fillStyle = Bt.color || "#fff", se.fillText(Wt.textContent || "", so, lo);
3323
+ }) : se.fillText(cn, 0, 0);
3324
+ }
3325
+ se.restore();
3326
+ });
3327
+ }), Re.toDataURL("image/png");
3324
3328
  };
3325
- Dt.current && Dt.current(), await new Promise((J) => setTimeout(J, 100)), await new Promise((J) => requestAnimationFrame(() => requestAnimationFrame(J)));
3326
- const ge = await R();
3327
- P("2D"), await new Promise((J) => setTimeout(J, 200)), await new Promise((J) => requestAnimationFrame(() => requestAnimationFrame(J)));
3328
- const G = await R(true);
3329
- return P("3D"), {
3330
- frontal_view_png: ge,
3331
- side_view_png: G
3329
+ Ft.current && Ft.current(), await new Promise((U) => requestAnimationFrame(() => requestAnimationFrame(U)));
3330
+ const B = _();
3331
+ L("2D"), await new Promise((U) => setTimeout(U, 150)), await new Promise((U) => requestAnimationFrame(() => requestAnimationFrame(U)));
3332
+ const R = _();
3333
+ return L("3D"), !B || !R ? void 0 : {
3334
+ frontal_view_png: B,
3335
+ side_view_png: R
3332
3336
  };
3333
3337
  } catch {
3334
3338
  return;
3335
3339
  }
3336
- }, []), Ce = Q((y) => {
3337
- const D = /* @__PURE__ */ new Date(), W = `${String(D.getHours()).padStart(2, "0")}:${String(D.getMinutes()).padStart(2, "0")}:${String(D.getSeconds()).padStart(2, "0")}.${String(D.getMilliseconds()).padStart(3, "0")}`;
3338
- Qt((R) => [
3340
+ }, []), ve = J((y) => {
3341
+ const _ = /* @__PURE__ */ new Date(), B = `${String(_.getHours()).padStart(2, "0")}:${String(_.getMinutes()).padStart(2, "0")}:${String(_.getSeconds()).padStart(2, "0")}.${String(_.getMilliseconds()).padStart(3, "0")}`;
3342
+ Kt((R) => [
3339
3343
  ...R.slice(-200),
3340
- `[${W}] ${y}`
3344
+ `[${B}] ${y}`
3341
3345
  ]);
3342
- }, []), { landmarkPoints: T, clearLandmarkPoints: Yn, addLandmarkPoint: en, removeLandmarkPoint: tn, updateLandmarkPositions: nn, setAligned: on, isAligned: U, setCut: rn, isCut: Rt, reset: ft } = Nt();
3343
- K(() => {
3344
- ft();
3346
+ }, []), { landmarkPoints: T, clearLandmarkPoints: Gn, addLandmarkPoint: qt, removeLandmarkPoint: Ut, updateLandmarkPositions: Jt, setAligned: Qt, isAligned: K, setCut: en, isCut: Lt, reset: st } = Ht();
3347
+ q(() => {
3348
+ st();
3345
3349
  }, [
3346
- ft
3350
+ st
3347
3351
  ]);
3348
- const ut = v * yt;
3349
- K(() => {
3352
+ const lt = v * gt;
3353
+ q(() => {
3350
3354
  if (!a || T.length === 0) return;
3351
3355
  const y = T[T.length - 1];
3352
- Ce(`LANDMARK[${T.length - 1}]: placed at (${y.position.x.toFixed(1)}, ${y.position.y.toFixed(1)}, ${y.position.z.toFixed(1)}) face=${y.faceIndex}`);
3356
+ ve(`LANDMARK[${T.length - 1}]: placed at (${y.position.x.toFixed(1)}, ${y.position.y.toFixed(1)}, ${y.position.z.toFixed(1)}) face=${y.faceIndex}`);
3353
3357
  }, [
3354
3358
  T.length,
3355
3359
  a,
3356
- Ce
3357
- ]), K(() => {
3358
- a && U && Ce("STATE: mesh aligned");
3360
+ ve
3361
+ ]), q(() => {
3362
+ a && K && ve("STATE: mesh aligned");
3359
3363
  }, [
3360
- U,
3364
+ K,
3361
3365
  a,
3362
- Ce
3363
- ]), K(() => {
3364
- a && Rt && Ce("STATE: mesh cut");
3366
+ ve
3367
+ ]), q(() => {
3368
+ a && Lt && ve("STATE: mesh cut");
3365
3369
  }, [
3366
- Rt,
3370
+ Lt,
3367
3371
  a,
3368
- Ce
3369
- ]), K(() => {
3370
- ct.current && (ct.current.scrollTop = ct.current.scrollHeight);
3372
+ ve
3373
+ ]), q(() => {
3374
+ rt.current && (rt.current.scrollTop = rt.current.scrollHeight);
3371
3375
  }, [
3372
- It
3376
+ kt
3373
3377
  ]);
3374
- const Ue = H(() => xe ? new O.Mesh(xe) : null, [
3378
+ const Ne = j(() => xe ? new O.Mesh(xe) : null, [
3375
3379
  xe
3376
3380
  ]);
3377
- K(() => {
3378
- o && Ft(o);
3381
+ q(() => {
3382
+ o && zt(o);
3379
3383
  }, [
3380
3384
  o
3381
- ]), K(() => {
3382
- o || Ft(void 0);
3385
+ ]), q(() => {
3386
+ o || zt(void 0);
3383
3387
  }, [
3384
3388
  v
3385
3389
  ]);
3386
- const pt = ie(false);
3387
- K(() => {
3388
- if (!U || j.length === 0 || pt.current || !c) return;
3389
- pt.current = true;
3390
+ const at = le(false);
3391
+ q(() => {
3392
+ if (!K || N.length === 0 || at.current || !c) return;
3393
+ at.current = true;
3390
3394
  const y = T.length >= 3 ? Math.abs(T[2].position.y - T[0].position.y) : null;
3391
3395
  c("dimensions_calculated", {
3392
- spacing_type: L,
3396
+ spacing_type: P,
3393
3397
  source_unit: "mm",
3394
- file_format: Ve,
3398
+ file_format: Te,
3395
3399
  measurement_source: "scan_derived",
3396
- is_double_wall: X,
3400
+ is_double_wall: G,
3397
3401
  is_unit_converted: false,
3398
- form_measurements: (ve == null ? void 0 : ve.filter((D) => D != null)) ?? null,
3399
- scan_measurements: j.map((D) => +(D.modifiedValue ?? D.originalValue).toFixed(1)),
3400
- measurement_variance: ve ? j.map((D, W) => {
3401
- const R = ve[W];
3402
- return R == null ? null : +((D.modifiedValue ?? D.originalValue) - R).toFixed(1);
3402
+ form_measurements: (Se == null ? void 0 : Se.filter((_) => _ != null)) ?? null,
3403
+ scan_measurements: N.map((_) => +(_.modifiedValue ?? _.originalValue).toFixed(1)),
3404
+ measurement_variance: Se ? N.map((_, B) => {
3405
+ const R = Se[B];
3406
+ return R == null ? null : +((_.modifiedValue ?? _.originalValue) - R).toFixed(1);
3403
3407
  }) : null,
3404
3408
  frontal_height: y !== null ? +y.toFixed(1) : null
3405
3409
  });
3406
3410
  }, [
3407
- U,
3408
- j
3409
- ]), K(() => {
3410
- l !== void 0 && (Ne.current = l), l !== void 0 && jn(true);
3411
+ K,
3412
+ N
3413
+ ]), q(() => {
3414
+ l !== void 0 && ($e.current = l), l !== void 0 && Yn(true);
3411
3415
  }, [
3412
3416
  l
3413
3417
  ]);
3414
- const tt = Q((y, D) => {
3418
+ const qe = J((y, _) => {
3415
3419
  y.computeBoundingBox();
3416
- const W = y.boundingBox, R = new M();
3417
- W.getCenter(R), y.translate(-R.x, -R.y, -R.z), y.computeBoundingBox();
3418
- const ge = y.boundingBox, G = new M();
3419
- ge.getSize(G), f(Math.max(G.x, G.y, G.z));
3420
- const J = new O.Mesh(y, new O.MeshStandardMaterial({
3420
+ const B = y.boundingBox, R = new z();
3421
+ B.getCenter(R), y.translate(-R.x, -R.y, -R.z), y.computeBoundingBox();
3422
+ const U = y.boundingBox, $ = new z();
3423
+ U.getSize($), f(Math.max($.x, $.y, $.z));
3424
+ const ge = new O.Mesh(y, new O.MeshStandardMaterial({
3421
3425
  color: 8947848,
3422
3426
  side: O.DoubleSide
3423
3427
  }));
3424
- m(J), fe(D), ee(true), pe(false), dt.current = false;
3425
- }, []), Oe = Q(async (y, D) => {
3426
- De(null);
3427
- const W = D.toLowerCase(), R = W.endsWith(".stl");
3428
- if (!W.endsWith(".obj") && !R) {
3429
- De("Unsupported file format. Please use OBJ or STL.");
3428
+ m(ge), fe(_), ee(true), pe(false), it.current = false;
3429
+ }, []), Be = J(async (y, _) => {
3430
+ Le(null);
3431
+ const B = _.toLowerCase(), R = B.endsWith(".stl");
3432
+ if (!B.endsWith(".obj") && !R) {
3433
+ Le("Unsupported file format. Please use OBJ or STL.");
3430
3434
  return;
3431
3435
  }
3432
- Kt(R ? "stl" : "obj"), p(true), b("Processing file..."), Ce(`FILE_LOAD: ${D} (${R ? "STL" : "OBJ"})`);
3436
+ Xt(R ? "stl" : "obj"), p(true), b("Processing file..."), ve(`FILE_LOAD: ${_} (${R ? "STL" : "OBJ"})`);
3433
3437
  try {
3434
- let G;
3438
+ let $;
3435
3439
  if (R) if (b("Converting STL..."), y instanceof ArrayBuffer) {
3436
3440
  const te = new Blob([
3437
3441
  y
3438
- ]), Fe = new File([
3442
+ ]), Me = new File([
3439
3443
  te
3440
- ], D);
3441
- G = await $t(Fe);
3444
+ ], _);
3445
+ $ = await Et(Me);
3442
3446
  } else {
3443
3447
  const te = new Blob([
3444
3448
  y
3445
- ]), Fe = new File([
3449
+ ]), Me = new File([
3446
3450
  te
3447
- ], D);
3448
- G = await $t(Fe);
3451
+ ], _);
3452
+ $ = await Et(Me);
3449
3453
  }
3450
- else G = typeof y == "string" ? y : new TextDecoder().decode(y);
3451
- const J = performance.now(), oe = Ne.current ? await So(G, Ne.current, (te) => {
3452
- b(te), Ce(`PREPROCESS: ${te}`);
3454
+ else $ = typeof y == "string" ? y : new TextDecoder().decode(y);
3455
+ const ge = performance.now(), Ce = $e.current ? await Mo($, $e.current, (te) => {
3456
+ b(te), ve(`PREPROCESS: ${te}`);
3453
3457
  }) : null;
3454
- if (oe) Ce(`PREPROCESS: done in ${(performance.now() - J).toFixed(0)}ms \u2014 unit=${oe.detectedUnit}, scaled=${oe.wasScaled}`), t.showAmputationModal && !r ? (C(oe), z(true)) : tt(oe.geometry, oe.wasScaled);
3458
+ if (Ce) ve(`PREPROCESS: done in ${(performance.now() - ge).toFixed(0)}ms \u2014 unit=${Ce.detectedUnit}, scaled=${Ce.wasScaled}`), t.showAmputationModal && !r ? (C(Ce), M(true)) : qe(Ce.geometry, Ce.wasScaled);
3455
3459
  else {
3456
3460
  b("Using fallback loader...");
3457
- const te = vo(G);
3461
+ const te = Ao($);
3458
3462
  te ? t.showAmputationModal && !r ? (C({
3459
3463
  geometry: te,
3460
3464
  wasScaled: false
3461
- }), z(true)) : tt(te, false) : De("Failed to parse the mesh.");
3465
+ }), M(true)) : qe(te, false) : Le("Failed to parse the mesh.");
3462
3466
  }
3463
- } catch (G) {
3464
- De(G instanceof Error ? G.message : "Failed to process the mesh file.");
3467
+ } catch ($) {
3468
+ Le($ instanceof Error ? $.message : "Failed to process the mesh file.");
3465
3469
  } finally {
3466
3470
  p(false), b("");
3467
3471
  }
3468
3472
  }, [
3469
- Te,
3473
+ We,
3470
3474
  t.showAmputationModal,
3471
3475
  r,
3472
- tt
3476
+ qe
3473
3477
  ]);
3474
- K(() => {
3475
- if (!n || !Te) return;
3478
+ q(() => {
3479
+ if (!n || !We) return;
3476
3480
  (async () => {
3477
3481
  p(true), b("Loading scan...");
3478
3482
  try {
3479
- const D = await fetch(n);
3480
- if (!D.ok) throw new Error(`Failed to download scan: ${D.status}`);
3483
+ const _ = await fetch(n);
3484
+ if (!_.ok) throw new Error(`Failed to download scan: ${_.status}`);
3481
3485
  const R = new URL(n).pathname.split("/").pop() || "scan.obj";
3482
3486
  if (R.toLowerCase().endsWith(".stl")) {
3483
- const G = await D.arrayBuffer();
3484
- await Oe(G, R);
3487
+ const $ = await _.arrayBuffer();
3488
+ await Be($, R);
3485
3489
  } else {
3486
- const G = await D.text();
3487
- await Oe(G, R);
3490
+ const $ = await _.text();
3491
+ await Be($, R);
3488
3492
  }
3489
- } catch (D) {
3490
- De(D instanceof Error ? D.message : "Failed to load scan from URL."), p(false), b("");
3493
+ } catch (_) {
3494
+ Le(_ instanceof Error ? _.message : "Failed to load scan from URL."), p(false), b("");
3491
3495
  }
3492
3496
  })();
3493
3497
  }, [
3494
3498
  n,
3495
- Te
3499
+ We
3496
3500
  ]);
3497
- const Xn = Q((y) => {
3501
+ const Zn = J((y) => {
3498
3502
  y.preventDefault(), x(true);
3499
- }, []), Gn = Q((y) => {
3503
+ }, []), Kn = J((y) => {
3500
3504
  y.preventDefault(), x(false);
3501
- }, []), Zn = Q(async (y) => {
3502
- if (y.preventDefault(), x(false), !Te) {
3503
- De("WASM module is still loading. Please wait.");
3505
+ }, []), qn = J(async (y) => {
3506
+ if (y.preventDefault(), x(false), !We) {
3507
+ Le("WASM module is still loading. Please wait.");
3504
3508
  return;
3505
3509
  }
3506
- const D = y.dataTransfer.files[0];
3507
- if (!D) return;
3508
- const W = D.name.toLowerCase();
3509
- if (!W.endsWith(".obj") && !W.endsWith(".stl")) {
3510
- De("Please drop an OBJ or STL file.");
3510
+ const _ = y.dataTransfer.files[0];
3511
+ if (!_) return;
3512
+ const B = _.name.toLowerCase();
3513
+ if (!B.endsWith(".obj") && !B.endsWith(".stl")) {
3514
+ Le("Please drop an OBJ or STL file.");
3511
3515
  return;
3512
3516
  }
3513
- if (W.endsWith(".stl")) {
3514
- Kt("stl"), p(true), b("Converting STL...");
3517
+ if (B.endsWith(".stl")) {
3518
+ Xt("stl"), p(true), b("Converting STL...");
3515
3519
  try {
3516
- const R = await $t(D);
3517
- await Oe(R, D.name.replace(/\.stl$/i, ".obj"));
3520
+ const R = await Et(_);
3521
+ await Be(R, _.name.replace(/\.stl$/i, ".obj"));
3518
3522
  } catch (R) {
3519
- De(R instanceof Error ? R.message : "Failed to process STL file."), p(false), b("");
3523
+ Le(R instanceof Error ? R.message : "Failed to process STL file."), p(false), b("");
3520
3524
  }
3521
3525
  } else {
3522
- const R = await D.text();
3523
- await Oe(R, D.name);
3526
+ const R = await _.text();
3527
+ await Be(R, _.name);
3524
3528
  }
3525
3529
  }, [
3526
- Te,
3527
- Oe
3528
- ]), Kn = Q((y) => {
3529
- I(y), k(y === "AK" ? 2 : 1), z(false), h && (tt(h.geometry, h.wasScaled), C(null)), c == null ? void 0 : c("file_loaded", {
3530
+ We,
3531
+ Be
3532
+ ]), Un = J((y) => {
3533
+ I(y), k(y === "AK" ? 2 : 1), M(false), h && (qe(h.geometry, h.wasScaled), C(null)), c == null ? void 0 : c("file_loaded", {
3530
3534
  spacing_type: y,
3531
- file_format: Ve,
3535
+ file_format: Te,
3532
3536
  is_double_wall: false
3533
3537
  });
3534
3538
  }, [
3535
3539
  h,
3536
- tt,
3540
+ qe,
3537
3541
  c,
3538
- Ve
3542
+ Te
3539
3543
  ]);
3540
- K(() => {
3541
- if (!e || T.length !== 1 || !Ne.current || dt.current) return;
3542
- dt.current = true;
3543
- const y = T[0], D = Ne.current, W = e.geometry, { positions: R, indices: ge } = wt(W), G = new Float32Array([
3544
+ q(() => {
3545
+ if (!e || T.length !== 1 || !$e.current || it.current) return;
3546
+ it.current = true;
3547
+ const y = T[0], _ = $e.current, B = e.geometry, { positions: R, indices: U } = mt(B), $ = new Float32Array([
3544
3548
  y.position.x,
3545
3549
  y.position.y,
3546
3550
  y.position.z
3547
- ]), J = D.detect_shell(R, ge, G, 40), oe = J.details(), te = J.is_double_shell();
3548
- Ce(`SHELL_DETECT: ${te ? "DOUBLE" : "SINGLE"} \u2014 ${oe}`), te && (ue(true), re(true), Ce(`SHELL_DETECT: double shell, thickness=${J.thickness().toFixed(1)}mm`));
3551
+ ]), ge = _.detect_shell(R, U, $, 40), Ce = ge.details(), te = ge.is_double_shell();
3552
+ ve(`SHELL_DETECT: ${te ? "DOUBLE" : "SINGLE"} \u2014 ${Ce}`), te && (ue(true), oe(true), ve(`SHELL_DETECT: double shell, thickness=${ge.thickness().toFixed(1)}mm`));
3549
3553
  }, [
3550
3554
  e,
3551
3555
  T,
3552
- Ce
3556
+ ve
3553
3557
  ]);
3554
- const Un = Q(() => {
3558
+ const Jn = J(() => {
3555
3559
  if (!e || T.length < 2) return;
3556
- Y(true), ye("Please wait..."), Ce("PIPELINE: starting processing pipeline...");
3560
+ X(true), be("Please wait..."), ve("PIPELINE: starting processing pipeline...");
3557
3561
  const y = performance.now();
3558
3562
  setTimeout(() => {
3559
- const D = [
3563
+ const _ = [
3560
3564
  T[1],
3561
3565
  T[0],
3562
3566
  ...T.slice(2)
3563
3567
  ];
3564
- ko(e, D, yt, {
3565
- onStatus: (W) => {
3566
- ye(W), Ce(`PIPELINE: ${W}`);
3568
+ Io(e, _, gt, {
3569
+ onStatus: (B) => {
3570
+ be(B), ve(`PIPELINE: ${B}`);
3567
3571
  },
3568
- addLandmarkPoint: en,
3569
- removeLandmarkPoint: tn,
3570
- updateLandmarkPositions: (W) => {
3572
+ addLandmarkPoint: qt,
3573
+ removeLandmarkPoint: Ut,
3574
+ updateLandmarkPositions: (B) => {
3571
3575
  const R = [
3572
- W[1],
3573
- W[0],
3574
- ...W.slice(2)
3576
+ B[1],
3577
+ B[0],
3578
+ ...B.slice(2)
3575
3579
  ];
3576
- nn(R);
3580
+ Jt(R);
3577
3581
  },
3578
- setAligned: on,
3579
- setCut: rn,
3582
+ setAligned: Qt,
3583
+ setCut: en,
3580
3584
  setModelSize: f,
3581
- setOriginalEndY: Yt,
3582
- setAdjustedStartY: le,
3583
- setAdjustedEndY: Mt,
3584
- setError: De,
3585
- setDoubleShell: (W) => {
3586
- ue(W), re(true);
3585
+ setOriginalEndY: jt,
3586
+ setAdjustedStartY: ie,
3587
+ setAdjustedEndY: wt,
3588
+ setError: Le,
3589
+ setDoubleShell: (B) => {
3590
+ ue(B), oe(true);
3587
3591
  },
3588
- setAoData: (W, R) => {
3589
- he(W), ne(R ?? null);
3592
+ setAoData: (B, R) => {
3593
+ he(B), ne(R ?? null);
3590
3594
  },
3591
3595
  setInnerShellExtracted: pe,
3592
- setMeasurementGeometry: Se,
3593
- setWasmSlices: Le,
3594
- wasmModule: Ne.current ?? void 0
3595
- }), Ce(`PIPELINE: completed in ${(performance.now() - y).toFixed(0)}ms`), pt.current = false, Y(false);
3596
+ setMeasurementGeometry: we,
3597
+ setWasmSlices: ke,
3598
+ wasmModule: $e.current ?? void 0
3599
+ }), ve(`PIPELINE: completed in ${(performance.now() - y).toFixed(0)}ms`), at.current = false, X(false);
3596
3600
  }, 50);
3597
3601
  }, [
3598
3602
  e,
3599
3603
  T,
3600
- nn,
3601
- on,
3604
+ Jt,
3605
+ Qt,
3606
+ qt,
3607
+ Ut,
3602
3608
  en,
3603
- tn,
3604
- rn,
3605
3609
  Z
3606
- ]), Wt = ie(false), Jn = Q(async () => {
3607
- if (ft(), N([]), Le(null), Se(null), le(null), Mt(null), Gt(null), Yt(null), st(false), Ut(false), Lt(true), ue(false), pe(false), dt.current = false, Wt.current = false, pt.current = false, P("3D"), n && Te) {
3610
+ ]), It = le(false), Qn = J(async () => {
3611
+ if (st(), Y([]), ke(null), we(null), ie(null), wt(null), Nt(null), jt(null), tt(false), Gt(false), Mt(true), ue(false), pe(false), it.current = false, It.current = false, at.current = false, L("3D"), n && We) {
3608
3612
  m(null);
3609
3613
  try {
3610
3614
  const y = await fetch(n);
3611
3615
  if (!y.ok) throw new Error(`Failed to download scan: ${y.status}`);
3612
- const W = new URL(n).pathname.split("/").pop() || "scan.obj";
3613
- W.toLowerCase().endsWith(".stl") ? await Oe(await y.arrayBuffer(), W) : await Oe(await y.text(), W);
3616
+ const B = new URL(n).pathname.split("/").pop() || "scan.obj";
3617
+ B.toLowerCase().endsWith(".stl") ? await Be(await y.arrayBuffer(), B) : await Be(await y.text(), B);
3614
3618
  } catch (y) {
3615
- De(y instanceof Error ? y.message : "Failed to reload scan.");
3619
+ Le(y instanceof Error ? y.message : "Failed to reload scan.");
3616
3620
  }
3617
3621
  }
3618
3622
  }, [
3619
3623
  n,
3620
- Te,
3621
- Oe,
3622
- ft
3624
+ We,
3625
+ Be,
3626
+ st
3623
3627
  ]);
3624
- K(() => {
3625
- U && j.length > 0 && !Wt.current && (Wt.current = true, st(true));
3628
+ q(() => {
3629
+ K && N.length > 0 && !It.current && (It.current = true, tt(true));
3626
3630
  }, [
3627
- U,
3628
- j.length
3631
+ K,
3632
+ N.length
3629
3633
  ]);
3630
- const nt = H(() => {
3634
+ const Ue = j(() => {
3631
3635
  var _a;
3632
3636
  if (!e || T.length < 3) return 0;
3633
- if (X) return Math.abs(T[0].position.y - T[2].position.y);
3637
+ if (G) return Math.abs(T[0].position.y - T[2].position.y);
3634
3638
  const y = e.geometry;
3635
3639
  y.computeBoundingBox();
3636
- const D = ((_a = y.boundingBox) == null ? void 0 : _a.min.y) ?? 0;
3637
- return Math.abs(T[0].position.y - D);
3640
+ const _ = ((_a = y.boundingBox) == null ? void 0 : _a.min.y) ?? 0;
3641
+ return Math.abs(T[0].position.y - _);
3638
3642
  }, [
3639
3643
  e,
3640
3644
  T,
3641
- X
3642
- ]), Qn = Q((y) => {
3643
- En(y), Ft(y.circumferences), Lt(true), Ut(true);
3644
- }, []), sn = Q(async (y) => {
3645
+ G
3646
+ ]), eo = J((y) => {
3647
+ On(y), zt(y.circumferences), Mt(true), Gt(true);
3648
+ }, []), tn = J(async (y) => {
3645
3649
  if (!s) return;
3646
- st(false), Pt(false), at(true);
3647
- const D = e ? await et().catch(() => {
3650
+ tt(false), At(false), ot(true);
3651
+ const _ = e ? await Ke().catch(() => {
3648
3652
  }) : void 0;
3649
3653
  try {
3650
3654
  s({
3651
- spacingType: L ?? "BK",
3655
+ spacingType: P ?? "BK",
3652
3656
  sourceUnit: "mm",
3653
- fileFormat: Ve,
3657
+ fileFormat: Te,
3654
3658
  measurementSource: "form_provided",
3655
- isDoubleWall: X,
3659
+ isDoubleWall: G,
3656
3660
  isUnitConverted: false,
3657
- formMeasurements: ve,
3658
- scanMeasurements: j,
3659
- frontalHeight: nt,
3661
+ formMeasurements: Se,
3662
+ scanMeasurements: N,
3663
+ frontalHeight: Ue,
3660
3664
  transverseML: 0,
3661
3665
  transverseAP: 0,
3662
3666
  scanUrl: n,
3663
3667
  decision: "skip",
3664
3668
  skipReason: y,
3665
- screenshots: D
3669
+ screenshots: _
3666
3670
  });
3667
3671
  } finally {
3668
- at(false);
3672
+ ot(false);
3669
3673
  }
3670
3674
  }, [
3671
3675
  s,
3672
3676
  e,
3673
- L,
3674
- Ve,
3675
- X,
3676
- ve,
3677
- j,
3678
- nt,
3677
+ P,
3678
+ Te,
3679
+ G,
3680
+ Se,
3681
+ N,
3682
+ Ue,
3679
3683
  n,
3680
- et
3681
- ]), Bt = ie(null);
3682
- K(() => {
3683
- if (!e || !U) {
3684
- Bt.current = null;
3684
+ Ke
3685
+ ]), _t = le(null);
3686
+ q(() => {
3687
+ if (!e || !K) {
3688
+ _t.current = null;
3685
3689
  return;
3686
3690
  }
3687
- const y = (Ue ?? e).geometry;
3688
- Bt.current = jt(y);
3691
+ const y = (Ne ?? e).geometry;
3692
+ _t.current = $t(y);
3689
3693
  }, [
3690
3694
  e,
3691
- U,
3692
- Ue
3695
+ K,
3696
+ Ne
3693
3697
  ]);
3694
- const Et = Q(async (y) => {
3695
- if (!s || !e || j.length === 0 || !L) return;
3696
- at(true);
3697
- const D = await et().catch(() => {
3698
+ const Dt = J(async (y) => {
3699
+ if (!s || !e || N.length === 0 || !P) return;
3700
+ ot(true);
3701
+ const _ = await Ke().catch(() => {
3698
3702
  });
3699
3703
  try {
3700
- let W = 0, R = 0;
3704
+ let B = 0, R = 0;
3701
3705
  if (T.length >= 2) {
3702
- const ge = (Ue ?? e).geometry, J = T[0].position.y;
3706
+ const U = (Ne ?? e).geometry, ge = T[0].position.y;
3703
3707
  try {
3704
- const oe = Bt.current ?? jt(ge), te = Ge(oe, ge, J);
3708
+ const Ce = _t.current ?? $t(U), te = He(Ce, U, ge);
3705
3709
  if (te.linePoints.length >= 2) {
3706
- let Fe = te.linePoints[0], Be = te.linePoints[0], Me = te.linePoints[0], Ae = te.linePoints[0];
3707
- for (const be of te.linePoints) be.x < Fe.x && (Fe = be), be.x > Be.x && (Be = be), be.z < Me.z && (Me = be), be.z > Ae.z && (Ae = be);
3708
- W = new M(Fe.x, J, Fe.z).distanceTo(new M(Be.x, J, Be.z)), R = new M(Me.x, J, Me.z).distanceTo(new M(Ae.x, J, Ae.z));
3710
+ let Me = te.linePoints[0], Re = te.linePoints[0], se = te.linePoints[0], Je = te.linePoints[0];
3711
+ for (const Ie of te.linePoints) Ie.x < Me.x && (Me = Ie), Ie.x > Re.x && (Re = Ie), Ie.z < se.z && (se = Ie), Ie.z > Je.z && (Je = Ie);
3712
+ B = new z(Me.x, ge, Me.z).distanceTo(new z(Re.x, ge, Re.z)), R = new z(se.x, ge, se.z).distanceTo(new z(Je.x, ge, Je.z));
3709
3713
  }
3710
3714
  } catch {
3711
3715
  }
3712
3716
  }
3713
3717
  s({
3714
- spacingType: L,
3718
+ spacingType: P,
3715
3719
  sourceUnit: "mm",
3716
- fileFormat: Ve,
3720
+ fileFormat: Te,
3717
3721
  measurementSource: y === "use_form_measurements" ? "form_provided" : "scan_derived",
3718
- isDoubleWall: X,
3722
+ isDoubleWall: G,
3719
3723
  isUnitConverted: false,
3720
- formMeasurements: ve,
3721
- scanMeasurements: j,
3722
- frontalHeight: (qe == null ? void 0 : qe.frontalHeight) ?? nt,
3723
- transverseML: W,
3724
+ formMeasurements: Se,
3725
+ scanMeasurements: N,
3726
+ frontalHeight: (Ze == null ? void 0 : Ze.frontalHeight) ?? Ue,
3727
+ transverseML: B,
3724
3728
  transverseAP: R,
3725
3729
  scanUrl: n,
3726
3730
  decision: y,
3727
- userEnteredMeasurements: qe ?? void 0,
3728
- screenshots: D
3731
+ userEnteredMeasurements: Ze ?? void 0,
3732
+ screenshots: _
3729
3733
  });
3730
3734
  } finally {
3731
- at(false);
3735
+ ot(false);
3732
3736
  }
3733
3737
  }, [
3734
3738
  s,
3735
3739
  e,
3736
- Ue,
3737
- j,
3738
- L,
3740
+ Ne,
3741
+ N,
3742
+ P,
3739
3743
  T,
3740
- Ve,
3741
- X,
3742
- ve,
3744
+ Te,
3745
+ G,
3746
+ Se,
3743
3747
  n,
3744
- qe,
3745
- nt,
3746
- et
3747
- ]), qn = H(() => {
3748
- if (!ve || j.length === 0) return false;
3749
- const y = Math.min(ve.length, j.length);
3748
+ Ze,
3749
+ Ue,
3750
+ Ke
3751
+ ]), to = j(() => {
3752
+ if (!Se || N.length === 0) return false;
3753
+ const y = Math.min(Se.length, N.length);
3750
3754
  if (y === 0) return false;
3751
- for (let D = 0; D < y; D++) {
3752
- const W = ve[D], R = j[D];
3753
- if (!R || W == null || W === 0) continue;
3754
- const ge = R.modifiedValue ?? R.originalValue;
3755
- if (Math.abs(ge - W) > 7) return false;
3755
+ for (let _ = 0; _ < y; _++) {
3756
+ const B = Se[_], R = N[_];
3757
+ if (!R || B == null || B === 0) continue;
3758
+ const U = R.modifiedValue ?? R.originalValue;
3759
+ if (Math.abs(U - B) > 7) return false;
3756
3760
  }
3757
3761
  return true;
3758
3762
  }, [
3759
- ve,
3760
- j
3761
- ]), eo = lt ? 5 : U && je || U ? 4 : e ? T.length === 0 ? 2 : 3 : 1, to = [
3763
+ Se,
3764
+ N
3765
+ ]), no = nt ? 5 : K && Oe || K ? 4 : e ? T.length === 0 ? 2 : 3 : 1, oo = [
3762
3766
  {
3763
3767
  label: "Load File",
3764
3768
  number: 1
3765
3769
  },
3766
3770
  {
3767
- label: L === "AK" ? "Set IT" : "Set MPT",
3771
+ label: P === "AK" ? "Set IT" : "Set MPT",
3768
3772
  number: 2
3769
3773
  },
3770
3774
  {
@@ -3780,7 +3784,7 @@ let __tla = (async () => {
3780
3784
  number: 5
3781
3785
  }
3782
3786
  ];
3783
- return F(mo.Provider, {
3787
+ return F(wo.Provider, {
3784
3788
  value: t,
3785
3789
  children: [
3786
3790
  F("div", {
@@ -3812,9 +3816,9 @@ let __tla = (async () => {
3812
3816
  }
3813
3817
  })
3814
3818
  }),
3815
- i(Xo, {
3816
- steps: to,
3817
- currentStep: eo
3819
+ i(qo, {
3820
+ steps: oo,
3821
+ currentStep: no
3818
3822
  }),
3819
3823
  F("div", {
3820
3824
  style: {
@@ -3832,37 +3836,37 @@ let __tla = (async () => {
3832
3836
  minHeight: 0
3833
3837
  },
3834
3838
  children: [
3835
- U && je && L && i("div", {
3839
+ K && Oe && P && i("div", {
3836
3840
  style: {
3837
3841
  width: 340,
3838
3842
  flexShrink: 0,
3839
3843
  borderRight: "1px solid #e0e0e0",
3840
3844
  overflow: "hidden"
3841
3845
  },
3842
- children: i(er, {
3843
- amputationType: L,
3846
+ children: i(rr, {
3847
+ amputationType: P,
3844
3848
  spacingInches: v,
3845
- scanMeasurements: j,
3846
- scanFrontalHeight: nt,
3847
- onSave: Qn,
3848
- onSkip: sn,
3849
- onFormChange: On,
3850
- onHeightChange: Hn,
3851
- initialValues: ve,
3852
- initialFrontalHeight: qe == null ? void 0 : qe.frontalHeight
3849
+ scanMeasurements: N,
3850
+ scanFrontalHeight: Ue,
3851
+ onSave: eo,
3852
+ onSkip: tn,
3853
+ onFormChange: Hn,
3854
+ onHeightChange: Vn,
3855
+ initialValues: Se,
3856
+ initialFrontalHeight: Ze == null ? void 0 : Ze.frontalHeight
3853
3857
  })
3854
3858
  }),
3855
3859
  F("div", {
3856
- ref: _t,
3860
+ ref: Pt,
3857
3861
  style: {
3858
3862
  flex: 1,
3859
3863
  position: "relative",
3860
3864
  minHeight: 0,
3861
3865
  overflow: "hidden"
3862
3866
  },
3863
- onDragOver: t.showDragDrop ? Xn : void 0,
3864
- onDragLeave: t.showDragDrop ? Gn : void 0,
3865
- onDrop: t.showDragDrop ? Zn : void 0,
3867
+ onDragOver: t.showDragDrop ? Zn : void 0,
3868
+ onDragLeave: t.showDragDrop ? Kn : void 0,
3869
+ onDrop: t.showDragDrop ? qn : void 0,
3866
3870
  children: [
3867
3871
  t.showDragDrop && !e && !S && i("div", {
3868
3872
  style: {
@@ -3875,7 +3879,7 @@ let __tla = (async () => {
3875
3879
  justifyContent: "center",
3876
3880
  pointerEvents: "none"
3877
3881
  },
3878
- children: Te ? i("div", {
3882
+ children: We ? i("div", {
3879
3883
  style: {
3880
3884
  fontSize: 18,
3881
3885
  color: "#aaa",
@@ -3913,7 +3917,7 @@ let __tla = (async () => {
3913
3917
  ]
3914
3918
  })
3915
3919
  }),
3916
- !t.showDragDrop && !e && !S && !kt && i("div", {
3920
+ !t.showDragDrop && !e && !S && !Ct && i("div", {
3917
3921
  style: {
3918
3922
  position: "absolute",
3919
3923
  inset: 0,
@@ -3951,7 +3955,7 @@ let __tla = (async () => {
3951
3955
  ]
3952
3956
  })
3953
3957
  }),
3954
- e && !U && T.length === 0 && F("div", {
3958
+ e && !K && T.length === 0 && F("div", {
3955
3959
  style: {
3956
3960
  position: "absolute",
3957
3961
  top: 16,
@@ -3980,10 +3984,10 @@ let __tla = (async () => {
3980
3984
  }
3981
3985
  }),
3982
3986
  "Click mesh to set ",
3983
- L === "AK" ? "IT" : "MPT"
3987
+ P === "AK" ? "IT" : "MPT"
3984
3988
  ]
3985
3989
  }),
3986
- e && !U && T.length === 1 && F("div", {
3990
+ e && !K && T.length === 1 && F("div", {
3987
3991
  style: {
3988
3992
  position: "absolute",
3989
3993
  top: 16,
@@ -4014,15 +4018,15 @@ let __tla = (async () => {
4014
4018
  "Click mesh to set Origin"
4015
4019
  ]
4016
4020
  }),
4017
- S && i(un, {
4021
+ S && i(hn, {
4018
4022
  message: g || "Processing mesh..."
4019
4023
  }),
4020
- V && i(un, {
4021
- message: q
4024
+ V && i(hn, {
4025
+ message: Q
4022
4026
  }),
4023
- kt && i(Lo, {
4024
- message: kt,
4025
- onDismiss: () => De(null)
4027
+ Ct && i(Do, {
4028
+ message: Ct,
4029
+ onDismiss: () => Le(null)
4026
4030
  }),
4027
4031
  t.showAmputationModal && w && i("div", {
4028
4032
  style: {
@@ -4085,15 +4089,15 @@ let __tla = (async () => {
4085
4089
  border: "2px solid",
4086
4090
  borderRadius: 4,
4087
4091
  cursor: "pointer",
4088
- borderColor: L === y ? "rgb(12, 67, 173)" : "#e0e0e0",
4089
- backgroundColor: L === y ? "rgba(12, 67, 173, 0.04)" : "#fff",
4092
+ borderColor: P === y ? "rgb(12, 67, 173)" : "#e0e0e0",
4093
+ backgroundColor: P === y ? "rgba(12, 67, 173, 0.04)" : "#fff",
4090
4094
  transition: "border-color 0.15s, background-color 0.15s"
4091
4095
  },
4092
4096
  children: [
4093
4097
  i("input", {
4094
4098
  type: "radio",
4095
4099
  name: "ampType",
4096
- checked: L === y,
4100
+ checked: P === y,
4097
4101
  onChange: () => I(y),
4098
4102
  style: {
4099
4103
  accentColor: "rgb(12, 67, 173)",
@@ -4137,7 +4141,7 @@ let __tla = (async () => {
4137
4141
  children: [
4138
4142
  i("button", {
4139
4143
  onClick: () => {
4140
- z(false), C(null);
4144
+ M(false), C(null);
4141
4145
  },
4142
4146
  style: {
4143
4147
  padding: "6px 16px",
@@ -4155,17 +4159,17 @@ let __tla = (async () => {
4155
4159
  children: "Cancel"
4156
4160
  }),
4157
4161
  i("button", {
4158
- onClick: () => L && Kn(L),
4159
- disabled: !L,
4162
+ onClick: () => P && Un(P),
4163
+ disabled: !P,
4160
4164
  style: {
4161
4165
  padding: "6px 16px",
4162
4166
  borderRadius: 4,
4163
4167
  fontSize: 14,
4164
4168
  fontWeight: 500,
4165
- backgroundColor: L ? "rgb(12, 67, 173)" : "#e0e0e0",
4169
+ backgroundColor: P ? "rgb(12, 67, 173)" : "#e0e0e0",
4166
4170
  border: "none",
4167
- color: L ? "#fff" : "#9e9e9e",
4168
- cursor: L ? "pointer" : "not-allowed",
4171
+ color: P ? "#fff" : "#9e9e9e",
4172
+ cursor: P ? "pointer" : "not-allowed",
4169
4173
  fontFamily: "system-ui, sans-serif",
4170
4174
  lineHeight: "36px",
4171
4175
  letterSpacing: "0.4px"
@@ -4187,8 +4191,8 @@ let __tla = (async () => {
4187
4191
  zIndex: 10
4188
4192
  }
4189
4193
  }),
4190
- i(Fo, {
4191
- children: F(co, {
4194
+ i(_o, {
4195
+ children: F(ho, {
4192
4196
  camera: {
4193
4197
  position: [
4194
4198
  0,
@@ -4198,14 +4202,14 @@ let __tla = (async () => {
4198
4202
  },
4199
4203
  style: {
4200
4204
  display: e ? "block" : "none",
4201
- backgroundColor: We ? "#070611" : void 0
4205
+ backgroundColor: De ? "#070611" : void 0
4202
4206
  },
4203
4207
  gl: {
4204
4208
  localClippingEnabled: true,
4205
4209
  preserveDrawingBuffer: true
4206
4210
  },
4207
4211
  scene: {
4208
- background: We ? new O.Color("#070611") : null
4212
+ background: De ? new O.Color("#070611") : null
4209
4213
  },
4210
4214
  children: [
4211
4215
  i("ambientLight", {
@@ -4235,111 +4239,111 @@ let __tla = (async () => {
4235
4239
  ],
4236
4240
  intensity: 0.2
4237
4241
  }),
4238
- e && A === "3D" && i(Io, {
4242
+ e && A === "3D" && i(Wo, {
4239
4243
  mesh: e,
4240
4244
  maxPoints: 2,
4241
- meshColor: Jt,
4242
- meshOpacity: We ? 0.3 : Vn,
4245
+ meshColor: Zt,
4246
+ meshOpacity: De ? 0.3 : Nn,
4243
4247
  frontFaceOnly: Z,
4244
- doubleShellTransparency: X && U
4248
+ doubleShellTransparency: G && K
4245
4249
  }),
4246
- e && A === "3D" && i(_o, {
4250
+ e && A === "3D" && i(Eo, {
4247
4251
  modelSize: d,
4248
4252
  labels: [
4249
- L === "AK" ? "IT" : "MPT",
4253
+ P === "AK" ? "IT" : "MPT",
4250
4254
  "Origin",
4251
4255
  "Cut Plane"
4252
4256
  ]
4253
4257
  }),
4254
- i(Vo, {
4258
+ i(Xo, {
4255
4259
  modelSize: d,
4256
- isAligned: U,
4257
- isCut: Rt,
4260
+ isAligned: K,
4261
+ isCut: Lt,
4258
4262
  mesh: e,
4259
4263
  viewMode: A,
4260
- sliceY: U && T.length >= 2 ? ke ?? zt ?? T[0].position.y : void 0,
4264
+ sliceY: K && T.length >= 2 ? Ae ?? St ?? T[0].position.y : void 0,
4261
4265
  landmarkCount: T.length,
4262
4266
  measurementGeometry: xe,
4263
- resetCameraToFrontRef: Dt
4267
+ resetCameraToFrontRef: Ft
4264
4268
  }),
4265
- !U && i(yn, {
4269
+ !K && i(Sn, {
4266
4270
  enableDamping: false
4267
4271
  }),
4268
- U && j.length > 0 && e && A === "3D" && i(jo, {
4272
+ K && N.length > 0 && e && A === "3D" && i(Go, {
4269
4273
  mesh: e,
4270
- isDragging: _n
4274
+ isDragging: Wn
4271
4275
  }),
4272
- e && U && T.length >= 3 && (() => {
4273
- const D = e.geometry.getIndex();
4274
- if (!D || D.count < 30) return null;
4275
- const W = T[2], R = T[0], ge = Ke ?? W.position.y, G = ke ?? zt ?? R.position.y;
4276
- return A === "2D" ? i(Go, {
4277
- mesh: Ue ?? e,
4278
- upperY: G,
4276
+ e && K && T.length >= 3 && (() => {
4277
+ const _ = e.geometry.getIndex();
4278
+ if (!_ || _.count < 30) return null;
4279
+ const B = T[2], R = T[0], U = Ve ?? B.position.y, $ = Ae ?? St ?? R.position.y;
4280
+ return A === "2D" ? i(Uo, {
4281
+ mesh: Ne ?? e,
4282
+ upperY: $,
4279
4283
  originY: R.position.y,
4280
4284
  modelSize: d,
4281
- meshColor: Jt,
4282
- displayUnit: _
4283
- }) : F(He, {
4285
+ meshColor: Zt,
4286
+ displayUnit: D
4287
+ }) : F(Ee, {
4284
4288
  children: [
4285
- i(Oo, {
4286
- mesh: Ue ?? e,
4287
- startY: ge,
4288
- endY: G,
4289
- spacing: ut,
4289
+ i(Vo, {
4290
+ mesh: Ne ?? e,
4291
+ startY: U,
4292
+ endY: $,
4293
+ spacing: lt,
4290
4294
  modelSize: d,
4291
- onMeasurementsChange: N,
4295
+ onMeasurementsChange: Y,
4292
4296
  reverseOrder: true,
4293
- displayUnit: _,
4294
- useInnerSurface: X && !Z,
4295
- formMeasurements: je ? Tn ?? ve : Qe ? ve : void 0,
4296
- originY: At ?? R.position.y,
4297
- wasmSlices: Ie
4297
+ displayUnit: D,
4298
+ useInnerSurface: G && !Z,
4299
+ formMeasurements: Oe ? $n ?? Se : Ge ? Se : void 0,
4300
+ originY: vt ?? R.position.y,
4301
+ wasmSlices: Pe
4298
4302
  }),
4299
- i(Ho, {
4303
+ i(Yo, {
4300
4304
  mesh: e,
4301
- greenY: At ?? R.position.y,
4305
+ greenY: vt ?? R.position.y,
4302
4306
  modelSize: d,
4303
- displayUnit: _,
4304
- bottomY: X ? W.position.y : void 0,
4305
- formHeight: je ? $n : Qe ? qe == null ? void 0 : qe.frontalHeight : void 0
4307
+ displayUnit: D,
4308
+ bottomY: G ? B.position.y : void 0,
4309
+ formHeight: Oe ? jn : Ge ? Ze == null ? void 0 : Ze.frontalHeight : void 0
4306
4310
  }),
4307
- i(Zo, {
4311
+ i(Jo, {
4308
4312
  mesh: e,
4309
- yPosition: At ?? R.position.y,
4310
- onYChange: (J) => {
4311
- Gt(J), Le(null);
4312
- const oe = J - R.position.y;
4313
- Mt((zt ?? R.position.y + ut * 2) + oe);
4313
+ yPosition: vt ?? R.position.y,
4314
+ onYChange: (ge) => {
4315
+ Nt(ge), ke(null);
4316
+ const Ce = ge - R.position.y;
4317
+ wt((St ?? R.position.y + lt * 2) + Ce);
4314
4318
  },
4315
- minY: R.position.y - ut,
4316
- maxY: R.position.y + ut,
4319
+ minY: R.position.y - lt,
4320
+ maxY: R.position.y + lt,
4317
4321
  modelSize: d,
4318
4322
  color: "#44ff44",
4319
4323
  hoverColor: "#88ff88",
4320
4324
  dragColor: "#ffffff",
4321
- label: L === "AK" ? "IT" : "MPT",
4322
- onDragStart: () => Xt(true),
4323
- onDragEnd: () => Xt(false)
4325
+ label: P === "AK" ? "IT" : "MPT",
4326
+ onDragStart: () => Vt(true),
4327
+ onDragEnd: () => Vt(false)
4324
4328
  })
4325
4329
  ]
4326
4330
  });
4327
4331
  })(),
4328
- e && U && A === "3D" && We && i(pr, {
4332
+ e && K && A === "3D" && De && i(xr, {
4329
4333
  mesh: e
4330
4334
  }),
4331
- e && t.showDebug && We && A === "3D" && i(ur, {
4335
+ e && t.showDebug && De && A === "3D" && i(mr, {
4332
4336
  mesh: e,
4333
4337
  modelSize: d,
4334
- layers: Zt,
4338
+ layers: Yt,
4335
4339
  landmarkPoints: T,
4336
4340
  componentDebug: null,
4337
4341
  aoData: me,
4338
- aoGeometry: $,
4342
+ aoGeometry: H,
4339
4343
  measurementGeometry: xe
4340
4344
  }),
4341
- i(xr, {
4342
- screenshotFnRef: Nn,
4345
+ i(Sr, {
4346
+ screenshotFnRef: Xn,
4343
4347
  mesh: e,
4344
4348
  modelSize: d,
4345
4349
  measurementGeometry: xe
@@ -4374,8 +4378,8 @@ let __tla = (async () => {
4374
4378
  },
4375
4379
  children: "Start Over"
4376
4380
  }),
4377
- !U && T.length >= 1 && i("button", {
4378
- onClick: Yn,
4381
+ !K && T.length >= 1 && i("button", {
4382
+ onClick: Gn,
4379
4383
  style: {
4380
4384
  padding: "6px 16px",
4381
4385
  borderRadius: 4,
@@ -4391,8 +4395,8 @@ let __tla = (async () => {
4391
4395
  },
4392
4396
  children: "Reset Points"
4393
4397
  }),
4394
- U && !lt && i("button", {
4395
- onClick: Jn,
4398
+ K && !nt && i("button", {
4399
+ onClick: Qn,
4396
4400
  style: {
4397
4401
  padding: "6px 16px",
4398
4402
  borderRadius: 4,
@@ -4410,15 +4414,15 @@ let __tla = (async () => {
4410
4414
  })
4411
4415
  ]
4412
4416
  }),
4413
- t.showDebug && We && e && A === "3D" && i(gr, {
4414
- layers: Zt,
4415
- onToggleLayer: (y) => Wn((D) => ({
4416
- ...D,
4417
- [y]: !D[y]
4417
+ t.showDebug && De && e && A === "3D" && i(yr, {
4418
+ layers: Yt,
4419
+ onToggleLayer: (y) => En((_) => ({
4420
+ ..._,
4421
+ [y]: !_[y]
4418
4422
  })),
4419
- isDoubleShell: X
4423
+ isDoubleShell: G
4420
4424
  }),
4421
- U && j.length > 0 && F("div", {
4425
+ K && N.length > 0 && F("div", {
4422
4426
  style: {
4423
4427
  position: "absolute",
4424
4428
  top: 16,
@@ -4438,7 +4442,7 @@ let __tla = (async () => {
4438
4442
  },
4439
4443
  children: [
4440
4444
  i("button", {
4441
- onClick: () => P("3D"),
4445
+ onClick: () => L("3D"),
4442
4446
  style: {
4443
4447
  padding: "6px 14px",
4444
4448
  fontSize: 13,
@@ -4452,7 +4456,7 @@ let __tla = (async () => {
4452
4456
  children: "Orbital"
4453
4457
  }),
4454
4458
  i("button", {
4455
- onClick: () => P("2D"),
4459
+ onClick: () => L("2D"),
4456
4460
  style: {
4457
4461
  padding: "6px 14px",
4458
4462
  fontSize: 13,
@@ -4482,9 +4486,9 @@ let __tla = (async () => {
4482
4486
  style: {
4483
4487
  padding: "6px 14px",
4484
4488
  fontSize: 13,
4485
- fontWeight: _ === "mm" ? 600 : 400,
4486
- backgroundColor: _ === "mm" ? "rgb(12, 67, 173)" : "#fff",
4487
- color: _ === "mm" ? "#fff" : "#666",
4489
+ fontWeight: D === "mm" ? 600 : 400,
4490
+ backgroundColor: D === "mm" ? "rgb(12, 67, 173)" : "#fff",
4491
+ color: D === "mm" ? "#fff" : "#666",
4488
4492
  border: "none",
4489
4493
  cursor: "pointer",
4490
4494
  fontFamily: "system-ui, sans-serif"
@@ -4496,9 +4500,9 @@ let __tla = (async () => {
4496
4500
  style: {
4497
4501
  padding: "6px 14px",
4498
4502
  fontSize: 13,
4499
- fontWeight: _ === "inch" ? 600 : 400,
4500
- backgroundColor: _ === "inch" ? "rgb(12, 67, 173)" : "#fff",
4501
- color: _ === "inch" ? "#fff" : "#666",
4503
+ fontWeight: D === "inch" ? 600 : 400,
4504
+ backgroundColor: D === "inch" ? "rgb(12, 67, 173)" : "#fff",
4505
+ color: D === "inch" ? "#fff" : "#666",
4502
4506
  border: "none",
4503
4507
  borderLeft: "1px solid #ccc",
4504
4508
  cursor: "pointer",
@@ -4548,7 +4552,7 @@ let __tla = (async () => {
4548
4552
  })
4549
4553
  ]
4550
4554
  }),
4551
- A === "3D" && ve && i("div", {
4555
+ A === "3D" && Se && i("div", {
4552
4556
  style: {
4553
4557
  display: "flex",
4554
4558
  borderRadius: 6,
@@ -4557,13 +4561,13 @@ let __tla = (async () => {
4557
4561
  boxShadow: "0 2px 8px rgba(0,0,0,0.1)"
4558
4562
  },
4559
4563
  children: i("button", {
4560
- onClick: () => Lt((y) => !y),
4564
+ onClick: () => Mt((y) => !y),
4561
4565
  style: {
4562
4566
  padding: "6px 14px",
4563
4567
  fontSize: 13,
4564
- fontWeight: Qe ? 600 : 400,
4565
- backgroundColor: Qe ? "rgb(12, 67, 173)" : "#fff",
4566
- color: Qe ? "#fff" : "#666",
4568
+ fontWeight: Ge ? 600 : 400,
4569
+ backgroundColor: Ge ? "rgb(12, 67, 173)" : "#fff",
4570
+ color: Ge ? "#fff" : "#666",
4567
4571
  border: "none",
4568
4572
  cursor: "pointer",
4569
4573
  fontFamily: "system-ui, sans-serif"
@@ -4581,13 +4585,13 @@ let __tla = (async () => {
4581
4585
  },
4582
4586
  children: i("button", {
4583
4587
  onClick: async () => {
4584
- const y = await et();
4588
+ const y = await Ke();
4585
4589
  if (!y) return;
4586
- const D = (/* @__PURE__ */ new Date()).toISOString().slice(0, 10), W = (R, ge) => {
4587
- const G = document.createElement("a");
4588
- G.href = R, G.download = ge, G.click();
4590
+ const _ = (/* @__PURE__ */ new Date()).toISOString().slice(0, 10), B = (R, U) => {
4591
+ const $ = document.createElement("a");
4592
+ $.href = R, $.download = U, $.click();
4589
4593
  };
4590
- W(y.frontal_view_png, `measurements_front_${D}.png`), await new Promise((R) => setTimeout(R, 300)), W(y.side_view_png, `measurements_transverse_${D}.png`);
4594
+ B(y.frontal_view_png, `measurements_front_${_}.png`), await new Promise((R) => setTimeout(R, 300)), B(y.side_view_png, `measurements_transverse_${_}.png`);
4591
4595
  },
4592
4596
  style: {
4593
4597
  padding: "6px 14px",
@@ -4611,13 +4615,13 @@ let __tla = (async () => {
4611
4615
  boxShadow: "0 2px 8px rgba(0,0,0,0.1)"
4612
4616
  },
4613
4617
  children: i("button", {
4614
- onClick: () => Rn((y) => !y),
4618
+ onClick: () => Bn((y) => !y),
4615
4619
  style: {
4616
4620
  padding: "6px 14px",
4617
4621
  fontSize: 13,
4618
- fontWeight: We ? 600 : 400,
4619
- backgroundColor: We ? "#e65100" : "#fff",
4620
- color: We ? "#fff" : "#666",
4622
+ fontWeight: De ? 600 : 400,
4623
+ backgroundColor: De ? "#e65100" : "#fff",
4624
+ color: De ? "#fff" : "#666",
4621
4625
  border: "none",
4622
4626
  cursor: "pointer",
4623
4627
  fontFamily: "system-ui, sans-serif"
@@ -4627,13 +4631,13 @@ let __tla = (async () => {
4627
4631
  })
4628
4632
  ]
4629
4633
  }),
4630
- e && se && i(No, {
4634
+ e && re && i(Zo, {
4631
4635
  wasAutoScaled: ae,
4632
4636
  onDismiss: () => ee(false)
4633
4637
  }),
4634
- e && we && U && i(Yo, {
4635
- isDoubleShell: X,
4636
- onDismiss: () => re(false)
4638
+ e && ye && K && i(Ko, {
4639
+ isDoubleShell: G,
4640
+ onDismiss: () => oe(false)
4637
4641
  })
4638
4642
  ]
4639
4643
  })
@@ -4688,9 +4692,9 @@ let __tla = (async () => {
4688
4692
  flexShrink: 0
4689
4693
  },
4690
4694
  children: [
4691
- !je && s && i("button", {
4695
+ !Oe && s && i("button", {
4692
4696
  disabled: ze,
4693
- onClick: () => Pt(true),
4697
+ onClick: () => At(true),
4694
4698
  style: {
4695
4699
  padding: "6px 16px",
4696
4700
  borderRadius: 4,
@@ -4706,15 +4710,15 @@ let __tla = (async () => {
4706
4710
  },
4707
4711
  children: "Have Galileo Check My Measurements"
4708
4712
  }),
4709
- je && i("div", {}),
4713
+ Oe && i("div", {}),
4710
4714
  F("div", {
4711
4715
  style: {
4712
4716
  display: "flex",
4713
4717
  gap: 8
4714
4718
  },
4715
4719
  children: [
4716
- e && !U && T.length >= 2 && i("button", {
4717
- onClick: Un,
4720
+ e && !K && T.length >= 2 && i("button", {
4721
+ onClick: Jn,
4718
4722
  style: {
4719
4723
  padding: "6px 16px",
4720
4724
  borderRadius: 4,
@@ -4730,8 +4734,8 @@ let __tla = (async () => {
4730
4734
  },
4731
4735
  children: "Next \xBB"
4732
4736
  }),
4733
- U && lt && !je && i("button", {
4734
- onClick: () => st(true),
4737
+ K && nt && !Oe && i("button", {
4738
+ onClick: () => tt(true),
4735
4739
  style: {
4736
4740
  padding: "6px 16px",
4737
4741
  borderRadius: 4,
@@ -4747,9 +4751,9 @@ let __tla = (async () => {
4747
4751
  },
4748
4752
  children: "Edit Measurements"
4749
4753
  }),
4750
- U && lt && (qn ? i("button", {
4754
+ K && nt && (to ? i("button", {
4751
4755
  disabled: ze,
4752
- onClick: () => Et("continue"),
4756
+ onClick: () => Dt("continue"),
4753
4757
  style: {
4754
4758
  padding: "6px 16px",
4755
4759
  borderRadius: 4,
@@ -4764,11 +4768,11 @@ let __tla = (async () => {
4764
4768
  lineHeight: "36px"
4765
4769
  },
4766
4770
  children: "Continue"
4767
- }) : F(He, {
4771
+ }) : F(Ee, {
4768
4772
  children: [
4769
4773
  i("button", {
4770
4774
  disabled: ze,
4771
- onClick: () => Et("use_form_measurements"),
4775
+ onClick: () => Dt("use_form_measurements"),
4772
4776
  style: {
4773
4777
  padding: "6px 16px",
4774
4778
  borderRadius: 4,
@@ -4786,7 +4790,7 @@ let __tla = (async () => {
4786
4790
  }),
4787
4791
  i("button", {
4788
4792
  disabled: ze,
4789
- onClick: () => Et("use_scan"),
4793
+ onClick: () => Dt("use_scan"),
4790
4794
  style: {
4791
4795
  padding: "6px 16px",
4792
4796
  borderRadius: 4,
@@ -4810,7 +4814,7 @@ let __tla = (async () => {
4810
4814
  })
4811
4815
  ]
4812
4816
  }),
4813
- a && It.length > 0 && F("div", {
4817
+ a && kt.length > 0 && F("div", {
4814
4818
  style: {
4815
4819
  height: 120,
4816
4820
  flexShrink: 0,
@@ -4857,18 +4861,18 @@ let __tla = (async () => {
4857
4861
  },
4858
4862
  children: [
4859
4863
  "WASM ",
4860
- Ne.current ? "v2" : "N/A",
4864
+ $e.current ? "v2" : "N/A",
4861
4865
  " | ",
4862
4866
  T.length,
4863
4867
  " pts | ",
4864
- U ? "aligned" : "unaligned",
4868
+ K ? "aligned" : "unaligned",
4865
4869
  " | ",
4866
- j.length,
4870
+ N.length,
4867
4871
  " slices"
4868
4872
  ]
4869
4873
  }),
4870
4874
  i("button", {
4871
- onClick: () => Qt([]),
4875
+ onClick: () => Kt([]),
4872
4876
  style: {
4873
4877
  background: "none",
4874
4878
  border: "1px solid #30363d",
@@ -4885,43 +4889,43 @@ let __tla = (async () => {
4885
4889
  ]
4886
4890
  }),
4887
4891
  i("div", {
4888
- ref: ct,
4892
+ ref: rt,
4889
4893
  style: {
4890
4894
  flex: 1,
4891
4895
  overflowY: "auto",
4892
4896
  padding: "4px 10px",
4893
4897
  lineHeight: 1.6
4894
4898
  },
4895
- children: It.map((y, D) => {
4896
- const W = y.includes("ERROR") || y.includes("failed"), R = y.includes("warning") || y.includes("WARN"), ge = y.includes("PIPELINE:"), G = y.includes("STATE:");
4899
+ children: kt.map((y, _) => {
4900
+ const B = y.includes("ERROR") || y.includes("failed"), R = y.includes("warning") || y.includes("WARN"), U = y.includes("PIPELINE:"), $ = y.includes("STATE:");
4897
4901
  return i("div", {
4898
4902
  style: {
4899
- color: W ? "#f85149" : R ? "#d29922" : ge ? "#58a6ff" : G ? "#3fb950" : "#8b949e",
4903
+ color: B ? "#f85149" : R ? "#d29922" : U ? "#58a6ff" : $ ? "#3fb950" : "#8b949e",
4900
4904
  whiteSpace: "pre"
4901
4905
  },
4902
4906
  children: y
4903
- }, D);
4907
+ }, _);
4904
4908
  })
4905
4909
  })
4906
4910
  ]
4907
4911
  })
4908
4912
  ]
4909
4913
  }),
4910
- Bn && i(Fn, {
4911
- onSkip: sn,
4912
- onCancel: () => Pt(false)
4914
+ Tn && i(Ln, {
4915
+ onSkip: tn,
4916
+ onCancel: () => At(false)
4913
4917
  })
4914
4918
  ]
4915
4919
  });
4916
4920
  };
4917
- function xr({ screenshotFnRef: t }) {
4918
- return K(() => {
4921
+ function Sr({ screenshotFnRef: t }) {
4922
+ return q(() => {
4919
4923
  t.current = null;
4920
4924
  }, [
4921
4925
  t
4922
4926
  ]), null;
4923
4927
  }
4924
- Dn = function(t) {
4928
+ Rn = function(t) {
4925
4929
  const r = t === "AK" ? 2 : 1, n = [];
4926
4930
  for (let o = 2; o >= 1; o -= r) n.push(`${o}_above`);
4927
4931
  n.push("at_ref");
@@ -4940,25 +4944,25 @@ let __tla = (async () => {
4940
4944
  ]) n.push(`${o}_below`);
4941
4945
  return n;
4942
4946
  };
4943
- bt = function(t, r) {
4944
- const n = Dn(r), o = {};
4947
+ ht = function(t, r) {
4948
+ const n = Rn(r), o = {};
4945
4949
  for (let s = 0; s < Math.min(t.length, n.length); s++) {
4946
4950
  const a = t[s];
4947
4951
  a != null && !isNaN(a) && (o[n[s]] = a);
4948
4952
  }
4949
4953
  return o;
4950
4954
  };
4951
- br = function(t, r) {
4955
+ vr = function(t, r) {
4952
4956
  if (!t) return;
4953
- const o = Dn(r).map((s) => {
4957
+ const o = Rn(r).map((s) => {
4954
4958
  const a = t[s];
4955
4959
  return a ?? void 0;
4956
4960
  });
4957
4961
  if (!o.every((s) => s == null)) return o;
4958
4962
  };
4959
- Lr = ({ request: t, onComplete: r, wasmModule: n }) => {
4960
- const [o, s] = B(null);
4961
- K(() => {
4963
+ _r = ({ request: t, onComplete: r, wasmModule: n }) => {
4964
+ const [o, s] = W(null);
4965
+ q(() => {
4962
4966
  if (n != null) return;
4963
4967
  let e = false;
4964
4968
  const m = async (d) => {
@@ -4978,23 +4982,23 @@ let __tla = (async () => {
4978
4982
  }, [
4979
4983
  n
4980
4984
  ]);
4981
- const a = n !== void 0 ? n : o ?? void 0, c = H(() => br(t.form_measurements, t.spacing_type), [
4985
+ const a = n !== void 0 ? n : o ?? void 0, c = j(() => vr(t.form_measurements, t.spacing_type), [
4982
4986
  t.form_measurements,
4983
4987
  t.spacing_type
4984
4988
  ]), l = (e) => {
4985
4989
  var _a, _b;
4986
- const m = e.scanMeasurements.map((A) => +(A.modifiedValue ?? A.originalValue).toFixed(1)), d = bt(m, t.spacing_type);
4990
+ const m = e.scanMeasurements.map((A) => +(A.modifiedValue ?? A.originalValue).toFixed(1)), d = ht(m, t.spacing_type);
4987
4991
  let f, u;
4988
4992
  if (e.formMeasurements) {
4989
- f = bt(e.formMeasurements, t.spacing_type);
4990
- const A = e.scanMeasurements.map((P, v) => {
4993
+ f = ht(e.formMeasurements, t.spacing_type);
4994
+ const A = e.scanMeasurements.map((L, v) => {
4991
4995
  var _a2;
4992
4996
  const k = (_a2 = e.formMeasurements) == null ? void 0 : _a2[v];
4993
- return k == null || isNaN(k) ? null : +((P.modifiedValue ?? P.originalValue) - k).toFixed(1);
4997
+ return k == null || isNaN(k) ? null : +((L.modifiedValue ?? L.originalValue) - k).toFixed(1);
4994
4998
  });
4995
- u = bt(A, t.spacing_type);
4999
+ u = ht(A, t.spacing_type);
4996
5000
  }
4997
- const x = e.userEnteredMeasurements ? bt(e.userEnteredMeasurements.circumferences, t.spacing_type) : void 0, S = e.decision === "use_scan" || e.decision === "continue", p = S ? d : x ?? f ?? d, g = S ? +e.frontalHeight.toFixed(1) : +(((_a = e.userEnteredMeasurements) == null ? void 0 : _a.frontalHeight) ?? e.frontalHeight).toFixed(1), b = {
5001
+ const x = e.userEnteredMeasurements ? ht(e.userEnteredMeasurements.circumferences, t.spacing_type) : void 0, S = e.decision === "use_scan" || e.decision === "continue", p = S ? d : x ?? f ?? d, g = S ? +e.frontalHeight.toFixed(1) : +(((_a = e.userEnteredMeasurements) == null ? void 0 : _a.frontalHeight) ?? e.frontalHeight).toFixed(1), b = {
4998
5002
  spacing_type: t.spacing_type,
4999
5003
  source_unit: "mm",
5000
5004
  file_format: e.fileFormat,
@@ -5026,8 +5030,8 @@ let __tla = (async () => {
5026
5030
  height: "100%",
5027
5031
  display: "flex"
5028
5032
  },
5029
- children: i(mr, {
5030
- config: go,
5033
+ children: i(wr, {
5034
+ config: yo,
5031
5035
  spacingType: t.spacing_type,
5032
5036
  scanUrl: t.scan_url,
5033
5037
  formMeasurements: c,
@@ -5038,9 +5042,9 @@ let __tla = (async () => {
5038
5042
  };
5039
5043
  })();
5040
5044
  export {
5041
- Lr as G,
5045
+ _r as G,
5042
5046
  __tla,
5043
- bt as a,
5044
- br as c,
5045
- Dn as g
5047
+ ht as a,
5048
+ vr as c,
5049
+ Rn as g
5046
5050
  };