UNPKG

react-anticapture

Version:

A lightweight React component that helps prevent users from capturing (copying, selecting, printing, or screenshotting) sensitive information rendered on your website. Perfect for privacy, security, and content protection in React applications.

7 lines (6 loc) 4.91 kB
(function(i,w){typeof exports=="object"&&typeof module<"u"?module.exports=w(require("react/jsx-runtime"),require("devtools-detect"),require("react")):typeof define=="function"&&define.amd?define(["react/jsx-runtime","devtools-detect","react"],w):(i=typeof globalThis<"u"?globalThis:i||self,i["Library name"]=w(i.jsxRuntime,i.devTools,i.React))})(this,function(i,w,a){"use strict";const l="CLIPBOARD",d="COPY",c="ENTER",g="DEFAULT",S=()=>{document.body.innerHTML='<p class="font-weight-bold">Please close devtools/console to continue.</p>',document.body.style.margin="0",document.body.style.overflow="hidden",document.body.style.height="100vh",document.body.style.display="flex",document.body.style.alignItems="center",document.body.style.justifyContent="center",document.body.style.backgroundColor="#f0f0f0",document.body.style.color="#333"},k=f=>{const p=[["PrintScreen"],["Meta"],["Alt","PrintScreen"],["Meta","PrintScreen"],["Meta","Shift"],["Meta","Shift","KeyS"],["Meta","Shift","Digit3"],["Meta","Shift","Digit4"],["Control","Shift","KeyP"],["Meta","KeyG"],["Meta","Alt","KeyR"],["Shift","Meta","Digit5"],["F12"],["Control","Shift","KeyI"],["Control","Shift","KeyC"],["Control","Shift","KeyJ"],["Control","KeyU"]],u=r=>r==="MetaLeft"||r==="MetaRight"?"Meta":r==="AltLeft"||r==="AltRight"?"Alt":r==="ShiftLeft"||r==="ShiftRight"?"Shift":r==="ControlLeft"||r==="ControlRight"?"Control":r,s=[...f.map(u)].sort();return p.some(r=>{const o=[...r].map(u).sort();return o.length===s.length&&o.every((m,E)=>m===s[E])})},x=({targetClick:f,clipboardPrevent:p=!1,devtoolsPrevent:u=!1,screenshotPrevent:y=!0})=>{const[s,r]=a.useState({}),[o,m]=a.useState({text:"Press enter to continue.",color:"black",type:c}),[E,P]=a.useState(w.isOpen),[L,h]=a.useState(!0),A=t=>r(n=>({...n,[t]:!0})),C=t=>r(n=>{const e={...n};return delete e[t],e}),D=()=>r({}),b=t=>{switch(t){case d:m({text:"This page is prohibited from being copied or captured!",color:"red",type:d});break;case l:m({text:"Please allow clipboard on your browser to continue.",color:"red",type:l});break;case c:m({text:"Press enter to continue.",color:"black",type:c});break;case g:m({text:"",color:"",type:g});break}},T=()=>Object.keys(s);a.useEffect(()=>{s&&Object.keys(s).length>0&&o.type!==l&&k(T())&&(h(!0),b(d),D())},[s]),u&&a.useEffect(()=>{const t=e=>{e.detail.isOpen?P(!0):window.location.reload()};window.addEventListener("devtoolschange",t);let n;return E&&(console.clear(),n=setInterval(()=>{console.log("%c Close your devtools/console!","background: #222; color: #bada55; font-size: 50px; text-align: end"),setTimeout(()=>{console.clear()},900)},1e3),S()),()=>{n&&clearInterval(n),window.removeEventListener("devtoolschange",t)}},[E,u]),p&&a.useEffect(()=>{const t=e=>e.preventDefault(),n=e=>{e.preventDefault(),navigator.clipboard.writeText(""),b(d),h(!0)};return window.addEventListener("contextmenu",t),window.addEventListener("copy",n),window.addEventListener("paste",n),()=>{window.removeEventListener("contextmenu",t),window.removeEventListener("copy",n),window.removeEventListener("paste",n)}},[p]),a.useEffect(()=>{const t=e=>{e.key==="Enter"?(o.type===c||o.type===l)&&(b(g),h(!1)):(y&&(e.key==="F12"&&e.preventDefault(),e.ctrlKey&&e.code==="KeyU"&&e.preventDefault(),e.ctrlKey&&e.shiftKey&&["KeyI","KeyC","KeyJ"].includes(e.code)&&e.preventDefault()),A(e.code))},n=e=>{if(o.type===c||o.type===l){C(e.code);return}y&&e.key==="PrintScreen"?(e.preventDefault(),h(!0),b(d),navigator.clipboard.writeText("")):C(e.code)};return document.addEventListener("keydown",t),window.addEventListener("keyup",n),()=>{window.removeEventListener("keydown",t),window.removeEventListener("keyup",n)}},[o.type,y]),a.useEffect(()=>{var n;const t=()=>{[c,l].includes(o.type)||h(!0)};return(n=document.querySelector("html"))==null||n.addEventListener("mouseleave",t),()=>{var e;(e=document.querySelector("html"))==null||e.removeEventListener("mouseleave",t)}},[o.type]);const K=()=>{L&&![c,l].includes(o.type)&&(h(!1),o.type===d&&b(g))};return a.useEffect(()=>{let t=f||document.querySelector("html");return t&&t.addEventListener("click",K),()=>{t&&t.removeEventListener("click",K)}},[o,L,f]),{blurPage:L,alertText:o}},v={anticaptureWrapper:"_anticapture-wrapper_o02wf_15",alertAnticapture:"_alert-anticapture_o02wf_23",anticaptureBlurPage:"_anticapture-blur-page_o02wf_61"};return({children:f,userSelect:p=!0,...u})=>{const{blurPage:y,alertText:s}=x(u);return i.jsxs(i.Fragment,{children:[i.jsx("div",{className:v.alertAnticapture,style:{display:s.text?"block":"none"},children:s.text&&i.jsx("p",{style:{fontWeight:"bolder",color:s.color,margin:0},children:s.text})}),i.jsx("div",{id:"anticapture-wrapper",className:` ${v.anticaptureWrapper} ${y?v.anticaptureBlurPage:""} ${p?v.userSelect:""} `,style:{transition:"filter 0.1s ease-in-out"},children:f})]})}}); //# sourceMappingURL=index.umd.cjs.map