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.
- package/LICENSE +21 -0
- package/README.md +951 -0
- package/dist/admin/index.cjs +2465 -0
- package/dist/admin/index.cjs.map +1 -0
- package/dist/admin/index.d.cts +44 -0
- package/dist/admin/index.d.ts +44 -0
- package/dist/admin/index.js +2438 -0
- package/dist/admin/index.js.map +1 -0
- package/dist/api/categories.cjs +82 -0
- package/dist/api/categories.cjs.map +1 -0
- package/dist/api/categories.d.cts +27 -0
- package/dist/api/categories.d.ts +27 -0
- package/dist/api/categories.js +77 -0
- package/dist/api/categories.js.map +1 -0
- package/dist/api/media.cjs +113 -0
- package/dist/api/media.cjs.map +1 -0
- package/dist/api/media.d.cts +22 -0
- package/dist/api/media.d.ts +22 -0
- package/dist/api/media.js +109 -0
- package/dist/api/media.js.map +1 -0
- package/dist/api/posts.cjs +103 -0
- package/dist/api/posts.cjs.map +1 -0
- package/dist/api/posts.d.cts +27 -0
- package/dist/api/posts.d.ts +27 -0
- package/dist/api/posts.js +98 -0
- package/dist/api/posts.js.map +1 -0
- package/dist/api/rss.cjs +25 -0
- package/dist/api/rss.cjs.map +1 -0
- package/dist/api/rss.d.cts +5 -0
- package/dist/api/rss.d.ts +5 -0
- package/dist/api/rss.js +23 -0
- package/dist/api/rss.js.map +1 -0
- package/dist/api/settings.cjs +40 -0
- package/dist/api/settings.cjs.map +1 -0
- package/dist/api/settings.d.cts +17 -0
- package/dist/api/settings.d.ts +17 -0
- package/dist/api/settings.js +37 -0
- package/dist/api/settings.js.map +1 -0
- package/dist/api/sitemap.cjs +25 -0
- package/dist/api/sitemap.cjs.map +1 -0
- package/dist/api/sitemap.d.cts +5 -0
- package/dist/api/sitemap.d.ts +5 -0
- package/dist/api/sitemap.js +23 -0
- package/dist/api/sitemap.js.map +1 -0
- package/dist/chunk-4NKOJYWJ.js +68 -0
- package/dist/chunk-4NKOJYWJ.js.map +1 -0
- package/dist/chunk-4PY224XM.js +103 -0
- package/dist/chunk-4PY224XM.js.map +1 -0
- package/dist/chunk-64HUVJOZ.js +446 -0
- package/dist/chunk-64HUVJOZ.js.map +1 -0
- package/dist/chunk-6HKMZOI4.cjs +48 -0
- package/dist/chunk-6HKMZOI4.cjs.map +1 -0
- package/dist/chunk-A2S32RZN.js +138 -0
- package/dist/chunk-A2S32RZN.js.map +1 -0
- package/dist/chunk-E2QLTHKN.cjs +70 -0
- package/dist/chunk-E2QLTHKN.cjs.map +1 -0
- package/dist/chunk-JLPJKNRZ.js +37 -0
- package/dist/chunk-JLPJKNRZ.js.map +1 -0
- package/dist/chunk-JM7QRXXK.js +330 -0
- package/dist/chunk-JM7QRXXK.js.map +1 -0
- package/dist/chunk-KDZER3PU.cjs +43 -0
- package/dist/chunk-KDZER3PU.cjs.map +1 -0
- package/dist/chunk-N5MKAD7J.cjs +109 -0
- package/dist/chunk-N5MKAD7J.cjs.map +1 -0
- package/dist/chunk-QE4VLQYN.cjs +337 -0
- package/dist/chunk-QE4VLQYN.cjs.map +1 -0
- package/dist/chunk-R6MO3QIP.js +46 -0
- package/dist/chunk-R6MO3QIP.js.map +1 -0
- package/dist/chunk-U2ROR6AY.cjs +476 -0
- package/dist/chunk-U2ROR6AY.cjs.map +1 -0
- package/dist/chunk-ZP5XRVVH.cjs +141 -0
- package/dist/chunk-ZP5XRVVH.cjs.map +1 -0
- package/dist/cli/index.cjs +1308 -0
- package/dist/components/index.cjs +541 -0
- package/dist/components/index.cjs.map +1 -0
- package/dist/components/index.d.cts +165 -0
- package/dist/components/index.d.ts +165 -0
- package/dist/components/index.js +527 -0
- package/dist/components/index.js.map +1 -0
- package/dist/editor/index.cjs +1083 -0
- package/dist/editor/index.cjs.map +1 -0
- package/dist/editor/index.d.cts +133 -0
- package/dist/editor/index.d.ts +133 -0
- package/dist/editor/index.js +1051 -0
- package/dist/editor/index.js.map +1 -0
- package/dist/index-Cgzphklp.d.ts +266 -0
- package/dist/index-vjlZDWNr.d.cts +266 -0
- package/dist/index.cjs +368 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +27 -0
- package/dist/index.d.ts +27 -0
- package/dist/index.js +208 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/index.cjs +120 -0
- package/dist/lib/index.cjs.map +1 -0
- package/dist/lib/index.d.cts +4 -0
- package/dist/lib/index.d.ts +4 -0
- package/dist/lib/index.js +7 -0
- package/dist/lib/index.js.map +1 -0
- package/dist/styles/admin.css +657 -0
- package/dist/styles/blog.css +851 -0
- package/dist/styles/editor.css +452 -0
- package/dist/styles/globals.css +270 -0
- package/dist/styles/prose.css +299 -0
- package/dist/types-CBEEBR4A.d.cts +732 -0
- package/dist/types-CBEEBR4A.d.ts +732 -0
- package/package.json +134 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/admin/hooks.ts","../../src/admin/AdminLayout.tsx","../../src/admin/Dashboard.tsx","../../src/admin/PostList.tsx","../../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","../../src/admin/SEOPanel.tsx","../../src/admin/PostEditor.tsx","../../src/admin/MediaLibrary.tsx","../../src/admin/CategoryManager.tsx","../../src/admin/SettingsPage.tsx"],"names":["useCallback","useState","useEffect","jsxs","jsx","Image","Plugin","PluginKey","Node","mergeAttributes","CodeBlockLowlight","Extension","state","useRef","useEditor","StarterKit","Placeholder","Link","Underline","Highlight","Typography","TaskList","TaskItem","Table","TableRow","TableCell","TableHeader","editor","BubbleMenu","EditorContent"],"mappings":"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","file":"index.cjs","sourcesContent":["'use client';\n\nimport { useCallback } from 'react';\n\nlet _apiBase = '/api/blog';\n\nexport function setApiBase(path: string) {\n _apiBase = path;\n}\n\nfunction getApiKey(): string {\n if (typeof window === 'undefined') return '';\n return sessionStorage.getItem('nbk_api_key') || '';\n}\n\nfunction getApiBase(): string {\n return _apiBase;\n}\n\nasync function apiRequest(path: string, options: RequestInit = {}) {\n const apiKey = getApiKey();\n const url = `${getApiBase()}${path}`;\n\n const headers: Record<string, string> = {\n ...(options.headers as Record<string, string>),\n };\n\n if (apiKey) {\n headers['Authorization'] = `Bearer ${apiKey}`;\n }\n\n if (!(options.body instanceof FormData)) {\n headers['Content-Type'] = 'application/json';\n }\n\n const res = await fetch(url, {\n ...options,\n headers,\n });\n\n const data = await res.json();\n\n if (!data.success) {\n throw new Error(data.error?.message || 'API request failed');\n }\n\n return data;\n}\n\nexport function useAdminApi() {\n const get = useCallback(async (path: string) => {\n return apiRequest(path);\n }, []);\n\n const post = useCallback(async (path: string, body?: unknown) => {\n return apiRequest(path, {\n method: 'POST',\n body: body instanceof FormData ? body : JSON.stringify(body),\n });\n }, []);\n\n const put = useCallback(async (path: string, body: unknown) => {\n return apiRequest(path, {\n method: 'PUT',\n body: JSON.stringify(body),\n });\n }, []);\n\n const del = useCallback(async (path: string) => {\n return apiRequest(path, { method: 'DELETE' });\n }, []);\n\n return { get, post, put, del };\n}\n","'use client';\n\nimport React, { useState, useEffect, type ReactNode } from 'react';\nimport { setApiBase } from './hooks';\n\ninterface AdminLayoutProps {\n children: ReactNode;\n apiKey?: string;\n apiPath?: string;\n adminPath?: string;\n}\n\nfunction buildNavItems(adminPath: string) {\n return [\n { label: 'Dashboard', href: adminPath, icon: '📊' },\n { label: 'Posts', href: `${adminPath}/posts`, icon: '📝' },\n { label: 'New Post', href: `${adminPath}/new`, icon: '✏️' },\n { label: 'Media', href: `${adminPath}/media`, icon: '🖼️' },\n { label: 'Categories', href: `${adminPath}/categories`, icon: '📁' },\n { label: 'Settings', href: `${adminPath}/settings`, icon: '⚙️' },\n ];\n}\n\nexport function AdminLayout({ children, apiKey, apiPath, adminPath = '/admin/blog' }: AdminLayoutProps) {\n const [isAuthenticated, setIsAuthenticated] = useState(false);\n const [inputKey, setInputKey] = useState('');\n const [sidebarOpen, setSidebarOpen] = useState(true);\n const [currentPath, setCurrentPath] = useState('');\n\n useEffect(() => {\n if (apiPath) {\n setApiBase(apiPath);\n }\n }, [apiPath]);\n\n useEffect(() => {\n if (typeof window !== 'undefined') {\n setCurrentPath(window.location.pathname);\n const stored = sessionStorage.getItem('nbk_api_key');\n if (stored || apiKey) {\n setIsAuthenticated(true);\n }\n }\n }, [apiKey]);\n\n const handleLogin = (e: React.FormEvent) => {\n e.preventDefault();\n if (inputKey.trim()) {\n sessionStorage.setItem('nbk_api_key', inputKey);\n setIsAuthenticated(true);\n }\n };\n\n if (!isAuthenticated) {\n return (\n <div className=\"nbk-admin-login\">\n <div className=\"nbk-login-card\">\n <h1 className=\"nbk-login-title\">Blog Admin</h1>\n <p className=\"nbk-login-subtitle\">Enter your API key to continue</p>\n <form onSubmit={handleLogin}>\n <input\n type=\"password\"\n value={inputKey}\n onChange={(e) => setInputKey(e.target.value)}\n placeholder=\"Enter API key\"\n className=\"nbk-login-input\"\n autoFocus\n />\n <button type=\"submit\" className=\"nbk-login-btn\">\n Sign In\n </button>\n </form>\n </div>\n </div>\n );\n }\n\n return (\n <div className=\"nbk-admin\">\n {/* Sidebar */}\n <aside className={`nbk-admin-sidebar ${sidebarOpen ? 'open' : 'closed'}`}>\n <div className=\"nbk-sidebar-header\">\n <h2 className=\"nbk-sidebar-title\">NextBlogKit</h2>\n <button\n onClick={() => setSidebarOpen(!sidebarOpen)}\n className=\"nbk-sidebar-toggle\"\n >\n {sidebarOpen ? '\\u2190' : '\\u2192'}\n </button>\n </div>\n <nav className=\"nbk-sidebar-nav\">\n {buildNavItems(adminPath).map((item) => (\n <a\n key={item.href}\n href={item.href}\n className={`nbk-sidebar-link ${currentPath === item.href ? 'active' : ''}`}\n >\n <span className=\"nbk-sidebar-icon\">{item.icon}</span>\n {sidebarOpen && <span>{item.label}</span>}\n </a>\n ))}\n </nav>\n <div className=\"nbk-sidebar-footer\">\n <button\n onClick={() => {\n sessionStorage.removeItem('nbk_api_key');\n setIsAuthenticated(false);\n }}\n className=\"nbk-sidebar-link\"\n >\n <span className=\"nbk-sidebar-icon\">🚪</span>\n {sidebarOpen && <span>Sign Out</span>}\n </button>\n </div>\n </aside>\n\n {/* Main Content */}\n <main className=\"nbk-admin-main\">\n {children}\n </main>\n </div>\n );\n}\n","'use client';\n\nimport React, { useEffect, useState } from 'react';\nimport { useAdminApi } from './hooks';\n\ninterface DashboardStats {\n totalPosts: number;\n publishedPosts: number;\n draftPosts: number;\n totalMedia: number;\n totalCategories: number;\n}\n\nexport function Dashboard() {\n const api = useAdminApi();\n const [stats, setStats] = useState<DashboardStats>({\n totalPosts: 0,\n publishedPosts: 0,\n draftPosts: 0,\n totalMedia: 0,\n totalCategories: 0,\n });\n const [recentDrafts, setRecentDrafts] = useState<any[]>([]);\n const [recentPublished, setRecentPublished] = useState<any[]>([]);\n const [loading, setLoading] = useState(true);\n\n useEffect(() => {\n async function loadDashboard() {\n try {\n const [allPosts, published, drafts, media, categories] = await Promise.all([\n api.get('/posts?limit=1'),\n api.get('/posts?status=published&limit=5'),\n api.get('/posts?status=draft&limit=5'),\n api.get('/media?limit=1'),\n api.get('/categories'),\n ]);\n\n setStats({\n totalPosts: allPosts.meta?.total || 0,\n publishedPosts: published.meta?.total || 0,\n draftPosts: drafts.meta?.total || 0,\n totalMedia: media.meta?.total || 0,\n totalCategories: Array.isArray(categories.data) ? categories.data.length : 0,\n });\n\n setRecentDrafts(drafts.data || []);\n setRecentPublished(published.data || []);\n } catch (err) {\n console.error('Dashboard load error:', err);\n } finally {\n setLoading(false);\n }\n }\n loadDashboard();\n }, []);\n\n if (loading) {\n return <div className=\"nbk-loading\">Loading dashboard...</div>;\n }\n\n return (\n <div className=\"nbk-dashboard\">\n <h1 className=\"nbk-page-title\">Dashboard</h1>\n\n {/* Stats Grid */}\n <div className=\"nbk-stats-grid\">\n <div className=\"nbk-stat-card\">\n <div className=\"nbk-stat-number\">{stats.totalPosts}</div>\n <div className=\"nbk-stat-label\">Total Posts</div>\n </div>\n <div className=\"nbk-stat-card\">\n <div className=\"nbk-stat-number\">{stats.publishedPosts}</div>\n <div className=\"nbk-stat-label\">Published</div>\n </div>\n <div className=\"nbk-stat-card\">\n <div className=\"nbk-stat-number\">{stats.draftPosts}</div>\n <div className=\"nbk-stat-label\">Drafts</div>\n </div>\n <div className=\"nbk-stat-card\">\n <div className=\"nbk-stat-number\">{stats.totalMedia}</div>\n <div className=\"nbk-stat-label\">Media Files</div>\n </div>\n <div className=\"nbk-stat-card\">\n <div className=\"nbk-stat-number\">{stats.totalCategories}</div>\n <div className=\"nbk-stat-label\">Categories</div>\n </div>\n </div>\n\n <div className=\"nbk-dashboard-grid\">\n {/* Recent Drafts */}\n <div className=\"nbk-dashboard-section\">\n <h2 className=\"nbk-section-title\">Recent Drafts</h2>\n {recentDrafts.length === 0 ? (\n <p className=\"nbk-empty-state\">No drafts yet</p>\n ) : (\n <ul className=\"nbk-post-list-simple\">\n {recentDrafts.map((post: any) => (\n <li key={post._id}>\n <a href={`/admin/blog/${post._id}/edit`} className=\"nbk-post-link\">\n <span className=\"nbk-post-link-title\">{post.title}</span>\n <span className=\"nbk-post-link-date\">\n {new Date(post.updatedAt).toLocaleDateString()}\n </span>\n </a>\n </li>\n ))}\n </ul>\n )}\n </div>\n\n {/* Recent Published */}\n <div className=\"nbk-dashboard-section\">\n <h2 className=\"nbk-section-title\">Recently Published</h2>\n {recentPublished.length === 0 ? (\n <p className=\"nbk-empty-state\">No published posts yet</p>\n ) : (\n <ul className=\"nbk-post-list-simple\">\n {recentPublished.map((post: any) => (\n <li key={post._id}>\n <a href={`/admin/blog/${post._id}/edit`} className=\"nbk-post-link\">\n <span className=\"nbk-post-link-title\">{post.title}</span>\n <span className=\"nbk-post-link-date\">\n {new Date(post.publishedAt || post.createdAt).toLocaleDateString()}\n </span>\n </a>\n </li>\n ))}\n </ul>\n )}\n </div>\n </div>\n\n {/* Quick Actions */}\n <div className=\"nbk-quick-actions\">\n <a href=\"/admin/blog/new\" className=\"nbk-btn nbk-btn-primary\">\n New Post\n </a>\n <a href=\"/admin/blog/media\" className=\"nbk-btn nbk-btn-secondary\">\n Media Library\n </a>\n </div>\n </div>\n );\n}\n","'use client';\n\nimport React, { useEffect, useState, useCallback } from 'react';\nimport { useAdminApi } from './hooks';\n\ninterface Post {\n _id: string;\n title: string;\n slug: string;\n status: string;\n categories: string[];\n publishedAt?: string;\n updatedAt: string;\n wordCount: number;\n readingTime: number;\n}\n\nexport function PostList() {\n const api = useAdminApi();\n const [posts, setPosts] = useState<Post[]>([]);\n const [total, setTotal] = useState(0);\n const [page, setPage] = useState(1);\n const [statusFilter, setStatusFilter] = useState<string>('');\n const [searchQuery, setSearchQuery] = useState('');\n const [loading, setLoading] = useState(true);\n const [selected, setSelected] = useState<Set<string>>(new Set());\n\n const limit = 20;\n\n const loadPosts = useCallback(async () => {\n setLoading(true);\n try {\n let path = `/posts?page=${page}&limit=${limit}`;\n if (statusFilter) path += `&status=${statusFilter}`;\n if (searchQuery) path += `&q=${encodeURIComponent(searchQuery)}`;\n\n const res = await api.get(path);\n setPosts(res.data || []);\n setTotal(res.meta?.total || 0);\n } catch (err) {\n console.error('Failed to load posts:', err);\n } finally {\n setLoading(false);\n }\n }, [page, statusFilter, searchQuery]);\n\n useEffect(() => {\n loadPosts();\n }, [loadPosts]);\n\n const handleDelete = async (id: string) => {\n if (!confirm('Are you sure you want to archive this post?')) return;\n try {\n await api.del(`/posts?id=${id}`);\n loadPosts();\n } catch (err) {\n console.error('Delete failed:', err);\n }\n };\n\n const handleBulkAction = async (action: string) => {\n if (selected.size === 0) return;\n\n for (const id of selected) {\n try {\n if (action === 'publish') {\n await api.put(`/posts?id=${id}`, { status: 'published' });\n } else if (action === 'draft') {\n await api.put(`/posts?id=${id}`, { status: 'draft' });\n } else if (action === 'archive') {\n await api.del(`/posts?id=${id}`);\n }\n } catch (err) {\n console.error(`Bulk ${action} failed for ${id}:`, err);\n }\n }\n setSelected(new Set());\n loadPosts();\n };\n\n const totalPages = Math.ceil(total / limit);\n\n const statusBadge = (status: string) => {\n const colors: Record<string, string> = {\n published: 'nbk-badge-green',\n draft: 'nbk-badge-yellow',\n scheduled: 'nbk-badge-blue',\n archived: 'nbk-badge-gray',\n };\n return <span className={`nbk-badge ${colors[status] || 'nbk-badge-gray'}`}>{status}</span>;\n };\n\n return (\n <div className=\"nbk-post-list\">\n <div className=\"nbk-page-header\">\n <h1 className=\"nbk-page-title\">Posts</h1>\n <a href=\"/admin/blog/new\" className=\"nbk-btn nbk-btn-primary\">\n New Post\n </a>\n </div>\n\n {/* Filters */}\n <div className=\"nbk-filters\">\n <input\n type=\"text\"\n placeholder=\"Search posts...\"\n value={searchQuery}\n onChange={(e) => {\n setSearchQuery(e.target.value);\n setPage(1);\n }}\n className=\"nbk-input nbk-search-input\"\n />\n <select\n value={statusFilter}\n onChange={(e) => {\n setStatusFilter(e.target.value);\n setPage(1);\n }}\n className=\"nbk-select\"\n >\n <option value=\"\">All Statuses</option>\n <option value=\"published\">Published</option>\n <option value=\"draft\">Draft</option>\n <option value=\"scheduled\">Scheduled</option>\n <option value=\"archived\">Archived</option>\n </select>\n\n {selected.size > 0 && (\n <div className=\"nbk-bulk-actions\">\n <span>{selected.size} selected</span>\n <button onClick={() => handleBulkAction('publish')} className=\"nbk-btn nbk-btn-sm\">\n Publish\n </button>\n <button onClick={() => handleBulkAction('draft')} className=\"nbk-btn nbk-btn-sm\">\n Unpublish\n </button>\n <button onClick={() => handleBulkAction('archive')} className=\"nbk-btn nbk-btn-sm nbk-btn-danger\">\n Archive\n </button>\n </div>\n )}\n </div>\n\n {/* Table */}\n {loading ? (\n <div className=\"nbk-loading\">Loading posts...</div>\n ) : posts.length === 0 ? (\n <div className=\"nbk-empty-state\">\n <p>No posts found.</p>\n <a href=\"/admin/blog/new\" className=\"nbk-btn nbk-btn-primary\">\n Create your first post\n </a>\n </div>\n ) : (\n <table className=\"nbk-table\">\n <thead>\n <tr>\n <th className=\"nbk-th-checkbox\">\n <input\n type=\"checkbox\"\n checked={selected.size === posts.length}\n onChange={(e) => {\n if (e.target.checked) {\n setSelected(new Set(posts.map((p) => p._id)));\n } else {\n setSelected(new Set());\n }\n }}\n />\n </th>\n <th>Title</th>\n <th>Status</th>\n <th>Categories</th>\n <th>Words</th>\n <th>Date</th>\n <th>Actions</th>\n </tr>\n </thead>\n <tbody>\n {posts.map((post) => (\n <tr key={post._id}>\n <td>\n <input\n type=\"checkbox\"\n checked={selected.has(post._id)}\n onChange={(e) => {\n const next = new Set(selected);\n if (e.target.checked) next.add(post._id);\n else next.delete(post._id);\n setSelected(next);\n }}\n />\n </td>\n <td>\n <a href={`/admin/blog/${post._id}/edit`} className=\"nbk-post-title-link\">\n {post.title}\n </a>\n <div className=\"nbk-post-slug\">/{post.slug}</div>\n </td>\n <td>{statusBadge(post.status)}</td>\n <td>{post.categories.join(', ') || '—'}</td>\n <td>{post.wordCount}</td>\n <td>\n {new Date(\n post.publishedAt || post.updatedAt\n ).toLocaleDateString()}\n </td>\n <td>\n <div className=\"nbk-actions\">\n <a href={`/admin/blog/${post._id}/edit`} className=\"nbk-btn nbk-btn-sm\">\n Edit\n </a>\n <a\n href={`/blog/${post.slug}`}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"nbk-btn nbk-btn-sm\"\n >\n View\n </a>\n <button\n onClick={() => handleDelete(post._id)}\n className=\"nbk-btn nbk-btn-sm nbk-btn-danger\"\n >\n Delete\n </button>\n </div>\n </td>\n </tr>\n ))}\n </tbody>\n </table>\n )}\n\n {/* Pagination */}\n {totalPages > 1 && (\n <div className=\"nbk-pagination-admin\">\n <button\n onClick={() => setPage(page - 1)}\n disabled={page <= 1}\n className=\"nbk-btn nbk-btn-sm\"\n >\n Previous\n </button>\n <span>\n Page {page} of {totalPages} ({total} posts)\n </span>\n <button\n onClick={() => setPage(page + 1)}\n disabled={page >= totalPages}\n className=\"nbk-btn nbk-btn-sm\"\n >\n Next\n </button>\n </div>\n )}\n </div>\n );\n}\n","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 •\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 ☑\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 “\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 —\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 ⊞\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 🔗\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 📷\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, '&')\n .replace(/</g, '<')\n .replace(/>/g, '>')\n .replace(/\"/g, '"');\n}\n\nfunction escapeAttr(str: string): string {\n return str.replace(/\"/g, '"').replace(/&/g, '&');\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","'use client';\n\nimport React from 'react';\n\ninterface SEOPanelProps {\n seo: Record<string, unknown>;\n onChange: (seo: Record<string, unknown>) => void;\n title: string;\n slug: string;\n excerpt: string;\n}\n\nexport function SEOPanel({ seo, onChange, title, slug, excerpt }: SEOPanelProps) {\n const metaTitle = (seo.metaTitle as string) || '';\n const metaDescription = (seo.metaDescription as string) || '';\n const focusKeyword = (seo.focusKeyword as string) || '';\n const canonicalUrl = (seo.canonicalUrl as string) || '';\n const ogImage = (seo.ogImage as string) || '';\n const noIndex = (seo.noIndex as boolean) || false;\n\n const displayTitle = metaTitle || title || 'Post Title';\n const displayDesc = metaDescription || excerpt || 'Post description will appear here...';\n const displayUrl = `/blog/${slug || 'post-url'}`;\n\n const titleLength = displayTitle.length;\n const descLength = displayDesc.length;\n\n const titleColor =\n titleLength >= 50 && titleLength <= 60 ? 'nbk-count-good' : titleLength > 70 ? 'nbk-count-bad' : 'nbk-count-warn';\n const descColor =\n descLength >= 150 && descLength <= 160 ? 'nbk-count-good' : descLength > 170 ? 'nbk-count-bad' : 'nbk-count-warn';\n\n return (\n <div className=\"nbk-seo-panel\">\n {/* SERP Preview */}\n <div className=\"nbk-serp-preview\">\n <div className=\"nbk-serp-title\">{displayTitle}</div>\n <div className=\"nbk-serp-url\">{displayUrl}</div>\n <div className=\"nbk-serp-desc\">{displayDesc.slice(0, 160)}</div>\n </div>\n\n {/* Focus Keyword */}\n <div className=\"nbk-field\">\n <label className=\"nbk-label\">Focus Keyword</label>\n <input\n type=\"text\"\n value={focusKeyword}\n onChange={(e) => onChange({ ...seo, focusKeyword: e.target.value })}\n className=\"nbk-input\"\n placeholder=\"e.g. nextjs blog\"\n />\n </div>\n\n {/* Meta Title */}\n <div className=\"nbk-field\">\n <label className=\"nbk-label\">\n Meta Title <span className={titleColor}>({titleLength}/60)</span>\n </label>\n <input\n type=\"text\"\n value={metaTitle}\n onChange={(e) => onChange({ ...seo, metaTitle: e.target.value })}\n className=\"nbk-input\"\n placeholder={title || 'Custom meta title'}\n />\n </div>\n\n {/* Meta Description */}\n <div className=\"nbk-field\">\n <label className=\"nbk-label\">\n Meta Description <span className={descColor}>({descLength}/160)</span>\n </label>\n <textarea\n value={metaDescription}\n onChange={(e) => onChange({ ...seo, metaDescription: e.target.value })}\n className=\"nbk-textarea\"\n rows={3}\n placeholder={excerpt || 'Custom meta description'}\n />\n </div>\n\n {/* Canonical URL */}\n <div className=\"nbk-field\">\n <label className=\"nbk-label\">Canonical URL</label>\n <input\n type=\"url\"\n value={canonicalUrl}\n onChange={(e) => onChange({ ...seo, canonicalUrl: e.target.value })}\n className=\"nbk-input\"\n placeholder=\"https://...\"\n />\n </div>\n\n {/* OG Image Override */}\n <div className=\"nbk-field\">\n <label className=\"nbk-label\">OG Image Override</label>\n <input\n type=\"url\"\n value={ogImage}\n onChange={(e) => onChange({ ...seo, ogImage: e.target.value })}\n className=\"nbk-input\"\n placeholder=\"https://...\"\n />\n </div>\n\n {/* No Index */}\n <div className=\"nbk-field\">\n <label className=\"nbk-checkbox-label\">\n <input\n type=\"checkbox\"\n checked={noIndex}\n onChange={(e) => onChange({ ...seo, noIndex: e.target.checked })}\n />\n No Index (hide from search engines)\n </label>\n </div>\n </div>\n );\n}\n","'use client';\n\nimport React, { useEffect, useState, useCallback } from 'react';\nimport { BlogEditor } from '../editor/Editor';\nimport { renderBlocksToHTML } from '../editor/renderer';\nimport { SEOPanel } from './SEOPanel';\nimport { useAdminApi } from './hooks';\n\ninterface PostEditorProps {\n postId?: string;\n}\n\nexport function PostEditor({ postId }: PostEditorProps) {\n const api = useAdminApi();\n const [title, setTitle] = useState('');\n const [slug, setSlug] = useState('');\n const [content, setContent] = useState<Record<string, unknown>>({ type: 'doc', content: [{ type: 'paragraph' }] });\n const [excerpt, setExcerpt] = useState('');\n const [status, setStatus] = useState<string>('draft');\n const [categories, setCategories] = useState<string[]>([]);\n const [tags, setTags] = useState<string>('');\n const [coverImageUrl, setCoverImageUrl] = useState('');\n const [seo, setSeo] = useState<Record<string, unknown>>({});\n const [authorName, setAuthorName] = useState('');\n const [scheduledAt, setScheduledAt] = useState('');\n\n const [allCategories, setAllCategories] = useState<{ slug: string; name: string }[]>([]);\n const [saving, setSaving] = useState(false);\n const [lastSaved, setLastSaved] = useState<string>('');\n const [error, setError] = useState('');\n const [seoExpanded, setSeoExpanded] = useState(false);\n const [loading, setLoading] = useState(!!postId);\n const [sidebarOpen, setSidebarOpen] = useState(true);\n\n useEffect(() => {\n api.get('/categories').then((res) => {\n setAllCategories(res.data || []);\n }).catch(() => {});\n\n if (postId) {\n api.get(`/posts?id=${postId}`).then((res) => {\n const post = res.data;\n setTitle(post.title || '');\n setSlug(post.slug || '');\n setContent(post.content?.length ? { type: 'doc', content: post.content } : { type: 'doc', content: [{ type: 'paragraph' }] });\n setExcerpt(post.excerpt || '');\n setStatus(post.status || 'draft');\n setCategories(post.categories || []);\n setTags((post.tags || []).join(', '));\n setCoverImageUrl(post.coverImage?.url || '');\n setSeo(post.seo || {});\n setAuthorName(post.author?.name || '');\n setScheduledAt(post.scheduledAt ? new Date(post.scheduledAt).toISOString().slice(0, 16) : '');\n }).catch((err) => setError(err.message)).finally(() => setLoading(false));\n }\n }, [postId]);\n\n const generateSlug = (text: string) => {\n return text\n .toLowerCase()\n .trim()\n .replace(/[^\\w\\s-]/g, '')\n .replace(/[\\s_]+/g, '-')\n .replace(/-+/g, '-')\n .replace(/^-+|-+$/g, '');\n };\n\n const handleTitleChange = (value: string) => {\n setTitle(value);\n if (!postId) {\n setSlug(generateSlug(value));\n }\n };\n\n const handleSave = async (targetStatus?: string) => {\n setSaving(true);\n setError('');\n\n try {\n const contentArray = (content as any).content || [];\n const html = renderBlocksToHTML(content as any);\n\n const body: Record<string, unknown> = {\n title,\n slug,\n excerpt,\n content: contentArray,\n contentHTML: html,\n status: targetStatus || status,\n categories,\n tags: tags.split(',').map((t) => t.trim()).filter(Boolean),\n seo,\n };\n\n if (coverImageUrl) {\n body.coverImage = { _id: '', url: coverImageUrl, alt: title };\n }\n\n if (authorName) {\n body.author = { name: authorName };\n }\n\n if (scheduledAt && (targetStatus || status) === 'scheduled') {\n body.scheduledAt = new Date(scheduledAt).toISOString();\n }\n\n if (postId) {\n await api.put(`/posts?id=${postId}`, body);\n } else {\n const res = await api.post('/posts', body);\n // Redirect to edit page\n if (res.data?._id) {\n window.location.href = `/admin/blog/${res.data._id}/edit`;\n return;\n }\n }\n\n setLastSaved(new Date().toLocaleTimeString());\n } catch (err: any) {\n setError(err.message || 'Failed to save');\n } finally {\n setSaving(false);\n }\n };\n\n const handleAutosave = useCallback(\n (editorContent: Record<string, unknown>) => {\n if (!postId) return;\n const contentArray = (editorContent as any).content || [];\n const html = renderBlocksToHTML(editorContent as any);\n api.put(`/posts?id=${postId}`, {\n content: contentArray,\n contentHTML: html,\n }).then(() => {\n setLastSaved(new Date().toLocaleTimeString());\n }).catch(() => {});\n },\n [postId]\n );\n\n const uploadImage = async (file: File) => {\n const formData = new FormData();\n formData.append('file', file);\n const res = await api.post('/media', formData);\n return { url: res.data.url, alt: res.data.alt || file.name };\n };\n\n if (loading) {\n return (\n <div className=\"nbk-post-editor\">\n <div className=\"nbk-editor-header\">\n <h1 className=\"nbk-page-title\">Loading...</h1>\n </div>\n <div style={{ padding: '2rem', textAlign: 'center', color: 'var(--nbk-text-muted)' }}>\n Loading post...\n </div>\n </div>\n );\n }\n\n return (\n <div className=\"nbk-post-editor\">\n <div className=\"nbk-editor-header\">\n <h1 className=\"nbk-page-title\">{postId ? 'Edit Post' : 'New Post'}</h1>\n <div className=\"nbk-editor-actions\">\n {lastSaved && <span className=\"nbk-last-saved\">Last saved: {lastSaved}</span>}\n <button\n onClick={() => handleSave('draft')}\n className=\"nbk-btn nbk-btn-secondary\"\n disabled={saving}\n >\n {saving ? 'Saving...' : 'Save Draft'}\n </button>\n <button\n onClick={() => handleSave('published')}\n className=\"nbk-btn nbk-btn-primary\"\n disabled={saving}\n >\n {saving ? 'Publishing...' : 'Publish'}\n </button>\n <button\n onClick={() => setSidebarOpen(!sidebarOpen)}\n className=\"nbk-btn nbk-btn-ghost\"\n title={sidebarOpen ? 'Hide sidebar' : 'Show sidebar'}\n >\n {sidebarOpen ? '⇥' : '⇤'}\n </button>\n </div>\n </div>\n\n {error && <div className=\"nbk-error\">{error}</div>}\n\n <div className={`nbk-editor-layout ${sidebarOpen ? '' : 'nbk-sidebar-collapsed'}`}>\n {/* Main Editor */}\n <div className=\"nbk-editor-main\">\n <input\n type=\"text\"\n value={title}\n onChange={(e) => handleTitleChange(e.target.value)}\n placeholder=\"Post title...\"\n className=\"nbk-title-input\"\n />\n\n <BlogEditor\n content={content}\n onChange={setContent}\n onSave={postId ? handleAutosave : undefined}\n uploadImage={uploadImage}\n />\n </div>\n\n {/* Sidebar */}\n {sidebarOpen && (\n <div className=\"nbk-editor-sidebar\">\n {/* Status */}\n <div className=\"nbk-sidebar-section\">\n <h3 className=\"nbk-sidebar-heading\">Publish</h3>\n <select\n value={status}\n onChange={(e) => setStatus(e.target.value)}\n className=\"nbk-select\"\n >\n <option value=\"draft\">Draft</option>\n <option value=\"published\">Published</option>\n <option value=\"scheduled\">Scheduled</option>\n </select>\n {status === 'scheduled' && (\n <input\n type=\"datetime-local\"\n value={scheduledAt}\n onChange={(e) => setScheduledAt(e.target.value)}\n className=\"nbk-input\"\n />\n )}\n </div>\n\n {/* Slug */}\n <div className=\"nbk-sidebar-section\">\n <h3 className=\"nbk-sidebar-heading\">URL Slug</h3>\n <input\n type=\"text\"\n value={slug}\n onChange={(e) => setSlug(e.target.value)}\n className=\"nbk-input\"\n placeholder=\"post-url-slug\"\n />\n </div>\n\n {/* Categories */}\n <div className=\"nbk-sidebar-section\">\n <h3 className=\"nbk-sidebar-heading\">Categories</h3>\n <div className=\"nbk-checkbox-list\">\n {allCategories.map((cat) => (\n <label key={cat.slug} className=\"nbk-checkbox-label\">\n <input\n type=\"checkbox\"\n checked={categories.includes(cat.slug)}\n onChange={(e) => {\n if (e.target.checked) {\n setCategories([...categories, cat.slug]);\n } else {\n setCategories(categories.filter((c) => c !== cat.slug));\n }\n }}\n />\n {cat.name}\n </label>\n ))}\n </div>\n </div>\n\n {/* Tags */}\n <div className=\"nbk-sidebar-section\">\n <h3 className=\"nbk-sidebar-heading\">Tags</h3>\n <input\n type=\"text\"\n value={tags}\n onChange={(e) => setTags(e.target.value)}\n className=\"nbk-input\"\n placeholder=\"tag1, tag2, tag3\"\n />\n </div>\n\n {/* Cover Image */}\n <div className=\"nbk-sidebar-section\">\n <h3 className=\"nbk-sidebar-heading\">Cover Image</h3>\n {coverImageUrl && (\n <img src={coverImageUrl} alt=\"Cover\" className=\"nbk-cover-preview\" />\n )}\n <input\n type=\"text\"\n value={coverImageUrl}\n onChange={(e) => setCoverImageUrl(e.target.value)}\n className=\"nbk-input\"\n placeholder=\"Image URL\"\n />\n <button\n onClick={async () => {\n const input = document.createElement('input');\n input.type = 'file';\n input.accept = 'image/*';\n input.onchange = async () => {\n const file = input.files?.[0];\n if (!file) return;\n try {\n const result = await uploadImage(file);\n setCoverImageUrl(result.url);\n } catch (err) {\n console.error('Cover upload failed:', err);\n }\n };\n input.click();\n }}\n className=\"nbk-btn nbk-btn-sm nbk-btn-secondary\"\n >\n Upload Cover Image\n </button>\n </div>\n\n {/* Author */}\n <div className=\"nbk-sidebar-section\">\n <h3 className=\"nbk-sidebar-heading\">Author</h3>\n <input\n type=\"text\"\n value={authorName}\n onChange={(e) => setAuthorName(e.target.value)}\n className=\"nbk-input\"\n placeholder=\"Author name\"\n />\n </div>\n\n {/* Excerpt */}\n <div className=\"nbk-sidebar-section\">\n <h3 className=\"nbk-sidebar-heading\">Excerpt</h3>\n <textarea\n value={excerpt}\n onChange={(e) => setExcerpt(e.target.value)}\n className=\"nbk-textarea\"\n rows={3}\n placeholder=\"Short description...\"\n />\n </div>\n\n {/* SEO Panel */}\n <div className=\"nbk-sidebar-section\">\n <button\n onClick={() => setSeoExpanded(!seoExpanded)}\n className=\"nbk-sidebar-heading nbk-expandable\"\n >\n SEO Settings {seoExpanded ? '▼' : '▶'}\n </button>\n {seoExpanded && (\n <SEOPanel\n seo={seo}\n onChange={setSeo}\n title={title}\n slug={slug}\n excerpt={excerpt}\n />\n )}\n </div>\n </div>\n )}\n </div>\n </div>\n );\n}\n","'use client';\n\nimport React, { useEffect, useState, useCallback } from 'react';\nimport { useAdminApi } from './hooks';\n\ninterface MediaItem {\n _id: string;\n filename: string;\n originalName: string;\n mimeType: string;\n size: number;\n width?: number;\n height?: number;\n url: string;\n alt?: string;\n caption?: string;\n createdAt: string;\n}\n\nexport function MediaLibrary() {\n const api = useAdminApi();\n const [media, setMedia] = useState<MediaItem[]>([]);\n const [total, setTotal] = useState(0);\n const [page, setPage] = useState(1);\n const [loading, setLoading] = useState(true);\n const [uploading, setUploading] = useState(false);\n const [selected, setSelected] = useState<MediaItem | null>(null);\n const [dragOver, setDragOver] = useState(false);\n\n const limit = 24;\n\n const loadMedia = useCallback(async () => {\n setLoading(true);\n try {\n const res = await api.get(`/media?page=${page}&limit=${limit}`);\n setMedia(res.data || []);\n setTotal(res.meta?.total || 0);\n } catch (err) {\n console.error('Failed to load media:', err);\n } finally {\n setLoading(false);\n }\n }, [page]);\n\n useEffect(() => {\n loadMedia();\n }, [loadMedia]);\n\n const handleUpload = async (files: FileList | File[]) => {\n setUploading(true);\n try {\n for (const file of Array.from(files)) {\n const formData = new FormData();\n formData.append('file', file);\n await api.post('/media', formData);\n }\n loadMedia();\n } catch (err) {\n console.error('Upload failed:', err);\n } finally {\n setUploading(false);\n }\n };\n\n const handleDelete = async (id: string) => {\n if (!confirm('Delete this media file? This cannot be undone.')) return;\n try {\n await api.del(`/media?id=${id}`);\n setSelected(null);\n loadMedia();\n } catch (err) {\n console.error('Delete failed:', err);\n }\n };\n\n const formatSize = (bytes: number) => {\n if (bytes < 1024) return `${bytes} B`;\n if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)} KB`;\n return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;\n };\n\n const handleDrop = (e: React.DragEvent) => {\n e.preventDefault();\n setDragOver(false);\n if (e.dataTransfer.files.length) {\n handleUpload(e.dataTransfer.files);\n }\n };\n\n const totalPages = Math.ceil(total / limit);\n\n return (\n <div className=\"nbk-media-library\">\n <div className=\"nbk-page-header\">\n <h1 className=\"nbk-page-title\">Media Library</h1>\n <label className=\"nbk-btn nbk-btn-primary\">\n {uploading ? 'Uploading...' : 'Upload Files'}\n <input\n type=\"file\"\n multiple\n accept=\"image/*\"\n onChange={(e) => e.target.files && handleUpload(e.target.files)}\n className=\"nbk-hidden\"\n />\n </label>\n </div>\n\n {/* Drop Zone */}\n <div\n className={`nbk-dropzone ${dragOver ? 'active' : ''}`}\n onDragOver={(e) => { e.preventDefault(); setDragOver(true); }}\n onDragLeave={() => setDragOver(false)}\n onDrop={handleDrop}\n >\n Drop files here to upload\n </div>\n\n {/* Grid */}\n {loading ? (\n <div className=\"nbk-loading\">Loading media...</div>\n ) : media.length === 0 ? (\n <div className=\"nbk-empty-state\">\n <p>No media files yet. Upload your first image!</p>\n </div>\n ) : (\n <div className=\"nbk-media-grid\">\n {media.map((item) => (\n <div\n key={item._id}\n className={`nbk-media-card ${selected?._id === item._id ? 'selected' : ''}`}\n onClick={() => setSelected(item)}\n >\n <div className=\"nbk-media-thumb\">\n <img src={item.url} alt={item.alt || item.originalName} loading=\"lazy\" />\n </div>\n <div className=\"nbk-media-info\">\n <div className=\"nbk-media-name\" title={item.originalName}>\n {item.originalName}\n </div>\n <div className=\"nbk-media-size\">{formatSize(item.size)}</div>\n </div>\n </div>\n ))}\n </div>\n )}\n\n {/* Detail Panel */}\n {selected && (\n <div className=\"nbk-media-detail\">\n <div className=\"nbk-media-detail-header\">\n <h3>File Details</h3>\n <button onClick={() => setSelected(null)} className=\"nbk-close-btn\">\n ×\n </button>\n </div>\n <img src={selected.url} alt={selected.alt || ''} className=\"nbk-media-preview\" />\n <div className=\"nbk-media-meta\">\n <div><strong>Name:</strong> {selected.originalName}</div>\n <div><strong>Type:</strong> {selected.mimeType}</div>\n <div><strong>Size:</strong> {formatSize(selected.size)}</div>\n {selected.width && selected.height && (\n <div><strong>Dimensions:</strong> {selected.width} x {selected.height}</div>\n )}\n <div><strong>Uploaded:</strong> {new Date(selected.createdAt).toLocaleString()}</div>\n </div>\n <div className=\"nbk-media-url\">\n <label className=\"nbk-label\">URL</label>\n <input\n type=\"text\"\n readOnly\n value={selected.url}\n className=\"nbk-input\"\n onClick={(e) => (e.target as HTMLInputElement).select()}\n />\n </div>\n <button\n onClick={() => handleDelete(selected._id)}\n className=\"nbk-btn nbk-btn-danger\"\n >\n Delete File\n </button>\n </div>\n )}\n\n {/* Pagination */}\n {totalPages > 1 && (\n <div className=\"nbk-pagination-admin\">\n <button onClick={() => setPage(page - 1)} disabled={page <= 1} className=\"nbk-btn nbk-btn-sm\">\n Previous\n </button>\n <span>Page {page} of {totalPages}</span>\n <button onClick={() => setPage(page + 1)} disabled={page >= totalPages} className=\"nbk-btn nbk-btn-sm\">\n Next\n </button>\n </div>\n )}\n </div>\n );\n}\n","'use client';\n\nimport React, { useEffect, useState, useCallback } from 'react';\nimport { useAdminApi } from './hooks';\n\ninterface CategoryItem {\n _id: string;\n name: string;\n slug: string;\n description?: string;\n order: number;\n postCount: number;\n}\n\nexport function CategoryManager() {\n const api = useAdminApi();\n const [categories, setCategories] = useState<CategoryItem[]>([]);\n const [loading, setLoading] = useState(true);\n const [editingId, setEditingId] = useState<string | null>(null);\n const [name, setName] = useState('');\n const [slug, setSlug] = useState('');\n const [description, setDescription] = useState('');\n const [error, setError] = useState('');\n\n const loadCategories = useCallback(async () => {\n try {\n const res = await api.get('/categories');\n setCategories(res.data || []);\n } catch (err) {\n console.error('Failed to load categories:', err);\n } finally {\n setLoading(false);\n }\n }, []);\n\n useEffect(() => {\n loadCategories();\n }, [loadCategories]);\n\n const resetForm = () => {\n setEditingId(null);\n setName('');\n setSlug('');\n setDescription('');\n setError('');\n };\n\n const handleSave = async () => {\n if (!name.trim()) {\n setError('Name is required');\n return;\n }\n setError('');\n\n try {\n const body: Record<string, unknown> = {\n name: name.trim(),\n description: description.trim() || undefined,\n };\n if (slug.trim()) body.slug = slug.trim();\n\n if (editingId) {\n await api.put(`/categories?id=${editingId}`, body);\n } else {\n await api.post('/categories', body);\n }\n resetForm();\n loadCategories();\n } catch (err: any) {\n setError(err.message || 'Failed to save');\n }\n };\n\n const handleEdit = (cat: CategoryItem) => {\n setEditingId(cat._id);\n setName(cat.name);\n setSlug(cat.slug);\n setDescription(cat.description || '');\n };\n\n const handleDelete = async (id: string) => {\n if (!confirm('Delete this category?')) return;\n try {\n await api.del(`/categories?id=${id}`);\n loadCategories();\n } catch (err) {\n console.error('Delete failed:', err);\n }\n };\n\n const handleReorder = async (id: string, direction: 'up' | 'down') => {\n const idx = categories.findIndex((c) => c._id === id);\n if (idx < 0) return;\n const swapIdx = direction === 'up' ? idx - 1 : idx + 1;\n if (swapIdx < 0 || swapIdx >= categories.length) return;\n\n try {\n await Promise.all([\n api.put(`/categories?id=${categories[idx]._id}`, { order: categories[swapIdx].order }),\n api.put(`/categories?id=${categories[swapIdx]._id}`, { order: categories[idx].order }),\n ]);\n loadCategories();\n } catch (err) {\n console.error('Reorder failed:', err);\n }\n };\n\n return (\n <div className=\"nbk-category-manager\">\n <h1 className=\"nbk-page-title\">Categories</h1>\n\n {/* Form */}\n <div className=\"nbk-category-form\">\n <h3>{editingId ? 'Edit Category' : 'Add Category'}</h3>\n {error && <div className=\"nbk-error\">{error}</div>}\n <div className=\"nbk-form-row\">\n <input\n type=\"text\"\n value={name}\n onChange={(e) => setName(e.target.value)}\n className=\"nbk-input\"\n placeholder=\"Category name\"\n />\n <input\n type=\"text\"\n value={slug}\n onChange={(e) => setSlug(e.target.value)}\n className=\"nbk-input\"\n placeholder=\"slug (auto-generated)\"\n />\n </div>\n <textarea\n value={description}\n onChange={(e) => setDescription(e.target.value)}\n className=\"nbk-textarea\"\n rows={2}\n placeholder=\"Description (optional)\"\n />\n <div className=\"nbk-form-actions\">\n <button onClick={handleSave} className=\"nbk-btn nbk-btn-primary\">\n {editingId ? 'Update' : 'Add Category'}\n </button>\n {editingId && (\n <button onClick={resetForm} className=\"nbk-btn nbk-btn-secondary\">\n Cancel\n </button>\n )}\n </div>\n </div>\n\n {/* List */}\n {loading ? (\n <div className=\"nbk-loading\">Loading categories...</div>\n ) : categories.length === 0 ? (\n <div className=\"nbk-empty-state\">No categories yet.</div>\n ) : (\n <table className=\"nbk-table\">\n <thead>\n <tr>\n <th>Order</th>\n <th>Name</th>\n <th>Slug</th>\n <th>Posts</th>\n <th>Actions</th>\n </tr>\n </thead>\n <tbody>\n {categories.map((cat, idx) => (\n <tr key={cat._id}>\n <td>\n <div className=\"nbk-reorder\">\n <button\n onClick={() => handleReorder(cat._id, 'up')}\n disabled={idx === 0}\n className=\"nbk-btn-icon\"\n >\n ▲\n </button>\n <button\n onClick={() => handleReorder(cat._id, 'down')}\n disabled={idx === categories.length - 1}\n className=\"nbk-btn-icon\"\n >\n ▼\n </button>\n </div>\n </td>\n <td>{cat.name}</td>\n <td className=\"nbk-text-muted\">/{cat.slug}</td>\n <td>{cat.postCount}</td>\n <td>\n <div className=\"nbk-actions\">\n <button onClick={() => handleEdit(cat)} className=\"nbk-btn nbk-btn-sm\">\n Edit\n </button>\n <button\n onClick={() => handleDelete(cat._id)}\n className=\"nbk-btn nbk-btn-sm nbk-btn-danger\"\n >\n Delete\n </button>\n </div>\n </td>\n </tr>\n ))}\n </tbody>\n </table>\n )}\n </div>\n );\n}\n","'use client';\n\nimport React, { useEffect, useState } from 'react';\nimport { useAdminApi } from './hooks';\n\nexport function SettingsPage() {\n const api = useAdminApi();\n const [settings, setSettings] = useState<Record<string, unknown>>({});\n const [loading, setLoading] = useState(true);\n const [saving, setSaving] = useState(false);\n const [saved, setSaved] = useState(false);\n const [error, setError] = useState('');\n\n useEffect(() => {\n api\n .get('/settings')\n .then((res) => setSettings(res.data || {}))\n .catch((err) => setError(err.message))\n .finally(() => setLoading(false));\n }, []);\n\n const handleSave = async () => {\n setSaving(true);\n setError('');\n setSaved(false);\n try {\n await api.put('/settings', settings);\n setSaved(true);\n setTimeout(() => setSaved(false), 3000);\n } catch (err: any) {\n setError(err.message || 'Failed to save');\n } finally {\n setSaving(false);\n }\n };\n\n const update = (key: string, value: unknown) => {\n setSettings((prev) => ({ ...prev, [key]: value }));\n };\n\n const updateNested = (parent: string, key: string, value: unknown) => {\n setSettings((prev) => ({\n ...prev,\n [parent]: { ...(prev[parent] as Record<string, unknown> || {}), [key]: value },\n }));\n };\n\n if (loading) return <div className=\"nbk-loading\">Loading settings...</div>;\n\n return (\n <div className=\"nbk-settings\">\n <div className=\"nbk-page-header\">\n <h1 className=\"nbk-page-title\">Settings</h1>\n <button\n onClick={handleSave}\n className=\"nbk-btn nbk-btn-primary\"\n disabled={saving}\n >\n {saving ? 'Saving...' : saved ? 'Saved!' : 'Save Settings'}\n </button>\n </div>\n\n {error && <div className=\"nbk-error\">{error}</div>}\n\n {/* General */}\n <div className=\"nbk-settings-section\">\n <h2 className=\"nbk-section-title\">General</h2>\n\n <div className=\"nbk-field\">\n <label className=\"nbk-label\">Posts Per Page</label>\n <input\n type=\"number\"\n value={(settings.postsPerPage as number) || 10}\n onChange={(e) => update('postsPerPage', parseInt(e.target.value) || 10)}\n className=\"nbk-input\"\n min=\"1\"\n max=\"100\"\n />\n </div>\n </div>\n\n {/* Default Author */}\n <div className=\"nbk-settings-section\">\n <h2 className=\"nbk-section-title\">Default Author</h2>\n\n <div className=\"nbk-field\">\n <label className=\"nbk-label\">Name</label>\n <input\n type=\"text\"\n value={(settings.defaultAuthor as any)?.name || ''}\n onChange={(e) => updateNested('defaultAuthor', 'name', e.target.value)}\n className=\"nbk-input\"\n />\n </div>\n <div className=\"nbk-field\">\n <label className=\"nbk-label\">Bio</label>\n <textarea\n value={(settings.defaultAuthor as any)?.bio || ''}\n onChange={(e) => updateNested('defaultAuthor', 'bio', e.target.value)}\n className=\"nbk-textarea\"\n rows={2}\n />\n </div>\n <div className=\"nbk-field\">\n <label className=\"nbk-label\">Avatar URL</label>\n <input\n type=\"url\"\n value={(settings.defaultAuthor as any)?.avatar || ''}\n onChange={(e) => updateNested('defaultAuthor', 'avatar', e.target.value)}\n className=\"nbk-input\"\n />\n </div>\n <div className=\"nbk-field\">\n <label className=\"nbk-label\">Profile URL</label>\n <input\n type=\"url\"\n value={(settings.defaultAuthor as any)?.url || ''}\n onChange={(e) => updateNested('defaultAuthor', 'url', e.target.value)}\n className=\"nbk-input\"\n />\n </div>\n </div>\n\n {/* SEO */}\n <div className=\"nbk-settings-section\">\n <h2 className=\"nbk-section-title\">SEO</h2>\n\n <div className=\"nbk-field\">\n <label className=\"nbk-label\">Default OG Image URL</label>\n <input\n type=\"url\"\n value={(settings.defaultOgImage as string) || ''}\n onChange={(e) => update('defaultOgImage', e.target.value)}\n className=\"nbk-input\"\n placeholder=\"https://...\"\n />\n </div>\n </div>\n\n {/* Comments */}\n <div className=\"nbk-settings-section\">\n <h2 className=\"nbk-section-title\">Comments</h2>\n\n <div className=\"nbk-field\">\n <label className=\"nbk-label\">Comment System</label>\n <select\n value={(settings.commentSystem as string) || 'none'}\n onChange={(e) => update('commentSystem', e.target.value)}\n className=\"nbk-select\"\n >\n <option value=\"none\">None</option>\n <option value=\"giscus\">Giscus</option>\n <option value=\"disqus\">Disqus</option>\n </select>\n </div>\n </div>\n\n {/* Analytics */}\n <div className=\"nbk-settings-section\">\n <h2 className=\"nbk-section-title\">Analytics</h2>\n\n <div className=\"nbk-field\">\n <label className=\"nbk-label\">Google Analytics ID</label>\n <input\n type=\"text\"\n value={(settings.analytics as any)?.gaId || ''}\n onChange={(e) => updateNested('analytics', 'gaId', e.target.value)}\n className=\"nbk-input\"\n placeholder=\"G-XXXXXXXXXX\"\n />\n </div>\n <div className=\"nbk-field\">\n <label className=\"nbk-label\">Plausible Domain</label>\n <input\n type=\"text\"\n value={(settings.analytics as any)?.plausibleDomain || ''}\n onChange={(e) => updateNested('analytics', 'plausibleDomain', e.target.value)}\n className=\"nbk-input\"\n placeholder=\"yourdomain.com\"\n />\n </div>\n </div>\n\n {/* Custom CSS */}\n <div className=\"nbk-settings-section\">\n <h2 className=\"nbk-section-title\">Custom CSS</h2>\n\n <div className=\"nbk-field\">\n <textarea\n value={(settings.customCSS as string) || ''}\n onChange={(e) => update('customCSS', e.target.value)}\n className=\"nbk-textarea nbk-code-textarea\"\n rows={6}\n placeholder=\"/* Custom CSS styles */\"\n />\n </div>\n </div>\n </div>\n );\n}\n"]}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
|
+
import { ReactNode } from 'react';
|
|
3
|
+
|
|
4
|
+
interface AdminLayoutProps {
|
|
5
|
+
children: ReactNode;
|
|
6
|
+
apiKey?: string;
|
|
7
|
+
apiPath?: string;
|
|
8
|
+
adminPath?: string;
|
|
9
|
+
}
|
|
10
|
+
declare function AdminLayout({ children, apiKey, apiPath, adminPath }: AdminLayoutProps): react_jsx_runtime.JSX.Element;
|
|
11
|
+
|
|
12
|
+
declare function Dashboard(): react_jsx_runtime.JSX.Element;
|
|
13
|
+
|
|
14
|
+
declare function PostList(): react_jsx_runtime.JSX.Element;
|
|
15
|
+
|
|
16
|
+
interface PostEditorProps {
|
|
17
|
+
postId?: string;
|
|
18
|
+
}
|
|
19
|
+
declare function PostEditor({ postId }: PostEditorProps): react_jsx_runtime.JSX.Element;
|
|
20
|
+
|
|
21
|
+
declare function MediaLibrary(): react_jsx_runtime.JSX.Element;
|
|
22
|
+
|
|
23
|
+
declare function CategoryManager(): react_jsx_runtime.JSX.Element;
|
|
24
|
+
|
|
25
|
+
declare function SettingsPage(): react_jsx_runtime.JSX.Element;
|
|
26
|
+
|
|
27
|
+
interface SEOPanelProps {
|
|
28
|
+
seo: Record<string, unknown>;
|
|
29
|
+
onChange: (seo: Record<string, unknown>) => void;
|
|
30
|
+
title: string;
|
|
31
|
+
slug: string;
|
|
32
|
+
excerpt: string;
|
|
33
|
+
}
|
|
34
|
+
declare function SEOPanel({ seo, onChange, title, slug, excerpt }: SEOPanelProps): react_jsx_runtime.JSX.Element;
|
|
35
|
+
|
|
36
|
+
declare function setApiBase(path: string): void;
|
|
37
|
+
declare function useAdminApi(): {
|
|
38
|
+
get: (path: string) => Promise<any>;
|
|
39
|
+
post: (path: string, body?: unknown) => Promise<any>;
|
|
40
|
+
put: (path: string, body: unknown) => Promise<any>;
|
|
41
|
+
del: (path: string) => Promise<any>;
|
|
42
|
+
};
|
|
43
|
+
|
|
44
|
+
export { AdminLayout, CategoryManager, Dashboard, MediaLibrary, PostEditor, PostList, SEOPanel, SettingsPage, setApiBase, useAdminApi };
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
|
+
import { ReactNode } from 'react';
|
|
3
|
+
|
|
4
|
+
interface AdminLayoutProps {
|
|
5
|
+
children: ReactNode;
|
|
6
|
+
apiKey?: string;
|
|
7
|
+
apiPath?: string;
|
|
8
|
+
adminPath?: string;
|
|
9
|
+
}
|
|
10
|
+
declare function AdminLayout({ children, apiKey, apiPath, adminPath }: AdminLayoutProps): react_jsx_runtime.JSX.Element;
|
|
11
|
+
|
|
12
|
+
declare function Dashboard(): react_jsx_runtime.JSX.Element;
|
|
13
|
+
|
|
14
|
+
declare function PostList(): react_jsx_runtime.JSX.Element;
|
|
15
|
+
|
|
16
|
+
interface PostEditorProps {
|
|
17
|
+
postId?: string;
|
|
18
|
+
}
|
|
19
|
+
declare function PostEditor({ postId }: PostEditorProps): react_jsx_runtime.JSX.Element;
|
|
20
|
+
|
|
21
|
+
declare function MediaLibrary(): react_jsx_runtime.JSX.Element;
|
|
22
|
+
|
|
23
|
+
declare function CategoryManager(): react_jsx_runtime.JSX.Element;
|
|
24
|
+
|
|
25
|
+
declare function SettingsPage(): react_jsx_runtime.JSX.Element;
|
|
26
|
+
|
|
27
|
+
interface SEOPanelProps {
|
|
28
|
+
seo: Record<string, unknown>;
|
|
29
|
+
onChange: (seo: Record<string, unknown>) => void;
|
|
30
|
+
title: string;
|
|
31
|
+
slug: string;
|
|
32
|
+
excerpt: string;
|
|
33
|
+
}
|
|
34
|
+
declare function SEOPanel({ seo, onChange, title, slug, excerpt }: SEOPanelProps): react_jsx_runtime.JSX.Element;
|
|
35
|
+
|
|
36
|
+
declare function setApiBase(path: string): void;
|
|
37
|
+
declare function useAdminApi(): {
|
|
38
|
+
get: (path: string) => Promise<any>;
|
|
39
|
+
post: (path: string, body?: unknown) => Promise<any>;
|
|
40
|
+
put: (path: string, body: unknown) => Promise<any>;
|
|
41
|
+
del: (path: string) => Promise<any>;
|
|
42
|
+
};
|
|
43
|
+
|
|
44
|
+
export { AdminLayout, CategoryManager, Dashboard, MediaLibrary, PostEditor, PostList, SEOPanel, SettingsPage, setApiBase, useAdminApi };
|