Landing Page

This commit is contained in:
2025-03-11 06:00:43 +08:00
parent 8eee11fd72
commit 61e855bd0f
14 changed files with 142 additions and 68 deletions

3
.gitignore vendored
View File

@@ -45,3 +45,6 @@ next-env.d.ts
/cache /cache
.github/ .github/
.env.*

4
.vscode/settings.json vendored Normal file
View File

@@ -0,0 +1,4 @@
{
"WillLuke.nextjs.addTypesOnSave": true,
"WillLuke.nextjs.hasPrompted": true
}

BIN
bun.lockb

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 107 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 218 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

View File

@@ -25,9 +25,10 @@ export function NavbarMainMenu({ listNavbar }: {
base: "wrap", base: "wrap",
md: "nowrap" md: "nowrap"
}}> }}>
<ActionIcon radius={"100"} onClick={() => { <ActionIcon radius={"100"} variant="transparent" onClick={() => {
router.push("/darmasaba") router.push("/darmasaba")
stateNav.clear() stateNav.clear()
}} > }} >
<Image radius={"100"} src={"/assets/images/darmasaba-icon.png"} alt="icon" w={24} h={24} loading="lazy" /> <Image radius={"100"} src={"/assets/images/darmasaba-icon.png"} alt="icon" w={24} h={24} loading="lazy" />
</ActionIcon> </ActionIcon>

View File

