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/components/BlogCard.tsx","../../src/components/BlogSearch.tsx","../../src/components/TableOfContents.tsx","../../src/components/ShareButtons.tsx","../../src/components/ReadingProgressBar.tsx","../../src/components/Pagination.tsx","../../src/components/AuthorCard.tsx","../../src/components/BreadcrumbNav.tsx","../../src/components/CategoryList.tsx","../../src/components/TagCloud.tsx","../../src/components/CodeBlock.tsx","../../src/components/BlogListPage.tsx","../../src/components/BlogPostPage.tsx"],"names":["jsxs","jsx","useState","useEffect","Fragment"],"mappings":"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","file":"index.js","sourcesContent":["import React from 'react';\n\ninterface BlogCardProps {\n post: {\n slug: string;\n title: string;\n excerpt: string;\n coverImage?: { url: string; alt?: string };\n categories: string[];\n publishedAt?: string;\n readingTime: number;\n author: { name: string; avatar?: string };\n };\n layout?: 'vertical' | 'horizontal';\n basePath?: string;\n className?: string;\n}\n\nexport function BlogCard({\n post,\n layout = 'vertical',\n basePath = '/blog',\n className = '',\n}: BlogCardProps) {\n const date = post.publishedAt\n ? new Date(post.publishedAt).toLocaleDateString('en-US', {\n year: 'numeric',\n month: 'long',\n day: 'numeric',\n })\n : '';\n\n return (\n <article className={`nbk-card nbk-card-${layout} ${className}`}>\n <a href={`${basePath}/${post.slug}`} className=\"nbk-card-link\">\n {post.coverImage?.url && (\n <div className=\"nbk-card-image\">\n <img\n src={post.coverImage.url}\n alt={post.coverImage.alt || post.title}\n loading=\"lazy\"\n />\n </div>\n )}\n <div className=\"nbk-card-content\">\n {post.categories.length > 0 && (\n <div className=\"nbk-card-categories\">\n {post.categories.map((cat) => (\n <span key={cat} className=\"nbk-card-category\">\n {cat}\n </span>\n ))}\n </div>\n )}\n <h2 className=\"nbk-card-title\">{post.title}</h2>\n <p className=\"nbk-card-excerpt\">{post.excerpt}</p>\n <div className=\"nbk-card-meta\">\n {post.author.avatar && (\n <img\n src={post.author.avatar}\n alt={post.author.name}\n className=\"nbk-card-avatar\"\n />\n )}\n <span className=\"nbk-card-author\">{post.author.name}</span>\n {date && (\n <>\n <span className=\"nbk-card-sep\">·</span>\n <time className=\"nbk-card-date\">{date}</time>\n </>\n )}\n <span className=\"nbk-card-sep\">·</span>\n <span className=\"nbk-card-reading-time\">{post.readingTime} min read</span>\n </div>\n </div>\n </a>\n </article>\n );\n}\n","'use client';\n\nimport React, { useState, useCallback, useRef, useEffect } from 'react';\n\ninterface BlogSearchProps {\n onSearch?: (query: string) => void;\n apiPath?: string;\n placeholder?: string;\n className?: string;\n}\n\ninterface SearchResult {\n slug: string;\n title: string;\n excerpt: string;\n}\n\nexport function BlogSearch({\n onSearch,\n apiPath = '/api/blog',\n placeholder = 'Search posts...',\n className = '',\n}: BlogSearchProps) {\n const [query, setQuery] = useState('');\n const [results, setResults] = useState<SearchResult[]>([]);\n const [showResults, setShowResults] = useState(false);\n const [loading, setLoading] = useState(false);\n const debounceRef = useRef<ReturnType<typeof setTimeout>>();\n const containerRef = useRef<HTMLDivElement>(null);\n\n const search = useCallback(\n async (q: string) => {\n if (!q.trim()) {\n setResults([]);\n setShowResults(false);\n return;\n }\n\n setLoading(true);\n try {\n const res = await fetch(`${apiPath}/posts?q=${encodeURIComponent(q)}&limit=5&status=published`);\n const data = await res.json();\n if (data.success) {\n setResults(data.data || []);\n setShowResults(true);\n }\n } catch {\n setResults([]);\n } finally {\n setLoading(false);\n }\n },\n [apiPath]\n );\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const value = e.target.value;\n setQuery(value);\n\n if (debounceRef.current) clearTimeout(debounceRef.current);\n\n debounceRef.current = setTimeout(() => {\n search(value);\n onSearch?.(value);\n }, 300);\n };\n\n const handleSubmit = (e: React.FormEvent) => {\n e.preventDefault();\n onSearch?.(query);\n setShowResults(false);\n };\n\n useEffect(() => {\n function handleClickOutside(e: MouseEvent) {\n if (containerRef.current && !containerRef.current.contains(e.target as Node)) {\n setShowResults(false);\n }\n }\n document.addEventListener('mousedown', handleClickOutside);\n return () => document.removeEventListener('mousedown', handleClickOutside);\n }, []);\n\n return (\n <div className={`nbk-search ${className}`} ref={containerRef}>\n <form onSubmit={handleSubmit} className=\"nbk-search-form\">\n <input\n type=\"search\"\n value={query}\n onChange={handleChange}\n placeholder={placeholder}\n className=\"nbk-search-input\"\n onFocus={() => results.length > 0 && setShowResults(true)}\n />\n {loading && <span className=\"nbk-search-spinner\" />}\n </form>\n\n {showResults && results.length > 0 && (\n <div className=\"nbk-search-results\">\n {results.map((result) => (\n <a\n key={result.slug}\n href={`/blog/${result.slug}`}\n className=\"nbk-search-result\"\n onClick={() => setShowResults(false)}\n >\n <div className=\"nbk-search-result-title\">{result.title}</div>\n <div className=\"nbk-search-result-excerpt\">\n {result.excerpt?.slice(0, 100)}\n </div>\n </a>\n ))}\n </div>\n )}\n </div>\n );\n}\n","'use client';\n\nimport React, { useEffect, useState } from 'react';\n\ninterface Heading {\n id: string;\n text: string;\n level: number;\n}\n\ninterface TableOfContentsProps {\n headings: Heading[];\n className?: string;\n}\n\nexport function TableOfContentsComponent({ headings, className = '' }: TableOfContentsProps) {\n const [activeId, setActiveId] = useState('');\n\n useEffect(() => {\n const observer = new IntersectionObserver(\n (entries) => {\n for (const entry of entries) {\n if (entry.isIntersecting) {\n setActiveId(entry.target.id);\n }\n }\n },\n { rootMargin: '-80px 0px -80% 0px' }\n );\n\n headings.forEach(({ id }) => {\n const el = document.getElementById(id);\n if (el) observer.observe(el);\n });\n\n return () => observer.disconnect();\n }, [headings]);\n\n if (headings.length === 0) return null;\n\n return (\n <nav className={`nbk-toc ${className}`}>\n <h3 className=\"nbk-toc-title\">Table of Contents</h3>\n <ul className=\"nbk-toc-list\">\n {headings.map((heading) => (\n <li\n key={heading.id}\n className={`nbk-toc-item nbk-toc-level-${heading.level} ${\n activeId === heading.id ? 'active' : ''\n }`}\n >\n <a href={`#${heading.id}`} className=\"nbk-toc-link\">\n {heading.text}\n </a>\n </li>\n ))}\n </ul>\n </nav>\n );\n}\n","'use client';\n\nimport React, { useState } from 'react';\n\ninterface ShareButtonsProps {\n url: string;\n title: string;\n className?: string;\n}\n\nexport function ShareButtons({ url, title, className = '' }: ShareButtonsProps) {\n const [copied, setCopied] = useState(false);\n\n const encodedUrl = encodeURIComponent(url);\n const encodedTitle = encodeURIComponent(title);\n\n const share = (platform: string) => {\n const urls: Record<string, string> = {\n twitter: `https://twitter.com/intent/tweet?text=${encodedTitle}&url=${encodedUrl}`,\n linkedin: `https://www.linkedin.com/sharing/share-offsite/?url=${encodedUrl}`,\n facebook: `https://www.facebook.com/sharer/sharer.php?u=${encodedUrl}`,\n };\n\n const shareUrl = urls[platform];\n if (shareUrl) {\n window.open(shareUrl, '_blank', 'width=600,height=400');\n }\n };\n\n const copyLink = async () => {\n try {\n await navigator.clipboard.writeText(url);\n setCopied(true);\n setTimeout(() => setCopied(false), 2000);\n } catch {\n // Fallback\n const input = document.createElement('input');\n input.value = url;\n document.body.appendChild(input);\n input.select();\n document.execCommand('copy');\n document.body.removeChild(input);\n setCopied(true);\n setTimeout(() => setCopied(false), 2000);\n }\n };\n\n return (\n <div className={`nbk-share ${className}`}>\n <span className=\"nbk-share-label\">Share this post:</span>\n <div className=\"nbk-share-buttons\">\n <button onClick={() => share('twitter')} className=\"nbk-share-btn nbk-share-twitter\" title=\"Share on Twitter\">\n <svg viewBox=\"0 0 24 24\" width=\"18\" height=\"18\" fill=\"currentColor\">\n <path d=\"M18.244 2.25h3.308l-7.227 8.26 8.502 11.24H16.17l-5.214-6.817L4.99 21.75H1.68l7.73-8.835L1.254 2.25H8.08l4.713 6.231zm-1.161 17.52h1.833L7.084 4.126H5.117z\" />\n </svg>\n </button>\n <button onClick={() => share('linkedin')} className=\"nbk-share-btn nbk-share-linkedin\" title=\"Share on LinkedIn\">\n <svg viewBox=\"0 0 24 24\" width=\"18\" height=\"18\" fill=\"currentColor\">\n <path d=\"M20.447 20.452h-3.554v-5.569c0-1.328-.027-3.037-1.852-3.037-1.853 0-2.136 1.445-2.136 2.939v5.667H9.351V9h3.414v1.561h.046c.477-.9 1.637-1.85 3.37-1.85 3.601 0 4.267 2.37 4.267 5.455v6.286zM5.337 7.433a2.062 2.062 0 01-2.063-2.065 2.064 2.064 0 112.063 2.065zm1.782 13.019H3.555V9h3.564v11.452zM22.225 0H1.771C.792 0 0 .774 0 1.729v20.542C0 23.227.792 24 1.771 24h20.451C23.2 24 24 23.227 24 22.271V1.729C24 .774 23.2 0 22.222 0h.003z\" />\n </svg>\n </button>\n <button onClick={() => share('facebook')} className=\"nbk-share-btn nbk-share-facebook\" title=\"Share on Facebook\">\n <svg viewBox=\"0 0 24 24\" width=\"18\" height=\"18\" fill=\"currentColor\">\n <path d=\"M24 12.073c0-6.627-5.373-12-12-12s-12 5.373-12 12c0 5.99 4.388 10.954 10.125 11.854v-8.385H7.078v-3.47h3.047V9.43c0-3.007 1.792-4.669 4.533-4.669 1.312 0 2.686.235 2.686.235v2.953H15.83c-1.491 0-1.956.925-1.956 1.874v2.25h3.328l-.532 3.47h-2.796v8.385C19.612 23.027 24 18.062 24 12.073z\" />\n </svg>\n </button>\n <button onClick={copyLink} className=\"nbk-share-btn nbk-share-copy\" title={copied ? 'Copied!' : 'Copy link'}>\n {copied ? (\n <svg viewBox=\"0 0 24 24\" width=\"18\" height=\"18\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\n <path d=\"M20 6L9 17l-5-5\" />\n </svg>\n ) : (\n <svg viewBox=\"0 0 24 24\" width=\"18\" height=\"18\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\n <rect x=\"9\" y=\"9\" width=\"13\" height=\"13\" rx=\"2\" ry=\"2\" />\n <path d=\"M5 15H4a2 2 0 01-2-2V4a2 2 0 012-2h9a2 2 0 012 2v1\" />\n </svg>\n )}\n </button>\n </div>\n </div>\n );\n}\n","'use client';\n\nimport React, { useEffect, useState } from 'react';\n\ninterface ReadingProgressBarProps {\n className?: string;\n}\n\nexport function ReadingProgressBar({ className = '' }: ReadingProgressBarProps) {\n const [progress, setProgress] = useState(0);\n\n useEffect(() => {\n function handleScroll() {\n const scrollTop = window.scrollY;\n const docHeight = document.documentElement.scrollHeight - window.innerHeight;\n if (docHeight > 0) {\n setProgress(Math.min((scrollTop / docHeight) * 100, 100));\n }\n }\n\n window.addEventListener('scroll', handleScroll, { passive: true });\n return () => window.removeEventListener('scroll', handleScroll);\n }, []);\n\n return (\n <div className={`nbk-progress-bar ${className}`}>\n <div\n className=\"nbk-progress-fill\"\n style={{ width: `${progress}%` }}\n />\n </div>\n );\n}\n","import React from 'react';\n\ninterface PaginationProps {\n currentPage: number;\n totalPages: number;\n basePath?: string;\n category?: string;\n className?: string;\n}\n\nfunction buildHref(basePath: string, page: number, category?: string) {\n const params = new URLSearchParams();\n if (page > 1) params.set('page', String(page));\n if (category) params.set('category', category);\n const qs = params.toString();\n return qs ? `${basePath}?${qs}` : basePath;\n}\n\nexport function Pagination({\n currentPage,\n totalPages,\n basePath = '/blog',\n category,\n className = '',\n}: PaginationProps) {\n if (totalPages <= 1) return null;\n\n const pages: (number | string)[] = [];\n const maxVisible = 5;\n\n if (totalPages <= maxVisible + 2) {\n for (let i = 1; i <= totalPages; i++) pages.push(i);\n } else {\n pages.push(1);\n const start = Math.max(2, currentPage - 1);\n const end = Math.min(totalPages - 1, currentPage + 1);\n\n if (start > 2) pages.push('...');\n for (let i = start; i <= end; i++) pages.push(i);\n if (end < totalPages - 1) pages.push('...');\n pages.push(totalPages);\n }\n\n return (\n <nav className={`nbk-pagination ${className}`}>\n {currentPage > 1 ? (\n <a href={buildHref(basePath, currentPage - 1, category)} className=\"nbk-pagination-btn\">\n Previous\n </a>\n ) : (\n <span className=\"nbk-pagination-btn disabled\">Previous</span>\n )}\n\n <div className=\"nbk-pagination-pages\">\n {pages.map((page, idx) =>\n typeof page === 'string' ? (\n <span key={`ellipsis-${idx}`} className=\"nbk-pagination-ellipsis\">\n ...\n </span>\n ) : page === currentPage ? (\n <span key={page} className=\"nbk-pagination-page active\">\n {page}\n </span>\n ) : (\n <a\n key={page}\n href={buildHref(basePath, page, category)}\n className=\"nbk-pagination-page\"\n >\n {page}\n </a>\n )\n )}\n </div>\n\n {currentPage < totalPages ? (\n <a href={buildHref(basePath, currentPage + 1, category)} className=\"nbk-pagination-btn\">\n Next\n </a>\n ) : (\n <span className=\"nbk-pagination-btn disabled\">Next</span>\n )}\n </nav>\n );\n}\n","import React from 'react';\n\ninterface AuthorCardProps {\n author: {\n name: string;\n avatar?: string;\n bio?: string;\n url?: string;\n };\n className?: string;\n}\n\nexport function AuthorCard({ author, className = '' }: AuthorCardProps) {\n return (\n <div className={`nbk-author-card ${className}`}>\n {author.avatar && (\n <img src={author.avatar} alt={author.name} className=\"nbk-author-avatar\" />\n )}\n <div className=\"nbk-author-info\">\n <div className=\"nbk-author-name\">\n {author.url ? (\n <a href={author.url} target=\"_blank\" rel=\"noopener noreferrer\">\n {author.name}\n </a>\n ) : (\n author.name\n )}\n </div>\n {author.bio && <p className=\"nbk-author-bio\">{author.bio}</p>}\n </div>\n </div>\n );\n}\n","import React from 'react';\n\ninterface BreadcrumbItem {\n label: string;\n href?: string;\n}\n\ninterface BreadcrumbNavProps {\n items: BreadcrumbItem[];\n className?: string;\n}\n\nexport function BreadcrumbNav({ items, className = '' }: BreadcrumbNavProps) {\n return (\n <nav className={`nbk-breadcrumb ${className}`} aria-label=\"Breadcrumb\">\n <ol className=\"nbk-breadcrumb-list\">\n {items.map((item, idx) => (\n <li key={idx} className=\"nbk-breadcrumb-item\">\n {idx > 0 && <span className=\"nbk-breadcrumb-sep\">/</span>}\n {item.href ? (\n <a href={item.href} className=\"nbk-breadcrumb-link\">\n {item.label}\n </a>\n ) : (\n <span className=\"nbk-breadcrumb-current\">{item.label}</span>\n )}\n </li>\n ))}\n </ol>\n </nav>\n );\n}\n","import React from 'react';\n\ninterface CategoryItem {\n name: string;\n slug: string;\n postCount: number;\n}\n\ninterface CategoryListProps {\n categories: CategoryItem[];\n activeCategory?: string;\n basePath?: string;\n className?: string;\n}\n\nexport function CategoryList({\n categories,\n activeCategory,\n basePath = '/blog',\n className = '',\n}: CategoryListProps) {\n if (categories.length === 0) return null;\n\n return (\n <div className={`nbk-category-list ${className}`}>\n <h3 className=\"nbk-category-list-title\">Categories</h3>\n <ul className=\"nbk-category-items\">\n {categories.map((cat) => (\n <li key={cat.slug} className=\"nbk-category-item\">\n <a\n href={`${basePath}/category/${cat.slug}`}\n className={`nbk-category-btn ${activeCategory === cat.slug ? 'active' : ''}`}\n >\n {cat.name}\n <span className=\"nbk-category-count\">{cat.postCount}</span>\n </a>\n </li>\n ))}\n </ul>\n </div>\n );\n}\n","'use client';\n\nimport React from 'react';\n\ninterface TagCloudProps {\n tags: { name: string; count: number }[];\n basePath?: string;\n className?: string;\n}\n\nexport function TagCloud({ tags, basePath = '/blog', className = '' }: TagCloudProps) {\n if (tags.length === 0) return null;\n\n const maxCount = Math.max(...tags.map((t) => t.count));\n\n return (\n <div className={`nbk-tag-cloud ${className}`}>\n <h3 className=\"nbk-tag-cloud-title\">Tags</h3>\n <div className=\"nbk-tags\">\n {tags.map((tag) => {\n const size = 0.8 + (tag.count / maxCount) * 0.6;\n return (\n <a\n key={tag.name}\n href={`${basePath}?tag=${tag.name}`}\n className=\"nbk-tag\"\n style={{ fontSize: `${size}rem` }}\n >\n #{tag.name}\n </a>\n );\n })}\n </div>\n </div>\n );\n}\n","'use client';\n\nimport React, { useState } from 'react';\n\ninterface CodeBlockProps {\n code: string;\n language?: string;\n filename?: string;\n className?: string;\n}\n\nexport function CodeBlock({\n code,\n language = 'plaintext',\n filename,\n className = '',\n}: CodeBlockProps) {\n const [copied, setCopied] = useState(false);\n\n const handleCopy = async () => {\n try {\n await navigator.clipboard.writeText(code);\n setCopied(true);\n setTimeout(() => setCopied(false), 2000);\n } catch {\n // fallback\n }\n };\n\n return (\n <div className={`nbk-code-block ${className}`}>\n <div className=\"nbk-code-header\">\n <span className=\"nbk-code-lang\">{filename || language}</span>\n <button onClick={handleCopy} className=\"nbk-code-copy\">\n {copied ? 'Copied!' : 'Copy'}\n </button>\n </div>\n <pre className={`nbk-code-pre language-${language}`}>\n <code>{code}</code>\n </pre>\n </div>\n );\n}\n","import React from 'react';\nimport { BlogCard } from './BlogCard';\nimport { BlogSearch } from './BlogSearch';\nimport { Pagination } from './Pagination';\nimport { CategoryList } from './CategoryList';\n\nexport interface BlogListSlots {\n header?: React.ReactNode;\n footer?: React.ReactNode;\n beforePosts?: React.ReactNode;\n afterPosts?: React.ReactNode;\n sidebar?: React.ReactNode;\n renderCard?: (post: any) => React.ReactNode;\n}\n\ninterface BlogListPageProps {\n posts: any[];\n total: number;\n page?: number;\n postsPerPage?: number;\n categories?: any[];\n activeCategory?: string;\n showCategories?: boolean;\n showSearch?: boolean;\n layout?: 'grid' | 'list' | 'magazine';\n basePath?: string;\n apiPath?: string;\n className?: string;\n slots?: BlogListSlots;\n}\n\nexport function BlogListPage({\n posts,\n total,\n page = 1,\n postsPerPage = 10,\n categories = [],\n activeCategory,\n showCategories = true,\n showSearch = true,\n layout = 'grid',\n basePath = '/blog',\n apiPath = '/api/blog',\n className = '',\n slots,\n}: BlogListPageProps) {\n const totalPages = Math.ceil(total / postsPerPage);\n\n return (\n <>\n {slots?.header}\n <div className={`nbk-blog-list ${className}`}>\n <div className=\"nbk-blog-header\">\n {showSearch && <BlogSearch apiPath={apiPath} />}\n </div>\n\n {slots?.beforePosts}\n\n <div className=\"nbk-blog-layout\">\n <div className=\"nbk-blog-main\">\n {posts.length === 0 ? (\n <div className=\"nbk-empty-state\">\n <p>No posts found.</p>\n </div>\n ) : (\n <div className={`nbk-posts-${layout}`}>\n {posts.map((post) =>\n slots?.renderCard ? (\n slots.renderCard(post)\n ) : (\n <BlogCard\n key={String(post._id || post.slug)}\n post={post}\n layout={layout === 'list' ? 'horizontal' : 'vertical'}\n basePath={basePath}\n />\n )\n )}\n </div>\n )}\n\n {totalPages > 1 && (\n <Pagination\n currentPage={page}\n totalPages={totalPages}\n basePath={basePath}\n category={activeCategory}\n />\n )}\n </div>\n\n {slots?.sidebar || (showCategories && categories.length > 0 && (\n <aside className=\"nbk-blog-sidebar\">\n <CategoryList\n categories={categories}\n activeCategory={activeCategory}\n basePath={basePath}\n />\n </aside>\n ))}\n </div>\n\n {slots?.afterPosts}\n </div>\n {slots?.footer}\n </>\n );\n}\n","import React from 'react';\nimport { TableOfContentsComponent } from './TableOfContents';\nimport { ShareButtons } from './ShareButtons';\nimport { AuthorCard } from './AuthorCard';\nimport { ReadingProgressBar } from './ReadingProgressBar';\nimport { BreadcrumbNav } from './BreadcrumbNav';\nimport { BlogCard } from './BlogCard';\n\nexport interface BlogPostSlots {\n header?: React.ReactNode;\n footer?: React.ReactNode;\n beforeContent?: React.ReactNode;\n afterContent?: React.ReactNode;\n}\n\ninterface BlogPostPageProps {\n post: any;\n relatedPosts?: any[];\n showTOC?: boolean;\n tocPosition?: 'sidebar' | 'top' | 'none';\n showAuthor?: boolean;\n showRelatedPosts?: boolean;\n showShareButtons?: boolean;\n showReadingProgress?: boolean;\n basePath?: string;\n className?: string;\n slots?: BlogPostSlots;\n}\n\nexport function BlogPostPage({\n post,\n relatedPosts = [],\n showTOC = true,\n tocPosition = 'sidebar',\n showAuthor = true,\n showRelatedPosts = true,\n showShareButtons = true,\n showReadingProgress = true,\n basePath = '/blog',\n className = '',\n slots,\n}: BlogPostPageProps) {\n if (!post) {\n return <div className=\"nbk-not-found\">Post not found</div>;\n }\n\n // Extract headings from HTML for TOC\n const headings: { id: string; text: string; level: number }[] = [];\n const headingRegex = /<h([2-4])\\s+id=\"([^\"]*)\"[^>]*>(.*?)<\\/h[2-4]>/gi;\n let match;\n while ((match = headingRegex.exec(post.contentHTML || '')) !== null) {\n headings.push({\n level: parseInt(match[1]),\n id: match[2],\n text: match[3].replace(/<[^>]+>/g, ''),\n });\n }\n\n const date = post.publishedAt\n ? new Date(post.publishedAt).toLocaleDateString('en-US', {\n year: 'numeric',\n month: 'long',\n day: 'numeric',\n })\n : '';\n\n const postUrl = `${basePath}/${post.slug}`;\n const hasTOC = showTOC && tocPosition !== 'none' && headings.length > 2;\n const hasSidebarTOC = hasTOC && tocPosition === 'sidebar';\n\n return (\n <>\n {slots?.header}\n <article className={`nbk-post ${hasSidebarTOC ? 'nbk-post-with-toc' : ''} ${className}`}>\n {showReadingProgress && <ReadingProgressBar />}\n\n <BreadcrumbNav\n items={[\n { label: 'Home', href: '/' },\n { label: 'Blog', href: basePath },\n ...(post.categories?.[0]\n ? [{ label: post.categories[0], href: `${basePath}/category/${post.categories[0]}` }]\n : []),\n { label: post.title },\n ]}\n />\n\n <header className=\"nbk-post-header\">\n {post.categories?.length > 0 && (\n <div className=\"nbk-post-categories\">\n {post.categories.map((cat: string) => (\n <a key={cat} href={`${basePath}/category/${cat}`} className=\"nbk-post-category\">\n {cat}\n </a>\n ))}\n </div>\n )}\n <h1 className=\"nbk-post-title\">{post.title}</h1>\n <div className=\"nbk-post-meta\">\n {post.author?.avatar && (\n <img src={post.author.avatar} alt={post.author.name} className=\"nbk-post-avatar\" />\n )}\n <span className=\"nbk-post-author\">{post.author?.name}</span>\n {date && (\n <>\n <span className=\"nbk-post-sep\">·</span>\n <time className=\"nbk-post-date\" dateTime={String(post.publishedAt)}>\n {date}\n </time>\n </>\n )}\n <span className=\"nbk-post-sep\">·</span>\n <span className=\"nbk-post-reading-time\">{post.readingTime} min read</span>\n </div>\n </header>\n\n {post.coverImage?.url && (\n <div className=\"nbk-post-cover\">\n <img\n src={post.coverImage.url}\n alt={post.coverImage.alt || post.title}\n className=\"nbk-post-cover-img\"\n />\n </div>\n )}\n\n {hasTOC && tocPosition === 'top' && (\n <div className=\"nbk-post-toc-inline\">\n <TableOfContentsComponent headings={headings} />\n </div>\n )}\n\n {slots?.beforeContent}\n\n <div className=\"nbk-post-layout\">\n {hasSidebarTOC && (\n <aside className=\"nbk-post-toc-sidebar\">\n <TableOfContentsComponent headings={headings} />\n </aside>\n )}\n\n <div\n className=\"nbk-post-content\"\n dangerouslySetInnerHTML={{ __html: post.contentHTML || '' }}\n />\n </div>\n\n {slots?.afterContent}\n\n {post.tags?.length > 0 && (\n <div className=\"nbk-post-tags\">\n {post.tags.map((tag: string) => (\n <a key={tag} href={`${basePath}?tag=${tag}`} className=\"nbk-tag\">\n #{tag}\n </a>\n ))}\n </div>\n )}\n\n {showShareButtons && (\n <ShareButtons url={postUrl} title={post.title} />\n )}\n\n {showAuthor && post.author && (\n <AuthorCard author={post.author} />\n )}\n\n {showRelatedPosts && relatedPosts.length > 0 && (\n <section className=\"nbk-related\">\n <h2 className=\"nbk-related-title\">Related Posts</h2>\n <div className=\"nbk-related-grid\">\n {relatedPosts.map((p) => (\n <BlogCard key={String(p._id || p.slug)} post={p} basePath={basePath} />\n ))}\n </div>\n </section>\n )}\n </article>\n {slots?.footer}\n </>\n );\n}\n"]}
|