Skip to content

feat(extensions): add willytop8.click-ripple cursor-effect example#411

Closed
willytop8 wants to merge 1 commit intowebadderallorg:mainfrom
willytop8:feature/click-ripple-extension-example
Closed

feat(extensions): add willytop8.click-ripple cursor-effect example#411
willytop8 wants to merge 1 commit intowebadderallorg:mainfrom
willytop8:feature/click-ripple-extension-example

Conversation

@willytop8
Copy link
Copy Markdown

@willytop8 willytop8 commented May 4, 2026

Description

Adds a packaged example extension under extension-examples/willytop8.click-ripple/ demonstrating registerCursorEffect() with three switchable styles (ripple, pulse, burst) and a settings panel nested under the existing Cursor section.

Motivation

EXTENSIONS.md references extension-examples/ and currently lists one bundle (webadderall.more-wallpapers). A cursor-effect example gives extension authors a working reference for the cursor APIs (registerCursorEffect, CursorEffectContext, settings panel nesting via parentSection) which are not covered by the existing wallpaper-bundle example.

The bundle is also separately published as a standalone repo at https://github.com/willytop8/recordly-click-ripple.

Type of Change

  • New Feature
  • Documentation Update (one-line entry in EXTENSIONS.md ## Examples)

Screenshots

Settings panel nested under Cursor:

Settings panel

Ripple style:

Ripple

Pulse style:

Pulse

Burst style:

Burst

Testing Guide

  1. Pull this branch.
  2. From the repo root: cp -r extension-examples/willytop8.click-ripple ~/Library/Application\ Support/Recordly/extensions/ (macOS). The directory is also accessible via Extensions → Open Directory in the app.
  3. Build and launch Recordly (npm run dev).
  4. Open the Extensions panel and confirm Click Ripple is listed with status active and no manifest validation errors.
  5. Make a short test recording with several clicks. Open it in the editor.
  6. Confirm clicks render visible animated effects at the click locations.
  7. Open Settings → Cursor → Click Effects. Confirm:
    • Toggle "Enable click effects" off/on — effects disappear and reappear.
    • Switch between Ripple, Pulse, Burst — each renders correctly.
    • Drag color, size, duration, and thickness sliders — all update live.
    • Toggle "Distinct right-click style" — right-clicks render with dashes when on.
  8. Export to MP4. Confirm effects appear in the exported file.

Implementation Notes

  • Permissions declared: ["cursor", "ui"] only.
  • No core code touched. Pure addition under extension-examples/.
  • TypeScript source in src/index.ts, bundled to dist/index.js via esbuild. Both committed (bundle is what the manifest's main points to).
  • Effect scales relative to videoLayout.maskRect.width rather than canvas width so it renders consistently across export resolutions and padding settings.
  • License: MIT (separable from Recordly's AGPL — extensions are independent bundles).

Checklist

  • Self-review complete.
  • Screenshots provided.
  • No core files modified — pure extension example addition.

🤖 Generated with Claude Code

Summary by CodeRabbit

  • New Features

    • Added a "Click Ripple" extension example providing three animated cursor click effects (ripple, pulse, burst) with user-configurable style, color, size, duration, thickness, and distinct right-click styling.
  • Documentation

    • Added a comprehensive README covering installation options, configuration UI guidance, full settings reference, build/run instructions, permissions, and credits.
  • Chores

    • Added packaging/build tooling, TypeScript config and declarations, license, and ignore rules to support development and distribution.

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented May 4, 2026

⚠️ This pull request has been flagged by Anti-Slop.
Our automated checks detected patterns commonly associated with
low-quality or automated/AI submissions (failure count reached).
No automatic closure — a maintainer will review it.
If this is legitimate work, please add more context, link issues, or ping us.

@github-actions github-actions Bot added the Slop label May 4, 2026
@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai Bot commented May 4, 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: 95e4d999-5641-4aba-bb42-e625804e1b3a

📥 Commits

Reviewing files that changed from the base of the PR and between 7712278 and 5de8d44.

⛔ Files ignored due to path filters (6)
  • extension-examples/willytop8.click-ripple/dist/index.js is excluded by !**/dist/**
  • extension-examples/willytop8.click-ripple/package-lock.json is excluded by !**/package-lock.json
  • extension-examples/willytop8.click-ripple/screenshots/burst-style.png is excluded by !**/*.png
  • extension-examples/willytop8.click-ripple/screenshots/pulse-style.png is excluded by !**/*.png
  • extension-examples/willytop8.click-ripple/screenshots/ripple-style.png is excluded by !**/*.png
  • extension-examples/willytop8.click-ripple/screenshots/settings-panel.png is excluded by !**/*.png
📒 Files selected for processing (10)
  • EXTENSIONS.md
  • extension-examples/willytop8.click-ripple/.gitignore
  • extension-examples/willytop8.click-ripple/LICENSE
  • extension-examples/willytop8.click-ripple/README.md
  • extension-examples/willytop8.click-ripple/build.mjs
  • extension-examples/willytop8.click-ripple/package.json
  • extension-examples/willytop8.click-ripple/recordly-extension.json
  • extension-examples/willytop8.click-ripple/src/index.ts
  • extension-examples/willytop8.click-ripple/src/recordly-types.d.ts
  • extension-examples/willytop8.click-ripple/tsconfig.json
✅ Files skipped from review due to trivial changes (7)
  • extension-examples/willytop8.click-ripple/LICENSE
  • extension-examples/willytop8.click-ripple/recordly-extension.json
  • extension-examples/willytop8.click-ripple/package.json
  • extension-examples/willytop8.click-ripple/tsconfig.json
  • EXTENSIONS.md
  • extension-examples/willytop8.click-ripple/.gitignore
  • extension-examples/willytop8.click-ripple/src/recordly-types.d.ts
🚧 Files skipped from review as they are similar to previous changes (3)
  • extension-examples/willytop8.click-ripple/build.mjs
  • extension-examples/willytop8.click-ripple/README.md
  • extension-examples/willytop8.click-ripple/src/index.ts

📝 Walkthrough

Walkthrough

Adds a new "Click Ripple" extension example: documentation, manifest, build tooling, TypeScript types, source implementation that registers a cursor-effect rendering ripple/pulse/burst animations on clicks, and supporting project files (README, LICENSE, package, tsconfig, .gitignore).

Changes

Click Ripple Extension Example

Layer / File(s) Summary
Documentation
EXTENSIONS.md, extension-examples/willytop8.click-ripple/README.md, extension-examples/willytop8.click-ripple/LICENSE, extension-examples/willytop8.click-ripple/.gitignore
Adds example listing in EXTENSIONS.md, full README with install/build/settings/permissions, MIT license, and .gitignore for dev artifacts.
Manifest / Packaging
extension-examples/willytop8.click-ripple/recordly-extension.json, extension-examples/willytop8.click-ripple/package.json
New extension manifest declaring id, version, engine requirement, icon/screenshots, entrypoint (dist/index.js), and permissions; package.json with build/watch scripts and devDependencies.
Build Tooling
extension-examples/willytop8.click-ripple/build.mjs
esbuild-based build script that bundles src/index.tsdist/index.js, supports --watch, and can deploy built output to the user Recordly extensions path if present.
Type Declarations
extension-examples/willytop8.click-ripple/src/recordly-types.d.ts
Introduces Recordly Extension API typings: contributed assets, RenderHook/CursorEffect contexts and function types, events, settings UI types, RecordlyExtensionAPI interface, and FrameInstance.
Extension Implementation
extension-examples/willytop8.click-ripple/src/index.ts
Implements activate(api)/deactivate(), registers a "Click Effects" settings panel and a cursor effect that reads settings and draws three animation styles (ripple, pulse, burst) using scene-aware coordinates, duration-based lifecycle, and optional distinct right-click styling.
TypeScript Config
extension-examples/willytop8.click-ripple/tsconfig.json
Adds project tsconfig targeting ES2022, ESNext modules, strict mode, bundler resolution, and includes src/**/*.

Sequence Diagram

sequenceDiagram
    actor User
    participant Recordly as Recordly Core
    participant Ext as ClickRipple Extension
    participant Canvas as Render Canvas

    User->>Recordly: click (position + button)
    Recordly->>Ext: invoke registered cursor effect with context
    Ext->>Ext: read settings, compute elapsed/progress/style/coords
    Ext->>Canvas: draw frame (ripple / pulse / burst)
    Ext-->>Recordly: return true/false (continue or stop)
    Recordly->>Canvas: composite frame into preview/export
Loading

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~25 minutes

Possibly related PRs

Suggested labels

Checked

Poem

🐰 I hop and trace each click with cheer,

Ripples, pulses, bursts appear,
Tiny waves across the screen,
A rabbit’s art in every sheen,
Clicks now sparkle far and near.

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 42.86% 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 'feat(extensions): add willytop8.click-ripple cursor-effect example' clearly and concisely summarizes the main change—adding a new cursor-effect extension example to the extension-examples directory.
Description check ✅ Passed The pull request description comprehensively covers all key aspects: clear description of changes, detailed motivation explaining why the example is needed, appropriate type of change selections, implementation notes, testing guide with step-by-step instructions, and screenshots demonstrating the feature.
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 unit tests (beta)
  • Create PR with unit tests

Tip

💬 Introducing Slack Agent: The best way for teams to turn conversations into code.

Slack Agent is built on CodeRabbit's deep understanding of your code, so your team can collaborate across the entire SDLC without losing context.

  • Generate code and open pull requests
  • Plan features and break down work
  • Investigate incidents and troubleshoot customer tickets together
  • Automate recurring tasks and respond to alerts with triggers
  • Summarize progress and report instantly

Built for teams:

  • Shared memory across your entire org—no repeating context
  • Per-thread sandboxes to safely plan and execute work
  • Governance built-in—scoped access, auditability, and budget controls

One agent for your entire SDLC. Right inside Slack.

👉 Get started


Review rate limit: 8/10 reviews remaining, refill in 10 minutes and 31 seconds.

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

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented May 4, 2026

⚠️ This pull request has been flagged by Anti-Slop.
Our automated checks detected patterns commonly associated with
low-quality or automated/AI submissions (failure count reached).
No automatic closure — a maintainer will review it.
If this is legitimate work, please add more context, link issues, or ping us.

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: 2

🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@extension-examples/willytop8.click-ripple/README.md`:
- Line 11: The README currently hard-codes the release asset name
"recordly-click-ripple-1.0.0.zip" which will become stale; change the
instruction to point users to the latest release rather than a versioned
filename—for example, link to the repository Releases page or use a "latest"
release asset URL instead of "recordly-click-ripple-1.0.0.zip" so the install
step always references the newest ZIP; update the line that mentions
"recordly-click-ripple-1.0.0.zip" accordingly.

In `@extension-examples/willytop8.click-ripple/src/index.ts`:
- Around line 52-53: The division by t.scale when computing x and y can produce
Infinity/NaN if t.scale is 0 or non-finite; in the block that computes x and y
(using variables t, ctx, ctx.cx, ctx.cy, ctx.width, ctx.height) add a guard that
checks t && Number.isFinite(t.scale) && t.scale !== 0 before using ( ... /
t.scale ), and otherwise fall back to a safe no-transform calculation (e.g. use
ctx.cx * ctx.width and ctx.cy * ctx.height) or a normalized safeScale (like 1)
so the draw path never receives invalid coordinates.
🪄 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: 31241a7c-3fc6-454e-acec-1902c7ba5e7a

📥 Commits

Reviewing files that changed from the base of the PR and between 35c6038 and f131f65.

⛔ Files ignored due to path filters (6)
  • extension-examples/willytop8.click-ripple/dist/index.js is excluded by !**/dist/**
  • extension-examples/willytop8.click-ripple/package-lock.json is excluded by !**/package-lock.json
  • extension-examples/willytop8.click-ripple/screenshots/burst-style.png is excluded by !**/*.png
  • extension-examples/willytop8.click-ripple/screenshots/pulse-style.png is excluded by !**/*.png
  • extension-examples/willytop8.click-ripple/screenshots/ripple-style.png is excluded by !**/*.png
  • extension-examples/willytop8.click-ripple/screenshots/settings-panel.png is excluded by !**/*.png
📒 Files selected for processing (10)
  • EXTENSIONS.md
  • extension-examples/willytop8.click-ripple/.gitignore
  • extension-examples/willytop8.click-ripple/LICENSE
  • extension-examples/willytop8.click-ripple/README.md
  • extension-examples/willytop8.click-ripple/build.mjs
  • extension-examples/willytop8.click-ripple/package.json
  • extension-examples/willytop8.click-ripple/recordly-extension.json
  • extension-examples/willytop8.click-ripple/src/index.ts
  • extension-examples/willytop8.click-ripple/src/recordly-types.d.ts
  • extension-examples/willytop8.click-ripple/tsconfig.json

Comment thread extension-examples/willytop8.click-ripple/README.md Outdated
Comment thread extension-examples/willytop8.click-ripple/src/index.ts Outdated
@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented May 4, 2026

⚠️ This pull request has been flagged by Anti-Slop.
Our automated checks detected patterns commonly associated with
low-quality or automated/AI submissions (failure count reached).
No automatic closure — a maintainer will review it.
If this is legitimate work, please add more context, link issues, or ping us.

3 similar comments
@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented May 4, 2026

⚠️ This pull request has been flagged by Anti-Slop.
Our automated checks detected patterns commonly associated with
low-quality or automated/AI submissions (failure count reached).
No automatic closure — a maintainer will review it.
If this is legitimate work, please add more context, link issues, or ping us.

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented May 4, 2026

⚠️ This pull request has been flagged by Anti-Slop.
Our automated checks detected patterns commonly associated with
low-quality or automated/AI submissions (failure count reached).
No automatic closure — a maintainer will review it.
If this is legitimate work, please add more context, link issues, or ping us.

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented May 4, 2026

⚠️ This pull request has been flagged by Anti-Slop.
Our automated checks detected patterns commonly associated with
low-quality or automated/AI submissions (failure count reached).
No automatic closure — a maintainer will review it.
If this is legitimate work, please add more context, link issues, or ping us.

Adds a cursor-effect extension under extension-examples/ demonstrating
registerCursorEffect() with three switchable styles (ripple, pulse, burst)
and a settings panel nested under the Cursor section.

Also adds a one-line entry to EXTENSIONS.md under ## Examples.
@willytop8 willytop8 force-pushed the feature/click-ripple-extension-example branch from 7712278 to 5de8d44 Compare May 4, 2026 06:00
@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented May 4, 2026

⚠️ This pull request has been flagged by Anti-Slop.
Our automated checks detected patterns commonly associated with
low-quality or automated/AI submissions (failure count reached).
No automatic closure — a maintainer will review it.
If this is legitimate work, please add more context, link issues, or ping us.

1 similar comment
@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented May 4, 2026

⚠️ This pull request has been flagged by Anti-Slop.
Our automated checks detected patterns commonly associated with
low-quality or automated/AI submissions (failure count reached).
No automatic closure — a maintainer will review it.
If this is legitimate work, please add more context, link issues, or ping us.

@willytop8
Copy link
Copy Markdown
Author

Closing to reopen with a cleaner PR.

@willytop8 willytop8 closed this May 4, 2026
@willytop8 willytop8 deleted the feature/click-ripple-extension-example branch May 4, 2026 06:07
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant