@geekapps/silo-elements-nextjs 0.3.9 → 0.3.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/MediaUploader.js +41 -3
- package/dist/MediaUploader.js.map +1 -1
- package/dist/VideoUploader.js +41 -3
- package/dist/VideoUploader.js.map +1 -1
- package/dist/index.js +41 -3
- package/dist/index.js.map +1 -1
- package/dist/styles.css +1 -1
- package/package.json +2 -3
- package/styles.css +1 -1
package/dist/VideoUploader.js
CHANGED
|
@@ -542,10 +542,48 @@ function getCompatIssues(info) {
|
|
|
542
542
|
}
|
|
543
543
|
return issues;
|
|
544
544
|
}
|
|
545
|
+
var MEDIAINFO_CDN = "https://cdn.jsdelivr.net/npm/mediainfo.js@0.3.7/dist/umd/index.js";
|
|
546
|
+
var WASM_CDN = "https://cdn.jsdelivr.net/npm/mediainfo.js@0.3.7/dist/MediaInfoModule.wasm";
|
|
547
|
+
function loadMediaInfoFromCDN() {
|
|
548
|
+
return new Promise((resolve, reject) => {
|
|
549
|
+
if (typeof window === "undefined") {
|
|
550
|
+
reject(new Error("analyzeVideoFile requires a browser environment"));
|
|
551
|
+
return;
|
|
552
|
+
}
|
|
553
|
+
const w = window;
|
|
554
|
+
if (typeof w["MediaInfo"] === "function") {
|
|
555
|
+
resolve(w["MediaInfo"]);
|
|
556
|
+
return;
|
|
557
|
+
}
|
|
558
|
+
const existing = document.getElementById("__mediainfo_cdn__");
|
|
559
|
+
if (existing) {
|
|
560
|
+
const interval = setInterval(() => {
|
|
561
|
+
if (typeof w["MediaInfo"] === "function") {
|
|
562
|
+
clearInterval(interval);
|
|
563
|
+
resolve(w["MediaInfo"]);
|
|
564
|
+
}
|
|
565
|
+
}, 50);
|
|
566
|
+
return;
|
|
567
|
+
}
|
|
568
|
+
const script = document.createElement("script");
|
|
569
|
+
script.id = "__mediainfo_cdn__";
|
|
570
|
+
script.src = MEDIAINFO_CDN;
|
|
571
|
+
script.onload = () => {
|
|
572
|
+
if (typeof w["MediaInfo"] === "function") {
|
|
573
|
+
resolve(w["MediaInfo"]);
|
|
574
|
+
} else {
|
|
575
|
+
reject(new Error("MediaInfo not found on window after CDN script load"));
|
|
576
|
+
}
|
|
577
|
+
};
|
|
578
|
+
script.onerror = () => reject(new Error("Failed to load mediainfo.js from CDN"));
|
|
579
|
+
document.head.appendChild(script);
|
|
580
|
+
});
|
|
581
|
+
}
|
|
545
582
|
async function analyzeVideoFile(file) {
|
|
546
|
-
const
|
|
547
|
-
const
|
|
548
|
-
|
|
583
|
+
const MediaInfoFactory = await loadMediaInfoFromCDN();
|
|
584
|
+
const mediainfo = await MediaInfoFactory(
|
|
585
|
+
{ format: "object", locateFile: () => WASM_CDN }
|
|
586
|
+
);
|
|
549
587
|
const getSize = () => file.size;
|
|
550
588
|
const readChunk = (chunkSize, offset) => new Promise((resolve, reject) => {
|
|
551
589
|
const reader = new FileReader();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/utils/theme.ts","../src/components/DropZone.tsx","../src/components/ProgressBar.tsx","../src/components/VideoOptions.tsx","../src/utils/format.ts","../src/components/VideoCompatAlert.tsx","../src/utils/videoInfo.ts","../src/VideoUploader.tsx"],"names":["jsx","jsxs","useState","Fragment","useCallback"],"mappings":";;;;;AAEO,IAAM,YAAA,GAAoC;AAAA,EAC/C,WAAA,EAAa,SAAA;AAAA,EACb,iBAAA,EAAmB,SAAA;AAAA,EACnB,eAAA,EAAiB,SAAA;AAAA,EACjB,oBAAA,EAAsB,SAAA;AAAA,EACtB,SAAA,EAAW,SAAA;AAAA,EACX,cAAA,EAAgB,SAAA;AAAA,EAChB,WAAA,EAAa,SAAA;AAAA,EACb,gBAAA,EAAkB,SAAA;AAAA,EAClB,UAAA,EAAY,SAAA;AAAA,EACZ,YAAA,EAAc,SAAA;AAAA,EACd,YAAA,EAAc,MAAA;AAAA,EACd,UAAA,EAAY;AACd,CAAA;AAEO,SAAS,aAAa,KAAA,EAAwC;AACnE,EAAA,OAAO,EAAE,GAAG,YAAA,EAAc,GAAG,KAAA,EAAM;AACrC;AAEO,SAAS,YAAY,KAAA,EAAoD;AAC9E,EAAA,OAAO;AAAA,IACL,iBAAiB,KAAA,CAAM,WAAA;AAAA,IACvB,wBAAwB,KAAA,CAAM,iBAAA;AAAA,IAC9B,aAAa,KAAA,CAAM,eAAA;AAAA,IACnB,mBAAmB,KAAA,CAAM,oBAAA;AAAA,IACzB,eAAe,KAAA,CAAM,SAAA;AAAA,IACrB,qBAAqB,KAAA,CAAM,cAAA;AAAA,IAC3B,iBAAiB,KAAA,CAAM,WAAA;AAAA,IACvB,uBAAuB,KAAA,CAAM,gBAAA;AAAA,IAC7B,gBAAgB,KAAA,CAAM,UAAA;AAAA,IACtB,kBAAkB,KAAA,CAAM,YAAA;AAAA,IACxB,iBAAiB,KAAA,CAAM,YAAA;AAAA,IACvB,eAAe,KAAA,CAAM;AAAA,GACvB;AACF;ACTO,SAAS,QAAA,CAAS;AAAA,EACvB,MAAA;AAAA,EACA,QAAA,GAAW,KAAA;AAAA,EACX,QAAA,GAAW,KAAA;AAAA,EACX,OAAA;AAAA,EACA,OAAA;AAAA,EACA,OAAA;AAAA,EACA,SAAA,GAAY,EAAA;AAAA,EACZ,KAAA;AAAA,EACA,KAAA;AAAA,EACA;AACF,CAAA,EAAkB;AAChB,EAAA,MAAM,CAAC,QAAA,EAAU,WAAW,CAAA,GAAI,SAAS,KAAK,CAAA;AAC9C,EAAA,MAAM,QAAA,GAAW,OAAyB,IAAI,CAAA;AAC9C,EAAA,MAAM,CAAA,GAAI,aAAa,KAAK,CAAA;AAC5B,EAAA,MAAM,IAAA,GAAO,YAAY,CAAC,CAAA;AAE1B,EAAA,MAAM,QAAA,GAAW,WAAA;AAAA,IACf,CAAC,KAAA,KAA0B;AACzB,MAAA,OAAO,KAAA,CAAM,MAAA,CAAO,CAAC,CAAA,KAAM;AACzB,QAAA,IAAI,OAAA,IAAW,CAAA,CAAE,IAAA,GAAO,OAAA,EAAS;AAC/B,UAAA,OAAA,GAAU,IAAI,MAAM,CAAA,MAAA,EAAS,CAAA,CAAE,IAAI,CAAA,sBAAA,EAAyB,OAAO,QAAQ,CAAC,CAAA;AAC5E,UAAA,OAAO,KAAA;AAAA,QACT;AACA,QAAA,OAAO,IAAA;AAAA,MACT,CAAC,CAAA;AAAA,IACH,CAAA;AAAA,IACA,CAAC,SAAS,OAAO;AAAA,GACnB;AAEA,EAAA,MAAM,UAAA,GAAa,WAAA;AAAA,IACjB,CAAC,CAAA,KAAiC;AAChC,MAAA,CAAA,CAAE,cAAA,EAAe;AACjB,MAAA,WAAA,CAAY,KAAK,CAAA;AACjB,MAAA,IAAI,QAAA,EAAU;AACd,MAAA,MAAM,KAAA,GAAQ,KAAA,CAAM,IAAA,CAAK,CAAA,CAAE,aAAa,KAAK,CAAA;AAC7C,MAAA,MAAM,KAAA,GAAQ,SAAS,KAAK,CAAA;AAC5B,MAAA,IAAI,KAAA,CAAM,MAAA,EAAQ,OAAA,CAAQ,KAAK,CAAA;AAAA,IACjC,CAAA;AAAA,IACA,CAAC,QAAA,EAAU,QAAA,EAAU,OAAO;AAAA,GAC9B;AAEA,EAAA,MAAM,YAAA,GAAe,WAAA;AAAA,IACnB,CAAC,CAAA,KAAqC;AACpC,MAAA,MAAM,QAAQ,KAAA,CAAM,IAAA,CAAK,EAAE,MAAA,CAAO,KAAA,IAAS,EAAE,CAAA;AAC7C,MAAA,MAAM,KAAA,GAAQ,SAAS,KAAK,CAAA;AAC5B,MAAA,IAAI,KAAA,CAAM,MAAA,EAAQ,OAAA,CAAQ,KAAK,CAAA;AAC/B,MAAA,CAAA,CAAE,OAAO,KAAA,GAAQ,EAAA;AAAA,IACnB,CAAA;AAAA,IACA,CAAC,UAAU,OAAO;AAAA,GACpB;AAEA,EAAA,MAAM,SAAA,GAA2B;AAAA,IAC/B,GAAG,IAAA;AAAA,IACH,MAAA,EAAQ,CAAA,WAAA,EAAc,QAAA,GAAW,2BAAA,GAA8B,oBAAoB,CAAA,CAAA;AAAA,IACnF,YAAA,EAAc,oBAAA;AAAA,IACd,UAAA,EAAY,WAAW,sBAAA,GAAyB,gBAAA;AAAA,IAChD,KAAA,EAAO,kBAAA;AAAA,IACP,MAAA,EAAQ,WAAW,aAAA,GAAgB,SAAA;AAAA,IACnC,OAAA,EAAS,WAAW,GAAA,GAAM,CAAA;AAAA,IAC1B,OAAA,EAAS,MAAA;AAAA,IACT,UAAA,EAAY,sCAAA;AAAA,IACZ,GAAG;AAAA,GACL;AAEA,EAAA,uBACE,IAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA;AAAA,MACA,KAAA,EAAO,SAAA;AAAA,MACP,UAAA,EAAY,CAAC,CAAA,KAAM;AAAE,QAAA,CAAA,CAAE,cAAA,EAAe;AAAG,QAAA,IAAI,CAAC,QAAA,EAAU,WAAA,CAAY,IAAI,CAAA;AAAA,MAAG,CAAA;AAAA,MAC3E,WAAA,EAAa,MAAM,WAAA,CAAY,KAAK,CAAA;AAAA,MACpC,MAAA,EAAQ,UAAA;AAAA,MACR,SAAS,MAAM,CAAC,QAAA,IAAY,QAAA,CAAS,SAAS,KAAA,EAAM;AAAA,MACpD,IAAA,EAAK,QAAA;AAAA,MACL,QAAA,EAAU,WAAW,EAAA,GAAK,CAAA;AAAA,MAC1B,SAAA,EAAW,CAAC,CAAA,KAAM;AAAE,QAAA,IAAI,CAAA,CAAE,QAAQ,OAAA,IAAW,CAAA,CAAE,QAAQ,GAAA,EAAK,QAAA,CAAS,SAAS,KAAA,EAAM;AAAA,MAAG,CAAA;AAAA,MACvF,YAAA,EAAW,aAAA;AAAA,MAEX,QAAA,EAAA;AAAA,wBAAA,GAAA;AAAA,UAAC,OAAA;AAAA,UAAA;AAAA,YACC,GAAA,EAAK,QAAA;AAAA,YACL,IAAA,EAAK,MAAA;AAAA,YACL,MAAA;AAAA,YACA,QAAA;AAAA,YACA,SAAA,EAAU,QAAA;AAAA,YACV,QAAA,EAAU,YAAA;AAAA,YACV;AAAA;AAAA,SACF;AAAA,QACC;AAAA;AAAA;AAAA,GACH;AAEJ;AC3GO,SAAS,YAAY,EAAE,QAAA,EAAU,SAAA,GAAY,EAAA,EAAI,OAAM,EAAqB;AACjF,EAAA,uBACEA,GAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA;AAAA,MACA,KAAA,EAAO,EAAE,MAAA,EAAQ,CAAA,EAAG,YAAA,EAAc,IAAA,EAAM,UAAA,EAAY,6BAAA,EAA+B,QAAA,EAAU,QAAA,EAAU,GAAG,KAAA,EAAM;AAAA,MAChH,IAAA,EAAK,aAAA;AAAA,MACL,eAAA,EAAe,QAAA;AAAA,MACf,eAAA,EAAe,CAAA;AAAA,MACf,eAAA,EAAe,GAAA;AAAA,MAEf,QAAA,kBAAAA,GAAAA;AAAA,QAAC,KAAA;AAAA,QAAA;AAAA,UACC,KAAA,EAAO,EAAE,MAAA,EAAQ,MAAA,EAAQ,YAAA,EAAc,IAAA,EAAM,UAAA,EAAY,6BAAA,EAA+B,KAAA,EAAO,CAAA,EAAG,QAAQ,CAAA,CAAA,CAAA,EAAK,YAAY,oBAAA;AAAqB;AAAA;AAClJ;AAAA,GACF;AAEJ;ACjBA,IAAM,YAAA,GAAe;AAAA,EACnB;AAAA,IACE,KAAA,EAAO,MAAA;AAAA,IACP,KAAA,EAAO,OAAA;AAAA,IACP,QAAA,EAAU,wBAAA;AAAA,IACV,WAAA,EAAa;AAAA,GACf;AAAA,EACA;AAAA,IACE,KAAA,EAAO,MAAA;AAAA,IACP,KAAA,EAAO,OAAA;AAAA,IACP,QAAA,EAAU,eAAA;AAAA,IACV,WAAA,EAAa;AAAA,GACf;AAAA,EACA;AAAA,IACE,KAAA,EAAO,KAAA;AAAA,IACP,KAAA,EAAO,KAAA;AAAA,IACP,QAAA,EAAU,uBAAA;AAAA,IACV,WAAA,EAAa,gJAAA;AAAA,IACb,OAAA,EAAS;AAAA;AAEb,CAAA;AAIA,IAAM,YAAA,GAAe;AAAA,EACnB;AAAA,IACE,KAAA,EAAO,aAAA;AAAA,IACP,KAAA,EAAO,iBAAA;AAAA,IACP,KAAA,EAAO,aAAA;AAAA,IACP,WAAA,EAAa;AAAA,GACf;AAAA,EACA;AAAA,IACE,KAAA,EAAO,KAAA;AAAA,IACP,KAAA,EAAO,KAAA;AAAA,IACP,WAAA,EAAa;AAAA,GACf;AAAA,EACA;AAAA,IACE,KAAA,EAAO,MAAA;AAAA,IACP,KAAA,EAAO,MAAA;AAAA,IACP,WAAA,EAAa;AAAA;AAEjB,CAAA;AAEA,IAAM,oBAAA,GAAuB;AAAA,EAC3B,EAAE,KAAA,EAAO,aAAA,EAAe,KAAA,EAAO,UAAA,EAAY,aAAa,+GAAA,EAAuG;AAAA,EAC/J,EAAE,KAAA,EAAO,KAAA,EAAe,KAAA,EAAO,KAAA,EAAY,aAAa,sDAAA,EAAoD;AAAA,EAC5G,EAAE,KAAA,EAAO,MAAA,EAAe,KAAA,EAAO,MAAA,EAAY,aAAa,oDAAA;AAC1D,CAAA;AAEA,IAAM,cAAA,GAAiB;AAAA,EACrB,EAAE,KAAA,EAAO,UAAA,EAAY,KAAA,EAAO,UAAA,EAAiB,aAAa,uCAAA,EAAqC;AAAA,EAC/F,EAAE,KAAA,EAAO,QAAA,EAAY,KAAA,EAAO,kBAAA,EAAiB,aAAa,oEAAA,EAA6D;AAAA,EACvH,EAAE,KAAA,EAAO,KAAA,EAAY,KAAA,EAAO,cAAA,EAAiB,aAAa,wCAAA;AAC5D,CAAA;AAEA,IAAM,WAAA,GAAc,CAAC,KAAA,EAAO,KAAA,EAAO,OAAO,KAAA,EAAO,KAAA,EAAO,MAAA,EAAQ,MAAA,EAAQ,MAAM,CAAA;AAC9E,IAAM,iBAAA,GAA4C;AAAA,EAChD,KAAA,EAAO,MAAA;AAAA,EAAQ,KAAA,EAAO,MAAA;AAAA,EAAQ,KAAA,EAAO,MAAA;AAAA,EAAQ,KAAA,EAAO,MAAA;AAAA,EACpD,KAAA,EAAO,SAAA;AAAA,EAAW,MAAA,EAAQ,eAAA;AAAA,EAAiB,MAAA,EAAQ,UAAA;AAAA,EAAY,MAAA,EAAQ;AACzE,CAAA;AAIA,SAAS,GAAA,CAAI,MAAA,EAAiB,QAAA,GAAW,KAAA,EAAsB;AAC7D,EAAA,IAAI,UAAU,OAAO;AAAA,IACnB,MAAA,EAAQ,kCAAA;AAAA,IAAoC,UAAA,EAAY,wBAAA;AAAA,IACxD,KAAA,EAAO,uBAAA;AAAA,IAAyB,OAAA,EAAS,UAAA;AAAA,IAAY,YAAA,EAAc,CAAA;AAAA,IACnE,QAAA,EAAU,EAAA;AAAA,IAAI,UAAA,EAAY,GAAA;AAAA,IAAK,MAAA,EAAQ;AAAA,GACzC;AACA,EAAA,OAAO,MAAA,GACH,EAAE,MAAA,EAAQ,mBAAA,EAAqB,YAAY,SAAA,EAAW,KAAA,EAAO,MAAA,EAAQ,OAAA,EAAS,YAAY,YAAA,EAAc,CAAA,EAAG,QAAA,EAAU,EAAA,EAAI,YAAY,GAAA,EAAK,MAAA,EAAQ,SAAA,EAAU,GAC5J,EAAE,MAAA,EAAQ,kCAAA,EAAoC,UAAA,EAAY,wBAAA,EAA0B,OAAO,uBAAA,EAAyB,OAAA,EAAS,UAAA,EAAY,YAAA,EAAc,GAAG,QAAA,EAAU,EAAA,EAAI,UAAA,EAAY,GAAA,EAAK,QAAQ,SAAA,EAAU;AACjN;AAEA,SAAS,KAAA,CAAM,EAAE,QAAA,EAAS,EAAkC;AAC1D,EAAA,uBAAOA,GAAAA,CAAC,KAAA,EAAA,EAAI,OAAO,EAAE,QAAA,EAAU,IAAI,UAAA,EAAY,GAAA,EAAK,aAAA,EAAe,WAAA,EAAa,eAAe,QAAA,EAAU,YAAA,EAAc,GAAG,KAAA,EAAO,wBAAA,IAA6B,QAAA,EAAS,CAAA;AACzK;AAEA,SAAS,IAAA,CAAK,EAAE,QAAA,EAAS,EAAkC;AACzD,EAAA,uBAAOA,GAAAA,CAAC,GAAA,EAAA,EAAE,KAAA,EAAO,EAAE,SAAA,EAAW,CAAA,EAAG,QAAA,EAAU,EAAA,EAAI,KAAA,EAAO,wBAAA,EAA0B,UAAA,EAAY,IAAA,IAAS,QAAA,EAAS,CAAA;AAChH;AAEA,SAAS,IAAA,CAAK,EAAE,QAAA,EAAS,EAAkC;AACzD,EAAA,uBACEC,IAAAA,CAAC,KAAA,EAAA,EAAI,OAAO,EAAE,SAAA,EAAW,GAAG,OAAA,EAAS,MAAA,EAAQ,KAAK,CAAA,EAAG,UAAA,EAAY,yBAAyB,MAAA,EAAQ,iCAAA,EAAmC,cAAc,CAAA,EAAG,OAAA,EAAS,YAAW,EACxK,QAAA,EAAA;AAAA,oBAAAD,GAAAA,CAAC,UAAK,KAAA,EAAO,EAAE,UAAU,EAAA,EAAI,UAAA,EAAY,CAAA,EAAE,EAAG,QAAA,EAAA,QAAA,EAAC,CAAA;AAAA,oBAC/CA,GAAAA,CAAC,MAAA,EAAA,EAAK,KAAA,EAAO,EAAE,QAAA,EAAU,EAAA,EAAI,KAAA,EAAO,SAAA,EAAW,UAAA,EAAY,IAAA,EAAK,EAAI,QAAA,EAAS;AAAA,GAAA,EAC/E,CAAA;AAEJ;AAEA,SAAS,IAAA,CAAK,EAAE,QAAA,EAAS,EAAkC;AACzD,EAAA,uBACEC,IAAAA,CAAC,KAAA,EAAA,EAAI,OAAO,EAAE,SAAA,EAAW,GAAG,OAAA,EAAS,MAAA,EAAQ,KAAK,CAAA,EAAG,UAAA,EAAY,yBAAyB,MAAA,EAAQ,iCAAA,EAAmC,cAAc,CAAA,EAAG,OAAA,EAAS,YAAW,EACxK,QAAA,EAAA;AAAA,oBAAAD,GAAAA,CAAC,UAAK,KAAA,EAAO,EAAE,UAAU,EAAA,EAAI,UAAA,EAAY,CAAA,EAAE,EAAG,QAAA,EAAA,QAAA,EAAC,CAAA;AAAA,oBAC/CA,GAAAA,CAAC,MAAA,EAAA,EAAK,KAAA,EAAO,EAAE,QAAA,EAAU,EAAA,EAAI,KAAA,EAAO,uBAAA,EAAyB,UAAA,EAAY,IAAA,EAAK,EAAI,QAAA,EAAS;AAAA,GAAA,EAC7F,CAAA;AAEJ;AAEA,SAAS,OAAO,EAAE,OAAA,EAAS,UAAU,KAAA,EAAO,IAAA,EAAM,UAAS,EAExD;AACD,EAAA,uBACEC,IAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MAAI,OAAO,EAAE,OAAA,EAAS,MAAA,EAAQ,UAAA,EAAY,cAAc,GAAA,EAAK,CAAA,EAAG,MAAA,EAAQ,QAAA,GAAW,gBAAgB,SAAA,EAAW,UAAA,EAAY,QAAQ,OAAA,EAAS,QAAA,GAAW,MAAM,CAAA,EAAE;AAAA,MAC7J,OAAA,EAAS,MAAM,CAAC,QAAA,IAAY,QAAA,EAAS;AAAA,MACrC,QAAA,EAAA;AAAA,wBAAAD,GAAAA,CAAC,MAAA,EAAA,EAAK,KAAA,EAAO,EAAE,QAAA,EAAU,YAAY,OAAA,EAAS,cAAA,EAAgB,KAAA,EAAO,EAAA,EAAI,MAAA,EAAQ,EAAA,EAAI,cAAc,CAAA,EAAG,UAAA,EAAY,CAAA,EAAG,SAAA,EAAW,CAAA,EAAG,UAAA,EAAa,OAAA,IAAW,CAAC,QAAA,GAAY,SAAA,GAAY,wBAAA,EAA0B,UAAA,EAAY,kBAAA,EAAmB,EAC3O,0BAAAA,GAAAA,CAAC,MAAA,EAAA,EAAK,KAAA,EAAO,EAAE,QAAA,EAAU,UAAA,EAAY,GAAA,EAAK,CAAA,EAAG,IAAA,EAAO,OAAA,IAAW,CAAC,QAAA,GAAY,EAAA,GAAK,CAAA,EAAG,OAAO,EAAA,EAAI,MAAA,EAAQ,EAAA,EAAI,YAAA,EAAc,KAAA,EAAO,UAAA,EAAY,MAAA,EAAQ,SAAA,EAAW,0BAAA,EAA4B,UAAA,EAAY,YAAA,EAAa,EAAG,CAAA,EACzN,CAAA;AAAA,wBACAC,KAAC,KAAA,EAAA,EACC,QAAA,EAAA;AAAA,0BAAAD,GAAAA,CAAC,MAAA,EAAA,EAAK,KAAA,EAAO,EAAE,QAAA,EAAU,EAAA,EAAI,UAAA,EAAY,GAAA,EAAK,KAAA,EAAO,QAAA,GAAW,uBAAA,GAA0B,wBAAA,IAA6B,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,UAC5H,IAAA,oBAAQA,GAAAA,CAAC,GAAA,EAAA,EAAE,OAAO,EAAE,QAAA,EAAU,EAAA,EAAI,KAAA,EAAO,0BAA0B,SAAA,EAAW,CAAA,EAAG,UAAA,EAAY,GAAA,IAAQ,QAAA,EAAA,IAAA,EAAK;AAAA,SAAA,EAC7G;AAAA;AAAA;AAAA,GACF;AAEJ;AAEA,SAAS,OAAA,GAAU;AACjB,EAAA,uBAAOA,GAAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAO,EAAE,MAAA,EAAQ,CAAA,EAAG,UAAA,EAAY,wBAAA,EAA0B,MAAA,EAAQ,OAAA,EAAQ,EAAG,CAAA;AAC3F;AAUO,SAAS,YAAA,CAAa,EAAE,KAAA,EAAO,QAAA,EAAU,OAAM,EAAsB;AAC1E,EAAA,MAAM,CAAC,QAAA,EAAU,WAAW,CAAA,GAAIE,SAAS,KAAK,CAAA;AAE9C,EAAA,MAAM,KAAA,GAAiB,MAAM,KAAA,IAAS,MAAA;AACtC,EAAA,MAAM,WAAA,GAAiB,MAAM,WAAA,IAAe,MAAA;AAC5C,EAAA,MAAM,SAAiB,WAAA,KAAgB,MAAA;AACvC,EAAA,MAAM,WAAA,GAAiB,MAAA,GAAS,EAAC,GAAK,WAAA;AACtC,EAAA,MAAM,UAAA,GAAiB,MAAM,UAAA,IAAc,aAAA;AAC3C,EAAA,MAAM,aAAA,GAAiB,MAAM,aAAA,IAAiB,UAAA;AAC9C,EAAA,MAAM,aAAA,GAAiB,MAAM,aAAA,IAAiB,IAAA;AAC9C,EAAA,MAAM,OAAA,GAAiB,MAAM,GAAA,IAAO,UAAA;AACpC,EAAA,MAAM,YAAA,GAAiB,KAAA,KAAU,MAAA,IAAU,KAAA,KAAU,KAAA;AACrD,EAAA,MAAM,eAAiB,UAAA,KAAe,aAAA;AACtC,EAAA,MAAM,aAAA,GAAiB,UAAA,KAAe,KAAA,IAAS,UAAA,KAAe,MAAA;AAC9D,EAAA,MAAM,gBAAiB,YAAA,CAAa,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,UAAU,KAAK,CAAA;AAGjE,EAAA,SAAS,UAAU,CAAA,EAAQ;AACzB,IAAA,IAAI,MAAA,EAAQ;AAAE,MAAA,QAAA,CAAS,EAAE,GAAG,KAAA,EAAO,aAAa,CAAC,CAAC,GAAG,CAAA;AAAG,MAAA;AAAA,IAAQ;AAChE,IAAA,MAAM,IAAA,GAAO,WAAA,CAAY,QAAA,CAAS,CAAC,IAAI,WAAA,CAAY,MAAA,CAAO,CAAC,CAAA,KAAM,MAAM,CAAC,CAAA,GAAI,CAAC,GAAG,aAAa,CAAC,CAAA;AAC9F,IAAA,QAAA,CAAS,EAAE,GAAG,KAAA,EAAO,WAAA,EAAa,KAAK,MAAA,KAAW,CAAA,GAAI,MAAA,GAAU,IAAA,EAAgB,CAAA;AAAA,EAClF;AAEA,EAAA,uBACED,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,uBAAsB,KAAA,EAGnC,QAAA,EAAA;AAAA,oBAAAA,KAAC,KAAA,EAAA,EACC,QAAA,EAAA;AAAA,sBAAAD,GAAAA,CAAC,SAAM,QAAA,EAAA,qBAAA,EAAgB,CAAA;AAAA,sBAGvBC,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,MAAA,EACb,QAAA,EAAA;AAAA,wBAAAD,GAAAA,CAAC,SAAI,SAAA,EAAU,6BAAA,EACZ,uBAAa,GAAA,CAAI,CAAC,sBACjBA,GAAAA;AAAA,UAAC,QAAA;AAAA,UAAA;AAAA,YAAqB,IAAA,EAAK,QAAA;AAAA,YACzB,OAAA,EAAS,MAAM,QAAA,CAAS,EAAE,GAAG,KAAA,EAAO,KAAA,EAAO,CAAA,CAAE,KAAA,EAAmD,CAAA;AAAA,YAChG,KAAA,EAAO,GAAA,CAAI,KAAA,KAAU,CAAA,CAAE,KAAK,CAAA;AAAA,YAE3B,QAAA,EAAA,CAAA,CAAE;AAAA,WAAA;AAAA,UAJQ,CAAA,CAAE;AAAA,SAMhB,CAAA,EACH,CAAA;AAAA,QACC,aAAA,oBACCC,IAAAA,CAAC,IAAA,EAAA,EAAK,QAAA,EAAA;AAAA,0BAAAA,KAAC,QAAA,EAAA,EAAO,KAAA,EAAO,EAAE,KAAA,EAAO,0BAAyB,EAAI,QAAA,EAAA;AAAA,YAAA,aAAA,CAAc,QAAA;AAAA,YAAS;AAAA,WAAA,EAAC,CAAA;AAAA,UAAU,GAAA;AAAA,UAAK,aAAA,CAAc;AAAA,SAAA,EAAY,CAAA;AAAA,QAE7H,SAAA,KAAc,aAAA,IAAiB,EAAC,CAAA,IAAO,aAAA,CAAuC,2BAC7ED,GAAAA,CAAC,IAAA,EAAA,EAAO,QAAA,EAAA,aAAA,CAAuC,OAAA,EAAQ;AAAA,OAAA,EAE3D,CAAA;AAAA,sBAGAC,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,MAAA,EACb,QAAA,EAAA;AAAA,wBAAAD,GAAAA,CAAC,SAAM,QAAA,EAAA,4CAAA,EAAiC,CAAA;AAAA,wBACxCC,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,6BAAA,EACb,QAAA,EAAA;AAAA,0BAAAD,IAAC,QAAA,EAAA,EAAO,IAAA,EAAK,UAAS,OAAA,EAAS,MAAM,SAAS,EAAE,GAAG,KAAA,EAAO,WAAA,EAAa,QAAQ,CAAA,EAAG,OAAO,GAAA,CAAI,MAAM,GAAG,QAAA,EAAA,eAAA,EAEtG,CAAA;AAAA,UACC,WAAA,CAAY,GAAA,CAAI,CAAC,CAAA,qBAChBA,GAAAA,CAAC,QAAA,EAAA,EAAe,IAAA,EAAK,QAAA,EAAS,OAAA,EAAS,MAAM,SAAA,CAAU,CAAQ,CAAA,EAAG,KAAA,EAAO,GAAA,CAAI,CAAC,MAAA,IAAU,WAAA,CAAY,QAAA,CAAS,CAAC,CAAC,CAAA,EAC5G,QAAA,EAAA,iBAAA,CAAkB,CAAC,CAAA,EAAA,EADT,CAEb,CACD;AAAA,SAAA,EACH,CAAA;AAAA,wBACAA,GAAAA,CAAC,IAAA,EAAA,EACE,QAAA,EAAA,MAAA,GACG,sFACA,sDAAA,EACN;AAAA,OAAA,EACF,CAAA;AAAA,sBAGAC,KAAC,KAAA,EAAA,EAAI,KAAA,EAAO,EAAE,OAAA,EAAS,YAAA,GAAe,CAAA,GAAI,IAAA,EAAK,EAC7C,QAAA,EAAA;AAAA,wBAAAD,GAAAA,CAAC,SAAM,QAAA,EAAA,+CAAA,EAA6C,CAAA;AAAA,QACnD,CAAC,QAAA,mBACAC,IAAAA,CAAA,QAAA,EAAA,EACE,QAAA,EAAA;AAAA,0BAAAD,GAAAA;AAAA,YAAC,MAAA;AAAA,YAAA;AAAA,cACC,SAAS,OAAA,KAAY,UAAA;AAAA,cACrB,QAAA,EAAU,MAAM,QAAA,CAAS,EAAE,GAAG,KAAA,EAAO,GAAA,EAAK,OAAA,KAAY,UAAA,GAAa,KAAA,GAAQ,UAAA,EAAY,CAAA;AAAA,cACvF,KAAA,EAAM,wCAAA;AAAA,cACN,IAAA,EAAK,8EAAA;AAAA,cACL,UAAU,CAAC;AAAA;AAAA,WACb;AAAA,UACC,CAAC,YAAA,oBACAA,GAAAA,CAAC,QAAK,QAAA,EAAA,mJAAA,EAAwI;AAAA,SAAA,EAElJ,CAAA,mBAEAC,IAAAA,CAAA,QAAA,EAAA,EACE,QAAA,EAAA;AAAA,0BAAAA,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,6BAAA,EACb,QAAA,EAAA;AAAA,4BAAAD,GAAAA,CAAC,YAAO,IAAA,EAAK,QAAA,EAAS,SAAS,MAAM,YAAA,IAAgB,QAAA,CAAS,EAAE,GAAG,KAAA,EAAO,KAAK,UAAA,EAAY,CAAA,EAAG,KAAA,EAAO,GAAA,CAAI,OAAA,KAAY,cAAc,YAAA,EAAc,CAAC,YAAY,CAAA,EAAG,QAAA,EAAA,YAAA,EAEjK,CAAA;AAAA,4BACAA,IAAC,QAAA,EAAA,EAAO,IAAA,EAAK,UAAS,OAAA,EAAS,MAAM,QAAA,CAAS,EAAE,GAAG,KAAA,EAAO,KAAK,KAAA,EAAO,GAAG,KAAA,EAAO,GAAA,CAAI,YAAY,KAAA,IAAS,CAAC,YAAY,CAAA,EAAG,QAAA,EAAA,oBAAA,EAEzH;AAAA,WAAA,EACF,CAAA;AAAA,UACC,CAAC,YAAA,mBACEA,GAAAA,CAAC,IAAA,EAAA,EAAK,QAAA,EAAA,6HAAA,EAAkH,CAAA,mBACxHA,GAAAA,CAAC,IAAA,EAAA,EAAM,QAAA,EAAA,OAAA,KAAY,UAAA,GACf,qGACA,uEAAA,EAA6D;AAAA,SAAA,EAEvE;AAAA,OAAA,EAEJ;AAAA,KAAA,EACF,CAAA;AAAA,oBAEAA,IAAC,OAAA,EAAA,EAAQ,CAAA;AAAA,oBAGTC,KAAC,KAAA,EAAA,EACC,QAAA,EAAA;AAAA,sBAAAD,GAAAA,CAAC,SAAM,QAAA,EAAA,UAAA,EAAK,CAAA;AAAA,MAEX,CAAC,QAAA,mBACAC,IAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,MAAA,EACb,QAAA,EAAA;AAAA,wBAAAD,GAAAA,CAAC,SAAI,SAAA,EAAU,6BAAA,EACZ,uBAAa,GAAA,CAAI,CAAC,sBACjBC,IAAAA;AAAA,UAAC,QAAA;AAAA,UAAA;AAAA,YAAqB,IAAA,EAAK,QAAA;AAAA,YACzB,OAAA,EAAS,MAAM,QAAA,CAAS,EAAE,GAAG,KAAA,EAAO,UAAA,EAAY,CAAA,CAAE,KAAA,EAAO,CAAA;AAAA,YACzD,KAAA,EAAO,GAAA,CAAI,UAAA,KAAe,CAAA,CAAE,KAAK,CAAA;AAAA,YAEhC,QAAA,EAAA;AAAA,cAAA,CAAA,CAAE,KAAA;AAAA,cACF,OAAA,IAAW,CAAA,IAAK,CAAA,CAAE,KAAA,mBACjBD,GAAAA,CAAC,MAAA,EAAA,EAAK,KAAA,EAAO,EAAE,UAAA,EAAY,CAAA,EAAG,QAAA,EAAU,CAAA,EAAG,YAAY,GAAA,EAAK,UAAA,EAAY,wBAAA,EAA0B,YAAA,EAAc,CAAA,EAAG,OAAA,EAAS,SAAA,EAAW,aAAA,EAAe,QAAA,EAAS,EAC5J,QAAA,EAAA,CAAA,CAAE,KAAA,EACL,CAAA,GACE;AAAA;AAAA,WAAA;AAAA,UATO,CAAA,CAAE;AAAA,SAWhB,CAAA,EACH,CAAA;AAAA,wBACAA,GAAAA,CAAC,IAAA,EAAA,EAAM,QAAA,EAAA,YAAA,CAAa,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,KAAA,KAAU,UAAU,CAAA,EAAG,WAAA,EAAY;AAAA,OAAA,EACvE,CAAA,mBAEAC,IAAAA,CAAA,QAAA,EAAA,EAEE,QAAA,EAAA;AAAA,wBAAAA,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,MAAA,EACb,QAAA,EAAA;AAAA,0BAAAD,GAAAA,CAAC,SAAM,QAAA,EAAA,6BAAA,EAAwB,CAAA;AAAA,0BAC/BA,IAAC,KAAA,EAAA,EAAI,SAAA,EAAU,+BACZ,QAAA,EAAA,oBAAA,CAAqB,GAAA,CAAI,CAAC,CAAA,qBACzBA,GAAAA;AAAA,YAAC,QAAA;AAAA,YAAA;AAAA,cAAqB,IAAA,EAAK,QAAA;AAAA,cACzB,OAAA,EAAS,MAAM,QAAA,CAAS,EAAE,GAAG,KAAA,EAAO,UAAA,EAAY,CAAA,CAAE,KAAA,EAAO,CAAA;AAAA,cACzD,KAAA,EAAO,GAAA,CAAI,UAAA,KAAe,CAAA,CAAE,KAAK,CAAA;AAAA,cAEhC,QAAA,EAAA,CAAA,CAAE;AAAA,aAAA;AAAA,YAJQ,CAAA,CAAE;AAAA,WAMhB,CAAA,EACH,CAAA;AAAA,0BACAA,GAAAA,CAAC,IAAA,EAAA,EAAM,QAAA,EAAA,oBAAA,CAAqB,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,KAAA,KAAU,UAAU,CAAA,EAAG,WAAA,EAAY,CAAA;AAAA,UAC5E,aAAA,oBACCC,IAAAA,CAAC,IAAA,EAAA,EAAK,QAAA,EAAA;AAAA,YAAA,+CAAA;AAAA,4BAA0CD,GAAAA,CAAC,QAAA,EAAA,EAAO,QAAA,EAAA,4BAAA,EAA0B,CAAA;AAAA,YAAS,MAAA;AAAA,4BAAIA,GAAAA,CAAC,QAAA,EAAA,EAAO,QAAA,EAAA,UAAA,EAAQ,CAAA;AAAA,YAAS;AAAA,WAAA,EAA+B;AAAA,SAAA,EAE3J,CAAA;AAAA,wBAGAC,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,MAAA,EACb,QAAA,EAAA;AAAA,0BAAAD,GAAAA,CAAC,SAAM,QAAA,EAAA,oBAAA,EAAe,CAAA;AAAA,0BACtBA,IAAC,KAAA,EAAA,EAAI,SAAA,EAAU,+BACZ,QAAA,EAAA,cAAA,CAAe,GAAA,CAAI,CAAC,CAAA,qBACnBA,GAAAA;AAAA,YAAC,QAAA;AAAA,YAAA;AAAA,cAAqB,IAAA,EAAK,QAAA;AAAA,cACzB,OAAA,EAAS,MAAM,QAAA,CAAS,EAAE,GAAG,KAAA,EAAO,aAAA,EAAe,CAAA,CAAE,KAAA,EAAO,CAAA;AAAA,cAC5D,KAAA,EAAO,GAAA,CAAI,aAAA,KAAkB,CAAA,CAAE,KAAK,CAAA;AAAA,cAEnC,QAAA,EAAA,CAAA,CAAE;AAAA,aAAA;AAAA,YAJQ,CAAA,CAAE;AAAA,WAMhB,CAAA,EACH,CAAA;AAAA,0BACAA,GAAAA,CAAC,IAAA,EAAA,EAAM,QAAA,EAAA,cAAA,CAAe,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,KAAA,KAAU,aAAa,CAAA,EAAG,WAAA,EAAY;AAAA,SAAA,EAC5E,CAAA;AAAA,QAGC,YAAA,oBACCC,IAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,MAAA,EACb,QAAA,EAAA;AAAA,0BAAAD,GAAAA,CAAC,SAAM,QAAA,EAAA,+BAAA,EAA6B,CAAA;AAAA,0BACpCA,GAAAA;AAAA,YAAC,MAAA;AAAA,YAAA;AAAA,cACC,OAAA,EAAS,aAAA;AAAA,cACT,QAAA,EAAU,MAAM,QAAA,CAAS,EAAE,GAAG,KAAA,EAAO,aAAA,EAAe,CAAC,aAAA,EAAe,CAAA;AAAA,cACpE,KAAA,EAAM,oDAAA;AAAA,cACN,IAAA,EAAK;AAAA;AAAA,WACP;AAAA,UACC,CAAC,aAAA,oBACAA,GAAAA,CAAC,QAAK,QAAA,EAAA,yGAAA,EAA2F;AAAA,SAAA,EAErG;AAAA,OAAA,EAEJ,CAAA;AAAA,sBAIFA,GAAAA;AAAA,QAAC,MAAA;AAAA,QAAA;AAAA,UACC,OAAA,EAAS,MAAM,aAAA,IAAiB,KAAA;AAAA,UAChC,QAAA,EAAU,MAAM,QAAA,CAAS,EAAE,GAAG,OAAO,aAAA,EAAe,CAAC,KAAA,CAAM,aAAA,EAAe,CAAA;AAAA,UAC1E,KAAA,EAAM,qCAAA;AAAA,UACN,IAAA,EAAK;AAAA;AAAA;AACP,KAAA,EACF,CAAA;AAAA,oBAEAA,IAAC,OAAA,EAAA,EAAQ,CAAA;AAAA,oBAGTC,KAAC,KAAA,EAAA,EACC,QAAA,EAAA;AAAA,sBAAAD,GAAAA,CAAC,SAAM,QAAA,EAAA,yBAAA,EAAuB,CAAA;AAAA,sBAC9BA,GAAAA;AAAA,QAAC,MAAA;AAAA,QAAA;AAAA,UACC,OAAA,EAAS,MAAM,UAAA,IAAc,IAAA;AAAA,UAC7B,QAAA,EAAU,MAAM,QAAA,CAAS,EAAE,GAAG,KAAA,EAAO,UAAA,EAAY,EAAE,KAAA,CAAM,UAAA,IAAc,IAAA,CAAA,EAAO,CAAA;AAAA,UAC9E,KAAA,EAAM,kCAAA;AAAA,UACN,IAAA,EAAK;AAAA;AAAA;AACP,KAAA,EACF,CAAA;AAAA,oBAEAA,IAAC,OAAA,EAAA,EAAQ,CAAA;AAAA,oBAGTC,KAAC,KAAA,EAAA,EACC,QAAA,EAAA;AAAA,sBAAAD,GAAAA,CAAC,SAAM,QAAA,EAAA,YAAA,EAAU,CAAA;AAAA,sBACjBA,GAAAA;AAAA,QAAC,MAAA;AAAA,QAAA;AAAA,UACC,OAAA,EAAS,MAAM,UAAA,IAAc,KAAA;AAAA,UAC7B,QAAA,EAAU,MAAM,QAAA,CAAS,EAAE,GAAG,OAAO,UAAA,EAAY,CAAC,KAAA,CAAM,UAAA,EAAY,CAAA;AAAA,UACpE,KAAA,EAAM,iDAAA;AAAA,UACN,IAAA,EAAK;AAAA;AAAA;AACP,KAAA,EACF,CAAA;AAAA,oBAGAA,GAAAA;AAAA,MAAC,QAAA;AAAA,MAAA;AAAA,QACC,IAAA,EAAK,QAAA;AAAA,QACL,SAAS,MAAM,WAAA,CAAY,CAAC,CAAA,KAAM,CAAC,CAAC,CAAA;AAAA,QACpC,OAAO,EAAE,SAAA,EAAW,cAAc,QAAA,EAAU,EAAA,EAAI,OAAO,uBAAA,EAAyB,UAAA,EAAY,QAAQ,MAAA,EAAQ,MAAA,EAAQ,QAAQ,SAAA,EAAW,OAAA,EAAS,GAAG,cAAA,EAAgB,WAAA,EAAa,qBAAqB,CAAA,EAAE;AAAA,QAEtM,qBAAW,+BAAA,GAA6B;AAAA;AAAA;AAC3C,GAAA,EACF,CAAA;AAEJ;;;ACjXO,SAAS,YAAY,KAAA,EAAuB;AACjD,EAAA,IAAI,KAAA,GAAQ,IAAA,EAAM,OAAO,CAAA,EAAG,KAAK,CAAA,EAAA,CAAA;AACjC,EAAA,IAAI,KAAA,GAAQ,QAAQ,CAAA,EAAG,OAAO,IAAI,KAAA,GAAQ,IAAA,EAAM,OAAA,CAAQ,CAAC,CAAC,CAAA,GAAA,CAAA;AAC1D,EAAA,IAAI,KAAA,GAAQ,IAAA,IAAQ,CAAA,EAAG,OAAO,CAAA,EAAA,CAAI,QAAQ,IAAA,IAAQ,CAAA,EAAG,OAAA,CAAQ,CAAC,CAAC,CAAA,GAAA,CAAA;AAC/D,EAAA,OAAO,IAAI,KAAA,GAAQ,IAAA,IAAQ,CAAA,EAAG,OAAA,CAAQ,CAAC,CAAC,CAAA,GAAA,CAAA;AAC1C;ACAA,IAAM,cAAA,GAAoE;AAAA,EACxE,GAAA,EAAM,EAAE,KAAA,EAAO,wCAAA,EAAoC,QAAQ,gHAAA,EAAwG;AAAA,EACnK,GAAA,EAAM,EAAE,KAAA,EAAO,wCAAA,EAAoC,QAAQ,wFAAA,EAAmF;AAAA,EAC9I,GAAA,EAAM,EAAE,KAAA,EAAO,wCAAA,EAAoC,QAAQ,+EAAA,EAA0E;AAAA,EACrI,cAAA,EAAgB,EAAE,KAAA,EAAO,8BAAA,EAA0B,QAAQ,4DAAA,EAA6D;AAAA,EACxH,cAAA,EAAgB,EAAE,KAAA,EAAO,8BAAA,EAA0B,QAAQ,sCAAA;AAC7D,CAAA;AAEA,IAAM,kBAAA,GAAwE;AAAA,EAC5E,GAAA,EAAe,EAAE,KAAA,EAAO,8BAAA,EAA6B,QAAQ,wFAAA,EAAmF;AAAA,EAChJ,aAAA,EAAe,EAAE,KAAA,EAAO,8BAAA,EAA6B,QAAQ,wFAAA,EAAmF;AAAA,EAChJ,SAAA,EAAe,EAAE,KAAA,EAAO,oCAAA,EAAmC,QAAQ,4CAAA,EAA6C;AAAA,EAChH,GAAA,EAAe,EAAE,KAAA,EAAO,kCAAA,EAAiC,QAAQ,4CAAA;AACnE,CAAA;AAEA,SAAS,aAAa,KAAA,EAA4D;AAChF,EAAA,IAAI,KAAA,CAAM,SAAS,mBAAA,EAAqB;AACtC,IAAA,OAAO,cAAA,CAAe,KAAA,CAAM,KAAK,CAAA,IAAK,EAAE,KAAA,EAAO,CAAA,MAAA,EAAS,KAAA,CAAM,KAAK,CAAA,iBAAA,CAAA,EAAkB,MAAA,EAAQ,+CAAA,EAAgD;AAAA,EAC/I;AACA,EAAA,MAAM,GAAA,GAAM,MAAA,CAAO,IAAA,CAAK,kBAAkB,CAAA,CAAE,IAAA,CAAK,CAAC,CAAA,KAAM,KAAA,CAAM,SAAA,CAAU,QAAA,CAAS,CAAC,CAAC,CAAA;AACnF,EAAA,OAAA,CAAQ,GAAA,GAAM,kBAAA,CAAmB,GAAG,CAAA,GAAI,IAAA,KAAS,EAAE,KAAA,EAAO,CAAA,UAAA,EAAa,KAAA,CAAM,SAAS,CAAA,iBAAA,CAAA,EAAkB,MAAA,EAAQ,4CAAA,EAA6C;AAC/J;AAEA,SAAS,GAAA,CAAI,GAAW,IAAA,EAAc;AAAE,EAAA,OAAO,GAAG,CAAA,CAAE,cAAA,CAAe,OAAO,CAAC,GAAG,IAAI,CAAA,CAAA;AAAI;AACtF,SAAS,YAAY,IAAA,EAAc;AACjC,EAAA,MAAM,CAAA,GAAI,IAAA,CAAK,KAAA,CAAM,IAAA,GAAO,IAAI,CAAA;AAChC,EAAA,MAAM,CAAA,GAAI,IAAA,CAAK,KAAA,CAAO,IAAA,GAAO,OAAQ,EAAE,CAAA;AACvC,EAAA,MAAM,CAAA,GAAI,IAAA,CAAK,KAAA,CAAM,IAAA,GAAO,EAAE,CAAA;AAC9B,EAAA,IAAI,CAAA,GAAI,GAAG,OAAO,CAAA,EAAG,CAAC,CAAA,EAAA,EAAK,CAAC,KAAK,CAAC,CAAA,CAAA,CAAA;AAClC,EAAA,IAAI,IAAI,CAAA,EAAG,OAAO,CAAA,EAAG,CAAC,KAAK,CAAC,CAAA,CAAA,CAAA;AAC5B,EAAA,OAAO,GAAG,CAAC,CAAA,CAAA,CAAA;AACb;AAQO,SAAS,gBAAA,CAAiB,EAAE,IAAA,EAAM,MAAA,EAAQ,WAAU,EAAU;AACnE,EAAA,IAAI,SAAA,EAAW;AACb,IAAA,uBACEC,IAAAA,CAAC,KAAA,EAAA,EAAI,OAAO,EAAE,OAAA,EAAS,QAAQ,UAAA,EAAY,QAAA,EAAU,KAAK,CAAA,EAAG,OAAA,EAAS,aAAa,UAAA,EAAY,uBAAA,EAAyB,QAAQ,iCAAA,EAAmC,YAAA,EAAc,IAAG,EAClL,QAAA,EAAA;AAAA,sBAAAD,IAAC,MAAA,EAAA,EAAK,KAAA,EAAO,EAAE,QAAA,EAAU,EAAA,IAAM,QAAA,EAAA,WAAA,EAAE,CAAA;AAAA,sBACjCA,GAAAA,CAAC,MAAA,EAAA,EAAK,KAAA,EAAO,EAAE,UAAU,EAAA,EAAI,KAAA,EAAO,uBAAA,EAAwB,EAAG,QAAA,EAAA,0BAAA,EAAmB;AAAA,KAAA,EACpF,CAAA;AAAA,EAEJ;AAEA,EAAA,MAAM,IAAI,IAAA,CAAK,KAAA;AAEf,EAAA,uBACEC,IAAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAO,EAAE,OAAA,EAAS,MAAA,EAAQ,aAAA,EAAe,QAAA,EAAU,GAAA,EAAK,CAAA,EAAE,EAE7D,QAAA,EAAA;AAAA,oBAAAA,IAAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAO,EAAE,OAAA,EAAS,QAAQ,QAAA,EAAU,MAAA,EAAQ,GAAA,EAAK,CAAA,EAAE,EACrD,QAAA,EAAA;AAAA,MAAA,CAAA,oBACCA,IAAAA,CAAAE,QAAAA,EAAA,EACE,QAAA,EAAA;AAAA,wBAAAH,IAAC,IAAA,EAAA,EAAK,KAAA,EAAO,EAAE,KAAA,IAAS,GAAA,EAAK,OAAM,SAAA,EAAU,CAAA;AAAA,QAC5C,EAAE,KAAA,GAAQ,CAAA,IAAK,EAAE,MAAA,GAAS,CAAA,oBAAKA,GAAAA,CAAC,IAAA,EAAA,EAAK,KAAA,EAAO,CAAA,EAAG,EAAE,KAAK,CAAA,IAAA,EAAI,EAAE,MAAM,CAAA,CAAA,EAAI,OAAM,SAAA,EAAU,CAAA;AAAA,QACtF,CAAA,CAAE,QAAA,GAAW,CAAA,oBAAKA,GAAAA,CAAC,IAAA,EAAA,EAAK,KAAA,EAAO,WAAA,CAAY,CAAA,CAAE,QAAQ,CAAA,EAAG,KAAA,EAAM,SAAA,EAAU,CAAA;AAAA,QACxE,EAAE,SAAA,GAAY,CAAA,oBAAKA,GAAAA,CAAC,QAAK,KAAA,EAAO,GAAA,CAAI,IAAA,CAAK,KAAA,CAAM,EAAE,SAAS,CAAA,EAAG,MAAM,CAAA,EAAG,OAAM,SAAA,EAAU,CAAA;AAAA,QACtF,CAAA,CAAE,uBAAOA,GAAAA,CAAC,QAAK,KAAA,EAAM,KAAA,EAAM,OAAM,QAAA,EAAS;AAAA,OAAA,EAC7C,CAAA;AAAA,MAED,IAAA,CAAK,KAAA,oBAASA,GAAAA,CAAC,IAAA,EAAA,EAAK,KAAA,EAAO,IAAA,CAAK,KAAA,CAAM,KAAA,IAAS,cAAA,EAAa,KAAA,EAAM,SAAA,EAAU,CAAA;AAAA,sBAC7EA,IAAC,IAAA,EAAA,EAAK,KAAA,EAAO,YAAY,IAAA,CAAK,QAAQ,CAAA,EAAG,KAAA,EAAM,SAAA,EAAU;AAAA,KAAA,EAC3D,CAAA;AAAA,IAGC,MAAA,CAAO,GAAA,CAAI,CAAC,KAAA,EAAO,CAAA,KAAM;AACxB,MAAA,MAAM,GAAA,GAAM,aAAa,KAAK,CAAA;AAC9B,MAAA,uBACEC,IAAAA,CAAC,KAAA,EAAA,EAAY,KAAA,EAAO,EAAE,SAAS,MAAA,EAAQ,GAAA,EAAK,CAAA,EAAG,OAAA,EAAS,aAAa,UAAA,EAAY,sBAAA,EAAwB,QAAQ,gCAAA,EAAkC,YAAA,EAAc,IAAG,EAClK,QAAA,EAAA;AAAA,wBAAAD,GAAAA,CAAC,UAAK,KAAA,EAAO,EAAE,UAAU,EAAA,EAAI,UAAA,EAAY,CAAA,EAAE,EAAG,QAAA,EAAA,WAAA,EAAE,CAAA;AAAA,wBAChDC,KAAC,KAAA,EAAA,EACC,QAAA,EAAA;AAAA,0BAAAD,GAAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAO,EAAE,UAAU,EAAA,EAAI,UAAA,EAAY,GAAA,EAAK,KAAA,EAAO,SAAA,EAAW,YAAA,EAAc,CAAA,EAAE,EAAI,cAAI,KAAA,EAAM,CAAA;AAAA,0BAC7FA,GAAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAO,EAAE,QAAA,EAAU,EAAA,EAAI,KAAA,EAAO,uBAAA,EAAyB,UAAA,EAAY,IAAA,EAAK,EAAI,cAAI,MAAA,EAAO;AAAA,SAAA,EAC9F;AAAA,OAAA,EAAA,EALQ,CAMV,CAAA;AAAA,IAEJ,CAAC;AAAA,GAAA,EACH,CAAA;AAEJ;AAEA,SAAS,IAAA,CAAK,EAAE,KAAA,EAAO,KAAA,EAAM,EAAmD;AAC9E,EAAA,MAAM,IAAyB,KAAA,KAAU,QAAA,GACrC,EAAE,UAAA,EAAY,yBAAyB,MAAA,EAAQ,iCAAA,EAAmC,KAAA,EAAO,SAAA,KACzF,EAAE,UAAA,EAAY,0BAA0B,MAAA,EAAQ,iCAAA,EAAmC,OAAO,uBAAA,EAAwB;AACtH,EAAA,uBACEA,GAAAA,CAAC,MAAA,EAAA,EAAK,OAAO,EAAE,GAAG,GAAG,QAAA,EAAU,EAAA,EAAI,UAAA,EAAY,GAAA,EAAK,cAAc,CAAA,EAAG,OAAA,EAAS,WAAW,OAAA,EAAS,cAAA,IAC/F,QAAA,EAAA,KAAA,EACH,CAAA;AAEJ;;;ACvEA,IAAM,kBAAA,GAAqB,CAAC,KAAA,EAAO,KAAA,EAAO,OAAO,cAAA,EAAgB,cAAA,EAAgB,UAAU,WAAW,CAAA;AACtG,IAAM,sBAAA,GAAyB,CAAC,KAAA,EAAO,aAAA,EAAe,aAAa,KAAK,CAAA;AAEjE,SAAS,gBAAgB,IAAA,EAAyC;AACvE,EAAA,MAAM,SAA6B,EAAC;AACpC,EAAA,IAAI,KAAK,KAAA,IAAS,kBAAA,CAAmB,SAAS,IAAA,CAAK,KAAA,CAAM,KAAK,CAAA,EAAG;AAC/D,IAAA,MAAA,CAAO,IAAA,CAAK,EAAE,IAAA,EAAM,mBAAA,EAAqB,OAAO,IAAA,CAAK,KAAA,CAAM,OAAO,CAAA;AAAA,EACpE;AACA,EAAA,IAAI,sBAAA,CAAuB,KAAK,CAAC,CAAA,KAAM,KAAK,SAAA,CAAU,QAAA,CAAS,CAAC,CAAC,CAAA,EAAG;AAClE,IAAA,MAAA,CAAO,KAAK,EAAE,IAAA,EAAM,yBAAyB,SAAA,EAAW,IAAA,CAAK,WAAW,CAAA;AAAA,EAC1E;AACA,EAAA,OAAO,MAAA;AACT;AAEA,eAAsB,iBAAiB,IAAA,EAAoC;AACzE,EAAA,MAAM,OAAA,GAAU,CAAA,yEAAA,CAAA;AAChB,EAAA,MAAM,EAAE,OAAA,EAAS,gBAAA,EAAiB,GAAI,MAAM,OAAO,cAAc,CAAA;AACjE,EAAA,MAAM,SAAA,GAAY,MAAM,gBAAA,CAAiB,EAAE,QAAQ,QAAA,EAAU,UAAA,EAAY,MAAM,OAAA,EAAS,CAAA;AAExF,EAAA,MAAM,OAAA,GAAU,MAAM,IAAA,CAAK,IAAA;AAC3B,EAAA,MAAM,SAAA,GAAY,CAAC,SAAA,EAAmB,MAAA,KACpC,IAAI,OAAA,CAAQ,CAAC,SAAS,MAAA,KAAW;AAC/B,IAAA,MAAM,MAAA,GAAS,IAAI,UAAA,EAAW;AAC9B,IAAA,MAAA,CAAO,MAAA,GAAS,CAAC,CAAA,KAAM,OAAA,CAAQ,IAAI,UAAA,CAAW,CAAA,CAAE,MAAA,CAAQ,MAAqB,CAAC,CAAA;AAC9E,IAAA,MAAA,CAAO,OAAA,GAAU,MAAA;AACjB,IAAA,MAAA,CAAO,kBAAkB,IAAA,CAAK,KAAA,CAAM,MAAA,EAAQ,MAAA,GAAS,SAAS,CAAC,CAAA;AAAA,EACjE,CAAC,CAAA;AAEH,EAAA,MAAM,MAAA,GAAS,MAAM,SAAA,CAAU,WAAA,CAAY,SAAS,SAAS,CAAA;AAC7D,EAAA,SAAA,CAAU,KAAA,EAAM;AAEhB,EAAA,MAAM,MAAA,GAAU,MAAA,CAA6C,KAAA,EAAO,KAAA,IAAS,EAAC;AAE9E,EAAA,MAAM,OAAA,GAAU,OAAO,IAAA,CAAK,CAAC,MAAgB,CAAA,CAA8B,OAAO,MAAM,SAAS,CAAA;AACjG,EAAA,MAAM,KAAA,GAAU,OAAO,IAAA,CAAK,CAAC,MAAgB,CAAA,CAA8B,OAAO,MAAM,OAAO,CAAA;AAC/F,EAAA,MAAM,KAAA,GAAU,OAAO,IAAA,CAAK,CAAC,MAAgB,CAAA,CAA8B,OAAO,MAAM,OAAO,CAAA;AAE/F,EAAA,MAAM,MAAM,CAAC,CAAA,KAAgB,OAAO,CAAA,KAAM,WAAW,CAAA,GAAI,EAAA;AACzD,EAAA,MAAM,MAAM,CAAC,CAAA,KAAe,WAAW,GAAA,CAAI,CAAC,CAAC,CAAA,IAAK,CAAA;AAElD,EAAA,MAAM,aAAa,GAAA,CAAI,KAAA,GAAQ,YAAY,CAAA,IAAK,KAAA,GAAQ,0BAA0B,CAAC,CAAA;AACnF,EAAA,MAAM,QAAQ,UAAA,CAAW,MAAA,GAAS,CAAA,IAAK,CAAC,WAAW,WAAA,EAAY,CAAE,QAAA,CAAS,QAAQ,KAAK,CAAC,UAAA,CAAW,WAAA,EAAY,CAAE,SAAS,KAAK,CAAA;AAE/H,EAAA,OAAO;AAAA,IACL,WAAW,GAAA,CAAI,OAAA,GAAU,QAAQ,CAAC,CAAA,IAAK,KAAK,IAAA,IAAQ,SAAA;AAAA,IACpD,UAAU,IAAA,CAAK,IAAA;AAAA,IACf,OAAO,KAAA,GAAQ;AAAA,MACb,KAAA,EAAY,GAAA,CAAI,KAAA,CAAM,QAAQ,CAAC,CAAA;AAAA,MAC/B,KAAA,EAAY,GAAA,CAAI,KAAA,CAAM,OAAO,CAAC,CAAA;AAAA,MAC9B,MAAA,EAAY,GAAA,CAAI,KAAA,CAAM,QAAQ,CAAC,CAAA;AAAA,MAC/B,QAAA,EAAY,GAAA,CAAI,KAAA,CAAM,UAAU,CAAC,CAAA,GAAI,GAAA;AAAA,MACrC,OAAA,EAAY,GAAA,CAAI,KAAA,CAAM,SAAS,CAAC,CAAA;AAAA,MAChC,SAAA,EAAY,GAAA,CAAI,KAAA,CAAM,WAAW,CAAC,CAAA;AAAA,MAClC,GAAA,EAAY,KAAA;AAAA,MACZ,UAAA,EAAY,IAAI,KAAA,CAAM,kBAAkB,CAAC,CAAA,IAAK,GAAA,CAAI,KAAA,CAAM,YAAY,CAAC;AAAA,KACvE,GAAI,IAAA;AAAA,IACJ,OAAO,KAAA,GAAQ;AAAA,MACb,KAAA,EAAY,GAAA,CAAI,KAAA,CAAM,QAAQ,CAAC,CAAA;AAAA,MAC/B,QAAA,EAAY,GAAA,CAAI,KAAA,CAAM,UAAU,CAAC,CAAA;AAAA,MACjC,UAAA,EAAY,GAAA,CAAI,KAAA,CAAM,cAAc,CAAC;AAAA,KACvC,GAAI;AAAA,GACN;AACF;AC5EA,IAAM,kBAAA,GAAyC;AAAA,EAC7C,UAAA,EAAY,IAAA;AAAA,EAAM,UAAA,EAAY,KAAA;AAAA,EAAO,YAAA,EAAc,KAAA;AAAA,EACnD,aAAA,EAAe,KAAA;AAAA,EAAO,KAAA,EAAO,MAAA;AAAA,EAAQ,WAAA,EAAa;AACpD,CAAA;AAEA,SAAS,uBAAuB,KAAA,EAAgD;AAC9E,EAAA,OAAO,KAAA,IAAS,kBAAA;AAClB;AAEA,SAAS,WAAA,CAAY,QAAgB,QAAA,EAA0B;AAC7D,EAAA,IAAI,MAAA,KAAW,aAAa,OAAO,kBAAA;AACnC,EAAA,IAAI,MAAA,KAAW,cAAc,OAAO,wBAAA;AACpC,EAAA,IAAI,QAAA,GAAW,IAAI,OAAO,uBAAA;AAC1B,EAAA,IAAI,QAAA,GAAW,IAAI,OAAO,yBAAA;AAC1B,EAAA,IAAI,QAAA,GAAW,IAAI,OAAO,sBAAA;AAC1B,EAAA,IAAI,QAAA,GAAW,IAAI,OAAO,wBAAA;AAC1B,EAAA,OAAO,mBAAA;AACT;AAEO,SAAS,aAAA,CAAc;AAAA,EAC5B,MAAA;AAAA,EACA,SAAA;AAAA,EACA,QAAA;AAAA,EACA,OAAA;AAAA,EACA,SAAA,GAAY,EAAA;AAAA,EACZ,KAAA;AAAA,EACA,QAAA,GAAW,KAAA;AAAA,EACX,OAAA;AAAA,EACA,MAAA,GAAS,SAAA;AAAA,EACT,WAAA,GAAc,IAAA;AAAA,EACd,gBAAA,GAAmB,KAAA;AAAA,EACnB,KAAA;AAAA,EACA,KAAA;AAAA,EACA,UAAA;AAAA,EACA,cAAA;AAAA,EACA,aAAA;AAAA,EACA,WAAA;AAAA,EACA;AACF,CAAA,EAAuB;AACrB,EAAA,MAAM,EAAE,OAAO,MAAA,EAAQ,KAAA,EAAO,QAAQ,KAAA,EAAO,KAAA,EAAM,GAAI,kBAAA,CAAmB,MAAM,CAAA;AAChF,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAIE,SAAwB,IAAI,CAAA;AAC1D,EAAA,MAAM,CAAC,WAAW,YAAY,CAAA,GAAIA,SAA6B,MAAM,sBAAA,CAAuB,KAAK,CAAC,CAAA;AAClG,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAIA,SAAsB,IAAI,CAAA;AAC9D,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAIA,SAA+B,IAAI,CAAA;AACrE,EAAA,MAAM,CAAC,WAAA,EAAa,cAAc,CAAA,GAAIA,QAAAA,CAA6B,EAAE,CAAA;AACrE,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAIA,SAAS,KAAK,CAAA;AAChD,EAAA,MAAM,CAAA,GAAI,aAAa,KAAK,CAAA;AAC5B,EAAA,MAAM,IAAA,GAAO,YAAY,CAAC,CAAA;AAE1B,EAAA,MAAM,QAAA,GAAWE,WAAAA,CAAY,OAAO,IAAA,EAAY,IAAA,KAA6B;AAC3E,IAAA,IAAI,WAAA,EAAa,UAAA,CAAW,GAAA,CAAI,eAAA,CAAgB,IAAI,CAAC,CAAA;AACrD,IAAA,IAAI;AACF,MAAA,MAAM,MAAA,GAAS,MAAM,MAAA,CAAO,IAAA,EAAM,EAAE,GAAI,MAAA,KAAW,KAAA,CAAA,IAAa,EAAE,MAAA,EAAO,EAAI,KAAA,EAAO,MAAM,CAAA;AAC1F,MAAA,IAAI,MAAA,aAAmB,MAAM,CAAA;AAAA,IAC/B,SAAS,GAAA,EAAK;AACZ,MAAA,OAAA,GAAU,GAAA,YAAe,QAAQ,GAAA,GAAM,IAAI,MAAM,MAAA,CAAO,GAAG,CAAC,CAAC,CAAA;AAAA,IAC/D;AAAA,EACF,GAAG,CAAC,MAAA,EAAQ,QAAQ,QAAA,EAAU,OAAA,EAAS,WAAW,CAAC,CAAA;AAEnD,EAAA,MAAM,WAAA,GAAcA,WAAAA,CAAY,OAAO,KAAA,KAAkB;AACvD,IAAA,MAAM,IAAA,GAAO,MAAM,CAAC,CAAA;AACpB,IAAA,IAAI,CAAC,IAAA,EAAM;AACX,IAAA,IAAI,gBAAA,EAAkB;AACpB,MAAA,YAAA,CAAa,sBAAA,CAAuB,KAAK,CAAC,CAAA;AAC1C,MAAA,YAAA,CAAa,IAAI,CAAA;AACjB,MAAA,cAAA,CAAe,EAAE,CAAA;AACjB,MAAA,aAAA,CAAc,IAAI,CAAA;AAClB,MAAA,IAAI,WAAA,EAAa,UAAA,CAAW,GAAA,CAAI,eAAA,CAAgB,IAAI,CAAC,CAAA;AACrD,MAAA,YAAA,CAAa,IAAI,CAAA;AACjB,MAAA,IAAI;AACF,QAAA,MAAM,IAAA,GAAO,MAAM,gBAAA,CAAiB,IAAI,CAAA;AACxC,QAAA,YAAA,CAAa,IAAI,CAAA;AACjB,QAAA,cAAA,CAAe,eAAA,CAAgB,IAAI,CAAC,CAAA;AAAA,MACtC,CAAA,CAAA,MAAQ;AAAA,MAER,CAAA,SAAE;AACA,QAAA,YAAA,CAAa,KAAK,CAAA;AAAA,MACpB;AAAA,IACF,CAAA,MAAO;AACL,MAAA,MAAM,QAAA,CAAS,IAAA,EAAM,KAAA,IAAS,SAAS,CAAA;AAAA,IACzC;AAAA,EACF,GAAG,CAAC,gBAAA,EAAkB,OAAO,SAAA,EAAW,QAAA,EAAU,WAAW,CAAC,CAAA;AAE9D,EAAA,MAAM,cAAA,GAAgC;AAAA,IACpC,GAAG,IAAA;AAAA,IACH,GAAG;AAAA,GACL;AAEA,EAAA,MAAM,WAAA,GAAc,MAAM,MAAA,KAAW,WAAA,IAAe,MAAM,MAAA,KAAW,WAAA,IAAe,MAAM,MAAA,KAAW,YAAA;AACrG,EAAA,MAAM,QAAA,GAAW,MAAM,MAAA,KAAW,WAAA,GAAc,MAAM,QAAA,GAAW,KAAA,CAAM,MAAA,KAAW,YAAA,GAAe,EAAA,GAAK,CAAA;AACtG,EAAA,MAAM,WAAW,KAAA,CAAM,MAAA,KAAW,MAAA,IAAU,OAAA,KAAY,QAAQ,CAAC,UAAA;AAEjE,EAAA,IAAI,MAAM,MAAA,KAAW,OAAA,IAAW,WAAA,EAAa,uBAAOJ,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,4BAAA,EAA6B,OAAO,cAAA,EAAiB,QAAA,EAAA,WAAA,CAAY,KAAA,CAAM,KAAA,EAAO,KAAK,CAAA,EAAE,CAAA;AACxJ,EAAA,IAAI,KAAA,CAAM,MAAA,KAAW,MAAA,IAAU,aAAA,yBAAsBA,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,8BAA6B,KAAA,EAAO,cAAA,EAAiB,QAAA,EAAA,aAAA,CAAc,KAAA,CAAM,MAAM,CAAA,EAAE,CAAA;AAErJ,EAAA,uBACEC,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,CAAA,0BAAA,EAA6B,SAAA,GAAY,CAAA,CAAA,EAAI,SAAS,CAAA,CAAA,GAAK,EAAE,CAAA,CAAA,EAAI,KAAA,EAAO,cAAA,EACtF,QAAA,EAAA;AAAA,oBAAAD,GAAAA;AAAA,MAAC,QAAA;AAAA,MAAA;AAAA,QACE,GAAI,MAAA,KAAW,MAAA,IAAa,EAAE,MAAA,EAAO;AAAA,QACrC,GAAI,OAAA,KAAY,MAAA,IAAa,EAAE,OAAA,EAAQ;AAAA,QACvC,GAAI,OAAA,KAAY,MAAA,IAAa,EAAE,OAAA,EAAQ;AAAA,QACvC,GAAI,KAAA,KAAU,MAAA,IAAa,EAAE,KAAA,EAAM;AAAA,QACpC,UAAU,QAAA,IAAY,WAAA;AAAA,QACtB,OAAA,EAAS,WAAA;AAAA,QACT,KAAA,EAAO,EAAE,OAAA,EAAS,WAAA,EAAa,WAAW,QAAA,EAAS;AAAA,QAElD,QAAA,EAAA,OAAA,IAAW,CAAC,WAAA,IAAe,CAAC,6BAC3BC,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,kCAAA,EACb,QAAA,EAAA;AAAA,0BAAAD,GAAAA,CAAC,WAAM,GAAA,EAAK,OAAA,EAAS,WAAU,qCAAA,EAAsC,KAAA,EAAK,IAAA,EAAC,WAAA,EAAW,IAAA,EAAC,CAAA;AAAA,0BACvFA,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,8BAA6B,QAAA,EAAA,0CAAA,EAAqC;AAAA,SAAA,EACpF,CAAA,mBAEAC,IAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,kCAAA,EACZ,QAAA,EAAA;AAAA,UAAA,UAAA,GAAa,UAAA,EAAW,mBACvBD,GAAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAM,IAAA,EAAK,MAAA,EAAO,IAAA,EAAK,IAAA,EAAK,MAAA,EAAO,OAAA,EAAQ,WAAA,EAAY,MAAA,EAAO,cAAA,EAAe,SAAA,EAAU,2BAAA,EAC1F,QAAA,kBAAAA,GAAAA,CAAC,MAAA,EAAA,EAAK,aAAA,EAAc,OAAA,EAAQ,cAAA,EAAe,OAAA,EAAQ,WAAA,EAAa,GAAA,EAAK,CAAA,EAAE,mIAAA,EAAoI,CAAA,EAC7M,CAAA;AAAA,UAED,QAAA,oBACCC,IAAAA,CAAAE,QAAAA,EAAA,EACE,QAAA,EAAA;AAAA,4BAAAH,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,sCAAA,EAAuC,QAAA,EAAA,2BAAA,EAAsB,CAAA;AAAA,4BAC7EA,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,8BAA6B,QAAA,EAAA,4CAAA,EAA0C,CAAA;AAAA,4BACvFC,IAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,4BAAA,EAA6B,QAAA,EAAA;AAAA,cAAA,qBAAA;AAAA,cACvB,OAAA,GAAU,CAAA,aAAA,EAAU,WAAA,CAAY,OAAO,CAAC,CAAA,CAAA,GAAK;AAAA,aAAA,EACnE;AAAA,WAAA,EACF;AAAA,SAAA,EAEJ;AAAA;AAAA,KAEJ;AAAA,IAEC,gBAAA,IAAoB,UAAA,IAAc,CAAC,WAAA,IAAe,KAAA,CAAM,WAAW,MAAA,oBAClEA,IAAAA,CAAAE,QAAAA,EAAA,EACG,QAAA,EAAA;AAAA,MAAA,OAAA,oBACCH,GAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,6DAAA,EACb,QAAA,kBAAAA,IAAC,OAAA,EAAA,EAAM,GAAA,EAAK,OAAA,EAAS,SAAA,EAAU,8BAA6B,KAAA,EAAK,IAAA,EAAC,aAAW,IAAA,EAAC,QAAA,EAAQ,MAAC,CAAA,EACzF,CAAA;AAAA,MAAA,CAEA,aAAa,SAAA,qBACbC,IAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,oDAAA,EACb,QAAA,EAAA;AAAA,wBAAAD,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,iFAAA,EAAkF,QAAA,EAAA,wCAAA,EAAyB,CAAA;AAAA,wBAC1HA,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,OAAA,EACb,QAAA,kBAAAA,GAAAA,CAAC,gBAAA,EAAA,EAAiB,IAAA,EAAM,SAAA,EAAY,MAAA,EAAQ,WAAA,EAAa,WAAsB,CAAA,EACjF;AAAA,OAAA,EACF,CAAA;AAAA,MAED,YAAY,MAAA,KAAW,CAAA,oBACtBC,IAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,oDAAA,EACb,QAAA,EAAA;AAAA,wBAAAD,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,iFAAA,EAAkF,QAAA,EAAA,2CAAA,EAAyB,CAAA;AAAA,wBAC1HA,GAAAA,CAAC,YAAA,EAAA,EAAa,KAAA,EAAO,SAAA,EAAW,QAAA,EAAU,YAAA,EAAc,KAAA,EAAO,EAAE,OAAA,EAAS,WAAA,EAAY,EAAG;AAAA,OAAA,EAC3F,CAAA;AAAA,sBAEFC,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,YAAA,EACb,QAAA,EAAA;AAAA,wBAAAD,GAAAA;AAAA,UAAC,QAAA;AAAA,UAAA;AAAA,YACC,SAAA,EAAU,kLAAA;AAAA,YACV,SAAS,MAAM;AAAE,cAAA,aAAA,CAAc,IAAI,CAAA;AAAG,cAAA,UAAA,CAAW,IAAI,CAAA;AAAG,cAAA,YAAA,CAAa,IAAI,CAAA;AAAG,cAAA,cAAA,CAAe,EAAE,CAAA;AAAG,cAAA,YAAA,CAAa,sBAAA,CAAuB,KAAK,CAAC,CAAA;AAAA,YAAG,CAAA;AAAA,YAC9I,QAAA,EAAA;AAAA;AAAA,SAED;AAAA,wBACAA,GAAAA;AAAA,UAAC,QAAA;AAAA,UAAA;AAAA,YACC,QAAA,EAAU,WAAA,CAAY,MAAA,GAAS,CAAA,IAAK,SAAA;AAAA,YACpC,SAAA,EAAU,6NAAA;AAAA,YACV,SAAS,MAAM;AAAE,cAAA,MAAM,CAAA,GAAI,UAAA;AAAY,cAAA,aAAA,CAAc,IAAI,CAAA;AAAG,cAAA,YAAA,CAAa,IAAI,CAAA;AAAG,cAAA,cAAA,CAAe,EAAE,CAAA;AAAG,cAAA,KAAK,QAAA,CAAS,GAAG,SAAS,CAAA;AAAG,cAAA,YAAA,CAAa,sBAAA,CAAuB,KAAK,CAAC,CAAA;AAAA,YAAG,CAAA;AAAA,YAC/K,QAAA,EAAA;AAAA;AAAA;AAED,OAAA,EACF;AAAA,KAAA,EACF,CAAA;AAAA,IAGD,WAAA,KACC,iBAAiB,cAAA,CAAe,QAAQ,oBACtCC,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,8EAAA,EACb,QAAA,EAAA;AAAA,sBAAAA,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,mCAAA,EACb,QAAA,EAAA;AAAA,wBAAAD,GAAAA,CAAC,UAAK,SAAA,EAAU,0CAAA,EAA4C,sBAAY,KAAA,CAAM,MAAA,EAAQ,QAAQ,CAAA,EAAE,CAAA;AAAA,wBAChGC,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yBAAA,EACb,QAAA,EAAA;AAAA,0BAAAA,IAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,uCAAA,EAAyC,QAAA,EAAA;AAAA,YAAA,QAAA;AAAA,YAAS;AAAA,WAAA,EAAC,CAAA;AAAA,0BACnED,GAAAA;AAAA,YAAC,QAAA;AAAA,YAAA;AAAA,cACC,SAAA,EAAU,kLAAA;AAAA,cACV,OAAA,EAAS,KAAA;AAAA,cACV,QAAA,EAAA;AAAA;AAAA;AAED,SAAA,EACF;AAAA,OAAA,EACF,CAAA;AAAA,sBACAA,GAAAA,CAAC,WAAA,EAAA,EAAY,QAAA,EAAoB,CAAA;AAAA,sBACjCA,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,8BAA6B,QAAA,EAAA,uEAAA,EAA4D;AAAA,KAAA,EAC3G,CAAA,CAAA;AAAA,IAIH,QAAA,oBACCC,IAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,YAAA,EACb,QAAA,EAAA;AAAA,sBAAAD,GAAAA;AAAA,QAAC,QAAA;AAAA,QAAA;AAAA,UACC,SAAA,EAAU,8KAAA;AAAA,UACV,OAAA,EAAS,MAAM,MAAA,CAAO,EAAE,GAAI,MAAA,KAAW,MAAA,IAAa,EAAE,MAAA,EAAO,EAAI,KAAA,EAAO,SAAA,EAAW,CAAA;AAAA,UACpF,QAAA,EAAA;AAAA;AAAA,OAED;AAAA,sBACAA,GAAAA;AAAA,QAAC,QAAA;AAAA,QAAA;AAAA,UACC,SAAA,EAAU,kLAAA;AAAA,UACV,SAAS,MAAM;AAAE,YAAA,KAAA,EAAM;AAAG,YAAA,UAAA,CAAW,IAAI,CAAA;AAAA,UAAG,CAAA;AAAA,UAC7C,QAAA,EAAA;AAAA;AAAA;AAED,KAAA,EACF,CAAA;AAAA,IAGD,KAAA,CAAM,WAAW,MAAA,IAAU,CAAC,iCAC3BC,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,2FAAA,EACb,QAAA,EAAA;AAAA,sBAAAA,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yBAAA,EACb,QAAA,EAAA;AAAA,wBAAAD,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,UAAA,EAAW,QAAA,EAAA,QAAA,EAAC,CAAA;AAAA,wBAC5BC,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,QAAA,EACb,QAAA,EAAA;AAAA,0BAAAD,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,kCAAA,EAAmC,QAAA,EAAA,+BAAA,EAA0B,CAAA;AAAA,0BAC5EA,IAAC,KAAA,EAAA,EAAI,SAAA,EAAU,qCAAqC,QAAA,EAAA,WAAA,CAAY,KAAA,CAAM,MAAA,CAAO,IAAI,CAAA,EAAE;AAAA,SAAA,EACrF,CAAA;AAAA,wBACAA,GAAAA;AAAA,UAAC,QAAA;AAAA,UAAA;AAAA,YACC,SAAA,EAAU,6LAAA;AAAA,YACV,SAAS,MAAM;AAAE,cAAA,KAAA,EAAM;AAAG,cAAA,UAAA,CAAW,IAAI,CAAA;AAAA,YAAG,CAAA;AAAA,YAC7C,QAAA,EAAA;AAAA;AAAA;AAED,OAAA,EACF,CAAA;AAAA,sBACAA,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,kGAAiG,QAAA,EAAA,yHAAA,EAEhH;AAAA,KAAA,EACF,CAAA;AAAA,IAGD,KAAA,CAAM,WAAW,OAAA,IAAW,CAAC,+BAC5BC,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,2FAAA,EACb,QAAA,EAAA;AAAA,sBAAAD,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,aAAA,EAAc,QAAA,EAAA,cAAA,EAAE,CAAA;AAAA,sBAChCC,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,QAAA,EACb,QAAA,EAAA;AAAA,wBAAAD,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,oCAAA,EAAqC,QAAA,EAAA,0CAAA,EAA+B,CAAA;AAAA,wBACnFA,GAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,mCAAA,EAAqC,QAAA,EAAA,KAAA,CAAM,MAAM,OAAA,EAAQ;AAAA,OAAA,EAC1E,CAAA;AAAA,sBACAA,GAAAA;AAAA,QAAC,QAAA;AAAA,QAAA;AAAA,UACC,SAAA,EAAU,uLAAA;AAAA,UACV,SAAS,MAAM;AAAE,YAAA,KAAA,EAAM;AAAG,YAAA,UAAA,CAAW,IAAI,CAAA;AAAA,UAAG,CAAA;AAAA,UAC7C,QAAA,EAAA;AAAA;AAAA;AAED,KAAA,EACF;AAAA,GAAA,EAEJ,CAAA;AAEJ","file":"VideoUploader.js","sourcesContent":["import type { SiloTheme } from \"../types.js\";\n\nexport const defaultTheme: Required<SiloTheme> = {\n borderColor: \"#e2e8f0\",\n borderColorActive: \"#6366f1\",\n backgroundColor: \"#f8fafc\",\n backgroundColorHover: \"#f1f5f9\",\n textColor: \"#0f172a\",\n textColorMuted: \"#64748b\",\n accentColor: \"#6366f1\",\n accentColorHover: \"#4f46e5\",\n errorColor: \"#ef4444\",\n successColor: \"#22c55e\",\n borderRadius: \"12px\",\n fontFamily: \"inherit\",\n};\n\nexport function resolveTheme(theme?: SiloTheme): Required<SiloTheme> {\n return { ...defaultTheme, ...theme };\n}\n\nexport function themeToVars(theme: Required<SiloTheme>): Record<string, string> {\n return {\n \"--silo-border\": theme.borderColor,\n \"--silo-border-active\": theme.borderColorActive,\n \"--silo-bg\": theme.backgroundColor,\n \"--silo-bg-hover\": theme.backgroundColorHover,\n \"--silo-text\": theme.textColor,\n \"--silo-text-muted\": theme.textColorMuted,\n \"--silo-accent\": theme.accentColor,\n \"--silo-accent-hover\": theme.accentColorHover,\n \"--silo-error\": theme.errorColor,\n \"--silo-success\": theme.successColor,\n \"--silo-radius\": theme.borderRadius,\n \"--silo-font\": theme.fontFamily,\n };\n}\n","\"use client\";\n\nimport {\n useState,\n useRef,\n useCallback,\n type DragEvent,\n type ChangeEvent,\n type ReactNode,\n type CSSProperties,\n} from \"react\";\nimport type { SiloTheme } from \"../types.js\";\nimport { resolveTheme, themeToVars } from \"../utils/theme.js\";\n\ninterface DropZoneProps {\n accept?: string;\n multiple?: boolean;\n disabled?: boolean;\n maxSize?: number;\n onFiles: (files: File[]) => void;\n onError?: (error: Error) => void;\n className?: string;\n style?: CSSProperties;\n theme?: SiloTheme;\n children: ReactNode;\n}\n\nexport function DropZone({\n accept,\n multiple = false,\n disabled = false,\n maxSize,\n onFiles,\n onError,\n className = \"\",\n style,\n theme,\n children,\n}: DropZoneProps) {\n const [dragging, setDragging] = useState(false);\n const inputRef = useRef<HTMLInputElement>(null);\n const t = resolveTheme(theme);\n const vars = themeToVars(t);\n\n const validate = useCallback(\n (files: File[]): File[] => {\n return files.filter((f) => {\n if (maxSize && f.size > maxSize) {\n onError?.(new Error(`File \"${f.name}\" exceeds max size of ${maxSize} bytes`));\n return false;\n }\n return true;\n });\n },\n [maxSize, onError]\n );\n\n const handleDrop = useCallback(\n (e: DragEvent<HTMLDivElement>) => {\n e.preventDefault();\n setDragging(false);\n if (disabled) return;\n const files = Array.from(e.dataTransfer.files);\n const valid = validate(files);\n if (valid.length) onFiles(valid);\n },\n [disabled, validate, onFiles]\n );\n\n const handleChange = useCallback(\n (e: ChangeEvent<HTMLInputElement>) => {\n const files = Array.from(e.target.files ?? []);\n const valid = validate(files);\n if (valid.length) onFiles(valid);\n e.target.value = \"\";\n },\n [validate, onFiles]\n );\n\n const rootStyle: CSSProperties = {\n ...vars as CSSProperties,\n border: `2px dashed ${dragging ? \"var(--silo-border-active)\" : \"var(--silo-border)\"}`,\n borderRadius: \"var(--silo-radius)\",\n background: dragging ? \"var(--silo-bg-hover)\" : \"var(--silo-bg)\",\n color: \"var(--silo-text)\",\n cursor: disabled ? \"not-allowed\" : \"pointer\",\n opacity: disabled ? 0.5 : 1,\n outline: \"none\",\n transition: \"border-color 150ms, background 150ms\",\n ...style,\n };\n\n return (\n <div\n className={className}\n style={rootStyle}\n onDragOver={(e) => { e.preventDefault(); if (!disabled) setDragging(true); }}\n onDragLeave={() => setDragging(false)}\n onDrop={handleDrop}\n onClick={() => !disabled && inputRef.current?.click()}\n role=\"button\"\n tabIndex={disabled ? -1 : 0}\n onKeyDown={(e) => { if (e.key === \"Enter\" || e.key === \" \") inputRef.current?.click(); }}\n aria-label=\"Upload area\"\n >\n <input\n ref={inputRef}\n type=\"file\"\n accept={accept}\n multiple={multiple}\n className=\"hidden\"\n onChange={handleChange}\n disabled={disabled}\n />\n {children}\n </div>\n );\n}\n","\"use client\";\n\nimport type { CSSProperties } from \"react\";\n\ninterface ProgressBarProps {\n progress: number;\n className?: string;\n style?: CSSProperties;\n}\n\nexport function ProgressBar({ progress, className = \"\", style }: ProgressBarProps) {\n return (\n <div\n className={className}\n style={{ height: 4, borderRadius: 9999, background: \"var(--silo-border, #e2e8f0)\", overflow: \"hidden\", ...style }}\n role=\"progressbar\"\n aria-valuenow={progress}\n aria-valuemin={0}\n aria-valuemax={100}\n >\n <div\n style={{ height: \"100%\", borderRadius: 9999, background: \"var(--silo-accent, #6366f1)\", width: `${progress}%`, transition: \"width 200ms linear\" }}\n />\n </div>\n );\n}\n","\"use client\";\n\nimport { useState } from \"react\";\nimport type { CSSProperties } from \"react\";\nimport type { VideoUploadOptions } from \"@geekapps/silo-nextjs\";\n\n// ── Video codec ───────────────────────────────────────────────────────────────\n\nconst VIDEO_CODECS = [\n {\n value: \"h264\",\n label: \"H.264\",\n sublabel: \"Compatível com tudo\",\n description: \"Funciona em qualquer dispositivo — celulares, Smart TVs, navegadores antigos e novos. A escolha mais segura se você não sabe onde o vídeo será assistido.\",\n },\n {\n value: \"h265\",\n label: \"H.265\",\n sublabel: \"Menor tamanho\",\n description: \"Arquivo até 50% menor que H.264 com a mesma qualidade de imagem. Requer dispositivo moderno (2016+). Ideal para vídeos longos ou em alta resolução.\",\n },\n {\n value: \"av1\",\n label: \"AV1\",\n sublabel: \"Máx. eficiência\",\n description: \"O codec mais eficiente disponível — arquivo até 50% menor que H.265. Exige navegador recente (Chrome 70+, Firefox 67+, Safari 17+).\",\n warning: \"Não funciona em iPhones com iOS abaixo de 16 nem em Smart TVs mais antigas. Use H.264 se precisar de compatibilidade ampla.\",\n },\n] as const;\n\n// ── Audio ─────────────────────────────────────────────────────────────────────\n\nconst AUDIO_SIMPLE = [\n {\n value: \"passthrough\",\n label: \"Manter original\",\n badge: \"Recomendado\",\n description: \"Mantém o áudio exatamente como está no arquivo original, sem perdas. Se o formato não for compatível com streaming, converte automaticamente para AAC estéreo.\",\n },\n {\n value: \"aac\",\n label: \"AAC\",\n description: \"Formato mais compatível do mercado — funciona em absolutamente todos os players, celulares e Smart TVs.\",\n },\n {\n value: \"opus\",\n label: \"Opus\",\n description: \"Melhor qualidade que AAC no mesmo tamanho. Funciona em Chrome, Firefox e Android. Não suportado no Safari/iPhone.\",\n },\n] as const;\n\nconst AUDIO_ADVANCED_CODEC = [\n { value: \"passthrough\", label: \"Original\", description: \"Copia sem reprocessar quando compatível (mantém AC3, E-AC3, Dolby Atmos). AAC estéreo como fallback.\" },\n { value: \"aac\", label: \"AAC\", description: \"Compatibilidade máxima com todos os dispositivos.\" },\n { value: \"opus\", label: \"Opus\", description: \"Qualidade superior ao AAC. Chrome/Firefox/Android.\" },\n] as const;\n\nconst AUDIO_CHANNELS = [\n { value: \"original\", label: \"Original\", description: \"Mantém os canais do arquivo fonte.\" },\n { value: \"stereo\", label: \"Estéreo (2.0)\", description: \"Dois canais — compatível com fones e qualquer dispositivo.\" },\n { value: \"5.1\", label: \"Surround 5.1\", description: \"Seis canais. Ideal para home theaters.\" },\n] as const;\n\nconst RESOLUTIONS = [\"144\", \"240\", \"360\", \"480\", \"720\", \"1080\", \"1440\", \"2160\"] as const;\nconst RESOLUTION_LABELS: Record<string, string> = {\n \"144\": \"144p\", \"240\": \"240p\", \"360\": \"360p\", \"480\": \"480p\",\n \"720\": \"720p HD\", \"1080\": \"1080p Full HD\", \"1440\": \"1440p 2K\", \"2160\": \"4K UHD\",\n};\n\n// ── Primitives ────────────────────────────────────────────────────────────────\n\nfunction btn(active: boolean, disabled = false): CSSProperties {\n if (disabled) return {\n border: \"1px solid rgba(255,255,255,0.08)\", background: \"rgba(255,255,255,0.03)\",\n color: \"rgba(255,255,255,0.2)\", padding: \"4px 10px\", borderRadius: 6,\n fontSize: 12, fontWeight: 600, cursor: \"not-allowed\",\n };\n return active\n ? { border: \"1px solid #6366f1\", background: \"#6366f1\", color: \"#fff\", padding: \"4px 10px\", borderRadius: 6, fontSize: 12, fontWeight: 600, cursor: \"pointer\" }\n : { border: \"1px solid rgba(255,255,255,0.15)\", background: \"rgba(255,255,255,0.05)\", color: \"rgba(255,255,255,0.7)\", padding: \"4px 10px\", borderRadius: 6, fontSize: 12, fontWeight: 600, cursor: \"pointer\" };\n}\n\nfunction Label({ children }: { children: React.ReactNode }) {\n return <div style={{ fontSize: 11, fontWeight: 700, textTransform: \"uppercase\", letterSpacing: \"0.05em\", marginBottom: 7, color: \"rgba(255,255,255,0.28)\" }}>{children}</div>;\n}\n\nfunction Hint({ children }: { children: React.ReactNode }) {\n return <p style={{ marginTop: 5, fontSize: 11, color: \"rgba(255,255,255,0.38)\", lineHeight: 1.55 }}>{children}</p>;\n}\n\nfunction Warn({ children }: { children: React.ReactNode }) {\n return (\n <div style={{ marginTop: 6, display: \"flex\", gap: 6, background: \"rgba(251,191,36,0.07)\", border: \"1px solid rgba(251,191,36,0.18)\", borderRadius: 7, padding: \"6px 10px\" }}>\n <span style={{ fontSize: 12, flexShrink: 0 }}>⚠</span>\n <span style={{ fontSize: 11, color: \"#fbbf24\", lineHeight: 1.55 }}>{children}</span>\n </div>\n );\n}\n\nfunction Note({ children }: { children: React.ReactNode }) {\n return (\n <div style={{ marginTop: 6, display: \"flex\", gap: 6, background: \"rgba(99,102,241,0.07)\", border: \"1px solid rgba(99,102,241,0.18)\", borderRadius: 7, padding: \"6px 10px\" }}>\n <span style={{ fontSize: 12, flexShrink: 0 }}>ℹ</span>\n <span style={{ fontSize: 11, color: \"rgba(165,180,252,0.9)\", lineHeight: 1.55 }}>{children}</span>\n </div>\n );\n}\n\nfunction Toggle({ checked, onToggle, label, hint, disabled }: {\n checked: boolean; onToggle: () => void; label: string; hint?: string; disabled?: boolean;\n}) {\n return (\n <div style={{ display: \"flex\", alignItems: \"flex-start\", gap: 8, cursor: disabled ? \"not-allowed\" : \"pointer\", userSelect: \"none\", opacity: disabled ? 0.4 : 1 }}\n onClick={() => !disabled && onToggle()}>\n <span style={{ position: \"relative\", display: \"inline-block\", width: 32, height: 18, borderRadius: 9, flexShrink: 0, marginTop: 1, background: (checked && !disabled) ? \"#6366f1\" : \"rgba(255,255,255,0.12)\", transition: \"background 150ms\" }}>\n <span style={{ position: \"absolute\", top: 2, left: (checked && !disabled) ? 16 : 2, width: 14, height: 14, borderRadius: \"50%\", background: \"#fff\", boxShadow: \"0 1px 3px rgba(0,0,0,.3)\", transition: \"left 150ms\" }} />\n </span>\n <div>\n <span style={{ fontSize: 12, fontWeight: 500, color: disabled ? \"rgba(255,255,255,0.4)\" : \"rgba(255,255,255,0.85)\" }}>{label}</span>\n {hint && <p style={{ fontSize: 11, color: \"rgba(255,255,255,0.35)\", marginTop: 2, lineHeight: 1.5 }}>{hint}</p>}\n </div>\n </div>\n );\n}\n\nfunction Divider() {\n return <div style={{ height: 1, background: \"rgba(255,255,255,0.06)\", margin: \"2px 0\" }} />;\n}\n\n// ── Main component ────────────────────────────────────────────────────────────\n\ninterface VideoOptionsProps {\n value: VideoUploadOptions;\n onChange: (opts: VideoUploadOptions) => void;\n style?: CSSProperties;\n}\n\nexport function VideoOptions({ value, onChange, style }: VideoOptionsProps) {\n const [advanced, setAdvanced] = useState(false);\n\n const codec = value.codec ?? \"h264\";\n const transcoding = value.transcoding ?? \"auto\";\n const isAuto = transcoding === \"auto\";\n const selectedRes = isAuto ? [] : (transcoding as string[]);\n const audioCodec = value.audioCodec ?? \"passthrough\";\n const audioChannels = value.audioChannels ?? \"original\";\n const preserveAtmos = value.preserveAtmos ?? true;\n const hdrMode = value.hdr ?? \"preserve\";\n const hdrSupported = codec === \"h265\" || codec === \"av1\";\n const showAtmosOpt = audioCodec === \"passthrough\";\n const showAtmosWarn = audioCodec === \"aac\" || audioCodec === \"opus\";\n const selectedCodec = VIDEO_CODECS.find((c) => c.value === codec);\n\n type Res = \"144\" | \"240\" | \"360\" | \"480\" | \"720\" | \"1080\" | \"1440\" | \"2160\";\n function toggleRes(r: Res) {\n if (isAuto) { onChange({ ...value, transcoding: [r] }); return; }\n const next = selectedRes.includes(r) ? selectedRes.filter((x) => x !== r) : [...selectedRes, r];\n onChange({ ...value, transcoding: next.length === 0 ? \"auto\" : (next as Res[]) });\n }\n\n return (\n <div className=\"flex flex-col gap-5\" style={style}>\n\n {/* ══ SEÇÃO: VÍDEO ═══════════════════════════════════════════════════════ */}\n <div>\n <Label>Formato de vídeo</Label>\n\n {/* Codec */}\n <div className=\"mb-4\">\n <div className=\"flex gap-1.5 flex-wrap mb-1\">\n {VIDEO_CODECS.map((c) => (\n <button key={c.value} type=\"button\"\n onClick={() => onChange({ ...value, codec: c.value as NonNullable<VideoUploadOptions[\"codec\"]> })}\n style={btn(codec === c.value)}\n >\n {c.label}\n </button>\n ))}\n </div>\n {selectedCodec && (\n <Hint><strong style={{ color: \"rgba(255,255,255,0.55)\" }}>{selectedCodec.sublabel}.</strong>{\" \"}{selectedCodec.description}</Hint>\n )}\n {\"warning\" in (selectedCodec ?? {}) && (selectedCodec as { warning?: string }).warning && (\n <Warn>{(selectedCodec as { warning?: string }).warning}</Warn>\n )}\n </div>\n\n {/* Resoluções */}\n <div className=\"mb-4\">\n <Label>Versões de qualidade (resoluções)</Label>\n <div className=\"flex gap-1.5 flex-wrap mb-1\">\n <button type=\"button\" onClick={() => onChange({ ...value, transcoding: \"auto\" })} style={btn(isAuto)}>\n Automático\n </button>\n {RESOLUTIONS.map((r) => (\n <button key={r} type=\"button\" onClick={() => toggleRes(r as Res)} style={btn(!isAuto && selectedRes.includes(r))}>\n {RESOLUTION_LABELS[r]}\n </button>\n ))}\n </div>\n <Hint>\n {isAuto\n ? \"Gera automaticamente todas as versões até a qualidade original do vídeo.\"\n : \"Somente as versões selecionadas serão geradas.\"}\n </Hint>\n </div>\n\n {/* HDR */}\n <div style={{ opacity: hdrSupported ? 1 : 0.45 }}>\n <Label>Imagem HDR (alto contraste e cores vibrantes)</Label>\n {!advanced ? (\n <>\n <Toggle\n checked={hdrMode === \"preserve\"}\n onToggle={() => onChange({ ...value, hdr: hdrMode === \"preserve\" ? \"sdr\" : \"preserve\" })}\n label=\"Manter imagem HDR do vídeo original\"\n hint=\"Preserva HDR10, HDR10+, HLG e Dolby Vision. Só funciona com H.265 ou AV1.\"\n disabled={!hdrSupported}\n />\n {!hdrSupported && (\n <Warn>O H.264 não suporta HDR. Se o vídeo for HDR, a imagem será convertida automaticamente para SDR. Para manter o HDR, escolha H.265 ou AV1.</Warn>\n )}\n </>\n ) : (\n <>\n <div className=\"flex gap-1.5 flex-wrap mb-1\">\n <button type=\"button\" onClick={() => hdrSupported && onChange({ ...value, hdr: \"preserve\" })} style={btn(hdrMode === \"preserve\" && hdrSupported, !hdrSupported)}>\n Manter HDR\n </button>\n <button type=\"button\" onClick={() => onChange({ ...value, hdr: \"sdr\" })} style={btn(hdrMode === \"sdr\" || !hdrSupported)}>\n Converter para SDR\n </button>\n </div>\n {!hdrSupported\n ? <Warn>O H.264 não suporta HDR. O vídeo será convertido para SDR automaticamente. Escolha H.265 ou AV1 para manter o HDR.</Warn>\n : <Hint>{hdrMode === \"preserve\"\n ? \"HDR10, HDR10+, HLG e Dolby Vision preservados. Em telas sem HDR o vídeo funciona normalmente.\"\n : \"Convertido para SDR padrão — compatível com qualquer tela.\"}</Hint>\n }\n </>\n )}\n </div>\n </div>\n\n <Divider />\n\n {/* ══ SEÇÃO: ÁUDIO ═══════════════════════════════════════════════════════ */}\n <div>\n <Label>Áudio</Label>\n\n {!advanced ? (\n <div className=\"mb-4\">\n <div className=\"flex gap-1.5 flex-wrap mb-1\">\n {AUDIO_SIMPLE.map((a) => (\n <button key={a.value} type=\"button\"\n onClick={() => onChange({ ...value, audioCodec: a.value })}\n style={btn(audioCodec === a.value)}\n >\n {a.label}\n {\"badge\" in a && a.badge ? (\n <span style={{ marginLeft: 5, fontSize: 9, fontWeight: 700, background: \"rgba(255,255,255,0.15)\", borderRadius: 4, padding: \"1px 4px\", verticalAlign: \"middle\" }}>\n {a.badge}\n </span>\n ) : null}\n </button>\n ))}\n </div>\n <Hint>{AUDIO_SIMPLE.find((a) => a.value === audioCodec)?.description}</Hint>\n </div>\n ) : (\n <>\n {/* Codec avançado */}\n <div className=\"mb-4\">\n <Label>Formato de áudio (codec)</Label>\n <div className=\"flex gap-1.5 flex-wrap mb-1\">\n {AUDIO_ADVANCED_CODEC.map((a) => (\n <button key={a.value} type=\"button\"\n onClick={() => onChange({ ...value, audioCodec: a.value })}\n style={btn(audioCodec === a.value)}\n >\n {a.label}\n </button>\n ))}\n </div>\n <Hint>{AUDIO_ADVANCED_CODEC.find((a) => a.value === audioCodec)?.description}</Hint>\n {showAtmosWarn && (\n <Warn>Este formato não suporta Dolby Atmos. Use <strong>Dolby Digital Plus (E-AC3)</strong> ou <strong>Original</strong> para manter o som espacial 3D.</Warn>\n )}\n </div>\n\n {/* Canais */}\n <div className=\"mb-4\">\n <Label>Canais de áudio</Label>\n <div className=\"flex gap-1.5 flex-wrap mb-1\">\n {AUDIO_CHANNELS.map((c) => (\n <button key={c.value} type=\"button\"\n onClick={() => onChange({ ...value, audioChannels: c.value })}\n style={btn(audioChannels === c.value)}\n >\n {c.label}\n </button>\n ))}\n </div>\n <Hint>{AUDIO_CHANNELS.find((c) => c.value === audioChannels)?.description}</Hint>\n </div>\n\n {/* Dolby Atmos */}\n {showAtmosOpt && (\n <div className=\"mb-4\">\n <Label>Dolby Atmos (som espacial 3D)</Label>\n <Toggle\n checked={preserveAtmos}\n onToggle={() => onChange({ ...value, preserveAtmos: !preserveAtmos })}\n label=\"Manter Dolby Atmos quando disponível no arquivo\"\n hint=\"Funciona somente com Dolby Digital Plus (E-AC3) ou Original.\"\n />\n {!preserveAtmos && (\n <Note>Com Atmos desativado, o áudio será mixado em surround convencional sem informação espacial.</Note>\n )}\n </div>\n )}\n </>\n )}\n\n {/* Faixa de áudio separada */}\n <Toggle\n checked={value.separateAudio ?? false}\n onToggle={() => onChange({ ...value, separateAudio: !value.separateAudio })}\n label=\"Exportar faixa de áudio separada\"\n hint=\"Gera também um arquivo de áudio independente do vídeo.\"\n />\n </div>\n\n <Divider />\n\n {/* ══ SEÇÃO: MINIATURAS ══════════════════════════════════════════════════ */}\n <div>\n <Label>Miniaturas (thumbnails)</Label>\n <Toggle\n checked={value.thumbnails ?? true}\n onToggle={() => onChange({ ...value, thumbnails: !(value.thumbnails ?? true) })}\n label=\"Gerar miniaturas automaticamente\"\n hint=\"Imagens de prévia usadas em players, listas e compartilhamentos. Recomendado manter ativo.\"\n />\n </div>\n\n <Divider />\n\n {/* ══ SEÇÃO: STORYBOARD ══════════════════════════════════════════════════ */}\n <div>\n <Label>Storyboard</Label>\n <Toggle\n checked={value.storyboard ?? false}\n onToggle={() => onChange({ ...value, storyboard: !value.storyboard })}\n label=\"Gerar storyboard para pré-visualização\"\n hint=\"Mostra frames do vídeo ao passar o mouse na barra de progresso do player. Aumenta levemente o tempo de processamento.\"\n />\n </div>\n\n {/* Toggle avançado */}\n <button\n type=\"button\"\n onClick={() => setAdvanced((v) => !v)}\n style={{ alignSelf: \"flex-start\", fontSize: 11, color: \"rgba(255,255,255,0.3)\", background: \"none\", border: \"none\", cursor: \"pointer\", padding: 0, textDecoration: \"underline\", textUnderlineOffset: 3 }}\n >\n {advanced ? \"← Voltar ao modo simples\" : \"Configurações avançadas de áudio e HDR →\"}\n </button>\n </div>\n );\n}\n","export function formatBytes(bytes: number): string {\n if (bytes < 1024) return `${bytes} B`;\n if (bytes < 1024 ** 2) return `${(bytes / 1024).toFixed(1)} KB`;\n if (bytes < 1024 ** 3) return `${(bytes / 1024 ** 2).toFixed(1)} MB`;\n return `${(bytes / 1024 ** 3).toFixed(2)} GB`;\n}\n\nexport function getFileIcon(mimeType: string): string {\n if (mimeType.startsWith(\"image/\")) return \"🖼️\";\n if (mimeType.startsWith(\"video/\")) return \"🎬\";\n if (mimeType.startsWith(\"audio/\")) return \"🎵\";\n if (mimeType === \"application/pdf\") return \"📄\";\n if (mimeType.includes(\"spreadsheet\") || mimeType.includes(\"excel\")) return \"📊\";\n if (mimeType.includes(\"presentation\") || mimeType.includes(\"powerpoint\")) return \"📑\";\n if (mimeType.includes(\"word\") || mimeType.includes(\"document\")) return \"📝\";\n if (mimeType.includes(\"zip\") || mimeType.includes(\"tar\") || mimeType.includes(\"gzip\")) return \"📦\";\n return \"📎\";\n}\n","\"use client\";\n\nimport type { VideoFileInfo, VideoCompatIssue } from \"../utils/videoInfo.js\";\nimport { formatBytes } from \"../utils/format.js\";\n\nconst CODEC_MESSAGES: Record<string, { title: string; detail: string }> = {\n AV1: { title: \"AV1 não é suportado como entrada\", detail: \"O pipeline de transcodificação não aceita arquivos AV1. Converta para H.264 ou H.265 antes de enviar.\" },\n VP9: { title: \"VP9 não é suportado como entrada\", detail: \"Arquivos WebM/VP9 não são aceitos. Converta para H.264 ou H.265 antes de enviar.\" },\n VP8: { title: \"VP8 não é suportado como entrada\", detail: \"Arquivos WebM/VP8 não são aceitos. Converta para H.264 antes de enviar.\" },\n \"MPEG-1 Video\": { title: \"MPEG-1 não é suportado\", detail: \"Formato muito antigo. Converta para H.264 antes de enviar.\" },\n \"MPEG-2 Video\": { title: \"MPEG-2 não é suportado\", detail: \"Converta para H.264 antes de enviar.\" },\n};\n\nconst CONTAINER_MESSAGES: Record<string, { title: string; detail: string }> = {\n FLV: { title: \"Formato FLV não suportado\", detail: \"Arquivos Flash Video não são aceitos. Converta para MP4 (H.264) antes de enviar.\" },\n \"Flash Video\": { title: \"Formato FLV não suportado\", detail: \"Arquivos Flash Video não são aceitos. Converta para MP4 (H.264) antes de enviar.\" },\n RealMedia: { title: \"Formato RealMedia não suportado\", detail: \"Converta para MP4 (H.264) antes de enviar.\" },\n ASF: { title: \"Formato ASF/WMV não suportado\", detail: \"Converta para MP4 (H.264) antes de enviar.\" },\n};\n\nfunction issueMessage(issue: VideoCompatIssue): { title: string; detail: string } {\n if (issue.code === \"unsupported_codec\") {\n return CODEC_MESSAGES[issue.codec] ?? { title: `Codec ${issue.codec} não suportado`, detail: \"Converta para H.264 ou H.265 antes de enviar.\" };\n }\n const key = Object.keys(CONTAINER_MESSAGES).find((k) => issue.container.includes(k));\n return (key ? CONTAINER_MESSAGES[key] : null) ?? { title: `Container ${issue.container} não suportado`, detail: \"Converta para MP4 (H.264) antes de enviar.\" };\n}\n\nfunction fmt(n: number, unit: string) { return `${n.toLocaleString(\"pt-BR\")}${unit}`; }\nfunction fmtDuration(secs: number) {\n const h = Math.floor(secs / 3600);\n const m = Math.floor((secs % 3600) / 60);\n const s = Math.floor(secs % 60);\n if (h > 0) return `${h}h ${m}m ${s}s`;\n if (m > 0) return `${m}m ${s}s`;\n return `${s}s`;\n}\n\ninterface Props {\n info: VideoFileInfo;\n issues: VideoCompatIssue[];\n analyzing?: boolean;\n}\n\nexport function VideoCompatAlert({ info, issues, analyzing }: Props) {\n if (analyzing) {\n return (\n <div style={{ display: \"flex\", alignItems: \"center\", gap: 8, padding: \"10px 14px\", background: \"rgba(99,102,241,0.06)\", border: \"1px solid rgba(99,102,241,0.18)\", borderRadius: 10 }}>\n <span style={{ fontSize: 14 }}>🔍</span>\n <span style={{ fontSize: 12, color: \"rgba(165,180,252,0.9)\" }}>Analisando arquivo…</span>\n </div>\n );\n }\n\n const v = info.video;\n\n return (\n <div style={{ display: \"flex\", flexDirection: \"column\", gap: 8 }}>\n {/* Resumo das props */}\n <div style={{ display: \"flex\", flexWrap: \"wrap\", gap: 6 }}>\n {v && (\n <>\n <Chip label={v.codec || \"?\"} color=\"neutral\" />\n {v.width > 0 && v.height > 0 && <Chip label={`${v.width}×${v.height}`} color=\"neutral\" />}\n {v.duration > 0 && <Chip label={fmtDuration(v.duration)} color=\"neutral\" />}\n {v.frameRate > 0 && <Chip label={fmt(Math.round(v.frameRate), \" fps\")} color=\"neutral\" />}\n {v.hdr && <Chip label=\"HDR\" color=\"purple\" />}\n </>\n )}\n {info.audio && <Chip label={info.audio.codec || \"sem áudio\"} color=\"neutral\" />}\n <Chip label={formatBytes(info.fileSize)} color=\"neutral\" />\n </div>\n\n {/* Avisos de incompatibilidade */}\n {issues.map((issue, i) => {\n const msg = issueMessage(issue);\n return (\n <div key={i} style={{ display: \"flex\", gap: 8, padding: \"10px 14px\", background: \"rgba(239,68,68,0.07)\", border: \"1px solid rgba(239,68,68,0.22)\", borderRadius: 10 }}>\n <span style={{ fontSize: 14, flexShrink: 0 }}>🚫</span>\n <div>\n <div style={{ fontSize: 12, fontWeight: 700, color: \"#f87171\", marginBottom: 2 }}>{msg.title}</div>\n <div style={{ fontSize: 11, color: \"rgba(255,255,255,0.5)\", lineHeight: 1.55 }}>{msg.detail}</div>\n </div>\n </div>\n );\n })}\n </div>\n );\n}\n\nfunction Chip({ label, color }: { label: string; color: \"neutral\" | \"purple\" }) {\n const s: React.CSSProperties = color === \"purple\"\n ? { background: \"rgba(168,85,247,0.12)\", border: \"1px solid rgba(168,85,247,0.25)\", color: \"#c084fc\" }\n : { background: \"rgba(255,255,255,0.05)\", border: \"1px solid rgba(255,255,255,0.1)\", color: \"rgba(255,255,255,0.6)\" };\n return (\n <span style={{ ...s, fontSize: 11, fontWeight: 600, borderRadius: 6, padding: \"2px 8px\", display: \"inline-block\" }}>\n {label}\n </span>\n );\n}\n","export interface VideoTrackInfo {\n codec: string; // e.g. \"AV1\", \"AVC\", \"HEVC\", \"VP9\"\n width: number;\n height: number;\n duration: number; // seconds\n bitrate: number; // bits/s\n frameRate: number;\n hdr: boolean; // HDR10 / HLG / Dolby Vision\n colorSpace: string; // e.g. \"BT.709\", \"BT.2020\"\n}\n\nexport interface AudioTrackInfo {\n codec: string; // e.g. \"AAC\", \"AC3\", \"EAC3\", \"OPUS\", \"MP3\"\n channels: number;\n sampleRate: number;\n}\n\nexport interface VideoFileInfo {\n container: string; // e.g. \"MPEG-4\", \"Matroska\", \"WebM\"\n video: VideoTrackInfo | null;\n audio: AudioTrackInfo | null;\n fileSize: number;\n}\n\nexport type VideoCompatIssue =\n | { code: \"unsupported_codec\"; codec: string }\n | { code: \"unsupported_container\"; container: string };\n\nconst UNSUPPORTED_CODECS = [\"AV1\", \"VP8\", \"VP9\", \"MPEG-1 Video\", \"MPEG-2 Video\", \"Theora\", \"RealVideo\"];\nconst UNSUPPORTED_CONTAINERS = [\"FLV\", \"Flash Video\", \"RealMedia\", \"ASF\"];\n\nexport function getCompatIssues(info: VideoFileInfo): VideoCompatIssue[] {\n const issues: VideoCompatIssue[] = [];\n if (info.video && UNSUPPORTED_CODECS.includes(info.video.codec)) {\n issues.push({ code: \"unsupported_codec\", codec: info.video.codec });\n }\n if (UNSUPPORTED_CONTAINERS.some((c) => info.container.includes(c))) {\n issues.push({ code: \"unsupported_container\", container: info.container });\n }\n return issues;\n}\n\nexport async function analyzeVideoFile(file: File): Promise<VideoFileInfo> {\n const wasmUrl = `https://cdn.jsdelivr.net/npm/mediainfo.js@0.3.7/dist/MediaInfoModule.wasm`;\n const { default: MediaInfoFactory } = await import(\"mediainfo.js\");\n const mediainfo = await MediaInfoFactory({ format: \"object\", locateFile: () => wasmUrl });\n\n const getSize = () => file.size;\n const readChunk = (chunkSize: number, offset: number): Promise<Uint8Array> =>\n new Promise((resolve, reject) => {\n const reader = new FileReader();\n reader.onload = (e) => resolve(new Uint8Array(e.target!.result as ArrayBuffer));\n reader.onerror = reject;\n reader.readAsArrayBuffer(file.slice(offset, offset + chunkSize));\n });\n\n const result = await mediainfo.analyzeData(getSize, readChunk);\n mediainfo.close();\n\n const tracks = (result as { media?: { track?: unknown[] } }).media?.track ?? [];\n\n const general = tracks.find((t: unknown) => (t as Record<string, unknown>)[\"@type\"] === \"General\") as Record<string, unknown> | undefined;\n const video = tracks.find((t: unknown) => (t as Record<string, unknown>)[\"@type\"] === \"Video\") as Record<string, unknown> | undefined;\n const audio = tracks.find((t: unknown) => (t as Record<string, unknown>)[\"@type\"] === \"Audio\") as Record<string, unknown> | undefined;\n\n const str = (v: unknown) => (typeof v === \"string\" ? v : \"\");\n const num = (v: unknown) => parseFloat(str(v)) || 0;\n\n const hdrFormats = str(video?.[\"HDR_Format\"] ?? video?.[\"transfer_characteristics\"]);\n const isHdr = hdrFormats.length > 0 && !hdrFormats.toLowerCase().includes(\"bt.709\") && !hdrFormats.toLowerCase().includes(\"sdr\");\n\n return {\n container: str(general?.[\"Format\"]) || file.type || \"Unknown\",\n fileSize: file.size,\n video: video ? {\n codec: str(video[\"Format\"]),\n width: num(video[\"Width\"]),\n height: num(video[\"Height\"]),\n duration: num(video[\"Duration\"]) / 1000,\n bitrate: num(video[\"BitRate\"]),\n frameRate: num(video[\"FrameRate\"]),\n hdr: isHdr,\n colorSpace: str(video[\"colour_primaries\"]) || str(video[\"ColorSpace\"]),\n } : null,\n audio: audio ? {\n codec: str(audio[\"Format\"]),\n channels: num(audio[\"Channels\"]),\n sampleRate: num(audio[\"SamplingRate\"]),\n } : null,\n };\n}\n","\"use client\";\n\nimport { useState, useCallback, type CSSProperties } from \"react\";\nimport { useMultipartUpload } from \"@geekapps/silo-nextjs\";\nimport type { VideoUploadOptions } from \"@geekapps/silo-nextjs\";\nimport type { VideoUploaderProps } from \"./types.js\";\nimport { DropZone } from \"./components/DropZone.js\";\nimport { ProgressBar } from \"./components/ProgressBar.js\";\nimport { VideoOptions } from \"./components/VideoOptions.js\";\nimport { VideoCompatAlert } from \"./components/VideoCompatAlert.js\";\nimport { formatBytes } from \"./utils/format.js\";\nimport { resolveTheme, themeToVars } from \"./utils/theme.js\";\nimport { analyzeVideoFile, getCompatIssues, type VideoFileInfo, type VideoCompatIssue } from \"./utils/videoInfo.js\";\n\nconst DEFAULT_VIDEO_OPTS: VideoUploadOptions = {\n thumbnails: true, storyboard: false, autoCaptions: false,\n separateAudio: false, codec: \"h264\", transcoding: \"auto\",\n};\n\nfunction createInitialVideoOpts(video?: VideoUploadOptions): VideoUploadOptions {\n return video ?? DEFAULT_VIDEO_OPTS;\n}\n\nfunction uploadLabel(status: string, progress: number): string {\n if (status === \"preparing\") return \"Preparando…\";\n if (status === \"completing\") return \"Concluindo envio…\";\n if (progress < 20) return \"Iniciando envio…\";\n if (progress < 50) return \"Enviando vídeo…\";\n if (progress < 80) return \"Ainda enviando…\";\n if (progress < 97) return \"Quase terminando…\";\n return \"Finalizando…\";\n}\n\nexport function VideoUploader({\n bucket,\n expiresIn,\n onUpload,\n onError,\n className = \"\",\n style,\n disabled = false,\n maxSize,\n accept = \"video/*\",\n showPreview = true,\n showVideoOptions = false,\n video,\n theme,\n renderIcon,\n renderProgress,\n renderSuccess,\n renderError,\n children,\n}: VideoUploaderProps) {\n const { state, upload, pause, resume, abort, reset } = useMultipartUpload(bucket);\n const [preview, setPreview] = useState<string | null>(null);\n const [videoOpts, setVideoOpts] = useState<VideoUploadOptions>(() => createInitialVideoOpts(video));\n const [stagedFile, setStagedFile] = useState<File | null>(null);\n const [videoInfo, setVideoInfo] = useState<VideoFileInfo | null>(null);\n const [videoIssues, setVideoIssues] = useState<VideoCompatIssue[]>([]);\n const [analyzing, setAnalyzing] = useState(false);\n const t = resolveTheme(theme);\n const vars = themeToVars(t);\n\n const doUpload = useCallback(async (file: File, opts: VideoUploadOptions) => {\n if (showPreview) setPreview(URL.createObjectURL(file));\n try {\n const result = await upload(file, { ...(bucket !== undefined && { bucket }), video: opts });\n if (result) onUpload?.(result);\n } catch (err) {\n onError?.(err instanceof Error ? err : new Error(String(err)));\n }\n }, [upload, bucket, onUpload, onError, showPreview]);\n\n const handleFiles = useCallback(async (files: File[]) => {\n const file = files[0];\n if (!file) return;\n if (showVideoOptions) {\n setVideoOpts(createInitialVideoOpts(video));\n setVideoInfo(null);\n setVideoIssues([]);\n setStagedFile(file);\n if (showPreview) setPreview(URL.createObjectURL(file));\n setAnalyzing(true);\n try {\n const info = await analyzeVideoFile(file);\n setVideoInfo(info);\n setVideoIssues(getCompatIssues(info));\n } catch {\n // silently skip if analysis fails — don't block the upload\n } finally {\n setAnalyzing(false);\n }\n } else {\n await doUpload(file, video ?? videoOpts);\n }\n }, [showVideoOptions, video, videoOpts, doUpload, showPreview]);\n\n const containerStyle: CSSProperties = {\n ...vars as CSSProperties,\n ...style,\n };\n\n const isUploading = state.status === \"uploading\" || state.status === \"preparing\" || state.status === \"completing\";\n const progress = state.status === \"uploading\" ? state.progress : state.status === \"completing\" ? 99 : 0;\n const isPaused = state.status === \"idle\" && preview !== null && !stagedFile;\n\n if (state.status === \"error\" && renderError) return <div className=\"flex flex-col gap-3 w-full\" style={containerStyle}>{renderError(state.error, reset)}</div>;\n if (state.status === \"done\" && renderSuccess) return <div className=\"flex flex-col gap-3 w-full\" style={containerStyle}>{renderSuccess(state.result)}</div>;\n\n return (\n <div className={`flex flex-col gap-3 w-full${className ? ` ${className}` : \"\"}`} style={containerStyle}>\n <DropZone\n {...(accept !== undefined && { accept })}\n {...(maxSize !== undefined && { maxSize })}\n {...(onError !== undefined && { onError })}\n {...(theme !== undefined && { theme })}\n disabled={disabled || isUploading}\n onFiles={handleFiles}\n style={{ padding: \"32px 24px\", textAlign: \"center\" }}\n >\n {preview && !isUploading && !stagedFile ? (\n <div className=\"flex flex-col items-center gap-2\">\n <video src={preview} className=\"max-w-full max-h-[180px] rounded-lg\" muted playsInline />\n <span className=\"text-[12px] text-slate-400\">Clique ou arraste para trocar o vídeo</span>\n </div>\n ) : (\n <div className=\"flex flex-col items-center gap-2\">\n {renderIcon ? renderIcon() : (\n <svg width=\"40\" height=\"40\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" className=\"text-slate-400 opacity-50\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={1.5} d=\"M15 10l4.553-2.069A1 1 0 0121 8.878v6.244a1 1 0 01-1.447.894L15 14M3 8a2 2 0 012-2h8a2 2 0 012 2v8a2 2 0 01-2 2H5a2 2 0 01-2-2V8z\" />\n </svg>\n )}\n {children ?? (\n <>\n <span className=\"text-slate-900 font-bold text-[15px]\">Arraste seu vídeo aqui</span>\n <span className=\"text-slate-500 text-[13px]\">ou clique para escolher do seu dispositivo</span>\n <span className=\"text-slate-400 text-[12px]\">\n MP4, MOV, MKV, WebM{maxSize ? ` · Máx ${formatBytes(maxSize)}` : \"\"}\n </span>\n </>\n )}\n </div>\n )}\n </DropZone>\n\n {showVideoOptions && stagedFile && !isUploading && state.status !== \"done\" && (\n <>\n {preview && (\n <div className=\"border border-slate-200 rounded-xl overflow-hidden bg-black\">\n <video src={preview} className=\"w-full max-h-[200px] block\" muted playsInline controls />\n </div>\n )}\n {(analyzing || videoInfo) && (\n <div className=\"border border-slate-200 rounded-xl overflow-hidden\">\n <div className=\"px-3.5 py-2 bg-slate-100 text-[12px] font-bold text-slate-500 tracking-[0.04em]\">📋 Informações do arquivo</div>\n <div className=\"p-3.5\">\n <VideoCompatAlert info={videoInfo!} issues={videoIssues} analyzing={analyzing} />\n </div>\n </div>\n )}\n {videoIssues.length === 0 && (\n <div className=\"border border-slate-200 rounded-xl overflow-hidden\">\n <div className=\"px-3.5 py-2 bg-slate-100 text-[12px] font-bold text-slate-500 tracking-[0.04em]\">🎬 Configurações de vídeo</div>\n <VideoOptions value={videoOpts} onChange={setVideoOpts} style={{ padding: \"12px 14px\" }} />\n </div>\n )}\n <div className=\"flex gap-2\">\n <button\n className=\"inline-flex items-center justify-center gap-1.5 text-sm font-bold py-2.5 px-4 rounded-xl border border-slate-200 bg-transparent text-slate-900 cursor-pointer hover:bg-slate-100\"\n onClick={() => { setStagedFile(null); setPreview(null); setVideoInfo(null); setVideoIssues([]); setVideoOpts(createInitialVideoOpts(video)); }}\n >\n Cancelar\n </button>\n <button\n disabled={videoIssues.length > 0 || analyzing}\n className=\"flex-1 inline-flex items-center justify-center gap-1.5 text-sm font-bold py-2.5 px-4 rounded-xl border-transparent bg-indigo-500 text-white cursor-pointer hover:opacity-90 disabled:opacity-40 disabled:cursor-not-allowed\"\n onClick={() => { const f = stagedFile; setStagedFile(null); setVideoInfo(null); setVideoIssues([]); void doUpload(f, videoOpts); setVideoOpts(createInitialVideoOpts(video)); }}\n >\n Enviar vídeo\n </button>\n </div>\n </>\n )}\n\n {isUploading && (\n renderProgress ? renderProgress(progress) : (\n <div className=\"flex flex-col gap-2 px-3 py-4 bg-slate-50 rounded-xl border border-slate-200\">\n <div className=\"flex justify-between items-center\">\n <span className=\"text-[13px] font-semibold text-slate-900\">{uploadLabel(state.status, progress)}</span>\n <div className=\"flex gap-2 items-center\">\n <span className=\"text-[13px] font-bold text-indigo-500\">{progress}%</span>\n <button\n className=\"inline-flex items-center justify-center text-[11px] font-semibold py-0.5 px-2 rounded-lg border border-slate-200 bg-transparent text-slate-900 cursor-pointer hover:bg-slate-100\"\n onClick={pause}\n >\n Pausar\n </button>\n </div>\n </div>\n <ProgressBar progress={progress} />\n <span className=\"text-[11px] text-slate-400\">O processamento do vídeo começa automaticamente após o envio</span>\n </div>\n )\n )}\n\n {isPaused && (\n <div className=\"flex gap-2\">\n <button\n className=\"flex-1 inline-flex items-center justify-center gap-1.5 text-sm font-bold py-2.5 px-4 rounded-xl border-transparent bg-emerald-500 text-white cursor-pointer hover:opacity-90\"\n onClick={() => resume({ ...(bucket !== undefined && { bucket }), video: videoOpts })}\n >\n ▶ Retomar envio\n </button>\n <button\n className=\"inline-flex items-center justify-center gap-1.5 text-sm font-bold py-2.5 px-4 rounded-xl border border-slate-200 bg-transparent text-slate-900 cursor-pointer hover:bg-slate-100\"\n onClick={() => { abort(); setPreview(null); }}\n >\n Cancelar\n </button>\n </div>\n )}\n\n {state.status === \"done\" && !renderSuccess && (\n <div className=\"flex flex-col gap-2 px-4 py-3.5 bg-green-500/[0.08] rounded-xl border border-green-500/20\">\n <div className=\"flex items-center gap-3\">\n <span className=\"text-2xl\">✅</span>\n <div className=\"flex-1\">\n <div className=\"font-bold text-sm text-green-700\">Vídeo enviado com sucesso!</div>\n <div className=\"text-[12px] text-slate-400 mt-0.5\">{formatBytes(state.result.size)}</div>\n </div>\n <button\n className=\"inline-flex items-center justify-center text-xs font-semibold py-1 px-2.5 rounded-lg border border-green-500/30 text-green-700 bg-transparent cursor-pointer hover:bg-green-500/10 shrink-0\"\n onClick={() => { reset(); setPreview(null); }}\n >\n Enviar outro\n </button>\n </div>\n <div className=\"text-[12px] text-slate-500 px-3 py-2 rounded-lg bg-green-500/[0.06] border border-green-500/15\">\n 🎬 Seu vídeo está sendo processado em segundo plano. Isso pode levar alguns minutos dependendo do tamanho.\n </div>\n </div>\n )}\n\n {state.status === \"error\" && !renderError && (\n <div className=\"flex items-center gap-3 px-4 py-3.5 bg-red-500/[0.07] rounded-xl border border-red-500/20\">\n <span className=\"text-[22px]\">⚠️</span>\n <div className=\"flex-1\">\n <div className=\"font-bold text-[13px] text-red-500\">Não foi possível enviar o vídeo</div>\n <div className=\"text-[12px] text-slate-400 mt-0.5\">{state.error.message}</div>\n </div>\n <button\n className=\"inline-flex items-center justify-center text-xs font-semibold py-1 px-2.5 rounded-lg border border-red-500/30 text-red-500 bg-transparent cursor-pointer hover:bg-red-500/10 shrink-0\"\n onClick={() => { reset(); setPreview(null); }}\n >\n Tentar novamente\n </button>\n </div>\n )}\n </div>\n );\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/utils/theme.ts","../src/components/DropZone.tsx","../src/components/ProgressBar.tsx","../src/components/VideoOptions.tsx","../src/utils/format.ts","../src/components/VideoCompatAlert.tsx","../src/utils/videoInfo.ts","../src/VideoUploader.tsx"],"names":["jsx","jsxs","useState","Fragment","useCallback"],"mappings":"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","file":"VideoUploader.js","sourcesContent":["import type { SiloTheme } from \"../types.js\";\n\nexport const defaultTheme: Required<SiloTheme> = {\n borderColor: \"#e2e8f0\",\n borderColorActive: \"#6366f1\",\n backgroundColor: \"#f8fafc\",\n backgroundColorHover: \"#f1f5f9\",\n textColor: \"#0f172a\",\n textColorMuted: \"#64748b\",\n accentColor: \"#6366f1\",\n accentColorHover: \"#4f46e5\",\n errorColor: \"#ef4444\",\n successColor: \"#22c55e\",\n borderRadius: \"12px\",\n fontFamily: \"inherit\",\n};\n\nexport function resolveTheme(theme?: SiloTheme): Required<SiloTheme> {\n return { ...defaultTheme, ...theme };\n}\n\nexport function themeToVars(theme: Required<SiloTheme>): Record<string, string> {\n return {\n \"--silo-border\": theme.borderColor,\n \"--silo-border-active\": theme.borderColorActive,\n \"--silo-bg\": theme.backgroundColor,\n \"--silo-bg-hover\": theme.backgroundColorHover,\n \"--silo-text\": theme.textColor,\n \"--silo-text-muted\": theme.textColorMuted,\n \"--silo-accent\": theme.accentColor,\n \"--silo-accent-hover\": theme.accentColorHover,\n \"--silo-error\": theme.errorColor,\n \"--silo-success\": theme.successColor,\n \"--silo-radius\": theme.borderRadius,\n \"--silo-font\": theme.fontFamily,\n };\n}\n","\"use client\";\n\nimport {\n useState,\n useRef,\n useCallback,\n type DragEvent,\n type ChangeEvent,\n type ReactNode,\n type CSSProperties,\n} from \"react\";\nimport type { SiloTheme } from \"../types.js\";\nimport { resolveTheme, themeToVars } from \"../utils/theme.js\";\n\ninterface DropZoneProps {\n accept?: string;\n multiple?: boolean;\n disabled?: boolean;\n maxSize?: number;\n onFiles: (files: File[]) => void;\n onError?: (error: Error) => void;\n className?: string;\n style?: CSSProperties;\n theme?: SiloTheme;\n children: ReactNode;\n}\n\nexport function DropZone({\n accept,\n multiple = false,\n disabled = false,\n maxSize,\n onFiles,\n onError,\n className = \"\",\n style,\n theme,\n children,\n}: DropZoneProps) {\n const [dragging, setDragging] = useState(false);\n const inputRef = useRef<HTMLInputElement>(null);\n const t = resolveTheme(theme);\n const vars = themeToVars(t);\n\n const validate = useCallback(\n (files: File[]): File[] => {\n return files.filter((f) => {\n if (maxSize && f.size > maxSize) {\n onError?.(new Error(`File \"${f.name}\" exceeds max size of ${maxSize} bytes`));\n return false;\n }\n return true;\n });\n },\n [maxSize, onError]\n );\n\n const handleDrop = useCallback(\n (e: DragEvent<HTMLDivElement>) => {\n e.preventDefault();\n setDragging(false);\n if (disabled) return;\n const files = Array.from(e.dataTransfer.files);\n const valid = validate(files);\n if (valid.length) onFiles(valid);\n },\n [disabled, validate, onFiles]\n );\n\n const handleChange = useCallback(\n (e: ChangeEvent<HTMLInputElement>) => {\n const files = Array.from(e.target.files ?? []);\n const valid = validate(files);\n if (valid.length) onFiles(valid);\n e.target.value = \"\";\n },\n [validate, onFiles]\n );\n\n const rootStyle: CSSProperties = {\n ...vars as CSSProperties,\n border: `2px dashed ${dragging ? \"var(--silo-border-active)\" : \"var(--silo-border)\"}`,\n borderRadius: \"var(--silo-radius)\",\n background: dragging ? \"var(--silo-bg-hover)\" : \"var(--silo-bg)\",\n color: \"var(--silo-text)\",\n cursor: disabled ? \"not-allowed\" : \"pointer\",\n opacity: disabled ? 0.5 : 1,\n outline: \"none\",\n transition: \"border-color 150ms, background 150ms\",\n ...style,\n };\n\n return (\n <div\n className={className}\n style={rootStyle}\n onDragOver={(e) => { e.preventDefault(); if (!disabled) setDragging(true); }}\n onDragLeave={() => setDragging(false)}\n onDrop={handleDrop}\n onClick={() => !disabled && inputRef.current?.click()}\n role=\"button\"\n tabIndex={disabled ? -1 : 0}\n onKeyDown={(e) => { if (e.key === \"Enter\" || e.key === \" \") inputRef.current?.click(); }}\n aria-label=\"Upload area\"\n >\n <input\n ref={inputRef}\n type=\"file\"\n accept={accept}\n multiple={multiple}\n className=\"hidden\"\n onChange={handleChange}\n disabled={disabled}\n />\n {children}\n </div>\n );\n}\n","\"use client\";\n\nimport type { CSSProperties } from \"react\";\n\ninterface ProgressBarProps {\n progress: number;\n className?: string;\n style?: CSSProperties;\n}\n\nexport function ProgressBar({ progress, className = \"\", style }: ProgressBarProps) {\n return (\n <div\n className={className}\n style={{ height: 4, borderRadius: 9999, background: \"var(--silo-border, #e2e8f0)\", overflow: \"hidden\", ...style }}\n role=\"progressbar\"\n aria-valuenow={progress}\n aria-valuemin={0}\n aria-valuemax={100}\n >\n <div\n style={{ height: \"100%\", borderRadius: 9999, background: \"var(--silo-accent, #6366f1)\", width: `${progress}%`, transition: \"width 200ms linear\" }}\n />\n </div>\n );\n}\n","\"use client\";\n\nimport { useState } from \"react\";\nimport type { CSSProperties } from \"react\";\nimport type { VideoUploadOptions } from \"@geekapps/silo-nextjs\";\n\n// ── Video codec ───────────────────────────────────────────────────────────────\n\nconst VIDEO_CODECS = [\n {\n value: \"h264\",\n label: \"H.264\",\n sublabel: \"Compatível com tudo\",\n description: \"Funciona em qualquer dispositivo — celulares, Smart TVs, navegadores antigos e novos. A escolha mais segura se você não sabe onde o vídeo será assistido.\",\n },\n {\n value: \"h265\",\n label: \"H.265\",\n sublabel: \"Menor tamanho\",\n description: \"Arquivo até 50% menor que H.264 com a mesma qualidade de imagem. Requer dispositivo moderno (2016+). Ideal para vídeos longos ou em alta resolução.\",\n },\n {\n value: \"av1\",\n label: \"AV1\",\n sublabel: \"Máx. eficiência\",\n description: \"O codec mais eficiente disponível — arquivo até 50% menor que H.265. Exige navegador recente (Chrome 70+, Firefox 67+, Safari 17+).\",\n warning: \"Não funciona em iPhones com iOS abaixo de 16 nem em Smart TVs mais antigas. Use H.264 se precisar de compatibilidade ampla.\",\n },\n] as const;\n\n// ── Audio ─────────────────────────────────────────────────────────────────────\n\nconst AUDIO_SIMPLE = [\n {\n value: \"passthrough\",\n label: \"Manter original\",\n badge: \"Recomendado\",\n description: \"Mantém o áudio exatamente como está no arquivo original, sem perdas. Se o formato não for compatível com streaming, converte automaticamente para AAC estéreo.\",\n },\n {\n value: \"aac\",\n label: \"AAC\",\n description: \"Formato mais compatível do mercado — funciona em absolutamente todos os players, celulares e Smart TVs.\",\n },\n {\n value: \"opus\",\n label: \"Opus\",\n description: \"Melhor qualidade que AAC no mesmo tamanho. Funciona em Chrome, Firefox e Android. Não suportado no Safari/iPhone.\",\n },\n] as const;\n\nconst AUDIO_ADVANCED_CODEC = [\n { value: \"passthrough\", label: \"Original\", description: \"Copia sem reprocessar quando compatível (mantém AC3, E-AC3, Dolby Atmos). AAC estéreo como fallback.\" },\n { value: \"aac\", label: \"AAC\", description: \"Compatibilidade máxima com todos os dispositivos.\" },\n { value: \"opus\", label: \"Opus\", description: \"Qualidade superior ao AAC. Chrome/Firefox/Android.\" },\n] as const;\n\nconst AUDIO_CHANNELS = [\n { value: \"original\", label: \"Original\", description: \"Mantém os canais do arquivo fonte.\" },\n { value: \"stereo\", label: \"Estéreo (2.0)\", description: \"Dois canais — compatível com fones e qualquer dispositivo.\" },\n { value: \"5.1\", label: \"Surround 5.1\", description: \"Seis canais. Ideal para home theaters.\" },\n] as const;\n\nconst RESOLUTIONS = [\"144\", \"240\", \"360\", \"480\", \"720\", \"1080\", \"1440\", \"2160\"] as const;\nconst RESOLUTION_LABELS: Record<string, string> = {\n \"144\": \"144p\", \"240\": \"240p\", \"360\": \"360p\", \"480\": \"480p\",\n \"720\": \"720p HD\", \"1080\": \"1080p Full HD\", \"1440\": \"1440p 2K\", \"2160\": \"4K UHD\",\n};\n\n// ── Primitives ────────────────────────────────────────────────────────────────\n\nfunction btn(active: boolean, disabled = false): CSSProperties {\n if (disabled) return {\n border: \"1px solid rgba(255,255,255,0.08)\", background: \"rgba(255,255,255,0.03)\",\n color: \"rgba(255,255,255,0.2)\", padding: \"4px 10px\", borderRadius: 6,\n fontSize: 12, fontWeight: 600, cursor: \"not-allowed\",\n };\n return active\n ? { border: \"1px solid #6366f1\", background: \"#6366f1\", color: \"#fff\", padding: \"4px 10px\", borderRadius: 6, fontSize: 12, fontWeight: 600, cursor: \"pointer\" }\n : { border: \"1px solid rgba(255,255,255,0.15)\", background: \"rgba(255,255,255,0.05)\", color: \"rgba(255,255,255,0.7)\", padding: \"4px 10px\", borderRadius: 6, fontSize: 12, fontWeight: 600, cursor: \"pointer\" };\n}\n\nfunction Label({ children }: { children: React.ReactNode }) {\n return <div style={{ fontSize: 11, fontWeight: 700, textTransform: \"uppercase\", letterSpacing: \"0.05em\", marginBottom: 7, color: \"rgba(255,255,255,0.28)\" }}>{children}</div>;\n}\n\nfunction Hint({ children }: { children: React.ReactNode }) {\n return <p style={{ marginTop: 5, fontSize: 11, color: \"rgba(255,255,255,0.38)\", lineHeight: 1.55 }}>{children}</p>;\n}\n\nfunction Warn({ children }: { children: React.ReactNode }) {\n return (\n <div style={{ marginTop: 6, display: \"flex\", gap: 6, background: \"rgba(251,191,36,0.07)\", border: \"1px solid rgba(251,191,36,0.18)\", borderRadius: 7, padding: \"6px 10px\" }}>\n <span style={{ fontSize: 12, flexShrink: 0 }}>⚠</span>\n <span style={{ fontSize: 11, color: \"#fbbf24\", lineHeight: 1.55 }}>{children}</span>\n </div>\n );\n}\n\nfunction Note({ children }: { children: React.ReactNode }) {\n return (\n <div style={{ marginTop: 6, display: \"flex\", gap: 6, background: \"rgba(99,102,241,0.07)\", border: \"1px solid rgba(99,102,241,0.18)\", borderRadius: 7, padding: \"6px 10px\" }}>\n <span style={{ fontSize: 12, flexShrink: 0 }}>ℹ</span>\n <span style={{ fontSize: 11, color: \"rgba(165,180,252,0.9)\", lineHeight: 1.55 }}>{children}</span>\n </div>\n );\n}\n\nfunction Toggle({ checked, onToggle, label, hint, disabled }: {\n checked: boolean; onToggle: () => void; label: string; hint?: string; disabled?: boolean;\n}) {\n return (\n <div style={{ display: \"flex\", alignItems: \"flex-start\", gap: 8, cursor: disabled ? \"not-allowed\" : \"pointer\", userSelect: \"none\", opacity: disabled ? 0.4 : 1 }}\n onClick={() => !disabled && onToggle()}>\n <span style={{ position: \"relative\", display: \"inline-block\", width: 32, height: 18, borderRadius: 9, flexShrink: 0, marginTop: 1, background: (checked && !disabled) ? \"#6366f1\" : \"rgba(255,255,255,0.12)\", transition: \"background 150ms\" }}>\n <span style={{ position: \"absolute\", top: 2, left: (checked && !disabled) ? 16 : 2, width: 14, height: 14, borderRadius: \"50%\", background: \"#fff\", boxShadow: \"0 1px 3px rgba(0,0,0,.3)\", transition: \"left 150ms\" }} />\n </span>\n <div>\n <span style={{ fontSize: 12, fontWeight: 500, color: disabled ? \"rgba(255,255,255,0.4)\" : \"rgba(255,255,255,0.85)\" }}>{label}</span>\n {hint && <p style={{ fontSize: 11, color: \"rgba(255,255,255,0.35)\", marginTop: 2, lineHeight: 1.5 }}>{hint}</p>}\n </div>\n </div>\n );\n}\n\nfunction Divider() {\n return <div style={{ height: 1, background: \"rgba(255,255,255,0.06)\", margin: \"2px 0\" }} />;\n}\n\n// ── Main component ────────────────────────────────────────────────────────────\n\ninterface VideoOptionsProps {\n value: VideoUploadOptions;\n onChange: (opts: VideoUploadOptions) => void;\n style?: CSSProperties;\n}\n\nexport function VideoOptions({ value, onChange, style }: VideoOptionsProps) {\n const [advanced, setAdvanced] = useState(false);\n\n const codec = value.codec ?? \"h264\";\n const transcoding = value.transcoding ?? \"auto\";\n const isAuto = transcoding === \"auto\";\n const selectedRes = isAuto ? [] : (transcoding as string[]);\n const audioCodec = value.audioCodec ?? \"passthrough\";\n const audioChannels = value.audioChannels ?? \"original\";\n const preserveAtmos = value.preserveAtmos ?? true;\n const hdrMode = value.hdr ?? \"preserve\";\n const hdrSupported = codec === \"h265\" || codec === \"av1\";\n const showAtmosOpt = audioCodec === \"passthrough\";\n const showAtmosWarn = audioCodec === \"aac\" || audioCodec === \"opus\";\n const selectedCodec = VIDEO_CODECS.find((c) => c.value === codec);\n\n type Res = \"144\" | \"240\" | \"360\" | \"480\" | \"720\" | \"1080\" | \"1440\" | \"2160\";\n function toggleRes(r: Res) {\n if (isAuto) { onChange({ ...value, transcoding: [r] }); return; }\n const next = selectedRes.includes(r) ? selectedRes.filter((x) => x !== r) : [...selectedRes, r];\n onChange({ ...value, transcoding: next.length === 0 ? \"auto\" : (next as Res[]) });\n }\n\n return (\n <div className=\"flex flex-col gap-5\" style={style}>\n\n {/* ══ SEÇÃO: VÍDEO ═══════════════════════════════════════════════════════ */}\n <div>\n <Label>Formato de vídeo</Label>\n\n {/* Codec */}\n <div className=\"mb-4\">\n <div className=\"flex gap-1.5 flex-wrap mb-1\">\n {VIDEO_CODECS.map((c) => (\n <button key={c.value} type=\"button\"\n onClick={() => onChange({ ...value, codec: c.value as NonNullable<VideoUploadOptions[\"codec\"]> })}\n style={btn(codec === c.value)}\n >\n {c.label}\n </button>\n ))}\n </div>\n {selectedCodec && (\n <Hint><strong style={{ color: \"rgba(255,255,255,0.55)\" }}>{selectedCodec.sublabel}.</strong>{\" \"}{selectedCodec.description}</Hint>\n )}\n {\"warning\" in (selectedCodec ?? {}) && (selectedCodec as { warning?: string }).warning && (\n <Warn>{(selectedCodec as { warning?: string }).warning}</Warn>\n )}\n </div>\n\n {/* Resoluções */}\n <div className=\"mb-4\">\n <Label>Versões de qualidade (resoluções)</Label>\n <div className=\"flex gap-1.5 flex-wrap mb-1\">\n <button type=\"button\" onClick={() => onChange({ ...value, transcoding: \"auto\" })} style={btn(isAuto)}>\n Automático\n </button>\n {RESOLUTIONS.map((r) => (\n <button key={r} type=\"button\" onClick={() => toggleRes(r as Res)} style={btn(!isAuto && selectedRes.includes(r))}>\n {RESOLUTION_LABELS[r]}\n </button>\n ))}\n </div>\n <Hint>\n {isAuto\n ? \"Gera automaticamente todas as versões até a qualidade original do vídeo.\"\n : \"Somente as versões selecionadas serão geradas.\"}\n </Hint>\n </div>\n\n {/* HDR */}\n <div style={{ opacity: hdrSupported ? 1 : 0.45 }}>\n <Label>Imagem HDR (alto contraste e cores vibrantes)</Label>\n {!advanced ? (\n <>\n <Toggle\n checked={hdrMode === \"preserve\"}\n onToggle={() => onChange({ ...value, hdr: hdrMode === \"preserve\" ? \"sdr\" : \"preserve\" })}\n label=\"Manter imagem HDR do vídeo original\"\n hint=\"Preserva HDR10, HDR10+, HLG e Dolby Vision. Só funciona com H.265 ou AV1.\"\n disabled={!hdrSupported}\n />\n {!hdrSupported && (\n <Warn>O H.264 não suporta HDR. Se o vídeo for HDR, a imagem será convertida automaticamente para SDR. Para manter o HDR, escolha H.265 ou AV1.</Warn>\n )}\n </>\n ) : (\n <>\n <div className=\"flex gap-1.5 flex-wrap mb-1\">\n <button type=\"button\" onClick={() => hdrSupported && onChange({ ...value, hdr: \"preserve\" })} style={btn(hdrMode === \"preserve\" && hdrSupported, !hdrSupported)}>\n Manter HDR\n </button>\n <button type=\"button\" onClick={() => onChange({ ...value, hdr: \"sdr\" })} style={btn(hdrMode === \"sdr\" || !hdrSupported)}>\n Converter para SDR\n </button>\n </div>\n {!hdrSupported\n ? <Warn>O H.264 não suporta HDR. O vídeo será convertido para SDR automaticamente. Escolha H.265 ou AV1 para manter o HDR.</Warn>\n : <Hint>{hdrMode === \"preserve\"\n ? \"HDR10, HDR10+, HLG e Dolby Vision preservados. Em telas sem HDR o vídeo funciona normalmente.\"\n : \"Convertido para SDR padrão — compatível com qualquer tela.\"}</Hint>\n }\n </>\n )}\n </div>\n </div>\n\n <Divider />\n\n {/* ══ SEÇÃO: ÁUDIO ═══════════════════════════════════════════════════════ */}\n <div>\n <Label>Áudio</Label>\n\n {!advanced ? (\n <div className=\"mb-4\">\n <div className=\"flex gap-1.5 flex-wrap mb-1\">\n {AUDIO_SIMPLE.map((a) => (\n <button key={a.value} type=\"button\"\n onClick={() => onChange({ ...value, audioCodec: a.value })}\n style={btn(audioCodec === a.value)}\n >\n {a.label}\n {\"badge\" in a && a.badge ? (\n <span style={{ marginLeft: 5, fontSize: 9, fontWeight: 700, background: \"rgba(255,255,255,0.15)\", borderRadius: 4, padding: \"1px 4px\", verticalAlign: \"middle\" }}>\n {a.badge}\n </span>\n ) : null}\n </button>\n ))}\n </div>\n <Hint>{AUDIO_SIMPLE.find((a) => a.value === audioCodec)?.description}</Hint>\n </div>\n ) : (\n <>\n {/* Codec avançado */}\n <div className=\"mb-4\">\n <Label>Formato de áudio (codec)</Label>\n <div className=\"flex gap-1.5 flex-wrap mb-1\">\n {AUDIO_ADVANCED_CODEC.map((a) => (\n <button key={a.value} type=\"button\"\n onClick={() => onChange({ ...value, audioCodec: a.value })}\n style={btn(audioCodec === a.value)}\n >\n {a.label}\n </button>\n ))}\n </div>\n <Hint>{AUDIO_ADVANCED_CODEC.find((a) => a.value === audioCodec)?.description}</Hint>\n {showAtmosWarn && (\n <Warn>Este formato não suporta Dolby Atmos. Use <strong>Dolby Digital Plus (E-AC3)</strong> ou <strong>Original</strong> para manter o som espacial 3D.</Warn>\n )}\n </div>\n\n {/* Canais */}\n <div className=\"mb-4\">\n <Label>Canais de áudio</Label>\n <div className=\"flex gap-1.5 flex-wrap mb-1\">\n {AUDIO_CHANNELS.map((c) => (\n <button key={c.value} type=\"button\"\n onClick={() => onChange({ ...value, audioChannels: c.value })}\n style={btn(audioChannels === c.value)}\n >\n {c.label}\n </button>\n ))}\n </div>\n <Hint>{AUDIO_CHANNELS.find((c) => c.value === audioChannels)?.description}</Hint>\n </div>\n\n {/* Dolby Atmos */}\n {showAtmosOpt && (\n <div className=\"mb-4\">\n <Label>Dolby Atmos (som espacial 3D)</Label>\n <Toggle\n checked={preserveAtmos}\n onToggle={() => onChange({ ...value, preserveAtmos: !preserveAtmos })}\n label=\"Manter Dolby Atmos quando disponível no arquivo\"\n hint=\"Funciona somente com Dolby Digital Plus (E-AC3) ou Original.\"\n />\n {!preserveAtmos && (\n <Note>Com Atmos desativado, o áudio será mixado em surround convencional sem informação espacial.</Note>\n )}\n </div>\n )}\n </>\n )}\n\n {/* Faixa de áudio separada */}\n <Toggle\n checked={value.separateAudio ?? false}\n onToggle={() => onChange({ ...value, separateAudio: !value.separateAudio })}\n label=\"Exportar faixa de áudio separada\"\n hint=\"Gera também um arquivo de áudio independente do vídeo.\"\n />\n </div>\n\n <Divider />\n\n {/* ══ SEÇÃO: MINIATURAS ══════════════════════════════════════════════════ */}\n <div>\n <Label>Miniaturas (thumbnails)</Label>\n <Toggle\n checked={value.thumbnails ?? true}\n onToggle={() => onChange({ ...value, thumbnails: !(value.thumbnails ?? true) })}\n label=\"Gerar miniaturas automaticamente\"\n hint=\"Imagens de prévia usadas em players, listas e compartilhamentos. Recomendado manter ativo.\"\n />\n </div>\n\n <Divider />\n\n {/* ══ SEÇÃO: STORYBOARD ══════════════════════════════════════════════════ */}\n <div>\n <Label>Storyboard</Label>\n <Toggle\n checked={value.storyboard ?? false}\n onToggle={() => onChange({ ...value, storyboard: !value.storyboard })}\n label=\"Gerar storyboard para pré-visualização\"\n hint=\"Mostra frames do vídeo ao passar o mouse na barra de progresso do player. Aumenta levemente o tempo de processamento.\"\n />\n </div>\n\n {/* Toggle avançado */}\n <button\n type=\"button\"\n onClick={() => setAdvanced((v) => !v)}\n style={{ alignSelf: \"flex-start\", fontSize: 11, color: \"rgba(255,255,255,0.3)\", background: \"none\", border: \"none\", cursor: \"pointer\", padding: 0, textDecoration: \"underline\", textUnderlineOffset: 3 }}\n >\n {advanced ? \"← Voltar ao modo simples\" : \"Configurações avançadas de áudio e HDR →\"}\n </button>\n </div>\n );\n}\n","export function formatBytes(bytes: number): string {\n if (bytes < 1024) return `${bytes} B`;\n if (bytes < 1024 ** 2) return `${(bytes / 1024).toFixed(1)} KB`;\n if (bytes < 1024 ** 3) return `${(bytes / 1024 ** 2).toFixed(1)} MB`;\n return `${(bytes / 1024 ** 3).toFixed(2)} GB`;\n}\n\nexport function getFileIcon(mimeType: string): string {\n if (mimeType.startsWith(\"image/\")) return \"🖼️\";\n if (mimeType.startsWith(\"video/\")) return \"🎬\";\n if (mimeType.startsWith(\"audio/\")) return \"🎵\";\n if (mimeType === \"application/pdf\") return \"📄\";\n if (mimeType.includes(\"spreadsheet\") || mimeType.includes(\"excel\")) return \"📊\";\n if (mimeType.includes(\"presentation\") || mimeType.includes(\"powerpoint\")) return \"📑\";\n if (mimeType.includes(\"word\") || mimeType.includes(\"document\")) return \"📝\";\n if (mimeType.includes(\"zip\") || mimeType.includes(\"tar\") || mimeType.includes(\"gzip\")) return \"📦\";\n return \"📎\";\n}\n","\"use client\";\n\nimport type { VideoFileInfo, VideoCompatIssue } from \"../utils/videoInfo.js\";\nimport { formatBytes } from \"../utils/format.js\";\n\nconst CODEC_MESSAGES: Record<string, { title: string; detail: string }> = {\n AV1: { title: \"AV1 não é suportado como entrada\", detail: \"O pipeline de transcodificação não aceita arquivos AV1. Converta para H.264 ou H.265 antes de enviar.\" },\n VP9: { title: \"VP9 não é suportado como entrada\", detail: \"Arquivos WebM/VP9 não são aceitos. Converta para H.264 ou H.265 antes de enviar.\" },\n VP8: { title: \"VP8 não é suportado como entrada\", detail: \"Arquivos WebM/VP8 não são aceitos. Converta para H.264 antes de enviar.\" },\n \"MPEG-1 Video\": { title: \"MPEG-1 não é suportado\", detail: \"Formato muito antigo. Converta para H.264 antes de enviar.\" },\n \"MPEG-2 Video\": { title: \"MPEG-2 não é suportado\", detail: \"Converta para H.264 antes de enviar.\" },\n};\n\nconst CONTAINER_MESSAGES: Record<string, { title: string; detail: string }> = {\n FLV: { title: \"Formato FLV não suportado\", detail: \"Arquivos Flash Video não são aceitos. Converta para MP4 (H.264) antes de enviar.\" },\n \"Flash Video\": { title: \"Formato FLV não suportado\", detail: \"Arquivos Flash Video não são aceitos. Converta para MP4 (H.264) antes de enviar.\" },\n RealMedia: { title: \"Formato RealMedia não suportado\", detail: \"Converta para MP4 (H.264) antes de enviar.\" },\n ASF: { title: \"Formato ASF/WMV não suportado\", detail: \"Converta para MP4 (H.264) antes de enviar.\" },\n};\n\nfunction issueMessage(issue: VideoCompatIssue): { title: string; detail: string } {\n if (issue.code === \"unsupported_codec\") {\n return CODEC_MESSAGES[issue.codec] ?? { title: `Codec ${issue.codec} não suportado`, detail: \"Converta para H.264 ou H.265 antes de enviar.\" };\n }\n const key = Object.keys(CONTAINER_MESSAGES).find((k) => issue.container.includes(k));\n return (key ? CONTAINER_MESSAGES[key] : null) ?? { title: `Container ${issue.container} não suportado`, detail: \"Converta para MP4 (H.264) antes de enviar.\" };\n}\n\nfunction fmt(n: number, unit: string) { return `${n.toLocaleString(\"pt-BR\")}${unit}`; }\nfunction fmtDuration(secs: number) {\n const h = Math.floor(secs / 3600);\n const m = Math.floor((secs % 3600) / 60);\n const s = Math.floor(secs % 60);\n if (h > 0) return `${h}h ${m}m ${s}s`;\n if (m > 0) return `${m}m ${s}s`;\n return `${s}s`;\n}\n\ninterface Props {\n info: VideoFileInfo;\n issues: VideoCompatIssue[];\n analyzing?: boolean;\n}\n\nexport function VideoCompatAlert({ info, issues, analyzing }: Props) {\n if (analyzing) {\n return (\n <div style={{ display: \"flex\", alignItems: \"center\", gap: 8, padding: \"10px 14px\", background: \"rgba(99,102,241,0.06)\", border: \"1px solid rgba(99,102,241,0.18)\", borderRadius: 10 }}>\n <span style={{ fontSize: 14 }}>🔍</span>\n <span style={{ fontSize: 12, color: \"rgba(165,180,252,0.9)\" }}>Analisando arquivo…</span>\n </div>\n );\n }\n\n const v = info.video;\n\n return (\n <div style={{ display: \"flex\", flexDirection: \"column\", gap: 8 }}>\n {/* Resumo das props */}\n <div style={{ display: \"flex\", flexWrap: \"wrap\", gap: 6 }}>\n {v && (\n <>\n <Chip label={v.codec || \"?\"} color=\"neutral\" />\n {v.width > 0 && v.height > 0 && <Chip label={`${v.width}×${v.height}`} color=\"neutral\" />}\n {v.duration > 0 && <Chip label={fmtDuration(v.duration)} color=\"neutral\" />}\n {v.frameRate > 0 && <Chip label={fmt(Math.round(v.frameRate), \" fps\")} color=\"neutral\" />}\n {v.hdr && <Chip label=\"HDR\" color=\"purple\" />}\n </>\n )}\n {info.audio && <Chip label={info.audio.codec || \"sem áudio\"} color=\"neutral\" />}\n <Chip label={formatBytes(info.fileSize)} color=\"neutral\" />\n </div>\n\n {/* Avisos de incompatibilidade */}\n {issues.map((issue, i) => {\n const msg = issueMessage(issue);\n return (\n <div key={i} style={{ display: \"flex\", gap: 8, padding: \"10px 14px\", background: \"rgba(239,68,68,0.07)\", border: \"1px solid rgba(239,68,68,0.22)\", borderRadius: 10 }}>\n <span style={{ fontSize: 14, flexShrink: 0 }}>🚫</span>\n <div>\n <div style={{ fontSize: 12, fontWeight: 700, color: \"#f87171\", marginBottom: 2 }}>{msg.title}</div>\n <div style={{ fontSize: 11, color: \"rgba(255,255,255,0.5)\", lineHeight: 1.55 }}>{msg.detail}</div>\n </div>\n </div>\n );\n })}\n </div>\n );\n}\n\nfunction Chip({ label, color }: { label: string; color: \"neutral\" | \"purple\" }) {\n const s: React.CSSProperties = color === \"purple\"\n ? { background: \"rgba(168,85,247,0.12)\", border: \"1px solid rgba(168,85,247,0.25)\", color: \"#c084fc\" }\n : { background: \"rgba(255,255,255,0.05)\", border: \"1px solid rgba(255,255,255,0.1)\", color: \"rgba(255,255,255,0.6)\" };\n return (\n <span style={{ ...s, fontSize: 11, fontWeight: 600, borderRadius: 6, padding: \"2px 8px\", display: \"inline-block\" }}>\n {label}\n </span>\n );\n}\n","export interface VideoTrackInfo {\n codec: string; // e.g. \"AV1\", \"AVC\", \"HEVC\", \"VP9\"\n width: number;\n height: number;\n duration: number; // seconds\n bitrate: number; // bits/s\n frameRate: number;\n hdr: boolean; // HDR10 / HLG / Dolby Vision\n colorSpace: string; // e.g. \"BT.709\", \"BT.2020\"\n}\n\nexport interface AudioTrackInfo {\n codec: string; // e.g. \"AAC\", \"AC3\", \"EAC3\", \"OPUS\", \"MP3\"\n channels: number;\n sampleRate: number;\n}\n\nexport interface VideoFileInfo {\n container: string; // e.g. \"MPEG-4\", \"Matroska\", \"WebM\"\n video: VideoTrackInfo | null;\n audio: AudioTrackInfo | null;\n fileSize: number;\n}\n\nexport type VideoCompatIssue =\n | { code: \"unsupported_codec\"; codec: string }\n | { code: \"unsupported_container\"; container: string };\n\nconst UNSUPPORTED_CODECS = [\"AV1\", \"VP8\", \"VP9\", \"MPEG-1 Video\", \"MPEG-2 Video\", \"Theora\", \"RealVideo\"];\nconst UNSUPPORTED_CONTAINERS = [\"FLV\", \"Flash Video\", \"RealMedia\", \"ASF\"];\n\nexport function getCompatIssues(info: VideoFileInfo): VideoCompatIssue[] {\n const issues: VideoCompatIssue[] = [];\n if (info.video && UNSUPPORTED_CODECS.includes(info.video.codec)) {\n issues.push({ code: \"unsupported_codec\", codec: info.video.codec });\n }\n if (UNSUPPORTED_CONTAINERS.some((c) => info.container.includes(c))) {\n issues.push({ code: \"unsupported_container\", container: info.container });\n }\n return issues;\n}\n\nconst MEDIAINFO_CDN = \"https://cdn.jsdelivr.net/npm/mediainfo.js@0.3.7/dist/umd/index.js\";\nconst WASM_CDN = \"https://cdn.jsdelivr.net/npm/mediainfo.js@0.3.7/dist/MediaInfoModule.wasm\";\n\n// Load MediaInfoFactory from CDN via script tag to avoid any static bundler analysis.\nfunction loadMediaInfoFromCDN(): Promise<(opts: unknown) => Promise<unknown>> {\n return new Promise((resolve, reject) => {\n if (typeof window === \"undefined\") {\n reject(new Error(\"analyzeVideoFile requires a browser environment\"));\n return;\n }\n const w = window as unknown as Record<string, unknown>;\n if (typeof w[\"MediaInfo\"] === \"function\") {\n resolve(w[\"MediaInfo\"] as (opts: unknown) => Promise<unknown>);\n return;\n }\n const existing = document.getElementById(\"__mediainfo_cdn__\");\n if (existing) {\n // Script is already loading — poll until MediaInfo appears\n const interval = setInterval(() => {\n if (typeof w[\"MediaInfo\"] === \"function\") {\n clearInterval(interval);\n resolve(w[\"MediaInfo\"] as (opts: unknown) => Promise<unknown>);\n }\n }, 50);\n return;\n }\n const script = document.createElement(\"script\");\n script.id = \"__mediainfo_cdn__\";\n script.src = MEDIAINFO_CDN;\n script.onload = () => {\n if (typeof w[\"MediaInfo\"] === \"function\") {\n resolve(w[\"MediaInfo\"] as (opts: unknown) => Promise<unknown>);\n } else {\n reject(new Error(\"MediaInfo not found on window after CDN script load\"));\n }\n };\n script.onerror = () => reject(new Error(\"Failed to load mediainfo.js from CDN\"));\n document.head.appendChild(script);\n });\n}\n\nexport async function analyzeVideoFile(file: File): Promise<VideoFileInfo> {\n const MediaInfoFactory = await loadMediaInfoFromCDN();\n const mediainfo = await (MediaInfoFactory as (opts: unknown) => Promise<{ analyzeData: Function; close: () => void }>)(\n { format: \"object\", locateFile: () => WASM_CDN }\n );\n\n const getSize = () => file.size;\n const readChunk = (chunkSize: number, offset: number): Promise<Uint8Array> =>\n new Promise((resolve, reject) => {\n const reader = new FileReader();\n reader.onload = (e) => resolve(new Uint8Array(e.target!.result as ArrayBuffer));\n reader.onerror = reject;\n reader.readAsArrayBuffer(file.slice(offset, offset + chunkSize));\n });\n\n const result = await mediainfo.analyzeData(getSize, readChunk);\n mediainfo.close();\n\n const tracks = (result as { media?: { track?: unknown[] } }).media?.track ?? [];\n\n const general = tracks.find((t: unknown) => (t as Record<string, unknown>)[\"@type\"] === \"General\") as Record<string, unknown> | undefined;\n const video = tracks.find((t: unknown) => (t as Record<string, unknown>)[\"@type\"] === \"Video\") as Record<string, unknown> | undefined;\n const audio = tracks.find((t: unknown) => (t as Record<string, unknown>)[\"@type\"] === \"Audio\") as Record<string, unknown> | undefined;\n\n const str = (v: unknown) => (typeof v === \"string\" ? v : \"\");\n const num = (v: unknown) => parseFloat(str(v)) || 0;\n\n const hdrFormats = str(video?.[\"HDR_Format\"] ?? video?.[\"transfer_characteristics\"]);\n const isHdr = hdrFormats.length > 0 && !hdrFormats.toLowerCase().includes(\"bt.709\") && !hdrFormats.toLowerCase().includes(\"sdr\");\n\n return {\n container: str(general?.[\"Format\"]) || file.type || \"Unknown\",\n fileSize: file.size,\n video: video ? {\n codec: str(video[\"Format\"]),\n width: num(video[\"Width\"]),\n height: num(video[\"Height\"]),\n duration: num(video[\"Duration\"]) / 1000,\n bitrate: num(video[\"BitRate\"]),\n frameRate: num(video[\"FrameRate\"]),\n hdr: isHdr,\n colorSpace: str(video[\"colour_primaries\"]) || str(video[\"ColorSpace\"]),\n } : null,\n audio: audio ? {\n codec: str(audio[\"Format\"]),\n channels: num(audio[\"Channels\"]),\n sampleRate: num(audio[\"SamplingRate\"]),\n } : null,\n };\n}\n","\"use client\";\n\nimport { useState, useCallback, type CSSProperties } from \"react\";\nimport { useMultipartUpload } from \"@geekapps/silo-nextjs\";\nimport type { VideoUploadOptions } from \"@geekapps/silo-nextjs\";\nimport type { VideoUploaderProps } from \"./types.js\";\nimport { DropZone } from \"./components/DropZone.js\";\nimport { ProgressBar } from \"./components/ProgressBar.js\";\nimport { VideoOptions } from \"./components/VideoOptions.js\";\nimport { VideoCompatAlert } from \"./components/VideoCompatAlert.js\";\nimport { formatBytes } from \"./utils/format.js\";\nimport { resolveTheme, themeToVars } from \"./utils/theme.js\";\nimport { analyzeVideoFile, getCompatIssues, type VideoFileInfo, type VideoCompatIssue } from \"./utils/videoInfo.js\";\n\nconst DEFAULT_VIDEO_OPTS: VideoUploadOptions = {\n thumbnails: true, storyboard: false, autoCaptions: false,\n separateAudio: false, codec: \"h264\", transcoding: \"auto\",\n};\n\nfunction createInitialVideoOpts(video?: VideoUploadOptions): VideoUploadOptions {\n return video ?? DEFAULT_VIDEO_OPTS;\n}\n\nfunction uploadLabel(status: string, progress: number): string {\n if (status === \"preparing\") return \"Preparando…\";\n if (status === \"completing\") return \"Concluindo envio…\";\n if (progress < 20) return \"Iniciando envio…\";\n if (progress < 50) return \"Enviando vídeo…\";\n if (progress < 80) return \"Ainda enviando…\";\n if (progress < 97) return \"Quase terminando…\";\n return \"Finalizando…\";\n}\n\nexport function VideoUploader({\n bucket,\n expiresIn,\n onUpload,\n onError,\n className = \"\",\n style,\n disabled = false,\n maxSize,\n accept = \"video/*\",\n showPreview = true,\n showVideoOptions = false,\n video,\n theme,\n renderIcon,\n renderProgress,\n renderSuccess,\n renderError,\n children,\n}: VideoUploaderProps) {\n const { state, upload, pause, resume, abort, reset } = useMultipartUpload(bucket);\n const [preview, setPreview] = useState<string | null>(null);\n const [videoOpts, setVideoOpts] = useState<VideoUploadOptions>(() => createInitialVideoOpts(video));\n const [stagedFile, setStagedFile] = useState<File | null>(null);\n const [videoInfo, setVideoInfo] = useState<VideoFileInfo | null>(null);\n const [videoIssues, setVideoIssues] = useState<VideoCompatIssue[]>([]);\n const [analyzing, setAnalyzing] = useState(false);\n const t = resolveTheme(theme);\n const vars = themeToVars(t);\n\n const doUpload = useCallback(async (file: File, opts: VideoUploadOptions) => {\n if (showPreview) setPreview(URL.createObjectURL(file));\n try {\n const result = await upload(file, { ...(bucket !== undefined && { bucket }), video: opts });\n if (result) onUpload?.(result);\n } catch (err) {\n onError?.(err instanceof Error ? err : new Error(String(err)));\n }\n }, [upload, bucket, onUpload, onError, showPreview]);\n\n const handleFiles = useCallback(async (files: File[]) => {\n const file = files[0];\n if (!file) return;\n if (showVideoOptions) {\n setVideoOpts(createInitialVideoOpts(video));\n setVideoInfo(null);\n setVideoIssues([]);\n setStagedFile(file);\n if (showPreview) setPreview(URL.createObjectURL(file));\n setAnalyzing(true);\n try {\n const info = await analyzeVideoFile(file);\n setVideoInfo(info);\n setVideoIssues(getCompatIssues(info));\n } catch {\n // silently skip if analysis fails — don't block the upload\n } finally {\n setAnalyzing(false);\n }\n } else {\n await doUpload(file, video ?? videoOpts);\n }\n }, [showVideoOptions, video, videoOpts, doUpload, showPreview]);\n\n const containerStyle: CSSProperties = {\n ...vars as CSSProperties,\n ...style,\n };\n\n const isUploading = state.status === \"uploading\" || state.status === \"preparing\" || state.status === \"completing\";\n const progress = state.status === \"uploading\" ? state.progress : state.status === \"completing\" ? 99 : 0;\n const isPaused = state.status === \"idle\" && preview !== null && !stagedFile;\n\n if (state.status === \"error\" && renderError) return <div className=\"flex flex-col gap-3 w-full\" style={containerStyle}>{renderError(state.error, reset)}</div>;\n if (state.status === \"done\" && renderSuccess) return <div className=\"flex flex-col gap-3 w-full\" style={containerStyle}>{renderSuccess(state.result)}</div>;\n\n return (\n <div className={`flex flex-col gap-3 w-full${className ? ` ${className}` : \"\"}`} style={containerStyle}>\n <DropZone\n {...(accept !== undefined && { accept })}\n {...(maxSize !== undefined && { maxSize })}\n {...(onError !== undefined && { onError })}\n {...(theme !== undefined && { theme })}\n disabled={disabled || isUploading}\n onFiles={handleFiles}\n style={{ padding: \"32px 24px\", textAlign: \"center\" }}\n >\n {preview && !isUploading && !stagedFile ? (\n <div className=\"flex flex-col items-center gap-2\">\n <video src={preview} className=\"max-w-full max-h-[180px] rounded-lg\" muted playsInline />\n <span className=\"text-[12px] text-slate-400\">Clique ou arraste para trocar o vídeo</span>\n </div>\n ) : (\n <div className=\"flex flex-col items-center gap-2\">\n {renderIcon ? renderIcon() : (\n <svg width=\"40\" height=\"40\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" className=\"text-slate-400 opacity-50\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={1.5} d=\"M15 10l4.553-2.069A1 1 0 0121 8.878v6.244a1 1 0 01-1.447.894L15 14M3 8a2 2 0 012-2h8a2 2 0 012 2v8a2 2 0 01-2 2H5a2 2 0 01-2-2V8z\" />\n </svg>\n )}\n {children ?? (\n <>\n <span className=\"text-slate-900 font-bold text-[15px]\">Arraste seu vídeo aqui</span>\n <span className=\"text-slate-500 text-[13px]\">ou clique para escolher do seu dispositivo</span>\n <span className=\"text-slate-400 text-[12px]\">\n MP4, MOV, MKV, WebM{maxSize ? ` · Máx ${formatBytes(maxSize)}` : \"\"}\n </span>\n </>\n )}\n </div>\n )}\n </DropZone>\n\n {showVideoOptions && stagedFile && !isUploading && state.status !== \"done\" && (\n <>\n {preview && (\n <div className=\"border border-slate-200 rounded-xl overflow-hidden bg-black\">\n <video src={preview} className=\"w-full max-h-[200px] block\" muted playsInline controls />\n </div>\n )}\n {(analyzing || videoInfo) && (\n <div className=\"border border-slate-200 rounded-xl overflow-hidden\">\n <div className=\"px-3.5 py-2 bg-slate-100 text-[12px] font-bold text-slate-500 tracking-[0.04em]\">📋 Informações do arquivo</div>\n <div className=\"p-3.5\">\n <VideoCompatAlert info={videoInfo!} issues={videoIssues} analyzing={analyzing} />\n </div>\n </div>\n )}\n {videoIssues.length === 0 && (\n <div className=\"border border-slate-200 rounded-xl overflow-hidden\">\n <div className=\"px-3.5 py-2 bg-slate-100 text-[12px] font-bold text-slate-500 tracking-[0.04em]\">🎬 Configurações de vídeo</div>\n <VideoOptions value={videoOpts} onChange={setVideoOpts} style={{ padding: \"12px 14px\" }} />\n </div>\n )}\n <div className=\"flex gap-2\">\n <button\n className=\"inline-flex items-center justify-center gap-1.5 text-sm font-bold py-2.5 px-4 rounded-xl border border-slate-200 bg-transparent text-slate-900 cursor-pointer hover:bg-slate-100\"\n onClick={() => { setStagedFile(null); setPreview(null); setVideoInfo(null); setVideoIssues([]); setVideoOpts(createInitialVideoOpts(video)); }}\n >\n Cancelar\n </button>\n <button\n disabled={videoIssues.length > 0 || analyzing}\n className=\"flex-1 inline-flex items-center justify-center gap-1.5 text-sm font-bold py-2.5 px-4 rounded-xl border-transparent bg-indigo-500 text-white cursor-pointer hover:opacity-90 disabled:opacity-40 disabled:cursor-not-allowed\"\n onClick={() => { const f = stagedFile; setStagedFile(null); setVideoInfo(null); setVideoIssues([]); void doUpload(f, videoOpts); setVideoOpts(createInitialVideoOpts(video)); }}\n >\n Enviar vídeo\n </button>\n </div>\n </>\n )}\n\n {isUploading && (\n renderProgress ? renderProgress(progress) : (\n <div className=\"flex flex-col gap-2 px-3 py-4 bg-slate-50 rounded-xl border border-slate-200\">\n <div className=\"flex justify-between items-center\">\n <span className=\"text-[13px] font-semibold text-slate-900\">{uploadLabel(state.status, progress)}</span>\n <div className=\"flex gap-2 items-center\">\n <span className=\"text-[13px] font-bold text-indigo-500\">{progress}%</span>\n <button\n className=\"inline-flex items-center justify-center text-[11px] font-semibold py-0.5 px-2 rounded-lg border border-slate-200 bg-transparent text-slate-900 cursor-pointer hover:bg-slate-100\"\n onClick={pause}\n >\n Pausar\n </button>\n </div>\n </div>\n <ProgressBar progress={progress} />\n <span className=\"text-[11px] text-slate-400\">O processamento do vídeo começa automaticamente após o envio</span>\n </div>\n )\n )}\n\n {isPaused && (\n <div className=\"flex gap-2\">\n <button\n className=\"flex-1 inline-flex items-center justify-center gap-1.5 text-sm font-bold py-2.5 px-4 rounded-xl border-transparent bg-emerald-500 text-white cursor-pointer hover:opacity-90\"\n onClick={() => resume({ ...(bucket !== undefined && { bucket }), video: videoOpts })}\n >\n ▶ Retomar envio\n </button>\n <button\n className=\"inline-flex items-center justify-center gap-1.5 text-sm font-bold py-2.5 px-4 rounded-xl border border-slate-200 bg-transparent text-slate-900 cursor-pointer hover:bg-slate-100\"\n onClick={() => { abort(); setPreview(null); }}\n >\n Cancelar\n </button>\n </div>\n )}\n\n {state.status === \"done\" && !renderSuccess && (\n <div className=\"flex flex-col gap-2 px-4 py-3.5 bg-green-500/[0.08] rounded-xl border border-green-500/20\">\n <div className=\"flex items-center gap-3\">\n <span className=\"text-2xl\">✅</span>\n <div className=\"flex-1\">\n <div className=\"font-bold text-sm text-green-700\">Vídeo enviado com sucesso!</div>\n <div className=\"text-[12px] text-slate-400 mt-0.5\">{formatBytes(state.result.size)}</div>\n </div>\n <button\n className=\"inline-flex items-center justify-center text-xs font-semibold py-1 px-2.5 rounded-lg border border-green-500/30 text-green-700 bg-transparent cursor-pointer hover:bg-green-500/10 shrink-0\"\n onClick={() => { reset(); setPreview(null); }}\n >\n Enviar outro\n </button>\n </div>\n <div className=\"text-[12px] text-slate-500 px-3 py-2 rounded-lg bg-green-500/[0.06] border border-green-500/15\">\n 🎬 Seu vídeo está sendo processado em segundo plano. Isso pode levar alguns minutos dependendo do tamanho.\n </div>\n </div>\n )}\n\n {state.status === \"error\" && !renderError && (\n <div className=\"flex items-center gap-3 px-4 py-3.5 bg-red-500/[0.07] rounded-xl border border-red-500/20\">\n <span className=\"text-[22px]\">⚠️</span>\n <div className=\"flex-1\">\n <div className=\"font-bold text-[13px] text-red-500\">Não foi possível enviar o vídeo</div>\n <div className=\"text-[12px] text-slate-400 mt-0.5\">{state.error.message}</div>\n </div>\n <button\n className=\"inline-flex items-center justify-center text-xs font-semibold py-1 px-2.5 rounded-lg border border-red-500/30 text-red-500 bg-transparent cursor-pointer hover:bg-red-500/10 shrink-0\"\n onClick={() => { reset(); setPreview(null); }}\n >\n Tentar novamente\n </button>\n </div>\n )}\n </div>\n );\n}\n"]}
|
package/dist/index.js
CHANGED
|
@@ -779,10 +779,48 @@ function getCompatIssues(info) {
|
|
|
779
779
|
}
|
|
780
780
|
return issues;
|
|
781
781
|
}
|
|
782
|
+
var MEDIAINFO_CDN = "https://cdn.jsdelivr.net/npm/mediainfo.js@0.3.7/dist/umd/index.js";
|
|
783
|
+
var WASM_CDN = "https://cdn.jsdelivr.net/npm/mediainfo.js@0.3.7/dist/MediaInfoModule.wasm";
|
|
784
|
+
function loadMediaInfoFromCDN() {
|
|
785
|
+
return new Promise((resolve, reject) => {
|
|
786
|
+
if (typeof window === "undefined") {
|
|
787
|
+
reject(new Error("analyzeVideoFile requires a browser environment"));
|
|
788
|
+
return;
|
|
789
|
+
}
|
|
790
|
+
const w = window;
|
|
791
|
+
if (typeof w["MediaInfo"] === "function") {
|
|
792
|
+
resolve(w["MediaInfo"]);
|
|
793
|
+
return;
|
|
794
|
+
}
|
|
795
|
+
const existing = document.getElementById("__mediainfo_cdn__");
|
|
796
|
+
if (existing) {
|
|
797
|
+
const interval = setInterval(() => {
|
|
798
|
+
if (typeof w["MediaInfo"] === "function") {
|
|
799
|
+
clearInterval(interval);
|
|
800
|
+
resolve(w["MediaInfo"]);
|
|
801
|
+
}
|
|
802
|
+
}, 50);
|
|
803
|
+
return;
|
|
804
|
+
}
|
|
805
|
+
const script = document.createElement("script");
|
|
806
|
+
script.id = "__mediainfo_cdn__";
|
|
807
|
+
script.src = MEDIAINFO_CDN;
|
|
808
|
+
script.onload = () => {
|
|
809
|
+
if (typeof w["MediaInfo"] === "function") {
|
|
810
|
+
resolve(w["MediaInfo"]);
|
|
811
|
+
} else {
|
|
812
|
+
reject(new Error("MediaInfo not found on window after CDN script load"));
|
|
813
|
+
}
|
|
814
|
+
};
|
|
815
|
+
script.onerror = () => reject(new Error("Failed to load mediainfo.js from CDN"));
|
|
816
|
+
document.head.appendChild(script);
|
|
817
|
+
});
|
|
818
|
+
}
|
|
782
819
|
async function analyzeVideoFile(file) {
|
|
783
|
-
const
|
|
784
|
-
const
|
|
785
|
-
|
|
820
|
+
const MediaInfoFactory = await loadMediaInfoFromCDN();
|
|
821
|
+
const mediainfo = await MediaInfoFactory(
|
|
822
|
+
{ format: "object", locateFile: () => WASM_CDN }
|
|
823
|
+
);
|
|
786
824
|
const getSize = () => file.size;
|
|
787
825
|
const readChunk = (chunkSize, offset) => new Promise((resolve, reject) => {
|
|
788
826
|
const reader = new FileReader();
|