@@ -1,10 +1,10 @@
import images from "@/con/images"; import images from "@/con/images";
import { Flex, ActionIcon, Image } from "@mantine/core"; import { ActionIcon, Flex, Image } from "@mantine/core";
function SosmedView() { function SosmedView() {
const listSosmed = Object.values(images.sosmed); const listSosmed = Object.values(images.sosmed);
return ( return (
<Flex gap={"md"}> <Flex gap={"md"} justify={"center"} align={"center"}>
{listSosmed.map((item, k) => { {listSosmed.map((item, k) => {
return ( return (
<ActionIcon <ActionIcon
@@ -14,7 +14,7 @@ function SosmedView() {
h={32} h={32}
pos={"relative"} pos={"relative"}
> >
<Image src={item} alt="icon" loading="lazy" fit="contain" /> <Image src={item} alt="icon" loading="lazy" />
</ActionIcon> </ActionIcon>
); );
})} })}

View File

@@ -2,20 +2,19 @@
import colors from "@/con/colors"; import colors from "@/con/colors";
import { import {
Box, Box,
Button,
Card, Card,
Flex, Flex,
Image, Image,
Paper,
Stack, Stack,
Text, Text
Title
} from "@mantine/core"; } from "@mantine/core";
import ModuleView from "./ModuleView"; import ModuleView from "./ModuleView";
import SosmedView from "./SosmedView"; import SosmedView from "./SosmedView";
function LandingPage() { function LandingPage() {
return ( return (
<Stack bg={colors["blue-button"]}> <Stack bg={colors["Bg"]}>
<Flex <Flex
gap={"md"} gap={"md"}
wrap={{ wrap={{
@@ -31,7 +30,7 @@ function LandingPage() {
}} }}
py={{ py={{
base: "xs", base: "xs",
md: "72", md: "40",
}} }}
px={{ px={{
base: "xs", base: "xs",
@@ -102,7 +101,7 @@ function LandingPage() {
</Box> </Box>
</Flex> </Flex>
<Stack flex={2} gap={0} justify="end" c={colors["blue-button"]}> <Stack flex={2} gap={0} justify="end" c={colors["blue-button"]}>
<Text {/* <Text
fz={{ fz={{
base: "1.5rem", base: "1.5rem",
md: "1.4rem", md: "1.4rem",
@@ -110,35 +109,62 @@ function LandingPage() {
> >
Pemerintah Desa Pemerintah Desa
</Text> </Text>
<Title>DARMASABA</Title> <Title>DARMASABA</Title> */}
<Paper bg={colors["blue-button"]} p={10} w={400}>
<Flex align={"center"} justify={"space-between"}>
<Box>
<Text c={colors["white-1"]} fz={"sm"}>
Jadwal Kerja
</Text>
<Paper w={175} p={5} bg={colors["white-1"]}>
<Flex justify={"space-between"} align={"center"}>
<Box>
<Text fz={"sm"}>
Buka
</Text>
<Text fw={"bold"} fz={"lg"}>
08:00
</Text>
</Box>
<Text fz={"lg"} fw={"bold"}>-</Text>
<Box>
<Text fz={"sm"}>
Tutup
</Text>
<Text fw={"bold"} fz={"lg"}>
16:00
</Text>
</Box>
</Flex>
</Paper>
</Box>
<Box>
<Text c={colors["white-1"]} fz={"sm"}>
Rabu, 10 Maret 2025
</Text>
<Paper w={175} p={5} bg={colors["white-1"]}>
<Box>
<Text fz={"sm"}>
Buka
</Text>
<Text fw={"bold"} fz={"lg"}>
Sabtu - Minggu
</Text>
</Box>
</Paper>
</Box>
</Flex>
</Paper>
</Stack> </Stack>
</Flex> </Flex>
<ModuleView /> <ModuleView />
<SosmedView /> <SosmedView />
<Text c={colors.trans.dark[2]} style={{
textAlign: "center"
}} >Sampaikan saran dan masukan guna kemajuan dalam pembangunan. Semua lebih mudah melalui fitur interaktif</Text>
</Stack> </Stack>
</Card> </Card>
<Stack
align="center"
justify={"center"}
>
<Text c={"white"} style={{
textAlign: "center"
}} maw={300}>Tambahkan Text Apa aja disini untuk lebih detail yang berwarna putih</Text>
<Button
radius={100}
w={{
base: "100%",
sm: "300",
}}
px={42}
size="lg"
variant="fill"
bg={"gray.1"}
c={"dark"}
>
Button 1
</Button>
</Stack>
</Stack> </Stack>
<Stack <Stack
justify={"end"} justify={"end"}

View File

@@ -1,23 +1,18 @@
/* eslint-disable @typescript-eslint/no-explicit-any */
/* eslint-disable @typescript-eslint/no-unused-vars */ /* eslint-disable @typescript-eslint/no-unused-vars */
"use client"; "use client";
import colors from "@/con/colors"; import colors from "@/con/colors";
import images from "@/con/images";
import ApiFetch from "@/lib/api-fetch"; import ApiFetch from "@/lib/api-fetch";
import { Carousel } from "@mantine/carousel"; import { Carousel } from "@mantine/carousel";
import { import {
BackgroundImage,
Box, Box,
Button, Button,
Card,
Container, Container,
Divider, Divider,
Group, Group,
Image,
Paper, Paper,
Stack, Stack,
Text, Text,
useMantineTheme, useMantineTheme
} from "@mantine/core"; } from "@mantine/core";
import { useMediaQuery } from "@mantine/hooks"; import { useMediaQuery } from "@mantine/hooks";
import Autoplay from "embla-carousel-autoplay"; import Autoplay from "embla-carousel-autoplay";
@@ -26,15 +21,44 @@ import { useTransitionRouter } from "next-view-transitions";
import { useRef } from "react"; import { useRef } from "react";
import useSWR from "swr"; import useSWR from "swr";
type DataSlider = { const data = [
id: string; {
name: string; id: 1,
}; images: "/assets/images/layanan/test.png",
name: "Surat Keterangan Domisili Organisasi"
},
{
id: 2,
images: "/assets/images/layanan/test3.jpeg",
name: "Surat Keterangan Penghasilan"
},
{
id: 3,
images: "/assets/images/layanan/test2.jpeg",
name: "Surat Keterangan Tidak Mampu"
},
{
id: 4,
images: "/assets/images/layanan/kelahiran.jpeg",
name: "Surat Keterangan Kelahiran"
},
{
id: 5,
images: "/assets/images/layanan/test.png",
name: "Surat Keterangan Usaha"
},
{
id: 6,
images: "/assets/images/layanan/test2.jpeg",
name: "Surat Keterangan Kematian"
},
]
const textHeading = { const textHeading = {
title: "Layanan", title: "Layanan",
des: "Terwujudnya Layanan umum bertajuk Sistem administrasi Kependudukan Terintegrasi di Desa berbasi Elektronik, Smart dan Aman", des: "Layanan adalah fitur yang membantu warga desa mengakses berbagai kebutuhan administrasi, informasi, dan bantuan secara cepat, mudah, dan transparan. Dengan fitur ini, semua layanan desa ada dalam genggaman Anda!",
}; };
function Content3() { function Layanan() {
const { data, isLoading } = useSWR( const { data, isLoading } = useSWR(
"/", "/",
(url) => ApiFetch.api.layanan.get().then(({ data }) => data?.data), (url) => ApiFetch.api.layanan.get().then(({ data }) => data?.data),
@@ -59,23 +83,23 @@ function Content3() {
> >
{textHeading.des} {textHeading.des}
</Text> </Text>
<Box p={"md"}> {/* <Box p={"md"}>
<Button onClick={() => { <Button onClick={() => {
router.push("/layanan") router.push("/layanan")
}} variant="filled" bg={"dark"} radius={100}> }} variant="filled" bg={"dark"} radius={100}>
Lanjutkan Lanjutkan
</Button> </Button>
</Box> </Box> */}
</Stack> </Stack>
</Container> </Container>
<Slider data={data as any} /> <Slider />
<Divider /> <Divider />
</Stack> </Stack>
); );
} }
const height = 720; const height = 720;
function Slider({ data }: { data: DataSlider[] }) { function Slider() {
const theme = useMantineTheme(); const theme = useMantineTheme();
const mobile = useMediaQuery(`(max-width: ${theme.breakpoints.sm})`); const mobile = useMediaQuery(`(max-width: ${theme.breakpoints.sm})`);
const autoplay = useRef(Autoplay({ delay: 2000 })); const autoplay = useRef(Autoplay({ delay: 2000 }));
@@ -84,11 +108,21 @@ function Slider({ data }: { data: DataSlider[] }) {
const slides = data.map((item) => ( const slides = data.map((item) => (
<Carousel.Slide key={item.id} > <Carousel.Slide key={item.id} >
<Paper h={"100%"} pos={"relative"} style={{ <Paper h={"100%"} pos={"relative"} style={{
backgroundImage: `url(${images["bg-slide3"]}) `, backgroundImage: `url(${item.images}) `,
backgroundSize: "cover", backgroundSize: "cover",
backgroundPosition: "center", backgroundPosition: "center",
backgroundRepeat: "no-repeat", backgroundRepeat: "no-repeat",
}}> }}>
<Box
style={{
borderRadius: 16,
zIndex: 0,
}}
pos={"absolute"}
w={"100%"}
h={"100%"}
bg={colors.trans.dark[2]}
/>
<Stack justify="space-between" h={"100%"} gap={0} p={"lg"} pos={"relative"} > <Stack justify="space-between" h={"100%"} gap={0} p={"lg"} pos={"relative"} >
<Box p={"lg"}> <Box p={"lg"}>
<Text <Text
@@ -131,4 +165,4 @@ function Slider({ data }: { data: DataSlider[] }) {
); );
} }
export default Content3; export default Layanan;

View File

@@ -6,15 +6,18 @@ const colors = {
"white-trans-3": "rgba(255, 255, 255, 0.9)", "white-trans-3": "rgba(255, 255, 255, 0.9)",
"trans": { "trans": {
"dark": { "dark": {
"1": "rgba(0, 0, 0, 0.5)", "1": "rgba(0, 0, 0, 0.3)",
"2": "rgba(0, 0, 0, 0.7)", "2": "rgba(0, 0, 0, 0.5)",
"3": "rgba(0, 0, 0, 0.9)" "3": "rgba(0, 0, 0, 0.7)",
"4": "rgba(0, 0, 0, 0.9)"
} }
}, },
"grey": { "grey": {
"1": "#F4F5F6", "1": "#F4F5F6",
"2": "#CBCACD" "2": "#CBCACD"
} },
"Bg": "#D1d9e8",
} }
export default colors export default colors

View File

@@ -10,6 +10,9 @@ const images = {
"gelah-melah": "/assets/images/module/gelah-melah.png", "gelah-melah": "/assets/images/module/gelah-melah.png",
"inovasi-desa-darmasaba": "/assets/images/module/inovasi-desa-darmasaba.png" "inovasi-desa-darmasaba": "/assets/images/module/inovasi-desa-darmasaba.png"
}, },
"layanan": {
"layanan-1": "/assets/images/layanan/test.png",
},
"bg-slide": "/assets/images/bg-slide.png", "bg-slide": "/assets/images/bg-slide.png",
"sosmed": { "sosmed": {
"telegram": "/assets/images/sosmed/telegram.png", "telegram": "/assets/images/sosmed/telegram.png",