add:initial files
24
.gitignore
vendored
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
# Logs
|
||||||
|
logs
|
||||||
|
*.log
|
||||||
|
npm-debug.log*
|
||||||
|
yarn-debug.log*
|
||||||
|
yarn-error.log*
|
||||||
|
pnpm-debug.log*
|
||||||
|
lerna-debug.log*
|
||||||
|
|
||||||
|
node_modules
|
||||||
|
dist
|
||||||
|
dist-ssr
|
||||||
|
*.local
|
||||||
|
|
||||||
|
# Editor directories and files
|
||||||
|
.vscode/*
|
||||||
|
!.vscode/extensions.json
|
||||||
|
.idea
|
||||||
|
.DS_Store
|
||||||
|
*.suo
|
||||||
|
*.ntvs*
|
||||||
|
*.njsproj
|
||||||
|
*.sln
|
||||||
|
*.sw?
|
38
eslint.config.js
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
import js from '@eslint/js'
|
||||||
|
import globals from 'globals'
|
||||||
|
import react from 'eslint-plugin-react'
|
||||||
|
import reactHooks from 'eslint-plugin-react-hooks'
|
||||||
|
import reactRefresh from 'eslint-plugin-react-refresh'
|
||||||
|
|
||||||
|
export default [
|
||||||
|
{ ignores: ['dist'] },
|
||||||
|
{
|
||||||
|
files: ['**/*.{js,jsx}'],
|
||||||
|
languageOptions: {
|
||||||
|
ecmaVersion: 2020,
|
||||||
|
globals: globals.browser,
|
||||||
|
parserOptions: {
|
||||||
|
ecmaVersion: 'latest',
|
||||||
|
ecmaFeatures: { jsx: true },
|
||||||
|
sourceType: 'module',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
settings: { react: { version: '18.3' } },
|
||||||
|
plugins: {
|
||||||
|
react,
|
||||||
|
'react-hooks': reactHooks,
|
||||||
|
'react-refresh': reactRefresh,
|
||||||
|
},
|
||||||
|
rules: {
|
||||||
|
...js.configs.recommended.rules,
|
||||||
|
...react.configs.recommended.rules,
|
||||||
|
...react.configs['jsx-runtime'].rules,
|
||||||
|
...reactHooks.configs.recommended.rules,
|
||||||
|
'react/jsx-no-target-blank': 'off',
|
||||||
|
'react-refresh/only-export-components': [
|
||||||
|
'warn',
|
||||||
|
{ allowConstantExport: true },
|
||||||
|
],
|
||||||
|
},
|
||||||
|
},
|
||||||
|
]
|
23
index.html
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
<!doctype html> <!-- Menandakan bahwa ini adalah dokumen HTML5 -->
|
||||||
|
<html lang="en"> <!-- Menentukan bahasa utama dari halaman adalah bahasa Inggris -->
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8" /> <!-- Menentukan karakter encoding untuk halaman ini (UTF-8 mencakup banyak karakter internasional) -->
|
||||||
|
<link rel="icon" type="image/svg+xml" href="/vite.svg" /> <!-- Menentukan favicon halaman (ikon kecil di tab browser) -->
|
||||||
|
|
||||||
|
<!-- Mengimpor font 'Montserrat' dari Google Fonts untuk digunakan di seluruh halaman -->
|
||||||
|
<link href="https://fonts.googleapis.com/css2?family=Montserrat:wght@400;700&display=swap" rel="stylesheet">
|
||||||
|
|
||||||
|
<!-- Menentukan viewport untuk memastikan aplikasi responsif pada perangkat mobile (agar skalanya sesuai dengan lebar layar perangkat) -->
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||||
|
|
||||||
|
<!-- Menentukan judul halaman yang akan ditampilkan di tab browser -->
|
||||||
|
<title>Vite + React</title>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<!-- Elemen dengan id 'root' adalah tempat di mana aplikasi React akan di-render -->
|
||||||
|
<div id="root"></div>
|
||||||
|
|
||||||
|
<!-- Menyisipkan script utama aplikasi React. Menggunakan 'type="module"' karena kita menggunakan ES Modules -->
|
||||||
|
<script type="module" src="/src/main.jsx"></script>
|
||||||
|
</body>
|
||||||
|
</html>
|
5804
package-lock.json
generated
Normal file
31
package.json
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
{
|
||||||
|
"name": "rekanaiv3",
|
||||||
|
"private": true,
|
||||||
|
"version": "0.0.0",
|
||||||
|
"type": "module",
|
||||||
|
"scripts": {
|
||||||
|
"dev": "vite",
|
||||||
|
"build": "vite build",
|
||||||
|
"lint": "eslint .",
|
||||||
|
"preview": "vite preview"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"react": "^18.3.1",
|
||||||
|
"react-dom": "^18.3.1"
|
||||||
|
},
|
||||||
|
"devDependencies": {
|
||||||
|
"@eslint/js": "^9.17.0",
|
||||||
|
"@types/react": "^18.3.18",
|
||||||
|
"@types/react-dom": "^18.3.5",
|
||||||
|
"@vitejs/plugin-react": "^4.3.4",
|
||||||
|
"autoprefixer": "^10.4.20",
|
||||||
|
"eslint": "^9.17.0",
|
||||||
|
"eslint-plugin-react": "^7.37.2",
|
||||||
|
"eslint-plugin-react-hooks": "^5.0.0",
|
||||||
|
"eslint-plugin-react-refresh": "^0.4.16",
|
||||||
|
"globals": "^15.14.0",
|
||||||
|
"postcss": "^8.4.49",
|
||||||
|
"tailwindcss": "^3.4.17",
|
||||||
|
"vite": "^6.0.5"
|
||||||
|
}
|
||||||
|
}
|
6
postcss.config.js
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
export default {
|
||||||
|
plugins: {
|
||||||
|
tailwindcss: {},
|
||||||
|
autoprefixer: {},
|
||||||
|
},
|
||||||
|
}
|
1
public/vite.svg
Normal file
@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" class="iconify iconify--logos" width="31.88" height="32" preserveAspectRatio="xMidYMid meet" viewBox="0 0 256 257"><defs><linearGradient id="IconifyId1813088fe1fbc01fb466" x1="-.828%" x2="57.636%" y1="7.652%" y2="78.411%"><stop offset="0%" stop-color="#41D1FF"></stop><stop offset="100%" stop-color="#BD34FE"></stop></linearGradient><linearGradient id="IconifyId1813088fe1fbc01fb467" x1="43.376%" x2="50.316%" y1="2.242%" y2="89.03%"><stop offset="0%" stop-color="#FFEA83"></stop><stop offset="8.333%" stop-color="#FFDD35"></stop><stop offset="100%" stop-color="#FFA800"></stop></linearGradient></defs><path fill="url(#IconifyId1813088fe1fbc01fb466)" d="M255.153 37.938L134.897 252.976c-2.483 4.44-8.862 4.466-11.382.048L.875 37.958c-2.746-4.814 1.371-10.646 6.827-9.67l120.385 21.517a6.537 6.537 0 0 0 2.322-.004l117.867-21.483c5.438-.991 9.574 4.796 6.877 9.62Z"></path><path fill="url(#IconifyId1813088fe1fbc01fb467)" d="M185.432.063L96.44 17.501a3.268 3.268 0 0 0-2.634 3.014l-5.474 92.456a3.268 3.268 0 0 0 3.997 3.378l24.777-5.718c2.318-.535 4.413 1.507 3.936 3.838l-7.361 36.047c-.495 2.426 1.782 4.5 4.151 3.78l15.304-4.649c2.372-.72 4.652 1.36 4.15 3.788l-11.698 56.621c-.732 3.542 3.979 5.473 5.943 2.437l1.313-2.028l72.516-144.72c1.215-2.423-.88-5.186-3.54-4.672l-25.505 4.922c-2.396.462-4.435-1.77-3.759-4.114l16.646-57.705c.677-2.35-1.37-4.583-3.769-4.113Z"></path></svg>
|
After Width: | Height: | Size: 1.5 KiB |
23
src/App.jsx
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
import Header from "./componen/Header/Header"; // Mengimpor komponen Header untuk ditampilkan di bagian atas halaman
|
||||||
|
import CustomerService from "./componen/customer/CustomerService"; // Mengimpor komponen CustomerService untuk menampilkan informasi layanan pelanggan
|
||||||
|
import FormSection from "./componen/form/FormSection"; // Mengimpor komponen FormSection yang berisi form
|
||||||
|
import FAQ from "./componen/faq/FAQSection"; // Mengimpor komponen FAQ untuk menampilkan bagian pertanyaan yang sering diajukan
|
||||||
|
import BottomCTA from "./componen/bottom/BottomCTA"; // Mengimpor komponen BottomCTA untuk panggilan aksi di bagian bawah halaman
|
||||||
|
import Footer from "./componen/footer/Footer"; // Mengimpor komponen Footer untuk menampilkan bagian footer
|
||||||
|
import WhatsAppButton from "./componen/whatsappbutton/whatsappbutton"; // Mengimpor komponen WhatsAppButton untuk menampilkan tombol WhatsApp
|
||||||
|
|
||||||
|
function App() {
|
||||||
|
return (
|
||||||
|
<>
|
||||||
|
<Header /> {/* Menampilkan komponen Header */}
|
||||||
|
<CustomerService /> {/* Menampilkan komponen CustomerService */}
|
||||||
|
<FormSection /> {/* Menampilkan komponen FormSection */}
|
||||||
|
<FAQ /> {/* Menampilkan komponen FAQ */}
|
||||||
|
<BottomCTA /> {/* Menampilkan komponen BottomCTA */}
|
||||||
|
<Footer /> {/* Menampilkan komponen Footer */}
|
||||||
|
<WhatsAppButton /> {/* Menampilkan komponen WhatsAppButton */}
|
||||||
|
</>
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
export default App;
|
104
src/componen/Header/Header.jsx
Normal file
@ -0,0 +1,104 @@
|
|||||||
|
import { useState } from 'react';
|
||||||
|
import Logo1 from '../asset/logo.png'; // Mengimpor logo
|
||||||
|
import search from '../asset/search.png'; // Mengimpor ikon pencarian
|
||||||
|
import row from '../asset/arrow.png'; // Mengimpor ikon panah untuk dropdown
|
||||||
|
|
||||||
|
const Header = () => {
|
||||||
|
const [isMobileMenuOpen, setIsMobileMenuOpen] = useState(false); // Menyimpan status menu mobile (terbuka atau tertutup)
|
||||||
|
|
||||||
|
return (
|
||||||
|
<header className="fixed top-0 left-0 w-full z-50 font-montserrat bg-white shadow-md">
|
||||||
|
<nav className="flex items-center justify-between px-5 sm:px-10 md:px-20 py-3 gap-4 flex-wrap relative">
|
||||||
|
{/* Logo */}
|
||||||
|
<div className="flex items-center gap-2">
|
||||||
|
<img src={Logo1} alt="Logo" className="w-[203px] h-[36.05px]" /> {/* Menampilkan logo dengan ukuran spesifik */}
|
||||||
|
</div>
|
||||||
|
|
||||||
|
{/* Tombol Hamburger (Responsive) */}
|
||||||
|
<div className="sm:hidden flex items-center">
|
||||||
|
<button
|
||||||
|
onClick={() => setIsMobileMenuOpen(!isMobileMenuOpen)} // Mengubah status menu mobile saat tombol ditekan
|
||||||
|
className="text-[#212121]"
|
||||||
|
>
|
||||||
|
{/* Icon hamburger (menu mobile) */}
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" className="h-6 w-6" fill="none" viewBox="0 0 24 24" stroke="currentColor">
|
||||||
|
<path strokeLinecap="round" strokeLinejoin="round" strokeWidth="2" d="M4 6h16M4 12h16M4 18h16" />
|
||||||
|
</svg>
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
{/* Menu Navigasi */}
|
||||||
|
<ul
|
||||||
|
className={`${
|
||||||
|
isMobileMenuOpen ? 'flex' : 'hidden' // Menampilkan menu jika isMobileMenuOpen true, jika tidak disembunyikan
|
||||||
|
} sm:flex flex-col sm:flex-row list-none gap-5 sm:gap-10 absolute sm:relative top-full left-0 sm:top-auto sm:left-auto w-full sm:w-auto bg-white sm:bg-transparent p-5 sm:p-0 shadow-md sm:shadow-none z-40`}
|
||||||
|
>
|
||||||
|
{/* Menu Item Beranda */}
|
||||||
|
<li className="relative group">
|
||||||
|
<a href="#home" className="text-[#212121] text-base transition-colors hover:text-[#5a55ff]">
|
||||||
|
Beranda
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
{/* Menu Item Produk */}
|
||||||
|
<li className="relative group">
|
||||||
|
<a href="#produk" className="text-[#212121] text-base transition-colors hover:text-[#5a55ff] flex items-center">
|
||||||
|
Produk
|
||||||
|
<img src={row} alt="arrow" className="ml-1" /> {/* Ikon panah untuk dropdown Produk */}
|
||||||
|
</a>
|
||||||
|
{/* Dropdown menu untuk Produk */}
|
||||||
|
<ul className="absolute left-0 top-full hidden w-40 bg-white list-none py-2 shadow-lg group-hover:block z-50">
|
||||||
|
<li className="px-5 py-2 hover:text-[#5a55ff]">
|
||||||
|
<a href="#produk1" className="text-[#212121]">Produk 1</a>
|
||||||
|
</li>
|
||||||
|
<li className="px-5 py-2 hover:text-[#5a55ff]">
|
||||||
|
<a href="#produk2" className="text-[#212121]">Produk 2</a>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
{/* Menu Item Solusi */}
|
||||||
|
<li className="relative group">
|
||||||
|
<a href="#solusi" className="text-[#212121] text-base transition-colors hover:text-[#5a55ff] flex items-center">
|
||||||
|
Solusi
|
||||||
|
<img src={row} alt="arrow" className="ml-1" /> {/* Ikon panah untuk dropdown Solusi */}
|
||||||
|
</a>
|
||||||
|
{/* Dropdown menu untuk Solusi */}
|
||||||
|
<ul className="absolute left-0 top-full hidden w-40 bg-white list-none py-2 shadow-lg group-hover:block z-50">
|
||||||
|
<li className="px-5 py-2 hover:text-[#5a55ff]">
|
||||||
|
<a href="#solusi1" className="text-[#212121]">Solusi 1</a>
|
||||||
|
</li>
|
||||||
|
<li className="px-5 py-2 hover:text-[#5a55ff]">
|
||||||
|
<a href="#solusi2" className="text-[#212121]">Solusi 2</a>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
{/* Menu Item Hubungi Kami */}
|
||||||
|
<li>
|
||||||
|
<a href="#hubungi" className="text-[#212121] text-base transition-colors hover:text-[#5a55ff]">
|
||||||
|
Hubungi Kami
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
{/* Pencarian */}
|
||||||
|
<div className="relative flex items-center gap-2 w-full sm:w-auto order-2 sm:order-none">
|
||||||
|
<input
|
||||||
|
type="text"
|
||||||
|
placeholder="Pencarian..."
|
||||||
|
className="w-full sm:w-[592px] h-12 px-4 text-sm border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-[#5a55ff]" // Field input pencarian
|
||||||
|
/>
|
||||||
|
{/* Tombol Pencarian */}
|
||||||
|
<button className="absolute right-4 sm:right-2 text-gray-500 hover:text-[#5a55ff]">
|
||||||
|
<img src={search} alt="search" className="w-5 h-5" /> {/* Menampilkan ikon pencarian */}
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
{/* Tombol Konsultasi */}
|
||||||
|
<button className="bg-[#DC0168] text-white px-5 py-2 text-sm font-bold rounded-md hover:bg-[#e6006e] transition order-3 sm:order-none w-full sm:w-auto mt-3 sm:mt-0">
|
||||||
|
Konsultasi Gratis
|
||||||
|
</button>
|
||||||
|
</nav>
|
||||||
|
</header>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
export default Header;
|
BIN
src/componen/asset/Component 11.png
Normal file
After Width: | Height: | Size: 3.0 KiB |
BIN
src/componen/asset/Frame.png
Normal file
After Width: | Height: | Size: 9.1 KiB |
BIN
src/componen/asset/Frame27.png
Normal file
After Width: | Height: | Size: 7.5 KiB |
BIN
src/componen/asset/Whatsapp22.png
Normal file
After Width: | Height: | Size: 958 B |
BIN
src/componen/asset/arrow.png
Normal file
After Width: | Height: | Size: 266 B |
BIN
src/componen/asset/customer.png
Normal file
After Width: | Height: | Size: 285 KiB |
BIN
src/componen/asset/email.png
Normal file
After Width: | Height: | Size: 4.5 KiB |
BIN
src/componen/asset/facebook.png
Normal file
After Width: | Height: | Size: 715 B |
BIN
src/componen/asset/image 10.png
Normal file
After Width: | Height: | Size: 206 KiB |
BIN
src/componen/asset/instagram.png
Normal file
After Width: | Height: | Size: 930 B |
BIN
src/componen/asset/kementerian.png
Normal file
After Width: | Height: | Size: 7.8 KiB |
BIN
src/componen/asset/kominfo.png
Normal file
After Width: | Height: | Size: 3.6 KiB |
BIN
src/componen/asset/logo.png
Normal file
After Width: | Height: | Size: 15 KiB |
BIN
src/componen/asset/nvidia.png
Normal file
After Width: | Height: | Size: 7.1 KiB |
BIN
src/componen/asset/ojk.png
Normal file
After Width: | Height: | Size: 5.6 KiB |
BIN
src/componen/asset/phone.png
Normal file
After Width: | Height: | Size: 4.8 KiB |
BIN
src/componen/asset/search.png
Normal file
After Width: | Height: | Size: 596 B |
BIN
src/componen/asset/telephone.png
Normal file
After Width: | Height: | Size: 4.8 KiB |
BIN
src/componen/asset/whatsapp-color_svgrepo.com.png
Normal file
After Width: | Height: | Size: 881 B |
BIN
src/componen/asset/x.png
Normal file
After Width: | Height: | Size: 651 B |
44
src/componen/bottom/BottomCTA.jsx
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
import logowa from "../asset/whatsapp-color_svgrepo.com.png"; // Import gambar WhatsApp untuk ikon
|
||||||
|
|
||||||
|
const BottomCTA = () => {
|
||||||
|
return (
|
||||||
|
<section className="w-full bg-white text-center py-10 mb-[113px]">
|
||||||
|
{/* Bagian ini untuk menampilkan teks yang memberi tahu pengguna bahwa mereka bisa menghubungi jika masih ada pertanyaan */}
|
||||||
|
<div className="flex flex-wrap justify-center gap-2">
|
||||||
|
<h3 className="text-[#212121] text-center text-[32px] font-semibold leading-[48px] tracking-[0.005em] text-left">
|
||||||
|
Masih punya pertanyaan seputar
|
||||||
|
</h3>
|
||||||
|
|
||||||
|
<h3 className="text-lg sm:text-xl md:text-2xl text-[#212121] font-semibold mb-3">
|
||||||
|
{/* Menampilkan tag #Rekan AI dengan background warna dan teks putih */}
|
||||||
|
<span className="bg-[#dc0168] bg-[length:100%] rounded-[18px] text-[#ffffff] px-6 py-2 inline-block mr-[5px]">
|
||||||
|
#Rekan AI
|
||||||
|
</span>
|
||||||
|
?
|
||||||
|
</h3>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
{/* Pesan yang memberi tahu pengguna untuk menghubungi jika pertanyaan belum terjawab */}
|
||||||
|
<p className=" text-[20px] font-normal leading-[30px] tracking-[0.005em] text-center text-[#212121] mb-5 mx-auto">
|
||||||
|
Jika pertanyaan Anda belum terjawab di atas, jangan ragu untuk menghubungi kami melalui formulir<br />kontak atau email. Kami dengan senang hati akan membantu!
|
||||||
|
</p>
|
||||||
|
|
||||||
|
{/* Bagian tombol CTA */}
|
||||||
|
<div className="flex justify-center flex-col lg:flex-row mt-8 lg:mt-16 gap-6">
|
||||||
|
{/* Tombol Konsultasi Gratis dengan ikon WhatsApp */}
|
||||||
|
<button className="w-full lg:w-[270px] h-[70px] btn2 flex items-center justify-center py-3 border-2 border-[#DC0168] rounded-[14px] text-[#DC0168] font-bold text-[18px] lg:text-[20px] cursor-pointer transition-all ease-in-out hover:bg-[#ffffff1a]">
|
||||||
|
{/* Gambar WhatsApp di kiri tombol */}
|
||||||
|
<img src={logowa} alt="WhatsApp Icon" className="mr-2 h-[1.2rem] w-auto" />
|
||||||
|
Konsultasi Gratis
|
||||||
|
</button>
|
||||||
|
|
||||||
|
{/* Tombol Coba Sekarang dengan efek gradient */}
|
||||||
|
<button className="w-full lg:w-[276px] h-[70px] btn2 flex items-center justify-center py-3 px-8 rounded-[14px] bg-gradient-to-r from-[#DC0168] to-[#5B59E8] text-white font-bold text-[18px] lg:text-[20px] cursor-pointer transition-all ease-in-out hover:opacity-90">
|
||||||
|
Coba Sekarang
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
export default BottomCTA;
|
79
src/componen/customer/CustomerService.jsx
Normal file
@ -0,0 +1,79 @@
|
|||||||
|
import email from "../asset/email.png"; // Import gambar icon untuk email
|
||||||
|
import customer from "../asset/customer.png"; // Import gambar ilustrasi customer service
|
||||||
|
import phone from "../asset/phone.png"; // Import gambar icon untuk telepon
|
||||||
|
|
||||||
|
const CustomerService = () => {
|
||||||
|
return (
|
||||||
|
<section className="mt-[180px] md:mt-[115px] 2xl:mt-[45px] flex flex-col md:flex-row justify-between items-center px-5 py-10 max-w-6xl mx-auto gap-10 mb-[114px]">
|
||||||
|
{/* Container utama dengan styling responsif untuk menampung konten customer service */}
|
||||||
|
|
||||||
|
<div className="md:max-w-xl text-center md:text-left ">
|
||||||
|
{/* Div untuk teks utama dan informasi pendukung */}
|
||||||
|
|
||||||
|
<div className="mb-5">
|
||||||
|
<h2 className="text-[#212121] text-[32px] font-semibold leading-[48px] text-left decoration-solid">
|
||||||
|
{/* Heading utama dengan warna teks dan ukuran font yang diatur */}
|
||||||
|
Kami Siap Membantu Bisnis <br /> Anda Lebih Maju!
|
||||||
|
</h2>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<p className="text-[#212121] leading-relaxed mb-6 text-left">
|
||||||
|
{/* Paragraf penjelasan singkat mengenai layanan yang ditawarkan */}
|
||||||
|
Butuh informasi lebih lanjut tentang produk atau solusi kami? <br />{" "}
|
||||||
|
Tim Rekan AI siap menjawab pertanyaan Anda dengan cepat dan
|
||||||
|
profesional.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<div className="flex flex-col gap-4">
|
||||||
|
{/* Container untuk menampung daftar kontak dalam format fleksibel */}
|
||||||
|
|
||||||
|
<div className="flex items-start gap-4">
|
||||||
|
{/* Kontainer untuk informasi kontak via email */}
|
||||||
|
<img
|
||||||
|
src={email} // Menampilkan icon email
|
||||||
|
alt="Email Icon" // Teks alternatif untuk gambar email
|
||||||
|
className="w-10 h-10 object-contain" // Styling untuk ukuran gambar
|
||||||
|
/>
|
||||||
|
<div className="text-left">
|
||||||
|
<p className="text-sm text-[#212121]">
|
||||||
|
Kirim pertanyaan Anda ke{" "}
|
||||||
|
<strong className="text-[#5B59E8]">support@rekanai.com</strong>{" "}
|
||||||
|
dan tim kami
|
||||||
|
</p>
|
||||||
|
<p className="text-sm text-[#212121]">akan segera merespons.</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div className="flex items-start gap-4">
|
||||||
|
{/* Kontainer untuk informasi kontak via telepon */}
|
||||||
|
<img
|
||||||
|
src={phone} // Menampilkan icon telepon
|
||||||
|
alt="Phone Icon" // Teks alternatif untuk gambar telepon
|
||||||
|
className="w-10 h-10 object-contain" // Styling untuk ukuran gambar
|
||||||
|
/>
|
||||||
|
<div className="text-left">
|
||||||
|
<p className="text-sm text-[#212121]">
|
||||||
|
Hubungi kami di{" "}
|
||||||
|
<strong className="text-[#5B59E8]">(+62) 123-4567-890</strong>
|
||||||
|
</p>
|
||||||
|
<p className="text-sm text-[#212121]">
|
||||||
|
(Senin - Jumat, 08:00 - 17:00 WIB).
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div className="flex-1 flex justify-center items-center">
|
||||||
|
{/* Div untuk menampilkan gambar ilustrasi customer service */}
|
||||||
|
<img
|
||||||
|
src={customer} // Menampilkan gambar customer service
|
||||||
|
alt="Customer Service" // Teks alternatif untuk gambar customer service
|
||||||
|
className="max-w-full h-auto" // Styling untuk memastikan gambar berskala dengan baik
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
export default CustomerService; // Ekspor komponen agar dapat digunakan di file lain
|
157
src/componen/faq/FAQSection.jsx
Normal file
@ -0,0 +1,157 @@
|
|||||||
|
import { useState } from "react";
|
||||||
|
|
||||||
|
const FAQ = () => {
|
||||||
|
// State untuk menyimpan indeks pertanyaan yang sedang dibuka
|
||||||
|
// Jika tidak ada pertanyaan yang terbuka, nilai adalah null
|
||||||
|
const [openQuestion, setOpenQuestion] = useState(null);
|
||||||
|
|
||||||
|
// Fungsi untuk membuka atau menutup pertanyaan berdasarkan indeks
|
||||||
|
// Jika pertanyaan yang sama diklik lagi, tutup pertanyaan tersebut
|
||||||
|
const toggleQuestion = (index) => {
|
||||||
|
// Cek apakah pertanyaan yang sama diklik
|
||||||
|
// Jika iya, tutup (set openQuestion ke null), jika tidak, buka pertanyaan tersebut
|
||||||
|
setOpenQuestion(openQuestion === index ? null : index);
|
||||||
|
};
|
||||||
|
|
||||||
|
// Data FAQ yang berisi array objek dengan pertanyaan dan jawaban
|
||||||
|
const faqData = [
|
||||||
|
{
|
||||||
|
question: "Apa itu Rekan AI?",
|
||||||
|
answer: (
|
||||||
|
<p>
|
||||||
|
Rekan AI adalah platform teknologi kecerdasan buatan (AI) yang
|
||||||
|
menyediakan solusi berbasis AI untuk meningkatkan efisiensi
|
||||||
|
operasional, analisis data, dan pengalaman pelanggan bagi UMKM hingga
|
||||||
|
perusahaan besar.
|
||||||
|
</p>
|
||||||
|
),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
question: "Apa saja produk yang ditawarkan oleh Rekan AI?",
|
||||||
|
answer: (
|
||||||
|
<div>
|
||||||
|
<p>Kami menawarkan beberapa produk unggulan, termasuk:</p>
|
||||||
|
<ul className="list-disc list-inside">
|
||||||
|
<li>
|
||||||
|
Rekan Doku: Solusi autentikasi dan manajemen dokumen digital.
|
||||||
|
</li>
|
||||||
|
<li>Rekan HR: Automasi dan optimalisasi proses HR.</li>
|
||||||
|
<li>
|
||||||
|
Rekan LLM: AI berbasis model bahasa besar untuk analisis dan
|
||||||
|
komunikasi.
|
||||||
|
</li>
|
||||||
|
<li>Rekan Veri: Verifikasi data yang cepat dan akurat.</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
question: "Bagaimana cara menghubungi tim Rekan AI?",
|
||||||
|
answer: (
|
||||||
|
<div>
|
||||||
|
<p>Anda dapat menghubungi kami melalui:</p>
|
||||||
|
<ul className="list-disc list-inside">
|
||||||
|
<li>Email: support@rekanai.com</li>
|
||||||
|
<li>Telepon: (+62) 123-4567-890</li>
|
||||||
|
<li>WhatsApp: (+62) 812-3456-7890</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
question: "Apakah solusi Rekan AI mudah diimplementasikan?",
|
||||||
|
answer: (
|
||||||
|
<p>
|
||||||
|
Ya, produk kami dirancang untuk integrasi yang mulus dengan sistem
|
||||||
|
bisnis Anda yang sudah ada. Kami juga menyediakan dukungan teknis
|
||||||
|
untuk memastikan implementasi berjalan lancar.
|
||||||
|
</p>
|
||||||
|
),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
question: "Apakah Rekan AI cocok untuk UMKM?",
|
||||||
|
answer: (
|
||||||
|
<p>
|
||||||
|
Tentu saja! Kami menawarkan solusi yang terjangkau, mudah digunakan,
|
||||||
|
dan dapat membantu UMKM meningkatkan efisiensi, mengurangi biaya
|
||||||
|
operasional, dan mempercepat pertumbuhan.
|
||||||
|
</p>
|
||||||
|
),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
question: "Bagaimana dengan keamanan data?",
|
||||||
|
answer: (
|
||||||
|
<p>
|
||||||
|
Keamanan adalah prioritas kami. Semua produk Rekan AI menggunakan
|
||||||
|
teknologi enkripsi canggih untuk melindungi data Anda dari ancaman
|
||||||
|
cyber.
|
||||||
|
</p>
|
||||||
|
),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
question: "Bagaimana saya memulai menggunakan produk Rekan AI?",
|
||||||
|
answer: (
|
||||||
|
<p>
|
||||||
|
Anda dapat memulai dengan menghubungi tim kami untuk demo produk atau
|
||||||
|
konsultasi gratis. Kami akan membantu Anda menemukan solusi yang
|
||||||
|
paling sesuai dengan kebutuhan bisnis Anda.
|
||||||
|
</p>
|
||||||
|
),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
question: "Apakah Rekan AI memiliki paket harga yang bisa dipilih?",
|
||||||
|
answer: (
|
||||||
|
<p>
|
||||||
|
Ya, kami dapat memberikan paket harga terbaik untuk solusi produk yang
|
||||||
|
Anda pilih. Informasi lebih lanjut silakan hubungi kami dan
|
||||||
|
konsultasikan kebutuhan Anda secara gratis.
|
||||||
|
</p>
|
||||||
|
),
|
||||||
|
},
|
||||||
|
];
|
||||||
|
|
||||||
|
return (
|
||||||
|
<div className="text-[#212121] max-w-4xl mx-auto px-4 py-6 text-center ">
|
||||||
|
{/* Judul halaman FAQ */}
|
||||||
|
<div className="mt-[111px]">
|
||||||
|
<h1 className="text-[32px] font-semibold leading-[48px] tracking-[0.005em] text-center mb-4">
|
||||||
|
Frequently Asked Questions
|
||||||
|
</h1>
|
||||||
|
<h2 className="text-[20px] font-normal leading-[30px] tracking-[0.005em] text-center mb-6">
|
||||||
|
Pertanyaan Umum tentang Rekan AI
|
||||||
|
</h2>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
{/* Bagian FAQ */}
|
||||||
|
<div className="space-y-4 mb-[110px] mt-[60px] ">
|
||||||
|
{faqData.map((item, index) => (
|
||||||
|
<div
|
||||||
|
key={index}
|
||||||
|
className="border border-[#5B59E8] rounded-lg overflow-hidden mb-[22px]"
|
||||||
|
>
|
||||||
|
{/* Bagian untuk menampilkan pertanyaan dan tanda buka/tutup */}
|
||||||
|
<div
|
||||||
|
className={`flex justify-between items-center p-4 cursor-pointer bg-white border-b ${
|
||||||
|
// Jika pertanyaan ini dibuka, beri highlight
|
||||||
|
openQuestion === index ? "text-blue-500" : ""
|
||||||
|
}`}
|
||||||
|
onClick={() => toggleQuestion(index)} // Ketika pertanyaan diklik, panggil toggleQuestion
|
||||||
|
>
|
||||||
|
<span className="font-bold">{item.question}</span>
|
||||||
|
<span>{openQuestion === index ? "–" : "+"}</span> {/* Tampilkan tanda buka atau tutup */}
|
||||||
|
</div>
|
||||||
|
|
||||||
|
{/* Bagian untuk menampilkan jawaban jika pertanyaan ini terbuka */}
|
||||||
|
{openQuestion === index && (
|
||||||
|
<div className="p-4 text-left bg-white text-sm">
|
||||||
|
{item.answer}
|
||||||
|
</div>
|
||||||
|
)}
|
||||||
|
</div>
|
||||||
|
))}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
export default FAQ;
|
113
src/componen/footer/Footer.jsx
Normal file
@ -0,0 +1,113 @@
|
|||||||
|
// Import gambar-gambar yang digunakan dalam komponen Footer
|
||||||
|
import nvdia from "../asset/nvidia.png"; // Gambar logo NVIDIA sebagai partner
|
||||||
|
import kmn from "../asset/kementerian.png"; // Gambar logo Kementerian sebagai partner
|
||||||
|
import kominfo from "../asset/kominfo.png"; // Gambar logo Kominfo sebagai partner
|
||||||
|
import ojk from "../asset/ojk.png"; // Gambar logo OJK sebagai partner
|
||||||
|
import facebook from "../asset/facebook.png"; // Gambar logo Facebook untuk ikon media sosial
|
||||||
|
import x from "../asset/x.png"; // Gambar logo X (dulu Twitter) untuk ikon media sosial
|
||||||
|
import instagram from "../asset/instagram.png"; // Gambar logo Instagram untuk ikon media sosial
|
||||||
|
import frame from "../asset/Component 11.png"; // Gambar logo utama perusahaan
|
||||||
|
|
||||||
|
function Footer() {
|
||||||
|
return (
|
||||||
|
<footer className="bg-[#D4DAE4] py-10 text-[#212121]">
|
||||||
|
{/* Kontainer utama footer */}
|
||||||
|
<div className="flex flex-col sm:flex-row sm:flex-wrap justify-between gap-5 mx-5 sm:mx-28 mt-20 text-sm">
|
||||||
|
{/* Kolom 1: Logo perusahaan */}
|
||||||
|
<div className="mb-5 sm:mb-0">
|
||||||
|
<img
|
||||||
|
src={frame} // Gambar logo perusahaan
|
||||||
|
alt="Logo"
|
||||||
|
className="max-w-[200px] w-[50.3px] h-[40.24px] sm:mx-0"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
{/* Kolom 2: Deskripsi singkat perusahaan */}
|
||||||
|
<div className="flex-1 mb-5 sm:mb-0 sm:pl-0">
|
||||||
|
<div className="flex mb-5">
|
||||||
|
<p>
|
||||||
|
<strong className="text-[25px] text-[#5B59E8]">Rekan AI</strong>{" "}
|
||||||
|
<br />
|
||||||
|
<span className="text-[#5B59E8] italic">
|
||||||
|
Reimagine Your Business with AI.
|
||||||
|
</span>
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
<p className="mb-4">
|
||||||
|
Jl. Anggrek No.6, Sawah Lama, Kec. Ciputat, Kota Tangerang Selatan,
|
||||||
|
Banten 15413
|
||||||
|
</p>
|
||||||
|
<p className="mb-4">Lebih dekat dengan Kami</p>
|
||||||
|
<div className="flex space-x-3">
|
||||||
|
{/* Tautan ke media sosial */}
|
||||||
|
<a href="#">
|
||||||
|
<img src={instagram} alt="Instagram" className="w-5 h-5" /> {/* Ikon Instagram */}
|
||||||
|
</a>
|
||||||
|
<a href="#">
|
||||||
|
<img src={facebook} alt="Facebook" className="w-5 h-5" /> {/* Ikon Facebook */}
|
||||||
|
</a>
|
||||||
|
<a href="#">
|
||||||
|
<img src={x} alt="Twitter" className="w-5 h-5" /> {/* Ikon Twitter (X) */}
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
{/* Kolom 3: Produk perusahaan */}
|
||||||
|
<div className="flex-1 mb-5 sm:mb-0 sm:pl-0">
|
||||||
|
<h4 className="text-base font-semibold mb-4">Produk Kami</h4>
|
||||||
|
<ul className="space-y-4">
|
||||||
|
<li>Rekan Doku</li> {/* Produk: Dokumen otomatis */}
|
||||||
|
<li>Rekan Veri</li> {/* Produk: Verifikasi data */}
|
||||||
|
<li>Rekan HR</li> {/* Produk: Manajemen SDM */}
|
||||||
|
<li>Rekan LLM</li> {/* Produk: Model bahasa besar */}
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
{/* Kolom 4: Solusi yang ditawarkan */}
|
||||||
|
<div className="flex-1 mb-5 sm:mb-0 sm:pl-0">
|
||||||
|
<h4 className="text-base font-semibold mb-4">Solusi Kami</h4>
|
||||||
|
<ul className="space-y-4">
|
||||||
|
<li>Personal</li> {/* Solusi untuk individu */}
|
||||||
|
<li>UMKM</li> {/* Solusi untuk Usaha Mikro, Kecil, dan Menengah */}
|
||||||
|
<li>Corporate Business</li> {/* Solusi untuk perusahaan besar */}
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
{/* Kolom 5: Informasi kontak */}
|
||||||
|
<div className="flex-1 mb-5 sm:mb-0 sm:pl-0">
|
||||||
|
<h4 className="text-base font-semibold mb-4">Hubungi Kami</h4>
|
||||||
|
<ul className="space-y-4">
|
||||||
|
<li>Email: support@rekanai.com</li> {/* Email dukungan */}
|
||||||
|
<li>Phone: +68452098</li> {/* Nomor telepon */}
|
||||||
|
<li>F.A.Q</li> {/* Halaman Pertanyaan yang Sering Diajukan */}
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
{/* Kolom 6: Partner perusahaan */}
|
||||||
|
<div className="mb-5 sm:mb-0 sm:pl-0">
|
||||||
|
<div className="mb-4">
|
||||||
|
<img
|
||||||
|
src={nvdia} // Gambar logo partner NVIDIA
|
||||||
|
alt="NVIDIA Inception Premier Member"
|
||||||
|
className="w-[221px] h-[83px]"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
<div className="flex gap-5">
|
||||||
|
<img src={kmn} alt="Partner 1" className="w-[56px] h-[72px]" /> {/* Gambar logo partner Kementerian */}
|
||||||
|
<img src={kominfo} alt="Partner 2" className="w-[63px] h-[62px]" /> {/* Gambar logo partner Kominfo */}
|
||||||
|
<img src={ojk} alt="Partner 3" className="w-[77px] h-[60px]" /> {/* Gambar logo partner OJK */}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
{/* Bagian hak cipta */}
|
||||||
|
<div className="text-left mt-40 mx-5 sm:mx-28 text-xs">
|
||||||
|
<p>
|
||||||
|
© Copyright 2025 Rekan AI. Seluruh hak cipta dilindungi undang-undang
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</footer>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
export default Footer;
|
133
src/componen/form/FormSection.jsx
Normal file
@ -0,0 +1,133 @@
|
|||||||
|
import bgImage from "../asset/image 10.png";
|
||||||
|
|
||||||
|
const ContactForm = () => {
|
||||||
|
return (
|
||||||
|
<div
|
||||||
|
className="flex min-h-screen items-center justify-center p-5 text-white overflow-hidden"
|
||||||
|
// Menentukan gaya background menggunakan gambar dengan gradien
|
||||||
|
style={{
|
||||||
|
background: `linear-gradient(to right, #dc016866, rgba(91, 89, 232, 1)), url(${bgImage})`,
|
||||||
|
backgroundSize: "cover", // Memastikan background menutupi seluruh elemen
|
||||||
|
backgroundPosition: "center", // Menempatkan gambar di tengah
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
<div className="flex flex-col lg:flex-row items-start w-full max-w-6xl">
|
||||||
|
{/* Bagian Kiri */}
|
||||||
|
<div className="flex-1 p-5 mb-10 lg:mb-auto mt-20">
|
||||||
|
{/* Judul utama */}
|
||||||
|
<h2 className="text-[32px] font-[700] leading-[48px] tracking-[0.005em] text-left mb-[39px]">
|
||||||
|
Isi formulir di samping ini dan kami akan menghubungi Anda secepat
|
||||||
|
mungkin
|
||||||
|
</h2>
|
||||||
|
|
||||||
|
{/* Deskripsi tambahan */}
|
||||||
|
<p className="text-[20px] font-[400] leading-[30px] tracking-[0.005em] text-left mb-6">
|
||||||
|
Kami percaya bahwa kolaborasi adalah kunci kesuksesan. <br />
|
||||||
|
Hubungi kami hari ini, dan mari wujudkan masa depan bisnis Anda
|
||||||
|
bersama Rekan AI!
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
{/* Bagian Form */}
|
||||||
|
<div className="flex-1 bg-white text-[#212121] rounded-2xl p-8 shadow-lg border-4 border-pink-300 mx-auto lg:mx-0 lg:ml-12 w-full max-w-lg mt-[79px] mb-[79px]">
|
||||||
|
{/* Judul form */}
|
||||||
|
<h3 className="text-xl font-bold mb-4 text-[#212121]">
|
||||||
|
Hubungi Tim Terbaik Kami
|
||||||
|
</h3>
|
||||||
|
{/* Deskripsi form */}
|
||||||
|
<p className="mb-6 text-[#212121]">
|
||||||
|
Silakan isi data diri Anda pada formulir di bawah ini
|
||||||
|
</p>
|
||||||
|
|
||||||
|
{/* Formulir input */}
|
||||||
|
<form className="flex flex-col gap-4">
|
||||||
|
{/* Input Nama */}
|
||||||
|
<div>
|
||||||
|
<label className="text-[#6B5CEA] font-bold">
|
||||||
|
Nama (Tanpa Gelar)*
|
||||||
|
</label>
|
||||||
|
<input
|
||||||
|
type="text"
|
||||||
|
placeholder="Masukkan nama Anda"
|
||||||
|
required
|
||||||
|
className="w-full mt-1 p-4 border rounded-lg focus:ring-2 focus:ring-indigo-500"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
{/* Input Nomor Telepon */}
|
||||||
|
<div>
|
||||||
|
<label className="text-[#6B5CEA] font-bold">
|
||||||
|
Nomor Telepon*
|
||||||
|
</label>
|
||||||
|
<input
|
||||||
|
type="tel"
|
||||||
|
placeholder="Masukkan nomor telepon Anda"
|
||||||
|
required
|
||||||
|
className="w-full mt-1 p-4 border rounded-lg focus:ring-2 focus:ring-indigo-500"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
{/* Input Email */}
|
||||||
|
<div>
|
||||||
|
<label className="text-[#6B5CEA] font-bold">Email*</label>
|
||||||
|
<input
|
||||||
|
type="email"
|
||||||
|
placeholder="Masukkan email Anda"
|
||||||
|
required
|
||||||
|
className="w-full mt-1 p-4 border rounded-lg focus:ring-2 focus:ring-indigo-500"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
{/* Input Nama Organisasi */}
|
||||||
|
<div>
|
||||||
|
<label className="text-[#6B5CEA] font-bold">
|
||||||
|
Nama Organisasi/Perusahaan
|
||||||
|
</label>
|
||||||
|
<input
|
||||||
|
type="text"
|
||||||
|
placeholder="Masukkan nama organisasi/perusahaan Anda"
|
||||||
|
className="w-full mt-1 p-4 border rounded-lg focus:ring-2 focus:ring-indigo-500"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
{/* Dropdown Pilih Kebutuhan */}
|
||||||
|
<div>
|
||||||
|
<label className="text-[#6B5CEA] font-bold">
|
||||||
|
Pilih Kebutuhan
|
||||||
|
</label>
|
||||||
|
<select
|
||||||
|
required
|
||||||
|
className="w-full mt-1 p-4 border rounded-lg focus:ring-2 focus:ring-indigo-500"
|
||||||
|
>
|
||||||
|
<option value="">Pilih kebutuhan Anda</option>
|
||||||
|
<option value="konsultasi">Konsultasi</option>
|
||||||
|
<option value="pelatihan">Pelatihan</option>
|
||||||
|
<option value="pengembangan">Pengembangan</option>
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
{/* Checkbox Verifikasi */}
|
||||||
|
<div className="flex items-center gap-2">
|
||||||
|
<input
|
||||||
|
type="checkbox"
|
||||||
|
required
|
||||||
|
className="focus:ring-2 focus:ring-indigo-500"
|
||||||
|
/>
|
||||||
|
<span className="text-[#212121]">Saya bukan robot</span>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
{/* Tombol Kirim */}
|
||||||
|
<button
|
||||||
|
type="submit"
|
||||||
|
className="bg-indigo-500 hover:bg-indigo-600 text-white font-bold py-3 px-6 rounded-lg shadow-md transition-all w-[173px] pr-6"
|
||||||
|
>
|
||||||
|
Kirim Pesan
|
||||||
|
</button>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
export default ContactForm;
|
16
src/componen/whatsappbutton/whatsappbutton.jsx
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
import WaButtons from '../asset/Whatsapp22.png'; // Mengimpor gambar ikon WhatsApp
|
||||||
|
|
||||||
|
const WhatsAppButton = () => {
|
||||||
|
return (
|
||||||
|
<div className="fixed bottom-2 right-2 md:right-24 flex justify-center items-center w-16 h-16 md:w-20 md:h-20 rounded-full z-50 cursor-pointer border-4 border-[#6950DA] bg-gradient-to-l from-[#FD66B9] to-[#A162F9] m-[10px]">
|
||||||
|
{/* Tombol WhatsApp */}
|
||||||
|
<img
|
||||||
|
className="w-10 h-10 md:w-12 md:h-12" // Menentukan ukuran ikon WhatsApp
|
||||||
|
src={WaButtons} // Gambar yang diimpor
|
||||||
|
alt="WhatsApp" // Deskripsi gambar jika gambar gagal dimuat
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
export default WhatsAppButton;
|
17
src/index.css
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
/* Mengimpor basis CSS dari Tailwind CSS */
|
||||||
|
@tailwind base;
|
||||||
|
|
||||||
|
/* Mengimpor komponen-komponen UI dari Tailwind CSS */
|
||||||
|
@tailwind components;
|
||||||
|
|
||||||
|
/* Mengimpor utilitas Tailwind CSS untuk penggunaan styling cepat */
|
||||||
|
@tailwind utilities;
|
||||||
|
|
||||||
|
/* Menambahkan aturan dasar untuk proyek Anda di dalam layer 'base' */
|
||||||
|
@layer base {
|
||||||
|
/* Mengatur font dasar untuk elemen html */
|
||||||
|
html {
|
||||||
|
/* Menetapkan font 'Montserrat' sebagai font dasar untuk seluruh halaman */
|
||||||
|
font-family: 'Montserrat';
|
||||||
|
}
|
||||||
|
}
|
11
src/main.jsx
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
import { StrictMode } from 'react' // Mengimpor StrictMode dari React untuk memeriksa potensi masalah dalam aplikasi
|
||||||
|
import { createRoot } from 'react-dom/client' // Mengimpor fungsi createRoot untuk membuat root DOM untuk aplikasi
|
||||||
|
import './index.css' // Mengimpor file CSS global yang akan diterapkan ke seluruh aplikasi
|
||||||
|
import App from './App.jsx' // Mengimpor komponen utama aplikasi (App) dari file App.jsx
|
||||||
|
|
||||||
|
// Membuat root React pada elemen dengan id 'root' dan merender aplikasi
|
||||||
|
createRoot(document.getElementById('root')).render(
|
||||||
|
<StrictMode>
|
||||||
|
<App />
|
||||||
|
</StrictMode>,
|
||||||
|
)
|
18
tailwind.config.js
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
/** @type {import('tailwindcss').Config} */
|
||||||
|
export default {
|
||||||
|
// Menentukan file-file yang akan dipindai oleh Tailwind untuk menghasilkan kelas-kelas CSS yang digunakan.
|
||||||
|
content: [
|
||||||
|
// Memindai file HTML di direktori root
|
||||||
|
"./index.html",
|
||||||
|
// Memindai semua file JavaScript dan TypeScript (termasuk JSX dan TSX) di dalam direktori src dan subdirektorinya
|
||||||
|
"./src/**/*.{js,ts,jsx,tsx}",
|
||||||
|
],
|
||||||
|
theme: {
|
||||||
|
// Bagian untuk memperluas (extend) tema Tailwind. Anda bisa menambahkan tema atau konfigurasi lain di sini.
|
||||||
|
extend: {
|
||||||
|
// Misalnya, Anda bisa menambahkan warna kustom, font, spacing, dan lainnya di dalam bagian ini
|
||||||
|
},
|
||||||
|
},
|
||||||
|
// Daftar plugin yang akan digunakan oleh Tailwind
|
||||||
|
plugins: [],
|
||||||
|
};
|
7
vite.config.js
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
import { defineConfig } from 'vite'
|
||||||
|
import react from '@vitejs/plugin-react'
|
||||||
|
|
||||||
|
// https://vite.dev/config/
|
||||||
|
export default defineConfig({
|
||||||
|
plugins: [react()],
|
||||||
|
})
|