@sonordev/site-kit 2.0.1 → 2.0.2

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 (55) hide show
  1. package/dist/SitemapSync-DXIV5TXI.mjs +4 -0
  2. package/dist/{SitemapSync-YK6IXOSY.mjs.map → SitemapSync-DXIV5TXI.mjs.map} +1 -1
  3. package/dist/SitemapSync-Z4NDW2S7.js +13 -0
  4. package/dist/{SitemapSync-FKYWGDAD.js.map → SitemapSync-Z4NDW2S7.js.map} +1 -1
  5. package/dist/blog/index.d.mts +6 -4
  6. package/dist/blog/index.d.ts +6 -4
  7. package/dist/blog/index.js +305 -20
  8. package/dist/blog/index.js.map +1 -1
  9. package/dist/blog/index.mjs +305 -21
  10. package/dist/blog/index.mjs.map +1 -1
  11. package/dist/blog/server.d.mts +41 -2
  12. package/dist/blog/server.d.ts +41 -2
  13. package/dist/blog/server.js +126 -685
  14. package/dist/blog/server.js.map +1 -1
  15. package/dist/blog/server.mjs +1 -663
  16. package/dist/blog/server.mjs.map +1 -1
  17. package/dist/{chunk-UD5447TC.js → chunk-6LZEGXDE.js} +3 -3
  18. package/dist/{chunk-UD5447TC.js.map → chunk-6LZEGXDE.js.map} +1 -1
  19. package/dist/{chunk-QW4RQHSK.js → chunk-ACBDH4RK.js} +15 -3
  20. package/dist/chunk-ACBDH4RK.js.map +1 -0
  21. package/dist/{chunk-TSK35UHV.mjs → chunk-HA5OXTXW.mjs} +15 -3
  22. package/dist/chunk-HA5OXTXW.mjs.map +1 -0
  23. package/dist/chunk-JUWYIDIA.js +823 -0
  24. package/dist/chunk-JUWYIDIA.js.map +1 -0
  25. package/dist/{chunk-WN2PUL6B.mjs → chunk-RVAFAOBA.mjs} +3 -3
  26. package/dist/{chunk-WN2PUL6B.mjs.map → chunk-RVAFAOBA.mjs.map} +1 -1
  27. package/dist/chunk-S2WK4LL7.mjs +791 -0
  28. package/dist/chunk-S2WK4LL7.mjs.map +1 -0
  29. package/dist/index.d.mts +1 -1
  30. package/dist/index.d.ts +1 -1
  31. package/dist/layout/client.js +2 -2
  32. package/dist/layout/client.mjs +1 -1
  33. package/dist/layout/index.js +2 -2
  34. package/dist/layout/index.mjs +1 -1
  35. package/dist/seo/client.js +2 -2
  36. package/dist/seo/client.mjs +1 -1
  37. package/dist/seo/index.js +2 -2
  38. package/dist/seo/index.mjs +1 -1
  39. package/dist/seo/register-sitemap-cli.js +14 -1
  40. package/dist/seo/register-sitemap-cli.js.map +1 -1
  41. package/dist/seo/register-sitemap-cli.mjs +14 -1
  42. package/dist/seo/register-sitemap-cli.mjs.map +1 -1
  43. package/dist/sitemap/index.d.mts +7 -1
  44. package/dist/sitemap/index.d.ts +7 -1
  45. package/dist/sitemap/index.js +24 -5
  46. package/dist/sitemap/index.js.map +1 -1
  47. package/dist/sitemap/index.mjs +24 -5
  48. package/dist/sitemap/index.mjs.map +1 -1
  49. package/dist/{types-D08004rU.d.mts → types-DuvkNnu0.d.mts} +25 -1
  50. package/dist/{types-D08004rU.d.ts → types-DuvkNnu0.d.ts} +25 -1
  51. package/package.json +1 -1
  52. package/dist/SitemapSync-FKYWGDAD.js +0 -13
  53. package/dist/SitemapSync-YK6IXOSY.mjs +0 -4
  54. package/dist/chunk-QW4RQHSK.js.map +0 -1
  55. package/dist/chunk-TSK35UHV.mjs.map +0 -1
