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

Updated Drag Handle #361

Merged
merged 1 commit into from
Mar 29, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
83 changes: 83 additions & 0 deletions apps/docs/guides/global-drag-handle.mdx
Original file line number Diff line number Diff line change
@@ -0,0 +1,83 @@
---
title: "Global Drag Handle (New)"
description: "Drag and drop blocks across the editor"
---

<Steps>

<Step title="Install the extension">
Install the extension with a package manager of your choice.

```NPM
$ npm i tiptap-extension-global-drag-handle
```
```Yarn
$ yarn add tiptap-extension-global-drag-handle
```

In order to enjoy all the advantages of a drag handle, it is recommended to install the auto joiner extension as well, which allows you to automatically join various nodes such as 2 lists that are next to each other.

```NPM
$ npm i tiptap-extension-auto-joiner
```
```Yarn
$ yarn add tiptap-extension-auto-joiner
```

</Step>

<Step title="Add drag extension">
```tsx
// extensions.ts
import GlobalDragHandle from 'tiptap-extension-global-drag-handle'
import AutoJoiner from 'tiptap-extension-auto-joiner' // optional

export const defaultExtensions = [
GlobalDragHandle,
AutoJoiner, // optional
// other extensions
];

// editor.tsx
const Editor = () => {
return <EditorContent extensions={defaultExtensions} />
}
```
</Step>

<Step title="Configure the extension">
```tsx
//extensions.ts
import GlobalDragHandle from 'tiptap-extension-global-drag-handle'
import AutoJoiner from 'tiptap-extension-auto-joiner' // optional

export const defaultExtensions = [
GlobalDragHandle.configure({
dragHandleWidth: 20, // default

// The scrollTreshold specifies how close the user must drag an element to the edge of the lower/upper screen for automatic
// scrolling to take place. For example, scrollTreshold = 100 means that scrolling starts automatically when the user drags an
// element to a position that is max. 99px away from the edge of the screen
// You can set this to 0 to prevent auto scrolling caused by this extension
scrollTreshold: 100 // default
}),
AutoJoiner.configure({
elementsToJoin: ["bulletList", "orderedList"] // default
}),
// other extensions
];

// editor.tsx
const Editor = () => {
return <EditorContent extensions={defaultExtensions} />
}
```
</Step>

<Step title="Add styling">
By default the drag handle is headless, which means it doesn't contain any css. If you want to apply styling to the drag handle, use the class "drag-handle" in your css file.

Take a look at [this](https:/steven-tey/novel/blob/main/apps/web/styles/prosemirror.css#L131) to see an example of drag handle styling.
</Step>

</Steps>
3 changes: 2 additions & 1 deletion apps/docs/mint.json
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,8 @@
]
},
"guides/ai-command",
"guides/image-upload"
"guides/image-upload",
"guides/global-drag-handle"
]
},
{
Expand Down
2 changes: 2 additions & 0 deletions packages/headless/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,8 @@
"@tiptap/react": "^2.1.7",
"@tiptap/starter-kit": "^2.1.7",
"@tiptap/suggestion": "^2.1.7",
"tiptap-extension-auto-joiner": "^0.1.1",
"tiptap-extension-global-drag-handle": "^0.1.2",
"@types/node": "18.15.3",
"cmdk": "^0.2.1",
"jotai": "^2.6.4",
Expand Down
227 changes: 0 additions & 227 deletions packages/headless/src/extensions/drag-and-drop.tsx

This file was deleted.

9 changes: 7 additions & 2 deletions packages/headless/src/extensions/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,10 @@ import { Markdown } from "tiptap-markdown";
import Highlight from "@tiptap/extension-highlight";
import UpdatedImage from "./updated-image";
import CustomKeymap from "./custom-keymap";
import DragAndDrop from "./drag-and-drop";
import { ImageResizer } from "./image-resizer";
import GlobalDragHandle from "tiptap-extension-global-drag-handle";
import AutoJoiner from "tiptap-extension-auto-joiner";

const PlaceholderExtension = Placeholder.configure({
placeholder: ({ node }) => {
if (node.type.name === "heading") {
Expand All @@ -38,7 +40,10 @@ const simpleExtensions = [
transformCopiedText: true,
}),
CustomKeymap,
DragAndDrop,
GlobalDragHandle.configure({
scrollTreshold: 0,
Copy link
Contributor

Choose a reason for hiding this comment

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

Typo

}),
AutoJoiner,
] as const;

const Horizontal = HorizontalRule.extend({
Expand Down
Loading