@shipsite.dev/components 0.2.29 → 0.2.31

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.
@@ -3,15 +3,25 @@ interface BlogArticleAuthor {
3
3
  name: string;
4
4
  role: string;
5
5
  image: string;
6
+ bio?: string;
6
7
  }
7
8
  interface BlogArticleProps {
8
9
  id?: string;
9
10
  children: React.ReactNode;
10
11
  contentFolder?: string;
12
+ title?: string;
13
+ heroImage?: string;
14
+ blogHref?: string;
11
15
  date?: string;
12
16
  readingTime?: number;
13
17
  author?: BlogArticleAuthor;
18
+ blogLabel?: string;
19
+ tocLabel?: string;
20
+ shareLabel?: string;
21
+ copyLinkLabel?: string;
22
+ copiedLabel?: string;
23
+ aboutAuthorLabel?: string;
14
24
  }
15
- export declare function BlogArticle({ id, children, author, date, readingTime }: BlogArticleProps): import("react/jsx-runtime").JSX.Element;
25
+ export declare function BlogArticle({ id, children, title, heroImage, blogHref, author, date, readingTime, blogLabel, tocLabel, shareLabel, copyLinkLabel, copiedLabel, aboutAuthorLabel, }: BlogArticleProps): import("react/jsx-runtime").JSX.Element;
16
26
  export {};
17
27
  //# sourceMappingURL=BlogArticle.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"BlogArticle.d.ts","sourceRoot":"","sources":["../../src/blog/BlogArticle.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,UAAU,iBAAiB;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;CACf;AAED,UAAU,gBAAgB;IACxB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,iBAAiB,CAAC;CAC5B;AAED,wBAAgB,WAAW,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,EAAE,gBAAgB,2CAMxF"}
