{
  "$schema": "https://ui.shadcn.com/schema/registry-item.json",
  "name": "editor-ai",
  "description": "An AI editor",
  "dependencies": [
    "sonner"
  ],
  "registryDependencies": [
    "https://platejs.org/r/plate-ui.json",
    "https://platejs.org/r/copilot-kit.json",
    "https://platejs.org/r/media-uploadthing-api.json",
    "https://platejs.org/r/plate-types.json",
    "https://platejs.org/r/settings-dialog.json",
    "https://platejs.org/r/editor-base-kit.json",
    "https://platejs.org/r/ai-kit.json",
    "https://platejs.org/r/align-kit.json",
    "https://platejs.org/r/autoformat-kit.json",
    "https://platejs.org/r/basic-nodes-kit.json",
    "https://platejs.org/r/block-menu-kit.json",
    "https://platejs.org/r/block-placeholder-kit.json",
    "https://platejs.org/r/callout-kit.json",
    "https://platejs.org/r/code-block-kit.json",
    "https://platejs.org/r/column-kit.json",
    "https://platejs.org/r/comment-kit.json",
    "https://platejs.org/r/cursor-overlay-kit.json",
    "https://platejs.org/r/date-kit.json",
    "https://platejs.org/r/discussion-kit.json",
    "https://platejs.org/r/dnd-kit.json",
    "https://platejs.org/r/docx-kit.json",
    "https://platejs.org/r/emoji-kit.json",
    "https://platejs.org/r/exit-break-kit.json",
    "https://platejs.org/r/fixed-toolbar-kit.json",
    "https://platejs.org/r/floating-toolbar-kit.json",
    "https://platejs.org/r/font-kit.json",
    "https://platejs.org/r/line-height-kit.json",
    "https://platejs.org/r/link-kit.json",
    "https://platejs.org/r/list-kit.json",
    "https://platejs.org/r/markdown-kit.json",
    "https://platejs.org/r/math-kit.json",
    "https://platejs.org/r/media-kit.json",
    "https://platejs.org/r/mention-kit.json",
    "https://platejs.org/r/slash-kit.json",
    "https://platejs.org/r/suggestion-kit.json",
    "https://platejs.org/r/table-kit.json",
    "https://platejs.org/r/toc-kit.json",
    "https://platejs.org/r/toggle-kit.json"
  ],
  "files": [
    {
      "path": "src/registry/blocks/editor-ai/page.tsx",
      "content": "import { Toaster } from 'sonner';\n\nimport { PlateEditor } from '@/registry/blocks/editor-ai/components/editor/plate-editor';\n\nexport default function Page() {\n  return (\n    <div className=\"h-screen w-full\">\n      <PlateEditor />\n\n      <Toaster />\n    </div>\n  );\n}\n",
      "type": "registry:page",
      "target": "app/editor/page.tsx"
    },
    {
      "path": "src/registry/blocks/editor-ai/components/editor/plate-editor.tsx",
      "content": "'use client';\n\nimport * as React from 'react';\n\nimport { normalizeStaticValue } from 'platejs';\nimport { Plate, usePlateEditor } from 'platejs/react';\n\nimport { EditorKit } from '@/registry/blocks/editor-ai/components/editor/editor-kit';\nimport { SettingsDialog } from '@/registry/components/editor/settings-dialog';\nimport { Editor, EditorContainer } from '@/registry/ui/editor';\n\nexport function PlateEditor() {\n  const editor = usePlateEditor({\n    plugins: EditorKit,\n    value,\n  });\n\n  return (\n    <Plate editor={editor}>\n      <EditorContainer>\n        <Editor variant=\"demo\" />\n      </EditorContainer>\n\n      <SettingsDialog />\n    </Plate>\n  );\n}\n\nconst value = normalizeStaticValue([\n  {\n    children: [{ text: 'Welcome to the Plate Playground!' }],\n    type: 'h1',\n  },\n  {\n    children: [\n      { text: 'Experience a modern rich-text editor built with ' },\n      { children: [{ text: 'Slate' }], type: 'a', url: 'https://slatejs.org' },\n      { text: ' and ' },\n      { children: [{ text: 'React' }], type: 'a', url: 'https://reactjs.org' },\n      {\n        text: \". This playground showcases just a part of Plate's capabilities. \",\n      },\n      {\n        children: [{ text: 'Explore the documentation' }],\n        type: 'a',\n        url: '/docs',\n      },\n      { text: ' to discover more.' },\n    ],\n    type: 'p',\n  },\n  // Suggestions & Comments Section\n  {\n    children: [{ text: 'Collaborative Editing' }],\n    type: 'h2',\n  },\n  {\n    children: [\n      { text: 'Review and refine content seamlessly. Use ' },\n      {\n        children: [\n          {\n            suggestion: true,\n            suggestion_playground1: {\n              id: 'playground1',\n              createdAt: Date.now(),\n              type: 'insert',\n              userId: 'alice',\n            },\n            text: 'suggestions',\n          },\n        ],\n        type: 'a',\n        url: '/docs/suggestion',\n      },\n      {\n        suggestion: true,\n        suggestion_playground1: {\n          id: 'playground1',\n          createdAt: Date.now(),\n          type: 'insert',\n          userId: 'alice',\n        },\n        text: ' ',\n      },\n      {\n        suggestion: true,\n        suggestion_playground1: {\n          id: 'playground1',\n          createdAt: Date.now(),\n          type: 'insert',\n          userId: 'alice',\n        },\n        text: 'like this added text',\n      },\n      { text: ' or to ' },\n      {\n        suggestion: true,\n        suggestion_playground2: {\n          id: 'playground2',\n          createdAt: Date.now(),\n          type: 'remove',\n          userId: 'bob',\n        },\n        text: 'mark text for removal',\n      },\n      { text: '. Discuss changes using ' },\n      {\n        children: [\n          { comment: true, comment_discussion1: true, text: 'comments' },\n        ],\n        type: 'a',\n        url: '/docs/comment',\n      },\n      {\n        comment: true,\n        comment_discussion1: true,\n        text: ' on many text segments',\n      },\n      { text: '. You can even have ' },\n      {\n        comment: true,\n        comment_discussion2: true,\n        suggestion: true,\n        suggestion_playground3: {\n          id: 'playground3',\n          createdAt: Date.now(),\n          type: 'insert',\n          userId: 'charlie',\n        },\n        text: 'overlapping',\n      },\n      { text: ' annotations!' },\n    ],\n    type: 'p',\n  },\n  // {\n  //   children: [\n  //     {\n  //       text: 'Block-level suggestions are also supported for broader feedback.',\n  //     },\n  //   ],\n  //   suggestion: {\n  //     suggestionId: 'suggestionBlock1',\n  //     type: 'block',\n  //     userId: 'charlie',\n  //   },\n  //   type: 'p',\n  // },\n  // AI Section\n  {\n    children: [{ text: 'AI-Powered Editing' }],\n    type: 'h2',\n  },\n  {\n    children: [\n      { text: 'Boost your productivity with integrated ' },\n      {\n        children: [{ text: 'AI SDK' }],\n        type: 'a',\n        url: '/docs/ai',\n      },\n      { text: '. Press ' },\n      { kbd: true, text: '⌘+J' },\n      { text: ' or ' },\n      { kbd: true, text: 'Space' },\n      { text: ' in an empty line to:' },\n    ],\n    type: 'p',\n  },\n  {\n    children: [\n      { text: 'Generate content (continue writing, summarize, explain)' },\n    ],\n    indent: 1,\n    listStyleType: 'disc',\n    type: 'p',\n  },\n  {\n    children: [\n      { text: 'Edit existing text (improve, fix grammar, change tone)' },\n    ],\n    indent: 1,\n    listStyleType: 'disc',\n    type: 'p',\n  },\n  // Core Features Section (Combined)\n  {\n    children: [{ text: 'Rich Content Editing' }],\n    type: 'h2',\n  },\n  {\n    children: [\n      { text: 'Structure your content with ' },\n      {\n        children: [{ text: 'headings' }],\n        type: 'a',\n        url: '/docs/heading',\n      },\n      { text: ', ' },\n      {\n        children: [{ text: 'lists' }],\n        type: 'a',\n        url: '/docs/list',\n      },\n      { text: ', and ' },\n      {\n        children: [{ text: 'quotes' }],\n        type: 'a',\n        url: '/docs/blockquote',\n      },\n      { text: '. Apply ' },\n      {\n        children: [{ text: 'marks' }],\n        type: 'a',\n        url: '/docs/basic-marks',\n      },\n      { text: ' like ' },\n      { bold: true, text: 'bold' },\n      { text: ', ' },\n      { italic: true, text: 'italic' },\n      { text: ', ' },\n      { text: 'underline', underline: true },\n      { text: ', ' },\n      { strikethrough: true, text: 'strikethrough' },\n      { text: ', and ' },\n      { code: true, text: 'code' },\n      { text: '. Use ' },\n      {\n        children: [{ text: 'autoformatting' }],\n        type: 'a',\n        url: '/docs/autoformat',\n      },\n      { text: ' for ' },\n      {\n        children: [{ text: 'Markdown' }],\n        type: 'a',\n        url: '/docs/markdown',\n      },\n      { text: '-like shortcuts (e.g., ' },\n      { kbd: true, text: '* ' },\n      { text: ' for lists, ' },\n      { kbd: true, text: '# ' },\n      { text: ' for H1).' },\n    ],\n    type: 'p',\n  },\n  {\n    children: [\n      {\n        children: [\n          {\n            text: 'Blockquotes can group paragraphs, quoted lists, and reply chains.',\n          },\n        ],\n        type: 'p',\n      },\n      {\n        children: [\n          {\n            text: 'Markdown blockquotes keep this nested structure instead of flattening it.',\n          },\n        ],\n        type: 'p',\n      },\n      {\n        children: [\n          {\n            text: 'Quoted list item inside the same container.',\n          },\n        ],\n        indent: 1,\n        listStyleType: 'disc',\n        type: 'p',\n      },\n      {\n        children: [\n          {\n            children: [{ text: 'Nested blockquotes work here too.' }],\n            type: 'p',\n          },\n        ],\n        type: 'blockquote',\n      },\n    ],\n    type: 'blockquote',\n  },\n  {\n    children: [\n      { children: [{ text: 'function hello() {' }], type: 'code_line' },\n      {\n        children: [{ text: \"  console.info('Code blocks are supported!');\" }],\n        type: 'code_line',\n      },\n      { children: [{ text: '}' }], type: 'code_line' },\n    ],\n    lang: 'javascript',\n    type: 'code_block',\n  },\n  {\n    children: [\n      { text: 'Create ' },\n      {\n        children: [{ text: 'links' }],\n        type: 'a',\n        url: '/docs/link',\n      },\n      { text: ', ' },\n      {\n        children: [{ text: '@mention' }],\n        type: 'a',\n        url: '/docs/mention',\n      },\n      { text: ' users like ' },\n      { children: [{ text: '' }], type: 'mention', value: 'Alice' },\n      { text: ', or insert ' },\n      {\n        children: [{ text: 'emojis' }],\n        type: 'a',\n        url: '/docs/emoji',\n      },\n      { text: ' ✨. Use the ' },\n      {\n        children: [{ text: 'slash command' }],\n        type: 'a',\n        url: '/docs/slash-command',\n      },\n      { text: ' (/) for quick access to elements.' },\n    ],\n    type: 'p',\n  },\n  // Table Section\n  {\n    children: [{ text: 'How Plate Compares' }],\n    type: 'h3',\n  },\n  {\n    children: [\n      {\n        text: 'Plate offers many features out-of-the-box as free, open-source plugins.',\n      },\n    ],\n    type: 'p',\n  },\n  {\n    children: [\n      {\n        children: [\n          {\n            children: [\n              { children: [{ bold: true, text: 'Feature' }], type: 'p' },\n            ],\n            type: 'th',\n          },\n          {\n            children: [\n              {\n                children: [{ bold: true, text: 'Plate (Free & OSS)' }],\n                type: 'p',\n              },\n            ],\n            type: 'th',\n          },\n          {\n            children: [\n              { children: [{ bold: true, text: 'Tiptap' }], type: 'p' },\n            ],\n            type: 'th',\n          },\n        ],\n        type: 'tr',\n      },\n      {\n        children: [\n          {\n            children: [{ children: [{ text: 'AI' }], type: 'p' }],\n            type: 'td',\n          },\n          {\n            children: [\n              {\n                attributes: { align: 'center' },\n                children: [{ text: '✅' }],\n                type: 'p',\n              },\n            ],\n            type: 'td',\n          },\n          {\n            children: [{ children: [{ text: 'Paid Extension' }], type: 'p' }],\n            type: 'td',\n          },\n        ],\n        type: 'tr',\n      },\n      {\n        children: [\n          {\n            children: [{ children: [{ text: 'Comments' }], type: 'p' }],\n            type: 'td',\n          },\n          {\n            children: [\n              {\n                attributes: { align: 'center' },\n                children: [{ text: '✅' }],\n                type: 'p',\n              },\n            ],\n            type: 'td',\n          },\n          {\n            children: [{ children: [{ text: 'Paid Extension' }], type: 'p' }],\n            type: 'td',\n          },\n        ],\n        type: 'tr',\n      },\n      {\n        children: [\n          {\n            children: [{ children: [{ text: 'Suggestions' }], type: 'p' }],\n            type: 'td',\n          },\n          {\n            children: [\n              {\n                attributes: { align: 'center' },\n                children: [{ text: '✅' }],\n                type: 'p',\n              },\n            ],\n            type: 'td',\n          },\n          {\n            children: [\n              { children: [{ text: 'Paid (Comments Pro)' }], type: 'p' },\n            ],\n            type: 'td',\n          },\n        ],\n        type: 'tr',\n      },\n      {\n        children: [\n          {\n            children: [{ children: [{ text: 'Emoji Picker' }], type: 'p' }],\n            type: 'td',\n          },\n          {\n            children: [\n              {\n                attributes: { align: 'center' },\n                children: [{ text: '✅' }],\n                type: 'p',\n              },\n            ],\n            type: 'td',\n          },\n          {\n            children: [{ children: [{ text: 'Paid Extension' }], type: 'p' }],\n            type: 'td',\n          },\n        ],\n        type: 'tr',\n      },\n      {\n        children: [\n          {\n            children: [\n              { children: [{ text: 'Table of Contents' }], type: 'p' },\n            ],\n            type: 'td',\n          },\n          {\n            children: [\n              {\n                attributes: { align: 'center' },\n                children: [{ text: '✅' }],\n                type: 'p',\n              },\n            ],\n            type: 'td',\n          },\n          {\n            children: [{ children: [{ text: 'Paid Extension' }], type: 'p' }],\n            type: 'td',\n          },\n        ],\n        type: 'tr',\n      },\n      {\n        children: [\n          {\n            children: [{ children: [{ text: 'Drag Handle' }], type: 'p' }],\n            type: 'td',\n          },\n          {\n            children: [\n              {\n                attributes: { align: 'center' },\n                children: [{ text: '✅' }],\n                type: 'p',\n              },\n            ],\n            type: 'td',\n          },\n          {\n            children: [{ children: [{ text: 'Paid Extension' }], type: 'p' }],\n            type: 'td',\n          },\n        ],\n        type: 'tr',\n      },\n      {\n        children: [\n          {\n            children: [\n              { children: [{ text: 'Collaboration (Yjs)' }], type: 'p' },\n            ],\n            type: 'td',\n          },\n          {\n            children: [\n              {\n                attributes: { align: 'center' },\n                children: [{ text: '✅' }],\n                type: 'p',\n              },\n            ],\n            type: 'td',\n          },\n          {\n            children: [\n              { children: [{ text: 'Hocuspocus (OSS/Paid)' }], type: 'p' },\n            ],\n            type: 'td',\n          },\n        ],\n        type: 'tr',\n      },\n    ],\n    type: 'table',\n  },\n  // Media Section\n  {\n    children: [{ text: 'Images and Media' }],\n    type: 'h3',\n  },\n  {\n    children: [\n      {\n        text: 'Embed rich media like images directly in your content. Supports ',\n      },\n      {\n        children: [{ text: 'Media uploads' }],\n        type: 'a',\n        url: '/docs/media',\n      },\n      {\n        text: ' and ',\n      },\n      {\n        children: [{ text: 'drag & drop' }],\n        type: 'a',\n        url: '/docs/dnd',\n      },\n      {\n        text: ' for a smooth experience.',\n      },\n    ],\n    type: 'p',\n  },\n  {\n    attributes: { align: 'center' },\n    caption: [\n      {\n        children: [{ text: 'Images with captions provide context.' }],\n        type: 'p',\n      },\n    ],\n    children: [{ text: '' }],\n    type: 'img',\n    url: 'https://images.unsplash.com/photo-1712688930249-98e1963af7bd?q=80&w=600&auto=format&fit=crop&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D',\n    width: '75%',\n  },\n  {\n    children: [{ text: '' }],\n    isUpload: true,\n    name: 'sample.pdf',\n    type: 'file',\n    url: 'https://s26.q4cdn.com/900411403/files/doc_downloads/test.pdf',\n  },\n  {\n    children: [{ text: '' }],\n    type: 'audio',\n    url: 'https://samplelib.com/lib/preview/mp3/sample-3s.mp3',\n  },\n  {\n    children: [{ text: 'Table of Contents' }],\n    type: 'h3',\n  },\n  {\n    children: [{ text: '' }],\n    type: 'toc',\n  },\n  {\n    children: [{ text: '' }],\n    type: 'p',\n  },\n]);\n",
      "type": "registry:component",
      "target": "@components/editor/plate-editor.tsx"
    },
    {
      "path": "src/registry/blocks/editor-ai/components/editor/editor-kit.tsx",
      "content": "'use client';\n\nimport { type Value, TrailingBlockPlugin } from 'platejs';\nimport { type TPlateEditor, useEditorRef } from 'platejs/react';\n\nimport { AIKit } from '@/registry/components/editor/plugins/ai-kit';\nimport { AlignKit } from '@/registry/components/editor/plugins/align-kit';\nimport { AutoformatKit } from '@/registry/components/editor/plugins/autoformat-kit';\nimport { BasicBlocksKit } from '@/registry/components/editor/plugins/basic-blocks-kit';\nimport { BasicMarksKit } from '@/registry/components/editor/plugins/basic-marks-kit';\nimport { BlockMenuKit } from '@/registry/components/editor/plugins/block-menu-kit';\nimport { BlockPlaceholderKit } from '@/registry/components/editor/plugins/block-placeholder-kit';\nimport { CalloutKit } from '@/registry/components/editor/plugins/callout-kit';\nimport { CodeBlockKit } from '@/registry/components/editor/plugins/code-block-kit';\nimport { ColumnKit } from '@/registry/components/editor/plugins/column-kit';\nimport { CommentKit } from '@/registry/components/editor/plugins/comment-kit';\nimport { CopilotKit } from '@/registry/components/editor/plugins/copilot-kit';\nimport { CursorOverlayKit } from '@/registry/components/editor/plugins/cursor-overlay-kit';\nimport { DateKit } from '@/registry/components/editor/plugins/date-kit';\nimport { DiscussionKit } from '@/registry/components/editor/plugins/discussion-kit';\nimport { DndKit } from '@/registry/components/editor/plugins/dnd-kit';\nimport { DocxKit } from '@/registry/components/editor/plugins/docx-kit';\nimport { EmojiKit } from '@/registry/components/editor/plugins/emoji-kit';\nimport { ExitBreakKit } from '@/registry/components/editor/plugins/exit-break-kit';\nimport { FixedToolbarKit } from '@/registry/components/editor/plugins/fixed-toolbar-kit';\nimport { FloatingToolbarKit } from '@/registry/components/editor/plugins/floating-toolbar-kit';\nimport { FontKit } from '@/registry/components/editor/plugins/font-kit';\nimport { LineHeightKit } from '@/registry/components/editor/plugins/line-height-kit';\nimport { LinkKit } from '@/registry/components/editor/plugins/link-kit';\nimport { ListKit } from '@/registry/components/editor/plugins/list-kit';\nimport { MarkdownKit } from '@/registry/components/editor/plugins/markdown-kit';\nimport { MathKit } from '@/registry/components/editor/plugins/math-kit';\nimport { MediaKit } from '@/registry/components/editor/plugins/media-kit';\nimport { MentionKit } from '@/registry/components/editor/plugins/mention-kit';\nimport { SlashKit } from '@/registry/components/editor/plugins/slash-kit';\nimport { SuggestionKit } from '@/registry/components/editor/plugins/suggestion-kit';\nimport { TableKit } from '@/registry/components/editor/plugins/table-kit';\nimport { TocKit } from '@/registry/components/editor/plugins/toc-kit';\nimport { ToggleKit } from '@/registry/components/editor/plugins/toggle-kit';\n\nexport const EditorKit = [\n  ...CopilotKit,\n  ...AIKit,\n\n  // Elements\n  ...BasicBlocksKit,\n  ...CodeBlockKit,\n  ...TableKit,\n  ...ToggleKit,\n  ...TocKit,\n  ...MediaKit,\n  ...CalloutKit,\n  ...ColumnKit,\n  ...MathKit,\n  ...DateKit,\n  ...LinkKit,\n  ...MentionKit,\n\n  // Marks\n  ...BasicMarksKit,\n  ...FontKit,\n\n  // Block Style\n  ...ListKit,\n  ...AlignKit,\n  ...LineHeightKit,\n\n  // Collaboration\n  ...DiscussionKit,\n  ...CommentKit,\n  ...SuggestionKit,\n\n  // Editing\n  ...SlashKit,\n  ...AutoformatKit,\n  ...CursorOverlayKit,\n  ...BlockMenuKit,\n  ...DndKit,\n  ...EmojiKit,\n  ...ExitBreakKit,\n  TrailingBlockPlugin,\n\n  // Parsers\n  ...DocxKit,\n  ...MarkdownKit,\n\n  // UI\n  ...BlockPlaceholderKit,\n  ...FixedToolbarKit,\n  ...FloatingToolbarKit,\n];\n\nexport type MyEditor = TPlateEditor<Value, (typeof EditorKit)[number]>;\n\nexport const useEditor = () => useEditorRef<MyEditor>();\n",
      "type": "registry:component",
      "target": "@components/editor/editor-kit.tsx"
    }
  ],
  "categories": [
    "Editors"
  ],
  "type": "registry:block"
}