@@ -0,0 +1,4 @@
1
+ export { SitemapSync } from './chunk-HA5OXTXW.mjs';
2
+ import './chunk-4XPGGLVP.mjs';
3
+ //# sourceMappingURL=SitemapSync-DXIV5TXI.mjs.map
4
+ //# sourceMappingURL=SitemapSync-DXIV5TXI.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":[],"names":[],"mappings":"","file":"SitemapSync-YK6IXOSY.mjs"}
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"SitemapSync-DXIV5TXI.mjs"}
@@ -0,0 +1,13 @@
1
+ 'use strict';
2
+
3
+ var chunkACBDH4RK_js = require('./chunk-ACBDH4RK.js');
4
+ require('./chunk-ZSMWDLMK.js');
5
+
6
+
7
+
8
+ Object.defineProperty(exports, "SitemapSync", {
9
+ enumerable: true,
10
+ get: function () { return chunkACBDH4RK_js.SitemapSync; }
11
+ });
12
+ //# sourceMappingURL=SitemapSync-Z4NDW2S7.js.map
13
+ //# sourceMappingURL=SitemapSync-Z4NDW2S7.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":[],"names":[],"mappings":"","file":"SitemapSync-FKYWGDAD.js"}
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"SitemapSync-Z4NDW2S7.js"}
@@ -1,7 +1,7 @@
1
1
  import * as react_jsx_runtime from 'react/jsx-runtime';
2
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-D08004rU.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-D08004rU.mjs';
3
+ import { B as BlogPost$1, T as TocItem, b as BlogListResult, c as BlogCategory, A as AuthorCardProps, d as AuthorPageProps, e as TableOfContentsProps } from '../types-DuvkNnu0.mjs';
4
+ export { l as BlogAnalytics, a as BlogAuthor, g as BlogListOptions, j as BlogListProps, k as BlogListRenderProps, h as BlogPostProps, i as BlogPostRenderProps, f as BlogTag, R as RelatedPostsProps } from '../types-DuvkNnu0.mjs';
5
5
 
