@shipsite.dev/components 0.2.18 → 0.2.20
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/layout/Footer.d.ts.map +1 -1
- package/dist/layout/Footer.js +4 -1
- package/dist/layout/Footer.js.map +1 -1
- package/dist/marketing/Hero.js +1 -1
- package/dist/marketing/Hero.js.map +1 -1
- package/dist/ui/locale-switcher.d.ts +2 -0
- package/dist/ui/locale-switcher.d.ts.map +1 -0
- package/dist/ui/locale-switcher.js +25 -0
- package/dist/ui/locale-switcher.js.map +1 -0
- package/dist/ui/table.js +1 -1
- package/dist/ui/table.js.map +1 -1
- package/package.json +1 -1
- package/src/index.ts +1 -0
- package/src/layout/Footer.tsx +7 -5
- package/src/marketing/Hero.tsx +1 -1
- package/src/ui/locale-switcher.tsx +50 -0
- package/src/ui/table.tsx +2 -2
package/dist/index.d.ts
CHANGED
|
@@ -4,6 +4,7 @@ export { ThemeProvider } from './context/ThemeProvider';
|
|
|
4
4
|
export { ThemeToggle } from './ui/theme-toggle';
|
|
5
5
|
export { Header } from './layout/Header';
|
|
6
6
|
export { Footer } from './layout/Footer';
|
|
7
|
+
export { LocaleSwitcher } from './ui/locale-switcher';
|
|
7
8
|
export { Hero } from './marketing/Hero';
|
|
8
9
|
export { PageHero } from './marketing/PageHero';
|
|
9
10
|
export { Features, Feature } from './marketing/Features';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,gBAAgB,EAChB,WAAW,EACX,WAAW,EACX,cAAc,EACd,iBAAiB,GAClB,MAAM,4BAA4B,CAAC;AACpC,YAAY,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAGvE,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAGhD,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AACzC,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,gBAAgB,EAChB,WAAW,EACX,WAAW,EACX,cAAc,EACd,iBAAiB,GAClB,MAAM,4BAA4B,CAAC;AACpC,YAAY,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAGvE,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAGhD,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AACzC,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AACzC,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAGtD,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AACxC,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAChD,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EACL,mBAAmB,EACnB,qBAAqB,EACrB,sBAAsB,GACvB,MAAM,iCAAiC,CAAC;AACzC,OAAO,EACL,cAAc,EACd,WAAW,EACX,aAAa,EACb,kBAAkB,GACnB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACjE,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AACzE,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAG/D,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAG7C,OAAO,EACL,KAAK,EACL,WAAW,EACX,SAAS,EACT,WAAW,EACX,SAAS,EACT,QAAQ,EACR,SAAS,EACT,YAAY,GACb,MAAM,YAAY,CAAC;AAGpB,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAG3J,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -7,6 +7,7 @@ export { ThemeToggle } from './ui/theme-toggle';
|
|
|
7
7
|
// Layout
|
|
8
8
|
export { Header } from './layout/Header';
|
|
9
9
|
export { Footer } from './layout/Footer';
|
|
10
|
+
export { LocaleSwitcher } from './ui/locale-switcher';
|
|
10
11
|
// Marketing
|
|
11
12
|
export { Hero } from './marketing/Hero';
|
|
12
13
|
export { PageHero } from './marketing/PageHero';
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,oDAAoD;AAEpD,UAAU;AACV,OAAO,EACL,gBAAgB,EAChB,WAAW,EACX,WAAW,EACX,cAAc,EACd,iBAAiB,GAClB,MAAM,4BAA4B,CAAC;AAGpC,QAAQ;AACR,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhD,SAAS;AACT,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AACzC,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,oDAAoD;AAEpD,UAAU;AACV,OAAO,EACL,gBAAgB,EAChB,WAAW,EACX,WAAW,EACX,cAAc,EACd,iBAAiB,GAClB,MAAM,4BAA4B,CAAC;AAGpC,QAAQ;AACR,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhD,SAAS;AACT,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AACzC,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AACzC,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEtD,YAAY;AACZ,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AACxC,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAChD,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EACL,mBAAmB,EACnB,qBAAqB,EACrB,sBAAsB,GACvB,MAAM,iCAAiC,CAAC;AACzC,OAAO,EACL,cAAc,EACd,WAAW,EACX,aAAa,EACb,kBAAkB,GACnB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACjE,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AACzE,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAE/D,OAAO;AACP,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAE7C,gBAAgB;AAChB,OAAO,EACL,KAAK,EACL,WAAW,EACX,SAAS,EACT,WAAW,EACX,SAAS,EACT,QAAQ,EACR,SAAS,EACT,YAAY,GACb,MAAM,YAAY,CAAC;AAEpB,qCAAqC;AACrC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAE3J,UAAU;AACV,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Footer.d.ts","sourceRoot":"","sources":["../../src/layout/Footer.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"Footer.d.ts","sourceRoot":"","sources":["../../src/layout/Footer.tsx"],"names":[],"mappings":"AAYA,wBAAgB,MAAM,4CAyDrB"}
|
package/dist/layout/Footer.js
CHANGED
|
@@ -2,10 +2,13 @@
|
|
|
2
2
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
3
|
import { useShipSite, useResolveHref } from '../context/ShipSiteProvider';
|
|
4
4
|
import { FooterRoot, FooterContent, FooterColumn, FooterBottom, } from '../ui/footer';
|
|
5
|
+
import { LocaleSwitcher } from '../ui/locale-switcher';
|
|
5
6
|
export function Footer() {
|
|
6
7
|
const { siteName, footer } = useShipSite();
|
|
7
8
|
const resolveHref = useResolveHref();
|
|
8
9
|
return (_jsx("footer", { className: "border-t border-border", children: _jsx(FooterRoot, { children: _jsxs("div", { className: "container-main", children: [_jsx(FooterContent, { children: footer.columns?.map((column) => (_jsxs(FooterColumn, { children: [_jsx("h3", { className: "text-sm font-semibold text-foreground", children: column.title }), _jsx("ul", { className: "flex flex-col gap-2", children: column.links.map((link) => (_jsx("li", { children: _jsx("a", { href: resolveHref(link.href), className: "text-sm text-muted-foreground hover:text-foreground transition-colors", children: link.label }) }, link.href))) })] }, column.title))) }), _jsxs(FooterBottom, { children: [_jsx("p", { children: footer.copyright ||
|
|
9
|
-
`\u00A9 ${new Date().getFullYear()} ${siteName}` }),
|
|
10
|
+
`\u00A9 ${new Date().getFullYear()} ${siteName}` }), _jsxs("div", { className: "flex items-center gap-4", children: [footer.social &&
|
|
11
|
+
footer.social.length > 0 &&
|
|
12
|
+
footer.social.map((social) => (_jsx("a", { href: social.href, target: "_blank", rel: "noopener noreferrer", className: "hover:text-foreground transition-colors capitalize", children: social.platform }, social.href))), _jsx(LocaleSwitcher, {})] })] })] }) }) }));
|
|
10
13
|
}
|
|
11
14
|
//# sourceMappingURL=Footer.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Footer.js","sourceRoot":"","sources":["../../src/layout/Footer.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAGb,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC1E,OAAO,EACL,UAAU,EACV,aAAa,EACb,YAAY,EACZ,YAAY,GACb,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"Footer.js","sourceRoot":"","sources":["../../src/layout/Footer.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAGb,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC1E,OAAO,EACL,UAAU,EACV,aAAa,EACb,YAAY,EACZ,YAAY,GACb,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAEvD,MAAM,UAAU,MAAM;IACpB,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,WAAW,EAAE,CAAC;IAC3C,MAAM,WAAW,GAAG,cAAc,EAAE,CAAC;IAErC,OAAO,CACL,iBAAQ,SAAS,EAAC,wBAAwB,YACxC,KAAC,UAAU,cACT,eAAK,SAAS,EAAC,gBAAgB,aAC7B,KAAC,aAAa,cACX,MAAM,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAC/B,MAAC,YAAY,eACX,aAAI,SAAS,EAAC,uCAAuC,YAClD,MAAM,CAAC,KAAK,GACV,EACL,aAAI,SAAS,EAAC,qBAAqB,YAChC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAC1B,uBACE,YACE,IAAI,EAAE,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,EAC5B,SAAS,EAAC,uEAAuE,YAEhF,IAAI,CAAC,KAAK,GACT,IANG,IAAI,CAAC,IAAI,CAOb,CACN,CAAC,GACC,KAfY,MAAM,CAAC,KAAK,CAgBhB,CAChB,CAAC,GACY,EAEhB,MAAC,YAAY,eACX,sBACG,MAAM,CAAC,SAAS;oCACf,UAAU,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,IAAI,QAAQ,EAAE,GAChD,EAEJ,eAAK,SAAS,EAAC,yBAAyB,aACrC,MAAM,CAAC,MAAM;wCACZ,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC;wCACxB,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAC5B,YAEE,IAAI,EAAE,MAAM,CAAC,IAAI,EACjB,MAAM,EAAC,QAAQ,EACf,GAAG,EAAC,qBAAqB,EACzB,SAAS,EAAC,oDAAoD,YAE7D,MAAM,CAAC,QAAQ,IANX,MAAM,CAAC,IAAI,CAOd,CACL,CAAC,EACJ,KAAC,cAAc,KAAG,IACd,IACO,IACX,GACK,GACN,CACV,CAAC;AACJ,CAAC"}
|
package/dist/marketing/Hero.js
CHANGED
|
@@ -5,6 +5,6 @@ import { Button } from '../ui/button';
|
|
|
5
5
|
import { Mockup } from '../ui/mockup';
|
|
6
6
|
import Glow from '../ui/glow';
|
|
7
7
|
export function Hero({ title, description, primaryCta, secondaryCta, badge, image, children }) {
|
|
8
|
-
return (_jsxs(Section, { className: "relative overflow-hidden", children: [_jsx(Glow, { variant: "top" }), _jsxs("div", { className: "container-main relative z-10", children: [_jsxs("div", { className: "max-w-3xl mx-auto text-center", children: [badge && (_jsx(Badge, { variant: "outline", className: "animate-appear mb-6", children: badge })), _jsx("h1", { className: "text-4xl md:text-6xl font-bold tracking-tight text-foreground mb-6 animate-appear [animation-delay:100ms]", children: title }), _jsx("p", { className: "text-lg md:text-xl text-muted-foreground mb-8 max-w-2xl mx-auto animate-appear [animation-delay:200ms]", children: description }), _jsxs("div", { className: "flex items-center justify-center gap-4 animate-appear [animation-delay:300ms]", children: [primaryCta && (_jsx(Button, { asChild: true, size: "lg", children: _jsx("a", { href: primaryCta.href, children: primaryCta.label }) })), secondaryCta && (_jsx(Button, { asChild: true, variant: "glow", size: "lg", children: _jsx("a", { href: secondaryCta.href, children: secondaryCta.label }) }))] }), children] }), image && (_jsx("div", { className: "mt-16 animate-appear-zoom [animation-delay:400ms]", children: _jsx(Mockup, { type: "responsive", className: "shadow-mockup w-full", children: _jsx("img", { src: image, alt: "", className: "w-full" }) }) }))] })] }));
|
|
8
|
+
return (_jsxs(Section, { className: "relative overflow-hidden", children: [_jsx(Glow, { variant: "top" }), _jsxs("div", { className: "container-main relative z-10", children: [_jsxs("div", { className: "max-w-3xl mx-auto text-center", children: [badge && (_jsx(Badge, { variant: "outline", className: "animate-appear mb-6", children: badge })), _jsx("h1", { className: "text-4xl md:text-6xl font-bold tracking-tight text-foreground mb-6 animate-appear [animation-delay:100ms]", children: title }), _jsx("p", { className: "text-lg md:text-xl text-muted-foreground mb-8 max-w-2xl mx-auto animate-appear [animation-delay:200ms]", children: description }), _jsxs("div", { className: "flex flex-col sm:flex-row items-center justify-center gap-4 animate-appear [animation-delay:300ms]", children: [primaryCta && (_jsx(Button, { asChild: true, size: "lg", children: _jsx("a", { href: primaryCta.href, children: primaryCta.label }) })), secondaryCta && (_jsx(Button, { asChild: true, variant: "glow", size: "lg", children: _jsx("a", { href: secondaryCta.href, children: secondaryCta.label }) }))] }), children] }), image && (_jsx("div", { className: "mt-16 animate-appear-zoom [animation-delay:400ms]", children: _jsx(Mockup, { type: "responsive", className: "shadow-mockup w-full", children: _jsx("img", { src: image, alt: "", className: "w-full" }) }) }))] })] }));
|
|
9
9
|
}
|
|
10
10
|
//# sourceMappingURL=Hero.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Hero.js","sourceRoot":"","sources":["../../src/marketing/Hero.tsx"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACpC,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACtC,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACtC,OAAO,IAAI,MAAM,YAAY,CAAC;AAY9B,MAAM,UAAU,IAAI,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,YAAY,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAa;IACtG,OAAO,CACL,MAAC,OAAO,IAAC,SAAS,EAAC,0BAA0B,aAC3C,KAAC,IAAI,IAAC,OAAO,EAAC,KAAK,GAAG,EACtB,eAAK,SAAS,EAAC,8BAA8B,aAC3C,eAAK,SAAS,EAAC,+BAA+B,aAC3C,KAAK,IAAI,CACR,KAAC,KAAK,IAAC,OAAO,EAAC,SAAS,EAAC,SAAS,EAAC,qBAAqB,YACrD,KAAK,GACA,CACT,EACD,aAAI,SAAS,EAAC,2GAA2G,YACtH,KAAK,GACH,EACL,YAAG,SAAS,EAAC,wGAAwG,YAClH,WAAW,GACV,EACJ,eAAK,SAAS,EAAC
|
|
1
|
+
{"version":3,"file":"Hero.js","sourceRoot":"","sources":["../../src/marketing/Hero.tsx"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACpC,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACtC,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACtC,OAAO,IAAI,MAAM,YAAY,CAAC;AAY9B,MAAM,UAAU,IAAI,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,YAAY,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAa;IACtG,OAAO,CACL,MAAC,OAAO,IAAC,SAAS,EAAC,0BAA0B,aAC3C,KAAC,IAAI,IAAC,OAAO,EAAC,KAAK,GAAG,EACtB,eAAK,SAAS,EAAC,8BAA8B,aAC3C,eAAK,SAAS,EAAC,+BAA+B,aAC3C,KAAK,IAAI,CACR,KAAC,KAAK,IAAC,OAAO,EAAC,SAAS,EAAC,SAAS,EAAC,qBAAqB,YACrD,KAAK,GACA,CACT,EACD,aAAI,SAAS,EAAC,2GAA2G,YACtH,KAAK,GACH,EACL,YAAG,SAAS,EAAC,wGAAwG,YAClH,WAAW,GACV,EACJ,eAAK,SAAS,EAAC,oGAAoG,aAChH,UAAU,IAAI,CACb,KAAC,MAAM,IAAC,OAAO,QAAC,IAAI,EAAC,IAAI,YACvB,YAAG,IAAI,EAAE,UAAU,CAAC,IAAI,YAAG,UAAU,CAAC,KAAK,GAAK,GACzC,CACV,EACA,YAAY,IAAI,CACf,KAAC,MAAM,IAAC,OAAO,QAAC,OAAO,EAAC,MAAM,EAAC,IAAI,EAAC,IAAI,YACtC,YAAG,IAAI,EAAE,YAAY,CAAC,IAAI,YAAG,YAAY,CAAC,KAAK,GAAK,GAC7C,CACV,IACG,EACL,QAAQ,IACL,EACL,KAAK,IAAI,CACR,cAAK,SAAS,EAAC,mDAAmD,YAChE,KAAC,MAAM,IAAC,IAAI,EAAC,YAAY,EAAC,SAAS,EAAC,sBAAsB,YACxD,cAAK,GAAG,EAAE,KAAK,EAAE,GAAG,EAAC,EAAE,EAAC,SAAS,EAAC,QAAQ,GAAG,GACtC,GACL,CACP,IACG,IACE,CACX,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"locale-switcher.d.ts","sourceRoot":"","sources":["../../src/ui/locale-switcher.tsx"],"names":[],"mappings":"AAKA,wBAAgB,cAAc,mDA4C7B"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import React from 'react';
|
|
4
|
+
import { useShipSite, useAlternateLinks } from '../context/ShipSiteProvider';
|
|
5
|
+
export function LocaleSwitcher() {
|
|
6
|
+
const { locale, locales } = useShipSite();
|
|
7
|
+
const alternatePathMap = useAlternateLinks();
|
|
8
|
+
if (locales.length <= 1)
|
|
9
|
+
return null;
|
|
10
|
+
const pathname = typeof window !== 'undefined' ? window.location.pathname : '';
|
|
11
|
+
// Find the alternatePathMap entry where the current locale's path matches
|
|
12
|
+
let alternates;
|
|
13
|
+
for (const entry of Object.values(alternatePathMap)) {
|
|
14
|
+
if (entry[locale] === pathname) {
|
|
15
|
+
alternates = entry;
|
|
16
|
+
break;
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
return (_jsx("div", { className: "flex items-center gap-1.5 text-xs", children: locales.map((loc, i) => {
|
|
20
|
+
const href = alternates?.[loc] ?? `/${loc}`;
|
|
21
|
+
const isActive = loc === locale;
|
|
22
|
+
return (_jsxs(React.Fragment, { children: [i > 0 && _jsx("span", { className: "text-muted-foreground", children: "\u00B7" }), isActive ? (_jsx("span", { className: "font-semibold text-foreground uppercase", children: loc })) : (_jsx("a", { href: href, className: "text-muted-foreground hover:text-foreground transition-colors uppercase", children: loc }))] }, loc));
|
|
23
|
+
}) }));
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=locale-switcher.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"locale-switcher.js","sourceRoot":"","sources":["../../src/ui/locale-switcher.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAE7E,MAAM,UAAU,cAAc;IAC5B,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,WAAW,EAAE,CAAC;IAC1C,MAAM,gBAAgB,GAAG,iBAAiB,EAAE,CAAC;IAE7C,IAAI,OAAO,CAAC,MAAM,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IAErC,MAAM,QAAQ,GACZ,OAAO,MAAM,KAAK,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;IAEhE,0EAA0E;IAC1E,IAAI,UAA8C,CAAC;IACnD,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,EAAE,CAAC;QACpD,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,QAAQ,EAAE,CAAC;YAC/B,UAAU,GAAG,KAAK,CAAC;YACnB,MAAM;QACR,CAAC;IACH,CAAC;IAED,OAAO,CACL,cAAK,SAAS,EAAC,mCAAmC,YAC/C,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE;YACtB,MAAM,IAAI,GAAG,UAAU,EAAE,CAAC,GAAG,CAAC,IAAI,IAAI,GAAG,EAAE,CAAC;YAC5C,MAAM,QAAQ,GAAG,GAAG,KAAK,MAAM,CAAC;YAEhC,OAAO,CACL,MAAC,KAAK,CAAC,QAAQ,eACZ,CAAC,GAAG,CAAC,IAAI,eAAM,SAAS,EAAC,uBAAuB,uBAAS,EACzD,QAAQ,CAAC,CAAC,CAAC,CACV,eAAM,SAAS,EAAC,yCAAyC,YACtD,GAAG,GACC,CACR,CAAC,CAAC,CAAC,CACF,YACE,IAAI,EAAE,IAAI,EACV,SAAS,EAAC,yEAAyE,YAElF,GAAG,GACF,CACL,KAbkB,GAAG,CAcP,CAClB,CAAC;QACJ,CAAC,CAAC,GACE,CACP,CAAC;AACJ,CAAC"}
|
package/dist/ui/table.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
2
|
import { cn } from "../lib/utils";
|
|
3
3
|
function Table({ className, ...props }) {
|
|
4
|
-
return (_jsx("div", { "data-slot": "table-container", className: "prose-container my-8 mx-auto w-full max-w-[76rem] px-[clamp(1rem,3vw,3rem)]
|
|
4
|
+
return (_jsx("div", { "data-slot": "table-container", className: "prose-container my-8 mx-auto w-full max-w-[76rem] px-[clamp(1rem,3vw,3rem)]", children: _jsx("div", { className: "rounded-xl border border-border bg-card shadow-sm overflow-x-auto", children: _jsx("table", { "data-slot": "table", className: cn("w-full caption-bottom text-sm", className), ...props }) }) }));
|
|
5
5
|
}
|
|
6
6
|
function TableHeader({ className, ...props }) {
|
|
7
7
|
return (_jsx("thead", { "data-slot": "table-header", className: cn("bg-muted/50 [&_tr]:border-b", className), ...props }));
|
package/dist/ui/table.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"table.js","sourceRoot":"","sources":["../../src/ui/table.tsx"],"names":[],"mappings":";AAEA,OAAO,EAAE,EAAE,EAAE,MAAM,cAAc,CAAC;AAElC,SAAS,KAAK,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAiC;IACnE,OAAO,CACL,2BAAe,iBAAiB,EAAC,SAAS,EAAC,
|
|
1
|
+
{"version":3,"file":"table.js","sourceRoot":"","sources":["../../src/ui/table.tsx"],"names":[],"mappings":";AAEA,OAAO,EAAE,EAAE,EAAE,MAAM,cAAc,CAAC;AAElC,SAAS,KAAK,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAiC;IACnE,OAAO,CACL,2BAAe,iBAAiB,EAAC,SAAS,EAAC,6EAA6E,YACtH,cAAK,SAAS,EAAC,mEAAmE,YAChF,6BACY,OAAO,EACjB,SAAS,EAAE,EAAE,CAAC,+BAA+B,EAAE,SAAS,CAAC,KACrD,KAAK,GACT,GACE,GACF,CACP,CAAC;AACJ,CAAC;AAED,SAAS,WAAW,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAiC;IACzE,OAAO,CACL,6BACY,cAAc,EACxB,SAAS,EAAE,EAAE,CAAC,6BAA6B,EAAE,SAAS,CAAC,KACnD,KAAK,GACT,CACH,CAAC;AACJ,CAAC;AAED,SAAS,SAAS,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAiC;IACvE,OAAO,CACL,6BACY,YAAY,EACtB,SAAS,EAAE,EAAE,CAAC,4BAA4B,EAAE,SAAS,CAAC,KAClD,KAAK,GACT,CACH,CAAC;AACJ,CAAC;AAED,SAAS,WAAW,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAiC;IACzE,OAAO,CACL,6BACY,cAAc,EACxB,SAAS,EAAE,EAAE,CACX,yDAAyD,EACzD,SAAS,CACV,KACG,KAAK,GACT,CACH,CAAC;AACJ,CAAC;AAED,SAAS,QAAQ,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAA8B;IACnE,OAAO,CACL,0BACY,WAAW,EACrB,SAAS,EAAE,EAAE,CACX,2FAA2F,EAC3F,SAAS,CACV,KACG,KAAK,GACT,CACH,CAAC;AACJ,CAAC;AAED,SAAS,SAAS,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAA8B;IACpE,OAAO,CACL,0BACY,YAAY,EACtB,SAAS,EAAE,EAAE,CACX,wKAAwK,EACxK,SAAS,CACV,KACG,KAAK,GACT,CACH,CAAC;AACJ,CAAC;AAED,SAAS,SAAS,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAA8B;IACpE,OAAO,CACL,0BACY,YAAY,EACtB,SAAS,EAAE,EAAE,CACX,4GAA4G,EAC5G,SAAS,CACV,KACG,KAAK,GACT,CACH,CAAC;AACJ,CAAC;AAED,SAAS,YAAY,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAmC;IAC5E,OAAO,CACL,+BACY,eAAe,EACzB,SAAS,EAAE,EAAE,CAAC,oCAAoC,EAAE,SAAS,CAAC,KAC1D,KAAK,GACT,CACH,CAAC;AACJ,CAAC;AAED,OAAO,EACL,KAAK,EACL,WAAW,EACX,SAAS,EACT,WAAW,EACX,SAAS,EACT,QAAQ,EACR,SAAS,EACT,YAAY,GACb,CAAC"}
|
package/package.json
CHANGED
package/src/index.ts
CHANGED
|
@@ -17,6 +17,7 @@ export { ThemeToggle } from './ui/theme-toggle';
|
|
|
17
17
|
// Layout
|
|
18
18
|
export { Header } from './layout/Header';
|
|
19
19
|
export { Footer } from './layout/Footer';
|
|
20
|
+
export { LocaleSwitcher } from './ui/locale-switcher';
|
|
20
21
|
|
|
21
22
|
// Marketing
|
|
22
23
|
export { Hero } from './marketing/Hero';
|
package/src/layout/Footer.tsx
CHANGED
|
@@ -8,6 +8,7 @@ import {
|
|
|
8
8
|
FooterColumn,
|
|
9
9
|
FooterBottom,
|
|
10
10
|
} from '../ui/footer';
|
|
11
|
+
import { LocaleSwitcher } from '../ui/locale-switcher';
|
|
11
12
|
|
|
12
13
|
export function Footer() {
|
|
13
14
|
const { siteName, footer } = useShipSite();
|
|
@@ -45,9 +46,10 @@ export function Footer() {
|
|
|
45
46
|
`\u00A9 ${new Date().getFullYear()} ${siteName}`}
|
|
46
47
|
</p>
|
|
47
48
|
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
49
|
+
<div className="flex items-center gap-4">
|
|
50
|
+
{footer.social &&
|
|
51
|
+
footer.social.length > 0 &&
|
|
52
|
+
footer.social.map((social) => (
|
|
51
53
|
<a
|
|
52
54
|
key={social.href}
|
|
53
55
|
href={social.href}
|
|
@@ -58,8 +60,8 @@ export function Footer() {
|
|
|
58
60
|
{social.platform}
|
|
59
61
|
</a>
|
|
60
62
|
))}
|
|
61
|
-
|
|
62
|
-
|
|
63
|
+
<LocaleSwitcher />
|
|
64
|
+
</div>
|
|
63
65
|
</FooterBottom>
|
|
64
66
|
</div>
|
|
65
67
|
</FooterRoot>
|
package/src/marketing/Hero.tsx
CHANGED
|
@@ -33,7 +33,7 @@ export function Hero({ title, description, primaryCta, secondaryCta, badge, imag
|
|
|
33
33
|
<p className="text-lg md:text-xl text-muted-foreground mb-8 max-w-2xl mx-auto animate-appear [animation-delay:200ms]">
|
|
34
34
|
{description}
|
|
35
35
|
</p>
|
|
36
|
-
<div className="flex items-center justify-center gap-4 animate-appear [animation-delay:300ms]">
|
|
36
|
+
<div className="flex flex-col sm:flex-row items-center justify-center gap-4 animate-appear [animation-delay:300ms]">
|
|
37
37
|
{primaryCta && (
|
|
38
38
|
<Button asChild size="lg">
|
|
39
39
|
<a href={primaryCta.href}>{primaryCta.label}</a>
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
|
|
3
|
+
import React from 'react';
|
|
4
|
+
import { useShipSite, useAlternateLinks } from '../context/ShipSiteProvider';
|
|
5
|
+
|
|
6
|
+
export function LocaleSwitcher() {
|
|
7
|
+
const { locale, locales } = useShipSite();
|
|
8
|
+
const alternatePathMap = useAlternateLinks();
|
|
9
|
+
|
|
10
|
+
if (locales.length <= 1) return null;
|
|
11
|
+
|
|
12
|
+
const pathname =
|
|
13
|
+
typeof window !== 'undefined' ? window.location.pathname : '';
|
|
14
|
+
|
|
15
|
+
// Find the alternatePathMap entry where the current locale's path matches
|
|
16
|
+
let alternates: Record<string, string> | undefined;
|
|
17
|
+
for (const entry of Object.values(alternatePathMap)) {
|
|
18
|
+
if (entry[locale] === pathname) {
|
|
19
|
+
alternates = entry;
|
|
20
|
+
break;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
return (
|
|
25
|
+
<div className="flex items-center gap-1.5 text-xs">
|
|
26
|
+
{locales.map((loc, i) => {
|
|
27
|
+
const href = alternates?.[loc] ?? `/${loc}`;
|
|
28
|
+
const isActive = loc === locale;
|
|
29
|
+
|
|
30
|
+
return (
|
|
31
|
+
<React.Fragment key={loc}>
|
|
32
|
+
{i > 0 && <span className="text-muted-foreground">·</span>}
|
|
33
|
+
{isActive ? (
|
|
34
|
+
<span className="font-semibold text-foreground uppercase">
|
|
35
|
+
{loc}
|
|
36
|
+
</span>
|
|
37
|
+
) : (
|
|
38
|
+
<a
|
|
39
|
+
href={href}
|
|
40
|
+
className="text-muted-foreground hover:text-foreground transition-colors uppercase"
|
|
41
|
+
>
|
|
42
|
+
{loc}
|
|
43
|
+
</a>
|
|
44
|
+
)}
|
|
45
|
+
</React.Fragment>
|
|
46
|
+
);
|
|
47
|
+
})}
|
|
48
|
+
</div>
|
|
49
|
+
);
|
|
50
|
+
}
|
package/src/ui/table.tsx
CHANGED
|
@@ -4,8 +4,8 @@ import { cn } from "../lib/utils";
|
|
|
4
4
|
|
|
5
5
|
function Table({ className, ...props }: React.ComponentProps<"table">) {
|
|
6
6
|
return (
|
|
7
|
-
<div data-slot="table-container" className="prose-container my-8 mx-auto w-full max-w-[76rem] px-[clamp(1rem,3vw,3rem)]
|
|
8
|
-
<div className="rounded-xl border border-border bg-card shadow-sm">
|
|
7
|
+
<div data-slot="table-container" className="prose-container my-8 mx-auto w-full max-w-[76rem] px-[clamp(1rem,3vw,3rem)]">
|
|
8
|
+
<div className="rounded-xl border border-border bg-card shadow-sm overflow-x-auto">
|
|
9
9
|
<table
|
|
10
10
|
data-slot="table"
|
|
11
11
|
className={cn("w-full caption-bottom text-sm", className)}
|