diff --git a/src/app/darmasaba/(pages)/inovasi/program-kreatif-desa/page.tsx b/src/app/darmasaba/(pages)/inovasi/program-kreatif-desa/page.tsx
index cbe86a05..b8af8a7a 100644
--- a/src/app/darmasaba/(pages)/inovasi/program-kreatif-desa/page.tsx
+++ b/src/app/darmasaba/(pages)/inovasi/program-kreatif-desa/page.tsx
@@ -1,14 +1,14 @@
'use client'
+import { IconKey, IconMapper } from '@/app/admin/(dashboard)/_com/iconMap';
import programKreatifState from '@/app/admin/(dashboard)/_state/inovasi/program-kreatif';
import colors from '@/con/colors';
-import { Box, Button, Center, Group, Pagination, Paper, SimpleGrid, Skeleton, Stack, Text, TextInput } from '@mantine/core';
+import { Box, Button, Center, Grid, GridCol, Pagination, Paper, SimpleGrid, Skeleton, Stack, Text, TextInput } from '@mantine/core';
import { useDebouncedValue, useShallowEffect } from '@mantine/hooks';
+import { IconSearch } from '@tabler/icons-react';
import { useTransitionRouter } from 'next-view-transitions';
-import React, { useState } from 'react';
+import { useState } from 'react';
import { useProxy } from 'valtio/utils';
import BackButton from '../../desa/layanan/_com/BackButto';
-import { IconSearch } from '@tabler/icons-react';
-import { IconKey, IconMapper } from '@/app/admin/(dashboard)/_com/iconMap';
// const data = [
// {
@@ -75,17 +75,23 @@ function Page() {
-
-
- Program Kreatif Desa
-
- }
- value={search}
- onChange={(e) => setSearch(e.currentTarget.value)}
- />
-
+
+
+
+ Program Kreatif Desa
+
+
+
+ setSearch(e.target.value)}
+ leftSection={}
+ w={{ base: "50%", md: "100%" }}
+ />
+
+
diff --git a/src/app/darmasaba/(pages)/kesehatan/data-kesehatan-warga/fasilitas-kesehatan-page/[id]/page.tsx b/src/app/darmasaba/(pages)/kesehatan/data-kesehatan-warga/fasilitas-kesehatan-page/[id]/page.tsx
index 0e525094..774742de 100644
--- a/src/app/darmasaba/(pages)/kesehatan/data-kesehatan-warga/fasilitas-kesehatan-page/[id]/page.tsx
+++ b/src/app/darmasaba/(pages)/kesehatan/data-kesehatan-warga/fasilitas-kesehatan-page/[id]/page.tsx
@@ -3,9 +3,9 @@
import fasilitasKesehatanState from '@/app/admin/(dashboard)/_state/kesehatan/data_kesehatan_warga/fasilitasKesehatan';
import BackButton from '@/app/darmasaba/(pages)/desa/layanan/_com/BackButto';
import colors from '@/con/colors';
-import { ActionIcon, Anchor, AspectRatio, Badge, Box, Button, Card, Chip, CopyButton, Divider, Grid, Group, Paper, Skeleton, Stack, Table, TableTbody, TableTd, TableTh, TableThead, TableTr, Text, ThemeIcon, Title, Tooltip } from '@mantine/core';
+import { ActionIcon, AspectRatio, Badge, Box, Button, Card, CopyButton, Divider, Grid, Group, Paper, Skeleton, Stack, Table, TableTbody, TableTd, TableTh, TableThead, TableTr, Text, ThemeIcon, Title, Tooltip } from '@mantine/core';
import { useShallowEffect } from '@mantine/hooks';
-import { IconBrandWhatsapp, IconCheck, IconCopy, IconDeviceLandlinePhone, IconHeart, IconInfoCircle, IconMail, IconMapPin, IconMoodEmpty, IconSearch, IconStethoscope, IconUser, IconUsersGroup, IconWallet } from '@tabler/icons-react';
+import { IconBrandWhatsapp, IconCheck, IconCopy, IconDeviceLandlinePhone, IconHeart, IconInfoCircle, IconMail, IconMapPin, IconMoodEmpty, IconSearch, IconUser } from '@tabler/icons-react';
import { useParams } from 'next/navigation';
import { useMemo } from 'react';
import { useProxy } from 'valtio/utils';
@@ -149,11 +149,6 @@ function Page() {
-
- }>Layanan Medis
- }>Ramah Keluarga
- }>Pembayaran Non-Tunai
-
@@ -210,7 +205,6 @@ function Page() {
} component="a" href={`https://wa.me/${kontak.whatsapp.replace(/\D/g, '')}`} target="_blank" aria-label="Hubungi WhatsApp">WhatsApp
} component="a" href={`mailto:${kontak.email}`} aria-label="Kirim Email">Email
- Kunjungi situs resmi
diff --git a/src/app/darmasaba/(pages)/kesehatan/penanganan-darurat/page.tsx b/src/app/darmasaba/(pages)/kesehatan/penanganan-darurat/page.tsx
index af52ebd8..45834627 100644
--- a/src/app/darmasaba/(pages)/kesehatan/penanganan-darurat/page.tsx
+++ b/src/app/darmasaba/(pages)/kesehatan/penanganan-darurat/page.tsx
@@ -108,20 +108,23 @@ function Page() {
(e.currentTarget.style.transform = 'scale(1.05)')}
@@ -129,6 +132,7 @@ function Page() {
/>
+
{/* 🔍 Search + Zoom + Fullscreen controls */}
-
+
}
onChange={(e) => debouncedSearch(e.target.value)}
/>
+
-
+
+ {/* 🔍 Tambahkan indikator zoom di sini */}
+ {/* Floating Zoom Indicator */}
+
+ {Math.round(scale * 100)}%
+
+
+
+
+
+
+
{/* Chart Container */}
-
+
+
@@ -37,11 +38,10 @@ export default function Page() {
}
function Slider() {
- const height = 500;
- const width = 1200;
const theme = useMantineTheme();
const mobile = useMediaQuery(`(max-width: ${theme.breakpoints.sm})`);
- const autoplay = useRef(Autoplay({ delay: 3000 }));
+ const tablet = useMediaQuery(`(max-width: ${theme.breakpoints.md})`);
+ const autoplay = useRef(Autoplay({ delay: 3000, stopOnInteraction: false }));
const state = useProxy(penghargaanState);
const router = useTransitionRouter();
@@ -54,7 +54,7 @@ function Slider() {
if (loading) {
return (
-
+
@@ -74,31 +74,49 @@ function Slider() {
}
const slides = data.map((item) => (
-
+
{
+ e.currentTarget.style.transform = "translateY(-4px)";
+ e.currentTarget.style.boxShadow = "0 8px 20px rgba(0,0,0,0.2)";
+ }}
+ onMouseLeave={(e) => {
+ e.currentTarget.style.transform = "translateY(0)";
+ e.currentTarget.style.boxShadow = "none";
}}
>
-
+
{item.name}
-
+
));
return (
-
- {slides}
-
+ 3}
+ draggable={data.length > 1}
+ styles={{
+ root: {
+ position: "relative",
+ },
+ viewport: {
+ overflow: "hidden",
+ },
+ container: {
+ alignItems: "stretch",
+ },
+ control: {
+ zIndex: 20,
+ backgroundColor: "rgba(255,255,255,0.95)",
+ color: colors["blue-button"],
+ border: `2px solid ${colors["blue-button"]}`,
+ width: 46,
+ height: 46,
+ borderRadius: "50%",
+ boxShadow: "0 4px 12px rgba(0,0,0,0.15)",
+ transition: "all 0.2s ease",
+ '&:hover': {
+ backgroundColor: colors["blue-button"],
+ color: "white",
+ transform: "scale(1.1)",
+ },
+ '&[data-inactive]': {
+ opacity: 0,
+ cursor: 'default',
+ },
+ },
+ controls: {
+ position: "absolute",
+ top: mobile ? "70%" : tablet ? "65%" : "60%",
+ transform: "translateY(-50%)",
+ width: mobile ? "100%" : tablet ? "calc(100% + 60px)" : "calc(100% + 100px)",
+ left: mobile ? "0" : tablet ? "-30px" : "-50px",
+ right: mobile ? "0" : tablet ? "-30px" : "-50px",
+ padding: "0",
+ justifyContent: "space-between",
+ zIndex: 30,
+ },
+ }}
+ >
+ {slides}
+
+
);
-}
+}
\ No newline at end of file
diff --git a/src/app/darmasaba/_com/NavbarMainMenu.tsx b/src/app/darmasaba/_com/NavbarMainMenu.tsx
index 2838f93d..74524484 100644
--- a/src/app/darmasaba/_com/NavbarMainMenu.tsx
+++ b/src/app/darmasaba/_com/NavbarMainMenu.tsx
@@ -50,8 +50,8 @@ export function NavbarMainMenu({ listNavbar }: { listNavbar: MenuItem[] }) {
child.href === pathname))}
+ isActive={item.href && pathname.startsWith(item.href) ||
+ (item.children?.some(child => child.href && pathname.startsWith(child.href)))}
/>
))}
diff --git a/src/app/darmasaba/_com/NavbarSubMenu.tsx b/src/app/darmasaba/_com/NavbarSubMenu.tsx
index f271b79b..db816ec0 100644
--- a/src/app/darmasaba/_com/NavbarSubMenu.tsx
+++ b/src/app/darmasaba/_com/NavbarSubMenu.tsx
@@ -38,7 +38,7 @@ export function NavbarSubMenu({ item }: { item: MenuItem[] | null }) {
justify="space-between"
size="lg"
radius="md"
- color={pathname === link.href ? 'blue' : 'gray'}
+ color={link.href && pathname.startsWith(link.href) ? 'blue' : 'gray'}
onClick={() => {
if (link.href) {
router.push(link.href);
@@ -49,12 +49,12 @@ export function NavbarSubMenu({ item }: { item: MenuItem[] | null }) {
rightSection={}
styles={(theme) => ({
root: {
- background: pathname === link.href ? theme.colors.blue[0] : 'transparent',
- color: pathname === link.href ? theme.colors.blue[7] : colors['blue-button'],
- fontWeight: pathname === link.href ? 600 : 500,
+ background: link.href && pathname.startsWith(link.href) ? theme.colors.blue[0] : 'transparent',
+ color: link.href && pathname.startsWith(link.href) ? theme.colors.blue[7] : colors['blue-button'],
+ fontWeight: link.href && pathname.startsWith(link.href) ? 600 : 500,
transition: "all 0.2s ease",
"&:hover": {
- background: pathname === link.href ? theme.colors.blue[1] : theme.colors.gray[0],
+ background: link.href && pathname.startsWith(link.href) ? theme.colors.blue[1] : theme.colors.gray[0],
}
},
})}
diff --git a/src/app/darmasaba/_com/main-page/kepuasan/index.tsx b/src/app/darmasaba/_com/main-page/kepuasan/index.tsx
index 0bc2fa83..a0e560ca 100644
--- a/src/app/darmasaba/_com/main-page/kepuasan/index.tsx
+++ b/src/app/darmasaba/_com/main-page/kepuasan/index.tsx
@@ -23,7 +23,7 @@ function Kepuasan() {
const [donutDataJenisKelamin, setDonutDataJenisKelamin] = useState([]);
const [donutDataRating, setDonutDataRating] = useState([]);
const [donutDataKelompokUmur, setDonutDataKelompokUmur] = useState([]);
- const [barChartData, setBarChartData] = useState>([]);
+ const [barChartData, setBarChartData] = useState>([]);
const [opened, { open, close }] = useDisclosure(false)
const resetForm = () => {
@@ -121,18 +121,18 @@ function Kepuasan() {
// Convert map to array and sort by date
const barData = Array.from(monthYearMap.entries())
- .map(([key, count]) => {
+ .map(([key, Responden]) => {
const [year, month] = key.split('-');
const monthName = new Date(Number(year), Number(month) - 1, 1)
.toLocaleString('id-ID', { month: 'long' });
return {
month: `${monthName} ${year}`,
- count,
+ Responden,
sortKey: parseInt(`${year}${String(month).padStart(2, '0')}`, 10)
};
})
.sort((a, b) => a.sortKey - b.sortKey)
- .map(({ month, count }) => ({ month, count }));
+ .map(({ month, Responden }) => ({ month, Responden }));
setBarChartData(barData);
}
@@ -185,7 +185,7 @@ function Kepuasan() {
h={window.innerWidth < 480 ? 200 : 300}
data={barChartData}
dataKey="month"
- series={[{ name: 'count', color: colors['blue-button'] }]}
+ series={[{ name: 'Responden', color: colors['blue-button'] }]}
tickLine="y"
xAxisLabel="Bulan"
yAxisLabel="Jumlah Responden"
@@ -448,7 +448,7 @@ function Kepuasan() {
h={300}
data={barChartData}
dataKey="month"
- series={[{ name: 'count', color: colors['blue-button'] }]}
+ series={[{ name: 'Responden', color: colors['blue-button'] }]}
tickLine="y"
xAxisLabel="Bulan"
yAxisLabel="Jumlah Responden"