// ================================================================ // "سعد الشعلاني" — نسخة WordPress (SPA) عبر React UMD + Tailwind CDN // الصفحات عبر Hash Router: #/ , #/songs , #/consulting , #/social , #/cinema , #/workshop // ================================================================ function cn(...classes){ return classes.filter(Boolean).join(" "); } const EMAIL_TO = "saadalshalani@gmail.com"; const WHATSAPP_NUMBER_RAW = "0096599718278"; const X_URL = "https://x.com/saadalshalani"; const BRAND = "سعد الشعلاني"; const PHONE_E164 = "+96599718278"; const TEL_LINK = `tel:${PHONE_E164}`; function getRoute(){ const h = window.location.hash; if(!h || h==="#" || h==="#/") return "/"; return h.startsWith("#")?h.slice(1):h; } function currentRouteId(){ const r=getRoute(); return r.startsWith("/")?r.slice(1):r; } const buildAnchorUrl=(id)=>{ const base=location.href.split("#")[0]; const hash=location.hash||""; return `${base}${hash}${hash.includes(`#${id}`)?"":`#${id}`}`; }; function validateContact({phone,email,message}){ const errors=[]; if(!phone && !email) errors.push("يرجى إدخال الهاتف أو الإيميل على الأقل."); if(!String(message).trim()) errors.push("يرجى كتابة تفاصيل الطلب."); return { ok: errors.length===0, errors }; } function buildWhatsAppLink(raw){ let d=String(raw).replace(/\D/g,""); if(d.startsWith("00")) d=d.slice(2); return `https://wa.me/${d}`; } const WHATSAPP_LINK = buildWhatsAppLink(WHATSAPP_NUMBER_RAW); function makeFallbackBanner(text){ const svg = ` ${text} `; return "data:image/svg+xml;utf8,"+encodeURIComponent(svg); } // Icons const Svg = ({children,...p}) => (); const IconSparkles=(p)=>(); const IconMusic=(p)=>(); const IconMessage=(p)=>(); const IconShare=(p)=>(); const IconFilm=(p)=>(); const IconPhone=(p)=>(); const IconSend=(p)=>(); const IconCheck=(p)=>(); const IconMail=(p)=>(); const IconTwitter=(p)=>(); const IconMoon=(p)=>(); const IconSun=(p)=>(); const ThemeContext = React.createContext({ isDark:false, toggleTheme:()=>{} }); const useTheme=()=>React.useContext(ThemeContext); function Button({variant="default", size="md", className, children, ...props}){ const { isDark }=useTheme(); const base="inline-flex items-center justify-center font-medium transition-colors focus:outline-none disabled:opacity-50 disabled:pointer-events-none rounded-2xl select-none active:scale-[.99]"; const sizes={ sm:"min-h-10 h-10 px-3 text-sm", md:"min-h-11 h-11 px-4", lg:"min-h-12 h-12 px-5 text-base" }; const variants={ default:"bg-gray-900 text-white hover:bg-gray-800", secondary:isDark?"bg-neutral-800 text-gray-100 hover:bg-neutral-700":"bg-gray-100 text-gray-900 hover:bg-gray-200", outline:isDark?"border border-neutral-700 hover:bg-neutral-800":"border border-gray-300 hover:bg-gray-50", ghost:isDark?"hover:bg-neutral-800":"hover:bg-gray-100" }; return ; } function Input(p){ const {isDark}=useTheme(); return ; } function Textarea(p){ const {isDark}=useTheme(); return