diff options
| author | Maze Winther <mazewinther@gmail.com> | 2025-07-12 12:48:31 +0200 |
|---|---|---|
| committer | Maze Winther <mazewinther@gmail.com> | 2025-07-12 12:48:31 +0200 |
| commit | 8545d95070890edfcf76b788ee023f9d510c302d (patch) | |
| tree | b3e1f9bf0bf30a8e748094b0a52c483befd7accf /apps/web/src/components/editor/properties-panel/index.tsx | |
| parent | 0726c27221c5b3aa9a8442b0cf89bd6acd8dfb5a (diff) | |
| download | opencut-8545d95070890edfcf76b788ee023f9d510c302d.tar.gz | |
refactor: add FPS and remove turbopack (yes, fuck you turbopack)
Diffstat (limited to 'apps/web/src/components/editor/properties-panel/index.tsx')
| -rw-r--r-- | apps/web/src/components/editor/properties-panel/index.tsx | 36 |
1 files changed, 34 insertions, 2 deletions
diff --git a/apps/web/src/components/editor/properties-panel/index.tsx b/apps/web/src/components/editor/properties-panel/index.tsx index 0e6cb8a8..9e28850f 100644 --- a/apps/web/src/components/editor/properties-panel/index.tsx +++ b/apps/web/src/components/editor/properties-panel/index.tsx @@ -9,13 +9,28 @@ import { useMediaStore } from "@/stores/media-store"; import { AudioProperties } from "./audio-properties"; import { MediaProperties } from "./media-properties"; import { TextProperties } from "./text-properties"; +import { + Select, + SelectContent, + SelectItem, + SelectTrigger, + SelectValue, +} from "../../ui/select"; +import { FPS_PRESETS } from "@/constants/timeline-constants"; export function PropertiesPanel() { - const { activeProject } = useProjectStore(); + const { activeProject, updateProjectFps } = useProjectStore(); const { getDisplayName, canvasSize } = useAspectRatio(); const { selectedElements, tracks } = useTimelineStore(); const { mediaItems } = useMediaStore(); + const handleFpsChange = (value: string) => { + const fps = parseFloat(value); + if (!isNaN(fps) && fps > 0) { + updateProjectFps(fps); + } + }; + const emptyView = ( <div className="space-y-4 p-5"> {/* Media Properties */} @@ -26,7 +41,24 @@ export function PropertiesPanel() { label="Resolution:" value={`${canvasSize.width} × ${canvasSize.height}`} /> - <PropertyItem label="Frame rate:" value="30.00fps" /> + <div className="flex justify-between items-center"> + <Label className="text-xs text-muted-foreground">Frame rate:</Label> + <Select + value={(activeProject?.fps || 30).toString()} + onValueChange={handleFpsChange} + > + <SelectTrigger className="w-32 h-6 text-xs"> + <SelectValue /> + </SelectTrigger> + <SelectContent> + {FPS_PRESETS.map(({ value, label }) => ( + <SelectItem key={value} value={value} className="text-xs"> + {label} + </SelectItem> + ))} + </SelectContent> + </Select> + </div> </div> </div> ); |
