@sonordev/site-kit 2.2.9 → 2.5.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/dist/blog/index.d.mts +31 -3
- package/dist/blog/index.d.ts +31 -3
- package/dist/blog/index.js +194 -10
- package/dist/blog/index.js.map +1 -1
- package/dist/blog/index.mjs +183 -4
- package/dist/blog/index.mjs.map +1 -1
- package/dist/blog/server-ui.d.mts +1 -1
- package/dist/blog/server-ui.d.ts +1 -1
- package/dist/blog/server-ui.js +3 -3
- package/dist/blog/server-ui.mjs +1 -1
- package/dist/blog/server.d.mts +79 -7
- package/dist/blog/server.d.ts +79 -7
- package/dist/blog/server.js +64 -32
- package/dist/blog/server.mjs +1 -1
- package/dist/{chunk-WRCX2NKY.mjs → chunk-2NM6RGAV.mjs} +226 -22
- package/dist/chunk-2NM6RGAV.mjs.map +1 -0
- package/dist/chunk-5B4FABFK.js +28 -0
- package/dist/chunk-5B4FABFK.js.map +1 -0
- package/dist/{chunk-DTVZJPVM.mjs → chunk-5SQ4NRPH.mjs} +9 -2
- package/dist/chunk-5SQ4NRPH.mjs.map +1 -0
- package/dist/chunk-ATG4FJY6.js +76 -0
- package/dist/chunk-ATG4FJY6.js.map +1 -0
- package/dist/{chunk-GQKBGL2W.js → chunk-DZKX3GHL.js} +233 -21
- package/dist/chunk-DZKX3GHL.js.map +1 -0
- package/dist/{chunk-LNMI6OMN.js → chunk-F54HGPDM.js} +137 -4
- package/dist/chunk-F54HGPDM.js.map +1 -0
- package/dist/chunk-H23ZT2I2.mjs +67 -0
- package/dist/chunk-H23ZT2I2.mjs.map +1 -0
- package/dist/chunk-H4OBGC43.mjs +26 -0
- package/dist/chunk-H4OBGC43.mjs.map +1 -0
- package/dist/{chunk-Z6EHHJWU.mjs → chunk-MNOVPHL6.mjs} +230 -35
- package/dist/chunk-MNOVPHL6.mjs.map +1 -0
- package/dist/{chunk-ITPVKQB6.js → chunk-MWE2HRPU.js} +229 -34
- package/dist/chunk-MWE2HRPU.js.map +1 -0
- package/dist/{chunk-AWMEH65F.js → chunk-PAF5IGGF.js} +9 -2
- package/dist/chunk-PAF5IGGF.js.map +1 -0
- package/dist/{chunk-OOZCN7AF.mjs → chunk-T5UU7I4V.mjs} +137 -5
- package/dist/chunk-T5UU7I4V.mjs.map +1 -0
- package/dist/cli/index.js +352 -78
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/index.mjs +352 -78
- package/dist/cli/index.mjs.map +1 -1
- package/dist/config/index.d.mts +17 -0
- package/dist/config/index.d.ts +17 -0
- package/dist/config/index.js +43 -3
- package/dist/config/index.js.map +1 -1
- package/dist/config/index.mjs +43 -3
- package/dist/config/index.mjs.map +1 -1
- package/dist/forms/index.js +3 -1
- package/dist/forms/index.js.map +1 -1
- package/dist/forms/index.mjs +3 -1
- package/dist/forms/index.mjs.map +1 -1
- package/dist/index.d.mts +2 -2
- package/dist/index.d.ts +2 -2
- package/dist/layout/index.d.mts +6 -1
- package/dist/layout/index.d.ts +6 -1
- package/dist/layout/index.js +7 -3
- package/dist/layout/index.js.map +1 -1
- package/dist/layout/index.mjs +7 -3
- package/dist/layout/index.mjs.map +1 -1
- package/dist/llms/contract.d.mts +43 -0
- package/dist/llms/contract.d.ts +43 -0
- package/dist/llms/contract.js +41 -0
- package/dist/llms/contract.js.map +1 -0
- package/dist/llms/contract.mjs +4 -0
- package/dist/llms/contract.mjs.map +1 -0
- package/dist/llms/index.d.mts +67 -5
- package/dist/llms/index.d.ts +67 -5
- package/dist/llms/index.js +154 -36
- package/dist/llms/index.js.map +1 -1
- package/dist/llms/index.mjs +107 -27
- package/dist/llms/index.mjs.map +1 -1
- package/dist/middleware/index.d.mts +13 -1
- package/dist/middleware/index.d.ts +13 -1
- package/dist/middleware/index.js +11 -0
- package/dist/middleware/index.js.map +1 -1
- package/dist/middleware/index.mjs +11 -0
- package/dist/middleware/index.mjs.map +1 -1
- package/dist/{routing-ccNYbFLU.d.ts → routing-C7gmHWm9.d.ts} +1 -1
- package/dist/{routing-ebQln7wH.d.mts → routing-trNzR1Pz.d.mts} +1 -1
- package/dist/seo/index.d.mts +19 -4
- package/dist/seo/index.d.ts +19 -4
- package/dist/seo/index.js +49 -14
- package/dist/seo/index.js.map +1 -1
- package/dist/seo/index.mjs +42 -8
- package/dist/seo/index.mjs.map +1 -1
- package/dist/seo/server.d.mts +2 -2
- package/dist/seo/server.d.ts +2 -2
- package/dist/seo/server.js +5 -5
- package/dist/seo/server.mjs +1 -1
- package/dist/sitemap/index.d.mts +8 -1
- package/dist/sitemap/index.d.ts +8 -1
- package/dist/sitemap/index.js +24 -4
- package/dist/sitemap/index.js.map +1 -1
- package/dist/sitemap/index.mjs +23 -3
- package/dist/sitemap/index.mjs.map +1 -1
- package/dist/{types-BxzT7yhf.d.mts → types-0NuBL1Gg.d.ts} +34 -0
- package/dist/{types-DWMpAtGy.d.mts → types-5P5B9RgV.d.mts} +57 -1
- package/dist/{types-DWMpAtGy.d.ts → types-5P5B9RgV.d.ts} +57 -1
- package/dist/{types-CGkyylOa.d.mts → types-DYyIAgQg.d.mts} +2 -0
- package/dist/{types-CGkyylOa.d.ts → types-DYyIAgQg.d.ts} +2 -0
- package/dist/{types-BxzT7yhf.d.ts → types-J7Z_FqmV.d.mts} +34 -0
- package/package.json +15 -1
- package/scripts/postinstall.cjs +67 -0
- package/dist/chunk-AWMEH65F.js.map +0 -1
- package/dist/chunk-DTVZJPVM.mjs.map +0 -1
- package/dist/chunk-GQKBGL2W.js.map +0 -1
- package/dist/chunk-ITPVKQB6.js.map +0 -1
- package/dist/chunk-LNMI6OMN.js.map +0 -1
- package/dist/chunk-OOZCN7AF.mjs.map +0 -1
- package/dist/chunk-WRCX2NKY.mjs.map +0 -1
- package/dist/chunk-Z6EHHJWU.mjs.map +0 -1
package/dist/blog/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/blog/BlogSidebar.tsx","../../src/blog/BlogLayout.tsx","../../src/blog/AuthorCard.tsx","../../src/blog/AuthorPage.tsx","../../src/blog/RelatedPosts.tsx","../../src/blog/TableOfContents.tsx"],"names":["jsxs","jsx"],"mappings":"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","file":"index.mjs","sourcesContent":["/**\n * @sonordev/site-kit/blog - Blog Sidebar Component\n * \n * A reusable sidebar for blog pages with categories, recent posts,\n * tags, newsletter signup, and custom widgets.\n */\n\nimport React from 'react'\nimport type { BlogPost, BlogCategory, BlogTag } from './types'\n\n// ============================================================================\n// DATA FETCHING\n// ============================================================================\n\nasync function fetchRecentPosts(\n apiUrl: string,\n apiKey: string,\n limit: number = 5\n): Promise<BlogPost[]> {\n try {\n const response = await fetch(`${apiUrl}/public/blog/recent?limit=${limit}`, {\n headers: { 'x-api-key': apiKey },\n next: { revalidate: 300 },\n })\n\n if (!response.ok) return []\n\n const data = await response.json()\n return data.posts || []\n } catch (error) {\n console.error('[Blog] Error fetching recent posts:', error)\n return []\n }\n}\n\nasync function fetchCategories(apiUrl: string, apiKey: string): Promise<BlogCategory[]> {\n try {\n const response = await fetch(`${apiUrl}/public/blog/categories`, {\n headers: { 'x-api-key': apiKey },\n next: { revalidate: 300 },\n })\n\n if (!response.ok) return []\n\n const data = await response.json()\n return data.categories || []\n } catch (error) {\n console.error('[Blog] Error fetching categories:', error)\n return []\n }\n}\n\nasync function fetchTags(apiUrl: string, apiKey: string): Promise<BlogTag[]> {\n try {\n const response = await fetch(`${apiUrl}/public/blog/tags`, {\n headers: { 'x-api-key': apiKey },\n next: { revalidate: 300 },\n })\n\n if (!response.ok) return []\n\n const data = await response.json()\n return data.tags || []\n } catch (error) {\n console.error('[Blog] Error fetching tags:', error)\n return []\n }\n}\n\n// ============================================================================\n// BLOG SIDEBAR COMPONENT\n// ============================================================================\n\nexport interface BlogSidebarProps {\n /** Portal API URL */\n apiUrl?: string\n /** Project API key */\n apiKey?: string\n /** Show categories widget */\n showCategories?: boolean\n /** Show recent posts widget */\n showRecentPosts?: boolean\n /** Number of recent posts to show */\n recentPostsCount?: number\n /** Show tags widget */\n showTags?: boolean\n /** Show search widget */\n showSearch?: boolean\n /** Base URL for blog links */\n basePath?: string\n /** Custom class name */\n className?: string\n /** Current category filter (for highlighting) */\n currentCategory?: string\n /** Additional widgets to render */\n children?: React.ReactNode\n}\n\nexport async function BlogSidebar({\n apiUrl = process.env.SONOR_API_URL || 'https://api.sonor.io',\n apiKey = process.env.SONOR_API_KEY || '',\n showCategories = true,\n showRecentPosts = true,\n recentPostsCount = 5,\n showTags = true,\n showSearch = true,\n basePath = '/blog',\n className,\n currentCategory,\n children,\n}: BlogSidebarProps) {\n if (!apiKey) {\n console.warn('[Blog] No API key configured for sidebar')\n return null\n }\n\n // Fetch data in parallel\n const [categories, recentPosts, tags] = await Promise.all([\n showCategories ? fetchCategories(apiUrl, apiKey) : Promise.resolve([]),\n showRecentPosts ? fetchRecentPosts(apiUrl, apiKey, recentPostsCount) : Promise.resolve([]),\n showTags ? fetchTags(apiUrl, apiKey) : Promise.resolve([]),\n ])\n\n return (\n <aside className={className} style={{ display: 'flex', flexDirection: 'column', gap: 32 }}>\n {/* Search Widget */}\n {showSearch && <SearchWidget basePath={basePath} />}\n\n {/* Categories Widget */}\n {showCategories && categories.length > 0 && (\n <CategoriesWidget\n categories={categories}\n basePath={basePath}\n currentCategory={currentCategory}\n />\n )}\n\n {/* Recent Posts Widget */}\n {showRecentPosts && recentPosts.length > 0 && (\n <RecentPostsWidget posts={recentPosts} basePath={basePath} />\n )}\n\n {/* Tags Widget */}\n {showTags && tags.length > 0 && (\n <TagsWidget tags={tags} basePath={basePath} />\n )}\n\n {/* Custom Widgets */}\n {children}\n </aside>\n )\n}\n\n// ============================================================================\n// WIDGET COMPONENTS\n// ============================================================================\n\nfunction SearchWidget({ basePath }: { basePath: string }) {\n return (\n <div style={widgetStyle}>\n <h4 style={widgetTitleStyle}>Search</h4>\n <form action={basePath} method=\"get\">\n <input\n type=\"search\"\n name=\"search\"\n placeholder=\"Search posts...\"\n style={{\n width: '100%',\n padding: '10px 12px',\n border: '1px solid var(--sk-border)',\n borderRadius: 8,\n fontSize: 14,\n }}\n />\n </form>\n </div>\n )\n}\n\nfunction CategoriesWidget({\n categories,\n basePath,\n currentCategory,\n}: {\n categories: BlogCategory[]\n basePath: string\n currentCategory?: string\n}) {\n return (\n <div style={widgetStyle}>\n <h4 style={widgetTitleStyle}>Categories</h4>\n <ul style={{ listStyle: 'none', margin: 0, padding: 0 }}>\n <li style={{ marginBottom: 8 }}>\n <a\n href={basePath}\n style={{\n ...categoryLinkStyle,\n fontWeight: !currentCategory ? 600 : 400,\n color: !currentCategory ? 'var(--sk-primary)' : 'var(--sk-text-primary)',\n }}\n >\n All Posts\n </a>\n </li>\n {categories.map((cat) => (\n <li key={cat.slug} style={{ marginBottom: 8 }}>\n <a\n href={`${basePath}?category=${cat.slug}`}\n style={{\n ...categoryLinkStyle,\n fontWeight: currentCategory === cat.slug ? 600 : 400,\n color: currentCategory === cat.slug ? 'var(--sk-primary)' : 'var(--sk-text-primary)',\n }}\n >\n {cat.name}\n <span style={{ color: 'var(--sk-text-tertiary)', marginLeft: 8 }}>({cat.post_count})</span>\n </a>\n </li>\n ))}\n </ul>\n </div>\n )\n}\n\nfunction RecentPostsWidget({\n posts,\n basePath,\n}: {\n posts: BlogPost[]\n basePath: string\n}) {\n return (\n <div style={widgetStyle}>\n <h4 style={widgetTitleStyle}>Recent Posts</h4>\n <ul style={{ listStyle: 'none', margin: 0, padding: 0 }}>\n {posts.map((post) => {\n const date = post.published_at\n ? new Date(post.published_at).toLocaleDateString('en-US', {\n month: 'short',\n day: 'numeric',\n })\n : null\n\n return (\n <li\n key={post.id}\n style={{\n marginBottom: 16,\n paddingBottom: 16,\n borderBottom: '1px solid var(--sk-border)',\n }}\n >\n <div style={{ display: 'flex', gap: 12 }}>\n {post.featured_image && (\n <a href={`${basePath}/${post.slug}`}>\n <img\n src={post.featured_image}\n alt=\"\"\n style={{\n width: 64,\n height: 48,\n objectFit: 'cover',\n borderRadius: 6,\n flexShrink: 0,\n }}\n />\n </a>\n )}\n <div style={{ flex: 1, minWidth: 0 }}>\n <a\n href={`${basePath}/${post.slug}`}\n style={{\n fontSize: 14,\n fontWeight: 500,\n color: 'var(--sk-text-primary)',\n textDecoration: 'none',\n display: '-webkit-box',\n WebkitLineClamp: 2,\n WebkitBoxOrient: 'vertical',\n overflow: 'hidden',\n }}\n >\n {post.title}\n </a>\n {date && (\n <span style={{ fontSize: 12, color: 'var(--sk-text-tertiary)', display: 'block', marginTop: 4 }}>\n {date}\n </span>\n )}\n </div>\n </div>\n </li>\n )\n })}\n </ul>\n </div>\n )\n}\n\nfunction TagsWidget({\n tags,\n basePath,\n}: {\n tags: BlogTag[]\n basePath: string\n}) {\n return (\n <div style={widgetStyle}>\n <h4 style={widgetTitleStyle}>Popular Tags</h4>\n <div style={{ display: 'flex', flexWrap: 'wrap', gap: 8 }}>\n {tags.slice(0, 15).map((tag) => (\n <a\n key={tag.slug}\n href={`${basePath}?tag=${tag.slug}`}\n style={{\n padding: '4px 10px',\n backgroundColor: 'var(--sk-bg-elevated)',\n borderRadius: 9999,\n fontSize: 12,\n color: 'var(--sk-text-primary)',\n textDecoration: 'none',\n transition: 'background-color 0.2s',\n }}\n >\n {tag.name}\n </a>\n ))}\n </div>\n </div>\n )\n}\n\n// ============================================================================\n// NEWSLETTER WIDGET (Client Component for forms)\n// ============================================================================\n\nexport interface NewsletterWidgetProps {\n title?: string\n description?: string\n buttonText?: string\n onSubmit?: (email: string) => Promise<void>\n}\n\nexport function NewsletterWidget({\n title = 'Subscribe to Our Newsletter',\n description = 'Get the latest posts delivered straight to your inbox.',\n buttonText = 'Subscribe',\n}: NewsletterWidgetProps) {\n return (\n <div style={{ ...widgetStyle, backgroundColor: 'rgba(var(--sk-primary-rgb), 0.1)' }}>\n <h4 style={{ ...widgetTitleStyle, color: 'var(--sk-primary)' }}>{title}</h4>\n <p style={{ fontSize: 14, color: 'var(--sk-text-secondary)', marginBottom: 16 }}>{description}</p>\n <form\n onSubmit={(e) => {\n e.preventDefault()\n // Handle form submission via parent onSubmit or inline\n }}\n style={{ display: 'flex', gap: 8 }}\n >\n <input\n type=\"email\"\n name=\"email\"\n placeholder=\"Enter your email\"\n required\n style={{\n flex: 1,\n padding: '10px 12px',\n border: '1px solid var(--sk-border)',\n borderRadius: 8,\n fontSize: 14,\n }}\n />\n <button\n type=\"submit\"\n style={{\n padding: '10px 16px',\n backgroundColor: 'var(--sk-primary)',\n color: 'var(--sk-bg)',\n border: 'none',\n borderRadius: 8,\n fontSize: 14,\n fontWeight: 500,\n cursor: 'pointer',\n }}\n >\n {buttonText}\n </button>\n </form>\n </div>\n )\n}\n\n// ============================================================================\n// STYLES\n// ============================================================================\n\nconst widgetStyle: React.CSSProperties = {\n padding: 20,\n backgroundColor: 'var(--sk-bg-elevated)',\n borderRadius: 12,\n}\n\nconst widgetTitleStyle: React.CSSProperties = {\n margin: '0 0 16px',\n fontSize: 16,\n fontWeight: 600,\n color: 'var(--sk-text-primary)',\n}\n\nconst categoryLinkStyle: React.CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n fontSize: 14,\n textDecoration: 'none',\n}\n","/**\n * @sonordev/site-kit/blog - Blog Layout Component\n * \n * A complete blog layout with sidebar, responsive design, and optional hero.\n * Use this to wrap your blog pages for consistent styling.\n */\n\nimport React from 'react'\nimport { BlogSidebar, BlogSidebarProps } from './BlogSidebar'\n\n// ============================================================================\n// BLOG LAYOUT COMPONENT\n// ============================================================================\n\nexport interface BlogLayoutProps {\n /** Portal API URL */\n apiUrl?: string\n /** Project API key */\n apiKey?: string\n /** Layout style: 'sidebar-right', 'sidebar-left', 'full-width' */\n layout?: 'sidebar-right' | 'sidebar-left' | 'full-width'\n /** Show sidebar */\n showSidebar?: boolean\n /** Sidebar props */\n sidebarProps?: Partial<BlogSidebarProps>\n /** Hero section config */\n hero?: {\n title?: string\n subtitle?: string\n backgroundImage?: string\n backgroundColor?: string\n }\n /** Max width for content */\n maxWidth?: number\n /** Base URL for blog links */\n basePath?: string\n /** Custom class name */\n className?: string\n /** Current category (for sidebar highlighting) */\n currentCategory?: string\n /** Main content */\n children: React.ReactNode\n}\n\nexport async function BlogLayout({\n apiUrl = process.env.SONOR_API_URL || 'https://api.sonor.io',\n apiKey = process.env.SONOR_API_KEY || '',\n layout = 'sidebar-right',\n showSidebar = true,\n sidebarProps = {},\n hero,\n maxWidth = 1280,\n basePath = '/blog',\n className,\n currentCategory,\n children,\n}: BlogLayoutProps) {\n const hasSidebar = showSidebar && layout !== 'full-width'\n\n return (\n <div className={className}>\n {/* Hero Section */}\n {hero && (\n <section\n style={{\n padding: '60px 20px',\n backgroundColor: hero.backgroundColor || 'var(--sk-primary)',\n backgroundImage: hero.backgroundImage ? `url(${hero.backgroundImage})` : undefined,\n backgroundSize: 'cover',\n backgroundPosition: 'center',\n color: 'var(--sk-bg)',\n textAlign: 'center',\n }}\n >\n <div style={{ maxWidth, margin: '0 auto' }}>\n {hero.title && (\n <h1\n style={{\n fontSize: 'clamp(32px, 5vw, 48px)',\n fontWeight: 700,\n marginBottom: 16,\n }}\n >\n {hero.title}\n </h1>\n )}\n {hero.subtitle && (\n <p\n style={{\n fontSize: 'clamp(16px, 2vw, 20px)',\n opacity: 0.9,\n maxWidth: 600,\n margin: '0 auto',\n }}\n >\n {hero.subtitle}\n </p>\n )}\n </div>\n </section>\n )}\n\n {/* Main Content Area */}\n <div\n style={{\n maxWidth,\n margin: '0 auto',\n padding: '40px 20px',\n }}\n >\n <div\n style={{\n display: hasSidebar ? 'grid' : 'block',\n gridTemplateColumns: hasSidebar\n ? layout === 'sidebar-left'\n ? '300px 1fr'\n : '1fr 300px'\n : undefined,\n gap: 48,\n }}\n >\n {/* Sidebar (Left Position) */}\n {hasSidebar && layout === 'sidebar-left' && (\n <BlogSidebar\n apiUrl={apiUrl}\n apiKey={apiKey}\n basePath={basePath}\n currentCategory={currentCategory}\n {...sidebarProps}\n />\n )}\n\n {/* Main Content */}\n <main style={{ minWidth: 0 }}>{children}</main>\n\n {/* Sidebar (Right Position) */}\n {hasSidebar && layout === 'sidebar-right' && (\n <BlogSidebar\n apiUrl={apiUrl}\n apiKey={apiKey}\n basePath={basePath}\n currentCategory={currentCategory}\n {...sidebarProps}\n />\n )}\n </div>\n </div>\n </div>\n )\n}\n\n// ============================================================================\n// BLOG PAGE WRAPPER\n// ============================================================================\n\n/**\n * Convenience wrapper for a complete blog index page\n */\nexport interface BlogPageProps extends Omit<BlogLayoutProps, 'children'> {\n /** List component to render */\n listComponent: React.ReactNode\n}\n\nexport async function BlogPage({ listComponent, ...layoutProps }: BlogPageProps) {\n return <BlogLayout {...layoutProps}>{listComponent}</BlogLayout>\n}\n\n/**\n * Convenience wrapper for a single blog post page\n */\nexport interface BlogPostPageProps extends Omit<BlogLayoutProps, 'children'> {\n /** Post component to render */\n postComponent: React.ReactNode\n}\n\nexport async function BlogPostPage({ postComponent, ...layoutProps }: BlogPostPageProps) {\n return (\n <BlogLayout {...layoutProps} showSidebar={false} layout=\"full-width\">\n <div style={{ maxWidth: 800, margin: '0 auto' }}>{postComponent}</div>\n </BlogLayout>\n )\n}\n\n// ============================================================================\n// CATEGORY PAGE WRAPPER\n// ============================================================================\n\nexport interface CategoryPageProps extends BlogLayoutProps {\n /** Category slug being viewed */\n category: string\n /** Category display name */\n categoryName?: string\n /** List component */\n listComponent: React.ReactNode\n}\n\nexport async function CategoryPage({\n category,\n categoryName,\n listComponent,\n hero,\n ...layoutProps\n}: CategoryPageProps) {\n const categoryHero = hero || {\n title: categoryName || category,\n subtitle: `Browse all posts in ${categoryName || category}`,\n backgroundColor: 'var(--sk-primary)',\n }\n\n return (\n <BlogLayout {...layoutProps} hero={categoryHero} currentCategory={category}>\n {listComponent}\n </BlogLayout>\n )\n}\n","/**\n * @sonordev/site-kit/blog - Author Card Component\n */\n\nimport React from 'react'\nimport type { AuthorCardProps, BlogAuthor } from './types'\n\n// ============================================================================\n// Trust Block (E-E-A-T)\n// ============================================================================\n\nfunction TrustBlock({ author }: { author: BlogAuthor }) {\n const hasYears = typeof author.years_experience === 'number' && author.years_experience > 0\n const hasCredentials = author.credentials && author.credentials.length > 0\n const hasExpertise = author.expertise_areas && author.expertise_areas.length > 0\n const hasPublications = author.featured_publications && author.featured_publications.length > 0\n const hasAwards = author.awards && author.awards.length > 0\n const isVerified = author.is_subject_matter_expert || author.has_verified_credentials\n\n const hasAnything = hasYears || hasCredentials || hasExpertise || hasPublications || hasAwards || isVerified\n if (!hasAnything) return null\n\n return (\n <div\n className=\"sk-author-trust\"\n style={{\n marginTop: 16,\n padding: 16,\n borderRadius: 10,\n border: '1px solid var(--sk-border, #e5e7eb)',\n background: 'var(--sk-surface, #f9fafb)',\n }}\n >\n <h5\n style={{\n margin: '0 0 12px',\n fontSize: 13,\n fontWeight: 600,\n textTransform: 'uppercase' as const,\n letterSpacing: '0.05em',\n color: 'var(--sk-text-tertiary, #6b7280)',\n }}\n >\n Why Trust This Author\n </h5>\n\n {/* Verified badge + years */}\n <div style={{ display: 'flex', flexWrap: 'wrap' as const, gap: 8, marginBottom: hasCredentials || hasExpertise || hasPublications || hasAwards ? 12 : 0 }}>\n {isVerified && (\n <span\n style={{\n display: 'inline-flex',\n alignItems: 'center',\n gap: 4,\n padding: '4px 10px',\n borderRadius: 9999,\n fontSize: 12,\n fontWeight: 600,\n background: 'rgba(20, 184, 166, 0.1)',\n color: 'rgb(13, 148, 136)',\n border: '1px solid rgba(20, 184, 166, 0.2)',\n }}\n >\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M22 11.08V12a10 10 0 1 1-5.93-9.14\" />\n <polyline points=\"22 4 12 14.01 9 11.01\" />\n </svg>\n Verified Expert\n </span>\n )}\n {hasYears && (\n <span\n style={{\n display: 'inline-flex',\n alignItems: 'center',\n padding: '4px 10px',\n borderRadius: 9999,\n fontSize: 12,\n fontWeight: 600,\n background: 'rgba(99, 102, 241, 0.1)',\n color: 'rgb(79, 70, 229)',\n border: '1px solid rgba(99, 102, 241, 0.2)',\n }}\n >\n {author.years_experience}+ Years Experience\n </span>\n )}\n </div>\n\n {/* Credentials */}\n {hasCredentials && (\n <div style={{ marginBottom: 10 }}>\n <span style={{ fontSize: 12, fontWeight: 600, color: 'var(--sk-text-secondary, #374151)' }}>Credentials</span>\n <ul style={{ margin: '4px 0 0', padding: '0 0 0 18px', fontSize: 13, color: 'var(--sk-text-secondary, #4b5563)', lineHeight: 1.6 }}>\n {author.credentials!.map((c, i) => (\n <li key={i}>{c}</li>\n ))}\n </ul>\n </div>\n )}\n\n {/* Expertise pills */}\n {hasExpertise && (\n <div style={{ marginBottom: 10 }}>\n <span style={{ fontSize: 12, fontWeight: 600, color: 'var(--sk-text-secondary, #374151)', display: 'block', marginBottom: 6 }}>Expertise</span>\n <div style={{ display: 'flex', flexWrap: 'wrap' as const, gap: 6 }}>\n {author.expertise_areas!.map((area, i) => (\n <span\n key={i}\n style={{\n padding: '3px 10px',\n borderRadius: 9999,\n fontSize: 12,\n background: 'var(--sk-pill-bg, #e5e7eb)',\n color: 'var(--sk-text-secondary, #374151)',\n }}\n >\n {area}\n </span>\n ))}\n </div>\n </div>\n )}\n\n {/* Featured publications */}\n {hasPublications && (\n <div style={{ marginBottom: 10 }}>\n <span style={{ fontSize: 12, fontWeight: 600, color: 'var(--sk-text-secondary, #374151)' }}>Featured In</span>\n <ul style={{ margin: '4px 0 0', padding: '0 0 0 18px', fontSize: 13, color: 'var(--sk-text-secondary, #4b5563)', lineHeight: 1.6 }}>\n {author.featured_publications!.map((pub, i) => (\n <li key={i}>{pub}</li>\n ))}\n </ul>\n </div>\n )}\n\n {/* Awards */}\n {hasAwards && (\n <div>\n <span style={{ fontSize: 12, fontWeight: 600, color: 'var(--sk-text-secondary, #374151)' }}>Awards</span>\n <ul style={{ margin: '4px 0 0', padding: '0 0 0 18px', fontSize: 13, color: 'var(--sk-text-secondary, #4b5563)', lineHeight: 1.6 }}>\n {author.awards!.map((award, i) => (\n <li key={i}>{award}</li>\n ))}\n </ul>\n </div>\n )}\n </div>\n )\n}\n\n// ============================================================================\n// AuthorCard\n// ============================================================================\n\nexport function AuthorCard({ author, showBio = true, showSocial = true, showTrustBlock = false, className }: AuthorCardProps) {\n return (\n <div className={className} style={{ display: 'flex', flexDirection: 'column' as const }}>\n <div style={{ display: 'flex', gap: 16, alignItems: 'flex-start' }}>\n {author.avatar_url && (\n <img\n src={author.avatar_url}\n alt={author.name}\n style={{\n width: 64,\n height: 64,\n borderRadius: '50%',\n objectFit: 'cover' as const,\n }}\n />\n )}\n <div>\n <h4 style={{ margin: 0 }}>{author.name}</h4>\n {author.title && (\n <p style={{ margin: '2px 0 0', fontSize: 13, color: 'var(--sk-text-tertiary, #6b7280)' }}>\n {author.title}{author.company ? ` at ${author.company}` : ''}\n </p>\n )}\n {showBio && author.bio && (\n <p style={{ margin: '4px 0', color: 'var(--sk-text-secondary)', fontSize: 14 }}>{author.bio}</p>\n )}\n {showSocial && author.social_links && (\n <div style={{ display: 'flex', gap: 12, marginTop: 8 }}>\n {author.social_links.twitter && (\n <a href={`https://twitter.com/${author.social_links.twitter}`} target=\"_blank\" rel=\"noopener noreferrer\">\n Twitter\n </a>\n )}\n {author.social_links.linkedin && (\n <a href={author.social_links.linkedin} target=\"_blank\" rel=\"noopener noreferrer\">\n LinkedIn\n </a>\n )}\n {author.social_links.github && (\n <a href={`https://github.com/${author.social_links.github}`} target=\"_blank\" rel=\"noopener noreferrer\">\n GitHub\n </a>\n )}\n </div>\n )}\n </div>\n </div>\n\n {showTrustBlock && <TrustBlock author={author} />}\n </div>\n )\n}\n\nexport { TrustBlock }\n","/**\n * @sonordev/site-kit/blog - Author Page Component (Server Component)\n *\n * Full author profile page with hero, trust block, social links, and articles grid.\n */\n\nimport React from 'react'\nimport type { AuthorPageProps, BlogAuthor, BlogPost } from './types'\nimport { TrustBlock } from './AuthorCard'\nimport { generateAuthorSchema } from './server-core'\n\n// ============================================================================\n// Sub-components\n// ============================================================================\n\nfunction AuthorHero({ author }: { author: BlogAuthor }) {\n return (\n <header\n className=\"sk-author-hero\"\n style={{\n display: 'flex',\n flexDirection: 'column' as const,\n alignItems: 'center',\n textAlign: 'center' as const,\n padding: '48px 24px 32px',\n }}\n >\n {author.avatar_url && (\n <img\n src={author.avatar_url}\n alt={author.name}\n width={120}\n height={120}\n style={{\n width: 120,\n height: 120,\n borderRadius: '50%',\n objectFit: 'cover' as const,\n marginBottom: 20,\n border: '3px solid var(--sk-border, #e5e7eb)',\n }}\n />\n )}\n <h1 style={{ margin: 0, fontSize: 32, fontWeight: 700, color: 'var(--sk-text-primary, #111827)' }}>\n {author.name}\n </h1>\n {(author.title || author.company) && (\n <p style={{ margin: '6px 0 0', fontSize: 16, color: 'var(--sk-text-secondary, #4b5563)' }}>\n {author.title}{author.title && author.company ? ' at ' : ''}{author.company}\n </p>\n )}\n {author.bio && (\n <p\n style={{\n margin: '16px auto 0',\n maxWidth: 640,\n fontSize: 15,\n lineHeight: 1.7,\n color: 'var(--sk-text-secondary, #4b5563)',\n }}\n >\n {author.bio}\n </p>\n )}\n\n {/* Social links */}\n <SocialLinks author={author} />\n </header>\n )\n}\n\nfunction SocialLinks({ author }: { author: BlogAuthor }) {\n const links: { label: string; href: string }[] = []\n\n if (author.linkedin_url) links.push({ label: 'LinkedIn', href: author.linkedin_url })\n else if (author.social_links?.linkedin) links.push({ label: 'LinkedIn', href: author.social_links.linkedin })\n\n if (author.twitter_url) links.push({ label: 'Twitter', href: author.twitter_url })\n else if (author.social_links?.twitter) links.push({ label: 'Twitter', href: `https://twitter.com/${author.social_links.twitter}` })\n\n if (author.website_url) links.push({ label: 'Website', href: author.website_url })\n else if (author.website) links.push({ label: 'Website', href: author.website })\n\n if (links.length === 0) return null\n\n return (\n <div style={{ display: 'flex', gap: 16, marginTop: 16 }}>\n {links.map((link) => (\n <a\n key={link.label}\n href={link.href}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n style={{\n display: 'inline-flex',\n alignItems: 'center',\n gap: 6,\n padding: '6px 14px',\n borderRadius: 8,\n fontSize: 13,\n fontWeight: 500,\n color: 'rgb(13, 148, 136)',\n background: 'rgba(20, 184, 166, 0.08)',\n border: '1px solid rgba(20, 184, 166, 0.15)',\n textDecoration: 'none',\n }}\n >\n {link.label}\n </a>\n ))}\n </div>\n )\n}\n\nfunction PostCard({ post, basePath }: { post: BlogPost; basePath: string }) {\n const href = `${basePath}/${post.slug}`\n const date = post.published_at\n ? new Date(post.published_at).toLocaleDateString('en-US', { year: 'numeric', month: 'short', day: 'numeric' })\n : null\n\n return (\n <article\n className=\"sk-author-post-card\"\n style={{\n borderRadius: 12,\n border: '1px solid var(--sk-border, #e5e7eb)',\n overflow: 'hidden',\n background: 'var(--sk-card-bg, #fff)',\n display: 'flex',\n flexDirection: 'column' as const,\n }}\n >\n {post.featured_image && (\n <a href={href} style={{ display: 'block', overflow: 'hidden', aspectRatio: '16/9' }}>\n <img\n src={post.featured_image}\n alt={post.featured_image_alt || post.title}\n style={{ width: '100%', height: '100%', objectFit: 'cover' as const }}\n loading=\"lazy\"\n />\n </a>\n )}\n <div style={{ padding: 20, flex: 1, display: 'flex', flexDirection: 'column' as const }}>\n {date && (\n <time style={{ fontSize: 12, color: 'var(--sk-text-tertiary, #6b7280)', marginBottom: 6 }}>{date}</time>\n )}\n <a href={href} style={{ textDecoration: 'none', color: 'inherit' }}>\n <h3 style={{ margin: '0 0 8px', fontSize: 18, fontWeight: 600, lineHeight: 1.3, color: 'var(--sk-text-primary, #111827)' }}>\n {post.title}\n </h3>\n </a>\n {post.excerpt && (\n <p style={{ margin: 0, fontSize: 14, lineHeight: 1.6, color: 'var(--sk-text-secondary, #4b5563)', flex: 1 }}>\n {post.excerpt}\n </p>\n )}\n {post.reading_time_minutes && (\n <span style={{ fontSize: 12, color: 'var(--sk-text-tertiary, #6b7280)', marginTop: 12 }}>\n {post.reading_time_minutes} min read\n </span>\n )}\n </div>\n </article>\n )\n}\n\n// ============================================================================\n// AuthorPage\n// ============================================================================\n\nexport function AuthorPage({ author, posts, basePath = '/blog' }: AuthorPageProps) {\n const schema = generateAuthorSchema(author)\n\n return (\n <div className=\"sk-author-page\">\n {/* JSON-LD */}\n <script\n type=\"application/ld+json\"\n dangerouslySetInnerHTML={{ __html: JSON.stringify(schema) }}\n />\n\n {/* Hero */}\n <AuthorHero author={author} />\n\n {/* Trust block */}\n <div style={{ maxWidth: 640, margin: '0 auto', padding: '0 24px' }}>\n <TrustBlock author={author} />\n </div>\n\n {/* Articles */}\n {posts.length > 0 && (\n <section style={{ maxWidth: 1080, margin: '40px auto 0', padding: '0 24px 48px' }}>\n <h2 style={{ fontSize: 22, fontWeight: 600, marginBottom: 24, color: 'var(--sk-text-primary, #111827)' }}>\n Articles by {author.name}\n {typeof author.post_count === 'number' && (\n <span style={{ fontWeight: 400, fontSize: 15, color: 'var(--sk-text-tertiary, #6b7280)', marginLeft: 8 }}>\n ({author.post_count})\n </span>\n )}\n </h2>\n <div\n className=\"sk-author-posts-grid\"\n style={{\n display: 'grid',\n gridTemplateColumns: 'repeat(auto-fill, minmax(300px, 1fr))',\n gap: 24,\n }}\n >\n {posts.map((post) => (\n <PostCard key={post.id} post={post} basePath={basePath} />\n ))}\n </div>\n </section>\n )}\n </div>\n )\n}\n","/**\n * @sonordev/site-kit/blog - Related Posts Component\n * \n * Fetches and displays related blog posts via Portal API\n */\n\nimport React from 'react'\nimport type { RelatedPostsProps, BlogPost } from './types'\n\nasync function fetchRelatedPosts(\n apiUrl: string,\n apiKey: string,\n currentPostId: string,\n limit: number\n): Promise<BlogPost[]> {\n try {\n const response = await fetch(`${apiUrl}/api/public/blog/related`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'x-api-key': apiKey,\n },\n body: JSON.stringify({\n currentPostId,\n limit,\n }),\n })\n \n if (!response.ok) {\n console.error('Failed to fetch related posts:', response.statusText)\n return []\n }\n \n const data = await response.json()\n return data.posts || []\n } catch (error) {\n console.error('Failed to fetch related posts:', error)\n return []\n }\n}\n\ninterface RelatedPostsServerProps {\n apiUrl?: string\n apiKey?: string\n currentPostId: string\n limit?: number\n className?: string\n renderItem?: (post: BlogPost) => React.ReactNode\n}\n\nexport async function RelatedPosts({\n apiUrl = process.env.SONOR_API_URL || 'https://api.sonor.io',\n apiKey = process.env.SONOR_API_KEY || '',\n currentPostId,\n limit = 3,\n className,\n renderItem,\n}: RelatedPostsServerProps) {\n if (!apiKey) {\n console.warn('[Blog] No API key configured for RelatedPosts')\n return null\n }\n \n const posts = await fetchRelatedPosts(apiUrl, apiKey, currentPostId, limit)\n\n if (posts.length === 0) return null\n\n return (\n <section className={className}>\n <h3 style={{ marginBottom: 16 }}>Related Posts</h3>\n <div style={{ display: 'grid', gap: 16 }}>\n {posts.map((post) =>\n renderItem ? (\n renderItem(post)\n ) : (\n <article key={post.id} style={{ borderBottom: '1px solid var(--sk-border)', paddingBottom: 16 }}>\n {post.featured_image && (\n <img\n src={post.featured_image}\n alt={post.title}\n style={{\n width: '100%',\n height: 120,\n objectFit: 'cover',\n borderRadius: 8,\n marginBottom: 8,\n }}\n />\n )}\n <a href={`/blog/${post.slug}`} style={{ textDecoration: 'none' }}>\n <h4 style={{ margin: 0, color: 'inherit' }}>{post.title}</h4>\n </a>\n {post.excerpt && (\n <p style={{ margin: '4px 0 0', fontSize: 14, color: 'var(--sk-text-secondary)' }}>\n {post.excerpt}\n </p>\n )}\n </article>\n )\n )}\n </div>\n </section>\n )\n}\n","/**\n * @sonordev/site-kit/blog - Table of Contents Component\n */\n\n'use client'\n\nimport React, { useState, useEffect } from 'react'\nimport type { TableOfContentsProps } from './types'\n\ninterface TocItem {\n id: string\n text: string\n level: number\n}\n\nfunction parseHeadings(content: string): TocItem[] {\n // Extract headings from HTML content\n const headingRegex = /<h([2-4])[^>]*id=\"([^\"]*)\"[^>]*>(.*?)<\\/h[2-4]>/gi\n const items: TocItem[] = []\n let match\n\n while ((match = headingRegex.exec(content)) !== null) {\n items.push({\n level: parseInt(match[1]),\n id: match[2],\n text: match[3].replace(/<[^>]*>/g, ''), // Strip any nested HTML\n })\n }\n\n return items\n}\n\nexport function TableOfContents({\n content,\n className,\n maxDepth = 3,\n}: TableOfContentsProps) {\n const [activeId, setActiveId] = useState<string>('')\n const items = parseHeadings(content).filter((item) => item.level <= maxDepth)\n\n useEffect(() => {\n if (typeof window === 'undefined') return\n\n const observer = new IntersectionObserver(\n (entries) => {\n entries.forEach((entry) => {\n if (entry.isIntersecting) {\n setActiveId(entry.target.id)\n }\n })\n },\n {\n rootMargin: '-20% 0% -35% 0%',\n threshold: 0,\n }\n )\n\n // Observe all headings\n items.forEach((item) => {\n const element = document.getElementById(item.id)\n if (element) {\n observer.observe(element)\n }\n })\n\n return () => observer.disconnect()\n }, [items])\n\n if (items.length === 0) return null\n\n const handleClick = (id: string) => {\n const element = document.getElementById(id)\n if (element) {\n element.scrollIntoView({ behavior: 'smooth' })\n }\n }\n\n return (\n <nav className={className} aria-label=\"Table of contents\">\n <h4 style={{ margin: '0 0 12px', fontSize: 14, fontWeight: 600, textTransform: 'uppercase', letterSpacing: '0.05em' }}>\n On This Page\n </h4>\n <ul style={{ listStyle: 'none', margin: 0, padding: 0 }}>\n {items.map((item) => (\n <li\n key={item.id}\n style={{\n paddingLeft: (item.level - 2) * 12,\n marginBottom: 8,\n }}\n >\n <button\n onClick={() => handleClick(item.id)}\n style={{\n all: 'unset',\n cursor: 'pointer',\n fontSize: 14,\n color: activeId === item.id ? 'var(--sk-primary-hover)' : 'var(--sk-text-secondary)',\n fontWeight: activeId === item.id ? 500 : 400,\n transition: 'color 0.2s',\n }}\n >\n {item.text}\n </button>\n </li>\n ))}\n </ul>\n </nav>\n )\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../../src/blog/BlogSidebar.tsx","../../src/blog/BlogLayout.tsx","../../src/blog/AuthorCard.tsx","../../src/blog/AuthorPage.tsx","../../src/blog/RelatedPosts.tsx","../../src/blog/TableOfContents.tsx","../../src/blog/ClusterLandingPage.tsx"],"names":["jsxs","jsx"],"mappings":"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","file":"index.mjs","sourcesContent":["/**\n * @sonordev/site-kit/blog - Blog Sidebar Component\n * \n * A reusable sidebar for blog pages with categories, recent posts,\n * tags, newsletter signup, and custom widgets.\n */\n\nimport React from 'react'\nimport type { BlogPost, BlogCategory, BlogTag } from './types'\n\n// ============================================================================\n// DATA FETCHING\n// ============================================================================\n\nasync function fetchRecentPosts(\n apiUrl: string,\n apiKey: string,\n limit: number = 5\n): Promise<BlogPost[]> {\n try {\n const response = await fetch(`${apiUrl}/public/blog/recent?limit=${limit}`, {\n headers: { 'x-api-key': apiKey },\n next: { revalidate: 300 },\n })\n\n if (!response.ok) return []\n\n const data = await response.json()\n return data.posts || []\n } catch (error) {\n console.error('[Blog] Error fetching recent posts:', error)\n return []\n }\n}\n\nasync function fetchCategories(apiUrl: string, apiKey: string): Promise<BlogCategory[]> {\n try {\n const response = await fetch(`${apiUrl}/public/blog/categories`, {\n headers: { 'x-api-key': apiKey },\n next: { revalidate: 300 },\n })\n\n if (!response.ok) return []\n\n const data = await response.json()\n return data.categories || []\n } catch (error) {\n console.error('[Blog] Error fetching categories:', error)\n return []\n }\n}\n\nasync function fetchTags(apiUrl: string, apiKey: string): Promise<BlogTag[]> {\n try {\n const response = await fetch(`${apiUrl}/public/blog/tags`, {\n headers: { 'x-api-key': apiKey },\n next: { revalidate: 300 },\n })\n\n if (!response.ok) return []\n\n const data = await response.json()\n return data.tags || []\n } catch (error) {\n console.error('[Blog] Error fetching tags:', error)\n return []\n }\n}\n\n// ============================================================================\n// BLOG SIDEBAR COMPONENT\n// ============================================================================\n\nexport interface BlogSidebarProps {\n /** Portal API URL */\n apiUrl?: string\n /** Project API key */\n apiKey?: string\n /** Show categories widget */\n showCategories?: boolean\n /** Show recent posts widget */\n showRecentPosts?: boolean\n /** Number of recent posts to show */\n recentPostsCount?: number\n /** Show tags widget */\n showTags?: boolean\n /** Show search widget */\n showSearch?: boolean\n /** Base URL for blog links */\n basePath?: string\n /** Custom class name */\n className?: string\n /** Current category filter (for highlighting) */\n currentCategory?: string\n /** Additional widgets to render */\n children?: React.ReactNode\n}\n\nexport async function BlogSidebar({\n apiUrl = process.env.SONOR_API_URL || 'https://api.sonor.io',\n apiKey = process.env.SONOR_API_KEY || '',\n showCategories = true,\n showRecentPosts = true,\n recentPostsCount = 5,\n showTags = true,\n showSearch = true,\n basePath = '/blog',\n className,\n currentCategory,\n children,\n}: BlogSidebarProps) {\n if (!apiKey) {\n console.warn('[Blog] No API key configured for sidebar')\n return null\n }\n\n // Fetch data in parallel\n const [categories, recentPosts, tags] = await Promise.all([\n showCategories ? fetchCategories(apiUrl, apiKey) : Promise.resolve([]),\n showRecentPosts ? fetchRecentPosts(apiUrl, apiKey, recentPostsCount) : Promise.resolve([]),\n showTags ? fetchTags(apiUrl, apiKey) : Promise.resolve([]),\n ])\n\n return (\n <aside className={className} style={{ display: 'flex', flexDirection: 'column', gap: 32 }}>\n {/* Search Widget */}\n {showSearch && <SearchWidget basePath={basePath} />}\n\n {/* Categories Widget */}\n {showCategories && categories.length > 0 && (\n <CategoriesWidget\n categories={categories}\n basePath={basePath}\n currentCategory={currentCategory}\n />\n )}\n\n {/* Recent Posts Widget */}\n {showRecentPosts && recentPosts.length > 0 && (\n <RecentPostsWidget posts={recentPosts} basePath={basePath} />\n )}\n\n {/* Tags Widget */}\n {showTags && tags.length > 0 && (\n <TagsWidget tags={tags} basePath={basePath} />\n )}\n\n {/* Custom Widgets */}\n {children}\n </aside>\n )\n}\n\n// ============================================================================\n// WIDGET COMPONENTS\n// ============================================================================\n\nfunction SearchWidget({ basePath }: { basePath: string }) {\n return (\n <div style={widgetStyle}>\n <h4 style={widgetTitleStyle}>Search</h4>\n <form action={basePath} method=\"get\">\n <input\n type=\"search\"\n name=\"search\"\n placeholder=\"Search posts...\"\n style={{\n width: '100%',\n padding: '10px 12px',\n border: '1px solid var(--sk-border)',\n borderRadius: 8,\n fontSize: 14,\n }}\n />\n </form>\n </div>\n )\n}\n\nfunction CategoriesWidget({\n categories,\n basePath,\n currentCategory,\n}: {\n categories: BlogCategory[]\n basePath: string\n currentCategory?: string\n}) {\n return (\n <div style={widgetStyle}>\n <h4 style={widgetTitleStyle}>Categories</h4>\n <ul style={{ listStyle: 'none', margin: 0, padding: 0 }}>\n <li style={{ marginBottom: 8 }}>\n <a\n href={basePath}\n style={{\n ...categoryLinkStyle,\n fontWeight: !currentCategory ? 600 : 400,\n color: !currentCategory ? 'var(--sk-primary)' : 'var(--sk-text-primary)',\n }}\n >\n All Posts\n </a>\n </li>\n {categories.map((cat) => (\n <li key={cat.slug} style={{ marginBottom: 8 }}>\n <a\n href={`${basePath}?category=${cat.slug}`}\n style={{\n ...categoryLinkStyle,\n fontWeight: currentCategory === cat.slug ? 600 : 400,\n color: currentCategory === cat.slug ? 'var(--sk-primary)' : 'var(--sk-text-primary)',\n }}\n >\n {cat.name}\n <span style={{ color: 'var(--sk-text-tertiary)', marginLeft: 8 }}>({cat.post_count})</span>\n </a>\n </li>\n ))}\n </ul>\n </div>\n )\n}\n\nfunction RecentPostsWidget({\n posts,\n basePath,\n}: {\n posts: BlogPost[]\n basePath: string\n}) {\n return (\n <div style={widgetStyle}>\n <h4 style={widgetTitleStyle}>Recent Posts</h4>\n <ul style={{ listStyle: 'none', margin: 0, padding: 0 }}>\n {posts.map((post) => {\n const date = post.published_at\n ? new Date(post.published_at).toLocaleDateString('en-US', {\n month: 'short',\n day: 'numeric',\n })\n : null\n\n return (\n <li\n key={post.id}\n style={{\n marginBottom: 16,\n paddingBottom: 16,\n borderBottom: '1px solid var(--sk-border)',\n }}\n >\n <div style={{ display: 'flex', gap: 12 }}>\n {post.featured_image && (\n <a href={`${basePath}/${post.slug}`}>\n <img\n src={post.featured_image}\n alt=\"\"\n style={{\n width: 64,\n height: 48,\n objectFit: 'cover',\n borderRadius: 6,\n flexShrink: 0,\n }}\n />\n </a>\n )}\n <div style={{ flex: 1, minWidth: 0 }}>\n <a\n href={`${basePath}/${post.slug}`}\n style={{\n fontSize: 14,\n fontWeight: 500,\n color: 'var(--sk-text-primary)',\n textDecoration: 'none',\n display: '-webkit-box',\n WebkitLineClamp: 2,\n WebkitBoxOrient: 'vertical',\n overflow: 'hidden',\n }}\n >\n {post.title}\n </a>\n {date && (\n <span style={{ fontSize: 12, color: 'var(--sk-text-tertiary)', display: 'block', marginTop: 4 }}>\n {date}\n </span>\n )}\n </div>\n </div>\n </li>\n )\n })}\n </ul>\n </div>\n )\n}\n\nfunction TagsWidget({\n tags,\n basePath,\n}: {\n tags: BlogTag[]\n basePath: string\n}) {\n return (\n <div style={widgetStyle}>\n <h4 style={widgetTitleStyle}>Popular Tags</h4>\n <div style={{ display: 'flex', flexWrap: 'wrap', gap: 8 }}>\n {tags.slice(0, 15).map((tag) => (\n <a\n key={tag.slug}\n href={`${basePath}?tag=${tag.slug}`}\n style={{\n padding: '4px 10px',\n backgroundColor: 'var(--sk-bg-elevated)',\n borderRadius: 9999,\n fontSize: 12,\n color: 'var(--sk-text-primary)',\n textDecoration: 'none',\n transition: 'background-color 0.2s',\n }}\n >\n {tag.name}\n </a>\n ))}\n </div>\n </div>\n )\n}\n\n// ============================================================================\n// NEWSLETTER WIDGET (Client Component for forms)\n// ============================================================================\n\nexport interface NewsletterWidgetProps {\n title?: string\n description?: string\n buttonText?: string\n onSubmit?: (email: string) => Promise<void>\n}\n\nexport function NewsletterWidget({\n title = 'Subscribe to Our Newsletter',\n description = 'Get the latest posts delivered straight to your inbox.',\n buttonText = 'Subscribe',\n}: NewsletterWidgetProps) {\n return (\n <div style={{ ...widgetStyle, backgroundColor: 'rgba(var(--sk-primary-rgb), 0.1)' }}>\n <h4 style={{ ...widgetTitleStyle, color: 'var(--sk-primary)' }}>{title}</h4>\n <p style={{ fontSize: 14, color: 'var(--sk-text-secondary)', marginBottom: 16 }}>{description}</p>\n <form\n onSubmit={(e) => {\n e.preventDefault()\n // Handle form submission via parent onSubmit or inline\n }}\n style={{ display: 'flex', gap: 8 }}\n >\n <input\n type=\"email\"\n name=\"email\"\n placeholder=\"Enter your email\"\n required\n style={{\n flex: 1,\n padding: '10px 12px',\n border: '1px solid var(--sk-border)',\n borderRadius: 8,\n fontSize: 14,\n }}\n />\n <button\n type=\"submit\"\n style={{\n padding: '10px 16px',\n backgroundColor: 'var(--sk-primary)',\n color: 'var(--sk-bg)',\n border: 'none',\n borderRadius: 8,\n fontSize: 14,\n fontWeight: 500,\n cursor: 'pointer',\n }}\n >\n {buttonText}\n </button>\n </form>\n </div>\n )\n}\n\n// ============================================================================\n// STYLES\n// ============================================================================\n\nconst widgetStyle: React.CSSProperties = {\n padding: 20,\n backgroundColor: 'var(--sk-bg-elevated)',\n borderRadius: 12,\n}\n\nconst widgetTitleStyle: React.CSSProperties = {\n margin: '0 0 16px',\n fontSize: 16,\n fontWeight: 600,\n color: 'var(--sk-text-primary)',\n}\n\nconst categoryLinkStyle: React.CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n fontSize: 14,\n textDecoration: 'none',\n}\n","/**\n * @sonordev/site-kit/blog - Blog Layout Component\n * \n * A complete blog layout with sidebar, responsive design, and optional hero.\n * Use this to wrap your blog pages for consistent styling.\n */\n\nimport React from 'react'\nimport { BlogSidebar, BlogSidebarProps } from './BlogSidebar'\n\n// ============================================================================\n// BLOG LAYOUT COMPONENT\n// ============================================================================\n\nexport interface BlogLayoutProps {\n /** Portal API URL */\n apiUrl?: string\n /** Project API key */\n apiKey?: string\n /** Layout style: 'sidebar-right', 'sidebar-left', 'full-width' */\n layout?: 'sidebar-right' | 'sidebar-left' | 'full-width'\n /** Show sidebar */\n showSidebar?: boolean\n /** Sidebar props */\n sidebarProps?: Partial<BlogSidebarProps>\n /** Hero section config */\n hero?: {\n title?: string\n subtitle?: string\n backgroundImage?: string\n backgroundColor?: string\n }\n /** Max width for content */\n maxWidth?: number\n /** Base URL for blog links */\n basePath?: string\n /** Custom class name */\n className?: string\n /** Current category (for sidebar highlighting) */\n currentCategory?: string\n /** Main content */\n children: React.ReactNode\n}\n\nexport async function BlogLayout({\n apiUrl = process.env.SONOR_API_URL || 'https://api.sonor.io',\n apiKey = process.env.SONOR_API_KEY || '',\n layout = 'sidebar-right',\n showSidebar = true,\n sidebarProps = {},\n hero,\n maxWidth = 1280,\n basePath = '/blog',\n className,\n currentCategory,\n children,\n}: BlogLayoutProps) {\n const hasSidebar = showSidebar && layout !== 'full-width'\n\n return (\n <div className={className}>\n {/* Hero Section */}\n {hero && (\n <section\n style={{\n padding: '60px 20px',\n backgroundColor: hero.backgroundColor || 'var(--sk-primary)',\n backgroundImage: hero.backgroundImage ? `url(${hero.backgroundImage})` : undefined,\n backgroundSize: 'cover',\n backgroundPosition: 'center',\n color: 'var(--sk-bg)',\n textAlign: 'center',\n }}\n >\n <div style={{ maxWidth, margin: '0 auto' }}>\n {hero.title && (\n <h1\n style={{\n fontSize: 'clamp(32px, 5vw, 48px)',\n fontWeight: 700,\n marginBottom: 16,\n }}\n >\n {hero.title}\n </h1>\n )}\n {hero.subtitle && (\n <p\n style={{\n fontSize: 'clamp(16px, 2vw, 20px)',\n opacity: 0.9,\n maxWidth: 600,\n margin: '0 auto',\n }}\n >\n {hero.subtitle}\n </p>\n )}\n </div>\n </section>\n )}\n\n {/* Main Content Area */}\n <div\n style={{\n maxWidth,\n margin: '0 auto',\n padding: '40px 20px',\n }}\n >\n <div\n style={{\n display: hasSidebar ? 'grid' : 'block',\n gridTemplateColumns: hasSidebar\n ? layout === 'sidebar-left'\n ? '300px 1fr'\n : '1fr 300px'\n : undefined,\n gap: 48,\n }}\n >\n {/* Sidebar (Left Position) */}\n {hasSidebar && layout === 'sidebar-left' && (\n <BlogSidebar\n apiUrl={apiUrl}\n apiKey={apiKey}\n basePath={basePath}\n currentCategory={currentCategory}\n {...sidebarProps}\n />\n )}\n\n {/* Main Content */}\n <main style={{ minWidth: 0 }}>{children}</main>\n\n {/* Sidebar (Right Position) */}\n {hasSidebar && layout === 'sidebar-right' && (\n <BlogSidebar\n apiUrl={apiUrl}\n apiKey={apiKey}\n basePath={basePath}\n currentCategory={currentCategory}\n {...sidebarProps}\n />\n )}\n </div>\n </div>\n </div>\n )\n}\n\n// ============================================================================\n// BLOG PAGE WRAPPER\n// ============================================================================\n\n/**\n * Convenience wrapper for a complete blog index page\n */\nexport interface BlogPageProps extends Omit<BlogLayoutProps, 'children'> {\n /** List component to render */\n listComponent: React.ReactNode\n}\n\nexport async function BlogPage({ listComponent, ...layoutProps }: BlogPageProps) {\n return <BlogLayout {...layoutProps}>{listComponent}</BlogLayout>\n}\n\n/**\n * Convenience wrapper for a single blog post page\n */\nexport interface BlogPostPageProps extends Omit<BlogLayoutProps, 'children'> {\n /** Post component to render */\n postComponent: React.ReactNode\n}\n\nexport async function BlogPostPage({ postComponent, ...layoutProps }: BlogPostPageProps) {\n return (\n <BlogLayout {...layoutProps} showSidebar={false} layout=\"full-width\">\n <div style={{ maxWidth: 800, margin: '0 auto' }}>{postComponent}</div>\n </BlogLayout>\n )\n}\n\n// ============================================================================\n// CATEGORY PAGE WRAPPER\n// ============================================================================\n\nexport interface CategoryPageProps extends BlogLayoutProps {\n /** Category slug being viewed */\n category: string\n /** Category display name */\n categoryName?: string\n /** List component */\n listComponent: React.ReactNode\n}\n\nexport async function CategoryPage({\n category,\n categoryName,\n listComponent,\n hero,\n ...layoutProps\n}: CategoryPageProps) {\n const categoryHero = hero || {\n title: categoryName || category,\n subtitle: `Browse all posts in ${categoryName || category}`,\n backgroundColor: 'var(--sk-primary)',\n }\n\n return (\n <BlogLayout {...layoutProps} hero={categoryHero} currentCategory={category}>\n {listComponent}\n </BlogLayout>\n )\n}\n","/**\n * @sonordev/site-kit/blog - Author Card Component\n */\n\nimport React from 'react'\nimport type { AuthorCardProps, BlogAuthor } from './types'\n\n// ============================================================================\n// Trust Block (E-E-A-T)\n// ============================================================================\n\nfunction TrustBlock({ author }: { author: BlogAuthor }) {\n const hasYears = typeof author.years_experience === 'number' && author.years_experience > 0\n const hasCredentials = author.credentials && author.credentials.length > 0\n const hasExpertise = author.expertise_areas && author.expertise_areas.length > 0\n const hasPublications = author.featured_publications && author.featured_publications.length > 0\n const hasAwards = author.awards && author.awards.length > 0\n const isVerified = author.is_subject_matter_expert || author.has_verified_credentials\n\n const hasAnything = hasYears || hasCredentials || hasExpertise || hasPublications || hasAwards || isVerified\n if (!hasAnything) return null\n\n return (\n <div\n className=\"sk-author-trust\"\n style={{\n marginTop: 16,\n padding: 16,\n borderRadius: 10,\n border: '1px solid var(--sk-border, #e5e7eb)',\n background: 'var(--sk-surface, #f9fafb)',\n }}\n >\n <h5\n style={{\n margin: '0 0 12px',\n fontSize: 13,\n fontWeight: 600,\n textTransform: 'uppercase' as const,\n letterSpacing: '0.05em',\n color: 'var(--sk-text-tertiary, #6b7280)',\n }}\n >\n Why Trust This Author\n </h5>\n\n {/* Verified badge + years */}\n <div style={{ display: 'flex', flexWrap: 'wrap' as const, gap: 8, marginBottom: hasCredentials || hasExpertise || hasPublications || hasAwards ? 12 : 0 }}>\n {isVerified && (\n <span\n style={{\n display: 'inline-flex',\n alignItems: 'center',\n gap: 4,\n padding: '4px 10px',\n borderRadius: 9999,\n fontSize: 12,\n fontWeight: 600,\n background: 'rgba(20, 184, 166, 0.1)',\n color: 'rgb(13, 148, 136)',\n border: '1px solid rgba(20, 184, 166, 0.2)',\n }}\n >\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M22 11.08V12a10 10 0 1 1-5.93-9.14\" />\n <polyline points=\"22 4 12 14.01 9 11.01\" />\n </svg>\n Verified Expert\n </span>\n )}\n {hasYears && (\n <span\n style={{\n display: 'inline-flex',\n alignItems: 'center',\n padding: '4px 10px',\n borderRadius: 9999,\n fontSize: 12,\n fontWeight: 600,\n background: 'rgba(99, 102, 241, 0.1)',\n color: 'rgb(79, 70, 229)',\n border: '1px solid rgba(99, 102, 241, 0.2)',\n }}\n >\n {author.years_experience}+ Years Experience\n </span>\n )}\n </div>\n\n {/* Credentials */}\n {hasCredentials && (\n <div style={{ marginBottom: 10 }}>\n <span style={{ fontSize: 12, fontWeight: 600, color: 'var(--sk-text-secondary, #374151)' }}>Credentials</span>\n <ul style={{ margin: '4px 0 0', padding: '0 0 0 18px', fontSize: 13, color: 'var(--sk-text-secondary, #4b5563)', lineHeight: 1.6 }}>\n {author.credentials!.map((c, i) => (\n <li key={i}>{c}</li>\n ))}\n </ul>\n </div>\n )}\n\n {/* Expertise pills */}\n {hasExpertise && (\n <div style={{ marginBottom: 10 }}>\n <span style={{ fontSize: 12, fontWeight: 600, color: 'var(--sk-text-secondary, #374151)', display: 'block', marginBottom: 6 }}>Expertise</span>\n <div style={{ display: 'flex', flexWrap: 'wrap' as const, gap: 6 }}>\n {author.expertise_areas!.map((area, i) => (\n <span\n key={i}\n style={{\n padding: '3px 10px',\n borderRadius: 9999,\n fontSize: 12,\n background: 'var(--sk-pill-bg, #e5e7eb)',\n color: 'var(--sk-text-secondary, #374151)',\n }}\n >\n {area}\n </span>\n ))}\n </div>\n </div>\n )}\n\n {/* Featured publications */}\n {hasPublications && (\n <div style={{ marginBottom: 10 }}>\n <span style={{ fontSize: 12, fontWeight: 600, color: 'var(--sk-text-secondary, #374151)' }}>Featured In</span>\n <ul style={{ margin: '4px 0 0', padding: '0 0 0 18px', fontSize: 13, color: 'var(--sk-text-secondary, #4b5563)', lineHeight: 1.6 }}>\n {author.featured_publications!.map((pub, i) => (\n <li key={i}>{pub}</li>\n ))}\n </ul>\n </div>\n )}\n\n {/* Awards */}\n {hasAwards && (\n <div>\n <span style={{ fontSize: 12, fontWeight: 600, color: 'var(--sk-text-secondary, #374151)' }}>Awards</span>\n <ul style={{ margin: '4px 0 0', padding: '0 0 0 18px', fontSize: 13, color: 'var(--sk-text-secondary, #4b5563)', lineHeight: 1.6 }}>\n {author.awards!.map((award, i) => (\n <li key={i}>{award}</li>\n ))}\n </ul>\n </div>\n )}\n </div>\n )\n}\n\n// ============================================================================\n// AuthorCard\n// ============================================================================\n\nexport function AuthorCard({ author, showBio = true, showSocial = true, showTrustBlock = false, className }: AuthorCardProps) {\n return (\n <div className={className} style={{ display: 'flex', flexDirection: 'column' as const }}>\n <div style={{ display: 'flex', gap: 16, alignItems: 'flex-start' }}>\n {author.avatar_url && (\n <img\n src={author.avatar_url}\n alt={author.name}\n style={{\n width: 64,\n height: 64,\n borderRadius: '50%',\n objectFit: 'cover' as const,\n }}\n />\n )}\n <div>\n <h4 style={{ margin: 0 }}>{author.name}</h4>\n {author.title && (\n <p style={{ margin: '2px 0 0', fontSize: 13, color: 'var(--sk-text-tertiary, #6b7280)' }}>\n {author.title}{author.company ? ` at ${author.company}` : ''}\n </p>\n )}\n {showBio && author.bio && (\n <p style={{ margin: '4px 0', color: 'var(--sk-text-secondary)', fontSize: 14 }}>{author.bio}</p>\n )}\n {showSocial && author.social_links && (\n <div style={{ display: 'flex', gap: 12, marginTop: 8 }}>\n {author.social_links.twitter && (\n <a href={`https://twitter.com/${author.social_links.twitter}`} target=\"_blank\" rel=\"noopener noreferrer\">\n Twitter\n </a>\n )}\n {author.social_links.linkedin && (\n <a href={author.social_links.linkedin} target=\"_blank\" rel=\"noopener noreferrer\">\n LinkedIn\n </a>\n )}\n {author.social_links.github && (\n <a href={`https://github.com/${author.social_links.github}`} target=\"_blank\" rel=\"noopener noreferrer\">\n GitHub\n </a>\n )}\n </div>\n )}\n </div>\n </div>\n\n {showTrustBlock && <TrustBlock author={author} />}\n </div>\n )\n}\n\nexport { TrustBlock }\n","/**\n * @sonordev/site-kit/blog - Author Page Component (Server Component)\n *\n * Full author profile page with hero, trust block, social links, and articles grid.\n */\n\nimport React from 'react'\nimport type { AuthorPageProps, BlogAuthor, BlogPost } from './types'\nimport { TrustBlock } from './AuthorCard'\nimport { generateAuthorSchema } from './server-core'\n\n// ============================================================================\n// Sub-components\n// ============================================================================\n\nfunction AuthorHero({ author }: { author: BlogAuthor }) {\n return (\n <header\n className=\"sk-author-hero\"\n style={{\n display: 'flex',\n flexDirection: 'column' as const,\n alignItems: 'center',\n textAlign: 'center' as const,\n padding: '48px 24px 32px',\n }}\n >\n {author.avatar_url && (\n <img\n src={author.avatar_url}\n alt={author.name}\n width={120}\n height={120}\n style={{\n width: 120,\n height: 120,\n borderRadius: '50%',\n objectFit: 'cover' as const,\n marginBottom: 20,\n border: '3px solid var(--sk-border, #e5e7eb)',\n }}\n />\n )}\n <h1 style={{ margin: 0, fontSize: 32, fontWeight: 700, color: 'var(--sk-text-primary, #111827)' }}>\n {author.name}\n </h1>\n {(author.title || author.company) && (\n <p style={{ margin: '6px 0 0', fontSize: 16, color: 'var(--sk-text-secondary, #4b5563)' }}>\n {author.title}{author.title && author.company ? ' at ' : ''}{author.company}\n </p>\n )}\n {author.bio && (\n <p\n style={{\n margin: '16px auto 0',\n maxWidth: 640,\n fontSize: 15,\n lineHeight: 1.7,\n color: 'var(--sk-text-secondary, #4b5563)',\n }}\n >\n {author.bio}\n </p>\n )}\n\n {/* Social links */}\n <SocialLinks author={author} />\n </header>\n )\n}\n\nfunction SocialLinks({ author }: { author: BlogAuthor }) {\n const links: { label: string; href: string }[] = []\n\n if (author.linkedin_url) links.push({ label: 'LinkedIn', href: author.linkedin_url })\n else if (author.social_links?.linkedin) links.push({ label: 'LinkedIn', href: author.social_links.linkedin })\n\n if (author.twitter_url) links.push({ label: 'Twitter', href: author.twitter_url })\n else if (author.social_links?.twitter) links.push({ label: 'Twitter', href: `https://twitter.com/${author.social_links.twitter}` })\n\n if (author.website_url) links.push({ label: 'Website', href: author.website_url })\n else if (author.website) links.push({ label: 'Website', href: author.website })\n\n if (links.length === 0) return null\n\n return (\n <div style={{ display: 'flex', gap: 16, marginTop: 16 }}>\n {links.map((link) => (\n <a\n key={link.label}\n href={link.href}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n style={{\n display: 'inline-flex',\n alignItems: 'center',\n gap: 6,\n padding: '6px 14px',\n borderRadius: 8,\n fontSize: 13,\n fontWeight: 500,\n color: 'rgb(13, 148, 136)',\n background: 'rgba(20, 184, 166, 0.08)',\n border: '1px solid rgba(20, 184, 166, 0.15)',\n textDecoration: 'none',\n }}\n >\n {link.label}\n </a>\n ))}\n </div>\n )\n}\n\nfunction PostCard({ post, basePath }: { post: BlogPost; basePath: string }) {\n const href = `${basePath}/${post.slug}`\n const date = post.published_at\n ? new Date(post.published_at).toLocaleDateString('en-US', { year: 'numeric', month: 'short', day: 'numeric' })\n : null\n\n return (\n <article\n className=\"sk-author-post-card\"\n style={{\n borderRadius: 12,\n border: '1px solid var(--sk-border, #e5e7eb)',\n overflow: 'hidden',\n background: 'var(--sk-card-bg, #fff)',\n display: 'flex',\n flexDirection: 'column' as const,\n }}\n >\n {post.featured_image && (\n <a href={href} style={{ display: 'block', overflow: 'hidden', aspectRatio: '16/9' }}>\n <img\n src={post.featured_image}\n alt={post.featured_image_alt || post.title}\n style={{ width: '100%', height: '100%', objectFit: 'cover' as const }}\n loading=\"lazy\"\n />\n </a>\n )}\n <div style={{ padding: 20, flex: 1, display: 'flex', flexDirection: 'column' as const }}>\n {date && (\n <time style={{ fontSize: 12, color: 'var(--sk-text-tertiary, #6b7280)', marginBottom: 6 }}>{date}</time>\n )}\n <a href={href} style={{ textDecoration: 'none', color: 'inherit' }}>\n <h3 style={{ margin: '0 0 8px', fontSize: 18, fontWeight: 600, lineHeight: 1.3, color: 'var(--sk-text-primary, #111827)' }}>\n {post.title}\n </h3>\n </a>\n {post.excerpt && (\n <p style={{ margin: 0, fontSize: 14, lineHeight: 1.6, color: 'var(--sk-text-secondary, #4b5563)', flex: 1 }}>\n {post.excerpt}\n </p>\n )}\n {post.reading_time_minutes && (\n <span style={{ fontSize: 12, color: 'var(--sk-text-tertiary, #6b7280)', marginTop: 12 }}>\n {post.reading_time_minutes} min read\n </span>\n )}\n </div>\n </article>\n )\n}\n\n// ============================================================================\n// AuthorPage\n// ============================================================================\n\nexport function AuthorPage({ author, posts, basePath = '/blog' }: AuthorPageProps) {\n const schema = generateAuthorSchema(author)\n\n return (\n <div className=\"sk-author-page\">\n {/* JSON-LD */}\n <script\n type=\"application/ld+json\"\n dangerouslySetInnerHTML={{ __html: JSON.stringify(schema) }}\n />\n\n {/* Hero */}\n <AuthorHero author={author} />\n\n {/* Trust block */}\n <div style={{ maxWidth: 640, margin: '0 auto', padding: '0 24px' }}>\n <TrustBlock author={author} />\n </div>\n\n {/* Articles */}\n {posts.length > 0 && (\n <section style={{ maxWidth: 1080, margin: '40px auto 0', padding: '0 24px 48px' }}>\n <h2 style={{ fontSize: 22, fontWeight: 600, marginBottom: 24, color: 'var(--sk-text-primary, #111827)' }}>\n Articles by {author.name}\n {typeof author.post_count === 'number' && (\n <span style={{ fontWeight: 400, fontSize: 15, color: 'var(--sk-text-tertiary, #6b7280)', marginLeft: 8 }}>\n ({author.post_count})\n </span>\n )}\n </h2>\n <div\n className=\"sk-author-posts-grid\"\n style={{\n display: 'grid',\n gridTemplateColumns: 'repeat(auto-fill, minmax(300px, 1fr))',\n gap: 24,\n }}\n >\n {posts.map((post) => (\n <PostCard key={post.id} post={post} basePath={basePath} />\n ))}\n </div>\n </section>\n )}\n </div>\n )\n}\n","/**\n * @sonordev/site-kit/blog - Related Posts Component\n * \n * Fetches and displays related blog posts via Portal API\n */\n\nimport React from 'react'\nimport type { RelatedPostsProps, BlogPost } from './types'\n\nasync function fetchRelatedPosts(\n apiUrl: string,\n apiKey: string,\n currentPostId: string,\n limit: number\n): Promise<BlogPost[]> {\n try {\n const response = await fetch(`${apiUrl}/api/public/blog/related`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'x-api-key': apiKey,\n },\n body: JSON.stringify({\n currentPostId,\n limit,\n }),\n })\n \n if (!response.ok) {\n console.error('Failed to fetch related posts:', response.statusText)\n return []\n }\n \n const data = await response.json()\n return data.posts || []\n } catch (error) {\n console.error('Failed to fetch related posts:', error)\n return []\n }\n}\n\ninterface RelatedPostsServerProps {\n apiUrl?: string\n apiKey?: string\n currentPostId: string\n limit?: number\n className?: string\n renderItem?: (post: BlogPost) => React.ReactNode\n}\n\nexport async function RelatedPosts({\n apiUrl = process.env.SONOR_API_URL || 'https://api.sonor.io',\n apiKey = process.env.SONOR_API_KEY || '',\n currentPostId,\n limit = 3,\n className,\n renderItem,\n}: RelatedPostsServerProps) {\n if (!apiKey) {\n console.warn('[Blog] No API key configured for RelatedPosts')\n return null\n }\n \n const posts = await fetchRelatedPosts(apiUrl, apiKey, currentPostId, limit)\n\n if (posts.length === 0) return null\n\n return (\n <section className={className}>\n <h3 style={{ marginBottom: 16 }}>Related Posts</h3>\n <div style={{ display: 'grid', gap: 16 }}>\n {posts.map((post) =>\n renderItem ? (\n renderItem(post)\n ) : (\n <article key={post.id} style={{ borderBottom: '1px solid var(--sk-border)', paddingBottom: 16 }}>\n {post.featured_image && (\n <img\n src={post.featured_image}\n alt={post.title}\n style={{\n width: '100%',\n height: 120,\n objectFit: 'cover',\n borderRadius: 8,\n marginBottom: 8,\n }}\n />\n )}\n <a href={`/blog/${post.slug}`} style={{ textDecoration: 'none' }}>\n <h4 style={{ margin: 0, color: 'inherit' }}>{post.title}</h4>\n </a>\n {post.excerpt && (\n <p style={{ margin: '4px 0 0', fontSize: 14, color: 'var(--sk-text-secondary)' }}>\n {post.excerpt}\n </p>\n )}\n </article>\n )\n )}\n </div>\n </section>\n )\n}\n","/**\n * @sonordev/site-kit/blog - Table of Contents Component\n */\n\n'use client'\n\nimport React, { useState, useEffect } from 'react'\nimport type { TableOfContentsProps } from './types'\n\ninterface TocItem {\n id: string\n text: string\n level: number\n}\n\nfunction parseHeadings(content: string): TocItem[] {\n // Extract headings from HTML content\n const headingRegex = /<h([2-4])[^>]*id=\"([^\"]*)\"[^>]*>(.*?)<\\/h[2-4]>/gi\n const items: TocItem[] = []\n let match\n\n while ((match = headingRegex.exec(content)) !== null) {\n items.push({\n level: parseInt(match[1]),\n id: match[2],\n text: match[3].replace(/<[^>]*>/g, ''), // Strip any nested HTML\n })\n }\n\n return items\n}\n\nexport function TableOfContents({\n content,\n className,\n maxDepth = 3,\n}: TableOfContentsProps) {\n const [activeId, setActiveId] = useState<string>('')\n const items = parseHeadings(content).filter((item) => item.level <= maxDepth)\n\n useEffect(() => {\n if (typeof window === 'undefined') return\n\n const observer = new IntersectionObserver(\n (entries) => {\n entries.forEach((entry) => {\n if (entry.isIntersecting) {\n setActiveId(entry.target.id)\n }\n })\n },\n {\n rootMargin: '-20% 0% -35% 0%',\n threshold: 0,\n }\n )\n\n // Observe all headings\n items.forEach((item) => {\n const element = document.getElementById(item.id)\n if (element) {\n observer.observe(element)\n }\n })\n\n return () => observer.disconnect()\n }, [items])\n\n if (items.length === 0) return null\n\n const handleClick = (id: string) => {\n const element = document.getElementById(id)\n if (element) {\n element.scrollIntoView({ behavior: 'smooth' })\n }\n }\n\n return (\n <nav className={className} aria-label=\"Table of contents\">\n <h4 style={{ margin: '0 0 12px', fontSize: 14, fontWeight: 600, textTransform: 'uppercase', letterSpacing: '0.05em' }}>\n On This Page\n </h4>\n <ul style={{ listStyle: 'none', margin: 0, padding: 0 }}>\n {items.map((item) => (\n <li\n key={item.id}\n style={{\n paddingLeft: (item.level - 2) * 12,\n marginBottom: 8,\n }}\n >\n <button\n onClick={() => handleClick(item.id)}\n style={{\n all: 'unset',\n cursor: 'pointer',\n fontSize: 14,\n color: activeId === item.id ? 'var(--sk-primary-hover)' : 'var(--sk-text-secondary)',\n fontWeight: activeId === item.id ? 500 : 400,\n transition: 'color 0.2s',\n }}\n >\n {item.text}\n </button>\n </li>\n ))}\n </ul>\n </nav>\n )\n}\n","/**\n * @sonordev/site-kit/blog - Cluster Landing Page Component\n *\n * Pre-built page component for `/blog/cluster/[slug]` routes.\n * Renders a topic cluster overview with:\n * - Cluster hero (name, topic, description)\n * - Pillar article (featured, large card)\n * - Support articles (grid, categorized by article_type or funnel_stage)\n *\n * Server component — fetches cluster data from Portal API.\n * Ships with `.sk-cluster-landing-*` scoped styles.\n */\n\nimport React from 'react'\nimport { getTopicCluster } from './server-core'\nimport type { TopicCluster, BlogPost } from './types'\n\n// ============================================================================\n// CSS\n// ============================================================================\n\nconst clusterLandingCss = `\n.sk-cluster-landing { max-width: 72rem; margin: 0 auto; padding: 2rem 1rem; }\n\n.sk-cluster-hero { margin-bottom: 3rem; text-align: center; }\n.sk-cluster-hero-label {\n display: inline-flex; align-items: center; gap: 0.375rem;\n font-size: 0.75rem; font-weight: 600; text-transform: uppercase;\n letter-spacing: 0.05em; color: #6366f1; margin-bottom: 0.75rem;\n}\n.sk-cluster-hero-title {\n font-size: 2.25rem; font-weight: 800; color: #111827;\n line-height: 1.2; margin: 0 0 0.75rem 0;\n}\n.sk-cluster-hero-desc {\n font-size: 1.125rem; color: #6b7280; max-width: 40rem;\n margin: 0 auto; line-height: 1.6;\n}\n.sk-cluster-hero-meta {\n display: flex; justify-content: center; gap: 1.5rem;\n margin-top: 1rem; font-size: 0.875rem; color: #9ca3af;\n}\n\n.sk-cluster-pillar-card {\n display: block; text-decoration: none; color: inherit;\n padding: 2rem; border-radius: 0.75rem;\n background: linear-gradient(135deg, rgba(99,102,241,0.04), rgba(99,102,241,0.01));\n border: 2px solid rgba(99,102,241,0.2);\n margin-bottom: 3rem; transition: border-color 0.2s, box-shadow 0.2s;\n}\n.sk-cluster-pillar-card:hover {\n border-color: rgba(99,102,241,0.4);\n box-shadow: 0 4px 24px rgba(99,102,241,0.08);\n}\n.sk-cluster-pillar-label {\n display: inline-flex; align-items: center; gap: 0.375rem;\n font-size: 0.6875rem; font-weight: 700; text-transform: uppercase;\n letter-spacing: 0.05em; color: #6366f1; margin-bottom: 0.75rem;\n padding: 0.25rem 0.5rem; border-radius: 9999px;\n background: rgba(99,102,241,0.08);\n}\n.sk-cluster-pillar-title {\n font-size: 1.5rem; font-weight: 700; color: #111827;\n margin: 0 0 0.5rem 0; line-height: 1.3;\n}\n.sk-cluster-pillar-excerpt {\n font-size: 1rem; color: #6b7280; line-height: 1.6;\n margin: 0 0 1rem 0;\n}\n.sk-cluster-pillar-meta {\n display: flex; gap: 1rem; font-size: 0.8125rem; color: #9ca3af;\n}\n\n.sk-cluster-supports-section { margin-bottom: 2rem; }\n.sk-cluster-supports-title {\n font-size: 1.25rem; font-weight: 700; color: #111827;\n margin: 0 0 1.25rem 0;\n}\n.sk-cluster-supports-grid {\n display: grid; gap: 1.25rem;\n grid-template-columns: repeat(auto-fill, minmax(20rem, 1fr));\n}\n.sk-cluster-support-card {\n display: block; text-decoration: none; color: inherit;\n padding: 1.25rem; border-radius: 0.5rem;\n border: 1px solid #e5e7eb; background: #fff;\n transition: border-color 0.2s, box-shadow 0.2s;\n}\n.sk-cluster-support-card:hover {\n border-color: #c7d2fe;\n box-shadow: 0 2px 12px rgba(0,0,0,0.04);\n}\n.sk-cluster-support-card-header {\n display: flex; align-items: center; gap: 0.5rem;\n margin-bottom: 0.5rem;\n}\n.sk-cluster-support-type {\n display: inline-flex; align-items: center;\n padding: 0.125rem 0.375rem; border-radius: 9999px;\n font-size: 0.6875rem; font-weight: 500;\n background: rgba(99,102,241,0.06); color: #6366f1;\n border: 1px solid rgba(99,102,241,0.12);\n text-transform: capitalize;\n}\n.sk-cluster-support-intent {\n font-size: 0.6875rem; color: #9ca3af;\n text-transform: capitalize;\n}\n.sk-cluster-support-title {\n font-size: 1rem; font-weight: 600; color: #111827;\n margin: 0 0 0.375rem 0; line-height: 1.4;\n}\n.sk-cluster-support-excerpt {\n font-size: 0.875rem; color: #6b7280; line-height: 1.5;\n margin: 0; display: -webkit-box; -webkit-line-clamp: 2;\n -webkit-box-orient: vertical; overflow: hidden;\n}\n.sk-cluster-support-meta {\n display: flex; gap: 0.75rem; margin-top: 0.75rem;\n font-size: 0.75rem; color: #9ca3af;\n}\n`\n\n// ============================================================================\n// COMPONENT\n// ============================================================================\n\nexport interface ClusterLandingPageProps {\n /** Cluster slug to fetch */\n slug: string\n /** Base path for blog URLs (default: /blog) */\n basePath?: string\n /** Disable default styles */\n unstyled?: boolean\n /** Custom class name */\n className?: string\n /** Render prop for full data access */\n children?: (props: { cluster: TopicCluster }) => React.ReactNode\n}\n\nexport async function ClusterLandingPage({\n slug,\n basePath = '/blog',\n unstyled = false,\n className,\n children,\n}: ClusterLandingPageProps) {\n const cluster = await getTopicCluster(slug)\n\n if (!cluster) {\n return (\n <div style={{ padding: '4rem 1rem', textAlign: 'center', color: '#6b7280' }}>\n <p>Topic cluster not found.</p>\n </div>\n )\n }\n\n // Custom render\n if (children) {\n return children({ cluster })\n }\n\n const pillar = cluster.pillar\n const supports = cluster.supports || []\n\n return (\n <>\n {!unstyled && <style dangerouslySetInnerHTML={{ __html: clusterLandingCss }} />}\n\n <div className={`${unstyled ? '' : 'sk-cluster-landing'} ${className || ''}`}>\n {/* Hero */}\n <header className={unstyled ? '' : 'sk-cluster-hero'}>\n <p className={unstyled ? '' : 'sk-cluster-hero-label'}>\n Topic Cluster\n </p>\n <h1 className={unstyled ? '' : 'sk-cluster-hero-title'}>\n {cluster.cluster_name}\n </h1>\n <p className={unstyled ? '' : 'sk-cluster-hero-desc'}>\n {cluster.core_topic}\n {cluster.geo_target ? ` in ${cluster.geo_target}` : ''}\n </p>\n <div className={unstyled ? '' : 'sk-cluster-hero-meta'}>\n <span>{cluster.article_count} articles</span>\n {cluster.geo_target && <span>{cluster.geo_target}</span>}\n </div>\n </header>\n\n {/* Pillar article (hero card) */}\n {pillar && (\n <a href={`${basePath}/${pillar.slug}`} className={unstyled ? '' : 'sk-cluster-pillar-card'}>\n <span className={unstyled ? '' : 'sk-cluster-pillar-label'}>\n Pillar Guide\n </span>\n <h2 className={unstyled ? '' : 'sk-cluster-pillar-title'}>\n {pillar.title}\n </h2>\n {pillar.excerpt && (\n <p className={unstyled ? '' : 'sk-cluster-pillar-excerpt'}>\n {pillar.excerpt}\n </p>\n )}\n <div className={unstyled ? '' : 'sk-cluster-pillar-meta'}>\n {pillar.reading_time_minutes && (\n <span>{pillar.reading_time_minutes} min read</span>\n )}\n {pillar.word_count && (\n <span>{pillar.word_count.toLocaleString()} words</span>\n )}\n </div>\n </a>\n )}\n\n {/* Support articles */}\n {supports.length > 0 && (\n <section className={unstyled ? '' : 'sk-cluster-supports-section'}>\n <h2 className={unstyled ? '' : 'sk-cluster-supports-title'}>\n Deep Dives\n </h2>\n <div className={unstyled ? '' : 'sk-cluster-supports-grid'}>\n {supports.map((post) => (\n <a\n key={post.id || post.slug}\n href={`${basePath}/${post.slug}`}\n className={unstyled ? '' : 'sk-cluster-support-card'}\n >\n <div className={unstyled ? '' : 'sk-cluster-support-card-header'}>\n {post.article_type && (\n <span className={unstyled ? '' : 'sk-cluster-support-type'}>\n {post.article_type}\n </span>\n )}\n {post.search_intent && (\n <span className={unstyled ? '' : 'sk-cluster-support-intent'}>\n {post.search_intent}\n </span>\n )}\n </div>\n <h3 className={unstyled ? '' : 'sk-cluster-support-title'}>\n {post.title}\n </h3>\n {post.excerpt && (\n <p className={unstyled ? '' : 'sk-cluster-support-excerpt'}>\n {post.excerpt}\n </p>\n )}\n <div className={unstyled ? '' : 'sk-cluster-support-meta'}>\n {post.reading_time_minutes && (\n <span>{post.reading_time_minutes} min read</span>\n )}\n {post.relationship_to_pillar && (\n <span>{post.relationship_to_pillar}</span>\n )}\n </div>\n </a>\n ))}\n </div>\n </section>\n )}\n </div>\n </>\n )\n}\n"]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
2
|
import React__default from 'react';
|
|
3
|
-
import { B as BlogPost$1,
|
|
3
|
+
import { B as BlogPost$1, l as TocItem, g as BlogListResult, b as BlogCategory } from '../types-5P5B9RgV.mjs';
|
|
4
4
|
|
|
5
5
|
interface BlogPostStyles {
|
|
6
6
|
article?: string;
|
package/dist/blog/server-ui.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
2
|
import React__default from 'react';
|
|
3
|
-
import { B as BlogPost$1,
|
|
3
|
+
import { B as BlogPost$1, l as TocItem, g as BlogListResult, b as BlogCategory } from '../types-5P5B9RgV.js';
|
|
4
4
|
|
|
5
5
|
interface BlogPostStyles {
|
|
6
6
|
article?: string;
|
package/dist/blog/server-ui.js
CHANGED
|
@@ -1,17 +1,17 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
3
|
+
var chunkF54HGPDM_js = require('../chunk-F54HGPDM.js');
|
|
4
4
|
require('../chunk-ZSMWDLMK.js');
|
|
5
5
|
|
|
6
6
|
|
|
7
7
|
|
|
8
8
|
Object.defineProperty(exports, "BlogList", {
|
|
9
9
|
enumerable: true,
|
|
10
|
-
get: function () { return
|
|
10
|
+
get: function () { return chunkF54HGPDM_js.BlogList; }
|
|
11
11
|
});
|
|
12
12
|
Object.defineProperty(exports, "BlogPost", {
|
|
13
13
|
enumerable: true,
|
|
14
|
-
get: function () { return
|
|
14
|
+
get: function () { return chunkF54HGPDM_js.BlogPost; }
|
|
15
15
|
});
|
|
16
16
|
//# sourceMappingURL=server-ui.js.map
|
|
17
17
|
//# sourceMappingURL=server-ui.js.map
|
package/dist/blog/server-ui.mjs
CHANGED
package/dist/blog/server.d.mts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Metadata } from 'next';
|
|
2
|
-
import { B as BlogPost, a as BlogAuthor } from '../types-
|
|
2
|
+
import { B as BlogPost, T as TopicCluster, C as ClusterNavigation, a as BlogAuthor } from '../types-5P5B9RgV.mjs';
|
|
3
3
|
|
|
4
4
|
/**
|
|
5
5
|
* @sonordev/site-kit/blog/server
|
|
@@ -67,7 +67,9 @@ declare function getBlogPost(slug: string): Promise<BlogPost | null>;
|
|
|
67
67
|
*/
|
|
68
68
|
declare function getAllBlogSlugs(): Promise<{
|
|
69
69
|
slug: string;
|
|
70
|
+
id?: string;
|
|
70
71
|
last_modified?: string;
|
|
72
|
+
article_type?: string;
|
|
71
73
|
}[]>;
|
|
72
74
|
/**
|
|
73
75
|
* Fetch blog categories
|
|
@@ -186,7 +188,25 @@ declare function generateRssFeed(options: RssFeedOptions): Promise<string>;
|
|
|
186
188
|
* Generate Atom feed XML
|
|
187
189
|
*/
|
|
188
190
|
declare function generateAtomFeed(options: RssFeedOptions): Promise<string>;
|
|
189
|
-
|
|
191
|
+
/**
|
|
192
|
+
* Fetch all active topic clusters for the project.
|
|
193
|
+
* Uses the real cluster data from Portal API (not heuristic-based).
|
|
194
|
+
*/
|
|
195
|
+
declare function getTopicClusters(): Promise<TopicCluster[]>;
|
|
196
|
+
/**
|
|
197
|
+
* Fetch a single topic cluster with its pillar and support articles.
|
|
198
|
+
*/
|
|
199
|
+
declare function getTopicCluster(slug: string): Promise<TopicCluster | null>;
|
|
200
|
+
/**
|
|
201
|
+
* Get cluster navigation context for a blog post.
|
|
202
|
+
* Returns the cluster name, pillar link, and sibling articles.
|
|
203
|
+
*/
|
|
204
|
+
declare function getClusterNavigation(post: BlogPost): ClusterNavigation | null;
|
|
205
|
+
/**
|
|
206
|
+
* @deprecated Use getTopicCluster(slug) instead. This naive heuristic picks
|
|
207
|
+
* the longest post as pillar. Real cluster data is now managed in the Sonor dashboard.
|
|
208
|
+
*/
|
|
209
|
+
declare function identifyTopicClusters(categorySlug: string): Promise<{
|
|
190
210
|
pillar: BlogPost;
|
|
191
211
|
supportingPosts: BlogPost[];
|
|
192
212
|
internalLinks: Array<{
|
|
@@ -194,16 +214,68 @@ interface TopicCluster {
|
|
|
194
214
|
to: string;
|
|
195
215
|
anchor: string;
|
|
196
216
|
}>;
|
|
197
|
-
}
|
|
217
|
+
} | null>;
|
|
198
218
|
/**
|
|
199
219
|
* Fetch posts by category for topic cluster organization
|
|
200
220
|
*/
|
|
201
221
|
declare function getPostsByCategory(categorySlug: string): Promise<BlogPost[]>;
|
|
202
222
|
/**
|
|
203
|
-
*
|
|
204
|
-
*
|
|
223
|
+
* Generate ItemList schema for a cluster's pillar page.
|
|
224
|
+
* Wraps supporting posts as a structured list Google can parse.
|
|
205
225
|
*/
|
|
206
|
-
declare function
|
|
226
|
+
declare function generateClusterItemListSchema(cluster: TopicCluster, options?: {
|
|
227
|
+
siteUrl?: string;
|
|
228
|
+
basePath?: string;
|
|
229
|
+
}): object;
|
|
230
|
+
/**
|
|
231
|
+
* Generate Article schema with cluster relationship (isPartOf / hasPart).
|
|
232
|
+
* - Support articles get `isPartOf` pointing to the pillar.
|
|
233
|
+
* - Pillar articles get `hasPart` listing all supports.
|
|
234
|
+
*/
|
|
235
|
+
declare function generateClusterArticleSchema(post: BlogPost, cluster: TopicCluster, options?: {
|
|
236
|
+
siteUrl?: string;
|
|
237
|
+
basePath?: string;
|
|
238
|
+
siteName?: string;
|
|
239
|
+
logoUrl?: string;
|
|
240
|
+
}): object;
|
|
241
|
+
/**
|
|
242
|
+
* Generate BreadcrumbList schema for a cluster-linked post.
|
|
243
|
+
* Path: Home > Blog > Cluster > Article
|
|
244
|
+
*/
|
|
245
|
+
declare function generateClusterBreadcrumbSchema(post: BlogPost, cluster: TopicCluster, options?: {
|
|
246
|
+
siteUrl?: string;
|
|
247
|
+
siteName?: string;
|
|
248
|
+
basePath?: string;
|
|
249
|
+
}): object;
|
|
250
|
+
/**
|
|
251
|
+
* Generate CollectionPage schema for a cluster landing page.
|
|
252
|
+
*/
|
|
253
|
+
declare function generateClusterLandingSchema(cluster: TopicCluster, options?: {
|
|
254
|
+
siteUrl?: string;
|
|
255
|
+
basePath?: string;
|
|
256
|
+
siteName?: string;
|
|
257
|
+
}): object;
|
|
258
|
+
/**
|
|
259
|
+
* Generate metadata for a cluster landing page (Next.js generateMetadata).
|
|
260
|
+
*/
|
|
261
|
+
declare function generateClusterPageMetadata(clusterSlug: string, options?: {
|
|
262
|
+
siteName?: string;
|
|
263
|
+
siteUrl?: string;
|
|
264
|
+
basePath?: string;
|
|
265
|
+
}): Promise<{
|
|
266
|
+
title?: undefined;
|
|
267
|
+
description?: undefined;
|
|
268
|
+
openGraph?: undefined;
|
|
269
|
+
} | {
|
|
270
|
+
title: string;
|
|
271
|
+
description: string;
|
|
272
|
+
openGraph: {
|
|
273
|
+
title: string;
|
|
274
|
+
description: string;
|
|
275
|
+
url: string;
|
|
276
|
+
type: string;
|
|
277
|
+
};
|
|
278
|
+
}>;
|
|
207
279
|
/**
|
|
208
280
|
* Generate "Related Insights" section data
|
|
209
281
|
*/
|
|
@@ -268,4 +340,4 @@ declare function generateAuthorSchema(author: BlogAuthor, options?: {
|
|
|
268
340
|
siteName?: string;
|
|
269
341
|
}): object;
|
|
270
342
|
|
|
271
|
-
export { BlogPost as BlogPostRecord, type HowToStep, SEO_LIMITS, type SeoValidationResult,
|
|
343
|
+
export { BlogPost as BlogPostRecord, type HowToStep, SEO_LIMITS, type SeoValidationResult, generateAllBlogSchemas, generateAtomFeed, generateAuthorPageMetadata, generateAuthorSchema, generateAuthorStaticParams, generateBlogCategoryMetadata, generateBlogIndexMetadata, generateBlogListSchema, generateBlogPostMetadata, generateBlogPostSchema, generateBlogSitemap, generateBlogStaticParams, generateBreadcrumbSchema, generateCategoryStaticParams, generateClusterArticleSchema, generateClusterBreadcrumbSchema, generateClusterItemListSchema, generateClusterLandingSchema, generateClusterPageMetadata, generateFaqSchema, generateHowToSchema, generateRssFeed, getAllAuthorSlugs, getAllBlogPosts, getAllBlogSlugs, getAuthorBySlug, getAuthorPosts, getBlogCategories, getBlogPost, getClusterNavigation, getPostsByCategory, getRelatedInsights, getTopicCluster, getTopicClusters, identifyTopicClusters, validateBlogPostSeo, validateMetaDescription, validateSeoTitle };
|