xvai-loi 0.1.37 → 0.1.38
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 +166 -20
package/co.txt
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
xvaiLoi100118
|
package/package.json
CHANGED
package/xvai-loi.js
CHANGED
|
@@ -9586,6 +9586,11 @@ function phongK(g, im, W4, H2, F, s) {
|
|
|
9586
9586
|
g.drawImage(im, 0, 0, W4, H2);
|
|
9587
9587
|
g.restore();
|
|
9588
9588
|
}
|
|
9589
|
+
function tfE(g, W4, H2, F, s, yDau, k, zk = 1) {
|
|
9590
|
+
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;
|
|
9591
|
+
g.translate(W4 / 2 - cxe * W4 * se, ye * H2 - top * H2 * se);
|
|
9592
|
+
g.scale(se, se);
|
|
9593
|
+
}
|
|
9589
9594
|
function tf(g, W4, H2, F, s, yDau) {
|
|
9590
9595
|
const cx = F ? (F[0] + F[2]) / 2 : 0.5, top = F ? F[1] : 0.2;
|
|
9591
9596
|
g.translate(W4 / 2 - cx * W4 * s, yDau * H2 - top * H2 * s);
|
|
@@ -9824,9 +9829,10 @@ dangKy("cmNen", (g, d, tuoi, W4, H2, nen2, _s, dai2) => {
|
|
|
9824
9829
|
if (a <= 0) return;
|
|
9825
9830
|
g.save();
|
|
9826
9831
|
g.globalAlpha = a;
|
|
9832
|
+
const kS = 1;
|
|
9827
9833
|
const p = (d.bo === "card" || d.bo === "depth" || d.bo === "cut" && !d.anNguoi) && nen2 ? nguoi(nen2, W4, H2) : null;
|
|
9828
9834
|
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.
|
|
9835
|
+
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
9836
|
if (d.bo === "card" || d.bo === "cut" || d.bo === "toi") {
|
|
9831
9837
|
g.drawImage(nenCam(W4, H2, d.bo === "toi" || !!d.toiNen), 0, 0);
|
|
9832
9838
|
if (d.bo === "card" && nen2) {
|
|
@@ -9844,7 +9850,7 @@ dangKy("cmNen", (g, d, tuoi, W4, H2, nen2, _s, dai2) => {
|
|
|
9844
9850
|
g.save();
|
|
9845
9851
|
bo(g, x, y, w, h, r);
|
|
9846
9852
|
g.clip();
|
|
9847
|
-
|
|
9853
|
+
tfE(g, W4, H2, F, s, d.yDau ?? 0.42, kS);
|
|
9848
9854
|
g.drawImage(nen2, 0, 0, W4, H2);
|
|
9849
9855
|
g.restore();
|
|
9850
9856
|
g.save();
|
|
@@ -9855,7 +9861,7 @@ dangKy("cmNen", (g, d, tuoi, W4, H2, nen2, _s, dai2) => {
|
|
|
9855
9861
|
g.restore();
|
|
9856
9862
|
if (p) {
|
|
9857
9863
|
g.save();
|
|
9858
|
-
|
|
9864
|
+
tfE(g, W4, H2, F, s, d.yDau ?? 0.42, kS);
|
|
9859
9865
|
g.drawImage(p, 0, 0, W4, H2);
|
|
9860
9866
|
g.restore();
|
|
9861
9867
|
}
|
|
@@ -9863,7 +9869,17 @@ dangKy("cmNen", (g, d, tuoi, W4, H2, nen2, _s, dai2) => {
|
|
|
9863
9869
|
} else if (d.bo === "cut" && p && !d.anNguoi) {
|
|
9864
9870
|
g.save();
|
|
9865
9871
|
g.translate(ox, oy);
|
|
9866
|
-
|
|
9872
|
+
tfE(
|
|
9873
|
+
g,
|
|
9874
|
+
W4,
|
|
9875
|
+
H2,
|
|
9876
|
+
F,
|
|
9877
|
+
d.s || 1,
|
|
9878
|
+
d.yDau ?? 0.36,
|
|
9879
|
+
kS,
|
|
9880
|
+
zk
|
|
9881
|
+
/* 09/10 lát 2 ⑧: phóng chồng */
|
|
9882
|
+
);
|
|
9867
9883
|
g.drawImage(p, 0, 0, W4, H2);
|
|
9868
9884
|
g.restore();
|
|
9869
9885
|
}
|
|
@@ -9883,8 +9899,8 @@ dangKy("cmNen", (g, d, tuoi, W4, H2, nen2, _s, dai2) => {
|
|
|
9883
9899
|
tf(c, W4, H2, F, sb * 1.15, 0.45);
|
|
9884
9900
|
c.drawImage(nen2, 0, 0, W4, H2);
|
|
9885
9901
|
}, Math.round(0.012 * W4), "brightness(0.8)");
|
|
9886
|
-
const kz = eOut(Math.min(1, tuoi / 0.
|
|
9887
|
-
|
|
9902
|
+
const kz = eOut(Math.min(1, tuoi / 0.5));
|
|
9903
|
+
tfE(g, W4, H2, F, (d.s || 1.05) * (1 - 0.3 * kz), 0.5 + 0.015 * kz, kS);
|
|
9888
9904
|
g.drawImage(nen2, 0, 0, W4, H2);
|
|
9889
9905
|
}
|
|
9890
9906
|
g.restore();
|
|
@@ -9951,12 +9967,12 @@ dangKy("cmNen", (g, d, tuoi, W4, H2, nen2, _s, dai2) => {
|
|
|
9951
9967
|
g.restore();
|
|
9952
9968
|
}
|
|
9953
9969
|
if (d.bo === "depth") {
|
|
9954
|
-
chu2(g, d.giant, W4 / 2, (d.yChu ?? 0.24) * H2 + (d.z ? 0 : (1 - ka) * 70 * H2 / 1920), 190 * H2 / 1920, "giant", d.z ? 1 : kep12(tuoi / 0.2), 0.84 * W4);
|
|
9970
|
+
chu2(g, d.giant, W4 / 2, (d.yChu ?? 0.24) * 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
9971
|
if (p) {
|
|
9956
9972
|
if (zk > 1.001) phongK(g, p, W4, H2, F, zk);
|
|
9957
9973
|
else g.drawImage(p, 0, 0, W4, H2);
|
|
9958
9974
|
}
|
|
9959
|
-
} else if (d.giant) chu2(g, d.giant, W4 / 2, (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) * H2 / 1920, d.cam ? "cam" : d.do ? "do" : "kw", kep12(tuoi / 0.06), 0.9 * W4);
|
|
9975
|
+
} 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);
|
|
9960
9976
|
if (d.chu2 && !(d.bo === "depth" && /\n/.test(String(d.giant || "")))) chu2(g, d.chu2, W4 / 2, (d.bo === "toi" ? 0.4 : d.bo === "depth" ? (d.yChu ?? 0.24) + 0.02 : d.bo === "tron" ? 0.25 : 0.2) * H2 + (/\n/.test(String(d.giant || "")) ? 290 : 150) * 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
9977
|
const vt = d.v3 && taiSan(d.v3), dl = String(d.giant || "").indexOf(String.fromCharCode(10)) >= 0;
|
|
9962
9978
|
if (vt) {
|
|
@@ -10617,6 +10633,14 @@ function lapCuongMe(o) {
|
|
|
10617
10633
|
const sp = [];
|
|
10618
10634
|
let ctxSt = "";
|
|
10619
10635
|
const IC = { tien: "xu", dongho: "dongho", canhbao: "canh", tich: "tich", bieudo: "bieu", tim: "tim", khong: "none" };
|
|
10636
|
+
const kTram = () => {
|
|
10637
|
+
try {
|
|
10638
|
+
const v = +(localStorage.getItem("xvaiTramDai") || 1);
|
|
10639
|
+
return v >= 1 && v <= 1.6 ? v : 1;
|
|
10640
|
+
} catch (e) {
|
|
10641
|
+
return 1;
|
|
10642
|
+
}
|
|
10643
|
+
};
|
|
10620
10644
|
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
10645
|
const ung = [], thuB = [], DOI_CHU = 2, minD = (d0) => Math.max(1.2, 0.6 * d0);
|
|
10622
10646
|
const de = (f0, d0, x, doi = 0, ham) => {
|
|
@@ -10825,7 +10849,7 @@ function lapCuongMe(o) {
|
|
|
10825
10849
|
if (x.kieu === "anh" && dV) {
|
|
10826
10850
|
de(f2, dV, { uuTien: UT.anh, bo: "anh", ten: ten2, chu: chuK, chu2: chu22, keu: "whoosh", video: 1 }, 3, datAnh);
|
|
10827
10851
|
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);
|
|
10852
|
+
} 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
10853
|
else if (x.kieu === "vat") {
|
|
10830
10854
|
const LG = timLogo(suaChu(chuK + " " + sach2(String(x.tu || ""))))[0];
|
|
10831
10855
|
if (LG) napHinhLogo(LG.slug);
|
|
@@ -11337,7 +11361,7 @@ function lapCuongMe(o) {
|
|
|
11337
11361
|
}
|
|
11338
11362
|
return t1 - t0;
|
|
11339
11363
|
};
|
|
11340
|
-
for (const dd of [2.2, 1.8]) for (let f2 = f0; f2 <= m.b - dd - 0.5 + 1e-6; f2 += 0.25) {
|
|
11364
|
+
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
11365
|
const fr = +f2.toFixed(2);
|
|
11342
11366
|
if (gioLogo(fr - 0.1, fr + dd) >= 0 || lien(fr, fr + dd) > 6) continue;
|
|
11343
11367
|
if (dat(fr, dd, { uuTien: UT.anh, bo: "chia", ten: tk, keu: "whoosh-nhanh" }, 0, 0.01)) {
|
|
@@ -11519,6 +11543,16 @@ function lapCuongMe(o) {
|
|
|
11519
11543
|
s.dSua = 1;
|
|
11520
11544
|
nS++;
|
|
11521
11545
|
}
|
|
11546
|
+
if (typeof e.yChu === "number" && e.yChu >= 0.05 && e.yChu <= 0.6) {
|
|
11547
|
+
s.yChu = e.yChu;
|
|
11548
|
+
s.khoa = 1;
|
|
11549
|
+
nS++;
|
|
11550
|
+
}
|
|
11551
|
+
if (typeof e.coChu === "number" && e.coChu >= 0.5 && e.coChu <= 1.6) {
|
|
11552
|
+
s.coChu = e.coChu;
|
|
11553
|
+
s.khoa = 1;
|
|
11554
|
+
nS++;
|
|
11555
|
+
}
|
|
11522
11556
|
if (typeof e.f === "number" && e.f >= 0) {
|
|
11523
11557
|
s.f = e.f;
|
|
11524
11558
|
nS++;
|
|
@@ -11540,7 +11574,7 @@ function lapCuongMe(o) {
|
|
|
11540
11574
|
G2.__lichSuaDaAp = nS;
|
|
11541
11575
|
ghiL("bo", { bo: "sua-tay" }, "sua tay: " + nS + " truong");
|
|
11542
11576
|
}
|
|
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 }));
|
|
11577
|
+
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
11578
|
}
|
|
11545
11579
|
bc = "B7 phat the";
|
|
11546
11580
|
const stTr = { n: 0 }, keuTr = {};
|
|
@@ -11565,7 +11599,7 @@ function lapCuongMe(o) {
|
|
|
11565
11599
|
bo: s.bo,
|
|
11566
11600
|
F: Fs,
|
|
11567
11601
|
s: s.bo === "card" ? sF(Fs, 0.38) : sF(Fs, 0.36),
|
|
11568
|
-
yDau: s.bo === "card" ? s.doc || s.tieuDoc ? 0.
|
|
11602
|
+
yDau: s.bo === "card" ? s.doc || s.tieuDoc ? 0.61 : 0.46 : s.hang || s.vat ? 0.5 : 0.36,
|
|
11569
11603
|
giant: s.giant,
|
|
11570
11604
|
tieu: s.tieu,
|
|
11571
11605
|
so: s.so,
|
|
@@ -11588,6 +11622,7 @@ function lapCuongMe(o) {
|
|
|
11588
11622
|
toiNen: s.toiNen,
|
|
11589
11623
|
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
11624
|
z: s.z,
|
|
11625
|
+
coChu: s.coChu,
|
|
11591
11626
|
phong: s.phong,
|
|
11592
11627
|
ra: s.ra,
|
|
11593
11628
|
chu2: s.chu2,
|
|
@@ -11782,7 +11817,29 @@ var mau6 = (HO2) => {
|
|
|
11782
11817
|
vao: { dich: "trang", kieu: "hienNgay", kieuNhan: "hienNgay", ms: 0, msNhan: 0 },
|
|
11783
11818
|
viTri: { x: 0.5, y: 0.72 },
|
|
11784
11819
|
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: {
|
|
11820
|
+
doan: {
|
|
11821
|
+
khungTheoNguon: true,
|
|
11822
|
+
khoi: { mo: { ve: "cmNen", lap: (o) => lapCuongMe(o) } },
|
|
11823
|
+
lich: {},
|
|
11824
|
+
taiSan: {},
|
|
11825
|
+
nhac: [(() => {
|
|
11826
|
+
try {
|
|
11827
|
+
const v = localStorage.getItem("xvaiNhac");
|
|
11828
|
+
return v && ["vui", "tincay", "camxuc", "sangtrong", "dondap", "nhe"].includes(v) ? v : "vui";
|
|
11829
|
+
} catch (e) {
|
|
11830
|
+
return "vui";
|
|
11831
|
+
}
|
|
11832
|
+
})(), 0.2],
|
|
11833
|
+
/* 10/10 K2: tuỳ chọn xvaiNhac (mặc định giữ 'vui' 112 BPM; đối thủ ~81 BPM → thử 'nhe' 84 / 'sangtrong' 88) */
|
|
11834
|
+
nang: [],
|
|
11835
|
+
nhe: [],
|
|
11836
|
+
xeBao: false,
|
|
11837
|
+
am: false,
|
|
11838
|
+
nap,
|
|
11839
|
+
tieuDe: { phong: "Be Vietnam Pro", dam: 900 },
|
|
11840
|
+
phong: "Be Vietnam Pro",
|
|
11841
|
+
dam: 900
|
|
11842
|
+
}
|
|
11786
11843
|
}];
|
|
11787
11844
|
};
|
|
11788
11845
|
|
|
@@ -12884,7 +12941,13 @@ async function renderNhanh(ff, clips, files, audio, cards, nen2, options, paint,
|
|
|
12884
12941
|
gn.scale(m, m);
|
|
12885
12942
|
gn.translate(-X, -Y);
|
|
12886
12943
|
}
|
|
12887
|
-
|
|
12944
|
+
{
|
|
12945
|
+
const mau7 = fx0.mau || {}, sg = +mau7.sang || +fx0.sang || 1, tp = +mau7.tuongPhan || 1, bh = +mau7.baoHoa || 1, am = +mau7.am || 0;
|
|
12946
|
+
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) + ") " : "");
|
|
12947
|
+
if (fS) gn.filter = fS.trim();
|
|
12948
|
+
gn.drawImage(fr.canvas, ox, oy, sw * kz, sh * kz);
|
|
12949
|
+
if (fS) gn.filter = "none";
|
|
12950
|
+
}
|
|
12888
12951
|
if (xo) gn.restore();
|
|
12889
12952
|
if (dep && rang) {
|
|
12890
12953
|
const ts2 = c.trimStart + u;
|
|
@@ -16018,6 +16081,24 @@ function tuSp(duAn, sp, sua, daiS) {
|
|
|
16018
16081
|
for (const c of canh) if (c.ten) ts2.set(c.ten, { ten: c.ten, loai: "anh" });
|
|
16019
16082
|
return { v: 2, duAn, luc: Date.now(), nguon: { daiS: +daiS.toFixed(2) }, quyetDinh: { canh }, taiSan: [...ts2.values()] };
|
|
16020
16083
|
}
|
|
16084
|
+
function veSua(l) {
|
|
16085
|
+
const sua = {};
|
|
16086
|
+
const them = [];
|
|
16087
|
+
for (const c of l.quyetDinh.canh) {
|
|
16088
|
+
if (!c.khoa) continue;
|
|
16089
|
+
if (c.moi) {
|
|
16090
|
+
them.push({ f: c.f, d: c.d, bo: c.bo, giant: c.giant, chu: c.chu, ten: c.ten });
|
|
16091
|
+
continue;
|
|
16092
|
+
}
|
|
16093
|
+
const e = {};
|
|
16094
|
+
for (const k of ["giant", "chu", "chu2", "st", "ten", "tieu"]) if (c[k]) e[k] = c[k];
|
|
16095
|
+
e.d = c.d;
|
|
16096
|
+
e.f = c.f;
|
|
16097
|
+
sua[c.id] = e;
|
|
16098
|
+
}
|
|
16099
|
+
if (them.length) sua.them = them;
|
|
16100
|
+
return sua;
|
|
16101
|
+
}
|
|
16021
16102
|
|
|
16022
16103
|
// flow-src/utils.ts
|
|
16023
16104
|
var sanitizeFilename = (name) => {
|
|
@@ -18675,7 +18756,7 @@ var StudioEdit = ({ project, setProject, exporting, blob, onExport, onDownload,
|
|
|
18675
18756
|
W3.__mauPhuDe = mau7 ? sua ? mau7 + "-sua" : mau7 : "";
|
|
18676
18757
|
W3.__theoMauKhoi = !!(mau7 && layMau(mau7)?.doan?.khoi);
|
|
18677
18758
|
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);
|
|
18759
|
+
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
18760
|
};
|
|
18680
18761
|
const lamPro = async () => {
|
|
18681
18762
|
let a = W3.__proApi;
|
|
@@ -18989,7 +19070,7 @@ async function napLoi(d) {
|
|
|
18989
19070
|
return "LOI: " + String(e && e.message || e).slice(0, 300);
|
|
18990
19071
|
}
|
|
18991
19072
|
}
|
|
18992
|
-
var LOI_URL = "https://cdn.jsdelivr.net/npm/xvai-loi@0.1.
|
|
19073
|
+
var LOI_URL = "https://cdn.jsdelivr.net/npm/xvai-loi@0.1.37/nap.js";
|
|
18993
19074
|
var TRONG_LOI = !!globalThis.__xvaiReact;
|
|
18994
19075
|
try {
|
|
18995
19076
|
if (!TRONG_LOI) setTimeout(() => {
|
|
@@ -19019,7 +19100,7 @@ function datCauLenh(a) {
|
|
|
19019
19100
|
on2 = true;
|
|
19020
19101
|
window.addEventListener("message", async (ev) => {
|
|
19021
19102
|
const d = ev.data;
|
|
19022
|
-
if (!d || d.
|
|
19103
|
+
if (!d || d.xvaiLoi100118 !== true) return;
|
|
19023
19104
|
const o = String(ev.origin || "");
|
|
19024
19105
|
if (!(o.indexOf("https://flow.google.com") === 0 || o.indexOf("https://labs.google") === 0)) return;
|
|
19025
19106
|
const tra = (kq) => {
|
|
@@ -19174,6 +19255,67 @@ var SuaLich = ({ ten, onDong }) => {
|
|
|
19174
19255
|
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
19256
|
}
|
|
19176
19257
|
};
|
|
19258
|
+
const moDuAn = async (f2) => {
|
|
19259
|
+
if (!f2) return;
|
|
19260
|
+
try {
|
|
19261
|
+
const j = JSON.parse(await f2.text());
|
|
19262
|
+
const l = j && (j.lichV2 || (j.v === 2 && j.quyetDinh ? j : null));
|
|
19263
|
+
if (!l) {
|
|
19264
|
+
setBao("T\u1EC7p kh\xF4ng c\xF3 lichV2 (l\u01B0u b\u1EB1ng n\xFAt L\u01B0u d\u1EF1 \xE1n t\u1EEB 0.1.37)");
|
|
19265
|
+
return;
|
|
19266
|
+
}
|
|
19267
|
+
const n = veSua(l);
|
|
19268
|
+
setSua(n);
|
|
19269
|
+
G.__lichSua = n;
|
|
19270
|
+
await ghiDem("lichSua:" + ten, { sua: n });
|
|
19271
|
+
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");
|
|
19272
|
+
} catch (e) {
|
|
19273
|
+
setBao("Kh\xF4ng \u0111\u1ECDc \u0111\u01B0\u1EE3c t\u1EC7p: " + String(e && e.message || e).slice(0, 80));
|
|
19274
|
+
}
|
|
19275
|
+
};
|
|
19276
|
+
const taiTep = async (ten2, text2, mime) => {
|
|
19277
|
+
const base64 = btoa(unescape(encodeURIComponent(text2)));
|
|
19278
|
+
try {
|
|
19279
|
+
await Flow.download({ base64, mimeType: mime, filename: ten2 });
|
|
19280
|
+
setBao("\u0110\xE3 t\u1EA3i " + ten2 + " (" + Math.round(text2.length / 1024) + " KB)");
|
|
19281
|
+
} catch (e) {
|
|
19282
|
+
setBao("Kh\xF4ng t\u1EA3i \u0111\u01B0\u1EE3c: " + String(e && e.message || e).slice(0, 80));
|
|
19283
|
+
}
|
|
19284
|
+
};
|
|
19285
|
+
const taiLich = () => {
|
|
19286
|
+
const p = G.__loiApp && G.__loiApp.p;
|
|
19287
|
+
const tl = p && p.timeline || [];
|
|
19288
|
+
const dai2 = tl.reduce((a, c) => a + Math.max(0, (+c.trimEnd || 0) - (+c.trimStart || 0)), 0);
|
|
19289
|
+
const l = tuSp(ten, G.__lichSp || [], sua, dai2);
|
|
19290
|
+
taiTep("lich-" + ten.replace(/[^\w-]+/g, "_").slice(0, 40) + ".json", JSON.stringify(l, null, 1), "application/json");
|
|
19291
|
+
};
|
|
19292
|
+
const taiSrt = () => {
|
|
19293
|
+
const p = G.__loiApp && G.__loiApp.p;
|
|
19294
|
+
const cues = [];
|
|
19295
|
+
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) });
|
|
19296
|
+
cues.sort((a, b) => a.t0 - b.t0);
|
|
19297
|
+
const hh = (t) => {
|
|
19298
|
+
t = Math.max(0, t);
|
|
19299
|
+
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);
|
|
19300
|
+
return String(h).padStart(2, "0") + ":" + String(m).padStart(2, "0") + ":" + String(s2).padStart(2, "0") + "," + String(ms).padStart(3, "0");
|
|
19301
|
+
};
|
|
19302
|
+
if (!cues.length) {
|
|
19303
|
+
setBao("Ch\u01B0a c\xF3 ph\u1EE5 \u0111\u1EC1 (ch\u1EA1y L\xE0m pro tr\u01B0\u1EDBc)");
|
|
19304
|
+
return;
|
|
19305
|
+
}
|
|
19306
|
+
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");
|
|
19307
|
+
};
|
|
19308
|
+
const fx0 = G.__loiApp && G.__loiApp.p && G.__loiApp.p.studioFx || {};
|
|
19309
|
+
const m0 = fx0.mau || {};
|
|
19310
|
+
const [fx, setFx] = useState({ sang: +m0.sang || +fx0.sang || 1, tuongPhan: +m0.tuongPhan || 1, baoHoa: +m0.baoHoa || 1, am: +m0.am || 0 });
|
|
19311
|
+
const datFx = (k, v) => {
|
|
19312
|
+
const n = { ...fx, [k]: v };
|
|
19313
|
+
setFx(n);
|
|
19314
|
+
if (typeof G.__loiSetP === "function") {
|
|
19315
|
+
G.__loiSetP((c) => c ? { ...c, studioFx: { ...c.studioFx || {}, mau: n } } : c);
|
|
19316
|
+
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");
|
|
19317
|
+
}
|
|
19318
|
+
};
|
|
19177
19319
|
const themCanh = () => {
|
|
19178
19320
|
if (!(them.d > 0.3)) return;
|
|
19179
19321
|
const n = { ...sua, them: [...sua.them || [], { ...them, f: +them.f, d: +them.d }] };
|
|
@@ -19201,15 +19343,18 @@ var SuaLich = ({ ten, onDong }) => {
|
|
|
19201
19343
|
setDs(G.__lichSp || []);
|
|
19202
19344
|
} }, "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
19345
|
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-
|
|
19346
|
+
} }, /* @__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: () => {
|
|
19347
|
+
setFx({ sang: 1, tuongPhan: 1, baoHoa: 1, am: 0 });
|
|
19348
|
+
datFx("sang", 1);
|
|
19349
|
+
} }, "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("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
19350
|
const e = sua[s.id] || sua[s.i] || {};
|
|
19206
19351
|
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) })));
|
|
19352
|
+
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", 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
19353
|
})))), /* @__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
19354
|
};
|
|
19210
19355
|
|
|
19211
19356
|
// loi/vo-flow.tsx
|
|
19212
|
-
var PHIEN_BAN = "loi-
|
|
19357
|
+
var PHIEN_BAN = "loi-1010H";
|
|
19213
19358
|
var TRONG = () => migrateProject({ id: crypto.randomUUID(), name: "D\u1EF1 \xE1n m\u1EDBi", scenes: [], timeline: [], images: [null, null, null] });
|
|
19214
19359
|
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
19360
|
var Vo = () => {
|
|
@@ -19227,6 +19372,7 @@ var Vo = () => {
|
|
|
19227
19372
|
setP(moi);
|
|
19228
19373
|
};
|
|
19229
19374
|
useEffect(() => {
|
|
19375
|
+
window.__loiSetP = setP;
|
|
19230
19376
|
datCauLenh({ project: p, setProject: setP, exporting: ex, blob: b, xuat, dongXuat: () => setEx(null), tai, luuJson: () => handleExportProject(p, toast) });
|
|
19231
19377
|
});
|
|
19232
19378
|
window.__loiApp = { p, ex, b, phienBan: PHIEN_BAN };
|