aura-ui-library 1.0.11 → 1.0.13
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +916 -28
- package/dist/index.mjs +946 -47
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -31,7 +31,10 @@ var index_exports = {};
|
|
|
31
31
|
__export(index_exports, {
|
|
32
32
|
Button: () => Button,
|
|
33
33
|
Carousel: () => Carousel,
|
|
34
|
+
Footer: () => Footer,
|
|
35
|
+
Grid: () => Grid,
|
|
34
36
|
Image: () => Image,
|
|
37
|
+
ImageEffectScrolling: () => ImageEffectScrolling,
|
|
35
38
|
Navbar: () => Navbar,
|
|
36
39
|
PinterestGrid: () => PinterestGrid,
|
|
37
40
|
ProductCard: () => ProductCard,
|
|
@@ -39,6 +42,7 @@ __export(index_exports, {
|
|
|
39
42
|
SideBar: () => SideBar,
|
|
40
43
|
Skills: () => Skills,
|
|
41
44
|
Spotlight: () => Spotlight,
|
|
45
|
+
Testimonials: () => Testimonials,
|
|
42
46
|
TextImage: () => TextImage,
|
|
43
47
|
TextWriting: () => TextWriting
|
|
44
48
|
});
|
|
@@ -69,7 +73,14 @@ var Button = ({
|
|
|
69
73
|
const buttonRef = (0, import_react.useRef)(null);
|
|
70
74
|
const textRef = (0, import_react.useRef)(null);
|
|
71
75
|
const iconRef = (0, import_react.useRef)(null);
|
|
72
|
-
const
|
|
76
|
+
const inRouter = (0, import_react_router_dom.useInRouterContext)();
|
|
77
|
+
const navigate = inRouter ? (0, import_react_router_dom.useNavigate)() : null;
|
|
78
|
+
const handleNavigate = (path) => {
|
|
79
|
+
if (path) {
|
|
80
|
+
if (navigate) navigate(path);
|
|
81
|
+
else window.location.assign(path);
|
|
82
|
+
}
|
|
83
|
+
};
|
|
73
84
|
(0, import_react.useEffect)(() => {
|
|
74
85
|
const ctx = import_gsap.gsap.context(() => {
|
|
75
86
|
import_gsap.gsap.from(buttonRef.current, {
|
|
@@ -128,7 +139,7 @@ var Button = ({
|
|
|
128
139
|
filter: "brightness(1.1)",
|
|
129
140
|
duration: 0.1
|
|
130
141
|
});
|
|
131
|
-
if (to)
|
|
142
|
+
if (to) handleNavigate(to);
|
|
132
143
|
if (onClick) onClick(e);
|
|
133
144
|
};
|
|
134
145
|
const Icon = IconName ? FiIcons[IconName] : null;
|
|
@@ -2756,6 +2767,7 @@ var TextImage = ({
|
|
|
2756
2767
|
textColor = "#ffffff",
|
|
2757
2768
|
fontSize = "clamp(48px, 8vw, 120px)",
|
|
2758
2769
|
fontWeight = "900",
|
|
2770
|
+
imageHeight = "1em",
|
|
2759
2771
|
animationDuration = 1.2,
|
|
2760
2772
|
easing = "power4.out"
|
|
2761
2773
|
}) => {
|
|
@@ -2838,52 +2850,927 @@ var TextImage = ({
|
|
|
2838
2850
|
display: "inline-block",
|
|
2839
2851
|
willChange: "transform, opacity"
|
|
2840
2852
|
},
|
|
2841
|
-
imageWrap: (shape) =>
|
|
2842
|
-
|
|
2843
|
-
|
|
2844
|
-
|
|
2845
|
-
|
|
2846
|
-
|
|
2847
|
-
|
|
2848
|
-
|
|
2849
|
-
|
|
2850
|
-
|
|
2851
|
-
|
|
2852
|
-
|
|
2853
|
+
imageWrap: (shape, size, radius) => {
|
|
2854
|
+
const h = size || imageHeight;
|
|
2855
|
+
let br = radius;
|
|
2856
|
+
if (!br) {
|
|
2857
|
+
if (shape === "circle") br = "50%";
|
|
2858
|
+
else if (shape === "pill") br = "100px";
|
|
2859
|
+
else if (shape === "rounded") br = "24px";
|
|
2860
|
+
else if (shape === "square") br = "8px";
|
|
2861
|
+
else br = "0px";
|
|
2862
|
+
}
|
|
2863
|
+
let clipPath = "none";
|
|
2864
|
+
if (shape === "diamond") clipPath = "polygon(50% 0%, 100% 50%, 50% 100%, 0% 50%)";
|
|
2865
|
+
if (shape === "hexagon") clipPath = "polygon(25% 0%, 75% 0%, 100% 50%, 75% 100%, 25% 100%, 0% 50%)";
|
|
2866
|
+
return {
|
|
2867
|
+
display: "inline-block",
|
|
2868
|
+
height: h,
|
|
2869
|
+
aspectRatio: shape === "pill" ? "2/1" : "1/1",
|
|
2870
|
+
margin: "0 0.1em",
|
|
2871
|
+
borderRadius: br,
|
|
2872
|
+
clipPath,
|
|
2873
|
+
overflow: "hidden",
|
|
2874
|
+
border: `2px solid rgba(255,255,255,0.1)`,
|
|
2875
|
+
cursor: "pointer",
|
|
2876
|
+
willChange: "transform, opacity",
|
|
2877
|
+
verticalAlign: "middle"
|
|
2878
|
+
};
|
|
2879
|
+
},
|
|
2853
2880
|
image: {
|
|
2854
2881
|
width: "100%",
|
|
2855
2882
|
height: "100%",
|
|
2856
2883
|
objectFit: "cover"
|
|
2857
2884
|
}
|
|
2858
2885
|
};
|
|
2859
|
-
return /* @__PURE__ */ import_react12.default.createElement("div", { ref: containerRef, style: styles.container }, segments.map(
|
|
2860
|
-
|
|
2861
|
-
|
|
2862
|
-
|
|
2863
|
-
|
|
2864
|
-
|
|
2865
|
-
|
|
2866
|
-
|
|
2867
|
-
|
|
2868
|
-
|
|
2886
|
+
return /* @__PURE__ */ import_react12.default.createElement("div", { ref: containerRef, style: styles.container }, segments.map((seg, i) => {
|
|
2887
|
+
const isString = typeof seg === "string";
|
|
2888
|
+
const type = isString ? "text" : seg.type || (seg.image ? "image" : "text");
|
|
2889
|
+
const value = isString ? seg : seg.value || seg.text || seg.image;
|
|
2890
|
+
if (type === "text") {
|
|
2891
|
+
return /* @__PURE__ */ import_react12.default.createElement(
|
|
2892
|
+
"span",
|
|
2893
|
+
{
|
|
2894
|
+
key: i,
|
|
2895
|
+
ref: (el) => segmentRefs.current[i] = el,
|
|
2896
|
+
style: styles.text
|
|
2897
|
+
},
|
|
2898
|
+
value
|
|
2899
|
+
);
|
|
2900
|
+
}
|
|
2901
|
+
return /* @__PURE__ */ import_react12.default.createElement(
|
|
2869
2902
|
"div",
|
|
2870
2903
|
{
|
|
2871
2904
|
key: i,
|
|
2872
2905
|
ref: (el) => segmentRefs.current[i] = el,
|
|
2873
|
-
style: styles.imageWrap(seg.shape),
|
|
2906
|
+
style: styles.imageWrap(seg.shape, seg.size, seg.radius),
|
|
2874
2907
|
onMouseEnter: (e) => handleImageHover(e, i),
|
|
2875
2908
|
onMouseLeave: () => handleImageLeave(i),
|
|
2876
2909
|
onClick: () => handleNavigate(seg.path)
|
|
2877
2910
|
},
|
|
2878
|
-
/* @__PURE__ */ import_react12.default.createElement("img", { src:
|
|
2879
|
-
)
|
|
2880
|
-
));
|
|
2911
|
+
/* @__PURE__ */ import_react12.default.createElement("img", { src: value, alt: "accent", style: styles.image })
|
|
2912
|
+
);
|
|
2913
|
+
}));
|
|
2914
|
+
};
|
|
2915
|
+
|
|
2916
|
+
// src/components/Grid/Grid.jsx
|
|
2917
|
+
var import_react13 = __toESM(require("react"));
|
|
2918
|
+
var import_react_router_dom11 = require("react-router-dom");
|
|
2919
|
+
var import_gsap13 = require("gsap");
|
|
2920
|
+
var import_fi12 = require("react-icons/fi");
|
|
2921
|
+
var Grid = ({
|
|
2922
|
+
items = [
|
|
2923
|
+
{ id: 1, title: "Architecture", description: "Deep neural networks for vision.", icon: /* @__PURE__ */ import_react13.default.createElement(import_fi12.FiLayers, null), span: "row-2", color: "#6366f1", image: "https://images.unsplash.com/photo-1620641788421-7a1c342ea42e?auto=format&fit=crop&q=80&w=800" },
|
|
2924
|
+
{ id: 2, title: "Design", description: "Editorial interfaces.", icon: /* @__PURE__ */ import_react13.default.createElement(import_fi12.FiLayout, null), span: "col-2", color: "#f43f5e", image: "https://images.unsplash.com/photo-1635070041078-e363dbe005cb?auto=format&fit=crop&q=80&w=800" },
|
|
2925
|
+
{ id: 3, title: "Speed", description: "Optimized for 120fps.", icon: /* @__PURE__ */ import_react13.default.createElement(import_fi12.FiZap, null), span: "normal", color: "#10b981" },
|
|
2926
|
+
{ id: 4, title: "Structure", description: "Bento-style layouts.", icon: /* @__PURE__ */ import_react13.default.createElement(import_fi12.FiGrid, null), span: "normal", color: "#fb7185" },
|
|
2927
|
+
{ id: 5, title: "Future", description: "Next-gen interactions.", icon: /* @__PURE__ */ import_react13.default.createElement(import_fi12.FiBox, null), span: "col-2", color: "#8b5cf6", image: "https://images.unsplash.com/photo-1618005182384-a83a8bd57fbe?auto=format&fit=crop&q=80&w=800" }
|
|
2928
|
+
],
|
|
2929
|
+
accentColor = "#6366f1",
|
|
2930
|
+
gap = "24px",
|
|
2931
|
+
columns = "repeat(3, 1fr)",
|
|
2932
|
+
animationDuration = 1.2,
|
|
2933
|
+
easing = "power4.out"
|
|
2934
|
+
}) => {
|
|
2935
|
+
const containerRef = (0, import_react13.useRef)(null);
|
|
2936
|
+
const cardRefs = (0, import_react13.useRef)([]);
|
|
2937
|
+
const inRouter = (0, import_react_router_dom11.useInRouterContext)();
|
|
2938
|
+
const navigate = inRouter ? (0, import_react_router_dom11.useNavigate)() : null;
|
|
2939
|
+
const handleNavigate = (path) => {
|
|
2940
|
+
if (path) {
|
|
2941
|
+
if (navigate) navigate(path);
|
|
2942
|
+
else window.location.assign(path);
|
|
2943
|
+
}
|
|
2944
|
+
};
|
|
2945
|
+
(0, import_react13.useEffect)(() => {
|
|
2946
|
+
const ctx = import_gsap13.gsap.context(() => {
|
|
2947
|
+
import_gsap13.gsap.fromTo(
|
|
2948
|
+
cardRefs.current,
|
|
2949
|
+
{
|
|
2950
|
+
opacity: 0,
|
|
2951
|
+
y: 40,
|
|
2952
|
+
scale: 0.95,
|
|
2953
|
+
filter: "blur(10px)"
|
|
2954
|
+
},
|
|
2955
|
+
{
|
|
2956
|
+
opacity: 1,
|
|
2957
|
+
y: 0,
|
|
2958
|
+
scale: 1,
|
|
2959
|
+
filter: "blur(0px)",
|
|
2960
|
+
stagger: 0.1,
|
|
2961
|
+
duration: animationDuration,
|
|
2962
|
+
ease: easing,
|
|
2963
|
+
clearProps: "filter"
|
|
2964
|
+
}
|
|
2965
|
+
);
|
|
2966
|
+
}, containerRef);
|
|
2967
|
+
return () => ctx.revert();
|
|
2968
|
+
}, [items, animationDuration, easing]);
|
|
2969
|
+
const handleMouseMove = (e, index) => {
|
|
2970
|
+
const card = cardRefs.current[index];
|
|
2971
|
+
const { left, top, width, height } = card.getBoundingClientRect();
|
|
2972
|
+
const x = (e.clientX - (left + width / 2)) / (width / 2);
|
|
2973
|
+
const y = (e.clientY - (top + height / 2)) / (height / 2);
|
|
2974
|
+
import_gsap13.gsap.to(card, {
|
|
2975
|
+
rotateY: x * 8,
|
|
2976
|
+
rotateX: -y * 8,
|
|
2977
|
+
transformPerspective: 1e3,
|
|
2978
|
+
duration: 0.4,
|
|
2979
|
+
ease: "power2.out"
|
|
2980
|
+
});
|
|
2981
|
+
const glow = card.querySelector(".glow");
|
|
2982
|
+
if (glow) {
|
|
2983
|
+
import_gsap13.gsap.to(glow, {
|
|
2984
|
+
opacity: 0.4,
|
|
2985
|
+
x: x * 50,
|
|
2986
|
+
y: y * 50,
|
|
2987
|
+
duration: 0.3
|
|
2988
|
+
});
|
|
2989
|
+
}
|
|
2990
|
+
};
|
|
2991
|
+
const handleMouseLeave = (index) => {
|
|
2992
|
+
import_gsap13.gsap.to(cardRefs.current[index], {
|
|
2993
|
+
rotateY: 0,
|
|
2994
|
+
rotateX: 0,
|
|
2995
|
+
duration: 0.6,
|
|
2996
|
+
ease: "power3.out"
|
|
2997
|
+
});
|
|
2998
|
+
const glow = cardRefs.current[index].querySelector(".glow");
|
|
2999
|
+
if (glow) {
|
|
3000
|
+
import_gsap13.gsap.to(glow, { opacity: 0, duration: 0.5 });
|
|
3001
|
+
}
|
|
3002
|
+
};
|
|
3003
|
+
const styles = {
|
|
3004
|
+
gridContainer: {
|
|
3005
|
+
display: "grid",
|
|
3006
|
+
gridTemplateColumns: columns,
|
|
3007
|
+
gap,
|
|
3008
|
+
width: "100%",
|
|
3009
|
+
padding: "40px",
|
|
3010
|
+
boxSizing: "border-box",
|
|
3011
|
+
backgroundColor: "transparent",
|
|
3012
|
+
fontFamily: '"Inter", sans-serif'
|
|
3013
|
+
},
|
|
3014
|
+
card: (item) => {
|
|
3015
|
+
var _a, _b;
|
|
3016
|
+
return {
|
|
3017
|
+
position: "relative",
|
|
3018
|
+
gridColumn: ((_a = item.span) == null ? void 0 : _a.includes("col-2")) ? "span 2" : "span 1",
|
|
3019
|
+
gridRow: ((_b = item.span) == null ? void 0 : _b.includes("row-2")) ? "span 2" : "span 1",
|
|
3020
|
+
minHeight: "240px",
|
|
3021
|
+
backgroundColor: "rgba(20, 20, 20, 0.4)",
|
|
3022
|
+
borderRadius: "32px",
|
|
3023
|
+
overflow: "hidden",
|
|
3024
|
+
border: "1px solid rgba(255, 255, 255, 0.05)",
|
|
3025
|
+
backdropFilter: "blur(16px)",
|
|
3026
|
+
WebkitBackdropFilter: "blur(16px)",
|
|
3027
|
+
cursor: "pointer",
|
|
3028
|
+
display: "flex",
|
|
3029
|
+
flexDirection: "column",
|
|
3030
|
+
justifyContent: "flex-end",
|
|
3031
|
+
padding: "32px",
|
|
3032
|
+
transition: "border-color 0.3s ease",
|
|
3033
|
+
willChange: "transform, opacity"
|
|
3034
|
+
};
|
|
3035
|
+
},
|
|
3036
|
+
glow: (color) => ({
|
|
3037
|
+
position: "absolute",
|
|
3038
|
+
top: "50%",
|
|
3039
|
+
left: "50%",
|
|
3040
|
+
width: "150%",
|
|
3041
|
+
height: "150%",
|
|
3042
|
+
background: `radial-gradient(circle at center, ${color || accentColor}22 0%, transparent 70%)`,
|
|
3043
|
+
transform: "translate(-50%, -50%)",
|
|
3044
|
+
pointerEvents: "none",
|
|
3045
|
+
opacity: 0,
|
|
3046
|
+
zIndex: 1
|
|
3047
|
+
}),
|
|
3048
|
+
image: {
|
|
3049
|
+
position: "absolute",
|
|
3050
|
+
inset: 0,
|
|
3051
|
+
width: "100%",
|
|
3052
|
+
height: "100%",
|
|
3053
|
+
objectFit: "cover",
|
|
3054
|
+
opacity: 0.4,
|
|
3055
|
+
zIndex: 0,
|
|
3056
|
+
transition: "transform 0.5s ease"
|
|
3057
|
+
},
|
|
3058
|
+
content: {
|
|
3059
|
+
position: "relative",
|
|
3060
|
+
zIndex: 2
|
|
3061
|
+
},
|
|
3062
|
+
icon: (color) => ({
|
|
3063
|
+
width: "48px",
|
|
3064
|
+
height: "48px",
|
|
3065
|
+
borderRadius: "14px",
|
|
3066
|
+
backgroundColor: `${color || accentColor}22`,
|
|
3067
|
+
color: color || accentColor,
|
|
3068
|
+
display: "flex",
|
|
3069
|
+
alignItems: "center",
|
|
3070
|
+
justifyContent: "center",
|
|
3071
|
+
fontSize: "24px",
|
|
3072
|
+
marginBottom: "20px"
|
|
3073
|
+
}),
|
|
3074
|
+
title: {
|
|
3075
|
+
fontSize: "24px",
|
|
3076
|
+
fontWeight: "800",
|
|
3077
|
+
color: "#fff",
|
|
3078
|
+
margin: "0 0 8px 0",
|
|
3079
|
+
letterSpacing: "-0.5px"
|
|
3080
|
+
},
|
|
3081
|
+
description: {
|
|
3082
|
+
fontSize: "15px",
|
|
3083
|
+
color: "rgba(255, 255, 255, 0.5)",
|
|
3084
|
+
margin: 0,
|
|
3085
|
+
lineHeight: "1.5"
|
|
3086
|
+
},
|
|
3087
|
+
arrow: {
|
|
3088
|
+
position: "absolute",
|
|
3089
|
+
top: "32px",
|
|
3090
|
+
right: "32px",
|
|
3091
|
+
color: "rgba(255, 255, 255, 0.2)",
|
|
3092
|
+
fontSize: "20px",
|
|
3093
|
+
transition: "all 0.3s ease"
|
|
3094
|
+
}
|
|
3095
|
+
};
|
|
3096
|
+
return /* @__PURE__ */ import_react13.default.createElement("div", { ref: containerRef, style: styles.gridContainer }, items.map((item, i) => /* @__PURE__ */ import_react13.default.createElement(
|
|
3097
|
+
"div",
|
|
3098
|
+
{
|
|
3099
|
+
key: item.id,
|
|
3100
|
+
ref: (el) => cardRefs.current[i] = el,
|
|
3101
|
+
style: styles.card(item),
|
|
3102
|
+
onMouseMove: (e) => handleMouseMove(e, i),
|
|
3103
|
+
onMouseLeave: () => handleMouseLeave(i),
|
|
3104
|
+
onClick: () => handleNavigate(item.path),
|
|
3105
|
+
onMouseEnter: (e) => {
|
|
3106
|
+
const arrow = e.currentTarget.querySelector(".arrow");
|
|
3107
|
+
if (arrow) import_gsap13.gsap.to(arrow, { x: 5, y: -5, color: item.color || accentColor });
|
|
3108
|
+
const img = e.currentTarget.querySelector("img");
|
|
3109
|
+
if (img) import_gsap13.gsap.to(img, { scale: 1.1, opacity: 0.6 });
|
|
3110
|
+
}
|
|
3111
|
+
},
|
|
3112
|
+
/* @__PURE__ */ import_react13.default.createElement("div", { className: "glow", style: styles.glow(item.color) }),
|
|
3113
|
+
item.image && /* @__PURE__ */ import_react13.default.createElement("img", { src: item.image, alt: item.title, style: styles.image }),
|
|
3114
|
+
/* @__PURE__ */ import_react13.default.createElement("div", { className: "arrow", style: styles.arrow }, /* @__PURE__ */ import_react13.default.createElement(import_fi12.FiArrowUpRight, null)),
|
|
3115
|
+
/* @__PURE__ */ import_react13.default.createElement("div", { style: styles.content }, /* @__PURE__ */ import_react13.default.createElement("div", { style: styles.icon(item.color) }, item.icon), /* @__PURE__ */ import_react13.default.createElement("h3", { style: styles.title }, item.title), /* @__PURE__ */ import_react13.default.createElement("p", { style: styles.description }, item.description))
|
|
3116
|
+
)));
|
|
3117
|
+
};
|
|
3118
|
+
|
|
3119
|
+
// src/components/ImageEffect/ImageEffect.jsx
|
|
3120
|
+
var import_react14 = __toESM(require("react"));
|
|
3121
|
+
var import_react_router_dom12 = require("react-router-dom");
|
|
3122
|
+
var import_gsap14 = require("gsap");
|
|
3123
|
+
var import_ScrollTrigger = require("gsap/ScrollTrigger");
|
|
3124
|
+
var import_fi13 = require("react-icons/fi");
|
|
3125
|
+
import_gsap14.gsap.registerPlugin(import_ScrollTrigger.ScrollTrigger);
|
|
3126
|
+
var ImageEffectScrolling = ({
|
|
3127
|
+
images = [
|
|
3128
|
+
{ id: 1, src: "https://images.unsplash.com/photo-1618005182384-a83a8bd57fbe?auto=format&fit=crop&q=80&w=800", title: "Aether Flow" },
|
|
3129
|
+
{ id: 2, src: "https://images.unsplash.com/photo-1635070041078-e363dbe005cb?auto=format&fit=crop&q=80&w=800", title: "Neural Nexus" },
|
|
3130
|
+
{ id: 3, src: "https://images.unsplash.com/photo-1620641788421-7a1c342ea42e?auto=format&fit=crop&q=80&w=800", title: "Neon Gradients" },
|
|
3131
|
+
{ id: 4, src: "https://images.unsplash.com/photo-1550684848-fac1c5b4e853?auto=format&fit=crop&q=80&w=800", title: "Geometry Labs" },
|
|
3132
|
+
{ id: 5, src: "https://images.unsplash.com/photo-1614850523296-d8c1af93d400?auto=format&fit=crop&q=80&w=800", title: "Liquid Void" },
|
|
3133
|
+
{ id: 6, src: "https://images.unsplash.com/photo-1634017839464-5c339ebe3cb4?auto=format&fit=crop&q=80&w=800", title: "Digital Ether" }
|
|
3134
|
+
],
|
|
3135
|
+
accentColor = "#6366f1",
|
|
3136
|
+
textColor = "#ffffff",
|
|
3137
|
+
waveIntensity = 15,
|
|
3138
|
+
scrollSpeed = 1,
|
|
3139
|
+
animationDuration = 1.5,
|
|
3140
|
+
easing = "power4.out"
|
|
3141
|
+
}) => {
|
|
3142
|
+
const sectionRef = (0, import_react14.useRef)(null);
|
|
3143
|
+
const containerRef = (0, import_react14.useRef)(null);
|
|
3144
|
+
const imageRefs = (0, import_react14.useRef)([]);
|
|
3145
|
+
const contentRef = (0, import_react14.useRef)(null);
|
|
3146
|
+
const inRouter = (0, import_react_router_dom12.useInRouterContext)();
|
|
3147
|
+
const navigate = inRouter ? (0, import_react_router_dom12.useNavigate)() : null;
|
|
3148
|
+
const handleNavigate = (path) => {
|
|
3149
|
+
if (path) {
|
|
3150
|
+
if (navigate) navigate(path);
|
|
3151
|
+
else window.location.assign(path);
|
|
3152
|
+
}
|
|
3153
|
+
};
|
|
3154
|
+
(0, import_react14.useEffect)(() => {
|
|
3155
|
+
const ctx = import_gsap14.gsap.context(() => {
|
|
3156
|
+
const sections = imageRefs.current;
|
|
3157
|
+
const totalWidth = containerRef.current.scrollWidth;
|
|
3158
|
+
import_gsap14.gsap.to(containerRef.current, {
|
|
3159
|
+
x: () => -(totalWidth - window.innerWidth),
|
|
3160
|
+
ease: "none",
|
|
3161
|
+
scrollTrigger: {
|
|
3162
|
+
trigger: sectionRef.current,
|
|
3163
|
+
pin: true,
|
|
3164
|
+
scrub: 1,
|
|
3165
|
+
start: "top top",
|
|
3166
|
+
end: () => `+=${totalWidth}`,
|
|
3167
|
+
anticipatePin: 1,
|
|
3168
|
+
onUpdate: (self) => {
|
|
3169
|
+
const velocity = self.getVelocity();
|
|
3170
|
+
const skew = velocity / 500 * waveIntensity;
|
|
3171
|
+
sections.forEach((img) => {
|
|
3172
|
+
import_gsap14.gsap.to(img, {
|
|
3173
|
+
skewX: skew,
|
|
3174
|
+
duration: 0.5,
|
|
3175
|
+
ease: "power2.out",
|
|
3176
|
+
overwrite: "auto"
|
|
3177
|
+
});
|
|
3178
|
+
});
|
|
3179
|
+
}
|
|
3180
|
+
}
|
|
3181
|
+
});
|
|
3182
|
+
import_gsap14.gsap.fromTo(
|
|
3183
|
+
imageRefs.current,
|
|
3184
|
+
{ opacity: 0, y: 100, scale: 0.8 },
|
|
3185
|
+
{
|
|
3186
|
+
opacity: 1,
|
|
3187
|
+
y: 0,
|
|
3188
|
+
scale: 1,
|
|
3189
|
+
stagger: 0.1,
|
|
3190
|
+
duration: animationDuration,
|
|
3191
|
+
ease: easing
|
|
3192
|
+
}
|
|
3193
|
+
);
|
|
3194
|
+
sections.forEach((img) => {
|
|
3195
|
+
const innerImg = img.querySelector("img");
|
|
3196
|
+
import_gsap14.gsap.to(innerImg, {
|
|
3197
|
+
x: -100,
|
|
3198
|
+
ease: "none",
|
|
3199
|
+
scrollTrigger: {
|
|
3200
|
+
trigger: img,
|
|
3201
|
+
containerAnimation: import_gsap14.gsap.getProperty(containerRef.current, "gsap"),
|
|
3202
|
+
// This is tricky for scrub
|
|
3203
|
+
scrub: true,
|
|
3204
|
+
horizontal: true
|
|
3205
|
+
}
|
|
3206
|
+
});
|
|
3207
|
+
});
|
|
3208
|
+
}, sectionRef);
|
|
3209
|
+
return () => ctx.revert();
|
|
3210
|
+
}, [images, waveIntensity, animationDuration, easing]);
|
|
3211
|
+
const handleMouseEnter = (e) => {
|
|
3212
|
+
import_gsap14.gsap.to(e.currentTarget, {
|
|
3213
|
+
scale: 1.05,
|
|
3214
|
+
zIndex: 10,
|
|
3215
|
+
duration: 0.6,
|
|
3216
|
+
ease: "expo.out"
|
|
3217
|
+
});
|
|
3218
|
+
const overlay = e.currentTarget.querySelector(".overlay");
|
|
3219
|
+
import_gsap14.gsap.to(overlay, { opacity: 1, duration: 0.4 });
|
|
3220
|
+
};
|
|
3221
|
+
const handleMouseLeave = (e) => {
|
|
3222
|
+
import_gsap14.gsap.to(e.currentTarget, {
|
|
3223
|
+
scale: 1,
|
|
3224
|
+
zIndex: 1,
|
|
3225
|
+
duration: 0.6,
|
|
3226
|
+
ease: "expo.out"
|
|
3227
|
+
});
|
|
3228
|
+
const overlay = e.currentTarget.querySelector(".overlay");
|
|
3229
|
+
import_gsap14.gsap.to(overlay, { opacity: 0, duration: 0.4 });
|
|
3230
|
+
};
|
|
3231
|
+
const styles = {
|
|
3232
|
+
section: {
|
|
3233
|
+
position: "relative",
|
|
3234
|
+
width: "100%",
|
|
3235
|
+
height: "100vh",
|
|
3236
|
+
overflow: "hidden",
|
|
3237
|
+
backgroundColor: "#050505",
|
|
3238
|
+
display: "flex",
|
|
3239
|
+
alignItems: "center"
|
|
3240
|
+
},
|
|
3241
|
+
container: {
|
|
3242
|
+
display: "flex",
|
|
3243
|
+
paddingLeft: "10vw",
|
|
3244
|
+
paddingRight: "10vw",
|
|
3245
|
+
gap: "50px",
|
|
3246
|
+
alignItems: "center",
|
|
3247
|
+
willChange: "transform"
|
|
3248
|
+
},
|
|
3249
|
+
imageItem: {
|
|
3250
|
+
position: "relative",
|
|
3251
|
+
flex: "0 0 45vh",
|
|
3252
|
+
height: "60vh",
|
|
3253
|
+
borderRadius: "24px",
|
|
3254
|
+
overflow: "hidden",
|
|
3255
|
+
cursor: "pointer",
|
|
3256
|
+
backgroundColor: "#111",
|
|
3257
|
+
willChange: "transform, skewX",
|
|
3258
|
+
transformStyle: "preserve-3d"
|
|
3259
|
+
},
|
|
3260
|
+
image: {
|
|
3261
|
+
width: "120%",
|
|
3262
|
+
// Wider for parallax gap
|
|
3263
|
+
height: "100%",
|
|
3264
|
+
objectFit: "cover",
|
|
3265
|
+
pointerEvents: "none",
|
|
3266
|
+
transform: "translateX(0)"
|
|
3267
|
+
},
|
|
3268
|
+
overlay: {
|
|
3269
|
+
position: "absolute",
|
|
3270
|
+
inset: 0,
|
|
3271
|
+
background: "linear-gradient(to top, rgba(0,0,0,0.8) 0%, transparent 60%)",
|
|
3272
|
+
opacity: 0,
|
|
3273
|
+
display: "flex",
|
|
3274
|
+
flexDirection: "column",
|
|
3275
|
+
justifyContent: "flex-end",
|
|
3276
|
+
padding: "30px",
|
|
3277
|
+
color: "#fff",
|
|
3278
|
+
zIndex: 2,
|
|
3279
|
+
pointerEvents: "none"
|
|
3280
|
+
},
|
|
3281
|
+
title: {
|
|
3282
|
+
fontSize: "24px",
|
|
3283
|
+
fontWeight: "800",
|
|
3284
|
+
marginBottom: "8px",
|
|
3285
|
+
fontFamily: '"Inter", sans-serif',
|
|
3286
|
+
textTransform: "uppercase",
|
|
3287
|
+
letterSpacing: "2px"
|
|
3288
|
+
},
|
|
3289
|
+
subtitle: {
|
|
3290
|
+
fontSize: "12px",
|
|
3291
|
+
opacity: 0.6,
|
|
3292
|
+
textTransform: "uppercase",
|
|
3293
|
+
letterSpacing: "4px"
|
|
3294
|
+
},
|
|
3295
|
+
navIndicator: {
|
|
3296
|
+
position: "absolute",
|
|
3297
|
+
bottom: "10vh",
|
|
3298
|
+
left: "50%",
|
|
3299
|
+
transform: "translateX(-50%)",
|
|
3300
|
+
color: "rgba(255,255,255,0.2)",
|
|
3301
|
+
fontSize: "12px",
|
|
3302
|
+
textTransform: "uppercase",
|
|
3303
|
+
letterSpacing: "5px",
|
|
3304
|
+
zIndex: 10
|
|
3305
|
+
}
|
|
3306
|
+
};
|
|
3307
|
+
return /* @__PURE__ */ import_react14.default.createElement("div", { ref: sectionRef, style: styles.section }, /* @__PURE__ */ import_react14.default.createElement("div", { style: styles.navIndicator }, "Scroll To Explore"), /* @__PURE__ */ import_react14.default.createElement("div", { ref: containerRef, style: styles.container }, images.map((img, i) => /* @__PURE__ */ import_react14.default.createElement(
|
|
3308
|
+
"div",
|
|
3309
|
+
{
|
|
3310
|
+
key: img.id,
|
|
3311
|
+
ref: (el) => imageRefs.current[i] = el,
|
|
3312
|
+
style: styles.imageItem,
|
|
3313
|
+
onMouseEnter: handleMouseEnter,
|
|
3314
|
+
onMouseLeave: handleMouseLeave,
|
|
3315
|
+
onClick: () => handleNavigate(img.path)
|
|
3316
|
+
},
|
|
3317
|
+
/* @__PURE__ */ import_react14.default.createElement("div", { className: "overlay", style: styles.overlay }, /* @__PURE__ */ import_react14.default.createElement("span", { style: styles.subtitle }, "Gallery Item 0", i + 1), /* @__PURE__ */ import_react14.default.createElement("h3", { style: styles.title }, img.title), /* @__PURE__ */ import_react14.default.createElement("div", { style: { display: "flex", alignItems: "center", gap: "8px", color: accentColor } }, "View Project ", /* @__PURE__ */ import_react14.default.createElement(import_fi13.FiArrowRight, null))),
|
|
3318
|
+
/* @__PURE__ */ import_react14.default.createElement("img", { src: img.src, alt: img.title, style: styles.image })
|
|
3319
|
+
))));
|
|
3320
|
+
};
|
|
3321
|
+
|
|
3322
|
+
// src/components/Testimonial/Testimonial.jsx
|
|
3323
|
+
var import_react15 = __toESM(require("react"));
|
|
3324
|
+
var import_gsap15 = require("gsap");
|
|
3325
|
+
var import_fi14 = require("react-icons/fi");
|
|
3326
|
+
var import_hi = require("react-icons/hi");
|
|
3327
|
+
var Testimonials = ({
|
|
3328
|
+
items = [
|
|
3329
|
+
{
|
|
3330
|
+
id: 1,
|
|
3331
|
+
name: "Alex Rivera",
|
|
3332
|
+
role: "Director of Product",
|
|
3333
|
+
company: "Linear",
|
|
3334
|
+
content: "The attention to detail in Aura's design system is unprecedented. It transformed our workflow in weeks.",
|
|
3335
|
+
rating: 5,
|
|
3336
|
+
avatar: "https://images.unsplash.com/photo-1472099645785-5658abf4ff4e?auto=format&fit=crop&q=80&w=150"
|
|
3337
|
+
},
|
|
3338
|
+
{
|
|
3339
|
+
id: 2,
|
|
3340
|
+
name: "Sarah Chen",
|
|
3341
|
+
role: "Lead Designer",
|
|
3342
|
+
company: "Stripe",
|
|
3343
|
+
content: "Fluidity and performance are at the core of these components. The GSAP integrations are truly world-class.",
|
|
3344
|
+
rating: 5,
|
|
3345
|
+
avatar: "https://images.unsplash.com/photo-1438761681033-6461ffad8d80?auto=format&fit=crop&q=80&w=150"
|
|
3346
|
+
},
|
|
3347
|
+
{
|
|
3348
|
+
id: 3,
|
|
3349
|
+
name: "Marcus Thorne",
|
|
3350
|
+
role: "Founding Engineer",
|
|
3351
|
+
company: "Vercel",
|
|
3352
|
+
content: "Clean, performant, and absolutely stunning. Aura is the benchmark for modern React components.",
|
|
3353
|
+
rating: 5,
|
|
3354
|
+
avatar: "https://images.unsplash.com/photo-1500648767791-00dcc994a43e?auto=format&fit=crop&q=80&w=150"
|
|
3355
|
+
}
|
|
3356
|
+
],
|
|
3357
|
+
accentColor = "#6366f1",
|
|
3358
|
+
bgColor = "rgba(255, 255, 255, 0.03)",
|
|
3359
|
+
textColor = "#ffffff",
|
|
3360
|
+
animationDuration = 1.2,
|
|
3361
|
+
easing = "power4.out"
|
|
3362
|
+
}) => {
|
|
3363
|
+
const containerRef = (0, import_react15.useRef)(null);
|
|
3364
|
+
const cardRefs = (0, import_react15.useRef)([]);
|
|
3365
|
+
const titleRef = (0, import_react15.useRef)(null);
|
|
3366
|
+
(0, import_react15.useEffect)(() => {
|
|
3367
|
+
const ctx = import_gsap15.gsap.context(() => {
|
|
3368
|
+
const tl = import_gsap15.gsap.timeline({ defaults: { ease: easing, duration: animationDuration } });
|
|
3369
|
+
tl.fromTo(
|
|
3370
|
+
titleRef.current,
|
|
3371
|
+
{ opacity: 0, y: 30 },
|
|
3372
|
+
{ opacity: 1, y: 0 }
|
|
3373
|
+
).fromTo(
|
|
3374
|
+
cardRefs.current,
|
|
3375
|
+
{
|
|
3376
|
+
opacity: 0,
|
|
3377
|
+
y: 50,
|
|
3378
|
+
scale: 0.95,
|
|
3379
|
+
filter: "blur(10px)"
|
|
3380
|
+
},
|
|
3381
|
+
{
|
|
3382
|
+
opacity: 1,
|
|
3383
|
+
y: 0,
|
|
3384
|
+
scale: 1,
|
|
3385
|
+
filter: "blur(0px)",
|
|
3386
|
+
stagger: 0.15,
|
|
3387
|
+
clearProps: "filter"
|
|
3388
|
+
},
|
|
3389
|
+
"-=0.8"
|
|
3390
|
+
);
|
|
3391
|
+
}, containerRef);
|
|
3392
|
+
return () => ctx.revert();
|
|
3393
|
+
}, [items, animationDuration, easing]);
|
|
3394
|
+
const handleCardHover = (e, index) => {
|
|
3395
|
+
import_gsap15.gsap.to(cardRefs.current[index], {
|
|
3396
|
+
y: -12,
|
|
3397
|
+
scale: 1.02,
|
|
3398
|
+
backgroundColor: "rgba(255, 255, 255, 0.06)",
|
|
3399
|
+
borderColor: accentColor,
|
|
3400
|
+
duration: 0.4,
|
|
3401
|
+
ease: "power2.out"
|
|
3402
|
+
});
|
|
3403
|
+
const icon = cardRefs.current[index].querySelector(".quote-icon");
|
|
3404
|
+
import_gsap15.gsap.to(icon, {
|
|
3405
|
+
scale: 1.2,
|
|
3406
|
+
rotate: 15,
|
|
3407
|
+
color: accentColor,
|
|
3408
|
+
duration: 0.4
|
|
3409
|
+
});
|
|
3410
|
+
};
|
|
3411
|
+
const handleCardLeave = (index) => {
|
|
3412
|
+
import_gsap15.gsap.to(cardRefs.current[index], {
|
|
3413
|
+
y: 0,
|
|
3414
|
+
scale: 1,
|
|
3415
|
+
backgroundColor: bgColor,
|
|
3416
|
+
borderColor: "rgba(255, 255, 255, 0.05)",
|
|
3417
|
+
duration: 0.5,
|
|
3418
|
+
ease: "power2.inOut"
|
|
3419
|
+
});
|
|
3420
|
+
const icon = cardRefs.current[index].querySelector(".quote-icon");
|
|
3421
|
+
import_gsap15.gsap.to(icon, {
|
|
3422
|
+
scale: 1,
|
|
3423
|
+
rotate: 0,
|
|
3424
|
+
color: "rgba(255, 255, 255, 0.2)",
|
|
3425
|
+
duration: 0.5
|
|
3426
|
+
});
|
|
3427
|
+
};
|
|
3428
|
+
const styles = {
|
|
3429
|
+
section: {
|
|
3430
|
+
padding: "120px 5%",
|
|
3431
|
+
backgroundColor: "transparent",
|
|
3432
|
+
fontFamily: '"Inter", -apple-system, sans-serif',
|
|
3433
|
+
color: textColor,
|
|
3434
|
+
width: "100%",
|
|
3435
|
+
boxSizing: "border-box"
|
|
3436
|
+
},
|
|
3437
|
+
header: {
|
|
3438
|
+
textAlign: "center",
|
|
3439
|
+
marginBottom: "80px"
|
|
3440
|
+
},
|
|
3441
|
+
title: {
|
|
3442
|
+
fontSize: "clamp(32px, 5vw, 64px)",
|
|
3443
|
+
fontWeight: "900",
|
|
3444
|
+
letterSpacing: "-2px",
|
|
3445
|
+
marginBottom: "16px"
|
|
3446
|
+
},
|
|
3447
|
+
subtitle: {
|
|
3448
|
+
fontSize: "16px",
|
|
3449
|
+
opacity: 0.5,
|
|
3450
|
+
letterSpacing: "2px",
|
|
3451
|
+
textTransform: "uppercase"
|
|
3452
|
+
},
|
|
3453
|
+
grid: {
|
|
3454
|
+
display: "grid",
|
|
3455
|
+
gridTemplateColumns: "repeat(auto-fit, minmax(320px, 1fr))",
|
|
3456
|
+
gap: "32px",
|
|
3457
|
+
maxWidth: "1200px",
|
|
3458
|
+
margin: "0 auto"
|
|
3459
|
+
},
|
|
3460
|
+
card: {
|
|
3461
|
+
position: "relative",
|
|
3462
|
+
padding: "48px",
|
|
3463
|
+
backgroundColor: bgColor,
|
|
3464
|
+
borderRadius: "32px",
|
|
3465
|
+
border: "1px solid rgba(255, 255, 255, 0.05)",
|
|
3466
|
+
backdropFilter: "blur(16px)",
|
|
3467
|
+
WebkitBackdropFilter: "blur(16px)",
|
|
3468
|
+
cursor: "pointer",
|
|
3469
|
+
willChange: "transform, opacity",
|
|
3470
|
+
transition: "border-color 0.3s ease"
|
|
3471
|
+
},
|
|
3472
|
+
quoteIcon: {
|
|
3473
|
+
position: "absolute",
|
|
3474
|
+
top: "32px",
|
|
3475
|
+
right: "40px",
|
|
3476
|
+
fontSize: "32px",
|
|
3477
|
+
color: "rgba(255, 255, 255, 0.1)",
|
|
3478
|
+
willChange: "transform"
|
|
3479
|
+
},
|
|
3480
|
+
content: {
|
|
3481
|
+
fontSize: "18px",
|
|
3482
|
+
lineHeight: "1.6",
|
|
3483
|
+
marginBottom: "32px",
|
|
3484
|
+
position: "relative",
|
|
3485
|
+
fontWeight: "500"
|
|
3486
|
+
},
|
|
3487
|
+
footer: {
|
|
3488
|
+
display: "flex",
|
|
3489
|
+
alignItems: "center",
|
|
3490
|
+
gap: "16px"
|
|
3491
|
+
},
|
|
3492
|
+
avatar: {
|
|
3493
|
+
width: "56px",
|
|
3494
|
+
height: "56px",
|
|
3495
|
+
borderRadius: "16px",
|
|
3496
|
+
objectFit: "cover",
|
|
3497
|
+
border: `2px solid ${accentColor}33`
|
|
3498
|
+
},
|
|
3499
|
+
info: {
|
|
3500
|
+
display: "flex",
|
|
3501
|
+
flexDirection: "column"
|
|
3502
|
+
},
|
|
3503
|
+
name: {
|
|
3504
|
+
fontSize: "16px",
|
|
3505
|
+
fontWeight: "700"
|
|
3506
|
+
},
|
|
3507
|
+
role: {
|
|
3508
|
+
fontSize: "13px",
|
|
3509
|
+
opacity: 0.5
|
|
3510
|
+
},
|
|
3511
|
+
stars: {
|
|
3512
|
+
display: "flex",
|
|
3513
|
+
gap: "2px",
|
|
3514
|
+
color: "#fbbf24",
|
|
3515
|
+
marginBottom: "16px"
|
|
3516
|
+
}
|
|
3517
|
+
};
|
|
3518
|
+
return /* @__PURE__ */ import_react15.default.createElement("section", { ref: containerRef, style: styles.section }, /* @__PURE__ */ import_react15.default.createElement("div", { style: styles.header }, /* @__PURE__ */ import_react15.default.createElement("span", { style: styles.subtitle }, "Testimonials"), /* @__PURE__ */ import_react15.default.createElement("h2", { ref: titleRef, style: styles.title }, "Trusted by Visionaries")), /* @__PURE__ */ import_react15.default.createElement("div", { style: styles.grid }, items.map((item, i) => /* @__PURE__ */ import_react15.default.createElement(
|
|
3519
|
+
"div",
|
|
3520
|
+
{
|
|
3521
|
+
key: item.id,
|
|
3522
|
+
ref: (el) => cardRefs.current[i] = el,
|
|
3523
|
+
style: styles.card,
|
|
3524
|
+
onMouseEnter: (e) => handleCardHover(e, i),
|
|
3525
|
+
onMouseLeave: () => handleCardLeave(i)
|
|
3526
|
+
},
|
|
3527
|
+
/* @__PURE__ */ import_react15.default.createElement("div", { className: "quote-icon", style: styles.quoteIcon }, /* @__PURE__ */ import_react15.default.createElement(import_hi.HiQuoteLeft, null)),
|
|
3528
|
+
/* @__PURE__ */ import_react15.default.createElement("div", { style: styles.stars }, [...Array(item.rating)].map((_, i2) => /* @__PURE__ */ import_react15.default.createElement(import_fi14.FiStar, { key: i2 }))),
|
|
3529
|
+
/* @__PURE__ */ import_react15.default.createElement("p", { style: styles.content }, '"', item.content, '"'),
|
|
3530
|
+
/* @__PURE__ */ import_react15.default.createElement("div", { style: styles.footer }, /* @__PURE__ */ import_react15.default.createElement("img", { src: item.avatar, alt: item.name, style: styles.avatar }), /* @__PURE__ */ import_react15.default.createElement("div", { style: styles.info }, /* @__PURE__ */ import_react15.default.createElement("span", { style: styles.name }, item.name), /* @__PURE__ */ import_react15.default.createElement("span", { style: styles.role }, item.role, " @ ", item.company)))
|
|
3531
|
+
))));
|
|
3532
|
+
};
|
|
3533
|
+
|
|
3534
|
+
// src/components/Footer/Footer.jsx
|
|
3535
|
+
var import_react16 = __toESM(require("react"));
|
|
3536
|
+
var import_react_router_dom13 = require("react-router-dom");
|
|
3537
|
+
var import_gsap16 = require("gsap");
|
|
3538
|
+
var import_fi15 = require("react-icons/fi");
|
|
3539
|
+
var Footer = ({
|
|
3540
|
+
brandName = "AURA",
|
|
3541
|
+
accentColor = "#6366f1",
|
|
3542
|
+
bgColor = "#0a0a0a",
|
|
3543
|
+
textColor = "#ffffff",
|
|
3544
|
+
navLinks = [
|
|
3545
|
+
{ label: "Home", path: "/" },
|
|
3546
|
+
{ label: "Components", path: "/components" },
|
|
3547
|
+
{ label: "Showcase", path: "/showcase" },
|
|
3548
|
+
{ label: "Documentation", path: "/docs" }
|
|
3549
|
+
],
|
|
3550
|
+
socialLinks = [
|
|
3551
|
+
{ icon: /* @__PURE__ */ import_react16.default.createElement(import_fi15.FiGithub, null), url: "https://github.com" },
|
|
3552
|
+
{ icon: /* @__PURE__ */ import_react16.default.createElement(import_fi15.FiTwitter, null), url: "https://twitter.com" },
|
|
3553
|
+
{ icon: /* @__PURE__ */ import_react16.default.createElement(import_fi15.FiLinkedin, null), url: "https://linkedin.com" },
|
|
3554
|
+
{ icon: /* @__PURE__ */ import_react16.default.createElement(import_fi15.FiInstagram, null), url: "https://instagram.com" }
|
|
3555
|
+
],
|
|
3556
|
+
animationDuration = 1.2,
|
|
3557
|
+
easing = "power4.out"
|
|
3558
|
+
}) => {
|
|
3559
|
+
const footerRef = (0, import_react16.useRef)(null);
|
|
3560
|
+
const topBtnRef = (0, import_react16.useRef)(null);
|
|
3561
|
+
const columnRefs = (0, import_react16.useRef)([]);
|
|
3562
|
+
const socialRefs = (0, import_react16.useRef)([]);
|
|
3563
|
+
const inRouter = (0, import_react_router_dom13.useInRouterContext)();
|
|
3564
|
+
const navigate = inRouter ? (0, import_react_router_dom13.useNavigate)() : null;
|
|
3565
|
+
const handleNavigate = (path) => {
|
|
3566
|
+
if (path) {
|
|
3567
|
+
if (navigate) navigate(path);
|
|
3568
|
+
else window.location.assign(path);
|
|
3569
|
+
}
|
|
3570
|
+
};
|
|
3571
|
+
const scrollToTop = () => {
|
|
3572
|
+
window.scrollTo({ top: 0, behavior: "smooth" });
|
|
3573
|
+
};
|
|
3574
|
+
(0, import_react16.useEffect)(() => {
|
|
3575
|
+
const ctx = import_gsap16.gsap.context(() => {
|
|
3576
|
+
const tl = import_gsap16.gsap.timeline({
|
|
3577
|
+
scrollTrigger: {
|
|
3578
|
+
trigger: footerRef.current,
|
|
3579
|
+
start: "top bottom-=100px"
|
|
3580
|
+
}
|
|
3581
|
+
});
|
|
3582
|
+
tl.fromTo(
|
|
3583
|
+
columnRefs.current,
|
|
3584
|
+
{ opacity: 0, y: 30 },
|
|
3585
|
+
{
|
|
3586
|
+
opacity: 1,
|
|
3587
|
+
y: 0,
|
|
3588
|
+
stagger: 0.1,
|
|
3589
|
+
duration: animationDuration,
|
|
3590
|
+
ease: easing
|
|
3591
|
+
}
|
|
3592
|
+
).fromTo(
|
|
3593
|
+
socialRefs.current,
|
|
3594
|
+
{ opacity: 0, scale: 0.8 },
|
|
3595
|
+
{
|
|
3596
|
+
opacity: 1,
|
|
3597
|
+
scale: 1,
|
|
3598
|
+
stagger: 0.1,
|
|
3599
|
+
duration: 0.8,
|
|
3600
|
+
ease: "back.out(2)"
|
|
3601
|
+
},
|
|
3602
|
+
"-=0.5"
|
|
3603
|
+
);
|
|
3604
|
+
}, footerRef);
|
|
3605
|
+
return () => ctx.revert();
|
|
3606
|
+
}, [animationDuration, easing]);
|
|
3607
|
+
const handleSocialMove = (e, index) => {
|
|
3608
|
+
const { clientX, clientY, currentTarget } = e;
|
|
3609
|
+
const { left, top, width, height } = currentTarget.getBoundingClientRect();
|
|
3610
|
+
const x = (clientX - (left + width / 2)) * 0.4;
|
|
3611
|
+
const y = (clientY - (top + height / 2)) * 0.4;
|
|
3612
|
+
import_gsap16.gsap.to(currentTarget, {
|
|
3613
|
+
x,
|
|
3614
|
+
y,
|
|
3615
|
+
duration: 0.3,
|
|
3616
|
+
ease: "power2.out"
|
|
3617
|
+
});
|
|
3618
|
+
};
|
|
3619
|
+
const handleSocialLeave = (index) => {
|
|
3620
|
+
import_gsap16.gsap.to(socialRefs.current[index], {
|
|
3621
|
+
x: 0,
|
|
3622
|
+
y: 0,
|
|
3623
|
+
duration: 0.6,
|
|
3624
|
+
ease: "elastic.out(1, 0.3)"
|
|
3625
|
+
});
|
|
3626
|
+
};
|
|
3627
|
+
const styles = {
|
|
3628
|
+
footer: {
|
|
3629
|
+
position: "relative",
|
|
3630
|
+
width: "100%",
|
|
3631
|
+
backgroundColor: bgColor,
|
|
3632
|
+
color: textColor,
|
|
3633
|
+
padding: "80px 5% 40px",
|
|
3634
|
+
fontFamily: '"Inter", sans-serif',
|
|
3635
|
+
boxSizing: "border-box",
|
|
3636
|
+
overflow: "hidden"
|
|
3637
|
+
},
|
|
3638
|
+
grid: {
|
|
3639
|
+
display: "grid",
|
|
3640
|
+
gridTemplateColumns: "repeat(auto-fit, minmax(200px, 1fr))",
|
|
3641
|
+
gap: "40px",
|
|
3642
|
+
marginBottom: "60px"
|
|
3643
|
+
},
|
|
3644
|
+
brandColumn: {
|
|
3645
|
+
gridColumn: "span 1"
|
|
3646
|
+
},
|
|
3647
|
+
brandTitle: {
|
|
3648
|
+
fontSize: "32px",
|
|
3649
|
+
fontWeight: "900",
|
|
3650
|
+
letterSpacing: "-1.5px",
|
|
3651
|
+
marginBottom: "20px",
|
|
3652
|
+
color: accentColor
|
|
3653
|
+
},
|
|
3654
|
+
brandDesc: {
|
|
3655
|
+
fontSize: "14px",
|
|
3656
|
+
lineHeight: "1.6",
|
|
3657
|
+
opacity: 0.5,
|
|
3658
|
+
maxWidth: "240px"
|
|
3659
|
+
},
|
|
3660
|
+
colTitle: {
|
|
3661
|
+
fontSize: "16px",
|
|
3662
|
+
fontWeight: "700",
|
|
3663
|
+
marginBottom: "24px",
|
|
3664
|
+
textTransform: "uppercase",
|
|
3665
|
+
letterSpacing: "1px"
|
|
3666
|
+
},
|
|
3667
|
+
link: {
|
|
3668
|
+
display: "block",
|
|
3669
|
+
fontSize: "14px",
|
|
3670
|
+
color: textColor,
|
|
3671
|
+
textDecoration: "none",
|
|
3672
|
+
marginBottom: "12px",
|
|
3673
|
+
opacity: 0.5,
|
|
3674
|
+
transition: "opacity 0.3s ease, color 0.3s ease",
|
|
3675
|
+
cursor: "pointer"
|
|
3676
|
+
},
|
|
3677
|
+
socialContainer: {
|
|
3678
|
+
display: "flex",
|
|
3679
|
+
gap: "16px",
|
|
3680
|
+
marginTop: "20px"
|
|
3681
|
+
},
|
|
3682
|
+
socialIcon: {
|
|
3683
|
+
width: "40px",
|
|
3684
|
+
height: "40px",
|
|
3685
|
+
borderRadius: "12px",
|
|
3686
|
+
backgroundColor: "rgba(255, 255, 255, 0.05)",
|
|
3687
|
+
display: "flex",
|
|
3688
|
+
alignItems: "center",
|
|
3689
|
+
justifyContent: "center",
|
|
3690
|
+
fontSize: "20px",
|
|
3691
|
+
color: textColor,
|
|
3692
|
+
cursor: "pointer",
|
|
3693
|
+
transition: "background-color 0.3s ease",
|
|
3694
|
+
willChange: "transform"
|
|
3695
|
+
},
|
|
3696
|
+
bottom: {
|
|
3697
|
+
display: "flex",
|
|
3698
|
+
justifyContent: "space-between",
|
|
3699
|
+
alignItems: "center",
|
|
3700
|
+
paddingTop: "40px",
|
|
3701
|
+
borderTop: "1px solid rgba(255, 255, 255, 0.05)",
|
|
3702
|
+
fontSize: "12px",
|
|
3703
|
+
opacity: 0.3
|
|
3704
|
+
},
|
|
3705
|
+
topBtn: {
|
|
3706
|
+
position: "absolute",
|
|
3707
|
+
top: "40px",
|
|
3708
|
+
right: "5%",
|
|
3709
|
+
width: "50px",
|
|
3710
|
+
height: "50px",
|
|
3711
|
+
borderRadius: "15px",
|
|
3712
|
+
backgroundColor: accentColor,
|
|
3713
|
+
color: "#fff",
|
|
3714
|
+
display: "flex",
|
|
3715
|
+
alignItems: "center",
|
|
3716
|
+
justifyContent: "center",
|
|
3717
|
+
fontSize: "20px",
|
|
3718
|
+
cursor: "pointer",
|
|
3719
|
+
border: "none",
|
|
3720
|
+
boxShadow: `0 10px 20px ${accentColor}33`,
|
|
3721
|
+
willChange: "transform"
|
|
3722
|
+
}
|
|
3723
|
+
};
|
|
3724
|
+
return /* @__PURE__ */ import_react16.default.createElement("footer", { ref: footerRef, style: styles.footer }, /* @__PURE__ */ import_react16.default.createElement(
|
|
3725
|
+
"button",
|
|
3726
|
+
{
|
|
3727
|
+
ref: topBtnRef,
|
|
3728
|
+
style: styles.topBtn,
|
|
3729
|
+
onClick: scrollToTop,
|
|
3730
|
+
onMouseEnter: (e) => import_gsap16.gsap.to(e.currentTarget, { scale: 1.1, y: -5, duration: 0.3 }),
|
|
3731
|
+
onMouseLeave: (e) => import_gsap16.gsap.to(e.currentTarget, { scale: 1, y: 0, duration: 0.3 })
|
|
3732
|
+
},
|
|
3733
|
+
/* @__PURE__ */ import_react16.default.createElement(import_fi15.FiArrowUp, null)
|
|
3734
|
+
), /* @__PURE__ */ import_react16.default.createElement("div", { style: styles.grid }, /* @__PURE__ */ import_react16.default.createElement("div", { ref: (el) => columnRefs.current[0] = el, style: styles.brandColumn }, /* @__PURE__ */ import_react16.default.createElement("div", { style: styles.brandTitle }, brandName), /* @__PURE__ */ import_react16.default.createElement("p", { style: styles.brandDesc }, "Elevating digital experiences with cinematic design systems and high-performance React components."), /* @__PURE__ */ import_react16.default.createElement("div", { style: styles.socialContainer }, socialLinks.map((social, i) => /* @__PURE__ */ import_react16.default.createElement(
|
|
3735
|
+
"a",
|
|
3736
|
+
{
|
|
3737
|
+
key: i,
|
|
3738
|
+
href: social.url,
|
|
3739
|
+
target: "_blank",
|
|
3740
|
+
rel: "noopener noreferrer",
|
|
3741
|
+
ref: (el) => socialRefs.current[i] = el,
|
|
3742
|
+
style: styles.socialIcon,
|
|
3743
|
+
onMouseMove: (e) => handleSocialMove(e, i),
|
|
3744
|
+
onMouseLeave: () => handleSocialLeave(i),
|
|
3745
|
+
onMouseEnter: (e) => e.currentTarget.style.backgroundColor = accentColor
|
|
3746
|
+
},
|
|
3747
|
+
social.icon
|
|
3748
|
+
)))), /* @__PURE__ */ import_react16.default.createElement("div", { ref: (el) => columnRefs.current[1] = el }, /* @__PURE__ */ import_react16.default.createElement("div", { style: styles.colTitle }, "Navigation"), navLinks.map((link, i) => /* @__PURE__ */ import_react16.default.createElement(
|
|
3749
|
+
"span",
|
|
3750
|
+
{
|
|
3751
|
+
key: i,
|
|
3752
|
+
style: styles.link,
|
|
3753
|
+
onClick: () => handleNavigate(link.path),
|
|
3754
|
+
onMouseEnter: (e) => {
|
|
3755
|
+
e.currentTarget.style.opacity = 1;
|
|
3756
|
+
e.currentTarget.style.color = accentColor;
|
|
3757
|
+
},
|
|
3758
|
+
onMouseLeave: (e) => {
|
|
3759
|
+
e.currentTarget.style.opacity = 0.5;
|
|
3760
|
+
e.currentTarget.style.color = textColor;
|
|
3761
|
+
}
|
|
3762
|
+
},
|
|
3763
|
+
link.label
|
|
3764
|
+
))), /* @__PURE__ */ import_react16.default.createElement("div", { ref: (el) => columnRefs.current[2] = el }, /* @__PURE__ */ import_react16.default.createElement("div", { style: styles.colTitle }, "Support"), /* @__PURE__ */ import_react16.default.createElement("a", { href: "mailto:hello@aura-ui.com", style: styles.link, onMouseEnter: (e) => e.currentTarget.style.opacity = 1, onMouseLeave: (e) => e.currentTarget.style.opacity = 0.5 }, "Help Center"), /* @__PURE__ */ import_react16.default.createElement("a", { href: "#", style: styles.link, onMouseEnter: (e) => e.currentTarget.style.opacity = 1, onMouseLeave: (e) => e.currentTarget.style.opacity = 0.5 }, "Changelog"), /* @__PURE__ */ import_react16.default.createElement("a", { href: "#", style: styles.link, onMouseEnter: (e) => e.currentTarget.style.opacity = 1, onMouseLeave: (e) => e.currentTarget.style.opacity = 0.5 }, "Terms"), /* @__PURE__ */ import_react16.default.createElement("a", { href: "#", style: styles.link, onMouseEnter: (e) => e.currentTarget.style.opacity = 1, onMouseLeave: (e) => e.currentTarget.style.opacity = 0.5 }, "Privacy")), /* @__PURE__ */ import_react16.default.createElement("div", { ref: (el) => columnRefs.current[3] = el }, /* @__PURE__ */ import_react16.default.createElement("div", { style: styles.colTitle }, "Contact"), /* @__PURE__ */ import_react16.default.createElement("div", { style: { ...styles.link, display: "flex", alignItems: "center", gap: "8px" } }, /* @__PURE__ */ import_react16.default.createElement(import_fi15.FiMail, null), " hello@aura-ui.com"), /* @__PURE__ */ import_react16.default.createElement("div", { style: { ...styles.link, display: "flex", alignItems: "center", gap: "8px" } }, /* @__PURE__ */ import_react16.default.createElement(import_fi15.FiMapPin, null), " San Francisco, CA"))), /* @__PURE__ */ import_react16.default.createElement("div", { style: styles.bottom }, /* @__PURE__ */ import_react16.default.createElement("div", null, "\xA9 ", (/* @__PURE__ */ new Date()).getFullYear(), " ", brandName, " UI Library. All rights reserved."), /* @__PURE__ */ import_react16.default.createElement("div", { style: { display: "flex", gap: "20px" } }, /* @__PURE__ */ import_react16.default.createElement("span", null, "Version 1.2.0"), /* @__PURE__ */ import_react16.default.createElement("span", null, "Open Source"))));
|
|
2881
3765
|
};
|
|
2882
3766
|
// Annotate the CommonJS export names for ESM import in node:
|
|
2883
3767
|
0 && (module.exports = {
|
|
2884
3768
|
Button,
|
|
2885
3769
|
Carousel,
|
|
3770
|
+
Footer,
|
|
3771
|
+
Grid,
|
|
2886
3772
|
Image,
|
|
3773
|
+
ImageEffectScrolling,
|
|
2887
3774
|
Navbar,
|
|
2888
3775
|
PinterestGrid,
|
|
2889
3776
|
ProductCard,
|
|
@@ -2891,6 +3778,7 @@ var TextImage = ({
|
|
|
2891
3778
|
SideBar,
|
|
2892
3779
|
Skills,
|
|
2893
3780
|
Spotlight,
|
|
3781
|
+
Testimonials,
|
|
2894
3782
|
TextImage,
|
|
2895
3783
|
TextWriting
|
|
2896
3784
|
});
|