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

Add ability to render native drag preview in context of specific element. #184

Open
olivercoad opened this issue Feb 7, 2025 · 2 comments

Comments

@olivercoad
Copy link

olivercoad commented Feb 7, 2025

When generating the custom drag preview, the container is added directly to body. This means it inherits the CSS state of body, including CSS variables, font, currentColor etc.

I'd love the option to provide an alternative element to document.body to mount the container to, so that it can inherit the desired CSS state from the context of where the dragged element is.

The main reason I want this is so that it can get use the css variables from the theme, which aren't present on the body.

Because container is position: fixed, it will still render in the correct place.
Potential gotchas to look out for are when the element:

  • is hidden or display: none
  • has opacity
  • has other things above it in the stacking context

Proposed change

export function setCustomNativeDragPreview({
	render,
	nativeSetDragImage,
	getOffset = defaultOffset,
        containerParent = document.body,
}: {
	getOffset?: GetOffsetFn;
	render: RenderFn;
	nativeSetDragImage: ElementEventPayloadMap['onGenerateDragPreview']['nativeSetDragImage'];
        containerParent?: HTMLElement;
}) {

/* ... */
        // document.body.append(container);
	containerParent.append(container);

/* cleanup */
            // document.body.removeChild(container);
            containerParent.removeChild(container);
@hungify
Copy link

hungify commented Feb 16, 2025

It is already supported, so please take the time to explore the documentation, existing issues, and discussions before creating a new issue. There may be a solution: #121 (comment)

@olivercoad
Copy link
Author

Thankyou for the suggestion but I don't believe you've understood this issue.

I've already read many similar discussions to that where you have pointed to that technique and I already have experience using non-native custom drag previews. Your example was very useful for helping learn how to use non-native drag previews with pragmatic drag and drop, and is probably the best solution for many use-cases because it gives the developer the most control. So thank you for putting it together. However, that is not what this issue is about.

It is about using the native drag preview. The preview does not need to change once it is generated, I just want to be able to have the right css context for generating it in the first place. I can put together a simple demo if you don't understand the use case or why it is important.

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

No branches or pull requests

2 participants