nextblogkit 0.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (107) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +951 -0
  3. package/dist/admin/index.cjs +2465 -0
  4. package/dist/admin/index.cjs.map +1 -0
  5. package/dist/admin/index.d.cts +44 -0
  6. package/dist/admin/index.d.ts +44 -0
  7. package/dist/admin/index.js +2438 -0
  8. package/dist/admin/index.js.map +1 -0
  9. package/dist/api/categories.cjs +82 -0
  10. package/dist/api/categories.cjs.map +1 -0
  11. package/dist/api/categories.d.cts +27 -0
  12. package/dist/api/categories.d.ts +27 -0
  13. package/dist/api/categories.js +77 -0
  14. package/dist/api/categories.js.map +1 -0
  15. package/dist/api/media.cjs +113 -0
  16. package/dist/api/media.cjs.map +1 -0
  17. package/dist/api/media.d.cts +22 -0
  18. package/dist/api/media.d.ts +22 -0
  19. package/dist/api/media.js +109 -0
  20. package/dist/api/media.js.map +1 -0
  21. package/dist/api/posts.cjs +103 -0
  22. package/dist/api/posts.cjs.map +1 -0
  23. package/dist/api/posts.d.cts +27 -0
  24. package/dist/api/posts.d.ts +27 -0
  25. package/dist/api/posts.js +98 -0
  26. package/dist/api/posts.js.map +1 -0
  27. package/dist/api/rss.cjs +25 -0
  28. package/dist/api/rss.cjs.map +1 -0
  29. package/dist/api/rss.d.cts +5 -0
  30. package/dist/api/rss.d.ts +5 -0
  31. package/dist/api/rss.js +23 -0
  32. package/dist/api/rss.js.map +1 -0
  33. package/dist/api/settings.cjs +40 -0
  34. package/dist/api/settings.cjs.map +1 -0
  35. package/dist/api/settings.d.cts +17 -0
  36. package/dist/api/settings.d.ts +17 -0
  37. package/dist/api/settings.js +37 -0
  38. package/dist/api/settings.js.map +1 -0
  39. package/dist/api/sitemap.cjs +25 -0
  40. package/dist/api/sitemap.cjs.map +1 -0
  41. package/dist/api/sitemap.d.cts +5 -0
  42. package/dist/api/sitemap.d.ts +5 -0
  43. package/dist/api/sitemap.js +23 -0
  44. package/dist/api/sitemap.js.map +1 -0
  45. package/dist/chunk-4NKOJYWJ.js +68 -0
  46. package/dist/chunk-4NKOJYWJ.js.map +1 -0
  47. package/dist/chunk-4PY224XM.js +103 -0
  48. package/dist/chunk-4PY224XM.js.map +1 -0
  49. package/dist/chunk-64HUVJOZ.js +446 -0
  50. package/dist/chunk-64HUVJOZ.js.map +1 -0
  51. package/dist/chunk-6HKMZOI4.cjs +48 -0
  52. package/dist/chunk-6HKMZOI4.cjs.map +1 -0
  53. package/dist/chunk-A2S32RZN.js +138 -0
  54. package/dist/chunk-A2S32RZN.js.map +1 -0
  55. package/dist/chunk-E2QLTHKN.cjs +70 -0
  56. package/dist/chunk-E2QLTHKN.cjs.map +1 -0
  57. package/dist/chunk-JLPJKNRZ.js +37 -0
  58. package/dist/chunk-JLPJKNRZ.js.map +1 -0
  59. package/dist/chunk-JM7QRXXK.js +330 -0
  60. package/dist/chunk-JM7QRXXK.js.map +1 -0
  61. package/dist/chunk-KDZER3PU.cjs +43 -0
  62. package/dist/chunk-KDZER3PU.cjs.map +1 -0
  63. package/dist/chunk-N5MKAD7J.cjs +109 -0
  64. package/dist/chunk-N5MKAD7J.cjs.map +1 -0
  65. package/dist/chunk-QE4VLQYN.cjs +337 -0
  66. package/dist/chunk-QE4VLQYN.cjs.map +1 -0
  67. package/dist/chunk-R6MO3QIP.js +46 -0
  68. package/dist/chunk-R6MO3QIP.js.map +1 -0
  69. package/dist/chunk-U2ROR6AY.cjs +476 -0
  70. package/dist/chunk-U2ROR6AY.cjs.map +1 -0
  71. package/dist/chunk-ZP5XRVVH.cjs +141 -0
  72. package/dist/chunk-ZP5XRVVH.cjs.map +1 -0
  73. package/dist/cli/index.cjs +1308 -0
  74. package/dist/components/index.cjs +541 -0
  75. package/dist/components/index.cjs.map +1 -0
  76. package/dist/components/index.d.cts +165 -0
  77. package/dist/components/index.d.ts +165 -0
  78. package/dist/components/index.js +527 -0
  79. package/dist/components/index.js.map +1 -0
  80. package/dist/editor/index.cjs +1083 -0
  81. package/dist/editor/index.cjs.map +1 -0
  82. package/dist/editor/index.d.cts +133 -0
  83. package/dist/editor/index.d.ts +133 -0
  84. package/dist/editor/index.js +1051 -0
  85. package/dist/editor/index.js.map +1 -0
  86. package/dist/index-Cgzphklp.d.ts +266 -0
  87. package/dist/index-vjlZDWNr.d.cts +266 -0
  88. package/dist/index.cjs +368 -0
  89. package/dist/index.cjs.map +1 -0
  90. package/dist/index.d.cts +27 -0
  91. package/dist/index.d.ts +27 -0
  92. package/dist/index.js +208 -0
  93. package/dist/index.js.map +1 -0
  94. package/dist/lib/index.cjs +120 -0
  95. package/dist/lib/index.cjs.map +1 -0
  96. package/dist/lib/index.d.cts +4 -0
  97. package/dist/lib/index.d.ts +4 -0
  98. package/dist/lib/index.js +7 -0
  99. package/dist/lib/index.js.map +1 -0
  100. package/dist/styles/admin.css +657 -0
  101. package/dist/styles/blog.css +851 -0
  102. package/dist/styles/editor.css +452 -0
  103. package/dist/styles/globals.css +270 -0
  104. package/dist/styles/prose.css +299 -0
  105. package/dist/types-CBEEBR4A.d.cts +732 -0
  106. package/dist/types-CBEEBR4A.d.ts +732 -0
  107. package/package.json +134 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/editor/extensions/image-upload.ts","../../src/editor/extensions/callout.ts","../../src/editor/extensions/faq.ts","../../src/editor/extensions/toc.ts","../../src/editor/extensions/code-block.ts","../../src/editor/extensions/slash-command.ts","../../src/editor/Editor.tsx","../../src/editor/renderer.ts"],"names":["Image","Plugin","PluginKey","Node","mergeAttributes","CodeBlockLowlight","Extension","state","useState","useRef","useCallback","useEditor","StarterKit","Placeholder","Link","Underline","Highlight","Typography","TaskList","TaskItem","Table","TableRow","TableCell","TableHeader","editor","useEffect","jsxs","jsx","BubbleMenu","EditorContent"],"mappings":"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","file":"index.cjs","sourcesContent":["import { Image } from '@tiptap/extension-image';\nimport { Plugin, PluginKey } from '@tiptap/pm/state';\n\nexport interface ImageUploadOptions {\n uploadFn: (file: File) => Promise<{ url: string; alt?: string }>;\n maxSize?: number;\n allowedTypes?: string[];\n}\n\ndeclare module '@tiptap/core' {\n interface Commands<ReturnType> {\n imageUpload: {\n uploadImage: (file: File) => ReturnType;\n };\n }\n}\n\nexport const ImageUpload = Image.extend({\n addOptions() {\n return {\n ...this.parent?.(),\n uploadFn: async (_file: File) => ({ url: '' }),\n maxSize: 10 * 1024 * 1024,\n allowedTypes: ['image/jpeg', 'image/png', 'image/gif', 'image/webp', 'image/svg+xml'],\n };\n },\n\n addAttributes() {\n return {\n ...this.parent?.(),\n loading: {\n default: false,\n renderHTML: (attributes: Record<string, any>) => {\n if (!attributes.loading) return {};\n return { 'data-loading': 'true' };\n },\n },\n width: { default: null },\n height: { default: null },\n caption: {\n default: null,\n renderHTML: (attributes: Record<string, any>) => {\n if (!attributes.caption) return {};\n return { 'data-caption': attributes.caption };\n },\n },\n };\n },\n\n addCommands() {\n return {\n ...this.parent?.(),\n uploadImage:\n (file: File) =>\n ({ commands, editor }: any) => {\n const opts = this.options as any;\n const { uploadFn, maxSize, allowedTypes } = opts;\n\n if (maxSize && file.size > maxSize) {\n console.error(`File too large: ${file.size} > ${maxSize}`);\n return false;\n }\n\n if (allowedTypes && !allowedTypes.includes(file.type)) {\n console.error(`File type not allowed: ${file.type}`);\n return false;\n }\n\n // Insert placeholder\n const placeholderUrl = URL.createObjectURL(file);\n commands.insertContent({\n type: 'image',\n attrs: { src: placeholderUrl, loading: true, alt: file.name },\n });\n\n // Upload and replace\n uploadFn(file)\n .then((result: any) => {\n const { state } = editor;\n const { doc } = state;\n let pos: number | null = null;\n\n doc.descendants((node: any, nodePos: number) => {\n if (node.type.name === 'image' && node.attrs.src === placeholderUrl) {\n pos = nodePos;\n return false;\n }\n });\n\n if (pos !== null) {\n editor.chain().focus().setNodeSelection(pos).updateAttributes('image', {\n src: result.url,\n alt: result.alt || file.name,\n loading: false,\n }).run();\n }\n\n URL.revokeObjectURL(placeholderUrl);\n })\n .catch((err: any) => {\n console.error('Image upload failed:', err);\n URL.revokeObjectURL(placeholderUrl);\n });\n\n return true;\n },\n } as any;\n },\n\n addProseMirrorPlugins() {\n const opts = this.options as any;\n const { uploadFn, maxSize, allowedTypes } = opts;\n const editorRef = this.editor;\n\n return [\n new Plugin({\n key: new PluginKey('imageUploadDrop'),\n props: {\n handleDOMEvents: {\n drop(view, event) {\n const files = event.dataTransfer?.files;\n if (!files || files.length === 0) return false;\n\n const imageFiles = Array.from(files).filter((f) =>\n (allowedTypes || []).includes(f.type)\n );\n\n if (imageFiles.length === 0) return false;\n\n event.preventDefault();\n\n for (const file of imageFiles) {\n if (maxSize && file.size > maxSize) continue;\n editorRef.commands.uploadImage(file);\n }\n\n return true;\n },\n paste(view, event) {\n const files = event.clipboardData?.files;\n if (!files || files.length === 0) return false;\n\n const imageFiles = Array.from(files).filter((f) =>\n (allowedTypes || []).includes(f.type)\n );\n\n if (imageFiles.length === 0) return false;\n\n event.preventDefault();\n\n for (const file of imageFiles) {\n if (maxSize && file.size > maxSize) continue;\n editorRef.commands.uploadImage(file);\n }\n\n return true;\n },\n },\n },\n }),\n ];\n },\n});\n","import { Node, mergeAttributes } from '@tiptap/core';\n\nexport type CalloutType = 'info' | 'warning' | 'tip' | 'danger';\n\ndeclare module '@tiptap/core' {\n interface Commands<ReturnType> {\n callout: {\n setCallout: (attrs?: { type?: CalloutType }) => ReturnType;\n toggleCallout: (attrs?: { type?: CalloutType }) => ReturnType;\n };\n }\n}\n\nexport const Callout = Node.create({\n name: 'callout',\n group: 'block',\n content: 'block+',\n defining: true,\n\n addAttributes() {\n return {\n type: {\n default: 'info',\n parseHTML: (element) => element.getAttribute('data-callout-type') || 'info',\n renderHTML: (attributes) => ({\n 'data-callout-type': attributes.type,\n }),\n },\n };\n },\n\n parseHTML() {\n return [{ tag: 'div[data-callout]' }];\n },\n\n renderHTML({ HTMLAttributes }) {\n return [\n 'div',\n mergeAttributes(HTMLAttributes, { 'data-callout': '', class: `nbk-callout nbk-callout-${HTMLAttributes['data-callout-type'] || 'info'}` }),\n 0,\n ];\n },\n\n addCommands() {\n return {\n setCallout:\n (attrs: any) =>\n ({ commands }: any) => {\n return commands.wrapIn(this.name, attrs);\n },\n toggleCallout:\n (attrs: any) =>\n ({ commands }: any) => {\n return commands.toggleWrap(this.name, attrs);\n },\n } as any;\n },\n});\n","import { Node, mergeAttributes } from '@tiptap/core';\n\ndeclare module '@tiptap/core' {\n interface Commands<ReturnType> {\n faq: {\n insertFAQ: () => ReturnType;\n };\n faqQuestion: Record<string, never>;\n faqAnswer: Record<string, never>;\n }\n}\n\nexport const FAQItem = Node.create({\n name: 'faqItem',\n group: 'block',\n content: 'faqQuestion faqAnswer',\n defining: true,\n\n parseHTML() {\n return [{ tag: 'div[data-faq-item]' }];\n },\n\n renderHTML({ HTMLAttributes }) {\n return ['div', mergeAttributes(HTMLAttributes, { 'data-faq-item': '', class: 'nbk-faq-item' }), 0];\n },\n});\n\nexport const FAQQuestion = Node.create({\n name: 'faqQuestion',\n content: 'inline*',\n defining: true,\n\n parseHTML() {\n return [{ tag: 'div[data-faq-question]' }];\n },\n\n renderHTML({ HTMLAttributes }) {\n return ['div', mergeAttributes(HTMLAttributes, { 'data-faq-question': '', class: 'nbk-faq-question' }), 0];\n },\n});\n\nexport const FAQAnswer = Node.create({\n name: 'faqAnswer',\n content: 'block+',\n defining: true,\n\n parseHTML() {\n return [{ tag: 'div[data-faq-answer]' }];\n },\n\n renderHTML({ HTMLAttributes }) {\n return ['div', mergeAttributes(HTMLAttributes, { 'data-faq-answer': '', class: 'nbk-faq-answer' }), 0];\n },\n});\n\nexport const FAQ = Node.create({\n name: 'faq',\n group: 'block',\n content: 'faqItem+',\n defining: true,\n\n parseHTML() {\n return [{ tag: 'div[data-faq]' }];\n },\n\n renderHTML({ HTMLAttributes }) {\n return ['div', mergeAttributes(HTMLAttributes, { 'data-faq': '', class: 'nbk-faq' }), 0];\n },\n\n addCommands() {\n return {\n insertFAQ:\n () =>\n ({ chain }: any) => {\n return chain()\n .insertContent({\n type: 'faq',\n content: [\n {\n type: 'faqItem',\n content: [\n { type: 'faqQuestion', content: [{ type: 'text', text: 'Question?' }] },\n { type: 'faqAnswer', content: [{ type: 'paragraph', content: [{ type: 'text', text: 'Answer.' }] }] },\n ],\n },\n ],\n })\n .run();\n },\n } as any;\n },\n});\n","import { Node, mergeAttributes } from '@tiptap/core';\n\ndeclare module '@tiptap/core' {\n interface Commands<ReturnType> {\n tableOfContents: {\n insertTableOfContents: () => ReturnType;\n };\n }\n}\n\nexport const TableOfContents = Node.create({\n name: 'tableOfContents',\n group: 'block',\n atom: true,\n\n parseHTML() {\n return [{ tag: 'div[data-toc]' }];\n },\n\n renderHTML({ HTMLAttributes }) {\n return [\n 'div',\n mergeAttributes(HTMLAttributes, {\n 'data-toc': '',\n class: 'nbk-toc-placeholder',\n }),\n 'Table of Contents (auto-generated)',\n ];\n },\n\n addCommands() {\n return {\n insertTableOfContents:\n () =>\n ({ commands }: any) => {\n return commands.insertContent({ type: this.name });\n },\n } as any;\n },\n});\n","import CodeBlockLowlight from '@tiptap/extension-code-block';\n\ndeclare module '@tiptap/core' {\n interface Commands<ReturnType> {\n codeBlockEnhanced: {\n setCodeBlock: (attrs?: { language?: string }) => ReturnType;\n toggleCodeBlock: (attrs?: { language?: string }) => ReturnType;\n };\n }\n}\n\nexport const CodeBlockEnhanced = CodeBlockLowlight.extend({\n addAttributes() {\n return {\n ...this.parent?.(),\n language: {\n default: 'plaintext',\n parseHTML: (element) =>\n element.getAttribute('data-language') ||\n element.querySelector('code')?.className?.replace('language-', '') ||\n 'plaintext',\n renderHTML: (attributes) => ({\n 'data-language': attributes.language,\n }),\n },\n filename: {\n default: null,\n parseHTML: (element) => element.getAttribute('data-filename'),\n renderHTML: (attributes) => {\n if (!attributes.filename) return {};\n return { 'data-filename': attributes.filename };\n },\n },\n };\n },\n});\n\nexport const SUPPORTED_LANGUAGES = [\n 'plaintext',\n 'javascript',\n 'typescript',\n 'jsx',\n 'tsx',\n 'html',\n 'css',\n 'scss',\n 'json',\n 'python',\n 'rust',\n 'go',\n 'java',\n 'kotlin',\n 'swift',\n 'ruby',\n 'php',\n 'c',\n 'cpp',\n 'csharp',\n 'sql',\n 'bash',\n 'shell',\n 'yaml',\n 'toml',\n 'markdown',\n 'graphql',\n 'docker',\n 'nginx',\n];\n","import { Extension } from '@tiptap/core';\nimport { Plugin, PluginKey } from '@tiptap/pm/state';\nimport type { Editor } from '@tiptap/core';\n\nexport interface SlashCommandItem {\n title: string;\n description: string;\n icon: string;\n command: (editor: Editor) => void;\n}\n\nexport const defaultSlashCommands: SlashCommandItem[] = [\n {\n title: 'Heading 2',\n description: 'Large section heading',\n icon: 'H2',\n command: (editor) => editor.chain().focus().toggleHeading({ level: 2 }).run(),\n },\n {\n title: 'Heading 3',\n description: 'Medium section heading',\n icon: 'H3',\n command: (editor) => editor.chain().focus().toggleHeading({ level: 3 }).run(),\n },\n {\n title: 'Heading 4',\n description: 'Small section heading',\n icon: 'H4',\n command: (editor) => editor.chain().focus().toggleHeading({ level: 4 }).run(),\n },\n {\n title: 'Bullet List',\n description: 'Create a simple bullet list',\n icon: '•',\n command: (editor) => editor.chain().focus().toggleBulletList().run(),\n },\n {\n title: 'Numbered List',\n description: 'Create a numbered list',\n icon: '1.',\n command: (editor) => editor.chain().focus().toggleOrderedList().run(),\n },\n {\n title: 'Task List',\n description: 'Create a checklist',\n icon: '☑',\n command: (editor) => editor.chain().focus().toggleTaskList().run(),\n },\n {\n title: 'Blockquote',\n description: 'Add a quote block',\n icon: '\"',\n command: (editor) => editor.chain().focus().toggleBlockquote().run(),\n },\n {\n title: 'Code Block',\n description: 'Add a code snippet',\n icon: '</>',\n command: (editor) => editor.chain().focus().toggleCodeBlock().run(),\n },\n {\n title: 'Divider',\n description: 'Add a horizontal divider',\n icon: '—',\n command: (editor) => editor.chain().focus().setHorizontalRule().run(),\n },\n {\n title: 'Image',\n description: 'Upload or embed an image',\n icon: '🖼',\n command: (editor) => {\n const input = document.createElement('input');\n input.type = 'file';\n input.accept = 'image/*';\n input.onchange = () => {\n const file = input.files?.[0];\n if (file) {\n editor.commands.uploadImage(file);\n }\n };\n input.click();\n },\n },\n {\n title: 'Table',\n description: 'Add a table',\n icon: '⊞',\n command: (editor) => editor.chain().focus().insertTable({ rows: 3, cols: 3, withHeaderRow: true }).run(),\n },\n {\n title: 'Callout',\n description: 'Add an info callout box',\n icon: 'ℹ',\n command: (editor) => editor.chain().focus().setCallout({ type: 'info' }).run(),\n },\n {\n title: 'FAQ',\n description: 'Add a FAQ section',\n icon: '?',\n command: (editor) => editor.chain().focus().insertFAQ().run(),\n },\n {\n title: 'Table of Contents',\n description: 'Auto-generated from headings',\n icon: '≡',\n command: (editor) => editor.chain().focus().insertTableOfContents().run(),\n },\n];\n\nexport interface SlashCommandState {\n isOpen: boolean;\n query: string;\n position: { top: number; left: number } | null;\n selectedIndex: number;\n items: SlashCommandItem[];\n}\n\nexport const SlashCommand = Extension.create({\n name: 'slashCommand',\n\n addOptions() {\n return {\n commands: defaultSlashCommands,\n onStateChange: (_state: SlashCommandState) => {},\n };\n },\n\n addStorage() {\n return {\n deleteSlashAndRun: (_item: SlashCommandItem) => {},\n };\n },\n\n addProseMirrorPlugins() {\n const { commands, onStateChange } = this.options;\n const editorRef = this.editor;\n const storage = this.editor.storage.slashCommand;\n\n let state: SlashCommandState = {\n isOpen: false,\n query: '',\n position: null,\n selectedIndex: 0,\n items: commands,\n };\n\n function updateState(partial: Partial<SlashCommandState>) {\n state = { ...state, ...partial };\n onStateChange(state);\n }\n\n function deleteSlashText(view: any) {\n const { $from } = view.state.selection;\n const textBefore = $from.parent.textContent.slice(0, $from.parentOffset);\n const slashIndex = textBefore.lastIndexOf('/');\n if (slashIndex >= 0) {\n const start = $from.start() + slashIndex;\n const end = $from.pos;\n view.dispatch(view.state.tr.delete(start, end));\n }\n }\n\n // Expose a method for the click handler to call\n storage.deleteSlashAndRun = (item: SlashCommandItem) => {\n deleteSlashText(editorRef.view);\n item.command(editorRef);\n updateState({ isOpen: false, query: '', selectedIndex: 0 });\n };\n\n return [\n new Plugin({\n key: new PluginKey('slashCommand'),\n props: {\n handleKeyDown(view, event) {\n if (!state.isOpen) {\n return false;\n }\n\n // Menu is open\n if (event.key === 'ArrowDown') {\n event.preventDefault();\n updateState({\n selectedIndex: (state.selectedIndex + 1) % state.items.length,\n });\n return true;\n }\n\n if (event.key === 'ArrowUp') {\n event.preventDefault();\n updateState({\n selectedIndex:\n (state.selectedIndex - 1 + state.items.length) % state.items.length,\n });\n return true;\n }\n\n if (event.key === 'Enter') {\n event.preventDefault();\n const item = state.items[state.selectedIndex];\n if (item) {\n deleteSlashText(view);\n item.command(editorRef);\n }\n updateState({ isOpen: false, query: '', selectedIndex: 0 });\n return true;\n }\n\n if (event.key === 'Escape') {\n updateState({ isOpen: false, query: '', selectedIndex: 0 });\n return true;\n }\n\n return false;\n },\n\n handleTextInput(view, from, _to, text) {\n const { $from } = view.state.selection;\n const textBefore = $from.parent.textContent.slice(0, $from.parentOffset) + text;\n\n const slashIndex = textBefore.lastIndexOf('/');\n if (slashIndex >= 0) {\n const query = textBefore.slice(slashIndex + 1).toLowerCase();\n const filtered = commands.filter(\n (cmd: SlashCommandItem) =>\n cmd.title.toLowerCase().includes(query) ||\n cmd.description.toLowerCase().includes(query)\n );\n\n if (filtered.length > 0) {\n const coords = view.coordsAtPos(from);\n updateState({\n isOpen: true,\n query,\n position: { top: coords.bottom + 4, left: coords.left },\n items: filtered,\n selectedIndex: 0,\n });\n } else {\n updateState({ isOpen: false, query: '', selectedIndex: 0 });\n }\n } else if (state.isOpen) {\n updateState({ isOpen: false, query: '', selectedIndex: 0 });\n }\n\n return false;\n },\n },\n }),\n ];\n },\n});\n","'use client';\n\nimport React, { useCallback, useEffect, useRef, useState } from 'react';\nimport { useEditor, EditorContent, BubbleMenu } from '@tiptap/react';\nimport StarterKit from '@tiptap/starter-kit';\nimport Placeholder from '@tiptap/extension-placeholder';\nimport Link from '@tiptap/extension-link';\nimport Underline from '@tiptap/extension-underline';\nimport Highlight from '@tiptap/extension-highlight';\nimport Typography from '@tiptap/extension-typography';\nimport TaskList from '@tiptap/extension-task-list';\nimport TaskItem from '@tiptap/extension-task-item';\nimport Table from '@tiptap/extension-table';\nimport TableRow from '@tiptap/extension-table-row';\nimport TableCell from '@tiptap/extension-table-cell';\nimport TableHeader from '@tiptap/extension-table-header';\n\nimport { ImageUpload } from './extensions/image-upload';\nimport { Callout } from './extensions/callout';\nimport { FAQ, FAQItem, FAQQuestion, FAQAnswer } from './extensions/faq';\nimport { TableOfContents } from './extensions/toc';\nimport { CodeBlockEnhanced } from './extensions/code-block';\nimport { SlashCommand, type SlashCommandState, type SlashCommandItem } from './extensions/slash-command';\n\nexport interface BlogEditorProps {\n content?: Record<string, unknown>;\n onChange?: (content: Record<string, unknown>) => void;\n onSave?: (content: Record<string, unknown>) => void;\n uploadImage?: (file: File) => Promise<{ url: string; alt?: string }>;\n placeholder?: string;\n autosaveInterval?: number;\n className?: string;\n}\n\nexport function BlogEditor({\n content,\n onChange,\n onSave,\n uploadImage,\n placeholder = 'Start writing your post... Type \"/\" for commands',\n autosaveInterval = 30000,\n className = '',\n}: BlogEditorProps) {\n const [slashState, setSlashState] = useState<SlashCommandState>({\n isOpen: false,\n query: '',\n position: null,\n selectedIndex: 0,\n items: [],\n });\n const [wordCount, setWordCount] = useState(0);\n const [isSaving, setIsSaving] = useState(false);\n const autosaveTimerRef = useRef<ReturnType<typeof setInterval> | null>(null);\n const lastSavedRef = useRef<string>('');\n\n const defaultUpload = useCallback(async (file: File) => {\n if (!uploadImage) {\n return { url: URL.createObjectURL(file), alt: file.name };\n }\n return uploadImage(file);\n }, [uploadImage]);\n\n const editor = useEditor({\n extensions: [\n StarterKit.configure({\n codeBlock: false,\n dropcursor: { color: '#2563eb', width: 2 },\n }),\n Placeholder.configure({ placeholder }),\n Link.configure({ openOnClick: false, HTMLAttributes: { class: 'nbk-link' } }),\n Underline,\n Highlight.configure({ multicolor: false }),\n Typography,\n TaskList,\n TaskItem.configure({ nested: true }),\n Table.configure({ resizable: true }),\n TableRow,\n TableCell,\n TableHeader,\n ImageUpload.configure({ uploadFn: defaultUpload } as any),\n CodeBlockEnhanced,\n Callout,\n FAQ,\n FAQItem,\n FAQQuestion,\n FAQAnswer,\n TableOfContents,\n SlashCommand.configure({\n onStateChange: setSlashState,\n }),\n ],\n content: content || { type: 'doc', content: [{ type: 'paragraph' }] },\n onUpdate: ({ editor }) => {\n const json = editor.getJSON();\n onChange?.(json);\n const text = editor.getText();\n setWordCount(text.trim() ? text.trim().split(/\\s+/).length : 0);\n },\n editorProps: {\n attributes: {\n class: `nbk-editor-content ${className}`,\n },\n },\n });\n\n // Autosave\n useEffect(() => {\n if (!onSave || !autosaveInterval || !editor) return;\n\n autosaveTimerRef.current = setInterval(() => {\n const json = JSON.stringify(editor.getJSON());\n if (json !== lastSavedRef.current) {\n setIsSaving(true);\n onSave(editor.getJSON());\n lastSavedRef.current = json;\n setTimeout(() => setIsSaving(false), 1000);\n }\n }, autosaveInterval);\n\n return () => {\n if (autosaveTimerRef.current) clearInterval(autosaveTimerRef.current);\n };\n }, [editor, onSave, autosaveInterval]);\n\n const readingTime = Math.max(1, Math.ceil(wordCount / 200));\n\n return (\n <div className=\"nbk-editor\">\n {/* Toolbar */}\n {editor && (\n <div className=\"nbk-editor-toolbar\">\n <div className=\"nbk-toolbar-group\">\n <button\n onClick={() => editor.chain().focus().toggleBold().run()}\n className={editor.isActive('bold') ? 'nbk-toolbar-btn active' : 'nbk-toolbar-btn'}\n title=\"Bold\"\n >\n <strong>B</strong>\n </button>\n <button\n onClick={() => editor.chain().focus().toggleItalic().run()}\n className={editor.isActive('italic') ? 'nbk-toolbar-btn active' : 'nbk-toolbar-btn'}\n title=\"Italic\"\n >\n <em>I</em>\n </button>\n <button\n onClick={() => editor.chain().focus().toggleUnderline().run()}\n className={editor.isActive('underline') ? 'nbk-toolbar-btn active' : 'nbk-toolbar-btn'}\n title=\"Underline\"\n >\n <u>U</u>\n </button>\n <button\n onClick={() => editor.chain().focus().toggleStrike().run()}\n className={editor.isActive('strike') ? 'nbk-toolbar-btn active' : 'nbk-toolbar-btn'}\n title=\"Strikethrough\"\n >\n <s>S</s>\n </button>\n <button\n onClick={() => editor.chain().focus().toggleCode().run()}\n className={editor.isActive('code') ? 'nbk-toolbar-btn active' : 'nbk-toolbar-btn'}\n title=\"Inline Code\"\n >\n {'</>'}\n </button>\n <button\n onClick={() => editor.chain().focus().toggleHighlight().run()}\n className={editor.isActive('highlight') ? 'nbk-toolbar-btn active' : 'nbk-toolbar-btn'}\n title=\"Highlight\"\n >\n H\n </button>\n </div>\n\n <div className=\"nbk-toolbar-divider\" />\n\n <div className=\"nbk-toolbar-group\">\n {[2, 3, 4].map((level) => (\n <button\n key={level}\n onClick={() => editor.chain().focus().toggleHeading({ level: level as 2 | 3 | 4 }).run()}\n className={editor.isActive('heading', { level }) ? 'nbk-toolbar-btn active' : 'nbk-toolbar-btn'}\n title={`Heading ${level}`}\n >\n H{level}\n </button>\n ))}\n </div>\n\n <div className=\"nbk-toolbar-divider\" />\n\n <div className=\"nbk-toolbar-group\">\n <button\n onClick={() => editor.chain().focus().toggleBulletList().run()}\n className={editor.isActive('bulletList') ? 'nbk-toolbar-btn active' : 'nbk-toolbar-btn'}\n title=\"Bullet List\"\n >\n &#8226;\n </button>\n <button\n onClick={() => editor.chain().focus().toggleOrderedList().run()}\n className={editor.isActive('orderedList') ? 'nbk-toolbar-btn active' : 'nbk-toolbar-btn'}\n title=\"Numbered List\"\n >\n 1.\n </button>\n <button\n onClick={() => editor.chain().focus().toggleTaskList().run()}\n className={editor.isActive('taskList') ? 'nbk-toolbar-btn active' : 'nbk-toolbar-btn'}\n title=\"Task List\"\n >\n &#9745;\n </button>\n </div>\n\n <div className=\"nbk-toolbar-divider\" />\n\n <div className=\"nbk-toolbar-group\">\n <button\n onClick={() => editor.chain().focus().toggleBlockquote().run()}\n className={editor.isActive('blockquote') ? 'nbk-toolbar-btn active' : 'nbk-toolbar-btn'}\n title=\"Quote\"\n >\n &ldquo;\n </button>\n <button\n onClick={() => editor.chain().focus().toggleCodeBlock().run()}\n className={editor.isActive('codeBlock') ? 'nbk-toolbar-btn active' : 'nbk-toolbar-btn'}\n title=\"Code Block\"\n >\n {'{ }'}\n </button>\n <button\n onClick={() => editor.chain().focus().setHorizontalRule().run()}\n className=\"nbk-toolbar-btn\"\n title=\"Divider\"\n >\n &mdash;\n </button>\n <button\n onClick={() => editor.chain().focus().insertTable({ rows: 3, cols: 3, withHeaderRow: true }).run()}\n className=\"nbk-toolbar-btn\"\n title=\"Table\"\n >\n &#8862;\n </button>\n </div>\n\n <div className=\"nbk-toolbar-divider\" />\n\n <div className=\"nbk-toolbar-group\">\n <button\n onClick={() => {\n const url = window.prompt('Enter URL');\n if (url) editor.chain().focus().setLink({ href: url }).run();\n }}\n className={editor.isActive('link') ? 'nbk-toolbar-btn active' : 'nbk-toolbar-btn'}\n title=\"Link\"\n >\n &#128279;\n </button>\n <button\n onClick={() => {\n const input = document.createElement('input');\n input.type = 'file';\n input.accept = 'image/*';\n input.onchange = () => {\n const file = input.files?.[0];\n if (file) editor.commands.uploadImage(file);\n };\n input.click();\n }}\n className=\"nbk-toolbar-btn\"\n title=\"Upload Image\"\n >\n &#128247;\n </button>\n </div>\n </div>\n )}\n\n {/* Bubble Menu */}\n {editor && (\n <BubbleMenu editor={editor} tippyOptions={{ duration: 100 }}>\n <div className=\"nbk-bubble-menu\">\n <button onClick={() => editor.chain().focus().toggleBold().run()} className={editor.isActive('bold') ? 'active' : ''}>B</button>\n <button onClick={() => editor.chain().focus().toggleItalic().run()} className={editor.isActive('italic') ? 'active' : ''}>I</button>\n <button onClick={() => editor.chain().focus().toggleCode().run()} className={editor.isActive('code') ? 'active' : ''}>{'</>'}</button>\n <button\n onClick={() => {\n const url = window.prompt('Enter URL');\n if (url) editor.chain().focus().setLink({ href: url }).run();\n }}\n className={editor.isActive('link') ? 'active' : ''}\n >\n Link\n </button>\n </div>\n </BubbleMenu>\n )}\n\n {/* Editor Content */}\n <EditorContent editor={editor} />\n\n {/* Slash Command Menu */}\n {slashState.isOpen && slashState.position && (\n <div\n className=\"nbk-slash-menu\"\n style={{\n position: 'fixed',\n top: slashState.position.top,\n left: slashState.position.left,\n }}\n >\n {slashState.items.map((item: SlashCommandItem, index: number) => (\n <button\n key={item.title}\n className={`nbk-slash-item ${index === slashState.selectedIndex ? 'selected' : ''}`}\n onMouseDown={(e) => {\n e.preventDefault();\n editor!.storage.slashCommand.deleteSlashAndRun(item);\n }}\n >\n <span className=\"nbk-slash-icon\">{item.icon}</span>\n <div>\n <div className=\"nbk-slash-title\">{item.title}</div>\n <div className=\"nbk-slash-desc\">{item.description}</div>\n </div>\n </button>\n ))}\n </div>\n )}\n\n {/* Status Bar */}\n <div className=\"nbk-editor-status\">\n <span>{wordCount} words</span>\n <span>{readingTime} min read</span>\n {isSaving && <span className=\"nbk-saving\">Saving...</span>}\n </div>\n </div>\n );\n}\n","import type { BlockContent } from '../lib/types';\n\nexport function renderBlocksToHTML(doc: { type: string; content?: BlockContent[] }): string {\n if (!doc.content) return '';\n return doc.content.map(renderNode).join('');\n}\n\nfunction renderNode(node: BlockContent): string {\n switch (node.type) {\n case 'paragraph':\n return `<p>${renderInline(node)}</p>`;\n\n case 'heading': {\n const level = (node.attrs?.level as number) || 2;\n const text = renderInline(node);\n const id = slugify(stripTags(text));\n return `<h${level} id=\"${id}\">${text}</h${level}>`;\n }\n\n case 'bulletList':\n return `<ul>${renderChildren(node)}</ul>`;\n\n case 'orderedList':\n return `<ol>${renderChildren(node)}</ol>`;\n\n case 'listItem':\n return `<li>${renderChildren(node)}</li>`;\n\n case 'taskList':\n return `<ul class=\"nbk-task-list\">${renderChildren(node)}</ul>`;\n\n case 'taskItem': {\n const checked = node.attrs?.checked ? 'checked' : '';\n return `<li class=\"nbk-task-item\" data-checked=\"${checked}\"><input type=\"checkbox\" ${checked} disabled />${renderChildren(node)}</li>`;\n }\n\n case 'blockquote':\n return `<blockquote>${renderChildren(node)}</blockquote>`;\n\n case 'codeBlock': {\n const lang = (node.attrs?.language as string) || 'plaintext';\n const filename = node.attrs?.filename as string;\n const code = escapeHtml(getTextContent(node));\n const header = filename ? `<div class=\"nbk-code-header\">${escapeHtml(filename)}</div>` : '';\n return `${header}<pre><code class=\"language-${lang}\">${code}</code></pre>`;\n }\n\n case 'image': {\n const src = node.attrs?.src as string || '';\n const alt = node.attrs?.alt as string || '';\n const caption = node.attrs?.caption as string;\n const width = node.attrs?.width;\n const height = node.attrs?.height;\n let img = `<img src=\"${escapeAttr(src)}\" alt=\"${escapeAttr(alt)}\"`;\n if (width) img += ` width=\"${width}\"`;\n if (height) img += ` height=\"${height}\"`;\n img += ' loading=\"lazy\" />';\n if (caption) {\n return `<figure>${img}<figcaption>${escapeHtml(caption)}</figcaption></figure>`;\n }\n return img;\n }\n\n case 'horizontalRule':\n return '<hr />';\n\n case 'table':\n return `<table>${renderChildren(node)}</table>`;\n\n case 'tableRow':\n return `<tr>${renderChildren(node)}</tr>`;\n\n case 'tableHeader':\n return `<th>${renderInline(node)}</th>`;\n\n case 'tableCell':\n return `<td>${renderInline(node)}</td>`;\n\n case 'callout': {\n const calloutType = (node.attrs?.type as string) || 'info';\n const icons: Record<string, string> = {\n info: 'ℹ️',\n warning: '⚠️',\n tip: '💡',\n danger: '🚨',\n };\n return `<div class=\"nbk-callout nbk-callout-${calloutType}\"><span class=\"nbk-callout-icon\">${icons[calloutType] || ''}</span><div class=\"nbk-callout-content\">${renderChildren(node)}</div></div>`;\n }\n\n case 'faq':\n return `<div class=\"nbk-faq\" itemscope itemtype=\"https://schema.org/FAQPage\">${renderChildren(node)}</div>`;\n\n case 'faqItem':\n return `<div class=\"nbk-faq-item\" itemscope itemprop=\"mainEntity\" itemtype=\"https://schema.org/Question\">${renderChildren(node)}</div>`;\n\n case 'faqQuestion':\n return `<h3 itemprop=\"name\">${renderInline(node)}</h3>`;\n\n case 'faqAnswer':\n return `<div itemprop=\"acceptedAnswer\" itemscope itemtype=\"https://schema.org/Answer\"><div itemprop=\"text\">${renderChildren(node)}</div></div>`;\n\n case 'tableOfContents':\n return '<div data-toc=\"true\" class=\"nbk-toc\"></div>';\n\n case 'html':\n return getTextContent(node);\n\n case 'embed': {\n const embedUrl = node.attrs?.src as string || '';\n return `<div class=\"nbk-embed\"><iframe src=\"${escapeAttr(embedUrl)}\" frameborder=\"0\" allowfullscreen loading=\"lazy\"></iframe></div>`;\n }\n\n case 'text':\n return renderTextNode(node);\n\n case 'hardBreak':\n return '<br />';\n\n default:\n if (node.content) return renderChildren(node);\n if (node.text) return escapeHtml(node.text);\n return '';\n }\n}\n\nfunction renderChildren(node: BlockContent): string {\n if (!node.content) return '';\n return node.content.map(renderNode).join('');\n}\n\nfunction renderInline(node: BlockContent): string {\n if (!node.content) return '';\n return node.content.map(renderNode).join('');\n}\n\nfunction renderTextNode(node: BlockContent): string {\n let text = escapeHtml(node.text || '');\n\n if (node.marks) {\n for (const mark of node.marks) {\n switch (mark.type) {\n case 'bold':\n text = `<strong>${text}</strong>`;\n break;\n case 'italic':\n text = `<em>${text}</em>`;\n break;\n case 'strike':\n text = `<s>${text}</s>`;\n break;\n case 'code':\n text = `<code>${text}</code>`;\n break;\n case 'underline':\n text = `<u>${text}</u>`;\n break;\n case 'highlight':\n text = `<mark>${text}</mark>`;\n break;\n case 'link': {\n const href = mark.attrs?.href as string || '';\n const target = href.startsWith('http') ? ' target=\"_blank\" rel=\"noopener noreferrer\"' : '';\n text = `<a href=\"${escapeAttr(href)}\"${target}>${text}</a>`;\n break;\n }\n }\n }\n }\n\n return text;\n}\n\nfunction getTextContent(node: BlockContent): string {\n if (node.text) return node.text;\n if (!node.content) return '';\n return node.content.map(getTextContent).join('');\n}\n\nfunction escapeHtml(str: string): string {\n return str\n .replace(/&/g, '&amp;')\n .replace(/</g, '&lt;')\n .replace(/>/g, '&gt;')\n .replace(/\"/g, '&quot;');\n}\n\nfunction escapeAttr(str: string): string {\n return str.replace(/\"/g, '&quot;').replace(/&/g, '&amp;');\n}\n\nfunction stripTags(html: string): string {\n return html.replace(/<[^>]+>/g, '');\n}\n\nfunction slugify(text: string): string {\n return text\n .toLowerCase()\n .trim()\n .replace(/[^\\w\\s-]/g, '')\n .replace(/[\\s_]+/g, '-')\n .replace(/-+/g, '-');\n}\n\nexport function extractHeadings(\n doc: { type: string; content?: BlockContent[] }\n): { id: string; text: string; level: number }[] {\n const headings: { id: string; text: string; level: number }[] = [];\n\n function walk(node: BlockContent) {\n if (node.type === 'heading') {\n const text = getTextContent(node);\n headings.push({\n id: slugify(text),\n text,\n level: (node.attrs?.level as number) || 2,\n });\n }\n if (node.content) {\n node.content.forEach(walk);\n }\n }\n\n if (doc.content) {\n doc.content.forEach(walk);\n }\n\n return headings;\n}\n\nexport function extractFAQItems(\n doc: { type: string; content?: BlockContent[] }\n): { question: string; answer: string }[] {\n const items: { question: string; answer: string }[] = [];\n\n function walk(node: BlockContent) {\n if (node.type === 'faqItem' && node.content) {\n const question = node.content.find((c) => c.type === 'faqQuestion');\n const answer = node.content.find((c) => c.type === 'faqAnswer');\n if (question && answer) {\n items.push({\n question: getTextContent(question),\n answer: renderChildren(answer),\n });\n }\n }\n if (node.content) {\n node.content.forEach(walk);\n }\n }\n\n if (doc.content) {\n doc.content.forEach(walk);\n }\n\n return items;\n}\n"]}
@@ -0,0 +1,133 @@
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+ import * as _tiptap_core from '@tiptap/core';
3
+ import { Node, Extension, Editor } from '@tiptap/core';
4
+ import * as _tiptap_extension_image from '@tiptap/extension-image';
5
+ import * as _tiptap_extension_code_block from '@tiptap/extension-code-block';
6
+
7
+ interface BlogEditorProps {
8
+ content?: Record<string, unknown>;
9
+ onChange?: (content: Record<string, unknown>) => void;
10
+ onSave?: (content: Record<string, unknown>) => void;
11
+ uploadImage?: (file: File) => Promise<{
12
+ url: string;
13
+ alt?: string;
14
+ }>;
15
+ placeholder?: string;
16
+ autosaveInterval?: number;
17
+ className?: string;
18
+ }
19
+ declare function BlogEditor({ content, onChange, onSave, uploadImage, placeholder, autosaveInterval, className, }: BlogEditorProps): react_jsx_runtime.JSX.Element;
20
+
21
+ interface BlockContent {
22
+ type: string;
23
+ attrs?: Record<string, unknown>;
24
+ content?: BlockContent[];
25
+ text?: string;
26
+ marks?: {
27
+ type: string;
28
+ attrs?: Record<string, unknown>;
29
+ }[];
30
+ }
31
+
32
+ declare function renderBlocksToHTML(doc: {
33
+ type: string;
34
+ content?: BlockContent[];
35
+ }): string;
36
+ declare function extractHeadings(doc: {
37
+ type: string;
38
+ content?: BlockContent[];
39
+ }): {
40
+ id: string;
41
+ text: string;
42
+ level: number;
43
+ }[];
44
+ declare function extractFAQItems(doc: {
45
+ type: string;
46
+ content?: BlockContent[];
47
+ }): {
48
+ question: string;
49
+ answer: string;
50
+ }[];
51
+
52
+ type CalloutType = 'info' | 'warning' | 'tip' | 'danger';
53
+ declare module '@tiptap/core' {
54
+ interface Commands<ReturnType> {
55
+ callout: {
56
+ setCallout: (attrs?: {
57
+ type?: CalloutType;
58
+ }) => ReturnType;
59
+ toggleCallout: (attrs?: {
60
+ type?: CalloutType;
61
+ }) => ReturnType;
62
+ };
63
+ }
64
+ }
65
+ declare const Callout: Node<any, any>;
66
+
67
+ declare module '@tiptap/core' {
68
+ interface Commands<ReturnType> {
69
+ faq: {
70
+ insertFAQ: () => ReturnType;
71
+ };
72
+ faqQuestion: Record<string, never>;
73
+ faqAnswer: Record<string, never>;
74
+ }
75
+ }
76
+ declare const FAQItem: Node<any, any>;
77
+ declare const FAQQuestion: Node<any, any>;
78
+ declare const FAQAnswer: Node<any, any>;
79
+ declare const FAQ: Node<any, any>;
80
+
81
+ declare module '@tiptap/core' {
82
+ interface Commands<ReturnType> {
83
+ tableOfContents: {
84
+ insertTableOfContents: () => ReturnType;
85
+ };
86
+ }
87
+ }
88
+ declare const TableOfContents: Node<any, any>;
89
+
90
+ declare module '@tiptap/core' {
91
+ interface Commands<ReturnType> {
92
+ imageUpload: {
93
+ uploadImage: (file: File) => ReturnType;
94
+ };
95
+ }
96
+ }
97
+ declare const ImageUpload: _tiptap_core.Node<_tiptap_extension_image.ImageOptions, any>;
98
+
99
+ declare module '@tiptap/core' {
100
+ interface Commands<ReturnType> {
101
+ codeBlockEnhanced: {
102
+ setCodeBlock: (attrs?: {
103
+ language?: string;
104
+ }) => ReturnType;
105
+ toggleCodeBlock: (attrs?: {
106
+ language?: string;
107
+ }) => ReturnType;
108
+ };
109
+ }
110
+ }
111
+ declare const CodeBlockEnhanced: _tiptap_core.Node<_tiptap_extension_code_block.CodeBlockOptions, any>;
112
+ declare const SUPPORTED_LANGUAGES: string[];
113
+
114
+ interface SlashCommandItem {
115
+ title: string;
116
+ description: string;
117
+ icon: string;
118
+ command: (editor: Editor) => void;
119
+ }
120
+ declare const defaultSlashCommands: SlashCommandItem[];
121
+ interface SlashCommandState {
122
+ isOpen: boolean;
123
+ query: string;
124
+ position: {
125
+ top: number;
126
+ left: number;
127
+ } | null;
128
+ selectedIndex: number;
129
+ items: SlashCommandItem[];
130
+ }
131
+ declare const SlashCommand: Extension<any, any>;
132
+
133
+ export { BlogEditor, type BlogEditorProps, Callout, CodeBlockEnhanced, FAQ, FAQAnswer, FAQItem, FAQQuestion, ImageUpload, SUPPORTED_LANGUAGES, SlashCommand, type SlashCommandItem, type SlashCommandState, TableOfContents, defaultSlashCommands, extractFAQItems, extractHeadings, renderBlocksToHTML };
@@ -0,0 +1,133 @@
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+ import * as _tiptap_core from '@tiptap/core';
3
+ import { Node, Extension, Editor } from '@tiptap/core';
4
+ import * as _tiptap_extension_image from '@tiptap/extension-image';
5
+ import * as _tiptap_extension_code_block from '@tiptap/extension-code-block';
6
+
7
+ interface BlogEditorProps {
8
+ content?: Record<string, unknown>;
9
+ onChange?: (content: Record<string, unknown>) => void;
10
+ onSave?: (content: Record<string, unknown>) => void;
11
+ uploadImage?: (file: File) => Promise<{
12
+ url: string;
13
+ alt?: string;
14
+ }>;
15
+ placeholder?: string;
16
+ autosaveInterval?: number;
17
+ className?: string;
18
+ }
19
+ declare function BlogEditor({ content, onChange, onSave, uploadImage, placeholder, autosaveInterval, className, }: BlogEditorProps): react_jsx_runtime.JSX.Element;
20
+
21
+ interface BlockContent {
22
+ type: string;
23
+ attrs?: Record<string, unknown>;
24
+ content?: BlockContent[];
25
+ text?: string;
26
+ marks?: {
27
+ type: string;
28
+ attrs?: Record<string, unknown>;
29
+ }[];
30
+ }
31
+
32
+ declare function renderBlocksToHTML(doc: {
33
+ type: string;
34
+ content?: BlockContent[];
35
+ }): string;
36
+ declare function extractHeadings(doc: {
37
+ type: string;
38
+ content?: BlockContent[];
39
+ }): {
40
+ id: string;
41
+ text: string;
42
+ level: number;
43
+ }[];
44
+ declare function extractFAQItems(doc: {
45
+ type: string;
46
+ content?: BlockContent[];
47
+ }): {
48
+ question: string;
49
+ answer: string;
50
+ }[];
51
+
52
+ type CalloutType = 'info' | 'warning' | 'tip' | 'danger';
53
+ declare module '@tiptap/core' {
54
+ interface Commands<ReturnType> {
55
+ callout: {
56
+ setCallout: (attrs?: {
57
+ type?: CalloutType;
58
+ }) => ReturnType;
59
+ toggleCallout: (attrs?: {
60
+ type?: CalloutType;
61
+ }) => ReturnType;
62
+ };
63
+ }
64
+ }
65
+ declare const Callout: Node<any, any>;
66
+
67
+ declare module '@tiptap/core' {
68
+ interface Commands<ReturnType> {
69
+ faq: {
70
+ insertFAQ: () => ReturnType;
71
+ };
72
+ faqQuestion: Record<string, never>;
73
+ faqAnswer: Record<string, never>;
74
+ }
75
+ }
76
+ declare const FAQItem: Node<any, any>;
77
+ declare const FAQQuestion: Node<any, any>;
78
+ declare const FAQAnswer: Node<any, any>;
79
+ declare const FAQ: Node<any, any>;
80
+
81
+ declare module '@tiptap/core' {
82
+ interface Commands<ReturnType> {
83
+ tableOfContents: {
84
+ insertTableOfContents: () => ReturnType;
85
+ };
86
+ }
87
+ }
88
+ declare const TableOfContents: Node<any, any>;
89
+
90
+ declare module '@tiptap/core' {
91
+ interface Commands<ReturnType> {
92
+ imageUpload: {
93
+ uploadImage: (file: File) => ReturnType;
94
+ };
95
+ }
96
+ }
97
+ declare const ImageUpload: _tiptap_core.Node<_tiptap_extension_image.ImageOptions, any>;
98
+
99
+ declare module '@tiptap/core' {
100
+ interface Commands<ReturnType> {
101
+ codeBlockEnhanced: {
102
+ setCodeBlock: (attrs?: {
103
+ language?: string;
104
+ }) => ReturnType;
105
+ toggleCodeBlock: (attrs?: {
106
+ language?: string;
107
+ }) => ReturnType;
108
+ };
109
+ }
110
+ }
111
+ declare const CodeBlockEnhanced: _tiptap_core.Node<_tiptap_extension_code_block.CodeBlockOptions, any>;
112
+ declare const SUPPORTED_LANGUAGES: string[];
113
+
114
+ interface SlashCommandItem {
115
+ title: string;
116
+ description: string;
117
+ icon: string;
118
+ command: (editor: Editor) => void;
119
+ }
120
+ declare const defaultSlashCommands: SlashCommandItem[];
121
+ interface SlashCommandState {
122
+ isOpen: boolean;
123
+ query: string;
124
+ position: {
125
+ top: number;
126
+ left: number;
127
+ } | null;
128
+ selectedIndex: number;
129
+ items: SlashCommandItem[];
130
+ }
131
+ declare const SlashCommand: Extension<any, any>;
132
+
133
+ export { BlogEditor, type BlogEditorProps, Callout, CodeBlockEnhanced, FAQ, FAQAnswer, FAQItem, FAQQuestion, ImageUpload, SUPPORTED_LANGUAGES, SlashCommand, type SlashCommandItem, type SlashCommandState, TableOfContents, defaultSlashCommands, extractFAQItems, extractHeadings, renderBlocksToHTML };