Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat(placeholder): hide placeholder in atom nodes by default #6044

Open
wants to merge 1 commit into
base: develop
Choose a base branch
from

Conversation

ShadiBlitz
Copy link

@ShadiBlitz ShadiBlitz commented Jan 21, 2025

Changes Overview

This update enhances the Tiptap placeholder extension by preventing placeholders from being displayed on atom nodes by default. This ensures a more intuitive user experience by only showing placeholders in meaningful contexts.

Motivation

Atom nodes are typically self-contained and do not require placeholders. Displaying placeholders on them can create visual clutter and confusion. By default, this change hides placeholders on atom nodes, improving clarity. However, for flexibility, a new option showWhenAtom: true allows placeholders to be shown on atom nodes when needed.

Implementation Approach

The extension now checks if a node is an atom before rendering the placeholder. If showWhenAtom is set to true, placeholders will still be displayed on atom nodes.

Visual Changes

Before

Screenshot 2025-02-09 at 12 30 53

After

Screenshot 2025-02-09 at 12 31 09

Checklist

  • I have created a changeset for this PR if necessary.
  • My changes do not break the library.
  • I have added tests where applicable.
  • I have followed the project guidelines.
  • I have fixed any lint issues.

Copy link

changeset-bot bot commented Jan 21, 2025

🦋 Changeset detected

Latest commit: 9064e80

The changes in this PR will be included in the next version bump.

This PR includes changesets to release 54 packages
Name Type
@tiptap/extension-placeholder Patch
@tiptap/core Patch
@tiptap/extension-blockquote Patch
@tiptap/extension-bold Patch
@tiptap/extension-bubble-menu Patch
@tiptap/extension-bullet-list Patch
@tiptap/extension-character-count Patch
@tiptap/extension-code-block-lowlight Patch
@tiptap/extension-code-block Patch
@tiptap/extension-code Patch
@tiptap/extension-collaboration-cursor Patch
@tiptap/extension-collaboration Patch
@tiptap/extension-color Patch
@tiptap/extension-document Patch
@tiptap/extension-dropcursor Patch
@tiptap/extension-floating-menu Patch
@tiptap/extension-focus Patch
@tiptap/extension-font-family Patch
@tiptap/extension-gapcursor Patch
@tiptap/extension-hard-break Patch
@tiptap/extension-heading Patch
@tiptap/extension-highlight Patch
@tiptap/extension-history Patch
@tiptap/extension-horizontal-rule Patch
@tiptap/extension-image Patch
@tiptap/extension-italic Patch
@tiptap/extension-link Patch
@tiptap/extension-list-item Patch
@tiptap/extension-list-keymap Patch
@tiptap/extension-mention Patch
@tiptap/extension-ordered-list Patch
@tiptap/extension-paragraph Patch
@tiptap/extension-strike Patch
@tiptap/extension-subscript Patch
@tiptap/extension-superscript Patch
@tiptap/extension-table-cell Patch
@tiptap/extension-table-header Patch
@tiptap/extension-table-row Patch
@tiptap/extension-table Patch
@tiptap/extension-task-item Patch
@tiptap/extension-task-list Patch
@tiptap/extension-text-align Patch
@tiptap/extension-text-style Patch
@tiptap/extension-text Patch
@tiptap/extension-typography Patch
@tiptap/extension-underline Patch
@tiptap/extension-youtube Patch
@tiptap/html Patch
@tiptap/pm Patch
@tiptap/react Patch
@tiptap/starter-kit Patch
@tiptap/suggestion Patch
@tiptap/vue-2 Patch
@tiptap/vue-3 Patch

Not sure what this means? Click here to learn what changesets are.

Click here if you're a maintainer who wants to add another changeset to this PR

Copy link

netlify bot commented Jan 21, 2025

Deploy Preview for tiptap-embed ready!

Name Link
🔨 Latest commit d85d0e6
🔍 Latest deploy log https://app.netlify.com/sites/tiptap-embed/deploys/67a88536ffebd20008de86fe
😎 Deploy Preview https://deploy-preview-6044--tiptap-embed.netlify.app
📱 Preview on mobile
Toggle QR Code...

QR Code

Use your smartphone camera to open QR code link.

To edit notification comments on pull requests, go to your Netlify site configuration.

@ShadiBlitz ShadiBlitz changed the title feat(placeholder): do not show placeholder on atom nodes by default feat(placeholder): hide placeholder in atom nodes by default Jan 21, 2025
@alexvcasillas
Copy link
Contributor

Could you please rebase this branch from develop and provide a visual comparison of your proposed changes? That would be really appreciated, thanks! 🙇🏻

@ShadiBlitz
Copy link
Author

Could you please rebase this branch from develop and provide a visual comparison of your proposed changes? That would be really appreciated, thanks! 🙇🏻

Done.

Copy link
Contributor

@alexvcasillas alexvcasillas left a comment

Choose a reason for hiding this comment

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

Looking good, thanks for addressing this!

@@ -103,8 +113,9 @@ export const Placeholder = Extension.create<PlaceholderOptions>({
doc.descendants((node, pos) => {
const hasAnchor = anchor >= pos && anchor <= pos + node.nodeSize
const isEmpty = !node.isLeaf && isNodeEmpty(node)
const isContentEditable = this.options.showWhenAtom ? !node.type.isAtom : true;

Choose a reason for hiding this comment

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

This var name doesn't really describe it well

Choose a reason for hiding this comment

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

So the atom is not considered a leaf? That is surprising to me? And it also isn't empty? That sounds wrong to me

Either the isNodeEmpty should be updated to make it be counted as being empty or something else is up here

* If false, the placeholder will not be shown for atom nodes.
* @default false
*/
showWhenAtom: boolean;

Choose a reason for hiding this comment

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

I disagree with making this an option, people should not have to care. You can also just disable the placeholder with css so I don't see why we would need to even modify the JS here

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.

3 participants