diff --git a/README.md b/README.md index df9216c02..c57324c12 100644 --- a/README.md +++ b/README.md @@ -4,6 +4,7 @@ [![License](https://img.shields.io/npm/l/@tiptap/core.svg)](https://www.npmjs.com/package/@tiptap/core) [![Build Status](https://github.com/ueberdosis/tiptap-next/workflows/build/badge.svg)](https://github.com/ueberdosis/tiptap-next/actions) [![Sponsor](https://img.shields.io/static/v1?label=Sponsor&message=%E2%9D%A4&logo=GitHub)](https://github.com/sponsors/ueberdosis) +[![Chat](https://img.shields.io/badge/chat-on%20discord-7289da.svg?sanitize=true)](https://discord.gg/WtJ49jGshW) A headless and extendable rich text editor, based on [ProseMirror](https://github.com/ProseMirror/prosemirror), which is already in use at many well-known companies such as *New York Times*, *The Guardian* or *Atlassian*. diff --git a/docs/src/docPages/api/extensions/text-align.md b/docs/src/docPages/api/extensions/text-align.md index 2ea2f2e92..bc0b4f84d 100644 --- a/docs/src/docPages/api/extensions/text-align.md +++ b/docs/src/docPages/api/extensions/text-align.md @@ -4,6 +4,10 @@ This extension adds a text align attribute to a specified list of nodes. The attribute is used to align the text. +:::warning Firefox bug +`text-align: justify` doesn't work together with `white-space: pre-wrap` in Firefox, [that’s a known issue](https://bugzilla.mozilla.org/show_bug.cgi?id=1253840). +::: + ## Installation ```bash # with npm diff --git a/docs/src/docPages/installation/alpine.md b/docs/src/docPages/installation/alpine.md index bf6ed83b0..f40e4a2e4 100644 --- a/docs/src/docPages/installation/alpine.md +++ b/docs/src/docPages/installation/alpine.md @@ -9,107 +9,112 @@ title: Alpine WYSIWYG ## Introduction The following guide describes how to integrate tiptap with your [Alpine.js](https://github.com/alpinejs/alpine) project. -TODO +For the sake of this guide we’ll use [Vite](https://vitejs.dev/) to quickly set up a project, but you can use whatever you’re used to. Vite is just really fast and we love it. -## CodeSandbox -https://codesandbox.io/s/alpine-tiptap-2ro5e?file=/index.html:0-1419 +## Requirements +* [Node](https://nodejs.org/en/download/) installed on your machine +* Experience with [Alpine.js](https://github.com/alpinejs/alpine) -## index.html -```html - - - - Parcel Sandbox - - - - +## 1. Create a project (optional) +If you already have an existing Alpine.js project, that’s fine too. Just skip this step and proceed with the next step. - -
- -
- - (view console for editor output) -
+For the sake of this guide, let’s start with a fresh [Vite](https://vitejs.dev/) project called `tiptap-example`. Vite sets up everything we need, just select the Vanilla JavaScript template. - - - +```bash +npm init @vitejs/app tiptap-example +cd tiptap-example +npm install ``` -## index.js +## 2. Install the dependencies +Okay, enough of the boring boilerplate work. Let’s finally install tiptap! For the following example you’ll need `alpinejs`, the `@tiptap/core` package and the `@tiptap/starter-kit` which has the most common extensions to get started quickly. + +```bash +# install with npm +npm install alpinejs @tiptap/core @tiptap/starter-kit + +# install with Yarn +yarn add alpinejs @tiptap/core @tiptap/starter-kit +``` + +If you followed step 1, you can now start your project with `npm run dev` or `yarn dev`, and open [http://localhost:3000](http://localhost:3000) in your favorite browser. This might be different, if you’re working with an existing project. + +## 3. Add a JavaScript file +To actually start using tiptap, you’ll need to write a little bit of JavaScript. Let’s put the following example code in a file called `main.js`. + +This is the fastest way to get tiptap up and running with Alpine.js. It will give you a very basic version of tiptap. No worries, you will be able to add more functionality soon. + ```js -import { Editor as TipTap } from "@tiptap/core" -import { defaultExtensions } from "@tiptap/starter-kit" +import alpinejs from 'alpinejs' +import { Editor } from '@tiptap/core' +import { defaultExtensions } from '@tiptap/starter-kit' -window.setupEditor = function (content) { +window.setupEditor = function(content) { return { - content: content, - inFocus: false, - // updatedAt is to force Alpine to - // rerender on selection change - updatedAt: Date.now(), editor: null, - - init(el) { - let editor = new TipTap({ - element: el, + content: content, + init(element) { + this.editor = new Editor({ + element: element, extensions: defaultExtensions(), content: this.content, - editorProps: { - attributes: { - class: "prose-sm py-4 focus:outline-none" - } - } + onUpdate: ({ editor }) => { + this.content = editor.getHTML() + }, }) - - editor.on("update", () => { - this.content = this.editor.getHTML() - }) - - editor.on("focus", () => { - this.inFocus = true - }) - - editor.on("selection", () => { - this.updatedAt = Date.now() - }) - - this.editor = editor - } + }, } } ``` + +## 4. Add it to your app +Now, let’s replace the content of the `index.html` with the following example code to use the editor in our app. + +```html + + + + + + + +
+ + + +
+
+ + + + + + +``` + +You should now see tiptap in your browser. Time to give yourself a pat on the back! :) diff --git a/docs/src/docPages/installation/cdn.md b/docs/src/docPages/installation/cdn.md index 1f2348023..3e7d16d64 100644 --- a/docs/src/docPages/installation/cdn.md +++ b/docs/src/docPages/installation/cdn.md @@ -20,3 +20,5 @@ For testing purposes or demos, use our [Skypack](https://www.skypack.dev/) CDN b ``` + +You should now see tiptap in your browser. Time to give yourself a pat on the back! :) diff --git a/docs/src/docPages/installation/nuxt.md b/docs/src/docPages/installation/nuxt.md index 7b08e4755..e7a5f5c4c 100644 --- a/docs/src/docPages/installation/nuxt.md +++ b/docs/src/docPages/installation/nuxt.md @@ -93,7 +93,7 @@ Now, let’s replace the content of `pages/index.vue` with the following example Note that tiptap needs to run in the client, not on the server. It’s required to wrap the editor in a `` tag. [Read more about cient-only components.](https://nuxtjs.org/api/components-client-only) -You should now see tiptap in your browser. You’ve successfully set up tiptap! Time to give yourself a pat on the back. +You should now see tiptap in your browser. Time to give yourself a pat on the back! :) ## 5. Use v-model (optional) You’re probably used to bind your data with `v-model` in forms, that’s also possible with tiptap. Here is a working example component, that you can integrate in your project: diff --git a/docs/src/docPages/installation/react.md b/docs/src/docPages/installation/react.md index 0d777181d..f6ca84be9 100644 --- a/docs/src/docPages/installation/react.md +++ b/docs/src/docPages/installation/react.md @@ -79,7 +79,7 @@ const App = () => { export default App ``` -You should now see tiptap in your browser. You’ve successfully set up tiptap! Time to give yourself a pat on the back. +You should now see tiptap in your browser. Time to give yourself a pat on the back! :) ## 5. The complete setup (optional) Ready to add more? Below is a demo that shows how you could set up what we call the default editor. Feel free to take this and start customizing it then: diff --git a/docs/src/docPages/installation/svelte.md b/docs/src/docPages/installation/svelte.md index 55c2195ee..9fdd741a5 100644 --- a/docs/src/docPages/installation/svelte.md +++ b/docs/src/docPages/installation/svelte.md @@ -116,4 +116,4 @@ Now, let’s replace the content of `src/routes/index.svelte` with the following ``` -You should now see tiptap in your browser. You’ve successfully set up tiptap! Time to give yourself a pat on the back. +You should now see tiptap in your browser. Time to give yourself a pat on the back! :) diff --git a/docs/src/docPages/installation/vue2.md b/docs/src/docPages/installation/vue2.md index 9809f6cbe..29d11f7cf 100644 --- a/docs/src/docPages/installation/vue2.md +++ b/docs/src/docPages/installation/vue2.md @@ -101,7 +101,7 @@ export default { ``` -You should now see tiptap in your browser. You’ve successfully set up tiptap! Time to give yourself a pat on the back. +You should now see tiptap in your browser. Time to give yourself a pat on the back! :) ## 5. Use v-model (optional) You’re probably used to bind your data with `v-model` in forms, that’s also possible with tiptap. Here is a working example component, that you can integrate in your project: diff --git a/docs/src/docPages/installation/vue3.md b/docs/src/docPages/installation/vue3.md index 86ff170fa..c98fdfbe8 100644 --- a/docs/src/docPages/installation/vue3.md +++ b/docs/src/docPages/installation/vue3.md @@ -129,7 +129,7 @@ export default { ``` -You should now see tiptap in your browser. You’ve successfully set up tiptap! Time to give yourself a pat on the back. +You should now see tiptap in your browser. Time to give yourself a pat on the back! :) ## 5. Use v-model (optional) You’re probably used to bind your data with `v-model` in forms, that’s also possible with tiptap. Here is how that would work with tiptap: diff --git a/docs/src/links.yaml b/docs/src/links.yaml index a7b598fc0..33f95d429 100644 --- a/docs/src/links.yaml +++ b/docs/src/links.yaml @@ -37,7 +37,7 @@ # skip: true - title: Alpine.js link: /installation/alpine - type: draft + type: new skip: true - title: Livewire link: /installation/livewire