@vibecuting/video-project-core 0.1.26 → 0.1.28
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/package.json +4 -4
- package/src/base/BaseRemotionScene.tsx +4 -3
- package/src/core/index.test.ts +40 -0
- package/src/core/intro/_shared/intro-layout.test.ts +18 -0
- package/src/core/intro/_shared/intro-layout.ts +50 -0
- package/src/core/intro/cyberpunk-intro-holo/default-cyberpunk-intro-bumper-Horizontal.tsx +25 -0
- package/src/core/intro/cyberpunk-intro-holo/default-cyberpunk-intro-bumper-Landscape.tsx +25 -0
- package/src/core/intro/cyberpunk-intro-holo/default-cyberpunk-intro-bumper.stories.tsx +31 -0
- package/src/core/intro/cyberpunk-intro-holo/default-cyberpunk-intro-bumper.tsx +118 -0
- package/src/core/intro/cyberpunk-intro-holo/index.ts +11 -0
- package/src/core/intro/cyberpunk-intro-neon/default-cyberpunk-intro-bumper-Horizontal.tsx +24 -0
- package/src/core/intro/cyberpunk-intro-neon/default-cyberpunk-intro-bumper-Landscape.tsx +24 -0
- package/src/core/intro/cyberpunk-intro-neon/default-cyberpunk-intro-bumper.stories.tsx +30 -0
- package/src/core/intro/cyberpunk-intro-neon/default-cyberpunk-intro-bumper.tsx +108 -0
- package/src/core/intro/cyberpunk-intro-neon/index.ts +10 -0
- package/src/core/intro/default-cinematic-intro-bumper/default-cinematic-intro-bumper-Horizontal.tsx +24 -0
- package/src/core/intro/default-cinematic-intro-bumper/default-cinematic-intro-bumper-Landscape.tsx +24 -0
- package/src/core/intro/default-cinematic-intro-bumper/default-cinematic-intro-bumper.stories.tsx +29 -0
- package/src/core/intro/default-cinematic-intro-bumper/default-cinematic-intro-bumper.tsx +234 -0
- package/src/core/intro/default-cinematic-intro-bumper/index.ts +11 -0
- package/src/core/intro/default-festival-intro-bumper/default-festival-intro-bumper-Horizontal.tsx +24 -0
- package/src/core/intro/default-festival-intro-bumper/default-festival-intro-bumper-Landscape.tsx +24 -0
- package/src/core/intro/default-festival-intro-bumper/default-festival-intro-bumper.stories.tsx +29 -0
- package/src/core/intro/default-festival-intro-bumper/default-festival-intro-bumper.tsx +187 -0
- package/src/core/intro/default-festival-intro-bumper/index.ts +11 -0
- package/src/core/intro/default-intro-bumper/default-intro-bumper-Horizontal.tsx +24 -0
- package/src/core/intro/default-intro-bumper/default-intro-bumper-Landscape.tsx +24 -0
- package/src/core/intro/default-intro-bumper/default-intro-bumper.stories.tsx +41 -0
- package/src/core/intro/default-intro-bumper/default-intro-bumper.tsx +256 -0
- package/src/core/intro/default-intro-bumper/index.ts +11 -0
- package/src/core/intro/default-noir-intro-bumper/default-noir-intro-bumper-Horizontal.tsx +24 -0
- package/src/core/intro/default-noir-intro-bumper/default-noir-intro-bumper-Landscape.tsx +24 -0
- package/src/core/intro/default-noir-intro-bumper/default-noir-intro-bumper.stories.tsx +29 -0
- package/src/core/intro/default-noir-intro-bumper/default-noir-intro-bumper.tsx +122 -0
- package/src/core/intro/default-noir-intro-bumper/index.ts +11 -0
- package/src/core/intro/default-trailer-intro-bumper/default-trailer-intro-bumper-Horizontal.tsx +24 -0
- package/src/core/intro/default-trailer-intro-bumper/default-trailer-intro-bumper-Landscape.tsx +24 -0
- package/src/core/intro/default-trailer-intro-bumper/default-trailer-intro-bumper.stories.tsx +29 -0
- package/src/core/intro/default-trailer-intro-bumper/default-trailer-intro-bumper.tsx +181 -0
- package/src/core/intro/default-trailer-intro-bumper/index.ts +11 -0
- package/src/core/intro/documentary-intro-observation/default-documentary-intro-bumper-Horizontal.tsx +18 -0
- package/src/core/intro/documentary-intro-observation/default-documentary-intro-bumper-Landscape.tsx +18 -0
- package/src/core/intro/documentary-intro-observation/default-documentary-intro-bumper.stories.tsx +31 -0
- package/src/core/intro/documentary-intro-observation/default-documentary-intro-bumper.tsx +158 -0
- package/src/core/intro/documentary-intro-observation/index.ts +10 -0
- package/src/core/intro/family-intro-reunion/default-family-intro-bumper-Horizontal.tsx +18 -0
- package/src/core/intro/family-intro-reunion/default-family-intro-bumper-Landscape.tsx +18 -0
- package/src/core/intro/family-intro-reunion/default-family-intro-bumper.stories.tsx +43 -0
- package/src/core/intro/family-intro-reunion/default-family-intro-bumper.tsx +165 -0
- package/src/core/intro/family-intro-reunion/index.ts +10 -0
- package/src/core/intro/festival-intro-spotlight/default-festival-intro-bumper-Horizontal.tsx +1 -0
- package/src/core/intro/festival-intro-spotlight/default-festival-intro-bumper-Landscape.tsx +1 -0
- package/src/core/intro/festival-intro-spotlight/default-festival-intro-bumper.stories.tsx +30 -0
- package/src/core/intro/festival-intro-spotlight/default-festival-intro-bumper.tsx +105 -0
- package/src/core/intro/festival-intro-spotlight/index.ts +10 -0
- package/src/core/intro/index.test.ts +45 -0
- package/src/core/intro/index.ts +17 -0
- package/src/core/intro/noir-intro-city/default-noir-intro-bumper-Horizontal.tsx +24 -0
- package/src/core/intro/noir-intro-city/default-noir-intro-bumper-Landscape.tsx +24 -0
- package/src/core/intro/noir-intro-city/default-noir-intro-bumper.stories.tsx +31 -0
- package/src/core/intro/noir-intro-city/default-noir-intro-bumper.tsx +96 -0
- package/src/core/intro/noir-intro-city/index.ts +10 -0
- package/src/core/intro/noir-intro-deluxe/default-noir-intro-bumper-Horizontal.tsx +1 -0
- package/src/core/intro/noir-intro-deluxe/default-noir-intro-bumper-Landscape.tsx +1 -0
- package/src/core/intro/noir-intro-deluxe/default-noir-intro-bumper.stories.tsx +31 -0
- package/src/core/intro/noir-intro-deluxe/default-noir-intro-bumper.tsx +117 -0
- package/src/core/intro/noir-intro-deluxe/index.ts +10 -0
- package/src/core/intro/sci-fi-intro/default-sci-fi-intro-bumper-Horizontal.tsx +1 -0
- package/src/core/intro/sci-fi-intro/default-sci-fi-intro-bumper-Landscape.tsx +1 -0
- package/src/core/intro/sci-fi-intro/default-sci-fi-intro-bumper.stories.tsx +48 -0
- package/src/core/intro/sci-fi-intro/default-sci-fi-intro-bumper.tsx +105 -0
- package/src/core/intro/sci-fi-intro/index.ts +10 -0
- package/src/core/intro/thriller-intro-suspense/default-thriller-intro-bumper-Horizontal.tsx +18 -0
- package/src/core/intro/thriller-intro-suspense/default-thriller-intro-bumper-Landscape.tsx +18 -0
- package/src/core/intro/thriller-intro-suspense/default-thriller-intro-bumper.stories.tsx +31 -0
- package/src/core/intro/thriller-intro-suspense/default-thriller-intro-bumper.tsx +155 -0
- package/src/core/intro/thriller-intro-suspense/index.ts +10 -0
- package/src/core/intro/trailer-intro-premiere/default-trailer-intro-bumper-Horizontal.tsx +1 -0
- package/src/core/intro/trailer-intro-premiere/default-trailer-intro-bumper-Landscape.tsx +1 -0
- package/src/core/intro/trailer-intro-premiere/default-trailer-intro-bumper.stories.tsx +30 -0
- package/src/core/intro/trailer-intro-premiere/default-trailer-intro-bumper.tsx +104 -0
- package/src/core/intro/trailer-intro-premiere/index.ts +10 -0
- package/src/core/intro/travel-intro-journey/default-travel-intro-bumper-Horizontal.tsx +18 -0
- package/src/core/intro/travel-intro-journey/default-travel-intro-bumper-Landscape.tsx +18 -0
- package/src/core/intro/travel-intro-journey/default-travel-intro-bumper.stories.tsx +43 -0
- package/src/core/intro/travel-intro-journey/default-travel-intro-bumper.tsx +158 -0
- package/src/core/intro/travel-intro-journey/index.ts +10 -0
- package/src/core/intro/western-intro/default-western-intro-bumper-Horizontal.tsx +24 -0
- package/src/core/intro/western-intro/default-western-intro-bumper-Landscape.tsx +24 -0
- package/src/core/intro/western-intro/default-western-intro-bumper.stories.tsx +29 -0
- package/src/core/intro/western-intro/default-western-intro-bumper.tsx +146 -0
- package/src/core/intro/western-intro/index.ts +4 -0
- package/src/core/intro/western-intro-gangster/default-western-intro-bumper-Horizontal.tsx +25 -0
- package/src/core/intro/western-intro-gangster/default-western-intro-bumper-Landscape.tsx +25 -0
- package/src/core/intro/western-intro-gangster/default-western-intro-bumper.stories.tsx +31 -0
- package/src/core/intro/western-intro-gangster/default-western-intro-bumper.tsx +105 -0
- package/src/core/intro/western-intro-gangster/index.ts +11 -0
- package/src/core/outro/_shared/outro-layout.test.ts +32 -0
- package/src/core/outro/_shared/outro-layout.ts +72 -0
- package/src/core/outro/award-outro-celebration/default-award-outro-bumper-Horizontal.tsx +18 -0
- package/src/core/outro/award-outro-celebration/default-award-outro-bumper-Landscape.tsx +18 -0
- package/src/core/outro/award-outro-celebration/default-award-outro-bumper.stories.tsx +42 -0
- package/src/core/outro/award-outro-celebration/default-award-outro-bumper.tsx +152 -0
- package/src/core/outro/award-outro-celebration/index.ts +10 -0
- package/src/core/outro/blackout-outro-finale/default-blackout-outro-bumper-Horizontal.tsx +1 -0
- package/src/core/outro/blackout-outro-finale/default-blackout-outro-bumper-Landscape.tsx +1 -0
- package/src/core/outro/blackout-outro-finale/default-blackout-outro-bumper.stories.tsx +28 -0
- package/src/core/outro/blackout-outro-finale/default-blackout-outro-bumper.tsx +71 -0
- package/src/core/outro/blackout-outro-finale/index.ts +10 -0
- package/src/core/outro/credits-roll-outro-epic/default-credits-roll-outro-Horizontal.tsx +24 -0
- package/src/core/outro/credits-roll-outro-epic/default-credits-roll-outro-Landscape.tsx +24 -0
- package/src/core/outro/credits-roll-outro-epic/default-credits-roll-outro.stories.tsx +31 -0
- package/src/core/outro/credits-roll-outro-epic/default-credits-roll-outro.tsx +106 -0
- package/src/core/outro/credits-roll-outro-epic/index.ts +10 -0
- package/src/core/outro/credits-roll-outro-premium/default-credits-roll-outro-Horizontal.tsx +1 -0
- package/src/core/outro/credits-roll-outro-premium/default-credits-roll-outro-Landscape.tsx +1 -0
- package/src/core/outro/credits-roll-outro-premium/default-credits-roll-outro.stories.tsx +30 -0
- package/src/core/outro/credits-roll-outro-premium/default-credits-roll-outro.tsx +88 -0
- package/src/core/outro/credits-roll-outro-premium/index.ts +10 -0
- package/src/core/outro/credits-roll-outro-royal/default-credits-roll-outro-Horizontal.tsx +25 -0
- package/src/core/outro/credits-roll-outro-royal/default-credits-roll-outro-Landscape.tsx +25 -0
- package/src/core/outro/credits-roll-outro-royal/default-credits-roll-outro.stories.tsx +32 -0
- package/src/core/outro/credits-roll-outro-royal/default-credits-roll-outro.tsx +110 -0
- package/src/core/outro/credits-roll-outro-royal/index.ts +11 -0
- package/src/core/outro/default-blackout-outro-bumper/default-blackout-outro-bumper-Horizontal.tsx +22 -0
- package/src/core/outro/default-blackout-outro-bumper/default-blackout-outro-bumper-Landscape.tsx +22 -0
- package/src/core/outro/default-blackout-outro-bumper/default-blackout-outro-bumper.stories.tsx +48 -0
- package/src/core/outro/default-blackout-outro-bumper/default-blackout-outro-bumper.tsx +124 -0
- package/src/core/outro/default-blackout-outro-bumper/index.ts +11 -0
- package/src/core/outro/default-credits-roll-outro/default-credits-roll-outro-Horizontal.tsx +22 -0
- package/src/core/outro/default-credits-roll-outro/default-credits-roll-outro-Landscape.tsx +22 -0
- package/src/core/outro/default-credits-roll-outro/default-credits-roll-outro.stories.tsx +48 -0
- package/src/core/outro/default-credits-roll-outro/default-credits-roll-outro.tsx +208 -0
- package/src/core/outro/default-credits-roll-outro/index.ts +11 -0
- package/src/core/outro/default-epilogue-outro/default-epilogue-outro-Horizontal.tsx +22 -0
- package/src/core/outro/default-epilogue-outro/default-epilogue-outro-Landscape.tsx +22 -0
- package/src/core/outro/default-epilogue-outro/default-epilogue-outro.stories.tsx +48 -0
- package/src/core/outro/default-epilogue-outro/default-epilogue-outro.tsx +115 -0
- package/src/core/outro/default-epilogue-outro/index.ts +11 -0
- package/src/core/outro/default-outro-bumper/default-outro-bumper-Horizontal.tsx +22 -0
- package/src/core/outro/default-outro-bumper/default-outro-bumper-Landscape.tsx +22 -0
- package/src/core/outro/default-outro-bumper/default-outro-bumper.stories.tsx +48 -0
- package/src/core/outro/default-outro-bumper/default-outro-bumper.tsx +159 -0
- package/src/core/outro/default-outro-bumper/index.ts +11 -0
- package/src/core/outro/default-sunset-outro-bumper/default-sunset-outro-bumper-Horizontal.tsx +22 -0
- package/src/core/outro/default-sunset-outro-bumper/default-sunset-outro-bumper-Landscape.tsx +22 -0
- package/src/core/outro/default-sunset-outro-bumper/default-sunset-outro-bumper.stories.tsx +48 -0
- package/src/core/outro/default-sunset-outro-bumper/default-sunset-outro-bumper.tsx +183 -0
- package/src/core/outro/default-sunset-outro-bumper/index.ts +11 -0
- package/src/core/outro/festival-outro-encore/default-festival-outro-bumper-Horizontal.tsx +18 -0
- package/src/core/outro/festival-outro-encore/default-festival-outro-bumper-Landscape.tsx +18 -0
- package/src/core/outro/festival-outro-encore/default-festival-outro-bumper.stories.tsx +31 -0
- package/src/core/outro/festival-outro-encore/default-festival-outro-bumper.tsx +130 -0
- package/src/core/outro/festival-outro-encore/index.ts +10 -0
- package/src/core/outro/heist-outro/default-heist-outro-bumper-Horizontal.tsx +24 -0
- package/src/core/outro/heist-outro/default-heist-outro-bumper-Landscape.tsx +24 -0
- package/src/core/outro/heist-outro/default-heist-outro-bumper.stories.tsx +29 -0
- package/src/core/outro/heist-outro/default-heist-outro-bumper.tsx +160 -0
- package/src/core/outro/heist-outro/index.ts +4 -0
- package/src/core/outro/index.test.ts +88 -0
- package/src/core/outro/index.ts +73 -0
- package/src/core/outro/memoir-outro-reflection/default-memoir-outro-bumper-Horizontal.tsx +18 -0
- package/src/core/outro/memoir-outro-reflection/default-memoir-outro-bumper-Landscape.tsx +18 -0
- package/src/core/outro/memoir-outro-reflection/default-memoir-outro-bumper.stories.tsx +42 -0
- package/src/core/outro/memoir-outro-reflection/default-memoir-outro-bumper.tsx +158 -0
- package/src/core/outro/memoir-outro-reflection/index.ts +10 -0
- package/src/core/outro/romance-outro/default-romance-outro-bumper-Horizontal.tsx +1 -0
- package/src/core/outro/romance-outro/default-romance-outro-bumper-Landscape.tsx +1 -0
- package/src/core/outro/romance-outro/default-romance-outro-bumper.stories.tsx +48 -0
- package/src/core/outro/romance-outro/default-romance-outro-bumper.tsx +123 -0
- package/src/core/outro/romance-outro/index.ts +10 -0
- package/src/core/outro/sunset-outro-coda/default-sunset-outro-bumper-Horizontal.tsx +1 -0
- package/src/core/outro/sunset-outro-coda/default-sunset-outro-bumper-Landscape.tsx +1 -0
- package/src/core/outro/sunset-outro-coda/default-sunset-outro-bumper.stories.tsx +30 -0
- package/src/core/outro/sunset-outro-coda/default-sunset-outro-bumper.tsx +75 -0
- package/src/core/outro/sunset-outro-coda/index.ts +10 -0
- package/src/core/scene/2dscene/default-2d-scene-Horizontal.stories.tsx +1 -1
- package/src/core/scene/2dscene/default-2d-scene.stories.tsx +1 -1
- package/src/core/scene/3dscene/default-3d-scene-Horizontal.stories.tsx +1 -1
- package/src/core/scene/3dscene/default-3d-scene.stories.tsx +1 -1
- package/src/core/scene/index.ts +3 -0
- package/src/core/scene/photo/3dvr-photo/default-3dvr-photo-scene-Horizontal.stories.tsx +46 -0
- package/src/core/scene/photo/3dvr-photo/default-3dvr-photo-scene-Horizontal.tsx +20 -0
- package/src/core/scene/photo/3dvr-photo/default-3dvr-photo-scene-Landscape.tsx +20 -0
- package/src/core/scene/photo/3dvr-photo/default-3dvr-photo-scene.stories.tsx +46 -0
- package/src/core/scene/photo/3dvr-photo/default-3dvr-photo-scene.tsx +255 -0
- package/src/core/scene/photo/3dvr-photo/index.ts +3 -0
- package/src/core/scene/photo/default-live-photo-scene-Horizontal.stories.tsx +33 -0
- package/src/core/scene/photo/default-live-photo-scene-Horizontal.tsx +20 -0
- package/src/core/scene/photo/default-live-photo-scene-Landscape.tsx +20 -0
- package/src/core/scene/photo/default-live-photo-scene.stories.tsx +33 -0
- package/src/core/scene/photo/default-live-photo-scene.tsx +432 -0
- package/src/core/scene/photo/default-photo-strip-scene-Horizontal.tsx +20 -0
- package/src/core/scene/photo/default-photo-strip-scene-Landscape.tsx +20 -0
- package/src/core/scene/photo/default-photo-strip-scene.stories.tsx +38 -0
- package/src/core/scene/photo/default-photo-strip-scene.tsx +19 -0
- package/src/core/scene/photo/default-photo-wall-scene-Horizontal.tsx +20 -0
- package/src/core/scene/photo/default-photo-wall-scene-Landscape.tsx +20 -0
- package/src/core/scene/photo/default-photo-wall-scene.stories.tsx +38 -0
- package/src/core/scene/photo/default-photo-wall-scene.tsx +19 -0
- package/src/core/scene/photo/effects-photo/default-effects-photo-scene-Horizontal.stories.tsx +44 -0
- package/src/core/scene/photo/effects-photo/default-effects-photo-scene-Horizontal.tsx +20 -0
- package/src/core/scene/photo/effects-photo/default-effects-photo-scene-Landscape.tsx +20 -0
- package/src/core/scene/photo/effects-photo/default-effects-photo-scene.stories.tsx +44 -0
- package/src/core/scene/photo/effects-photo/default-effects-photo-scene.tsx +352 -0
- package/src/core/scene/photo/effects-photo/index.ts +3 -0
- package/src/core/scene/photo/index.ts +25 -0
- package/src/core/scene/photo/photo-storybook.test.tsx +112 -0
- package/src/core/scene/slide/_shared/index.ts +27 -0
- package/src/core/scene/slide/_shared/media-templates.test.ts +47 -0
- package/src/core/scene/slide/_shared/media-templates.tsx +324 -0
- package/src/core/scene/slide/default-slide-scene-Horizontal.animated.stories.tsx +1 -1
- package/src/core/scene/slide/default-slide-scene-Horizontal.stories.tsx +1 -1
- package/src/core/scene/slide/default-slide-scene.animated.stories.tsx +1 -1
- package/src/core/scene/slide/default-slide-scene.stories.tsx +1 -1
- package/src/core/scene/slide/index.test.ts +28 -0
- package/src/core/scene/slide/index.ts +14 -0
- package/src/core/scene/slide/person-intro/default-person-intro-duo-slide.tsx +19 -0
- package/src/core/scene/slide/person-intro/default-person-intro-group-slide.tsx +168 -0
- package/src/core/scene/slide/person-intro/default-person-intro-quad-slide.tsx +19 -0
- package/src/core/scene/slide/person-intro/default-person-intro-slide-Horizontal.animated.stories.tsx +47 -0
- package/src/core/scene/slide/person-intro/default-person-intro-slide-Horizontal.stories.tsx +46 -0
- package/src/core/scene/slide/person-intro/default-person-intro-slide-Horizontal.tsx +302 -0
- package/src/core/scene/slide/person-intro/default-person-intro-slide-Landscape.tsx +20 -0
- package/src/core/scene/slide/person-intro/default-person-intro-slide.animated.stories.tsx +126 -0
- package/src/core/scene/slide/person-intro/default-person-intro-slide.stories.tsx +119 -0
- package/src/core/scene/slide/person-intro/default-person-intro-slide.tsx +363 -0
- package/src/core/scene/slide/person-intro/default-person-intro-trio-slide.tsx +19 -0
- package/src/core/scene/slide/person-intro/index.ts +8 -0
- package/src/core/scene/slide/photo-album/default-photo-album-multi-slide.tsx +19 -0
- package/src/core/scene/slide/photo-album/default-photo-album-pair-slide.tsx +19 -0
- package/src/core/scene/slide/photo-album/default-photo-album-single-slide.tsx +19 -0
- package/src/core/scene/slide/photo-album/default-photo-album-slide-Horizontal.animated.stories.tsx +26 -0
- package/src/core/scene/slide/photo-album/default-photo-album-slide-Horizontal.stories.tsx +25 -0
- package/src/core/scene/slide/photo-album/default-photo-album-slide-Horizontal.tsx +20 -0
- package/src/core/scene/slide/photo-album/default-photo-album-slide-Landscape.tsx +20 -0
- package/src/core/scene/slide/photo-album/default-photo-album-slide.animated.stories.tsx +94 -0
- package/src/core/scene/slide/photo-album/default-photo-album-slide.stories.tsx +87 -0
- package/src/core/scene/slide/photo-album/default-photo-album-slide.tsx +414 -0
- package/src/core/scene/slide/photo-album/index.ts +7 -0
- package/src/core/scene/slide/video-showcase/default-video-showcase-multi-slide.tsx +195 -0
- package/src/core/scene/slide/video-showcase/default-video-showcase-slide-Horizontal.tsx +212 -0
- package/src/core/scene/slide/video-showcase/default-video-showcase-slide-Landscape.tsx +20 -0
- package/src/core/scene/slide/video-showcase/default-video-showcase-slide.animated.stories.tsx +78 -0
- package/src/core/scene/slide/video-showcase/default-video-showcase-slide.stories.tsx +74 -0
- package/src/core/scene/slide/video-showcase/default-video-showcase-slide.tsx +365 -0
- package/src/core/scene/slide/video-showcase/index.ts +5 -0
- package/src/core/scene/video/default-video-scene-Horizontal.stories.tsx +26 -0
- package/src/core/scene/video/default-video-scene-Horizontal.tsx +20 -0
- package/src/core/scene/video/default-video-scene-Landscape.tsx +20 -0
- package/src/core/scene/video/default-video-scene.stories.tsx +26 -0
- package/src/core/scene/video/default-video-scene.tsx +283 -0
- package/src/core/scene/video/default-video-split-scene-Horizontal.tsx +20 -0
- package/src/core/scene/video/default-video-split-scene-Landscape.tsx +20 -0
- package/src/core/scene/video/default-video-split-scene.stories.tsx +41 -0
- package/src/core/scene/video/default-video-split-scene.tsx +19 -0
- package/src/core/scene/video/default-video-wall-scene-Horizontal.tsx +20 -0
- package/src/core/scene/video/default-video-wall-scene-Landscape.tsx +20 -0
- package/src/core/scene/video/default-video-wall-scene.stories.tsx +40 -0
- package/src/core/scene/video/default-video-wall-scene.tsx +19 -0
- package/src/core/scene/video/index.ts +9 -0
- package/src/storybook/remotion-preview.tsx +112 -6
- package/src/core/intro/default-intro-bumper.stories.tsx +0 -19
- package/src/core/intro/default-intro-bumper.tsx +0 -218
- package/src/core/outro/default-outro-bumper.stories.tsx +0 -19
- package/src/core/outro/default-outro-bumper.tsx +0 -218
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { ComponentProps } from 'react'
|
|
2
|
+
|
|
3
|
+
import { VideoComponent, type ScenePluginMetadata } from '@vibecuting/component-project-helper'
|
|
4
|
+
|
|
5
|
+
import { DefaultPersonIntroGroupSlide, componentMetadata as baseComponentMetadata } from './default-person-intro-group-slide'
|
|
6
|
+
|
|
7
|
+
export const componentMetadata: ScenePluginMetadata = {
|
|
8
|
+
...baseComponentMetadata,
|
|
9
|
+
name: 'DefaultPersonIntroQuadSlide',
|
|
10
|
+
description: 'Four person intro slide',
|
|
11
|
+
sourceFile: 'src/core/scene/slide/person-intro/default-person-intro-quad-slide.tsx',
|
|
12
|
+
tags: Array.from(new Set([...(baseComponentMetadata.tags ?? []), 'quad', 'four-person'])),
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
export const DefaultPersonIntroQuadSlide = VideoComponent(componentMetadata)(function DefaultPersonIntroQuadSlide(
|
|
16
|
+
props: ComponentProps<typeof DefaultPersonIntroGroupSlide>,
|
|
17
|
+
) {
|
|
18
|
+
return <DefaultPersonIntroGroupSlide {...props} />
|
|
19
|
+
})
|
package/src/core/scene/slide/person-intro/default-person-intro-slide-Horizontal.animated.stories.tsx
ADDED
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { DefaultPersonIntroSlideHorizontal } from './default-person-intro-slide-Horizontal'
|
|
2
|
+
|
|
3
|
+
const meta = {
|
|
4
|
+
title: 'core/scene/slide/person-intro/DefaultPersonIntroSlideHorizontal/Animated',
|
|
5
|
+
component: DefaultPersonIntroSlideHorizontal,
|
|
6
|
+
args: {
|
|
7
|
+
name: 'Avery Chen',
|
|
8
|
+
role: 'Creative Director, Product Storytelling',
|
|
9
|
+
bio: 'Designs presentation systems that turn product updates, launches, and leadership narratives into concise visual stories.',
|
|
10
|
+
avatar: (
|
|
11
|
+
<div
|
|
12
|
+
style={{
|
|
13
|
+
width: '100%',
|
|
14
|
+
height: '100%',
|
|
15
|
+
display: 'grid',
|
|
16
|
+
placeItems: 'center',
|
|
17
|
+
background: 'linear-gradient(135deg, #38bdf8 0%, #2563eb 100%)',
|
|
18
|
+
color: '#f8fafc',
|
|
19
|
+
fontSize: 42,
|
|
20
|
+
fontWeight: 800,
|
|
21
|
+
letterSpacing: '-0.06em',
|
|
22
|
+
}}
|
|
23
|
+
>
|
|
24
|
+
AC
|
|
25
|
+
</div>
|
|
26
|
+
),
|
|
27
|
+
links: [
|
|
28
|
+
{ label: 'Website', href: 'https://example.com', meta: 'averychen.dev' },
|
|
29
|
+
{ label: 'LinkedIn', href: 'https://www.linkedin.com', meta: 'Profile' },
|
|
30
|
+
{ label: 'Email', href: 'mailto:avery@example.com', meta: 'Direct contact' },
|
|
31
|
+
],
|
|
32
|
+
highlights: [
|
|
33
|
+
{ label: 'Talks', value: '48', detail: 'Keynotes, workshops, and internal launch reviews.' },
|
|
34
|
+
{ label: 'Audience', value: '120K', detail: 'Cross-platform following and community reach.' },
|
|
35
|
+
{ label: 'Specialty', value: 'Narrative systems', detail: 'Messaging, visual rhythm, and reusable deck patterns.' },
|
|
36
|
+
],
|
|
37
|
+
},
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
export default meta
|
|
41
|
+
|
|
42
|
+
export const Animated = {
|
|
43
|
+
parameters: {
|
|
44
|
+
scenePreviewMode: 'animation',
|
|
45
|
+
scenePreviewAspectRatio: '9:16',
|
|
46
|
+
},
|
|
47
|
+
}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { DefaultPersonIntroSlideHorizontal } from './default-person-intro-slide-Horizontal'
|
|
2
|
+
|
|
3
|
+
const meta = {
|
|
4
|
+
title: 'core/scene/slide/person-intro/DefaultPersonIntroSlideHorizontal',
|
|
5
|
+
component: DefaultPersonIntroSlideHorizontal,
|
|
6
|
+
args: {
|
|
7
|
+
name: 'Avery Chen',
|
|
8
|
+
role: 'Creative Director, Product Storytelling',
|
|
9
|
+
bio: 'Designs presentation systems that turn product updates, launches, and leadership narratives into concise visual stories.',
|
|
10
|
+
avatar: (
|
|
11
|
+
<div
|
|
12
|
+
style={{
|
|
13
|
+
width: '100%',
|
|
14
|
+
height: '100%',
|
|
15
|
+
display: 'grid',
|
|
16
|
+
placeItems: 'center',
|
|
17
|
+
background: 'linear-gradient(135deg, #38bdf8 0%, #2563eb 100%)',
|
|
18
|
+
color: '#f8fafc',
|
|
19
|
+
fontSize: 42,
|
|
20
|
+
fontWeight: 800,
|
|
21
|
+
letterSpacing: '-0.06em',
|
|
22
|
+
}}
|
|
23
|
+
>
|
|
24
|
+
AC
|
|
25
|
+
</div>
|
|
26
|
+
),
|
|
27
|
+
links: [
|
|
28
|
+
{ label: 'Website', href: 'https://example.com', meta: 'averychen.dev' },
|
|
29
|
+
{ label: 'LinkedIn', href: 'https://www.linkedin.com', meta: 'Profile' },
|
|
30
|
+
{ label: 'Email', href: 'mailto:avery@example.com', meta: 'Direct contact' },
|
|
31
|
+
],
|
|
32
|
+
highlights: [
|
|
33
|
+
{ label: 'Talks', value: '48', detail: 'Keynotes, workshops, and internal launch reviews.' },
|
|
34
|
+
{ label: 'Audience', value: '120K', detail: 'Cross-platform following and community reach.' },
|
|
35
|
+
{ label: 'Specialty', value: 'Narrative systems', detail: 'Messaging, visual rhythm, and reusable deck patterns.' },
|
|
36
|
+
],
|
|
37
|
+
},
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
export default meta
|
|
41
|
+
|
|
42
|
+
export const Default = {
|
|
43
|
+
parameters: {
|
|
44
|
+
scenePreviewAspectRatio: '9:16',
|
|
45
|
+
},
|
|
46
|
+
}
|
|
@@ -0,0 +1,302 @@
|
|
|
1
|
+
import { VideoComponent, defineScenePluginMetadata } from '@vibecuting/component-project-helper'
|
|
2
|
+
|
|
3
|
+
import { defineSceneComponent } from '../../../../plugins/scene-component'
|
|
4
|
+
import { SceneMotionLayer, useRemotionSceneRuntime } from '../../../../base'
|
|
5
|
+
import type { DefaultSceneProps } from '../../../../scenes/default-scene-props'
|
|
6
|
+
import { SlideFrame, getOverflowSafeSlideGridLayout, getSlideTypographyScale } from '../_shared'
|
|
7
|
+
import type { DefaultPersonIntroSlideProps, PersonIntroHighlight, PersonIntroLink } from './default-person-intro-slide'
|
|
8
|
+
import { personIntroPropsSchema } from './default-person-intro-slide'
|
|
9
|
+
|
|
10
|
+
export const componentMetadata = defineScenePluginMetadata({
|
|
11
|
+
resourceKind: 'scene',
|
|
12
|
+
name: 'DefaultPersonIntroSlideHorizontal',
|
|
13
|
+
description: 'Profile-first person introduction slide (Portrait 9:16 variant)',
|
|
14
|
+
sourceFile: 'src/core/scene/slide/person-intro/default-person-intro-slide-Horizontal.tsx',
|
|
15
|
+
pluginKey: 'core.slide.person-intro',
|
|
16
|
+
tags: ['scene', 'slide', 'person', 'profile', 'intro', 'horizontal'],
|
|
17
|
+
aspectRatio: '9:16',
|
|
18
|
+
sceneType: 'scene',
|
|
19
|
+
sceneFamily: 'slide',
|
|
20
|
+
rootLayout: 'absolute-fill',
|
|
21
|
+
propsTypeName: 'DefaultPersonIntroSlideProps',
|
|
22
|
+
})
|
|
23
|
+
|
|
24
|
+
function PersonIntroAvatarFallback({ name }: { name: string }) {
|
|
25
|
+
const initials = name
|
|
26
|
+
.split(/\s+/)
|
|
27
|
+
.filter(Boolean)
|
|
28
|
+
.slice(0, 2)
|
|
29
|
+
.map((part) => part[0] ?? '')
|
|
30
|
+
.join('')
|
|
31
|
+
.toUpperCase() || 'P'
|
|
32
|
+
|
|
33
|
+
return (
|
|
34
|
+
<div
|
|
35
|
+
style={{
|
|
36
|
+
width: '100%',
|
|
37
|
+
height: '100%',
|
|
38
|
+
display: 'grid',
|
|
39
|
+
placeItems: 'center',
|
|
40
|
+
background: 'linear-gradient(135deg, rgba(56,189,248,0.3), rgba(34,197,94,0.12))',
|
|
41
|
+
color: '#f8fafc',
|
|
42
|
+
fontSize: 'clamp(28px, 7vw, 48px)',
|
|
43
|
+
fontWeight: 800,
|
|
44
|
+
letterSpacing: '-0.06em',
|
|
45
|
+
}}
|
|
46
|
+
>
|
|
47
|
+
{initials}
|
|
48
|
+
</div>
|
|
49
|
+
)
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
function PersonIntroLinkChip({ link }: { link: PersonIntroLink }) {
|
|
53
|
+
const content = (
|
|
54
|
+
<div
|
|
55
|
+
style={{
|
|
56
|
+
width: '100%',
|
|
57
|
+
minWidth: 0,
|
|
58
|
+
padding: '12px 14px',
|
|
59
|
+
display: 'grid',
|
|
60
|
+
gap: 4,
|
|
61
|
+
border: '1px solid rgba(148,163,184,0.18)',
|
|
62
|
+
background: 'rgba(15,23,42,0.64)',
|
|
63
|
+
color: '#e2e8f0',
|
|
64
|
+
overflow: 'hidden',
|
|
65
|
+
}}
|
|
66
|
+
>
|
|
67
|
+
<div style={{ fontSize: 13, fontWeight: 700, lineHeight: 1.2, overflow: 'hidden', textOverflow: 'ellipsis', whiteSpace: 'nowrap' }}>{link.label}</div>
|
|
68
|
+
{link.meta ? (
|
|
69
|
+
<div style={{ fontSize: 11, lineHeight: 1.2, letterSpacing: '0.04em', textTransform: 'uppercase', color: 'rgba(148,163,184,0.92)', overflow: 'hidden', textOverflow: 'ellipsis', whiteSpace: 'nowrap' }}>
|
|
70
|
+
{link.meta}
|
|
71
|
+
</div>
|
|
72
|
+
) : null}
|
|
73
|
+
</div>
|
|
74
|
+
)
|
|
75
|
+
|
|
76
|
+
if (!link.href) {
|
|
77
|
+
return content
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
return (
|
|
81
|
+
<a href={link.href} target="_blank" rel="noreferrer noopener" style={{ display: 'block', textDecoration: 'none', minWidth: 0 }}>
|
|
82
|
+
{content}
|
|
83
|
+
</a>
|
|
84
|
+
)
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
function PersonIntroHighlightCard({ highlight }: { highlight: PersonIntroHighlight }) {
|
|
88
|
+
return (
|
|
89
|
+
<article
|
|
90
|
+
style={{
|
|
91
|
+
minHeight: 0,
|
|
92
|
+
padding: '14px',
|
|
93
|
+
display: 'grid',
|
|
94
|
+
gap: 6,
|
|
95
|
+
background: 'rgba(15,23,42,0.64)',
|
|
96
|
+
border: '1px solid rgba(148,163,184,0.16)',
|
|
97
|
+
color: '#e2e8f0',
|
|
98
|
+
overflow: 'hidden',
|
|
99
|
+
}}
|
|
100
|
+
>
|
|
101
|
+
<div style={{ fontSize: 11, letterSpacing: '0.18em', textTransform: 'uppercase', color: 'rgba(148,163,184,0.9)' }}>{highlight.label}</div>
|
|
102
|
+
{highlight.value ? <div style={{ fontSize: 'clamp(18px, 4.8vw, 28px)', fontWeight: 800, lineHeight: 1.05, letterSpacing: '-0.05em' }}>{highlight.value}</div> : null}
|
|
103
|
+
{highlight.detail ? (
|
|
104
|
+
<div
|
|
105
|
+
style={{
|
|
106
|
+
fontSize: 13,
|
|
107
|
+
lineHeight: 1.45,
|
|
108
|
+
color: 'rgba(226,232,240,0.78)',
|
|
109
|
+
display: '-webkit-box',
|
|
110
|
+
WebkitBoxOrient: 'vertical',
|
|
111
|
+
WebkitLineClamp: 3,
|
|
112
|
+
overflow: 'hidden',
|
|
113
|
+
}}
|
|
114
|
+
>
|
|
115
|
+
{highlight.detail}
|
|
116
|
+
</div>
|
|
117
|
+
) : null}
|
|
118
|
+
</article>
|
|
119
|
+
)
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
export const DefaultPersonIntroSlideHorizontal = VideoComponent(componentMetadata)(
|
|
123
|
+
defineSceneComponent({
|
|
124
|
+
family: 'slide',
|
|
125
|
+
propsSchema: personIntroPropsSchema,
|
|
126
|
+
component: function DefaultPersonIntroSlideHorizontal({
|
|
127
|
+
sceneId,
|
|
128
|
+
sceneName,
|
|
129
|
+
name,
|
|
130
|
+
role,
|
|
131
|
+
bio,
|
|
132
|
+
avatar,
|
|
133
|
+
links = [],
|
|
134
|
+
highlights = [],
|
|
135
|
+
}: DefaultPersonIntroSlideProps & DefaultSceneProps) {
|
|
136
|
+
const runtime = useRemotionSceneRuntime()
|
|
137
|
+
const scale = getSlideTypographyScale(runtime.height)
|
|
138
|
+
const linkGrid = getOverflowSafeSlideGridLayout(links.length || 1, 2, {
|
|
139
|
+
runtimeWidth: runtime.width,
|
|
140
|
+
reservedWidth: 48,
|
|
141
|
+
runtimeHeight: runtime.height,
|
|
142
|
+
reservedHeight: 440,
|
|
143
|
+
minCardWidth: 128,
|
|
144
|
+
minCardHeight: 48,
|
|
145
|
+
})
|
|
146
|
+
const highlightGrid = getOverflowSafeSlideGridLayout(highlights.length || 1, 2, {
|
|
147
|
+
runtimeWidth: runtime.width,
|
|
148
|
+
reservedWidth: 48,
|
|
149
|
+
runtimeHeight: runtime.height,
|
|
150
|
+
reservedHeight: 360,
|
|
151
|
+
minCardWidth: 140,
|
|
152
|
+
minCardHeight: 92,
|
|
153
|
+
})
|
|
154
|
+
const avatarSize = Math.max(104, Math.round(runtime.width * 0.34))
|
|
155
|
+
|
|
156
|
+
return (
|
|
157
|
+
<SlideFrame
|
|
158
|
+
pluginKey={componentMetadata.pluginKey}
|
|
159
|
+
sceneId={sceneId}
|
|
160
|
+
sceneName={sceneName ?? name}
|
|
161
|
+
background="linear-gradient(180deg, #020617 0%, #0f172a 48%, #111827 100%)"
|
|
162
|
+
>
|
|
163
|
+
<section
|
|
164
|
+
style={{
|
|
165
|
+
width: '100%',
|
|
166
|
+
height: '100%',
|
|
167
|
+
display: 'grid',
|
|
168
|
+
gridTemplateRows: 'auto auto auto auto',
|
|
169
|
+
gap: 14,
|
|
170
|
+
padding: '34px 20px',
|
|
171
|
+
color: '#e2e8f0',
|
|
172
|
+
alignContent: 'start',
|
|
173
|
+
}}
|
|
174
|
+
>
|
|
175
|
+
<SceneMotionLayer variant="panel">
|
|
176
|
+
<article
|
|
177
|
+
style={{
|
|
178
|
+
padding: 16,
|
|
179
|
+
display: 'grid',
|
|
180
|
+
gap: 14,
|
|
181
|
+
background: 'rgba(15,23,42,0.58)',
|
|
182
|
+
border: '1px solid rgba(148,163,184,0.18)',
|
|
183
|
+
overflow: 'hidden',
|
|
184
|
+
}}
|
|
185
|
+
>
|
|
186
|
+
<div style={{ display: 'grid', justifyItems: 'center', gap: 12, minWidth: 0 }}>
|
|
187
|
+
<div
|
|
188
|
+
style={{
|
|
189
|
+
width: avatarSize,
|
|
190
|
+
height: avatarSize,
|
|
191
|
+
overflow: 'hidden',
|
|
192
|
+
borderRadius: 0,
|
|
193
|
+
background: 'rgba(15,23,42,0.92)',
|
|
194
|
+
border: '1px solid rgba(148,163,184,0.24)',
|
|
195
|
+
}}
|
|
196
|
+
>
|
|
197
|
+
{avatar ?? <PersonIntroAvatarFallback name={name} />}
|
|
198
|
+
</div>
|
|
199
|
+
|
|
200
|
+
<div style={{ minWidth: 0, textAlign: 'center', display: 'grid', gap: 6 }}>
|
|
201
|
+
<div style={{ fontSize: scale.eyebrow, letterSpacing: '0.18em', textTransform: 'uppercase', color: 'rgba(148,163,184,0.9)' }}>Profile</div>
|
|
202
|
+
<h1 style={{ margin: 0, fontSize: Math.max(scale.title * 0.84, 34), lineHeight: 0.95, letterSpacing: '-0.06em' }}>{name}</h1>
|
|
203
|
+
{role ? (
|
|
204
|
+
<div
|
|
205
|
+
style={{
|
|
206
|
+
fontSize: scale.body * 0.92,
|
|
207
|
+
lineHeight: 1.35,
|
|
208
|
+
color: 'rgba(226,232,240,0.86)',
|
|
209
|
+
display: '-webkit-box',
|
|
210
|
+
WebkitBoxOrient: 'vertical',
|
|
211
|
+
WebkitLineClamp: 2,
|
|
212
|
+
overflow: 'hidden',
|
|
213
|
+
}}
|
|
214
|
+
>
|
|
215
|
+
{role}
|
|
216
|
+
</div>
|
|
217
|
+
) : null}
|
|
218
|
+
</div>
|
|
219
|
+
</div>
|
|
220
|
+
|
|
221
|
+
{bio ? (
|
|
222
|
+
<div
|
|
223
|
+
style={{
|
|
224
|
+
fontSize: scale.body * 0.86,
|
|
225
|
+
lineHeight: 1.5,
|
|
226
|
+
color: 'rgba(226,232,240,0.78)',
|
|
227
|
+
display: '-webkit-box',
|
|
228
|
+
WebkitBoxOrient: 'vertical',
|
|
229
|
+
WebkitLineClamp: 4,
|
|
230
|
+
overflow: 'hidden',
|
|
231
|
+
}}
|
|
232
|
+
>
|
|
233
|
+
{bio}
|
|
234
|
+
</div>
|
|
235
|
+
) : null}
|
|
236
|
+
</article>
|
|
237
|
+
</SceneMotionLayer>
|
|
238
|
+
|
|
239
|
+
{links.length ? (
|
|
240
|
+
<SceneMotionLayer variant="hero-copy" delayIndex={1}>
|
|
241
|
+
<article
|
|
242
|
+
style={{
|
|
243
|
+
padding: 14,
|
|
244
|
+
background: 'rgba(2,6,23,0.46)',
|
|
245
|
+
border: '1px solid rgba(148,163,184,0.16)',
|
|
246
|
+
display: 'grid',
|
|
247
|
+
gap: 12,
|
|
248
|
+
overflow: 'hidden',
|
|
249
|
+
}}
|
|
250
|
+
>
|
|
251
|
+
<div style={{ fontSize: scale.eyebrow, letterSpacing: '0.16em', textTransform: 'uppercase', color: 'rgba(148,163,184,0.84)' }}>Links</div>
|
|
252
|
+
<div
|
|
253
|
+
style={{
|
|
254
|
+
display: 'grid',
|
|
255
|
+
gridTemplateColumns: `repeat(${Math.max(1, linkGrid.columns)}, minmax(0, 1fr))`,
|
|
256
|
+
gap: 10,
|
|
257
|
+
}}
|
|
258
|
+
>
|
|
259
|
+
{links.slice(0, 5).map((link) => (
|
|
260
|
+
<PersonIntroLinkChip key={`${link.label}-${link.href ?? link.meta ?? ''}`} link={link} />
|
|
261
|
+
))}
|
|
262
|
+
</div>
|
|
263
|
+
</article>
|
|
264
|
+
</SceneMotionLayer>
|
|
265
|
+
) : null}
|
|
266
|
+
|
|
267
|
+
<SceneMotionLayer variant="card" delayIndex={2}>
|
|
268
|
+
<article
|
|
269
|
+
style={{
|
|
270
|
+
padding: 14,
|
|
271
|
+
background: 'rgba(2,6,23,0.46)',
|
|
272
|
+
border: '1px solid rgba(148,163,184,0.16)',
|
|
273
|
+
display: 'grid',
|
|
274
|
+
gap: 12,
|
|
275
|
+
overflow: 'hidden',
|
|
276
|
+
}}
|
|
277
|
+
>
|
|
278
|
+
<div style={{ display: 'flex', alignItems: 'baseline', justifyContent: 'space-between', gap: 12 }}>
|
|
279
|
+
<div style={{ fontSize: scale.eyebrow, letterSpacing: '0.16em', textTransform: 'uppercase', color: 'rgba(148,163,184,0.84)' }}>Highlights</div>
|
|
280
|
+
<div style={{ fontSize: scale.caption, color: 'rgba(148,163,184,0.72)' }}>{Math.min(highlights.length, 5)} items</div>
|
|
281
|
+
</div>
|
|
282
|
+
<div
|
|
283
|
+
style={{
|
|
284
|
+
display: 'grid',
|
|
285
|
+
gridTemplateColumns: `repeat(${Math.max(1, highlightGrid.columns)}, minmax(0, 1fr))`,
|
|
286
|
+
gap: highlightGrid.gap,
|
|
287
|
+
}}
|
|
288
|
+
>
|
|
289
|
+
{(highlights.length ? highlights : [{ label: 'Focus', value: 'Native portrait', detail: 'A vertical layout that gives the avatar, identity, and proof points room to breathe.' }]).slice(0, 5).map((highlight, index) => (
|
|
290
|
+
<SceneMotionLayer key={`${highlight.label}-${index}`} variant="card" delayIndex={index + 3}>
|
|
291
|
+
<PersonIntroHighlightCard highlight={highlight} />
|
|
292
|
+
</SceneMotionLayer>
|
|
293
|
+
))}
|
|
294
|
+
</div>
|
|
295
|
+
</article>
|
|
296
|
+
</SceneMotionLayer>
|
|
297
|
+
</section>
|
|
298
|
+
</SlideFrame>
|
|
299
|
+
)
|
|
300
|
+
},
|
|
301
|
+
}),
|
|
302
|
+
)
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { ComponentProps } from 'react'
|
|
2
|
+
|
|
3
|
+
import { VideoComponent, type ScenePluginMetadata } from '@vibecuting/component-project-helper'
|
|
4
|
+
|
|
5
|
+
import { DefaultPersonIntroSlide, componentMetadata as baseComponentMetadata } from './default-person-intro-slide'
|
|
6
|
+
|
|
7
|
+
export const componentMetadata: ScenePluginMetadata = {
|
|
8
|
+
...baseComponentMetadata,
|
|
9
|
+
name: 'DefaultPersonIntroSlideLandscape',
|
|
10
|
+
description: 'Profile-first person introduction slide (16:9 landscape variant)',
|
|
11
|
+
sourceFile: 'src/core/scene/slide/person-intro/default-person-intro-slide-Landscape.tsx',
|
|
12
|
+
aspectRatio: '16:9',
|
|
13
|
+
tags: Array.from(new Set([...(baseComponentMetadata.tags ?? []), 'landscape'])),
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
export const DefaultPersonIntroSlideLandscape = VideoComponent(componentMetadata)(function DefaultPersonIntroSlideLandscape(
|
|
17
|
+
props: ComponentProps<typeof DefaultPersonIntroSlide>,
|
|
18
|
+
) {
|
|
19
|
+
return <DefaultPersonIntroSlide {...props} />
|
|
20
|
+
})
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
import { DefaultPersonIntroSlide } from './default-person-intro-slide'
|
|
2
|
+
import { DefaultPersonIntroGroupSlide } from './default-person-intro-group-slide'
|
|
3
|
+
|
|
4
|
+
const meta = {
|
|
5
|
+
title: 'core/scene/slide/person-intro/DefaultPersonIntroSlide/Animated',
|
|
6
|
+
component: DefaultPersonIntroSlide,
|
|
7
|
+
args: {
|
|
8
|
+
name: 'Avery Chen',
|
|
9
|
+
role: 'Creative Director, Product Storytelling',
|
|
10
|
+
bio: 'Designs presentation systems that turn product updates, launches, and leadership narratives into concise visual stories.',
|
|
11
|
+
avatar: (
|
|
12
|
+
<div
|
|
13
|
+
style={{
|
|
14
|
+
width: '100%',
|
|
15
|
+
height: '100%',
|
|
16
|
+
display: 'grid',
|
|
17
|
+
placeItems: 'center',
|
|
18
|
+
background: 'linear-gradient(135deg, #38bdf8 0%, #2563eb 100%)',
|
|
19
|
+
color: '#f8fafc',
|
|
20
|
+
fontSize: 42,
|
|
21
|
+
fontWeight: 800,
|
|
22
|
+
letterSpacing: '-0.06em',
|
|
23
|
+
}}
|
|
24
|
+
>
|
|
25
|
+
AC
|
|
26
|
+
</div>
|
|
27
|
+
),
|
|
28
|
+
links: [
|
|
29
|
+
{ label: 'Website', href: 'https://example.com', meta: 'averychen.dev' },
|
|
30
|
+
{ label: 'LinkedIn', href: 'https://www.linkedin.com', meta: 'Profile' },
|
|
31
|
+
{ label: 'Email', href: 'mailto:avery@example.com', meta: 'Direct contact' },
|
|
32
|
+
],
|
|
33
|
+
highlights: [
|
|
34
|
+
{ label: 'Talks', value: '48', detail: 'Keynotes, workshops, and internal launch reviews.' },
|
|
35
|
+
{ label: 'Audience', value: '120K', detail: 'Cross-platform following and community reach.' },
|
|
36
|
+
{ label: 'Specialty', value: 'Narrative systems', detail: 'Messaging, visual rhythm, and reusable deck patterns.' },
|
|
37
|
+
],
|
|
38
|
+
},
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
export default meta
|
|
42
|
+
|
|
43
|
+
export const Animated = {
|
|
44
|
+
parameters: {
|
|
45
|
+
scenePreviewMode: 'animation',
|
|
46
|
+
scenePreviewAspectRatio: '16:9',
|
|
47
|
+
},
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
export const Duo = {
|
|
51
|
+
render: () => (
|
|
52
|
+
<DefaultPersonIntroGroupSlide
|
|
53
|
+
title="Two voices, one team"
|
|
54
|
+
subtitle="Animated two-person intro."
|
|
55
|
+
people={[
|
|
56
|
+
{ name: 'Avery Chen', role: 'Creative Director, Product Storytelling', bio: 'Shapes presentation systems and launch narratives.' },
|
|
57
|
+
{ name: 'Jordan Lee', role: 'Design Systems Lead', bio: 'Builds reusable patterns and production-ready slide structures.' },
|
|
58
|
+
]}
|
|
59
|
+
/>
|
|
60
|
+
),
|
|
61
|
+
parameters: {
|
|
62
|
+
scenePreviewMode: 'animation',
|
|
63
|
+
scenePreviewAspectRatio: '16:9',
|
|
64
|
+
},
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
export const Trio = {
|
|
68
|
+
render: () => (
|
|
69
|
+
<DefaultPersonIntroGroupSlide
|
|
70
|
+
title="Three people, one message"
|
|
71
|
+
subtitle="Animated three-person intro."
|
|
72
|
+
people={[
|
|
73
|
+
{ name: 'Avery Chen', role: 'Creative Director', bio: 'Narrative systems and launch content.' },
|
|
74
|
+
{ name: 'Jordan Lee', role: 'Design Systems Lead', bio: 'Design tokens and component patterns.' },
|
|
75
|
+
{ name: 'Maya Patel', role: 'Motion Director', bio: 'Motion language and polished transitions.' },
|
|
76
|
+
]}
|
|
77
|
+
/>
|
|
78
|
+
),
|
|
79
|
+
parameters: {
|
|
80
|
+
scenePreviewMode: 'animation',
|
|
81
|
+
scenePreviewAspectRatio: '16:9',
|
|
82
|
+
},
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
export const Quad = {
|
|
86
|
+
render: () => (
|
|
87
|
+
<DefaultPersonIntroGroupSlide
|
|
88
|
+
title="Four-person panel"
|
|
89
|
+
subtitle="Animated four-person intro."
|
|
90
|
+
people={[
|
|
91
|
+
{ name: 'Avery Chen', role: 'Creative Director', bio: 'Narrative systems and launch content.' },
|
|
92
|
+
{ name: 'Jordan Lee', role: 'Design Systems Lead', bio: 'Design tokens and component patterns.' },
|
|
93
|
+
{ name: 'Maya Patel', role: 'Motion Director', bio: 'Motion language and polished transitions.' },
|
|
94
|
+
{ name: 'Noah Kim', role: 'Product Manager', bio: 'Roadmaps, positioning, and stakeholder alignment.' },
|
|
95
|
+
]}
|
|
96
|
+
/>
|
|
97
|
+
),
|
|
98
|
+
parameters: {
|
|
99
|
+
scenePreviewMode: 'animation',
|
|
100
|
+
scenePreviewAspectRatio: '16:9',
|
|
101
|
+
},
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
export const DuoPortrait = {
|
|
105
|
+
render: Duo.render,
|
|
106
|
+
parameters: {
|
|
107
|
+
scenePreviewMode: 'animation',
|
|
108
|
+
scenePreviewAspectRatio: '9:16',
|
|
109
|
+
},
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
export const TrioPortrait = {
|
|
113
|
+
render: Trio.render,
|
|
114
|
+
parameters: {
|
|
115
|
+
scenePreviewMode: 'animation',
|
|
116
|
+
scenePreviewAspectRatio: '9:16',
|
|
117
|
+
},
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
export const QuadPortrait = {
|
|
121
|
+
render: Quad.render,
|
|
122
|
+
parameters: {
|
|
123
|
+
scenePreviewMode: 'animation',
|
|
124
|
+
scenePreviewAspectRatio: '9:16',
|
|
125
|
+
},
|
|
126
|
+
}
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
import { DefaultPersonIntroSlide } from './default-person-intro-slide'
|
|
2
|
+
import { DefaultPersonIntroGroupSlide } from './default-person-intro-group-slide'
|
|
3
|
+
|
|
4
|
+
const meta = {
|
|
5
|
+
title: 'core/scene/slide/person-intro/DefaultPersonIntroSlide',
|
|
6
|
+
component: DefaultPersonIntroSlide,
|
|
7
|
+
args: {
|
|
8
|
+
name: 'Avery Chen',
|
|
9
|
+
role: 'Creative Director, Product Storytelling',
|
|
10
|
+
bio: 'Designs presentation systems that turn product updates, launches, and leadership narratives into concise visual stories.',
|
|
11
|
+
avatar: (
|
|
12
|
+
<div
|
|
13
|
+
style={{
|
|
14
|
+
width: '100%',
|
|
15
|
+
height: '100%',
|
|
16
|
+
display: 'grid',
|
|
17
|
+
placeItems: 'center',
|
|
18
|
+
background: 'linear-gradient(135deg, #38bdf8 0%, #2563eb 100%)',
|
|
19
|
+
color: '#f8fafc',
|
|
20
|
+
fontSize: 42,
|
|
21
|
+
fontWeight: 800,
|
|
22
|
+
letterSpacing: '-0.06em',
|
|
23
|
+
}}
|
|
24
|
+
>
|
|
25
|
+
AC
|
|
26
|
+
</div>
|
|
27
|
+
),
|
|
28
|
+
links: [
|
|
29
|
+
{ label: 'Website', href: 'https://example.com', meta: 'averychen.dev' },
|
|
30
|
+
{ label: 'LinkedIn', href: 'https://www.linkedin.com', meta: 'Profile' },
|
|
31
|
+
{ label: 'Email', href: 'mailto:avery@example.com', meta: 'Direct contact' },
|
|
32
|
+
],
|
|
33
|
+
highlights: [
|
|
34
|
+
{ label: 'Talks', value: '48', detail: 'Keynotes, workshops, and internal launch reviews.' },
|
|
35
|
+
{ label: 'Audience', value: '120K', detail: 'Cross-platform following and community reach.' },
|
|
36
|
+
{ label: 'Specialty', value: 'Narrative systems', detail: 'Messaging, visual rhythm, and reusable deck patterns.' },
|
|
37
|
+
],
|
|
38
|
+
},
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
export default meta
|
|
42
|
+
|
|
43
|
+
export const Default = {
|
|
44
|
+
parameters: {
|
|
45
|
+
scenePreviewAspectRatio: '16:9',
|
|
46
|
+
},
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
export const Duo = {
|
|
50
|
+
render: () => (
|
|
51
|
+
<DefaultPersonIntroGroupSlide
|
|
52
|
+
title="Two voices, one team"
|
|
53
|
+
subtitle="Use this template for co-founders, hosts, collaborators, or paired introductions."
|
|
54
|
+
people={[
|
|
55
|
+
{ name: 'Avery Chen', role: 'Creative Director, Product Storytelling', bio: 'Shapes presentation systems and launch narratives.' },
|
|
56
|
+
{ name: 'Jordan Lee', role: 'Design Systems Lead', bio: 'Builds reusable patterns and production-ready slide structures.' },
|
|
57
|
+
]}
|
|
58
|
+
/>
|
|
59
|
+
),
|
|
60
|
+
parameters: {
|
|
61
|
+
scenePreviewAspectRatio: '16:9',
|
|
62
|
+
},
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
export const Trio = {
|
|
66
|
+
render: () => (
|
|
67
|
+
<DefaultPersonIntroGroupSlide
|
|
68
|
+
title="Three people, one message"
|
|
69
|
+
subtitle="A three-person intro card for small teams or panelist highlights."
|
|
70
|
+
people={[
|
|
71
|
+
{ name: 'Avery Chen', role: 'Creative Director', bio: 'Narrative systems and launch content.' },
|
|
72
|
+
{ name: 'Jordan Lee', role: 'Design Systems Lead', bio: 'Design tokens and component patterns.' },
|
|
73
|
+
{ name: 'Maya Patel', role: 'Motion Director', bio: 'Motion language and polished transitions.' },
|
|
74
|
+
]}
|
|
75
|
+
/>
|
|
76
|
+
),
|
|
77
|
+
parameters: {
|
|
78
|
+
scenePreviewAspectRatio: '16:9',
|
|
79
|
+
},
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
export const Quad = {
|
|
83
|
+
render: () => (
|
|
84
|
+
<DefaultPersonIntroGroupSlide
|
|
85
|
+
title="Four-person panel"
|
|
86
|
+
subtitle="A larger roster layout for leadership teams or interview panels."
|
|
87
|
+
people={[
|
|
88
|
+
{ name: 'Avery Chen', role: 'Creative Director', bio: 'Narrative systems and launch content.' },
|
|
89
|
+
{ name: 'Jordan Lee', role: 'Design Systems Lead', bio: 'Design tokens and component patterns.' },
|
|
90
|
+
{ name: 'Maya Patel', role: 'Motion Director', bio: 'Motion language and polished transitions.' },
|
|
91
|
+
{ name: 'Noah Kim', role: 'Product Manager', bio: 'Roadmaps, positioning, and stakeholder alignment.' },
|
|
92
|
+
]}
|
|
93
|
+
/>
|
|
94
|
+
),
|
|
95
|
+
parameters: {
|
|
96
|
+
scenePreviewAspectRatio: '16:9',
|
|
97
|
+
},
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
export const DuoPortrait = {
|
|
101
|
+
render: Duo.render,
|
|
102
|
+
parameters: {
|
|
103
|
+
scenePreviewAspectRatio: '9:16',
|
|
104
|
+
},
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
export const TrioPortrait = {
|
|
108
|
+
render: Trio.render,
|
|
109
|
+
parameters: {
|
|
110
|
+
scenePreviewAspectRatio: '9:16',
|
|
111
|
+
},
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
export const QuadPortrait = {
|
|
115
|
+
render: Quad.render,
|
|
116
|
+
parameters: {
|
|
117
|
+
scenePreviewAspectRatio: '9:16',
|
|
118
|
+
},
|
|
119
|
+
}
|