@iniguezmarc/design-system 0.0.17 → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (33) hide show
  1. package/README.md +32 -22
  2. package/dist/components/atoms/Button/BasicButton.d.ts +42 -0
  3. package/dist/components/atoms/Button/Button.d.ts +1 -0
  4. package/dist/components/atoms/Button/CreativeButton.d.ts +44 -0
  5. package/dist/components/effects/FloatingElement/FloatingElement.d.ts +21 -0
  6. package/dist/components/effects/ParallaxOnScroll/ParallaxOnScroll.d.ts +13 -0
  7. package/dist/components/effects/ScrollReveal/ScrollReveal.d.ts +61 -0
  8. package/dist/components/effects/ScrollSvg/ScrollSvg.d.ts +75 -0
  9. package/dist/components/effects/Typewriter/Typewriter.d.ts +57 -0
  10. package/dist/components/molecules/ProjectCard/BasicProjectCard.d.ts +7 -1
  11. package/dist/components/molecules/Timeline/BasicTimeline.d.ts +34 -0
  12. package/dist/components/molecules/Timeline/CreativeTimeline.d.ts +24 -0
  13. package/dist/components/molecules/Timeline/Timeline.d.ts +4 -0
  14. package/dist/components/organisms/ContentGrid/BasicContentGrid.d.ts +16 -1
  15. package/dist/components/organisms/Footer/CreativeFooter.d.ts +28 -0
  16. package/dist/components/organisms/Footer/Footer.d.ts +1 -0
  17. package/dist/components/organisms/Hero/BasicHero.d.ts +7 -4
  18. package/dist/components/organisms/Hero/CreativeHero.d.ts +57 -0
  19. package/dist/components/organisms/Hero/Hero.d.ts +1 -0
  20. package/dist/components/organisms/Navbar/BasicNavbar.d.ts +3 -1
  21. package/dist/components/organisms/Navbar/CreativeNavbar.d.ts +15 -0
  22. package/dist/components/organisms/Navbar/Navbar.d.ts +2 -0
  23. package/dist/components/organisms/ProfileSection/BasicProfileSection.d.ts +8 -5
  24. package/dist/components/organisms/ProfileSection/CreativeProfileSection.d.ts +36 -0
  25. package/dist/components/organisms/ProfileSection/ProfileSection.d.ts +1 -0
  26. package/dist/components/pages/PortfolioPage/PortfolioEffectsPage.d.ts +47 -0
  27. package/dist/components/pages/PortfolioPage/PortfolioPage.d.ts +33 -0
  28. package/dist/index.d.ts +30 -1
  29. package/dist/index.es.js +8560 -981
  30. package/dist/index.umd.js +144 -119
  31. package/dist/utils/color-utils.d.ts +28 -0
  32. package/package.json +5 -2
  33. package/dist/components/atoms/Button/ThreeDButton.d.ts +0 -2
package/README.md CHANGED
@@ -1,37 +1,37 @@
1
- # 🎨 Design System
1
+ # Design System
2
2
 
3
3
  A modern, scalable, and accessible UI component library built to streamline frontend development.
4
4
 
