@vibecuting/video-project-core 0.1.26 → 0.1.27
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/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/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/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/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,24 @@
|
|
|
1
|
+
import type { ComponentProps } from 'react'
|
|
2
|
+
|
|
3
|
+
import { VideoComponent, type ScenePluginMetadata } from '@vibecuting/component-project-helper'
|
|
4
|
+
|
|
5
|
+
import { DefaultCreditsRollOutroEpic, componentMetadata as baseComponentMetadata } from './default-credits-roll-outro'
|
|
6
|
+
|
|
7
|
+
export const componentMetadata: ScenePluginMetadata = {
|
|
8
|
+
...baseComponentMetadata,
|
|
9
|
+
resourceKind: 'scene',
|
|
10
|
+
pluginKey: 'core.outro.credits-roll-epic',
|
|
11
|
+
sceneFamily: 'custom',
|
|
12
|
+
rootLayout: 'absolute-fill',
|
|
13
|
+
name: 'DefaultCreditsRollOutroEpicLandscape',
|
|
14
|
+
description: 'Epic credits-roll outro bumper (Landscape 16:9 variant)',
|
|
15
|
+
sourceFile: 'src/core/outro/credits-roll-outro-epic/default-credits-roll-outro-Landscape.tsx',
|
|
16
|
+
aspectRatio: '16:9',
|
|
17
|
+
tags: Array.from(new Set([...(baseComponentMetadata.tags ?? []), 'landscape'])),
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
export const DefaultCreditsRollOutroEpicLandscape = VideoComponent(componentMetadata)(function DefaultCreditsRollOutroEpicLandscape(
|
|
21
|
+
props: ComponentProps<typeof DefaultCreditsRollOutroEpic>,
|
|
22
|
+
) {
|
|
23
|
+
return <DefaultCreditsRollOutroEpic {...props} />
|
|
24
|
+
})
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { DefaultCreditsRollOutroEpicHorizontal } from './default-credits-roll-outro-Horizontal'
|
|
2
|
+
import { DefaultCreditsRollOutroEpicLandscape } from './default-credits-roll-outro-Landscape'
|
|
3
|
+
|
|
4
|
+
const args = {
|
|
5
|
+
kicker: 'Grand Finale',
|
|
6
|
+
title: 'A Bigger End',
|
|
7
|
+
note: 'A more cinematic credits roll for prestige films and large-scale endings.',
|
|
8
|
+
creditLine: 'A Vibecuting Original',
|
|
9
|
+
footer: 'End Credits',
|
|
10
|
+
accent: '#1f2937',
|
|
11
|
+
secondaryAccent: '#475569',
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
const meta = {
|
|
15
|
+
title: 'core/outro/credits-roll-outro-epic/DefaultCreditsRollOutroEpic',
|
|
16
|
+
component: DefaultCreditsRollOutroEpicLandscape,
|
|
17
|
+
args,
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
export default meta
|
|
21
|
+
|
|
22
|
+
export const Landscape = { parameters: { scenePreviewAspectRatio: '16:9' } }
|
|
23
|
+
export const LandscapeAnimated = { parameters: { scenePreviewAspectRatio: '16:9', scenePreviewMode: 'animation' } }
|
|
24
|
+
export const Horizontal = {
|
|
25
|
+
render: (storyArgs: typeof args) => <DefaultCreditsRollOutroEpicHorizontal {...storyArgs} />,
|
|
26
|
+
parameters: { scenePreviewAspectRatio: '9:16' },
|
|
27
|
+
}
|
|
28
|
+
export const HorizontalAnimated = {
|
|
29
|
+
render: (storyArgs: typeof args) => <DefaultCreditsRollOutroEpicHorizontal {...storyArgs} />,
|
|
30
|
+
parameters: { scenePreviewAspectRatio: '9:16', scenePreviewMode: 'animation' },
|
|
31
|
+
}
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
import type { ReactNode } from 'react'
|
|
2
|
+
|
|
3
|
+
import { VideoComponent, defineComponentProjectComponentMetadata } from '@vibecuting/component-project-helper'
|
|
4
|
+
|
|
5
|
+
import { BaseRemotionScene, type BaseRemotionSceneProps, useRemotionSceneRuntime } from '../../../base'
|
|
6
|
+
import { useSceneMotion } from '../../../base'
|
|
7
|
+
import { getOutroBodyMaxWidth, getOutroLineClamp, resolveOutroLayout } from '../_shared/outro-layout'
|
|
8
|
+
|
|
9
|
+
export interface DefaultCreditsRollOutroEpicProps extends BaseRemotionSceneProps {
|
|
10
|
+
title: string
|
|
11
|
+
note?: string
|
|
12
|
+
kicker?: string
|
|
13
|
+
creditLine?: string
|
|
14
|
+
footer?: string
|
|
15
|
+
accent?: string
|
|
16
|
+
secondaryAccent?: string
|
|
17
|
+
textColor?: string
|
|
18
|
+
children?: ReactNode
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
export const componentMetadata = defineComponentProjectComponentMetadata({
|
|
22
|
+
name: 'DefaultCreditsRollOutroEpic',
|
|
23
|
+
description: 'Epic credits outro with a split score board and tiered roll card',
|
|
24
|
+
sourceFile: 'src/core/outro/credits-roll-outro-epic/default-credits-roll-outro.tsx',
|
|
25
|
+
aspectRatio: '16:9',
|
|
26
|
+
sceneType: 'outro',
|
|
27
|
+
tags: ['outro', 'credits', 'epic', 'orchestral', 'roll'],
|
|
28
|
+
propsTypeName: 'DefaultCreditsRollOutroEpicProps',
|
|
29
|
+
})
|
|
30
|
+
|
|
31
|
+
export function DefaultCreditsRollOutroEpic({
|
|
32
|
+
id,
|
|
33
|
+
name,
|
|
34
|
+
title,
|
|
35
|
+
note,
|
|
36
|
+
kicker,
|
|
37
|
+
creditLine,
|
|
38
|
+
footer,
|
|
39
|
+
accent,
|
|
40
|
+
secondaryAccent,
|
|
41
|
+
textColor,
|
|
42
|
+
}: DefaultCreditsRollOutroEpicProps) {
|
|
43
|
+
const runtime = useRemotionSceneRuntime()
|
|
44
|
+
const motion = useSceneMotion()
|
|
45
|
+
const resolvedLayout = resolveOutroLayout(undefined, runtime.width, runtime.height)
|
|
46
|
+
const portrait = resolvedLayout === 'horizontal'
|
|
47
|
+
|
|
48
|
+
return (
|
|
49
|
+
<BaseRemotionScene
|
|
50
|
+
id={id}
|
|
51
|
+
name={name}
|
|
52
|
+
style={{
|
|
53
|
+
background: portrait
|
|
54
|
+
? 'linear-gradient(180deg, #020617 0%, #111827 40%, #000000 100%)'
|
|
55
|
+
: `radial-gradient(circle at 50% 24%, ${accent ?? '#1f2937'} 0%, ${secondaryAccent ?? '#475569'} 38%, #020617 100%)`,
|
|
56
|
+
color: textColor ?? '#f8fafc',
|
|
57
|
+
display: 'grid',
|
|
58
|
+
placeItems: 'center',
|
|
59
|
+
padding: Math.round(runtime.height * 0.07),
|
|
60
|
+
}}
|
|
61
|
+
>
|
|
62
|
+
<section style={{ position: 'relative', zIndex: 1, width: '100%', height: '100%', display: 'grid', gridTemplateColumns: portrait ? '1fr' : 'minmax(0, 0.82fr) minmax(300px, 1.18fr)', gap: portrait ? 18 : 24, alignItems: 'stretch', minWidth: 0, minHeight: 0 }}>
|
|
63
|
+
<div style={{ display: 'grid', gap: 12, textAlign: portrait ? 'center' : 'left', minWidth: 0, alignContent: 'center' }}>
|
|
64
|
+
<p style={{ margin: 0, fontSize: Math.round(runtime.height * 0.017), letterSpacing: '0.34em', textTransform: 'uppercase', opacity: 0.64 }}>
|
|
65
|
+
{kicker ?? 'Epic Credits'}
|
|
66
|
+
</p>
|
|
67
|
+
<h1 style={{ margin: 0, fontSize: portrait ? Math.round(runtime.height * 0.078) : Math.round(runtime.height * 0.072), lineHeight: 0.92, letterSpacing: '-0.08em', textTransform: 'uppercase', transform: motion.isAnimation ? `translate3d(0, ${(1 - motion.progress) * 10}px, 0)` : 'none' }}>
|
|
68
|
+
{title}
|
|
69
|
+
</h1>
|
|
70
|
+
{note ? <p style={{ margin: 0, maxWidth: getOutroBodyMaxWidth(runtime.width, resolvedLayout, 0.58, 0.42, { min: 240, max: 680 }), fontSize: Math.round(runtime.height * 0.023), lineHeight: 1.56, opacity: 0.82, ...getOutroLineClamp(portrait ? 4 : 3) }}>{note}</p> : null}
|
|
71
|
+
<div style={{ display: 'flex', flexWrap: 'wrap', justifyContent: portrait ? 'center' : 'flex-start', gap: 10 }}>
|
|
72
|
+
{creditLine ? <span style={{ fontSize: Math.round(runtime.height * 0.015), letterSpacing: '0.2em', textTransform: 'uppercase', opacity: 0.72 }}>{creditLine}</span> : null}
|
|
73
|
+
{footer ? <span style={{ fontSize: Math.round(runtime.height * 0.015), letterSpacing: '0.2em', textTransform: 'uppercase', opacity: 0.52 }}>{footer}</span> : null}
|
|
74
|
+
</div>
|
|
75
|
+
</div>
|
|
76
|
+
|
|
77
|
+
<div style={{ display: 'grid', alignContent: 'center', minWidth: 0 }}>
|
|
78
|
+
<div style={{ border: '1px solid rgba(248,250,252,0.1)', background: 'linear-gradient(180deg, rgba(255,255,255,0.04), rgba(15,23,42,0.18))', padding: 18, display: 'grid', gap: 12, minHeight: portrait ? 260 : 320, overflow: 'hidden' }}>
|
|
79
|
+
<div style={{ fontSize: Math.round(runtime.height * 0.016), letterSpacing: '0.3em', textTransform: 'uppercase', opacity: 0.56 }}>Roll Credits</div>
|
|
80
|
+
<div style={{ display: 'grid', gridTemplateColumns: portrait ? '1fr' : 'minmax(0, 0.76fr) minmax(0, 1.24fr)', gap: 12, minWidth: 0 }}>
|
|
81
|
+
<div style={{ border: '1px solid rgba(248,250,252,0.1)', background: 'rgba(0,0,0,0.16)', padding: 14, display: 'grid', gap: 8 }}>
|
|
82
|
+
<span style={{ fontSize: Math.round(runtime.height * 0.014), letterSpacing: '0.2em', textTransform: 'uppercase', opacity: 0.56 }}>Score</span>
|
|
83
|
+
<span style={{ fontSize: Math.round(runtime.height * 0.024), fontWeight: 800, letterSpacing: '-0.05em' }}>Orchestral Suite</span>
|
|
84
|
+
<span style={{ fontSize: Math.round(runtime.height * 0.018), lineHeight: 1.5, opacity: 0.8 }}>A larger, tiered ending for prestige films and orchestral finales.</span>
|
|
85
|
+
</div>
|
|
86
|
+
<div style={{ display: 'grid', gap: 8 }}>
|
|
87
|
+
{[
|
|
88
|
+
['Theme', 'Grand Finale'],
|
|
89
|
+
['Studio', 'Vibecuting'],
|
|
90
|
+
['Format', 'Screened credits'],
|
|
91
|
+
].map(([label, value]) => (
|
|
92
|
+
<div key={label} style={{ display: 'flex', justifyContent: 'space-between', gap: 12, fontSize: Math.round(runtime.height * (portrait ? 0.018 : 0.02)), border: '1px solid rgba(248,250,252,0.08)', padding: '10px 12px', background: 'rgba(0,0,0,0.12)', minWidth: 0 }}>
|
|
93
|
+
<span style={{ opacity: 0.56, textTransform: 'uppercase', letterSpacing: '0.18em' }}>{label}</span>
|
|
94
|
+
<span style={getOutroLineClamp(1)}>{value}</span>
|
|
95
|
+
</div>
|
|
96
|
+
))}
|
|
97
|
+
</div>
|
|
98
|
+
</div>
|
|
99
|
+
</div>
|
|
100
|
+
</div>
|
|
101
|
+
</section>
|
|
102
|
+
</BaseRemotionScene>
|
|
103
|
+
)
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
VideoComponent(componentMetadata)(DefaultCreditsRollOutroEpic)
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export { DefaultCreditsRollOutroEpic } from './default-credits-roll-outro'
|
|
2
|
+
export { componentMetadata } from './default-credits-roll-outro'
|
|
3
|
+
export {
|
|
4
|
+
DefaultCreditsRollOutroEpicLandscape,
|
|
5
|
+
componentMetadata as DefaultCreditsRollOutroEpicLandscapeMetadata,
|
|
6
|
+
} from './default-credits-roll-outro-Landscape'
|
|
7
|
+
export {
|
|
8
|
+
DefaultCreditsRollOutroEpicHorizontal,
|
|
9
|
+
componentMetadata as DefaultCreditsRollOutroEpicHorizontalMetadata,
|
|
10
|
+
} from './default-credits-roll-outro-Horizontal'
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { DefaultCreditsRollOutroPremium as DefaultCreditsRollOutroPremiumHorizontal, componentMetadata } from './default-credits-roll-outro'
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { DefaultCreditsRollOutroPremium as DefaultCreditsRollOutroPremiumLandscape, componentMetadata } from './default-credits-roll-outro'
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { DefaultCreditsRollOutroPremiumHorizontal } from './default-credits-roll-outro-Horizontal'
|
|
2
|
+
import { DefaultCreditsRollOutroPremiumLandscape } from './default-credits-roll-outro-Landscape'
|
|
3
|
+
|
|
4
|
+
const args = {
|
|
5
|
+
kicker: 'Credits Roll',
|
|
6
|
+
title: 'A Film Worth Crediting',
|
|
7
|
+
note: 'A premium closing card with a stronger end-credit feel.',
|
|
8
|
+
creditLine: 'A Vibecuting Original',
|
|
9
|
+
footer: 'End Credits',
|
|
10
|
+
accent: '#111827',
|
|
11
|
+
secondaryAccent: '#475569',
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
const meta = {
|
|
15
|
+
title: 'core/outro/credits-roll-outro-premium/DefaultCreditsRollOutroPremium',
|
|
16
|
+
component: DefaultCreditsRollOutroPremiumLandscape,
|
|
17
|
+
args,
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
export default meta
|
|
21
|
+
export const Landscape = { parameters: { scenePreviewAspectRatio: '16:9' } }
|
|
22
|
+
export const LandscapeAnimated = { parameters: { scenePreviewAspectRatio: '16:9', scenePreviewMode: 'animation' } }
|
|
23
|
+
export const Horizontal = {
|
|
24
|
+
render: (storyArgs: typeof args) => <DefaultCreditsRollOutroPremiumHorizontal {...storyArgs} />,
|
|
25
|
+
parameters: { scenePreviewAspectRatio: '9:16' },
|
|
26
|
+
}
|
|
27
|
+
export const HorizontalAnimated = {
|
|
28
|
+
render: (storyArgs: typeof args) => <DefaultCreditsRollOutroPremiumHorizontal {...storyArgs} />,
|
|
29
|
+
parameters: { scenePreviewAspectRatio: '9:16', scenePreviewMode: 'animation' },
|
|
30
|
+
}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import type { ReactNode } from 'react'
|
|
2
|
+
|
|
3
|
+
import { VideoComponent, defineComponentProjectComponentMetadata } from '@vibecuting/component-project-helper'
|
|
4
|
+
|
|
5
|
+
import { BaseRemotionScene, type BaseRemotionSceneProps, useRemotionSceneRuntime } from '../../../base'
|
|
6
|
+
import { useSceneMotion } from '../../../base'
|
|
7
|
+
import { getOutroBodyMaxWidth, getOutroLineClamp, resolveOutroLayout } from '../_shared/outro-layout'
|
|
8
|
+
|
|
9
|
+
export interface DefaultCreditsRollOutroPremiumProps extends BaseRemotionSceneProps {
|
|
10
|
+
title: string
|
|
11
|
+
note?: string
|
|
12
|
+
kicker?: string
|
|
13
|
+
creditLine?: string
|
|
14
|
+
footer?: string
|
|
15
|
+
accent?: string
|
|
16
|
+
secondaryAccent?: string
|
|
17
|
+
textColor?: string
|
|
18
|
+
children?: ReactNode
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
export const componentMetadata = defineComponentProjectComponentMetadata({
|
|
22
|
+
name: 'DefaultCreditsRollOutroPremium',
|
|
23
|
+
description: 'Premium credits roll outro bumper',
|
|
24
|
+
sourceFile: 'src/core/outro/credits-roll-outro-premium/default-credits-roll-outro.tsx',
|
|
25
|
+
aspectRatio: '16:9',
|
|
26
|
+
sceneType: 'outro',
|
|
27
|
+
tags: ['outro', 'credits', 'premium', 'credits-roll', 'film'],
|
|
28
|
+
propsTypeName: 'DefaultCreditsRollOutroPremiumProps',
|
|
29
|
+
})
|
|
30
|
+
|
|
31
|
+
export function DefaultCreditsRollOutroPremium({
|
|
32
|
+
id,
|
|
33
|
+
name,
|
|
34
|
+
title,
|
|
35
|
+
note,
|
|
36
|
+
kicker,
|
|
37
|
+
creditLine,
|
|
38
|
+
footer,
|
|
39
|
+
accent,
|
|
40
|
+
secondaryAccent,
|
|
41
|
+
textColor,
|
|
42
|
+
}: DefaultCreditsRollOutroPremiumProps) {
|
|
43
|
+
const runtime = useRemotionSceneRuntime()
|
|
44
|
+
const motion = useSceneMotion()
|
|
45
|
+
const resolvedLayout = resolveOutroLayout(undefined, runtime.width, runtime.height)
|
|
46
|
+
const portrait = resolvedLayout === 'horizontal'
|
|
47
|
+
|
|
48
|
+
return (
|
|
49
|
+
<BaseRemotionScene
|
|
50
|
+
id={id}
|
|
51
|
+
name={name}
|
|
52
|
+
style={{
|
|
53
|
+
background: portrait
|
|
54
|
+
? 'linear-gradient(180deg, #0f172a 0%, #020617 44%, #000000 100%)'
|
|
55
|
+
: `radial-gradient(circle at 50% 24%, ${accent ?? '#111827'} 0%, ${secondaryAccent ?? '#475569'} 38%, #020617 100%)`,
|
|
56
|
+
color: textColor ?? '#f8fafc',
|
|
57
|
+
display: 'grid',
|
|
58
|
+
placeItems: 'center',
|
|
59
|
+
padding: Math.round(runtime.height * 0.07),
|
|
60
|
+
}}
|
|
61
|
+
>
|
|
62
|
+
<section style={{ width: '100%', height: '100%', display: 'grid', gridTemplateColumns: portrait ? '1fr' : '1fr minmax(260px, 0.8fr)', gap: portrait ? 18 : 24, alignItems: 'center', minWidth: 0, minHeight: 0 }}>
|
|
63
|
+
<div style={{ display: 'grid', gap: 12, textAlign: portrait ? 'center' : 'left', minWidth: 0 }}>
|
|
64
|
+
<p style={{ margin: 0, fontSize: Math.round(runtime.height * 0.017), letterSpacing: '0.34em', textTransform: 'uppercase', opacity: 0.64 }}>{kicker ?? 'Final Credits'}</p>
|
|
65
|
+
<h1 style={{ margin: 0, fontSize: portrait ? Math.round(runtime.height * 0.076) : Math.round(runtime.height * 0.07), lineHeight: 0.9, letterSpacing: '-0.08em', textTransform: 'uppercase', transform: motion.isAnimation ? `translate3d(0, ${(1 - motion.progress) * 10}px, 0)` : 'none' }}>
|
|
66
|
+
{title}
|
|
67
|
+
</h1>
|
|
68
|
+
{note ? <p style={{ margin: 0, maxWidth: getOutroBodyMaxWidth(runtime.width, resolvedLayout, 0.58, 0.42, { min: 240, max: 680 }), fontSize: Math.round(runtime.height * 0.023), lineHeight: 1.56, opacity: 0.82, ...getOutroLineClamp(portrait ? 4 : 3) }}>{note}</p> : null}
|
|
69
|
+
<div style={{ display: 'flex', flexWrap: 'wrap', justifyContent: portrait ? 'center' : 'flex-start', gap: 10 }}>
|
|
70
|
+
{creditLine ? <span style={{ fontSize: Math.round(runtime.height * 0.015), letterSpacing: '0.2em', textTransform: 'uppercase', opacity: 0.72 }}>{creditLine}</span> : null}
|
|
71
|
+
{footer ? <span style={{ fontSize: Math.round(runtime.height * 0.015), letterSpacing: '0.2em', textTransform: 'uppercase', opacity: 0.52 }}>{footer}</span> : null}
|
|
72
|
+
</div>
|
|
73
|
+
</div>
|
|
74
|
+
|
|
75
|
+
<div style={{ display: 'grid', alignContent: 'center', minWidth: 0 }}>
|
|
76
|
+
<div style={{ border: '1px solid rgba(248,250,252,0.1)', background: 'rgba(15,23,42,0.24)', padding: 18, display: 'grid', gap: 10, position: 'relative', overflow: 'hidden' }}>
|
|
77
|
+
<div style={{ position: 'absolute', inset: 0, background: 'linear-gradient(180deg, rgba(255,255,255,0.04) 0%, transparent 32%, rgba(0,0,0,0.18) 100%)', pointerEvents: 'none' }} />
|
|
78
|
+
<div style={{ fontSize: Math.round(runtime.height * 0.016), letterSpacing: '0.24em', textTransform: 'uppercase', opacity: 0.56 }}>Cast and Crew</div>
|
|
79
|
+
<div style={{ fontSize: Math.round(runtime.height * 0.03), fontWeight: 800, letterSpacing: '-0.06em' }}>Rolling the names in style</div>
|
|
80
|
+
<div style={{ fontSize: Math.round(runtime.height * 0.022), lineHeight: 1.5, opacity: 0.8 }}>A cleaner, premium end-credit block for prestige films and large-scale productions.</div>
|
|
81
|
+
</div>
|
|
82
|
+
</div>
|
|
83
|
+
</section>
|
|
84
|
+
</BaseRemotionScene>
|
|
85
|
+
)
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
VideoComponent(componentMetadata)(DefaultCreditsRollOutroPremium)
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export { DefaultCreditsRollOutroPremium } from './default-credits-roll-outro'
|
|
2
|
+
export { componentMetadata } from './default-credits-roll-outro'
|
|
3
|
+
export {
|
|
4
|
+
DefaultCreditsRollOutroPremiumLandscape,
|
|
5
|
+
componentMetadata as DefaultCreditsRollOutroPremiumLandscapeMetadata,
|
|
6
|
+
} from './default-credits-roll-outro-Landscape'
|
|
7
|
+
export {
|
|
8
|
+
DefaultCreditsRollOutroPremiumHorizontal,
|
|
9
|
+
componentMetadata as DefaultCreditsRollOutroPremiumHorizontalMetadata,
|
|
10
|
+
} from './default-credits-roll-outro-Horizontal'
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type { ComponentProps } from 'react'
|
|
2
|
+
|
|
3
|
+
import { VideoComponent, type ScenePluginMetadata } from '@vibecuting/component-project-helper'
|
|
4
|
+
|
|
5
|
+
import { DefaultCreditsRollOutroRoyal, componentMetadata as baseComponentMetadata } from './default-credits-roll-outro'
|
|
6
|
+
|
|
7
|
+
export const componentMetadata: ScenePluginMetadata = {
|
|
8
|
+
...baseComponentMetadata,
|
|
9
|
+
resourceKind: 'scene',
|
|
10
|
+
pluginKey: 'core.outro.credits-roll-royal',
|
|
11
|
+
sceneFamily: 'custom',
|
|
12
|
+
rootLayout: 'absolute-fill',
|
|
13
|
+
name: 'DefaultCreditsRollOutroRoyalHorizontal',
|
|
14
|
+
description: 'Royal credits-roll outro bumper (Portrait 9:16 variant)',
|
|
15
|
+
sourceFile: 'src/core/outro/credits-roll-outro-royal/default-credits-roll-outro-Horizontal.tsx',
|
|
16
|
+
aspectRatio: '9:16',
|
|
17
|
+
tags: Array.from(new Set([...(baseComponentMetadata.tags ?? []), 'horizontal'])),
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
export const DefaultCreditsRollOutroRoyalHorizontal = VideoComponent(componentMetadata)(function DefaultCreditsRollOutroRoyalHorizontal(
|
|
21
|
+
props: ComponentProps<typeof DefaultCreditsRollOutroRoyal>,
|
|
22
|
+
) {
|
|
23
|
+
return <DefaultCreditsRollOutroRoyal {...props} />
|
|
24
|
+
})
|
|
25
|
+
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type { ComponentProps } from 'react'
|
|
2
|
+
|
|
3
|
+
import { VideoComponent, type ScenePluginMetadata } from '@vibecuting/component-project-helper'
|
|
4
|
+
|
|
5
|
+
import { DefaultCreditsRollOutroRoyal, componentMetadata as baseComponentMetadata } from './default-credits-roll-outro'
|
|
6
|
+
|
|
7
|
+
export const componentMetadata: ScenePluginMetadata = {
|
|
8
|
+
...baseComponentMetadata,
|
|
9
|
+
resourceKind: 'scene',
|
|
10
|
+
pluginKey: 'core.outro.credits-roll-royal',
|
|
11
|
+
sceneFamily: 'custom',
|
|
12
|
+
rootLayout: 'absolute-fill',
|
|
13
|
+
name: 'DefaultCreditsRollOutroRoyalLandscape',
|
|
14
|
+
description: 'Royal credits-roll outro bumper (Landscape 16:9 variant)',
|
|
15
|
+
sourceFile: 'src/core/outro/credits-roll-outro-royal/default-credits-roll-outro-Landscape.tsx',
|
|
16
|
+
aspectRatio: '16:9',
|
|
17
|
+
tags: Array.from(new Set([...(baseComponentMetadata.tags ?? []), 'landscape'])),
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
export const DefaultCreditsRollOutroRoyalLandscape = VideoComponent(componentMetadata)(function DefaultCreditsRollOutroRoyalLandscape(
|
|
21
|
+
props: ComponentProps<typeof DefaultCreditsRollOutroRoyal>,
|
|
22
|
+
) {
|
|
23
|
+
return <DefaultCreditsRollOutroRoyal {...props} />
|
|
24
|
+
})
|
|
25
|
+
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { DefaultCreditsRollOutroRoyalHorizontal } from './default-credits-roll-outro-Horizontal'
|
|
2
|
+
import { DefaultCreditsRollOutroRoyalLandscape } from './default-credits-roll-outro-Landscape'
|
|
3
|
+
|
|
4
|
+
const args = {
|
|
5
|
+
kicker: 'Royal Credits',
|
|
6
|
+
title: 'A Noble Ending',
|
|
7
|
+
note: 'A richer gold-and-ink closing card for prestige and awards-season finales.',
|
|
8
|
+
creditLine: 'A Vibecuting Original',
|
|
9
|
+
footer: 'End Credits',
|
|
10
|
+
accent: '#111827',
|
|
11
|
+
secondaryAccent: '#b45309',
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
const meta = {
|
|
15
|
+
title: 'core/outro/credits-roll-outro-royal/DefaultCreditsRollOutroRoyalLandscape',
|
|
16
|
+
component: DefaultCreditsRollOutroRoyalLandscape,
|
|
17
|
+
args,
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
export default meta
|
|
21
|
+
|
|
22
|
+
export const Default = { parameters: { scenePreviewAspectRatio: '16:9' } }
|
|
23
|
+
export const Animated = { parameters: { scenePreviewAspectRatio: '16:9', scenePreviewMode: 'animation' } }
|
|
24
|
+
export const Horizontal = {
|
|
25
|
+
render: (storyArgs: typeof args) => <DefaultCreditsRollOutroRoyalHorizontal {...storyArgs} />,
|
|
26
|
+
parameters: { scenePreviewAspectRatio: '9:16' },
|
|
27
|
+
}
|
|
28
|
+
export const HorizontalAnimated = {
|
|
29
|
+
render: (storyArgs: typeof args) => <DefaultCreditsRollOutroRoyalHorizontal {...storyArgs} />,
|
|
30
|
+
parameters: { scenePreviewAspectRatio: '9:16', scenePreviewMode: 'animation' },
|
|
31
|
+
}
|
|
32
|
+
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
import type { ReactNode } from 'react'
|
|
2
|
+
|
|
3
|
+
import { VideoComponent, defineComponentProjectComponentMetadata } from '@vibecuting/component-project-helper'
|
|
4
|
+
|
|
5
|
+
import { BaseRemotionScene, type BaseRemotionSceneProps, useRemotionSceneRuntime } from '../../../base'
|
|
6
|
+
import { useSceneMotion } from '../../../base'
|
|
7
|
+
import type { OutroLayout } from '../_shared/outro-layout'
|
|
8
|
+
import { getOutroBodyMaxWidth, getOutroLineClamp, getOutroTypographyScale, resolveOutroLayout } from '../_shared/outro-layout'
|
|
9
|
+
|
|
10
|
+
export interface DefaultCreditsRollOutroRoyalProps extends BaseRemotionSceneProps {
|
|
11
|
+
title: string
|
|
12
|
+
note?: string
|
|
13
|
+
kicker?: string
|
|
14
|
+
creditLine?: string
|
|
15
|
+
footer?: string
|
|
16
|
+
accent?: string
|
|
17
|
+
secondaryAccent?: string
|
|
18
|
+
textColor?: string
|
|
19
|
+
layout?: OutroLayout
|
|
20
|
+
children?: ReactNode
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
export const componentMetadata = defineComponentProjectComponentMetadata({
|
|
24
|
+
name: 'DefaultCreditsRollOutroRoyal',
|
|
25
|
+
description: 'Royal credits outro with serif framing and a gilded end-title block',
|
|
26
|
+
sourceFile: 'src/core/outro/credits-roll-outro-royal/default-credits-roll-outro.tsx',
|
|
27
|
+
aspectRatio: '16:9',
|
|
28
|
+
sceneType: 'outro',
|
|
29
|
+
tags: ['outro', 'credits', 'royal', 'gold', 'roll'],
|
|
30
|
+
propsTypeName: 'DefaultCreditsRollOutroRoyalProps',
|
|
31
|
+
})
|
|
32
|
+
|
|
33
|
+
export function DefaultCreditsRollOutroRoyal({
|
|
34
|
+
id,
|
|
35
|
+
name,
|
|
36
|
+
title,
|
|
37
|
+
note,
|
|
38
|
+
kicker,
|
|
39
|
+
creditLine,
|
|
40
|
+
footer,
|
|
41
|
+
accent,
|
|
42
|
+
secondaryAccent,
|
|
43
|
+
textColor,
|
|
44
|
+
layout,
|
|
45
|
+
}: DefaultCreditsRollOutroRoyalProps) {
|
|
46
|
+
const runtime = useRemotionSceneRuntime()
|
|
47
|
+
const motion = useSceneMotion()
|
|
48
|
+
const resolvedLayout = resolveOutroLayout(layout, runtime.width, runtime.height)
|
|
49
|
+
const isHorizontal = resolvedLayout === 'horizontal'
|
|
50
|
+
const { titleFontSize, noteFontSize, kickerFontSize, footerFontSize } = getOutroTypographyScale(
|
|
51
|
+
runtime.height,
|
|
52
|
+
resolvedLayout,
|
|
53
|
+
)
|
|
54
|
+
|
|
55
|
+
return (
|
|
56
|
+
<BaseRemotionScene
|
|
57
|
+
id={id}
|
|
58
|
+
name={name}
|
|
59
|
+
style={{
|
|
60
|
+
background: isHorizontal
|
|
61
|
+
? `radial-gradient(circle at 50% 24%, ${secondaryAccent ?? '#b45309'} 0%, ${accent ?? '#111827'} 42%, #020617 100%)`
|
|
62
|
+
: 'linear-gradient(180deg, #020617 0%, #111827 44%, #000000 100%)',
|
|
63
|
+
color: textColor ?? '#fef3c7',
|
|
64
|
+
display: 'grid',
|
|
65
|
+
placeItems: 'center',
|
|
66
|
+
padding: Math.round(runtime.height * (isHorizontal ? 0.055 : 0.07)),
|
|
67
|
+
fontFamily: `Georgia, 'Times New Roman', serif`,
|
|
68
|
+
}}
|
|
69
|
+
>
|
|
70
|
+
<section style={{ width: '100%', height: '100%', display: 'grid', gridTemplateColumns: isHorizontal ? '1fr' : 'minmax(0, 0.82fr) minmax(300px, 1.18fr)', gap: isHorizontal ? 16 : 24, alignItems: 'stretch', minWidth: 0, minHeight: 0 }}>
|
|
71
|
+
<div style={{ display: 'grid', gap: 12, textAlign: isHorizontal ? 'center' : 'left', minWidth: 0, alignContent: 'center' }}>
|
|
72
|
+
<p style={{ margin: 0, fontSize: kickerFontSize, letterSpacing: '0.36em', textTransform: 'uppercase', opacity: 0.66 }}>{kicker ?? 'Royal Credits'}</p>
|
|
73
|
+
<h1 style={{ margin: 0, fontSize: titleFontSize, lineHeight: 0.92, letterSpacing: '-0.08em', textTransform: 'uppercase', transform: motion.isAnimation ? `translate3d(0, ${(1 - motion.progress) * 10}px, 0)` : 'none' }}>{title}</h1>
|
|
74
|
+
{note ? <p style={{ margin: 0, maxWidth: getOutroBodyMaxWidth(runtime.width, resolvedLayout, 0.56, 0.42, { min: 240, max: 720 }), fontSize: noteFontSize, lineHeight: 1.55, opacity: 0.84, ...getOutroLineClamp(isHorizontal ? 3 : 4) }}>{note}</p> : null}
|
|
75
|
+
<div style={{ display: 'flex', flexWrap: 'wrap', justifyContent: isHorizontal ? 'center' : 'flex-start', gap: 10 }}>
|
|
76
|
+
{creditLine ? <span style={{ fontSize: footerFontSize, letterSpacing: '0.2em', textTransform: 'uppercase', opacity: 0.72 }}>{creditLine}</span> : null}
|
|
77
|
+
{footer ? <span style={{ fontSize: footerFontSize, letterSpacing: '0.18em', textTransform: 'uppercase', opacity: 0.52 }}>{footer}</span> : null}
|
|
78
|
+
</div>
|
|
79
|
+
</div>
|
|
80
|
+
|
|
81
|
+
<div style={{ display: 'grid', alignContent: 'center', minWidth: 0 }}>
|
|
82
|
+
<div style={{ border: '1px solid rgba(254,243,199,0.18)', background: 'linear-gradient(180deg, rgba(245,158,11,0.1) 0%, rgba(17,24,39,0.22) 40%, rgba(2,6,23,0.94) 100%)', padding: 18, display: 'grid', gap: 12, minHeight: isHorizontal ? 220 : 280, position: 'relative', overflow: 'hidden' }}>
|
|
83
|
+
<div style={{ position: 'absolute', inset: 0, borderTop: '2px solid rgba(245,158,11,0.9)' }} />
|
|
84
|
+
<div style={{ display: 'grid', gridTemplateColumns: isHorizontal ? '1fr' : 'minmax(0, 0.72fr) minmax(0, 1.28fr)', gap: 12, minWidth: 0 }}>
|
|
85
|
+
<div style={{ border: '1px solid rgba(254,243,199,0.14)', padding: 14, background: 'rgba(0,0,0,0.16)', display: 'grid', gap: 8 }}>
|
|
86
|
+
<span style={{ fontSize: Math.round(runtime.height * 0.016), letterSpacing: '0.28em', textTransform: 'uppercase', opacity: 0.56 }}>End Titles</span>
|
|
87
|
+
<span style={{ fontSize: Math.round(runtime.height * 0.028), fontWeight: 800, letterSpacing: '-0.05em' }}>A noble ending</span>
|
|
88
|
+
<span style={{ fontSize: Math.round(runtime.height * 0.018), lineHeight: 1.55, opacity: 0.8, ...getOutroLineClamp(3) }}>Framed like a heritage plaque, not a generic credits panel.</span>
|
|
89
|
+
</div>
|
|
90
|
+
<div style={{ display: 'grid', gap: 8 }}>
|
|
91
|
+
{[
|
|
92
|
+
['Produced', 'Vibecuting Royal'],
|
|
93
|
+
['Presented', 'Prestige Edition'],
|
|
94
|
+
['Crafted', 'Final Cut Guild'],
|
|
95
|
+
].map(([label, value]) => (
|
|
96
|
+
<div key={label} style={{ display: 'flex', justifyContent: 'space-between', gap: 12, fontSize: Math.round(runtime.height * (isHorizontal ? 0.02 : 0.018)), border: '1px solid rgba(254,243,199,0.1)', padding: '10px 12px', background: 'rgba(0,0,0,0.14)', minWidth: 0 }}>
|
|
97
|
+
<span style={{ opacity: 0.56, textTransform: 'uppercase', letterSpacing: '0.18em' }}>{label}</span>
|
|
98
|
+
<span style={getOutroLineClamp(1)}>{value}</span>
|
|
99
|
+
</div>
|
|
100
|
+
))}
|
|
101
|
+
</div>
|
|
102
|
+
</div>
|
|
103
|
+
</div>
|
|
104
|
+
</div>
|
|
105
|
+
</section>
|
|
106
|
+
</BaseRemotionScene>
|
|
107
|
+
)
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
VideoComponent(componentMetadata)(DefaultCreditsRollOutroRoyal)
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export { DefaultCreditsRollOutroRoyal } from './default-credits-roll-outro'
|
|
2
|
+
export { componentMetadata } from './default-credits-roll-outro'
|
|
3
|
+
export {
|
|
4
|
+
DefaultCreditsRollOutroRoyalLandscape,
|
|
5
|
+
componentMetadata as DefaultCreditsRollOutroRoyalLandscapeMetadata,
|
|
6
|
+
} from './default-credits-roll-outro-Landscape'
|
|
7
|
+
export {
|
|
8
|
+
DefaultCreditsRollOutroRoyalHorizontal,
|
|
9
|
+
componentMetadata as DefaultCreditsRollOutroRoyalHorizontalMetadata,
|
|
10
|
+
} from './default-credits-roll-outro-Horizontal'
|
|
11
|
+
|
package/src/core/outro/default-blackout-outro-bumper/default-blackout-outro-bumper-Horizontal.tsx
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import {
|
|
2
|
+
VideoComponent,
|
|
3
|
+
defineComponentProjectComponentMetadata,
|
|
4
|
+
} from '@vibecuting/component-project-helper'
|
|
5
|
+
|
|
6
|
+
import { DefaultBlackoutOutroBumper, type DefaultBlackoutOutroBumperProps } from './default-blackout-outro-bumper'
|
|
7
|
+
|
|
8
|
+
export const componentMetadata = defineComponentProjectComponentMetadata({
|
|
9
|
+
name: 'DefaultBlackoutOutroBumperHorizontal',
|
|
10
|
+
description: 'Blackout outro bumper in a native 9:16 layout',
|
|
11
|
+
sourceFile: 'src/core/outro/default-blackout-outro-bumper/default-blackout-outro-bumper-Horizontal.tsx',
|
|
12
|
+
aspectRatio: '9:16',
|
|
13
|
+
sceneType: 'outro',
|
|
14
|
+
tags: ['outro', 'bumper', 'blackout', 'portrait'],
|
|
15
|
+
propsTypeName: 'DefaultBlackoutOutroBumperProps',
|
|
16
|
+
})
|
|
17
|
+
|
|
18
|
+
export const DefaultBlackoutOutroBumperHorizontal = VideoComponent(componentMetadata)(
|
|
19
|
+
function DefaultBlackoutOutroBumperHorizontal(props: DefaultBlackoutOutroBumperProps) {
|
|
20
|
+
return <DefaultBlackoutOutroBumper {...props} layout="horizontal" />
|
|
21
|
+
},
|
|
22
|
+
)
|
package/src/core/outro/default-blackout-outro-bumper/default-blackout-outro-bumper-Landscape.tsx
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import {
|
|
2
|
+
VideoComponent,
|
|
3
|
+
defineComponentProjectComponentMetadata,
|
|
4
|
+
} from '@vibecuting/component-project-helper'
|
|
5
|
+
|
|
6
|
+
import { DefaultBlackoutOutroBumper, type DefaultBlackoutOutroBumperProps } from './default-blackout-outro-bumper'
|
|
7
|
+
|
|
8
|
+
export const componentMetadata = defineComponentProjectComponentMetadata({
|
|
9
|
+
name: 'DefaultBlackoutOutroBumperLandscape',
|
|
10
|
+
description: 'Blackout outro bumper in a widescreen 16:9 layout',
|
|
11
|
+
sourceFile: 'src/core/outro/default-blackout-outro-bumper/default-blackout-outro-bumper-Landscape.tsx',
|
|
12
|
+
aspectRatio: '16:9',
|
|
13
|
+
sceneType: 'outro',
|
|
14
|
+
tags: ['outro', 'bumper', 'blackout', 'landscape'],
|
|
15
|
+
propsTypeName: 'DefaultBlackoutOutroBumperProps',
|
|
16
|
+
})
|
|
17
|
+
|
|
18
|
+
export const DefaultBlackoutOutroBumperLandscape = VideoComponent(componentMetadata)(
|
|
19
|
+
function DefaultBlackoutOutroBumperLandscape(props: DefaultBlackoutOutroBumperProps) {
|
|
20
|
+
return <DefaultBlackoutOutroBumper {...props} layout="landscape" />
|
|
21
|
+
},
|
|
22
|
+
)
|
package/src/core/outro/default-blackout-outro-bumper/default-blackout-outro-bumper.stories.tsx
ADDED
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { DefaultBlackoutOutroBumperHorizontal } from './default-blackout-outro-bumper-Horizontal'
|
|
2
|
+
import { DefaultBlackoutOutroBumperLandscape } from './default-blackout-outro-bumper-Landscape'
|
|
3
|
+
|
|
4
|
+
const args = {
|
|
5
|
+
kicker: 'Fade Out',
|
|
6
|
+
title: 'The End',
|
|
7
|
+
note: 'A near-empty blackout ending with a single line and faint signal.',
|
|
8
|
+
creditLine: 'Closing Sequence',
|
|
9
|
+
footer: 'End Credits',
|
|
10
|
+
accent: '#020617',
|
|
11
|
+
secondaryAccent: '#374151',
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
const meta = {
|
|
15
|
+
title: 'core/outro/default-blackout-outro-bumper/DefaultBlackoutOutroBumperLandscape',
|
|
16
|
+
component: DefaultBlackoutOutroBumperLandscape,
|
|
17
|
+
args,
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
export default meta
|
|
21
|
+
|
|
22
|
+
export const Landscape = {
|
|
23
|
+
parameters: {
|
|
24
|
+
scenePreviewAspectRatio: '16:9',
|
|
25
|
+
},
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
export const LandscapeAnimated = {
|
|
29
|
+
parameters: {
|
|
30
|
+
scenePreviewAspectRatio: '16:9',
|
|
31
|
+
scenePreviewMode: 'animation',
|
|
32
|
+
},
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
export const Horizontal = {
|
|
36
|
+
render: (storyArgs: typeof args) => <DefaultBlackoutOutroBumperHorizontal {...storyArgs} />,
|
|
37
|
+
parameters: {
|
|
38
|
+
scenePreviewAspectRatio: '9:16',
|
|
39
|
+
},
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
export const HorizontalAnimated = {
|
|
43
|
+
render: (storyArgs: typeof args) => <DefaultBlackoutOutroBumperHorizontal {...storyArgs} />,
|
|
44
|
+
parameters: {
|
|
45
|
+
scenePreviewAspectRatio: '9:16',
|
|
46
|
+
scenePreviewMode: 'animation',
|
|
47
|
+
},
|
|
48
|
+
}
|