ugcinc-render 1.8.46 → 1.8.48
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/{chunk-6DSZRTLA.mjs → chunk-XPFWXMUB.mjs} +19 -0
- package/dist/{index-DB7cs12s.d.mts → index-CaQXmrQS.d.mts} +59 -1
- package/dist/{index-DB7cs12s.d.ts → index-CaQXmrQS.d.ts} +59 -1
- package/dist/index.d.mts +3 -33
- package/dist/index.d.ts +3 -33
- package/dist/index.js +25 -1
- package/dist/index.mjs +10 -3
- package/dist/utils/index.d.mts +1 -1
- package/dist/utils/index.d.ts +1 -1
- package/dist/utils/index.js +21 -0
- package/dist/utils/index.mjs +5 -1
- package/package.json +2 -2
|
@@ -1087,7 +1087,26 @@ function isValidCaptionPreset(name) {
|
|
|
1087
1087
|
return name in CAPTION_PRESETS;
|
|
1088
1088
|
}
|
|
1089
1089
|
|
|
1090
|
+
// src/types/screenshot.ts
|
|
1091
|
+
var SCREENSHOT_ANIMATION_DEFAULTS = {
|
|
1092
|
+
width: 1206,
|
|
1093
|
+
height: 2622,
|
|
1094
|
+
pauseDurationMs: 1e3,
|
|
1095
|
+
flashDurationMs: 255,
|
|
1096
|
+
holdDurationMs: 500,
|
|
1097
|
+
movementDurationMs: 895,
|
|
1098
|
+
borderRadius: 35,
|
|
1099
|
+
borderColor: "rgba(254, 255, 255, 1)",
|
|
1100
|
+
backgroundColor: "#000000"
|
|
1101
|
+
};
|
|
1102
|
+
function calculateScreenshotAnimationDuration(holdDurationMs) {
|
|
1103
|
+
const hold = holdDurationMs ?? SCREENSHOT_ANIMATION_DEFAULTS.holdDurationMs;
|
|
1104
|
+
return SCREENSHOT_ANIMATION_DEFAULTS.pauseDurationMs + SCREENSHOT_ANIMATION_DEFAULTS.flashDurationMs + SCREENSHOT_ANIMATION_DEFAULTS.movementDurationMs + hold;
|
|
1105
|
+
}
|
|
1106
|
+
|
|
1090
1107
|
export {
|
|
1108
|
+
SCREENSHOT_ANIMATION_DEFAULTS,
|
|
1109
|
+
calculateScreenshotAnimationDuration,
|
|
1091
1110
|
TEXT_DEFAULTS,
|
|
1092
1111
|
IMAGE_DEFAULTS,
|
|
1093
1112
|
VIDEO_DEFAULTS,
|
|
@@ -667,6 +667,64 @@ interface CaptionOverlayProps {
|
|
|
667
667
|
previewTimeMs?: number;
|
|
668
668
|
}
|
|
669
669
|
|
|
670
|
+
/**
|
|
671
|
+
* Screenshot Animation Types
|
|
672
|
+
*
|
|
673
|
+
* Types for the iPhone screenshot animation composition.
|
|
674
|
+
*/
|
|
675
|
+
/**
|
|
676
|
+
* Props for the ScreenshotAnimation composition.
|
|
677
|
+
* Most props have sensible defaults - only imageUrl is required.
|
|
678
|
+
*/
|
|
679
|
+
interface ScreenshotAnimationProps {
|
|
680
|
+
/** The image URL being "screenshotted" */
|
|
681
|
+
imageUrl: string;
|
|
682
|
+
/** Canvas width in pixels (default: 1206) */
|
|
683
|
+
width?: number;
|
|
684
|
+
/** Canvas height in pixels (default: 2622) */
|
|
685
|
+
height?: number;
|
|
686
|
+
/** Duration of pause before flash (ms) (default: 1000) */
|
|
687
|
+
pauseDurationMs?: number;
|
|
688
|
+
/** Duration of flash phase (ms) (default: 255) */
|
|
689
|
+
flashDurationMs?: number;
|
|
690
|
+
/** Duration to hold at end after animation completes (ms) (default: 500) */
|
|
691
|
+
holdDurationMs?: number;
|
|
692
|
+
/** Border corner radius (px) (default: 35) */
|
|
693
|
+
borderRadius?: number;
|
|
694
|
+
/** Border color (default: 'rgba(254, 255, 255, 1)') */
|
|
695
|
+
borderColor?: string;
|
|
696
|
+
/** Background color behind everything (default: '#000000') */
|
|
697
|
+
backgroundColor?: string;
|
|
698
|
+
}
|
|
699
|
+
/**
|
|
700
|
+
* Config for submitting a screenshot animation render job.
|
|
701
|
+
* Used by Modal render service to identify this composition type.
|
|
702
|
+
*/
|
|
703
|
+
interface ScreenshotAnimationConfig {
|
|
704
|
+
_compositionType: 'screenshot-animation';
|
|
705
|
+
imageUrl: string;
|
|
706
|
+
holdDurationMs?: number;
|
|
707
|
+
}
|
|
708
|
+
/**
|
|
709
|
+
* Default values for screenshot animation.
|
|
710
|
+
* These match the defaults in ScreenshotAnimation.tsx
|
|
711
|
+
*/
|
|
712
|
+
declare const SCREENSHOT_ANIMATION_DEFAULTS: {
|
|
713
|
+
readonly width: 1206;
|
|
714
|
+
readonly height: 2622;
|
|
715
|
+
readonly pauseDurationMs: 1000;
|
|
716
|
+
readonly flashDurationMs: 255;
|
|
717
|
+
readonly holdDurationMs: 500;
|
|
718
|
+
readonly movementDurationMs: 895;
|
|
719
|
+
readonly borderRadius: 35;
|
|
720
|
+
readonly borderColor: "rgba(254, 255, 255, 1)";
|
|
721
|
+
readonly backgroundColor: "#000000";
|
|
722
|
+
};
|
|
723
|
+
/**
|
|
724
|
+
* Calculate total duration of screenshot animation in milliseconds.
|
|
725
|
+
*/
|
|
726
|
+
declare function calculateScreenshotAnimationDuration(holdDurationMs?: number): number;
|
|
727
|
+
|
|
670
728
|
/**
|
|
671
729
|
* Font utilities for the rendering system
|
|
672
730
|
*/
|
|
@@ -1062,4 +1120,4 @@ declare function getCaptionPresetNames(): CaptionPreset[];
|
|
|
1062
1120
|
*/
|
|
1063
1121
|
declare function isValidCaptionPreset(name: string): name is CaptionPreset;
|
|
1064
1122
|
|
|
1065
|
-
export {
|
|
1123
|
+
export { FONT_FAMILIES as $, type AutoCaptionCompositionProps as A, type BorderRadiusConfig as B, type CaptionOverlayProps as C, type DynamicCropConfig as D, type VideoEditorNodeConfig as E, type FitMode as F, type SegmentTimelinePosition as G, type Hyphenation as H, type ImageEditorElement as I, type CropBoundary as J, type CropAxisConfig as K, type CropBounds as L, type CaptionWord as M, type CaptionPage as N, type CaptionPreset as O, type PositionResolutionResult as P, type CaptionPosition as Q, type RelativePositionConfigX as R, type SegmentType as S, type TimeValue as T, type CaptionFontWeight as U, type VerticalAlignment as V, type WordBreak as W, type CaptionStyle as X, type ScreenshotAnimationConfig as Y, SCREENSHOT_ANIMATION_DEFAULTS as Z, calculateScreenshotAnimationDuration as _, type RelativePositionConfigY as a, APPLE_EMOJI_FONT as a0, getFontFamily as a1, buildFontString as a2, FONT_URLS as a3, preloadFonts as a4, areFontsLoaded as a5, debugFontStatus as a6, calculateFitDimensions as a7, type FitDimensions as a8, TEXT_DEFAULTS as a9, calculateTimelineContentEnd as aA, formatTime as aB, parseTime as aC, generateSegmentId as aD, generateOverlayId as aE, CAPTION_PRESETS as aF, DEFAULT_CAPTION_STYLE as aG, resolveCaptionStyle as aH, getCaptionPresetNames as aI, isValidCaptionPreset as aJ, IMAGE_DEFAULTS as aa, VIDEO_DEFAULTS as ab, VISUAL_DEFAULTS as ac, applyTextDefaults as ad, applyImageDefaults as ae, applyVideoDefaults as af, wrapText as ag, calculateLineWidth as ah, getBorderRadii as ai, parseHexColor as aj, hexToRgba as ak, resolveElementPositions as al, calculateAutoWidthDimensions as am, canSetAsReference as an, getDependentElements as ao, getReferenceElementX as ap, getReferenceElementY as aq, type PositionResolutionError as ar, calculateCropBounds as as, isDynamicCropEnabled as at, defaultOffset as au, getBaseSegments as av, getOverlays as aw, getSegmentTimelinePosition as ax, isSegmentVisibleAtTime as ay, calculateEstimatedDuration as az, type TextStyleProperties as b, type ScreenshotAnimationProps as c, type FontType as d, type FontWeight as e, type TextAlignment as f, type TextDirection as g, type TextWrap as h, type TextOverflow as i, type VerticalAnchor as j, type HorizontalAnchor as k, type HorizontalSelfAnchor as l, type VerticalSelfAnchor as m, type ImageEditorNodeConfig as n, type DimensionPresetKey as o, type DimensionPreset as p, DIMENSION_PRESETS as q, type TimeMode as r, type VideoEditorBaseSegment as s, type VideoEditorVisualSegment as t, type VideoEditorVideoSegment as u, type VideoEditorAudioSegment as v, type VideoEditorImageSegment as w, type VideoEditorTextSegment as x, type VideoEditorSegment as y, type VideoEditorChannel as z };
|
|
@@ -667,6 +667,64 @@ interface CaptionOverlayProps {
|
|
|
667
667
|
previewTimeMs?: number;
|
|
668
668
|
}
|
|
669
669
|
|
|
670
|
+
/**
|
|
671
|
+
* Screenshot Animation Types
|
|
672
|
+
*
|
|
673
|
+
* Types for the iPhone screenshot animation composition.
|
|
674
|
+
*/
|
|
675
|
+
/**
|
|
676
|
+
* Props for the ScreenshotAnimation composition.
|
|
677
|
+
* Most props have sensible defaults - only imageUrl is required.
|
|
678
|
+
*/
|
|
679
|
+
interface ScreenshotAnimationProps {
|
|
680
|
+
/** The image URL being "screenshotted" */
|
|
681
|
+
imageUrl: string;
|
|
682
|
+
/** Canvas width in pixels (default: 1206) */
|
|
683
|
+
width?: number;
|
|
684
|
+
/** Canvas height in pixels (default: 2622) */
|
|
685
|
+
height?: number;
|
|
686
|
+
/** Duration of pause before flash (ms) (default: 1000) */
|
|
687
|
+
pauseDurationMs?: number;
|
|
688
|
+
/** Duration of flash phase (ms) (default: 255) */
|
|
689
|
+
flashDurationMs?: number;
|
|
690
|
+
/** Duration to hold at end after animation completes (ms) (default: 500) */
|
|
691
|
+
holdDurationMs?: number;
|
|
692
|
+
/** Border corner radius (px) (default: 35) */
|
|
693
|
+
borderRadius?: number;
|
|
694
|
+
/** Border color (default: 'rgba(254, 255, 255, 1)') */
|
|
695
|
+
borderColor?: string;
|
|
696
|
+
/** Background color behind everything (default: '#000000') */
|
|
697
|
+
backgroundColor?: string;
|
|
698
|
+
}
|
|
699
|
+
/**
|
|
700
|
+
* Config for submitting a screenshot animation render job.
|
|
701
|
+
* Used by Modal render service to identify this composition type.
|
|
702
|
+
*/
|
|
703
|
+
interface ScreenshotAnimationConfig {
|
|
704
|
+
_compositionType: 'screenshot-animation';
|
|
705
|
+
imageUrl: string;
|
|
706
|
+
holdDurationMs?: number;
|
|
707
|
+
}
|
|
708
|
+
/**
|
|
709
|
+
* Default values for screenshot animation.
|
|
710
|
+
* These match the defaults in ScreenshotAnimation.tsx
|
|
711
|
+
*/
|
|
712
|
+
declare const SCREENSHOT_ANIMATION_DEFAULTS: {
|
|
713
|
+
readonly width: 1206;
|
|
714
|
+
readonly height: 2622;
|
|
715
|
+
readonly pauseDurationMs: 1000;
|
|
716
|
+
readonly flashDurationMs: 255;
|
|
717
|
+
readonly holdDurationMs: 500;
|
|
718
|
+
readonly movementDurationMs: 895;
|
|
719
|
+
readonly borderRadius: 35;
|
|
720
|
+
readonly borderColor: "rgba(254, 255, 255, 1)";
|
|
721
|
+
readonly backgroundColor: "#000000";
|
|
722
|
+
};
|
|
723
|
+
/**
|
|
724
|
+
* Calculate total duration of screenshot animation in milliseconds.
|
|
725
|
+
*/
|
|
726
|
+
declare function calculateScreenshotAnimationDuration(holdDurationMs?: number): number;
|
|
727
|
+
|
|
670
728
|
/**
|
|
671
729
|
* Font utilities for the rendering system
|
|
672
730
|
*/
|
|
@@ -1062,4 +1120,4 @@ declare function getCaptionPresetNames(): CaptionPreset[];
|
|
|
1062
1120
|
*/
|
|
1063
1121
|
declare function isValidCaptionPreset(name: string): name is CaptionPreset;
|
|
1064
1122
|
|
|
1065
|
-
export {
|
|
1123
|
+
export { FONT_FAMILIES as $, type AutoCaptionCompositionProps as A, type BorderRadiusConfig as B, type CaptionOverlayProps as C, type DynamicCropConfig as D, type VideoEditorNodeConfig as E, type FitMode as F, type SegmentTimelinePosition as G, type Hyphenation as H, type ImageEditorElement as I, type CropBoundary as J, type CropAxisConfig as K, type CropBounds as L, type CaptionWord as M, type CaptionPage as N, type CaptionPreset as O, type PositionResolutionResult as P, type CaptionPosition as Q, type RelativePositionConfigX as R, type SegmentType as S, type TimeValue as T, type CaptionFontWeight as U, type VerticalAlignment as V, type WordBreak as W, type CaptionStyle as X, type ScreenshotAnimationConfig as Y, SCREENSHOT_ANIMATION_DEFAULTS as Z, calculateScreenshotAnimationDuration as _, type RelativePositionConfigY as a, APPLE_EMOJI_FONT as a0, getFontFamily as a1, buildFontString as a2, FONT_URLS as a3, preloadFonts as a4, areFontsLoaded as a5, debugFontStatus as a6, calculateFitDimensions as a7, type FitDimensions as a8, TEXT_DEFAULTS as a9, calculateTimelineContentEnd as aA, formatTime as aB, parseTime as aC, generateSegmentId as aD, generateOverlayId as aE, CAPTION_PRESETS as aF, DEFAULT_CAPTION_STYLE as aG, resolveCaptionStyle as aH, getCaptionPresetNames as aI, isValidCaptionPreset as aJ, IMAGE_DEFAULTS as aa, VIDEO_DEFAULTS as ab, VISUAL_DEFAULTS as ac, applyTextDefaults as ad, applyImageDefaults as ae, applyVideoDefaults as af, wrapText as ag, calculateLineWidth as ah, getBorderRadii as ai, parseHexColor as aj, hexToRgba as ak, resolveElementPositions as al, calculateAutoWidthDimensions as am, canSetAsReference as an, getDependentElements as ao, getReferenceElementX as ap, getReferenceElementY as aq, type PositionResolutionError as ar, calculateCropBounds as as, isDynamicCropEnabled as at, defaultOffset as au, getBaseSegments as av, getOverlays as aw, getSegmentTimelinePosition as ax, isSegmentVisibleAtTime as ay, calculateEstimatedDuration as az, type TextStyleProperties as b, type ScreenshotAnimationProps as c, type FontType as d, type FontWeight as e, type TextAlignment as f, type TextDirection as g, type TextWrap as h, type TextOverflow as i, type VerticalAnchor as j, type HorizontalAnchor as k, type HorizontalSelfAnchor as l, type VerticalSelfAnchor as m, type ImageEditorNodeConfig as n, type DimensionPresetKey as o, type DimensionPreset as p, DIMENSION_PRESETS as q, type TimeMode as r, type VideoEditorBaseSegment as s, type VideoEditorVisualSegment as t, type VideoEditorVideoSegment as u, type VideoEditorAudioSegment as v, type VideoEditorImageSegment as w, type VideoEditorTextSegment as x, type VideoEditorSegment as y, type VideoEditorChannel as z };
|
package/dist/index.d.mts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { S as SegmentType, T as TimeValue, R as RelativePositionConfigX, a as RelativePositionConfigY, F as FitMode, B as BorderRadiusConfig, b as TextStyleProperties, D as DynamicCropConfig, I as ImageEditorElement, A as AutoCaptionCompositionProps, C as CaptionOverlayProps, P as PositionResolutionResult } from './index-
|
|
2
|
-
export {
|
|
1
|
+
import { S as SegmentType, T as TimeValue, R as RelativePositionConfigX, a as RelativePositionConfigY, F as FitMode, B as BorderRadiusConfig, b as TextStyleProperties, D as DynamicCropConfig, I as ImageEditorElement, A as AutoCaptionCompositionProps, c as ScreenshotAnimationProps, C as CaptionOverlayProps, P as PositionResolutionResult } from './index-CaQXmrQS.mjs';
|
|
2
|
+
export { a0 as APPLE_EMOJI_FONT, aF as CAPTION_PRESETS, U as CaptionFontWeight, N as CaptionPage, Q as CaptionPosition, O as CaptionPreset, X as CaptionStyle, M as CaptionWord, K as CropAxisConfig, J as CropBoundary, L as CropBounds, aG as DEFAULT_CAPTION_STYLE, q as DIMENSION_PRESETS, p as DimensionPreset, o as DimensionPresetKey, $ as FONT_FAMILIES, a3 as FONT_URLS, a8 as FitDimensions, d as FontType, e as FontWeight, k as HorizontalAnchor, l as HorizontalSelfAnchor, H as Hyphenation, aa as IMAGE_DEFAULTS, n as ImageEditorNodeConfig, ar as PositionResolutionError, Z as SCREENSHOT_ANIMATION_DEFAULTS, Y as ScreenshotAnimationConfig, G as SegmentTimelinePosition, a9 as TEXT_DEFAULTS, f as TextAlignment, g as TextDirection, i as TextOverflow, h as TextWrap, r as TimeMode, ab as VIDEO_DEFAULTS, ac as VISUAL_DEFAULTS, V as VerticalAlignment, j as VerticalAnchor, m as VerticalSelfAnchor, v as VideoEditorAudioSegment, s as VideoEditorBaseSegment, z as VideoEditorChannel, w as VideoEditorImageSegment, E as VideoEditorNodeConfig, y as VideoEditorSegment, x as VideoEditorTextSegment, u as VideoEditorVideoSegment, t as VideoEditorVisualSegment, W as WordBreak, ae as applyImageDefaults, ad as applyTextDefaults, af as applyVideoDefaults, a5 as areFontsLoaded, a2 as buildFontString, am as calculateAutoWidthDimensions, as as calculateCropBounds, az as calculateEstimatedDuration, a7 as calculateFitDimensions, ah as calculateLineWidth, _ as calculateScreenshotAnimationDuration, aA as calculateTimelineContentEnd, an as canSetAsReference, a6 as debugFontStatus, au as defaultOffset, aB as formatTime, aE as generateOverlayId, aD as generateSegmentId, av as getBaseSegments, ai as getBorderRadii, aI as getCaptionPresetNames, ao as getDependentElements, a1 as getFontFamily, aw as getOverlays, ap as getReferenceElementX, aq as getReferenceElementY, ax as getSegmentTimelinePosition, ak as hexToRgba, at as isDynamicCropEnabled, ay as isSegmentVisibleAtTime, aJ as isValidCaptionPreset, aj as parseHexColor, aC as parseTime, a4 as preloadFonts, aH as resolveCaptionStyle, al as resolveElementPositions, ag as wrapText } from './index-CaQXmrQS.mjs';
|
|
3
3
|
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
4
4
|
import React from 'react';
|
|
5
5
|
|
|
@@ -620,36 +620,6 @@ declare function AutoCaptionComposition({ videoUrl, captions, style, }: AutoCapt
|
|
|
620
620
|
*/
|
|
621
621
|
declare function AutoCaptionCompositionWithVideo({ videoUrl, captions, style, }: AutoCaptionCompositionProps): react_jsx_runtime.JSX.Element;
|
|
622
622
|
|
|
623
|
-
/**
|
|
624
|
-
* ScreenshotAnimation
|
|
625
|
-
*
|
|
626
|
-
* Accurate iPhone screenshot animation based on real device measurements.
|
|
627
|
-
*
|
|
628
|
-
* Timeline:
|
|
629
|
-
* - 0-pauseDuration: Pause (show image)
|
|
630
|
-
* - pauseDuration to pauseDuration+flashDuration: Phase 1 (flash & reveal, content shifts down 50%)
|
|
631
|
-
* - After flash: Phase 2 (container shrinks, content morphs to thumbnail)
|
|
632
|
-
*/
|
|
633
|
-
interface ScreenshotAnimationProps {
|
|
634
|
-
/** The image URL being "screenshotted" */
|
|
635
|
-
imageUrl: string;
|
|
636
|
-
/** Canvas width in pixels */
|
|
637
|
-
width?: number;
|
|
638
|
-
/** Canvas height in pixels */
|
|
639
|
-
height?: number;
|
|
640
|
-
/** Duration of pause before flash (ms) */
|
|
641
|
-
pauseDurationMs?: number;
|
|
642
|
-
/** Duration of flash phase (ms) */
|
|
643
|
-
flashDurationMs?: number;
|
|
644
|
-
/** Duration to hold at end after animation completes (ms) */
|
|
645
|
-
holdDurationMs?: number;
|
|
646
|
-
/** Border corner radius (px) */
|
|
647
|
-
borderRadius?: number;
|
|
648
|
-
/** Border color */
|
|
649
|
-
borderColor?: string;
|
|
650
|
-
/** Background color (behind everything) */
|
|
651
|
-
backgroundColor?: string;
|
|
652
|
-
}
|
|
653
623
|
declare function ScreenshotAnimation({ imageUrl, width, height, pauseDurationMs, flashDurationMs, holdDurationMs, borderRadius, borderColor, backgroundColor, }: ScreenshotAnimationProps): react_jsx_runtime.JSX.Element;
|
|
654
624
|
|
|
655
625
|
interface TextElementProps {
|
|
@@ -784,4 +754,4 @@ declare function useResolvedPositions(elements: ImageEditorElement[], textValues
|
|
|
784
754
|
|
|
785
755
|
declare const RenderRoot: React.FC;
|
|
786
756
|
|
|
787
|
-
export { type Acceleration, type AudioConfig, type AudioSegment, AutoCaptionComposition, AutoCaptionCompositionProps, AutoCaptionCompositionWithVideo, type BaseEditorConfig, type BaseSegment, type BlendMode, BorderRadiusConfig, CaptionOverlay, CaptionOverlayProps, type Channel, type ColorFilterConfig, type ColorShiftConfig, type CropConfig, type CuttingConfig, DEDUPLICATION_LEVELS, type DeduplicationConfig, type DeduplicationInput, type DeduplicationLevel, type DiagonalFilterConfig, type DiagonalFilterType, DynamicCropConfig, type EditorConfig, type EditorSegment, type EnhanceLevel, type EnhancementConfig, FitMode, type FrameManipulationConfig, type GifOverlayConfig, type GifSource, type GradientOverlayConfig, ImageEditorComposition, type ImageEditorCompositionProps, type ImageEditorConfig, ImageEditorElement, ImageElement, type ImageElementProps, type ImageSegment, LEVEL_1_CONFIG, LEVEL_2_CONFIG, LEVEL_3_CONFIG, LEVEL_4_CONFIG, LEVEL_5_CONFIG, type LensCorrectionConfig, type MobileEncodingConfig, type ParticleOverlayConfig, type PhoneConfig, type PhoneModel, type PhoneType, type PictureSegment, PositionResolutionResult, RelativePositionConfigX, RelativePositionConfigY, RenderRoot, ScreenshotAnimation,
|
|
757
|
+
export { type Acceleration, type AudioConfig, type AudioSegment, AutoCaptionComposition, AutoCaptionCompositionProps, AutoCaptionCompositionWithVideo, type BaseEditorConfig, type BaseSegment, type BlendMode, BorderRadiusConfig, CaptionOverlay, CaptionOverlayProps, type Channel, type ColorFilterConfig, type ColorShiftConfig, type CropConfig, type CuttingConfig, DEDUPLICATION_LEVELS, type DeduplicationConfig, type DeduplicationInput, type DeduplicationLevel, type DiagonalFilterConfig, type DiagonalFilterType, DynamicCropConfig, type EditorConfig, type EditorSegment, type EnhanceLevel, type EnhancementConfig, FitMode, type FrameManipulationConfig, type GifOverlayConfig, type GifSource, type GradientOverlayConfig, ImageEditorComposition, type ImageEditorCompositionProps, type ImageEditorConfig, ImageEditorElement, ImageElement, type ImageElementProps, type ImageSegment, LEVEL_1_CONFIG, LEVEL_2_CONFIG, LEVEL_3_CONFIG, LEVEL_4_CONFIG, LEVEL_5_CONFIG, type LensCorrectionConfig, type MobileEncodingConfig, type ParticleOverlayConfig, type PhoneConfig, type PhoneModel, type PhoneType, type PictureSegment, PositionResolutionResult, RelativePositionConfigX, RelativePositionConfigY, RenderRoot, ScreenshotAnimation, ScreenshotAnimationProps, type Segment, SegmentType, type SpeedConfig, type StaticSegment, TextElement, type TextElementProps, type TextSegment, TextStyleProperties, TimeValue, type TraceRemovalConfig, type VideoCodec, VideoEditorComposition, type VideoEditorCompositionProps, type VideoEditorConfig, VideoElement, type VideoElementProps, type VideoExtension, type VideoSegment, type VisualAdjustmentsConfig, type VisualSegment, type VisualSegmentUnion, isDeduplicationLevel, resolveDeduplicationConfig, useFontsLoaded, useImageLoader, useImagePreloader, useResolvedPositions };
|
package/dist/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { S as SegmentType, T as TimeValue, R as RelativePositionConfigX, a as RelativePositionConfigY, F as FitMode, B as BorderRadiusConfig, b as TextStyleProperties, D as DynamicCropConfig, I as ImageEditorElement, A as AutoCaptionCompositionProps, C as CaptionOverlayProps, P as PositionResolutionResult } from './index-
|
|
2
|
-
export {
|
|
1
|
+
import { S as SegmentType, T as TimeValue, R as RelativePositionConfigX, a as RelativePositionConfigY, F as FitMode, B as BorderRadiusConfig, b as TextStyleProperties, D as DynamicCropConfig, I as ImageEditorElement, A as AutoCaptionCompositionProps, c as ScreenshotAnimationProps, C as CaptionOverlayProps, P as PositionResolutionResult } from './index-CaQXmrQS.js';
|
|
2
|
+
export { a0 as APPLE_EMOJI_FONT, aF as CAPTION_PRESETS, U as CaptionFontWeight, N as CaptionPage, Q as CaptionPosition, O as CaptionPreset, X as CaptionStyle, M as CaptionWord, K as CropAxisConfig, J as CropBoundary, L as CropBounds, aG as DEFAULT_CAPTION_STYLE, q as DIMENSION_PRESETS, p as DimensionPreset, o as DimensionPresetKey, $ as FONT_FAMILIES, a3 as FONT_URLS, a8 as FitDimensions, d as FontType, e as FontWeight, k as HorizontalAnchor, l as HorizontalSelfAnchor, H as Hyphenation, aa as IMAGE_DEFAULTS, n as ImageEditorNodeConfig, ar as PositionResolutionError, Z as SCREENSHOT_ANIMATION_DEFAULTS, Y as ScreenshotAnimationConfig, G as SegmentTimelinePosition, a9 as TEXT_DEFAULTS, f as TextAlignment, g as TextDirection, i as TextOverflow, h as TextWrap, r as TimeMode, ab as VIDEO_DEFAULTS, ac as VISUAL_DEFAULTS, V as VerticalAlignment, j as VerticalAnchor, m as VerticalSelfAnchor, v as VideoEditorAudioSegment, s as VideoEditorBaseSegment, z as VideoEditorChannel, w as VideoEditorImageSegment, E as VideoEditorNodeConfig, y as VideoEditorSegment, x as VideoEditorTextSegment, u as VideoEditorVideoSegment, t as VideoEditorVisualSegment, W as WordBreak, ae as applyImageDefaults, ad as applyTextDefaults, af as applyVideoDefaults, a5 as areFontsLoaded, a2 as buildFontString, am as calculateAutoWidthDimensions, as as calculateCropBounds, az as calculateEstimatedDuration, a7 as calculateFitDimensions, ah as calculateLineWidth, _ as calculateScreenshotAnimationDuration, aA as calculateTimelineContentEnd, an as canSetAsReference, a6 as debugFontStatus, au as defaultOffset, aB as formatTime, aE as generateOverlayId, aD as generateSegmentId, av as getBaseSegments, ai as getBorderRadii, aI as getCaptionPresetNames, ao as getDependentElements, a1 as getFontFamily, aw as getOverlays, ap as getReferenceElementX, aq as getReferenceElementY, ax as getSegmentTimelinePosition, ak as hexToRgba, at as isDynamicCropEnabled, ay as isSegmentVisibleAtTime, aJ as isValidCaptionPreset, aj as parseHexColor, aC as parseTime, a4 as preloadFonts, aH as resolveCaptionStyle, al as resolveElementPositions, ag as wrapText } from './index-CaQXmrQS.js';
|
|
3
3
|
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
4
4
|
import React from 'react';
|
|
5
5
|
|
|
@@ -620,36 +620,6 @@ declare function AutoCaptionComposition({ videoUrl, captions, style, }: AutoCapt
|
|
|
620
620
|
*/
|
|
621
621
|
declare function AutoCaptionCompositionWithVideo({ videoUrl, captions, style, }: AutoCaptionCompositionProps): react_jsx_runtime.JSX.Element;
|
|
622
622
|
|
|
623
|
-
/**
|
|
624
|
-
* ScreenshotAnimation
|
|
625
|
-
*
|
|
626
|
-
* Accurate iPhone screenshot animation based on real device measurements.
|
|
627
|
-
*
|
|
628
|
-
* Timeline:
|
|
629
|
-
* - 0-pauseDuration: Pause (show image)
|
|
630
|
-
* - pauseDuration to pauseDuration+flashDuration: Phase 1 (flash & reveal, content shifts down 50%)
|
|
631
|
-
* - After flash: Phase 2 (container shrinks, content morphs to thumbnail)
|
|
632
|
-
*/
|
|
633
|
-
interface ScreenshotAnimationProps {
|
|
634
|
-
/** The image URL being "screenshotted" */
|
|
635
|
-
imageUrl: string;
|
|
636
|
-
/** Canvas width in pixels */
|
|
637
|
-
width?: number;
|
|
638
|
-
/** Canvas height in pixels */
|
|
639
|
-
height?: number;
|
|
640
|
-
/** Duration of pause before flash (ms) */
|
|
641
|
-
pauseDurationMs?: number;
|
|
642
|
-
/** Duration of flash phase (ms) */
|
|
643
|
-
flashDurationMs?: number;
|
|
644
|
-
/** Duration to hold at end after animation completes (ms) */
|
|
645
|
-
holdDurationMs?: number;
|
|
646
|
-
/** Border corner radius (px) */
|
|
647
|
-
borderRadius?: number;
|
|
648
|
-
/** Border color */
|
|
649
|
-
borderColor?: string;
|
|
650
|
-
/** Background color (behind everything) */
|
|
651
|
-
backgroundColor?: string;
|
|
652
|
-
}
|
|
653
623
|
declare function ScreenshotAnimation({ imageUrl, width, height, pauseDurationMs, flashDurationMs, holdDurationMs, borderRadius, borderColor, backgroundColor, }: ScreenshotAnimationProps): react_jsx_runtime.JSX.Element;
|
|
654
624
|
|
|
655
625
|
interface TextElementProps {
|
|
@@ -784,4 +754,4 @@ declare function useResolvedPositions(elements: ImageEditorElement[], textValues
|
|
|
784
754
|
|
|
785
755
|
declare const RenderRoot: React.FC;
|
|
786
756
|
|
|
787
|
-
export { type Acceleration, type AudioConfig, type AudioSegment, AutoCaptionComposition, AutoCaptionCompositionProps, AutoCaptionCompositionWithVideo, type BaseEditorConfig, type BaseSegment, type BlendMode, BorderRadiusConfig, CaptionOverlay, CaptionOverlayProps, type Channel, type ColorFilterConfig, type ColorShiftConfig, type CropConfig, type CuttingConfig, DEDUPLICATION_LEVELS, type DeduplicationConfig, type DeduplicationInput, type DeduplicationLevel, type DiagonalFilterConfig, type DiagonalFilterType, DynamicCropConfig, type EditorConfig, type EditorSegment, type EnhanceLevel, type EnhancementConfig, FitMode, type FrameManipulationConfig, type GifOverlayConfig, type GifSource, type GradientOverlayConfig, ImageEditorComposition, type ImageEditorCompositionProps, type ImageEditorConfig, ImageEditorElement, ImageElement, type ImageElementProps, type ImageSegment, LEVEL_1_CONFIG, LEVEL_2_CONFIG, LEVEL_3_CONFIG, LEVEL_4_CONFIG, LEVEL_5_CONFIG, type LensCorrectionConfig, type MobileEncodingConfig, type ParticleOverlayConfig, type PhoneConfig, type PhoneModel, type PhoneType, type PictureSegment, PositionResolutionResult, RelativePositionConfigX, RelativePositionConfigY, RenderRoot, ScreenshotAnimation,
|
|
757
|
+
export { type Acceleration, type AudioConfig, type AudioSegment, AutoCaptionComposition, AutoCaptionCompositionProps, AutoCaptionCompositionWithVideo, type BaseEditorConfig, type BaseSegment, type BlendMode, BorderRadiusConfig, CaptionOverlay, CaptionOverlayProps, type Channel, type ColorFilterConfig, type ColorShiftConfig, type CropConfig, type CuttingConfig, DEDUPLICATION_LEVELS, type DeduplicationConfig, type DeduplicationInput, type DeduplicationLevel, type DiagonalFilterConfig, type DiagonalFilterType, DynamicCropConfig, type EditorConfig, type EditorSegment, type EnhanceLevel, type EnhancementConfig, FitMode, type FrameManipulationConfig, type GifOverlayConfig, type GifSource, type GradientOverlayConfig, ImageEditorComposition, type ImageEditorCompositionProps, type ImageEditorConfig, ImageEditorElement, ImageElement, type ImageElementProps, type ImageSegment, LEVEL_1_CONFIG, LEVEL_2_CONFIG, LEVEL_3_CONFIG, LEVEL_4_CONFIG, LEVEL_5_CONFIG, type LensCorrectionConfig, type MobileEncodingConfig, type ParticleOverlayConfig, type PhoneConfig, type PhoneModel, type PhoneType, type PictureSegment, PositionResolutionResult, RelativePositionConfigX, RelativePositionConfigY, RenderRoot, ScreenshotAnimation, ScreenshotAnimationProps, type Segment, SegmentType, type SpeedConfig, type StaticSegment, TextElement, type TextElementProps, type TextSegment, TextStyleProperties, TimeValue, type TraceRemovalConfig, type VideoCodec, VideoEditorComposition, type VideoEditorCompositionProps, type VideoEditorConfig, VideoElement, type VideoElementProps, type VideoExtension, type VideoSegment, type VisualAdjustmentsConfig, type VisualSegment, type VisualSegmentUnion, isDeduplicationLevel, resolveDeduplicationConfig, useFontsLoaded, useImageLoader, useImagePreloader, useResolvedPositions };
|
package/dist/index.js
CHANGED
|
@@ -49,6 +49,7 @@ __export(index_exports, {
|
|
|
49
49
|
LEVEL_4_CONFIG: () => LEVEL_4_CONFIG,
|
|
50
50
|
LEVEL_5_CONFIG: () => LEVEL_5_CONFIG,
|
|
51
51
|
RenderRoot: () => RenderRoot,
|
|
52
|
+
SCREENSHOT_ANIMATION_DEFAULTS: () => SCREENSHOT_ANIMATION_DEFAULTS,
|
|
52
53
|
ScreenshotAnimation: () => ScreenshotAnimation,
|
|
53
54
|
TEXT_DEFAULTS: () => TEXT_DEFAULTS,
|
|
54
55
|
TextElement: () => TextElement,
|
|
@@ -66,6 +67,7 @@ __export(index_exports, {
|
|
|
66
67
|
calculateEstimatedDuration: () => calculateEstimatedDuration,
|
|
67
68
|
calculateFitDimensions: () => calculateFitDimensions,
|
|
68
69
|
calculateLineWidth: () => calculateLineWidth,
|
|
70
|
+
calculateScreenshotAnimationDuration: () => calculateScreenshotAnimationDuration,
|
|
69
71
|
calculateTimelineContentEnd: () => calculateTimelineContentEnd,
|
|
70
72
|
canSetAsReference: () => canSetAsReference,
|
|
71
73
|
debugFontStatus: () => debugFontStatus,
|
|
@@ -287,6 +289,23 @@ function resolveDeduplicationConfig(input) {
|
|
|
287
289
|
return input;
|
|
288
290
|
}
|
|
289
291
|
|
|
292
|
+
// src/types/screenshot.ts
|
|
293
|
+
var SCREENSHOT_ANIMATION_DEFAULTS = {
|
|
294
|
+
width: 1206,
|
|
295
|
+
height: 2622,
|
|
296
|
+
pauseDurationMs: 1e3,
|
|
297
|
+
flashDurationMs: 255,
|
|
298
|
+
holdDurationMs: 500,
|
|
299
|
+
movementDurationMs: 895,
|
|
300
|
+
borderRadius: 35,
|
|
301
|
+
borderColor: "rgba(254, 255, 255, 1)",
|
|
302
|
+
backgroundColor: "#000000"
|
|
303
|
+
};
|
|
304
|
+
function calculateScreenshotAnimationDuration(holdDurationMs) {
|
|
305
|
+
const hold = holdDurationMs ?? SCREENSHOT_ANIMATION_DEFAULTS.holdDurationMs;
|
|
306
|
+
return SCREENSHOT_ANIMATION_DEFAULTS.pauseDurationMs + SCREENSHOT_ANIMATION_DEFAULTS.flashDurationMs + SCREENSHOT_ANIMATION_DEFAULTS.movementDurationMs + hold;
|
|
307
|
+
}
|
|
308
|
+
|
|
290
309
|
// src/compositions/ImageEditorComposition.tsx
|
|
291
310
|
var import_react3 = require("react");
|
|
292
311
|
var import_remotion2 = require("remotion");
|
|
@@ -2415,6 +2434,9 @@ var whiteOverlayOpacityData = {
|
|
|
2415
2434
|
"895": 0
|
|
2416
2435
|
};
|
|
2417
2436
|
|
|
2437
|
+
// src/data/phone-top-nav.ts
|
|
2438
|
+
var PHONE_TOP_NAV_IMAGE = "data:image/png;base64,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";
|
|
2439
|
+
|
|
2418
2440
|
// src/compositions/ScreenshotAnimation.tsx
|
|
2419
2441
|
var import_jsx_runtime8 = require("react/jsx-runtime");
|
|
2420
2442
|
function interpolateKeyframes(timeMs, data) {
|
|
@@ -2678,7 +2700,7 @@ function ScreenshotAnimation({
|
|
|
2678
2700
|
/* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
|
|
2679
2701
|
import_remotion7.Img,
|
|
2680
2702
|
{
|
|
2681
|
-
src:
|
|
2703
|
+
src: PHONE_TOP_NAV_IMAGE,
|
|
2682
2704
|
style: {
|
|
2683
2705
|
position: "absolute",
|
|
2684
2706
|
top: `${1.6018}%`,
|
|
@@ -3249,6 +3271,7 @@ var RenderRoot = () => {
|
|
|
3249
3271
|
LEVEL_4_CONFIG,
|
|
3250
3272
|
LEVEL_5_CONFIG,
|
|
3251
3273
|
RenderRoot,
|
|
3274
|
+
SCREENSHOT_ANIMATION_DEFAULTS,
|
|
3252
3275
|
ScreenshotAnimation,
|
|
3253
3276
|
TEXT_DEFAULTS,
|
|
3254
3277
|
TextElement,
|
|
@@ -3266,6 +3289,7 @@ var RenderRoot = () => {
|
|
|
3266
3289
|
calculateEstimatedDuration,
|
|
3267
3290
|
calculateFitDimensions,
|
|
3268
3291
|
calculateLineWidth,
|
|
3292
|
+
calculateScreenshotAnimationDuration,
|
|
3269
3293
|
calculateTimelineContentEnd,
|
|
3270
3294
|
canSetAsReference,
|
|
3271
3295
|
debugFontStatus,
|
package/dist/index.mjs
CHANGED
|
@@ -5,6 +5,7 @@ import {
|
|
|
5
5
|
FONT_FAMILIES,
|
|
6
6
|
FONT_URLS,
|
|
7
7
|
IMAGE_DEFAULTS,
|
|
8
|
+
SCREENSHOT_ANIMATION_DEFAULTS,
|
|
8
9
|
TEXT_DEFAULTS,
|
|
9
10
|
VIDEO_DEFAULTS,
|
|
10
11
|
VISUAL_DEFAULTS,
|
|
@@ -18,6 +19,7 @@ import {
|
|
|
18
19
|
calculateEstimatedDuration,
|
|
19
20
|
calculateFitDimensions,
|
|
20
21
|
calculateLineWidth,
|
|
22
|
+
calculateScreenshotAnimationDuration,
|
|
21
23
|
calculateTimelineContentEnd,
|
|
22
24
|
canSetAsReference,
|
|
23
25
|
debugFontStatus,
|
|
@@ -44,7 +46,7 @@ import {
|
|
|
44
46
|
resolveCaptionStyle,
|
|
45
47
|
resolveElementPositions,
|
|
46
48
|
wrapText
|
|
47
|
-
} from "./chunk-
|
|
49
|
+
} from "./chunk-XPFWXMUB.mjs";
|
|
48
50
|
|
|
49
51
|
// src/types/element.ts
|
|
50
52
|
var DIMENSION_PRESETS = {
|
|
@@ -1384,7 +1386,7 @@ function AutoCaptionCompositionWithVideo({
|
|
|
1384
1386
|
}
|
|
1385
1387
|
|
|
1386
1388
|
// src/compositions/ScreenshotAnimation.tsx
|
|
1387
|
-
import { AbsoluteFill as AbsoluteFill4, Img as Img3, interpolate as interpolate2,
|
|
1389
|
+
import { AbsoluteFill as AbsoluteFill4, Img as Img3, interpolate as interpolate2, useCurrentFrame as useCurrentFrame5, useVideoConfig as useVideoConfig5 } from "remotion";
|
|
1388
1390
|
|
|
1389
1391
|
// src/data/screenshot.ts
|
|
1390
1392
|
var screenshotMovementData = {
|
|
@@ -1552,6 +1554,9 @@ var whiteOverlayOpacityData = {
|
|
|
1552
1554
|
"895": 0
|
|
1553
1555
|
};
|
|
1554
1556
|
|
|
1557
|
+
// src/data/phone-top-nav.ts
|
|
1558
|
+
var PHONE_TOP_NAV_IMAGE = "data:image/png;base64,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";
|
|
1559
|
+
|
|
1555
1560
|
// src/compositions/ScreenshotAnimation.tsx
|
|
1556
1561
|
import { jsx as jsx8, jsxs as jsxs6 } from "react/jsx-runtime";
|
|
1557
1562
|
function interpolateKeyframes(timeMs, data) {
|
|
@@ -1815,7 +1820,7 @@ function ScreenshotAnimation({
|
|
|
1815
1820
|
/* @__PURE__ */ jsx8(
|
|
1816
1821
|
Img3,
|
|
1817
1822
|
{
|
|
1818
|
-
src:
|
|
1823
|
+
src: PHONE_TOP_NAV_IMAGE,
|
|
1819
1824
|
style: {
|
|
1820
1825
|
position: "absolute",
|
|
1821
1826
|
top: `${1.6018}%`,
|
|
@@ -2102,6 +2107,7 @@ export {
|
|
|
2102
2107
|
LEVEL_4_CONFIG,
|
|
2103
2108
|
LEVEL_5_CONFIG,
|
|
2104
2109
|
RenderRoot,
|
|
2110
|
+
SCREENSHOT_ANIMATION_DEFAULTS,
|
|
2105
2111
|
ScreenshotAnimation,
|
|
2106
2112
|
TEXT_DEFAULTS,
|
|
2107
2113
|
TextElement,
|
|
@@ -2119,6 +2125,7 @@ export {
|
|
|
2119
2125
|
calculateEstimatedDuration,
|
|
2120
2126
|
calculateFitDimensions,
|
|
2121
2127
|
calculateLineWidth,
|
|
2128
|
+
calculateScreenshotAnimationDuration,
|
|
2122
2129
|
calculateTimelineContentEnd,
|
|
2123
2130
|
canSetAsReference,
|
|
2124
2131
|
debugFontStatus,
|
package/dist/utils/index.d.mts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export {
|
|
1
|
+
export { a0 as APPLE_EMOJI_FONT, aF as CAPTION_PRESETS, U as CaptionFontWeight, N as CaptionPage, Q as CaptionPosition, O as CaptionPreset, X as CaptionStyle, M as CaptionWord, aG as DEFAULT_CAPTION_STYLE, $ as FONT_FAMILIES, a3 as FONT_URLS, a8 as FitDimensions, aa as IMAGE_DEFAULTS, ar as PositionResolutionError, P as PositionResolutionResult, Z as SCREENSHOT_ANIMATION_DEFAULTS, Y as ScreenshotAnimationConfig, c as ScreenshotAnimationProps, a9 as TEXT_DEFAULTS, ab as VIDEO_DEFAULTS, ac as VISUAL_DEFAULTS, ae as applyImageDefaults, ad as applyTextDefaults, af as applyVideoDefaults, a5 as areFontsLoaded, a2 as buildFontString, am as calculateAutoWidthDimensions, as as calculateCropBounds, az as calculateEstimatedDuration, a7 as calculateFitDimensions, ah as calculateLineWidth, _ as calculateScreenshotAnimationDuration, aA as calculateTimelineContentEnd, an as canSetAsReference, a6 as debugFontStatus, au as defaultOffset, aB as formatTime, aE as generateOverlayId, aD as generateSegmentId, av as getBaseSegments, ai as getBorderRadii, aI as getCaptionPresetNames, ao as getDependentElements, a1 as getFontFamily, aw as getOverlays, ap as getReferenceElementX, aq as getReferenceElementY, ax as getSegmentTimelinePosition, ak as hexToRgba, at as isDynamicCropEnabled, ay as isSegmentVisibleAtTime, aJ as isValidCaptionPreset, aj as parseHexColor, aC as parseTime, a4 as preloadFonts, aH as resolveCaptionStyle, al as resolveElementPositions, ag as wrapText } from '../index-CaQXmrQS.mjs';
|
package/dist/utils/index.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export {
|
|
1
|
+
export { a0 as APPLE_EMOJI_FONT, aF as CAPTION_PRESETS, U as CaptionFontWeight, N as CaptionPage, Q as CaptionPosition, O as CaptionPreset, X as CaptionStyle, M as CaptionWord, aG as DEFAULT_CAPTION_STYLE, $ as FONT_FAMILIES, a3 as FONT_URLS, a8 as FitDimensions, aa as IMAGE_DEFAULTS, ar as PositionResolutionError, P as PositionResolutionResult, Z as SCREENSHOT_ANIMATION_DEFAULTS, Y as ScreenshotAnimationConfig, c as ScreenshotAnimationProps, a9 as TEXT_DEFAULTS, ab as VIDEO_DEFAULTS, ac as VISUAL_DEFAULTS, ae as applyImageDefaults, ad as applyTextDefaults, af as applyVideoDefaults, a5 as areFontsLoaded, a2 as buildFontString, am as calculateAutoWidthDimensions, as as calculateCropBounds, az as calculateEstimatedDuration, a7 as calculateFitDimensions, ah as calculateLineWidth, _ as calculateScreenshotAnimationDuration, aA as calculateTimelineContentEnd, an as canSetAsReference, a6 as debugFontStatus, au as defaultOffset, aB as formatTime, aE as generateOverlayId, aD as generateSegmentId, av as getBaseSegments, ai as getBorderRadii, aI as getCaptionPresetNames, ao as getDependentElements, a1 as getFontFamily, aw as getOverlays, ap as getReferenceElementX, aq as getReferenceElementY, ax as getSegmentTimelinePosition, ak as hexToRgba, at as isDynamicCropEnabled, ay as isSegmentVisibleAtTime, aJ as isValidCaptionPreset, aj as parseHexColor, aC as parseTime, a4 as preloadFonts, aH as resolveCaptionStyle, al as resolveElementPositions, ag as wrapText } from '../index-CaQXmrQS.js';
|
package/dist/utils/index.js
CHANGED
|
@@ -26,6 +26,7 @@ __export(utils_exports, {
|
|
|
26
26
|
FONT_FAMILIES: () => FONT_FAMILIES,
|
|
27
27
|
FONT_URLS: () => FONT_URLS,
|
|
28
28
|
IMAGE_DEFAULTS: () => IMAGE_DEFAULTS,
|
|
29
|
+
SCREENSHOT_ANIMATION_DEFAULTS: () => SCREENSHOT_ANIMATION_DEFAULTS,
|
|
29
30
|
TEXT_DEFAULTS: () => TEXT_DEFAULTS,
|
|
30
31
|
VIDEO_DEFAULTS: () => VIDEO_DEFAULTS,
|
|
31
32
|
VISUAL_DEFAULTS: () => VISUAL_DEFAULTS,
|
|
@@ -39,6 +40,7 @@ __export(utils_exports, {
|
|
|
39
40
|
calculateEstimatedDuration: () => calculateEstimatedDuration,
|
|
40
41
|
calculateFitDimensions: () => calculateFitDimensions,
|
|
41
42
|
calculateLineWidth: () => calculateLineWidth,
|
|
43
|
+
calculateScreenshotAnimationDuration: () => calculateScreenshotAnimationDuration,
|
|
42
44
|
calculateTimelineContentEnd: () => calculateTimelineContentEnd,
|
|
43
45
|
canSetAsReference: () => canSetAsReference,
|
|
44
46
|
debugFontStatus: () => debugFontStatus,
|
|
@@ -1156,6 +1158,23 @@ function getCaptionPresetNames() {
|
|
|
1156
1158
|
function isValidCaptionPreset(name) {
|
|
1157
1159
|
return name in CAPTION_PRESETS;
|
|
1158
1160
|
}
|
|
1161
|
+
|
|
1162
|
+
// src/types/screenshot.ts
|
|
1163
|
+
var SCREENSHOT_ANIMATION_DEFAULTS = {
|
|
1164
|
+
width: 1206,
|
|
1165
|
+
height: 2622,
|
|
1166
|
+
pauseDurationMs: 1e3,
|
|
1167
|
+
flashDurationMs: 255,
|
|
1168
|
+
holdDurationMs: 500,
|
|
1169
|
+
movementDurationMs: 895,
|
|
1170
|
+
borderRadius: 35,
|
|
1171
|
+
borderColor: "rgba(254, 255, 255, 1)",
|
|
1172
|
+
backgroundColor: "#000000"
|
|
1173
|
+
};
|
|
1174
|
+
function calculateScreenshotAnimationDuration(holdDurationMs) {
|
|
1175
|
+
const hold = holdDurationMs ?? SCREENSHOT_ANIMATION_DEFAULTS.holdDurationMs;
|
|
1176
|
+
return SCREENSHOT_ANIMATION_DEFAULTS.pauseDurationMs + SCREENSHOT_ANIMATION_DEFAULTS.flashDurationMs + SCREENSHOT_ANIMATION_DEFAULTS.movementDurationMs + hold;
|
|
1177
|
+
}
|
|
1159
1178
|
// Annotate the CommonJS export names for ESM import in node:
|
|
1160
1179
|
0 && (module.exports = {
|
|
1161
1180
|
APPLE_EMOJI_FONT,
|
|
@@ -1164,6 +1183,7 @@ function isValidCaptionPreset(name) {
|
|
|
1164
1183
|
FONT_FAMILIES,
|
|
1165
1184
|
FONT_URLS,
|
|
1166
1185
|
IMAGE_DEFAULTS,
|
|
1186
|
+
SCREENSHOT_ANIMATION_DEFAULTS,
|
|
1167
1187
|
TEXT_DEFAULTS,
|
|
1168
1188
|
VIDEO_DEFAULTS,
|
|
1169
1189
|
VISUAL_DEFAULTS,
|
|
@@ -1177,6 +1197,7 @@ function isValidCaptionPreset(name) {
|
|
|
1177
1197
|
calculateEstimatedDuration,
|
|
1178
1198
|
calculateFitDimensions,
|
|
1179
1199
|
calculateLineWidth,
|
|
1200
|
+
calculateScreenshotAnimationDuration,
|
|
1180
1201
|
calculateTimelineContentEnd,
|
|
1181
1202
|
canSetAsReference,
|
|
1182
1203
|
debugFontStatus,
|
package/dist/utils/index.mjs
CHANGED
|
@@ -5,6 +5,7 @@ import {
|
|
|
5
5
|
FONT_FAMILIES,
|
|
6
6
|
FONT_URLS,
|
|
7
7
|
IMAGE_DEFAULTS,
|
|
8
|
+
SCREENSHOT_ANIMATION_DEFAULTS,
|
|
8
9
|
TEXT_DEFAULTS,
|
|
9
10
|
VIDEO_DEFAULTS,
|
|
10
11
|
VISUAL_DEFAULTS,
|
|
@@ -18,6 +19,7 @@ import {
|
|
|
18
19
|
calculateEstimatedDuration,
|
|
19
20
|
calculateFitDimensions,
|
|
20
21
|
calculateLineWidth,
|
|
22
|
+
calculateScreenshotAnimationDuration,
|
|
21
23
|
calculateTimelineContentEnd,
|
|
22
24
|
canSetAsReference,
|
|
23
25
|
debugFontStatus,
|
|
@@ -44,7 +46,7 @@ import {
|
|
|
44
46
|
resolveCaptionStyle,
|
|
45
47
|
resolveElementPositions,
|
|
46
48
|
wrapText
|
|
47
|
-
} from "../chunk-
|
|
49
|
+
} from "../chunk-XPFWXMUB.mjs";
|
|
48
50
|
export {
|
|
49
51
|
APPLE_EMOJI_FONT,
|
|
50
52
|
CAPTION_PRESETS,
|
|
@@ -52,6 +54,7 @@ export {
|
|
|
52
54
|
FONT_FAMILIES,
|
|
53
55
|
FONT_URLS,
|
|
54
56
|
IMAGE_DEFAULTS,
|
|
57
|
+
SCREENSHOT_ANIMATION_DEFAULTS,
|
|
55
58
|
TEXT_DEFAULTS,
|
|
56
59
|
VIDEO_DEFAULTS,
|
|
57
60
|
VISUAL_DEFAULTS,
|
|
@@ -65,6 +68,7 @@ export {
|
|
|
65
68
|
calculateEstimatedDuration,
|
|
66
69
|
calculateFitDimensions,
|
|
67
70
|
calculateLineWidth,
|
|
71
|
+
calculateScreenshotAnimationDuration,
|
|
68
72
|
calculateTimelineContentEnd,
|
|
69
73
|
canSetAsReference,
|
|
70
74
|
debugFontStatus,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "ugcinc-render",
|
|
3
|
-
"version": "1.8.
|
|
3
|
+
"version": "1.8.48",
|
|
4
4
|
"description": "Unified rendering package for UGC Inc - shared types, components, and compositions for pixel-perfect client/server rendering",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"module": "dist/index.mjs",
|
|
@@ -56,7 +56,7 @@
|
|
|
56
56
|
},
|
|
57
57
|
"dependencies": {
|
|
58
58
|
"@remotion/player": "^4.0.0",
|
|
59
|
-
"ugcinc-render": "^1.8.
|
|
59
|
+
"ugcinc-render": "^1.8.46",
|
|
60
60
|
"zod": "^3.22.0"
|
|
61
61
|
},
|
|
62
62
|
"devDependencies": {
|