);
@@ -35,11 +35,11 @@ const TextSection = ({
btnDescription,
btnLink,
}: {
- svg: any;
+ svg: React.ReactNode;
heading: string;
description: string;
btnDescription?: string;
- btnLink?: any;
+ btnLink: string;
}) => {
return (
@@ -75,7 +75,7 @@ export default function Features() {
useEffect(() => {
if (!inView) {
- ScrollTrigger.getAll().forEach((trigger) => trigger.kill());
+ ScrollTrigger.getAll().forEach((trigger) => {trigger.kill()});
setImage1Visible(false);
setImage2Visible(false);
return;
@@ -113,8 +113,8 @@ export default function Features() {
ScrollTrigger.create({
trigger: details[2],
- start: "top 80%",
- end: "bottom 25%",
+ start: "top 80%",
+ end: "top 70%",
onEnter: () => {
gsap.to(images[0], {
opacity: 0,
@@ -131,6 +131,22 @@ export default function Features() {
});
setImage2Visible(true);
},
+ onLeave: () => {
+ gsap.to(images[1], {
+ opacity: 0,
+ y: 50,
+ duration: 0.8,
+ ease: "power2.out"
+ });
+ setImage2Visible(false);
+ gsap.to(images[1], { // Add this to show image1 again
+ opacity: 1,
+ y: 0,
+ duration: 0.8,
+ ease: "power2.out",
+ });
+ setImage2Visible(true);
+ },
onLeaveBack: () => {
gsap.to(images[1], {
opacity: 0,
@@ -139,7 +155,6 @@ export default function Features() {
ease: "power2.out",
});
setImage2Visible(false);
-
gsap.to(images[0], {
opacity: 1,
y: 0,
@@ -176,7 +191,7 @@ export default function Features() {
trigger: ".content-container",
start: "top top",
end: "bottom bottom",
- pin: ".heading-text",
+ pin: "top",
});
details.forEach((detail: HTMLElement) => {
@@ -194,7 +209,7 @@ export default function Features() {
});
return () => {
- ScrollTrigger.getAll().forEach((trigger) => trigger.kill());
+ ScrollTrigger.getAll().forEach((trigger) => {trigger.kill()});
};
}, [inView]);
@@ -203,78 +218,80 @@ export default function Features() {
return (
<>
-
-
-
+
+
+
Keploy for Developers
smart API testing, capture network calls and generate tests with stubs
-
-
-
-
-
-
- }
- heading={"Record Replay API Flows"}
- description=" Record and replay complex, distributed API flows as mocks and stubs. It's like time machine for tests!"
- btnDescription="Explore More"
- btnLink="https://keploy.io/docs/keploy-explained/introduction/"
- />
+
+
+
+
+
+
+
+ }
+ heading={"Record Replay API Flows"}
+ description=" Record and replay complex, distributed API flows as mocks and stubs. It's like time machine for tests!"
+ btnDescription="Explore More"
+ btnLink="https://keploy.io/docs/keploy-explained/introduction/"
+ />
+
+
+
+
+
+ }
+ heading={"Find Duplicate Tests"}
+ description="Find redundant tests that doesn't add to the test coverage. Automatically detect and remove duplicate tests, ideal for big-teams crowd-sourcing tests."
+ btnDescription="Explore More"
+ btnLink="https://keploy.io/docs/keploy-cloud/deduplication/"
+ />
+
+
+
+
+
+ }
+ heading={"Works with JUnit, PyTest, Jest, Go-Test in CI/CD"}
+ description="Merge Keploy tests coverage with unit testing libraries for combined test coverage gating in CI/CD pipelines like Jenkins, Github Actions."
+ btnDescription="Explore More"
+ btnLink=" https://keploy.io/docs/server/sdk-installation/go/"
+ />
+
-
-
-
-
- }
- heading={"Find Duplicate Tests"}
- description="Find redundant tests that doesn't add to the test coverage. Automatically detect and remove duplicate tests, ideal for big-teams crowd-sourcing tests."
- btnDescription="Explore More"
- btnLink="https://keploy.io/docs/keploy-cloud/deduplication/"
- />
+
+
+
-
-
-
-
- }
- heading={"Works with JUnit, PyTest, Jest, Go-Test in CI/CD"}
- description="Merge Keploy tests coverage with unit testing libraries for combined test coverage gating in CI/CD pipelines like Jenkins, Github Actions."
- btnDescription="Explore More"
- btnLink=" https://keploy.io/docs/server/sdk-installation/go/"
- />
-
-
-
-
-