1
+ {"version":3,"file":"BlogArticle.d.ts","sourceRoot":"","sources":["../../src/blog/BlogArticle.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,UAAU,iBAAiB;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,UAAU,gBAAgB;IACxB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,iBAAiB,CAAC;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,wBAAgB,WAAW,CAAC,EAC1B,EAAE,EACF,QAAQ,EACR,KAAK,EACL,SAAS,EACT,QAAQ,EACR,MAAM,EACN,IAAI,EACJ,WAAW,EACX,SAAS,EACT,QAAQ,EACR,UAAU,EACV,aAAa,EACb,WAAW,EACX,gBAAgB,GACjB,EAAE,gBAAgB,2CAoBlB"}
@@ -1,6 +1,6 @@
1
1
  import { jsx as _jsx } from "react/jsx-runtime";
2
2
  import { BlogArticleClient } from './BlogArticleClient';
3
- export function BlogArticle({ id, children, author, date, readingTime }) {
4
- return (_jsx(BlogArticleClient, { id: id, author: author, date: date, readingTime: readingTime, children: children }));
3
+ export function BlogArticle({ id, children, title, heroImage, blogHref, author, date, readingTime, blogLabel, tocLabel, shareLabel, copyLinkLabel, copiedLabel, aboutAuthorLabel, }) {
4
+ return (_jsx(BlogArticleClient, { id: id, title: title, heroImage: heroImage, blogHref: blogHref, author: author, date: date, readingTime: readingTime, blogLabel: blogLabel, tocLabel: tocLabel, shareLabel: shareLabel, copyLinkLabel: copyLinkLabel, copiedLabel: copiedLabel, aboutAuthorLabel: aboutAuthorLabel, children: children }));
5
5
  }
6
6
  //# sourceMappingURL=BlogArticle.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"BlogArticle.js","sourceRoot":"","sources":["../../src/blog/BlogArticle.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAiBxD,MAAM,UAAU,WAAW,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,EAAoB;IACvF,OAAO,CACL,KAAC,iBAAiB,IAAC,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,WAAW,EAAE,WAAW,YAC5E,QAAQ,GACS,CACrB,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"BlogArticle.js","sourceRoot":"","sources":["../../src/blog/BlogArticle.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AA2BxD,MAAM,UAAU,WAAW,CAAC,EAC1B,EAAE,EACF,QAAQ,EACR,KAAK,EACL,SAAS,EACT,QAAQ,EACR,MAAM,EACN,IAAI,EACJ,WAAW,EACX,SAAS,EACT,QAAQ,EACR,UAAU,EACV,aAAa,EACb,WAAW,EACX,gBAAgB,GACC;IACjB,OAAO,CACL,KAAC,iBAAiB,IAChB,EAAE,EAAE,EAAE,EACN,KAAK,EAAE,KAAK,EACZ,SAAS,EAAE,SAAS,EACpB,QAAQ,EAAE,QAAQ,EAClB,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,IAAI,EACV,WAAW,EAAE,WAAW,EACxB,SAAS,EAAE,SAAS,EACpB,QAAQ,EAAE,QAAQ,EAClB,UAAU,EAAE,UAAU,EACtB,aAAa,EAAE,aAAa,EAC5B,WAAW,EAAE,WAAW,EACxB,gBAAgB,EAAE,gBAAgB,YAEjC,QAAQ,GACS,CACrB,CAAC;AACJ,CAAC"}
@@ -4,14 +4,24 @@ interface BlogArticleAuthor {
4
4
  name: string;
5
5
  role: string;
6
6
  image: ImageSource;
7
+ bio?: string;
7
8
  }
8
9
  interface BlogArticleClientProps {
9
10
  id?: string;
10
11
  children: React.ReactNode;
12
+ title?: string;
13
+ heroImage?: ImageSource;
14
+ blogHref?: string;
11
15
  author?: BlogArticleAuthor;
12
16
  date?: string;
13
17
  readingTime?: number;
18
+ blogLabel?: string;
19
+ tocLabel?: string;
20
+ shareLabel?: string;
21
+ copyLinkLabel?: string;
22
+ copiedLabel?: string;
23
+ aboutAuthorLabel?: string;
14
24
  }
15
- export declare function BlogArticleClient({ id, children, author, date, readingTime, }: BlogArticleClientProps): import("react/jsx-runtime").JSX.Element;
25
+ export declare function BlogArticleClient({ id, children, title, heroImage, blogHref, author, date, readingTime, blogLabel, tocLabel, shareLabel, copyLinkLabel, copiedLabel, aboutAuthorLabel, }: BlogArticleClientProps): import("react/jsx-runtime").JSX.Element;
16
26
  export {};
17
27
  //# sourceMappingURL=BlogArticleClient.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"BlogArticleClient.d.ts","sourceRoot":"","sources":["../../src/blog/BlogArticleClient.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAmD,MAAM,OAAO,CAAC;AAExE,OAAO,EAAc,KAAK,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAQjE,UAAU,iBAAiB;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,WAAW,CAAC;CACpB;AAED,UAAU,sBAAsB;IAC9B,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,MAAM,CAAC,EAAE,iBAAiB,CAAC;IAC3B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,wBAAgB,iBAAiB,CAAC,EAChC,EAAE,EACF,QAAQ,EACR,MAAM,EACN,IAAI,EACJ,WAAW,GACZ,EAAE,sBAAsB,2CAsLxB"}
1
+ {"version":3,"file":"BlogArticleClient.d.ts","sourceRoot":"","sources":["../../src/blog/BlogArticleClient.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAmD,MAAM,OAAO,CAAC;AAGxE,OAAO,EAAc,KAAK,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAoEjE,UAAU,iBAAiB;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,WAAW,CAAC;IACnB,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,UAAU,sBAAsB;IAC9B,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,WAAW,CAAC;IACxB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,iBAAiB,CAAC;IAC3B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAiDD,wBAAgB,iBAAiB,CAAC,EAChC,EAAE,EACF,QAAQ,EACR,KAAK,EACL,SAAS,EACT,QAAkB,EAClB,MAAM,EACN,IAAI,EACJ,WAAW,EACX,SAAkB,EAClB,QAA4B,EAC5B,UAA4B,EAC5B,aAA2B,EAC3B,WAAsB,EACtB,gBAAqC,GACtC,EAAE,sBAAsB,2CAkRxB"}
@@ -1,13 +1,28 @@
1
1
  'use client';
2
2
  import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
3
- import { useCallback, useEffect, useRef, useState } from 'react';
3
+ import { useState, useEffect, useRef, useCallback } from 'react';
4
+ import { Home, ChevronRight } from 'lucide-react';
4
5
  import { cn } from '../lib/utils';
5
6
  import { ThemeImage } from '../ui/theme-image';
6
- export function BlogArticleClient({ id, children, author, date, readingTime, }) {
7
+ // --- Share Icons (inline SVGs for brand icons) ---
8
+ const LinkedInIcon = () => (_jsx("svg", { width: "100%", viewBox: "0 0 24 24", fill: "none", children: _jsx("path", { d: "M22.2234 0H1.77187C0.792187 0 0 0.773438 0 1.72969V22.2656C0 23.2219 0.792187 24 1.77187 24H22.2234C23.2031 24 24 23.2219 24 22.2703V1.72969C24 0.773438 23.2031 0 22.2234 0ZM7.12031 20.4516H3.55781V8.99531H7.12031V20.4516ZM5.33906 7.43438C4.19531 7.43438 3.27188 6.51094 3.27188 5.37187C3.27188 4.23281 4.19531 3.30937 5.33906 3.30937C6.47813 3.30937 7.40156 4.23281 7.40156 5.37187C7.40156 6.50625 6.47813 7.43438 5.33906 7.43438ZM20.4516 20.4516H16.8937V14.8828C16.8937 13.5562 16.8703 11.8453 15.0422 11.8453C13.1906 11.8453 12.9094 13.2937 12.9094 14.7891V20.4516H9.35625V8.99531H12.7687V10.5609H12.8156C13.2891 9.66094 14.4516 8.70938 16.1813 8.70938C19.7859 8.70938 20.4516 11.0813 20.4516 14.1656V20.4516Z", fill: "currentColor" }) }));
9
+ const FacebookIcon = () => (_jsx("svg", { width: "100%", viewBox: "0 0 24 24", fill: "none", children: _jsx("path", { d: "M24 12C24 5.37258 18.6274 0 12 0C5.37258 0 0 5.37258 0 12C0 17.9895 4.3882 22.954 10.125 23.8542V15.4688H7.07812V12H10.125V9.35625C10.125 6.34875 11.9166 4.6875 14.6576 4.6875C15.9701 4.6875 17.3438 4.92188 17.3438 4.92188V7.875H15.8306C14.34 7.875 13.875 8.80008 13.875 9.75V12H17.2031L16.6711 15.4688H13.875V23.8542C19.6118 22.954 24 17.9895 24 12Z", fill: "currentColor" }) }));
10
+ const XIcon = () => (_jsx("svg", { width: "100%", viewBox: "0 0 20 20", fill: "none", children: _jsx("path", { fillRule: "evenodd", clipRule: "evenodd", d: "M13.1385 18.75L8.72419 12.458L3.19803 18.75H0.860107L7.68695 10.9793L0.860107 1.25H6.86257L11.023 7.18013L16.2358 1.25H18.5738L12.0637 8.66084L19.141 18.75H13.1385ZM15.742 16.9762H14.1681L4.20766 3.02386H5.78185L9.77107 8.61047L10.4609 9.57989L15.742 16.9762Z", fill: "currentColor" }) }));
11
+ const RedditIcon = () => (_jsxs("svg", { width: "100%", viewBox: "0 0 20 20", fill: "none", children: [_jsx("path", { d: "M7.70781 9.99998C7.13471 9.99998 6.66687 10.4678 6.66687 11.0409C6.66687 11.614 7.13471 12.0819 7.70781 12.0819C8.28091 12.0819 8.74875 11.614 8.74875 11.0409C8.74875 10.4678 8.28091 9.99998 7.70781 9.99998Z", fill: "currentColor" }), _jsx("path", { d: "M10.0119 14.5497C10.4096 14.5497 11.7663 14.5029 12.4797 13.7895C12.585 13.6842 12.585 13.5204 12.5031 13.4035C12.3979 13.2982 12.2224 13.2982 12.1172 13.4035C11.661 13.8479 10.7137 14.0117 10.0236 14.0117C9.33354 14.0117 8.37448 13.8479 7.93003 13.4035C7.82477 13.2982 7.64933 13.2982 7.54407 13.4035C7.4388 13.5088 7.4388 13.6842 7.54407 13.7895C8.24582 14.4912 9.61424 14.5497 10.0119 14.5497Z", fill: "currentColor" }), _jsx("path", { d: "M11.2517 11.0409C11.2517 11.614 11.7195 12.0819 12.2926 12.0819C12.8657 12.0819 13.3335 11.614 13.3335 11.0409C13.3335 10.4678 12.8657 9.99998 12.2926 9.99998C11.7195 9.99998 11.2517 10.4678 11.2517 11.0409Z", fill: "currentColor" }), _jsx("path", { fillRule: "evenodd", clipRule: "evenodd", d: "M20 10C20 15.5228 15.5228 20 10 20C4.47715 20 0 15.5228 0 10C0 4.47715 4.47715 0 10 0C15.5228 0 20 4.47715 20 10ZM15.2049 8.53799C16.0119 8.53799 16.6669 9.19296 16.6669 9.99998C16.6669 10.5965 16.3043 11.1111 15.8248 11.345C15.8482 11.4854 15.8599 11.6257 15.8599 11.7778C15.8599 14.0234 13.2517 15.8362 10.0236 15.8362C6.79553 15.8362 4.18734 14.0234 4.18734 11.7778C4.18734 11.6257 4.19904 11.4737 4.22243 11.3333C3.70781 11.0994 3.35693 10.5965 3.35693 9.99998C3.35693 9.19296 4.0119 8.53799 4.81892 8.53799C5.20489 8.53799 5.56746 8.70173 5.82477 8.94735C6.83062 8.21051 8.22243 7.75437 9.77799 7.70758L10.5148 4.2222C10.5382 4.15203 10.5733 4.09355 10.6318 4.05846C10.6903 4.02337 10.7604 4.01168 10.8306 4.02337L13.2517 4.53799C13.4154 4.18711 13.7663 3.9532 14.1756 3.9532C14.7487 3.9532 15.2166 4.42103 15.2166 4.99413C15.2166 5.56723 14.7487 6.03507 14.1756 6.03507C13.6142 6.03507 13.1581 5.59062 13.1347 5.04092L10.971 4.58478L10.3043 7.70758C11.8248 7.76606 13.2049 8.2339 14.199 8.94735C14.4563 8.69004 14.8072 8.53799 15.2049 8.53799Z", fill: "currentColor" })] }));
12
+ const CopyIcon = () => (_jsx("svg", { width: "100%", viewBox: "0 0 20 20", fill: "none", children: _jsx("path", { d: "M8.33326 10.8333C8.69113 11.3118 9.14772 11.7077 9.67205 11.9941C10.1964 12.2806 10.7762 12.4509 11.3721 12.4936C11.9681 12.5363 12.5662 12.4503 13.126 12.2415C13.6858 12.0327 14.1942 11.7059 14.6166 11.2833L17.1166 8.78334C17.8756 7.9975 18.2956 6.94499 18.2861 5.85251C18.2766 4.76002 17.8384 3.71497 17.0658 2.94243C16.2933 2.1699 15.2482 1.7317 14.1558 1.7222C13.0633 1.71271 12.0108 2.13269 11.2249 2.89168L9.79159 4.31668M11.6666 9.16668C11.3087 8.68824 10.8521 8.29236 10.3278 8.00589C9.80347 7.71943 9.22367 7.54908 8.62771 7.5064C8.03176 7.46372 7.4336 7.54971 6.8738 7.75853C6.314 7.96735 5.80566 8.29412 5.38326 8.71668L2.88326 11.2167C2.12426 12.0025 1.70429 13.055 1.71378 14.1475C1.72327 15.24 2.16148 16.2851 2.93401 17.0576C3.70655 17.8301 4.7516 18.2683 5.84408 18.2778C6.93657 18.2873 7.98908 17.8673 8.77492 17.1083L10.1999 15.6833", stroke: "currentColor", strokeWidth: "1.66667", strokeLinecap: "round", strokeLinejoin: "round" }) }));
13
+ const CheckIcon = () => (_jsx("svg", { width: "18", height: "18", viewBox: "0 0 18 18", fill: "none", children: _jsx("path", { d: "M15 4.5L6.75 12.75L3 9", stroke: "currentColor", strokeWidth: "1.5", strokeLinecap: "round", strokeLinejoin: "round" }) }));
14
+ // --- Share Buttons ---
15
+ const shareBtnClass = 'w-[2.625rem] h-[2.625rem] flex items-center justify-center border rounded-lg border-border text-muted-foreground hover:bg-muted/50 hover:text-foreground transition-colors p-2.5 cursor-pointer';
16
+ function ShareButtons({ onCopyLink, onShareLinkedIn, onShareFacebook, onShareX, onShareReddit, copyLabel, copied, copiedLabel, }) {
17
+ return (_jsxs("div", { className: "flex flex-wrap gap-3", children: [_jsx("button", { onClick: onCopyLink, className: shareBtnClass, "aria-label": copyLabel, title: copied ? copiedLabel : copyLabel, children: copied ? _jsx(CheckIcon, {}) : _jsx(CopyIcon, {}) }), _jsx("button", { onClick: onShareLinkedIn, className: shareBtnClass, "aria-label": "Share on LinkedIn", children: _jsx(LinkedInIcon, {}) }), _jsx("button", { onClick: onShareFacebook, className: shareBtnClass, "aria-label": "Share on Facebook", children: _jsx(FacebookIcon, {}) }), _jsx("button", { onClick: onShareX, className: shareBtnClass, "aria-label": "Share on X", children: _jsx(XIcon, {}) }), _jsx("button", { onClick: onShareReddit, className: shareBtnClass, "aria-label": "Share on Reddit", children: _jsx(RedditIcon, {}) })] }));
18
+ }
19
+ // --- Main Component ---
20
+ export function BlogArticleClient({ id, children, title, heroImage, blogHref = '/blog', author, date, readingTime, blogLabel = 'Blog', tocLabel = 'In this article', shareLabel = 'Share article', copyLinkLabel = 'Copy link', copiedLabel = 'Copied', aboutAuthorLabel = 'About the Author', }) {
7
21
  const contentRef = useRef(null);
8
22
  const [tocItems, setTocItems] = useState([]);
9
23
  const [activeId, setActiveId] = useState('');
10
24
  const [activeH2Id, setActiveH2Id] = useState('');
25
+ const [copied, setCopied] = useState(false);
11
26
  // Extract headings from rendered content
12
27
  useEffect(() => {
13
28
  const el = contentRef.current;
@@ -17,21 +32,17 @@ export function BlogArticleClient({ id, children, author, date, readingTime, })
17
32
  const headings = el.querySelectorAll('h2, h3');
18
33
  const items = [];
19
34
  headings.forEach((heading) => {
20
- const title = heading.textContent?.trim() || '';
21
- if (!title || heading.hasAttribute('data-toc-exclude'))
35
+ const text = heading.textContent?.trim() || '';
36
+ if (!text || heading.hasAttribute('data-toc-exclude'))
22
37
  return;
23
38
  if (!heading.id) {
24
39
  heading.id =
25
- title
40
+ text
26
41
  .toLowerCase()
27
42
  .replace(/[^a-z0-9]+/g, '-')
28
43
  .replace(/(^-|-$)/g, '') || '';
29
44
  }
30
- items.push({
31
- id: heading.id,
32
- title,
33
- level: heading.tagName === 'H2' ? 2 : 3,
34
- });
45
+ items.push({ id: heading.id, title: text, level: heading.tagName === 'H2' ? 2 : 3 });
35
46
  });
36
47
  setTocItems(items);
37
48
  });
@@ -45,11 +56,11 @@ export function BlogArticleClient({ id, children, author, date, readingTime, })
45
56
  const observer = new IntersectionObserver((entries) => {
46
57
  for (const entry of entries) {
47
58
  if (entry.isIntersecting) {
48
- const id = entry.target.id;
49
- setActiveId(id);
50
- const tocItem = tocItems.find((t) => t.id === id);
59
+ const entryId = entry.target.id;
60
+ setActiveId(entryId);
61
+ const tocItem = tocItems.find((t) => t.id === entryId);
51
62
  if (tocItem?.level === 2) {
52
- setActiveH2Id(id);
63
+ setActiveH2Id(entryId);
53
64
  }
54
65
  else if (tocItem?.level === 3) {
55
66
  const idx = tocItems.indexOf(tocItem);
@@ -70,38 +81,57 @@ export function BlogArticleClient({ id, children, author, date, readingTime, })
70
81
  });
71
82
  return () => observer.disconnect();
72
83
  }, [tocItems]);
73
- // Smooth scroll to heading
74
- const scrollToHeading = useCallback((id) => {
75
- const el = document.getElementById(id);
84
+ const scrollToHeading = useCallback((headingId) => {
85
+ const el = document.getElementById(headingId);
76
86
  if (el) {
77
87
  const top = el.getBoundingClientRect().top + window.scrollY - 100;
78
88
  window.scrollTo({ top, behavior: 'smooth' });
79
89
  }
80
90
  }, []);
91
+ // Social sharing
92
+ const shareUrl = typeof window !== 'undefined' ? window.location.href : '';
93
+ const shareTitle = title || '';
94
+ const openShare = (url) => window.open(url, '_blank', 'noopener,noreferrer,width=600,height=600');
95
+ const shareLinkedIn = () => openShare(`https://www.linkedin.com/sharing/share-offsite/?url=${encodeURIComponent(shareUrl)}`);
96
+ const shareFacebook = () => openShare(`https://www.facebook.com/sharer/sharer.php?u=${encodeURIComponent(shareUrl)}`);
97
+ const shareX = () => openShare(`https://twitter.com/intent/tweet?url=${encodeURIComponent(shareUrl)}&text=${encodeURIComponent(shareTitle)}`);
98
+ const shareReddit = () => openShare(`https://reddit.com/submit?url=${encodeURIComponent(shareUrl)}&title=${encodeURIComponent(shareTitle)}`);
99
+ const copyLink = async () => {
100
+ try {
101
+ await navigator.clipboard.writeText(shareUrl);
102
+ setCopied(true);
103
+ setTimeout(() => setCopied(false), 2000);
104
+ }
105
+ catch { /* noop */ }
106
+ };
81
107
  const formattedDate = date
82
- ? new Date(date + 'T00:00:00').toLocaleDateString(undefined, {
83
- year: 'numeric',
84
- month: 'long',
85
- day: 'numeric',
86
- })
108
+ ? new Date(date + 'T00:00:00').toLocaleDateString(undefined, { year: 'numeric', month: 'long', day: 'numeric' })
87
109
  : '';
88
- return (_jsx("article", { id: id, className: "py-12 md:py-20", children: _jsx("div", { className: "mx-auto w-full max-w-[76rem] px-[clamp(1rem,3vw,3rem)]", children: _jsxs("div", { className: "flex gap-10 lg:gap-16", children: [_jsx("div", { ref: contentRef, className: "blog-content min-w-0 flex-1 max-w-3xl", children: children }), _jsx("aside", { className: "hidden lg:block w-64 shrink-0", children: _jsxs("div", { className: "sticky top-24 flex flex-col gap-6", children: [tocItems.length > 0 && (_jsx("nav", { children: _jsx("ul", { className: "flex flex-col", children: tocItems.map((item) => {
89
- const isActive = activeId === item.id;
90
- if (item.level === 3) {
91
- const idx = tocItems.indexOf(item);
92
- let parentH2Id = '';
93
- for (let i = idx - 1; i >= 0; i--) {
94
- if (tocItems[i].level === 2) {
95
- parentH2Id = tocItems[i].id;
96
- break;
97
- }
98
- }
99
- if (parentH2Id !== activeH2Id)
100
- return null;
101
- }
102
- return (_jsx("li", { className: item.level === 3 ? 'pl-3' : '', children: _jsxs("button", { onClick: () => scrollToHeading(item.id), className: cn('my-0.5 flex items-center gap-2 w-full cursor-pointer text-left', isActive
103
- ? 'text-foreground font-medium'
104
- : 'text-muted-foreground hover:text-foreground'), children: [_jsx("span", { className: cn('w-3 h-px shrink-0 transition-colors', isActive ? 'bg-primary' : 'bg-border') }), _jsx("span", { className: "text-sm leading-snug line-clamp-1", children: item.title })] }) }, item.id));
105
- }) }) })), author && (_jsxs(_Fragment, { children: [tocItems.length > 0 && _jsx("hr", { className: "border-border" }), _jsxs("div", { className: "flex flex-col gap-3", children: [author.image && (_jsx(ThemeImage, { src: author.image, alt: author.name, className: "w-12 h-12 rounded-full object-cover" })), _jsxs("div", { children: [_jsx("p", { className: "text-sm font-medium text-foreground", children: author.name }), author.role && (_jsx("p", { className: "text-xs text-muted-foreground", children: author.role }))] })] })] })), (formattedDate || readingTime) && (_jsxs(_Fragment, { children: [(tocItems.length > 0 || author) && !author && (_jsx("hr", { className: "border-border" })), _jsxs("div", { className: "flex flex-col gap-1 text-xs text-muted-foreground", children: [formattedDate && _jsx("span", { children: formattedDate }), readingTime ? _jsxs("span", { children: [readingTime, " min read"] }) : null] })] }))] }) })] }) }) }));
110
+ const shareProps = {
111
+ onCopyLink: copyLink,
112
+ onShareLinkedIn: shareLinkedIn,
113
+ onShareFacebook: shareFacebook,
114
+ onShareX: shareX,
115
+ onShareReddit: shareReddit,
116
+ copyLabel: copyLinkLabel,
117
+ copied,
118
+ copiedLabel,
119
+ };
120
+ return (_jsxs("article", { id: id, className: "pt-16", children: [_jsxs("div", { className: "mx-auto w-full max-w-[76rem] px-[clamp(1rem,3vw,3rem)] flex flex-col gap-8", children: [_jsx("nav", { "aria-label": "Breadcrumb", children: _jsxs("ul", { className: "flex flex-wrap items-center gap-2", children: [_jsx("li", { children: _jsx("a", { href: "/", className: "text-sm text-muted-foreground hover:text-foreground flex items-center", "aria-label": "Home", children: _jsx(Home, { className: "w-5 h-5" }) }) }), _jsx("li", { className: "flex items-center", children: _jsx(ChevronRight, { className: "w-4 h-4 text-muted-foreground/60" }) }), _jsx("li", { children: _jsx("a", { href: blogHref, className: "text-sm font-semibold text-muted-foreground hover:text-foreground", children: blogLabel }) }), title && (_jsxs(_Fragment, { children: [_jsx("li", { className: "flex items-center", children: _jsx(ChevronRight, { className: "w-4 h-4 text-foreground" }) }), _jsx("li", { children: _jsx("span", { className: "text-sm font-semibold text-muted-foreground", children: title }) })] }))] }) }), title && (_jsx("h1", { className: "text-[clamp(2rem,1.7rem+1.5vw,3rem)] leading-[1.3] font-semibold tracking-[-0.02em] text-foreground", children: title })), (formattedDate || readingTime) && (_jsxs("div", { className: "flex items-center gap-3", children: [formattedDate && _jsx("span", { className: "text-base text-foreground", children: formattedDate }), formattedDate && readingTime && readingTime > 0 && _jsx("span", { className: "w-px h-3.5 bg-border" }), readingTime && readingTime > 0 && _jsxs("span", { className: "text-base text-foreground", children: [readingTime, " min read"] })] }))] }), _jsxs("div", { className: "mx-auto w-full max-w-[76rem] px-[clamp(1rem,3vw,3rem)] border-b border-border", children: [_jsx("div", { className: "h-[clamp(2.5rem,2rem+2.5vw,4rem)]" }), _jsxs("div", { className: "flex flex-col lg:flex-row gap-[clamp(2rem,1.7rem+1.5vw,3rem)]", children: [_jsxs("div", { className: "min-w-0 flex-1 max-w-[53.25rem]", ref: contentRef, children: [heroImage && (_jsx(ThemeImage, { src: heroImage, alt: title || 'Blog article', className: "w-full h-auto object-cover mb-10 rounded-2xl" })), _jsx("div", { className: "blog-content", children: children }), author && (_jsxs("section", { className: "bg-muted p-8 rounded-2xl flex flex-col gap-5 mt-12", children: [_jsx("p", { className: "text-lg font-semibold text-foreground", children: aboutAuthorLabel }), _jsxs("div", { className: "flex items-center gap-4", children: [author.image && (_jsx(ThemeImage, { src: author.image, alt: author.name, className: "w-[clamp(2.75rem,2.1rem+3vw,4.5rem)] h-[clamp(2.75rem,2.1rem+3vw,4.5rem)] rounded-full object-cover" })), _jsxs("div", { children: [_jsx("p", { className: "font-medium text-foreground", children: author.name }), author.role && _jsx("p", { className: "text-sm text-muted-foreground", children: author.role })] })] }), author.bio && _jsx("p", { className: "text-base text-muted-foreground leading-normal", children: author.bio })] }))] }), _jsx("aside", { className: "hidden lg:block w-full max-w-[16rem] xl:max-w-[19.75rem] shrink-0", children: _jsxs("div", { className: "sticky top-24 flex flex-col gap-5", children: [tocItems.length > 0 && (_jsxs("div", { children: [_jsx("p", { className: "font-medium text-foreground mb-4", children: tocLabel }), _jsx("ul", { className: "flex flex-col gap-2", children: tocItems.map((item) => {
121
+ const isActive = activeId === item.id;
122
+ if (item.level === 3) {
123
+ const idx = tocItems.indexOf(item);
124
+ let parentH2Id = '';
125
+ for (let i = idx - 1; i >= 0; i--) {
126
+ if (tocItems[i].level === 2) {
127
+ parentH2Id = tocItems[i].id;
128
+ break;
129
+ }
130
+ }
131
+ if (parentH2Id !== activeH2Id)
132
+ return null;
133
+ }
134
+ return (_jsx("li", { className: item.level === 3 ? 'pl-3' : '', children: _jsxs("button", { onClick: () => scrollToHeading(item.id), className: cn('flex items-center gap-2 w-full cursor-pointer text-left', isActive ? 'text-foreground font-medium' : 'text-muted-foreground hover:text-foreground'), children: [_jsx("span", { className: cn('w-3 h-px shrink-0 transition-colors', isActive ? 'bg-foreground' : 'bg-muted-foreground/40') }), _jsx("span", { className: "text-sm leading-snug line-clamp-1", children: item.title })] }) }, item.id));
135
+ }) })] })), tocItems.length > 0 && _jsx("hr", { className: "border-border" }), author && (_jsxs("div", { children: [author.image && (_jsx(ThemeImage, { src: author.image, alt: author.name, className: "w-14 h-14 rounded-full object-cover mb-4" })), _jsx("p", { className: "text-base font-medium text-foreground", children: author.name }), author.role && _jsx("p", { className: "text-sm text-muted-foreground", children: author.role })] })), author && _jsx("hr", { className: "border-border" }), _jsxs("div", { className: "flex flex-col gap-4", children: [_jsx("p", { className: "text-base font-medium text-foreground", children: shareLabel }), _jsx(ShareButtons, { ...shareProps })] })] }) })] }), _jsx("div", { className: "h-[clamp(2.5rem,2rem+2.5vw,4rem)]" })] }), _jsx("div", { className: "lg:hidden mx-auto w-full max-w-[76rem] px-[clamp(1rem,3vw,3rem)] mt-8 mb-8", children: _jsxs("div", { className: "flex flex-col gap-4", children: [_jsx("p", { className: "text-base font-medium text-foreground", children: shareLabel }), _jsx(ShareButtons, { ...shareProps })] }) })] }));
106
136
  }
107
137
  //# sourceMappingURL=BlogArticleClient.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"BlogArticleClient.js","sourceRoot":"","sources":["../../src/blog/BlogArticleClient.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"BlogArticleClient.js","sourceRoot":"","sources":["../../src/blog/BlogArticleClient.tsx"],"names":[],"mappings":"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"}
@@ -1,5 +1,10 @@
1
1
  import React from 'react';
2
2
  import { type ImageSource } from '../ui/theme-image';
3
+ interface BlogArticleAuthor {
4
+ name: string;
5
+ role: string;
6
+ image: string;
7
+ }
3
8
  interface BlogArticle {
4
9
  slug: string;
5
10
  title: string;
@@ -9,6 +14,8 @@ interface BlogArticle {
9
14
  image: ImageSource;
10
15
  readingTime: number;
11
16
  href: string;
17
+ featured?: boolean;
18
+ author?: BlogArticleAuthor;
12
19
  }
13
20
  interface BlogIndexProps {
14
21
  id?: string;
@@ -1 +1 @@
1
- {"version":3,"file":"BlogIndex.d.ts","sourceRoot":"","sources":["../../src/blog/BlogIndex.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAc,KAAK,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEjE,UAAU,WAAW;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,WAAW,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,UAAU,cAAc;IACtB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,WAAW,EAAE,CAAC;IACzB,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CAC5B;AAcD,wBAAgB,SAAS,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,cAAc,2CAkDvF"}
1
+ {"version":3,"file":"BlogIndex.d.ts","sourceRoot":"","sources":["../../src/blog/BlogIndex.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAc,KAAK,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEjE,UAAU,iBAAiB;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;CACf;AAED,UAAU,WAAW;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,WAAW,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,MAAM,CAAC,EAAE,iBAAiB,CAAC;CAC5B;AAED,UAAU,cAAc;IACtB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,WAAW,EAAE,CAAC;IACzB,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CAC5B;AA+DD,wBAAgB,SAAS,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,cAAc,2CAmCvF"}
@@ -1,4 +1,4 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
2
  import { Section } from '../ui/section';
3
3
  import { ThemeImage } from '../ui/theme-image';
4
4
  function formatDate(dateStr) {
@@ -13,7 +13,12 @@ function formatDate(dateStr) {
13
13
  return dateStr;
14
14
  }
15
15
  }
16
+ function ArticleCard({ article }) {
17
+ return (_jsxs("a", { href: article.href, className: "group block rounded-3xl p-2 -m-2 hover:bg-muted/50 hover:scale-[1.015] transition-all duration-300 ease-out focus-visible:outline-hidden focus-visible:ring-1 focus-visible:ring-ring", children: [_jsx("div", { className: "aspect-[3/2] overflow-hidden rounded-2xl", children: _jsx(ThemeImage, { src: article.image, alt: article.title, className: "w-full h-full object-cover transition-transform duration-300 group-hover:scale-105" }) }), _jsxs("div", { className: "pt-4", children: [_jsxs("div", { className: "flex items-center justify-between text-sm text-muted-foreground mb-2", children: [article.category && (_jsx("span", { className: "font-medium text-primary", children: article.category })), article.date && _jsx("time", { dateTime: article.date, children: formatDate(article.date) })] }), _jsx("h3", { className: "text-lg font-semibold leading-snug text-foreground mb-2 group-hover:text-primary transition-colors", children: article.title }), _jsx("p", { className: "text-base text-muted-foreground line-clamp-2 mb-4", children: article.excerpt }), article.author && (_jsxs("div", { className: "flex items-center gap-3", children: [article.author.image && (_jsx("img", { src: article.author.image, alt: article.author.name, className: "w-10 h-10 rounded-full object-cover" })), _jsxs("div", { children: [_jsx("div", { className: "text-sm font-medium text-foreground", children: article.author.name }), article.author.role && (_jsx("div", { className: "text-xs text-muted-foreground", children: article.author.role }))] })] }))] })] }, article.slug));
18
+ }
16
19
  export function BlogIndex({ id, title, description, articles, children }) {
17
- return (_jsx(Section, { id: id, children: _jsxs("div", { className: "container-main", children: [(title || description) && (_jsxs("div", { className: "text-center mb-12", children: [title && _jsx("h2", { className: "text-3xl md:text-4xl font-bold text-foreground mb-4", children: title }), description && _jsx("p", { className: "text-lg text-muted-foreground", children: description })] })), articles && articles.length > 0 && (_jsx("div", { className: "grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6", children: articles.map((article) => (_jsxs("a", { href: article.href, className: "group block rounded-xl glass-1 hover:glass-2 transition-all overflow-hidden focus-visible:outline-hidden focus-visible:ring-1 focus-visible:ring-ring", children: [_jsx("div", { className: "aspect-[16/9] overflow-hidden", children: _jsx(ThemeImage, { src: article.image, alt: article.title, className: "w-full h-full object-cover transition-transform duration-300 group-hover:scale-105" }) }), _jsxs("div", { className: "p-5", children: [article.category && (_jsx("span", { className: "inline-block text-xs font-medium text-primary mb-2", children: article.category })), _jsx("h3", { className: "font-semibold tracking-tight text-foreground mb-2 group-hover:text-primary transition-colors", children: article.title }), _jsx("p", { className: "text-sm text-muted-foreground mb-4 line-clamp-2", children: article.excerpt }), _jsxs("div", { className: "flex items-center gap-3 text-xs text-muted-foreground", children: [article.date && _jsx("time", { dateTime: article.date, children: formatDate(article.date) }), article.readingTime > 0 && _jsxs("span", { children: [article.readingTime, " min read"] })] })] })] }, article.slug))) })), children] }) }));
20
+ const featured = articles?.filter((a) => a.featured) ?? [];
21
+ const all = articles ?? [];
22
+ return (_jsx(Section, { id: id, children: _jsxs("div", { className: "container-main", children: [(title || description) && (_jsxs("div", { className: "text-center mb-12", children: [title && _jsx("h2", { className: "text-3xl md:text-4xl font-bold text-foreground mb-4", children: title }), description && _jsx("p", { className: "text-lg text-muted-foreground", children: description })] })), featured.length > 0 && (_jsxs(_Fragment, { children: [_jsx("div", { className: "grid grid-cols-1 md:grid-cols-2 gap-8 mb-12", children: featured.map((article) => (_jsx(ArticleCard, { article: article }, article.slug))) }), _jsx("hr", { className: "border-border mb-12" }), _jsx("h3", { className: "text-xl font-semibold text-foreground mb-8", children: "All Articles" })] })), all.length > 0 && (_jsx("div", { className: "grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-8", children: all.map((article) => (_jsx(ArticleCard, { article: article }, article.slug))) })), children] }) }));
18
23
  }
19
24
  //# sourceMappingURL=BlogIndex.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"BlogIndex.js","sourceRoot":"","sources":["../../src/blog/BlogIndex.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,UAAU,EAAoB,MAAM,mBAAmB,CAAC;AAqBjE,SAAS,UAAU,CAAC,OAAe;IACjC,IAAI,CAAC;QACH,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC,kBAAkB,CAAC,SAAS,EAAE;YACrD,IAAI,EAAE,SAAS;YACf,KAAK,EAAE,OAAO;YACd,GAAG,EAAE,SAAS;SACf,CAAC,CAAC;IACL,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,OAAO,CAAC;IACjB,CAAC;AACH,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,QAAQ,EAAkB;IACtF,OAAO,CACL,KAAC,OAAO,IAAC,EAAE,EAAE,EAAE,YACb,eAAK,SAAS,EAAC,gBAAgB,aAC5B,CAAC,KAAK,IAAI,WAAW,CAAC,IAAI,CACzB,eAAK,SAAS,EAAC,mBAAmB,aAC/B,KAAK,IAAI,aAAI,SAAS,EAAC,qDAAqD,YAAE,KAAK,GAAM,EACzF,WAAW,IAAI,YAAG,SAAS,EAAC,+BAA+B,YAAE,WAAW,GAAK,IAC1E,CACP,EACA,QAAQ,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,IAAI,CAClC,cAAK,SAAS,EAAC,sDAAsD,YAClE,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CACzB,aAEE,IAAI,EAAE,OAAO,CAAC,IAAI,EAClB,SAAS,EAAC,uJAAuJ,aAEjK,cAAK,SAAS,EAAC,+BAA+B,YAC5C,KAAC,UAAU,IACT,GAAG,EAAE,OAAO,CAAC,KAAK,EAClB,GAAG,EAAE,OAAO,CAAC,KAAK,EAClB,SAAS,EAAC,oFAAoF,GAC9F,GACE,EACN,eAAK,SAAS,EAAC,KAAK,aACjB,OAAO,CAAC,QAAQ,IAAI,CACnB,eAAM,SAAS,EAAC,oDAAoD,YACjE,OAAO,CAAC,QAAQ,GACZ,CACR,EACD,aAAI,SAAS,EAAC,8FAA8F,YACzG,OAAO,CAAC,KAAK,GACX,EACL,YAAG,SAAS,EAAC,iDAAiD,YAC3D,OAAO,CAAC,OAAO,GACd,EACJ,eAAK,SAAS,EAAC,uDAAuD,aACnE,OAAO,CAAC,IAAI,IAAI,eAAM,QAAQ,EAAE,OAAO,CAAC,IAAI,YAAG,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,GAAQ,EAC/E,OAAO,CAAC,WAAW,GAAG,CAAC,IAAI,2BAAO,OAAO,CAAC,WAAW,iBAAiB,IACnE,IACF,KA3BD,OAAO,CAAC,IAAI,CA4Bf,CACL,CAAC,GACE,CACP,EACA,QAAQ,IACL,GACE,CACX,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"BlogIndex.js","sourceRoot":"","sources":["../../src/blog/BlogIndex.tsx"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"PricingSectionClient.d.ts","sourceRoot":"","sources":["../../src/marketing/PricingSectionClient.tsx"],"names":[],"mappings":"AAQA,UAAU,gBAAgB;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,GAAG,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IACrC,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,UAAU,kBAAkB;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,CAAC,MAAM,GAAG,OAAO,CAAC,EAAE,CAAC;CAC9B;AAED,UAAU,uBAAuB;IAC/B,KAAK,EAAE,MAAM,CAAC;CACf;AAED,UAAU,yBAAyB;IACjC,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,KAAK,EAAE,gBAAgB,EAAE,CAAC;IAC1B,IAAI,EAAE;QAAE,IAAI,EAAE,UAAU,GAAG,KAAK,CAAC;QAAC,KAAK,EAAE,kBAAkB,GAAG,uBAAuB,CAAA;KAAE,EAAE,CAAC;CAC3F;AAED,wBAAgB,oBAAoB,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,YAAwB,EAAE,WAAsB,EAAE,gBAAiC,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,yBAAyB,2CAuF3L"}
1
+ {"version":3,"file":"PricingSectionClient.d.ts","sourceRoot":"","sources":["../../src/marketing/PricingSectionClient.tsx"],"names":[],"mappings":"AASA,UAAU,gBAAgB;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,GAAG,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IACrC,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,UAAU,kBAAkB;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,CAAC,MAAM,GAAG,OAAO,CAAC,EAAE,CAAC;CAC9B;AAED,UAAU,uBAAuB;IAC/B,KAAK,EAAE,MAAM,CAAC;CACf;AAED,UAAU,yBAAyB;IACjC,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,KAAK,EAAE,gBAAgB,EAAE,CAAC;IAC1B,IAAI,EAAE;QAAE,IAAI,EAAE,UAAU,GAAG,KAAK,CAAC;QAAC,KAAK,EAAE,kBAAkB,GAAG,uBAAuB,CAAA;KAAE,EAAE,CAAC;CAC3F;AAED,wBAAgB,oBAAoB,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,YAAwB,EAAE,WAAsB,EAAE,gBAAiC,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,yBAAyB,2CAkG3L"}
@@ -5,9 +5,10 @@ import { Check } from 'lucide-react';
5
5
  import { cn } from '../lib/utils';
6
6
  import { Section } from '../ui/section';
7
7
  import { Button } from '../ui/button';
8
+ import * as TabsPrimitive from '@radix-ui/react-tabs';
8
9
  export function PricingSectionClient({ id, title, description, monthlyLabel = 'Monthly', yearlyLabel = 'Yearly', mostPopularLabel = 'Most Popular', plans, rows }) {
9
10
  const [isYearly, setIsYearly] = useState(false);
10
- return (_jsx(Section, { id: id, children: _jsxs("div", { className: "container-main", children: [(title || description) && (_jsxs("div", { className: "text-center mb-12", children: [title && _jsx("h2", { className: "text-3xl md:text-4xl font-bold text-foreground mb-4", children: title }), description && _jsx("p", { className: "text-lg text-muted-foreground max-w-2xl mx-auto", children: description })] })), plans.some((p) => p.yearlyPrice) && (_jsxs("div", { className: "flex items-center justify-center gap-3 mb-12", children: [_jsx("span", { className: cn('text-sm font-medium', !isYearly ? 'text-foreground' : 'text-muted-foreground'), children: monthlyLabel }), _jsx("button", { onClick: () => setIsYearly(!isYearly), className: cn('relative w-12 h-6 rounded-full transition-colors', isYearly ? 'bg-primary' : 'bg-muted'), children: _jsx("span", { className: cn('absolute top-0.5 w-5 h-5 bg-background rounded-full shadow transition-transform', isYearly ? 'translate-x-6' : 'translate-x-0.5') }) }), _jsx("span", { className: cn('text-sm font-medium', isYearly ? 'text-foreground' : 'text-muted-foreground'), children: yearlyLabel })] })), _jsx("div", { className: cn('grid grid-cols-1 gap-6 mb-16', plans.length === 2 && 'md:grid-cols-2', plans.length >= 3 && 'md:grid-cols-3'), children: plans.map((plan) => (_jsxs("div", { className: cn('relative rounded-2xl p-8', plan.popular
11
+ return (_jsx(Section, { id: id, children: _jsxs("div", { className: "container-main", children: [(title || description) && (_jsxs("div", { className: "text-center mb-12", children: [title && _jsx("h2", { className: "text-3xl md:text-4xl font-bold text-foreground mb-4", children: title }), description && _jsx("p", { className: "text-lg text-muted-foreground max-w-2xl mx-auto", children: description })] })), plans.some((p) => p.yearlyPrice) && (_jsx("div", { className: "flex justify-center mb-12", children: _jsx(TabsPrimitive.Root, { defaultValue: "monthly", onValueChange: (v) => setIsYearly(v === 'yearly'), children: _jsxs(TabsPrimitive.List, { className: "inline-flex rounded-full glass-1 p-1 gap-1", children: [_jsx(TabsPrimitive.Trigger, { value: "monthly", className: "rounded-full px-5 py-2 text-sm font-medium text-muted-foreground transition-all hover:text-foreground focus-visible:outline-hidden focus-visible:ring-2 focus-visible:ring-ring data-[state=active]:bg-primary data-[state=active]:text-primary-foreground", children: monthlyLabel }), _jsx(TabsPrimitive.Trigger, { value: "yearly", className: "rounded-full px-5 py-2 text-sm font-medium text-muted-foreground transition-all hover:text-foreground focus-visible:outline-hidden focus-visible:ring-2 focus-visible:ring-ring data-[state=active]:bg-primary data-[state=active]:text-primary-foreground", children: yearlyLabel })] }) }) })), _jsx("div", { className: cn('grid grid-cols-1 gap-6 mb-16', plans.length === 2 && 'md:grid-cols-2', plans.length >= 3 && 'md:grid-cols-3'), children: plans.map((plan) => (_jsxs("div", { className: cn('relative rounded-2xl p-8', plan.popular
11
12
  ? 'glass-4 ring-2 ring-primary shadow-xl'
12
13
  : 'glass-1'), children: [plan.popular && (_jsx("div", { className: "absolute -top-3 left-1/2 -translate-x-1/2 px-3 py-1 bg-primary text-primary-foreground text-xs font-medium rounded-full", children: mostPopularLabel })), _jsx("h3", { className: "text-xl font-bold mb-2 text-foreground", children: plan.name }), plan.description && _jsx("p", { className: "text-sm mb-4 text-muted-foreground", children: plan.description }), _jsx("div", { className: "mb-6", children: _jsx("span", { className: "text-4xl font-bold text-foreground", children: isYearly && plan.yearlyPrice ? plan.yearlyPrice : plan.price }) }), _jsx(Button, { asChild: true, className: "w-full", variant: plan.popular ? 'default' : 'glow', children: _jsx("a", { href: plan.cta.href, children: plan.cta.label }) }), _jsx("ul", { className: "mt-6 space-y-3", children: plan.features.map((feature) => (_jsxs("li", { className: "flex items-start gap-2 text-sm text-muted-foreground", children: [_jsx(Check, { className: "w-4 h-4 mt-0.5 shrink-0 text-primary" }), feature] }, feature))) })] }, plan.name))) }), rows.length > 0 && (_jsx("div", { className: "overflow-x-auto", children: _jsxs("table", { className: "w-full text-sm", children: [_jsx("thead", { children: _jsxs("tr", { className: "border-b border-border", children: [_jsx("th", { className: "text-left py-4 pr-4 font-medium text-foreground", children: "Feature" }), plans.map((plan) => _jsx("th", { className: "text-center py-4 px-4 font-medium text-foreground", children: plan.name }, plan.name))] }) }), _jsx("tbody", { children: rows.map((row, i) => {
13
14
  if (row.type === 'category') {
@@ -1 +1 @@
1
- {"version":3,"file":"PricingSectionClient.js","sourceRoot":"","sources":["../../src/marketing/PricingSectionClient.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"PricingSectionClient.js","sourceRoot":"","sources":["../../src/marketing/PricingSectionClient.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import * as TabsPrimitive from "@radix-ui/react-tabs";
2
+ import * as React from "react";
3
+ declare const Tabs: React.ForwardRefExoticComponent<TabsPrimitive.TabsProps & React.RefAttributes<HTMLDivElement>>;
4
+ declare function TabsList({ className, ...props }: React.ComponentProps<typeof TabsPrimitive.List>): import("react/jsx-runtime").JSX.Element;
5
+ declare function TabsTrigger({ className, ...props }: React.ComponentProps<typeof TabsPrimitive.Trigger>): import("react/jsx-runtime").JSX.Element;
6
+ declare function TabsContent({ className, ...props }: React.ComponentProps<typeof TabsPrimitive.Content>): import("react/jsx-runtime").JSX.Element;
7
+ export { Tabs, TabsContent, TabsList, TabsTrigger };
8
+ //# sourceMappingURL=tabs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tabs.d.ts","sourceRoot":"","sources":["../../src/ui/tabs.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,aAAa,MAAM,sBAAsB,CAAC;AACtD,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAI/B,QAAA,MAAM,IAAI,gGAAqB,CAAC;AAEhC,iBAAS,QAAQ,CAAC,EAChB,SAAS,EACT,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,aAAa,CAAC,IAAI,CAAC,2CAQjD;AAED,iBAAS,WAAW,CAAC,EACnB,SAAS,EACT,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,aAAa,CAAC,OAAO,CAAC,2CAWpD;AAED,iBAAS,WAAW,CAAC,EACnB,SAAS,EACT,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,aAAa,CAAC,OAAO,CAAC,2CAWpD;AAED,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,WAAW,EAAE,CAAC"}
@@ -0,0 +1,16 @@
1
+ "use client";
2
+ import { jsx as _jsx } from "react/jsx-runtime";
3
+ import * as TabsPrimitive from "@radix-ui/react-tabs";
4
+ import { cn } from "../lib/utils";
5
+ const Tabs = TabsPrimitive.Root;
6
+ function TabsList({ className, ...props }) {
7
+ return (_jsx(TabsPrimitive.List, { "data-slot": "tabs-list", className: cn("text-muted-foreground flex items-center", className), ...props }));
8
+ }
9
+ function TabsTrigger({ className, ...props }) {
10
+ return (_jsx(TabsPrimitive.Trigger, { "data-slot": "tabs-trigger", className: cn("data-[state=active]:glass-4 ring-offset-background hover:bg-accent/50 hover:text-accent-foreground focus-visible:ring-ring data-[state=active]:text-foreground flex flex-col gap-3 rounded-md border border-transparent px-5 pt-4 pb-6 text-left text-sm font-medium transition-all focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:outline-hidden disabled:pointer-events-none disabled:opacity-50 data-[state=active]:shadow-xl dark:border-b-0", className), ...props }));
11
+ }
12
+ function TabsContent({ className, ...props }) {
13
+ return (_jsx(TabsPrimitive.Content, { "data-slot": "tabs-content", className: cn("border-border dark:border-border/20 bg-input/30 ring-offset-background focus-visible:ring-ring dark:bg-card relative overflow-hidden rounded-lg border focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:outline-hidden", className), ...props }));
14
+ }
15
+ export { Tabs, TabsContent, TabsList, TabsTrigger };
16
+ //# sourceMappingURL=tabs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tabs.js","sourceRoot":"","sources":["../../src/ui/tabs.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,KAAK,aAAa,MAAM,sBAAsB,CAAC;AAGtD,OAAO,EAAE,EAAE,EAAE,MAAM,cAAc,CAAC;AAElC,MAAM,IAAI,GAAG,aAAa,CAAC,IAAI,CAAC;AAEhC,SAAS,QAAQ,CAAC,EAChB,SAAS,EACT,GAAG,KAAK,EACwC;IAChD,OAAO,CACL,KAAC,aAAa,CAAC,IAAI,iBACP,WAAW,EACrB,SAAS,EAAE,EAAE,CAAC,yCAAyC,EAAE,SAAS,CAAC,KAC/D,KAAK,GACT,CACH,CAAC;AACJ,CAAC;AAED,SAAS,WAAW,CAAC,EACnB,SAAS,EACT,GAAG,KAAK,EAC2C;IACnD,OAAO,CACL,KAAC,aAAa,CAAC,OAAO,iBACV,cAAc,EACxB,SAAS,EAAE,EAAE,CACX,kcAAkc,EAClc,SAAS,CACV,KACG,KAAK,GACT,CACH,CAAC;AACJ,CAAC;AAED,SAAS,WAAW,CAAC,EACnB,SAAS,EACT,GAAG,KAAK,EAC2C;IACnD,OAAO,CACL,KAAC,aAAa,CAAC,OAAO,iBACV,cAAc,EACxB,SAAS,EAAE,EAAE,CACX,sOAAsO,EACtO,SAAS,CACV,KACG,KAAK,GACT,CACH,CAAC;AACJ,CAAC;AAED,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,WAAW,EAAE,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@shipsite.dev/components",
3
- "version": "0.2.29",
3
+ "version": "0.2.31",
4
4
  "repository": {
5
5
  "type": "git",
6
6
  "url": "https://github.com/shipsite/shipsite",
@@ -37,6 +37,7 @@
37
37
  "@radix-ui/react-accordion": "^1.2.3",
38
38
  "@radix-ui/react-dialog": "^1.1.6",
39
39
  "@radix-ui/react-slot": "^1.2.0",
40
+ "@radix-ui/react-tabs": "^1.1.13",
40
41
  "class-variance-authority": "^0.7.1",
41
42
  "clsx": "^2.1.1",
42
43
  "lucide-react": "^0.475.0",
@@ -46,10 +47,10 @@
46
47
  "tailwind-merge": "^3.0.2"
47
48
  },
48
49
  "devDependencies": {
49
- "typescript": "^5.8.3",
50
- "@types/react": "^19",
51
50
  "@types/node": "^20",
52
- "tailwindcss": "^4"
51
+ "@types/react": "^19",
52
+ "tailwindcss": "^4",
53
+ "typescript": "^5.8.3"
53
54
  },
54
55
  "peerDependencies": {
55
56
  "next": ">=15"
@@ -5,20 +5,59 @@ interface BlogArticleAuthor {
5
5
  name: string;
6
6
  role: string;
7
7
  image: string;
8
+ bio?: string;
8
9
  }
9
10
 
10
11
  interface BlogArticleProps {
11
12
  id?: string;
12
13
  children: React.ReactNode;
13
14
  contentFolder?: string;
15
+ title?: string;
16
+ heroImage?: string;
17
+ blogHref?: string;
14
18
  date?: string;
15
19
  readingTime?: number;
16
20
  author?: BlogArticleAuthor;
21
+ blogLabel?: string;
22
+ tocLabel?: string;
23
+ shareLabel?: string;
24
+ copyLinkLabel?: string;
25
+ copiedLabel?: string;
26
+ aboutAuthorLabel?: string;
17
27
  }
18
28
 
19
- export function BlogArticle({ id, children, author, date, readingTime }: BlogArticleProps) {
29
+ export function BlogArticle({
30
+ id,
31
+ children,
32
+ title,
33
+ heroImage,
34
+ blogHref,
35
+ author,
36
+ date,
37
+ readingTime,
38
+ blogLabel,
39
+ tocLabel,
40
+ shareLabel,
41
+ copyLinkLabel,
42
+ copiedLabel,
43
+ aboutAuthorLabel,
44
+ }: BlogArticleProps) {
20
45
  return (
21
- <BlogArticleClient id={id} author={author} date={date} readingTime={readingTime}>
46
+ <BlogArticleClient
47
+ id={id}
48
+ title={title}
49
+ heroImage={heroImage}
50
+ blogHref={blogHref}
51
+ author={author}
52
+ date={date}
53
+ readingTime={readingTime}
54
+ blogLabel={blogLabel}
55
+ tocLabel={tocLabel}
56
+ shareLabel={shareLabel}
57
+ copyLinkLabel={copyLinkLabel}
58
+ copiedLabel={copiedLabel}
59
+ aboutAuthorLabel={aboutAuthorLabel}
60
+ >
22
61
  {children}
23
62
  </BlogArticleClient>
24
63
  );