6
6
  interface BlogPostStyles {
7
7
  /** Article wrapper */
@@ -288,7 +288,9 @@ interface CategoryPageProps extends BlogLayoutProps {
288
288
  }
289
289
  declare function CategoryPage({ category, categoryName, listComponent, hero, ...layoutProps }: CategoryPageProps): Promise<react_jsx_runtime.JSX.Element>;
290
290
 
291
- declare function AuthorCard({ author, showBio, showSocial, className }: AuthorCardProps): react_jsx_runtime.JSX.Element;
291
+ declare function AuthorCard({ author, showBio, showSocial, showTrustBlock, className }: AuthorCardProps): react_jsx_runtime.JSX.Element;
292
+
293
+ declare function AuthorPage({ author, posts, basePath }: AuthorPageProps): react_jsx_runtime.JSX.Element;
292
294
 
293
295
  interface RelatedPostsServerProps {
294
296
  apiUrl?: string;
@@ -302,4 +304,4 @@ declare function RelatedPosts({ apiUrl, apiKey, currentPostId, limit, className,
302
304
 
303
305
  declare function TableOfContents({ content, className, maxDepth, }: TableOfContentsProps): react_jsx_runtime.JSX.Element | null;
304
306
 
305
- export { AuthorCard, AuthorCardProps, BlogCategory, BlogLayout, type BlogLayoutProps, BlogList, BlogListResult, type BlogListServerProps, type BlogListStyles, BlogPage, type BlogPageProps, BlogPost, BlogPostPage, type BlogPostPageProps, type BlogPostServerProps, type BlogPostStyles, BlogSidebar, type BlogSidebarProps, CategoryPage, type CategoryPageProps, NewsletterWidget, type NewsletterWidgetProps, RelatedPosts, TableOfContents, TableOfContentsProps, TocItem };
307
+ export { AuthorCard, AuthorCardProps, AuthorPage, AuthorPageProps, BlogCategory, BlogLayout, type BlogLayoutProps, BlogList, BlogListResult, type BlogListServerProps, type BlogListStyles, BlogPage, type BlogPageProps, BlogPost, BlogPostPage, type BlogPostPageProps, type BlogPostServerProps, type BlogPostStyles, BlogSidebar, type BlogSidebarProps, CategoryPage, type CategoryPageProps, NewsletterWidget, type NewsletterWidgetProps, RelatedPosts, TableOfContents, TableOfContentsProps, TocItem };
@@ -1,7 +1,7 @@
1
1
  import * as react_jsx_runtime from 'react/jsx-runtime';
2
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-D08004rU.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-D08004rU.js';
3
+ import { B as BlogPost$1, T as TocItem, b as BlogListResult, c as BlogCategory, A as AuthorCardProps, d as AuthorPageProps, e as TableOfContentsProps } from '../types-DuvkNnu0.js';
4
+ export { l as BlogAnalytics, a as BlogAuthor, g as BlogListOptions, j as BlogListProps, k as BlogListRenderProps, h as BlogPostProps, i as BlogPostRenderProps, f as BlogTag, R as RelatedPostsProps } from '../types-DuvkNnu0.js';
5
5
 
6
6
  interface BlogPostStyles {
7
7
  /** Article wrapper */
@@ -288,7 +288,9 @@ interface CategoryPageProps extends BlogLayoutProps {
288
288
  }
289
289
  declare function CategoryPage({ category, categoryName, listComponent, hero, ...layoutProps }: CategoryPageProps): Promise<react_jsx_runtime.JSX.Element>;
290
290
 
291
- declare function AuthorCard({ author, showBio, showSocial, className }: AuthorCardProps): react_jsx_runtime.JSX.Element;
291
+ declare function AuthorCard({ author, showBio, showSocial, showTrustBlock, className }: AuthorCardProps): react_jsx_runtime.JSX.Element;
292
+
293
+ declare function AuthorPage({ author, posts, basePath }: AuthorPageProps): react_jsx_runtime.JSX.Element;
292
294
 
293
295
  interface RelatedPostsServerProps {
294
296
  apiUrl?: string;
@@ -302,4 +304,4 @@ declare function RelatedPosts({ apiUrl, apiKey, currentPostId, limit, className,
302
304
 
303
305
  declare function TableOfContents({ content, className, maxDepth, }: TableOfContentsProps): react_jsx_runtime.JSX.Element | null;
304
306
 
305
- export { AuthorCard, AuthorCardProps, BlogCategory, BlogLayout, type BlogLayoutProps, BlogList, BlogListResult, type BlogListServerProps, type BlogListStyles, BlogPage, type BlogPageProps, BlogPost, BlogPostPage, type BlogPostPageProps, type BlogPostServerProps, type BlogPostStyles, BlogSidebar, type BlogSidebarProps, CategoryPage, type CategoryPageProps, NewsletterWidget, type NewsletterWidgetProps, RelatedPosts, TableOfContents, TableOfContentsProps, TocItem };
307
+ export { AuthorCard, AuthorCardProps, AuthorPage, AuthorPageProps, BlogCategory, BlogLayout, type BlogLayoutProps, BlogList, BlogListResult, type BlogListServerProps, type BlogListStyles, BlogPage, type BlogPageProps, BlogPost, BlogPostPage, type BlogPostPageProps, type BlogPostServerProps, type BlogPostStyles, BlogSidebar, type BlogSidebarProps, CategoryPage, type CategoryPageProps, NewsletterWidget, type NewsletterWidgetProps, RelatedPosts, TableOfContents, TableOfContentsProps, TocItem };
@@ -1,5 +1,6 @@
1
1
  'use strict';
2
2
 
3
+ var chunkJUWYIDIA_js = require('../chunk-JUWYIDIA.js');
3
4
  require('../chunk-ZSMWDLMK.js');
4
5
  var jsxRuntime = require('react/jsx-runtime');
5
6
  var React = require('react');
@@ -1394,29 +1395,312 @@ async function CategoryPage({
1394
1395
  };
1395
1396
  return /* @__PURE__ */ jsxRuntime.jsx(BlogLayout, { ...layoutProps, hero: categoryHero, currentCategory: category, children: listComponent });
1396
1397
  }
1397
- function AuthorCard({ author, showBio = true, showSocial = true, className }) {
1398
- return /* @__PURE__ */ jsxRuntime.jsxs("div", { className, style: { display: "flex", gap: 16, alignItems: "flex-start" }, children: [
1399
- author.avatar_url && /* @__PURE__ */ jsxRuntime.jsx(
1400
- "img",
1401
- {
1402
- src: author.avatar_url,
1403
- alt: author.name,
1404
- style: {
1405
- width: 64,
1406
- height: 64,
1407
- borderRadius: "50%",
1408
- objectFit: "cover"
1398
+ function TrustBlock({ author }) {
1399
+ const hasYears = typeof author.years_experience === "number" && author.years_experience > 0;
1400
+ const hasCredentials = author.credentials && author.credentials.length > 0;
1401
+ const hasExpertise = author.expertise_areas && author.expertise_areas.length > 0;
1402
+ const hasPublications = author.featured_publications && author.featured_publications.length > 0;
1403
+ const hasAwards = author.awards && author.awards.length > 0;
1404
+ const isVerified = author.is_subject_matter_expert || author.has_verified_credentials;
1405
+ const hasAnything = hasYears || hasCredentials || hasExpertise || hasPublications || hasAwards || isVerified;
1406
+ if (!hasAnything) return null;
1407
+ return /* @__PURE__ */ jsxRuntime.jsxs(
1408
+ "div",
1409
+ {
1410
+ className: "sk-author-trust",
1411
+ style: {
1412
+ marginTop: 16,
1413
+ padding: 16,
1414
+ borderRadius: 10,
1415
+ border: "1px solid var(--sk-border, #e5e7eb)",
1416
+ background: "var(--sk-surface, #f9fafb)"
1417
+ },
1418
+ children: [
1419
+ /* @__PURE__ */ jsxRuntime.jsx(
1420
+ "h5",
1421
+ {
1422
+ style: {
1423
+ margin: "0 0 12px",
1424
+ fontSize: 13,
1425
+ fontWeight: 600,
1426
+ textTransform: "uppercase",
1427
+ letterSpacing: "0.05em",
1428
+ color: "var(--sk-text-tertiary, #6b7280)"
1429
+ },
1430
+ children: "Why Trust This Author"
1431
+ }
1432
+ ),
1433
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { style: { display: "flex", flexWrap: "wrap", gap: 8, marginBottom: hasCredentials || hasExpertise || hasPublications || hasAwards ? 12 : 0 }, children: [
1434
+ isVerified && /* @__PURE__ */ jsxRuntime.jsxs(
1435
+ "span",
1436
+ {
1437
+ style: {
1438
+ display: "inline-flex",
1439
+ alignItems: "center",
1440
+ gap: 4,
1441
+ padding: "4px 10px",
1442
+ borderRadius: 9999,
1443
+ fontSize: 12,
1444
+ fontWeight: 600,
1445
+ background: "rgba(20, 184, 166, 0.1)",
1446
+ color: "rgb(13, 148, 136)",
1447
+ border: "1px solid rgba(20, 184, 166, 0.2)"
1448
+ },
1449
+ children: [
1450
+ /* @__PURE__ */ jsxRuntime.jsxs("svg", { width: "14", height: "14", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2.5", strokeLinecap: "round", strokeLinejoin: "round", children: [
1451
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M22 11.08V12a10 10 0 1 1-5.93-9.14" }),
1452
+ /* @__PURE__ */ jsxRuntime.jsx("polyline", { points: "22 4 12 14.01 9 11.01" })
1453
+ ] }),
1454
+ "Verified Expert"
1455
+ ]
1456
+ }
1457
+ ),
1458
+ hasYears && /* @__PURE__ */ jsxRuntime.jsxs(
1459
+ "span",
1460
+ {
1461
+ style: {
1462
+ display: "inline-flex",
1463
+ alignItems: "center",
1464
+ padding: "4px 10px",
1465
+ borderRadius: 9999,
1466
+ fontSize: 12,
1467
+ fontWeight: 600,
1468
+ background: "rgba(99, 102, 241, 0.1)",
1469
+ color: "rgb(79, 70, 229)",
1470
+ border: "1px solid rgba(99, 102, 241, 0.2)"
1471
+ },
1472
+ children: [
1473
+ author.years_experience,
1474
+ "+ Years Experience"
1475
+ ]
1476
+ }
1477
+ )
1478
+ ] }),
1479
+ hasCredentials && /* @__PURE__ */ jsxRuntime.jsxs("div", { style: { marginBottom: 10 }, children: [
1480
+ /* @__PURE__ */ jsxRuntime.jsx("span", { style: { fontSize: 12, fontWeight: 600, color: "var(--sk-text-secondary, #374151)" }, children: "Credentials" }),
1481
+ /* @__PURE__ */ jsxRuntime.jsx("ul", { style: { margin: "4px 0 0", padding: "0 0 0 18px", fontSize: 13, color: "var(--sk-text-secondary, #4b5563)", lineHeight: 1.6 }, children: author.credentials.map((c, i) => /* @__PURE__ */ jsxRuntime.jsx("li", { children: c }, i)) })
1482
+ ] }),
1483
+ hasExpertise && /* @__PURE__ */ jsxRuntime.jsxs("div", { style: { marginBottom: 10 }, children: [
1484
+ /* @__PURE__ */ jsxRuntime.jsx("span", { style: { fontSize: 12, fontWeight: 600, color: "var(--sk-text-secondary, #374151)", display: "block", marginBottom: 6 }, children: "Expertise" }),
1485
+ /* @__PURE__ */ jsxRuntime.jsx("div", { style: { display: "flex", flexWrap: "wrap", gap: 6 }, children: author.expertise_areas.map((area, i) => /* @__PURE__ */ jsxRuntime.jsx(
1486
+ "span",
1487
+ {
1488
+ style: {
1489
+ padding: "3px 10px",
1490
+ borderRadius: 9999,
1491
+ fontSize: 12,
1492
+ background: "var(--sk-pill-bg, #e5e7eb)",
1493
+ color: "var(--sk-text-secondary, #374151)"
1494
+ },
1495
+ children: area
1496
+ },
1497
+ i
1498
+ )) })
1499
+ ] }),
1500
+ hasPublications && /* @__PURE__ */ jsxRuntime.jsxs("div", { style: { marginBottom: 10 }, children: [
1501
+ /* @__PURE__ */ jsxRuntime.jsx("span", { style: { fontSize: 12, fontWeight: 600, color: "var(--sk-text-secondary, #374151)" }, children: "Featured In" }),
1502
+ /* @__PURE__ */ jsxRuntime.jsx("ul", { style: { margin: "4px 0 0", padding: "0 0 0 18px", fontSize: 13, color: "var(--sk-text-secondary, #4b5563)", lineHeight: 1.6 }, children: author.featured_publications.map((pub, i) => /* @__PURE__ */ jsxRuntime.jsx("li", { children: pub }, i)) })
1503
+ ] }),
1504
+ hasAwards && /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
1505
+ /* @__PURE__ */ jsxRuntime.jsx("span", { style: { fontSize: 12, fontWeight: 600, color: "var(--sk-text-secondary, #374151)" }, children: "Awards" }),
1506
+ /* @__PURE__ */ jsxRuntime.jsx("ul", { style: { margin: "4px 0 0", padding: "0 0 0 18px", fontSize: 13, color: "var(--sk-text-secondary, #4b5563)", lineHeight: 1.6 }, children: author.awards.map((award, i) => /* @__PURE__ */ jsxRuntime.jsx("li", { children: award }, i)) })
1507
+ ] })
1508
+ ]
1509
+ }
1510
+ );
1511
+ }
1512
+ function AuthorCard({ author, showBio = true, showSocial = true, showTrustBlock = false, className }) {
1513
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className, style: { display: "flex", flexDirection: "column" }, children: [
1514
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { style: { display: "flex", gap: 16, alignItems: "flex-start" }, children: [
1515
+ author.avatar_url && /* @__PURE__ */ jsxRuntime.jsx(
1516
+ "img",
1517
+ {
1518
+ src: author.avatar_url,
1519
+ alt: author.name,
1520
+ style: {
1521
+ width: 64,
1522
+ height: 64,
1523
+ borderRadius: "50%",
1524
+ objectFit: "cover"
1525
+ }
1409
1526
  }
1527
+ ),
1528
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
1529
+ /* @__PURE__ */ jsxRuntime.jsx("h4", { style: { margin: 0 }, children: author.name }),
1530
+ author.title && /* @__PURE__ */ jsxRuntime.jsxs("p", { style: { margin: "2px 0 0", fontSize: 13, color: "var(--sk-text-tertiary, #6b7280)" }, children: [
1531
+ author.title,
1532
+ author.company ? ` at ${author.company}` : ""
1533
+ ] }),
1534
+ showBio && author.bio && /* @__PURE__ */ jsxRuntime.jsx("p", { style: { margin: "4px 0", color: "var(--sk-text-secondary)", fontSize: 14 }, children: author.bio }),
1535
+ showSocial && author.social_links && /* @__PURE__ */ jsxRuntime.jsxs("div", { style: { display: "flex", gap: 12, marginTop: 8 }, children: [
1536
+ author.social_links.twitter && /* @__PURE__ */ jsxRuntime.jsx("a", { href: `https://twitter.com/${author.social_links.twitter}`, target: "_blank", rel: "noopener noreferrer", children: "Twitter" }),
1537
+ author.social_links.linkedin && /* @__PURE__ */ jsxRuntime.jsx("a", { href: author.social_links.linkedin, target: "_blank", rel: "noopener noreferrer", children: "LinkedIn" }),
1538
+ author.social_links.github && /* @__PURE__ */ jsxRuntime.jsx("a", { href: `https://github.com/${author.social_links.github}`, target: "_blank", rel: "noopener noreferrer", children: "GitHub" })
1539
+ ] })
1540
+ ] })
1541
+ ] }),
1542
+ showTrustBlock && /* @__PURE__ */ jsxRuntime.jsx(TrustBlock, { author })
1543
+ ] });
1544
+ }
1545
+ function AuthorHero({ author }) {
1546
+ return /* @__PURE__ */ jsxRuntime.jsxs(
1547
+ "header",
1548
+ {
1549
+ className: "sk-author-hero",
1550
+ style: {
1551
+ display: "flex",
1552
+ flexDirection: "column",
1553
+ alignItems: "center",
1554
+ textAlign: "center",
1555
+ padding: "48px 24px 32px"
1556
+ },
1557
+ children: [
1558
+ author.avatar_url && /* @__PURE__ */ jsxRuntime.jsx(
1559
+ "img",
1560
+ {
1561
+ src: author.avatar_url,
1562
+ alt: author.name,
1563
+ width: 120,
1564
+ height: 120,
1565
+ style: {
1566
+ width: 120,
1567
+ height: 120,
1568
+ borderRadius: "50%",
1569
+ objectFit: "cover",
1570
+ marginBottom: 20,
1571
+ border: "3px solid var(--sk-border, #e5e7eb)"
1572
+ }
1573
+ }
1574
+ ),
1575
+ /* @__PURE__ */ jsxRuntime.jsx("h1", { style: { margin: 0, fontSize: 32, fontWeight: 700, color: "var(--sk-text-primary, #111827)" }, children: author.name }),
1576
+ (author.title || author.company) && /* @__PURE__ */ jsxRuntime.jsxs("p", { style: { margin: "6px 0 0", fontSize: 16, color: "var(--sk-text-secondary, #4b5563)" }, children: [
1577
+ author.title,
1578
+ author.title && author.company ? " at " : "",
1579
+ author.company
1580
+ ] }),
1581
+ author.bio && /* @__PURE__ */ jsxRuntime.jsx(
1582
+ "p",
1583
+ {
1584
+ style: {
1585
+ margin: "16px auto 0",
1586
+ maxWidth: 640,
1587
+ fontSize: 15,
1588
+ lineHeight: 1.7,
1589
+ color: "var(--sk-text-secondary, #4b5563)"
1590
+ },
1591
+ children: author.bio
1592
+ }
1593
+ ),
1594
+ /* @__PURE__ */ jsxRuntime.jsx(SocialLinks, { author })
1595
+ ]
1596
+ }
1597
+ );
1598
+ }
1599
+ function SocialLinks({ author }) {
1600
+ const links = [];
1601
+ if (author.linkedin_url) links.push({ label: "LinkedIn", href: author.linkedin_url });
1602
+ else if (author.social_links?.linkedin) links.push({ label: "LinkedIn", href: author.social_links.linkedin });
1603
+ if (author.twitter_url) links.push({ label: "Twitter", href: author.twitter_url });
1604
+ else if (author.social_links?.twitter) links.push({ label: "Twitter", href: `https://twitter.com/${author.social_links.twitter}` });
1605
+ if (author.website_url) links.push({ label: "Website", href: author.website_url });
1606
+ else if (author.website) links.push({ label: "Website", href: author.website });
1607
+ if (links.length === 0) return null;
1608
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { style: { display: "flex", gap: 16, marginTop: 16 }, children: links.map((link) => /* @__PURE__ */ jsxRuntime.jsx(
1609
+ "a",
1610
+ {
1611
+ href: link.href,
1612
+ target: "_blank",
1613
+ rel: "noopener noreferrer",
1614
+ style: {
1615
+ display: "inline-flex",
1616
+ alignItems: "center",
1617
+ gap: 6,
1618
+ padding: "6px 14px",
1619
+ borderRadius: 8,
1620
+ fontSize: 13,
1621
+ fontWeight: 500,
1622
+ color: "rgb(13, 148, 136)",
1623
+ background: "rgba(20, 184, 166, 0.08)",
1624
+ border: "1px solid rgba(20, 184, 166, 0.15)",
1625
+ textDecoration: "none"
1626
+ },
1627
+ children: link.label
1628
+ },
1629
+ link.label
1630
+ )) });
1631
+ }
1632
+ function PostCard({ post, basePath }) {
1633
+ const href = `${basePath}/${post.slug}`;
1634
+ const date = post.published_at ? new Date(post.published_at).toLocaleDateString("en-US", { year: "numeric", month: "short", day: "numeric" }) : null;
1635
+ return /* @__PURE__ */ jsxRuntime.jsxs(
1636
+ "article",
1637
+ {
1638
+ className: "sk-author-post-card",
1639
+ style: {
1640
+ borderRadius: 12,
1641
+ border: "1px solid var(--sk-border, #e5e7eb)",
1642
+ overflow: "hidden",
1643
+ background: "var(--sk-card-bg, #fff)",
1644
+ display: "flex",
1645
+ flexDirection: "column"
1646
+ },
1647
+ children: [
1648
+ post.featured_image && /* @__PURE__ */ jsxRuntime.jsx("a", { href, style: { display: "block", overflow: "hidden", aspectRatio: "16/9" }, children: /* @__PURE__ */ jsxRuntime.jsx(
1649
+ "img",
1650
+ {
1651
+ src: post.featured_image,
1652
+ alt: post.featured_image_alt || post.title,
1653
+ style: { width: "100%", height: "100%", objectFit: "cover" },
1654
+ loading: "lazy"
1655
+ }
1656
+ ) }),
1657
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { style: { padding: 20, flex: 1, display: "flex", flexDirection: "column" }, children: [
1658
+ date && /* @__PURE__ */ jsxRuntime.jsx("time", { style: { fontSize: 12, color: "var(--sk-text-tertiary, #6b7280)", marginBottom: 6 }, children: date }),
1659
+ /* @__PURE__ */ jsxRuntime.jsx("a", { href, style: { textDecoration: "none", color: "inherit" }, children: /* @__PURE__ */ jsxRuntime.jsx("h3", { style: { margin: "0 0 8px", fontSize: 18, fontWeight: 600, lineHeight: 1.3, color: "var(--sk-text-primary, #111827)" }, children: post.title }) }),
1660
+ post.excerpt && /* @__PURE__ */ jsxRuntime.jsx("p", { style: { margin: 0, fontSize: 14, lineHeight: 1.6, color: "var(--sk-text-secondary, #4b5563)", flex: 1 }, children: post.excerpt }),
1661
+ post.reading_time_minutes && /* @__PURE__ */ jsxRuntime.jsxs("span", { style: { fontSize: 12, color: "var(--sk-text-tertiary, #6b7280)", marginTop: 12 }, children: [
1662
+ post.reading_time_minutes,
1663
+ " min read"
1664
+ ] })
1665
+ ] })
1666
+ ]
1667
+ }
1668
+ );
1669
+ }
1670
+ function AuthorPage({ author, posts, basePath = "/blog" }) {
1671
+ const schema = chunkJUWYIDIA_js.generateAuthorSchema(author);
1672
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "sk-author-page", children: [
1673
+ /* @__PURE__ */ jsxRuntime.jsx(
1674
+ "script",
1675
+ {
1676
+ type: "application/ld+json",
1677
+ dangerouslySetInnerHTML: { __html: JSON.stringify(schema) }
1410
1678
  }
1411
1679
  ),
1412
- /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
1413
- /* @__PURE__ */ jsxRuntime.jsx("h4", { style: { margin: 0 }, children: author.name }),
1414
- showBio && author.bio && /* @__PURE__ */ jsxRuntime.jsx("p", { style: { margin: "4px 0", color: "var(--sk-text-secondary)", fontSize: 14 }, children: author.bio }),
1415
- showSocial && author.social_links && /* @__PURE__ */ jsxRuntime.jsxs("div", { style: { display: "flex", gap: 12, marginTop: 8 }, children: [
1416
- author.social_links.twitter && /* @__PURE__ */ jsxRuntime.jsx("a", { href: `https://twitter.com/${author.social_links.twitter}`, target: "_blank", rel: "noopener noreferrer", children: "Twitter" }),
1417
- author.social_links.linkedin && /* @__PURE__ */ jsxRuntime.jsx("a", { href: author.social_links.linkedin, target: "_blank", rel: "noopener noreferrer", children: "LinkedIn" }),
1418
- author.social_links.github && /* @__PURE__ */ jsxRuntime.jsx("a", { href: `https://github.com/${author.social_links.github}`, target: "_blank", rel: "noopener noreferrer", children: "GitHub" })
1419
- ] })
1680
+ /* @__PURE__ */ jsxRuntime.jsx(AuthorHero, { author }),
1681
+ /* @__PURE__ */ jsxRuntime.jsx("div", { style: { maxWidth: 640, margin: "0 auto", padding: "0 24px" }, children: /* @__PURE__ */ jsxRuntime.jsx(TrustBlock, { author }) }),
1682
+ posts.length > 0 && /* @__PURE__ */ jsxRuntime.jsxs("section", { style: { maxWidth: 1080, margin: "40px auto 0", padding: "0 24px 48px" }, children: [
1683
+ /* @__PURE__ */ jsxRuntime.jsxs("h2", { style: { fontSize: 22, fontWeight: 600, marginBottom: 24, color: "var(--sk-text-primary, #111827)" }, children: [
1684
+ "Articles by ",
1685
+ author.name,
1686
+ typeof author.post_count === "number" && /* @__PURE__ */ jsxRuntime.jsxs("span", { style: { fontWeight: 400, fontSize: 15, color: "var(--sk-text-tertiary, #6b7280)", marginLeft: 8 }, children: [
1687
+ "(",
1688
+ author.post_count,
1689
+ ")"
1690
+ ] })
1691
+ ] }),
1692
+ /* @__PURE__ */ jsxRuntime.jsx(
1693
+ "div",
1694
+ {
1695
+ className: "sk-author-posts-grid",
1696
+ style: {
1697
+ display: "grid",
1698
+ gridTemplateColumns: "repeat(auto-fill, minmax(300px, 1fr))",
1699
+ gap: 24
1700
+ },
1701
+ children: posts.map((post) => /* @__PURE__ */ jsxRuntime.jsx(PostCard, { post, basePath }, post.id))
1702
+ }
1703
+ )
1420
1704
  ] })
1421
1705
  ] });
1422
1706
  }
@@ -1564,6 +1848,7 @@ function TableOfContents({
1564
1848
  }
1565
1849
 
1566
1850
  exports.AuthorCard = AuthorCard;
1851
+ exports.AuthorPage = AuthorPage;
1567
1852
  exports.BlogLayout = BlogLayout;
1568
1853
  exports.BlogList = BlogList;
1569
1854
  exports.BlogPage = BlogPage;