5
- 🚀 **[View Documentation (Storybook)](https://IniguezMarc.github.io/design-system/)**
5
+ **[View Documentation (Storybook)](https://IniguezMarc.github.io/design-system/)**
6
6
 
7
7
  ---
8
8
 
9
- ## 🛠 Tech Stack & Tools
9
+ ## Tech Stack & Tools
10
10
 
11
11
  This project leverages a modern ecosystem to ensure performance, type safety, and developer experience:
12
12
 
13
- * **⚛️ React 18:** Library for building the component-based UI architecture.
14
- * **📘 TypeScript:** Provides static typing to catch errors early and improve code maintainability.
15
- * **⚡ Vite:** Next-generation frontend tooling for ultra-fast development and optimized builds.
16
- * **💨 Tailwind CSS (v3):** A utility-first CSS framework for rapid, responsive, and consistent styling without leaving the HTML.
17
- * **📕 Storybook:** An isolated environment to build, test, and document UI components independently from the main app.
18
- * **🚀 GitHub Pages:** Automated hosting for the static documentation via CI/CD pipelines.
13
+ * **React 19:** Library for building the component-based UI architecture.
14
+ * **TypeScript:** Provides static typing to catch errors early and improve code maintainability.
15
+ * **Vite:** Next-generation frontend tooling for ultra-fast development and optimized builds.
16
+ * **Tailwind CSS (v3):** A utility-first CSS framework for rapid, responsive, and consistent styling without leaving the HTML.
17
+ * **Storybook:** An isolated environment to build, test, and document UI components independently from the main app.
18
+ * **GitHub Pages:** Automated hosting for the static documentation via CI/CD pipelines.
19
19
 
20
- ## 🏗 Architecture: Atomic Design
20
+ ## Architecture: Atomic Design
21
21
 
22
22
  The library is organized following the **Atomic Design** methodology to ensure modularity:
23
23
 
24
- * **Atoms:** Basic building blocks (Buttons, Inputs, Typography).
25
- * **Molecules:** Groups of atoms functioning together (Project Cards, Form Groups).
26
- * **Organisms:** Complex UI sections (Responsive Grids, Navbars).
24
+ * **Atoms:** Basic building blocks (Buttons, Inputs, Typography).
25
+ * **Molecules:** Groups of atoms functioning together (Project Cards, Form Groups).
26
+ * **Organisms:** Complex UI sections (Responsive Grids, Navbars).
27
27
 
28
- ## 📦 Local Installation
28
+ ## Local Installation
29
29
 
30
30
  To clone and run this project on your local machine:
31
31
 
32
32
  1. **Clone the repository:**
33
33
  ```bash
34
- git clone [https://github.com/IniguezMarc/design-system.git](https://github.com/IniguezMarc/design-system.git)
34
+ git clone https://github.com/IniguezMarc/design-system.git
35
35
  cd design-system
36
36
  ```
37
37
 
@@ -40,15 +40,17 @@ To clone and run this project on your local machine:
40
40
  npm install
41
41
  ```
42
42
 
43
- 3. **Start Storybook:**
44
43
  ```bash
45
- npm run storybook
46
- ```
47
- npm run storybook
44
+ npm run ds
48
45
  ```
49
46
  Visit `http://localhost:6006` to view the library.
50
47
 
51
- ## 📦 Usage as a Package
48
+ 4. **Build the library:**
49
+ ```bash
50
+ npm run build
51
+ ```
52
+
53
+ ## Usage as a Package
52
54
 
53
55
  1. **Install the package:**
54
56
  ```bash
@@ -58,9 +60,8 @@ To clone and run this project on your local machine:
58
60
  2. **Import styles:**
59
61
  Import the CSS in your main entry file (e.g., `main.tsx` or `App.tsx`):
60
62
  ```tsx
61
- import '@iniguezmarc/design-system/dist/style.css'; // Adjust path if needed based on build output
63
+ import '@iniguezmarc/design-system/dist/style.css';
62
64
  ```
63
- *Note: If `style.css` is not generated, ensure Tailwind is configured to scan node_modules or exported correctly.*
64
65
 
65
66
  3. **Use components:**
66
67
  ```tsx
@@ -71,6 +72,15 @@ To clone and run this project on your local machine:
71
72
  }
72
73
  ```
73
74
 
75
+ 4. **Configure Tailwind (optional):**
76
+ Add the design system preset to your `tailwind.config.js`:
77
+ ```js
78
+ module.exports = {
79
+ presets: [require('@iniguezmarc/design-system/tailwind.preset')],
80
+ // ... your config
81
+ }
82
+ ```
83
+
74
84
  ---
75
85
 
76
86
  Created by **Marc Iñiguez**.
@@ -1,31 +1,73 @@
1
+ /**
2
+ * Custom CSS class slots for styling different parts of the button.
3
+ */
1
4
  export interface ButtonSlots {
5
+ /** Additional classes for the button container */
2
6
  container?: string;
7
+ /** Additional classes for the label wrapper */
3
8
  label?: string;
4
9
  }
10
+ /**
11
+ * Props for the BasicButton component.
12
+ */
5
13
  export interface ButtonProps {
14
+ /** Text displayed inside the button */
6
15
  label: string;
16
+ /** Visual style variant */
7
17
  variant?: 'primary' | 'secondary' | 'outline' | 'ghost';
18
+ /** Button size preset */
8
19
  size?: 'small' | 'medium' | 'large';
20
+ /** Click handler function */
9
21
  onClick?: () => void;
22
+ /** Additional CSS classes */
10
23
  className?: string;
24
+ /** Custom styling slots */
11
25
  customStyles?: ButtonSlots;
26
+ /** If provided, renders as an anchor link */
12
27
  href?: string;
28
+ /** Link target (used with href) */
13
29
  target?: string;
30
+ /** Primary variant background class */
14
31
  primaryColor?: string;
32
+ /** Primary variant hover background class */
15
33
  primaryHoverColor?: string;
34
+ /** Primary variant dark mode background class */
16
35
  darkPrimaryColor?: string;
36
+ /** Primary variant dark mode hover class */
17
37
  darkPrimaryHoverColor?: string;
38
+ /** Secondary variant background class */
18
39
  secondaryColor?: string;
40
+ /** Secondary variant hover class */
19
41
  secondaryHoverColor?: string;
42
+ /** Secondary variant dark mode background class */
20
43
  darkSecondaryColor?: string;
44
+ /** Secondary variant dark mode hover class */
21
45
  darkSecondaryHoverColor?: string;
46
+ /** Outline variant text/border class */
22
47
  outlineColor?: string;
48
+ /** Outline variant hover class */
23
49
  outlineHoverColor?: string;
50
+ /** Outline variant dark mode text/border class */
24
51
  darkOutlineColor?: string;
52
+ /** Outline variant dark mode hover class */
25
53
  darkOutlineHoverColor?: string;
54
+ /** Ghost variant text/bg class */
26
55
  ghostColor?: string;
56
+ /** Ghost variant hover class */
27
57
  ghostHoverColor?: string;
58
+ /** Ghost variant dark mode class */
28
59
  darkGhostColor?: string;
60
+ /** Ghost variant dark mode hover class */
29
61
  darkGhostHoverColor?: string;
30
62
  }
63
+ /**
64
+ * A versatile button component with multiple variants and full color customization.
65
+ * Supports both button and anchor rendering based on the `href` prop.
66
+ *
67
+ * @example
68
+ * ```tsx
69
+ * <BasicButton label="Click me" variant="primary" onClick={() => {}} />
70
+ * <BasicButton label="Link" href="/page" target="_blank" />
71
+ * ```
72
+ */
31
73
  export declare const BasicButton: ({ label, variant, size, onClick, className, customStyles, href, target, primaryColor, primaryHoverColor, darkPrimaryColor, darkPrimaryHoverColor, secondaryColor, secondaryHoverColor, darkSecondaryColor, darkSecondaryHoverColor, outlineColor, outlineHoverColor, darkOutlineColor, darkOutlineHoverColor, ghostColor, ghostHoverColor, darkGhostColor, darkGhostHoverColor, }: ButtonProps) => import("react/jsx-runtime").JSX.Element;
@@ -1,3 +1,4 @@
1
1
  import { BasicButton, ButtonProps } from './BasicButton';
2
2
  export { BasicButton as Button };
3
3
  export type { ButtonProps };
4
+ export * from './CreativeButton';
@@ -0,0 +1,44 @@
1
+ import { default as React } from 'react';
2
+ import { HTMLMotionProps } from 'framer-motion';
3
+ /**
4
+ * Props for the CreativeButton component.
5
+ * Extends Framer Motion's button props for animation support.
6
+ */
7
+ export interface CreativeButtonProps extends HTMLMotionProps<"button"> {
8
+ /** Visual variant style */
9
+ variant?: 'magnetic' | 'glow' | 'cyber' | 'shimmer' | 'threeD' | 'delete-expand' | 'arrow-slide' | 'pushable' | 'retro-shadow';
10
+ /** Button text */
11
+ label: string;
12
+ /** Default/fallback background color (hex) */
13
+ primaryColor?: string;
14
+ /** Explicit background override (hex) */
15
+ customColor?: string;
16
+ /** Click animation color (hex) */
17
+ animationColor?: string;
18
+ /** Custom text color (hex) */
19
+ textColor?: string;
20
+ /** Dark mode fallback color (hex) */
21
+ darkPrimaryColor?: string;
22
+ /** Dark mode background override (hex) */
23
+ darkCustomColor?: string;
24
+ /** Dark mode animation color (hex) */
25
+ darkAnimationColor?: string;
26
+ /** Dark mode text color (hex) */
27
+ darkTextColor?: string;
28
+ /** Click animation style */
29
+ clickAnimation?: 'burst' | 'ring' | 'pulse' | 'none';
30
+ /** Optional icon element */
31
+ icon?: React.ReactNode;
32
+ }
33
+ /**
34
+ * A creative button component with 9 unique animated variants.
35
+ * Features magnetic effects, glow, cyber styling, shimmer, 3D depth,
36
+ * expand animations, arrow slides, pushable depth, and retro shadows.
37
+ *
38
+ * @example
39
+ * ```tsx
40
+ * <CreativeButton label="Glow" variant="glow" primaryColor="#8b5cf6" />
41
+ * <CreativeButton label="Magnetic" variant="magnetic" clickAnimation="ring" />
42
+ * ```
43
+ */
44
+ export declare const CreativeButton: React.FC<CreativeButtonProps>;
@@ -0,0 +1,21 @@
1
+ import { ReactNode } from 'react';
2
+ export interface FloatingElementProps {
3
+ children: ReactNode;
4
+ /**
5
+ * Duration of one full float cycle in seconds.
6
+ * @default 3
7
+ */
8
+ duration?: number;
9
+ /**
10
+ * Vertical floating distance in pixels.
11
+ * @default 15
12
+ */
13
+ yOffset?: number;
14
+ /**
15
+ * Delay before animation starts (seconds).
16
+ * @default 0
17
+ */
18
+ delay?: number;
19
+ className?: string;
20
+ }
21
+ export declare const FloatingElement: ({ children, duration, yOffset, delay, className, }: FloatingElementProps) => import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,13 @@
1
+ import { ReactNode } from 'react';
2
+ export interface ParallaxOnScrollProps {
3
+ children: ReactNode;
4
+ /**
5
+ * Parallax speed factor.
6
+ * Positive values move slower than scroll (adding depth).
7
+ * Negative values move faster/opposite to scroll.
8
+ * @default 0.5
9
+ */
10
+ speed?: number;
11
+ className?: string;
12
+ }
13
+ export declare const ParallaxOnScroll: ({ children, speed, className, }: ParallaxOnScrollProps) => import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,61 @@
1
+ import { ReactNode } from 'react';
2
+ export interface ScrollRevealProps {
3
+ children: ReactNode;
4
+ /**
5
+ * The base animation style.
6
+ * @default 'fade'
7
+ */
8
+ base?: 'fade' | 'slide' | 'zoom' | 'rotate';
9
+ /**
10
+ * Direction of the entrance.
11
+ * @default 'up'
12
+ */
13
+ direction?: 'up' | 'down' | 'left' | 'right' | 'none';
14
+ /**
15
+ * Distance of movement in pixels.
16
+ * @default 20
17
+ */
18
+ distance?: number;
19
+ /**
20
+ * Whether to apply a blur effect (aesthetic mist).
21
+ * @default true
22
+ */
23
+ blur?: boolean;
24
+ /**
25
+ * Duration of the animation in seconds.
26
+ * @default 0.6
27
+ */
28
+ duration?: number;
29
+ /**
30
+ * Delay before animation starts in seconds.
31
+ * @default 0
32
+ */
33
+ delay?: number;
34
+ /**
35
+ * Amount of element visible before triggering (0 to 1).
36
+ * @default 0.2
37
+ */
38
+ threshold?: number;
39
+ /**
40
+ * Whether to animate only once.
41
+ * @default true
42
+ */
43
+ once?: boolean;
44
+ /**
45
+ * Custom className for the wrapper.
46
+ */
47
+ className?: string;
48
+ }
49
+ /**
50
+ * A scroll-triggered reveal animation wrapper using Framer Motion.
51
+ * Supports fade, slide, zoom, and rotate animations with customizable
52
+ * direction, distance, blur, and timing.
53
+ *
54
+ * @example
55
+ * ```tsx
56
+ * <ScrollReveal base="slide" direction="up" distance={30}>
57
+ * <Card />
58
+ * </ScrollReveal>
59
+ * ```
60
+ */
61
+ export declare const ScrollReveal: ({ children, base, direction, distance, blur, duration, delay, threshold, once, className, }: ScrollRevealProps) => import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,75 @@
1
+ export interface ScrollSvgProps {
2
+ /**
3
+ * The SVG path data (d attribute).
4
+ */
5
+ path: string;
6
+ /**
7
+ * ViewBox for the SVG.
8
+ * @default "0 0 100 100"
9
+ */
10
+ viewBox?: string;
11
+ /**
12
+ * Stroke color.
13
+ * @default "currentColor"
14
+ */
15
+ strokeColor?: string;
16
+ /**
17
+ * Stroke width.
18
+ * @default 2
19
+ */
20
+ strokeWidth?: number;
21
+ /**
22
+ * Whether to add a neon glow effect.
23
+ * @default false
24
+ */
25
+ glow?: boolean;
26
+ /**
27
+ * Whether the line should be dashed.
28
+ * @default false
29
+ */
30
+ dashed?: boolean;
31
+ /**
32
+ * Additional classes for the container.
33
+ */
34
+ className?: string;
35
+ /**
36
+ * Optional gradient colors [start, end]. If provided, overrides strokeColor.
37
+ */
38
+ gradient?: [string, string];
39
+ /**
40
+ * Where in the viewport the animation should complete.
41
+ * 'center' = finishes when bottom of SVG hits center of screen.
42
+ * 'bottom' = finishes when bottom of SVG hits bottom of screen.
43
+ * 'top' = finishes when bottom of SVG hits top of screen (default).
44
+ */
45
+ animationEnd?: 'center' | 'bottom' | 'top';
46
+ /**
47
+ * Optional inline styles.
48
+ */
49
+ style?: React.CSSProperties;
50
+ /**
51
+ * Custom scroll offsets for Framer Motion's useScroll.
52
+ * Overrides animationEnd logic if provided.
53
+ * Example: ['start end', 'end center']
54
+ */
55
+ scrollOffset?: any;
56
+ /**
57
+ * Speed multiplier for the drawing animation relative to scroll.
58
+ * 1 = 1:1 with scroll.
59
+ * > 1 = Faster (completes earlier).
60
+ * < 1 = Slower (might not complete).
61
+ * @default 1
62
+ */
63
+ speed?: number;
64
+ /**
65
+ * Whether to animate the line drawing from 0 to the current scroll position on mount.
66
+ * @default true
67
+ */
68
+ animateOnMount?: boolean;
69
+ /**
70
+ * SVG preserveAspectRatio attribute.
71
+ * Pass "none" to stretch the SVG to fill the container.
72
+ */
73
+ preserveAspectRatio?: string;
74
+ }
75
+ export declare const ScrollSvg: ({ path, viewBox, strokeColor, strokeWidth, glow, dashed, className, style, gradient, animationEnd, scrollOffset, speed, animateOnMount, preserveAspectRatio, }: ScrollSvgProps) => import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,57 @@
1
+ export interface TypewriterProps {
2
+ /**
3
+ * The text to display.
4
+ */
5
+ text: string;
6
+ /**
7
+ * Speed of typing in ms per character.
8
+ * @default 50
9
+ */
10
+ speed?: number;
11
+ /**
12
+ * Delay before starting in ms.
13
+ * @default 0
14
+ */
15
+ delay?: number;
16
+ /**
17
+ * Whether to show a blinking cursor.
18
+ * @default true
19
+ */
20
+ cursor?: boolean;
21
+ /**
22
+ * Whether to start only when in view.
23
+ * @default true
24
+ */
25
+ startWhenInView?: boolean;
26
+ /**
27
+ * Additional classes for the cursor
28
+ */
29
+ cursorClassName?: string;
30
+ /**
31
+ * Inline styles for the cursor
32
+ */
33
+ cursorStyle?: import('react').CSSProperties;
34
+ /**
35
+ * Additional classes for the container.
36
+ */
37
+ className?: string;
38
+ /**
39
+ * Inline styles for the container.
40
+ */
41
+ style?: import('react').CSSProperties;
42
+ /**
43
+ * Element type to render as.
44
+ * @default "span"
45
+ */
46
+ as?: 'h1' | 'h2' | 'h3' | 'h4' | 'div' | 'span' | 'p';
47
+ }
48
+ /**
49
+ * An animated typewriter text effect that types out characters one by one.
50
+ * Supports custom speed, delay, cursor styling, and in-view triggering.
51
+ *
52
+ * @example
53
+ * ```tsx
54
+ * <Typewriter text="Hello World" speed={80} cursor={true} />
55
+ * ```
56
+ */
57
+ export declare const Typewriter: ({ text, speed, delay, cursor, startWhenInView, className, style, cursorClassName, cursorStyle, as: Component, }: TypewriterProps) => import("react/jsx-runtime").JSX.Element;
@@ -24,5 +24,11 @@ export interface BasicProjectCardProps {
24
24
  /** Hooks to customize internal style parts */
25
25
  customStyles?: ProjectCardSlots;
26
26
  className?: string;
27
+ renderAction?: (props: {
28
+ label?: string;
29
+ onClick?: () => void;
30
+ href?: string;
31
+ target?: string;
32
+ }) => React.ReactNode;
27
33
  }
28
- export declare const BasicProjectCard: ({ title, description, image, tags, orientation, actionLabel, projectUrl, linkTarget, onViewProject, customStyles, className }: BasicProjectCardProps) => import("react/jsx-runtime").JSX.Element;
34
+ export declare const BasicProjectCard: ({ title, description, image, tags, orientation, actionLabel, projectUrl, linkTarget, onViewProject, customStyles, className, renderAction }: BasicProjectCardProps) => import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,34 @@
1
+ import { ReactNode } from 'react';
2
+ export interface TimelineItem {
3
+ id: string;
4
+ date: string;
5
+ title: string;
6
+ subtitle?: string;
7
+ description?: string;
8
+ tags?: string[];
9
+ }
10
+ export interface BasicTimelineProps {
11
+ items: TimelineItem[];
12
+ layout?: 'left' | 'center' | 'right';
13
+ renderIcon?: (item: TimelineItem, index: number) => ReactNode;
14
+ className?: string;
15
+ lineColor?: string;
16
+ darkLineColor?: string;
17
+ dotColor?: string;
18
+ darkDotColor?: string;
19
+ cardBackgroundColor?: string;
20
+ darkCardBackgroundColor?: string;
21
+ textColor?: string;
22
+ darkTextColor?: string;
23
+ dateColor?: string;
24
+ darkDateColor?: string;
25
+ subtitleColor?: string;
26
+ darkSubtitleColor?: string;
27
+ descColor?: string;
28
+ darkDescColor?: string;
29
+ tagBgColor?: string;
30
+ darkTagBgColor?: string;
31
+ tagTextColor?: string;
32
+ darkTagTextColor?: string;
33
+ }
34
+ export declare const BasicTimeline: ({ items, layout, renderIcon, className, lineColor, darkLineColor, dotColor, darkDotColor, cardBackgroundColor, darkCardBackgroundColor, textColor, darkTextColor, dateColor, darkDateColor, subtitleColor, darkSubtitleColor, descColor, darkDescColor, tagBgColor, darkTagBgColor, tagTextColor, darkTagTextColor, }: BasicTimelineProps) => import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,24 @@
1
+ import { TimelineItem } from './BasicTimeline';
2
+ export interface CreativeTimelineProps {
3
+ items: TimelineItem[];
4
+ title?: string;
5
+ subtitle?: string;
6
+ backgroundColor?: string;
7
+ darkBackgroundColor?: string;
8
+ lineColor?: string;
9
+ dotColor?: string;
10
+ cardBackgroundColor?: string;
11
+ titleColor?: string;
12
+ darkTitleColor?: string;
13
+ subtitleColor?: string;
14
+ darkSubtitleColor?: string;
15
+ dateColor?: string;
16
+ darkDateColor?: string;
17
+ descColor?: string;
18
+ darkDescColor?: string;
19
+ tagBgColor?: string;
20
+ darkTagBgColor?: string;
21
+ tagTextColor?: string;
22
+ darkTagTextColor?: string;
23
+ }
24
+ export declare const CreativeTimeline: ({ items, title, subtitle, backgroundColor, darkBackgroundColor, lineColor, dotColor, cardBackgroundColor, titleColor, darkTitleColor, subtitleColor, darkSubtitleColor, dateColor, darkDateColor, descColor, darkDescColor, tagBgColor, darkTagBgColor, tagTextColor, darkTagTextColor, }: CreativeTimelineProps) => import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,4 @@
1
+ import { BasicTimelineProps, TimelineItem } from './BasicTimeline';
2
+ export declare const Timeline: (props: BasicTimelineProps) => import("react/jsx-runtime").JSX.Element;
3
+ export * from './CreativeTimeline';
4
+ export type { BasicTimelineProps, TimelineItem };
@@ -1,3 +1,5 @@
1
+ import { ProjectCardSlots } from '../../molecules/ProjectCard/BasicProjectCard';
2
+ import { ReactNode } from 'react';
1
3
  export interface GridItem {
2
4
  id: string;
3
5
  title: string;
@@ -17,9 +19,22 @@ export interface BasicContentGridProps {
17
19
  itemButtonLabel?: string;
18
20
  onItemClick?: (id: string) => void;
19
21
  customStyles?: ContentGridSlots;
22
+ /**
23
+ * Custom styles passed down to each ProjectCard
24
+ */
25
+ cardCustomStyles?: ProjectCardSlots;
26
+ /**
27
+ * Optional wrapper for items, allowing injection of animations (e.g. ScrollReveal)
28
+ */
29
+ renderItemWrapper?: (children: ReactNode, item: GridItem, index: number) => ReactNode;
20
30
  backgroundColor?: string;
21
31
  darkBackgroundColor?: string;
22
32
  titleColor?: string;
23
33
  darkTitleColor?: string;
34
+ /**
35
+ * Optional renderer for the action button of each item
36
+ */
37
+ renderItemAction?: (item: GridItem) => React.ReactNode;
38
+ children?: ReactNode;
24
39
  }
25
- export declare const BasicContentGrid: ({ title, items, layout, itemButtonLabel, onItemClick, customStyles, backgroundColor, darkBackgroundColor, titleColor, darkTitleColor, }: BasicContentGridProps) => import("react/jsx-runtime").JSX.Element;
40
+ export declare const BasicContentGrid: ({ title, items, layout, itemButtonLabel, onItemClick, customStyles, cardCustomStyles, renderItemWrapper, backgroundColor, darkBackgroundColor, titleColor, darkTitleColor, renderItemAction, children }: BasicContentGridProps) => import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,28 @@
1
+ import { ReactNode } from 'react';
2
+ import { BasicFooterProps } from './BasicFooter';
3
+ export interface CreativeFooterProps extends BasicFooterProps {
4
+ /** Whether to show ambient background blobs */
5
+ ambientBackground?: boolean;
6
+ /** Enable glassmorphism (transparent background) */
7
+ glass?: boolean;
8
+ /** Optional Large CTA section content */
9
+ ctaTitle?: ReactNode;
10
+ ctaSubtitle?: ReactNode;
11
+ ctaAction?: {
12
+ label: string;
13
+ onClick: () => void;
14
+ };
15
+ blobColors?: {
16
+ primary: string;
17
+ secondary: string;
18
+ };
19
+ ctaTitleColor?: string;
20
+ darkCtaTitleColor?: string;
21
+ ctaSubtitleColor?: string;
22
+ darkCtaSubtitleColor?: string;
23
+ ctaBorderColor?: string;
24
+ darkCtaBorderColor?: string;
25
+ }
26
+ export declare const CreativeFooter: ({ ambientBackground, glass, ctaTitle, ctaSubtitle, ctaAction, blobColors, className, ctaTitleColor, darkCtaTitleColor, ctaSubtitleColor, darkCtaSubtitleColor, ctaBorderColor, darkCtaBorderColor, ...basicProps }: CreativeFooterProps & {
27
+ className?: string;
28
+ }) => import("react/jsx-runtime").JSX.Element;
@@ -1,3 +1,4 @@
1
1
  import { BasicFooter, BasicFooterProps, SocialLink, FooterLink, FooterSlots } from './BasicFooter';
2
2
  export { BasicFooter as Footer };
3
+ export * from './CreativeFooter';
3
4
  export type { BasicFooterProps as FooterProps, SocialLink, FooterLink, FooterSlots };
@@ -1,3 +1,4 @@
1
+ import { ReactNode } from 'react';
1
2
  export interface HeroAction {
2
3
  label: string;
3
4
  onClick: () => void;
@@ -11,12 +12,14 @@ export interface HeroSlots {
11
12
  imageWrapper?: string;
12
13
  }
13
14
  export interface BasicHeroProps {
14
- greeting?: string;
15
- title: string;
16
- subtitle: string;
15
+ greeting?: ReactNode;
16
+ title: ReactNode;
17
+ subtitle: ReactNode;
17
18
  imageUrl?: string;
18
19
  actions?: HeroAction[];
19
20
  customStyles?: HeroSlots;
21
+ /** Optional background elements (for effects) */
22
+ renderBackground?: () => ReactNode;
20
23
  backgroundColor?: string;
21
24
  darkBackgroundColor?: string;
22
25
  greetingColor?: string;
@@ -26,4 +29,4 @@ export interface BasicHeroProps {
26
29
  subtitleColor?: string;
27
30
  darkSubtitleColor?: string;
28
31
  }
29
- export declare const BasicHero: ({ greeting, title, subtitle, imageUrl, actions, customStyles, backgroundColor, darkBackgroundColor, greetingColor, darkGreetingColor, titleColor, darkTitleColor, subtitleColor, darkSubtitleColor, }: BasicHeroProps) => import("react/jsx-runtime").JSX.Element;
32
+ export declare const BasicHero: ({ greeting, title, subtitle, imageUrl, actions, customStyles, renderBackground, backgroundColor, darkBackgroundColor, greetingColor, darkGreetingColor, titleColor, darkTitleColor, subtitleColor, darkSubtitleColor, }: BasicHeroProps) => import("react/jsx-runtime").JSX.Element;