@souldi/try-on 0.1.50 → 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.
- package/dist/mannequin/woman_mannequin.glb +0 -0
- package/dist/mannequin-chunks/GLTFLoader-S0hpQWQS.mjs +1381 -0
- package/dist/mannequin-chunks/three.module-BqUhHzuP.mjs +17484 -0
- package/dist/mannequin-loader.mjs +240 -0
- package/dist/widget.mjs +1 -1
- package/dist/widget.umd.js +1 -1
- package/package.json +4 -3
|
@@ -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 };
|