@nimblegiant/stilts 0.2.0-alpha.1 → 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 -11
- 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 -12
- package/dist/index.js.map +1 -1
- package/package.json +3 -3
- package/src/components/layout/MainNav.tsx +39 -17
- 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/styles/{styles/animations.css → animations.css} +0 -0
- /package/dist/styles/{styles/base.css → base.css} +0 -0
- /package/dist/styles/{styles/index.css → index.css} +0 -0
- /package/dist/styles/{styles/tokens.css → tokens.css} +0 -0
- /package/dist/styles/{styles/utilities.css → utilities.css} +0 -0
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,12 +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: "/contact", label: "CONTACT" }
|
|
70
|
-
];
|
|
71
69
|
const isActive = (href) => {
|
|
72
70
|
if (href === "/") return currentPath === "/";
|
|
73
71
|
return currentPath.startsWith(href);
|
|
@@ -169,7 +167,9 @@ function MainNav({ currentPath, isPortfolioPage = false }) {
|
|
|
169
167
|
"li",
|
|
170
168
|
{
|
|
171
169
|
className: `transition-all duration-300 ${isMenuOpen ? "translate-x-0 opacity-100" : "translate-x-8 opacity-0"} `,
|
|
172
|
-
style: {
|
|
170
|
+
style: {
|
|
171
|
+
transitionDelay: isMenuOpen ? `${index * 50 + 100}ms` : "0ms"
|
|
172
|
+
},
|
|
173
173
|
children: /* @__PURE__ */ jsxs(
|
|
174
174
|
"a",
|
|
175
175
|
{
|
|
@@ -295,6 +295,7 @@ function TopBanner() {
|
|
|
295
295
|
// src/components/ui/index.ts
|
|
296
296
|
var ui_exports = {};
|
|
297
297
|
__export(ui_exports, {
|
|
298
|
+
AuthorMeta: () => AuthorMeta,
|
|
298
299
|
Toast: () => ToastContainer
|
|
299
300
|
});
|
|
300
301
|
var icons = {
|
|
@@ -396,6 +397,30 @@ function ToastContainer() {
|
|
|
396
397
|
}
|
|
397
398
|
);
|
|
398
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
|
+
}
|
|
399
424
|
|
|
400
425
|
// src/components/patterns/index.ts
|
|
401
426
|
var patterns_exports = {};
|
|
@@ -405,6 +430,7 @@ __export(patterns_exports, {
|
|
|
405
430
|
ContentPage: () => ContentPage,
|
|
406
431
|
FeatureShowcase: () => FeatureShowcase,
|
|
407
432
|
IndustryGrid: () => IndustryGrid,
|
|
433
|
+
ListCard: () => ListCard,
|
|
408
434
|
PageHero: () => PageHero,
|
|
409
435
|
ProcessSteps: () => ProcessSteps,
|
|
410
436
|
ProductCard: () => ProductCard,
|
|
@@ -816,9 +842,14 @@ function IndustryGrid({ industries, title, cols = 3 }) {
|
|
|
816
842
|
)) })
|
|
817
843
|
] }) });
|
|
818
844
|
}
|
|
819
|
-
function ContentPage({
|
|
845
|
+
function ContentPage({
|
|
846
|
+
title,
|
|
847
|
+
subtitle,
|
|
848
|
+
lastUpdated,
|
|
849
|
+
children
|
|
850
|
+
}) {
|
|
820
851
|
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
821
|
-
/* @__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: [
|
|
822
853
|
/* @__PURE__ */ jsx("h1", { className: "mb-4 text-4xl font-bold text-[var(--color-text-primary)] md:text-5xl", children: title }),
|
|
823
854
|
subtitle && /* @__PURE__ */ jsx("h2", { className: "mb-2 text-xl text-[var(--color-text-secondary)]", children: subtitle }),
|
|
824
855
|
lastUpdated && /* @__PURE__ */ jsxs("p", { className: "text-[var(--color-text-muted)]", children: [
|
|
@@ -826,7 +857,7 @@ function ContentPage({ title, subtitle, lastUpdated, children }) {
|
|
|
826
857
|
lastUpdated
|
|
827
858
|
] })
|
|
828
859
|
] }) }),
|
|
829
|
-
/* @__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 }) }) })
|
|
830
861
|
] });
|
|
831
862
|
}
|
|
832
863
|
function useMultiLineTypewriter(lines, typingSpeed = 20, initialDelay = 800, isVisible = true) {
|
|
@@ -1360,6 +1391,87 @@ var FeatureShowcase = ({
|
|
|
1360
1391
|
)) })
|
|
1361
1392
|
] }) });
|
|
1362
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
|
+
}
|
|
1363
1475
|
function BeforeAfter({ data }) {
|
|
1364
1476
|
const [sliderPosition, setSliderPosition] = useState(data.default_offset || 0.5);
|
|
1365
1477
|
const [isDragging, setIsDragging] = useState(false);
|
|
@@ -3040,6 +3152,6 @@ var easings = {
|
|
|
3040
3152
|
exit: "cubic-bezier(0.4, 0, 1, 1)"
|
|
3041
3153
|
};
|
|
3042
3154
|
|
|
3043
|
-
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 };
|
|
3044
3156
|
//# sourceMappingURL=index.js.map
|
|
3045
3157
|
//# sourceMappingURL=index.js.map
|