@nimblegiant/stilts 0.2.0-alpha.3 → 0.2.0-alpha.4
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/README.md +734 -107
- package/dist/index.cjs +125 -12
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +56 -5
- package/dist/index.d.ts +56 -5
- package/dist/index.js +124 -13
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
- package/src/components/layout/MainNav.tsx +39 -18
- package/src/components/patterns/ContentPage.tsx +15 -6
- package/src/components/patterns/ListCard.tsx +134 -0
- package/src/components/patterns/index.ts +26 -20
- package/src/components/ui/AuthorMeta.tsx +44 -0
- package/src/components/ui/index.ts +3 -1
package/dist/index.d.cts
CHANGED
|
@@ -4,8 +4,12 @@ import React$1, { ReactNode, ElementType } from 'react';
|
|
|
4
4
|
interface MainNavProps {
|
|
5
5
|
currentPath: string;
|
|
6
6
|
isPortfolioPage?: boolean;
|
|
7
|
+
navLinks?: {
|
|
8
|
+
href: string;
|
|
9
|
+
label: string;
|
|
10
|
+
}[];
|
|
7
11
|
}
|
|
8
|
-
declare function MainNav({ currentPath, isPortfolioPage }: MainNavProps): react_jsx_runtime.JSX.Element;
|
|
12
|
+
declare function MainNav({ currentPath, isPortfolioPage, navLinks, }: MainNavProps): react_jsx_runtime.JSX.Element;
|
|
9
13
|
|
|
10
14
|
/**
|
|
11
15
|
* TopBanner Component
|
|
@@ -36,12 +40,30 @@ declare global {
|
|
|
36
40
|
}
|
|
37
41
|
declare function ToastContainer(): react_jsx_runtime.JSX.Element;
|
|
38
42
|
|
|
43
|
+
interface Author {
|
|
44
|
+
name: string;
|
|
45
|
+
url?: string;
|
|
46
|
+
avatar?: string;
|
|
47
|
+
}
|
|
48
|
+
interface AuthorMetaProps {
|
|
49
|
+
author: Author;
|
|
50
|
+
linkable?: boolean;
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* AuthorMeta Component
|
|
54
|
+
* Displays author information with optional avatar
|
|
55
|
+
*/
|
|
56
|
+
declare function AuthorMeta({ author, linkable }: AuthorMetaProps): react_jsx_runtime.JSX.Element;
|
|
57
|
+
|
|
39
58
|
/**
|
|
40
59
|
* UI Components
|
|
41
60
|
*/
|
|
42
61
|
|
|
62
|
+
type index$1_Author = Author;
|
|
63
|
+
declare const index$1_AuthorMeta: typeof AuthorMeta;
|
|
64
|
+
type index$1_AuthorMetaProps = AuthorMetaProps;
|
|
43
65
|
declare namespace index$1 {
|
|
44
|
-
export { ToastContainer as Toast };
|
|
66
|
+
export { type index$1_Author as Author, index$1_AuthorMeta as AuthorMeta, type index$1_AuthorMetaProps as AuthorMetaProps, ToastContainer as Toast };
|
|
45
67
|
}
|
|
46
68
|
|
|
47
69
|
/**
|
|
@@ -188,7 +210,7 @@ interface ContentPageProps {
|
|
|
188
210
|
lastUpdated?: string;
|
|
189
211
|
children: React.ReactNode;
|
|
190
212
|
}
|
|
191
|
-
declare function ContentPage({ title, subtitle, lastUpdated, children }: ContentPageProps): react_jsx_runtime.JSX.Element;
|
|
213
|
+
declare function ContentPage({ title, subtitle, lastUpdated, children, }: ContentPageProps): react_jsx_runtime.JSX.Element;
|
|
192
214
|
|
|
193
215
|
type TerminalLine = {
|
|
194
216
|
text: string;
|
|
@@ -305,6 +327,33 @@ interface FeatureShowcaseProps {
|
|
|
305
327
|
}
|
|
306
328
|
declare const FeatureShowcase: React$1.FC<FeatureShowcaseProps>;
|
|
307
329
|
|
|
330
|
+
interface ListCardProps {
|
|
331
|
+
href: string;
|
|
332
|
+
title: string;
|
|
333
|
+
description: string;
|
|
334
|
+
tagline?: string;
|
|
335
|
+
thumbnail?: string;
|
|
336
|
+
tags?: string[];
|
|
337
|
+
meta?: {
|
|
338
|
+
date?: string;
|
|
339
|
+
author?: Author;
|
|
340
|
+
};
|
|
341
|
+
imageAlt?: string;
|
|
342
|
+
animationDelay?: number;
|
|
343
|
+
specialImageComponent?: boolean;
|
|
344
|
+
imageBgClass?: string;
|
|
345
|
+
imageDark?: string;
|
|
346
|
+
imageLight?: string;
|
|
347
|
+
children?: ReactNode;
|
|
348
|
+
footerSlot?: ReactNode;
|
|
349
|
+
}
|
|
350
|
+
/**
|
|
351
|
+
* ListCard Component
|
|
352
|
+
* Displays a card with optional image, title, description, meta, and tags
|
|
353
|
+
* Used for products, blog posts, and other list items
|
|
354
|
+
*/
|
|
355
|
+
declare function ListCard({ href, title, description, tagline, thumbnail, tags, meta, imageAlt, animationDelay, specialImageComponent, imageBgClass, children, imageDark, imageLight, footerSlot, }: ListCardProps): react_jsx_runtime.JSX.Element;
|
|
356
|
+
|
|
308
357
|
/**
|
|
309
358
|
* Pattern Components
|
|
310
359
|
*/
|
|
@@ -318,6 +367,8 @@ type index_Feature = Feature;
|
|
|
318
367
|
declare const index_FeatureShowcase: typeof FeatureShowcase;
|
|
319
368
|
type index_FeatureShowcaseProps = FeatureShowcaseProps;
|
|
320
369
|
declare const index_IndustryGrid: typeof IndustryGrid;
|
|
370
|
+
declare const index_ListCard: typeof ListCard;
|
|
371
|
+
type index_ListCardProps = ListCardProps;
|
|
321
372
|
declare const index_PageHero: typeof PageHero;
|
|
322
373
|
declare const index_ProcessSteps: typeof ProcessSteps;
|
|
323
374
|
declare const index_ProductCard: typeof ProductCard;
|
|
@@ -334,7 +385,7 @@ declare const index_TerminalWindow: typeof TerminalWindow;
|
|
|
334
385
|
type index_TerminalWindowProps = TerminalWindowProps;
|
|
335
386
|
declare const index_VideoHero: typeof VideoHero;
|
|
336
387
|
declare namespace index {
|
|
337
|
-
export { index_CTAButton as CTAButton, type index_CTAButtonProps as CTAButtonProps, index_CodeBlock as CodeBlock, type index_CodeBlockProps as CodeBlockProps, index_ContentPage as ContentPage, type index_Feature as Feature, index_FeatureShowcase as FeatureShowcase, type index_FeatureShowcaseProps as FeatureShowcaseProps, index_IndustryGrid as IndustryGrid, index_PageHero as PageHero, index_ProcessSteps as ProcessSteps, index_ProductCard as ProductCard, type index_ProductCardProps as ProductCardProps, index_ServiceSection as ServiceSection, index_StatBar as StatBar, index_TeamGrid as TeamGrid, index_TerminalChrome as TerminalChrome, type index_TerminalChromeProps as TerminalChromeProps, index_TerminalHero as TerminalHero, type index_TerminalHeroProps as TerminalHeroProps, type index_TerminalLine as TerminalLine, index_TerminalWindow as TerminalWindow, type index_TerminalWindowProps as TerminalWindowProps, index_VideoHero as VideoHero };
|
|
388
|
+
export { index_CTAButton as CTAButton, type index_CTAButtonProps as CTAButtonProps, index_CodeBlock as CodeBlock, type index_CodeBlockProps as CodeBlockProps, index_ContentPage as ContentPage, type index_Feature as Feature, index_FeatureShowcase as FeatureShowcase, type index_FeatureShowcaseProps as FeatureShowcaseProps, index_IndustryGrid as IndustryGrid, index_ListCard as ListCard, type index_ListCardProps as ListCardProps, index_PageHero as PageHero, index_ProcessSteps as ProcessSteps, index_ProductCard as ProductCard, type index_ProductCardProps as ProductCardProps, index_ServiceSection as ServiceSection, index_StatBar as StatBar, index_TeamGrid as TeamGrid, index_TerminalChrome as TerminalChrome, type index_TerminalChromeProps as TerminalChromeProps, index_TerminalHero as TerminalHero, type index_TerminalHeroProps as TerminalHeroProps, type index_TerminalLine as TerminalLine, index_TerminalWindow as TerminalWindow, type index_TerminalWindowProps as TerminalWindowProps, index_VideoHero as VideoHero };
|
|
338
389
|
}
|
|
339
390
|
|
|
340
391
|
/**
|
|
@@ -842,4 +893,4 @@ type Theme = 'light' | 'dark';
|
|
|
842
893
|
type Alignment = 'left' | 'center' | 'right';
|
|
843
894
|
type GridCols = 2 | 3 | 4;
|
|
844
895
|
|
|
845
|
-
export { type Alignment, type BaseComponentProps, BeforeAfter, CTAButton, type CTAButtonProps, CaseStudyBreakdown, CodeBlock, type CodeBlockProps, type ColorToken, CompactContactForm, ContactForm, ContentPage, type DurationToken, type EasingToken, type Feature, FeatureShowcase, type FeatureShowcaseProps, FullWidthImage, type GridCols, ImageGrid, ImageGridModal, IndustryGrid, index$2 as Layout, type LinkLike, MainNav, PageHero, index as Patterns, ProblemStatement, ProcessSteps, ProcessTimeline, ProductCard, type ProductCardProps, RelatedProjects, type SectionPaddingToken, ServiceSection, SolutionSummary, type SpacingToken, StatBar, TeamCredits, TeamGrid, TerminalChrome, type TerminalChromeProps, TerminalHero, type TerminalHeroProps, type TerminalLine, TerminalWindow, type TerminalWindowProps, Testimonial, TextBlock, type Theme, ToastContainer as Toast, TopBanner, index$1 as UI, VideoHero, VideoSection, colors, durations, easings, sectionPadding, spacing };
|
|
896
|
+
export { type Alignment, type Author, AuthorMeta, type AuthorMetaProps, type BaseComponentProps, BeforeAfter, CTAButton, type CTAButtonProps, CaseStudyBreakdown, CodeBlock, type CodeBlockProps, type ColorToken, CompactContactForm, ContactForm, ContentPage, type DurationToken, type EasingToken, type Feature, FeatureShowcase, type FeatureShowcaseProps, FullWidthImage, type GridCols, ImageGrid, ImageGridModal, IndustryGrid, index$2 as Layout, type LinkLike, ListCard, type ListCardProps, MainNav, PageHero, index as Patterns, ProblemStatement, ProcessSteps, ProcessTimeline, ProductCard, type ProductCardProps, RelatedProjects, type SectionPaddingToken, ServiceSection, SolutionSummary, type SpacingToken, StatBar, TeamCredits, TeamGrid, TerminalChrome, type TerminalChromeProps, TerminalHero, type TerminalHeroProps, type TerminalLine, TerminalWindow, type TerminalWindowProps, Testimonial, TextBlock, type Theme, ToastContainer as Toast, TopBanner, index$1 as UI, VideoHero, VideoSection, colors, durations, easings, sectionPadding, spacing };
|
package/dist/index.d.ts
CHANGED
|
@@ -4,8 +4,12 @@ import React$1, { ReactNode, ElementType } from 'react';
|
|
|
4
4
|
interface MainNavProps {
|
|
5
5
|
currentPath: string;
|
|
6
6
|
isPortfolioPage?: boolean;
|
|
7
|
+
navLinks?: {
|
|
8
|
+
href: string;
|
|
9
|
+
label: string;
|
|
10
|
+
}[];
|
|
7
11
|
}
|
|
8
|
-
declare function MainNav({ currentPath, isPortfolioPage }: MainNavProps): react_jsx_runtime.JSX.Element;
|
|
12
|
+
declare function MainNav({ currentPath, isPortfolioPage, navLinks, }: MainNavProps): react_jsx_runtime.JSX.Element;
|
|
9
13
|
|
|
10
14
|
/**
|
|
11
15
|
* TopBanner Component
|
|
@@ -36,12 +40,30 @@ declare global {
|
|
|
36
40
|
}
|
|
37
41
|
declare function ToastContainer(): react_jsx_runtime.JSX.Element;
|
|
38
42
|
|
|
43
|
+
interface Author {
|
|
44
|
+
name: string;
|
|
45
|
+
url?: string;
|
|
46
|
+
avatar?: string;
|
|
47
|
+
}
|
|
48
|
+
interface AuthorMetaProps {
|
|
49
|
+
author: Author;
|
|
50
|
+
linkable?: boolean;
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* AuthorMeta Component
|
|
54
|
+
* Displays author information with optional avatar
|
|
55
|
+
*/
|
|
56
|
+
declare function AuthorMeta({ author, linkable }: AuthorMetaProps): react_jsx_runtime.JSX.Element;
|
|
57
|
+
|
|
39
58
|
/**
|
|
40
59
|
* UI Components
|
|
41
60
|
*/
|
|
42
61
|
|
|
62
|
+
type index$1_Author = Author;
|
|
63
|
+
declare const index$1_AuthorMeta: typeof AuthorMeta;
|
|
64
|
+
type index$1_AuthorMetaProps = AuthorMetaProps;
|
|
43
65
|
declare namespace index$1 {
|
|
44
|
-
export { ToastContainer as Toast };
|
|
66
|
+
export { type index$1_Author as Author, index$1_AuthorMeta as AuthorMeta, type index$1_AuthorMetaProps as AuthorMetaProps, ToastContainer as Toast };
|
|
45
67
|
}
|
|
46
68
|
|
|
47
69
|
/**
|
|
@@ -188,7 +210,7 @@ interface ContentPageProps {
|
|
|
188
210
|
lastUpdated?: string;
|
|
189
211
|
children: React.ReactNode;
|
|
190
212
|
}
|
|
191
|
-
declare function ContentPage({ title, subtitle, lastUpdated, children }: ContentPageProps): react_jsx_runtime.JSX.Element;
|
|
213
|
+
declare function ContentPage({ title, subtitle, lastUpdated, children, }: ContentPageProps): react_jsx_runtime.JSX.Element;
|
|
192
214
|
|
|
193
215
|
type TerminalLine = {
|
|
194
216
|
text: string;
|
|
@@ -305,6 +327,33 @@ interface FeatureShowcaseProps {
|
|
|
305
327
|
}
|
|
306
328
|
declare const FeatureShowcase: React$1.FC<FeatureShowcaseProps>;
|
|
307
329
|
|
|
330
|
+
interface ListCardProps {
|
|
331
|
+
href: string;
|
|
332
|
+
title: string;
|
|
333
|
+
description: string;
|
|
334
|
+
tagline?: string;
|
|
335
|
+
thumbnail?: string;
|
|
336
|
+
tags?: string[];
|
|
337
|
+
meta?: {
|
|
338
|
+
date?: string;
|
|
339
|
+
author?: Author;
|
|
340
|
+
};
|
|
341
|
+
imageAlt?: string;
|
|
342
|
+
animationDelay?: number;
|
|
343
|
+
specialImageComponent?: boolean;
|
|
344
|
+
imageBgClass?: string;
|
|
345
|
+
imageDark?: string;
|
|
346
|
+
imageLight?: string;
|
|
347
|
+
children?: ReactNode;
|
|
348
|
+
footerSlot?: ReactNode;
|
|
349
|
+
}
|
|
350
|
+
/**
|
|
351
|
+
* ListCard Component
|
|
352
|
+
* Displays a card with optional image, title, description, meta, and tags
|
|
353
|
+
* Used for products, blog posts, and other list items
|
|
354
|
+
*/
|
|
355
|
+
declare function ListCard({ href, title, description, tagline, thumbnail, tags, meta, imageAlt, animationDelay, specialImageComponent, imageBgClass, children, imageDark, imageLight, footerSlot, }: ListCardProps): react_jsx_runtime.JSX.Element;
|
|
356
|
+
|
|
308
357
|
/**
|
|
309
358
|
* Pattern Components
|
|
310
359
|
*/
|
|
@@ -318,6 +367,8 @@ type index_Feature = Feature;
|
|
|
318
367
|
declare const index_FeatureShowcase: typeof FeatureShowcase;
|
|
319
368
|
type index_FeatureShowcaseProps = FeatureShowcaseProps;
|
|
320
369
|
declare const index_IndustryGrid: typeof IndustryGrid;
|
|
370
|
+
declare const index_ListCard: typeof ListCard;
|
|
371
|
+
type index_ListCardProps = ListCardProps;
|
|
321
372
|
declare const index_PageHero: typeof PageHero;
|
|
322
373
|
declare const index_ProcessSteps: typeof ProcessSteps;
|
|
323
374
|
declare const index_ProductCard: typeof ProductCard;
|
|
@@ -334,7 +385,7 @@ declare const index_TerminalWindow: typeof TerminalWindow;
|
|
|
334
385
|
type index_TerminalWindowProps = TerminalWindowProps;
|
|
335
386
|
declare const index_VideoHero: typeof VideoHero;
|
|
336
387
|
declare namespace index {
|
|
337
|
-
export { index_CTAButton as CTAButton, type index_CTAButtonProps as CTAButtonProps, index_CodeBlock as CodeBlock, type index_CodeBlockProps as CodeBlockProps, index_ContentPage as ContentPage, type index_Feature as Feature, index_FeatureShowcase as FeatureShowcase, type index_FeatureShowcaseProps as FeatureShowcaseProps, index_IndustryGrid as IndustryGrid, index_PageHero as PageHero, index_ProcessSteps as ProcessSteps, index_ProductCard as ProductCard, type index_ProductCardProps as ProductCardProps, index_ServiceSection as ServiceSection, index_StatBar as StatBar, index_TeamGrid as TeamGrid, index_TerminalChrome as TerminalChrome, type index_TerminalChromeProps as TerminalChromeProps, index_TerminalHero as TerminalHero, type index_TerminalHeroProps as TerminalHeroProps, type index_TerminalLine as TerminalLine, index_TerminalWindow as TerminalWindow, type index_TerminalWindowProps as TerminalWindowProps, index_VideoHero as VideoHero };
|
|
388
|
+
export { index_CTAButton as CTAButton, type index_CTAButtonProps as CTAButtonProps, index_CodeBlock as CodeBlock, type index_CodeBlockProps as CodeBlockProps, index_ContentPage as ContentPage, type index_Feature as Feature, index_FeatureShowcase as FeatureShowcase, type index_FeatureShowcaseProps as FeatureShowcaseProps, index_IndustryGrid as IndustryGrid, index_ListCard as ListCard, type index_ListCardProps as ListCardProps, index_PageHero as PageHero, index_ProcessSteps as ProcessSteps, index_ProductCard as ProductCard, type index_ProductCardProps as ProductCardProps, index_ServiceSection as ServiceSection, index_StatBar as StatBar, index_TeamGrid as TeamGrid, index_TerminalChrome as TerminalChrome, type index_TerminalChromeProps as TerminalChromeProps, index_TerminalHero as TerminalHero, type index_TerminalHeroProps as TerminalHeroProps, type index_TerminalLine as TerminalLine, index_TerminalWindow as TerminalWindow, type index_TerminalWindowProps as TerminalWindowProps, index_VideoHero as VideoHero };
|
|
338
389
|
}
|
|
339
390
|
|
|
340
391
|
/**
|
|
@@ -842,4 +893,4 @@ type Theme = 'light' | 'dark';
|
|
|
842
893
|
type Alignment = 'left' | 'center' | 'right';
|
|
843
894
|
type GridCols = 2 | 3 | 4;
|
|
844
895
|
|
|
845
|
-
export { type Alignment, type BaseComponentProps, BeforeAfter, CTAButton, type CTAButtonProps, CaseStudyBreakdown, CodeBlock, type CodeBlockProps, type ColorToken, CompactContactForm, ContactForm, ContentPage, type DurationToken, type EasingToken, type Feature, FeatureShowcase, type FeatureShowcaseProps, FullWidthImage, type GridCols, ImageGrid, ImageGridModal, IndustryGrid, index$2 as Layout, type LinkLike, MainNav, PageHero, index as Patterns, ProblemStatement, ProcessSteps, ProcessTimeline, ProductCard, type ProductCardProps, RelatedProjects, type SectionPaddingToken, ServiceSection, SolutionSummary, type SpacingToken, StatBar, TeamCredits, TeamGrid, TerminalChrome, type TerminalChromeProps, TerminalHero, type TerminalHeroProps, type TerminalLine, TerminalWindow, type TerminalWindowProps, Testimonial, TextBlock, type Theme, ToastContainer as Toast, TopBanner, index$1 as UI, VideoHero, VideoSection, colors, durations, easings, sectionPadding, spacing };
|
|
896
|
+
export { type Alignment, type Author, AuthorMeta, type AuthorMetaProps, type BaseComponentProps, BeforeAfter, CTAButton, type CTAButtonProps, CaseStudyBreakdown, CodeBlock, type CodeBlockProps, type ColorToken, CompactContactForm, ContactForm, ContentPage, type DurationToken, type EasingToken, type Feature, FeatureShowcase, type FeatureShowcaseProps, FullWidthImage, type GridCols, ImageGrid, ImageGridModal, IndustryGrid, index$2 as Layout, type LinkLike, ListCard, type ListCardProps, MainNav, PageHero, index as Patterns, ProblemStatement, ProcessSteps, ProcessTimeline, ProductCard, type ProductCardProps, RelatedProjects, type SectionPaddingToken, ServiceSection, SolutionSummary, type SpacingToken, StatBar, TeamCredits, TeamGrid, TerminalChrome, type TerminalChromeProps, TerminalHero, type TerminalHeroProps, type TerminalLine, TerminalWindow, type TerminalWindowProps, Testimonial, TextBlock, type Theme, ToastContainer as Toast, TopBanner, index$1 as UI, VideoHero, VideoSection, colors, durations, easings, sectionPadding, spacing };
|
package/dist/index.js
CHANGED
|
@@ -14,7 +14,11 @@ __export(layout_exports, {
|
|
|
14
14
|
MainNav: () => MainNav,
|
|
15
15
|
TopBanner: () => TopBanner
|
|
16
16
|
});
|
|
17
|
-
function MainNav({
|
|
17
|
+
function MainNav({
|
|
18
|
+
currentPath,
|
|
19
|
+
isPortfolioPage = false,
|
|
20
|
+
navLinks = []
|
|
21
|
+
}) {
|
|
18
22
|
const [theme, setTheme] = useState(() => {
|
|
19
23
|
if (typeof document !== "undefined") {
|
|
20
24
|
return document.documentElement.getAttribute("data-theme") || "light";
|
|
@@ -62,13 +66,6 @@ function MainNav({ currentPath, isPortfolioPage = false }) {
|
|
|
62
66
|
document.documentElement.setAttribute("data-theme", newTheme);
|
|
63
67
|
localStorage.setItem("theme", newTheme);
|
|
64
68
|
}, [theme]);
|
|
65
|
-
const navLinks = [
|
|
66
|
-
{ href: "/", label: "HOME" },
|
|
67
|
-
{ href: "/about", label: "ABOUT" },
|
|
68
|
-
{ href: "/services", label: "SERVICES" },
|
|
69
|
-
{ href: "/products", label: "PRODUCTS" },
|
|
70
|
-
{ href: "/contact", label: "CONTACT" }
|
|
71
|
-
];
|
|
72
69
|
const isActive = (href) => {
|
|
73
70
|
if (href === "/") return currentPath === "/";
|
|
74
71
|
return currentPath.startsWith(href);
|
|
@@ -170,7 +167,9 @@ function MainNav({ currentPath, isPortfolioPage = false }) {
|
|
|
170
167
|
"li",
|
|
171
168
|
{
|
|
172
169
|
className: `transition-all duration-300 ${isMenuOpen ? "translate-x-0 opacity-100" : "translate-x-8 opacity-0"} `,
|
|
173
|
-
style: {
|
|
170
|
+
style: {
|
|
171
|
+
transitionDelay: isMenuOpen ? `${index * 50 + 100}ms` : "0ms"
|
|
172
|
+
},
|
|
174
173
|
children: /* @__PURE__ */ jsxs(
|
|
175
174
|
"a",
|
|
176
175
|
{
|
|
@@ -296,6 +295,7 @@ function TopBanner() {
|
|
|
296
295
|
// src/components/ui/index.ts
|
|
297
296
|
var ui_exports = {};
|
|
298
297
|
__export(ui_exports, {
|
|
298
|
+
AuthorMeta: () => AuthorMeta,
|
|
299
299
|
Toast: () => ToastContainer
|
|
300
300
|
});
|
|
301
301
|
var icons = {
|
|
@@ -397,6 +397,30 @@ function ToastContainer() {
|
|
|
397
397
|
}
|
|
398
398
|
);
|
|
399
399
|
}
|
|
400
|
+
function AuthorMeta({ author, linkable = false }) {
|
|
401
|
+
const content = /* @__PURE__ */ jsxs("span", { className: "flex items-center gap-1", children: [
|
|
402
|
+
author.avatar && /* @__PURE__ */ jsx(
|
|
403
|
+
"img",
|
|
404
|
+
{
|
|
405
|
+
src: author.avatar,
|
|
406
|
+
alt: author.name,
|
|
407
|
+
className: "h-4 w-4 rounded-full object-cover"
|
|
408
|
+
}
|
|
409
|
+
),
|
|
410
|
+
/* @__PURE__ */ jsx("span", { children: author.name })
|
|
411
|
+
] });
|
|
412
|
+
if (linkable && author.url) {
|
|
413
|
+
return /* @__PURE__ */ jsx(
|
|
414
|
+
"a",
|
|
415
|
+
{
|
|
416
|
+
href: author.url,
|
|
417
|
+
className: "flex items-center gap-1 transition-colors hover:text-[var(--color-primary)]",
|
|
418
|
+
children: content
|
|
419
|
+
}
|
|
420
|
+
);
|
|
421
|
+
}
|
|
422
|
+
return content;
|
|
423
|
+
}
|
|
400
424
|
|
|
401
425
|
// src/components/patterns/index.ts
|
|
402
426
|
var patterns_exports = {};
|
|
@@ -406,6 +430,7 @@ __export(patterns_exports, {
|
|
|
406
430
|
ContentPage: () => ContentPage,
|
|
407
431
|
FeatureShowcase: () => FeatureShowcase,
|
|
408
432
|
IndustryGrid: () => IndustryGrid,
|
|
433
|
+
ListCard: () => ListCard,
|
|
409
434
|
PageHero: () => PageHero,
|
|
410
435
|
ProcessSteps: () => ProcessSteps,
|
|
411
436
|
ProductCard: () => ProductCard,
|
|
@@ -817,9 +842,14 @@ function IndustryGrid({ industries, title, cols = 3 }) {
|
|
|
817
842
|
)) })
|
|
818
843
|
] }) });
|
|
819
844
|
}
|
|
820
|
-
function ContentPage({
|
|
845
|
+
function ContentPage({
|
|
846
|
+
title,
|
|
847
|
+
subtitle,
|
|
848
|
+
lastUpdated,
|
|
849
|
+
children
|
|
850
|
+
}) {
|
|
821
851
|
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
822
|
-
/* @__PURE__ */ jsx("section", { className: "pt-32 pb-12", children: /* @__PURE__ */ jsxs("div", { className: "container-
|
|
852
|
+
/* @__PURE__ */ jsx("section", { className: "pt-32 pb-12", children: /* @__PURE__ */ jsxs("div", { className: "container-md container", children: [
|
|
823
853
|
/* @__PURE__ */ jsx("h1", { className: "mb-4 text-4xl font-bold text-[var(--color-text-primary)] md:text-5xl", children: title }),
|
|
824
854
|
subtitle && /* @__PURE__ */ jsx("h2", { className: "mb-2 text-xl text-[var(--color-text-secondary)]", children: subtitle }),
|
|
825
855
|
lastUpdated && /* @__PURE__ */ jsxs("p", { className: "text-[var(--color-text-muted)]", children: [
|
|
@@ -827,7 +857,7 @@ function ContentPage({ title, subtitle, lastUpdated, children }) {
|
|
|
827
857
|
lastUpdated
|
|
828
858
|
] })
|
|
829
859
|
] }) }),
|
|
830
|
-
/* @__PURE__ */ jsx("section", { className: "py-12", children: /* @__PURE__ */ jsx("div", { className: "container-
|
|
860
|
+
/* @__PURE__ */ jsx("section", { className: "py-12", children: /* @__PURE__ */ jsx("div", { className: "container-md container", children: /* @__PURE__ */ jsx("div", { className: "prose max-w-full", children }) }) })
|
|
831
861
|
] });
|
|
832
862
|
}
|
|
833
863
|
function useMultiLineTypewriter(lines, typingSpeed = 20, initialDelay = 800, isVisible = true) {
|
|
@@ -1361,6 +1391,87 @@ var FeatureShowcase = ({
|
|
|
1361
1391
|
)) })
|
|
1362
1392
|
] }) });
|
|
1363
1393
|
};
|
|
1394
|
+
function ListCard({
|
|
1395
|
+
href,
|
|
1396
|
+
title,
|
|
1397
|
+
description,
|
|
1398
|
+
tagline,
|
|
1399
|
+
thumbnail,
|
|
1400
|
+
tags,
|
|
1401
|
+
meta,
|
|
1402
|
+
imageAlt = "Card image",
|
|
1403
|
+
animationDelay,
|
|
1404
|
+
specialImageComponent = false,
|
|
1405
|
+
imageBgClass = "bg-[var(--color-surface-muted)]",
|
|
1406
|
+
children,
|
|
1407
|
+
imageDark,
|
|
1408
|
+
imageLight,
|
|
1409
|
+
footerSlot
|
|
1410
|
+
}) {
|
|
1411
|
+
const animationStyle = animationDelay ? { animationDelay: `${animationDelay}s` } : void 0;
|
|
1412
|
+
return /* @__PURE__ */ jsxs(
|
|
1413
|
+
"a",
|
|
1414
|
+
{
|
|
1415
|
+
href,
|
|
1416
|
+
className: "hero-animate group flex flex-col overflow-hidden rounded-lg border border-[var(--color-border)] bg-[var(--color-surface)] opacity-0 shadow-sm transition-all duration-300 hover:border-[var(--color-primary)] hover:shadow-lg",
|
|
1417
|
+
style: animationStyle,
|
|
1418
|
+
children: [
|
|
1419
|
+
thumbnail && !specialImageComponent && /* @__PURE__ */ jsx(
|
|
1420
|
+
"div",
|
|
1421
|
+
{
|
|
1422
|
+
className: `relative aspect-video w-full overflow-hidden rounded-t-lg ${imageBgClass}`,
|
|
1423
|
+
children: /* @__PURE__ */ jsx(
|
|
1424
|
+
"img",
|
|
1425
|
+
{
|
|
1426
|
+
src: thumbnail,
|
|
1427
|
+
alt: imageAlt,
|
|
1428
|
+
className: "h-full w-full object-cover transition-transform duration-300 group-hover:scale-105"
|
|
1429
|
+
}
|
|
1430
|
+
)
|
|
1431
|
+
}
|
|
1432
|
+
),
|
|
1433
|
+
/* @__PURE__ */ jsxs("div", { className: "relative flex aspect-video w-full items-center justify-center overflow-hidden rounded-t-lg bg-gradient-to-br from-[var(--color-dot-magenta)] via-[var(--color-dot-purple)] to-[var(--color-dot-turquoise)] p-12", children: [
|
|
1434
|
+
/* @__PURE__ */ jsx(
|
|
1435
|
+
"img",
|
|
1436
|
+
{
|
|
1437
|
+
src: imageDark,
|
|
1438
|
+
alt: title,
|
|
1439
|
+
className: "dark-mode-hidden h-full w-full object-contain transition-transform duration-300 group-hover:scale-105"
|
|
1440
|
+
}
|
|
1441
|
+
),
|
|
1442
|
+
/* @__PURE__ */ jsx(
|
|
1443
|
+
"img",
|
|
1444
|
+
{
|
|
1445
|
+
src: imageLight,
|
|
1446
|
+
alt: title,
|
|
1447
|
+
className: "dark-mode-visible h-full w-full object-contain transition-transform duration-300 group-hover:scale-105"
|
|
1448
|
+
}
|
|
1449
|
+
)
|
|
1450
|
+
] }),
|
|
1451
|
+
/* @__PURE__ */ jsxs("div", { className: "flex flex-1 flex-col p-6", children: [
|
|
1452
|
+
meta && /* @__PURE__ */ jsxs("div", { className: "mb-2 flex items-center gap-2 text-xs text-[var(--color-text-muted)]", children: [
|
|
1453
|
+
meta.author && /* @__PURE__ */ jsx(AuthorMeta, { author: meta.author }),
|
|
1454
|
+
meta.date && meta.author && /* @__PURE__ */ jsx("span", { children: "\u2022" }),
|
|
1455
|
+
meta.date && /* @__PURE__ */ jsx("span", { children: meta.date })
|
|
1456
|
+
] }),
|
|
1457
|
+
/* @__PURE__ */ jsx("h3", { className: "font-heading mb-2 text-xl font-semibold text-[var(--color-text-primary)]", children: title }),
|
|
1458
|
+
tagline && /* @__PURE__ */ jsx("p", { className: "mb-3 text-sm font-medium text-[var(--color-primary)]", children: tagline }),
|
|
1459
|
+
/* @__PURE__ */ jsx("p", { className: "mb-4 flex-1 text-sm leading-relaxed text-[var(--color-text-secondary)]", children: description }),
|
|
1460
|
+
tags && tags.length > 0 && /* @__PURE__ */ jsx("div", { className: "mt-auto flex flex-wrap gap-2 pt-4", children: tags.map((tag) => /* @__PURE__ */ jsx(
|
|
1461
|
+
"span",
|
|
1462
|
+
{
|
|
1463
|
+
className: "rounded-full border border-[var(--color-border)] bg-[var(--color-surface-muted)] px-3 py-1 text-xs font-medium text-[var(--color-text-secondary)]",
|
|
1464
|
+
children: tag
|
|
1465
|
+
},
|
|
1466
|
+
tag
|
|
1467
|
+
)) }),
|
|
1468
|
+
children
|
|
1469
|
+
] }),
|
|
1470
|
+
footerSlot
|
|
1471
|
+
]
|
|
1472
|
+
}
|
|
1473
|
+
);
|
|
1474
|
+
}
|
|
1364
1475
|
function BeforeAfter({ data }) {
|
|
1365
1476
|
const [sliderPosition, setSliderPosition] = useState(data.default_offset || 0.5);
|
|
1366
1477
|
const [isDragging, setIsDragging] = useState(false);
|
|
@@ -3041,6 +3152,6 @@ var easings = {
|
|
|
3041
3152
|
exit: "cubic-bezier(0.4, 0, 1, 1)"
|
|
3042
3153
|
};
|
|
3043
3154
|
|
|
3044
|
-
export { BeforeAfter, CTAButton, CaseStudyBreakdown, CodeBlock, CompactContactForm, ContactForm, ContentPage, FeatureShowcase, FullWidthImage, ImageGrid, ImageGridModal, IndustryGrid, layout_exports as Layout, MainNav, PageHero, patterns_exports as Patterns, ProblemStatement, ProcessSteps, ProcessTimeline, ProductCard, RelatedProjects, ServiceSection, SolutionSummary, StatBar, TeamCredits, TeamGrid, TerminalChrome, TerminalHero, TerminalWindow, Testimonial, TextBlock, ToastContainer as Toast, TopBanner, ui_exports as UI, VideoHero, VideoSection, colors, durations, easings, sectionPadding, spacing };
|
|
3155
|
+
export { AuthorMeta, BeforeAfter, CTAButton, CaseStudyBreakdown, CodeBlock, CompactContactForm, ContactForm, ContentPage, FeatureShowcase, FullWidthImage, ImageGrid, ImageGridModal, IndustryGrid, layout_exports as Layout, ListCard, MainNav, PageHero, patterns_exports as Patterns, ProblemStatement, ProcessSteps, ProcessTimeline, ProductCard, RelatedProjects, ServiceSection, SolutionSummary, StatBar, TeamCredits, TeamGrid, TerminalChrome, TerminalHero, TerminalWindow, Testimonial, TextBlock, ToastContainer as Toast, TopBanner, ui_exports as UI, VideoHero, VideoSection, colors, durations, easings, sectionPadding, spacing };
|
|
3045
3156
|
//# sourceMappingURL=index.js.map
|
|
3046
3157
|
//# sourceMappingURL=index.js.map
|