@uptrademedia/site-kit 1.0.4 → 1.0.7

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 (178) hide show
  1. package/README.md +96 -25
  2. package/dist/analytics/index.js +7 -7
  3. package/dist/analytics/index.mjs +3 -3
  4. package/dist/api-QUIPJJCX.js +77 -0
  5. package/dist/api-QUIPJJCX.js.map +1 -0
  6. package/dist/api-V3BA5PMX.mjs +4 -0
  7. package/dist/api-V3BA5PMX.mjs.map +1 -0
  8. package/dist/blog/index.d.mts +160 -5
  9. package/dist/blog/index.d.ts +160 -5
  10. package/dist/blog/index.js +1166 -18
  11. package/dist/blog/index.js.map +1 -1
  12. package/dist/blog/index.mjs +1156 -18
  13. package/dist/blog/index.mjs.map +1 -1
  14. package/dist/blog/server.d.mts +229 -0
  15. package/dist/blog/server.d.ts +229 -0
  16. package/dist/blog/server.js +692 -0
  17. package/dist/blog/server.js.map +1 -0
  18. package/dist/blog/server.mjs +666 -0
  19. package/dist/blog/server.mjs.map +1 -0
  20. package/dist/{chunk-FKVJOT2F.mjs → chunk-42EXHJTC.mjs} +196 -7
  21. package/dist/chunk-42EXHJTC.mjs.map +1 -0
  22. package/dist/{scanner-AZV5I6US.mjs → chunk-44OMJFCG.mjs} +354 -14
  23. package/dist/chunk-44OMJFCG.mjs.map +1 -0
  24. package/dist/chunk-4TGJYNHV.js +981 -0
  25. package/dist/chunk-4TGJYNHV.js.map +1 -0
  26. package/dist/chunk-4XPGGLVP.mjs +53 -0
  27. package/dist/{chunk-NYKRE2FL.mjs.map → chunk-4XPGGLVP.mjs.map} +1 -1
  28. package/dist/{generators-TO2FKJR6.mjs → chunk-6ONUXZDO.mjs} +26 -9
  29. package/dist/chunk-6ONUXZDO.mjs.map +1 -0
  30. package/dist/chunk-CG53ASWX.mjs +729 -0
  31. package/dist/chunk-CG53ASWX.mjs.map +1 -0
  32. package/dist/{scanner-ETJAMIT7.js → chunk-DERI27QC.js} +448 -102
  33. package/dist/chunk-DERI27QC.js.map +1 -0
  34. package/dist/chunk-DYM5ML2V.mjs +1518 -0
  35. package/dist/chunk-DYM5ML2V.mjs.map +1 -0
  36. package/dist/chunk-FLZZOX44.js +1526 -0
  37. package/dist/chunk-FLZZOX44.js.map +1 -0
  38. package/dist/{chunk-7H6I3ECV.mjs → chunk-FQVGK746.mjs} +63 -3
  39. package/dist/chunk-FQVGK746.mjs.map +1 -0
  40. package/dist/{chunk-GQ6ZOU2N.mjs → chunk-JGQPAXTL.mjs} +4 -4
  41. package/dist/{chunk-GQ6ZOU2N.mjs.map → chunk-JGQPAXTL.mjs.map} +1 -1
  42. package/dist/{chunk-V3F5J6CV.js → chunk-JUEVN4Q4.js} +196 -7
  43. package/dist/chunk-JUEVN4Q4.js.map +1 -0
  44. package/dist/chunk-KKMGTT7F.mjs +968 -0
  45. package/dist/chunk-KKMGTT7F.mjs.map +1 -0
  46. package/dist/{chunk-XQJX252G.mjs → chunk-MB3WR5KJ.mjs} +28 -18
  47. package/dist/chunk-MB3WR5KJ.mjs.map +1 -0
  48. package/dist/{chunk-2IHTEKHU.mjs → chunk-QD5CN2OI.mjs} +16 -7
  49. package/dist/chunk-QD5CN2OI.mjs.map +1 -0
  50. package/dist/chunk-QD66FTXZ.mjs +278 -0
  51. package/dist/chunk-QD66FTXZ.mjs.map +1 -0
  52. package/dist/{chunk-SBVEYCSV.js → chunk-QQB4FO4Q.js} +7 -7
  53. package/dist/{chunk-SBVEYCSV.js.map → chunk-QQB4FO4Q.js.map} +1 -1
  54. package/dist/{generators-YZWIGHCO.js → chunk-S2GXR5HY.js} +26 -9
  55. package/dist/chunk-S2GXR5HY.js.map +1 -0
  56. package/dist/{chunk-O2OHHBUD.js → chunk-TDK7DLCH.js} +30 -20
  57. package/dist/chunk-TDK7DLCH.js.map +1 -0
  58. package/dist/chunk-UJQ73OS6.js +282 -0
  59. package/dist/chunk-UJQ73OS6.js.map +1 -0
  60. package/dist/{chunk-QP5NCO2E.js → chunk-VDI7KYME.js} +67 -2
  61. package/dist/chunk-VDI7KYME.js.map +1 -0
  62. package/dist/chunk-VOR53RUR.js +753 -0
  63. package/dist/chunk-VOR53RUR.js.map +1 -0
  64. package/dist/{chunk-GAJLEDRD.js → chunk-ZKJ7JKFV.js} +16 -7
  65. package/dist/chunk-ZKJ7JKFV.js.map +1 -0
  66. package/dist/chunk-ZSMWDLMK.js +63 -0
  67. package/dist/{chunk-EQCVQC35.js.map → chunk-ZSMWDLMK.js.map} +1 -1
  68. package/dist/cli/index.js +37269 -0
  69. package/dist/cli/index.js.map +1 -0
  70. package/dist/cli/index.mjs +37233 -0
  71. package/dist/cli/index.mjs.map +1 -0
  72. package/dist/commerce/index.js +1 -1
  73. package/dist/commerce/index.mjs +1 -1
  74. package/dist/commerce/server.d.mts +12 -3
  75. package/dist/commerce/server.d.ts +12 -3
  76. package/dist/commerce/server.js +71 -70
  77. package/dist/commerce/server.js.map +1 -1
  78. package/dist/commerce/server.mjs +71 -70
  79. package/dist/commerce/server.mjs.map +1 -1
  80. package/dist/engage/index.d.mts +6 -4
  81. package/dist/engage/index.d.ts +6 -4
  82. package/dist/engage/index.js +8 -4
  83. package/dist/engage/index.mjs +2 -2
  84. package/dist/forms/index.js +1 -1
  85. package/dist/forms/index.mjs +1 -1
  86. package/dist/generators-5EU4PTVF.js +33 -0
  87. package/dist/generators-5EU4PTVF.js.map +1 -0
  88. package/dist/generators-TYPILCWD.mjs +4 -0
  89. package/dist/generators-TYPILCWD.mjs.map +1 -0
  90. package/dist/images/index.js +11 -11
  91. package/dist/images/index.mjs +4 -4
  92. package/dist/index.d.mts +155 -5
  93. package/dist/index.d.ts +155 -5
  94. package/dist/index.js +979 -50
  95. package/dist/index.js.map +1 -1
  96. package/dist/index.mjs +821 -8
  97. package/dist/index.mjs.map +1 -1
  98. package/dist/llms/index.d.mts +657 -0
  99. package/dist/llms/index.d.ts +657 -0
  100. package/dist/llms/index.js +101 -0
  101. package/dist/llms/index.js.map +1 -0
  102. package/dist/llms/index.mjs +4 -0
  103. package/dist/llms/index.mjs.map +1 -0
  104. package/dist/migrator-ARLHUNB3.mjs +4 -0
  105. package/dist/migrator-ARLHUNB3.mjs.map +1 -0
  106. package/dist/migrator-VZLBH3VY.js +37 -0
  107. package/dist/migrator-VZLBH3VY.js.map +1 -0
  108. package/dist/redirects/index.js +1 -1
  109. package/dist/redirects/index.mjs +1 -1
  110. package/dist/reputation/index.d.mts +57 -0
  111. package/dist/reputation/index.d.ts +57 -0
  112. package/dist/reputation/index.js +21 -0
  113. package/dist/reputation/index.js.map +1 -0
  114. package/dist/reputation/index.mjs +4 -0
  115. package/dist/reputation/index.mjs.map +1 -0
  116. package/dist/{routing-BWjUF7lp.d.ts → routing-CF91y6NO.d.ts} +1 -1
  117. package/dist/{routing-CgmRi9tD.d.mts → routing-CIOFpFCB.d.mts} +1 -1
  118. package/dist/scanner-7ZMUM2P5.mjs +4 -0
  119. package/dist/scanner-7ZMUM2P5.mjs.map +1 -0
  120. package/dist/scanner-OY7UF3WA.js +53 -0
  121. package/dist/scanner-OY7UF3WA.js.map +1 -0
  122. package/dist/seo/index.d.mts +267 -7
  123. package/dist/seo/index.d.ts +267 -7
  124. package/dist/seo/index.js +432 -24
  125. package/dist/seo/index.js.map +1 -1
  126. package/dist/seo/index.mjs +400 -11
  127. package/dist/seo/index.mjs.map +1 -1
  128. package/dist/seo/server.d.mts +11 -4
  129. package/dist/seo/server.d.ts +11 -4
  130. package/dist/seo/server.js +17 -17
  131. package/dist/seo/server.mjs +3 -3
  132. package/dist/setup/client.js +1 -1
  133. package/dist/setup/client.mjs +1 -1
  134. package/dist/setup/index.js +3 -3
  135. package/dist/setup/index.mjs +2 -2
  136. package/dist/setup/server.js +3 -3
  137. package/dist/setup/server.mjs +2 -2
  138. package/dist/sitemap/index.js +2 -2
  139. package/dist/sitemap/index.js.map +1 -1
  140. package/dist/sitemap/index.mjs +2 -2
  141. package/dist/sitemap/index.mjs.map +1 -1
  142. package/dist/{types-C0pJGfbH.d.mts → types-D6FHAVWX.d.mts} +99 -3
  143. package/dist/{types-C0pJGfbH.d.ts → types-D6FHAVWX.d.ts} +99 -3
  144. package/dist/{types-BDojCvvL.d.mts → types-DI0jnhjJ.d.mts} +31 -8
  145. package/dist/{types-BDojCvvL.d.ts → types-DI0jnhjJ.d.ts} +31 -8
  146. package/dist/{types-BmzutFwy.d.ts → types-j8X4vUhB.d.mts} +19 -2
  147. package/dist/{types-BmzutFwy.d.mts → types-j8X4vUhB.d.ts} +19 -2
  148. package/dist/{web-vitals-BH55V7EJ.js → web-vitals-444RLW3B.js} +11 -11
  149. package/dist/{web-vitals-BH55V7EJ.js.map → web-vitals-444RLW3B.js.map} +1 -1
  150. package/dist/{web-vitals-RJYPWAR3.mjs → web-vitals-KPICZIEF.mjs} +3 -3
  151. package/dist/{web-vitals-RJYPWAR3.mjs.map → web-vitals-KPICZIEF.mjs.map} +1 -1
  152. package/package.json +22 -10
  153. package/dist/api-N35S3EES.js +0 -57
  154. package/dist/api-N35S3EES.js.map +0 -1
  155. package/dist/api-SYBTK7Z7.mjs +0 -4
  156. package/dist/api-SYBTK7Z7.mjs.map +0 -1
  157. package/dist/chunk-2IHTEKHU.mjs.map +0 -1
  158. package/dist/chunk-7H6I3ECV.mjs.map +0 -1
  159. package/dist/chunk-BGJLOJ7T.mjs +0 -605
  160. package/dist/chunk-BGJLOJ7T.mjs.map +0 -1
  161. package/dist/chunk-EQCVQC35.js +0 -35
  162. package/dist/chunk-FKVJOT2F.mjs.map +0 -1
  163. package/dist/chunk-GAJLEDRD.js.map +0 -1
  164. package/dist/chunk-NYKRE2FL.mjs +0 -31
  165. package/dist/chunk-O2OHHBUD.js.map +0 -1
  166. package/dist/chunk-QAYJV4KK.js +0 -608
  167. package/dist/chunk-QAYJV4KK.js.map +0 -1
  168. package/dist/chunk-QP5NCO2E.js.map +0 -1
  169. package/dist/chunk-V3F5J6CV.js.map +0 -1
  170. package/dist/chunk-XQJX252G.mjs.map +0 -1
  171. package/dist/generators-TO2FKJR6.mjs.map +0 -1
  172. package/dist/generators-YZWIGHCO.js.map +0 -1
  173. package/dist/migrator-V6KS75EA.mjs +0 -265
  174. package/dist/migrator-V6KS75EA.mjs.map +0 -1
  175. package/dist/migrator-XKM7YQCY.js +0 -272
  176. package/dist/migrator-XKM7YQCY.js.map +0 -1
  177. package/dist/scanner-AZV5I6US.mjs.map +0 -1
  178. package/dist/scanner-ETJAMIT7.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
