1"use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[3853],{2125:(e,t,n)=>{n.d(t,{R:()=>l});var a=n(2450),r=n.n(a);let o={en:null,zh:"zh-cn","zh-Hant":"zh-tw",es:"es","pt-BR":"pt-br",ja:"ja",ko:"ko",tr:"tr",ar:"ar",vi:"vi",fr:"fr",de:"de"},i={en:"en",zh:"zh-cn","zh-Hant":"zh-tw",es:"es","pt-BR":"pt-br",ja:"ja",ko:"ko",tr:"tr",ar:"ar",vi:"vi",fr:"fr",de:"de"};async function s(e){let t=o[e];if(t)switch(t){case"zh-cn":await n.e(7334).then(n.t.bind(n,27334,23));break;case"zh-tw":await n.e(8278).then(n.t.bind(n,88278,23));break;case"es":await n.e(8785).then(n.t.bind(n,81166,23));break;case"pt-br":await n.e(6749).then(n.t.bind(n,26749,23));break;case"ja":await n.e(8283).then(n.t.bind(n,38283,23));break;case"ko":await n.e(2864).then(n.t.bind(n,92864,23));break;case"tr":await n.e(224).then(n.t.bind(n,90224,23));break;case"ar":await n.e(4293).then(n.t.bind(n,14293,23));break;case"vi":await n.e(3596).then(n.t.bind(n,91215,23));break;case"fr":await n.e(9010).then(n.t.bind(n,29010,23));break;case"de":await n.e(6317).then(n.t.bind(n,36317,23))}}async function l(e){await s(e),r().locale(i[e])}},12252:(e,t,n)=>{n.d(t,{A:()=>m,C:()=>b});var a=n(79490),r=n(77066),o=n(39162),i=n(4132),s=n(54391),l=n(77598);function c(e){let{messageKey:t}=e,n=(0,o.c)("shareOverlay");return(0,a.jsx)("span",{children:n.rich(t,{strong:e=>(0,a.jsx)("strong",{className:"font-semibold text-[#141313]",children:e})})})}function d(e){let{open:t,variant:n,appStoreUrl:i,androidDownloadUrl:d,isAndroidApkDownload:u,huaweiAppGalleryUrl:p,isHuawei:h,onClose:f,onTryAgain:w,onContinueOnWeb:m,platform:b}=e,x=(0,o.c)("shareOverlay"),[g,v]=r.useState(!1);if(r.useEffect(()=>{v(!0)},[]),r.useEffect(()=>{if(!t)return;let e=document.body.style.overflow;return document.body.style.overflow="hidden",()=>{document.body.style.overflow=e}},[t]),!g||!t)return null;let y="ios"===b,k="android"===b,j=x("in-app-browser"===n?"titleInAppBrowser":"titleInstallFailed"),_=x("in-app-browser"===n?"subtitleInAppBrowser":"subtitleInstall");return(0,s.createPortal)((0,a.jsxs)("div",{className:"fixed inset-0 z-[100]",role:"dialog","aria-modal":"true","aria-labelledby":"share-open-app-fallback-title",children:[(0,a.jsx)("button",{type:"button","aria-label":x("close"),className:"absolute inset-0 bg-[#141313]/78",onClick:f}),(0,a.jsx)("div",{className:"relative flex h-full items-end justify-center px-4 pb-[max(1rem,env(safe-area-inset-bottom))] pt-4 sm:items-center sm:pb-4",children:(0,a.jsxs)("div",{className:"relative z-[1] w-full max-w-md animate-[shareModalIn_320ms_ease-out_both] overflow-hidden rounded-[28px] border border-[#E8DFD1] bg-[#FFFDF8] shadow-[0_28px_80px_rgba(20,19,19,0.35)]",onClick:e=>e.stopPropagation(),children:[(0,a.jsxs)("div",{className:"border-b border-[#E8DFD1] bg-white px-6 pb-5 pt-7",children:[(0,a.jsx)("div",{className:"mx-auto mb-5 h-16 w-16 overflow-hidden rounded-[22px] shadow-[0_14px_32px_rgba(20,19,19,0.16)]",children:(0,a.jsx)(l.default,{src:"/images/share/xpeak-app-icon.png",alt:"Xpeak",width:64,height:64,className:"h-16 w-16 object-cover",priority:!0})}),(0,a.jsx)("p",{className:"text-center text-[11px] font-semibold uppercase tracking-[0.16em] text-[#a67c52]",children:x("brandLabel")}),(0,a.jsx)("h2",{id:"share-open-app-fallback-title",className:"mt-2 text-center text-[1.65rem] font-bold leading-tight tracking-tight text-[#141313]",children:j}),(0,a.jsx)("p",{className:"mt-3 text-center text-sm leading-6 text-[#4a4545]",children:_})]}),(0,a.jsxs)("div",{className:"bg-[#FFFDF8] px-6 pb-6 pt-5",children:["in-app-browser"===n?(0,a.jsxs)("ol",{className:"space-y-3 rounded-2xl border border-[#E8DFD1] bg-white p-4 text-sm leading-6 text-[#4a4545]",children:[(0,a.jsxs)("li",{className:"flex gap-3",children:[(0,a.jsx)("span",{className:"flex h-6 w-6 shrink-0 items-center justify-center rounded-full bg-[#FF6B6B] text-xs font-bold text-white",children:"1"}),(0,a.jsx)(c,{messageKey:"step1"})]}),(0,a.jsxs)("li",{className:"flex gap-3",children:[(0,a.jsx)("span",{className:"flex h-6 w-6 shrink-0 items-center justify-center rounded-full bg-[#FF6B6B] text-xs font-bold text-white",children:"2"}),(0,a.jsx)(c,{messageKey:"step2"})]}),(0,a.jsxs)("li",{className:"flex gap-3",children:[(0,a.jsx)("span",{className:"flex h-6 w-6 shrink-0 items-center justify-center rounded-full bg-[#FF6B6B] text-xs font-bold text-white",children:"3"}),(0,a.jsx)(c,{messageKey:"step3"})]})]}):null,(0,a.jsxs)("div",{className:"space-y-3 ".concat("in-app-browser"===n?"mt-5":""),children:[y?(0,a.jsx)("a",{href:i,className:"flex h-12 w-full items-center justify-center rounded-full bg-[#FF6B6B] px-5 text-sm font-bold uppercase tracking-[0.08em] text-white shadow-[0_12px_28px_rgba(255,107,107,0.38)] transition-transform active:scale-[0.98]",children:x("appStoreCta")}):null,y||k?null:(0,a.jsx)("a",{href:d,className:"flex h-12 w-full items-center justify-center rounded-full bg-[#FF6B6B] px-5 text-sm font-bold uppercase tracking-[0.08em] text-white shadow-[0_12px_28px_rgba(255,107,107,0.38)] transition-transform active:scale-[0.98]",children:x("androidApkCta")}),k&&h?(0,a.jsx)("a",{href:p,className:"flex h-12 w-full items-center justify-center rounded-full bg-[#FF6B6B] px-5 text-sm font-bold uppercase tracking-[0.08em] text-white shadow-[0_12px_28px_rgba(255,107,107,0.38)] transition-transform active:scale-[0.98]",children:x("huaweiAppGalleryCta")}):null,k&&!h?(0,a.jsx)("a",{href:d,className:"flex h-12 w-full items-center justify-center rounded-full bg-[#FF6B6B] px-5 text-sm font-bold uppercase tracking-[0.08em] text-white shadow-[0_12px_28px_rgba(255,107,107,0.38)] transition-transform active:scale-[0.98]",children:x(u?"androidApkCta":"googlePlayCta")}):null,(0,a.jsx)("button",{type:"button",onClick:w,className:"h-11 w-full rounded-full border border-[#
1E8DFD1] bg-white text-sm font-semibold text-[#85653d]",children:x("tryAgain")}),(0,a.jsx)("button",{type:"button",onClick:m,className:"h-11 w-full rounded-full bg-[#F0E8DC] text-sm font-semibold text-[#4a4545]",children:x("continueOnWeb")})]})]})]})})]}),document.body)}var u=n(41616),p=n(41568),h=n(49287);let f=/MicroMessenger|Weibo|QQ\/|AlipayClient|Douyin|aweme|FBAN|FBAV|Line\//i;var w=n(4236);function m(e){let{target:t,continueOnWebHref:n,host:s,countryHeader:l}=e,c=(0,o.c)("shareOverlay"),[m,b]=r.useState(!1),[x,g]=r.useState("install"),[v,y]=r.useState(!1),[k,j]=r.useState("unknown"),[_,C]=r.useState(!1),[F,N]=r.useState(null),[A,E]=r.useState(void 0);r.useEffect(()=>{let e=window.navigator.userAgent;j((0,p.Fj)(e)),C((0,p.Ej)(e)),E(new URLSearchParams(window.location.search))},[]),r.useEffect(()=>{if(!(0,w.nO)(s,window.navigator.userAgent))return;let e="".concat(window.location.origin).concat(window.location.pathname).concat(window.location.search);(0,w.BO)({host:s,apiBaseUrl:"https://xpeak.ai",currentUrl:e}).then(t=>{if(null==t?void 0:t.appId)return void N(t.appId);(0,w.nO)(s,window.navigator.userAgent)&&console.warn("[WechatOpenLaunchApp] SDK not ready; using legacy open button",{host:s,currentUrl:e})})},[s]);let B=r.useMemo(()=>(0,p.m3)(),[]),I=r.useMemo(()=>(0,h.sO)(s),[s]),L=r.useMemo(()=>(0,h.Rz)(s),[s]),z=r.useMemo(()=>{let e=(0,p.td)({headers:l?{"cf-ipcountry":l}:void 0,browserLocale:"undefined"!=typeof navigator?navigator.language:void 0,host:s});return(0,p.Yn)(e)},[l,s]),D=r.useMemo(()=>(function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:window.location.origin,n=e.startsWith("/")?e:"/".concat(e);return"".concat(t.replace(/\/+$/,"")).concat(n)})(n),[n]),S=r.useMemo(()=>(0,w.xA)(t,A),[t,A]),M=r.useCallback(e=>{if("opened"!==e){var t;g("blocked"===e||(t=window.navigator.userAgent,f.test(t))?"in-app-browser":"install"),b(!0)}},[]),O=r.useCallback(async()=>{if(v)return;y(!0),b(!1);let e=await function(e,t){var n;let a=arguments.length>2&&void 0!==arguments[2]?arguments[2]:2200,r=(n=window.navigator.userAgent,f.test(n)),o=(0,p.MN)(e);return new Promise(e=>{let t=!1,n=n=>{t||(t=!0,i(),window.clearTimeout(s),e(n))},i=function(e){let t=()=>e(),n=()=>{"hidden"===document.visibilityState&&t()};return document.addEventListener("visibilitychange",n),window.addEventListener("pagehide",t),window.addEventListener("blur",t),()=>{document.removeEventListener("visibilitychange",n),window.removeEventListener("pagehide",t),window.removeEventListener("blur",t)}}(()=>n("opened")),s=window.setTimeout(()=>{n(r?"blocked":"failed")},r?Math.min(a,900):a),l=document.createElement("a");l.href=o,l.style.display="none",document.body.appendChild(l),l.click(),document.body.removeChild(l);let c=document.createElement("iframe");c.style.display="none",c.src=o,document.body.appendChild(c),window.setTimeout(()=>{c.remove()},800),window.location.href=o})}(t,s);y(!1),M(e)},[s,v,M,t]),R=r.useCallback(()=>{b(!1),!function(e){let t=window.navigator.userAgent;if(/Android/i.test(t)&&/MicroMessenger|Weibo|QQ\/|AlipayClient|Douyin|aweme/i.test(t)){let t=e.replace(/^https?:\/\//,"");return window.location.href="intent://".concat(t,"#Intent;scheme=https;action=android.intent.action.VIEW;category=android.intent.category.BROWSABLE;end"),!0}return null!=window.open(e,"_blank","noopener,noreferrer")}(D)&&window.location.assign(D)},[D]),W=r.useCallback(()=>{console.warn("[WechatOpenLaunchApp] open tag error; showing in-app-browser fallback"),M("blocked")},[M]),P=r.useCallback(()=>{if(F&&(0,w.nO)(s,window.navigator.userAgent))return void b(!1);O()},[s,O,F]);return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(i.n,{onContinueOnWeb:R}),(0,a.jsx)("div",{className:"pointer-events-none fixed inset-x-0 bottom-[calc(env(safe-area-inset-bottom)+4.75rem)] z-[60] px-4",children:(0,a.jsx)("div",{className:"pointer-events-auto mx-auto flex w-full max-w-md justify-center",children:(0,a.jsx)("div",{className:"inline-flex rounded-[999px] border border-[#E8DFD1] bg-white p-1.5 shadow-[0_16px_40px_rgba(20,19,19,0.14)]",children:F?(0,a.jsx)(u.J,{appId:F,extInfo:S,label:c("openInApp"),onError:W}):(0,a.jsx)("button",{type:"button",onClick:()=>void O(),disabled:v,className:"h-11 min-w-[12rem] whitespace-nowrap rounded-full bg-[#FF6B6B] px-7 text-sm font-bold uppercase tracking-wide text-white shadow-[0_10px_24px_rgba(255,107,107,0.38)] transition-transform active:scale-[0.98] disabled:opacity-80",children:c(v?"opening":"openInApp")})})})}),(0,a.jsx)(d,{open:m,variant:x,appStoreUrl:z,androidDownloadUrl:I,isAndroidApkDownload:L,huaweiAppGalleryUrl:B,isHuawei:_,platform:k,onClose:()=>b(!1),onTryAgain:P,onContinueOnWeb:R})]})}function b(e){return e?"share-overlay-active pb-[calc(env(safe-area-inset-bottom)+6.5rem)]":""}},36046:(e,t,n)=>{function a(e){e.isLoggedIn&&e.update({display_language:e.locale}).catch(()=>void 0)}async function r(e){var t,n;let a=(t=e.userId,n=e.locale,"".concat("display_language_synced:").concat(t,":").concat(n));if("1"===e.storage.getItem(a))return;let r=t=>{t&&"object"==typeof t&&!0===t.updated&&e.storage.setItem(a,"1")};
1try{r(await e.update())}catch(t){try{r(await e.update())}catch(t){e.storage.removeItem(a)}}}function o(e){e.userId&&r({storage:window.sessionStorage,userId:e.userId,locale:e.locale,update:e.update})}n.d(t,{$C:()=>r,N8:()=>a,dR:()=>o})},36899:(e,t,n)=>{n.d(t,{E:()=>a});function a(e){let{pathname:t,user:n,loading:a}=e;if(null==t?void 0:t.startsWith("/student/chat"))return"hidden";let r=["/","/meet-grace","/pricing","/business","/help","/support","/become-a-tutor","/word-maze","/topic-spark","/sentence-explorer","/xpeakai","/career"].some(e=>t===e||(null==t?void 0:t.startsWith(e+"/"))),o=!!(null==t?void 0:t.startsWith("/student/")),i="/pricing"===t&&!!n;return a?o||i?"student":"marketing":(!r&&n||o&&n||i)&&n&&(o||i)?"student":"marketing"}},49287:(e,t,n)=>{n.d(t,{Ay:()=>d,Pj:()=>u,Rz:()=>f,Vc:()=>p,rm:()=>r,sO:()=>h,w$:()=>b});var a=n(41568);let r="https://play.google.com/store/apps/details?id=com.xpeak.xpeak",o=/^[a-z]{2}$/i;function i(e){var t;let n=null!=(t=null==e?void 0:e.trim().toLowerCase())?t:"";return o.test(n)&&"xx"!==n&&"t1"!==n?n:null}function s(e){return"xpeak.com.cn"===e}function l(e){return s(e)?"cn":"us"}function c(e){return s(e)?"https://oss.xpeak.com.cn/release/xpeak-release.apk":"https://bmzoowznbwxkqwxbcvjy.supabase.co/storage/v1/object/public/system-files/release/xpeak-release.apk"}function d(){return c(window.location.host)}function u(e){var t;let n=l(e.host);if("cn"===n)return(0,a.Yn)("cn");let r=null!=(t=i(e.country))?t:n;return(0,a.Yn)(r)}function p(){return u({host:window.location.host})}function h(e){return s(e)?c(e):r}function f(e){return s(e)}async function w(e){let t=await fetch(e,{cache:"no-store"});return t.ok?i((await t.json()).country):null}async function m(){var e;let t=await fetch("https://www.cloudflare.com/cdn-cgi/trace",{cache:"no-store"});if(!t.ok)return null;let n=(await t.text()).match(/(?:^|\n)loc=([A-Za-z]{2})(?:\n|$)/);return i(null!=(e=null==n?void 0:n[1])?e:null)}async function b(e){try{let e=await w("/api/client-region");if(e)return e}catch(e){}try{let e=await m();if(e)return e}catch(e){}return l(e)}},49886:(e,t,n)=>{n.d(t,{B3:()=>r,Mv:()=>i,Wx:()=>a,dI:()=>o});let a=76,r=16;function o(e,t){if(e<=0)return"";let n=e/375,a=e=>(e*n).toFixed(2),r=t/n-38.2402;return["M ".concat(a(375)," 76.16"),"V 11","H ".concat(a(r+69.9551)),"C ".concat(a(r+64.8776)," 10.9997 ").concat(a(r+59.9111)," 9.5128 ").concat(a(r+55.6689)," 6.7227"),"L ".concat(a(r+55.1416)," 6.3809"),"C ".concat(a(r+49.5181)," 2.7938 ").concat(a(r+43.8842)," 1.0001 ").concat(a(r+38.2402)," 1"),"C ".concat(a(r+32.3014)," 1 ").concat(a(r+26.2005)," 2.9862 ").concat(a(r+19.9385)," 6.959"),"L ".concat(a(r+19.4893)," 7.2363"),"C ".concat(a(r+15.4303)," 9.6957 ").concat(a(r+10.7721)," 10.9993 ").concat(a(r+6.01953)," 11"),"H ".concat(a(0)),"V 76.16","H ".concat(a(375)),"Z"].join(" ")}function i(e,t,n){if(e<=0||n<=0)return e/2;let a=e/n;return a*t+a/2}},70820:(e,t,n)=>{n.d(t,{RolesProvider:()=>c,z:()=>d});var a=n(79490),r=n(77066),o=n(43352),i=n(34600);let s=(0,r.createContext)({roles:[],loading:!0,refreshRoles:()=>{}});function l(e){return Array.isArray(e)?e.map(e=>String(e).toLowerCase()).filter(Boolean):[]}let c=e=>{let{children:t}=e,{user:n}=(0,o.As)(),c=(0,r.useRef)(n);c.current=n;let[d,u]=(0,r.useState)([]),[p,h]=(0,r.useState)(!0),f=(0,r.useCallback)(async()=>{if(!(0,i.iD)()){u([]),h(!1);return}h(!0);try{let e=await i.HJ.getRoles();u(l(e))}catch(n){var e,t;console.error("RolesProvider: Exception fetching roles:",n),u(l((null==(t=c.current)||null==(e=t.user_metadata)?void 0:e.roles)||[]))}finally{h(!1)}},[]);return(0,r.useEffect)(()=>{f()},[f]),(0,r.useEffect)(()=>{let e=e=>{("xpeak_access_token"===e.key||"xpeak_refresh_token"===e.key)&&f()},t=()=>{f()};return window.addEventListener("storage",e),window.addEventListener("tokenUpdated",t),()=>{window.removeEventListener("storage",e),window.removeEventListener("tokenUpdated",t)}},[f]),(0,a.jsx)(s.Provider,{value:{roles:d,loading:p,refreshRoles:f},children:t})},d=()=>(0,r.useContext)(s)}}]);
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.