@uptrademedia/site-kit 1.0.3 → 1.0.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (100) hide show
  1. package/README.md +96 -25
  2. package/dist/SetupWizard-Cki06kB0.d.mts +12 -0
  3. package/dist/SetupWizard-Cki06kB0.d.ts +12 -0
  4. package/dist/analytics/index.d.mts +87 -0
  5. package/dist/analytics/index.d.ts +87 -0
  6. package/dist/blog/index.d.mts +179 -0
  7. package/dist/blog/index.d.ts +179 -0
  8. package/dist/blog/index.js +1131 -17
  9. package/dist/blog/index.js.map +1 -1
  10. package/dist/blog/index.mjs +1121 -17
  11. package/dist/blog/index.mjs.map +1 -1
  12. package/dist/blog/server.d.mts +228 -0
  13. package/dist/blog/server.d.ts +228 -0
  14. package/dist/blog/server.js +685 -0
  15. package/dist/blog/server.js.map +1 -0
  16. package/dist/blog/server.mjs +659 -0
  17. package/dist/blog/server.mjs.map +1 -0
  18. package/dist/{chunk-6EXHT7PS.mjs → chunk-2IHTEKHU.mjs} +5 -3
  19. package/dist/chunk-2IHTEKHU.mjs.map +1 -0
  20. package/dist/{chunk-63JNO4QN.mjs → chunk-DOHML47I.mjs} +2 -2
  21. package/dist/chunk-DOHML47I.mjs.map +1 -0
  22. package/dist/{chunk-YKMCG3DS.js → chunk-GAJLEDRD.js} +5 -3
  23. package/dist/chunk-GAJLEDRD.js.map +1 -0
  24. package/dist/{chunk-PYYEPAHL.js → chunk-K2HWVOEO.js} +2 -2
  25. package/dist/chunk-K2HWVOEO.js.map +1 -0
  26. package/dist/{chunk-JG2K4S2I.js → chunk-O2OHHBUD.js} +9 -9
  27. package/dist/chunk-O2OHHBUD.js.map +1 -0
  28. package/dist/chunk-QD66FTXZ.mjs +278 -0
  29. package/dist/chunk-QD66FTXZ.mjs.map +1 -0
  30. package/dist/chunk-UJQ73OS6.js +282 -0
  31. package/dist/chunk-UJQ73OS6.js.map +1 -0
  32. package/dist/{chunk-P7LGOKGI.mjs → chunk-XQJX252G.mjs} +9 -9
  33. package/dist/chunk-XQJX252G.mjs.map +1 -0
  34. package/dist/commerce/index.d.mts +168 -0
  35. package/dist/commerce/index.d.ts +168 -0
  36. package/dist/commerce/index.js +38 -38
  37. package/dist/commerce/index.mjs +1 -1
  38. package/dist/commerce/server.d.mts +98 -0
  39. package/dist/commerce/server.d.ts +98 -0
  40. package/dist/engage/index.d.mts +27 -0
  41. package/dist/engage/index.d.ts +27 -0
  42. package/dist/forms/index.d.mts +437 -0
  43. package/dist/forms/index.d.ts +437 -0
  44. package/dist/images/index.d.mts +133 -0
  45. package/dist/images/index.d.ts +133 -0
  46. package/dist/images/index.js +8 -8
  47. package/dist/images/index.mjs +1 -1
  48. package/dist/index.d.mts +650 -0
  49. package/dist/index.d.ts +650 -0
  50. package/dist/index.js +108 -95
  51. package/dist/index.js.map +1 -1
  52. package/dist/index.mjs +4 -3
  53. package/dist/index.mjs.map +1 -1
  54. package/dist/redirects/index.d.mts +72 -0
  55. package/dist/redirects/index.d.ts +72 -0
  56. package/dist/reputation/index.d.mts +57 -0
  57. package/dist/reputation/index.d.ts +57 -0
  58. package/dist/reputation/index.js +21 -0
  59. package/dist/reputation/index.js.map +1 -0
  60. package/dist/reputation/index.mjs +4 -0
  61. package/dist/reputation/index.mjs.map +1 -0
  62. package/dist/routing-BWjUF7lp.d.ts +105 -0
  63. package/dist/routing-CgmRi9tD.d.mts +105 -0
  64. package/dist/seo/index.d.mts +273 -0
  65. package/dist/seo/index.d.ts +273 -0
  66. package/dist/seo/server.d.mts +89 -0
  67. package/dist/seo/server.d.ts +89 -0
  68. package/dist/setup/client.d.mts +60 -0
  69. package/dist/setup/client.d.ts +60 -0
  70. package/dist/setup/index.d.mts +5 -0
  71. package/dist/setup/index.d.ts +5 -0
  72. package/dist/setup/index.js +2 -2
  73. package/dist/setup/index.mjs +1 -1
  74. package/dist/setup/server.d.mts +14 -0
  75. package/dist/setup/server.d.ts +14 -0
  76. package/dist/setup/server.js +2 -2
  77. package/dist/setup/server.mjs +1 -1
  78. package/dist/sitemap/index.d.mts +78 -0
  79. package/dist/sitemap/index.d.ts +78 -0
  80. package/dist/types-BN4OwtCO.d.mts +177 -0
  81. package/dist/types-BN4OwtCO.d.ts +177 -0
  82. package/dist/types-BmzutFwy.d.mts +227 -0
  83. package/dist/types-BmzutFwy.d.ts +227 -0
  84. package/dist/types-C0pJGfbH.d.mts +155 -0
  85. package/dist/types-C0pJGfbH.d.ts +155 -0
  86. package/dist/types-DA_Kocle.d.mts +127 -0
  87. package/dist/types-DA_Kocle.d.ts +127 -0
  88. package/dist/types-lFLKKn0G.d.mts +163 -0
  89. package/dist/types-lFLKKn0G.d.ts +163 -0
  90. package/dist/types-nB206tPK.d.mts +309 -0
  91. package/dist/types-nB206tPK.d.ts +309 -0
  92. package/dist/useEventModal-6U1pF3_g.d.mts +209 -0
  93. package/dist/useEventModal-BA8g-1-P.d.ts +209 -0
  94. package/package.json +14 -9
  95. package/dist/chunk-63JNO4QN.mjs.map +0 -1
  96. package/dist/chunk-6EXHT7PS.mjs.map +0 -1
  97. package/dist/chunk-JG2K4S2I.js.map +0 -1
  98. package/dist/chunk-P7LGOKGI.mjs.map +0 -1
  99. package/dist/chunk-PYYEPAHL.js.map +0 -1
  100. package/dist/chunk-YKMCG3DS.js.map +0 -1
package/README.md CHANGED
@@ -158,43 +158,114 @@ export default function CustomContactPage() {
158
158
 
159
159
  ### Blog (`@uptrade/site-kit/blog`)
160
160
 
161
- Blog components with built-in SEO and related post suggestions.
161
+ Complete Portal-managed blog system with beautiful layouts, dynamic routing, categories, and SEO.
162
+
163
+ **Create posts in Portal → Automatically appear on your site.**
162
164
 
163
165
  ```tsx
164
- import { BlogPost, BlogList, RelatedPosts, TableOfContents, AuthorCard } from '@uptrade/site-kit/blog'
166
+ // app/blog/page.tsx - Blog Index
167
+ import { BlogList, BlogLayout } from '@uptrade/site-kit/blog'
168
+ import { generateBlogIndexMetadata } from '@uptrade/site-kit/blog/server'
169
+
170
+ export const metadata = generateBlogIndexMetadata({
171
+ title: 'Blog',
172
+ siteName: 'My Company',
173
+ siteUrl: 'https://example.com',
174
+ })
165
175
 
166
- // Blog listing page
167
- export default function BlogPage() {
176
+ export default function BlogPage({ searchParams }) {
168
177
  return (
169
- <BlogList
170
- projectId="..."
171
- options={{
172
- limit: 10,
173
- category: 'news',
174
- orderBy: 'published_at',
175
- order: 'desc'
176
- }}
177
- />
178
+ <BlogLayout
179
+ hero={{ title: 'Blog', subtitle: 'Latest insights and articles' }}
180
+ layout="sidebar-right"
181
+ >
182
+ <BlogList
183
+ category={searchParams.category}
184
+ page={parseInt(searchParams.page || '1')}
185
+ showCategoryFilter
186
+ showPagination
187
+ />
188
+ </BlogLayout>
178
189
  )
179
190
  }
191
+ ```
192
+
193
+ ```tsx
194
+ // app/blog/[slug]/page.tsx - Individual Post
195
+ import { BlogPost } from '@uptrade/site-kit/blog'
196
+ import {
197
+ generateBlogPostMetadata,
198
+ generateBlogStaticParams,
199
+ getBlogPost,
200
+ generateBlogPostSchema
201
+ } from '@uptrade/site-kit/blog/server'
202
+
203
+ // Pre-generate all post pages at build time
204
+ export const generateStaticParams = generateBlogStaticParams
205
+
206
+ // Dynamic metadata for SEO
207
+ export async function generateMetadata({ params }) {
208
+ return generateBlogPostMetadata(params.slug, {
209
+ siteName: 'My Company',
210
+ siteUrl: 'https://example.com',
211
+ })
212
+ }
180
213
 
181
- // Blog post page
182
- export default function BlogPostPage({ params }) {
214
+ export default async function PostPage({ params }) {
215
+ const post = await getBlogPost(params.slug)
216
+
183
217
  return (
184
- <div className="flex">
185
- <aside className="w-64">
186
- <TableOfContents content={post.content_html} />
187
- </aside>
188
- <main>
189
- <BlogPost projectId="..." slug={params.slug} />
190
- <AuthorCard author={post.author} />
191
- <RelatedPosts projectId="..." currentPostId={post.id} limit={3} />
192
- </main>
193
- </div>
218
+ <>
219
+ {/* JSON-LD Schema */}
220
+ <script
221
+ type="application/ld+json"
222
+ dangerouslySetInnerHTML={{
223
+ __html: JSON.stringify(generateBlogPostSchema(post, {
224
+ siteUrl: 'https://example.com',
225
+ siteName: 'My Company',
226
+ })),
227
+ }}
228
+ />
229
+
230
+ {/* Blog Post with TOC and Related Posts */}
231
+ <BlogPost
232
+ slug={params.slug}
233
+ showToc
234
+ showRelated
235
+ showAuthor
236
+ />
237
+ </>
194
238
  )
195
239
  }
196
240
  ```
197
241
 
242
+ #### Available Components
243
+
244
+ | Component | Purpose |
245
+ |-----------|---------|
246
+ | `BlogList` | Grid of posts with pagination & category filter |
247
+ | `BlogPost` | Full post with TOC, author, related posts |
248
+ | `BlogLayout` | Complete layout with sidebar |
249
+ | `BlogSidebar` | Categories, recent posts, tags, search |
250
+ | `TableOfContents` | Sticky TOC from headings |
251
+ | `AuthorCard` | Author info with social links |
252
+ | `RelatedPosts` | Related posts by category |
253
+
254
+ #### Server Functions
255
+
256
+ ```tsx
257
+ import {
258
+ getBlogPost, // Fetch single post
259
+ getAllBlogSlugs, // For generateStaticParams
260
+ getBlogCategories, // All categories
261
+ generateBlogPostMetadata, // Post page metadata
262
+ generateBlogIndexMetadata, // Index page metadata
263
+ generateBlogStaticParams, // SSG params
264
+ generateBlogSitemap, // Sitemap entries
265
+ generateBlogPostSchema, // JSON-LD
266
+ } from '@uptrade/site-kit/blog/server'
267
+ ```
268
+
198
269
  ## Configuration
199
270
 
200
271
  ### Full Provider Options
@@ -0,0 +1,12 @@
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+
3
+ interface SetupWizardProps {
4
+ config?: {
5
+ url?: string;
6
+ anonKey?: string;
7
+ portalApiUrl?: string;
8
+ };
9
+ }
10
+ declare function SetupWizard({ config }?: SetupWizardProps): react_jsx_runtime.JSX.Element;
11
+
12
+ export { SetupWizard as S };
@@ -0,0 +1,12 @@
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+
3
+ interface SetupWizardProps {
4
+ config?: {
5
+ url?: string;
6
+ anonKey?: string;
7
+ portalApiUrl?: string;
8
+ };
9
+ }
10
+ declare function SetupWizard({ config }?: SetupWizardProps): react_jsx_runtime.JSX.Element;
11
+
12
+ export { SetupWizard as S };
@@ -0,0 +1,87 @@
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+ import React__default from 'react';
3
+ import { A as AnalyticsContextValue, T as TrackEventOptions, a as TrackConversionOptions } from '../types-DA_Kocle.mjs';
4
+ export { c as AnalyticsConfig, b as AnalyticsEvent, C as Conversion, P as PageView, S as Session, W as WebVitalsData } from '../types-DA_Kocle.mjs';
5
+
6
+ interface AnalyticsProviderProps {
7
+ children: React__default.ReactNode;
8
+ apiUrl?: string;
9
+ apiKey?: string;
10
+ trackPageViews?: boolean;
11
+ trackWebVitals?: boolean;
12
+ trackScrollDepth?: boolean;
13
+ trackClicks?: boolean;
14
+ trackJourneys?: boolean;
15
+ sessionTimeout?: number;
16
+ excludePaths?: string[];
17
+ validateAgainstSitemap?: boolean;
18
+ debug?: boolean;
19
+ }
20
+ declare function AnalyticsProvider({ children, apiUrl: propApiUrl, apiKey: propApiKey, trackPageViews, trackWebVitals, trackScrollDepth, trackClicks, trackJourneys, // NEW: Enable journey tracking by default
21
+ sessionTimeout, excludePaths, validateAgainstSitemap, debug, }: AnalyticsProviderProps): react_jsx_runtime.JSX.Element;
22
+ declare function useAnalytics(): AnalyticsContextValue;
23
+ declare function useTrackEvent(): {
24
+ trackEvent: (options: TrackEventOptions) => void;
25
+ trackConversion: (options: TrackConversionOptions) => void;
26
+ };
27
+
28
+ /**
29
+ * @uptrade/site-kit/analytics - Web Vitals Component
30
+ *
31
+ * Automatically reports Core Web Vitals via Portal API
32
+ */
33
+ interface WebVitalsProps {
34
+ apiUrl?: string;
35
+ apiKey?: string;
36
+ debug?: boolean;
37
+ }
38
+ declare function WebVitals({ apiUrl: propApiUrl, apiKey: propApiKey, debug }: WebVitalsProps): null;
39
+
40
+ /**
41
+ * @uptrade/site-kit/analytics - Contact Tracking Hook
42
+ *
43
+ * Tracks phone calls and email clicks as conversions.
44
+ * Use this hook to automatically track tel: and mailto: links,
45
+ * or manually track contact interactions.
46
+ */
47
+ interface UseContactTrackingOptions {
48
+ /** Automatically track all tel: and mailto: links (default: true) */
49
+ autoTrack?: boolean;
50
+ /** Debug mode - logs events to console */
51
+ debug?: boolean;
52
+ }
53
+ interface ContactTrackingReturn {
54
+ /** Manually track a phone call click */
55
+ trackPhoneClick: (phoneNumber: string, metadata?: Record<string, unknown>) => void;
56
+ /** Manually track an email click */
57
+ trackEmailClick: (email: string, metadata?: Record<string, unknown>) => void;
58
+ }
59
+ /**
60
+ * Hook for tracking phone and email contact interactions as conversions.
61
+ *
62
+ * @example
63
+ * ```tsx
64
+ * // Auto-track all tel: and mailto: links
65
+ * useContactTracking()
66
+ *
67
+ * // Manual tracking
68
+ * const { trackPhoneClick, trackEmailClick } = useContactTracking()
69
+ * trackPhoneClick('513-555-1234')
70
+ * trackEmailClick('hello@example.com')
71
+ * ```
72
+ */
73
+ declare function useContactTracking(options?: UseContactTrackingOptions): ContactTrackingReturn;
74
+ /**
75
+ * Component wrapper for contact tracking
76
+ * Simply include this component to auto-track all tel: and mailto: links
77
+ *
78
+ * @example
79
+ * ```tsx
80
+ * <ContactTracking />
81
+ * ```
82
+ */
83
+ declare function ContactTracking({ debug }: {
84
+ debug?: boolean;
85
+ }): null;
86
+
87
+ export { AnalyticsContextValue, AnalyticsProvider, ContactTracking, TrackConversionOptions, TrackEventOptions, WebVitals, useAnalytics, useContactTracking, useTrackEvent };
@@ -0,0 +1,87 @@
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+ import React__default from 'react';
3
+ import { A as AnalyticsContextValue, T as TrackEventOptions, a as TrackConversionOptions } from '../types-DA_Kocle.js';
4
+ export { c as AnalyticsConfig, b as AnalyticsEvent, C as Conversion, P as PageView, S as Session, W as WebVitalsData } from '../types-DA_Kocle.js';
5
+
6
+ interface AnalyticsProviderProps {
7
+ children: React__default.ReactNode;
8
+ apiUrl?: string;
9
+ apiKey?: string;
10
+ trackPageViews?: boolean;
11
+ trackWebVitals?: boolean;
12
+ trackScrollDepth?: boolean;
13
+ trackClicks?: boolean;
14
+ trackJourneys?: boolean;
15
+ sessionTimeout?: number;
16
+ excludePaths?: string[];
17
+ validateAgainstSitemap?: boolean;
18
+ debug?: boolean;
19
+ }
20
+ declare function AnalyticsProvider({ children, apiUrl: propApiUrl, apiKey: propApiKey, trackPageViews, trackWebVitals, trackScrollDepth, trackClicks, trackJourneys, // NEW: Enable journey tracking by default
21
+ sessionTimeout, excludePaths, validateAgainstSitemap, debug, }: AnalyticsProviderProps): react_jsx_runtime.JSX.Element;
22
+ declare function useAnalytics(): AnalyticsContextValue;
23
+ declare function useTrackEvent(): {
24
+ trackEvent: (options: TrackEventOptions) => void;
25
+ trackConversion: (options: TrackConversionOptions) => void;
26
+ };
27
+
28
+ /**
29
+ * @uptrade/site-kit/analytics - Web Vitals Component
30
+ *
31
+ * Automatically reports Core Web Vitals via Portal API
32
+ */
33
+ interface WebVitalsProps {
34
+ apiUrl?: string;
35
+ apiKey?: string;
36
+ debug?: boolean;
37
+ }
38
+ declare function WebVitals({ apiUrl: propApiUrl, apiKey: propApiKey, debug }: WebVitalsProps): null;
39
+
40
+ /**
41
+ * @uptrade/site-kit/analytics - Contact Tracking Hook
42
+ *
43
+ * Tracks phone calls and email clicks as conversions.
44
+ * Use this hook to automatically track tel: and mailto: links,
45
+ * or manually track contact interactions.
46
+ */
47
+ interface UseContactTrackingOptions {
48
+ /** Automatically track all tel: and mailto: links (default: true) */
49
+ autoTrack?: boolean;
50
+ /** Debug mode - logs events to console */
51
+ debug?: boolean;
52
+ }
53
+ interface ContactTrackingReturn {
54
+ /** Manually track a phone call click */
55
+ trackPhoneClick: (phoneNumber: string, metadata?: Record<string, unknown>) => void;
56
+ /** Manually track an email click */
57
+ trackEmailClick: (email: string, metadata?: Record<string, unknown>) => void;
58
+ }
59
+ /**
60
+ * Hook for tracking phone and email contact interactions as conversions.
61
+ *
62
+ * @example
63
+ * ```tsx
64
+ * // Auto-track all tel: and mailto: links
65
+ * useContactTracking()
66
+ *
67
+ * // Manual tracking
68
+ * const { trackPhoneClick, trackEmailClick } = useContactTracking()
69
+ * trackPhoneClick('513-555-1234')
70
+ * trackEmailClick('hello@example.com')
71
+ * ```
72
+ */
73
+ declare function useContactTracking(options?: UseContactTrackingOptions): ContactTrackingReturn;
74
+ /**
75
+ * Component wrapper for contact tracking
76
+ * Simply include this component to auto-track all tel: and mailto: links
77
+ *
78
+ * @example
79
+ * ```tsx
80
+ * <ContactTracking />
81
+ * ```
82
+ */
83
+ declare function ContactTracking({ debug }: {
84
+ debug?: boolean;
85
+ }): null;
86
+
87
+ export { AnalyticsContextValue, AnalyticsProvider, ContactTracking, TrackConversionOptions, TrackEventOptions, WebVitals, useAnalytics, useContactTracking, useTrackEvent };
@@ -0,0 +1,179 @@
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+ import React__default from 'react';
3
+ import { B as BlogPost$1, T as TocItem, a as BlogListResult, b as BlogCategory, A as AuthorCardProps, c as TableOfContentsProps } from '../types-BN4OwtCO.mjs';
4
+ export { k as BlogAnalytics, d as BlogAuthor, f as BlogListOptions, i as BlogListProps, j as BlogListRenderProps, g as BlogPostProps, h as BlogPostRenderProps, e as BlogTag, R as RelatedPostsProps } from '../types-BN4OwtCO.mjs';
5
+
6
+ interface BlogPostServerProps {
7
+ /** Portal API URL */
8
+ apiUrl?: string;
9
+ /** Project API key */
10
+ apiKey?: string;
11
+ /** Blog post slug */
12
+ slug: string;
13
+ /** Show table of contents sidebar */
14
+ showToc?: boolean;
15
+ /** Show related posts */
16
+ showRelated?: boolean;
17
+ /** Number of related posts */
18
+ relatedCount?: number;
19
+ /** Show author card */
20
+ showAuthor?: boolean;
21
+ /** Base URL for blog links */
22
+ basePath?: string;
23
+ /** Custom class name */
24
+ className?: string;
25
+ /** Custom render function */
26
+ children?: (props: {
27
+ post: BlogPost$1;
28
+ tableOfContents: TocItem[];
29
+ relatedPosts: BlogPost$1[];
30
+ }) => React__default.ReactNode;
31
+ }
32
+ declare function BlogPost({ apiUrl, apiKey, slug, showToc, showRelated, relatedCount, showAuthor, basePath, className, children, }: BlogPostServerProps): Promise<string | number | bigint | boolean | Iterable<React__default.ReactNode> | react_jsx_runtime.JSX.Element | null | undefined>;
33
+
34
+ interface BlogListServerProps {
35
+ /** Portal API URL */
36
+ apiUrl?: string;
37
+ /** Project API key */
38
+ apiKey?: string;
39
+ /** Filter by category slug */
40
+ category?: string;
41
+ /** Filter by tag */
42
+ tag?: string;
43
+ /** Filter by author */
44
+ author?: string;
45
+ /** Only featured posts */
46
+ featured?: boolean;
47
+ /** Search query */
48
+ search?: string;
49
+ /** Page number (1-indexed) */
50
+ page?: number;
51
+ /** Items per page */
52
+ perPage?: number;
53
+ /** Sort field */
54
+ orderBy?: 'published_at' | 'title' | 'view_count';
55
+ /** Sort direction */
56
+ order?: 'asc' | 'desc';
57
+ /** Show category filter UI */
58
+ showCategoryFilter?: boolean;
59
+ /** Show pagination */
60
+ showPagination?: boolean;
61
+ /** Custom class name */
62
+ className?: string;
63
+ /** Base URL for post links */
64
+ basePath?: string;
65
+ /** Custom render function for post card */
66
+ renderPost?: (post: BlogPost$1) => React__default.ReactNode;
67
+ /** Custom render function for entire grid */
68
+ children?: (props: {
69
+ posts: BlogPost$1[];
70
+ pagination: BlogListResult['pagination'];
71
+ categories: BlogCategory[];
72
+ }) => React__default.ReactNode;
73
+ }
74
+ declare function BlogList({ apiUrl, apiKey, category, tag, author, featured, search, page, perPage, orderBy, order, showCategoryFilter, showPagination, className, basePath, renderPost, children, }: BlogListServerProps): Promise<string | number | bigint | boolean | Iterable<React__default.ReactNode> | react_jsx_runtime.JSX.Element | null | undefined>;
75
+
76
+ interface BlogSidebarProps {
77
+ /** Portal API URL */
78
+ apiUrl?: string;
79
+ /** Project API key */
80
+ apiKey?: string;
81
+ /** Show categories widget */
82
+ showCategories?: boolean;
83
+ /** Show recent posts widget */
84
+ showRecentPosts?: boolean;
85
+ /** Number of recent posts to show */
86
+ recentPostsCount?: number;
87
+ /** Show tags widget */
88
+ showTags?: boolean;
89
+ /** Show search widget */
90
+ showSearch?: boolean;
91
+ /** Base URL for blog links */
92
+ basePath?: string;
93
+ /** Custom class name */
94
+ className?: string;
95
+ /** Current category filter (for highlighting) */
96
+ currentCategory?: string;
97
+ /** Additional widgets to render */
98
+ children?: React__default.ReactNode;
99
+ }
100
+ declare function BlogSidebar({ apiUrl, apiKey, showCategories, showRecentPosts, recentPostsCount, showTags, showSearch, basePath, className, currentCategory, children, }: BlogSidebarProps): Promise<react_jsx_runtime.JSX.Element | null>;
101
+ interface NewsletterWidgetProps {
102
+ title?: string;
103
+ description?: string;
104
+ buttonText?: string;
105
+ onSubmit?: (email: string) => Promise<void>;
106
+ }
107
+ declare function NewsletterWidget({ title, description, buttonText, }: NewsletterWidgetProps): react_jsx_runtime.JSX.Element;
108
+
109
+ interface BlogLayoutProps {
110
+ /** Portal API URL */
111
+ apiUrl?: string;
112
+ /** Project API key */
113
+ apiKey?: string;
114
+ /** Layout style: 'sidebar-right', 'sidebar-left', 'full-width' */
115
+ layout?: 'sidebar-right' | 'sidebar-left' | 'full-width';
116
+ /** Show sidebar */
117
+ showSidebar?: boolean;
118
+ /** Sidebar props */
119
+ sidebarProps?: Partial<BlogSidebarProps>;
120
+ /** Hero section config */
121
+ hero?: {
122
+ title?: string;
123
+ subtitle?: string;
124
+ backgroundImage?: string;
125
+ backgroundColor?: string;
126
+ };
127
+ /** Max width for content */
128
+ maxWidth?: number;
129
+ /** Base URL for blog links */
130
+ basePath?: string;
131
+ /** Custom class name */
132
+ className?: string;
133
+ /** Current category (for sidebar highlighting) */
134
+ currentCategory?: string;
135
+ /** Main content */
136
+ children: React__default.ReactNode;
137
+ }
138
+ declare function BlogLayout({ apiUrl, apiKey, layout, showSidebar, sidebarProps, hero, maxWidth, basePath, className, currentCategory, children, }: BlogLayoutProps): Promise<react_jsx_runtime.JSX.Element>;
139
+ /**
140
+ * Convenience wrapper for a complete blog index page
141
+ */
142
+ interface BlogPageProps extends Omit<BlogLayoutProps, 'children'> {
143
+ /** List component to render */
144
+ listComponent: React__default.ReactNode;
145
+ }
146
+ declare function BlogPage({ listComponent, ...layoutProps }: BlogPageProps): Promise<react_jsx_runtime.JSX.Element>;
147
+ /**
148
+ * Convenience wrapper for a single blog post page
149
+ */
150
+ interface BlogPostPageProps extends Omit<BlogLayoutProps, 'children'> {
151
+ /** Post component to render */
152
+ postComponent: React__default.ReactNode;
153
+ }
154
+ declare function BlogPostPage({ postComponent, ...layoutProps }: BlogPostPageProps): Promise<react_jsx_runtime.JSX.Element>;
155
+ interface CategoryPageProps extends BlogLayoutProps {
156
+ /** Category slug being viewed */
157
+ category: string;
158
+ /** Category display name */
159
+ categoryName?: string;
160
+ /** List component */
161
+ listComponent: React__default.ReactNode;
162
+ }
163
+ declare function CategoryPage({ category, categoryName, listComponent, hero, ...layoutProps }: CategoryPageProps): Promise<react_jsx_runtime.JSX.Element>;
164
+
165
+ declare function AuthorCard({ author, showBio, showSocial, className }: AuthorCardProps): react_jsx_runtime.JSX.Element;
166
+
167
+ interface RelatedPostsServerProps {
168
+ apiUrl?: string;
169
+ apiKey?: string;
170
+ currentPostId: string;
171
+ limit?: number;
172
+ className?: string;
173
+ renderItem?: (post: BlogPost$1) => React__default.ReactNode;
174
+ }
175
+ declare function RelatedPosts({ apiUrl, apiKey, currentPostId, limit, className, renderItem, }: RelatedPostsServerProps): Promise<react_jsx_runtime.JSX.Element | null>;
176
+
177
+ declare function TableOfContents({ content, className, maxDepth, }: TableOfContentsProps): react_jsx_runtime.JSX.Element | null;
178
+
179
+ export { AuthorCard, AuthorCardProps, BlogCategory, BlogLayout, type BlogLayoutProps, BlogList, BlogListResult, type BlogListServerProps, BlogPage, type BlogPageProps, BlogPost, BlogPostPage, type BlogPostPageProps, type BlogPostServerProps, BlogSidebar, type BlogSidebarProps, CategoryPage, type CategoryPageProps, NewsletterWidget, type NewsletterWidgetProps, RelatedPosts, TableOfContents, TableOfContentsProps, TocItem };