@meframe/core 0.5.7 → 0.5.9
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/meframe-service/node_modules/.pnpm/mp4-muxer@5.2.2/node_modules/mp4-muxer/build/mp4-muxer.js.map +1 -0
- package/dist/{node_modules → meframe-service/node_modules}/.pnpm/mp4box@0.5.4/node_modules/mp4box/dist/mp4box.all.js +14 -14
- package/dist/meframe-service/node_modules/.pnpm/mp4box@0.5.4/node_modules/mp4box/dist/mp4box.all.js.map +1 -0
- package/dist/model/CompositionModel.d.ts.map +1 -1
- package/dist/model/CompositionModel.js +12 -0
- package/dist/model/CompositionModel.js.map +1 -1
- package/dist/model/types.d.ts +4 -0
- package/dist/model/types.d.ts.map +1 -1
- package/dist/model/types.js.map +1 -1
- package/dist/orchestrator/CompositionPlanner.d.ts.map +1 -1
- package/dist/orchestrator/CompositionPlanner.js +14 -0
- package/dist/orchestrator/CompositionPlanner.js.map +1 -1
- package/dist/stages/compose/font-system/FontManager.js +1 -1
- package/dist/stages/compose/font-system/FontManager.js.map +1 -1
- package/dist/stages/compose/font-system/font-templates.js +4 -4
- package/dist/stages/compose/font-system/font-templates.js.map +1 -1
- package/dist/stages/compose/font-system/types.d.ts +1 -1
- package/dist/stages/compose/font-system/types.d.ts.map +1 -1
- package/dist/stages/compose/instructions.d.ts +2 -2
- package/dist/stages/compose/instructions.d.ts.map +1 -1
- package/dist/stages/compose/text-renderers/basic-text-renderer.js +3 -3
- package/dist/stages/compose/text-renderers/basic-text-renderer.js.map +1 -1
- package/dist/stages/compose/text-renderers/caption-stagger-entrance-renderer.d.ts.map +1 -1
- package/dist/stages/compose/text-renderers/caption-stagger-entrance-renderer.js +6 -3
- package/dist/stages/compose/text-renderers/caption-stagger-entrance-renderer.js.map +1 -1
- package/dist/stages/compose/text-renderers/character-ktv-renderer.js +3 -3
- package/dist/stages/compose/text-renderers/character-ktv-renderer.js.map +1 -1
- package/dist/stages/compose/text-renderers/word-by-word-renderer.js +7 -7
- package/dist/stages/compose/text-renderers/word-by-word-renderer.js.map +1 -1
- package/dist/stages/compose/text-renderers/word-fancy-renderer.js +3 -3
- package/dist/stages/compose/text-renderers/word-fancy-renderer.js.map +1 -1
- package/dist/stages/compose/text-utils/caption-layout.d.ts +1 -1
- package/dist/stages/compose/text-utils/caption-layout.d.ts.map +1 -1
- package/dist/stages/compose/text-utils/caption-layout.js +1 -1
- package/dist/stages/compose/text-utils/caption-layout.js.map +1 -1
- package/dist/stages/compose/text-utils/text-layout-cache.js +1 -1
- package/dist/stages/compose/text-utils/text-layout-cache.js.map +1 -1
- package/dist/stages/compose/types.d.ts +2 -2
- package/dist/stages/compose/types.d.ts.map +1 -1
- package/dist/stages/mux/MP4Muxer.js +1 -1
- package/dist/utils/mp4box.js +1 -1
- package/dist/workers/stages/export/{export.worker.p7X_YtxQ.js → export.worker.CWPrx2Nf.js} +24 -21
- package/dist/workers/stages/export/export.worker.CWPrx2Nf.js.map +1 -0
- package/dist/workers/worker-manifest.json +1 -1
- package/package.json +1 -1
- package/dist/node_modules/.pnpm/mp4-muxer@5.2.2/node_modules/mp4-muxer/build/mp4-muxer.js.map +0 -1
- package/dist/node_modules/.pnpm/mp4box@0.5.4/node_modules/mp4box/dist/mp4box.all.js.map +0 -1
- package/dist/workers/stages/export/export.worker.p7X_YtxQ.js.map +0 -1
- /package/dist/{node_modules → meframe-service/node_modules}/.pnpm/mp4-muxer@5.2.2/node_modules/mp4-muxer/build/mp4-muxer.js +0 -0
|
@@ -114,7 +114,7 @@ function computeCaptionLayout(input) {
|
|
|
114
114
|
fontFamily,
|
|
115
115
|
fontWeight,
|
|
116
116
|
fill: textStyle.fill,
|
|
117
|
-
|
|
117
|
+
strokeColor: textStyle.strokeColor,
|
|
118
118
|
strokeWidth: textStyle.strokeWidth,
|
|
119
119
|
lineHeight: textStyle.lineHeight || 1.2,
|
|
120
120
|
letterSpacing: textStyle.letterSpacing,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"caption-layout.js","sources":["../../../../src/stages/compose/text-utils/caption-layout.ts"],"sourcesContent":["import type { LocaleCode, ContainerStyle, GlobalPositionStyle } from '../font-system/types';\nimport { getFontConfig } from '../font-system/FontManager';\nimport { wrapText, formEvenLinesWithWords } from './text-wrapper';\nimport { getLetterCaseText } from './text-metrics';\nimport { needsSpaceBetweenWords } from './locale-detector';\n\n// ────── Input ──────\n\nexport interface CaptionLayoutInput {\n text: string;\n canvasWidth: number;\n canvasHeight: number;\n localeCode?: string;\n fontTemplate?: string;\n fontFamily?: string;\n /** When set, overrides the font template (same as compose `fontConfig.textStyle` merge). */\n fontSize?: number;\n fontWeight?: string | number;\n fill?: string;\n wordTimings?: Array<{ text: string; startUs: number; endUs: number }>;\n letterCase?: 'upper' | 'lower' | 'none';\n animation?: { type: string; [key: string]: unknown };\n}\n\n// ────── Output ──────\n\nexport interface CaptionLayout {\n lines: CaptionLine[];\n style: CaptionStyle;\n container: CaptionContainer;\n}\n\nexport interface CaptionLine {\n text: string;\n lineIndex: number;\n words: CaptionWord[];\n}\n\nexport interface CaptionWord {\n text: string;\n wordIndex: number;\n timing?: { startUs: number; endUs: number };\n}\n\nexport interface CaptionStyle {\n fontSize: number;\n fontFamily: string;\n fontWeight: string | number;\n fill: string;\n
|
|
1
|
+
{"version":3,"file":"caption-layout.js","sources":["../../../../src/stages/compose/text-utils/caption-layout.ts"],"sourcesContent":["import type { LocaleCode, ContainerStyle, GlobalPositionStyle } from '../font-system/types';\nimport { getFontConfig } from '../font-system/FontManager';\nimport { wrapText, formEvenLinesWithWords } from './text-wrapper';\nimport { getLetterCaseText } from './text-metrics';\nimport { needsSpaceBetweenWords } from './locale-detector';\n\n// ────── Input ──────\n\nexport interface CaptionLayoutInput {\n text: string;\n canvasWidth: number;\n canvasHeight: number;\n localeCode?: string;\n fontTemplate?: string;\n fontFamily?: string;\n /** When set, overrides the font template (same as compose `fontConfig.textStyle` merge). */\n fontSize?: number;\n fontWeight?: string | number;\n fill?: string;\n wordTimings?: Array<{ text: string; startUs: number; endUs: number }>;\n letterCase?: 'upper' | 'lower' | 'none';\n animation?: { type: string; [key: string]: unknown };\n}\n\n// ────── Output ──────\n\nexport interface CaptionLayout {\n lines: CaptionLine[];\n style: CaptionStyle;\n container: CaptionContainer;\n}\n\nexport interface CaptionLine {\n text: string;\n lineIndex: number;\n words: CaptionWord[];\n}\n\nexport interface CaptionWord {\n text: string;\n wordIndex: number;\n timing?: { startUs: number; endUs: number };\n}\n\nexport interface CaptionStyle {\n fontSize: number;\n fontFamily: string;\n fontWeight: string | number;\n fill: string;\n strokeColor?: string;\n strokeWidth?: number;\n lineHeight: number;\n letterSpacing?: string | number;\n paintOrder?: string;\n}\n\nexport interface CaptionContainer {\n maxWidth: number;\n maxWidthPercent: number;\n position: Pick<GlobalPositionStyle, 'top' | 'bottom' | 'alignItems' | 'justifyContent'>;\n backgroundColor?: string;\n padding?: string;\n borderRadius?: number;\n}\n\n// ────── Constants ──────\n\nconst DEFAULT_MAX_WIDTH_RATIO = 0.64;\nconst KTV_MAX_WIDTH_RATIO = 0.9;\nconst DEFAULT_FONT_TEMPLATE = 'baseSubtitle';\n\n// ────── Implementation ──────\n\nlet sharedCtx: OffscreenCanvasRenderingContext2D | null = null;\n\nfunction getSharedCtx(): OffscreenCanvasRenderingContext2D {\n if (!sharedCtx) {\n const canvas = new OffscreenCanvas(1, 1);\n sharedCtx = canvas.getContext('2d')!;\n }\n return sharedCtx;\n}\n\nfunction getMaxWidthRatio(animationType?: string): number {\n return animationType === 'characterKTV' ? KTV_MAX_WIDTH_RATIO : DEFAULT_MAX_WIDTH_RATIO;\n}\n\nfunction buildContainer(\n maxWidth: number,\n maxWidthPercent: number,\n globalPosition?: Partial<GlobalPositionStyle>,\n containerStyle?: Partial<ContainerStyle>\n): CaptionContainer {\n return {\n maxWidth,\n maxWidthPercent,\n position: {\n top: globalPosition?.top,\n bottom: globalPosition?.bottom,\n alignItems: globalPosition?.alignItems,\n justifyContent: globalPosition?.justifyContent,\n },\n backgroundColor: containerStyle?.backgroundColor,\n padding: containerStyle?.padding,\n borderRadius: containerStyle?.borderRadius,\n };\n}\n\n/**\n * Build CaptionLine[] with word-to-line mapping from lines produced by\n * formEvenLinesWithWords (wordTimings path).\n */\nfunction buildLinesWithWordMapping(\n lines: string[],\n needsSpace: boolean,\n wordTimings?: CaptionLayoutInput['wordTimings']\n): CaptionLine[] {\n let globalWordIndex = 0;\n\n return lines.map((lineText, lineIndex) => {\n const lineWords = lineText.split(needsSpace ? /\\s+/ : '').filter(Boolean);\n const words: CaptionWord[] = lineWords.map((wordText) => {\n const timing = wordTimings?.[globalWordIndex];\n const word: CaptionWord = {\n text: wordText,\n wordIndex: globalWordIndex,\n timing: timing ? { startUs: timing.startUs, endUs: timing.endUs } : undefined,\n };\n globalWordIndex++;\n return word;\n });\n\n return { text: lineText, lineIndex, words };\n });\n}\n\n/**\n * Build CaptionLine[] from lines produced by wrapText (no wordTimings).\n * Each line gets a single word entry covering the entire line text.\n */\nfunction buildLinesWithoutWordMapping(lines: string[]): CaptionLine[] {\n return lines.map((lineText, lineIndex) => ({\n text: lineText,\n lineIndex,\n words: [{ text: lineText, wordIndex: lineIndex }],\n }));\n}\n\nexport function computeCaptionLayout(input: CaptionLayoutInput): CaptionLayout {\n const {\n text: rawText,\n canvasWidth,\n localeCode: inputLocale,\n fontTemplate: inputTemplate,\n fontFamily: inputFontFamily,\n fontSize: inputFontSize,\n fontWeight: inputFontWeight,\n fill: inputFill,\n wordTimings,\n letterCase,\n animation,\n } = input;\n\n const locale = (inputLocale || 'en-US') as LocaleCode;\n const fontTemplate = inputTemplate || DEFAULT_FONT_TEMPLATE;\n const fontConfig = getFontConfig(locale, fontTemplate, inputFontFamily);\n let textStyle = { ...fontConfig.textStyle };\n if (inputFontSize != null) {\n textStyle.fontSize = inputFontSize;\n }\n if (inputFontWeight != null) {\n textStyle.fontWeight = inputFontWeight;\n }\n if (inputFill != null) {\n textStyle.fill = inputFill;\n }\n const { containerStyle, globalPosition } = fontConfig;\n\n const text = getLetterCaseText(rawText, letterCase);\n const hasWordTimings = wordTimings && wordTimings.length > 0;\n\n const ratio = getMaxWidthRatio(animation?.type);\n const maxWidth = canvasWidth * ratio;\n const maxWidthPercent = ratio * 100;\n\n const ctx = getSharedCtx();\n const { fontSize, fontFamily, fontWeight } = textStyle;\n\n let lines: string[];\n let captionLines: CaptionLine[];\n\n if (hasWordTimings) {\n const needsSpace = needsSpaceBetweenWords(locale, text);\n const words = text.split(needsSpace ? /\\s+/ : '');\n lines = formEvenLinesWithWords(\n ctx,\n words,\n maxWidth,\n fontSize,\n needsSpace,\n fontFamily,\n fontWeight\n );\n captionLines = buildLinesWithWordMapping(lines, needsSpace, wordTimings);\n } else {\n lines = wrapText(ctx, text, maxWidth, fontSize, fontFamily, fontWeight);\n captionLines = buildLinesWithoutWordMapping(lines);\n }\n\n const style: CaptionStyle = {\n fontSize,\n fontFamily,\n fontWeight,\n fill: textStyle.fill,\n strokeColor: textStyle.strokeColor,\n strokeWidth: textStyle.strokeWidth,\n lineHeight: textStyle.lineHeight || 1.2,\n letterSpacing: textStyle.letterSpacing,\n paintOrder: textStyle.paintOrder,\n };\n\n const container = buildContainer(maxWidth, maxWidthPercent, globalPosition, containerStyle);\n\n return { lines: captionLines, style, container };\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"text-layout-cache.js","sources":["../../../../src/stages/compose/text-utils/text-layout-cache.ts"],"sourcesContent":["import type { TextLayer } from '../types';\nimport { formEvenLinesWithWords, wrapText } from './text-wrapper';\n\nconst wrapTextCache = new Map<string, string[]>();\nconst evenLinesCache = new Map<string, string[]>();\n\nfunction cacheKey(parts: (string | number | boolean)[]): string {\n return parts.join('\\x1f');\n}\n\nexport function getCachedWrapText(\n ctx: OffscreenCanvasRenderingContext2D | CanvasRenderingContext2D,\n text: string,\n maxWidth: number,\n fontSize: number,\n fontFamily: string,\n fontWeight: string | number = 400\n): string[] {\n const key = cacheKey([text, maxWidth, fontSize, fontFamily, fontWeight]);\n let lines = wrapTextCache.get(key);\n if (!lines) {\n lines = wrapText(ctx, text, maxWidth, fontSize, fontFamily, fontWeight);\n wrapTextCache.set(key, lines);\n }\n return lines;\n}\n\nexport function getCachedEvenLinesWithWords(\n ctx: OffscreenCanvasRenderingContext2D | CanvasRenderingContext2D,\n words: string[],\n maxWidth: number,\n fontSize: number,\n needsSpace: boolean,\n fontFamily: string,\n fontWeight: string | number = 400\n): string[] {\n const key = cacheKey([\n words.join('\\x1e'),\n maxWidth,\n fontSize,\n needsSpace,\n fontFamily,\n fontWeight,\n ]);\n let lines = evenLinesCache.get(key);\n if (!lines) {\n lines = formEvenLinesWithWords(\n ctx,\n words,\n maxWidth,\n fontSize,\n needsSpace,\n fontFamily,\n fontWeight\n );\n evenLinesCache.set(key, lines);\n }\n return lines;\n}\n\nconst basicTextRasterCache = new Map<string, ImageBitmap>();\n\nfunction basicTextRasterKey(layer: TextLayer, canvasWidth: number, canvasHeight: number): string {\n const ts = layer.fontConfig?.textStyle;\n return [\n layer.id,\n layer.text,\n layer.letterCase ?? '',\n canvasWidth,\n canvasHeight,\n ts?.fontSize,\n ts?.fontFamily,\n ts?.fontWeight,\n ts?.fill,\n ts?.
|
|
1
|
+
{"version":3,"file":"text-layout-cache.js","sources":["../../../../src/stages/compose/text-utils/text-layout-cache.ts"],"sourcesContent":["import type { TextLayer } from '../types';\nimport { formEvenLinesWithWords, wrapText } from './text-wrapper';\n\nconst wrapTextCache = new Map<string, string[]>();\nconst evenLinesCache = new Map<string, string[]>();\n\nfunction cacheKey(parts: (string | number | boolean)[]): string {\n return parts.join('\\x1f');\n}\n\nexport function getCachedWrapText(\n ctx: OffscreenCanvasRenderingContext2D | CanvasRenderingContext2D,\n text: string,\n maxWidth: number,\n fontSize: number,\n fontFamily: string,\n fontWeight: string | number = 400\n): string[] {\n const key = cacheKey([text, maxWidth, fontSize, fontFamily, fontWeight]);\n let lines = wrapTextCache.get(key);\n if (!lines) {\n lines = wrapText(ctx, text, maxWidth, fontSize, fontFamily, fontWeight);\n wrapTextCache.set(key, lines);\n }\n return lines;\n}\n\nexport function getCachedEvenLinesWithWords(\n ctx: OffscreenCanvasRenderingContext2D | CanvasRenderingContext2D,\n words: string[],\n maxWidth: number,\n fontSize: number,\n needsSpace: boolean,\n fontFamily: string,\n fontWeight: string | number = 400\n): string[] {\n const key = cacheKey([\n words.join('\\x1e'),\n maxWidth,\n fontSize,\n needsSpace,\n fontFamily,\n fontWeight,\n ]);\n let lines = evenLinesCache.get(key);\n if (!lines) {\n lines = formEvenLinesWithWords(\n ctx,\n words,\n maxWidth,\n fontSize,\n needsSpace,\n fontFamily,\n fontWeight\n );\n evenLinesCache.set(key, lines);\n }\n return lines;\n}\n\nconst basicTextRasterCache = new Map<string, ImageBitmap>();\n\nfunction basicTextRasterKey(layer: TextLayer, canvasWidth: number, canvasHeight: number): string {\n const ts = layer.fontConfig?.textStyle;\n return [\n layer.id,\n layer.text,\n layer.letterCase ?? '',\n canvasWidth,\n canvasHeight,\n ts?.fontSize,\n ts?.fontFamily,\n ts?.fontWeight,\n ts?.fill,\n ts?.strokeColor,\n ts?.strokeWidth,\n ts?.lineHeight,\n JSON.stringify(layer.fontConfig?.globalPosition ?? null),\n ].join('\\x1f');\n}\n\nexport function getCachedBasicTextRaster(\n layer: TextLayer,\n canvasWidth: number,\n canvasHeight: number,\n draw: (ctx: OffscreenCanvasRenderingContext2D) => void\n): ImageBitmap | null {\n const key = basicTextRasterKey(layer, canvasWidth, canvasHeight);\n const cached = basicTextRasterCache.get(key);\n if (cached) {\n return cached;\n }\n\n const offscreen = new OffscreenCanvas(canvasWidth, canvasHeight);\n const offCtx = offscreen.getContext('2d');\n if (!offCtx) {\n return null;\n }\n\n draw(offCtx);\n const bitmap = offscreen.transferToImageBitmap();\n basicTextRasterCache.set(key, bitmap);\n return bitmap;\n}\n\nexport function clearTextLayoutCache(): void {\n wrapTextCache.clear();\n evenLinesCache.clear();\n for (const bitmap of basicTextRasterCache.values()) {\n bitmap.close();\n }\n basicTextRasterCache.clear();\n}\n"],"names":[],"mappings":";AAGA,MAAM,oCAAoB,IAAA;AAC1B,MAAM,qCAAqB,IAAA;AAE3B,SAAS,SAAS,OAA8C;AAC9D,SAAO,MAAM,KAAK,GAAM;AAC1B;AAEO,SAAS,kBACd,KACA,MACA,UACA,UACA,YACA,aAA8B,KACpB;AACV,QAAM,MAAM,SAAS,CAAC,MAAM,UAAU,UAAU,YAAY,UAAU,CAAC;AACvE,MAAI,QAAQ,cAAc,IAAI,GAAG;AACjC,MAAI,CAAC,OAAO;AACV,YAAQ,SAAS,KAAK,MAAM,UAAU,UAAU,YAAY,UAAU;AACtE,kBAAc,IAAI,KAAK,KAAK;AAAA,EAC9B;AACA,SAAO;AACT;AAEO,SAAS,4BACd,KACA,OACA,UACA,UACA,YACA,YACA,aAA8B,KACpB;AACV,QAAM,MAAM,SAAS;AAAA,IACnB,MAAM,KAAK,GAAM;AAAA,IACjB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EAAA,CACD;AACD,MAAI,QAAQ,eAAe,IAAI,GAAG;AAClC,MAAI,CAAC,OAAO;AACV,YAAQ;AAAA,MACN;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IAAA;AAEF,mBAAe,IAAI,KAAK,KAAK;AAAA,EAC/B;AACA,SAAO;AACT;AAEA,MAAM,2CAA2B,IAAA;AAEjC,SAAS,mBAAmB,OAAkB,aAAqB,cAA8B;AAC/F,QAAM,KAAK,MAAM,YAAY;AAC7B,SAAO;AAAA,IACL,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM,cAAc;AAAA,IACpB;AAAA,IACA;AAAA,IACA,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,KAAK,UAAU,MAAM,YAAY,kBAAkB,IAAI;AAAA,EAAA,EACvD,KAAK,GAAM;AACf;AAEO,SAAS,yBACd,OACA,aACA,cACA,MACoB;AACpB,QAAM,MAAM,mBAAmB,OAAO,aAAa,YAAY;AAC/D,QAAM,SAAS,qBAAqB,IAAI,GAAG;AAC3C,MAAI,QAAQ;AACV,WAAO;AAAA,EACT;AAEA,QAAM,YAAY,IAAI,gBAAgB,aAAa,YAAY;AAC/D,QAAM,SAAS,UAAU,WAAW,IAAI;AACxC,MAAI,CAAC,QAAQ;AACX,WAAO;AAAA,EACT;AAEA,OAAK,MAAM;AACX,QAAM,SAAS,UAAU,sBAAA;AACzB,uBAAqB,IAAI,KAAK,MAAM;AACpC,SAAO;AACT;AAEO,SAAS,uBAA6B;AAC3C,gBAAc,MAAA;AACd,iBAAe,MAAA;AACf,aAAW,UAAU,qBAAqB,UAAU;AAClD,WAAO,MAAA;AAAA,EACT;AACA,uBAAqB,MAAA;AACvB;"}
|
|
@@ -187,7 +187,7 @@ export interface TextLayer extends Layer {
|
|
|
187
187
|
fontWeight: string | number;
|
|
188
188
|
fontFamily: string;
|
|
189
189
|
fill: string;
|
|
190
|
-
|
|
190
|
+
strokeColor?: string;
|
|
191
191
|
strokeWidth?: number;
|
|
192
192
|
letterSpacing?: string | number;
|
|
193
193
|
lineHeight?: number;
|
|
@@ -233,7 +233,7 @@ export interface TextAnimation {
|
|
|
233
233
|
highlightColor?: string;
|
|
234
234
|
highlightTextStyle?: {
|
|
235
235
|
fill?: string;
|
|
236
|
-
|
|
236
|
+
strokeColor?: string;
|
|
237
237
|
};
|
|
238
238
|
}
|
|
239
239
|
export interface VideoLayer extends Layer {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/stages/compose/types.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/stages/compose/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { StreamTarget, ArrayBufferTarget, Muxer } from "../../node_modules/.pnpm/mp4-muxer@5.2.2/node_modules/mp4-muxer/build/mp4-muxer.js";
|
|
1
|
+
import { StreamTarget, ArrayBufferTarget, Muxer } from "../../meframe-service/node_modules/.pnpm/mp4-muxer@5.2.2/node_modules/mp4-muxer/build/mp4-muxer.js";
|
|
2
2
|
import { checkBrowserCompatibility } from "../../utils/platform-utils.js";
|
|
3
3
|
class MP4Muxer {
|
|
4
4
|
muxer;
|
package/dist/utils/mp4box.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import * as mp4box_all from "../node_modules/.pnpm/mp4box@0.5.4/node_modules/mp4box/dist/mp4box.all.js";
|
|
1
|
+
import * as mp4box_all from "../meframe-service/node_modules/.pnpm/mp4box@0.5.4/node_modules/mp4box/dist/mp4box.all.js";
|
|
2
2
|
const lib = mp4box_all;
|
|
3
3
|
const MP4Box = lib.default && typeof lib.default.createFile === "function" ? lib.default : lib;
|
|
4
4
|
if (typeof MP4Box.createFile !== "function") {
|
|
@@ -735,7 +735,7 @@ function basicTextRasterKey(layer, canvasWidth, canvasHeight) {
|
|
|
735
735
|
ts?.fontFamily,
|
|
736
736
|
ts?.fontWeight,
|
|
737
737
|
ts?.fill,
|
|
738
|
-
ts?.
|
|
738
|
+
ts?.strokeColor,
|
|
739
739
|
ts?.strokeWidth,
|
|
740
740
|
ts?.lineHeight,
|
|
741
741
|
JSON.stringify(layer.fontConfig?.globalPosition ?? null)
|
|
@@ -871,7 +871,7 @@ function drawBasicTextLines(ctx, layer, canvasWidth, canvasHeight, lines) {
|
|
|
871
871
|
const fontFamily = fontConfig.fontFamily;
|
|
872
872
|
const fontWeight = fontConfig.fontWeight;
|
|
873
873
|
const fill = fontConfig.fill;
|
|
874
|
-
const
|
|
874
|
+
const strokeColor = fontConfig.strokeColor;
|
|
875
875
|
const strokeWidth = fontConfig.strokeWidth || 0;
|
|
876
876
|
const lineHeight = fontConfig.lineHeight || 1.2;
|
|
877
877
|
ctx.save();
|
|
@@ -885,8 +885,8 @@ function drawBasicTextLines(ctx, layer, canvasWidth, canvasHeight, lines) {
|
|
|
885
885
|
for (let i = 0; i < lines.length; i++) {
|
|
886
886
|
const line = lines[i];
|
|
887
887
|
const y = startY + i * fontSize * lineHeight + fontSize / 2;
|
|
888
|
-
if (
|
|
889
|
-
ctx.strokeStyle =
|
|
888
|
+
if (strokeColor && strokeWidth > 0) {
|
|
889
|
+
ctx.strokeStyle = strokeColor;
|
|
890
890
|
ctx.lineWidth = strokeWidth;
|
|
891
891
|
ctx.strokeText(line, canvasWidth / 2, y);
|
|
892
892
|
}
|
|
@@ -986,6 +986,9 @@ function layoutCacheKey(layer, canvasWidth, canvasHeight) {
|
|
|
986
986
|
ts?.fontSize,
|
|
987
987
|
ts?.fontFamily,
|
|
988
988
|
ts?.fontWeight,
|
|
989
|
+
ts?.fill,
|
|
990
|
+
ts?.strokeColor,
|
|
991
|
+
ts?.strokeWidth,
|
|
989
992
|
ts?.lineHeight,
|
|
990
993
|
JSON.stringify(layer.fontConfig?.globalPosition ?? null)
|
|
991
994
|
].join("");
|
|
@@ -1070,7 +1073,7 @@ function drawStaggerEntranceFrame(ctx, layer, built, relativeFrame, fps, preset)
|
|
|
1070
1073
|
const fontFamily = fontConfig.fontFamily;
|
|
1071
1074
|
const fontWeight = fontConfig.fontWeight;
|
|
1072
1075
|
const fill = fontConfig.fill;
|
|
1073
|
-
const
|
|
1076
|
+
const strokeColor = fontConfig.strokeColor;
|
|
1074
1077
|
const strokeWidth = fontConfig.strokeWidth || 0;
|
|
1075
1078
|
const scalePx = fontSize / FONT_REF_PX;
|
|
1076
1079
|
const staggerMs = DEFAULT_STAGGER_MS;
|
|
@@ -1145,8 +1148,8 @@ function drawStaggerEntranceFrame(ctx, layer, built, relativeFrame, fps, preset)
|
|
|
1145
1148
|
} else {
|
|
1146
1149
|
ctx.scale(sc, sc);
|
|
1147
1150
|
}
|
|
1148
|
-
if (
|
|
1149
|
-
ctx.strokeStyle =
|
|
1151
|
+
if (strokeColor && strokeWidth > 0) {
|
|
1152
|
+
ctx.strokeStyle = strokeColor;
|
|
1150
1153
|
ctx.lineWidth = strokeWidth;
|
|
1151
1154
|
ctx.strokeText(slot.ch, 0, 0);
|
|
1152
1155
|
}
|
|
@@ -1214,11 +1217,11 @@ function renderWordByWord(ctx, layer, canvasWidth, canvasHeight, relativeFrame,
|
|
|
1214
1217
|
const fontFamily = fontConfig.fontFamily;
|
|
1215
1218
|
const fontWeight = fontConfig.fontWeight;
|
|
1216
1219
|
const fill = fontConfig.fill;
|
|
1217
|
-
const
|
|
1220
|
+
const strokeColor = fontConfig.strokeColor;
|
|
1218
1221
|
const strokeWidth = fontConfig.strokeWidth || 0;
|
|
1219
1222
|
const lineHeight = fontConfig.lineHeight || 1.2;
|
|
1220
1223
|
const highlightFill = layer.animation?.highlightTextStyle?.fill || "rgb(255, 215, 0)";
|
|
1221
|
-
const highlightStroke = layer.animation?.highlightTextStyle?.
|
|
1224
|
+
const highlightStroke = layer.animation?.highlightTextStyle?.strokeColor || strokeColor;
|
|
1222
1225
|
const maxWidth = canvasWidth * 0.64;
|
|
1223
1226
|
const text = getLetterCaseText(layer.text, layer.letterCase);
|
|
1224
1227
|
const needsSpace = needsSpaceBetweenWords(layer.localeCode || "en-US", text);
|
|
@@ -1269,7 +1272,7 @@ function renderWordByWord(ctx, layer, canvasWidth, canvasHeight, relativeFrame,
|
|
|
1269
1272
|
ctx.lineCap = "round";
|
|
1270
1273
|
for (const wordPos of wordPositions) {
|
|
1271
1274
|
let currentFill = fill;
|
|
1272
|
-
let currentStroke =
|
|
1275
|
+
let currentStroke = strokeColor;
|
|
1273
1276
|
if (wordPos.timing) {
|
|
1274
1277
|
const { startFrame, endFrame } = wordPos.timing;
|
|
1275
1278
|
if (relativeFrame >= startFrame && relativeFrame <= endFrame) {
|
|
@@ -1283,8 +1286,8 @@ function renderWordByWord(ctx, layer, canvasWidth, canvasHeight, relativeFrame,
|
|
|
1283
1286
|
}
|
|
1284
1287
|
);
|
|
1285
1288
|
currentFill = interpolateColor(fill, highlightFill, transitionProgressIn);
|
|
1286
|
-
if (
|
|
1287
|
-
currentStroke = interpolateColor(
|
|
1289
|
+
if (strokeColor && highlightStroke) {
|
|
1290
|
+
currentStroke = interpolateColor(strokeColor, highlightStroke, transitionProgressIn);
|
|
1288
1291
|
}
|
|
1289
1292
|
} else if (relativeFrame > endFrame) {
|
|
1290
1293
|
const transitionProgressOut = interpolate(relativeFrame, [endFrame, endFrame + 3], [1, 0], {
|
|
@@ -1292,8 +1295,8 @@ function renderWordByWord(ctx, layer, canvasWidth, canvasHeight, relativeFrame,
|
|
|
1292
1295
|
extrapolateRight: "clamp"
|
|
1293
1296
|
});
|
|
1294
1297
|
currentFill = interpolateColor(fill, highlightFill, transitionProgressOut);
|
|
1295
|
-
if (
|
|
1296
|
-
currentStroke = interpolateColor(
|
|
1298
|
+
if (strokeColor && highlightStroke) {
|
|
1299
|
+
currentStroke = interpolateColor(strokeColor, highlightStroke, transitionProgressOut);
|
|
1297
1300
|
}
|
|
1298
1301
|
}
|
|
1299
1302
|
}
|
|
@@ -1334,7 +1337,7 @@ function renderCharacterKTV(ctx, layer, canvasWidth, canvasHeight, relativeFrame
|
|
|
1334
1337
|
const fontFamily = fontConfig.fontFamily;
|
|
1335
1338
|
const fontWeight = fontConfig.fontWeight;
|
|
1336
1339
|
const baseFill = fontConfig.fill;
|
|
1337
|
-
const
|
|
1340
|
+
const strokeColor = fontConfig.strokeColor;
|
|
1338
1341
|
const strokeWidth = fontConfig.strokeWidth || 0;
|
|
1339
1342
|
const lineHeight = fontConfig.lineHeight || 1.2;
|
|
1340
1343
|
const highlightFill = layer.animation?.highlightTextStyle?.fill || "rgb(255, 215, 0)";
|
|
@@ -1418,8 +1421,8 @@ function renderCharacterKTV(ctx, layer, canvasWidth, canvasHeight, relativeFrame
|
|
|
1418
1421
|
} else {
|
|
1419
1422
|
ctx.shadowBlur = 0;
|
|
1420
1423
|
}
|
|
1421
|
-
if (
|
|
1422
|
-
ctx.strokeStyle =
|
|
1424
|
+
if (strokeColor && strokeWidth > 0) {
|
|
1425
|
+
ctx.strokeStyle = strokeColor;
|
|
1423
1426
|
ctx.lineWidth = strokeWidth;
|
|
1424
1427
|
ctx.strokeText(char, currentX, y);
|
|
1425
1428
|
}
|
|
@@ -1459,7 +1462,7 @@ function renderWordByWordFancy(ctx, layer, canvasWidth, canvasHeight, relativeFr
|
|
|
1459
1462
|
const fontFamily = fontConfig.fontFamily;
|
|
1460
1463
|
const fontWeight = fontConfig.fontWeight;
|
|
1461
1464
|
const fill = fontConfig.fill;
|
|
1462
|
-
const
|
|
1465
|
+
const strokeColor = fontConfig.strokeColor;
|
|
1463
1466
|
const strokeWidth = fontConfig.strokeWidth || 0;
|
|
1464
1467
|
const lineHeight = fontConfig.lineHeight || 1.2;
|
|
1465
1468
|
const highlightBackgroundColor = layer.animation?.highlightColor || "rgb(255, 215, 0)";
|
|
@@ -1549,8 +1552,8 @@ function renderWordByWordFancy(ctx, layer, canvasWidth, canvasHeight, relativeFr
|
|
|
1549
1552
|
ctx.restore();
|
|
1550
1553
|
}
|
|
1551
1554
|
}
|
|
1552
|
-
if (
|
|
1553
|
-
ctx.strokeStyle =
|
|
1555
|
+
if (strokeColor && strokeWidth > 0) {
|
|
1556
|
+
ctx.strokeStyle = strokeColor;
|
|
1554
1557
|
ctx.lineWidth = strokeWidth;
|
|
1555
1558
|
ctx.strokeText(wordPos.text, wordPos.x, wordPos.y);
|
|
1556
1559
|
}
|
|
@@ -3545,4 +3548,4 @@ const export_worker = null;
|
|
|
3545
3548
|
export {
|
|
3546
3549
|
export_worker as default
|
|
3547
3550
|
};
|
|
3548
|
-
//# sourceMappingURL=export.worker.
|
|
3551
|
+
//# sourceMappingURL=export.worker.CWPrx2Nf.js.map
|