@linker-design-plus/timeline-track 2.1.6 → 2.2.1

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.
Files changed (29) hide show
  1. package/README.md +1 -1
  2. package/dist/core/controllers/domPreviewBackend.d.ts +2 -2
  3. package/dist/core/controllers/index.d.ts +2 -1
  4. package/dist/core/controllers/previewBackend.d.ts +5 -0
  5. package/dist/core/controllers/previewTransformMath.d.ts +6 -0
  6. package/dist/core/controllers/previewTransformOverlay.d.ts +21 -0
  7. package/dist/core/facade/timelineManager.d.ts +3 -0
  8. package/dist/core/models/types.d.ts +30 -0
  9. package/dist/core/preview/index.d.ts +2 -0
  10. package/dist/core/preview/mediaHelpers.d.ts +24 -0
  11. package/dist/core/preview/previewClockAggregator.d.ts +19 -0
  12. package/dist/core/preview/previewDomCompositor.d.ts +50 -0
  13. package/dist/core/preview/previewEngine.d.ts +87 -0
  14. package/dist/core/preview/previewPlaybackSlot.d.ts +59 -0
  15. package/dist/core/preview/previewPrefetchPool.d.ts +11 -0
  16. package/dist/core/preview/previewRuntimePublisher.d.ts +20 -0
  17. package/dist/core/preview/previewSourceService.d.ts +25 -0
  18. package/dist/core/preview/previewSyncCoordinator.d.ts +34 -0
  19. package/dist/core/preview/previewTextLayer.d.ts +53 -0
  20. package/dist/core/preview/textClipExportLayout.d.ts +5 -0
  21. package/dist/core/preview/textPreviewLayout.d.ts +79 -0
  22. package/dist/core/preview/types.d.ts +65 -0
  23. package/dist/index.cjs.js +113 -112
  24. package/dist/index.es.js +6550 -6770
  25. package/package.json +1 -1
  26. package/dist/core/controllers/previewRecoveryExecution.d.ts +0 -25
  27. package/dist/core/controllers/previewSlotLifecycle.d.ts +0 -42
  28. package/dist/core/controllers/previewSlotPolicy.d.ts +0 -59
  29. package/dist/core/controllers/timelinePreviewSession.d.ts +0 -220
