@tinkerlandai/indiana-sdk 0.2.0 → 0.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/popup.js CHANGED
@@ -1,4 +1,4 @@
1
- import{a as Z}from"./chunk-6X42DWOM.js";import{a as gt}from"./chunk-EZFAY4ZL.js";import{Uf as ot,Xf as dt,Ze as it,cf as Oe,cg as Be,df as st,dg as Ue,ff as Fe,fg as me,gg as ct,hg as We,jf as ve,vi as lt,wi as pt,zi as ut}from"./chunk-YOH6DIUN.js";function ft(g){let m=new Intl.Locale(g);if(m.language==="zh")return m.maximize().script==="Hant"?"\u95DC\u9589\u5F48\u7A97":"\u5173\u95ED\u5F39\u7A97";let A={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 A[m.language]??A.en}import Lt from"dompurify";import{parse as Rt,generate as _t,walk as Dt}from"css-tree";function Tt(g,m,A,I){return{html:Te(g,A,I),css:qe(m)}}function qe(g){if(!g.trim())return"";if(/[\\<]/.test(g))throw new Error("CSS \u6682\u4E0D\u652F\u6301\u53CD\u659C\u6760\u8F6C\u4E49\u6216 HTML \u6807\u7B7E\u3002");let m=Rt(g,{onParseError:I=>{throw Object.assign(new Error("CSS \u683C\u5F0F\u4E0D\u6B63\u786E\u3002"),{offset:I.offset})}}),A=0;return Dt(m,I=>{if(++A>5e3)throw new Error("CSS \u8FC7\u4E8E\u590D\u6742\u3002");if(I.type==="Raw"||I.type==="Url"||I.type==="Atrule"&&!["media","supports","keyframes"].includes(I.name.toLowerCase())||I.type==="Function"&&["image-set","-webkit-image-set","image","src","paint"].includes(I.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")}),_t(m)}function Te(g,m,A,I){if(!g.trim())return"";let x=Fe(g);if(x.length)throw new Error(x[0]);let M=Lt(A),$=M.sanitize(g,{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"],ALLOWED_ATTR:["class","alt","src","width","height","title","type","disabled","data-grow-action","aria-label"],ALLOW_DATA_ATTR:!1,ALLOW_ARIA_ATTR:!1,ADD_URI_SAFE_ATTR:["data-grow-action"],ALLOWED_URI_REGEXP:/^https:\/\//i,RETURN_DOM:!0});if(!($ instanceof A.Element))throw new Error("\u65E0\u6CD5\u89E3\u6790 HTML\u3002");if(I){let k=new Set;for(let L of M.removed){let z="element"in L?L.element.nodeName.toLowerCase():void 0,B="attribute"in L?L.attribute?.name:void 0;if(!z&&!B)continue;let G=B?/<[^>]+>/g:new RegExp(`<\\s*${z}\\b[^>]*>`,"gi"),T=[...g.matchAll(G)].find(N=>!k.has(`${B??z}:${N.index}`)&&(!B||new RegExp(`\\b${B}\\s*=`,"i").test(N[0])));if(!T)continue;let P=T.index;k.add(`${B??z}:${P}`);let S=B==="style"?"\u5185\u8054\u6837\u5F0F\u4E0D\u4FDD\u7559\uFF0C\u8BF7\u5199\u5728 CSS \u4E2D\u3002":B?.startsWith("on")?"\u811A\u672C\u4E8B\u4EF6\u4E0D\u5141\u8BB8\uFF0C\u8BF7\u4F7F\u7528\u52A8\u4F5C\u6309\u94AE\u3002":B==="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";I.push({language:"html",from:P,to:P+T[0].length,severity:"warning",message:B?`\u5DF2\u79FB\u9664\u5C5E\u6027 ${B}\uFF1A${S}`:`\u5DF2\u79FB\u9664 <${z}>\uFF1A\u8FD9\u4E2A\u6807\u7B7E\u4E0D\u5728\u5141\u8BB8\u7684\u6392\u7248\u6807\u7B7E\u4E2D\u3002`})}}let _=Fe($.innerHTML);if(_.length)throw new Error(_[0]);if($.querySelectorAll("*").length>500)throw new Error("HTML \u6700\u591A\u652F\u6301 500 \u4E2A\u5143\u7D20\u3002");for(let k of $.querySelectorAll("[data-grow-action]")){let L=k.getAttribute("data-grow-action");if(k.tagName!=="BUTTON"||!m.includes(L))throw new Error(`\u81EA\u5B9A\u4E49 HTML \u91CC\u7684\u6309\u94AE ${L.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(!$.textContent?.trim()&&!$.querySelector("img"))throw new Error("\u81EA\u5B9A\u4E49 HTML \u6E05\u6D17\u540E\u6CA1\u6709\u53EF\u663E\u793A\u7684\u5185\u5BB9\u3002");return $.innerHTML}function Nt(g,m,A,I){let x=[],M="",$="";for(let _ of["html","css"])try{_==="html"?M=Te(g,A,I,x):$=qe(m)}catch(k){let L=_==="html"?g:m,z=_==="html"?/\{\{|data-grow-action/:/@import\b|url\s*\(|image-set\s*\(|[\\<]/i,B=k instanceof Error?k.message:"\u5185\u5BB9\u65E0\u6CD5\u89E3\u6790",G=_==="html"?B.match(/未知变量:(.+)/)?.[1]:void 0,T=G?L.indexOf(G):-1,P=typeof k=="object"&&k!==null&&"offset"in k&&typeof k.offset=="number"?k.offset:T>=0?L.lastIndexOf("{{",T):L.search(z);x.push({language:_,from:Math.max(0,P),to:Math.min(L.length,Math.max(0,P)+2),severity:"error",message:B})}return{html:M,css:$,diagnostics:x,valid:!x.some(_=>_.severity==="error")}}function Ae(g,m,A){if(!g)return;let I={},x=m.actions.map(M=>M.id);for(let[M,$]of Object.entries(g.nodes)){let _=k=>{if(k.html===void 0)return k;if(me(m,M)?.type!=="custom_html")throw new Error("HTML \u5546\u54C1\u6570\u636E\u53EA\u80FD\u7528\u4E8E\u81EA\u5B9A\u4E49 HTML \u7EC4\u4EF6");return{...k,html:Te(k.html,x,A)}};I[M]={...$,base:_($.base),...$.byPlan?{byPlan:Object.fromEntries(Object.entries($.byPlan).map(([k,L])=>[k,_(L)]))}:{}}}return{...g,nodes:I}}var mt=new WeakMap;function Ne(g,m){let A=dt.parse(g),I=JSON.stringify(A),x=mt.get(m);x||(x=new Map,mt.set(m,x));let M=Date.now();for(let[P,S]of x)S.expires<=M&&x.delete(P);let $=x.get(I);if($)return x.delete(I),x.set(I,$),JSON.parse($.json);let _=A.actions.map(P=>P.id),k=P=>{if(P.type==="stack")return{...P,children:P.children.map(k)};if(P.type!=="custom_html")return P;let S={};for(let[N,K]of Object.entries(P.html))S[N]=Te(K,_,m);return{...P,html:S,css:qe(P.css)}},L={...A,pages:A.pages.map(P=>({...P,root:k(P.root)}))},z=JSON.stringify(L),B=new TextEncoder,G=B.encode(z).length;if(G>ve.documentBytes)throw new Error(`\u754C\u9762\u5185\u5BB9\u8FC7\u5927\uFF08\u4E0A\u9650 ${ve.documentBytes/1e3} KB\uFF09\u3002`);let T=B.encode(I).length;if(T<=ve.documentBytes){x.set(I,{json:z,bytes:T+G,expires:M+6e4});let P=[...x.values()].reduce((S,N)=>S+N.bytes,0);for(;x.size>16||P>2*1024*1024;){let[S,N]=x.entries().next().value;x.delete(S),P-=N.bytes}}return L}function ht(g){function m(e){return e.type==="stack"&&e.interaction?.type==="select"&&e.interaction.purpose==="product"&&!!e.interaction.pickerId}function A(e){let a={};function t(n){if(m(n)){let i=a[n.interaction.pickerId]??={ids:[],defaultId:null};for(let r of n.children){let c=r.type==="stack"?r.bind?.plan:void 0;c&&!i.ids.includes(c)&&i.ids.push(c)}let s=n.children[n.interaction.defaultIndex];!i.defaultId&&s?.type==="stack"&&(i.defaultId=s.bind?.plan??null)}n.type==="stack"&&n.children.forEach(t)}return e.pages.forEach(n=>t(n.root)),a}function I(e,a,t){let n={};function i(d){if(d.hidden||d.type!=="stack")return;let p=d.children.filter(o=>!o.hidden),b=d.interaction;if(m(d)){let o=n[d.interaction.pickerId]??={ids:[],defaults:[],remembered:[]},h=t.pickers[d.interaction.pickerId]?.options??[];for(let w of p){let D=w.type==="stack"?w.bind?.plan:void 0;D&&h.includes(D)&&!o.ids.includes(D)&&o.ids.push(D),D&&w.id===a[d.id]&&o.remembered.push(D)}let y=d.children[d.interaction.defaultIndex];y?.type==="stack"&&!y.hidden&&y.bind?.plan&&o.defaults.push(y.bind.plan)}if(b?.type==="tabs"){let o=p.find(h=>h.id===a[d.id])??d.children[b.defaultIndex];o&&i(o)}else if(b?.type==="toggle"){let o=typeof a[d.id]=="boolean"?a[d.id]:b.defaultEnabled,h=d.children[o?0:1];h&&i(h)}else p.forEach(i)}let s=typeof a.__page=="string"?a.__page:e.initialPageId??e.pages[0]?.id,r=e.pages.find(d=>d.id===s);r&&i(r.root);let c={};for(let[d,p]of Object.entries(n)){let b=a[d],o=p.remembered[0]??(p.ids.includes(t.pickers[d]?.selected??"")?t.pickers[d]?.selected:p.defaults[0]);c[d]=typeof b=="string"?p.ids.includes(b)?b:"":o&&p.ids.includes(o)?o:""}for(let d of Object.keys(A(e)))c[d]??="";return c}let x=window;for(let e=0;e<g.hostDepth;e++)x=x.parent;let M=window,$={none:0,xs:4,sm:8,md:12,lg:20,xl:32},_={none:0,sm:4,md:8,lg:14,full:9999},k={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"},L={start:"flex-start",center:"center",end:"flex-end",stretch:"stretch"},z={start:"flex-start",center:"center",end:"flex-end",between:"space-between"},B={start:"start",center:"center",end:"end",between:"stretch"},G={start:"start",center:"center",end:"end",stretch:"stretch"},T={"1:1":"1 / 1","4:3":"4 / 3","16:9":"16 / 9","3:1":"3 / 1"},P=`
1
+ import{a as V}from"./chunk-6X42DWOM.js";import{a as St}from"./chunk-CRJJ4EA2.js";import{Af as We,Ag as xe,Bg as bt,Cg as Ve,Ef as De,gj as xt,hj as vt,kj as kt,ng as yt,qg as $e,sf as mt,wi as wt,xf as Be,xg as qe,yf as ht,yg as Je}from"./chunk-D37O6FAW.js";import"./chunk-MJG7X7LM.js";function Et(c){let p=new Intl.Locale(c);if(p.language==="zh")return p.maximize().script==="Hant"?"\u95DC\u9589\u5F48\u7A97":"\u5173\u95ED\u5F39\u7A97";let A={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 A[p.language]??A.en}import Jt from"dompurify";import{parse as Bt,generate as Wt,walk as qt}from"css-tree";function At(c){if(!c.trim())return"";if(/[\\<]/.test(c))throw new Error("CSS \u6682\u4E0D\u652F\u6301\u53CD\u659C\u6760\u8F6C\u4E49\u6216 HTML \u6807\u7B7E\u3002");let p=Bt(c,{onParseError:I=>{throw Object.assign(new Error("CSS \u683C\u5F0F\u4E0D\u6B63\u786E\u3002"),{offset:I.offset})}}),A=0;return qt(p,I=>{if(++A>5e3)throw new Error("CSS \u8FC7\u4E8E\u590D\u6742\u3002");if(I.type==="Raw"||I.type==="Url"||I.type==="Atrule"&&!["media","supports","keyframes"].includes(I.name.toLowerCase())||I.type==="Function"&&["image-set","-webkit-image-set","image","src","paint"].includes(I.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")}),Wt(p)}import{parse as Vt,walk as Kt}from"css-tree";function Zt(c,p,A,I){return{html:ze(c,A,I),css:Ke(p)}}function Ke(c){return At(c)}function ze(c,p,A,I){if(!c.trim())return"";let y=We(c);if(y.length)throw new Error(y[0]);let T=Jt(A),C=T.sanitize(c,{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"],ALLOWED_ATTR:["class","alt","src","width","height","title","type","disabled","data-grow-action","aria-label"],ALLOW_DATA_ATTR:!1,ALLOW_ARIA_ATTR:!1,ADD_URI_SAFE_ATTR:["data-grow-action"],ALLOWED_URI_REGEXP:/^https:\/\//i,RETURN_DOM:!0});if(!(C instanceof A.Element))throw new Error("\u65E0\u6CD5\u89E3\u6790 HTML\u3002");if(I){let b=new Set;for(let v of T.removed){let N="element"in v?v.element.nodeName.toLowerCase():void 0,H="attribute"in v?v.attribute?.name:void 0;if(!N&&!H)continue;let F=H?/<[^>]+>/g:new RegExp(`<\\s*${N}\\b[^>]*>`,"gi"),W=[...c.matchAll(F)].find($=>!b.has(`${H??N}:${$.index}`)&&(!H||new RegExp(`\\b${H}\\s*=`,"i").test($[0])));if(!W)continue;let x=W.index;b.add(`${H??N}:${x}`);let L=H==="style"?"\u5185\u8054\u6837\u5F0F\u4E0D\u4FDD\u7559\uFF0C\u8BF7\u5199\u5728 CSS \u4E2D\u3002":H?.startsWith("on")?"\u811A\u672C\u4E8B\u4EF6\u4E0D\u5141\u8BB8\uFF0C\u8BF7\u4F7F\u7528\u52A8\u4F5C\u6309\u94AE\u3002":H==="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";I.push({language:"html",from:x,to:x+W[0].length,severity:"warning",message:H?`\u5DF2\u79FB\u9664\u5C5E\u6027 ${H}\uFF1A${L}`:`\u5DF2\u79FB\u9664 <${N}>\uFF1A\u8FD9\u4E2A\u6807\u7B7E\u4E0D\u5728\u5141\u8BB8\u7684\u6392\u7248\u6807\u7B7E\u4E2D\u3002`})}}let P=We(C.innerHTML);if(P.length)throw new Error(P[0]);if(C.querySelectorAll("*").length>500)throw new Error("HTML \u6700\u591A\u652F\u6301 500 \u4E2A\u5143\u7D20\u3002");for(let b of C.querySelectorAll("[data-grow-action]")){let v=b.getAttribute("data-grow-action");if(b.tagName!=="BUTTON"||!p.includes(v))throw new Error(`\u81EA\u5B9A\u4E49 HTML \u91CC\u7684\u6309\u94AE ${v.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 C.innerHTML}var It=2e3,Lt=1e4,Dt=new WeakMap;function Nt(c,p,A){let I=A.document;if(!I)throw new Error("A content document is required");let y=Dt.get(A)??new Map;Dt.set(A,y);let T=(b,v)=>{let N=y.get(b);if(N!==void 0)return N;let H=v();y.set(b,H);let F=[...y.keys()].reduce((W,x)=>W+x.length,0);for(;y.size>64||F>256e3;){let W=y.keys().next().value;y.delete(W),F-=W.length}return H},C=b=>T(`html:${b}`,()=>{let v=I.createElement("div");return v.innerHTML=b,v.querySelectorAll("*").length}),P=b=>T(`css:${b}`,()=>{let v=0;return b.trim()&&Kt(Vt(b),()=>{v++}),v});for(let b of c.pages){let v=0,N=0,H=F=>{if(F.hidden||(F.type==="stack"&&F.children.forEach(H),F.type!=="custom_html"))return;let W=p?.nodes[F.id],x=[...Object.values(F.html),W?.base.html??"",...Object.values(W?.byPlan??{}).map(L=>L.html??"")];if(v+=Math.max(0,...x.map(C)),N+=P(F.css),v>It)throw new Error(`Page custom HTML exceeds ${It} elements`);if(N>Lt)throw new Error(`Page custom CSS exceeds ${Lt} syntax nodes`)};H(b.root)}}function Gt(c,p,A,I){let y=[],T="",C="";for(let P of["html","css"])try{P==="html"?T=ze(c,A,I,y):C=Ke(p)}catch(b){let v=P==="html"?c:p,N=P==="html"?/\{\{|data-grow-action/:/@import\b|url\s*\(|image-set\s*\(|[\\<]/i,H=b instanceof Error?b.message:"\u5185\u5BB9\u65E0\u6CD5\u89E3\u6790",F=P==="html"?H.match(/未知变量:(.+)/)?.[1]:void 0,W=F?v.indexOf(F):-1,x=typeof b=="object"&&b!==null&&"offset"in b&&typeof b.offset=="number"?b.offset:W>=0?v.lastIndexOf("{{",W):v.search(N);y.push({language:P,from:Math.max(0,x),to:Math.min(v.length,Math.max(0,x)+2),severity:"error",message:H})}return{html:T,css:C,diagnostics:y,valid:!y.some(P=>P.severity==="error")}}function Re(c,p,A){if(!c)return;let I={},y=p.actions.map(C=>C.id);for(let[C,P]of Object.entries(c.nodes)){let b=v=>{if(v.html===void 0)return v;if(xe(p,C)?.type!=="custom_html")throw new Error("HTML \u5546\u54C1\u6570\u636E\u53EA\u80FD\u7528\u4E8E\u81EA\u5B9A\u4E49 HTML \u7EC4\u4EF6");return{...v,html:ze(v.html,y,A)}};I[C]={...P,base:b(P.base),...P.byPlan?{byPlan:Object.fromEntries(Object.entries(P.byPlan).map(([v,N])=>[v,b(N)]))}:{}}}let T={...c,nodes:I};return Nt(p,T,A),T}var Rt=new WeakMap;function Ne(c,p){let A=$e.parse(c),I=JSON.stringify(A),y=Rt.get(p);y||(y=new Map,Rt.set(p,y));let T=Date.now();for(let[x,L]of y)L.expires<=T&&y.delete(x);let C=y.get(I);if(C)return y.delete(I),y.set(I,C),JSON.parse(C.json);let P=A.actions.map(x=>x.id),b=x=>{if(x.type==="stack")return{...x,children:x.children.map(b)};if(x.type!=="custom_html")return x;let L={};for(let[$,te]of Object.entries(x.html))L[$]=ze(te,P,p);return{...x,html:L,css:Ke(x.css)}},v={...A,pages:A.pages.map(x=>({...x,root:b(x.root)}))};Nt(v,void 0,p);let N=JSON.stringify(v),H=new TextEncoder,F=H.encode(N).length;if(F>De.documentBytes)throw new Error(`\u754C\u9762\u5185\u5BB9\u8FC7\u5927\uFF08\u4E0A\u9650 ${De.documentBytes/1e3} KB\uFF09\u3002`);let W=H.encode(I).length;if(W<=De.documentBytes){y.set(I,{json:N,bytes:W+F,expires:T+6e4});let x=[...y.values()].reduce((L,$)=>L+$.bytes,0);for(;y.size>16||x>2*1024*1024;){let[L,$]=y.entries().next().value;y.delete(L),x-=$.bytes}}return v}function Ze(c){function p(e){return e.type==="stack"&&e.interaction?.type==="select"&&e.interaction.purpose==="product"&&!!e.interaction.pickerId}function A(e){let a={};function t(r){if(p(r)){let i=a[r.interaction.pickerId]??={ids:[],defaultId:null};for(let n of r.children){let l=n.type==="stack"?n.bind?.plan:void 0;l&&!i.ids.includes(l)&&i.ids.push(l)}let s=r.children[r.interaction.defaultIndex];!i.defaultId&&s?.type==="stack"&&(i.defaultId=s.bind?.plan??null)}r.type==="stack"&&r.children.forEach(t)}return e.pages.forEach(r=>t(r.root)),a}function I(e,a,t){let r={};function i(d){if(d.hidden||d.type!=="stack")return;let u=d.children.filter(o=>!o.hidden),h=d.interaction;if(p(d)){let o=r[d.interaction.pickerId]??={ids:[],defaults:[],remembered:[]},f=t.pickers[d.interaction.pickerId]?.options??[];for(let w of u){let z=w.type==="stack"?w.bind?.plan:void 0;z&&f.includes(z)&&!o.ids.includes(z)&&o.ids.push(z),z&&w.id===a[d.id]&&o.remembered.push(z)}let m=d.children[d.interaction.defaultIndex];m?.type==="stack"&&!m.hidden&&m.bind?.plan&&o.defaults.push(m.bind.plan)}if(h?.type==="tabs"){let o=u.find(f=>f.id===a[d.id])??d.children[h.defaultIndex];o&&i(o)}else if(h?.type==="toggle"){let o=typeof a[d.id]=="boolean"?a[d.id]:h.defaultEnabled,f=d.children[o?0:1];f&&i(f)}else u.forEach(i)}let s=typeof a.__page=="string"?a.__page:e.initialPageId??e.pages[0]?.id,n=e.pages.find(d=>d.id===s);n&&i(n.root);let l={};for(let[d,u]of Object.entries(r)){let h=a[d],o=u.remembered[0]??(u.ids.includes(t.pickers[d]?.selected??"")?t.pickers[d]?.selected:u.defaults[0]);l[d]=typeof h=="string"?u.ids.includes(h)?h:"":o&&u.ids.includes(o)?o:""}for(let d of Object.keys(A(e)))l[d]??="";return l}let y=window;for(let e=0;e<c.hostDepth;e++)y=y.parent;let T=window,C={none:0,xs:4,sm:8,md:12,lg:20,xl:32},P={none:0,sm:4,md:8,lg:14,full:9999},b={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"},v={start:"flex-start",center:"center",end:"flex-end",stretch:"stretch"},N={start:"flex-start",center:"center",end:"flex-end",between:"space-between"},H={start:"start",center:"center",end:"end",between:"stretch"},F={start:"start",center:"center",end:"end",stretch:"stretch"},W={"1:1":"1 / 1","4:3":"4 / 3","16:9":"16 / 9","3:1":"3 / 1"},x=`
2
2
  *,*::before,*::after{box-sizing:border-box}
3
3
  html,body{margin:0;padding:0;background:transparent}
4
4
  body{font-family:var(--g-font);color:var(--g-text);-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility}
@@ -167,13 +167,24 @@ body{font-family:var(--g-font);color:var(--g-text);-webkit-font-smoothing:antial
167
167
  @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}}
168
168
  @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}}
169
169
  @media (prefers-reduced-motion:reduce){*,*::before,*::after{animation:none!important;transition:none!important}}
170
- `,S=null,N,K=new Set,F,te,oe=[],le={},ae=null,f=Object.create(null),l=Object.create(null),v=Object.create(null),H="",Y=!1,de=-1,be=!1,ke="",se=null,ie=null,pe=null,W=document.createElement("div");W.id="g-card";let Ie=document.createElement("div"),Se=document.createElement("div");Ie.className=Se.className="g-box",Se.dataset.kind="select",Ie.append(document.createElement("span")),Se.append(document.createElement("span"));function X(e){let a={...e,channel:g.channel};try{x.postMessage(a,g.parentOrigin)}catch{}}function Pe(e){let a=parseInt(e.slice(1),16);return[a>>16&255,a>>8&255,a&255]}function Le(e,a,t){let n=Pe(e),i=Pe(a),s=n.map((r,c)=>Math.round(r*t+i[c]*(1-t)));return`rgb(${s[0]},${s[1]},${s[2]})`}function wt(e){let[a,t,n]=Pe(e).map(i=>{let s=i/255;return s<=.03928?s/12.92:((s+.055)/1.055)**2.4});return .2126*a+.7152*t+.0722*n}function we(e){return typeof e!="string"?"":e.startsWith("#")?e:`var(--g-${e==="background"?"bg":e})`}function xt(e){let a=e.theme,t=document.documentElement.style,n=wt(a.primary),i=(n+.05)/.05>1.05/(n+.05)?"#111318":"#FFFFFF";t.setProperty("--g-primary",a.primary),t.setProperty("--g-on-primary",i),t.setProperty("--g-bg",a.background),t.setProperty("--g-text",a.text),t.setProperty("--g-muted",Le(a.text,a.background,.62)),t.setProperty("--g-surface",Le(a.text,a.background,.05)),t.setProperty("--g-border",Le(a.text,a.background,.16)),t.setProperty("--g-focus",Le(a.primary,a.background,.45)),t.setProperty("--g-radius",`${_[a.radius]??8}px`),t.setProperty("--g-font",k[a.font]??k.system),t.setProperty("--g-edit","#2C3C96")}function U(e){let a=S?.strings.locales[H]?.[e];return a&&a.trim()?{value:a,missing:!1}:{value:S?.strings.locales[S.strings.defaultLocale]?.[e]??"",missing:!0}}function he(e){let a=F?.nodes[e];if(!a)return;let t=a.picker?f[a.picker]??F?.pickers[a.picker]?.selected:void 0;if(!(a.picker&&t===""))return typeof t=="string"?a.byPlan?.[t]??a.base:a.base}function Je(){return{...S?.surface==="paywall"&&ae?{__page:ae}:{},...Object.fromEntries(Object.entries(f).filter(e=>!Array.isArray(e[1])))}}function Ce(e,a,t){let n=he(e.id),i=n?.[a],s=i!==void 0?{value:i,missing:!!n?.missing?.length}:U(t);if(g.mode==="live"&&N){let r=!1,c=s.value.replace(/\{\{\s*(input|params)\.([a-zA-Z][a-zA-Z0-9_.-]{0,63})\s*\}\}/g,(d,p,b)=>{let o=p==="params"?le[b]:N?.answers[b];return o==null||o===""||Array.isArray(o)&&!o.length?(r=!0,""):Array.isArray(o)?o.join(", "):String(o)});if(r)return{value:e.fallback?U(e.fallback).value:"",missing:!0};if(!c.includes("{{"))return{value:c,missing:s.missing}}return i!==void 0?s:s.value.includes("{{")&&g.mode==="live"?{value:e.fallback?U(e.fallback).value:"",missing:!0}:{value:s.value,missing:s.missing||s.value.includes("{{")}}function vt(e){if(e.name)return e.name;let a=g.editorMessages?.nodeTypes?.[e.type];return g.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 kt(e,a){if(a.type==="color")e.background="none",e.backgroundColor=we(a.color);else if(a.type==="linear"){let t=a.stops.map(n=>`${we(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,i=>i.length===1&&i.charCodeAt(0)<128?`%${i.charCodeAt(0).toString(16).toUpperCase().padStart(2,"0")}`:encodeURIComponent(i));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 Ze(e){return`${Number(e.top)}px ${Number(e.right)}px ${Number(e.bottom)}px ${Number(e.left)}px`}function Ye(e,a,t,n,i){if(a===void 0)return;let s=n?.direction??"vertical",r=s!=="overlay"&&t==="width"==(s==="horizontal"),c=t==="width"?"minWidth":"minHeight";a==="fill"?s==="overlay"?(e.style[t]="100%",e.style[t==="width"?"justifySelf":"alignSelf"]="stretch"):r?(e.style.flex="1 1 0",e.style[c]="0"):(e.style.alignSelf="stretch",e.style[t]="auto"):a==="fit"?(e.style[t]="fit-content",t==="width"&&(e.style.maxWidth="100%"),!r&&s!=="overlay"&&(!n||n.align==="stretch")&&(e.style.alignSelf=i==="center"?"center":i==="end"?"flex-end":"flex-start")):typeof a=="number"&&(e.style[t]=`${a}px`,t==="width"&&(e.style.maxWidth="100%"),r&&(e.style.flex="0 0 auto"))}function xe(e,a,t){let n=a.style,i=n.text??{},s=e.style;if(a.type==="customer_data"&&(i.font&&s.setProperty("--g-data-display-font",k[String(i.font)]??k.system),a.data.source==="membership"&&(typeof i.size=="number"&&s.setProperty("--g-data-display-size",`clamp(${Math.min(i.size,28)}px, ${i.size/12}vw, ${i.size}px)`),typeof i.weight=="number"&&s.setProperty("--g-data-display-weight",String(i.weight)))),a.type==="customer_data"&&a.data.source==="credit_balance"&&(typeof i.size=="number"&&s.setProperty("--g-data-number-size",`clamp(${Math.min(i.size,48)}px, ${i.size/10}vw, ${i.size}px)`),i.font&&s.setProperty("--g-data-number-font",k[String(i.font)]??k.system),typeof i.weight=="number"&&s.setProperty("--g-data-number-weight",String(i.weight))),a.type==="customer_data"&&i.color){let p=we(i.color);s.setProperty("--g-data-ink",p),s.setProperty("--g-data-muted",`color-mix(in srgb, ${p} 72%, transparent)`),s.setProperty("--g-data-line",`color-mix(in srgb, ${p} 20%, transparent)`),s.setProperty("--g-data-surface",`color-mix(in srgb, ${p} 8%, transparent)`)}n.padding&&(s.padding=Ze(n.padding)),n.margin&&(s.margin=Ze(n.margin)),typeof n.gap=="number"&&a.type==="stack"&&(s.gap=`${n.gap}px`),n.background&&kt(s,n.background),typeof n.opacity=="number"&&(s.opacity=String(n.opacity));let r=n.shape;if(r?.type==="pill")s.borderRadius="9999px";else if(r?.type==="rect"){let p=r.radius;s.borderRadius=typeof p=="number"?`${p}px`:`${Number(p.topLeft)}px ${Number(p.topRight)}px ${Number(p.bottomRight)}px ${Number(p.bottomLeft)}px`}(n.clipContent===!0||n.clipContent!==!1&&r&&(n.background||a.type==="image"))&&(s.overflow="hidden");let c=n.border;c&&(s.border=Number(c.width)>0?`${Number(c.width)}px ${c.style==="dashed"?"dashed":"solid"} ${we(c.color)}`:"0");let d=n.shadow;d&&(s.boxShadow=`${Number(d.x)}px ${Number(d.y)}px ${Number(d.blur)}px ${Number(d.spread)}px ${we(d.color)}`),["text","button","price","coupon_code","countdown","plan_picker"].includes(a.type)&&(i.font&&(s.fontFamily=k[String(i.font)]??""),typeof i.size=="number"&&(s.fontSize=`${i.size}px`),typeof i.weight=="number"&&(s.fontWeight=String(i.weight)),typeof i.lineHeight=="number"&&(s.lineHeight=String(i.lineHeight)),typeof i.letterSpacing=="number"&&(s.letterSpacing=`${i.letterSpacing}px`),i.color&&(s.color=we(i.color)),i.align&&(s.textAlign=String(i.align)),i.italic&&(s.fontStyle="italic"),i.decoration&&(s.textDecoration=String(i.decoration)),i.transform&&(s.textTransform=String(i.transform))),Ye(e,n.width,"width",t,i.align),Ye(e,n.height,"height",t,i.align),t?.direction==="horizontal"&&n.grow!==void 0&&(s.flexGrow=String(n.grow===!0?1:n.grow===!1?0:n.grow))}function Re(e,a){if(N){let t=N.bindings.find(n=>n.componentId===e);if(!t)return;N.answers[t.key]=a,K.add(e),X({type:"answers",answers:Ge()});return}}function Ge(){let e={};for(let a of N?.bindings??[]){let t=f[a.componentId];t!==void 0&&(e[a.key]=t)}return e}function St(e){let a=document.createElement("section");a.className="g-data",a.dataset.layout=e.data.layout,a.dataset.source=e.data.source;let t=te?.nodes[e.id];a.dataset.status=t?.status??"idle",a.dataset.preview=String(!!t?.preview);let n=t?.status==="loading",i=H.startsWith("zh"),s=(u,E)=>i?u:E;a.setAttribute("aria-busy",String(!!n));let r=(u,E,q)=>{let R=document.createElement(u);return R.className=E,q!==void 0&&(R.textContent=q),R},c=u=>{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 q={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 R of q[u]){let O=document.createElementNS("http://www.w3.org/2000/svg","path");O.setAttribute("d",R),E.append(O)}return E},d=(u,E,q,R=!1,O=E)=>{let Q=r("button","g-data-button",u);return Q.type="button",Q.disabled=R||!!n&&E!=="refresh"||!!t?.preview||g.mode!=="live",n&&E==="refresh"&&Q.setAttribute("aria-disabled","true"),Q.dataset.gDataFocus=`${e.id}:${O}:${q??""}`,Q.addEventListener("click",ne=>{!ne.isTrusted||Q.disabled||n||X({type:"customer-data-intent",intent:{nodeId:e.id,action:E,...q?{value:q}:{}}})}),Q},p=r("div","g-data-header"),b=r("h2","g-data-heading",U(e.title).value);b.id=`g-data-title-${e.id}`,a.setAttribute("aria-labelledby",b.id);let o=r("div","g-data-controls"),h=[],y=u=>{u.hidden||(u.type==="customer_data"&&h.push(u),u.type==="stack"&&u.children.forEach(y))},w=S?.pages[0];w&&y(w.root);let D=h.every(u=>te?.nodes[u.id]?.preview),j=h.find(u=>u.data.source==="credit_balance")??h[0];t?.preview&&(!D||j?.id===e.id)&&o.append(r("span","g-data-preview",s("\u793A\u4F8B\u6570\u636E","Sample data")));let C=n?s("\u66F4\u65B0\u4E2D\u2026","Updating\u2026"):s("\u5237\u65B0","Refresh"),J=d(C,"refresh");if(J.replaceChildren(c("refresh")),J.setAttribute("aria-label",C),J.title=C,J.classList.add("g-data-refresh"),n&&J.classList.add("g-data-refreshing"),o.append(J),e.data.source==="billing"&&e.data.outputs?.billing_portal&&o.append(d(t?.billingBusy?s("\u6B63\u5728\u51C6\u5907\u2026","Preparing\u2026"):s("\u7BA1\u7406\u652F\u4ED8\u65B9\u5F0F","Manage payment method"),"billing_portal",void 0,!!t?.billingBusy||t?.status!=="ready")),e.data.source==="credit_balance"&&(b.prepend(c("credit")),t?.resources.length===1&&b.append(r("span","g-data-resource-label",t.resources[0].name)),t?.updatedAt)){let u=r("time","g-data-updated",`${s("\u66F4\u65B0\u4E8E","Updated")} ${new Intl.DateTimeFormat(H,{timeStyle:"short"}).format(new Date(t.updatedAt))}`);u.dateTime=t.updatedAt,u.title=new Intl.DateTimeFormat(H,{dateStyle:"medium",timeStyle:"short"}).format(new Date(t.updatedAt)),o.prepend(u)}if(p.append(b,o),a.append(p),!t||t.source!==e.data.source)return a.append(r("p","g-data-empty",s("\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 u=r("div","g-data-error",t.errorMessage);u.setAttribute("role","alert"),a.append(u);let E=r("div","g-data-recovery");E.append(d(s("\u91CD\u8BD5","Retry"),"refresh")),a.append(E)}if(t.membershipResult){let u=r("p","g-data-note",t.membershipResult);u.setAttribute("role","status"),a.append(u)}if(t.membershipReview){let u=t.membershipReview,E=r("section","g-data-resource");E.dataset.gDataReview="",E.setAttribute("aria-label",u.title),E.setAttribute("aria-busy",String(!!t.membershipBusy));let q=r("h3","g-data-row-label",u.title);q.tabIndex=-1,E.append(q);let R=r("dl","g-data-facts");for(let Q of u.facts){let ne=r("div","");ne.append(r("dt","",Q.label),r("dd","",Q.value)),R.append(ne)}E.append(R,r("p","g-data-note",u.note));let O=r("div","g-data-controls");O.append(d(s("\u8FD4\u56DE","Back"),"membership_dismiss",void 0,!!t.membershipBusy),d(t.membershipBusy?s("\u6B63\u5728\u5904\u7406\u2026","Processing\u2026"):s("\u786E\u8BA4","Confirm"),"membership_confirm",void 0,!!t.membershipBusy)),E.append(O),a.append(E)}if(t.stale&&(t.resources.length||t.rows.length)&&a.append(r("p",n?"g-data-live-status":"g-data-note",n?s("\u6B63\u5728\u66F4\u65B0\u8D26\u6237\u6570\u636E\u3002","Updating account data."):s("\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 u=r("div","g-data-skeleton");if(u.setAttribute("aria-hidden","true"),e.data.source==="credit_balance")u.append(r("span","g-data-skeleton-line g-data-skeleton-value"),r("span","g-data-skeleton-line g-data-skeleton-meta"));else{let q=Math.min(e.data.pageSize,e.data.layout==="compact"?2:4);for(let R=0;R<q;R++){let O=r("div","g-data-skeleton-row");O.append(r("span","g-data-skeleton-line"),r("span","g-data-skeleton-line")),u.append(O)}}let E=r("p","g-data-live-status",s("\u6B63\u5728\u8BFB\u53D6\u8D26\u6237\u6570\u636E\u2026","Loading account data\u2026"));return E.setAttribute("role","status"),a.append(u,E),a}let ee={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","\u53EF\u7528","Available"],["redeemed","\u5DF2\u4F7F\u7528","Redeemed"],["expired","\u5DF2\u5230\u671F","Expired"],["revoked","\u5DF2\u64A4\u9500","Revoked"]]};if(ee[e.data.source]){let u=r("select","g-data-select");u.setAttribute("aria-label",s("\u7B5B\u9009\u8BB0\u5F55","Filter records")),u.dataset.gDataFocus=`${e.id}:filter`,u.disabled=!!n||t.preview||g.mode!=="live";for(let[E,q,R]of ee[e.data.source]){let O=document.createElement("option");O.value=E,O.textContent=s(q,R),u.append(O)}u.value=t.filter,u.addEventListener("change",()=>{!u.disabled&&g.mode==="live"&&X({type:"customer-data-intent",intent:{nodeId:e.id,action:"filter",value:u.value}})}),o.prepend(u)}let at=(u,E=!1)=>{let q=r("ul","g-data-list");if(e.data.source==="credit_transactions"&&u.length&&!E){let R=r("div","g-data-table-head");R.setAttribute("aria-hidden","true"),R.append(r("span","",s("\u8BB0\u5F55","Record")),r("span","",s("\u7C7B\u578B","Type")),r("span","",s("\u79EF\u5206","Credits"))),a.append(R)}for(let R of u){let O=r("li","g-data-row"),Q=r("div","g-data-row-main"),ne=r("div","g-data-row-copy");ne.append(r("p","g-data-row-label",R.label));for(let V of R.detail)V!==R.status&&ne.append(r("div","g-data-row-detail",V));if(e.data.source==="credit_transactions"&&!E){let V=r("span","g-data-row-mark");V.append(c(["Refund","\u9000\u56DE"].includes(R.status??"")?"up":"down")),Q.append(V)}if(Q.append(ne),O.append(Q),R.status?O.append(r("div","g-data-row-status",R.status)):O.classList.add("g-data-row-no-status"),R.value?O.append(r("div","g-data-row-value",R.value)):O.classList.add("g-data-row-no-value"),R.facts.length||R.purchaseId||R.membershipActions?.length||R.billingActions?.length){let V=r("div","g-data-row-extra"),ce=r("div","g-data-facts"),fe=(re,De)=>{for(let rt of re){let nt=r("span","",rt.label);nt.append(r("strong","",rt.value)),De.append(nt)}};if(fe(R.facts.slice(0,3),ce),R.facts.length>3){let re=r("details","g-data-sources");re.dataset.gDataSources=`facts:${R.id}`,re.append(r("summary","",`${e.data.source==="billing"?s("\u8D26\u5355\u8BE6\u60C5","Invoice details"):s("\u5168\u90E8\u6263\u8D39\u660E\u7EC6","All allocations")} \xB7 ${R.facts.length}`));let De=r("div","g-data-facts");fe(R.facts.slice(3),De),re.append(De),ce.append(re)}if(V.append(ce),!E)for(let re of R.billingActions??[])V.append(d(re.label,re.action,R.id,!!t.billingBusy));if(R.purchaseId&&e.data.allowPurchase&&!E){let re=d(t.buyingId===R.purchaseId?s("\u6B63\u5728\u51C6\u5907\u2026","Preparing\u2026"):s("\u8D2D\u4E70\u79EF\u5206","Buy credits"),"buy_pack",R.purchaseId,!!t.preview||!!t.buyingId);re.classList.add("g-data-buy"),V.append(re)}if(e.data.allowPurchase&&!E)for(let re of R.membershipActions??[])V.append(d(re.label,"membership_preview",re.value,!!t.preview||!!t.membershipBusy||!!t.membershipReview));O.append(V)}q.append(O)}return q};for(let u of t.resources){let E=r("article","g-data-resource");E.setAttribute("aria-label",u.name),t.resources.length>1&&E.append(r("p","g-data-name",u.name));let q=r("div","g-data-balance"),R=new Intl.NumberFormat(H).formatToParts(1.1).find(V=>V.type==="decimal")?.value??".",O=u.spendable.lastIndexOf(R),Q=r("strong","g-data-number",O<0?u.spendable:u.spendable.slice(0,O));O>=0&&Q.append(r("span","g-data-fraction",u.spendable.slice(O))),q.append(Q,r("span","g-data-unit",s("\u53EF\u7528\u79EF\u5206","Spendable credits"))),E.append(q);let ne=r("div","g-data-facts");for(let[V,ce]of[[s("\u4F59\u989D","Balance"),u.available],[s("\u51BB\u7ED3","Reserved"),u.reserved]]){let fe=r("span","",V);fe.append(r("strong","",ce)),ne.append(fe)}if(u.expiry&&ne.append(r("span","g-data-expiry",`${s("\u6700\u8FD1\u5230\u671F","Next expiry")} \xB7 ${u.expiry}`)),E.append(ne),e.data.showSources&&u.sourceCount){let V=r("details","g-data-sources");if(V.dataset.gDataSources=u.key,V.append(r("summary","",`${s("\u79EF\u5206\u6765\u6E90","Credit sources")} \xB7 ${u.sourceCount}`),at(u.sources,!0)),V.querySelector("summary")?.append(c("chevron")),u.hasNextSources||u.hasPreviousSources){let ce=r("div","g-data-footer");ce.append(r("span","",`${s("\u7B2C","Page")} ${u.sourcePage}`));let fe=r("div","g-data-controls");fe.append(d(s("\u4E0A\u4E00\u9875","Previous"),"sources_previous",u.key,!u.hasPreviousSources),d(s("\u4E0B\u4E00\u9875","Next"),"sources_next",u.key,!u.hasNextSources)),ce.append(fe),V.append(ce)}E.append(V)}a.append(E)}if(t.rows.length&&a.append(at(t.rows)),e.data.source==="billing_controls"&&(e.data.outputs?.billing_authorization||e.data.outputs?.billing_adjustment)){let u=r("div","g-data-controls");e.data.outputs?.billing_authorization&&u.append(d(s("\u8BBE\u7F6E\u81EA\u52A8\u4ED8\u6B3E\u6388\u6743","Set up payment authorization"),"billing_authorization")),e.data.outputs?.billing_adjustment&&u.append(d(s("\u67E5\u770B\u5F85\u786E\u8BA4\u8865\u6B3E","Review pending adjustment"),"billing_adjustment")),a.append(u)}if(!t.rows.length&&!t.resources.length&&t.status!=="error"){let u=r("p","g-data-empty",n?s("\u6B63\u5728\u8BFB\u53D6\u8D26\u6237\u6570\u636E\u2026","Loading account data\u2026"):t.status==="idle"?s("\u767B\u5F55\u540E\u67E5\u770B\u4F60\u7684\u8D26\u6237\u6570\u636E\u3002","Sign in to view your account data."):t.filter!=="all"?s("\u6CA1\u6709\u7B26\u5408\u7B5B\u9009\u6761\u4EF6\u7684\u8BB0\u5F55\u3002","No records match this filter."):e.data.source==="credit_pack_orders"?s("\u6682\u65E0\u8D2D\u4E70\u8BB0\u5F55","No purchases yet"):e.data.source==="credit_balance"?s("\u6682\u65E0\u79EF\u5206\u6765\u6E90","No credit balances yet"):e.data.source==="membership"?s("\u6682\u65E0\u4F1A\u5458\u65B9\u6848","No memberships yet"):e.data.source==="customer_plans"?s("\u6682\u65E0\u53EF\u9009\u5957\u9910","No plans available"):e.data.source==="credit_packs"?s("\u6682\u65E0\u53EF\u8D2D\u4E70\u7684\u79EF\u5206\u5305","No credit packs available"):e.data.source==="billing_controls"?s("\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"?s("\u6682\u65E0\u4F18\u60E0\u8BB0\u5F55","No offers yet"):e.data.source==="billing"?s("\u6682\u65E0\u8D26\u5355","No invoices yet"):s("\u8FD9\u91CC\u8FD8\u6CA1\u6709\u8BB0\u5F55\u3002","There are no records yet."));u.prepend(c("empty")),u.setAttribute("role","status"),a.append(u)}if(t.hasNext||t.hasPrevious){let u=r("div","g-data-footer");u.append(r("span","",`${s("\u7B2C","Page")} ${t.page}`));let E=r("div","g-data-controls");E.append(d(s("\u4E0A\u4E00\u9875","Previous"),"previous",void 0,!t.hasPrevious),d(s("\u4E0B\u4E00\u9875","Next"),"next",void 0,!t.hasNext)),u.append(E),a.append(u)}return t.updatedAt&&e.data.source!=="credit_balance"&&a.append(r("p","g-data-note g-data-updated",`${s("\u6570\u636E\u66F4\u65B0\u4E8E","Updated")} ${new Intl.DateTimeFormat(H,{dateStyle:"medium",timeStyle:"short"}).format(new Date(t.updatedAt))}`)),a}let ye=new Map,Me=new Map,Ke=e=>{let a=e.target;for(let t of ye.keys())a&&!Ee(t)?.contains(a)&&ye.delete(t)};document.addEventListener("focusin",Ke),document.addEventListener("pointerdown",Ke);function Et(e){let a=te;if(te=e,!S)return;let t=(i,s)=>{if(i.type==="stack"){i.children.forEach(w=>t(w,i));return}if(i.type!=="customer_data"||JSON.stringify(a?.nodes[i.id])===JSON.stringify(e.nodes[i.id]))return;let r=Ee(i.id);if(!r)return;let c=document.activeElement;c&&r.contains(c)&&c.dataset.gDataFocus&&ye.set(i.id,c.dataset.gDataFocus);let d=new Set([...r.querySelectorAll("details[data-g-data-sources]")].filter(w=>w.open).map(w=>w.dataset.gDataSources)),p=$e(i,s);if(!p)return;for(let w of p.querySelectorAll("details[data-g-data-sources]"))w.open=d.has(w.dataset.gDataSources);let b=r.scrollTop;r.replaceWith(p),p.scrollTop=b;let o=!!e.nodes[i.id]?.membershipReview&&!a?.nodes[i.id]?.membershipReview,h=!e.nodes[i.id]?.membershipReview&&!!a?.nodes[i.id]?.membershipReview;o&&ye.get(i.id)&&Me.set(i.id,ye.get(i.id));let y=h?Me.get(i.id):ye.get(i.id);y&&[...p.querySelectorAll("[data-g-data-focus]")].find(w=>w.dataset.gDataFocus===y)?.focus({preventScroll:!0}),o&&p.querySelector("[data-g-data-review] h3")?.focus({preventScroll:!0}),h&&Me.delete(i.id),p.animate&&e.nodes[i.id]?.status==="ready"&&!window.matchMedia("(prefers-reduced-motion:reduce)").matches&&p.animate([{opacity:.7},{opacity:1}],{duration:140,easing:"ease-out"})},n=S.pages.find(i=>i.id===ae)??S.pages[0];t(n.root,null),ge()}function $e(e,a){if(e.hidden)return null;let t;if(e.type==="customer_data")t=St(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=G[e.align]??"stretch",t.style.justifyItems=B[e.justify]??"stretch"):(t.style.alignItems=L[e.align]??"stretch",t.style.justifyContent=z[e.justify]??"flex-start");for(let n of e.children){let i=$e(n,e);i&&t.append(i)}if(e.interaction&&At(t,e),e.purchaseAction&&g.mode==="live"){let n=F?.nodes[e.id],i=n?.picker;i&&(t.disabled=!F?.pickers[i]?.options.includes(String(f[i]??""))),he(e.id)?.unavailable&&(t.disabled=!0)}g.mode==="editor"&&!t.childElementCount&&(t.classList.add("g-empty"),t.dataset.gEditorPlaceholder=g.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 i=Ce(e,"text",e.text);t.textContent=i.value,i.missing&&g.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=Ce(e,"label",e.label);t.textContent=n.value,n.missing&&g.mode==="editor"&&t.classList.add("g-missing"),t.dataset.gAction=e.action;let i=F?.nodes[e.id]?.picker;if(i&&g.mode==="live"){let s=i,r=F?.pickers[s],c=f[s]??r?.selected;t.disabled=!r?.options.includes(String(c)),t.disabled&&t.setAttribute("aria-disabled","true")}g.mode==="live"&&he(e.id)?.unavailable&&(t.disabled=!0,t.setAttribute("aria-disabled","true")),g.mode==="editor"&&(t.tabIndex=-1)}else if(e.type==="image"){t=document.createElement("div"),t.className="g-img",T[e.aspect]&&(t.dataset.aspect=e.aspect,t.style.aspectRatio=T[e.aspect]);let n=document.createElement("img");n.src=e.localizedSrc?.[H]??e.localizedSrc?.[S.strings.defaultLocale]??e.src,n.alt=Ce(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",ge),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=he(e.id);if(!n?.price)t.textContent=n?.text??U(e.fallback).value,g.mode==="editor"&&t.classList.add("g-missing");else for(let i of["current","original","period"]){let s=n.price[i];if(!s)continue;let r=document.createElement(i==="original"?"s":"span");r.textContent=s,i==="original"&&(r.style.opacity=".6"),e.parts?.[i]&&xe(r,{type:"text",id:e.id,text:e.fallback,variant:"body",style:e.parts[i]},null),t.append(r)}}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=he(e.id);if(n?.code){let i=document.createElement("code");i.textContent=n.code;let s=document.createElement("button");s.type="button",s.className="g-btn g-btn-secondary",s.textContent=U(e.label).value,s.addEventListener("click",r=>{g.mode!=="editor"&&(r.stopPropagation(),X({type:"copy",nodeId:e.id}))}),t.append(i,s)}else t.textContent=n?.text??U(e.fallback).value,g.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=he(e.id),i=n?.countdownAt?Date.parse(n.countdownAt):NaN;!Number.isFinite(i)&&g.mode==="editor"&&t.classList.add("g-missing");let s=()=>{if(!Number.isFinite(i)){t.textContent=n?.text??U(e.fallback).value;return}let r=Math.max(0,Math.ceil((i-Date.now())/1e3));if(!r){t.textContent=U(e.expired).value;return}let c=e.granularity,d=c==="day"?86400:c==="hour"?3600:c==="minute"?60:1;c!=="second"?t.textContent=new Intl.NumberFormat(H,{style:"unit",unit:c,unitDisplay:"short"}).format(Math.ceil(r/d)):t.textContent=[Math.floor(r/86400),Math.floor(r/3600)%24,Math.floor(r/60)%60,r%60].map(p=>String(p).padStart(2,"0")).join(":")};s(),Number.isFinite(i)&&oe.push(setInterval(s,1e3))}else if(e.type==="plan_picker"){t=document.createElement("div"),t.setAttribute("role",e.grouping?"group":"radiogroup"),t.setAttribute("aria-label",U(e.label).value),t.style.cssText="display:flex;flex-direction:column;gap:8px";let n=F?.pickers[e.id],i=e.grouping;if(!n?.options.length)f[e.id]="",t.textContent=U(e.fallback).value,g.mode==="editor"&&t.classList.add("g-missing");else{let s=typeof f[e.id]=="string"?String(f[e.id]):n.selected,r=v[e.id];if(i){if(!r){let j=i.assignments.find(C=>C.productVersionId===s);r={period:j?.period??"month",tierId:j?.tierId??i.tiers[0].id},v[e.id]=r}let o=i.assignments.find(j=>j.tierId===r.tierId&&j.period===r.period);s=o&&n.options.includes(o.productVersionId)?o.productVersionId:"";let h=document.createElement("div");h.setAttribute("role","radiogroup"),h.setAttribute("aria-label",`${U(i.monthLabel).value} / ${U(i.yearLabel).value}`),h.style.cssText="display:flex;gap:4px;padding:4px;border:1px solid var(--g-border);border-radius:10px";let y=["month","year"],w=y.filter(j=>i.assignments.some(C=>C.period===j&&n.options.includes(C.productVersionId))),D=j=>{r.period=j;let C=i.assignments.find(J=>J.tierId===r.tierId&&J.period===j);f[e.id]=C&&n.options.includes(C.productVersionId)?C.productVersionId:"",ue(),Ee(e.id)?.querySelector(`[data-product-period="${j}"]`)?.focus()};for(let j of y){let C=document.createElement("button");C.type="button",C.className=`g-btn g-btn-${j===r.period?"primary":"secondary"}`,C.style.cssText="flex:1;min-width:0;min-height:40px",C.dataset.productPeriod=j,C.setAttribute("role","radio"),C.setAttribute("aria-checked",String(j===r.period)),C.textContent=U(j==="month"?i.monthLabel:i.yearLabel).value,C.disabled=!w.includes(j),C.tabIndex=g.mode==="editor"||C.disabled?-1:j===r.period||!w.includes(r.period)&&j===w[0]?0:-1,C.addEventListener("click",J=>{g.mode!=="editor"&&(J.stopPropagation(),D(j))}),C.addEventListener("keydown",J=>{if(g.mode==="editor"||!w.length)return;let ee;["ArrowRight","ArrowDown"].includes(J.key)?ee=(w.indexOf(j)+1)%w.length:["ArrowLeft","ArrowUp"].includes(J.key)?ee=(w.indexOf(j)-1+w.length)%w.length:J.key==="Home"?ee=0:J.key==="End"&&(ee=w.length-1),ee!==void 0&&(J.preventDefault(),D(w[ee]))}),h.append(C)}t.append(h)}f[e.id]=s??"";let c=i?i.tiers.map(o=>({tier:o,id:i.assignments.find(h=>h.tierId===o.id&&h.period===r.period)?.productVersionId})):n.options.map(o=>({id:o,tier:void 0})),d=c.filter(o=>o.id&&n.options.includes(o.id)),p=i?document.createElement("div"):t;i&&(p.setAttribute("role","radiogroup"),p.setAttribute("aria-label",U(e.label).value),p.style.cssText="display:flex;flex-direction:column;gap:8px",t.append(p));let b=o=>{!o.id||!n.options.includes(o.id)||(i&&o.tier&&(r.tierId=o.tier.id),f[e.id]=o.id,ue(),Ee(e.id)?.querySelector(`[data-plan-id="${o.id}"]`)?.focus())};for(let o of c){let h=o.id?F.plans[o.id]:void 0,y=!!h&&n.options.includes(o.id),w=document.createElement("button");w.type="button",w.className="g-btn g-btn-secondary",w.style.cssText="width:100%;text-align:start;min-height:44px",w.setAttribute("role","radio");let D=i?o.tier?.id===r.tierId:o.id===s;w.setAttribute("aria-checked",String(D)),w.disabled=!y,w.tabIndex=g.mode==="editor"||!y?-1:D||!s&&o===d[0]?0:-1,o.id&&(w.dataset.planId=o.id),o.tier&&(w.dataset.productTier=o.tier.id);let j=o.id?F.nodes[e.id]?.byPlan?.[o.id]?.price:void 0;w.textContent=y?`${o.tier?.name??h.name} \xB7 ${j?.current??h.price}${j?.period??h.period}`:`${o.tier?.name??""} \xB7 ${U(i?.unavailableLabel??e.fallback).value}`,D&&(w.style.borderColor="var(--g-primary)",w.style.boxShadow="inset 0 0 0 1px var(--g-primary)",e.states?.selected&&xe(w,{type:"text",id:e.id,text:e.label,variant:"body",style:e.states.selected},null)),w.addEventListener("click",C=>{g.mode==="editor"||!y||(C.stopPropagation(),b(o))}),w.addEventListener("keydown",C=>{if(g.mode==="editor"||!d.length)return;let J=d.indexOf(o),ee;["ArrowRight","ArrowDown"].includes(C.key)?ee=(J+1)%d.length:["ArrowLeft","ArrowUp"].includes(C.key)?ee=(J-1+d.length)%d.length:C.key==="Home"?ee=0:C.key==="End"&&(ee=d.length-1),ee!==void 0&&(C.preventDefault(),b(d[ee]))}),p.append(w)}if(i&&!s){let o=document.createElement("p");o.setAttribute("role","status"),o.textContent=U(i.unavailableLabel).value,t.append(o)}}}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=`${$[e.size]??0}px`;else if(e.type==="custom_html"){t=document.createElement("div"),t.className="g-custom";let n=t.attachShadow({mode:"open"}),i=e.html[H],s=i&&i.trim()?i:e.html[S?.strings.defaultLocale??""]??"",r=he(e.id);r?.html!==void 0?s=r.html:s.includes("{{")&&g.mode==="live"&&(s=U(e.fallback??"").value.replace(/[&<>"']/g,b=>({"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#39;"})[b])),(r?.missing?.length||!r&&s.includes("{{"))&&g.mode==="editor"&&t.classList.add("g-missing"),!(i&&i.trim())&&g.mode==="editor"&&t.classList.add("g-missing");let c=document.createElement("style");c.textContent=`:host{display:block}${e.css}`;let d=document.createElement("div");d.innerHTML=s,n.append(c,d);for(let p of d.querySelectorAll("img"))p.addEventListener("load",ge)}else return null;return e.style&&xe(t,e,a),t.dataset.gNode=e.id,t.dataset.gLabel=vt(e),t}function At(e,a){let t=a.interaction,n=[...e.children];e.setAttribute("aria-label",U(t.label).value);let i=N?.bindings.find(r=>r.componentId===a.id),s=i?{id:i.key,source:i.componentId,required:i.required}:void 0;if(s){let r=document.createElement("p");r.className="g-text g-body",r.textContent=U(t.label).value+(s.required?" *":""),e.prepend(r),s.required&&e.setAttribute("aria-required","true")}if(t.type==="input"){let r=document.createElement("input");r.type=t.keyboard,r.maxLength=t.maxLength,r.autocomplete="off",r.setAttribute("aria-label",U(t.label).value),r.setAttribute("aria-required",String(!!s?.required)),r.value=typeof f[a.id]=="string"?String(f[a.id]):"",r.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",r.disabled=g.mode!=="live",r.addEventListener("input",()=>{f[a.id]=r.value,Re(a.id,r.value)}),e.append(r);return}if(!(g.mode!=="live"||!n.length&&t.type!=="toggle")){if(t.type==="multiselect"){e.setAttribute("role","group"),e.dataset.gMin=String(t.min);let r=a.children.filter(p=>!p.hidden),c=new Set(Array.isArray(f[a.id])?f[a.id]:[]),d=()=>n.forEach((p,b)=>{let o=c.has(r[b].id);p.setAttribute("aria-checked",String(o)),p.setAttribute("aria-disabled",String(!o&&c.size>=t.max)),p.style.outline=o?"2px solid var(--g-primary)":"",p.style.outlineOffset="-2px"});n.forEach((p,b)=>{p.setAttribute("role","checkbox"),p.tabIndex=0,p.setAttribute("aria-label",p.textContent?.trim()||String(b+1)),p.style.cursor="pointer";let o=()=>{let h=r[b].id;if(c.has(h))c.delete(h);else if(c.size<t.max)c.add(h);else return;let y=r.filter(w=>c.has(w.id)).map(w=>w.id);f[a.id]=y,d(),Re(a.id,y)};p.addEventListener("click",h=>{h.stopPropagation(),o()}),p.addEventListener("keydown",h=>{[" ","Enter"].includes(h.key)&&(h.preventDefault(),h.stopPropagation(),o())})}),d();return}if(t.type==="select"){e.setAttribute("role","radiogroup");let r=a.children.filter(b=>!b.hidden),c=m(a)?a.interaction.pickerId:void 0,d=r.findIndex(b=>c?b.type==="stack"&&b.bind?.plan===f[c]:b.id===f[a.id]);!c&&d<0&&!s?.required&&(d=Math.min(t.defaultIndex,n.length-1));let p=(b,o=!1,h=!0)=>{if(c&&h&&b>=0){let y=r[b],w=y.type==="stack"?y.bind?.plan:void 0;if(!w||!F?.pickers[c]?.options.includes(w))return;f[a.id]=y.id,f[c]=w,ue(),o&&W.querySelector(`[data-g-node="${y.id}"]`)?.focus({preventScroll:!0});return}d=b,b>=0&&(f[a.id]=r[b].id),h&&b>=0&&Re(a.id,r[b].id),n.forEach((y,w)=>{y.setAttribute("aria-checked",String(w===b)),y.tabIndex=w===(b<0?0:b)?0:-1,y.style.cssText="";let D=r[w];D.type==="stack"&&(y.style.alignItems=L[D.align]??"stretch",y.style.justifyContent=z[D.justify]??"flex-start"),D.style&&xe(y,D,a),w===b&&(t.selectedStyle&&xe(y,{...D,style:t.selectedStyle},a),D.type==="stack"&&D.states?.selected&&xe(y,{...D,style:D.states.selected},a),!t.selectedStyle?.border&&!(D.type==="stack"&&D.states?.selected?.border)&&(y.style.outline="2px solid var(--g-primary)",y.style.outlineOffset="-2px")),y.style.cursor="pointer"}),o&&b>=0&&n[b].focus()};n.forEach((b,o)=>{if(b.setAttribute("role","radio"),c){let h=r[o],y=h.type==="stack"?h.bind?.plan:void 0;b.setAttribute("aria-disabled",String(!y||!F?.pickers[c]?.options.includes(y)))}b.setAttribute("aria-label",b.textContent?.trim()||String(o+1)),b.addEventListener("click",h=>{h.stopPropagation(),p(o)}),b.addEventListener("keydown",h=>{let y=h.key;if(!["ArrowRight","ArrowLeft","ArrowDown","ArrowUp","Home","End"," ","Enter"].includes(y))return;h.preventDefault(),h.stopPropagation();let w=d<0?o:d;p(y==="Home"?0:y==="End"?n.length-1:y==="ArrowRight"||y==="ArrowDown"?(w+1)%n.length:y==="ArrowLeft"||y==="ArrowUp"?(w+n.length-1)%n.length:o,!0)})}),p(d,!1,!1)}else if(t.type==="tabs"){let r=a.children.filter(o=>!o.hidden),c=document.createElement("div");c.setAttribute("role","tablist"),c.setAttribute("aria-label",U(t.label).value),c.style.cssText="display:flex;gap:4px;padding:4px;border:1px solid var(--g-border);border-radius:12px";let d=n.map((o,h)=>{let y=document.createElement("button");return y.type="button",y.setAttribute("role","tab"),y.textContent=ze(r[h])||String(h+1),y.style.cssText="flex:1;min-width:0;min-height:44px;padding:8px 16px;border:0;border-radius:8px;font:inherit;cursor:pointer",o.id=`g-${a.id}-${r[h].id}`,o.setAttribute("role","tabpanel"),y.setAttribute("aria-controls",o.id),c.append(y),y}),p=(o,h=!1,y=!1)=>{if(f[a.id]=r[o].id,y&&S&&Object.keys(A(S)).length){for(let w of Object.keys(A(S)))delete f[w];ue(),h&&W.querySelector(`[data-g-node="${a.id}"] [role="tab"][aria-selected="true"]`)?.focus({preventScroll:!0});return}n.forEach((w,D)=>{w.hidden=D!==o,d[D].setAttribute("aria-selected",String(D===o)),d[D].tabIndex=D===o?0:-1,d[D].style.background=D===o?"var(--g-primary)":"transparent",d[D].style.color=D===o?"var(--g-on-primary)":"var(--g-text)"}),h&&d[o].focus(),ge()};d.forEach((o,h)=>{o.addEventListener("click",y=>{y.stopPropagation(),p(h,!1,!0)}),o.addEventListener("keydown",y=>{["ArrowLeft","ArrowRight","Home","End"].includes(y.key)&&(y.preventDefault(),y.stopPropagation(),p(y.key==="Home"?0:y.key==="End"?n.length-1:(h+(y.key==="ArrowRight"?1:n.length-1))%n.length,!0,!0))})}),e.prepend(c);let b=r.findIndex(o=>o.id===f[a.id]);p(b>=0?b:Math.min(t.defaultIndex,n.length-1))}else if(t.type==="toggle"){let r=document.createElement("button");r.type="button",r.setAttribute("role","switch"),r.className="g-btn g-btn-secondary",r.style.cssText="display:flex;align-items:center;justify-content:space-between;gap:16px;color:var(--g-text)";let c=document.createElement("span");c.textContent=U(t.label).value;let d=document.createElement("span");d.setAttribute("aria-hidden","true"),d.style.cssText="position:relative;display:block;flex:none;width:44px;height:24px;border-radius:12px;background:var(--g-border)";let p=document.createElement("span");p.style.cssText="position:absolute;top:3px;left:3px;width:18px;height:18px;border-radius:50%;background:#fff;box-shadow:0 1px 3px #0003",d.append(p),r.append(c,d);let b=(o,h=!1)=>{if(f[a.id]=o,h&&S&&Object.keys(A(S)).length){for(let y of Object.keys(A(S)))delete f[y];ue(),W.querySelector(`[data-g-node="${a.id}"] [role="switch"]`)?.focus({preventScroll:!0});return}r.setAttribute("aria-checked",String(o)),d.style.background=o?"var(--g-primary)":"var(--g-border)",p.style.left=o?"23px":"3px",p.style.background=o?"var(--g-on-primary)":"#FFFFFF",n.forEach((y,w)=>y.hidden=w!==(o?0:1)),ge()};r.addEventListener("click",o=>{o.stopPropagation(),b(!f[a.id],!0),Re(a.id,!!f[a.id])}),e.prepend(r),b(typeof f[a.id]=="boolean"?f[a.id]:t.defaultEnabled)}else{e.setAttribute("role","region"),e.setAttribute("aria-roledescription","carousel");let r=document.createElement("div");r.style.cssText="display:flex;align-items:center;justify-content:center;gap:10px";let c=document.createElement("button"),d=document.createElement("button"),p=document.createElement("span"),b=H.startsWith("zh");c.textContent="\u2190",d.textContent="\u2192",c.setAttribute("aria-label",b?"\u4E0A\u4E00\u6761\u8BC4\u4EF7":"Previous review"),d.setAttribute("aria-label",b?"\u4E0B\u4E00\u6761\u8BC4\u4EF7":"Next review");for(let h of[c,d])h.type="button",h.className="g-btn g-btn-secondary",h.style.color="var(--g-text)";p.setAttribute("aria-live","polite");let o=h=>{l[a.id]=h,n.forEach((y,w)=>y.hidden=w!==h),p.textContent=`${h+1} / ${n.length}`,ge()};c.addEventListener("click",h=>{h.stopPropagation(),o((l[a.id]+n.length-1)%n.length)}),d.addEventListener("click",h=>{h.stopPropagation(),o((l[a.id]+1)%n.length)}),r.append(c,p,d),e.append(r),o(l[a.id]??0)}}}function ze(e){if(e.hidden)return"";if(e.type==="text"&&(e.variant==="title"||e.variant==="heading"))return U(e.text).value;if(e.type==="stack")for(let a of e.children){let t=ze(a);if(t)return t}return""}function ue(){if(oe.forEach(clearInterval),oe=[],!S)return;W.style.cssText="";let e=S.pages.find(s=>s.id===(ae??S.initialPageId))??S.pages[0];ae=e.id,F&&Object.assign(f,I({...S,pages:[e]},Je(),F));let a=s=>{if(s.type==="stack"&&s.children.forEach(a),s.type!=="plan_picker"||!s.grouping)return;let r=s.grouping,c=F?.pickers[s.id],d=v[s.id];if(!d){let b=r.assignments.find(o=>o.productVersionId===(f[s.id]??c?.selected));d={period:b?.period??"month",tierId:b?.tierId??r.tiers[0].id},v[s.id]=d}let p=r.assignments.find(b=>b.tierId===d.tierId&&b.period===d.period);f[s.id]=p&&c?.options.includes(p.productVersionId)?p.productVersionId:""};a(e.root),xt(e.theme?{...S,theme:e.theme}:S);let t=H.split("-")[0];document.documentElement.lang=H,document.documentElement.dir=["ar","he","fa","ur"].includes(t)?"rtl":"ltr",W.dataset.gPresentation=S.presentation.type;let n=$e(e.root,null);W.replaceChildren(...n?[n]:[]),W.dataset.gPage=e.id,g.mode==="live"&&X({type:"page",pageId:e.id}),je(),He();let i=Math.ceil(W.getBoundingClientRect().height);Y?ge():(Y=!0,de=i,X({type:"rendered",height:i,label:ze(e.root)||S.name}))}function ge(){let e=Math.ceil(W.getBoundingClientRect().height);e!==de&&(de=e,X({type:"resize",height:e})),je(),He()}function Xe(){be||(be=!0,window.requestAnimationFrame(()=>{be=!1,ge()}))}function He(){if(g.mode!=="editor")return;let e=[];for(let t of W.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!==ke&&(ke=a,X({type:"layout",nodes:e}))}function Ee(e){return!e||!/^[a-zA-Z][a-zA-Z0-9_-]*$/.test(e)?null:W.querySelector(`[data-g-node="${e}"]`)}function Qe(e,a){let t=Ee(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 je(){g.mode==="editor"&&(Qe(Se,ie),Qe(Ie,se&&se!==ie?se:null))}function _e(e){for(let a of e.composedPath()){if(a instanceof HTMLElement&&a.dataset.gNode)return a.dataset.gNode;if(a===W)break}return null}function It(e){if(e.isTrusted){if(g.mode==="editor"){e.preventDefault(),e.stopPropagation(),X({type:"select",id:_e(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&&!a.disabled){e.preventDefault();let n=S?.actions.find(i=>i.id===t);if(n?.type==="navigate"){if(ae=n.pageId,S)for(let i of Object.keys(A(S)))delete f[i];ue(),W.querySelector("h1,h2")?.focus({preventScroll:!0});return}X({type:"action",actionId:t,nodeId:_e(e)??void 0,...Object.keys(f).length?{selection:Je()}:{},...N?{answers:Ge()}:{}});return}if(a===W)return}}}function et(e){let a=e;if(!(!a||a.channel!==g.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");S=t,ae=null,H=String(a.locale),K=new Set,le=a.parameters??{},N=a.serverInput,f=Object.create(null),v=Object.create(null),F=a.capabilities,te=a.customerData,ye.clear();for(let[n,i]of Object.entries(F?.pickers??{}))i.selected&&(f[n]=i.selected);if(a.selection&&typeof a.selection=="object"&&!Array.isArray(a.selection)){let n=a.selection,i=r=>{let c=n[r.id];if(r.type==="plan_picker"&&typeof c=="string"&&r.planIds?.includes(c)&&(f[r.id]=c),r.type==="stack"){if(r.interaction?.type==="toggle"&&typeof c=="boolean"&&(f[r.id]=c),r.interaction&&["select","tabs"].includes(r.interaction.type)&&typeof c=="string"&&r.children.some(d=>d.id===c)&&(f[r.id]=c),m(r)){let d=n[r.interaction.pickerId];typeof d=="string"&&r.children.some(p=>p.type==="stack"&&p.bind?.plan===d)&&(f[r.interaction.pickerId]=d)}r.children.forEach(i)}};S.pages.forEach(r=>i(r.root));let s=n.__page;typeof s=="string"&&S.pages.some(r=>r.id===s)&&(ae=s)}for(let n of N?.bindings??[])Object.hasOwn(N.answers,n.key)&&(f[n.componentId]=N.answers[n.key],K.add(n.componentId));l=Object.create(null),H=String(a.locale),ue()}else if(a.type==="capabilities"){F=a.capabilities;for(let[t,n]of Object.entries(F.pickers))!v[t]&&f[t]===void 0&&(f[t]=n.selected??"");{let t=document.activeElement,n=t?.closest("[data-g-node]")?.dataset.gNode,i=t instanceof HTMLInputElement?{start:t.selectionStart,end:t.selectionEnd}:void 0,s=t?.getAttribute("role"),r=t?.getAttribute("data-plan-id");if(ue(),n){let c=W.querySelector(`[data-g-node="${n}"]`),d=s==="radio"&&r?c?.querySelector(`[data-plan-id="${r}"]`):c?.matches("button,[tabindex],a")?c:c?.querySelector("input,button,[tabindex],a");d?.focus({preventScroll:!0}),i&&d instanceof HTMLInputElement&&d.type==="text"&&d.setSelectionRange(i.start,i.end)}}}else a.type==="customer-data"?Et(a.data):a.type==="restore-action-focus"&&g.mode==="live"?[...W.querySelectorAll("button[data-g-node]")].find(t=>t.dataset.gNode===a.nodeId&&!t.disabled)?.focus({preventScroll:!0}):a.type==="highlight"&&g.mode==="editor"&&(se=a.hoverId??null,ie=a.selectedId??null,je())}catch(t){X({type:"error",message:t instanceof Error?t.message:"render failed"})}}let tt=document.createElement("style");tt.textContent=P,document.head.append(tt),document.body.append(W),g.mode==="editor"&&(document.body.dataset.gEditor="",document.body.append(Ie,Se),document.addEventListener("mouseover",e=>{let a=_e(e);a!==pe&&(pe=a,X({type:"hover",id:a}))}),document.documentElement.addEventListener("mouseleave",()=>{pe!==null&&(pe=null,X({type:"hover",id:null}))}),document.addEventListener("dblclick",e=>{let a=_e(e);a&&e.isTrusted&&X({type:"edit",id:a})}),document.addEventListener("click",e=>{W.contains(e.target)||X({type:"select",id:null})})),W.addEventListener("click",It),document.addEventListener("keydown",e=>{e.key==="Escape"&&e.isTrusted&&X({type:"escape"})}),typeof ResizeObserver=="function"&&new ResizeObserver(Xe).observe(W),window.addEventListener("resize",Xe),g.mode==="editor"&&window.addEventListener("scroll",He),window.addEventListener("message",e=>{e.source===x&&et(e.data)}),M.__indianaReceive=et,X({type:"ready"})}var Pt=`(${ht.toString()})(JSON.parse(document.getElementById("grow-renderer-boot").textContent))`;function yt(g,m){let A=JSON.stringify(g).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-${m}'; style-src 'unsafe-inline'; img-src https: data:; connect-src 'none'; font-src 'none'; media-src 'none'; frame-src 'none'; base-uri 'none'; form-action 'none'"></head><body><script type="application/json" id="grow-renderer-boot">${A}<\/script><script nonce="${m}">${Pt}<\/script></body></html>`}function Ct(){return`(() => {
170
+ `,L=null,$,te=new Set,j,ee,se=new Map,pe=new Map,le,X={},M=null,E=Object.create(null),ne=Object.create(null),ue=Object.create(null),R="",k=!1,S=-1,ae=!1,me="",Z=null,Ee=null,ve=null,q=document.createElement("div");q.id="g-card";let ge=document.createElement("div"),de=document.createElement("div");ge.className=de.className="g-box",de.dataset.kind="select",ge.append(document.createElement("span")),de.append(document.createElement("span"));function K(e){let a={...e,channel:c.channel};try{y.postMessage(a,c.parentOrigin)}catch{}}function He(e){let a=parseInt(e.slice(1),16);return[a>>16&255,a>>8&255,a&255]}function _e(e,a,t){let r=He(e),i=He(a),s=r.map((n,l)=>Math.round(n*t+i[l]*(1-t)));return`rgb(${s[0]},${s[1]},${s[2]})`}function Ct(e){let[a,t,r]=He(e).map(i=>{let s=i/255;return s<=.03928?s/12.92:((s+.055)/1.055)**2.4});return .2126*a+.7152*t+.0722*r}function Ae(e){return typeof e!="string"?"":e.startsWith("#")?e:`var(--g-${e==="background"?"bg":e})`}function Mt(e){let a=e.theme,t=document.documentElement.style,r=Ct(a.primary),i=(r+.05)/.05>1.05/(r+.05)?"#111318":"#FFFFFF";t.setProperty("--g-primary",a.primary),t.setProperty("--g-on-primary",i),t.setProperty("--g-bg",a.background),t.setProperty("--g-text",a.text),t.setProperty("--g-muted",_e(a.text,a.background,.62)),t.setProperty("--g-surface",_e(a.text,a.background,.05)),t.setProperty("--g-border",_e(a.text,a.background,.16)),t.setProperty("--g-focus",_e(a.primary,a.background,.45)),t.setProperty("--g-radius",`${P[a.radius]??8}px`),t.setProperty("--g-font",b[a.font]??b.system),t.setProperty("--g-edit","#2C3C96")}function J(e){let a=L?.strings.locales[R]?.[e];return a&&a.trim()?{value:a,missing:!1}:{value:L?.strings.locales[L.strings.defaultLocale]?.[e]??"",missing:!0}}function he(e){let a=j?.nodes[e];if(!a)return;let t=a.picker?E[a.picker]??j?.pickers[a.picker]?.selected:void 0;if(!(a.picker&&t===""))return typeof t=="string"?a.byPlan?.[t]??a.base:a.base}function Xe(){return{...L?.surface==="paywall"&&M?{__page:M}:{},...Object.fromEntries(Object.entries(E).filter(e=>!Array.isArray(e[1])))}}function Ie(e,a,t){let r=he(e.id),i=r?.[a],s=i!==void 0?{value:i,missing:!!r?.missing?.length}:J(t);if(c.mode==="live"&&$){let n=!1,l=s.value.replace(/\{\{\s*(input|params)\.([a-zA-Z][a-zA-Z0-9_.-]{0,63})\s*\}\}/g,(d,u,h)=>{let o=u==="params"?X[h]:$?.answers[h];return o==null||o===""||Array.isArray(o)&&!o.length?(n=!0,""):Array.isArray(o)?o.join(", "):String(o)});if(n)return{value:e.fallback?J(e.fallback).value:"",missing:!0};if(!l.includes("{{"))return{value:l,missing:s.missing}}return i!==void 0?s:s.value.includes("{{")&&c.mode==="live"?{value:e.fallback?J(e.fallback).value:"",missing:!0}:{value:s.value,missing:s.missing||s.value.includes("{{")}}function Tt(e){if(e.name)return e.name;let a=c.editorMessages?.nodeTypes?.[e.type];return c.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 $t(e,a){if(a.type==="color")e.background="none",e.backgroundColor=Ae(a.color);else if(a.type==="linear"){let t=a.stops.map(r=>`${Ae(r.color)} ${Number(r.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,i=>i.length===1&&i.charCodeAt(0)<128?`%${i.charCodeAt(0).toString(16).toUpperCase().padStart(2,"0")}`:encodeURIComponent(i));e.backgroundImage=`url("${t}")`;let r=a.position;e.backgroundPosition=r?`${r.x}% ${r.y}%`:"center",e.backgroundSize=a.fit==="contain"?"contain":"cover",e.backgroundRepeat="no-repeat"}}function Qe(e){return`${Number(e.top)}px ${Number(e.right)}px ${Number(e.bottom)}px ${Number(e.left)}px`}function et(e,a,t,r,i){if(a===void 0)return;let s=r?.direction??"vertical",n=s!=="overlay"&&t==="width"==(s==="horizontal"),l=t==="width"?"minWidth":"minHeight";a==="fill"?s==="overlay"?(e.style[t]="100%",e.style[t==="width"?"justifySelf":"alignSelf"]="stretch"):n?(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%"),!n&&s!=="overlay"&&(!r||r.align==="stretch")&&(e.style.alignSelf=i==="center"?"center":i==="end"?"flex-end":"flex-start")):typeof a=="number"&&(e.style[t]=`${a}px`,t==="width"&&(e.style.maxWidth="100%"),n&&(e.style.flex="0 0 auto"))}function Le(e,a,t){let r=a.style,i=r.text??{},s=e.style;if(a.type==="customer_data"&&(i.font&&s.setProperty("--g-data-display-font",b[String(i.font)]??b.system),a.data.source==="membership"&&(typeof i.size=="number"&&s.setProperty("--g-data-display-size",`clamp(${Math.min(i.size,28)}px, ${i.size/12}vw, ${i.size}px)`),typeof i.weight=="number"&&s.setProperty("--g-data-display-weight",String(i.weight)))),a.type==="customer_data"&&a.data.source==="credit_balance"&&(typeof i.size=="number"&&s.setProperty("--g-data-number-size",`clamp(${Math.min(i.size,48)}px, ${i.size/10}vw, ${i.size}px)`),i.font&&s.setProperty("--g-data-number-font",b[String(i.font)]??b.system),typeof i.weight=="number"&&s.setProperty("--g-data-number-weight",String(i.weight))),a.type==="customer_data"&&i.color){let u=Ae(i.color);s.setProperty("--g-data-ink",u),s.setProperty("--g-data-muted",`color-mix(in srgb, ${u} 72%, transparent)`),s.setProperty("--g-data-line",`color-mix(in srgb, ${u} 20%, transparent)`),s.setProperty("--g-data-surface",`color-mix(in srgb, ${u} 8%, transparent)`)}r.padding&&(s.padding=Qe(r.padding)),r.margin&&(s.margin=Qe(r.margin)),typeof r.gap=="number"&&a.type==="stack"&&(s.gap=`${r.gap}px`),r.background&&$t(s,r.background),typeof r.opacity=="number"&&(s.opacity=String(r.opacity));let n=r.shape;if(n?.type==="pill")s.borderRadius="9999px";else if(n?.type==="rect"){let u=n.radius;s.borderRadius=typeof u=="number"?`${u}px`:`${Number(u.topLeft)}px ${Number(u.topRight)}px ${Number(u.bottomRight)}px ${Number(u.bottomLeft)}px`}(r.clipContent===!0||r.clipContent!==!1&&n&&(r.background||a.type==="image"))&&(s.overflow="hidden");let l=r.border;l&&(s.border=Number(l.width)>0?`${Number(l.width)}px ${l.style==="dashed"?"dashed":"solid"} ${Ae(l.color)}`:"0");let d=r.shadow;d&&(s.boxShadow=`${Number(d.x)}px ${Number(d.y)}px ${Number(d.blur)}px ${Number(d.spread)}px ${Ae(d.color)}`),["text","button","price","coupon_code","countdown","plan_picker"].includes(a.type)&&(i.font&&(s.fontFamily=b[String(i.font)]??""),typeof i.size=="number"&&(s.fontSize=`${i.size}px`),typeof i.weight=="number"&&(s.fontWeight=String(i.weight)),typeof i.lineHeight=="number"&&(s.lineHeight=String(i.lineHeight)),typeof i.letterSpacing=="number"&&(s.letterSpacing=`${i.letterSpacing}px`),i.color&&(s.color=Ae(i.color)),i.align&&(s.textAlign=String(i.align)),i.italic&&(s.fontStyle="italic"),i.decoration&&(s.textDecoration=String(i.decoration)),i.transform&&(s.textTransform=String(i.transform))),et(e,r.width,"width",t,i.align),et(e,r.height,"height",t,i.align),t?.direction==="horizontal"&&r.grow!==void 0&&(s.flexGrow=String(r.grow===!0?1:r.grow===!1?0:r.grow))}function Pe(e,a){if($){let t=$.bindings.find(r=>r.componentId===e);if(!t)return;$.answers[t.key]=a,te.add(e),K({type:"answers",answers:tt()});return}}function tt(){let e={};for(let a of $?.bindings??[]){let t=E[a.componentId];t!==void 0&&(e[a.key]=t)}return e}function zt(e){let a=document.createElement("section");a.className="g-data",a.dataset.layout=e.data.layout,a.dataset.source=e.data.source;let t=ee?.nodes[e.id];a.dataset.status=t?.status??"idle",a.dataset.preview=String(!!t?.preview);let r=t?.status==="loading",i=R.startsWith("zh"),s=(g,D)=>i?g:D;a.setAttribute("aria-busy",String(!!r));let n=(g,D,G)=>{let _=document.createElement(g);return _.className=D,G!==void 0&&(_.textContent=G),_},l=g=>{let D=document.createElementNS("http://www.w3.org/2000/svg","svg");D.setAttribute("viewBox","0 0 24 24"),D.setAttribute("fill","none"),D.setAttribute("stroke","currentColor"),D.setAttribute("stroke-width","1.7"),D.setAttribute("stroke-linecap","round"),D.setAttribute("stroke-linejoin","round"),D.setAttribute("aria-hidden","true"),D.classList.add("g-data-icon");let G={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 _ of G[g]){let B=document.createElementNS("http://www.w3.org/2000/svg","path");B.setAttribute("d",_),D.append(B)}return D},d=(g,D,G,_=!1,B=D)=>{let re=n("button","g-data-button",g);return re.type="button",re.disabled=_||!!r&&D!=="refresh"||!!t?.preview||c.mode!=="live",r&&D==="refresh"&&re.setAttribute("aria-disabled","true"),re.dataset.gDataFocus=`${e.id}:${B}:${G??""}`,re.addEventListener("click",ce=>{!ce.isTrusted||re.disabled||r||K({type:"customer-data-intent",intent:{nodeId:e.id,action:D,...G?{value:G}:{}}})}),re},u=n("div","g-data-header"),h=n("h2","g-data-heading",J(e.title).value);h.id=`g-data-title-${e.id}`,a.setAttribute("aria-labelledby",h.id);let o=n("div","g-data-controls"),f=[],m=g=>{g.hidden||(g.type==="customer_data"&&f.push(g),g.type==="stack"&&g.children.forEach(m))},w=L?.pages[0];w&&m(w.root);let z=f.every(g=>ee?.nodes[g.id]?.preview),U=f.find(g=>g.data.source==="credit_balance")??f[0];t?.preview&&(!z||U?.id===e.id)&&o.append(n("span","g-data-preview",s("\u793A\u4F8B\u6570\u636E","Sample data")));let O=r?s("\u66F4\u65B0\u4E2D\u2026","Updating\u2026"):s("\u5237\u65B0","Refresh"),Q=d(O,"refresh");if(Q.replaceChildren(l("refresh")),Q.setAttribute("aria-label",O),Q.title=O,Q.classList.add("g-data-refresh"),r&&Q.classList.add("g-data-refreshing"),o.append(Q),e.data.source==="billing"&&e.data.outputs?.billing_portal&&o.append(d(t?.billingBusy?s("\u6B63\u5728\u51C6\u5907\u2026","Preparing\u2026"):s("\u7BA1\u7406\u652F\u4ED8\u65B9\u5F0F","Manage payment method"),"billing_portal",void 0,!!t?.billingBusy||t?.status!=="ready")),e.data.source==="credit_balance"&&(h.prepend(l("credit")),t?.resources.length===1&&h.append(n("span","g-data-resource-label",t.resources[0].name)),t?.updatedAt)){let g=n("time","g-data-updated",`${s("\u66F4\u65B0\u4E8E","Updated")} ${new Intl.DateTimeFormat(R,{timeStyle:"short"}).format(new Date(t.updatedAt))}`);g.dateTime=t.updatedAt,g.title=new Intl.DateTimeFormat(R,{dateStyle:"medium",timeStyle:"short"}).format(new Date(t.updatedAt)),o.prepend(g)}if(u.append(h,o),a.append(u),!t||t.source!==e.data.source)return a.append(n("p","g-data-empty",s("\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 g=n("div","g-data-error",t.errorMessage);g.setAttribute("role","alert"),a.append(g);let D=n("div","g-data-recovery");D.append(d(s("\u91CD\u8BD5","Retry"),"refresh")),a.append(D)}if(t.membershipResult){let g=n("p","g-data-note",t.membershipResult);g.setAttribute("role","status"),a.append(g)}if(t.membershipReview){let g=t.membershipReview,D=n("section","g-data-resource");D.dataset.gDataReview="",D.setAttribute("aria-label",g.title),D.setAttribute("aria-busy",String(!!t.membershipBusy));let G=n("h3","g-data-row-label",g.title);G.tabIndex=-1,D.append(G);let _=n("dl","g-data-facts");for(let re of g.facts){let ce=n("div","");ce.append(n("dt","",re.label),n("dd","",re.value)),_.append(ce)}D.append(_,n("p","g-data-note",g.note));let B=n("div","g-data-controls");B.append(d(s("\u8FD4\u56DE","Back"),"membership_dismiss",void 0,!!t.membershipBusy),d(t.membershipBusy?s("\u6B63\u5728\u5904\u7406\u2026","Processing\u2026"):s("\u786E\u8BA4","Confirm"),"membership_confirm",void 0,!!t.membershipBusy)),D.append(B),a.append(D)}if(t.stale&&(t.resources.length||t.rows.length)&&a.append(n("p",r?"g-data-live-status":"g-data-note",r?s("\u6B63\u5728\u66F4\u65B0\u8D26\u6237\u6570\u636E\u3002","Updating account data."):s("\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."))),r&&!t.resources.length&&!t.rows.length){let g=n("div","g-data-skeleton");if(g.setAttribute("aria-hidden","true"),e.data.source==="credit_balance")g.append(n("span","g-data-skeleton-line g-data-skeleton-value"),n("span","g-data-skeleton-line g-data-skeleton-meta"));else{let G=Math.min(e.data.pageSize,e.data.layout==="compact"?2:4);for(let _=0;_<G;_++){let B=n("div","g-data-skeleton-row");B.append(n("span","g-data-skeleton-line"),n("span","g-data-skeleton-line")),g.append(B)}}let D=n("p","g-data-live-status",s("\u6B63\u5728\u8BFB\u53D6\u8D26\u6237\u6570\u636E\u2026","Loading account data\u2026"));return D.setAttribute("role","status"),a.append(g,D),a}let ie={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","\u53EF\u7528","Available"],["redeemed","\u5DF2\u4F7F\u7528","Redeemed"],["expired","\u5DF2\u5230\u671F","Expired"],["revoked","\u5DF2\u64A4\u9500","Revoked"]]};if(ie[e.data.source]){let g=n("select","g-data-select");g.setAttribute("aria-label",s("\u7B5B\u9009\u8BB0\u5F55","Filter records")),g.dataset.gDataFocus=`${e.id}:filter`,g.disabled=!!r||t.preview||c.mode!=="live";for(let[D,G,_]of ie[e.data.source]){let B=document.createElement("option");B.value=D,B.textContent=s(G,_),g.append(B)}g.value=t.filter,g.addEventListener("change",()=>{!g.disabled&&c.mode==="live"&&K({type:"customer-data-intent",intent:{nodeId:e.id,action:"filter",value:g.value}})}),o.prepend(g)}let ut=(g,D=!1)=>{let G=n("ul","g-data-list");if(e.data.source==="credit_transactions"&&g.length&&!D){let _=n("div","g-data-table-head");_.setAttribute("aria-hidden","true"),_.append(n("span","",s("\u8BB0\u5F55","Record")),n("span","",s("\u7C7B\u578B","Type")),n("span","",s("\u79EF\u5206","Credits"))),a.append(_)}for(let _ of g){let B=n("li","g-data-row"),re=n("div","g-data-row-main"),ce=n("div","g-data-row-copy");ce.append(n("p","g-data-row-label",_.label));for(let Y of _.detail)Y!==_.status&&ce.append(n("div","g-data-row-detail",Y));if(e.data.source==="credit_transactions"&&!D){let Y=n("span","g-data-row-mark");Y.append(l(["Refund","\u9000\u56DE"].includes(_.status??"")?"up":"down")),re.append(Y)}if(re.append(ce),B.append(re),_.status?B.append(n("div","g-data-row-status",_.status)):B.classList.add("g-data-row-no-status"),_.value?B.append(n("div","g-data-row-value",_.value)):B.classList.add("g-data-row-no-value"),_.facts.length||_.purchaseId||_.membershipActions?.length||_.billingActions?.length){let Y=n("div","g-data-row-extra"),fe=n("div","g-data-facts"),we=(oe,Te)=>{for(let gt of oe){let ft=n("span","",gt.label);ft.append(n("strong","",gt.value)),Te.append(ft)}};if(we(_.facts.slice(0,3),fe),_.facts.length>3){let oe=n("details","g-data-sources");oe.dataset.gDataSources=`facts:${_.id}`,oe.append(n("summary","",`${e.data.source==="billing"?s("\u8D26\u5355\u8BE6\u60C5","Invoice details"):s("\u5168\u90E8\u6263\u8D39\u660E\u7EC6","All allocations")} \xB7 ${_.facts.length}`));let Te=n("div","g-data-facts");we(_.facts.slice(3),Te),oe.append(Te),fe.append(oe)}if(Y.append(fe),!D)for(let oe of _.billingActions??[])Y.append(d(oe.label,oe.action,_.id,!!t.billingBusy));if(_.purchaseId&&e.data.allowPurchase&&!D){let oe=d(t.buyingId===_.purchaseId?s("\u6B63\u5728\u51C6\u5907\u2026","Preparing\u2026"):s("\u8D2D\u4E70\u79EF\u5206","Buy credits"),"buy_pack",_.purchaseId,!!t.preview||!!t.buyingId);oe.classList.add("g-data-buy"),Y.append(oe)}if(e.data.allowPurchase&&!D)for(let oe of _.membershipActions??[])Y.append(d(oe.label,"membership_preview",oe.value,!!t.preview||!!t.membershipBusy||!!t.membershipReview));B.append(Y)}G.append(B)}return G};for(let g of t.resources){let D=n("article","g-data-resource");D.setAttribute("aria-label",g.name),t.resources.length>1&&D.append(n("p","g-data-name",g.name));let G=n("div","g-data-balance"),_=new Intl.NumberFormat(R).formatToParts(1.1).find(Y=>Y.type==="decimal")?.value??".",B=g.spendable.lastIndexOf(_),re=n("strong","g-data-number",B<0?g.spendable:g.spendable.slice(0,B));B>=0&&re.append(n("span","g-data-fraction",g.spendable.slice(B))),G.append(re,n("span","g-data-unit",s("\u53EF\u7528\u79EF\u5206","Spendable credits"))),D.append(G);let ce=n("div","g-data-facts");for(let[Y,fe]of[[s("\u4F59\u989D","Balance"),g.available],[s("\u51BB\u7ED3","Reserved"),g.reserved]]){let we=n("span","",Y);we.append(n("strong","",fe)),ce.append(we)}if(g.expiry&&ce.append(n("span","g-data-expiry",`${s("\u6700\u8FD1\u5230\u671F","Next expiry")} \xB7 ${g.expiry}`)),D.append(ce),e.data.showSources&&g.sourceCount){let Y=n("details","g-data-sources");if(Y.dataset.gDataSources=g.key,Y.append(n("summary","",`${s("\u79EF\u5206\u6765\u6E90","Credit sources")} \xB7 ${g.sourceCount}`),ut(g.sources,!0)),Y.querySelector("summary")?.append(l("chevron")),g.hasNextSources||g.hasPreviousSources){let fe=n("div","g-data-footer");fe.append(n("span","",`${s("\u7B2C","Page")} ${g.sourcePage}`));let we=n("div","g-data-controls");we.append(d(s("\u4E0A\u4E00\u9875","Previous"),"sources_previous",g.key,!g.hasPreviousSources),d(s("\u4E0B\u4E00\u9875","Next"),"sources_next",g.key,!g.hasNextSources)),fe.append(we),Y.append(fe)}D.append(Y)}a.append(D)}if(t.rows.length&&a.append(ut(t.rows)),e.data.source==="billing_controls"&&(e.data.outputs?.billing_authorization||e.data.outputs?.billing_adjustment)){let g=n("div","g-data-controls");e.data.outputs?.billing_authorization&&g.append(d(s("\u8BBE\u7F6E\u81EA\u52A8\u4ED8\u6B3E\u6388\u6743","Set up payment authorization"),"billing_authorization")),e.data.outputs?.billing_adjustment&&g.append(d(s("\u67E5\u770B\u5F85\u786E\u8BA4\u8865\u6B3E","Review pending adjustment"),"billing_adjustment")),a.append(g)}if(!t.rows.length&&!t.resources.length&&t.status!=="error"){let g=n("p","g-data-empty",r?s("\u6B63\u5728\u8BFB\u53D6\u8D26\u6237\u6570\u636E\u2026","Loading account data\u2026"):t.status==="idle"?s("\u767B\u5F55\u540E\u67E5\u770B\u4F60\u7684\u8D26\u6237\u6570\u636E\u3002","Sign in to view your account data."):t.filter!=="all"?s("\u6CA1\u6709\u7B26\u5408\u7B5B\u9009\u6761\u4EF6\u7684\u8BB0\u5F55\u3002","No records match this filter."):e.data.source==="credit_pack_orders"?s("\u6682\u65E0\u8D2D\u4E70\u8BB0\u5F55","No purchases yet"):e.data.source==="credit_balance"?s("\u6682\u65E0\u79EF\u5206\u6765\u6E90","No credit balances yet"):e.data.source==="membership"?s("\u6682\u65E0\u4F1A\u5458\u65B9\u6848","No memberships yet"):e.data.source==="customer_plans"?s("\u6682\u65E0\u53EF\u9009\u5957\u9910","No plans available"):e.data.source==="credit_packs"?s("\u6682\u65E0\u53EF\u8D2D\u4E70\u7684\u79EF\u5206\u5305","No credit packs available"):e.data.source==="billing_controls"?s("\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"?s("\u6682\u65E0\u4F18\u60E0\u8BB0\u5F55","No offers yet"):e.data.source==="billing"?s("\u6682\u65E0\u8D26\u5355","No invoices yet"):s("\u8FD9\u91CC\u8FD8\u6CA1\u6709\u8BB0\u5F55\u3002","There are no records yet."));g.prepend(l("empty")),g.setAttribute("role","status"),a.append(g)}if(t.hasNext||t.hasPrevious){let g=n("div","g-data-footer");g.append(n("span","",`${s("\u7B2C","Page")} ${t.page}`));let D=n("div","g-data-controls");D.append(d(s("\u4E0A\u4E00\u9875","Previous"),"previous",void 0,!t.hasPrevious),d(s("\u4E0B\u4E00\u9875","Next"),"next",void 0,!t.hasNext)),g.append(D),a.append(g)}return t.updatedAt&&e.data.source!=="credit_balance"&&a.append(n("p","g-data-note g-data-updated",`${s("\u6570\u636E\u66F4\u65B0\u4E8E","Updated")} ${new Intl.DateTimeFormat(R,{dateStyle:"medium",timeStyle:"short"}).format(new Date(t.updatedAt))}`)),a}let ke=new Map,Oe=new Map,at=e=>{let a=e.target;for(let t of ke.keys())a&&!Se(t)?.contains(a)&&ke.delete(t)};document.addEventListener("focusin",at),document.addEventListener("pointerdown",at);function Ht(e){let a=ee;if(ee=e,!L)return;let t=(i,s)=>{if(i.type==="stack"){i.children.forEach(w=>t(w,i));return}if(i.type!=="customer_data"||JSON.stringify(a?.nodes[i.id])===JSON.stringify(e.nodes[i.id]))return;let n=Se(i.id);if(!n)return;let l=document.activeElement;l&&n.contains(l)&&l.dataset.gDataFocus&&ke.set(i.id,l.dataset.gDataFocus);let d=new Set([...n.querySelectorAll("details[data-g-data-sources]")].filter(w=>w.open).map(w=>w.dataset.gDataSources)),u=Ce(i,s);if(!u)return;for(let w of u.querySelectorAll("details[data-g-data-sources]"))w.open=d.has(w.dataset.gDataSources);let h=n.scrollTop;n.replaceWith(u),u.scrollTop=h;let o=!!e.nodes[i.id]?.membershipReview&&!a?.nodes[i.id]?.membershipReview,f=!e.nodes[i.id]?.membershipReview&&!!a?.nodes[i.id]?.membershipReview;o&&ke.get(i.id)&&Oe.set(i.id,ke.get(i.id));let m=f?Oe.get(i.id):ke.get(i.id);m&&[...u.querySelectorAll("[data-g-data-focus]")].find(w=>w.dataset.gDataFocus===m)?.focus({preventScroll:!0}),o&&u.querySelector("[data-g-data-review] h3")?.focus({preventScroll:!0}),f&&Oe.delete(i.id),u.animate&&e.nodes[i.id]?.status==="ready"&&!window.matchMedia("(prefers-reduced-motion:reduce)").matches&&u.animate([{opacity:.7},{opacity:1}],{duration:140,easing:"ease-out"})},r=L.pages.find(i=>i.id===M)??L.pages[0];t(r.root,null),be()}function Ce(e,a){if(e.hidden)return null;let t;if(e.type==="customer_data")t=zt(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=F[e.align]??"stretch",t.style.justifyItems=H[e.justify]??"stretch"):(t.style.alignItems=v[e.align]??"stretch",t.style.justifyContent=N[e.justify]??"flex-start");for(let r of e.children){let i=Ce(r,e);i&&t.append(i)}if(e.interaction&&Ot(t,e),e.purchaseAction&&c.mode==="live"){let r=j?.nodes[e.id],i=r?.picker;i&&(t.disabled=!j?.pickers[i]?.options.includes(String(E[i]??""))),he(e.id)?.unavailable&&(t.disabled=!0)}c.mode==="editor"&&!t.childElementCount&&(t.classList.add("g-empty"),t.dataset.gEditorPlaceholder=c.editorMessages?.emptyContainer??"\u62D6\u5165\u7EC4\u4EF6")}else if(e.type==="text"){let r=e.variant==="title"?"h1":e.variant==="heading"?"h2":"p";t=document.createElement(r),t.className=`g-text g-${e.variant}`;let i=Ie(e,"text",e.text);t.textContent=i.value,i.missing&&c.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 r=Ie(e,"label",e.label);t.textContent=r.value,r.missing&&c.mode==="editor"&&t.classList.add("g-missing"),t.dataset.gAction=e.action;let i=j?.nodes[e.id]?.picker;if(i&&c.mode==="live"){let s=i,n=j?.pickers[s],l=E[s]??n?.selected;t.disabled=!n?.options.includes(String(l)),t.disabled&&t.setAttribute("aria-disabled","true")}c.mode==="live"&&he(e.id)?.unavailable&&(t.disabled=!0,t.setAttribute("aria-disabled","true")),c.mode==="editor"&&(t.tabIndex=-1)}else if(e.type==="image"){t=document.createElement("div"),t.className="g-img",W[e.aspect]&&(t.dataset.aspect=e.aspect,t.style.aspectRatio=W[e.aspect]);let r=document.createElement("img");r.src=e.localizedSrc?.[R]??e.localizedSrc?.[L.strings.defaultLocale]??e.src,r.alt=Ie(e,"alt",e.alt).value,r.referrerPolicy="no-referrer",r.decoding="async",r.style.objectFit=e.fit,e.position&&(r.style.objectPosition=`${e.position.x}% ${e.position.y}%`),r.addEventListener("load",be),t.append(r)}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 r=he(e.id);if(!r?.price)t.textContent=r?.text??J(e.fallback).value,c.mode==="editor"&&t.classList.add("g-missing");else for(let i of["current","original","period"]){let s=r.price[i];if(!s)continue;let n=document.createElement(i==="original"?"s":"span");n.textContent=s,i==="original"&&(n.style.opacity=".6"),e.parts?.[i]&&Le(n,{type:"text",id:e.id,text:e.fallback,variant:"body",style:e.parts[i]},null),t.append(n)}}else if(e.type==="coupon_code"){t=document.createElement("div"),t.style.cssText="display:flex;align-items:center;gap:12px;flex-wrap:wrap";let r=he(e.id);if(r?.code){let i=document.createElement("code");i.textContent=r.code;let s=document.createElement("button");s.type="button",s.className="g-btn g-btn-secondary",s.textContent=J(e.label).value,s.addEventListener("click",n=>{c.mode!=="editor"&&(n.stopPropagation(),K({type:"copy",nodeId:e.id}))}),t.append(i,s)}else t.textContent=r?.text??J(e.fallback).value,c.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 r=he(e.id),i=r?.countdownAt?Date.parse(r.countdownAt):NaN;!Number.isFinite(i)&&c.mode==="editor"&&t.classList.add("g-missing");let s=()=>{if(!Number.isFinite(i)){t.textContent=r?.text??J(e.fallback).value;return}let n=Math.max(0,Math.ceil((i-Date.now())/1e3));if(!n){t.textContent=J(e.expired).value;let u=se.get(e.id);u!==void 0&&clearInterval(u),se.delete(e.id);return}let l=e.granularity,d=l==="day"?86400:l==="hour"?3600:l==="minute"?60:1;l!=="second"?t.textContent=new Intl.NumberFormat(R,{style:"unit",unit:l,unitDisplay:"short"}).format(Math.ceil(n/d)):t.textContent=[Math.floor(n/86400),Math.floor(n/3600)%24,Math.floor(n/60)%60,n%60].map(u=>String(u).padStart(2,"0")).join(":")};s(),Number.isFinite(i)&&i>Date.now()&&se.set(e.id,setInterval(s,1e3))}else if(e.type==="plan_picker"){t=document.createElement("div"),t.setAttribute("role",e.grouping?"group":"radiogroup"),t.setAttribute("aria-label",J(e.label).value),t.style.cssText="display:flex;flex-direction:column;gap:8px";let r=j?.pickers[e.id],i=e.grouping;if(!r?.options.length)E[e.id]="",t.textContent=J(e.fallback).value,c.mode==="editor"&&t.classList.add("g-missing");else{let s=typeof E[e.id]=="string"?String(E[e.id]):r.selected,n=ue[e.id];if(i){if(!n){let U=i.assignments.find(O=>O.productVersionId===s);n={period:U?.period??"month",tierId:U?.tierId??i.tiers[0].id},ue[e.id]=n}let o=i.assignments.find(U=>U.tierId===n.tierId&&U.period===n.period);s=o&&r.options.includes(o.productVersionId)?o.productVersionId:"";let f=document.createElement("div");f.setAttribute("role","radiogroup"),f.setAttribute("aria-label",`${J(i.monthLabel).value} / ${J(i.yearLabel).value}`),f.style.cssText="display:flex;gap:4px;padding:4px;border:1px solid var(--g-border);border-radius:10px";let m=["month","year"],w=m.filter(U=>i.assignments.some(O=>O.period===U&&r.options.includes(O.productVersionId))),z=U=>{n.period=U;let O=i.assignments.find(Q=>Q.tierId===n.tierId&&Q.period===U);E[e.id]=O&&r.options.includes(O.productVersionId)?O.productVersionId:"",ye(),Se(e.id)?.querySelector(`[data-product-period="${U}"]`)?.focus()};for(let U of m){let O=document.createElement("button");O.type="button",O.className=`g-btn g-btn-${U===n.period?"primary":"secondary"}`,O.style.cssText="flex:1;min-width:0;min-height:40px",O.dataset.productPeriod=U,O.setAttribute("role","radio"),O.setAttribute("aria-checked",String(U===n.period)),O.textContent=J(U==="month"?i.monthLabel:i.yearLabel).value,O.disabled=!w.includes(U),O.tabIndex=c.mode==="editor"||O.disabled?-1:U===n.period||!w.includes(n.period)&&U===w[0]?0:-1,O.addEventListener("click",Q=>{c.mode!=="editor"&&(Q.stopPropagation(),z(U))}),O.addEventListener("keydown",Q=>{if(c.mode==="editor"||!w.length)return;let ie;["ArrowRight","ArrowDown"].includes(Q.key)?ie=(w.indexOf(U)+1)%w.length:["ArrowLeft","ArrowUp"].includes(Q.key)?ie=(w.indexOf(U)-1+w.length)%w.length:Q.key==="Home"?ie=0:Q.key==="End"&&(ie=w.length-1),ie!==void 0&&(Q.preventDefault(),z(w[ie]))}),f.append(O)}t.append(f)}E[e.id]=s??"";let l=i?i.tiers.map(o=>({tier:o,id:i.assignments.find(f=>f.tierId===o.id&&f.period===n.period)?.productVersionId})):r.options.map(o=>({id:o,tier:void 0})),d=l.filter(o=>o.id&&r.options.includes(o.id)),u=i?document.createElement("div"):t;i&&(u.setAttribute("role","radiogroup"),u.setAttribute("aria-label",J(e.label).value),u.style.cssText="display:flex;flex-direction:column;gap:8px",t.append(u));let h=o=>{!o.id||!r.options.includes(o.id)||(i&&o.tier&&(n.tierId=o.tier.id),E[e.id]=o.id,ye(),Se(e.id)?.querySelector(`[data-plan-id="${o.id}"]`)?.focus())};for(let o of l){let f=o.id?j.plans[o.id]:void 0,m=!!f&&r.options.includes(o.id),w=document.createElement("button");w.type="button",w.className="g-btn g-btn-secondary",w.style.cssText="width:100%;text-align:start;min-height:44px",w.setAttribute("role","radio");let z=i?o.tier?.id===n.tierId:o.id===s;w.setAttribute("aria-checked",String(z)),w.disabled=!m,w.tabIndex=c.mode==="editor"||!m?-1:z||!s&&o===d[0]?0:-1,o.id&&(w.dataset.planId=o.id),o.tier&&(w.dataset.productTier=o.tier.id);let U=o.id?j.nodes[e.id]?.byPlan?.[o.id]?.price:void 0;w.textContent=m?`${o.tier?.name??f.name} \xB7 ${U?.current??f.price}${U?.period??f.period}`:`${o.tier?.name??""} \xB7 ${J(i?.unavailableLabel??e.fallback).value}`,z&&(w.style.borderColor="var(--g-primary)",w.style.boxShadow="inset 0 0 0 1px var(--g-primary)",e.states?.selected&&Le(w,{type:"text",id:e.id,text:e.label,variant:"body",style:e.states.selected},null)),w.addEventListener("click",O=>{c.mode==="editor"||!m||(O.stopPropagation(),h(o))}),w.addEventListener("keydown",O=>{if(c.mode==="editor"||!d.length)return;let Q=d.indexOf(o),ie;["ArrowRight","ArrowDown"].includes(O.key)?ie=(Q+1)%d.length:["ArrowLeft","ArrowUp"].includes(O.key)?ie=(Q-1+d.length)%d.length:O.key==="Home"?ie=0:O.key==="End"&&(ie=d.length-1),ie!==void 0&&(O.preventDefault(),h(d[ie]))}),u.append(w)}if(i&&!s){let o=document.createElement("p");o.setAttribute("role","status"),o.textContent=J(i.unavailableLabel).value,t.append(o)}}}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=`${C[e.size]??0}px`;else if(e.type==="custom_html"){t=document.createElement("div"),t.className="g-custom";let r=t.attachShadow({mode:"open"}),i=e.html[R],s=i&&i.trim()?i:e.html[L?.strings.defaultLocale??""]??"",n=he(e.id);n?.html!==void 0?s=n.html:s.includes("{{")&&c.mode==="live"&&(s=J(e.fallback??"").value.replace(/[&<>"']/g,o=>({"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#39;"})[o])),(n?.missing?.length||!n&&s.includes("{{"))&&c.mode==="editor"&&t.classList.add("g-missing"),!(i&&i.trim())&&c.mode==="editor"&&t.classList.add("g-missing");let l=document.createElement("style"),d="@media(prefers-reduced-motion:reduce){:host,:host::before,:host::after,*,*::before,*::after{animation:none!important;transition:none!important;scroll-behavior:auto!important}}";l.textContent=`:host{display:block}${d}@layer indiana-accessibility{${d}}${e.css}`;let u=document.createElement("div");u.innerHTML=s,r.append(l,u);for(let h of u.querySelectorAll("img"))h.addEventListener("load",be)}else return null;return e.style&&Le(t,e,a),t.dataset.gNode=e.id,t.dataset.gLabel=Tt(e),t}function Ot(e,a){let t=a.interaction,r=[...e.children];e.setAttribute("aria-label",J(t.label).value);let i=$?.bindings.find(n=>n.componentId===a.id),s=i?{id:i.key,source:i.componentId,required:i.required}:void 0;if(s){let n=document.createElement("p");n.className="g-text g-body",n.textContent=J(t.label).value+(s.required?" *":""),e.prepend(n),s.required&&e.setAttribute("aria-required","true")}if(t.type==="input"){let n=document.createElement("input");n.type=t.keyboard,n.maxLength=t.maxLength,n.autocomplete="off",n.setAttribute("aria-label",J(t.label).value),n.setAttribute("aria-required",String(!!s?.required)),n.value=typeof E[a.id]=="string"?String(E[a.id]):"",n.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",n.disabled=c.mode!=="live",n.addEventListener("input",()=>{E[a.id]=n.value,Pe(a.id,n.value)}),e.append(n);return}if(!(c.mode!=="live"||!r.length&&t.type!=="toggle")){if(t.type==="multiselect"){e.setAttribute("role","group"),e.dataset.gMin=String(t.min);let n=a.children.filter(u=>!u.hidden),l=new Set(Array.isArray(E[a.id])?E[a.id]:[]),d=()=>r.forEach((u,h)=>{let o=l.has(n[h].id);u.setAttribute("aria-checked",String(o)),u.setAttribute("aria-disabled",String(!o&&l.size>=t.max)),u.style.outline=o?"2px solid var(--g-primary)":"",u.style.outlineOffset="-2px"});r.forEach((u,h)=>{u.setAttribute("role","checkbox"),u.tabIndex=0,u.setAttribute("aria-label",u.textContent?.trim()||String(h+1)),u.style.cursor="pointer";let o=()=>{let f=n[h].id;if(l.has(f))l.delete(f);else if(l.size<t.max)l.add(f);else return;let m=n.filter(w=>l.has(w.id)).map(w=>w.id);E[a.id]=m,d(),Pe(a.id,m)};u.addEventListener("click",f=>{f.stopPropagation(),o()}),u.addEventListener("keydown",f=>{[" ","Enter"].includes(f.key)&&(f.preventDefault(),f.stopPropagation(),o())})}),d();return}if(t.type==="select"){e.setAttribute("role","radiogroup");let n=a.children.filter(h=>!h.hidden),l=p(a)?a.interaction.pickerId:void 0,d=n.findIndex(h=>l?h.type==="stack"&&h.bind?.plan===E[l]:h.id===E[a.id]);!l&&d<0&&!s?.required&&(d=Math.min(t.defaultIndex,r.length-1));let u=(h,o=!1,f=!0)=>{if(l&&f&&h>=0){let m=n[h],w=m.type==="stack"?m.bind?.plan:void 0;if(!w||!j?.pickers[l]?.options.includes(w))return;E[a.id]=m.id,E[l]=w,ye(),o&&q.querySelector(`[data-g-node="${m.id}"]`)?.focus({preventScroll:!0});return}d=h,h>=0&&(E[a.id]=n[h].id),f&&h>=0&&Pe(a.id,n[h].id),r.forEach((m,w)=>{m.setAttribute("aria-checked",String(w===h)),m.tabIndex=w===(h<0?0:h)?0:-1,m.style.cssText="";let z=n[w];z.type==="stack"&&(m.style.alignItems=v[z.align]??"stretch",m.style.justifyContent=N[z.justify]??"flex-start"),z.style&&Le(m,z,a),w===h&&(t.selectedStyle&&Le(m,{...z,style:t.selectedStyle},a),z.type==="stack"&&z.states?.selected&&Le(m,{...z,style:z.states.selected},a),!t.selectedStyle?.border&&!(z.type==="stack"&&z.states?.selected?.border)&&(m.style.outline="2px solid var(--g-primary)",m.style.outlineOffset="-2px")),m.style.cursor="pointer"}),o&&h>=0&&r[h].focus()};r.forEach((h,o)=>{if(h.setAttribute("role","radio"),l){let f=n[o],m=f.type==="stack"?f.bind?.plan:void 0;h.setAttribute("aria-disabled",String(!m||!j?.pickers[l]?.options.includes(m)))}h.setAttribute("aria-label",h.textContent?.trim()||String(o+1)),h.addEventListener("click",f=>{f.stopPropagation(),u(o)}),h.addEventListener("keydown",f=>{let m=f.key;if(!["ArrowRight","ArrowLeft","ArrowDown","ArrowUp","Home","End"," ","Enter"].includes(m))return;f.preventDefault(),f.stopPropagation();let w=d<0?o:d;u(m==="Home"?0:m==="End"?r.length-1:m==="ArrowRight"||m==="ArrowDown"?(w+1)%r.length:m==="ArrowLeft"||m==="ArrowUp"?(w+r.length-1)%r.length:o,!0)})}),u(d,!1,!1)}else if(t.type==="tabs"){let n=a.children.filter(o=>!o.hidden),l=document.createElement("div");l.setAttribute("role","tablist"),l.setAttribute("aria-label",J(t.label).value),l.style.cssText="display:flex;gap:4px;padding:4px;border:1px solid var(--g-border);border-radius:12px";let d=r.map((o,f)=>{let m=document.createElement("button");return m.type="button",m.setAttribute("role","tab"),m.textContent=je(n[f])||String(f+1),m.style.cssText="flex:1;min-width:0;min-height:44px;padding:8px 16px;border:0;border-radius:8px;font:inherit;cursor:pointer",o.id=`g-${a.id}-${n[f].id}`,o.setAttribute("role","tabpanel"),m.setAttribute("aria-controls",o.id),l.append(m),m}),u=(o,f=!1,m=!1)=>{if(E[a.id]=n[o].id,m&&L&&Object.keys(A(L)).length){for(let w of Object.keys(A(L)))delete E[w];ye(),f&&q.querySelector(`[data-g-node="${a.id}"] [role="tab"][aria-selected="true"]`)?.focus({preventScroll:!0});return}r.forEach((w,z)=>{w.hidden=z!==o,d[z].setAttribute("aria-selected",String(z===o)),d[z].tabIndex=z===o?0:-1,d[z].style.background=z===o?"var(--g-primary)":"transparent",d[z].style.color=z===o?"var(--g-on-primary)":"var(--g-text)"}),f&&d[o].focus(),be()};d.forEach((o,f)=>{o.addEventListener("click",m=>{m.stopPropagation(),u(f,!1,!0)}),o.addEventListener("keydown",m=>{["ArrowLeft","ArrowRight","Home","End"].includes(m.key)&&(m.preventDefault(),m.stopPropagation(),u(m.key==="Home"?0:m.key==="End"?r.length-1:(f+(m.key==="ArrowRight"?1:r.length-1))%r.length,!0,!0))})}),e.prepend(l);let h=n.findIndex(o=>o.id===E[a.id]);u(h>=0?h:Math.min(t.defaultIndex,r.length-1))}else if(t.type==="toggle"){let n=document.createElement("button");n.type="button",n.setAttribute("role","switch"),n.className="g-btn g-btn-secondary",n.style.cssText="display:flex;align-items:center;justify-content:space-between;gap:16px;color:var(--g-text)";let l=document.createElement("span");l.textContent=J(t.label).value;let d=document.createElement("span");d.setAttribute("aria-hidden","true"),d.style.cssText="position:relative;display:block;flex:none;width:44px;height:24px;border-radius:12px;background:var(--g-border)";let u=document.createElement("span");u.style.cssText="position:absolute;top:3px;left:3px;width:18px;height:18px;border-radius:50%;background:#fff;box-shadow:0 1px 3px #0003",d.append(u),n.append(l,d);let h=(o,f=!1)=>{if(E[a.id]=o,f&&L&&Object.keys(A(L)).length){for(let m of Object.keys(A(L)))delete E[m];ye(),q.querySelector(`[data-g-node="${a.id}"] [role="switch"]`)?.focus({preventScroll:!0});return}n.setAttribute("aria-checked",String(o)),d.style.background=o?"var(--g-primary)":"var(--g-border)",u.style.left=o?"23px":"3px",u.style.background=o?"var(--g-on-primary)":"#FFFFFF",r.forEach((m,w)=>m.hidden=w!==(o?0:1)),be()};n.addEventListener("click",o=>{o.stopPropagation(),h(!E[a.id],!0),Pe(a.id,!!E[a.id])}),e.prepend(n),h(typeof E[a.id]=="boolean"?E[a.id]:t.defaultEnabled)}else{e.setAttribute("role","region"),e.setAttribute("aria-roledescription","carousel");let n=document.createElement("div");n.style.cssText="display:flex;align-items:center;justify-content:center;gap:10px";let l=document.createElement("button"),d=document.createElement("button"),u=document.createElement("span"),h=R.startsWith("zh");l.textContent="\u2190",d.textContent="\u2192",l.setAttribute("aria-label",h?"\u4E0A\u4E00\u6761\u8BC4\u4EF7":"Previous review"),d.setAttribute("aria-label",h?"\u4E0B\u4E00\u6761\u8BC4\u4EF7":"Next review");for(let f of[l,d])f.type="button",f.className="g-btn g-btn-secondary",f.style.color="var(--g-text)";u.setAttribute("aria-live","polite");let o=f=>{ne[a.id]=f,r.forEach((m,w)=>m.hidden=w!==f),u.textContent=`${f+1} / ${r.length}`,be()};l.addEventListener("click",f=>{f.stopPropagation(),o((ne[a.id]+r.length-1)%r.length)}),d.addEventListener("click",f=>{f.stopPropagation(),o((ne[a.id]+1)%r.length)}),n.append(l,u,d),e.append(n),o(ne[a.id]??0)}}}function je(e){if(e.hidden)return"";if(e.type==="text"&&(e.variant==="title"||e.variant==="heading"))return J(e.text).value;if(e.type==="stack")for(let a of e.children){let t=je(a);if(t)return t}return""}function rt(e){return e.type==="stack"&&!e.interaction&&!e.purchaseAction}function nt(e){let a=[],t=r=>{let i=j?.nodes[r.id];if(a.push(r.id,he(r.id)),i?.picker&&a.push(E[i.picker],j?.pickers[i.picker]),r.type==="text")a.push(Ie(r,"text",r.text));else if(r.type==="button")a.push(Ie(r,"label",r.label));else if(r.type==="image")a.push(Ie(r,"alt",r.alt));else if(r.type==="custom_html")a.push(X,$?.answers);else if(r.type==="customer_data")a.push(ee?.nodes[r.id]);else if(r.type==="plan_picker"){let s=j?.pickers[r.id];a.push(E[r.id],ue[r.id],s,i,s?.options.map(n=>j?.plans[n]))}else r.type==="stack"&&(r.interaction?.type!=="input"&&a.push(E[r.id],ne[r.id]),p(r)&&a.push(E[r.interaction.pickerId],j?.pickers[r.interaction.pickerId]),r.children.forEach(t))};return t(e),JSON.stringify(a)}function it(e){e.hidden||(rt(e)?e.children.forEach(it):pe.set(e.id,nt(e)))}function st(e){let a=se.get(e.id);a!==void 0&&clearInterval(a),se.delete(e.id),e.type==="stack"&&e.children.forEach(st)}function ot(e,a){if(e.hidden)return;if(rt(e)){e.children.forEach(i=>ot(i,e));return}if(pe.get(e.id)===nt(e))return;let t=Se(e.id);if(!t)return;st(e);let r=Ce(e,a);r&&t.replaceWith(r)}function jt(){let e=document.activeElement;if(!(e instanceof HTMLElement)||!q.contains(e))return;let a=e.closest("[data-g-node]");if(!a)return;let t=[];for(let r=e;r!==a;){let i=r.parentElement;if(!i)return;t.unshift(Array.prototype.indexOf.call(i.children,r)),r=i}return{active:e,nodeId:a.dataset.gNode,path:t,identity:["productPeriod","planId","productTier","gDataFocus"].map(r=>[r,e.dataset[r]]).find(([,r])=>r!==void 0),selection:e instanceof HTMLInputElement&&e.selectionStart!==null?{start:e.selectionStart,end:e.selectionEnd,direction:e.selectionDirection}:void 0}}function Ft(e){if(!e||e.active.isConnected)return;let a=Se(e.nodeId);if(!a)return;let t=a;if(e.identity){let[r,i]=e.identity;t=[...a.querySelectorAll("*")].find(s=>s.dataset[r]===i)}else for(let r of e.path)t=t?.children[r];!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 ye(e=!1){if(!L)return;let a=e?void 0:jt(),t=L.pages.find(s=>s.id===(M??L.initialPageId))??L.pages[0];M=t.id,j&&Object.assign(E,I({...L,pages:[t]},Xe(),j));let r=s=>{if(s.type==="stack"&&s.children.forEach(r),s.type!=="plan_picker"||!s.grouping)return;let n=s.grouping,l=j?.pickers[s.id],d=ue[s.id];if(!d){let h=n.assignments.find(o=>o.productVersionId===(E[s.id]??l?.selected));d={period:h?.period??"month",tierId:h?.tierId??n.tiers[0].id},ue[s.id]=d}let u=n.assignments.find(h=>h.tierId===d.tierId&&h.period===d.period);E[s.id]=u&&l?.options.includes(u.productVersionId)?u.productVersionId:""};if(r(t.root),e||le!==t){se.forEach(l=>clearInterval(l)),se.clear(),pe.clear(),q.style.cssText="",Mt(t.theme?{...L,theme:t.theme}:L);let s=R.split("-")[0];document.documentElement.lang=R,document.documentElement.dir=["ar","he","fa","ur"].includes(s)?"rtl":"ltr",q.dataset.gPresentation=L.presentation.type;let n=Ce(t.root,null);q.replaceChildren(...n?[n]:[]),le=t}else ot(t.root,null);it(t.root),Ft(a),q.dataset.gPage=t.id,c.mode==="live"&&K({type:"page",pageId:t.id}),Ue(),Fe();let i=Math.ceil(q.getBoundingClientRect().height);k?be():(k=!0,S=i,K({type:"rendered",height:i,label:je(t.root)||L.name}))}function be(){let e=Math.ceil(q.getBoundingClientRect().height);e!==S&&(S=e,K({type:"resize",height:e})),Ue(),Fe()}function dt(){ae||(ae=!0,window.requestAnimationFrame(()=>{ae=!1,be()}))}function Fe(){if(c.mode!=="editor")return;let e=[];for(let t of q.querySelectorAll("[data-g-node]")){let r=t.getBoundingClientRect();!r.width||!r.height||e.push({id:t.dataset.gNode,x:r.x,y:r.y,width:r.width,height:r.height})}let a=JSON.stringify(e);a!==me&&(me=a,K({type:"layout",nodes:e}))}function Se(e){return!e||!/^[a-zA-Z][a-zA-Z0-9_-]*$/.test(e)?null:q.querySelector(`[data-g-node="${e}"]`)}function ct(e,a){let t=Se(a);if(!t){e.style.display="none";return}let r=t.getBoundingClientRect();e.style.display="block",e.style.left=`${r.left+window.scrollX}px`,e.style.top=`${r.top+window.scrollY}px`,e.style.width=`${r.width}px`,e.style.height=`${r.height}px`,e.toggleAttribute("data-below",r.top<20),e.firstChild.textContent=t.dataset.gLabel??""}function Ue(){c.mode==="editor"&&(ct(de,Ee),ct(ge,Z&&Z!==Ee?Z:null))}function Me(e){for(let a of e.composedPath()){if(a instanceof HTMLElement&&a.dataset.gNode)return a.dataset.gNode;if(a===q)break}return null}function Ut(e){if(e.isTrusted){if(c.mode==="editor"){e.preventDefault(),e.stopPropagation(),K({type:"select",id:Me(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&&!a.disabled){e.preventDefault();let r=L?.actions.find(i=>i.id===t);if(r?.type==="navigate"){if(M=r.pageId,L)for(let i of Object.keys(A(L)))delete E[i];ye(),q.querySelector("h1,h2")?.focus({preventScroll:!0});return}K({type:"action",actionId:t,nodeId:Me(e)??void 0,...Object.keys(E).length?{selection:Xe()}:{},...$?{answers:tt()}:{}});return}if(a===q)return}}}function lt(e){let a=e;if(!(!a||a.channel!==c.channel))try{if(a.type==="render"){let t=c.document??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(r=>Object.hasOwn(r,"source"))||t.actions?.some(r=>!["event","close","open_url","claim_offer",...t.surface==="paywall"?["navigate"]:[]].includes(r.type)))throw new Error("Unsupported screen document; use the current Funnel runtime for flows");L=t,M=null,R=String(a.locale),te=new Set,X=a.parameters??{},$=a.serverInput,E=Object.create(null),ue=Object.create(null),j=a.capabilities,ee=a.customerData,ke.clear();for(let[r,i]of Object.entries(j?.pickers??{}))i.selected&&(E[r]=i.selected);if(a.selection&&typeof a.selection=="object"&&!Array.isArray(a.selection)){let r=a.selection,i=n=>{let l=r[n.id];if(n.type==="plan_picker"&&typeof l=="string"&&n.planIds?.includes(l)&&(E[n.id]=l),n.type==="stack"){if(n.interaction?.type==="toggle"&&typeof l=="boolean"&&(E[n.id]=l),n.interaction&&["select","tabs"].includes(n.interaction.type)&&typeof l=="string"&&n.children.some(d=>d.id===l)&&(E[n.id]=l),p(n)){let d=r[n.interaction.pickerId];typeof d=="string"&&n.children.some(u=>u.type==="stack"&&u.bind?.plan===d)&&(E[n.interaction.pickerId]=d)}n.children.forEach(i)}};L.pages.forEach(n=>i(n.root));let s=r.__page;typeof s=="string"&&L.pages.some(n=>n.id===s)&&(M=s)}for(let r of $?.bindings??[])Object.hasOwn($.answers,r.key)&&(E[r.componentId]=$.answers[r.key],te.add(r.componentId));ne=Object.create(null),R=String(a.locale),ye(!0)}else if(a.type==="capabilities"){j=a.capabilities;for(let[t,r]of Object.entries(j.pickers))!ue[t]&&E[t]===void 0&&(E[t]=r.selected??"");ye()}else a.type==="customer-data"?Ht(a.data):a.type==="restore-action-focus"&&c.mode==="live"?[...q.querySelectorAll("button[data-g-node]")].find(t=>t.dataset.gNode===a.nodeId&&!t.disabled)?.focus({preventScroll:!0}):a.type==="highlight"&&c.mode==="editor"&&(Z=a.hoverId??null,Ee=a.selectedId??null,Ue())}catch(t){K({type:"error",message:t instanceof Error?t.message:"render failed"})}}let pt=document.createElement("style");if(pt.textContent=x,document.head.append(pt),document.body.append(q),c.mode==="editor"){document.body.dataset.gEditor="",document.body.append(ge,de),document.addEventListener("mouseover",a=>{let t=Me(a);t!==ve&&(ve=t,K({type:"hover",id:t}))}),document.documentElement.addEventListener("mouseleave",()=>{ve!==null&&(ve=null,K({type:"hover",id:null}))}),document.addEventListener("dblclick",a=>{let t=Me(a);t&&a.isTrusted&&K({type:"edit",id:t})}),document.addEventListener("click",a=>{q.contains(a.target)||K({type:"select",id:null})});let e=(a,t)=>{if(!a.isTrusted)return;let r=a.metaKey||a.ctrlKey,i=a.key;(i===" "||t==="down"&&(["Delete","Backspace","Escape"].includes(i)||r&&/^[zysdcvg0=+-]$/i.test(i)))&&((r||i===" ")&&a.preventDefault(),K({type:"key",key:{key:i,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(),K({type:"zoom",delta:a.deltaY}))},{passive:!1})}q.addEventListener("click",Ut),document.addEventListener("keydown",e=>{e.key==="Escape"&&e.isTrusted&&K({type:"escape"})}),typeof ResizeObserver=="function"&&new ResizeObserver(dt).observe(q),window.addEventListener("resize",dt),c.mode==="editor"&&window.addEventListener("scroll",Fe),window.addEventListener("message",e=>{e.source===y&&lt(e.data)}),T.__indianaReceive=lt,K(c.document?{type:"ready",document:c.document}:{type:"ready"})}var Yt=`(${Ze.toString()})(JSON.parse(document.getElementById("grow-renderer-boot").textContent))`;function _t(c,p){let A=JSON.stringify(c).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-${p}'; style-src 'unsafe-inline'; img-src https: data:; connect-src 'none'; font-src 'none'; media-src 'none'; frame-src 'none'; base-uri 'none'; form-action 'none'"></head><body><script type="application/json" id="grow-renderer-boot">${A}<\/script><script nonce="${p}">${Yt}<\/script></body></html>`}function Xt(){return`(() => {
171
+ try {
172
+ const input = JSON.parse(decodeURIComponent(location.hash.slice(1)));
173
+ if (!input || !/^[a-f0-9-]{36}$/.test(input.channel) || input.mode !== "live" || !Number.isInteger(input.hostDepth) || input.hostDepth < 1 || input.hostDepth > 16) return;
174
+ const origin = new URL(input.parentOrigin);
175
+ if (!["https:", "http:"].includes(origin.protocol) || origin.origin !== input.parentOrigin) return;
176
+ const data = JSON.parse(document.getElementById("indiana-screen").textContent);
177
+ if (!data || typeof data.document !== "object") return;
178
+ const boot = { channel: input.channel, parentOrigin: origin.origin, hostDepth: input.hostDepth, mode: "live", document: data.document };
179
+ (${Ze.toString()})(boot);
180
+ } catch { /* No valid host bridge: leave the published screen inert. */ }
181
+ })();`}function Qt(){return`(() => {
171
182
  try {
172
183
  const input = JSON.parse(decodeURIComponent(location.hash.slice(1)));
173
184
  if (!input || !/^[a-f0-9-]{36}$/.test(input.channel) || input.mode !== "live" || !Number.isInteger(input.hostDepth) || input.hostDepth < 1 || input.hostDepth > 16) return;
174
185
  const origin = new URL(input.parentOrigin);
175
186
  if (!["https:", "http:"].includes(origin.protocol) || origin.origin !== input.parentOrigin) return;
176
187
  const boot = { channel: input.channel, parentOrigin: origin.origin, hostDepth: input.hostDepth, mode: "live" };
177
- (${ht.toString()})(boot);
188
+ (${Ze.toString()})(boot);
178
189
  } catch { /* No valid host bridge: leave the public shell empty. */ }
179
- })();`}function Mt(g,m){if(!/^(0|[1-9]\d*)(\.\d{1,12})?$/.test(g))throw new gt("INVALID_RESPONSE","Invalid credit amount");let[A,I]=g.split("."),x=new Intl.NumberFormat(m),M=x.formatToParts(1.1).find(_=>_.type==="decimal")?.value??".",$=Array.from({length:10},(_,k)=>new Intl.NumberFormat(m,{useGrouping:!1}).format(k));return x.format(BigInt(A))+(I?M+I.replace(/\d/g,_=>$[Number(_)]):"")}var Ve=new WeakMap,$t=new WeakMap;function zt(g){let m=window.open("about:blank","_blank");if(!m)throw new Error("External URL window was blocked");try{m.opener=null;let A=m.document.createElement("a");A.href=g,A.target="_self",A.rel="noopener noreferrer",A.referrerPolicy="no-referrer",m.document.body.append(A),A.click()}catch(A){throw m.close(),A}}function Ht(){return typeof navigator>"u"?[]:[...navigator.languages??[],navigator.language].filter(Boolean)}function bt(g,m,A,I,x=document){let M=crypto.randomUUID(),$=crypto.randomUUID().replaceAll("-",""),_=x.createElement("iframe");_.title=m,_.setAttribute("sandbox","allow-scripts"),_.referrerPolicy="no-referrer";let k=x.defaultView,L=1;for(;k!==window&&L<16;)k=k.parent,L++;if(k!==window)throw new Error("Renderer container must belong to this host or a descendant window");let z={channel:M,parentOrigin:window.origin,hostDepth:L,mode:g,...g==="editor"?{editorMessages:A}:{}};if(I){if(g!=="live")throw new Error("Hosted Web Views only support live rendering");let T=new URL(I);if(T.username||T.password||T.search||T.hash||!/^\/web-view\/renderer\/[a-f0-9]{64}$/.test(T.pathname)||T.protocol!=="https:"&&!(T.protocol==="http:"&&["localhost","127.0.0.1","[::1]"].includes(T.hostname)))throw new Error("Invalid hosted renderer URL");T.hash=encodeURIComponent(JSON.stringify(z)),_.src=T.href}else _.srcdoc=yt(z,$);return{frame:_,post:T=>_.contentWindow?.postMessage({...T,channel:M},"*"),accept:T=>T.source===_.contentWindow&&T.origin==="null"&&T.data&&T.data.channel===M?T.data:null}}function Xt(g,m={}){let A=Ne(g,window);m.capabilities=Ae(m.capabilities,A,window);let I=Be(A,[m.locale,...Ht()]),x=Ue(A,I);if(Ve.has(document))throw new Error("\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 M=document.activeElement,$=document.createElement("div");$.dataset.indianaPopup="";let _=$.attachShadow({mode:"open"}),k=document.createElement("style");k.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 L=document.createElement("dialog");L.lang=I,L.dir=ct(I)?"rtl":"ltr",L.setAttribute("aria-label",x.name),L.dataset.presentation=x.presentation.type,L.style.width=x.presentation.type==="fullscreen"?"100vw":`${ot[x.presentation.size]}px`,x.presentation.type==="fullscreen"?L.style.cssText+=";max-width:100vw;max-height:100dvh;height:100dvh;margin:0;border-radius:0":x.presentation.type==="sheet"&&(L.style.cssText+=";margin:auto auto 0;max-width:100vw;max-height:100dvh;border-radius:14px 14px 0 0"),L.style.background=x.theme.background;let z=document.createElement("button");z.type="button",z.textContent="\xD7",z.setAttribute("aria-label",ft(I));let{frame:B,post:G,accept:T}=bt("live",x.name,void 0,m.rendererUrl),P=!1,S=!1,N=f=>{x.presentation.type!=="fullscreen"&&(L.style.height=`min(${Math.max(f,40)}px, calc(100dvh - ${x.presentation.type==="sheet"?0:32}px))`)};function K(f){try{Promise.resolve(m.onEvent?.(f)).catch(l=>Z(m.onError,l))}catch(l){Z(m.onError,l)}}function F(){return P?!1:(P=!0,clearTimeout(le),window.removeEventListener("message",oe),L.close(),$.remove(),Ve.delete(document),M instanceof HTMLElement&&M.isConnected&&M.focus({preventScroll:!0}),!0)}function te(f){F()&&K({type:"closed",reason:f})}function oe(f){let l=P?null:T(f);if(l){if(l.type==="ready")G({type:"render",doc:x,locale:I,capabilities:m.capabilities});else if(l.type==="rendered"&&!S)S=!0,clearTimeout(le),N(l.height),l.label&&L.setAttribute("aria-label",l.label),L.showModal(),z.focus(),K({type:"shown"});else if(l.type==="resize"&&S)N(l.height);else if(l.type==="copy"&&S){let v=me(x,l.nodeId),H=it(m.capabilities,l.nodeId);v?.type==="coupon_code"&&H?.code&&navigator.clipboard?.writeText(H.code).catch(()=>{})}else if(l.type==="escape"&&S)te("escape");else if(l.type==="action"&&S&&typeof l.actionId=="string"){let v=x.actions.find(H=>H.id===l.actionId);if(!v)return;if(v.close&&F(),K({type:"action",actionId:v.id,...typeof l.nodeId=="string"&&me(x,l.nodeId)?{nodeId:l.nodeId}:{},name:v.event,properties:{...v.properties},...l.selection?{selection:We(x,l.selection,m.capabilities)}:{}}),v.type==="open_url")try{zt(v.url)}catch(H){Z(m.onError,H)}v.close&&K({type:"closed",reason:"action"})}}}let le=setTimeout(()=>{Z(m.onError,new Error("Web View renderer did not start")),te("timeout")},5e3),ae={destroy:()=>te("destroy"),updateCapabilities:f=>{let l=Ae(f,x,window);m.capabilities=l,G({type:"capabilities",capabilities:l})}};return $t.set(ae,f=>{P||G({type:"restore-action-focus",nodeId:f})}),z.addEventListener("click",()=>te("close_button")),L.addEventListener("cancel",f=>{f.preventDefault(),te("escape")}),L.append(z,B),_.append(k,L),window.addEventListener("message",oe),Ve.set(document,ae),document.body.append($),ae}function Qt(g,m={}){let A=(()=>{let f=g.ownerDocument.defaultView;if(!f)throw new Error("Preview container has no browser window");return f})(),I=m.mode??"editor",{frame:x,post:M,accept:$}=bt(I,m.title??"\u5F39\u7A97\u9884\u89C8",m.editorMessages,m.rendererUrl,g.ownerDocument);x.style.cssText="display:block;border:0;width:100%;height:0";let _=!1,k=null,L=null,z=!1,B,G,T=new Promise((f,l)=>{B=f,G=l});T.catch(()=>{});let P=setTimeout(()=>{if(z||_)return;let f=new Error("Web View renderer did not start");G(f),Z(m.onError,f.message),S()},5e3);function S(){z||(z=!0,clearTimeout(P),_||G(new Error("Web View mount cancelled")),window.removeEventListener("message",ae),_=!1,k=null,L=null,N=null,K=void 0,te.clear(),x.remove(),x.removeAttribute("srcdoc"),x.removeAttribute("src"))}let N=null,K,F="modal",te=new Set,oe=f=>{let l=m.viewportHeight,v=l?F==="fullscreen"?l:Math.min(f,l-(F==="sheet"?0:32)):f;x.style.height=`${v}px`,Z(m.onResize,v)};function le(f){if(!K)return;let l=lt.safeParse(f);if(!l.success||Object.keys(l.data).some(v=>!K.bindings.some(H=>H.key===v))){Z(m.onError,"Invalid current-screen answers");return}return l.data}function ae(f){let l=z?null:$(f);if(l)if(l.type==="ready")_=!0,clearTimeout(P),B(),k&&M(k),L&&M(L);else if(l.type==="rendered"||l.type==="resize")oe(l.height),l.type==="rendered"&&Z(m.onRendered);else if(l.type==="layout"&&I==="editor")Array.isArray(l.nodes)&&l.nodes.length<=(N?ve.nodes:0)&&l.nodes.every(v=>v&&typeof v.id=="string"&&/^[a-zA-Z][a-zA-Z0-9_-]{0,63}$/.test(v.id)&&[v.x,v.y,v.width,v.height].every(H=>typeof H=="number"&&Number.isFinite(H))&&v.width>0&&v.height>0)&&Z(m.onLayout,l.nodes);else if(l.type==="page"&&I==="live"&&te.has(l.pageId))Z(m.onPageChange,l.pageId);else if(l.type==="escape"&&I==="live")Z(m.onEscape);else if(l.type==="hover")Z(m.onHover,l.id);else if(l.type==="select")Z(m.onSelect,l.id);else if(l.type==="edit")Z(m.onEdit,l.id);else if(l.type==="customer-data-intent"&&I==="live"&&N){let v=st.safeParse(l.intent);v.success&&me(N,v.data.nodeId)?.type==="customer_data"&&Z(m.onCustomerDataIntent,v.data)}else if(l.type==="answers"&&I==="live"&&K){let v=le(l.answers);v&&Z(m.onAnswers,v)}else if(l.type==="action"&&N?.actions.some(v=>v.id===l.actionId)){let v=le(l.answers);if(K&&!v)return;Z(m.onAction,l.actionId,We(N,l.selection,k?.type==="render"?k.capabilities:void 0),v)}else l.type==="error"&&Z(m.onError,l.message)}return window.addEventListener("message",ae),g.append(x),{ready:T,updateCustomerData(f){if(z||!N)return;let l=Oe.parse(f),v={nodes:Object.fromEntries(Object.entries(l.nodes).filter(([H,Y])=>{let de=me(N,H);return de?.type==="customer_data"&&de.data.source===Y.source}))};k?.type==="render"&&(k.customerData=v),_&&M({type:"customer-data",data:v})},updateCapabilities(f){if(z||!N)return;let l=Ae(f,N,A);l&&(k?.type==="render"&&JSON.stringify(k.capabilities)===JSON.stringify(l)||(k?.type==="render"&&(k.capabilities=l),_&&M({type:"capabilities",capabilities:l})))},update(f,l,v){if(z)return;let H;try{let Y=Ne(f,A),de=I==="live"&&!!v?.serverInput,be=de?Be(Y,[l]):l,ke=de?Ue(Y,be):Y,se=v?.serverInput?ut.parse(v.serverInput):void 0;if(se&&(Y.surface!=="paywall"&&Y.pages.length!==1||Y.actions.some(ie=>ie.type!=="event"&&!(Y.surface==="paywall"&&ie.type==="navigate")||ie.close)||se.bindings.some(ie=>{let pe=me(Y,ie.componentId);return pe?.type!=="stack"||!pe.interaction||!["input","multiselect","select","tabs","toggle"].includes(pe.interaction.type)})))throw new Error("Current Funnel input requires one screen with bound interactive controls and output actions");N=ke,K=se,F=Y.presentation.type,te=new Set(Y.pages.map(ie=>ie.id)),H={type:"render",doc:ke,...se?{serverInput:se}:{},locale:be,parameters:pt.parse(v?.parameters??{}),capabilities:Ae(v?.capabilities,Y,A),...v?.selection?{selection:v.selection}:{},customerData:v?.customerData?Oe.parse(v.customerData):void 0},F==="fullscreen"&&m.viewportHeight&&oe(m.viewportHeight)}catch(Y){Z(m.onError,Y instanceof Error?Y.message:"\u5185\u5BB9\u4E0D\u6B63\u786E");return}k=H,_&&M(H)},highlight(f,l){z||(L={type:"highlight",hoverId:f,selectedId:l},_&&M(L))},destroy:S}}export{Mt as formatCustomerDecimal,Ct as hostedRendererScript,Nt as inspectCustomHtml,Qt as mountScreenPreview,Ne as prepareScreen,Tt as sanitizeCustomHtml,Xt as showPopup};
190
+ })();`}function Ge(c,p){let A=(()=>{let N=c.defaultView;if(!N)throw new Error("Renderer host has no browser window");return N})(),I=5e3,y=0,T,C=!1;function P(){T!==void 0&&(A.clearTimeout(T),T=void 0,I=Math.max(0,I-(performance.now()-y)))}function b(){C||(C=!0,P(),c.removeEventListener("visibilitychange",v))}function v(){if(!C){if(c.visibilityState==="hidden"){P();return}T===void 0&&(y=performance.now(),T=A.setTimeout(()=>{T=void 0,b(),p()},I))}}return c.addEventListener("visibilitychange",v),v(),b}function ea(c,p){if(!/^(0|[1-9]\d*)(\.\d{1,12})?$/.test(c))throw new St("INVALID_RESPONSE","Invalid credit amount");let[A,I]=c.split("."),y=new Intl.NumberFormat(p),T=y.formatToParts(1.1).find(P=>P.type==="decimal")?.value??".",C=Array.from({length:10},(P,b)=>new Intl.NumberFormat(p,{useGrouping:!1}).format(b));return y.format(BigInt(A))+(I?T+I.replace(/\d/g,P=>C[Number(P)]):"")}var Ye=new WeakMap,ta=new WeakMap;function aa(c){let p=window.open("about:blank","_blank");if(!p)throw new Error("External URL window was blocked");try{p.opener=null;let A=p.document.createElement("a");A.href=c,A.target="_self",A.rel="noopener noreferrer",A.referrerPolicy="no-referrer",p.document.body.append(A),A.click()}catch(A){throw p.close(),A}}function ra(){return typeof navigator>"u"?[]:[...navigator.languages??[],navigator.language].filter(Boolean)}function Pt(c,p,A,I,y=document,T){let C=crypto.randomUUID(),P=crypto.randomUUID().replaceAll("-",""),b=y.createElement("iframe");b.title=p,b.setAttribute("sandbox","allow-scripts"),b.referrerPolicy="no-referrer";let v=y.defaultView,N=1;for(;v!==window&&N<16;)v=v.parent,N++;if(v!==window)throw new Error("Renderer container must belong to this host or a descendant window");let H={channel:C,parentOrigin:window.origin,hostDepth:N,mode:c,...c==="editor"?{editorMessages:A}:{}};if(T){if(c!=="live")throw new Error("Published screen renders only support live rendering");let x=new URL(T);if(x.username||x.password||x.search||x.hash||!wt(x.pathname)||x.protocol!=="https:"&&!(x.protocol==="http:"&&["localhost","127.0.0.1","[::1]"].includes(x.hostname)))throw new Error("Invalid published screen render URL");x.hash=encodeURIComponent(JSON.stringify(H)),b.src=x.href}else if(I){if(c!=="live")throw new Error("Hosted Web Views only support live rendering");let x=new URL(I);if(x.username||x.password||x.search||x.hash||!/^\/web-view\/renderer\/[a-f0-9]{64}$/.test(x.pathname)||x.protocol!=="https:"&&!(x.protocol==="http:"&&["localhost","127.0.0.1","[::1]"].includes(x.hostname)))throw new Error("Invalid hosted renderer URL");x.hash=encodeURIComponent(JSON.stringify(H)),b.src=x.href}else b.srcdoc=_t(H,P);return{frame:b,post:x=>b.contentWindow?.postMessage({...x,channel:C},"*"),accept:x=>x.source===b.contentWindow&&x.origin==="null"&&x.data&&x.data.channel===C?x.data:null}}function ka(c,p={}){let A=Ne(c,window);p.capabilities=Re(p.capabilities,A,window);let I=qe(A,[p.locale,...ra()]),y=Je(A,I);if(Ye.has(document))throw new Error("\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 T=document.activeElement,C=document.createElement("div");C.dataset.indianaPopup="";let P=C.attachShadow({mode:"open"}),b=document.createElement("style");b.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 v=document.createElement("dialog");v.lang=I,v.dir=bt(I)?"rtl":"ltr",v.setAttribute("aria-label",y.name),v.dataset.presentation=y.presentation.type,v.style.width=y.presentation.type==="fullscreen"?"100vw":`${yt[y.presentation.size]}px`,y.presentation.type==="fullscreen"?v.style.cssText+=";max-width:100vw;max-height:100dvh;height:100dvh;margin:0;border-radius:0":y.presentation.type==="sheet"&&(v.style.cssText+=";margin:auto auto 0;max-width:100vw;max-height:100dvh;border-radius:14px 14px 0 0"),v.style.background=y.theme.background;let N=document.createElement("button");N.type="button",N.textContent="\xD7",N.setAttribute("aria-label",Et(I));let{frame:H,post:F,accept:W}=Pt("live",y.name,void 0,p.rendererUrl),x=!1,L=!1,$=X=>{y.presentation.type!=="fullscreen"&&(v.style.height=`min(${Math.max(X,40)}px, calc(100dvh - ${y.presentation.type==="sheet"?0:32}px))`)};function te(X){try{Promise.resolve(p.onEvent?.(X)).catch(M=>V(p.onError,M))}catch(M){V(p.onError,M)}}function j(){return x?!1:(x=!0,pe(),window.removeEventListener("message",se),v.close(),C.remove(),Ye.delete(document),T instanceof HTMLElement&&T.isConnected&&T.focus({preventScroll:!0}),!0)}function ee(X){j()&&te({type:"closed",reason:X})}function se(X){let M=x?null:W(X);if(M){if(M.type==="ready")F({type:"render",doc:y,locale:I,capabilities:p.capabilities});else if(M.type==="rendered"&&!L)L=!0,pe(),$(M.height),M.label&&v.setAttribute("aria-label",M.label),v.showModal(),N.focus(),te({type:"shown"});else if(M.type==="resize"&&L)$(M.height);else if(M.type==="copy"&&L){let E=xe(y,M.nodeId),ne=mt(p.capabilities,M.nodeId);E?.type==="coupon_code"&&ne?.code&&navigator.clipboard?.writeText(ne.code).catch(()=>{})}else if(M.type==="escape"&&L)ee("escape");else if(M.type==="action"&&L&&typeof M.actionId=="string"){let E=y.actions.find(ne=>ne.id===M.actionId);if(!E)return;if(E.close&&j(),te({type:"action",actionId:E.id,...typeof M.nodeId=="string"&&xe(y,M.nodeId)?{nodeId:M.nodeId}:{},name:E.event,properties:{...E.properties},...M.selection?{selection:Ve(y,M.selection,p.capabilities)}:{}}),E.type==="open_url")try{aa(E.url)}catch(ne){V(p.onError,ne)}E.close&&te({type:"closed",reason:"action"})}}}let pe=Ge(document,()=>{V(p.onError,new Error("Web View renderer did not start")),ee("timeout")}),le={destroy:()=>ee("destroy"),updateCapabilities:X=>{let M=Re(X,y,window);p.capabilities=M,F({type:"capabilities",capabilities:M})}};return ta.set(le,X=>{x||F({type:"restore-action-focus",nodeId:X})}),N.addEventListener("click",()=>ee("close_button")),v.addEventListener("cancel",X=>{X.preventDefault(),ee("escape")}),v.append(N,H),P.append(b,v),window.addEventListener("message",se),Ye.set(document,le),document.body.append(C),le}function Sa(c,p={}){let A=(()=>{let R=c.ownerDocument.defaultView;if(!R)throw new Error("Preview container has no browser window");return R})(),I=p.mode??"editor",{frame:y,post:T,accept:C}=Pt(I,p.title??"\u5F39\u7A97\u9884\u89C8",p.editorMessages,p.rendererUrl,c.ownerDocument,p.screenUrl);y.style.cssText="display:block;border:0;width:100%;height:0";let P=!1,b=null,v=null,N=!1,H,F,W=new Promise((R,k)=>{H=R,F=k});W.catch(()=>{});let x=Ge(c.ownerDocument,()=>{if(N||P)return;let R=new Error("Web View renderer did not start");F(R),V(p.onError,R.message),L()});function L(){N||(N=!0,x(),P||F(new Error("Web View mount cancelled")),window.removeEventListener("message",ne),P=!1,b=null,v=null,$=null,j=null,ee=null,te=void 0,pe.clear(),y.remove(),y.removeAttribute("srcdoc"),y.removeAttribute("src"))}let $=null,te,j=null,ee=null,se="modal",pe=new Set,le=p.viewportHeight,X=0,M=R=>{X=R;let k=le,S=k?se==="fullscreen"?k:Math.max(1,Math.min(R,k-(se==="sheet"?0:32))):R;y.style.height=`${S}px`,V(p.onResize,S)};function E(R){if(!te)return;let k=xt.safeParse(R);if(!k.success||Object.keys(k.data).some(S=>!te.bindings.some(ae=>ae.key===S))){V(p.onError,"Invalid current-screen answers");return}return k.data}function ne(R){let k=N?null:C(R);if(k)if(k.type==="ready"){if(p.screenUrl){let S=$e.safeParse(k.document);if(!S.success){V(p.onError,"Invalid published screen render"),L();return}j=Ne(S.data,A),y.title=j.name}if(P=!0,x(),H(),ee){let[,S,ae]=ee;ee=null,ue.update(null,S,ae)}b&&T(b),v&&T(v)}else if(k.type==="rendered"||k.type==="resize")M(k.height),k.type==="rendered"&&V(p.onRendered);else if(k.type==="layout"&&I==="editor")Array.isArray(k.nodes)&&k.nodes.length<=($?De.nodes:0)&&k.nodes.every(S=>S&&typeof S.id=="string"&&/^[a-zA-Z][a-zA-Z0-9_-]{0,63}$/.test(S.id)&&[S.x,S.y,S.width,S.height].every(ae=>typeof ae=="number"&&Number.isFinite(ae))&&S.width>0&&S.height>0)&&V(p.onLayout,k.nodes);else if(k.type==="page"&&I==="live"&&pe.has(k.pageId))V(p.onPageChange,k.pageId);else if(k.type==="escape"&&I==="live")V(p.onEscape);else if(k.type==="hover")V(p.onHover,k.id);else if(k.type==="select")V(p.onSelect,k.id);else if(k.type==="edit")V(p.onEdit,k.id);else if(k.type==="key"&&I==="editor"){let S=k.key;S&&typeof S.key=="string"&&S.key.length<=16&&(S.phase==="down"||S.phase==="up")&&[S.meta,S.ctrl,S.shift,S.alt].every(ae=>typeof ae=="boolean")&&V(p.onKey,{key:S.key,phase:S.phase,meta:S.meta,ctrl:S.ctrl,shift:S.shift,alt:S.alt})}else if(k.type==="zoom"&&I==="editor"&&typeof k.delta=="number"&&Number.isFinite(k.delta))V(p.onZoom,k.delta);else if(k.type==="customer-data-intent"&&I==="live"&&$){let S=ht.safeParse(k.intent);S.success&&xe($,S.data.nodeId)?.type==="customer_data"&&V(p.onCustomerDataIntent,S.data)}else if(k.type==="answers"&&I==="live"&&te){let S=E(k.answers);S&&V(p.onAnswers,S)}else if(k.type==="action"&&$?.actions.some(S=>S.id===k.actionId)){let S=E(k.answers);if(te&&!S)return;V(p.onAction,k.actionId,Ve($,k.selection,b?.type==="render"?b.capabilities:void 0),S)}else k.type==="error"&&V(p.onError,k.message)}window.addEventListener("message",ne),c.append(y);let ue={ready:W,get document(){return $},updateCustomerData(R){if(N||!$)return;let k=Be.parse(R),S={nodes:Object.fromEntries(Object.entries(k.nodes).filter(([ae,me])=>{let Z=xe($,ae);return Z?.type==="customer_data"&&Z.data.source===me.source}))};b?.type==="render"&&(b.customerData=S),P&&T({type:"customer-data",data:S})},updateCapabilities(R){if(N||!$)return;let k=Re(R,$,A);k&&(b?.type==="render"&&JSON.stringify(b.capabilities)===JSON.stringify(k)||(b?.type==="render"&&(b.capabilities=k),P&&T({type:"capabilities",capabilities:k})))},update(R,k,S){if(N)return;if(p.screenUrl?R!==null:R===null){V(p.onError,"A published screen render takes its document from the frame");return}if(R===null&&!j){ee=[null,k,S];return}let ae=R??j,me;try{let Z=R?Ne(ae,A):ae,Ee=I==="live"&&!!S?.serverInput,ve=Ee?qe(Z,[k]):k,q=Ee?Je(Z,ve):Z,ge=S?.serverInput?kt.parse(S.serverInput):void 0;if(ge&&(Z.surface!=="paywall"&&Z.pages.length!==1||Z.actions.some(de=>de.type!=="event"&&!(Z.surface==="paywall"&&de.type==="navigate")||de.close)||ge.bindings.some(de=>{let K=xe(Z,de.componentId);return K?.type!=="stack"||!K.interaction||!["input","multiselect","select","tabs","toggle"].includes(K.interaction.type)})))throw new Error("Current Funnel input requires one screen with bound interactive controls and output actions");$=q,te=ge,se=Z.presentation.type,pe=new Set(Z.pages.map(de=>de.id)),me={type:"render",...p.screenUrl?{}:{doc:q},...ge?{serverInput:ge}:{},locale:ve,parameters:vt.parse(S?.parameters??{}),capabilities:Re(S?.capabilities,Z,A),...S?.selection?{selection:S.selection}:{},customerData:S?.customerData?Be.parse(S.customerData):void 0},se==="fullscreen"&&le&&M(le)}catch(Z){V(p.onError,Z instanceof Error?Z.message:"\u5185\u5BB9\u4E0D\u6B63\u786E");return}b=me,P&&T(me)},resizeViewport(R){N||!Number.isFinite(R)||R<=0||(le=R,M(X))},highlight(R,k){N||(v={type:"highlight",hoverId:R,selectedId:k},P&&T(v))},destroy:L};return ue}export{ea as formatCustomerDecimal,Qt as hostedRendererScript,Xt as hostedScreenScript,Gt as inspectCustomHtml,Sa as mountScreenPreview,Ne as prepareScreen,Zt as sanitizeCustomHtml,ka as showPopup};
package/dist/server.d.ts CHANGED
@@ -1,5 +1,6 @@
1
1
  import 'zod';
2
- export { e as FeatureClient, f as FeatureClientOptions, n as FunnelDecisionInput, o as FunnelDecisionTimeoutError, p as FunnelDecisionUsedInput, g as FunnelNodeEvaluationContext, q as FunnelSignalInput, d as FunnelStartInput, h as IndianaError, r as IndianaServerOptions, k as createFeatureClient, s as createFunnelCampaignClient, t as createFunnelDecisionClient, u as createFunnelOrchestrationClient, v as createFunnelStartClient, w as createGuestToken, x as createIndianaServer, y as createNativeReceiptClient, z as createPaywallStartClient, m as evaluateFunnelNode, A as renewFunnelRun } from './funnel-runtime-start-DvrWekm0.js';
3
- export { e as AiPricingOptions, d as AiTokenQuote, b as AiTokenUsage, a as AiUsageContext, f as AiUsageMiddlewareOptions, g as AiUsageRecord, h as aiPriceSnapshotSchema, i as aiTokenQuoteSchema, c as createAiPricing, j as createAiUsageMiddleware, k as createConfiguredAiPricing } from './ai-usage-CO0lDavO.js';
4
- import './screen-DfuSw6Tz.js';
2
+ export { f as FeatureClient, d as FeatureClientOptions, n as FunnelDecisionInput, o as FunnelDecisionTimeoutError, p as FunnelDecisionUsedInput, g as FunnelNodeEvaluationContext, q as FunnelSignalInput, e as FunnelStartInput, h as IndianaError, r as IndianaServerOptions, k as createFeatureClient, s as createFunnelCampaignClient, t as createFunnelDecisionClient, u as createFunnelOrchestrationClient, v as createFunnelStartClient, w as createGuestToken, x as createIndianaServer, y as createNativeReceiptClient, z as createPaywallStartClient, m as evaluateFunnelNode, A as renewFunnelRun } from './funnel-runtime-start-CQhy2kx1.js';
3
+ export { e as AiPricingOptions, d as AiTokenQuote, b as AiTokenUsage, a as AiUsageContext, f as AiUsageMiddlewareOptions, g as AiUsageRecord, h as aiPriceSnapshotSchema, i as aiTokenQuoteSchema, c as createAiPricing, j as createAiUsageMiddleware, k as createConfiguredAiPricing } from './ai-usage-D_mBF5Gp.js';
4
+ import './screen-Keau_Qa2.js';
5
+ import './growth-rules-D64pEvg9.js';
5
6
  import '@ai-sdk/provider';
package/dist/server.js CHANGED
@@ -1 +1 @@
1
- import{a as k,c as te,d as T,e as pe,f as de}from"./chunk-ULRVTA45.js";import{a as o,b as I}from"./chunk-EZFAY4ZL.js";import{Ag as j,Bg as Q,Cg as K,Dg as G,Eg as z,G as O,Gj as b,Hj as W,Ji as P,Ki as $,Lh as c,Mi as Y,Mj as Z,Oj as J,Qi as C,Ri as _,Si as H,Uk as X,Vk as ee}from"./chunk-YOH6DIUN.js";function p(n,r){try{return n.parse(r)}catch{throw new o("INVALID_RESPONSE","Invalid gateway response")}}function le(n){if(typeof window<"u")throw new o("SERVER_ONLY","Secret API keys must stay on the backend");return{start:r=>te(n,r)}}var S=class extends o{constructor(t,e){super("DECISION_PENDING","Decision is still pending; read this decision ID or retry the original request ID",202,e);this.decisionId=t;this.decisionRequestId=e}decisionId;decisionRequestId};function U(n){if("remoteEval"in n)throw new o("INVALID_REQUEST","Configure evaluation mode on the Funnel; remoteEval is not supported");if(typeof window<"u")throw new o("SERVER_ONLY","Funnel decisions are requested by your backend");if(!/^gg_sk_[A-Za-z0-9_-]{32,128}$/.test(n.apiKey))throw new o("INVALID_TOKEN","A server API key is required");async function r(a,s,i=!1){let u=I({...n,fetch:(m,f)=>{let d=new Headers(f?.headers);return d.set("Accept-Encoding","identity"),i&&d.set("Prefer","respond-async"),(n.fetch??globalThis.fetch)(m,{...f,headers:d})},timeoutMs:Math.min(n.timeoutMs??1e4,s?Math.max(1,s-Date.now()):12e4)});return u.identify(n.apiKey),u.request("funnels",a)}async function t(a,s){let i=_.parse(await r(C.parse({operation:"read_decision",decisionId:a}),s));if(i.decisionId!==a)throw new o("INVALID_RESPONSE","Decision identity changed");return i}async function e(a,s,i=!1){let u=C.options[0].parse({...a,operation:"decide",funnelId:n.funnelId}),m;try{m=_.parse(await r(u,s,i))}catch(f){throw f instanceof o&&["TIMEOUT","NETWORK_ERROR","SERVICE_UNAVAILABLE"].includes(f.code)?new o("DECISION_ACCEPTANCE_UNKNOWN","Decision acceptance is unknown; retry the original request ID and input",f.status,a.requestId):f}if(m.requestId!==a.requestId||m.decision&&!k(m.decision,u.customer))throw new o("INVALID_RESPONSE","Decision request or customer changed");return{response:m,customer:u.customer}}return{async configuration(){let a=J.parse(await r({operation:"configuration",funnelId:n.funnelId}));if(a.scope.projectId!==n.scope.projectId||a.scope.environment!==n.scope.environment||a.funnelId!==n.funnelId)throw new o("SCOPE_MISMATCH","Configuration scope changed");return a},features(a={}){return T({...a,scope:n.scope,load:async()=>Z.parse(await r({operation:"feature_config",funnelId:n.funnelId}))})},read:a=>t(a),async submit(a){return(await e(a,void 0,!0)).response},async decide(a){let s=Date.now()+3e4,i=await e(a,s),u=i.response,m=u.decisionId,f=250;for(;;){if(u.requestId!==a.requestId||u.decision&&!k(u.decision,i.customer))throw new o("INVALID_RESPONSE","Decision request or customer changed");if(u.decision)return u.decision;if(u.status==="failed")throw new o("DECISION_FAILED","Decision execution failed",503,a.requestId);if(Date.now()>=s)throw new S(m,a.requestId);if(await new Promise(d=>setTimeout(d,Math.min(f,s-Date.now()))),Date.now()>=s)throw new S(m,a.requestId);try{f=Math.min(1e3,f*2),u=await t(m,s)}catch(d){if(d instanceof o&&["TIMEOUT","NETWORK_ERROR","SERVICE_UNAVAILABLE","RATE_LIMITED"].includes(d.code))continue;throw d}}},async reportUsed(a){let s=H.parse(await r(C.parse({...a,operation:"report_used"})));if(s.decisionId!==a.decisionId||s.eventId!==a.eventId)throw new o("INVALID_RESPONSE","Usage receipt identity changed");return s}}}function me(n){if(typeof window<"u")throw new o("SERVER_ONLY","Native receipts are verified by your backend");if(!/^gg_sk_[A-Za-z0-9_-]{32,128}$/.test(n.apiKey))throw new o("INVALID_TOKEN","Server API key required");let r=I({...n,timeoutMs:n.timeoutMs??35e3});return r.identify(n.apiKey),{async recover(t){let e=X.parse(t);if(e.orderId!==e.receiptId)throw new o("INVALID_REQUEST","Native recovery requires the accepted commercial intent");let a=e.nativeEvidence,s={requestId:e.requestId,customerToken:e.customerToken,purchaseIntentId:e.orderId,...a===null?{intent:"read"}:a.provider==="apple"?{provider:"apple",signedTransaction:a.signedTransaction}:{provider:"google",purchaseToken:a.purchaseToken}},i=c.restoreNativePurchase.response.parse(await r.request(c.restoreNativePurchase.path,s));if(i.operation.requestId!==e.requestId)throw new o("INVALID_RESPONSE","Native receipt request identity changed");let u=ee.parse({scope:i.scope,requestId:e.requestId,orderId:i.operation.orderId,receiptId:i.operation.orderId,orderStatus:i.operation.status,refunded:i.operation.refunded,...i.operation.completion===null?{}:{nativeCompletion:{orderId:i.operation.orderId,receiptId:i.operation.orderId,...i.operation.completion}}});if(u.requestId!==e.requestId||u.orderId!==e.orderId||u.receiptId!==e.receiptId||u.scope.projectId!==n.scope.projectId||u.scope.environment!==n.scope.environment)throw new o("INVALID_RESPONSE","Current order receipt scope changed");return u}}}import{z as l}from"zod";var q=j,fe=l.string().regex(/^(0|[1-9]\d{0,5})(\.\d{1,12})?$/),se=l.strictObject(Object.fromEntries(q.map(n=>[n,l.number().int().nonnegative().max(1e9)]))),ie=Q,we=K,D=l.strictObject({modelId:ie,source:l.enum(["models.dev","custom"]),fetchedAt:l.iso.datetime(),rates:G,contextTier:l.number().int().nonnegative(),markupPercent:we}),x=l.strictObject({pricing:D,tokens:se,quantity:O,digest:l.string().regex(/^[a-f0-9]{64}$/)}),oe=n=>{let[r,t=""]=n.split(".");return BigInt(r)*10n**12n+BigInt(t.padEnd(12,"0"))};function Ie(n){if(typeof n!="number"||!Number.isFinite(n)||n<0)throw new o("AI_PRICE_UNAVAILABLE","A published token price is missing");let r=String(n),t=r.includes("e")?n.toFixed(12).replace(/0+$/,"").replace(/\.$/,""):r;if(Number(t)!==n||!fe.safeParse(t).success)throw new o("AI_PRICE_UNAVAILABLE","Published price exceeds the supported precision");return t}var ne=l.strictObject({input:l.number().nonnegative(),output:l.number().nonnegative(),cache_read:l.number().nonnegative().optional(),cache_write:l.number().nonnegative().optional(),reasoning:l.number().nonnegative().optional(),input_audio:l.number().nonnegative().optional(),output_audio:l.number().nonnegative().optional()}),ge=ne.extend({context_over_200k:l.unknown().optional(),tiers:l.array(ne.extend({tier:l.strictObject({type:l.literal("context"),size:l.number().int().nonnegative()})})).max(20).refine(n=>new Set(n.map(r=>r.tier.size)).size===n.length).optional()});async function re(n,r,t){let e=new TextEncoder().encode(JSON.stringify({pricing:n,tokens:r,quantity:t}));return[...new Uint8Array(await crypto.subtle.digest("SHA-256",e))].map(a=>a.toString(16).padStart(2,"0")).join("")}function ae(n,r){let t=0n;for(let w of q){if(!r[w])continue;let g=n.rates[w];if(g===void 0)throw new o("AI_PRICE_UNAVAILABLE",`No published price for ${w}; report exclusive token pools`);t+=oe(g)*BigInt(r[w])}let[e,a="0"]=String(n.markupPercent).split("e"),s=(e.split(".")[1]?.length??0)-Number(a),i=10n**BigInt(Math.max(s,0)),u=BigInt(e.replace(".",""))*10n**BigInt(Math.max(-s,0)),m=100n*i+u,f=100n*i*1000000n,d=(t*m+f-1n)/f;return O.parse(`${d/1000000n}.${(d%1000000n).toString().padStart(6,"0")}`)}function ce(n={}){if(typeof window<"u")throw new o("SERVER_ONLY","AI token pricing belongs on your backend");let r=z.parse({defaultMarkup:n.defaultMarkup??0,providerMarkups:n.providerMarkups??{},modelMarkups:n.modelMarkups??{},customModels:n.customModels??{}}),t=null,e=0;async function a(){if(!t||Date.now()>=e){e=Date.now()+15*6e4;let s=(async()=>{let i=await(n.fetch??fetch)("https://models.dev/api.json",{signal:AbortSignal.timeout(3e4)});if(!i.ok)throw new o("AI_PRICE_UNAVAILABLE","Models.dev pricing is unavailable");return{data:l.record(l.string(),l.object({models:l.record(l.string(),l.unknown())})).parse(await i.json()),fetchedAt:new Date().toISOString()}})().catch(i=>{throw t===s&&(t=null),i});t=s}return t}return{refreshPrices(){t=null,e=0},async quoteTokens(s){let i=ie.parse(s.modelId),u=se.parse(s.tokens),[m,...f]=i.split("/"),d=r.customModels[i],w,g,y,L=0;if(d?.input!==void 0&&d.output!==void 0&&q.every(E=>u[E]===0||d[E]!==void 0))w={...d,input:d.input,output:d.output},g="custom",y=new Date().toISOString();else{let E=await a(),F=E.data[m]?.models[f.join("/")];if(!F)throw new o("AI_PRICE_UNAVAILABLE","Unknown model; configure a complete custom price");let{cost:v}=l.object({cost:ge}).parse(F),M=u.input+u.cache_read+u.cache_write+u.input_audio;if(v.tiers===void 0&&v.context_over_200k!==void 0&&M>2e5)throw new o("AI_PRICE_UNAVAILABLE","A current context tier is required for this model");let N=v.tiers?.filter(h=>M>h.tier.size).sort((h,ue)=>ue.tier.size-h.tier.size)[0],B=N??v;N&&(L=N.tier.size),w=Object.fromEntries(q.filter(h=>B[h]!==void 0).map(h=>[h,Ie(B[h])])),w={...w,...d},g=d?"custom":"models.dev",y=E.fetchedAt}let R=D.parse({modelId:i,source:g,fetchedAt:y,rates:w,contextTier:L,markupPercent:r.modelMarkups[i]??r.providerMarkups[m]??r.defaultMarkup}),V=ae(R,u);return x.parse({pricing:R,tokens:u,quantity:V,digest:await re(R,u,V)})},async trackTokens(s,i){let u=x.parse(i.quote);if(u.quantity!==ae(u.pricing,u.tokens)||u.digest!==await re(u.pricing,u.tokens,u.quantity))throw new o("INVALID_REQUEST","AI quote changed after pricing");let m=i.properties??{},f=i.providerCostUsd===void 0?void 0:l.string().regex(/^(0|[1-9]\d{0,11})(\.\d{1,18})?$/).parse(i.providerCostUsd),d=i.generationId===void 0?void 0:l.string().min(1).max(120).parse(i.generationId),w=8+ +(f!==void 0)+ +(d!==void 0);if(Object.keys(m).some(y=>y.startsWith("ai_")))throw new o("INVALID_REQUEST","AI tracking reserves ai_ event properties");if(Object.keys(m).length>16-w)throw new o("INVALID_REQUEST","AI tracking properties exceed the available event budget");let g={operation:"consume",internal_feature_id:i.internal_feature_id,quantity:u.quantity,idempotencyKey:i.idempotencyKey,properties:{...m,...f!==void 0?{ai_provider_cost_usd:f}:{},...d!==void 0?{ai_generation_id:d}:{},ai_model:u.pricing.modelId,ai_source:u.pricing.source,ai_price_at:u.pricing.fetchedAt,ai_quote_hash:u.digest,ai_markup:String(u.pricing.markupPercent),ai_tier:String(u.pricing.contextTier),ai_tokens:q.map(y=>u.tokens[y]).join(","),ai_rates:"v1:"+q.map(y=>u.pricing.rates[y]===void 0?"-":oe(u.pricing.rates[y]).toString(36)).join(",")},...i.entityId?{entityId:i.entityId}:{}};return s.mutateBalance({customerId:i.customerId,command:g})}}}async function ye(n,r,t={}){let{config:e,model_markups:a}=await n.readAiPricing(r);return ce({defaultMarkup:e.default_markup??0,providerMarkups:Object.fromEntries(Object.entries(e.provider_markups??{}).map(([s,i])=>[s,i.markup])),modelMarkups:Object.fromEntries(Object.entries(a??{}).filter(([,s])=>s.markup!==void 0).map(([s,i])=>[s,i.markup])),customModels:Object.fromEntries(Object.entries(a??{}).filter(([,s])=>s.input_cost!==void 0||s.output_cost!==void 0).map(([s,i])=>[s,{...i.input_cost!==void 0?{input:String(i.input_cost)}:{},...i.output_cost!==void 0?{output:String(i.output_cost)}:{}}])),...t})}import{z as he}from"zod";var A=he.number().int().min(0).max(Number.MAX_SAFE_INTEGER);function Se(n,r){let t=A.parse(n.inputTokens.total),e=A.parse(n.outputTokens.total),a=A.parse(n.inputTokens.cacheRead??0),s=A.parse(n.inputTokens.cacheWrite??0),i=A.parse(n.outputTokens.reasoning??0);if(a+s>t||i>e||n.inputTokens.noCache!==void 0&&A.parse(n.inputTokens.noCache)!==t-a-s||n.outputTokens.text!==void 0&&A.parse(n.outputTokens.text)!==e-i)throw new o("AI_USAGE_UNAVAILABLE","Provider token counts do not conserve total usage");return{input:t-a-s,cache_read:a,cache_write:s,output:r==="output"?e:e-i,reasoning:r==="separate"?i:0,input_audio:0,output_audio:0}}function Ae(n){if(typeof window<"u")throw new o("SERVER_ONLY","AI usage belongs on the trusted backend");if(!n.modelId||!["output","separate"].includes(n.reasoning))throw new o("INVALID_REQUEST","Model ID and reasoning pricing are required");async function r(e){await n.persist({context:e,modelId:n.modelId,usage:null,tokens:null,quote:null,receipt:null,phase:"incomplete"})}async function t(e,a){let s={context:e,modelId:n.modelId,usage:a,tokens:null,quote:null,receipt:null,phase:"captured"};await n.persist(s);let i=n.mapTokens?n.mapTokens(a):Se(a,n.reasoning),u=await n.pricing.quoteTokens({modelId:n.modelId,tokens:i});await n.persist({...s,tokens:i,quote:u,phase:"quoted"});let m=await n.pricing.trackTokens(n.client,{...e,quote:u});if(!m.receipt.accepted)throw new o("AI_BALANCE_REJECTED","AI usage was captured but the balance operation was rejected");await n.persist({...s,tokens:i,quote:u,receipt:m,phase:"settled"})}return{specificationVersion:"v4",async wrapGenerate({doGenerate:e}){let a=await n.context(),s;try{s=await e()}catch(i){throw await r(a),i}return await t(a,s.usage),s},async wrapStream({doStream:e}){let a=await n.context(),s;try{s=await e()}catch(d){throw await r(a),d}let i=!1,u=!1,m=s.stream.getReader();async function f(){i||u||(u=!0,await r(a))}return{...s,stream:new ReadableStream({async pull(d){try{let{value:w,done:g}=await m.read();if(g){if(!i)throw await f(),new o("AI_USAGE_UNAVAILABLE","Stream ended without final usage; no amount was invented");d.close();return}if(w.type==="finish"){if(i)throw new o("AI_USAGE_UNAVAILABLE","Provider sent more than one final usage record");i=!0,await t(a,w.usage)}d.enqueue(w)}catch(w){try{await f()}finally{d.error(w),await m.cancel(w)}}},async cancel(d){try{await f()}finally{await m.cancel(d)}}})}}}}function qe(n){if(typeof window<"u")throw new o("SERVER_ONLY","Funnel receipts are sent by your backend");if(!/^gg_sk_[A-Za-z0-9_-]{32,128}$/.test(n.apiKey))throw new o("INVALID_TOKEN","A server API key is required");let r=I(n);return r.identify(n.apiKey),{async signal(t){let e=P.parse({...t,operation:"signal"}),a=$.parse(await r.request("funnels",e));if(a.runId!==t.runId||a.eventId!==t.eventId||a.scope.projectId!==n.scope.projectId||a.scope.environment!==n.scope.environment)throw new o("INVALID_RESPONSE","Receipt identity changed");return a},async readResults(t){let e=P.parse({operation:"read_results",runId:t}),a=Y.parse(await r.request("funnels",e));if(a.runId!==t||a.scope.projectId!==n.scope.projectId||a.scope.environment!==n.scope.environment)throw new o("INVALID_RESPONSE","Result identity changed");return a}}}function Ee(n){if(typeof window<"u")throw new o("SERVER_ONLY","Campaign entry requires your backend");if(!/^gg_sk_[A-Za-z0-9_-]{32,128}$/.test(n.apiKey))throw new o("INVALID_TOKEN","A server API key is required");let r=I({...n,timeoutMs:n.timeoutMs??35e3});r.identify(n.apiKey);let t=U(n);return{async decide(e){let a=b.parse({...e,funnelId:n.funnelId,operation:"campaign_decide"}),s=_.parse(await r.request("funnels",a));if(s.scope.projectId!==n.scope.projectId||s.scope.environment!==n.scope.environment)throw new o("SCOPE_MISMATCH","Campaign scope changed");let i=s.decisionId,u=s.requestId,m=Date.now()+(n.timeoutMs??3e4);for(;s.status==="pending";){if(Date.now()>=m)throw new S(i,u);if(await new Promise(f=>setTimeout(f,250)),s=await t.read(i),s.requestId!==u)throw new o("INVALID_RESPONSE","Campaign decision identity changed")}if(s.status==="failed")throw new o("DECISION_FAILED","Campaign decision execution failed");if(!s.decision||!k(s.decision,a.customer))throw new o("INVALID_RESPONSE","Campaign Customer changed");return s.decision},async start(e){let a=b.parse({...e,funnelId:n.funnelId,operation:"campaign_start"}),s=W.parse(await r.request("funnels",a));if(s.scope.projectId!==n.scope.projectId||s.scope.environment!==n.scope.environment)throw new o("SCOPE_MISMATCH","Campaign scope changed");if(!("suppressed"in s)&&(s.run.source.id!==n.funnelId||!s.customerId||a.customer.type==="id"&&s.customerId!==a.customer.value))throw new o("INVALID_RESPONSE","Campaign Funnel or Customer changed");return s}}}function tt(){if(typeof window<"u")throw new o("SERVER_ONLY","Guest identity is issued by your backend");let n=crypto.getRandomValues(new Uint8Array(32));return"gg_gc_"+btoa(String.fromCharCode(...n)).replaceAll("+","-").replaceAll("/","_").replaceAll("=","")}function nt(n){if(typeof window<"u")throw new o("SERVER_ONLY","Secret API keys must stay on your backend");let r=I(n);return r.identify(n.apiKey),{async resolvePaywall(t){let e=c.resolvePaywall;return p(e.response,await r.request(e.path,e.request.parse(t)))},async resolveOffering(t){let e=c.resolveOffering;return p(e.response,await r.request(e.path,e.request.parse(t)))},async checkEntitlement(t){let e=c.checkEntitlement;return p(e.response,await r.request(e.path,e.request.parse(t)))},async setupPayment(t){let e=c.setupPayment;return p(e.response,await r.request(e.path,e.request.parse(t)))},async readPaymentSetup(t){let e=c.readPaymentSetup;return p(e.response,await r.request(e.path,e.request.parse(t)))},async previewSubscriptionBatch(t){let e=c.previewSubscriptionBatch;return p(e.response,await r.request(e.path,e.request.parse(t)))},async confirmSubscriptionBatch(t){let e=c.confirmSubscriptionBatch;return p(e.response,await r.request(e.path,e.request.parse(t)))},async readSubscriptionBatch(t){let e=c.readSubscriptionBatch;return p(e.response,await r.request(e.path,e.request.parse(t)))},async abandonSubscriptionBatch(t){let e=c.abandonSubscriptionBatch;return p(e.response,await r.request(e.path,e.request.parse(t)))},async manageSubscriptionTrial(t){let e=c.manageSubscriptionTrial;return p(e.response,await r.request(e.path,e.request.parse(t)))},async readSubscriptionTrial(t){let e=c.readSubscriptionTrial;return p(e.response,await r.request(e.path,e.request.parse(t)))},async listSubscriptions(t){let e=c.listSubscriptions;return p(e.response,await r.request(e.path,e.request.parse(t)))},async listPurchases(t){let e=c.listPurchases;return p(e.response,await r.request(e.path,e.request.parse(t)))},async listSubscriptionConflicts(t){let e=c.listSubscriptionConflicts;return p(e.response,await r.request(e.path,e.request.parse(t)))},async retrySubscriptionConflict(t){let e=c.retrySubscriptionConflict;return p(e.response,await r.request(e.path,e.request.parse(t)))},async previewRefund(t){let e=c.previewRefund;return p(e.response,await r.request(e.path,e.request.parse(t)))},async refund(t){let e=c.refund;return p(e.response,await r.request(e.path,e.request.parse(t)))},async readRefund(t){let e=c.readRefund;return p(e.response,await r.request(e.path,e.request.parse(t)))},async previewUpdate(t){let e=c.previewUpdate;return p(e.response,await r.request(e.path,e.request.parse(t)))},async update(t){let e=c.update;return p(e.response,await r.request(e.path,e.request.parse(t)))},async readSubscriptionUpdate(t){let e=c.readSubscriptionUpdate;return p(e.response,await r.request(e.path,e.request.parse(t)))},async restoreNativePurchase(t){let e=c.restoreNativePurchase;return p(e.response,await r.request(e.path,e.request.parse(t)))},async verifySubscriptions(t){let e=c.verifySubscriptions;return p(e.response,await r.request(e.path,e.request.parse(t)))},async previewAttach(t){let e=c.previewAttach;return p(e.response,await r.request(e.path,e.request.parse(t)))},async attach(t){let e=c.attach;return p(e.response,await r.request(e.path,e.request.parse(t)))},async readSubscriptionOperation(t){let e=c.readSubscriptionOperation;return p(e.response,await r.request(e.path,e.request.parse(t)))},async readAiPricing(t){let e=c.readAiPricing;return p(e.response,await r.request(e.path,e.request.parse(t)))},async readUsage(t){let e=c.readUsage;return p(e.response,await r.request(e.path,e.request.parse(t)))},async setUsage(t){let e=c.setUsage;return p(e.response,await r.request(e.path,e.request.parse(t)))},async manageBalanceGrant(t){let e=c.manageBalanceGrant;return p(e.response,await r.request(e.path,e.request.parse(t)))},async readBalanceSource(t){let e=c.readBalanceSource;return p(e.response,await r.request(e.path,e.request.parse(t)))},async adjustBalance(t){let e=c.adjustBalance;return p(e.response,await r.request(e.path,e.request.parse(t)))},async listBalanceGrants(t){let e=c.listBalanceGrants;return p(e.response,await r.request(e.path,e.request.parse(t)))},async manageBillingLimits(t){let e=c.manageBillingLimits;return p(e.response,await r.request(e.path,e.request.parse(t)))},async readSeats(t){let e=c.readSeats;return p(e.response,await r.request(e.path,e.request.parse(t)))},async manageSeat(t){let e=c.manageSeat;return p(e.response,await r.request(e.path,e.request.parse(t)))},async manageUsageEntity(t){let e=c.manageUsageEntity;return p(e.response,await r.request(e.path,e.request.parse(t)))},async readUsageAnalytics(t){let e=c.readUsageAnalytics;return p(e.response,await r.request(e.path,e.request.parse(t)))},async readCreditAnalytics(t){let e=c.readCreditAnalytics;return p(e.response,await r.request(e.path,e.request.parse(t)))},async submitUsageBatch(t){let e=c.submitUsageBatch;return p(e.response,await r.request(e.path,e.request.parse(t)))},async readUsageBatch(t){let e=c.readUsageBatch;return p(e.response,await r.request(e.path,e.request.parse(t)))},async readHoldings(t){let e=c.readHoldings;return p(e.response,await r.request(e.path,e.request.parse(t)))},async readLedger(t){let e=c.readLedger;return p(e.response,await r.request(e.path,e.request.parse(t)))},async readBillingInvoice(t){let e=c.readBillingInvoice;return p(e.response,await r.request(e.path,e.request.parse(t)))},async readCreditStatement(t){let e=c.readCreditStatement;return p(e.response,await r.request(e.path,e.request.parse(t)))},async quoteBalance(t){let e=c.quoteBalance;return p(e.response,await r.request(e.path,e.request.parse(t)))},async trackUsage(t){let e=c.trackUsage;return p(e.response,await r.request(e.path,e.request.parse(t)))},async mutateBalance(t){let e=c.mutateBalance;return p(e.response,await r.request(e.path,e.request.parse(t)))},async getCustomer(t){let e=c.getCustomer,a=e.request.safeParse(t);if(!a.success)throw new o("INVALID_REQUEST","Invalid customer lookup");let s=e.response.safeParse(await r.request(e.path,a.data));if(!s.success)throw new o("INVALID_RESPONSE","Invalid customer response");return s.data},async listCustomers(t={}){let e=c.listCustomers,a=e.request.safeParse(t);if(!a.success)throw new o("INVALID_REQUEST","Invalid customer filters");let s=e.response.safeParse(await r.request(e.path,a.data));if(!s.success)throw new o("INVALID_RESPONSE","Invalid customer response");return s.data},async updateCustomer(t){let e=c.updateCustomer,a=e.request.safeParse(t);if(!a.success)throw new o("INVALID_REQUEST","Invalid customer patch");let s=e.response.safeParse(await r.request(e.path,a.data));if(!s.success)throw new o("INVALID_RESPONSE","Invalid customer response");return s.data},async createGuestCustomer(t){let e=c.createGuestCustomer;return e.response.parse(await r.request(e.path,e.request.parse(t)))},async resumeGuestSession(t){let e=c.resumeGuestSession;return e.response.parse(await r.request(e.path,e.request.parse(t)))},async claimGuestCustomer(t){let e=c.claimGuestCustomer;return e.response.parse(await r.request(e.path,e.request.parse(t)))},async renewCustomerSession(t){let e=c.renewSession;return e.response.parse(await r.request(e.path,e.request.parse(t)))},async revokeCustomerSessions(t){let e=c.revokeSessions;return e.response.parse(await r.request(e.path,e.request.parse(t)))},async createCustomerSession(t){let e=c.createSession.request.safeParse({customerId:t});if(!e.success)throw new o("INVALID_REQUEST","A customer ID is required");let a=c.createSession.response.safeParse(await r.request("customer-sessions",e.data));if(!a.success)throw new o("INVALID_RESPONSE","Invalid customer session response");return a.data},async getOrCreateCustomer(t){let e=c.createCustomer.request.safeParse(t);if(!e.success)throw new o("INVALID_REQUEST","Invalid customer input");let a=c.createCustomer.response.safeParse(await r.request("customers",e.data));if(!a.success)throw new o("INVALID_RESPONSE","Invalid customer response");return a.data},async grantOffer(t){let e=c.grantOffer.request.safeParse({...t,requestId:t.requestId??crypto.randomUUID()});if(!e.success)throw new o("INVALID_REQUEST","Invalid offer grant");let a=c.grantOffer.response.safeParse(await r.request("offers/grant",e.data));if(!a.success)throw new o("INVALID_RESPONSE","Invalid offer response");return a.data}}}async function rt(n,r){if(typeof window<"u")throw new o("SERVER_ONLY","Renewal requires your backend");let{funnelCredentialCommandSchema:t,funnelCredentialResponseSchema:e}=await import("./src-3GT6E6XD.js"),a=I(n);return a.identify(n.apiKey),e.parse(await a.request("funnels",t.parse({...r,operation:"renew_run"})))}export{S as FunnelDecisionTimeoutError,o as IndianaError,D as aiPriceSnapshotSchema,x as aiTokenQuoteSchema,ce as createAiPricing,Ae as createAiUsageMiddleware,ye as createConfiguredAiPricing,T as createFeatureClient,Ee as createFunnelCampaignClient,U as createFunnelDecisionClient,qe as createFunnelOrchestrationClient,de as createFunnelStartClient,tt as createGuestToken,nt as createIndianaServer,me as createNativeReceiptClient,le as createPaywallStartClient,pe as evaluateFunnelNode,rt as renewFunnelRun};
1
+ import{a as T,b as v,d as te,e as pe,f as de}from"./chunk-G5ZGWOLJ.js";import{a as o,b as I}from"./chunk-CRJJ4EA2.js";import{Aj as Y,Cj as H,Ck as b,Dk as Z,Fk as J,G as O,Gj as C,Hj as _,Ij as W,Ll as X,Ml as ee,Wg as j,Xg as Q,Yg as K,Zg as G,_g as z,ci as $,qi as c,zj as P}from"./chunk-D37O6FAW.js";import"./chunk-MJG7X7LM.js";function p(r,n){try{return r.parse(n)}catch{throw new o("INVALID_RESPONSE","Invalid gateway response")}}function le(r){if(typeof window<"u")throw new o("SERVER_ONLY","Secret API keys must stay on the backend");return{start:n=>te(r,n)}}var S=class extends o{constructor(t,e){super("DECISION_PENDING","Decision is still pending; read this decision ID or retry the original request ID",202,e);this.decisionId=t;this.decisionRequestId=e}decisionId;decisionRequestId};function U(r){if("remoteEval"in r)throw new o("INVALID_REQUEST","Configure evaluation mode on the Funnel; remoteEval is not supported");if(typeof window<"u")throw new o("SERVER_ONLY","Funnel decisions are requested by your backend");if(!/^gg_sk_[A-Za-z0-9_-]{32,128}$/.test(r.apiKey))throw new o("INVALID_TOKEN","A server API key is required");async function n(a,s,i=!1){let u=I({...r,fetch:(m,f)=>{let d=new Headers(f?.headers);return d.set("Accept-Encoding","identity"),i&&d.set("Prefer","respond-async"),(r.fetch??globalThis.fetch)(m,{...f,headers:d})},timeoutMs:Math.min(r.timeoutMs??1e4,s?Math.max(1,s-Date.now()):12e4)});return u.identify(r.apiKey),u.request("funnels",a)}async function t(a,s){let i=_.parse(await n(C.parse({operation:"read_decision",decisionId:a}),s));if(i.decisionId!==a)throw new o("INVALID_RESPONSE","Decision identity changed");return i}async function e(a,s,i=!1){let u=C.options[0].parse({...a,operation:"decide",funnelId:r.funnelId}),m;try{m=_.parse(await n(u,s,i))}catch(f){throw f instanceof o&&["TIMEOUT","NETWORK_ERROR","SERVICE_UNAVAILABLE"].includes(f.code)?new o("DECISION_ACCEPTANCE_UNKNOWN","Decision acceptance is unknown; retry the original request ID and input",f.status,a.requestId):f}if(m.requestId!==a.requestId||m.decision&&!v(m.decision,u.customer))throw new o("INVALID_RESPONSE","Decision request or customer changed");return{response:m,customer:u.customer}}return{async configuration(){let a=J.parse(await n({operation:"configuration",funnelId:r.funnelId}));if(a.scope.projectId!==r.scope.projectId||a.scope.environment!==r.scope.environment||a.funnelId!==r.funnelId)throw new o("SCOPE_MISMATCH","Configuration scope changed");return a},features(a={}){return T({...a,scope:r.scope,load:async()=>$.parse(await n({operation:"feature_config",funnelId:r.funnelId}))})},read:a=>t(a),async submit(a){return(await e(a,void 0,!0)).response},async decide(a){let s=Date.now()+3e4,i=await e(a,s),u=i.response,m=u.decisionId,f=250;for(;;){if(u.requestId!==a.requestId||u.decision&&!v(u.decision,i.customer))throw new o("INVALID_RESPONSE","Decision request or customer changed");if(u.decision)return u.decision;if(u.status==="failed")throw new o("DECISION_FAILED","Decision execution failed",503,a.requestId);if(Date.now()>=s)throw new S(m,a.requestId);if(await new Promise(d=>setTimeout(d,Math.min(f,s-Date.now()))),Date.now()>=s)throw new S(m,a.requestId);try{f=Math.min(1e3,f*2),u=await t(m,s)}catch(d){if(d instanceof o&&["TIMEOUT","NETWORK_ERROR","SERVICE_UNAVAILABLE","RATE_LIMITED"].includes(d.code))continue;throw d}}},async reportUsed(a){let s=W.parse(await n(C.parse({...a,operation:"report_used"})));if(s.decisionId!==a.decisionId||s.eventId!==a.eventId)throw new o("INVALID_RESPONSE","Usage receipt identity changed");return s}}}function me(r){if(typeof window<"u")throw new o("SERVER_ONLY","Native receipts are verified by your backend");if(!/^gg_sk_[A-Za-z0-9_-]{32,128}$/.test(r.apiKey))throw new o("INVALID_TOKEN","Server API key required");let n=I({...r,timeoutMs:r.timeoutMs??35e3});return n.identify(r.apiKey),{async recover(t){let e=X.parse(t);if(e.orderId!==e.receiptId)throw new o("INVALID_REQUEST","Native recovery requires the accepted commercial intent");let a=e.nativeEvidence,s={requestId:e.requestId,customerToken:e.customerToken,purchaseIntentId:e.orderId,...a===null?{intent:"read"}:a.provider==="apple"?{provider:"apple",signedTransaction:a.signedTransaction}:{provider:"google",purchaseToken:a.purchaseToken}},i=c.restoreNativePurchase.response.parse(await n.request(c.restoreNativePurchase.path,s));if(i.operation.requestId!==e.requestId)throw new o("INVALID_RESPONSE","Native receipt request identity changed");let u=ee.parse({scope:i.scope,requestId:e.requestId,orderId:i.operation.orderId,receiptId:i.operation.orderId,orderStatus:i.operation.status,refunded:i.operation.refunded,...i.operation.completion===null?{}:{nativeCompletion:{orderId:i.operation.orderId,receiptId:i.operation.orderId,...i.operation.completion}}});if(u.requestId!==e.requestId||u.orderId!==e.orderId||u.receiptId!==e.receiptId||u.scope.projectId!==r.scope.projectId||u.scope.environment!==r.scope.environment)throw new o("INVALID_RESPONSE","Current order receipt scope changed");return u}}}import{z as l}from"zod";var q=j,fe=l.string().regex(/^(0|[1-9]\d{0,5})(\.\d{1,12})?$/),se=l.strictObject(Object.fromEntries(q.map(r=>[r,l.number().int().nonnegative().max(1e9)]))),ie=Q,we=K,D=l.strictObject({modelId:ie,source:l.enum(["models.dev","custom"]),fetchedAt:l.iso.datetime(),rates:G,contextTier:l.number().int().nonnegative(),markupPercent:we}),x=l.strictObject({pricing:D,tokens:se,quantity:O,digest:l.string().regex(/^[a-f0-9]{64}$/)}),oe=r=>{let[n,t=""]=r.split(".");return BigInt(n)*10n**12n+BigInt(t.padEnd(12,"0"))};function Ie(r){if(typeof r!="number"||!Number.isFinite(r)||r<0)throw new o("AI_PRICE_UNAVAILABLE","A published token price is missing");let n=String(r),t=n.includes("e")?r.toFixed(12).replace(/0+$/,"").replace(/\.$/,""):n;if(Number(t)!==r||!fe.safeParse(t).success)throw new o("AI_PRICE_UNAVAILABLE","Published price exceeds the supported precision");return t}var ne=l.strictObject({input:l.number().nonnegative(),output:l.number().nonnegative(),cache_read:l.number().nonnegative().optional(),cache_write:l.number().nonnegative().optional(),reasoning:l.number().nonnegative().optional(),input_audio:l.number().nonnegative().optional(),output_audio:l.number().nonnegative().optional()}),ge=ne.extend({context_over_200k:l.unknown().optional(),tiers:l.array(ne.extend({tier:l.strictObject({type:l.literal("context"),size:l.number().int().nonnegative()})})).max(20).refine(r=>new Set(r.map(n=>n.tier.size)).size===r.length).optional()});async function re(r,n,t){let e=new TextEncoder().encode(JSON.stringify({pricing:r,tokens:n,quantity:t}));return[...new Uint8Array(await crypto.subtle.digest("SHA-256",e))].map(a=>a.toString(16).padStart(2,"0")).join("")}function ae(r,n){let t=0n;for(let w of q){if(!n[w])continue;let g=r.rates[w];if(g===void 0)throw new o("AI_PRICE_UNAVAILABLE",`No published price for ${w}; report exclusive token pools`);t+=oe(g)*BigInt(n[w])}let[e,a="0"]=String(r.markupPercent).split("e"),s=(e.split(".")[1]?.length??0)-Number(a),i=10n**BigInt(Math.max(s,0)),u=BigInt(e.replace(".",""))*10n**BigInt(Math.max(-s,0)),m=100n*i+u,f=100n*i*1000000n,d=(t*m+f-1n)/f;return O.parse(`${d/1000000n}.${(d%1000000n).toString().padStart(6,"0")}`)}function ce(r={}){if(typeof window<"u")throw new o("SERVER_ONLY","AI token pricing belongs on your backend");let n=z.parse({defaultMarkup:r.defaultMarkup??0,providerMarkups:r.providerMarkups??{},modelMarkups:r.modelMarkups??{},customModels:r.customModels??{}}),t=null,e=0;async function a(){if(!t||Date.now()>=e){e=Date.now()+15*6e4;let s=(async()=>{let i=await(r.fetch??fetch)("https://models.dev/api.json",{signal:AbortSignal.timeout(3e4)});if(!i.ok)throw new o("AI_PRICE_UNAVAILABLE","Models.dev pricing is unavailable");return{data:l.record(l.string(),l.object({models:l.record(l.string(),l.unknown())})).parse(await i.json()),fetchedAt:new Date().toISOString()}})().catch(i=>{throw t===s&&(t=null),i});t=s}return t}return{refreshPrices(){t=null,e=0},async quoteTokens(s){let i=ie.parse(s.modelId),u=se.parse(s.tokens),[m,...f]=i.split("/"),d=n.customModels[i],w,g,h,L=0;if(d?.input!==void 0&&d.output!==void 0&&q.every(E=>u[E]===0||d[E]!==void 0))w={...d,input:d.input,output:d.output},g="custom",h=new Date().toISOString();else{let E=await a(),V=E.data[m]?.models[f.join("/")];if(!V)throw new o("AI_PRICE_UNAVAILABLE","Unknown model; configure a complete custom price");let{cost:k}=l.object({cost:ge}).parse(V),M=u.input+u.cache_read+u.cache_write+u.input_audio;if(k.tiers===void 0&&k.context_over_200k!==void 0&&M>2e5)throw new o("AI_PRICE_UNAVAILABLE","A current context tier is required for this model");let N=k.tiers?.filter(y=>M>y.tier.size).sort((y,ue)=>ue.tier.size-y.tier.size)[0],B=N??k;N&&(L=N.tier.size),w=Object.fromEntries(q.filter(y=>B[y]!==void 0).map(y=>[y,Ie(B[y])])),w={...w,...d},g=d?"custom":"models.dev",h=E.fetchedAt}let R=D.parse({modelId:i,source:g,fetchedAt:h,rates:w,contextTier:L,markupPercent:n.modelMarkups[i]??n.providerMarkups[m]??n.defaultMarkup}),F=ae(R,u);return x.parse({pricing:R,tokens:u,quantity:F,digest:await re(R,u,F)})},async trackTokens(s,i){let u=x.parse(i.quote);if(u.quantity!==ae(u.pricing,u.tokens)||u.digest!==await re(u.pricing,u.tokens,u.quantity))throw new o("INVALID_REQUEST","AI quote changed after pricing");let m=i.properties??{},f=i.providerCostUsd===void 0?void 0:l.string().regex(/^(0|[1-9]\d{0,11})(\.\d{1,18})?$/).parse(i.providerCostUsd),d=i.generationId===void 0?void 0:l.string().min(1).max(120).parse(i.generationId),w=8+ +(f!==void 0)+ +(d!==void 0);if(Object.keys(m).some(h=>h.startsWith("ai_")))throw new o("INVALID_REQUEST","AI tracking reserves ai_ event properties");if(Object.keys(m).length>16-w)throw new o("INVALID_REQUEST","AI tracking properties exceed the available event budget");let g={operation:"consume",internal_feature_id:i.internal_feature_id,quantity:u.quantity,idempotencyKey:i.idempotencyKey,properties:{...m,...f!==void 0?{ai_provider_cost_usd:f}:{},...d!==void 0?{ai_generation_id:d}:{},ai_model:u.pricing.modelId,ai_source:u.pricing.source,ai_price_at:u.pricing.fetchedAt,ai_quote_hash:u.digest,ai_markup:String(u.pricing.markupPercent),ai_tier:String(u.pricing.contextTier),ai_tokens:q.map(h=>u.tokens[h]).join(","),ai_rates:"v1:"+q.map(h=>u.pricing.rates[h]===void 0?"-":oe(u.pricing.rates[h]).toString(36)).join(",")},...i.entityId?{entityId:i.entityId}:{}};return s.mutateBalance({customerId:i.customerId,command:g})}}}async function he(r,n,t={}){let{config:e,model_markups:a}=await r.readAiPricing(n);return ce({defaultMarkup:e.default_markup??0,providerMarkups:Object.fromEntries(Object.entries(e.provider_markups??{}).map(([s,i])=>[s,i.markup])),modelMarkups:Object.fromEntries(Object.entries(a??{}).filter(([,s])=>s.markup!==void 0).map(([s,i])=>[s,i.markup])),customModels:Object.fromEntries(Object.entries(a??{}).filter(([,s])=>s.input_cost!==void 0||s.output_cost!==void 0).map(([s,i])=>[s,{...i.input_cost!==void 0?{input:String(i.input_cost)}:{},...i.output_cost!==void 0?{output:String(i.output_cost)}:{}}])),...t})}import{z as ye}from"zod";var A=ye.number().int().min(0).max(Number.MAX_SAFE_INTEGER);function Se(r,n){let t=A.parse(r.inputTokens.total),e=A.parse(r.outputTokens.total),a=A.parse(r.inputTokens.cacheRead??0),s=A.parse(r.inputTokens.cacheWrite??0),i=A.parse(r.outputTokens.reasoning??0);if(a+s>t||i>e||r.inputTokens.noCache!==void 0&&A.parse(r.inputTokens.noCache)!==t-a-s||r.outputTokens.text!==void 0&&A.parse(r.outputTokens.text)!==e-i)throw new o("AI_USAGE_UNAVAILABLE","Provider token counts do not conserve total usage");return{input:t-a-s,cache_read:a,cache_write:s,output:n==="output"?e:e-i,reasoning:n==="separate"?i:0,input_audio:0,output_audio:0}}function Ae(r){if(typeof window<"u")throw new o("SERVER_ONLY","AI usage belongs on the trusted backend");if(!r.modelId||!["output","separate"].includes(r.reasoning))throw new o("INVALID_REQUEST","Model ID and reasoning pricing are required");async function n(e){await r.persist({context:e,modelId:r.modelId,usage:null,tokens:null,quote:null,receipt:null,phase:"incomplete"})}async function t(e,a){let s={context:e,modelId:r.modelId,usage:a,tokens:null,quote:null,receipt:null,phase:"captured"};await r.persist(s);let i=r.mapTokens?r.mapTokens(a):Se(a,r.reasoning),u=await r.pricing.quoteTokens({modelId:r.modelId,tokens:i});await r.persist({...s,tokens:i,quote:u,phase:"quoted"});let m=await r.pricing.trackTokens(r.client,{...e,quote:u});if(!m.receipt.accepted)throw new o("AI_BALANCE_REJECTED","AI usage was captured but the balance operation was rejected");await r.persist({...s,tokens:i,quote:u,receipt:m,phase:"settled"})}return{specificationVersion:"v4",async wrapGenerate({doGenerate:e}){let a=await r.context(),s;try{s=await e()}catch(i){throw await n(a),i}return await t(a,s.usage),s},async wrapStream({doStream:e}){let a=await r.context(),s;try{s=await e()}catch(d){throw await n(a),d}let i=!1,u=!1,m=s.stream.getReader();async function f(){i||u||(u=!0,await n(a))}return{...s,stream:new ReadableStream({async pull(d){try{let{value:w,done:g}=await m.read();if(g){if(!i)throw await f(),new o("AI_USAGE_UNAVAILABLE","Stream ended without final usage; no amount was invented");d.close();return}if(w.type==="finish"){if(i)throw new o("AI_USAGE_UNAVAILABLE","Provider sent more than one final usage record");i=!0,await t(a,w.usage)}d.enqueue(w)}catch(w){try{await f()}finally{d.error(w),await m.cancel(w)}}},async cancel(d){try{await f()}finally{await m.cancel(d)}}})}}}}function qe(r){if(typeof window<"u")throw new o("SERVER_ONLY","Funnel receipts are sent by your backend");if(!/^gg_sk_[A-Za-z0-9_-]{32,128}$/.test(r.apiKey))throw new o("INVALID_TOKEN","A server API key is required");let n=I(r);return n.identify(r.apiKey),{async signal(t){let e=P.parse({...t,operation:"signal"}),a=Y.parse(await n.request("funnels",e));if(a.runId!==t.runId||a.eventId!==t.eventId||a.scope.projectId!==r.scope.projectId||a.scope.environment!==r.scope.environment)throw new o("INVALID_RESPONSE","Receipt identity changed");return a},async readResults(t){let e=P.parse({operation:"read_results",runId:t}),a=H.parse(await n.request("funnels",e));if(a.runId!==t||a.scope.projectId!==r.scope.projectId||a.scope.environment!==r.scope.environment)throw new o("INVALID_RESPONSE","Result identity changed");return a}}}function Ee(r){if(typeof window<"u")throw new o("SERVER_ONLY","Campaign entry requires your backend");if(!/^gg_sk_[A-Za-z0-9_-]{32,128}$/.test(r.apiKey))throw new o("INVALID_TOKEN","A server API key is required");let n=I({...r,timeoutMs:r.timeoutMs??35e3});n.identify(r.apiKey);let t=U(r);return{async decide(e){let a=b.parse({...e,funnelId:r.funnelId,operation:"campaign_decide"}),s=_.parse(await n.request("funnels",a));if(s.scope.projectId!==r.scope.projectId||s.scope.environment!==r.scope.environment)throw new o("SCOPE_MISMATCH","Campaign scope changed");let i=s.decisionId,u=s.requestId,m=Date.now()+(r.timeoutMs??3e4);for(;s.status==="pending";){if(Date.now()>=m)throw new S(i,u);if(await new Promise(f=>setTimeout(f,250)),s=await t.read(i),s.requestId!==u)throw new o("INVALID_RESPONSE","Campaign decision identity changed")}if(s.status==="failed")throw new o("DECISION_FAILED","Campaign decision execution failed");if(!s.decision||!v(s.decision,a.customer))throw new o("INVALID_RESPONSE","Campaign Customer changed");return s.decision},async start(e){let a=b.parse({...e,funnelId:r.funnelId,operation:"campaign_start"}),s=Z.parse(await n.request("funnels",a));if(s.scope.projectId!==r.scope.projectId||s.scope.environment!==r.scope.environment)throw new o("SCOPE_MISMATCH","Campaign scope changed");if(!("suppressed"in s)&&(s.run.source.id!==r.funnelId||!s.customerId||a.customer.type==="id"&&s.customerId!==a.customer.value))throw new o("INVALID_RESPONSE","Campaign Funnel or Customer changed");return s}}}function tt(){if(typeof window<"u")throw new o("SERVER_ONLY","Guest identity is issued by your backend");let r=crypto.getRandomValues(new Uint8Array(32));return"gg_gc_"+btoa(String.fromCharCode(...r)).replaceAll("+","-").replaceAll("/","_").replaceAll("=","")}function nt(r){if(typeof window<"u")throw new o("SERVER_ONLY","Secret API keys must stay on your backend");let n=I(r);return n.identify(r.apiKey),{async getFeatures(t={}){let e=c.getFeatures;return p(e.response,await n.request(e.path,e.request.parse(t),e.method))},async evaluateFeatures(t){let e=c.evaluateFeatures;return p(e.response,await n.request(e.path,e.request.parse(t),e.method))},async trackEvents(t){let e=c.trackEvents;return p(e.response,await n.request(e.path,e.request.parse(t),e.method))},async resolvePaywall(t){let e=c.resolvePaywall;return p(e.response,await n.request(e.path,e.request.parse(t)))},async resolveOffering(t){let e=c.resolveOffering;return p(e.response,await n.request(e.path,e.request.parse(t)))},async checkEntitlement(t){let e=c.checkEntitlement;return p(e.response,await n.request(e.path,e.request.parse(t)))},async setupPayment(t){let e=c.setupPayment;return p(e.response,await n.request(e.path,e.request.parse(t)))},async readPaymentSetup(t){let e=c.readPaymentSetup;return p(e.response,await n.request(e.path,e.request.parse(t)))},async previewSubscriptionBatch(t){let e=c.previewSubscriptionBatch;return p(e.response,await n.request(e.path,e.request.parse(t)))},async confirmSubscriptionBatch(t){let e=c.confirmSubscriptionBatch;return p(e.response,await n.request(e.path,e.request.parse(t)))},async readSubscriptionBatch(t){let e=c.readSubscriptionBatch;return p(e.response,await n.request(e.path,e.request.parse(t)))},async abandonSubscriptionBatch(t){let e=c.abandonSubscriptionBatch;return p(e.response,await n.request(e.path,e.request.parse(t)))},async manageSubscriptionTrial(t){let e=c.manageSubscriptionTrial;return p(e.response,await n.request(e.path,e.request.parse(t)))},async readSubscriptionTrial(t){let e=c.readSubscriptionTrial;return p(e.response,await n.request(e.path,e.request.parse(t)))},async listSubscriptions(t){let e=c.listSubscriptions;return p(e.response,await n.request(e.path,e.request.parse(t)))},async listPurchases(t){let e=c.listPurchases;return p(e.response,await n.request(e.path,e.request.parse(t)))},async listSubscriptionConflicts(t){let e=c.listSubscriptionConflicts;return p(e.response,await n.request(e.path,e.request.parse(t)))},async retrySubscriptionConflict(t){let e=c.retrySubscriptionConflict;return p(e.response,await n.request(e.path,e.request.parse(t)))},async previewRefund(t){let e=c.previewRefund;return p(e.response,await n.request(e.path,e.request.parse(t)))},async refund(t){let e=c.refund;return p(e.response,await n.request(e.path,e.request.parse(t)))},async readRefund(t){let e=c.readRefund;return p(e.response,await n.request(e.path,e.request.parse(t)))},async previewUpdate(t){let e=c.previewUpdate;return p(e.response,await n.request(e.path,e.request.parse(t)))},async update(t){let e=c.update;return p(e.response,await n.request(e.path,e.request.parse(t)))},async readSubscriptionUpdate(t){let e=c.readSubscriptionUpdate;return p(e.response,await n.request(e.path,e.request.parse(t)))},async restoreNativePurchase(t){let e=c.restoreNativePurchase;return p(e.response,await n.request(e.path,e.request.parse(t)))},async verifySubscriptions(t){let e=c.verifySubscriptions;return p(e.response,await n.request(e.path,e.request.parse(t)))},async previewAttach(t){let e=c.previewAttach;return p(e.response,await n.request(e.path,e.request.parse(t)))},async attach(t){let e=c.attach;return p(e.response,await n.request(e.path,e.request.parse(t)))},async readSubscriptionOperation(t){let e=c.readSubscriptionOperation;return p(e.response,await n.request(e.path,e.request.parse(t)))},async readAiPricing(t){let e=c.readAiPricing;return p(e.response,await n.request(e.path,e.request.parse(t)))},async readUsage(t){let e=c.readUsage;return p(e.response,await n.request(e.path,e.request.parse(t)))},async setUsage(t){let e=c.setUsage;return p(e.response,await n.request(e.path,e.request.parse(t)))},async manageBalanceGrant(t){let e=c.manageBalanceGrant;return p(e.response,await n.request(e.path,e.request.parse(t)))},async readBalanceSource(t){let e=c.readBalanceSource;return p(e.response,await n.request(e.path,e.request.parse(t)))},async adjustBalance(t){let e=c.adjustBalance;return p(e.response,await n.request(e.path,e.request.parse(t)))},async listBalanceGrants(t){let e=c.listBalanceGrants;return p(e.response,await n.request(e.path,e.request.parse(t)))},async manageBillingLimits(t){let e=c.manageBillingLimits;return p(e.response,await n.request(e.path,e.request.parse(t)))},async readSeats(t){let e=c.readSeats;return p(e.response,await n.request(e.path,e.request.parse(t)))},async manageSeat(t){let e=c.manageSeat;return p(e.response,await n.request(e.path,e.request.parse(t)))},async manageUsageEntity(t){let e=c.manageUsageEntity;return p(e.response,await n.request(e.path,e.request.parse(t)))},async readUsageAnalytics(t){let e=c.readUsageAnalytics;return p(e.response,await n.request(e.path,e.request.parse(t)))},async readCreditAnalytics(t){let e=c.readCreditAnalytics;return p(e.response,await n.request(e.path,e.request.parse(t)))},async submitUsageBatch(t){let e=c.submitUsageBatch;return p(e.response,await n.request(e.path,e.request.parse(t)))},async readUsageBatch(t){let e=c.readUsageBatch;return p(e.response,await n.request(e.path,e.request.parse(t)))},async readHoldings(t){let e=c.readHoldings;return p(e.response,await n.request(e.path,e.request.parse(t)))},async readLedger(t){let e=c.readLedger;return p(e.response,await n.request(e.path,e.request.parse(t)))},async readBillingInvoice(t){let e=c.readBillingInvoice;return p(e.response,await n.request(e.path,e.request.parse(t)))},async readCreditStatement(t){let e=c.readCreditStatement;return p(e.response,await n.request(e.path,e.request.parse(t)))},async quoteBalance(t){let e=c.quoteBalance;return p(e.response,await n.request(e.path,e.request.parse(t)))},async trackUsage(t){let e=c.trackUsage;return p(e.response,await n.request(e.path,e.request.parse(t)))},async mutateBalance(t){let e=c.mutateBalance;return p(e.response,await n.request(e.path,e.request.parse(t)))},async getCustomer(t){let e=c.getCustomer,a=e.request.safeParse(t);if(!a.success)throw new o("INVALID_REQUEST","Invalid customer lookup");let s=e.response.safeParse(await n.request(e.path,a.data));if(!s.success)throw new o("INVALID_RESPONSE","Invalid customer response");return s.data},async listCustomers(t={}){let e=c.listCustomers,a=e.request.safeParse(t);if(!a.success)throw new o("INVALID_REQUEST","Invalid customer filters");let s=e.response.safeParse(await n.request(e.path,a.data));if(!s.success)throw new o("INVALID_RESPONSE","Invalid customer response");return s.data},async updateCustomer(t){let e=c.updateCustomer,a=e.request.safeParse(t);if(!a.success)throw new o("INVALID_REQUEST","Invalid customer patch");let s=e.response.safeParse(await n.request(e.path,a.data));if(!s.success)throw new o("INVALID_RESPONSE","Invalid customer response");return s.data},async createGuestCustomer(t){let e=c.createGuestCustomer;return e.response.parse(await n.request(e.path,e.request.parse(t)))},async resumeGuestSession(t){let e=c.resumeGuestSession;return e.response.parse(await n.request(e.path,e.request.parse(t)))},async claimGuestCustomer(t){let e=c.claimGuestCustomer;return e.response.parse(await n.request(e.path,e.request.parse(t)))},async renewCustomerSession(t){let e=c.renewSession;return e.response.parse(await n.request(e.path,e.request.parse(t)))},async revokeCustomerSessions(t){let e=c.revokeSessions;return e.response.parse(await n.request(e.path,e.request.parse(t)))},async createCustomerSession(t){let e=c.createSession.request.safeParse({customerId:t});if(!e.success)throw new o("INVALID_REQUEST","A customer ID is required");let a=c.createSession.response.safeParse(await n.request("customer-sessions",e.data));if(!a.success)throw new o("INVALID_RESPONSE","Invalid customer session response");return a.data},async getOrCreateCustomer(t){let e=c.createCustomer.request.safeParse(t);if(!e.success)throw new o("INVALID_REQUEST","Invalid customer input");let a=c.createCustomer.response.safeParse(await n.request("customers",e.data));if(!a.success)throw new o("INVALID_RESPONSE","Invalid customer response");return a.data},async grantOffer(t){let e=c.grantOffer.request.safeParse({...t,requestId:t.requestId??crypto.randomUUID()});if(!e.success)throw new o("INVALID_REQUEST","Invalid offer grant");let a=c.grantOffer.response.safeParse(await n.request("offers/grant",e.data));if(!a.success)throw new o("INVALID_RESPONSE","Invalid offer response");return a.data}}}async function rt(r,n){if(typeof window<"u")throw new o("SERVER_ONLY","Renewal requires your backend");let{funnelCredentialCommandSchema:t,funnelCredentialResponseSchema:e}=await import("./src-RZJKF6LQ.js"),a=I(r);return a.identify(r.apiKey),e.parse(await a.request("funnels",t.parse({...n,operation:"renew_run"})))}export{S as FunnelDecisionTimeoutError,o as IndianaError,D as aiPriceSnapshotSchema,x as aiTokenQuoteSchema,ce as createAiPricing,Ae as createAiUsageMiddleware,he as createConfiguredAiPricing,T as createFeatureClient,Ee as createFunnelCampaignClient,U as createFunnelDecisionClient,qe as createFunnelOrchestrationClient,de as createFunnelStartClient,tt as createGuestToken,nt as createIndianaServer,me as createNativeReceiptClient,le as createPaywallStartClient,pe as evaluateFunnelNode,rt as renewFunnelRun};