Skip to content

Add click effects and fix auto zoom and FPS bitrate behavior#630

Merged
webadderall merged 6 commits into
mainfrom
feature/click-effects-auto-zoom-fps-fixes
May 30, 2026
Merged

Add click effects and fix auto zoom and FPS bitrate behavior#630
webadderall merged 6 commits into
mainfrom
feature/click-effects-auto-zoom-fps-fixes

Conversation

@webadderall
Copy link
Copy Markdown
Collaborator

@webadderall webadderall commented May 30, 2026

Summary

  • add built-in cursor click effects with advanced controls and the extension-style ripple graphic
  • keep generated click zooms as auto zooms while preserving the saved click focus before cursor-follow kicks in
  • make Ctrl/Cmd+A in the timeline target zooms only and scale MP4 export bitrate up with higher FPS

Validation

  • npx vitest run src/components/video-editor/timeline/hooks/utils/timelineSelectionUtils.test.ts src/lib/exporter/exportBitrate.test.ts
  • npx @biomejs/biome check src/components/video-editor/timeline/hooks/utils/timelineSelectionUtils.ts src/components/video-editor/timeline/hooks/utils/timelineSelectionUtils.test.ts src/components/video-editor/timeline/hooks/useTimelineSelection.ts src/components/video-editor/timeline/hooks/useTimelineEditorRuntime.ts src/components/video-editor/timeline/hooks/useTimelineKeyboardShortcuts.ts src/components/video-editor/timeline/components/viewport/TimelineCanvas.tsx src/lib/exporter/exportBitrate.ts src/lib/exporter/exportBitrate.test.ts
  • npx vitest run src/components/video-editor/videoPlayback/cursorFollowCamera.test.ts

Summary by CodeRabbit

  • New Features

    • Customizable cursor click effects (Off, Ripple, Spotlight, Echo) with color, size, opacity and duration — visible in preview, playback and exports.
  • UX Improvements

    • Enhanced preview frame clipping and sizing; timeline uses expanded layout by default; advanced controls surfaced for click-effect customization.
  • Behavior Changes

    • Timeline select-all now targets zoom regions; keyboard shortcuts and delete behavior adjusted accordingly.
  • Documentation

    • Added localized labels/descriptions for the new click-effect controls.

Review Change Stack

@webadderall
Copy link
Copy Markdown
Collaborator Author

@coderabbitai review

@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai Bot commented May 30, 2026

✅ Actions performed

Review triggered.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai Bot commented May 30, 2026

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro Plus

Run ID: 190b337d-8ae3-4fd8-a56f-8c30c1fa448b

📥 Commits

Reviewing files that changed from the base of the PR and between 5ef2b82 and f2c93c5.

📒 Files selected for processing (4)
  • src/components/video-editor/SettingsPanel.tsx
  • src/components/video-editor/VideoEditor.tsx
  • src/components/video-editor/videoPlayback/cursorRenderer.ts
  • src/i18n/locales/en/settings.json
✅ Files skipped from review due to trivial changes (1)
  • src/components/video-editor/SettingsPanel.tsx
🚧 Files skipped from review as they are similar to previous changes (2)
  • src/components/video-editor/videoPlayback/cursorRenderer.ts
  • src/components/video-editor/VideoEditor.tsx

📝 Walkthrough

Walkthrough

Adds end-to-end configurable cursor click effects (none/ripple/spotlight/echo) with color, scale, opacity, and duration controls across UI, playback rendering, persistence, and export. Also refactors timeline select-all to target zoom regions and updates related keyboard shortcuts and canvas selection behavior.

Changes

Cursor Click Effects Feature

