@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.
- package/README.md +32 -22
- package/dist/components/atoms/Button/BasicButton.d.ts +42 -0
- package/dist/components/atoms/Button/Button.d.ts +1 -0
- package/dist/components/atoms/Button/CreativeButton.d.ts +44 -0
- package/dist/components/effects/FloatingElement/FloatingElement.d.ts +21 -0
- package/dist/components/effects/ParallaxOnScroll/ParallaxOnScroll.d.ts +13 -0
- package/dist/components/effects/ScrollReveal/ScrollReveal.d.ts +61 -0
- package/dist/components/effects/ScrollSvg/ScrollSvg.d.ts +75 -0
- package/dist/components/effects/Typewriter/Typewriter.d.ts +57 -0
- package/dist/components/molecules/ProjectCard/BasicProjectCard.d.ts +7 -1
- package/dist/components/molecules/Timeline/BasicTimeline.d.ts +34 -0
- package/dist/components/molecules/Timeline/CreativeTimeline.d.ts +24 -0
- package/dist/components/molecules/Timeline/Timeline.d.ts +4 -0
- package/dist/components/organisms/ContentGrid/BasicContentGrid.d.ts +16 -1
- package/dist/components/organisms/Footer/CreativeFooter.d.ts +28 -0
- package/dist/components/organisms/Footer/Footer.d.ts +1 -0
- package/dist/components/organisms/Hero/BasicHero.d.ts +7 -4
- package/dist/components/organisms/Hero/CreativeHero.d.ts +57 -0
- package/dist/components/organisms/Hero/Hero.d.ts +1 -0
- package/dist/components/organisms/Navbar/BasicNavbar.d.ts +3 -1
- package/dist/components/organisms/Navbar/CreativeNavbar.d.ts +15 -0
- package/dist/components/organisms/Navbar/Navbar.d.ts +2 -0
- package/dist/components/organisms/ProfileSection/BasicProfileSection.d.ts +8 -5
- package/dist/components/organisms/ProfileSection/CreativeProfileSection.d.ts +36 -0
- package/dist/components/organisms/ProfileSection/ProfileSection.d.ts +1 -0
- package/dist/components/pages/PortfolioPage/PortfolioEffectsPage.d.ts +47 -0
- package/dist/components/pages/PortfolioPage/PortfolioPage.d.ts +33 -0
- package/dist/index.d.ts +30 -1
- package/dist/index.es.js +8560 -981
- package/dist/index.umd.js +144 -119
- package/dist/utils/color-utils.d.ts +28 -0
- package/package.json +5 -2
- package/dist/components/atoms/Button/ThreeDButton.d.ts +0 -2
package/README.md
CHANGED
|
@@ -1,37 +1,37 @@
|
|
|
1
|
-
#
|
|
1
|
+
# Design System
|
|
2
2
|
|
|
3
3
|
A modern, scalable, and accessible UI component library built to streamline frontend development.
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
**[View Documentation (Storybook)](https://IniguezMarc.github.io/design-system/)**
|
|
6
6
|
|
|
7
7
|
---
|
|
8
8
|
|
|
9
|
-
##
|
|
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
|
-
*
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
*
|
|
18
|
-
*
|
|
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
|
-
##
|
|
20
|
+
## Architecture: Atomic Design
|
|
21
21
|
|
|
22
22
|
The library is organized following the **Atomic Design** methodology to ensure modularity:
|
|
23
23
|
|
|
24
|
-
*
|
|
25
|
-
*
|
|
26
|
-
*
|
|
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
|
-
##
|
|
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
|
|
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
|
|
46
|
-
```
|
|
47
|
-
npm run storybook
|
|
44
|
+
npm run ds
|
|
48
45
|
```
|
|
49
46
|
Visit `http://localhost:6006` to view the library.
|
|
50
47
|
|
|
51
|
-
|
|
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';
|
|
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;
|
|
@@ -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;
|
|
@@ -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
|
+
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?:
|
|
15
|
-
title:
|
|
16
|
-
subtitle:
|
|
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;
|