import * as PIXI from "pixi.js"; import { z } from "zod"; import { Subtitles } from "../library/Subtitles"; /** * Highlight animation presets used for karaoke-style subtitle emphasis. */ export declare enum HighlightAnimationEnum { NONE = "none", POP = "pop", POP_ROTATE = "pop_rotate", WIGGLE = "wiggle" } /** * Zod schema for text style properties shared by main and highlighted subtitle text. */ export declare const CommonTextStyleSchema: z.ZodObject<{ color: z.ZodDefault>; fontSize: z.ZodDefault>; fontWeight: z.ZodDefault>>; fontFamily: z.ZodDefault>; fontStyle: z.ZodDefault>>; letterSpacing: z.ZodDefault>; dropShadow: z.ZodDefault>; dropShadowAlpha: z.ZodDefault>; dropShadowAngle: z.ZodDefault>; dropShadowBlur: z.ZodDefault>; dropShadowColor: z.ZodDefault>; dropShadowDistance: z.ZodDefault>; backgroundColor: z.ZodDefault>; backgroundPadding: z.ZodDefault>; backgroundCornerRadius: z.ZodDefault>; strokeThickness: z.ZodDefault>; strokeColor: z.ZodDefault>; padding: z.ZodDefault>; }, "strip", z.ZodTypeAny, { color: string; padding: number; fontSize: number; fontWeight: "normal" | "bold" | "bolder" | "lighter" | "100" | "200" | "300" | "400" | "500" | "600" | "700" | "800" | "900"; fontFamily: string; fontStyle: "normal" | "italic" | "oblique"; backgroundColor: string; strokeColor: string; strokeThickness: number; letterSpacing: number; dropShadow: boolean; dropShadowAlpha: number; dropShadowAngle: number; dropShadowBlur: number; dropShadowColor: string; dropShadowDistance: number; backgroundPadding: number; backgroundCornerRadius: number; }, { color?: string | undefined; fontSize?: number | undefined; fontWeight?: "normal" | "bold" | "bolder" | "lighter" | "100" | "200" | "300" | "400" | "500" | "600" | "700" | "800" | "900" | undefined; fontFamily?: string | undefined; fontStyle?: "normal" | "italic" | "oblique" | undefined; letterSpacing?: number | undefined; dropShadow?: boolean | undefined; dropShadowAlpha?: number | undefined; dropShadowAngle?: number | undefined; dropShadowBlur?: number | undefined; dropShadowColor?: string | undefined; dropShadowDistance?: number | undefined; backgroundColor?: string | undefined; backgroundPadding?: number | undefined; backgroundCornerRadius?: number | undefined; strokeThickness?: number | undefined; strokeColor?: string | undefined; padding?: number | undefined; }>; /** * Zod schema for the main subtitle text style. */ export declare const MainTextStyleSchema: z.ZodObject<{ color: z.ZodDefault>; padding: z.ZodDefault>; fontSize: z.ZodDefault>; fontWeight: z.ZodDefault>>; fontFamily: z.ZodDefault>; fontStyle: z.ZodDefault>>; backgroundColor: z.ZodDefault>; strokeColor: z.ZodDefault>; strokeThickness: z.ZodDefault>; letterSpacing: z.ZodDefault>; dropShadow: z.ZodDefault>; dropShadowAlpha: z.ZodDefault>; dropShadowAngle: z.ZodDefault>; dropShadowBlur: z.ZodDefault>; dropShadowColor: z.ZodDefault>; dropShadowDistance: z.ZodDefault>; backgroundPadding: z.ZodDefault>; backgroundCornerRadius: z.ZodDefault>; wordWrapWidth: z.ZodDefault>; wordWrap: z.ZodDefault>; leading: z.ZodDefault>; lineHeight: z.ZodDefault>; }, "strip", z.ZodTypeAny, { color: string; padding: number; fontSize: number; fontWeight: "normal" | "bold" | "bolder" | "lighter" | "100" | "200" | "300" | "400" | "500" | "600" | "700" | "800" | "900"; fontFamily: string; fontStyle: "normal" | "italic" | "oblique"; backgroundColor: string; strokeColor: string; strokeThickness: number; wordWrapWidth: number; lineHeight: number; letterSpacing: number; dropShadow: boolean; dropShadowAlpha: number; dropShadowAngle: number; dropShadowBlur: number; dropShadowColor: string; dropShadowDistance: number; wordWrap: boolean; backgroundPadding: number; backgroundCornerRadius: number; leading: number; }, { color?: string | undefined; padding?: number | undefined; fontSize?: number | undefined; fontWeight?: "normal" | "bold" | "bolder" | "lighter" | "100" | "200" | "300" | "400" | "500" | "600" | "700" | "800" | "900" | undefined; fontFamily?: string | undefined; fontStyle?: "normal" | "italic" | "oblique" | undefined; backgroundColor?: string | undefined; strokeColor?: string | undefined; strokeThickness?: number | undefined; letterSpacing?: number | undefined; dropShadow?: boolean | undefined; dropShadowAlpha?: number | undefined; dropShadowAngle?: number | undefined; dropShadowBlur?: number | undefined; dropShadowColor?: string | undefined; dropShadowDistance?: number | undefined; backgroundPadding?: number | undefined; backgroundCornerRadius?: number | undefined; wordWrapWidth?: number | undefined; wordWrap?: boolean | undefined; leading?: number | undefined; lineHeight?: number | undefined; }>; /** * Zod schema for the highlighted subtitle text style. */ export declare const HighlightTextStyleSchema: z.ZodObject<{ color: z.ZodDefault>; padding: z.ZodDefault>; fontSize: z.ZodDefault>; fontWeight: z.ZodDefault>>; fontFamily: z.ZodDefault>; fontStyle: z.ZodDefault>>; backgroundColor: z.ZodDefault>; strokeColor: z.ZodDefault>; strokeThickness: z.ZodDefault>; letterSpacing: z.ZodDefault>; dropShadow: z.ZodDefault>; dropShadowAlpha: z.ZodDefault>; dropShadowAngle: z.ZodDefault>; dropShadowBlur: z.ZodDefault>; dropShadowColor: z.ZodDefault>; dropShadowDistance: z.ZodDefault>; backgroundPadding: z.ZodDefault>; backgroundCornerRadius: z.ZodDefault>; }, "strip", z.ZodTypeAny, { color: string; padding: number; fontSize: number; fontWeight: "normal" | "bold" | "bolder" | "lighter" | "100" | "200" | "300" | "400" | "500" | "600" | "700" | "800" | "900"; fontFamily: string; fontStyle: "normal" | "italic" | "oblique"; backgroundColor: string; strokeColor: string; strokeThickness: number; letterSpacing: number; dropShadow: boolean; dropShadowAlpha: number; dropShadowAngle: number; dropShadowBlur: number; dropShadowColor: string; dropShadowDistance: number; backgroundPadding: number; backgroundCornerRadius: number; }, { color?: string | undefined; padding?: number | undefined; fontSize?: number | undefined; fontWeight?: "normal" | "bold" | "bolder" | "lighter" | "100" | "200" | "300" | "400" | "500" | "600" | "700" | "800" | "900" | undefined; fontFamily?: string | undefined; fontStyle?: "normal" | "italic" | "oblique" | undefined; backgroundColor?: string | undefined; strokeColor?: string | undefined; strokeThickness?: number | undefined; letterSpacing?: number | undefined; dropShadow?: boolean | undefined; dropShadowAlpha?: number | undefined; dropShadowAngle?: number | undefined; dropShadowBlur?: number | undefined; dropShadowColor?: string | undefined; dropShadowDistance?: number | undefined; backgroundPadding?: number | undefined; backgroundCornerRadius?: number | undefined; }>; /** * Zod schema for subtitle display mode. */ export declare const TextModeSchema: z.ZodEnum<["full", "partial"]>; /** * Shared subtitle text style shape used by both the main subtitle layer and the highlighted-word layer. * * It contains the overlap between those two style systems so callers can build shared presets before specializing the * main or highlight style separately. */ export type CommonTextStyle = z.infer; /** * Style payload for the highlighted subtitle word layer. * * This represents the subset of text styling applied specifically to the emphasized word that is animated on top of * the main subtitle line. */ export type HighlightTextStyle = z.infer; /** * Style payload for the main subtitle text block. * * In addition to the common text style fields, this type includes layout controls such as wrapping and line spacing * that affect full subtitle line rendering. */ export type MainTextStyle = z.infer; /** * Subtitle reveal mode describing whether rendering keeps the full line visible or only the currently progressed * portion around the highlighted word. */ export type TextModeType = z.infer; /** * Zod schema for serialized subtitle manager state. */ export declare const SubtitlesManagerSchema: z.ZodObject<{ textMode: z.ZodEnum<["full", "partial"]>; highlightEnabled: z.ZodDefault; highlightAnimation: z.ZodNativeEnum; highlightAnimationSpeed: z.ZodNumber; mainTextStyle: z.ZodObject<{ color: z.ZodDefault>; padding: z.ZodDefault>; fontSize: z.ZodDefault>; fontWeight: z.ZodDefault>>; fontFamily: z.ZodDefault>; fontStyle: z.ZodDefault>>; backgroundColor: z.ZodDefault>; strokeColor: z.ZodDefault>; strokeThickness: z.ZodDefault>; letterSpacing: z.ZodDefault>; dropShadow: z.ZodDefault>; dropShadowAlpha: z.ZodDefault>; dropShadowAngle: z.ZodDefault>; dropShadowBlur: z.ZodDefault>; dropShadowColor: z.ZodDefault>; dropShadowDistance: z.ZodDefault>; backgroundPadding: z.ZodDefault>; backgroundCornerRadius: z.ZodDefault>; wordWrapWidth: z.ZodDefault>; wordWrap: z.ZodDefault>; leading: z.ZodDefault>; lineHeight: z.ZodDefault>; }, "strip", z.ZodTypeAny, { color: string; padding: number; fontSize: number; fontWeight: "normal" | "bold" | "bolder" | "lighter" | "100" | "200" | "300" | "400" | "500" | "600" | "700" | "800" | "900"; fontFamily: string; fontStyle: "normal" | "italic" | "oblique"; backgroundColor: string; strokeColor: string; strokeThickness: number; wordWrapWidth: number; lineHeight: number; letterSpacing: number; dropShadow: boolean; dropShadowAlpha: number; dropShadowAngle: number; dropShadowBlur: number; dropShadowColor: string; dropShadowDistance: number; wordWrap: boolean; backgroundPadding: number; backgroundCornerRadius: number; leading: number; }, { color?: string | undefined; padding?: number | undefined; fontSize?: number | undefined; fontWeight?: "normal" | "bold" | "bolder" | "lighter" | "100" | "200" | "300" | "400" | "500" | "600" | "700" | "800" | "900" | undefined; fontFamily?: string | undefined; fontStyle?: "normal" | "italic" | "oblique" | undefined; backgroundColor?: string | undefined; strokeColor?: string | undefined; strokeThickness?: number | undefined; letterSpacing?: number | undefined; dropShadow?: boolean | undefined; dropShadowAlpha?: number | undefined; dropShadowAngle?: number | undefined; dropShadowBlur?: number | undefined; dropShadowColor?: string | undefined; dropShadowDistance?: number | undefined; backgroundPadding?: number | undefined; backgroundCornerRadius?: number | undefined; wordWrapWidth?: number | undefined; wordWrap?: boolean | undefined; leading?: number | undefined; lineHeight?: number | undefined; }>; highlightTextStyle: z.ZodObject<{ color: z.ZodDefault>; padding: z.ZodDefault>; fontSize: z.ZodDefault>; fontWeight: z.ZodDefault>>; fontFamily: z.ZodDefault>; fontStyle: z.ZodDefault>>; backgroundColor: z.ZodDefault>; strokeColor: z.ZodDefault>; strokeThickness: z.ZodDefault>; letterSpacing: z.ZodDefault>; dropShadow: z.ZodDefault>; dropShadowAlpha: z.ZodDefault>; dropShadowAngle: z.ZodDefault>; dropShadowBlur: z.ZodDefault>; dropShadowColor: z.ZodDefault>; dropShadowDistance: z.ZodDefault>; backgroundPadding: z.ZodDefault>; backgroundCornerRadius: z.ZodDefault>; }, "strip", z.ZodTypeAny, { color: string; padding: number; fontSize: number; fontWeight: "normal" | "bold" | "bolder" | "lighter" | "100" | "200" | "300" | "400" | "500" | "600" | "700" | "800" | "900"; fontFamily: string; fontStyle: "normal" | "italic" | "oblique"; backgroundColor: string; strokeColor: string; strokeThickness: number; letterSpacing: number; dropShadow: boolean; dropShadowAlpha: number; dropShadowAngle: number; dropShadowBlur: number; dropShadowColor: string; dropShadowDistance: number; backgroundPadding: number; backgroundCornerRadius: number; }, { color?: string | undefined; padding?: number | undefined; fontSize?: number | undefined; fontWeight?: "normal" | "bold" | "bolder" | "lighter" | "100" | "200" | "300" | "400" | "500" | "600" | "700" | "800" | "900" | undefined; fontFamily?: string | undefined; fontStyle?: "normal" | "italic" | "oblique" | undefined; backgroundColor?: string | undefined; strokeColor?: string | undefined; strokeThickness?: number | undefined; letterSpacing?: number | undefined; dropShadow?: boolean | undefined; dropShadowAlpha?: number | undefined; dropShadowAngle?: number | undefined; dropShadowBlur?: number | undefined; dropShadowColor?: string | undefined; dropShadowDistance?: number | undefined; backgroundPadding?: number | undefined; backgroundCornerRadius?: number | undefined; }>; position: z.ZodOptional>; scale: z.ZodDefault>; }, "strip", z.ZodTypeAny, { scale: number; textMode: "partial" | "full"; highlightEnabled: boolean; highlightAnimation: HighlightAnimationEnum; highlightAnimationSpeed: number; mainTextStyle: { color: string; padding: number; fontSize: number; fontWeight: "normal" | "bold" | "bolder" | "lighter" | "100" | "200" | "300" | "400" | "500" | "600" | "700" | "800" | "900"; fontFamily: string; fontStyle: "normal" | "italic" | "oblique"; backgroundColor: string; strokeColor: string; strokeThickness: number; wordWrapWidth: number; lineHeight: number; letterSpacing: number; dropShadow: boolean; dropShadowAlpha: number; dropShadowAngle: number; dropShadowBlur: number; dropShadowColor: string; dropShadowDistance: number; wordWrap: boolean; backgroundPadding: number; backgroundCornerRadius: number; leading: number; }; highlightTextStyle: { color: string; padding: number; fontSize: number; fontWeight: "normal" | "bold" | "bolder" | "lighter" | "100" | "200" | "300" | "400" | "500" | "600" | "700" | "800" | "900"; fontFamily: string; fontStyle: "normal" | "italic" | "oblique"; backgroundColor: string; strokeColor: string; strokeThickness: number; letterSpacing: number; dropShadow: boolean; dropShadowAlpha: number; dropShadowAngle: number; dropShadowBlur: number; dropShadowColor: string; dropShadowDistance: number; backgroundPadding: number; backgroundCornerRadius: number; }; position?: [number, number] | undefined; }, { textMode: "partial" | "full"; highlightAnimation: HighlightAnimationEnum; highlightAnimationSpeed: number; mainTextStyle: { color?: string | undefined; padding?: number | undefined; fontSize?: number | undefined; fontWeight?: "normal" | "bold" | "bolder" | "lighter" | "100" | "200" | "300" | "400" | "500" | "600" | "700" | "800" | "900" | undefined; fontFamily?: string | undefined; fontStyle?: "normal" | "italic" | "oblique" | undefined; backgroundColor?: string | undefined; strokeColor?: string | undefined; strokeThickness?: number | undefined; letterSpacing?: number | undefined; dropShadow?: boolean | undefined; dropShadowAlpha?: number | undefined; dropShadowAngle?: number | undefined; dropShadowBlur?: number | undefined; dropShadowColor?: string | undefined; dropShadowDistance?: number | undefined; backgroundPadding?: number | undefined; backgroundCornerRadius?: number | undefined; wordWrapWidth?: number | undefined; wordWrap?: boolean | undefined; leading?: number | undefined; lineHeight?: number | undefined; }; highlightTextStyle: { color?: string | undefined; padding?: number | undefined; fontSize?: number | undefined; fontWeight?: "normal" | "bold" | "bolder" | "lighter" | "100" | "200" | "300" | "400" | "500" | "600" | "700" | "800" | "900" | undefined; fontFamily?: string | undefined; fontStyle?: "normal" | "italic" | "oblique" | undefined; backgroundColor?: string | undefined; strokeColor?: string | undefined; strokeThickness?: number | undefined; letterSpacing?: number | undefined; dropShadow?: boolean | undefined; dropShadowAlpha?: number | undefined; dropShadowAngle?: number | undefined; dropShadowBlur?: number | undefined; dropShadowColor?: string | undefined; dropShadowDistance?: number | undefined; backgroundPadding?: number | undefined; backgroundCornerRadius?: number | undefined; }; highlightEnabled?: boolean | undefined; position?: [number, number] | undefined; scale?: number | undefined; }>; /** * Renders active subtitles, handles subtitle styling, and drives highlighted word animation. */ export declare class SubtitlesManager { private mainText; private mainLinePool; private mainTextLineAfter; private mainTextBackground; private textContainer; private highlightedText; private highlightBackground; private textMode; private highlightEnabled; private highlightAnimation; private highlightAnimationSpeed; private tween; private tweenGroup; private wordTween; private backgroundColor; private backgroundPadding; private backgroundCornerRadius; private highlightBackgroundColor; private highlightBackgroundPadding; private highlightBackgroundCornerRadius; private mainTextStyle; private highlightTextStyle; private position; private scale; private cachedMainTextTransform; private getInitialTweenValue; /** * Creates a subtitle manager with default styling and animation state. */ constructor(); /** * Creates the PIXI display objects required to render subtitles and attaches them to the display stage. * * @returns Nothing. */ init(): void; /** * Updates the highlighted word animation preset and playback speed. * * @param animation Highlight animation preset to use. * @param speedMultiplier Multiplier applied to the animation speed. * @returns Nothing. */ setHighlightAnimation(animation: HighlightAnimationEnum, speedMultiplier?: number): void; /** * Refreshes the duration of subtitle clips that reference the specified subtitles asset. * * @param subtitleId Subtitles asset ID to refresh. * @returns Nothing. */ updateSubtitlesClips(subtitleId: string): void; /** * Sets the anchor position of the rendered subtitles. * * @param x Horizontal position in display pixels. * @param y Vertical position in display pixels. * @returns Nothing. */ setPosition(x: number, y: number): void; /** * Returns the subtitle anchor position. * * @returns The `[x, y]` subtitle position. */ getPosition(): number[]; /** * Sets the rendered subtitle scale. * * @param scale Subtitle scale multiplier. * @returns Nothing. */ setScale(scale: number): void; /** * Returns the subtitle scale multiplier. * * @returns The current subtitle scale. */ getScale(): number; /** * Sets whether subtitles should reveal full lines or only the currently highlighted segment. * * @param mode Subtitle display mode. * @returns Nothing. */ setTextMode(mode: TextModeType): void; /** * Updates the main subtitle text style. * * @param style Partial style patch to apply. * @param reset When `true`, resets missing properties to schema defaults before applying the patch. * @returns Nothing. */ setMainTextStyle(style: Partial, reset?: boolean): void; /** * Returns the current subtitle display mode. * * @returns The text mode. */ getTextMode(): "partial" | "full"; /** * Returns the current main subtitle text style. * * @returns The main text style. */ getMainTextStyle(): { color: string; padding: number; fontSize: number; fontWeight: "normal" | "bold" | "bolder" | "lighter" | "100" | "200" | "300" | "400" | "500" | "600" | "700" | "800" | "900"; fontFamily: string; fontStyle: "normal" | "italic" | "oblique"; backgroundColor: string; strokeColor: string; strokeThickness: number; wordWrapWidth: number; lineHeight: number; letterSpacing: number; dropShadow: boolean; dropShadowAlpha: number; dropShadowAngle: number; dropShadowBlur: number; dropShadowColor: string; dropShadowDistance: number; wordWrap: boolean; backgroundPadding: number; backgroundCornerRadius: number; leading: number; }; /** * Returns the current highlighted subtitle text style. * * @returns The highlighted text style. */ getHighlightTextStyle(): { color: string; padding: number; fontSize: number; fontWeight: "normal" | "bold" | "bolder" | "lighter" | "100" | "200" | "300" | "400" | "500" | "600" | "700" | "800" | "900"; fontFamily: string; fontStyle: "normal" | "italic" | "oblique"; backgroundColor: string; strokeColor: string; strokeThickness: number; letterSpacing: number; dropShadow: boolean; dropShadowAlpha: number; dropShadowAngle: number; dropShadowBlur: number; dropShadowColor: string; dropShadowDistance: number; backgroundPadding: number; backgroundCornerRadius: number; }; /** * Returns the active highlight animation preset. * * @returns The highlight animation. */ getHighlightAnimation(): HighlightAnimationEnum; /** * Indicates whether highlighted word rendering is enabled. * * @returns `true` if highlighted words are rendered; otherwise `false`. */ getHighlightEnabled(): boolean; /** * Enables or disables highlighted word rendering. * * @param enabled Whether highlighted rendering should be enabled. * @returns Nothing. */ setHighlightEnabled(enabled: boolean): void; /** * Updates the highlighted subtitle text style. * * @param style Partial style patch to apply. * @param reset When `true`, resets missing properties to schema defaults before applying the patch. * @returns Nothing. */ setHighlightedTextStyle(style: Partial, reset?: boolean): void; /** * Repositions and optionally rescales subtitles after the display size changes. * * @param oldWidth Previous display width in pixels. * @param oldHeight Previous display height in pixels. * @param newWidth New display width in pixels. * @param newHeight New display height in pixels. * @returns Nothing. */ onViewResize(oldWidth: number, oldHeight: number, newWidth: number, newHeight: number): void; private extractWordInfo; private getSubtitleText; private getHighlightedWordInfo; private restartTween; private measureLineAdvance; private measureCanvasText; private getTextBoundaryLetterSpacing; private getPixiTextContentOffsetX; private getActualTextVerticalBounds; private getPixiTextSingleLineBaselineOffsetY; private createMainLineText; private ensureMainLinePoolSize; private applyMainStyleToText; private setRenderedLineLayoutStyle; private hideUnusedMainLines; private getWrappedLineRanges; private resetVisibleState; private getActiveSubtitleState; private applyLineTextTransform; private renderMainBackground; private renderHighlightBackground; private renderPlainSubtitle; private getHighlightRenderData; private renderHighlightedSubtitle; private updateTransformCache; /** * Recomputes the active subtitle text and updates the rendered subtitle graphics. * * @param currentTime Current timeline time, in seconds. * @returns Nothing. */ update(currentTime: number): void; /** * Parses SRT text into a subtitles asset. * * @param srt Raw SRT document text. * @returns The parsed subtitles asset. */ convertSRTToSubtitles(srt: string): Subtitles; /** * Requests embedded subtitle tracks from a video media asset. * * @param mediaDataId Video media asset ID. * @returns The raw subtitle extraction result returned by FFmpeg. */ extractSubtitlesFromVideo(mediaDataId: string): Promise | ""; /** * Checks whether a point intersects the visible subtitle container. * * @param point Cursor coordinates in display space. * @returns `true` if the point hits the visible subtitle region; otherwise `false`. */ hitTest(point: { cursorX: number; cursorY: number; }): boolean; /** * Returns the root PIXI container used to render subtitles. * * @returns The subtitle display container. */ getDisplayContainer(): PIXI.Container; /** * Returns the primary PIXI text object used for main subtitle rendering. * * @returns The main subtitle text object. */ getMainTextContainer(): PIXI.Text; /** * Destroys all subtitle display objects and animation resources. * * @returns Nothing. */ destroy(): void; /** * Serializes subtitle manager settings and style state. * * @returns The serialized subtitle manager payload. */ serialize(): { scale: number; textMode: "partial" | "full"; highlightEnabled: boolean; highlightAnimation: HighlightAnimationEnum; highlightAnimationSpeed: number; mainTextStyle: { color: string; padding: number; fontSize: number; fontWeight: "normal" | "bold" | "bolder" | "lighter" | "100" | "200" | "300" | "400" | "500" | "600" | "700" | "800" | "900"; fontFamily: string; fontStyle: "normal" | "italic" | "oblique"; backgroundColor: string; strokeColor: string; strokeThickness: number; wordWrapWidth: number; lineHeight: number; letterSpacing: number; dropShadow: boolean; dropShadowAlpha: number; dropShadowAngle: number; dropShadowBlur: number; dropShadowColor: string; dropShadowDistance: number; wordWrap: boolean; backgroundPadding: number; backgroundCornerRadius: number; leading: number; }; highlightTextStyle: { color: string; padding: number; fontSize: number; fontWeight: "normal" | "bold" | "bolder" | "lighter" | "100" | "200" | "300" | "400" | "500" | "600" | "700" | "800" | "900"; fontFamily: string; fontStyle: "normal" | "italic" | "oblique"; backgroundColor: string; strokeColor: string; strokeThickness: number; letterSpacing: number; dropShadow: boolean; dropShadowAlpha: number; dropShadowAngle: number; dropShadowBlur: number; dropShadowColor: string; dropShadowDistance: number; backgroundPadding: number; backgroundCornerRadius: number; }; position?: [number, number] | undefined; }; /** * Creates a subtitle manager from serialized data. * * @param data Serialized subtitle manager payload. * @returns The deserialized subtitle manager. */ static deserialize(data: object): SubtitlesManager; }