@tryghost/portal 2.55.0 → 2.55.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/umd/portal.min.js +2 -2
- package/umd/portal.min.js.map +1 -1
package/package.json
CHANGED
package/umd/portal.min.js
CHANGED
|
@@ -1698,7 +1698,7 @@ html[dir=rtl] .gh-portal-signup-terms .checkbox:before {
|
|
|
1698
1698
|
text-align: center;
|
|
1699
1699
|
margin-bottom: 30px;
|
|
1700
1700
|
}
|
|
1701
|
-
`,$t="otc";class vf extends Y.Component{constructor(t){super(t),this.state={[$t]:"",errors:{}}}getDescriptionConfig(t){const{t:a}=this.context;return{signin:{withOTC:a("An email has been sent to {submittedEmailOrInbox}. Click the link inside or enter your code below.",{submittedEmailOrInbox:t}),withoutOTC:a("A login link has been sent to your inbox. If it doesn't arrive in 3 minutes, be sure to check your spam folder.")},signup:a("To complete signup, click the confirmation link in your inbox. If it doesn't arrive within 3 minutes, check your spam folder!")}}getTranslatedDescription({lastPage:t,otcRef:a,submittedEmailOrInbox:n}){const i=this.getDescriptionConfig(n);return(t==="signup"||t==="signin"?t:"signin")==="signup"?i.signup:a?i.signin.withOTC:i.signin.withoutOTC}renderFormHeader(){const{t,otcRef:a,pageData:n,lastPage:i}=this.context,r=n!=null&&n.email?n.email:t("your inbox"),o=t("Now check your email!"),s=this.getTranslatedDescription({lastPage:i,otcRef:a,submittedEmailOrInbox:r});return u.jsxs("section",{className:"gh-portal-inbox-notification",children:[u.jsxs("header",{className:"gh-portal-header",children:[u.jsx(wj,{className:"gh-portal-icon gh-portal-icon-envelope"}),u.jsx("h2",{className:"gh-portal-main-title",children:o})]}),u.jsx("p",{children:s})]})}renderLoginMessage(){const{t}=this.context;return u.jsx(u.Fragment,{children:u.jsx("div",{style:{color:"#1d1d1d",fontWeight:"bold",cursor:"pointer"},onClick:()=>this.context.doAction("switchPage",{page:"signin"}),children:t("Back to Log in")})})}handleClose(){this.context.doAction("closePopup")}renderCloseButton(){const{t}=this.context,a=t("Close");return u.jsx(ie,{style:{width:"100%"},onClick:n=>this.handleClose(n),brandColor:this.context.brandColor,label:a})}handleSubmit(t){t.preventDefault();const{action:a}=this.context;a==="verifyOTC:running"||this.doVerifyOTC()}doVerifyOTC(){const{t,labs:a}=this.context,n=a!=null&&a.membersSigninOTCAlpha?t("Enter code above"):t("Enter code below");this.setState(i=>{const r=(i.otc||"").trim();return{errors:{[$t]:r?"":n}}},()=>{const{otc:i,errors:r}=this.state,{otcRef:o}=this.context,{redirect:s}=this.context.pageData??{};!(r&&Object.values(r).filter(c=>!!c).length>0)&&o&&this.context.doAction("verifyOTC",{otc:i,otcRef:o,redirect:s})})}handleInputChange(t,a){const n=a.name,i=t.target.value;if(n===$t){const r=i.replace(/[^0-9]/g,"");this.setState({[n]:r})}else this.setState({[n]:i})}renderOTCForm(){const{t,action:a,labs:n,otcRef:i}=this.context,r=this.state.errors||{};if(!(n!=null&&n.membersSigninOTC)||!i)return null;const o=a==="verifyOTC:running",s=a==="verifyOTC:failed";return u.jsxs("form",{onSubmit:l=>this.handleSubmit(l),children:[n!=null&&n.membersSigninOTCAlpha?u.jsxs("section",{className:"gh-portal-section gh-portal-otp",children:[u.jsx("div",{className:`gh-portal-otp-field-container ${r.otc?"error":""}`,children:u.jsx("input",{id:`input-${$t}`,className:`gh-portal-input ${r.otc?"error":""}`,name:$t,type:"text",value:this.state.otc,inputMode:"numeric",pattern:"[0-9]*","aria-label":t("Code"),
|
|
1701
|
+
`,$t="otc";class vf extends Y.Component{constructor(t){super(t),this.state={[$t]:"",errors:{}}}getDescriptionConfig(t){const{t:a}=this.context;return{signin:{withOTC:a("An email has been sent to {submittedEmailOrInbox}. Click the link inside or enter your code below.",{submittedEmailOrInbox:t}),withoutOTC:a("A login link has been sent to your inbox. If it doesn't arrive in 3 minutes, be sure to check your spam folder.")},signup:a("To complete signup, click the confirmation link in your inbox. If it doesn't arrive within 3 minutes, check your spam folder!")}}getTranslatedDescription({lastPage:t,otcRef:a,submittedEmailOrInbox:n}){const i=this.getDescriptionConfig(n);return(t==="signup"||t==="signin"?t:"signin")==="signup"?i.signup:a?i.signin.withOTC:i.signin.withoutOTC}renderFormHeader(){const{t,otcRef:a,pageData:n,lastPage:i}=this.context,r=n!=null&&n.email?n.email:t("your inbox"),o=t("Now check your email!"),s=this.getTranslatedDescription({lastPage:i,otcRef:a,submittedEmailOrInbox:r});return u.jsxs("section",{className:"gh-portal-inbox-notification",children:[u.jsxs("header",{className:"gh-portal-header",children:[u.jsx(wj,{className:"gh-portal-icon gh-portal-icon-envelope"}),u.jsx("h2",{className:"gh-portal-main-title",children:o})]}),u.jsx("p",{children:s})]})}renderLoginMessage(){const{t}=this.context;return u.jsx(u.Fragment,{children:u.jsx("div",{style:{color:"#1d1d1d",fontWeight:"bold",cursor:"pointer"},onClick:()=>this.context.doAction("switchPage",{page:"signin"}),children:t("Back to Log in")})})}handleClose(){this.context.doAction("closePopup")}renderCloseButton(){const{t}=this.context,a=t("Close");return u.jsx(ie,{style:{width:"100%"},onClick:n=>this.handleClose(n),brandColor:this.context.brandColor,label:a})}handleSubmit(t){t.preventDefault();const{action:a}=this.context;a==="verifyOTC:running"||this.doVerifyOTC()}doVerifyOTC(){const{t,labs:a}=this.context,n=a!=null&&a.membersSigninOTCAlpha?t("Enter code above"):t("Enter code below");this.setState(i=>{const r=(i.otc||"").trim();return{errors:{[$t]:r?"":n}}},()=>{const{otc:i,errors:r}=this.state,{otcRef:o}=this.context,{redirect:s}=this.context.pageData??{};!(r&&Object.values(r).filter(c=>!!c).length>0)&&o&&this.context.doAction("verifyOTC",{otc:i,otcRef:o,redirect:s})})}handleInputChange(t,a){const n=a.name,i=t.target.value;if(n===$t){const r=i.replace(/[^0-9]/g,"");this.setState({[n]:r})}else this.setState({[n]:i})}renderOTCForm(){const{t,action:a,labs:n,otcRef:i}=this.context,r=this.state.errors||{};if(!(n!=null&&n.membersSigninOTC)||!i)return null;const o=a==="verifyOTC:running",s=a==="verifyOTC:failed";return u.jsxs("form",{onSubmit:l=>this.handleSubmit(l),children:[n!=null&&n.membersSigninOTCAlpha?u.jsxs("section",{className:"gh-portal-section gh-portal-otp",children:[u.jsx("div",{className:`gh-portal-otp-field-container ${r.otc?"error":""}`,children:u.jsx("input",{id:`input-${$t}`,className:`gh-portal-input ${r.otc?"error":""}`,name:$t,type:"text",value:this.state.otc,inputMode:"numeric",maxLength:6,pattern:"[0-9]*",autoComplete:"one-time-code",autoCorrect:"off",autoCapitalize:"off",autoFocus:!0,"aria-label":t("Code"),onChange:l=>this.handleInputChange(l,{name:$t})})}),r.otc&&u.jsx("div",{className:"gh-portal-otp-error",children:r.otc})]}):u.jsx("section",{className:"gh-portal-section",children:u.jsx(gf,{id:`input-${$t}`,name:$t,type:"text",value:this.state.otc,placeholder:"• • • • • •",label:t("Code"),errorMessage:r.otc||"",autoFocus:!1,maxLength:6,onChange:l=>this.handleInputChange(l,{name:$t})})}),u.jsx("footer",{className:"gh-portal-signin-footer",children:u.jsx(ie,{style:{width:"100%"},onClick:l=>this.handleSubmit(l),brandColor:this.context.brandColor,label:t(o?"Verifying...":"Continue"),isRunning:o,retry:s,disabled:o})})]})}render(){const{labs:t,otcRef:a}=this.context,n=(t==null?void 0:t.membersSigninOTC)&&a;return u.jsxs("div",{className:"gh-portal-content",children:[u.jsx(oe,{}),this.renderFormHeader(),n?this.renderOTCForm():this.renderCloseButton()]})}}te(vf,"contextType",z);const Sj=`
|
|
1702
1702
|
.gh-portal-popupnotification {
|
|
1703
1703
|
right: 42px;
|
|
1704
1704
|
}
|
|
@@ -3489,5 +3489,5 @@ html[dir="rtl"] .gh-portal-list-toggle-wrapper .gh-portal-list-detail {
|
|
|
3489
3489
|
:root {
|
|
3490
3490
|
--brandcolor: ${this.context.brandColor}
|
|
3491
3491
|
}
|
|
3492
|
-
`+a;return u.jsxs(u.Fragment,{children:[u.jsx("style",{dangerouslySetInnerHTML:{__html:n}}),u.jsx("meta",{name:"viewport",content:"width=device-width, initial-scale=1, maximum-scale=1"})]})}renderFrameContainer(){const{member:t,site:a,customSiteUrl:n}=this.context,i=Af(),r=window.innerWidth<480,o={...i.frame.common};let s="gh-portal-popup-background";return J(["preview"])&&(i.modalContainer.zIndex="3999997"),J(["preview"],{customSiteUrl:n})&&!a.disableBackground&&(s+=" preview"),J(["dev"])&&(s+=" dev"),u.jsx("div",{style:i.modalContainer,children:u.jsxs(qu,{style:o,title:"portal-popup",head:this.renderFrameStyles(),dataTestId:"portal-popup-frame",dataDir:this.context.dir,children:[u.jsx("div",{className:s,onClick:l=>this.handlePopupClose(l)}),u.jsx(Df,{isMobile:r})]})})}render(){const{showPopup:t}=this.context;return t?this.renderFrameContainer():null}}te(Ff,"contextType",z),Xo({products:xc({numOfProducts:1})});function ge(){return(new Date().getTime()/1e3|0).toString(16)+"xxxxxxxxxxxxxxxx".replace(/[x]/g,function(){return(Math.random()*16|0).toString(16)}).toLowerCase()}function Xo({title:e="The Blueprint",description:t="Thoughts, stories and ideas.",logo:a="https://static.ghost.org/v4.0.0/images/ghost-orb-1.png",icon:n="https://static.ghost.org/v4.0.0/images/ghost-orb-1.png",url:i="https://portal.localhost",plans:r={monthly:5e3,yearly:15e4,currency:"USD"},products:o=xc({numOfProducts:1}),portalProducts:s=o.map(D=>D.id),accentColor:l="#45C32E",portalPlans:c=["free","monthly","yearly"],membersSignupAccess:d="all",freePriceName:p="Free",freePriceDescription:m="Free preview",isStripeConfigured:g=!0,portalButton:b=!0,portalName:v=!0,portalButtonIcon:f="icon-1",portalButtonSignupText:h="Subscribe now",portalButtonStyle:y="icon-and-text",membersSupportAddress:x="support@example.com",editorDefaultEmailRecipients:w="visibility",newsletters:C=[],posts:S=N$(),commentsEnabled:j,recommendations:T=[],recommendationsEnabled:E}={}){return{title:e,description:t,logo:a,icon:n,accent_color:l,url:i,plans:r,products:o,portal_products:s,members_signup_access:d,free_price_name:p,free_price_description:m,is_stripe_configured:g,portal_button:b,portal_name:v,portal_plans:c,portal_button_icon:f,portal_button_signup_text:h,portal_button_style:y,members_support_address:x,comments_enabled:j!=="off",newsletters:C,recommendations:T,recommendations_enabled:!!E,editor_default_email_recipients:w,posts:S}}function Mf({name:e="Black Friday",code:t="black-friday",displayTitle:a="Black Friday Sale!",displayDescription:n="Special deal for Black Friday. Subscribe now for only $15 per month and get additional benefits like accessing our podcast.",type:i="percent",cadence:r="month",amount:o=50,duration:s="repeating",durationInMonths:l=null,currencyRestriction:c=!1,currency:d=null,status:p="active",tierId:m="",tierName:g="Basic"}={}){return{id:`offer_${ge()}`,name:e,code:t,display_title:a,display_description:n,type:i,cadence:r,amount:o,duration:s,duration_in_months:l,currency_restriction:c,currency:d,status:p,tier:{id:`${m}`,name:g}}}function Ze({name:e="Jamie Larson",email:t="jamie@example.com",firstname:a="Jamie",subscriptions:n=[],paid:i=!1,avatarImage:r="",subscribed:o=!0,email_suppression:s={suppressed:!1,info:null},newsletters:l=[]}={}){return{uuid:`member_${ge()}`,email:t,name:e,firstname:a,paid:i,subscribed:o,avatar_image:r,subscriptions:n,email_suppression:s,newsletters:l}}function N$({numOfPosts:e=3}={}){const t=[];for(let a=0;a<e;a++)t.push(I$({title:`Post ${a+1}`,slug:`post-${a+1}`}));return t.slice(0,e)}function I$({id:e=`post_${ge()}`,title:t="Post",excerpt:a="Post excerpt",slug:n="post",featured:i=!1}={}){return{id:e,title:t,excerpt:a,slug:n,featured:i}}function xc({numOfProducts:e=3}={}){const a=[xn({name:"Bronze",description:"Access to all members articles",monthlyPrice:We({interval:"month",amount:700}),yearlyPrice:We({interval:"year",amount:7e3}),numOfBenefits:2}),xn({name:"Silver",description:"Access to all members articles and weekly podcast",monthlyPrice:We({interval:"month",amount:1200}),yearlyPrice:We({interval:"year",amount:12e3}),numOfBenefits:3}),xn({name:"Friends of the Blueprint",description:"Get access to everything and lock in early adopter pricing for life + listen to my podcast",monthlyPrice:We({interval:"month",amount:18e3}),yearlyPrice:We({interval:"year",amount:17e3}),numOfBenefits:4})].slice(0,e),n=_f({});return[...a,n]}function xn({type:e="paid",name:t="Basic",description:a="",id:n=`product_${ge()}`,monthlyPrice:i=We(),yearlyPrice:r=We({interval:"year"}),numOfBenefits:o=2,trialDays:s=null}){return{id:n,name:t,description:a,monthlyPrice:e==="free"?null:i,yearlyPrice:e==="free"?null:r,type:e,benefits:Yf({numOfBenefits:o}),trial_days:s}}function _f({name:e="Free tier",description:t="Free tier description",id:a=`product_${ge()}`,numOfBenefits:n=2}){return{id:a,name:e,type:"free",description:t,benefits:Yf({numOfBenefits:n})}}function Yf({numOfBenefits:e}){const t=ge();return[es({name:`Limited early adopter pricing #${t.substring(0,6)}`}),es({name:`Latest gear reviews #${t.substring(6,12)}`}),es({name:`Weekly email newsletter #${t.substring(12,18)}`}),es({name:`Listen to my podcast #${t.substring(18)}`})].slice(0,e)}function es({id:e=`benefit_${ge()}`,name:t="Benefit"}){return{id:e,name:t}}function We({interval:e="month",amount:t=e==="month"?500:5e3,nickname:a=e==="month"?"Monthly":"Yearly",description:n=null,currency:i="usd",active:r=!0,id:o=`price_${ge()}`}={}){return{id:o,active:r,nickname:a,currency:i,amount:t,interval:e,description:n,stripe_price_id:`price_${ge()}`,stripe_product_id:`prod_${ge()}`,type:"recurring"}}function Ea({id:e=`sub_${ge()}`,status:t="active",currency:a="USD",interval:n="year",amount:i=n==="month"?500:5e3,nickname:r=n==="month"?"Monthly":"Yearly",cardLast4:o="4242",offer:s=D$,priceId:l=`price_${ge()}`,startDate:c="2021-10-05T03:18:30.000Z",currentPeriodEnd:d="2022-10-05T03:18:30.000Z",cancelAtPeriodEnd:p=!1}={}){return{id:e,customer:{id:`cus_${ge()}`,name:"Jamie",email:"jamie@example.com"},plan:{id:`price_${ge()}`,nickname:r,amount:i,interval:n,currency:a},offer:s,status:t,start_date:c,default_payment_card_last4:o,cancel_at_period_end:p,cancellation_reason:null,current_period_end:d,price:{id:`stripe_price_${ge()}`,price_id:l,nickname:r,amount:i,interval:n,type:"recurring",currency:a,product:{id:`stripe_prod_${ge()}`,product_id:`prod_${ge()}`}}}}function Rf(){const e=xc({numOfProducts:1}),t=e.map(n=>n.id);return Xo({products:e,portalPlans:["free","monthly","yearly"],portalProducts:t})}Rf();const A$=Xo({products:[xn({numOfBenefits:2,type:"free"})]}),D$=Mf({tierId:(Vf=A$.products[0])==null?void 0:Vf.id});Ze(),Ze({paid:!0,subscriptions:[Ea()]}),Ze({paid:!0,subscriptions:[]}),Ze({paid:!0,subscriptions:[Ea({amount:0})]}),Ze({paid:!0,subscriptions:[Ea({amount:1500,startDate:"2019-05-01T11:42:40.000Z",currentPeriodEnd:"2021-06-05T11:42:40.000Z"})]}),Rf();const ts=[_f({name:"Free",description:"Free tier description which is actually a pretty long description",numOfBenefits:2}),xn({name:"The Blueprint",description:"",monthlyPrice:We({interval:"month",amount:500}),yearlyPrice:We({interval:"year",amount:5e3}),numOfBenefits:3}),xn({name:"Friends of the Blueprint Silver",description:"Access to all members articles and weekly podcast",monthlyPrice:We({interval:"month",amount:1200}),yearlyPrice:We({interval:"year",amount:11e3}),numOfBenefits:4})],Sn=Xo({title:"The Blueprint",description:"Thoughts, stories and ideas.",logo:"https://static.ghost.org/v4.0.0/images/ghost-orb-1.png",icon:"https://static.ghost.org/v4.0.0/images/ghost-orb-1.png",accentColor:"#45C32E",url:"https://portal.localhost",plans:{monthly:5e3,yearly:15e4,currency:"USD"},products:ts,portalProducts:ts.map(e=>e.id),membersSignupAccess:"all",freePriceName:"Free",freePriceDescription:"Free preview",isStripeConfigured:!0,portalButton:!0,portalName:!0,portalPlans:["free","monthly","yearly"],portalButtonIcon:"icon-1",portalButtonSignupText:"Subscribe now",portalButtonStyle:"icon-and-text",membersSupportAddress:"support@example.com",commentsEnabled:!0,newsletters:[{id:"weekly",name:"Weekly Rundown",description:"Best of last week",subscribe_on_signup:!0,paid:!0},{id:"daily",name:"Daily Brief",description:"One email every day",subscribe_on_signup:!1,paid:!1}],posts:[{id:"post_66aacfe061c94e10eb6e4fc1",title:"Post 1",excerpt:"Post excerpt",slug:"post-1",featured:!1},{id:"post_66aacfe04f14b8dbb56c5721",title:"Post 2",excerpt:"Post excerpt",slug:"post-2",featured:!1},{id:"post_66aacfe03d609460819af18c",title:"Post 3",excerpt:"Post excerpt",slug:"post-3",featured:!1}]}),Uf=Mf({tierId:(Hf=Sn.products[1])==null?void 0:Hf.id}),as={free:Ze({name:"Jamie Larson",email:"jamie@example.com",firstname:"Jamie",subscriptions:[],paid:!1,avatarImage:"",subscribed:!0}),paid:Ze({paid:!0,subscriptions:[Ea({status:"active",currency:"USD",interval:"year",amount:5e3,cardLast4:"4242",startDate:"2021-10-05T03:18:30.000Z",currentPeriodEnd:"2022-10-05T03:18:30.000Z",cancelAtPeriodEnd:!1})]}),complimentary:Ze({paid:!0,subscriptions:[]}),complimentaryWithSubscription:Ze({paid:!0,subscriptions:[Ea({amount:0})]}),preview:Ze({paid:!0,subscriptions:[Ea({amount:1500,startDate:"2019-05-01T11:42:40.000Z",currentPeriodEnd:"2021-06-05T11:42:40.000Z"})]})};function F$(){var a;if(!ts||!ts[1])return null;let e=(a=Sn==null?void 0:Sn.products)==null?void 0:a[1].monthlyPrice,t=Ze({paid:!0,subscriptions:[Ea({offer:null,priceId:e==null?void 0:e.id,status:"active",currency:e==null?void 0:e.currency,interval:e==null?void 0:e.interval,amount:e==null?void 0:e.amount,cardLast4:"4242",startDate:"2021-10-05T03:18:30.000Z",currentPeriodEnd:"2022-10-05T03:18:30.000Z",cancelAtPeriodEnd:!1})]});return{site:Sn,member:t}}function M$(e){const t=e.getAttribute("href"),a=new URL(t,window.location.origin);!a.hash||!a.hash.startsWith("#/portal")||t.startsWith("#/portal")||a.origin===window.location.origin&&e.setAttribute("href",a.hash)}function _$({data:e,state:t}){return{page:e.page,popupNotification:null,lastPage:e.lastPage||null,pageData:e.pageData||t.pageData}}function Y$({state:e}){return{showPopup:!e.showPopup}}function R$({data:e}){return{showPopup:!0,page:e.page,...e.pageQuery?{pageQuery:e.pageQuery}:{},...e.pageData?{pageData:e.pageData}:{}}}function U$({state:e}){return e.lastPage?{page:e.lastPage}:Lf({state:e})}function Lf({state:e}){return Xu(),{showPopup:!1,lastPage:null,pageQuery:"",popupNotification:null,page:e.page==="magiclink"?"":e.page}}function L$({data:e}){return{showNotification:!0,...e}}function O$(){return{showNotification:!1}}async function B$({api:e,state:t}){try{return await e.member.signout(),{action:"signout:success"}}catch{const{t:n}=t;return{action:"signout:failed",popupNotification:q({type:"signout:failed",autoHide:!1,closeable:!0,state:t,status:"error",message:n("Failed to log out, please try again")})}}}async function V$({data:e,api:t,state:a}){const{t:n,labs:i}=a,r=i!=null&&i.membersSigninOTC?!0:void 0;try{const o=await t.member.getIntegrityToken(),s={...e,emailType:"signin",integrityToken:o,...r?{includeOTC:!0}:{}},l=await t.member.sendMagicLink(s);return r&&(l!=null&&l.otc_ref)?{page:"magiclink",lastPage:"signin",otcRef:l.otc_ref,pageData:{...a.pageData||{},email:((e==null?void 0:e.email)||"").trim()}}:{page:"magiclink",lastPage:"signin",pageData:{...a.pageData||{},email:((e==null?void 0:e.email)||"").trim()}}}catch(o){return{action:"signin:failed",popupNotification:q({type:"signin:failed",autoHide:!1,closeable:!0,state:a,status:"error",message:Sa(o,n("Failed to log in, please try again"))})}}}function H$({data:e,state:t}){const a=((e==null?void 0:e.email)||"").trim(),n=e==null?void 0:e.otcRef;return n?{showPopup:!0,page:"magiclink",lastPage:"signin",otcRef:n,pageData:{...t.pageData||{},email:a},popupNotification:null}:{}}async function W$({data:e,api:t,state:a}){const{t:n}=a;try{const i=await t.member.getIntegrityToken(),r=await t.member.verifyOTC({...e,integrityToken:i});return r.redirectUrl?window.location.assign(r.redirectUrl):{action:"verifyOTC:failed",popupNotification:q({type:"verifyOTC:failed",autoHide:!1,closeable:!0,state:a,status:"error",message:r.message||n("Invalid verification code")})}}catch(i){return{action:"verifyOTC:failed",popupNotification:q({type:"verifyOTC:failed",autoHide:!1,closeable:!0,state:a,status:"error",message:Sa(i,n("Failed to verify code, please try again"))})}}}async function K$({data:e,state:t,api:a}){try{let{plan:n,tierId:i,cadence:r,email:o,name:s,newsletters:l,offerId:c}=e;if(n.toLowerCase()==="free"){const d=await a.member.getIntegrityToken();await a.member.sendMagicLink({emailType:"signup",integrityToken:d,...e})}else return i&&r?await a.member.checkoutPlan({plan:n,tierId:i,cadence:r,email:o,name:s,newsletters:l,offerId:c}):({tierId:i,cadence:r}=xa({site:t==null?void 0:t.site,priceId:n}),await a.member.checkoutPlan({plan:n,tierId:i,cadence:r,email:o,name:s,newsletters:l,offerId:c})),{page:"loading"};return{page:"magiclink",lastPage:"signup",pageData:{...t.pageData||{},email:(o||"").trim()}}}catch(n){const{t:i}=t,r=Sa(n,i("Failed to sign up, please try again"));return{action:"signup:failed",popupNotification:q({type:"signup:failed",autoHide:!1,closeable:!0,state:t,status:"error",message:r})}}}async function G$({data:e,state:t,api:a}){try{let{plan:n,offerId:i,tierId:r,cadence:o}=e;(!r||!o)&&({tierId:r,cadence:o}=xa({site:t==null?void 0:t.site,priceId:n})),await a.member.checkoutPlan({plan:n,tierId:r,cadence:o,offerId:i,metadata:{checkoutType:"upgrade"}})}catch{const{t:i}=t;return{action:"checkoutPlan:failed",popupNotification:q({type:"checkoutPlan:failed",autoHide:!1,closeable:!0,state:t,status:"error",message:i("Failed to process checkout, please try again")})}}}async function q$({data:e,state:t,api:a}){const{t:n}=t;try{const{plan:i,planId:r,subscriptionId:o,cancelAtPeriodEnd:s}=e,{tierId:l,cadence:c}=xa({site:t==null?void 0:t.site,priceId:r});await a.member.updateSubscription({planName:i,tierId:l,cadence:c,subscriptionId:o,cancelAtPeriodEnd:s,planId:r});const d=await a.member.sessionData(),p="updateSubscription:success";return{action:p,popupNotification:q({type:p,autoHide:!0,closeable:!0,state:t,status:"success",message:n("Subscription plan updated successfully")}),page:"accountHome",member:d}}catch{return{action:"updateSubscription:failed",popupNotification:q({type:"updateSubscription:failed",autoHide:!1,closeable:!0,state:t,status:"error",message:n("Failed to update subscription, please try again")})}}}async function J$({data:e,state:t,api:a}){try{const{subscriptionId:n,cancellationReason:i}=e;return await a.member.updateSubscription({subscriptionId:n,smartCancel:!0,cancellationReason:i}),{action:"cancelSubscription:success",page:"accountHome",member:await a.member.sessionData()}}catch{const{t:i}=t;return{action:"cancelSubscription:failed",popupNotification:q({type:"cancelSubscription:failed",autoHide:!1,closeable:!0,state:t,status:"error",message:i("Failed to cancel subscription, please try again")})}}}async function Z$({data:e,state:t,api:a}){try{const{subscriptionId:n}=e;return await a.member.updateSubscription({subscriptionId:n,cancelAtPeriodEnd:!1}),{action:"continueSubscription:success",page:"accountHome",member:await a.member.sessionData()}}catch{const{t:i}=t;return{action:"continueSubscription:failed",popupNotification:q({type:"continueSubscription:failed",autoHide:!1,closeable:!0,state:t,status:"error",message:i("Failed to cancel subscription, please try again")})}}}async function Q$({data:e,state:t,api:a}){try{await a.member.editBilling(e)}catch{const{t:i}=t;return{action:"editBilling:failed",popupNotification:q({type:"editBilling:failed",autoHide:!1,closeable:!0,state:t,status:"error",message:i("Failed to update billing information, please try again")})}}}async function X$(){return{popupNotification:null}}async function e0({data:e,state:t}){let{action:a,message:n=""}=e;return a=a||"showPopupNotification:success",{popupNotification:q({type:a,autoHide:!0,closeable:!0,state:t,status:"success",message:n})}}async function t0({data:e,state:t,api:a}){try{const{newsletters:n,enableCommentNotifications:i}=e;if(!n&&i===void 0)return{};const r={};return n&&(r.newsletters=n),i!==void 0&&(r.enableCommentNotifications=i),{action:"updateNewsletterPref:success",member:await a.member.update(r)}}catch{const{t:i}=t;return{action:"updateNewsletterPref:failed",popupNotification:q({type:"updateNewsletter:failed",autoHide:!0,closeable:!0,state:t,status:"error",message:i("Failed to update newsletter settings")})}}}async function a0({state:e,api:t}){const{t:a}=e;try{return await t.member.deleteSuppression(),{action:"removeEmailFromSuppressionList:success",popupNotification:q({type:"removeEmailFromSuppressionList:success",autoHide:!0,closeable:!0,state:e,status:"success",message:a("You have been successfully resubscribed")})}}catch{return{action:"removeEmailFromSuppressionList:failed",popupNotification:q({type:"removeEmailFromSuppressionList:failed",autoHide:!0,closeable:!0,state:e,status:"error",message:a("Your email has failed to resubscribe, please try again")})}}}async function n0({data:e,state:t,api:a}){const{t:n}=t;try{const{subscribed:i}=e,r=await a.member.update({subscribed:i});if(!r)throw new Error("Failed to update newsletter");const o="updateNewsletter:success";return{action:o,member:r,popupNotification:q({type:o,autoHide:!0,closeable:!0,state:t,status:"success",message:n("Email newsletter settings updated")})}}catch{return{action:"updateNewsletter:failed",popupNotification:q({type:"updateNewsletter:failed",autoHide:!0,closeable:!0,state:t,status:"error",message:n("Failed to update newsletter settings")})}}}async function i0({data:e,state:t,api:a}){const{email:n}=e,i=aC({member:t.member});if(n!==i)try{return await a.member.updateEmailAddress({email:n}),{success:!0}}catch(r){return{success:!1,error:r}}return null}async function r0({data:e,state:t,api:a}){const{name:n}=e;if(iC({member:t.member})!==n)try{const r=await a.member.update({name:n});if(!r)throw new Error("Failed to update member");return{member:r,success:!0}}catch(r){return{success:!1,error:r}}return null}async function o0({state:e,api:t}){if(e.member)try{const a=await t.member.sessionData();return a?{member:a,success:!0,action:"refreshMemberData:success"}:null}catch(a){return{success:!1,error:a,action:"refreshMemberData:failed"}}return null}async function s0({data:e,state:t,api:a}){const{t:n}=t,[i,r]=await Promise.all([r0({data:e,state:t,api:a}),i0({data:e,state:t,api:a})]);if(i&&r){if(r.success)return{action:"updateProfile:success",...i.success?{member:i.member}:{},page:"accountHome",popupNotification:q({type:"updateProfile:success",autoHide:!0,closeable:!0,status:"success",state:t,message:n("Check your inbox to verify email update")})};const o=i.success?n("Failed to send verification email"):n("Failed to update account data");return{action:"updateProfile:failed",...i.success?{member:i.member}:{},popupNotification:q({type:"updateProfile:failed",autoHide:!0,closeable:!0,status:"error",message:o,state:t})}}else if(i){const o=i.success?"updateProfile:success":"updateProfile:failed",s=i.success?"success":"error",l=i.success?n("Account details updated successfully"):n("Failed to update account details");return{action:o,...i.success?{member:i.member}:{},...i.success?{page:"accountHome"}:{},popupNotification:q({type:o,autoHide:i.success,closeable:!0,status:s,state:t,message:l})}}else if(r){const o=r.success?"updateProfile:success":"updateProfile:failed",s=r.success?"success":"error";let l="";return r.error?l=Sa(r.error,n("Failed to send verification email")):l=n("Check your inbox to verify email update"),{action:o,...r.success?{page:"accountHome"}:{},popupNotification:q({type:o,autoHide:r.success,closeable:!0,status:s,state:t,message:l})}}return{action:"updateProfile:success",page:"accountHome",popupNotification:q({type:"updateProfile:success",autoHide:!0,closeable:!0,status:"success",state:t,message:n("Account details updated successfully")})}}async function l0({data:{siteUrl:e},state:t}){const a=Qo({siteUrl:e,apiUrl:"not-defined"}),{member:n}=t,i=window.location.href,r=zg(),o=await a.member.getIntegrityToken();return await a.member.sendMagicLink({emailType:"signup",name:n.name,email:n.email,autoRedirect:!1,integrityToken:o,customUrlHistory:t.site.outbound_link_tagging?[{time:Date.now(),referrerSource:r,referrerMedium:"Ghost Recommendations",referrerUrl:i}]:[]}),{}}function u0({data:{recommendationId:e},api:t}){try{const a=localStorage.getItem("ghost-recommendations-clicked"),n=a?JSON.parse(a):[];if(n.includes(e))return;n.push(e),localStorage.setItem("ghost-recommendations-clicked",JSON.stringify(n))}catch{}return t.recommendations.trackClicked({recommendationId:e}),{}}async function c0({data:{recommendationId:e},api:t}){return t.recommendations.trackSubscribed({recommendationId:e}),{}}const d0={togglePopup:Y$,openPopup:R$,closePopup:Lf,switchPage:_$,openNotification:L$,closeNotification:O$,back:U$,signout:B$,signin:V$,startSigninOTCFromCustomForm:H$,verifyOTC:W$,signup:K$,updateSubscription:q$,cancelSubscription:J$,continueSubscription:Z$,updateNewsletter:n0,updateProfile:s0,refreshMemberData:o0,clearPopupNotification:X$,editBilling:Q$,checkoutPlan:G$,updateNewsletterPreference:t0,showPopupNotification:e0,removeEmailFromSuppressionList:a0,oneClickSubscribe:l0,trackRecommendationClicked:u0,trackRecommendationSubscribed:c0};async function m0({action:e,data:t,state:a,api:n}){const i=d0[e];return i?await i({data:t,state:a,api:n})||{}:{}}function Of(e,t){e&&(e.innerText=t)}function p0(e,t,a,n){t.classList.add("error");const i=n("There was an error sending the email, please try again");Of(a,Sa(e,i))}async function h0({event:e,form:t,errorEl:a,siteUrl:n,submitHandler:i,labs:r={},doAction:o,captureException:s},l=c=>c){var S,j;t.removeEventListener("submit",i),e.preventDefault(),a&&(a.innerText=""),t.classList.remove("success","invalid","error");let c=e.target.querySelector("input[data-members-email]"),d=e.target.querySelector("input[data-members-name]"),p=((S=t==null?void 0:t.dataset)==null?void 0:S.membersAutoredirect)||"true",m=c==null?void 0:c.value,g=d&&d.value||void 0,b,v=[],f=[],h=e.target.querySelectorAll("input[data-members-label]")||[];for(let T=0;T<h.length;++T)v.push(h[T].value);let y=e.target.querySelectorAll("input[type=hidden][data-members-newsletter], input[type=checkbox][data-members-newsletter]:checked, input[type=radio][data-members-newsletter]:checked")||[];for(let T=0;T<y.length;++T)f.push({name:y[T].value});t.dataset.membersForm&&(b=t.dataset.membersForm);const x=b==="signin"&&((j=t==null?void 0:t.dataset)==null?void 0:j.membersOtc)==="true"&&(r==null?void 0:r.membersSigninOTC);t.classList.add("loading");const w=Ui(),C={email:m,emailType:b,labels:v,name:g,autoRedirect:p==="true"};x&&(C.includeOTC=!0),w&&(C.urlHistory=w),y.length>0?C.newsletters=f:(e.target.querySelectorAll("input[type=checkbox][data-members-newsletter]")||[]).length>0&&(C.newsletters=[]);try{const E=await(await fetch(`${n}/members/api/integrity-token/`,{method:"GET"})).text(),D=await fetch(`${n}/members/api/send-magic-link/`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({...C,integrityToken:E})});if(t.addEventListener("submit",i),t.classList.remove("loading"),D.ok){t.classList.add("success");let L;if(x)try{L=await D.clone().json()}catch{L=void 0}const ee=L==null?void 0:L.otc_ref;if(ee&&typeof o=="function")try{o("startSigninOTCFromCustomForm",{email:(m||"").trim(),otcRef:ee})}catch(Z){console.error(Z),s==null||s(Z)}}else{const L=await Tt.fromApiResponse(D),ee=Sa(L,l("Failed to send magic link email"));Of(a,ee),t.classList.add("error")}}catch(T){p0(T,t,a,l)}}function g0({event:e,el:t,errorEl:a,siteUrl:n,site:i,member:r,clickHandler:o}){const s=i.locale||"en",c=Gu(s,"portal").t;t.removeEventListener("click",o),e.preventDefault();let d=t.dataset.membersPlan,p=WE(i,d.toLowerCase()),m=t.dataset.membersSuccess,g=t.dataset.membersCancel,b,v;m&&(b=new URL(m,window.location.href).href),g&&(v=new URL(g,window.location.href).href),a&&(a.innerText=""),t.classList.add("loading");const f=r?{checkoutType:"upgrade"}:{},h=Ui();return h&&(f.urlHistory=h),fetch(`${n}/members/api/session`,{credentials:"same-origin"}).then(function(y){return y.ok?y.text():null}).then(function(y){return fetch(`${n}/members/api/create-stripe-checkout-session/`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({...p,identity:y,successUrl:b,cancelUrl:v,metadata:f})}).then(function(x){if(!x.ok)throw new Error(c("Could not create stripe checkout session"));return x.json()})}).then(function(y){return y.url?window.location.assign(y.url):window.Stripe(y.publicKey).redirectToCheckout({sessionId:y.sessionId}).then(function(w){if(w.error)throw new Error(w.error.message)})}).catch(function(y){console.error(y),t.addEventListener("click",o),t.classList.remove("loading"),a&&(a.innerText=y.message),t.classList.add("error")})}function f0({siteUrl:e,site:t={},member:a,labs:n={},doAction:i,captureException:r}={}){const o=t.locale||"en",l=Gu(o,"portal").t;e&&(e=e.replace(/\/$/,""),Array.prototype.forEach.call(document.querySelectorAll("form[data-members-form]"),function(c){let d=c.querySelector("[data-members-error]");function p(m){h0({event:m,errorEl:d,form:c,siteUrl:e,submitHandler:p,labs:n,doAction:i,captureException:r},l)}c.addEventListener("submit",p)}),Array.prototype.forEach.call(document.querySelectorAll("[data-members-plan]"),function(c){let d=c.querySelector("[data-members-error]");function p(m){g0({el:c,event:m,errorEl:d,member:a,site:t,siteUrl:e,clickHandler:p})}c.addEventListener("click",p)}),Array.prototype.forEach.call(document.querySelectorAll("[data-members-edit-billing]"),function(c){let d=c.querySelector("[data-members-error]"),p=c.dataset.membersSuccess,m=c.dataset.membersCancel,g,b;p&&(g=new URL(p,window.location.href).href),m&&(b=new URL(m,window.location.href).href);function v(f){c.removeEventListener("click",v),f.preventDefault(),d&&(d.innerText=""),c.classList.add("loading"),fetch(`${e}/members/api/session`,{credentials:"same-origin"}).then(function(h){return h.ok?h.text():null}).then(function(h){return fetch(`${e}/members/api/create-stripe-update-session/`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({identity:h,successUrl:g,cancelUrl:b})}).then(function(y){if(!y.ok)throw new Error(l("Could not create stripe checkout session"));return y.json()})}).then(function(h){return window.Stripe(h.publicKey).redirectToCheckout({sessionId:h.sessionId})}).then(function(h){if(h.error)throw new Error(l(h.error.message))}).catch(function(h){console.error(h),c.addEventListener("click",v),c.classList.remove("loading"),d&&(d.innerText=h.message),c.classList.add("error")})}c.addEventListener("click",v)}),Array.prototype.forEach.call(document.querySelectorAll("[data-members-signout]"),function(c){function d(p){c.removeEventListener("click",d),p.preventDefault(),c.classList.remove("error"),c.classList.add("loading"),fetch(`${e}/members/api/session`,{method:"DELETE"}).then(function(m){m.ok?window.location.replace(e):(c.addEventListener("click",d),c.classList.remove("loading"),c.classList.add("error"))})}c.addEventListener("click",d)}),Array.prototype.forEach.call(document.querySelectorAll("[data-members-cancel-subscription]"),function(c){let d=c.parentElement.querySelector("[data-members-error]");function p(m){c.removeEventListener("click",p),m.preventDefault(),c.classList.remove("error"),c.classList.add("loading");let g=c.dataset.membersCancelSubscription;return d&&(d.innerText=""),fetch(`${e}/members/api/session`,{credentials:"same-origin"}).then(function(b){return b.ok?b.text():null}).then(function(b){return fetch(`${e}/members/api/subscriptions/${g}/`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({identity:b,smart_cancel:!0})})}).then(function(b){b.ok?window.location.reload():(c.addEventListener("click",p),c.classList.remove("loading"),c.classList.add("error"),d&&(d.innerText=l("There was an error cancelling your subscription, please try again.")))})}c.addEventListener("click",p)}),Array.prototype.forEach.call(document.querySelectorAll("[data-members-continue-subscription]"),function(c){let d=c.parentElement.querySelector("[data-members-error]");function p(m){c.removeEventListener("click",p),m.preventDefault(),c.classList.remove("error"),c.classList.add("loading");let g=c.dataset.membersContinueSubscription;return d&&(d.innerText=""),fetch(`${e}/members/api/session`,{credentials:"same-origin"}).then(function(b){return b.ok?b.text():null}).then(function(b){return fetch(`${e}/members/api/subscriptions/${g}/`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({identity:b,cancel_at_period_end:!1})})}).then(function(b){b.ok?window.location.reload():(c.addEventListener("click",p),c.classList.remove("loading"),c.classList.add("error"),d&&(d.innerText=l("There was an error continuing your subscription, please try again.")))})}c.addEventListener("click",p)}))}const b0={showPopup:!0,site:Sn,member:as.free,page:"accountEmail",...F$(),pageData:Uf};function y0({site:e,children:t}){const{portal_sentry:a}=e||{};return a&&a.dsn?u.jsx(Vu,{children:t}):u.jsx(u.Fragment,{children:t})}class k0 extends Y.Component{constructor(t){super(t),this.setupCustomTriggerButton(t),this.state={site:null,member:null,page:"loading",showPopup:!1,action:"init:running",initStatus:"running",lastPage:null,customSiteUrl:t.customSiteUrl,locale:t.locale,scrollbarWidth:0,labs:t.labs||{}}}componentDidMount(){const t=this.getScrollbarWidth();this.setState({scrollbarWidth:t}),this.initSetup()}componentDidUpdate(t,a){var n,i,r;if(a.showPopup!==this.state.showPopup){this.handleCustomTriggerClassUpdate();try{this.state.showPopup?(this.bodyScroll=(r=(i=(n=window.document)==null?void 0:n.body)==null?void 0:i.style)==null?void 0:r.overflow,this.bodyMargin=window.getComputedStyle(document.body).getPropertyValue("margin-right"),window.document.body.style.overflow="hidden",this.state.scrollbarWidth&&(window.document.body.style.marginRight=`calc(${this.bodyMargin} + ${this.state.scrollbarWidth}px)`)):(window.document.body.style.overflow=this.bodyScroll||"",!this.bodyMargin||this.bodyMargin==="0px"?window.document.body.style.marginRight="":window.document.body.style.marginRight=this.bodyMargin)}catch{}}if(this.state.initStatus==="success"&&a.initStatus!==this.state.initStatus){const{siteUrl:o}=this.props,s=this.getContextFromState();this.sendPortalReadyEvent(),f0({siteUrl:o,site:s.site,member:s.member,labs:s.labs,doAction:s.doAction,captureException:co})}}componentWillUnmount(){clearTimeout(this.timeoutId),this.customTriggerButtons&&this.customTriggerButtons.forEach(t=>{t.removeEventListener("click",this.clickHandler)}),window.removeEventListener("hashchange",this.hashHandler,!1)}sendPortalReadyEvent(){window.self!==window.parent&&window.parent.postMessage({type:"portal-ready",payload:{}},"*")}getScrollbarWidth(){const t=document.createElement("div");t.style.visibility="hidden",t.style.overflow="scroll",document.body.appendChild(t),document.body.appendChild(t);const a=t.offsetWidth-t.clientWidth;return document.body.removeChild(t),a}setupCustomTriggerButton(){this.clickHandler=n=>{n.preventDefault();const i=n.currentTarget,r=i&&i.dataset.portal,{page:o,pageQuery:s,pageData:l}=this.getPageFromLinkPath(r)||{};this.state.initStatus==="success"&&(s&&s!=="free"?this.handleSignupQuery({site:this.state.site,pageQuery:s}):this.dispatchAction("openPopup",{page:o,pageQuery:s,pageData:l}))};const t="[data-portal]",a="gh-portal-close";this.customTriggerButtons=document.querySelectorAll(t)||[],this.customTriggerButtons.forEach(n=>{n.classList.add(a),n.removeEventListener("click",this.clickHandler),n.addEventListener("click",this.clickHandler)})}handleCustomTriggerClassUpdate(){var n;const t="gh-portal-open",a="gh-portal-close";(n=this.customTriggerButtons)==null||n.forEach(i=>{const r=this.state.showPopup?t:a,o=this.state.showPopup?a:t;i.classList.add(r),i.classList.remove(o)})}async initSetup(){try{const{site:t,member:a,page:n,showPopup:i,popupNotification:r,lastPage:o,pageQuery:s,pageData:l}=await this.fetchData(),c=this.props.siteI18nEnabled&&(this.props.locale||t.locale)||"en";Di.changeLanguage(c);const d={site:t,member:a,page:n,lastPage:o,pageQuery:s,showPopup:i,pageData:l,popupNotification:r,t:Di.t,dir:Di.dir()||"ltr",action:"init:success",initStatus:"success",locale:c};if(this.handleSignupQuery({site:t,pageQuery:s,member:a}),this.setState(d),this.hashHandler=()=>{this.updateStateForPreviewLinks()},window.addEventListener("hashchange",this.hashHandler,!1),!a){const p=document.querySelectorAll("[data-lexical-signup-form]");p.length>0&&p.forEach(m=>{m.style.display=""})}this.setupRecommendationButtons(),this.transformPortalLinksToRelative()}catch(t){console.error("[Portal] Failed to initialize:",t),this.setState({action:"init:failed",initStatus:"failed"})}}async fetchData(){const{site:t,member:a}=await this.fetchApiData(),{site:n,...i}=this.fetchDevData(),{site:r,...o}=this.fetchLinkData(t,a),{site:s,...l}=this.fetchPreviewData(),{site:c,...d}=this.fetchNotificationData();return{member:a,page:"",site:{...t,...r,...s,...c,...n,plans:{...(n||{}).plans,...(t||{}).plans,...(s||{}).plans}},...i,...o,...d,...l}}fetchDevData(){return J(["dev"])&&!this.state.customSiteUrl?b0:J(["test"])?{showPopup:this.props.showPopup!==void 0?this.props.showPopup:!0}:{}}fetchOfferQueryStrData(t=""){const a=new URLSearchParams(t),n={};for(let i of a.entries()){const r=i[0],o=decodeURIComponent(i[1]);r==="name"?n.name=o||"":r==="code"?n.code=o||"":r==="display_title"?n.display_title=o||"":r==="display_description"?n.display_description=o||"":r==="type"?n.type=o||"":r==="cadence"?n.cadence=o||"":r==="duration"?n.duration=o||"":r==="duration_in_months"&&!isNaN(Number(o))?n.duration_in_months=Number(o):r==="amount"&&!isNaN(Number(o))?n.amount=Number(o):r==="currency"?n.currency=o||"":r==="status"?n.status=o||"":r==="tier_id"&&(n.tier={id:o||Uf.tier.id})}return{page:"offer",pageData:n}}fetchQueryStrData(t=""){const a=new URLSearchParams(t),n={site:{plans:{}}},i=[];let r,o=null,s,l,c;for(let d of a.entries()){const p=d[0],m=decodeURIComponent(d[1]);if(p==="button")n.site.portal_button=JSON.parse(m);else if(p==="name")n.site.portal_name=JSON.parse(m);else if(p==="isFree"&&JSON.parse(m))i.push("free");else if(p==="isMonthly"&&JSON.parse(m))i.push("monthly");else if(p==="isYearly"&&JSON.parse(m))i.push("yearly");else if(p==="portalPrices")r=m?m.split(","):[];else if(p==="portalProducts")o=m?m.split(","):[];else if(p==="page"&&m)n.page=m;else if(p==="accentColor"&&(m===""||m))n.site.accent_color=m;else if(p==="buttonIcon"&&m)n.site.portal_button_icon=m;else if(p==="signupButtonText")n.site.portal_button_signup_text=m||"";else if(p==="signupTermsHtml")n.site.portal_signup_terms_html=m||"";else if(p==="signupCheckboxRequired")n.site.portal_signup_checkbox_required=JSON.parse(m);else if(p==="buttonStyle"&&m)n.site.portal_button_style=m;else if(p==="monthlyPrice"&&!isNaN(Number(m)))n.site.plans.monthly=Number(m),s=Number(m);else if(p==="yearlyPrice"&&!isNaN(Number(m)))n.site.plans.yearly=Number(m),l=Number(m);else if(p==="currency"&&m){const g=m.toUpperCase();n.site.plans.currency=g,n.site.plans.currency_symbol=he(g),c=g}else p==="disableBackground"?n.site.disableBackground=JSON.parse(m):p==="membersSignupAccess"&&m?n.site.members_signup_access=m:p==="portalDefaultPlan"&&m&&(n.site.portal_default_plan=m)}return n.site.portal_plans=i,n.site.portal_products=o,r?n.site.portal_plans=r:s&&l&&c&&(n.site.prices=[{id:"monthly",stripe_price_id:"dummy_stripe_monthly",stripe_product_id:"dummy_stripe_product",active:1,nickname:"Monthly",currency:c,amount:s,type:"recurring",interval:"month"},{id:"yearly",stripe_price_id:"dummy_stripe_yearly",stripe_product_id:"dummy_stripe_product",active:1,nickname:"Yearly",currency:c,amount:l,type:"recurring",interval:"year"}]),n}fetchNotificationData(){const{type:t,status:a,duration:n,autoHide:i,closeable:r}=Vg({billingOnly:!0})||{};return["stripe:billing-update"].includes(t)?a==="success"?{showPopup:!0,popupNotification:q({type:t,status:a,duration:n,closeable:r,autoHide:i,state:this.state,message:a==="success"?"Billing info updated successfully":""})}:{showPopup:!0}:{}}fetchLinkData(t,a){const n=new URLSearchParams(window.location.search);if(n.get("action")==="unsubscribe")return n.get("key")&&n.get("uuid")?{showPopup:!0,page:"unsubscribe",pageData:{uuid:n.get("uuid"),key:n.get("key"),newsletterUuid:n.get("newsletter"),comments:n.get("comments")}}:{showPopup:!0,page:"accountEmail",pageData:{newsletterUuid:n.get("newsletter"),action:"unsubscribe",redirect:t.url+"#/portal/account/newsletters"}};if(qE({site:t})&&n.get("action")==="signup"&&n.get("success")==="true")return{showPopup:!0,page:"recommendations",pageData:{signup:!0}};const[i,r]=window.location.hash.substr(1).split("?"),o=new URLSearchParams(r??""),s=/^(?:(\w+?))?\/monthly$/,l=/^(?:(\w+?))?\/yearly$/,c=/^offers\/(\w+?)\/?$/,d=/^\/portal\/?(?:\/(\w+(?:\/\w+)*))?\/?$/,p=/^\/feedback\/(\w+?)\/(\w+?)\/?$/;if(i&&p.test(i)){const[,m,g]=i.match(p),b=parseInt(g);if(b===1||b===0)return a||o.get("uuid")&&o.get("key")?{showPopup:!0,page:"feedback",pageData:{uuid:a?null:o.get("uuid"),key:a?null:o.get("key"),postId:m,score:b}}:{showPopup:!0,page:"signin",pageData:{redirect:t.url+`#/feedback/${m}/${b}/`}}}if(i&&d.test(i)){const[,m]=i.match(d),{page:g,pageQuery:b,pageData:v}=this.getPageFromLinkPath(m,t)||{},f=["accountPlan","accountProfile"].includes(g)?"accountHome":null;return{showPopup:!(["monthly","yearly"].includes(b)||s.test(b)||l.test(b)||c.test(b)),...g?{page:g}:{},...b?{pageQuery:b}:{},...v?{pageData:v}:{},...f?{lastPage:f}:{}}}return{}}fetchPreviewData(){const[,t]=window.location.hash.substr(1).split("?");if(J(["preview"])){let a={};return J(["offerPreview"])?a=this.fetchOfferQueryStrData(t):a=this.fetchQueryStrData(t),{...a,showPopup:!0}}return{}}getColorOverride(){const t=document.querySelector("script[data-ghost]");return t&&t.dataset.accentColor?t.dataset.accentColor:!1}async fetchApiData(){const{siteUrl:t,customSiteUrl:a,apiUrl:n,apiKey:i}=this.props;try{this.GhostApi=this.props.api||Qo({siteUrl:t,apiUrl:n,apiKey:i});const{site:r,member:o}=await this.GhostApi.init(),s=this.getColorOverride();return s&&(r.accent_color=s),this.setupFirstPromoter({site:r,member:o}),this.setupSentry({site:r}),{site:r,member:o}}catch(r){if(J(["dev","test"],{customSiteUrl:a}))return{};throw r}}setupSentry({site:t}){if(J(["test"]))return null;const{portal_sentry:a,portal_version:n,version:i}=t,o=`portal@2.55.0|ghost@${i}`;a&&a.dsn&&WS({dsn:a.dsn,environment:a.env||"development",release:o,beforeSend:s=>RE({event:s})?s:null,allowUrls:[/https?:\/\/((www)\.)?unpkg\.com\/@tryghost\/portal/]})}setupFirstPromoter({site:t,member:a}){if(J(["test"]))return null;const n=nC({site:t});let i=rc({site:t});if(i=i==null?void 0:i.replace(/^(\S*\.)?(\S*\.\S*)$/i,".$2"),n&&i){const r=document.createElement("script");r.type="text/javascript",r.async=!0,r.src="https://cdn.firstpromoter.com/fprom.js",r.onload=r.onreadystatechange=function(){let s=this.readyState;if(!s||s==="complete"||s==="loaded")try{if(window.$FPROM.init(n,i),pC({member:a})){const l=a.email,c=a.uuid;if(window.$FPROM)window.$FPROM.trackSignup({email:l,uid:c});else{const d=window._fprom||[];window._fprom=d,d.push(["event","signup"]),d.push(["email",l]),d.push(["uid",c])}}}catch{}};const o=document.getElementsByTagName("script")[0];o.parentNode.insertBefore(r,o)}}async dispatchAction(t,a){clearTimeout(this.timeoutId),this.setState({action:`${t}:running`});try{const n=await m0({action:t,data:a,state:this.state,api:this.GhostApi});this.setState(n),n&&n.action&&!n.action.includes(":failed")&&(this.timeoutId=setTimeout(()=>{this.setState({action:""})},2e3))}catch(n){if(console.error(`[Portal] Failed to dispatch action: ${t}`,n),a&&a.throwErrors)throw n;const i=q({type:`${t}:failed`,autoHide:!0,closeable:!0,status:"error",state:this.state,meta:{error:n}});this.setState({action:`${t}:failed`,popupNotification:i})}}updateStateForPreviewLinks(){const{site:t,...a}=this.fetchPreviewData(),{site:n,...i}=this.fetchLinkData(),r={site:{...this.state.site,...n||{},...t||{},plans:{...this.state.site&&this.state.site.plans,...(n||{}).plans,...(t||{}).plans}},...i,...a};this.handleSignupQuery({site:r.site,pageQuery:r.pageQuery}),this.setState(r)}async handleOfferQuery({site:t,offerId:a,member:n=this.state.member}){const{portal_button:i}=t;if(Xu(),!ct({member:n}))try{const r=await this.GhostApi.site.offer({offerId:a}),o=r==null?void 0:r.offers[0];if(lC({site:t,offer:o}))if(i)this.dispatchAction("openPopup",{page:"offer",pageData:r==null?void 0:r.offers[0]});else{const s=bn({site:t,productId:o.tier.id}),l=o.cadence==="month"?s.monthlyPrice:s.yearlyPrice;if(this.dispatchAction("openPopup",{page:"loading"}),n){const{tierId:c,cadence:d}=xa({site:t,priceId:l.id});this.dispatchAction("checkoutPlan",{plan:l.id,offerId:a,tierId:c,cadence:d})}else{const{tierId:c,cadence:d}=xa({site:t,priceId:l.id});this.dispatchAction("signup",{plan:l.id,offerId:a,tierId:c,cadence:d})}}}catch{}}handleSignupQuery({site:t,pageQuery:a,member:n}){const i=/^offers\/(\w+?)\/?$/;let r=a;if(i.test(a||"")){const[,s]=a.match(i);this.handleOfferQuery({site:t,offerId:s,member:n});return}Mg({site:t,pageQuery:a})&&(r=Mg({site:t,pageQuery:a}));const o=KE({site:t,priceId:r});if(a&&a!=="free"){Xu();const s=(o==null?void 0:o.id)||r;s!=="free"&&this.dispatchAction("openPopup",{page:"loading"});const{tierId:l,cadence:c}=xa({site:t,priceId:s});this.dispatchAction("signup",{plan:s,tierId:l,cadence:c})}}getPageFromLinkPath(t){const a=/^signup\/?(?:\/(\w+?))?\/?$/,n=/^signup\/?(?:\/(\w+?))\/monthly\/?$/,i=/^signup\/?(?:\/(\w+?))\/yearly\/?$/,r=/^offers\/(\w+?)\/?$/;if(t===void 0||t==="")return{page:"default"};if(r.test(t))return{pageQuery:t};if(t==="signup")return{page:"signup"};if(n.test(t)){const[,o]=t.match(n);return{page:"signup",pageQuery:`${o}/monthly`}}else if(i.test(t)){const[,o]=t.match(i);return{page:"signup",pageQuery:`${o}/yearly`}}else if(a.test(t)){const[,o]=t.match(a);return{page:"signup",pageQuery:o}}else{if(t==="signup/free")return{page:"signup",pageQuery:"free"};if(t==="signup/monthly")return{page:"signup",pageQuery:"monthly"};if(t==="signup/yearly")return{page:"signup",pageQuery:"yearly"};if(t==="signin")return{page:"signin"};if(t==="account")return{page:"accountHome"};if(t==="account/plans")return{page:"accountPlan"};if(t==="account/profile")return{page:"accountProfile"};if(t==="account/newsletters")return{page:"accountEmail"};if(t==="support")return{page:"support"};if(t==="support/success")return{page:"supportSuccess"};if(t==="support/error")return{page:"supportError"};if(t==="recommendations")return{page:"recommendations",pageData:{signup:!1}};if(t==="account/newsletters/help")return{page:"emailReceivingFAQ",pageData:{direct:!0}};if(t==="account/newsletters/disabled")return{page:"emailSuppressionFAQ",pageData:{direct:!0}}}return{page:"default"}}getAccentColor(){const{accent_color:t}=this.state.site||{};return t}getContextPage({site:t,page:a,member:n}){if(!a||a==="default"){const i=dt({site:t})||!jt({site:t})?"signin":"signup";a=n?"accountHome":i}return a==="accountPlan"&&Qt({member:n})&&!Mi({member:n})&&(a="accountHome"),vc({page:a})}getContextMember({page:t,member:a,customSiteUrl:n}){return J(["dev","preview"],{customSiteUrl:n})?$$({page:t})||T$({page:t})?J(["dev"],{customSiteUrl:n})?a||as.free:J(["preview"])?as.preview:as.paid:null:a}getContextFromState(){const{site:t,member:a,action:n,page:i,lastPage:r,showPopup:o,pageQuery:s,pageData:l,popupNotification:c,customSiteUrl:d,t:p,dir:m,scrollbarWidth:g,labs:b,otcRef:v}=this.state,f=this.getContextPage({site:t,page:i,member:a}),h=this.getContextMember({page:f,member:a,customSiteUrl:d});return{api:this.GhostApi,site:t,action:n,brandColor:this.getAccentColor(),page:f,pageQuery:s,pageData:l,member:h,lastPage:r,showPopup:o,popupNotification:c,customSiteUrl:d,t:p,dir:m,scrollbarWidth:g,labs:b,otcRef:v,doAction:(y,x)=>this.dispatchAction(y,x)}}getRecommendationButtons(){return document.querySelectorAll("[data-recommendation]")||[]}setupRecommendationButtons(){const t=n=>{const i=n.currentTarget.dataset.recommendation;i?this.dispatchAction("trackRecommendationClicked",{recommendationId:i}).catch(console.error):console.warn("[Portal] Invalid usage of data-recommendation attribute")},a=this.getRecommendationButtons();for(const n of a)n.addEventListener("click",t,{passive:!0})}transformPortalLinksToRelative(){document.querySelectorAll('a[href*="#/portal"]').forEach(M$)}render(){return this.state.initStatus==="success"?u.jsx(y0,{site:this.state.site,children:u.jsxs(z.Provider,{value:this.getContextFromState(),children:[u.jsx(Ff,{}),u.jsx(Lg,{}),u.jsx(Wg,{})]})}):null}}const Bf="ghost-portal-root";function v0(){const e=document.createElement("div");e.id=Bf,document.body.appendChild(e)}function w0(){const e=document.querySelector("script[data-ghost]");if(e){const t=e.dataset.i18n==="true",a=e.dataset.ghost,n=e.dataset.key,i=e.dataset.api,r=e.dataset.locale,o={};return o.membersSigninOTC=e.dataset.membersSigninOtc==="true",o.membersSigninOTCAlpha=e.dataset.membersSigninOtcAlpha==="true",{siteUrl:a,apiKey:n,apiUrl:i,siteI18nEnabled:t,locale:r,labs:o}}return{}}function x0(){const e=new URL(window.location.href);e.searchParams.get("token")&&(e.searchParams.delete("token"),window.history.replaceState({},document.title,e.href))}function S0(){v0(),x0()}function E0(){const{siteUrl:e,apiKey:t,apiUrl:a,siteI18nEnabled:n,locale:i,labs:r}=w0(),o=e||window.location.origin;S0(),tk.render(u.jsx(Y.StrictMode,{children:u.jsx(k0,{siteUrl:o,customSiteUrl:e,apiKey:t,apiUrl:a,siteI18nEnabled:n,locale:i,labs:r})}),document.getElementById(Bf))}E0()});
|
|
3492
|
+
`+a;return u.jsxs(u.Fragment,{children:[u.jsx("style",{dangerouslySetInnerHTML:{__html:n}}),u.jsx("meta",{name:"viewport",content:"width=device-width, initial-scale=1, maximum-scale=1"})]})}renderFrameContainer(){const{member:t,site:a,customSiteUrl:n}=this.context,i=Af(),r=window.innerWidth<480,o={...i.frame.common};let s="gh-portal-popup-background";return J(["preview"])&&(i.modalContainer.zIndex="3999997"),J(["preview"],{customSiteUrl:n})&&!a.disableBackground&&(s+=" preview"),J(["dev"])&&(s+=" dev"),u.jsx("div",{style:i.modalContainer,children:u.jsxs(qu,{style:o,title:"portal-popup",head:this.renderFrameStyles(),dataTestId:"portal-popup-frame",dataDir:this.context.dir,children:[u.jsx("div",{className:s,onClick:l=>this.handlePopupClose(l)}),u.jsx(Df,{isMobile:r})]})})}render(){const{showPopup:t}=this.context;return t?this.renderFrameContainer():null}}te(Ff,"contextType",z),Xo({products:xc({numOfProducts:1})});function ge(){return(new Date().getTime()/1e3|0).toString(16)+"xxxxxxxxxxxxxxxx".replace(/[x]/g,function(){return(Math.random()*16|0).toString(16)}).toLowerCase()}function Xo({title:e="The Blueprint",description:t="Thoughts, stories and ideas.",logo:a="https://static.ghost.org/v4.0.0/images/ghost-orb-1.png",icon:n="https://static.ghost.org/v4.0.0/images/ghost-orb-1.png",url:i="https://portal.localhost",plans:r={monthly:5e3,yearly:15e4,currency:"USD"},products:o=xc({numOfProducts:1}),portalProducts:s=o.map(D=>D.id),accentColor:l="#45C32E",portalPlans:c=["free","monthly","yearly"],membersSignupAccess:d="all",freePriceName:p="Free",freePriceDescription:m="Free preview",isStripeConfigured:g=!0,portalButton:b=!0,portalName:v=!0,portalButtonIcon:f="icon-1",portalButtonSignupText:h="Subscribe now",portalButtonStyle:y="icon-and-text",membersSupportAddress:x="support@example.com",editorDefaultEmailRecipients:w="visibility",newsletters:C=[],posts:S=N$(),commentsEnabled:j,recommendations:T=[],recommendationsEnabled:E}={}){return{title:e,description:t,logo:a,icon:n,accent_color:l,url:i,plans:r,products:o,portal_products:s,members_signup_access:d,free_price_name:p,free_price_description:m,is_stripe_configured:g,portal_button:b,portal_name:v,portal_plans:c,portal_button_icon:f,portal_button_signup_text:h,portal_button_style:y,members_support_address:x,comments_enabled:j!=="off",newsletters:C,recommendations:T,recommendations_enabled:!!E,editor_default_email_recipients:w,posts:S}}function Mf({name:e="Black Friday",code:t="black-friday",displayTitle:a="Black Friday Sale!",displayDescription:n="Special deal for Black Friday. Subscribe now for only $15 per month and get additional benefits like accessing our podcast.",type:i="percent",cadence:r="month",amount:o=50,duration:s="repeating",durationInMonths:l=null,currencyRestriction:c=!1,currency:d=null,status:p="active",tierId:m="",tierName:g="Basic"}={}){return{id:`offer_${ge()}`,name:e,code:t,display_title:a,display_description:n,type:i,cadence:r,amount:o,duration:s,duration_in_months:l,currency_restriction:c,currency:d,status:p,tier:{id:`${m}`,name:g}}}function Ze({name:e="Jamie Larson",email:t="jamie@example.com",firstname:a="Jamie",subscriptions:n=[],paid:i=!1,avatarImage:r="",subscribed:o=!0,email_suppression:s={suppressed:!1,info:null},newsletters:l=[]}={}){return{uuid:`member_${ge()}`,email:t,name:e,firstname:a,paid:i,subscribed:o,avatar_image:r,subscriptions:n,email_suppression:s,newsletters:l}}function N$({numOfPosts:e=3}={}){const t=[];for(let a=0;a<e;a++)t.push(I$({title:`Post ${a+1}`,slug:`post-${a+1}`}));return t.slice(0,e)}function I$({id:e=`post_${ge()}`,title:t="Post",excerpt:a="Post excerpt",slug:n="post",featured:i=!1}={}){return{id:e,title:t,excerpt:a,slug:n,featured:i}}function xc({numOfProducts:e=3}={}){const a=[xn({name:"Bronze",description:"Access to all members articles",monthlyPrice:We({interval:"month",amount:700}),yearlyPrice:We({interval:"year",amount:7e3}),numOfBenefits:2}),xn({name:"Silver",description:"Access to all members articles and weekly podcast",monthlyPrice:We({interval:"month",amount:1200}),yearlyPrice:We({interval:"year",amount:12e3}),numOfBenefits:3}),xn({name:"Friends of the Blueprint",description:"Get access to everything and lock in early adopter pricing for life + listen to my podcast",monthlyPrice:We({interval:"month",amount:18e3}),yearlyPrice:We({interval:"year",amount:17e3}),numOfBenefits:4})].slice(0,e),n=_f({});return[...a,n]}function xn({type:e="paid",name:t="Basic",description:a="",id:n=`product_${ge()}`,monthlyPrice:i=We(),yearlyPrice:r=We({interval:"year"}),numOfBenefits:o=2,trialDays:s=null}){return{id:n,name:t,description:a,monthlyPrice:e==="free"?null:i,yearlyPrice:e==="free"?null:r,type:e,benefits:Yf({numOfBenefits:o}),trial_days:s}}function _f({name:e="Free tier",description:t="Free tier description",id:a=`product_${ge()}`,numOfBenefits:n=2}){return{id:a,name:e,type:"free",description:t,benefits:Yf({numOfBenefits:n})}}function Yf({numOfBenefits:e}){const t=ge();return[es({name:`Limited early adopter pricing #${t.substring(0,6)}`}),es({name:`Latest gear reviews #${t.substring(6,12)}`}),es({name:`Weekly email newsletter #${t.substring(12,18)}`}),es({name:`Listen to my podcast #${t.substring(18)}`})].slice(0,e)}function es({id:e=`benefit_${ge()}`,name:t="Benefit"}){return{id:e,name:t}}function We({interval:e="month",amount:t=e==="month"?500:5e3,nickname:a=e==="month"?"Monthly":"Yearly",description:n=null,currency:i="usd",active:r=!0,id:o=`price_${ge()}`}={}){return{id:o,active:r,nickname:a,currency:i,amount:t,interval:e,description:n,stripe_price_id:`price_${ge()}`,stripe_product_id:`prod_${ge()}`,type:"recurring"}}function Ea({id:e=`sub_${ge()}`,status:t="active",currency:a="USD",interval:n="year",amount:i=n==="month"?500:5e3,nickname:r=n==="month"?"Monthly":"Yearly",cardLast4:o="4242",offer:s=D$,priceId:l=`price_${ge()}`,startDate:c="2021-10-05T03:18:30.000Z",currentPeriodEnd:d="2022-10-05T03:18:30.000Z",cancelAtPeriodEnd:p=!1}={}){return{id:e,customer:{id:`cus_${ge()}`,name:"Jamie",email:"jamie@example.com"},plan:{id:`price_${ge()}`,nickname:r,amount:i,interval:n,currency:a},offer:s,status:t,start_date:c,default_payment_card_last4:o,cancel_at_period_end:p,cancellation_reason:null,current_period_end:d,price:{id:`stripe_price_${ge()}`,price_id:l,nickname:r,amount:i,interval:n,type:"recurring",currency:a,product:{id:`stripe_prod_${ge()}`,product_id:`prod_${ge()}`}}}}function Rf(){const e=xc({numOfProducts:1}),t=e.map(n=>n.id);return Xo({products:e,portalPlans:["free","monthly","yearly"],portalProducts:t})}Rf();const A$=Xo({products:[xn({numOfBenefits:2,type:"free"})]}),D$=Mf({tierId:(Vf=A$.products[0])==null?void 0:Vf.id});Ze(),Ze({paid:!0,subscriptions:[Ea()]}),Ze({paid:!0,subscriptions:[]}),Ze({paid:!0,subscriptions:[Ea({amount:0})]}),Ze({paid:!0,subscriptions:[Ea({amount:1500,startDate:"2019-05-01T11:42:40.000Z",currentPeriodEnd:"2021-06-05T11:42:40.000Z"})]}),Rf();const ts=[_f({name:"Free",description:"Free tier description which is actually a pretty long description",numOfBenefits:2}),xn({name:"The Blueprint",description:"",monthlyPrice:We({interval:"month",amount:500}),yearlyPrice:We({interval:"year",amount:5e3}),numOfBenefits:3}),xn({name:"Friends of the Blueprint Silver",description:"Access to all members articles and weekly podcast",monthlyPrice:We({interval:"month",amount:1200}),yearlyPrice:We({interval:"year",amount:11e3}),numOfBenefits:4})],Sn=Xo({title:"The Blueprint",description:"Thoughts, stories and ideas.",logo:"https://static.ghost.org/v4.0.0/images/ghost-orb-1.png",icon:"https://static.ghost.org/v4.0.0/images/ghost-orb-1.png",accentColor:"#45C32E",url:"https://portal.localhost",plans:{monthly:5e3,yearly:15e4,currency:"USD"},products:ts,portalProducts:ts.map(e=>e.id),membersSignupAccess:"all",freePriceName:"Free",freePriceDescription:"Free preview",isStripeConfigured:!0,portalButton:!0,portalName:!0,portalPlans:["free","monthly","yearly"],portalButtonIcon:"icon-1",portalButtonSignupText:"Subscribe now",portalButtonStyle:"icon-and-text",membersSupportAddress:"support@example.com",commentsEnabled:!0,newsletters:[{id:"weekly",name:"Weekly Rundown",description:"Best of last week",subscribe_on_signup:!0,paid:!0},{id:"daily",name:"Daily Brief",description:"One email every day",subscribe_on_signup:!1,paid:!1}],posts:[{id:"post_66aacfe061c94e10eb6e4fc1",title:"Post 1",excerpt:"Post excerpt",slug:"post-1",featured:!1},{id:"post_66aacfe04f14b8dbb56c5721",title:"Post 2",excerpt:"Post excerpt",slug:"post-2",featured:!1},{id:"post_66aacfe03d609460819af18c",title:"Post 3",excerpt:"Post excerpt",slug:"post-3",featured:!1}]}),Uf=Mf({tierId:(Hf=Sn.products[1])==null?void 0:Hf.id}),as={free:Ze({name:"Jamie Larson",email:"jamie@example.com",firstname:"Jamie",subscriptions:[],paid:!1,avatarImage:"",subscribed:!0}),paid:Ze({paid:!0,subscriptions:[Ea({status:"active",currency:"USD",interval:"year",amount:5e3,cardLast4:"4242",startDate:"2021-10-05T03:18:30.000Z",currentPeriodEnd:"2022-10-05T03:18:30.000Z",cancelAtPeriodEnd:!1})]}),complimentary:Ze({paid:!0,subscriptions:[]}),complimentaryWithSubscription:Ze({paid:!0,subscriptions:[Ea({amount:0})]}),preview:Ze({paid:!0,subscriptions:[Ea({amount:1500,startDate:"2019-05-01T11:42:40.000Z",currentPeriodEnd:"2021-06-05T11:42:40.000Z"})]})};function F$(){var a;if(!ts||!ts[1])return null;let e=(a=Sn==null?void 0:Sn.products)==null?void 0:a[1].monthlyPrice,t=Ze({paid:!0,subscriptions:[Ea({offer:null,priceId:e==null?void 0:e.id,status:"active",currency:e==null?void 0:e.currency,interval:e==null?void 0:e.interval,amount:e==null?void 0:e.amount,cardLast4:"4242",startDate:"2021-10-05T03:18:30.000Z",currentPeriodEnd:"2022-10-05T03:18:30.000Z",cancelAtPeriodEnd:!1})]});return{site:Sn,member:t}}function M$(e){const t=e.getAttribute("href"),a=new URL(t,window.location.origin);!a.hash||!a.hash.startsWith("#/portal")||t.startsWith("#/portal")||a.origin===window.location.origin&&e.setAttribute("href",a.hash)}function _$({data:e,state:t}){return{page:e.page,popupNotification:null,lastPage:e.lastPage||null,pageData:e.pageData||t.pageData}}function Y$({state:e}){return{showPopup:!e.showPopup}}function R$({data:e}){return{showPopup:!0,page:e.page,...e.pageQuery?{pageQuery:e.pageQuery}:{},...e.pageData?{pageData:e.pageData}:{}}}function U$({state:e}){return e.lastPage?{page:e.lastPage}:Lf({state:e})}function Lf({state:e}){return Xu(),{showPopup:!1,lastPage:null,pageQuery:"",popupNotification:null,page:e.page==="magiclink"?"":e.page}}function L$({data:e}){return{showNotification:!0,...e}}function O$(){return{showNotification:!1}}async function B$({api:e,state:t}){try{return await e.member.signout(),{action:"signout:success"}}catch{const{t:n}=t;return{action:"signout:failed",popupNotification:q({type:"signout:failed",autoHide:!1,closeable:!0,state:t,status:"error",message:n("Failed to log out, please try again")})}}}async function V$({data:e,api:t,state:a}){const{t:n,labs:i}=a,r=i!=null&&i.membersSigninOTC?!0:void 0;try{const o=await t.member.getIntegrityToken(),s={...e,emailType:"signin",integrityToken:o,...r?{includeOTC:!0}:{}},l=await t.member.sendMagicLink(s);return r&&(l!=null&&l.otc_ref)?{page:"magiclink",lastPage:"signin",otcRef:l.otc_ref,pageData:{...a.pageData||{},email:((e==null?void 0:e.email)||"").trim()}}:{page:"magiclink",lastPage:"signin",pageData:{...a.pageData||{},email:((e==null?void 0:e.email)||"").trim()}}}catch(o){return{action:"signin:failed",popupNotification:q({type:"signin:failed",autoHide:!1,closeable:!0,state:a,status:"error",message:Sa(o,n("Failed to log in, please try again"))})}}}function H$({data:e,state:t}){const a=((e==null?void 0:e.email)||"").trim(),n=e==null?void 0:e.otcRef;return n?{showPopup:!0,page:"magiclink",lastPage:"signin",otcRef:n,pageData:{...t.pageData||{},email:a},popupNotification:null}:{}}async function W$({data:e,api:t,state:a}){const{t:n}=a;try{const i=await t.member.getIntegrityToken(),r=await t.member.verifyOTC({...e,integrityToken:i});return r.redirectUrl?window.location.assign(r.redirectUrl):{action:"verifyOTC:failed",popupNotification:q({type:"verifyOTC:failed",autoHide:!1,closeable:!0,state:a,status:"error",message:r.message||n("Invalid verification code")})}}catch(i){return{action:"verifyOTC:failed",popupNotification:q({type:"verifyOTC:failed",autoHide:!1,closeable:!0,state:a,status:"error",message:Sa(i,n("Failed to verify code, please try again"))})}}}async function K$({data:e,state:t,api:a}){try{let{plan:n,tierId:i,cadence:r,email:o,name:s,newsletters:l,offerId:c}=e;if(n.toLowerCase()==="free"){const d=await a.member.getIntegrityToken();await a.member.sendMagicLink({emailType:"signup",integrityToken:d,...e})}else return i&&r?await a.member.checkoutPlan({plan:n,tierId:i,cadence:r,email:o,name:s,newsletters:l,offerId:c}):({tierId:i,cadence:r}=xa({site:t==null?void 0:t.site,priceId:n}),await a.member.checkoutPlan({plan:n,tierId:i,cadence:r,email:o,name:s,newsletters:l,offerId:c})),{page:"loading"};return{page:"magiclink",lastPage:"signup",pageData:{...t.pageData||{},email:(o||"").trim()}}}catch(n){const{t:i}=t,r=Sa(n,i("Failed to sign up, please try again"));return{action:"signup:failed",popupNotification:q({type:"signup:failed",autoHide:!1,closeable:!0,state:t,status:"error",message:r})}}}async function G$({data:e,state:t,api:a}){try{let{plan:n,offerId:i,tierId:r,cadence:o}=e;(!r||!o)&&({tierId:r,cadence:o}=xa({site:t==null?void 0:t.site,priceId:n})),await a.member.checkoutPlan({plan:n,tierId:r,cadence:o,offerId:i,metadata:{checkoutType:"upgrade"}})}catch{const{t:i}=t;return{action:"checkoutPlan:failed",popupNotification:q({type:"checkoutPlan:failed",autoHide:!1,closeable:!0,state:t,status:"error",message:i("Failed to process checkout, please try again")})}}}async function q$({data:e,state:t,api:a}){const{t:n}=t;try{const{plan:i,planId:r,subscriptionId:o,cancelAtPeriodEnd:s}=e,{tierId:l,cadence:c}=xa({site:t==null?void 0:t.site,priceId:r});await a.member.updateSubscription({planName:i,tierId:l,cadence:c,subscriptionId:o,cancelAtPeriodEnd:s,planId:r});const d=await a.member.sessionData(),p="updateSubscription:success";return{action:p,popupNotification:q({type:p,autoHide:!0,closeable:!0,state:t,status:"success",message:n("Subscription plan updated successfully")}),page:"accountHome",member:d}}catch{return{action:"updateSubscription:failed",popupNotification:q({type:"updateSubscription:failed",autoHide:!1,closeable:!0,state:t,status:"error",message:n("Failed to update subscription, please try again")})}}}async function J$({data:e,state:t,api:a}){try{const{subscriptionId:n,cancellationReason:i}=e;return await a.member.updateSubscription({subscriptionId:n,smartCancel:!0,cancellationReason:i}),{action:"cancelSubscription:success",page:"accountHome",member:await a.member.sessionData()}}catch{const{t:i}=t;return{action:"cancelSubscription:failed",popupNotification:q({type:"cancelSubscription:failed",autoHide:!1,closeable:!0,state:t,status:"error",message:i("Failed to cancel subscription, please try again")})}}}async function Z$({data:e,state:t,api:a}){try{const{subscriptionId:n}=e;return await a.member.updateSubscription({subscriptionId:n,cancelAtPeriodEnd:!1}),{action:"continueSubscription:success",page:"accountHome",member:await a.member.sessionData()}}catch{const{t:i}=t;return{action:"continueSubscription:failed",popupNotification:q({type:"continueSubscription:failed",autoHide:!1,closeable:!0,state:t,status:"error",message:i("Failed to cancel subscription, please try again")})}}}async function Q$({data:e,state:t,api:a}){try{await a.member.editBilling(e)}catch{const{t:i}=t;return{action:"editBilling:failed",popupNotification:q({type:"editBilling:failed",autoHide:!1,closeable:!0,state:t,status:"error",message:i("Failed to update billing information, please try again")})}}}async function X$(){return{popupNotification:null}}async function e0({data:e,state:t}){let{action:a,message:n=""}=e;return a=a||"showPopupNotification:success",{popupNotification:q({type:a,autoHide:!0,closeable:!0,state:t,status:"success",message:n})}}async function t0({data:e,state:t,api:a}){try{const{newsletters:n,enableCommentNotifications:i}=e;if(!n&&i===void 0)return{};const r={};return n&&(r.newsletters=n),i!==void 0&&(r.enableCommentNotifications=i),{action:"updateNewsletterPref:success",member:await a.member.update(r)}}catch{const{t:i}=t;return{action:"updateNewsletterPref:failed",popupNotification:q({type:"updateNewsletter:failed",autoHide:!0,closeable:!0,state:t,status:"error",message:i("Failed to update newsletter settings")})}}}async function a0({state:e,api:t}){const{t:a}=e;try{return await t.member.deleteSuppression(),{action:"removeEmailFromSuppressionList:success",popupNotification:q({type:"removeEmailFromSuppressionList:success",autoHide:!0,closeable:!0,state:e,status:"success",message:a("You have been successfully resubscribed")})}}catch{return{action:"removeEmailFromSuppressionList:failed",popupNotification:q({type:"removeEmailFromSuppressionList:failed",autoHide:!0,closeable:!0,state:e,status:"error",message:a("Your email has failed to resubscribe, please try again")})}}}async function n0({data:e,state:t,api:a}){const{t:n}=t;try{const{subscribed:i}=e,r=await a.member.update({subscribed:i});if(!r)throw new Error("Failed to update newsletter");const o="updateNewsletter:success";return{action:o,member:r,popupNotification:q({type:o,autoHide:!0,closeable:!0,state:t,status:"success",message:n("Email newsletter settings updated")})}}catch{return{action:"updateNewsletter:failed",popupNotification:q({type:"updateNewsletter:failed",autoHide:!0,closeable:!0,state:t,status:"error",message:n("Failed to update newsletter settings")})}}}async function i0({data:e,state:t,api:a}){const{email:n}=e,i=aC({member:t.member});if(n!==i)try{return await a.member.updateEmailAddress({email:n}),{success:!0}}catch(r){return{success:!1,error:r}}return null}async function r0({data:e,state:t,api:a}){const{name:n}=e;if(iC({member:t.member})!==n)try{const r=await a.member.update({name:n});if(!r)throw new Error("Failed to update member");return{member:r,success:!0}}catch(r){return{success:!1,error:r}}return null}async function o0({state:e,api:t}){if(e.member)try{const a=await t.member.sessionData();return a?{member:a,success:!0,action:"refreshMemberData:success"}:null}catch(a){return{success:!1,error:a,action:"refreshMemberData:failed"}}return null}async function s0({data:e,state:t,api:a}){const{t:n}=t,[i,r]=await Promise.all([r0({data:e,state:t,api:a}),i0({data:e,state:t,api:a})]);if(i&&r){if(r.success)return{action:"updateProfile:success",...i.success?{member:i.member}:{},page:"accountHome",popupNotification:q({type:"updateProfile:success",autoHide:!0,closeable:!0,status:"success",state:t,message:n("Check your inbox to verify email update")})};const o=i.success?n("Failed to send verification email"):n("Failed to update account data");return{action:"updateProfile:failed",...i.success?{member:i.member}:{},popupNotification:q({type:"updateProfile:failed",autoHide:!0,closeable:!0,status:"error",message:o,state:t})}}else if(i){const o=i.success?"updateProfile:success":"updateProfile:failed",s=i.success?"success":"error",l=i.success?n("Account details updated successfully"):n("Failed to update account details");return{action:o,...i.success?{member:i.member}:{},...i.success?{page:"accountHome"}:{},popupNotification:q({type:o,autoHide:i.success,closeable:!0,status:s,state:t,message:l})}}else if(r){const o=r.success?"updateProfile:success":"updateProfile:failed",s=r.success?"success":"error";let l="";return r.error?l=Sa(r.error,n("Failed to send verification email")):l=n("Check your inbox to verify email update"),{action:o,...r.success?{page:"accountHome"}:{},popupNotification:q({type:o,autoHide:r.success,closeable:!0,status:s,state:t,message:l})}}return{action:"updateProfile:success",page:"accountHome",popupNotification:q({type:"updateProfile:success",autoHide:!0,closeable:!0,status:"success",state:t,message:n("Account details updated successfully")})}}async function l0({data:{siteUrl:e},state:t}){const a=Qo({siteUrl:e,apiUrl:"not-defined"}),{member:n}=t,i=window.location.href,r=zg(),o=await a.member.getIntegrityToken();return await a.member.sendMagicLink({emailType:"signup",name:n.name,email:n.email,autoRedirect:!1,integrityToken:o,customUrlHistory:t.site.outbound_link_tagging?[{time:Date.now(),referrerSource:r,referrerMedium:"Ghost Recommendations",referrerUrl:i}]:[]}),{}}function u0({data:{recommendationId:e},api:t}){try{const a=localStorage.getItem("ghost-recommendations-clicked"),n=a?JSON.parse(a):[];if(n.includes(e))return;n.push(e),localStorage.setItem("ghost-recommendations-clicked",JSON.stringify(n))}catch{}return t.recommendations.trackClicked({recommendationId:e}),{}}async function c0({data:{recommendationId:e},api:t}){return t.recommendations.trackSubscribed({recommendationId:e}),{}}const d0={togglePopup:Y$,openPopup:R$,closePopup:Lf,switchPage:_$,openNotification:L$,closeNotification:O$,back:U$,signout:B$,signin:V$,startSigninOTCFromCustomForm:H$,verifyOTC:W$,signup:K$,updateSubscription:q$,cancelSubscription:J$,continueSubscription:Z$,updateNewsletter:n0,updateProfile:s0,refreshMemberData:o0,clearPopupNotification:X$,editBilling:Q$,checkoutPlan:G$,updateNewsletterPreference:t0,showPopupNotification:e0,removeEmailFromSuppressionList:a0,oneClickSubscribe:l0,trackRecommendationClicked:u0,trackRecommendationSubscribed:c0};async function m0({action:e,data:t,state:a,api:n}){const i=d0[e];return i?await i({data:t,state:a,api:n})||{}:{}}function Of(e,t){e&&(e.innerText=t)}function p0(e,t,a,n){t.classList.add("error");const i=n("There was an error sending the email, please try again");Of(a,Sa(e,i))}async function h0({event:e,form:t,errorEl:a,siteUrl:n,submitHandler:i,labs:r={},doAction:o,captureException:s},l=c=>c){var S,j;t.removeEventListener("submit",i),e.preventDefault(),a&&(a.innerText=""),t.classList.remove("success","invalid","error");let c=e.target.querySelector("input[data-members-email]"),d=e.target.querySelector("input[data-members-name]"),p=((S=t==null?void 0:t.dataset)==null?void 0:S.membersAutoredirect)||"true",m=c==null?void 0:c.value,g=d&&d.value||void 0,b,v=[],f=[],h=e.target.querySelectorAll("input[data-members-label]")||[];for(let T=0;T<h.length;++T)v.push(h[T].value);let y=e.target.querySelectorAll("input[type=hidden][data-members-newsletter], input[type=checkbox][data-members-newsletter]:checked, input[type=radio][data-members-newsletter]:checked")||[];for(let T=0;T<y.length;++T)f.push({name:y[T].value});t.dataset.membersForm&&(b=t.dataset.membersForm);const x=b==="signin"&&((j=t==null?void 0:t.dataset)==null?void 0:j.membersOtc)==="true"&&(r==null?void 0:r.membersSigninOTC);t.classList.add("loading");const w=Ui(),C={email:m,emailType:b,labels:v,name:g,autoRedirect:p==="true"};x&&(C.includeOTC=!0),w&&(C.urlHistory=w),y.length>0?C.newsletters=f:(e.target.querySelectorAll("input[type=checkbox][data-members-newsletter]")||[]).length>0&&(C.newsletters=[]);try{const E=await(await fetch(`${n}/members/api/integrity-token/`,{method:"GET"})).text(),D=await fetch(`${n}/members/api/send-magic-link/`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({...C,integrityToken:E})});if(t.addEventListener("submit",i),t.classList.remove("loading"),D.ok){t.classList.add("success");let L;if(x)try{L=await D.clone().json()}catch{L=void 0}const ee=L==null?void 0:L.otc_ref;if(ee&&typeof o=="function")try{o("startSigninOTCFromCustomForm",{email:(m||"").trim(),otcRef:ee})}catch(Z){console.error(Z),s==null||s(Z)}}else{const L=await Tt.fromApiResponse(D),ee=Sa(L,l("Failed to send magic link email"));Of(a,ee),t.classList.add("error")}}catch(T){p0(T,t,a,l)}}function g0({event:e,el:t,errorEl:a,siteUrl:n,site:i,member:r,clickHandler:o}){const s=i.locale||"en",c=Gu(s,"portal").t;t.removeEventListener("click",o),e.preventDefault();let d=t.dataset.membersPlan,p=WE(i,d.toLowerCase()),m=t.dataset.membersSuccess,g=t.dataset.membersCancel,b,v;m&&(b=new URL(m,window.location.href).href),g&&(v=new URL(g,window.location.href).href),a&&(a.innerText=""),t.classList.add("loading");const f=r?{checkoutType:"upgrade"}:{},h=Ui();return h&&(f.urlHistory=h),fetch(`${n}/members/api/session`,{credentials:"same-origin"}).then(function(y){return y.ok?y.text():null}).then(function(y){return fetch(`${n}/members/api/create-stripe-checkout-session/`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({...p,identity:y,successUrl:b,cancelUrl:v,metadata:f})}).then(function(x){if(!x.ok)throw new Error(c("Could not create stripe checkout session"));return x.json()})}).then(function(y){return y.url?window.location.assign(y.url):window.Stripe(y.publicKey).redirectToCheckout({sessionId:y.sessionId}).then(function(w){if(w.error)throw new Error(w.error.message)})}).catch(function(y){console.error(y),t.addEventListener("click",o),t.classList.remove("loading"),a&&(a.innerText=y.message),t.classList.add("error")})}function f0({siteUrl:e,site:t={},member:a,labs:n={},doAction:i,captureException:r}={}){const o=t.locale||"en",l=Gu(o,"portal").t;e&&(e=e.replace(/\/$/,""),Array.prototype.forEach.call(document.querySelectorAll("form[data-members-form]"),function(c){let d=c.querySelector("[data-members-error]");function p(m){h0({event:m,errorEl:d,form:c,siteUrl:e,submitHandler:p,labs:n,doAction:i,captureException:r},l)}c.addEventListener("submit",p)}),Array.prototype.forEach.call(document.querySelectorAll("[data-members-plan]"),function(c){let d=c.querySelector("[data-members-error]");function p(m){g0({el:c,event:m,errorEl:d,member:a,site:t,siteUrl:e,clickHandler:p})}c.addEventListener("click",p)}),Array.prototype.forEach.call(document.querySelectorAll("[data-members-edit-billing]"),function(c){let d=c.querySelector("[data-members-error]"),p=c.dataset.membersSuccess,m=c.dataset.membersCancel,g,b;p&&(g=new URL(p,window.location.href).href),m&&(b=new URL(m,window.location.href).href);function v(f){c.removeEventListener("click",v),f.preventDefault(),d&&(d.innerText=""),c.classList.add("loading"),fetch(`${e}/members/api/session`,{credentials:"same-origin"}).then(function(h){return h.ok?h.text():null}).then(function(h){return fetch(`${e}/members/api/create-stripe-update-session/`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({identity:h,successUrl:g,cancelUrl:b})}).then(function(y){if(!y.ok)throw new Error(l("Could not create stripe checkout session"));return y.json()})}).then(function(h){return window.Stripe(h.publicKey).redirectToCheckout({sessionId:h.sessionId})}).then(function(h){if(h.error)throw new Error(l(h.error.message))}).catch(function(h){console.error(h),c.addEventListener("click",v),c.classList.remove("loading"),d&&(d.innerText=h.message),c.classList.add("error")})}c.addEventListener("click",v)}),Array.prototype.forEach.call(document.querySelectorAll("[data-members-signout]"),function(c){function d(p){c.removeEventListener("click",d),p.preventDefault(),c.classList.remove("error"),c.classList.add("loading"),fetch(`${e}/members/api/session`,{method:"DELETE"}).then(function(m){m.ok?window.location.replace(e):(c.addEventListener("click",d),c.classList.remove("loading"),c.classList.add("error"))})}c.addEventListener("click",d)}),Array.prototype.forEach.call(document.querySelectorAll("[data-members-cancel-subscription]"),function(c){let d=c.parentElement.querySelector("[data-members-error]");function p(m){c.removeEventListener("click",p),m.preventDefault(),c.classList.remove("error"),c.classList.add("loading");let g=c.dataset.membersCancelSubscription;return d&&(d.innerText=""),fetch(`${e}/members/api/session`,{credentials:"same-origin"}).then(function(b){return b.ok?b.text():null}).then(function(b){return fetch(`${e}/members/api/subscriptions/${g}/`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({identity:b,smart_cancel:!0})})}).then(function(b){b.ok?window.location.reload():(c.addEventListener("click",p),c.classList.remove("loading"),c.classList.add("error"),d&&(d.innerText=l("There was an error cancelling your subscription, please try again.")))})}c.addEventListener("click",p)}),Array.prototype.forEach.call(document.querySelectorAll("[data-members-continue-subscription]"),function(c){let d=c.parentElement.querySelector("[data-members-error]");function p(m){c.removeEventListener("click",p),m.preventDefault(),c.classList.remove("error"),c.classList.add("loading");let g=c.dataset.membersContinueSubscription;return d&&(d.innerText=""),fetch(`${e}/members/api/session`,{credentials:"same-origin"}).then(function(b){return b.ok?b.text():null}).then(function(b){return fetch(`${e}/members/api/subscriptions/${g}/`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({identity:b,cancel_at_period_end:!1})})}).then(function(b){b.ok?window.location.reload():(c.addEventListener("click",p),c.classList.remove("loading"),c.classList.add("error"),d&&(d.innerText=l("There was an error continuing your subscription, please try again.")))})}c.addEventListener("click",p)}))}const b0={showPopup:!0,site:Sn,member:as.free,page:"accountEmail",...F$(),pageData:Uf};function y0({site:e,children:t}){const{portal_sentry:a}=e||{};return a&&a.dsn?u.jsx(Vu,{children:t}):u.jsx(u.Fragment,{children:t})}class k0 extends Y.Component{constructor(t){super(t),this.setupCustomTriggerButton(t),this.state={site:null,member:null,page:"loading",showPopup:!1,action:"init:running",initStatus:"running",lastPage:null,customSiteUrl:t.customSiteUrl,locale:t.locale,scrollbarWidth:0,labs:t.labs||{}}}componentDidMount(){const t=this.getScrollbarWidth();this.setState({scrollbarWidth:t}),this.initSetup()}componentDidUpdate(t,a){var n,i,r;if(a.showPopup!==this.state.showPopup){this.handleCustomTriggerClassUpdate();try{this.state.showPopup?(this.bodyScroll=(r=(i=(n=window.document)==null?void 0:n.body)==null?void 0:i.style)==null?void 0:r.overflow,this.bodyMargin=window.getComputedStyle(document.body).getPropertyValue("margin-right"),window.document.body.style.overflow="hidden",this.state.scrollbarWidth&&(window.document.body.style.marginRight=`calc(${this.bodyMargin} + ${this.state.scrollbarWidth}px)`)):(window.document.body.style.overflow=this.bodyScroll||"",!this.bodyMargin||this.bodyMargin==="0px"?window.document.body.style.marginRight="":window.document.body.style.marginRight=this.bodyMargin)}catch{}}if(this.state.initStatus==="success"&&a.initStatus!==this.state.initStatus){const{siteUrl:o}=this.props,s=this.getContextFromState();this.sendPortalReadyEvent(),f0({siteUrl:o,site:s.site,member:s.member,labs:s.labs,doAction:s.doAction,captureException:co})}}componentWillUnmount(){clearTimeout(this.timeoutId),this.customTriggerButtons&&this.customTriggerButtons.forEach(t=>{t.removeEventListener("click",this.clickHandler)}),window.removeEventListener("hashchange",this.hashHandler,!1)}sendPortalReadyEvent(){window.self!==window.parent&&window.parent.postMessage({type:"portal-ready",payload:{}},"*")}getScrollbarWidth(){const t=document.createElement("div");t.style.visibility="hidden",t.style.overflow="scroll",document.body.appendChild(t),document.body.appendChild(t);const a=t.offsetWidth-t.clientWidth;return document.body.removeChild(t),a}setupCustomTriggerButton(){this.clickHandler=n=>{n.preventDefault();const i=n.currentTarget,r=i&&i.dataset.portal,{page:o,pageQuery:s,pageData:l}=this.getPageFromLinkPath(r)||{};this.state.initStatus==="success"&&(s&&s!=="free"?this.handleSignupQuery({site:this.state.site,pageQuery:s}):this.dispatchAction("openPopup",{page:o,pageQuery:s,pageData:l}))};const t="[data-portal]",a="gh-portal-close";this.customTriggerButtons=document.querySelectorAll(t)||[],this.customTriggerButtons.forEach(n=>{n.classList.add(a),n.removeEventListener("click",this.clickHandler),n.addEventListener("click",this.clickHandler)})}handleCustomTriggerClassUpdate(){var n;const t="gh-portal-open",a="gh-portal-close";(n=this.customTriggerButtons)==null||n.forEach(i=>{const r=this.state.showPopup?t:a,o=this.state.showPopup?a:t;i.classList.add(r),i.classList.remove(o)})}async initSetup(){try{const{site:t,member:a,page:n,showPopup:i,popupNotification:r,lastPage:o,pageQuery:s,pageData:l}=await this.fetchData(),c=this.props.siteI18nEnabled&&(this.props.locale||t.locale)||"en";Di.changeLanguage(c);const d={site:t,member:a,page:n,lastPage:o,pageQuery:s,showPopup:i,pageData:l,popupNotification:r,t:Di.t,dir:Di.dir()||"ltr",action:"init:success",initStatus:"success",locale:c};if(this.handleSignupQuery({site:t,pageQuery:s,member:a}),this.setState(d),this.hashHandler=()=>{this.updateStateForPreviewLinks()},window.addEventListener("hashchange",this.hashHandler,!1),!a){const p=document.querySelectorAll("[data-lexical-signup-form]");p.length>0&&p.forEach(m=>{m.style.display=""})}this.setupRecommendationButtons(),this.transformPortalLinksToRelative()}catch(t){console.error("[Portal] Failed to initialize:",t),this.setState({action:"init:failed",initStatus:"failed"})}}async fetchData(){const{site:t,member:a}=await this.fetchApiData(),{site:n,...i}=this.fetchDevData(),{site:r,...o}=this.fetchLinkData(t,a),{site:s,...l}=this.fetchPreviewData(),{site:c,...d}=this.fetchNotificationData();return{member:a,page:"",site:{...t,...r,...s,...c,...n,plans:{...(n||{}).plans,...(t||{}).plans,...(s||{}).plans}},...i,...o,...d,...l}}fetchDevData(){return J(["dev"])&&!this.state.customSiteUrl?b0:J(["test"])?{showPopup:this.props.showPopup!==void 0?this.props.showPopup:!0}:{}}fetchOfferQueryStrData(t=""){const a=new URLSearchParams(t),n={};for(let i of a.entries()){const r=i[0],o=decodeURIComponent(i[1]);r==="name"?n.name=o||"":r==="code"?n.code=o||"":r==="display_title"?n.display_title=o||"":r==="display_description"?n.display_description=o||"":r==="type"?n.type=o||"":r==="cadence"?n.cadence=o||"":r==="duration"?n.duration=o||"":r==="duration_in_months"&&!isNaN(Number(o))?n.duration_in_months=Number(o):r==="amount"&&!isNaN(Number(o))?n.amount=Number(o):r==="currency"?n.currency=o||"":r==="status"?n.status=o||"":r==="tier_id"&&(n.tier={id:o||Uf.tier.id})}return{page:"offer",pageData:n}}fetchQueryStrData(t=""){const a=new URLSearchParams(t),n={site:{plans:{}}},i=[];let r,o=null,s,l,c;for(let d of a.entries()){const p=d[0],m=decodeURIComponent(d[1]);if(p==="button")n.site.portal_button=JSON.parse(m);else if(p==="name")n.site.portal_name=JSON.parse(m);else if(p==="isFree"&&JSON.parse(m))i.push("free");else if(p==="isMonthly"&&JSON.parse(m))i.push("monthly");else if(p==="isYearly"&&JSON.parse(m))i.push("yearly");else if(p==="portalPrices")r=m?m.split(","):[];else if(p==="portalProducts")o=m?m.split(","):[];else if(p==="page"&&m)n.page=m;else if(p==="accentColor"&&(m===""||m))n.site.accent_color=m;else if(p==="buttonIcon"&&m)n.site.portal_button_icon=m;else if(p==="signupButtonText")n.site.portal_button_signup_text=m||"";else if(p==="signupTermsHtml")n.site.portal_signup_terms_html=m||"";else if(p==="signupCheckboxRequired")n.site.portal_signup_checkbox_required=JSON.parse(m);else if(p==="buttonStyle"&&m)n.site.portal_button_style=m;else if(p==="monthlyPrice"&&!isNaN(Number(m)))n.site.plans.monthly=Number(m),s=Number(m);else if(p==="yearlyPrice"&&!isNaN(Number(m)))n.site.plans.yearly=Number(m),l=Number(m);else if(p==="currency"&&m){const g=m.toUpperCase();n.site.plans.currency=g,n.site.plans.currency_symbol=he(g),c=g}else p==="disableBackground"?n.site.disableBackground=JSON.parse(m):p==="membersSignupAccess"&&m?n.site.members_signup_access=m:p==="portalDefaultPlan"&&m&&(n.site.portal_default_plan=m)}return n.site.portal_plans=i,n.site.portal_products=o,r?n.site.portal_plans=r:s&&l&&c&&(n.site.prices=[{id:"monthly",stripe_price_id:"dummy_stripe_monthly",stripe_product_id:"dummy_stripe_product",active:1,nickname:"Monthly",currency:c,amount:s,type:"recurring",interval:"month"},{id:"yearly",stripe_price_id:"dummy_stripe_yearly",stripe_product_id:"dummy_stripe_product",active:1,nickname:"Yearly",currency:c,amount:l,type:"recurring",interval:"year"}]),n}fetchNotificationData(){const{type:t,status:a,duration:n,autoHide:i,closeable:r}=Vg({billingOnly:!0})||{};return["stripe:billing-update"].includes(t)?a==="success"?{showPopup:!0,popupNotification:q({type:t,status:a,duration:n,closeable:r,autoHide:i,state:this.state,message:a==="success"?"Billing info updated successfully":""})}:{showPopup:!0}:{}}fetchLinkData(t,a){const n=new URLSearchParams(window.location.search);if(n.get("action")==="unsubscribe")return n.get("key")&&n.get("uuid")?{showPopup:!0,page:"unsubscribe",pageData:{uuid:n.get("uuid"),key:n.get("key"),newsletterUuid:n.get("newsletter"),comments:n.get("comments")}}:{showPopup:!0,page:"accountEmail",pageData:{newsletterUuid:n.get("newsletter"),action:"unsubscribe",redirect:t.url+"#/portal/account/newsletters"}};if(qE({site:t})&&n.get("action")==="signup"&&n.get("success")==="true")return{showPopup:!0,page:"recommendations",pageData:{signup:!0}};const[i,r]=window.location.hash.substr(1).split("?"),o=new URLSearchParams(r??""),s=/^(?:(\w+?))?\/monthly$/,l=/^(?:(\w+?))?\/yearly$/,c=/^offers\/(\w+?)\/?$/,d=/^\/portal\/?(?:\/(\w+(?:\/\w+)*))?\/?$/,p=/^\/feedback\/(\w+?)\/(\w+?)\/?$/;if(i&&p.test(i)){const[,m,g]=i.match(p),b=parseInt(g);if(b===1||b===0)return a||o.get("uuid")&&o.get("key")?{showPopup:!0,page:"feedback",pageData:{uuid:a?null:o.get("uuid"),key:a?null:o.get("key"),postId:m,score:b}}:{showPopup:!0,page:"signin",pageData:{redirect:t.url+`#/feedback/${m}/${b}/`}}}if(i&&d.test(i)){const[,m]=i.match(d),{page:g,pageQuery:b,pageData:v}=this.getPageFromLinkPath(m,t)||{},f=["accountPlan","accountProfile"].includes(g)?"accountHome":null;return{showPopup:!(["monthly","yearly"].includes(b)||s.test(b)||l.test(b)||c.test(b)),...g?{page:g}:{},...b?{pageQuery:b}:{},...v?{pageData:v}:{},...f?{lastPage:f}:{}}}return{}}fetchPreviewData(){const[,t]=window.location.hash.substr(1).split("?");if(J(["preview"])){let a={};return J(["offerPreview"])?a=this.fetchOfferQueryStrData(t):a=this.fetchQueryStrData(t),{...a,showPopup:!0}}return{}}getColorOverride(){const t=document.querySelector("script[data-ghost]");return t&&t.dataset.accentColor?t.dataset.accentColor:!1}async fetchApiData(){const{siteUrl:t,customSiteUrl:a,apiUrl:n,apiKey:i}=this.props;try{this.GhostApi=this.props.api||Qo({siteUrl:t,apiUrl:n,apiKey:i});const{site:r,member:o}=await this.GhostApi.init(),s=this.getColorOverride();return s&&(r.accent_color=s),this.setupFirstPromoter({site:r,member:o}),this.setupSentry({site:r}),{site:r,member:o}}catch(r){if(J(["dev","test"],{customSiteUrl:a}))return{};throw r}}setupSentry({site:t}){if(J(["test"]))return null;const{portal_sentry:a,portal_version:n,version:i}=t,o=`portal@2.55.1|ghost@${i}`;a&&a.dsn&&WS({dsn:a.dsn,environment:a.env||"development",release:o,beforeSend:s=>RE({event:s})?s:null,allowUrls:[/https?:\/\/((www)\.)?unpkg\.com\/@tryghost\/portal/]})}setupFirstPromoter({site:t,member:a}){if(J(["test"]))return null;const n=nC({site:t});let i=rc({site:t});if(i=i==null?void 0:i.replace(/^(\S*\.)?(\S*\.\S*)$/i,".$2"),n&&i){const r=document.createElement("script");r.type="text/javascript",r.async=!0,r.src="https://cdn.firstpromoter.com/fprom.js",r.onload=r.onreadystatechange=function(){let s=this.readyState;if(!s||s==="complete"||s==="loaded")try{if(window.$FPROM.init(n,i),pC({member:a})){const l=a.email,c=a.uuid;if(window.$FPROM)window.$FPROM.trackSignup({email:l,uid:c});else{const d=window._fprom||[];window._fprom=d,d.push(["event","signup"]),d.push(["email",l]),d.push(["uid",c])}}}catch{}};const o=document.getElementsByTagName("script")[0];o.parentNode.insertBefore(r,o)}}async dispatchAction(t,a){clearTimeout(this.timeoutId),this.setState({action:`${t}:running`});try{const n=await m0({action:t,data:a,state:this.state,api:this.GhostApi});this.setState(n),n&&n.action&&!n.action.includes(":failed")&&(this.timeoutId=setTimeout(()=>{this.setState({action:""})},2e3))}catch(n){if(console.error(`[Portal] Failed to dispatch action: ${t}`,n),a&&a.throwErrors)throw n;const i=q({type:`${t}:failed`,autoHide:!0,closeable:!0,status:"error",state:this.state,meta:{error:n}});this.setState({action:`${t}:failed`,popupNotification:i})}}updateStateForPreviewLinks(){const{site:t,...a}=this.fetchPreviewData(),{site:n,...i}=this.fetchLinkData(),r={site:{...this.state.site,...n||{},...t||{},plans:{...this.state.site&&this.state.site.plans,...(n||{}).plans,...(t||{}).plans}},...i,...a};this.handleSignupQuery({site:r.site,pageQuery:r.pageQuery}),this.setState(r)}async handleOfferQuery({site:t,offerId:a,member:n=this.state.member}){const{portal_button:i}=t;if(Xu(),!ct({member:n}))try{const r=await this.GhostApi.site.offer({offerId:a}),o=r==null?void 0:r.offers[0];if(lC({site:t,offer:o}))if(i)this.dispatchAction("openPopup",{page:"offer",pageData:r==null?void 0:r.offers[0]});else{const s=bn({site:t,productId:o.tier.id}),l=o.cadence==="month"?s.monthlyPrice:s.yearlyPrice;if(this.dispatchAction("openPopup",{page:"loading"}),n){const{tierId:c,cadence:d}=xa({site:t,priceId:l.id});this.dispatchAction("checkoutPlan",{plan:l.id,offerId:a,tierId:c,cadence:d})}else{const{tierId:c,cadence:d}=xa({site:t,priceId:l.id});this.dispatchAction("signup",{plan:l.id,offerId:a,tierId:c,cadence:d})}}}catch{}}handleSignupQuery({site:t,pageQuery:a,member:n}){const i=/^offers\/(\w+?)\/?$/;let r=a;if(i.test(a||"")){const[,s]=a.match(i);this.handleOfferQuery({site:t,offerId:s,member:n});return}Mg({site:t,pageQuery:a})&&(r=Mg({site:t,pageQuery:a}));const o=KE({site:t,priceId:r});if(a&&a!=="free"){Xu();const s=(o==null?void 0:o.id)||r;s!=="free"&&this.dispatchAction("openPopup",{page:"loading"});const{tierId:l,cadence:c}=xa({site:t,priceId:s});this.dispatchAction("signup",{plan:s,tierId:l,cadence:c})}}getPageFromLinkPath(t){const a=/^signup\/?(?:\/(\w+?))?\/?$/,n=/^signup\/?(?:\/(\w+?))\/monthly\/?$/,i=/^signup\/?(?:\/(\w+?))\/yearly\/?$/,r=/^offers\/(\w+?)\/?$/;if(t===void 0||t==="")return{page:"default"};if(r.test(t))return{pageQuery:t};if(t==="signup")return{page:"signup"};if(n.test(t)){const[,o]=t.match(n);return{page:"signup",pageQuery:`${o}/monthly`}}else if(i.test(t)){const[,o]=t.match(i);return{page:"signup",pageQuery:`${o}/yearly`}}else if(a.test(t)){const[,o]=t.match(a);return{page:"signup",pageQuery:o}}else{if(t==="signup/free")return{page:"signup",pageQuery:"free"};if(t==="signup/monthly")return{page:"signup",pageQuery:"monthly"};if(t==="signup/yearly")return{page:"signup",pageQuery:"yearly"};if(t==="signin")return{page:"signin"};if(t==="account")return{page:"accountHome"};if(t==="account/plans")return{page:"accountPlan"};if(t==="account/profile")return{page:"accountProfile"};if(t==="account/newsletters")return{page:"accountEmail"};if(t==="support")return{page:"support"};if(t==="support/success")return{page:"supportSuccess"};if(t==="support/error")return{page:"supportError"};if(t==="recommendations")return{page:"recommendations",pageData:{signup:!1}};if(t==="account/newsletters/help")return{page:"emailReceivingFAQ",pageData:{direct:!0}};if(t==="account/newsletters/disabled")return{page:"emailSuppressionFAQ",pageData:{direct:!0}}}return{page:"default"}}getAccentColor(){const{accent_color:t}=this.state.site||{};return t}getContextPage({site:t,page:a,member:n}){if(!a||a==="default"){const i=dt({site:t})||!jt({site:t})?"signin":"signup";a=n?"accountHome":i}return a==="accountPlan"&&Qt({member:n})&&!Mi({member:n})&&(a="accountHome"),vc({page:a})}getContextMember({page:t,member:a,customSiteUrl:n}){return J(["dev","preview"],{customSiteUrl:n})?$$({page:t})||T$({page:t})?J(["dev"],{customSiteUrl:n})?a||as.free:J(["preview"])?as.preview:as.paid:null:a}getContextFromState(){const{site:t,member:a,action:n,page:i,lastPage:r,showPopup:o,pageQuery:s,pageData:l,popupNotification:c,customSiteUrl:d,t:p,dir:m,scrollbarWidth:g,labs:b,otcRef:v}=this.state,f=this.getContextPage({site:t,page:i,member:a}),h=this.getContextMember({page:f,member:a,customSiteUrl:d});return{api:this.GhostApi,site:t,action:n,brandColor:this.getAccentColor(),page:f,pageQuery:s,pageData:l,member:h,lastPage:r,showPopup:o,popupNotification:c,customSiteUrl:d,t:p,dir:m,scrollbarWidth:g,labs:b,otcRef:v,doAction:(y,x)=>this.dispatchAction(y,x)}}getRecommendationButtons(){return document.querySelectorAll("[data-recommendation]")||[]}setupRecommendationButtons(){const t=n=>{const i=n.currentTarget.dataset.recommendation;i?this.dispatchAction("trackRecommendationClicked",{recommendationId:i}).catch(console.error):console.warn("[Portal] Invalid usage of data-recommendation attribute")},a=this.getRecommendationButtons();for(const n of a)n.addEventListener("click",t,{passive:!0})}transformPortalLinksToRelative(){document.querySelectorAll('a[href*="#/portal"]').forEach(M$)}render(){return this.state.initStatus==="success"?u.jsx(y0,{site:this.state.site,children:u.jsxs(z.Provider,{value:this.getContextFromState(),children:[u.jsx(Ff,{}),u.jsx(Lg,{}),u.jsx(Wg,{})]})}):null}}const Bf="ghost-portal-root";function v0(){const e=document.createElement("div");e.id=Bf,document.body.appendChild(e)}function w0(){const e=document.querySelector("script[data-ghost]");if(e){const t=e.dataset.i18n==="true",a=e.dataset.ghost,n=e.dataset.key,i=e.dataset.api,r=e.dataset.locale,o={};return o.membersSigninOTC=e.dataset.membersSigninOtc==="true",o.membersSigninOTCAlpha=e.dataset.membersSigninOtcAlpha==="true",{siteUrl:a,apiKey:n,apiUrl:i,siteI18nEnabled:t,locale:r,labs:o}}return{}}function x0(){const e=new URL(window.location.href);e.searchParams.get("token")&&(e.searchParams.delete("token"),window.history.replaceState({},document.title,e.href))}function S0(){v0(),x0()}function E0(){const{siteUrl:e,apiKey:t,apiUrl:a,siteI18nEnabled:n,locale:i,labs:r}=w0(),o=e||window.location.origin;S0(),tk.render(u.jsx(Y.StrictMode,{children:u.jsx(k0,{siteUrl:o,customSiteUrl:e,apiKey:t,apiUrl:a,siteI18nEnabled:n,locale:i,labs:r})}),document.getElementById(Bf))}E0()});
|
|
3493
3493
|
//# sourceMappingURL=portal.min.js.map
|