feat: make floating link generic and use it for all editors
Description
Floating links are now generic and can be used across all the editors, even to insert links.
Defining a protocol isn't necessary, defaults to https protocol if no protocol is specified.
Type of Change
- [ ] Bug fix (non-breaking change which fixes an issue)
- [ ] Feature (non-breaking change which adds functionality)
- [ ] Improvement (change that would cause existing functionality to not work as expected)
- [ ] Code refactoring
- [ ] Performance improvements
- [ ] Documentation update
Screenshots and Media (if applicable)
Test Scenarios
References
Walkthrough
This pull request consolidates and refines editor behavior. It removes legacy link preview logic from the page renderer, replacing it with a dedicated LinkViewContainer integrated in the editor container. The changes include updated type definitions, refined URL validation via an enhanced helper, and standardized naming (e.g., renaming "strike" to "strikethrough") across menus and constants. Additionally, storage management improvements have been applied across various extensions, and editor components have been reorganized with minor import reordering.
Changes
| Files | Change Summary |
|---|---|
.gitignore |
Added ignore rules for dev-editor and re-added *.rdb.gz. |
packages/editor/src/core/components/editors/… (page-renderer.tsx, editor-container.tsx, editor-content.tsx, link-view-container.tsx) |
Removed link preview logic from page-renderer.tsx; updated editor-container.tsx to require a non-null editor and added a containerRef passed to a new LinkViewContainer; reordered imports in editor-content.tsx. |
packages/editor/src/core/components/links/… (index.ts, link-edit-view.tsx, link-input-view.tsx, link-preview.tsx, link-view.tsx) |
Removed export and file for link-input-view; updated view handling and props in link-edit-view.tsx and link-preview.tsx, and consolidated view types in link-view.tsx using the new LinkViews alias. |
packages/editor/src/core/components/menus/… & web/core/… (bubble-menu/link-selector.tsx, bubble-menu/root.tsx, menu-items.ts, toolbar.tsx, editor.ts) |
Modified URL validation and immutability in link-selector.tsx; enhanced bubble menu display conditions and state management in bubble-menu/root.tsx; renamed identifiers from "strike" to "strikethrough" in menu items and constants; removed debug console logs in the toolbar. |
packages/editor/src/core/extensions/… |
Updated URL validation logic and storage types in extensions (custom-image, custom-link, read-only-custom-image, headers, image, and mentions), including new properties and methods for state management. |
packages/editor/src/core/helpers/… & packages/editor/src/core/types/… |
Modified isValidHttpUrl to return an object; reordered imports in editor-commands.ts; added a new getExtensionStorage utility; updated editor command naming and introduced new editor event definitions. |
Sequence Diagram(s)
sequenceDiagram
participant User as User
participant EC as EditorContainer
participant LVC as LinkViewContainer
participant FU as Floating UI
participant LV as LinkView
Note over EC,LVC: Editor initialized with containerRef and LinkViewContainer
User->>EC: Hover over link in editor
EC->>LVC: Dispatch link hover event
LVC->>FU: Process positioning & interaction (useFloating)
FU-->>LVC: Return position data
LVC->>LV: Render LinkView with updated styles
Suggested labels
✨feature, 🌐frontend, 🛠️refactor, ✍️editor
Suggested reviewers
- aaryan610
Poem
Hey there, I'm a happy bunny, hopping with delight,
New code flows in the editor, making everything bright!
No more clutter, links now shine with a graceful show,
From refactored previews to menus that glow.
With lines updated and features new,
My little paws dance—they're cheering for you! 🐇🌟
✨ Finishing Touches
- [ ] 📝 Generate Docstrings
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.
🪧 Tips
Chat
There are 3 ways to chat with CodeRabbit:
- Review comments: Directly reply to a review comment made by CodeRabbit. Example:
-
I pushed a fix in commit <commit_id>, please review it. -
Generate unit testing code for this file. -
Open a follow-up GitHub issue for this discussion.
-
- Files and specific lines of code (under the "Files changed" tab): Tag
@coderabbitaiin a new review comment at the desired location with your query. Examples:-
@coderabbitai generate unit testing code for this file. -
@coderabbitai modularize this function.
-
- PR comments: Tag
@coderabbitaiin a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:-
@coderabbitai gather interesting stats about this repository and render them as a table. Additionally, render a pie chart showing the language distribution in the codebase. -
@coderabbitai read src/utils.ts and generate unit testing code. -
@coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format. -
@coderabbitai help me debug CodeRabbit configuration file.
-
Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments.
CodeRabbit Commands (Invoked using PR comments)
-
@coderabbitai pauseto pause the reviews on a PR. -
@coderabbitai resumeto resume the paused reviews. -
@coderabbitai reviewto trigger an incremental review. This is useful when automatic reviews are disabled for the repository. -
@coderabbitai full reviewto do a full review from scratch and review all the files again. -
@coderabbitai summaryto regenerate the summary of the PR. -
@coderabbitai generate docstringsto generate docstrings for this PR. -
@coderabbitai resolveresolve all the CodeRabbit review comments. -
@coderabbitai planto trigger planning for file edits and PR creation. -
@coderabbitai configurationto show the current CodeRabbit configuration for the repository. -
@coderabbitai helpto get help.
Other keywords and placeholders
- Add
@coderabbitai ignoreanywhere in the PR description to prevent this PR from being reviewed. - Add
@coderabbitai summaryto generate the high-level summary at a specific location in the PR description. - Add
@coderabbitaianywhere in the PR title to generate the title automatically.
CodeRabbit Configuration File (.coderabbit.yaml)
- You can programmatically configure CodeRabbit by adding a
.coderabbit.yamlfile to the root of your repository. - Please see the configuration documentation for more information.
- If your editor has YAML language server enabled, you can add the path at the top of this file to enable auto-completion and validation:
# yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json
Documentation and Community
- Visit our Documentation for detailed information on how to use CodeRabbit.
- Join our Discord Community to get help, request features, and share feedback.
- Follow us on X/Twitter for updates and announcements.