Layer / File(s) Summary
Cursor click-effect types and normalization
src/components/video-editor/types.ts, src/components/video-editor/editorPreferences.ts, src/components/video-editor/projectPersistence.ts
Adds CursorClickEffectStyle, default constants, and normalization helpers; extends cursor visual, editor prefs, and project state with click-effect fields (style, color, scale, opacity, duration).
Settings panel UI
src/components/video-editor/SettingsPanel.tsx
Adds click-effect selector, SVG previews, preset/custom color picker, and advanced sliders (scale, opacity, duration); wires props/callbacks and reset behavior.
Editor state & persistence
src/components/video-editor/VideoEditor.tsx, src/components/video-editor/editorPreferences.ts, src/components/video-editor/projectPersistence.ts
Adds state hooks for click-effect settings, includes them in preset snapshots and persisted preferences/projects, and restores them when loading.
Playback & preview wiring
src/components/video-editor/VideoPlayback.tsx, src/components/video-editor/videoPlayback/layoutUtils.ts, src/components/video-editor/videoPlayback/cursorViewport.ts
Exposes click-effect props on VideoPlayback, syncs to refs for renderer updates, adds previewFrameRef with squircle clip-path and scaled border-radius helper.
Cursor rendering system
src/components/video-editor/videoPlayback/cursorRenderer.ts
Standardizes cursor texture creation, adds rasterization helper, extends CursorRenderConfig with click-effect params, implements Pixi/Canvas click-effect rendering (ripple/spotlight/echo), and adds PixiCursorOverlay setters.
Export pipeline integration
src/lib/exporter/gifExporter.ts, src/lib/exporter/modernVideoExporter.ts, src/lib/exporter/frameRenderer.ts, src/lib/exporter/modernFrameRenderer.ts
Extends exporter configs to accept click-effect settings, forwards them into FrameRenderer/Pixi overlay, adds buildGifFrameRendererConfig helper, and skips native static-layout when unsupported; includes tests.
Preview helpers & cursor follow
src/components/video-editor/VideoEditor.tsx, src/components/video-editor/videoPlayback/cursorFollowCamera.ts
Introduces getActivePlayback, refactors seek/skip helpers, and adjusts computeCursorFollowFocus initialization; adds related test.
i18n
src/i18n/locales/en/settings.json
Adds translation strings for click-effect UI labels and effect descriptions.

Timeline Selection Refactor

Layer / File(s) Summary
Selection target types & utils
src/components/video-editor/timeline/hooks/utils/timelineSelectionUtils.ts, tests
Removes "all" target, maps select-all to "zoom", updates tests accordingly.
Zoom-focused selection state
src/components/video-editor/timeline/hooks/useTimelineSelection.ts
Adds hasAnyZoomBlocks and activateSelectAllZooms, adjusts deleteSelectedZoom behavior and returned API.
Keyboard shortcuts
src/components/video-editor/timeline/hooks/useTimelineKeyboardShortcuts.ts
Revises hook params to use zoom-focused activation; changes Ctrl/Cmd+A to activate zoom select-all and removes bulk-delete branches.
Editor runtime wiring
src/components/video-editor/timeline/hooks/useTimelineEditorRuntime.ts
Passes zoom-focused selection flags/activator into keyboard shortcuts and removes timeline-level bulk-delete wiring.
Timeline canvas selection
src/components/video-editor/timeline/components/viewport/TimelineCanvas.tsx
Removes selectAllBlocksActive from row selection conditions so selection is based on explicit IDs only; minor JSX/style refactors.

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~60 minutes

Possibly related PRs

Suggested labels

Checked

Suggested reviewers

  • meiiie

Poem

🐰 In code I hop and softly peep,

Clicks now ripple, glow, and sweep.
Spotlights cast and echoes play,
Zoom selects in a smarter way.
The editor hums — hooray, hooray!

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 3.85% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Title check ✅ Passed The title clearly summarizes the main changes: adding click effects, fixing auto zoom behavior, and FPS bitrate behavior.
Description check ✅ Passed The PR description provides a concise summary section and explicit validation steps, covering the key changes without fully matching the template structure.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feature/click-effects-auto-zoom-fps-fixes

