|
1
|
|
-(()=>{"use strict";var e={n:t=>{var o=t&&t.__esModule?()=>t.default:()=>t;return e.d(o,{a:o}),o},d:(t,o)=>{for(var n in o)e.o(o,n)&&!e.o(t,n)&&Object.defineProperty(t,n,{enumerable:!0,get:o[n]})},o:(e,t)=>Object.prototype.hasOwnProperty.call(e,t)};const t=window.wp.blocks,o=window.wp.data,n=window.wp.i18n,r=window.wp.element,c=window.wp.blockEditor,a=window.wp.components,l=window.wp.coreData,s=window.wp.apiFetch;var i=e.n(s);function p({value:e,onChange:t,passwordLists:o,isLoading:r}){if(r)return React.createElement("div",{className:"passster-password-list-selector"},React.createElement(a.Spinner,null),React.createElement("span",null,(0,n.__)("Loading password lists...","content-protector")));const c=[{label:(0,n.__)("— Select a password list —","content-protector"),value:0},...o.map(e=>({label:e.title.rendered,value:e.id}))];return React.createElement(a.SelectControl,{label:(0,n.__)("Password List","content-protector"),value:e,options:c,onChange:e=>t(parseInt(e,10)),help:0===o.length?(0,n.__)("No password lists found. Create one first.","content-protector"):""})}const d=["passster/content-lock"],u=[["core/paragraph",{placeholder:(0,n.__)("Add content to protect...","content-protector")}]],m=JSON.parse('{"UU":"passster/content-lock"}'),_={from:[{type:"block",isMultiBlock:!0,blocks:["*"],__experimentalConvert(e){const o=e.map(e=>(0,t.createBlock)(e.name,e.attributes,e.innerBlocks));return(0,t.createBlock)("passster/content-lock",{},o)}}],to:[{type:"block",blocks:["*"],transform:(e,o)=>o.map(e=>(0,t.createBlock)(e.name,e.attributes,e.innerBlocks))}]},h=window.wp.primitives,w=window.ReactJSXRuntime,g=(0,w.jsx)(h.SVG,{viewBox:"0 0 24 24",xmlns:"http://www.w3.org/2000/svg",children:(0,w.jsx)(h.Path,{d:"M17 10h-1.2V7c0-2.1-1.7-3.8-3.8-3.8-2.1 0-3.8 1.7-3.8 3.8v3H7c-.6 0-1 .4-1 1v8c0 .6.4 1 1 1h10c.6 0 1-.4 1-1v-8c0-.6-.4-1-1-1zm-2.8 0H9.8V7c0-1.2 1-2.2 2.2-2.2s2.2 1 2.2 2.2v3z"})}),R=window.wp.compose,b=window.wp.hooks,E=(0,R.createHigherOrderComponent)(e=>r=>{const{clientId:l,name:s}=r;if("passster/content-lock"===s)return React.createElement(e,r);const{replaceBlocks:i}=(0,o.useDispatch)(c.store),{shouldRender:p,selectedBlocks:d,selectedClientIds:u}=(0,o.useSelect)(e=>{const{getSelectedBlockClientId:t,getBlocksByClientId:o,hasMultiSelection:n,getMultiSelectedBlockClientIds:r}=e(c.store),a=r(),s=t(),i=a.length>0?a:s?[s]:[];if(0===i.length)return{shouldRender:!1};if(!(n()?i[0]===l:s===l))return{shouldRender:!1};const p=o(i).filter(Boolean);return p.some(e=>"passster/content-lock"===e?.name)?{shouldRender:!1}:{shouldRender:!0,selectedBlocks:p,selectedClientIds:i}},[l]);return p?React.createElement(React.Fragment,null,React.createElement(e,r),React.createElement(c.BlockControls,null,React.createElement(a.ToolbarGroup,null,React.createElement(a.ToolbarButton,{icon:g,label:(0,n.__)("Lock with Passster","content-protector"),onClick:()=>{if(!d||0===d.length)return;const e=d.map(e=>(0,t.createBlock)(e.name,e.attributes,e.innerBlocks)),o=(0,t.createBlock)("passster/content-lock",{},e);i(u,o)}})))):React.createElement(e,r)},"withLockToolbar");(0,b.removeFilter)("editor.BlockEdit","passster/lock-toolbar",E),(0,b.addFilter)("editor.BlockEdit","passster/lock-toolbar",E),(0,t.registerBlockType)(m.UU,{edit:function({attributes:e,setAttributes:t,clientId:s}){const{blockId:m,protectionType:_,password:h,passwords:w,passwordList:g,areaTitle:R,userRestriction:b,userRestrictionType:E,userRestrictionValue:f,overwriteDefaults:k,headline:v,instruction:y,placeholder:C,buttonLabel:B,formId:x,advancedOptions:T,redirectUrl:P,hideForm:S,scheduleEnabled:I,scheduleStart:O,scheduleEnd:U}=e,[M,L]=(0,r.useState)([]),[N,A]=(0,r.useState)(()=>{const e=window.passster_block_data?.now;return e?new Date(e):new Date}),F=window.passster_block_data?.is_pro||!1;(0,r.useEffect)(()=>{const e=setInterval(()=>{A(e=>new Date(e.getTime()+1e3))},1e3);return()=>clearInterval(e)},[]),(0,r.useEffect)(()=>{F&&i()({path:"/passster/v1/user-roles"}).then(e=>{const t=[{label:(0,n.__)("No Role","content-protector"),value:"no-role"}];for(const o in e)t.push({label:e[o].name,value:o});L(t)})},[F]),(0,r.useEffect)(()=>{const e="ps-"+s.replace(/-/g,"").substr(0,9);m!==e&&t({blockId:e})},[s,m,t]),(0,o.useSelect)(e=>{const{getBlock:t}=e(c.store),o=t(s);return!(!o||!o.innerBlocks.length)},[s]);const{records:D,isResolving:V}=(0,l.useEntityRecords)("postType","password_lists",{per_page:-1,status:"publish"}),$=(0,r.useCallback)(()=>{const e=function(){const e="ABCDEFGHIJKLMNOPQRSTUVWXYZ",t="0123456789",o="!@#$%^&*_+-=",n="abcdefghijklmnopqrstuvwxyz"+e+t+o;let r="";r+=e.charAt(Math.floor(26*Math.random())),r+=e.charAt(Math.floor(26*Math.random())),r+=t.charAt(Math.floor(10*Math.random())),r+=t.charAt(Math.floor(10*Math.random())),r+=o.charAt(Math.floor(12*Math.random()));for(let e=r.length;e<16;e++)r+=n.charAt(Math.floor(Math.random()*n.length));return r.split("").sort(()=>Math.random()-.5).join("")}();t({password:e})},[t]),z=function(e){if(!e)return{score:0,label:(0,n.__)("Empty","content-protector"),color:"#ccc"};let t=0;e.length>=8&&t++,e.length>=12&&t++,/[A-Z]/.test(e)&&/[a-z]/.test(e)&&t++,/\d/.test(e)&&t++,/[^A-Za-z0-9]/.test(e)&&t++;const o=[{label:(0,n.__)("Very Weak","content-protector"),color:"#d63638"},{label:(0,n.__)("Weak","content-protector"),color:"#f0b849"},{label:(0,n.__)("Fair","content-protector"),color:"#f0b849"},{label:(0,n.__)("Strong","content-protector"),color:"#00a32a"},{label:(0,n.__)("Very Strong","content-protector"),color:"#00a32a"}][Math.min(t,4)];return{score:t,label:o.label,color:o.color}}(h),j=(0,c.useBlockProps)({className:"passster-protected-content-editor"}),q=(0,o.useSelect)(e=>{const{getBlockTypes:t}=e("core/blocks");return t().map(e=>e.name).filter(e=>!d.includes(e))},[]),H=(0,c.useInnerBlocksProps)({className:"passster-protected-content__inner"},{allowedBlocks:q,template:u,templateLock:!1}),G=[{label:(0,n.__)("Single Password","content-protector"),value:"password"},{label:(0,n.__)("Multiple Passwords","content-protector"),value:"passwords"},{label:(0,n.__)("Password List","content-protector"),value:"password_list"}];return React.createElement(React.Fragment,null,React.createElement(c.InspectorControls,null,React.createElement(a.PanelBody,{title:(0,n.__)("Protection Settings","content-protector"),initialOpen:!0},React.createElement(a.TextControl,{label:(0,n.__)("Area Title","content-protector"),help:(0,n.__)("Name shown in Protected Areas list","content-protector"),value:R||"",onChange:e=>t({areaTitle:e})}),React.createElement(a.SelectControl,{label:(0,n.__)("Protection Type","content-protector"),value:_,options:G,onChange:e=>t({protectionType:e})}),"password"===_&&React.createElement("div",{className:"passster-password-field"},React.createElement(a.TextControl,{label:(0,n.__)("Password","content-protector"),value:h||"",onChange:e=>t({password:e})}),h&&React.createElement("div",{className:"passster-strength-meter",style:{marginTop:"-8px",marginBottom:"16px"}},React.createElement("div",{style:{height:"4px",borderRadius:"2px",background:"#ddd",overflow:"hidden"}},React.createElement("div",{style:{width:z.score/5*100+"%",height:"100%",background:z.color,transition:"width 0.2s, background 0.2s"}})),React.createElement(a.__experimentalText,{variant:"muted",style:{fontSize:"12px",color:z.color}},z.label)),React.createElement(a.Button,{variant:"secondary",onClick:$},(0,n.__)("Generate Password","content-protector"))),"passwords"===_&&React.createElement(a.TextareaControl,{label:(0,n.__)("Passwords","content-protector"),help:(0,n.__)("Enter one password per line","content-protector"),value:w||"",onChange:e=>t({passwords:e}),rows:4}),"password_list"===_&&React.createElement(p,{value:g,onChange:e=>t({passwordList:e}),passwordLists:D||[],isLoading:V})),F?React.createElement(a.PanelBody,{title:(0,n.__)("User Restriction","content-protector"),initialOpen:!1},React.createElement(a.ToggleControl,{label:(0,n.__)("Enable User Restriction","content-protector"),help:(0,n.__)("Require users to be logged in with a specific username or role.","content-protector"),checked:b,onChange:e=>t({userRestriction:e})}),b&&React.createElement(React.Fragment,null,React.createElement(a.SelectControl,{label:(0,n.__)("Restriction Type","content-protector"),value:E,options:[{label:(0,n.__)("Username","content-protector"),value:"username"},{label:(0,n.__)("User Role","content-protector"),value:"user-role"}],onChange:e=>t({userRestrictionType:e})}),"user-role"===E?React.createElement(a.SelectControl,{label:(0,n.__)("User Role","content-protector"),value:f,options:M,onChange:e=>t({userRestrictionValue:e})}):React.createElement(a.TextControl,{label:(0,n.__)("Username","content-protector"),placeholder:"user_a",value:f,onChange:e=>t({userRestrictionValue:e})}))):React.createElement(a.PanelBody,{title:(0,n.__)("User Restriction","content-protector"),initialOpen:!1},React.createElement("div",{className:"passster-pro-upsell-panel"},React.createElement("p",null,(0,n.__)("Require users to be logged in with a specific username or role to access content.","content-protector")),React.createElement(a.Button,{href:"https://passster.com/#pricing",target:"_blank",variant:"secondary"},(0,n.__)("Upgrade to PRO","content-protector")," →"))),React.createElement(a.PanelBody,{title:(0,n.__)("Override Defaults","content-protector"),initialOpen:!1},React.createElement(a.ToggleControl,{label:(0,n.__)("Override Default Labels","content-protector"),checked:k,onChange:e=>t({overwriteDefaults:e})}),k&&React.createElement(React.Fragment,null,React.createElement(a.TextControl,{label:(0,n.__)("Headline","content-protector"),placeholder:(0,n.__)("Protected Area","content-protector"),help:(0,n.__)("The headline of your password-protection form.","content-protector"),value:v,onChange:e=>t({headline:e})}),React.createElement(a.TextareaControl,{label:(0,n.__)("Instruction","content-protector"),placeholder:(0,n.__)("This content is password-protected. Please verify with a password to unlock the content.","content-protector"),help:(0,n.__)("Text that appears before the password input field.","content-protector"),value:y,onChange:e=>t({instruction:e}),rows:3}),React.createElement(a.TextControl,{label:(0,n.__)("Placeholder","content-protector"),placeholder:(0,n.__)("Enter your password..","content-protector"),help:(0,n.__)("Placeholder text of the password field.","content-protector"),value:C,onChange:e=>t({placeholder:e})}),React.createElement(a.TextControl,{label:(0,n.__)("Button Label","content-protector"),placeholder:(0,n.__)("Unlock","content-protector"),help:(0,n.__)("Text on the submit button.","content-protector"),value:B,onChange:e=>t({buttonLabel:e})}),React.createElement(a.TextControl,{label:(0,n.__)("Unique ID","content-protector"),placeholder:"my-custom-id",help:(0,n.__)("Give your password form a unique ID.","content-protector"),value:x,onChange:e=>t({formId:e})}))),React.createElement(a.PanelBody,{title:(0,n.__)("Advanced Options","content-protector"),initialOpen:!1},React.createElement(a.ToggleControl,{label:(0,n.__)("Enable Advanced Options","content-protector"),help:(0,n.__)("Redirect after unlock or hide the password form.","content-protector"),checked:T,onChange:e=>t({advancedOptions:e})}),T&&React.createElement(React.Fragment,null,React.createElement(a.TextControl,{label:(0,n.__)("Redirect URL","content-protector"),placeholder:"https://your-url.com",type:"url",help:(0,n.__)("After entering the correct password, redirect to this URL instead of showing the content.","content-protector"),value:P,onChange:e=>t({redirectUrl:e})}),React.createElement(a.ToggleControl,{label:(0,n.__)("Hide Password Form","content-protector"),help:(0,n.__)("Skip the form and show content directly. Useful when access is controlled by cookies or unlock links.","content-protector"),checked:S,onChange:e=>t({hideForm:e})}))),F?React.createElement(a.PanelBody,{title:(0,n.__)("Schedule Protection","content-protector"),initialOpen:!1},React.createElement(a.ToggleControl,{label:(0,n.__)("Enable Scheduled Protection","content-protector"),help:(0,n.__)("Only protect content during a specific time period.","content-protector"),checked:I,onChange:e=>t({scheduleEnabled:e})}),I&&React.createElement(React.Fragment,null,React.createElement("p",{style:{fontWeight:"500",marginBottom:"8px"}},(0,n.__)("Start","content-protector")),React.createElement("div",{style:{display:"flex",gap:"8px",marginBottom:"16px"}},React.createElement("input",{type:"date",value:O?O.slice(0,10):"",onChange:e=>{const o=e.target.value,n=O?O.slice(11,16):"00:00";t({scheduleStart:o?`${o}T${n}:00`:""})},style:{flex:1,padding:"6px 8px"}}),React.createElement("input",{type:"time",value:O?O.slice(11,16):"",onChange:e=>{const o=e.target.value,n=O?O.slice(0,10):(new Date).toISOString().slice(0,10);t({scheduleStart:`${n}T${o}:00`})},style:{width:"100px",padding:"6px 8px"}})),React.createElement("p",{style:{fontWeight:"500",marginBottom:"8px"}},(0,n.__)("End","content-protector")),React.createElement("div",{style:{display:"flex",gap:"8px",marginBottom:"8px"}},React.createElement("input",{type:"date",value:U?U.slice(0,10):"",onChange:e=>{const o=e.target.value,n=U?U.slice(11,16):"23:59";t({scheduleEnd:o?`${o}T${n}:00`:""})},style:{flex:1,padding:"6px 8px"}}),React.createElement("input",{type:"time",value:U?U.slice(11,16):"",onChange:e=>{const o=e.target.value,n=U?U.slice(0,10):(new Date).toISOString().slice(0,10);t({scheduleEnd:`${n}T${o}:00`})},style:{width:"100px",padding:"6px 8px"}})),React.createElement("p",{style:{fontSize:"12px",color:"#757575",margin:"12px 0 0",padding:"8px",background:"#f0f0f1",borderRadius:"2px"}},(0,n.__)("Timezone:","content-protector")," ",React.createElement("strong",null,window.passster_block_data?.timezone||"UTC"),React.createElement("br",null),(0,n.__)("Now:","content-protector")," ",React.createElement("strong",{style:{fontFamily:"monospace"}},N.toLocaleString())))):React.createElement(a.PanelBody,{title:(0,n.__)("Schedule Protection","content-protector"),initialOpen:!1},React.createElement("div",{className:"passster-pro-upsell-panel"},React.createElement("p",null,(0,n.__)("Protect content only during a specific time period.","content-protector")),React.createElement(a.Button,{href:"https://passster.com/#pricing",target:"_blank",variant:"secondary"},(0,n.__)("Upgrade to PRO","content-protector")," →")))),React.createElement("div",j,React.createElement("div",{className:"passster-protected-content__header"},React.createElement("span",{className:"passster-protected-content__label"},R||(0,n.__)("Passster Protected Area","content-protector")),React.createElement("span",{className:"passster-protected-content__type"},"password"===_&&h&&React.createElement("code",null,h),"passwords"===_&&React.createElement("code",null,(0,n.__)("Multiple passwords","content-protector")),"password_list"===_&&React.createElement("code",null,(0,n.__)("Password list","content-protector")),"password"===_&&!h&&React.createElement("span",{className:"passster-protected-content__warning"},(0,n.__)("No password","content-protector")))),React.createElement("div",H)))},save:function(){const e=c.useBlockProps.save({className:"passster-protected-content"});return React.createElement("div",e,React.createElement(c.InnerBlocks.Content,null))},transforms:_});const f=new URLSearchParams(window.location.search).get("passster_focus_block");if(f){function k(e,t){for(const o of e){if(o.attributes?.blockId===t)return o;if(o.innerBlocks?.length){const e=k(o.innerBlocks,t);if(e)return e}}return null}const v=(0,o.subscribe)(()=>{const e=(0,o.select)("core/block-editor").getBlocks();if(!e?.length)return;const t=k(e,f);t&&(v(),setTimeout(()=>{(0,o.dispatch)("core/block-editor").selectBlock(t.clientId);const e=document.querySelector(`[data-block="${t.clientId}"]`);e&&e.scrollIntoView({behavior:"smooth",block:"center"})},200))})}})(); |
|
1
|
+(()=>{"use strict";var e={n:t=>{var o=t&&t.__esModule?()=>t.default:()=>t;return e.d(o,{a:o}),o},d:(t,o)=>{for(var n in o)e.o(o,n)&&!e.o(t,n)&&Object.defineProperty(t,n,{enumerable:!0,get:o[n]})},o:(e,t)=>Object.prototype.hasOwnProperty.call(e,t)};const t=window.wp.blocks,o=window.wp.data,n=window.wp.i18n,r=window.wp.element,c=window.wp.blockEditor,a=window.wp.components,l=window.wp.coreData,s=window.wp.apiFetch;var i=e.n(s);function p({value:e,onChange:t,passwordLists:o,isLoading:r}){if(r)return React.createElement("div",{className:"passster-password-list-selector"},React.createElement(a.Spinner,null),React.createElement("span",null,(0,n.__)("Loading password lists...","content-protector")));const c=[{label:(0,n.__)("— Select a password list —","content-protector"),value:0},...o.map(e=>({label:e.title.rendered,value:e.id}))];return React.createElement(a.SelectControl,{label:(0,n.__)("Password List","content-protector"),value:e,options:c,onChange:e=>t(parseInt(e,10)),help:0===o.length?(0,n.__)("No password lists found. Create one first.","content-protector"):""})}const d=["passster/content-lock"],u=[["core/paragraph",{placeholder:(0,n.__)("Add content to protect...","content-protector")}]],m=JSON.parse('{"UU":"passster/content-lock"}'),_={from:[{type:"block",isMultiBlock:!0,blocks:["*"],__experimentalConvert(e){const o=e.map(e=>(0,t.createBlock)(e.name,e.attributes,e.innerBlocks));return(0,t.createBlock)("passster/content-lock",{},o)}}],to:[{type:"block",blocks:["*"],transform:(e,o)=>o.map(e=>(0,t.createBlock)(e.name,e.attributes,e.innerBlocks))}]},h=window.wp.primitives,g=window.ReactJSXRuntime,w=(0,g.jsx)(h.SVG,{viewBox:"0 0 24 24",xmlns:"http://www.w3.org/2000/svg",children:(0,g.jsx)(h.Path,{d:"M17 10h-1.2V7c0-2.1-1.7-3.8-3.8-3.8-2.1 0-3.8 1.7-3.8 3.8v3H7c-.6 0-1 .4-1 1v8c0 .6.4 1 1 1h10c.6 0 1-.4 1-1v-8c0-.6-.4-1-1-1zm-2.8 0H9.8V7c0-1.2 1-2.2 2.2-2.2s2.2 1 2.2 2.2v3z"})}),R=window.wp.compose,b=window.wp.hooks,E=(0,R.createHigherOrderComponent)(e=>r=>{const{clientId:l,name:s}=r;if("passster/content-lock"===s)return React.createElement(e,r);const{replaceBlocks:i}=(0,o.useDispatch)(c.store);return(0,o.useSelect)(e=>{const{getSelectedBlockClientId:t,getBlockName:o,hasMultiSelection:n,getMultiSelectedBlockClientIds:r}=e(c.store),a=n();return!!(a?r()[0]===l:t()===l)&&(a?!r().some(e=>"passster/content-lock"===o(e)):"passster/content-lock"!==o(l))},[l])?React.createElement(React.Fragment,null,React.createElement(e,r),React.createElement(c.BlockControls,null,React.createElement(a.ToolbarGroup,null,React.createElement(a.ToolbarButton,{icon:w,label:(0,n.__)("Lock with Passster","content-protector"),onClick:()=>{const{getSelectedBlockClientId:e,getBlocksByClientId:n,hasMultiSelection:r,getMultiSelectedBlockClientIds:a}=(0,o.select)(c.store),l=a(),s=e(),p=r()?l:s?[s]:[];if(0===p.length)return;const d=n(p).filter(Boolean);if(0===d.length)return;const u=d.map(e=>(0,t.createBlock)(e.name,e.attributes,e.innerBlocks)),m=(0,t.createBlock)("passster/content-lock",{},u);i(p,m)}})))):React.createElement(e,r)},"withLockToolbar");(0,b.removeFilter)("editor.BlockEdit","passster/lock-toolbar",E),(0,b.addFilter)("editor.BlockEdit","passster/lock-toolbar",E),(0,t.registerBlockType)(m.UU,{edit:function({attributes:e,setAttributes:t,clientId:s}){const{blockId:m,protectionType:_,password:h,passwords:g,passwordList:w,areaTitle:R,userRestriction:b,userRestrictionType:E,userRestrictionValue:k,overwriteDefaults:f,headline:v,instruction:y,placeholder:C,buttonLabel:B,formId:x,advancedOptions:T,redirectUrl:S,hideForm:P,scheduleEnabled:I,scheduleStart:M,scheduleEnd:O}=e,[U,L]=(0,r.useState)([]),[N,A]=(0,r.useState)(()=>{const e=window.passster_block_data?.now;return e?new Date(e):new Date}),F=window.passster_block_data?.is_pro||!1;(0,r.useEffect)(()=>{const e=setInterval(()=>{A(e=>new Date(e.getTime()+1e3))},1e3);return()=>clearInterval(e)},[]),(0,r.useEffect)(()=>{F&&i()({path:"/passster/v1/user-roles"}).then(e=>{const t=[{label:(0,n.__)("No Role","content-protector"),value:"no-role"}];for(const o in e)t.push({label:e[o].name,value:o});L(t)})},[F]),(0,r.useEffect)(()=>{const e="ps-"+s.replace(/-/g,"").substr(0,9);m!==e&&t({blockId:e})},[s,m,t]),(0,o.useSelect)(e=>{const{getBlock:t}=e(c.store),o=t(s);return!(!o||!o.innerBlocks.length)},[s]);const{records:D,isResolving:V}=(0,l.useEntityRecords)("postType","password_lists",{per_page:-1,status:"publish"}),$=(0,r.useCallback)(()=>{const e=function(){const e="ABCDEFGHIJKLMNOPQRSTUVWXYZ",t="0123456789",o="!@#$%^&*_+-=",n="abcdefghijklmnopqrstuvwxyz"+e+t+o;let r="";r+=e.charAt(Math.floor(26*Math.random())),r+=e.charAt(Math.floor(26*Math.random())),r+=t.charAt(Math.floor(10*Math.random())),r+=t.charAt(Math.floor(10*Math.random())),r+=o.charAt(Math.floor(12*Math.random()));for(let e=r.length;e<16;e++)r+=n.charAt(Math.floor(Math.random()*n.length));return r.split("").sort(()=>Math.random()-.5).join("")}();t({password:e})},[t]),z=function(e){if(!e)return{score:0,label:(0,n.__)("Empty","content-protector"),color:"#ccc"};let t=0;e.length>=8&&t++,e.length>=12&&t++,/[A-Z]/.test(e)&&/[a-z]/.test(e)&&t++,/\d/.test(e)&&t++,/[^A-Za-z0-9]/.test(e)&&t++;const o=[{label:(0,n.__)("Very Weak","content-protector"),color:"#d63638"},{label:(0,n.__)("Weak","content-protector"),color:"#f0b849"},{label:(0,n.__)("Fair","content-protector"),color:"#f0b849"},{label:(0,n.__)("Strong","content-protector"),color:"#00a32a"},{label:(0,n.__)("Very Strong","content-protector"),color:"#00a32a"}][Math.min(t,4)];return{score:t,label:o.label,color:o.color}}(h),j=(0,c.useBlockProps)({className:"passster-protected-content-editor"}),q=(0,o.useSelect)(e=>{const{getBlockTypes:t}=e("core/blocks");return t().map(e=>e.name).filter(e=>!d.includes(e))},[]),H=(0,c.useInnerBlocksProps)({className:"passster-protected-content__inner"},{allowedBlocks:q,template:u,templateLock:!1}),G=[{label:(0,n.__)("Single Password","content-protector"),value:"password"},{label:(0,n.__)("Multiple Passwords","content-protector"),value:"passwords"},{label:(0,n.__)("Password List","content-protector"),value:"password_list"}];return React.createElement(React.Fragment,null,React.createElement(c.InspectorControls,null,React.createElement(a.PanelBody,{title:(0,n.__)("Protection Settings","content-protector"),initialOpen:!0},React.createElement(a.TextControl,{label:(0,n.__)("Area Title","content-protector"),help:(0,n.__)("Name shown in Protected Areas list","content-protector"),value:R||"",onChange:e=>t({areaTitle:e})}),React.createElement(a.SelectControl,{label:(0,n.__)("Protection Type","content-protector"),value:_,options:G,onChange:e=>t({protectionType:e})}),"password"===_&&React.createElement("div",{className:"passster-password-field"},React.createElement(a.TextControl,{label:(0,n.__)("Password","content-protector"),value:h||"",onChange:e=>t({password:e})}),h&&React.createElement("div",{className:"passster-strength-meter",style:{marginTop:"-8px",marginBottom:"16px"}},React.createElement("div",{style:{height:"4px",borderRadius:"2px",background:"#ddd",overflow:"hidden"}},React.createElement("div",{style:{width:z.score/5*100+"%",height:"100%",background:z.color,transition:"width 0.2s, background 0.2s"}})),React.createElement(a.__experimentalText,{variant:"muted",style:{fontSize:"12px",color:z.color}},z.label)),React.createElement(a.Button,{variant:"secondary",onClick:$},(0,n.__)("Generate Password","content-protector"))),"passwords"===_&&React.createElement(a.TextareaControl,{label:(0,n.__)("Passwords","content-protector"),help:(0,n.__)("Enter one password per line","content-protector"),value:g||"",onChange:e=>t({passwords:e}),rows:4}),"password_list"===_&&React.createElement(p,{value:w,onChange:e=>t({passwordList:e}),passwordLists:D||[],isLoading:V})),F?React.createElement(a.PanelBody,{title:(0,n.__)("User Restriction","content-protector"),initialOpen:!1},React.createElement(a.ToggleControl,{label:(0,n.__)("Enable User Restriction","content-protector"),help:(0,n.__)("Require users to be logged in with a specific username or role.","content-protector"),checked:b,onChange:e=>t({userRestriction:e})}),b&&React.createElement(React.Fragment,null,React.createElement(a.SelectControl,{label:(0,n.__)("Restriction Type","content-protector"),value:E,options:[{label:(0,n.__)("Username","content-protector"),value:"username"},{label:(0,n.__)("User Role","content-protector"),value:"user-role"}],onChange:e=>t({userRestrictionType:e})}),"user-role"===E?React.createElement(a.SelectControl,{label:(0,n.__)("User Role","content-protector"),value:k,options:U,onChange:e=>t({userRestrictionValue:e})}):React.createElement(a.TextControl,{label:(0,n.__)("Username","content-protector"),placeholder:"user_a",value:k,onChange:e=>t({userRestrictionValue:e})}))):React.createElement(a.PanelBody,{title:(0,n.__)("User Restriction","content-protector"),initialOpen:!1},React.createElement("div",{className:"passster-pro-upsell-panel"},React.createElement("p",null,(0,n.__)("Require users to be logged in with a specific username or role to access content.","content-protector")),React.createElement(a.Button,{href:"https://passster.com/#pricing",target:"_blank",variant:"secondary"},(0,n.__)("Upgrade to PRO","content-protector")," →"))),React.createElement(a.PanelBody,{title:(0,n.__)("Override Defaults","content-protector"),initialOpen:!1},React.createElement(a.ToggleControl,{label:(0,n.__)("Override Default Labels","content-protector"),checked:f,onChange:e=>t({overwriteDefaults:e})}),f&&React.createElement(React.Fragment,null,React.createElement(a.TextControl,{label:(0,n.__)("Headline","content-protector"),placeholder:(0,n.__)("Protected Area","content-protector"),help:(0,n.__)("The headline of your password-protection form.","content-protector"),value:v,onChange:e=>t({headline:e})}),React.createElement(a.TextareaControl,{label:(0,n.__)("Instruction","content-protector"),placeholder:(0,n.__)("This content is password-protected. Please verify with a password to unlock the content.","content-protector"),help:(0,n.__)("Text that appears before the password input field.","content-protector"),value:y,onChange:e=>t({instruction:e}),rows:3}),React.createElement(a.TextControl,{label:(0,n.__)("Placeholder","content-protector"),placeholder:(0,n.__)("Enter your password..","content-protector"),help:(0,n.__)("Placeholder text of the password field.","content-protector"),value:C,onChange:e=>t({placeholder:e})}),React.createElement(a.TextControl,{label:(0,n.__)("Button Label","content-protector"),placeholder:(0,n.__)("Unlock","content-protector"),help:(0,n.__)("Text on the submit button.","content-protector"),value:B,onChange:e=>t({buttonLabel:e})}),React.createElement(a.TextControl,{label:(0,n.__)("Unique ID","content-protector"),placeholder:"my-custom-id",help:(0,n.__)("Give your password form a unique ID.","content-protector"),value:x,onChange:e=>t({formId:e})}))),React.createElement(a.PanelBody,{title:(0,n.__)("Advanced Options","content-protector"),initialOpen:!1},React.createElement(a.ToggleControl,{label:(0,n.__)("Enable Advanced Options","content-protector"),help:(0,n.__)("Redirect after unlock or hide the password form.","content-protector"),checked:T,onChange:e=>t({advancedOptions:e})}),T&&React.createElement(React.Fragment,null,React.createElement(a.TextControl,{label:(0,n.__)("Redirect URL","content-protector"),placeholder:"https://your-url.com",type:"url",help:(0,n.__)("After entering the correct password, redirect to this URL instead of showing the content.","content-protector"),value:S,onChange:e=>t({redirectUrl:e})}),React.createElement(a.ToggleControl,{label:(0,n.__)("Hide Password Form","content-protector"),help:(0,n.__)("Skip the form and show content directly. Useful when access is controlled by cookies or unlock links.","content-protector"),checked:P,onChange:e=>t({hideForm:e})}))),F?React.createElement(a.PanelBody,{title:(0,n.__)("Schedule Protection","content-protector"),initialOpen:!1},React.createElement(a.ToggleControl,{label:(0,n.__)("Enable Scheduled Protection","content-protector"),help:(0,n.__)("Only protect content during a specific time period.","content-protector"),checked:I,onChange:e=>t({scheduleEnabled:e})}),I&&React.createElement(React.Fragment,null,React.createElement("p",{style:{fontWeight:"500",marginBottom:"8px"}},(0,n.__)("Start","content-protector")),React.createElement("div",{style:{display:"flex",gap:"8px",marginBottom:"16px"}},React.createElement("input",{type:"date",value:M?M.slice(0,10):"",onChange:e=>{const o=e.target.value,n=M?M.slice(11,16):"00:00";t({scheduleStart:o?`${o}T${n}:00`:""})},style:{flex:1,padding:"6px 8px"}}),React.createElement("input",{type:"time",value:M?M.slice(11,16):"",onChange:e=>{const o=e.target.value,n=M?M.slice(0,10):(new Date).toISOString().slice(0,10);t({scheduleStart:`${n}T${o}:00`})},style:{width:"100px",padding:"6px 8px"}})),React.createElement("p",{style:{fontWeight:"500",marginBottom:"8px"}},(0,n.__)("End","content-protector")),React.createElement("div",{style:{display:"flex",gap:"8px",marginBottom:"8px"}},React.createElement("input",{type:"date",value:O?O.slice(0,10):"",onChange:e=>{const o=e.target.value,n=O?O.slice(11,16):"23:59";t({scheduleEnd:o?`${o}T${n}:00`:""})},style:{flex:1,padding:"6px 8px"}}),React.createElement("input",{type:"time",value:O?O.slice(11,16):"",onChange:e=>{const o=e.target.value,n=O?O.slice(0,10):(new Date).toISOString().slice(0,10);t({scheduleEnd:`${n}T${o}:00`})},style:{width:"100px",padding:"6px 8px"}})),React.createElement("p",{style:{fontSize:"12px",color:"#757575",margin:"12px 0 0",padding:"8px",background:"#f0f0f1",borderRadius:"2px"}},(0,n.__)("Timezone:","content-protector")," ",React.createElement("strong",null,window.passster_block_data?.timezone||"UTC"),React.createElement("br",null),(0,n.__)("Now:","content-protector")," ",React.createElement("strong",{style:{fontFamily:"monospace"}},N.toLocaleString())))):React.createElement(a.PanelBody,{title:(0,n.__)("Schedule Protection","content-protector"),initialOpen:!1},React.createElement("div",{className:"passster-pro-upsell-panel"},React.createElement("p",null,(0,n.__)("Protect content only during a specific time period.","content-protector")),React.createElement(a.Button,{href:"https://passster.com/#pricing",target:"_blank",variant:"secondary"},(0,n.__)("Upgrade to PRO","content-protector")," →")))),React.createElement("div",j,React.createElement("div",{className:"passster-protected-content__header"},React.createElement("span",{className:"passster-protected-content__label"},R||(0,n.__)("Passster Protected Area","content-protector")),React.createElement("span",{className:"passster-protected-content__type"},"password"===_&&h&&React.createElement("code",null,h),"passwords"===_&&React.createElement("code",null,(0,n.__)("Multiple passwords","content-protector")),"password_list"===_&&React.createElement("code",null,(0,n.__)("Password list","content-protector")),"password"===_&&!h&&React.createElement("span",{className:"passster-protected-content__warning"},(0,n.__)("No password","content-protector")))),React.createElement("div",H)))},save:function(){const e=c.useBlockProps.save({className:"passster-protected-content"});return React.createElement("div",e,React.createElement(c.InnerBlocks.Content,null))},transforms:_});const k=new URLSearchParams(window.location.search).get("passster_focus_block");if(k){function f(e,t){for(const o of e){if(o.attributes?.blockId===t)return o;if(o.innerBlocks?.length){const e=f(o.innerBlocks,t);if(e)return e}}return null}const v=(0,o.subscribe)(()=>{const e=(0,o.select)("core/block-editor").getBlocks();if(!e?.length)return;const t=f(e,k);t&&(v(),setTimeout(()=>{(0,o.dispatch)("core/block-editor").selectBlock(t.clientId);const e=document.querySelector(`[data-block="${t.clientId}"]`);e&&e.scrollIntoView({behavior:"smooth",block:"center"})},200))})}})(); |