diff --git a/package-lock.json b/package-lock.json index 5dc2754..8f717b1 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,11 +9,11 @@ "version": "0.0.0", "dependencies": { "framer-motion": "^12.4.3", - "react": "^19.0.0", - "react-dom": "^19.0.0", + "react": "^18.3.1", + "react-dom": "^18.3.1", "react-google-recaptcha": "^3.1.0", "react-intersection-observer": "^9.15.1", - "react-router-dom": "^7.1.5" + "react-router-dom": "^7.1.3" }, "devDependencies": { "@eslint/js": "^9.17.0", @@ -4636,6 +4636,62 @@ } } }, + "node_modules/react-google-recaptcha": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/react-google-recaptcha/-/react-google-recaptcha-3.1.0.tgz", + "integrity": "sha512-cYW2/DWas8nEKZGD7SCu9BSuVz8iOcOLHChHyi7upUuVhkpkhYG/6N3KDiTQ3XAiZ2UAZkfvYKMfAHOzBOcGEg==", + "license": "MIT", + "dependencies": { + "prop-types": "^15.5.0", + "react-async-script": "^1.2.0" + }, + "peerDependencies": { + "react": ">=16.4.1" + } + }, + "node_modules/react-intersection-observer": { + "version": "9.15.1", + "resolved": "https://registry.npmjs.org/react-intersection-observer/-/react-intersection-observer-9.15.1.tgz", + "integrity": "sha512-vGrqYEVWXfH+AGu241uzfUpNK4HAdhCkSAyFdkMb9VWWXs6mxzBLpWCxEy9YcnDNY2g9eO6z7qUtTBdA9hc8pA==", + "license": "MIT", + "peerDependencies": { + "react": "^17.0.0 || ^18.0.0 || ^19.0.0", + "react-dom": "^17.0.0 || ^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "react-dom": { + "optional": true + } + } + }, + "node_modules/react-google-recaptcha": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/react-google-recaptcha/-/react-google-recaptcha-3.1.0.tgz", + "integrity": "sha512-cYW2/DWas8nEKZGD7SCu9BSuVz8iOcOLHChHyi7upUuVhkpkhYG/6N3KDiTQ3XAiZ2UAZkfvYKMfAHOzBOcGEg==", + "license": "MIT", + "dependencies": { + "prop-types": "^15.5.0", + "react-async-script": "^1.2.0" + }, + "peerDependencies": { + "react": ">=16.4.1" + } + }, + "node_modules/react-intersection-observer": { + "version": "9.15.1", + "resolved": "https://registry.npmjs.org/react-intersection-observer/-/react-intersection-observer-9.15.1.tgz", + "integrity": "sha512-vGrqYEVWXfH+AGu241uzfUpNK4HAdhCkSAyFdkMb9VWWXs6mxzBLpWCxEy9YcnDNY2g9eO6z7qUtTBdA9hc8pA==", + "license": "MIT", + "peerDependencies": { + "react": "^17.0.0 || ^18.0.0 || ^19.0.0", + "react-dom": "^17.0.0 || ^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "react-dom": { + "optional": true + } + } + }, "node_modules/react-is": { "version": "16.13.1", "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", diff --git a/package.json b/package.json index 7cecf80..6e6a469 100644 --- a/package.json +++ b/package.json @@ -11,11 +11,11 @@ }, "dependencies": { "framer-motion": "^12.4.3", - "react": "^19.0.0", - "react-dom": "^19.0.0", + "react": "^18.3.1", + "react-dom": "^18.3.1", "react-google-recaptcha": "^3.1.0", "react-intersection-observer": "^9.15.1", - "react-router-dom": "^7.1.5" + "react-router-dom": "^7.1.3" }, "devDependencies": { "@eslint/js": "^9.17.0", diff --git a/src/components/beranda/Banner.jsx b/src/components/beranda/Banner.jsx index 608a469..f87256f 100644 --- a/src/components/beranda/Banner.jsx +++ b/src/components/beranda/Banner.jsx @@ -5,7 +5,7 @@ function Banner() { return (
+ >
+ +
{/* Gambar L1-L4 untuk mobile */}
image 1 @@ -23,7 +25,7 @@ function Banner() {
{/* Teks dan tombol */} -
+

Bersama Rekan AI, Wujudkan Masa Depan Bisnis yang Lebih Inovatif dan Kompetitif. @@ -48,7 +50,6 @@ function Banner() { Coba Sekarang -

@@ -113,4 +114,3 @@ function Banner() { } export default Banner - diff --git a/src/components/beranda/Footer.jsx b/src/components/beranda/Footer.jsx index dab4ae7..7649a93 100644 --- a/src/components/beranda/Footer.jsx +++ b/src/components/beranda/Footer.jsx @@ -27,7 +27,7 @@ function Footer() {
{/* Kolom 2: Deskripsi singkat perusahaan */} -
+

Rekan AI{" "} @@ -145,7 +145,7 @@ function Footer() {

{/* Bagian hak cipta */} -
+

© Copyright 2025 Rekan AI. Seluruh hak cipta dilindungi undang-undang

diff --git a/src/components/beranda/Hero.jsx b/src/components/beranda/Hero.jsx index 2d5b2bb..c5fc0f4 100644 --- a/src/components/beranda/Hero.jsx +++ b/src/components/beranda/Hero.jsx @@ -30,13 +30,9 @@ function Hero() { WhatsApp Icon Konsultasi Gratis - - - - +
diff --git a/src/components/beranda/Kenapa.jsx b/src/components/beranda/Kenapa.jsx index ccb35c0..9514bbe 100644 --- a/src/components/beranda/Kenapa.jsx +++ b/src/components/beranda/Kenapa.jsx @@ -3,7 +3,7 @@ import { Link } from "react-router-dom" function Kenapa() { return ( -
+
{/* Decorative Circles */}
diff --git a/src/components/beranda/Mendukung.jsx b/src/components/beranda/Mendukung.jsx index b0eee04..f66cee6 100644 --- a/src/components/beranda/Mendukung.jsx +++ b/src/components/beranda/Mendukung.jsx @@ -9,7 +9,7 @@ function Mendukung() { ]; return ( -
+
{/* Left Content */}

diff --git a/src/components/contact/CustomerService.jsx b/src/components/contact/CustomerService.jsx index 3492ac7..a9f307e 100644 --- a/src/components/contact/CustomerService.jsx +++ b/src/components/contact/CustomerService.jsx @@ -18,19 +18,20 @@ const CustomerService = () => { }; return ( -

+
{/* LEFT SECTION - Informasi */} - +

- Kami Siap Membantu Bisnis Anda + Kami Siap Membantu Bisnis Anda
Lebih Maju!

@@ -76,9 +77,9 @@ const CustomerService = () => {
{/* RIGHT SECTION - Gambar */} - { const location = useLocation(); + + useEffect(() => { + if (location.hash) { + const element = document.querySelector(location.hash); + if (element) { + element.scrollIntoView({ behavior: "smooth" }); + } + } + }, [location]); + // State untuk menyimpan indeks pertanyaan yang sedang dibuka + // Jika tidak ada pertanyaan yang terbuka, nilai adalah null const [openQuestion, setOpenQuestion] = useState(null); useEffect(() => { @@ -31,7 +41,8 @@ const FAQ = () => { ]; return ( -
+
+ {/* Judul halaman FAQ */}

Frequently Asked Questions diff --git a/src/components/contact/FormSection.jsx b/src/components/contact/FormSection.jsx index 010e8a5..6eee2f5 100644 --- a/src/components/contact/FormSection.jsx +++ b/src/components/contact/FormSection.jsx @@ -1,30 +1,26 @@ -import { img10 } from "./asset"; // Pastikan img10 ada dan benar path-nya -import ReCAPTCHA from "react-google-recaptcha"; // Pastikan penulisan benar (ReCAPTCHA) -import useRecaptcha from './Recaptcha/useRecaptcha'; -import { useLocation } from "react-router-dom"; -import { useEffect } from "react"; -import { motion } from "framer-motion"; // Impor motion dari framer-motion + +import { img10 } from "./asset" +import ReCAPTCHA from "react-google-recaptcha" +import useRecaptcha from "./Recaptcha/useRecaptcha" +import { useLocation } from "react-router-dom" +import { useEffect } from "react" const ContactForm = () => { - const { capchaToken, handleRecaptcha } = useRecaptcha(); - - const location = useLocation(); + const { capchaToken, handleRecaptcha } = useRecaptcha() + const location = useLocation() useEffect(() => { if (location.hash) { - const element = document.querySelector(location.hash); + const element = document.querySelector(location.hash) if (element) { - element.scrollIntoView({ behavior: "smooth" }); + element.scrollIntoView({ behavior: "smooth" }) } } - }, [location]); + }, [location]) return ( - { backgroundRepeat: "no-repeat", }} > -
- {/* Bagian Kiri */} - -

+
+ {/* Left Section */} +
+

Isi formulir di samping ini dan kami akan menghubungi Anda secepat mungkin

-

- Kami percaya bahwa kolaborasi adalah kunci kesuksesan. Hubungi kami hari ini, dan mari wujudkan masa depan bisnis Anda bersama Rekan AI! +

+ Kami percaya bahwa kolaborasi adalah kunci kesuksesan. Hubungi kami hari ini, dan mari wujudkan masa depan + bisnis Anda bersama Rekan AI!

- {/* Bagian Form */} - -

- Hubungi Tim Terbaik Kami -

-

- Silakan isi data diri Anda pada formulir di bawah ini -

+ {/* Form Section */} +
+
+

+ Hubungi Tim Terbaik Kami +

+

Silakan isi data diri Anda pada formulir di bawah ini

-
-
- - -
-
- - { - e.target.value = e.target.value.replace(/[^0-9]/g, ""); - }} - /> -
-
- - -
-
- - -
-
- - -
- - - + +
+ + +
+
+ + { + e.target.value = e.target.value.replace(/[^0-9]/g, "") + }} + /> +
+
+ + +
+
+ + +
+
+ + +
+ + + +
-
- {/* ReCAPTCHA */} - - - +
+ +
- - - + + +
+
-
- ); -}; +
+ ) +} + +export default ContactForm -export default ContactForm; diff --git a/src/components/solusi/HeadCorporate/HeadCorporate.jsx b/src/components/solusi/HeadCorporate/HeadCorporate.jsx index fdcb9b5..b1a966b 100644 --- a/src/components/solusi/HeadCorporate/HeadCorporate.jsx +++ b/src/components/solusi/HeadCorporate/HeadCorporate.jsx @@ -44,11 +44,12 @@ export default function HeadCorporate() { WhatsApp Icon Konsultasi Gratis - - - + + +

diff --git a/src/components/solusi/HeadPersonal/HeadPersonal.jsx b/src/components/solusi/HeadPersonal/HeadPersonal.jsx index 76bced6..40f2a55 100644 --- a/src/components/solusi/HeadPersonal/HeadPersonal.jsx +++ b/src/components/solusi/HeadPersonal/HeadPersonal.jsx @@ -47,11 +47,12 @@ export default function HeadPersonal() { WhatsApp Icon Konsultasi Gratis - - - + + +
diff --git a/src/components/solusi/HeadStartup/HeadStartup.jsx b/src/components/solusi/HeadStartup/HeadStartup.jsx index 91ca8f2..ec42ec6 100644 --- a/src/components/solusi/HeadStartup/HeadStartup.jsx +++ b/src/components/solusi/HeadStartup/HeadStartup.jsx @@ -45,10 +45,11 @@ export default function HeadPersonal() { Konsultasi Gratis - - + +
diff --git a/src/components/solusi/SolusiCorporate/SolusiCorporate.jsx b/src/components/solusi/SolusiCorporate/SolusiCorporate.jsx index 22da617..131cdf6 100644 --- a/src/components/solusi/SolusiCorporate/SolusiCorporate.jsx +++ b/src/components/solusi/SolusiCorporate/SolusiCorporate.jsx @@ -9,17 +9,17 @@ export default function BusinessSolution() { // Detect mobile screen size useEffect(() => { const handleResize = () => { - setIsMobile(window.innerWidth < 768); // Set to true if screen width is less than 768px + setIsMobile(window.innerWidth < 768); // Set true jika lebar layar < 768px }; window.addEventListener("resize", handleResize); - handleResize(); // Initialize state on component mount + handleResize(); // Inisialisasi state saat pertama kali mount - return () => window.removeEventListener("resize", handleResize); // Cleanup on unmount + return () => window.removeEventListener("resize", handleResize); }, []); return ( -
+
{/* Header */}

{data.title}

@@ -27,8 +27,8 @@ export default function BusinessSolution() {
{/* Navigation Buttons */} -
-
+
+
{data.tabs.map((button) => (