Warning

There were issues while running some tools. Please review the errors and either fix the tool's configuration or disable the tool if it's a critical failure.

🔧 ESLint

If the error stems from missing dependencies, add them to the package.json file. For unrecoverable errors (e.g., due to private dependencies), disable the tool in the CodeRabbit configuration.

ESLint skipped: no ESLint configuration detected in root package.json. To enable, add eslint to devDependencies.


Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 3

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (2)
src/components/video-editor/SettingsPanel.tsx (1)

1804-1825: ⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Reset should restore the click-effect color too.

resetCursorSection resets the new click-effect fields except cursorClickEffectColor, so a custom color survives Reset and leaves the cursor section in a partially customized state.

Suggested fix
 const resetCursorSection = () => {
 	onShowCursorChange?.(initialEditorPreferences.showCursor);
 	onLoopCursorChange?.(initialEditorPreferences.loopCursor);
 	onCursorStyleChange?.(initialEditorPreferences.cursorStyle);
 	onCursorSizeChange?.(initialEditorPreferences.cursorSize);
 	onCursorSmoothingChange?.(initialEditorPreferences.cursorSmoothing);
 	onCursorSpringStiffnessMultiplierChange?.(
 		initialEditorPreferences.cursorSpringStiffnessMultiplier,
 	);
 	onCursorSpringDampingMultiplierChange?.(
 		initialEditorPreferences.cursorSpringDampingMultiplier,
 	);
 	onCursorSpringMassMultiplierChange?.(initialEditorPreferences.cursorSpringMassMultiplier);
 	onCursorMotionBlurChange?.(initialEditorPreferences.cursorMotionBlur);
 	onCursorClickEffectChange?.(initialEditorPreferences.cursorClickEffect);
+	onCursorClickEffectColorChange?.(initialEditorPreferences.cursorClickEffectColor);
 	onCursorClickEffectScaleChange?.(initialEditorPreferences.cursorClickEffectScale);
 	onCursorClickEffectOpacityChange?.(initialEditorPreferences.cursorClickEffectOpacity);
 	onCursorClickEffectDurationMsChange?.(initialEditorPreferences.cursorClickEffectDurationMs);
 	onCursorClickBounceChange?.(initialEditorPreferences.cursorClickBounce);
 	onCursorClickBounceDurationChange?.(initialEditorPreferences.cursorClickBounceDuration);
 	onCursorSwayChange?.(initialEditorPreferences.cursorSway);
 };
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@src/components/video-editor/SettingsPanel.tsx` around lines 1804 - 1825,
resetCursorSection currently restores all cursor-related prefs except the
click-effect color, leaving cursorClickEffectColor unchanged; update
resetCursorSection to call onCursorClickEffectColor with
initialEditorPreferences.cursorClickEffectColor so the click-effect color is
reset alongside cursorClickEffect, cursorClickEffectScale,
cursorClickEffectOpacity, cursorClickEffectDurationMs, cursorClickBounce, and
cursorClickBounceDuration.
src/components/video-editor/videoPlayback/layoutUtils.ts (1)

213-220: ⚠️ Potential issue | 🟠 Major | ⚡ Quick win

Scale the mask radius from the masked video size, not the outer container.

layout.croppedDisplayWidth/layout.croppedDisplayHeight are the dimensions actually passed to drawSquircleOnGraphics. Using the outer container size here makes corners too round whenever padding or device-frame insets shrink the video area, so preview parity drifts on those layouts.

Suggested fix
 	drawSquircleOnGraphics(maskGraphics, {
 		x: layout.centerOffsetX,
 		y: layout.centerOffsetY,
 		width: layout.croppedDisplayWidth,
 		height: layout.croppedDisplayHeight,
-		radius: scalePreviewBorderRadius(width, height, borderRadius),
+		radius: scalePreviewBorderRadius(
+			layout.croppedDisplayWidth,
+			layout.croppedDisplayHeight,
+			borderRadius,
+		),
 	});
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@src/components/video-editor/videoPlayback/layoutUtils.ts` around lines 213 -
220, The mask radius is being scaled using the outer container size (width,
height) which makes the squircle corners too round when the actual video area is
smaller; update the call that draws the mask (maskGraphics and
drawSquircleOnGraphics) to compute the radius from the masked video dimensions
by passing layout.croppedDisplayWidth and layout.croppedDisplayHeight into
scalePreviewBorderRadius instead of the outer width/height so the radius is
scaled relative to layout.croppedDisplayWidth/layout.croppedDisplayHeight and
the mask corners match the rendered video area.
🧹 Nitpick comments (3)
src/components/video-editor/timeline/hooks/useTimelineKeyboardShortcuts.ts (1)

