mirror of
https://github.com/kccleoc/seedpgp-web.git
synced 2026-03-07 09:57:50 +08:00
40 lines
1.6 KiB
TypeScript
40 lines
1.6 KiB
TypeScript
import { WifiOff } from 'lucide-react';
|
|
|
|
type ReadOnlyProps = {
|
|
isReadOnly: boolean;
|
|
onToggle: (isReadOnly: boolean) => void;
|
|
buildHash: string;
|
|
appVersion: string;
|
|
};
|
|
|
|
const CSP_POLICY = `default-src 'self'; script-src 'self'; style-src 'self' 'unsafe-inline'; img-src 'self' data:; connect-src 'none';`;
|
|
|
|
export function ReadOnly({ isReadOnly, onToggle, buildHash, appVersion }: ReadOnlyProps) {
|
|
return (
|
|
<div className="pt-3 border-t border-slate-300">
|
|
<label className="flex items-center gap-2 cursor-pointer group">
|
|
<input
|
|
type="checkbox"
|
|
checked={isReadOnly}
|
|
onChange={(e) => onToggle(e.target.checked)}
|
|
className="rounded text-blue-600 focus:ring-2 focus:ring-blue-500 transition-all"
|
|
/>
|
|
<span className="text-xs font-medium text-slate-700 group-hover:text-slate-900 transition-colors">
|
|
Read-only Mode
|
|
</span>
|
|
</label>
|
|
{isReadOnly && (
|
|
<div className="mt-4 p-3 bg-slate-800 text-slate-200 rounded-lg text-xs space-y-2 animate-in fade-in">
|
|
<p className="font-bold flex items-center gap-2"><WifiOff size={14} /> Network & Persistence Disabled</p>
|
|
<div className="font-mono text-[10px] space-y-1">
|
|
<p><span className="font-semibold text-slate-400">Version:</span> {appVersion}</p>
|
|
<p><span className="font-semibold text-slate-400">Build:</span> {buildHash}</p>
|
|
<p className="pt-1 font-semibold text-slate-400">Content Security Policy:</p>
|
|
<p className="text-sky-300 break-words">{CSP_POLICY}</p>
|
|
</div>
|
|
</div>
|
|
)}
|
|
</div>
|
|
);
|
|
}
|