import React, { useState, useRef, useEffect } from "react";
import { RotateCcw, Plus, Minus, Clock, Compass, Settings, Hand, ChevronLeft, ChevronRight, Bell, Moon, Globe, Info, CheckCircle2, Circle, Users, User, BookOpen } from "lucide-react";
const DHIKR_LIST = [
{ id: "subhanallah", ar: "سُبْحَانَ اللَّه", label: "Subhanallah" },
{ id: "alhamdulillah", ar: "الْحَمْدُ لِلَّه", label: "Alhamdulillah" },
{ id: "allahuakbar", ar: "اللَّهُ أَكْبَر", label: "Allahu Akbar" },
{ id: "astaghfirullah", ar: "أَسْتَغْفِرُ اللَّه", label: "Astaghfirullah" },
];
const PRAYER_TIMES = [
{ name: "Fajr", time: "04:32" },
{ name: "Dhuhr", time: "12:14" },
{ name: "Asr", time: "15:47" },
{ name: "Maghrib", time: "18:21" },
{ name: "Isha", time: "19:45" },
];
const PRAYER_CONFIG = [
{ id: "fajr", label: "ফজর", defaultRakat: 2 },
{ id: "dhuhr", label: "যোহর", defaultRakat: 4 },
{ id: "asr", label: "আসর", defaultRakat: 4 },
{ id: "maghrib", label: "মাগরিব", defaultRakat: 3 },
{ id: "isha", label: "এশা", defaultRakat: 4 },
];
function StarPattern({ className }) {
return (
);
}
function TasbihTab() {
const [activeDhikr, setActiveDhikr] = useState(0);
const [counts, setCounts] = useState({ subhanallah: 0, alhamdulillah: 0, allahuakbar: 0, astaghfirullah: 0 });
const [target, setTarget] = useState(33);
const [pulse, setPulse] = useState(false);
const current = DHIKR_LIST[activeDhikr];
const count = counts[current.id];
const tap = () => {
setCounts((c) => ({ ...c, [current.id]: c[current.id] + 1 }));
setPulse(true);
setTimeout(() => setPulse(false), 140);
};
const reset = () => setCounts((c) => ({ ...c, [current.id]: 0 }));
const cycleTarget = () => setTarget((t) => (t === 33 ? 99 : t === 99 ? 100 : 33));
const progress = Math.min(count / target, 1);
const circumference = 2 * Math.PI * 88;
return (
{current.ar}
{current.label}
{DHIKR_LIST.map((d, i) => (
))}
);
}
function PrayerTab() {
const now = "14:02";
return (
Next Prayer
Asr · 15:47
in 1h 45m
{PRAYER_TIMES.map((p, i) => (
{p.name}
{p.time}
))}
Sample times shown — connecting real location & calculation method needs a prayer-times API.
);
}
function QiblaTab() {
const [angle] = useState(292);
return (
Qibla Direction
{angle}° from North
{["N", "E", "S", "W"].map((dir, i) => (
{dir}
))}
A live compass needs device orientation permission, which only works when this runs as an installed app on a phone.
);
}
function PrayerCard({ config, data, onChange }) {
const { done, rakat, mode } = data;
return (
{done && (
{rakat}
)}
{done && (
)}
);
}
function AmolTab() {
const [prayers, setPrayers] = useState({
fajr: { done: false, rakat: 2, mode: "jamaat" },
dhuhr: { done: false, rakat: 4, mode: "jamaat" },
asr: { done: false, rakat: 4, mode: "jamaat" },
maghrib: { done: false, rakat: 3, mode: "jamaat" },
isha: { done: false, rakat: 4, mode: "jamaat" },
});
const [tahajjud, setTahajjud] = useState({ done: false, rakat: 2 });
const [quran, setQuran] = useState({ done: false, from: "", to: "" });
const updatePrayer = (id, data) => setPrayers((p) => ({ ...p, [id]: data }));
const totalRakat =
Object.values(prayers).reduce((s, p) => s + (p.done ? p.rakat : 0), 0) + (tahajjud.done ? tahajjud.rakat : 0);
const jamaatCount = Object.values(prayers).filter((p) => p.done && p.mode === "jamaat").length;
const ishaDone = prayers.isha.done;
return (
আজকের আমল
{totalRakat} রাকাত আদায়
{jamaatCount} ওয়াক্ত জামায়াতে
{PRAYER_CONFIG.map((cfg) => (
updatePrayer(cfg.id, d)} />
))}
{ishaDone && (
{tahajjud.done && (
{tahajjud.rakat}
)}
)}
{!ishaDone && (
এশা আদায় করলে তাহাজ্জুদ অপশন চালু হবে
)}
);
}
function ToggleRow({ icon: Icon, label, sub, value, onChange }) {
return (
);
}
function SettingsTab() {
const [notif, setNotif] = useState(true);
const [dark, setDark] = useState(false);
const [arabic, setArabic] = useState(true);
return (
Preferences
Noor
Prototype v0.1 · demo data only
);
}
export default function NoorApp() {
const [tab, setTab] = useState("tasbih");
const tabs = [
{ id: "tasbih", label: "Tasbih", icon: Hand },
{ id: "prayer", label: "Prayer", icon: Clock },
{ id: "amol", label: "Amol", icon: BookOpen },
{ id: "qibla", label: "Qibla", icon: Compass },
{ id: "settings", label: "Settings", icon: Settings },
];
return (
{/* Header */}
{/* Content */}
{tab === "tasbih" &&
}
{tab === "prayer" &&
}
{tab === "amol" &&
}
{tab === "qibla" &&
}
{tab === "settings" &&
}
{/* Bottom nav */}
{tabs.map((t) => {
const Icon = t.icon;
const active = tab === t.id;
return (
);
})}
);
}