71-77: ⚡ Quick win

Add a shortcut-level regression test for zoom-only select-all.

This hook now owns the Ctrl/Cmd+A + Delete behavior, but the updated coverage in this cohort only exercises resolveDeleteSelectionTarget. A focused test here would catch regressions where select-all stops clearing non-zoom selections or Delete stops hitting the bulk-zoom path.

Also applies to: 93-119

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@src/components/video-editor/timeline/hooks/useTimelineKeyboardShortcuts.ts`
around lines 71 - 77, Add a shortcut-level regression test for the
useTimelineKeyboardShortcuts hook to verify that Ctrl/Cmd+A (matchesShortcut ->
key "a", ctrl true) triggers activateSelectAllZooms when only zooms exist and
that subsequent Delete hits the bulk-zoom path (resolveDeleteSelectionTarget)
and clears non-zoom selections; create a test that simulates keyboard events for
Cmd/Ctrl+A and Delete against a timeline with only zoom blocks (and another with
mixed selection) and assert that activateSelectAllZooms was called and that
resolveDeleteSelectionTarget handles deletion for the zoom-only case to prevent
regressions.
src/lib/exporter/modernVideoExporter.nativeStaticLayout.test.ts (1)

238-258: ⚡ Quick win

Add the "none" boundary case here too.

This only proves active effects block native static-layout. A paired assertion for cursorClickEffect: "none" staying eligible would catch truthy checks that accidentally disable the native path for the default style.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@src/lib/exporter/modernVideoExporter.nativeStaticLayout.test.ts` around lines
238 - 258, Add a paired assertion that when cursorClickEffect is "none" the
native static-layout path remains eligible: call createExporter with showCursor:
true, cursorClickEffect: "none" and the same cursorTelemetry, then call
exporter.getNativeStaticLayoutSkipReason(...) and assert it does NOT return
"unsupported-cursor-click-effect" (or more robustly assert the result is
falsy/null). This should sit alongside the existing test (or as a second it
block) referencing createExporter and getNativeStaticLayoutSkipReason to catch
regressions that use truthy checks for cursorClickEffect.
src/lib/exporter/gifExporter.ts (1)

137-200: ⚡ Quick win

Type buildGifFrameRendererConfig() against FrameRenderer.

This helper is now the single mapping point, so letting it return an inferred object makes future renderer-config drift easy to miss at compile time.

