+ {recording ? (
+
+ ) : (
+
+ )}
+
+ );
+}
+
+interface GestureRecordPanelButtonProps {
+ recordingState?: GestureRecordingState;
+ recordingDuration?: number;
+ onToggleRecording: () => void;
+}
+
+export function GestureRecordPanelButton({
+ recordingState,
+ recordingDuration,
+ onToggleRecording,
+}: GestureRecordPanelButtonProps) {
+ const recording = recordingState === "recording";
+
+ return (
+
+
+
+ );
+}
+
+interface GestureRecordBadgeProps {
+ rect: { left: number; top: number; width: number; height: number };
+ recordingState?: GestureRecordingState;
+ onToggleRecording: () => void;
+}
+
+export function GestureRecordBadge({
+ rect,
+ recordingState,
+ onToggleRecording,
+}: GestureRecordBadgeProps) {
+ const recording = recordingState === "recording";
+ const label = recording ? "Stop gesture recording (R)" : "Record gesture (R)";
+
+ return (
+
+ );
+}
diff --git a/packages/studio/src/components/editor/PropertyPanel.tsx b/packages/studio/src/components/editor/PropertyPanel.tsx
index 80f22e6ee..478df5952 100644
--- a/packages/studio/src/components/editor/PropertyPanel.tsx
+++ b/packages/studio/src/components/editor/PropertyPanel.tsx
@@ -21,6 +21,7 @@ import { STUDIO_GSAP_PANEL_ENABLED, STUDIO_KEYFRAMES_ENABLED } from "./manualEdi
import { usePlayerStore, liveTime } from "../../player";
import { TimingSection } from "./propertyPanelTimingSection";
import { type PropertyPanelProps } from "./propertyPanelHelpers";
+import { GestureRecordPanelButton } from "./GestureRecordControl";
// Re-export helpers that external consumers import from this module
export {
@@ -354,6 +355,14 @@ export const PropertyPanel = memo(function PropertyPanel({
+ {onToggleRecording && (
+
+ )}
+
)}
- {onToggleRecording && (
-
-
-
- )}
{showEditableSections && (