next-blogpanel 1.0.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 +211 -0
- package/dist/admin/index.cjs +3062 -0
- package/dist/admin/index.cjs.map +1 -0
- package/dist/admin/index.d.cts +51 -0
- package/dist/admin/index.d.ts +51 -0
- package/dist/admin/index.js +3029 -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-file.cjs +46 -0
- package/dist/api/media-file.cjs.map +1 -0
- package/dist/api/media-file.d.cts +7 -0
- package/dist/api/media-file.d.ts +7 -0
- package/dist/api/media-file.js +44 -0
- package/dist/api/media-file.js.map +1 -0
- package/dist/api/media.cjs +180 -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 +176 -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/api/tokens.cjs +56 -0
- package/dist/api/tokens.cjs.map +1 -0
- package/dist/api/tokens.d.cts +22 -0
- package/dist/api/tokens.d.ts +22 -0
- package/dist/api/tokens.js +52 -0
- package/dist/api/tokens.js.map +1 -0
- package/dist/chunk-2M46MMWN.cjs +76 -0
- package/dist/chunk-2M46MMWN.cjs.map +1 -0
- package/dist/chunk-4GK22Q3R.cjs +229 -0
- package/dist/chunk-4GK22Q3R.cjs.map +1 -0
- package/dist/chunk-6PZ772NQ.js +595 -0
- package/dist/chunk-6PZ772NQ.js.map +1 -0
- package/dist/chunk-BZXPRGLN.cjs +351 -0
- package/dist/chunk-BZXPRGLN.cjs.map +1 -0
- package/dist/chunk-DAX5C6SC.cjs +86 -0
- package/dist/chunk-DAX5C6SC.cjs.map +1 -0
- package/dist/chunk-DWNMHQ4I.cjs +57 -0
- package/dist/chunk-DWNMHQ4I.cjs.map +1 -0
- package/dist/chunk-FPGVR2BX.cjs +121 -0
- package/dist/chunk-FPGVR2BX.cjs.map +1 -0
- package/dist/chunk-JBP3G4QJ.js +50 -0
- package/dist/chunk-JBP3G4QJ.js.map +1 -0
- package/dist/chunk-JDP4DIHI.js +215 -0
- package/dist/chunk-JDP4DIHI.js.map +1 -0
- package/dist/chunk-LIZOVA4W.js +118 -0
- package/dist/chunk-LIZOVA4W.js.map +1 -0
- package/dist/chunk-QLBTOCT3.js +118 -0
- package/dist/chunk-QLBTOCT3.js.map +1 -0
- package/dist/chunk-UI2KDZ5H.js +344 -0
- package/dist/chunk-UI2KDZ5H.js.map +1 -0
- package/dist/chunk-V7QPRX4A.cjs +125 -0
- package/dist/chunk-V7QPRX4A.cjs.map +1 -0
- package/dist/chunk-VEJFN65Y.js +82 -0
- package/dist/chunk-VEJFN65Y.js.map +1 -0
- package/dist/chunk-WYZFAI6O.js +74 -0
- package/dist/chunk-WYZFAI6O.js.map +1 -0
- package/dist/chunk-XLYTATRQ.cjs +637 -0
- package/dist/chunk-XLYTATRQ.cjs.map +1 -0
- package/dist/cli/index.cjs +2036 -0
- package/dist/components/index.cjs +647 -0
- package/dist/components/index.cjs.map +1 -0
- package/dist/components/index.d.cts +187 -0
- package/dist/components/index.d.ts +187 -0
- package/dist/components/index.js +633 -0
- package/dist/components/index.js.map +1 -0
- package/dist/db-M3KXLBUP.js +3 -0
- package/dist/db-M3KXLBUP.js.map +1 -0
- package/dist/db-TDCZNY3Q.cjs +112 -0
- package/dist/db-TDCZNY3Q.cjs.map +1 -0
- package/dist/editor/index.cjs +1126 -0
- package/dist/editor/index.cjs.map +1 -0
- package/dist/editor/index.d.cts +137 -0
- package/dist/editor/index.d.ts +137 -0
- package/dist/editor/index.js +1093 -0
- package/dist/editor/index.js.map +1 -0
- package/dist/index-BcNka7gK.d.cts +475 -0
- package/dist/index-DPRgaNEE.d.ts +475 -0
- package/dist/index.cjs +433 -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 +209 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/index.cjs +193 -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 +8 -0
- package/dist/lib/index.js.map +1 -0
- package/dist/styles/admin.css +667 -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-CgrBuig-.d.cts +778 -0
- package/dist/types-CgrBuig-.d.ts +778 -0
- package/package.json +140 -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/lib/url.ts","../../src/components/BlogPostPage.tsx"],"names":["jsxs","jsx","useState","useEffect","Fragment"],"mappings":"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","file":"index.js","sourcesContent":["interface 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={`nbp-card nbp-card-${layout} ${className}`}>\n <a href={`${basePath}/${post.slug}`} className=\"nbp-card-link\">\n {post.coverImage?.url && (\n <div className=\"nbp-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=\"nbp-card-content\">\n {post.categories.length > 0 && (\n <div className=\"nbp-card-categories\">\n {post.categories.map((cat) => (\n <span key={cat} className=\"nbp-card-category\">\n {cat}\n </span>\n ))}\n </div>\n )}\n <h2 className=\"nbp-card-title\">{post.title}</h2>\n <p className=\"nbp-card-excerpt\">{post.excerpt}</p>\n <div className=\"nbp-card-meta\">\n {post.author.avatar && (\n <img\n src={post.author.avatar}\n alt={post.author.name}\n className=\"nbp-card-avatar\"\n />\n )}\n <span className=\"nbp-card-author\">{post.author.name}</span>\n {date && (\n <>\n <span className=\"nbp-card-sep\">·</span>\n <time className=\"nbp-card-date\">{date}</time>\n </>\n )}\n <span className=\"nbp-card-sep\">·</span>\n <span className=\"nbp-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 basePath?: 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 basePath = '/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 void 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={`nbp-search ${className}`} ref={containerRef}>\n <form onSubmit={handleSubmit} className=\"nbp-search-form\">\n <input\n type=\"search\"\n value={query}\n onChange={handleChange}\n placeholder={placeholder}\n className=\"nbp-search-input\"\n onFocus={() => results.length > 0 && setShowResults(true)}\n />\n {loading && <span className=\"nbp-search-spinner\" />}\n </form>\n\n {showResults && results.length > 0 && (\n <div className=\"nbp-search-results\">\n {results.map((result) => (\n <a\n key={result.slug}\n href={`${basePath}/${result.slug}`}\n className=\"nbp-search-result\"\n onClick={() => setShowResults(false)}\n >\n <div className=\"nbp-search-result-title\">{result.title}</div>\n <div className=\"nbp-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 { 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={`nbp-toc ${className}`}>\n <h3 className=\"nbp-toc-title\">Table of Contents</h3>\n <ul className=\"nbp-toc-list\">\n {headings.map((heading) => (\n <li\n key={heading.id}\n className={`nbp-toc-item nbp-toc-level-${heading.level} ${\n activeId === heading.id ? 'active' : ''\n }`}\n >\n <a href={`#${heading.id}`} className=\"nbp-toc-link\">\n {heading.text}\n </a>\n </li>\n ))}\n </ul>\n </nav>\n );\n}\n","'use client';\n\nimport { 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 fullUrl = typeof window !== 'undefined'\n ? `${window.location.origin}${url}`\n : url;\n\n const encodedUrl = encodeURIComponent(fullUrl);\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(fullUrl);\n setCopied(true);\n setTimeout(() => setCopied(false), 2000);\n } catch {\n // Fallback\n const input = document.createElement('input');\n input.value = fullUrl;\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={`nbp-share ${className}`}>\n <span className=\"nbp-share-label\">Share this post:</span>\n <div className=\"nbp-share-buttons\">\n <button onClick={() => share('twitter')} className=\"nbp-share-btn nbp-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=\"nbp-share-btn nbp-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=\"nbp-share-btn nbp-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=\"nbp-share-btn nbp-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 { 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={`nbp-progress-bar ${className}`}>\n <div\n className=\"nbp-progress-fill\"\n style={{ width: `${progress}%` }}\n />\n </div>\n );\n}\n","interface 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={`nbp-pagination ${className}`}>\n {currentPage > 1 ? (\n <a href={buildHref(basePath, currentPage - 1, category)} className=\"nbp-pagination-btn\">\n Previous\n </a>\n ) : (\n <span className=\"nbp-pagination-btn disabled\">Previous</span>\n )}\n\n <div className=\"nbp-pagination-pages\">\n {pages.map((page, idx) =>\n typeof page === 'string' ? (\n <span key={`ellipsis-${idx}`} className=\"nbp-pagination-ellipsis\">\n ...\n </span>\n ) : page === currentPage ? (\n <span key={page} className=\"nbp-pagination-page active\">\n {page}\n </span>\n ) : (\n <a\n key={page}\n href={buildHref(basePath, page, category)}\n className=\"nbp-pagination-page\"\n >\n {page}\n </a>\n )\n )}\n </div>\n\n {currentPage < totalPages ? (\n <a href={buildHref(basePath, currentPage + 1, category)} className=\"nbp-pagination-btn\">\n Next\n </a>\n ) : (\n <span className=\"nbp-pagination-btn disabled\">Next</span>\n )}\n </nav>\n );\n}\n","interface 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={`nbp-author-card ${className}`}>\n {author.avatar && (\n <img src={author.avatar} alt={author.name} className=\"nbp-author-avatar\" />\n )}\n <div className=\"nbp-author-info\">\n <div className=\"nbp-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=\"nbp-author-bio\">{author.bio}</p>}\n </div>\n </div>\n );\n}\n","interface 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={`nbp-breadcrumb ${className}`} aria-label=\"Breadcrumb\">\n <ol className=\"nbp-breadcrumb-list\">\n {items.map((item, idx) => (\n <li key={idx} className=\"nbp-breadcrumb-item\">\n {idx > 0 && <span className=\"nbp-breadcrumb-sep\">/</span>}\n {item.href ? (\n <a href={item.href} className=\"nbp-breadcrumb-link\">\n {item.label}\n </a>\n ) : (\n <span className=\"nbp-breadcrumb-current\">{item.label}</span>\n )}\n </li>\n ))}\n </ol>\n </nav>\n );\n}\n","interface 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={`nbp-category-list ${className}`}>\n <h3 className=\"nbp-category-list-title\">Categories</h3>\n <ul className=\"nbp-category-items\">\n {categories.map((cat) => (\n <li key={cat.slug} className=\"nbp-category-item\">\n <a\n href={`${basePath}/category/${cat.slug}`}\n className={`nbp-category-btn ${activeCategory === cat.slug ? 'active' : ''}`}\n >\n {cat.name}\n <span className=\"nbp-category-count\">{cat.postCount}</span>\n </a>\n </li>\n ))}\n </ul>\n </div>\n );\n}\n","'use client';\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={`nbp-tag-cloud ${className}`}>\n <h3 className=\"nbp-tag-cloud-title\">Tags</h3>\n <div className=\"nbp-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=\"nbp-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 { 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={`nbp-code-block ${className}`}>\n <div className=\"nbp-code-header\">\n <span className=\"nbp-code-lang\">{filename || language}</span>\n <button onClick={handleCopy} className=\"nbp-code-copy\">\n {copied ? 'Copied!' : 'Copy'}\n </button>\n </div>\n <pre className={`nbp-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={`nbp-blog-list ${className}`}>\n <div className=\"nbp-blog-header\">\n {showSearch && <BlogSearch apiPath={apiPath} />}\n </div>\n\n {slots?.beforePosts}\n\n <div className=\"nbp-blog-layout\">\n <div className=\"nbp-blog-main\">\n {posts.length === 0 ? (\n <div className=\"nbp-empty-state\">\n <p>No posts found.</p>\n </div>\n ) : (\n <div className={`nbp-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=\"nbp-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","/**\n * URL absolutisation for the contexts that require it.\n *\n * Deliberately free of any environment or configuration access, and free of\n * any Node built-in, so it can be imported from client components as well as\n * from server code. Callers supply the site URL; on the server that is\n * `getEnvConfig().BLOGPANEL_SITE_URL`, in a component it is a prop.\n *\n * Why absolutise at the point of consumption rather than at write time: the\n * stored URL has to survive the site moving. GridFS media URLs are persisted\n * into `nbk_media` documents and into the body of every post that embeds the\n * image, so anything baked into them is permanent — a localhost or staging\n * origin captured at upload time would follow the content to production with\n * no way back short of a database rewrite. `BLOGPANEL_SITE_URL` legitimately\n * differs between environments; the storage key does not. Keeping stored URLs\n * origin-relative and prefixing them in the handful of places that require an\n * absolute URL (Open Graph, Twitter cards, JSON-LD, RSS enclosures) keeps the\n * mutable part mutable.\n */\n\n/** True for `https://…`, `data:…`, `//cdn…` — anything already resolvable without a base. */\nexport function isAbsoluteUrl(url: string): boolean {\n return /^[a-z][a-z0-9+.-]*:/i.test(url) || url.startsWith('//');\n}\n\nconst warned = Symbol.for('next-blogpanel.url.warned');\n\nfunction warnOnce(context: string, url: string): void {\n const store = globalThis as unknown as Record<symbol, Set<string> | undefined>;\n const seen = (store[warned] ||= new Set<string>());\n if (seen.has(context)) return;\n seen.add(context);\n console.warn(\n `[blogpanel] BLOGPANEL_SITE_URL is not set, so ${context} was omitted rather than emitted as the relative URL \"${url}\". ` +\n `Open Graph, Twitter cards, schema.org and RSS all require absolute URLs; a relative one is not a smaller version of the right answer, it is invalid. ` +\n `Set BLOGPANEL_SITE_URL to your site's origin (no trailing slash).`\n );\n}\n\n/**\n * Returns `url` as an absolute URL, or `undefined` when it cannot be made one.\n *\n * Already-absolute inputs (R2 public URLs, `data:` URIs, protocol-relative\n * hosts) are returned untouched. Root-relative inputs (the GridFS default,\n * `/api/blog/media/file/…`) are prefixed with `siteUrl`. When `siteUrl` is\n * empty the result is `undefined` — callers must then omit the field, which\n * is the only honest option: emitting the bare relative path produces a\n * malformed `og:image`/`<enclosure url>` that consumers resolve against their\n * own origin, and emitting a half-formed absolute URL is worse still.\n *\n * Pass `context` to have the omission reported once per process.\n */\nexport function absoluteUrl(\n url: string | null | undefined,\n siteUrl: string | null | undefined,\n context?: string\n): string | undefined {\n if (!url) return undefined;\n if (isAbsoluteUrl(url)) return url;\n\n const base = (siteUrl || '').trim().replace(/\\/+$/, '');\n if (!base) {\n if (context) warnOnce(context, url);\n return undefined;\n }\n\n return url.startsWith('/') ? `${base}${url}` : `${base}/${url}`;\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';\nimport { absoluteUrl } from '../lib/url';\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 /**\n * Absolute origin of the site, e.g. `https://example.com` — the value of\n * `BLOGPANEL_SITE_URL`. Passed as a prop rather than read internally.\n *\n * This file has no `'use client'` directive of its own — it is a Server\n * Component — so that alone isn't why it can't just call `getEnvConfig()`.\n * The reason is the barrel it ships through: `BlogPostPage` is exported\n * from `next-blogpanel/components` alongside genuine client components\n * (`BlogSearch`, `ShareButtons`, `TableOfContents`, …), and this package\n * does not control which context a consuming app renders it from. Reading\n * `BLOGPANEL_SITE_URL` here would break the moment this component ends up\n * in a client module graph, since `BLOGPANEL_*` variables are server-only\n * and are never inlined into a browser bundle. Accepting `siteUrl` as a\n * prop keeps the component correct regardless of where it's rendered from.\n *\n * Used to absolutise the JSON-LD URLs. The default GridFS media URL is\n * root-relative (`/api/blog/media/file/…`) and schema.org consumers fetch\n * `image` out of band, so without this the `image` property is omitted\n * rather than emitted as an unresolvable path.\n */\n siteUrl?: 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 siteUrl = '',\n className = '',\n slots,\n}: BlogPostPageProps) {\n if (!post) {\n return <div className=\"nbp-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 // Page URLs stay relative when no siteUrl is given (unchanged behaviour);\n // the image is dropped instead, because an unresolvable image URL is worse\n // than no image property at all.\n const ldUrl = (path: string) => absoluteUrl(path, siteUrl) ?? path;\n const ldImage = absoluteUrl(\n post.coverImage?.url || post.seo?.ogImage,\n siteUrl,\n 'the JSON-LD image on BlogPostPage (pass the siteUrl prop)'\n );\n const blogLabel = (() => {\n const segment = basePath.split('/').filter(Boolean).pop() || 'Blog';\n return segment.charAt(0).toUpperCase() + segment.slice(1);\n })();\n const hasTOC = showTOC && tocPosition !== 'none' && headings.length > 2;\n const hasSidebarTOC = hasTOC && tocPosition === 'sidebar';\n\n // Build JSON-LD structured data\n const blogPostingLd = {\n '@context': 'https://schema.org',\n '@type': 'BlogPosting',\n headline: post.title,\n description: post.excerpt || '',\n image: ldImage,\n datePublished: post.publishedAt || undefined,\n dateModified: post.updatedAt || post.publishedAt || undefined,\n author: {\n '@type': 'Person',\n name: post.author?.name || 'Unknown',\n ...(post.author?.url ? { url: post.author.url } : {}),\n },\n mainEntityOfPage: { '@type': 'WebPage', '@id': ldUrl(postUrl) },\n ...(post.wordCount ? { wordCount: post.wordCount } : {}),\n ...(post.categories?.[0] ? { articleSection: post.categories[0] } : {}),\n };\n\n const breadcrumbLd = {\n '@context': 'https://schema.org',\n '@type': 'BreadcrumbList',\n itemListElement: [\n { '@type': 'ListItem', position: 1, name: 'Home', item: ldUrl('/') },\n { '@type': 'ListItem', position: 2, name: blogLabel, item: ldUrl(basePath) },\n ...(post.categories?.[0]\n ? [\n { '@type': 'ListItem', position: 3, name: post.categories[0], item: ldUrl(`${basePath}/category/${post.categories[0]}`) },\n { '@type': 'ListItem', position: 4, name: post.title },\n ]\n : [{ '@type': 'ListItem', position: 3, name: post.title }]),\n ],\n };\n\n // Extract FAQ items from content HTML for FAQPage schema\n const faqItems: { question: string; answer: string }[] = [];\n const faqRegex = /<div[^>]*class=\"nbp-faq-question\"[^>]*>(.*?)<\\/div>\\s*<div[^>]*class=\"nbp-faq-answer\"[^>]*>(.*?)<\\/div>/gis;\n let faqMatch;\n while ((faqMatch = faqRegex.exec(post.contentHTML || '')) !== null) {\n faqItems.push({\n question: faqMatch[1].replace(/<[^>]+>/g, '').trim(),\n answer: faqMatch[2].replace(/<[^>]+>/g, '').trim(),\n });\n }\n\n const faqLd = faqItems.length > 0 ? {\n '@context': 'https://schema.org',\n '@type': 'FAQPage',\n mainEntity: faqItems.map((item) => ({\n '@type': 'Question',\n name: item.question,\n acceptedAnswer: { '@type': 'Answer', text: item.answer },\n })),\n } : null;\n\n return (\n <>\n <script\n type=\"application/ld+json\"\n dangerouslySetInnerHTML={{ __html: JSON.stringify(blogPostingLd) }}\n />\n <script\n type=\"application/ld+json\"\n dangerouslySetInnerHTML={{ __html: JSON.stringify(breadcrumbLd) }}\n />\n {faqLd && (\n <script\n type=\"application/ld+json\"\n dangerouslySetInnerHTML={{ __html: JSON.stringify(faqLd) }}\n />\n )}\n {slots?.header}\n <article className={`nbp-post ${hasSidebarTOC ? 'nbp-post-with-toc' : ''} ${className}`}>\n {showReadingProgress && <ReadingProgressBar />}\n\n <BreadcrumbNav\n items={[\n { label: 'Home', href: '/' },\n { label: blogLabel, 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=\"nbp-post-header\">\n {post.categories?.length > 0 && (\n <div className=\"nbp-post-categories\">\n {post.categories.map((cat: string) => (\n <a key={cat} href={`${basePath}/category/${cat}`} className=\"nbp-post-category\">\n {cat}\n </a>\n ))}\n </div>\n )}\n <h1 className=\"nbp-post-title\">{post.title}</h1>\n <div className=\"nbp-post-meta\">\n {post.author?.avatar && (\n <img src={post.author.avatar} alt={post.author.name} className=\"nbp-post-avatar\" />\n )}\n <span className=\"nbp-post-author\">{post.author?.name}</span>\n {date && (\n <>\n <span className=\"nbp-post-sep\">·</span>\n <time className=\"nbp-post-date\" dateTime={String(post.publishedAt)}>\n {date}\n </time>\n </>\n )}\n <span className=\"nbp-post-sep\">·</span>\n <span className=\"nbp-post-reading-time\">{post.readingTime} min read</span>\n </div>\n </header>\n\n {post.coverImage?.url && (\n <div className=\"nbp-post-cover\">\n <img\n src={post.coverImage.url}\n alt={post.coverImage.alt || post.title}\n className=\"nbp-post-cover-img\"\n />\n </div>\n )}\n\n {hasTOC && tocPosition === 'top' && (\n <div className=\"nbp-post-toc-inline\">\n <TableOfContentsComponent headings={headings} />\n </div>\n )}\n\n {slots?.beforeContent}\n\n <div className=\"nbp-post-layout\">\n {hasSidebarTOC && (\n <aside className=\"nbp-post-toc-sidebar\">\n <TableOfContentsComponent headings={headings} />\n </aside>\n )}\n\n <div\n className=\"nbp-post-content\"\n dangerouslySetInnerHTML={{ __html: post.contentHTML || '' }}\n />\n </div>\n\n {slots?.afterContent}\n\n {post.tags?.length > 0 && (\n <div className=\"nbp-post-tags\">\n {post.tags.map((tag: string) => (\n <a key={tag} href={`${basePath}?tag=${tag}`} className=\"nbp-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 && (post.author.bio || post.author.avatar) && (\n <AuthorCard author={post.author} />\n )}\n\n {showRelatedPosts && relatedPosts.length > 0 && (\n <section className=\"nbp-related\">\n <h2 className=\"nbp-related-title\">Related Posts</h2>\n <div className=\"nbp-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"]}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
export { createApiToken, createCategory, createMedia, createPost, deleteApiToken, deleteCategory, deleteMedia, deletePost, ensureIndexes, getCategoryBySlug, getCollection, getDb, getMediaById, getPostById, getPostBySlug, getSettings, hardDeletePost, listApiTokens, listCategories, listMedia, listPosts, updateCategory, updateCategoryPostCount, updatePost, updateSettings, verifyApiToken } from './chunk-6PZ772NQ.js';
|
|
2
|
+
//# sourceMappingURL=db-M3KXLBUP.js.map
|
|
3
|
+
//# sourceMappingURL=db-M3KXLBUP.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","file":"db-M3KXLBUP.js"}
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var chunkXLYTATRQ_cjs = require('./chunk-XLYTATRQ.cjs');
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
Object.defineProperty(exports, "createApiToken", {
|
|
8
|
+
enumerable: true,
|
|
9
|
+
get: function () { return chunkXLYTATRQ_cjs.createApiToken; }
|
|
10
|
+
});
|
|
11
|
+
Object.defineProperty(exports, "createCategory", {
|
|
12
|
+
enumerable: true,
|
|
13
|
+
get: function () { return chunkXLYTATRQ_cjs.createCategory; }
|
|
14
|
+
});
|
|
15
|
+
Object.defineProperty(exports, "createMedia", {
|
|
16
|
+
enumerable: true,
|
|
17
|
+
get: function () { return chunkXLYTATRQ_cjs.createMedia; }
|
|
18
|
+
});
|
|
19
|
+
Object.defineProperty(exports, "createPost", {
|
|
20
|
+
enumerable: true,
|
|
21
|
+
get: function () { return chunkXLYTATRQ_cjs.createPost; }
|
|
22
|
+
});
|
|
23
|
+
Object.defineProperty(exports, "deleteApiToken", {
|
|
24
|
+
enumerable: true,
|
|
25
|
+
get: function () { return chunkXLYTATRQ_cjs.deleteApiToken; }
|
|
26
|
+
});
|
|
27
|
+
Object.defineProperty(exports, "deleteCategory", {
|
|
28
|
+
enumerable: true,
|
|
29
|
+
get: function () { return chunkXLYTATRQ_cjs.deleteCategory; }
|
|
30
|
+
});
|
|
31
|
+
Object.defineProperty(exports, "deleteMedia", {
|
|
32
|
+
enumerable: true,
|
|
33
|
+
get: function () { return chunkXLYTATRQ_cjs.deleteMedia; }
|
|
34
|
+
});
|
|
35
|
+
Object.defineProperty(exports, "deletePost", {
|
|
36
|
+
enumerable: true,
|
|
37
|
+
get: function () { return chunkXLYTATRQ_cjs.deletePost; }
|
|
38
|
+
});
|
|
39
|
+
Object.defineProperty(exports, "ensureIndexes", {
|
|
40
|
+
enumerable: true,
|
|
41
|
+
get: function () { return chunkXLYTATRQ_cjs.ensureIndexes; }
|
|
42
|
+
});
|
|
43
|
+
Object.defineProperty(exports, "getCategoryBySlug", {
|
|
44
|
+
enumerable: true,
|
|
45
|
+
get: function () { return chunkXLYTATRQ_cjs.getCategoryBySlug; }
|
|
46
|
+
});
|
|
47
|
+
Object.defineProperty(exports, "getCollection", {
|
|
48
|
+
enumerable: true,
|
|
49
|
+
get: function () { return chunkXLYTATRQ_cjs.getCollection; }
|
|
50
|
+
});
|
|
51
|
+
Object.defineProperty(exports, "getDb", {
|
|
52
|
+
enumerable: true,
|
|
53
|
+
get: function () { return chunkXLYTATRQ_cjs.getDb; }
|
|
54
|
+
});
|
|
55
|
+
Object.defineProperty(exports, "getMediaById", {
|
|
56
|
+
enumerable: true,
|
|
57
|
+
get: function () { return chunkXLYTATRQ_cjs.getMediaById; }
|
|
58
|
+
});
|
|
59
|
+
Object.defineProperty(exports, "getPostById", {
|
|
60
|
+
enumerable: true,
|
|
61
|
+
get: function () { return chunkXLYTATRQ_cjs.getPostById; }
|
|
62
|
+
});
|
|
63
|
+
Object.defineProperty(exports, "getPostBySlug", {
|
|
64
|
+
enumerable: true,
|
|
65
|
+
get: function () { return chunkXLYTATRQ_cjs.getPostBySlug; }
|
|
66
|
+
});
|
|
67
|
+
Object.defineProperty(exports, "getSettings", {
|
|
68
|
+
enumerable: true,
|
|
69
|
+
get: function () { return chunkXLYTATRQ_cjs.getSettings; }
|
|
70
|
+
});
|
|
71
|
+
Object.defineProperty(exports, "hardDeletePost", {
|
|
72
|
+
enumerable: true,
|
|
73
|
+
get: function () { return chunkXLYTATRQ_cjs.hardDeletePost; }
|
|
74
|
+
});
|
|
75
|
+
Object.defineProperty(exports, "listApiTokens", {
|
|
76
|
+
enumerable: true,
|
|
77
|
+
get: function () { return chunkXLYTATRQ_cjs.listApiTokens; }
|
|
78
|
+
});
|
|
79
|
+
Object.defineProperty(exports, "listCategories", {
|
|
80
|
+
enumerable: true,
|
|
81
|
+
get: function () { return chunkXLYTATRQ_cjs.listCategories; }
|
|
82
|
+
});
|
|
83
|
+
Object.defineProperty(exports, "listMedia", {
|
|
84
|
+
enumerable: true,
|
|
85
|
+
get: function () { return chunkXLYTATRQ_cjs.listMedia; }
|
|
86
|
+
});
|
|
87
|
+
Object.defineProperty(exports, "listPosts", {
|
|
88
|
+
enumerable: true,
|
|
89
|
+
get: function () { return chunkXLYTATRQ_cjs.listPosts; }
|
|
90
|
+
});
|
|
91
|
+
Object.defineProperty(exports, "updateCategory", {
|
|
92
|
+
enumerable: true,
|
|
93
|
+
get: function () { return chunkXLYTATRQ_cjs.updateCategory; }
|
|
94
|
+
});
|
|
95
|
+
Object.defineProperty(exports, "updateCategoryPostCount", {
|
|
96
|
+
enumerable: true,
|
|
97
|
+
get: function () { return chunkXLYTATRQ_cjs.updateCategoryPostCount; }
|
|
98
|
+
});
|
|
99
|
+
Object.defineProperty(exports, "updatePost", {
|
|
100
|
+
enumerable: true,
|
|
101
|
+
get: function () { return chunkXLYTATRQ_cjs.updatePost; }
|
|
102
|
+
});
|
|
103
|
+
Object.defineProperty(exports, "updateSettings", {
|
|
104
|
+
enumerable: true,
|
|
105
|
+
get: function () { return chunkXLYTATRQ_cjs.updateSettings; }
|
|
106
|
+
});
|
|
107
|
+
Object.defineProperty(exports, "verifyApiToken", {
|
|
108
|
+
enumerable: true,
|
|
109
|
+
get: function () { return chunkXLYTATRQ_cjs.verifyApiToken; }
|
|
110
|
+
});
|
|
111
|
+
//# sourceMappingURL=db-TDCZNY3Q.cjs.map
|
|
112
|
+
//# sourceMappingURL=db-TDCZNY3Q.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","file":"db-TDCZNY3Q.cjs"}
|