Suggested change
 export function buildGifFrameRendererConfig(
 	config: GifExporterConfig,
 	videoInfo: { width: number; height: number },
-) {
+): ConstructorParameters<typeof FrameRenderer>[0] {
 	return {
 		width: config.width,
 		height: config.height,
 		wallpaper: config.wallpaper,
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@src/lib/exporter/gifExporter.ts` around lines 137 - 200, The
buildGifFrameRendererConfig function currently returns an untyped object which
can drift from the renderer shape; change its signature to explicitly return the
FrameRenderer type (e.g., export function buildGifFrameRendererConfig(...):
FrameRenderer) and update imports to bring in the FrameRenderer type, then
ensure the returned object includes all required FrameRenderer properties (or
use a single narrowing/cast after verifying fields) so TS will catch future
mismatches in buildGifFrameRendererConfig.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@src/components/video-editor/VideoEditor.tsx`:
- Around line 1216-1221: The callbacks/effects that currently list
cursorClickBounce, cursorClickBounceDuration, cursorClickEffect,
cursorClickEffectScale, cursorClickEffectOpacity, and
cursorClickEffectDurationMs in their dependency arrays must also include
cursorClickEffectColor because those hooks/readers reference the color; update
each dependency array that contains those symbols (the three occurrences
matching the groups you highlighted) to add cursorClickEffectColor so thumbnail
capture, export, and preference-persistence effects re-run when the click-effect
color changes.

In `@src/components/video-editor/videoPlayback/cursorRenderer.ts`:
- Around line 1621-1632: The click-effect size is being multiplied by
bounceScale before calling drawClickEffectOnCanvas, which makes the canvas path
use a bounced size while the Pixi preview uses the unbounced size; change the
drawHeight calculation in cursorRenderer.ts to exclude bounceScale (i.e.,
compute drawHeight = h * getCursorStyleSizeMultiplier(config.style)) and pass
that unbounced drawHeight to drawClickEffectOnCanvas so both canvas and Pixi use
the same base size (leave bounceScale usage only where the visual bounce is
applied in rendering code, not in the click-effect sizing).

In `@src/i18n/locales/en/settings.json`:
- Around line 121-123: The locale defines a "burst" entry but the click-effect
enum uses "echo", so update the locales to match by renaming or adding the key
for the click-effect style: change the "burst" key to "echo" (or add an "echo"
object that mirrors "burst") and ensure its "label" and "description" fields
match the intended copy for the echo click-effect; verify the settings.json
locale block containing "burst" is updated so the click-effect enum value "echo"
resolves to the proper translated label/description.

---

Outside diff comments:
In `@src/components/video-editor/SettingsPanel.tsx`:
- Around line 1804-1825: resetCursorSection currently restores all
cursor-related prefs except the click-effect color, leaving
cursorClickEffectColor unchanged; update resetCursorSection to call
onCursorClickEffectColor with initialEditorPreferences.cursorClickEffectColor so
the click-effect color is reset alongside cursorClickEffect,
cursorClickEffectScale, cursorClickEffectOpacity, cursorClickEffectDurationMs,
cursorClickBounce, and cursorClickBounceDuration.

In `@src/components/video-editor/videoPlayback/layoutUtils.ts`:
- Around line 213-220: The mask radius is being scaled using the outer container
size (width, height) which makes the squircle corners too round when the actual
video area is smaller; update the call that draws the mask (maskGraphics and
drawSquircleOnGraphics) to compute the radius from the masked video dimensions
by passing layout.croppedDisplayWidth and layout.croppedDisplayHeight into
scalePreviewBorderRadius instead of the outer width/height so the radius is
scaled relative to layout.croppedDisplayWidth/layout.croppedDisplayHeight and
the mask corners match the rendered video area.

---

Nitpick comments:
In `@src/components/video-editor/timeline/hooks/useTimelineKeyboardShortcuts.ts`:
- Around line 71-77: Add a shortcut-level regression test for the
useTimelineKeyboardShortcuts hook to verify that Ctrl/Cmd+A (matchesShortcut ->
key "a", ctrl true) triggers activateSelectAllZooms when only zooms exist and
that subsequent Delete hits the bulk-zoom path (resolveDeleteSelectionTarget)
and clears non-zoom selections; create a test that simulates keyboard events for
Cmd/Ctrl+A and Delete against a timeline with only zoom blocks (and another with
mixed selection) and assert that activateSelectAllZooms was called and that
resolveDeleteSelectionTarget handles deletion for the zoom-only case to prevent
regressions.

In `@src/lib/exporter/gifExporter.ts`:
- Around line 137-200: The buildGifFrameRendererConfig function currently
returns an untyped object which can drift from the renderer shape; change its
signature to explicitly return the FrameRenderer type (e.g., export function
buildGifFrameRendererConfig(...): FrameRenderer) and update imports to bring in
the FrameRenderer type, then ensure the returned object includes all required
FrameRenderer properties (or use a single narrowing/cast after verifying fields)
so TS will catch future mismatches in buildGifFrameRendererConfig.

In `@src/lib/exporter/modernVideoExporter.nativeStaticLayout.test.ts`:
- Around line 238-258: Add a paired assertion that when cursorClickEffect is
"none" the native static-layout path remains eligible: call createExporter with
showCursor: true, cursorClickEffect: "none" and the same cursorTelemetry, then
call exporter.getNativeStaticLayoutSkipReason(...) and assert it does NOT return
"unsupported-cursor-click-effect" (or more robustly assert the result is
falsy/null). This should sit alongside the existing test (or as a second it
block) referencing createExporter and getNativeStaticLayoutSkipReason to catch
regressions that use truthy checks for cursorClickEffect.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro Plus

Run ID: a52848c8-d7c8-47e4-b549-d21450ba2644

📥 Commits

Reviewing files that changed from the base of the PR and between 78ea9b5 and 5ef2b82.

📒 Files selected for processing (26)
  • src/components/video-editor/SettingsPanel.tsx
  • src/components/video-editor/VideoEditor.tsx
  • src/components/video-editor/VideoPlayback.tsx
  • src/components/video-editor/editorPreferences.ts
  • src/components/video-editor/projectPersistence.ts
  • src/components/video-editor/timeline/components/viewport/TimelineCanvas.tsx
  • src/components/video-editor/timeline/hooks/useTimelineEditorRuntime.ts
  • src/components/video-editor/timeline/hooks/useTimelineKeyboardShortcuts.ts
  • src/components/video-editor/timeline/hooks/useTimelineSelection.ts
  • src/components/video-editor/timeline/hooks/utils/timelineSelectionUtils.test.ts
  • src/components/video-editor/timeline/hooks/utils/timelineSelectionUtils.ts
  • src/components/video-editor/types.ts
  • src/components/video-editor/videoPlayback/cursorFollowCamera.test.ts
  • src/components/video-editor/videoPlayback/cursorFollowCamera.ts
  • src/components/video-editor/videoPlayback/cursorRenderer.ts
  • src/components/video-editor/videoPlayback/cursorViewport.ts
  • src/components/video-editor/videoPlayback/layoutUtils.test.ts
  • src/components/video-editor/videoPlayback/layoutUtils.ts
  • src/i18n/locales/en/settings.json
  • src/lib/exporter/frameRenderer.ts
  • src/lib/exporter/gifExporter.test.ts
  • src/lib/exporter/gifExporter.ts
  • src/lib/exporter/modernFrameRenderer.ts
  • src/lib/exporter/modernVideoExporter.fallback.test.ts
  • src/lib/exporter/modernVideoExporter.nativeStaticLayout.test.ts
  • src/lib/exporter/modernVideoExporter.ts

Comment thread src/components/video-editor/VideoEditor.tsx
Comment thread src/components/video-editor/videoPlayback/cursorRenderer.ts Outdated
Comment thread src/i18n/locales/en/settings.json Outdated
@webadderall
Copy link
Copy Markdown
Collaborator Author

@coderabbitai review

@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai Bot commented May 30, 2026

✅ Actions performed

Review triggered.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@webadderall
Copy link
Copy Markdown
Collaborator Author

@copilot review

Copy link
Copy Markdown
Contributor

Copilot AI commented May 30, 2026

@copilot review

Reviewed the current PR state and there are no additional unresolved issues to address in code at this time.

@webadderall webadderall merged commit 3f1123f into main May 30, 2026
4 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants