"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; exports.__esModule = true; exports.RenderUtils = void 0; var lodash_1 = __importDefault(require("lodash")); var remotion_1 = require("remotion"); function levenshteinDistance(str1, str2) { var dp = Array.from({ length: str1.length + 1 }, function (_, i) { return [i]; }); for (var j = 1; j <= str2.length; j++) { dp[0][j] = j; } for (var i = 1; i <= str1.length; i++) { for (var j = 1; j <= str2.length; j++) { var cost = str1[i - 1] === str2[j - 1] ? 0 : 1; dp[i][j] = Math.min(dp[i - 1][j] + 1, dp[i][j - 1] + 1, dp[i - 1][j - 1] + cost); } } return dp[str1.length][str2.length]; } var RenderUtils = /** @class */ (function () { function RenderUtils() { } RenderUtils.calculateDisplayMedia = function (item, durationInSeconds, frame, fps) { var currentDisplayMedia = ((item === null || item === void 0 ? void 0 : item.mediaAbsPaths) || [])[0]; if (!lodash_1["default"].isEmpty(item === null || item === void 0 ? void 0 : item.mediaAbsPaths)) { var frameOffest = 0; for (var i = 0; i < (item === null || item === void 0 ? void 0 : item.mediaAbsPaths.length); i++) { var media = item.mediaAbsPaths[i]; if (!media) { return undefined; } media.idx = i; media.startFrame = frameOffest; if (media.durationSec == undefined) { media.durationSec = durationInSeconds / (item === null || item === void 0 ? void 0 : item.mediaAbsPaths.length); if (i == item.mediaAbsPaths.length - 1) { media.durationSec = durationInSeconds; } } media.durationFrames = media.durationSec * fps; media.endFrame = frameOffest + media.durationFrames; frameOffest = frameOffest + media.durationFrames; if (frame > media.startFrame && frame < media.endFrame) { currentDisplayMedia = media; } } } return currentDisplayMedia; }; RenderUtils.tryStaticFile = function (file) { try { return (0, remotion_1.staticFile)(file); } catch (e) { var fileName = RenderUtils.getFileName(file); return (0, remotion_1.staticFile)(fileName); } }; RenderUtils.convertVHToPixels = function (vh) { return Math.round(window.innerHeight * (parseInt(vh.replace("vh", "")) / 100)); }; RenderUtils.convertVWToPixels = function (vw) { return Math.round(window.innerWidth * (parseInt(vw.replace("vw", "")) / 100)); }; RenderUtils.splitWordsIntoGroups = function (words) { var groups = []; var currentGroup = []; for (var _i = 0, words_1 = words; _i < words_1.length; _i++) { var word = words_1[_i]; if (currentGroup.length === 0) { currentGroup.push(word); } else if (word.sentence_end) { currentGroup.push(word); groups.push(currentGroup); currentGroup = []; } else if (currentGroup.length < 5) { currentGroup.push(word); } else { groups.push(currentGroup); currentGroup = [word]; } } if (currentGroup.length > 0) { groups.push(currentGroup); } // Ensure each group has a maximum of 5 words var finalGroups = []; for (var _a = 0, groups_1 = groups; _a < groups_1.length; _a++) { var group = groups_1[_a]; while (group.length > 5) { finalGroups.push(group.slice(0, 5)); group.splice(0, 5); } finalGroups.push(group); } return finalGroups === null || finalGroups === void 0 ? void 0 : finalGroups.map(function (group) { return { words: group, start: undefined, end: undefined }; }); }; RenderUtils.findCurrentGroupByTime = function (timeSec, groups) { var t = timeSec; var wds = groups; for (var i = 0; i < wds.length; i++) { var x = wds[i]; if (x.start != undefined && x.end != undefined && (t >= x.start && t < x.end)) { return x; } } }; RenderUtils.findCurrentWord = function (timeSec, frames) { var t = timeSec; var wds = frames; for (var i = 0; i < wds.length; i++) { var x = wds[i]; if (x.start && x.end && (t >= x.start && t < x.end)) { return x; } } }; RenderUtils.randomElement = function (arr, seed) { return arr[Math.floor((0, remotion_1.random)(seed || 1) * arr.length)]; }; RenderUtils.hashCode = function (s) { return s.split("").reduce(function (a, b) { a = ((a << 5) - a) + b.charCodeAt(0); return a & a; }, 0); }; RenderUtils.splitArrayIntoChunks = function (arr, chunkSize) { var chunkedArr = []; for (var i = 0; i < arr.length; i += chunkSize) { chunkedArr.push(arr.slice(i, i + chunkSize)); } return chunkedArr; }; RenderUtils.splitArray = function (arr, pieces) { var result = []; var chunkSize = Math.ceil(arr.length / pieces); for (var i = 0, j = arr.length; i < j; i += chunkSize) { result.push(arr.slice(i, i + chunkSize)); } return result; }; RenderUtils.getFileName = function (filePath, subdirpath) { if (!filePath) return undefined; if (filePath.startsWith("http")) return filePath; // Always extract just the filename from any path var match = filePath.match(/([^\/\\]+)$/); var filename = match ? match[1] : ''; if (subdirpath) { return subdirpath + "/" + filename; } else { return filename; } }; RenderUtils.findMostSimilarString = function (inputString, stringArray) { var minDistance = Number.MAX_SAFE_INTEGER; var mostSimilarString = ''; stringArray.forEach(function (str) { var distance = levenshteinDistance(inputString, str); if (distance < minDistance) { minDistance = distance; mostSimilarString = str; } }); return mostSimilarString; }; return RenderUtils; }()); exports.RenderUtils = RenderUtils;