xvai-loi 0.1.37 → 0.1.39
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/co.txt +1 -1
- package/package.json +1 -1
- package/xvai-loi.js +229 -25
package/co.txt
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
xvaiLoi100138
|
package/package.json
CHANGED
package/xvai-loi.js
CHANGED
|
@@ -5805,6 +5805,7 @@ function catNen(im, buoc = 7, tol = 40) {
|
|
|
5805
5805
|
return o;
|
|
5806
5806
|
}
|
|
5807
5807
|
var ts = /* @__PURE__ */ new Map();
|
|
5808
|
+
var dsTenTaiSan = () => [...ts.keys()].filter((k) => /^(trang|anh|vat|story|logo):|\.(png|jpg)$/i.test(k)).sort();
|
|
5808
5809
|
var taiSan = (ten) => ten ? ts.get(ten) || globalThis.__taiSanThu?.(ten) || null : null;
|
|
5809
5810
|
var nhanTaiSan = (ten, im) => {
|
|
5810
5811
|
ts.set(ten, ten.indexOf("anh:") === 0 ? im : catNen(im));
|
|
@@ -9586,6 +9587,11 @@ function phongK(g, im, W4, H2, F, s) {
|
|
|
9586
9587
|
g.drawImage(im, 0, 0, W4, H2);
|
|
9587
9588
|
g.restore();
|
|
9588
9589
|
}
|
|
9590
|
+
function tfE(g, W4, H2, F, s, yDau, k, zk = 1) {
|
|
9591
|
+
const cx = F ? (F[0] + F[2]) / 2 : 0.5, top = F ? F[1] : 0.2, se = (1 + (s - 1) * k) * zk, cxe = 0.5 + (cx - 0.5) * k, ye = top + (yDau - top) * k;
|
|
9592
|
+
g.translate(W4 / 2 - cxe * W4 * se, ye * H2 - top * H2 * se);
|
|
9593
|
+
g.scale(se, se);
|
|
9594
|
+
}
|
|
9589
9595
|
function tf(g, W4, H2, F, s, yDau) {
|
|
9590
9596
|
const cx = F ? (F[0] + F[2]) / 2 : 0.5, top = F ? F[1] : 0.2;
|
|
9591
9597
|
g.translate(W4 / 2 - cx * W4 * s, yDau * H2 - top * H2 * s);
|
|
@@ -9824,9 +9830,10 @@ dangKy("cmNen", (g, d, tuoi, W4, H2, nen2, _s, dai2) => {
|
|
|
9824
9830
|
if (a <= 0) return;
|
|
9825
9831
|
g.save();
|
|
9826
9832
|
g.globalAlpha = a;
|
|
9833
|
+
const kS = 1;
|
|
9827
9834
|
const p = (d.bo === "card" || d.bo === "depth" || d.bo === "cut" && !d.anNguoi) && nen2 ? nguoi(nen2, W4, H2) : null;
|
|
9828
9835
|
const hv = d.huong ?? -1, kv = 1 - Math.pow(1 - Math.min(1, tuoi / 0.35), 3), ox = hv === 0 ? -(1 - kv) * 0.3 * W4 : hv === 1 ? (1 - kv) * 0.3 * W4 : 0, oy = hv === 2 ? (1 - kv) * 0.1 * H2 : 0;
|
|
9829
|
-
const zk = d.z && nen2 ? 1 + (d.z - 1) * (1 - eOut(Math.min(1, tuoi / 0.6))) : d.phong && nen2 ? 1 + (d.phong - 1) * (tuoi < 0.
|
|
9836
|
+
const zk = d.z && nen2 ? 1 + (d.z - 1) * (1 - eOut(Math.min(1, tuoi / 0.6))) : d.phong && nen2 ? 1 + (d.phong - 1) * (tuoi < 0.42 ? 1 : 1 - eOut((tuoi - 0.42) / 0.33)) : 1;
|
|
9830
9837
|
if (d.bo === "card" || d.bo === "cut" || d.bo === "toi") {
|
|
9831
9838
|
g.drawImage(nenCam(W4, H2, d.bo === "toi" || !!d.toiNen), 0, 0);
|
|
9832
9839
|
if (d.bo === "card" && nen2) {
|
|
@@ -9844,7 +9851,7 @@ dangKy("cmNen", (g, d, tuoi, W4, H2, nen2, _s, dai2) => {
|
|
|
9844
9851
|
g.save();
|
|
9845
9852
|
bo(g, x, y, w, h, r);
|
|
9846
9853
|
g.clip();
|
|
9847
|
-
|
|
9854
|
+
tfE(g, W4, H2, F, s, d.yDau ?? 0.42, kS);
|
|
9848
9855
|
g.drawImage(nen2, 0, 0, W4, H2);
|
|
9849
9856
|
g.restore();
|
|
9850
9857
|
g.save();
|
|
@@ -9855,7 +9862,7 @@ dangKy("cmNen", (g, d, tuoi, W4, H2, nen2, _s, dai2) => {
|
|
|
9855
9862
|
g.restore();
|
|
9856
9863
|
if (p) {
|
|
9857
9864
|
g.save();
|
|
9858
|
-
|
|
9865
|
+
tfE(g, W4, H2, F, s, d.yDau ?? 0.42, kS);
|
|
9859
9866
|
g.drawImage(p, 0, 0, W4, H2);
|
|
9860
9867
|
g.restore();
|
|
9861
9868
|
}
|
|
@@ -9863,7 +9870,17 @@ dangKy("cmNen", (g, d, tuoi, W4, H2, nen2, _s, dai2) => {
|
|
|
9863
9870
|
} else if (d.bo === "cut" && p && !d.anNguoi) {
|
|
9864
9871
|
g.save();
|
|
9865
9872
|
g.translate(ox, oy);
|
|
9866
|
-
|
|
9873
|
+
tfE(
|
|
9874
|
+
g,
|
|
9875
|
+
W4,
|
|
9876
|
+
H2,
|
|
9877
|
+
F,
|
|
9878
|
+
d.s || 1,
|
|
9879
|
+
d.yDau ?? 0.36,
|
|
9880
|
+
kS,
|
|
9881
|
+
zk
|
|
9882
|
+
/* 09/10 lát 2 ⑧: phóng chồng */
|
|
9883
|
+
);
|
|
9867
9884
|
g.drawImage(p, 0, 0, W4, H2);
|
|
9868
9885
|
g.restore();
|
|
9869
9886
|
}
|
|
@@ -9883,8 +9900,8 @@ dangKy("cmNen", (g, d, tuoi, W4, H2, nen2, _s, dai2) => {
|
|
|
9883
9900
|
tf(c, W4, H2, F, sb * 1.15, 0.45);
|
|
9884
9901
|
c.drawImage(nen2, 0, 0, W4, H2);
|
|
9885
9902
|
}, Math.round(0.012 * W4), "brightness(0.8)");
|
|
9886
|
-
const kz = eOut(Math.min(1, tuoi / 0.
|
|
9887
|
-
|
|
9903
|
+
const kz = eOut(Math.min(1, tuoi / 0.5));
|
|
9904
|
+
tfE(g, W4, H2, F, (d.s || 1.05) * (1 - 0.3 * kz), 0.5 + 0.015 * kz, kS);
|
|
9888
9905
|
g.drawImage(nen2, 0, 0, W4, H2);
|
|
9889
9906
|
}
|
|
9890
9907
|
g.restore();
|
|
@@ -9951,13 +9968,15 @@ dangKy("cmNen", (g, d, tuoi, W4, H2, nen2, _s, dai2) => {
|
|
|
9951
9968
|
g.restore();
|
|
9952
9969
|
}
|
|
9953
9970
|
if (d.bo === "depth") {
|
|
9954
|
-
|
|
9971
|
+
const yG = d.yChu ?? 0.24, truoc = d.yChu != null && F && yG > F[1] - 0.06 && yG < F[3];
|
|
9972
|
+
const veChu = () => chu2(g, d.giant, W4 / 2, yG * H2 + (d.z ? 0 : (1 - ka) * 70 * H2 / 1920), 190 * (d.coChu || 1) * H2 / 1920, "giant", d.z ? 1 : kep12(tuoi / 0.2), 0.84 * W4);
|
|
9955
9973
|
if (p) {
|
|
9956
9974
|
if (zk > 1.001) phongK(g, p, W4, H2, F, zk);
|
|
9957
9975
|
else g.drawImage(p, 0, 0, W4, H2);
|
|
9958
9976
|
}
|
|
9959
|
-
|
|
9960
|
-
|
|
9977
|
+
if (truoc) veChu();
|
|
9978
|
+
} else if (d.giant) chu2(g, d.giant, W4 / 2, (d.yChu ?? (d.v3 ? 0.145 : d.bo === "toi" ? 0.4 : d.bo === "tron" ? 0.25 : 0.2)) * H2 + (1 - ka) * 70 * H2 / 1920, (d.cam ? 190 : d.v3 ? 112 : 150) * (d.coChu || 1) * H2 / 1920, d.cam ? "cam" : d.do ? "do" : "kw", kep12(tuoi / 0.06), 0.9 * W4);
|
|
9979
|
+
if (d.chu2 && !(d.bo === "depth" && /\n/.test(String(d.giant || "")))) chu2(g, d.chu2, W4 / 2, (d.bo === "depth" ? (d.yChu ?? 0.24) + 0.02 : d.yChu ?? (d.bo === "toi" ? 0.4 : d.bo === "tron" ? 0.25 : 0.2)) * H2 + (/\n/.test(String(d.giant || "")) ? 290 : d.cam ? 200 : 150) * (d.coChu || 1) * H2 / 1920, 96 * H2 / 1920 * (d.z ? 1 + 0.7 * (1 - eOut((tuoi - 0.35) / 0.35)) : 1), d.do2 ? "do" : d.bo === "cut" || d.bo === "tron" || d.bo === "toi" ? "kw" : "vang", kep12((tuoi - 0.35) / 0.15), 0.88 * W4);
|
|
9961
9980
|
const vt = d.v3 && taiSan(d.v3), dl = String(d.giant || "").indexOf(String.fromCharCode(10)) >= 0;
|
|
9962
9981
|
if (vt) {
|
|
9963
9982
|
const p2 = eSoft((tuoi - 0.1) / 0.3), hh = (dl ? 0.2 : 0.26) * H2 * (0.9 + 0.1 * p2), ww = Math.min(hh * vt.width / vt.height, 0.6 * W4), h2 = ww * vt.height / vt.width;
|
|
@@ -10469,7 +10488,18 @@ function lapCuongMe(o) {
|
|
|
10469
10488
|
} catch (e) {
|
|
10470
10489
|
}
|
|
10471
10490
|
}
|
|
10472
|
-
const { tl, cs, ws, kb, fm, zc, tong, the: the0, keu, anh, moi, ms } = o;
|
|
10491
|
+
const { tl, cs, ws, kb, fm, zc, tong, the: the0, keu: keu0, anh, moi, ms } = o;
|
|
10492
|
+
let fKeu = -9;
|
|
10493
|
+
const keu = (f2, L) => {
|
|
10494
|
+
let cach = 0;
|
|
10495
|
+
try {
|
|
10496
|
+
cach = +(localStorage.getItem("xvaiSfxCach") || 0);
|
|
10497
|
+
} catch (e) {
|
|
10498
|
+
}
|
|
10499
|
+
if (cach > 0 && f2 - fKeu < cach) return;
|
|
10500
|
+
fKeu = Math.max(fKeu, f2);
|
|
10501
|
+
return keu0(f2, L);
|
|
10502
|
+
};
|
|
10473
10503
|
const loai = [];
|
|
10474
10504
|
let bc = "B0";
|
|
10475
10505
|
const r22 = (v) => +(+v || 0).toFixed(2), ghiL = (lo, s, ly, moi2) => {
|
|
@@ -10617,6 +10647,14 @@ function lapCuongMe(o) {
|
|
|
10617
10647
|
const sp = [];
|
|
10618
10648
|
let ctxSt = "";
|
|
10619
10649
|
const IC = { tien: "xu", dongho: "dongho", canhbao: "canh", tich: "tich", bieudo: "bieu", tim: "tim", khong: "none" };
|
|
10650
|
+
const kTram = () => {
|
|
10651
|
+
try {
|
|
10652
|
+
const v = +(localStorage.getItem("xvaiTramDai") || 1);
|
|
10653
|
+
return v >= 1 && v <= 1.6 ? v : 1;
|
|
10654
|
+
} catch (e) {
|
|
10655
|
+
return 1;
|
|
10656
|
+
}
|
|
10657
|
+
};
|
|
10620
10658
|
const UT = { moc: 100, card: 100, cta: 90, so: 80, ds: 70, anh: 60, chu: 50, vat: 50, bang: 40, test: 40, nhac: 20, phong: 10 };
|
|
10621
10659
|
const ung = [], thuB = [], DOI_CHU = 2, minD = (d0) => Math.max(1.2, 0.6 * d0);
|
|
10622
10660
|
const de = (f0, d0, x, doi = 0, ham) => {
|
|
@@ -10825,7 +10863,7 @@ function lapCuongMe(o) {
|
|
|
10825
10863
|
if (x.kieu === "anh" && dV) {
|
|
10826
10864
|
de(f2, dV, { uuTien: UT.anh, bo: "anh", ten: ten2, chu: chuK, chu2: chu22, keu: "whoosh", video: 1 }, 3, datAnh);
|
|
10827
10865
|
ghiL("video", { bo: "anh", f: f2, d: dV }, "kho video: ung vien clip " + dV.toFixed(1) + " s thay anh: " + String(x.tu || ""));
|
|
10828
|
-
} else if (x.kieu === "anh") de(f2, f2 < f1 ? 2 : 2.4, { uuTien: UT.anh, ...co ? [{ bo: "anh", ten: ten2, chu: chuK, chu2: chu22, keu: "whoosh" }, { bo: "chia", ten: ten2, chu: chuK, keu: "whoosh" }, { bo: "anh", ten: ten2, chu: chuK, chu2: chu22, pip: 1, keu: "whoosh" }][nAnh++ % 3] : { bo: "kinh", dong: [chuK, chu22].filter(Boolean), keu: "whoosh" } }, 3, datAnh);
|
|
10866
|
+
} else if (x.kieu === "anh") de(f2, (f2 < f1 ? 2 : 2.4) * kTram(), { uuTien: UT.anh, ...co ? [{ bo: "anh", ten: ten2, chu: chuK, chu2: chu22, keu: "whoosh" }, { bo: "chia", ten: ten2, chu: chuK, keu: "whoosh" }, { bo: "anh", ten: ten2, chu: chuK, chu2: chu22, pip: 1, keu: "whoosh" }][nAnh++ % 3] : { bo: "kinh", dong: [chuK, chu22].filter(Boolean), keu: "whoosh" } }, 3, datAnh);
|
|
10829
10867
|
else if (x.kieu === "vat") {
|
|
10830
10868
|
const LG = timLogo(suaChu(chuK + " " + sach2(String(x.tu || ""))))[0];
|
|
10831
10869
|
if (LG) napHinhLogo(LG.slug);
|
|
@@ -11337,7 +11375,7 @@ function lapCuongMe(o) {
|
|
|
11337
11375
|
}
|
|
11338
11376
|
return t1 - t0;
|
|
11339
11377
|
};
|
|
11340
|
-
for (const dd of [2.2, 1.8]) for (let f2 = f0; f2 <= m.b - dd - 0.5 + 1e-6; f2 += 0.25) {
|
|
11378
|
+
for (const dd of [2.2 * kTram(), 1.8]) for (let f2 = f0; f2 <= m.b - dd - 0.5 + 1e-6; f2 += 0.25) {
|
|
11341
11379
|
const fr = +f2.toFixed(2);
|
|
11342
11380
|
if (gioLogo(fr - 0.1, fr + dd) >= 0 || lien(fr, fr + dd) > 6) continue;
|
|
11343
11381
|
if (dat(fr, dd, { uuTien: UT.anh, bo: "chia", ten: tk, keu: "whoosh-nhanh" }, 0, 0.01)) {
|
|
@@ -11519,6 +11557,16 @@ function lapCuongMe(o) {
|
|
|
11519
11557
|
s.dSua = 1;
|
|
11520
11558
|
nS++;
|
|
11521
11559
|
}
|
|
11560
|
+
if (typeof e.yChu === "number" && e.yChu >= 0.05 && e.yChu <= 0.6) {
|
|
11561
|
+
s.yChu = e.yChu;
|
|
11562
|
+
s.khoa = 1;
|
|
11563
|
+
nS++;
|
|
11564
|
+
}
|
|
11565
|
+
if (typeof e.coChu === "number" && e.coChu >= 0.5 && e.coChu <= 1.6) {
|
|
11566
|
+
s.coChu = e.coChu;
|
|
11567
|
+
s.khoa = 1;
|
|
11568
|
+
nS++;
|
|
11569
|
+
}
|
|
11522
11570
|
if (typeof e.f === "number" && e.f >= 0) {
|
|
11523
11571
|
s.f = e.f;
|
|
11524
11572
|
nS++;
|
|
@@ -11540,7 +11588,7 @@ function lapCuongMe(o) {
|
|
|
11540
11588
|
G2.__lichSuaDaAp = nS;
|
|
11541
11589
|
ghiL("bo", { bo: "sua-tay" }, "sua tay: " + nS + " truong");
|
|
11542
11590
|
}
|
|
11543
|
-
G2.__lichSp = sp.map((s, i) => ({ i, id: s.id, f: +s.f.toFixed(2), d: +s.d.toFixed(2), bo: s.bo, giant: s.giant || "", chu: s.chu || "", chu2: s.chu2 || "", st: s.st || "", ten: s.ten || "", tieu: s.tieu || "", khoa: s.khoa ? 1 : 0 }));
|
|
11591
|
+
G2.__lichSp = sp.map((s, i) => ({ i, id: s.id, yChu: s.yChu, coChu: s.coChu, f: +s.f.toFixed(2), d: +s.d.toFixed(2), bo: s.bo, giant: s.giant || "", chu: s.chu || "", chu2: s.chu2 || "", st: s.st || "", ten: s.ten || "", tieu: s.tieu || "", khoa: s.khoa ? 1 : 0 }));
|
|
11544
11592
|
}
|
|
11545
11593
|
bc = "B7 phat the";
|
|
11546
11594
|
const stTr = { n: 0 }, keuTr = {};
|
|
@@ -11565,7 +11613,7 @@ function lapCuongMe(o) {
|
|
|
11565
11613
|
bo: s.bo,
|
|
11566
11614
|
F: Fs,
|
|
11567
11615
|
s: s.bo === "card" ? sF(Fs, 0.38) : sF(Fs, 0.36),
|
|
11568
|
-
yDau: s.bo === "card" ? s.doc || s.tieuDoc ? 0.
|
|
11616
|
+
yDau: s.bo === "card" ? s.doc || s.tieuDoc ? 0.61 : 0.46 : s.hang || s.vat ? 0.5 : 0.36,
|
|
11569
11617
|
giant: s.giant,
|
|
11570
11618
|
tieu: s.tieu,
|
|
11571
11619
|
so: s.so,
|
|
@@ -11588,6 +11636,7 @@ function lapCuongMe(o) {
|
|
|
11588
11636
|
toiNen: s.toiNen,
|
|
11589
11637
|
do2: s.chu2 && /tốn|mất|mỏi|khổ|oan|sai|lỗi|đau|chậm|còng|dừng|đừng|cực/.test((String(s.giant || "") + " " + String(s.chu2)).toLocaleLowerCase("vi")) ? 1 : 0,
|
|
11590
11638
|
z: s.z,
|
|
11639
|
+
coChu: s.coChu,
|
|
11591
11640
|
phong: s.phong,
|
|
11592
11641
|
ra: s.ra,
|
|
11593
11642
|
chu2: s.chu2,
|
|
@@ -11782,7 +11831,29 @@ var mau6 = (HO2) => {
|
|
|
11782
11831
|
vao: { dich: "trang", kieu: "hienNgay", kieuNhan: "hienNgay", ms: 0, msNhan: 0 },
|
|
11783
11832
|
viTri: { x: 0.5, y: 0.72 },
|
|
11784
11833
|
ghiChu: "\u{1F7E1} 06/10 \u0111\xEAm: port template CUONGME (phi\xEAn m\xE1y kh\xE1c) \u2014 ch\u1EDD \u0111o + T\xFA xem.",
|
|
11785
|
-
doan: {
|
|
11834
|
+
doan: {
|
|
11835
|
+
khungTheoNguon: true,
|
|
11836
|
+
khoi: { mo: { ve: "cmNen", lap: (o) => lapCuongMe(o) } },
|
|
11837
|
+
lich: {},
|
|
11838
|
+
taiSan: {},
|
|
11839
|
+
nhac: [(() => {
|
|
11840
|
+
try {
|
|
11841
|
+
const v = localStorage.getItem("xvaiNhac");
|
|
11842
|
+
return v && ["vui", "tincay", "camxuc", "sangtrong", "dondap", "nhe"].includes(v) ? v : "vui";
|
|
11843
|
+
} catch (e) {
|
|
11844
|
+
return "vui";
|
|
11845
|
+
}
|
|
11846
|
+
})(), 0.2],
|
|
11847
|
+
/* 10/10 K2: tuỳ chọn xvaiNhac (mặc định giữ 'vui' 112 BPM; đối thủ ~81 BPM → thử 'nhe' 84 / 'sangtrong' 88) */
|
|
11848
|
+
nang: [],
|
|
11849
|
+
nhe: [],
|
|
11850
|
+
xeBao: false,
|
|
11851
|
+
am: false,
|
|
11852
|
+
nap,
|
|
11853
|
+
tieuDe: { phong: "Be Vietnam Pro", dam: 900 },
|
|
11854
|
+
phong: "Be Vietnam Pro",
|
|
11855
|
+
dam: 900
|
|
11856
|
+
}
|
|
11786
11857
|
}];
|
|
11787
11858
|
};
|
|
11788
11859
|
|
|
@@ -12884,7 +12955,13 @@ async function renderNhanh(ff, clips, files, audio, cards, nen2, options, paint,
|
|
|
12884
12955
|
gn.scale(m, m);
|
|
12885
12956
|
gn.translate(-X, -Y);
|
|
12886
12957
|
}
|
|
12887
|
-
|
|
12958
|
+
{
|
|
12959
|
+
const mau7 = fx0.mau || globalThis.__xvaiMau || {}, sg = +mau7.sang || +fx0.sang || 1, tp = +mau7.tuongPhan || 1, bh = +mau7.baoHoa || 1, am = +mau7.am || 0;
|
|
12960
|
+
const fS = (sg !== 1 ? "brightness(" + sg.toFixed(2) + ") " : "") + (tp !== 1 ? "contrast(" + tp.toFixed(2) + ") " : "") + (bh !== 1 ? "saturate(" + bh.toFixed(2) + ") " : "") + (am ? "sepia(" + Math.min(0.6, Math.abs(am)).toFixed(2) + ") " : "");
|
|
12961
|
+
if (fS) gn.filter = fS.trim();
|
|
12962
|
+
gn.drawImage(fr.canvas, ox, oy, sw * kz, sh * kz);
|
|
12963
|
+
if (fS) gn.filter = "none";
|
|
12964
|
+
}
|
|
12888
12965
|
if (xo) gn.restore();
|
|
12889
12966
|
if (dep && rang) {
|
|
12890
12967
|
const ts2 = c.trimStart + u;
|
|
@@ -16018,6 +16095,24 @@ function tuSp(duAn, sp, sua, daiS) {
|
|
|
16018
16095
|
for (const c of canh) if (c.ten) ts2.set(c.ten, { ten: c.ten, loai: "anh" });
|
|
16019
16096
|
return { v: 2, duAn, luc: Date.now(), nguon: { daiS: +daiS.toFixed(2) }, quyetDinh: { canh }, taiSan: [...ts2.values()] };
|
|
16020
16097
|
}
|
|
16098
|
+
function veSua(l) {
|
|
16099
|
+
const sua = {};
|
|
16100
|
+
const them = [];
|
|
16101
|
+
for (const c of l.quyetDinh.canh) {
|
|
16102
|
+
if (!c.khoa) continue;
|
|
16103
|
+
if (c.moi) {
|
|
16104
|
+
them.push({ f: c.f, d: c.d, bo: c.bo, giant: c.giant, chu: c.chu, ten: c.ten });
|
|
16105
|
+
continue;
|
|
16106
|
+
}
|
|
16107
|
+
const e = {};
|
|
16108
|
+
for (const k of ["giant", "chu", "chu2", "st", "ten", "tieu"]) if (c[k]) e[k] = c[k];
|
|
16109
|
+
e.d = c.d;
|
|
16110
|
+
e.f = c.f;
|
|
16111
|
+
sua[c.id] = e;
|
|
16112
|
+
}
|
|
16113
|
+
if (them.length) sua.them = them;
|
|
16114
|
+
return sua;
|
|
16115
|
+
}
|
|
16021
16116
|
|
|
16022
16117
|
// flow-src/utils.ts
|
|
16023
16118
|
var sanitizeFilename = (name) => {
|
|
@@ -18675,7 +18770,7 @@ var StudioEdit = ({ project, setProject, exporting, blob, onExport, onDownload,
|
|
|
18675
18770
|
W3.__mauPhuDe = mau7 ? sua ? mau7 + "-sua" : mau7 : "";
|
|
18676
18771
|
W3.__theoMauKhoi = !!(mau7 && layMau(mau7)?.doan?.khoi);
|
|
18677
18772
|
W3.__xuatNhanh = nhanh;
|
|
18678
|
-
setProject((c) => c ? { ...c, studioFx: { stabilize: fx.rung ? 3 : 0, beauty: fx.dep ? 2 : 0, voice: fx.tieng ? 1 : 0, teeth: fx.rang ? 1 : 0 } } : c);
|
|
18773
|
+
setProject((c) => c ? { ...c, studioFx: { ...c.studioFx || {}, stabilize: fx.rung ? 3 : 0, beauty: fx.dep ? 2 : 0, voice: fx.tieng ? 1 : 0, teeth: fx.rang ? 1 : 0 } } : c);
|
|
18679
18774
|
};
|
|
18680
18775
|
const lamPro = async () => {
|
|
18681
18776
|
let a = W3.__proApi;
|
|
@@ -18989,7 +19084,7 @@ async function napLoi(d) {
|
|
|
18989
19084
|
return "LOI: " + String(e && e.message || e).slice(0, 300);
|
|
18990
19085
|
}
|
|
18991
19086
|
}
|
|
18992
|
-
var LOI_URL = "https://cdn.jsdelivr.net/npm/xvai-loi@0.1.
|
|
19087
|
+
var LOI_URL = "https://cdn.jsdelivr.net/npm/xvai-loi@0.1.38/nap.js";
|
|
18993
19088
|
var TRONG_LOI = !!globalThis.__xvaiReact;
|
|
18994
19089
|
try {
|
|
18995
19090
|
if (!TRONG_LOI) setTimeout(() => {
|
|
@@ -19019,7 +19114,7 @@ function datCauLenh(a) {
|
|
|
19019
19114
|
on2 = true;
|
|
19020
19115
|
window.addEventListener("message", async (ev) => {
|
|
19021
19116
|
const d = ev.data;
|
|
19022
|
-
if (!d || d.
|
|
19117
|
+
if (!d || d.xvaiLoi100138 !== true) return;
|
|
19023
19118
|
const o = String(ev.origin || "");
|
|
19024
19119
|
if (!(o.indexOf("https://flow.google.com") === 0 || o.indexOf("https://labs.google") === 0)) return;
|
|
19025
19120
|
const tra = (kq) => {
|
|
@@ -19143,11 +19238,41 @@ var SuaLich = ({ ten, onDong }) => {
|
|
|
19143
19238
|
}
|
|
19144
19239
|
})();
|
|
19145
19240
|
}, [ten]);
|
|
19146
|
-
const
|
|
19147
|
-
|
|
19241
|
+
const lsHoan = useState([])[0], lsLam = useState([])[0];
|
|
19242
|
+
const [nHoan, setNHoan] = useState(0);
|
|
19243
|
+
const ghiHoan = (cu) => {
|
|
19244
|
+
const t = Date.now();
|
|
19245
|
+
if (lsHoan.length && t - (lsHoan[lsHoan.length - 1].t || 0) < 600) return;
|
|
19246
|
+
lsHoan.push({ sua: cu, t });
|
|
19247
|
+
if (lsHoan.length > 50) lsHoan.shift();
|
|
19248
|
+
lsLam.length = 0;
|
|
19249
|
+
setNHoan(lsHoan.length);
|
|
19250
|
+
};
|
|
19251
|
+
const apSua = (n) => {
|
|
19148
19252
|
setSua(n);
|
|
19149
19253
|
G.__lichSua = n;
|
|
19150
19254
|
};
|
|
19255
|
+
const hoanTac = () => {
|
|
19256
|
+
if (!lsHoan.length) return;
|
|
19257
|
+
const b = lsHoan.pop();
|
|
19258
|
+
lsLam.push({ sua, t: Date.now() });
|
|
19259
|
+
apSua(b.sua);
|
|
19260
|
+
setNHoan(lsHoan.length);
|
|
19261
|
+
setBao("Ho\xE0n t\xE1c (" + lsHoan.length + " b\u01B0\u1EDBc c\xF2n l\u1EA1i)");
|
|
19262
|
+
};
|
|
19263
|
+
const lamLai = () => {
|
|
19264
|
+
if (!lsLam.length) return;
|
|
19265
|
+
const b = lsLam.pop();
|
|
19266
|
+
lsHoan.push({ sua, t: Date.now() });
|
|
19267
|
+
apSua(b.sua);
|
|
19268
|
+
setNHoan(lsHoan.length);
|
|
19269
|
+
setBao("L\xE0m l\u1EA1i");
|
|
19270
|
+
};
|
|
19271
|
+
const dat = (i, k, v) => {
|
|
19272
|
+
ghiHoan(sua);
|
|
19273
|
+
const n = { ...sua, [i]: { ...sua[i] || {}, [k]: v } };
|
|
19274
|
+
apSua(n);
|
|
19275
|
+
};
|
|
19151
19276
|
const [ls, setLs] = useState([]);
|
|
19152
19277
|
const [them, setThem] = useState({ f: 0, d: 2, bo: "depth", giant: "", ten: "" });
|
|
19153
19278
|
useEffect(() => {
|
|
@@ -19174,8 +19299,82 @@ var SuaLich = ({ ten, onDong }) => {
|
|
|
19174
19299
|
setBao("\u0110\xE3 n\u1EA1p b\u1EA3n " + new Date(t).toTimeString().slice(0, 5) + " \xB7 b\u1EA5m V\u1EBD l\u1EA1i \u0111\u1EC3 \xE1p");
|
|
19175
19300
|
}
|
|
19176
19301
|
};
|
|
19302
|
+
const moDuAn = async (f2) => {
|
|
19303
|
+
if (!f2) return;
|
|
19304
|
+
try {
|
|
19305
|
+
const j = JSON.parse(await f2.text());
|
|
19306
|
+
const l = j && (j.lichV2 || (j.v === 2 && j.quyetDinh ? j : null));
|
|
19307
|
+
if (!l) {
|
|
19308
|
+
setBao("T\u1EC7p kh\xF4ng c\xF3 lichV2 (l\u01B0u b\u1EB1ng n\xFAt L\u01B0u d\u1EF1 \xE1n t\u1EEB 0.1.37)");
|
|
19309
|
+
return;
|
|
19310
|
+
}
|
|
19311
|
+
const n = veSua(l);
|
|
19312
|
+
setSua(n);
|
|
19313
|
+
G.__lichSua = n;
|
|
19314
|
+
await ghiDem("lichSua:" + ten, { sua: n });
|
|
19315
|
+
setBao("\u0110\xE3 m\u1EDF " + l.quyetDinh.canh.filter((c) => c.khoa).length + " c\u1EA3nh s\u1EEDa tay t\u1EEB " + f2.name + " \xB7 b\u1EA5m V\u1EBD l\u1EA1i \u0111\u1EC3 \xE1p");
|
|
19316
|
+
} catch (e) {
|
|
19317
|
+
setBao("Kh\xF4ng \u0111\u1ECDc \u0111\u01B0\u1EE3c t\u1EC7p: " + String(e && e.message || e).slice(0, 80));
|
|
19318
|
+
}
|
|
19319
|
+
};
|
|
19320
|
+
const taiTep = async (ten2, text2, mime) => {
|
|
19321
|
+
const base64 = btoa(unescape(encodeURIComponent(text2)));
|
|
19322
|
+
try {
|
|
19323
|
+
await Flow.download({ base64, mimeType: mime, filename: ten2 });
|
|
19324
|
+
setBao("\u0110\xE3 t\u1EA3i " + ten2 + " (" + Math.round(text2.length / 1024) + " KB)");
|
|
19325
|
+
} catch (e) {
|
|
19326
|
+
setBao("Kh\xF4ng t\u1EA3i \u0111\u01B0\u1EE3c: " + String(e && e.message || e).slice(0, 80));
|
|
19327
|
+
}
|
|
19328
|
+
};
|
|
19329
|
+
const taiLich = () => {
|
|
19330
|
+
const p = G.__loiApp && G.__loiApp.p;
|
|
19331
|
+
const tl = p && p.timeline || [];
|
|
19332
|
+
const dai2 = tl.reduce((a, c) => a + Math.max(0, (+c.trimEnd || 0) - (+c.trimStart || 0)), 0);
|
|
19333
|
+
const l = tuSp(ten, G.__lichSp || [], sua, dai2);
|
|
19334
|
+
taiTep("lich-" + ten.replace(/[^\w-]+/g, "_").slice(0, 40) + ".json", JSON.stringify(l, null, 1), "application/json");
|
|
19335
|
+
};
|
|
19336
|
+
const taiSrt = () => {
|
|
19337
|
+
const p = G.__loiApp && G.__loiApp.p;
|
|
19338
|
+
const cues = [];
|
|
19339
|
+
for (const sc of p && p.timeline || []) for (const m of sc.text_moments || []) if (m && m.kind === "sub" && m.text) cues.push({ t0: +m.t0 - (+sc.trimStart || 0), t1: +m.t1 - (+sc.trimStart || 0), text: String(m.text) });
|
|
19340
|
+
cues.sort((a, b) => a.t0 - b.t0);
|
|
19341
|
+
const hh = (t) => {
|
|
19342
|
+
t = Math.max(0, t);
|
|
19343
|
+
const h = Math.floor(t / 3600), m = Math.floor(t % 3600 / 60), s2 = Math.floor(t % 60), ms = Math.round((t - Math.floor(t)) * 1e3);
|
|
19344
|
+
return String(h).padStart(2, "0") + ":" + String(m).padStart(2, "0") + ":" + String(s2).padStart(2, "0") + "," + String(ms).padStart(3, "0");
|
|
19345
|
+
};
|
|
19346
|
+
if (!cues.length) {
|
|
19347
|
+
setBao("Ch\u01B0a c\xF3 ph\u1EE5 \u0111\u1EC1 (ch\u1EA1y L\xE0m pro tr\u01B0\u1EDBc)");
|
|
19348
|
+
return;
|
|
19349
|
+
}
|
|
19350
|
+
taiTep("phu-de-" + ten.replace(/[^\w-]+/g, "_").slice(0, 40) + ".srt", cues.map((c, i) => i + 1 + "\n" + hh(c.t0) + " --> " + hh(c.t1) + "\n" + c.text + "\n").join("\n"), "text/plain");
|
|
19351
|
+
};
|
|
19352
|
+
const fx0 = G.__loiApp && G.__loiApp.p && G.__loiApp.p.studioFx || {};
|
|
19353
|
+
let m0 = fx0.mau || G.__xvaiMau || {};
|
|
19354
|
+
try {
|
|
19355
|
+
if (!fx0.mau && !G.__xvaiMau) {
|
|
19356
|
+
const t = localStorage.getItem("xvaiMau");
|
|
19357
|
+
if (t) m0 = JSON.parse(t);
|
|
19358
|
+
}
|
|
19359
|
+
} catch (e) {
|
|
19360
|
+
}
|
|
19361
|
+
const [fx, setFx] = useState({ sang: +m0.sang || +fx0.sang || 1, tuongPhan: +m0.tuongPhan || 1, baoHoa: +m0.baoHoa || 1, am: +m0.am || 0 });
|
|
19362
|
+
const datFx = (k, v) => {
|
|
19363
|
+
const n = { ...fx, [k]: v };
|
|
19364
|
+
setFx(n);
|
|
19365
|
+
G.__xvaiMau = n;
|
|
19366
|
+
try {
|
|
19367
|
+
localStorage.setItem("xvaiMau", JSON.stringify(n));
|
|
19368
|
+
} catch (e) {
|
|
19369
|
+
}
|
|
19370
|
+
if (typeof G.__loiSetP === "function") {
|
|
19371
|
+
G.__loiSetP((c) => c ? { ...c, studioFx: { ...c.studioFx || {}, mau: n } } : c);
|
|
19372
|
+
setBao("M\xE0u c\u1EA3 b\xE0i: s\xE1ng " + (+n.sang).toFixed(2) + " \xB7 t\u01B0\u01A1ng ph\u1EA3n " + (+n.tuongPhan).toFixed(2) + " \xB7 t\u01B0\u01A1i " + (+n.baoHoa).toFixed(2) + " \xB7 \u1EA5m " + (+n.am).toFixed(2) + " \u2192 b\u1EA5m Xu\u1EA5t l\u1EA1i");
|
|
19373
|
+
}
|
|
19374
|
+
};
|
|
19177
19375
|
const themCanh = () => {
|
|
19178
19376
|
if (!(them.d > 0.3)) return;
|
|
19377
|
+
ghiHoan(sua);
|
|
19179
19378
|
const n = { ...sua, them: [...sua.them || [], { ...them, f: +them.f, d: +them.d }] };
|
|
19180
19379
|
setSua(n);
|
|
19181
19380
|
G.__lichSua = n;
|
|
@@ -19191,25 +19390,29 @@ var SuaLich = ({ ten, onDong }) => {
|
|
|
19191
19390
|
} else setBao("Ch\u01B0a c\xF3 L\xE0m pro (n\u1EA1p video + ch\u1ECDn m\u1EABu tr\u01B0\u1EDBc)");
|
|
19192
19391
|
};
|
|
19193
19392
|
const xoaHet = async () => {
|
|
19393
|
+
ghiHoan(sua);
|
|
19194
19394
|
setSua({});
|
|
19195
19395
|
G.__lichSua = null;
|
|
19196
19396
|
await ghiDem("lichSua:" + ten, { sua: {} });
|
|
19197
19397
|
setBao("\u0110\xE3 b\u1ECF m\u1ECDi s\u1EEDa tay");
|
|
19198
19398
|
};
|
|
19199
19399
|
if (!ds2.length) return /* @__PURE__ */ shim_react_default.createElement("div", { className: "rounded-xl border border-[#2C4A73] p-4 text-[12px]" }, 'Ch\u01B0a c\xF3 l\u1ECBch d\u1EF1ng \u2014 b\u1EA5m "L\xE0m pro" m\u1ED9t l\u1EA7n r\u1ED3i quay l\u1EA1i \u0111\xE2y. ', /* @__PURE__ */ shim_react_default.createElement("button", { className: nut3, onClick: onDong }, "\u0110\xF3ng"));
|
|
19200
|
-
return /* @__PURE__ */ shim_react_default.createElement("div", { className: "rounded-xl border border-[#F6D178]/60 p-3 text-[12px] bg-[#0E2240]" }, /* @__PURE__ */ shim_react_default.createElement("div", { className: "flex items-center gap-2 mb-2" }, /* @__PURE__ */ shim_react_default.createElement("span", { className: "font-black text-[#F6D178]" }, "S\u1EECA L\u1ECACH D\u1EF0NG \xB7 ", ds2.length, " c\u1EA3nh"), /* @__PURE__ */ shim_react_default.createElement("span", { className: "text-[#A2B2C9] flex-1" }, bao), /* @__PURE__ */ shim_react_default.createElement("button", { className: nut3, onClick: luu }, "L\u01B0u"), /* @__PURE__ */ shim_react_default.createElement("button", { className: nut3 + " bg-[#F6D178] text-[#122238]", onClick: veLai }, "V\u1EBD l\u1EA1i"), /* @__PURE__ */ shim_react_default.createElement("button", { className: nut3, onClick: xoaHet }, "B\u1ECF s\u1EEDa"), /* @__PURE__ */ shim_react_default.createElement("button", { className: nut3, onClick: () => {
|
|
19400
|
+
return /* @__PURE__ */ shim_react_default.createElement("div", { className: "rounded-xl border border-[#F6D178]/60 p-3 text-[12px] bg-[#0E2240]" }, /* @__PURE__ */ shim_react_default.createElement("div", { className: "flex items-center gap-2 mb-2" }, /* @__PURE__ */ shim_react_default.createElement("span", { className: "font-black text-[#F6D178]" }, "S\u1EECA L\u1ECACH D\u1EF0NG \xB7 ", ds2.length, " c\u1EA3nh"), /* @__PURE__ */ shim_react_default.createElement("span", { className: "text-[#A2B2C9] flex-1" }, bao), /* @__PURE__ */ shim_react_default.createElement("button", { className: nut3, onClick: hoanTac, disabled: !nHoan, title: "Ho\xE0n t\xE1c (Ctrl+Z)" }, "\u21B6 ", nHoan || ""), /* @__PURE__ */ shim_react_default.createElement("button", { className: nut3, onClick: lamLai, title: "L\xE0m l\u1EA1i" }, "\u21B7"), /* @__PURE__ */ shim_react_default.createElement("button", { className: nut3, onClick: luu }, "L\u01B0u"), /* @__PURE__ */ shim_react_default.createElement("button", { className: nut3 + " bg-[#F6D178] text-[#122238]", onClick: veLai }, "V\u1EBD l\u1EA1i"), /* @__PURE__ */ shim_react_default.createElement("button", { className: nut3, onClick: xoaHet }, "B\u1ECF s\u1EEDa"), /* @__PURE__ */ shim_react_default.createElement("button", { className: nut3, onClick: () => {
|
|
19201
19401
|
setDs(G.__lichSp || []);
|
|
19202
19402
|
} }, "N\u1EA1p l\u1EA1i"), /* @__PURE__ */ shim_react_default.createElement("button", { className: nut3, onClick: onDong }, "\u0110\xF3ng"), ls.length ? /* @__PURE__ */ shim_react_default.createElement("select", { className: "bg-[#0B1A2D] border border-[#2C4A73] rounded px-1 text-[11px]", value: "", onChange: (ev) => {
|
|
19203
19403
|
if (ev.target.value) napBan(+ev.target.value);
|
|
19204
|
-
} }, /* @__PURE__ */ shim_react_default.createElement("option", { value: "" }, "b\u1EA3n c\u0169\u2026"), ls.map((t) => /* @__PURE__ */ shim_react_default.createElement("option", { key: t, value: t }, new Date(t).toLocaleString("vi")))) : null), /* @__PURE__ */ shim_react_default.createElement("div", { className: "flex items-center gap-
|
|
19404
|
+
} }, /* @__PURE__ */ shim_react_default.createElement("option", { value: "" }, "b\u1EA3n c\u0169\u2026"), ls.map((t) => /* @__PURE__ */ shim_react_default.createElement("option", { key: t, value: t }, new Date(t).toLocaleString("vi")))) : null), /* @__PURE__ */ shim_react_default.createElement("div", { className: "flex items-center gap-2 mb-2 text-[11px] flex-wrap" }, /* @__PURE__ */ shim_react_default.createElement("span", { className: "text-[#A2B2C9]" }, "M\xE0u c\u1EA3 b\xE0i:"), /* @__PURE__ */ shim_react_default.createElement("label", { className: "flex items-center gap-1" }, "s\xE1ng ", /* @__PURE__ */ shim_react_default.createElement("input", { type: "range", min: "0.7", max: "1.4", step: "0.05", value: fx.sang, onChange: (ev) => datFx("sang", +ev.target.value), className: "w-20" }), " ", (+fx.sang).toFixed(2)), /* @__PURE__ */ shim_react_default.createElement("label", { className: "flex items-center gap-1" }, "t\u01B0\u01A1ng ph\u1EA3n ", /* @__PURE__ */ shim_react_default.createElement("input", { type: "range", min: "0.7", max: "1.4", step: "0.05", value: fx.tuongPhan, onChange: (ev) => datFx("tuongPhan", +ev.target.value), className: "w-20" }), " ", (+fx.tuongPhan).toFixed(2)), /* @__PURE__ */ shim_react_default.createElement("label", { className: "flex items-center gap-1" }, "t\u01B0\u01A1i ", /* @__PURE__ */ shim_react_default.createElement("input", { type: "range", min: "0.5", max: "1.6", step: "0.05", value: fx.baoHoa, onChange: (ev) => datFx("baoHoa", +ev.target.value), className: "w-20" }), " ", (+fx.baoHoa).toFixed(2)), /* @__PURE__ */ shim_react_default.createElement("label", { className: "flex items-center gap-1" }, "\u1EA5m ", /* @__PURE__ */ shim_react_default.createElement("input", { type: "range", min: "0", max: "0.4", step: "0.05", value: fx.am, onChange: (ev) => datFx("am", +ev.target.value), className: "w-20" }), " ", (+fx.am).toFixed(2)), /* @__PURE__ */ shim_react_default.createElement("button", { className: nut3, onClick: () => {
|
|
19405
|
+
setFx({ sang: 1, tuongPhan: 1, baoHoa: 1, am: 0 });
|
|
19406
|
+
datFx("sang", 1);
|
|
19407
|
+
} }, "V\u1EC1 g\u1ED1c"), /* @__PURE__ */ shim_react_default.createElement("span", { className: "text-[#A2B2C9]" }, "(ch\u1ED1ng rung \xB7 l\xE0m \u0111\u1EB9p \xB7 ti\u1EBFng \xB7 r\u0103ng: 4 c\xF4ng t\u1EAFc \u1EDF b\u1EA3ng L\xE0m pro)")), /* @__PURE__ */ shim_react_default.createElement("div", { className: "flex items-center gap-1 mb-2 text-[11px] flex-wrap" }, /* @__PURE__ */ shim_react_default.createElement("span", { className: "text-[#A2B2C9]" }, "Th\xEAm c\u1EA3nh:"), /* @__PURE__ */ shim_react_default.createElement("input", { className: "w-12 bg-[#0B1A2D] border border-[#2C4A73] rounded px-1", type: "number", step: "0.1", value: them.f, onChange: (ev) => setThem({ ...them, f: ev.target.value }), title: "gi\xE2y \u0111\u1EA7u" }), /* @__PURE__ */ shim_react_default.createElement("input", { className: "w-12 bg-[#0B1A2D] border border-[#2C4A73] rounded px-1", type: "number", step: "0.1", value: them.d, onChange: (ev) => setThem({ ...them, d: ev.target.value }), title: "d\xE0i (s)" }), /* @__PURE__ */ shim_react_default.createElement("select", { className: "bg-[#0B1A2D] border border-[#2C4A73] rounded px-1", value: them.bo, onChange: (ev) => setThem({ ...them, bo: ev.target.value }) }, /* @__PURE__ */ shim_react_default.createElement("option", { value: "depth" }, "ch\u1EEF nh\u1EA5n"), /* @__PURE__ */ shim_react_default.createElement("option", { value: "anh" }, "\u1EA3nh to\xE0n khung"), /* @__PURE__ */ shim_react_default.createElement("option", { value: "cut" }, "c\u1EAFt ch\u1EEF"), /* @__PURE__ */ shim_react_default.createElement("option", { value: "tron" }, "\xF4 tr\xF2n")), /* @__PURE__ */ shim_react_default.createElement("input", { className: "w-28 bg-[#0B1A2D] border border-[#2C4A73] rounded px-1", placeholder: "ch\u1EEF nh\u1EA5n", value: them.giant, onChange: (ev) => setThem({ ...them, giant: ev.target.value }) }), /* @__PURE__ */ shim_react_default.createElement("input", { className: "w-24 bg-[#0B1A2D] border border-[#2C4A73] rounded px-1", placeholder: "\u1EA3nh: trang:\u2026", value: them.ten, onChange: (ev) => setThem({ ...them, ten: ev.target.value }) }), /* @__PURE__ */ shim_react_default.createElement("button", { className: nut3, onClick: themCanh }, "+ Th\xEAm"), /* @__PURE__ */ shim_react_default.createElement("button", { className: nut3, onClick: taiLich }, "T\u1EA3i l\u1ECBch .json"), /* @__PURE__ */ shim_react_default.createElement("button", { className: nut3, onClick: taiSrt, title: "b\u1EA3n \u0111\u1EA7u: ch\u01B0a tr\u1EEB \u0111o\u1EA1n l\u1EB7ng b\u1ECB c\u1EAFt" }, "T\u1EA3i SRT"), /* @__PURE__ */ shim_react_default.createElement("label", { className: nut3 + " cursor-pointer" }, "M\u1EDF d\u1EF1 \xE1n .json", /* @__PURE__ */ shim_react_default.createElement("input", { type: "file", accept: ".json,application/json", className: "hidden", onChange: (ev) => moDuAn(ev.target.files && ev.target.files[0]) })), (sua.them || []).length ? /* @__PURE__ */ shim_react_default.createElement("span", { className: "text-[#F6D178]" }, (sua.them || []).length, " c\u1EA3nh th\xEAm") : null), /* @__PURE__ */ shim_react_default.createElement("datalist", { id: "xvai-kho-anh" }, dsTenTaiSan().map((t) => /* @__PURE__ */ shim_react_default.createElement("option", { key: t, value: t }))), /* @__PURE__ */ shim_react_default.createElement("div", { className: "max-h-[60vh] overflow-auto" }, /* @__PURE__ */ shim_react_default.createElement("table", { className: "w-full text-[11px]" }, /* @__PURE__ */ shim_react_default.createElement("thead", null, /* @__PURE__ */ shim_react_default.createElement("tr", { className: "text-[#A2B2C9]" }, /* @__PURE__ */ shim_react_default.createElement("th", { className: "text-left" }, "#"), /* @__PURE__ */ shim_react_default.createElement("th", { className: "text-left" }, "gi\xE2y"), /* @__PURE__ */ shim_react_default.createElement("th", { className: "text-left" }, "b\u1ED1 c\u1EE5c"), /* @__PURE__ */ shim_react_default.createElement("th", { className: "text-left" }, "\u0111\u1EA7u/d\xE0i (s)"), /* @__PURE__ */ shim_react_default.createElement("th", { className: "text-left" }, "ch\u1EEF nh\u1EA5n"), /* @__PURE__ */ shim_react_default.createElement("th", { className: "text-left" }, "y / c\u1EE1"), /* @__PURE__ */ shim_react_default.createElement("th", { className: "text-left" }, "ch\u1EEF ph\u1EE5"), /* @__PURE__ */ shim_react_default.createElement("th", { className: "text-left" }, "icon"), /* @__PURE__ */ shim_react_default.createElement("th", { className: "text-left" }, "\u1EA3nh (t\xEAn kho)"), /* @__PURE__ */ shim_react_default.createElement("th", null, "xo\xE1"))), /* @__PURE__ */ shim_react_default.createElement("tbody", null, ds2.map((s) => {
|
|
19205
19408
|
const e = sua[s.id] || sua[s.i] || {};
|
|
19206
19409
|
const v = (k) => (typeof e[k] === "string" ? e[k] : s[k]) || "";
|
|
19207
|
-
return /* @__PURE__ */ shim_react_default.createElement("tr", { key: s.id || s.i, className: e.xoa ? "opacity-40" : s.khoa ? "bg-[#1E3A5F]/40" : "" }, /* @__PURE__ */ shim_react_default.createElement("td", null, s.i), /* @__PURE__ */ shim_react_default.createElement("td", null, s.f.toFixed(1), "\u2013", (s.f + s.d).toFixed(1)), /* @__PURE__ */ shim_react_default.createElement("td", null, s.bo), /* @__PURE__ */ shim_react_default.createElement("td", { className: "whitespace-nowrap" }, /* @__PURE__ */ shim_react_default.createElement("input", { className: "w-12 bg-[#0B1A2D] border border-[#2C4A73] rounded px-1", value: typeof e.f === "number" ? e.f : s.f, onChange: (ev) => dat(s.id || String(s.i), "f", +ev.target.value), type: "number", step: "0.1" }), " ", /* @__PURE__ */ shim_react_default.createElement("input", { className: "w-12 bg-[#0B1A2D] border border-[#2C4A73] rounded px-1", value: typeof e.d === "number" ? e.d : s.d, onChange: (ev) => dat(s.id || String(s.i), "d", +ev.target.value), type: "number", step: "0.1", min: "0.4" })), /* @__PURE__ */ shim_react_default.createElement("td", null, /* @__PURE__ */ shim_react_default.createElement("input", { className: "w-full bg-[#0B1A2D] border border-[#2C4A73] rounded px-1", value: v("giant"), onChange: (ev) => dat(s.id || String(s.i), "giant", ev.target.value) })), /* @__PURE__ */ shim_react_default.createElement("td", null, /* @__PURE__ */ shim_react_default.createElement("input", { className: "w-full bg-[#0B1A2D] border border-[#2C4A73] rounded px-1", value: v("chu2") || v("chu"), onChange: (ev) => dat(s.id || String(s.i), s.chu2 || !s.chu ? "chu2" : "chu", ev.target.value) })), /* @__PURE__ */ shim_react_default.createElement("td", null, /* @__PURE__ */ shim_react_default.createElement("input", { className: "w-20 bg-[#0B1A2D] border border-[#2C4A73] rounded px-1", value: v("st"), onChange: (ev) => dat(s.id || String(s.i), "st", ev.target.value), placeholder: "tich/luu\u2026" })), /* @__PURE__ */ shim_react_default.createElement("td", null, /* @__PURE__ */ shim_react_default.createElement("input", { className: "w-24 bg-[#0B1A2D] border border-[#2C4A73] rounded px-1", value: v("ten"), onChange: (ev) => dat(s.id || String(s.i), "ten", ev.target.value), placeholder: "trang:\u2026 / anh:\u2026" })), /* @__PURE__ */ shim_react_default.createElement("td", { className: "text-center" }, /* @__PURE__ */ shim_react_default.createElement("input", { type: "checkbox", checked: !!e.xoa, onChange: (ev) => dat(s.id || String(s.i), "xoa", ev.target.checked ? 1 : 0) })));
|
|
19410
|
+
return /* @__PURE__ */ shim_react_default.createElement("tr", { key: s.id || s.i, className: e.xoa ? "opacity-40" : s.khoa ? "bg-[#1E3A5F]/40" : "" }, /* @__PURE__ */ shim_react_default.createElement("td", null, s.i), /* @__PURE__ */ shim_react_default.createElement("td", null, s.f.toFixed(1), "\u2013", (s.f + s.d).toFixed(1)), /* @__PURE__ */ shim_react_default.createElement("td", null, s.bo), /* @__PURE__ */ shim_react_default.createElement("td", { className: "whitespace-nowrap" }, /* @__PURE__ */ shim_react_default.createElement("input", { className: "w-12 bg-[#0B1A2D] border border-[#2C4A73] rounded px-1", value: typeof e.f === "number" ? e.f : s.f, onChange: (ev) => dat(s.id || String(s.i), "f", +ev.target.value), type: "number", step: "0.1" }), " ", /* @__PURE__ */ shim_react_default.createElement("input", { className: "w-12 bg-[#0B1A2D] border border-[#2C4A73] rounded px-1", value: typeof e.d === "number" ? e.d : s.d, onChange: (ev) => dat(s.id || String(s.i), "d", +ev.target.value), type: "number", step: "0.1", min: "0.4" })), /* @__PURE__ */ shim_react_default.createElement("td", null, /* @__PURE__ */ shim_react_default.createElement("input", { className: "w-full bg-[#0B1A2D] border border-[#2C4A73] rounded px-1", value: v("giant"), onChange: (ev) => dat(s.id || String(s.i), "giant", ev.target.value) })), /* @__PURE__ */ shim_react_default.createElement("td", { className: "whitespace-nowrap" }, /* @__PURE__ */ shim_react_default.createElement("input", { className: "w-12 bg-[#0B1A2D] border border-[#2C4A73] rounded px-1", type: "number", step: "0.02", min: "0.05", max: "0.6", placeholder: "y", value: typeof e.yChu === "number" ? e.yChu : s.yChu ?? "", onChange: (ev) => dat(s.id || String(s.i), "yChu", +ev.target.value), title: "v\u1ECB tr\xED ch\u1EEF nh\u1EA5n (0,05 tr\xEAn \u2013 0,6 d\u01B0\u1EDBi)" }), " ", /* @__PURE__ */ shim_react_default.createElement("input", { className: "w-12 bg-[#0B1A2D] border border-[#2C4A73] rounded px-1", type: "number", step: "0.1", min: "0.5", max: "1.6", placeholder: "\xD71", value: typeof e.coChu === "number" ? e.coChu : s.coChu ?? "", onChange: (ev) => dat(s.id || String(s.i), "coChu", +ev.target.value), title: "c\u1EE1 ch\u1EEF nh\u1EA5n \xD70,5\u20131,6" })), /* @__PURE__ */ shim_react_default.createElement("td", null, /* @__PURE__ */ shim_react_default.createElement("input", { className: "w-full bg-[#0B1A2D] border border-[#2C4A73] rounded px-1", value: v("chu2") || v("chu"), onChange: (ev) => dat(s.id || String(s.i), s.chu2 || !s.chu ? "chu2" : "chu", ev.target.value) })), /* @__PURE__ */ shim_react_default.createElement("td", null, /* @__PURE__ */ shim_react_default.createElement("input", { className: "w-20 bg-[#0B1A2D] border border-[#2C4A73] rounded px-1", value: v("st"), onChange: (ev) => dat(s.id || String(s.i), "st", ev.target.value), placeholder: "tich/luu\u2026" })), /* @__PURE__ */ shim_react_default.createElement("td", null, /* @__PURE__ */ shim_react_default.createElement("input", { className: "w-24 bg-[#0B1A2D] border border-[#2C4A73] rounded px-1", list: "xvai-kho-anh", value: v("ten"), onChange: (ev) => dat(s.id || String(s.i), "ten", ev.target.value), placeholder: "trang:\u2026 / anh:\u2026" })), /* @__PURE__ */ shim_react_default.createElement("td", { className: "text-center" }, /* @__PURE__ */ shim_react_default.createElement("input", { type: "checkbox", checked: !!e.xoa, onChange: (ev) => dat(s.id || String(s.i), "xoa", ev.target.checked ? 1 : 0) })));
|
|
19208
19411
|
})))), /* @__PURE__ */ shim_react_default.createElement("div", { className: "text-[#A2B2C9] mt-2" }, "Ch\u1EEF nh\u1EA5n xu\u1ED1ng d\xF2ng: g\xF5 \\n. Icon: tich, luu, chuot, sao, tim, dong-ho\u2026 (t\xEAn trong veSticker). S\u1EEDa xong b\u1EA5m V\u1EBD l\u1EA1i (~2\u20135 ph\xFAt)."));
|
|
19209
19412
|
};
|
|
19210
19413
|
|
|
19211
19414
|
// loi/vo-flow.tsx
|
|
19212
|
-
var PHIEN_BAN = "loi-
|
|
19415
|
+
var PHIEN_BAN = "loi-1010N";
|
|
19213
19416
|
var TRONG = () => migrateProject({ id: crypto.randomUUID(), name: "D\u1EF1 \xE1n m\u1EDBi", scenes: [], timeline: [], images: [null, null, null] });
|
|
19214
19417
|
var nut4 = "px-3 py-1.5 rounded-lg border border-[#2C4A73] text-[11px] font-bold text-[#A2B2C9] hover:text-[#F6D178] hover:border-[#F6D178]/60";
|
|
19215
19418
|
var Vo = () => {
|
|
@@ -19227,6 +19430,7 @@ var Vo = () => {
|
|
|
19227
19430
|
setP(moi);
|
|
19228
19431
|
};
|
|
19229
19432
|
useEffect(() => {
|
|
19433
|
+
window.__loiSetP = setP;
|
|
19230
19434
|
datCauLenh({ project: p, setProject: setP, exporting: ex, blob: b, xuat, dongXuat: () => setEx(null), tai, luuJson: () => handleExportProject(p, toast) });
|
|
19231
19435
|
});
|
|
19232
19436
|
window.__loiApp = { p, ex, b, phienBan: PHIEN_BAN };
|