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.
@@ -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 { FONT_URLS as $, type AutoCaptionCompositionProps as A, type BorderRadiusConfig as B, type CaptionOverlayProps as C, type DynamicCropConfig as D, type SegmentTimelinePosition as E, type FitMode as F, type CropBoundary as G, type Hyphenation as H, type ImageEditorElement as I, type CropAxisConfig as J, type CropBounds as K, type CaptionWord as L, type CaptionPage as M, type CaptionPreset as N, type CaptionPosition as O, type PositionResolutionResult as P, type CaptionFontWeight as Q, type RelativePositionConfigX as R, type SegmentType as S, type TimeValue as T, type CaptionStyle as U, type VerticalAlignment as V, type WordBreak as W, FONT_FAMILIES as X, APPLE_EMOJI_FONT as Y, getFontFamily as Z, buildFontString as _, type RelativePositionConfigY as a, preloadFonts as a0, areFontsLoaded as a1, debugFontStatus as a2, calculateFitDimensions as a3, type FitDimensions as a4, TEXT_DEFAULTS as a5, IMAGE_DEFAULTS as a6, VIDEO_DEFAULTS as a7, VISUAL_DEFAULTS as a8, applyTextDefaults as a9, generateOverlayId as aA, CAPTION_PRESETS as aB, DEFAULT_CAPTION_STYLE as aC, resolveCaptionStyle as aD, getCaptionPresetNames as aE, isValidCaptionPreset as aF, applyImageDefaults as aa, applyVideoDefaults as ab, wrapText as ac, calculateLineWidth as ad, getBorderRadii as ae, parseHexColor as af, hexToRgba as ag, resolveElementPositions as ah, calculateAutoWidthDimensions as ai, canSetAsReference as aj, getDependentElements as ak, getReferenceElementX as al, getReferenceElementY as am, type PositionResolutionError as an, calculateCropBounds as ao, isDynamicCropEnabled as ap, defaultOffset as aq, getBaseSegments as ar, getOverlays as as, getSegmentTimelinePosition as at, isSegmentVisibleAtTime as au, calculateEstimatedDuration as av, calculateTimelineContentEnd as aw, formatTime as ax, parseTime as ay, generateSegmentId as az, type TextStyleProperties as b, type FontType as c, type FontWeight as d, type TextAlignment as e, type TextDirection as f, type TextWrap as g, type TextOverflow as h, type VerticalAnchor as i, type HorizontalAnchor as j, type HorizontalSelfAnchor as k, type VerticalSelfAnchor as l, type ImageEditorNodeConfig as m, type DimensionPresetKey as n, type DimensionPreset as o, DIMENSION_PRESETS as p, type TimeMode as q, type VideoEditorBaseSegment as r, type VideoEditorVisualSegment as s, type VideoEditorVideoSegment as t, type VideoEditorAudioSegment as u, type VideoEditorImageSegment as v, type VideoEditorTextSegment as w, type VideoEditorSegment as x, type VideoEditorChannel as y, type VideoEditorNodeConfig as z };
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 { FONT_URLS as $, type AutoCaptionCompositionProps as A, type BorderRadiusConfig as B, type CaptionOverlayProps as C, type DynamicCropConfig as D, type SegmentTimelinePosition as E, type FitMode as F, type CropBoundary as G, type Hyphenation as H, type ImageEditorElement as I, type CropAxisConfig as J, type CropBounds as K, type CaptionWord as L, type CaptionPage as M, type CaptionPreset as N, type CaptionPosition as O, type PositionResolutionResult as P, type CaptionFontWeight as Q, type RelativePositionConfigX as R, type SegmentType as S, type TimeValue as T, type CaptionStyle as U, type VerticalAlignment as V, type WordBreak as W, FONT_FAMILIES as X, APPLE_EMOJI_FONT as Y, getFontFamily as Z, buildFontString as _, type RelativePositionConfigY as a, preloadFonts as a0, areFontsLoaded as a1, debugFontStatus as a2, calculateFitDimensions as a3, type FitDimensions as a4, TEXT_DEFAULTS as a5, IMAGE_DEFAULTS as a6, VIDEO_DEFAULTS as a7, VISUAL_DEFAULTS as a8, applyTextDefaults as a9, generateOverlayId as aA, CAPTION_PRESETS as aB, DEFAULT_CAPTION_STYLE as aC, resolveCaptionStyle as aD, getCaptionPresetNames as aE, isValidCaptionPreset as aF, applyImageDefaults as aa, applyVideoDefaults as ab, wrapText as ac, calculateLineWidth as ad, getBorderRadii as ae, parseHexColor as af, hexToRgba as ag, resolveElementPositions as ah, calculateAutoWidthDimensions as ai, canSetAsReference as aj, getDependentElements as ak, getReferenceElementX as al, getReferenceElementY as am, type PositionResolutionError as an, calculateCropBounds as ao, isDynamicCropEnabled as ap, defaultOffset as aq, getBaseSegments as ar, getOverlays as as, getSegmentTimelinePosition as at, isSegmentVisibleAtTime as au, calculateEstimatedDuration as av, calculateTimelineContentEnd as aw, formatTime as ax, parseTime as ay, generateSegmentId as az, type TextStyleProperties as b, type FontType as c, type FontWeight as d, type TextAlignment as e, type TextDirection as f, type TextWrap as g, type TextOverflow as h, type VerticalAnchor as i, type HorizontalAnchor as j, type HorizontalSelfAnchor as k, type VerticalSelfAnchor as l, type ImageEditorNodeConfig as m, type DimensionPresetKey as n, type DimensionPreset as o, DIMENSION_PRESETS as p, type TimeMode as q, type VideoEditorBaseSegment as r, type VideoEditorVisualSegment as s, type VideoEditorVideoSegment as t, type VideoEditorAudioSegment as u, type VideoEditorImageSegment as v, type VideoEditorTextSegment as w, type VideoEditorSegment as x, type VideoEditorChannel as y, type VideoEditorNodeConfig as z };
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-DB7cs12s.mjs';
2
- export { Y as APPLE_EMOJI_FONT, aB as CAPTION_PRESETS, Q as CaptionFontWeight, M as CaptionPage, O as CaptionPosition, N as CaptionPreset, U as CaptionStyle, L as CaptionWord, J as CropAxisConfig, G as CropBoundary, K as CropBounds, aC as DEFAULT_CAPTION_STYLE, p as DIMENSION_PRESETS, o as DimensionPreset, n as DimensionPresetKey, X as FONT_FAMILIES, $ as FONT_URLS, a4 as FitDimensions, c as FontType, d as FontWeight, j as HorizontalAnchor, k as HorizontalSelfAnchor, H as Hyphenation, a6 as IMAGE_DEFAULTS, m as ImageEditorNodeConfig, an as PositionResolutionError, E as SegmentTimelinePosition, a5 as TEXT_DEFAULTS, e as TextAlignment, f as TextDirection, h as TextOverflow, g as TextWrap, q as TimeMode, a7 as VIDEO_DEFAULTS, a8 as VISUAL_DEFAULTS, V as VerticalAlignment, i as VerticalAnchor, l as VerticalSelfAnchor, u as VideoEditorAudioSegment, r as VideoEditorBaseSegment, y as VideoEditorChannel, v as VideoEditorImageSegment, z as VideoEditorNodeConfig, x as VideoEditorSegment, w as VideoEditorTextSegment, t as VideoEditorVideoSegment, s as VideoEditorVisualSegment, W as WordBreak, aa as applyImageDefaults, a9 as applyTextDefaults, ab as applyVideoDefaults, a1 as areFontsLoaded, _ as buildFontString, ai as calculateAutoWidthDimensions, ao as calculateCropBounds, av as calculateEstimatedDuration, a3 as calculateFitDimensions, ad as calculateLineWidth, aw as calculateTimelineContentEnd, aj as canSetAsReference, a2 as debugFontStatus, aq as defaultOffset, ax as formatTime, aA as generateOverlayId, az as generateSegmentId, ar as getBaseSegments, ae as getBorderRadii, aE as getCaptionPresetNames, ak as getDependentElements, Z as getFontFamily, as as getOverlays, al as getReferenceElementX, am as getReferenceElementY, at as getSegmentTimelinePosition, ag as hexToRgba, ap as isDynamicCropEnabled, au as isSegmentVisibleAtTime, aF as isValidCaptionPreset, af as parseHexColor, ay as parseTime, a0 as preloadFonts, aD as resolveCaptionStyle, ah as resolveElementPositions, ac as wrapText } from './index-DB7cs12s.mjs';
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, type 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 };
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-DB7cs12s.js';
2
- export { Y as APPLE_EMOJI_FONT, aB as CAPTION_PRESETS, Q as CaptionFontWeight, M as CaptionPage, O as CaptionPosition, N as CaptionPreset, U as CaptionStyle, L as CaptionWord, J as CropAxisConfig, G as CropBoundary, K as CropBounds, aC as DEFAULT_CAPTION_STYLE, p as DIMENSION_PRESETS, o as DimensionPreset, n as DimensionPresetKey, X as FONT_FAMILIES, $ as FONT_URLS, a4 as FitDimensions, c as FontType, d as FontWeight, j as HorizontalAnchor, k as HorizontalSelfAnchor, H as Hyphenation, a6 as IMAGE_DEFAULTS, m as ImageEditorNodeConfig, an as PositionResolutionError, E as SegmentTimelinePosition, a5 as TEXT_DEFAULTS, e as TextAlignment, f as TextDirection, h as TextOverflow, g as TextWrap, q as TimeMode, a7 as VIDEO_DEFAULTS, a8 as VISUAL_DEFAULTS, V as VerticalAlignment, i as VerticalAnchor, l as VerticalSelfAnchor, u as VideoEditorAudioSegment, r as VideoEditorBaseSegment, y as VideoEditorChannel, v as VideoEditorImageSegment, z as VideoEditorNodeConfig, x as VideoEditorSegment, w as VideoEditorTextSegment, t as VideoEditorVideoSegment, s as VideoEditorVisualSegment, W as WordBreak, aa as applyImageDefaults, a9 as applyTextDefaults, ab as applyVideoDefaults, a1 as areFontsLoaded, _ as buildFontString, ai as calculateAutoWidthDimensions, ao as calculateCropBounds, av as calculateEstimatedDuration, a3 as calculateFitDimensions, ad as calculateLineWidth, aw as calculateTimelineContentEnd, aj as canSetAsReference, a2 as debugFontStatus, aq as defaultOffset, ax as formatTime, aA as generateOverlayId, az as generateSegmentId, ar as getBaseSegments, ae as getBorderRadii, aE as getCaptionPresetNames, ak as getDependentElements, Z as getFontFamily, as as getOverlays, al as getReferenceElementX, am as getReferenceElementY, at as getSegmentTimelinePosition, ag as hexToRgba, ap as isDynamicCropEnabled, au as isSegmentVisibleAtTime, aF as isValidCaptionPreset, af as parseHexColor, ay as parseTime, a0 as preloadFonts, aD as resolveCaptionStyle, ah as resolveElementPositions, ac as wrapText } from './index-DB7cs12s.js';
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, type 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 };
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: (0, import_remotion7.staticFile)("phone-top-nav.png"),
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-6DSZRTLA.mjs";
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, staticFile, useCurrentFrame as useCurrentFrame5, useVideoConfig as useVideoConfig5 } from "remotion";
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: staticFile("phone-top-nav.png"),
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,
@@ -1 +1 @@
1
- export { Y as APPLE_EMOJI_FONT, aB as CAPTION_PRESETS, Q as CaptionFontWeight, M as CaptionPage, O as CaptionPosition, N as CaptionPreset, U as CaptionStyle, L as CaptionWord, aC as DEFAULT_CAPTION_STYLE, X as FONT_FAMILIES, $ as FONT_URLS, a4 as FitDimensions, a6 as IMAGE_DEFAULTS, an as PositionResolutionError, P as PositionResolutionResult, a5 as TEXT_DEFAULTS, a7 as VIDEO_DEFAULTS, a8 as VISUAL_DEFAULTS, aa as applyImageDefaults, a9 as applyTextDefaults, ab as applyVideoDefaults, a1 as areFontsLoaded, _ as buildFontString, ai as calculateAutoWidthDimensions, ao as calculateCropBounds, av as calculateEstimatedDuration, a3 as calculateFitDimensions, ad as calculateLineWidth, aw as calculateTimelineContentEnd, aj as canSetAsReference, a2 as debugFontStatus, aq as defaultOffset, ax as formatTime, aA as generateOverlayId, az as generateSegmentId, ar as getBaseSegments, ae as getBorderRadii, aE as getCaptionPresetNames, ak as getDependentElements, Z as getFontFamily, as as getOverlays, al as getReferenceElementX, am as getReferenceElementY, at as getSegmentTimelinePosition, ag as hexToRgba, ap as isDynamicCropEnabled, au as isSegmentVisibleAtTime, aF as isValidCaptionPreset, af as parseHexColor, ay as parseTime, a0 as preloadFonts, aD as resolveCaptionStyle, ah as resolveElementPositions, ac as wrapText } from '../index-DB7cs12s.mjs';
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';
@@ -1 +1 @@
1
- export { Y as APPLE_EMOJI_FONT, aB as CAPTION_PRESETS, Q as CaptionFontWeight, M as CaptionPage, O as CaptionPosition, N as CaptionPreset, U as CaptionStyle, L as CaptionWord, aC as DEFAULT_CAPTION_STYLE, X as FONT_FAMILIES, $ as FONT_URLS, a4 as FitDimensions, a6 as IMAGE_DEFAULTS, an as PositionResolutionError, P as PositionResolutionResult, a5 as TEXT_DEFAULTS, a7 as VIDEO_DEFAULTS, a8 as VISUAL_DEFAULTS, aa as applyImageDefaults, a9 as applyTextDefaults, ab as applyVideoDefaults, a1 as areFontsLoaded, _ as buildFontString, ai as calculateAutoWidthDimensions, ao as calculateCropBounds, av as calculateEstimatedDuration, a3 as calculateFitDimensions, ad as calculateLineWidth, aw as calculateTimelineContentEnd, aj as canSetAsReference, a2 as debugFontStatus, aq as defaultOffset, ax as formatTime, aA as generateOverlayId, az as generateSegmentId, ar as getBaseSegments, ae as getBorderRadii, aE as getCaptionPresetNames, ak as getDependentElements, Z as getFontFamily, as as getOverlays, al as getReferenceElementX, am as getReferenceElementY, at as getSegmentTimelinePosition, ag as hexToRgba, ap as isDynamicCropEnabled, au as isSegmentVisibleAtTime, aF as isValidCaptionPreset, af as parseHexColor, ay as parseTime, a0 as preloadFonts, aD as resolveCaptionStyle, ah as resolveElementPositions, ac as wrapText } from '../index-DB7cs12s.js';
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';
@@ -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,
@@ -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-6DSZRTLA.mjs";
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.46",
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.38",
59
+ "ugcinc-render": "^1.8.46",
60
60
  "zod": "^3.22.0"
61
61
  },
62
62
  "devDependencies": {