export interface HtmlPart { id: string; order: number } export interface PartMaskOverrides { style?: Record; text?: string; } export interface PartMaskResult { missing: boolean } export type ElementOverrides = Record }>; export function resolveElementAddresses(htmlText: string, addresses: readonly string[]): { found: Record; missing: string[]; }; export function applyElementOverrides(htmlText: string, elements?: ElementOverrides): [string, { missing: string[] }]; export interface OverlayRecord { id: string; html: string; start: number; duration: number; track?: number; transform?: { x?: number; y?: number; scale?: number; scaleX?: number; scaleY?: number; rotate?: number }; opacity?: number; blend?: string; vars?: Record; params?: Record; part?: string; parentId?: string; [key: string]: unknown; } export function scanHtmlParts(htmlText: string): HtmlPart[]; export function projectBagChildren(bagItem: any, parts: readonly HtmlPart[]): any[]; export function applyPartMask( htmlText: string, partId: string, overrides?: PartMaskOverrides, ): [string, PartMaskResult]; export function expandBagOverlays( internal: any, readHtml?: (reference: string, item: any) => string, options?: { keyframeUnit?: 'seconds' | 'frames' }, ): OverlayRecord[]; /** Uniform parent composition; explicit equal axes fold to scale. */ export function composeTransforms(parent: { x?: number; y?: number; scale?: number; rotate?: number }, child: { x?: number; y?: number; scale?: number; scaleX?: number; scaleY?: number; rotate?: number }): { x: number; y: number; scale?: number; scaleX?: number; scaleY?: number; rotate: number }; export function effectiveScale(transform?: { scale?: number; scaleX?: number; scaleY?: number }): { x: number; y: number };