summaryrefslogtreecommitdiff
path: root/apps/web/src/components/editor/panels/timeline/timeline-toolbar.tsx
diff options
context:
space:
mode:
authorMaze <mazewinther@gmail.com>2026-04-05 13:15:58 +0200
committerMaze <mazewinther@gmail.com>2026-04-05 13:15:58 +0200
commit1bd9fac203f09736c1225bbbe19e5d7cc31c0b93 (patch)
treed5c65add056209043e627a53e47e6ebbf74e64c6 /apps/web/src/components/editor/panels/timeline/timeline-toolbar.tsx
parent69da5bee0c50f331ec59a510d0cf0d45779bab31 (diff)
downloadopencut-1bd9fac203f09736c1225bbbe19e5d7cc31c0b93.tar.gz
refactor: rewrite animation system to use bindings and scalar channels
Diffstat (limited to 'apps/web/src/components/editor/panels/timeline/timeline-toolbar.tsx')
-rw-r--r--apps/web/src/components/editor/panels/timeline/timeline-toolbar.tsx38
1 files changed, 21 insertions, 17 deletions
diff --git a/apps/web/src/components/editor/panels/timeline/timeline-toolbar.tsx b/apps/web/src/components/editor/panels/timeline/timeline-toolbar.tsx
index ecaf37e2..cb636d3c 100644
--- a/apps/web/src/components/editor/panels/timeline/timeline-toolbar.tsx
+++ b/apps/web/src/components/editor/panels/timeline/timeline-toolbar.tsx
@@ -50,6 +50,7 @@ import {
import { HugeiconsIcon } from "@hugeicons/react";
import { OcRippleIcon } from "@/components/icons";
+
export function TimelineToolbar({
zoomLevel,
minZoom,
@@ -115,10 +116,7 @@ function ToolbarLeftSection() {
})();
const canToggleSelectedSourceAudio =
!!selectedElement &&
- canToggleSourceAudio({
- element: selectedElement.element,
- mediaAsset: selectedMediaAsset,
- });
+ canToggleSourceAudio(selectedElement.element, selectedMediaAsset);
const sourceAudioLabel =
selectedElement?.element.type === "video"
? getSourceAudioActionLabel({
@@ -317,28 +315,34 @@ function ToolbarButton({
onClick,
disabled,
isActive,
+ buttonWrapper,
}: {
icon: React.ReactNode;
tooltip: string;
- onClick: ({ event }: { event: React.MouseEvent }) => void;
+ onClick?: ({ event }: { event: React.MouseEvent }) => void;
disabled?: boolean;
isActive?: boolean;
+ buttonWrapper?: (button: React.ReactElement) => React.ReactElement;
}) {
+ const button = (
+ <Button
+ variant={isActive ? "secondary" : "text"}
+ size="icon"
+ disabled={disabled}
+ onClick={onClick ? (event) => onClick({ event }) : undefined}
+ className={cn(
+ "rounded-sm",
+ disabled ? "cursor-not-allowed opacity-50" : "",
+ )}
+ >
+ {icon}
+ </Button>
+ );
+
return (
<Tooltip delayDuration={200}>
<TooltipTrigger asChild>
- <Button
- variant={isActive ? "secondary" : "text"}
- size="icon"
- disabled={disabled}
- onClick={(event) => onClick({ event })}
- className={cn(
- "rounded-sm",
- disabled ? "cursor-not-allowed opacity-50" : "",
- )}
- >
- {icon}
- </Button>
+ {buttonWrapper ? buttonWrapper(button) : button}
</TooltipTrigger>
<TooltipContent>{tooltip}</TooltipContent>
</Tooltip>