@tinkerlandai/longplay-sdk 0.10.15 → 0.10.16
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/CHANGELOG.md +6 -0
- package/README.md +13 -15
- package/README.zh-CN.md +14 -16
- package/dist/{ai-usage-C3dCagmQ.d.ts → ai-usage-DejUdb17.d.ts} +1 -1
- package/dist/{api-Cefn6AaL.d.ts → api-RQUBSSEJ.d.ts} +60 -26
- package/dist/{chunk-OZZMZH7X.js → chunk-26HU2HXU.js} +1 -1
- package/dist/chunk-4IGRIYOQ.js +1 -0
- package/dist/{chunk-V73OHOTK.js → chunk-55MXKW5J.js} +1 -1
- package/dist/{chunk-6RZKX552.js → chunk-67XTOBGE.js} +1 -1
- package/dist/{chunk-RT35MPPD.js → chunk-6MBVIE3H.js} +1 -1
- package/dist/chunk-AC32XJZW.js +1 -0
- package/dist/{chunk-VXY2C4AL.js → chunk-APO7QUBB.js} +1 -1
- package/dist/chunk-EEZLS2YP.js +1 -0
- package/dist/chunk-EFFXE6CX.js +6 -0
- package/dist/chunk-FKBSUKXE.js +1 -0
- package/dist/{chunk-TPAQWTO4.js → chunk-JKLILKI5.js} +1 -1
- package/dist/{chunk-VSMITXQD.js → chunk-LC2VUKYM.js} +1 -1
- package/dist/{chunk-LUIKKMG5.js → chunk-M5HQW67G.js} +1 -1
- package/dist/chunk-ML6EHT43.js +10 -0
- package/dist/chunk-PFHS7HK3.js +17 -0
- package/dist/chunk-T5COWMDA.js +1 -0
- package/dist/{configuration-sync-D2n_gGj6.d.ts → configuration-sync-C2jtm37f.d.ts} +97 -9
- package/dist/{content-WXHCWIUL.js → content-XCLXWNGN.js} +1 -1
- package/dist/{funnel-local-client-9U-_hkEE.d.ts → funnel-local-client-P_R6FHVV.d.ts} +7995 -5523
- package/dist/{funnel-node-evaluation-DSSSmXHX.d.ts → funnel-node-evaluation-BLnJp8vj.d.ts} +11 -13
- package/dist/{funnel-process-client-BaHMeArI.d.ts → funnel-process-client-CY-GQ_SF.d.ts} +5498 -4539
- package/dist/funnel-runtime-host-GFTN7KQK.js +1 -0
- package/dist/index.d.ts +1258 -273
- package/dist/index.js +1 -1
- package/dist/native-shell.js +1 -1
- package/dist/openrouter.d.ts +3 -3
- package/dist/openrouter.js +1 -1
- package/dist/page.d.ts +2 -2
- package/dist/page.js +1 -1
- package/dist/paywall-H3KQZEJG.js +1 -0
- package/dist/popup.d.ts +11 -5
- package/dist/popup.js +1 -1
- package/dist/react-native.d.ts +1541 -7
- package/dist/react-native.js +1 -1
- package/dist/{screen-D81zCpfi.d.ts → screen-DRP7nsrQ.d.ts} +613 -357
- package/dist/screen-renderer-IZ3VJGU6.js +1 -0
- package/dist/server.d.ts +717 -9
- package/dist/server.js +1 -1
- package/dist/visual.js +1 -1
- package/package.json +1 -1
- package/dist/chunk-33FQUT3Z.js +0 -179
- package/dist/chunk-E5ECPR6Z.js +0 -1
- package/dist/chunk-LHA6VWP7.js +0 -1
- package/dist/chunk-MOWYD2TV.js +0 -1
- package/dist/chunk-RQZ42NQJ.js +0 -6
- package/dist/chunk-VSJOHWDL.js +0 -17
- package/dist/chunk-XAHWOLRT.js +0 -1
- package/dist/funnel-runtime-host-WQ64FAME.js +0 -1
- package/dist/paywall-H4YN4FTL.js +0 -1
- package/dist/screen-renderer-NHJ6OQTF.js +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{d as t}from"./chunk-4IGRIYOQ.js";import{Za as n}from"./chunk-EFFXE6CX.js";function r(e,o,a){return n(e,o,a,t)}export{r as a};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{a as u}from"./chunk-
|
|
1
|
+
import{a as u}from"./chunk-26HU2HXU.js";import{pa as E,qa as M,ra as j,sa as O,ta as T}from"./chunk-EFFXE6CX.js";import{k as w}from"./chunk-PFHS7HK3.js";import{z as t}from"zod";var _=E,V=t.string().regex(/^(0|[1-9]\d{0,5})(\.\d{1,12})?$/),C=t.strictObject(Object.fromEntries(_.map(i=>[i,t.number().int().nonnegative().max(1e9)]))),L=M,D=j,q=t.strictObject({modelId:L,source:t.enum(["models.dev","custom"]),fetchedAt:t.iso.datetime(),rates:O,contextTier:t.number().int().nonnegative(),markupPercent:D}),U=t.strictObject({pricing:q,tokens:C,quantity:w,digest:t.string().regex(/^[a-f0-9]{64}$/)}),z=i=>{let[s,o=""]=i.split(".");return BigInt(s)*10n**12n+BigInt(o.padEnd(12,"0"))};function $(i){if(typeof i!="number"||!Number.isFinite(i)||i<0)throw new u("AI_PRICE_UNAVAILABLE","A published token price is missing");let s=String(i),o=s.includes("e")?i.toFixed(12).replace(/0+$/,"").replace(/\.$/,""):s;if(Number(o)!==i||!V.safeParse(o).success)throw new u("AI_PRICE_UNAVAILABLE","Published price exceeds the supported precision");return o}var R=t.strictObject({input:t.number().nonnegative(),output:t.number().nonnegative(),cache_read:t.number().nonnegative().optional(),cache_write:t.number().nonnegative().optional(),reasoning:t.number().nonnegative().optional(),input_audio:t.number().nonnegative().optional(),output_audio:t.number().nonnegative().optional()}),F=R.extend({context_over_200k:t.unknown().optional(),tiers:t.array(R.extend({tier:t.strictObject({type:t.literal("context"),size:t.number().int().nonnegative()})})).max(20).refine(i=>new Set(i.map(s=>s.tier.size)).size===i.length).optional()});async function N(i,s,o){let d=new TextEncoder().encode(JSON.stringify({pricing:i,tokens:s,quantity:o}));return[...new Uint8Array(await crypto.subtle.digest("SHA-256",d))].map(m=>m.toString(16).padStart(2,"0")).join("")}function B(i,s){let o=0n;for(let c of _){if(!s[c])continue;let f=i.rates[c];if(f===void 0)throw new u("AI_PRICE_UNAVAILABLE",`No published price for ${c}; report exclusive token pools`);o+=z(f)*BigInt(s[c])}let[d,m="0"]=String(i.markupPercent).split("e"),r=(d.split(".")[1]?.length??0)-Number(m),e=10n**BigInt(Math.max(r,0)),n=BigInt(d.replace(".",""))*10n**BigInt(Math.max(-r,0)),g=100n*e+n,l=100n*e*1000000n,a=(o*g+l-1n)/l;return w.parse(`${a/1000000n}.${(a%1000000n).toString().padStart(6,"0")}`)}function K(i={}){if(typeof window<"u")throw new u("SERVER_ONLY","AI token pricing belongs on your backend");let s=T.parse({defaultMarkup:i.defaultMarkup??0,providerMarkups:i.providerMarkups??{},modelMarkups:i.modelMarkups??{},customModels:i.customModels??{}}),o=null,d=0;async function m(){if(!o||Date.now()>=d){d=Date.now()+15*6e4;let r=(async()=>{let e=await(i.fetch??fetch)("https://models.dev/api.json",{signal:AbortSignal.timeout(3e4)});if(!e.ok)throw new u("AI_PRICE_UNAVAILABLE","Models.dev pricing is unavailable");return{data:t.record(t.string(),t.object({models:t.record(t.string(),t.unknown())})).parse(await e.json()),fetchedAt:new Date().toISOString()}})().catch(e=>{throw o===r&&(o=null),e});o=r}return o}return{refreshPrices(){o=null,d=0},async quoteTokens(r){let e=L.parse(r.modelId),n=C.parse(r.tokens),[g,...l]=e.split("/"),a=s.customModels[e],c,f,p,y=0;if(a?.input!==void 0&&a.output!==void 0&&_.every(A=>n[A]===0||a[A]!==void 0))c={...a,input:a.input,output:a.output},f="custom",p=new Date().toISOString();else{let A=await m(),x=A.data[g]?.models[l.join("/")];if(!x)throw new u("AI_PRICE_UNAVAILABLE","Unknown model; configure a complete custom price");let{cost:I}=t.object({cost:F}).parse(x),P=n.input+n.cache_read+n.cache_write+n.input_audio;if(I.tiers===void 0&&I.context_over_200k!==void 0&&P>2e5)throw new u("AI_PRICE_UNAVAILABLE","A current context tier is required for this model");let b=I.tiers?.filter(k=>P>k.tier.size).sort((k,Q)=>Q.tier.size-k.tier.size)[0],v=b??I;b&&(y=b.tier.size),c=Object.fromEntries(_.filter(k=>v[k]!==void 0).map(k=>[k,$(v[k])])),c={...c,...a},f=a?"custom":"models.dev",p=A.fetchedAt}let h=q.parse({modelId:e,source:f,fetchedAt:p,rates:c,contextTier:y,markupPercent:s.modelMarkups[e]??s.providerMarkups[g]??s.defaultMarkup}),S=B(h,n);return U.parse({pricing:h,tokens:n,quantity:S,digest:await N(h,n,S)})},async trackTokens(r,e){let n=U.parse(e.quote);if(n.quantity!==B(n.pricing,n.tokens)||n.digest!==await N(n.pricing,n.tokens,n.quantity))throw new u("INVALID_REQUEST","AI quote changed after pricing");let g=e.properties??{},l=e.providerCostUsd===void 0?void 0:t.string().regex(/^(0|[1-9]\d{0,11})(\.\d{1,18})?$/).parse(e.providerCostUsd),a=e.generationId===void 0?void 0:t.string().min(1).max(120).parse(e.generationId),c=8+ +(l!==void 0)+ +(a!==void 0);if(Object.keys(g).some(p=>p.startsWith("ai_")))throw new u("INVALID_REQUEST","AI tracking reserves ai_ event properties");if(Object.keys(g).length>16-c)throw new u("INVALID_REQUEST","AI tracking properties exceed the available event budget");let f={operation:"consume",internal_feature_id:e.internal_feature_id,quantity:n.quantity,idempotencyKey:e.idempotencyKey,properties:{...g,...l!==void 0?{ai_provider_cost_usd:l}:{},...a!==void 0?{ai_generation_id:a}:{},ai_model:n.pricing.modelId,ai_source:n.pricing.source,ai_price_at:n.pricing.fetchedAt,ai_quote_hash:n.digest,ai_markup:String(n.pricing.markupPercent),ai_tier:String(n.pricing.contextTier),ai_tokens:_.map(p=>n.tokens[p]).join(","),ai_rates:"v1:"+_.map(p=>n.pricing.rates[p]===void 0?"-":z(n.pricing.rates[p]).toString(36)).join(",")},...e.entityId?{entityId:e.entityId}:{}};return r.mutateBalance({customerId:e.customerId,command:f})}}}async function Y(i,s,o={}){let{config:d,model_markups:m}=await i.readAiPricing(s);return K({defaultMarkup:d.default_markup??0,providerMarkups:Object.fromEntries(Object.entries(d.provider_markups??{}).map(([r,e])=>[r,e.markup])),modelMarkups:Object.fromEntries(Object.entries(m??{}).filter(([,r])=>r.markup!==void 0).map(([r,e])=>[r,e.markup])),customModels:Object.fromEntries(Object.entries(m??{}).filter(([,r])=>r.input_cost!==void 0||r.output_cost!==void 0).map(([r,e])=>[r,{...e.input_cost!==void 0?{input:String(e.input_cost)}:{},...e.output_cost!==void 0?{output:String(e.output_cost)}:{}}])),...o})}export{q as a,U as b,K as c,Y as d};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{a as o}from"./chunk-
|
|
1
|
+
import{a as o}from"./chunk-26HU2HXU.js";function s(r,n){let i=structuredClone(r);for(let[a,e]of Object.entries(i.plans)){let t=n.plans[a];!t||t.versionId!==e.versionId||(t.amountMinor!==void 0&&(e.amountMinor=t.amountMinor),t.interval!==void 0&&(e.interval=t.interval),t.intervalCount!==void 0&&(e.intervalCount=t.intervalCount),t.prepaid!==void 0&&(e.prepaid=structuredClone(t.prepaid)))}return i}function c(r,n){let i=a=>"document"in a?a.offering.id:a.content.offeringVersionId;return r.id===n.id&&i(r)===i(n)&&r.content?.artifact.sha256===n.content?.artifact.sha256}function l(r,n,i){if(r.operationId!==n.operationId||n.currency!==void 0&&r.currency!==n.currency)throw new o("INVALID_RESPONSE",i)}function p(r,n,i){let a=Object.fromEntries((r.lines[0]?.prepaid??[]).map(e=>[e.internal_feature_id,e.quantity]));if(n.featureQuantities&&(Object.keys(a).length!==Object.keys(n.featureQuantities).length||Object.entries(n.featureQuantities).some(([e,t])=>a[e]!==t)))throw new o("INVALID_RESPONSE","The purchase quote changed its selected quantities");if(r.lines.length!==1||r.lines[0].productVersionId!==n.productVersionId||n.currency!==void 0&&r.currency!==n.currency||n.provider!==void 0&&r.provider!==n.provider&&!(n.provider==="stripe"&&r.provider==="merchant"&&r.execution?.provider==="merchant"))throw new o("INVALID_RESPONSE",i)}function f(r,n,i=!1){return!r||r.operationId!==n?.operationId?n:r.status==="complete"&&n.status!=="complete"||r.status!=="pending"&&(n.status==="pending"||i&&n.status!=="complete")?r:n}export{s as a,c as b,l as c,p as d,f as e};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{a as d,b as ee,l as B,o as te}from"./chunk-E5ECPR6Z.js";import{b as Z}from"./chunk-VXY2C4AL.js";import{a as s}from"./chunk-OZZMZH7X.js";import{a as G}from"./chunk-DSPLGTQI.js";import{Ha as $,S as X,a as z,b as Y,c as K,d as Q,e as j,f as M,g as W,n as L,ua as a,wa as H}from"./chunk-RQZ42NQJ.js";var U=t=>{if(!Number.isSafeInteger(t)||t<0||t>=Number.MAX_SAFE_INTEGER)throw new s("INVALID_STATE","Installation sequence exhausted");return t+1},he=async t=>[...new Uint8Array(await crypto.subtle.digest("SHA-256",Uint8Array.from(t,e=>e.charCodeAt(0))))].map(e=>e.toString(16).padStart(2,"0")).join("");function _(t,e){return t.transaction(n=>{if(!Number.isSafeInteger(n.identitySeq)||n.identitySeq<0||!Number.isSafeInteger(n.addressSeq)||n.addressSeq<0||n.detachSeq!==null&&(!Number.isSafeInteger(n.detachSeq)||n.detachSeq<1||n.detachSeq>n.identitySeq))throw new s("INVALID_STATE","Installation journal is invalid");return e({...n})})}function ne(t,e,n){let i=null,c=0,o=0,l=0,y=Promise.resolve(),P=!1;if(t&&(!n||z.parse(t.scope).projectId!==n.projectId||t.scope.environment!==n.environment))throw new s("SCOPE_MISMATCH","Push installation belongs to another scope");let g=()=>{if(P)throw new s("CLOSED","SDK client was destroyed");if(!t)throw new s("NOT_CONFIGURED","Configure this client's native Push host first");return t},b=r=>{if(r!==c)throw new s("IDENTITY_CHANGED","Identity changed during Push operation")};async function D(r){let u=g();if(!u.sha256&&!globalThis.crypto?.subtle)throw new s("NOT_CONFIGURED","Configure native SHA-256 for this Push host");let p=u.sha256?await u.sha256(Uint8Array.from(r,I=>I.charCodeAt(0))):await he(r);if(!/^[a-f0-9]{64}$/.test(p))throw new s("INVALID_STATE","Push credential digest is invalid");return p}function m(r){let u=M.parse(r);if(u.installationId.toLowerCase()!==g().installationId.toLowerCase())throw new s("INVALID_RESPONSE","Push response belongs to another installation");return u}async function C(r,u){let p=g(),I={installationId:p.installationId,publicKey:p.publicKey,issuedAt:new Date().toISOString(),...u},S=await p.sign(W(r,p.scope,I));return{...I,signature:S}}let f=(r,u,p)=>e.requestWithCredential?e.requestWithCredential(r,u,p):e.request(r,u);async function w(){let r=g(),u=c,p=i?await(e.session?.access()??i):null,I=_(r,v=>v),S;if(I.detachSeq!==null){let v=I.detachSeq,V=Y.parse(await C("detach",{sequence:v,platform:r.platform}));try{let N=await e.request("push/installations/detach",{...r.scope,...V},"POST",{installationDetach:!0});if(!N||typeof N!="object"||!("installation"in N))throw new s("INVALID_RESPONSE","Push detach acknowledgement is invalid");let F=m(N.installation);if(F.bound||F.identitySeq!==v)throw new s("INVALID_RESPONSE","Push detach acknowledgement does not match its intent")}catch(N){if(N instanceof s&&N.status===404)S=N;else if(!(N instanceof s)||N.status!==412)throw N}S||_(r,N=>({...N,detachSeq:N.detachSeq===v?null:N.detachSeq}))}if(b(u),!p){if(S)throw S;return null}let q=a.bindPushInstallation,k=q.request.parse(await C("bind",{sequence:l,platform:r.platform,credentialDigest:await D(p)}));b(u);let R=q.response.parse(await f(q.path,k,p));b(u);let T=m(R.installation);if(!T.bound||T.identitySeq!==l)throw new s("INVALID_RESPONSE","Push binding acknowledgement does not match its intent");return S&&I.detachSeq!==null&&l>I.detachSeq&&_(r,v=>({...v,detachSeq:v.detachSeq===I.detachSeq?null:v.detachSeq})),T}async function E(){g();let r=c,u=i?await(e.session?.access()??i):null;if(!u)throw new s("NOT_IDENTIFIED","Identify before reading this installation");let p=a.readPushInstallation,I=p.request.parse(await C("read",{credentialDigest:await D(u)}));b(r);let S=p.response.parse(await f(p.path,I,u));return b(r),m(S.installation)}function h(r=w){let u=y.catch(()=>{}).then(r);return y=u,u.catch(p=>{try{t?.onError?.(p instanceof Error?p:new Error("Push synchronization failed"))}catch{}}),u}async function O(r,u,p){let I=g(),S=u.identity,q=u.observation,k=i?await(e.session?.access()??i):null;if(b(S),q!==o)throw new s("INVALID_STATE","Push observation changed during recovery");if(!k)throw new s("NOT_IDENTIFIED","Identify before recovering a Push address");if(!r.connectionId||!r.kind||!r.token||!["granted","provisional"].includes(r.permission))throw new s("INVALID_REQUEST","Recovery needs a provider token and notification permission");return await h(async()=>{if(b(S),await w(),b(S),q!==o)throw new s("INVALID_STATE","Push observation changed during recovery");let R=_(I,F=>p?F:{...F,addressSeq:U(F.addressSeq)}),v=await C(p?"recovery_confirm":"recovery_request",{...r,sequence:R.addressSeq,credentialDigest:await D(k),...p?{challenge:p}:{}}),V=p?Q.parse(v):K.parse(v);if(b(S),q!==o)throw new s("INVALID_STATE","Push observation changed during recovery");let N=await f(`push/installations/recovery/${p?"confirm":"request"}`,V,k);if(b(S),q!==o||_(I,F=>F).addressSeq!==R.addressSeq)throw new s("INVALID_STATE","Push observation changed during recovery");if(p){let F=a.updatePushAddress.response.parse(N),x=m(F.installation);if(!x.bound||x.identitySeq!==l||x.addressSeq!==R.addressSeq||x.connectionId!==r.connectionId||x.addressStatus!=="active")throw new s("INVALID_RESPONSE","Push recovery acknowledgement does not match its intent");return x}if(!N||typeof N!="object"||!("recovery"in N))throw new s("INVALID_RESPONSE","Push recovery acknowledgement is invalid");return j.parse(N.recovery)})}return{recoveryObserver(){g();let r={identity:c,observation:++o};return{async request(u){return j.parse(await O(u,r))},async confirm(u,p){return M.parse(await O(p,r,u))}}},identify(r){if(!t)return;l=_(t,p=>({...p,identitySeq:U(p.identitySeq)})).identitySeq,i=r,c++,o++},reset(){if(t)try{_(t,r=>{let u=U(r.identitySeq);return{...r,identitySeq:u,detachSeq:u}})}finally{i=null,c++,o++}},start(){t&&!P&&h()},destroy(){P=!0,i=null,c++,o++},async sync(){return await h()},read:E,async recover(){let r=g(),u=c,p=l;return o++,await h(async()=>{b(u);let I=await E();return b(u),l=_(r,q=>{if(q.identitySeq!==p)throw new s("IDENTITY_CHANGED","A newer installation intent exists");return{...q,identitySeq:U(Math.max(q.identitySeq,I.identitySeq)),addressSeq:Math.max(q.addressSeq,I.addressSeq)}}).identitySeq,await w()})},tokenObserver(){g();let r=++o,u=c;return async p=>{if(r!==o||u!==c)return null;let I=g(),S=i?await(e.session?.access()??i):null;if(!S)throw new s("NOT_IDENTIFIED","Identify before registering a Push token");if(await h(),b(u),r!==o)return null;let q=_(I,v=>({...v,addressSeq:U(v.addressSeq)})),k=a.updatePushAddress,R=k.request.parse(await C("address",{...p,sequence:q.addressSeq,credentialDigest:await D(S)}));if(b(u),r!==o)return null;let T=await f(k.path,R,S);return b(u),r!==o||_(I,v=>v).addressSeq!==q.addressSeq?null:m(k.response.parse(T).installation)}}}}function re(t,e){let n={async preference(i){let c=a.readMessagingPreference;return(await d(t,c,{channel:i})).preference},async setPreference(i){let c=a.setMessagingPreference;return(await d(t,c,i)).preference}};return{messaging:n,push:{sync:e.sync,read:e.read,recover:e.recover,tokenObserver:e.tokenObserver,recoveryObserver:e.recoveryObserver,async preference(){return n.preference("push")},async setPreference(i){return n.setPreference({...i,channel:"push"})}}}}function ie(t,e,n={}){let i=!1;function c(){if(i)throw new s("CLOSED","SDK client was destroyed")}let o=new Set,l=P=>{for(let g of o)try{g(P)}catch{}},y=t.session.subscribeIdentity(()=>{l(!!t.session.peek()),n.afterChange?.()},()=>{e()});return{assertActive:c,isIdentified:()=>!i&&!!t.session.peek(),methods:{subscribeIdentity(P){return c(),o.add(P),()=>{o.delete(P)}},identify(P){c();let g=typeof P=="string"?P:P.accessToken;if(!L.test(g))throw new s("INVALID_TOKEN","Browser SDK requires a customer session");n.beforeIdentify?.(g),t.identify(P)},reset(){if(!i)try{n.beforeReset?.()}finally{t.reset()}},destroy(){if(!i){i=!0,y(),o.clear();try{n.beforeDestroy?.(),e()}finally{t.dispose()}}}}}}function A(t){if(t!==null&&typeof t=="object"&&"customerId"in t)throw new s("INVALID_REQUEST","Customer requests use the verified session identity")}var ge={...a.readHoldings,request:a.readHoldings.request.omit({customerId:!0})};function se(t){return{async checkEntitlement(e){A(e);let n=a.checkEntitlement;return d(t,n,e)},async readHoldings(e={}){return d(t,ge,e)}}}function oe(t){return{async readLedger(e){let n=a.readLedger;return d(t,n,{query:e})},async readCreditStatement(e){A(e);let n=a.readCreditStatement;return d(t,n,e)},async quoteBalance(e){A(e);let n=a.quoteBalance;return d(t,n,{command:e})}}}function ae(t){return{async setupPayment(e){A(e);let n=a.setupPayment;return d(t,n,e)},async readPaymentSetup(e){A(e);let n=a.readPaymentSetup;return d(t,n,e)},async readBillingInvoice(e){A(e);let n=a.readBillingInvoice;return d(t,n,e)},async readBillingControls(e={}){A(e);let n=a.readBillingControls;return d(t,n,e)},async prepareBillingAuthorization(e){A(e);let n=a.prepareBillingAuthorization;return d(t,n,e)},async confirmBillingAuthorization(e){A(e);let n=a.confirmBillingAuthorization;return d(t,n,e)},async setBillingCoupons(e){A(e);let n=a.setBillingCoupons;return d(t,n,e,{request:"Invalid billing coupon list",response:"Invalid billing coupon receipt"})},async revokeBillingAuthorization(e){A(e);let n=a.revokeBillingAuthorization;return d(t,n,e)},async listBillingInvoices(e={after:null,limit:25}){A(e);let n=a.listBillingInvoices;return d(t,n,e)},async confirmBillingAdjustment(e){A(e);let n=a.confirmBillingAdjustment;return d(t,n,e)}}}function ce(t){return{async previewUpdate(e){A(e);let n=a.previewUpdate;return d(t,n,e)},async update(e){A(e);let n=a.update;return d(t,n,e)},async readSubscriptionUpdate(e){A(e);let n=a.readSubscriptionUpdate;return d(t,n,e)},async restoreNativePurchase(e){A(e);let n=a.restoreNativePurchase;return d(t,n,e)},async previewAttach(e){A(e);let n=a.previewAttach;return d(t,n,e)},async attach(e){A(e);let n=a.attach;return d(t,n,e)},async readSubscriptionOperation(e){A(e);let n=a.readSubscriptionOperation;return d(t,n,e)}}}function ue(t){return{async redeemReward(e){return A(e),(await d(t,a.redeemReward,{...e,requestId:e.requestId??crypto.randomUUID()},{request:"Invalid reward redemption",response:"Invalid reward receipt"})).redemption},async claimRewardProduct(e){return A(e),(await d(t,a.claimRewardProduct,e,{request:"Invalid reward product claim",response:"Invalid reward product checkout"})).checkout},async createReferralCode(e){return A(e),(await d(t,a.createReferralCode,{...e,requestId:e.requestId??crypto.randomUUID()},{request:"Invalid referral program",response:"Invalid referral code"})).referralCode},async redeemCoupon(e,n=crypto.randomUUID()){let i=await d(t,a.redeemCoupon,{code:e,requestId:n},{request:"Invalid coupon code",response:"Invalid Coupon receipt"});return{offer:i.offer,reason:i.reason}},async claimCoupon(e,n=crypto.randomUUID()){let i=await d(t,a.grantOffer,{couponId:e,requestId:n},{request:"Invalid Coupon claim",response:"Invalid Coupon receipt"});return{offer:i.offer,reason:i.reason}},async listOffers(){return(await d(t,a.listOffers,{},{response:"Invalid offers response"})).offers}}}function de(t){return{...se(t),...oe(t),...ae(t),...ce(t),...ue(t)}}function pe(t){return{async resolveContent(e){A(e);let n=a.resolveContent;return d(t,n,e)},async resolvePaywall(e){A(e);let n=a.resolvePaywall;return d(t,n,e)},async resolveOffering(e){A(e);let n=a.resolveOffering;return d(t,n,e)}}}var J=t=>new TextEncoder().encode(JSON.stringify(t)).length,le=16384;function fe(t,e){let n=0,i,c=f=>{i={config:structuredClone(f),until:Date.now()+3e4}},o=[],l=null,y;function P(){if(!e())throw new s("NOT_IDENTIFIED","Call identify before using Features or events")}function g(){y||!o.length||(y=setTimeout(()=>{y=void 0,D().catch(()=>{}).finally(g)},5e3),typeof y=="object"&&"unref"in y&&y.unref())}function b(f,w={},E={}){if(P(),i&&Date.now()<i.until&&!X(i.config,f))return;C();let h=a.trackEvents.request.parse({events:[{eventUuid:crypto.randomUUID(),timestamp:new Date().toISOString(),name:f,properties:w,...E}]}).events[0];if(J({events:[h]})>le)throw new s("INVALID_REQUEST","Event exceeds the delivery size limit");if(o.length>=500)throw new s("EVENT_QUEUE_FULL","Flush pending events before tracking more");o.push(structuredClone(h)),g()}async function D(f=!1){if(P(),l)return l;let w=n,E=(async()=>{let h={inserted:0,duplicates:0,rejected:0,skipped:0},O=o.length;for(;O&&w===n;){let r=[],u=J({events:[]});for(let S of o.slice(0,Math.min(O,100))){let q=J(S)+(r.length?1:0);if(r.length&&u+q>le)break;r.push(S),u+=q}let p=a.trackEvents,I=await d(t,p,{events:r},void 0,{keepalive:f});if(w!==n)throw new s("IDENTITY_CHANGED","Event identity changed during delivery");if(I.inserted+I.duplicates+I.rejected+I.skipped!==r.length)throw new s("INVALID_RESPONSE","Incomplete event acknowledgement");c(I.analyticsConfig),o.splice(0,r.length),O-=r.length,h.inserted+=I.inserted,h.duplicates+=I.duplicates,h.rejected+=I.rejected,h.skipped+=I.skipped}return h})();l=E;try{return await E}finally{l===E&&(l=null)}}let m;function C(){if(m||typeof document>"u")return;let f=()=>{document.visibilityState==="hidden"&&e()&&o.length&&D(!0).catch(()=>{})};document.addEventListener("visibilitychange",f),m=()=>document.removeEventListener("visibilitychange",f)}return{rememberConfiguration:c,track:b,flush:D,reset(){n++,i=void 0,clearTimeout(y),y=void 0,o=[],l=null},detachVisibility(){m?.(),m=void 0}}}function me(t){let e=t.merchandise;if(typeof t.merchandiseId=="string")return{internalId:t.merchandiseId};if(!(!e||typeof e!="object"||Array.isArray(e))){if(typeof e.internalId=="string")return{internalId:e.internalId};if(typeof e.externalId=="string")return{id:e.externalId};if(typeof e.id=="string")return{id:e.id}}}function we(t){let e=me(t),{merchandiseId:n,merchandise:i,...c}=t;return{...c,...e?{merchandise:e}:{}}}function ye(t,e,n,i,c){if(c&&i&&(c.scope.projectId!==i.projectId||c.scope.environment!==i.environment))throw new s("SCOPE_MISMATCH","Configuration belongs to another App/environment");let o=0,l=new Set;function y(){if(!e())throw new s("NOT_IDENTIFIED","Call identify before using Features or events")}async function P(g={}){c||y();let b=o,D=!1,m=async()=>{if(D||b!==o)throw new s("IDENTITY_CHANGED","Feature identity changed");let R=a.getFeatures,T=c?{scope:{projectId:c.scope.projectId,environment:c.scope.environment},payload:await c.features()}:await d(t,R,{});if(b!==o)throw new s("IDENTITY_CHANGED","Feature identity changed");if(i&&(T.scope.projectId!==i.projectId||T.scope.environment!==i.environment))throw new s("INVALID_RESPONSE","Feature response scope changed");return n.rememberConfiguration(T.payload.analyticsConfig),T},C=await m(),f=!0,w,E=R=>{try{g.onError?.(R)}catch{}},h=(R,T,v)=>{try{let V=me(v);n.track(R,T,V?{merchandise:V}:{})}catch(V){E(V)}},O=ee({assertUsable:c?.assertFeatures,scope:C.scope,attributes:g.attributes,onError:g.onError,load:async()=>f?(f=!1,C.payload):(await m()).payload,evaluateRemote:async R=>{if(b!==o)throw new s("IDENTITY_CHANGED","Feature identity changed");let T=a.evaluateFeatures,v=await d(t,T,{...R,attributes:we(R.attributes)});if(v.scope.projectId!==C.scope.projectId||v.scope.environment!==C.scope.environment)throw new s("INVALID_RESPONSE","Remote Feature response scope changed");return{generation:v.generation,evaluatedAt:v.evaluatedAt,expiresAt:v.expiresAt,features:v.features,...v.merchandiseContext?{merchandiseContext:v.merchandiseContext}:{}}},onExperimentViewed:(R,T,v)=>h("Experiment Viewed",{experimentId:R.key,variationId:T.key},v),onFeatureUsage:(R,T,v)=>h("Feature Evaluated",{feature:R,value:T.value,source:T.source,ruleId:T.ruleId,...T.experimentResult?{variationId:T.experimentResult.key}:{}},v)}),r=O.refresh;function u(){clearTimeout(w),!c&&(D||b!==o||!O.expiresAt||(w=setTimeout(()=>{p().catch(E)},Math.min(2147483647,Math.max(1e3,Date.parse(O.expiresAt)-Date.now()))),typeof w=="object"&&"unref"in w&&w.unref()))}async function p(){try{return await r()}finally{u()}}let I=()=>{D||p().catch(E)},S=O.subscribe(u),q=c?.subscribe(()=>{!D&&c.fresh&&p().catch(E)});function k(){D||(D=!0,clearTimeout(w),typeof window<"u"&&window.removeEventListener("focus",I),S(),q?.(),O.reset(),l.delete(k))}l.add(k);try{await O.init(),(g.attributes?.merchandise||g.attributes?.merchandiseId)&&await O.refreshRemote()}catch(R){throw k(),R}return u(),!c&&typeof window<"u"&&window.addEventListener("focus",I),Object.assign(O,{refresh:p,destroy:k})}return{features:P,reset(g){o++,g();for(let b of l)b()}}}import{z as ve}from"zod";function Ie(t,e){let n="source"in e?{funnelId:e.source.id,funnelVersionId:e.source.versionId}:"versionId"in e?{funnelId:e.funnelId,funnelVersionId:e.versionId}:e,i=ve.object({funnelId:H.shape.id,funnelVersionId:H.shape.versionId.optional()}).safeParse(n);if(!i.success)throw new s("INVALID_REQUEST","A valid Funnel source is required");let c=Object.freeze(i.data);function o(l){if("customerId"in l)throw new s("INVALID_REQUEST","Customer identity cannot be overridden");if("funnelId"in l&&l.funnelId!==void 0&&l.funnelId!==c.funnelId||"funnelVersionId"in l&&l.funnelVersionId!==void 0&&l.funnelVersionId!==c.funnelVersionId)throw new s("SCOPE_MISMATCH","The original Funnel source cannot change");return{...l,...c}}return{async claimCoupon(l,y=crypto.randomUUID()){let P=a.grantOffer,g=await d(t,P,o({couponId:l,requestId:y}));return{offer:g.offer,reason:g.reason}},async resolveOffering(l){let y=a.resolveOffering;return d(t,y,o(l))},async resolvePaywall(l){let y=a.resolvePaywall;return d(t,y,o(l))},async previewAttach(l){let y=a.previewAttach;return d(t,y,o(l))}}}function Dt(t){return Ae(t)}function Ae(t){let e=Z(t),n=e.request,i;try{i=ne(t.push,e,t.scope??t.configuration?.scope)}catch(y){throw e.dispose(),y}let c=ie(e,()=>{l.reset(o.reset),o.detachVisibility()},{beforeIdentify:i.identify,beforeReset:i.reset,afterChange:i.start,beforeDestroy:i.destroy}),o=fe(n,c.isIdentified),l=ye(n,c.isIdentified,o,t.scope,t.configuration);return{session:e.session,...re(n,i),...de(n),...pe(n),forFunnel(y){return c.assertActive(),Ie(n,y)},async features(y={}){return c.assertActive(),l.features(y)},track(y,P,g={}){return o.track(y,P,g)},flush(){return o.flush()},...c.methods}}function Ut(t){if(!L.test(t.customerToken))throw new s("INVALID_TOKEN","A customer credential is required");if(!t.scope)throw new s("INVALID_REQUEST","An explicit App and environment scope is required");let e=te({...t,scope:t.scope,apiKey:t.customerToken});return{async start(n){let i=await e.start(n),c=B({...t,runToken:i.runToken});c.identify(t.customerToken);let o=i.run.instruction?.type==="evaluate_segment"?await c.get():i;return{...i,...o,controller:c}}}}function Gt(t){if(!t.scope)throw new s("INVALID_CONFIGURATION","An explicit process App/environment scope is required");if(t.session!==void 0)throw new s("INVALID_CONFIGURATION","The merchant process adapter owns the session");let e=null,n,i=0,c=new Set,o=new Map,l=new Map;async function y(m){let C,f=new Promise((w,E)=>{C=setTimeout(()=>E(new s("TIMEOUT","Process bridge request timed out")),t.timeoutMs??35e3)});try{return await Promise.race([Promise.resolve().then(m),f])}finally{clearTimeout(C)}}function P(m){throw m instanceof s&&(m.status===401||m.reason==="CUSTOMER_BINDING_CONFLICT")&&(i++,n?.reset(),n=void 0,e=null,o.clear(),l.clear()),m}function g(m,C){if(C!==i)throw new s("IDENTITY_CHANGED","Process was detached during a request");let f=$.parse(m);if(f.scope.projectId!==t.scope.projectId||f.scope.environment!==t.scope.environment)throw new s("SCOPE_MISMATCH","Process response belongs to another App/environment");if(e&&(e.run.id!==f.run.id||e.run.source.versionId!==f.run.source.versionId||e.run.source.id!==f.run.source.id||e.run.runExpiresAt!==f.run.runExpiresAt||e.run.identity.startedAs!==f.run.identity.startedAs||e.run.identity.participantId!==f.run.identity.participantId||e.run.identity.binding&&f.run.identity.binding&&e.run.identity.binding.id!==f.run.identity.binding.id))throw new s("INVALID_RESPONSE","The process changed its Run or Customer binding");if(!e||f.run.revision>=e.run.revision){if(e?.run.identity.binding&&!f.run.identity.binding)throw new s("INVALID_RESPONSE","The process lost its Customer binding");e=f;for(let I of c)G(I,f.run);f.run.instruction?.type==="authentication_required"&&G(t.onAuthenticationRequired,f.run)}f.settlement?.accepted!==void 0&&l.set(f.settlement.requestId,f.settlement.accepted);let{identity:w,instruction:E,...h}=f.run,{contract:O,settlement:r,...u}=f,p=r&&(({accepted:I,...S})=>S)(r);return{...u,run:{...h,authenticated:w.binding!==null,instruction:E?.type==="authentication_required"?null:E},...p?{settlement:p}:{}}}let b=m=>(o.has(m)||o.set(m,e?.run.identity.binding?.id??null),o.get(m));async function D(m){let C=i,f=e?.run.identity.binding?.id??null,w=h=>{if(f!==(e?.run.identity.binding?.id??null))throw h;return P(h)};if(m.operation==="page_experiments"){if(!t.adapter.pageExperiments)throw new s("CAPABILITY_UNAVAILABLE","Process page experiments are unavailable",501);return y(()=>t.adapter.pageExperiments(m.release,m.usedReceiptIds)).catch(w)}let E;if(m.operation==="get"){let{operation:h,customerToken:O,...r}=m;E=await y(()=>t.adapter.get({...r,...r.settlementRequestId?{settlementBindingId:b(r.settlementRequestId)}:{}})).catch(w)}else if(m.operation==="review")E=await y(()=>t.adapter.review(m.receiptId)).catch(w);else{if(m.operation==="start")throw new s("INVALID_REQUEST","Use process.open for entry");{let{customerToken:h,...O}=m;E=await y(()=>t.adapter.command(O,b(O.requestId))).catch(w)}}return g(E,C)}return{get view(){return e?.run??null},get controller(){return n},async open(m){let C=i,f=await y(()=>t.adapter.open(m)).catch(P);if(g(f,C),!n){n=B({...t,runToken:f.runToken,process:{request:D,binding:b,restore(h){for(let[O,r]of Object.entries(h))o.set(O,r)}}});let w=n,E=w.submit;w.submit=async h=>{try{return await E(h)}catch(O){if(!(O instanceof s)||O.reason!=="IDENTITY_CONTEXT_CHANGED"||h.operation!=="submit"||h.input.type!=="screen"||o.get(h.requestId)!==null)throw O;await w.settle?.(h.requestId),await w.get();let r=w.view;if(l.get(h.requestId)!==!1||!r||r.id!==e?.run.id||r.nodeId!==h.nodeId||r.visit!==h.visit||!e?.run.identity.binding)throw O;return E({...h,requestId:crypto.randomUUID(),revision:r.revision})}}}await n.get();for(let w of n.pendingCommands??[])o.has(w.requestId)&&o.get(w.requestId)!==(e?.run.identity.binding?.id??null)&&await n.settle?.(w.requestId);return{run:e.run,controller:n}},async syncIdentity(){let m=i;g(await y(()=>t.adapter.syncIdentity()).catch(P),m),await n?.get();for(let C of n?.pendingCommands??[])o.has(C.requestId)&&o.get(C.requestId)!==(e?.run.identity.binding?.id??null)&&await n?.settle?.(C.requestId);return e.run},async detach(){i++,n?.reset(),n=void 0,e=null,o.clear(),l.clear(),await y(()=>t.adapter.detach())},forProcess(m){if(!e?.run.identity.binding)throw new s("UNAUTHENTICATED","Sign in before a commercial operation",401);return{runId:e.run.id,bindingId:e.run.identity.binding.id,receiptId:m}},subscribe(m){return c.add(m),()=>{c.delete(m)}},destroy(){i++,n?.reset(),n=void 0,e=null,o.clear(),l.clear(),c.clear()}}}export{Dt as a,Ae as b,Ut as c,Gt as d};
|
|
1
|
+
import{a as d,b as ee,l as B,o as te}from"./chunk-4IGRIYOQ.js";import{b as Z}from"./chunk-APO7QUBB.js";import{a as s}from"./chunk-26HU2HXU.js";import{a as G}from"./chunk-DSPLGTQI.js";import{Ha as $,S as X,a as z,b as Y,c as K,d as Q,e as j,f as M,g as W,n as L,ua as a,wa as H}from"./chunk-EFFXE6CX.js";var U=t=>{if(!Number.isSafeInteger(t)||t<0||t>=Number.MAX_SAFE_INTEGER)throw new s("INVALID_STATE","Installation sequence exhausted");return t+1},he=async t=>[...new Uint8Array(await crypto.subtle.digest("SHA-256",Uint8Array.from(t,e=>e.charCodeAt(0))))].map(e=>e.toString(16).padStart(2,"0")).join("");function _(t,e){return t.transaction(n=>{if(!Number.isSafeInteger(n.identitySeq)||n.identitySeq<0||!Number.isSafeInteger(n.addressSeq)||n.addressSeq<0||n.detachSeq!==null&&(!Number.isSafeInteger(n.detachSeq)||n.detachSeq<1||n.detachSeq>n.identitySeq))throw new s("INVALID_STATE","Installation journal is invalid");return e({...n})})}function ne(t,e,n){let i=null,c=0,o=0,l=0,y=Promise.resolve(),P=!1;if(t&&(!n||z.parse(t.scope).projectId!==n.projectId||t.scope.environment!==n.environment))throw new s("SCOPE_MISMATCH","Push installation belongs to another scope");let g=()=>{if(P)throw new s("CLOSED","SDK client was destroyed");if(!t)throw new s("NOT_CONFIGURED","Configure this client's native Push host first");return t},b=r=>{if(r!==c)throw new s("IDENTITY_CHANGED","Identity changed during Push operation")};async function D(r){let u=g();if(!u.sha256&&!globalThis.crypto?.subtle)throw new s("NOT_CONFIGURED","Configure native SHA-256 for this Push host");let p=u.sha256?await u.sha256(Uint8Array.from(r,I=>I.charCodeAt(0))):await he(r);if(!/^[a-f0-9]{64}$/.test(p))throw new s("INVALID_STATE","Push credential digest is invalid");return p}function m(r){let u=M.parse(r);if(u.installationId.toLowerCase()!==g().installationId.toLowerCase())throw new s("INVALID_RESPONSE","Push response belongs to another installation");return u}async function C(r,u){let p=g(),I={installationId:p.installationId,publicKey:p.publicKey,issuedAt:new Date().toISOString(),...u},S=await p.sign(W(r,p.scope,I));return{...I,signature:S}}let f=(r,u,p)=>e.requestWithCredential?e.requestWithCredential(r,u,p):e.request(r,u);async function w(){let r=g(),u=c,p=i?await(e.session?.access()??i):null,I=_(r,v=>v),S;if(I.detachSeq!==null){let v=I.detachSeq,V=Y.parse(await C("detach",{sequence:v,platform:r.platform}));try{let N=await e.request("push/installations/detach",{...r.scope,...V},"POST",{installationDetach:!0});if(!N||typeof N!="object"||!("installation"in N))throw new s("INVALID_RESPONSE","Push detach acknowledgement is invalid");let F=m(N.installation);if(F.bound||F.identitySeq!==v)throw new s("INVALID_RESPONSE","Push detach acknowledgement does not match its intent")}catch(N){if(N instanceof s&&N.status===404)S=N;else if(!(N instanceof s)||N.status!==412)throw N}S||_(r,N=>({...N,detachSeq:N.detachSeq===v?null:N.detachSeq}))}if(b(u),!p){if(S)throw S;return null}let q=a.bindPushInstallation,k=q.request.parse(await C("bind",{sequence:l,platform:r.platform,credentialDigest:await D(p)}));b(u);let R=q.response.parse(await f(q.path,k,p));b(u);let T=m(R.installation);if(!T.bound||T.identitySeq!==l)throw new s("INVALID_RESPONSE","Push binding acknowledgement does not match its intent");return S&&I.detachSeq!==null&&l>I.detachSeq&&_(r,v=>({...v,detachSeq:v.detachSeq===I.detachSeq?null:v.detachSeq})),T}async function E(){g();let r=c,u=i?await(e.session?.access()??i):null;if(!u)throw new s("NOT_IDENTIFIED","Identify before reading this installation");let p=a.readPushInstallation,I=p.request.parse(await C("read",{credentialDigest:await D(u)}));b(r);let S=p.response.parse(await f(p.path,I,u));return b(r),m(S.installation)}function h(r=w){let u=y.catch(()=>{}).then(r);return y=u,u.catch(p=>{try{t?.onError?.(p instanceof Error?p:new Error("Push synchronization failed"))}catch{}}),u}async function O(r,u,p){let I=g(),S=u.identity,q=u.observation,k=i?await(e.session?.access()??i):null;if(b(S),q!==o)throw new s("INVALID_STATE","Push observation changed during recovery");if(!k)throw new s("NOT_IDENTIFIED","Identify before recovering a Push address");if(!r.connectionId||!r.kind||!r.token||!["granted","provisional"].includes(r.permission))throw new s("INVALID_REQUEST","Recovery needs a provider token and notification permission");return await h(async()=>{if(b(S),await w(),b(S),q!==o)throw new s("INVALID_STATE","Push observation changed during recovery");let R=_(I,F=>p?F:{...F,addressSeq:U(F.addressSeq)}),v=await C(p?"recovery_confirm":"recovery_request",{...r,sequence:R.addressSeq,credentialDigest:await D(k),...p?{challenge:p}:{}}),V=p?Q.parse(v):K.parse(v);if(b(S),q!==o)throw new s("INVALID_STATE","Push observation changed during recovery");let N=await f(`push/installations/recovery/${p?"confirm":"request"}`,V,k);if(b(S),q!==o||_(I,F=>F).addressSeq!==R.addressSeq)throw new s("INVALID_STATE","Push observation changed during recovery");if(p){let F=a.updatePushAddress.response.parse(N),x=m(F.installation);if(!x.bound||x.identitySeq!==l||x.addressSeq!==R.addressSeq||x.connectionId!==r.connectionId||x.addressStatus!=="active")throw new s("INVALID_RESPONSE","Push recovery acknowledgement does not match its intent");return x}if(!N||typeof N!="object"||!("recovery"in N))throw new s("INVALID_RESPONSE","Push recovery acknowledgement is invalid");return j.parse(N.recovery)})}return{recoveryObserver(){g();let r={identity:c,observation:++o};return{async request(u){return j.parse(await O(u,r))},async confirm(u,p){return M.parse(await O(p,r,u))}}},identify(r){if(!t)return;l=_(t,p=>({...p,identitySeq:U(p.identitySeq)})).identitySeq,i=r,c++,o++},reset(){if(t)try{_(t,r=>{let u=U(r.identitySeq);return{...r,identitySeq:u,detachSeq:u}})}finally{i=null,c++,o++}},start(){t&&!P&&h()},destroy(){P=!0,i=null,c++,o++},async sync(){return await h()},read:E,async recover(){let r=g(),u=c,p=l;return o++,await h(async()=>{b(u);let I=await E();return b(u),l=_(r,q=>{if(q.identitySeq!==p)throw new s("IDENTITY_CHANGED","A newer installation intent exists");return{...q,identitySeq:U(Math.max(q.identitySeq,I.identitySeq)),addressSeq:Math.max(q.addressSeq,I.addressSeq)}}).identitySeq,await w()})},tokenObserver(){g();let r=++o,u=c;return async p=>{if(r!==o||u!==c)return null;let I=g(),S=i?await(e.session?.access()??i):null;if(!S)throw new s("NOT_IDENTIFIED","Identify before registering a Push token");if(await h(),b(u),r!==o)return null;let q=_(I,v=>({...v,addressSeq:U(v.addressSeq)})),k=a.updatePushAddress,R=k.request.parse(await C("address",{...p,sequence:q.addressSeq,credentialDigest:await D(S)}));if(b(u),r!==o)return null;let T=await f(k.path,R,S);return b(u),r!==o||_(I,v=>v).addressSeq!==q.addressSeq?null:m(k.response.parse(T).installation)}}}}function re(t,e){let n={async preference(i){let c=a.readMessagingPreference;return(await d(t,c,{channel:i})).preference},async setPreference(i){let c=a.setMessagingPreference;return(await d(t,c,i)).preference}};return{messaging:n,push:{sync:e.sync,read:e.read,recover:e.recover,tokenObserver:e.tokenObserver,recoveryObserver:e.recoveryObserver,async preference(){return n.preference("push")},async setPreference(i){return n.setPreference({...i,channel:"push"})}}}}function ie(t,e,n={}){let i=!1;function c(){if(i)throw new s("CLOSED","SDK client was destroyed")}let o=new Set,l=P=>{for(let g of o)try{g(P)}catch{}},y=t.session.subscribeIdentity(()=>{l(!!t.session.peek()),n.afterChange?.()},()=>{e()});return{assertActive:c,isIdentified:()=>!i&&!!t.session.peek(),methods:{subscribeIdentity(P){return c(),o.add(P),()=>{o.delete(P)}},identify(P){c();let g=typeof P=="string"?P:P.accessToken;if(!L.test(g))throw new s("INVALID_TOKEN","Browser SDK requires a customer session");n.beforeIdentify?.(g),t.identify(P)},reset(){if(!i)try{n.beforeReset?.()}finally{t.reset()}},destroy(){if(!i){i=!0,y(),o.clear();try{n.beforeDestroy?.(),e()}finally{t.dispose()}}}}}}function A(t){if(t!==null&&typeof t=="object"&&"customerId"in t)throw new s("INVALID_REQUEST","Customer requests use the verified session identity")}var ge={...a.readHoldings,request:a.readHoldings.request.omit({customerId:!0})};function se(t){return{async checkEntitlement(e){A(e);let n=a.checkEntitlement;return d(t,n,e)},async readHoldings(e={}){return d(t,ge,e)}}}function oe(t){return{async readLedger(e){let n=a.readLedger;return d(t,n,{query:e})},async readCreditStatement(e){A(e);let n=a.readCreditStatement;return d(t,n,e)},async quoteBalance(e){A(e);let n=a.quoteBalance;return d(t,n,{command:e})}}}function ae(t){return{async setupPayment(e){A(e);let n=a.setupPayment;return d(t,n,e)},async readPaymentSetup(e){A(e);let n=a.readPaymentSetup;return d(t,n,e)},async readBillingInvoice(e){A(e);let n=a.readBillingInvoice;return d(t,n,e)},async readBillingControls(e={}){A(e);let n=a.readBillingControls;return d(t,n,e)},async prepareBillingAuthorization(e){A(e);let n=a.prepareBillingAuthorization;return d(t,n,e)},async confirmBillingAuthorization(e){A(e);let n=a.confirmBillingAuthorization;return d(t,n,e)},async setBillingCoupons(e){A(e);let n=a.setBillingCoupons;return d(t,n,e,{request:"Invalid billing coupon list",response:"Invalid billing coupon receipt"})},async revokeBillingAuthorization(e){A(e);let n=a.revokeBillingAuthorization;return d(t,n,e)},async listBillingInvoices(e={after:null,limit:25}){A(e);let n=a.listBillingInvoices;return d(t,n,e)},async confirmBillingAdjustment(e){A(e);let n=a.confirmBillingAdjustment;return d(t,n,e)}}}function ce(t){return{async previewUpdate(e){A(e);let n=a.previewUpdate;return d(t,n,e)},async update(e){A(e);let n=a.update;return d(t,n,e)},async readSubscriptionUpdate(e){A(e);let n=a.readSubscriptionUpdate;return d(t,n,e)},async restoreNativePurchase(e){A(e);let n=a.restoreNativePurchase;return d(t,n,e)},async previewAttach(e){A(e);let n=a.previewAttach;return d(t,n,e)},async attach(e){A(e);let n=a.attach;return d(t,n,e)},async readSubscriptionOperation(e){A(e);let n=a.readSubscriptionOperation;return d(t,n,e)}}}function ue(t){return{async redeemReward(e){return A(e),(await d(t,a.redeemReward,{...e,requestId:e.requestId??crypto.randomUUID()},{request:"Invalid reward redemption",response:"Invalid reward receipt"})).redemption},async claimRewardProduct(e){return A(e),(await d(t,a.claimRewardProduct,e,{request:"Invalid reward product claim",response:"Invalid reward product checkout"})).checkout},async createReferralCode(e){return A(e),(await d(t,a.createReferralCode,{...e,requestId:e.requestId??crypto.randomUUID()},{request:"Invalid referral program",response:"Invalid referral code"})).referralCode},async redeemCoupon(e,n=crypto.randomUUID()){let i=await d(t,a.redeemCoupon,{code:e,requestId:n},{request:"Invalid coupon code",response:"Invalid Coupon receipt"});return{offer:i.offer,reason:i.reason}},async claimCoupon(e,n=crypto.randomUUID()){let i=await d(t,a.grantOffer,{couponId:e,requestId:n},{request:"Invalid Coupon claim",response:"Invalid Coupon receipt"});return{offer:i.offer,reason:i.reason}},async listOffers(){return(await d(t,a.listOffers,{},{response:"Invalid offers response"})).offers}}}function de(t){return{...se(t),...oe(t),...ae(t),...ce(t),...ue(t)}}function pe(t){return{async resolveContent(e){A(e);let n=a.resolveContent;return d(t,n,e)},async resolvePaywall(e){A(e);let n=a.resolvePaywall;return d(t,n,e)},async resolveOffering(e){A(e);let n=a.resolveOffering;return d(t,n,e)}}}var J=t=>new TextEncoder().encode(JSON.stringify(t)).length,le=16384;function fe(t,e){let n=0,i,c=f=>{i={config:structuredClone(f),until:Date.now()+3e4}},o=[],l=null,y;function P(){if(!e())throw new s("NOT_IDENTIFIED","Call identify before using Features or events")}function g(){y||!o.length||(y=setTimeout(()=>{y=void 0,D().catch(()=>{}).finally(g)},5e3),typeof y=="object"&&"unref"in y&&y.unref())}function b(f,w={},E={}){if(P(),i&&Date.now()<i.until&&!X(i.config,f))return;C();let h=a.trackEvents.request.parse({events:[{eventUuid:crypto.randomUUID(),timestamp:new Date().toISOString(),name:f,properties:w,...E}]}).events[0];if(J({events:[h]})>le)throw new s("INVALID_REQUEST","Event exceeds the delivery size limit");if(o.length>=500)throw new s("EVENT_QUEUE_FULL","Flush pending events before tracking more");o.push(structuredClone(h)),g()}async function D(f=!1){if(P(),l)return l;let w=n,E=(async()=>{let h={inserted:0,duplicates:0,rejected:0,skipped:0},O=o.length;for(;O&&w===n;){let r=[],u=J({events:[]});for(let S of o.slice(0,Math.min(O,100))){let q=J(S)+(r.length?1:0);if(r.length&&u+q>le)break;r.push(S),u+=q}let p=a.trackEvents,I=await d(t,p,{events:r},void 0,{keepalive:f});if(w!==n)throw new s("IDENTITY_CHANGED","Event identity changed during delivery");if(I.inserted+I.duplicates+I.rejected+I.skipped!==r.length)throw new s("INVALID_RESPONSE","Incomplete event acknowledgement");c(I.analyticsConfig),o.splice(0,r.length),O-=r.length,h.inserted+=I.inserted,h.duplicates+=I.duplicates,h.rejected+=I.rejected,h.skipped+=I.skipped}return h})();l=E;try{return await E}finally{l===E&&(l=null)}}let m;function C(){if(m||typeof document>"u")return;let f=()=>{document.visibilityState==="hidden"&&e()&&o.length&&D(!0).catch(()=>{})};document.addEventListener("visibilitychange",f),m=()=>document.removeEventListener("visibilitychange",f)}return{rememberConfiguration:c,track:b,flush:D,reset(){n++,i=void 0,clearTimeout(y),y=void 0,o=[],l=null},detachVisibility(){m?.(),m=void 0}}}function me(t){let e=t.merchandise;if(typeof t.merchandiseId=="string")return{internalId:t.merchandiseId};if(!(!e||typeof e!="object"||Array.isArray(e))){if(typeof e.internalId=="string")return{internalId:e.internalId};if(typeof e.externalId=="string")return{id:e.externalId};if(typeof e.id=="string")return{id:e.id}}}function we(t){let e=me(t),{merchandiseId:n,merchandise:i,...c}=t;return{...c,...e?{merchandise:e}:{}}}function ye(t,e,n,i,c){if(c&&i&&(c.scope.projectId!==i.projectId||c.scope.environment!==i.environment))throw new s("SCOPE_MISMATCH","Configuration belongs to another App/environment");let o=0,l=new Set;function y(){if(!e())throw new s("NOT_IDENTIFIED","Call identify before using Features or events")}async function P(g={}){c||y();let b=o,D=!1,m=async()=>{if(D||b!==o)throw new s("IDENTITY_CHANGED","Feature identity changed");let R=a.getFeatures,T=c?{scope:{projectId:c.scope.projectId,environment:c.scope.environment},payload:await c.features()}:await d(t,R,{});if(b!==o)throw new s("IDENTITY_CHANGED","Feature identity changed");if(i&&(T.scope.projectId!==i.projectId||T.scope.environment!==i.environment))throw new s("INVALID_RESPONSE","Feature response scope changed");return n.rememberConfiguration(T.payload.analyticsConfig),T},C=await m(),f=!0,w,E=R=>{try{g.onError?.(R)}catch{}},h=(R,T,v)=>{try{let V=me(v);n.track(R,T,V?{merchandise:V}:{})}catch(V){E(V)}},O=ee({assertUsable:c?.assertFeatures,scope:C.scope,attributes:g.attributes,onError:g.onError,load:async()=>f?(f=!1,C.payload):(await m()).payload,evaluateRemote:async R=>{if(b!==o)throw new s("IDENTITY_CHANGED","Feature identity changed");let T=a.evaluateFeatures,v=await d(t,T,{...R,attributes:we(R.attributes)});if(v.scope.projectId!==C.scope.projectId||v.scope.environment!==C.scope.environment)throw new s("INVALID_RESPONSE","Remote Feature response scope changed");return{generation:v.generation,evaluatedAt:v.evaluatedAt,expiresAt:v.expiresAt,features:v.features,...v.merchandiseContext?{merchandiseContext:v.merchandiseContext}:{}}},onExperimentViewed:(R,T,v)=>h("Experiment Viewed",{experimentId:R.key,variationId:T.key},v),onFeatureUsage:(R,T,v)=>h("Feature Evaluated",{feature:R,value:T.value,source:T.source,ruleId:T.ruleId,...T.experimentResult?{variationId:T.experimentResult.key}:{}},v)}),r=O.refresh;function u(){clearTimeout(w),!c&&(D||b!==o||!O.expiresAt||(w=setTimeout(()=>{p().catch(E)},Math.min(2147483647,Math.max(1e3,Date.parse(O.expiresAt)-Date.now()))),typeof w=="object"&&"unref"in w&&w.unref()))}async function p(){try{return await r()}finally{u()}}let I=()=>{D||p().catch(E)},S=O.subscribe(u),q=c?.subscribe(()=>{!D&&c.fresh&&p().catch(E)});function k(){D||(D=!0,clearTimeout(w),typeof window<"u"&&window.removeEventListener("focus",I),S(),q?.(),O.reset(),l.delete(k))}l.add(k);try{await O.init(),(g.attributes?.merchandise||g.attributes?.merchandiseId)&&await O.refreshRemote()}catch(R){throw k(),R}return u(),!c&&typeof window<"u"&&window.addEventListener("focus",I),Object.assign(O,{refresh:p,destroy:k})}return{features:P,reset(g){o++,g();for(let b of l)b()}}}import{z as ve}from"zod";function Ie(t,e){let n="source"in e?{funnelId:e.source.id,funnelVersionId:e.source.versionId}:"versionId"in e?{funnelId:e.funnelId,funnelVersionId:e.versionId}:e,i=ve.object({funnelId:H.shape.id,funnelVersionId:H.shape.versionId.optional()}).safeParse(n);if(!i.success)throw new s("INVALID_REQUEST","A valid Funnel source is required");let c=Object.freeze(i.data);function o(l){if("customerId"in l)throw new s("INVALID_REQUEST","Customer identity cannot be overridden");if("funnelId"in l&&l.funnelId!==void 0&&l.funnelId!==c.funnelId||"funnelVersionId"in l&&l.funnelVersionId!==void 0&&l.funnelVersionId!==c.funnelVersionId)throw new s("SCOPE_MISMATCH","The original Funnel source cannot change");return{...l,...c}}return{async claimCoupon(l,y=crypto.randomUUID()){let P=a.grantOffer,g=await d(t,P,o({couponId:l,requestId:y}));return{offer:g.offer,reason:g.reason}},async resolveOffering(l){let y=a.resolveOffering;return d(t,y,o(l))},async resolvePaywall(l){let y=a.resolvePaywall;return d(t,y,o(l))},async previewAttach(l){let y=a.previewAttach;return d(t,y,o(l))}}}function Dt(t){return Ae(t)}function Ae(t){let e=Z(t),n=e.request,i;try{i=ne(t.push,e,t.scope??t.configuration?.scope)}catch(y){throw e.dispose(),y}let c=ie(e,()=>{l.reset(o.reset),o.detachVisibility()},{beforeIdentify:i.identify,beforeReset:i.reset,afterChange:i.start,beforeDestroy:i.destroy}),o=fe(n,c.isIdentified),l=ye(n,c.isIdentified,o,t.scope,t.configuration);return{session:e.session,...re(n,i),...de(n),...pe(n),forFunnel(y){return c.assertActive(),Ie(n,y)},async features(y={}){return c.assertActive(),l.features(y)},track(y,P,g={}){return o.track(y,P,g)},flush(){return o.flush()},...c.methods}}function Ut(t){if(!L.test(t.customerToken))throw new s("INVALID_TOKEN","A customer credential is required");if(!t.scope)throw new s("INVALID_REQUEST","An explicit App and environment scope is required");let e=te({...t,scope:t.scope,apiKey:t.customerToken});return{async start(n){let i=await e.start(n),c=B({...t,runToken:i.runToken});c.identify(t.customerToken);let o=i.run.instruction?.type==="evaluate_segment"?await c.get():i;return{...i,...o,controller:c}}}}function Gt(t){if(!t.scope)throw new s("INVALID_CONFIGURATION","An explicit process App/environment scope is required");if(t.session!==void 0)throw new s("INVALID_CONFIGURATION","The merchant process adapter owns the session");let e=null,n,i=0,c=new Set,o=new Map,l=new Map;async function y(m){let C,f=new Promise((w,E)=>{C=setTimeout(()=>E(new s("TIMEOUT","Process bridge request timed out")),t.timeoutMs??35e3)});try{return await Promise.race([Promise.resolve().then(m),f])}finally{clearTimeout(C)}}function P(m){throw m instanceof s&&(m.status===401||m.reason==="CUSTOMER_BINDING_CONFLICT")&&(i++,n?.reset(),n=void 0,e=null,o.clear(),l.clear()),m}function g(m,C){if(C!==i)throw new s("IDENTITY_CHANGED","Process was detached during a request");let f=$.parse(m);if(f.scope.projectId!==t.scope.projectId||f.scope.environment!==t.scope.environment)throw new s("SCOPE_MISMATCH","Process response belongs to another App/environment");if(e&&(e.run.id!==f.run.id||e.run.source.versionId!==f.run.source.versionId||e.run.source.id!==f.run.source.id||e.run.runExpiresAt!==f.run.runExpiresAt||e.run.identity.startedAs!==f.run.identity.startedAs||e.run.identity.participantId!==f.run.identity.participantId||e.run.identity.binding&&f.run.identity.binding&&e.run.identity.binding.id!==f.run.identity.binding.id))throw new s("INVALID_RESPONSE","The process changed its Run or Customer binding");if(!e||f.run.revision>=e.run.revision){if(e?.run.identity.binding&&!f.run.identity.binding)throw new s("INVALID_RESPONSE","The process lost its Customer binding");e=f;for(let I of c)G(I,f.run);f.run.instruction?.type==="authentication_required"&&G(t.onAuthenticationRequired,f.run)}f.settlement?.accepted!==void 0&&l.set(f.settlement.requestId,f.settlement.accepted);let{identity:w,instruction:E,...h}=f.run,{contract:O,settlement:r,...u}=f,p=r&&(({accepted:I,...S})=>S)(r);return{...u,run:{...h,authenticated:w.binding!==null,instruction:E?.type==="authentication_required"?null:E},...p?{settlement:p}:{}}}let b=m=>(o.has(m)||o.set(m,e?.run.identity.binding?.id??null),o.get(m));async function D(m){let C=i,f=e?.run.identity.binding?.id??null,w=h=>{if(f!==(e?.run.identity.binding?.id??null))throw h;return P(h)};if(m.operation==="page_experiments"){if(!t.adapter.pageExperiments)throw new s("CAPABILITY_UNAVAILABLE","Process page experiments are unavailable",501);return y(()=>t.adapter.pageExperiments(m.release,m.usedReceiptIds)).catch(w)}let E;if(m.operation==="get"){let{operation:h,customerToken:O,...r}=m;E=await y(()=>t.adapter.get({...r,...r.settlementRequestId?{settlementBindingId:b(r.settlementRequestId)}:{}})).catch(w)}else if(m.operation==="review")E=await y(()=>t.adapter.review(m.receiptId)).catch(w);else{if(m.operation==="start")throw new s("INVALID_REQUEST","Use process.open for entry");{let{customerToken:h,...O}=m;E=await y(()=>t.adapter.command(O,b(O.requestId))).catch(w)}}return g(E,C)}return{get view(){return e?.run??null},get controller(){return n},async open(m){let C=i,f=await y(()=>t.adapter.open(m)).catch(P);if(g(f,C),!n){n=B({...t,runToken:f.runToken,process:{request:D,binding:b,restore(h){for(let[O,r]of Object.entries(h))o.set(O,r)}}});let w=n,E=w.submit;w.submit=async h=>{try{return await E(h)}catch(O){if(!(O instanceof s)||O.reason!=="IDENTITY_CONTEXT_CHANGED"||h.operation!=="submit"||h.input.type!=="screen"||o.get(h.requestId)!==null)throw O;await w.settle?.(h.requestId),await w.get();let r=w.view;if(l.get(h.requestId)!==!1||!r||r.id!==e?.run.id||r.nodeId!==h.nodeId||r.visit!==h.visit||!e?.run.identity.binding)throw O;return E({...h,requestId:crypto.randomUUID(),revision:r.revision})}}}await n.get();for(let w of n.pendingCommands??[])o.has(w.requestId)&&o.get(w.requestId)!==(e?.run.identity.binding?.id??null)&&await n.settle?.(w.requestId);return{run:e.run,controller:n}},async syncIdentity(){let m=i;g(await y(()=>t.adapter.syncIdentity()).catch(P),m),await n?.get();for(let C of n?.pendingCommands??[])o.has(C.requestId)&&o.get(C.requestId)!==(e?.run.identity.binding?.id??null)&&await n?.settle?.(C.requestId);return e.run},async detach(){i++,n?.reset(),n=void 0,e=null,o.clear(),l.clear(),await y(()=>t.adapter.detach())},forProcess(m){if(!e?.run.identity.binding)throw new s("UNAUTHENTICATED","Sign in before a commercial operation",401);return{runId:e.run.id,bindingId:e.run.identity.binding.id,receiptId:m}},subscribe(m){return c.add(m),()=>{c.delete(m)}},destroy(){i++,n?.reset(),n=void 0,e=null,o.clear(),l.clear(),c.clear()}}}export{Dt as a,Ae as b,Ut as c,Gt as d};
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import{a as _e,b as Re}from"./chunk-SSLZKIIU.js";import{a as Le,b as Ne,c as De,d as Pe}from"./chunk-T5COWMDA.js";import{a as Me}from"./chunk-26HU2HXU.js";import{a as C}from"./chunk-DSPLGTQI.js";import{Aa as Ce,Ca as Ie,Ga as ne,ba as ve,fa as se,ga as we,ha as le,ka as xe,la as J,na as Ee,pa as ke,ta as de,ua as ce,va as H,wa as Se,xa as ae,za as Ae}from"./chunk-PFHS7HK3.js";var ue='function qe(L){function K(e){return e.type==="stack"&&e.interaction?.type==="select"&&e.interaction.purpose==="product"&&!!e.interaction.pickerId}function ee(e){let a={};function t(n){if(K(n)){let r=a[n.interaction.pickerId]??={ids:[],defaultId:null};for(let i of n.children){let l=i.type==="stack"?i.bind?.plan:void 0;l&&!r.ids.includes(l)&&r.ids.push(l)}let o=n.children[n.interaction.defaultIndex];!r.defaultId&&o?.type==="stack"&&(r.defaultId=o.bind?.plan??null)}n.type==="stack"&&n.children.forEach(t)}return e.pages.forEach(n=>t(n.root)),a}function Ne(e,a,t){let n={};function r(c){if(c.hidden)return;if(c.type==="plan_picker"){let s=t.pickers[c.id];n[c.id]={ids:s?.options??[],defaults:s?.selected?[s.selected]:[],remembered:[]};return}if(c.type!=="stack")return;let f=c.children.filter(s=>!s.hidden),m=c.interaction;if(K(c)){let s=n[c.interaction.pickerId]??={ids:[],defaults:[],remembered:[]},g=t.pickers[c.interaction.pickerId]?.options??[];for(let y of f){let S=y.type==="stack"?y.bind?.plan:void 0;S&&g.includes(S)&&!s.ids.includes(S)&&s.ids.push(S),S&&y.id===a[c.id]&&s.remembered.push(S)}let b=c.children[c.interaction.defaultIndex];b?.type==="stack"&&!b.hidden&&b.bind?.plan&&s.defaults.push(b.bind.plan)}if(m?.type==="tabs"){let s=f.find(g=>g.id===a[c.id])??c.children[m.defaultIndex];s&&r(s)}else if(m?.type==="toggle"){let s=typeof a[c.id]=="boolean"?a[c.id]:m.defaultEnabled,g=c.children[s?0:1];g&&r(g)}else f.forEach(r)}let o=typeof a.__page=="string"?a.__page:e.initialPageId??e.pages[0]?.id,i=e.pages.find(c=>c.id===o);i&&r(i.root);let l={};for(let[c,f]of Object.entries(n)){let m=a[c],s=f.remembered[0]??(f.ids.includes(t.pickers[c]?.selected??"")?t.pickers[c]?.selected:f.defaults[0]);l[c]=typeof m=="string"?f.ids.includes(m)?m:"":s&&f.ids.includes(s)?s:""}for(let c of Object.keys(ee(e)))l[c]??="";return l}let ne=window;for(let e=0;e<L.hostDepth;e++)ne=ne.parent;let Ut=window,qt={none:0,xs:4,sm:8,md:12,lg:20,xl:32},Wt={none:0,sm:4,md:8,lg:14,full:9999},le={system:\'system-ui,-apple-system,"Segoe UI",Roboto,"PingFang SC","Hiragino Sans GB","Microsoft YaHei","Noto Sans CJK SC",sans-serif\',serif:\'Georgia,"Times New Roman","Songti SC","Noto Serif CJK SC",serif\',rounded:\'ui-rounded,"SF Pro Rounded","Hiragino Maru Gothic ProN",system-ui,sans-serif\',mono:"ui-monospace,SFMono-Regular,Menlo,Consolas,monospace"},ht={start:"flex-start",center:"center",end:"flex-end",stretch:"stretch"},bt={start:"flex-start",center:"center",end:"flex-end",between:"space-between"},Vt={start:"start",center:"center",end:"end",between:"stretch"},Jt={start:"start",center:"center",end:"end",stretch:"stretch"},yt={"1:1":"1 / 1","4:3":"4 / 3","16:9":"16 / 9","3:1":"3 / 1"},Gt=`\n*,*::before,*::after{box-sizing:border-box}\nhtml,body{margin:0;padding:0;background:transparent}\nbody{font-family:var(--g-font);color:var(--g-text);-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility}\n#g-card{background:var(--g-bg);min-height:1px}\n#g-card[data-g-presentation=fullscreen]{min-height:100vh;display:flex;flex-direction:column}\n#g-card[data-g-presentation=fullscreen]>[data-g-node]{flex:1 0 auto}\n[hidden]{display:none!important}\n.g-stack{display:flex;min-width:0}\n.g-empty{min-height:48px;outline:1px dashed #c9cfee;outline-offset:-1px;background:#eef0fa44}\n.g-empty::after{content:attr(data-g-editor-placeholder);font-size:12px;color:#737b8e;align-self:center;margin:auto;pointer-events:none}\n.g-v{flex-direction:column}\n.g-h{flex-direction:row;flex-wrap:wrap}\n.g-o{display:grid;grid-template-columns:minmax(0,1fr)}\n/* Each authored overlay layer paints as a unit in document order. */\n.g-o>*{grid-area:1/1;min-width:0;isolation:isolate}\n.g-text{margin:0;white-space:pre-line;overflow-wrap:anywhere;min-width:0}\n.g-title{font-size:26px;line-height:1.2;font-weight:700;letter-spacing:-.01em;text-wrap:balance}\n.g-heading{font-size:20px;line-height:1.3;font-weight:650;text-wrap:balance}\n.g-body{font-size:15px;line-height:1.6;text-wrap:pretty}\n.g-caption{font-size:12px;line-height:1.5;letter-spacing:.02em}\n.g-btn{appearance:none;border:0;margin:0;font:inherit;font-size:15px;font-weight:600;line-height:1.25;padding:12px 18px;border-radius:var(--g-radius);cursor:pointer;min-height:44px;text-align:center;overflow-wrap:anywhere;touch-action:manipulation;-webkit-tap-highlight-color:transparent;transition:transform 150ms ease-out,filter 150ms ease,background-color 150ms ease,color 150ms ease,box-shadow 150ms ease}\n.g-btn-primary{background:var(--g-primary);color:var(--g-on-primary)}\n.g-btn.g-stack .g-text{color:inherit}\n.g-btn-secondary{background:transparent;color:var(--g-text);box-shadow:inset 0 0 0 1px var(--g-border)}\n.g-btn-link{background:transparent;color:var(--g-muted);padding:8px 12px;min-height:36px;font-weight:500}\n.g-btn:focus-visible{outline:3px solid var(--g-focus);outline-offset:2px}\n.g-btn:active:not(:disabled){transform:scale(.97)}\n.g-btn:disabled{cursor:not-allowed;opacity:.55}\n@media (hover:hover) and (pointer:fine){.g-btn-primary:hover{filter:brightness(1.08)}.g-btn-secondary:hover{background:var(--g-surface)}.g-btn-link:hover{color:var(--g-text)}}\n@media (pointer:coarse){.g-btn-link{min-height:44px}}\n[role=radio]:not(.g-btn):focus-visible,[role=checkbox]:focus-visible{outline:none;box-shadow:0 0 0 2px var(--g-bg),0 0 0 5px var(--g-focus)!important}\n[role=tab]:focus-visible{outline:3px solid var(--g-focus);outline-offset:2px}\n.g-option{display:flex;align-items:baseline;justify-content:space-between;flex-wrap:wrap;gap:4px 12px}\n.g-option-name{min-width:0}\n.g-option-price{font-variant-numeric:tabular-nums;white-space:nowrap}\n.g-img{display:block;width:100%;overflow:hidden}\n.g-img img{display:block;width:100%;height:auto}\n.g-img[data-aspect] img{height:100%}\n.g-divider{border:0;border-top:1px solid var(--g-border);margin:0;align-self:stretch}\n.g-custom{display:block;min-width:0}\n.g-missing{opacity:.45}\n.g-box{position:absolute;pointer-events:none;z-index:2147483646;border:1px solid var(--g-edit);border-radius:2px;display:none}\n.g-box[data-kind=select]{border-width:2px}\n.g-box span{position:absolute;left:-2px;bottom:100%;margin-bottom:2px;padding:1px 6px;font:500 11px/16px system-ui,sans-serif;color:#fff;background:var(--g-edit);border-radius:3px;white-space:nowrap;max-width:240px;overflow:hidden;text-overflow:ellipsis}\n.g-box[data-below] span{bottom:auto;top:100%;margin:2px 0 0}\n[data-g-editor] .g-btn{cursor:default}\n.g-data{--g-data-ink:var(--g-text);--g-data-muted:var(--g-muted);--g-data-line:var(--g-border);--g-data-surface:var(--g-surface);width:100%;min-width:0;color:var(--g-data-ink);font-variant-numeric:tabular-nums;container-type:inline-size;container-name:customer-data}\n.g-data-header{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:18px}\n.g-data-heading{display:flex;align-items:center;gap:10px;font-size:18px;line-height:1.35;font-weight:600;margin:0;letter-spacing:-.025em}\n.g-data-icon{display:block;width:18px;height:18px;flex:none}\n.g-data-controls{display:flex;align-items:center;gap:8px;flex-wrap:wrap}\n.g-data-button,.g-data-select{font:500 13px/1.4 var(--g-font);color:var(--g-data-ink);background:transparent;border:1px solid color-mix(in srgb,var(--g-data-ink) 52%,transparent);border-radius:6px;min-height:36px;padding:7px 10px;cursor:pointer;transition:background .15s,border-color .15s,transform .15s}\n.g-data-button:hover{background:var(--g-data-surface)}\n.g-data-button:focus-visible,.g-data-select:focus-visible,.g-data-sources>summary:focus-visible{outline:3px solid var(--g-data-ink);outline-offset:3px}\n.g-data-button:disabled,.g-data-select:disabled{opacity:.4;cursor:default}\n.g-data-refresh{border-color:transparent;width:32px;min-height:32px;display:grid;place-items:center;padding:6px;color:var(--g-data-muted)}\n.g-data-refresh:hover{color:var(--g-data-ink)}\n.g-data-refreshing .g-data-icon{animation:g-data-spin 1.2s linear infinite}\n@keyframes g-data-spin{to{transform:rotate(360deg)}}\n.g-data-buy{background:var(--g-primary);color:var(--g-on-primary);border-color:transparent;min-height:40px;font-size:13px;font-weight:600}\n.g-data-buy:hover{background:var(--g-primary);filter:brightness(.95);transform:translateY(-1px)}\n.g-data[data-preview=true] .g-data-buy:disabled{opacity:.8}\n.g-data-note{font-size:13px;line-height:1.6;color:var(--g-data-muted);margin:12px 0;overflow-wrap:anywhere}\n.g-data-error{padding:12px 0;border-block:1px solid var(--g-data-line);color:var(--g-data-ink);font-size:13px;line-height:1.6}\n.g-data-resource+.g-data-resource{border-top:1px solid var(--g-data-line);padding-top:24px;margin-top:24px}\n.g-data-name{font-size:12px;color:var(--g-data-muted);font-weight:500;margin:0 0 10px}\n.g-data-balance{display:flex;align-items:baseline;gap:14px;flex-wrap:wrap;margin-bottom:18px}\n.g-data-number{font-family:var(--g-data-number-font,var(--g-font));font-size:var(--g-data-number-size,clamp(44px,7vw,72px));font-weight:var(--g-data-number-weight,500);line-height:1.08;letter-spacing:-.055em;overflow-wrap:anywhere;max-width:100%}\n.g-data-fraction{font-size:22px;letter-spacing:-.025em;color:var(--g-data-muted)}\n.g-data-unit{font-size:13px;color:var(--g-data-muted)}\n.g-data-facts{display:flex;gap:24px;flex-wrap:wrap;font-size:13px;line-height:1.6;color:var(--g-data-muted)}\n.g-data-facts strong{font-weight:600;color:var(--g-data-ink);margin-inline-start:6px}\n.g-data-expiry{margin-inline-start:auto;font-size:12px}\n.g-data-resource-label{font-size:12px;letter-spacing:0;color:var(--g-data-muted);padding-inline-start:10px;border-inline-start:1px solid var(--g-data-line);font-weight:400}\n.g-data-sources{margin-top:20px;border-top:1px solid var(--g-data-line);padding-top:12px}\n.g-data-sources>summary{display:flex;align-items:center;justify-content:space-between;gap:10px;font-size:13px;font-weight:500;cursor:pointer;line-height:1.5;list-style:none;border-radius:3px;padding:6px 0}\n.g-data-sources>summary::-webkit-details-marker{display:none}\n.g-data-sources>summary>.g-data-icon{width:16px;height:16px;transition:transform .18s}\n.g-data-sources[open]>summary>.g-data-icon{transform:rotate(180deg)}\n.g-data-sources[open]>.g-data-list{animation:g-data-reveal .18s ease-out}\n@keyframes g-data-reveal{from{opacity:0;transform:translateY(-3px)}to{opacity:1;transform:translateY(0)}}\n.g-data-list{list-style:none;padding:0;margin:0;border-top:1px solid var(--g-data-line)}\n.g-data-row{display:grid;grid-template-columns:minmax(120px,1.5fr) minmax(80px,.75fr) minmax(90px,1fr);column-gap:20px;row-gap:10px;align-items:start;padding:18px 0;border-bottom:1px solid var(--g-data-line);min-width:0}\n.g-data-row-no-value,.g-data-row-no-status{grid-template-columns:minmax(0,1fr) auto;column-gap:16px}\n.g-data-row-no-value .g-data-row-status{text-align:end}\n.g-data-row-main{display:flex;align-items:flex-start;gap:12px;min-width:0}\n.g-data-row-copy{min-width:0}\n.g-data-row-mark{display:grid;place-items:center;width:34px;height:34px;flex:none;background:var(--g-data-surface);color:var(--g-data-muted);border:1px solid var(--g-data-line);border-radius:50%}\n.g-data-row-mark .g-data-icon{width:16px;height:16px}\n.g-data-row-label{font-size:15px;font-weight:600;line-height:1.5;overflow-wrap:anywhere;margin:0}\n.g-data-row-detail{font-size:13px;line-height:1.65;color:var(--g-data-muted);margin-top:4px;overflow-wrap:anywhere}\n.g-data-row-status{font-size:12px;line-height:1.6;color:var(--g-data-muted);padding:4px 8px;border-radius:4px;background:var(--g-data-surface);width:fit-content;justify-self:end;overflow-wrap:anywhere}\n.g-data-row-value{font-size:15px;font-weight:650;text-align:end;line-height:1.5;overflow-wrap:anywhere}\n.g-data-row-extra{grid-column:1/-1;display:flex;justify-content:space-between;align-items:center;gap:16px;flex-wrap:wrap}\n.g-data-footer{display:flex;align-items:center;justify-content:space-between;gap:16px;margin-top:16px;font-size:12px;color:var(--g-data-muted)}\n.g-data-empty{display:flex;align-items:center;gap:10px;padding:28px 0;border-block:1px solid var(--g-data-line);font-size:13px;line-height:1.6;color:var(--g-data-muted)}\n.g-data-empty>.g-data-icon{width:20px;height:20px;opacity:.65}\n.g-data-skeleton{padding-block:8px;animation:g-data-reveal .18s ease-out}\n.g-data-skeleton-line{display:block;background:var(--g-data-line);border-radius:4px;animation:g-data-pulse 1.4s ease-in-out infinite}\n.g-data-skeleton-value{width:42%;height:var(--g-data-number-size,64px);margin:4px 0 22px}\n.g-data-skeleton-meta{width:65%;height:12px;margin-bottom:20px}\n.g-data-skeleton-row{display:flex;justify-content:space-between;gap:24px;padding:20px 0;border-block-end:1px solid var(--g-data-line)}\n.g-data-skeleton-row>.g-data-skeleton-line:first-child{width:52%;height:14px}\n.g-data-skeleton-row>.g-data-skeleton-line:last-child{width:18%;height:14px}\n.g-data[data-layout=compact] .g-data-skeleton-value{height:var(--g-data-number-size,34px);margin-bottom:16px}\n.g-data-recovery{margin:12px 0}\n.g-data-live-status{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip-path:inset(50%);white-space:nowrap}\n@keyframes g-data-pulse{50%{opacity:.4}}\n.g-data-updated{font-size:11px;margin-bottom:0}\n.g-data-preview{font-size:11px;color:var(--g-data-muted);border:1px solid var(--g-data-line);border-radius:4px;padding:3px 6px;white-space:nowrap}\n.g-data[data-source=credit_balance] .g-data-heading{font-size:15px;font-weight:500;letter-spacing:0}\n.g-data[data-source=credit_balance] .g-data-header{margin-bottom:18px}\n.g-data[data-source=credit_balance] .g-data-updated{margin:0;font-size:11px;color:var(--g-data-muted)}\n.g-data[data-source=credit_balance] .g-data-sources>summary{max-width:100%}\n.g-data-table-head{display:grid;grid-template-columns:minmax(0,1fr) 92px minmax(120px,.45fr);gap:16px;padding:10px 0;font-size:12px;color:var(--g-data-muted);border-block:1px solid var(--g-data-line)}\n.g-data-table-head>span:not(:first-child){text-align:end}\n.g-data[data-source=credit_transactions] .g-data-list{border-top:0}\n.g-data[data-source=credit_transactions] .g-data-row{grid-template-columns:minmax(0,1fr) 92px minmax(120px,.45fr);gap:16px;padding:18px 0;align-items:center;transition:background .15s}\n.g-data[data-source=credit_transactions] .g-data-row:hover{background:var(--g-data-surface)}\n.g-data[data-source=credit_transactions] .g-data-row-status{grid-column:2;grid-row:1}\n.g-data[data-source=credit_transactions] .g-data-row-extra{grid-column:3;grid-row:1;justify-content:flex-end}\n.g-data[data-source=credit_transactions] .g-data-facts{flex-direction:column;align-items:flex-end;gap:8px}\n.g-data[data-source=credit_transactions] .g-data-facts>span{display:flex;flex-direction:column-reverse;align-items:flex-end;font-size:12px}\n.g-data[data-source=credit_transactions] .g-data-facts strong{font-size:15px;margin-inline-start:0;font-weight:600}\n.g-data[data-source=credit_packs] .g-data-row{border:0;padding:16px 0;grid-template-columns:minmax(0,1fr) auto}\n.g-data[data-source=credit_packs] .g-data-list{border:0}\n.g-data[data-source=credit_packs] .g-data-row+.g-data-row{border-top:1px solid var(--g-data-line)}\n.g-data[data-source=credit_packs] .g-data-row-value{font-size:22px;letter-spacing:-.04em}\n.g-data[data-source=credit_packs] .g-data-row-extra{display:block}\n.g-data[data-source=credit_packs] .g-data-buy{width:100%;margin-top:2px}\n.g-data[data-source=credit_packs] .g-data-header{margin-bottom:4px}\n.g-data[data-layout=compact] .g-data-header{margin-bottom:10px}\n.g-data[data-layout=compact] .g-data-heading{font-size:14px;color:var(--g-data-muted);letter-spacing:0;font-weight:500}\n.g-data[data-layout=compact] .g-data-number{font-size:var(--g-data-number-size,34px)}\n.g-data[data-layout=compact] .g-data-row{padding:10px 0;column-gap:12px}\n.g-data[data-layout=compact] .g-data-row{grid-template-columns:minmax(0,1fr) auto}\n.g-data[data-layout=compact] .g-data-row-status{grid-column:1;grid-row:2;justify-self:start}\n.g-data[data-layout=compact] .g-data-row-value{grid-column:2;grid-row:1}\n.g-data[data-layout=compact] .g-data-updated{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip-path:inset(50%);white-space:nowrap}\n.g-data[data-source=credit_transactions][data-layout=compact] .g-data-table-head{display:none}\n.g-data[data-source=credit_transactions][data-layout=compact] .g-data-row{grid-template-columns:minmax(0,1fr) 92px minmax(120px,.45fr);gap:16px;padding:14px 0}\n.g-data[data-source=credit_transactions][data-layout=compact] .g-data-row-status{grid-column:2;grid-row:1}\n.g-data[data-source=credit_transactions][data-layout=compact] .g-data-row-extra{grid-column:3;grid-row:1;justify-content:flex-end}\n.g-data[data-source=membership][data-layout=compact] .g-data-list{border:0}\n.g-data[data-source=membership][data-layout=compact] .g-data-row{padding:0;border:0}\n.g-data[data-source=membership][data-layout=compact] .g-data-row-status{grid-column:2;grid-row:1;justify-self:end}\n.g-data[data-source=membership][data-layout=compact] .g-data-header{margin-bottom:6px}\n.g-data[data-source=membership][data-layout=full] .g-data-heading{font-size:14px;font-weight:500;color:var(--g-data-muted)}\n.g-data[data-source=membership][data-layout=full] .g-data-list{border-top:0}\n.g-data[data-source=membership][data-layout=full] .g-data-row{padding:12px 0 22px;column-gap:24px}\n.g-data[data-source=membership][data-layout=full] .g-data-row-label{font-family:var(--g-data-display-font,var(--g-font));font-size:var(--g-data-display-size,30px);font-weight:var(--g-data-display-weight,600);letter-spacing:-.035em;line-height:1.25}\n.g-data[data-source=membership][data-layout=full] .g-data-row-detail{font-size:13px;margin-top:12px}\n.g-data[data-source=membership][data-layout=full] .g-data-row-status{font-size:12px;padding:5px 9px}\n.g-data[data-source=customer_plans][data-layout=full] .g-data-row{padding:24px 0;grid-template-columns:minmax(0,1fr) 140px 180px;gap:24px;align-items:center}\n.g-data[data-source=customer_plans][data-layout=full] .g-data-row-label{font-family:var(--g-data-display-font,var(--g-font));font-size:22px;font-weight:600}\n.g-data[data-source=customer_plans][data-layout=full] .g-data-row-value{font-size:24px;font-weight:500;letter-spacing:-.035em}\n.g-data[data-source=customer_plans][data-layout=full] .g-data-row-status{font-size:12px;padding:5px 9px}\n@container customer-data (min-width:600px){\n .g-data[data-source=credit_packs][data-layout=full]>.g-data-list,.g-data[data-source=customer_plans][data-layout=full]>.g-data-list{display:grid;grid-template-columns:repeat(auto-fit,minmax(250px,1fr));gap:24px;border:0}\n .g-data[data-source=credit_packs][data-layout=full]>.g-data-list>.g-data-row,.g-data[data-source=customer_plans][data-layout=full]>.g-data-list>.g-data-row{grid-template-columns:minmax(0,1fr);grid-template-rows:auto auto 1fr;gap:20px;padding:24px;border:1px solid var(--g-data-line);border-radius:14px;align-items:start;align-content:start;transition:border-color .16s,background .16s}\n .g-data[data-source=credit_packs][data-layout=full]>.g-data-list>.g-data-row:hover{border-color:var(--g-data-ink);background:var(--g-data-surface)}\n .g-data[data-source=customer_plans][data-layout=full]>.g-data-list>.g-data-row{padding:24px 0;border:0;border-top:1px solid var(--g-data-ink);border-radius:0}\n .g-data[data-source=credit_packs][data-layout=full]>.g-data-list>.g-data-row>.g-data-row-main,.g-data[data-source=customer_plans][data-layout=full]>.g-data-list>.g-data-row>.g-data-row-main{grid-column:1;grid-row:1}\n .g-data[data-source=credit_packs][data-layout=full]>.g-data-list>.g-data-row>.g-data-row-value,.g-data[data-source=customer_plans][data-layout=full]>.g-data-list>.g-data-row>.g-data-row-value{grid-column:1;grid-row:2;text-align:start;font-size:30px;line-height:1.3;letter-spacing:-.035em;font-weight:500}\n .g-data[data-source=credit_packs][data-layout=full]>.g-data-list>.g-data-row>.g-data-row-extra{grid-column:1;grid-row:3;align-self:end}\n .g-data[data-source=customer_plans][data-layout=full]>.g-data-list>.g-data-row>.g-data-row-status{grid-column:1;grid-row:3;justify-self:start;align-self:end}\n .g-data[data-source=customer_plans][data-layout=full]>.g-data-list>.g-data-row>.g-data-row-extra{grid-column:1;grid-row:auto}\n .g-data[data-source=credit_packs][data-layout=full] .g-data-header,.g-data[data-source=customer_plans][data-layout=full] .g-data-header{margin-bottom:20px}\n .g-data[data-source=credit_packs][data-layout=full] .g-data-buy{min-height:44px;border-radius:8px}\n}\n@media(max-width:560px){.g-data[data-source=customer_plans][data-layout=full] .g-data-row{grid-template-columns:minmax(0,1fr) auto;gap:12px}.g-data[data-source=customer_plans][data-layout=full] .g-data-row-value{font-size:20px}.g-data[data-source=membership][data-layout=full] .g-data-row-label{font-size:var(--g-data-display-size,24px)}}\n@media(max-width:560px){.g-data-header{gap:10px}.g-data-controls{gap:6px}.g-data-row{grid-template-columns:minmax(0,1fr) auto;column-gap:12px}.g-data-row-status{grid-column:1;grid-row:2}.g-data-row-value{grid-column:2;grid-row:1}.g-data-row-extra{grid-column:1/-1}.g-data-facts{gap:12px}.g-data-button,.g-data-select{min-height:40px;padding:8px 10px}.g-data-refresh{width:40px;padding:10px}.g-data-sources>summary{min-height:36px}.g-data-table-head{display:none}.g-data[data-source=credit_transactions] .g-data-row{grid-template-columns:minmax(0,1fr) minmax(95px,.45fr);gap:12px}.g-data[data-source=credit_transactions] .g-data-row-status{grid-column:1;grid-row:2;margin-inline-start:46px;justify-self:start}.g-data[data-source=credit_transactions] .g-data-row-extra{grid-column:2;grid-row:1/3}.g-data[data-source=membership][data-layout=compact] .g-data-row-status{grid-column:2;grid-row:1}}\n@media(max-width:560px){.g-data[data-source=credit_transactions][data-layout=compact] .g-data-row{grid-template-columns:minmax(0,1fr) minmax(95px,.45fr);gap:12px}.g-data[data-source=credit_transactions][data-layout=compact] .g-data-row-status{grid-column:1;grid-row:2;margin-inline-start:46px;justify-self:start}.g-data[data-source=credit_transactions][data-layout=compact] .g-data-row-extra{grid-column:2;grid-row:1/3}}\n@media(max-width:560px){.g-data[data-source=membership] .g-data-row-no-value .g-data-row-status{grid-column:2;grid-row:1;align-self:start;justify-self:end}}\n@media (prefers-reduced-motion:reduce){*,*::before,*::after{animation:none!important;transition:none!important}}\n`;function de(){return Object.create(null)}let $=null,J,We=new Set,F,fe,ce=new Map,Se=new Map,Ve=new Map,me=new Map,Ie=0,Q=new Map,Ee=new WeakMap,Je=new Map,Me=new Map,he=new Set,Ge=new WeakMap;function xt(e){return Ge.has(e)||Ge.set(e,e.disabled),Ge.get(e)}function Ce(e,a,t){e.disabled=t||he.has(a),e.setAttribute("aria-disabled",String(e.disabled))}function vt(e){he=new Set(Array.isArray(e)?e.filter(a=>typeof a=="string"&&!!$?.actions.some(t=>t.id===a)):[])}let Kt=`\nattribute vec2 aPosition;\nvarying vec2 vPlane;\n\nvoid main() {\n vPlane = aPosition * 0.5 + 0.5;\n gl_Position = vec4(aPosition, 0.0, 1.0);\n}\n`,Yt=`\nprecision highp float;\n\nvarying vec2 vPlane;\n\nuniform vec2 uCanvas;\nuniform float uClock;\nuniform float uPitch;\nuniform float uFill;\nuniform float uRound;\nuniform float uFeather;\nuniform float uWarp;\nuniform float uWarpScale;\nuniform float uDetailScale;\nuniform float uWaveScale;\nuniform float uFalloff;\nuniform float uGain;\nuniform float uAmbient;\nuniform vec3 uInk;\nuniform vec3 uHot;\nuniform float uGamma;\nuniform float uVignette;\nuniform float uOpacity;\nuniform vec3 uBackdrop;\nuniform float uBackdropAlpha;\nuniform vec3 uPointer;\nuniform float uCursorPull;\nuniform float uCursorGlow;\nuniform float uCursorReach;\n\nfloat chip(vec2 cell) {\n return fract(sin(dot(cell, vec2(12.543, 514.123))) * 4732.12);\n}\n\nfloat swell(vec2 spot) {\n vec2 cell = floor(spot);\n vec2 lean = fract(spot);\n lean = lean * lean * (3.0 - 2.0 * lean);\n\n float lo = mix(chip(cell), chip(cell + vec2(1.0, 0.0)), lean.x);\n float hi = mix(chip(cell + vec2(0.0, 1.0)), chip(cell + vec2(1.0, 1.0)), lean.x);\n return mix(lo, hi, lean.y);\n}\n\nvoid main() {\n vec2 pixel = vPlane * uCanvas;\n float pitch = max(uPitch, 2.0);\n\n vec2 grid = pixel / pitch;\n vec2 local = abs(fract(grid) - 0.5) * 2.0;\n float boxy = max(local.x, local.y);\n float orb = length(local);\n float bite = mix(boxy, orb, uRound);\n\n float aa = 2.0 / pitch;\n float soft = aa + uFeather * uFill;\n float tile = 1.0 - smoothstep(uFill - soft, uFill + soft, bite);\n\n vec2 field = pixel / max(uCanvas.y, 1.0);\n\n vec2 toward = uPointer.xy - field;\n float span = max(uCursorReach, 0.001);\n float near = exp(-dot(toward, toward) / (span * span)) * uPointer.z;\n field += toward * near * uCursorPull;\n\n float t = uClock;\n float inner = swell(field * uDetailScale - t * 0.66);\n vec2 folded = field + uWarp * swell(field * uWarpScale + t + inner * 0.5);\n float wave = swell(folded * uWaveScale - vec2(0.0, t));\n\n float ridge = pow(max(1.0 - wave, 0.0), uFalloff) * uGain;\n ridge += near * uCursorGlow;\n\n float level = clamp(uAmbient + ridge, 0.0, 1.0);\n level = pow(level, 1.0 / max(uGamma, 0.05));\n\n vec2 off = vPlane - 0.5;\n float edge = 1.0 - uVignette * smoothstep(0.2, 0.75, length(off));\n\n vec3 tint = mix(uInk, uHot, smoothstep(0.6, 1.0, level));\n float cover = clamp(level * tile * edge, 0.0, 1.0);\n float rest = uBackdropAlpha * (1.0 - cover);\n gl_FragColor = vec4(tint * cover + uBackdrop * rest, cover + rest) * uOpacity;\n}\n`;function _e(e,a,t){return Math.min(Math.max(e,a),t)}function wt(e,a,t){let n=e.createShader(a);return n?(e.shaderSource(n,t),e.compileShader(n),e.getShaderParameter(n,e.COMPILE_STATUS)?n:(e.deleteShader(n),null)):null}function Zt(e,a,t,n){let r=e.getContext("webgl",{alpha:!0,antialias:!1,premultipliedAlpha:!0,powerPreference:"low-power",depth:!1,stencil:!1});if(!r)return null;let o=wt(r,r.VERTEX_SHADER,Kt),i=wt(r,r.FRAGMENT_SHADER,Yt),l=r.createProgram();if(!o||!i||!l)return r.deleteShader(o),r.deleteShader(i),r.deleteProgram(l),null;if(r.attachShader(l,o),r.attachShader(l,i),r.linkProgram(l),r.deleteShader(o),r.deleteShader(i),!r.getProgramParameter(l,r.LINK_STATUS))return r.deleteProgram(l),null;let c=r.createBuffer();if(!c)return r.deleteProgram(l),null;r.useProgram(l),r.bindBuffer(r.ARRAY_BUFFER,c),r.bufferData(r.ARRAY_BUFFER,new Float32Array([-1,-1,1,-1,-1,1,-1,1,1,-1,1,1]),r.STATIC_DRAW);let f=r.getAttribLocation(l,"aPosition");r.enableVertexAttribArray(f),r.vertexAttribPointer(f,2,r.FLOAT,!1,0,0);let m={uFill:_e(n.fill,.05,1),uRound:0,uFeather:_e(n.feather,0,1),uWarp:n.warp,uWarpScale:n.warpScale,uDetailScale:n.detailScale,uWaveScale:n.waveScale,uFalloff:Math.max(n.falloff,.1),uGain:n.brightness,uAmbient:n.ambient,uGamma:Math.max(n.gamma,.05),uVignette:_e(n.vignette,0,1),uOpacity:_e(n.opacity,0,1),uBackdropAlpha:0,uCursorPull:0,uCursorGlow:0,uCursorReach:0};for(let[y,S]of Object.entries(m))r.uniform1f(r.getUniformLocation(l,y),S);r.uniform3fv(r.getUniformLocation(l,"uInk"),a),r.uniform3fv(r.getUniformLocation(l,"uHot"),t),r.uniform3f(r.getUniformLocation(l,"uPointer"),0,0,0),r.uniform3f(r.getUniformLocation(l,"uBackdrop"),0,0,0);let s=r.getUniformLocation(l,"uCanvas"),g=r.getUniformLocation(l,"uPitch"),b=r.getUniformLocation(l,"uClock");return{resize(y,S,H,I){e.width=Math.max(1,Math.round(y*H)),e.height=Math.max(1,Math.round(S*H)),r.viewport(0,0,e.width,e.height),r.uniform2f(s,e.width,e.height),r.uniform1f(g,I*H)},draw(y){r.uniform1f(b,y),r.drawArrays(r.TRIANGLES,0,6)},dispose(){r.deleteBuffer(c),r.deleteProgram(l)}}}let He=new Set,Ke=0;function te(){for(let e of He)e.wanted()||e.pause();for(let e of He)e.wanted()&&e.resume()}function Qt(e,a){let t={fill:a.fill??.5,feather:a.feather??.15,warp:a.warp??.375,warpScale:a.warpScale??3,detailScale:a.detailScale??7,waveScale:a.waveScale??4,falloff:a.falloff??5,brightness:a.brightness??5,ambient:a.ambient??0,gamma:a.gamma??2.2,vignette:a.vignette??0,opacity:a.opacity??1},n=u=>[Number.parseInt(u.slice(1,3),16)/255,Number.parseInt(u.slice(3,5),16)/255,Number.parseInt(u.slice(5,7),16)/255],r=n(a.color),o=n(a.hotColor),i=a.speed??1,l=a.pitch??.25,c=window.matchMedia?.("(prefers-reduced-motion: reduce)"),f=a.enabled===void 0,m=!window.IntersectionObserver,s=null,g=null,b=0,y=0,S=0,H=!1,I=!1,R=!1;function B(){window.cancelAnimationFrame(b),b=0,y=0}function Y(){if(!g)return;let u=g;g=null,Ke--;try{u.dispose()}catch{}}function x(){if(!s)return;let u=s;s=null,u.removeEventListener("webglcontextlost",W),u.removeEventListener("webglcontextrestored",V),u.remove();try{u.getContext("webgl")?.getExtension("WEBGL_lose_context")?.loseContext()}catch{}}function E(){B(),Y(),x(),H=!1}function P(){return!R&&f&&m&&!document.hidden&&e.isConnected&&!e.closest("[hidden]")&&e.getClientRects().length>0}function N(u){if(g){if(!P()){te();return}if(u-y>=1e3/30-2){let w=y?Math.min((u-y)/1e3,.1):0;S+=w*i*.5;try{g.draw(S)}catch{I=!0,E(),te();return}y=u}b=window.requestAnimationFrame(N)}}function M(){B(),!(!g||!s)&&(g.draw(S),s.style.opacity="1",!c?.matches&&i>0&&(b=window.requestAnimationFrame(N)))}function A(){if(!g)return;let u=Math.max(1,e.offsetWidth),w=Math.max(1,e.offsetHeight),C=Number.parseFloat(window.getComputedStyle(document.documentElement).fontSize)||16,T=Math.min(window.devicePixelRatio||1,1.5,4096/Math.max(u,w),Math.sqrt(4194304/(u*w)));g.resize(u,w,T,l*C)}function z(){if(!(g||H||I||Ke>=4))try{if(s||(s=document.createElement("canvas"),s.setAttribute("aria-hidden","true"),s.style.cssText="display:block;width:100%;height:100%;opacity:0;pointer-events:none",s.addEventListener("webglcontextlost",W),s.addEventListener("webglcontextrestored",V),e.append(s)),g=Zt(s,r,o,t),!g){I=!0,x();return}Ke++,A(),M()}catch{I=!0,E()}}function v(){te();try{A(),M()}catch{I=!0,E(),te()}}function W(u){u.preventDefault(),B(),Y(),s&&(s.style.opacity="0"),H=!0,te()}function V(){H=!1,I=!1,te()}let d={wanted:P,pause:E,resume:z};He.add(d);let p=window.IntersectionObserver?new window.IntersectionObserver(([u])=>{m=u?.isIntersecting??!1,te()},{rootMargin:"120px"}):null;p?.observe(e);let h=window.ResizeObserver?new window.ResizeObserver(v):null;return h?.observe(e),window.addEventListener("resize",v),document.addEventListener("visibilitychange",te),c?.addEventListener("change",v),{enabled(u){f=u},dispose(){R||(R=!0,He.delete(d),E(),p?.disconnect(),h?.disconnect(),window.removeEventListener("resize",v),document.removeEventListener("visibilitychange",te),c?.removeEventListener("change",v),te())}}}function Xt(e,a){let t=Array.from(e.childNodes),n=document.createElement("span"),r=document.createElement("span"),o=document.createElement("span"),i=document.createElement("span");n.style.cssText="position:relative;display:inline-block;white-space:nowrap;font-variant-numeric:tabular-nums;max-width:32ch",r.style.cssText="position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0",o.setAttribute("aria-hidden","true"),o.style.cssText="display:inline-flex;align-items:baseline";let l=(M,A)=>{M.setAttribute("data-indiana-counter-character",""),M.setAttribute("data-character",A)};l(i,a.prefix??""),o.append(i),n.append(r,o);let c=window.matchMedia?.("(prefers-reduced-motion: reduce)"),f=new Intl.NumberFormat("en-US"),m=new Map,s=!1,g=!1,b=!window.IntersectionObserver,y=0,S="",H="width .32s cubic-bezier(.22,1,.36,1),opacity .32s cubic-bezier(.22,1,.36,1)",I=()=>!g&&!document.hidden&&!c?.matches&&b&&e.isConnected&&e.getClientRects().length>0&&!e.closest("[hidden]");function R(M){M.glyphs.forEach((A,z)=>{let v=(10+z-M.position%10)%10;A.style.transform=`translateY(${(v>5?v-10:v)*100}%)`})}function B(){window.cancelAnimationFrame(y),y=0;for(let[M,A]of m){if(A.exit!==void 0){A.element.remove(),m.delete(M);continue}A.position=A.to,A.velocity=0,A.moving=!1,A.enter=!1,A.widthDone=void 0,A.element.style.transition="none",A.element.style.width=A.digit?"1ch":"auto",A.element.style.opacity="1",R(A)}}function Y(){y||(y=window.requestAnimationFrame(x))}function x(M){if(y=0,!I()){B();return}let A=!1;for(let[z,v]of m){if(v.exit!==void 0){if(M>=v.exit){v.element.remove(),m.delete(z);continue}A=!0}if(v.enter&&(v.enter=!1,v.element.style.width=v.width,v.element.style.opacity="1",v.widthDone=M+320),v.widthDone!==void 0&&(M>=v.widthDone?(v.widthDone=void 0,v.element.style.width=v.digit?"1ch":"auto"):A=!0),v.moving){let W=Math.max(0,(M-v.started)/1e3),V=-30+Math.sqrt(500),d=-30-Math.sqrt(500),p=v.from-v.to,h=(v.initialVelocity-d*p)/(V-d),u=p-h,w=Math.exp(V*W),C=Math.exp(d*W);v.position=v.to+h*w+u*C,v.velocity=V*h*w+d*u*C;let T=Math.abs(v.to-v.from)<5;W>=2||Math.abs(v.velocity)<=(T?.01:2)&&Math.abs(v.to-v.position)<=(T?.005:.5)?(v.position=v.to,v.velocity=0,v.moving=!1):A=!0,R(v)}}A&&Y()}function E(M){if(g)return;let A=typeof M=="number"&&Number.isFinite(M)&&Math.abs(M)<=1e12?a.format==="short"?M<1e3?String(M):`${M/1e3>=10?Math.round(M/1e3):Math.round(M/100)/10}k`:f.format(M):"\\u2014";Array.from((a.prefix??"")+A).length>32&&(A="\\u2014");let z=s&&I()&&A!=="\\u2014";if(s&&A===S){z||B();return}S=A,r.textContent=(a.prefix??"")+A,s||e.replaceChildren(n);let v=window.performance.now(),W=new Set,V=Array.from(o.children).flatMap(T=>{let _=Array.from(m).find(([,D])=>D.element===T)?.[0];return _===void 0?[]:[_]}),d=[],p=A.search(/\\D*$/),h=A.split(".")[0].replace(/\\D/g,"").length;for(let[T,_]of Array.from(A).entries()){let D=/\\d/.test(_);D&&h--;let X=D?`digit-${h}`:T>=p?`suffix-${_}`:`separator-${h}-${_}`;W.add(X),d.push(X);let j=m.get(X);if(j){if(j.exit=void 0,j.element.style.transition=z?H:"none",j.element.style.width=D?"1ch":"auto",j.element.style.opacity="1",D&&j.to!==Number(_)){j.from=j.position,j.initialVelocity=j.velocity,j.to=Number(_),j.started=v,j.moving=z;let Z=j.element.firstElementChild;l(Z,_)}o.append(j.element)}else{let Z=document.createElement("span"),Te=[];if(Z.style.cssText=`position:relative;display:${D?"inline-grid":"inline-block"};overflow:hidden;width:${D?"1ch":"auto"};opacity:1`,D){let gt=document.createElement("span");gt.style.visibility="hidden",l(gt,_),Z.append(gt);for(let ft=0;ft<10;ft++){let Ue=document.createElement("span");l(Ue,String(ft)),Ue.style.cssText="position:absolute;inset:0;text-align:center",Z.append(Ue),Te.push(Ue)}}else l(Z,_);let pt=D?Number(_):0;j={element:Z,glyphs:Te,digit:D,position:pt,velocity:0,from:pt,initialVelocity:0,to:pt,started:v,moving:!1,enter:z,width:D?"1ch":"auto"},m.set(X,j),o.append(Z),R(j),z&&(j.width=D?"1ch":`${Z.getBoundingClientRect().width}px`,Z.style.width="0px",Z.style.opacity="0",Z.style.transition=H)}}for(let[T,_]of m)!W.has(T)&&_.exit===void 0&&(z?(_.element.style.width=`${_.element.getBoundingClientRect().width}px`,_.element.offsetWidth,_.element.style.transition=H,_.element.style.width="0px",_.element.style.opacity="0",_.exit=v+320):(_.element.remove(),m.delete(T)));let u=[...d],w=0,C=0;for(let T of V){let _=d.indexOf(T);_===-1?m.has(T)&&(u.splice(w++,0,T),C++):w=_+C+1}for(let T of u){let _=m.get(T);_&&o.append(_.element)}s=!0,z?(o.offsetWidth,Y()):B()}let P=()=>{I()||B()},N=window.IntersectionObserver?new window.IntersectionObserver(([M])=>{b=M?.isIntersecting??!1,P()}):null;return N?.observe(e),document.addEventListener("visibilitychange",P),window.addEventListener("resize",P),c?.addEventListener("change",P),{update:E,dispose(){g||(g=!0,window.cancelAnimationFrame(y),N?.disconnect(),document.removeEventListener("visibilitychange",P),window.removeEventListener("resize",P),c?.removeEventListener("change",P),e.replaceChildren(...t),m.clear())}}}function kt(e,a){if(!e)return!1;if(e.type==="enum")return e.values.includes(a);if(e.type==="boolean")return typeof a=="boolean";if(e.type==="text")return a===null||typeof a=="string"&&a.length<=e.maxLength;if(typeof a!="number"||!Number.isFinite(a)||a<e.min||a>e.max)return!1;let t=(a-e.min)/e.step;return Number.isFinite(t)&&Math.abs(t-Math.round(t))<=Math.min(1e-7,Math.max(1,Math.abs(t))*Number.EPSILON*8)}function ea(e,a){let t=Ee.get(e),n=Me.get(a.id);if(n?.body===t.body){n.refresh();return}if(n?.dispose(),Me.delete(a.id),!a.ui||t.fallback||L.mode==="editor")return;let r=a.ui,o=t.body,i=new Map([...o.querySelectorAll("button[data-grow-action]")].map(d=>[d,xt(d)])),l=Je.get(a.id)??de();Je.set(a.id,l);let c=r.state??{},f=(d,p)=>kt(c[d],p);for(let[d,p]of Object.entries(c)){let h=k[`${a.id}.${d}`];f(d,l[d])||(l[d]=f(d,h)?h:p.default),l[d]!==null&&(k[`${a.id}.${d}`]=l[d])}let m=new Map;for(let d of o.querySelectorAll("[data-ui]")){let p=d.getAttribute("data-ui");m.set(p,[...m.get(p)??[],d])}let s={...l},g=d=>typeof d=="number"?d:0;function b(d){if(d===null||typeof d!="object")return d;if("ref"in d)return y(d.ref);let p=d.args.map(b),h=p.map(g),u;switch(d.op){case"add":u=h.reduce((w,C)=>w+C,0);break;case"sub":u=h[0]-h[1];break;case"mul":u=h.reduce((w,C)=>w*C,1);break;case"div":u=h[1]===0?null:h[0]/h[1];break;case"min":u=Math.min(...h);break;case"max":u=Math.max(...h);break;case"floor":u=Math.floor(h[0]);break;case"round":u=Math.round(h[0]);break;case"eq":u=p[0]===p[1];break;case"ne":u=p[0]!==p[1];break;case"gt":u=h[0]>h[1];break;case"gte":u=h[0]>=h[1];break;case"lt":u=h[0]<h[1];break;case"lte":u=h[0]<=h[1];break;case"and":u=p.every(Boolean);break;case"or":u=p.some(Boolean);break;case"not":u=!p[0];break;case"if":u=p[0]?p[1]:p[2];break;case"concat":u=p.map(w=>String(w??"")).join("").slice(0,2e3);break;case"number":u=new Intl.NumberFormat("en-US",{maximumFractionDigits:2}).format(h[0]);break;case"money":u=new Intl.NumberFormat("en-US",{style:"currency",currency:"USD",minimumFractionDigits:0,maximumFractionDigits:2}).format(h[0]);break;case"parse_number":{let w=String(p[0]??"").trim();u=/^\\$?(?:\\d+|\\d{1,3}(?:,\\d{3})+)(?:\\.\\d{1,2})?$/.test(w)?Number(w.replace(/[$,]/g,"")):null;break}case"lookup":{u=p[p.length-1];for(let w=1;w<p.length-1;w+=2)if(p[0]===p[w]){u=p[w+1];break}break}case"now":u=Date.now();break;case"duration":{let w=Math.max(0,Math.floor(h[0]/1e3)),C=Math.floor(w/86400),T=Math.floor(w/3600)%24,_=Math.floor(w/60)%60;u=C?`${C}d ${T}h ${String(_).padStart(2,"0")}m`:T?`${T}h ${String(_).padStart(2,"0")}m ${String(w%60).padStart(2,"0")}s`:`${_}m ${String(w%60).padStart(2,"0")}s`;break}}return typeof u=="number"&&!Number.isFinite(u)?null:u}function y(d){if(Object.hasOwn(s,d))return s[d];let p=r.derived?.[d];return p===void 0?null:s[d]=b(p)}let S=[],H=(r.effects??[]).flatMap(d=>{if(d.type!=="mosaic_waves")return[];let p=m.get(d.target);if(p?.length!==1||p[0].tagName!=="DIV")return[];let h=Qt(p[0],d);return S.push(h.dispose),[{effect:d,instance:h}]}),I=(r.effects??[]).flatMap(d=>{if(d.type!=="number_counter")return[];let p=m.get(d.target);if(p?.length!==1||!["SPAN","STRONG"].includes(p[0].tagName))return[];let h=Xt(p[0],d);return S.push(h.dispose),[{effect:d,instance:h}]}),R=(d,p,h,u=!1)=>{d.addEventListener(p,h,u),S.push(()=>d.removeEventListener(p,h,u))},B=[],Y=new WeakMap,x=new WeakMap,E=["--lp-carousel-fade-left","--lp-carousel-fade-right"];function P(d){for(let[p,h,u]of d.fade)h?d.element.style.setProperty(p,h,u):d.element.style.removeProperty(p)}let N=!1,M=d=>d.getClientRects().length>0&&!d.closest("[hidden]");function A(d){let p=d.element,h=T=>{let _=0;for(let D=T;D;D=D.offsetParent)_+=D.offsetLeft;return _},u=h(p),w=Math.max(0,p.scrollWidth-p.clientWidth),C=Array.from(p.children,T=>h(T)-u+T.offsetWidth/2);return{centers:C,max:w,current:Math.max(0,Math.min(w,p.scrollLeft)),targets:C.map(T=>Math.max(0,Math.min(w,T-p.clientWidth/2)))}}function z(d){let{current:p,max:h}=A(d),u=window.innerWidth<=d.maxWidth&&M(d.element);if(u){let w=Math.min(32,d.element.clientWidth*.05);d.element.style.setProperty("--lp-carousel-fade-left",`${Math.min(w,h>1?p:0)}px`),d.element.style.setProperty("--lp-carousel-fade-right",`${Math.min(w,h>1?h-p:0)}px`)}else P(d);for(let[w,C]of[[d.previous,p<=1],[d.next,h-p<=1]]){if(!w)continue;let T=!u||C;Y.set(w.button,T);let _=(r.bindings??[]).filter(D=>D.target===w.target&&D.property==="disabled");w.button.disabled=T||(_.length?_.some(D=>!!b(D.expression)):x.get(w.button)===!0)}}function v(){if(!N){s={...l};for(let d of Object.keys(r.derived??{}))y(d);for(let d of r.bindings??[]){let p=b(d.expression);for(let h of m.get(d.target)??[])switch(d.property){case"text":{let u=String(p??"");h.textContent!==u&&(h.textContent=u);break}case"visible":h.hidden=!p,h.inert=!p;break;case"class":h.classList.toggle(d.className,!!p);break;case"disabled":h.disabled=!!p||Y.get(h)===!0,i.has(h)&&i.set(h,h.disabled);break;case"checked":h.checked=!!p;break;case"value":h.value!==String(p??"")&&(h.value=String(p??""));break;case"tabindex":h.tabIndex=p===0?0:-1;break;default:h.setAttribute(d.property,String(p??""))}}for(let d of r.controls??[])if(d.type==="input")for(let p of m.get(d.target)??[]){let h=p,u=l[d.state],w=c[d.state];w.type==="number"&&(h.min=String(w.min),h.max=String(w.max),h.step=String(w.step)),w.type==="text"&&(h.maxLength=w.maxLength),h.type==="checkbox"?h.checked=!!u:!(r.bindings??[]).some(C=>C.target===d.target&&C.property==="value")&&h.value!==String(u??"")&&(h.value=String(u??""))}for(let d of B){d.inactive.forEach(({element:w,original:C},T)=>{w.inert=C||!!w.hidden||window.innerWidth<=d.inactiveMaxWidth&&T!==g(l[d.state])});let p=!!(d.previous||d.next);if(window.innerWidth>d.maxWidth||!M(d.element)){p&&z(d);continue}let h=g(l[d.state]);if(h===d.active){p&&z(d);continue}d.active=h;let u=d.element.children[h];if(u)if(p)d.element.scrollLeft=A(d).targets[h]??0;else{let w=d.element.getBoundingClientRect(),C=u.getBoundingClientRect();d.element.scrollLeft+=C.left+C.width/2-w.left-w.width/2}p&&z(d)}for(let{effect:d,instance:p}of H)p.enabled(d.enabled===void 0||!!b(d.enabled));te();for(let{effect:d,instance:p}of I)p.update(b(d.value));for(let[d,p]of i)Ce(d,d.getAttribute("data-grow-action")??"",p);Ae()}}function W(d){if(Object.entries(d).some(([h,u])=>!f(h,u)))return;let p=!1;for(let[h,u]of Object.entries(d))p||=l[h]!==u,l[h]=u,u===null?delete k[`${a.id}.${h}`]:k[`${a.id}.${h}`]=u;v(),p&&O({type:"selection",selection:re()})}function V(d){return Object.fromEntries(Object.entries(d).map(([p,h])=>[p,b(h)]))}for(let d of r.controls??[])for(let p of m.get(d.target)??[])if(d.type==="input")R(p,"input",()=>{let h=p,u=c[d.state],w=u.type==="boolean"?h.checked:u.type==="number"?h.valueAsNumber:h.value;f(d.state,w)&&(s={...l,[d.state]:w},W({[d.state]:w,...V(d.set??{})}))});else if(d.type==="action")R(p,"click",()=>{p.disabled||W(V(d.set))});else if(d.type==="scroll_latch")R(p,"scroll",h=>{let u=h.target;u instanceof HTMLElement&&u.scrollTop>0&&l[d.state]!==!0&&W({[d.state]:!0})},!0);else{let h=C=>{let T=C===void 0?void 0:m.get(C)?.[0];if(!(!T||T.tagName!=="BUTTON"))return x.set(T,T.disabled),Y.set(T,!1),{target:C,button:T}},u={element:p,state:d.state,maxWidth:d.maxWidth??767,inactiveMaxWidth:d.inactiveMaxWidth??d.maxWidth??767,active:-1,frame:void 0,previous:h(d.previousTarget),next:h(d.nextTarget),inactive:(d.inactiveTargets??[]).flatMap(C=>{let T=m.get(C);return T?.length!==1||T[0].tagName!=="ARTICLE"?[]:[{element:T[0],original:T[0].inert??!1}]}),fade:d.previousTarget||d.nextTarget?E.map(C=>[C,p.style.getPropertyValue(C),p.style.getPropertyPriority(C)]):[]};B.push(u);for(let[C,T]of[[u.previous,-1],[u.next,1]])C&&R(C.button,"click",()=>{if(z(u),C.button.disabled)return;let _=A(u),D=T===1?_.targets.find(X=>X>u.element.scrollLeft+1):_.targets.reverse().find(X=>X<u.element.scrollLeft-1);D!==void 0&&u.element.scrollTo({left:D,behavior:window.matchMedia?.("(prefers-reduced-motion: reduce)").matches?"instant":"smooth"})});R(p,"scroll",()=>{u.frame!==void 0&&window.cancelAnimationFrame(u.frame),u.frame=window.requestAnimationFrame(()=>{if(u.frame=void 0,window.innerWidth>u.maxWidth||!M(p))return;let C=p.getBoundingClientRect(),T=0,_=1/0,D=u.previous||u.next?A(u):null;Array.from(p.children).forEach((X,j)=>{let Z=X.getBoundingClientRect(),Te=Math.abs(D?D.centers[j]-D.current-p.clientWidth/2:Z.left+Z.width/2-C.left-C.width/2);Te<_&&(_=Te,T=j)}),u.active=T,(u.previous||u.next)&&z(u),l[d.state]!==T&&W({[d.state]:T})})});let w=(u.previous||u.next)&&window.ResizeObserver?new window.ResizeObserver(()=>{u.active=-1,v()}):null;w?.observe(p);for(let C of p.children)w?.observe(C);S.push(()=>{P(u),u.inactive.forEach(({element:C,original:T})=>{C.inert=T}),w?.disconnect(),u.frame!==void 0&&window.cancelAnimationFrame(u.frame)})}R(o,"keydown",d=>{let p=d;if(!["ArrowLeft","ArrowRight","ArrowUp","ArrowDown","Home","End"].includes(p.key))return;let h=p.target;if(h.tagName!=="BUTTON")return;let u=h.closest(\'[role="radiogroup"],[role="tablist"]\');if(!u)return;let w=Array.from(u.querySelectorAll(\'button[role="radio"],button[role="tab"]\')).filter(_=>!_.disabled&&M(_)).sort((_,D)=>{let X=_.getBoundingClientRect(),j=D.getBoundingClientRect();return Math.abs(X.top-j.top)>20?X.top-j.top:X.left-j.left}),C=w.indexOf(h);if(C<0)return;let T=p.key==="Home"?0:p.key==="End"?w.length-1:(C+(["ArrowLeft","ArrowUp"].includes(p.key)?-1:1)+w.length)%w.length;p.preventDefault(),w[T].click(),w[T].focus()}),R(window,"resize",()=>{for(let d of B)d.active=-1;v()});for(let d of r.timers??[]){let p=setTimeout(()=>W(V(d.set)),window.matchMedia?.("(prefers-reduced-motion: reduce)").matches?0:d.afterMs);S.push(()=>clearTimeout(p))}if(r.clock){let d=setInterval(v,1e3);S.push(()=>clearInterval(d))}Me.set(a.id,{body:o,refresh:v,dispose:()=>{N=!0,S.forEach(d=>d())}}),v(),window.requestAnimationFrame(()=>{N||v()})}let be=0,ye=0,Re,ae=null,k=de(),xe=de(),ue=de(),G="",St=!1,Ye=-1,Ze=!1,Et="",$e=null,Qe=null,Pe=null,U=document.createElement("div");U.id="g-card";let ze=document.createElement("div"),Le=document.createElement("div");ze.className=Le.className="g-box",Le.dataset.kind="select",ze.append(document.createElement("span")),Le.append(document.createElement("span"));function O(e){let a={...e,channel:L.channel};try{ne.postMessage(a,L.parentOrigin)}catch{}}function Xe(e){let a=parseInt(e.slice(1),16);return[a>>16&255,a>>8&255,a&255]}function et(e,a,t){let n=Xe(e),r=Xe(a),o=n.map((i,l)=>Math.round(i*t+r[l]*(1-t)));return`rgb(${o[0]},${o[1]},${o[2]})`}function tt(e){let[a,t,n]=Xe(e).map(r=>{let o=r/255;return o<=.03928?o/12.92:((o+.055)/1.055)**2.4});return .2126*a+.7152*t+.0722*n}function ve(e){return typeof e!="string"?"":e.startsWith("#")?e:`var(--g-${e==="background"?"bg":e})`}let Mt=document.createElement("style");document.head.append(Mt);function ta(e){let a=e.theme,t=document.documentElement.style,n=tt(a.primary),r=(n+.05)/.05>1.05/(n+.05)?"#111318":"#FFFFFF";t.setProperty("--g-primary",a.primary),t.setProperty("--g-on-primary",r),t.setProperty("--g-bg",a.background),t.setProperty("--g-text",a.text),t.setProperty("--g-muted",et(a.text,a.background,.62)),t.setProperty("--g-surface",et(a.text,a.background,.05)),t.setProperty("--g-border",et(a.text,a.background,.16));let[o,i]=[tt(a.primary),tt(a.background)].sort((l,c)=>c-l);t.setProperty("--g-focus",(o+.05)/(i+.05)>=3?a.primary:a.text),t.setProperty("--g-radius",`${Wt[a.radius]??8}px`),Mt.textContent=a.fontAssets?.faces.map(l=>`@font-face{font-family:${JSON.stringify(l.family??a.fontAssets.family)};src:url(${JSON.stringify(l.url)});font-weight:${l.weight};font-style:normal;font-display:swap}`).join("")??"",t.setProperty("--g-font",`${a.fontAssets?`${JSON.stringify(a.fontAssets.family)},`:""}${le[a.font]??le.system}`),t.setProperty("--g-edit","#2C3C96")}function q(e){let a=$?.strings.locales[G]?.[e];return a&&a.trim()?{value:a,missing:!1}:{value:$?.strings.locales[$.strings.defaultLocale]?.[e]??"",missing:!0}}function oe(e){let a=F?.nodes[e];if(!a)return;let t=a.picker?k[a.picker]??F?.pickers[a.picker]?.selected:void 0;if(!(a.picker&&typeof t=="string"&&!F?.pickers[a.picker]?.options.includes(t)))return typeof t=="string"?a.byPlan?.[t]??a.base:a.base}let De=new Map;function Lt(e,a){let t=Number(a.value),n=F?.quantities?.[e],r=Number(a.min),o=Number(a.max),i=Number(a.step);return a.value!==""&&n?.available&&Number.isSafeInteger(t)&&Number.isFinite(r)&&Number.isFinite(o)&&i>0&&t>=Math.max(r,n.minimum)&&t<=Math.min(o,n.maximum)&&(t-r)%i===0?t:void 0}function aa(){for(let{input:n,wrapper:r,change:o}of De.values())n.removeEventListener("input",o),r.hidden=!1;De.clear();let e=[...U.querySelectorAll(".g-custom")].flatMap(n=>[...n.shadowRoot?.querySelectorAll(\'input[type="range"][id]\')??[]]),a=n=>{if(n.hidden||(n.type==="stack"&&n.children.forEach(a),n.type!=="quantity_picker"))return;let r=ie(n.id),o=r?.querySelector(\'input[type="range"]\'),i=e.filter(f=>f.id===`quantity-${n.id}`);if(!r||!o||i.length!==1)return;let l=i[0];l.min=o.min,l.max=o.max,l.step=o.step,l.disabled=o.disabled;let c=()=>{let f=Lt(n.id,l);f===void 0||k[n.id]===f||(k[n.id]=f,O({type:"selection",selection:re()}))};l.addEventListener("input",c),De.set(n.id,{input:l,wrapper:r,native:o,change:c}),r.hidden=!0},t=$?.pages.find(n=>n.id===ae);t&&a(t.root)}function re(){for(let[e,{input:a,native:t}]of De){let n=Lt(e,a);n===void 0?delete k[e]:(k[e]=n,t.value=String(n))}return{...$?.surface==="paywall"&&ae?{__page:ae}:{},...Object.fromEntries(Object.entries(k).filter(e=>!Array.isArray(e[1])))}}function at(e){return J&&Object.hasOwn(J.answers,e)&&J.bindings.some(a=>a.variable===e)?J.answers[e]:J?.values?.[e]}function At(e){let a=me.get(e);if(a)return a;let t=[...new Set([...e.matchAll(/\\{\\{\\s*variables\\.([^{}]+?)\\s*\\}\\}/g)].map(n=>n[1].trim()))];if(e.length<=1e6)for(me.set(e,t),Ie+=e.length;me.size>128||Ie>1e6;){let n=me.keys().next().value;me.delete(n),Ie-=n.length}return t}function nt(e){let a=e.html[G];return oe(e.id)?.html??F?.nodes[e.id]?.base.html??(a&&a.trim()?a:e.html[$?.strings.defaultLocale??""]??"")}function Tt(){me.clear(),Ie=0;let e=[],a=[],t=l=>{if(!l.hidden){if(l.type==="stack")l.children.forEach(t);else if(l.type==="custom_html"){e.push(nt(l));let c=F?.nodes[l.id];for(let f of[c?.base,...Object.values(c?.byPlan??{})])f?.html!==void 0&&a.push(f.html)}}},n=ae??$?.initialPageId,r=$?.pages??[],o=new Set;for(let l of[...r.filter(c=>c.id===n),...r.filter(c=>c.id!==n)]){e.length=a.length=0,t(l.root);for(let c of[...e,...a])o.add(c)}let i=new Set([...o].map(rt));for(let[l,c]of Q)i.has(l)||Nt(l,c);for(let l of o)At(l),!Q.has(rt(l))&&(Q.size>=32||ye+500>4e3||be+l.length+2>262144||it(l,!0))}function rt(e){return(L.mode==="live"&&J?"b:":"s:")+e}function Nt(e,a){Q.delete(e),be-=e.length,ye-=a.elements}function it(e,a=!1){let t=rt(e),n=Q.get(t);if(n)return Q.delete(t),Q.set(t,n),n;let r="data-indiana-html-binding";for(;e.includes(r);)r+="-next";let o=[],i=L.mode==="live"&&!!J,l=/\\{\\{\\s*variables\\.([^{}]+?)\\s*\\}\\}/g,c=i?e.replace(l,(b,y)=>(o.push(y.trim()),`<span ${r}="${o.length-1}"></span>`)):e,f=document.createElement("template");f.innerHTML=`<div>${c}</div>`;let m=f.content.firstElementChild,s=[];for(let b of m.querySelectorAll(`[${r}]`)){let y=document.createTextNode(""),S=o[Number(b.getAttribute(r))];b.replaceWith(y);let H=[];for(let I=y;I!==m;){let R=I.parentNode;H.unshift(Array.prototype.indexOf.call(R.childNodes,I)),I=R}s.push({path:H,variable:S})}let g={key:t,content:m,inUse:!1,bindings:s,unresolved:(i?e.replace(l,""):e).includes("{{"),elements:m.getElementsByTagName("*").length};if(t.length<=262144&&g.elements<=4e3){if(!a)for(;Q.size>=32||be+t.length>262144||ye+g.elements>4e3;){let[b,y]=Q.entries().next().value;Nt(b,y)}Q.size<32&&be+t.length<=262144&&ye+g.elements<=4e3&&(Q.set(t,g),be+=t.length,ye+=g.elements)}return g}function ot(e){let a=e.template;if(a?.content===e.body&&Q.get(a.key)===a){for(let t of e.bindings)t.node.data="";a.inUse=!1,e.parked=!0}e.template=null}function It(e,a){let t=Ee.get(e),n=nt(a),r=L.mode==="live"&&!!J,o=t.source!==n||t.bound!==r,i;o&&(ot(t),i=it(n),t.source=n,t.bound=r,t.unresolved=i.unresolved,t.variables=[...new Set(i.bindings.map(s=>s.variable))]);let l=new Map,c=t.unresolved;if(r)for(let s of t.variables){let g=at(s);if(g==null){c=!0;continue}let b=String(typeof g=="object"?JSON.stringify(g):g).replace(/\\r\\n?/g,`\n`);b.includes("{{")&&(c=!0),l.set(s,b)}if(c&&L.mode==="live"){if(ot(t),t.parked){let g=document.createElement("div");t.body.replaceWith(g),t.body=g,t.parked=!1}let s=q(a.fallback??"").value.replace(/\\r\\n?/g,`\n`);(!t.fallback||t.body.textContent!==s)&&(t.body.textContent=s),t.fallback=!0,t.bindings=[]}else if(o||t.fallback||!t.initialized){i??=it(n);let s=!i.inUse,g=s?i.content:i.content.cloneNode(!0);t.bindings=i.bindings.map(({path:b,variable:y})=>{let S=g;for(let H of b)S=S.childNodes[H];return{node:S,variable:y}});for(let b of t.bindings)b.node.data=l.get(b.variable);t.body.replaceWith(g),t.body=g,t.parked=!1,s&&Q.get(i.key)===i?(i.inUse=!0,t.template=i):t.template=null;for(let b of t.body.querySelectorAll("img"))b.addEventListener("load",Ae);t.fallback=!1,t.initialized=!0}else for(let s of t.bindings){let g=l.get(s.variable);s.node.data!==g&&(s.node.data=g)}let f=oe(a.id),m=a.html[G];if(e.classList.toggle("g-missing",L.mode==="editor"&&(!!f?.missing?.length||!f&&n.includes("{{")||!(m&&m.trim()))),ea(e,a),!a.ui&&L.mode==="live")for(let s of t.body.querySelectorAll("button[data-grow-action]"))Ce(s,s.getAttribute("data-grow-action"),xt(s))}function pe(e,a,t){let n=oe(e.id),r=n?.[a],o=r!==void 0?{value:r,missing:!!n?.missing?.length}:q(t);if(L.mode==="live"&&J){let i=!1,l=o.value.replace(/\\{\\{\\s*variables\\.([^{}]+?)\\s*\\}\\}/g,(c,f)=>{f=f.trim();let m=at(f);return m==null||m===""||Array.isArray(m)&&!m.length?(i=!0,""):Array.isArray(m)?m.join(", "):String(m)});if(i)return{value:e.fallback?q(e.fallback).value:"",missing:!0};if(!l.includes("{{"))return{value:l,missing:o.missing}}return r!==void 0?o:o.value.includes("{{")&&L.mode==="live"?{value:e.fallback?q(e.fallback).value:"",missing:!0}:{value:o.value,missing:o.missing||o.value.includes("{{")}}function na(e){if(e.name)return e.name;let a=L.editorMessages?.nodeTypes?.[e.type];return L.mode==="editor"&&typeof a=="string"?a:{stack:"\\u5BB9\\u5668",text:"\\u6587\\u672C",image:"\\u56FE\\u7247",button:"\\u6309\\u94AE",divider:"\\u5206\\u9694\\u7EBF",spacer:"\\u7559\\u767D",custom_html:"\\u81EA\\u5B9A\\u4E49 HTML",price:"\\u4EF7\\u683C",coupon_code:"\\u4F18\\u60E0\\u7801",countdown:"\\u5012\\u8BA1\\u65F6",plan_picker:"\\u771F\\u5B9E\\u5957\\u9910\\u9009\\u62E9"}[e.type]??e.type}function ra(e,a){if(a.type==="color")e.background="none",e.backgroundColor=ve(a.color);else if(a.type==="linear"){let t=a.stops.map(n=>`${ve(n.color)} ${Number(n.at)}%`).join(",");e.backgroundColor="transparent",e.backgroundImage=`linear-gradient(${Number(a.angle)}deg,${t})`}else if(a.type==="image"&&typeof a.src=="string"){let t=/^data:image\\/(?:svg\\+xml|jpeg|png);base64,[A-Za-z0-9+/]+={0,2}$/.test(a.src)?a.src:a.src.replace(/[^A-Za-z0-9\\-._~:/?#[\\]@!$&*+;=%]/gu,r=>r.length===1&&r.charCodeAt(0)<128?`%${r.charCodeAt(0).toString(16).toUpperCase().padStart(2,"0")}`:encodeURIComponent(r));e.backgroundImage=`url("${t}")`;let n=a.position;e.backgroundPosition=n?`${n.x}% ${n.y}%`:"center",e.backgroundSize=a.fit==="contain"?"contain":"cover",e.backgroundRepeat="no-repeat"}}function Ct(e){return`${Number(e.top)}px ${Number(e.right)}px ${Number(e.bottom)}px ${Number(e.left)}px`}function _t(e,a,t,n,r){if(a===void 0)return;let o=n?.direction??"vertical",i=o!=="overlay"&&t==="width"==(o==="horizontal"),l=t==="width"?"minWidth":"minHeight";a==="fill"?o==="overlay"?(e.style[t]="100%",e.style[t==="width"?"justifySelf":"alignSelf"]="stretch"):i?(e.style.flex="1 1 0",e.style[l]="0"):(e.style.alignSelf="stretch",e.style[t]="auto"):a==="fit"?(e.style[t]="fit-content",t==="width"&&(e.style.maxWidth="100%"),!i&&o!=="overlay"&&(!n||n.align==="stretch")&&(e.style.alignSelf=r==="center"?"center":r==="end"?"flex-end":"flex-start")):typeof a=="number"&&(e.style[t]=`${a}px`,t==="width"&&(e.style.maxWidth="100%"),i&&(e.style.flex="0 0 auto"))}function we(e,a,t){let n=a.style,r=n.text??{},o=e.style;if(a.type==="customer_data"&&(r.font&&o.setProperty("--g-data-display-font",le[String(r.font)]??le.system),a.data.source==="membership"&&(typeof r.size=="number"&&o.setProperty("--g-data-display-size",`clamp(${Math.min(r.size,28)}px, ${r.size/12}vw, ${r.size}px)`),typeof r.weight=="number"&&o.setProperty("--g-data-display-weight",String(r.weight)))),a.type==="customer_data"&&a.data.source==="credit_balance"&&(typeof r.size=="number"&&o.setProperty("--g-data-number-size",`clamp(${Math.min(r.size,48)}px, ${r.size/10}vw, ${r.size}px)`),r.font&&o.setProperty("--g-data-number-font",le[String(r.font)]??le.system),typeof r.weight=="number"&&o.setProperty("--g-data-number-weight",String(r.weight))),a.type==="customer_data"&&r.color){let f=ve(r.color);o.setProperty("--g-data-ink",f),o.setProperty("--g-data-muted",`color-mix(in srgb, ${f} 72%, transparent)`),o.setProperty("--g-data-line",`color-mix(in srgb, ${f} 20%, transparent)`),o.setProperty("--g-data-surface",`color-mix(in srgb, ${f} 8%, transparent)`)}n.padding&&(o.padding=Ct(n.padding)),n.margin&&(o.margin=Ct(n.margin)),typeof n.gap=="number"&&a.type==="stack"&&(o.gap=`${n.gap}px`),n.background&&ra(o,n.background),typeof n.opacity=="number"&&(o.opacity=String(n.opacity));let i=n.shape;if(i?.type==="pill")o.borderRadius="9999px";else if(i?.type==="rect"){let f=i.radius;o.borderRadius=typeof f=="number"?`${f}px`:`${Number(f.topLeft)}px ${Number(f.topRight)}px ${Number(f.bottomRight)}px ${Number(f.bottomLeft)}px`}(n.clipContent===!0||n.clipContent!==!1&&i&&(n.background||a.type==="image"))&&(o.overflow="hidden");let l=n.border;l&&(o.border=Number(l.width)>0?`${Number(l.width)}px ${l.style==="dashed"?"dashed":"solid"} ${ve(l.color)}`:"0");let c=n.shadow;c&&(o.boxShadow=`${Number(c.x)}px ${Number(c.y)}px ${Number(c.blur)}px ${Number(c.spread)}px ${ve(c.color)}`),["text","button","price","coupon_code","countdown","plan_picker"].includes(a.type)&&(r.font&&(o.fontFamily=le[String(r.font)]??""),typeof r.size=="number"&&(o.fontSize=`${r.size}px`),typeof r.weight=="number"&&(o.fontWeight=String(r.weight)),typeof r.lineHeight=="number"&&(o.lineHeight=String(r.lineHeight)),typeof r.letterSpacing=="number"&&(o.letterSpacing=`${r.letterSpacing}px`),r.color&&(o.color=ve(r.color)),r.align&&(o.textAlign=String(r.align)),r.italic&&(o.fontStyle="italic"),r.decoration&&(o.textDecoration=String(r.decoration)),r.transform&&(o.textTransform=String(r.transform))),_t(e,n.width,"width",t,r.align),_t(e,n.height,"height",t,r.align),t?.direction==="horizontal"&&n.grow!==void 0&&(o.flexGrow=String(n.grow===!0?1:n.grow===!1?0:n.grow))}function Be(e,a){if(J){let t=J.bindings.find(n=>n.componentId===e);if(!t)return;J.answers[t.variable]=a,We.add(e),O({type:"answers",answers:Ht()}),se();return}}function Ht(){let e={};for(let a of J?.bindings??[]){let t=k[a.componentId];t!==void 0&&typeof t!="number"&&(e[a.variable]=t)}return e}function ia(e){let a=document.createElement("section");a.className="g-data",a.dataset.layout=e.data.layout,a.dataset.source=e.data.source;let t=fe?.nodes[e.id];a.dataset.status=t?.status??"idle",a.dataset.preview=String(!!t?.preview);let n=t?.status==="loading",r=G.startsWith("zh"),o=(x,E)=>r?x:E;a.setAttribute("aria-busy",String(!!n));let i=(x,E,P)=>{let N=document.createElement(x);return N.className=E,P!==void 0&&(N.textContent=P),N},l=x=>{let E=document.createElementNS("http://www.w3.org/2000/svg","svg");E.setAttribute("viewBox","0 0 24 24"),E.setAttribute("fill","none"),E.setAttribute("stroke","currentColor"),E.setAttribute("stroke-width","1.7"),E.setAttribute("stroke-linecap","round"),E.setAttribute("stroke-linejoin","round"),E.setAttribute("aria-hidden","true"),E.classList.add("g-data-icon");let P={refresh:["M20 7v5h-5","M4 17v-5h5","M6.1 7a7 7 0 0 1 11.5-1.5L20 8M4 16l2.4 2.5A7 7 0 0 0 18 17"],down:["M7 7l10 10M7 17h10V7"],up:["M7 17L17 7M7 7h10v10"],chevron:["M6 9l6 6 6-6"],empty:["M4 8l8-4 8 4v10l-8 4-8-4V8Z","M4 8l8 4 8-4M12 12v10"],credit:["M12 3a9 9 0 1 0 0 18 9 9 0 0 0 0-18Z","M12 7v10M8 12h8"]};for(let N of P[x]){let M=document.createElementNS("http://www.w3.org/2000/svg","path");M.setAttribute("d",N),E.append(M)}return E},c=(x,E,P,N=!1,M=E)=>{let A=i("button","g-data-button",x);return A.type="button",A.disabled=N||!!n&&E!=="refresh"||!!t?.preview||L.mode!=="live",n&&E==="refresh"&&A.setAttribute("aria-disabled","true"),A.dataset.gDataFocus=`${e.id}:${M}:${P??""}`,A.addEventListener("click",z=>{!z.isTrusted||A.disabled||n||O({type:"customer-data-intent",intent:{nodeId:e.id,action:E,...P?{value:P}:{}}})}),A},f=i("div","g-data-header"),m=i("h2","g-data-heading",q(e.title).value);m.id=`g-data-title-${e.id}`,a.setAttribute("aria-labelledby",m.id);let s=i("div","g-data-controls"),g=[],b=x=>{x.hidden||(x.type==="customer_data"&&g.push(x),x.type==="stack"&&x.children.forEach(b))},y=$?.pages[0];y&&b(y.root);let S=g.every(x=>fe?.nodes[x.id]?.preview),H=g.find(x=>x.data.source==="credit_balance")??g[0];t?.preview&&(!S||H?.id===e.id)&&s.append(i("span","g-data-preview",o("\\u793A\\u4F8B\\u6570\\u636E","Sample data")));let I=n?o("\\u66F4\\u65B0\\u4E2D\\u2026","Updating\\u2026"):o("\\u5237\\u65B0","Refresh"),R=c(I,"refresh");if(R.replaceChildren(l("refresh")),R.setAttribute("aria-label",I),R.title=I,R.classList.add("g-data-refresh"),n&&R.classList.add("g-data-refreshing"),s.append(R),e.data.source==="billing"&&e.data.outputs?.billing_portal&&s.append(c(t?.billingBusy?o("\\u6B63\\u5728\\u51C6\\u5907\\u2026","Preparing\\u2026"):o("\\u7BA1\\u7406\\u652F\\u4ED8\\u65B9\\u5F0F","Manage payment method"),"billing_portal",void 0,!!t?.billingBusy||t?.status!=="ready")),e.data.source==="credit_balance"&&(m.prepend(l("credit")),t?.resources.length===1&&m.append(i("span","g-data-resource-label",t.resources[0].name)),t?.updatedAt)){let x=i("time","g-data-updated",`${o("\\u66F4\\u65B0\\u4E8E","Updated")} ${new Intl.DateTimeFormat(G,{timeStyle:"short"}).format(new Date(t.updatedAt))}`);x.dateTime=t.updatedAt,x.title=new Intl.DateTimeFormat(G,{dateStyle:"medium",timeStyle:"short"}).format(new Date(t.updatedAt)),s.prepend(x)}if(f.append(m,s),a.append(f),!t||t.source!==e.data.source)return a.append(i("p","g-data-empty",o("\\u8FDE\\u63A5\\u5BA2\\u6237\\u6570\\u636E\\u540E\\u663E\\u793A\\u6B64\\u5185\\u5BB9\\u3002","Connect customer data to display this content."))),a;if(t.errorMessage){let x=i("div","g-data-error",t.errorMessage);x.setAttribute("role","alert"),a.append(x);let E=i("div","g-data-recovery");E.append(c(o("\\u91CD\\u8BD5","Retry"),"refresh")),a.append(E)}if(t.membershipResult){let x=i("p","g-data-note",t.membershipResult);x.setAttribute("role","status"),a.append(x)}if(t.membershipReview){let x=t.membershipReview,E=i("section","g-data-resource");E.dataset.gDataReview="",E.setAttribute("aria-label",x.title),E.setAttribute("aria-busy",String(!!t.membershipBusy));let P=i("h3","g-data-row-label",x.title);P.tabIndex=-1,E.append(P);let N=i("dl","g-data-facts");for(let A of x.facts){let z=i("div","");z.append(i("dt","",A.label),i("dd","",A.value)),N.append(z)}E.append(N,i("p","g-data-note",x.note));let M=i("div","g-data-controls");M.append(c(o("\\u8FD4\\u56DE","Back"),"membership_dismiss",void 0,!!t.membershipBusy),c(t.membershipBusy?o("\\u6B63\\u5728\\u5904\\u7406\\u2026","Processing\\u2026"):o("\\u786E\\u8BA4","Confirm"),"membership_confirm",void 0,!!t.membershipBusy)),E.append(M),a.append(E)}if(t.stale&&(t.resources.length||t.rows.length)&&a.append(i("p",n?"g-data-live-status":"g-data-note",n?o("\\u6B63\\u5728\\u66F4\\u65B0\\u8D26\\u6237\\u6570\\u636E\\u3002","Updating account data."):o("\\u663E\\u793A\\u4E0A\\u6B21\\u8BFB\\u53D6\\u7684\\u7ED3\\u679C\\uFF0C\\u6B63\\u5728\\u7B49\\u5F85\\u66F4\\u65B0\\u3002","Showing the last result while awaiting an update."))),n&&!t.resources.length&&!t.rows.length){let x=i("div","g-data-skeleton");if(x.setAttribute("aria-hidden","true"),e.data.source==="credit_balance")x.append(i("span","g-data-skeleton-line g-data-skeleton-value"),i("span","g-data-skeleton-line g-data-skeleton-meta"));else{let P=Math.min(e.data.pageSize,e.data.layout==="compact"?2:4);for(let N=0;N<P;N++){let M=i("div","g-data-skeleton-row");M.append(i("span","g-data-skeleton-line"),i("span","g-data-skeleton-line")),x.append(M)}}let E=i("p","g-data-live-status",o("\\u6B63\\u5728\\u8BFB\\u53D6\\u8D26\\u6237\\u6570\\u636E\\u2026","Loading account data\\u2026"));return E.setAttribute("role","status"),a.append(x,E),a}let B={credit_transactions:[["all","\\u5168\\u90E8\\u8BB0\\u5F55","All activity"],["consume","\\u6D88\\u8D39","Usage"],["reserve","\\u9884\\u6263","Reserved"],["confirm","\\u786E\\u8BA4\\u6263\\u8D39","Confirmed"],["release","\\u91CA\\u653E","Released"],["refund","\\u9000\\u56DE","Refund"]],credit_pack_orders:[["all","\\u5168\\u90E8\\u8BA2\\u5355","All orders"],["pending","\\u7B49\\u5F85\\u4ED8\\u6B3E","Pending"],["paid","\\u5DF2\\u4ED8\\u6B3E","Paid"],["expired","\\u5DF2\\u8FC7\\u671F","Expired"],["refunded","\\u5DF2\\u9000\\u6B3E","Refunded"],["disputed","\\u4E89\\u8BAE\\u4E2D","Disputed"]],offer_history:[["all","\\u5168\\u90E8\\u8BB0\\u5F55","All offers"],["issued","\\u672A\\u4F7F\\u7528","Unused"],["reserved","\\u4ED8\\u6B3E\\u5904\\u7406\\u4E2D","Payment pending"],["redeemed","\\u5DF2\\u4F7F\\u7528","Redeemed"],["expired","\\u5DF2\\u5230\\u671F","Expired"],["revoked","\\u5DF2\\u4F5C\\u5E9F","Revoked"]]};if(B[e.data.source]){let x=i("select","g-data-select");x.setAttribute("aria-label",o("\\u7B5B\\u9009\\u8BB0\\u5F55","Filter records")),x.dataset.gDataFocus=`${e.id}:filter`,x.disabled=!!n||t.preview||L.mode!=="live";for(let[E,P,N]of B[e.data.source]){let M=document.createElement("option");M.value=E,M.textContent=o(P,N),x.append(M)}x.value=t.filter,x.addEventListener("change",()=>{!x.disabled&&L.mode==="live"&&O({type:"customer-data-intent",intent:{nodeId:e.id,action:"filter",value:x.value}})}),s.prepend(x)}let Y=(x,E=!1)=>{let P=i("ul","g-data-list");if(e.data.source==="credit_transactions"&&x.length&&!E){let N=i("div","g-data-table-head");N.setAttribute("aria-hidden","true"),N.append(i("span","",o("\\u8BB0\\u5F55","Record")),i("span","",o("\\u7C7B\\u578B","Type")),i("span","",o("\\u79EF\\u5206","Credits"))),a.append(N)}for(let N of x){let M=i("li","g-data-row"),A=i("div","g-data-row-main"),z=i("div","g-data-row-copy");z.append(i("p","g-data-row-label",N.label));for(let v of N.detail)v!==N.status&&z.append(i("div","g-data-row-detail",v));if(e.data.source==="credit_transactions"&&!E){let v=i("span","g-data-row-mark");v.append(l(["Refund","\\u9000\\u56DE"].includes(N.status??"")?"up":"down")),A.append(v)}if(A.append(z),M.append(A),N.status?M.append(i("div","g-data-row-status",N.status)):M.classList.add("g-data-row-no-status"),N.value?M.append(i("div","g-data-row-value",N.value)):M.classList.add("g-data-row-no-value"),N.facts.length||N.purchaseId||N.membershipActions?.length||N.billingActions?.length){let v=i("div","g-data-row-extra"),W=i("div","g-data-facts"),V=(d,p)=>{for(let h of d){let u=i("span","",h.label);u.append(i("strong","",h.value)),p.append(u)}};if(V(N.facts.slice(0,3),W),N.facts.length>3){let d=i("details","g-data-sources");d.dataset.gDataSources=`facts:${N.id}`,d.append(i("summary","",`${e.data.source==="billing"?o("\\u8D26\\u5355\\u8BE6\\u60C5","Invoice details"):e.data.source==="offer_history"?o("\\u4F18\\u60E0\\u5238\\u660E\\u7EC6","Coupon details"):o("\\u5168\\u90E8\\u6263\\u8D39\\u660E\\u7EC6","All allocations")} \\xB7 ${N.facts.length}`));let p=i("div","g-data-facts");V(N.facts.slice(3),p),d.append(p),W.append(d)}if(v.append(W),!E)for(let d of N.billingActions??[])v.append(c(d.label,d.action,N.id,!!t.billingBusy));if(N.purchaseId&&e.data.allowPurchase&&!E){let d=c(t.buyingId===N.purchaseId?o("\\u6B63\\u5728\\u51C6\\u5907\\u2026","Preparing\\u2026"):o("\\u8D2D\\u4E70\\u79EF\\u5206","Buy credits"),"buy_pack",N.purchaseId,!!t.preview||!!t.buyingId);d.classList.add("g-data-buy"),v.append(d)}if(e.data.allowPurchase&&!E)for(let d of N.membershipActions??[])v.append(c(d.label,"membership_preview",d.value,!!t.preview||!!t.membershipBusy||!!t.membershipReview));M.append(v)}P.append(M)}return P};for(let x of t.resources){let E=i("article","g-data-resource");E.setAttribute("aria-label",x.name),t.resources.length>1&&E.append(i("p","g-data-name",x.name));let P=i("div","g-data-balance"),N=new Intl.NumberFormat(G).formatToParts(1.1).find(v=>v.type==="decimal")?.value??".",M=x.spendable.lastIndexOf(N),A=i("strong","g-data-number",M<0?x.spendable:x.spendable.slice(0,M));M>=0&&A.append(i("span","g-data-fraction",x.spendable.slice(M))),P.append(A,i("span","g-data-unit",o("\\u53EF\\u7528\\u79EF\\u5206","Spendable credits"))),E.append(P);let z=i("div","g-data-facts");for(let[v,W]of[[o("\\u4F59\\u989D","Balance"),x.available],[o("\\u51BB\\u7ED3","Reserved"),x.reserved]]){let V=i("span","",v);V.append(i("strong","",W)),z.append(V)}if(x.expiry&&z.append(i("span","g-data-expiry",`${o("\\u6700\\u8FD1\\u5230\\u671F","Next expiry")} \\xB7 ${x.expiry}`)),E.append(z),e.data.showSources&&x.sourceCount){let v=i("details","g-data-sources");if(v.dataset.gDataSources=x.key,v.append(i("summary","",`${o("\\u79EF\\u5206\\u6765\\u6E90","Credit sources")} \\xB7 ${x.sourceCount}`),Y(x.sources,!0)),v.querySelector("summary")?.append(l("chevron")),x.hasNextSources||x.hasPreviousSources){let W=i("div","g-data-footer");W.append(i("span","",`${o("\\u7B2C","Page")} ${x.sourcePage}`));let V=i("div","g-data-controls");V.append(c(o("\\u4E0A\\u4E00\\u9875","Previous"),"sources_previous",x.key,!x.hasPreviousSources),c(o("\\u4E0B\\u4E00\\u9875","Next"),"sources_next",x.key,!x.hasNextSources)),W.append(V),v.append(W)}E.append(v)}a.append(E)}if(t.rows.length&&a.append(Y(t.rows)),e.data.source==="billing_controls"&&(e.data.outputs?.billing_authorization||e.data.outputs?.billing_adjustment)){let x=i("div","g-data-controls");e.data.outputs?.billing_authorization&&x.append(c(o("\\u8BBE\\u7F6E\\u81EA\\u52A8\\u4ED8\\u6B3E\\u6388\\u6743","Set up payment authorization"),"billing_authorization")),e.data.outputs?.billing_adjustment&&x.append(c(o("\\u67E5\\u770B\\u5F85\\u786E\\u8BA4\\u8865\\u6B3E","Review pending adjustment"),"billing_adjustment")),a.append(x)}if(!t.rows.length&&!t.resources.length&&t.status!=="error"){let x=i("p","g-data-empty",n?o("\\u6B63\\u5728\\u8BFB\\u53D6\\u8D26\\u6237\\u6570\\u636E\\u2026","Loading account data\\u2026"):t.status==="idle"?o("\\u767B\\u5F55\\u540E\\u67E5\\u770B\\u4F60\\u7684\\u8D26\\u6237\\u6570\\u636E\\u3002","Sign in to view your account data."):t.filter!=="all"?o("\\u6CA1\\u6709\\u7B26\\u5408\\u7B5B\\u9009\\u6761\\u4EF6\\u7684\\u8BB0\\u5F55\\u3002","No records match this filter."):e.data.source==="credit_pack_orders"?o("\\u6682\\u65E0\\u8D2D\\u4E70\\u8BB0\\u5F55","No purchases yet"):e.data.source==="credit_balance"?o("\\u6682\\u65E0\\u79EF\\u5206\\u6765\\u6E90","No credit balances yet"):e.data.source==="membership"?o("\\u6682\\u65E0\\u4F1A\\u5458\\u65B9\\u6848","No memberships yet"):e.data.source==="customer_plans"?o("\\u6682\\u65E0\\u53EF\\u9009\\u5957\\u9910","No plans available"):e.data.source==="credit_packs"?o("\\u6682\\u65E0\\u53EF\\u8D2D\\u4E70\\u7684\\u79EF\\u5206\\u5305","No credit packs available"):e.data.source==="billing_controls"?o("\\u5C1A\\u672A\\u8BBE\\u7F6E\\u7528\\u91CF\\u9650\\u5236\\u6216\\u81EA\\u52A8\\u4ED8\\u6B3E\\u6388\\u6743","No usage limits or payment authorizations configured"):e.data.source==="offer_history"?o("\\u6682\\u65E0\\u4F18\\u60E0\\u8BB0\\u5F55","No offers yet"):e.data.source==="billing"?o("\\u6682\\u65E0\\u8D26\\u5355","No invoices yet"):o("\\u8FD9\\u91CC\\u8FD8\\u6CA1\\u6709\\u8BB0\\u5F55\\u3002","There are no records yet."));x.prepend(l("empty")),x.setAttribute("role","status"),a.append(x)}if(t.hasNext||t.hasPrevious){let x=i("div","g-data-footer");x.append(i("span","",`${o("\\u7B2C","Page")} ${t.page}`));let E=i("div","g-data-controls");E.append(c(o("\\u4E0A\\u4E00\\u9875","Previous"),"previous",void 0,!t.hasPrevious),c(o("\\u4E0B\\u4E00\\u9875","Next"),"next",void 0,!t.hasNext)),x.append(E),a.append(x)}return t.updatedAt&&e.data.source!=="credit_balance"&&a.append(i("p","g-data-note g-data-updated",`${o("\\u6570\\u636E\\u66F4\\u65B0\\u4E8E","Updated")} ${new Intl.DateTimeFormat(G,{dateStyle:"medium",timeStyle:"short"}).format(new Date(t.updatedAt))}`)),a}let ge=new Map,st=new Map,Rt=e=>{let a=e.target;for(let t of ge.keys())a&&!ie(t)?.contains(a)&&ge.delete(t)};document.addEventListener("focusin",Rt),document.addEventListener("pointerdown",Rt);function oa(e){let a=fe;if(fe=e,!$)return;let t=(r,o)=>{if(r.type==="stack"){r.children.forEach(y=>t(y,r));return}if(r.type!=="customer_data"||JSON.stringify(a?.nodes[r.id])===JSON.stringify(e.nodes[r.id]))return;let i=ie(r.id);if(!i)return;let l=document.activeElement;l&&i.contains(l)&&l.dataset.gDataFocus&&ge.set(r.id,l.dataset.gDataFocus);let c=new Set([...i.querySelectorAll("details[data-g-data-sources]")].filter(y=>y.open).map(y=>y.dataset.gDataSources)),f=Fe(r,o);if(!f)return;for(let y of f.querySelectorAll("details[data-g-data-sources]"))y.open=c.has(y.dataset.gDataSources);let m=i.scrollTop;i.replaceWith(f),f.scrollTop=m;let s=!!e.nodes[r.id]?.membershipReview&&!a?.nodes[r.id]?.membershipReview,g=!e.nodes[r.id]?.membershipReview&&!!a?.nodes[r.id]?.membershipReview;s&&ge.get(r.id)&&st.set(r.id,ge.get(r.id));let b=g?st.get(r.id):ge.get(r.id);b&&[...f.querySelectorAll("[data-g-data-focus]")].find(y=>y.dataset.gDataFocus===b)?.focus({preventScroll:!0}),s&&f.querySelector("[data-g-data-review] h3")?.focus({preventScroll:!0}),g&&st.delete(r.id),f.animate&&e.nodes[r.id]?.status==="ready"&&!window.matchMedia("(prefers-reduced-motion:reduce)").matches&&f.animate([{opacity:.7},{opacity:1}],{duration:140,easing:"ease-out"})},n=$.pages.find(r=>r.id===ae)??$.pages[0];t(n.root,null),ke()}function Fe(e,a){if(e.hidden)return null;let t;if(e.type==="customer_data")t=ia(e);else if(e.type==="stack"){t=document.createElement(e.purchaseAction?"button":"div"),e.purchaseAction&&(t.type="button",t.dataset.gAction=e.purchaseAction),t.className=`${e.purchaseAction?`g-btn g-btn-${e.buttonVariant??"primary"} `:""}g-stack ${e.direction==="horizontal"?"g-h":e.direction==="overlay"?"g-o":"g-v"}`,e.direction==="overlay"?(t.style.alignItems=Jt[e.align]??"stretch",t.style.justifyItems=Vt[e.justify]??"stretch"):(t.style.alignItems=ht[e.align]??"stretch",t.style.justifyContent=bt[e.justify]??"flex-start");for(let n of e.children){let r=Fe(n,e);r&&t.append(r)}if(e.interaction&&sa(t,e),e.purchaseAction&&L.mode==="live"){let n=F?.nodes[e.id],r=n?.picker;r&&(t.disabled=!F?.pickers[r]?.options.includes(String(k[r]??""))),oe(e.id)?.unavailable&&(t.disabled=!0),Ce(t,e.purchaseAction,t.disabled)}L.mode==="editor"&&!t.childElementCount&&(t.classList.add("g-empty"),t.dataset.gEditorPlaceholder=L.editorMessages?.emptyContainer??"\\u62D6\\u5165\\u7EC4\\u4EF6")}else if(e.type==="text"){let n=e.variant==="title"?"h1":e.variant==="heading"?"h2":"p";t=document.createElement(n),t.className=`g-text g-${e.variant}`;let r=pe(e,"text",e.text);t.textContent=r.value,r.missing&&L.mode==="editor"&&t.classList.add("g-missing")}else if(e.type==="button"){t=document.createElement("button"),t.type="button",t.className=`g-btn g-btn-${e.variant}`;let n=pe(e,"label",e.label);t.textContent=n.value,n.missing&&L.mode==="editor"&&t.classList.add("g-missing"),t.dataset.gAction=e.action;let r=F?.nodes[e.id]?.picker;if(r&&L.mode==="live"){let o=r,i=F?.pickers[o],l=k[o]??i?.selected;t.disabled=!i?.options.includes(String(l)),t.disabled&&t.setAttribute("aria-disabled","true")}L.mode==="live"&&oe(e.id)?.unavailable&&(t.disabled=!0,t.setAttribute("aria-disabled","true")),L.mode==="live"&&Ce(t,e.action,t.disabled),L.mode==="editor"&&(t.tabIndex=-1)}else if(e.type==="image"){t=document.createElement("div"),t.className="g-img",yt[e.aspect]&&(t.dataset.aspect=e.aspect,t.style.aspectRatio=yt[e.aspect]);let n=document.createElement("img");n.src=e.localizedSrc?.[G]??e.localizedSrc?.[$.strings.defaultLocale]??e.src,n.alt=pe(e,"alt",e.alt).value,n.referrerPolicy="no-referrer",n.decoding="async",n.style.objectFit=e.fit,e.position&&(n.style.objectPosition=`${e.position.x}% ${e.position.y}%`),n.addEventListener("load",Ae),t.append(n)}else if(e.type==="price"){t=document.createElement("div"),t.className="g-price",t.style.cssText="display:flex;align-items:baseline;gap:8px;flex-wrap:wrap;font-variant-numeric:tabular-nums";let n=oe(e.id);if(!n?.price)t.textContent=n?.text??q(e.fallback).value,L.mode==="editor"&&t.classList.add("g-missing");else for(let r of["current","original","period"]){let o=n.price[r];if(!o)continue;let i=document.createElement(r==="original"?"s":"span");i.textContent=o,r==="original"&&(i.style.opacity=".6"),e.parts?.[r]&&we(i,{type:"text",id:e.id,text:e.fallback,variant:"body",style:e.parts[r]},null),t.append(i)}}else if(e.type==="coupon_code"){t=document.createElement("div"),t.style.cssText="display:flex;align-items:center;gap:12px;flex-wrap:wrap";let n=oe(e.id);if(n?.code){let r=document.createElement("code");r.textContent=n.code;let o=document.createElement("button");o.type="button",o.className="g-btn g-btn-secondary",o.textContent=q(e.label).value,o.addEventListener("click",i=>{L.mode!=="editor"&&(i.stopPropagation(),O({type:"copy",nodeId:e.id}))}),t.append(r,o)}else t.textContent=n?.text??q(e.fallback).value,L.mode==="editor"&&t.classList.add("g-missing")}else if(e.type==="countdown"){t=document.createElement("span"),t.setAttribute("role","timer"),t.style.fontVariantNumeric="tabular-nums";let n=oe(e.id),r=n?.countdownAt?Date.parse(n.countdownAt):NaN,o=e.granularity==="second"?void 0:new Intl.NumberFormat(G,{style:"unit",unit:e.granularity,unitDisplay:"short"});!Number.isFinite(r)&&L.mode==="editor"&&t.classList.add("g-missing");let i=()=>{if(!Number.isFinite(r)){t.textContent=n?.text??q(e.fallback).value;return}let l=Math.max(0,Math.ceil((r-Date.now())/1e3));if(!l){t.textContent=q(e.expired).value;let s=ce.get(e.id);s!==void 0&&clearInterval(s),ce.delete(e.id);return}let c=e.granularity,f=c==="day"?86400:c==="hour"?3600:c==="minute"?60:1,m=o?o.format(Math.ceil(l/f)):[Math.floor(l/86400),Math.floor(l/3600)%24,Math.floor(l/60)%60,l%60].map(s=>String(s).padStart(2,"0")).join(":");t.textContent!==m&&(t.textContent=m)};i(),Number.isFinite(r)&&r>Date.now()&&ce.set(e.id,setInterval(i,1e3))}else if(e.type==="quantity_picker"){t=document.createElement("div");let n=F?.quantities?.[e.id],r=document.createElement("label");r.textContent=q(e.label).value;let o=document.createElement("input");o.type="range",o.id=`quantity-${e.id}`,r.htmlFor=o.id,o.min=String(n?.minimum??e.minimumQuantity),o.max=String(n?.maximum??e.maximumQuantity),o.step=String(e.step),o.value=String(typeof k[e.id]=="number"?k[e.id]:e.defaultQuantity),k[e.id]=Number(o.value),o.disabled=L.mode!=="editor"&&!n?.available,o.style.cssText="width:100%;accent-color:var(--g-primary)";let i=document.createElement("output");i.textContent=n?.label||q(e.fallback).value,o.setAttribute("aria-valuetext",n?.label??String(o.value)),o.oninput=()=>{k[e.id]=Number(o.value),O({type:"selection",selection:re()})},t.append(r,o,i)}else if(e.type==="plan_picker"){t=document.createElement("div"),t.setAttribute("role",e.grouping?"group":"radiogroup"),t.setAttribute("aria-label",q(e.label).value),t.style.cssText="display:flex;flex-direction:column;gap:8px";let n=F?.pickers[e.id],r=e.grouping;if(!n?.options.length)t.textContent=q(e.fallback).value,L.mode==="editor"&&t.classList.add("g-missing");else{let o=typeof k[e.id]=="string"?String(k[e.id]):n.selected,i=ue[e.id];if(r){if(!i){let H=r.assignments.find(I=>I.productVersionId===o);i={period:H?.period??"month",tierId:H?.tierId??r.tiers[0].id},ue[e.id]=i}let s=r.assignments.find(H=>H.tierId===i.tierId&&H.period===i.period);o=s&&n.options.includes(s.productVersionId)?s.productVersionId:"";let g=document.createElement("div");g.setAttribute("role","radiogroup"),g.setAttribute("aria-label",`${q(r.monthLabel).value} / ${q(r.yearLabel).value}`),g.style.cssText="display:flex;gap:4px;padding:4px;border:1px solid var(--g-border);border-radius:10px";let b=["month","year"],y=b.filter(H=>r.assignments.some(I=>I.period===H&&n.options.includes(I.productVersionId))),S=H=>{i.period=H;let I=r.assignments.find(R=>R.tierId===i.tierId&&R.period===H);k[e.id]=I&&n.options.includes(I.productVersionId)?I.productVersionId:"",se(),O({type:"selection",selection:re()}),ie(e.id)?.querySelector(`[data-product-period="${H}"]`)?.focus()};for(let H of b){let I=document.createElement("button");I.type="button",I.className=`g-btn g-btn-${H===i.period?"primary":"secondary"}`,I.style.cssText="flex:1;min-width:0;min-height:40px",I.dataset.productPeriod=H,I.setAttribute("role","radio"),I.setAttribute("aria-checked",String(H===i.period)),I.textContent=q(H==="month"?r.monthLabel:r.yearLabel).value,I.disabled=!y.includes(H),I.tabIndex=L.mode==="editor"||I.disabled?-1:H===i.period||!y.includes(i.period)&&H===y[0]?0:-1,I.addEventListener("click",R=>{L.mode!=="editor"&&(R.stopPropagation(),S(H))}),I.addEventListener("keydown",R=>{if(L.mode==="editor"||!y.length)return;let B;["ArrowRight","ArrowDown"].includes(R.key)?B=(y.indexOf(H)+1)%y.length:["ArrowLeft","ArrowUp"].includes(R.key)?B=(y.indexOf(H)-1+y.length)%y.length:R.key==="Home"?B=0:R.key==="End"&&(B=y.length-1),B!==void 0&&(R.preventDefault(),S(y[B]))}),g.append(I)}t.append(g)}k[e.id]=o??"";let l=r?r.tiers.map(s=>({tier:s,id:r.assignments.find(g=>g.tierId===s.id&&g.period===i.period)?.productVersionId})):n.options.map(s=>({id:s,tier:void 0})),c=l.filter(s=>s.id&&n.options.includes(s.id)),f=r?document.createElement("div"):t;r&&(f.setAttribute("role","radiogroup"),f.setAttribute("aria-label",q(e.label).value),f.style.cssText="display:flex;flex-direction:column;gap:8px",t.append(f));let m=s=>{!s.id||!n.options.includes(s.id)||(r&&s.tier&&(i.tierId=s.tier.id),k[e.id]=s.id,se(),O({type:"selection",selection:re()}),ie(e.id)?.querySelector(`[data-plan-id="${s.id}"]`)?.focus())};for(let s of l){let g=s.id?F.plans[s.id]:void 0,b=!!g&&n.options.includes(s.id),y=document.createElement("button");y.type="button",y.className="g-btn g-btn-secondary",y.style.cssText="width:100%;text-align:start;min-height:44px",y.setAttribute("role","radio");let S=r?s.tier?.id===i.tierId:s.id===o;y.setAttribute("aria-checked",String(S)),y.disabled=!b,y.tabIndex=L.mode==="editor"||!b?-1:S||!o&&s===c[0]?0:-1,s.id&&(y.dataset.planId=s.id),s.tier&&(y.dataset.productTier=s.tier.id);let H=s.id?F.nodes[e.id]?.byPlan?.[s.id]?.price:void 0,I=document.createElement("span"),R=document.createElement("span");I.className="g-option-name",R.className="g-option-price",I.textContent=b?s.tier?.name??g.name:s.tier?.name??"",R.textContent=b?`${H?.current??g.price}${H?.period??g.period}`:q(r?.unavailableLabel??e.fallback).value,y.classList.add("g-option"),y.replaceChildren(I,R),y.setAttribute("aria-label",[I.textContent,R.textContent].filter(Boolean).join(", ")),S&&(y.style.borderColor="var(--g-primary)",y.style.boxShadow="inset 0 0 0 1px var(--g-primary)",e.states?.selected&&we(y,{type:"text",id:e.id,text:e.label,variant:"body",style:e.states.selected},null)),y.addEventListener("click",B=>{L.mode==="editor"||!b||(B.stopPropagation(),m(s))}),y.addEventListener("keydown",B=>{if(L.mode==="editor"||!c.length)return;let Y=c.indexOf(s),x;["ArrowRight","ArrowDown"].includes(B.key)?x=(Y+1)%c.length:["ArrowLeft","ArrowUp"].includes(B.key)?x=(Y-1+c.length)%c.length:B.key==="Home"?x=0:B.key==="End"&&(x=c.length-1),x!==void 0&&(B.preventDefault(),m(c[x]))}),f.append(y)}if(r&&!o){let s=document.createElement("p");s.setAttribute("role","status"),s.textContent=q(r.unavailableLabel).value,t.append(s)}}}else if(e.type==="divider")t=document.createElement("hr"),t.className="g-divider";else if(e.type==="spacer")t=document.createElement("div"),t.setAttribute("aria-hidden","true"),t.style.flex="0 0 auto",t.style.width=t.style.height=`${qt[e.size]??0}px`;else if(e.type==="custom_html"){t=document.createElement("div"),t.className="g-custom";let n=t.attachShadow({mode:"open"}),r=document.createElement("style"),o="@media(prefers-reduced-motion:reduce){:host,:host::before,:host::after,*,*::before,*::after{animation:none!important;transition:none!important;scroll-behavior:auto!important}}";r.textContent=`:host{display:block}[data-indiana-counter-character]::before{content:attr(data-character)}${o}@layer indiana-accessibility{${o}[hidden]{display:none!important}}${e.css}`;let i=document.createElement("div");n.append(r,i),Ee.set(t,{body:i,source:null,bound:!1,unresolved:!1,variables:[],bindings:[],fallback:!1,initialized:!1,template:null,parked:!1}),It(t,e)}else return null;return e.style&&we(t,e,a),t.dataset.gNode=e.id,t.dataset.gLabel=na(e),Ve.set(e.id,t),t}function sa(e,a){let t=a.interaction,n=[...e.children];e.setAttribute("aria-label",q(t.label).value);let r=J?.bindings.find(i=>i.componentId===a.id),o=r?{id:r.variable,source:r.componentId,required:r.required}:void 0;if(o){let i=document.createElement("p");i.className="g-text g-body",i.textContent=q(t.label).value+(o.required?" *":""),e.prepend(i),o.required&&e.setAttribute("aria-required","true")}if(t.type==="input"){let i=document.createElement("input");i.type=t.keyboard,i.maxLength=t.maxLength,i.autocomplete="off",i.setAttribute("aria-label",q(t.label).value),i.setAttribute("aria-required",String(!!o?.required)),i.value=typeof k[a.id]=="string"?String(k[a.id]):"",i.style.cssText="box-sizing:border-box;width:100%;min-height:44px;padding:10px 14px;border:1px solid var(--g-border);border-radius:8px;background:var(--g-surface);color:var(--g-text);font:inherit",i.disabled=L.mode!=="live",i.addEventListener("input",()=>{k[a.id]=i.value,Be(a.id,i.value)}),e.append(i);return}if(!(L.mode!=="live"||!n.length&&t.type!=="toggle")){if(t.type==="multiselect"){e.setAttribute("role","group"),e.dataset.gMin=String(t.min);let i=a.children.filter(f=>!f.hidden),l=new Set(Array.isArray(k[a.id])?k[a.id]:[]),c=()=>n.forEach((f,m)=>{let s=l.has(i[m].id);f.setAttribute("aria-checked",String(s)),f.setAttribute("aria-disabled",String(!s&&l.size>=t.max)),f.style.outline=s?"2px solid var(--g-primary)":"",f.style.outlineOffset="-2px"});n.forEach((f,m)=>{f.setAttribute("role","checkbox"),f.tabIndex=0,$t(f)?f.removeAttribute("aria-label"):f.setAttribute("aria-label",String(m+1)),f.style.cursor="pointer";let s=()=>{let g=i[m].id;if(l.has(g))l.delete(g);else if(l.size<t.max)l.add(g);else return;let b=i.filter(y=>l.has(y.id)).map(y=>y.id);k[a.id]=b,c(),Be(a.id,b)};f.addEventListener("click",g=>{g.stopPropagation(),s()}),f.addEventListener("keydown",g=>{[" ","Enter"].includes(g.key)&&(g.preventDefault(),g.stopPropagation(),s())})}),c();return}if(t.type==="select"){e.setAttribute("role","radiogroup");let i=a.children.filter(m=>!m.hidden),l=K(a)?a.interaction.pickerId:void 0,c=i.findIndex(m=>l?m.type==="stack"&&m.bind?.plan===k[l]:m.id===k[a.id]);!l&&c<0&&!o?.required&&(c=Math.min(t.defaultIndex,n.length-1));let f=(m,s=!1,g=!0)=>{if(l&&g&&m>=0){let b=i[m],y=b.type==="stack"?b.bind?.plan:void 0;if(!y||!F?.pickers[l]?.options.includes(y))return;k[a.id]=b.id,k[l]=y,se(),O({type:"selection",selection:re()}),s&&U.querySelector(`[data-g-node="${b.id}"]`)?.focus({preventScroll:!0});return}c=m,m>=0&&(k[a.id]=i[m].id),g&&m>=0&&Be(a.id,i[m].id),n.forEach((b,y)=>{b.setAttribute("aria-checked",String(y===m)),b.tabIndex=y===(m<0?0:m)?0:-1,b.style.cssText="";let S=i[y];S.type==="stack"&&(b.style.alignItems=ht[S.align]??"stretch",b.style.justifyContent=bt[S.justify]??"flex-start"),S.style&&we(b,S,a),y===m&&(t.selectedStyle&&we(b,{...S,style:t.selectedStyle},a),S.type==="stack"&&S.states?.selected&&we(b,{...S,style:S.states.selected},a),!t.selectedStyle?.border&&!(S.type==="stack"&&S.states?.selected?.border)&&(b.style.outline="2px solid var(--g-primary)",b.style.outlineOffset="-2px")),b.style.cursor="pointer"}),s&&m>=0&&n[m].focus()};n.forEach((m,s)=>{if(m.setAttribute("role","radio"),l){let g=i[s],b=g.type==="stack"?g.bind?.plan:void 0;m.setAttribute("aria-disabled",String(!b||!F?.pickers[l]?.options.includes(b)))}$t(m)?m.removeAttribute("aria-label"):m.setAttribute("aria-label",String(s+1)),m.addEventListener("click",g=>{g.stopPropagation(),f(s)}),m.addEventListener("keydown",g=>{let b=g.key;if(!["ArrowRight","ArrowLeft","ArrowDown","ArrowUp","Home","End"," ","Enter"].includes(b))return;g.preventDefault(),g.stopPropagation();let y=c<0?s:c;f(b==="Home"?0:b==="End"?n.length-1:b==="ArrowRight"||b==="ArrowDown"?(y+1)%n.length:b==="ArrowLeft"||b==="ArrowUp"?(y+n.length-1)%n.length:s,!0)})}),f(c,!1,!1)}else if(t.type==="tabs"){let i=a.children.filter(s=>!s.hidden),l=document.createElement("div");l.setAttribute("role","tablist"),l.setAttribute("aria-label",q(t.label).value),l.style.cssText="display:flex;gap:4px;padding:4px;border:1px solid var(--g-border);border-radius:12px";let c=n.map((s,g)=>{let b=document.createElement("button");return b.type="button",b.setAttribute("role","tab"),b.textContent=lt(i[g])||String(g+1),b.style.cssText="flex:1;min-width:0;min-height:44px;padding:8px 16px;border:0;border-radius:8px;font:inherit;cursor:pointer",s.id=`g-${a.id}-${i[g].id}`,s.setAttribute("role","tabpanel"),b.setAttribute("aria-controls",s.id),l.append(b),b}),f=(s,g=!1,b=!1)=>{if(k[a.id]=i[s].id,b&&$&&Object.keys(ee($)).length){for(let y of Object.keys(ee($)))delete k[y];se(),O({type:"selection",selection:re()}),g&&U.querySelector(`[data-g-node="${a.id}"] [role="tab"][aria-selected="true"]`)?.focus({preventScroll:!0});return}n.forEach((y,S)=>{y.hidden=S!==s,c[S].setAttribute("aria-selected",String(S===s)),c[S].tabIndex=S===s?0:-1,c[S].style.background=S===s?"var(--g-primary)":"transparent",c[S].style.color=S===s?"var(--g-on-primary)":"var(--g-text)"}),g&&c[s].focus(),ke()};c.forEach((s,g)=>{s.addEventListener("click",b=>{b.stopPropagation(),f(g,!1,!0)}),s.addEventListener("keydown",b=>{["ArrowLeft","ArrowRight","Home","End"].includes(b.key)&&(b.preventDefault(),b.stopPropagation(),f(b.key==="Home"?0:b.key==="End"?n.length-1:(g+(b.key==="ArrowRight"?1:n.length-1))%n.length,!0,!0))})}),e.prepend(l);let m=i.findIndex(s=>s.id===k[a.id]);f(m>=0?m:Math.min(t.defaultIndex,n.length-1))}else if(t.type==="toggle"){let i=document.createElement("button");i.type="button",i.setAttribute("role","switch"),i.className="g-btn g-btn-secondary",i.style.cssText="display:flex;align-items:center;justify-content:space-between;gap:16px;color:var(--g-text)";let l=document.createElement("span");l.textContent=q(t.label).value;let c=document.createElement("span");c.setAttribute("aria-hidden","true"),c.style.cssText="position:relative;display:block;flex:none;width:44px;height:24px;border-radius:12px;background:var(--g-border)";let f=document.createElement("span");f.style.cssText="position:absolute;top:3px;left:3px;width:18px;height:18px;border-radius:50%;background:#fff;box-shadow:0 1px 3px #0003",c.append(f),i.append(l,c);let m=(s,g=!1)=>{if(k[a.id]=s,g&&$&&Object.keys(ee($)).length){for(let b of Object.keys(ee($)))delete k[b];se(),O({type:"selection",selection:re()}),U.querySelector(`[data-g-node="${a.id}"] [role="switch"]`)?.focus({preventScroll:!0});return}i.setAttribute("aria-checked",String(s)),c.style.background=s?"var(--g-primary)":"var(--g-border)",f.style.left=s?"23px":"3px",f.style.background=s?"var(--g-on-primary)":"#FFFFFF",n.forEach((b,y)=>b.hidden=y!==(s?0:1)),ke()};i.addEventListener("click",s=>{s.stopPropagation(),m(!k[a.id],!0),Be(a.id,!!k[a.id])}),e.prepend(i),m(typeof k[a.id]=="boolean"?k[a.id]:t.defaultEnabled)}else{e.setAttribute("role","region"),e.setAttribute("aria-roledescription","carousel");let i=document.createElement("div");i.style.cssText="display:flex;align-items:center;justify-content:center;gap:10px";let l=document.createElement("button"),c=document.createElement("button"),f=document.createElement("span"),m=G.startsWith("zh");l.textContent="\\u2190",c.textContent="\\u2192",l.setAttribute("aria-label",m?"\\u4E0A\\u4E00\\u6761\\u8BC4\\u4EF7":"Previous review"),c.setAttribute("aria-label",m?"\\u4E0B\\u4E00\\u6761\\u8BC4\\u4EF7":"Next review");for(let g of[l,c])g.type="button",g.className="g-btn g-btn-secondary",g.style.color="var(--g-text)";f.setAttribute("aria-live","polite");let s=g=>{xe[a.id]=g,n.forEach((b,y)=>b.hidden=y!==g),f.textContent=`${g+1} / ${n.length}`,ke()};l.addEventListener("click",g=>{g.stopPropagation(),s((xe[a.id]+n.length-1)%n.length)}),c.addEventListener("click",g=>{g.stopPropagation(),s((xe[a.id]+1)%n.length)}),i.append(l,f,c),e.append(i),s(xe[a.id]??0)}}}function $t(e){return!!e.textContent?.trim()||[...e.querySelectorAll(".g-custom")].some(a=>!!a.shadowRoot?.textContent?.trim())}function lt(e){if(e.hidden)return"";if(e.type==="text"&&(e.variant==="title"||e.variant==="heading")){let{value:a,missing:t}=pe(e,"text",e.text);return t||a.includes("{{")?"":a.replace(/\\s+/g," ").trim()}if(e.type==="custom_html"){let a=document.createElement("template");a.innerHTML=e.html[G]??e.html[$.strings.defaultLocale]??"";let t=a.content.querySelector("h1,h2");return t?.querySelectorAll("br").forEach(n=>n.replaceWith(" ")),t?.textContent?.replace(/\\s+/g," ").trim()??""}if(e.type==="stack")for(let a of e.children){let t=lt(a);if(t)return t}return""}function Pt(e){return e.type==="stack"&&!e.interaction&&!e.purchaseAction}function Oe(e){let a=[],t=n=>{let r=F?.nodes[n.id];if(a.push(n.id,oe(n.id)),r?.picker&&a.push(k[r.picker],F?.pickers[r.picker]),n.type==="text")a.push(pe(n,"text",n.text));else if(n.type==="button")a.push(pe(n,"label",n.label),he.has(n.action));else if(n.type==="image")a.push(pe(n,"alt",n.alt));else if(n.type==="custom_html"){let o=nt(n);a.push(o,[...he],L.mode==="live"&&J?At(o).map(i=>[i,at(i)]):void 0)}else if(n.type==="customer_data")a.push(fe?.nodes[n.id]);else if(n.type==="plan_picker"){let o=F?.pickers[n.id];a.push(k[n.id],ue[n.id],o,r,o?.options.map(i=>F?.plans[i]))}else n.type==="stack"&&(n.interaction?.type!=="input"&&a.push(k[n.id],xe[n.id]),n.purchaseAction&&a.push(he.has(n.purchaseAction)),K(n)&&a.push(k[n.interaction.pickerId],F?.pickers[n.interaction.pickerId]),n.children.forEach(t))};return t(e),JSON.stringify(a)}function zt(e){e.hidden||(Pt(e)?e.children.forEach(zt):Se.set(e.id,Oe(e)))}function dt(e){if(e.type==="custom_html"){Me.get(e.id)?.dispose(),Me.delete(e.id);let t=ie(e.id),n=t&&Ee.get(t);n&&ot(n)}let a=ce.get(e.id);a!==void 0&&clearInterval(a),ce.delete(e.id),e.type==="stack"&&e.children.forEach(dt)}function Dt(e,a){if(e.hidden)return;if(Pt(e)){e.children.forEach(r=>Dt(r,e));return}if(Se.get(e.id)===Oe(e))return;let t=ie(e.id);if(!t)return;if(e.type==="custom_html"&&Ee.has(t)){It(t,e),Se.set(e.id,Oe(e));return}dt(e);let n=Fe(e,a);n&&(t.replaceWith(n),Se.set(e.id,Oe(e)))}function la(){let e=document.activeElement;if(!(e instanceof HTMLElement)||!U.contains(e))return;let a=e.closest("[data-g-node]");if(!a)return;let t=[];for(let n=e;n!==a;){let r=n.parentElement;if(!r)return;t.unshift(Array.prototype.indexOf.call(r.children,n)),n=r}return{active:e,nodeId:a.dataset.gNode,path:t,identity:["productPeriod","planId","productTier","gDataFocus"].map(n=>[n,e.dataset[n]]).find(([,n])=>n!==void 0),selection:e instanceof HTMLInputElement&&e.selectionStart!==null?{start:e.selectionStart,end:e.selectionEnd,direction:e.selectionDirection}:void 0}}function da(e){if(!e||e.active.isConnected)return;let a=ie(e.nodeId);if(!a)return;let t=a;if(e.identity){let[n,r]=e.identity;t=[...a.querySelectorAll("*")].find(o=>o.dataset[n]===r)}else for(let n of e.path)t=t?.children[n];!t||t.hasAttribute("disabled")||(t.focus({preventScroll:!0}),e.selection&&t instanceof HTMLInputElement&&["text","search","tel","url","password"].includes(t.type)&&t.setSelectionRange(e.selection.start,e.selection.end,e.selection.direction??void 0))}function se(e=!1){if(!$)return;let a=e?void 0:la(),t=$.pages.find(r=>r.id===(ae??$.initialPageId))??$.pages[0];if(ae=t.id,F){let r={},o=i=>{i.type==="stack"&&i.children.forEach(o),i.type==="plan_picker"&&typeof k[i.id]=="string"&&k[i.id]!==""&&(r[i.id]=String(k[i.id]))};o(t.root),Object.assign(k,Ne({...$,pages:[t]},re(),F)),Object.assign(k,r)}let n=r=>{if(r.type==="stack"&&r.children.forEach(n),r.type!=="plan_picker"||!r.grouping)return;let o=r.grouping,i=F?.pickers[r.id],l=ue[r.id];if(!l){let f=o.assignments.find(m=>m.productVersionId===(k[r.id]??i?.selected));l={period:f?.period??"month",tierId:f?.tierId??o.tiers[0].id},ue[r.id]=l}let c=o.assignments.find(f=>f.tierId===l.tierId&&f.period===l.period);k[r.id]=c&&i?.options.includes(c.productVersionId)?c.productVersionId:""};if(n(t.root),e||Re!==t){Re&&dt(Re.root),ce.forEach(i=>clearInterval(i)),ce.clear(),Se.clear(),Ve.clear(),U.style.cssText="",ta(t.theme?{...$,theme:t.theme}:$);let r=G.split("-")[0];document.documentElement.lang=G,document.documentElement.dir=["ar","he","fa","ur"].includes(r)?"rtl":"ltr",U.dataset.gPresentation=$.presentation.type;let o=Fe(t.root,null);U.replaceChildren(...o?[o]:[]),Re=t,zt(t.root)}else Dt(t.root,null);if(aa(),da(a),U.dataset.gPage=t.id,L.mode==="live"&&O({type:"page",pageId:t.id}),St)ke();else{ut(),ct();let r=Math.ceil(U.getBoundingClientRect().height);St=!0,Ye=r,O({type:"rendered",height:r,label:lt(t.root)||$.name})}}function ke(){let e=Math.ceil(U.getBoundingClientRect().height);e!==Ye&&(Ye=e,O({type:"resize",height:e})),ut(),ct()}function Ae(){Ze||(Ze=!0,window.requestAnimationFrame(()=>{Ze=!1,ke()}))}function ct(){if(L.mode!=="editor")return;let e=[];for(let t of U.querySelectorAll("[data-g-node]")){let n=t.getBoundingClientRect();!n.width||!n.height||e.push({id:t.dataset.gNode,x:n.x,y:n.y,width:n.width,height:n.height})}let a=JSON.stringify(e);a!==Et&&(Et=a,O({type:"layout",nodes:e}))}function ie(e){if(!e||!/^[a-zA-Z][a-zA-Z0-9_-]*$/.test(e))return null;let a=Ve.get(e);return a?.isConnected?a:null}function Bt(e,a){let t=ie(a);if(!t){e.style.display="none";return}let n=t.getBoundingClientRect();e.style.display="block",e.style.left=`${n.left+window.scrollX}px`,e.style.top=`${n.top+window.scrollY}px`,e.style.width=`${n.width}px`,e.style.height=`${n.height}px`,e.toggleAttribute("data-below",n.top<20),e.firstChild.textContent=t.dataset.gLabel??""}function ut(){L.mode==="editor"&&(Bt(Le,Qe),Bt(ze,$e&&$e!==Qe?$e:null))}function je(e){for(let a of e.composedPath()){if(a instanceof HTMLElement&&a.dataset.gNode)return a.dataset.gNode;if(a===U)break}return null}function ca(e){if(e.isTrusted){if(L.mode==="editor"){e.preventDefault(),e.stopPropagation(),O({type:"select",id:je(e)});return}for(let a of e.composedPath()){if(!(a instanceof HTMLElement))continue;let t=a.dataset.gAction??(a.tagName==="BUTTON"?a.getAttribute("data-grow-action"):null);if(t&&!he.has(t)&&!a.disabled){e.preventDefault();let n=$?.actions.find(r=>r.id===t);if(n?.type==="navigate"){if(ae=n.pageId,$)for(let o of Object.keys(ee($)))delete k[o];se();let r=U.querySelector("h1,h2")??U;r===U&&(U.setAttribute("role","group"),U.setAttribute("aria-label",$?.pages.find(o=>o.id===ae)?.name??$?.name??"Page")),r.tabIndex=-1,r.focus({preventScroll:!0});return}O({type:"action",actionId:t,nodeId:je(e)??void 0,...Object.keys(k).length?{selection:re()}:{},...J?{answers:Ht()}:{}});return}if(a===U)return}}}function Ft(e){let a=e;if(!(!a||a.channel!==L.channel))try{if(a.type==="render"){let t=a.doc;if(!t||t.kind!=="screen"||t.schemaVersion!==4||Object.hasOwn(t,"funnel")||!t.pages?.length||t.pages.length>(t.surface==="paywall"?10:1)||t.pages.some(n=>Object.hasOwn(n,"source"))||t.actions?.some(n=>!["event","close","open_url","claim_offer",...t.surface==="paywall"?["navigate"]:[]].includes(n.type)))throw new Error("Unsupported screen document; use the current Funnel runtime for flows");Q.clear(),be=ye=0,$=t,vt(a.unavailableActions),ae=null,G=String(a.locale),We=new Set,J=a.serverInput,k=de(),Je.clear(),ue=de(),F=a.capabilities,fe=a.customerData,ge.clear();for(let[n,r]of Object.entries(F?.pickers??{}))r.selected&&(k[n]=r.selected);if(a.selection&&typeof a.selection=="object"&&!Array.isArray(a.selection)){let n=a.selection,r=i=>{let l=n[i.id];if(i.type==="custom_html"&&i.ui)for(let[c,f]of Object.entries(i.ui.state??{})){let m=`${i.id}.${c}`,s=n[m];s!==null&&kt(f,s)&&(k[m]=s)}if(i.type==="quantity_picker"&&typeof l=="number"&&(k[i.id]=l),i.type==="plan_picker"&&typeof l=="string"&&i.planIds?.includes(l)&&(k[i.id]=l),i.type==="stack"){if(i.interaction?.type==="toggle"&&typeof l=="boolean"&&(k[i.id]=l),i.interaction&&["select","tabs"].includes(i.interaction.type)&&typeof l=="string"&&i.children.some(c=>c.id===l)&&(k[i.id]=l),K(i)){let c=n[i.interaction.pickerId];typeof c=="string"&&i.children.some(f=>f.type==="stack"&&f.bind?.plan===c)&&(k[i.interaction.pickerId]=c)}i.children.forEach(r)}};$.pages.forEach(i=>r(i.root));let o=n.__page;typeof o=="string"&&$.pages.some(i=>i.id===o)&&(ae=o)}for(let n of J?.bindings??[])Object.hasOwn(J.answers,n.variable)&&(k[n.componentId]=J.answers[n.variable],We.add(n.componentId));xe=de(),G=String(a.locale),Tt(),se(!0)}else if(a.type==="capabilities"){F=a.capabilities,a.unavailableActions!==void 0&&vt(a.unavailableActions);for(let[t,n]of Object.entries(F.quantities??{})){let r=ie(t),o=r?.querySelector(\'input[type="range"]\');if(o){o.min=String(n.minimum),o.max=String(n.maximum),o.disabled=!n.available,o.setAttribute("aria-valuetext",n.label);let i=r?.querySelector("output");i&&(i.textContent=n.label)}}Tt();for(let[t,n]of Object.entries(F.pickers))!ue[t]&&(k[t]===void 0||k[t]==="")&&(k[t]=n.selected??"");se()}else a.type==="customer-data"?oa(a.data):a.type==="restore-action-focus"&&L.mode==="live"?[...U.querySelectorAll("button[data-g-node]")].find(t=>t.dataset.gNode===a.nodeId&&!t.disabled)?.focus({preventScroll:!0}):a.type==="highlight"&&L.mode==="editor"&&($e=a.hoverId??null,Qe=a.selectedId??null,ut())}catch(t){O({type:"error",message:t instanceof Error?t.message:"render failed"})}}let Ot=document.createElement("style");if(Ot.textContent=Gt,document.head.append(Ot),document.body.append(U),L.mode==="editor"){document.body.dataset.gEditor="",document.body.append(ze,Le),document.addEventListener("mouseover",a=>{let t=je(a);t!==Pe&&(Pe=t,O({type:"hover",id:t}))}),document.documentElement.addEventListener("mouseleave",()=>{Pe!==null&&(Pe=null,O({type:"hover",id:null}))}),document.addEventListener("dblclick",a=>{let t=je(a);t&&a.isTrusted&&O({type:"edit",id:t})}),document.addEventListener("click",a=>{U.contains(a.target)||O({type:"select",id:null})});let e=(a,t)=>{if(!a.isTrusted)return;let n=a.metaKey||a.ctrlKey,r=a.key;(r===" "||t==="down"&&(["Delete","Backspace","Escape"].includes(r)||n&&/^[zysdcvg0=+-]$/i.test(r)))&&((n||r===" ")&&a.preventDefault(),O({type:"key",key:{key:r,phase:t,meta:a.metaKey,ctrl:a.ctrlKey,shift:a.shiftKey,alt:a.altKey}}))};document.addEventListener("keydown",a=>e(a,"down")),document.addEventListener("keyup",a=>e(a,"up")),document.addEventListener("wheel",a=>{!a.isTrusted||!(a.ctrlKey||a.metaKey)||(a.preventDefault(),O({type:"zoom",delta:a.deltaY}))},{passive:!1})}U.addEventListener("click",ca),document.addEventListener("keydown",e=>{e.key==="Escape"&&e.isTrusted&&(e.preventDefault(),O({type:"escape"}))}),typeof ResizeObserver=="function"&&new ResizeObserver(Ae).observe(U),window.addEventListener("resize",Ae),L.mode==="editor"&&window.addEventListener("scroll",ct),window.addEventListener("message",e=>{e.source===ne&&Ft(e.data)}),Ut.__indianaReceive=Ft,O({type:"ready"})}',K={tag:"9968fade7d559d67037977224cee2c17163bb8eb0fe6944e757258044a24c043",csp:"default-src 'none'; script-src 'sha256-fAcWVAhWAHIYXHBhxwlX8a+axG7FvHf3HL0RUINFxTU='; style-src 'unsafe-inline'; img-src https: data:; connect-src 'none'; font-src https:; media-src 'none'; frame-src 'none'; base-uri 'none'; form-action 'none'",html:`<!doctype html><html><head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"><meta http-equiv="Content-Security-Policy" content="default-src 'none'; script-src 'sha256-fAcWVAhWAHIYXHBhxwlX8a+axG7FvHf3HL0RUINFxTU='; style-src 'unsafe-inline'; img-src https: data:; connect-src 'none'; font-src https:; media-src 'none'; frame-src 'none'; base-uri 'none'; form-action 'none'"></head><body><script>(() => {
|
|
2
|
+
try {
|
|
3
|
+
const input = JSON.parse(decodeURIComponent(location.hash.slice(1)));
|
|
4
|
+
if (!input || !/^[a-f0-9-]{36}$/.test(input.channel) || input.mode !== "live" || !Number.isInteger(input.hostDepth) || input.hostDepth < 1 || input.hostDepth > 16) return;
|
|
5
|
+
const origin = new URL(input.parentOrigin);
|
|
6
|
+
if (!["https:", "http:"].includes(origin.protocol) || origin.origin !== input.parentOrigin) return;
|
|
7
|
+
const boot = { channel: input.channel, parentOrigin: origin.origin, hostDepth: input.hostDepth, mode: "live" };
|
|
8
|
+
(`+ue+`)(boot);
|
|
9
|
+
} catch { /* No valid host bridge: leave the public shell empty. */ }
|
|
10
|
+
})();<\/script></body></html>`};var Ze=`(${ue})(JSON.parse(document.getElementById("grow-renderer-boot").textContent))`;function Te(a,t){let s=JSON.stringify(a).replace(/</g,"\\u003c");return`<!doctype html><html><head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"><meta http-equiv="Content-Security-Policy" content="default-src 'none'; script-src 'nonce-${t}'; style-src 'unsafe-inline'; img-src https: data:; connect-src 'none'; font-src https:; media-src 'none'; frame-src 'none'; base-uri 'none'; form-action 'none'"></head><body><script type="application/json" id="grow-renderer-boot">${s}<\/script><script nonce="${t}">${Ze}<\/script></body></html>`}function Ye(){let{html:a}=K;return a.slice(a.indexOf("<script>")+8,a.lastIndexOf("<\/script>"))}function $e(a){let t=new Intl.Locale(a);if(t.language==="zh")return t.maximize().script==="Hant"?"\u95DC\u9589\u5F48\u7A97":"\u5173\u95ED\u5F39\u7A97";let s={en:"Close popup",ja:"\u30DD\u30C3\u30D7\u30A2\u30C3\u30D7\u3092\u9589\u3058\u308B",ko:"\uD31D\uC5C5 \uB2EB\uAE30",es:"Cerrar ventana emergente",fr:"Fermer la fen\xEAtre contextuelle",de:"Popup schlie\xDFen",pt:"Fechar janela pop-up",it:"Chiudi popup",ru:"\u0417\u0430\u043A\u0440\u044B\u0442\u044C \u0432\u0441\u043F\u043B\u044B\u0432\u0430\u044E\u0449\u0435\u0435 \u043E\u043A\u043D\u043E",vi:"\u0110\xF3ng c\u1EEDa s\u1ED5 b\u1EADt l\xEAn",th:"\u0E1B\u0E34\u0E14\u0E2B\u0E19\u0E49\u0E32\u0E15\u0E48\u0E32\u0E07\u0E1B\u0E4A\u0E2D\u0E1B\u0E2D\u0E31\u0E1B",id:"Tutup pop-up",ar:"\u0625\u063A\u0644\u0627\u0642 \u0627\u0644\u0646\u0627\u0641\u0630\u0629 \u0627\u0644\u0645\u0646\u0628\u062B\u0642\u0629",he:"\u05E1\u05D2\u05D9\u05E8\u05EA \u05D4\u05D7\u05DC\u05D5\u05DF \u05D4\u05E7\u05D5\u05E4\u05E5",fa:"\u0628\u0633\u062A\u0646 \u067E\u0646\u062C\u0631\u0647\u0654 \u0628\u0627\u0632\u0634\u0648",ur:"\u067E\u0627\u067E \u0627\u067E \u0628\u0646\u062F \u06A9\u0631\u06CC\u06BA"};return s[t.language]??s.en}import Xe from"dompurify";import Fe from"css-tree/parser";import Ke from"css-tree/generator";import ze from"css-tree/walker";var pe=1e4;function Be(a){let t=0;return a.trim()&&ze(Fe(a),()=>{t++}),t}function He(a){if(!a.trim())return"";if(/[\\<]/.test(a))throw new Error("CSS \u6682\u4E0D\u652F\u6301\u53CD\u659C\u6760\u8F6C\u4E49\u6216 HTML \u6807\u7B7E\u3002");let t=Fe(a,{onParseError:d=>{throw Object.assign(new Error("CSS \u683C\u5F0F\u4E0D\u6B63\u786E\u3002"),{offset:d.offset})}}),s=0;return ze(t,d=>{if(++s>pe)throw new Error("CSS \u8FC7\u4E8E\u590D\u6742\u3002");if(d.type==="Raw"||d.type==="Url"||d.type==="Atrule"&&!["media","supports","keyframes"].includes(d.name.toLowerCase())||d.type==="Function"&&["image-set","-webkit-image-set","image","src","paint"].includes(d.name.toLowerCase()))throw new Error("CSS \u4E0D\u652F\u6301\u5916\u90E8\u8D44\u6E90\u3001\u5BFC\u5165\u6216\u672A\u77E5\u8BED\u6CD5\uFF1B\u56FE\u7247\u8BF7\u4F7F\u7528 HTML img \u6807\u7B7E\u3002")}),Ke(t)}function Qe(a,t,s,d){return{html:et(a,s,d),css:me(t)}}function me(a){return He(a)}function et(a,t,s,d){return re(a,t,s,d).html}function re(a,t,s,d,l){if(!a.trim())return{html:"",elements:0};let u=le(a);if(u.length)throw new Error(u[0]);let f=Xe(s),c=f.sanitize(a,{ALLOWED_TAGS:["main","section","article","header","footer","div","span","p","h1","h2","h3","h4","strong","em","b","i","small","br","hr","ul","ol","li","button","img",...l?["nav","label","input","select","option","fieldset","legend","output","progress"]:[]],ALLOWED_ATTR:["class","alt","src","width","height","title","type","disabled","data-grow-action","aria-label","aria-hidden","lang","translate",...l?["data-ui","role","aria-live","aria-selected","aria-checked","aria-expanded","aria-controls","aria-describedby","aria-valuetext","aria-invalid","tabindex","id","for","value","min","max","step","maxlength","inputmode","placeholder","checked","readonly","hidden"]:[]],ALLOW_DATA_ATTR:!1,ALLOW_ARIA_ATTR:!1,ADD_URI_SAFE_ATTR:["data-grow-action","aria-label","aria-hidden","lang","translate",...l?["data-ui","type","role","value","min","max","step","maxlength","inputmode","placeholder","tabindex","id","for","aria-live","aria-selected","aria-checked","aria-expanded","aria-controls","aria-describedby","aria-valuetext","aria-invalid"]:[]],ALLOWED_URI_REGEXP:l?/^(?:https:\/\/|data:image\/(?:svg\+xml|png|jpeg);base64,)/i:/^https:\/\//i,RETURN_DOM:!0});if(!(c instanceof s.Element))throw new Error("\u65E0\u6CD5\u89E3\u6790 HTML\u3002");if(d){let p=new Set;for(let o of f.removed){let e="element"in o?o.element.nodeName.toLowerCase():void 0,n="attribute"in o?o.attribute?.name:void 0;if(!e&&!n)continue;let g=n?/<[^>]+>/g:new RegExp(`<\\s*${e}\\b[^>]*>`,"gi"),y=[...a.matchAll(g)].find(w=>!p.has(`${n??e}:${w.index}`)&&(!n||new RegExp(`\\b${n}\\s*=`,"i").test(w[0])));if(!y)continue;let h=y.index;p.add(`${n??e}:${h}`);let L=n==="style"?"\u5185\u8054\u6837\u5F0F\u4E0D\u4FDD\u7559\uFF0C\u8BF7\u5199\u5728 CSS \u4E2D\u3002":n?.startsWith("on")?"\u811A\u672C\u4E8B\u4EF6\u4E0D\u5141\u8BB8\uFF0C\u8BF7\u4F7F\u7528\u52A8\u4F5C\u6309\u94AE\u3002":n==="src"?"\u56FE\u7247\u53EA\u652F\u6301 https \u5730\u5740\u3002":"\u8FD9\u4E2A\u5C5E\u6027\u4E0D\u5728\u5141\u8BB8\u7684\u5E03\u5C40\u3001\u56FE\u7247\u4E0E\u52A8\u4F5C\u5C5E\u6027\u4E2D\u3002";d.push({language:"html",from:h,to:h+y[0].length,severity:"warning",message:n?`\u5DF2\u79FB\u9664\u5C5E\u6027 ${n}\uFF1A${L}`:`\u5DF2\u79FB\u9664 <${e}>\uFF1A\u8FD9\u4E2A\u6807\u7B7E\u4E0D\u5728\u5141\u8BB8\u7684\u6392\u7248\u6807\u7B7E\u4E2D\u3002`})}}let b=le(c.innerHTML);if(b.length)throw new Error(b[0]);let m=c.querySelectorAll("*").length;if(m>500)throw new Error("HTML \u6700\u591A\u652F\u6301 500 \u4E2A\u5143\u7D20\u3002");if(l){for(let o of c.querySelectorAll("img[src]"))if(!Ee.safeParse(o.getAttribute("src")).success)throw new Error("Local UI artwork must use the bounded native image policy");let p=new Map;for(let o of c.querySelectorAll("[data-ui]")){let e=o.getAttribute("data-ui");if(!/^[A-Za-z][A-Za-z0-9_-]{0,63}$/.test(e))throw new Error("Invalid local UI target");p.set(e,[...p.get(e)??[],o])}for(let o of[...l.bindings??[],...l.controls??[],...l.effects??[]])if(!p.has(o.target))throw new Error(`Local UI target ${o.target} does not exist`);for(let o of l.effects??[]){let e=p.get(o.target);if(o.type==="number_counter"){if(e.length!==1||!["SPAN","STRONG"].includes(e[0].tagName))throw new Error("Number counters require one span or strong target");if((l.bindings??[]).some(n=>n.target===o.target&&["text","value"].includes(n.property)))throw new Error("Counter targets cannot also bind text or value");continue}if(e.length!==1||e[0].tagName!=="DIV")throw new Error("Mosaic effects require one decorative div target");if((l.bindings??[]).some(n=>n.target===o.target&&n.property==="text"))throw new Error("Mosaic targets cannot replace their canvas with text")}for(let o of c.querySelectorAll("input,select")){if(!["text","number","range","checkbox"].includes(o.getAttribute("type")??"text"))throw new Error("Unsupported local UI input type");let e=o.getAttribute("data-ui"),n=l.controls?.find(h=>h.type==="input"&&h.target===e);if(!n||n.type!=="input")throw new Error("Every local input requires an authored control");let g=l.state?.[n.state],y=o.tagName==="SELECT"?"select":o.getAttribute("type")??"text";if(y==="checkbox"&&g?.type!=="boolean"||["range","number"].includes(y)&&g?.type!=="number"||y==="text"&&g?.type!=="text"||y==="select"&&(g?.type!=="enum"||g.values.some(h=>typeof h!="string")))throw new Error("Local input does not match its state type")}for(let o of l.controls??[]){if(o.type==="carousel"&&o.inactiveTargets!==void 0){let e=p.get(o.target);if(e?.length!==1||o.inactiveTargets.length!==e[0].children.length)throw new Error("Inactive targets must correspond to every carousel slide");for(let[n,g]of o.inactiveTargets.entries()){let y=p.get(g),h=e[0].children[n];if(y?.length!==1||y[0].tagName!=="ARTICLE"||y[0]===h||!h.contains(y[0]))throw new Error("Inactive targets require one article inside the corresponding slide")}}if(o.type==="carousel"&&(o.previousTarget||o.nextTarget)){if(p.get(o.target)?.length!==1)throw new Error("Navigated carousels require one viewport target");for(let e of[o.previousTarget,o.nextTarget]){if(e===void 0)continue;let n=p.get(e);if(e===o.target||n?.length!==1||n[0].tagName!=="BUTTON"||n[0].hasAttribute("data-grow-action"))throw new Error("Carousel navigation requires one exclusive button target")}}if(o.type==="input"&&p.get(o.target)?.some(e=>!["INPUT","SELECT"].includes(e.tagName)))throw new Error("Local input controls must target input elements");if(o.type==="action"&&p.get(o.target)?.some(e=>e.tagName!=="BUTTON"))throw new Error("Local action controls must target button elements")}}for(let p of c.querySelectorAll("[data-grow-action]")){let o=p.getAttribute("data-grow-action");if(p.tagName!=="BUTTON"||!t.includes(o))throw new Error(`\u81EA\u5B9A\u4E49 HTML \u91CC\u7684\u6309\u94AE ${o.slice(0,64)} \u6CA1\u6709\u5BF9\u5E94\u7684\u52A8\u4F5C\uFF0C\u8BF7\u5148\u5728\u300C\u70B9\u51FB\u52A8\u4F5C\u300D\u91CC\u6DFB\u52A0\uFF0C\u5E76\u4F7F\u7528 button \u5143\u7D20\u3002`)}if(!c.textContent?.trim()&&!c.querySelector("img"))throw new Error("\u81EA\u5B9A\u4E49 HTML \u6E05\u6D17\u540E\u6CA1\u6709\u53EF\u663E\u793A\u7684\u5185\u5BB9\u3002");return{html:c.innerHTML,elements:m}}var Oe=2e3,We=pe,je=new WeakMap;function qe(a,t,s,d){let l=s.document;if(!l)throw new Error("A content document is required");let u=je.get(s)??new Map;je.set(s,u);let f=(m,p)=>{let o=u.get(m);if(o!==void 0)return o;let e=p();u.set(m,e);let n=[...u.keys()].reduce((g,y)=>g+y.length,0);for(;u.size>64||n>256e3;){let g=u.keys().next().value;u.delete(g),n-=g.length}return e},c=m=>{let p=d?.get(m);return p!==void 0&&t?p:f(`html:${m}`,()=>{if(p!==void 0)return p;let o=l.createElement("div");return o.innerHTML=m,o.querySelectorAll("*").length})},b=m=>f(`css:${m}`,()=>Be(m));for(let m of a.pages){let p=0,o=0,e=n=>{if(n.hidden||(n.type==="stack"&&n.children.forEach(e),n.type!=="custom_html"))return;let g=t?.nodes[n.id],y=[...Object.values(n.html),g?.base.html??"",...Object.values(g?.byPlan??{}).map(h=>h.html??"")];if(p+=Math.max(0,...y.map(c)),o+=b(n.css),p>Oe)throw new Error(`Page custom HTML exceeds ${Oe} elements`);if(o>We)throw new Error(`Page custom CSS exceeds ${We} syntax nodes`)};e(m.root)}}function tt(a,t,s,d,l){let u=[],f="",c="";for(let b of["html","css"])try{b==="html"?f=re(a,s,d,u,l).html:c=me(t)}catch(m){let p=b==="html"?a:t,o=b==="html"?/\{\{|data-grow-action/:/@import\b|url\s*\(|image-set\s*\(|[\\<]/i,e=m instanceof Error?m.message:"\u5185\u5BB9\u65E0\u6CD5\u89E3\u6790",n=b==="html"?e.match(/未知变量:(.+)/)?.[1]:void 0,g=n?p.indexOf(n):-1,y=typeof m=="object"&&m!==null&&"offset"in m&&typeof m.offset=="number"?m.offset:g>=0?p.lastIndexOf("{{",g):p.search(o);u.push({language:b,from:Math.max(0,y),to:Math.min(p.length,Math.max(0,y)+2),severity:"error",message:e})}return{html:f,css:c,diagnostics:u,valid:!u.some(b=>b.severity==="error")}}var ge=new WeakMap;function at(a,t,s){let d=ge.get(t);d||ge.set(t,d=new WeakMap);let l=JSON.stringify(s),u=d.get(a);return(!u||u.actions!==l)&&(u={actions:l,entries:new Map,characters:0},d.set(a,u)),u}function fe(a){let t={};return{prepare:(s,d)=>nt(s,d,a,t),destroy:()=>ge.get(a)?.delete(t)}}function nt(a,t,s,d=t){if(!a)return;let l={},u=t.actions.map(p=>p.id),f=at(d,s,u),c=new Map,b=Date.now();for(let[p,o]of f.entries)o.expires>b||(f.entries.delete(p),f.characters-=p.length+o.html.length);for(let[p,o]of Object.entries(a.nodes)){let e,n=g=>{if(g.html===void 0)return g;let y=H(t,p);if(e??=y?.type==="custom_html",!e)throw new Error("HTML \u5546\u54C1\u6570\u636E\u53EA\u80FD\u7528\u4E8E\u81EA\u5B9A\u4E49 HTML \u7EC4\u4EF6");if(y?.type==="custom_html"&&y.ui)throw new Error("Interactive HTML structure must be authored in the document");let h=f.entries.get(g.html);if(h)f.entries.delete(g.html),f.entries.set(g.html,h);else{let{html:L,elements:w}=re(g.html,u,s);h={html:L,elements:w,expires:b+6e4};let M=g.html.length+L.length;if(M<=1e6)for(f.entries.set(g.html,h),f.characters+=M;f.entries.size>128||f.characters>1e6;){let[E,I]=f.entries.entries().next().value;f.entries.delete(E),f.characters-=E.length+I.html.length}}return c.set(h.html,h.elements),{...g,html:h.html}};l[p]={...o,base:n(o.base),...o.byPlan?{byPlan:Object.fromEntries(Object.entries(o.byPlan).map(([g,y])=>[g,n(y)]))}:{}}}let m={...a,nodes:l};return qe(t,m,s,c),m}var Ue=new WeakMap;function ie(a,t){let s=ke.parse(a),d=JSON.stringify(s),l=Ue.get(t);l||(l=new Map,Ue.set(t,l));let u=Date.now();for(let[w,M]of l)M.expires<=u&&l.delete(w);let f=l.get(d);if(f)return l.delete(d),l.set(d,f),JSON.parse(f.json);let c=s.actions.map(w=>w.id),b=new Map,m=new Map,p=new Map,o=(w,M)=>{let E=JSON.stringify([w,M]),I=b.get(E);if(I===void 0){let R=re(w,c,t,void 0,M);I=R.html,m.set(I,R.elements),b.set(E,I)}return I},e=w=>{if(w.type==="stack")return{...w,children:w.children.map(e)};if(w.type!=="custom_html")return w;let M={};for(let[I,R]of Object.entries(w.html))M[I]=o(R,w.ui);let E=p.get(w.css);return E===void 0&&(E=me(w.css),p.set(w.css,E)),{...w,html:M,css:E}},n={...s,pages:s.pages.map(w=>({...w,root:e(w.root)}))};qe(n,void 0,t,m);let g=JSON.stringify(n),y=new TextEncoder,h=y.encode(g).length;if(h>J.documentBytes)throw new Error(`\u754C\u9762\u5185\u5BB9\u8FC7\u5927\uFF08\u4E0A\u9650 ${J.documentBytes/1e3} KB\uFF09\u3002`);let L=y.encode(d).length;if(L<=J.documentBytes){l.set(d,{json:g,bytes:L+h,expires:u+6e4});let w=[...l.values()].reduce((M,E)=>M+E.bytes,0);for(;l.size>16||w>2*1024*1024;){let[M,E]=l.entries().next().value;l.delete(M),w-=E.bytes}}return n}function Ve(a){let t={display:"block",position:"fixed",top:"0",left:"0",opacity:"0",pointerEvents:"none",zIndex:"-1"},s=Object.keys(t).map(u=>{let f=u,c=a.style[f];return a.style[f]=t[f],[f,c]}),d=a.inert??!1,l=a.getAttribute("aria-hidden");return a.inert=!0,a.setAttribute("aria-hidden","true"),()=>{for(let[u,f]of s)a.style[u]=f;a.inert=d,l===null?a.removeAttribute("aria-hidden"):a.setAttribute("aria-hidden",l)}}function he(a){return Object.assign(new Error(`Web View renderer did not start (${a.phase} timeout)`),{name:"RendererStartupError",code:"RENDERER_STARTUP_TIMEOUT",details:a})}function be(a,t,s){let d=(()=>{let h=a.defaultView;if(!h)throw new Error("Renderer host has no browser window");return h})(),l=s?.hasAttribute("src")?"navigation":"handshake",u=l==="navigation"?1e4:5e3,f=0,c=0,b,m=!1,p=!1;function o(){if(b===void 0)return;d.clearTimeout(b),b=void 0;let h=Math.max(0,performance.now()-c);f+=h,u=Math.max(0,u-h)}function e(){m||(m=!0,o(),a.removeEventListener("visibilitychange",n),s?.removeEventListener("load",y))}function n(){if(!(m||p)){if(a.visibilityState==="hidden"){o();return}b===void 0&&(c=performance.now(),b=d.setTimeout(()=>{f+=Math.max(0,performance.now()-c),b=void 0,e(),t({phase:l,visibleMs:Math.round(f)})},u))}}function g(h){m||l===h||l==="render"||(o(),l=h,u=5e3,n())}function y(){l==="navigation"&&g("handshake")}return s?.addEventListener("load",y,{once:!0}),a.addEventListener("visibilitychange",n),n(),Object.assign(e,{ready:()=>{p=!1,g("render"),n()},awaitContent:()=>{m||l==="render"||(o(),p=!0,g("render"))}})}function rt(a,t){if(!/^(0|[1-9]\d*)(\.\d{1,12})?$/.test(a))throw new Me("INVALID_RESPONSE","Invalid credit amount");let[s,d]=a.split("."),l=new Intl.NumberFormat(t),u=l.formatToParts(1.1).find(c=>c.type==="decimal")?.value??".",f=Array.from({length:10},(c,b)=>new Intl.NumberFormat(t,{useGrouping:!1}).format(b));return l.format(BigInt(s))+(d?u+d.replace(/\d/g,c=>f[Number(c)]):"")}var X=new WeakMap,G=new WeakMap,it=new WeakMap;function ot(a){let t=window.open("about:blank","_blank");if(!t)throw new Error("External URL window was blocked");try{t.opener=null;let s=t.document.createElement("a");s.href=a,s.target="_self",s.rel="noopener noreferrer",s.referrerPolicy="no-referrer",t.document.body.append(s),s.click()}catch(s){throw t.close(),s}}function st(){return typeof navigator>"u"?[]:[...navigator.languages??[],navigator.language].filter(Boolean)}function Je(a,t,s,d,l=document){let u=crypto.randomUUID(),f=crypto.randomUUID().replaceAll("-",""),c=l.createElement("iframe");c.title=t,c.setAttribute("sandbox","allow-scripts"),c.referrerPolicy="no-referrer";let b=l.defaultView,m=1;for(;b!==window&&m<16;)b=b.parent,m++;if(b!==window)throw new Error("Renderer container must belong to this host or a descendant window");let p={channel:u,parentOrigin:window.origin,hostDepth:m,mode:a,...a==="editor"?{editorMessages:s}:{}};if(d==="bundled"){if(a!=="live")throw new Error("Bundled renderer requires live mode");c.src="data:text/html;charset=utf-8,"+encodeURIComponent(K.html)+"#"+encodeURIComponent(JSON.stringify(p))}else if(d){if(a!=="live")throw new Error("Hosted Web Views only support live rendering");let n=new URL(d);if(n.username||n.password||n.search||n.hash||!/^\/web-view\/renderer\/[a-f0-9]{64}$/.test(n.pathname)||n.protocol!=="https:"&&!(n.protocol==="http:"&&["localhost","127.0.0.1","[::1]"].includes(n.hostname)))throw new Error("Invalid hosted renderer URL");n.hash=encodeURIComponent(JSON.stringify(p)),c.src=n.href}else c.srcdoc=Te(p,f);return{frame:c,post:n=>c.contentWindow?.postMessage({...n,channel:u},"*"),accept:n=>n.source===c.contentWindow&&n.origin==="null"&&n.data&&typeof n.data=="object"&&"channel"in n.data&&"type"in n.data&&typeof n.data.type=="string"&&n.data.channel===u?n.data:null}}function _t(a,t={}){return Ge(a,t,!1)}function Rt(a,t={}){return Ge(a,t,!0)}function Ge(a,t,s){let d=ie(a,window),l=fe(window),u=l.prepare(t.capabilities,d),f=de(d,[t.locale,...st()]),c=ce(d,f);if(c.presentation.type==="inline")throw new Error("Inline content requires an explicit host container.");if(s?G.has(document):X.has(document))throw new Error(s?"\u5DF2\u6709\u5F39\u7A97\u6B63\u5728\u51C6\u5907\uFF0C\u8BF7\u5148\u91CA\u653E\u3002":"\u5DF2\u6709\u5F39\u7A97\u6B63\u5728\u5C55\u793A\uFF0C\u8BF7\u5148\u5173\u95ED\u3002");if(!document.body||!["https:","http:"].includes(location.protocol))throw new Error("\u5F39\u7A97\u9700\u8981 HTTP(S) \u9875\u9762\u3002");let b,m=document.createElement("div");m.dataset.indianaPopup="";let p=m.attachShadow({mode:"open"}),o=document.createElement("style");o.textContent=":host{all:initial;position:fixed!important;inset:0!important;z-index:2147483647!important;font-family:system-ui,sans-serif;pointer-events:none} dialog{pointer-events:auto;box-sizing:border-box;max-width:calc(100vw - 32px);max-height:calc(100dvh - 32px);padding:0;border:0;border-radius:14px;background:white;box-shadow:0 24px 80px #0003;overflow:hidden}dialog::backdrop{background:#16142577}button{position:absolute;z-index:1;inset-inline-end:8px;top:8px;width:30px;height:30px;border:1px solid #e5e5eb;border-radius:50%;background:#fff;color:#383344;font-size:20px;line-height:1;cursor:pointer}button:focus-visible{outline:3px solid #635bdf}iframe{display:block;border:0;width:100%;height:100%}";let e=document.createElement("dialog");e.lang=f,e.dir=Se(f)?"rtl":"ltr",e.setAttribute("aria-label",c.name),e.dataset.presentation=c.presentation.type,e.style.width=c.presentation.type==="fullscreen"?"100vw":`${xe[c.presentation.size]}px`,c.presentation.type==="fullscreen"?e.style.cssText+=";max-width:100vw;max-height:100dvh;height:100dvh;margin:0;border-radius:0":c.presentation.type==="sheet"&&(e.style.cssText+=";margin:auto auto 0;max-width:100vw;max-height:100dvh;border-radius:14px 14px 0 0"),e.style.background=c.theme.background;let n=()=>{},g=Ne(e,c,()=>n()),y=s?Ve(e):()=>{},h=document.createElement("button");h.type="button",h.textContent="\xD7",h.setAttribute("aria-label",$e(f)),Pe(h,c.theme);let{frame:L,post:w,accept:M}=Je("live",c.name,void 0,t.rendererUrl);n=()=>{g.responsive&&(L.style.width=`${window.innerWidth}px`,L.style.marginInline=`calc((100% - ${window.innerWidth}px) / 2)`,L.style.height=`${window.innerHeight}px`)},n();let E=!1,I=!1,R=!1,k=!1,U,W,$=new Promise((N,v)=>{U=N,W=v});$.catch(()=>{});function D(){E||I||!R||!k||(y(),g.latch(),e.showModal(),De(e,g.type,g.responsive),I=!0,h.focus(),F({type:"shown"}))}let q=g.setContentHeight;function F(N){try{Promise.resolve(t.onEvent?.(N)).catch(v=>C(t.onError,v))}catch(v){C(t.onError,v)}}function z(){return E?!1:(E=!0,g.destroy(),l.destroy(),O(),k||W(new Error("Popup preparation cancelled")),window.removeEventListener("message",Z),e.close(),m.remove(),L.removeAttribute("srcdoc"),L.removeAttribute("src"),X.get(document)===P&&X.delete(document),G.get(document)===P&&G.delete(document),b?.(),!0)}function B(N){z()&&R&&F({type:"closed",reason:N})}function Z(N){let v=E?null:M(N);if(v){if(v.type==="ready")O.ready(),w({type:"render",doc:c,locale:f,capabilities:u});else if(v.type==="rendered"&&!k)k=!0,O(),q(v.height),v.label&&(e.setAttribute("aria-label",v.label),L.title=v.label),U(),D();else if(v.type==="resize"&&k)q(v.height);else if(v.type==="copy"&&I){let _=H(c,v.nodeId),T=ve(u,v.nodeId);_?.type==="coupon_code"&&T?.code&&navigator.clipboard?.writeText(T.code).catch(()=>{})}else if(v.type==="escape"&&I)B("escape");else if(v.type==="action"&&I&&typeof v.actionId=="string"){let _=c.actions.find(T=>T.id===v.actionId);if(!_)return;if(_.close&&z(),F({type:"action",actionId:_.id,...typeof v.nodeId=="string"&&H(c,v.nodeId)?{nodeId:v.nodeId}:{},name:_.event,properties:{..._.properties},...v.selection?{selection:ae(c,v.selection,u)}:{}}),_.type==="open_url")try{ot(_.url)}catch(T){C(t.onError,T)}_.close&&F({type:"closed",reason:"action"})}}}let O=be(document,N=>{let v=he(N);W(v),C(t.onError,v),B("timeout")},L),P={ready:$,show(){if(E)throw new Error("Popup has been destroyed");if(R)return P;if(X.has(document))throw new Error("\u5DF2\u6709\u5F39\u7A97\u6B63\u5728\u5C55\u793A\uFF0C\u8BF7\u5148\u5173\u95ED\u3002");return b=Re(document),R=!0,G.get(document)===P&&G.delete(document),X.set(document,P),D(),P},destroy:()=>B("destroy"),updateCapabilities:N=>{if(E)return;let v=l.prepare(N,c);JSON.stringify(u)!==JSON.stringify(v)&&(u=v,w({type:"capabilities",capabilities:v}))}};return it.set(P,N=>{E||w({type:"restore-action-focus",nodeId:N})}),h.addEventListener("click",()=>B("close_button")),e.addEventListener("cancel",N=>{N.preventDefault(),B("escape")}),e.append(h,L),p.append(o,e),window.addEventListener("message",Z),s&&G.set(document,P),document.body.append(m),s||P.show(),P}function Tt(a,t={}){let s=(()=>{let x=a.ownerDocument.defaultView;if(!x)throw new Error("Preview container has no browser window");return x})(),d=t.mode??"editor",l=fe(s),{frame:u,post:f,accept:c}=Je(d,t.title??"\u5F39\u7A97\u9884\u89C8",t.editorMessages,t.rendererUrl,a.ownerDocument),b=[],m=x=>f(x.type==="render"||x.type==="capabilities"?{...x,unavailableActions:b}:x);u.style.cssText="display:block;border:0;width:100%;height:0";let p=!1,o=!1,e=null,n=null,g=!1,y,h,L=_e(u,()=>h),w,M,E=new Promise((x,r)=>{w=x,M=r});E.catch(()=>{});let I=be(a.ownerDocument,x=>{if(g||o)return;let r=he(x);M(r),C(t.onError,r.message),R()},u);function R(){g||(g=!0,L(),h=void 0,l.destroy(),I(),y?.disconnect(),s.removeEventListener("resize",P),p||M(new Error("Web View mount cancelled")),window.removeEventListener("message",_),p=!1,e=null,n=null,k=null,$=void 0,q.clear(),u.remove(),u.removeAttribute("srcdoc"),u.removeAttribute("src"))}let k=null,U={},W,$,D={type:"modal",size:"md"},q=new Set,F=t.viewportHeight,z=t.viewportWidth,B=0,Z=()=>t.hostPresentation?.()??Le(D,z||a.getBoundingClientRect().width||a.clientWidth||s.innerWidth,s.matchMedia?.("(pointer: coarse)").matches===!0),O=x=>{B=x;let r=F,i=Z(),S=(D.type==="modal"||D.type==="sheet")&&(D.desktopWidth!==void 0||D.mobile!==void 0),A=r&&S?r:r?i==="fullscreen"?r:Math.max(1,Math.min(x,r-(i==="sheet"?0:32))):x;u.style.width=S&&z?`${z}px`:"100%",u.style.marginInline=S&&z?`calc((100% - ${z}px) / 2)`:"",u.style.height=`${A}px`,C(t.onResize,r&&S&&i!=="fullscreen"?Math.max(1,Math.min(x,r-(i==="sheet"?0:32))):A)};function P(){g||!k||(D.type==="modal"||D.type==="sheet")&&(D.mobile!==void 0||D.desktopWidth!==void 0)&&O(B)}s.addEventListener("resize",P);let N=s.ResizeObserver;if(N){let x;y=new N(()=>{let r=a.getBoundingClientRect().width||a.clientWidth;r!==x&&(x=r,P())}),y.observe(a)}function v(x){if(!$)return;let r=Ae.safeParse(x);if(!r.success||Object.keys(r.data).some(i=>!$.bindings.some(S=>S.variable===i))){C(t.onError,"Invalid current-screen answers");return}return r.data}function _(x){let r=g?null:c(x);if(r)if(r.type==="ready")p=!0,w(),e&&m(e),e?I.ready():I.awaitContent(),n&&m(n);else if(r.type==="rendered"||r.type==="resize")O(r.height),r.type==="rendered"&&(o=!0,I(),r.label&&(u.title=r.label),C(t.onRendered,r.label));else if(r.type==="layout"&&d==="editor")Array.isArray(r.nodes)&&r.nodes.length<=(k?J.nodes:0)&&r.nodes.every(i=>i&&typeof i.id=="string"&&/^[a-zA-Z][a-zA-Z0-9_-]{0,63}$/.test(i.id)&&[i.x,i.y,i.width,i.height].every(S=>typeof S=="number"&&Number.isFinite(S))&&i.width>0&&i.height>0)&&C(t.onLayout,r.nodes);else if(r.type==="page"&&d==="live"&&q.has(r.pageId))C(t.onPageChange,r.pageId);else if(r.type==="escape"&&d==="live")C(t.onEscape);else if(r.type==="hover")C(t.onHover,r.id);else if(r.type==="select")C(t.onSelect,r.id);else if(r.type==="edit")C(t.onEdit,r.id);else if(r.type==="key"&&d==="editor"){let i=r.key;i&&typeof i.key=="string"&&i.key.length<=16&&(i.phase==="down"||i.phase==="up")&&[i.meta,i.ctrl,i.shift,i.alt].every(S=>typeof S=="boolean")&&C(t.onKey,{key:i.key,phase:i.phase,meta:i.meta,ctrl:i.ctrl,shift:i.shift,alt:i.alt})}else if(r.type==="zoom"&&d==="editor"&&typeof r.delta=="number"&&Number.isFinite(r.delta))C(t.onZoom,r.delta);else if(r.type==="customer-data-intent"&&d==="live"&&k){let i=we.safeParse(r.intent);i.success&&H(k,i.data.nodeId)?.type==="customer_data"&&C(t.onCustomerDataIntent,i.data)}else if(r.type==="answers"&&d==="live"&&$){let i=v(r.answers);i&&C(t.onAnswers,i)}else if(r.type==="selection"&&k&&e?.type==="render"&&e.capabilities){let i=ae(k,r.selection,e.capabilities);U=i;let S=ne(k,W??e.capabilities,i,e.locale);m({type:"capabilities",capabilities:S}),C(t.onSelection,i)}else if(r.type==="action"&&k?.actions.some(i=>i.id===r.actionId)){let i=v(r.answers);if($&&!i)return;let S=k,A=r.nodeId?H(S,r.nodeId):void 0;h=d==="live"&&A?.type==="button"&&A.action===r.actionId?()=>{!g&&k===S&&m({type:"restore-action-focus",nodeId:A.id})}:void 0,C(t.onAction,r.actionId,ae(k,r.selection,e?.type==="render"?e.capabilities:void 0),i)}else r.type==="error"&&C(t.onError,r.message)}window.addEventListener("message",_),a.append(u);let T={ready:E,get document(){return k},updateCustomerData(x){if(g||!k)return;let r=se.parse(x),i={nodes:Object.fromEntries(Object.entries(r.nodes).filter(([S,A])=>{let Y=H(k,S);return Y?.type==="customer_data"&&Y.data.source===A.source}))};e?.type==="render"&&(e.customerData=i),p&&m({type:"customer-data",data:i})},updateCapabilities(x,r){if(g||!k)return;W=x;let i=l.prepare(ne(k,x,U,e?.type==="render"?e.locale:"en"),k);if(!i)return;let S=r===void 0?b:[...r];!(JSON.stringify(S)!==JSON.stringify(b))&&e?.type==="render"&&JSON.stringify(e.capabilities)===JSON.stringify(i)||(b=S,e?.type==="render"&&(e.capabilities=i,e.unavailableActions=b),p&&m({type:"capabilities",capabilities:i}))},update(x,r,i){if(g)return;let S;try{let A=ie(x,s),Y=d==="live"&&!!i?.serverInput,Q=Y?de(A,[r]):r,ee=Y?ce(A,Q):A,V=i?.serverInput?Ie.parse(i.serverInput):void 0;if(V&&(A.surface!=="paywall"&&A.pages.length!==1||A.actions.some(j=>j.type!=="event"&&j.type!=="navigate"||j.close)||V.bindings.some(j=>{let oe=H(A,j.componentId);return oe?.type!=="stack"||!oe.interaction||!["input","multiselect","select","tabs","toggle"].includes(oe.interaction.type)})))throw new Error("Current Funnel input requires one screen with bound interactive controls and output actions");let ye=Ce.parse(i?.parameters??{}),te=i?.customerData?se.parse(i.customerData):void 0;if(d==="live"&&!i?.reset&&e?.type==="render"&&(i?.capabilities!==void 0||e.capabilities===void 0&&JSON.stringify(e.unavailableActions??[])===JSON.stringify(i?.unavailableActions??[]))&&JSON.stringify([e.doc,e.locale,e.parameters,e.serverInput,e.selection])===JSON.stringify([ee,Q,ye,V,i?.selection])){i?.capabilities&&T.updateCapabilities(i.capabilities,i.unavailableActions??[]),JSON.stringify(e.customerData)!==JSON.stringify(te)&&(T.updateCustomerData(te??{nodes:{}}),e.customerData=te);return}k=ee,W=i?.capabilities,b=[...i?.unavailableActions??[]],U=i?.selection??{},$=V,D=A.presentation,q=new Set(A.pages.map(j=>j.id)),S={type:"render",doc:ee,unavailableActions:b,...V?{serverInput:V}:{},locale:Q,parameters:ye,capabilities:l.prepare(i?.capabilities?ne(ee,i.capabilities,i.selection??{},Q):void 0,A),...i?.selection?{selection:i.selection}:{},customerData:te},F&&(Z()==="fullscreen"||(D.type==="modal"||D.type==="sheet")&&(D.desktopWidth!==void 0||D.mobile!==void 0))&&O(F)}catch(A){C(t.onError,A instanceof Error?A.message:"\u5185\u5BB9\u4E0D\u6B63\u786E");return}e=S,p&&(m(S),I.ready())},resizeViewport(x,r){g||!Number.isFinite(x)||x<=0||(r!==void 0&&Number.isFinite(r)&&r>0&&(z=r),F=x,O(B))},highlight(x,r){g||(n={type:"highlight",hoverId:x,selectedId:r},p&&m(n))},destroy:R};return T}export{K as a,Ye as b,Qe as c,tt as d,ie as e,Ve as f,rt as g,_t as h,Rt as i,Tt as j};
|