import React, { useMemo, useState } from 'react'; import { Lock, Shield, Check, X, Timer } from 'lucide-react'; const admin_url = tpsaAdmin.admin_url; const allActiveFeatures = tpsaAdmin.feature_status.all_active_features; const defaultFeatures = [ { id: 'limit-login-attempts', category: 'security-core', name: 'Limit Login Attempts', description: 'Prevent brute force attacks', status: 'active', free: true, icon: Lock, url: admin_url + 'admin.php?page=tp-admin-safety-guard&tab=security-core&tpsa-setting=limit-login-attempts', }, { id: 'custom-login-url', category: 'security-core', name: 'Custom Login URL', description: 'Prevent brute force attacks', status: 'active', free: true, icon: Lock, url: admin_url + 'admin.php?page=tp-admin-safety-guard&tab=security-core&tpsa-setting=custom-login-url', }, { id: 'two-factor-auth', category: 'security-core', name: 'Two-Factor Authentication', description: 'Extra layer of security', status: 'active', free: true, icon: Shield, url: admin_url + 'admin.php?page=tp-admin-safety-guard&tab=security-core&tpsa-setting=two-factor-auth', }, { id: 'password-protection', category: 'security-core', name: 'Password Protection', description: 'Enforce strong passwords', status: 'active', free: true, icon: Lock, url: admin_url + 'admin.php?page=tp-admin-safety-guard&tab=security-core&tpsa-setting=password-protection', }, { id: 'session-security', category: 'security-core', name: 'Session Security', description: 'Limit how long a sign-in stays valid', status: 'active', free: true, icon: Timer, url: admin_url + 'admin.php?page=tp-admin-safety-guard&tab=security-core&tpsa-setting=session-security', }, { id: 'recaptcha', category: 'security-core', name: 'Google reCAPTCHA', description: 'Bot protection', status: 'active', free: true, icon: Shield, url: admin_url + 'admin.php?page=tp-admin-safety-guard&tab=security-core&tpsa-setting=recaptcha', }, { id: 'admin-bar', category: 'security-core', name: 'Hide Admin Bar', description: 'Hide the admin bar from non-admins', status: 'active', free: true, icon: Shield, url: admin_url + 'admin.php?page=tp-admin-safety-guard&tab=security-core&tpsa-setting=admin-bar', }, { id: 'passwordless-login', category: 'security-core', name: 'Passwordless Login', description: 'Allow users to log in without a password', status: 'active', free: false, icon: Shield, url: admin_url + 'admin.php?page=tp-admin-safety-guard&tab=security-core&tpsa-setting=passwordless-login', }, { id: '2fa-using-mobile-app', category: 'security-core', name: '2FA using Mobile App', description: 'Allow users to log in using mobile app', status: 'active', free: false, icon: Shield, url: admin_url + 'admin.php?page=tp-admin-safety-guard&tab=security-core&tpsa-setting=2fa-using-mobile-app', }, { id: 'strong-password', category: 'security-core', name: 'Strong Password Enforcement', description: 'Enforce strong password policies', status: 'active', free: false, icon: Shield, url: admin_url + 'admin.php?page=tp-admin-safety-guard&tab=security-core&tpsa-setting=strong-password', }, { id: 'social-login', category: 'security-core', name: 'Social Login', description: 'Allow users to log in using social media accounts', status: 'active', free: false, icon: Shield, url: admin_url + 'admin.php?page=tp-admin-safety-guard&tab=security-core&tpsa-setting=social-login', }, { id: 'table-prefix-check', category: 'security-core', name: 'Table Prefix Check', description: 'Prevent table prefix changes', status: 'active', free: false, icon: Shield, url: admin_url + 'admin.php?page=tp-admin-safety-guard&tab=security-core&tpsa-setting=table-prefix-check', }, ]; export default function FeatureGrid({ items = defaultFeatures, category = 'all', onConfigure, onViewDetails, className = '', }) { const [selectedFeature, setSelectedFeature] = useState(null); const filteredFeatures = useMemo(() => { if (!items?.length) return []; if (!category || category === 'all') return items; return items.filter((f) => f.category === category); }, [items, category]); const uid = useMemo(() => `fg-${Math.random().toString(36).slice(2, 9)}`, []); const toggle = (id) => { setSelectedFeature((prev) => (prev === id ? null : id)); }; return (
{filteredFeatures.map((feature) => { const FeatureIcon = feature.icon; const isSelected = selectedFeature === feature.id; return (
toggle(feature.id)} onKeyDown={(e) => { if (e.key === 'Enter' || e.key === ' ') { e.preventDefault(); toggle(feature.id); } }} >
{allActiveFeatures.includes(feature.id) ? ( <> {feature.free ? 'Free' : 'Pro'}

{feature.name}

{feature.description}

); })}
); }