From be9433243deda9cdbce593c68ef727ec6e98f3d4 Mon Sep 17 00:00:00 2001 From: haseeb Date: Mon, 19 Jan 2026 00:41:05 +0500 Subject: [PATCH 1/3] feat: add responsive app layout - Header and footer layout - Sidebar and bottom bar navigation - Drawer support for smaller devices - Fully responsive and themed --- .gitignore | 11 + src/config/const.ts => config.ts | 32 +-- package-lock.json | 50 ++++ package.json | 1 + ...inal-951106d2a573176f8a302e4e000314ce.webp | Bin 0 -> 45272 bytes ...inal-bf9bb17199c8e197482b1edd7e5654f7.webp | Bin 0 -> 60658 bytes src/app/layout.tsx | 4 +- src/app/page.tsx | 39 +++- src/{config => assets}/fonts.ts | 5 +- src/assets/globals.css | 29 ++- src/{config => assets}/meta.ts | 0 src/assets/svg/MenuIcon.tsx | 36 +++ src/components/layout/LayoutWrapper.tsx | 43 +++- .../layout/bottom-bar/BottomBar.tsx | 158 +++++++++++++ .../layout/bottom-bar/LanguageList.tsx | 51 +++++ src/components/layout/bottom-bar/MenuList.tsx | 74 ++++++ .../layout/bottom-bar/SettingsList.tsx | 213 ++++++++++++++++++ src/components/layout/bottom-bar/content.ts | 48 ++++ src/components/layout/bottom-bar/index.ts | 2 + src/components/layout/footer/Footer.tsx | 161 ++++++++++++- src/components/layout/header/Header.tsx | 38 ++-- src/components/layout/header/content.ts | 13 +- .../layout/{sidebar => side-bar}/Sidebar.tsx | 41 ++-- .../layout/{sidebar => side-bar}/content.ts | 9 +- src/components/shared/LanguageSelector.tsx | 37 +-- .../shared/NotificationsPopover.tsx | 2 +- src/components/shared/Tabs.tsx | 209 +++++++++++++++++ src/components/shared/UserProfileDropdown.tsx | 1 + src/components/ui/button.tsx | 32 ++- src/components/ui/drawer.tsx | 111 +++++++++ src/components/ui/input.tsx | 12 +- src/config/settings.ts | 17 -- src/hooks/useBreakpoint.ts | 2 +- tailwind.config.ts | 16 +- 34 files changed, 1366 insertions(+), 131 deletions(-) rename src/config/const.ts => config.ts (92%) create mode 100644 public/images/designs/original-951106d2a573176f8a302e4e000314ce.webp create mode 100644 public/images/designs/original-bf9bb17199c8e197482b1edd7e5654f7.webp rename src/{config => assets}/fonts.ts (94%) rename src/{config => assets}/meta.ts (100%) create mode 100644 src/assets/svg/MenuIcon.tsx create mode 100644 src/components/layout/bottom-bar/BottomBar.tsx create mode 100644 src/components/layout/bottom-bar/LanguageList.tsx create mode 100644 src/components/layout/bottom-bar/MenuList.tsx create mode 100644 src/components/layout/bottom-bar/SettingsList.tsx create mode 100644 src/components/layout/bottom-bar/content.ts create mode 100644 src/components/layout/bottom-bar/index.ts rename src/components/layout/{sidebar => side-bar}/Sidebar.tsx (86%) rename src/components/layout/{sidebar => side-bar}/content.ts (88%) create mode 100644 src/components/shared/Tabs.tsx create mode 100644 src/components/ui/drawer.tsx delete mode 100644 src/config/settings.ts diff --git a/.gitignore b/.gitignore index 1d6860d..80b1041 100644 --- a/.gitignore +++ b/.gitignore @@ -26,6 +26,10 @@ yarn-error.log* # local env files .env*.local +.env.local +.env.development +.env.dev +.env.prod .env # vercel @@ -34,3 +38,10 @@ yarn-error.log* # typescript *.tsbuildinfo next-env.d.ts + +# other +txt +text +txt.txt +text.txt +other diff --git a/src/config/const.ts b/config.ts similarity index 92% rename from src/config/const.ts rename to config.ts index 1e20cc9..6fd828a 100644 --- a/src/config/const.ts +++ b/config.ts @@ -99,9 +99,9 @@ export const quranLanguages = [ "Yau", "Yoruba", "Zulu", - ]; - - export const quranLanguageVersions: Record = { +]; + +export const quranLanguageVersions: Record = { Achinese: [], Afar: [], Afrikaans: [], @@ -199,20 +199,20 @@ export const quranLanguages = [ Yau: ["la"], Yoruba: ["la"], Zulu: [], - }; - - // Hadith -- - export const hadithLanguages = ["english", "arabic"]; - - export const hadithBooks = { +}; + +// Hadith -- +export const hadithLanguages = ["english", "arabic"]; + +export const hadithBooks = { ABM_BOOKS: new Set(["abudawud", "bukhari", "muslim"]), ITN_BOOKS: new Set(["ibnmajah", "tirmidhi", "nasai"]), ALL_BOOKS: new Set([ - "abudawud", - "bukhari", - "muslim", - "ibnmajah", - "tirmidhi", - "nasai", + "abudawud", + "bukhari", + "muslim", + "ibnmajah", + "tirmidhi", + "nasai", ]), - }; \ No newline at end of file +}; \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index e907685..e0f23d0 100644 --- a/package-lock.json +++ b/package-lock.json @@ -23,6 +23,7 @@ "tailwind-merge": "^3.3.1", "tailwind-variants": "^3.1.1", "tailwindcss-animate": "^1.0.7", + "vaul": "^1.1.2", "zod": "^4.1.12", "zustand": "^5.0.8" }, @@ -464,6 +465,42 @@ } } }, + "node_modules/@radix-ui/react-dialog": { + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/@radix-ui/react-dialog/-/react-dialog-1.1.15.tgz", + "integrity": "sha512-TCglVRtzlffRNxRMEyR36DGBLJpeusFcgMVD9PZEzAKnUs1lKCgX5u9BmC2Yg+LL9MgZDugFFs1Vl+Jp4t/PGw==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-dismissable-layer": "1.1.11", + "@radix-ui/react-focus-guards": "1.1.3", + "@radix-ui/react-focus-scope": "1.1.7", + "@radix-ui/react-id": "1.1.1", + "@radix-ui/react-portal": "1.1.9", + "@radix-ui/react-presence": "1.1.5", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-slot": "1.2.3", + "@radix-ui/react-use-controllable-state": "1.2.2", + "aria-hidden": "^1.2.4", + "react-remove-scroll": "^2.6.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, "node_modules/@radix-ui/react-direction": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/@radix-ui/react-direction/-/react-direction-1.1.1.tgz", @@ -2821,6 +2858,19 @@ "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", "license": "MIT" }, + "node_modules/vaul": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vaul/-/vaul-1.1.2.tgz", + "integrity": "sha512-ZFkClGpWyI2WUQjdLJ/BaGuV6AVQiJ3uELGk3OYtP+B6yCO7Cmn9vPFXVJkRaGkOJu3m8bQMgtyzNHixULceQA==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-dialog": "^1.1.1" + }, + "peerDependencies": { + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0.0 || ^19.0.0-rc" + } + }, "node_modules/watchpack": { "version": "2.4.0", "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz", diff --git a/package.json b/package.json index 10fcfeb..0721597 100644 --- a/package.json +++ b/package.json @@ -24,6 +24,7 @@ "tailwind-merge": "^3.3.1", "tailwind-variants": "^3.1.1", "tailwindcss-animate": "^1.0.7", + "vaul": "^1.1.2", "zod": "^4.1.12", "zustand": "^5.0.8" }, diff --git a/public/images/designs/original-951106d2a573176f8a302e4e000314ce.webp b/public/images/designs/original-951106d2a573176f8a302e4e000314ce.webp new file mode 100644 index 0000000000000000000000000000000000000000..5d1465f5b562ecac939d53926b02149a03696efe GIT binary patch literal 45272 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οooIOs(Iz?b|-J z5UkMIR!!P)i2J8<1yD&A>|_KE($FyPwId>Gm0s@MSHXo=>ED@UfcAZuGc@O+)Zc}Q z1#D_AO4ny7b_kE)B8nd)eoQ0nfh47JKbTO%Z2D^eVXXrA}Bm32B z@2=D52zjt9FWbT6+S<%H%HN-mWS$25ooof7_}IEe^DHuDz6?sI_LI%!q-X<+f#chV zsh?Fgv#f?-=YLmpw6HAwluasPcpltz`|WFplzx(f?k_>&9?&pkg?S{ zwmM3RM8Q};bjn|3QCgf2ML&Ck{p=`q7w$hH|13qVM(3!pL8QCKgl+E<^=w&}cKZ33 z&)2d}ttKX5?I&H7V&N*TVvV0FyJD!zPb-&j9{e0rC6*3I5Qx8B{ z@-nI_Rw%GP7^wR}%NIlP(WTX#k)EV4fmH#n-}lgxezkD?|NxfW`y>NOL*l+R%f@y^JByN#^riCBvfgSQMmuP~HId zR`H`x@2#^hgp=JVlN$;`W+MWS;}Tl&UilP@3Z6!`F~n!|*1mK6omv z=X67CNEPYi^?&3WVt45n3TS|_3yz7C&l%J+_YZEdDfVsfiX$fGvXx+qU_b3nqmeaF zRlhZJMs9dQSG4AaD^V^NeaY_AUYq{&GFGRWCRpED#I-!P$?SbJh8m}QbDTR!iHN1%g z0DA^QlL}4$BoVW8<`sc(F8SFbNynj_ZP*-T`VZKHRrk+2L5Q-p%%0x{*o6DZp3cz% zyqy}t(IJDa5|ph0Pe?|#U%)M~qv1Fu9 z!V2U5b)%=ri>!!m9tGL-R9jRX^J*e$3aEAVUdRhlY(N8@%*N49l`-(Cn$Yh%#Q zZ_bxWe2lqIA&US?b^Oa?q4qN@Jwr_&o@U)i&_Eebymqi%tt@g6`q_zE29kPR`bp0-MPms^Aff9M(@YjX#nOLFx5|2?D0j>RxtMqZxsgqzw+ON|63%#+yC(V zzaA0*h=&4zf6p+nFf)N9{2vDSW&q^=cb=Jv2_*Ob82|kP06=s9k8u|Q008?hw)_vl GcljUs=Y;tH literal 0 HcmV?d00001 diff --git a/public/images/designs/original-bf9bb17199c8e197482b1edd7e5654f7.webp b/public/images/designs/original-bf9bb17199c8e197482b1edd7e5654f7.webp new file mode 100644 index 0000000000000000000000000000000000000000..f2c116f9fc8ddfe09466c663f11cf640a1346d97 GIT binary patch literal 60658 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 Q;(we2`#=0`=0D^A0iiAA5dZ)H literal 0 HcmV?d00001 diff --git a/src/app/layout.tsx b/src/app/layout.tsx index 2a75f6f..c79c760 100644 --- a/src/app/layout.tsx +++ b/src/app/layout.tsx @@ -1,8 +1,8 @@ import type { Metadata } from "next"; import { cn } from "@/lib/utils/clsx"; import { ReactNode } from "react"; -import { notoSans, notoSansArabic, redHatText } from "@/config/fonts"; -import { defaultMeta } from "@/config/meta"; +import { notoSans, notoSansArabic, redHatText } from "@/assets/fonts"; +import { defaultMeta } from "@/assets/meta"; import LayoutWrapper from "@/components/layout/LayoutWrapper"; import "@/assets/globals.css"; diff --git a/src/app/page.tsx b/src/app/page.tsx index 7495b1c..7ed856c 100644 --- a/src/app/page.tsx +++ b/src/app/page.tsx @@ -1,21 +1,48 @@ "use client" -import { sendAdhanNotification } from "@/lib/notification/notify"; -import { requestNotificationPermission } from "@/lib/notification/permissions"; + +import { Drawer, DrawerTrigger, DrawerContent, DrawerTitle, DrawerDescription, DrawerThumb } from "@/components/ui/drawer"; +import { Button } from "@/components/ui/button"; const HomePage = () => { return ( -
-

fonts testing

- +

Deenify Dashboard

Welcome to your daily Islamic companion.

- بِسْمِ اللَّهِ الرَّحْمَٰنِ الرَّحِيمِ + بِسْمِ اللَّهِ الرَّحْمَٰنِ الرَّحِيمِ

+ +
+

Drawer Test

+ + + + + + + + +
+ Drawer Title + + This is a test drawer using vaul library. You can drag it down to close. + +
+

+ This drawer component uses vaul for smooth drag-to-close functionality. +

+

+ Try dragging the drawer down to close it, or click outside the drawer. +

+
+
+
+
+
); }; diff --git a/src/config/fonts.ts b/src/assets/fonts.ts similarity index 94% rename from src/config/fonts.ts rename to src/assets/fonts.ts index e34a3ea..49ff56c 100644 --- a/src/config/fonts.ts +++ b/src/assets/fonts.ts @@ -1,13 +1,15 @@ import { Noto_Sans, Noto_Sans_Arabic, Red_Hat_Text } from "next/font/google"; + // heading - professional and stylish export const redHatText = Red_Hat_Text({ subsets: ["latin"], - weight: ["400", "500", "600", "700"], + weight: ["300", "400", "500", "600", "700"], display: "swap", variable: "--font-heading", }); + // body - supports 95+ languages including Latin, Cyrillic, Greek, Devanagari, Vietnamese, and more // Excellent for Quran translations in multiple languages with diacritical marks export const notoSans = Noto_Sans({ @@ -17,6 +19,7 @@ export const notoSans = Noto_Sans({ variable: "--font-noto", }); + // arabic - for Arabic text and Quran verses export const notoSansArabic = Noto_Sans_Arabic({ subsets: ["arabic"], diff --git a/src/assets/globals.css b/src/assets/globals.css index 0029f24..15ae9cb 100644 --- a/src/assets/globals.css +++ b/src/assets/globals.css @@ -115,7 +115,6 @@ width: 100%; height: 100%; scroll-behavior: smooth; - font-size: 16px; } body { @@ -131,6 +130,27 @@ } +/* Components */ +@layer components { + .container-sm { + @apply w-full max-w-[1080px] mx-auto px-4; + } + + .container-md { + @apply w-full max-w-[1280px] mx-auto px-4; + } + + .container-lg { + @apply w-full max-w-[1360px] mx-auto px-4; + } + + /* Footer container */ + .container-footer { + @apply w-full max-w-[1360px] mx-auto md:px-6 px-4; + } +} + + /* Utilities */ @layer utilities { @@ -161,13 +181,6 @@ list-style-type: none; } - .container { - width: 100%; - max-width: 1200px; - margin: 0 auto; - padding: 0 16px; - } - .scrollbar-hide { scrollbar-width: none; diff --git a/src/config/meta.ts b/src/assets/meta.ts similarity index 100% rename from src/config/meta.ts rename to src/assets/meta.ts diff --git a/src/assets/svg/MenuIcon.tsx b/src/assets/svg/MenuIcon.tsx new file mode 100644 index 0000000..8d085d4 --- /dev/null +++ b/src/assets/svg/MenuIcon.tsx @@ -0,0 +1,36 @@ +import React from 'react' + +const MenuIcon = () => { + return ( + + ) +} + +export default MenuIcon \ No newline at end of file diff --git a/src/components/layout/LayoutWrapper.tsx b/src/components/layout/LayoutWrapper.tsx index 7e60568..c33d2a5 100644 --- a/src/components/layout/LayoutWrapper.tsx +++ b/src/components/layout/LayoutWrapper.tsx @@ -1,22 +1,28 @@ "use client" + import React, { ReactNode, useState } from 'react' -import { Sidebar } from './sidebar/Sidebar' -import Footer from './footer/Footer' import Header from './header/Header' -import { cn } from '@/lib/utils' +import Footer from './footer/Footer' +import Sidebar from './side-bar/Sidebar' +import BottomBar from './bottom-bar/BottomBar' import { useBreakpoint } from '@/hooks/useBreakpoint' +import { cn } from '@/lib/utils' + +type DrawerTabsType = "menu" | "language" | "settings" interface LayoutWrapperProptype { readonly children: ReactNode } -const LayoutWrapper = ({ children }: LayoutWrapperProptype) => { + +const LayoutWrapper = ({ children }: LayoutWrapperProptype) => { const [sidebarExpanded, setSidebarExpanded] = useState(false) const [isLocked, setIsLocked] = useState(false) + const [activeDrawerTab, setActiveDrawerTab] = useState(null) const isMobile = useBreakpoint('lg', 'down') return (
- { />
setSidebarExpanded(!sidebarExpanded)} + onToggleSidebar={() => { + if (isMobile) setActiveDrawerTab("menu") + else setSidebarExpanded(!sidebarExpanded) + }} />
-
- {children} +
+ <>{children} +
-
+ + {isMobile && ( + + )}
) } diff --git a/src/components/layout/bottom-bar/BottomBar.tsx b/src/components/layout/bottom-bar/BottomBar.tsx new file mode 100644 index 0000000..bc9bdc3 --- /dev/null +++ b/src/components/layout/bottom-bar/BottomBar.tsx @@ -0,0 +1,158 @@ +"use client" + +import React, { useState } from "react" +import Link from "next/link" +import { usePathname } from "next/navigation" +import { Home, Search, Settings, Globe, } from "lucide-react" +import { Drawer, DrawerContent, DrawerThumb } from "@/components/ui/drawer" +import { cn } from "@/lib/utils" +import { DrawerTabs } from "./content" +import Tabs from "@/components/shared/Tabs" +import MenuList from "./MenuList" +import LanguageList from "./LanguageList" +import SettingsList from "./SettingsList" + + +type DrawerTabsType = "menu" | "language" | "settings" + +interface BottomBarProps { + activeDrawerTab?: DrawerTabsType | null + onDrawerTabChange?: (tab: DrawerTabsType | null) => void +} + + +const BottomBar = ({ + activeDrawerTab: externalActiveTab, + onDrawerTabChange +}: BottomBarProps) => { + const [selectedLanguage, setSelectedLanguage] = useState("en") + const [searchOpen, setSearchOpen] = useState(false) + const pathname = usePathname() + + // Use external state as single source of truth - no internal state conflicts + const isDrawerOpen = externalActiveTab !== null && externalActiveTab !== undefined + const activeDrawerTab = externalActiveTab || "menu" + + // Handle drawer close - reset parental state + const handleDrawerClose = (open: boolean) => { + if (!open) { + onDrawerTabChange?.(null) + } + } + + + return ( + <> + {/* Bottom Bar */} + + + + {/* Drawer */} + + + + { + onDrawerTabChange?.(tabId) + }} + showIndicator + className="flex-1 flex flex-col overflow-hidden" + tabsContainerClassName="px-4" + contentContainerClassName="overflow-y-auto scrollbar-content" + > + { + activeDrawerTab === "menu" + ? + : activeDrawerTab === "language" + ? + : activeDrawerTab === "settings" + ? + :

No content

+ } +
+
+
+ + ) +} + +export default BottomBar diff --git a/src/components/layout/bottom-bar/LanguageList.tsx b/src/components/layout/bottom-bar/LanguageList.tsx new file mode 100644 index 0000000..f03d293 --- /dev/null +++ b/src/components/layout/bottom-bar/LanguageList.tsx @@ -0,0 +1,51 @@ +import { Check } from 'lucide-react' +import React from 'react' +import { LANGUAGES } from './content' +import { cn } from '@/lib/utils' + +interface LanguageListProps { + selectedLanguage: string + setSelectedLanguage: (language: string) => void +} + +const LanguageList = ({ selectedLanguage, setSelectedLanguage }: LanguageListProps) => { + return ( +
+
+

Select Language

+

Choose your preferred language

+
+
+ {LANGUAGES.map((lang) => { + const isSelected = selectedLanguage === lang.code + return ( + + ) + })} +
+
+ ) +} + +export default LanguageList \ No newline at end of file diff --git a/src/components/layout/bottom-bar/MenuList.tsx b/src/components/layout/bottom-bar/MenuList.tsx new file mode 100644 index 0000000..5f896bc --- /dev/null +++ b/src/components/layout/bottom-bar/MenuList.tsx @@ -0,0 +1,74 @@ +"use client" + +import Link from 'next/link' +import React from 'react' +import { sidebarSections } from '../side-bar/content' +import { cn } from '@/lib/utils' +import { Moon } from 'lucide-react' +import { usePathname } from 'next/navigation' + +type DrawerTabsType = "menu" | "language" | "settings" + +interface MenuListProps { + onDrawerTabChange?: (tab: DrawerTabsType | null) => void +} + +const MenuList = ({ onDrawerTabChange }: MenuListProps) => { + const pathname = usePathname() + + return ( +
+ {/* Logo Section */} +
+
+ +
+
+

Deenify

+

Islamic Companion

+
+
+ + {/* Navigation Sections */} + {sidebarSections.map((section: typeof sidebarSections[0], idx: number) => ( +
+

+ {section.title} +

+
+ {section.items.map((item: typeof section.items[0]) => { + const Icon = item.icon + const isActive = pathname === item.href + + return ( + onDrawerTabChange?.(null)} + className={cn( + "flex items-center gap-3 px-3 py-2.5 rounded-lg transition-colors", + isActive + ? "bg-emerald-50 text-emerald-900" + : "text-gray-700 hover:bg-gray-50" + )} + > + + {item.label} + {isActive && ( +
+ )} + + ) + })} +
+
+ ))} +
+ ) +} + +export default MenuList \ No newline at end of file diff --git a/src/components/layout/bottom-bar/SettingsList.tsx b/src/components/layout/bottom-bar/SettingsList.tsx new file mode 100644 index 0000000..10dc010 --- /dev/null +++ b/src/components/layout/bottom-bar/SettingsList.tsx @@ -0,0 +1,213 @@ +import { Bell, Palette, Sun, Moon, Volume2, VolumeX, Shield, User, Mail, Smartphone, ChevronRight } from 'lucide-react' +import React from 'react' +import { useRouter } from 'next/navigation' +import { cn } from '@/lib/utils' + +interface SettingToggleProps { + icon: React.ElementType + label: string + description: string + checked: boolean + onChange: () => void +} + +interface SettingItemProps { + icon: React.ElementType + label: string + description: string + onClick: () => void +} + +const SettingsList = () => { + const router = useRouter() + + return ( +
+ {/* Appearance */} +
+

+ + Appearance +

+
+ { }} + /> + { }} + /> +
+
+ +
+ + {/* Notifications */} +
+

+ + Notifications +

+
+ { }} + /> + { }} + /> + { }} + /> +
+
+ +
+ + {/* Sound & Media */} +
+

+ + Sound & Media +

+
+ { }} + /> + { }} + /> +
+
+ +
+ + {/* Privacy & Security */} +
+

+ + Privacy & Security +

+
+ router.push("/settings/privacy")} + /> + router.push("/settings/security")} + /> +
+
+
+ ) +} + + +// Setting Components +interface SettingToggleProps { + icon: React.ElementType + label: string + description: string + checked: boolean + onChange: () => void +} + +const SettingToggle: React.FC = ({ icon: Icon, label, description, checked, onChange }) => { + return ( +
+
+
+ +
+
+

{label}

+

{description}

+
+
+ +
+ ) +} + + +interface SettingItemProps { + icon: React.ElementType + label: string + description: string + onClick: () => void +} + +const SettingItem: React.FC = ({ icon: Icon, label, description, onClick }) => { + return ( + + ) +} + +export default SettingsList + + diff --git a/src/components/layout/bottom-bar/content.ts b/src/components/layout/bottom-bar/content.ts new file mode 100644 index 0000000..2ee8ccc --- /dev/null +++ b/src/components/layout/bottom-bar/content.ts @@ -0,0 +1,48 @@ +import type { TabItem } from "@/components/shared/Tabs" +import { type SearchItem } from "@/components/ui/input" +import { + BookOpen, FileText, Clock, Compass, Users, + MenuIcon, + Globe, + Settings, +} from "lucide-react" + + +export const SEARCH_ITEMS: SearchItem[] = [ + { type: "Surah", name: "Al-Fatihah", icon: BookOpen, page: "/quran" }, + { type: "Surah", name: "Al-Baqarah", icon: BookOpen, page: "/quran" }, + { type: "Surah", name: "Al-Imran", icon: BookOpen, page: "/quran" }, + { type: "Surah", name: "An-Nisa", icon: BookOpen, page: "/quran" }, + { type: "Surah", name: "Al-Maidah", icon: BookOpen, page: "/quran" }, + { type: "Surah", name: "Yasin", icon: BookOpen, page: "/quran" }, + { type: "Surah", name: "Al-Mulk", icon: BookOpen, page: "/quran" }, + { type: "Surah", name: "Al-Kahf", icon: BookOpen, page: "/quran" }, + { type: "Hadith", name: "Sahih Bukhari", icon: FileText, page: "/hadith" }, + { type: "Hadith", name: "Sahih Muslim", icon: FileText, page: "/hadith" }, + { type: "Hadith", name: "Sunan Abu Dawood", icon: FileText, page: "/hadith" }, + { type: "Hadith", name: "Jami at-Tirmidhi", icon: FileText, page: "/hadith" }, + { type: "Feature", name: "Prayer Times", icon: Clock, page: "/prayer" }, + { type: "Feature", name: "Qibla Finder", icon: Compass, page: "/qibla" }, + { type: "Feature", name: "Dhikr Counter", icon: Users, page: "/dhikr" }, + { type: "Feature", name: "Islamic Calendar", icon: Clock, page: "/calendar" }, + { type: "Feature", name: "Supplications", icon: BookOpen, page: "/supplications" }, + { type: "Feature", name: "Guides & Learning", icon: BookOpen, page: "/guides" }, +] + +export const LANGUAGES = [ + { code: "en", name: "English", flag: "🇺🇸" }, + { code: "ar", name: "العربية", flag: "🇸🇦" }, + { code: "ur", name: "اردو", flag: "🇵🇰" }, + { code: "tr", name: "Türkçe", flag: "🇹🇷" }, + { code: "fr", name: "Français", flag: "🇫🇷" }, + { code: "id", name: "Bahasa Indonesia", flag: "🇮🇩" }, + { code: "ms", name: "Bahasa Melayu", flag: "🇲🇾" }, + { code: "bn", name: "বাংলা", flag: "🇧🇩" }, +] + + +export const DrawerTabs: TabItem[] = [ + { id: "menu", label: "Menu", icon: MenuIcon }, + { id: "language", label: "Language", icon: Globe }, + { id: "settings", label: "Settings", icon: Settings }, +] \ No newline at end of file diff --git a/src/components/layout/bottom-bar/index.ts b/src/components/layout/bottom-bar/index.ts new file mode 100644 index 0000000..10d1b67 --- /dev/null +++ b/src/components/layout/bottom-bar/index.ts @@ -0,0 +1,2 @@ +export { default as BottomBar } from "./BottomBar" +export * from "./content" \ No newline at end of file diff --git a/src/components/layout/footer/Footer.tsx b/src/components/layout/footer/Footer.tsx index cf7813c..d6bd962 100644 --- a/src/components/layout/footer/Footer.tsx +++ b/src/components/layout/footer/Footer.tsx @@ -1,8 +1,167 @@ +"use client" + import React from 'react' +import Link from 'next/link' +import { Moon, Mail, Phone, MapPin } from 'lucide-react' const Footer = () => { + const currentYear = new Date().getFullYear() + + const quickLinks = [ + { label: 'Prayer Times', page: '/prayer' }, + { label: 'Quran', page: '/quran' }, + { label: 'Hadith', page: '/hadith' }, + { label: 'Calendar', page: '/calendar' }, + { label: 'Qibla Finder', page: '/qibla' }, + { label: 'Dhikr Counter', page: '/dhikr' }, + ] + + const resources = [ + { label: 'Supplications', page: '/supplications' }, + { label: 'Guides & Learning', page: '/guides' }, + { label: 'Islamic History', page: '/history' }, + { label: 'Prophetic Chain', page: '/prophets' }, + { label: 'Islamic Miracles', page: '/miracles' }, + { label: 'Five Pillars', page: '/pillars' }, + ] + + const community = [ + { label: 'About Us', page: '/about' }, + { label: 'Contact Us', page: '/contact' }, + { label: 'Community Forum', page: '/forum' }, + { label: 'Blog & Articles', page: '/blog' }, + { label: 'FAQs', page: '/faqs' }, + { label: 'Support Center', page: '/support' }, + ] + + const legal = [ + { label: 'Privacy Policy', page: '/privacy' }, + { label: 'Terms of Service', page: '/terms' }, + { label: 'Cookie Policy', page: '/cookies' }, + { label: 'Disclaimer', page: '/disclaimer' }, + { label: 'Accessibility', page: '/accessibility' }, + { label: 'Licenses', page: '/licenses' }, + ] + return ( -
Footer
+
+
+
+ {/* Main Footer Content */} +
+ {/* About Section */} +
+
+
+
+ +
+
+
+

Deenify

+

Islamic Companion

+
+
+

+ Your comprehensive Islamic lifestyle companion. Strengthen your faith with prayer times, Quran reading, authentic Hadith, and more. +

+
+ + {/* Quick Links */} +
+

Quick Links

+
    + {quickLinks.map((link) => ( +
  • + + {link.label} + +
  • + ))} +
+
+ + {/* Resources */} +
+

Resources

+
    + {resources.map((link) => ( +
  • + + {link.label} + +
  • + ))} +
+
+ + {/* Contact */} +
+

Contact Us

+
    +
  • + + info@islamiccompanion.com +
  • +
  • + + +1 (555) 123-4567 +
  • +
  • + + 123 Islamic Center Dr
    City, State 12345
    +
  • +
+
+
+ + {/* Community & Legal */} +
+
+

Community

+
+ {community.map((link) => ( + + {link.label} + + ))} +
+
+
+

Legal

+
+ {legal.map((link) => ( + + {link.label} + + ))} +
+
+
+ + {/* Bottom Bar */} +
+

+ © {currentYear} Islamic Companion. All rights reserved. +

+
+
+
+
) } diff --git a/src/components/layout/header/Header.tsx b/src/components/layout/header/Header.tsx index 88ae54e..22979ca 100644 --- a/src/components/layout/header/Header.tsx +++ b/src/components/layout/header/Header.tsx @@ -12,10 +12,11 @@ import { } from "@/components/shared/UserProfileDropdown" import { cn } from "@/lib/utils" import { useRouter } from "next/navigation" +import MenuIcon from "@/assets/svg/MenuIcon" export interface HeaderProps { userPreferences?: UserPreferences - onToggleSidebar?: () => void + onToggleSidebar?: () => void searchItems?: SearchItem[] className?: string } @@ -91,45 +92,48 @@ const Header: React.FC = ({ } return ( -
-
+
+
{/* Left Section - Mobile Menu & Greeting */} -
+
+ +
-

+

{getGreeting(userPreferences?.name)}

-

+

Assalamu Alaikum wa Rahmatullahi wa Barakatuh

{/* Right Section - Search, Language, Notifications, Profile */} -
+
- { - // Handle language change if needed - console.log("Language changed to:", code) - }} - /> +
+ { + // Handle language change if needed + console.log("Language changed to:", code) + }} + /> +
{ diff --git a/src/components/layout/header/content.ts b/src/components/layout/header/content.ts index 0da73f0..9219eb7 100644 --- a/src/components/layout/header/content.ts +++ b/src/components/layout/header/content.ts @@ -1,4 +1,13 @@ -import { Settings, LogOut, HelpCircle, User, Heart, BookOpen, TrendingUp, Clock, LucideIcon } from "lucide-react"; +import { + Settings, + HelpCircle, + User, + BookOpen, + TrendingUp, + Clock, + LucideIcon, + Gift +} from "lucide-react"; export interface MenuItem { label: string; @@ -25,7 +34,7 @@ export const profileMenuItems: MenuSection[] = [ label: "Help & Support", sectionItems: [ { label: "Support Center", icon: HelpCircle, href: "/support-center" }, - { label: "Donate", icon: Heart, href: "/donate" }, + { label: "Donate", icon: Gift, href: "/donate" }, ] } ] diff --git a/src/components/layout/sidebar/Sidebar.tsx b/src/components/layout/side-bar/Sidebar.tsx similarity index 86% rename from src/components/layout/sidebar/Sidebar.tsx rename to src/components/layout/side-bar/Sidebar.tsx index dde9851..d66178f 100644 --- a/src/components/layout/sidebar/Sidebar.tsx +++ b/src/components/layout/side-bar/Sidebar.tsx @@ -3,10 +3,9 @@ import React, { useEffect, useState } from 'react'; import Link from 'next/link'; import { usePathname } from 'next/navigation'; -import { ChevronLeft, BookOpen } from 'lucide-react'; +import { ChevronLeft, BookOpen, Moon } from 'lucide-react'; import { cn } from '@/lib/utils'; import { sidebarSections } from './content'; -import Logo from '@/components/shared/Logo'; interface SidebarPropTypes { isLocked: boolean; @@ -16,7 +15,7 @@ interface SidebarPropTypes { isMobile: boolean; } -export function Sidebar( +const Sidebar = ( { sidebarExpanded, setSidebarExpanded, @@ -24,7 +23,7 @@ export function Sidebar( setIsLocked, isMobile, }: SidebarPropTypes -) { +) => { const pathname = usePathname(); const [showScrollbar, setShowScrollbar] = useState(false); @@ -57,7 +56,7 @@ export function Sidebar( {isMobile && (
setSidebarExpanded(false)} @@ -72,16 +71,26 @@ export function Sidebar( if (!isLocked && !isMobile) setSidebarExpanded(false); }} className={cn( - "bg-white border-r border-gray-200 flex flex-col fixed left-0 top-0 h-full min-h-dvh z-[51]", - "transition-[width] duration-300 ease-in-out will-change-[width]", - sidebarExpanded ? 'w-[280px]' : isMobile ? "w-[76px]" : "w-[76px]", + "bg-white border-r border-layout-separator flex flex-col fixed left-0 top-0 h-full min-h-dvh z-[51]", + isMobile + ? "w-[280px] transition-transform duration-300 ease-in-out will-change-transform" + : "transition-[width] duration-300 ease-in-out will-change-[width]", + isMobile + ? sidebarExpanded + ? "translate-x-0" + : "-translate-x-full" + : sidebarExpanded + ? "w-[280px]" + : "w-[76px]", )}> {/* Header - Logo */} -
+
{/* Logo and Title */}
- +
+ +

- Your Islamic Companion + Islamic Companion

@@ -108,7 +117,7 @@ export function Sidebar( setSidebarExpanded(false); } }} - className="absolute right-0 bottom-0 w-6 h-6 bg-white border border-gray-200 rounded-full flex items-center justify-center hover:bg-emerald-50 hover:border-emerald-300 transition-all duration-200 z-[60] shadow-md cursor-pointer translate-x-1/2 translate-y-1/2" + className="absolute right-0 bottom-0 w-6 h-6 bg-white border border-layout-separator rounded-full flex items-center justify-center hover:bg-emerald-50 hover:border-emerald-300 transition-all duration-200 z-[60] shadow-md cursor-pointer translate-x-1/2 translate-y-1/2" aria-label={sidebarExpanded ? "Collapse sidebar" : "Expand sidebar"} > {sidebarExpanded ? ( @@ -206,9 +215,9 @@ export function Sidebar(
-
-
-
+
+
+
)} diff --git a/src/components/layout/sidebar/content.ts b/src/components/layout/side-bar/content.ts similarity index 88% rename from src/components/layout/sidebar/content.ts rename to src/components/layout/side-bar/content.ts index 8ebcb0d..0c52d86 100644 --- a/src/components/layout/sidebar/content.ts +++ b/src/components/layout/side-bar/content.ts @@ -1,5 +1,12 @@ -import { Home, Clock, BookOpen, FileText, Calendar, Compass, Hand, User, BookHeart, GraduationCap, Scroll, Users, Star, Target, Heart, Flame, HelpCircle, Gift } from 'lucide-react'; +import { + Home, Clock, + BookOpen, FileText, + Calendar, Compass, Hand, User, + BookHeart, GraduationCap, + Scroll, Users, Star, Target, + Heart, Flame, HelpCircle, Gift +} from 'lucide-react'; export const sidebarSections = [ { diff --git a/src/components/shared/LanguageSelector.tsx b/src/components/shared/LanguageSelector.tsx index 250e6ff..f2bd5f8 100644 --- a/src/components/shared/LanguageSelector.tsx +++ b/src/components/shared/LanguageSelector.tsx @@ -22,6 +22,7 @@ interface LanguageSelectorProps { defaultLanguage?: string onLanguageChange?: (code: string) => void className?: string + compact?: boolean } @@ -42,6 +43,7 @@ export const LanguageSelector: React.FC = ({ defaultLanguage = "en", onLanguageChange, className, + compact = false, }) => { const [selectedLang, setSelectedLang] = useState(defaultLanguage) const [open, setOpen] = useState(false) @@ -59,31 +61,38 @@ export const LanguageSelector: React.FC = ({ "!focus-visible:ring-0 !focus-visible:ring-offset-0 focus-visible:outline-none", "focus:outline-none !ring-0 !ring-offset-0", "active:ring-0 active:ring-offset-0", - "w-[100px]", + compact ? "w-10" : "w-[100px]" )} > = ({ + ) + } + + return ( + + ) + })} +
+ + {/* Animated Indicator */} + {showIndicator && variant === "underline" && ( + + )} +
+ + {/* Content */} +
+ + {children ? ( + + {children} + + ) : activeTabContent ? ( + + {activeTabContent} + + ) : <>No content in the selected tab yet!} + +
+ + ) +} + +export default Tabs diff --git a/src/components/shared/UserProfileDropdown.tsx b/src/components/shared/UserProfileDropdown.tsx index 4d48793..03d2512 100644 --- a/src/components/shared/UserProfileDropdown.tsx +++ b/src/components/shared/UserProfileDropdown.tsx @@ -58,6 +58,7 @@ export const UserProfileDropdown: React.FC = ({ asChild variant="ghost" className={cn("h-10 px-2 gap-2 min-w-[60px] justify-start", className)} + shouldScale > diff --git a/src/components/ui/button.tsx b/src/components/ui/button.tsx index 9036d8f..a8ae2e8 100644 --- a/src/components/ui/button.tsx +++ b/src/components/ui/button.tsx @@ -21,7 +21,7 @@ const buttonVariants = tv({ "outline-purple": "border border-purple-600 text-purple-700 hover:bg-purple-50", // Ghost variants - ghost: "hover:bg-gray-100 hover:text-gray-900 bg-transparent", + ghost: "hover:bg-gray-200/50 hover:text-gray-900 bg-transparent", "ghost-emerald": "hover:bg-emerald-50 hover:text-emerald-900 bg-transparent", "ghost-red": "hover:bg-red-50 hover:text-red-900 bg-transparent", "ghost-blue": "hover:bg-blue-50 hover:text-blue-900 bg-transparent", @@ -61,6 +61,7 @@ export interface ButtonProps rippleClassName?: string rippleGoesFast?: boolean showRipple?: boolean + shouldScale?: boolean } interface Ripple { @@ -80,14 +81,33 @@ export const Button = ({ rippleClassName, rippleGoesFast = false, showRipple = false, + shouldScale = false, ...props }: ButtonProps & Omit, keyof ButtonProps>) => { const [ripples, setRipples] = React.useState([]); + const [isPressed, setIsPressed] = React.useState(false); const rippleKey = React.useRef(0); const Component: React.ElementType = href ? Link : component ?? (asChild ? "div" : "button"); + // Global mouse up handler - reset scale + React.useEffect(() => { + if (isPressed && shouldScale) { + const handleGlobalMouseUp = () => setIsPressed(false) + window.addEventListener("mouseup", handleGlobalMouseUp); + return () => window.removeEventListener("mouseup", handleGlobalMouseUp) + } + }, [isPressed, shouldScale]); + + // Mouse down handler + const handleMouseDown = (e: React.MouseEvent) => { + if (shouldScale) setIsPressed(true) + if (props.onMouseDown) props.onMouseDown(e); + }; + + // Mouse up handler const handleMouseUp = (e: React.MouseEvent) => { + if (shouldScale) setIsPressed(false) if (props.onMouseUp) props.onMouseUp(e); const rect = (e.currentTarget as HTMLElement).getBoundingClientRect(); @@ -96,11 +116,10 @@ export const Button = ({ const key = rippleKey.current++; setRipples((prev) => [...prev, { x, y, key }]); - - // remove ripple after animation setTimeout(() => setRipples((prev) => prev.filter((r) => r.key !== key)), 500); }; + return ( ({ "focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 overflow-hidden px-[30px]", buttonVariants({ variant, size, className }), )} - onMouseDown={props.onMouseDown} + style={{ + transform: shouldScale && isPressed ? "scale(0.90)" : "scale(1)", + transition: "transform 0.1s ease-out", + ...props.style, + }} + onMouseDown={handleMouseDown} onMouseUp={handleMouseUp} {...props} href={href} diff --git a/src/components/ui/drawer.tsx b/src/components/ui/drawer.tsx new file mode 100644 index 0000000..061fe3d --- /dev/null +++ b/src/components/ui/drawer.tsx @@ -0,0 +1,111 @@ +"use client"; +import { cn } from "@/lib/utils"; +import * as React from "react"; +import { Drawer as DrawerPrimitive } from "vaul"; + +const DrawerTrigger = DrawerPrimitive.Trigger; +const DrawerPortal = DrawerPrimitive.Portal; +const DrawerClose = DrawerPrimitive.Close; + +const Drawer = ({ + shouldScaleBackground = true, + ...props +}: React.ComponentProps) => ( + +); + +const DrawerOverlay = ({ + overlayStyle, +}: React.ComponentPropsWithoutRef & { + overlayStyle?: string; +}) => ( + +) + +const DrawerContent = ({ + className, + overlayStyle, + shouldShowOverlay = true, + children, + ...props +}: React.ComponentPropsWithoutRef & { + overlayStyle?: string; + shouldShowOverlay?: boolean; +}) => ( + + {shouldShowOverlay && } + + {children} + + +); + +const DrawerThumb = ({ + className, + wrapperStyle, + thumbSize = "md", +}: React.HTMLAttributes & { + thumbSize?: "xs" | "sm" | "md" | "lg"; + wrapperStyle?: string; +}) => ( +
+
+
+); + +const DrawerTitle = ({ + className, + ...props +}: React.ComponentPropsWithoutRef) => ( + +); + +const DrawerDescription = ({ + className, + ...props +}: React.ComponentPropsWithoutRef) => { + return ( + + ); +}; + +export { + Drawer, + DrawerPortal, + DrawerOverlay, + DrawerTrigger, + DrawerClose, + DrawerContent, + DrawerTitle, + DrawerThumb, + DrawerDescription, +}; \ No newline at end of file diff --git a/src/components/ui/input.tsx b/src/components/ui/input.tsx index 7cc6da0..be17e8e 100644 --- a/src/components/ui/input.tsx +++ b/src/components/ui/input.tsx @@ -18,6 +18,7 @@ interface InputProps extends React.ComponentProps<"input"> { filteredItems?: SearchItem[] onItemSelect?: (item: SearchItem) => void className?: string + containerClassName?: string } function Input({ @@ -26,6 +27,7 @@ function Input({ search = false, filteredItems = [], onItemSelect, + containerClassName, ...props }: InputProps) { const [showDropdown, setShowDropdown] = React.useState(false) @@ -53,7 +55,7 @@ function Input({ } return ( -
+
{search && ( search && filteredItems.length > 0 && setShowDropdown(true)} {...props} /> @@ -91,7 +93,7 @@ function Input({ animate={{ opacity: 1, y: 0, scale: 1 }} exit={{ opacity: 0, y: -10, scale: 0.95 }} transition={{ duration: 0.2, ease: [0.4, 0, 0.2, 1] }} - className="absolute top-full mt-2 w-full bg-white border border-gray-200 rounded-sm shadow-lg z-[100] overflow-hidden" + className="absolute top-full mt-2 w-full bg-white border border-layout-separator rounded-sm shadow-lg z-[100] overflow-hidden" >
{filteredItems.map((item, index) => { @@ -103,8 +105,8 @@ function Input({ initial={{ opacity: 0, x: -10 }} animate={{ opacity: 1, x: 0 }} transition={{ - duration: 0.15, - delay: index * 0.03, + duration: 0.2, + delay: index * 0.06, ease: [0.4, 0, 0.2, 1] }} className={cn( diff --git a/src/config/settings.ts b/src/config/settings.ts deleted file mode 100644 index 8dea778..0000000 --- a/src/config/settings.ts +++ /dev/null @@ -1,17 +0,0 @@ -// config/defaultUserSettings.ts - -export const defaultUserSettings = { - liveAdhan: false, - darkMode: false, - language: "en", - enableHijriDate: true, - showPrayerNotifications: true, - preferredReciter: "mishary-rashid", - enableLiveAdhan: true, - enableQiblaCompass: true, - enableDuaCategories: true, - enableTafsir: false, // beta maybe - enableMultiLanguageQuran: true, - arabicFontSize: 16, - fontSize: 1 -}; diff --git a/src/hooks/useBreakpoint.ts b/src/hooks/useBreakpoint.ts index 04a0de9..fd09818 100644 --- a/src/hooks/useBreakpoint.ts +++ b/src/hooks/useBreakpoint.ts @@ -10,7 +10,7 @@ const breakpoints: Record = { xs: 480, sm: 640, md: 768, - lg: 991, + lg: 1024, xl: 1170, "2xl": 1280, }; diff --git a/tailwind.config.ts b/tailwind.config.ts index 2a7e19f..f2bbfbf 100644 --- a/tailwind.config.ts +++ b/tailwind.config.ts @@ -1,4 +1,4 @@ -import type { Config } from "tailwindcss"; +import type { Config } from "tailwindcss"; const config: Config = { darkMode: ["class"], @@ -11,10 +11,10 @@ const config: Config = { extend: { // Font Family - Exact match to Figma Make - fontFamily: { + fontFamily: { heading: ["var(--font-heading)", "ui-sans-serif", "system-ui", "sans-serif"], body: ["var(--font-noto)", "ui-sans-serif", "system-ui", "sans-serif"], - arabic: ["var(--font-noto-arabic)", "serif"], + arabic: ["var(--font-noto-arabic)", "serif"], }, // Screens @@ -22,13 +22,13 @@ const config: Config = { xs: "480px", sm: "640px", md: "768px", - lg: "991px", + lg: "1024px", xl: "1170px", "2xl": "1280px", }, // Colors - colors: { + colors: { emerald: { "50": "var(--color-emerald-50)", "100": "var(--color-emerald-100)", @@ -95,6 +95,8 @@ const config: Config = { DEFAULT: "var(--color-blue-500)", }, + "layout-separator": "#e5e7eb", + // Radix UI / shadcn colors - Required for Radix UI components background: "hsl(var(--background))", foreground: "hsl(var(--foreground))", @@ -125,7 +127,7 @@ const config: Config = { border: "hsl(var(--border))", input: "hsl(var(--input))", "input-background": "hsl(var(--input-background))", - ring: "hsl(var(--ring))", + ring: "hsl(var(--ring))", chart: { "1": "hsl(var(--chart-1))", "2": "hsl(var(--chart-2))", @@ -143,7 +145,7 @@ const config: Config = { }, // Border Radius - Exact match to Figma Make - borderRadius: { + borderRadius: { sm: "4px", md: "8px", lg: "12px", From f287414c9b1ce4f47778b3e9a01b618a31e45444 Mon Sep 17 00:00:00 2001 From: haseeb Date: Sun, 25 Jan 2026 14:32:49 +0500 Subject: [PATCH 2/3] FEAT: UI/UX Refinements across App Layout --- src/components/layout/LayoutWrapper.tsx | 17 ++-- .../layout/bottom-bar/BottomBar.tsx | 5 +- src/components/layout/header/Header.tsx | 43 +++++--- src/components/layout/side-bar/Sidebar.tsx | 4 +- .../shared/NotificationsPopover.tsx | 98 +++++++++++-------- src/components/shared/UserProfileDropdown.tsx | 30 ++++-- src/components/ui/dropdown-menu.tsx | 7 +- src/components/ui/popover.tsx | 7 +- 8 files changed, 136 insertions(+), 75 deletions(-) diff --git a/src/components/layout/LayoutWrapper.tsx b/src/components/layout/LayoutWrapper.tsx index c33d2a5..8867f19 100644 --- a/src/components/layout/LayoutWrapper.tsx +++ b/src/components/layout/LayoutWrapper.tsx @@ -21,7 +21,9 @@ const LayoutWrapper = ({ children }: LayoutWrapperProptype) => { const isMobile = useBreakpoint('lg', 'down') return ( + // Layout Wrapper
+ {/* Sidebar left-side */} { setSidebarExpanded={setSidebarExpanded} /> + {/* Content-Container right-side */}
+ {/* Header top-bar */}
{ if (isMobile) setActiveDrawerTab("menu") else setSidebarExpanded(!sidebarExpanded) }} /> + + {/* Content-scroller inner-content */}
-
+
<>{children}
-
- {isMobile && ( + {/* Mobile-Actions bottom-Bar */} - )} +
) } diff --git a/src/components/layout/bottom-bar/BottomBar.tsx b/src/components/layout/bottom-bar/BottomBar.tsx index bc9bdc3..40755c3 100644 --- a/src/components/layout/bottom-bar/BottomBar.tsx +++ b/src/components/layout/bottom-bar/BottomBar.tsx @@ -16,12 +16,14 @@ import SettingsList from "./SettingsList" type DrawerTabsType = "menu" | "language" | "settings" interface BottomBarProps { + isVisible: boolean activeDrawerTab?: DrawerTabsType | null onDrawerTabChange?: (tab: DrawerTabsType | null) => void } const BottomBar = ({ + isVisible, activeDrawerTab: externalActiveTab, onDrawerTabChange }: BottomBarProps) => { @@ -40,11 +42,12 @@ const BottomBar = ({ } } + if (!isVisible) return null return ( <> {/* Bottom Bar */} -