@@ -1,12 +1,12 @@
1
1
  'use strict';
2
2
 
3
- var chunkV3F5J6CV_js = require('../chunk-V3F5J6CV.js');
4
- require('../chunk-EQCVQC35.js');
3
+ var chunkJUEVN4Q4_js = require('../chunk-JUEVN4Q4.js');
4
+ require('../chunk-ZSMWDLMK.js');
5
5
  var react = require('react');
6
6
 
7
7
  function useContactTracking(options = {}) {
8
8
  const { autoTrack = true, debug = false } = options;
9
- const { trackConversion } = chunkV3F5J6CV_js.useAnalytics();
9
+ const { trackConversion } = chunkJUEVN4Q4_js.useAnalytics();
10
10
  const trackPhoneClick = react.useCallback((phoneNumber, metadata) => {
11
11
  if (debug) console.log("[Analytics] Phone click:", phoneNumber);
12
12
  trackConversion({
@@ -68,19 +68,19 @@ function ContactTracking({ debug = false }) {
68
68
 
69
69
  Object.defineProperty(exports, "AnalyticsProvider", {
70
70
  enumerable: true,
71
- get: function () { return chunkV3F5J6CV_js.AnalyticsProvider; }
71
+ get: function () { return chunkJUEVN4Q4_js.AnalyticsProvider; }
72
72
  });
73
73
  Object.defineProperty(exports, "WebVitals", {
74
74
  enumerable: true,
75
- get: function () { return chunkV3F5J6CV_js.WebVitals; }
75
+ get: function () { return chunkJUEVN4Q4_js.WebVitals; }
76
76
  });
77
77
  Object.defineProperty(exports, "useAnalytics", {
78
78
  enumerable: true,
79
- get: function () { return chunkV3F5J6CV_js.useAnalytics; }
79
+ get: function () { return chunkJUEVN4Q4_js.useAnalytics; }
80
80
  });
81
81
  Object.defineProperty(exports, "useTrackEvent", {
82
82
  enumerable: true,
83
- get: function () { return chunkV3F5J6CV_js.useTrackEvent; }
83
+ get: function () { return chunkJUEVN4Q4_js.useTrackEvent; }
84
84
  });
85
85
  exports.ContactTracking = ContactTracking;
86
86
  exports.useContactTracking = useContactTracking;
@@ -1,6 +1,6 @@
1
- import { useAnalytics } from '../chunk-FKVJOT2F.mjs';
2
- export { AnalyticsProvider, WebVitals, useAnalytics, useTrackEvent } from '../chunk-FKVJOT2F.mjs';
3
- import '../chunk-NYKRE2FL.mjs';
1
+ import { useAnalytics } from '../chunk-42EXHJTC.mjs';
2
+ export { AnalyticsProvider, WebVitals, useAnalytics, useTrackEvent } from '../chunk-42EXHJTC.mjs';
3
+ import '../chunk-4XPGGLVP.mjs';
4
4
  import { useCallback, useEffect } from 'react';
5
5
 
6
6
  function useContactTracking(options = {}) {
@@ -0,0 +1,77 @@
1
+ 'use strict';
2
+
3
+ var chunkVDI7KYME_js = require('./chunk-VDI7KYME.js');
4
+ require('./chunk-ZSMWDLMK.js');
5
+
6
+
7
+
8
+ Object.defineProperty(exports, "getABTest", {
9
+ enumerable: true,
10
+ get: function () { return chunkVDI7KYME_js.getABTest; }
11
+ });
12
+ Object.defineProperty(exports, "getContentBlock", {
13
+ enumerable: true,
14
+ get: function () { return chunkVDI7KYME_js.getContentBlock; }
15
+ });
16
+ Object.defineProperty(exports, "getEntities", {
17
+ enumerable: true,
18
+ get: function () { return chunkVDI7KYME_js.getEntities; }
19
+ });
20
+ Object.defineProperty(exports, "getEntityEnhancedSchema", {
21
+ enumerable: true,
22
+ get: function () { return chunkVDI7KYME_js.getEntityEnhancedSchema; }
23
+ });
24
+ Object.defineProperty(exports, "getFAQData", {
25
+ enumerable: true,
26
+ get: function () { return chunkVDI7KYME_js.getFAQData; }
27
+ });
28
+ Object.defineProperty(exports, "getInternalLinks", {
29
+ enumerable: true,
30
+ get: function () { return chunkVDI7KYME_js.getInternalLinks; }
31
+ });
32
+ Object.defineProperty(exports, "getManagedScripts", {
33
+ enumerable: true,
34
+ get: function () { return chunkVDI7KYME_js.getManagedScripts; }
35
+ });
36
+ Object.defineProperty(exports, "getPrimaryEntity", {
37
+ enumerable: true,
38
+ get: function () { return chunkVDI7KYME_js.getPrimaryEntity; }
39
+ });
40
+ Object.defineProperty(exports, "getRedirectData", {
41
+ enumerable: true,
42
+ get: function () { return chunkVDI7KYME_js.getRedirectData; }
43
+ });
44
+ Object.defineProperty(exports, "getRobotsData", {
45
+ enumerable: true,
46
+ get: function () { return chunkVDI7KYME_js.getRobotsData; }
47
+ });
48
+ Object.defineProperty(exports, "getSEOPageData", {
49
+ enumerable: true,
50
+ get: function () { return chunkVDI7KYME_js.getSEOPageData; }
51
+ });
52
+ Object.defineProperty(exports, "getSchemaMarkups", {
53
+ enumerable: true,
54
+ get: function () { return chunkVDI7KYME_js.getSchemaMarkups; }
55
+ });
56
+ Object.defineProperty(exports, "getSitemapEntries", {
57
+ enumerable: true,
58
+ get: function () { return chunkVDI7KYME_js.getSitemapEntries; }
59
+ });
60
+ Object.defineProperty(exports, "getVisibilityScore", {
61
+ enumerable: true,
62
+ get: function () { return chunkVDI7KYME_js.getVisibilityScore; }
63
+ });
64
+ Object.defineProperty(exports, "getVisibilitySummary", {
65
+ enumerable: true,
66
+ get: function () { return chunkVDI7KYME_js.getVisibilitySummary; }
67
+ });
68
+ Object.defineProperty(exports, "recordABImpression", {
69
+ enumerable: true,
70
+ get: function () { return chunkVDI7KYME_js.recordABImpression; }
71
+ });
72
+ Object.defineProperty(exports, "registerSitemap", {
73
+ enumerable: true,
74
+ get: function () { return chunkVDI7KYME_js.registerSitemap; }
75
+ });
76
+ //# sourceMappingURL=api-QUIPJJCX.js.map
77
+ //# sourceMappingURL=api-QUIPJJCX.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"api-QUIPJJCX.js"}
@@ -0,0 +1,4 @@
1
+ export { getABTest, getContentBlock, getEntities, getEntityEnhancedSchema, getFAQData, getInternalLinks, getManagedScripts, getPrimaryEntity, getRedirectData, getRobotsData, getSEOPageData, getSchemaMarkups, getSitemapEntries, getVisibilityScore, getVisibilitySummary, recordABImpression, registerSitemap } from './chunk-FQVGK746.mjs';
2
+ import './chunk-4XPGGLVP.mjs';
3
+ //# sourceMappingURL=api-V3BA5PMX.mjs.map
4
+ //# sourceMappingURL=api-V3BA5PMX.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"api-V3BA5PMX.mjs"}
@@ -1,11 +1,166 @@
1
1
  import * as react_jsx_runtime from 'react/jsx-runtime';
2
- import { B as BlogPostProps, a as BlogListProps, A as AuthorCardProps, b as BlogPost$1, T as TableOfContentsProps } from '../types-BDojCvvL.mjs';
3
- export { k as BlogAnalytics, c as BlogAuthor, d as BlogCategory, f as BlogListOptions, i as BlogListRenderProps, g as BlogListResult, h as BlogPostRenderProps, e as BlogTag, R as RelatedPostsProps, j as TocItem } from '../types-BDojCvvL.mjs';
4
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-DI0jnhjJ.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-DI0jnhjJ.mjs';
5
5
 
6
- declare function BlogPost({ projectId, slug, children }: BlogPostProps): Promise<react_jsx_runtime.JSX.Element>;
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;
7
108
 
8
- declare function BlogList({ projectId, options, children }: BlogListProps): Promise<react_jsx_runtime.JSX.Element>;
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>;
9
164
 
10
165
  declare function AuthorCard({ author, showBio, showSocial, className }: AuthorCardProps): react_jsx_runtime.JSX.Element;
11
166
 
@@ -21,4 +176,4 @@ declare function RelatedPosts({ apiUrl, apiKey, currentPostId, limit, className,
21
176
 
22
177
  declare function TableOfContents({ content, className, maxDepth, }: TableOfContentsProps): react_jsx_runtime.JSX.Element | null;
23
178
 
24
- export { AuthorCard, AuthorCardProps, BlogList, BlogListProps, BlogPost, BlogPostProps, RelatedPosts, TableOfContents, TableOfContentsProps };
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 };
@@ -1,11 +1,166 @@
1
1
  import * as react_jsx_runtime from 'react/jsx-runtime';
2
- import { B as BlogPostProps, a as BlogListProps, A as AuthorCardProps, b as BlogPost$1, T as TableOfContentsProps } from '../types-BDojCvvL.js';
3
- export { k as BlogAnalytics, c as BlogAuthor, d as BlogCategory, f as BlogListOptions, i as BlogListRenderProps, g as BlogListResult, h as BlogPostRenderProps, e as BlogTag, R as RelatedPostsProps, j as TocItem } from '../types-BDojCvvL.js';
4
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-DI0jnhjJ.js';
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-DI0jnhjJ.js';
5
5
 
6
- declare function BlogPost({ projectId, slug, children }: BlogPostProps): Promise<react_jsx_runtime.JSX.Element>;
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;
7
108
 
8
- declare function BlogList({ projectId, options, children }: BlogListProps): Promise<react_jsx_runtime.JSX.Element>;
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>;
9
164
 
10
165
  declare function AuthorCard({ author, showBio, showSocial, className }: AuthorCardProps): react_jsx_runtime.JSX.Element;
11
166
 
@@ -21,4 +176,4 @@ declare function RelatedPosts({ apiUrl, apiKey, currentPostId, limit, className,
21
176
 
22
177
  declare function TableOfContents({ content, className, maxDepth, }: TableOfContentsProps): react_jsx_runtime.JSX.Element | null;
23
178
 
24
- export { AuthorCard, AuthorCardProps, BlogList, BlogListProps, BlogPost, BlogPostProps, RelatedPosts, TableOfContents, TableOfContentsProps };
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 };