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

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 We } from "react/jsx-runtime";
2
- import { createContext as $n, Component as Hn, useCallback as J, useMemo as j, useState as R, memo as jn, useEffect as U, useRef as re, forwardRef as Vn, createElement as Yt } from "react";
3
- import { useFrame as en, useThree as tn, Canvas as Nn } from "@react-three/fiber";
4
- import { Html as Oe, Line as ae, OrbitControls as nn } from "@react-three/drei";
5
- import * as $ from "three";
6
- import { Plane as dt, Vector3 as z, Box3 as on, Line3 as rn, Raycaster as Gn } from "three";
7
- import { create as Yn } from "zustand";
8
- import { OBJLoader as sn } from "three/examples/jsm/loaders/OBJLoader.js";
9
- import { STLLoader as Xn } from "three/examples/jsm/loaders/STLLoader.js";
10
- import { MeshBVH as ft } from "three-mesh-bvh";
11
- let cr, lt, qo, mn;
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";
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;
12
12
  let __tla = (async () => {
13
- const Zn = {
13
+ const ho = {
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
- }, Kn = {
22
+ }, go = {
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
- }, Un = $n(Zn), _t = Yn((t, r) => ({
31
+ }, mo = io(ho), Nt = uo((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
- })), Jn = 0.45, ut = 3, Lt = 1e-3, at = 25.4, Qn = [
67
+ })), xo = 0.45, Ct = 3, Vt = 1e-3, yt = 25.4, bo = [
68
68
  0.25,
69
69
  -0.25,
70
70
  0.5,
71
71
  -0.5
72
72
  ];
73
- function qn(t) {
73
+ function yo(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 eo(t, r, n, o) {
93
+ function wo(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 D = 0; D < l; D++) {
97
- const E = r[D * 3] * o, V = r[D * 3 + 1] * o, Y = r[D * 3 + 2] * o;
96
+ for (let _ = 0; _ < l; _++) {
97
+ const E = r[_ * 3] * o, V = r[_ * 3 + 1] * o, Y = r[_ * 3 + 2] * o;
98
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);
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, M = Math.min(128, Math.max(16, Math.round(Math.cbrt(l)))), h = b / M, C = A / M, L = P / M, _ = /* @__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, Y = r[D * 3 + 2] * o - g, Q = Math.min(M - 1, Math.max(0, Math.floor((E + v) / h))), me = Math.min(M - 1, Math.max(0, Math.floor((V + k) / C))), ie = Math.min(M - 1, Math.max(0, Math.floor((Y + w) / L))), ce = Q * M * M + me * M + ie;
103
- let ne = _.get(ce);
104
- ne || (ne = [], _.set(ce, ne)), ne.push(D);
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(_);
105
105
  }
106
- for (let D = 0; D < a; D++) {
107
- const E = s.getX(D), V = s.getY(D), Y = s.getZ(D), Q = Math.min(M - 1, Math.max(0, Math.floor((E + v) / h))), me = Math.min(M - 1, Math.max(0, Math.floor((V + k) / C))), ie = Math.min(M - 1, Math.max(0, Math.floor((Y + w) / L)));
108
- let ce = 1 / 0, ne = 0;
109
- for (let q = 0; q <= M && ce > 0; q++) {
110
- for (let X = -q; X <= q; X++) for (let de = -q; de <= q; de++) for (let Z = -q; Z <= q; Z++) {
111
- if (q > 0 && Math.abs(X) < q && Math.abs(de) < q && Math.abs(Z) < q) continue;
112
- const fe = Q + X, he = me + de, ue = ie + Z;
113
- if (fe < 0 || fe >= M || he < 0 || he >= M || ue < 0 || ue >= M) continue;
114
- const H = _.get(fe * M * M + he * M + ue);
115
- if (H) for (const ee of H) {
116
- const ge = r[ee * 3] * o - S, ye = r[ee * 3 + 1] * o - p, xe = r[ee * 3 + 2] * o - g, te = (E - ge) ** 2 + (V - ye) ** 2 + (Y - xe) ** 2;
117
- te < ce && (ce = te, ne = ee);
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);
118
118
  }
119
119
  }
120
- if (ce < 1 / 0) break;
120
+ if (fe < 1 / 0) break;
121
121
  }
122
- c[D * 3] = n[ne * 3], c[D * 3 + 1] = n[ne * 3 + 1], c[D * 3 + 2] = n[ne * 3 + 2];
122
+ c[_ * 3] = n[se * 3], c[_ * 3 + 1] = n[se * 3 + 1], c[_ * 3 + 2] = n[se * 3 + 2];
123
123
  }
124
- t.setAttribute("color", new $.Float32BufferAttribute(c, 3));
124
+ t.setAttribute("color", new O.Float32BufferAttribute(c, 3));
125
125
  }
126
- const Xt = {
126
+ const dn = {
127
127
  debug: 0,
128
128
  info: 1,
129
129
  warn: 2,
130
130
  error: 3
131
131
  };
132
- let ln = "warn", an = null;
133
- const le = {
132
+ let Cn = "warn", Mn = null;
133
+ const ce = {
134
134
  setLevel(t) {
135
- ln = t;
135
+ Cn = t;
136
136
  },
137
137
  setHandler(t) {
138
- an = t;
138
+ Mn = t;
139
139
  },
140
140
  debug(t, r, n) {
141
- it("debug", t, r, n);
141
+ mt("debug", t, r, n);
142
142
  },
143
143
  info(t, r, n) {
144
- it("info", t, r, n);
144
+ mt("info", t, r, n);
145
145
  },
146
146
  warn(t, r, n) {
147
- it("warn", t, r, n);
147
+ mt("warn", t, r, n);
148
148
  },
149
149
  error(t, r, n) {
150
- it("error", t, r, n);
150
+ mt("error", t, r, n);
151
151
  }
152
152
  };
153
- function it(t, r, n, o) {
154
- if (Xt[t] < Xt[ln]) return;
153
+ function mt(t, r, n, o) {
154
+ if (dn[t] < dn[Cn]) 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
- an == null ? void 0 : an(t, r, n, o);
177
+ Mn == null ? void 0 : Mn(t, r, n, o);
178
178
  }
179
- function ct(t) {
179
+ function wt(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,32 +189,32 @@ let __tla = (async () => {
189
189
  indices: a
190
190
  };
191
191
  }
192
- function cn(t, r) {
193
- const n = new $.BufferGeometry();
194
- return n.setAttribute("position", new $.Float32BufferAttribute(t, 3)), n.setIndex(new $.BufferAttribute(r, 1)), n.computeVertexNormals(), n;
192
+ function zn(t, r) {
193
+ const n = new O.BufferGeometry();
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 to(t, r, n) {
196
+ async function So(t, r, n) {
197
197
  try {
198
- const o = qn(t);
198
+ const o = yo(t);
199
199
  n == null ? void 0 : n("Parsing mesh...");
200
- const a = new sn().parse(t);
200
+ const a = new vn().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 } = ct(c);
206
- if (l.length < 9 || e.length < 3) return le.warn("wasm", `Mesh too small: positions=${l.length} indices=${e.length}`), null;
207
- for (let b = 0; b < Math.min(l.length, 300); b++) if (!isFinite(l[b])) return le.error("wasm", `Invalid position data: NaN/Infinity at index ${b}`), null;
205
+ const { positions: l, indices: e } = wt(c);
206
+ if (l.length < 9 || e.length < 3) return ce.warn("wasm", `Mesh too small: positions=${l.length} indices=${e.length}`), null;
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;
209
- for (let b = 0; b < Math.min(e.length, 300); b++) if (e[b] >= m) return le.error("wasm", `Out-of-bounds index: ${e[b]} >= ${m}`), null;
209
+ for (let b = 0; b < Math.min(e.length, 300); b++) if (e[b] >= m) return ce.error("wasm", `Out-of-bounds index: ${e[b]} >= ${m}`), null;
210
210
  n == null ? void 0 : n("Processing mesh (WASM)...");
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
- if (le.debug("wasm", "preprocess result", p), f.length === 0) return null;
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 = cn(f, u);
214
+ const g = zn(f, u);
215
215
  if (o) {
216
216
  const b = x ? 1e3 : 1;
217
- eo(g, o.positions, o.colors, b);
217
+ wo(g, o.positions, o.colors, b);
218
218
  }
219
219
  return {
220
220
  geometry: g,
@@ -223,18 +223,18 @@ let __tla = (async () => {
223
223
  detectedUnit: S
224
224
  };
225
225
  } catch (o) {
226
- return le.error("wasm", "Processing failed", o), null;
226
+ return ce.error("wasm", "Processing failed", o), null;
227
227
  }
228
228
  }
229
- function no(t) {
230
- const n = new sn().parse(t);
229
+ function vo(t) {
230
+ const n = new vn().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 kt(t) {
237
- const r = await t.arrayBuffer(), s = new Xn().parse(r).getAttribute("position");
236
+ async function $t(t) {
237
+ const r = await t.arrayBuffer(), s = new po().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 oo(t, r) {
245
+ function Co(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 ro(t, r) {
249
+ function Mo(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 Je(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 dn(t, r = 1e-3, n = false) {
260
+ function An(t, r = 1e-3, n = false) {
261
261
  if (!t.length) return [];
262
262
  const o = /* @__PURE__ */ new Map(), s = (f) => {
263
- const u = oo(f, r);
263
+ const u = Co(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 = ro(u, r);
288
+ const S = Mo(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) => Je(S) - Je(x));
294
+ const f = Je(c[0]), u = c.filter((x) => Je(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 Zt(t, r, n, o = false) {
310
- const s = new dt(new z(0, 1, 0), -n), a = [], c = new on();
309
+ function fn(t, r, n, o = false) {
310
+ const s = new St(new M(0, 1, 0), -n), a = [], c = new wn();
311
311
  c.setFromBufferAttribute(r.getAttribute("position"));
312
312
  const l = {
313
313
  linePoints: [],
314
314
  lineLength: 0,
315
- rightmostPoint: new z(0, n, 0)
315
+ rightmostPoint: new M(0, n, 0)
316
316
  };
317
317
  if (!s.intersectsBox(c)) return l;
318
- const e = new rn(), m = new z();
318
+ const e = new Sn(), m = new M();
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 = dn(a, Lt, o);
329
+ const d = An(a, Vt, o);
330
330
  if (d.length < 2) return l;
331
- const f = je(d);
332
- let u = -1 / 0, x = new z(0, n, 0);
331
+ const f = Je(d);
332
+ let u = -1 / 0, x = new M(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]) < Lt * 10;
334
+ const S = d.length > 2 && d[0].distanceTo(d[d.length - 1]) < Vt * 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 Te(t, r, n, o = false) {
343
- const s = Zt(t, r, n, o);
342
+ function Ge(t, r, n, o = false) {
343
+ const s = fn(t, r, n, o);
344
344
  if (s.isClosed && s.linePoints.length >= 3) return s;
345
- le.debug("slice", `y=${n.toFixed(2)} failed (pts=${s.linePoints.length}, closed=${s.isClosed}), retrying...`);
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 Qn) {
348
- const l = Zt(t, r, n + c, o);
349
- if (l.isClosed && l.linePoints.length >= 3) return le.debug("slice", `y=${n.toFixed(2)} recovered with offset ${c > 0 ? "+" : ""}${c}mm (pts=${l.linePoints.length}, len=${l.lineLength.toFixed(1)}mm)`), l;
347
+ for (const c of bo) {
348
+ const l = fn(t, r, n + c, o);
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
- return le.warn("slice", `y=${n.toFixed(2)} all retries exhausted (pts=${a.linePoints.length}, closed=${a.isClosed})`), a;
352
+ return ce.warn("slice", `y=${n.toFixed(2)} all retries exhausted (pts=${a.linePoints.length}, closed=${a.isClosed})`), a;
353
353
  }
354
- function io(t, r, n, o) {
355
- const s = new dt().setFromNormalAndCoplanarPoint(o.clone().normalize(), n), a = new on();
354
+ function zo(t, r, n, o) {
355
+ const s = new St().setFromNormalAndCoplanarPoint(o.clone().normalize(), n), a = new wn();
356
356
  if (a.setFromBufferAttribute(r.getAttribute("position")), !s.intersectsBox(a)) return 0;
357
- const c = [], l = new rn(), e = new z();
357
+ const c = [], l = new Sn(), e = new M();
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 = dn(c, Lt);
369
- return je(m);
368
+ const m = An(c, Vt);
369
+ return Je(m);
370
370
  }
371
- function Pt(t) {
372
- return new ft(t, {
373
- maxLeafTris: ut
371
+ function jt(t) {
372
+ return new vt(t, {
373
+ maxLeafTris: Ct
374
374
  });
375
375
  }
376
- function so(t, r, n, o) {
376
+ function Ao(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 ft(t, {
392
- maxLeafTris: ut
393
- }), e = Te(l, t, r);
391
+ const l = new vt(t, {
392
+ maxLeafTris: Ct
393
+ }), e = Ge(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 = Te(l, t, m);
403
+ const d = Ge(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 = Te(l, t, f);
413
+ const u = Ge(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 Ae = "pipeline";
428
- function lo(t, r, n, o) {
427
+ const Pe = "pipeline";
428
+ function ko(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((H) => new z(H.position.x, H.position.y, H.position.z));
434
+ let l = t.geometry, e = a.map(($) => new M($.position.x, $.position.y, $.position.z));
435
435
  const m = e[0], d = e[1];
436
436
  if (!c) {
437
- o.onStatus("Aligning mesh (JS fallback)..."), le.warn(Ae, "WASM not available, using JS fallback alignment");
438
- const H = new z(0, 1, 0), ee = new z().subVectors(d, m).normalize(), ge = ee.dot(H), ye = new z().crossVectors(ee, H);
439
- if (ye.length() > 1e-4) {
440
- ye.normalize();
441
- const G = new $.Quaternion().setFromAxisAngle(ye, Math.acos(Math.min(1, Math.max(-1, ge))));
442
- l.applyMatrix4(new $.Matrix4().makeRotationFromQuaternion(G)), e = e.map((ke) => ke.clone().applyQuaternion(G));
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));
443
443
  }
444
444
  if (e[0].y > e[1].y) {
445
- const G = new $.Quaternion().setFromAxisAngle(new z(1, 0, 0), Math.PI);
446
- l.applyMatrix4(new $.Matrix4().makeRotationFromQuaternion(G)), e = e.map((ke) => ke.clone().applyQuaternion(G));
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));
447
447
  }
448
- const xe = e[0].clone();
449
- l.translate(-xe.x, -xe.y, -xe.z), e = e.map((G) => new z(G.x - xe.x, G.y - xe.y, G.z - xe.z)), l.computeVertexNormals(), l.computeBoundingBox();
450
- const te = new z(e[0].x, e[0].y, e[0].z);
451
- e.push(te), o.addLandmarkPoint({
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({
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: te.x,
460
- y: te.y,
461
- z: te.z
459
+ x: re.x,
460
+ y: re.y,
461
+ z: re.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((G) => ({
469
- x: G.x,
470
- y: G.y,
471
- z: G.z
472
- }))), o.setAligned(true), o.setCut(true), o.setAdjustedStartY(null), o.setAdjustedEndY(null), o.setOriginalEndY(e[1].y + 2 * at);
473
- const N = new z();
474
- l.computeBoundingBox(), l.boundingBox.getSize(N), o.setModelSize(Math.max(N.x, N.y, N.z)), s.dispose();
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();
475
475
  return;
476
476
  }
477
- const { positions: f, indices: u } = ct(l), x = new Float32Array([
477
+ const { positions: f, indices: u } = wt(l), x = new Float32Array([
478
478
  m.x,
479
479
  m.y,
480
480
  m.z
@@ -485,22 +485,22 @@ 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
- le.info(Ae, `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(Pe, `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
493
  ]), P = c.find_min_cross_section(f, u, S, A, 10), v = P.plane_normal();
494
- le.info(Ae, "Cross-section found", P.details()), o.onStatus("Aligning mesh...");
494
+ ce.info(Pe, "Cross-section found", P.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 M = w.positions(), h = w.mpt(), C = w.origin();
500
+ let z = w.positions(), h = w.mpt(), C = w.origin();
501
501
  const L = w.transform();
502
- le.info(Ae, "Alignment complete", w.details());
503
- const _ = [
502
+ ce.info(Pe, "Alignment complete", w.details());
503
+ const I = [
504
504
  L[3],
505
505
  L[4],
506
506
  L[5],
@@ -510,40 +510,40 @@ let __tla = (async () => {
510
510
  L[9],
511
511
  L[10],
512
512
  L[11]
513
- ], D = new Float32Array([
514
- _[0] * v[0] + _[1] * v[1] + _[2] * v[2],
515
- _[3] * v[0] + _[4] * v[1] + _[5] * v[2],
516
- _[6] * v[0] + _[7] * v[1] + _[8] * v[2]
513
+ ], _ = new Float32Array([
514
+ I[0] * v[0] + I[1] * v[1] + I[2] * v[2],
515
+ I[3] * v[0] + I[4] * v[1] + I[5] * v[2],
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), D);
520
- le.debug(Ae, `Subdivide: ${E.count()} pts, spacing=${E.spacing().toFixed(1)}mm`);
521
- const V = E.points(), Y = E.count(), Q = 2, me = 1, ie = [];
522
- for (let H = Q; H < Y - me; H++) ie.push(V[H * 3 + 1]);
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]);
523
523
  o.onStatus("Computing cross-sections...");
524
- let ce = [];
525
- if (ie.length >= 2) {
526
- const ee = (g ? c.batch_cross_sections_y_inner.bind(c) : c.batch_cross_sections_y.bind(c))(M, u, new Float32Array(ie), 10);
527
- le.debug(Ae, "Batch (subdivision)", ee.details());
528
- const ge = ee.all_loop_points(), ye = ee.offsets(), xe = ee.circumferences();
529
- for (let te = 0; te < ye.length - 1; te++) {
530
- const N = ye[te], G = ye[te + 1];
531
- if (G <= N || xe[te] <= 0) continue;
532
- const ke = (G - N) / 3;
533
- if (ke < 3) continue;
534
- let ze = 0, $e = 0, oe = 0;
535
- for (let Ce = N; Ce < G; Ce += 3) ze += ge[Ce], $e += ge[Ce + 1], oe += ge[Ce + 2];
536
- ce.push(ze / ke, $e / ke, oe / ke);
524
+ let fe = [];
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);
537
537
  }
538
538
  }
539
- if (ce.length >= 6) {
539
+ if (fe.length >= 6) {
540
540
  o.onStatus("Refining alignment...");
541
- const H = c.refine_alignment(new Float32Array(ce), M, new Float32Array(C), new Float32Array(h));
542
- le.info(Ae, "Refinement complete", H.details()), M = H.positions(), h = H.mpt(), C = H.origin();
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();
543
543
  }
544
- const ne = l.getAttribute("color"), q = cn(M, u);
545
- ne && q.setAttribute("color", ne), l.dispose(), l = q, 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 X = new z(e[0].x, e[0].y, e[0].z);
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
547
  e.push(X), o.addLandmarkPoint({
548
548
  faceIndex: -1,
549
549
  vertexIndices: [
@@ -561,46 +561,46 @@ let __tla = (async () => {
561
561
  v: 0.33,
562
562
  w: 0.34
563
563
  }
564
- }), o.updateLandmarkPositions(e.map((H) => ({
565
- x: H.x,
566
- y: H.y,
567
- z: H.z
564
+ }), o.updateLandmarkPositions(e.map(($) => ({
565
+ x: $.x,
566
+ y: $.y,
567
+ z: $.z
568
568
  }))), o.setAligned(true);
569
- const de = l.boundingBox, Z = new z();
570
- de.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 * at), o.onStatus("Computing final measurements...");
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...");
571
571
  {
572
- const H = ct(l), ee = e[1].y, ge = e[0].y;
573
- let ye = 1 / 0, xe = -1 / 0;
574
- const te = H.positions;
575
- for (let oe = 1; oe < te.length; oe += 3) te[oe] < ye && (ye = te[oe]), te[oe] > xe && (xe = te[oe]);
576
- const N = 25.4, G = [];
577
- G.push(ee);
578
- for (let oe = 1; oe <= 2; oe++) {
579
- const Ce = ee + oe * N;
580
- Ce < xe - 1 && G.push(Ce);
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);
581
581
  }
582
- for (let oe = ee - N; oe > ge; oe -= N) G.push(oe);
583
- G.sort((oe, Ce) => oe - Ce), le.info(Ae, `Horizontal slices: ${G.length} Y planes, range ${(_b = G[0]) == null ? void 0 : _b.toFixed(1)} \u2192 ${(_c = G[G.length - 1]) == null ? void 0 : _c.toFixed(1)} mm`);
584
- const ze = (g ? c.batch_cross_sections_y_inner.bind(c) : c.batch_cross_sections_y.bind(c))(H.positions, H.indices, new Float32Array(G), 10);
585
- le.info(Ae, `Horizontal slices (${g ? "inner" : "outer"}): ${ze.count()}/${G.length} valid`), le.debug(Ae, "Slice details", ze.details());
586
- const $e = {
587
- yValues: G,
588
- circumferences: Array.from(ze.circumferences()),
589
- allLoopPoints: new Float32Array(ze.all_loop_points()),
590
- offsets: new Uint32Array(ze.offsets()),
591
- mptY: ee,
592
- originY: ge
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()),
591
+ mptY: ne,
592
+ originY: xe
593
593
  };
594
- (_d = o.setWasmSlices) == null ? void 0 : _d.call(o, $e);
594
+ (_d = o.setWasmSlices) == null ? void 0 : _d.call(o, Ke);
595
595
  }
596
596
  o.onStatus("Validating results...");
597
- const fe = e[1].y, he = e[0].y, ue = so(l, fe, he, n);
598
- ue.valid || le.warn(Ae, `Validation: ${ue.reason}`), o.setClippedReferenceGeometry ? (s.computeVertexNormals(), o.setClippedReferenceGeometry(s)) : s.dispose();
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();
599
599
  } catch (l) {
600
- le.error(Ae, "Processing failed", l), o.setError(l instanceof Error ? l.message : "Failed to process mesh."), s.dispose();
600
+ ce.error(Pe, "Processing failed", l), o.setError(l instanceof Error ? l.message : "Failed to process mesh."), s.dispose();
601
601
  }
602
602
  }
603
- class ao extends Hn {
603
+ class Fo extends so {
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 co = ({ message: t, onDismiss: r }) => F("div", {
670
+ const Lo = ({ 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
- }), Kt = ({ message: t }) => F("div", {
723
+ }), un = ({ 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 fo(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;
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;
763
763
  return {
764
764
  u: 1 - x - S,
765
765
  v: x,
766
766
  w: S
767
767
  };
768
768
  }
769
- const uo = ({ mesh: t, maxPoints: r = 2, meshColor: n = "#c8c8c8", meshOpacity: o = 1, frontFaceOnly: s = false, doubleShellTransparency: a = false }) => {
770
- const { addLandmarkPoint: c, landmarkPoints: l } = _t(), e = J((x) => {
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) => {
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 z().fromBufferAttribute(P, A[0]), k = new z().fromBufferAttribute(P, A[1]), w = new z().fromBufferAttribute(P, A[2]);
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]);
787
787
  v.applyMatrix4(t.matrixWorld), k.applyMatrix4(t.matrixWorld), w.applyMatrix4(t.matrixWorld);
788
- const M = S.point, h = fo(M, v, k, w), C = {
788
+ const z = S.point, h = Po(z, v, k, w), C = {
789
789
  faceIndex: p,
790
790
  vertexIndices: A,
791
791
  position: {
792
- x: M.x,
793
- y: M.y,
794
- z: M.z
792
+ x: z.x,
793
+ y: z.y,
794
+ z: z.z
795
795
  },
796
796
  barycentricCoords: h
797
797
  };
@@ -801,11 +801,11 @@ let __tla = (async () => {
801
801
  c,
802
802
  l.length,
803
803
  r
804
- ]), m = j(() => !!t.geometry.getAttribute("color"), [
804
+ ]), m = H(() => !!t.geometry.getAttribute("color"), [
805
805
  t
806
- ]), d = a ? Math.min(o, 0.65) : o, f = d < 1, u = j(() => new $.MeshStandardMaterial({
806
+ ]), d = a ? Math.min(o, 0.65) : o, f = d < 1, u = H(() => new O.MeshStandardMaterial({
807
807
  color: m ? "#ffffff" : n,
808
- side: s ? $.FrontSide : $.DoubleSide,
808
+ side: s ? O.FrontSide : O.DoubleSide,
809
809
  roughness: 0.6,
810
810
  metalness: 0.1,
811
811
  transparent: f,
@@ -826,8 +826,8 @@ let __tla = (async () => {
826
826
  material: u,
827
827
  renderOrder: a ? 0 : void 0
828
828
  });
829
- }, po = ({ point: t, index: r, markerSize: n, color: o, label: s }) => {
830
- const [a, c] = R(false);
829
+ }, Do = ({ point: t, index: r, markerSize: n, color: o, label: s }) => {
830
+ const [a, c] = B(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(Oe, {
850
+ a && i(Ze, {
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
- }, ho = ({ modelSize: t, labels: r }) => {
872
- const { landmarkPoints: n } = _t(), o = t * 0.02, s = [
871
+ }, _o = ({ modelSize: t, labels: r }) => {
872
+ const { landmarkPoints: n } = Nt(), 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(We, {
882
- children: n.map((l, e) => i(po, {
881
+ return i(He, {
882
+ children: n.map((l, e) => i(Do, {
883
883
  point: l,
884
884
  index: e,
885
885
  markerSize: o,
@@ -888,85 +888,85 @@ let __tla = (async () => {
888
888
  }, e))
889
889
  });
890
890
  };
891
- function fn(t) {
892
- return j(() => t ? new ft(t, {
893
- maxLeafTris: ut
891
+ function kn(t) {
892
+ return H(() => t ? new vt(t, {
893
+ maxLeafTris: Ct
894
894
  }) : null, [
895
895
  t
896
896
  ]);
897
897
  }
898
- const Ut = (t, r) => {
898
+ const pn = (t, r) => {
899
899
  const n = Math.abs(t - r);
900
900
  return n <= 7 ? "#8BC34A" : n <= 20 ? "#FFC107" : "#FF5722";
901
- }, Jt = new $.Color("#8BC34A"), Qt = new $.Color("#FFC107"), go = new $.Color("#FF5722"), mo = (t) => {
902
- if (t <= 7) return Jt.clone();
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();
903
903
  if (t <= 20) {
904
904
  const n = (t - 7) / 13;
905
- return Jt.clone().lerp(Qt, n);
905
+ return hn.clone().lerp(gn, n);
906
906
  }
907
907
  const r = Math.min((t - 20) / 20, 1);
908
- return Qt.clone().lerp(go, r);
909
- }, xo = (t, r) => {
908
+ return gn.clone().lerp(Ro, r);
909
+ }, Bo = (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 = mo(f);
912
+ const m = t[e], d = r[e], f = m.distanceTo(d), u = Wo(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);
916
916
  }
917
917
  }
918
- const c = new $.BufferGeometry();
919
- c.setAttribute("position", new $.Float32BufferAttribute(o, 3)), c.setAttribute("color", new $.Float32BufferAttribute(s, 3)), c.setIndex(a);
920
- const l = new $.MeshBasicMaterial({
918
+ const c = new O.BufferGeometry();
919
+ c.setAttribute("position", new O.Float32BufferAttribute(o, 3)), c.setAttribute("color", new O.Float32BufferAttribute(s, 3)), c.setIndex(a);
920
+ const l = new O.MeshBasicMaterial({
921
921
  vertexColors: true,
922
922
  transparent: true,
923
923
  opacity: 0.25,
924
- side: $.DoubleSide,
924
+ side: O.DoubleSide,
925
925
  depthTest: false,
926
926
  depthWrite: false
927
927
  });
928
- return new $.Mesh(c, l);
929
- }, bo = ({ 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 : Te(t, r, n, l), [
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), [
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 = j(() => {
937
+ ]), x = d ?? (u == null ? void 0 : u.linePoints) ?? [], S = f ?? (u == null ? void 0 : u.lineLength) ?? 0, p = H(() => {
938
938
  if (e == null || e === 0 || S <= 0 || x.length < 2) return null;
939
- const P = 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) * P, w.y, k + (w.z - k) * P));
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));
941
941
  }, [
942
942
  x,
943
943
  S,
944
944
  e
945
- ]), g = j(() => !p || x.length < 2 ? null : xo(x, p), [
945
+ ]), g = H(() => !p || x.length < 2 ? null : Bo(x, p), [
946
946
  x,
947
947
  p
948
948
  ]);
949
- U(() => () => {
949
+ K(() => () => {
950
950
  g && (g.geometry.dispose(), g.material.dispose());
951
951
  }, [
952
952
  g
953
953
  ]);
954
- const b = re(null), A = j(() => {
955
- const P = new $.BufferGeometry();
956
- P.setAttribute("position", new $.Float32BufferAttribute(new Float32Array(6), 3));
957
- const v = new $.LineBasicMaterial({
954
+ const b = ie(null), A = H(() => {
955
+ const P = new O.BufferGeometry();
956
+ P.setAttribute("position", new O.Float32BufferAttribute(new Float32Array(6), 3));
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 $.Line(P, v);
963
+ return new O.Line(P, v);
964
964
  }, []);
965
- return U(() => () => {
965
+ return K(() => () => {
966
966
  A.geometry.dispose(), A.material.dispose();
967
967
  }, [
968
968
  A
969
- ]), U(() => {
969
+ ]), K(() => {
970
970
  S > 0 && (a == null ? void 0 : a({
971
971
  yPosition: n,
972
972
  originalValue: S,
@@ -976,27 +976,27 @@ let __tla = (async () => {
976
976
  S,
977
977
  n,
978
978
  a
979
- ]), en(({ camera: P }) => {
979
+ ]), xn(({ camera: P }) => {
980
980
  if (!b.current || x.length < 2) return;
981
- const v = new z();
981
+ const v = new M();
982
982
  P.getWorldDirection(v);
983
- const k = new z(v.x, 0, v.z);
983
+ const k = new M(v.x, 0, v.z);
984
984
  if (k.lengthSq() < 1e-8) return;
985
985
  k.normalize();
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);
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 = _);
991
991
  }
992
- const C = s * 0.35, L = new z(h.x + w.x * C, n, h.z + w.z * C);
992
+ const C = s * 0.35, L = new M(h.x + w.x * C, n, h.z + w.z * C);
993
993
  b.current.position.copy(L);
994
- const _ = A.geometry.getAttribute("position");
995
- _.setXYZ(0, h.x, h.y, h.z), _.setXYZ(1, L.x, L.y, L.z), _.needsUpdate = true;
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;
996
996
  }), x.length < 2 ? null : F("group", {
997
997
  renderOrder: 10,
998
998
  children: [
999
- i(ae, {
999
+ i(de, {
1000
1000
  points: x,
1001
1001
  color: o,
1002
1002
  lineWidth: m,
@@ -1009,9 +1009,9 @@ let __tla = (async () => {
1009
1009
  object: g,
1010
1010
  renderOrder: 10
1011
1011
  }),
1012
- p && e != null && e !== 0 && i(ae, {
1012
+ p && e != null && e !== 0 && i(de, {
1013
1013
  points: p,
1014
- color: Ut(S, e),
1014
+ color: pn(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(Oe, {
1031
+ children: i(Ze, {
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 = Ut(S, e);
1081
+ const P = S - e, v = P > 0.5 ? "\u25B2" : P < -0.5 ? "\u25BC" : "", k = pn(S, e);
1082
1082
  return F("div", {
1083
1083
  style: {
1084
1084
  display: "flex",
@@ -1130,20 +1130,20 @@ let __tla = (async () => {
1130
1130
  })
1131
1131
  ]
1132
1132
  });
1133
- }, yo = jn(bo), wo = ({ 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 = re(/* @__PURE__ */ new Map()), x = t.geometry, S = fn(x), p = j(() => {
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(() => {
1135
1135
  if (f) {
1136
- let M = [
1136
+ let z = [
1137
1137
  ...f.yValues
1138
1138
  ];
1139
1139
  if (o > 25.4 + 0.1) {
1140
1140
  const h = f.mptY;
1141
- M = M.filter((C) => {
1141
+ z = z.filter((C) => {
1142
1142
  const L = Math.abs(C - h);
1143
1143
  return L < 0.5 || Math.abs(Math.round(L / o) * o - L) < 0.5;
1144
1144
  });
1145
1145
  }
1146
- return c ? M.sort((h, C) => C - h) : M.sort((h, C) => h - C), M;
1146
+ return c ? z.sort((h, C) => C - h) : z.sort((h, C) => h - C), z;
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 = j(() => {
1158
+ ]), g = H(() => {
1159
1159
  if (!f) return null;
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 L = M[C], _ = M[C + 1];
1163
- if (_ <= L) continue;
1164
- const D = [];
1165
- for (let E = L; E < _; E += 3) D.push(new z(w[E], w[E + 1], w[E + 2]));
1166
- D.length >= 3 && k.set(h[C], D);
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], _);
1167
1167
  }
1168
1168
  return k;
1169
1169
  }, [
1170
1170
  f
1171
- ]), b = j(() => {
1171
+ ]), b = H(() => {
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
- U(() => {
1179
+ K(() => {
1180
1180
  u.current.clear();
1181
1181
  }, [
1182
1182
  p
1183
- ]), U(() => {
1183
+ ]), K(() => {
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,18 +1195,18 @@ let __tla = (async () => {
1195
1195
  ]);
1196
1196
  const A = [
1197
1197
  "#5B9BD5"
1198
- ], P = s * Jn, v = J((k) => {
1198
+ ], P = s * xo, v = Q((k) => {
1199
1199
  if (b) return;
1200
1200
  u.current.set(k.yPosition, k);
1201
- const w = Array.from(u.current.values()).sort((M, h) => c ? h.yPosition - M.yPosition : M.yPosition - h.yPosition);
1201
+ const w = Array.from(u.current.values()).sort((z, h) => c ? h.yPosition - z.yPosition : z.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(We, {
1209
- children: p.map((k, w) => i(yo, {
1208
+ return S ? i(He, {
1209
+ children: p.map((k, w) => i(To, {
1210
1210
  bvh: S,
1211
1211
  geometry: x,
1212
1212
  yPosition: k,
@@ -1221,31 +1221,31 @@ let __tla = (async () => {
1221
1221
  wasmCircumference: b == null ? void 0 : b.get(k)
1222
1222
  }, k))
1223
1223
  }) : null;
1224
- }, So = (t, r) => {
1224
+ }, $o = (t, r) => {
1225
1225
  const n = Math.abs(t - r);
1226
1226
  return n <= 7 ? "#4caf50" : n <= 15 ? "#ff9800" : "#f44336";
1227
- }, vo = ({ mesh: t, greenY: r, modelSize: n, displayUnit: o = "mm", bottomY: s, formHeight: a }) => {
1227
+ }, Ho = ({ 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 = re(null);
1232
- en(({ 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 = ie(null);
1232
+ xn(({ camera: w }) => {
1233
1233
  if (!f.current) return;
1234
- const M = new z();
1235
- w.getWorldDirection(M);
1236
- const h = new z(M.x, 0, M.z);
1234
+ const z = new M();
1235
+ w.getWorldDirection(z);
1236
+ const h = new M(z.x, 0, z.z);
1237
1237
  if (h.lengthSq() < 1e-8) return;
1238
1238
  h.normalize();
1239
- const C = new z().crossVectors(new z(0, 1, 0), h).normalize();
1239
+ const C = new M().crossVectors(new M(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, _ = w.position.z - f.current.position.z;
1242
- f.current.rotation.y = Math.atan2(L, _);
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);
1243
1243
  });
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), P = a != null && a > 0, v = P ? e - a : 0, k = P ? So(e, a) : "#fff";
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";
1245
1245
  return F("group", {
1246
1246
  ref: f,
1247
1247
  children: [
1248
- i(ae, {
1248
+ i(de, {
1249
1249
  points: [
1250
1250
  u,
1251
1251
  x
@@ -1253,7 +1253,7 @@ let __tla = (async () => {
1253
1253
  color: "#888888",
1254
1254
  lineWidth: 1.5
1255
1255
  }),
1256
- i(ae, {
1256
+ i(de, {
1257
1257
  points: [
1258
1258
  p,
1259
1259
  g
@@ -1261,7 +1261,7 @@ let __tla = (async () => {
1261
1261
  color: "#888888",
1262
1262
  lineWidth: 1.5
1263
1263
  }),
1264
- i(ae, {
1264
+ i(de, {
1265
1265
  points: [
1266
1266
  b,
1267
1267
  A
@@ -1271,7 +1271,7 @@ let __tla = (async () => {
1271
1271
  }),
1272
1272
  i("mesh", {
1273
1273
  position: S,
1274
- children: i(Oe, {
1274
+ children: i(Ze, {
1275
1275
  center: true,
1276
1276
  style: {
1277
1277
  pointerEvents: "none"
@@ -1360,26 +1360,26 @@ let __tla = (async () => {
1360
1360
  })
1361
1361
  ]
1362
1362
  });
1363
- }, Co = ({ 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 } = tn(), x = re(false), S = re(s), p = re(new z()), g = re(null), b = re(c), A = re(r), P = re(n), v = re(l), k = re(0), w = J(() => {
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(() => {
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 z();
1368
+ const C = h.boundingBox, L = new M();
1369
1369
  C.getCenter(L);
1370
- const _ = new z();
1371
- C.getSize(_), p.current.copy(_);
1372
- const D = d.width / d.height, E = Math.max(_.y, _.x / D) * 1.6, V = E * D, Y = L.y - _.y * 0.05;
1370
+ const I = new M();
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
1373
  k.current = Y;
1374
- const Q = new $.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;
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;
1376
1376
  }, [
1377
1377
  o,
1378
1378
  t,
1379
1379
  d,
1380
1380
  l
1381
1381
  ]);
1382
- U(() => {
1382
+ K(() => {
1383
1383
  if (e) return e.current = () => {
1384
1384
  const h = w();
1385
1385
  h && (m({
@@ -1394,40 +1394,40 @@ let __tla = (async () => {
1394
1394
  m,
1395
1395
  u
1396
1396
  ]);
1397
- const M = J((h) => {
1398
- const C = h.position.clone(), L = C.length(), _ = Math.atan2(C.x, C.z), D = Math.acos(C.y / L), V = _ + 0.02;
1399
- h.position.set(L * Math.sin(D) * Math.sin(V), L * Math.cos(D), L * Math.sin(D) * Math.cos(V)), h.lookAt(0, 0, 0), h.updateMatrixWorld(true), u();
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();
1400
1400
  }, [
1401
1401
  u
1402
1402
  ]);
1403
- return U(() => {
1403
+ return K(() => {
1404
1404
  if (t > 0 && !x.current && !r) {
1405
1405
  x.current = true;
1406
- const h = new $.PerspectiveCamera(50, d.width / d.height, 0.1, t * 10);
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(() => M(h));
1409
+ }), requestAnimationFrame(() => z(h));
1410
1410
  }
1411
1411
  }, [
1412
1412
  t,
1413
1413
  d,
1414
1414
  m,
1415
1415
  r,
1416
- M
1417
- ]), U(() => {
1416
+ z
1417
+ ]), K(() => {
1418
1418
  const h = b.current;
1419
- b.current = c, h === 0 && c === 1 && !r && requestAnimationFrame(() => M(f));
1419
+ b.current = c, h === 0 && c === 1 && !r && requestAnimationFrame(() => z(f));
1420
1420
  }, [
1421
1421
  c,
1422
1422
  r,
1423
1423
  f,
1424
- M
1425
- ]), U(() => {
1424
+ z
1425
+ ]), K(() => {
1426
1426
  const h = A.current !== r, C = P.current !== n, L = !v.current && !!l;
1427
1427
  if (A.current = r, P.current = n, v.current = l, !h && !C && !L || !r || s !== "3D") return;
1428
- const _ = w();
1429
- _ && m({
1430
- camera: _
1428
+ const I = w();
1429
+ I && m({
1430
+ camera: I
1431
1431
  });
1432
1432
  }, [
1433
1433
  r,
@@ -1436,29 +1436,29 @@ let __tla = (async () => {
1436
1436
  l,
1437
1437
  w,
1438
1438
  m
1439
- ]), U(() => {
1439
+ ]), K(() => {
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"), _ = L.array, D = t * 0.15;
1446
- let E = 1 / 0, V = -1 / 0, Y = 1 / 0, Q = -1 / 0, me = false;
1447
- for (let ue = 0; ue < L.count; ue++) if (Math.abs(_[ue * 3 + 1] - a) < D) {
1448
- const H = _[ue * 3], ee = _[ue * 3 + 2];
1449
- H < E && (E = H), H > V && (V = H), ee < Y && (Y = ee), ee > Q && (Q = ee), me = true;
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;
1450
1450
  }
1451
- if (!me) {
1451
+ if (!ye) {
1452
1452
  C.computeBoundingBox();
1453
- const ue = C.boundingBox;
1454
- E = ue.min.x, V = ue.max.x, Y = ue.min.z, Q = ue.max.z;
1453
+ const he = C.boundingBox;
1454
+ E = he.min.x, V = he.max.x, Y = he.min.z, q = he.max.z;
1455
1455
  }
1456
- const ie = (E + V) / 2, ce = (Y + Q) / 2, ne = d.width / d.height, q = 1.4, X = (V - E) * q, de = (Q - Y) * q;
1457
- let Z, fe;
1458
- X / de > ne ? (Z = X, fe = X / ne) : (fe = de, Z = de * ne);
1459
- const he = new $.OrthographicCamera(-Z / 2, Z / 2, fe / 2, -fe / 2, 0.1, t * 10);
1460
- he.position.set(ie, a + t * 2, ce), he.up.set(0, 0, -1), he.lookAt(ie, a, ce), m({
1461
- camera: he
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;
1457
+ let Z, pe;
1458
+ X / ue > se ? (Z = X, pe = X / se) : (pe = ue, Z = ue * se);
1459
+ const me = new O.OrthographicCamera(-Z / 2, Z / 2, pe / 2, -pe / 2, 0.1, t * 10);
1460
+ me.position.set(ae, a + t * 2, fe), me.up.set(0, 0, -1), me.lookAt(ae, a, fe), m({
1461
+ camera: me
1462
1462
  });
1463
1463
  } else if (h === "2D") if (g.current) m({
1464
1464
  camera: g.current
@@ -1480,28 +1480,28 @@ let __tla = (async () => {
1480
1480
  m,
1481
1481
  f,
1482
1482
  w
1483
- ]), U(() => {
1483
+ ]), K(() => {
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"), _ = L.array, D = t * 0.15;
1489
- let E = 1 / 0, V = -1 / 0, Y = 1 / 0, Q = -1 / 0, me = false;
1490
- for (let Z = 0; Z < L.count; Z++) if (Math.abs(_[Z * 3 + 1] - a) < D) {
1491
- const fe = _[Z * 3], he = _[Z * 3 + 2];
1492
- fe < E && (E = fe), fe > V && (V = fe), he < Y && (Y = he), he > Q && (Q = he), me = true;
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) < _) {
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;
1493
1493
  }
1494
- if (!me) {
1494
+ if (!ye) {
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, Y = Z.min.z, q = Z.max.z;
1498
1498
  }
1499
- const ie = d.width / d.height, ce = 1.4, ne = (V - E) * ce, q = (Q - Y) * ce;
1500
- let X, de;
1501
- ne / q > ie ? (X = ne, de = ne / ie) : (de = q, X = q * ie), h.left = -X / 2, h.right = X / 2, h.top = de / 2, h.bottom = -de / 2;
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;
1502
1502
  } else {
1503
- const C = p.current, L = d.width / d.height, _ = Math.max(C.y, C.x / L) * 1.6, D = _ * L;
1504
- h.left = -D / 2, h.right = D / 2, h.top = _ / 2, h.bottom = -_ / 2;
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;
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
- }, zo = ({ mesh: t, isDragging: r }) => {
1515
+ }, jo = ({ mesh: t, isDragging: r }) => {
1516
1516
  var _a;
1517
1517
  const n = t.geometry;
1518
1518
  n.computeBoundingBox();
1519
- const o = new z();
1520
- return (_a = n.boundingBox) == null ? void 0 : _a.getCenter(o), i(nn, {
1519
+ const o = new M();
1520
+ return (_a = n.boundingBox) == null ? void 0 : _a.getCenter(o), i(yn, {
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
- }, Mo = ({ wasAutoScaled: t, onDismiss: r }) => F("div", {
1534
+ }, No = ({ 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
- }), Ao = ({ isDoubleShell: t, onDismiss: r }) => F("div", {
1575
+ }), Yo = ({ 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
- }), ko = ({ steps: t, currentStep: r, accentColor: n = "rgb(12, 67, 173)" }) => i("div", {
1616
+ }), Xo = ({ 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,28 +1677,28 @@ let __tla = (async () => {
1677
1677
  ]
1678
1678
  }, o.number);
1679
1679
  })
1680
- }), Fo = ({ mesh: t, upperY: r, originY: n, modelSize: o, meshColor: s = "#c8c8c8", displayUnit: a = "mm" }) => {
1681
- const c = t.geometry, l = j(() => new ft(c, {
1682
- maxLeafTris: ut
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
1683
1683
  }), [
1684
1684
  c
1685
- ]), e = j(() => Te(l, c, n), [
1685
+ ]), e = H(() => Ge(l, c, n), [
1686
1686
  l,
1687
1687
  c,
1688
1688
  n
1689
- ]), m = j(() => new dt(new z(0, -1, 0), r), [
1689
+ ]), m = H(() => new St(new M(0, -1, 0), r), [
1690
1690
  r
1691
- ]), { mlLine: d, apLine: f, mlWidth: u, apWidth: x } = j(() => {
1691
+ ]), { mlLine: d, apLine: f, mlWidth: u, apWidth: x } = H(() => {
1692
1692
  let g = null, b = null, A = 0, P = 0;
1693
1693
  if (e.linePoints.length >= 2) {
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);
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);
1696
1696
  g = [
1697
- new z(v.x, n, v.z),
1698
- new z(k.x, n, k.z)
1697
+ new M(v.x, n, v.z),
1698
+ new M(k.x, n, k.z)
1699
1699
  ], b = [
1700
- new z(w.x, n, w.z),
1701
- new z(M.x, n, M.z)
1700
+ new M(w.x, n, w.z),
1701
+ new M(z.x, n, z.z)
1702
1702
  ], A = g[0].distanceTo(g[1]), P = b[0].distanceTo(b[1]);
1703
1703
  }
1704
1704
  return {
@@ -1711,13 +1711,13 @@ let __tla = (async () => {
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(We, {
1714
+ return F(He, {
1715
1715
  children: [
1716
1716
  i("mesh", {
1717
1717
  geometry: t.geometry,
1718
1718
  children: i("meshStandardMaterial", {
1719
1719
  color: s,
1720
- side: $.DoubleSide,
1720
+ side: O.DoubleSide,
1721
1721
  transparent: true,
1722
1722
  opacity: 0.15,
1723
1723
  depthWrite: false,
@@ -1726,7 +1726,7 @@ let __tla = (async () => {
1726
1726
  ]
1727
1727
  })
1728
1728
  }),
1729
- e.linePoints.length >= 2 && i(ae, {
1729
+ e.linePoints.length >= 2 && i(de, {
1730
1730
  points: e.linePoints,
1731
1731
  color: "#00ff00",
1732
1732
  lineWidth: 3,
@@ -1734,9 +1734,9 @@ let __tla = (async () => {
1734
1734
  depthWrite: false,
1735
1735
  transparent: true
1736
1736
  }),
1737
- d && F(We, {
1737
+ d && F(He, {
1738
1738
  children: [
1739
- i(ae, {
1739
+ i(de, {
1740
1740
  points: d,
1741
1741
  color: "#ff8800",
1742
1742
  lineWidth: 2,
@@ -1744,7 +1744,7 @@ let __tla = (async () => {
1744
1744
  depthWrite: false,
1745
1745
  transparent: true
1746
1746
  }),
1747
- i(Oe, {
1747
+ i(Ze, {
1748
1748
  position: [
1749
1749
  d[0].x,
1750
1750
  n,
@@ -1778,9 +1778,9 @@ let __tla = (async () => {
1778
1778
  })
1779
1779
  ]
1780
1780
  }),
1781
- f && F(We, {
1781
+ f && F(He, {
1782
1782
  children: [
1783
- i(ae, {
1783
+ i(de, {
1784
1784
  points: f,
1785
1785
  color: "#ff00ff",
1786
1786
  lineWidth: 2,
@@ -1788,7 +1788,7 @@ let __tla = (async () => {
1788
1788
  depthWrite: false,
1789
1789
  transparent: true
1790
1790
  }),
1791
- i(Oe, {
1791
+ i(Ze, {
1792
1792
  position: [
1793
1793
  Math.max(f[0].x, f[1].x) + o * 0.02,
1794
1794
  n,
@@ -1824,43 +1824,43 @@ let __tla = (async () => {
1824
1824
  })
1825
1825
  ]
1826
1826
  });
1827
- }, Lo = ({ 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] = R(false), [S, p] = R(false), { camera: g, gl: b } = tn(), A = re(0), P = t.geometry, v = fn(P), k = j(() => v ? Te(v, P, r) : {
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) : {
1829
1829
  linePoints: [],
1830
1830
  lineLength: 0,
1831
- rightmostPoint: new z()
1831
+ rightmostPoint: new M()
1832
1832
  }, [
1833
1833
  v,
1834
1834
  P,
1835
1835
  r
1836
- ]), w = J((_, D) => {
1837
- const E = b.domElement.getBoundingClientRect(), V = (_ - E.left) / E.width * 2 - 1, Y = -((D - E.top) / E.height) * 2 + 1, Q = new Gn();
1838
- Q.setFromCamera(new $.Vector2(V, Y), g);
1839
- const me = new dt(new z(0, 0, 1), 0), ie = new z();
1840
- return Q.ray.intersectPlane(me, ie), ie ? ie.y : 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;
1841
1841
  }, [
1842
1842
  g,
1843
1843
  b,
1844
1844
  r
1845
- ]), M = J((_) => {
1846
- _.stopPropagation(), x(true), b.domElement.style.cursor = "ns-resize", A.current = r - w(_.clientX, _.clientY), _.target.setPointerCapture(_.pointerId), d == null ? void 0 : d();
1845
+ ]), z = Q((I) => {
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 = J((_) => {
1852
+ ]), h = Q((I) => {
1853
1853
  if (!u) return;
1854
- let D = w(_.clientX, _.clientY) + A.current;
1855
- D = Math.max(o, Math.min(s, D)), n(D);
1854
+ let _ = w(I.clientX, I.clientY) + A.current;
1855
+ _ = Math.max(o, Math.min(s, _)), n(_);
1856
1856
  }, [
1857
1857
  u,
1858
1858
  w,
1859
1859
  n,
1860
1860
  o,
1861
1861
  s
1862
- ]), C = J((_) => {
1863
- x(false), b.domElement.style.cursor = "auto", _.target.releasePointerCapture(_.pointerId), f == null ? void 0 : f();
1862
+ ]), C = Q((I) => {
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
@@ -1870,7 +1870,7 @@ let __tla = (async () => {
1870
1870
  return F("group", {
1871
1871
  renderOrder: 10,
1872
1872
  children: [
1873
- i(ae, {
1873
+ i(de, {
1874
1874
  points: k.linePoints,
1875
1875
  color: L,
1876
1876
  lineWidth: u ? 6 : S ? 5 : 4,
@@ -1878,7 +1878,7 @@ let __tla = (async () => {
1878
1878
  depthWrite: false,
1879
1879
  transparent: true,
1880
1880
  renderOrder: 10,
1881
- onPointerDown: M,
1881
+ onPointerDown: z,
1882
1882
  onPointerMove: h,
1883
1883
  onPointerUp: C,
1884
1884
  onPointerEnter: () => {
@@ -1894,7 +1894,7 @@ let __tla = (async () => {
1894
1894
  r,
1895
1895
  0
1896
1896
  ],
1897
- children: i(Oe, {
1897
+ children: i(Ze, {
1898
1898
  center: true,
1899
1899
  children: i("div", {
1900
1900
  style: {
@@ -1913,17 +1913,17 @@ let __tla = (async () => {
1913
1913
  ]
1914
1914
  });
1915
1915
  };
1916
- function Po(t, r) {
1916
+ function Ko(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 _o = [
1922
+ var Uo = [
1923
1923
  "color"
1924
- ], Do = Vn(function(t, r) {
1925
- var n = t.color, o = n === void 0 ? "currentColor" : n, s = Po(t, _o);
1926
- return Yt("svg", Object.assign({
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({
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
- }), Yt("path", {
1934
+ }), cn("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 Io = [
1941
+ const Qo = [
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
- ], st = {
1947
+ ], xt = {
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
- }, Wo = {
1956
+ }, qo = {
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
- }, un = ({ onSkip: t, onCancel: r }) => {
1966
- const [n, o] = R("confirm"), [s, a] = R(null), [c, l] = R(""), e = J(() => {
1965
+ }, Fn = ({ onSkip: t, onCancel: r }) => {
1966
+ const [n, o] = B("confirm"), [s, a] = B(null), [c, l] = B(""), e = Q(() => {
1967
1967
  o("reasons");
1968
- }, []), m = J(() => {
1968
+ }, []), m = Q(() => {
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 = J(() => {
1973
+ ]), d = s != null && (s !== "Other" || c.trim() !== ""), f = Q(() => {
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
- ...Io,
2034
+ ...Qo,
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
- ...Wo,
2081
+ ...qo,
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
- ...st,
2102
+ ...xt,
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
- ...st,
2113
+ ...xt,
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
- ...st,
2174
+ ...xt,
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
- ...st,
2184
+ ...xt,
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
- }, Ft = {
2196
+ }, Ht = {
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
- }, qt = {
2205
+ }, mn = {
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
- }, Ro = ({ 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(() => {
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(() => {
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] = R(() => {
2225
+ ]), [S, p] = B(() => {
2226
2226
  if (!e) return {};
2227
2227
  const h = {};
2228
2228
  return x.forEach((C, L) => {
2229
2229
  e[L] != null && e[L] !== 0 && (h[C] = e[L].toFixed(1));
2230
2230
  }), h;
2231
- }), [g, b] = R(m && m > 0 ? m.toFixed(1) : ""), [A, P] = R(false), v = j(() => x.map((h) => {
2231
+ }), [g, b] = B(m && m > 0 ? m.toFixed(1) : ""), [A, P] = B(false), v = H(() => 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
- U(() => {
2238
+ K(() => {
2239
2239
  c == null ? void 0 : c(v);
2240
2240
  }, [
2241
2241
  v,
2242
2242
  c
2243
- ]), U(() => {
2243
+ ]), K(() => {
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 = j(() => {
2250
+ const k = H(() => {
2251
2251
  const h = g !== "" && !isNaN(parseFloat(g)), C = v.some((L) => L !== 0);
2252
2252
  return h || C;
2253
2253
  }, [
2254
2254
  v,
2255
2255
  g
2256
- ]), w = J(() => {
2256
+ ]), w = Q(() => {
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
- ]), M = J(() => {
2268
+ ]), z = Q(() => {
2269
2269
  const h = {};
2270
2270
  x.forEach((C, L) => {
2271
- const _ = n[L];
2272
- if (_) {
2273
- const D = _.modifiedValue ?? _.originalValue;
2274
- h[C] = D.toFixed(1);
2271
+ const I = n[L];
2272
+ if (I) {
2273
+ const _ = I.modifiedValue ?? I.originalValue;
2274
+ h[C] = _.toFixed(1);
2275
2275
  }
2276
2276
  }), p(h), o > 0 && b(o.toFixed(1));
2277
2277
  }, [
@@ -2288,7 +2288,7 @@ let __tla = (async () => {
2288
2288
  fontFamily: "system-ui, sans-serif"
2289
2289
  },
2290
2290
  children: [
2291
- A && i(un, {
2291
+ A && i(Fn, {
2292
2292
  onSkip: a,
2293
2293
  onCancel: () => P(false)
2294
2294
  }),
@@ -2325,9 +2325,9 @@ let __tla = (async () => {
2325
2325
  ]
2326
2326
  }),
2327
2327
  i("button", {
2328
- onClick: M,
2328
+ onClick: z,
2329
2329
  style: {
2330
- ...Ft,
2330
+ ...Ht,
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(Do, {
2348
+ i(Jo, {
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((_) => ({
2407
- ..._,
2406
+ onChange: (L) => p((I) => ({
2407
+ ...I,
2408
2408
  [h]: L.target.value
2409
2409
  })),
2410
2410
  style: {
2411
- ...qt,
2411
+ ...mn,
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
- ...qt,
2454
+ ...mn,
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
- ...Ft,
2481
+ ...Ht,
2482
2482
  backgroundColor: k ? "rgb(12, 67, 173)" : "#e0e0e0",
2483
2483
  border: "none",
2484
2484
  color: k ? "#fff" : "#9e9e9e",
@@ -2492,7 +2492,7 @@ let __tla = (async () => {
2492
2492
  i("button", {
2493
2493
  onClick: () => P(true),
2494
2494
  style: {
2495
- ...Ft,
2495
+ ...Ht,
2496
2496
  backgroundColor: "#fff",
2497
2497
  border: "1px solid #bdbdbd",
2498
2498
  color: "#666",
@@ -2507,21 +2507,21 @@ let __tla = (async () => {
2507
2507
  ]
2508
2508
  });
2509
2509
  };
2510
- function pn(t, r, n) {
2510
+ function Ln(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
2516
  let P = 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 && (P += o.getX(M), v += h, k += o.getZ(M), w++);
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++);
2520
2520
  }
2521
- w > 20 && l.push(new z(P / w, v / w, k / w));
2521
+ w > 20 && l.push(new M(P / w, v / w, k / w));
2522
2522
  }
2523
2523
  if (l.length < 5) return null;
2524
- const e = new z();
2524
+ const e = new M();
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;
@@ -2529,15 +2529,15 @@ let __tla = (async () => {
2529
2529
  const b = g.x - e.x, A = g.y - e.y, P = g.z - e.z;
2530
2530
  m += b * b, d += b * A, f += b * P, u += A * A, x += A * P, S += P * P;
2531
2531
  }
2532
- let p = new z(0.01, 1, 0.01).normalize();
2532
+ let p = new M(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 z(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, P = f * p.x + x * p.y + S * p.z, v = new M(b, A, P), 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 Bo = {
2540
+ const tr = {
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
- }, Eo = [
2550
+ }, nr = [
2551
2551
  "#ff4444",
2552
2552
  "#44cc44",
2553
2553
  "#4488ff"
2554
2554
  ];
2555
- function hn(t) {
2556
- const r = t.getAttribute("position"), n = r.count, o = new z();
2555
+ function Pn(t) {
2556
+ const r = t.getAttribute("position"), n = r.count, o = new M();
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 z(1 + p * 0.1, 1 - p * 0.1, 0.5 + p * 0.3).normalize(), b = 0;
2583
+ let g = new M(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 z(P, v, k);
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);
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;
@@ -2604,7 +2604,7 @@ let __tla = (async () => {
2604
2604
  u[A][P] -= b * v * k;
2605
2605
  }
2606
2606
  }
2607
- const x = new z();
2607
+ const x = new M();
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 = [
@@ -2616,8 +2616,8 @@ let __tla = (async () => {
2616
2616
  let g = 1 / 0, b = -1 / 0;
2617
2617
  const A = d[p];
2618
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, M = v * A.x + k * A.y + w * A.z;
2620
- M < g && (g = M), M > b && (b = M);
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);
2621
2621
  }
2622
2622
  S[p] = (b - g) / 2;
2623
2623
  }
@@ -2628,23 +2628,23 @@ let __tla = (async () => {
2628
2628
  halfExtents: S
2629
2629
  };
2630
2630
  }
2631
- function To({ pca: t }) {
2631
+ function or({ 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]);
2635
- return i(ae, {
2635
+ return i(de, {
2636
2636
  points: [
2637
2637
  s,
2638
2638
  o
2639
2639
  ],
2640
- color: Eo[n],
2640
+ color: nr[n],
2641
2641
  lineWidth: 2
2642
2642
  }, n);
2643
2643
  })
2644
2644
  });
2645
2645
  }
2646
- function Oo({ pca: t }) {
2647
- const r = j(() => {
2646
+ function rr({ pca: t }) {
2647
+ const r = H(() => {
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 [
@@ -2704,7 +2704,7 @@ let __tla = (async () => {
2704
2704
  t
2705
2705
  ]);
2706
2706
  return i("group", {
2707
- children: r.map((n, o) => i(ae, {
2707
+ children: r.map((n, o) => i(de, {
2708
2708
  points: n,
2709
2709
  color: "#ffaa00",
2710
2710
  lineWidth: 1,
@@ -2713,19 +2713,19 @@ let __tla = (async () => {
2713
2713
  }, o))
2714
2714
  });
2715
2715
  }
2716
- function $o({ redPoint: t, greenPoint: r }) {
2717
- const n = j(() => new z().subVectors(r, t).normalize(), [
2716
+ function ir({ redPoint: t, greenPoint: r }) {
2717
+ const n = H(() => new M().subVectors(r, t).normalize(), [
2718
2718
  t,
2719
2719
  r
2720
- ]), o = j(() => {
2721
- const a = n.dot(new z(0, 1, 0));
2720
+ ]), o = H(() => {
2721
+ const a = n.dot(new M(0, 1, 0));
2722
2722
  return Math.acos(Math.min(1, Math.abs(a))) * 180 / Math.PI;
2723
2723
  }, [
2724
2724
  n
2725
2725
  ]), s = o < 1 ? "#44ff44" : o < 5 ? "#ffcc00" : "#ff4444";
2726
2726
  return F("group", {
2727
2727
  children: [
2728
- i(ae, {
2728
+ i(de, {
2729
2729
  points: [
2730
2730
  t,
2731
2731
  r
@@ -2766,13 +2766,13 @@ let __tla = (async () => {
2766
2766
  ]
2767
2767
  });
2768
2768
  }
2769
- function Ho({ geometry: t, redY: r, greenY: n, modelSize: o }) {
2770
- const a = o * 0.15, c = j(() => {
2769
+ function sr({ geometry: t, redY: r, greenY: n, modelSize: o }) {
2770
+ const a = o * 0.15, c = H(() => {
2771
2771
  const l = [];
2772
2772
  let e = n - 10;
2773
- const m = new z(0, 1, 0);
2773
+ const m = new M(0, 1, 0);
2774
2774
  for (; e > r; ) {
2775
- const d = Math.min(e, n), f = Math.max(e, n), u = pn(t, d, f);
2775
+ const d = Math.min(e, n), f = Math.max(e, n), u = Ln(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,10 +2792,10 @@ 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 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%)`;
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%)`;
2796
2796
  return F("group", {
2797
2797
  children: [
2798
- i(ae, {
2798
+ i(de, {
2799
2799
  points: [
2800
2800
  u,
2801
2801
  f
@@ -2805,10 +2805,10 @@ let __tla = (async () => {
2805
2805
  transparent: true,
2806
2806
  opacity: 0.7
2807
2807
  }),
2808
- i(ae, {
2808
+ i(de, {
2809
2809
  points: [
2810
- new z(-a * 0.3, l.regionMin, 0),
2811
- new z(a * 0.3, l.regionMin, 0)
2810
+ new M(-a * 0.3, l.regionMin, 0),
2811
+ new M(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 jo({ geometry: t, redY: r, greenY: n, modelSize: o }) {
2824
- const s = j(() => {
2825
- const f = pn(t, r, n);
2823
+ function lr({ geometry: t, redY: r, greenY: n, modelSize: o }) {
2824
+ const s = H(() => {
2825
+ const f = Ln(t, r, n);
2826
2826
  if (!f) return null;
2827
- const u = f.dot(new z(0, 1, 0)), x = Math.acos(Math.min(1, Math.abs(u))) * 180 / Math.PI;
2827
+ const u = f.dot(new M(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,9 +2835,9 @@ let __tla = (async () => {
2835
2835
  n
2836
2836
  ]);
2837
2837
  if (!s) return null;
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";
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";
2839
2839
  return i("group", {
2840
- children: i(ae, {
2840
+ children: i(de, {
2841
2841
  points: [
2842
2842
  m,
2843
2843
  e
@@ -2850,9 +2850,9 @@ let __tla = (async () => {
2850
2850
  })
2851
2851
  });
2852
2852
  }
2853
- function Vo({ pca: t, modelSize: r }) {
2853
+ function ar({ 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
- return i(ae, {
2855
+ return i(de, {
2856
2856
  points: [
2857
2857
  a,
2858
2858
  s
@@ -2864,11 +2864,11 @@ let __tla = (async () => {
2864
2864
  gapSize: 2
2865
2865
  });
2866
2866
  }
2867
- function No({ geometry: t, redY: r, greenY: n, modelSize: o, measurementGeometry: s }) {
2868
- const a = j(() => {
2869
- const d = s ?? t, f = Pt(d), u = new z(0, 1, 0), x = 5, p = n + 3 * 25.4, g = [];
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 = [];
2870
2870
  for (let h = r + x; h < p; h += x) {
2871
- const C = io(f, d, new z(0, h, 0), u);
2871
+ const C = zo(f, d, new M(0, h, 0), u);
2872
2872
  C > 0 && g.push({
2873
2873
  y: h,
2874
2874
  circ: C
@@ -2877,11 +2877,11 @@ let __tla = (async () => {
2877
2877
  if (g.length < 5) return null;
2878
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);
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)], M = 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)], z = Math.max(...g.map((h) => h.circ));
2881
2881
  return {
2882
2882
  circumferences: g,
2883
2883
  baseline: w,
2884
- maxCirc: M
2884
+ maxCirc: z
2885
2885
  };
2886
2886
  }, [
2887
2887
  t,
@@ -2894,10 +2894,10 @@ let __tla = (async () => {
2894
2894
  children: [
2895
2895
  c.map(({ y: d, circ: f }, u) => {
2896
2896
  const x = f / l, S = x > 1.6 ? "#ff4444" : x > 1.3 ? "#ffcc00" : "#22cc66", p = f * m;
2897
- return i(ae, {
2897
+ return i(de, {
2898
2898
  points: [
2899
- new z(-p, d, 0),
2900
- new z(p, d, 0)
2899
+ new M(-p, d, 0),
2900
+ new M(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(We, {
2910
+ return F(He, {
2911
2911
  children: [
2912
- i(ae, {
2912
+ i(de, {
2913
2913
  points: [
2914
- new z(-d, f, 0),
2915
- new z(-d, u, 0)
2914
+ new M(-d, f, 0),
2915
+ new M(-d, u, 0)
2916
2916
  ],
2917
2917
  color: "#ff4444",
2918
2918
  lineWidth: 1,
@@ -2922,10 +2922,10 @@ let __tla = (async () => {
2922
2922
  transparent: true,
2923
2923
  opacity: 0.4
2924
2924
  }),
2925
- i(ae, {
2925
+ i(de, {
2926
2926
  points: [
2927
- new z(d, f, 0),
2928
- new z(d, u, 0)
2927
+ new M(d, f, 0),
2928
+ new M(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 Go({ componentDebug: t }) {
2944
+ function dr({ 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 z();
2949
+ const a = new M();
2950
2950
  return r.boundingBox.getCenter(a), F("group", {
2951
2951
  children: [
2952
2952
  i("mesh", {
@@ -2956,7 +2956,7 @@ let __tla = (async () => {
2956
2956
  color: o,
2957
2957
  transparent: true,
2958
2958
  opacity: s ? 0.5 : 0.2,
2959
- side: $.DoubleSide,
2959
+ side: O.DoubleSide,
2960
2960
  depthWrite: false,
2961
2961
  polygonOffset: true,
2962
2962
  polygonOffsetFactor: 1,
@@ -2975,7 +2975,7 @@ let __tla = (async () => {
2975
2975
  }),
2976
2976
  i("group", {
2977
2977
  position: a,
2978
- children: i(Oe, {
2978
+ children: i(Ze, {
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 Yo({ geometry: t, aoData: r }) {
3009
- const n = j(() => {
3008
+ function fr({ geometry: t, aoData: r }) {
3009
+ const n = H(() => {
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;
@@ -3015,12 +3015,12 @@ let __tla = (async () => {
3015
3015
  l[S] = d, l[S + 1] = f, l[S + 2] = u;
3016
3016
  }
3017
3017
  }
3018
- return o.setAttribute("color", new $.Float32BufferAttribute(l, 3)), o;
3018
+ return o.setAttribute("color", new O.Float32BufferAttribute(l, 3)), o;
3019
3019
  }, [
3020
3020
  t,
3021
3021
  r
3022
3022
  ]);
3023
- return j(() => () => n.dispose(), [
3023
+ return H(() => () => n.dispose(), [
3024
3024
  n
3025
3025
  ]), i("mesh", {
3026
3026
  geometry: n,
@@ -3029,40 +3029,40 @@ let __tla = (async () => {
3029
3029
  vertexColors: true,
3030
3030
  transparent: true,
3031
3031
  opacity: 0.85,
3032
- side: $.DoubleSide,
3032
+ side: O.DoubleSide,
3033
3033
  depthWrite: false
3034
3034
  })
3035
3035
  });
3036
3036
  }
3037
- function Xo({ mesh: t, layers: r, landmarkPoints: n, componentDebug: o, aoData: s, aoGeometry: a, measurementGeometry: c }) {
3038
- const l = t.geometry, e = j(() => l.getAttribute("position") ? hn(l) : null, [
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, [
3039
3039
  l
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)
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)
3043
3043
  }, [
3044
3044
  n
3045
3045
  ]);
3046
3046
  return F("group", {
3047
3047
  children: [
3048
- r.pcaAxes && e && i(To, {
3048
+ r.pcaAxes && e && i(or, {
3049
3049
  pca: e
3050
3050
  }),
3051
- r.obb && e && i(Oo, {
3051
+ r.obb && e && i(rr, {
3052
3052
  pca: e
3053
3053
  }),
3054
- r.obbAxis && e && i(Vo, {
3054
+ r.obbAxis && e && i(ar, {
3055
3055
  pca: e,
3056
3056
  modelSize: e.halfExtents[0] ? Math.max(...e.halfExtents) * 2 : 100
3057
3057
  }),
3058
- r.shellComponents && o && i(Go, {
3058
+ r.shellComponents && o && i(dr, {
3059
3059
  componentDebug: o
3060
3060
  }),
3061
- r.ambientOcclusion && s && s.length > 0 && i(Yo, {
3061
+ r.ambientOcclusion && s && s.length > 0 && i(fr, {
3062
3062
  geometry: a ?? l,
3063
3063
  aoData: s
3064
3064
  }),
3065
- r.circumferenceScan && m && i(No, {
3065
+ r.circumferenceScan && m && i(cr, {
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($o, {
3083
+ r.landmarkAxis && m && i(ir, {
3084
3084
  redPoint: m.red,
3085
3085
  greenPoint: m.green
3086
3086
  }),
3087
- r.iterativePCA && m && i(Ho, {
3087
+ r.iterativePCA && m && i(sr, {
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(jo, {
3093
+ r.fullRegionPCA && m && i(lr, {
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 Zo({ mesh: t }) {
3103
- const r = t.geometry, n = j(() => {
3102
+ function pr({ mesh: t }) {
3103
+ const r = t.geometry, n = H(() => {
3104
3104
  if (!r.getAttribute("position")) return null;
3105
- const a = hn(r), c = a.axes[0], l = a.halfExtents[0] * 1.3;
3105
+ const a = Pn(r), c = a.axes[0], l = a.halfExtents[0] * 1.3;
3106
3106
  return {
3107
3107
  axis: c,
3108
3108
  center: a.center,
@@ -3113,7 +3113,7 @@ let __tla = (async () => {
3113
3113
  ]);
3114
3114
  if (!n) return null;
3115
3115
  const o = n.center.clone().addScaledVector(n.axis, n.halfLen), s = n.center.clone().addScaledVector(n.axis, -n.halfLen);
3116
- return i(ae, {
3116
+ return i(de, {
3117
3117
  points: [
3118
3118
  s,
3119
3119
  o
@@ -3129,7 +3129,7 @@ let __tla = (async () => {
3129
3129
  renderOrder: 999
3130
3130
  });
3131
3131
  }
3132
- const gn = [
3132
+ const In = [
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
- ], Ko = [
3189
- ...new Set(gn.map((t) => t.group))
3188
+ ], hr = [
3189
+ ...new Set(In.map((t) => t.group))
3190
3190
  ];
3191
- function Uo({ layers: t, onToggleLayer: r, isDoubleShell: n }) {
3191
+ function gr({ 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
- Ko.map((o) => {
3221
- const s = gn.filter((a) => a.group === o && !(a.hideWhenDoubleShell && n));
3220
+ hr.map((o) => {
3221
+ const s = In.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,397 +3278,434 @@ let __tla = (async () => {
3278
3278
  ]
3279
3279
  });
3280
3280
  }
3281
- const Jo = ({ config: t, spacingType: r, scanUrl: n, formMeasurements: o, onComplete: s, isDebugUser: a = false, onAnalyticsEvent: c, wasmModule: l }) => {
3282
- const [e, m] = R(null), [d, f] = R(0), [u, x] = R(false), [S, p] = R(false), [g, b] = R(""), [A, P] = R("3D"), [v, k] = R(r === "AK" ? 2 : 1), [w, M] = R(false), [h, C] = R(null), [L, _] = R(r ?? null), [D, E] = R("mm"), [V, Y] = R(false), [Q, me] = R(""), [ie, ce] = R(false), [ne, q] = R(false), [X, de] = R(false), [Z, fe] = R(false), [he, ue] = R(null), [H, ee] = R(null), [ge, ye] = R(null), [xe, te] = R(false), [N, G] = R([]), [ke, ze] = R(null), [$e, oe] = R(null), [Ce, pt] = R(null), [ht, Dt] = R(null), [xn, It] = R(false), [gt, Wt] = R(null), [mt, Fe] = R(null), [Le, bn] = R(false), [Rt, yn] = R(Bo), [Re, Bt] = R("obj"), [we, xt] = R(o), [Ve, bt] = R(true), [Be, Ze] = R(false), [Ke, Et] = R(false), [ve, Ue] = R(false), [wn, yt] = R(false), [Ne, Sn] = R(null), [vn, Cn] = R(void 0), [zn, Mn] = R(void 0), [Tt] = R("#c8c8c8"), [An] = R(1), [Pe, kn] = R(false), [wt, Ot] = R([]), Je = re(null), Ee = re(null), Qe = re(false), Fn = re(null), St = re(null), vt = re(null), Ge = J(async () => {
3283
- if (vt.current) try {
3284
- const y = vt.current, I = () => y.querySelector("canvas"), B = () => {
3285
- const T = I();
3286
- if (T) return T.toDataURL("image/png");
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();
3315
+ 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");
3287
3324
  };
3288
- St.current && St.current(), await new Promise((T) => requestAnimationFrame(() => requestAnimationFrame(T)));
3289
- const W = B();
3290
- P("2D"), await new Promise((T) => setTimeout(T, 150)), await new Promise((T) => requestAnimationFrame(() => requestAnimationFrame(T)));
3291
- const pe = B();
3292
- return P("3D"), !W || !pe ? void 0 : {
3293
- frontal_view_png: W,
3294
- side_view_png: pe
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
3295
3332
  };
3296
3333
  } catch {
3297
3334
  return;
3298
3335
  }
3299
- }, []), Se = J((y) => {
3300
- const I = /* @__PURE__ */ new Date(), B = `${String(I.getHours()).padStart(2, "0")}:${String(I.getMinutes()).padStart(2, "0")}:${String(I.getSeconds()).padStart(2, "0")}.${String(I.getMilliseconds()).padStart(3, "0")}`;
3301
- Ot((W) => [
3302
- ...W.slice(-200),
3303
- `[${B}] ${y}`
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) => [
3339
+ ...R.slice(-200),
3340
+ `[${W}] ${y}`
3304
3341
  ]);
3305
- }, []), { landmarkPoints: O, clearLandmarkPoints: Ln, addLandmarkPoint: $t, removeLandmarkPoint: Ht, updateLandmarkPositions: jt, setAligned: Vt, isAligned: K, setCut: Nt, isCut: Ct, reset: qe } = _t();
3306
- U(() => {
3307
- qe();
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();
3308
3345
  }, [
3309
- qe
3346
+ ft
3310
3347
  ]);
3311
- const et = v * at;
3312
- U(() => {
3313
- if (!a || O.length === 0) return;
3314
- const y = O[O.length - 1];
3315
- Se(`LANDMARK[${O.length - 1}]: placed at (${y.position.x.toFixed(1)}, ${y.position.y.toFixed(1)}, ${y.position.z.toFixed(1)}) face=${y.faceIndex}`);
3348
+ const ut = v * yt;
3349
+ K(() => {
3350
+ if (!a || T.length === 0) return;
3351
+ 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}`);
3316
3353
  }, [
3317
- O.length,
3354
+ T.length,
3318
3355
  a,
3319
- Se
3320
- ]), U(() => {
3321
- a && K && Se("STATE: mesh aligned");
3356
+ Ce
3357
+ ]), K(() => {
3358
+ a && U && Ce("STATE: mesh aligned");
3322
3359
  }, [
3323
- K,
3360
+ U,
3324
3361
  a,
3325
- Se
3326
- ]), U(() => {
3327
- a && Ct && Se("STATE: mesh cut");
3362
+ Ce
3363
+ ]), K(() => {
3364
+ a && Rt && Ce("STATE: mesh cut");
3328
3365
  }, [
3329
- Ct,
3366
+ Rt,
3330
3367
  a,
3331
- Se
3332
- ]), U(() => {
3333
- Je.current && (Je.current.scrollTop = Je.current.scrollHeight);
3368
+ Ce
3369
+ ]), K(() => {
3370
+ ct.current && (ct.current.scrollTop = ct.current.scrollHeight);
3334
3371
  }, [
3335
- wt
3372
+ It
3336
3373
  ]);
3337
- const He = j(() => ge ? new $.Mesh(ge) : null, [
3338
- ge
3374
+ const Ue = H(() => xe ? new O.Mesh(xe) : null, [
3375
+ xe
3339
3376
  ]);
3340
- U(() => {
3341
- o && xt(o);
3377
+ K(() => {
3378
+ o && Ft(o);
3342
3379
  }, [
3343
3380
  o
3344
- ]), U(() => {
3345
- o || xt(void 0);
3381
+ ]), K(() => {
3382
+ o || Ft(void 0);
3346
3383
  }, [
3347
3384
  v
3348
3385
  ]);
3349
- const tt = re(false);
3350
- U(() => {
3351
- if (!K || N.length === 0 || tt.current || !c) return;
3352
- tt.current = true;
3353
- const y = O.length >= 3 ? Math.abs(O[2].position.y - O[0].position.y) : null;
3386
+ const pt = ie(false);
3387
+ K(() => {
3388
+ if (!U || j.length === 0 || pt.current || !c) return;
3389
+ pt.current = true;
3390
+ const y = T.length >= 3 ? Math.abs(T[2].position.y - T[0].position.y) : null;
3354
3391
  c("dimensions_calculated", {
3355
3392
  spacing_type: L,
3356
3393
  source_unit: "mm",
3357
- file_format: Re,
3394
+ file_format: Ve,
3358
3395
  measurement_source: "scan_derived",
3359
3396
  is_double_wall: X,
3360
3397
  is_unit_converted: false,
3361
- form_measurements: (we == null ? void 0 : we.filter((I) => I != null)) ?? null,
3362
- scan_measurements: N.map((I) => +(I.modifiedValue ?? I.originalValue).toFixed(1)),
3363
- measurement_variance: we ? N.map((I, B) => {
3364
- const W = we[B];
3365
- return W == null ? null : +((I.modifiedValue ?? I.originalValue) - W).toFixed(1);
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);
3366
3403
  }) : null,
3367
3404
  frontal_height: y !== null ? +y.toFixed(1) : null
3368
3405
  });
3369
3406
  }, [
3370
- K,
3371
- N
3372
- ]), U(() => {
3373
- l !== void 0 && (Ee.current = l), l !== void 0 && kn(true);
3407
+ U,
3408
+ j
3409
+ ]), K(() => {
3410
+ l !== void 0 && (Ne.current = l), l !== void 0 && jn(true);
3374
3411
  }, [
3375
3412
  l
3376
3413
  ]);
3377
- const Ye = J((y, I) => {
3414
+ const tt = Q((y, D) => {
3378
3415
  y.computeBoundingBox();
3379
- const B = y.boundingBox, W = new z();
3380
- B.getCenter(W), y.translate(-W.x, -W.y, -W.z), y.computeBoundingBox();
3381
- const pe = y.boundingBox, T = new z();
3382
- pe.getSize(T), f(Math.max(T.x, T.y, T.z));
3383
- const be = new $.Mesh(y, new $.MeshStandardMaterial({
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({
3384
3421
  color: 8947848,
3385
- side: $.DoubleSide
3422
+ side: O.DoubleSide
3386
3423
  }));
3387
- m(be), ce(I), q(true), fe(false), Qe.current = false;
3388
- }, []), _e = J(async (y, I) => {
3389
- Fe(null);
3390
- const B = I.toLowerCase(), W = B.endsWith(".stl");
3391
- if (!B.endsWith(".obj") && !W) {
3392
- Fe("Unsupported file format. Please use OBJ or STL.");
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.");
3393
3430
  return;
3394
3431
  }
3395
- Bt(W ? "stl" : "obj"), p(true), b("Processing file..."), Se(`FILE_LOAD: ${I} (${W ? "STL" : "OBJ"})`);
3432
+ Kt(R ? "stl" : "obj"), p(true), b("Processing file..."), Ce(`FILE_LOAD: ${D} (${R ? "STL" : "OBJ"})`);
3396
3433
  try {
3397
- let T;
3398
- if (W) if (b("Converting STL..."), y instanceof ArrayBuffer) {
3399
- const se = new Blob([
3434
+ let G;
3435
+ if (R) if (b("Converting STL..."), y instanceof ArrayBuffer) {
3436
+ const te = new Blob([
3400
3437
  y
3401
- ]), De = new File([
3402
- se
3403
- ], I);
3404
- T = await kt(De);
3438
+ ]), Fe = new File([
3439
+ te
3440
+ ], D);
3441
+ G = await $t(Fe);
3405
3442
  } else {
3406
- const se = new Blob([
3443
+ const te = new Blob([
3407
3444
  y
3408
- ]), De = new File([
3409
- se
3410
- ], I);
3411
- T = await kt(De);
3445
+ ]), Fe = new File([
3446
+ te
3447
+ ], D);
3448
+ G = await $t(Fe);
3412
3449
  }
3413
- else T = typeof y == "string" ? y : new TextDecoder().decode(y);
3414
- const be = performance.now(), Me = Ee.current ? await to(T, Ee.current, (se) => {
3415
- b(se), Se(`PREPROCESS: ${se}`);
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}`);
3416
3453
  }) : null;
3417
- if (Me) Se(`PREPROCESS: done in ${(performance.now() - be).toFixed(0)}ms \u2014 unit=${Me.detectedUnit}, scaled=${Me.wasScaled}`), t.showAmputationModal && !r ? (C(Me), M(true)) : Ye(Me.geometry, Me.wasScaled);
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);
3418
3455
  else {
3419
3456
  b("Using fallback loader...");
3420
- const se = no(T);
3421
- se ? t.showAmputationModal && !r ? (C({
3422
- geometry: se,
3457
+ const te = vo(G);
3458
+ te ? t.showAmputationModal && !r ? (C({
3459
+ geometry: te,
3423
3460
  wasScaled: false
3424
- }), M(true)) : Ye(se, false) : Fe("Failed to parse the mesh.");
3461
+ }), z(true)) : tt(te, false) : De("Failed to parse the mesh.");
3425
3462
  }
3426
- } catch (T) {
3427
- Fe(T instanceof Error ? T.message : "Failed to process the mesh file.");
3463
+ } catch (G) {
3464
+ De(G instanceof Error ? G.message : "Failed to process the mesh file.");
3428
3465
  } finally {
3429
3466
  p(false), b("");
3430
3467
  }
3431
3468
  }, [
3432
- Pe,
3469
+ Te,
3433
3470
  t.showAmputationModal,
3434
3471
  r,
3435
- Ye
3472
+ tt
3436
3473
  ]);
3437
- U(() => {
3438
- if (!n || !Pe) return;
3474
+ K(() => {
3475
+ if (!n || !Te) return;
3439
3476
  (async () => {
3440
3477
  p(true), b("Loading scan...");
3441
3478
  try {
3442
- const I = await fetch(n);
3443
- if (!I.ok) throw new Error(`Failed to download scan: ${I.status}`);
3444
- const W = new URL(n).pathname.split("/").pop() || "scan.obj";
3445
- if (W.toLowerCase().endsWith(".stl")) {
3446
- const T = await I.arrayBuffer();
3447
- await _e(T, W);
3479
+ const D = await fetch(n);
3480
+ if (!D.ok) throw new Error(`Failed to download scan: ${D.status}`);
3481
+ const R = new URL(n).pathname.split("/").pop() || "scan.obj";
3482
+ if (R.toLowerCase().endsWith(".stl")) {
3483
+ const G = await D.arrayBuffer();
3484
+ await Oe(G, R);
3448
3485
  } else {
3449
- const T = await I.text();
3450
- await _e(T, W);
3486
+ const G = await D.text();
3487
+ await Oe(G, R);
3451
3488
  }
3452
- } catch (I) {
3453
- Fe(I instanceof Error ? I.message : "Failed to load scan from URL."), p(false), b("");
3489
+ } catch (D) {
3490
+ De(D instanceof Error ? D.message : "Failed to load scan from URL."), p(false), b("");
3454
3491
  }
3455
3492
  })();
3456
3493
  }, [
3457
3494
  n,
3458
- Pe
3495
+ Te
3459
3496
  ]);
3460
- const Pn = J((y) => {
3497
+ const Xn = Q((y) => {
3461
3498
  y.preventDefault(), x(true);
3462
- }, []), _n = J((y) => {
3499
+ }, []), Gn = Q((y) => {
3463
3500
  y.preventDefault(), x(false);
3464
- }, []), Dn = J(async (y) => {
3465
- if (y.preventDefault(), x(false), !Pe) {
3466
- Fe("WASM module is still loading. Please wait.");
3501
+ }, []), Zn = Q(async (y) => {
3502
+ if (y.preventDefault(), x(false), !Te) {
3503
+ De("WASM module is still loading. Please wait.");
3467
3504
  return;
3468
3505
  }
3469
- const I = y.dataTransfer.files[0];
3470
- if (!I) return;
3471
- const B = I.name.toLowerCase();
3472
- if (!B.endsWith(".obj") && !B.endsWith(".stl")) {
3473
- Fe("Please drop an OBJ or STL file.");
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.");
3474
3511
  return;
3475
3512
  }
3476
- if (B.endsWith(".stl")) {
3477
- Bt("stl"), p(true), b("Converting STL...");
3513
+ if (W.endsWith(".stl")) {
3514
+ Kt("stl"), p(true), b("Converting STL...");
3478
3515
  try {
3479
- const W = await kt(I);
3480
- await _e(W, I.name.replace(/\.stl$/i, ".obj"));
3481
- } catch (W) {
3482
- Fe(W instanceof Error ? W.message : "Failed to process STL file."), p(false), b("");
3516
+ const R = await $t(D);
3517
+ await Oe(R, D.name.replace(/\.stl$/i, ".obj"));
3518
+ } catch (R) {
3519
+ De(R instanceof Error ? R.message : "Failed to process STL file."), p(false), b("");
3483
3520
  }
3484
3521
  } else {
3485
- const W = await I.text();
3486
- await _e(W, I.name);
3522
+ const R = await D.text();
3523
+ await Oe(R, D.name);
3487
3524
  }
3488
3525
  }, [
3489
- Pe,
3490
- _e
3491
- ]), In = J((y) => {
3492
- _(y), k(y === "AK" ? 2 : 1), M(false), h && (Ye(h.geometry, h.wasScaled), C(null)), c == null ? void 0 : c("file_loaded", {
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", {
3493
3530
  spacing_type: y,
3494
- file_format: Re,
3531
+ file_format: Ve,
3495
3532
  is_double_wall: false
3496
3533
  });
3497
3534
  }, [
3498
3535
  h,
3499
- Ye,
3536
+ tt,
3500
3537
  c,
3501
- Re
3538
+ Ve
3502
3539
  ]);
3503
- U(() => {
3504
- if (!e || O.length !== 1 || !Ee.current || Qe.current) return;
3505
- Qe.current = true;
3506
- const y = O[0], I = Ee.current, B = e.geometry, { positions: W, indices: pe } = ct(B), T = new Float32Array([
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([
3507
3544
  y.position.x,
3508
3545
  y.position.y,
3509
3546
  y.position.z
3510
- ]), be = I.detect_shell(W, pe, T, 40), Me = be.details(), se = be.is_double_shell();
3511
- Se(`SHELL_DETECT: ${se ? "DOUBLE" : "SINGLE"} \u2014 ${Me}`), se && (de(true), te(true), Se(`SHELL_DETECT: double shell, thickness=${be.thickness().toFixed(1)}mm`));
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`));
3512
3549
  }, [
3513
3550
  e,
3514
- O,
3515
- Se
3551
+ T,
3552
+ Ce
3516
3553
  ]);
3517
- const Wn = J(() => {
3518
- if (!e || O.length < 2) return;
3519
- Y(true), me("Please wait..."), Se("PIPELINE: starting processing pipeline...");
3554
+ const Un = Q(() => {
3555
+ if (!e || T.length < 2) return;
3556
+ Y(true), ye("Please wait..."), Ce("PIPELINE: starting processing pipeline...");
3520
3557
  const y = performance.now();
3521
3558
  setTimeout(() => {
3522
- const I = [
3523
- O[1],
3524
- O[0],
3525
- ...O.slice(2)
3559
+ const D = [
3560
+ T[1],
3561
+ T[0],
3562
+ ...T.slice(2)
3526
3563
  ];
3527
- lo(e, I, at, {
3528
- onStatus: (B) => {
3529
- me(B), Se(`PIPELINE: ${B}`);
3564
+ ko(e, D, yt, {
3565
+ onStatus: (W) => {
3566
+ ye(W), Ce(`PIPELINE: ${W}`);
3530
3567
  },
3531
- addLandmarkPoint: $t,
3532
- removeLandmarkPoint: Ht,
3533
- updateLandmarkPositions: (B) => {
3534
- const W = [
3535
- B[1],
3536
- B[0],
3537
- ...B.slice(2)
3568
+ addLandmarkPoint: en,
3569
+ removeLandmarkPoint: tn,
3570
+ updateLandmarkPositions: (W) => {
3571
+ const R = [
3572
+ W[1],
3573
+ W[0],
3574
+ ...W.slice(2)
3538
3575
  ];
3539
- jt(W);
3576
+ nn(R);
3540
3577
  },
3541
- setAligned: Vt,
3542
- setCut: Nt,
3578
+ setAligned: on,
3579
+ setCut: rn,
3543
3580
  setModelSize: f,
3544
- setOriginalEndY: Dt,
3545
- setAdjustedStartY: oe,
3546
- setAdjustedEndY: pt,
3547
- setError: Fe,
3548
- setDoubleShell: (B) => {
3549
- de(B), te(true);
3581
+ setOriginalEndY: Yt,
3582
+ setAdjustedStartY: le,
3583
+ setAdjustedEndY: Mt,
3584
+ setError: De,
3585
+ setDoubleShell: (W) => {
3586
+ ue(W), re(true);
3550
3587
  },
3551
- setAoData: (B, W) => {
3552
- ue(B), ee(W ?? null);
3588
+ setAoData: (W, R) => {
3589
+ he(W), ne(R ?? null);
3553
3590
  },
3554
- setInnerShellExtracted: fe,
3555
- setMeasurementGeometry: ye,
3556
- setWasmSlices: ze,
3557
- wasmModule: Ee.current ?? void 0
3558
- }), Se(`PIPELINE: completed in ${(performance.now() - y).toFixed(0)}ms`), tt.current = false, Y(false);
3591
+ 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);
3559
3596
  }, 50);
3560
3597
  }, [
3561
3598
  e,
3562
- O,
3563
- jt,
3564
- Vt,
3565
- $t,
3566
- Ht,
3567
- Nt,
3599
+ T,
3600
+ nn,
3601
+ on,
3602
+ en,
3603
+ tn,
3604
+ rn,
3568
3605
  Z
3569
- ]), zt = re(false), Rn = J(async () => {
3570
- if (qe(), G([]), ze(null), ye(null), oe(null), pt(null), Wt(null), Dt(null), Ze(false), Et(false), bt(true), de(false), fe(false), Qe.current = false, zt.current = false, tt.current = false, P("3D"), n && Pe) {
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) {
3571
3608
  m(null);
3572
3609
  try {
3573
3610
  const y = await fetch(n);
3574
3611
  if (!y.ok) throw new Error(`Failed to download scan: ${y.status}`);
3575
- const B = new URL(n).pathname.split("/").pop() || "scan.obj";
3576
- B.toLowerCase().endsWith(".stl") ? await _e(await y.arrayBuffer(), B) : await _e(await y.text(), B);
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);
3577
3614
  } catch (y) {
3578
- Fe(y instanceof Error ? y.message : "Failed to reload scan.");
3615
+ De(y instanceof Error ? y.message : "Failed to reload scan.");
3579
3616
  }
3580
3617
  }
3581
3618
  }, [
3582
3619
  n,
3583
- Pe,
3584
- _e,
3585
- qe
3620
+ Te,
3621
+ Oe,
3622
+ ft
3586
3623
  ]);
3587
- U(() => {
3588
- K && N.length > 0 && !zt.current && (zt.current = true, Ze(true));
3624
+ K(() => {
3625
+ U && j.length > 0 && !Wt.current && (Wt.current = true, st(true));
3589
3626
  }, [
3590
- K,
3591
- N.length
3627
+ U,
3628
+ j.length
3592
3629
  ]);
3593
- const Xe = j(() => {
3630
+ const nt = H(() => {
3594
3631
  var _a;
3595
- if (!e || O.length < 3) return 0;
3596
- if (X) return Math.abs(O[0].position.y - O[2].position.y);
3632
+ if (!e || T.length < 3) return 0;
3633
+ if (X) return Math.abs(T[0].position.y - T[2].position.y);
3597
3634
  const y = e.geometry;
3598
3635
  y.computeBoundingBox();
3599
- const I = ((_a = y.boundingBox) == null ? void 0 : _a.min.y) ?? 0;
3600
- return Math.abs(O[0].position.y - I);
3636
+ const D = ((_a = y.boundingBox) == null ? void 0 : _a.min.y) ?? 0;
3637
+ return Math.abs(T[0].position.y - D);
3601
3638
  }, [
3602
3639
  e,
3603
- O,
3640
+ T,
3604
3641
  X
3605
- ]), Bn = J((y) => {
3606
- Sn(y), xt(y.circumferences), bt(true), Et(true);
3607
- }, []), Gt = J(async (y) => {
3642
+ ]), Qn = Q((y) => {
3643
+ En(y), Ft(y.circumferences), Lt(true), Ut(true);
3644
+ }, []), sn = Q(async (y) => {
3608
3645
  if (!s) return;
3609
- Ze(false), yt(false), Ue(true);
3610
- const I = e ? await Ge().catch(() => {
3646
+ st(false), Pt(false), at(true);
3647
+ const D = e ? await et().catch(() => {
3611
3648
  }) : void 0;
3612
3649
  try {
3613
3650
  s({
3614
3651
  spacingType: L ?? "BK",
3615
3652
  sourceUnit: "mm",
3616
- fileFormat: Re,
3653
+ fileFormat: Ve,
3617
3654
  measurementSource: "form_provided",
3618
3655
  isDoubleWall: X,
3619
3656
  isUnitConverted: false,
3620
- formMeasurements: we,
3621
- scanMeasurements: N,
3622
- frontalHeight: Xe,
3657
+ formMeasurements: ve,
3658
+ scanMeasurements: j,
3659
+ frontalHeight: nt,
3623
3660
  transverseML: 0,
3624
3661
  transverseAP: 0,
3625
3662
  scanUrl: n,
3626
3663
  decision: "skip",
3627
3664
  skipReason: y,
3628
- screenshots: I
3665
+ screenshots: D
3629
3666
  });
3630
3667
  } finally {
3631
- Ue(false);
3668
+ at(false);
3632
3669
  }
3633
3670
  }, [
3634
3671
  s,
3635
3672
  e,
3636
3673
  L,
3637
- Re,
3674
+ Ve,
3638
3675
  X,
3639
- we,
3640
- N,
3641
- Xe,
3676
+ ve,
3677
+ j,
3678
+ nt,
3642
3679
  n,
3643
- Ge
3644
- ]), Mt = re(null);
3645
- U(() => {
3646
- if (!e || !K) {
3647
- Mt.current = null;
3680
+ et
3681
+ ]), Bt = ie(null);
3682
+ K(() => {
3683
+ if (!e || !U) {
3684
+ Bt.current = null;
3648
3685
  return;
3649
3686
  }
3650
- const y = (He ?? e).geometry;
3651
- Mt.current = Pt(y);
3687
+ const y = (Ue ?? e).geometry;
3688
+ Bt.current = jt(y);
3652
3689
  }, [
3653
3690
  e,
3654
- K,
3655
- He
3691
+ U,
3692
+ Ue
3656
3693
  ]);
3657
- const At = J(async (y) => {
3658
- if (!s || !e || N.length === 0 || !L) return;
3659
- Ue(true);
3660
- const I = await Ge().catch(() => {
3694
+ const Et = Q(async (y) => {
3695
+ if (!s || !e || j.length === 0 || !L) return;
3696
+ at(true);
3697
+ const D = await et().catch(() => {
3661
3698
  });
3662
3699
  try {
3663
- let B = 0, W = 0;
3664
- if (O.length >= 2) {
3665
- const pe = (He ?? e).geometry, be = O[0].position.y;
3700
+ let W = 0, R = 0;
3701
+ if (T.length >= 2) {
3702
+ const ge = (Ue ?? e).geometry, J = T[0].position.y;
3666
3703
  try {
3667
- const Me = Mt.current ?? Pt(pe), se = Te(Me, pe, be);
3668
- if (se.linePoints.length >= 2) {
3669
- let De = se.linePoints[0], nt = se.linePoints[0], ot = se.linePoints[0], rt = se.linePoints[0];
3670
- for (const Ie of se.linePoints) Ie.x < De.x && (De = Ie), Ie.x > nt.x && (nt = Ie), Ie.z < ot.z && (ot = Ie), Ie.z > rt.z && (rt = Ie);
3671
- B = new z(De.x, be, De.z).distanceTo(new z(nt.x, be, nt.z)), W = new z(ot.x, be, ot.z).distanceTo(new z(rt.x, be, rt.z));
3704
+ const oe = Bt.current ?? jt(ge), te = Ge(oe, ge, J);
3705
+ 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));
3672
3709
  }
3673
3710
  } catch {
3674
3711
  }
@@ -3676,52 +3713,52 @@ let __tla = (async () => {
3676
3713
  s({
3677
3714
  spacingType: L,
3678
3715
  sourceUnit: "mm",
3679
- fileFormat: Re,
3716
+ fileFormat: Ve,
3680
3717
  measurementSource: y === "use_form_measurements" ? "form_provided" : "scan_derived",
3681
3718
  isDoubleWall: X,
3682
3719
  isUnitConverted: false,
3683
- formMeasurements: we,
3684
- scanMeasurements: N,
3685
- frontalHeight: (Ne == null ? void 0 : Ne.frontalHeight) ?? Xe,
3686
- transverseML: B,
3687
- transverseAP: W,
3720
+ formMeasurements: ve,
3721
+ scanMeasurements: j,
3722
+ frontalHeight: (qe == null ? void 0 : qe.frontalHeight) ?? nt,
3723
+ transverseML: W,
3724
+ transverseAP: R,
3688
3725
  scanUrl: n,
3689
3726
  decision: y,
3690
- userEnteredMeasurements: Ne ?? void 0,
3691
- screenshots: I
3727
+ userEnteredMeasurements: qe ?? void 0,
3728
+ screenshots: D
3692
3729
  });
3693
3730
  } finally {
3694
- Ue(false);
3731
+ at(false);
3695
3732
  }
3696
3733
  }, [
3697
3734
  s,
3698
3735
  e,
3699
- He,
3700
- N,
3736
+ Ue,
3737
+ j,
3701
3738
  L,
3702
- O,
3703
- Re,
3739
+ T,
3740
+ Ve,
3704
3741
  X,
3705
- we,
3742
+ ve,
3706
3743
  n,
3707
- Ne,
3708
- Xe,
3709
- Ge
3710
- ]), En = j(() => {
3711
- if (!we || N.length === 0) return false;
3712
- const y = Math.min(we.length, N.length);
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);
3713
3750
  if (y === 0) return false;
3714
- for (let I = 0; I < y; I++) {
3715
- const B = we[I], W = N[I];
3716
- if (!W || B == null || B === 0) continue;
3717
- const pe = W.modifiedValue ?? W.originalValue;
3718
- if (Math.abs(pe - B) > 7) 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;
3719
3756
  }
3720
3757
  return true;
3721
3758
  }, [
3722
- we,
3723
- N
3724
- ]), Tn = Ke ? 5 : K && Be || K ? 4 : e ? O.length === 0 ? 2 : 3 : 1, On = [
3759
+ ve,
3760
+ j
3761
+ ]), eo = lt ? 5 : U && je || U ? 4 : e ? T.length === 0 ? 2 : 3 : 1, to = [
3725
3762
  {
3726
3763
  label: "Load File",
3727
3764
  number: 1
@@ -3743,7 +3780,7 @@ let __tla = (async () => {
3743
3780
  number: 5
3744
3781
  }
3745
3782
  ];
3746
- return F(Un.Provider, {
3783
+ return F(mo.Provider, {
3747
3784
  value: t,
3748
3785
  children: [
3749
3786
  F("div", {
@@ -3775,9 +3812,9 @@ let __tla = (async () => {
3775
3812
  }
3776
3813
  })
3777
3814
  }),
3778
- i(ko, {
3779
- steps: On,
3780
- currentStep: Tn
3815
+ i(Xo, {
3816
+ steps: to,
3817
+ currentStep: eo
3781
3818
  }),
3782
3819
  F("div", {
3783
3820
  style: {
@@ -3795,37 +3832,37 @@ let __tla = (async () => {
3795
3832
  minHeight: 0
3796
3833
  },
3797
3834
  children: [
3798
- K && Be && L && i("div", {
3835
+ U && je && L && i("div", {
3799
3836
  style: {
3800
3837
  width: 340,
3801
3838
  flexShrink: 0,
3802
3839
  borderRight: "1px solid #e0e0e0",
3803
3840
  overflow: "hidden"
3804
3841
  },
3805
- children: i(Ro, {
3842
+ children: i(er, {
3806
3843
  amputationType: L,
3807
3844
  spacingInches: v,
3808
- scanMeasurements: N,
3809
- scanFrontalHeight: Xe,
3810
- onSave: Bn,
3811
- onSkip: Gt,
3812
- onFormChange: Cn,
3813
- onHeightChange: Mn,
3814
- initialValues: we,
3815
- initialFrontalHeight: Ne == null ? void 0 : Ne.frontalHeight
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
3816
3853
  })
3817
3854
  }),
3818
3855
  F("div", {
3819
- ref: vt,
3856
+ ref: _t,
3820
3857
  style: {
3821
3858
  flex: 1,
3822
3859
  position: "relative",
3823
3860
  minHeight: 0,
3824
3861
  overflow: "hidden"
3825
3862
  },
3826
- onDragOver: t.showDragDrop ? Pn : void 0,
3827
- onDragLeave: t.showDragDrop ? _n : void 0,
3828
- onDrop: t.showDragDrop ? Dn : void 0,
3863
+ onDragOver: t.showDragDrop ? Xn : void 0,
3864
+ onDragLeave: t.showDragDrop ? Gn : void 0,
3865
+ onDrop: t.showDragDrop ? Zn : void 0,
3829
3866
  children: [
3830
3867
  t.showDragDrop && !e && !S && i("div", {
3831
3868
  style: {
@@ -3838,7 +3875,7 @@ let __tla = (async () => {
3838
3875
  justifyContent: "center",
3839
3876
  pointerEvents: "none"
3840
3877
  },
3841
- children: Pe ? i("div", {
3878
+ children: Te ? i("div", {
3842
3879
  style: {
3843
3880
  fontSize: 18,
3844
3881
  color: "#aaa",
@@ -3876,7 +3913,7 @@ let __tla = (async () => {
3876
3913
  ]
3877
3914
  })
3878
3915
  }),
3879
- !t.showDragDrop && !e && !S && !mt && i("div", {
3916
+ !t.showDragDrop && !e && !S && !kt && i("div", {
3880
3917
  style: {
3881
3918
  position: "absolute",
3882
3919
  inset: 0,
@@ -3914,7 +3951,7 @@ let __tla = (async () => {
3914
3951
  ]
3915
3952
  })
3916
3953
  }),
3917
- e && !K && O.length === 0 && F("div", {
3954
+ e && !U && T.length === 0 && F("div", {
3918
3955
  style: {
3919
3956
  position: "absolute",
3920
3957
  top: 16,
@@ -3946,7 +3983,7 @@ let __tla = (async () => {
3946
3983
  L === "AK" ? "IT" : "MPT"
3947
3984
  ]
3948
3985
  }),
3949
- e && !K && O.length === 1 && F("div", {
3986
+ e && !U && T.length === 1 && F("div", {
3950
3987
  style: {
3951
3988
  position: "absolute",
3952
3989
  top: 16,
@@ -3977,15 +4014,15 @@ let __tla = (async () => {
3977
4014
  "Click mesh to set Origin"
3978
4015
  ]
3979
4016
  }),
3980
- S && i(Kt, {
4017
+ S && i(un, {
3981
4018
  message: g || "Processing mesh..."
3982
4019
  }),
3983
- V && i(Kt, {
3984
- message: Q
4020
+ V && i(un, {
4021
+ message: q
3985
4022
  }),
3986
- mt && i(co, {
3987
- message: mt,
3988
- onDismiss: () => Fe(null)
4023
+ kt && i(Lo, {
4024
+ message: kt,
4025
+ onDismiss: () => De(null)
3989
4026
  }),
3990
4027
  t.showAmputationModal && w && i("div", {
3991
4028
  style: {
@@ -4039,7 +4076,7 @@ let __tla = (async () => {
4039
4076
  "AK",
4040
4077
  "BK"
4041
4078
  ].map((y) => F("label", {
4042
- onClick: () => _(y),
4079
+ onClick: () => I(y),
4043
4080
  style: {
4044
4081
  flex: 1,
4045
4082
  display: "flex",
@@ -4057,7 +4094,7 @@ let __tla = (async () => {
4057
4094
  type: "radio",
4058
4095
  name: "ampType",
4059
4096
  checked: L === y,
4060
- onChange: () => _(y),
4097
+ onChange: () => I(y),
4061
4098
  style: {
4062
4099
  accentColor: "rgb(12, 67, 173)",
4063
4100
  marginBottom: 12,
@@ -4100,7 +4137,7 @@ let __tla = (async () => {
4100
4137
  children: [
4101
4138
  i("button", {
4102
4139
  onClick: () => {
4103
- M(false), C(null);
4140
+ z(false), C(null);
4104
4141
  },
4105
4142
  style: {
4106
4143
  padding: "6px 16px",
@@ -4118,7 +4155,7 @@ let __tla = (async () => {
4118
4155
  children: "Cancel"
4119
4156
  }),
4120
4157
  i("button", {
4121
- onClick: () => L && In(L),
4158
+ onClick: () => L && Kn(L),
4122
4159
  disabled: !L,
4123
4160
  style: {
4124
4161
  padding: "6px 16px",
@@ -4150,8 +4187,8 @@ let __tla = (async () => {
4150
4187
  zIndex: 10
4151
4188
  }
4152
4189
  }),
4153
- i(ao, {
4154
- children: F(Nn, {
4190
+ i(Fo, {
4191
+ children: F(co, {
4155
4192
  camera: {
4156
4193
  position: [
4157
4194
  0,
@@ -4161,14 +4198,14 @@ let __tla = (async () => {
4161
4198
  },
4162
4199
  style: {
4163
4200
  display: e ? "block" : "none",
4164
- backgroundColor: Le ? "#070611" : void 0
4201
+ backgroundColor: We ? "#070611" : void 0
4165
4202
  },
4166
4203
  gl: {
4167
4204
  localClippingEnabled: true,
4168
4205
  preserveDrawingBuffer: true
4169
4206
  },
4170
4207
  scene: {
4171
- background: Le ? new $.Color("#070611") : null
4208
+ background: We ? new O.Color("#070611") : null
4172
4209
  },
4173
4210
  children: [
4174
4211
  i("ambientLight", {
@@ -4198,15 +4235,15 @@ let __tla = (async () => {
4198
4235
  ],
4199
4236
  intensity: 0.2
4200
4237
  }),
4201
- e && A === "3D" && i(uo, {
4238
+ e && A === "3D" && i(Io, {
4202
4239
  mesh: e,
4203
4240
  maxPoints: 2,
4204
- meshColor: Tt,
4205
- meshOpacity: Le ? 0.3 : An,
4241
+ meshColor: Jt,
4242
+ meshOpacity: We ? 0.3 : Vn,
4206
4243
  frontFaceOnly: Z,
4207
- doubleShellTransparency: X && K
4244
+ doubleShellTransparency: X && U
4208
4245
  }),
4209
- e && A === "3D" && i(ho, {
4246
+ e && A === "3D" && i(_o, {
4210
4247
  modelSize: d,
4211
4248
  labels: [
4212
4249
  L === "AK" ? "IT" : "MPT",
@@ -4214,98 +4251,98 @@ let __tla = (async () => {
4214
4251
  "Cut Plane"
4215
4252
  ]
4216
4253
  }),
4217
- i(Co, {
4254
+ i(Vo, {
4218
4255
  modelSize: d,
4219
- isAligned: K,
4220
- isCut: Ct,
4256
+ isAligned: U,
4257
+ isCut: Rt,
4221
4258
  mesh: e,
4222
4259
  viewMode: A,
4223
- sliceY: K && O.length >= 2 ? Ce ?? ht ?? O[0].position.y : void 0,
4224
- landmarkCount: O.length,
4225
- measurementGeometry: ge,
4226
- resetCameraToFrontRef: St
4260
+ sliceY: U && T.length >= 2 ? ke ?? zt ?? T[0].position.y : void 0,
4261
+ landmarkCount: T.length,
4262
+ measurementGeometry: xe,
4263
+ resetCameraToFrontRef: Dt
4227
4264
  }),
4228
- !K && i(nn, {
4265
+ !U && i(yn, {
4229
4266
  enableDamping: false
4230
4267
  }),
4231
- K && N.length > 0 && e && A === "3D" && i(zo, {
4268
+ U && j.length > 0 && e && A === "3D" && i(jo, {
4232
4269
  mesh: e,
4233
- isDragging: xn
4270
+ isDragging: _n
4234
4271
  }),
4235
- e && K && O.length >= 3 && (() => {
4236
- const I = e.geometry.getIndex();
4237
- if (!I || I.count < 30) return null;
4238
- const B = O[2], W = O[0], pe = $e ?? B.position.y, T = Ce ?? ht ?? W.position.y;
4239
- return A === "2D" ? i(Fo, {
4240
- mesh: He ?? e,
4241
- upperY: T,
4242
- originY: W.position.y,
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,
4279
+ originY: R.position.y,
4243
4280
  modelSize: d,
4244
- meshColor: Tt,
4245
- displayUnit: D
4246
- }) : F(We, {
4281
+ meshColor: Jt,
4282
+ displayUnit: _
4283
+ }) : F(He, {
4247
4284
  children: [
4248
- i(wo, {
4249
- mesh: He ?? e,
4250
- startY: pe,
4251
- endY: T,
4252
- spacing: et,
4285
+ i(Oo, {
4286
+ mesh: Ue ?? e,
4287
+ startY: ge,
4288
+ endY: G,
4289
+ spacing: ut,
4253
4290
  modelSize: d,
4254
- onMeasurementsChange: G,
4291
+ onMeasurementsChange: N,
4255
4292
  reverseOrder: true,
4256
- displayUnit: D,
4293
+ displayUnit: _,
4257
4294
  useInnerSurface: X && !Z,
4258
- formMeasurements: Be ? vn ?? we : Ve ? we : void 0,
4259
- originY: gt ?? W.position.y,
4260
- wasmSlices: ke
4295
+ formMeasurements: je ? Tn ?? ve : Qe ? ve : void 0,
4296
+ originY: At ?? R.position.y,
4297
+ wasmSlices: Ie
4261
4298
  }),
4262
- i(vo, {
4299
+ i(Ho, {
4263
4300
  mesh: e,
4264
- greenY: gt ?? W.position.y,
4301
+ greenY: At ?? R.position.y,
4265
4302
  modelSize: d,
4266
- displayUnit: D,
4267
- bottomY: X ? B.position.y : void 0,
4268
- formHeight: Be ? zn : Ve ? Ne == null ? void 0 : Ne.frontalHeight : void 0
4303
+ displayUnit: _,
4304
+ bottomY: X ? W.position.y : void 0,
4305
+ formHeight: je ? $n : Qe ? qe == null ? void 0 : qe.frontalHeight : void 0
4269
4306
  }),
4270
- i(Lo, {
4307
+ i(Zo, {
4271
4308
  mesh: e,
4272
- yPosition: gt ?? W.position.y,
4273
- onYChange: (be) => {
4274
- Wt(be), ze(null);
4275
- const Me = be - W.position.y;
4276
- pt((ht ?? W.position.y + et * 2) + Me);
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);
4277
4314
  },
4278
- minY: W.position.y - et,
4279
- maxY: W.position.y + et,
4315
+ minY: R.position.y - ut,
4316
+ maxY: R.position.y + ut,
4280
4317
  modelSize: d,
4281
4318
  color: "#44ff44",
4282
4319
  hoverColor: "#88ff88",
4283
4320
  dragColor: "#ffffff",
4284
4321
  label: L === "AK" ? "IT" : "MPT",
4285
- onDragStart: () => It(true),
4286
- onDragEnd: () => It(false)
4322
+ onDragStart: () => Xt(true),
4323
+ onDragEnd: () => Xt(false)
4287
4324
  })
4288
4325
  ]
4289
4326
  });
4290
4327
  })(),
4291
- e && K && A === "3D" && Le && i(Zo, {
4328
+ e && U && A === "3D" && We && i(pr, {
4292
4329
  mesh: e
4293
4330
  }),
4294
- e && t.showDebug && Le && A === "3D" && i(Xo, {
4331
+ e && t.showDebug && We && A === "3D" && i(ur, {
4295
4332
  mesh: e,
4296
4333
  modelSize: d,
4297
- layers: Rt,
4298
- landmarkPoints: O,
4334
+ layers: Zt,
4335
+ landmarkPoints: T,
4299
4336
  componentDebug: null,
4300
- aoData: he,
4301
- aoGeometry: H,
4302
- measurementGeometry: ge
4337
+ aoData: me,
4338
+ aoGeometry: $,
4339
+ measurementGeometry: xe
4303
4340
  }),
4304
- i(Qo, {
4305
- screenshotFnRef: Fn,
4341
+ i(xr, {
4342
+ screenshotFnRef: Nn,
4306
4343
  mesh: e,
4307
4344
  modelSize: d,
4308
- measurementGeometry: ge
4345
+ measurementGeometry: xe
4309
4346
  })
4310
4347
  ]
4311
4348
  })
@@ -4337,8 +4374,8 @@ let __tla = (async () => {
4337
4374
  },
4338
4375
  children: "Start Over"
4339
4376
  }),
4340
- !K && O.length >= 1 && i("button", {
4341
- onClick: Ln,
4377
+ !U && T.length >= 1 && i("button", {
4378
+ onClick: Yn,
4342
4379
  style: {
4343
4380
  padding: "6px 16px",
4344
4381
  borderRadius: 4,
@@ -4354,8 +4391,8 @@ let __tla = (async () => {
4354
4391
  },
4355
4392
  children: "Reset Points"
4356
4393
  }),
4357
- K && !Ke && i("button", {
4358
- onClick: Rn,
4394
+ U && !lt && i("button", {
4395
+ onClick: Jn,
4359
4396
  style: {
4360
4397
  padding: "6px 16px",
4361
4398
  borderRadius: 4,
@@ -4373,15 +4410,15 @@ let __tla = (async () => {
4373
4410
  })
4374
4411
  ]
4375
4412
  }),
4376
- t.showDebug && Le && e && A === "3D" && i(Uo, {
4377
- layers: Rt,
4378
- onToggleLayer: (y) => yn((I) => ({
4379
- ...I,
4380
- [y]: !I[y]
4413
+ t.showDebug && We && e && A === "3D" && i(gr, {
4414
+ layers: Zt,
4415
+ onToggleLayer: (y) => Wn((D) => ({
4416
+ ...D,
4417
+ [y]: !D[y]
4381
4418
  })),
4382
4419
  isDoubleShell: X
4383
4420
  }),
4384
- K && N.length > 0 && F("div", {
4421
+ U && j.length > 0 && F("div", {
4385
4422
  style: {
4386
4423
  position: "absolute",
4387
4424
  top: 16,
@@ -4445,9 +4482,9 @@ let __tla = (async () => {
4445
4482
  style: {
4446
4483
  padding: "6px 14px",
4447
4484
  fontSize: 13,
4448
- fontWeight: D === "mm" ? 600 : 400,
4449
- backgroundColor: D === "mm" ? "rgb(12, 67, 173)" : "#fff",
4450
- color: D === "mm" ? "#fff" : "#666",
4485
+ fontWeight: _ === "mm" ? 600 : 400,
4486
+ backgroundColor: _ === "mm" ? "rgb(12, 67, 173)" : "#fff",
4487
+ color: _ === "mm" ? "#fff" : "#666",
4451
4488
  border: "none",
4452
4489
  cursor: "pointer",
4453
4490
  fontFamily: "system-ui, sans-serif"
@@ -4459,9 +4496,9 @@ let __tla = (async () => {
4459
4496
  style: {
4460
4497
  padding: "6px 14px",
4461
4498
  fontSize: 13,
4462
- fontWeight: D === "inch" ? 600 : 400,
4463
- backgroundColor: D === "inch" ? "rgb(12, 67, 173)" : "#fff",
4464
- color: D === "inch" ? "#fff" : "#666",
4499
+ fontWeight: _ === "inch" ? 600 : 400,
4500
+ backgroundColor: _ === "inch" ? "rgb(12, 67, 173)" : "#fff",
4501
+ color: _ === "inch" ? "#fff" : "#666",
4465
4502
  border: "none",
4466
4503
  borderLeft: "1px solid #ccc",
4467
4504
  cursor: "pointer",
@@ -4511,7 +4548,7 @@ let __tla = (async () => {
4511
4548
  })
4512
4549
  ]
4513
4550
  }),
4514
- A === "3D" && we && i("div", {
4551
+ A === "3D" && ve && i("div", {
4515
4552
  style: {
4516
4553
  display: "flex",
4517
4554
  borderRadius: 6,
@@ -4520,13 +4557,13 @@ let __tla = (async () => {
4520
4557
  boxShadow: "0 2px 8px rgba(0,0,0,0.1)"
4521
4558
  },
4522
4559
  children: i("button", {
4523
- onClick: () => bt((y) => !y),
4560
+ onClick: () => Lt((y) => !y),
4524
4561
  style: {
4525
4562
  padding: "6px 14px",
4526
4563
  fontSize: 13,
4527
- fontWeight: Ve ? 600 : 400,
4528
- backgroundColor: Ve ? "rgb(12, 67, 173)" : "#fff",
4529
- color: Ve ? "#fff" : "#666",
4564
+ fontWeight: Qe ? 600 : 400,
4565
+ backgroundColor: Qe ? "rgb(12, 67, 173)" : "#fff",
4566
+ color: Qe ? "#fff" : "#666",
4530
4567
  border: "none",
4531
4568
  cursor: "pointer",
4532
4569
  fontFamily: "system-ui, sans-serif"
@@ -4544,13 +4581,13 @@ let __tla = (async () => {
4544
4581
  },
4545
4582
  children: i("button", {
4546
4583
  onClick: async () => {
4547
- const y = await Ge();
4584
+ const y = await et();
4548
4585
  if (!y) return;
4549
- const I = (/* @__PURE__ */ new Date()).toISOString().slice(0, 10), B = (W, pe) => {
4550
- const T = document.createElement("a");
4551
- T.href = W, T.download = pe, T.click();
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();
4552
4589
  };
4553
- B(y.frontal_view_png, `measurements_front_${I}.png`), await new Promise((W) => setTimeout(W, 300)), B(y.side_view_png, `measurements_transverse_${I}.png`);
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`);
4554
4591
  },
4555
4592
  style: {
4556
4593
  padding: "6px 14px",
@@ -4574,13 +4611,13 @@ let __tla = (async () => {
4574
4611
  boxShadow: "0 2px 8px rgba(0,0,0,0.1)"
4575
4612
  },
4576
4613
  children: i("button", {
4577
- onClick: () => bn((y) => !y),
4614
+ onClick: () => Rn((y) => !y),
4578
4615
  style: {
4579
4616
  padding: "6px 14px",
4580
4617
  fontSize: 13,
4581
- fontWeight: Le ? 600 : 400,
4582
- backgroundColor: Le ? "#e65100" : "#fff",
4583
- color: Le ? "#fff" : "#666",
4618
+ fontWeight: We ? 600 : 400,
4619
+ backgroundColor: We ? "#e65100" : "#fff",
4620
+ color: We ? "#fff" : "#666",
4584
4621
  border: "none",
4585
4622
  cursor: "pointer",
4586
4623
  fontFamily: "system-ui, sans-serif"
@@ -4590,19 +4627,19 @@ let __tla = (async () => {
4590
4627
  })
4591
4628
  ]
4592
4629
  }),
4593
- e && ne && i(Mo, {
4594
- wasAutoScaled: ie,
4595
- onDismiss: () => q(false)
4630
+ e && se && i(No, {
4631
+ wasAutoScaled: ae,
4632
+ onDismiss: () => ee(false)
4596
4633
  }),
4597
- e && xe && K && i(Ao, {
4634
+ e && we && U && i(Yo, {
4598
4635
  isDoubleShell: X,
4599
- onDismiss: () => te(false)
4636
+ onDismiss: () => re(false)
4600
4637
  })
4601
4638
  ]
4602
4639
  })
4603
4640
  ]
4604
4641
  }),
4605
- ve && F("div", {
4642
+ ze && F("div", {
4606
4643
  "data-finalizing-overlay": true,
4607
4644
  style: {
4608
4645
  position: "absolute",
@@ -4651,9 +4688,9 @@ let __tla = (async () => {
4651
4688
  flexShrink: 0
4652
4689
  },
4653
4690
  children: [
4654
- !Be && s && i("button", {
4655
- disabled: ve,
4656
- onClick: () => yt(true),
4691
+ !je && s && i("button", {
4692
+ disabled: ze,
4693
+ onClick: () => Pt(true),
4657
4694
  style: {
4658
4695
  padding: "6px 16px",
4659
4696
  borderRadius: 4,
@@ -4661,23 +4698,23 @@ let __tla = (async () => {
4661
4698
  fontWeight: 500,
4662
4699
  backgroundColor: "#fff",
4663
4700
  border: "1px solid #bdbdbd",
4664
- color: ve ? "#999" : "#666",
4665
- cursor: ve ? "not-allowed" : "pointer",
4701
+ color: ze ? "#999" : "#666",
4702
+ cursor: ze ? "not-allowed" : "pointer",
4666
4703
  fontFamily: "system-ui, sans-serif",
4667
4704
  letterSpacing: "0.4px",
4668
4705
  lineHeight: "36px"
4669
4706
  },
4670
4707
  children: "Have Galileo Check My Measurements"
4671
4708
  }),
4672
- Be && i("div", {}),
4709
+ je && i("div", {}),
4673
4710
  F("div", {
4674
4711
  style: {
4675
4712
  display: "flex",
4676
4713
  gap: 8
4677
4714
  },
4678
4715
  children: [
4679
- e && !K && O.length >= 2 && i("button", {
4680
- onClick: Wn,
4716
+ e && !U && T.length >= 2 && i("button", {
4717
+ onClick: Un,
4681
4718
  style: {
4682
4719
  padding: "6px 16px",
4683
4720
  borderRadius: 4,
@@ -4693,8 +4730,8 @@ let __tla = (async () => {
4693
4730
  },
4694
4731
  children: "Next \xBB"
4695
4732
  }),
4696
- K && Ke && !Be && i("button", {
4697
- onClick: () => Ze(true),
4733
+ U && lt && !je && i("button", {
4734
+ onClick: () => st(true),
4698
4735
  style: {
4699
4736
  padding: "6px 16px",
4700
4737
  borderRadius: 4,
@@ -4710,37 +4747,37 @@ let __tla = (async () => {
4710
4747
  },
4711
4748
  children: "Edit Measurements"
4712
4749
  }),
4713
- K && Ke && (En ? i("button", {
4714
- disabled: ve,
4715
- onClick: () => At("continue"),
4750
+ U && lt && (qn ? i("button", {
4751
+ disabled: ze,
4752
+ onClick: () => Et("continue"),
4716
4753
  style: {
4717
4754
  padding: "6px 16px",
4718
4755
  borderRadius: 4,
4719
4756
  fontSize: 14,
4720
4757
  fontWeight: 500,
4721
- backgroundColor: ve ? "#9e9e9e" : "rgb(12, 67, 173)",
4758
+ backgroundColor: ze ? "#9e9e9e" : "rgb(12, 67, 173)",
4722
4759
  border: "none",
4723
4760
  color: "#fff",
4724
- cursor: ve ? "not-allowed" : "pointer",
4761
+ cursor: ze ? "not-allowed" : "pointer",
4725
4762
  fontFamily: "system-ui, sans-serif",
4726
4763
  letterSpacing: "0.4px",
4727
4764
  lineHeight: "36px"
4728
4765
  },
4729
4766
  children: "Continue"
4730
- }) : F(We, {
4767
+ }) : F(He, {
4731
4768
  children: [
4732
4769
  i("button", {
4733
- disabled: ve,
4734
- onClick: () => At("use_form_measurements"),
4770
+ disabled: ze,
4771
+ onClick: () => Et("use_form_measurements"),
4735
4772
  style: {
4736
4773
  padding: "6px 16px",
4737
4774
  borderRadius: 4,
4738
4775
  fontSize: 14,
4739
4776
  fontWeight: 500,
4740
- backgroundColor: ve ? "#9e9e9e" : "rgb(12, 67, 173)",
4777
+ backgroundColor: ze ? "#9e9e9e" : "rgb(12, 67, 173)",
4741
4778
  border: "none",
4742
4779
  color: "#fff",
4743
- cursor: ve ? "not-allowed" : "pointer",
4780
+ cursor: ze ? "not-allowed" : "pointer",
4744
4781
  fontFamily: "system-ui, sans-serif",
4745
4782
  letterSpacing: "0.4px",
4746
4783
  lineHeight: "36px"
@@ -4748,17 +4785,17 @@ let __tla = (async () => {
4748
4785
  children: "Set to Measurements"
4749
4786
  }),
4750
4787
  i("button", {
4751
- disabled: ve,
4752
- onClick: () => At("use_scan"),
4788
+ disabled: ze,
4789
+ onClick: () => Et("use_scan"),
4753
4790
  style: {
4754
4791
  padding: "6px 16px",
4755
4792
  borderRadius: 4,
4756
4793
  fontSize: 14,
4757
4794
  fontWeight: 500,
4758
- backgroundColor: ve ? "#e0e0e0" : "#fff",
4795
+ backgroundColor: ze ? "#e0e0e0" : "#fff",
4759
4796
  border: "1px solid #bdbdbd",
4760
- color: ve ? "#999" : "#333",
4761
- cursor: ve ? "not-allowed" : "pointer",
4797
+ color: ze ? "#999" : "#333",
4798
+ cursor: ze ? "not-allowed" : "pointer",
4762
4799
  fontFamily: "system-ui, sans-serif",
4763
4800
  letterSpacing: "0.4px",
4764
4801
  lineHeight: "36px"
@@ -4773,7 +4810,7 @@ let __tla = (async () => {
4773
4810
  })
4774
4811
  ]
4775
4812
  }),
4776
- a && wt.length > 0 && F("div", {
4813
+ a && It.length > 0 && F("div", {
4777
4814
  style: {
4778
4815
  height: 120,
4779
4816
  flexShrink: 0,
@@ -4820,18 +4857,18 @@ let __tla = (async () => {
4820
4857
  },
4821
4858
  children: [
4822
4859
  "WASM ",
4823
- Ee.current ? "v2" : "N/A",
4860
+ Ne.current ? "v2" : "N/A",
4824
4861
  " | ",
4825
- O.length,
4862
+ T.length,
4826
4863
  " pts | ",
4827
- K ? "aligned" : "unaligned",
4864
+ U ? "aligned" : "unaligned",
4828
4865
  " | ",
4829
- N.length,
4866
+ j.length,
4830
4867
  " slices"
4831
4868
  ]
4832
4869
  }),
4833
4870
  i("button", {
4834
- onClick: () => Ot([]),
4871
+ onClick: () => Qt([]),
4835
4872
  style: {
4836
4873
  background: "none",
4837
4874
  border: "1px solid #30363d",
@@ -4848,43 +4885,43 @@ let __tla = (async () => {
4848
4885
  ]
4849
4886
  }),
4850
4887
  i("div", {
4851
- ref: Je,
4888
+ ref: ct,
4852
4889
  style: {
4853
4890
  flex: 1,
4854
4891
  overflowY: "auto",
4855
4892
  padding: "4px 10px",
4856
4893
  lineHeight: 1.6
4857
4894
  },
4858
- children: wt.map((y, I) => {
4859
- const B = y.includes("ERROR") || y.includes("failed"), W = y.includes("warning") || y.includes("WARN"), pe = y.includes("PIPELINE:"), T = y.includes("STATE:");
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:");
4860
4897
  return i("div", {
4861
4898
  style: {
4862
- color: B ? "#f85149" : W ? "#d29922" : pe ? "#58a6ff" : T ? "#3fb950" : "#8b949e",
4899
+ color: W ? "#f85149" : R ? "#d29922" : ge ? "#58a6ff" : G ? "#3fb950" : "#8b949e",
4863
4900
  whiteSpace: "pre"
4864
4901
  },
4865
4902
  children: y
4866
- }, I);
4903
+ }, D);
4867
4904
  })
4868
4905
  })
4869
4906
  ]
4870
4907
  })
4871
4908
  ]
4872
4909
  }),
4873
- wn && i(un, {
4874
- onSkip: Gt,
4875
- onCancel: () => yt(false)
4910
+ Bn && i(Fn, {
4911
+ onSkip: sn,
4912
+ onCancel: () => Pt(false)
4876
4913
  })
4877
4914
  ]
4878
4915
  });
4879
4916
  };
4880
- function Qo({ screenshotFnRef: t }) {
4881
- return U(() => {
4917
+ function xr({ screenshotFnRef: t }) {
4918
+ return K(() => {
4882
4919
  t.current = null;
4883
4920
  }, [
4884
4921
  t
4885
4922
  ]), null;
4886
4923
  }
4887
- mn = function(t) {
4924
+ Dn = function(t) {
4888
4925
  const r = t === "AK" ? 2 : 1, n = [];
4889
4926
  for (let o = 2; o >= 1; o -= r) n.push(`${o}_above`);
4890
4927
  n.push("at_ref");
@@ -4903,25 +4940,25 @@ let __tla = (async () => {
4903
4940
  ]) n.push(`${o}_below`);
4904
4941
  return n;
4905
4942
  };
4906
- lt = function(t, r) {
4907
- const n = mn(r), o = {};
4943
+ bt = function(t, r) {
4944
+ const n = Dn(r), o = {};
4908
4945
  for (let s = 0; s < Math.min(t.length, n.length); s++) {
4909
4946
  const a = t[s];
4910
4947
  a != null && !isNaN(a) && (o[n[s]] = a);
4911
4948
  }
4912
4949
  return o;
4913
4950
  };
4914
- qo = function(t, r) {
4951
+ br = function(t, r) {
4915
4952
  if (!t) return;
4916
- const o = mn(r).map((s) => {
4953
+ const o = Dn(r).map((s) => {
4917
4954
  const a = t[s];
4918
4955
  return a ?? void 0;
4919
4956
  });
4920
4957
  if (!o.every((s) => s == null)) return o;
4921
4958
  };
4922
- cr = ({ request: t, onComplete: r, wasmModule: n }) => {
4923
- const [o, s] = R(null);
4924
- U(() => {
4959
+ Lr = ({ request: t, onComplete: r, wasmModule: n }) => {
4960
+ const [o, s] = B(null);
4961
+ K(() => {
4925
4962
  if (n != null) return;
4926
4963
  let e = false;
4927
4964
  const m = async (d) => {
@@ -4941,23 +4978,23 @@ let __tla = (async () => {
4941
4978
  }, [
4942
4979
  n
4943
4980
  ]);
4944
- const a = n !== void 0 ? n : o ?? void 0, c = j(() => qo(t.form_measurements, t.spacing_type), [
4981
+ const a = n !== void 0 ? n : o ?? void 0, c = H(() => br(t.form_measurements, t.spacing_type), [
4945
4982
  t.form_measurements,
4946
4983
  t.spacing_type
4947
4984
  ]), l = (e) => {
4948
4985
  var _a, _b;
4949
- const m = e.scanMeasurements.map((A) => +(A.modifiedValue ?? A.originalValue).toFixed(1)), d = lt(m, t.spacing_type);
4986
+ const m = e.scanMeasurements.map((A) => +(A.modifiedValue ?? A.originalValue).toFixed(1)), d = bt(m, t.spacing_type);
4950
4987
  let f, u;
4951
4988
  if (e.formMeasurements) {
4952
- f = lt(e.formMeasurements, t.spacing_type);
4989
+ f = bt(e.formMeasurements, t.spacing_type);
4953
4990
  const A = e.scanMeasurements.map((P, v) => {
4954
4991
  var _a2;
4955
4992
  const k = (_a2 = e.formMeasurements) == null ? void 0 : _a2[v];
4956
4993
  return k == null || isNaN(k) ? null : +((P.modifiedValue ?? P.originalValue) - k).toFixed(1);
4957
4994
  });
4958
- u = lt(A, t.spacing_type);
4995
+ u = bt(A, t.spacing_type);
4959
4996
  }
4960
- const x = e.userEnteredMeasurements ? lt(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 = {
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 = {
4961
4998
  spacing_type: t.spacing_type,
4962
4999
  source_unit: "mm",
4963
5000
  file_format: e.fileFormat,
@@ -4989,8 +5026,8 @@ let __tla = (async () => {
4989
5026
  height: "100%",
4990
5027
  display: "flex"
4991
5028
  },
4992
- children: i(Jo, {
4993
- config: Kn,
5029
+ children: i(mr, {
5030
+ config: go,
4994
5031
  spacingType: t.spacing_type,
4995
5032
  scanUrl: t.scan_url,
4996
5033
  formMeasurements: c,
@@ -5001,9 +5038,9 @@ let __tla = (async () => {
5001
5038
  };
5002
5039
  })();
5003
5040
  export {
5004
- cr as G,
5041
+ Lr as G,
5005
5042
  __tla,
5006
- lt as a,
5007
- qo as c,
5008
- mn as g
5043
+ bt as a,
5044
+ br as c,
5045
+ Dn as g
5009
5046
  };