xvai-loi 0.1.44 → 0.1.46
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 +103 -8
package/co.txt
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
xvaiLoi100930
|
package/package.json
CHANGED
package/xvai-loi.js
CHANGED
|
@@ -2141,6 +2141,32 @@ function safeKeepRanges(start, end, silences, words, shorten) {
|
|
|
2141
2141
|
if (cuts.length && a < cuts[cuts.length - 1].t1) continue;
|
|
2142
2142
|
cuts.push({ t0: a, t1: b });
|
|
2143
2143
|
}
|
|
2144
|
+
{
|
|
2145
|
+
let tay = [];
|
|
2146
|
+
try {
|
|
2147
|
+
const G = globalThis;
|
|
2148
|
+
tay = Array.isArray(G.__catTay) ? G.__catTay : [];
|
|
2149
|
+
if (!tay.length) {
|
|
2150
|
+
const t = localStorage.getItem("xvaiCatTay");
|
|
2151
|
+
if (t) tay = JSON.parse(t) || [];
|
|
2152
|
+
}
|
|
2153
|
+
} catch (e) {
|
|
2154
|
+
tay = [];
|
|
2155
|
+
}
|
|
2156
|
+
for (const r of tay) {
|
|
2157
|
+
const a = Math.max(start, +r.t0 - 0.03), b = Math.min(end, +r.t1 + 0.03);
|
|
2158
|
+
if (b - a >= 0.08) cuts.push({ t0: a, t1: b });
|
|
2159
|
+
}
|
|
2160
|
+
cuts.sort((x, y) => x.t0 - y.t0);
|
|
2161
|
+
const gop = [];
|
|
2162
|
+
for (const c of cuts) {
|
|
2163
|
+
const L = gop[gop.length - 1];
|
|
2164
|
+
if (L && c.t0 <= L.t1) L.t1 = Math.max(L.t1, c.t1);
|
|
2165
|
+
else gop.push({ ...c });
|
|
2166
|
+
}
|
|
2167
|
+
cuts.length = 0;
|
|
2168
|
+
cuts.push(...gop);
|
|
2169
|
+
}
|
|
2144
2170
|
const keep = [];
|
|
2145
2171
|
let cursor = start;
|
|
2146
2172
|
for (const c of cuts) {
|
|
@@ -11808,7 +11834,7 @@ function lapCuongMe(o) {
|
|
|
11808
11834
|
const mm = muc.find((m) => x.f >= m.f && x.f < (m.b ?? 1e9));
|
|
11809
11835
|
if (mm) {
|
|
11810
11836
|
const tk = "trang:" + String(mm.ten).toLocaleLowerCase("vi").replace(/[^\p{L}\p{N}]+/gu, "");
|
|
11811
|
-
if (taiSan(tk) && !sp.some((y) => y.ten === tk && Math.abs(y.f - x.f) <
|
|
11837
|
+
if (taiSan(tk) && !sp.some((y) => y.ten === tk && Math.abs(y.f - x.f) < 12)) ten2 = tk;
|
|
11812
11838
|
}
|
|
11813
11839
|
}
|
|
11814
11840
|
if (!ten2) continue;
|
|
@@ -13214,6 +13240,32 @@ async function renderNhanh(ff, clips, files, audio, cards, nen2, options, paint,
|
|
|
13214
13240
|
if (fS) gn.filter = fS.trim();
|
|
13215
13241
|
gn.drawImage(fr.canvas, ox, oy, sw * kz, sh * kz);
|
|
13216
13242
|
if (fS) gn.filter = "none";
|
|
13243
|
+
const net = +(mau7.net || 0);
|
|
13244
|
+
if (net > 0) {
|
|
13245
|
+
const G = globalThis;
|
|
13246
|
+
if (!G.__cvNet) {
|
|
13247
|
+
G.__cvNet = document.createElement("canvas");
|
|
13248
|
+
}
|
|
13249
|
+
const cv2 = G.__cvNet;
|
|
13250
|
+
if (cv2.width !== W4 || cv2.height !== H2) {
|
|
13251
|
+
cv2.width = W4;
|
|
13252
|
+
cv2.height = H2;
|
|
13253
|
+
}
|
|
13254
|
+
const cg = cv2.getContext("2d");
|
|
13255
|
+
cg.globalCompositeOperation = "copy";
|
|
13256
|
+
cg.filter = "none";
|
|
13257
|
+
cg.drawImage(gn.canvas, 0, 0);
|
|
13258
|
+
cg.globalCompositeOperation = "difference";
|
|
13259
|
+
cg.filter = "blur(1.2px)";
|
|
13260
|
+
cg.drawImage(gn.canvas, 0, 0);
|
|
13261
|
+
cg.filter = "none";
|
|
13262
|
+
cg.globalCompositeOperation = "source-over";
|
|
13263
|
+
gn.save();
|
|
13264
|
+
gn.globalCompositeOperation = "lighter";
|
|
13265
|
+
gn.globalAlpha = Math.min(0.6, net);
|
|
13266
|
+
gn.drawImage(cv2, 0, 0);
|
|
13267
|
+
gn.restore();
|
|
13268
|
+
}
|
|
13217
13269
|
}
|
|
13218
13270
|
if (xo) gn.restore();
|
|
13219
13271
|
if (dep && rang) {
|
|
@@ -19360,7 +19412,7 @@ async function napLoi(d) {
|
|
|
19360
19412
|
return "LOI: " + String(e && e.message || e).slice(0, 300);
|
|
19361
19413
|
}
|
|
19362
19414
|
}
|
|
19363
|
-
var LOI_URL = "https://cdn.jsdelivr.net/npm/xvai-loi@0.1.
|
|
19415
|
+
var LOI_URL = "https://cdn.jsdelivr.net/npm/xvai-loi@0.1.45/nap.js";
|
|
19364
19416
|
var TRONG_LOI = !!globalThis.__xvaiReact;
|
|
19365
19417
|
try {
|
|
19366
19418
|
if (!TRONG_LOI) setTimeout(() => {
|
|
@@ -19390,7 +19442,7 @@ function datCauLenh(a) {
|
|
|
19390
19442
|
on2 = true;
|
|
19391
19443
|
window.addEventListener("message", async (ev) => {
|
|
19392
19444
|
const d = ev.data;
|
|
19393
|
-
if (!d || d.
|
|
19445
|
+
if (!d || d.xvaiLoi100930 !== true) return;
|
|
19394
19446
|
const o = String(ev.origin || "");
|
|
19395
19447
|
if (!(o.indexOf("https://flow.google.com") === 0 || o.indexOf("https://labs.google") === 0)) return;
|
|
19396
19448
|
const tra = (kq) => {
|
|
@@ -19638,7 +19690,7 @@ var SuaLich = ({ ten, onDong }) => {
|
|
|
19638
19690
|
}
|
|
19639
19691
|
} catch (e) {
|
|
19640
19692
|
}
|
|
19641
|
-
const [fx, setFx] = useState({ sang: +m0.sang || +fx0.sang || 1, tuongPhan: +m0.tuongPhan || 1, baoHoa: +m0.baoHoa || 1, am: +m0.am || 0 });
|
|
19693
|
+
const [fx, setFx] = useState({ sang: +m0.sang || +fx0.sang || 1, tuongPhan: +m0.tuongPhan || 1, baoHoa: +m0.baoHoa || 1, am: +m0.am || 0, net: +m0.net || 0 });
|
|
19642
19694
|
const datFx = (k, v) => {
|
|
19643
19695
|
const n = { ...fx, [k]: v };
|
|
19644
19696
|
setFx(n);
|
|
@@ -19816,6 +19868,39 @@ var SuaLich = ({ ten, onDong }) => {
|
|
|
19816
19868
|
window.removeEventListener("pointerup", up);
|
|
19817
19869
|
};
|
|
19818
19870
|
}, [keo]);
|
|
19871
|
+
const boSuaCanh = (s) => {
|
|
19872
|
+
ghiHoan(sua);
|
|
19873
|
+
const n = { ...sua };
|
|
19874
|
+
delete n[s.id];
|
|
19875
|
+
delete n[String(s.i)];
|
|
19876
|
+
apSua(n);
|
|
19877
|
+
setBao("C\u1EA3nh " + s.i + " tr\u1EA3 v\u1EC1 cho AI (b\u1ECF s\u1EEDa tay) \xB7 L\u01B0u r\u1ED3i V\u1EBD l\u1EA1i");
|
|
19878
|
+
};
|
|
19879
|
+
const [moLoi, setMoLoi] = useState(false);
|
|
19880
|
+
const [catTay, setCatTay] = useState(() => {
|
|
19881
|
+
try {
|
|
19882
|
+
return JSON.parse(localStorage.getItem("xvaiCatTay") || "[]") || [];
|
|
19883
|
+
} catch (e) {
|
|
19884
|
+
return [];
|
|
19885
|
+
}
|
|
19886
|
+
});
|
|
19887
|
+
const tuLoi = (() => {
|
|
19888
|
+
const p = G.__loiApp && G.__loiApp.p;
|
|
19889
|
+
const sc = p && p.scenes && p.scenes[0];
|
|
19890
|
+
const w = p && p.speechDraft && p.speechDraft.analysis && p.speechDraft.analysis.words || sc && (sc.speechWords || sc.speechDraft && sc.speechDraft.words) || p && p.speechDraft && p.speechDraft.words || [];
|
|
19891
|
+
return Array.isArray(w) ? w : [];
|
|
19892
|
+
})();
|
|
19893
|
+
const daCat = (w) => catTay.some((r) => Math.abs(r.t0 - w.t0) < 0.01);
|
|
19894
|
+
const batCat = (w) => {
|
|
19895
|
+
const n = daCat(w) ? catTay.filter((r) => Math.abs(r.t0 - w.t0) >= 0.01) : [...catTay, { t0: +w.t0, t1: +w.t1, tu: w.text }];
|
|
19896
|
+
setCatTay(n);
|
|
19897
|
+
G.__catTay = n;
|
|
19898
|
+
try {
|
|
19899
|
+
localStorage.setItem("xvaiCatTay", JSON.stringify(n));
|
|
19900
|
+
} catch (e) {
|
|
19901
|
+
}
|
|
19902
|
+
setBao("C\u1EAFt l\u1EDDi: " + n.length + " t\u1EEB \u0111\xE1nh d\u1EA5u xo\xE1 \xB7 V\u1EBD l\u1EA1i \u0111\u1EC3 \xE1p");
|
|
19903
|
+
};
|
|
19819
19904
|
const themCanh = () => {
|
|
19820
19905
|
if (!(them.d > 0.3)) return;
|
|
19821
19906
|
ghiHoan(sua);
|
|
@@ -19845,7 +19930,17 @@ var SuaLich = ({ ten, onDong }) => {
|
|
|
19845
19930
|
setDs(G.__lichSp || []);
|
|
19846
19931
|
} }, "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) => {
|
|
19847
19932
|
if (ev.target.value) napBan(+ev.target.value);
|
|
19848
|
-
} }, /* @__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]" }, "Ki\u1EC3u ch\u1EEF c\u1EA3 b\xE0i:"), /* @__PURE__ */ shim_react_default.createElement("select", { className: "bg-[#0B1A2D] border border-[#2C4A73] rounded px-1", value: kc, onChange: (ev) => datKc(ev.target.value) }, Object.keys(KIEU_CHU).map((t) => /* @__PURE__ */ shim_react_default.createElement("option", { key: t, value: t }, t)))), /* @__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]" }, "\xC2m thanh:"), /* @__PURE__ */ shim_react_default.createElement("label", { className: "flex items-center gap-1" }, "l\u1EDDi ", /* @__PURE__ */ shim_react_default.createElement("input", { type: "range", min: "0.5", max: "2", step: "0.05", value: am.loi, onChange: (ev) => datAm("loi", +ev.target.value), className: "w-20" }), " \xD7", (+am.loi).toFixed(2)), /* @__PURE__ */ shim_react_default.createElement("label", { className: "flex items-center gap-1" }, "nh\u1EA1c + SFX ", /* @__PURE__ */ shim_react_default.createElement("input", { type: "range", min: "0", max: "2.5", step: "0.05", value: am.nhac, onChange: (ev) => datAm("nhac", +ev.target.value), className: "w-20" }), " \xD7", (+am.nhac).toFixed(2)), /* @__PURE__ */ shim_react_default.createElement("label", { className: "flex items-center gap-1" }, "ch\u1ED1ng \u1ED3n ", /* @__PURE__ */ shim_react_default.createElement("select", { className: "bg-[#0B1A2D] border border-[#2C4A73] rounded px-1", value: am.on, onChange: (ev) => datAm("on", ev.target.value === "" ? "" : +ev.target.value) }, /* @__PURE__ */ shim_react_default.createElement("option", { value: "" }, "theo b\u1EA3ng L\xE0m pro"), /* @__PURE__ */ shim_react_default.createElement("option", { value: "0" }, "t\u1EAFt"), /* @__PURE__ */ shim_react_default.createElement("option", { value: "1" }, "nh\u1EB9"), /* @__PURE__ */ shim_react_default.createElement("option", { value: "2" }, "m\u1EA1nh"))), /* @__PURE__ */ shim_react_default.createElement("span", { className: "text-[#A2B2C9]" }, "(t\u1EF1 c\xE2n \u221214 LUFS, nh\u1EA1c t\u1EF1 h\u1EA1 khi n\xF3i)")), /* @__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: () => {
|
|
19933
|
+
} }, /* @__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]" }, "Ki\u1EC3u ch\u1EEF c\u1EA3 b\xE0i:"), /* @__PURE__ */ shim_react_default.createElement("select", { className: "bg-[#0B1A2D] border border-[#2C4A73] rounded px-1", value: kc, onChange: (ev) => datKc(ev.target.value) }, Object.keys(KIEU_CHU).map((t) => /* @__PURE__ */ shim_react_default.createElement("option", { key: t, value: t }, t)))), /* @__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]" }, "\xC2m thanh:"), /* @__PURE__ */ shim_react_default.createElement("label", { className: "flex items-center gap-1" }, "l\u1EDDi ", /* @__PURE__ */ shim_react_default.createElement("input", { type: "range", min: "0.5", max: "2", step: "0.05", value: am.loi, onChange: (ev) => datAm("loi", +ev.target.value), className: "w-20" }), " \xD7", (+am.loi).toFixed(2)), /* @__PURE__ */ shim_react_default.createElement("label", { className: "flex items-center gap-1" }, "nh\u1EA1c + SFX ", /* @__PURE__ */ shim_react_default.createElement("input", { type: "range", min: "0", max: "2.5", step: "0.05", value: am.nhac, onChange: (ev) => datAm("nhac", +ev.target.value), className: "w-20" }), " \xD7", (+am.nhac).toFixed(2)), /* @__PURE__ */ shim_react_default.createElement("label", { className: "flex items-center gap-1" }, "ch\u1ED1ng \u1ED3n ", /* @__PURE__ */ shim_react_default.createElement("select", { className: "bg-[#0B1A2D] border border-[#2C4A73] rounded px-1", value: am.on, onChange: (ev) => datAm("on", ev.target.value === "" ? "" : +ev.target.value) }, /* @__PURE__ */ shim_react_default.createElement("option", { value: "" }, "theo b\u1EA3ng L\xE0m pro"), /* @__PURE__ */ shim_react_default.createElement("option", { value: "0" }, "t\u1EAFt"), /* @__PURE__ */ shim_react_default.createElement("option", { value: "1" }, "nh\u1EB9"), /* @__PURE__ */ shim_react_default.createElement("option", { value: "2" }, "m\u1EA1nh"))), /* @__PURE__ */ shim_react_default.createElement("span", { className: "text-[#A2B2C9]" }, "(t\u1EF1 c\xE2n \u221214 LUFS, nh\u1EA1c t\u1EF1 h\u1EA1 khi n\xF3i)")), /* @__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("label", { className: "flex items-center gap-1" }, "n\xE9t ", /* @__PURE__ */ shim_react_default.createElement("input", { type: "range", min: "0", max: "0.6", step: "0.05", value: fx.net || 0, onChange: (ev) => datFx("net", +ev.target.value), className: "w-20" }), " ", (+(fx.net || 0)).toFixed(2)), [["T\u1EF1 c\xE2n", { sang: 1.05, tuongPhan: 1.05, baoHoa: 1, am: 0 }], ["\u1EA4m", { sang: 1.03, tuongPhan: 1.03, baoHoa: 1.08, am: 0.12 }], ["L\u1EA1nh s\u1EA1ch", { sang: 1.06, tuongPhan: 1.08, baoHoa: 0.92, am: 0 }], ["Phim", { sang: 0.97, tuongPhan: 1.12, baoHoa: 0.85, am: 0.08 }], ["R\u1EF1c", { sang: 1.04, tuongPhan: 1.1, baoHoa: 1.25, am: 0 }]].map(([t, v]) => /* @__PURE__ */ shim_react_default.createElement("button", { key: t, className: nut3, onClick: () => {
|
|
19934
|
+
const n = { ...v };
|
|
19935
|
+
setFx(n);
|
|
19936
|
+
G.__xvaiMau = n;
|
|
19937
|
+
try {
|
|
19938
|
+
localStorage.setItem("xvaiMau", JSON.stringify(n));
|
|
19939
|
+
} catch (e) {
|
|
19940
|
+
}
|
|
19941
|
+
if (typeof G.__loiSetP === "function") G.__loiSetP((c) => c ? { ...c, studioFx: { ...c.studioFx || {}, mau: n } } : c);
|
|
19942
|
+
setBao("M\xE0u c\u1EA3 b\xE0i: " + t + " \u2192 Xu\u1EA5t l\u1EA1i");
|
|
19943
|
+
} }, t)), /* @__PURE__ */ shim_react_default.createElement("button", { className: nut3, onClick: () => {
|
|
19849
19944
|
setFx({ sang: 1, tuongPhan: 1, baoHoa: 1, am: 0 });
|
|
19850
19945
|
datFx("sang", 1);
|
|
19851
19946
|
} }, "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: "gi\u1EDD theo phim (\u0111\xE3 tr\u1EEB l\u1EB7ng c\u1EAFt)" }, "T\u1EA3i SRT"), /* @__PURE__ */ shim_react_default.createElement("label", { className: nut3 + " cursor-pointer" }, "T\u1EA3i \u1EA3nh/clip v\xE0o kho", /* @__PURE__ */ shim_react_default.createElement("input", { type: "file", multiple: true, accept: "image/*,video/*", className: "hidden", onChange: (ev) => taiKho(ev.target.files) })), nKho ? /* @__PURE__ */ shim_react_default.createElement("span", { className: "text-[#F6D178]" }, "+", nKho, " kho") : null, /* @__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: "mb-2" }, /* @__PURE__ */ shim_react_default.createElement("div", { className: "text-[#A2B2C9] text-[11px] mb-1" }, "Timeline (", tongS.toFixed(1), " s) \u2014 k\xE9o kh\u1ED1i \u0111\u1EC3 d\u1EDDi, k\xE9o m\xE9p ph\u1EA3i \u0111\u1EC3 \u0111\u1ED5i d\xE0i"), /* @__PURE__ */ shim_react_default.createElement("div", { ref: (el) => {
|
|
@@ -19854,17 +19949,17 @@ var SuaLich = ({ ten, onDong }) => {
|
|
|
19854
19949
|
const f2 = giaTri(x, "f"), d = giaTri(x, "d"), e = sua[x.id] || sua[x.i] || {};
|
|
19855
19950
|
if (e.xoa) return null;
|
|
19856
19951
|
return /* @__PURE__ */ shim_react_default.createElement("div", { key: "k" + (x.id || x.i), title: x.bo + " " + f2.toFixed(1) + "\u2013" + (f2 + d).toFixed(1) + " " + (x.giant || x.chu || ""), onPointerDown: (ev) => batDauKeo(ev, x, false), className: "absolute top-3 h-5 rounded-sm cursor-grab text-[8px] text-white overflow-hidden whitespace-nowrap px-0.5", style: { left: f2 / tongS * 100 + "%", width: Math.max(0.4, d / tongS * 100) + "%", background: MAUBO[x.bo] || "#777", outline: e.f != null || e.d != null ? "1px solid #fff" : "none" } }, String(x.giant || x.chu || x.bo).split(String.fromCharCode(10))[0].slice(0, 12), /* @__PURE__ */ shim_react_default.createElement("span", { onPointerDown: (ev) => batDauKeo(ev, x, true), className: "absolute right-0 top-0 bottom-0 w-1.5 bg-white/60 cursor-ew-resize" }));
|
|
19857
|
-
}))), /* @__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" }, "khung"), /* @__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, "fx"), /* @__PURE__ */ shim_react_default.createElement("th", null, "xo\xE1"))), /* @__PURE__ */ shim_react_default.createElement("tbody", null, ds2.map((s) => {
|
|
19952
|
+
}))), /* @__PURE__ */ shim_react_default.createElement("div", { className: "mb-2 text-[11px]" }, /* @__PURE__ */ shim_react_default.createElement("button", { className: nut3, onClick: () => setMoLoi(!moLoi) }, moLoi ? "\u1EA8n" : "C\u1EAFt l\u1EDDi theo t\u1EEB", " (", tuLoi.length, " t\u1EEB", catTay.length ? ", xo\xE1 " + catTay.length : "", ")"), moLoi ? /* @__PURE__ */ shim_react_default.createElement("div", { className: "mt-1 max-h-32 overflow-auto bg-[#0B1A2D] border border-[#2C4A73] rounded p-1 leading-6" }, tuLoi.length ? tuLoi.map((w, k) => /* @__PURE__ */ shim_react_default.createElement("span", { key: k, onClick: () => batCat(w), title: (+w.t0).toFixed(2) + " s", className: "cursor-pointer px-0.5 rounded " + (daCat(w) ? "line-through text-red-400 bg-red-900/30" : "hover:bg-[#1E3A5F]") }, w.text, " ")) : /* @__PURE__ */ shim_react_default.createElement("span", { className: "text-[#A2B2C9]" }, "Ch\u01B0a c\xF3 l\u1EDDi (ch\u1EA1y L\xE0m pro tr\u01B0\u1EDBc)")) : 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" }, "khung"), /* @__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, "fx"), /* @__PURE__ */ shim_react_default.createElement("th", null, "xo\xE1"))), /* @__PURE__ */ shim_react_default.createElement("tbody", null, ds2.map((s) => {
|
|
19858
19953
|
const e = sua[s.id] || sua[s.i] || {};
|
|
19859
19954
|
const v = (k) => (typeof e[k] === "string" ? e[k] : s[k]) || "";
|
|
19860
19955
|
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, khung[(+s.f).toFixed(1)] ? /* @__PURE__ */ shim_react_default.createElement("img", { src: khung[(+s.f).toFixed(1)], width: 45, height: 80, className: "rounded cursor-zoom-in", onClick: () => setKhungTo(khung[(+s.f).toFixed(1)]) }) : /* @__PURE__ */ shim_react_default.createElement("span", { className: "text-[#A2B2C9]" }, "\u2026")), /* @__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("input", { className: "w-10 bg-[#0B1A2D] border border-[#2C4A73] rounded px-1", type: "number", step: "0.05", min: "0.05", max: "0.95", placeholder: "x", title: "v\u1ECB tr\xED icon ngang 0,05\u20130,95", value: typeof e.stX === "number" ? e.stX : s.stX ?? "", onChange: (ev) => dat(s.id || String(s.i), "stX", +ev.target.value) }), /* @__PURE__ */ shim_react_default.createElement("input", { className: "w-10 bg-[#0B1A2D] border border-[#2C4A73] rounded px-1", type: "number", step: "0.05", min: "0.05", max: "0.95", placeholder: "y", title: "v\u1ECB tr\xED icon d\u1ECDc", value: typeof e.stY === "number" ? e.stY : s.stY ?? "", onChange: (ev) => dat(s.id || String(s.i), "stY", +ev.target.value) })), /* @__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("button", { className: nut3 + (Object.keys(fxCua(s)).length ? " bg-[#F6D178] text-[#122238]" : ""), onClick: () => setFxMo(fxMo === (s.id || String(s.i)) ? "" : s.id || String(s.i)) }, "fx"), fxMo === (s.id || String(s.i)) ? /* @__PURE__ */ shim_react_default.createElement("div", { className: "absolute z-40 bg-[#0B1A2D] border border-[#F6D178] rounded p-2 text-[11px] w-56 text-left", onClick: (ev) => ev.stopPropagation() }, [["sang", "s\xE1ng", 0.5, 1.6, 1], ["tuongPhan", "t\u01B0\u01A1ng ph\u1EA3n", 0.5, 1.6, 1], ["baoHoa", "t\u01B0\u01A1i", 0, 1.8, 1], ["am", "\u1EA5m", 0, 0.6, 0], ["mo", "m\u1EDD (px)", 0, 10, 0], ["xam", "\u0111en tr\u1EAFng", 0, 1, 0]].map((r) => /* @__PURE__ */ shim_react_default.createElement("label", { key: r[0], className: "flex items-center gap-1" }, r[1], " ", /* @__PURE__ */ shim_react_default.createElement("input", { type: "range", min: r[2], max: r[3], step: r[0] === "mo" ? 0.5 : 0.05, value: fxCua(s)[r[0]] ?? r[4], onChange: (ev) => datFxCanh(s, r[0], +ev.target.value), className: "flex-1" }), " ", (+(fxCua(s)[r[0]] ?? r[4])).toFixed(2))), /* @__PURE__ */ shim_react_default.createElement("div", { className: "flex gap-1 mt-1" }, /* @__PURE__ */ shim_react_default.createElement("button", { className: nut3, onClick: () => {
|
|
19861
19956
|
dat(s.id || String(s.i), "fx", {});
|
|
19862
|
-
} }, "V\u1EC1 g\u1ED1c"), /* @__PURE__ */ shim_react_default.createElement("button", { className: nut3, onClick: () => setFxMo("") }, "\u0110\xF3ng"))) : null), /* @__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) })));
|
|
19957
|
+
} }, "V\u1EC1 g\u1ED1c"), /* @__PURE__ */ shim_react_default.createElement("button", { className: nut3, onClick: () => setFxMo("") }, "\u0110\xF3ng"))) : null), /* @__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) }), " ", sua[s.id] || sua[s.i] ? /* @__PURE__ */ shim_react_default.createElement("button", { className: nut3, title: "AI l\xE0m l\u1EA1i c\u1EA3nh n\xE0y (b\u1ECF s\u1EEDa tay)", onClick: () => boSuaCanh(s) }, "\u21BA") : null));
|
|
19863
19958
|
})))), khungTo ? /* @__PURE__ */ shim_react_default.createElement("div", { className: "fixed inset-0 bg-black/70 flex items-center justify-center z-50", onClick: () => setKhungTo("") }, /* @__PURE__ */ shim_react_default.createElement("img", { src: khungTo, style: { height: "80vh" }, className: "rounded" })) : null, /* @__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)."));
|
|
19864
19959
|
};
|
|
19865
19960
|
|
|
19866
19961
|
// loi/vo-flow.tsx
|
|
19867
|
-
var PHIEN_BAN = "loi-
|
|
19962
|
+
var PHIEN_BAN = "loi-1010AO";
|
|
19868
19963
|
var TRONG = () => migrateProject({ id: crypto.randomUUID(), name: "D\u1EF1 \xE1n m\u1EDBi", scenes: [], timeline: [], images: [null, null, null] });
|
|
19869
19964
|
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";
|
|
19870
19965
|
var Vo = () => {
|