@souldi/try-on 0.1.51 → 0.1.52

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.
@@ -0,0 +1,240 @@
1
+ //#region src/mannequin3d.js
2
+ async function e(e, t, n = []) {
3
+ let [r, { GLTFLoader: i }] = await Promise.all([import("./mannequin-chunks/three.module-BqUhHzuP.mjs"), import("./mannequin-chunks/GLTFLoader-S0hpQWQS.mjs")]), a = !1, o = new r.Scene(), s = e.clientWidth || 300, c = e.clientHeight || 260, l = new r.WebGLRenderer({
4
+ antialias: !0,
5
+ alpha: !0
6
+ });
7
+ l.setPixelRatio(Math.min(2, window.devicePixelRatio || 1)), l.setSize(s, c), l.outputColorSpace = r.SRGBColorSpace, l.domElement.style.cssText = "position:absolute;inset:0;z-index:1;", e.appendChild(l.domElement), o.add(new r.HemisphereLight(16777215, 12170412, 1.5));
8
+ let u = new r.DirectionalLight(16777215, 1.6);
9
+ u.position.set(2, 4, 5), o.add(u);
10
+ let d = new r.DirectionalLight(16777215, .7);
11
+ d.position.set(-3, 2, -4), o.add(d);
12
+ let f = new r.MeshStandardMaterial({
13
+ color: 16053489,
14
+ roughness: .45,
15
+ metalness: 0
16
+ }), p = [f], m = [], h = await new Promise((e, n) => new i().load(t, e, void 0, n));
17
+ if (a) return { destroy() {} };
18
+ let g = h.scene;
19
+ g.traverse((e) => {
20
+ e.isMesh && (e.material = f, p.push(e.geometry));
21
+ }), o.add(g);
22
+ let _ = new r.Box3().setFromObject(g), v = 1.68 / (_.max.y - _.min.y || 1);
23
+ g.scale.setScalar(v), g.updateMatrixWorld(!0);
24
+ let y = new r.Box3().setFromObject(g);
25
+ g.position.y -= y.min.y + .7, g.position.x -= (y.min.x + y.max.x) / 2, g.position.z -= (y.min.z + y.max.z) / 2, g.updateMatrixWorld(!0);
26
+ let b = .01, x = [], S = new r.Vector3();
27
+ g.traverse((e) => {
28
+ if (!e.isMesh) return;
29
+ let t = e.geometry.getAttribute("position"), n = Math.max(1, Math.floor(t.count / 8e4));
30
+ for (let r = 0; r < t.count; r += n) S.fromBufferAttribute(t, r), e.localToWorld(S), x.push(S.x, S.y, S.z);
31
+ });
32
+ let C = .98, w = (e, t) => {
33
+ let n = [];
34
+ for (let r = 0; r < x.length; r += 3) Math.abs(x[r + 1] - e) <= t && n.push([x[r], x[r + 2]]);
35
+ return n;
36
+ }, T = (e, t, n, r) => {
37
+ let i = w(e, r || .011), a = Infinity, o = -Infinity, s = Infinity, c = -Infinity, l = 0;
38
+ return i.forEach((e) => {
39
+ e[0] <= t || e[0] >= n || (l++, e[0] < a && (a = e[0]), e[0] > o && (o = e[0]), e[1] < s && (s = e[1]), e[1] > c && (c = e[1]));
40
+ }), l < 6 ? null : {
41
+ x0: a,
42
+ x1: o,
43
+ z0: s,
44
+ z1: c,
45
+ cx: (a + o) / 2,
46
+ cz: (s + c) / 2,
47
+ w: o - a
48
+ };
49
+ }, E = (e) => {
50
+ let t = T(e, -.5, .5, .008);
51
+ return t ? t.w : 0;
52
+ }, ee = Math.max(.08, E(C - .1)), D = C - .28;
53
+ for (let e = C - .12; e > C - .45; e -= .01) if (E(e) > ee * 1.9) {
54
+ D = e - .015;
55
+ break;
56
+ }
57
+ let O = D - .13, k = T(O, -.19, .19), A = {
58
+ shY: D,
59
+ shHalf: E(D) / 2,
60
+ chestY: O,
61
+ rx: k ? k.w / 2 : .14,
62
+ zc: k ? k.cz : 0,
63
+ zF: k ? k.z1 : .1
64
+ }, j = null, M = null;
65
+ for (let e = A.shY - .28; e > A.shY - .44; e -= .015) {
66
+ let t = T(e, -.19, .19);
67
+ t && (!j || t.w < j.t.w) && (j = {
68
+ y: e,
69
+ t
70
+ });
71
+ }
72
+ for (let e = A.shY - .42; e > A.shY - .54; e -= .02) {
73
+ let t = T(e, -.165, .165);
74
+ t && (!M || t.w > M.t.w) && (M = {
75
+ y: e,
76
+ t
77
+ });
78
+ }
79
+ A.waistRow = j, A.hipsRow = M, A.crotchY = M ? M.y - .12 : A.shY - .6;
80
+ let N = new r.PerspectiveCamera(30, s / c, .05, 100), P = D - .3;
81
+ N.position.set(0, P, 2.35), N.lookAt(0, P, 0);
82
+ let F = new r.Group();
83
+ o.add(F);
84
+ let I = "#5F7F63", L = (e, t, n) => new r.Vector3(e, t, n), R = {}, z = (e, t, n, i) => {
85
+ let a = new r.CatmullRomCurve3(e, t, "catmullrom", .5), o = new r.TubeGeometry(a, t ? 90 : 40, n, 8, t), s = new r.TubeGeometry(a, t ? 90 : 40, n * 2.2, 8, t), c = new r.MeshBasicMaterial({ color: i || I }), l = new r.MeshBasicMaterial({
86
+ color: i || I,
87
+ transparent: !0,
88
+ opacity: .15,
89
+ depthWrite: !1
90
+ });
91
+ m.push(o, s, c, l), F.add(new r.Mesh(o, c)), F.add(new r.Mesh(s, l));
92
+ }, B = (e, t, n) => Math.max(.4, (e + n / (2 * Math.PI) * b) / (e + t)), te = (e, t, n) => Math.max(.4, (e + n / 2 * b) / (e + t)), ne = (e, t) => {
93
+ let n = (A.rx + .012) * e, r = n * .72, i = A.zF - A.zc - r * .4, a = [];
94
+ for (let e = 0; e < 36; e++) {
95
+ let t = e / 36 * Math.PI * 2, o = Math.sin(t);
96
+ a.push(L(n * Math.cos(t), A.chestY - .012 * Math.max(0, o), A.zc + r * o + Math.max(0, i) * Math.max(0, o) * Math.max(0, o)));
97
+ }
98
+ z(a, !0, .7 * b, t), R.chest = L(-(n + b), A.chestY, A.zc);
99
+ }, re = (e, t) => {
100
+ let n = (A.shHalf - .015) * e, r = T(A.shY, -.25, .25), i = r ? r.cz : A.zc;
101
+ z([
102
+ L(-(n + b), A.shY - .5 * b, i + 2 * b),
103
+ L(-n * .5, A.shY + 3.5 * b, i + 5 * b),
104
+ L(0, A.shY + 4.5 * b, i + 6 * b),
105
+ L(n * .5, A.shY + 3.5 * b, i + 5 * b),
106
+ L(n + b, A.shY - .5 * b, i + 2 * b)
107
+ ], !1, .65 * b, t), R.shoulder_width = L(-(n + 1.5 * b), A.shY - .5 * b, i + 2 * b);
108
+ }, V = (e, t, n, r) => {
109
+ if (!e) return;
110
+ let i = (e.t.w / 2 + .008) * t, a = Math.min((e.t.z1 - e.t.z0) / 2 + .008, i * .78) * t, o = [];
111
+ for (let t = 0; t < 36; t++) {
112
+ let n = t / 36 * Math.PI * 2;
113
+ o.push(L(e.t.cx + i * Math.cos(n), e.y, e.t.cz + a * Math.sin(n)));
114
+ }
115
+ z(o, !0, .7 * b, r), R[n] = L(e.t.cx - i - b, e.y, e.t.cz);
116
+ }, ie = (e, t) => {
117
+ let n = [];
118
+ for (let e = A.shY - .05; e > A.shY - .25; e -= .015) {
119
+ let t = w(e, .012);
120
+ if (!t.length) continue;
121
+ let r = t[0];
122
+ t.forEach((e) => {
123
+ e[0] > r[0] && (r = e);
124
+ }), n.push([
125
+ r[0],
126
+ e,
127
+ r[1]
128
+ ]);
129
+ }
130
+ if (n.length < 5) return;
131
+ let r = 0, i = 0, a = 0, o = 0, s = 0, c = 0, l = n.length;
132
+ n.forEach(([e, t, n]) => {
133
+ r += t, i += t * t, a += e, o += e * t, s += n, c += n * t;
134
+ });
135
+ let u = l * i - r * r, d = (l * o - a * r) / u, f = (a - d * r) / l, p = (l * c - s * r) / u, m = (s - p * r) / l, h = A.shY - .02, g = L(f + d * h, h, m + p * h), _ = L(d, 1, p).normalize();
136
+ _.y > 0 && _.multiplyScalar(-1);
137
+ let v = g.clone().addScaledVector(_, Math.max(e, 4) * b * 1.1), y = [];
138
+ for (let e = 0; e <= 6; e++) {
139
+ let t = g.clone().lerp(v, e / 6);
140
+ t.x += .8 * b, t.z += .5 * b, y.push(t);
141
+ }
142
+ z(y, !1, .7 * b, t), R.sleeve_length = y[y.length - 1].clone();
143
+ }, ae = (e, t) => {
144
+ if (!A.hipsRow) return;
145
+ let n = A.hipsRow.y - .1, r = n - Math.max(e, 4) * b * .9, i = [];
146
+ for (let e = 0; e <= 10; e++) {
147
+ let t = n + (r - n) * (e / 10), a = t > A.crotchY ? T(t, -.165, .165) : T(t, .006, .16, .016);
148
+ i.push(L(a ? a.cx : 0, t, a ? a.z1 : A.zF));
149
+ }
150
+ z(i, !1, .65 * b, t), R.inseam = i[i.length - 1].clone();
151
+ }, H = (e) => {
152
+ for (; F.children.length;) {
153
+ let e = F.children.pop();
154
+ e.geometry.dispose(), e.material.dispose();
155
+ }
156
+ m = [];
157
+ for (let e in R) delete R[e];
158
+ for (let t of e) {
159
+ let e = t.color || I;
160
+ t.key === "chest" ? ne(B(A.rx, .012, t.easeCm), e) : t.key === "waist" && A.waistRow ? V(A.waistRow, B(A.waistRow.t.w / 2, .008, t.easeCm), "waist", e) : t.key === "hips" && A.hipsRow ? V(A.hipsRow, B(A.hipsRow.t.w / 2, .008, t.easeCm), "hips", e) : t.key === "shoulder_width" ? re(te(A.shHalf, .015, t.easeCm), e) : t.key === "sleeve_length" ? ie(20 + t.easeCm, e) : t.key === "inseam" && ae(60 + t.easeCm, e);
161
+ }
162
+ };
163
+ H(n);
164
+ let U = document.createElement("div");
165
+ U.style.cssText = "position:absolute;inset:0;z-index:2;pointer-events:none;font-family:Manrope,system-ui,sans-serif;";
166
+ let W = "http://www.w3.org/2000/svg", G = document.createElementNS(W, "svg");
167
+ G.setAttribute("width", String(s)), G.setAttribute("height", String(c)), G.style.cssText = "position:absolute;inset:0;", U.appendChild(G), e.appendChild(U);
168
+ let K = n.filter((e) => R[e.key]), q = {}, J = {}, Y = {}, X = {};
169
+ K.forEach((e) => {
170
+ let t = document.createElement("div");
171
+ t.style.cssText = "position:absolute;display:flex;align-items:center;gap:6px;background:rgba(255,255,255,0.94);border-radius:999px;padding:4px 10px 4px 5px;box-shadow:0 6px 20px rgba(28,28,22,0.12);white-space:nowrap;";
172
+ let n = document.createElement("span");
173
+ n.style.cssText = "width:16px;height:16px;border-radius:50%;background:#6F8F72;color:#FAF7ED;font-size:9.5px;font-weight:700;flex:none;display:inline-flex;align-items:center;justify-content:center;", n.textContent = e.letter;
174
+ let r = document.createElement("span");
175
+ r.style.cssText = `font-size:11px;font-weight:700;color:${e.color || "#5F7F63"};`, r.textContent = e.verdict || "", t.appendChild(n), t.appendChild(r), U.appendChild(t);
176
+ let i = document.createElementNS(W, "line");
177
+ i.setAttribute("stroke", "rgba(28,28,22,0.30)"), i.setAttribute("stroke-width", "1"), G.appendChild(i);
178
+ let a = document.createElementNS(W, "circle");
179
+ a.setAttribute("r", "2.2"), a.setAttribute("fill", "#1c1c16"), a.setAttribute("fill-opacity", "0.55"), G.appendChild(a), q[e.key] = t, J[e.key] = r, Y[e.key] = i, X[e.key] = a;
180
+ });
181
+ let oe = () => {
182
+ let t = e.clientWidth, n = e.clientHeight;
183
+ if (!t || !n) return;
184
+ G.setAttribute("width", String(t)), G.setAttribute("height", String(n));
185
+ let r = {};
186
+ K.forEach((e) => {
187
+ let i = R[e.key].clone().project(N);
188
+ r[e.key] = {
189
+ x: (i.x * .5 + .5) * t,
190
+ y: (-i.y * .5 + .5) * n
191
+ };
192
+ });
193
+ let i = {
194
+ left: [],
195
+ right: []
196
+ };
197
+ K.forEach((e) => (r[e.key].x < t / 2 ? i.left : i.right).push(e)), Object.entries(i).forEach(([e, i]) => {
198
+ i.sort((e, t) => r[e.key].y - r[t.key].y);
199
+ let a = 16;
200
+ i.forEach((i) => {
201
+ let o = r[i.key], s = Math.max(o.y, a);
202
+ s = Math.min(s, n - 24), a = s + 34;
203
+ let c = q[i.key];
204
+ c.style.top = `${s - 13}px`, e === "left" ? (c.style.left = "10px", c.style.right = "auto") : (c.style.right = "10px", c.style.left = "auto");
205
+ let l = c.offsetWidth, u = e === "left" ? 10 + l + 3 : t - 10 - l - 3;
206
+ Y[i.key].setAttribute("x1", String(u)), Y[i.key].setAttribute("y1", String(s)), Y[i.key].setAttribute("x2", String(o.x)), Y[i.key].setAttribute("y2", String(o.y)), X[i.key].setAttribute("cx", String(o.x)), X[i.key].setAttribute("cy", String(o.y));
207
+ });
208
+ });
209
+ }, Z = () => {
210
+ a || (l.render(o, N), oe());
211
+ };
212
+ Z();
213
+ let Q = new ResizeObserver(() => {
214
+ let t = e.clientWidth, n = e.clientHeight;
215
+ !t || !n || (l.setSize(t, n), N.aspect = t / n, N.updateProjectionMatrix(), Z());
216
+ });
217
+ Q.observe(e);
218
+ let $ = n.slice();
219
+ return {
220
+ destroy() {
221
+ a || (a = !0, Q.disconnect(), p.forEach((e) => e.dispose()), m.forEach((e) => e.dispose()), l.dispose(), l.domElement.remove(), U.remove());
222
+ },
223
+ updateMany(e) {
224
+ if (!(a || !e.length)) {
225
+ for (let t of e) {
226
+ let e = $.findIndex((e) => e.key === t.key);
227
+ e !== -1 && ($[e] = t);
228
+ }
229
+ H($);
230
+ for (let t of e) {
231
+ let e = J[t.key];
232
+ e && (e.textContent = t.verdict || "", e.style.color = t.color || "#5F7F63");
233
+ }
234
+ Z();
235
+ }
236
+ }
237
+ };
238
+ }
239
+ //#endregion
240
+ export { e as mountMannequin3D };