@@ -0,0 +1,79 @@
1
+ import type { ClipVisualTransform, TextClipLayoutMode, TextClipResolvedLayout, TextClipStyle } from '../models/types';
2
+ import { type PreviewFrameSize, type PreviewRect } from '../controllers/previewTransformMath';
3
+ /** 文本 visualTransform 使用框中心锚点。 */
4
+ export declare const TEXT_CLIP_ANCHOR_VERSION_CENTER = 1;
5
+ export interface TextLayoutStyleOverride {
6
+ fontSize?: number;
7
+ rotation?: number;
8
+ layoutWidth?: number;
9
+ layoutHeight?: number;
10
+ }
11
+ export interface TextPreviewBoxLayout {
12
+ layoutWidth: number;
13
+ layoutHeight: number;
14
+ frameRect: PreviewRect;
15
+ visualTransform: ClipVisualTransform;
16
+ }
17
+ export interface ComputeTextPreviewBoxInput {
18
+ frameSize: PreviewFrameSize;
19
+ baselineScale: number;
20
+ visualTransform: ClipVisualTransform;
21
+ textStyle: TextClipStyle;
22
+ contentText: string;
23
+ styleOverride?: TextLayoutStyleOverride | null;
24
+ }
25
+ /** 将 baseline 画布上的字号/内边距/描边换算为当前预览帧像素(短边 720 等比缩放)。 */
26
+ export declare function scaleTextMetricsToFrame(fontSize: number, paddingX: number, strokeWidth: number, baselineScale: number): {
27
+ fontSize: number;
28
+ paddingX: number;
29
+ strokeWidth: number;
30
+ };
31
+ /** 布局换行宽度 fallback(仅 migrate / 无 layoutWidth 时)。 */
32
+ export declare function resolveTextEntryMaxWidthPx(frameWidth: number, baselineScale: number, paddingX: number, anchorX?: number): number;
33
+ export declare function estimateTextLayoutHeightBaseline(fontSize: number, contentText: string, layoutWidthBaseline: number, paddingX: number): number;
34
+ export declare function resolveDefaultTextCenterTransform(frameSize: PreviewFrameSize, layoutHeightBaseline: number, baselineScale: number): ClipVisualTransform;
35
+ export declare function resolveDefaultTextCenterTransformForBaselineFrame(baselineFrameHeight: number, layoutHeightBaseline?: number): ClipVisualTransform;
36
+ export declare function usesLegacyBottomAnchorY(textStyle: TextClipStyle, transformY: number): boolean;
37
+ export declare function resolveTextBoxCenterY(frameSize: PreviewFrameSize, transform: ClipVisualTransform, textStyle: TextClipStyle, displayHeightPx: number): number;
38
+ export declare function migrateBottomAnchorTransformToCenter(transform: ClipVisualTransform, frameSize: PreviewFrameSize, displayHeightPx: number): ClipVisualTransform;
39
+ export declare function resolveTextVisualTransformForPreview(transform: Partial<ClipVisualTransform> | null | undefined, textStyle: TextClipStyle, frameSize: PreviewFrameSize, displayHeightPx: number): ClipVisualTransform;
40
+ /** clip 已持久化 layoutHeight 表示用户手动调整过文本框,预览应固定高度并截断溢出。 */
41
+ export declare function hasManualTextLayoutSize(textStyle: TextClipStyle): boolean;
42
+ export declare function resolveTextClipLayoutMode(textStyle?: Partial<TextClipStyle> | null): TextClipLayoutMode;
43
+ export declare function resolveTextLayoutDimensions(input: ComputeTextPreviewBoxInput): {
44
+ layoutWidth: number;
45
+ layoutHeight: number;
46
+ };
47
+ export declare function computeTextPreviewBox(input: ComputeTextPreviewBoxInput): TextPreviewBoxLayout;
48
+ /** 按指针相对框中心的轴向距离独立缩放宽高(不保持宽高比)。 */
49
+ export declare function scaleTextLayoutFromPointer(pointerX: number, pointerY: number, centerX: number, centerY: number, baselineScale: number): {
50
+ layoutWidth: number;
51
+ layoutHeight: number;
52
+ };
53
+ export declare function buildTextPreviewBoxForEntry(entry: {
54
+ clip: {
55
+ textStyle?: Partial<TextClipStyle> | null;
56
+ textContent?: string;
57
+ name?: string;
58
+ visualTransform?: Partial<ClipVisualTransform> | null;
59
+ };
60
+ }, frameSize: PreviewFrameSize, baselineScale: number, styleOverride?: TextLayoutStyleOverride | null): TextPreviewBoxLayout;
61
+ export interface BuildTextClipResolvedLayoutInput {
62
+ frameSize: PreviewFrameSize;
63
+ composition: {
64
+ width: number;
65
+ height: number;
66
+ };
67
+ lastLayout: TextPreviewBoxLayout;
68
+ layoutMode: TextClipLayoutMode;
69
+ }
70
+ export declare function buildAutoMeasuredTextPreviewBoxLayout(input: {
71
+ layout: TextPreviewBoxLayout;
72
+ frameSize: PreviewFrameSize;
73
+ baselineScale: number;
74
+ visualTransform: ClipVisualTransform;
75
+ textStyle: TextClipStyle;
76
+ measuredHeightPx: number;
77
+ }): TextPreviewBoxLayout;
78
+ export declare function buildTextClipResolvedLayout(input: BuildTextClipResolvedLayoutInput): TextClipResolvedLayout;
79
+ export declare function areTextClipResolvedLayoutsEqual(left?: TextClipResolvedLayout | null, right?: TextClipResolvedLayout | null, epsilon?: number): boolean;
@@ -0,0 +1,65 @@
1
+ import type { ActiveClipPlaybackInfo, PlayState, TrackType } from '../models/types';
2
+ import type { PreviewSlotPhase } from '../controllers/previewBackend';
3
+ export interface ResolvedSlotSource {
4
+ stableSourceUrl: string;
5
+ url: string;
6
+ objectUrl: string | null;
7
+ sizeBytes: number | null;
8
+ }
9
+ export interface SlotGeneration {
10
+ syncGen: number;
11
+ sourceGen: number;
12
+ }
13
+ export interface PlaybackSlotState {
14
+ trackId: string;
15
+ kind: TrackType;
16
+ role: 'current' | 'preload';
17
+ element: HTMLMediaElement;
18
+ wrapper: HTMLDivElement | null;
19
+ failureOverlay: HTMLDivElement | null;
20
+ failureLabel: HTMLDivElement | null;
21
+ entry: ActiveClipPlaybackInfo | null;
22
+ stableSourceUrl: string | null;
23
+ boundStableKey: string | null;
24
+ desiredSource: string | null;
25
+ objectUrl: string | null;
26
+ requestedPlayState: PlayState;
27
+ isActive: boolean;
28
+ isLoading: boolean;
29
+ isResolvingSource: boolean;
30
+ isBuffering: boolean;
31
+ isSeeking: boolean;
32
+ phase: PreviewSlotPhase;
33
+ errorMessage: string | null;
34
+ hasReadyEventSinceSourceChange: boolean;
35
+ pendingClockAlignmentMediaTime: number | null;
36
+ sourceGen: number;
37
+ sourceNode: MediaElementAudioSourceNode | null;
38
+ gainNode: GainNode | null;
39
+ audioRoutingFailed: boolean;
40
+ cleanup: Array<() => void>;
41
+ sourceMatchesDesired(): boolean;
42
+ }
43
+ export interface TrackedVideoSlotStatus {
44
+ failed: boolean;
45
+ resolving: boolean;
46
+ seeking: boolean;
47
+ mediaUnready: boolean;
48
+ ready: boolean;
49
+ }
50
+ export interface PreviewEngineCallbacks {
51
+ onSyncProcessed?: (syncRequestId?: number) => void;
52
+ onRuntimeStateChange?: (state: import('../controllers/previewBackend').PreviewRuntimeState) => void;
53
+ onAspectRatioChange?: (aspectRatio: import('../models/types').PreviewAspectRatio) => void;
54
+ onPreviewClipSelect?: (clipId: string) => void;
55
+ onVisualTransformCommit?: (clipId: string, visualTransform: import('../models/types').ClipVisualTransform) => void;
56
+ onTextFontSizeCommit?: (clipId: string, fontSize: number) => void;
57
+ onTextRotationCommit?: (clipId: string, rotation: number) => void;
58
+ onTextLayoutCommit?: (clipId: string, layout: {
59
+ layoutWidth: number;
60
+ layoutHeight: number;
61
+ }) => void;
62
+ onTextLayoutResolved?: (clipId: string, layout: import('../models/types').TextClipResolvedLayout) => void;
63
+ onPendingPreviewRetry?: () => void;
64
+ onPauseIfPlaying?: () => void;
65
+ }