A modern WYSIWYG AI rich text editor based on tiptap and shadcn ui for Vue.js

👉Demo
Use shadcn ui components
Markdown support
TypeScript support
I18n support
Vue 3.x support
Slash Command
Dark Mode
Multi Column
AI Power
Embed
TailwindCss
pnpm add echo-editor // or or yarn add echo-editor // or or npm i echo-editor -Simport { createApp } from 'vue' import App from './App.vue' import EchoEditor from 'echo-editor' import 'echo-editor/style.css' const app = createApp(App) app.use(EchoEditor) app.mount('#app')
-`;
+export const DEMO_CONTENT = {
+ type: "doc",
+ content: [
+ {
+ type: "heading",
+ attrs: { textAlign: "center", indent: 0, lineHeight: null, level: 1 },
+ content: [{ type: "text", text: "Echo Editor" }],
+ },
+ {
+ type: "paragraph",
+ attrs: { textAlign: "left", indent: 0, lineHeight: null },
+ content: [
+ {
+ type: "text",
+ text: "A modern WYSIWYG AI rich text editor based on ",
+ },
+ {
+ type: "text",
+ marks: [
+ {
+ type: "link",
+ attrs: {
+ href: "https://github.com/scrumpy/tiptap",
+ target: "_blank",
+ rel: "noopener noreferrer nofollow",
+ class: "link",
+ },
+ },
+ ],
+ text: "tiptap",
+ },
+ { type: "text", text: " and " },
+ {
+ type: "text",
+ marks: [
+ {
+ type: "link",
+ attrs: {
+ href: "https://www.shadcn-vue.com/",
+ target: "_blank",
+ rel: "noopener noreferrer nofollow",
+ class: "link",
+ },
+ },
+ ],
+ text: "shadcn ui",
+ },
+ { type: "text", text: " for Vue.js" },
+ ],
+ },
+ {
+ type: "paragraph",
+ attrs: { textAlign: "left", indent: 0, lineHeight: null },
+ },
+ {
+ type: "paragraph",
+ attrs: { textAlign: "left", indent: 0, lineHeight: null },
+ },
+ {
+ type: "paragraph",
+ attrs: { textAlign: "left", indent: 0, lineHeight: null },
+ },
+ {
+ type: "image",
+ attrs: {
+ textAlign: "center",
+ src: "https://picsum.photos/1920/1080.webp?t=1",
+ alt: null,
+ title: null,
+ width: 500,
+ },
+ },
+ {
+ type: "paragraph",
+ attrs: { textAlign: "left", indent: 0, lineHeight: null },
+ },
+ { type: "horizontalRule" },
+ {
+ type: "heading",
+ attrs: { textAlign: "left", indent: 0, lineHeight: null, level: 2 },
+ content: [{ type: "text", text: "Demo" }],
+ },
+ {
+ type: "paragraph",
+ attrs: { textAlign: "left", indent: 0, lineHeight: null },
+ content: [
+ { type: "text", text: "👉" },
+ {
+ type: "text",
+ marks: [
+ {
+ type: "link",
+ attrs: {
+ href: "https://echo-editor.jzcloud.site/",
+ target: "_blank",
+ rel: "noopener noreferrer nofollow",
+ class: "link",
+ },
+ },
+ ],
+ text: "Demo",
+ },
+ ],
+ },
+ {
+ type: "heading",
+ attrs: { textAlign: "left", indent: 0, lineHeight: null, level: 2 },
+ content: [{ type: "text", text: "Features" }],
+ },
+ {
+ type: "bulletList",
+ attrs: { listStyleType: "disc" },
+ content: [
+ {
+ type: "listItem",
+ content: [
+ {
+ type: "paragraph",
+ attrs: { textAlign: "left", indent: 0, lineHeight: null },
+ content: [
+ { type: "text", text: "Use " },
+ {
+ type: "text",
+ marks: [
+ {
+ type: "link",
+ attrs: {
+ href: "https://www.shadcn-vue.com/",
+ target: "_blank",
+ rel: "noopener noreferrer nofollow",
+ class: "link",
+ },
+ },
+ ],
+ text: "shadcn ui",
+ },
+ { type: "text", text: " components" },
+ ],
+ },
+ ],
+ },
+ {
+ type: "listItem",
+ content: [
+ {
+ type: "paragraph",
+ attrs: { textAlign: "left", indent: 0, lineHeight: null },
+ content: [{ type: "text", text: "Markdown support" }],
+ },
+ ],
+ },
+ {
+ type: "listItem",
+ content: [
+ {
+ type: "paragraph",
+ attrs: { textAlign: "left", indent: 0, lineHeight: null },
+ content: [{ type: "text", text: "TypeScript support" }],
+ },
+ ],
+ },
+ {
+ type: "listItem",
+ content: [
+ {
+ type: "paragraph",
+ attrs: { textAlign: "left", indent: 0, lineHeight: null },
+ content: [{ type: "text", text: "I18n support" }],
+ },
+ ],
+ },
+ {
+ type: "listItem",
+ content: [
+ {
+ type: "paragraph",
+ attrs: { textAlign: "left", indent: 0, lineHeight: null },
+ content: [{ type: "text", text: "Vue 3.x support" }],
+ },
+ ],
+ },
+ {
+ type: "listItem",
+ content: [
+ {
+ type: "paragraph",
+ attrs: { textAlign: "left", indent: 0, lineHeight: null },
+ content: [{ type: "text", text: "Slash Command" }],
+ },
+ ],
+ },
+ {
+ type: "listItem",
+ content: [
+ {
+ type: "paragraph",
+ attrs: { textAlign: "left", indent: 0, lineHeight: null },
+ content: [{ type: "text", text: "Dark Mode" }],
+ },
+ ],
+ },
+ {
+ type: "listItem",
+ content: [
+ {
+ type: "paragraph",
+ attrs: { textAlign: "left", indent: 0, lineHeight: null },
+ content: [{ type: "text", text: "Multi Column" }],
+ },
+ ],
+ },
+ {
+ type: "listItem",
+ content: [
+ {
+ type: "paragraph",
+ attrs: { textAlign: "left", indent: 0, lineHeight: null },
+ content: [{ type: "text", text: "AI Power" }],
+ },
+ ],
+ },
+ {
+ type: "listItem",
+ content: [
+ {
+ type: "paragraph",
+ attrs: { textAlign: "left", indent: 0, lineHeight: null },
+ content: [{ type: "text", text: "Embed" }],
+ },
+ ],
+ },
+ {
+ type: "listItem",
+ content: [
+ {
+ type: "paragraph",
+ attrs: { textAlign: "left", indent: 0, lineHeight: null },
+ content: [{ type: "text", text: "TailwindCss" }],
+ },
+ ],
+ },
+ ],
+ },
+ {
+ type: "heading",
+ attrs: { textAlign: "left", indent: 0, lineHeight: null, level: 2 },
+ content: [{ type: "text", text: "Installation" }],
+ },
+ {
+ type: "codeBlock",
+ attrs: { language: "bash" },
+ content: [
+ {
+ type: "text",
+ text: "pnpm add echo-editor\n// or\nor yarn add echo-editor\n// or\nor npm i echo-editor -S",
+ },
+ ],
+ },
+ {
+ type: "heading",
+ attrs: { textAlign: "left", indent: 0, lineHeight: null, level: 3 },
+ content: [{ type: "text", text: "install plugin" }],
+ },
+ {
+ type: "codeBlock",
+ attrs: { language: "typescript" },
+ content: [
+ {
+ type: "text",
+ text: "import { createApp } from 'vue'\nimport App from './App.vue'\nimport EchoEditor from 'echo-editor'\nimport 'echo-editor/style.css'\nconst app = createApp(App)\napp.use(EchoEditor)\napp.mount('#app')",
+ },
+ ],
+ },
+ {
+ type: "paragraph",
+ attrs: { textAlign: "left", indent: 0, lineHeight: null },
+ },
+ ],
+};