@arcblock/payment-service 1.29.9 → 1.29.11
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/cf.js +51 -51
- package/dist/index.js +196 -43
- package/package.json +3 -3
- package/web/assets/{account-Clbqiiw3.js → account-DrsnH5wP.js} +1 -1
- package/web/assets/{action-DENqSeOa.js → action-C2c0yWuW.js} +1 -1
- package/web/assets/{actions-CDsj5j8l.js → actions--FNKSNIs.js} +1 -1
- package/web/assets/{actions-BJDN6Op2.js → actions-BEUwbsq1.js} +1 -1
- package/web/assets/{actions-CSpJGOX7.js → actions-C9AfME83.js} +1 -1
- package/web/assets/{actions-BD9BAp3M.js → actions-D2-s31n3.js} +1 -1
- package/web/assets/{actions-BSNy5bOd.js → actions-DXMceTgd.js} +1 -1
- package/web/assets/{actions-0iWP2mcx.js → actions-DeCPtfTK.js} +1 -1
- package/web/assets/{actions-DGQs8fFF.js → actions-DtNZGZWf.js} +1 -1
- package/web/assets/{actions-D3tJgrUn.js → actions-JHsqbHpB.js} +1 -1
- package/web/assets/{actions-CZL47E9r.js → actions-izdZ2Mn4.js} +1 -1
- package/web/assets/{add-price-BpnICuHO.js → add-price-TdXAR3NW.js} +1 -1
- package/web/assets/{admin-CD8ViZ7D.js → admin-BpFv3eF5.js} +1 -1
- package/web/assets/{assign-0vMUDW_C.js → assign-DKRfmN7W.js} +1 -1
- package/web/assets/{attempts-CKlxkJuE.js → attempts-BfbYfiJa.js} +1 -1
- package/web/assets/browser-DF2vfpBa.js +1 -0
- package/web/assets/{change-payment-gAlRmJpv.js → change-payment-j5UC8_h0.js} +1 -1
- package/web/assets/{change-plan-C47wfWH8.js → change-plan-CtXvsIDw.js} +1 -1
- package/web/assets/{click-boundary-CafubiPp.js → click-boundary-Bi28Y0Fq.js} +1 -1
- package/web/assets/{connect-BHHzrwLA.js → connect-CXek4LAE.js} +1 -1
- package/web/assets/{copyable-QrCyyiou.js → copyable-CprMHdhV.js} +1 -1
- package/web/assets/{create-ke4FrPx1.js → create-B-Ubepl_.js} +1 -1
- package/web/assets/{create-DNar5UQD.js → create-BVt_sQ_7.js} +1 -1
- package/web/assets/{create-0PUtkJZY.js → create-BWviSWbC.js} +1 -1
- package/web/assets/{create-BJ1asdcy.js → create-C6jihslA.js} +1 -1
- package/web/assets/{create-C7GOgZZM.js → create-IaalYGmm.js} +1 -1
- package/web/assets/{create-Bgv5ux17.js → create-jzl1m8ZK.js} +1 -1
- package/web/assets/{credit-grant-item-list-CeDAM3qV.js → credit-grant-item-list-DQcvdSRs.js} +1 -1
- package/web/assets/{credit-overview-4zh0H02x.js → credit-overview-CPId2vzk.js} +1 -1
- package/web/assets/{currency-restrictions-BcEm8W45.js → currency-restrictions-Dsupz2ce.js} +1 -1
- package/web/assets/{currency-select-B4ieQBvv.js → currency-select-C8j7QQMP.js} +1 -1
- package/web/assets/{dayjs-DUTDpcNU.js → dayjs-DUNWtvju.js} +1 -1
- package/web/assets/{description-SnR5WxWT.js → description-BHxdy5I3.js} +1 -1
- package/web/assets/{detail-DNcp_u5S.js → detail-B17BN6kU.js} +1 -1
- package/web/assets/detail-BJ-hl5PK.js +10 -0
- package/web/assets/{detail-46aLUdJj.js → detail-BJEqTXDS.js} +1 -1
- package/web/assets/{detail-BQpDGZJQ.js → detail-BdC9VIc6.js} +1 -1
- package/web/assets/{detail-DbU3p040.js → detail-BkRkrKyw.js} +1 -1
- package/web/assets/{detail-DACnmls3.js → detail-BvcI9cB_.js} +1 -1
- package/web/assets/detail-C--ATvwm.js +24 -0
- package/web/assets/{detail-Cg505nKX.js → detail-CHJqYZ0W.js} +1 -1
- package/web/assets/{detail-B0IHl4MI.js → detail-CfvKZ7IV.js} +1 -1
- package/web/assets/{detail-Ct5QNBqu.js → detail-CmIweOLE.js} +1 -1
- package/web/assets/{detail-BXTsnQny.js → detail-D729Bgs6.js} +1 -1
- package/web/assets/{detail-C_Zdfa0y.js → detail-DD1YBtex.js} +1 -1
- package/web/assets/detail-DOcm4Kqg.js +15 -0
- package/web/assets/{detail-Bfnkg0A1.js → detail-DQj1mbhA.js} +1 -1
- package/web/assets/detail-DTXDMIR9.js +15 -0
- package/web/assets/{detail-CsGZMimg.js → detail-DUAJzKsu.js} +1 -1
- package/web/assets/{detail-BwH0DwAi.js → detail-De8PyTyx.js} +1 -1
- package/web/assets/{detail-B_lpOomD.js → detail-DqfxOHky.js} +1 -1
- package/web/assets/{detail-CMBRd4Ct.js → detail-Dzt5tfyZ.js} +1 -1
- package/web/assets/{detail-Tn2R5C8i.js → detail-H0dkKVyS.js} +1 -1
- package/web/assets/{detail-CyMhK5K_.js → detail-MgdgGj5J.js} +1 -1
- package/web/assets/{detail-DCTb8R7F.js → detail-WAmPM6yq.js} +1 -1
- package/web/assets/{detail-B-ceWfZr.js → detail-g6el9Fxj.js} +1 -1
- package/web/assets/did-Bqcz-NjH.js +1 -0
- package/web/assets/{drawer-form-DspWWj3x.js → drawer-form-CQjNFFWk.js} +1 -1
- package/web/assets/{edit-Bkj-OTJh.js → edit-DAU8AWzT.js} +1 -1
- package/web/assets/{editor-AmthipP2.js → editor-vZvxDUTl.js} +1 -1
- package/web/assets/{embed-rRKjDoHi.js → embed-ClYNqZbf.js} +1 -1
- package/web/assets/{filter-toolbar-DXGSTq57.js → filter-toolbar-VvmMATj0.js} +1 -1
- package/web/assets/{form-BmQlJZ84.js → form-4_MzglPj.js} +1 -1
- package/web/assets/{form-cX026J4G.js → form-AFzUvoFE.js} +1 -1
- package/web/assets/{form-B5WW-lS5.js → form-Bro99BjK.js} +1 -1
- package/web/assets/{form-CAPjlw7l.js → form-CnrBCyTJ.js} +1 -1
- package/web/assets/form-Cuvruf4H.js +16 -0
- package/web/assets/{gas-nyR96dB0.js → gas-kw2KMH1u.js} +1 -1
- package/web/assets/{generateCategoricalChart-BadryV3H.js → generateCategoricalChart-BCpuUeC_.js} +1 -1
- package/web/assets/{home-_eX1aim8.js → home-ZNJREzbw.js} +1 -1
- package/web/assets/{index-CbSXdD6E.js → index-ASk8vU2H.js} +1 -1
- package/web/assets/{index-ajD9Iotk.js → index-B4n6PvPu.js} +1 -1
- package/web/assets/{index-BarN7DfU.js → index-B4yaPb7B.js} +5 -5
- package/web/assets/{index-DSe7Dot_.js → index-BHwID_s4.js} +1 -1
- package/web/assets/index-BMcnd_jZ.js +1 -0
- package/web/assets/{index-BTfJ08JU.js → index-BRmN8ViQ.js} +1 -1
- package/web/assets/index-BdbLl6St.js +1 -0
- package/web/assets/{index-CCVDDX0c.js → index-BjKRyxNQ.js} +1 -1
- package/web/assets/index-BjLJQRKY.js +1 -0
- package/web/assets/index-BkNCPnTn.js +1 -0
- package/web/assets/index-BlAwTTmu.js +1 -0
- package/web/assets/{index-C136x0O2.js → index-BtWfmATr.js} +1 -1
- package/web/assets/{index-DNGmCIRP.js → index-C-5n472s.js} +1 -1
- package/web/assets/{index-CW8VfoJO.js → index-C3AP4jq0.js} +1 -1
- package/web/assets/{index-C-RT84yb.js → index-C3Rh1SaB.js} +1 -1
- package/web/assets/index-CDyxbCzc.js +1 -0
- package/web/assets/{index-SOzRg0yJ.js → index-CH_k9MVv.js} +1 -1
- package/web/assets/{index-XaFn2ySq.js → index-CKPfOW6M.js} +1 -1
- package/web/assets/{index-BQjlhCSt.js → index-CPFlZhA2.js} +1 -1
- package/web/assets/{index-Du0Ieh1F.js → index-CPyGjEd3.js} +2 -2
- package/web/assets/index-ChC-jsE2.js +1 -0
- package/web/assets/{index-D-bx9Kam.js → index-CiWvs3j9.js} +1 -1
- package/web/assets/{index-mn5Zdrtn.js → index-D6gv9jHh.js} +1 -1
- package/web/assets/{index-Cd_BD9TM.js → index-D7pWd60Z.js} +1 -1
- package/web/assets/{index-YG5oc8O3.js → index-DAen2-cr.js} +1 -1
- package/web/assets/{index-BRENdB5m.js → index-DNobX-Tr.js} +1 -1
- package/web/assets/{index-Kd_qCyRG.js → index-DY-g0BPU.js} +1 -1
- package/web/assets/{index-D0mynT6_.js → index-DZkpxY-C.js} +1 -1
- package/web/assets/{index-DcddP3R9.js → index-Dh9agU9O.js} +1 -1
- package/web/assets/{index-BBHMsIxJ.js → index-Dju8k6mq.js} +1 -1
- package/web/assets/{index-DeK5Pqjv.js → index-DwDNPqjF.js} +1 -1
- package/web/assets/{index-DEiuhiEo.js → index-Dze0CpfQ.js} +1 -1
- package/web/assets/{index-UYeD8rTJ.js → index-eDERHpkr.js} +1 -1
- package/web/assets/{index-BzABukCz.js → index-mgPU1lyd.js} +1 -1
- package/web/assets/{index-W2uZUlFs.js → index-olGOY5KB.js} +1 -1
- package/web/assets/{index-DoX0A-rP.js → index-oy7LrXGT.js} +1 -1
- package/web/assets/{index-qulrJQ4J.js → index-x7sBb6oM.js} +1 -1
- package/web/assets/{index.es-C8dcCHdW.js → index.es-C2Q6Owow.js} +1 -1
- package/web/assets/{info-card-BvIMFQo5.js → info-card-C9dRgztS.js} +1 -1
- package/web/assets/{info-metric-Dl4ZDm0Z.js → info-metric-ukWq8INi.js} +1 -1
- package/web/assets/{info-row-jI0h_hv4.js → info-row-CaPaNF4L.js} +1 -1
- package/web/assets/{info-row-group-CFuMWJf1.js → info-row-group-Cxo-4Gk5.js} +1 -1
- package/web/assets/{libphonenumber-Qs8PCdM-.js → libphonenumber-CTvobi0D.js} +1 -1
- package/web/assets/{link-CmPoIweR.js → link-DsltSF2Q.js} +1 -1
- package/web/assets/{list-CkHExntK.js → list-B2b-s8wM.js} +1 -1
- package/web/assets/{list-DLB_hd0Q.js → list-BzgF4i3i.js} +1 -1
- package/web/assets/{list-BdSkPjIa.js → list-Cd1O-aDi.js} +1 -1
- package/web/assets/{list-DaK9287Y.js → list-CvM46TsP.js} +1 -1
- package/web/assets/{list-CWMEf-_C.js → list-DtEjqlED.js} +1 -1
- package/web/assets/{list-DVFJwd_I.js → list-O_uCSLFq.js} +1 -1
- package/web/assets/{list-DghnUOc4.js → list-YNWVqjwW.js} +1 -1
- package/web/assets/{list-eFkvVlp5.js → list-ZaBapEXW.js} +1 -1
- package/web/assets/{metadata-BmQTVFku.js → metadata-_hV0ZaVh.js} +1 -1
- package/web/assets/{meter-event-B1JIhVpb.js → meter-event-CPVBpekF.js} +1 -1
- package/web/assets/{metrics-UvxyQbUF.js → metrics-DVPdwpyf.js} +1 -1
- package/web/assets/{overview-Cxc6WKba.js → overview-CGdVIJrJ.js} +1 -1
- package/web/assets/{overview-DrMaIptb.js → overview-CN59I5Sc.js} +1 -1
- package/web/assets/{past-due-CUXkxns0.js → past-due-C3PtU8uo.js} +1 -1
- package/web/assets/pay-XVdSNq__.js +4 -0
- package/web/assets/{payment-method-info-Bsf89VxV.js → payment-method-info-D_qR04xC.js} +1 -1
- package/web/assets/{preview-C-H8pGVw.js → preview-Bdtbh-xk.js} +1 -1
- package/web/assets/{preview-BifsgUGT.js → preview-F3lma170.js} +1 -1
- package/web/assets/{pricing-table-BUJdtkMq.js → pricing-table-Bt2WljzE.js} +1 -1
- package/web/assets/{pricing-table-B3QOaAB5.js → pricing-table-D9FGYBVa.js} +1 -1
- package/web/assets/{product-select-ChEyoJqJ.js → product-select-_72p-5lF.js} +1 -1
- package/web/assets/{recharge-BVT4USAO.js → recharge-CSlKshbU.js} +1 -1
- package/web/assets/{related-credit-grants-JV2ICsR5.js → related-credit-grants-DnKdAit6.js} +3 -3
- package/web/assets/{safe-did-address-CiG_V6Gy.js → safe-did-address-CRTPYo34.js} +1 -1
- package/web/assets/{source-data-viewer-i1q9wNIG.js → source-data-viewer-D1GShrs5.js} +1 -1
- package/web/assets/{status-CUVYrUIG.js → status-3Swm2gK5.js} +1 -1
- package/web/assets/subscription-BX00k6FU.js +1 -0
- package/web/assets/{subscription-DrnSPIfs.js → subscription-Bzeblscr.js} +1 -1
- package/web/assets/table-BN3WBnr3.js +1 -0
- package/web/assets/{tax-code-select-TS07I0rB.js → tax-code-select-j2arPbaE.js} +1 -1
- package/web/assets/{tax-utils-bPjALcVG.js → tax-utils-B8J0Kfnz.js} +1 -1
- package/web/assets/{uploader-CsQNHG4I.js → uploader-BLdAbLR6.js} +1 -1
- package/web/assets/{usage-records-DAUQMJAW.js → usage-records-BAwNs1y8.js} +1 -1
- package/web/assets/{util-DxXTXkeY.js → util-B8B3fsMa.js} +1 -1
- package/web/assets/{vendor-arcblock-BTCAQSUK.js → vendor-arcblock-D1drrE7q.js} +1 -1
- package/web/assets/{vendor-blocklet-DcLR2Cyf.js → vendor-blocklet-B67R14so.js} +2 -2
- package/web/index.html +1 -1
- package/web/assets/browser-DDv4_sgY.js +0 -1
- package/web/assets/detail-B8eOBVSQ.js +0 -15
- package/web/assets/detail-BO3zglCn.js +0 -15
- package/web/assets/detail-C1FupF1D.js +0 -24
- package/web/assets/detail-wU4wNf4s.js +0 -10
- package/web/assets/form-DD-EiA7W.js +0 -16
- package/web/assets/index-BhcoukR2.js +0 -1
- package/web/assets/index-BturOfxo.js +0 -1
- package/web/assets/index-CDVogp6E.js +0 -1
- package/web/assets/index-DcrGSDby.js +0 -1
- package/web/assets/index-Dybqd298.js +0 -1
- package/web/assets/index-EXZPddtw.js +0 -1
- package/web/assets/index-brUCsnBA.js +0 -1
- package/web/assets/pay-omLYkqRA.js +0 -4
- package/web/assets/subscription-BYz_k9dq.js +0 -1
- package/web/assets/table-BrtHemkA.js +0 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{am as Pb,ax as qb,g as ri,j as u,r as V,e as Ne,A as mr,a3 as ge,q as oe,x as pt,ai as cr,B as Se,bd as Lb,O as Un,be as i0,u as cs,p as jf,a2 as Yn,aZ as ls,ad as Hy,aT as Ib,aB as mf,v as lo,I as ei,D as uo,h as $b,ae as Gn,bf as Zn,bg as pf,N as pr,a$ as Vb,w as gr,bh as r0,bi as Hb,ah as Yb,a4 as Zl,bj as Gb,t as o0,Y as ti,b1 as Ol,b4 as hf,a1 as Ot,ag as zl,Q as s0,s as l0,a0 as Yy,bk as u0,a7 as Xl,$ as ss,bl as Gy,bm as Kb,aY as Qb,bn as c0,bo as Zb,bp as d0,z as Xb,bq as Wb,br as f0,o as m0,bs as Jb,bt as Dd,bu as ex,L as p0,i as h0,bv as Rf,c as tx,T as nx,C as ax,bw as ix,bx as rx,W as ox,by as y0,bz as sx,aF as lx,bA as Mf,bB as ux,bC as cx,bD as dx}from"./vendor-mui-BXZut9Pz.js";import{b as fx,g as mx,k as px,T as hx,r as yx,c as gx,d as Dx,f as Nf,h as vx,i as bx,j as xx,m as Cx,n as g0,o as Sx,p as _x,q as Ax,s as Ex,t as wx,u as Tx,v as kx,w as Fx,x as jx,y as Wl,A as Ht,B as Sn,C as Rx,D as Mx,I as Nx,E as Bx,F as Dt,G as ze,H as qt,J as D0,K as Ux,L as Kn,M as v0,N as Ox,O as zx,P as Pi,Q as Px,R as qx,S as yf,U as Lx,V as ft,W as b0,X as x0,Y as ni,Z as rt,$ as C0,a0 as S0,a1 as Bf,a2 as Ix,a3 as Fi,a4 as _0,a5 as $x,a6 as vd,a7 as A0,a8 as Ky,a9 as Qy,aa as Za,ab as Uf,ac as Vx,ad as Hx,ae as Yx,af as Gx,ag as Kx,ah as Qx,ai as Zx,aj as Xx,ak as Wx,al as Jx,am as eC}from"./vendor-blocklet-
|
|
1
|
+
import{am as Pb,ax as qb,g as ri,j as u,r as V,e as Ne,A as mr,a3 as ge,q as oe,x as pt,ai as cr,B as Se,bd as Lb,O as Un,be as i0,u as cs,p as jf,a2 as Yn,aZ as ls,ad as Hy,aT as Ib,aB as mf,v as lo,I as ei,D as uo,h as $b,ae as Gn,bf as Zn,bg as pf,N as pr,a$ as Vb,w as gr,bh as r0,bi as Hb,ah as Yb,a4 as Zl,bj as Gb,t as o0,Y as ti,b1 as Ol,b4 as hf,a1 as Ot,ag as zl,Q as s0,s as l0,a0 as Yy,bk as u0,a7 as Xl,$ as ss,bl as Gy,bm as Kb,aY as Qb,bn as c0,bo as Zb,bp as d0,z as Xb,bq as Wb,br as f0,o as m0,bs as Jb,bt as Dd,bu as ex,L as p0,i as h0,bv as Rf,c as tx,T as nx,C as ax,bw as ix,bx as rx,W as ox,by as y0,bz as sx,aF as lx,bA as Mf,bB as ux,bC as cx,bD as dx}from"./vendor-mui-BXZut9Pz.js";import{b as fx,g as mx,k as px,T as hx,r as yx,c as gx,d as Dx,f as Nf,h as vx,i as bx,j as xx,m as Cx,n as g0,o as Sx,p as _x,q as Ax,s as Ex,t as wx,u as Tx,v as kx,w as Fx,x as jx,y as Wl,A as Ht,B as Sn,C as Rx,D as Mx,I as Nx,E as Bx,F as Dt,G as ze,H as qt,J as D0,K as Ux,L as Kn,M as v0,N as Ox,O as zx,P as Pi,Q as Px,R as qx,S as yf,U as Lx,V as ft,W as b0,X as x0,Y as ni,Z as rt,$ as C0,a0 as S0,a1 as Bf,a2 as Ix,a3 as Fi,a4 as _0,a5 as $x,a6 as vd,a7 as A0,a8 as Ky,a9 as Qy,aa as Za,ab as Uf,ac as Vx,ad as Hx,ae as Yx,af as Gx,ag as Kx,ah as Qx,ai as Zx,aj as Xx,ak as Wx,al as Jx,am as eC}from"./vendor-blocklet-B67R14so.js";import{a as ds,b as tC,B as nC,R as aC,c as jt,d as Zy}from"./vendor-react-BPknnnEA.js";typeof window<"u"&&!window.Buffer&&(window.Buffer=fx.Buffer);var bd={exports:{}},Jo={},xd={exports:{}},Cd={};var Xy;function iC(){return Xy||(Xy=1,(function(a){function r(P,D){var F=P.length;P.push(D);e:for(;0<F;){var ae=F-1>>>1,be=P[ae];if(0<f(be,D))P[ae]=D,P[F]=be,F=ae;else break e}}function o(P){return P.length===0?null:P[0]}function s(P){if(P.length===0)return null;var D=P[0],F=P.pop();if(F!==D){P[0]=F;e:for(var ae=0,be=P.length,Me=be>>>1;ae<Me;){var Fe=2*(ae+1)-1,Ae=P[Fe],ue=Fe+1,$e=P[ue];if(0>f(Ae,F))ue<be&&0>f($e,Ae)?(P[ae]=$e,P[ue]=F,ae=ue):(P[ae]=Ae,P[Fe]=F,ae=Fe);else if(ue<be&&0>f($e,F))P[ae]=$e,P[ue]=F,ae=ue;else break e}}return D}function f(P,D){var F=P.sortIndex-D.sortIndex;return F!==0?F:P.id-D.id}if(a.unstable_now=void 0,typeof performance=="object"&&typeof performance.now=="function"){var m=performance;a.unstable_now=function(){return m.now()}}else{var c=Date,h=c.now();a.unstable_now=function(){return c.now()-h}}var g=[],y=[],S=1,x=null,A=3,v=!1,N=!1,B=!1,O=!1,k=typeof setTimeout=="function"?setTimeout:null,K=typeof clearTimeout=="function"?clearTimeout:null,j=typeof setImmediate<"u"?setImmediate:null;function w(P){for(var D=o(y);D!==null;){if(D.callback===null)s(y);else if(D.startTime<=P)s(y),D.sortIndex=D.expirationTime,r(g,D);else break;D=o(y)}}function G(P){if(B=!1,w(P),!N)if(o(g)!==null)N=!0,T||(T=!0,Q());else{var D=o(y);D!==null&&me(G,D.startTime-P)}}var T=!1,R=-1,q=5,z=-1;function $(){return O?!0:!(a.unstable_now()-z<q)}function re(){if(O=!1,T){var P=a.unstable_now();z=P;var D=!0;try{e:{N=!1,B&&(B=!1,K(R),R=-1),v=!0;var F=A;try{t:{for(w(P),x=o(g);x!==null&&!(x.expirationTime>P&&$());){var ae=x.callback;if(typeof ae=="function"){x.callback=null,A=x.priorityLevel;var be=ae(x.expirationTime<=P);if(P=a.unstable_now(),typeof be=="function"){x.callback=be,w(P),D=!0;break t}x===o(g)&&s(g),w(P)}else s(g);x=o(g)}if(x!==null)D=!0;else{var Me=o(y);Me!==null&&me(G,Me.startTime-P),D=!1}}break e}finally{x=null,A=F,v=!1}D=void 0}}finally{D?Q():T=!1}}}var Q;if(typeof j=="function")Q=function(){j(re)};else if(typeof MessageChannel<"u"){var Z=new MessageChannel,ne=Z.port2;Z.port1.onmessage=re,Q=function(){ne.postMessage(null)}}else Q=function(){k(re,0)};function me(P,D){R=k(function(){P(a.unstable_now())},D)}a.unstable_IdlePriority=5,a.unstable_ImmediatePriority=1,a.unstable_LowPriority=4,a.unstable_NormalPriority=3,a.unstable_Profiling=null,a.unstable_UserBlockingPriority=2,a.unstable_cancelCallback=function(P){P.callback=null},a.unstable_forceFrameRate=function(P){0>P||125<P?console.error("forceFrameRate takes a positive int between 0 and 125, forcing frame rates higher than 125 fps is not supported"):q=0<P?Math.floor(1e3/P):5},a.unstable_getCurrentPriorityLevel=function(){return A},a.unstable_next=function(P){switch(A){case 1:case 2:case 3:var D=3;break;default:D=A}var F=A;A=D;try{return P()}finally{A=F}},a.unstable_requestPaint=function(){O=!0},a.unstable_runWithPriority=function(P,D){switch(P){case 1:case 2:case 3:case 4:case 5:break;default:P=3}var F=A;A=P;try{return D()}finally{A=F}},a.unstable_scheduleCallback=function(P,D,F){var ae=a.unstable_now();switch(typeof F=="object"&&F!==null?(F=F.delay,F=typeof F=="number"&&0<F?ae+F:ae):F=ae,P){case 1:var be=-1;break;case 2:be=250;break;case 5:be=1073741823;break;case 4:be=1e4;break;default:be=5e3}return be=F+be,P={id:S++,callback:D,priorityLevel:P,startTime:F,expirationTime:be,sortIndex:-1},F>ae?(P.sortIndex=F,r(y,P),o(g)===null&&P===o(y)&&(B?(K(R),R=-1):B=!0,me(G,F-ae))):(P.sortIndex=be,r(g,P),N||v||(N=!0,T||(T=!0,Q()))),P},a.unstable_shouldYield=$,a.unstable_wrapCallback=function(P){var D=A;return function(){var F=A;A=D;try{return P.apply(this,arguments)}finally{A=F}}}})(Cd)),Cd}var Wy;function rC(){return Wy||(Wy=1,xd.exports=iC()),xd.exports}var Jy;function oC(){if(Jy)return Jo;Jy=1;var a=rC(),r=Pb(),o=qb();function s(e){var t="https://react.dev/errors/"+e;if(1<arguments.length){t+="?args[]="+encodeURIComponent(arguments[1]);for(var n=2;n<arguments.length;n++)t+="&args[]="+encodeURIComponent(arguments[n])}return"Minified React error #"+e+"; visit "+t+" for the full message or use the non-minified dev environment for full errors and additional helpful warnings."}function f(e){return!(!e||e.nodeType!==1&&e.nodeType!==9&&e.nodeType!==11)}function m(e){var t=e,n=e;if(e.alternate)for(;t.return;)t=t.return;else{e=t;do t=e,(t.flags&4098)!==0&&(n=t.return),e=t.return;while(e)}return t.tag===3?n:null}function c(e){if(e.tag===13){var t=e.memoizedState;if(t===null&&(e=e.alternate,e!==null&&(t=e.memoizedState)),t!==null)return t.dehydrated}return null}function h(e){if(e.tag===31){var t=e.memoizedState;if(t===null&&(e=e.alternate,e!==null&&(t=e.memoizedState)),t!==null)return t.dehydrated}return null}function g(e){if(m(e)!==e)throw Error(s(188))}function y(e){var t=e.alternate;if(!t){if(t=m(e),t===null)throw Error(s(188));return t!==e?null:e}for(var n=e,i=t;;){var l=n.return;if(l===null)break;var d=l.alternate;if(d===null){if(i=l.return,i!==null){n=i;continue}break}if(l.child===d.child){for(d=l.child;d;){if(d===n)return g(l),e;if(d===i)return g(l),t;d=d.sibling}throw Error(s(188))}if(n.return!==i.return)n=l,i=d;else{for(var p=!1,C=l.child;C;){if(C===n){p=!0,n=l,i=d;break}if(C===i){p=!0,i=l,n=d;break}C=C.sibling}if(!p){for(C=d.child;C;){if(C===n){p=!0,n=d,i=l;break}if(C===i){p=!0,i=d,n=l;break}C=C.sibling}if(!p)throw Error(s(189))}}if(n.alternate!==i)throw Error(s(190))}if(n.tag!==3)throw Error(s(188));return n.stateNode.current===n?e:t}function S(e){var t=e.tag;if(t===5||t===26||t===27||t===6)return e;for(e=e.child;e!==null;){if(t=S(e),t!==null)return t;e=e.sibling}return null}var x=Object.assign,A=Symbol.for("react.element"),v=Symbol.for("react.transitional.element"),N=Symbol.for("react.portal"),B=Symbol.for("react.fragment"),O=Symbol.for("react.strict_mode"),k=Symbol.for("react.profiler"),K=Symbol.for("react.consumer"),j=Symbol.for("react.context"),w=Symbol.for("react.forward_ref"),G=Symbol.for("react.suspense"),T=Symbol.for("react.suspense_list"),R=Symbol.for("react.memo"),q=Symbol.for("react.lazy"),z=Symbol.for("react.activity"),$=Symbol.for("react.memo_cache_sentinel"),re=Symbol.iterator;function Q(e){return e===null||typeof e!="object"?null:(e=re&&e[re]||e["@@iterator"],typeof e=="function"?e:null)}var Z=Symbol.for("react.client.reference");function ne(e){if(e==null)return null;if(typeof e=="function")return e.$$typeof===Z?null:e.displayName||e.name||null;if(typeof e=="string")return e;switch(e){case B:return"Fragment";case k:return"Profiler";case O:return"StrictMode";case G:return"Suspense";case T:return"SuspenseList";case z:return"Activity"}if(typeof e=="object")switch(e.$$typeof){case N:return"Portal";case j:return e.displayName||"Context";case K:return(e._context.displayName||"Context")+".Consumer";case w:var t=e.render;return e=e.displayName,e||(e=t.displayName||t.name||"",e=e!==""?"ForwardRef("+e+")":"ForwardRef"),e;case R:return t=e.displayName||null,t!==null?t:ne(e.type)||"Memo";case q:t=e._payload,e=e._init;try{return ne(e(t))}catch{}}return null}var me=Array.isArray,P=r.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,D=o.__DOM_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,F={pending:!1,data:null,method:null,action:null},ae=[],be=-1;function Me(e){return{current:e}}function Fe(e){0>be||(e.current=ae[be],ae[be]=null,be--)}function Ae(e,t){be++,ae[be]=e.current,e.current=t}var ue=Me(null),$e=Me(null),Pe=Me(null),Xe=Me(null);function Ze(e,t){switch(Ae(Pe,t),Ae($e,e),Ae(ue,null),t.nodeType){case 9:case 11:e=(e=t.documentElement)&&(e=e.namespaceURI)?py(e):0;break;default:if(e=t.tagName,t=t.namespaceURI)t=py(t),e=hy(t,e);else switch(e){case"svg":e=1;break;case"math":e=2;break;default:e=0}}Fe(ue),Ae(ue,e)}function Ue(){Fe(ue),Fe($e),Fe(Pe)}function b(e){e.memoizedState!==null&&Ae(Xe,e);var t=ue.current,n=hy(t,e.type);t!==n&&(Ae($e,e),Ae(ue,n))}function E(e){$e.current===e&&(Fe(ue),Fe($e)),Xe.current===e&&(Fe(Xe),Qo._currentValue=F)}var L,ie;function W(e){if(L===void 0)try{throw Error()}catch(n){var t=n.stack.trim().match(/\n( *(at )?)/);L=t&&t[1]||"",ie=-1<n.stack.indexOf(`
|
|
2
2
|
at`)?" (<anonymous>)":-1<n.stack.indexOf("@")?"@unknown:0:0":""}return`
|
|
3
3
|
`+L+e+ie}var te=!1;function ce(e,t){if(!e||te)return"";te=!0;var n=Error.prepareStackTrace;Error.prepareStackTrace=void 0;try{var i={DetermineComponentFrameRoot:function(){try{if(t){var we=function(){throw Error()};if(Object.defineProperty(we.prototype,"props",{set:function(){throw Error()}}),typeof Reflect=="object"&&Reflect.construct){try{Reflect.construct(we,[])}catch(ye){var he=ye}Reflect.construct(e,[],we)}else{try{we.call()}catch(ye){he=ye}e.call(we.prototype)}}else{try{throw Error()}catch(ye){he=ye}(we=e())&&typeof we.catch=="function"&&we.catch(function(){})}}catch(ye){if(ye&&he&&typeof ye.stack=="string")return[ye.stack,he.stack]}return[null,null]}};i.DetermineComponentFrameRoot.displayName="DetermineComponentFrameRoot";var l=Object.getOwnPropertyDescriptor(i.DetermineComponentFrameRoot,"name");l&&l.configurable&&Object.defineProperty(i.DetermineComponentFrameRoot,"name",{value:"DetermineComponentFrameRoot"});var d=i.DetermineComponentFrameRoot(),p=d[0],C=d[1];if(p&&C){var Y=p.split(`
|
|
4
4
|
`),fe=C.split(`
|
|
@@ -23,7 +23,7 @@ __p += '`),Pe&&(ae+=`' +
|
|
|
23
23
|
function print() { __p += __j.call(arguments, '') }
|
|
24
24
|
`:`;
|
|
25
25
|
`)+ae+`return __p
|
|
26
|
-
}`;var Ae=o(function(){return Function(Z,Me+"return "+ae).apply(void 0,ne)});if(Ae.source=ae,c(Ae))throw Ae;return Ae}return Yd=R,Yd}var fS=dS();const mS=ri(fS),Ll={refund:"refund",stakeReturn:"stake_return"},pS=Wl({common:{id:"ID",url:"URL",none:"None",createdAt:"Created At",updatedAt:"Updated At",billingPeriod:"Billing Period",resumesAt:"Resume At",actions:"Actions",options:"Options",advanced:"Advanced options",login:"Login to access this page",accessDenied:"You do not have permission to access other customer data",settings:"Settings",preview:"Preview",required:"Required",setup:"Setup",amount:"Amount",total:"Total",totalDue:"Total Due",subtotal:"Subtotal",status:"Status",livemode:"Test mode",afterTime:"After {time}",timeAgo:"{time} ago",save:"Save",saved:"Changes saved",remove:"Remove",removed:"Resource removed",confirm:"Confirm",clear:"Clear",show:"Show",hide:"Hide",selectTimeRange:"Select time range",startDate:"Start date",endDate:"End date",upload:"Upload",change:"Change",cancel:"Cancel",close:"Close",back:"Back",every:"every",per:"per {interval}",slash:"/ {interval}",unit:"units",edit:"Edit",quantity:"Quantity",yes:"Yes",no:"No",email:"Email",did:"DID",txHash:"Transaction",txGas:"Transaction Gas",delegateTxHash:"Delegate Transaction",stakeTxHash:"Stake Transaction",slashTxHash:"Slash Transaction",transferTxHash:"Transfer Transaction",mintTxHash:"Mint Transaction",pending:"Pending",failed:"Failed",completed:"Completed",creditTransaction:"Credit Transaction",creditAmount:"Credit Amount",remainingBalance:"Remaining Balance",credits:"credits",ofCredits:"of credits",creditActivity:{consumption:"Credit Consumed",paidGrant:"Credit Top-up",paidAmount:"Paid {amount}",promotionalGrant:"Bonus",resetGrant:"Credit Reset",repayment:"Repayment"},transferStatus:"Transaction Status",sourceData:"Source Data",viewGrant:"View Grant",viewSubscription:"Subscription Detail",view:"View",meterEvent:"Meter Event",source:"Source",viewDetail:"View Detail",viewTransactionDetail:"Transaction Detail",viewConsumptionDetail:"Consumption Detail",customer:"Customer",currency:"Currency",network:"Network",custom:"Custom",description:"Description",statementDescriptor:"Statement descriptor",loadMore:"View more {resource}",loadingMore:"Loading more {resource}...",noMore:"No more {resource}",copied:"Copied",previous:"Back",continue:"Continue",qty:"Qty {count}",each:"{unit} each",trial:"Free for {count} {interval}",billed:"billed {rule}",metered:"based on usage",minute:"minute",hour:"hour",day:"day",week:"week",month:"month",year:"year",hourly:"hourly",daily:"daily",weekly:"weekly",monthly:"monthly",yearly:"yearly",month3:"every 3 months",month6:"every 6 months",recurring:"every {count} {interval}",minutes:"minutes",hours:"hours",days:"days",weeks:"weeks",months:"months",years:"years",type:"type",donation:"Donation",recoverFrom:"Recovered From",quantityLimitPerCheckout:"Exceed purchase limit",quantityNotEnough:"Exceed inventory",amountPrecisionLimit:"Amount decimal places must be less than or equal to {precision}",saveAsDefaultPriceSuccess:"Set default price successfully",stakeAmount:"Stake Amount",slashStakeAmount:"Slash Stake Amount",know:"I know",relatedSubscription:"Subscription",subscriptionOrCredit:"Subscription / Credit",purchaseItems:"Purchase Items",connect:{defaultScan:"Use the following methods to complete this action",scan:"Use the following methods to complete this {action}",confirm:"Confirm",cancel:"Cancel"},paymentMethod:"Payment Method",viewInvoice:"Invoice Detail",submit:"Submit",expired:"Expired",consumed:"Consumed",nextCharge:"Next charge"},payment:{checkout:{contact:"Contact information",method:"Payment method",processing:"Processing",payment:"Pay",try:"Try for free",include:"This includes:",subscription:"Subscribe",donate:"Donate",select:"Select",selected:"Selected",noPricing:"No items to purchase",setup:"Subscribe",continue:"Confirm {action}",connect:"Connect and {action}",login:"Login to load and save contact information",next:{subscription:"View subscription",invoice:"View invoice",view:"View"},paymentRequired:"Payment Required",quote:{title:"Price Locked",locked:"Exchange rate locked",expired:"Quote updating...",expiredMessage:"Quote updating...",expiring:"Quote updating...",remaining:"Quote updates in {time}",currentRate:"Current Exchange Rate",expiresIn:"Updates in",exchangeRate:"Exchange Rate",provider:"Provider",source:"Source",dynamicItems:"Dynamic Pricing Items",dynamicPricingInfo:"Dynamic pricing: 1 {symbol} = {rate} {currency}",referenceUnavailable:"Reference price will update shortly.",rateLine:"1 {symbol} ≈ {rate}",validity:"Quote valid: {time}",lockedWithTime:"Price locked: {time}",lockExpired:"Price lock expired. Please re-confirm.",detailProvider:"Provider",detailUpdatedAt:"Last updated",detailValidity:"Quote validity",detailLock:"Price lock",detailPriceImpact:"Price impact",detailSlippage:"Slippage limit",detailRefresh:"Refresh quote",slippage:{title:"Slippage Limit",tooltip:"Set the minimum exchange rate you are willing to accept. If the rate falls below this value at payment time, the transaction will be rejected.",percentMode:"Percentage",rateMode:"Exact Rate",invalid:"Please enter a valid value",invalidPositive:"Please enter a value greater than 0",rateRequired:"Exchange rate information required",invalidRate:"Invalid exchange rate value",minAcceptableRate:"Minimum Acceptable Rate",maxPayableIncrease:"Maximum Payment Increase",percentInputLabel:"Slippage Percentage",rateInputLabel:"Minimum Acceptable Rate ({currency})",minRateHint:"Minimum acceptable rate: {rate} {currency}",maxPayableHint:"Maximum payment increase: +{percent}%"},slippageLimit:{title:"Slippage Limit Configuration",description:"Set the minimum exchange rate you are willing to accept. If the rate falls below this value, the transaction will pause and ask for your confirmation.",configTogglePercent:"Percentage",configToggleRate:"Exact Rate",recommended:"Recommended",derivedCurrentRate:"Current reference rate",derivedMinRate:"Minimum acceptable rate"},rateUpdateLine:"1 {symbol} ≈ {rate} · updates in {time}",updateHint:"Prices will auto-refresh after update.",lockExpiredTitle:"Price lock expired",lockExpiredDescription:"The lock window has ended. Please re-confirm the latest price.",lockExpiredConfirm:"Re-lock price",slippageExceededTitle:"Rate below slippage limit",slippageExceededDescription:"The current rate is below your minimum acceptable rate. Please refresh the quote and try again.",updated:{pleaseRetry:"Price updated, please resubmit"},priceUpdatedTitle:"Price updated",priceUpdatedDescriptionRate:"Due to TBA exchange rate changes, the amount has been recalculated.",priceUpdatedDescriptionRecalc:"The amount has been recalculated.",priceUpdatedNewTotalLabel:"Updated total",priceUpdatedOldTotal:"Previous total: {total}",priceUpdatedConfirm:"Confirm and continue"},staking:{title:"Staking Required",tooltip:"Staking is used to ensure that future invoices can be paid normally. Revoking the staking from DID Wallet means canceling the subscription."},stakingConfirm:"In this payment, the staked amount is separate from the product cost.",donation:{between:"Please enter an amount between {min} and {max}.",custom:"Custom Amount",select:"Select Amount",summary:"{total} supporters {totalAmount} {symbol}",empty:"No supporters yet",gaveTips:"{count} people gave tips",tipAmount:"Tip Amount",tabHint:"to switch amount",benefits:{one:"{name} will receive all tips",multiple:"Tips will be distributed to {count} beneficiaries",view:"Click to view details"},inactive:"Donation feature is not enabled",enable:"Enable Donation",enableSuccess:"Successfully enabled",configPrompt:"The donation feature is enabled. You can configure donation options in Payment Kit",configNow:"Configure Now",later:"Configure Later",configTip:"Configure donation settings in Payment Kit"},cardPay:"{action} with bank card",skipPaymentMethod:"Skip, bind later",empty:"Nothing to pay",per:"per",pay:"Pay {payee}",try1:"Try {name}",try2:"Try {name} and {count} more",sub1:"Subscribe to {name}",sub2:"Subscribe to {name} and {count} more",then:"Then {subscription} {recurring}",meteredThen:"Then {recurring} based on usage",metered:"{recurring} based on usage",free:"{count} {interval} free",least:"continue with at least",completed:{payment:"Purchase successful",subscription:"Subscription successful",setup:"Subscription successful",donate:"Donation successful",tip:"A payment to {payee} has been completed. You can view the details of this payment in your account.",summary:{paid:"You've paid {amount}"}},vendor:{accountRequired:"This action requires a unified account. Please switch accounts and try again.",processing:"Processing...",progress:"Progress {progress}%",delivered:"Installation completed",failed:"Processing failed",failedMsg:"An exception occurred during installation. We will automatically process a refund for you. We apologize for the inconvenience. Thank you for your understanding!",launcher:{processing:"Installing {name}",completed:"{name} installed successfully",failed:"Failed to install {name}"},didnames:{processing:"Domain ({name}) registering",completed:"Domain ({name}) registered successfully",failed:"Domain ({name}) registered failed"},arcSphereToast:"Successfully installed, three seconds to return to the page continue..."},priceChange:{unavailable:"Unable to fetch exchange rate. Please try again later.",unstable:"Price is volatile. Please try again later.",title:"Price Changed",description:"Price changed significantly. Please refresh the quote and try again.",action:"Refresh Quote",cancel:"Cancel"},confirm:{withStake:"By confirming, you allow {payee} to charge your account for future payments and, if necessary, slash your stake. You can cancel your subscription or withdraw your stake at any time.",withoutStake:"By confirming, you allow {payee} to charge your account for future payments. You can cancel your subscription at any time."},required:"Required",invalid:"Invalid",billing:{auto:"Country",required:"Billing address",country:"Country",state:"State or province",city:"City or town",line1:"Address",line2:"Line2",postal_code:"Postal code"},customer:{name:"Name",email:"Email",phone:"Phone",phonePlaceholder:"Phone number",phoneTip:"In case we need to contact you about your order"},customerInfo:"Customer Information",upsell:{save:"Save with {recurring} billing",revert:"Switch to {recurring} billing",off:"{saving}% off"},cross_sell:{add:"Add to order",remove:"Remove from order"},dynamicPricing:"Dynamic Price",credit:{normal:{oneTime:"Purchase {amount}.",oneTimeWithExpiry:"Purchase {amount} (valid for {duration} {unit}).",recurring:"Subscription: {amount} {period}.",recurringWithExpiry:"Subscription: {amount} {period} (valid for {duration} {unit})."},pending:{notEnough:"You have a usage overage of {amount}. To restore access, a minimum purchase of {quantity} units is required.",oneTimeEnough:"You have a usage overage of {amount}. This purchase adds {totalAmount}. After covering the overage, your new available balance will be {availableAmount}.",oneTimeEnoughWithExpiry:"You have a usage overage of {amount}. This purchase adds {totalAmount} (valid for {duration} {unit}). After covering the overage, your new available balance will be {availableAmount}.",recurringEnough:"You have a usage overage of {amount}. This subscription adds {totalAmount} {period}. After covering the overage, your new available balance will be {availableAmount}.",recurringEnoughWithExpiry:"You have a usage overage of {amount}. This subscription adds {totalAmount} {period} (valid for {duration} {unit}). After covering the overage, your new available balance will be {availableAmount}."},schedule:{periodic:"Grant {amount} every {interval}.",withRefresh:"Grant {amount} every {interval}; unused credits expire with the next grant."},topupDescription:"Purchase {creditName} at {unitPrice} per credit."},expired:{title:"Expired Link",description:"This link has expired. This means that your payment has already been processed or your session has expired."},complete:{title:"Checkout Completed",description:"This checkout session has completed. This means that your payment has already been successfully processed."},emptyItems:{title:"Nothing to show here",description:"It seems this checkout session is not configured properly"},stopAcceptingOrders:{title:"Service Suspended",description:"New order placement is temporarily unavailable due to a system-level service suspension."},error:{title:"Something went wrong"},orderSummary:"Order Summary",orderSummarySubtitle:"Items included in this purchase",paymentDetails:"Payment Details",productListTotal:"Includes {total} items",headerTitle:{subscribe:"Subscribe to {name}",purchase:"Purchase {name}"},planFeatures:"Plan Features",typeBadge:{subscription:"SUBSCRIPTION",topup:"TOP-UP",oneTime:"ONE-TIME"},subtitle:{subscriptionInterval:"{interval} subscription",creditsTopup:"Credits top-up",addonFor:"Add-on for {product}",oneTime:"One-time purchase"},creditTopup:{title:"Get {name}",question:"How many {symbol} do you want?",credits:"Credits",increment:"Increments of {step} {symbol}",validFor:"Credits are valid for {duration} {unit} after purchase.",willReceive:"You'll receive",packInfo:"Includes {packs} credit packs ({perPack} per pack)",autoMatch:"We'll automatically match the closest credit pack.",autoMatchTooltip:"{symbol} are sold in packs of {step}",pendingWarning:"You have a usage overage of {pendingAmount}. You need at least {minCredits} to restore access.",pendingEnough:"You have a usage overage of {pendingAmount}. After covering the overage, your available balance will be {availableAmount}."},promotion:{add_code:"Add promotion code",enter_code:"Enter promotion code",placeholder:"Enter code",apply:"Apply",applied:"Applied promotion codes",dialog:{title:"Add promotion code"},error:{unknown:"Unknown error",network:"Network error occurred",removal:"Failed to remove code"}},coupon:{noDiscount:"No discount",percentage:"{percent}% off",fixedAmount:"{amount} {symbol} off",terms:{forever:"{couponOff} forever",once:"{couponOff} once",repeating:"{couponOff} for {months} month{months > 1 ? 's' : ''}"}},connectModal:{title:"{action}",scan:"Use the following methods to complete this payment",confirm:"Confirm",cancel:"Cancel"},fastPay:{title:"Confirm Payment",confirmMessage:"You will pay {amount} {symbol} from {sourceType}.",autoPaymentReason:"Your payment will be processed automatically as your account has sufficient balance. Please confirm the following details before proceeding.",payer:"Account",amount:"Amount",failed:"Account changed, please pay manually.",balanceLink:"View Balance",credit:{title:"Confirm Credit Payment",availableAmount:"Available Credit: {amount}",confirmMessage:"You will use {amount} credits to subscribe to this service.",meteringSubscriptionMessage:"This subscription service will deduct credits in real-time based on actual usage. You currently have {available} credits available. Confirm to continue?",insufficientTitle:"Insufficient Credit",insufficientMessage:"This subscription service will deduct credits in real-time based on actual usage. You currently have insufficient credits. Please top up your credits first."}}},autoTopup:{title:"Auto Top-Up",enableLabel:"Auto Top-Up",purchaseConfig:"Credit Purchase Configuration",triggerThreshold:"When credits are below",thresholdPlaceholder:"Enter threshold amount",thresholdDescription:"Credits remaining to trigger auto top-up",thresholdMinError:"Threshold must be greater than 0",thresholdFormatError:"Please enter a valid number",creditsIncluded:"{num} included",purchaseBelow:"Purchase this package",perPackage:"per package",quantity:"Quantity",selectPaymentMethod:"Select payment method",paymentInformation:"Payment Information",saveConfiguration:"Save Configuration",saveSuccess:"Auto top-up configuration saved successfully",disableSuccess:"Auto top-up disabled successfully",authorizationRequired:"Payment authorization is required to complete the setup",cryptoAuthorizationNote:"You will need to authorize payments from your wallet to enable automatic top-ups",tip:"With auto top-up enabled, the system automatically buys the specified credit package when your balance drops below the threshold.",authTitle:"Auto Top-Up Authorization",authTip:"Please complete the authorization process to enable automatic top-up",rechargeAmount:"Top-up Amount per Time",currentPaymentMethod:"Current Payment Method",changePaymentMethod:"Change Payment Method",keepCurrent:"Keep Current",changePaymentMethodTip:"You will be redirected to set up a new payment method when saving.",noPaymentMethodSetup:"No payment method configured. Please set up a payment method first.",addFunds:"Add Funds",advanced:"Advanced Options",enabled:"Enabled",disabled:"Disabled",notConfigured:"Auto Top-Up not configured",setup:"Enable Auto Top-Up",ruleDisplay:"When balance < {threshold}, top-up {amount} to get {credits} credits",activeDescription:"Auto top-up is enabled. When Credits drop below {threshold}, the system will automatically purchase {credits} Credits for {amount}",activeDescriptionWithCredits:"Auto top-up is enabled. When Credits drop below {threshold}, the system will automatically purchase {credits}.",purchaseAmount:"Purchase Amount",paymentMethod:"Payment Method",walletBalance:"Wallet Balance",paymentAddress:"Payment Address",inactiveDescription:"Enable auto top-up to automatically renew when {name} are insufficient, effectively avoiding service interruptions.",showDetails:"Show Method",hideDetails:"Hide Method",dailyLimits:{maxAmount:"Daily Top-up Amount Limit",maxAmountPlaceholder:"0 means unlimited",maxAmountDescription:"The maximum amount of top-up you can make each day, 0 means unlimited",maxAttempts:"Daily Top-up Attempts Limit",maxAttemptsPlaceholder:"0 means unlimited",maxAttemptsDescription:"The maximum number of top-up attempts you can make each day, 0 means unlimited"},dynamicPricing:{title:"Dynamic Pricing",currentRate:"Current Exchange Rate",slippageTolerance:"Slippage Tolerance",minAcceptableRate:"Min Acceptable Rate",configureSlippage:"Configure Slippage"}},customer:{payments:"Payment History",invoices:"Invoice History",details:"Details",summary:"Summary",products:"Products",update:"Update Information",empty:"It seems you do not have any subscriptions or payments here",cancel:{button:"Unsubscribe",title:"Cancel your subscription",comment:"Any additional feedback?",description:"Your subscription will be canceled, but it is still available until the end of your current billing period on {date}.",trialDescription:"Free trial subscriptions will be canceled immediately and no longer available, confirm to continue.",feedback:{tip:"We would love your feedback, it will help us improve our service",too_expensive:"The service is too expensive",missing_features:"Features are missing for this service",switched_service:"I have switched to an alternative service",unused:"I no longer use this service",customer_service:"The customer service is poor",too_complex:"The service is too complex to use",low_quality:"The service does not work well",other:"Other reasons"}},pastDue:{button:"Pay",invoices:"Past Due Invoices",warning:"Past due invoices need to be paid immediately, otherwise you cannot make new purchases anymore.",alert:{title:"You have unpaid invoices",customMessage:"Please pay immediately, otherwise new purchases or subscriptions will be prohibited.",confirm:"Pay Now"},view:"View Due Invoices"},recover:{button:"Resume Subscription",title:"Resume Your Subscription",description:"Your subscription will not be canceled and will be automatically renewed on {date}, please confirm to continue.",success:"Subscription resumed successfully",reStakeTitle:"Re-stake to resume subscription",stakeRequiredDescription:"Your previous stake has been revoked. You need to re-stake to resume your subscription.",stakeWarning:"Please ensure you have sufficient balance for staking before proceeding."},changePlan:{button:"Change Plan",current:"Current",pay:"Payment Required",scan:"Complete the payment to upgrade your subscription",success:"Your subscription is successfully upgraded",error:"Failed to upgrade your subscription",config:"Switch to another plan or billing cycle",confirm:"Confirm changes to your subscription",summary:"What you will pay for starting {date}",total:"Total (metered items excluded)",appliedCredit:"Credit applied",newCredit:"Credit issued",remaining:"Amount due today",tableNotFound:"Plan updates are not available"},changePayment:{limit:"Your changes to payment method will not affect existing open or past-due invoices, all future payments will use the new payment method unless you change it again.",review:"Review subscription items",select:"Select payment method",submit:"Confirm change",confirm:"By confirming this change, you allow {payee} to charge {symbol} from your account for future payments in accordance with their terms. You can always change your payment method.",completed:"Your payment method has been successfully updated, all future payments will use the new payment method unless you change it again.",title:"Payment Method Change",reauthorizationRequired:"Slippage settings updated. Re-authorization required to ensure sufficient allowance.",reauthorizationTitle:"Re-authorize Payment",reauthorizationCompleted:"Payment authorization has been successfully updated."},invoice:{summary:"Summary",details:"Details",download:"Download PDF",unitPrice:"Unit Price",amountPaid:"Amount Paid",rawQuantity:"Raw Quantity: {quantity}",amountDue:"Amount Due",amountApplied:"Applied Credit",pay:"Pay this invoice",paySuccess:"You have successfully paid the invoice",payProcessing:"Payment is being processed, please refresh in a moment",payError:"Failed to pay the invoice",sync:"Sync Status",syncing:"Syncing...",syncSuccess:"Synced successfully",renew:"Renew the subscription",renewSuccess:"You have successfully renewed the subscription",renewError:"Failed to renew the subscription",empty:"There are no invoices",next:"No invoices yet, next invoice will be generated on {date}",invoiceNumber:"Invoice Number",emptyList:"No Invoices",noPaymentRequired:"No Payment Required",slippageExceeded:"Slippage Exceeded",slippageExceededDetail:"Exchange rate slippage exceeded threshold, auto-payment failed. Current rate {currentRate}, minimum acceptable {minRate}",payBatch:"Pay Due Invoices",stripePayDescription:"Complete payment using your saved payment method or add a new one.",amount:"Amount",paymentConfirmTitle:"Payment Confirmation",paymentConfirmDescription:"After completing this payment, the payment method you use will be automatically set as the default for this subscription. Additionally, we will retry payment for any other unpaid invoices associated with this subscription.",continue:"Continue",priceChanged:"The exchange rate has changed by {percent}%. The payment amount will be updated. Do you want to continue?",paymentCancelled:"Payment cancelled",credit:"Credit",creditRefresh:"Refresh every {interval} {unit}",quote:{exchangeRate:"Exchange Rate",baseAmount:"Base Amount",providers:"Providers",rateTimestamp:"Rate Timestamp",consensusMethod:"Consensus",rateStatus:"Rate Status",rateStatusNormal:"Normal",rateStatusDegraded:"Degraded",slippage:"Slippage",atPaymentRate:"(at payment rate {rate})"}},overduePayment:{setupPaymentDescription:"Use your saved card or add a new one to complete payment via Stripe.",totalAmount:"Total Amount"},payment:{empty:"There are no payments",emptyList:"No Payments"},refund:{empty:"There are no refunds",emptyList:"No Refunds"},subscriptions:{plan:"Plan",nextInvoice:"Next Invoice",title:"Manage subscriptions",view:"Manage Subscription",current:"Current subscription",viewAll:"View all",empty:"There are no subscriptions here",changePayment:"Change payment method",trialLeft:"Trial Left",owner:"Subscription Owner"},overdue:{title:"You have {count} due invoices for {subscriptionCount} subscriptions, totaling {total} {symbol}{method}. ",simpleTitle:"You have {count} due invoices. ",empty:"Great! You have no due invoices.",defaultAlert:"Please pay immediately to avoid service disruption."}},invoice:{reason:{creation:"Subscription create",cycle:"Subscription cycle",staking:"Subscription staking",update:"Subscription update",recover:"Subscription recover",threshold:"Metered usage billing",cancel:"Subscription cancel",manual:"Manual invoice",upcoming:"Upcoming invoice",slashStake:"Slash stake",stake:"Stake",payment:"Payment",returnStake:"Return stake",stakeForChangePlan:"Subscription plan update",stakeForChangePayment:"Subscription payment method update",recharge:"Add funds",rechargeForSubscription:"Add funds for subscription",overdraftProtection:"SubGuard™ Fee",stakeForSubscriptionOverdraftProtection:"SubGuard™",reStakeToResumeSubscription:"Subscription resume",gas:"Gas",fee:"Fee"}},subscription:{overdue:{simpleTitle:"There are {count} due invoices for your subscription {name}, you need to pay them to activate your subscription or before making new purchases.",title:"There are {count} due invoices for your subscription {name}, the total due amount is {total} {symbol}{method}, you need to pay them to activate your subscription or before making new purchases.",payNow:"Pay Now",notSupport:"This payment method is not supported",total:"Total {total} {currency}{method}",view:"View Subscription Details",viewNow:"View Now",pastDue:"Past Due Invoices",description:"If you have any questions, you can choose ",list:"Past Due Invoices:",empty:"There are no overdue invoices for your subscription {name}.",retry:"Retry",paid:"Paid",processing:"Processing"}},dynamicPricing:{unavailable:{title:"Unable to Calculate Real-Time Price",message:"Exchange rate service is currently unavailable. Products with dynamic pricing cannot be purchased at this moment.",retry:"Retry"}}},refund:{type:{[Ll.refund]:"Refund",[Ll.stakeReturn]:"Stake Return"}},empty:{records:"No matching records found"},benefits:{title:"{count} Beneficiaries"}}),hS=Wl({common:{id:"ID",url:"URL",none:"无",createdAt:"创建时间",updatedAt:"更新时间",billingPeriod:"账单周期",resumesAt:"恢复时间",actions:"操作",options:"选项",advanced:"高级选项",settings:"设置",preview:"预览",required:"必填",setup:"设置",login:"登录以访问此页面",accessDenied:"您无权访问其他客户的数据",amount:"金额",total:"总计",totalDue:"应付总额",subtotal:"小计",status:"状态",livemode:"测试模式",afterTime:"在{time}后",timeAgo:"{time}前",save:"保存",saved:"更改已保存",remove:"删除",removed:"资源已删除",upload:"上传",change:"更换",confirm:"确认",cancel:"取消",clear:"清空",show:"显示",hide:"隐藏",selectTimeRange:"选择时间范围",startDate:"开始日期",endDate:"结束日期",close:"关闭",back:"返回",every:"每",per:"每{interval}",slash:"每{interval}",unit:"件",edit:"编辑",quantity:"数量",yes:"是",no:"否",email:"邮箱",did:"DID",txHash:"交易哈希",txGas:"交易费用",delegateTxHash:"授权交易",stakeTxHash:"质押交易",slashTxHash:"罚没交易",transferTxHash:"扣款交易",mintTxHash:"铸造交易",pending:"处理中",failed:"失败",completed:"已完成",creditTransaction:"信用交易",creditAmount:"信用额度",remainingBalance:"剩余余额",credits:"额度",ofCredits:"额度",creditActivity:{consumption:"额度消耗",paidGrant:"额度充值",paidAmount:"支付 {amount}",promotionalGrant:"赠送",resetGrant:"额度重置",repayment:"支付欠费"},transferStatus:"交易状态",sourceData:"源数据",viewGrant:"查看额度",viewSubscription:"订阅详情",view:"查看",meterEvent:"计量事件",source:"来源",viewDetail:"查看详情",viewTransactionDetail:"交易详情",viewConsumptionDetail:"消费详情",customer:"客户",currency:"币种",network:"网络",custom:"自定义",description:"描述",statementDescriptor:"声明描述",loadMore:"查看更多{resource}",loadingMore:"正在加载更多{resource}...",noMore:"没有更多{resource}",copied:"已复制",previous:"返回",continue:"继续",qty:"{count} 件",each:"每件 {unit}",trial:"免费试用 {count} {interval}",billed:"{rule}收费",metered:"按用量",minute:"分钟",hour:"小时",day:"天",week:"周",month:"月",year:"年",hourly:"每小时",daily:"每天",weekly:"每周",monthly:"每月",yearly:"每年",month3:"每季度",month6:"每半年",recurring:"每{count}{interval}",minutes:"分钟",hours:"小时",days:"天",weeks:"周",months:"月",years:"年",type:"类型",donation:"打赏",recoverFrom:"恢复自",quantityLimitPerCheckout:"超出购买限制",quantityNotEnough:"库存不足",amountPrecisionLimit:"金额小数位数必须在 {precision} 位以内",saveAsDefaultPriceSuccess:"设置默认价格成功",stakeAmount:"质押金额",slashStakeAmount:"罚没金额",know:"我知道了",relatedSubscription:"订阅",subscriptionOrCredit:"订阅 / 额度",purchaseItems:"购买项",connect:{defaultScan:"使用以下方式完成本次操作",scan:"使用以下方式完成本次{action}",confirm:"确认",cancel:"取消"},paymentMethod:"支付方式",viewInvoice:"账单详情",submit:"提交",expired:"已过期",consumed:"已消费",nextCharge:"下次扣款"},payment:{checkout:{contact:"联系信息",method:"支付方式",processing:"处理中",payment:"支付",try:"免费试用",include:"包括:",subscription:"订阅",donate:"捐赠",select:"选择",selected:"已选",noPricing:"没有可购买的物品",setup:"订阅",continue:"确认{action}",connect:"连接并{action}",login:"登录以加载并保存联系信息",next:{subscription:"查看订阅",invoice:"查看账单",view:"查看"},paymentRequired:"支付金额",quote:{title:"价格已锁定",locked:"汇率已锁定",expired:"报价更新中…",expiredMessage:"报价更新中…",expiring:"报价更新中…",remaining:"报价将在 {time} 后更新",currentRate:"当前汇率",expiresIn:"更新时间",exchangeRate:"汇率",provider:"数据提供方",source:"数据来源",dynamicItems:"动态定价商品",dynamicPricingInfo:"动态计价:1 {symbol} = {rate} {currency}",referenceUnavailable:"稍后更新",rateLine:"1 {symbol} ≈ {rate}",validity:"报价有效期:{time}",lockedWithTime:"价格已锁定:{time}",lockExpired:"价格锁定已过期,请重新确认",detailProvider:"数据源",detailUpdatedAt:"最近更新",detailValidity:"报价有效期",detailLock:"锁价剩余",detailPriceImpact:"价格影响",detailSlippage:"滑点下限",detailRefresh:"刷新报价",slippage:{title:"滑点下限",tooltip:"设置您愿意接受的最低汇率。支付时汇率低于此值,交易将被拒绝。",percentMode:"百分比",rateMode:"精确汇率",invalid:"请输入有效的数值",invalidPositive:"请输入大于 0 的数值",rateRequired:"需要汇率信息",invalidRate:"无效的汇率值",minAcceptableRate:"最低可接受汇率",maxPayableIncrease:"最大支付增幅",percentInputLabel:"滑点百分比",rateInputLabel:"最低可接受汇率 ({currency})",minRateHint:"最低可接受汇率: {rate} {currency}",maxPayableHint:"最大支付增幅: +{percent}%"},slippageLimit:{title:"滑点下限配置",description:"设置您愿意接受的最低汇率。支付时汇率低于此值,交易将被暂停并提示您确认。",configTogglePercent:"百分比",configToggleRate:"精确汇率",recommended:"推荐",derivedCurrentRate:"当前参考汇率",derivedMinRate:"最低可接受汇率"},rateUpdateLine:"1 {symbol} ≈ {rate} · {time} 后自动更新",updateHint:"更新后将自动刷新价格",lockExpiredTitle:"价格已过期",lockExpiredDescription:"锁定时间已结束,请重新确认价格后继续支付。",lockExpiredConfirm:"重新锁定价格",slippageExceededTitle:"汇率低于滑点下限",slippageExceededDescription:"当前汇率低于您设置的最低可接受汇率。请刷新报价后重试。",updated:{pleaseRetry:"价格已更新,请重新提交"},priceUpdatedTitle:"价格已更新",priceUpdatedDescriptionRate:"由于 TBA 汇率变化,系统已重新计算本次金额。",priceUpdatedDescriptionRecalc:"系统已重新计算本次金额。",priceUpdatedNewTotalLabel:"更新后总计",priceUpdatedOldTotal:"原总计:{total}",priceUpdatedConfirm:"确认并继续支付"},staking:{title:"质押金额",tooltip:"质押相当于保证金,用于确保未来的账单能够正常扣款,如果你从 DID Wallet 撤销质押,订阅也会被取消。"},stakingConfirm:"在此支付中,质押金额与产品费用分开",donation:{between:"金额必须大于 {min} 且小于 {max}",custom:"输入金额",select:"选择金额",summary:"共有 {total} 人支持 {totalAmount} {symbol}",empty:"❤️ 支持一下",gaveTips:"已有 {count} 人打赏",tipAmount:"打赏金额",tabHint:"快速切换金额",benefits:{one:"{name} 将获得全部打赏",multiple:"打赏将按比例分配给 {count} 位受益人",view:"点击查看详情"},inactive:"打赏功能暂未开启",enable:"启用打赏",enableSuccess:"启用成功",configPrompt:"打赏功能已启用,您可以前往 Payment Kit 进一步配置打赏选项",configNow:"立即配置",later:"稍后配置",configTip:"前往 Payment Kit 配置打赏选项"},cardPay:"使用银行卡{action}",skipPaymentMethod:"跳过,稍后绑定",empty:"没有可支付的项目",per:"每",pay:"付款给 {payee}",try1:"免费试用 {name}",try2:"免费试用 {name} 等{count}个产品",sub1:"订阅 {name}",sub2:"订阅 {name} 等{count}个产品",then:"然后 {subscription} {recurring}",meteredThen:"然后{recurring}按用量计费",metered:"{recurring}按用量计费",free:"免费试用 {count} {interval}",least:"至少",completed:{payment:"购买成功",subscription:"订阅成功",setup:"订阅成功",donate:"捐赠成功",tip:"向 {payee} 的付款已完成。您可以在您的账户中查看此付款的详细信息。",summary:{paid:"本次支付 {amount}"}},vendor:{accountRequired:"您当前使用的是非统一账户登录,此服务需要您使用统一账户。请切换到统一账户登录后重试。",processing:"正在安装中...",progress:"进度 {progress}%",delivered:"安装成功",failed:"安装失败",failedMsg:"很抱歉,安装过程中遇到了一些问题。我们正在处理这个问题,稍后会自动为您退款。感谢您的耐心等待!",launcher:{processing:"正在安装 {name}",completed:"安装 {name} 成功",failed:"安装 {name} 失败"},didnames:{processing:"正在注册 {name}",completed:"注册 {name} 成功",failed:"注册 {name} 失败"},arcSphereToast:"支付并安装成功,三秒后返回页面继续..."},priceChange:{unavailable:"无法获取汇率,请稍后重试。",unstable:"当前汇率波动较大,请稍后重试。",title:"汇率变化",description:"汇率变化较大,请刷新报价后重试。",action:"刷新报价",cancel:"取消"},confirm:{withStake:"确认订阅,即表示您授权 {payee} 从您的账户扣取未来款项,并在必要时罚没质押。您可随时取消订阅或撤销质押。",withoutStake:"确认订阅,即表示您授权 {payee} 从您的账户扣取未来款项。您可随时取消订阅。"},required:"必填项",invalid:"无效",billing:{auto:"国家/地区",required:"账单地址",country:"国家/地区",state:"州或省",city:"城市或镇",line1:"地址",line2:"地址2",postal_code:"邮政编码"},customer:{name:"姓名",email:"邮件",phone:"电话",phonePlaceholder:"电话号码",phoneTip:"以防需要与您联系有关您的订单"},customerInfo:"客户信息",upsell:{save:"使用{recurring}计费方式",revert:"切换到{recurring}计费方式",off:"省 {saving}%"},expired:{title:"链接已过期",description:"此链接已过期。这意味着您的付款已经处理完成或会话已过期。"},complete:{title:"结账已完成",description:"此结账会话已完成。这意味着您的付款已成功处理完成。"},cross_sell:{add:"添加到订单",remove:"从订单移除"},dynamicPricing:"动态定价",promotion:{add_code:"添加促销码",enter_code:"输入促销码",apply:"应用",applied:"已应用的促销码",placeholder:"输入促销码",duration_once:"1次优惠 {amount} {symbol}",duration_repeating:"{months}个月优惠 {amount} {symbol}",duration_forever:"永久优惠 {amount} {symbol}",dialog:{title:"添加促销码"},error:{invalid:"无效的促销码",expired:"促销码已过期",used:"促销码已被使用",not_applicable:"促销码不适用于此订单"}},coupon:{noDiscount:"无优惠",percentage:"{percent}%",fixedAmount:"{amount} {symbol}",terms:{forever:"永久享 {couponOff} 折扣",once:"单次享 {couponOff} 折扣",repeating:"{months} 个月内享 {couponOff} 折扣"}},credit:{normal:{oneTime:"购买 {amount}。",oneTimeWithExpiry:"购买 {amount}(有效期 {duration} {unit})。",recurring:"订阅:{period}{amount}。",recurringWithExpiry:"订阅:{period}{amount}(有效期 {duration} {unit})。"},pending:{notEnough:"您有 {amount} 的使用超额。要恢复访问,需要至少购买 {quantity} 数量。",oneTimeEnough:"您有 {amount} 的使用超额。本次购买将增加 {totalAmount}。扣除超额后,您的新可用余额将为 {availableAmount}。",oneTimeEnoughWithExpiry:"您有 {amount} 的使用超额。本次购买将增加 {totalAmount}(有效期 {duration} {unit})。扣除超额后,您的新可用余额将为 {availableAmount}。",recurringEnough:"您有 {amount} 的使用超额。本订阅{period}将增加 {totalAmount}。扣除超额后,您的新可用余额将为 {availableAmount}。",recurringEnoughWithExpiry:"您有 {amount} 的使用超额。本订阅{period}将增加 {totalAmount}(有效期 {duration} {unit})。扣除超额后,您的新可用余额将为 {availableAmount}。"},schedule:{periodic:"每{interval}发放 {amount}。",withRefresh:"每{interval}发放 {amount},未使用额度将在下次发放时过期。"},topupDescription:"购买 {creditName},单价 {unitPrice}/额度。"},emptyItems:{title:"没有任何购买项目",description:"可能这个付款链接没有正确配置"},stopAcceptingOrders:{title:"暂停服务",description:"因系统策略调整,当前已暂停新订单服务。"},error:{title:"出了点问题"},orderSummary:"订单概览",orderSummarySubtitle:"本次交易包含以下项目",paymentDetails:"支付信息",productListTotal:"包括 {total} 项",headerTitle:{subscribe:"订阅 {name}",purchase:"购买 {name}"},planFeatures:"功能特性",typeBadge:{subscription:"订阅",topup:"充值",oneTime:"一次性购买"},subtitle:{subscriptionInterval:"{interval}订阅",creditsTopup:"余额充值",addonFor:"{product} 的附加项",oneTime:"一次性购买"},creditTopup:{title:"购买 {name}",question:"你需要多少 {symbol}?",credits:"额度",increment:"每次增减 {step} {symbol}",validFor:"额度在购买后 {duration} {unit}内有效。",willReceive:"你将获得",packInfo:"包含 {packs} 个额度包(每包 {perPack})",autoMatch:"我们将自动匹配最接近的额度包。",autoMatchTooltip:"{symbol} 按每包 {step} 个出售",pendingWarning:"您有 {pendingAmount} 的使用超额,至少需要购买 {minCredits} 才能恢复访问。",pendingEnough:"您有 {pendingAmount} 的使用超额,扣除后您的可用余额将为 {availableAmount}。"},connectModal:{title:"{action}",scan:"使用以下方式完成本次支付",confirm:"确认",cancel:"取消"},fastPay:{title:"确认支付",confirmMessage:"您将支付 {amount} {symbol},从{sourceType}扣除。",autoPaymentReason:"该支付可以自动处理,因为您的账户余额充足,请在继续之前确认以下详细信息。",payer:"账户地址",amount:"支付金额",failed:"账户发生变化,无法自动完成支付,请手动支付。",balanceLink:"查看余额",credit:{title:"确认额度支付",availableAmount:"可用额度:{amount}",confirmMessage:"您将使用 {amount} 额度来订阅此服务。",meteringSubscriptionMessage:"此订阅服务将根据实际使用情况实时扣除额度。您当前可用额度为 {available},确认是否继续?",insufficientTitle:"额度不足",insufficientMessage:"此订阅服务将根据实际使用情况实时扣除额度。您当前可用额度不足,请先充值额度。"}}},autoTopup:{title:"自动充值",enableLabel:"自动充值",purchaseConfig:"购买配置",triggerThreshold:"当额度低于",thresholdPlaceholder:"输入触发阈值",thresholdDescription:"触发自动充值的剩余额度",thresholdMinError:"阈值必须大于0",thresholdFormatError:"请输入有效数字",creditsIncluded:"包含 {num}",purchaseBelow:"购买此套餐",perPackage:"每包",quantity:"数量",selectPaymentMethod:"选择支付方式",paymentInformation:"支付信息",saveConfiguration:"保存配置",saveSuccess:"自动充值配置保存成功",disableSuccess:"已关闭自动充值",stripeSetupRequired:"需要信用卡授权以进行自动支付",cryptoAuthorizationNote:"您需要从钱包授权支付以启用自动充值",tip:"启用自动充值后,当您的额度低于阈值时,系统将自动购买指定数量的额度套餐。",authTitle:"自动充值授权",authTip:"请完成授权流程以启用自动充值",rechargeAmount:"每次充值金额",currentPaymentMethod:"当前支付方式",changePaymentMethod:"更换支付方式",keepCurrent:"保持当前",changePaymentMethodTip:"保存时将引导您设置新的支付方式。",noPaymentMethodSetup:"未配置支付方式,请先设置支付方式。",addFunds:"充值",advanced:"高级选项",enabled:"已启用",disabled:"已禁用",notConfigured:"尚未配置自动充值",setup:"去启用",ruleDisplay:"额度低于{threshold}时,充值{amount}可获得{credits}额度",activeDescription:"自动充值已启用,当 Credits 低于 {threshold} 时,系统会自动充值购买 {credits} Credits,支付金额为 {amount}",activeDescriptionWithCredits:"自动充值已启用,当 Credits 低于 {threshold} 时,系统会自动购买 {credits} 额度。",purchaseAmount:"购买所需金额",paymentMethod:"支付方式",walletBalance:"钱包余额",paymentAddress:"支付地址",inactiveDescription:"开启自动充值,即可在 {name} 不足时自动续费,有效避免服务中断。",showDetails:"展开支付信息",hideDetails:"收起",dailyLimits:{maxAmount:"每日充值金额上限",maxAmountPlaceholder:"0表示无限制",maxAmountDescription:"每日可充值的最大总金额,0 表示无限制",maxAttempts:"每日充值次数上限",maxAttemptsPlaceholder:"0表示无限制",maxAttemptsDescription:"每日可充值的最大次数,0 表示无限制"},dynamicPricing:{title:"动态定价",currentRate:"当前汇率",slippageTolerance:"滑点容差",minAcceptableRate:"最低可接受汇率",configureSlippage:"配置滑点"}},customer:{payments:"支付历史",invoices:"账单历史",details:"账户详情",summary:"计费摘要",products:"产品信息",update:"更新客户信息",empty:"看起来您在这里没有任何订阅或支付",cancel:{button:"取消订阅",title:"取消您的订阅",comment:"你还有其他反馈么?",description:"您的订阅将被取消,但仍然可用直到您当前计费周期结束于{date}。",trialDescription:"免费试用的订阅将被立即取消,不再可用,确认是否继续。",feedback:{tip:"我们希望听到您的反馈,这将帮助我们改进我们的服务",too_expensive:"服务费用太高",missing_features:"服务缺少功能",switched_service:"我已切换到其他服务",unused:"我不再使用此服务",customer_service:"客户服务不佳",too_complex:"服务使用过于复杂",low_quality:"服务质量不佳",other:"其他原因"}},pastDue:{button:"续费",invoices:"欠费帐单",warning:"请尽快支付欠费账单,否则你将无法继续使用服务或购买新服务。",alert:{title:"你有欠费账单",description:"看起来你有欠费的账单,在你支付所有欠费账单之前,新的购买或者订阅将被禁止,请不要调皮。",customMessage:"请立即支付,否则新的购买或者订阅将被禁止。",confirm:"去支付"},view:"查看欠费明细"},recover:{button:"恢复订阅",title:"恢复您的订阅",description:"您的订阅将不会被取消,并将在{date}自动续订,请确认是否继续。",success:"订阅恢复成功",reStakeTitle:"重新质押以恢复订阅",stakeRequiredDescription:"您之前的质押已被申请取回,需要重新质押才能恢复订阅。"},changePlan:{button:"切换套餐",current:"当前订阅",pay:"需要支付",scan:"完成支付以更新你的订阅",success:"你的订阅已经更新成功",error:"订阅更新失败",config:"切换套餐或周期",confirm:"确认变更细节",summary:"新的付款计划({date} 开始)",total:"套餐定价(不含按量部分)",appliedCredit:"信用扣除",newCredit:"信用增加",remaining:"还需支付",tableNotFound:"套餐变更不可用"},changePayment:{limit:"你对支付方式的变更不会影响已经生成或者欠费的账单,只会影响未来的账单。你可以在下一张账单生成之前变更支付方式。",review:"查看订阅详情",select:"选择支付方式",submit:"确认变更",confirm:"确认变更方式意味着你允许 {payee} 使用新的支付方式支付你的未来账单。你可以随时再次变更支付方式。",completed:"你的支付方式 已经更新成功。你可以在你的账户中查看此支付方式的详细信息。",title:"支付方式变更",reauthorizationRequired:"滑点设置已更新。需要重新授权以确保授权金额充足。",reauthorizationTitle:"重新授权支付",reauthorizationCompleted:"支付授权已成功更新。"},invoice:{summary:"摘要",details:"详情",download:"下载PDF",unitPrice:"单价",rawQuantity:"汇总前数量: {quantity}",amountPaid:"已支付",amountDue:"待支付",amountApplied:"余额变更",pay:"支付此账单",paySuccess:"支付成功",payProcessing:"支付处理中,请稍候刷新查看",payError:"支付失败",sync:"同步状态",syncing:"同步中...",syncSuccess:"同步成功",renew:"恢复订阅",renewSuccess:"订阅恢复成功",renewError:"订阅恢复失败",empty:"没有任何账单",next:"还没有账单,下次账单将在 {date} 生成",invoiceNumber:"账单编号",emptyList:"没有账单",noPaymentRequired:"无需支付",slippageExceeded:"滑点超限",slippageExceededDetail:"汇率滑点超过下限,无法自动扣款。当前汇率 {currentRate},最低可接受 {minRate}",payBatch:"支付欠款",paymentConfirmTitle:"支付确认",paymentConfirmDescription:"完成本次支付后,您使用的支付方式将自动设置为该订阅的默认支付方式。此外,我们还将对该订阅的其他欠费账单进行重试收费。",continue:"继续",priceChanged:"汇率已变动 {percent}%。支付金额将会更新,是否继续?",paymentCancelled:"支付已取消",credit:"额度",creditRefresh:"每{interval}{unit}刷新",quote:{exchangeRate:"汇率",baseAmount:"USD 本位金额",providers:"数据源",rateTimestamp:"汇率时间",consensusMethod:"汇率算法",rateStatus:"汇率状态",rateStatusNormal:"正常",rateStatusDegraded:"降级",slippage:"滑点",atPaymentRate:"(按支付时汇率 {rate})"}},payment:{empty:"没有支付记录",emptyList:"没有支付记录"},refund:{empty:"没有退款记录",emptyList:"没有退款记录"},subscriptions:{plan:"订阅",nextInvoice:"下次账单",title:"订阅管理",view:"管理订阅",current:"当前订阅",viewAll:"查看所有",empty:"没有任何订阅",changePayment:"切换支付方式",trialLeft:"剩余试用时长",owner:"订阅拥有者"},overdue:{title:"您有 {count} 张欠费账单,涉及 {subscriptionCount} 个订阅,总金额 {total} {symbol}{method}。",simpleTitle:"您有 {count} 张欠费账单,",empty:"恭喜!您当前没有欠费账单。",defaultAlert:"请立即支付,以免影响您的使用。"}},invoice:{reason:{creation:"订阅创建",cycle:"自动扣费",staking:"订阅创建",update:"订阅更新",recover:"订阅恢复",threshold:"用量账单",cancel:"订阅取消",manual:"人工账单",upcoming:"未来账单",slashStake:"罚没质押",stake:"押金",payment:"付款",returnStake:"退押金",stakeForChangePlan:"订阅套餐更新",stakeForChangePayment:"订阅支付方式更新",recharge:"充值",rechargeForSubscription:"订阅充值",overdraftProtection:"订阅守护服务费",stakeForSubscriptionOverdraftProtection:"订阅守护服务",reStakeToResumeSubscription:"订阅恢复",gas:"手续费",fee:"服务费"}},subscription:{overdue:{title:"您的【{name}】订阅共有 {count} 张欠费账单,总计 {total} {symbol}{method},您需要支付这些账单以激活您的订阅,或在进行新的购买之前完成支付。",simpleTitle:"您的【{name}】订阅共有 {count} 张欠费账单,您需要支付这些账单以激活您的订阅,或在进行新的购买之前完成支付。",payNow:"立即支付",notSupport:"暂不支持该支付方式",total:"总计 {total} {currency}{method}",view:"查看订阅详情",pastDue:"欠费账单",viewNow:"立即查看",description:"如果您有任何疑问,可以选择 ",list:"欠费账单:",empty:"您的【{name}】订阅当前没有欠费账单",retry:"重新支付",paid:"已支付",processing:"支付中"}},dynamicPricing:{unavailable:{title:"暂时无法计算实时价格",message:"当前汇率服务不可用,基于动态定价的商品暂时无法购买。",retry:"重试"}}},refund:{type:{[Ll.refund]:"退款",[Ll.stakeReturn]:"退押金"}},empty:{records:"没有找到匹配的记录"},benefits:{title:"{count} 位受益人"}}),O0={zh:hS,en:pS},Eg=(a,r={})=>{try{return mS(a,{interpolate:/{([\s\S]+?)}/g,escape:/{([\s\S]+?)}/g})(r)}catch(o){return console.error(`Error evaluating template: ${a}`,o),""}},z0=({fallbackLocale:a="en"},r=O0)=>(o,s=a,f={})=>!r[s]||!r[s][o]?a&&r[a]?.[o]?Eg(r[a]?.[o],f):o:Eg(r[s][o],f),yS=z0({fallbackLocale:"en"}),Ie=yS;var Bl={exports:{}},gS=Bl.exports,wg;function DS(){return wg||(wg=1,(function(a,r){(function(o,s){a.exports=s()})(gS,(function(){var o,s,f=1e3,m=6e4,c=36e5,h=864e5,g=/\[([^\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g,y=31536e6,S=2628e6,x=/^(-|\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/,A={years:y,months:S,days:h,hours:c,minutes:m,seconds:f,milliseconds:1,weeks:6048e5},v=function(T){return T instanceof w},N=function(T,R,q){return new w(T,q,R.$l)},B=function(T){return s.p(T)+"s"},O=function(T){return T<0},k=function(T){return O(T)?Math.ceil(T):Math.floor(T)},K=function(T){return Math.abs(T)},j=function(T,R){return T?O(T)?{negative:!0,format:""+K(T)+R}:{negative:!1,format:""+T+R}:{negative:!1,format:""}},w=(function(){function T(q,z,$){var re=this;if(this.$d={},this.$l=$,q===void 0&&(this.$ms=0,this.parseFromMilliseconds()),z)return N(q*A[B(z)],this);if(typeof q=="number")return this.$ms=q,this.parseFromMilliseconds(),this;if(typeof q=="object")return Object.keys(q).forEach((function(ne){re.$d[B(ne)]=q[ne]})),this.calMilliseconds(),this;if(typeof q=="string"){var Q=q.match(x);if(Q){var Z=Q.slice(2).map((function(ne){return ne!=null?Number(ne):0}));return this.$d.years=Z[0],this.$d.months=Z[1],this.$d.weeks=Z[2],this.$d.days=Z[3],this.$d.hours=Z[4],this.$d.minutes=Z[5],this.$d.seconds=Z[6],this.calMilliseconds(),this}}return this}var R=T.prototype;return R.calMilliseconds=function(){var q=this;this.$ms=Object.keys(this.$d).reduce((function(z,$){return z+(q.$d[$]||0)*A[$]}),0)},R.parseFromMilliseconds=function(){var q=this.$ms;this.$d.years=k(q/y),q%=y,this.$d.months=k(q/S),q%=S,this.$d.days=k(q/h),q%=h,this.$d.hours=k(q/c),q%=c,this.$d.minutes=k(q/m),q%=m,this.$d.seconds=k(q/f),q%=f,this.$d.milliseconds=q},R.toISOString=function(){var q=j(this.$d.years,"Y"),z=j(this.$d.months,"M"),$=+this.$d.days||0;this.$d.weeks&&($+=7*this.$d.weeks);var re=j($,"D"),Q=j(this.$d.hours,"H"),Z=j(this.$d.minutes,"M"),ne=this.$d.seconds||0;this.$d.milliseconds&&(ne+=this.$d.milliseconds/1e3,ne=Math.round(1e3*ne)/1e3);var me=j(ne,"S"),P=q.negative||z.negative||re.negative||Q.negative||Z.negative||me.negative,D=Q.format||Z.format||me.format?"T":"",F=(P?"-":"")+"P"+q.format+z.format+re.format+D+Q.format+Z.format+me.format;return F==="P"||F==="-P"?"P0D":F},R.toJSON=function(){return this.toISOString()},R.format=function(q){var z=q||"YYYY-MM-DDTHH:mm:ss",$={Y:this.$d.years,YY:s.s(this.$d.years,2,"0"),YYYY:s.s(this.$d.years,4,"0"),M:this.$d.months,MM:s.s(this.$d.months,2,"0"),D:this.$d.days,DD:s.s(this.$d.days,2,"0"),H:this.$d.hours,HH:s.s(this.$d.hours,2,"0"),m:this.$d.minutes,mm:s.s(this.$d.minutes,2,"0"),s:this.$d.seconds,ss:s.s(this.$d.seconds,2,"0"),SSS:s.s(this.$d.milliseconds,3,"0")};return z.replace(g,(function(re,Q){return Q||String($[re])}))},R.as=function(q){return this.$ms/A[B(q)]},R.get=function(q){var z=this.$ms,$=B(q);return $==="milliseconds"?z%=1e3:z=$==="weeks"?k(z/A[$]):this.$d[$],z||0},R.add=function(q,z,$){var re;return re=z?q*A[B(z)]:v(q)?q.$ms:N(q,this).$ms,N(this.$ms+re*($?-1:1),this)},R.subtract=function(q,z){return this.add(q,z,!0)},R.locale=function(q){var z=this.clone();return z.$l=q,z},R.clone=function(){return N(this.$ms,this)},R.humanize=function(q){return o().add(this.$ms,"ms").locale(this.$l).fromNow(!q)},R.valueOf=function(){return this.asMilliseconds()},R.milliseconds=function(){return this.get("milliseconds")},R.asMilliseconds=function(){return this.as("milliseconds")},R.seconds=function(){return this.get("seconds")},R.asSeconds=function(){return this.as("seconds")},R.minutes=function(){return this.get("minutes")},R.asMinutes=function(){return this.as("minutes")},R.hours=function(){return this.get("hours")},R.asHours=function(){return this.as("hours")},R.days=function(){return this.get("days")},R.asDays=function(){return this.as("days")},R.weeks=function(){return this.get("weeks")},R.asWeeks=function(){return this.as("weeks")},R.months=function(){return this.get("months")},R.asMonths=function(){return this.as("months")},R.years=function(){return this.get("years")},R.asYears=function(){return this.as("years")},T})(),G=function(T,R,q){return T.add(R.years()*q,"y").add(R.months()*q,"M").add(R.days()*q,"d").add(R.hours()*q,"h").add(R.minutes()*q,"m").add(R.seconds()*q,"s").add(R.milliseconds()*q,"ms")};return function(T,R,q){o=q,s=q().$utils(),q.duration=function(re,Q){var Z=q.locale();return N(re,{$l:Z},Q)},q.isDuration=v;var z=R.prototype.add,$=R.prototype.subtract;R.prototype.add=function(re,Q){return v(re)?G(this,re,1):z.bind(this)(re,Q)},R.prototype.subtract=function(re,Q){return v(re)?G(this,re,-1):$.bind(this)(re,Q)}}}))})(Bl)),Bl.exports}var vS=DS();const bS=ri(vS);Ht(()=>import("./vendor-blocklet-DcLR2Cyf.js").then(a=>a.e),[]);Ht(()=>import("./vendor-blocklet-DcLR2Cyf.js").then(a=>a.z),[]);Sn.extend(Rx);Sn.extend(Mx);Sn.extend(bS);Sn.extend(Nx);Sn.extend(Bx);const us="z2qaCNvKMv5GjouKdcDWexv6WqtHbpNPQDnAk",xS=(a,r,o="en")=>{let s="";if(a.percent_off&&a.percent_off>0&&(s=Ie("payment.checkout.coupon.percentage",o,{percent:a.percent_off})),a.amount_off&&a.amount_off!=="0"){const{symbol:f}=r;s=a.currency_id===r.id?a.amount_off||"":a.currency_options?.[r.id]?.amount_off||"",s&&(s=Ie("payment.checkout.coupon.fixedAmount",o,{amount:Ca(s,r.decimal),symbol:f}))}return s?Ie(`payment.checkout.coupon.terms.${a.duration}`,o,{couponOff:s,months:a.duration_in_months||0}):Ie("payment.checkout.coupon.noDiscount")},Qn=()=>{const a=window.blocklet?.prefix||"/",r=window.location?.origin;if(window.__PAYMENT_KIT_BASE_URL)try{if(new URL(window.__PAYMENT_KIT_BASE_URL).origin!==window.location.origin)return window.__PAYMENT_KIT_BASE_URL}catch{console.warn("Invalid baseUrl for PaymentProvider",window.__PAYMENT_KIT_BASE_URL)}if((window.blocklet?.componentId||"").split("/").pop()===us)return Dt(r,a);const s=(window.blocklet?.componentMountPoints||[]).find(f=>f?.did===us);return s?Dt(r,s.mountPoint):Dt(r,a)};function Lf(){try{const a=Qn(),r=new URL(a).origin,o=window.location.origin;return r!==o}catch{return!1}}function ln(a,r="en",o="YYYY-MM-DD HH:mm:ss"){return a?Sn(a).locale(eu(r)).format(o):"-"}function CS(a,r="en"){return a?Sn(a).locale(eu(r)).format("lll"):"-"}function SS(a,r="YYYY-MM-DD HH:mm:ss",o="en"){return a?Sn(a).locale(eu(o)).format(r):"-"}function _S(a,r="en"){return Sn(a).locale(eu(r)).format("YYYY-MM-DD HH:mm")}const eu=(a="en")=>a==="tw"?"zh":a,aw=a=>a==="zh"?"zh_CN":"en_US",Pt=a=>{if(!a)return"Unknown error";const{details:r,errors:o,response:s}=a;return Array.isArray(o)?o.map(f=>f.message).join(`
|
|
26
|
+
}`;var Ae=o(function(){return Function(Z,Me+"return "+ae).apply(void 0,ne)});if(Ae.source=ae,c(Ae))throw Ae;return Ae}return Yd=R,Yd}var fS=dS();const mS=ri(fS),Ll={refund:"refund",stakeReturn:"stake_return"},pS=Wl({common:{id:"ID",url:"URL",none:"None",createdAt:"Created At",updatedAt:"Updated At",billingPeriod:"Billing Period",resumesAt:"Resume At",actions:"Actions",options:"Options",advanced:"Advanced options",login:"Login to access this page",accessDenied:"You do not have permission to access other customer data",settings:"Settings",preview:"Preview",required:"Required",setup:"Setup",amount:"Amount",total:"Total",totalDue:"Total Due",subtotal:"Subtotal",status:"Status",livemode:"Test mode",afterTime:"After {time}",timeAgo:"{time} ago",save:"Save",saved:"Changes saved",remove:"Remove",removed:"Resource removed",confirm:"Confirm",clear:"Clear",show:"Show",hide:"Hide",selectTimeRange:"Select time range",startDate:"Start date",endDate:"End date",upload:"Upload",change:"Change",cancel:"Cancel",close:"Close",back:"Back",every:"every",per:"per {interval}",slash:"/ {interval}",unit:"units",edit:"Edit",quantity:"Quantity",yes:"Yes",no:"No",email:"Email",did:"DID",txHash:"Transaction",txGas:"Transaction Gas",delegateTxHash:"Delegate Transaction",stakeTxHash:"Stake Transaction",slashTxHash:"Slash Transaction",transferTxHash:"Transfer Transaction",mintTxHash:"Mint Transaction",pending:"Pending",failed:"Failed",completed:"Completed",creditTransaction:"Credit Transaction",creditAmount:"Credit Amount",remainingBalance:"Remaining Balance",credits:"credits",ofCredits:"of credits",creditActivity:{consumption:"Credit Consumed",paidGrant:"Credit Top-up",paidAmount:"Paid {amount}",promotionalGrant:"Bonus",resetGrant:"Credit Reset",repayment:"Repayment"},transferStatus:"Transaction Status",sourceData:"Source Data",viewGrant:"View Grant",viewSubscription:"Subscription Detail",view:"View",meterEvent:"Meter Event",source:"Source",viewDetail:"View Detail",viewTransactionDetail:"Transaction Detail",viewConsumptionDetail:"Consumption Detail",customer:"Customer",currency:"Currency",network:"Network",custom:"Custom",description:"Description",statementDescriptor:"Statement descriptor",loadMore:"View more {resource}",loadingMore:"Loading more {resource}...",noMore:"No more {resource}",copied:"Copied",previous:"Back",continue:"Continue",qty:"Qty {count}",each:"{unit} each",trial:"Free for {count} {interval}",billed:"billed {rule}",metered:"based on usage",minute:"minute",hour:"hour",day:"day",week:"week",month:"month",year:"year",hourly:"hourly",daily:"daily",weekly:"weekly",monthly:"monthly",yearly:"yearly",month3:"every 3 months",month6:"every 6 months",recurring:"every {count} {interval}",minutes:"minutes",hours:"hours",days:"days",weeks:"weeks",months:"months",years:"years",type:"type",donation:"Donation",recoverFrom:"Recovered From",quantityLimitPerCheckout:"Exceed purchase limit",quantityNotEnough:"Exceed inventory",amountPrecisionLimit:"Amount decimal places must be less than or equal to {precision}",saveAsDefaultPriceSuccess:"Set default price successfully",stakeAmount:"Stake Amount",slashStakeAmount:"Slash Stake Amount",know:"I know",relatedSubscription:"Subscription",subscriptionOrCredit:"Subscription / Credit",purchaseItems:"Purchase Items",connect:{defaultScan:"Use the following methods to complete this action",scan:"Use the following methods to complete this {action}",confirm:"Confirm",cancel:"Cancel"},paymentMethod:"Payment Method",viewInvoice:"Invoice Detail",submit:"Submit",expired:"Expired",consumed:"Consumed",nextCharge:"Next charge"},payment:{checkout:{contact:"Contact information",method:"Payment method",processing:"Processing",payment:"Pay",try:"Try for free",include:"This includes:",subscription:"Subscribe",donate:"Donate",select:"Select",selected:"Selected",noPricing:"No items to purchase",setup:"Subscribe",continue:"Confirm {action}",connect:"Connect and {action}",login:"Login to load and save contact information",next:{subscription:"View subscription",invoice:"View invoice",view:"View"},paymentRequired:"Payment Required",quote:{title:"Price Locked",locked:"Exchange rate locked",expired:"Quote updating...",expiredMessage:"Quote updating...",expiring:"Quote updating...",remaining:"Quote updates in {time}",currentRate:"Current Exchange Rate",expiresIn:"Updates in",exchangeRate:"Exchange Rate",provider:"Provider",source:"Source",dynamicItems:"Dynamic Pricing Items",dynamicPricingInfo:"Dynamic pricing: 1 {symbol} = {rate} {currency}",referenceUnavailable:"Reference price will update shortly.",rateLine:"1 {symbol} ≈ {rate}",validity:"Quote valid: {time}",lockedWithTime:"Price locked: {time}",lockExpired:"Price lock expired. Please re-confirm.",detailProvider:"Provider",detailUpdatedAt:"Last updated",detailValidity:"Quote validity",detailLock:"Price lock",detailPriceImpact:"Price impact",detailSlippage:"Slippage limit",detailRefresh:"Refresh quote",slippage:{title:"Slippage Limit",tooltip:"Set the minimum exchange rate you are willing to accept. If the rate falls below this value at payment time, the transaction will be rejected.",percentMode:"Percentage",rateMode:"Exact Rate",invalid:"Please enter a valid value",invalidPositive:"Please enter a value greater than 0",rateRequired:"Exchange rate information required",invalidRate:"Invalid exchange rate value",minAcceptableRate:"Minimum Acceptable Rate",maxPayableIncrease:"Maximum Payment Increase",percentInputLabel:"Slippage Percentage",rateInputLabel:"Minimum Acceptable Rate ({currency})",minRateHint:"Minimum acceptable rate: {rate} {currency}",maxPayableHint:"Maximum payment increase: +{percent}%"},slippageLimit:{title:"Slippage Limit Configuration",description:"Set the minimum exchange rate you are willing to accept. If the rate falls below this value, the transaction will pause and ask for your confirmation.",configTogglePercent:"Percentage",configToggleRate:"Exact Rate",recommended:"Recommended",derivedCurrentRate:"Current reference rate",derivedMinRate:"Minimum acceptable rate"},rateUpdateLine:"1 {symbol} ≈ {rate} · updates in {time}",updateHint:"Prices will auto-refresh after update.",lockExpiredTitle:"Price lock expired",lockExpiredDescription:"The lock window has ended. Please re-confirm the latest price.",lockExpiredConfirm:"Re-lock price",slippageExceededTitle:"Rate below slippage limit",slippageExceededDescription:"The current rate is below your minimum acceptable rate. Please refresh the quote and try again.",updated:{pleaseRetry:"Price updated, please resubmit"},priceUpdatedTitle:"Price updated",priceUpdatedDescriptionRate:"Due to TBA exchange rate changes, the amount has been recalculated.",priceUpdatedDescriptionRecalc:"The amount has been recalculated.",priceUpdatedNewTotalLabel:"Updated total",priceUpdatedOldTotal:"Previous total: {total}",priceUpdatedConfirm:"Confirm and continue"},staking:{title:"Staking Required",tooltip:"Staking is used to ensure that future invoices can be paid normally. Revoking the staking from DID Wallet means canceling the subscription."},stakingConfirm:"In this payment, the staked amount is separate from the product cost.",donation:{between:"Please enter an amount between {min} and {max}.",custom:"Custom Amount",select:"Select Amount",summary:"{total} supporters {totalAmount} {symbol}",empty:"No supporters yet",gaveTips:"{count} people gave tips",tipAmount:"Tip Amount",tabHint:"to switch amount",benefits:{one:"{name} will receive all tips",multiple:"Tips will be distributed to {count} beneficiaries",view:"Click to view details"},inactive:"Donation feature is not enabled",enable:"Enable Donation",enableSuccess:"Successfully enabled",configPrompt:"The donation feature is enabled. You can configure donation options in Payment Kit",configNow:"Configure Now",later:"Configure Later",configTip:"Configure donation settings in Payment Kit"},cardPay:"{action} with bank card",skipPaymentMethod:"Skip, bind later",empty:"Nothing to pay",per:"per",pay:"Pay {payee}",try1:"Try {name}",try2:"Try {name} and {count} more",sub1:"Subscribe to {name}",sub2:"Subscribe to {name} and {count} more",then:"Then {subscription} {recurring}",meteredThen:"Then {recurring} based on usage",metered:"{recurring} based on usage",free:"{count} {interval} free",least:"continue with at least",completed:{payment:"Purchase successful",subscription:"Subscription successful",setup:"Subscription successful",donate:"Donation successful",tip:"A payment to {payee} has been completed. You can view the details of this payment in your account.",summary:{paid:"You've paid {amount}"}},vendor:{accountRequired:"This action requires a unified account. Please switch accounts and try again.",processing:"Processing...",progress:"Progress {progress}%",delivered:"Installation completed",failed:"Processing failed",failedMsg:"An exception occurred during installation. We will automatically process a refund for you. We apologize for the inconvenience. Thank you for your understanding!",launcher:{processing:"Installing {name}",completed:"{name} installed successfully",failed:"Failed to install {name}"},didnames:{processing:"Domain ({name}) registering",completed:"Domain ({name}) registered successfully",failed:"Domain ({name}) registered failed"},arcSphereToast:"Successfully installed, three seconds to return to the page continue..."},priceChange:{unavailable:"Unable to fetch exchange rate. Please try again later.",unstable:"Price is volatile. Please try again later.",title:"Price Changed",description:"Price changed significantly. Please refresh the quote and try again.",action:"Refresh Quote",cancel:"Cancel"},confirm:{withStake:"By confirming, you allow {payee} to charge your account for future payments and, if necessary, slash your stake. You can cancel your subscription or withdraw your stake at any time.",withoutStake:"By confirming, you allow {payee} to charge your account for future payments. You can cancel your subscription at any time."},required:"Required",invalid:"Invalid",billing:{auto:"Country",required:"Billing address",country:"Country",state:"State or province",city:"City or town",line1:"Address",line2:"Line2",postal_code:"Postal code"},customer:{name:"Name",email:"Email",phone:"Phone",phonePlaceholder:"Phone number",phoneTip:"In case we need to contact you about your order"},customerInfo:"Customer Information",upsell:{save:"Save with {recurring} billing",revert:"Switch to {recurring} billing",off:"{saving}% off"},cross_sell:{add:"Add to order",remove:"Remove from order"},dynamicPricing:"Dynamic Price",credit:{normal:{oneTime:"Purchase {amount}.",oneTimeWithExpiry:"Purchase {amount} (valid for {duration} {unit}).",recurring:"Subscription: {amount} {period}.",recurringWithExpiry:"Subscription: {amount} {period} (valid for {duration} {unit})."},pending:{notEnough:"You have a usage overage of {amount}. To restore access, a minimum purchase of {quantity} units is required.",oneTimeEnough:"You have a usage overage of {amount}. This purchase adds {totalAmount}. After covering the overage, your new available balance will be {availableAmount}.",oneTimeEnoughWithExpiry:"You have a usage overage of {amount}. This purchase adds {totalAmount} (valid for {duration} {unit}). After covering the overage, your new available balance will be {availableAmount}.",recurringEnough:"You have a usage overage of {amount}. This subscription adds {totalAmount} {period}. After covering the overage, your new available balance will be {availableAmount}.",recurringEnoughWithExpiry:"You have a usage overage of {amount}. This subscription adds {totalAmount} {period} (valid for {duration} {unit}). After covering the overage, your new available balance will be {availableAmount}."},schedule:{periodic:"Grant {amount} every {interval}.",withRefresh:"Grant {amount} every {interval}; unused credits expire with the next grant."},topupDescription:"Purchase {creditName} at {unitPrice} per credit."},expired:{title:"Expired Link",description:"This link has expired. This means that your payment has already been processed or your session has expired."},complete:{title:"Checkout Completed",description:"This checkout session has completed. This means that your payment has already been successfully processed."},emptyItems:{title:"Nothing to show here",description:"It seems this checkout session is not configured properly"},stopAcceptingOrders:{title:"Service Suspended",description:"New order placement is temporarily unavailable due to a system-level service suspension."},error:{title:"Something went wrong"},orderSummary:"Order Summary",orderSummarySubtitle:"Items included in this purchase",paymentDetails:"Payment Details",productListTotal:"Includes {total} items",headerTitle:{subscribe:"Subscribe to {name}",purchase:"Purchase {name}"},planFeatures:"Plan Features",typeBadge:{subscription:"SUBSCRIPTION",topup:"TOP-UP",oneTime:"ONE-TIME"},subtitle:{subscriptionInterval:"{interval} subscription",creditsTopup:"Credits top-up",addonFor:"Add-on for {product}",oneTime:"One-time purchase"},creditTopup:{title:"Get {name}",question:"How many {symbol} do you want?",credits:"Credits",increment:"Increments of {step} {symbol}",validFor:"Credits are valid for {duration} {unit} after purchase.",willReceive:"You'll receive",packInfo:"Includes {packs} credit packs ({perPack} per pack)",autoMatch:"We'll automatically match the closest credit pack.",autoMatchTooltip:"{symbol} are sold in packs of {step}",pendingWarning:"You have a usage overage of {pendingAmount}. You need at least {minCredits} to restore access.",pendingEnough:"You have a usage overage of {pendingAmount}. After covering the overage, your available balance will be {availableAmount}."},promotion:{add_code:"Add promotion code",enter_code:"Enter promotion code",placeholder:"Enter code",apply:"Apply",applied:"Applied promotion codes",dialog:{title:"Add promotion code"},error:{unknown:"Unknown error",network:"Network error occurred",removal:"Failed to remove code"}},coupon:{noDiscount:"No discount",percentage:"{percent}% off",fixedAmount:"{amount} {symbol} off",terms:{forever:"{couponOff} forever",once:"{couponOff} once",repeating:"{couponOff} for {months} month{months > 1 ? 's' : ''}"}},connectModal:{title:"{action}",scan:"Use the following methods to complete this payment",confirm:"Confirm",cancel:"Cancel"},fastPay:{title:"Confirm Payment",confirmMessage:"You will pay {amount} {symbol} from {sourceType}.",autoPaymentReason:"Your payment will be processed automatically as your account has sufficient balance. Please confirm the following details before proceeding.",payer:"Account",amount:"Amount",failed:"Account changed, please pay manually.",balanceLink:"View Balance",credit:{title:"Confirm Credit Payment",availableAmount:"Available Credit: {amount}",confirmMessage:"You will use {amount} credits to subscribe to this service.",meteringSubscriptionMessage:"This subscription service will deduct credits in real-time based on actual usage. You currently have {available} credits available. Confirm to continue?",insufficientTitle:"Insufficient Credit",insufficientMessage:"This subscription service will deduct credits in real-time based on actual usage. You currently have insufficient credits. Please top up your credits first."}}},autoTopup:{title:"Auto Top-Up",enableLabel:"Auto Top-Up",purchaseConfig:"Credit Purchase Configuration",triggerThreshold:"When credits are below",thresholdPlaceholder:"Enter threshold amount",thresholdDescription:"Credits remaining to trigger auto top-up",thresholdMinError:"Threshold must be greater than 0",thresholdFormatError:"Please enter a valid number",creditsIncluded:"{num} included",purchaseBelow:"Purchase this package",perPackage:"per package",quantity:"Quantity",selectPaymentMethod:"Select payment method",paymentInformation:"Payment Information",saveConfiguration:"Save Configuration",saveSuccess:"Auto top-up configuration saved successfully",disableSuccess:"Auto top-up disabled successfully",authorizationRequired:"Payment authorization is required to complete the setup",cryptoAuthorizationNote:"You will need to authorize payments from your wallet to enable automatic top-ups",tip:"With auto top-up enabled, the system automatically buys the specified credit package when your balance drops below the threshold.",authTitle:"Auto Top-Up Authorization",authTip:"Please complete the authorization process to enable automatic top-up",rechargeAmount:"Top-up Amount per Time",currentPaymentMethod:"Current Payment Method",changePaymentMethod:"Change Payment Method",keepCurrent:"Keep Current",changePaymentMethodTip:"You will be redirected to set up a new payment method when saving.",noPaymentMethodSetup:"No payment method configured. Please set up a payment method first.",addFunds:"Add Funds",advanced:"Advanced Options",enabled:"Enabled",disabled:"Disabled",notConfigured:"Auto Top-Up not configured",setup:"Enable Auto Top-Up",ruleDisplay:"When balance < {threshold}, top-up {amount} to get {credits} credits",activeDescription:"Auto top-up is enabled. When Credits drop below {threshold}, the system will automatically purchase {credits} Credits for {amount}",activeDescriptionWithCredits:"Auto top-up is enabled. When Credits drop below {threshold}, the system will automatically purchase {credits}.",purchaseAmount:"Purchase Amount",paymentMethod:"Payment Method",walletBalance:"Wallet Balance",paymentAddress:"Payment Address",inactiveDescription:"Enable auto top-up to automatically renew when {name} are insufficient, effectively avoiding service interruptions.",showDetails:"Show Method",hideDetails:"Hide Method",dailyLimits:{maxAmount:"Daily Top-up Amount Limit",maxAmountPlaceholder:"0 means unlimited",maxAmountDescription:"The maximum amount of top-up you can make each day, 0 means unlimited",maxAttempts:"Daily Top-up Attempts Limit",maxAttemptsPlaceholder:"0 means unlimited",maxAttemptsDescription:"The maximum number of top-up attempts you can make each day, 0 means unlimited"},dynamicPricing:{title:"Dynamic Pricing",currentRate:"Current Exchange Rate",slippageTolerance:"Slippage Tolerance",minAcceptableRate:"Min Acceptable Rate",configureSlippage:"Configure Slippage"}},customer:{payments:"Payment History",invoices:"Invoice History",details:"Details",summary:"Summary",products:"Products",update:"Update Information",empty:"It seems you do not have any subscriptions or payments here",cancel:{button:"Unsubscribe",title:"Cancel your subscription",comment:"Any additional feedback?",description:"Your subscription will be canceled, but it is still available until the end of your current billing period on {date}.",trialDescription:"Free trial subscriptions will be canceled immediately and no longer available, confirm to continue.",feedback:{tip:"We would love your feedback, it will help us improve our service",too_expensive:"The service is too expensive",missing_features:"Features are missing for this service",switched_service:"I have switched to an alternative service",unused:"I no longer use this service",customer_service:"The customer service is poor",too_complex:"The service is too complex to use",low_quality:"The service does not work well",other:"Other reasons"}},pastDue:{button:"Pay",invoices:"Past Due Invoices",warning:"Past due invoices need to be paid immediately, otherwise you cannot make new purchases anymore.",alert:{title:"You have unpaid invoices",customMessage:"Please pay immediately, otherwise new purchases or subscriptions will be prohibited.",confirm:"Pay Now"},view:"View Due Invoices"},recover:{button:"Resume Subscription",title:"Resume Your Subscription",description:"Your subscription will not be canceled and will be automatically renewed on {date}, please confirm to continue.",success:"Subscription resumed successfully",reStakeTitle:"Re-stake to resume subscription",stakeRequiredDescription:"Your previous stake has been revoked. You need to re-stake to resume your subscription.",stakeWarning:"Please ensure you have sufficient balance for staking before proceeding."},changePlan:{button:"Change Plan",current:"Current",pay:"Payment Required",scan:"Complete the payment to upgrade your subscription",success:"Your subscription is successfully upgraded",error:"Failed to upgrade your subscription",config:"Switch to another plan or billing cycle",confirm:"Confirm changes to your subscription",summary:"What you will pay for starting {date}",total:"Total (metered items excluded)",appliedCredit:"Credit applied",newCredit:"Credit issued",remaining:"Amount due today",tableNotFound:"Plan updates are not available"},changePayment:{limit:"Your changes to payment method will not affect existing open or past-due invoices, all future payments will use the new payment method unless you change it again.",review:"Review subscription items",select:"Select payment method",submit:"Confirm change",confirm:"By confirming this change, you allow {payee} to charge {symbol} from your account for future payments in accordance with their terms. You can always change your payment method.",completed:"Your payment method has been successfully updated, all future payments will use the new payment method unless you change it again.",title:"Payment Method Change",reauthorizationRequired:"Slippage settings updated. Re-authorization required to ensure sufficient allowance.",reauthorizationTitle:"Re-authorize Payment",reauthorizationCompleted:"Payment authorization has been successfully updated."},invoice:{summary:"Summary",details:"Details",download:"Download PDF",unitPrice:"Unit Price",amountPaid:"Amount Paid",rawQuantity:"Raw Quantity: {quantity}",amountDue:"Amount Due",amountApplied:"Applied Credit",pay:"Pay this invoice",paySuccess:"You have successfully paid the invoice",payProcessing:"Payment is being processed, please refresh in a moment",payError:"Failed to pay the invoice",sync:"Sync Status",syncing:"Syncing...",syncSuccess:"Synced successfully",renew:"Renew the subscription",renewSuccess:"You have successfully renewed the subscription",renewError:"Failed to renew the subscription",empty:"There are no invoices",next:"No invoices yet, next invoice will be generated on {date}",invoiceNumber:"Invoice Number",emptyList:"No Invoices",noPaymentRequired:"No Payment Required",slippageExceeded:"Slippage Exceeded",slippageExceededDetail:"Exchange rate slippage exceeded threshold, auto-payment failed. Current rate {currentRate}, minimum acceptable {minRate}",payBatch:"Pay Due Invoices",stripePayDescription:"Complete payment using your saved payment method or add a new one.",amount:"Amount",paymentConfirmTitle:"Payment Confirmation",paymentConfirmDescription:"After completing this payment, the payment method you use will be automatically set as the default for this subscription. Additionally, we will retry payment for any other unpaid invoices associated with this subscription.",continue:"Continue",priceChanged:"The exchange rate has changed by {percent}%. The payment amount will be updated. Do you want to continue?",paymentCancelled:"Payment cancelled",credit:"Credit",creditRefresh:"Refresh every {interval} {unit}",quote:{exchangeRate:"Exchange Rate",baseAmount:"Base Amount",providers:"Providers",rateTimestamp:"Rate Timestamp",consensusMethod:"Consensus",rateStatus:"Rate Status",rateStatusNormal:"Normal",rateStatusDegraded:"Degraded",slippage:"Slippage",atPaymentRate:"(at payment rate {rate})"}},overduePayment:{setupPaymentDescription:"Use your saved card or add a new one to complete payment via Stripe.",totalAmount:"Total Amount"},payment:{empty:"There are no payments",emptyList:"No Payments"},refund:{empty:"There are no refunds",emptyList:"No Refunds"},subscriptions:{plan:"Plan",nextInvoice:"Next Invoice",title:"Manage subscriptions",view:"Manage Subscription",current:"Current subscription",viewAll:"View all",empty:"There are no subscriptions here",changePayment:"Change payment method",trialLeft:"Trial Left",owner:"Subscription Owner"},overdue:{title:"You have {count} due invoices for {subscriptionCount} subscriptions, totaling {total} {symbol}{method}. ",simpleTitle:"You have {count} due invoices. ",empty:"Great! You have no due invoices.",defaultAlert:"Please pay immediately to avoid service disruption."}},invoice:{reason:{creation:"Subscription create",cycle:"Subscription cycle",staking:"Subscription staking",update:"Subscription update",recover:"Subscription recover",threshold:"Metered usage billing",cancel:"Subscription cancel",manual:"Manual invoice",upcoming:"Upcoming invoice",slashStake:"Slash stake",stake:"Stake",payment:"Payment",returnStake:"Return stake",stakeForChangePlan:"Subscription plan update",stakeForChangePayment:"Subscription payment method update",recharge:"Add funds",rechargeForSubscription:"Add funds for subscription",overdraftProtection:"SubGuard™ Fee",stakeForSubscriptionOverdraftProtection:"SubGuard™",reStakeToResumeSubscription:"Subscription resume",gas:"Gas",fee:"Fee"}},subscription:{overdue:{simpleTitle:"There are {count} due invoices for your subscription {name}, you need to pay them to activate your subscription or before making new purchases.",title:"There are {count} due invoices for your subscription {name}, the total due amount is {total} {symbol}{method}, you need to pay them to activate your subscription or before making new purchases.",payNow:"Pay Now",notSupport:"This payment method is not supported",total:"Total {total} {currency}{method}",view:"View Subscription Details",viewNow:"View Now",pastDue:"Past Due Invoices",description:"If you have any questions, you can choose ",list:"Past Due Invoices:",empty:"There are no overdue invoices for your subscription {name}.",retry:"Retry",paid:"Paid",processing:"Processing"}},dynamicPricing:{unavailable:{title:"Unable to Calculate Real-Time Price",message:"Exchange rate service is currently unavailable. Products with dynamic pricing cannot be purchased at this moment.",retry:"Retry"}}},refund:{type:{[Ll.refund]:"Refund",[Ll.stakeReturn]:"Stake Return"}},empty:{records:"No matching records found"},benefits:{title:"{count} Beneficiaries"}}),hS=Wl({common:{id:"ID",url:"URL",none:"无",createdAt:"创建时间",updatedAt:"更新时间",billingPeriod:"账单周期",resumesAt:"恢复时间",actions:"操作",options:"选项",advanced:"高级选项",settings:"设置",preview:"预览",required:"必填",setup:"设置",login:"登录以访问此页面",accessDenied:"您无权访问其他客户的数据",amount:"金额",total:"总计",totalDue:"应付总额",subtotal:"小计",status:"状态",livemode:"测试模式",afterTime:"在{time}后",timeAgo:"{time}前",save:"保存",saved:"更改已保存",remove:"删除",removed:"资源已删除",upload:"上传",change:"更换",confirm:"确认",cancel:"取消",clear:"清空",show:"显示",hide:"隐藏",selectTimeRange:"选择时间范围",startDate:"开始日期",endDate:"结束日期",close:"关闭",back:"返回",every:"每",per:"每{interval}",slash:"每{interval}",unit:"件",edit:"编辑",quantity:"数量",yes:"是",no:"否",email:"邮箱",did:"DID",txHash:"交易哈希",txGas:"交易费用",delegateTxHash:"授权交易",stakeTxHash:"质押交易",slashTxHash:"罚没交易",transferTxHash:"扣款交易",mintTxHash:"铸造交易",pending:"处理中",failed:"失败",completed:"已完成",creditTransaction:"信用交易",creditAmount:"信用额度",remainingBalance:"剩余余额",credits:"额度",ofCredits:"额度",creditActivity:{consumption:"额度消耗",paidGrant:"额度充值",paidAmount:"支付 {amount}",promotionalGrant:"赠送",resetGrant:"额度重置",repayment:"支付欠费"},transferStatus:"交易状态",sourceData:"源数据",viewGrant:"查看额度",viewSubscription:"订阅详情",view:"查看",meterEvent:"计量事件",source:"来源",viewDetail:"查看详情",viewTransactionDetail:"交易详情",viewConsumptionDetail:"消费详情",customer:"客户",currency:"币种",network:"网络",custom:"自定义",description:"描述",statementDescriptor:"声明描述",loadMore:"查看更多{resource}",loadingMore:"正在加载更多{resource}...",noMore:"没有更多{resource}",copied:"已复制",previous:"返回",continue:"继续",qty:"{count} 件",each:"每件 {unit}",trial:"免费试用 {count} {interval}",billed:"{rule}收费",metered:"按用量",minute:"分钟",hour:"小时",day:"天",week:"周",month:"月",year:"年",hourly:"每小时",daily:"每天",weekly:"每周",monthly:"每月",yearly:"每年",month3:"每季度",month6:"每半年",recurring:"每{count}{interval}",minutes:"分钟",hours:"小时",days:"天",weeks:"周",months:"月",years:"年",type:"类型",donation:"打赏",recoverFrom:"恢复自",quantityLimitPerCheckout:"超出购买限制",quantityNotEnough:"库存不足",amountPrecisionLimit:"金额小数位数必须在 {precision} 位以内",saveAsDefaultPriceSuccess:"设置默认价格成功",stakeAmount:"质押金额",slashStakeAmount:"罚没金额",know:"我知道了",relatedSubscription:"订阅",subscriptionOrCredit:"订阅 / 额度",purchaseItems:"购买项",connect:{defaultScan:"使用以下方式完成本次操作",scan:"使用以下方式完成本次{action}",confirm:"确认",cancel:"取消"},paymentMethod:"支付方式",viewInvoice:"账单详情",submit:"提交",expired:"已过期",consumed:"已消费",nextCharge:"下次扣款"},payment:{checkout:{contact:"联系信息",method:"支付方式",processing:"处理中",payment:"支付",try:"免费试用",include:"包括:",subscription:"订阅",donate:"捐赠",select:"选择",selected:"已选",noPricing:"没有可购买的物品",setup:"订阅",continue:"确认{action}",connect:"连接并{action}",login:"登录以加载并保存联系信息",next:{subscription:"查看订阅",invoice:"查看账单",view:"查看"},paymentRequired:"支付金额",quote:{title:"价格已锁定",locked:"汇率已锁定",expired:"报价更新中…",expiredMessage:"报价更新中…",expiring:"报价更新中…",remaining:"报价将在 {time} 后更新",currentRate:"当前汇率",expiresIn:"更新时间",exchangeRate:"汇率",provider:"数据提供方",source:"数据来源",dynamicItems:"动态定价商品",dynamicPricingInfo:"动态计价:1 {symbol} = {rate} {currency}",referenceUnavailable:"稍后更新",rateLine:"1 {symbol} ≈ {rate}",validity:"报价有效期:{time}",lockedWithTime:"价格已锁定:{time}",lockExpired:"价格锁定已过期,请重新确认",detailProvider:"数据源",detailUpdatedAt:"最近更新",detailValidity:"报价有效期",detailLock:"锁价剩余",detailPriceImpact:"价格影响",detailSlippage:"滑点下限",detailRefresh:"刷新报价",slippage:{title:"滑点下限",tooltip:"设置您愿意接受的最低汇率。支付时汇率低于此值,交易将被拒绝。",percentMode:"百分比",rateMode:"精确汇率",invalid:"请输入有效的数值",invalidPositive:"请输入大于 0 的数值",rateRequired:"需要汇率信息",invalidRate:"无效的汇率值",minAcceptableRate:"最低可接受汇率",maxPayableIncrease:"最大支付增幅",percentInputLabel:"滑点百分比",rateInputLabel:"最低可接受汇率 ({currency})",minRateHint:"最低可接受汇率: {rate} {currency}",maxPayableHint:"最大支付增幅: +{percent}%"},slippageLimit:{title:"滑点下限配置",description:"设置您愿意接受的最低汇率。支付时汇率低于此值,交易将被暂停并提示您确认。",configTogglePercent:"百分比",configToggleRate:"精确汇率",recommended:"推荐",derivedCurrentRate:"当前参考汇率",derivedMinRate:"最低可接受汇率"},rateUpdateLine:"1 {symbol} ≈ {rate} · {time} 后自动更新",updateHint:"更新后将自动刷新价格",lockExpiredTitle:"价格已过期",lockExpiredDescription:"锁定时间已结束,请重新确认价格后继续支付。",lockExpiredConfirm:"重新锁定价格",slippageExceededTitle:"汇率低于滑点下限",slippageExceededDescription:"当前汇率低于您设置的最低可接受汇率。请刷新报价后重试。",updated:{pleaseRetry:"价格已更新,请重新提交"},priceUpdatedTitle:"价格已更新",priceUpdatedDescriptionRate:"由于 TBA 汇率变化,系统已重新计算本次金额。",priceUpdatedDescriptionRecalc:"系统已重新计算本次金额。",priceUpdatedNewTotalLabel:"更新后总计",priceUpdatedOldTotal:"原总计:{total}",priceUpdatedConfirm:"确认并继续支付"},staking:{title:"质押金额",tooltip:"质押相当于保证金,用于确保未来的账单能够正常扣款,如果你从 DID Wallet 撤销质押,订阅也会被取消。"},stakingConfirm:"在此支付中,质押金额与产品费用分开",donation:{between:"金额必须大于 {min} 且小于 {max}",custom:"输入金额",select:"选择金额",summary:"共有 {total} 人支持 {totalAmount} {symbol}",empty:"❤️ 支持一下",gaveTips:"已有 {count} 人打赏",tipAmount:"打赏金额",tabHint:"快速切换金额",benefits:{one:"{name} 将获得全部打赏",multiple:"打赏将按比例分配给 {count} 位受益人",view:"点击查看详情"},inactive:"打赏功能暂未开启",enable:"启用打赏",enableSuccess:"启用成功",configPrompt:"打赏功能已启用,您可以前往 Payment Kit 进一步配置打赏选项",configNow:"立即配置",later:"稍后配置",configTip:"前往 Payment Kit 配置打赏选项"},cardPay:"使用银行卡{action}",skipPaymentMethod:"跳过,稍后绑定",empty:"没有可支付的项目",per:"每",pay:"付款给 {payee}",try1:"免费试用 {name}",try2:"免费试用 {name} 等{count}个产品",sub1:"订阅 {name}",sub2:"订阅 {name} 等{count}个产品",then:"然后 {subscription} {recurring}",meteredThen:"然后{recurring}按用量计费",metered:"{recurring}按用量计费",free:"免费试用 {count} {interval}",least:"至少",completed:{payment:"购买成功",subscription:"订阅成功",setup:"订阅成功",donate:"捐赠成功",tip:"向 {payee} 的付款已完成。您可以在您的账户中查看此付款的详细信息。",summary:{paid:"本次支付 {amount}"}},vendor:{accountRequired:"您当前使用的是非统一账户登录,此服务需要您使用统一账户。请切换到统一账户登录后重试。",processing:"正在安装中...",progress:"进度 {progress}%",delivered:"安装成功",failed:"安装失败",failedMsg:"很抱歉,安装过程中遇到了一些问题。我们正在处理这个问题,稍后会自动为您退款。感谢您的耐心等待!",launcher:{processing:"正在安装 {name}",completed:"安装 {name} 成功",failed:"安装 {name} 失败"},didnames:{processing:"正在注册 {name}",completed:"注册 {name} 成功",failed:"注册 {name} 失败"},arcSphereToast:"支付并安装成功,三秒后返回页面继续..."},priceChange:{unavailable:"无法获取汇率,请稍后重试。",unstable:"当前汇率波动较大,请稍后重试。",title:"汇率变化",description:"汇率变化较大,请刷新报价后重试。",action:"刷新报价",cancel:"取消"},confirm:{withStake:"确认订阅,即表示您授权 {payee} 从您的账户扣取未来款项,并在必要时罚没质押。您可随时取消订阅或撤销质押。",withoutStake:"确认订阅,即表示您授权 {payee} 从您的账户扣取未来款项。您可随时取消订阅。"},required:"必填项",invalid:"无效",billing:{auto:"国家/地区",required:"账单地址",country:"国家/地区",state:"州或省",city:"城市或镇",line1:"地址",line2:"地址2",postal_code:"邮政编码"},customer:{name:"姓名",email:"邮件",phone:"电话",phonePlaceholder:"电话号码",phoneTip:"以防需要与您联系有关您的订单"},customerInfo:"客户信息",upsell:{save:"使用{recurring}计费方式",revert:"切换到{recurring}计费方式",off:"省 {saving}%"},expired:{title:"链接已过期",description:"此链接已过期。这意味着您的付款已经处理完成或会话已过期。"},complete:{title:"结账已完成",description:"此结账会话已完成。这意味着您的付款已成功处理完成。"},cross_sell:{add:"添加到订单",remove:"从订单移除"},dynamicPricing:"动态定价",promotion:{add_code:"添加促销码",enter_code:"输入促销码",apply:"应用",applied:"已应用的促销码",placeholder:"输入促销码",duration_once:"1次优惠 {amount} {symbol}",duration_repeating:"{months}个月优惠 {amount} {symbol}",duration_forever:"永久优惠 {amount} {symbol}",dialog:{title:"添加促销码"},error:{invalid:"无效的促销码",expired:"促销码已过期",used:"促销码已被使用",not_applicable:"促销码不适用于此订单"}},coupon:{noDiscount:"无优惠",percentage:"{percent}%",fixedAmount:"{amount} {symbol}",terms:{forever:"永久享 {couponOff} 折扣",once:"单次享 {couponOff} 折扣",repeating:"{months} 个月内享 {couponOff} 折扣"}},credit:{normal:{oneTime:"购买 {amount}。",oneTimeWithExpiry:"购买 {amount}(有效期 {duration} {unit})。",recurring:"订阅:{period}{amount}。",recurringWithExpiry:"订阅:{period}{amount}(有效期 {duration} {unit})。"},pending:{notEnough:"您有 {amount} 的使用超额。要恢复访问,需要至少购买 {quantity} 数量。",oneTimeEnough:"您有 {amount} 的使用超额。本次购买将增加 {totalAmount}。扣除超额后,您的新可用余额将为 {availableAmount}。",oneTimeEnoughWithExpiry:"您有 {amount} 的使用超额。本次购买将增加 {totalAmount}(有效期 {duration} {unit})。扣除超额后,您的新可用余额将为 {availableAmount}。",recurringEnough:"您有 {amount} 的使用超额。本订阅{period}将增加 {totalAmount}。扣除超额后,您的新可用余额将为 {availableAmount}。",recurringEnoughWithExpiry:"您有 {amount} 的使用超额。本订阅{period}将增加 {totalAmount}(有效期 {duration} {unit})。扣除超额后,您的新可用余额将为 {availableAmount}。"},schedule:{periodic:"每{interval}发放 {amount}。",withRefresh:"每{interval}发放 {amount},未使用额度将在下次发放时过期。"},topupDescription:"购买 {creditName},单价 {unitPrice}/额度。"},emptyItems:{title:"没有任何购买项目",description:"可能这个付款链接没有正确配置"},stopAcceptingOrders:{title:"暂停服务",description:"因系统策略调整,当前已暂停新订单服务。"},error:{title:"出了点问题"},orderSummary:"订单概览",orderSummarySubtitle:"本次交易包含以下项目",paymentDetails:"支付信息",productListTotal:"包括 {total} 项",headerTitle:{subscribe:"订阅 {name}",purchase:"购买 {name}"},planFeatures:"功能特性",typeBadge:{subscription:"订阅",topup:"充值",oneTime:"一次性购买"},subtitle:{subscriptionInterval:"{interval}订阅",creditsTopup:"余额充值",addonFor:"{product} 的附加项",oneTime:"一次性购买"},creditTopup:{title:"购买 {name}",question:"你需要多少 {symbol}?",credits:"额度",increment:"每次增减 {step} {symbol}",validFor:"额度在购买后 {duration} {unit}内有效。",willReceive:"你将获得",packInfo:"包含 {packs} 个额度包(每包 {perPack})",autoMatch:"我们将自动匹配最接近的额度包。",autoMatchTooltip:"{symbol} 按每包 {step} 个出售",pendingWarning:"您有 {pendingAmount} 的使用超额,至少需要购买 {minCredits} 才能恢复访问。",pendingEnough:"您有 {pendingAmount} 的使用超额,扣除后您的可用余额将为 {availableAmount}。"},connectModal:{title:"{action}",scan:"使用以下方式完成本次支付",confirm:"确认",cancel:"取消"},fastPay:{title:"确认支付",confirmMessage:"您将支付 {amount} {symbol},从{sourceType}扣除。",autoPaymentReason:"该支付可以自动处理,因为您的账户余额充足,请在继续之前确认以下详细信息。",payer:"账户地址",amount:"支付金额",failed:"账户发生变化,无法自动完成支付,请手动支付。",balanceLink:"查看余额",credit:{title:"确认额度支付",availableAmount:"可用额度:{amount}",confirmMessage:"您将使用 {amount} 额度来订阅此服务。",meteringSubscriptionMessage:"此订阅服务将根据实际使用情况实时扣除额度。您当前可用额度为 {available},确认是否继续?",insufficientTitle:"额度不足",insufficientMessage:"此订阅服务将根据实际使用情况实时扣除额度。您当前可用额度不足,请先充值额度。"}}},autoTopup:{title:"自动充值",enableLabel:"自动充值",purchaseConfig:"购买配置",triggerThreshold:"当额度低于",thresholdPlaceholder:"输入触发阈值",thresholdDescription:"触发自动充值的剩余额度",thresholdMinError:"阈值必须大于0",thresholdFormatError:"请输入有效数字",creditsIncluded:"包含 {num}",purchaseBelow:"购买此套餐",perPackage:"每包",quantity:"数量",selectPaymentMethod:"选择支付方式",paymentInformation:"支付信息",saveConfiguration:"保存配置",saveSuccess:"自动充值配置保存成功",disableSuccess:"已关闭自动充值",stripeSetupRequired:"需要信用卡授权以进行自动支付",cryptoAuthorizationNote:"您需要从钱包授权支付以启用自动充值",tip:"启用自动充值后,当您的额度低于阈值时,系统将自动购买指定数量的额度套餐。",authTitle:"自动充值授权",authTip:"请完成授权流程以启用自动充值",rechargeAmount:"每次充值金额",currentPaymentMethod:"当前支付方式",changePaymentMethod:"更换支付方式",keepCurrent:"保持当前",changePaymentMethodTip:"保存时将引导您设置新的支付方式。",noPaymentMethodSetup:"未配置支付方式,请先设置支付方式。",addFunds:"充值",advanced:"高级选项",enabled:"已启用",disabled:"已禁用",notConfigured:"尚未配置自动充值",setup:"去启用",ruleDisplay:"额度低于{threshold}时,充值{amount}可获得{credits}额度",activeDescription:"自动充值已启用,当 Credits 低于 {threshold} 时,系统会自动充值购买 {credits} Credits,支付金额为 {amount}",activeDescriptionWithCredits:"自动充值已启用,当 Credits 低于 {threshold} 时,系统会自动购买 {credits} 额度。",purchaseAmount:"购买所需金额",paymentMethod:"支付方式",walletBalance:"钱包余额",paymentAddress:"支付地址",inactiveDescription:"开启自动充值,即可在 {name} 不足时自动续费,有效避免服务中断。",showDetails:"展开支付信息",hideDetails:"收起",dailyLimits:{maxAmount:"每日充值金额上限",maxAmountPlaceholder:"0表示无限制",maxAmountDescription:"每日可充值的最大总金额,0 表示无限制",maxAttempts:"每日充值次数上限",maxAttemptsPlaceholder:"0表示无限制",maxAttemptsDescription:"每日可充值的最大次数,0 表示无限制"},dynamicPricing:{title:"动态定价",currentRate:"当前汇率",slippageTolerance:"滑点容差",minAcceptableRate:"最低可接受汇率",configureSlippage:"配置滑点"}},customer:{payments:"支付历史",invoices:"账单历史",details:"账户详情",summary:"计费摘要",products:"产品信息",update:"更新客户信息",empty:"看起来您在这里没有任何订阅或支付",cancel:{button:"取消订阅",title:"取消您的订阅",comment:"你还有其他反馈么?",description:"您的订阅将被取消,但仍然可用直到您当前计费周期结束于{date}。",trialDescription:"免费试用的订阅将被立即取消,不再可用,确认是否继续。",feedback:{tip:"我们希望听到您的反馈,这将帮助我们改进我们的服务",too_expensive:"服务费用太高",missing_features:"服务缺少功能",switched_service:"我已切换到其他服务",unused:"我不再使用此服务",customer_service:"客户服务不佳",too_complex:"服务使用过于复杂",low_quality:"服务质量不佳",other:"其他原因"}},pastDue:{button:"续费",invoices:"欠费帐单",warning:"请尽快支付欠费账单,否则你将无法继续使用服务或购买新服务。",alert:{title:"你有欠费账单",description:"看起来你有欠费的账单,在你支付所有欠费账单之前,新的购买或者订阅将被禁止,请不要调皮。",customMessage:"请立即支付,否则新的购买或者订阅将被禁止。",confirm:"去支付"},view:"查看欠费明细"},recover:{button:"恢复订阅",title:"恢复您的订阅",description:"您的订阅将不会被取消,并将在{date}自动续订,请确认是否继续。",success:"订阅恢复成功",reStakeTitle:"重新质押以恢复订阅",stakeRequiredDescription:"您之前的质押已被申请取回,需要重新质押才能恢复订阅。"},changePlan:{button:"切换套餐",current:"当前订阅",pay:"需要支付",scan:"完成支付以更新你的订阅",success:"你的订阅已经更新成功",error:"订阅更新失败",config:"切换套餐或周期",confirm:"确认变更细节",summary:"新的付款计划({date} 开始)",total:"套餐定价(不含按量部分)",appliedCredit:"信用扣除",newCredit:"信用增加",remaining:"还需支付",tableNotFound:"套餐变更不可用"},changePayment:{limit:"你对支付方式的变更不会影响已经生成或者欠费的账单,只会影响未来的账单。你可以在下一张账单生成之前变更支付方式。",review:"查看订阅详情",select:"选择支付方式",submit:"确认变更",confirm:"确认变更方式意味着你允许 {payee} 使用新的支付方式支付你的未来账单。你可以随时再次变更支付方式。",completed:"你的支付方式 已经更新成功。你可以在你的账户中查看此支付方式的详细信息。",title:"支付方式变更",reauthorizationRequired:"滑点设置已更新。需要重新授权以确保授权金额充足。",reauthorizationTitle:"重新授权支付",reauthorizationCompleted:"支付授权已成功更新。"},invoice:{summary:"摘要",details:"详情",download:"下载PDF",unitPrice:"单价",rawQuantity:"汇总前数量: {quantity}",amountPaid:"已支付",amountDue:"待支付",amountApplied:"余额变更",pay:"支付此账单",paySuccess:"支付成功",payProcessing:"支付处理中,请稍候刷新查看",payError:"支付失败",sync:"同步状态",syncing:"同步中...",syncSuccess:"同步成功",renew:"恢复订阅",renewSuccess:"订阅恢复成功",renewError:"订阅恢复失败",empty:"没有任何账单",next:"还没有账单,下次账单将在 {date} 生成",invoiceNumber:"账单编号",emptyList:"没有账单",noPaymentRequired:"无需支付",slippageExceeded:"滑点超限",slippageExceededDetail:"汇率滑点超过下限,无法自动扣款。当前汇率 {currentRate},最低可接受 {minRate}",payBatch:"支付欠款",paymentConfirmTitle:"支付确认",paymentConfirmDescription:"完成本次支付后,您使用的支付方式将自动设置为该订阅的默认支付方式。此外,我们还将对该订阅的其他欠费账单进行重试收费。",continue:"继续",priceChanged:"汇率已变动 {percent}%。支付金额将会更新,是否继续?",paymentCancelled:"支付已取消",credit:"额度",creditRefresh:"每{interval}{unit}刷新",quote:{exchangeRate:"汇率",baseAmount:"USD 本位金额",providers:"数据源",rateTimestamp:"汇率时间",consensusMethod:"汇率算法",rateStatus:"汇率状态",rateStatusNormal:"正常",rateStatusDegraded:"降级",slippage:"滑点",atPaymentRate:"(按支付时汇率 {rate})"}},payment:{empty:"没有支付记录",emptyList:"没有支付记录"},refund:{empty:"没有退款记录",emptyList:"没有退款记录"},subscriptions:{plan:"订阅",nextInvoice:"下次账单",title:"订阅管理",view:"管理订阅",current:"当前订阅",viewAll:"查看所有",empty:"没有任何订阅",changePayment:"切换支付方式",trialLeft:"剩余试用时长",owner:"订阅拥有者"},overdue:{title:"您有 {count} 张欠费账单,涉及 {subscriptionCount} 个订阅,总金额 {total} {symbol}{method}。",simpleTitle:"您有 {count} 张欠费账单,",empty:"恭喜!您当前没有欠费账单。",defaultAlert:"请立即支付,以免影响您的使用。"}},invoice:{reason:{creation:"订阅创建",cycle:"自动扣费",staking:"订阅创建",update:"订阅更新",recover:"订阅恢复",threshold:"用量账单",cancel:"订阅取消",manual:"人工账单",upcoming:"未来账单",slashStake:"罚没质押",stake:"押金",payment:"付款",returnStake:"退押金",stakeForChangePlan:"订阅套餐更新",stakeForChangePayment:"订阅支付方式更新",recharge:"充值",rechargeForSubscription:"订阅充值",overdraftProtection:"订阅守护服务费",stakeForSubscriptionOverdraftProtection:"订阅守护服务",reStakeToResumeSubscription:"订阅恢复",gas:"手续费",fee:"服务费"}},subscription:{overdue:{title:"您的【{name}】订阅共有 {count} 张欠费账单,总计 {total} {symbol}{method},您需要支付这些账单以激活您的订阅,或在进行新的购买之前完成支付。",simpleTitle:"您的【{name}】订阅共有 {count} 张欠费账单,您需要支付这些账单以激活您的订阅,或在进行新的购买之前完成支付。",payNow:"立即支付",notSupport:"暂不支持该支付方式",total:"总计 {total} {currency}{method}",view:"查看订阅详情",pastDue:"欠费账单",viewNow:"立即查看",description:"如果您有任何疑问,可以选择 ",list:"欠费账单:",empty:"您的【{name}】订阅当前没有欠费账单",retry:"重新支付",paid:"已支付",processing:"支付中"}},dynamicPricing:{unavailable:{title:"暂时无法计算实时价格",message:"当前汇率服务不可用,基于动态定价的商品暂时无法购买。",retry:"重试"}}},refund:{type:{[Ll.refund]:"退款",[Ll.stakeReturn]:"退押金"}},empty:{records:"没有找到匹配的记录"},benefits:{title:"{count} 位受益人"}}),O0={zh:hS,en:pS},Eg=(a,r={})=>{try{return mS(a,{interpolate:/{([\s\S]+?)}/g,escape:/{([\s\S]+?)}/g})(r)}catch(o){return console.error(`Error evaluating template: ${a}`,o),""}},z0=({fallbackLocale:a="en"},r=O0)=>(o,s=a,f={})=>!r[s]||!r[s][o]?a&&r[a]?.[o]?Eg(r[a]?.[o],f):o:Eg(r[s][o],f),yS=z0({fallbackLocale:"en"}),Ie=yS;var Bl={exports:{}},gS=Bl.exports,wg;function DS(){return wg||(wg=1,(function(a,r){(function(o,s){a.exports=s()})(gS,(function(){var o,s,f=1e3,m=6e4,c=36e5,h=864e5,g=/\[([^\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g,y=31536e6,S=2628e6,x=/^(-|\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/,A={years:y,months:S,days:h,hours:c,minutes:m,seconds:f,milliseconds:1,weeks:6048e5},v=function(T){return T instanceof w},N=function(T,R,q){return new w(T,q,R.$l)},B=function(T){return s.p(T)+"s"},O=function(T){return T<0},k=function(T){return O(T)?Math.ceil(T):Math.floor(T)},K=function(T){return Math.abs(T)},j=function(T,R){return T?O(T)?{negative:!0,format:""+K(T)+R}:{negative:!1,format:""+T+R}:{negative:!1,format:""}},w=(function(){function T(q,z,$){var re=this;if(this.$d={},this.$l=$,q===void 0&&(this.$ms=0,this.parseFromMilliseconds()),z)return N(q*A[B(z)],this);if(typeof q=="number")return this.$ms=q,this.parseFromMilliseconds(),this;if(typeof q=="object")return Object.keys(q).forEach((function(ne){re.$d[B(ne)]=q[ne]})),this.calMilliseconds(),this;if(typeof q=="string"){var Q=q.match(x);if(Q){var Z=Q.slice(2).map((function(ne){return ne!=null?Number(ne):0}));return this.$d.years=Z[0],this.$d.months=Z[1],this.$d.weeks=Z[2],this.$d.days=Z[3],this.$d.hours=Z[4],this.$d.minutes=Z[5],this.$d.seconds=Z[6],this.calMilliseconds(),this}}return this}var R=T.prototype;return R.calMilliseconds=function(){var q=this;this.$ms=Object.keys(this.$d).reduce((function(z,$){return z+(q.$d[$]||0)*A[$]}),0)},R.parseFromMilliseconds=function(){var q=this.$ms;this.$d.years=k(q/y),q%=y,this.$d.months=k(q/S),q%=S,this.$d.days=k(q/h),q%=h,this.$d.hours=k(q/c),q%=c,this.$d.minutes=k(q/m),q%=m,this.$d.seconds=k(q/f),q%=f,this.$d.milliseconds=q},R.toISOString=function(){var q=j(this.$d.years,"Y"),z=j(this.$d.months,"M"),$=+this.$d.days||0;this.$d.weeks&&($+=7*this.$d.weeks);var re=j($,"D"),Q=j(this.$d.hours,"H"),Z=j(this.$d.minutes,"M"),ne=this.$d.seconds||0;this.$d.milliseconds&&(ne+=this.$d.milliseconds/1e3,ne=Math.round(1e3*ne)/1e3);var me=j(ne,"S"),P=q.negative||z.negative||re.negative||Q.negative||Z.negative||me.negative,D=Q.format||Z.format||me.format?"T":"",F=(P?"-":"")+"P"+q.format+z.format+re.format+D+Q.format+Z.format+me.format;return F==="P"||F==="-P"?"P0D":F},R.toJSON=function(){return this.toISOString()},R.format=function(q){var z=q||"YYYY-MM-DDTHH:mm:ss",$={Y:this.$d.years,YY:s.s(this.$d.years,2,"0"),YYYY:s.s(this.$d.years,4,"0"),M:this.$d.months,MM:s.s(this.$d.months,2,"0"),D:this.$d.days,DD:s.s(this.$d.days,2,"0"),H:this.$d.hours,HH:s.s(this.$d.hours,2,"0"),m:this.$d.minutes,mm:s.s(this.$d.minutes,2,"0"),s:this.$d.seconds,ss:s.s(this.$d.seconds,2,"0"),SSS:s.s(this.$d.milliseconds,3,"0")};return z.replace(g,(function(re,Q){return Q||String($[re])}))},R.as=function(q){return this.$ms/A[B(q)]},R.get=function(q){var z=this.$ms,$=B(q);return $==="milliseconds"?z%=1e3:z=$==="weeks"?k(z/A[$]):this.$d[$],z||0},R.add=function(q,z,$){var re;return re=z?q*A[B(z)]:v(q)?q.$ms:N(q,this).$ms,N(this.$ms+re*($?-1:1),this)},R.subtract=function(q,z){return this.add(q,z,!0)},R.locale=function(q){var z=this.clone();return z.$l=q,z},R.clone=function(){return N(this.$ms,this)},R.humanize=function(q){return o().add(this.$ms,"ms").locale(this.$l).fromNow(!q)},R.valueOf=function(){return this.asMilliseconds()},R.milliseconds=function(){return this.get("milliseconds")},R.asMilliseconds=function(){return this.as("milliseconds")},R.seconds=function(){return this.get("seconds")},R.asSeconds=function(){return this.as("seconds")},R.minutes=function(){return this.get("minutes")},R.asMinutes=function(){return this.as("minutes")},R.hours=function(){return this.get("hours")},R.asHours=function(){return this.as("hours")},R.days=function(){return this.get("days")},R.asDays=function(){return this.as("days")},R.weeks=function(){return this.get("weeks")},R.asWeeks=function(){return this.as("weeks")},R.months=function(){return this.get("months")},R.asMonths=function(){return this.as("months")},R.years=function(){return this.get("years")},R.asYears=function(){return this.as("years")},T})(),G=function(T,R,q){return T.add(R.years()*q,"y").add(R.months()*q,"M").add(R.days()*q,"d").add(R.hours()*q,"h").add(R.minutes()*q,"m").add(R.seconds()*q,"s").add(R.milliseconds()*q,"ms")};return function(T,R,q){o=q,s=q().$utils(),q.duration=function(re,Q){var Z=q.locale();return N(re,{$l:Z},Q)},q.isDuration=v;var z=R.prototype.add,$=R.prototype.subtract;R.prototype.add=function(re,Q){return v(re)?G(this,re,1):z.bind(this)(re,Q)},R.prototype.subtract=function(re,Q){return v(re)?G(this,re,-1):$.bind(this)(re,Q)}}}))})(Bl)),Bl.exports}var vS=DS();const bS=ri(vS);Ht(()=>import("./vendor-blocklet-B67R14so.js").then(a=>a.e),[]);Ht(()=>import("./vendor-blocklet-B67R14so.js").then(a=>a.z),[]);Sn.extend(Rx);Sn.extend(Mx);Sn.extend(bS);Sn.extend(Nx);Sn.extend(Bx);const us="z2qaCNvKMv5GjouKdcDWexv6WqtHbpNPQDnAk",xS=(a,r,o="en")=>{let s="";if(a.percent_off&&a.percent_off>0&&(s=Ie("payment.checkout.coupon.percentage",o,{percent:a.percent_off})),a.amount_off&&a.amount_off!=="0"){const{symbol:f}=r;s=a.currency_id===r.id?a.amount_off||"":a.currency_options?.[r.id]?.amount_off||"",s&&(s=Ie("payment.checkout.coupon.fixedAmount",o,{amount:Ca(s,r.decimal),symbol:f}))}return s?Ie(`payment.checkout.coupon.terms.${a.duration}`,o,{couponOff:s,months:a.duration_in_months||0}):Ie("payment.checkout.coupon.noDiscount")},Qn=()=>{const a=window.blocklet?.prefix||"/",r=window.location?.origin;if(window.__PAYMENT_KIT_BASE_URL)try{if(new URL(window.__PAYMENT_KIT_BASE_URL).origin!==window.location.origin)return window.__PAYMENT_KIT_BASE_URL}catch{console.warn("Invalid baseUrl for PaymentProvider",window.__PAYMENT_KIT_BASE_URL)}if((window.blocklet?.componentId||"").split("/").pop()===us)return Dt(r,a);const s=(window.blocklet?.componentMountPoints||[]).find(f=>f?.did===us);return s?Dt(r,s.mountPoint):Dt(r,a)};function Lf(){try{const a=Qn(),r=new URL(a).origin,o=window.location.origin;return r!==o}catch{return!1}}function ln(a,r="en",o="YYYY-MM-DD HH:mm:ss"){return a?Sn(a).locale(eu(r)).format(o):"-"}function CS(a,r="en"){return a?Sn(a).locale(eu(r)).format("lll"):"-"}function SS(a,r="YYYY-MM-DD HH:mm:ss",o="en"){return a?Sn(a).locale(eu(o)).format(r):"-"}function _S(a,r="en"){return Sn(a).locale(eu(r)).format("YYYY-MM-DD HH:mm")}const eu=(a="en")=>a==="tw"?"zh":a,aw=a=>a==="zh"?"zh_CN":"en_US",Pt=a=>{if(!a)return"Unknown error";const{details:r,errors:o,response:s}=a;return Array.isArray(o)?o.map(f=>f.message).join(`
|
|
27
27
|
`):Array.isArray(r)?`Validate failed: ${r.map(m=>{const c=m.message.replace(/["]/g,"'");return`${m.path.join(".")}: ${c}`}).join(";")}`:s?s.data?.error||`${a.message}: ${JSON.stringify(s.data)}`:a.message};function Ui(a="",r=18,o=6,s=!0,f=!0){return a?Ja(qt(a,r),o,s,f):"0"}const P0={USD:"$",EUR:"€",GBP:"£",JPY:"¥",CNY:"¥",KRW:"₩",INR:"₹",AUD:"A$",CAD:"C$",CHF:"Fr",HKD:"HK$",SGD:"S$",NZD:"NZ$"};function dr(a,r,o=!0){const s=P0[r];return s?`${s}${a}`:`${a} ${o?r:""}`}function kl(a,r,o="en",s=!0){const f=P0[r];return f?`${f}${a} ${s?Ie("common.credits",o):""}`:`${a} ${s?r:""}`}function Ja(a,r=6,o=!0,s=!0){if(!a||a==="0")return"0";const f=E1(a),m={thousandSeparated:s,...(r||r===0)&&{mantissa:r}},c=f.format(m);if(!o)return c;const[h,g]=c.split(".");return g?[h,vC(g,"0")].filter(Boolean).join("."):h}function un(a,r,o=6,s=!0,f=!0){if(!r)return Ja(a,o,s,f);const m=Number(a);if(!Number.isFinite(m))return Ja(a,o,s,f);const c=Math.abs(m),h=c>0&&c<.01?o:2;return Ja(a,h,s,f)}const Tg=8;function q0(a,r,o=$f){if(a==null||!r||r<=0)return null;const s=wS(a,r,o);return ES(s,o)}function If(a,r,o){if(!o&&o!=="0"||r==null)return null;try{const s=a instanceof ze?a:new ze(a||"0"),f=new ze(10).pow(new ze(r));if(f.isZero())return null;const m=new ze(o.replace(".","")),c=o.includes(".")&&o.split(".")[1]?.length||0,h=new ze(10).pow(new ze(c)),g=new ze(10).pow(new ze(Tg)),y=s.mul(m).mul(g).div(f.mul(h));return qt(y.toString(),Tg)}catch{return null}}function zi(a,r="en"){if(!a&&a!=="0")return null;const o=Number(a);return Number.isFinite(o)?new Intl.NumberFormat(r,{minimumFractionDigits:2,maximumFractionDigits:2}).format(o):null}function Il(a){if(!a&&a!=="0")return null;const r=String(a),o=Number(r);return Number.isFinite(o)?r:null}function iw(a,r="USD",o=2){if(a==null)return null;const s=Number(a);if(!Number.isFinite(s))return null;const f=s.toFixed(o);return r==="USD"?`$${f}`:`${f} ${r}`}const kg=(a,r,o,s=1,f=!0,m="en")=>{if(!r)return"";if(a.custom_unit_amount)return`Custom (${r.symbol})`;if(a.pricing_type==="dynamic"&&a.base_amount&&a.base_currency==="USD"){const g=a.base_amount,y=Number(g)*s,S=zi(y.toString(),m);if(a?.type==="recurring"&&a.recurring){const x=Rn(a.recurring,!1,"slash",m);return o?`$${S} / ${o} ${x}`:a.recurring.usage_type==="metered"?`$${S} / unit ${x}`:`$${S} ${x}`}return`$${S}`}const c=nu(a,r),h=f?qt(new ze(c).mul(new ze(s)),r.decimal).toString():+c*s;if(a?.type==="recurring"&&a.recurring){const g=Rn(a.recurring,!1,"slash",m);return o?`${h} ${r.symbol} / ${o} ${g}`:a.recurring.usage_type==="metered"?`${h} ${r.symbol} / unit ${g}`:`${h} ${r.symbol} ${g}`}return`${h} ${r.symbol}`},rw=(a,r,o,s=1,f=!0,m="en")=>{if(!r)return"";if(a.pricing_type==="dynamic"&&a.base_amount&&a.base_currency==="USD"){const g=a.base_amount,y=Number(g)*s,S=zi(y.toString(),m);return a?.type==="recurring"&&a.recurring?o?`$${S} / ${o}`:a.recurring.usage_type==="metered"?`$${S} / unit`:`$${S}`:`$${S}`}const c=nu(a,r),h=f?qt(new ze(c).mul(new ze(s)),r.decimal).toString():+c*s;return a?.type==="recurring"&&a.recurring?o?`${h} ${r.symbol} / ${o}`:a.recurring.usage_type==="metered"?`${h} ${r.symbol} / unit`:`${h} ${r.symbol}`:`${h} ${r.symbol}`};function tu(a){for(const r of a)if(r.price?.product?.statement_descriptor)return r.price?.product?.statement_descriptor;return window.blocklet?.appName}function Rn(a,r=!0,o="per",s="en"){const f={hour:"hourly",day:"daily",week:"weekly",month:"monthly",year:"yearly"};if(!a)return"";if(+a.interval_count==1){const m=Ie(`common.${a.interval}`,s);return r?Ie(`common.${f[a.interval]}`,s):o?Ie(`common.${o}`,s,{interval:m}):m}if(a.interval==="month"){if(a.interval_count===3)return Ie("common.month3",s);if(a.interval_count===6)return Ie("common.month6",s)}return Ie("common.recurring",s,{count:a.interval_count,interval:Ie(`common.${a.interval}s`,s)})}function nu(a,r){const s=AS(a).find(f=>f.currency_id===r?.id);return s?s.custom_unit_amount?s.custom_unit_amount.preset||s.custom_unit_amount.presets[0]:s.unit_amount:a.currency_id===r?.id?a.custom_unit_amount?a.custom_unit_amount.preset||a.custom_unit_amount.presets[0]:a.unit_amount:(console.warn(`Currency ${r?.id} not configured for price`,a),"0")}function AS(a){return Array.isArray(a.currency_options)?a.currency_options:[{currency_id:a.currency_id,unit_amount:a.unit_amount,custom_unit_amount:a.custom_unit_amount||null,tiers:null}]}const $f=8;function ES(a,r=$f){const o=a.isNeg(),f=a.abs().toString().padStart(r+1,"0"),m=f.slice(0,f.length-r)||"0",c=f.slice(-r).replace(/0+$/,""),h=c?`${m}.${c}`:m;return o?`-${h}`:h}function wS(a,r,o=$f){if(!a||!r)return new ze(0);const s=String(a),[f="0",m=""]=s.split("."),c=`${m}`.padEnd(o,"0").slice(0,o),h=`${f.replace("-","")}${c}`||"0",g=new ze(h).mul(new ze(r));return s.startsWith("-")?g.neg():g}function $l(a,r,{useUpsell:o=!0,exchangeRate:s=null}={}){if(!r)return{unitAmount:new ze(0),totalAmount:new ze(0),isDynamicQuote:!1};const f=o&&a.upsell_price||a.price,m=new ze(a.quantity||0),c=a?.quoted_amount,h=a?.quote_currency_id,g=f?.pricing_type==="dynamic";if(g&&c&&h===r.id){const x=new ze(c||"0");return{unitAmount:m.gt(new ze(0))?x.add(m).sub(new ze(1)).div(m):new ze(0),totalAmount:x,isDynamicQuote:!0}}if(g&&s&&f?.base_amount){const x=Number(s);if(x>0&&Number.isFinite(x)){const A=Number(f.base_amount);if(A>0&&Number.isFinite(A)){const v=A/x,N=Kn(v.toFixed(r.decimal||8),r.decimal||8);return{unitAmount:N,totalAmount:N.mul(m),isDynamicQuote:!1}}}}const S=new ze(nu(f,r));return{unitAmount:S,totalAmount:S.mul(m),isDynamicQuote:!1}}function TS(a,r,{trialEnd:o,trialInDays:s,exchangeRate:f=null},m="en"){if(!r)return{primary:"",secondary:"",quantity:""};const c=a.upsell_price||a.price;if(!c)return{primary:"",secondary:"",quantity:""};let h=Ie("common.qty",m,{count:a.quantity});(c.recurring?.usage_type==="metered"||+a.quantity==1)&&(h="");const{unitAmount:g,totalAmount:y}=$l(a,r,{exchangeRate:f}),S=c?.pricing_type==="dynamic",x=O=>{const k=qt(O,r.decimal);return un(k,S,6)},A=`${x(y)} ${r.symbol}`,v=`${x(g)} ${r.symbol}`,N=L0({trialInDays:s,trialEnd:o},m),B=(O,k)=>c.product.unit_label?`${O}/${c.product.unit_label}`:c.recurring?.usage_type==="metered"||a.quantity===1?k:h?Ie("common.each",m,{unit:v}):"";return c.type==="recurring"&&c.recurring?N.count>0?{primary:Ie("common.trial",m,{count:N.count,interval:N.interval}),secondary:`${B(A,A)} ${Rn(c.recurring,!1,"slash",m)}`,quantity:h}:{primary:A,secondary:B(A,""),quantity:h}:{primary:A,secondary:B(A,""),quantity:h}}function ow(a){switch(a){case"active":return"success";case"trialing":return"primary";case"incomplete":case"incomplete_expired":case"paused":return"warning";case"past_due":case"unpaid":return"error";default:return"default"}}function sw(a){switch(a){case"succeeded":return"success";case"requires_payment_method":case"requires_confirmation":case"requires_action":case"requires_capture":return"warning";default:return"default"}}function lw(a){switch(a){case"succeeded":return"success";case"requires_action":return"warning";default:return"default"}}function uw(a){switch(a){case"paid":return"success";case"deferred":return"warning";case"failed":return"warning";default:return"default"}}function Vl(a){switch(a){case"paid":return"success";case"open":return"secondary";case"uncollectible":return"warning";default:return"default"}}function Hl(a,r,o=!1,s=!0,{exchangeRate:f=null}={}){if(a.find(h=>(s&&h.upsell_price||h.price)?.custom_unit_amount)&&a.length>1)throw new Error("Multiple items with custom unit amount are not supported");let m=new ze(0);const c=a.filter(h=>(s&&h.upsell_price||h.price)!=null).reduce((h,g)=>{const y=g?.quote_currency_id,S=y&&y!==r.id;if(g.custom_amount&&!S)return h.add(new ze(g.custom_amount));const x=s&&g.upsell_price||g.price,{totalAmount:A}=$l(g,r,{useUpsell:s,exchangeRate:f});return x?.type==="recurring"&&(m=m.add(A),o||x.recurring?.usage_type==="metered")?h:h.add(A)},new ze(0)).toString();return{subtotal:c,total:c,renew:un(m.toString(),!!f),discount:"0",shipping:"0",tax:"0"}}function Fg(a){const{interval:r}=a,o=+a.interval_count||1,s=1440*60*1e3;switch(r){case"hour":return 3600*1e3;case"day":return o*s;case"week":return o*7*s;case"month":return o*30*s;case"year":return o*365*s;default:throw new Error(`Unsupported recurring interval: ${r}`)}}function kS(a,r){if(a[0]?.upsell_price_id||!a[0]?.price?.upsell?.upsells_to)return"0";const o=Hl(a,r,!1,!1),s=Hl(a.map(y=>({...y,upsell_price_id:y.price.upsell?.upsells_to_id,upsell_price:y.price.upsell?.upsells_to})),r,!1,!0),f=a[0].price?.recurring,m=a[0].price?.upsell?.upsells_to?.recurring;if(!f||!m)return"0";const c=Math.floor(Fg(m)/Fg(f)),h=new ze(o.total).mul(new ze(c)),g=new ze(s.total);return Number(h.sub(g).mul(new ze(100)).div(h).toString()).toFixed(0)}function Gd(a,r,o,s="en"){return o?Ie("payment.checkout.meteredThen",s,{subscription:a,recurring:r}):Ie("payment.checkout.then",s,{subscription:a,recurring:r})}function Kd(a,r,o,s="en"){return o?Ie("payment.checkout.metered",s,{recurring:r}):[a,r].filter(Boolean).join(" ")}function ts({amount:a,then:r,actualAmount:o,showThen:s},f,m,c="en"){return Number(o)===0&&m?Ie("payment.checkout.metered",c,{recurring:f}):s?[a,r].filter(Boolean).join(", "):[a,r].filter(Boolean).join(" ")}function FS(a){const r=new Set;for(const o of a)if(o.price?.recurring?.interval&&o.price?.type==="recurring"&&(r.add(`${o.price.recurring.interval}-${o.price.recurring.interval_count}`),r.size>1))return!0;return!1}function L0({trialInDays:a,trialEnd:r},o="en"){const s=Sn().unix(),f=(m,c)=>Ie(`common.${c>1?`${m}s`:m}`,o);if(r>0&&r>s){if(r-s<3600){const c=Math.ceil((r-s)/60);return{count:c,interval:f("minute",c)}}if(r-s<86400){const c=Math.ceil((r-s)/3600);return{count:c,interval:f("hour",c)}}const m=Math.ceil((r-s)/86400);return{count:m,interval:f("day",m)}}return a>0?{count:a,interval:f("day",a)}:{count:0,interval:Ie("common.day",o)}}function jS(a,r,{trialInDays:o,trialEnd:s},f="en",{exchangeRate:m=null}={}){const c=tu(a),{total:h}=Hl(a,r,o>0,!0,{exchangeRate:m}),g=qt(h,r.decimal),y=`${qt(h,r.decimal)} ${r.symbol}`,S=L0({trialInDays:o,trialEnd:s},f);if(a.length===0)return{action:Ie("payment.checkout.empty",f),amount:"0",then:"",actualAmount:"0",priceDisplay:"0"};const{name:x}=a[0]?.price?.product||{name:""};if(a.every(w=>w.price?.type==="one_time")){const w=Ie("payment.checkout.pay",f,{payee:c});return a.length>1?{action:w,amount:y,actualAmount:g,priceDisplay:y}:{action:w,amount:y,then:"",actualAmount:g,priceDisplay:y}}const A=a.find(w=>w.price?.type==="recurring"),v=Rn((A?.upsell_price||A?.price)?.recurring,!1,"per",f),N=a.some(w=>w.price?.type==="recurring"&&w.price?.recurring?.usage_type==="metered"),B=FS(a);if(a.every(w=>w.price?.type==="recurring")){const w=[N?Ie("payment.checkout.least",f):"",un(qt(a.reduce((q,z)=>(z.upsell_price||z.price)?.recurring?.usage_type==="metered"?q:q.add($l(z,r,{exchangeRate:m}).totalAmount),new ze(0)),r.decimal),!!m),r.symbol].filter(Boolean).join(" ");if(a.length>1){if(S.count>0){const re=Gd(w,v,N&&Number(w)===0,f),Q=Kd(w,v,N&&Number(w)===0,f),Z={action:Ie("payment.checkout.try2",f,{name:x,count:a.length-1}),amount:Ie("payment.checkout.free",f,{count:S.count,interval:S.interval}),then:re,thenValue:Q,showThen:!0,actualAmount:"0"};return{...Z,priceDisplay:ts({amount:Z.amount,then:re,actualAmount:Z.actualAmount,showThen:Z.showThen},v,N,f)}}const q=N?Ie("payment.checkout.meteredThen",f,{recurring:v}):v,z=N?Ie("payment.checkout.metered",f,{recurring:v}):v,$={action:Ie("payment.checkout.sub2",f,{name:x,count:a.length-1}),amount:y,then:q,thenValue:z,showThen:N,actualAmount:g};return{...$,priceDisplay:ts({amount:$.amount,then:q,actualAmount:$.actualAmount,showThen:$.showThen},v,N,f)}}if(S.count>0){const q=Gd(w,v,N&&Number(w)===0,f),z=Kd(w,v,N&&Number(w)===0,f),$={action:Ie("payment.checkout.try1",f,{name:x}),amount:Ie("payment.checkout.free",f,{count:S.count,interval:S.interval}),then:q,thenValue:z,showThen:!0,actualAmount:"0"};return{...$,priceDisplay:ts({amount:$.amount,then:q,actualAmount:$.actualAmount,showThen:$.showThen},v,N,f)}}const G=N?Ie("payment.checkout.meteredThen",f,{recurring:v}):v,T=N?Ie("payment.checkout.metered",f,{recurring:v}):v,R={action:Ie("payment.checkout.sub1",f,{name:x}),amount:y,then:G,thenValue:T,showThen:N&&!B,actualAmount:g};return{...R,priceDisplay:ts({amount:R.amount,then:G,actualAmount:R.actualAmount,showThen:R.showThen},v,N,f)}}const O=qt(a.filter(w=>w.price?.type==="recurring").reduce((w,G)=>G.price?.recurring?.usage_type==="metered"?w:w.add($l(G,r,{useUpsell:!1,exchangeRate:m}).totalAmount),new ze(0)),r.decimal),k=Gd(`${O} ${r.symbol}`,v,N&&Number(O)===0,f),K=Kd(`${O} ${r.symbol}`,v,N&&Number(O)===0,f),j={action:Ie("payment.checkout.pay",f,{payee:c}),amount:y,then:k,thenValue:K,showThen:!B,actualAmount:g};return{...j,priceDisplay:ts({amount:j.amount,then:k,actualAmount:j.actualAmount,showThen:j.showThen},v,N,f)}}function Ca(a,r,o=2){const s=qt(a,r),f=Number(s);if(!Number.isFinite(f))return Ui(a,r,o,!0,!1);const m=Math.abs(f),c=m>0&&m<.01?r:2;return Ja(s,c,!0,!1)}function au(a,r){for(const o of a)for(const s of o.payment_currencies)if(s.id===r)return{object:"payment_currency",...s,paymentMethod:D0(o,["payment_currencies"])};return null}function Vf(a){return Bi.some(r=>r[1]===a)}function cw(a){try{a.stopPropagation(),a.preventDefault()}catch{}}function dw(a,r=2){const o=a.map(s=>s.price?.product?.name).filter(Boolean);return o.slice(0,r).join(", ")+(o.length>r?` and ${o.length-r} more`:"")}const ns=(a,r="en")=>{const o=Sn().isSame(Sn(a),"day");return{time:ln(a,r,o?"HH:mm:ss":"YYYY-MM-DD"),isToday:o}},fw=(a,r="en")=>{if(a.status==="active"||a.status==="trialing"){if(a.cancel_at){const f=a.cancel_at*1e3,{time:m,isToday:c}=ns(f,r);return{action:f>Date.now()?"willEnd":"ended",time:m,isToday:c}}if(a.cancel_at_period_end){const f=a.current_period_end*1e3,{time:m,isToday:c}=ns(f,r);return{action:"willEnd",time:m,isToday:c}}const{time:o,isToday:s}=ns(a.current_period_end*1e3,r);return{action:"renew",time:o,isToday:s}}if(a.status==="past_due"){const o=(a.cancel_at||a.current_period_end)*1e3,{time:s,isToday:f}=ns(o,r);return{action:o>Date.now()?"willEnd":"ended",time:s,isToday:f}}if(a.status==="canceled"){const{time:o,isToday:s}=ns(a.canceled_at*1e3,r);return{action:"ended",time:o,isToday:s}}return null},mw=(a,r)=>a.status==="active"||a.status==="trialing"?a.cancel_at_period_end?a.cancelation_details?.reason==="payment_failed"?null:{action:"recover",variant:"contained",color:"primary",canRenew:!1,...r?.recover}:a.cancel_at&&a.cancel_at!==a.current_period_end?null:{action:"cancel",variant:"outlined",color:"inherit",canRenew:!1,...r?.cancel}:a.status==="past_due"?{action:"pastDue",variant:"contained",color:"primary",canRenew:a.cancel_at&&a.cancel_at!==a.current_period_end,...r?.pastDue}:a.status!=="canceled"&&a.cancel_at_period_end?{action:"recover",variant:"contained",color:"primary",canRenew:!1,...r?.recover}:null,pw=(a={})=>{const r=new URLSearchParams(window.location.search);return Object.keys(a).forEach(o=>{r.set(o,a[o])}),r.toString()},RS=(a=[])=>{const r=[];return a.forEach(o=>{(o.paymentCurrencies||o.payment_currencies||[]).forEach(f=>{r.push({...f,method:o})})}),r},I0=(a,r)=>{if(!r)return{text:"N/A",link:"",gas:""};if(a.type==="arcblock"&&r.arcblock?.tx_hash)return{link:Dt(a.settings.arcblock?.explorer_host,"/txs",r.arcblock?.tx_hash),text:r.arcblock?.tx_hash,gas:""};if(a.type==="bitcoin"&&r.bitcoin?.tx_hash)return{link:Dt(a.settings.bitcoin?.explorer_host,"/tx",r.bitcoin?.tx_hash),text:r.bitcoin?.tx_hash,gas:""};if(a.type==="ethereum"&&r.ethereum?.tx_hash)return{link:Dt(a.settings.ethereum?.explorer_host,"/tx",r.ethereum?.tx_hash),text:(r.ethereum?.tx_hash).toUpperCase(),gas:new ze(r.ethereum.gas_price).mul(new ze(r.ethereum.gas_used)).toString()};if(a.type==="base"&&r.base?.tx_hash)return{link:Dt(a.settings.base?.explorer_host,"/tx",r.base?.tx_hash),text:(r.base?.tx_hash).toUpperCase(),gas:""};if(a.type==="stripe"){const o=a.livemode?"https://dashboard.stripe.com":"https://dashboard.stripe.com/test";return{link:Dt(a.settings.stripe?.dashboard||o,"payments",r.stripe?.payment_intent_id),text:r.stripe?.payment_intent_id,gas:""}}return{text:"N/A",link:"",gas:""}};function Hf(a){const r={};return new URL(a).searchParams.forEach((s,f)=>{r[f]=s}),r}function Df(a,r,o="en"){const s=Number(r),{quantity_available:f=0,quantity_sold:m=0,quantity_limit_per_checkout:c=0}=a||{};return f>0&&m+s>f?Ie("common.quantityNotEnough",o):c>0&&c<s?Ie("common.quantityLimitPerCheckout",o):""}function hw(a){return a==="canceled"?"Ended":a}function jg(a,r="en",o=6){if(!a)return"";const[,s]=String(a).split(".");return s&&s.length>o?Ie("common.amountPrecisionLimit",r,{precision:o}):""}function yw(a){return typeof a=="string"&&/\s/.test(a)?"break-word":"break-all"}function iu(){const a=navigator.userAgent.toLowerCase(),r=a.indexOf("safari")>-1&&a.indexOf("chrome")===-1,o=a.indexOf("mobile")>-1||/iphone|ipad|ipod/.test(a),s=/iphone|ipad|ipod/.test(a);return r&&o&&s}function MS(a,r,o=!1){if(!a||!r)return a;if(!o)return a.length<=r?a:`${a.substring(0,r)}...`;let s=0,f="";for(let m=0;m<a.length;m++){const c=U1(a.charAt(m));if(s+c>r)break;f+=a.charAt(m),s+=c}return f===a?f:`${f}...`}function gw(a,r,o=48){if(!a)return"";const s=typeof r=="number"?r:Sn(r).unix();return`/.well-known/service/user/avatar/${a}?imageFilter=resize&w=${o}&h=${o}&updateAt=${s||Sn().unix()}`}function Dw(a,r){return r?.type&&["arcblock","ethereum","base"].includes(r?.type)&&a?.[r?.type]?.tx_hash}function NS(a,r="en"){const{billing_reason:o,description:s}=a,f={subscription_create:Ie("payment.invoice.reason.creation",r),subscription_cycle:Ie("payment.invoice.reason.cycle",r),subscription_update:Ie("payment.invoice.reason.update",r),subscription_recover:Ie("payment.invoice.reason.recover",r),subscription_threshold:Ie("payment.invoice.reason.threshold",r),subscription_cancel:Ie("payment.invoice.reason.cancel",r),manual:Ie("payment.invoice.reason.manual",r),upcoming:Ie("payment.invoice.reason.upcoming",r),slash_stake:Ie("payment.invoice.reason.slashStake",r),stake:Ie("payment.invoice.reason.stake",r),return_stake:Ie("payment.invoice.reason.returnStake",r),recharge:Ie("payment.invoice.reason.recharge",r),stake_overdraft_protection:Ie("payment.invoice.reason.stake",r),overdraft_protection:Ie("payment.invoice.reason.fee",r),auto_recharge:Ie("payment.invoice.reason.recharge",r)};let m=Ie("payment.invoice.reason.payment",r);return(o.includes("stake")||o.includes("recharge")||o==="overdraft_protection")&&(m=f[o]),s?.startsWith("Subscription ")||s?.startsWith("Slash stake")?{description:f[o],reason:f[o],type:m}:{description:{"Stake for subscription plan change":Ie("payment.invoice.reason.stakeForChangePlan",r),"Stake for subscription payment change":Ie("payment.invoice.reason.stakeForChangePayment",r),"Stake for subscription":Ie("payment.invoice.reason.staking",r),"Return Subscription staking":Ie("payment.invoice.reason.returnStake",r),"Recharge for subscription":Ie("payment.invoice.reason.rechargeForSubscription",r),"Add funds for subscription":Ie("payment.invoice.reason.rechargeForSubscription",r),"Overdraft protection":Ie("payment.invoice.reason.overdraftProtection",r),"Stake for subscription overdraft protection":Ie("payment.invoice.reason.stakeForSubscriptionOverdraftProtection",r),"Re-stake to resume subscription":Ie("payment.invoice.reason.reStakeToResumeSubscription",r)}[s]||s,reason:f[o]||o,type:m}}function vw(a,r="en"){return Dt(window.location.origin,Ux(".well-known/service/user",{locale:r,did:a}))}function bw(a){if(!a)return[];const r=a.split(/(#([^#]*)#)/),o=[];for(let s=0;s<r.length;s++){const f=r[s];if(f){if(s%3===0)o.push({type:"text",content:f});else if(s%3===1&&f.startsWith("#")&&f.endsWith("#")){const m=f.slice(1,-1);m.length>=0&&o.push({type:"marked",content:m})}}}return o.filter(s=>s.content!=="")}function BS(a,r){if(!a||!r)return"";const o=a?.settings?.[a?.type]?.explorer_host||"";return a.type==="arcblock"&&r?Dt(o,"accounts",r,"tokens"):["ethereum","base"].includes(a.type)&&r?Dt(o,"address",r):""}function xw(a){return!!(a.type==="recurring"&&a.recurring?.usage_type==="metered"&&a.recurring?.meter_id)}function US(a,r,o){return o?!1:a&&a.type==="arcblock"?r.type!=="credit":!1}function OS(a,r){if(!r||!a)return a;try{const o=new URL(a);return o.searchParams.set("locale",r),o.toString()}catch{if(/[?&]locale=[^&]*/.test(a))return a.replace(/([?&])locale=[^&]*/,`$1locale=${r}`);const s=a.includes("?")?"&":"?";return`${a}${s}locale=${r}`}}function Yf(a){return a.palette.getContrastText(a.palette.primary.main)}const ot=v0();ot.interceptors.request.use(a=>{const r=Qn();a.baseURL=r||"";const o=Ox(window.blocklet?.languages),s=new URLSearchParams(a.url?.split("?").pop());a.params={...a.params||{},locale:o};const f=window.__PAYMENT_KIT_AUTH_TOKEN;if(f&&typeof a.params.authToken>"u"&&!s.has("authToken")&&(a.params.authToken=f),typeof a.params.livemode>"u"&&s.has("livemode")===!1){const m=localStorage.getItem("livemode");a.params.livemode=E0(m)?!0:JSON.parse(m)}return a},a=>Promise.reject(a));var ps=a=>a.type==="checkbox",ur=a=>a instanceof Date,Mn=a=>a==null;const $0=a=>typeof a=="object";var Zt=a=>!Mn(a)&&!Array.isArray(a)&&$0(a)&&!ur(a),V0=a=>Zt(a)&&a.target?ps(a.target)?a.target.checked:a.target.value:a,H0=(a,r)=>r.split(".").some((o,s,f)=>!isNaN(Number(o))&&a.has(f.slice(0,s).join("."))),zS=a=>{const r=a.constructor&&a.constructor.prototype;return Zt(r)&&r.hasOwnProperty("isPrototypeOf")},Gf=typeof window<"u"&&typeof window.HTMLElement<"u"&&typeof document<"u";function Mt(a){if(a instanceof Date)return new Date(a);const r=typeof FileList<"u"&&a instanceof FileList;if(Gf&&(a instanceof Blob||r))return a;const o=Array.isArray(a);if(!o&&!(Zt(a)&&zS(a)))return a;const s=o?[]:Object.create(Object.getPrototypeOf(a));for(const f in a)Object.prototype.hasOwnProperty.call(a,f)&&(s[f]=Mt(a[f]));return s}var ru=a=>/^\w*$/.test(a),Tt=a=>a===void 0,ou=a=>Array.isArray(a)?a.filter(Boolean):[],Kf=a=>ou(a.replace(/["|']|\]/g,"").split(/\.|\[/)),Be=(a,r,o)=>{if(!r||!Zt(a))return o;const s=(ru(r)?[r]:Kf(r)).reduce((f,m)=>Mn(f)?f:f[m],a);return Tt(s)||s===a?Tt(a[r])?o:a[r]:s},Hn=a=>typeof a=="boolean",xn=a=>typeof a=="function",_t=(a,r,o)=>{let s=-1;const f=ru(r)?[r]:Kf(r),m=f.length,c=m-1;for(;++s<m;){const h=f[s];let g=o;if(s!==c){const y=a[h];g=Zt(y)||Array.isArray(y)?y:isNaN(+f[s+1])?{}:[]}if(h==="__proto__"||h==="constructor"||h==="prototype")return;a[h]=g,a=a[h]}};const Ni={BLUR:"blur",FOCUS_OUT:"focusout",CHANGE:"change",SUBMIT:"submit",TRIGGER:"trigger",VALID:"valid"},da={onBlur:"onBlur",onChange:"onChange",onSubmit:"onSubmit",onTouched:"onTouched",all:"all"},va={max:"max",min:"min",maxLength:"maxLength",minLength:"minLength",pattern:"pattern",required:"required",validate:"validate"},Qd="form",Y0="root",Qf=Ne.createContext(null);Qf.displayName="HookFormControlContext";const su=()=>Ne.useContext(Qf);var G0=(a,r,o,s=!0)=>{const f={defaultValues:r._defaultValues};for(const m in a)Object.defineProperty(f,m,{get:()=>{const c=m;return r._proxyFormState[c]!==da.all&&(r._proxyFormState[c]=!s||da.all),o&&(o[c]=!0),a[c]}});return f};const lu=typeof window<"u"?Ne.useLayoutEffect:Ne.useEffect;function PS(a){const r=su(),{control:o=r,disabled:s,name:f,exact:m}=a||{},[c,h]=Ne.useState(o._formState),g=Ne.useRef({isDirty:!1,isLoading:!1,dirtyFields:!1,touchedFields:!1,validatingFields:!1,isValidating:!1,isValid:!1,errors:!1});return lu(()=>o._subscribe({name:f,formState:g.current,exact:m,callback:y=>{!s&&h({...o._formState,...y})}}),[f,s,m]),Ne.useEffect(()=>{g.current.isValid&&o._setValid(!0)},[o]),Ne.useMemo(()=>G0(c,o,g.current,!1),[c,o])}var Cn=a=>typeof a=="string",vf=(a,r,o,s,f)=>Cn(a)?(s&&r.watch.add(a),Be(o,a,f)):Array.isArray(a)?a.map(m=>(s&&r.watch.add(m),Be(o,m))):(s&&(r.watchAll=!0),o),bf=a=>Mn(a)||!$0(a);function xa(a,r,o=new WeakSet){if(bf(a)||bf(r))return Object.is(a,r);if(ur(a)&&ur(r))return Object.is(a.getTime(),r.getTime());const s=Object.keys(a),f=Object.keys(r);if(s.length!==f.length)return!1;if(o.has(a)||o.has(r))return!0;o.add(a),o.add(r);for(const m of s){const c=a[m];if(!f.includes(m))return!1;if(m!=="ref"){const h=r[m];if(ur(c)&&ur(h)||(Zt(c)||Array.isArray(c))&&(Zt(h)||Array.isArray(h))?!xa(c,h,o):!Object.is(c,h))return!1}}return!0}function ba(a){const r=su(),{control:o=r,name:s,defaultValue:f,disabled:m,exact:c,compute:h}=a||{},g=Ne.useRef(f),y=Ne.useRef(h),S=Ne.useRef(void 0),x=Ne.useRef(o),A=Ne.useRef(s);y.current=h;const[v,N]=Ne.useState(()=>{const w=o._getWatch(s,g.current);return y.current?y.current(w):w}),B=Ne.useCallback(w=>{const G=vf(s,o._names,w||o._formValues,!1,g.current);return y.current?y.current(G):G},[o._formValues,o._names,s]),O=Ne.useCallback(w=>{if(!m){const G=vf(s,o._names,w||o._formValues,!1,g.current);if(y.current){const T=y.current(G);xa(T,S.current)||(N(T),S.current=T)}else N(G)}},[o._formValues,o._names,m,s]);lu(()=>((x.current!==o||!xa(A.current,s))&&(x.current=o,A.current=s,O()),o._subscribe({name:s,formState:{values:!0},exact:c,callback:w=>{O(w.values)}})),[o,c,s,O]),Ne.useEffect(()=>o._removeUnmounted());const k=x.current!==o,K=A.current,j=Ne.useMemo(()=>{if(m)return null;const w=!k&&!xa(K,s);return k||w?B():null},[m,k,s,K,B]);return j!==null?j:v}function qS(a){const r=su(),{name:o,disabled:s,control:f=r,shouldUnregister:m,defaultValue:c,exact:h=!0}=a,g=H0(f._names.array,o),y=Ne.useMemo(()=>Be(f._formValues,o,Be(f._defaultValues,o,c)),[f,o,c]),S=ba({control:f,name:o,defaultValue:y,exact:h}),x=PS({control:f,name:o,exact:h}),A=Ne.useRef(a),v=Ne.useRef(void 0),N=Ne.useRef(f.register(o,{...a.rules,value:S,...Hn(a.disabled)?{disabled:a.disabled}:{}}));A.current=a;const B=Ne.useMemo(()=>Object.defineProperties({},{invalid:{enumerable:!0,get:()=>!!Be(x.errors,o)},isDirty:{enumerable:!0,get:()=>!!Be(x.dirtyFields,o)},isTouched:{enumerable:!0,get:()=>!!Be(x.touchedFields,o)},isValidating:{enumerable:!0,get:()=>!!Be(x.validatingFields,o)},error:{enumerable:!0,get:()=>Be(x.errors,o)}}),[x,o]),O=Ne.useCallback(w=>N.current.onChange({target:{value:V0(w),name:o},type:Ni.CHANGE}),[o]),k=Ne.useCallback(()=>N.current.onBlur({target:{value:Be(f._formValues,o),name:o},type:Ni.BLUR}),[o,f._formValues]),K=Ne.useCallback(w=>{const G=Be(f._fields,o);G&&G._f&&w&&(G._f.ref={focus:()=>xn(w.focus)&&w.focus(),select:()=>xn(w.select)&&w.select(),setCustomValidity:T=>xn(w.setCustomValidity)&&w.setCustomValidity(T),reportValidity:()=>xn(w.reportValidity)&&w.reportValidity()})},[f._fields,o]),j=Ne.useMemo(()=>({name:o,value:S,...Hn(s)||x.disabled?{disabled:x.disabled||s}:{},onChange:O,onBlur:k,ref:K}),[o,s,x.disabled,O,k,K,S]);return Ne.useEffect(()=>{const w=f._options.shouldUnregister||m,G=v.current;G&&G!==o&&!g&&f.unregister(G),f.register(o,{...A.current.rules,...Hn(A.current.disabled)?{disabled:A.current.disabled}:{}});const T=(R,q)=>{const z=Be(f._fields,R);z&&z._f&&(z._f.mount=q)};if(T(o,!0),w){const R=Mt(Be(f._options.defaultValues,o,A.current.defaultValue));_t(f._defaultValues,o,R),Tt(Be(f._formValues,o))&&_t(f._formValues,o,R)}return!g&&f.register(o),v.current=o,()=>{(g?w&&!f._state.action:w)?f.unregister(o):T(o,!1)}},[o,f,g,m]),Ne.useEffect(()=>{f._setDisabledField({disabled:s,name:o})},[s,o,f]),Ne.useMemo(()=>({field:j,formState:x,fieldState:B}),[j,x,B])}const Yl=a=>a.render(qS(a)),Zf=Ne.createContext(null);Zf.displayName="HookFormContext";const hs=()=>Ne.useContext(Zf),K0=a=>{const{children:r,watch:o,getValues:s,getFieldState:f,setError:m,clearErrors:c,setValue:h,trigger:g,formState:y,resetField:S,reset:x,handleSubmit:A,unregister:v,control:N,register:B,setFocus:O,subscribe:k}=a,K=Ne.useMemo(()=>({watch:o,getValues:s,getFieldState:f,setError:m,clearErrors:c,setValue:h,trigger:g,formState:y,resetField:S,reset:x,handleSubmit:A,unregister:v,control:N,register:B,setFocus:O,subscribe:k}),[c,N,y,f,s,A,B,x,S,m,O,h,k,g,v,o]);return Ne.createElement(Zf.Provider,{value:K},Ne.createElement(Qf.Provider,{value:K.control},r))};var LS=(a,r,o,s,f)=>r?{...o[a],types:{...o[a]&&o[a].types?o[a].types:{},[s]:f||!0}}:{},Bn=a=>Array.isArray(a)?a:[a],Rg=()=>{let a=[];return{get observers(){return a},next:f=>{for(const m of a)m.next&&m.next(f)},subscribe:f=>(a.push(f),{unsubscribe:()=>{a=a.filter(m=>m!==f)}}),unsubscribe:()=>{a=[]}}};function Q0(a,r){const o={};for(const s in a)if(a.hasOwnProperty(s)){const f=a[s],m=r[s];if(f&&Zt(f)&&m){const c=Q0(f,m);Zt(c)&&(o[s]=c)}else a[s]&&(o[s]=m)}return o}var yn=a=>Zt(a)&&!Object.keys(a).length,Xf=a=>a.type==="file",Gl=a=>{if(!Gf)return!1;const r=a?a.ownerDocument:0;return a instanceof(r&&r.defaultView?r.defaultView.HTMLElement:HTMLElement)},Z0=a=>a.type==="select-multiple",Wf=a=>a.type==="radio",IS=a=>Wf(a)||ps(a),Zd=a=>Gl(a)&&a.isConnected;function $S(a,r){const o=r.slice(0,-1).length;let s=0;for(;s<o;)a=Tt(a)?s++:a[r[s++]];return a}function VS(a){for(const r in a)if(a.hasOwnProperty(r)&&!Tt(a[r]))return!1;return!0}function Qt(a,r){const o=Array.isArray(r)?r:ru(r)?[r]:Kf(r),s=o.length===1?a:$S(a,o),f=o.length-1,m=o[f];return s&&delete s[m],f!==0&&(Zt(s)&&yn(s)||Array.isArray(s)&&VS(s))&&Qt(a,o.slice(0,-1)),a}var HS=a=>{for(const r in a)if(xn(a[r]))return!0;return!1};function X0(a){return Array.isArray(a)||Zt(a)&&!HS(a)}function xf(a,r={}){for(const o in a){const s=a[o];X0(s)?(r[o]=Array.isArray(s)?[]:{},xf(s,r[o])):Tt(s)||(r[o]=!0)}return r}function rs(a,r,o){o||(o=xf(r));for(const s in a){const f=a[s];if(X0(f))Tt(r)||bf(o[s])?o[s]=xf(f,Array.isArray(f)?[]:{}):rs(f,Mn(r)?{}:r[s],o[s]);else{const m=r[s];o[s]=!xa(f,m)}}return o}const Mg={value:!1,isValid:!1},Ng={value:!0,isValid:!0};var W0=a=>{if(Array.isArray(a)){if(a.length>1){const r=a.filter(o=>o&&o.checked&&!o.disabled).map(o=>o.value);return{value:r,isValid:!!r.length}}return a[0].checked&&!a[0].disabled?a[0].attributes&&!Tt(a[0].attributes.value)?Tt(a[0].value)||a[0].value===""?Ng:{value:a[0].value,isValid:!0}:Ng:Mg}return Mg},J0=(a,{valueAsNumber:r,valueAsDate:o,setValueAs:s})=>Tt(a)?a:r?a===""?NaN:a&&+a:o&&Cn(a)?new Date(a):s?s(a):a;const Bg={isValid:!1,value:null};var eD=a=>Array.isArray(a)?a.reduce((r,o)=>o&&o.checked&&!o.disabled?{isValid:!0,value:o.value}:r,Bg):Bg;function Ug(a){const r=a.ref;return Xf(r)?r.files:Wf(r)?eD(a.refs).value:Z0(r)?[...r.selectedOptions].map(({value:o})=>o):ps(r)?W0(a.refs).value:J0(Tt(r.value)?a.ref.value:r.value,a)}var YS=a=>a.substring(0,a.search(/\.\d+(\.|$)/))||a,GS=(a,r,o,s)=>{const f={};for(const m of a){const c=Be(r,m);c&&_t(f,m,c._f)}return{criteriaMode:o,names:[...a],fields:f,shouldUseNativeValidation:s}},Kl=a=>a instanceof RegExp,as=a=>Tt(a)?a:Kl(a)?a.source:Zt(a)?Kl(a.value)?a.value.source:a.value:a,io=a=>({isOnSubmit:!a||a===da.onSubmit,isOnBlur:a===da.onBlur,isOnChange:a===da.onChange,isOnAll:a===da.all,isOnTouch:a===da.onTouched});const Og="AsyncFunction";var KS=a=>!!a&&!!a.validate&&!!(xn(a.validate)&&a.validate.constructor.name===Og||Zt(a.validate)&&Object.values(a.validate).find(r=>r.constructor.name===Og)),QS=a=>a.mount&&(a.required||a.min||a.max||a.maxLength||a.minLength||a.pattern||a.validate),Cf=(a,r,o)=>!o&&(r.watchAll||r.watch.has(a)||[...r.watch].some(s=>a.startsWith(s)&&/^\.\w+/.test(a.slice(s.length))));const oo=(a,r,o,s)=>{for(const f of o||Object.keys(a)){const m=Be(a,f);if(m){const{_f:c,...h}=m;if(c){if(c.refs&&c.refs[0]&&r(c.refs[0],f)&&!s)return!0;if(c.ref&&r(c.ref,c.name)&&!s)return!0;if(oo(h,r))break}else if(Zt(h)&&oo(h,r))break}}};function zg(a,r,o){const s=Be(a,o);if(s||ru(o))return{error:s,name:o};const f=o.split(".");for(;f.length;){const m=f.join("."),c=Be(r,m),h=Be(a,m);if(c&&!Array.isArray(c)&&o!==m)return{name:o};if(h&&h.type)return{name:m,error:h};if(h&&h.root&&h.root.type)return{name:`${m}.root`,error:h.root};f.pop()}return{name:o}}var ZS=(a,r,o,s)=>{o(a);const{name:f,...m}=a;return yn(m)||Object.keys(m).length>=Object.keys(r).length||Object.keys(m).find(c=>r[c]===(!s||da.all))},XS=(a,r,o)=>!a||!r||a===r||Bn(a).some(s=>s&&(o?s===r:s.startsWith(r)||r.startsWith(s))),WS=(a,r,o,s,f)=>f.isOnAll?!1:!o&&f.isOnTouch?!(r||a):(o?s.isOnBlur:f.isOnBlur)?!a:(o?s.isOnChange:f.isOnChange)?a:!0,JS=(a,r)=>!ou(Be(a,r)).length&&Qt(a,r),tD=(a,r,o)=>{const s=Bn(Be(a,o));return _t(s,Y0,r[o]),_t(a,o,s),a};function Pg(a,r,o="validate"){if(Cn(a)||Array.isArray(a)&&a.every(Cn)||Hn(a)&&!a)return{type:o,message:Cn(a)?a:"",ref:r}}var eo=a=>Zt(a)&&!Kl(a)?a:{value:a,message:""},Sf=async(a,r,o,s,f,m)=>{const{ref:c,refs:h,required:g,maxLength:y,minLength:S,min:x,max:A,pattern:v,validate:N,name:B,valueAsNumber:O,mount:k}=a._f,K=Be(o,B);if(!k||r.has(B))return{};const j=h?h[0]:c,w=Q=>{f&&j.reportValidity&&(j.setCustomValidity(Hn(Q)?"":Q||""),j.reportValidity())},G={},T=Wf(c),R=ps(c),q=T||R,z=(O||Xf(c))&&Tt(c.value)&&Tt(K)||Gl(c)&&c.value===""||K===""||Array.isArray(K)&&!K.length,$=LS.bind(null,B,s,G),re=(Q,Z,ne,me=va.maxLength,P=va.minLength)=>{const D=Q?Z:ne;G[B]={type:Q?me:P,message:D,ref:c,...$(Q?me:P,D)}};if(m?!Array.isArray(K)||!K.length:g&&(!q&&(z||Mn(K))||Hn(K)&&!K||R&&!W0(h).isValid||T&&!eD(h).isValid)){const{value:Q,message:Z}=Cn(g)?{value:!!g,message:g}:eo(g);if(Q&&(G[B]={type:va.required,message:Z,ref:j,...$(va.required,Z)},!s))return w(Z),G}if(!z&&(!Mn(x)||!Mn(A))){let Q,Z;const ne=eo(A),me=eo(x);if(!Mn(K)&&!isNaN(K)){const P=c.valueAsNumber||K&&+K;Mn(ne.value)||(Q=P>ne.value),Mn(me.value)||(Z=P<me.value)}else{const P=c.valueAsDate||new Date(K),D=be=>new Date(new Date().toDateString()+" "+be),F=c.type=="time",ae=c.type=="week";Cn(ne.value)&&K&&(Q=F?D(K)>D(ne.value):ae?K>ne.value:P>new Date(ne.value)),Cn(me.value)&&K&&(Z=F?D(K)<D(me.value):ae?K<me.value:P<new Date(me.value))}if((Q||Z)&&(re(!!Q,ne.message,me.message,va.max,va.min),!s))return w(G[B].message),G}if((y||S)&&!z&&(Cn(K)||m&&Array.isArray(K))){const Q=eo(y),Z=eo(S),ne=!Mn(Q.value)&&K.length>+Q.value,me=!Mn(Z.value)&&K.length<+Z.value;if((ne||me)&&(re(ne,Q.message,Z.message),!s))return w(G[B].message),G}if(v&&!z&&Cn(K)){const{value:Q,message:Z}=eo(v);if(Kl(Q)&&!K.match(Q)&&(G[B]={type:va.pattern,message:Z,ref:c,...$(va.pattern,Z)},!s))return w(Z),G}if(N){if(xn(N)){const Q=await N(K,o),Z=Pg(Q,j);if(Z&&(G[B]={...Z,...$(va.validate,Z.message)},!s))return w(Z.message),G}else if(Zt(N)){let Q={};for(const Z in N){if(!yn(Q)&&!s)break;const ne=Pg(await N[Z](K,o),j,Z);ne&&(Q={...ne,...$(Z,ne.message)},w(ne.message),s&&(G[B]=Q))}if(!yn(Q)&&(G[B]={ref:j,...Q},!s))return G}}return w(!0),G};const e_={mode:da.onSubmit,reValidateMode:da.onChange,shouldFocusError:!0};function t_(a={}){let r={...e_,...a},o={submitCount:0,isDirty:!1,isReady:!1,isLoading:xn(r.defaultValues),isValidating:!1,isSubmitted:!1,isSubmitting:!1,isSubmitSuccessful:!1,isValid:!1,touchedFields:{},dirtyFields:{},validatingFields:{},errors:r.errors||{},disabled:r.disabled||!1},s={},f=Zt(r.defaultValues)||Zt(r.values)?Mt(r.defaultValues||r.values)||{}:{},m=r.shouldUnregister?{}:Mt(f),c={action:!1,mount:!1,watch:!1,keepIsValid:!1},h={mount:new Set,disabled:new Set,unMount:new Set,array:new Set,watch:new Set,registerName:new Set},g,y=0;const S={isDirty:!1,dirtyFields:!1,validatingFields:!1,touchedFields:!1,isValidating:!1,isValid:!1,errors:!1},x={...S};let A={...x};const v={array:Rg(),state:Rg()},N=r.criteriaMode===da.all,B=_=>I=>{clearTimeout(y),y=setTimeout(_,I)},O=async _=>{if(!c.keepIsValid&&!r.disabled&&(x.isValid||A.isValid||_)){let I;r.resolver?(I=yn((await z()).errors),k()):I=await Q({fields:s,onlyCheckValid:!0,eventType:Ni.VALID}),I!==o.isValid&&v.state.next({isValid:I})}},k=(_,I)=>{!r.disabled&&(x.isValidating||x.validatingFields||A.isValidating||A.validatingFields)&&((_||Array.from(h.mount)).forEach(ee=>{ee&&(I?_t(o.validatingFields,ee,I):Qt(o.validatingFields,ee))}),v.state.next({validatingFields:o.validatingFields,isValidating:!yn(o.validatingFields)}))},K=_=>{const I=rs(f,m),ee=YS(_);_t(o.dirtyFields,ee,Be(I,ee))},j=(_,I=[],ee,Ee,De=!0,Ce=!0)=>{if(Ee&&ee&&!r.disabled){if(c.action=!0,Ce&&Array.isArray(Be(s,_))){const Te=ee(Be(s,_),Ee.argA,Ee.argB);De&&_t(s,_,Te)}if(Ce&&Array.isArray(Be(o.errors,_))){const Te=ee(Be(o.errors,_),Ee.argA,Ee.argB);De&&_t(o.errors,_,Te),JS(o.errors,_)}if((x.touchedFields||A.touchedFields)&&Ce&&Array.isArray(Be(o.touchedFields,_))){const Te=ee(Be(o.touchedFields,_),Ee.argA,Ee.argB);De&&_t(o.touchedFields,_,Te)}(x.dirtyFields||A.dirtyFields)&&K(_),v.state.next({name:_,isDirty:ne(_,I),dirtyFields:o.dirtyFields,errors:o.errors,isValid:o.isValid})}else _t(m,_,I)},w=(_,I)=>{_t(o.errors,_,I),v.state.next({errors:o.errors})},G=_=>{o.errors=_,v.state.next({errors:o.errors,isValid:!1})},T=(_,I,ee,Ee)=>{const De=Be(s,_);if(De){const Ce=Be(m,_,Tt(ee)?Be(f,_):ee);Tt(Ce)||Ee&&Ee.defaultChecked||I?_t(m,_,I?Ce:Ug(De._f)):D(_,Ce),c.mount&&!c.action&&O()}},R=(_,I,ee,Ee,De)=>{let Ce=!1,Te=!1;const Ye={name:_};if(!r.disabled){if(!ee||Ee){(x.isDirty||A.isDirty)&&(Te=o.isDirty,o.isDirty=Ye.isDirty=ne(),Ce=Te!==Ye.isDirty);const ve=xa(Be(f,_),I);Te=!!Be(o.dirtyFields,_),ve?Qt(o.dirtyFields,_):_t(o.dirtyFields,_,!0),Ye.dirtyFields=o.dirtyFields,Ce=Ce||(x.dirtyFields||A.dirtyFields)&&Te!==!ve}if(ee){const ve=Be(o.touchedFields,_);ve||(_t(o.touchedFields,_,ee),Ye.touchedFields=o.touchedFields,Ce=Ce||(x.touchedFields||A.touchedFields)&&ve!==ee)}Ce&&De&&v.state.next(Ye)}return Ce?Ye:{}},q=(_,I,ee,Ee)=>{const De=Be(o.errors,_),Ce=(x.isValid||A.isValid)&&Hn(I)&&o.isValid!==I;if(r.delayError&&ee?(g=B(()=>w(_,ee)),g(r.delayError)):(clearTimeout(y),g=null,ee?_t(o.errors,_,ee):Qt(o.errors,_)),(ee?!xa(De,ee):De)||!yn(Ee)||Ce){const Te={...Ee,...Ce&&Hn(I)?{isValid:I}:{},errors:o.errors,name:_};o={...o,...Te},v.state.next(Te)}},z=async _=>(k(_,!0),await r.resolver(m,r.context,GS(_||h.mount,s,r.criteriaMode,r.shouldUseNativeValidation))),$=async _=>{const{errors:I}=await z(_);if(k(_),_)for(const ee of _){const Ee=Be(I,ee);Ee?_t(o.errors,ee,Ee):Qt(o.errors,ee)}else o.errors=I;return I},re=async({name:_,eventType:I})=>{if(a.validate){const ee=await a.validate({formValues:m,formState:o,name:_,eventType:I});if(Zt(ee))for(const Ee in ee)ee[Ee]&&Pe(`${Qd}.${Ee}`,{message:Cn(ee.message)?ee.message:"",type:va.validate});else Cn(ee)||!ee?Pe(Qd,{message:ee||"",type:va.validate}):$e(Qd);return ee}return!0},Q=async({fields:_,onlyCheckValid:I,name:ee,eventType:Ee,context:De={valid:!0,runRootValidation:!1}})=>{if(a.validate&&(De.runRootValidation=!0,!await re({name:ee,eventType:Ee})&&(De.valid=!1,I)))return De.valid;for(const Ce in _){const Te=_[Ce];if(Te){const{_f:Ye,...ve}=Te;if(Ye){const qe=h.array.has(Ye.name),Oe=Te._f&&KS(Te._f);Oe&&x.validatingFields&&k([Ye.name],!0);const Ve=await Sf(Te,h.disabled,m,N,r.shouldUseNativeValidation&&!I,qe);if(Oe&&x.validatingFields&&k([Ye.name]),Ve[Ye.name]&&(De.valid=!1,I)||(!I&&(Be(Ve,Ye.name)?qe?tD(o.errors,Ve,Ye.name):_t(o.errors,Ye.name,Ve[Ye.name]):Qt(o.errors,Ye.name)),a.shouldUseNativeValidation&&Ve[Ye.name]))break}!yn(ve)&&await Q({context:De,onlyCheckValid:I,fields:ve,name:Ce,eventType:Ee})}}return De.valid},Z=()=>{for(const _ of h.unMount){const I=Be(s,_);I&&(I._f.refs?I._f.refs.every(ee=>!Zd(ee)):!Zd(I._f.ref))&&b(_)}h.unMount=new Set},ne=(_,I)=>!r.disabled&&(_&&I&&_t(m,_,I),!xa(Ae(),f)),me=(_,I,ee)=>vf(_,h,{...c.mount?m:Tt(I)?f:Cn(_)?{[_]:I}:I},ee,I),P=_=>ou(Be(c.mount?m:f,_,r.shouldUnregister?Be(f,_,[]):[])),D=(_,I,ee={})=>{const Ee=Be(s,_);let De=I;if(Ee){const Ce=Ee._f;Ce&&(!Ce.disabled&&_t(m,_,J0(I,Ce)),De=Gl(Ce.ref)&&Mn(I)?"":I,Z0(Ce.ref)?[...Ce.ref.options].forEach(Te=>Te.selected=De.includes(Te.value)):Ce.refs?ps(Ce.ref)?Ce.refs.forEach(Te=>{(!Te.defaultChecked||!Te.disabled)&&(Array.isArray(De)?Te.checked=!!De.find(Ye=>Ye===Te.value):Te.checked=De===Te.value||!!De)}):Ce.refs.forEach(Te=>Te.checked=Te.value===De):Xf(Ce.ref)?Ce.ref.value="":(Ce.ref.value=De,Ce.ref.type||v.state.next({name:_,values:Mt(m)})))}(ee.shouldDirty||ee.shouldTouch)&&R(_,De,ee.shouldTouch,ee.shouldDirty,!0),ee.shouldValidate&&Fe(_)},F=(_,I,ee)=>{for(const Ee in I){if(!I.hasOwnProperty(Ee))return;const De=I[Ee],Ce=_+"."+Ee,Te=Be(s,Ce);(h.array.has(_)||Zt(De)||Te&&!Te._f)&&!ur(De)?F(Ce,De,ee):D(Ce,De,ee)}},ae=(_,I,ee={})=>{const Ee=Be(s,_),De=h.array.has(_),Ce=Mt(I);_t(m,_,Ce),De?(v.array.next({name:_,values:Mt(m)}),(x.isDirty||x.dirtyFields||A.isDirty||A.dirtyFields)&&ee.shouldDirty&&(K(_),v.state.next({name:_,dirtyFields:o.dirtyFields,isDirty:ne(_,Ce)}))):Ee&&!Ee._f&&!Mn(Ce)?F(_,Ce,ee):D(_,Ce,ee),Cf(_,h)?v.state.next({...o,name:_,values:Mt(m)}):v.state.next({name:c.mount?_:void 0,values:Mt(m)})},be=async _=>{c.mount=!0;const I=_.target;let ee=I.name,Ee=!0;const De=Be(s,ee),Ce=ve=>{Ee=Number.isNaN(ve)||ur(ve)&&isNaN(ve.getTime())||xa(ve,Be(m,ee,ve))},Te=io(r.mode),Ye=io(r.reValidateMode);if(De){let ve,qe;const Oe=I.type?Ug(De._f):V0(_),Ve=_.type===Ni.BLUR||_.type===Ni.FOCUS_OUT,Ge=!QS(De._f)&&!a.validate&&!r.resolver&&!Be(o.errors,ee)&&!De._f.deps||WS(Ve,Be(o.touchedFields,ee),o.isSubmitted,Ye,Te),Ke=Cf(ee,h,Ve);_t(m,ee,Oe),Ve?(!I||!I.readOnly)&&(De._f.onBlur&&De._f.onBlur(_),g&&g(0)):De._f.onChange&&De._f.onChange(_);const et=R(ee,Oe,Ve),Lt=!yn(et)||Ke;if(!Ve&&v.state.next({name:ee,type:_.type,values:Mt(m)}),Ge)return(x.isValid||A.isValid)&&(r.mode==="onBlur"?Ve&&O():Ve||O()),Lt&&v.state.next({name:ee,...Ke?{}:et});if(!r.resolver&&a.validate&&await re({name:ee,eventType:_.type}),!Ve&&Ke&&v.state.next({...o}),r.resolver){const{errors:It}=await z([ee]);if(k([ee]),Ce(Oe),Ee){const kt=zg(o.errors,s,ee),zt=zg(It,s,kt.name||ee);ve=zt.error,ee=zt.name,qe=yn(It)}}else k([ee],!0),ve=(await Sf(De,h.disabled,m,N,r.shouldUseNativeValidation))[ee],k([ee]),Ce(Oe),Ee&&(ve?qe=!1:(x.isValid||A.isValid)&&(qe=await Q({fields:s,onlyCheckValid:!0,name:ee,eventType:_.type})));Ee&&(De._f.deps&&(!Array.isArray(De._f.deps)||De._f.deps.length>0)&&Fe(De._f.deps),q(ee,qe,ve,et))}},Me=(_,I)=>{if(Be(o.errors,I)&&_.focus)return _.focus(),1},Fe=async(_,I={})=>{let ee,Ee;const De=Bn(_);if(r.resolver){const Ce=await $(Tt(_)?_:De);ee=yn(Ce),Ee=_?!De.some(Te=>Be(Ce,Te)):ee}else _?(Ee=(await Promise.all(De.map(async Ce=>{const Te=Be(s,Ce);return await Q({fields:Te&&Te._f?{[Ce]:Te}:Te,eventType:Ni.TRIGGER})}))).every(Boolean),!(!Ee&&!o.isValid)&&O()):Ee=ee=await Q({fields:s,name:_,eventType:Ni.TRIGGER});return v.state.next({...!Cn(_)||(x.isValid||A.isValid)&&ee!==o.isValid?{}:{name:_},...r.resolver||!_?{isValid:ee}:{},errors:o.errors}),I.shouldFocus&&!Ee&&oo(s,Me,_?De:h.mount),Ee},Ae=(_,I)=>{let ee={...c.mount?m:f};return I&&(ee=Q0(I.dirtyFields?o.dirtyFields:o.touchedFields,ee)),Tt(_)?ee:Cn(_)?Be(ee,_):_.map(Ee=>Be(ee,Ee))},ue=(_,I)=>({invalid:!!Be((I||o).errors,_),isDirty:!!Be((I||o).dirtyFields,_),error:Be((I||o).errors,_),isValidating:!!Be(o.validatingFields,_),isTouched:!!Be((I||o).touchedFields,_)}),$e=_=>{const I=_?Bn(_):void 0;I?.forEach(ee=>Qt(o.errors,ee)),I?I.forEach(ee=>{v.state.next({name:ee,errors:o.errors})}):v.state.next({errors:{}})},Pe=(_,I,ee)=>{const Ee=(Be(s,_,{_f:{}})._f||{}).ref,De=Be(o.errors,_)||{},{ref:Ce,message:Te,type:Ye,...ve}=De;_t(o.errors,_,{...ve,...I,ref:Ee}),v.state.next({name:_,errors:o.errors,isValid:!1}),ee&&ee.shouldFocus&&Ee&&Ee.focus&&Ee.focus()},Xe=(_,I)=>xn(_)?v.state.subscribe({next:ee=>"values"in ee&&_(me(void 0,I),ee)}):me(_,I,!0),Ze=_=>v.state.subscribe({next:I=>{XS(_.name,I.name,_.exact)&&ZS(I,_.formState||x,U,_.reRenderRoot)&&_.callback({values:{...m},...o,...I,defaultValues:f})}}).unsubscribe,Ue=_=>(c.mount=!0,A={...A,..._.formState},Ze({..._,formState:{...S,..._.formState}})),b=(_,I={})=>{for(const ee of _?Bn(_):h.mount)h.mount.delete(ee),h.array.delete(ee),I.keepValue||(Qt(s,ee),Qt(m,ee)),!I.keepError&&Qt(o.errors,ee),!I.keepDirty&&Qt(o.dirtyFields,ee),!I.keepTouched&&Qt(o.touchedFields,ee),!I.keepIsValidating&&Qt(o.validatingFields,ee),!r.shouldUnregister&&!I.keepDefaultValue&&Qt(f,ee);v.state.next({values:Mt(m)}),v.state.next({...o,...I.keepDirty?{isDirty:ne()}:{}}),!I.keepIsValid&&O()},E=({disabled:_,name:I})=>{if(Hn(_)&&c.mount||_||h.disabled.has(I)){const De=h.disabled.has(I)!==!!_;_?h.disabled.add(I):h.disabled.delete(I),De&&c.mount&&!c.action&&O()}},L=(_,I={})=>{let ee=Be(s,_);const Ee=Hn(I.disabled)||Hn(r.disabled),De=!h.registerName.has(_)&&ee&&!ee._f.mount;return _t(s,_,{...ee||{},_f:{...ee&&ee._f?ee._f:{ref:{name:_}},name:_,mount:!0,...I}}),h.mount.add(_),ee&&!De?E({disabled:Hn(I.disabled)?I.disabled:r.disabled,name:_}):T(_,!0,I.value),{...Ee?{disabled:I.disabled||r.disabled}:{},...r.progressive?{required:!!I.required,min:as(I.min),max:as(I.max),minLength:as(I.minLength),maxLength:as(I.maxLength),pattern:as(I.pattern)}:{},name:_,onChange:be,onBlur:be,ref:Ce=>{if(Ce){h.registerName.add(_),L(_,I),h.registerName.delete(_),ee=Be(s,_);const Te=Tt(Ce.value)&&Ce.querySelectorAll&&Ce.querySelectorAll("input,select,textarea")[0]||Ce,Ye=IS(Te),ve=ee._f.refs||[];if(Ye?ve.find(qe=>qe===Te):Te===ee._f.ref)return;_t(s,_,{_f:{...ee._f,...Ye?{refs:[...ve.filter(Zd),Te,...Array.isArray(Be(f,_))?[{}]:[]],ref:{type:Te.type,name:_}}:{ref:Te}}}),T(_,!1,void 0,Te)}else ee=Be(s,_,{}),ee._f&&(ee._f.mount=!1),(r.shouldUnregister||I.shouldUnregister)&&!(H0(h.array,_)&&c.action)&&h.unMount.add(_)}}},ie=()=>r.shouldFocusError&&oo(s,Me,h.mount),W=_=>{Hn(_)&&(v.state.next({disabled:_}),oo(s,(I,ee)=>{const Ee=Be(s,ee);Ee&&(I.disabled=Ee._f.disabled||_,Array.isArray(Ee._f.refs)&&Ee._f.refs.forEach(De=>{De.disabled=Ee._f.disabled||_}))},0,!1))},te=(_,I)=>async ee=>{let Ee;ee&&(ee.preventDefault&&ee.preventDefault(),ee.persist&&ee.persist());let De=Mt(m);if(v.state.next({isSubmitting:!0}),r.resolver){const{errors:Ce,values:Te}=await z();k(),o.errors=Ce,De=Mt(Te)}else await Q({fields:s,eventType:Ni.SUBMIT});if(h.disabled.size)for(const Ce of h.disabled)Qt(De,Ce);if(Qt(o.errors,Y0),yn(o.errors)){v.state.next({errors:{}});try{await _(De,ee)}catch(Ce){Ee=Ce}}else I&&await I({...o.errors},ee),ie(),setTimeout(ie);if(v.state.next({isSubmitted:!0,isSubmitting:!1,isSubmitSuccessful:yn(o.errors)&&!Ee,submitCount:o.submitCount+1,errors:o.errors}),Ee)throw Ee},ce=(_,I={})=>{Be(s,_)&&(Tt(I.defaultValue)?ae(_,Mt(Be(f,_))):(ae(_,I.defaultValue),_t(f,_,Mt(I.defaultValue))),I.keepTouched||Qt(o.touchedFields,_),I.keepDirty||(Qt(o.dirtyFields,_),o.isDirty=I.defaultValue?ne(_,Mt(Be(f,_))):ne()),I.keepError||(Qt(o.errors,_),x.isValid&&O()),v.state.next({...o}))},J=(_,I={})=>{const ee=_?Mt(_):f,Ee=Mt(ee),De=yn(_),Ce=De?f:Ee;if(I.keepDefaultValues||(f=ee),!I.keepValues){if(I.keepDirtyValues){const Te=new Set([...h.mount,...Object.keys(rs(f,m))]);for(const Ye of Array.from(Te)){const ve=Be(o.dirtyFields,Ye),qe=Be(m,Ye),Oe=Be(Ce,Ye);ve&&!Tt(qe)?_t(Ce,Ye,qe):!ve&&!Tt(Oe)&&ae(Ye,Oe)}}else{if(Gf&&Tt(_))for(const Te of h.mount){const Ye=Be(s,Te);if(Ye&&Ye._f){const ve=Array.isArray(Ye._f.refs)?Ye._f.refs[0]:Ye._f.ref;if(Gl(ve)){const qe=ve.closest("form");if(qe){qe.reset();break}}}}if(I.keepFieldsRef)for(const Te of h.mount)ae(Te,Be(Ce,Te));else s={}}m=r.shouldUnregister?I.keepDefaultValues?Mt(f):{}:Mt(Ce),v.array.next({values:{...Ce}}),v.state.next({values:{...Ce}})}h={mount:I.keepDirtyValues?h.mount:new Set,unMount:new Set,array:new Set,registerName:new Set,disabled:new Set,watch:new Set,watchAll:!1,focus:""},c.mount=!x.isValid||!!I.keepIsValid||!!I.keepDirtyValues||!r.shouldUnregister&&!yn(Ce),c.watch=!!r.shouldUnregister,c.keepIsValid=!!I.keepIsValid,c.action=!1,I.keepErrors||(o.errors={}),v.state.next({submitCount:I.keepSubmitCount?o.submitCount:0,isDirty:De?!1:I.keepDirty?o.isDirty:!!(I.keepDefaultValues&&!xa(_,f)),isSubmitted:I.keepIsSubmitted?o.isSubmitted:!1,dirtyFields:De?{}:I.keepDirtyValues?I.keepDefaultValues&&m?rs(f,m):o.dirtyFields:I.keepDefaultValues&&_?rs(f,_):I.keepDirty?o.dirtyFields:{},touchedFields:I.keepTouched?o.touchedFields:{},errors:I.keepErrors?o.errors:{},isSubmitSuccessful:I.keepIsSubmitSuccessful?o.isSubmitSuccessful:!1,isSubmitting:!1,defaultValues:f})},H=(_,I)=>J(xn(_)?_(m):_,{...r.resetOptions,...I}),M=(_,I={})=>{const ee=Be(s,_),Ee=ee&&ee._f;if(Ee){const De=Ee.refs?Ee.refs[0]:Ee.ref;De.focus&&setTimeout(()=>{De.focus(),I.shouldSelect&&xn(De.select)&&De.select()})}},U=_=>{o={...o,..._}},je={control:{register:L,unregister:b,getFieldState:ue,handleSubmit:te,setError:Pe,_subscribe:Ze,_runSchema:z,_updateIsValidating:k,_focusError:ie,_getWatch:me,_getDirty:ne,_setValid:O,_setFieldArray:j,_setDisabledField:E,_setErrors:G,_getFieldArray:P,_reset:J,_resetDefaultValues:()=>xn(r.defaultValues)&&r.defaultValues().then(_=>{H(_,r.resetOptions),v.state.next({isLoading:!1})}),_removeUnmounted:Z,_disableForm:W,_subjects:v,_proxyFormState:x,get _fields(){return s},get _formValues(){return m},get _state(){return c},set _state(_){c=_},get _defaultValues(){return f},get _names(){return h},set _names(_){h=_},get _formState(){return o},get _options(){return r},set _options(_){r={...r,..._}}},subscribe:Ue,trigger:Fe,register:L,handleSubmit:te,watch:Xe,setValue:ae,getValues:Ae,reset:H,resetField:ce,clearErrors:$e,unregister:b,setError:Pe,setFocus:M,getFieldState:ue};return{...je,formControl:je}}var ji=()=>{if(typeof crypto<"u"&&crypto.randomUUID)return crypto.randomUUID();const a=typeof performance>"u"?Date.now():performance.now()*1e3;return"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,r=>{const o=(Math.random()*16+a)%16|0;return(r=="x"?o:o&3|8).toString(16)})},Xd=(a,r,o={})=>o.shouldFocus||Tt(o.shouldFocus)?o.focusName||`${a}.${Tt(o.focusIndex)?r:o.focusIndex}.`:"",Wd=(a,r)=>[...a,...Bn(r)],Jd=a=>Array.isArray(a)?a.map(()=>{}):void 0;function ef(a,r,o){return[...a.slice(0,r),...Bn(o),...a.slice(r)]}var tf=(a,r,o)=>Array.isArray(a)?(Tt(a[o])&&(a[o]=void 0),a.splice(o,0,a.splice(r,1)[0]),a):[],nf=(a,r)=>[...Bn(r),...Bn(a)];function n_(a,r){let o=0;const s=[...a];for(const f of r)s.splice(f-o,1),o++;return ou(s).length?s:[]}var af=(a,r)=>Tt(r)?[]:n_(a,Bn(r).sort((o,s)=>o-s)),rf=(a,r,o)=>{[a[r],a[o]]=[a[o],a[r]]},qg=(a,r,o)=>(a[r]=o,a);function Cw(a){const r=su(),{control:o=r,name:s,keyName:f="id",shouldUnregister:m,rules:c}=a,[h,g]=Ne.useState(o._getFieldArray(s)),y=Ne.useRef(o._getFieldArray(s).map(ji)),S=Ne.useRef(!1);o._names.array.add(s),Ne.useMemo(()=>c&&h.length>=0&&o.register(s,c),[o,s,h.length,c]),lu(()=>o._subjects.array.subscribe({next:({values:w,name:G})=>{if(G===s||!G){const T=Be(w,s);Array.isArray(T)&&(g(T),y.current=T.map(ji))}}}).unsubscribe,[o,s]);const x=Ne.useCallback(w=>{S.current=!0,o._setFieldArray(s,w)},[o,s]),A=(w,G)=>{const T=Bn(Mt(w)),R=Wd(o._getFieldArray(s),T);o._names.focus=Xd(s,R.length-1,G),y.current=Wd(y.current,T.map(ji)),x(R),g(R),o._setFieldArray(s,R,Wd,{argA:Jd(w)})},v=(w,G)=>{const T=Bn(Mt(w)),R=nf(o._getFieldArray(s),T);o._names.focus=Xd(s,0,G),y.current=nf(y.current,T.map(ji)),x(R),g(R),o._setFieldArray(s,R,nf,{argA:Jd(w)})},N=w=>{const G=af(o._getFieldArray(s),w);y.current=af(y.current,w),x(G),g(G),!Array.isArray(Be(o._fields,s))&&_t(o._fields,s,void 0),o._setFieldArray(s,G,af,{argA:w})},B=(w,G,T)=>{const R=Bn(Mt(G)),q=ef(o._getFieldArray(s),w,R);o._names.focus=Xd(s,w,T),y.current=ef(y.current,w,R.map(ji)),x(q),g(q),o._setFieldArray(s,q,ef,{argA:w,argB:Jd(G)})},O=(w,G)=>{const T=o._getFieldArray(s);rf(T,w,G),rf(y.current,w,G),x(T),g(T),o._setFieldArray(s,T,rf,{argA:w,argB:G},!1)},k=(w,G)=>{const T=o._getFieldArray(s);tf(T,w,G),tf(y.current,w,G),x(T),g(T),o._setFieldArray(s,T,tf,{argA:w,argB:G},!1)},K=(w,G)=>{const T=Mt(G),R=qg(o._getFieldArray(s),w,T);y.current=[...R].map((q,z)=>!q||z===w?ji():y.current[z]),x(R),g([...R]),o._setFieldArray(s,R,qg,{argA:w,argB:T},!0,!1)},j=w=>{const G=Bn(Mt(w));y.current=G.map(ji),x([...G]),g([...G]),o._setFieldArray(s,[...G],T=>T,{},!0,!1)};return Ne.useEffect(()=>{if(o._state.action=!1,Cf(s,o._names)&&o._subjects.state.next({...o._formState}),S.current&&(!io(o._options.mode).isOnSubmit||o._formState.isSubmitted)&&!io(o._options.reValidateMode).isOnSubmit)if(o._options.resolver)o._runSchema([s]).then(w=>{o._updateIsValidating([s]);const G=Be(w.errors,s),T=Be(o._formState.errors,s);(T?!G&&T.type||G&&(T.type!==G.type||T.message!==G.message):G&&G.type)&&(G?_t(o._formState.errors,s,G):Qt(o._formState.errors,s),o._subjects.state.next({errors:o._formState.errors}))});else{const w=Be(o._fields,s);w&&w._f&&!(io(o._options.reValidateMode).isOnSubmit&&io(o._options.mode).isOnSubmit)&&Sf(w,o._names.disabled,o._formValues,o._options.criteriaMode===da.all,o._options.shouldUseNativeValidation,!0).then(G=>!yn(G)&&o._subjects.state.next({errors:tD(o._formState.errors,G,s)}))}o._subjects.state.next({name:s,values:Mt(o._formValues)}),o._names.focus&&oo(o._fields,(w,G)=>{if(o._names.focus&&G.startsWith(o._names.focus)&&w.focus)return w.focus(),1}),o._names.focus="",o._setValid(),S.current=!1},[h,s,o]),Ne.useEffect(()=>(!Be(o._formValues,s)&&o._setFieldArray(s),()=>{const w=(G,T)=>{const R=Be(o._fields,G);R&&R._f&&(R._f.mount=T)};o._options.shouldUnregister||m?o.unregister(s):w(s,!1)}),[s,o,f,m]),{swap:Ne.useCallback(O,[x,s,o]),move:Ne.useCallback(k,[x,s,o]),prepend:Ne.useCallback(v,[x,s,o]),append:Ne.useCallback(A,[x,s,o]),remove:Ne.useCallback(N,[x,s,o]),insert:Ne.useCallback(B,[x,s,o]),update:Ne.useCallback(K,[x,s,o]),replace:Ne.useCallback(j,[x,s,o]),fields:Ne.useMemo(()=>h.map((w,G)=>({...w,[f]:y.current[G]||ji()})),[h,f])}}function nD(a={}){const r=Ne.useRef(void 0),o=Ne.useRef(void 0),[s,f]=Ne.useState({isDirty:!1,isValidating:!1,isLoading:xn(a.defaultValues),isSubmitted:!1,isSubmitting:!1,isSubmitSuccessful:!1,isValid:!1,submitCount:0,dirtyFields:{},touchedFields:{},validatingFields:{},errors:a.errors||{},disabled:a.disabled||!1,isReady:!1,defaultValues:xn(a.defaultValues)?void 0:a.defaultValues});if(!r.current)if(a.formControl)r.current={...a.formControl,formState:s},a.defaultValues&&!xn(a.defaultValues)&&a.formControl.reset(a.defaultValues,a.resetOptions);else{const{formControl:c,...h}=t_(a);r.current={...h,formState:s}}const m=r.current.control;return m._options=a,lu(()=>{const c=m._subscribe({formState:m._proxyFormState,callback:()=>f({...m._formState}),reRenderRoot:!0});return f(h=>({...h,isReady:!0})),m._formState.isReady=!0,c},[m]),Ne.useEffect(()=>m._disableForm(a.disabled),[m,a.disabled]),Ne.useEffect(()=>{a.mode&&(m._options.mode=a.mode),a.reValidateMode&&(m._options.reValidateMode=a.reValidateMode)},[m,a.mode,a.reValidateMode]),Ne.useEffect(()=>{a.errors&&(m._setErrors(a.errors),m._focusError())},[m,a.errors]),Ne.useEffect(()=>{a.shouldUnregister&&m._subjects.state.next({values:m._getWatch()})},[m,a.shouldUnregister]),Ne.useEffect(()=>{if(m._proxyFormState.isDirty){const c=m._getDirty();c!==s.isDirty&&m._subjects.state.next({isDirty:c})}},[m,s.isDirty]),Ne.useEffect(()=>{var c;a.values&&!xa(a.values,o.current)?(m._reset(a.values,{keepFieldsRef:!0,...m._options.resetOptions}),!((c=m._options.resetOptions)===null||c===void 0)&&c.keepIsValid||m._setValid(),o.current=a.values,f(h=>({...h}))):m._resetDefaultValues()},[m,a.values]),Ne.useEffect(()=>{m._state.mount||(m._setValid(),m._state.mount=!0),m._state.watch&&(m._state.watch=!1,m._subjects.state.next({...m._formState})),m._removeUnmounted()}),r.current.formState=Ne.useMemo(()=>G0(s,m),[m,s]),r.current}let os=[];const a_=(a,r)=>{if(a!=null&&r!=null)return os=[...os,[a,r]],()=>{os=os.filter(o=>o[1]!==r)}},aD=a=>{let{type:r}=a;typeof a=="string"&&(r=a);const o=[];typeof a=="string"?o.push({type:r}):o.push(a),os.forEach(([s,f])=>{typeof s=="string"&&s!==r||Array.isArray(s)&&!s.includes(r)||s instanceof RegExp&&!s.test(r)||typeof s=="function"&&!s(...o)||f(...o)})},iD=(a,r,o=[])=>(V.useEffect(()=>a_(a,r),o),aD);class ro{constructor(){this.cacheMap=new Map}static getInstance(){return ro.instance||(ro.instance=new ro),ro.instance}get(r){return this.cacheMap.get(r)}set(r,o){this.cacheMap.set(r,o)}delete(r){this.cacheMap.delete(r)}}const Fl=ro.getInstance();class rD{constructor(r,o,s={}){this.cacheKey=r,this.fetchData=o,this.options={strategy:"session",ttl:0,...s}}getCache(){const{strategy:r}=this.options;switch(r){case"local":return localStorage;case"memory":return Fl;default:return sessionStorage}}getCachedData(){const r=this.getCache(),o=this.options.strategy==="memory"?r.get(this.cacheKey):r.getItem(this.cacheKey);if(!o)return null;const s=JSON.parse(o);return this.options.ttl&&s.timestamp&&Date.now()-s.timestamp>this.options.ttl?(this.clearCache(),null):s.data}setCachedData(r){const o=this.getCache(),s=JSON.stringify({data:r,timestamp:Date.now()});this.options.strategy==="memory"?o.set(this.cacheKey,s):o.setItem(this.cacheKey,s)}clearCache(){const r=this.getCache();this.options.strategy==="memory"?r.delete(this.cacheKey):r.removeItem(this.cacheKey)}fetch(r=!1){const o=!r&&this.getCachedData();if(o)return Promise.resolve(o);const s=Fl.get(this.cacheKey);if(s?.promise)return s.promise;const f=this.fetchData().then(({data:m})=>(this.setCachedData(m),m)).finally(()=>{Fl.delete(this.cacheKey)});return Fl.set(this.cacheKey,{promise:f}),f}}const i_=a=>a?{...a,paymentMethods:a.paymentMethods||[],baseCurrency:a.baseCurrency||{}}:{paymentMethods:[],baseCurrency:{}},oD=V.createContext({api:ot}),{Provider:r_,Consumer:Sw}=oD,o_=(a=!1)=>{const r=localStorage.getItem("livemode")!=="false",o=`payment-settings-${window.location.pathname}-${r}`;return new rD(o,()=>ot.get("/api/settings",{params:{livemode:r}})).fetch(a)},s_=(a,r)=>r.reduce((s,f)=>s.concat(f.payment_currencies),[]).find(s=>s.id===a),l_=(a,r)=>r.find(o=>o.id===a);function sD({session:a,connect:r,children:o,baseUrl:s=void 0,authToken:f=void 0}){const[m,c]=V.useState(!1);f?window.__PAYMENT_KIT_AUTH_TOKEN=f:window.__PAYMENT_KIT_AUTH_TOKEN="",V.useEffect(()=>{(async()=>{if(!s){window.__PAYMENT_KIT_BASE_URL="",c(!1);return}const w=new URL(s);if(w.origin===window.location.origin){window.__PAYMENT_KIT_BASE_URL="",c(!1);return}c(!0);try{const G=Dt(w.origin,"__blocklet__.js?type=json"),T=`cross-origin-blocklet-${w.origin}`,q=await new rD(T,()=>Px.get(G).then($=>({data:$.data})),{strategy:"session",ttl:600*1e3}).fetch();if((q?.componentId||"").split("/").pop()===us)window.__PAYMENT_KIT_BASE_URL=Dt(w.origin,q.prefix||"/");else{const $=(q?.componentMountPoints||[]).find(re=>re?.did===us);window.__PAYMENT_KIT_BASE_URL=$?Dt(w.origin,$.mountPoint):s}}catch(G){console.warn(`Failed to fetch blocklet json from ${s}:`,G),window.__PAYMENT_KIT_BASE_URL=s}finally{c(!1)}})()},[s]);const[h,g]=zx("livemode",{defaultValue:!0}),{data:y={paymentMethods:[],baseCurrency:{}},error:S,run:x,loading:A}=Pi(o_,{refreshDeps:[h]});iD(["paymentMethod.created","paymentMethod.updated","paymentCurrency.added","paymentCurrency.updated"],()=>x(!0),[x]);const v=Qn(),[N,B]=V.useState(!0),[O,k]=V.useState({paying:!1,stripePaying:!1}),K=j=>{k(w=>({...w,...j}))};return S?u.jsx(mr,{severity:"error",children:S.message}):A||m?null:u.jsx(r_,{value:{session:a,connect:r,prefix:v,livemode:!!h,settings:i_(y),getCurrency:j=>s_(j,y?.paymentMethods||[]),getMethod:j=>l_(j,y?.paymentMethods||[]),refresh:x,setLivemode:g,api:ot,payable:N,setPayable:B,paymentState:O,setPaymentState:K},children:o})}function _n(){return V.useContext(oD)}function u_(a){return a==="standalone"?{height:"100vh",maxHeight:"100%"}:{height:"auto",minHeight:200}}function so({title:a,description:r,button:o="Back",mode:s="standalone"}){const f=u_(s);return u.jsx(ge,{sx:[{alignItems:"center",justifyContent:"center"},...Array.isArray(f)?f:[f]],children:u.jsxs(ge,{direction:"column",sx:{alignItems:"center",justifyContent:"center",width:"280px"},children:[u.jsx(oe,{variant:"h5",sx:{mb:2},children:a}),u.jsx(oe,{variant:"body1",sx:{mb:2,textAlign:"center"},children:r}),typeof o=="string"?u.jsx(pt,{variant:"text",size:"small",sx:{color:"text.link"},component:cr,href:window.blocklet?.appUrl,children:o}):o]})})}function Lg(a){return u.jsxs(oe,{...a,sx:[{color:"text.lighter",fontSize:12},...Array.isArray(a.sx)?a.sx:[a.sx]],children:["Powered by"," ",u.jsx(oe,{component:"span",sx:{fontWeight:"bold",fontSize:12},children:"ArcBlock"})]})}var jl={exports:{}},Ig;function c_(){if(Ig)return jl.exports;Ig=1;const a=qx(),r=async(o,s)=>{s={interval:20,timeout:1/0,leadingCheck:!0,...s};let f;const m=new Promise((c,h)=>{const g=async()=>{try{const y=await o();if(typeof y!="boolean")throw new TypeError("Expected condition to return a boolean");y===!0?c():f=setTimeout(g,s.interval)}catch(y){h(y)}};s.leadingCheck?g():f=setTimeout(g,s.interval)});if(s.timeout!==1/0)try{return await a(m,s.timeout)}catch(c){throw f&&clearTimeout(f),c}return m};return jl.exports=r,jl.exports.default=r,jl.exports}var d_=c_();const lD=ri(d_);function uu(a){if(a==null)throw new TypeError("Expected a string but received a ".concat(a));if(a.constructor.name!=="String")throw new TypeError("Expected a string but received a ".concat(a.constructor.name))}function f_(a){return Object.prototype.toString.call(a)==="[object RegExp]"}function $g(a,r){for(var o=0;o<r.length;o++){var s=r[o];if(a===s||f_(s)&&s.test(a))return!0}return!1}function _f(a){"@babel/helpers - typeof";return _f=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(r){return typeof r}:function(r){return r&&typeof Symbol=="function"&&r.constructor===Symbol&&r!==Symbol.prototype?"symbol":typeof r},_f(a)}function of(a,r){uu(a);var o,s;_f(r)==="object"?(o=r.min||0,s=r.max):(o=arguments[1],s=arguments[2]);var f=encodeURI(a).split(/%..|./).length-1;return f>=o&&(typeof s>"u"||f<=s)}function Af(a){"@babel/helpers - typeof";return Af=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(r){return typeof r}:function(r){return r&&typeof Symbol=="function"&&r.constructor===Symbol&&r!==Symbol.prototype?"symbol":typeof r},Af(a)}function uD(){var a=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},r=arguments.length>1?arguments[1]:void 0;(Af(a)!=="object"||a===null)&&(a={});for(var o in r)typeof a[o]>"u"&&(a[o]=r[o]);return a}var m_={require_tld:!0,allow_underscores:!1,allow_trailing_dot:!1,allow_numeric_tld:!1,allow_wildcard:!1,ignore_max_length:!1};function p_(a,r){uu(a),r=uD(r,m_),r.allow_trailing_dot&&a[a.length-1]==="."&&(a=a.substring(0,a.length-1)),r.allow_wildcard===!0&&a.indexOf("*.")===0&&(a=a.substring(2));var o=a.split("."),s=o[o.length-1];return r.require_tld&&(o.length<2||!r.allow_numeric_tld&&!/^([a-z\u00A1-\u00A8\u00AA-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]{2,}|xn[a-z0-9-]{2,})$/i.test(s)||/\s/.test(s))||!r.allow_numeric_tld&&/^\d+$/.test(s)?!1:o.every(function(f){return!(f.length>63&&!r.ignore_max_length||!/^[a-z_\u00a1-\uffff0-9-]+$/i.test(f)||/[\uff01-\uff5e]/.test(f)||/^-|-$/.test(f)||!r.allow_underscores&&/_/.test(f))})}function Ef(a){"@babel/helpers - typeof";return Ef=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(r){return typeof r}:function(r){return r&&typeof Symbol=="function"&&r.constructor===Symbol&&r!==Symbol.prototype?"symbol":typeof r},Ef(a)}var Vg="(?:[0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])",Mi="(".concat(Vg,"[.]){3}").concat(Vg),h_=new RegExp("^".concat(Mi,"$")),nn="(?:[0-9a-fA-F]{1,4})",y_=new RegExp("^("+"(?:".concat(nn,":){7}(?:").concat(nn,"|:)|")+"(?:".concat(nn,":){6}(?:").concat(Mi,"|:").concat(nn,"|:)|")+"(?:".concat(nn,":){5}(?::").concat(Mi,"|(:").concat(nn,"){1,2}|:)|")+"(?:".concat(nn,":){4}(?:(:").concat(nn,"){0,1}:").concat(Mi,"|(:").concat(nn,"){1,3}|:)|")+"(?:".concat(nn,":){3}(?:(:").concat(nn,"){0,2}:").concat(Mi,"|(:").concat(nn,"){1,4}|:)|")+"(?:".concat(nn,":){2}(?:(:").concat(nn,"){0,3}:").concat(Mi,"|(:").concat(nn,"){1,5}|:)|")+"(?:".concat(nn,":){1}(?:(:").concat(nn,"){0,4}:").concat(Mi,"|(:").concat(nn,"){1,6}|:)|")+"(?::((?::".concat(nn,"){0,5}:").concat(Mi,"|(?::").concat(nn,"){1,7}|:))")+")(%[0-9a-zA-Z.]{1,})?$");function Ql(a){var r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};uu(a);var o=(Ef(r)==="object"?r.version:arguments[1])||"";return o?o.toString()==="4"?h_.test(a):o.toString()==="6"?y_.test(a):!1:Ql(a,{version:4})||Ql(a,{version:6})}var g_={allow_display_name:!1,allow_underscores:!1,require_display_name:!1,allow_utf8_local_part:!0,require_tld:!0,blacklisted_chars:"",ignore_max_length:!1,host_blacklist:[],host_whitelist:[]},D_=/^([^\x00-\x1F\x7F-\x9F\cX]+)</i,v_=/^[a-z\d!#\$%&'\*\+\-\/=\?\^_`{\|}~]+$/i,b_=/^[a-z\d]+$/,x_=/^([\s\x01-\x08\x0b\x0c\x0e-\x1f\x7f\x21\x23-\x5b\x5d-\x7e]|(\\[\x01-\x09\x0b\x0c\x0d-\x7f]))*$/i,C_=/^[a-z\d!#\$%&'\*\+\-\/=\?\^_`{\|}~\u00A1-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]+$/i,S_=/^([\s\x01-\x08\x0b\x0c\x0e-\x1f\x7f\x21\x23-\x5b\x5d-\x7e\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]|(\\[\x01-\x09\x0b\x0c\x0d-\x7f\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))*$/i,__=254;function A_(a){var r=a.replace(/^"(.+)"$/,"$1");if(!r.trim())return!1;var o=/[\.";<>]/.test(r);if(o){if(r===a)return!1;var s=r.split('"').length===r.split('\\"').length;if(!s)return!1}return!0}function Hg(a,r){if(uu(a),r=uD(r,g_),r.require_display_name||r.allow_display_name){var o=a.match(D_);if(o){var s=o[1];if(a=a.replace(s,"").replace(/(^<|>$)/g,""),s.endsWith(" ")&&(s=s.slice(0,-1)),!A_(s))return!1}else if(r.require_display_name)return!1}if(!r.ignore_max_length&&a.length>__)return!1;var f=a.split("@"),m=f.pop(),c=m.toLowerCase();if(r.host_blacklist.length>0&&$g(c,r.host_blacklist)||r.host_whitelist.length>0&&!$g(c,r.host_whitelist))return!1;var h=f.join("@");if(r.domain_specific_validation&&(c==="gmail.com"||c==="googlemail.com")){h=h.toLowerCase();var g=h.split("+")[0];if(!of(g.replace(/\./g,""),{min:6,max:30}))return!1;for(var y=g.split("."),S=0;S<y.length;S++)if(!b_.test(y[S]))return!1}if(r.ignore_max_length===!1&&(!of(h,{max:64})||!of(m,{max:254})))return!1;if(!p_(m,{require_tld:r.require_tld,ignore_max_length:r.ignore_max_length,allow_underscores:r.allow_underscores})){if(!r.allow_ip_domain)return!1;if(!Ql(m)){if(!m.startsWith("[")||!m.endsWith("]"))return!1;var x=m.slice(1,-1);if(x.length===0||!Ql(x))return!1}}if(r.blacklisted_chars&&h.search(new RegExp("[".concat(r.blacklisted_chars,"]+"),"g"))!==-1)return!1;if(h[0]==='"'&&h[h.length-1]==='"')return h=h.slice(1,h.length-1),r.allow_utf8_local_part?S_.test(h):x_.test(h);for(var A=r.allow_utf8_local_part?C_:v_,v=h.split("."),N=0;N<v.length;N++)if(!A.test(v[N]))return!1;return!0}function Nn({children:a,required:r=!1,tooltip:o="",description:s="",boxSx:f={},...m}){return u.jsxs(Se,{sx:{mb:1,width:"100%",...f},children:[u.jsxs(Lb,{...m,sx:{display:"flex",alignItems:"center",gap:.5,fontSize:"0.875rem",fontWeight:500,color:"text.primary","&.MuiFormLabel-root":{display:"flex",alignItems:"center",gap:.5,fontWeight:500,color:"text.primary"},...m.sx||{}},children:[a,r&&u.jsx(oe,{component:"span",color:"error",children:"*"}),o&&(typeof o=="string"?u.jsx(Un,{title:o,children:u.jsx(i0,{fontSize:"small",sx:{opacity:.7,fontSize:"1rem"}})}):o)]}),s&&u.jsx(oe,{variant:"caption",sx:{color:"text.secondary"},children:s})]})}function E_({error:a}){return u.jsx(ls,{position:"end",children:u.jsx(oe,{component:"span",color:"error",children:a})})}function Xa({ref:a=void 0,name:r,label:o="",placeholder:s="",rules:f={},errorPosition:m="bottom",wrapperStyle:c={},inputProps:h={},required:g=!1,tooltip:y="",description:S="",layout:x="vertical",slotProps:A,...v}){const{control:N,formState:B}=hs(),O=cs(),k=jf(O.breakpoints.down("sm")),K=V.useRef(null);V.useImperativeHandle(a,()=>K.current);const j=yf(B.errors,r)?.message,w=x==="horizontal"&&!k,G={htmlInput:{...h,...A?.htmlInput},input:Object.assign(v.InputProps||{},A?.input||{},m==="right"&&j?{endAdornment:u.jsx(E_,{error:j})}:{})},T=()=>o?u.jsx(Nn,{required:g,tooltip:y,description:S,boxSx:w?{width:"fit-content",whiteSpace:"nowrap",minWidth:"fit-content"}:void 0,children:o}):null;return u.jsx(Yl,{name:r,control:N,rules:f,render:({field:R})=>u.jsx(Se,{sx:{width:"100%",...c},children:w?u.jsxs(ge,{direction:"row",spacing:2,sx:{alignItems:"center",justifyContent:"space-between"},children:[T(),u.jsx(Yn,{fullWidth:!1,error:!!j,helperText:m==="bottom"&&j?j:"",placeholder:s,size:"small",...R,...v,inputRef:K,slotProps:G,sx:{flex:1,...v.sx}})]}):u.jsxs(u.Fragment,{children:[T(),u.jsx(Yn,{fullWidth:!0,error:!!j,helperText:m==="bottom"&&j?j:"",placeholder:s,size:"small",...R,...v,inputRef:K,slotProps:G})]})})})}const w_="/.well-known/service/relay",cD=()=>yf(window,"blocklet.appPid")||yf(window,"blocklet.appId")||"",sf=a=>`relay:${cD()}:${a}`,T_=()=>window.location.protocol==="https:"?"wss:":"ws:",k_=()=>new URL(window.location.href).host;function cu(a){const r=V.useRef(null),o=V.useRef(null);return V.useEffect(()=>(cD()&&(!r.current||r.current.isConnected()===!1)&&(r.current=new Lx(`${T_()}//${k_()}${w_}`,{longpollerTimeout:5e3,heartbeatIntervalMs:30*1e3}),r.current.connect()),()=>{r.current&&(r.current.disconnect(),r.current=null)}),[]),V.useEffect(()=>{{let s=!1;o.current?o.current.channel!==a&&(r.current?.unsubscribe(sf(o.current.channel)),s=!0):s=!0,s&&r.current&&(o.current=r.current.subscribe(sf(a)),o.current.channel=a)}return()=>{o.current&&(r.current?.unsubscribe(sf(o.current.channel)),o.current=null)}},[a]),o.current}const F_="md";function qi(a=F_){const r=cs();return{isMobile:jf(r.breakpoints.down(a)),mobileSize:`${r.breakpoints.values[a]}px`}}function j_(){try{return hs()}catch{return null}}function R_({ref:a,...r}){return u.jsx($b,{direction:"up",ref:a,timeout:200,...r})}function wf({ref:a=void 0,value:r,onChange:o,name:s="",sx:f={},showDialCode:m=!1,label:c="",bordered:h=!1,allowClear:g=!1,disabled:y=!1}){const S=j_(),[x,A]=V.useState(!1),[v,N]=V.useState(""),B=V.useRef(null),O=V.useRef(null),k=V.useRef(null),[K,j]=V.useState(-1),w=V.useRef(40),{isMobile:G}=qi(),T=V.useRef(!1);V.useEffect(()=>{if(!x)return()=>{};const D=()=>{T.current=!1};return window.addEventListener("resize",D),()=>{window.removeEventListener("resize",D)}},[x]);const R=()=>{k.current&&(k.current.scrollTop=0)},q=()=>{if(!k.current||!x)return;const D=k.current.querySelectorAll(".MuiMenuItem-root");if(D.length>0){const F=D[0];F.offsetHeight>0&&(w.current=F.offsetHeight)}},z=D=>{if(!k.current)return;x&&!T.current&&(q(),T.current=!0);const F=k.current.clientHeight,ae=D*w.current;if(D<2)k.current.scrollTop=0;else if(D>$.length-3)k.current.scrollTop=k.current.scrollHeight-F;else{const be=ae-F/2+w.current/2;k.current.scrollTop=Math.max(0,be)}};V.useEffect(()=>{let D=null;return x?D=setTimeout(()=>{R(),!G&&B.current&&B.current.focus()},100):(N(""),j(-1)),()=>{D&&clearTimeout(D)}},[x,G]);const $=V.useMemo(()=>v?Bi.filter(D=>{const F=Wa(D);return F.name.toLowerCase().includes(v.toLowerCase())||F.iso2.toLowerCase().includes(v.toLowerCase())||`+${F.dialCode}`.includes(v)}):Bi,[v]);V.useEffect(()=>{R(),j(-1)},[v]),V.useEffect(()=>{let D=null;return K>=0&&(D=setTimeout(()=>{z(K)},10)),()=>{D&&clearTimeout(D)}},[K,$.length]);const re=V.useMemo(()=>{const D=Bi.find(F=>F[1]===r);return r&&D?Wa(D):{name:""}},[r]),Q=D=>{o(D),S&&s&&S.setValue(s,D),A(!1)},Z=D=>{D.preventDefault(),D.stopPropagation(),o(""),S&&s&&S.setValue(s,"")},ne=D=>{D.stopPropagation(),N(D.target.value)},me=D=>{if(D.stopPropagation(),D.key==="Escape"){A(!1);return}const F=ae=>{D.preventDefault(),j(be=>ae==="next"?be===-1||be>=$.length-1?0:be+1:be===-1||be<=0?$.length-1:be-1)};if(D.key==="Tab"){F(D.shiftKey?"prev":"next");return}if(D.key==="ArrowDown"){F("next");return}if(D.key==="ArrowUp"){F("prev");return}if(D.key==="Enter"&&K>=0&&K<$.length){D.preventDefault();const ae=Wa($[K]);Q(ae.iso2)}},P=u.jsxs(u.Fragment,{children:[u.jsx(Se,{sx:{position:"sticky",top:0,zIndex:1,bgcolor:"background.paper",p:1},onClick:D=>{D.stopPropagation()},children:u.jsx(Yn,{inputRef:B,autoFocus:!G,fullWidth:!0,placeholder:c||"Search country...",value:v,onChange:ne,onKeyDown:me,onClick:D=>D.stopPropagation(),size:"small",variant:"outlined",disabled:y})}),u.jsx(Se,{ref:k,sx:{flex:1,overflowY:"auto",overflowX:"hidden",maxHeight:G?"calc(60vh - 80px)":"calc(300px - 65px)",scrollBehavior:"smooth"},children:$.length>0?$.map((D,F)=>{const ae=Wa(D),be=F===K;return u.jsxs(Hy,{value:ae.iso2,selected:ae.iso2===r,onClick:()=>Q(ae.iso2),sx:{display:"flex",alignItems:"center","&.Mui-selected":{backgroundColor:"primary.lighter"},"&:hover":{backgroundColor:"grey.100"},...be?{backgroundColor:"grey.100",outline:"none"}:{}},children:[u.jsx(Nl,{iso2:ae.iso2,style:{marginRight:"8px"}}),u.jsx(oe,{children:ae.name}),m&&u.jsx(oe,{sx:{color:"text.secondary",ml:1},children:`+${ae.dialCode}`})]},ae.iso2)}):u.jsx(Hy,{disabled:!0,children:u.jsx(oe,{sx:{color:"text.secondary"},children:"No countries found"})})})]});return G?u.jsxs(Se,{ref:a,sx:{...f},children:[u.jsxs(Se,{onClick:()=>{y||A(!0)},sx:{display:"flex",alignItems:"center",flexWrap:"nowrap",gap:.5,cursor:"pointer",padding:"8px",paddingRight:"24px",position:"relative",...h?{}:{border:"none"},"-webkit-tap-highlight-color":"transparent",userSelect:"none",background:"none","&:hover, &:focus, &:active":{backgroundColor:"transparent",outline:"none"},...y?{backgroundColor:"grey.100",cursor:"not-allowed",color:"text.disabled","&:hover, &:focus, &:active":{backgroundColor:"grey.100",color:"text.disabled"}}:{},touchAction:"manipulation"},children:[r?u.jsxs(u.Fragment,{children:[u.jsx(Nl,{iso2:r,style:{display:"flex"}}),u.jsx(oe,{sx:{flex:1},children:re?.name}),g&&u.jsx(Se,{component:"button",type:"button",onClick:Z,onMouseDown:D=>{D.stopPropagation(),D.preventDefault()},onTouchStart:D=>{D.stopPropagation()},sx:{display:"flex",alignItems:"center",cursor:"pointer",p:.5,mr:1,borderRadius:"50%",border:"none",background:"transparent","&:hover":{backgroundColor:"action.hover"}},children:u.jsx(mf,{fontSize:"small"})})]}):u.jsx(oe,{sx:{color:"text.secondary",flex:1},children:c||"Select country..."}),u.jsx(Se,{sx:{position:"absolute",right:"8px",width:0,height:0,borderLeft:"5px solid transparent",borderRight:"5px solid transparent",borderTop:"5px solid currentColor"}})]}),u.jsxs(lo,{open:x,onClose:()=>A(!1),fullWidth:!0,maxWidth:"xs",slotProps:{paper:{sx:{position:"absolute",bottom:0,m:0,p:0,borderBottomLeftRadius:0,borderBottomRightRadius:0,width:"100%"}}},slots:{transition:R_},children:[u.jsxs(Se,{sx:{p:2,display:"flex",justifyContent:"space-between",alignItems:"center"},children:[u.jsx(oe,{variant:"h6",children:"Select Country"}),u.jsx(ei,{edge:"end",onClick:()=>A(!1),sx:{"-webkit-tap-highlight-color":"transparent"},children:"✕"})]}),u.jsx(uo,{sx:{"&.MuiDialogContent-root":{p:0}},children:P})]})]}):u.jsx(Ib,{ref:a,open:x,onOpen:()=>A(!0),onClose:()=>A(!1),MenuProps:{style:{maxHeight:"300px",top:"10px"},anchorOrigin:{vertical:"bottom",horizontal:"left"},transformOrigin:{vertical:"top",horizontal:"left"},PaperProps:{ref:O,sx:{display:"flex","& .MuiList-root":{pt:0,display:"flex",flexDirection:"column",overflowY:"hidden",width:"100%"}}}},sx:{width:"100%",minWidth:"60px",fieldset:{display:"none"},'&.Mui-focused:has(div[aria-expanded="false"])':{fieldset:{display:"block"}},".MuiSelect-select":{padding:"8px",paddingRight:g&&r?"48px !important":"24px !important"},svg:{right:0},".MuiMenuItem-root":{justifyContent:"flex-start"},...f},value:r,onChange:D=>{o(D.target.value),S&&s&&S.setValue(s,D.target.value)},disabled:y,renderValue:D=>u.jsx(Se,{sx:{display:"flex",alignItems:"center",flexWrap:"nowrap",gap:.5,cursor:"pointer",width:"100%"},children:D?u.jsxs(ge,{direction:"row",sx:{alignItems:"center",gap:.5,justifyContent:"space-between",width:"100%"},children:[u.jsxs(ge,{direction:"row",sx:{alignItems:"center",gap:.5},children:[u.jsx(Nl,{iso2:D,style:{display:"flex"}}),u.jsx(oe,{sx:{flex:1},children:re?.name})]}),g&&r&&u.jsx(Se,{onClick:Z,onMouseDown:F=>{F.stopPropagation(),F.preventDefault()},onTouchStart:F=>{F.stopPropagation()},sx:{display:"flex",alignItems:"center",cursor:"pointer",p:0,borderRadius:"50%",border:"none",background:"transparent",zIndex:2,marginRight:"-28px","&:hover":{backgroundColor:"action.hover"}},children:u.jsx(mf,{fontSize:"small"})})]}):u.jsx(oe,{sx:{color:"text.secondary",flex:1},children:c||"Select country..."})}),children:P})}const to=/^\d{3}$/,xt=/^\d{4}$/,bt=/^\d{5}$/,ca=/^\d{6}$/,Yg={GB:/^GIR[ ]?0AA|((AB|AL|B|BA|BB|BD|BH|BL|BN|BR|BS|BT|CA|CB|CF|CH|CM|CO|CR|CT|CV|CW|DA|DD|DE|DG|DH|DL|DN|DT|DY|E|EC|EH|EN|EX|FK|FY|G|GL|GY|GU|HA|HD|HG|HP|HR|HS|HU|HX|IG|IM|IP|IV|JE|KA|KT|KW|KY|L|LA|LD|LE|LL|LN|LS|LU|M|ME|MK|ML|N|NE|NG|NN|NP|NR|NW|OL|OX|PA|PE|PH|PL|PO|PR|RG|RH|RM|S|SA|SE|SG|SK|SL|SM|SN|SO|SP|SR|SS|ST|SW|SY|TA|TD|TF|TN|TQ|TR|TS|TW|UB|W|WA|WC|WD|WF|WN|WR|WS|WV|YO|ZE)(\d[\dA-Z]?[ ]?\d[ABD-HJLN-UW-Z]{2}))|BFPO[ ]?\d{1,4}$/i,JE:/^JE\d[\dA-Z]?[ ]?\d[ABD-HJLN-UW-Z]{2}$/i,GG:/^GY\d[\dA-Z]?[ ]?\d[ABD-HJLN-UW-Z]{2}$/i,IM:/^IM\d[\dA-Z]?[ ]?\d[ABD-HJLN-UW-Z]{2}$/i,US:/^\d{5}([ -]\d{4})?$/,CA:/^[ABCEGHJKLMNPRSTVXY]\d[ABCEGHJ-NPRSTV-Z][ ]?\d[ABCEGHJ-NPRSTV-Z]\d$/i,DE:/^\d{5}$/,JP:/^\d{3}-?\d{4}$/,FR:/^\d{2}[ ]?\d{3}$/,AU:xt,IT:/^\d{5}$/,CH:xt,AT:xt,ES:/^\d{5}$/,NL:/^\d{4}[ ]?[A-Z]{2}$/i,BE:xt,DK:xt,SE:/^\d{3}[ ]?\d{2}$/,NO:xt,BR:/^\d{5}-?\d{3}$/,PT:/^\d{4}(-\d{3})?$/,FI:bt,AX:/^22\d{3}$/,KR:/^\d{5}$/,CN:/^\d{6}$/,TW:/^\d{3}(\d{2})?$/,SG:ca,DZ:bt,AD:/^AD\d{3}$/,AR:/^([A-HJ-NP-Z])?\d{4}([A-Z]{3})?$/i,AM:/^(37)?\d{4}$/,AZ:/^\d{4}$/,BH:/^((1[0-2]|[2-9])\d{2})?$/,BD:xt,BB:/^(BB\d{5})?$/i,BY:ca,BM:/^[A-Z]{2}[ ]?[A-Z0-9]{2}$/i,BA:/^\d{5}$/,IO:/^BBND 1ZZ$/i,BN:/^[A-Z]{2}[ ]?\d{4}$/i,BG:xt,KH:bt,CV:xt,CL:/^\d{7}$/,CR:/^\d{4,5}|\d{3}-\d{4}$/,HR:/^\d{5}$/,CY:xt,CZ:/^\d{3}[ ]?\d{2}$/,DO:bt,EC:/^([A-Z]\d{4}[A-Z]|(?:[A-Z]{2})?\d{6})?$/i,EG:bt,EE:bt,FO:to,GE:xt,GR:/^\d{3}[ ]?\d{2}$/,GL:/^39\d{2}$/,GT:bt,HT:/^\d{4}$/,HN:/^(?:\d{5})?$/,HU:xt,IS:to,IN:/^[1-9]\d{5}$/,ID:bt,IL:bt,JO:bt,KZ:ca,KE:bt,KW:bt,LA:bt,LV:xt,LB:/^(\d{4}([ ]?\d{4})?)?$/,LI:/^(948[5-9])|(949[0-7])$/,LT:bt,LU:xt,MK:xt,MY:bt,MV:bt,MT:/^[A-Z]{3}[ ]?\d{2,4}$/i,MU:/^(\d{3}[A-Z]{2}\d{3})?$/i,MX:bt,MD:xt,MC:/^980\d{2}$/,MA:bt,NP:bt,NZ:xt,NI:/^((\d{4}-)?\d{3}-\d{3}(-\d{1})?)?$/,NG:/^(\d{6})?$/,OM:/^(PC )?\d{3}$/i,PK:bt,PY:xt,PH:xt,PL:/^\d{2}-\d{3}$/,PR:/^00[679]\d{2}([ -]\d{4})?$/,RO:ca,RU:ca,SM:/^4789\d$/,SA:bt,SN:bt,SK:/^\d{3}[ ]?\d{2}$/,SI:xt,ZA:xt,LK:bt,TJ:ca,TH:bt,TN:xt,TR:bt,TM:ca,UA:bt,UY:bt,UZ:ca,VA:/^00120$/,VE:xt,ZM:bt,AS:/^96799$/,CC:/^6799$/,CK:xt,RS:ca,ME:/^8\d{4}$/,CS:/^\d{5}$/,YU:/^\d{5}$/,CX:/^6798$/,ET:xt,FK:/^FIQQ 1ZZ$/i,NF:/^2899$/,FM:/^(9694[1-4])([ -]\d{4})?$/,GF:/^9[78]3\d{2}$/,GN:to,GP:/^9[78][01]\d{2}$/,GS:/^SIQQ 1ZZ$/i,GU:/^969[123]\d([ -]\d{4})?$/,GW:xt,HM:xt,IQ:bt,KG:ca,LR:xt,LS:to,MG:to,MH:/^969[67]\d([ -]\d{4})?$/,MN:ca,MP:/^9695[012]([ -]\d{4})?$/,MQ:/^9[78]2\d{2}$/,NC:/^988\d{2}$/,NE:xt,VI:/^008(([0-4]\d)|(5[01]))([ -]\d{4})?$/,VN:ca,PF:/^987\d{2}$/,PG:to,PM:/^9[78]5\d{2}$/,PN:/^PCRN 1ZZ$/i,PW:/^96940$/,RE:/^9[78]4\d{2}$/,SH:/^(ASCN|STHL) 1ZZ$/i,SJ:xt,SO:bt,SZ:/^[HLMS]\d{3}$/i,TC:/^TKCA 1ZZ$/i,WF:/^986\d{2}$/,XK:bt,YT:/^976\d{2}$/};function Tf(a,r){if(!a)return!0;try{const o=r?.toUpperCase();return o?!Yg[o]||Yg[o].test(a):!1}catch(o){return console.error(o),!1}}function gn(a,r,o="en"){if(!r||!r[a])return{};const s=r[a],f={};return s.pattern&&(f.pattern={value:new RegExp(s.pattern),message:s.pattern_message?.[o]||Ie("payment.checkout.invalid",o)}),f}function M_({mode:a,sx:r={},fieldValidation:o={},errorPosition:s="right"}){const{t:f,locale:m}=ft(),{control:c}=hs(),h=ba({control:c,name:"billing_address.country"});return a==="required"?u.jsx(Gn,{in:!0,children:u.jsx(ge,{className:"cko-payment-address cko-payment-form",sx:r,children:u.jsxs(ge,{direction:"column",className:"cko-payment-form",spacing:0,children:[u.jsx(Nn,{className:"base-label",children:f("payment.checkout.billing.line1")}),u.jsx(Xa,{name:"billing_address.line1",rules:{required:f("payment.checkout.required"),...gn("billing_address.line1",o,m)},errorPosition:s,variant:"outlined",placeholder:f("payment.checkout.billing.line1")}),u.jsx(Nn,{className:"base-label",children:f("payment.checkout.billing.city")}),u.jsx(Xa,{name:"billing_address.city",rules:{required:f("payment.checkout.required"),...gn("billing_address.city",o,m)},errorPosition:s,variant:"outlined",placeholder:f("payment.checkout.billing.city")}),u.jsx(Nn,{className:"base-label",children:f("payment.checkout.billing.state")}),u.jsx(Xa,{name:"billing_address.state",rules:{required:f("payment.checkout.required"),...gn("billing_address.state",o,m)},errorPosition:s,variant:"outlined",placeholder:f("payment.checkout.billing.state")}),u.jsx(Nn,{className:"base-label",children:f("payment.checkout.billing.postal_code")}),u.jsx(Xa,{name:"billing_address.postal_code",rules:{required:f("payment.checkout.required"),validate:g=>Tf(g,h)?!0:f("payment.checkout.invalid"),...gn("billing_address.postal_code",o,m)},errorPosition:s,variant:"outlined",placeholder:f("payment.checkout.billing.postal_code"),InputProps:{startAdornment:u.jsx(ls,{position:"start",style:{marginRight:"2px",marginLeft:"-8px"},children:u.jsx(Yl,{name:"billing_address.country",control:c,render:({field:g})=>u.jsx(wf,{...g,ref:g.ref,sx:{"&.Mui-focused .MuiOutlinedInput-notchedOutline":{borderColor:"transparent"}}})})})}})]})})}):u.jsx(Gn,{in:!0,children:u.jsx(ge,{className:"cko-payment-address cko-payment-form",sx:r,children:u.jsxs(ge,{direction:"column",className:"cko-payment-form",spacing:0,children:[u.jsx(Nn,{className:"base-label",children:f("payment.checkout.billing.state")}),u.jsx(Xa,{name:"billing_address.state",rules:{required:f("payment.checkout.required"),...gn("billing_address.state",o,m)},errorPosition:s,variant:"outlined",placeholder:f("payment.checkout.billing.state")}),u.jsx(Nn,{className:"base-label",children:f("payment.checkout.billing.postal_code")}),u.jsx(ge,{direction:"row",spacing:0,children:u.jsx(Xa,{name:"billing_address.postal_code",rules:{required:f("payment.checkout.required"),validate:g=>Tf(g,h)?!0:f("payment.checkout.invalid"),...gn("billing_address.postal_code",o,m)},errorPosition:s,variant:"outlined",placeholder:f("payment.checkout.billing.postal_code"),InputProps:{startAdornment:u.jsx(ls,{position:"start",style:{marginRight:"2px",marginLeft:"-8px"},children:u.jsx(Yl,{name:"billing_address.country",control:c,render:({field:g})=>u.jsx(wf,{...g,ref:g.ref,sx:{".MuiOutlinedInput-notchedOutline":{borderColor:"transparent !important"}}})})})}})})]})})})}function N_({value:a,currencies:r,onChange:o}){return u.jsx(B_,{className:"cko-currency-selector",count:r.length,style:{display:r.length>1?"grid":"block",width:"100%",gap:12,gridTemplateColumns:"repeat(auto-fit, minmax(220px, 1fr))"},children:r.map(s=>{const f=s.id===a;return u.jsx(pf,{variant:"outlined",onClick:()=>o(s.id,s.method?.id),className:f?"cko-payment-card":"cko-payment-card-unselect",children:u.jsxs(ge,{direction:"row",sx:{alignItems:"center",position:"relative"},children:[u.jsx(pr,{src:s.logo,alt:s.name,sx:{width:40,height:40,marginRight:"12px"}}),u.jsxs("div",{children:[u.jsx(oe,{variant:"h5",component:"div",sx:{fontSize:"16px",color:"text.primary",fontWeight:"500"},children:s.symbol}),u.jsx(oe,{gutterBottom:!0,sx:{color:"text.lighter",fontSize:14},children:s.method.name})]}),u.jsx(Vb,{checked:f,sx:{position:"absolute",right:0}})]})},s.id)})})}const B_=Zn("section")`
|
|
28
28
|
.cko-payment-card {
|
|
29
29
|
position: relative;
|
|
@@ -41,7 +41,7 @@ function print() { __p += __j.call(arguments, '') }
|
|
|
41
41
|
cursor: pointer;
|
|
42
42
|
background: ${({theme:a})=>a.palette.grey[50]};
|
|
43
43
|
}
|
|
44
|
-
`;let lf=null;const dD=async()=>{if(!lf){const a=await Ht(()=>import("./libphonenumber-Qs8PCdM-.js").then(o=>o.l),[]),r=(a.default||a)?.PhoneNumberUtil;if(!r)throw new Error("PhoneNumberUtil not found");lf=r.getInstance()}return lf},U_=async a=>{if(!a)return!0;try{let r=null;try{r=await dD()}catch{return/^[+]?[(]?[0-9]{3}[)]?[-\s.]?[0-9]{3}[-\s.]?[0-9]{4,6}$/im.test(a)}const o=r.parseAndKeepRawInput(a);return r.isValidNumber(o)}catch(r){return console.error("Phone validation error:",r),!1}},Jf=(a,r="US")=>{if(!a||a.trim()==="")return"";const o=a.replace(/[^\d+]/g,"");if(o.startsWith("+"))return o;const s={US:"1",CA:"1",CN:"86",HK:"852",IN:"91",UK:"44",GB:"44",JP:"81",KR:"82",AU:"61",DE:"49",FR:"33",IT:"39",ES:"34",BR:"55",RU:"7",MX:"52",SG:"65",AE:"971"},f=[[/^1[3-9]\d{9}$/,"86"],[/^\d{10}$/,"1"],[/^[6-9]\d{9}$/,"91"],[/^0[1-9]\d{8,9}$/,"81"],[/^07\d{9}$/,"44"],[/^04\d{8}$/,"61"],[/^01[0-9]\d{7,8}$/,"82"],[/^[0-9]\d{8}$/,"86"]];let m=o;m.startsWith("0")&&(m=m.substring(1));for(const[h,g]of f)if(h.test(o))return o.startsWith("0")&&!["1","86"].includes(g)?`+${g}${o.substring(1)}`:`+${g}${o}`;return`+${s[r.toUpperCase()]||r}${m}`};function O_({...a}){const r=a.countryFieldName||"billing_address.country",{control:o,getValues:s,setValue:f,trigger:m}=hs(),c=s(),h=V.useRef(!1),g=V.useCallback(k=>{if(!h.current)try{h.current=!0,k()}finally{requestAnimationFrame(()=>{h.current=!1})}},[]),{phone:y,handlePhoneValueChange:S,inputRef:x,country:A,setCountry:v}=J1({defaultCountry:Vf(c[r])?c[r]:"us",value:c[a.name]||"",countries:Bi,onChange:k=>{g(()=>{f(a.name,k.phone),f(r,k.country)})}}),N=ba({control:o,name:r});V.useEffect(()=>{!N||N===A||g(()=>{v(N)})},[N,A,v,g]),b0(()=>{dD().catch(k=>{console.error("Failed to preload phone validator:",k)})});const B=V.useCallback(k=>{g(()=>{v(k)})},[v,g]),O=V.useCallback(()=>{m(a.name)},[a.name]);return u.jsx(Xa,{value:y,onChange:S,type:"tel",inputRef:x,onBlur:O,InputProps:{startAdornment:u.jsx(ls,{position:"start",style:{marginRight:"2px",marginLeft:"-8px"},children:u.jsx(wf,{value:A,onChange:B,name:r,sx:{"&.MuiOutlinedInput-notchedOutline":{borderColor:"transparent !important"}},showDialCode:!0})})},...D0(a,["countryFieldName"])})}function z_(a,r={}){let o=null;const{LoadingComponent:s=()=>u.jsx(x0,{children:u.jsx(gr,{})}),ErrorComponent:f=({error:c})=>u.jsxs("div",{children:["Error: ",c.message]})}=r,m=async()=>{if(o)return o;try{return o=a().then(c=>"default"in c?c.default:c),await o}catch(c){throw o=null,c}};return function(h){const[g,y]=V.useState(null),[S,x]=V.useState(null);return V.useEffect(()=>{m().then(A=>{y(()=>A)}).catch(A=>{x(A),console.error("Failed to load component:",A)})},[]),S?u.jsx(f,{error:S}):g?u.jsx(g,{...h}):u.jsx(s,{})}}const fD=z_(async()=>{const[a,r]=await Promise.all([Ht(()=>import("./react-stripe.esm-BZIKAsrR.js"),[]),Ht(()=>import("./stripe.esm-BCCu7gPj.js"),[])]);window.__STRIPE_COMPONENTS__={Elements:a.Elements,PaymentElement:a.PaymentElement,useElements:a.useElements,useStripe:a.useStripe,loadStripe:r.loadStripe,LinkAuthenticationElement:a.LinkAuthenticationElement};const{default:o}=await Ht(async()=>{const{default:s}=await import("./form-DD-EiA7W.js");return{default:s}},[]);return o});function hr({ref:a=void 0,children:r,loading:o=!1,loadingPosition:s="start",loadingIndicator:f=void 0,loadingProps:m={},loadingOnly:c=!1,onClick:h,sx:g,...y}){const S=N=>{o||h?.(N)},x=N=>({color:"inherit",...N==="start"&&{mr:1},...N==="end"&&{ml:1},...N==="center"&&{position:"absolute",left:"50%",transform:"translateY(-50%) translateX(-50%)",top:"50%"},display:"inline-flex",alignItems:"center"}),A=u.jsx(gr,{size:16,...m,sx:{color:"inherit",...m?.sx||{}}}),v=u.jsx(oe,{sx:x(s),children:f||A});return u.jsxs(pt,{ref:a,disabled:y.disabled||o,onClick:S,sx:{position:"relative",display:"inline-flex",alignItems:"center",justifyContent:"center",...g},...y,children:[o&&s==="start"&&v,u.jsx(oe,{sx:{visibility:o&&c?"hidden":"visible"},children:r}),o&&s==="center"&&v,o&&s==="end"&&v]})}hr.displayName="LoadingButton";function em(a){const{invoice:r,invoiceIds:o,subscriptionId:s,customerId:f,currencyId:m,paymentMethod:c,autoTrigger:h=!1,onExternalPayment:g,onSuccess:y,onError:S,onClose:x,children:A}=a,{t:v}=ft(),[N,B]=ni({paying:!1,confirmDialog:!1,stripeDialog:!1,clientSecret:null,publishableKey:null,customer:null}),O=V.useRef(!1);V.useEffect(()=>{h&&!O.current&&(O.current=!0,k())},[h]);const k=async()=>{if(N.paying)return;const T=!!(s||r?.subscription_id),R=c||r?.paymentMethod;if(T&&R?.type==="stripe"){B({confirmDialog:!0});return}await K()},K=async()=>{B({paying:!0,confirmDialog:!1});const T=m||r?.currency_id||r?.paymentCurrency?.id;if((c||r?.paymentMethod)?.type==="stripe"&&T){const z={};o&&o.length>0?z.invoice_ids=o:r?z.invoice_ids=[r.id]:s?z.subscription_id=s:f&&(z.customer_id=f),T&&(z.currency_id=T);try{const{data:$}=await ot.post("/api/invoices/pay-stripe",z);B({paying:!1,stripeDialog:!0,clientSecret:$.client_secret,publishableKey:$.publishable_key,customer:$.customer||null});return}catch($){const re=Pt($);rt.error(re),B({paying:!1}),S?.(re);return}}if(B({paying:!1}),g){g(r?.id);return}rt.error(v("payment.customer.invoice.payError")),S?.(new Error("EXTERNAL_PAYMENT_HANDLER_NOT_PROVIDED"))},j=()=>{B({confirmDialog:!1,paying:!1}),x?.()},w=()=>{rt.success(v("payment.customer.invoice.payProcessing")),B({paying:!1,stripeDialog:!1,clientSecret:null,publishableKey:null,customer:null}),setTimeout(()=>{y?.()},2e3)},G=()=>{B({paying:!1,stripeDialog:!1,clientSecret:null,publishableKey:null,customer:null}),x?.()};return u.jsxs(u.Fragment,{children:[A?.(k,N.paying),N.confirmDialog&&u.jsx(C0,{open:N.confirmDialog,title:v("payment.customer.invoice.paymentConfirmTitle"),onClose:j,maxWidth:"sm",PaperProps:{style:{minHeight:0}},actions:[u.jsx(pt,{variant:"outlined",onClick:j,children:v("common.cancel")},"cancel"),u.jsx(pt,{variant:"contained",onClick:K,children:v("payment.customer.invoice.continue")},"continue")],children:u.jsx(oe,{variant:"body1",sx:{color:"text.secondary",mt:-2},children:v("payment.customer.invoice.paymentConfirmDescription")})}),N.stripeDialog&&N.clientSecret&&N.publishableKey&&N.customer&&u.jsx(fD,{clientSecret:N.clientSecret,intentType:"setup_intent",publicKey:N.publishableKey,customer:N.customer,mode:"setup",title:v("payment.customer.invoice.pay"),submitButtonText:v("common.submit"),onConfirm:w,onCancel:G,returnUrl:window.location.href})]})}const uf=async a=>{if(!a.subscriptionId&&!a.customerId)throw new Error("Either subscriptionId or customerId must be provided");let r;return a.subscriptionId?r=`/api/subscriptions/${a.subscriptionId}/overdue/invoices`:r=`/api/customers/${a.customerId}/overdue/invoices`,(await ot.get(a.authToken?Dt(r,`?authToken=${a.authToken}`):r)).data};function Gg({subscriptionId:a=void 0,customerId:r=void 0,mode:o="default",dialogProps:s={open:!0},children:f=void 0,onPaid:m=()=>{},detailLinkOptions:c={enabled:!0},successToast:h=!0,alertMessage:g="",authToken:y=void 0}){const{t:S,locale:x}=ft(),v=S0()?.arcSphere,N=cs(),{connect:B,session:O}=_n(),[k,K]=V.useState(""),[j,w]=V.useState(!1),[G,T]=V.useState(s.open||!1),[R,q]=V.useState({}),[z,$]=V.useState({}),[re,Q]=V.useState({}),Z=V.useRef(re),ne=a?"subscription":"customer",me=r||O?.user?.did,P=a||me,D=V.useRef(me);V.useEffect(()=>{Z.current=re},[re]);const{data:F={summary:{},invoices:[]},error:ae,loading:be,runAsync:Me}=Pi(()=>uf({subscriptionId:a,customerId:me,authToken:y}),{ready:!!a||!!me,onSuccess:H=>{H.customer?.id&&H.customer?.id!==D.current&&(D.current=H.customer?.id)}}),Fe=V.useMemo(()=>a?Dt(Qn(),`/customer/subscription/${a}`):me?Dt(Qn(),"/customer/invoice/past-due"):"",[a,me]),Ae=V.useMemo(()=>F?.summary?Object.values(F.summary):[],[F?.summary]),ue=async H=>{if(Z.current[H])try{if((await uf({subscriptionId:a,customerId:me,authToken:y})).invoices?.some(je=>je.currency_id===H))return;Q(je=>{const _={...je};return delete _[H],_}),$(je=>({...je,[H]:"success"}))}catch(U){console.error("Error checking Stripe payment completion:",U);return}h&&(rt.close(),rt.success(S("payment.customer.invoice.paySuccess"))),w(!1),(await Me()).invoices?.length===0&&(T(!1),m(P,H,ne))},$e=Bf(H=>ue(H),1e3,{leading:!1,trailing:!0,maxWait:5e3}),Pe=Lf(),Xe=cu("events"),Ze=async H=>{let M=!1;return await lD(async()=>(M=!(await uf({subscriptionId:a,customerId:me,authToken:y})).invoices?.some(je=>je.currency_id===H),M),{interval:2e3,timeout:180*1e3}),M},Ue=async(H,M=!1)=>{if(Pe||v)try{if(await Ze(H)){$(je=>({...je,[H]:"success"}));const se=await Me();h&&(rt.close(),rt.success(S("payment.customer.invoice.paySuccess"))),se.invoices?.length===0&&(T(!1),m(P,H,ne))}}catch(U){console.error("Check payment status failed:",U),$(se=>({...se,[H]:"error"}))}finally{w(!1)}else M&&(Q(U=>({...U,[H]:!0})),$(U=>({...U,[H]:"processing"})))};V.useEffect(()=>{if(!Xe||Pe||v)return;const H=({response:M})=>{const se=`${a||M.customer_id}-${M.currency_id}`;(a&&M.subscription_id===a||me&&me===M.customer_id||D.current&&D.current===M.customer_id)&&(R[se]||(q(je=>({...je,[se]:1})),$e(M.currency_id)))};return Xe.on("invoice.paid",H),()=>{Xe.off("invoice.paid",H)}},[Xe,a,me]);const b=H=>{const{currency:M,method:U}=H;if(U.type==="stripe"){rt.error(S("payment.subscription.overdue.notSupport"));return}if(!j&&(K(M.id),w(!0),$(se=>({...se,[M.id]:"idle"})),["arcblock","ethereum","base"].includes(U.type))){const se={currencyId:M.id};a?se.subscriptionId=a:me&&(se.customerId=me),B.open({locale:x,containerEl:void 0,saveConnect:!1,action:"collect-batch",prefix:Dt(Qn(),"/api/did"),useSocket:!Pe,extraParams:se,messages:{scan:S("common.connect.defaultScan"),title:S("payment.customer.invoice.payBatch"),confirm:S("common.connect.confirm")},onSuccess:()=>{B.close(),Ue(M.id),w(!1),$(je=>({...je,[M.id]:"success"}))},onClose:()=>{B.close(),w(!1)},onError:je=>{rt.error(Pt(je)),$(_=>({..._,[M.id]:"error"})),w(!1)}})}},E=()=>{T(!1),s.onClose?.()},L=H=>{c.onClick?(H.preventDefault(),c.onClick(H)):c.enabled||(H.preventDefault(),E())};if(be)return null;const ie=()=>c.title?c.title:S(a?"payment.subscription.overdue.view":"payment.customer.pastDue.view"),W=(H,M=!0,U={variant:"contained"})=>{const{currency:se}=H,je=j&&k===se.id,_=z[se.id]||"idle",I=(U?.variant||"contained")==="contained"?{color:ee=>Yf(ee)}:{};if(_==="success")return u.jsx(pt,{variant:U?.variant||"contained",size:"small",onClick:()=>ue(se.id),sx:I,...M?{}:{color:"success",startIcon:u.jsx(r0,{})},children:S("payment.subscription.overdue.paid")});if(H.method.type==="stripe"){let ee=S("payment.subscription.overdue.payNow");return _==="error"?ee=S("payment.subscription.overdue.retry"):_==="processing"&&(ee=S("payment.subscription.overdue.processing")),u.jsx(em,{subscriptionId:a,customerId:a?void 0:me,currencyId:se.id,paymentMethod:H.method,onSuccess:()=>{Ue(se.id,!0)},onError:()=>{$(Ee=>({...Ee,[se.id]:"error"})),Q(Ee=>({...Ee,[se.id]:!1}))},children:(Ee,De)=>u.jsx(hr,{variant:U?.variant||"contained",size:"small",disabled:De||_==="processing",loading:De||_==="processing",onClick:Ee,sx:{...I,...U?.sx||{}},children:ee})})}return u.jsx(hr,{variant:U?.variant||"contained",size:"small",disabled:je,loading:je,onClick:()=>b(H),sx:{...I,...U?.sx||{}},children:S(_==="error"?"payment.subscription.overdue.retry":"payment.subscription.overdue.payNow")})},te=H=>H.name&&H.type!=="arcblock"?` (${H.name})`:"",ce=()=>{if(a&&F.subscription)return Ae.length===1?S("payment.subscription.overdue.title",{name:F.subscription?.description,count:F.invoices?.length,total:Ca(Ae[0]?.amount,Ae[0]?.currency?.decimal),symbol:Ae[0]?.currency?.symbol,method:te(Ae[0]?.method)}):S("payment.subscription.overdue.simpleTitle",{name:F.subscription?.description,count:F.invoices?.length});if(me){let H="";return Ae.length===1?H=S("payment.customer.overdue.title",{subscriptionCount:F.subscriptionCount||0,count:F.invoices?.length,total:Ca(Ae[0]?.amount,Ae[0]?.currency?.decimal),symbol:Ae[0]?.currency?.symbol,method:te(Ae[0]?.method)}):H=S("payment.customer.overdue.simpleTitle",{subscriptionCount:F.subscriptionCount||0,count:F.invoices?.length}),g?`${H}${g}`:`${H}${S("payment.customer.overdue.defaultAlert")}`}return""},J=()=>a&&F.subscription?S("payment.subscription.overdue.empty",{name:F.subscription?.description}):S("payment.customer.overdue.empty");return o==="custom"&&f&&typeof f=="function"?u.jsx(ge,{children:f(b,{subscription:F?.subscription,summary:F?.summary,invoices:F?.invoices,subscriptionCount:F?.subscriptionCount,detailUrl:Fe})}):u.jsx(C0,{PaperProps:{style:{minHeight:"auto"}},...s||{},open:G,title:s?.title||S("payment.subscription.overdue.pastDue"),sx:{"& .MuiDialogContent-root":{pt:0}},onClose:E,children:ae?u.jsx(mr,{severity:"error",children:ae.message}):u.jsxs(ge,{sx:{gap:1},children:[Ae.length===0&&u.jsxs(u.Fragment,{children:[u.jsx(mr,{severity:"success",children:J()}),u.jsx(ge,{direction:"row",sx:{justifyContent:"flex-end",mt:2},children:u.jsx(pt,{variant:"outlined",color:"primary",onClick:E,sx:{width:"fit-content"},children:S("common.know")})})]}),Ae.length===1&&u.jsxs(u.Fragment,{children:[u.jsxs(oe,{variant:"body1",sx:{color:"text.secondary"},children:[ce(),c.enabled&&u.jsxs(u.Fragment,{children:[u.jsx("br",{}),S("payment.subscription.overdue.description"),u.jsx("a",{href:Fe,target:"_blank",onClick:L,rel:"noreferrer",style:{color:N.palette.text.link},children:ie()})]})]}),u.jsxs(ge,{direction:"row",sx:{justifyContent:"flex-end",gap:2,mt:2},children:[u.jsx(pt,{variant:"outlined",color:"primary",onClick:E,children:S("common.cancel")}),W(Ae[0])]})]}),Ae.length>1&&u.jsxs(u.Fragment,{children:[u.jsxs(oe,{variant:"body1",sx:{color:"text.secondary"},children:[ce(),c.enabled&&u.jsxs(u.Fragment,{children:[u.jsx("br",{}),S("payment.subscription.overdue.description"),u.jsx("a",{href:Fe,target:"_blank",rel:"noreferrer",onClick:L,style:{color:N.palette.text.link},children:ie()})]})]}),u.jsx(oe,{variant:"body1",sx:{color:"text.secondary"},children:S("payment.subscription.overdue.list")}),u.jsx(ge,{children:Ae.map(H=>u.jsxs(ge,{direction:"row",sx:{justifyContent:"space-between",alignItems:"center",py:1,px:.5,borderBottom:"1px solid",borderColor:"divider","&:hover":{backgroundColor:()=>N.palette.grey[100]},mt:0},children:[u.jsx(oe,{children:S("payment.subscription.overdue.total",{total:Ca(H?.amount,H?.currency?.decimal),currency:H?.currency?.symbol,method:te(H?.method)})}),W(H,!1,{variant:"text",sx:{color:"text.link"}})]},H?.currency?.id))})]})]})})}const mD="payment-currency-preference",pD=(a,r)=>r?`${a}:${r}`:a,P_=(a,r)=>{try{localStorage.setItem(pD(mD,r),a)}catch(o){console.warn("Failed to save currency preference",o)}},q_=(a,r)=>{try{const o=localStorage.getItem(pD(mD,a));if(o&&(!r||r.includes(o)))return o}catch(o){console.warn("Failed to access localStorage",o)}return null};function Ul({onConfirm:a,onCancel:r,title:o,message:s,confirm:f="",color:m="error",cancel:c="",loading:h=!1}){const{t:g}=ft();return u.jsx(Ix,{open:!0,title:o,onConfirm:a,onCancel:r,confirmButton:{text:f||g("common.confirm"),props:{color:m,size:"small",variant:"contained",disabled:!!h}},cancelButton:{text:c||g("common.cancel"),props:{color:"inherit",size:"small"}},showCancelButton:typeof c!="boolean"||!!c,children:u.jsx(Se,{children:s})})}function Kg({open:a,onClose:r}){const{t:o}=ft();return u.jsx(lo,{open:a,onClose:r,slotProps:{paper:{sx:{borderRadius:3,maxWidth:400,mx:"auto",overflow:"hidden"}}},children:u.jsxs(uo,{sx:{p:0},children:[u.jsxs(ge,{alignItems:"center",sx:{pt:4,pb:3,px:4,textAlign:"center"},children:[u.jsx(Se,{sx:{width:64,height:64,borderRadius:"50%",display:"flex",alignItems:"center",justifyContent:"center",bgcolor:s=>Yb(s.palette.warning.main,.1),mb:2.5},children:u.jsx(Hb,{sx:{fontSize:36,color:"warning.main"}})}),u.jsx(oe,{sx:{fontWeight:700,fontSize:18,mb:1,color:"text.primary"},children:o("payment.checkout.stopAcceptingOrders.title")}),u.jsx(oe,{sx:{color:"text.secondary",fontSize:14,lineHeight:1.6},children:o("payment.checkout.stopAcceptingOrders.description")})]}),u.jsx(Se,{sx:{px:4,pb:3},children:u.jsx(pt,{fullWidth:!0,variant:"contained",disableElevation:!0,onClick:r,sx:{borderRadius:2,textTransform:"none",fontWeight:600,py:1},children:o("common.know")})})]})})}function Qg({open:a,previewRate:r=void 0,submitRate:o=void 0,changePercent:s,onConfirm:f,onCancel:m,loading:c=!1}){const{t:h}=ft(),g=s>0?"increased":"decreased",y=Math.abs(s);return u.jsxs(lo,{open:a,onClose:c?void 0:m,maxWidth:"sm",fullWidth:!0,PaperProps:{sx:{borderRadius:2}},children:[u.jsxs(Zl,{sx:{display:"flex",alignItems:"center",gap:1,pb:1},children:[u.jsx(Gb,{color:"warning"}),u.jsx(oe,{variant:"h6",component:"span",children:h("payment.checkout.priceChange.title",{fallback:"Price Changed"})})]}),u.jsx(uo,{children:u.jsxs(ge,{spacing:2,children:[u.jsx(oe,{variant:"body1",color:"text.secondary",children:h("payment.checkout.priceChange.description",{fallback:`The exchange rate has ${g} by ${y.toFixed(2)}% since you started this checkout.`,direction:g,percent:y.toFixed(2)})}),(r||o)&&u.jsx(Se,{sx:{bgcolor:"action.hover",borderRadius:1,p:2},children:u.jsxs(ge,{spacing:1,children:[r&&u.jsxs(Se,{sx:{display:"flex",justifyContent:"space-between"},children:[u.jsxs(oe,{variant:"body2",color:"text.secondary",children:[h("payment.checkout.priceChange.previewRate",{fallback:"Preview Rate"}),":"]}),u.jsx(oe,{variant:"body2",fontFamily:"monospace",children:r})]}),o&&u.jsxs(Se,{sx:{display:"flex",justifyContent:"space-between"},children:[u.jsxs(oe,{variant:"body2",color:"text.secondary",children:[h("payment.checkout.priceChange.currentRate",{fallback:"Current Rate"}),":"]}),u.jsx(oe,{variant:"body2",fontFamily:"monospace",children:o})]}),u.jsxs(Se,{sx:{display:"flex",justifyContent:"space-between"},children:[u.jsxs(oe,{variant:"body2",color:"text.secondary",children:[h("payment.checkout.priceChange.change",{fallback:"Change"}),":"]}),u.jsxs(oe,{variant:"body2",fontWeight:"bold",color:s>0?"error.main":"success.main",children:[s>0?"+":"",s.toFixed(2),"%"]})]})]})}),u.jsx(oe,{variant:"body2",color:"text.secondary",children:h("payment.checkout.priceChange.confirm",{fallback:"Do you want to continue with the new price?"})})]})}),u.jsxs(o0,{sx:{px:3,pb:2},children:[u.jsx(pt,{onClick:m,disabled:c,variant:"outlined",color:"inherit",children:h("payment.checkout.priceChange.cancel",{fallback:"Cancel"})}),u.jsx(pt,{onClick:f,disabled:c,variant:"contained",color:"primary",autoFocus:!0,children:c?h("payment.checkout.priceChange.confirming",{fallback:"Confirming..."}):h("payment.checkout.priceChange.accept",{fallback:"Accept & Continue"})})]})]})}const L_=(a,r)=>`${a}-${r}-${Date.now()}-${Math.random().toString(36).substring(2,10)}`,I_=async a=>{let r;return await lD(async()=>{const{data:o}=await ot.get(`/api/checkout-sessions/retrieve/${a}`);if(o.paymentIntent&&o.paymentIntent.status==="requires_action"&&o.paymentIntent.last_payment_error)throw new Error(o.paymentIntent.last_payment_error.message);return r=o,o.checkoutSession?.status==="complete"&&["paid","no_payment_required"].includes(o.checkoutSession?.payment_status)},{interval:2e3,timeout:180*1e3}),r},$_=a=>(a?.connectedAccounts||a?.extraConfigs?.connectedAccounts||[]).some(o=>o.provider==="wallet"),cf=(a,r,o,s={})=>{const{preferExisting:f=!0,shouldValidate:m=!1}=s,c={customer_name:a.name||a.fullName,customer_email:a.email,customer_phone:Jf(a.phone)},h={"billing_address.state":a.address?.state||a.address?.province,"billing_address.line1":a.address?.line1,"billing_address.line2":a.address?.line2,"billing_address.city":a.address?.city,"billing_address.postal_code":a.address?.postal_code||a.address?.postalCode,"billing_address.country":a.address?.country||"us"};s.showPhone&&(h["billing_address.country"]=a.metadata?.phone?.country||a.address?.country);const g={...h,...c},y={...r,billing_address:{...r.billing_address}};return Object.entries(g).forEach(([S,x])=>{if(!f||!r[S.split(".")[0]])if(o(S,x,{shouldValidate:m}),S.startsWith("billing_address.")){const A=S.replace("billing_address.","");y.billing_address[A]=x}else y[S]=x}),y};function hD({checkoutSession:a,paymentMethods:r,paymentIntent:o,paymentLink:s,customer:f,onPaid:m,onError:c,onQuoteUpdated:h=void 0,onPaymentIntentUpdate:g=void 0,action:y,onlyShowBtn:S=!1,isDonation:x=!1,rateUnavailable:A=!1}){const{t:v,locale:N}=ft(),{isMobile:B}=qi(),{session:O,connect:k,payable:K,setPaymentState:j}=_n(),w=cu("events"),G="bottom",{control:T,getValues:R,setValue:q,handleSubmit:z,formState:{errors:$},trigger:re}=hs(),Q=V.useRef(null),Z=V.useRef(!1),ne=V.useRef(""),me=V.useRef(""),P=V.useMemo(()=>{let pe=!0;for(const ke of a.line_items)if(Df(ke.price,ke.quantity)){pe=!1;break}return pe},[a]),[D,F]=ni({submitting:!1,paying:!1,paid:!1,paymentIntent:o,stripeContext:void 0,customer:f,customerLimited:!1,serviceSuspended:!1,stripePaying:!1,fastCheckoutInfo:null,creditInsufficientInfo:null,showEditForm:!1,priceChangeConfirm:null}),ae=RS(r),be=Hf(window.location.href),Me=Fi(async({response:pe})=>{pe.id===a.id&&D.paid===!1&&await ve()});V.useEffect(()=>{w&&w.on("checkout.session.completed",Me)},[w]),V.useEffect(()=>{j({paying:D.submitting||D.paying,stripePaying:D.stripePaying})},[D.submitting,D.paying,D.stripePaying]);const Fe=(pe,ke)=>({...ke||{},name:pe?.name||pe?.fullName||ke?.name||ke?.fullName,fullName:pe?.name||pe?.fullName||ke?.name||ke?.fullName,email:pe?.email||ke?.email,phone:pe?.phone||ke?.phone,address:{...ke?.address||{},...pe?.address||{},country:pe?.address?.country||ke?.address?.country,state:pe?.address?.state||ke?.address?.province,line1:pe?.address?.line1||ke?.address?.line1,line2:pe?.address?.line2||ke?.address?.line2,city:pe?.address?.city||ke?.address?.city,postal_code:pe?.address?.postal_code||ke?.address?.postalCode},metadata:{...ke?.metadata||{},phone:{country:pe?.address?.country||ke?.metadata?.phone?.country,phoneNumber:pe?.phone||ke?.metadata?.phone?.phoneNumber}}});V.useEffect(()=>{const pe=async()=>{if(O?.user){const ke=R();let Re=O.user;try{const{data:it}=await ot.get("/api/customers/me?skipSummary=1&fallback=1");Re=Fe(it,Re)}catch(it){Re=Fe(f||{},Re),console.error(it)}const Je=cf(Re,ke,q,{preferExisting:!1,showPhone:a.phone_number_collection?.enabled}),tt=ee(Je);F({showEditForm:!tt})}else cf({name:"",email:"",phone:"",address:{state:"",line1:"",line2:"",city:"",postal_code:""}},{},q,{preferExisting:!1,showPhone:a.phone_number_collection?.enabled})};D.submitting||pe()},[O?.user,a.phone_number_collection?.enabled]);const Ae=ba({control:T,name:"payment_method"}),ue=ba({control:T,name:"payment_currency"}),$e=Fi(()=>{z(zt,Dn)()}),Pe=tu(a.line_items);let Xe="";s?.donation_settings?y?Xe=y:Xe=v("payment.checkout.donate"):Xe=v(`payment.checkout.${a.mode}`),Xe=O?.user||x?Xe:v("payment.checkout.connect",{action:Xe});const Ze=r.find(pe=>pe.id===Ae),Ue=ae.find(pe=>pe.id===ue),b=Ze.type==="arcblock"&&!a.subscription_data?.no_stake,L=V.useMemo(()=>(a.line_items||[]).some(pe=>{const ke=pe.upsell_price||pe.price;return ke&&ke?.pricing_type==="dynamic"}),[a.line_items])&&A,ie=K&&!L,W=a?.submit_type==="donate"&&x,[te,ce]=ni({open:!1,total:"",usd:null,hasQuotes:!1,baseCurrency:"USD",oldTotal:"",reason:"recalculated"}),J=Fi(pe=>{if(!pe)return null;const ke=Number(pe);return Number.isFinite(ke)?ke.toFixed(8):null}),H=Fi(pe=>{if(!pe?.line_items?.length)return null;for(const ke of pe.line_items){const Re=ke?.exchange_rate;if(Re)return Re}return null}),M=V.useRef(!1),U=V.useRef(""),se=Fi(pe=>pe?.line_items?.length?pe.line_items.map(ke=>{const Re=ke.price_id||ke.price?.id||"",Je=ke?.quote_id||"",tt=ke?.quoted_amount||"",it=ke?.exchange_rate||"";return`${Re}:${Je}:${tt}:${it}`}).join("|"):""),je=Fi(pe=>{if(!Ue)return{total:"",usd:null,hasQuotes:!1,baseCurrency:"USD",totalUnit:null};const ke=pe.line_items||[];let Re="USD";for(const ht of ke){const hn=(ht.upsell_price||ht.price)?.base_currency;if(hn){Re=hn;break}}const Je=ke.some(ht=>ht?.quoted_amount&&ht?.exchange_rate);if(!Je)return{total:"",usd:null,hasQuotes:!1,baseCurrency:Re,totalUnit:null};let tt=Number(pe?.subscription_data?.trial_period_days||0);const it=(pe?.subscription_data?.trial_currency||"").split(",").map(_0).filter(Boolean);it.length>0&&ue&&it.includes(ue)===!1&&(tt=0);const{total:Wn}=Hl(ke,Ue,tt>0),Xt=new ze(pe.total_details?.amount_discount||"0"),st=new ze(Wn).sub(Xt),Rt=st.isNeg()?new ze(0):st,Jn=`${Ja(qt(Rt.toString(),Ue.decimal),6)} ${Ue.symbol}`,Ii=ke.map(ht=>{const hn=(ht.upsell_price||ht.price)?.base_amount;if(hn!=null)return q0(hn,ht.quantity||0);const oi=ht?.exchange_rate,ja=ht?.quoted_amount;return!oi||!ja?null:If(new ze(ja),Ue.decimal,oi)}).filter(ht=>!!ht);if(!Ii.length)return{total:Jn,usd:null,hasQuotes:Je,baseCurrency:Re,totalUnit:Rt};const vr=Ii.reduce((ht,On)=>ht.add(new ze(Kn(On,8))),new ze(0)),co=qt(vr.toString(),8);return{total:Jn,usd:zi(co,N),hasQuotes:Je,baseCurrency:Re,totalUnit:Rt}}),_=Fi((pe,ke)=>{const Re=je(pe),Je=je(ke);if(!Re.totalUnit||!Je.totalUnit)return{changed:!1,prev:Re,next:Je};const tt=Je.totalUnit.sub(Re.totalUnit).abs(),it=new ze(1);return{changed:tt.gt(it),prev:Re,next:Je}}),I=Fi((pe,ke={})=>{if(!pe?.checkoutSession)return;h?.({checkoutSession:pe.checkoutSession,quotes:pe.quotes,rateUnavailable:pe.rateUnavailable,rateError:pe.rateError});const{changed:Re,prev:Je,next:tt}=_(a,pe.checkoutSession),it=J(H(a)),Wn=J(H(pe.checkoutSession)),Xt=!!(it&&Wn&&it!==Wn);if((ke.forceConfirm||Re)&&tt.hasQuotes){ce({open:!0,total:tt.total,usd:tt.usd,hasQuotes:tt.hasQuotes,baseCurrency:tt.baseCurrency,oldTotal:Je.total,reason:ke.reason||(Xt?"rateChanged":"recalculated")});return}ce({open:!1});const Rt=se(pe.checkoutSession);Rt&&Rt!==U.current&&(U.current=Rt,M.current=!0)}),ee=pe=>{if(!pe)return!1;const ke=a.metadata?.page_info?.field_validation,Re=pe.customer_name;if(!Re||Re.trim()==="")return!1;const Je=pe.customer_email;if(!Je||!Hg(Je))return!1;const tt=gn("customer_name",ke,N);if(tt.pattern&&!tt.pattern.value.test(Re))return!1;const it=gn("customer_email",ke,N);if(it.pattern&&!it.pattern.value.test(Je))return!1;const Wn=pe.billing_address||{},{postal_code:Xt,country:st,state:Rt,line1:Jn,city:Li}=Wn;if(!Xt||!Tf(Xt,st))return!1;const Ii=gn("billing_address.postal_code",ke,N);if(Ii.pattern&&!Ii.pattern.value.test(Xt)||!Rt)return!1;const vr=gn("billing_address.state",ke,N);if(vr.pattern&&!vr.pattern.value.test(Rt))return!1;if(a.phone_number_collection?.enabled){const ht=pe.customer_phone;if(!ht||ht.trim()==="")return!1;const On=gn("customer_phone",ke,N);if(On.pattern&&!On.pattern.value.test(ht))return!1}if(a.billing_address_collection==="required"){if(!st||!Rt||!Jn||!Li||!Xt)return!1;const ht=gn("billing_address.line1",ke,N);if(ht.pattern&&!ht.pattern.value.test(Jn))return!1;const On=gn("billing_address.city",ke,N);if(On.pattern&&!On.pattern.value.test(Li))return!1}return!0},Ee=ba({control:T,name:"customer_name"}),De=ba({control:T,name:"customer_email"}),Ce=ba({control:T,name:"customer_phone"}),Te=ba({control:T,name:"billing_address"}),Ye=O?.user?D.showEditForm:!1;V.useEffect(()=>{M.current&&(D.submitting||D.paying||(M.current=!1,an()))},[D.submitting,D.paying]);const ve=async()=>{if(!Z.current){Z.current=!0,F({paying:!0});try{const pe=await I_(a.id);D.paid===!1&&(F({paid:!0,paying:!1}),m(pe))}catch(pe){const ke=Pt(pe),Re={action:"payFailed",mode:a.mode,errorMessage:ke,success:!1};$x.event(Re.action,Re),rt.error(ke)}finally{F({paying:!1}),Z.current=!1}}};V.useEffect(()=>{Q.current&&!vd($)&&B&&Q.current.scrollIntoView({behavior:"smooth"})},[$,B]);const qe=async()=>{const{data:pe}=await ot.get("/api/customers/me?fallback=1&skipSummary=1");if(pe){const ke=R(),Re=Fe(pe,O?.user),Je=cf(Re,ke,q,{preferExisting:!1,showPhone:a.phone_number_collection?.enabled,shouldValidate:!0}),tt=ee(Je);F({showEditForm:!tt}),await re()}},Oe=async()=>{if(D.fastCheckoutInfo){F({fastCheckoutInfo:{...D.fastCheckoutInfo,loading:!0}});try{const pe=await ot.post(`/api/checkout-sessions/${a.id}/fast-checkout-confirm`,{});pe.data.paymentIntent&&g?.(pe.data.paymentIntent),pe.data.fastPaid?(F({fastCheckoutInfo:null,paying:!0}),await ve()):(rt.error(v("payment.checkout.fastPay.failed")),F({fastCheckoutInfo:null,paying:!0}),kt())}catch(pe){console.error(pe);const ke=pe?.response?.data?.code;if(["QUOTE_LOCK_EXPIRED","QUOTE_AMOUNT_MISMATCH","QUOTE_EXPIRED_OR_USED","QUOTE_NOT_FOUND","QUOTE_REQUIRED"].includes(ke)){try{const{data:Re}=await ot.get(`/api/checkout-sessions/retrieve/${a.id}`,{params:{forceRefresh:"1"}});Re?.checkoutSession&&(I(Re,{reason:"rateChanged"}),rt.info(v("payment.checkout.quote.updated.pleaseRetry")||"Price updated, please resubmit"))}catch(Re){console.error(Re),rt.error(Pt(Re))}finally{F({fastCheckoutInfo:null})}return}if(ke==="QUOTE_UPDATED"){const Re=pe?.response?.data;Re?.checkoutSession&&I(Re),F({fastCheckoutInfo:null});return}if(ke==="RATE_UNAVAILABLE"){const Re=pe?.response?.data;Re?.checkoutSession&&h?.({checkoutSession:Re.checkoutSession,quotes:Re.quotes,rateUnavailable:Re.rateUnavailable,rateError:Re.rateError}),F({fastCheckoutInfo:null});return}rt.error(Pt(pe)),F({fastCheckoutInfo:null})}}},Ve=()=>{F({fastCheckoutInfo:null})},Ge=()=>{F({creditInsufficientInfo:null})},Ke=()=>{ce({open:!1}),M.current=!0},et=()=>{ce({open:!1})},Lt=()=>{const pe=D.priceChangeConfirm?.formData;F({priceChangeConfirm:null}),pe&&zt(pe)},It=()=>{F({priceChangeConfirm:null})},kt=()=>{try{if(!["arcblock","ethereum","base"].includes(Ze.type))return;F({paying:!0}),k.open({locale:N,containerEl:void 0,action:a.mode,prefix:Dt(Qn(),"/api/did"),saveConnect:!1,useSocket:Lf()===!1,extraParams:{checkoutSessionId:a.id,sessionUserDid:O?.user?.did},onSuccess:async()=>{k.close(),await ve()},onClose:()=>{k.close(),F({submitting:!1,paying:!1})},onError:pe=>{console.error(pe),F({submitting:!1,paying:!1}),c(pe)},messages:{title:v("payment.checkout.connectModal.title",{action:Xe}),scan:v("payment.checkout.connectModal.scan"),confirm:v("payment.checkout.connectModal.confirm"),cancel:v("payment.checkout.connectModal.cancel")}})}catch(pe){rt.error(Pt(pe))}},zt=async pe=>{if(D.submitting)return;if(!O.user.sourceAppPid&&a.line_items?.some(Je=>!!Je?.price?.product?.vendor_config?.length)){rt.error(v("payment.checkout.vendor.accountRequired"));return}F({submitting:!0});try{let Re;const Je=a.line_items?.find(st=>st?.exchange_rate)?.exchange_rate||void 0,it=(a.line_items||[]).map(st=>`${st.upsell_price_id||st.price_id}:${st.quantity}`).join("|"),Wn=`${a.id}-${Ue?.id}-${it}`;(Wn!==me.current||!ne.current)&&(me.current=Wn,ne.current=L_(a.id,Ue?.id||""));const Xt={...pe,idempotency_key:ne.current,preview_rate:Je||void 0,price_confirmed:D.priceChangeConfirm?.formData?!0:void 0};if(W?Re=await ot.put(`/api/checkout-sessions/${a.id}/donate-submit`,Xt):Re=await ot.put(`/api/checkout-sessions/${a.id}/submit`,Xt),F({paymentIntent:Re.data.paymentIntent,stripeContext:Re.data.stripeContext,customer:Re.data.customer,submitting:!1,customerLimited:!1}),Re.data.paymentIntent&&g?.(Re.data.paymentIntent),["arcblock","ethereum","base"].includes(Ze.type)){if(Re.data.noPaymentRequired){try{const st=await ot.post(`/api/checkout-sessions/${a.id}/fast-checkout-confirm`,{});st.data.paymentIntent&&g?.(st.data.paymentIntent),st.data.fastPaid||st.data.checkoutSession?.status==="complete"?(F({paying:!0}),await ve()):kt()}catch(st){console.error("noPaymentRequired confirm failed",st),kt()}return}Ue?.type==="credit"?Re.data.creditSufficient===!0?F({fastCheckoutInfo:{open:!0,loading:!1,sourceType:"credit",amount:Re.data.fastPayInfo?.amount||"0",payer:Re.data.fastPayInfo?.payer,availableCredit:Re.data.fastPayInfo?.amount||"0",balance:Re.data.fastPayInfo?.token?.balance||"0"}}):F({creditInsufficientInfo:{open:!0}}):(Re.data.balance?.sufficient||Re.data.delegation?.sufficient)&&!W&&Re.data.fastPayInfo?F({fastCheckoutInfo:{open:!0,loading:!1,sourceType:Re.data.fastPayInfo.type,amount:Re.data.fastPayInfo.amount,payer:Re.data.fastPayInfo.payer}}):kt()}["stripe"].includes(Ze.type)&&(Re.data.stripeContext?.status==="succeeded"?F({paying:!0}):setTimeout(()=>{F({stripePaying:!0})},200))}catch(Re){console.error(Re);let Je=!0;const tt=Re.response?.data?.code;if(tt){if(["QUOTE_UPDATED","RATE_UNAVAILABLE","QUOTE_LOCK_EXPIRED","QUOTE_AMOUNT_MISMATCH","QUOTE_EXPIRED_OR_USED","QUOTE_NOT_FOUND","QUOTE_REQUIRED","QUOTE_MAX_PAYABLE_EXCEEDED"].includes(tt)||aD(`error.${tt}`),["QUOTE_LOCK_EXPIRED","QUOTE_AMOUNT_MISMATCH","QUOTE_EXPIRED_OR_USED","QUOTE_NOT_FOUND","QUOTE_REQUIRED","QUOTE_MAX_PAYABLE_EXCEEDED","quote_validation_failed"].includes(tt)){Je=!1;try{const{data:it}=await ot.get(`/api/checkout-sessions/retrieve/${a.id}`,{params:{forceRefresh:"1"}});it?.checkoutSession&&(I(it,{reason:"rateChanged"}),rt.info(v("payment.checkout.quote.updated.pleaseRetry")||"Price updated, please resubmit"))}catch(it){console.error(it),rt.error(Pt(it))}}if(tt==="QUOTE_UPDATED"){Je=!1;const it=Re.response?.data;it?.checkoutSession&&I(it)}if(tt==="RATE_UNAVAILABLE"){Je=!1;const it=Re.response?.data;it?.checkoutSession&&h?.({checkoutSession:it.checkoutSession,quotes:it.quotes,rateUnavailable:it.rateUnavailable,rateError:it.rateError})}if(tt==="PRICE_UNAVAILABLE"&&(Je=!1,rt.error(v("payment.checkout.priceChange.unavailable",{fallback:"Unable to fetch exchange rate. Please try again later."}))),tt==="PRICE_UNSTABLE"&&(Je=!1,rt.error(v("payment.checkout.priceChange.unstable",{fallback:"Price is volatile. Please try again later."}))),tt==="PRICE_CHANGED"){Je=!1;const it=Re.response?.data;F({priceChangeConfirm:{open:!0,changePercent:it?.change_percent||0,formData:pe}})}tt==="UNIFIED_APP_REQUIRED"&&(Je=!1,rt.error(v("payment.checkout.vendor.accountRequired"))),tt==="CUSTOMER_LIMITED"&&(Je=!1,F({customerLimited:!0})),tt==="STOP_ACCEPTING_ORDERS"&&(Je=!1,F({serviceSuspended:!0}))}Je&&rt.error(Pt(Re))}finally{F({submitting:!1})}},Dn=pe=>{pe&&console.error(pe),F({submitting:!1})},an=()=>{if(!(D.submitting||D.paying||!ie))if(Q.current&&!vd($)&&B&&Q.current.scrollIntoView({behavior:"smooth"}),O?.user)z(zt,Dn)();else{if(W){z(zt,Dn)();return}O?.login(()=>{F({submitting:!0}),qe().then($e).catch(pe=>{console.error(pe),F({submitting:!1})})})}},An=async()=>{F({stripePaying:!1,paying:!0}),await ve()},Sa=async()=>{try{await ot.post(`/api/checkout-sessions/${a.id}/abort-stripe`)}catch(pe){console.error(pe),rt.error(Pt(pe))}finally{F({stripePaying:!1})}};V.useEffect(()=>{const pe=ke=>{ke.key==="Enter"&&!D.submitting&&!D.paying&&!D.stripePaying&&P&&ie&&an()};return window.addEventListener("keydown",pe),()=>{window.removeEventListener("keydown",pe)}},[D.submitting,D.paying,D.stripePaying,P,ie]);const fa=BS(Ze,D.fastCheckoutInfo?.payer||""),Xn=D.fastCheckoutInfo&&u.jsx(Ul,{onConfirm:Oe,onCancel:Ve,title:D.fastCheckoutInfo.sourceType==="credit"?v("payment.checkout.fastPay.credit.title"):v("payment.checkout.fastPay.title"),message:D.fastCheckoutInfo.sourceType==="credit"?u.jsx(oe,{children:v("payment.checkout.fastPay.credit.meteringSubscriptionMessage",{available:`${Ca(D.fastCheckoutInfo?.balance||"0",Ue?.decimal||18)} ${Ue?.symbol}`})}):u.jsxs(ge,{children:[u.jsx(oe,{children:v("payment.checkout.fastPay.autoPaymentReason")}),u.jsx(ti,{sx:{mt:1.5,mb:1.5}}),u.jsxs(ge,{spacing:1,children:[u.jsxs(ge,{sx:{flexDirection:"row",alignItems:"center",justifyContent:"space-between"},children:[u.jsx(oe,{sx:{color:"text.primary",whiteSpace:"nowrap"},children:v("payment.checkout.fastPay.payer")}),u.jsxs(Se,{sx:{display:"flex",alignItems:"center",gap:.5},children:[u.jsx(A0,{did:D.fastCheckoutInfo.payer||"",compact:!0,responsive:!1}),fa&&u.jsx(Un,{title:v("payment.checkout.fastPay.balanceLink"),placement:"top",children:u.jsx(Ol,{sx:{color:"text.lighter",fontSize:"0.85rem",cursor:"pointer","&:hover":{color:"text.primary"}},onClick:()=>{window.open(fa,"_blank")}})})]})]}),u.jsxs(ge,{sx:{flexDirection:"row",alignItems:"center",justifyContent:"space-between"},children:[u.jsx(oe,{sx:{color:"text.primary"},children:v("payment.checkout.fastPay.amount")}),u.jsxs(oe,{children:[Ca(D.fastCheckoutInfo.amount,Ue?.decimal||18)," ",Ue?.symbol]})]})]})]}),loading:D.fastCheckoutInfo.loading,color:"primary"}),Fa=D.creditInsufficientInfo&&u.jsx(Ul,{onConfirm:Ge,onCancel:Ge,title:v("payment.checkout.fastPay.credit.insufficientTitle"),message:u.jsx(oe,{children:v("payment.checkout.fastPay.credit.insufficientMessage")}),confirm:v("common.confirm")}),_a=te.open&&u.jsx(Ul,{onConfirm:Ke,onCancel:et,title:v("payment.checkout.quote.priceUpdatedTitle"),message:u.jsxs(ge,{spacing:1,children:[u.jsx(oe,{children:v(te.reason==="rateChanged"?"payment.checkout.quote.priceUpdatedDescriptionRate":"payment.checkout.quote.priceUpdatedDescriptionRecalc")}),te.hasQuotes&&u.jsxs(ge,{spacing:.25,children:[u.jsx(oe,{sx:{color:"text.secondary",fontSize:"0.7875rem"},children:v("payment.checkout.quote.priceUpdatedNewTotalLabel")}),u.jsx(oe,{sx:{fontWeight:600},children:te.total}),te.usd&&u.jsxs(oe,{sx:{color:"text.secondary"},children:["≈ ",te.usd," ",te.baseCurrency]}),te.oldTotal&&u.jsx(oe,{sx:{color:"text.secondary",fontSize:"0.75rem"},children:v("payment.checkout.quote.priceUpdatedOldTotal",{total:te.oldTotal})})]})]}),confirm:v("payment.checkout.quote.priceUpdatedConfirm"),cancel:v("common.cancel"),color:"primary"}),Dr=()=>{if(be.redirect)return decodeURIComponent(be.redirect);if(a.success_url)return a.success_url;if(s?.after_completion?.redirect?.url)return s.after_completion.redirect.url};return S?u.jsxs(u.Fragment,{children:[u.jsx(Se,{className:"cko-payment-submit-btn",children:u.jsxs(pt,{variant:"contained",color:"primary",size:"large",className:"cko-submit-button",onClick:()=>{D.submitting||D.paying||!ie||an()},fullWidth:!0,disabled:D.stripePaying||!P||!ie,children:[(D.submitting||D.paying)&&u.jsx(gr,{size:16,sx:{mr:.5,color:"primary.contrastText"}}),D.submitting||D.paying?v("payment.checkout.processing"):Xe]})}),D.customerLimited&&u.jsx(Gg,{customerId:f?.id||O?.user?.did,onPaid:()=>{F({customerLimited:!1}),an()},alertMessage:v("payment.customer.pastDue.alert.customMessage"),detailLinkOptions:{enabled:!0,onClick:()=>{F({customerLimited:!1}),window.open(Dt(Qn(),`/customer/invoice/past-due?referer=${encodeURIComponent(window.location.href)}`),"_self")}},dialogProps:{open:D.customerLimited,onClose:()=>F({customerLimited:!1}),title:v("payment.customer.pastDue.alert.title")}}),D.serviceSuspended&&u.jsx(Kg,{open:!0,onClose:()=>F({serviceSuspended:!1})}),Xn,Fa,_a,D.priceChangeConfirm?.open&&u.jsx(Qg,{open:!0,changePercent:D.priceChangeConfirm.changePercent,onConfirm:Lt,onCancel:It,loading:D.submitting})]}):u.jsxs(u.Fragment,{children:[u.jsx(Gn,{in:!0,children:u.jsxs(ge,{className:"cko-payment-contact",children:[u.jsx(oe,{title:v("payment.checkout.paymentDetails"),sx:{color:"text.primary",fontSize:{xs:"18px",md:"24px"},fontWeight:"700",lineHeight:"32px",mb:2.5},children:v("payment.checkout.paymentDetails")}),u.jsx(Gn,{in:!0,children:u.jsxs(ge,{direction:"column",className:"cko-payment-methods",sx:{alignItems:"flex-start"},children:[u.jsx(ge,{direction:"row",sx:{width:"100%"},children:u.jsx(Yl,{name:"payment_currency",control:T,render:({field:pe})=>u.jsx(N_,{value:pe.value,currencies:ae,onChange:async(ke,Re)=>{const Je=pe.value;if(pe.onChange(ke),q("payment_method",Re),P_(ke,O?.user?.did),Je&&Je!==ke)try{const{data:tt}=await ot.put(`/api/checkout-sessions/${a.id}/switch-currency`,{currency_id:ke,payment_method_id:Re});tt.currency_changed&&h&&h({checkoutSession:tt,quotes:tt.quotes})}catch(tt){console.error("Failed to switch currency:",tt)}}})})}),D.stripePaying&&D.stripeContext&&u.jsx(fD,{clientSecret:D.stripeContext.client_secret,intentType:D.stripeContext.intent_type,publicKey:Ze.settings.stripe?.publishable_key,customer:D.customer,mode:a.mode,onConfirm:An,onCancel:Sa,returnUrl:Dr()})]})}),!Ye&&O?.user&&u.jsxs(ge,{spacing:1.25,sx:{mt:2,p:2,pt:1,backgroundColor:"background.paper",borderRadius:1,border:"1px solid",borderColor:"divider"},children:[u.jsxs(ge,{direction:"row",justifyContent:"space-between",alignItems:"center",sx:{mb:.25},children:[u.jsx(oe,{variant:"subtitle2",sx:{color:"text.primary",fontSize:"0.875rem"},children:v("payment.checkout.customerInfo")}),u.jsx(pt,{size:"small",variant:"text",onClick:()=>F({showEditForm:!0}),sx:{minWidth:0},children:v("common.edit")})]}),u.jsxs(ge,{spacing:.5,children:[u.jsx(oe,{variant:"body2",sx:{color:"text.primary",fontWeight:600,fontSize:"0.9375rem"},children:Ee}),u.jsx(oe,{variant:"body2",sx:{color:"text.secondary",fontSize:"0.8125rem"},children:De}),a.phone_number_collection?.enabled&&Ce&&u.jsx(oe,{variant:"body2",sx:{color:"text.secondary",fontSize:"0.8125rem"},children:Ce}),Te&&u.jsxs(ge,{direction:"row",alignItems:"center",spacing:.75,children:[Te.country&&u.jsx(Nl,{iso2:Te.country.toLowerCase(),style:{width:18,height:14}}),u.jsxs(oe,{variant:"body2",sx:{color:"text.secondary",fontSize:"0.8125rem"},children:[a.billing_address_collection==="required"?[Te.line1,Te.city,Te.state].filter(Boolean).join(", "):Te.state||"",Te.postal_code&&` [ ${v("payment.checkout.billing.postal_code")}: ${Te.postal_code} ]`]})]})]})]}),Ye&&u.jsxs(ge,{direction:"column",className:"cko-payment-form",id:"cko-payment-form",spacing:0,ref:vd($)?void 0:Q,sx:{flex:1,overflow:"auto",py:1},children:[u.jsx(Nn,{className:"base-label",children:v("payment.checkout.customer.name")}),u.jsx(Xa,{name:"customer_name",variant:"outlined",errorPosition:G,rules:{required:v("payment.checkout.required"),...gn("customer_name",a.metadata?.page_info?.field_validation,N)}}),u.jsx(Nn,{className:"base-label",children:v("payment.checkout.customer.email")}),u.jsx(Xa,{name:"customer_email",variant:"outlined",errorPosition:G,rules:{required:v("payment.checkout.required"),validate:pe=>Hg(pe)?!0:v("payment.checkout.invalid"),...gn("customer_email",a.metadata?.page_info?.field_validation,N)}}),a.phone_number_collection?.enabled&&u.jsxs(u.Fragment,{children:[u.jsx(Nn,{className:"base-label",children:v("payment.checkout.customer.phone")}),u.jsx(O_,{name:"customer_phone",variant:"outlined",errorPosition:G,placeholder:"Phone number",rules:{required:v("payment.checkout.required"),validate:async pe=>await U_(pe)?!0:v("payment.checkout.invalid"),...gn("customer_phone",a.metadata?.page_info?.field_validation,N)}})]}),u.jsx(M_,{mode:a.billing_address_collection,sx:{marginTop:"0 !important"},fieldValidation:a.metadata?.page_info?.field_validation,errorPosition:G})]})]})}),u.jsx(ti,{sx:{mt:2.5,mb:2.5}}),u.jsx(Gn,{in:!0,children:u.jsxs(ge,{className:"cko-payment-submit",children:[u.jsx(Se,{className:"cko-payment-submit-btn",children:u.jsx(hr,{variant:"contained",color:"primary",size:"large",className:"cko-submit-button",onClick:()=>{an()},fullWidth:!0,loading:D.submitting||D.paying,disabled:D.stripePaying||!P||!ie,children:D.submitting||D.paying?v("payment.checkout.processing"):Xe})}),["subscription","setup"].includes(a.mode)&&u.jsx(oe,{sx:{mt:2.5,color:"text.lighter",fontSize:"0.7875rem",lineHeight:"0.9625rem"},children:b?v("payment.checkout.confirm.withStake",{payee:Pe}):v("payment.checkout.confirm.withoutStake",{payee:Pe})}),a.metadata?.page_info?.form_purpose_description&&u.jsxs(Se,{sx:{mt:1,display:"flex",alignItems:"center",gap:.5},children:[u.jsx(hf,{sx:{color:"text.lighter",fontSize:"0.75rem"}}),u.jsx(oe,{variant:"body2",sx:{fontSize:"0.75rem",color:"text.lighter"},children:N==="zh"?a.metadata.page_info.form_purpose_description.zh:a.metadata.page_info.form_purpose_description.en})]})]})}),D.customerLimited&&u.jsx(Gg,{customerId:f?.id||O?.user?.did,onPaid:()=>{F({customerLimited:!1}),an()},alertMessage:v("payment.customer.pastDue.alert.customMessage"),detailLinkOptions:{enabled:!0,onClick:()=>{F({customerLimited:!1}),window.open(Dt(Qn(),`/customer/invoice/past-due?referer=${encodeURIComponent(window.location.href)}`),"_self")}},dialogProps:{open:D.customerLimited,onClose:()=>F({customerLimited:!1}),title:v("payment.customer.pastDue.alert.title")}}),D.serviceSuspended&&u.jsx(Kg,{open:!0,onClose:()=>F({serviceSuspended:!1})}),Xn,Fa,_a,D.priceChangeConfirm?.open&&u.jsx(Qg,{open:!0,changePercent:D.priceChangeConfirm.changePercent,onConfirm:Lt,onCancel:It,loading:D.submitting})]})}function V_(){return u.jsx(Gn,{in:!0,children:u.jsxs(ge,{direction:"column",children:[u.jsx(ge,{direction:"row",spacing:2,sx:{alignItems:"center"},children:u.jsx(Ot,{variant:"text",sx:{fontSize:"1.75rem",width:"40%"}})}),u.jsx(Ot,{sx:{mt:2},variant:"rounded",height:100}),u.jsx(oe,{component:"div",variant:"h4",sx:{mt:2},children:u.jsx(Ot,{})}),u.jsx(oe,{component:"div",variant:"h2",children:u.jsx(Ot,{})})]})})}function H_(){return u.jsx(Gn,{in:!0,children:u.jsxs(ge,{direction:"column",children:[u.jsx(Ot,{variant:"text",sx:{fontSize:"1.75rem",width:"40%"}}),u.jsx(Ot,{sx:{mt:2},variant:"rounded",height:68}),u.jsxs(Se,{sx:{mt:1},children:[u.jsx(oe,{component:"div",variant:"h4",sx:{mb:-1},children:u.jsx(Ot,{})}),u.jsx(oe,{component:"div",children:u.jsx(Ot,{height:60})})]}),u.jsxs(Se,{children:[u.jsx(oe,{component:"div",variant:"h4",sx:{mb:-1},children:u.jsx(Ot,{})}),u.jsx(oe,{component:"div",children:u.jsx(Ot,{height:60})})]}),u.jsx(Se,{children:u.jsx(Ot,{height:60})})]})})}function yD(){return u.jsxs(Se,{sx:{mb:2},children:[u.jsxs(Se,{sx:{display:"flex",justifyContent:"space-between",alignItems:"center",mb:1},children:[u.jsx(Ot,{variant:"rounded",height:16,width:150}),u.jsx(Ot,{variant:"rounded",height:16,width:50})]}),u.jsx(Ot,{variant:"rounded",height:8,width:"100%"})]})}const Y_=(a,r,o)=>{const s=a.name||a.title,f=a.status==="delivered";return a.vendorType==="didnames"?r?o("payment.checkout.vendor.didnames.failed",{name:s}):f?o("payment.checkout.vendor.didnames.completed",{name:s}):o("payment.checkout.vendor.didnames.processing",{name:s}):r?o("payment.checkout.vendor.launcher.failed",{name:s}):f?o("payment.checkout.vendor.launcher.completed",{name:s}):o("payment.checkout.vendor.launcher.processing",{name:s})};function G_({vendor:a}){const{t:r}=ft(),[o,s]=V.useState(0),f=V.useRef(),m=V.useCallback(()=>{const y=a.progress||0;let S,x;const A=v=>{S||(S=v,x=o);const N=v-S;let B;if(y===100)B=100;else if(y===0)B=Math.min(x+N/1e3,99);else if(y>x){const k=Math.min(N/1e3,1);B=x+(y-x)*k}else B=Math.min(x+N/1e3,99);B=Math.round(B),s(O=>Math.min(O>B?O:B,100)),y!==100&&B<99&&y<100&&(f.current=requestAnimationFrame(A))};f.current&&cancelAnimationFrame(f.current),f.current=requestAnimationFrame(A)},[a.progress,o]);V.useEffect(()=>(m(),()=>{f.current&&cancelAnimationFrame(f.current)}),[m]);const c=o>=100,h=a.status==="failed",g=Y_(a,h,r);return h?u.jsxs(Se,{sx:{mb:2},children:[u.jsxs(Se,{sx:{display:"flex",justifyContent:"space-between",alignItems:"center",mb:1},children:[u.jsx(oe,{variant:"body2",sx:{color:"text.secondary"},children:g}),u.jsx(oe,{variant:"body2",sx:{color:"error.main",fontWeight:500},children:r("payment.checkout.vendor.progress",{progress:0})})]}),u.jsx(zl,{variant:"determinate",value:100,sx:{height:8,borderRadius:4,backgroundColor:"grey.200","& .MuiLinearProgress-bar":{borderRadius:4,backgroundColor:"error.main"}}})]}):!a.name&&!a.title?u.jsx(yD,{}):u.jsxs(Se,{sx:{mb:2},children:[u.jsxs(Se,{sx:{display:"flex",justifyContent:"space-between",alignItems:"center",mb:1},children:[u.jsxs(oe,{variant:"body2",sx:{color:"text.secondary",display:"flex",alignItems:"center"},children:[g," ",c?u.jsx(s0,{sx:{color:"success.main",ml:.5},fontSize:"small"}):null]}),c?null:u.jsx(oe,{variant:"body2",sx:{color:"text.secondary",fontWeight:500},children:r("payment.checkout.vendor.progress",{progress:o})})]}),u.jsx(zl,{variant:"determinate",value:o||0,sx:{height:8,borderRadius:4,backgroundColor:"grey.200","& .MuiLinearProgress-bar":{borderRadius:4,backgroundColor:c?"success.main":"primary.main",transition:"background-color 0.3s linear"}}})]})}function gD({mode:a,pageInfo:r={},vendorCount:o=0,sessionId:s="",message:f,action:m,payee:c,invoiceId:h="",subscriptionId:g="",subscriptions:y=[]}){const{t:S,locale:x}=ft(),{prefix:A,api:v}=_n(),[N,B]=V.useState(null),[O,k]=V.useState(!1),[K,j]=V.useState(!1),w=V.useRef(Date.now()),T=S0()?.arcSphere;let R=null;V.useEffect(()=>{if(o===0||!s)return;const re=async Z=>{try{const ne=await v.get(Dt(A,`/api/vendors/order/${s}/status`),{}),me=Date.now()-w.current>6*1e3,P=ne.data?.vendors?.every(F=>F.progress>=100),D=ne.data?.vendors?.some(F=>F.status==="failed"||me&&!!F.error&&!!F.error_message);(D||P)&&clearInterval(Z),j(D),k(!D&&P),B(ne.data)}catch(ne){console.error("Failed to fetch vendor status:",ne)}};re();const Q=setInterval(()=>{re(Q)},5e3);return()=>clearInterval(Q)},[o,v,A,s]),V.useEffect(()=>{if(T&&O)try{Ky?.call?.("arc__toast",{text:S("payment.checkout.vendor.arcSphereToast")});const re=setTimeout(()=>{Ky?.call?.("arcClosePage")},3e3);return()=>clearTimeout(re)}catch{}},[O,S,x,T]);const q=()=>{const re=[];for(let Q=0;Q<o;Q++)re.push(u.jsx(yD,{},`placeholder-${Q}`));return re},z=()=>N?N.vendors?.map((re,Q)=>u.jsx(G_,{vendor:re},re.title||`vendor-${Q}`)):q(),$=()=>o===0?null:u.jsxs(Yy,{elevation:0,sx:{p:3,backgroundColor:"grey.50",borderRadius:2,width:"100%",mt:2,display:"flex",flexDirection:"column",gap:2},children:[z(),K?u.jsx(oe,{variant:"h6",sx:{color:"warning.main",mb:1},children:S("payment.checkout.vendor.failedMsg")}):null,r?.success_message?.[x]&&O?u.jsx(oe,{variant:"h6",sx:{color:"text.primary",mb:1},children:r?.success_message?.[x]}):null]});return["subscription","setup"].includes(m)?y&&y.length>1?R=u.jsx(Yy,{elevation:0,sx:{p:3,backgroundColor:"grey.50",borderRadius:2,width:"100%",mt:2,display:"flex",flexDirection:"column",gap:2},children:y.map(re=>u.jsxs(Se,{sx:{display:"flex",alignItems:"center",justifyContent:"space-between"},children:[u.jsx(oe,{variant:"body2",sx:{color:"text.secondary",fontWeight:500},children:re.description}),u.jsx(Se,{sx:{flex:1,borderBottom:"1px dashed",borderColor:"grey.300",mx:2}}),u.jsx(Qy,{variant:"text",color:"primary",size:"small",children:u.jsx(cr,{href:Dt(A,`/customer/subscription/${re.id}`),sx:{color:"text.secondary"},children:S("payment.checkout.next.view")})})]},re.id))}):g&&(R=u.jsx(Qy,{variant:"outlined",color:"primary",sx:{mt:2},children:u.jsx(cr,{href:Dt(A,`/customer/subscription/${g}`),children:S("payment.checkout.next.subscription",{payee:c})})})):h&&(R=u.jsx(oe,{sx:{textAlign:"center",mt:2},children:u.jsx(cr,{href:Dt(A,`/customer/invoice/${h}`),children:S("payment.checkout.next.invoice",{payee:c})})})),u.jsx(u0,{in:!0,children:u.jsxs(ge,{direction:"column",sx:{alignItems:"center",justifyContent:a==="standalone"?"center":"flex-start",height:a==="standalone"?"fit-content":300},children:[u.jsx(K_,{children:u.jsxs("div",{className:"check-icon",children:[u.jsx("span",{className:"icon-line line-tip"}),u.jsx("span",{className:"icon-line line-long"}),u.jsx("div",{className:"icon-circle"}),u.jsx("div",{className:"icon-fix"})]})}),u.jsx(oe,{variant:"h5",sx:{color:"text.primary",mb:3},children:f}),u.jsx(oe,{variant:"body1",sx:{color:"text.secondary",textAlign:"center",fontSize:"14px"},children:S("payment.checkout.completed.tip",{payee:c})}),$(),R]})})}const K_=l0("div")`
|
|
44
|
+
`;let lf=null;const dD=async()=>{if(!lf){const a=await Ht(()=>import("./libphonenumber-CTvobi0D.js").then(o=>o.l),[]),r=(a.default||a)?.PhoneNumberUtil;if(!r)throw new Error("PhoneNumberUtil not found");lf=r.getInstance()}return lf},U_=async a=>{if(!a)return!0;try{let r=null;try{r=await dD()}catch{return/^[+]?[(]?[0-9]{3}[)]?[-\s.]?[0-9]{3}[-\s.]?[0-9]{4,6}$/im.test(a)}const o=r.parseAndKeepRawInput(a);return r.isValidNumber(o)}catch(r){return console.error("Phone validation error:",r),!1}},Jf=(a,r="US")=>{if(!a||a.trim()==="")return"";const o=a.replace(/[^\d+]/g,"");if(o.startsWith("+"))return o;const s={US:"1",CA:"1",CN:"86",HK:"852",IN:"91",UK:"44",GB:"44",JP:"81",KR:"82",AU:"61",DE:"49",FR:"33",IT:"39",ES:"34",BR:"55",RU:"7",MX:"52",SG:"65",AE:"971"},f=[[/^1[3-9]\d{9}$/,"86"],[/^\d{10}$/,"1"],[/^[6-9]\d{9}$/,"91"],[/^0[1-9]\d{8,9}$/,"81"],[/^07\d{9}$/,"44"],[/^04\d{8}$/,"61"],[/^01[0-9]\d{7,8}$/,"82"],[/^[0-9]\d{8}$/,"86"]];let m=o;m.startsWith("0")&&(m=m.substring(1));for(const[h,g]of f)if(h.test(o))return o.startsWith("0")&&!["1","86"].includes(g)?`+${g}${o.substring(1)}`:`+${g}${o}`;return`+${s[r.toUpperCase()]||r}${m}`};function O_({...a}){const r=a.countryFieldName||"billing_address.country",{control:o,getValues:s,setValue:f,trigger:m}=hs(),c=s(),h=V.useRef(!1),g=V.useCallback(k=>{if(!h.current)try{h.current=!0,k()}finally{requestAnimationFrame(()=>{h.current=!1})}},[]),{phone:y,handlePhoneValueChange:S,inputRef:x,country:A,setCountry:v}=J1({defaultCountry:Vf(c[r])?c[r]:"us",value:c[a.name]||"",countries:Bi,onChange:k=>{g(()=>{f(a.name,k.phone),f(r,k.country)})}}),N=ba({control:o,name:r});V.useEffect(()=>{!N||N===A||g(()=>{v(N)})},[N,A,v,g]),b0(()=>{dD().catch(k=>{console.error("Failed to preload phone validator:",k)})});const B=V.useCallback(k=>{g(()=>{v(k)})},[v,g]),O=V.useCallback(()=>{m(a.name)},[a.name]);return u.jsx(Xa,{value:y,onChange:S,type:"tel",inputRef:x,onBlur:O,InputProps:{startAdornment:u.jsx(ls,{position:"start",style:{marginRight:"2px",marginLeft:"-8px"},children:u.jsx(wf,{value:A,onChange:B,name:r,sx:{"&.MuiOutlinedInput-notchedOutline":{borderColor:"transparent !important"}},showDialCode:!0})})},...D0(a,["countryFieldName"])})}function z_(a,r={}){let o=null;const{LoadingComponent:s=()=>u.jsx(x0,{children:u.jsx(gr,{})}),ErrorComponent:f=({error:c})=>u.jsxs("div",{children:["Error: ",c.message]})}=r,m=async()=>{if(o)return o;try{return o=a().then(c=>"default"in c?c.default:c),await o}catch(c){throw o=null,c}};return function(h){const[g,y]=V.useState(null),[S,x]=V.useState(null);return V.useEffect(()=>{m().then(A=>{y(()=>A)}).catch(A=>{x(A),console.error("Failed to load component:",A)})},[]),S?u.jsx(f,{error:S}):g?u.jsx(g,{...h}):u.jsx(s,{})}}const fD=z_(async()=>{const[a,r]=await Promise.all([Ht(()=>import("./react-stripe.esm-BZIKAsrR.js"),[]),Ht(()=>import("./stripe.esm-BCCu7gPj.js"),[])]);window.__STRIPE_COMPONENTS__={Elements:a.Elements,PaymentElement:a.PaymentElement,useElements:a.useElements,useStripe:a.useStripe,loadStripe:r.loadStripe,LinkAuthenticationElement:a.LinkAuthenticationElement};const{default:o}=await Ht(async()=>{const{default:s}=await import("./form-Cuvruf4H.js");return{default:s}},[]);return o});function hr({ref:a=void 0,children:r,loading:o=!1,loadingPosition:s="start",loadingIndicator:f=void 0,loadingProps:m={},loadingOnly:c=!1,onClick:h,sx:g,...y}){const S=N=>{o||h?.(N)},x=N=>({color:"inherit",...N==="start"&&{mr:1},...N==="end"&&{ml:1},...N==="center"&&{position:"absolute",left:"50%",transform:"translateY(-50%) translateX(-50%)",top:"50%"},display:"inline-flex",alignItems:"center"}),A=u.jsx(gr,{size:16,...m,sx:{color:"inherit",...m?.sx||{}}}),v=u.jsx(oe,{sx:x(s),children:f||A});return u.jsxs(pt,{ref:a,disabled:y.disabled||o,onClick:S,sx:{position:"relative",display:"inline-flex",alignItems:"center",justifyContent:"center",...g},...y,children:[o&&s==="start"&&v,u.jsx(oe,{sx:{visibility:o&&c?"hidden":"visible"},children:r}),o&&s==="center"&&v,o&&s==="end"&&v]})}hr.displayName="LoadingButton";function em(a){const{invoice:r,invoiceIds:o,subscriptionId:s,customerId:f,currencyId:m,paymentMethod:c,autoTrigger:h=!1,onExternalPayment:g,onSuccess:y,onError:S,onClose:x,children:A}=a,{t:v}=ft(),[N,B]=ni({paying:!1,confirmDialog:!1,stripeDialog:!1,clientSecret:null,publishableKey:null,customer:null}),O=V.useRef(!1);V.useEffect(()=>{h&&!O.current&&(O.current=!0,k())},[h]);const k=async()=>{if(N.paying)return;const T=!!(s||r?.subscription_id),R=c||r?.paymentMethod;if(T&&R?.type==="stripe"){B({confirmDialog:!0});return}await K()},K=async()=>{B({paying:!0,confirmDialog:!1});const T=m||r?.currency_id||r?.paymentCurrency?.id;if((c||r?.paymentMethod)?.type==="stripe"&&T){const z={};o&&o.length>0?z.invoice_ids=o:r?z.invoice_ids=[r.id]:s?z.subscription_id=s:f&&(z.customer_id=f),T&&(z.currency_id=T);try{const{data:$}=await ot.post("/api/invoices/pay-stripe",z);B({paying:!1,stripeDialog:!0,clientSecret:$.client_secret,publishableKey:$.publishable_key,customer:$.customer||null});return}catch($){const re=Pt($);rt.error(re),B({paying:!1}),S?.(re);return}}if(B({paying:!1}),g){g(r?.id);return}rt.error(v("payment.customer.invoice.payError")),S?.(new Error("EXTERNAL_PAYMENT_HANDLER_NOT_PROVIDED"))},j=()=>{B({confirmDialog:!1,paying:!1}),x?.()},w=()=>{rt.success(v("payment.customer.invoice.payProcessing")),B({paying:!1,stripeDialog:!1,clientSecret:null,publishableKey:null,customer:null}),setTimeout(()=>{y?.()},2e3)},G=()=>{B({paying:!1,stripeDialog:!1,clientSecret:null,publishableKey:null,customer:null}),x?.()};return u.jsxs(u.Fragment,{children:[A?.(k,N.paying),N.confirmDialog&&u.jsx(C0,{open:N.confirmDialog,title:v("payment.customer.invoice.paymentConfirmTitle"),onClose:j,maxWidth:"sm",PaperProps:{style:{minHeight:0}},actions:[u.jsx(pt,{variant:"outlined",onClick:j,children:v("common.cancel")},"cancel"),u.jsx(pt,{variant:"contained",onClick:K,children:v("payment.customer.invoice.continue")},"continue")],children:u.jsx(oe,{variant:"body1",sx:{color:"text.secondary",mt:-2},children:v("payment.customer.invoice.paymentConfirmDescription")})}),N.stripeDialog&&N.clientSecret&&N.publishableKey&&N.customer&&u.jsx(fD,{clientSecret:N.clientSecret,intentType:"setup_intent",publicKey:N.publishableKey,customer:N.customer,mode:"setup",title:v("payment.customer.invoice.pay"),submitButtonText:v("common.submit"),onConfirm:w,onCancel:G,returnUrl:window.location.href})]})}const uf=async a=>{if(!a.subscriptionId&&!a.customerId)throw new Error("Either subscriptionId or customerId must be provided");let r;return a.subscriptionId?r=`/api/subscriptions/${a.subscriptionId}/overdue/invoices`:r=`/api/customers/${a.customerId}/overdue/invoices`,(await ot.get(a.authToken?Dt(r,`?authToken=${a.authToken}`):r)).data};function Gg({subscriptionId:a=void 0,customerId:r=void 0,mode:o="default",dialogProps:s={open:!0},children:f=void 0,onPaid:m=()=>{},detailLinkOptions:c={enabled:!0},successToast:h=!0,alertMessage:g="",authToken:y=void 0}){const{t:S,locale:x}=ft(),v=S0()?.arcSphere,N=cs(),{connect:B,session:O}=_n(),[k,K]=V.useState(""),[j,w]=V.useState(!1),[G,T]=V.useState(s.open||!1),[R,q]=V.useState({}),[z,$]=V.useState({}),[re,Q]=V.useState({}),Z=V.useRef(re),ne=a?"subscription":"customer",me=r||O?.user?.did,P=a||me,D=V.useRef(me);V.useEffect(()=>{Z.current=re},[re]);const{data:F={summary:{},invoices:[]},error:ae,loading:be,runAsync:Me}=Pi(()=>uf({subscriptionId:a,customerId:me,authToken:y}),{ready:!!a||!!me,onSuccess:H=>{H.customer?.id&&H.customer?.id!==D.current&&(D.current=H.customer?.id)}}),Fe=V.useMemo(()=>a?Dt(Qn(),`/customer/subscription/${a}`):me?Dt(Qn(),"/customer/invoice/past-due"):"",[a,me]),Ae=V.useMemo(()=>F?.summary?Object.values(F.summary):[],[F?.summary]),ue=async H=>{if(Z.current[H])try{if((await uf({subscriptionId:a,customerId:me,authToken:y})).invoices?.some(je=>je.currency_id===H))return;Q(je=>{const _={...je};return delete _[H],_}),$(je=>({...je,[H]:"success"}))}catch(U){console.error("Error checking Stripe payment completion:",U);return}h&&(rt.close(),rt.success(S("payment.customer.invoice.paySuccess"))),w(!1),(await Me()).invoices?.length===0&&(T(!1),m(P,H,ne))},$e=Bf(H=>ue(H),1e3,{leading:!1,trailing:!0,maxWait:5e3}),Pe=Lf(),Xe=cu("events"),Ze=async H=>{let M=!1;return await lD(async()=>(M=!(await uf({subscriptionId:a,customerId:me,authToken:y})).invoices?.some(je=>je.currency_id===H),M),{interval:2e3,timeout:180*1e3}),M},Ue=async(H,M=!1)=>{if(Pe||v)try{if(await Ze(H)){$(je=>({...je,[H]:"success"}));const se=await Me();h&&(rt.close(),rt.success(S("payment.customer.invoice.paySuccess"))),se.invoices?.length===0&&(T(!1),m(P,H,ne))}}catch(U){console.error("Check payment status failed:",U),$(se=>({...se,[H]:"error"}))}finally{w(!1)}else M&&(Q(U=>({...U,[H]:!0})),$(U=>({...U,[H]:"processing"})))};V.useEffect(()=>{if(!Xe||Pe||v)return;const H=({response:M})=>{const se=`${a||M.customer_id}-${M.currency_id}`;(a&&M.subscription_id===a||me&&me===M.customer_id||D.current&&D.current===M.customer_id)&&(R[se]||(q(je=>({...je,[se]:1})),$e(M.currency_id)))};return Xe.on("invoice.paid",H),()=>{Xe.off("invoice.paid",H)}},[Xe,a,me]);const b=H=>{const{currency:M,method:U}=H;if(U.type==="stripe"){rt.error(S("payment.subscription.overdue.notSupport"));return}if(!j&&(K(M.id),w(!0),$(se=>({...se,[M.id]:"idle"})),["arcblock","ethereum","base"].includes(U.type))){const se={currencyId:M.id};a?se.subscriptionId=a:me&&(se.customerId=me),B.open({locale:x,containerEl:void 0,saveConnect:!1,action:"collect-batch",prefix:Dt(Qn(),"/api/did"),useSocket:!Pe,extraParams:se,messages:{scan:S("common.connect.defaultScan"),title:S("payment.customer.invoice.payBatch"),confirm:S("common.connect.confirm")},onSuccess:()=>{B.close(),Ue(M.id),w(!1),$(je=>({...je,[M.id]:"success"}))},onClose:()=>{B.close(),w(!1)},onError:je=>{rt.error(Pt(je)),$(_=>({..._,[M.id]:"error"})),w(!1)}})}},E=()=>{T(!1),s.onClose?.()},L=H=>{c.onClick?(H.preventDefault(),c.onClick(H)):c.enabled||(H.preventDefault(),E())};if(be)return null;const ie=()=>c.title?c.title:S(a?"payment.subscription.overdue.view":"payment.customer.pastDue.view"),W=(H,M=!0,U={variant:"contained"})=>{const{currency:se}=H,je=j&&k===se.id,_=z[se.id]||"idle",I=(U?.variant||"contained")==="contained"?{color:ee=>Yf(ee)}:{};if(_==="success")return u.jsx(pt,{variant:U?.variant||"contained",size:"small",onClick:()=>ue(se.id),sx:I,...M?{}:{color:"success",startIcon:u.jsx(r0,{})},children:S("payment.subscription.overdue.paid")});if(H.method.type==="stripe"){let ee=S("payment.subscription.overdue.payNow");return _==="error"?ee=S("payment.subscription.overdue.retry"):_==="processing"&&(ee=S("payment.subscription.overdue.processing")),u.jsx(em,{subscriptionId:a,customerId:a?void 0:me,currencyId:se.id,paymentMethod:H.method,onSuccess:()=>{Ue(se.id,!0)},onError:()=>{$(Ee=>({...Ee,[se.id]:"error"})),Q(Ee=>({...Ee,[se.id]:!1}))},children:(Ee,De)=>u.jsx(hr,{variant:U?.variant||"contained",size:"small",disabled:De||_==="processing",loading:De||_==="processing",onClick:Ee,sx:{...I,...U?.sx||{}},children:ee})})}return u.jsx(hr,{variant:U?.variant||"contained",size:"small",disabled:je,loading:je,onClick:()=>b(H),sx:{...I,...U?.sx||{}},children:S(_==="error"?"payment.subscription.overdue.retry":"payment.subscription.overdue.payNow")})},te=H=>H.name&&H.type!=="arcblock"?` (${H.name})`:"",ce=()=>{if(a&&F.subscription)return Ae.length===1?S("payment.subscription.overdue.title",{name:F.subscription?.description,count:F.invoices?.length,total:Ca(Ae[0]?.amount,Ae[0]?.currency?.decimal),symbol:Ae[0]?.currency?.symbol,method:te(Ae[0]?.method)}):S("payment.subscription.overdue.simpleTitle",{name:F.subscription?.description,count:F.invoices?.length});if(me){let H="";return Ae.length===1?H=S("payment.customer.overdue.title",{subscriptionCount:F.subscriptionCount||0,count:F.invoices?.length,total:Ca(Ae[0]?.amount,Ae[0]?.currency?.decimal),symbol:Ae[0]?.currency?.symbol,method:te(Ae[0]?.method)}):H=S("payment.customer.overdue.simpleTitle",{subscriptionCount:F.subscriptionCount||0,count:F.invoices?.length}),g?`${H}${g}`:`${H}${S("payment.customer.overdue.defaultAlert")}`}return""},J=()=>a&&F.subscription?S("payment.subscription.overdue.empty",{name:F.subscription?.description}):S("payment.customer.overdue.empty");return o==="custom"&&f&&typeof f=="function"?u.jsx(ge,{children:f(b,{subscription:F?.subscription,summary:F?.summary,invoices:F?.invoices,subscriptionCount:F?.subscriptionCount,detailUrl:Fe})}):u.jsx(C0,{PaperProps:{style:{minHeight:"auto"}},...s||{},open:G,title:s?.title||S("payment.subscription.overdue.pastDue"),sx:{"& .MuiDialogContent-root":{pt:0}},onClose:E,children:ae?u.jsx(mr,{severity:"error",children:ae.message}):u.jsxs(ge,{sx:{gap:1},children:[Ae.length===0&&u.jsxs(u.Fragment,{children:[u.jsx(mr,{severity:"success",children:J()}),u.jsx(ge,{direction:"row",sx:{justifyContent:"flex-end",mt:2},children:u.jsx(pt,{variant:"outlined",color:"primary",onClick:E,sx:{width:"fit-content"},children:S("common.know")})})]}),Ae.length===1&&u.jsxs(u.Fragment,{children:[u.jsxs(oe,{variant:"body1",sx:{color:"text.secondary"},children:[ce(),c.enabled&&u.jsxs(u.Fragment,{children:[u.jsx("br",{}),S("payment.subscription.overdue.description"),u.jsx("a",{href:Fe,target:"_blank",onClick:L,rel:"noreferrer",style:{color:N.palette.text.link},children:ie()})]})]}),u.jsxs(ge,{direction:"row",sx:{justifyContent:"flex-end",gap:2,mt:2},children:[u.jsx(pt,{variant:"outlined",color:"primary",onClick:E,children:S("common.cancel")}),W(Ae[0])]})]}),Ae.length>1&&u.jsxs(u.Fragment,{children:[u.jsxs(oe,{variant:"body1",sx:{color:"text.secondary"},children:[ce(),c.enabled&&u.jsxs(u.Fragment,{children:[u.jsx("br",{}),S("payment.subscription.overdue.description"),u.jsx("a",{href:Fe,target:"_blank",rel:"noreferrer",onClick:L,style:{color:N.palette.text.link},children:ie()})]})]}),u.jsx(oe,{variant:"body1",sx:{color:"text.secondary"},children:S("payment.subscription.overdue.list")}),u.jsx(ge,{children:Ae.map(H=>u.jsxs(ge,{direction:"row",sx:{justifyContent:"space-between",alignItems:"center",py:1,px:.5,borderBottom:"1px solid",borderColor:"divider","&:hover":{backgroundColor:()=>N.palette.grey[100]},mt:0},children:[u.jsx(oe,{children:S("payment.subscription.overdue.total",{total:Ca(H?.amount,H?.currency?.decimal),currency:H?.currency?.symbol,method:te(H?.method)})}),W(H,!1,{variant:"text",sx:{color:"text.link"}})]},H?.currency?.id))})]})]})})}const mD="payment-currency-preference",pD=(a,r)=>r?`${a}:${r}`:a,P_=(a,r)=>{try{localStorage.setItem(pD(mD,r),a)}catch(o){console.warn("Failed to save currency preference",o)}},q_=(a,r)=>{try{const o=localStorage.getItem(pD(mD,a));if(o&&(!r||r.includes(o)))return o}catch(o){console.warn("Failed to access localStorage",o)}return null};function Ul({onConfirm:a,onCancel:r,title:o,message:s,confirm:f="",color:m="error",cancel:c="",loading:h=!1}){const{t:g}=ft();return u.jsx(Ix,{open:!0,title:o,onConfirm:a,onCancel:r,confirmButton:{text:f||g("common.confirm"),props:{color:m,size:"small",variant:"contained",disabled:!!h}},cancelButton:{text:c||g("common.cancel"),props:{color:"inherit",size:"small"}},showCancelButton:typeof c!="boolean"||!!c,children:u.jsx(Se,{children:s})})}function Kg({open:a,onClose:r}){const{t:o}=ft();return u.jsx(lo,{open:a,onClose:r,slotProps:{paper:{sx:{borderRadius:3,maxWidth:400,mx:"auto",overflow:"hidden"}}},children:u.jsxs(uo,{sx:{p:0},children:[u.jsxs(ge,{alignItems:"center",sx:{pt:4,pb:3,px:4,textAlign:"center"},children:[u.jsx(Se,{sx:{width:64,height:64,borderRadius:"50%",display:"flex",alignItems:"center",justifyContent:"center",bgcolor:s=>Yb(s.palette.warning.main,.1),mb:2.5},children:u.jsx(Hb,{sx:{fontSize:36,color:"warning.main"}})}),u.jsx(oe,{sx:{fontWeight:700,fontSize:18,mb:1,color:"text.primary"},children:o("payment.checkout.stopAcceptingOrders.title")}),u.jsx(oe,{sx:{color:"text.secondary",fontSize:14,lineHeight:1.6},children:o("payment.checkout.stopAcceptingOrders.description")})]}),u.jsx(Se,{sx:{px:4,pb:3},children:u.jsx(pt,{fullWidth:!0,variant:"contained",disableElevation:!0,onClick:r,sx:{borderRadius:2,textTransform:"none",fontWeight:600,py:1},children:o("common.know")})})]})})}function Qg({open:a,previewRate:r=void 0,submitRate:o=void 0,changePercent:s,onConfirm:f,onCancel:m,loading:c=!1}){const{t:h}=ft(),g=s>0?"increased":"decreased",y=Math.abs(s);return u.jsxs(lo,{open:a,onClose:c?void 0:m,maxWidth:"sm",fullWidth:!0,PaperProps:{sx:{borderRadius:2}},children:[u.jsxs(Zl,{sx:{display:"flex",alignItems:"center",gap:1,pb:1},children:[u.jsx(Gb,{color:"warning"}),u.jsx(oe,{variant:"h6",component:"span",children:h("payment.checkout.priceChange.title",{fallback:"Price Changed"})})]}),u.jsx(uo,{children:u.jsxs(ge,{spacing:2,children:[u.jsx(oe,{variant:"body1",color:"text.secondary",children:h("payment.checkout.priceChange.description",{fallback:`The exchange rate has ${g} by ${y.toFixed(2)}% since you started this checkout.`,direction:g,percent:y.toFixed(2)})}),(r||o)&&u.jsx(Se,{sx:{bgcolor:"action.hover",borderRadius:1,p:2},children:u.jsxs(ge,{spacing:1,children:[r&&u.jsxs(Se,{sx:{display:"flex",justifyContent:"space-between"},children:[u.jsxs(oe,{variant:"body2",color:"text.secondary",children:[h("payment.checkout.priceChange.previewRate",{fallback:"Preview Rate"}),":"]}),u.jsx(oe,{variant:"body2",fontFamily:"monospace",children:r})]}),o&&u.jsxs(Se,{sx:{display:"flex",justifyContent:"space-between"},children:[u.jsxs(oe,{variant:"body2",color:"text.secondary",children:[h("payment.checkout.priceChange.currentRate",{fallback:"Current Rate"}),":"]}),u.jsx(oe,{variant:"body2",fontFamily:"monospace",children:o})]}),u.jsxs(Se,{sx:{display:"flex",justifyContent:"space-between"},children:[u.jsxs(oe,{variant:"body2",color:"text.secondary",children:[h("payment.checkout.priceChange.change",{fallback:"Change"}),":"]}),u.jsxs(oe,{variant:"body2",fontWeight:"bold",color:s>0?"error.main":"success.main",children:[s>0?"+":"",s.toFixed(2),"%"]})]})]})}),u.jsx(oe,{variant:"body2",color:"text.secondary",children:h("payment.checkout.priceChange.confirm",{fallback:"Do you want to continue with the new price?"})})]})}),u.jsxs(o0,{sx:{px:3,pb:2},children:[u.jsx(pt,{onClick:m,disabled:c,variant:"outlined",color:"inherit",children:h("payment.checkout.priceChange.cancel",{fallback:"Cancel"})}),u.jsx(pt,{onClick:f,disabled:c,variant:"contained",color:"primary",autoFocus:!0,children:c?h("payment.checkout.priceChange.confirming",{fallback:"Confirming..."}):h("payment.checkout.priceChange.accept",{fallback:"Accept & Continue"})})]})]})}const L_=(a,r)=>`${a}-${r}-${Date.now()}-${Math.random().toString(36).substring(2,10)}`,I_=async a=>{let r;return await lD(async()=>{const{data:o}=await ot.get(`/api/checkout-sessions/retrieve/${a}`);if(o.paymentIntent&&o.paymentIntent.status==="requires_action"&&o.paymentIntent.last_payment_error)throw new Error(o.paymentIntent.last_payment_error.message);return r=o,o.checkoutSession?.status==="complete"&&["paid","no_payment_required"].includes(o.checkoutSession?.payment_status)},{interval:2e3,timeout:180*1e3}),r},$_=a=>(a?.connectedAccounts||a?.extraConfigs?.connectedAccounts||[]).some(o=>o.provider==="wallet"),cf=(a,r,o,s={})=>{const{preferExisting:f=!0,shouldValidate:m=!1}=s,c={customer_name:a.name||a.fullName,customer_email:a.email,customer_phone:Jf(a.phone)},h={"billing_address.state":a.address?.state||a.address?.province,"billing_address.line1":a.address?.line1,"billing_address.line2":a.address?.line2,"billing_address.city":a.address?.city,"billing_address.postal_code":a.address?.postal_code||a.address?.postalCode,"billing_address.country":a.address?.country||"us"};s.showPhone&&(h["billing_address.country"]=a.metadata?.phone?.country||a.address?.country);const g={...h,...c},y={...r,billing_address:{...r.billing_address}};return Object.entries(g).forEach(([S,x])=>{if(!f||!r[S.split(".")[0]])if(o(S,x,{shouldValidate:m}),S.startsWith("billing_address.")){const A=S.replace("billing_address.","");y.billing_address[A]=x}else y[S]=x}),y};function hD({checkoutSession:a,paymentMethods:r,paymentIntent:o,paymentLink:s,customer:f,onPaid:m,onError:c,onQuoteUpdated:h=void 0,onPaymentIntentUpdate:g=void 0,action:y,onlyShowBtn:S=!1,isDonation:x=!1,rateUnavailable:A=!1}){const{t:v,locale:N}=ft(),{isMobile:B}=qi(),{session:O,connect:k,payable:K,setPaymentState:j}=_n(),w=cu("events"),G="bottom",{control:T,getValues:R,setValue:q,handleSubmit:z,formState:{errors:$},trigger:re}=hs(),Q=V.useRef(null),Z=V.useRef(!1),ne=V.useRef(""),me=V.useRef(""),P=V.useMemo(()=>{let pe=!0;for(const ke of a.line_items)if(Df(ke.price,ke.quantity)){pe=!1;break}return pe},[a]),[D,F]=ni({submitting:!1,paying:!1,paid:!1,paymentIntent:o,stripeContext:void 0,customer:f,customerLimited:!1,serviceSuspended:!1,stripePaying:!1,fastCheckoutInfo:null,creditInsufficientInfo:null,showEditForm:!1,priceChangeConfirm:null}),ae=RS(r),be=Hf(window.location.href),Me=Fi(async({response:pe})=>{pe.id===a.id&&D.paid===!1&&await ve()});V.useEffect(()=>{w&&w.on("checkout.session.completed",Me)},[w]),V.useEffect(()=>{j({paying:D.submitting||D.paying,stripePaying:D.stripePaying})},[D.submitting,D.paying,D.stripePaying]);const Fe=(pe,ke)=>({...ke||{},name:pe?.name||pe?.fullName||ke?.name||ke?.fullName,fullName:pe?.name||pe?.fullName||ke?.name||ke?.fullName,email:pe?.email||ke?.email,phone:pe?.phone||ke?.phone,address:{...ke?.address||{},...pe?.address||{},country:pe?.address?.country||ke?.address?.country,state:pe?.address?.state||ke?.address?.province,line1:pe?.address?.line1||ke?.address?.line1,line2:pe?.address?.line2||ke?.address?.line2,city:pe?.address?.city||ke?.address?.city,postal_code:pe?.address?.postal_code||ke?.address?.postalCode},metadata:{...ke?.metadata||{},phone:{country:pe?.address?.country||ke?.metadata?.phone?.country,phoneNumber:pe?.phone||ke?.metadata?.phone?.phoneNumber}}});V.useEffect(()=>{const pe=async()=>{if(O?.user){const ke=R();let Re=O.user;try{const{data:it}=await ot.get("/api/customers/me?skipSummary=1&fallback=1");Re=Fe(it,Re)}catch(it){Re=Fe(f||{},Re),console.error(it)}const Je=cf(Re,ke,q,{preferExisting:!1,showPhone:a.phone_number_collection?.enabled}),tt=ee(Je);F({showEditForm:!tt})}else cf({name:"",email:"",phone:"",address:{state:"",line1:"",line2:"",city:"",postal_code:""}},{},q,{preferExisting:!1,showPhone:a.phone_number_collection?.enabled})};D.submitting||pe()},[O?.user,a.phone_number_collection?.enabled]);const Ae=ba({control:T,name:"payment_method"}),ue=ba({control:T,name:"payment_currency"}),$e=Fi(()=>{z(zt,Dn)()}),Pe=tu(a.line_items);let Xe="";s?.donation_settings?y?Xe=y:Xe=v("payment.checkout.donate"):Xe=v(`payment.checkout.${a.mode}`),Xe=O?.user||x?Xe:v("payment.checkout.connect",{action:Xe});const Ze=r.find(pe=>pe.id===Ae),Ue=ae.find(pe=>pe.id===ue),b=Ze.type==="arcblock"&&!a.subscription_data?.no_stake,L=V.useMemo(()=>(a.line_items||[]).some(pe=>{const ke=pe.upsell_price||pe.price;return ke&&ke?.pricing_type==="dynamic"}),[a.line_items])&&A,ie=K&&!L,W=a?.submit_type==="donate"&&x,[te,ce]=ni({open:!1,total:"",usd:null,hasQuotes:!1,baseCurrency:"USD",oldTotal:"",reason:"recalculated"}),J=Fi(pe=>{if(!pe)return null;const ke=Number(pe);return Number.isFinite(ke)?ke.toFixed(8):null}),H=Fi(pe=>{if(!pe?.line_items?.length)return null;for(const ke of pe.line_items){const Re=ke?.exchange_rate;if(Re)return Re}return null}),M=V.useRef(!1),U=V.useRef(""),se=Fi(pe=>pe?.line_items?.length?pe.line_items.map(ke=>{const Re=ke.price_id||ke.price?.id||"",Je=ke?.quote_id||"",tt=ke?.quoted_amount||"",it=ke?.exchange_rate||"";return`${Re}:${Je}:${tt}:${it}`}).join("|"):""),je=Fi(pe=>{if(!Ue)return{total:"",usd:null,hasQuotes:!1,baseCurrency:"USD",totalUnit:null};const ke=pe.line_items||[];let Re="USD";for(const ht of ke){const hn=(ht.upsell_price||ht.price)?.base_currency;if(hn){Re=hn;break}}const Je=ke.some(ht=>ht?.quoted_amount&&ht?.exchange_rate);if(!Je)return{total:"",usd:null,hasQuotes:!1,baseCurrency:Re,totalUnit:null};let tt=Number(pe?.subscription_data?.trial_period_days||0);const it=(pe?.subscription_data?.trial_currency||"").split(",").map(_0).filter(Boolean);it.length>0&&ue&&it.includes(ue)===!1&&(tt=0);const{total:Wn}=Hl(ke,Ue,tt>0),Xt=new ze(pe.total_details?.amount_discount||"0"),st=new ze(Wn).sub(Xt),Rt=st.isNeg()?new ze(0):st,Jn=`${Ja(qt(Rt.toString(),Ue.decimal),6)} ${Ue.symbol}`,Ii=ke.map(ht=>{const hn=(ht.upsell_price||ht.price)?.base_amount;if(hn!=null)return q0(hn,ht.quantity||0);const oi=ht?.exchange_rate,ja=ht?.quoted_amount;return!oi||!ja?null:If(new ze(ja),Ue.decimal,oi)}).filter(ht=>!!ht);if(!Ii.length)return{total:Jn,usd:null,hasQuotes:Je,baseCurrency:Re,totalUnit:Rt};const vr=Ii.reduce((ht,On)=>ht.add(new ze(Kn(On,8))),new ze(0)),co=qt(vr.toString(),8);return{total:Jn,usd:zi(co,N),hasQuotes:Je,baseCurrency:Re,totalUnit:Rt}}),_=Fi((pe,ke)=>{const Re=je(pe),Je=je(ke);if(!Re.totalUnit||!Je.totalUnit)return{changed:!1,prev:Re,next:Je};const tt=Je.totalUnit.sub(Re.totalUnit).abs(),it=new ze(1);return{changed:tt.gt(it),prev:Re,next:Je}}),I=Fi((pe,ke={})=>{if(!pe?.checkoutSession)return;h?.({checkoutSession:pe.checkoutSession,quotes:pe.quotes,rateUnavailable:pe.rateUnavailable,rateError:pe.rateError});const{changed:Re,prev:Je,next:tt}=_(a,pe.checkoutSession),it=J(H(a)),Wn=J(H(pe.checkoutSession)),Xt=!!(it&&Wn&&it!==Wn);if((ke.forceConfirm||Re)&&tt.hasQuotes){ce({open:!0,total:tt.total,usd:tt.usd,hasQuotes:tt.hasQuotes,baseCurrency:tt.baseCurrency,oldTotal:Je.total,reason:ke.reason||(Xt?"rateChanged":"recalculated")});return}ce({open:!1});const Rt=se(pe.checkoutSession);Rt&&Rt!==U.current&&(U.current=Rt,M.current=!0)}),ee=pe=>{if(!pe)return!1;const ke=a.metadata?.page_info?.field_validation,Re=pe.customer_name;if(!Re||Re.trim()==="")return!1;const Je=pe.customer_email;if(!Je||!Hg(Je))return!1;const tt=gn("customer_name",ke,N);if(tt.pattern&&!tt.pattern.value.test(Re))return!1;const it=gn("customer_email",ke,N);if(it.pattern&&!it.pattern.value.test(Je))return!1;const Wn=pe.billing_address||{},{postal_code:Xt,country:st,state:Rt,line1:Jn,city:Li}=Wn;if(!Xt||!Tf(Xt,st))return!1;const Ii=gn("billing_address.postal_code",ke,N);if(Ii.pattern&&!Ii.pattern.value.test(Xt)||!Rt)return!1;const vr=gn("billing_address.state",ke,N);if(vr.pattern&&!vr.pattern.value.test(Rt))return!1;if(a.phone_number_collection?.enabled){const ht=pe.customer_phone;if(!ht||ht.trim()==="")return!1;const On=gn("customer_phone",ke,N);if(On.pattern&&!On.pattern.value.test(ht))return!1}if(a.billing_address_collection==="required"){if(!st||!Rt||!Jn||!Li||!Xt)return!1;const ht=gn("billing_address.line1",ke,N);if(ht.pattern&&!ht.pattern.value.test(Jn))return!1;const On=gn("billing_address.city",ke,N);if(On.pattern&&!On.pattern.value.test(Li))return!1}return!0},Ee=ba({control:T,name:"customer_name"}),De=ba({control:T,name:"customer_email"}),Ce=ba({control:T,name:"customer_phone"}),Te=ba({control:T,name:"billing_address"}),Ye=O?.user?D.showEditForm:!1;V.useEffect(()=>{M.current&&(D.submitting||D.paying||(M.current=!1,an()))},[D.submitting,D.paying]);const ve=async()=>{if(!Z.current){Z.current=!0,F({paying:!0});try{const pe=await I_(a.id);D.paid===!1&&(F({paid:!0,paying:!1}),m(pe))}catch(pe){const ke=Pt(pe),Re={action:"payFailed",mode:a.mode,errorMessage:ke,success:!1};$x.event(Re.action,Re),rt.error(ke)}finally{F({paying:!1}),Z.current=!1}}};V.useEffect(()=>{Q.current&&!vd($)&&B&&Q.current.scrollIntoView({behavior:"smooth"})},[$,B]);const qe=async()=>{const{data:pe}=await ot.get("/api/customers/me?fallback=1&skipSummary=1");if(pe){const ke=R(),Re=Fe(pe,O?.user),Je=cf(Re,ke,q,{preferExisting:!1,showPhone:a.phone_number_collection?.enabled,shouldValidate:!0}),tt=ee(Je);F({showEditForm:!tt}),await re()}},Oe=async()=>{if(D.fastCheckoutInfo){F({fastCheckoutInfo:{...D.fastCheckoutInfo,loading:!0}});try{const pe=await ot.post(`/api/checkout-sessions/${a.id}/fast-checkout-confirm`,{});pe.data.paymentIntent&&g?.(pe.data.paymentIntent),pe.data.fastPaid?(F({fastCheckoutInfo:null,paying:!0}),await ve()):(rt.error(v("payment.checkout.fastPay.failed")),F({fastCheckoutInfo:null,paying:!0}),kt())}catch(pe){console.error(pe);const ke=pe?.response?.data?.code;if(["QUOTE_LOCK_EXPIRED","QUOTE_AMOUNT_MISMATCH","QUOTE_EXPIRED_OR_USED","QUOTE_NOT_FOUND","QUOTE_REQUIRED"].includes(ke)){try{const{data:Re}=await ot.get(`/api/checkout-sessions/retrieve/${a.id}`,{params:{forceRefresh:"1"}});Re?.checkoutSession&&(I(Re,{reason:"rateChanged"}),rt.info(v("payment.checkout.quote.updated.pleaseRetry")||"Price updated, please resubmit"))}catch(Re){console.error(Re),rt.error(Pt(Re))}finally{F({fastCheckoutInfo:null})}return}if(ke==="QUOTE_UPDATED"){const Re=pe?.response?.data;Re?.checkoutSession&&I(Re),F({fastCheckoutInfo:null});return}if(ke==="RATE_UNAVAILABLE"){const Re=pe?.response?.data;Re?.checkoutSession&&h?.({checkoutSession:Re.checkoutSession,quotes:Re.quotes,rateUnavailable:Re.rateUnavailable,rateError:Re.rateError}),F({fastCheckoutInfo:null});return}rt.error(Pt(pe)),F({fastCheckoutInfo:null})}}},Ve=()=>{F({fastCheckoutInfo:null})},Ge=()=>{F({creditInsufficientInfo:null})},Ke=()=>{ce({open:!1}),M.current=!0},et=()=>{ce({open:!1})},Lt=()=>{const pe=D.priceChangeConfirm?.formData;F({priceChangeConfirm:null}),pe&&zt(pe)},It=()=>{F({priceChangeConfirm:null})},kt=()=>{try{if(!["arcblock","ethereum","base"].includes(Ze.type))return;F({paying:!0}),k.open({locale:N,containerEl:void 0,action:a.mode,prefix:Dt(Qn(),"/api/did"),saveConnect:!1,useSocket:Lf()===!1,extraParams:{checkoutSessionId:a.id,sessionUserDid:O?.user?.did},onSuccess:async()=>{k.close(),await ve()},onClose:()=>{k.close(),F({submitting:!1,paying:!1})},onError:pe=>{console.error(pe),F({submitting:!1,paying:!1}),c(pe)},messages:{title:v("payment.checkout.connectModal.title",{action:Xe}),scan:v("payment.checkout.connectModal.scan"),confirm:v("payment.checkout.connectModal.confirm"),cancel:v("payment.checkout.connectModal.cancel")}})}catch(pe){rt.error(Pt(pe))}},zt=async pe=>{if(D.submitting)return;if(!O.user.sourceAppPid&&a.line_items?.some(Je=>!!Je?.price?.product?.vendor_config?.length)){rt.error(v("payment.checkout.vendor.accountRequired"));return}F({submitting:!0});try{let Re;const Je=a.line_items?.find(st=>st?.exchange_rate)?.exchange_rate||void 0,it=(a.line_items||[]).map(st=>`${st.upsell_price_id||st.price_id}:${st.quantity}`).join("|"),Wn=`${a.id}-${Ue?.id}-${it}`;(Wn!==me.current||!ne.current)&&(me.current=Wn,ne.current=L_(a.id,Ue?.id||""));const Xt={...pe,idempotency_key:ne.current,preview_rate:Je||void 0,price_confirmed:D.priceChangeConfirm?.formData?!0:void 0};if(W?Re=await ot.put(`/api/checkout-sessions/${a.id}/donate-submit`,Xt):Re=await ot.put(`/api/checkout-sessions/${a.id}/submit`,Xt),F({paymentIntent:Re.data.paymentIntent,stripeContext:Re.data.stripeContext,customer:Re.data.customer,submitting:!1,customerLimited:!1}),Re.data.paymentIntent&&g?.(Re.data.paymentIntent),["arcblock","ethereum","base"].includes(Ze.type)){if(Re.data.noPaymentRequired){try{const st=await ot.post(`/api/checkout-sessions/${a.id}/fast-checkout-confirm`,{});st.data.paymentIntent&&g?.(st.data.paymentIntent),st.data.fastPaid||st.data.checkoutSession?.status==="complete"?(F({paying:!0}),await ve()):kt()}catch(st){console.error("noPaymentRequired confirm failed",st),kt()}return}Ue?.type==="credit"?Re.data.creditSufficient===!0?F({fastCheckoutInfo:{open:!0,loading:!1,sourceType:"credit",amount:Re.data.fastPayInfo?.amount||"0",payer:Re.data.fastPayInfo?.payer,availableCredit:Re.data.fastPayInfo?.amount||"0",balance:Re.data.fastPayInfo?.token?.balance||"0"}}):F({creditInsufficientInfo:{open:!0}}):(Re.data.balance?.sufficient||Re.data.delegation?.sufficient)&&!W&&Re.data.fastPayInfo?F({fastCheckoutInfo:{open:!0,loading:!1,sourceType:Re.data.fastPayInfo.type,amount:Re.data.fastPayInfo.amount,payer:Re.data.fastPayInfo.payer}}):kt()}["stripe"].includes(Ze.type)&&(Re.data.stripeContext?.status==="succeeded"?F({paying:!0}):setTimeout(()=>{F({stripePaying:!0})},200))}catch(Re){console.error(Re);let Je=!0;const tt=Re.response?.data?.code;if(tt){if(["QUOTE_UPDATED","RATE_UNAVAILABLE","QUOTE_LOCK_EXPIRED","QUOTE_AMOUNT_MISMATCH","QUOTE_EXPIRED_OR_USED","QUOTE_NOT_FOUND","QUOTE_REQUIRED","QUOTE_MAX_PAYABLE_EXCEEDED"].includes(tt)||aD(`error.${tt}`),["QUOTE_LOCK_EXPIRED","QUOTE_AMOUNT_MISMATCH","QUOTE_EXPIRED_OR_USED","QUOTE_NOT_FOUND","QUOTE_REQUIRED","QUOTE_MAX_PAYABLE_EXCEEDED","quote_validation_failed"].includes(tt)){Je=!1;try{const{data:it}=await ot.get(`/api/checkout-sessions/retrieve/${a.id}`,{params:{forceRefresh:"1"}});it?.checkoutSession&&(I(it,{reason:"rateChanged"}),rt.info(v("payment.checkout.quote.updated.pleaseRetry")||"Price updated, please resubmit"))}catch(it){console.error(it),rt.error(Pt(it))}}if(tt==="QUOTE_UPDATED"){Je=!1;const it=Re.response?.data;it?.checkoutSession&&I(it)}if(tt==="RATE_UNAVAILABLE"){Je=!1;const it=Re.response?.data;it?.checkoutSession&&h?.({checkoutSession:it.checkoutSession,quotes:it.quotes,rateUnavailable:it.rateUnavailable,rateError:it.rateError})}if(tt==="PRICE_UNAVAILABLE"&&(Je=!1,rt.error(v("payment.checkout.priceChange.unavailable",{fallback:"Unable to fetch exchange rate. Please try again later."}))),tt==="PRICE_UNSTABLE"&&(Je=!1,rt.error(v("payment.checkout.priceChange.unstable",{fallback:"Price is volatile. Please try again later."}))),tt==="PRICE_CHANGED"){Je=!1;const it=Re.response?.data;F({priceChangeConfirm:{open:!0,changePercent:it?.change_percent||0,formData:pe}})}tt==="UNIFIED_APP_REQUIRED"&&(Je=!1,rt.error(v("payment.checkout.vendor.accountRequired"))),tt==="CUSTOMER_LIMITED"&&(Je=!1,F({customerLimited:!0})),tt==="STOP_ACCEPTING_ORDERS"&&(Je=!1,F({serviceSuspended:!0}))}Je&&rt.error(Pt(Re))}finally{F({submitting:!1})}},Dn=pe=>{pe&&console.error(pe),F({submitting:!1})},an=()=>{if(!(D.submitting||D.paying||!ie))if(Q.current&&!vd($)&&B&&Q.current.scrollIntoView({behavior:"smooth"}),O?.user)z(zt,Dn)();else{if(W){z(zt,Dn)();return}O?.login(()=>{F({submitting:!0}),qe().then($e).catch(pe=>{console.error(pe),F({submitting:!1})})})}},An=async()=>{F({stripePaying:!1,paying:!0}),await ve()},Sa=async()=>{try{await ot.post(`/api/checkout-sessions/${a.id}/abort-stripe`)}catch(pe){console.error(pe),rt.error(Pt(pe))}finally{F({stripePaying:!1})}};V.useEffect(()=>{const pe=ke=>{ke.key==="Enter"&&!D.submitting&&!D.paying&&!D.stripePaying&&P&&ie&&an()};return window.addEventListener("keydown",pe),()=>{window.removeEventListener("keydown",pe)}},[D.submitting,D.paying,D.stripePaying,P,ie]);const fa=BS(Ze,D.fastCheckoutInfo?.payer||""),Xn=D.fastCheckoutInfo&&u.jsx(Ul,{onConfirm:Oe,onCancel:Ve,title:D.fastCheckoutInfo.sourceType==="credit"?v("payment.checkout.fastPay.credit.title"):v("payment.checkout.fastPay.title"),message:D.fastCheckoutInfo.sourceType==="credit"?u.jsx(oe,{children:v("payment.checkout.fastPay.credit.meteringSubscriptionMessage",{available:`${Ca(D.fastCheckoutInfo?.balance||"0",Ue?.decimal||18)} ${Ue?.symbol}`})}):u.jsxs(ge,{children:[u.jsx(oe,{children:v("payment.checkout.fastPay.autoPaymentReason")}),u.jsx(ti,{sx:{mt:1.5,mb:1.5}}),u.jsxs(ge,{spacing:1,children:[u.jsxs(ge,{sx:{flexDirection:"row",alignItems:"center",justifyContent:"space-between"},children:[u.jsx(oe,{sx:{color:"text.primary",whiteSpace:"nowrap"},children:v("payment.checkout.fastPay.payer")}),u.jsxs(Se,{sx:{display:"flex",alignItems:"center",gap:.5},children:[u.jsx(A0,{did:D.fastCheckoutInfo.payer||"",compact:!0,responsive:!1}),fa&&u.jsx(Un,{title:v("payment.checkout.fastPay.balanceLink"),placement:"top",children:u.jsx(Ol,{sx:{color:"text.lighter",fontSize:"0.85rem",cursor:"pointer","&:hover":{color:"text.primary"}},onClick:()=>{window.open(fa,"_blank")}})})]})]}),u.jsxs(ge,{sx:{flexDirection:"row",alignItems:"center",justifyContent:"space-between"},children:[u.jsx(oe,{sx:{color:"text.primary"},children:v("payment.checkout.fastPay.amount")}),u.jsxs(oe,{children:[Ca(D.fastCheckoutInfo.amount,Ue?.decimal||18)," ",Ue?.symbol]})]})]})]}),loading:D.fastCheckoutInfo.loading,color:"primary"}),Fa=D.creditInsufficientInfo&&u.jsx(Ul,{onConfirm:Ge,onCancel:Ge,title:v("payment.checkout.fastPay.credit.insufficientTitle"),message:u.jsx(oe,{children:v("payment.checkout.fastPay.credit.insufficientMessage")}),confirm:v("common.confirm")}),_a=te.open&&u.jsx(Ul,{onConfirm:Ke,onCancel:et,title:v("payment.checkout.quote.priceUpdatedTitle"),message:u.jsxs(ge,{spacing:1,children:[u.jsx(oe,{children:v(te.reason==="rateChanged"?"payment.checkout.quote.priceUpdatedDescriptionRate":"payment.checkout.quote.priceUpdatedDescriptionRecalc")}),te.hasQuotes&&u.jsxs(ge,{spacing:.25,children:[u.jsx(oe,{sx:{color:"text.secondary",fontSize:"0.7875rem"},children:v("payment.checkout.quote.priceUpdatedNewTotalLabel")}),u.jsx(oe,{sx:{fontWeight:600},children:te.total}),te.usd&&u.jsxs(oe,{sx:{color:"text.secondary"},children:["≈ ",te.usd," ",te.baseCurrency]}),te.oldTotal&&u.jsx(oe,{sx:{color:"text.secondary",fontSize:"0.75rem"},children:v("payment.checkout.quote.priceUpdatedOldTotal",{total:te.oldTotal})})]})]}),confirm:v("payment.checkout.quote.priceUpdatedConfirm"),cancel:v("common.cancel"),color:"primary"}),Dr=()=>{if(be.redirect)return decodeURIComponent(be.redirect);if(a.success_url)return a.success_url;if(s?.after_completion?.redirect?.url)return s.after_completion.redirect.url};return S?u.jsxs(u.Fragment,{children:[u.jsx(Se,{className:"cko-payment-submit-btn",children:u.jsxs(pt,{variant:"contained",color:"primary",size:"large",className:"cko-submit-button",onClick:()=>{D.submitting||D.paying||!ie||an()},fullWidth:!0,disabled:D.stripePaying||!P||!ie,children:[(D.submitting||D.paying)&&u.jsx(gr,{size:16,sx:{mr:.5,color:"primary.contrastText"}}),D.submitting||D.paying?v("payment.checkout.processing"):Xe]})}),D.customerLimited&&u.jsx(Gg,{customerId:f?.id||O?.user?.did,onPaid:()=>{F({customerLimited:!1}),an()},alertMessage:v("payment.customer.pastDue.alert.customMessage"),detailLinkOptions:{enabled:!0,onClick:()=>{F({customerLimited:!1}),window.open(Dt(Qn(),`/customer/invoice/past-due?referer=${encodeURIComponent(window.location.href)}`),"_self")}},dialogProps:{open:D.customerLimited,onClose:()=>F({customerLimited:!1}),title:v("payment.customer.pastDue.alert.title")}}),D.serviceSuspended&&u.jsx(Kg,{open:!0,onClose:()=>F({serviceSuspended:!1})}),Xn,Fa,_a,D.priceChangeConfirm?.open&&u.jsx(Qg,{open:!0,changePercent:D.priceChangeConfirm.changePercent,onConfirm:Lt,onCancel:It,loading:D.submitting})]}):u.jsxs(u.Fragment,{children:[u.jsx(Gn,{in:!0,children:u.jsxs(ge,{className:"cko-payment-contact",children:[u.jsx(oe,{title:v("payment.checkout.paymentDetails"),sx:{color:"text.primary",fontSize:{xs:"18px",md:"24px"},fontWeight:"700",lineHeight:"32px",mb:2.5},children:v("payment.checkout.paymentDetails")}),u.jsx(Gn,{in:!0,children:u.jsxs(ge,{direction:"column",className:"cko-payment-methods",sx:{alignItems:"flex-start"},children:[u.jsx(ge,{direction:"row",sx:{width:"100%"},children:u.jsx(Yl,{name:"payment_currency",control:T,render:({field:pe})=>u.jsx(N_,{value:pe.value,currencies:ae,onChange:async(ke,Re)=>{const Je=pe.value;if(pe.onChange(ke),q("payment_method",Re),P_(ke,O?.user?.did),Je&&Je!==ke)try{const{data:tt}=await ot.put(`/api/checkout-sessions/${a.id}/switch-currency`,{currency_id:ke,payment_method_id:Re});tt.currency_changed&&h&&h({checkoutSession:tt,quotes:tt.quotes})}catch(tt){console.error("Failed to switch currency:",tt)}}})})}),D.stripePaying&&D.stripeContext&&u.jsx(fD,{clientSecret:D.stripeContext.client_secret,intentType:D.stripeContext.intent_type,publicKey:Ze.settings.stripe?.publishable_key,customer:D.customer,mode:a.mode,onConfirm:An,onCancel:Sa,returnUrl:Dr()})]})}),!Ye&&O?.user&&u.jsxs(ge,{spacing:1.25,sx:{mt:2,p:2,pt:1,backgroundColor:"background.paper",borderRadius:1,border:"1px solid",borderColor:"divider"},children:[u.jsxs(ge,{direction:"row",justifyContent:"space-between",alignItems:"center",sx:{mb:.25},children:[u.jsx(oe,{variant:"subtitle2",sx:{color:"text.primary",fontSize:"0.875rem"},children:v("payment.checkout.customerInfo")}),u.jsx(pt,{size:"small",variant:"text",onClick:()=>F({showEditForm:!0}),sx:{minWidth:0},children:v("common.edit")})]}),u.jsxs(ge,{spacing:.5,children:[u.jsx(oe,{variant:"body2",sx:{color:"text.primary",fontWeight:600,fontSize:"0.9375rem"},children:Ee}),u.jsx(oe,{variant:"body2",sx:{color:"text.secondary",fontSize:"0.8125rem"},children:De}),a.phone_number_collection?.enabled&&Ce&&u.jsx(oe,{variant:"body2",sx:{color:"text.secondary",fontSize:"0.8125rem"},children:Ce}),Te&&u.jsxs(ge,{direction:"row",alignItems:"center",spacing:.75,children:[Te.country&&u.jsx(Nl,{iso2:Te.country.toLowerCase(),style:{width:18,height:14}}),u.jsxs(oe,{variant:"body2",sx:{color:"text.secondary",fontSize:"0.8125rem"},children:[a.billing_address_collection==="required"?[Te.line1,Te.city,Te.state].filter(Boolean).join(", "):Te.state||"",Te.postal_code&&` [ ${v("payment.checkout.billing.postal_code")}: ${Te.postal_code} ]`]})]})]})]}),Ye&&u.jsxs(ge,{direction:"column",className:"cko-payment-form",id:"cko-payment-form",spacing:0,ref:vd($)?void 0:Q,sx:{flex:1,overflow:"auto",py:1},children:[u.jsx(Nn,{className:"base-label",children:v("payment.checkout.customer.name")}),u.jsx(Xa,{name:"customer_name",variant:"outlined",errorPosition:G,rules:{required:v("payment.checkout.required"),...gn("customer_name",a.metadata?.page_info?.field_validation,N)}}),u.jsx(Nn,{className:"base-label",children:v("payment.checkout.customer.email")}),u.jsx(Xa,{name:"customer_email",variant:"outlined",errorPosition:G,rules:{required:v("payment.checkout.required"),validate:pe=>Hg(pe)?!0:v("payment.checkout.invalid"),...gn("customer_email",a.metadata?.page_info?.field_validation,N)}}),a.phone_number_collection?.enabled&&u.jsxs(u.Fragment,{children:[u.jsx(Nn,{className:"base-label",children:v("payment.checkout.customer.phone")}),u.jsx(O_,{name:"customer_phone",variant:"outlined",errorPosition:G,placeholder:"Phone number",rules:{required:v("payment.checkout.required"),validate:async pe=>await U_(pe)?!0:v("payment.checkout.invalid"),...gn("customer_phone",a.metadata?.page_info?.field_validation,N)}})]}),u.jsx(M_,{mode:a.billing_address_collection,sx:{marginTop:"0 !important"},fieldValidation:a.metadata?.page_info?.field_validation,errorPosition:G})]})]})}),u.jsx(ti,{sx:{mt:2.5,mb:2.5}}),u.jsx(Gn,{in:!0,children:u.jsxs(ge,{className:"cko-payment-submit",children:[u.jsx(Se,{className:"cko-payment-submit-btn",children:u.jsx(hr,{variant:"contained",color:"primary",size:"large",className:"cko-submit-button",onClick:()=>{an()},fullWidth:!0,loading:D.submitting||D.paying,disabled:D.stripePaying||!P||!ie,children:D.submitting||D.paying?v("payment.checkout.processing"):Xe})}),["subscription","setup"].includes(a.mode)&&u.jsx(oe,{sx:{mt:2.5,color:"text.lighter",fontSize:"0.7875rem",lineHeight:"0.9625rem"},children:b?v("payment.checkout.confirm.withStake",{payee:Pe}):v("payment.checkout.confirm.withoutStake",{payee:Pe})}),a.metadata?.page_info?.form_purpose_description&&u.jsxs(Se,{sx:{mt:1,display:"flex",alignItems:"center",gap:.5},children:[u.jsx(hf,{sx:{color:"text.lighter",fontSize:"0.75rem"}}),u.jsx(oe,{variant:"body2",sx:{fontSize:"0.75rem",color:"text.lighter"},children:N==="zh"?a.metadata.page_info.form_purpose_description.zh:a.metadata.page_info.form_purpose_description.en})]})]})}),D.customerLimited&&u.jsx(Gg,{customerId:f?.id||O?.user?.did,onPaid:()=>{F({customerLimited:!1}),an()},alertMessage:v("payment.customer.pastDue.alert.customMessage"),detailLinkOptions:{enabled:!0,onClick:()=>{F({customerLimited:!1}),window.open(Dt(Qn(),`/customer/invoice/past-due?referer=${encodeURIComponent(window.location.href)}`),"_self")}},dialogProps:{open:D.customerLimited,onClose:()=>F({customerLimited:!1}),title:v("payment.customer.pastDue.alert.title")}}),D.serviceSuspended&&u.jsx(Kg,{open:!0,onClose:()=>F({serviceSuspended:!1})}),Xn,Fa,_a,D.priceChangeConfirm?.open&&u.jsx(Qg,{open:!0,changePercent:D.priceChangeConfirm.changePercent,onConfirm:Lt,onCancel:It,loading:D.submitting})]})}function V_(){return u.jsx(Gn,{in:!0,children:u.jsxs(ge,{direction:"column",children:[u.jsx(ge,{direction:"row",spacing:2,sx:{alignItems:"center"},children:u.jsx(Ot,{variant:"text",sx:{fontSize:"1.75rem",width:"40%"}})}),u.jsx(Ot,{sx:{mt:2},variant:"rounded",height:100}),u.jsx(oe,{component:"div",variant:"h4",sx:{mt:2},children:u.jsx(Ot,{})}),u.jsx(oe,{component:"div",variant:"h2",children:u.jsx(Ot,{})})]})})}function H_(){return u.jsx(Gn,{in:!0,children:u.jsxs(ge,{direction:"column",children:[u.jsx(Ot,{variant:"text",sx:{fontSize:"1.75rem",width:"40%"}}),u.jsx(Ot,{sx:{mt:2},variant:"rounded",height:68}),u.jsxs(Se,{sx:{mt:1},children:[u.jsx(oe,{component:"div",variant:"h4",sx:{mb:-1},children:u.jsx(Ot,{})}),u.jsx(oe,{component:"div",children:u.jsx(Ot,{height:60})})]}),u.jsxs(Se,{children:[u.jsx(oe,{component:"div",variant:"h4",sx:{mb:-1},children:u.jsx(Ot,{})}),u.jsx(oe,{component:"div",children:u.jsx(Ot,{height:60})})]}),u.jsx(Se,{children:u.jsx(Ot,{height:60})})]})})}function yD(){return u.jsxs(Se,{sx:{mb:2},children:[u.jsxs(Se,{sx:{display:"flex",justifyContent:"space-between",alignItems:"center",mb:1},children:[u.jsx(Ot,{variant:"rounded",height:16,width:150}),u.jsx(Ot,{variant:"rounded",height:16,width:50})]}),u.jsx(Ot,{variant:"rounded",height:8,width:"100%"})]})}const Y_=(a,r,o)=>{const s=a.name||a.title,f=a.status==="delivered";return a.vendorType==="didnames"?r?o("payment.checkout.vendor.didnames.failed",{name:s}):f?o("payment.checkout.vendor.didnames.completed",{name:s}):o("payment.checkout.vendor.didnames.processing",{name:s}):r?o("payment.checkout.vendor.launcher.failed",{name:s}):f?o("payment.checkout.vendor.launcher.completed",{name:s}):o("payment.checkout.vendor.launcher.processing",{name:s})};function G_({vendor:a}){const{t:r}=ft(),[o,s]=V.useState(0),f=V.useRef(),m=V.useCallback(()=>{const y=a.progress||0;let S,x;const A=v=>{S||(S=v,x=o);const N=v-S;let B;if(y===100)B=100;else if(y===0)B=Math.min(x+N/1e3,99);else if(y>x){const k=Math.min(N/1e3,1);B=x+(y-x)*k}else B=Math.min(x+N/1e3,99);B=Math.round(B),s(O=>Math.min(O>B?O:B,100)),y!==100&&B<99&&y<100&&(f.current=requestAnimationFrame(A))};f.current&&cancelAnimationFrame(f.current),f.current=requestAnimationFrame(A)},[a.progress,o]);V.useEffect(()=>(m(),()=>{f.current&&cancelAnimationFrame(f.current)}),[m]);const c=o>=100,h=a.status==="failed",g=Y_(a,h,r);return h?u.jsxs(Se,{sx:{mb:2},children:[u.jsxs(Se,{sx:{display:"flex",justifyContent:"space-between",alignItems:"center",mb:1},children:[u.jsx(oe,{variant:"body2",sx:{color:"text.secondary"},children:g}),u.jsx(oe,{variant:"body2",sx:{color:"error.main",fontWeight:500},children:r("payment.checkout.vendor.progress",{progress:0})})]}),u.jsx(zl,{variant:"determinate",value:100,sx:{height:8,borderRadius:4,backgroundColor:"grey.200","& .MuiLinearProgress-bar":{borderRadius:4,backgroundColor:"error.main"}}})]}):!a.name&&!a.title?u.jsx(yD,{}):u.jsxs(Se,{sx:{mb:2},children:[u.jsxs(Se,{sx:{display:"flex",justifyContent:"space-between",alignItems:"center",mb:1},children:[u.jsxs(oe,{variant:"body2",sx:{color:"text.secondary",display:"flex",alignItems:"center"},children:[g," ",c?u.jsx(s0,{sx:{color:"success.main",ml:.5},fontSize:"small"}):null]}),c?null:u.jsx(oe,{variant:"body2",sx:{color:"text.secondary",fontWeight:500},children:r("payment.checkout.vendor.progress",{progress:o})})]}),u.jsx(zl,{variant:"determinate",value:o||0,sx:{height:8,borderRadius:4,backgroundColor:"grey.200","& .MuiLinearProgress-bar":{borderRadius:4,backgroundColor:c?"success.main":"primary.main",transition:"background-color 0.3s linear"}}})]})}function gD({mode:a,pageInfo:r={},vendorCount:o=0,sessionId:s="",message:f,action:m,payee:c,invoiceId:h="",subscriptionId:g="",subscriptions:y=[]}){const{t:S,locale:x}=ft(),{prefix:A,api:v}=_n(),[N,B]=V.useState(null),[O,k]=V.useState(!1),[K,j]=V.useState(!1),w=V.useRef(Date.now()),T=S0()?.arcSphere;let R=null;V.useEffect(()=>{if(o===0||!s)return;const re=async Z=>{try{const ne=await v.get(Dt(A,`/api/vendors/order/${s}/status`),{}),me=Date.now()-w.current>6*1e3,P=ne.data?.vendors?.every(F=>F.progress>=100),D=ne.data?.vendors?.some(F=>F.status==="failed"||me&&!!F.error&&!!F.error_message);(D||P)&&clearInterval(Z),j(D),k(!D&&P),B(ne.data)}catch(ne){console.error("Failed to fetch vendor status:",ne)}};re();const Q=setInterval(()=>{re(Q)},5e3);return()=>clearInterval(Q)},[o,v,A,s]),V.useEffect(()=>{if(T&&O)try{Ky?.call?.("arc__toast",{text:S("payment.checkout.vendor.arcSphereToast")});const re=setTimeout(()=>{Ky?.call?.("arcClosePage")},3e3);return()=>clearTimeout(re)}catch{}},[O,S,x,T]);const q=()=>{const re=[];for(let Q=0;Q<o;Q++)re.push(u.jsx(yD,{},`placeholder-${Q}`));return re},z=()=>N?N.vendors?.map((re,Q)=>u.jsx(G_,{vendor:re},re.title||`vendor-${Q}`)):q(),$=()=>o===0?null:u.jsxs(Yy,{elevation:0,sx:{p:3,backgroundColor:"grey.50",borderRadius:2,width:"100%",mt:2,display:"flex",flexDirection:"column",gap:2},children:[z(),K?u.jsx(oe,{variant:"h6",sx:{color:"warning.main",mb:1},children:S("payment.checkout.vendor.failedMsg")}):null,r?.success_message?.[x]&&O?u.jsx(oe,{variant:"h6",sx:{color:"text.primary",mb:1},children:r?.success_message?.[x]}):null]});return["subscription","setup"].includes(m)?y&&y.length>1?R=u.jsx(Yy,{elevation:0,sx:{p:3,backgroundColor:"grey.50",borderRadius:2,width:"100%",mt:2,display:"flex",flexDirection:"column",gap:2},children:y.map(re=>u.jsxs(Se,{sx:{display:"flex",alignItems:"center",justifyContent:"space-between"},children:[u.jsx(oe,{variant:"body2",sx:{color:"text.secondary",fontWeight:500},children:re.description}),u.jsx(Se,{sx:{flex:1,borderBottom:"1px dashed",borderColor:"grey.300",mx:2}}),u.jsx(Qy,{variant:"text",color:"primary",size:"small",children:u.jsx(cr,{href:Dt(A,`/customer/subscription/${re.id}`),sx:{color:"text.secondary"},children:S("payment.checkout.next.view")})})]},re.id))}):g&&(R=u.jsx(Qy,{variant:"outlined",color:"primary",sx:{mt:2},children:u.jsx(cr,{href:Dt(A,`/customer/subscription/${g}`),children:S("payment.checkout.next.subscription",{payee:c})})})):h&&(R=u.jsx(oe,{sx:{textAlign:"center",mt:2},children:u.jsx(cr,{href:Dt(A,`/customer/invoice/${h}`),children:S("payment.checkout.next.invoice",{payee:c})})})),u.jsx(u0,{in:!0,children:u.jsxs(ge,{direction:"column",sx:{alignItems:"center",justifyContent:a==="standalone"?"center":"flex-start",height:a==="standalone"?"fit-content":300},children:[u.jsx(K_,{children:u.jsxs("div",{className:"check-icon",children:[u.jsx("span",{className:"icon-line line-tip"}),u.jsx("span",{className:"icon-line line-long"}),u.jsx("div",{className:"icon-circle"}),u.jsx("div",{className:"icon-fix"})]})}),u.jsx(oe,{variant:"h5",sx:{color:"text.primary",mb:3},children:f}),u.jsx(oe,{variant:"body1",sx:{color:"text.secondary",textAlign:"center",fontSize:"14px"},children:S("payment.checkout.completed.tip",{payee:c})}),$(),R]})})}const K_=l0("div")`
|
|
45
45
|
width: 80px;
|
|
46
46
|
height: 115px;
|
|
47
47
|
|
|
@@ -654,7 +654,7 @@ function print() { __p += __j.call(arguments, '') }
|
|
|
654
654
|
padding-right: 20px;
|
|
655
655
|
}
|
|
656
656
|
}
|
|
657
|
-
`;function Mw(a){const r=Object.assign({customer_id:"",subscription_id:"",credit_grant_id:"",source:"",pageSize:10,onTableDataChange:()=>{},showAdminColumns:!1,showTimeFilter:!1,includeGrants:!1,mode:"portal"},a);return u.jsx(XA,{...r})}const Jg="z2qaCNvKMv5GjouKdcDWexv6WqtHbpNPQDnAk";function JA(){const a=window.blocklet?.prefix||"/",r=window.location?.origin;if(window.__PAYMENT_KIT_BASE_URL)try{if(new URL(window.__PAYMENT_KIT_BASE_URL).origin!==window.location.origin)return window.__PAYMENT_KIT_BASE_URL}catch{}if((window.blocklet?.componentId||"").split("/").pop()===Jg)return`${r}${a}`;const s=(window.blocklet?.componentMountPoints||[]).find(f=>f?.did===Jg);return s?`${r}${s.mountPoint}`:`${r}${a}`}function eE(a){if(typeof window>"u")return"en";try{const r=localStorage.getItem("locale");if(r)return r}catch{}return a&&a.length>0?a[0]:navigator.language?.split("-")[0]||"en"}function tE(){const a=v0();return a.interceptors.request.use(r=>{const o=JA();r.baseURL=o||"";const s=eE(window.blocklet?.languages),f=new URLSearchParams(r.url?.split("?").pop());r.params={...r.params||{},locale:s};const m=window.__PAYMENT_KIT_AUTH_TOKEN;if(m&&typeof r.params.authToken>"u"&&!f.has("authToken")&&(r.params.authToken=m),typeof r.params.livemode>"u"&&f.has("livemode")===!1){const c=localStorage.getItem("livemode");r.params.livemode=E0(c)?!0:JSON.parse(c)}return r},r=>Promise.reject(r)),a}const Nw=tE(),Bw={START_PAYMENT_LINK:a=>`/api/checkout-sessions/start/${a}`,RETRIEVE_SESSION:a=>`/api/checkout-sessions/retrieve/${a}`,STATUS_SESSION:a=>`/api/checkout-sessions/status/${a}`,SWITCH_CURRENCY:a=>`/api/checkout-sessions/${a}/switch-currency`,SUBMIT:a=>`/api/checkout-sessions/${a}/submit`,DONATE_SUBMIT:a=>`/api/checkout-sessions/${a}/donate-submit`,FAST_CHECKOUT_CONFIRM:a=>`/api/checkout-sessions/${a}/fast-checkout-confirm`,EXCHANGE_RATE:a=>`/api/checkout-sessions/${a}/exchange-rate`,ADJUST_QUANTITY:a=>`/api/checkout-sessions/${a}/adjust-quantity`,UPSELL:a=>`/api/checkout-sessions/${a}/upsell`,DOWNSELL:a=>`/api/checkout-sessions/${a}/downsell`,CROSS_SELL:a=>`/api/checkout-sessions/${a}/cross-sell`,CHANGE_AMOUNT:a=>`/api/checkout-sessions/${a}/amount`,SLIPPAGE:a=>`/api/checkout-sessions/${a}/slippage`,ABORT_STRIPE:a=>`/api/checkout-sessions/${a}/abort-stripe`,SKIP_PAYMENT_METHOD:a=>`/api/checkout-sessions/${a}/skip-payment-method`,RECALCULATE_PROMOTION_SESSION:a=>`/api/checkout-sessions/${a}/recalculate-promotion`,APPLY_PROMOTION:a=>`/api/checkout-sessions/${a}/apply-promotion`,REMOVE_PROMOTION:a=>`/api/checkout-sessions/${a}/remove-promotion`,CUSTOMER_ME:"/api/customers/me",VENDOR_ORDER_STATUS:a=>`/api/vendors/order/${a}/status`},nE=V.createContext(null);function Uw(){const a=V.useContext(nE);if(!a)throw new Error("useSessionContext must be used within <CheckoutProvider>");return a}const aE=V.createContext(null);function iE(){const a=V.useContext(aE);if(!a)throw new Error("usePaymentMethodContext must be used within <CheckoutProvider>");return a}const rE=V.createContext(null);function Ow(){const a=V.useContext(rE);if(!a)throw new Error("useExchangeRateContext must be used within <CheckoutProvider>");return a}const oE=V.createContext(null);function zw(){const a=V.useContext(oE);if(!a)throw new Error("useCustomerFormContext must be used within <CheckoutProvider>");return a}const sE=V.createContext(null);function Pw(){const a=V.useContext(sE);if(!a)throw new Error("useSubmitContext must be used within <CheckoutProvider>");return a}const qw={day:"common.daily",week:"common.weekly",month:"common.monthly",year:"common.yearly"};function Lw(a){return!a||a.length!==2?"":String.fromCodePoint(...a.toUpperCase().split("").map(r=>127397+r.charCodeAt(0)))}function AD(a,r){if(!a||!r)return"0";try{const o=qt(String(a),r.decimal||0),s=Number(o);if(!Number.isFinite(s))return"0";const f=Math.abs(s),m=f>0&&f<.01?6:2;return s.toLocaleString("en-US",{minimumFractionDigits:0,maximumFractionDigits:m}).replace(/(\.\d*?)0+$/,"$1").replace(/\.$/,"")||"0"}catch{return"0"}}function lE(a,r){if(!a||!r)return"0";const s=(a.price_currency_options||a.currency_options||[]).find(f=>f.currency_id===r.id);return s?s.custom_unit_amount&&(s.custom_unit_amount.preset||s.custom_unit_amount.presets?.[0])||s.unit_amount:a.currency_id===r.id&&a.unit_amount||"0"}function Iw(a,r,o){if(!a||!r)return null;if(a.pricing_type==="dynamic"&&o&&a.base_amount){const f=Number(o);if(f>0&&Number.isFinite(f)){const m=Number(a.base_amount);if(m>0&&Number.isFinite(m)){const c=m/f,h=Math.abs(c),g=h>0&&h<.01?6:2;return c.toLocaleString("en-US",{minimumFractionDigits:0,maximumFractionDigits:g}).replace(/(\.\d*?)0+$/,"$1").replace(/\.$/,"")||"0"}}}if(!o&&a.base_amount!=null){const f=Number(a.base_amount);if(f>=0&&Number.isFinite(f))return f.toLocaleString("en-US",{minimumFractionDigits:2,maximumFractionDigits:2})}return AD(lE(a,r),r)}function $w(a,r,o){const s=a(r);return s&&!s.includes(".")?s:o}const e0={"& .MuiTooltip-tooltip":{bgcolor:"background.paper",color:"text.primary",border:"1px solid",borderColor:"divider",borderRadius:"10px",boxShadow:"0 8px 24px rgba(0,0,0,0.12)",p:1.5,maxWidth:280,fontSize:12},"& .MuiTooltip-arrow":{color:"background.paper","&::before":{border:"1px solid",borderColor:"divider"}}};function Vw(a,r,o){const s=o||"day",f=r>1?`common.${s}s`:`common.${s}`;return a("payment.checkout.free",{count:r,interval:a(f)})}function Hw(a,r,o,s){const f=r?.mode||"payment",m=["subscription","setup"].includes(f),c=s.length===1&&f==="payment"&&s[0]?.price?.product?.type==="credit"&&s[0]?.price?.metadata?.credit_config;let h;c?h="topup":m?h="subscription":h="oneTime";const g=a(`payment.checkout.typeBadge.${h}`),y=o?.name||s[0]?.price?.product?.name||"";let S=y;y&&(m?S=a("payment.checkout.headerTitle.subscribe",{name:y}):c||(S=a("payment.checkout.headerTitle.purchase",{name:y})));let x="";if(c)x=a("payment.checkout.subtitle.creditsTopup");else if(m){const A=o?.metadata?.plan_name||o?.metadata?.plan_display_name;A&&(x=A)}else x=a("payment.checkout.subtitle.oneTime");return{badge:h,badgeLabel:g,title:S,subtitle:x}}const uE=Mf`
|
|
657
|
+
`;function Mw(a){const r=Object.assign({customer_id:"",subscription_id:"",credit_grant_id:"",source:"",pageSize:10,onTableDataChange:()=>{},showAdminColumns:!1,showTimeFilter:!1,includeGrants:!1,mode:"portal"},a);return u.jsx(XA,{...r})}const Jg="z2qaCNvKMv5GjouKdcDWexv6WqtHbpNPQDnAk";function JA(){const a=window.blocklet?.prefix||"/",r=window.location?.origin;if(window.__PAYMENT_KIT_BASE_URL)try{if(new URL(window.__PAYMENT_KIT_BASE_URL).origin!==window.location.origin)return window.__PAYMENT_KIT_BASE_URL}catch{}if((window.blocklet?.componentId||"").split("/").pop()===Jg)return`${r}${a}`;const s=(window.blocklet?.componentMountPoints||[]).find(f=>f?.did===Jg);return s?`${r}${s.mountPoint}`:`${r}${a}`}function eE(a){if(typeof window>"u")return"en";try{const r=localStorage.getItem("locale");if(r)return r}catch{}return a&&a.length>0?a[0]:navigator.language?.split("-")[0]||"en"}function tE(){const a=v0();return a.interceptors.request.use(r=>{const o=JA();r.baseURL=o||"";const s=eE(window.blocklet?.languages),f=new URLSearchParams(r.url?.split("?").pop());r.params={...r.params||{},locale:s};const m=window.__PAYMENT_KIT_AUTH_TOKEN;if(m&&typeof r.params.authToken>"u"&&!f.has("authToken")&&(r.params.authToken=m),typeof r.params.livemode>"u"&&f.has("livemode")===!1){const c=localStorage.getItem("livemode");r.params.livemode=E0(c)?!0:JSON.parse(c)}return r},r=>Promise.reject(r)),a}const Nw=tE(),Bw={START_PAYMENT_LINK:a=>`/api/checkout-sessions/start/${a}`,RETRIEVE_SESSION:a=>`/api/checkout-sessions/retrieve/${a}`,STATUS_SESSION:a=>`/api/checkout-sessions/status/${a}`,RECONCILE_STRIPE_SESSION:a=>`/api/checkout-sessions/${a}/stripe-reconcile`,SWITCH_CURRENCY:a=>`/api/checkout-sessions/${a}/switch-currency`,SUBMIT:a=>`/api/checkout-sessions/${a}/submit`,DONATE_SUBMIT:a=>`/api/checkout-sessions/${a}/donate-submit`,FAST_CHECKOUT_CONFIRM:a=>`/api/checkout-sessions/${a}/fast-checkout-confirm`,EXCHANGE_RATE:a=>`/api/checkout-sessions/${a}/exchange-rate`,ADJUST_QUANTITY:a=>`/api/checkout-sessions/${a}/adjust-quantity`,UPSELL:a=>`/api/checkout-sessions/${a}/upsell`,DOWNSELL:a=>`/api/checkout-sessions/${a}/downsell`,CROSS_SELL:a=>`/api/checkout-sessions/${a}/cross-sell`,CHANGE_AMOUNT:a=>`/api/checkout-sessions/${a}/amount`,SLIPPAGE:a=>`/api/checkout-sessions/${a}/slippage`,ABORT_STRIPE:a=>`/api/checkout-sessions/${a}/abort-stripe`,SKIP_PAYMENT_METHOD:a=>`/api/checkout-sessions/${a}/skip-payment-method`,RECALCULATE_PROMOTION_SESSION:a=>`/api/checkout-sessions/${a}/recalculate-promotion`,APPLY_PROMOTION:a=>`/api/checkout-sessions/${a}/apply-promotion`,REMOVE_PROMOTION:a=>`/api/checkout-sessions/${a}/remove-promotion`,CUSTOMER_ME:"/api/customers/me",VENDOR_ORDER_STATUS:a=>`/api/vendors/order/${a}/status`},nE=V.createContext(null);function Uw(){const a=V.useContext(nE);if(!a)throw new Error("useSessionContext must be used within <CheckoutProvider>");return a}const aE=V.createContext(null);function iE(){const a=V.useContext(aE);if(!a)throw new Error("usePaymentMethodContext must be used within <CheckoutProvider>");return a}const rE=V.createContext(null);function Ow(){const a=V.useContext(rE);if(!a)throw new Error("useExchangeRateContext must be used within <CheckoutProvider>");return a}const oE=V.createContext(null);function zw(){const a=V.useContext(oE);if(!a)throw new Error("useCustomerFormContext must be used within <CheckoutProvider>");return a}const sE=V.createContext(null);function Pw(){const a=V.useContext(sE);if(!a)throw new Error("useSubmitContext must be used within <CheckoutProvider>");return a}const qw={day:"common.daily",week:"common.weekly",month:"common.monthly",year:"common.yearly"};function Lw(a){return!a||a.length!==2?"":String.fromCodePoint(...a.toUpperCase().split("").map(r=>127397+r.charCodeAt(0)))}function AD(a,r){if(!a||!r)return"0";try{const o=qt(String(a),r.decimal||0),s=Number(o);if(!Number.isFinite(s))return"0";const f=Math.abs(s),m=f>0&&f<.01?6:2;return s.toLocaleString("en-US",{minimumFractionDigits:0,maximumFractionDigits:m}).replace(/(\.\d*?)0+$/,"$1").replace(/\.$/,"")||"0"}catch{return"0"}}function lE(a,r){if(!a||!r)return"0";const s=(a.price_currency_options||a.currency_options||[]).find(f=>f.currency_id===r.id);return s?s.custom_unit_amount&&(s.custom_unit_amount.preset||s.custom_unit_amount.presets?.[0])||s.unit_amount:a.currency_id===r.id&&a.unit_amount||"0"}function Iw(a,r,o){if(!a||!r)return null;if(a.pricing_type==="dynamic"&&o&&a.base_amount){const f=Number(o);if(f>0&&Number.isFinite(f)){const m=Number(a.base_amount);if(m>0&&Number.isFinite(m)){const c=m/f,h=Math.abs(c),g=h>0&&h<.01?6:2;return c.toLocaleString("en-US",{minimumFractionDigits:0,maximumFractionDigits:g}).replace(/(\.\d*?)0+$/,"$1").replace(/\.$/,"")||"0"}}}if(!o&&a.base_amount!=null){const f=Number(a.base_amount);if(f>=0&&Number.isFinite(f))return f.toLocaleString("en-US",{minimumFractionDigits:2,maximumFractionDigits:2})}return AD(lE(a,r),r)}function $w(a,r,o){const s=a(r);return s&&!s.includes(".")?s:o}const e0={"& .MuiTooltip-tooltip":{bgcolor:"background.paper",color:"text.primary",border:"1px solid",borderColor:"divider",borderRadius:"10px",boxShadow:"0 8px 24px rgba(0,0,0,0.12)",p:1.5,maxWidth:280,fontSize:12},"& .MuiTooltip-arrow":{color:"background.paper","&::before":{border:"1px solid",borderColor:"divider"}}};function Vw(a,r,o){const s=o||"day",f=r>1?`common.${s}s`:`common.${s}`;return a("payment.checkout.free",{count:r,interval:a(f)})}function Hw(a,r,o,s){const f=r?.mode||"payment",m=["subscription","setup"].includes(f),c=s.length===1&&f==="payment"&&s[0]?.price?.product?.type==="credit"&&s[0]?.price?.metadata?.credit_config;let h;c?h="topup":m?h="subscription":h="oneTime";const g=a(`payment.checkout.typeBadge.${h}`),y=o?.name||s[0]?.price?.product?.name||"";let S=y;y&&(m?S=a("payment.checkout.headerTitle.subscribe",{name:y}):c||(S=a("payment.checkout.headerTitle.purchase",{name:y})));let x="";if(c)x=a("payment.checkout.subtitle.creditsTopup");else if(m){const A=o?.metadata?.plan_name||o?.metadata?.plan_display_name;A&&(x=A)}else x=a("payment.checkout.subtitle.oneTime");return{badge:h,badgeLabel:g,title:S,subtitle:x}}const uE=Mf`
|
|
658
658
|
75%, 100% { transform: scale(2); opacity: 0; }
|
|
659
659
|
`;function cE(a){if(!a)return"—";const r=new Date(a),o=s=>String(s).padStart(2,"0");return`${r.getFullYear()}-${o(r.getMonth()+1)}-${o(r.getDate())} ${o(r.getHours())}:${o(r.getMinutes())}`}function Yw({hasDynamicPricing:a,rate:r,slippage:o,currencySymbol:s,isSubscription:f}){const{t:m}=ft(),[c,h]=V.useState(!1),[g,y]=V.useState(null),[S,x]=V.useState(!1),[A,v]=V.useState(o?.percent??.5);if(V.useEffect(()=>{v(o?.percent??.5)},[o?.percent]),!a||!r.value||r.status==="unavailable")return null;const N=r.display||`$${Number(r.value).toFixed(2)}`,B=f&&typeof o?.set=="function",O=()=>{y({mode:"percent",percent:A}),h(!0)},k=()=>{h(!1),y(null)},K=ne=>{y(me=>me?{...me,percent:ne}:{mode:"percent",percent:ne})},j=ne=>{y(ne)},w=async()=>{if(!(!g||!o?.set)){x(!0);try{v(g.percent),await o.set({...g,base_currency:"USD"}),h(!1),y(null)}catch(ne){v(o?.percent??.5),console.error("Failed to update slippage",ne)}finally{x(!1)}}},G={fontSize:11,fontWeight:700,color:"primary.main",letterSpacing:"0.02em"},T=r.providerDisplay||r.provider||"—",R=cE(r.fetchedAt),q=`$${r.value}`,z=e0,$={fontSize:12,color:"text.secondary",lineHeight:1.4},re={fontSize:12,fontWeight:600,color:"text.primary",lineHeight:1.4},Q=u.jsxs(ge,{spacing:.75,children:[u.jsxs(oe,{sx:{fontSize:13,fontWeight:700,color:"text.primary",mb:.25},children:["1 ",s," = ",q]}),u.jsx(Se,{sx:{borderTop:"1px solid",borderColor:"divider",pt:.75},children:u.jsxs(ge,{spacing:.5,children:[u.jsxs(ge,{direction:"row",justifyContent:"space-between",spacing:2,children:[u.jsx(oe,{sx:$,children:m("payment.checkout.quote.detailProvider")}),u.jsx(oe,{sx:re,children:T})]}),u.jsxs(ge,{direction:"row",justifyContent:"space-between",spacing:2,children:[u.jsx(oe,{sx:$,children:m("payment.checkout.quote.detailUpdatedAt")}),u.jsx(oe,{sx:re,children:R})]})]})})]}),Z=m("payment.checkout.quote.slippage.tooltip");return u.jsxs(u.Fragment,{children:[u.jsx(Se,{sx:{width:"100%",pt:3,pb:1,borderTop:"1px solid",borderColor:"divider"},children:u.jsx(Gn,{in:!0,timeout:300,children:u.jsxs(ge,{direction:"row",sx:{alignItems:"center",justifyContent:"space-between"},children:[u.jsx(Un,{title:Q,placement:"top",arrow:!0,slotProps:{popper:{sx:z}},children:u.jsxs(ge,{direction:"row",alignItems:"center",spacing:1,sx:{cursor:"default"},children:[u.jsxs(Se,{sx:{position:"relative",width:8,height:8,flexShrink:0},children:[u.jsx(Se,{sx:{position:"absolute",inset:0,borderRadius:"50%",bgcolor:"#60a5fa",opacity:.6,animation:`${uE} 1s cubic-bezier(0, 0, 0.2, 1) infinite`}}),u.jsx(Se,{sx:{position:"relative",width:8,height:8,borderRadius:"50%",bgcolor:"primary.main"}})]}),u.jsxs(oe,{sx:G,children:["1 ",s," ≈ ",N]})]})}),B&&u.jsx(Un,{title:Z,placement:"top",arrow:!0,slotProps:{popper:{sx:e0}},children:u.jsxs(ge,{direction:"row",alignItems:"center",spacing:.75,onClick:O,sx:{cursor:"pointer","&:hover":{opacity:1},"&:hover .tune-icon":{transform:"rotate(90deg)"},transition:"opacity 0.2s"},children:[u.jsx(ux,{className:"tune-icon",sx:{fontSize:16,color:"primary.main",transition:"transform 0.5s"}}),u.jsxs(oe,{sx:G,children:[m("payment.checkout.quote.detailSlippage")," ",A,"%"]})]})})]})})}),u.jsxs(lo,{open:c,onClose:k,maxWidth:"sm",fullWidth:!0,children:[u.jsx(Zl,{children:m("payment.checkout.quote.slippage.title")}),u.jsx(uo,{children:u.jsx(bD,{value:g?.percent??A,onChange:K,config:g||{mode:"percent",percent:A},onConfigChange:j,exchangeRate:r.value?String(r.value):null,baseCurrency:"USD",disabled:S,sx:{mt:1},onCancel:k,onSave:w})})]})]})}const ED=Mf`
|
|
660
660
|
from { transform: scale(0); opacity: 0; }
|
|
@@ -681,4 +681,4 @@ function print() { __p += __j.call(arguments, '') }
|
|
|
681
681
|
font-weight: 400;
|
|
682
682
|
line-height: 20px;
|
|
683
683
|
text-align: center;
|
|
684
|
-
`;function CE({error:a=void 0}){const{t:r}=ft();return u.jsxs(xE,{children:[u.jsx(t0,{children:a?.message||r("common.error")}),u.jsx(t0,{children:a?.stack||r("common.error")})]})}function SE({error:a}){return u.jsx(CE,{error:a})}function _E(a){return typeof window<"u"&&window?.blocklet?.serviceHost||""||a}const{SessionProvider:AE,SessionContext:EE,SessionConsumer:Kw,withSession:Qw}=Zx();function wD(){return V.useContext(EE)}function wE(a){const{session:r,connectApi:o,events:s}=wD(),[f]=tC(),m=f.get("embed")||sessionStorage.getItem("embed");return V.useEffect(()=>{m&&sessionStorage.setItem("embed",m)},[m]),V.useEffect(()=>{s.once("logout",()=>{r.login(()=>{},{openMode:"redirect",redirect:window.location.href})})},[]),V.useEffect(()=>{r.initialized&&!r.user&&r.login(()=>{},{openMode:"redirect",redirect:window.location.href})},[r.initialized]),r.user?u.jsx(sD,{session:r,connect:o,children:u.jsx(Xx,{currentTab:"/customer",hideFooter:!0,embed:m==="1",notLoginContent:"undefined",children:a.children})}):null}function n0(){return u.jsx(Se,{sx:{minHeight:"100vh",display:"flex",alignItems:"center",justifyContent:"center"},children:u.jsx(gr,{})})}function TE(){const a=window.blocklet;return!!(a&&a.appPid&&a.prefix)}function kE(a){const{session:r,connectApi:o}=wD();return V.useEffect(()=>{r.initialized&&!r.user&&r.login(()=>{})},[r.initialized]),!TE()||!r.initialized?u.jsx(n0,{}):r.user?u.jsxs(sD,{session:r,connect:o,children:[u.jsx(Uf,{meta:void 0,addons:void 0,sessionManagerProps:void 0,homeLink:void 0,theme:void 0,hideNavMenu:void 0,maxWidth:!1,sx:{borderBottom:"1px solid",borderColor:"divider"}}),u.jsx(Se,{sx:{flex:1,maxWidth:1200,mx:"auto",px:3,py:3,width:"100%"},children:a.children})]}):u.jsx(n0,{})}function Zw({pending:a=!0}){const[r,o]=V.useState(0);return V.useEffect(()=>{const s=setInterval(()=>{o(f=>{if(f===100)return s&&clearInterval(s),-1;const m=Math.random()*10;return Math.min(f+m,100)})},a?500:30);return()=>{clearInterval(s)}},[a]),u.jsx(Se,{sx:{width:"100%",height:"4px",position:"fixed",top:0,left:0,zIndex:"999999"},children:u.jsx(zl,{variant:"determinate",value:r,sx:{opacity:r===-1?0:1,transition:"0.3s"}})})}const TD=V.createContext({});function FE({children:a}){const[r,o]=V.useTransition(),s=V.useMemo(()=>({isPending:r,startTransition:o}),[r]);return u.jsx(TD.Provider,{value:s,children:a})}function Xw(){return V.useContext(TD)}var jE=Wx();const RE=ri(jE),ME=Wl({common:{redirecting:"Redirecting...",title:"Name",estimated:"Estimated",total:"Total",active:"Active",every:"Every",inactive:"Inactive",enabled:"Enabled",disabled:"Disabled",metadata:{label:"Metadata",description:"Add custom key-value pairs to store additional information about this meter.",add:"Add more metadata",edit:"Edit metadata",empty:"No metadata",emptyTip:"You haven't added any metadata yet. You can add it now",formMode:"Switch to form mode",jsonMode:"Switch to JSON mode",jsonPlaceholder:"Enter JSON data...",invalidJson:"Invalid JSON format. Please check your input",formatJson:"Format JSON"},price:"Price",add:"Add",fullscreen:"Fullscreen",exit:"Exit",maxLength:"Max {len} characters",minLength:"Min {len} characters",invalidCharacters:"Invalid characters",latinOnly:`Must contain at least one letter and cannot include Chinese characters or special characters such as <, >, ", ' or \\`,loading:"Loading...",loadMore:"Load more",noMoreData:"No more data",rechargeTime:"Recharge Time",submit:"Submit",custom:"Custom",estimatedDuration:"{duration} est.",detail:"Detail",setting:"Setting",slippage:"Slippage Limit",slippageMinRate:"Min acceptable rate {rate} {currency}",slippageTooltip:"The minimum acceptable exchange rate for automatic payments. If the rate drops below this, payment will be paused.",welcome:"Welcome to Payment Kit",welcomeDesc:"Start accepting payments in minutes with Payment Kit. Choose a feature to get started.",quickStart:"Quick Start Guides",advancedFeatures:"Advanced Features",quickStarts:"Quick Starts",homeTagline:"A decentralized Stripe-like payment solution for Blocklets",adminDashboard:"Admin Dashboard",customerPortal:"Customer Portal",copy:"Copy",copied:"Copied",copySuccess:"Copied successfully",copyFailed:"Copy failed",copyTip:"Please copy manually",save:"Save",saving:"Saving...",saved:"Saved successfully",refresh:"Refresh",cancel:"Cancel",back:"Back",know:"I Know",confirm:"Confirm",increased:"increased",decreased:"decreased",edit:"Edit",view:"View",select:"Select",clear:"Clear",delete:"Delete",deleting:"Deleting...",activate:"Activate",deactivate:"Deactivate",yes:"Yes",no:"No",never:"Never",created:"Created",updated:"Updated",valid:"Valid",events:"Events",details:"Details",discount:"Discount",deleted:"Deleted",maxAmount:"Max amount is {max}",days:{sunday:"Sunday",monday:"Monday",tuesday:"Tuesday",wednesday:"Wednesday",thursday:"Thursday",friday:"Friday",saturday:"Saturday"},name:"Name",type:"Type",status:"Status",remainingCredit:"Remaining Credit",scope:"Scope",source:"Source",effectiveDate:"Effective Date",expirationDate:"Expiration Date",creditGrant:"Grant",date:"Date",subscription:"Subscription",meter:"Meter",meterEvent:"Meter Event",creditAmount:"Credit",createdAt:"Created At",expiresAt:"Expires At",general:"All usage-based prices",specific:"Specific usage-based prices",paid:"Paid",promotional:"Promotional",viewInvoice:"View Invoice",viewSourceData:"View Source",goToConfigure:"Go to Configure",noData:"No data"},notification:{preferences:{title:"Email Notification Settings",button:"Email Settings",frequency:{label:"Notification Frequency",default:"Instant Notifications (Default)",daily:"Daily",weekly:"Weekly",monthly:"Monthly"},day:"Day",timeFormatError:"Please enter a valid time in 24-hour format (HH:MM)",monthlyHelp:"If day is not available in a month, the last day will be used",subscriptionRenewalNote:"This setting applies to subscription renewal notifications."}},admin:{description:"Manage your products, pricing, billing, and payments.",balances:"Balances",trends:"Trends",addresses:"Addresses",metrics:"Metrics",attention:"Attention",overview:"Overview",overviewPage:{financialIndicatorsTitle:"Financial Indicators",businessMonitoringTitle:"Business Monitoring",filters:{dateRange:"Select Date Range",currencyLabel:"Currencies",productLabel:"Products",regionLabel:"Regions",allCurrencies:"All Currencies",allProducts:"All Products",allRegions:"All Regions"},financialIndicators:{totalIncome:{title:"Total Income",subtitle:"User's actual payment"},refundAmount:{title:"Refund Amount",subtitle:"Total refunds issued"},costOfGoods:{title:"Cost of Goods",subtitle:"Supplier share"},netRevenue:{title:"Net Revenue",subtitle:"Revenue after vendor costs"},promotionCost:{title:"Promotion Cost",subtitle:"Discount"},taxedRevenue:{title:"Taxed Revenue",subtitle:"Revenue with tax"}},charts:{title:"Transaction Trends",payments:"Payments",payouts:"Payouts",refunds:"Refunds",allCurrencies:"All currencies"},metrics:{transaction:"Transaction Metrics",essential:"Essential Metrics"},overdue:{title:"Pending Consumption",subtitle:"Unpaid credit consumption",customers:"{count} customers",events:"{count} pending records",viewAll:"View All",noOverdue:"No pending consumption"}},payments:"Payments",connections:"Connections",back:"Back",actions:"Actions",create:"Create",creating:"Creating...",save:"Save",saving:"Saving...",cancel:"Cancel",paymentLinks:"Payment links",paymentMethods:"Payment methods",customers:"Customers",products:"Products",invoiceItems:"Invoice Items",pricing:"Pricing",coupons:"Coupons",tax:"Tax",taxRates:"Tax Rates",taxRate:{create:"Create Tax Rate",createTitle:"Create Tax Rate",createAction:"Add Tax Rate",created:"Tax rate created successfully",updated:"Tax rate updated successfully",deleted:"Tax rate deleted successfully",label:"Tax Rate",view:"View Tax Rate",displayName:"Display Name",displayNamePlaceholder:"Name shown on invoices and reports",displayNameAuto:"Auto-generated if left empty",displayNameRequired:"Display name is required",description:"Description",descriptionPlaceholder:"Optional description",country:"Country",countryRequired:"Country is required",state:"State/Province",postalCode:"Postal Code",taxCode:"Product Tax Code",taxCodeDescription:"Tax codes are used to calculate automatic taxes based on product type and location. You can ",taxCodeDescriptionLink:"manage tax rates",taxCodeDescriptionSuffix:" to create custom tax rates for specific tax codes and regions.",selectTaxCode:"Select product tax code",percentage:"Tax Rate (%)",percentageRequired:"Tax rate percentage is required",percentageMin:"Tax rate must be 0% or higher",percentageMax:"Tax rate must be less than 100%",active:"Active by default",location:"Region",advanced:"Advanced options",search:"Search tax rates",searchCountry:"Search country",back:"Back to tax rates",associatedInvoices:"Related Invoices",deleteTitle:"Delete Tax Rate",deleteMessage:"Are you sure you want to delete tax rate “{name}”? This action cannot be undone.",deactivateTitle:"Deactivate Tax Rate",deactivateMessage:"Deactivate “{name}”? It will no longer apply automatically to invoices.",activateTitle:"Activate Tax Rate",activateMessage:"Activate “{name}”? It will be available for future invoices.",createTitleShort:"Add tax rate",edit:"Edit",editTitle:"Edit Tax Rate",selectTaxCodeHint:"We'll use this tax code to calculate automatic tax on invoices.",searchPlaceholder:"Search by product or tax code",previewPlaceholder:"Select a tax code to see details.",usePreset:"Use preset",noPreset:"No preset selected",noSuggestions:"No tax codes match your search.",relatedInvoiceNum:"Related Invoices",notUsed:"Not used",taxCodeLabel:"Tax code: {code}",types:{general:"General",digital:"Digital products",services:"Services",physical:"Physical goods"}},pricingTables:"Pricing tables",vendors:"Vendors",billing:"Billing",invoices:"Invoices",subscriptions:"Subscriptions",meters:"Meters",meterEvents:{title:"Meter Events"},overdue:{title:"Pending Consumption",pendingAmount:"Pending Amount",eventCount:"Pending Records",noOverdue:"No pending consumption",selectCurrency:"Currency"},meter:{add:"Add meter",edit:"Edit meter",save:"Save meter",saved:"Meter successfully saved",creditMode:{onchain:"OnChain",onChainDescription:"Once enabled, your credit will be published as a Token on the ArcBlock blockchain",tokenConfiguration:"Token Configuration",createNewToken:"Create New Token",useExistingToken:"Use Existing Token",createTokenHint:"Fill in the token name and symbol to create a new Token",tokenName:"Token Name",tokenNamePlaceholder:"Enter token name",tokenNameRequired:"Token name is required",tokenSymbol:"Token Symbol",tokenSymbolPlaceholder:"Enter token symbol",tokenSymbolRequired:"Token symbol is required",tokenSymbolFormat:"Symbol must be 1-6 uppercase letters or numbers",createTokenButton:"Create Token",creatingToken:"Creating...",tokenCreated:"Token created successfully",tokenCreatedLabel:"Token Created",tokenAddress:"Token Address",selectToken:"Select Token",selectTokenPlaceholder:"Select an existing token",tokenAddressRequired:"Token address is required",enabled:"Enabled"},activate:"Activate meter",activated:"Meter activated successfully",deactivate:"Deactivate meter",deactivated:"Meter deactivated successfully",deleted:"Meter deleted successfully",deleteConfirm:"Are you sure you want to delete this meter? This action cannot be undone.",activateConfirm:"Are you sure you want to activate this meter? It will start collecting usage data.",deactivateConfirm:"By deactivating, no further events for this meter can be reported. Attempts to create events for this meter will return an error. Previously reported usage will remain. You can reactivate at any time.",view:"View meter",basicInfo:"Basic information",basicInfoDescription:"Configure the core settings for your meter to track usage events.",editDescription:"Update the meter name, description, and metadata. Core settings like event name and aggregation method cannot be changed.",inactive:"Meter is inactive",inactiveTip:"This meter is not collecting usage data. Activate it to start tracking events.",name:{label:"Meter name",required:"Meter name is required",placeholder:"API requests",help:"A descriptive name for this meter that will be displayed in your dashboard and user's personal bill."},eventName:{label:"Event name",required:"Event name is required",placeholder:"api_request",help:"The event name that will be sent to this meter",editHelp:"Event name cannot be changed after meter creation to maintain data consistency."},aggregationMethod:{label:"Aggregation method",required:"Aggregation method is required",sum:"Sum",sumHint:"Add all event values together",sumDescription:"The sum aggregation method adds all usage event values together and reports the total for event summaries and billing.",count:"Count",countHint:"Count the number of events",countDescription:"The count aggregation method counts the number of events received and reports the total count for event summaries and billing.",last:"Last value",lastHint:"Use the most recent event value",lastDescription:"The last value aggregation method uses the most recent event value received and reports that value for event summaries and billing.",editHelp:"Aggregation method cannot be changed after meter creation to maintain data consistency."},unit:{label:"Measurement unit",required:"Measurement unit is required",placeholder:"request",help:"The unit of measurement for this meter",editHelp:"Measurement unit cannot be changed after meter creation to maintain data consistency."},description:{label:"Description",placeholder:"Track API usage for billing",help:"Optional description to help you and your team understand what this meter tracks."},events:{title:"Events",dailyEventCount:"Daily Event Count",dailyTotalValue:"Daily Total Value",eventName:"Event Name",value:"Value",customer:"Customer",subscription:"Subscription",reportTime:"Report Time",count:"{count} events total",empty:"No event data",emptyTip:"Data will appear here when events are reported",filterByCustomer:"Filter by customer",eventCount:"Event Count",totalValue:"Total Value"},usageGuide:{title:"How to report usage",description:'Send events to this meter using the event name "{eventName}". The meter will {method} the values and track usage in {unit}.',tip:'Send events to this meter using the event name "{eventName}". The meter will {aggregationMethodHint} and track usage in {unit}.',apiEndpoint:"API Endpoint",curlExample:"cURL Example",jsExample:"JavaScript Example",pythonExample:"Python Example",important:"Important",tip1:"Replace YOUR_API_KEY with your actual API key",tip2:"The event_name must match exactly: {eventName}",tip3:"Include a timestamp for accurate tracking",moreInfo:"For more information, see our",apiDocs:"API documentation"},products:{count:"{count} associated products",create:"Create product",created:"Product created successfully",createPrompt:"Enter product name:",manage:"Manage",empty:"No products",title:"Products",emptyTip:"No products are associated with this meter yet.",meterService:"Meter Service",creditCharge:"Credit Charge"},creditProducts:{emptyTip:"No credit products are associated with this meter yet."},rechargePackage:{priceId:"Top-up Package",tooltip:"The top-up package is used to recharge {name}, and users can get the corresponding {name} after purchase."}},creditProduct:{create:"Create Credit Product",defaultName:"{name} Top-up Package",defaultDescription:"{name} Top-up Package",defaultNickname:"Credit Recharge",unitLabel:"units",settings:"Credit Settings",configTitle:"Credit Configuration",expirationTime:{label:"Expiration",expireWithNextGrant:"Expire with Next Grant"},name:{placeholder:"Enter Credit product name"},description:{placeholder:"Describe the purpose and value of this Credit product"},priceNotice:"Credit products are used to provide consumable credits to users, supporting both one-time purchase and package pricing models.",creditAmount:{label:"Credit Amount",placeholder:"Amount of credits users receive when purchasing this price",help:"Leave empty for pay-per-unit pricing, enter a number for fixed package deals",description:"Purchase quantity determines the amount of Credits received"},validDuration:{label:"Valid Duration",help:"Credit validity period, calculated from purchase time",description:"Set to 0 for permanent validity",hours:"hours",days:"days",weeks:"weeks",months:"months",years:"years"},associatedPrices:{label:"Associated Prices",placeholder:"Select service prices this Credit can be used for",help:"When selected, purchased Credits can only be used for specified services",description:"No selection means Credits can be used for all services"},priority:{label:"Usage Priority",help:"Usage order when user has multiple Credits, lower numbers have higher priority",description:"Range: 0-100, 0 is highest priority, 50 is default value"},deliveryMode:{label:"Delivery Mode",once:"One-time",periodic:"Periodic"},schedule:{interval:{label:"Grant Frequency",hour:"hours",day:"days",week:"weeks",month:"months"},amountPerGrant:{label:"Amount per Grant",description:"Fixed Credit amount per grant"},expireWithNextGrant:{label:"Expire with Next Grant",description:"This Credit expires when the next grant is issued (refresh mode)"}}},meterEvent:{title:"Meter Event Details",id:"Event ID",totalEvents:"Total events: {count}",noEvents:"No events found",noEventsHint:"You can manually add test events in test mode.",identifier:"Identifier",customer:"Customer",customerId:"Customer ID",value:"Value",subscription:"Subscription",creditConsumed:"Credit Consumed",usageValue:"Usage Value",settlementAmount:"Settlement Amount",reportedAmount:"Reported Amount",overdueAmount:"Overdue Amount",reportedAt:"Reported At",processedAt:"Processed At",eventIdentifier:"Event Identifier",usageDetails:"Usage Details",chart:{eventCount:"Daily Event Count",totalValue:"Daily Total Value"},filter:{customer:"Filter by Customer"},add:{button:"Add usage",title:"Add usage",customerId:"Customer",customerIdPlaceholder:"Select customer",value:"Value",valuePlaceholder:"Enter usage value",subscriptionId:"Subscription",subscriptionIdPlaceholder:"Enter subscription ID (optional)",subscriptionIdHint:"Optional - link this usage to a specific subscription",timestamp:"Timestamp",timestampHint:"When this usage occurred",validation:"Customer and value are required",success:"Usage event added successfully",submit:"Submit"}},developers:"Developers",webhooks:"Webhooks",events:{title:"Events",dailyEventCount:"Daily Event Count",dailyTotalValue:"Daily Total Value",eventName:"Event Name",value:"Value",customer:"Customer",subscription:"Subscription",reportTime:"Report Time",count:"{count} events total",empty:"No event data",emptyTip:"Data will appear here when events are reported",filterByCustomer:"Filter by customer",eventCount:"Event Count",totalValue:"Total Value",hourly:"Hourly",totalEvents:"Total Events",timeRange:"Time Range",hourlyView:"Hourly View",dailyView:"Daily View"},refunds:"Refunds",payouts:"Payouts",logs:"Logs",passports:"Passports",details:"Details",settings:"Settings",branding:"Branding",business:"Business",summary:"Summary",product:{empty:"No product",info:"Product information",add:"Add product",view:"View product details",save:"Save product",saved:"Product successfully saved",additional:"Additional options",edit:"Edit product",pricing:"Pricing",find:"Find a product",archive:"Archive product",archiveTip:"Archiving will hide this product from new purchases. Are you sure you want to archive this product?",unarchive:"Unarchive product",unarchiveTip:"Unarchiving will enable this product for new purchases. Are you sure you want to unarchive this product?",remove:"Remove product",removeTip:"Removing will hide this product from new purchases. Are you sure you want to remove this product?",archived:"This product has been archived",archivedTip:"This product can't be added to new invoices, subscriptions, payment links, or pricing tables. Any existing subscriptions with this product remain active until canceled and any existing payment links or pricing tables are deactivated.",locked:"This product is locked because at least one of its prices is used by a subscription or a payment.",currencyNotAligned:"All prices must have the same currency settings",image:{label:"Image",add:"Add image"},features:{label:"Features",add:"Add another feature"},name:{label:"Name",required:"Product name is required",placeholder:"Premium plan"},description:{label:"Description",required:"Product description is required",placeholder:"Product descriptions that appear on checkout, invoice pages"},statement_descriptor:{label:"Statement descriptor",placeholder:"ArcBlock"},unit_label:{label:"Unit label",placeholder:"Unit"},billingType:{label:"Billing type",standard:"Standard billing",standardDesc:"Charge a fixed amount on a recurring basis",metered:"Metered billing",meteredDesc:"Charge based on usage tracked by a meter",help:"Choose how customers will be charged for this product"},meter:{label:"Meter",placeholder:"Select a meter to track usage",required:"Please select a meter for metered billing",help:"Select the meter to track usage for this product",pricingNote:"For metered products, pricing is automatically based on usage tracked by the selected meter. You only need to set the unit price and billing period."},cross_sell:{title:"Cross-sells",to:"Cross-sells to",tip:""},type:{label:"Product Type",service:"Service",serviceDesc:"Digital services or subscriptions",credit:"Credit",creditDesc:"Credit top-up product for credit-based billing scenarios",creditDescLink:"Create meters first",good:"Good",goodDesc:"Physical products or tangible goods"},vendorConfig:{title:"Vendor Configuration",add:"Add Vendor",empty:'No vendors configured. Click "Add Vendor" to configure vendor services',vendor:"Vendor",vendorRequired:"Vendor is required",productCode:"Product Code",productCodeRequired:"Product code is required",commissionType:"Commission Type",commissionRate:"Commission Rate",commissionRateRequired:"Commission rate is required",commissionRateMin:"Commission rate must be at least 0",commissionRateMax:"Commission rate cannot exceed 100%",amount:"Fixed Amount",noVendor:"No vendor available",amountRequired:"Fixed amount is required",totalCommission:"Total commission rate: {total}%",totalCommissionExceeded:"Total commission rate exceeds 100%: {total}%"}},price:{name:"Price",type:"Usage type",plan:"Price plan",info:"Price information",count:"{count} prices",empty:"No price",addAnother:"Add another price",order:"Plan {order}",lookupKey:"Lookup key",setAsDefault:"Set as default price",detail:"Pricing details",add:"Add another price",view:"View price details",additional:"Additional options",model:"Pricing model",amount:"Price",amountDescription:"This is the tax-inclusive price that customers will pay.",locked:"This price is locked because it is used by a subscription or a payment.",amountTip:"Choose recurring for subscriptions and one-time for everything else.",duplicate:"Duplicate price",edit:"Edit price",find:"Find or add a price",archive:"Archive price",archiveTip:"Archiving will hide this price from new purchases. Are you sure you want to archive this price?",remove:"Remove price",removeTip:"Removing will hide this price from new purchases. Are you sure you want to remove this price?",unit_amount:{required:"Price is required",positive:"Price must be positive",stripeTip:"Stripe requires the price to be at least 0.5"},nickname:{label:"Price description",placeholder:""},lookup_key:{label:"Lookup key",placeholder:"",description:"Lookup key is used to identify the price in the API"},recurring:{interval:"Billing period",metered:"Usage is metered?",meteredTip:"Metered billing lets you charge customers based on reported usage at the end of each billing period.",aggregate:"Charge for metered usage by",intervalCountTip:"Billing interval must be a positive number",stripeTip:"Stripe requires the billing period to be at least 1 day"},currency:{add:"Add more currencies",list:"Currencies"},models:{standard:"Standard pricing",standardDesc:"A single, fixed price",package:"Package pricing",packageDesc:"Price by number of units",graduated:"Graduated Pricing",volume:"Volume pricing",custom:"Customer chooses price",usageBased:"Usage-based",creditMetered:"Credit metered"},creditMetered:{label:"Credit metered",placeholder:"Select a meter to track usage",required:"Please select a meter for metered billing",help:"Select the meter to track usage for this product",selectMeter:"Select meter",pricingNote:"For metered products, pricing is automatically based on usage tracked by the selected meter.",description:"Credit metered billing requires corresponding credit consumption. If credits are consumed, the corresponding service will stop."},credit:{saveAsBasePrice:"Set as Top-up Package",saveSuccess:"Successfully set as top-up package"},types:{onetime:"One time",onetimeDesc:"Charge a one-time fee",recurring:"Recurring",recurringDesc:"Charge an ongoing fee"},paymentType:"Payment Type",billingModel:"Billing Model",pricing:"Pricing",additionalCurrencies:"Additional Currencies",advanced:"Advanced Settings",customInterval:"Custom Interval",perUnit:"Per Unit",choosePricingModel:"Choose your pricing model",usage:"Usage",usageDesc:"Price by number of users, units, or seats. Requires a record for Stripe to track customer service usage.",meter:"Meter",billingPeriod:"Billing period",aggregate:{sum:"Sum of usage values during period",max:"Maximum usage value during period",last_during_period:"Most recent usage value during period",last_ever:"Most recent usage value"},upsell:{title:"Upsells",to:"Upsells to",tip:""},quantity:{tip:"Quantity must be at least 0"},quantityAvailable:{label:"Available quantity",placeholder:"0 means unlimited",format:"Available {num} pieces",noLimit:"No limit on available quantity",valid:"Available quantity must be at least the sold quantity",description:"Enter the number of units that can be sold, 0 means unlimited"},quantitySold:{label:"Sold quantity",format:"Sold {num} pieces"},quantityLimitPerCheckout:{label:"Limit per checkout quantity",placeholder:"0 means unlimited",format:"Limit {num} pieces per checkout",noLimit:"No limit on quantity per checkout",description:"Enter the number of units that can be purchased in a single checkout, 0 means unlimited"},inventory:"Inventory Settings",dynamicPricing:{label:"Enable Dynamic Pricing",description:"Price fluctuates based on real-time exchange rates",config:{title:"Dynamic Pricing Configuration",baseAmount:{label:"Base Price",description:"The base price in fiat currency",required:"Base price is required"}},validation:{checking:"Checking exchange rate availability...",rateLine:"Current rate: 1 {currency} ≈ ${rate}",usdLine:"USD estimate: ≈ ${amount}",error:"Failed to fetch exchange rate, currency not supported or data source exception",estimatedLine:"Estimated amount: ≈ {amount} {currency}",useAmount:"Fill amount"}},referencePricing:{label:"Reference Exchange Rate Pricing",description:"Use current exchange rates to estimate token amounts without enabling dynamic pricing"}},coupon:{create:"Create Coupon",view:"View coupon",description:"Coupons can be used to discount invoices, subscriptions, or entire customer accounts.",listTitle:"Coupon",terms:"Terms",tab:"Coupons",redemptions:"Redemptions",expires:"Expires",noDiscount:"No discount",name:"Name",nameHelp:"This will appear on customers' receipts and invoices.",desc:"Description",descriptionInternal:"This description is for internal use only and will not be shown to customers.",id:"ID",idOptional:"ID (Optional)",idHelp:"This will identify this coupon in the API. We recommend leaving this blank so we can generate an ID for you.",type:"Type",percentageOff:"Percentage off",fixedAmountOff:"Fixed amount off",percentageDiscount:"Percentage discount",fixedAmount:"Discount amount",currency:"Currency",applyToProducts:"Apply to specific products",duration:"Duration",once:"Once",forever:"Forever",repeating:"Repeating",durationHelp:'For subscriptions and customers, this determines how long this coupon will apply once redeemed. One-time invoices accept both "once" and "forever" coupons.',durationInMonths:"Duration in months",redemptionLimits:"Redemption limits",limitDateRange:"Limit the date range when customers can redeem this coupon",limitTotalNumber:"Limit the total number of times this coupon can be redeemed",codes:"Codes",useCustomerFacingCodes:"Use customer-facing coupon codes",promotionCodes:"Promotion Codes",promotionCodesHelp:"Promotion codes will be created after the coupon is saved.",addPromotionCode:"Add promotion code",eligibleFirstTime:"Eligible for first-time order only (each user can only use one coupon discount)",limitNumberRedemptions:"Limit the number of times this code can be redeemed",addExpirationDate:"Add an expiration date",requireMinimumOrder:"Require minimum order value",addAnotherCode:"Add another code",saved:"Coupon saved successfully",codeOptional:"Code (Optional)",codeHelp:"Leave blank to auto-generate upon creation",generate:"Generate",verificationType:"Verification Type",codeOnly:"Code Only",nftVerification:"NFT Verification",vcVerification:"Passport Verification",userWhitelist:"Specific Users",nftSettings:"NFT Verification Settings",vcSettings:"Passport Verification Settings",userWhitelistSettings:"Specific Users Settings",nftAddresses:"NFT Addresses",nftAddressesPlaceholder:"Enter NFT contract addresses",nftTags:"NFT Tags",nftTagsPlaceholder:"Enter NFT tags",trustedIssuers:"Trusted Issuers",trustedIssuersPlaceholder:"Enter trusted issuers",trustedParents:"Trusted Parents",trustedParentsPlaceholder:"Enter trusted parents",minBalance:"NFT Required Quantity",requiredRoles:"Required Roles",requiredRolesPlaceholder:"Enter required roles",trustedVcIssuers:"Trusted VC Issuers",trustedVcIssuersPlaceholder:"Enter trusted VC issuer DIDs",customerDids:"Customer DIDs",customerDidsPlaceholder:"Enter customer DIDs",customerDidsHelp:"You can select existing customers or enter DID manually",maxRedemptions:"Max Redemptions",expiresAt:"Expires At",pressEnterToAdd:"Press Enter to add",couponConfiguration:"Coupon Configuration",selectProducts:"Select Products",noProductsSelected:"No products selected",newCode:"New Code",createPromotionCode:"Create Promotion Code",promotionCodeDescription:"Create a promotion code for this coupon to allow customers to redeem the discount.",minimumAmount:"Minimum Amount",minimumAmountHelp:"Set minimum order amounts for different currencies",discountAmount:"Discount Amount",currencies:"Currencies",times:"times",months:"months",addProduct:"Add another product",unlimited:"Unlimited",inactive:"Coupon is inactive",inactiveTip:"This coupon is currently inactive and cannot be used.",discount:"Discount",updated:"Updated",timesRedeemed:"Times Redeemed",deletedSuccessfully:"Coupon deleted successfully",deleteConfirmTitle:"Delete Coupon",deleteConfirmMessage:"Are you sure you want to delete this coupon? This action cannot be undone.",cannotDeleteWithPromotionCodes:"Cannot delete coupon with existing promotion codes",couponTermsPercentage:"{percent}% off",couponTermsFixedAmount:"{amount} {symbol} off",couponTerms:{forever:"{couponOff} forever",once:"{couponOff} once",repeating:"{couponOff} for {months} months"},couponTermsDuration:{forever:"Forever",once:"Once",repeating:"For {months} months"},applicableProducts:"Applicable Products",noApplicableProducts:"This coupon applies to all products",activeRedemptions:"Active redemptions",customers:"Customers",subscriptions:"Subscriptions",noCustomersFound:"No customers found",noCustomersRedeem:"No customers currently redeem this coupon",noSubscriptionsFound:"No subscriptions found",noSubscriptionsRedeem:"No subscriptions currently redeem this coupon",rename:"Rename",renameCoupon:"Rename coupon",updateCouponDetails:"Update coupon details",nameWillAppear:"This will appear on customers' receipts and invoices.",updateCouponButton:"Update coupon",discountStart:"Discount Start",usageStats:"Usage Statistics",totalDiscounts:"Total Discounts",uniqueSessions:"Unique Sessions",uniqueSubscriptions:"Unique Subscriptions",promotionCodesUsed:"Promotion Codes Used",noExpiration:"No Expiration",usagePeriod:"Usage Period",firstUsed:"First Used",lastUsed:"Last Used",promotionCodeInfo:"Promotion Code Info",directCouponUsage:"Direct Coupon Usage",usageLimit:"Usage Limit",discountInfo:"Discount Info",discountPeriod:"Discount Period",couponExpires:"Coupon Expires",totalSavings:"Total Discounts",viewPromotionCode:"View Promotion Code"},discount:{totalSaved:"Total Saved",timesUsed:"Times Used",appliedDiscounts:"Applied Discounts"},promotionCode:{code:"Code",status:"Status",redemptions:"Redemptions",expires:"Expires",created:"Created",actions:"Actions",active:"Active",inactive:"Inactive",expired:"Expired",maxedOut:"Maxed Out",viewDetails:"View Details",edit:"Edit Promotion Code",delete:"Delete Promotion Code",archive:"Archive Promotion Code",archiveTip:"Archiving will prevent this promotion code from being used. Are you sure you want to archive this promotion code?",deleteTip:"Deleting will permanently delete this promotion code. Are you sure you want to delete this promotion code?",title:"Promotion Code",id:"ID",type:"Type",couponId:"Coupon ID",maxRedemptions:"Max Redemptions",timesRedeemed:"Times Redeemed",verificationType:"Verification Type",updated:"Updated",activate:"Activate",deactivate:"Deactivate",inactiveTitle:"Promotion code is inactive",inactiveTip:"This promotion code is currently inactive and cannot be used.",deleteSuccess:"Promotion code deleted successfully",activateSuccess:"Promotion code activated successfully",deactivateSuccess:"Promotion code deactivated successfully",verificationConfig:"Verification Configuration",nftAddresses:"NFT Addresses",nftTags:"NFT Tags",minBalance:"Min Balance",requiredRoles:"Required Roles",trustedIssuers:"Trusted Issuers",allowedUsers:"Allowed Users",noNftConfig:"No NFT configuration",noVcConfig:"No VC configuration",noUsersSpecified:"No users specified",codeVerificationOnly:"Code verification only",unlimited:"Unlimited",never:"Never",yes:"Yes",no:"No",verificationTypeMap:{code:"Code Only",nft:"NFT Verification",vc:"Passport Verification",user_restricted:"User Whitelist"}},paymentLink:{view:"View payment link",info:"Payment link information",add:"Create payment link",save:"Create link",openLink:"Open URL",copyLink:"Copy URL",saved:"Payment link successfully saved",additional:"Additional options",beforePay:"Payment page",afterPay:"After payment",products:"Products",addProduct:"Add another product",requireBillingAddress:"Collect customer billing addresses",requirePhoneNumber:"Collect customer phone numbers",allowPromotionCodes:"Allow promotion codes",enablePromotionCodes:"Enable promotion codes",disablePromotionCodes:"Disable promotion codes",enablePromotionCodesTip:"Enable promotion codes for this payment link. Customers will be able to apply discount codes during checkout.",disablePromotionCodesTip:"Disable promotion codes for this payment link. Customers will not be able to apply discount codes during checkout.",requireCrossSell:"Require cross-sell products to be selected if eligible",includeFreeTrial:"Include a free trial",noStakeRequired:"No stake required",showProductFeatures:"Show product features",allowSkipPaymentMethod:"Allow skipping payment method for $0 checkout",enableSkipPaymentMethod:"Allow skipping payment method",disableSkipPaymentMethod:"Require payment method",enableSkipPaymentMethodTip:"Allow customers to skip binding a payment method when the checkout amount is $0. The subscription will auto-cancel at the end of the current period if no payment method is added.",disableSkipPaymentMethodTip:"Require customers to provide a payment method even when the checkout amount is $0.",freeTrialDaysPositive:"Free trial days must be positive",includeCustomFields:"Add custom fields",confirmPage:"Confirmation Page",showConfirmPage:"Show confirmation page",customMessage:"Replace default with custom message",customMessageTip:"Include any details you see fit, such as delivery information.",noConfirmPage:"Do not show confirmation page",mintNft:"Mint NFT to user on payment",mintNftFrom:"Mint from following factory (collection)",createInvoice:"Creates invoices for related payments.",adjustable:"Adjustable quantity",adjustableQuantity:"Let customers adjust quantity",noProducts:"Payment link must have at least one product",noRedirectUrl:"Payment link must have a redirect url",noSubscriptionTrialDays:"You must specify a trial period for subscription",recurringNotAligned:"The prices on all line items must have the same recurring interval",currencyNotAligned:"The prices on all line items must have the same currency settings",edit:"Edit payment link",rename:"Change name",archive:"Archive payment link",archiveTip:"Archiving will hide this payment link from new purchases. Are you sure you want to archive this payment link?",remove:"Remove payment link",removeTip:"Removing will hide this payment link from new purchases. Are you sure you want to remove this payment link?",name:{label:"Name",placeholder:"Not consumer facing"},adjustableQuantityError:"Minimum must be less than maximum"},pricingTable:{view:"View pricing table",add:"Create pricing table",save:"Create",openLink:"Open URL",copyLink:"Copy URL",saved:"Pricing table successfully saved",edit:"Edit pricing table",rename:"Change name",archive:"Archive pricing table",archiveTip:"Archiving will hide this pricing table from new purchases. Are you sure you want to archive this pricing table?",remove:"Remove pricing table",removeTip:"Removing will hide this pricing table from new purchases. Are you sure you want to remove this pricing table?",name:{label:"Name",placeholder:"Not consumer facing"},display:"Display Settings",highlight:"Highlight product",customer:"Customer portal"},paymentIntent:{list:"Payments",name:"Payment",view:"View payment detail",empty:"No payment intent",refund:"Refund payment",status:{active:"Active",paid:"Paid",succeeded:"Succeeded"},received:"Received",attention:"Failed payments",refundError:"Failed to refund payment",refundSuccess:"Refund application has been successfully created",cancelRefund:"Cancel refund",refundCanceled:"Cancel refund successfully",refundCanceledError:"Failed to cancel refund",refundCanceledTip:"Are you sure you want to cancel the refund application? After cancellation, the refund will no longer be processed.",refundForm:{reason:"Refund reason",amount:"Refund amount",description:"Refund description",duplicate:"Duplicate payment",requestedByCustomer:"Requested by customer",requestedByAdmin:"Requested by admin",fraudulent:"Fraudulent",expiredUncapturedCharge:"Expired uncaptured charge",amountRange:"Refund amount must be between {min} and {max} {symbol}",amountHelper:"Refund amount must be less than or equal to {max} {symbol}",required:"Please fill in the refund information",empty:"The current order has been fully refunded"}},payout:{list:"Payouts",name:"Payout",view:"View payout",empty:"No payout",attention:"Failed payouts",requestRefund:"Request Refund",confirmRefund:"Are you sure you want to request a refund from the vendor?",refundRequested:"Refund request sent to vendor",refundReason:"Refund Reason",refundReasonPlaceholder:"Please enter the reason for refund (at least 5 characters)",refundReasonRequired:"Refund reason is required",refundReasonMinLength:"Refund reason must be at least {min} characters",refundReasonHelper:"Please enter at least {min} characters",status:{active:"Active",paid:"Paid",succeeded:"Succeeded"}},paymentMethod:{_name:"Payment Method",type:"Type",add:"Add payment method",edit:"Edit payment method",save:"Save payment method",saved:"Payment method successfully saved",settings:"Settings",gasTip:"Ensure your account on the {chain} network has sufficient balance to cover transaction fees when using {method}.",recharge:"Scan to add balance",props:{type:"Type",confirmation:"Confirmation",recurring:"Recurring support",refund:"Refund support",dispute:"Dispute support",currencies:"Currency support",explorer_host:"Explorer Host",balance:"Balance"},name:{label:"Name",tip:"Customer-facing"},description:{label:"Description",tip:"Not customer-facing"},stripe:{dashboard:{label:"Dashboard URL",tip:"Used to generate links to Stripe dashboard"},publishable_key:{label:"Publishable Key",tip:"Publishable Key, See Dashboard > Developers > API Keys"},secret_key:{label:"Secret Key",tip:"Secret Key, See Dashboard > Developers > API Keys"},webhook_signing_secret:{label:"Webhook Signing Secret",tip:"Webhook Signing Secret, See Dashboard > Developers > Webhooks > Signing Secret"},webhookHint:"If webhook events are not received, manually configure STRIPE_WEBHOOK_SECRET in environment variables",configureEnv:"Go to Settings"},arcblock:{chain_id:{label:"Chain ID",tip:"Just a name"},api_host:{label:"API Host",tip:"The GraphQL endpoint to send transactions to"},explorer_host:{label:"Explorer Host",tip:"The web app endpoint to view transaction details"}},ethereum:{chain_id:{label:"Chain ID",tip:"Must be a valid EVM chain id, usually an integer, https://chainlist.org"},api_host:{label:"RPC Endpoint",tip:"The RPC endpoint to send transactions to"},explorer_host:{label:"Explorer Host",tip:"The web app endpoint to view transaction details"},native_symbol:{label:"Native Symbol",tip:"The symbol for native token on this chain"},confirmation:{label:"Confirmation Count",tip:"Number of blocks required since transaction execution"}},evm:{checking:"Checking connection...",connected:"Connected",connectionError:"Connection failed",blockHeight:"Block Height",rpcStatus:"RPC Status"},base:{chain_id:{label:"Chain ID",tip:"Must be a valid EVM chain id, usually an integer, https://chainlist.org"},api_host:{label:"RPC Endpoint",tip:"The RPC endpoint to send transactions to"},explorer_host:{label:"Explorer Host",tip:"The web app endpoint to view transaction details"},native_symbol:{label:"Native Symbol",tip:"The symbol for native token on this chain"},confirmation:{label:"Confirmation Count",tip:"Number of blocks required since transaction execution"}},google_play:{package_name:{label:"Package Name",tip:"e.g. com.example.app, configured in Play Console"},service_account_json:{label:"Service Account JSON",tip:"Paste the full service account credentials JSON downloaded from Google Cloud Console",invalidJson:"Not valid JSON",missingFields:"JSON is missing client_email or private_key",detectedClient:"Detected client"},pubsub_topic_name:{label:"Pub/Sub Topic (optional)",tip:"projects/<project-id>/topics/<topic-name>, for receiving RTDN"}},app_store:{bundle_id:{label:"Bundle ID",tip:"e.g. com.example.app, configured in App Store Connect"},environment:{label:"Environment",tip:"StoreKit 2 JWS environment must match this setting",production:"Production",sandbox:"Sandbox"},shared_secret:{label:"Shared Secret (for StoreKit 1)",tip:"App-Specific Shared Secret for legacy receipt verification. Not needed for StoreKit 2 JWS. Find it at App Store Connect → App Information → App-Specific Shared Secret"},serverApi:{heading:"Server API Credentials (optional)",tip:"Not required for StoreKit 2 JWS verification. Only needed when querying App Store Server API for subscription status. Provide all three or none."},issuer_id:{label:"Issuer ID",tip:"App Store Connect API Issuer ID"},key_id:{label:"Key ID",tip:"App Store Connect API Key ID"},private_key_pem:{label:"Private Key (.p8 contents)",tip:"Paste the contents of the .p8 file downloaded from App Store Connect"}}},paymentCurrency:{name:"Payment Currency",add:"Add Currency",edit:"Edit Currency",save:"Save payment currency",saved:"Payment currency successfully saved",delete:"Delete payment currency",deleteConfirm:"Are you sure you want to delete this payment currency? Once deleted, it cannot be recovered",deleted:"Payment currency successfully deleted",quickAdd:"Quick add supported currency",searchToken:"Search currency",orManualInput:"Or manually fill in currency information below",logo:{label:"Logo",tip:"Displayed on payment page"},contract:{label:"Contract",tip:"Used to fetch token symbol, decimals and other info"}},event:{empty:"No events",view:"View event",data:"Event Data",webhooks:"Webhook Attempts",type:"Type",pendingWebhooks:"Pending Webhooks",noAttempts:"No Attempt",retry:"Retry",retrying:"Retrying...",retryOptions:{title:"Retry Webhook",confirmMessage:"Are you sure you want to retry this webhook? This will send another request to the webhook endpoint.",success:"Webhook scheduled for retry",error:"Failed to retry webhook"},response:"Response",request:"Request",eventData:"Event Data"},invoice:{view:"View invoice",attention:"Uncollectible invoices",metric:"Paid invoices",name:"Invoice",status:{active:"Active",paid:"Paid",succeeded:"Succeeded"},from:"Billed from",empty:"No invoices",number:"Invoice Number",description:"Billing Description",dueDate:"Due",finalizedAt:"Finalized At",paidAt:"Payment Date",summary:"Summary",billingContextNote:"Invoice amounts are calculated based on real-time prices at the time of billing.",dynamicPricingNote:"This invoice uses dynamic pricing with locked exchange rates.",billTo:"Billed to",billing:"Billing Method",download:"Download PDF",edit:"Edit Invoice",duplicate:"Duplicate Invoice",retryUncollectible:{title:"Retry collection",tip:"Are you sure you want to retry collecting this invoice? This will attempt to charge the customer again.",success:"Retry request submitted"},returnStake:{title:"Return Stake",tip:"Are you sure you want to return the stake? This action will return the stake to the customer immediately.",success:"Stake return application has been successfully created"},void:{title:"Void Invoice",tip:"Are you sure you want to void this invoice? This action will immediately void the invoice.",success:"Invoice voided"}},vendor:{create:"Create Vendor",edit:"Edit Vendor",delete:"Delete Vendor",save:"Save Vendor",saved:"Vendor saved successfully",test:"Test",testConnection:"Test Connection",testConnectionTip:'Are you sure you want to test the connection for vendor "{name}"?',testConnectionSuccess:"Connection test successful",testConnectionFailed:"Connection test failed",testSuccess:"Connection test successful",testAfterSave:"Vendor saved successfully. You can test the connection to verify the configuration.",testToEnable:"Vendor saved successfully. Test the connection to enable the vendor.",enabled:"Enabled",disabled:"Disabled",addressCheckFailed:"Address check failed, cannot save when enabled",updateSuccess:"Vendor updated successfully",testFailed:"Connection test failed (Status: {status})",testError:"Connection test failed - network error",vendorKeyInvalid:"Vendor type must contain only lowercase letters, numbers, and underscores",deleteTitle:"Delete Vendor",deleteContent:'Are you sure you want to delete vendor "{name}"? This action cannot be undone.',deleteTip:'Are you sure you want to delete vendor "{name}"? This action cannot be undone.',activate:"Activate Vendor",activateTip:'Are you sure you want to activate vendor "{name}"?',deactivate:"Deactivate Vendor",deactivateTip:'Are you sure you want to deactivate vendor "{name}"?',name:"Vendor Name",nameRequired:"Vendor name is required",vendorType:"Vendor Type",vendorTypeRequired:"Vendor type is required",didnames:"DID Names",launcher:"Launcher",vendorKey:"Vendor Key",vendorKeyRequired:"Vendor key is required",vendorKeyHelp:"Unique identifier for the vendor",description:"Description",displayNameRequired:"Display name is required",displayNameHelp:"This name will be displayed on the installation interface after successful payment",appUrl:"App URL",appUrlRequired:"App URL is required",appUrlInvalid:"Please enter a valid URL starting with http:// or https://",appUrlHelp:"The base URL of the vendor application",vendorDid:"Vendor DID",vendorDidInvalid:"Please enter a valid DID",vendorDidHelp:"Optional DID address for the vendor",webhookPath:"Webhook Path",webhookPathInvalid:"Please enter a valid path starting with /",webhookPathHelp:"Optional webhook callback path (e.g., /webhooks/status)",blockletMetaUrl:"Blocklet Meta URL",blockletMetaUrlRequired:"Blocklet Meta URL is required",blockletMetaUrlInvalid:"Please enter a valid URL starting with http:// or https://",blockletMetaUrlHelp:"Required blocklet metadata URL for application information",commission:"Commission",commissionRate:"Commission Rate",commissionRateRequired:"Commission rate is required",commissionRateMin:"Commission rate must be at least 0",commissionRateMax:"Commission rate is too high",commissionType:"Commission Type",commissionRateHelp:"Commission rate as percentage",commissionAmountHelp:"Fixed commission amount",percentage:"Percentage",fixedAmount:"Fixed Amount",active:"Active",inactive:"Inactive",basicInfo:"Basic Information",apiConfig:"API Configuration",commissionConfig:"Commission Configuration",status:"Status",brokerDID:"Broker DID",brokerPublicKey:"Broker Public Key"},subscription:{view:"View subscription",name:"Subscription",empty:"No subscriptions",status:{active:"Active",paid:"Paid",succeeded:"Succeeded"},viewAll:"View all subscriptions",noActiveEmpty:"You currently have no active subscriptions. You can choose to view your subscription history.",includedServices:"Included Services",serviceHome:"Visit Service Homepage",serviceDashboard:"Access Service Dashboard",attention:"Past due subscriptions",product:"Product",collectionMethod:"Billing",channel:"Channel",currentPeriod:"Current Period",iap:{googlePlayTitle:"Google Play Purchase",appStoreTitle:"App Store Purchase",purchaseToken:"Purchase Token",orderId:"Order ID",productId:"Product ID",originalTransactionId:"Original Transaction ID",transactionId:"Transaction ID",expiryTime:"Expires At",environment:"Environment"},trialingPeriod:"Trial Period",trialEnd:"Trial ends {prefix} {date}",willEnd:"Will end {prefix} {date}",ended:"Ended {prefix} {date}",renew:"Renew {prefix} {date}",discount:"Discount",activeDiscount:"Active Discount",startedAt:"Started",nextInvoice:"Next Invoice",nextInvoiceAmount:"Next Invoice Amount",nextInvoiceAmountTip:"The next invoice amount is estimated, the actual amount will be calculated based on actual usage.",itemId:"Subscription Item ID",update:"Update subscription",resume:"Resume payment collection",resumeTip:"Are you sure you want to resume collecting payments? Any future invoices for this subscription will resume payment collection.",paymentAddress:"Payment Address",currentBalance:"Current Balance",insufficientBalance:"Insufficient Balance, please add funds",cancel:{schedule:"Scheduled to cancel",title:"Cancel subscription",required:"Custom cancel time is required",will:"End {prefix} {date}",done:"Canceled",at:{title:"Cancel",now:"Immediately ({date})",current_period_end:"End of current period ({date})",custom:"On a custom date",timeError:"Cancel time must be within the current period"},refund:{title:"Refund",none:"No refund",last:"Last payment {total}{symbol}",proration:"Proration amount {unused}/{total}{symbol}"},staking:{title:"Stake",none:"No return or slash",proration:"Return Remaining Stake {unused}{symbol}",slash:"Slash Remaining Stake {unused}{symbol}",slashReason:"Slash Reason",slashTip:"The remaining stake of this subscription {unused}{symbol} will be slashed, please confirm to continue?",slashTitle:"Slash stake"},comment:{title:"Reason",placeholder:"Please provide the reason for cancellation"}},pause:{title:"Pause payment collection",required:"Custom resume time is required",type:{title:"Pause duration",never:"Indefinite",custom:"Until a custom date"},behavior:{title:"Invoice behavior",keep_as_draft:"Keep invoices as drafts",keep_as_draft_tip:"For businesses currently offering services but waiting to collect payments.",mark_uncollectible:"Mark invoices as uncollectible",mark_uncollectible_tip:"For businesses currently offering services for free.",void:"Void invoices",voidTip:"For businesses not currently offering services."},until:{never:"Collection paused",custom:"Collection paused until {date}"}},usage:{title:"Usage records",current:"Usage records for current period",range:"Usage records for {start} - {end}",view:"View usage",vary:"Varies with usage",used:"Unit used",cycle:"Usage cycle"},batchPay:{button:"Pay due invoices"},payerAddress:"Payment Address",noPaymentMethod:"Not bound",bindPaymentMethod:"Bind now",bindPaymentMethodFirst:"Please bind a payment method first before resuming the subscription",noPaymentMethodWarning:"No payment method is bound to this subscription. Please bind one to avoid cancellation at the end of the current period.",changePayer:{btn:"Change",stripe:{linkType:"Stripe Link",bankAccount:"Bank Account"},connect:{title:"Change Payment Address",success:"Payment Address changed successfully",error:"Failed to change payment Address"}}},customer:{view:"View customer",edit:"Edit information",spent:"Spent Amount",refund:"Refund Amount",dispute:"Dispute Amount",due:"Due Amount",stake:"Stake Amount",token:"Token Balance",name:"Name",email:"Email",phone:"Phone",invoicePrefix:"Invoice Prefix",googlePlayUuid:"Google Play UUID",appStoreUuid:"App Store UUID",balance:"Balance ({currency})",summary:{refund:"Refunds",spent:"Spent",due:"Due",stake:"Stake",stats:"Stats",balance:"Balance"},address:{label:"Address",country:"Country",state:"State or province",city:"City or town",line1:"Address",line2:"Line2",postal_code:"Postal Code"},creditGrants:{title:"Credit Grants",description:"View your available credit grants and usage history",grants:"Credit Grants",transactions:"Credit Usage",summary:"Credit Summary",noGrants:"No credit grants available",grantDetail:"Credit Grant Details",creditBalance:"Credit Balance",totalAmount:"Total Amount",status:{granted:"Active",pending:"Pending",expired:"Expired",depleted:"Depleted",voided:"Voided"},originalAmount:"Original Amount",usage:"Usage",viewInvoice:"View Invoice",grantId:"Grant ID",currency:"Currency",created:"Created",effectiveDate:"Effective Date",expirationDate:"Expiration Date",transactionHistory:"Transaction History",backToGrants:"Back to Credit Grants",viewDetails:"View Details",overview:"Overview",relatedGrants:"Credit Grants",category:"Category",overviewDescription:"Monitor all currency credit balances, usage, and outstanding debt.",availableBalance:"Available Balance",viewGrants:"View Grants",viewUsage:"View Usage",recentActivity:"Recent Activity",quickStats:"Quick Stats",activeGrants:"Active Grants",outstandingDebt:"Outstanding Debt",buyCredits:"Buy Credits",viewAllActivity:"View All Activity",pendingAmount:"Outstanding Charges",grantCount:"Grant Count",noGrantsDescription:"You don't have any credit grants yet.",addCredit:"Add Credit"}},passport:{intro:"Manage payment settings for blocklet passports, you should assign both product and payment entry to a passport to make it available for purchase.",payLink:"Payment entry",payPreview:"Payment preview",preview:"Preview payment page",assign:"Assign to passport",assignTip:"Assign this payment link to selected passport to make it available for purchase",unassign:"Reset purchase config",unassignTip:"Confirm to clear the payment entry and product config for this passport?",assignError:"Must select a passport to assign"},webhookEndpoint:{hosted:"Hosted endpoints",add:"Add endpoint",addTip:"Set up your webhook endpoint to receive live events from",listen:"Listen for",version:"API Version",attempts:"Webhook attempts",url:{label:"URL",description:"Endpoint URL"},description:{label:"Description",description:"An optional description of what this endpoint is used for."},events:{label:"Select events to listen to",description:""}},refund:{name:"Refunds",view:"View refund detail",attention:"Failed refunds",status:{active:"Active",paid:"Paid",succeeded:"Succeeded"}},usageRecord:{empty:"No usage records",add:{label:"Add usage record",success:"Successfully added usage record",quantity:"Quantity"}},donate:{title:"Donation Settings",mountLocation:"Mount Location",component:"Component",description:"Description",status:{title:"Status",active:"Enable",inactive:"Disable",inactiveTip:"After disabling donations, the donation button will no longer be displayed and users cannot use the donation feature. Are you sure you want to disable it?",inactiveTitle:"Disable Donation",activeSuccess:"Donation feature has been enabled",inactiveSuccess:"Donation feature has been disabled"},editTitle:"Edit Donation Settings",updateSuccess:"Donation settings have been updated",amountSettings:"Amount Settings",presets:"Preset Amounts",presetsHelper:"Enter preset amounts, separated by commas (e.g., 1,5,10)",preset:"Default Amount",presetHelper:"Default selected amount (must be one of the presets)",custom:"Allow Custom Amount",minimum:"Minimum Amount",maximum:"Maximum Amount",amountRange:"Amount Range: {min} - {max}",customAmount:"Custom Amount",buttonSettings:"Donation Button Settings",btn:{text:"Button Text",helper:"Set the text displayed on the donation button",preview:"Button Preview"},dialog:{preview:"Donation Dialog Preview",confirmButton:"Confirm Donation {amount}"},previewTitle:"Live Preview",validation:{invalidPreset:"Default amount must be one of the presets",invalidRange:"Minimum amount must be less than maximum amount",invalidAmount:"Amount must be within allowed range"},historyType:{title:"Donation History Display",avatar:"Avatar Wall",list:"List"},intro:"Configure the display effect of the donation button and donation dialog, and the donation feature will take effect after completion.",usage:{viewExample:"View Usage Example",title:"Donation Component Usage Example",description:"To use the donation feature, you need to correctly configure PaymentProvider and DonateProvider in the component. Here is a basic example:",note:"Note: mountLocation must be unique, used to identify the donation instance. After configuration, the instance will appear in the list, and you can make further settings."}},vaultConfig:{title:"Vault",learnMore:"Learn more about vault configuration",goToConfig:"Go to system configuration",description:"By enabling the vault wallet, you create a secure offline storage solution that automatically transfers excess funds when your hot wallet balance exceeds the threshold. This separation significantly enhances security by keeping the majority of your assets safely offline, protected from potential online threats.",notConfigured:"Vault wallet not configured",configureFirst:"Please #go to the dashboard# to configure the vault wallet address before setting up individual currencies.",ownerOnly:"Only administrators with owner permissions can modify vault wallet settings.",permissionRequired:"Owner permissions required",enabled:"Status",enabledYes:"Enabled",enabledNo:"Disabled",depositThreshold:"Deposit Threshold",withdrawThreshold:"Withdrawal Threshold",bufferThreshold:"Buffer Threshold",bufferThresholdHelp:"Only when the amount exceeding the deposit threshold reaches the buffer threshold will the collection operation be triggered.",bufferThresholdInvalid:"Buffer threshold must be at least 0",edit:"Configure",enable:"Enable",editTitle:"Configure {currency} Vault Settings",enableTitle:"Enable Vault Wallet for {currency}",enableVault:"Enable Vault Wallet",enableVaultHelp:"When enabled, excess funds automatically transfer to the vault wallet, and withdrawals exceeding the threshold require admin approval for security and risk control.",depositThresholdHelp:"When the hot wallet balance exceeds this amount, the excess funds will be automatically transferred to the vault wallet.",withdrawThresholdHelp:"For withdrawals exceeding this amount, approval from the vault wallet administrator is required.",notConfig:"Not configured",noLimit:"No limit",withdrawThresholdNoLimit:"0 means no withdrawal limit",depositThresholdRequired:"Deposit threshold must be greater than 0",withdrawThresholdInvalid:"Withdrawal threshold must be at least 0",enableSuccess:"Successfully enabled vault wallet for {currency}",disableSuccess:"Successfully disabled vault wallet for {currency}",updateSuccess:"Successfully updated vault wallet settings for {currency}",depositConfirmTitle:"Deposit to Vault",depositConfirmMessage:"{currency} balance has exceeded the threshold, do you want to deposit to vault immediately?",depositQueued:"Deposit to vault request queued, please check the result later",depositFailed:"Deposit to vault request failed",appBalance:"App Balance"},creditGrants:{tab:"Grants",title:"Credits",summary:"Credit Summary",noGrants:"No credit grants found",grantDetail:"Credit Grant Details",overview:"Overview",overviewDescription:"Monitor credit balances, usage, and outstanding debt across all currencies.",availableBalance:"Available Balance",usage:"Usage",viewGrants:"View Grants",viewUsage:"View Usage",recentActivity:"Recent Activity",quickStats:"Quick Stats",activeGrants:"Active Grants",totalCreditValue:"Total Credit Value",outstandingDebt:"Outstanding Debt",buyCredits:"Buy Credits",viewAllActivity:"View All Activity",creditBalance:"Credit Balance",totalAmount:"Total Amount",pendingAmount:"Pending Amount",grantCount:"Grant Count",noGrantsDescription:"You don't have any credit grants yet.",status:{granted:"Active",pending:"Pending",expired:"Expired",depleted:"Depleted",voided:"Voided"},originalAmount:"Original Amount",grantId:"Grant ID",grants:"Grants",addCredit:"Add Credit",viewDetails:"View Details"},creditTransactions:{tab:"Transactions",title:"Transactions",summary:"Transaction Summary",noTransactions:"No credit transactions found",totalTransactions:"Total Transactions",totalCreditUsed:"Total Credit Used",transactionDate:"Transaction Date"},exchangeRateProvider:{title:"Exchange Rate Providers",subtitle:"Manage exchange rate data sources for dynamic pricing",medianStrategyNote:"Exchange rates are calculated automatically using multiple data sources. You only need to manage this list when a provider is consistently failing or needs to be temporarily disabled.",disableConfirmTitle:"Disable Provider?",disableConfirmMessage:"Disabling this provider may affect dynamic pricing payments. Are you sure?",table:{name:"Name",participation:"Participation",health:"Health",recentActivity:"Recent Activity",trustLevel:"Trust Level",trustLevelTip:"Indicates confidence and eligibility for rate calculation. Higher values do not mean preferred or primary source.",enabled:"Enabled",lastUpdate:"Last update: {time}",failures24h:"Failures (24h): {count}"},participation:{included:"Included",excluded:"Excluded"},health:{active:"Healthy",degraded:"Unstable",paused:"Outlier",inactive:"Outlier"},status:{active:"Active",degraded:"Degraded",paused:"Paused",inactive:"Inactive"},create:{title:"Add Provider",primaryAction:"Add Exchange Rate Provider"},edit:{title:"Edit {name}",name:"Name",nameHelp:"Unique identifier for this data source",nameRequired:"Name is required",type:"Provider Type",typeHelp:"Data source type. Cannot be changed after creation.",baseUrl:"Base URL (Optional)",baseUrlHelp:"Custom base URL for proxy or self-hosted instance. Default: {defaultUrl}",apiKey:"API Key",apiKeyHelp:"API key for accessing the data source.",apiKeyLinkText:"Get your API key at",apiKeyLinkAction:"CoinMarketCap account",testConnection:"Test Connection",testing:"Testing...",testSuccess:"Connection successful ({symbol}/USD: {rate}, {time}ms)",testFailed:"Connection failed: {error}",enabled:"Enabled",priority:"Priority",priorityHelp:"Lower number = higher priority. Providers are used in priority order.",status:"Status",statusHelp:'Set to "paused" to temporarily disable this provider.',pausedReason:"Paused Reason",pausedReasonHelp:"Explain why this provider is paused (optional)."}}},empty:{image:"No Image",refunds:"No Refunds",invoices:"No Invoices",subscriptions:"No Subscriptions",customers:"No Customers",products:"No Products",invoiceItems:"No Invoice Items",payouts:"No Payouts",paymentLinks:"No Payment Links",paymentMethods:"No Payment Methods",pricingTables:"No Pricing Tables",paymentCurrencies:"No Payment Currencies",webhooks:"No Webhooks",events:"No Events",records:"No matching records found",payments:"No Payments",prices:"No Prices",pricing:"You haven't added any prices you can add it",summary:"No Summary"},customer:{subscription:{cancel:"Cancel Subscription",manage:"Manage Subscription",title:"Subscriptions"},invoiceHistory:"Invoice History",product:{empty:"No Products"},credit:{recharge:"Buy Credits",autoRecharge:"Auto Top-up",unsupported:"Not supported yet"},recharge:{title:"Add Funds",amount:"Amount",submit:"Submit",unsupported:"Unsupported currency, please select another one",receiveAddress:"Receive Address",view:"View Subscription",success:"Add funds successfully",custom:"Custom",estimatedDuration:"{duration} {unit} est.",intervals:"intervals",history:"Fund History",relatedSubscriptions:"Related Subscriptions",rechargeTooltip:"Click to add funds"},delegation:{title:"Seems your delegation to this blocklet is revoked or insufficient, which will cause automatic payment failures for your subscription.",btn:"Delegate Now",success:"Delegate successful",error:"Delegate failed"},overdraftProtection:{title:"SubGuard™",setting:"Set SubGuard™",learnMore:"Click to learn more about SubGuard™",tip:"To avoid service interruption due to unpaid invoices, you can enable SubGuard™ by staking. Timely payment will not incur additional fees. Please settle your invoices promptly. If your available stake is insufficient or payment is overdue, we will deduct the amount from your stake and charge a service fee.",enabled:"Enabled",disabled:"Disabled",returnRemaining:"Return Remaining Stake",returnRemainingTip:"Once the remaining stake is returned, the SubGuard™ will be automatically disabled. Please confirm the action.",applyRemainingSuccess:"Stake return application successful",remaining:"Your current remaining stake: {amount} {symbol}, estimated required stake per cycle: {estimateAmount} {symbol}.",noRemaining:"No remaining stake available. Please stake at least {estimateAmount} {symbol} as soon as possible to ensure SubGuard™ is enabled.",remainingNotEnough:"You have unpaid invoices totaling {due} {symbol}. If not paid, your remaining stake will be insufficient to cover the next invoice. Available stake: {unused} {symbol}. Please stake at least {min} {symbol}.",due:"Please pay the outstanding amount first",insufficient:"Insufficient Stake to cover the next invoice, please add stake",insufficientTip:"Insufficient Stake, please stake to ensure SubGuard™ is enabled.",intervals:"cycles",estimatedDuration:"{duration} {unit} est.",rule:"Rule: N * ( P + Fee )",ruleTip:"N is the number of cycles, P is the subscription bill amount, Fee is the SubGuard™ service fee, the single fee is {gas} {symbol}",min:"The amount must be greater or equal to {min} {symbol}",settingSuccess:"Settings Updated",settingError:"Failed to update SubGuard™ settings",openSuccess:"SubGuard™ Enabled",closeSuccess:"SubGuard™ Disabled",keepStake:"Keep Remaining Stake For SubGuard™",returnStake:"Return Remaining Stake",stake:"Stake",address:"Staking Address",total:"Total Stake: {total} {symbol}, ",disableConfirm:"You currently have unpaid invoices, please settle your invoices first.",open:"Enable SubGuard™",payerAddress:"Payer",stakingAddress:"Staking Address"},unpaidInvoicesWarning:"You currently have unpaid invoices, please settle your invoices first.",unpaidInvoicesWarningTip:"You currently have unpaid invoices, please settle your invoices promptly.",pendingAmountWarningTip:"You have {amount} {symbol} in unpaid usage charges due to insufficient credit balance. Please top up your account.",invoice:{relatedInvoice:"Related Invoice",donation:"Donation",creditsInfo:"Total {amount} included",appliedDiscounts:"Applied Discounts",priceChanged:"The exchange rate has changed by {percent}%. The payment amount will be updated. Do you want to continue?",paymentCancelled:"Payment cancelled",paymentMethodChanged:"Payment method changed",priceChangeTitle:"Price Changed",priceChangeDescription:"The exchange rate has {direction} by {percent}%. Your payment amount will be updated.",currentPaymentMethod:"Current Payment Method",otherPaymentMethods:"Or pay with another method",confirmAndPay:"Confirm & Pay",switchAndPay:"Switch & Pay",current:"current"},payout:{empty:"No Revenues",payer:"Payer",receiver:"Receiver",payTxHash:"Payment TxHash",viewReference:"View Reference",title:"Revenues"},pastDue:{warning:"You have due invoices, please pay them to keep your services active",invoices:"Due Invoices",payNow:"Pay Now",alert:"You have due invoices. Please pay them promptly to avoid service interruption.",title:"Settle Due Invoices"},quote:{title:"Price Quotes",noQuotes:"No price quotes for this invoice",id:"Quote ID",pricingDetails:"Pricing Details",baseAmount:"Base Amount",exchangeRate:"Exchange Rate",consensusMethod:"Consensus",referenceRate:"Reference Rate: 1 {symbol} ≈ ${rate}",quotedAmount:"Quoted Amount",providerInfo:"Rate Provider",provider:"Provider",rateTimestamp:"Rate Timestamp",slippage:"Slippage",lifecycle:"Lifecycle",expiresAt:"Expires At",riskInfo:"Risk Information",deviation:"Price Deviation",anomalyDetected:"Anomaly Detected",degraded:"Degraded",status:{active:"Active",used:"Used",paid:"Paid",expired:"Expired",cancelled:"Cancelled",failed:"Failed"}}},integrations:{description:"Configure and manage how Payment Kit integrates with your application.",basicFeatures:"Basic Features",advancedFeatures:"Advanced Features",features:{products:{title:"Create Products",intro:"Create and manage your products or services"},paymentLinks:{title:"Payment Links",intro:"Create shareable payment links for quick checkout"},pricingTables:{title:"Pricing Tables",intro:"Create beautiful pricing tables for your products"},metering:{title:"Usage Metering",intro:"Track usage with meters and sell credits as top-up packages",dialog:{title:"How to set up credit-based metering",description:"Credit-based metering allows you to track usage and charge customers based on consumption. Follow these steps to get started:",steps:{step1:{title:"Create a meter to track your usage events",description:"Set up meters to monitor API calls, data usage, or any measurable activity in your application."},step2:{title:"Create Credit top-up products and pricing",description:"Define credit packages that customers can purchase, with flexible pricing models and validity periods."},step3:{title:"Create a payment link and share it so users can buy Credits",description:"Generate shareable payment links that allow customers to easily purchase credit packages."},step4:{title:"Integrate and report Credit usage",description:"Use our SDK to report usage events and automatically deduct credits from customer balances."}},docText:"Read the credit billing guide"}},promotions:{title:"Promotions",intro:"Create coupons and promotion codes to drive conversions"},donate:{title:"Donation",intro:"Add donation button to your application with <CheckoutDonate />"},paymentMethods:{title:"Payment Methods",intro:"Configure multiple payment methods and currencies"},api:{title:"API Integration",intro:"Integrate with our JavaScript SDK for custom solutions",link:"https://www.npmjs.com/package/@blocklet/payment-js"}},viewDocs:"View docs"}}),NE=Wl({common:{redirecting:"跳转中...",title:"名称",estimated:"预估",total:"总量",active:"生效中",inactive:"未生效",enabled:"已启用",disabled:"已禁用",every:"每",metadata:{label:"元数据",description:"添加自定义键值对以存储有关此计量器的其他信息。",add:"添加更多元数据",edit:"编辑元数据",empty:"无元数据",emptyTip:"您还没有添加任何元数据,您可以添加它",formMode:"切换到表单模式",jsonMode:"切换到JSON模式",jsonPlaceholder:"输入JSON数据...",invalidJson:"JSON格式无效,请检查您的输入",formatJson:"格式化JSON"},price:"价格",add:"添加",fullscreen:"全屏",exit:"退出",maxLength:"最多输入{len}个字符",minLength:"最少输入{len}个字符",invalidCharacters:"无效字符",latinOnly:'至少包含一个字母,并且不能包含中文字符和特殊字符如 <, >、"、’ 或 \\',loading:"加载中...",loadMore:"加载更多",noMoreData:"没有更多数据",rechargeTime:"充值时间",submit:"提交",custom:"自定义",estimatedDuration:"预计可用 {duration}",detail:"详情",setting:"配置",slippage:"滑点下限",slippageMinRate:"最低可接受汇率 {rate} {currency}",slippageTooltip:"自动扣款时可接受的最低汇率,当汇率低于此值时将暂停扣款",welcome:"欢迎使用 Payment Kit",welcomeDesc:"从基础功能开始,轻松接入支付功能。选择下方任意功能,立即开始使用。",quickStart:"快速入门指南",advancedFeatures:"高级功能",quickStarts:"快速入门",homeTagline:"为 Blocklet 构建的去中心化支付解决方案",adminDashboard:"管理后台",customerPortal:"客户门户",copy:"复制",copied:"已复制",copySuccess:"复制成功",copyFailed:"复制失败",copyTip:"请手动复制",save:"保存",saving:"保存中...",saved:"保存成功",refresh:"刷新",cancel:"取消",back:"返回",know:"知道了",confirm:"确认",increased:"上涨",decreased:"下跌",edit:"编辑",view:"查看",select:"选择",clear:"清除",delete:"删除",deleting:"删除中...",activate:"启用",deactivate:"停用",yes:"是",no:"否",never:"永不",created:"创建时间",updated:"更新时间",valid:"有效",events:"事件",details:"详情",discount:"折扣",deleted:"已删除",days:{sunday:"星期日",monday:"星期一",tuesday:"星期二",wednesday:"星期三",thursday:"星期四",friday:"星期五",saturday:"星期六"},maxAmount:"最大金额为 {max}",name:"名称",type:"类型",status:"状态",remainingCredit:"剩余额度",scope:"适用范围",source:"来源",effectiveDate:"生效时间",expirationDate:"过期时间",creditGrant:"信用额度",date:"日期",subscription:"订阅",meter:"计量器",meterEvent:"计量事件",creditAmount:"额度",createdAt:"创建时间",expiresAt:"过期时间",general:"通用",specific:"指定使用范围",paid:"付费",promotional:"促销",viewInvoice:"查看账单",viewSourceData:"查看来源",goToConfigure:"前往配置",noData:"暂无数据"},notification:{preferences:{title:"邮件通知设置",button:"邮件设置",frequency:{label:"通知频率",default:"即时通知 (默认)",daily:"每日",weekly:"每周",monthly:"每月"},day:"日",timeFormatError:"请输入有效的时间,格式为24小时制 (HH:MM)",monthlyHelp:"如果所选日期在某月不存在,将使用该月的最后一天",subscriptionRenewalNote:"此设置适用于订阅续费通知。"}},admin:{description:"管理你的产品、定价、账单和支付流程。",balances:"余额",addresses:"地址",trends:"趋势",metrics:"指标",attention:"注意",overview:"总览",overviewPage:{financialIndicatorsTitle:"财务指标",businessMonitoringTitle:"业务监控",filters:{dateRange:"选择日期范围",currencyLabel:"币种",productLabel:"产品",regionLabel:"地区",allCurrencies:"全部币种",allProducts:"全部产品",allRegions:"全部地区"},financialIndicators:{totalIncome:{title:"总收入",subtitle:"用户实际支付"},refundAmount:{title:"退款金额",subtitle:"已退款总额"},costOfGoods:{title:"进货成本",subtitle:"供应商分成"},netRevenue:{title:"净收入",subtitle:"扣除供货成本后的收入"},promotionCost:{title:"促销成本",subtitle:"折扣"},taxedRevenue:{title:"含税收入",subtitle:"包含税费的收入"}},charts:{title:"交易趋势",payments:"付款",payouts:"出款",refunds:"退款",allCurrencies:"全部币种"},metrics:{transaction:"交易指标",essential:"关键指标"},overdue:{title:"欠费额度",subtitle:"待支付的额度",customers:"{count} 位用户",events:"{count} 笔欠费记录",viewAll:"查看全部",noOverdue:"暂无欠费"}},payments:"支付管理",connections:"连接",back:"返回",actions:"操作",create:"创建",creating:"创建中...",save:"保存",saving:"保存中...",cancel:"取消",paymentLinks:"支付链接",paymentMethods:"支付方式",customers:"客户管理",products:"产品定价",invoiceItems:"账单明细",coupons:"优惠券",tax:"税务",taxRates:"税率",taxRate:{create:"创建税率",createTitle:"新建税率",createAction:"添加税率",created:"税率创建成功",updated:"税率更新成功",deleted:"税率删除成功",label:"税率",view:"查看税率",displayName:"显示名称",displayNamePlaceholder:"显示在账单和报表上的名称",displayNameAuto:"留空则自动生成",displayNameRequired:"请填写显示名称",description:"描述",descriptionPlaceholder:"可选描述信息",country:"国家/地区",countryRequired:"请选择国家/地区",state:"州 / 省",postalCode:"邮政编码",taxCode:"产品税码",taxCodeDescription:"产品税码用于根据产品类型和地区自动计算税费。您可以",taxCodeDescriptionLink:"管理税率",taxCodeDescriptionSuffix:"以创建针对特定税码和地区的自定义税率。",selectTaxCode:"选择产品税码",percentage:"税率 (%)",percentageRequired:"请填写税率",percentageMin:"税率需大于或等于 0%",percentageMax:"税率需小于 100%",active:"默认启用",location:"适用区域",advanced:"高级选项",search:"搜索税率",searchCountry:"搜索国家/地区",back:"返回税率列表",associatedInvoices:"关联账单",deleteTitle:"删除税率",deleteMessage:"确定要删除税率“{name}”吗?该操作无法撤销。",deactivateTitle:"停用税率",deactivateMessage:"确定要停用“{name}”吗?停用后将不再自动应用。",activateTitle:"启用税率",activateMessage:'确定要启用"{name}"吗?启用后可用于新的账单。',edit:"编辑",editTitle:"编辑税率",selectTaxCodeHint:"税率将用于自动计算账单中的税费。",searchPlaceholder:"按产品或税码搜索",previewPlaceholder:"请选择税码以查看详情。",usePreset:"默认税码",noPreset:"暂无默认税码",noSuggestions:"没有符合搜索条件的税码。",relatedInvoiceNum:"关联账单数",notUsed:"未使用",taxCodeLabel:"税码:{code}",types:{general:"通用类别",digital:"数字产品",services:"服务类",physical:"实物商品"}},pricing:"定价",pricingTables:"定价表",vendors:"供应商",billing:"订阅和账单",invoices:"账单",subscriptions:"订阅",meters:"计量器",meterEvents:{title:"计量事件"},overdue:{title:"欠费额度",pendingAmount:"欠费额度",eventCount:"欠费笔数",noOverdue:"暂无欠费",selectCurrency:"币种"},meter:{add:"添加计量器",edit:"编辑计量器",save:"保存计量器",saved:"计量器保存成功",activate:"激活计量器",activated:"计量器激活成功",deactivate:"停用计量器",deactivated:"计量器停用成功",deleted:"计量器删除成功",deleteConfirm:"确定要删除此计量器吗?此操作无法撤销。",activateConfirm:"确定要激活此计量器吗?它将开始收集使用数据。",deactivateConfirm:"停用后,此计量器将无法接收更多事件。尝试为此计量器创建事件将返回错误。之前报告的使用数据将保留。您可以随时重新激活。",view:"查看计量器",basicInfo:"基本信息",basicInfoDescription:"配置计量器的核心设置以跟踪使用事件。",editDescription:"更新计量器名称、描述和元数据。事件名称和聚合方法等核心设置无法更改。",creditMode:{onchain:"OnChain",onChainDescription:"开启后你的 Credit 将作为 Token 发布在 ArcBlock 区块链上,用户的充值、退款和消费将在链上公开记录且不可篡改。",tokenConfiguration:"Token 配置",createNewToken:"创建新 Token",useExistingToken:"使用现有 Token",createTokenHint:"填写 Token 名称和符号以创建新 Token",tokenName:"Token 名称",tokenNamePlaceholder:"请输入 Token 名称",tokenNameRequired:"Token 名称不能为空",tokenSymbol:"Token 符号",tokenSymbolPlaceholder:"请输入 Token 符号",tokenSymbolRequired:"Token 符号不能为空",tokenSymbolFormat:"符号必须为 1-6 个大写字母或数字",createTokenButton:"创建 Token",creatingToken:"创建中...",tokenCreated:"Token 创建成功",tokenCreatedLabel:"Token 已创建",tokenAddress:"Token 地址",selectToken:"选择 Token",selectTokenPlaceholder:"请选择一个现有的 Token",tokenAddressRequired:"Token 地址不能为空",enabled:"已启用"},inactive:"计量器未激活",inactiveTip:"此计量器未收集使用数据。激活它以开始跟踪事件。",name:{label:"计量器名称",required:"计量器名称为必填项",placeholder:"API 请求",help:"此计量器的描述性名称,将在您的仪表板以及用户个人账单中显示。"},eventName:{label:"事件名称",required:"事件名称为必填项",placeholder:"api_request",help:"将发送到此计量器的事件名称",editHelp:"为保持数据一致性,计量器创建后无法更改事件名称。"},aggregationMethod:{label:"聚合方法",required:"聚合方法为必填项",sum:"求和",sumHint:"将所有事件值相加",sumDescription:"求和聚合方法将所有使用事件值相加,并报告事件摘要和计费的总计。",count:"计数",countHint:"计算事件数量",countDescription:"计数聚合方法计算接收到的事件数量,并报告事件摘要和计费的总计数。",last:"最后值",lastHint:"使用最近的事件值",lastDescription:"最后值聚合方法使用接收到的最近事件值,并报告该值用于事件摘要和计费。",editHelp:"为保持数据一致性,计量器创建后无法更改聚合方法。"},unit:{label:"计量单位",required:"计量单位为必填项",placeholder:"请求",help:"此计量器的测量单位",editHelp:"为保持数据一致性,计量器创建后无法更改计量单位。"},description:{label:"描述",placeholder:"跟踪 API 使用情况以进行计费",help:"可选描述,帮助您和您的团队了解此计量器跟踪的内容。"},events:{title:"事件",dailyEventCount:"每日事件数量",dailyTotalValue:"每日总使用量",eventName:"事件名称",value:"使用量",customer:"客户",subscription:"订阅",reportTime:"上报时间",count:"共 {count} 个事件",empty:"暂无事件数据",emptyTip:"当有事件上报时,数据将显示在这里",filterByCustomer:"按客户筛选",eventCount:"事件数量",totalValue:"总使用量",hourly:"按小时",totalEvents:"总事件数",timeRange:"时间粒度",hourlyView:"小时视图",dailyView:"日视图"},usageGuide:{title:"如何报告使用情况",description:'使用事件名称 "{eventName}" 向此计量器发送事件。计量器将{method}值并以{unit}为单位跟踪使用情况。',tip:'使用事件名称 "{eventName}" 向此计量器发送事件。计量器将{aggregationMethodHint},并以{unit}为单位跟踪使用情况。',apiEndpoint:"API 端点",curlExample:"cURL 示例",jsExample:"JavaScript 示例",pythonExample:"Python 示例",important:"重要提示",tip1:"将 YOUR_API_KEY 替换为您的实际 API 密钥",tip2:"事件名称必须完全匹配:{eventName}",tip3:"包含时间戳以进行准确跟踪",moreInfo:"更多信息,请参阅我们的",apiDocs:"API 文档"},products:{count:"{count} 个关联产品",create:"创建产品",created:"产品创建成功",createPrompt:"输入产品名称:",manage:"管理",empty:"无产品",title:"产品",emptyTip:"此计量器尚未关联任何产品。",meterService:"计量服务",creditCharge:"Credit 计费"},creditProducts:{emptyTip:"此计量器尚未关联任何 Credit 产品。"},rechargePackage:{priceId:"充值套餐",tooltip:"充值套餐是用于充值 {name} 的套餐,用户购买后可以获得对应的 {name}。"}},creditProduct:{create:"创建 Credit 产品",defaultName:"{name} 额度充值包",defaultDescription:"{name} 额度充值包",defaultNickname:"Credit 充值",unitLabel:"单位",settings:"Credit 设置",configTitle:"Credit 配置",expirationTime:{label:"过期时间",expireWithNextGrant:"随下次发放过期"},name:{placeholder:"输入 Credit 产品名称"},description:{placeholder:"描述此 Credit 产品的用途和价值"},priceNotice:"Credit 产品用于为用户提供可消费的额度,支持一次性购买和套餐包两种模式。",creditAmount:{label:"Credit 数量",placeholder:"用户购买此价格获得的 Credit 数量",help:"留空表示按单价售卖,填入数字表示固定套餐包",description:"用户购买数量决定获得的 Credit"},validDuration:{label:"可用时长",help:"Credit 的有效期限,从购买时开始计算",description:"设置为 0 表示永不过期",hours:"小时",days:"天",weeks:"周",months:"月",years:"年"},associatedPrices:{label:"关联价格",placeholder:"选择此 Credit 可用于的服务价格",help:"选择后,购买的 Credit 只能用于指定的服务",description:"不选择任何价格表示 Credit 可用于所有服务"},priority:{label:"使用优先级",help:"当用户有多个 Credit 时的使用顺序,数字越小优先级越高",description:"范围:0-100,0 为最高优先级,50 为默认值"},deliveryMode:{label:"发放模式",once:"一次性发放",periodic:"周期性发放"},schedule:{interval:{label:"发放频率",hour:"小时",day:"天",week:"周",month:"月"},amountPerGrant:{label:"每次发放数量",description:"每次发放固定数量的 Credit"},expireWithNextGrant:{label:"随下次发放过期",description:"本次 Credit 将在下一次发放时自动过期"}}},meterEvent:{title:"计量事件详情",id:"事件ID",totalEvents:"总事件数:{count}",noEvents:"暂无事件",noEventsHint:"您可以在测试模式下手动添加测试事件。",identifier:"标识符",customer:"客户",customerId:"客户ID",value:"数值",subscription:"订阅",creditConsumed:"消耗额度",usageValue:"使用量",settlementAmount:"结算额度",reportedAmount:"上报额度",overdueAmount:"欠费额度",reportedAt:"上报时间",processedAt:"处理时间",eventIdentifier:"事件标识符",usageDetails:"使用详情",chart:{eventCount:"每日事件数",totalValue:"每日用量总数"},filter:{customer:"筛选客户"},add:{button:"添加用量",title:"添加用量",customerId:"客户",customerIdPlaceholder:"选择客户",value:"数值",valuePlaceholder:"输入用量数值",subscriptionId:"订阅",subscriptionIdPlaceholder:"输入订阅ID(可选)",subscriptionIdHint:"可选 - 将此用量关联到特定订阅",timestamp:"时间",timestampHint:"此用量发生的时间",validation:"客户和数值为必填项",success:"用量事件添加成功",submit:"提交"}},developers:"开发者工具箱",webhooks:"钩子",events:"事件",refunds:"退款记录",payouts:"出款记录",logs:"日志",passports:"通行证",details:"详情",settings:"系统设置",branding:"品牌设置",business:"企业设置",summary:"摘要",product:{empty:"暂无产品",info:"产品信息",add:"添加产品",view:"查看产品详情",save:"保存产品",saved:"产品已成功保存",additional:"附加选项",edit:"编辑产品",pricing:"定价",find:"选择产品",archive:"存档产品",archiveTip:"存档将隐藏此产品不再允许新购买。确定要存档此产品吗?",unarchive:"取消存档产品",unarchiveTip:"取消存档将使此产品可以用于新的购买。确定要取消存档此产品吗?",remove:"删除产品",removeTip:"删除将隐藏此产品不再允许新购买。确定要删除此产品吗?",archived:"此产品已存档",archivedTip:"此产品无法添加到新的账单、订阅、支付链接或定价表。具有此产品的任何现有订阅将保持活动状态,直到取消,任何现有的支付链接或定价表将被停用。",locked:"此产品已锁定,因为至少有一个价格用于订阅或支付。",currencyNotAligned:"所有价格必须具有相同的货币设置",image:{label:"图片",add:"添加图片"},features:{label:"特点",add:"添加其他特点"},name:{label:"名称",required:"产品名称是必需的",placeholder:"高级套餐"},description:{label:"描述",required:"产品描述是必需的",placeholder:"在结账、账单页面显示的产品描述"},statement_descriptor:{label:"声明描述",placeholder:"ArcBlock"},unit_label:{label:"单位标签",placeholder:"单位"},billingType:{label:"计费类型",standard:"标准计费",metered:"计量计费",help:"选择如何向客户收费"},meter:{label:"计量器",placeholder:"选择计量器来跟踪使用情况",required:"计量计费需要选择一个计量器",help:"选择用于跟踪此产品使用情况的计量器",pricingNote:"对于计量产品,定价会自动基于所选计量器跟踪的使用情况。您只需要设置单价和计费周期。"},cross_sell:{title:"交叉销售",to:"交叉销售",tip:""},type:{label:"产品类型",service:"服务",serviceDesc:"数字服务或订阅",credit:"Credit",creditDesc:"用于基于 Credit 计费场景的充值产品",creditDescLink:"请先创建计量器",good:"商品",goodDesc:"实体商品或有形产品"},vendorConfig:{title:"供应商配置",add:"添加供应商",empty:'未配置供应商。点击"添加供应商"来配置供应商服务。',vendor:"供应商",vendorRequired:"供应商是必填项",productCode:"产品代码",productCodeRequired:"产品代码是必填项",commissionType:"分成类型",commissionRate:"分成比例",commissionRateRequired:"分成比例是必填项",commissionRateMin:"分成比例必须大于或等于0",commissionRateMax:"分成比例不能超过100%",amount:"固定金额",noVendor:"无供应商可选",amountRequired:"固定金额是必填项",totalCommission:"总分成比例:{total}%",totalCommissionExceeded:"总分成比例超过100%:{total}%"}},price:{name:"价格",type:"使用类型",info:"价格信息",plan:"价格方案",lookupKey:"查找键",setAsDefault:"设置为默认价格",detail:"定价详情",addAnother:"添加价格方案",order:"方案 {order}",add:"添加另一个价格",view:"查看价格详情",additional:"附加选项",model:"定价模型",amount:"价格",amountDescription:"这是客户将支付的含税价格。",locked:"此价格已锁定,因为它用于订阅或支付。",amountTip:"对于订阅选择周期,对于其他所有选择一次性。",duplicate:"复制价格",edit:"编辑价格",find:"选择或新建价格",archive:"存档价格",archiveTip:"存档将隐藏此价格不再允许新购买。确定要存档此价格吗?",remove:"删除价格",removeTip:"删除将隐藏此价格不再允许新购买。确定要删除此价格吗?",unit_amount:{required:"价格是必需的",positive:"价格必须是正数",stripeTip:"Stripe要求价格必须大于等于0.5"},nickname:{label:"价格描述",placeholder:""},lookup_key:{label:"查找键",placeholder:"",description:"查找键用于在API中识别价格"},recurring:{interval:"计费周期",metered:"使用量按计量收费?",meteredTip:"计量计费允许您根据每个计费周期结束时的报告的使用情况向客户收费。",aggregate:"按何种方式收费计量使用",intervalCountTip:"计费周期必须是正整数",stripeTip:"Stripe要求计费周期不能为小时"},currency:{add:"添加更多货币",list:"货币"},models:{standard:"标准定价",standardDesc:"单一固定价格",package:"套餐定价",packageDesc:"按单位数量定价",graduated:"毕业定价",volume:"量价定价",custom:"客户自定义价格",usageBased:"基于使用量",creditMetered:"Credit 计量计费"},creditMetered:{label:"Credit 计量计费",placeholder:"选择计量器来跟踪使用情况",required:"Credit 计量计费需要选择一个计量器",help:"选择用于跟踪此产品使用情况的计量器",selectMeter:"选择计量器",pricingNote:"对于计量产品,定价会自动基于所选计量器跟踪的使用情况。",description:"Credit 计量计费的订阅需要有对应的 Credit 消费,如果 Credit 消耗完,对应的服务会停止。"},credit:{saveAsBasePrice:"设为充值套餐",saveSuccess:"设置成功"},types:{onetime:"一次性",onetimeDesc:"收取一次性费用",recurring:"周期性",recurringDesc:"收取持续费用"},paymentType:"付费类型",billingModel:"计费模式",pricing:"定价",additionalCurrencies:"其他货币",advanced:"高级设置",customInterval:"自定义间隔",perUnit:"每单位",choosePricingModel:"选择定价模式",usage:"使用量",usageDesc:"根据用户数量、单位或席位定价。需要记录以便Stripe跟踪客户服务使用情况。",meter:"计量器",billingPeriod:"计费周期",aggregate:{sum:"在周期内的使用值总和",max:"周期内的最大使用值",last_during_period:"周期内的最近使用值",last_ever:"最近的使用值"},upsell:{title:"升级选项",to:"可升级至",tip:""},quantity:{tip:"数量必须是自然数"},quantityAvailable:{label:"可售数量",placeholder:"0表示无限制",format:"可售{num}件",noLimit:"不限制可售数量",valid:"可售数量不得少于已售数量",description:"输入可售数量,0表示不限制可售数量"},quantitySold:{label:"已售数量",format:"已售{num}件"},quantityLimitPerCheckout:{label:"单次购买最大数量",placeholder:"0表示无限制",format:"单次最多购买{num}件",noLimit:"不限制单次购买数量",description:"输入限制单次购买的最大数量, 0表示无限制"},inventory:"库存设置",dynamicPricing:{label:"启用动态定价",description:"价格根据实时汇率波动",config:{title:"动态定价配置",baseAmount:{label:"基准价格",description:"以法定货币计算的基准价格",required:"基准价格是必需的"}},validation:{checking:"正在检查汇率可用性...",rateLine:"当前汇率:1 {currency} ≈ ${rate}",usdLine:"参考 USD:≈ ${amount}",error:"获取汇率失败,货币不支持或者数据源异常",estimatedLine:"预估数量:≈ {amount} {currency}",useAmount:"填入"}},referencePricing:{label:"参考汇率定价",description:"仅用于参考并快速填充币种数量,不会开启动态定价"}},coupon:{create:"创建优惠券",view:"查看优惠券",description:"优惠券可用于对发票、订阅或整个客户账户提供折扣。",listTitle:"优惠券",terms:"优惠条款",tab:"优惠券",redemptions:"兑换次数",expires:"过期时间",noDiscount:"无折扣",name:"名称",nameHelp:"这将显示在客户的收据和发票上。",desc:"描述",descriptionInternal:"此描述仅供内部使用,不会向客户显示。",id:"ID",idOptional:"ID(可选)",idHelp:"这将在 API 中标识此优惠券。我们建议将此留空,以便我们为您生成 ID。",type:"类型",percentageOff:"百分比折扣",fixedAmountOff:"固定金额折扣",percentageDiscount:"百分比折扣",fixedAmount:"折扣金额",currency:"货币",applyToProducts:"应用于特定产品",duration:"持续时间",once:"一次",forever:"永久",repeating:"重复",durationHelp:'对于订阅和客户,这决定了此优惠券一旦兑换后的有效期。一次性发票接受"一次"和"永久"优惠券。',durationInMonths:"持续月数",redemptionLimits:"兑换限制",limitDateRange:"限制客户可以兑换此优惠券的日期范围",limitTotalNumber:"限制此优惠券可以被兑换的总次数",codes:"代码",useCustomerFacingCodes:"使用面向客户的优惠券代码",promotionCodes:"促销码",promotionCodesHelp:"促销码将在优惠券保存后创建。",addPromotionCode:"添加促销码",eligibleFirstTime:"仅限首次订单(每个用户只能享受一次优惠券折扣)",limitNumberRedemptions:"限制此代码可以被兑换的次数",addExpirationDate:"添加过期日期",requireMinimumOrder:"要求最小订单金额",addAnotherCode:"添加另一个代码",saved:"优惠券保存成功",codeOptional:"代码(可选)",codeHelp:"留空将在创建时自动生成",generate:"生成",verificationType:"验证类型",codeOnly:"仅代码",nftVerification:"NFT 验证",vcVerification:"通行证验证",userWhitelist:"限制特定用户",nftSettings:"NFT 验证设置",vcSettings:"通行证验证设置",userWhitelistSettings:"特定用户设置",nftAddresses:"NFT 地址",nftAddressesPlaceholder:"输入 NFT 合约地址",nftTags:"NFT 标签",nftTagsPlaceholder:"输入 NFT 标签",trustedIssuers:"可信发行者",trustedIssuersPlaceholder:"输入可信发行者",trustedParents:"可信 NFT 工厂",trustedParentsPlaceholder:"输入可信 NFT 工厂",minBalance:"NFT 所需数量",requiredRoles:"必需角色",requiredRolesPlaceholder:"输入必需角色",trustedVcIssuers:"可信 VC 发行者",trustedVcIssuersPlaceholder:"输入可信 VC 发行者 DID",customerDids:"客户 DID",customerDidsPlaceholder:"输入客户 DID",customerDidsHelp:"您可以选择现有客户或手动输入DID",maxRedemptions:"最大兑换次数",expiresAt:"过期时间",pressEnterToAdd:"按回车键添加",couponConfiguration:"优惠券配置",selectProducts:"选择产品",noProductsSelected:"未选择产品",newCode:"新代码",createPromotionCode:"创建促销码",promotionCodeDescription:"为此优惠券创建促销码,让客户兑换折扣。",minimumAmount:"最低金额",minimumAmountHelp:"为不同货币设置最低订单金额",discountAmount:"折扣金额",currencies:"货币",times:"次",months:"月",addProduct:"添加另一个产品",unlimited:"不限量",inactive:"优惠券已停用",inactiveTip:"此优惠券当前处于停用状态,无法使用。",discount:"折扣",updated:"更新时间",timesRedeemed:"已使用次数",deletedSuccessfully:"优惠券删除成功",deleteConfirmTitle:"删除优惠券",deleteConfirmMessage:"确定要删除此优惠券吗?此操作无法撤销。",cannotDeleteWithPromotionCodes:"存在促销码时无法删除优惠券",couponTermsPercentage:"{percent}%",couponTermsFixedAmount:"{amount} {symbol}",couponTerms:{forever:"永久享 {couponOff} 折扣",once:"单次享 {couponOff} 折扣",repeating:"{months} 个月内享 {couponOff} 折扣"},couponTermsDuration:{forever:"永久",once:"单次",repeating:"{months} 个月"},applicableProducts:"适用产品",noApplicableProducts:"此优惠券适用于所有产品",activeRedemptions:"兑换使用记录",customers:"客户",subscriptions:"订阅",noCustomersFound:"未找到客户",noCustomersRedeem:"当前没有客户使用此优惠券",noSubscriptionsFound:"未找到订阅",noSubscriptionsRedeem:"当前没有订阅使用此优惠券",rename:"重命名",renameCoupon:"重命名优惠券",updateCouponDetails:"更新优惠券详情",nameWillAppear:"此名称将显示在客户的收据和发票上。",updateCouponButton:"更新优惠券",discountStart:"折扣开始时间",usageStats:"使用统计",totalDiscounts:"总折扣记录",uniqueSessions:"独立会话",uniqueSubscriptions:"独立订阅",promotionCodesUsed:"使用的促销码",noExpiration:"无过期时间",usagePeriod:"使用时期",firstUsed:"首次使用",lastUsed:"最后使用",promotionCodeInfo:"促销码信息",directCouponUsage:"直接优惠券使用",usageLimit:"使用次数",discountInfo:"折扣信息",discountPeriod:"折扣有效期",couponExpires:"优惠券过期",totalSavings:"累计优惠",viewPromotionCode:"查看促销码"},discount:{totalSaved:"总共节省",timesUsed:"使用次数",appliedDiscounts:"应用的优惠"},promotionCode:{code:"代码",status:"状态",redemptions:"兑换次数",expires:"过期时间",created:"创建时间",actions:"操作",active:"生效中",inactive:"已停用",expired:"已过期",maxedOut:"已用尽",viewDetails:"查看详情",edit:"编辑促销码",delete:"删除促销码",archive:"存档促销码",archiveTip:"存档后,此促销码将不再允许新兑换。确定要存档此促销码吗?",deleteTip:"删除将永久删除此促销码。确定要删除此促销码吗?",title:"促销码",id:"ID",type:"类型",couponId:"优惠券ID",maxRedemptions:"最大兑换次数",timesRedeemed:"已兑换次数",verificationType:"验证类型",updated:"更新时间",activate:"激活",deactivate:"停用",inactiveTitle:"促销码已停用",inactiveTip:"此促销码目前已停用,无法使用。",deleteSuccess:"促销码删除成功",activateSuccess:"促销码激活成功",deactivateSuccess:"促销码停用成功",verificationConfig:"验证配置",nftAddresses:"NFT地址",nftTags:"NFT标签",minBalance:"最小余额",requiredRoles:"所需角色",trustedIssuers:"可信签发方",allowedUsers:"允许的用户",noNftConfig:"无NFT配置",noVcConfig:"无VC配置",noUsersSpecified:"未指定用户",codeVerificationOnly:"仅代码验证",unlimited:"无限制",never:"永不过期",yes:"是",no:"否",verificationTypeMap:{code:"仅代码",nft:"NFT验证",vc:"通行证验证",user_restricted:"限制特定用户"}},paymentLink:{view:"查看支付链接",info:"支付链接信息",add:"创建支付链接",save:"创建链接",openLink:"打开URL",copyLink:"复制URL",saved:"支付链接已成功保存",additional:"附加选项",beforePay:"支付页面",afterPay:"支付后",products:"产品",addProduct:"添加另一个产品",requireBillingAddress:"收集客户的账单地址",requirePhoneNumber:"收集客户的电话号码",allowPromotionCodes:"允许促销码",enablePromotionCodes:"启用促销码",disablePromotionCodes:"禁用促销码",enablePromotionCodesTip:"为此支付链接启用促销码功能。客户在结账时将能够使用折扣代码。",disablePromotionCodesTip:"为此支付链接禁用促销码功能。客户在结账时将无法使用折扣代码。",includeFreeTrial:"包含免费试用",noStakeRequired:"无需质押",showProductFeatures:"显示产品特性",allowSkipPaymentMethod:"允许 $0 结账时跳过绑定支付方式",enableSkipPaymentMethod:"允许跳过支付方式",disableSkipPaymentMethod:"要求绑定支付方式",enableSkipPaymentMethodTip:"当结账金额为 $0 时,允许客户跳过绑定支付方式。若未绑定,订阅将在当前周期结束时自动取消。",disableSkipPaymentMethodTip:"即使结账金额为 $0,也要求客户提供支付方式。",freeTrialDaysPositive:"免费试用天数必须是正数",includeCustomFields:"添加自定义字段",requireCrossSell:"用户必须选择交叉销售的商品(如果有的话)",confirmPage:"确认页面",showConfirmPage:"显示确认页面",customMessage:"用自定义消息替换默认消息",customMessageTip:"包括您认为合适的任何细节,如交付信息。",mintNft:"购买完成时铸造 NFT",mintNftFrom:"从下面的 NFT 集合铸造",noConfirmPage:"不显示确认页面",createInvoice:"为相关付款创建账单。",adjustable:"可调整数量",adjustableQuantity:"允许客户调整数量",noProducts:"支付链接必须至少有一个产品",noRedirectUrl:"支付链接必须有重定向URL",noSubscriptionTrialDays:"您必须为订阅指定试用期",recurringNotAligned:"所有行项目的价格必须具有相同的周期",currencyNotAligned:"所有行项目的价格必须具有相同的货币设置",edit:"编辑支付链接",rename:"更改名称",archive:"存档支付链接",archiveTip:"存档将隐藏此支付链接不再允许新购买。确定要存档此支付链接吗?",remove:"删除支付链接",removeTip:"删除将隐藏此支付链接不再允许新购买。确定要删除此支付链接吗?",name:{label:"名称",placeholder:"不向消费者展示"},adjustableQuantityError:"最小数量必须小于最大数量"},payout:{list:"对外支付",name:"对外支付",view:"查看对外支付",empty:"没有记录",attention:"失败的对外支付",requestRefund:"请求退款",confirmRefund:"确定要向供应商请求退款吗?",refundRequested:"退款请求已发送给供应商",refundReason:"退款原因",refundReasonPlaceholder:"请输入退款原因(至少 5 个字符)",refundReasonRequired:"退款原因为必填项",refundReasonMinLength:"退款原因至少需要 {min} 个字符",refundReasonHelper:"请输入至少 {min} 个字符",status:{active:"生效中",paid:"已支付",succeeded:"成功"}},pricingTable:{view:"查看定价表",add:"创建定价表",save:"创建",openLink:"打开URL",copyLink:"复制URL",saved:"定价表已成功保存",edit:"编辑定价表",rename:"更改名称",archive:"存档定价表",archiveTip:"存档将隐藏此定价表不再允许新购买。确定要存档此定价表吗?",remove:"删除定价表",removeTip:"删除将隐藏此定价表不再允许新购买。确定要删除此定价表吗?",name:{label:"名称",placeholder:"不向消费者展示"},display:"显示设置",highlight:"突出显示产品",customer:"客户门户"},paymentIntent:{list:"付款记录",name:"付款记录",view:"查看付款详情",empty:"没有付款记录",refund:"退款",status:{active:"生效中",paid:"已支付",succeeded:"成功"},received:"实收金额",attention:"失败的付款",refundError:"退款申请失败",refundSuccess:"退款申请已成功创建",cancelRefund:"取消退款",refundCanceled:"取消退款成功",refundCanceledError:"取消退款失败",refundCanceledTip:"您确定要取消退款申请吗?取消后,退款将不再进行。",refundForm:{reason:"退款原因",amount:"退款金额",description:"退款说明",duplicate:"订单因重复下单已被取消并退款",requestedByCustomer:"订单已被客户取消并退款",requestedByAdmin:"订单已被管理员取消并退款",fraudulent:"订单因涉嫌欺诈已被取消并退款",expiredUncapturedCharge:"订单因支付未完成已被取消并退款",amountRange:"退款金额必须在 {min} {symbol} 到 {max} {symbol} 之间",amountHelper:"目前最大退款金额为{max} {symbol}",required:"请完整填写退款信息",empty:"当前订单已全部退款完成"}},paymentMethod:{_name:"支付方式",type:"类型",add:"添加支付方式",edit:"编辑支付方式",save:"保存支付方式",saved:"支付方式已成功保存",settings:"设置",gasTip:"使用 {method} 支付需保证账户在 {chain} 链上有余额支付手续费",recharge:"扫码充值",props:{type:"类型",confirmation:"确认",recurring:"重复支持",refund:"退款支持",dispute:"纠纷支持",currencies:"货币支持",explorer_host:"区块浏览器",balance:"余额"},name:{label:"名称",tip:"面向消费者"},description:{label:"描述",tip:"不向消费者展示"},stripe:{dashboard:{label:"仪表板 URL",tip:"用于生成指向 Stripe 仪表板的链接"},publishable_key:{label:"可发布密钥",tip:"可发布密钥,请查看仪表板 > 开发人员 > API密钥"},secret_key:{label:"秘密密钥",tip:"秘密密钥,请查看仪表板 > 开发人员 > API密钥"},webhook_signing_secret:{label:"钩子签名密钥",tip:"钩子签名密钥,请查看仪表板 > 开发人员 > 钩子 > 签名密钥"},webhookHint:"若无法接收 Webhook 事件,可手动在环境变量配置 STRIPE_WEBHOOK_SECRET",configureEnv:"前往配置"},arcblock:{chain_id:{label:"链 ID",tip:"仅是名称"},api_host:{label:"API 地址",tip:"发送交易的 API 端点"},explorer_host:{label:"区块浏览器",tip:"查看交易详情的地址"}},ethereum:{chain_id:{label:"链 ID",tip:"必须是有效的EVM链ID,通常是一个整数,https://chainlist.org"},api_host:{label:"RPC 端点",tip:"发送交易的RPC端点"},explorer_host:{label:"区块浏览器",tip:"查看交易详情的区块浏览器"},native_symbol:{label:"货币符号",tip:"链上主货币符号"},confirmation:{label:"确认区块数",tip:"交易标记为确认需要的区块数"}},evm:{checking:"正在检查连接...",connected:"连接成功",connectionError:"连接失败",blockHeight:"区块高度",rpcStatus:"RPC 状态"},base:{chain_id:{label:"链 ID",tip:"必须是有效的EVM链ID,通常是一个整数,https://chainlist.org"},api_host:{label:"RPC 端点",tip:"发送交易的RPC端点"},explorer_host:{label:"区块浏览器",tip:"查看交易详情的区块浏览器"},native_symbol:{label:"货币符号",tip:"链上主货币符号"},confirmation:{label:"确认区块数",tip:"交易标记为确认需要的区块数"}},google_play:{package_name:{label:"应用包名",tip:"例如 com.example.app,在 Play Console 中配置"},service_account_json:{label:"服务账号 JSON",tip:"从 Google Cloud Console 下载的 service account credentials JSON,整段粘贴",invalidJson:"不是合法的 JSON",missingFields:"JSON 缺少 client_email 或 private_key 字段",detectedClient:"识别到客户端"},pubsub_topic_name:{label:"Pub/Sub 主题名(可选)",tip:"projects/<project-id>/topics/<topic-name>,用于接收 RTDN"}},app_store:{bundle_id:{label:"应用 Bundle ID",tip:"例如 com.example.app,在 App Store Connect 中配置"},environment:{label:"环境",tip:"StoreKit 2 JWS 中携带的 environment 必须与此匹配",production:"正式环境",sandbox:"沙盒环境"},shared_secret:{label:"Shared Secret(StoreKit 1 用)",tip:"App-Specific Shared Secret,用于 legacy receipt 校验。StoreKit 2 JWS 不需要。在 App Store Connect → App Information → App-Specific Shared Secret"},serverApi:{heading:"Server API 凭据(可选)",tip:"StoreKit 2 JWS 校验不需要凭据;只在调用 App Store Server API 查询订阅状态时使用。三项需同时填写。"},issuer_id:{label:"Issuer ID",tip:"App Store Connect API 的 Issuer ID"},key_id:{label:"Key ID",tip:"App Store Connect API 的 Key ID"},private_key_pem:{label:"私钥 (.p8 内容)",tip:"从 App Store Connect 下载的 .p8 文件内容,整段粘贴"}}},paymentCurrency:{name:"支付货币",add:"添加货币",edit:"编辑货币",save:"保存货币",saved:"货币已成功保存",delete:"删除货币",deleteConfirm:"确定要删除此货币吗?一旦删除,将无法恢复",deleted:"货币已成功删除",quickAdd:"快速添加已支持的货币",searchToken:"搜索货币",orManualInput:"或在下方手动填写货币信息",logo:{label:"Logo",tip:"在支付页面显示"},contract:{label:"合约地址",tip:"用于获取代币符号、小数位数和其他信息"}},event:{empty:"没有事件",view:"查看事件",data:"事件数据",webhooks:"钩子调用",type:"类型",pendingWebhooks:"待处理的钩子",noAttempts:"无调用记录",retry:"重试",retrying:"重试中...",retryOptions:{title:"重试 Webhook",confirmMessage:"确定要重试此 webhook 吗?这将向 webhook 端点发送另一个请求。",success:"Webhook 已安排重试",error:"重试 webhook 失败"},response:"响应",request:"请求",eventData:"事件数据",events:{dailyEventCount:"每日事件数量",dailyTotalValue:"每日总使用量",eventName:"事件名称",value:"值",customer:"客户",subscription:"订阅",reportTime:"上报时间",count:"共 {count} 个事件",empty:"暂无事件数据",emptyTip:"当有事件上报时,数据将显示在这里",filterByCustomer:"按客户筛选",eventCount:"事件数量",totalValue:"总使用量"}},invoice:{view:"查看账单",name:"账单",from:"账单来自",empty:"没有账单",status:{active:"生效中",paid:"已支付",succeeded:"成功"},number:"账单编号",description:"账单说明",dueDate:"截止日期",finalizedAt:"已完成时间",paidAt:"支付日期",summary:"摘要",billingContextNote:"本账单金额基于结算时的实时价格计算。",dynamicPricingNote:"本账单使用动态定价并锁定了汇率。",billTo:"开具给",billing:"计费方式",download:"下载PDF",edit:"编辑账单",duplicate:"复制账单",retryUncollectible:{title:"重新收款",tip:"确定要重新尝试收取该笔账单吗?系统将再次尝试向客户发起扣款。",success:"重新收款请求已提交"},attention:"未完成的账单",returnStake:{title:"退还质押",tip:"您确定要退还质押吗?此操作将立即退还质押给客户。",success:"质押退还申请已提交"},void:{title:"作废账单",tip:"您确定要作废此账单吗?此操作将立即作废账单。",success:"账单作废成功"}},vendor:{create:"创建供应商",edit:"编辑供应商",delete:"删除供应商",save:"保存供应商",saved:"供应商保存成功",test:"测试",testConnection:"测试连接",testConnectionTip:'确定要测试供应商 "{name}" 的连接吗?',testConnectionSuccess:"连接测试成功",testConnectionFailed:"连接测试失败",testSuccess:"连接测试成功",testAfterSave:"供应商保存成功。您可以测试连接以验证配置是否正确。",testToEnable:"供应商保存成功。请测试连接以启用供应商。",enabled:"已启用",disabled:"未启用",addressCheckFailed:"地址检测失败,启用状态下无法保存",updateSuccess:"供应商更新成功",testFailed:"连接测试失败 (状态码: {status})",testError:"连接测试失败 - 网络错误",vendorKeyInvalid:"供应商类型只能包含小写字母、数字和下划线",deleteTitle:"删除供应商",deleteContent:'确定要删除供应商 "{name}" 吗?此操作无法撤销。',deleteTip:'确定要删除供应商 "{name}" 吗?此操作无法撤销。',activate:"激活供应商",activateTip:'确定要激活供应商 "{name}" 吗?',deactivate:"停用供应商",deactivateTip:'确定要停用供应商 "{name}" 吗?',name:"供应商名称",nameRequired:"供应商名称是必填项",vendorType:"供应商类型",vendorTypeRequired:"供应商类型是必填项",didnames:"DID Names",launcher:"Launcher",vendorKey:"供应商标识",vendorKeyRequired:"供应商标识是必填项",vendorKeyHelp:"供应商的唯一标识符",description:"描述",displayNameRequired:"前台展示名称是必填项",displayNameHelp:"此数据会展示到付款成功后的安装界面",appUrl:"应用地址",appUrlRequired:"应用地址是必填项",appUrlInvalid:"请输入有效的 URL,以 http:// 或 https:// 开头",appUrlHelp:"供应商应用的基础 URL 地址",vendorDid:"供应商 DID",vendorDidInvalid:"请输入有效的 DID",vendorDidHelp:"供应商的可选 DID 地址",webhookPath:"Webhook路径",webhookPathInvalid:"请输入以/开头的有效路径",webhookPathHelp:"可选的webhook回调路径(如:/webhooks/status)",blockletMetaUrl:"Blocklet元数据URL",blockletMetaUrlRequired:"Blocklet元数据URL是必填项",blockletMetaUrlInvalid:"请输入有效的URL,以http://或https://开头",blockletMetaUrlHelp:"必填的blocklet元数据URL,用于获取应用信息",commission:"分成",commissionRate:"分成比例",commissionRateRequired:"分成比例是必填项",commissionRateMin:"分成比例必须大于或等于0",commissionRateMax:"分成比例过高",commissionType:"分成类型",commissionRateHelp:"分成比例,以百分比形式",commissionAmountHelp:"固定分成金额",percentage:"百分比",fixedAmount:"固定金额",active:"启用",inactive:"禁用",basicInfo:"基本信息",apiConfig:"API配置",commissionConfig:"分成配置",status:"状态",brokerDID:"平台 DID",brokerPublicKey:"平台公钥"},subscription:{view:"查看订阅",name:"订阅",empty:"没有订阅",status:{active:"生效中",paid:"已支付",succeeded:"成功"},viewAll:"查看历史订阅",noActiveEmpty:"您当前没有服务中的订阅,您可以选择查看历史订阅",includedServices:"包含的服务",serviceHome:"访问服务主页",serviceDashboard:"访问服务管理后台",product:"产品",attention:"将过期的订阅",collectionMethod:"计费",channel:"渠道",currentPeriod:"当前周期",iap:{googlePlayTitle:"Google Play 订阅详情",appStoreTitle:"App Store 订阅详情",purchaseToken:"购买令牌",orderId:"订单号",productId:"产品 ID",originalTransactionId:"原始交易 ID",transactionId:"本次交易 ID",expiryTime:"过期时间",environment:"环境"},trialingPeriod:"试用期",trialEnd:"试用期结束于 {date}",willEnd:"将于 {date} 结束",ended:"结束于 {date}",renew:"下次续费: {date}",discount:"折扣",activeDiscount:"当前优惠",startedAt:"开始于",nextInvoice:"下次账单时间",nextInvoiceAmount:"下次账单金额",nextInvoiceAmountTip:"下次账单金额为预估,最终金额会根据实际使用情况结算。",itemId:"订阅项目ID",update:"更新订阅",resume:"恢复付款",resumeTip:"您确定要继续收款吗?此订阅的未来账单将继续付款。",paymentAddress:"扣费地址",currentBalance:"扣款账户余额",insufficientBalance:"余额不足,立即充值",cancel:{schedule:"计划取消",title:"取消订阅",required:"必须指定自定义取消时间",will:"于 {date} 取消",done:"已取消",at:{title:"取消",now:"立即取消({date})",current_period_end:"本周期结束后({date})",custom:"自定义取消日期",timeError:"取消时间必须在当前周期内"},refund:{title:"退款",none:"仅取消不退款",last:"退款最近付款的全部 {total}{symbol}",proration:"退款最近付款的未使用部分 {unused}/{total}{symbol}"},staking:{title:"质押",none:"不退还 / 罚没质押",proration:"退还剩余部分 {unused}{symbol}",slash:"罚没剩余部分 {unused}{symbol}",slashReason:"罚没原因",slashTip:"该订阅剩余的质押部分 {unused}{symbol} 将被罚没, 请确认是否继续?",slashTitle:"罚没质押"},comment:{title:"原因",placeholder:"请填写取消订阅的原因"}},pause:{title:"暂停付款",required:"必须指定自定义恢复时间",type:{title:"持续时间",never:"无限期暂停",custom:"暂停到自定义日期"},behavior:{title:"账单行为",keep_as_draft:"保留账单为草稿",keep_as_draft_tip:"对于目前提供服务但等待收款的企业。",mark_uncollectible:"将账单标记为不可收款",mark_uncollectible_tip:"对于目前提供免费服务的企业。",void:"作废账单",voidTip:"对于目前不提供服务的企业。"},until:{never:"付款暂停",custom:"付款暂停直到{date}"}},usage:{title:"使用记录",current:"当前周期的使用记录",range:"周期使用记录({start} - {end})",view:"查看使用情况",vary:"随使用情况变化",used:"已使用单位",cycle:"统计周期"},batchPay:{button:"批量付款"},payerAddress:"扣费地址",noPaymentMethod:"未绑定",bindPaymentMethod:"立即绑定",bindPaymentMethodFirst:"请先绑定支付方式后再恢复订阅",noPaymentMethodWarning:"当前订阅未绑定支付方式,请尽快绑定,否则订阅将在当前周期结束时自动取消。",changePayer:{btn:"变更",stripe:{linkType:"Stripe Link",bankAccount:"银行账户"},connect:{title:"变更扣费地址",success:"扣费地址变更成功",error:"扣费地址变更失败"}}},customer:{view:"查看客户",edit:"编辑信息",spent:"花费金额",refund:"退款金额",stake:"质押金额",dispute:"争议金额",token:"链上余额",due:"欠款金额",name:"名称",email:"电子邮件",phone:"电话",invoicePrefix:"账单前缀",googlePlayUuid:"Google Play UUID",appStoreUuid:"App Store UUID",balance:"余额 ({currency})",summary:{refund:"退款金额",spent:"花费金额",due:"欠款金额",stake:"质押金额",stats:"统计",balance:"余额"},address:{label:"地址",country:"国家",state:"州或省份",city:"城市或城镇",line1:"地址",line2:"详细地址",postal_code:"邮政编码"},creditGrants:{tab:"信用额度",title:"信用额度",summary:"额度汇总",noGrants:"未找到信用额度",grantDetail:"信用额度详情",overview:"概览",overviewDescription:"监控所有货币的信用余额、使用情况和未偿债务。",availableBalance:"可用余额",usage:"使用情况",viewInvoice:"查看账单",viewGrants:"查看额度",viewUsage:"查看使用情况",recentActivity:"最近活动",quickStats:"快速统计",activeGrants:"活跃额度",totalCreditValue:"总信用价值",outstandingDebt:"未偿债务",buyCredits:"购买额度",viewAllActivity:"查看所有活动",creditBalance:"信用余额",totalAmount:"总额度",pendingAmount:"欠费额度",grantCount:"额度数量",noGrantsDescription:"您还没有任何信用额度",relatedGrants:"信用额度",category:"分类",status:{granted:"生效中",pending:"待生效",expired:"已过期",depleted:"已耗尽",voided:"已作废"},originalAmount:"原始金额",grantId:"额度ID",grants:"额度",addCredit:"添加额度",viewDetails:"查看详情"}},passport:{intro:"管理应用通行证的付款设置,必须同时设置商品和购买入口",payLink:"支付入口",payPreview:"支付预览",preview:"支付页面预览",assign:"分配给通行证",assignTip:"将此支付链接分配给所选通行证,以使其可供购买",unassign:"重置购买配置",unassignTip:"确认要将购买入口和关联商品配置清空?",assignError:"必须选择一个要分配的通行证"},webhookEndpoint:{hosted:"托管的钩子",add:"添加钩子",addTip:"设置钩子端点以接收来自",listen:"监听",version:"API版本",attempts:"钩子调用",url:{label:"URL",description:"端点URL"},description:{label:"描述",description:"此端点用于何种目的的可选描述。"},events:{label:"选择要监听的事件",description:""}},refund:{name:"退款",attention:"失败的退款",view:"查看退款详情",status:{active:"生效中",paid:"已支付",succeeded:"成功"}},usageRecord:{empty:"用量记录为空",add:{label:"添加用量记录",success:"添加用量记录成功",quantity:"数量"}},donate:{title:"打赏配置",mountLocation:"名称",component:"组件",description:"描述",status:{title:"启用状态",active:"启用",inactive:"关闭",inactiveTip:"关闭打赏后,打赏按钮将不再显示,用户无法使用打赏功能,请确认是否关闭?",inactiveTitle:"关闭打赏",activeSuccess:"打赏功能已启用",inactiveSuccess:"打赏功能已关闭"},editTitle:"编辑打赏配置",updateSuccess:"打赏配置已更新",amountSettings:"金额设置",presets:"预设金额",presetsHelper:"请输入预设金额,用英文逗号分隔(例如:1,5,10)",preset:"默认金额",presetHelper:"默认选中的金额(必须是预设金额之一)",custom:"允许自定义金额",minimum:"最小金额",maximum:"最大金额",amountRange:"金额范围:{min} - {max}",customAmount:"自定义金额",buttonSettings:"打赏按钮设置",btn:{text:"按钮文本",helper:"设置打赏按钮显示的文字",preview:"按钮预览"},dialog:{preview:"打赏弹窗预览",confirmButton:"确认打赏 {amount}"},previewTitle:"实时预览",validation:{invalidPreset:"默认金额必须是预设金额之一",invalidRange:"最小金额必须小于最大金额",invalidAmount:"金额必须在允许范围内"},historyType:{title:"打赏记录显示方式",avatar:"头像墙",list:"列表"},intro:"配置打赏按钮和打赏弹窗的展示效果,完成配置后打赏功能将自动生效。",usage:{viewExample:"查看使用示例",title:"打赏组件使用示例",description:"要使用打赏功能,您需要先在组件中正确配置 PaymentProvider 和 DonateProvider。以下是一个基本示例:",note:"注意:mountLocation 必须是唯一的,用于标识打赏实例。配置完成后,该实例将出现在列表中,您可以进行进一步的设置。"}},vaultConfig:{title:"冷钱包配置",description:"启用冷钱包后,系统会在热钱包余额超过阈值时,自动将多余资金转移至安全的离线存储。这种隔离机制将大部分资产与在线环境分离,有效抵御网络攻击,显著提升资金安全性。",learnMore:"了解更多",goToConfig:"前往系统配置",notConfigured:"冷钱包尚未配置",configureFirst:"请先#前往仪表盘#配置冷钱包地址,然后再设置各币种参数。",ownerOnly:"仅拥有所有者权限的管理员可修改冷钱包设置。",permissionRequired:"需要所有者权限",enabled:"状态",enabledYes:"已启用",enabledNo:"未启用",depositThreshold:"存入阈值",withdrawThreshold:"提取阈值",bufferThreshold:"差额阈值",bufferThresholdHelp:"只有当超出存入阈值的金额达到差额阈值时,才会触发归集操作.",bufferThresholdInvalid:"差额阈值不能小于0",edit:"配置",enable:"启用",editTitle:"配置 {currency} 冷钱包设置",enableTitle:"为 {currency} 启用冷钱包",enableVault:"启用冷钱包",enableVaultHelp:"启用冷钱包后,超额资金将自动转入冷钱包,提款超出阈值需管理员审核,确保资产安全与风控。",depositThresholdHelp:"当热钱包余额超过此金额时,多余资金将自动转入冷钱包。",withdrawThresholdHelp:"当单笔提款超过此金额时,需由冷钱包管理员审核并批准。",notConfig:"未配置",noLimit:"无限制",withdrawThresholdNoLimit:"0 表示无提款限制",depositThresholdRequired:"存入阈值必须大于0",withdrawThresholdInvalid:"提款阈值不能小于0",enableSuccess:"{currency} 冷钱包已启用",disableSuccess:"{currency} 冷钱包已关闭",updateSuccess:"{currency} 冷钱包设置已更新",depositConfirmTitle:"转入冷钱包",depositConfirmMessage:"{currency}余额已超过阈值,是否立即转入冷钱包?",depositQueued:"申请转入冷钱包成功,请稍后查看结果",depositFailed:"申请转入冷钱包失败",appBalance:"热钱包余额"},creditGrants:{tab:"信用额度",title:"额度",summary:"额度汇总",noGrants:"未找到信用额度",grantDetail:"信用额度详情",overview:"额度概览",overviewDescription:"监控所有货币的信用余额、使用情况和未偿债务。",availableBalance:"可用余额",usage:"使用情况",viewGrants:"查看额度",viewUsage:"查看使用情况",recentActivity:"最近活动",quickStats:"快速统计",activeGrants:"活跃额度",totalCreditValue:"总信用价值",outstandingDebt:"未偿债务",buyCredits:"购买额度",viewAllActivity:"查看所有活动",creditBalance:"信用余额",totalAmount:"总额度",pendingAmount:"欠费额度",grantCount:"额度数量",noGrantsDescription:"您还没有任何信用额度",status:{granted:"生效中",pending:"待生效",expired:"已过期",depleted:"已耗尽",voided:"已作废"},originalAmount:"原始金额",grantId:"额度ID",grants:"额度",addCredit:"添加额度",viewDetails:"查看详情"},creditTransactions:{tab:"账单",title:"额度账单",summary:"账单汇总",noTransactions:"未找到额度账单",totalTransactions:"总账单数",totalCreditUsed:"总使用额度",transactionDate:"交易时间"},exchangeRateProvider:{title:"汇率数据源",subtitle:"管理动态定价使用的汇率数据源",medianStrategyNote:"系统会自动从多个数据源计算汇率。只有当数据源长期异常或需要临时禁用时才需要在这里处理。",disableConfirmTitle:"确认停用该数据源?",disableConfirmMessage:"停用后可能影响动态计价支付流程,确定要停用吗?",table:{name:"名称",participation:"参与计算",health:"健康度",recentActivity:"最近活动",trustLevel:"可信度",trustLevelTip:"表示可信度与参与资格,不表示优先使用顺序",enabled:"启用",lastUpdate:"最近更新:{time}",failures24h:"24h 失败次数:{count}"},participation:{included:"已参与",excluded:"已排除"},health:{active:"健康",degraded:"不稳定",paused:"异常",inactive:"异常"},status:{active:"正常",degraded:"降级",paused:"已暂停",inactive:"停用"},create:{title:"新增数据源",primaryAction:"新增汇率数据源"},edit:{title:"编辑 {name}",name:"名称",nameHelp:"数据源的唯一标识",nameRequired:"名称必填",type:"数据源类型",typeHelp:"数据源类型。创建后不可修改。",baseUrl:"接口地址(可选)",baseUrlHelp:"自定义接口地址,用于代理或自建实例。默认:{defaultUrl}",apiKey:"API Key",apiKeyHelp:"访问数据源的 API 密钥。",apiKeyLinkText:"API Key 管理地址:",apiKeyLinkAction:"CoinMarketCap 账户",testConnection:"测试连接",testing:"测试中...",testSuccess:"连接成功({symbol}/USD:{rate},{time}ms)",testFailed:"连接失败:{error}",enabled:"启用",priority:"优先级",priorityHelp:"数字越小优先级越高。系统按优先级顺序使用数据源。",status:"状态",statusHelp:'设置为"已暂停"可临时禁用此数据源。',pausedReason:"暂停原因",pausedReasonHelp:"说明为何暂停此数据源(可选)。"}}},empty:{image:"无图片",refunds:"没有退款记录",invoices:"没有账单",invoiceItems:"没有账单明细",subscriptions:"没有订阅记录",customers:"没有客户",products:"没有产品",payouts:"没有出款记录",paymentLinks:"没有支付链接",paymentMethods:"没有支付方式",pricingTables:"没有定价表",paymentCurrencies:"没有货币",webhooks:"没有钩子",events:"没有事件",records:"没有找到匹配的记录",payments:"没有付款记录",prices:"没有价格",pricing:"您还没有设置定价,您可以添加它",summary:"没有摘要"},customer:{subscription:{manage:"管理订阅",cancel:"取消订阅",title:"订阅"},invoiceHistory:"历史账单",product:{empty:"没有订阅产品"},credit:{recharge:"购买额度",autoRecharge:"自动充值",unsupported:"暂不支持购买额度"},recharge:{title:"充值",amount:"金额",submit:"提交",unsupported:"暂不支持该货币充值,请选择其他货币",receiveAddress:"收款地址",view:"查看订阅",success:"充值成功",estimatedDuration:"预计可用 {duration} {unit}",custom:"自定义",intervals:"个周期",history:"充值记录",relatedSubscriptions:"关联订阅",rechargeTooltip:"点击充值余额"},delegation:{title:"检测到你未完成账户的授权,为了不影响订阅的扣费,请尽快完成授权",btn:"支付授权",success:"授权成功",error:"授权失败"},overdraftProtection:{title:"订阅守护",setting:"配置订阅守护",learnMore:"点击了解更多关于订阅守护",tip:"为避免因扣费失败中断服务,您可以通过质押开启订阅守护。按时付款不会收取额外费用,请及时付清账单,若可用质押不足或者超期未付,我们将从质押中扣除并收取服务费",enabled:"已启用",disabled:"未启用",returnRemaining:"退还剩余质押",returnRemainingTip:"退还剩余质押后,订阅守护服务将自动关闭,请确认操作。",applyRemainingSuccess:"质押退还申请成功",remaining:"您当前剩余可用质押:{amount} {symbol}, 每周期预计需质押:{estimateAmount} {symbol}。",noRemaining:"当前无质押,为确保订阅守护服务的正常使用,请至少质押 {estimateAmount} {symbol}。",remainingNotEnough:"当前存在未支付的账单,总计 {due} {symbol},如果不支付,您当前剩余质押将无法覆盖下期账单,剩余可用质押:{unused} {symbol},请质押至少 {min} {symbol}。",due:"请先支付欠款",insufficient:"额度不足,下期账单将无法使用订阅守护服务, 请添加额度",insufficientTip:"订阅守护服务额度不足,请尽快质押保证订阅守护服务的正常使用。",intervals:"个周期",estimatedDuration:"预计可用 {duration} {unit}",rule:"规则:N * ( P + Fee )",ruleTip:"N 为周期数, P 为订阅账单费用, Fee 为订阅守护服务费用,单次费用为 {gas} {symbol}",min:"质押金额不得小于 {min} {symbol}",settingSuccess:"配置更新成功",settingError:"配置更新失败",openSuccess:"订阅守护已开启",closeSuccess:"订阅守护已关闭",keepStake:"不退还质押",returnStake:"退还剩余质押",stake:"质押",address:"质押账户",total:"总质押:{total} {symbol},",disableConfirm:"您当前有未支付的账单,请先付清账单。",open:"开启订阅守护",payerAddress:"付款账户",stakingAddress:"质押地址"},unpaidInvoicesWarning:"您当前有未支付的账单,请先付清账单。",unpaidInvoicesWarningTip:"您当前有未支付的账单,请及时付清。",pendingAmountWarningTip:"您有 {amount} {symbol} 的使用费用因额度不足无法处理,请及时充值。",invoice:{relatedInvoice:"关联账单",donation:"打赏记录",creditsInfo:"总共包含 {amount}",appliedDiscounts:"已应用优惠",priceChanged:"汇率已变动 {percent}%。支付金额将会更新,是否继续?",paymentCancelled:"支付已取消",paymentMethodChanged:"支付方式已更换",priceChangeTitle:"价格已变动",priceChangeDescription:"汇率{direction}了 {percent}%,支付金额将会更新。",currentPaymentMethod:"当前支付方式",otherPaymentMethods:"或使用其他方式支付",confirmAndPay:"确认并支付",switchAndPay:"切换并支付",current:"当前"},payout:{empty:"没有收款记录",payer:"付款方",receiver:"收款方",payTxHash:"交易详情",viewReference:"查看打赏原文",title:"收款记录"},pastDue:{warning:"您有欠费账单,请及时付款以保持服务正常运行",invoices:"欠费账单",payNow:"立即付款",alert:"您有欠费账单需要处理,请及时付款以避免服务中断",title:"结清欠费账单"},quote:{title:"价格锁定记录",noQuotes:"此账单没有价格锁定记录",id:"报价 ID",pricingDetails:"定价详情",baseAmount:"基础金额",exchangeRate:"汇率",consensusMethod:"汇率算法",referenceRate:"参考汇率:1 {symbol} ≈ ${rate}",quotedAmount:"锁定金额",providerInfo:"汇率来源",provider:"数据源",rateTimestamp:"汇率时间",slippage:"滑点",lifecycle:"生命周期",expiresAt:"过期时间",riskInfo:"风险信息",deviation:"价格偏差",anomalyDetected:"检测到异常",degraded:"降级",status:{active:"活跃",used:"已使用",paid:"已支付",expired:"已过期",cancelled:"已取消",failed:"失败"}}},integrations:{description:"用于配置和管理 Payment Kit 与你应用之间的集成方式。",basicFeatures:"基础功能",advancedFeatures:"高级功能",features:{products:{title:"创建产品",intro:"创建和管理您的产品或服务"},paymentLinks:{title:"支付链接",intro:"创建可分享的支付链接,快速完成收款"},pricingTables:{title:"定价表",intro:"为您的产品创建美观的定价表"},metering:{title:"计量与额度",intro:"使用计量器跟踪用量,并通过额度套餐售卖 Credits",dialog:{title:"如何开启 Credit 计费",description:"Credit 计费模式让您可以跟踪用量并基于消费向客户收费。按照以下步骤开始配置:",steps:{step1:{title:"创建计量器用于跟踪用量事件",description:"设置计量器来监控 API 调用、数据使用量或应用中任何可测量的活动。"},step2:{title:"创建 Credits 购买套餐和定价",description:"定义客户可以购买的额度套餐,支持灵活的定价模式和有效期设置。"},step3:{title:"创建支付链接并分享给用户",description:"生成可分享的支付链接,让客户轻松购买额度套餐。"},step4:{title:"集成并上报 Credits 用量",description:"使用我们的 SDK 上报使用事件,自动从客户余额中扣除额度。"}},docText:"查看 Credit 计费指南"}},promotions:{title:"促销与优惠",intro:"创建优惠券与促销码,提升转化率"},donate:{title:"打赏功能",intro:"使用 <CheckoutDonate /> 组件为应用添加打赏按钮"},paymentMethods:{title:"支付方式",intro:"配置多种支付方式和货币支持"},api:{title:"API 集成",intro:"使用我们的 JavaScript SDK 实现自定义解决方案",link:"https://www.npmjs.com/package/@blocklet/payment-js"}},viewDocs:"查看文档"}}),kD=RE({zh:NE,en:ME},O0),BE=z0({fallbackLocale:"en"},kD),Ww=BE,ga=window.blocklet?.cloudflareWorker?kE:wE,UE=Ne.lazy(()=>Ht(()=>import("./home-_eX1aim8.js"),[])),OE=Ne.lazy(()=>Ht(()=>import("./index-EXZPddtw.js"),[])),no=Ne.lazy(()=>Ht(()=>import("./index-BBHMsIxJ.js"),[])),zE=Ne.lazy(()=>Ht(()=>import("./index-Kd_qCyRG.js"),[])),PE=Ne.lazy(()=>Ht(()=>import("./detail-C1FupF1D.js"),[])),qE=Ne.lazy(()=>Ht(()=>import("./past-due-CUXkxns0.js"),[])),LE=Ne.lazy(()=>Ht(()=>import("./detail-B8eOBVSQ.js"),[])),a0=Ne.lazy(()=>Ht(()=>import("./embed-rRKjDoHi.js"),[])),IE=Ne.lazy(()=>Ht(()=>import("./change-plan-C47wfWH8.js"),[])),$E=Ne.lazy(()=>Ht(()=>import("./change-payment-gAlRmJpv.js"),[])),VE=Ne.lazy(()=>Ht(()=>import("./detail-BO3zglCn.js"),[])),HE=Ne.lazy(()=>Ht(()=>import("./detail-wU4wNf4s.js"),[])),YE=Ne.lazy(()=>Ht(()=>import("./subscription-BYz_k9dq.js"),[])),GE=Ne.lazy(()=>Ht(()=>import("./detail-CMBRd4Ct.js"),[])),Rl=Ne.lazy(()=>Ht(()=>import("./index-BRENdB5m.js"),[])),KE=Ne.lazy(()=>Ht(()=>import("./account-Clbqiiw3.js"),[]));function QE(){const a=ds();V.useEffect(()=>{const r=o=>{if(o.button!==0||o.metaKey||o.ctrlKey||o.shiftKey||o.altKey)return;const s=o.target?.closest("a");if(!s)return;const f=s.getAttribute("href");if(!f||s.target&&s.target!==""&&s.target!=="_self"||s.hasAttribute("download")||/^[a-z]+:/i.test(f)&&!/^https?:/i.test(f)||f.startsWith("#"))return;let m;try{m=new URL(f,window.location.href)}catch{return}if(m.origin!==window.location.origin)return;o.preventDefault();const c=window?.blocklet?.prefix||"/";let h=m.pathname+m.search+m.hash;c!=="/"&&h.startsWith(c.replace(/\/$/,""))&&(h=h.slice(c.replace(/\/$/,"").length)||"/"),a(h)};return document.addEventListener("click",r),()=>document.removeEventListener("click",r)},[a])}function ZE(){return QE(),u.jsx(FE,{children:u.jsx(mC,{FallbackComponent:SE,onReset:()=>window.location.reload(),children:u.jsx(V.Suspense,{fallback:u.jsx(x0,{children:u.jsx(gr,{})}),children:u.jsxs(aC,{children:[u.jsx(jt,{path:"/",element:u.jsx(UE,{})}),u.jsx(jt,{path:"/checkout/:action/:id",element:u.jsx(OE,{})}),u.jsx(jt,{path:"/admin",element:u.jsx(no,{})},"admin-index"),",",u.jsx(jt,{path:"/admin/:group",element:u.jsx(no,{})},"admin-tabs"),",",u.jsx(jt,{path:"/admin/:group/:page",element:u.jsx(no,{})},"admin-sub"),",",u.jsx(jt,{path:"/admin/:group/:page/:id",element:u.jsx(no,{})},"admin-detail"),",",u.jsx(jt,{path:"/admin/:group/:page/:subpage/:id",element:u.jsx(no,{})},"admin-nested"),",",u.jsx(jt,{path:"/admin/*",element:u.jsx(no,{})},"admin-fallback"),",",u.jsx(jt,{path:"/integrations",element:u.jsx(Rl,{})},"integrations-index"),u.jsx(jt,{path:"/integrations/:group",element:u.jsx(Rl,{})},"integrations-tabs"),u.jsx(jt,{path:"/integrations/:group/:page",element:u.jsx(Rl,{})},"integrations-sub"),u.jsx(jt,{path:"/integrations/*",element:u.jsx(Rl,{})},"integrations-fallback"),u.jsx(jt,{path:"/customer",element:u.jsx(ga,{children:u.jsx(zE,{})})},"customer-home"),u.jsx(jt,{path:"/customer/subscription/:id",element:u.jsx(ga,{children:u.jsx(LE,{})})},"customer-subscription"),u.jsx(jt,{path:"/customer/subscription/:id/change-plan",element:u.jsx(ga,{children:u.jsx(IE,{})})},"customer-subscription-change-plan"),u.jsx(jt,{path:"/customer/subscription/:id/change-payment",element:u.jsx(ga,{children:u.jsx($E,{})})},"customer-subscription-change-payment"),u.jsx(jt,{path:"/customer/subscription/:id/recharge",element:u.jsx(ga,{children:u.jsx(YE,{})})},"customer-recharge"),u.jsx(jt,{path:"/customer/recharge/:currencyId",element:u.jsx(ga,{children:u.jsx(KE,{})})},"customer-balance-recharge"),u.jsx(jt,{path:"/customer/embed/subscription",element:u.jsx(a0,{})},"customer-embed"),u.jsx(jt,{path:"/embed/customer/subscription",element:u.jsx(a0,{})},"subscription-embed"),u.jsx(jt,{path:"/customer/invoice/past-due",element:u.jsx(ga,{children:u.jsx(qE,{})})},"customer-due"),u.jsx(jt,{path:"/customer/invoice/:id",element:u.jsx(ga,{children:u.jsx(PE,{})})},"customer-invoice"),u.jsx(jt,{path:"/customer/payout/:id",element:u.jsx(ga,{children:u.jsx(GE,{})})},"customer-payout"),u.jsx(jt,{path:"/customer/credit-grant/:id",element:u.jsx(ga,{children:u.jsx(VE,{})})},"customer-credit-grant"),u.jsx(jt,{path:"/customer/credit-transaction/:id",element:u.jsx(ga,{children:u.jsx(HE,{})})},"customer-credit-transaction"),u.jsx(jt,{path:"/customer/*",element:u.jsx(Zy,{to:"/customer"})},"customer-fallback"),",",u.jsx(jt,{path:"*",element:u.jsx(Zy,{to:"/"})})]})})})})}const XE=Jx(ZE);function WE(){const a=window?.blocklet?.prefix||"/";return DD(),u.jsx(dC,{translations:kD,fallbackLocale:"en",children:u.jsx(eC,{children:u.jsx(vA,{children:u.jsx(AE,{serviceHost:_E(a),useSocket:!window.blocklet?.cloudflareWorker,protectedRoutes:["/admin/*","/customer/*","/integrations/*"].map(r=>Dt(a,r)),children:u.jsx(nC,{basename:a,children:u.jsx(XE,{})})})})})})}const JE=uC.createRoot(document.getElementById("app"));JE.render(u.jsx(WE,{}));export{M_ as $,Mw as A,bD as B,Yl as C,Lf as D,hs as E,K0 as F,jg as G,mw as H,Ul as I,dw as J,aw as K,hr as L,CS as M,gw as N,Gg as O,sD as P,yA as Q,Vf as R,Zg as S,tm as T,tu as U,AS as V,RS as W,ba as X,au as Y,US as Z,N_ as _,_n as a,ns as a$,fD as a0,lD as a1,UA as a2,dr as a3,BS as a4,uA as a5,uw as a6,vw as a7,Ja as a8,I0 as a9,wf as aA,Lw as aB,xS as aC,e0 as aD,Qg as aE,Kg as aF,pw as aG,vA as aH,Gw as aI,Aw as aJ,_w as aK,tA as aL,kw as aM,iu as aN,nu as aO,Rn as aP,rw as aQ,un as aR,zi as aS,X_ as aT,dA as aU,Il as aV,Nn as aW,Xa as aX,ii as aY,fr as aZ,Rw as a_,Bi as aa,Wa as ab,Nl as ac,J1 as ad,Nw as ae,Bw as af,nE as ag,aE as ah,rE as ai,oE as aj,sE as ak,Uw as al,iE as am,Ow as an,zw as ao,Pw as ap,Iw as aq,AD as ar,qw as as,Yf as at,Vw as au,$w as av,Hw as aw,Yw as ax,kl as ay,dD as az,Xw as b,ow as b0,hw as b1,Ww as b2,jS as b3,cw as b4,yw as b5,If as b6,Cw as b7,aD as b8,iD as b9,rD as ba,xw as bb,Tw as bc,lw as bd,Hg as be,O_ as bf,U_ as bg,Tf as bh,RE as bi,lC as bj,bw as bk,Zw as c,qi as d,ot as e,kg as f,fw as g,nD as h,Ui as i,SS as j,Pt as k,Qn as l,jw as m,Oi as n,sw as o,Fw as p,ln as q,em as r,Vl as s,NS as t,wD as u,Ca as v,bA as w,Hf as x,iw as y,Dw as z};
|
|
684
|
+
`;function CE({error:a=void 0}){const{t:r}=ft();return u.jsxs(xE,{children:[u.jsx(t0,{children:a?.message||r("common.error")}),u.jsx(t0,{children:a?.stack||r("common.error")})]})}function SE({error:a}){return u.jsx(CE,{error:a})}function _E(a){return typeof window<"u"&&window?.blocklet?.serviceHost||""||a}const{SessionProvider:AE,SessionContext:EE,SessionConsumer:Kw,withSession:Qw}=Zx();function wD(){return V.useContext(EE)}function wE(a){const{session:r,connectApi:o,events:s}=wD(),[f]=tC(),m=f.get("embed")||sessionStorage.getItem("embed");return V.useEffect(()=>{m&&sessionStorage.setItem("embed",m)},[m]),V.useEffect(()=>{s.once("logout",()=>{r.login(()=>{},{openMode:"redirect",redirect:window.location.href})})},[]),V.useEffect(()=>{r.initialized&&!r.user&&r.login(()=>{},{openMode:"redirect",redirect:window.location.href})},[r.initialized]),r.user?u.jsx(sD,{session:r,connect:o,children:u.jsx(Xx,{currentTab:"/customer",hideFooter:!0,embed:m==="1",notLoginContent:"undefined",children:a.children})}):null}function n0(){return u.jsx(Se,{sx:{minHeight:"100vh",display:"flex",alignItems:"center",justifyContent:"center"},children:u.jsx(gr,{})})}function TE(){const a=window.blocklet;return!!(a&&a.appPid&&a.prefix)}function kE(a){const{session:r,connectApi:o}=wD();return V.useEffect(()=>{r.initialized&&!r.user&&r.login(()=>{})},[r.initialized]),!TE()||!r.initialized?u.jsx(n0,{}):r.user?u.jsxs(sD,{session:r,connect:o,children:[u.jsx(Uf,{meta:void 0,addons:void 0,sessionManagerProps:void 0,homeLink:void 0,theme:void 0,hideNavMenu:void 0,maxWidth:!1,sx:{borderBottom:"1px solid",borderColor:"divider"}}),u.jsx(Se,{sx:{flex:1,maxWidth:1200,mx:"auto",px:3,py:3,width:"100%"},children:a.children})]}):u.jsx(n0,{})}function Zw({pending:a=!0}){const[r,o]=V.useState(0);return V.useEffect(()=>{const s=setInterval(()=>{o(f=>{if(f===100)return s&&clearInterval(s),-1;const m=Math.random()*10;return Math.min(f+m,100)})},a?500:30);return()=>{clearInterval(s)}},[a]),u.jsx(Se,{sx:{width:"100%",height:"4px",position:"fixed",top:0,left:0,zIndex:"999999"},children:u.jsx(zl,{variant:"determinate",value:r,sx:{opacity:r===-1?0:1,transition:"0.3s"}})})}const TD=V.createContext({});function FE({children:a}){const[r,o]=V.useTransition(),s=V.useMemo(()=>({isPending:r,startTransition:o}),[r]);return u.jsx(TD.Provider,{value:s,children:a})}function Xw(){return V.useContext(TD)}var jE=Wx();const RE=ri(jE),ME=Wl({common:{redirecting:"Redirecting...",title:"Name",estimated:"Estimated",total:"Total",active:"Active",every:"Every",inactive:"Inactive",enabled:"Enabled",disabled:"Disabled",metadata:{label:"Metadata",description:"Add custom key-value pairs to store additional information about this meter.",add:"Add more metadata",edit:"Edit metadata",empty:"No metadata",emptyTip:"You haven't added any metadata yet. You can add it now",formMode:"Switch to form mode",jsonMode:"Switch to JSON mode",jsonPlaceholder:"Enter JSON data...",invalidJson:"Invalid JSON format. Please check your input",formatJson:"Format JSON"},price:"Price",add:"Add",fullscreen:"Fullscreen",exit:"Exit",maxLength:"Max {len} characters",minLength:"Min {len} characters",invalidCharacters:"Invalid characters",latinOnly:`Must contain at least one letter and cannot include Chinese characters or special characters such as <, >, ", ' or \\`,loading:"Loading...",loadMore:"Load more",noMoreData:"No more data",rechargeTime:"Recharge Time",submit:"Submit",custom:"Custom",estimatedDuration:"{duration} est.",detail:"Detail",setting:"Setting",slippage:"Slippage Limit",slippageMinRate:"Min acceptable rate {rate} {currency}",slippageTooltip:"The minimum acceptable exchange rate for automatic payments. If the rate drops below this, payment will be paused.",welcome:"Welcome to Payment Kit",welcomeDesc:"Start accepting payments in minutes with Payment Kit. Choose a feature to get started.",quickStart:"Quick Start Guides",advancedFeatures:"Advanced Features",quickStarts:"Quick Starts",homeTagline:"A decentralized Stripe-like payment solution for Blocklets",adminDashboard:"Admin Dashboard",customerPortal:"Customer Portal",copy:"Copy",copied:"Copied",copySuccess:"Copied successfully",copyFailed:"Copy failed",copyTip:"Please copy manually",save:"Save",saving:"Saving...",saved:"Saved successfully",refresh:"Refresh",cancel:"Cancel",back:"Back",know:"I Know",confirm:"Confirm",increased:"increased",decreased:"decreased",edit:"Edit",view:"View",select:"Select",clear:"Clear",delete:"Delete",deleting:"Deleting...",activate:"Activate",deactivate:"Deactivate",yes:"Yes",no:"No",never:"Never",created:"Created",updated:"Updated",valid:"Valid",events:"Events",details:"Details",discount:"Discount",deleted:"Deleted",maxAmount:"Max amount is {max}",days:{sunday:"Sunday",monday:"Monday",tuesday:"Tuesday",wednesday:"Wednesday",thursday:"Thursday",friday:"Friday",saturday:"Saturday"},name:"Name",type:"Type",status:"Status",remainingCredit:"Remaining Credit",scope:"Scope",source:"Source",effectiveDate:"Effective Date",expirationDate:"Expiration Date",creditGrant:"Grant",date:"Date",subscription:"Subscription",meter:"Meter",meterEvent:"Meter Event",creditAmount:"Credit",createdAt:"Created At",expiresAt:"Expires At",general:"All usage-based prices",specific:"Specific usage-based prices",paid:"Paid",promotional:"Promotional",viewInvoice:"View Invoice",viewSourceData:"View Source",goToConfigure:"Go to Configure",noData:"No data"},notification:{preferences:{title:"Email Notification Settings",button:"Email Settings",frequency:{label:"Notification Frequency",default:"Instant Notifications (Default)",daily:"Daily",weekly:"Weekly",monthly:"Monthly"},day:"Day",timeFormatError:"Please enter a valid time in 24-hour format (HH:MM)",monthlyHelp:"If day is not available in a month, the last day will be used",subscriptionRenewalNote:"This setting applies to subscription renewal notifications."}},admin:{description:"Manage your products, pricing, billing, and payments.",balances:"Balances",trends:"Trends",addresses:"Addresses",metrics:"Metrics",attention:"Attention",overview:"Overview",overviewPage:{financialIndicatorsTitle:"Financial Indicators",businessMonitoringTitle:"Business Monitoring",filters:{dateRange:"Select Date Range",currencyLabel:"Currencies",productLabel:"Products",regionLabel:"Regions",allCurrencies:"All Currencies",allProducts:"All Products",allRegions:"All Regions"},financialIndicators:{totalIncome:{title:"Total Income",subtitle:"User's actual payment"},refundAmount:{title:"Refund Amount",subtitle:"Total refunds issued"},costOfGoods:{title:"Cost of Goods",subtitle:"Supplier share"},netRevenue:{title:"Net Revenue",subtitle:"Revenue after vendor costs"},promotionCost:{title:"Promotion Cost",subtitle:"Discount"},taxedRevenue:{title:"Taxed Revenue",subtitle:"Revenue with tax"}},charts:{title:"Transaction Trends",payments:"Payments",payouts:"Payouts",refunds:"Refunds",allCurrencies:"All currencies"},metrics:{transaction:"Transaction Metrics",essential:"Essential Metrics"},overdue:{title:"Pending Consumption",subtitle:"Unpaid credit consumption",customers:"{count} customers",events:"{count} pending records",viewAll:"View All",noOverdue:"No pending consumption"}},payments:"Payments",connections:"Connections",back:"Back",actions:"Actions",create:"Create",creating:"Creating...",save:"Save",saving:"Saving...",cancel:"Cancel",paymentLinks:"Payment links",paymentMethods:"Payment methods",customers:"Customers",products:"Products",invoiceItems:"Invoice Items",pricing:"Pricing",coupons:"Coupons",tax:"Tax",taxRates:"Tax Rates",taxRate:{create:"Create Tax Rate",createTitle:"Create Tax Rate",createAction:"Add Tax Rate",created:"Tax rate created successfully",updated:"Tax rate updated successfully",deleted:"Tax rate deleted successfully",label:"Tax Rate",view:"View Tax Rate",displayName:"Display Name",displayNamePlaceholder:"Name shown on invoices and reports",displayNameAuto:"Auto-generated if left empty",displayNameRequired:"Display name is required",description:"Description",descriptionPlaceholder:"Optional description",country:"Country",countryRequired:"Country is required",state:"State/Province",postalCode:"Postal Code",taxCode:"Product Tax Code",taxCodeDescription:"Tax codes are used to calculate automatic taxes based on product type and location. You can ",taxCodeDescriptionLink:"manage tax rates",taxCodeDescriptionSuffix:" to create custom tax rates for specific tax codes and regions.",selectTaxCode:"Select product tax code",percentage:"Tax Rate (%)",percentageRequired:"Tax rate percentage is required",percentageMin:"Tax rate must be 0% or higher",percentageMax:"Tax rate must be less than 100%",active:"Active by default",location:"Region",advanced:"Advanced options",search:"Search tax rates",searchCountry:"Search country",back:"Back to tax rates",associatedInvoices:"Related Invoices",deleteTitle:"Delete Tax Rate",deleteMessage:"Are you sure you want to delete tax rate “{name}”? This action cannot be undone.",deactivateTitle:"Deactivate Tax Rate",deactivateMessage:"Deactivate “{name}”? It will no longer apply automatically to invoices.",activateTitle:"Activate Tax Rate",activateMessage:"Activate “{name}”? It will be available for future invoices.",createTitleShort:"Add tax rate",edit:"Edit",editTitle:"Edit Tax Rate",selectTaxCodeHint:"We'll use this tax code to calculate automatic tax on invoices.",searchPlaceholder:"Search by product or tax code",previewPlaceholder:"Select a tax code to see details.",usePreset:"Use preset",noPreset:"No preset selected",noSuggestions:"No tax codes match your search.",relatedInvoiceNum:"Related Invoices",notUsed:"Not used",taxCodeLabel:"Tax code: {code}",types:{general:"General",digital:"Digital products",services:"Services",physical:"Physical goods"}},pricingTables:"Pricing tables",vendors:"Vendors",billing:"Billing",invoices:"Invoices",subscriptions:"Subscriptions",meters:"Meters",meterEvents:{title:"Meter Events"},overdue:{title:"Pending Consumption",pendingAmount:"Pending Amount",eventCount:"Pending Records",noOverdue:"No pending consumption",selectCurrency:"Currency"},meter:{add:"Add meter",edit:"Edit meter",save:"Save meter",saved:"Meter successfully saved",creditMode:{onchain:"OnChain",onChainDescription:"Once enabled, your credit will be published as a Token on the ArcBlock blockchain",tokenConfiguration:"Token Configuration",createNewToken:"Create New Token",useExistingToken:"Use Existing Token",createTokenHint:"Fill in the token name and symbol to create a new Token",tokenName:"Token Name",tokenNamePlaceholder:"Enter token name",tokenNameRequired:"Token name is required",tokenSymbol:"Token Symbol",tokenSymbolPlaceholder:"Enter token symbol",tokenSymbolRequired:"Token symbol is required",tokenSymbolFormat:"Symbol must be 1-6 uppercase letters or numbers",createTokenButton:"Create Token",creatingToken:"Creating...",tokenCreated:"Token created successfully",tokenCreatedLabel:"Token Created",tokenAddress:"Token Address",selectToken:"Select Token",selectTokenPlaceholder:"Select an existing token",tokenAddressRequired:"Token address is required",enabled:"Enabled"},activate:"Activate meter",activated:"Meter activated successfully",deactivate:"Deactivate meter",deactivated:"Meter deactivated successfully",deleted:"Meter deleted successfully",deleteConfirm:"Are you sure you want to delete this meter? This action cannot be undone.",activateConfirm:"Are you sure you want to activate this meter? It will start collecting usage data.",deactivateConfirm:"By deactivating, no further events for this meter can be reported. Attempts to create events for this meter will return an error. Previously reported usage will remain. You can reactivate at any time.",view:"View meter",basicInfo:"Basic information",basicInfoDescription:"Configure the core settings for your meter to track usage events.",editDescription:"Update the meter name, description, and metadata. Core settings like event name and aggregation method cannot be changed.",inactive:"Meter is inactive",inactiveTip:"This meter is not collecting usage data. Activate it to start tracking events.",name:{label:"Meter name",required:"Meter name is required",placeholder:"API requests",help:"A descriptive name for this meter that will be displayed in your dashboard and user's personal bill."},eventName:{label:"Event name",required:"Event name is required",placeholder:"api_request",help:"The event name that will be sent to this meter",editHelp:"Event name cannot be changed after meter creation to maintain data consistency."},aggregationMethod:{label:"Aggregation method",required:"Aggregation method is required",sum:"Sum",sumHint:"Add all event values together",sumDescription:"The sum aggregation method adds all usage event values together and reports the total for event summaries and billing.",count:"Count",countHint:"Count the number of events",countDescription:"The count aggregation method counts the number of events received and reports the total count for event summaries and billing.",last:"Last value",lastHint:"Use the most recent event value",lastDescription:"The last value aggregation method uses the most recent event value received and reports that value for event summaries and billing.",editHelp:"Aggregation method cannot be changed after meter creation to maintain data consistency."},unit:{label:"Measurement unit",required:"Measurement unit is required",placeholder:"request",help:"The unit of measurement for this meter",editHelp:"Measurement unit cannot be changed after meter creation to maintain data consistency."},description:{label:"Description",placeholder:"Track API usage for billing",help:"Optional description to help you and your team understand what this meter tracks."},events:{title:"Events",dailyEventCount:"Daily Event Count",dailyTotalValue:"Daily Total Value",eventName:"Event Name",value:"Value",customer:"Customer",subscription:"Subscription",reportTime:"Report Time",count:"{count} events total",empty:"No event data",emptyTip:"Data will appear here when events are reported",filterByCustomer:"Filter by customer",eventCount:"Event Count",totalValue:"Total Value"},usageGuide:{title:"How to report usage",description:'Send events to this meter using the event name "{eventName}". The meter will {method} the values and track usage in {unit}.',tip:'Send events to this meter using the event name "{eventName}". The meter will {aggregationMethodHint} and track usage in {unit}.',apiEndpoint:"API Endpoint",curlExample:"cURL Example",jsExample:"JavaScript Example",pythonExample:"Python Example",important:"Important",tip1:"Replace YOUR_API_KEY with your actual API key",tip2:"The event_name must match exactly: {eventName}",tip3:"Include a timestamp for accurate tracking",moreInfo:"For more information, see our",apiDocs:"API documentation"},products:{count:"{count} associated products",create:"Create product",created:"Product created successfully",createPrompt:"Enter product name:",manage:"Manage",empty:"No products",title:"Products",emptyTip:"No products are associated with this meter yet.",meterService:"Meter Service",creditCharge:"Credit Charge"},creditProducts:{emptyTip:"No credit products are associated with this meter yet."},rechargePackage:{priceId:"Top-up Package",tooltip:"The top-up package is used to recharge {name}, and users can get the corresponding {name} after purchase."}},creditProduct:{create:"Create Credit Product",defaultName:"{name} Top-up Package",defaultDescription:"{name} Top-up Package",defaultNickname:"Credit Recharge",unitLabel:"units",settings:"Credit Settings",configTitle:"Credit Configuration",expirationTime:{label:"Expiration",expireWithNextGrant:"Expire with Next Grant"},name:{placeholder:"Enter Credit product name"},description:{placeholder:"Describe the purpose and value of this Credit product"},priceNotice:"Credit products are used to provide consumable credits to users, supporting both one-time purchase and package pricing models.",creditAmount:{label:"Credit Amount",placeholder:"Amount of credits users receive when purchasing this price",help:"Leave empty for pay-per-unit pricing, enter a number for fixed package deals",description:"Purchase quantity determines the amount of Credits received"},validDuration:{label:"Valid Duration",help:"Credit validity period, calculated from purchase time",description:"Set to 0 for permanent validity",hours:"hours",days:"days",weeks:"weeks",months:"months",years:"years"},associatedPrices:{label:"Associated Prices",placeholder:"Select service prices this Credit can be used for",help:"When selected, purchased Credits can only be used for specified services",description:"No selection means Credits can be used for all services"},priority:{label:"Usage Priority",help:"Usage order when user has multiple Credits, lower numbers have higher priority",description:"Range: 0-100, 0 is highest priority, 50 is default value"},deliveryMode:{label:"Delivery Mode",once:"One-time",periodic:"Periodic"},schedule:{interval:{label:"Grant Frequency",hour:"hours",day:"days",week:"weeks",month:"months"},amountPerGrant:{label:"Amount per Grant",description:"Fixed Credit amount per grant"},expireWithNextGrant:{label:"Expire with Next Grant",description:"This Credit expires when the next grant is issued (refresh mode)"}}},meterEvent:{title:"Meter Event Details",id:"Event ID",totalEvents:"Total events: {count}",noEvents:"No events found",noEventsHint:"You can manually add test events in test mode.",identifier:"Identifier",customer:"Customer",customerId:"Customer ID",value:"Value",subscription:"Subscription",creditConsumed:"Credit Consumed",usageValue:"Usage Value",settlementAmount:"Settlement Amount",reportedAmount:"Reported Amount",overdueAmount:"Overdue Amount",reportedAt:"Reported At",processedAt:"Processed At",eventIdentifier:"Event Identifier",usageDetails:"Usage Details",chart:{eventCount:"Daily Event Count",totalValue:"Daily Total Value"},filter:{customer:"Filter by Customer"},add:{button:"Add usage",title:"Add usage",customerId:"Customer",customerIdPlaceholder:"Select customer",value:"Value",valuePlaceholder:"Enter usage value",subscriptionId:"Subscription",subscriptionIdPlaceholder:"Enter subscription ID (optional)",subscriptionIdHint:"Optional - link this usage to a specific subscription",timestamp:"Timestamp",timestampHint:"When this usage occurred",validation:"Customer and value are required",success:"Usage event added successfully",submit:"Submit"}},developers:"Developers",webhooks:"Webhooks",events:{title:"Events",dailyEventCount:"Daily Event Count",dailyTotalValue:"Daily Total Value",eventName:"Event Name",value:"Value",customer:"Customer",subscription:"Subscription",reportTime:"Report Time",count:"{count} events total",empty:"No event data",emptyTip:"Data will appear here when events are reported",filterByCustomer:"Filter by customer",eventCount:"Event Count",totalValue:"Total Value",hourly:"Hourly",totalEvents:"Total Events",timeRange:"Time Range",hourlyView:"Hourly View",dailyView:"Daily View"},refunds:"Refunds",payouts:"Payouts",logs:"Logs",passports:"Passports",details:"Details",settings:"Settings",branding:"Branding",business:"Business",summary:"Summary",product:{empty:"No product",info:"Product information",add:"Add product",view:"View product details",save:"Save product",saved:"Product successfully saved",additional:"Additional options",edit:"Edit product",pricing:"Pricing",find:"Find a product",archive:"Archive product",archiveTip:"Archiving will hide this product from new purchases. Are you sure you want to archive this product?",unarchive:"Unarchive product",unarchiveTip:"Unarchiving will enable this product for new purchases. Are you sure you want to unarchive this product?",remove:"Remove product",removeTip:"Removing will hide this product from new purchases. Are you sure you want to remove this product?",archived:"This product has been archived",archivedTip:"This product can't be added to new invoices, subscriptions, payment links, or pricing tables. Any existing subscriptions with this product remain active until canceled and any existing payment links or pricing tables are deactivated.",locked:"This product is locked because at least one of its prices is used by a subscription or a payment.",currencyNotAligned:"All prices must have the same currency settings",image:{label:"Image",add:"Add image"},features:{label:"Features",add:"Add another feature"},name:{label:"Name",required:"Product name is required",placeholder:"Premium plan"},description:{label:"Description",required:"Product description is required",placeholder:"Product descriptions that appear on checkout, invoice pages"},statement_descriptor:{label:"Statement descriptor",placeholder:"ArcBlock"},unit_label:{label:"Unit label",placeholder:"Unit"},billingType:{label:"Billing type",standard:"Standard billing",standardDesc:"Charge a fixed amount on a recurring basis",metered:"Metered billing",meteredDesc:"Charge based on usage tracked by a meter",help:"Choose how customers will be charged for this product"},meter:{label:"Meter",placeholder:"Select a meter to track usage",required:"Please select a meter for metered billing",help:"Select the meter to track usage for this product",pricingNote:"For metered products, pricing is automatically based on usage tracked by the selected meter. You only need to set the unit price and billing period."},cross_sell:{title:"Cross-sells",to:"Cross-sells to",tip:""},type:{label:"Product Type",service:"Service",serviceDesc:"Digital services or subscriptions",credit:"Credit",creditDesc:"Credit top-up product for credit-based billing scenarios",creditDescLink:"Create meters first",good:"Good",goodDesc:"Physical products or tangible goods"},vendorConfig:{title:"Vendor Configuration",add:"Add Vendor",empty:'No vendors configured. Click "Add Vendor" to configure vendor services',vendor:"Vendor",vendorRequired:"Vendor is required",productCode:"Product Code",productCodeRequired:"Product code is required",commissionType:"Commission Type",commissionRate:"Commission Rate",commissionRateRequired:"Commission rate is required",commissionRateMin:"Commission rate must be at least 0",commissionRateMax:"Commission rate cannot exceed 100%",amount:"Fixed Amount",noVendor:"No vendor available",amountRequired:"Fixed amount is required",totalCommission:"Total commission rate: {total}%",totalCommissionExceeded:"Total commission rate exceeds 100%: {total}%"}},price:{name:"Price",type:"Usage type",plan:"Price plan",info:"Price information",count:"{count} prices",empty:"No price",addAnother:"Add another price",order:"Plan {order}",lookupKey:"Lookup key",setAsDefault:"Set as default price",detail:"Pricing details",add:"Add another price",view:"View price details",additional:"Additional options",model:"Pricing model",amount:"Price",amountDescription:"This is the tax-inclusive price that customers will pay.",locked:"This price is locked because it is used by a subscription or a payment.",amountTip:"Choose recurring for subscriptions and one-time for everything else.",duplicate:"Duplicate price",edit:"Edit price",find:"Find or add a price",archive:"Archive price",archiveTip:"Archiving will hide this price from new purchases. Are you sure you want to archive this price?",remove:"Remove price",removeTip:"Removing will hide this price from new purchases. Are you sure you want to remove this price?",unit_amount:{required:"Price is required",positive:"Price must be positive",stripeTip:"Stripe requires the price to be at least 0.5"},nickname:{label:"Price description",placeholder:""},lookup_key:{label:"Lookup key",placeholder:"",description:"Lookup key is used to identify the price in the API"},recurring:{interval:"Billing period",metered:"Usage is metered?",meteredTip:"Metered billing lets you charge customers based on reported usage at the end of each billing period.",aggregate:"Charge for metered usage by",intervalCountTip:"Billing interval must be a positive number",stripeTip:"Stripe requires the billing period to be at least 1 day"},currency:{add:"Add more currencies",list:"Currencies"},models:{standard:"Standard pricing",standardDesc:"A single, fixed price",package:"Package pricing",packageDesc:"Price by number of units",graduated:"Graduated Pricing",volume:"Volume pricing",custom:"Customer chooses price",usageBased:"Usage-based",creditMetered:"Credit metered"},creditMetered:{label:"Credit metered",placeholder:"Select a meter to track usage",required:"Please select a meter for metered billing",help:"Select the meter to track usage for this product",selectMeter:"Select meter",pricingNote:"For metered products, pricing is automatically based on usage tracked by the selected meter.",description:"Credit metered billing requires corresponding credit consumption. If credits are consumed, the corresponding service will stop."},credit:{saveAsBasePrice:"Set as Top-up Package",saveSuccess:"Successfully set as top-up package"},types:{onetime:"One time",onetimeDesc:"Charge a one-time fee",recurring:"Recurring",recurringDesc:"Charge an ongoing fee"},paymentType:"Payment Type",billingModel:"Billing Model",pricing:"Pricing",additionalCurrencies:"Additional Currencies",advanced:"Advanced Settings",customInterval:"Custom Interval",perUnit:"Per Unit",choosePricingModel:"Choose your pricing model",usage:"Usage",usageDesc:"Price by number of users, units, or seats. Requires a record for Stripe to track customer service usage.",meter:"Meter",billingPeriod:"Billing period",aggregate:{sum:"Sum of usage values during period",max:"Maximum usage value during period",last_during_period:"Most recent usage value during period",last_ever:"Most recent usage value"},upsell:{title:"Upsells",to:"Upsells to",tip:""},quantity:{tip:"Quantity must be at least 0"},quantityAvailable:{label:"Available quantity",placeholder:"0 means unlimited",format:"Available {num} pieces",noLimit:"No limit on available quantity",valid:"Available quantity must be at least the sold quantity",description:"Enter the number of units that can be sold, 0 means unlimited"},quantitySold:{label:"Sold quantity",format:"Sold {num} pieces"},quantityLimitPerCheckout:{label:"Limit per checkout quantity",placeholder:"0 means unlimited",format:"Limit {num} pieces per checkout",noLimit:"No limit on quantity per checkout",description:"Enter the number of units that can be purchased in a single checkout, 0 means unlimited"},inventory:"Inventory Settings",dynamicPricing:{label:"Enable Dynamic Pricing",description:"Price fluctuates based on real-time exchange rates",config:{title:"Dynamic Pricing Configuration",baseAmount:{label:"Base Price",description:"The base price in fiat currency",required:"Base price is required"}},validation:{checking:"Checking exchange rate availability...",rateLine:"Current rate: 1 {currency} ≈ ${rate}",usdLine:"USD estimate: ≈ ${amount}",error:"Failed to fetch exchange rate, currency not supported or data source exception",estimatedLine:"Estimated amount: ≈ {amount} {currency}",useAmount:"Fill amount"}},referencePricing:{label:"Reference Exchange Rate Pricing",description:"Use current exchange rates to estimate token amounts without enabling dynamic pricing"}},coupon:{create:"Create Coupon",view:"View coupon",description:"Coupons can be used to discount invoices, subscriptions, or entire customer accounts.",listTitle:"Coupon",terms:"Terms",tab:"Coupons",redemptions:"Redemptions",expires:"Expires",noDiscount:"No discount",name:"Name",nameHelp:"This will appear on customers' receipts and invoices.",desc:"Description",descriptionInternal:"This description is for internal use only and will not be shown to customers.",id:"ID",idOptional:"ID (Optional)",idHelp:"This will identify this coupon in the API. We recommend leaving this blank so we can generate an ID for you.",type:"Type",percentageOff:"Percentage off",fixedAmountOff:"Fixed amount off",percentageDiscount:"Percentage discount",fixedAmount:"Discount amount",currency:"Currency",applyToProducts:"Apply to specific products",duration:"Duration",once:"Once",forever:"Forever",repeating:"Repeating",durationHelp:'For subscriptions and customers, this determines how long this coupon will apply once redeemed. One-time invoices accept both "once" and "forever" coupons.',durationInMonths:"Duration in months",redemptionLimits:"Redemption limits",limitDateRange:"Limit the date range when customers can redeem this coupon",limitTotalNumber:"Limit the total number of times this coupon can be redeemed",codes:"Codes",useCustomerFacingCodes:"Use customer-facing coupon codes",promotionCodes:"Promotion Codes",promotionCodesHelp:"Promotion codes will be created after the coupon is saved.",addPromotionCode:"Add promotion code",eligibleFirstTime:"Eligible for first-time order only (each user can only use one coupon discount)",limitNumberRedemptions:"Limit the number of times this code can be redeemed",addExpirationDate:"Add an expiration date",requireMinimumOrder:"Require minimum order value",addAnotherCode:"Add another code",saved:"Coupon saved successfully",codeOptional:"Code (Optional)",codeHelp:"Leave blank to auto-generate upon creation",generate:"Generate",verificationType:"Verification Type",codeOnly:"Code Only",nftVerification:"NFT Verification",vcVerification:"Passport Verification",userWhitelist:"Specific Users",nftSettings:"NFT Verification Settings",vcSettings:"Passport Verification Settings",userWhitelistSettings:"Specific Users Settings",nftAddresses:"NFT Addresses",nftAddressesPlaceholder:"Enter NFT contract addresses",nftTags:"NFT Tags",nftTagsPlaceholder:"Enter NFT tags",trustedIssuers:"Trusted Issuers",trustedIssuersPlaceholder:"Enter trusted issuers",trustedParents:"Trusted Parents",trustedParentsPlaceholder:"Enter trusted parents",minBalance:"NFT Required Quantity",requiredRoles:"Required Roles",requiredRolesPlaceholder:"Enter required roles",trustedVcIssuers:"Trusted VC Issuers",trustedVcIssuersPlaceholder:"Enter trusted VC issuer DIDs",customerDids:"Customer DIDs",customerDidsPlaceholder:"Enter customer DIDs",customerDidsHelp:"You can select existing customers or enter DID manually",maxRedemptions:"Max Redemptions",expiresAt:"Expires At",pressEnterToAdd:"Press Enter to add",couponConfiguration:"Coupon Configuration",selectProducts:"Select Products",noProductsSelected:"No products selected",newCode:"New Code",createPromotionCode:"Create Promotion Code",promotionCodeDescription:"Create a promotion code for this coupon to allow customers to redeem the discount.",minimumAmount:"Minimum Amount",minimumAmountHelp:"Set minimum order amounts for different currencies",discountAmount:"Discount Amount",currencies:"Currencies",times:"times",months:"months",addProduct:"Add another product",unlimited:"Unlimited",inactive:"Coupon is inactive",inactiveTip:"This coupon is currently inactive and cannot be used.",discount:"Discount",updated:"Updated",timesRedeemed:"Times Redeemed",deletedSuccessfully:"Coupon deleted successfully",deleteConfirmTitle:"Delete Coupon",deleteConfirmMessage:"Are you sure you want to delete this coupon? This action cannot be undone.",cannotDeleteWithPromotionCodes:"Cannot delete coupon with existing promotion codes",couponTermsPercentage:"{percent}% off",couponTermsFixedAmount:"{amount} {symbol} off",couponTerms:{forever:"{couponOff} forever",once:"{couponOff} once",repeating:"{couponOff} for {months} months"},couponTermsDuration:{forever:"Forever",once:"Once",repeating:"For {months} months"},applicableProducts:"Applicable Products",noApplicableProducts:"This coupon applies to all products",activeRedemptions:"Active redemptions",customers:"Customers",subscriptions:"Subscriptions",noCustomersFound:"No customers found",noCustomersRedeem:"No customers currently redeem this coupon",noSubscriptionsFound:"No subscriptions found",noSubscriptionsRedeem:"No subscriptions currently redeem this coupon",rename:"Rename",renameCoupon:"Rename coupon",updateCouponDetails:"Update coupon details",nameWillAppear:"This will appear on customers' receipts and invoices.",updateCouponButton:"Update coupon",discountStart:"Discount Start",usageStats:"Usage Statistics",totalDiscounts:"Total Discounts",uniqueSessions:"Unique Sessions",uniqueSubscriptions:"Unique Subscriptions",promotionCodesUsed:"Promotion Codes Used",noExpiration:"No Expiration",usagePeriod:"Usage Period",firstUsed:"First Used",lastUsed:"Last Used",promotionCodeInfo:"Promotion Code Info",directCouponUsage:"Direct Coupon Usage",usageLimit:"Usage Limit",discountInfo:"Discount Info",discountPeriod:"Discount Period",couponExpires:"Coupon Expires",totalSavings:"Total Discounts",viewPromotionCode:"View Promotion Code"},discount:{totalSaved:"Total Saved",timesUsed:"Times Used",appliedDiscounts:"Applied Discounts"},promotionCode:{code:"Code",status:"Status",redemptions:"Redemptions",expires:"Expires",created:"Created",actions:"Actions",active:"Active",inactive:"Inactive",expired:"Expired",maxedOut:"Maxed Out",viewDetails:"View Details",edit:"Edit Promotion Code",delete:"Delete Promotion Code",archive:"Archive Promotion Code",archiveTip:"Archiving will prevent this promotion code from being used. Are you sure you want to archive this promotion code?",deleteTip:"Deleting will permanently delete this promotion code. Are you sure you want to delete this promotion code?",title:"Promotion Code",id:"ID",type:"Type",couponId:"Coupon ID",maxRedemptions:"Max Redemptions",timesRedeemed:"Times Redeemed",verificationType:"Verification Type",updated:"Updated",activate:"Activate",deactivate:"Deactivate",inactiveTitle:"Promotion code is inactive",inactiveTip:"This promotion code is currently inactive and cannot be used.",deleteSuccess:"Promotion code deleted successfully",activateSuccess:"Promotion code activated successfully",deactivateSuccess:"Promotion code deactivated successfully",verificationConfig:"Verification Configuration",nftAddresses:"NFT Addresses",nftTags:"NFT Tags",minBalance:"Min Balance",requiredRoles:"Required Roles",trustedIssuers:"Trusted Issuers",allowedUsers:"Allowed Users",noNftConfig:"No NFT configuration",noVcConfig:"No VC configuration",noUsersSpecified:"No users specified",codeVerificationOnly:"Code verification only",unlimited:"Unlimited",never:"Never",yes:"Yes",no:"No",verificationTypeMap:{code:"Code Only",nft:"NFT Verification",vc:"Passport Verification",user_restricted:"User Whitelist"}},paymentLink:{view:"View payment link",info:"Payment link information",add:"Create payment link",save:"Create link",openLink:"Open URL",copyLink:"Copy URL",saved:"Payment link successfully saved",additional:"Additional options",beforePay:"Payment page",afterPay:"After payment",products:"Products",addProduct:"Add another product",requireBillingAddress:"Collect customer billing addresses",requirePhoneNumber:"Collect customer phone numbers",allowPromotionCodes:"Allow promotion codes",enablePromotionCodes:"Enable promotion codes",disablePromotionCodes:"Disable promotion codes",enablePromotionCodesTip:"Enable promotion codes for this payment link. Customers will be able to apply discount codes during checkout.",disablePromotionCodesTip:"Disable promotion codes for this payment link. Customers will not be able to apply discount codes during checkout.",requireCrossSell:"Require cross-sell products to be selected if eligible",includeFreeTrial:"Include a free trial",noStakeRequired:"No stake required",showProductFeatures:"Show product features",allowSkipPaymentMethod:"Allow skipping payment method for $0 checkout",enableSkipPaymentMethod:"Allow skipping payment method",disableSkipPaymentMethod:"Require payment method",enableSkipPaymentMethodTip:"Allow customers to skip binding a payment method when the checkout amount is $0. The subscription will auto-cancel at the end of the current period if no payment method is added.",disableSkipPaymentMethodTip:"Require customers to provide a payment method even when the checkout amount is $0.",freeTrialDaysPositive:"Free trial days must be positive",includeCustomFields:"Add custom fields",confirmPage:"Confirmation Page",showConfirmPage:"Show confirmation page",customMessage:"Replace default with custom message",customMessageTip:"Include any details you see fit, such as delivery information.",noConfirmPage:"Do not show confirmation page",mintNft:"Mint NFT to user on payment",mintNftFrom:"Mint from following factory (collection)",createInvoice:"Creates invoices for related payments.",adjustable:"Adjustable quantity",adjustableQuantity:"Let customers adjust quantity",noProducts:"Payment link must have at least one product",noRedirectUrl:"Payment link must have a redirect url",noSubscriptionTrialDays:"You must specify a trial period for subscription",recurringNotAligned:"The prices on all line items must have the same recurring interval",currencyNotAligned:"The prices on all line items must have the same currency settings",edit:"Edit payment link",rename:"Change name",archive:"Archive payment link",archiveTip:"Archiving will hide this payment link from new purchases. Are you sure you want to archive this payment link?",remove:"Remove payment link",removeTip:"Removing will hide this payment link from new purchases. Are you sure you want to remove this payment link?",name:{label:"Name",placeholder:"Not consumer facing"},adjustableQuantityError:"Minimum must be less than maximum"},pricingTable:{view:"View pricing table",add:"Create pricing table",save:"Create",openLink:"Open URL",copyLink:"Copy URL",saved:"Pricing table successfully saved",edit:"Edit pricing table",rename:"Change name",archive:"Archive pricing table",archiveTip:"Archiving will hide this pricing table from new purchases. Are you sure you want to archive this pricing table?",remove:"Remove pricing table",removeTip:"Removing will hide this pricing table from new purchases. Are you sure you want to remove this pricing table?",name:{label:"Name",placeholder:"Not consumer facing"},display:"Display Settings",highlight:"Highlight product",customer:"Customer portal"},paymentIntent:{list:"Payments",name:"Payment",view:"View payment detail",empty:"No payment intent",refund:"Refund payment",status:{active:"Active",paid:"Paid",succeeded:"Succeeded"},received:"Received",attention:"Failed payments",refundError:"Failed to refund payment",refundSuccess:"Refund application has been successfully created",cancelRefund:"Cancel refund",refundCanceled:"Cancel refund successfully",refundCanceledError:"Failed to cancel refund",refundCanceledTip:"Are you sure you want to cancel the refund application? After cancellation, the refund will no longer be processed.",refundForm:{reason:"Refund reason",amount:"Refund amount",description:"Refund description",duplicate:"Duplicate payment",requestedByCustomer:"Requested by customer",requestedByAdmin:"Requested by admin",fraudulent:"Fraudulent",expiredUncapturedCharge:"Expired uncaptured charge",amountRange:"Refund amount must be between {min} and {max} {symbol}",amountHelper:"Refund amount must be less than or equal to {max} {symbol}",required:"Please fill in the refund information",empty:"The current order has been fully refunded"}},payout:{list:"Payouts",name:"Payout",view:"View payout",empty:"No payout",attention:"Failed payouts",requestRefund:"Request Refund",confirmRefund:"Are you sure you want to request a refund from the vendor?",refundRequested:"Refund request sent to vendor",refundReason:"Refund Reason",refundReasonPlaceholder:"Please enter the reason for refund (at least 5 characters)",refundReasonRequired:"Refund reason is required",refundReasonMinLength:"Refund reason must be at least {min} characters",refundReasonHelper:"Please enter at least {min} characters",status:{active:"Active",paid:"Paid",succeeded:"Succeeded"}},paymentMethod:{_name:"Payment Method",type:"Type",add:"Add payment method",edit:"Edit payment method",save:"Save payment method",saved:"Payment method successfully saved",settings:"Settings",gasTip:"Ensure your account on the {chain} network has sufficient balance to cover transaction fees when using {method}.",recharge:"Scan to add balance",props:{type:"Type",confirmation:"Confirmation",recurring:"Recurring support",refund:"Refund support",dispute:"Dispute support",currencies:"Currency support",explorer_host:"Explorer Host",balance:"Balance"},name:{label:"Name",tip:"Customer-facing"},description:{label:"Description",tip:"Not customer-facing"},stripe:{dashboard:{label:"Dashboard URL",tip:"Used to generate links to Stripe dashboard"},publishable_key:{label:"Publishable Key",tip:"Publishable Key, See Dashboard > Developers > API Keys"},secret_key:{label:"Secret Key",tip:"Secret Key, See Dashboard > Developers > API Keys"},webhook_signing_secret:{label:"Webhook Signing Secret",tip:"Webhook Signing Secret, See Dashboard > Developers > Webhooks > Signing Secret"},webhookHint:"If webhook events are not received, manually configure STRIPE_WEBHOOK_SECRET in environment variables",configureEnv:"Go to Settings"},arcblock:{chain_id:{label:"Chain ID",tip:"Just a name"},api_host:{label:"API Host",tip:"The GraphQL endpoint to send transactions to"},explorer_host:{label:"Explorer Host",tip:"The web app endpoint to view transaction details"}},ethereum:{chain_id:{label:"Chain ID",tip:"Must be a valid EVM chain id, usually an integer, https://chainlist.org"},api_host:{label:"RPC Endpoint",tip:"The RPC endpoint to send transactions to"},explorer_host:{label:"Explorer Host",tip:"The web app endpoint to view transaction details"},native_symbol:{label:"Native Symbol",tip:"The symbol for native token on this chain"},confirmation:{label:"Confirmation Count",tip:"Number of blocks required since transaction execution"}},evm:{checking:"Checking connection...",connected:"Connected",connectionError:"Connection failed",blockHeight:"Block Height",rpcStatus:"RPC Status"},base:{chain_id:{label:"Chain ID",tip:"Must be a valid EVM chain id, usually an integer, https://chainlist.org"},api_host:{label:"RPC Endpoint",tip:"The RPC endpoint to send transactions to"},explorer_host:{label:"Explorer Host",tip:"The web app endpoint to view transaction details"},native_symbol:{label:"Native Symbol",tip:"The symbol for native token on this chain"},confirmation:{label:"Confirmation Count",tip:"Number of blocks required since transaction execution"}},google_play:{package_name:{label:"Package Name",tip:"e.g. com.example.app, configured in Play Console"},service_account_json:{label:"Service Account JSON",tip:"Paste the full service account credentials JSON downloaded from Google Cloud Console",invalidJson:"Not valid JSON",missingFields:"JSON is missing client_email or private_key",detectedClient:"Detected client"},pubsub_topic_name:{label:"Pub/Sub Topic (optional)",tip:"projects/<project-id>/topics/<topic-name>, for receiving RTDN"}},app_store:{bundle_id:{label:"Bundle ID",tip:"e.g. com.example.app, configured in App Store Connect"},environment:{label:"Environment",tip:"StoreKit 2 JWS environment must match this setting",production:"Production",sandbox:"Sandbox"},shared_secret:{label:"Shared Secret (for StoreKit 1)",tip:"App-Specific Shared Secret for legacy receipt verification. Not needed for StoreKit 2 JWS. Find it at App Store Connect → App Information → App-Specific Shared Secret"},serverApi:{heading:"Server API Credentials (optional)",tip:"Not required for StoreKit 2 JWS verification. Only needed when querying App Store Server API for subscription status. Provide all three or none."},issuer_id:{label:"Issuer ID",tip:"App Store Connect API Issuer ID"},key_id:{label:"Key ID",tip:"App Store Connect API Key ID"},private_key_pem:{label:"Private Key (.p8 contents)",tip:"Paste the contents of the .p8 file downloaded from App Store Connect"}}},paymentCurrency:{name:"Payment Currency",add:"Add Currency",edit:"Edit Currency",save:"Save payment currency",saved:"Payment currency successfully saved",delete:"Delete payment currency",deleteConfirm:"Are you sure you want to delete this payment currency? Once deleted, it cannot be recovered",deleted:"Payment currency successfully deleted",quickAdd:"Quick add supported currency",searchToken:"Search currency",orManualInput:"Or manually fill in currency information below",logo:{label:"Logo",tip:"Displayed on payment page"},contract:{label:"Contract",tip:"Used to fetch token symbol, decimals and other info"}},event:{empty:"No events",view:"View event",data:"Event Data",webhooks:"Webhook Attempts",type:"Type",pendingWebhooks:"Pending Webhooks",noAttempts:"No Attempt",retry:"Retry",retrying:"Retrying...",retryOptions:{title:"Retry Webhook",confirmMessage:"Are you sure you want to retry this webhook? This will send another request to the webhook endpoint.",success:"Webhook scheduled for retry",error:"Failed to retry webhook"},response:"Response",request:"Request",eventData:"Event Data"},invoice:{view:"View invoice",attention:"Uncollectible invoices",metric:"Paid invoices",name:"Invoice",status:{active:"Active",paid:"Paid",succeeded:"Succeeded"},from:"Billed from",empty:"No invoices",number:"Invoice Number",description:"Billing Description",dueDate:"Due",finalizedAt:"Finalized At",paidAt:"Payment Date",summary:"Summary",billingContextNote:"Invoice amounts are calculated based on real-time prices at the time of billing.",dynamicPricingNote:"This invoice uses dynamic pricing with locked exchange rates.",billTo:"Billed to",billing:"Billing Method",download:"Download PDF",edit:"Edit Invoice",duplicate:"Duplicate Invoice",retryUncollectible:{title:"Retry collection",tip:"Are you sure you want to retry collecting this invoice? This will attempt to charge the customer again.",success:"Retry request submitted"},returnStake:{title:"Return Stake",tip:"Are you sure you want to return the stake? This action will return the stake to the customer immediately.",success:"Stake return application has been successfully created"},void:{title:"Void Invoice",tip:"Are you sure you want to void this invoice? This action will immediately void the invoice.",success:"Invoice voided"}},vendor:{create:"Create Vendor",edit:"Edit Vendor",delete:"Delete Vendor",save:"Save Vendor",saved:"Vendor saved successfully",test:"Test",testConnection:"Test Connection",testConnectionTip:'Are you sure you want to test the connection for vendor "{name}"?',testConnectionSuccess:"Connection test successful",testConnectionFailed:"Connection test failed",testSuccess:"Connection test successful",testAfterSave:"Vendor saved successfully. You can test the connection to verify the configuration.",testToEnable:"Vendor saved successfully. Test the connection to enable the vendor.",enabled:"Enabled",disabled:"Disabled",addressCheckFailed:"Address check failed, cannot save when enabled",updateSuccess:"Vendor updated successfully",testFailed:"Connection test failed (Status: {status})",testError:"Connection test failed - network error",vendorKeyInvalid:"Vendor type must contain only lowercase letters, numbers, and underscores",deleteTitle:"Delete Vendor",deleteContent:'Are you sure you want to delete vendor "{name}"? This action cannot be undone.',deleteTip:'Are you sure you want to delete vendor "{name}"? This action cannot be undone.',activate:"Activate Vendor",activateTip:'Are you sure you want to activate vendor "{name}"?',deactivate:"Deactivate Vendor",deactivateTip:'Are you sure you want to deactivate vendor "{name}"?',name:"Vendor Name",nameRequired:"Vendor name is required",vendorType:"Vendor Type",vendorTypeRequired:"Vendor type is required",didnames:"DID Names",launcher:"Launcher",vendorKey:"Vendor Key",vendorKeyRequired:"Vendor key is required",vendorKeyHelp:"Unique identifier for the vendor",description:"Description",displayNameRequired:"Display name is required",displayNameHelp:"This name will be displayed on the installation interface after successful payment",appUrl:"App URL",appUrlRequired:"App URL is required",appUrlInvalid:"Please enter a valid URL starting with http:// or https://",appUrlHelp:"The base URL of the vendor application",vendorDid:"Vendor DID",vendorDidInvalid:"Please enter a valid DID",vendorDidHelp:"Optional DID address for the vendor",webhookPath:"Webhook Path",webhookPathInvalid:"Please enter a valid path starting with /",webhookPathHelp:"Optional webhook callback path (e.g., /webhooks/status)",blockletMetaUrl:"Blocklet Meta URL",blockletMetaUrlRequired:"Blocklet Meta URL is required",blockletMetaUrlInvalid:"Please enter a valid URL starting with http:// or https://",blockletMetaUrlHelp:"Required blocklet metadata URL for application information",commission:"Commission",commissionRate:"Commission Rate",commissionRateRequired:"Commission rate is required",commissionRateMin:"Commission rate must be at least 0",commissionRateMax:"Commission rate is too high",commissionType:"Commission Type",commissionRateHelp:"Commission rate as percentage",commissionAmountHelp:"Fixed commission amount",percentage:"Percentage",fixedAmount:"Fixed Amount",active:"Active",inactive:"Inactive",basicInfo:"Basic Information",apiConfig:"API Configuration",commissionConfig:"Commission Configuration",status:"Status",brokerDID:"Broker DID",brokerPublicKey:"Broker Public Key"},subscription:{view:"View subscription",name:"Subscription",empty:"No subscriptions",status:{active:"Active",paid:"Paid",succeeded:"Succeeded"},viewAll:"View all subscriptions",noActiveEmpty:"You currently have no active subscriptions. You can choose to view your subscription history.",includedServices:"Included Services",serviceHome:"Visit Service Homepage",serviceDashboard:"Access Service Dashboard",attention:"Past due subscriptions",product:"Product",collectionMethod:"Billing",channel:"Channel",currentPeriod:"Current Period",iap:{googlePlayTitle:"Google Play Purchase",appStoreTitle:"App Store Purchase",purchaseToken:"Purchase Token",orderId:"Order ID",productId:"Product ID",originalTransactionId:"Original Transaction ID",transactionId:"Transaction ID",expiryTime:"Expires At",environment:"Environment"},trialingPeriod:"Trial Period",trialEnd:"Trial ends {prefix} {date}",willEnd:"Will end {prefix} {date}",ended:"Ended {prefix} {date}",renew:"Renew {prefix} {date}",discount:"Discount",activeDiscount:"Active Discount",startedAt:"Started",nextInvoice:"Next Invoice",nextInvoiceAmount:"Next Invoice Amount",nextInvoiceAmountTip:"The next invoice amount is estimated, the actual amount will be calculated based on actual usage.",itemId:"Subscription Item ID",update:"Update subscription",resume:"Resume payment collection",resumeTip:"Are you sure you want to resume collecting payments? Any future invoices for this subscription will resume payment collection.",paymentAddress:"Payment Address",currentBalance:"Current Balance",insufficientBalance:"Insufficient Balance, please add funds",cancel:{schedule:"Scheduled to cancel",title:"Cancel subscription",required:"Custom cancel time is required",will:"End {prefix} {date}",done:"Canceled",at:{title:"Cancel",now:"Immediately ({date})",current_period_end:"End of current period ({date})",custom:"On a custom date",timeError:"Cancel time must be within the current period"},refund:{title:"Refund",none:"No refund",last:"Last payment {total}{symbol}",proration:"Proration amount {unused}/{total}{symbol}"},staking:{title:"Stake",none:"No return or slash",proration:"Return Remaining Stake {unused}{symbol}",slash:"Slash Remaining Stake {unused}{symbol}",slashReason:"Slash Reason",slashTip:"The remaining stake of this subscription {unused}{symbol} will be slashed, please confirm to continue?",slashTitle:"Slash stake"},comment:{title:"Reason",placeholder:"Please provide the reason for cancellation"}},pause:{title:"Pause payment collection",required:"Custom resume time is required",type:{title:"Pause duration",never:"Indefinite",custom:"Until a custom date"},behavior:{title:"Invoice behavior",keep_as_draft:"Keep invoices as drafts",keep_as_draft_tip:"For businesses currently offering services but waiting to collect payments.",mark_uncollectible:"Mark invoices as uncollectible",mark_uncollectible_tip:"For businesses currently offering services for free.",void:"Void invoices",voidTip:"For businesses not currently offering services."},until:{never:"Collection paused",custom:"Collection paused until {date}"}},usage:{title:"Usage records",current:"Usage records for current period",range:"Usage records for {start} - {end}",view:"View usage",vary:"Varies with usage",used:"Unit used",cycle:"Usage cycle"},batchPay:{button:"Pay due invoices"},payerAddress:"Payment Address",noPaymentMethod:"Not bound",bindPaymentMethod:"Bind now",bindPaymentMethodFirst:"Please bind a payment method first before resuming the subscription",noPaymentMethodWarning:"No payment method is bound to this subscription. Please bind one to avoid cancellation at the end of the current period.",changePayer:{btn:"Change",stripe:{linkType:"Stripe Link",bankAccount:"Bank Account"},connect:{title:"Change Payment Address",success:"Payment Address changed successfully",error:"Failed to change payment Address"}}},customer:{view:"View customer",edit:"Edit information",spent:"Spent Amount",refund:"Refund Amount",dispute:"Dispute Amount",due:"Due Amount",stake:"Stake Amount",token:"Token Balance",name:"Name",email:"Email",phone:"Phone",invoicePrefix:"Invoice Prefix",googlePlayUuid:"Google Play UUID",appStoreUuid:"App Store UUID",balance:"Balance ({currency})",summary:{refund:"Refunds",spent:"Spent",due:"Due",stake:"Stake",stats:"Stats",balance:"Balance"},address:{label:"Address",country:"Country",state:"State or province",city:"City or town",line1:"Address",line2:"Line2",postal_code:"Postal Code"},creditGrants:{title:"Credit Grants",description:"View your available credit grants and usage history",grants:"Credit Grants",transactions:"Credit Usage",summary:"Credit Summary",noGrants:"No credit grants available",grantDetail:"Credit Grant Details",creditBalance:"Credit Balance",totalAmount:"Total Amount",status:{granted:"Active",pending:"Pending",expired:"Expired",depleted:"Depleted",voided:"Voided"},originalAmount:"Original Amount",usage:"Usage",viewInvoice:"View Invoice",grantId:"Grant ID",currency:"Currency",created:"Created",effectiveDate:"Effective Date",expirationDate:"Expiration Date",transactionHistory:"Transaction History",backToGrants:"Back to Credit Grants",viewDetails:"View Details",overview:"Overview",relatedGrants:"Credit Grants",category:"Category",overviewDescription:"Monitor all currency credit balances, usage, and outstanding debt.",availableBalance:"Available Balance",viewGrants:"View Grants",viewUsage:"View Usage",recentActivity:"Recent Activity",quickStats:"Quick Stats",activeGrants:"Active Grants",outstandingDebt:"Outstanding Debt",buyCredits:"Buy Credits",viewAllActivity:"View All Activity",pendingAmount:"Outstanding Charges",grantCount:"Grant Count",noGrantsDescription:"You don't have any credit grants yet.",addCredit:"Add Credit"}},passport:{intro:"Manage payment settings for blocklet passports, you should assign both product and payment entry to a passport to make it available for purchase.",payLink:"Payment entry",payPreview:"Payment preview",preview:"Preview payment page",assign:"Assign to passport",assignTip:"Assign this payment link to selected passport to make it available for purchase",unassign:"Reset purchase config",unassignTip:"Confirm to clear the payment entry and product config for this passport?",assignError:"Must select a passport to assign"},webhookEndpoint:{hosted:"Hosted endpoints",add:"Add endpoint",addTip:"Set up your webhook endpoint to receive live events from",listen:"Listen for",version:"API Version",attempts:"Webhook attempts",url:{label:"URL",description:"Endpoint URL"},description:{label:"Description",description:"An optional description of what this endpoint is used for."},events:{label:"Select events to listen to",description:""}},refund:{name:"Refunds",view:"View refund detail",attention:"Failed refunds",status:{active:"Active",paid:"Paid",succeeded:"Succeeded"}},usageRecord:{empty:"No usage records",add:{label:"Add usage record",success:"Successfully added usage record",quantity:"Quantity"}},donate:{title:"Donation Settings",mountLocation:"Mount Location",component:"Component",description:"Description",status:{title:"Status",active:"Enable",inactive:"Disable",inactiveTip:"After disabling donations, the donation button will no longer be displayed and users cannot use the donation feature. Are you sure you want to disable it?",inactiveTitle:"Disable Donation",activeSuccess:"Donation feature has been enabled",inactiveSuccess:"Donation feature has been disabled"},editTitle:"Edit Donation Settings",updateSuccess:"Donation settings have been updated",amountSettings:"Amount Settings",presets:"Preset Amounts",presetsHelper:"Enter preset amounts, separated by commas (e.g., 1,5,10)",preset:"Default Amount",presetHelper:"Default selected amount (must be one of the presets)",custom:"Allow Custom Amount",minimum:"Minimum Amount",maximum:"Maximum Amount",amountRange:"Amount Range: {min} - {max}",customAmount:"Custom Amount",buttonSettings:"Donation Button Settings",btn:{text:"Button Text",helper:"Set the text displayed on the donation button",preview:"Button Preview"},dialog:{preview:"Donation Dialog Preview",confirmButton:"Confirm Donation {amount}"},previewTitle:"Live Preview",validation:{invalidPreset:"Default amount must be one of the presets",invalidRange:"Minimum amount must be less than maximum amount",invalidAmount:"Amount must be within allowed range"},historyType:{title:"Donation History Display",avatar:"Avatar Wall",list:"List"},intro:"Configure the display effect of the donation button and donation dialog, and the donation feature will take effect after completion.",usage:{viewExample:"View Usage Example",title:"Donation Component Usage Example",description:"To use the donation feature, you need to correctly configure PaymentProvider and DonateProvider in the component. Here is a basic example:",note:"Note: mountLocation must be unique, used to identify the donation instance. After configuration, the instance will appear in the list, and you can make further settings."}},vaultConfig:{title:"Vault",learnMore:"Learn more about vault configuration",goToConfig:"Go to system configuration",description:"By enabling the vault wallet, you create a secure offline storage solution that automatically transfers excess funds when your hot wallet balance exceeds the threshold. This separation significantly enhances security by keeping the majority of your assets safely offline, protected from potential online threats.",notConfigured:"Vault wallet not configured",configureFirst:"Please #go to the dashboard# to configure the vault wallet address before setting up individual currencies.",ownerOnly:"Only administrators with owner permissions can modify vault wallet settings.",permissionRequired:"Owner permissions required",enabled:"Status",enabledYes:"Enabled",enabledNo:"Disabled",depositThreshold:"Deposit Threshold",withdrawThreshold:"Withdrawal Threshold",bufferThreshold:"Buffer Threshold",bufferThresholdHelp:"Only when the amount exceeding the deposit threshold reaches the buffer threshold will the collection operation be triggered.",bufferThresholdInvalid:"Buffer threshold must be at least 0",edit:"Configure",enable:"Enable",editTitle:"Configure {currency} Vault Settings",enableTitle:"Enable Vault Wallet for {currency}",enableVault:"Enable Vault Wallet",enableVaultHelp:"When enabled, excess funds automatically transfer to the vault wallet, and withdrawals exceeding the threshold require admin approval for security and risk control.",depositThresholdHelp:"When the hot wallet balance exceeds this amount, the excess funds will be automatically transferred to the vault wallet.",withdrawThresholdHelp:"For withdrawals exceeding this amount, approval from the vault wallet administrator is required.",notConfig:"Not configured",noLimit:"No limit",withdrawThresholdNoLimit:"0 means no withdrawal limit",depositThresholdRequired:"Deposit threshold must be greater than 0",withdrawThresholdInvalid:"Withdrawal threshold must be at least 0",enableSuccess:"Successfully enabled vault wallet for {currency}",disableSuccess:"Successfully disabled vault wallet for {currency}",updateSuccess:"Successfully updated vault wallet settings for {currency}",depositConfirmTitle:"Deposit to Vault",depositConfirmMessage:"{currency} balance has exceeded the threshold, do you want to deposit to vault immediately?",depositQueued:"Deposit to vault request queued, please check the result later",depositFailed:"Deposit to vault request failed",appBalance:"App Balance"},creditGrants:{tab:"Grants",title:"Credits",summary:"Credit Summary",noGrants:"No credit grants found",grantDetail:"Credit Grant Details",overview:"Overview",overviewDescription:"Monitor credit balances, usage, and outstanding debt across all currencies.",availableBalance:"Available Balance",usage:"Usage",viewGrants:"View Grants",viewUsage:"View Usage",recentActivity:"Recent Activity",quickStats:"Quick Stats",activeGrants:"Active Grants",totalCreditValue:"Total Credit Value",outstandingDebt:"Outstanding Debt",buyCredits:"Buy Credits",viewAllActivity:"View All Activity",creditBalance:"Credit Balance",totalAmount:"Total Amount",pendingAmount:"Pending Amount",grantCount:"Grant Count",noGrantsDescription:"You don't have any credit grants yet.",status:{granted:"Active",pending:"Pending",expired:"Expired",depleted:"Depleted",voided:"Voided"},originalAmount:"Original Amount",grantId:"Grant ID",grants:"Grants",addCredit:"Add Credit",viewDetails:"View Details"},creditTransactions:{tab:"Transactions",title:"Transactions",summary:"Transaction Summary",noTransactions:"No credit transactions found",totalTransactions:"Total Transactions",totalCreditUsed:"Total Credit Used",transactionDate:"Transaction Date"},exchangeRateProvider:{title:"Exchange Rate Providers",subtitle:"Manage exchange rate data sources for dynamic pricing",medianStrategyNote:"Exchange rates are calculated automatically using multiple data sources. You only need to manage this list when a provider is consistently failing or needs to be temporarily disabled.",disableConfirmTitle:"Disable Provider?",disableConfirmMessage:"Disabling this provider may affect dynamic pricing payments. Are you sure?",table:{name:"Name",participation:"Participation",health:"Health",recentActivity:"Recent Activity",trustLevel:"Trust Level",trustLevelTip:"Indicates confidence and eligibility for rate calculation. Higher values do not mean preferred or primary source.",enabled:"Enabled",lastUpdate:"Last update: {time}",failures24h:"Failures (24h): {count}"},participation:{included:"Included",excluded:"Excluded"},health:{active:"Healthy",degraded:"Unstable",paused:"Outlier",inactive:"Outlier"},status:{active:"Active",degraded:"Degraded",paused:"Paused",inactive:"Inactive"},create:{title:"Add Provider",primaryAction:"Add Exchange Rate Provider"},edit:{title:"Edit {name}",name:"Name",nameHelp:"Unique identifier for this data source",nameRequired:"Name is required",type:"Provider Type",typeHelp:"Data source type. Cannot be changed after creation.",baseUrl:"Base URL (Optional)",baseUrlHelp:"Custom base URL for proxy or self-hosted instance. Default: {defaultUrl}",apiKey:"API Key",apiKeyHelp:"API key for accessing the data source.",apiKeyLinkText:"Get your API key at",apiKeyLinkAction:"CoinMarketCap account",testConnection:"Test Connection",testing:"Testing...",testSuccess:"Connection successful ({symbol}/USD: {rate}, {time}ms)",testFailed:"Connection failed: {error}",enabled:"Enabled",priority:"Priority",priorityHelp:"Lower number = higher priority. Providers are used in priority order.",status:"Status",statusHelp:'Set to "paused" to temporarily disable this provider.',pausedReason:"Paused Reason",pausedReasonHelp:"Explain why this provider is paused (optional)."}}},empty:{image:"No Image",refunds:"No Refunds",invoices:"No Invoices",subscriptions:"No Subscriptions",customers:"No Customers",products:"No Products",invoiceItems:"No Invoice Items",payouts:"No Payouts",paymentLinks:"No Payment Links",paymentMethods:"No Payment Methods",pricingTables:"No Pricing Tables",paymentCurrencies:"No Payment Currencies",webhooks:"No Webhooks",events:"No Events",records:"No matching records found",payments:"No Payments",prices:"No Prices",pricing:"You haven't added any prices you can add it",summary:"No Summary"},customer:{subscription:{cancel:"Cancel Subscription",manage:"Manage Subscription",title:"Subscriptions"},invoiceHistory:"Invoice History",product:{empty:"No Products"},credit:{recharge:"Buy Credits",autoRecharge:"Auto Top-up",unsupported:"Not supported yet"},recharge:{title:"Add Funds",amount:"Amount",submit:"Submit",unsupported:"Unsupported currency, please select another one",receiveAddress:"Receive Address",view:"View Subscription",success:"Add funds successfully",custom:"Custom",estimatedDuration:"{duration} {unit} est.",intervals:"intervals",history:"Fund History",relatedSubscriptions:"Related Subscriptions",rechargeTooltip:"Click to add funds"},delegation:{title:"Seems your delegation to this blocklet is revoked or insufficient, which will cause automatic payment failures for your subscription.",btn:"Delegate Now",success:"Delegate successful",error:"Delegate failed"},overdraftProtection:{title:"SubGuard™",setting:"Set SubGuard™",learnMore:"Click to learn more about SubGuard™",tip:"To avoid service interruption due to unpaid invoices, you can enable SubGuard™ by staking. Timely payment will not incur additional fees. Please settle your invoices promptly. If your available stake is insufficient or payment is overdue, we will deduct the amount from your stake and charge a service fee.",enabled:"Enabled",disabled:"Disabled",returnRemaining:"Return Remaining Stake",returnRemainingTip:"Once the remaining stake is returned, the SubGuard™ will be automatically disabled. Please confirm the action.",applyRemainingSuccess:"Stake return application successful",remaining:"Your current remaining stake: {amount} {symbol}, estimated required stake per cycle: {estimateAmount} {symbol}.",noRemaining:"No remaining stake available. Please stake at least {estimateAmount} {symbol} as soon as possible to ensure SubGuard™ is enabled.",remainingNotEnough:"You have unpaid invoices totaling {due} {symbol}. If not paid, your remaining stake will be insufficient to cover the next invoice. Available stake: {unused} {symbol}. Please stake at least {min} {symbol}.",due:"Please pay the outstanding amount first",insufficient:"Insufficient Stake to cover the next invoice, please add stake",insufficientTip:"Insufficient Stake, please stake to ensure SubGuard™ is enabled.",intervals:"cycles",estimatedDuration:"{duration} {unit} est.",rule:"Rule: N * ( P + Fee )",ruleTip:"N is the number of cycles, P is the subscription bill amount, Fee is the SubGuard™ service fee, the single fee is {gas} {symbol}",min:"The amount must be greater or equal to {min} {symbol}",settingSuccess:"Settings Updated",settingError:"Failed to update SubGuard™ settings",openSuccess:"SubGuard™ Enabled",closeSuccess:"SubGuard™ Disabled",keepStake:"Keep Remaining Stake For SubGuard™",returnStake:"Return Remaining Stake",stake:"Stake",address:"Staking Address",total:"Total Stake: {total} {symbol}, ",disableConfirm:"You currently have unpaid invoices, please settle your invoices first.",open:"Enable SubGuard™",payerAddress:"Payer",stakingAddress:"Staking Address"},unpaidInvoicesWarning:"You currently have unpaid invoices, please settle your invoices first.",unpaidInvoicesWarningTip:"You currently have unpaid invoices, please settle your invoices promptly.",pendingAmountWarningTip:"You have {amount} {symbol} in unpaid usage charges due to insufficient credit balance. Please top up your account.",invoice:{relatedInvoice:"Related Invoice",donation:"Donation",creditsInfo:"Total {amount} included",appliedDiscounts:"Applied Discounts",priceChanged:"The exchange rate has changed by {percent}%. The payment amount will be updated. Do you want to continue?",paymentCancelled:"Payment cancelled",paymentMethodChanged:"Payment method changed",priceChangeTitle:"Price Changed",priceChangeDescription:"The exchange rate has {direction} by {percent}%. Your payment amount will be updated.",currentPaymentMethod:"Current Payment Method",otherPaymentMethods:"Or pay with another method",confirmAndPay:"Confirm & Pay",switchAndPay:"Switch & Pay",current:"current"},payout:{empty:"No Revenues",payer:"Payer",receiver:"Receiver",payTxHash:"Payment TxHash",viewReference:"View Reference",title:"Revenues"},pastDue:{warning:"You have due invoices, please pay them to keep your services active",invoices:"Due Invoices",payNow:"Pay Now",alert:"You have due invoices. Please pay them promptly to avoid service interruption.",title:"Settle Due Invoices"},quote:{title:"Price Quotes",noQuotes:"No price quotes for this invoice",id:"Quote ID",pricingDetails:"Pricing Details",baseAmount:"Base Amount",exchangeRate:"Exchange Rate",consensusMethod:"Consensus",referenceRate:"Reference Rate: 1 {symbol} ≈ ${rate}",quotedAmount:"Quoted Amount",providerInfo:"Rate Provider",provider:"Provider",rateTimestamp:"Rate Timestamp",slippage:"Slippage",lifecycle:"Lifecycle",expiresAt:"Expires At",riskInfo:"Risk Information",deviation:"Price Deviation",anomalyDetected:"Anomaly Detected",degraded:"Degraded",status:{active:"Active",used:"Used",paid:"Paid",expired:"Expired",cancelled:"Cancelled",failed:"Failed"}}},integrations:{description:"Configure and manage how Payment Kit integrates with your application.",basicFeatures:"Basic Features",advancedFeatures:"Advanced Features",features:{products:{title:"Create Products",intro:"Create and manage your products or services"},paymentLinks:{title:"Payment Links",intro:"Create shareable payment links for quick checkout"},pricingTables:{title:"Pricing Tables",intro:"Create beautiful pricing tables for your products"},metering:{title:"Usage Metering",intro:"Track usage with meters and sell credits as top-up packages",dialog:{title:"How to set up credit-based metering",description:"Credit-based metering allows you to track usage and charge customers based on consumption. Follow these steps to get started:",steps:{step1:{title:"Create a meter to track your usage events",description:"Set up meters to monitor API calls, data usage, or any measurable activity in your application."},step2:{title:"Create Credit top-up products and pricing",description:"Define credit packages that customers can purchase, with flexible pricing models and validity periods."},step3:{title:"Create a payment link and share it so users can buy Credits",description:"Generate shareable payment links that allow customers to easily purchase credit packages."},step4:{title:"Integrate and report Credit usage",description:"Use our SDK to report usage events and automatically deduct credits from customer balances."}},docText:"Read the credit billing guide"}},promotions:{title:"Promotions",intro:"Create coupons and promotion codes to drive conversions"},donate:{title:"Donation",intro:"Add donation button to your application with <CheckoutDonate />"},paymentMethods:{title:"Payment Methods",intro:"Configure multiple payment methods and currencies"},api:{title:"API Integration",intro:"Integrate with our JavaScript SDK for custom solutions",link:"https://www.npmjs.com/package/@blocklet/payment-js"}},viewDocs:"View docs"}}),NE=Wl({common:{redirecting:"跳转中...",title:"名称",estimated:"预估",total:"总量",active:"生效中",inactive:"未生效",enabled:"已启用",disabled:"已禁用",every:"每",metadata:{label:"元数据",description:"添加自定义键值对以存储有关此计量器的其他信息。",add:"添加更多元数据",edit:"编辑元数据",empty:"无元数据",emptyTip:"您还没有添加任何元数据,您可以添加它",formMode:"切换到表单模式",jsonMode:"切换到JSON模式",jsonPlaceholder:"输入JSON数据...",invalidJson:"JSON格式无效,请检查您的输入",formatJson:"格式化JSON"},price:"价格",add:"添加",fullscreen:"全屏",exit:"退出",maxLength:"最多输入{len}个字符",minLength:"最少输入{len}个字符",invalidCharacters:"无效字符",latinOnly:'至少包含一个字母,并且不能包含中文字符和特殊字符如 <, >、"、’ 或 \\',loading:"加载中...",loadMore:"加载更多",noMoreData:"没有更多数据",rechargeTime:"充值时间",submit:"提交",custom:"自定义",estimatedDuration:"预计可用 {duration}",detail:"详情",setting:"配置",slippage:"滑点下限",slippageMinRate:"最低可接受汇率 {rate} {currency}",slippageTooltip:"自动扣款时可接受的最低汇率,当汇率低于此值时将暂停扣款",welcome:"欢迎使用 Payment Kit",welcomeDesc:"从基础功能开始,轻松接入支付功能。选择下方任意功能,立即开始使用。",quickStart:"快速入门指南",advancedFeatures:"高级功能",quickStarts:"快速入门",homeTagline:"为 Blocklet 构建的去中心化支付解决方案",adminDashboard:"管理后台",customerPortal:"客户门户",copy:"复制",copied:"已复制",copySuccess:"复制成功",copyFailed:"复制失败",copyTip:"请手动复制",save:"保存",saving:"保存中...",saved:"保存成功",refresh:"刷新",cancel:"取消",back:"返回",know:"知道了",confirm:"确认",increased:"上涨",decreased:"下跌",edit:"编辑",view:"查看",select:"选择",clear:"清除",delete:"删除",deleting:"删除中...",activate:"启用",deactivate:"停用",yes:"是",no:"否",never:"永不",created:"创建时间",updated:"更新时间",valid:"有效",events:"事件",details:"详情",discount:"折扣",deleted:"已删除",days:{sunday:"星期日",monday:"星期一",tuesday:"星期二",wednesday:"星期三",thursday:"星期四",friday:"星期五",saturday:"星期六"},maxAmount:"最大金额为 {max}",name:"名称",type:"类型",status:"状态",remainingCredit:"剩余额度",scope:"适用范围",source:"来源",effectiveDate:"生效时间",expirationDate:"过期时间",creditGrant:"信用额度",date:"日期",subscription:"订阅",meter:"计量器",meterEvent:"计量事件",creditAmount:"额度",createdAt:"创建时间",expiresAt:"过期时间",general:"通用",specific:"指定使用范围",paid:"付费",promotional:"促销",viewInvoice:"查看账单",viewSourceData:"查看来源",goToConfigure:"前往配置",noData:"暂无数据"},notification:{preferences:{title:"邮件通知设置",button:"邮件设置",frequency:{label:"通知频率",default:"即时通知 (默认)",daily:"每日",weekly:"每周",monthly:"每月"},day:"日",timeFormatError:"请输入有效的时间,格式为24小时制 (HH:MM)",monthlyHelp:"如果所选日期在某月不存在,将使用该月的最后一天",subscriptionRenewalNote:"此设置适用于订阅续费通知。"}},admin:{description:"管理你的产品、定价、账单和支付流程。",balances:"余额",addresses:"地址",trends:"趋势",metrics:"指标",attention:"注意",overview:"总览",overviewPage:{financialIndicatorsTitle:"财务指标",businessMonitoringTitle:"业务监控",filters:{dateRange:"选择日期范围",currencyLabel:"币种",productLabel:"产品",regionLabel:"地区",allCurrencies:"全部币种",allProducts:"全部产品",allRegions:"全部地区"},financialIndicators:{totalIncome:{title:"总收入",subtitle:"用户实际支付"},refundAmount:{title:"退款金额",subtitle:"已退款总额"},costOfGoods:{title:"进货成本",subtitle:"供应商分成"},netRevenue:{title:"净收入",subtitle:"扣除供货成本后的收入"},promotionCost:{title:"促销成本",subtitle:"折扣"},taxedRevenue:{title:"含税收入",subtitle:"包含税费的收入"}},charts:{title:"交易趋势",payments:"付款",payouts:"出款",refunds:"退款",allCurrencies:"全部币种"},metrics:{transaction:"交易指标",essential:"关键指标"},overdue:{title:"欠费额度",subtitle:"待支付的额度",customers:"{count} 位用户",events:"{count} 笔欠费记录",viewAll:"查看全部",noOverdue:"暂无欠费"}},payments:"支付管理",connections:"连接",back:"返回",actions:"操作",create:"创建",creating:"创建中...",save:"保存",saving:"保存中...",cancel:"取消",paymentLinks:"支付链接",paymentMethods:"支付方式",customers:"客户管理",products:"产品定价",invoiceItems:"账单明细",coupons:"优惠券",tax:"税务",taxRates:"税率",taxRate:{create:"创建税率",createTitle:"新建税率",createAction:"添加税率",created:"税率创建成功",updated:"税率更新成功",deleted:"税率删除成功",label:"税率",view:"查看税率",displayName:"显示名称",displayNamePlaceholder:"显示在账单和报表上的名称",displayNameAuto:"留空则自动生成",displayNameRequired:"请填写显示名称",description:"描述",descriptionPlaceholder:"可选描述信息",country:"国家/地区",countryRequired:"请选择国家/地区",state:"州 / 省",postalCode:"邮政编码",taxCode:"产品税码",taxCodeDescription:"产品税码用于根据产品类型和地区自动计算税费。您可以",taxCodeDescriptionLink:"管理税率",taxCodeDescriptionSuffix:"以创建针对特定税码和地区的自定义税率。",selectTaxCode:"选择产品税码",percentage:"税率 (%)",percentageRequired:"请填写税率",percentageMin:"税率需大于或等于 0%",percentageMax:"税率需小于 100%",active:"默认启用",location:"适用区域",advanced:"高级选项",search:"搜索税率",searchCountry:"搜索国家/地区",back:"返回税率列表",associatedInvoices:"关联账单",deleteTitle:"删除税率",deleteMessage:"确定要删除税率“{name}”吗?该操作无法撤销。",deactivateTitle:"停用税率",deactivateMessage:"确定要停用“{name}”吗?停用后将不再自动应用。",activateTitle:"启用税率",activateMessage:'确定要启用"{name}"吗?启用后可用于新的账单。',edit:"编辑",editTitle:"编辑税率",selectTaxCodeHint:"税率将用于自动计算账单中的税费。",searchPlaceholder:"按产品或税码搜索",previewPlaceholder:"请选择税码以查看详情。",usePreset:"默认税码",noPreset:"暂无默认税码",noSuggestions:"没有符合搜索条件的税码。",relatedInvoiceNum:"关联账单数",notUsed:"未使用",taxCodeLabel:"税码:{code}",types:{general:"通用类别",digital:"数字产品",services:"服务类",physical:"实物商品"}},pricing:"定价",pricingTables:"定价表",vendors:"供应商",billing:"订阅和账单",invoices:"账单",subscriptions:"订阅",meters:"计量器",meterEvents:{title:"计量事件"},overdue:{title:"欠费额度",pendingAmount:"欠费额度",eventCount:"欠费笔数",noOverdue:"暂无欠费",selectCurrency:"币种"},meter:{add:"添加计量器",edit:"编辑计量器",save:"保存计量器",saved:"计量器保存成功",activate:"激活计量器",activated:"计量器激活成功",deactivate:"停用计量器",deactivated:"计量器停用成功",deleted:"计量器删除成功",deleteConfirm:"确定要删除此计量器吗?此操作无法撤销。",activateConfirm:"确定要激活此计量器吗?它将开始收集使用数据。",deactivateConfirm:"停用后,此计量器将无法接收更多事件。尝试为此计量器创建事件将返回错误。之前报告的使用数据将保留。您可以随时重新激活。",view:"查看计量器",basicInfo:"基本信息",basicInfoDescription:"配置计量器的核心设置以跟踪使用事件。",editDescription:"更新计量器名称、描述和元数据。事件名称和聚合方法等核心设置无法更改。",creditMode:{onchain:"OnChain",onChainDescription:"开启后你的 Credit 将作为 Token 发布在 ArcBlock 区块链上,用户的充值、退款和消费将在链上公开记录且不可篡改。",tokenConfiguration:"Token 配置",createNewToken:"创建新 Token",useExistingToken:"使用现有 Token",createTokenHint:"填写 Token 名称和符号以创建新 Token",tokenName:"Token 名称",tokenNamePlaceholder:"请输入 Token 名称",tokenNameRequired:"Token 名称不能为空",tokenSymbol:"Token 符号",tokenSymbolPlaceholder:"请输入 Token 符号",tokenSymbolRequired:"Token 符号不能为空",tokenSymbolFormat:"符号必须为 1-6 个大写字母或数字",createTokenButton:"创建 Token",creatingToken:"创建中...",tokenCreated:"Token 创建成功",tokenCreatedLabel:"Token 已创建",tokenAddress:"Token 地址",selectToken:"选择 Token",selectTokenPlaceholder:"请选择一个现有的 Token",tokenAddressRequired:"Token 地址不能为空",enabled:"已启用"},inactive:"计量器未激活",inactiveTip:"此计量器未收集使用数据。激活它以开始跟踪事件。",name:{label:"计量器名称",required:"计量器名称为必填项",placeholder:"API 请求",help:"此计量器的描述性名称,将在您的仪表板以及用户个人账单中显示。"},eventName:{label:"事件名称",required:"事件名称为必填项",placeholder:"api_request",help:"将发送到此计量器的事件名称",editHelp:"为保持数据一致性,计量器创建后无法更改事件名称。"},aggregationMethod:{label:"聚合方法",required:"聚合方法为必填项",sum:"求和",sumHint:"将所有事件值相加",sumDescription:"求和聚合方法将所有使用事件值相加,并报告事件摘要和计费的总计。",count:"计数",countHint:"计算事件数量",countDescription:"计数聚合方法计算接收到的事件数量,并报告事件摘要和计费的总计数。",last:"最后值",lastHint:"使用最近的事件值",lastDescription:"最后值聚合方法使用接收到的最近事件值,并报告该值用于事件摘要和计费。",editHelp:"为保持数据一致性,计量器创建后无法更改聚合方法。"},unit:{label:"计量单位",required:"计量单位为必填项",placeholder:"请求",help:"此计量器的测量单位",editHelp:"为保持数据一致性,计量器创建后无法更改计量单位。"},description:{label:"描述",placeholder:"跟踪 API 使用情况以进行计费",help:"可选描述,帮助您和您的团队了解此计量器跟踪的内容。"},events:{title:"事件",dailyEventCount:"每日事件数量",dailyTotalValue:"每日总使用量",eventName:"事件名称",value:"使用量",customer:"客户",subscription:"订阅",reportTime:"上报时间",count:"共 {count} 个事件",empty:"暂无事件数据",emptyTip:"当有事件上报时,数据将显示在这里",filterByCustomer:"按客户筛选",eventCount:"事件数量",totalValue:"总使用量",hourly:"按小时",totalEvents:"总事件数",timeRange:"时间粒度",hourlyView:"小时视图",dailyView:"日视图"},usageGuide:{title:"如何报告使用情况",description:'使用事件名称 "{eventName}" 向此计量器发送事件。计量器将{method}值并以{unit}为单位跟踪使用情况。',tip:'使用事件名称 "{eventName}" 向此计量器发送事件。计量器将{aggregationMethodHint},并以{unit}为单位跟踪使用情况。',apiEndpoint:"API 端点",curlExample:"cURL 示例",jsExample:"JavaScript 示例",pythonExample:"Python 示例",important:"重要提示",tip1:"将 YOUR_API_KEY 替换为您的实际 API 密钥",tip2:"事件名称必须完全匹配:{eventName}",tip3:"包含时间戳以进行准确跟踪",moreInfo:"更多信息,请参阅我们的",apiDocs:"API 文档"},products:{count:"{count} 个关联产品",create:"创建产品",created:"产品创建成功",createPrompt:"输入产品名称:",manage:"管理",empty:"无产品",title:"产品",emptyTip:"此计量器尚未关联任何产品。",meterService:"计量服务",creditCharge:"Credit 计费"},creditProducts:{emptyTip:"此计量器尚未关联任何 Credit 产品。"},rechargePackage:{priceId:"充值套餐",tooltip:"充值套餐是用于充值 {name} 的套餐,用户购买后可以获得对应的 {name}。"}},creditProduct:{create:"创建 Credit 产品",defaultName:"{name} 额度充值包",defaultDescription:"{name} 额度充值包",defaultNickname:"Credit 充值",unitLabel:"单位",settings:"Credit 设置",configTitle:"Credit 配置",expirationTime:{label:"过期时间",expireWithNextGrant:"随下次发放过期"},name:{placeholder:"输入 Credit 产品名称"},description:{placeholder:"描述此 Credit 产品的用途和价值"},priceNotice:"Credit 产品用于为用户提供可消费的额度,支持一次性购买和套餐包两种模式。",creditAmount:{label:"Credit 数量",placeholder:"用户购买此价格获得的 Credit 数量",help:"留空表示按单价售卖,填入数字表示固定套餐包",description:"用户购买数量决定获得的 Credit"},validDuration:{label:"可用时长",help:"Credit 的有效期限,从购买时开始计算",description:"设置为 0 表示永不过期",hours:"小时",days:"天",weeks:"周",months:"月",years:"年"},associatedPrices:{label:"关联价格",placeholder:"选择此 Credit 可用于的服务价格",help:"选择后,购买的 Credit 只能用于指定的服务",description:"不选择任何价格表示 Credit 可用于所有服务"},priority:{label:"使用优先级",help:"当用户有多个 Credit 时的使用顺序,数字越小优先级越高",description:"范围:0-100,0 为最高优先级,50 为默认值"},deliveryMode:{label:"发放模式",once:"一次性发放",periodic:"周期性发放"},schedule:{interval:{label:"发放频率",hour:"小时",day:"天",week:"周",month:"月"},amountPerGrant:{label:"每次发放数量",description:"每次发放固定数量的 Credit"},expireWithNextGrant:{label:"随下次发放过期",description:"本次 Credit 将在下一次发放时自动过期"}}},meterEvent:{title:"计量事件详情",id:"事件ID",totalEvents:"总事件数:{count}",noEvents:"暂无事件",noEventsHint:"您可以在测试模式下手动添加测试事件。",identifier:"标识符",customer:"客户",customerId:"客户ID",value:"数值",subscription:"订阅",creditConsumed:"消耗额度",usageValue:"使用量",settlementAmount:"结算额度",reportedAmount:"上报额度",overdueAmount:"欠费额度",reportedAt:"上报时间",processedAt:"处理时间",eventIdentifier:"事件标识符",usageDetails:"使用详情",chart:{eventCount:"每日事件数",totalValue:"每日用量总数"},filter:{customer:"筛选客户"},add:{button:"添加用量",title:"添加用量",customerId:"客户",customerIdPlaceholder:"选择客户",value:"数值",valuePlaceholder:"输入用量数值",subscriptionId:"订阅",subscriptionIdPlaceholder:"输入订阅ID(可选)",subscriptionIdHint:"可选 - 将此用量关联到特定订阅",timestamp:"时间",timestampHint:"此用量发生的时间",validation:"客户和数值为必填项",success:"用量事件添加成功",submit:"提交"}},developers:"开发者工具箱",webhooks:"钩子",events:"事件",refunds:"退款记录",payouts:"出款记录",logs:"日志",passports:"通行证",details:"详情",settings:"系统设置",branding:"品牌设置",business:"企业设置",summary:"摘要",product:{empty:"暂无产品",info:"产品信息",add:"添加产品",view:"查看产品详情",save:"保存产品",saved:"产品已成功保存",additional:"附加选项",edit:"编辑产品",pricing:"定价",find:"选择产品",archive:"存档产品",archiveTip:"存档将隐藏此产品不再允许新购买。确定要存档此产品吗?",unarchive:"取消存档产品",unarchiveTip:"取消存档将使此产品可以用于新的购买。确定要取消存档此产品吗?",remove:"删除产品",removeTip:"删除将隐藏此产品不再允许新购买。确定要删除此产品吗?",archived:"此产品已存档",archivedTip:"此产品无法添加到新的账单、订阅、支付链接或定价表。具有此产品的任何现有订阅将保持活动状态,直到取消,任何现有的支付链接或定价表将被停用。",locked:"此产品已锁定,因为至少有一个价格用于订阅或支付。",currencyNotAligned:"所有价格必须具有相同的货币设置",image:{label:"图片",add:"添加图片"},features:{label:"特点",add:"添加其他特点"},name:{label:"名称",required:"产品名称是必需的",placeholder:"高级套餐"},description:{label:"描述",required:"产品描述是必需的",placeholder:"在结账、账单页面显示的产品描述"},statement_descriptor:{label:"声明描述",placeholder:"ArcBlock"},unit_label:{label:"单位标签",placeholder:"单位"},billingType:{label:"计费类型",standard:"标准计费",metered:"计量计费",help:"选择如何向客户收费"},meter:{label:"计量器",placeholder:"选择计量器来跟踪使用情况",required:"计量计费需要选择一个计量器",help:"选择用于跟踪此产品使用情况的计量器",pricingNote:"对于计量产品,定价会自动基于所选计量器跟踪的使用情况。您只需要设置单价和计费周期。"},cross_sell:{title:"交叉销售",to:"交叉销售",tip:""},type:{label:"产品类型",service:"服务",serviceDesc:"数字服务或订阅",credit:"Credit",creditDesc:"用于基于 Credit 计费场景的充值产品",creditDescLink:"请先创建计量器",good:"商品",goodDesc:"实体商品或有形产品"},vendorConfig:{title:"供应商配置",add:"添加供应商",empty:'未配置供应商。点击"添加供应商"来配置供应商服务。',vendor:"供应商",vendorRequired:"供应商是必填项",productCode:"产品代码",productCodeRequired:"产品代码是必填项",commissionType:"分成类型",commissionRate:"分成比例",commissionRateRequired:"分成比例是必填项",commissionRateMin:"分成比例必须大于或等于0",commissionRateMax:"分成比例不能超过100%",amount:"固定金额",noVendor:"无供应商可选",amountRequired:"固定金额是必填项",totalCommission:"总分成比例:{total}%",totalCommissionExceeded:"总分成比例超过100%:{total}%"}},price:{name:"价格",type:"使用类型",info:"价格信息",plan:"价格方案",lookupKey:"查找键",setAsDefault:"设置为默认价格",detail:"定价详情",addAnother:"添加价格方案",order:"方案 {order}",add:"添加另一个价格",view:"查看价格详情",additional:"附加选项",model:"定价模型",amount:"价格",amountDescription:"这是客户将支付的含税价格。",locked:"此价格已锁定,因为它用于订阅或支付。",amountTip:"对于订阅选择周期,对于其他所有选择一次性。",duplicate:"复制价格",edit:"编辑价格",find:"选择或新建价格",archive:"存档价格",archiveTip:"存档将隐藏此价格不再允许新购买。确定要存档此价格吗?",remove:"删除价格",removeTip:"删除将隐藏此价格不再允许新购买。确定要删除此价格吗?",unit_amount:{required:"价格是必需的",positive:"价格必须是正数",stripeTip:"Stripe要求价格必须大于等于0.5"},nickname:{label:"价格描述",placeholder:""},lookup_key:{label:"查找键",placeholder:"",description:"查找键用于在API中识别价格"},recurring:{interval:"计费周期",metered:"使用量按计量收费?",meteredTip:"计量计费允许您根据每个计费周期结束时的报告的使用情况向客户收费。",aggregate:"按何种方式收费计量使用",intervalCountTip:"计费周期必须是正整数",stripeTip:"Stripe要求计费周期不能为小时"},currency:{add:"添加更多货币",list:"货币"},models:{standard:"标准定价",standardDesc:"单一固定价格",package:"套餐定价",packageDesc:"按单位数量定价",graduated:"毕业定价",volume:"量价定价",custom:"客户自定义价格",usageBased:"基于使用量",creditMetered:"Credit 计量计费"},creditMetered:{label:"Credit 计量计费",placeholder:"选择计量器来跟踪使用情况",required:"Credit 计量计费需要选择一个计量器",help:"选择用于跟踪此产品使用情况的计量器",selectMeter:"选择计量器",pricingNote:"对于计量产品,定价会自动基于所选计量器跟踪的使用情况。",description:"Credit 计量计费的订阅需要有对应的 Credit 消费,如果 Credit 消耗完,对应的服务会停止。"},credit:{saveAsBasePrice:"设为充值套餐",saveSuccess:"设置成功"},types:{onetime:"一次性",onetimeDesc:"收取一次性费用",recurring:"周期性",recurringDesc:"收取持续费用"},paymentType:"付费类型",billingModel:"计费模式",pricing:"定价",additionalCurrencies:"其他货币",advanced:"高级设置",customInterval:"自定义间隔",perUnit:"每单位",choosePricingModel:"选择定价模式",usage:"使用量",usageDesc:"根据用户数量、单位或席位定价。需要记录以便Stripe跟踪客户服务使用情况。",meter:"计量器",billingPeriod:"计费周期",aggregate:{sum:"在周期内的使用值总和",max:"周期内的最大使用值",last_during_period:"周期内的最近使用值",last_ever:"最近的使用值"},upsell:{title:"升级选项",to:"可升级至",tip:""},quantity:{tip:"数量必须是自然数"},quantityAvailable:{label:"可售数量",placeholder:"0表示无限制",format:"可售{num}件",noLimit:"不限制可售数量",valid:"可售数量不得少于已售数量",description:"输入可售数量,0表示不限制可售数量"},quantitySold:{label:"已售数量",format:"已售{num}件"},quantityLimitPerCheckout:{label:"单次购买最大数量",placeholder:"0表示无限制",format:"单次最多购买{num}件",noLimit:"不限制单次购买数量",description:"输入限制单次购买的最大数量, 0表示无限制"},inventory:"库存设置",dynamicPricing:{label:"启用动态定价",description:"价格根据实时汇率波动",config:{title:"动态定价配置",baseAmount:{label:"基准价格",description:"以法定货币计算的基准价格",required:"基准价格是必需的"}},validation:{checking:"正在检查汇率可用性...",rateLine:"当前汇率:1 {currency} ≈ ${rate}",usdLine:"参考 USD:≈ ${amount}",error:"获取汇率失败,货币不支持或者数据源异常",estimatedLine:"预估数量:≈ {amount} {currency}",useAmount:"填入"}},referencePricing:{label:"参考汇率定价",description:"仅用于参考并快速填充币种数量,不会开启动态定价"}},coupon:{create:"创建优惠券",view:"查看优惠券",description:"优惠券可用于对发票、订阅或整个客户账户提供折扣。",listTitle:"优惠券",terms:"优惠条款",tab:"优惠券",redemptions:"兑换次数",expires:"过期时间",noDiscount:"无折扣",name:"名称",nameHelp:"这将显示在客户的收据和发票上。",desc:"描述",descriptionInternal:"此描述仅供内部使用,不会向客户显示。",id:"ID",idOptional:"ID(可选)",idHelp:"这将在 API 中标识此优惠券。我们建议将此留空,以便我们为您生成 ID。",type:"类型",percentageOff:"百分比折扣",fixedAmountOff:"固定金额折扣",percentageDiscount:"百分比折扣",fixedAmount:"折扣金额",currency:"货币",applyToProducts:"应用于特定产品",duration:"持续时间",once:"一次",forever:"永久",repeating:"重复",durationHelp:'对于订阅和客户,这决定了此优惠券一旦兑换后的有效期。一次性发票接受"一次"和"永久"优惠券。',durationInMonths:"持续月数",redemptionLimits:"兑换限制",limitDateRange:"限制客户可以兑换此优惠券的日期范围",limitTotalNumber:"限制此优惠券可以被兑换的总次数",codes:"代码",useCustomerFacingCodes:"使用面向客户的优惠券代码",promotionCodes:"促销码",promotionCodesHelp:"促销码将在优惠券保存后创建。",addPromotionCode:"添加促销码",eligibleFirstTime:"仅限首次订单(每个用户只能享受一次优惠券折扣)",limitNumberRedemptions:"限制此代码可以被兑换的次数",addExpirationDate:"添加过期日期",requireMinimumOrder:"要求最小订单金额",addAnotherCode:"添加另一个代码",saved:"优惠券保存成功",codeOptional:"代码(可选)",codeHelp:"留空将在创建时自动生成",generate:"生成",verificationType:"验证类型",codeOnly:"仅代码",nftVerification:"NFT 验证",vcVerification:"通行证验证",userWhitelist:"限制特定用户",nftSettings:"NFT 验证设置",vcSettings:"通行证验证设置",userWhitelistSettings:"特定用户设置",nftAddresses:"NFT 地址",nftAddressesPlaceholder:"输入 NFT 合约地址",nftTags:"NFT 标签",nftTagsPlaceholder:"输入 NFT 标签",trustedIssuers:"可信发行者",trustedIssuersPlaceholder:"输入可信发行者",trustedParents:"可信 NFT 工厂",trustedParentsPlaceholder:"输入可信 NFT 工厂",minBalance:"NFT 所需数量",requiredRoles:"必需角色",requiredRolesPlaceholder:"输入必需角色",trustedVcIssuers:"可信 VC 发行者",trustedVcIssuersPlaceholder:"输入可信 VC 发行者 DID",customerDids:"客户 DID",customerDidsPlaceholder:"输入客户 DID",customerDidsHelp:"您可以选择现有客户或手动输入DID",maxRedemptions:"最大兑换次数",expiresAt:"过期时间",pressEnterToAdd:"按回车键添加",couponConfiguration:"优惠券配置",selectProducts:"选择产品",noProductsSelected:"未选择产品",newCode:"新代码",createPromotionCode:"创建促销码",promotionCodeDescription:"为此优惠券创建促销码,让客户兑换折扣。",minimumAmount:"最低金额",minimumAmountHelp:"为不同货币设置最低订单金额",discountAmount:"折扣金额",currencies:"货币",times:"次",months:"月",addProduct:"添加另一个产品",unlimited:"不限量",inactive:"优惠券已停用",inactiveTip:"此优惠券当前处于停用状态,无法使用。",discount:"折扣",updated:"更新时间",timesRedeemed:"已使用次数",deletedSuccessfully:"优惠券删除成功",deleteConfirmTitle:"删除优惠券",deleteConfirmMessage:"确定要删除此优惠券吗?此操作无法撤销。",cannotDeleteWithPromotionCodes:"存在促销码时无法删除优惠券",couponTermsPercentage:"{percent}%",couponTermsFixedAmount:"{amount} {symbol}",couponTerms:{forever:"永久享 {couponOff} 折扣",once:"单次享 {couponOff} 折扣",repeating:"{months} 个月内享 {couponOff} 折扣"},couponTermsDuration:{forever:"永久",once:"单次",repeating:"{months} 个月"},applicableProducts:"适用产品",noApplicableProducts:"此优惠券适用于所有产品",activeRedemptions:"兑换使用记录",customers:"客户",subscriptions:"订阅",noCustomersFound:"未找到客户",noCustomersRedeem:"当前没有客户使用此优惠券",noSubscriptionsFound:"未找到订阅",noSubscriptionsRedeem:"当前没有订阅使用此优惠券",rename:"重命名",renameCoupon:"重命名优惠券",updateCouponDetails:"更新优惠券详情",nameWillAppear:"此名称将显示在客户的收据和发票上。",updateCouponButton:"更新优惠券",discountStart:"折扣开始时间",usageStats:"使用统计",totalDiscounts:"总折扣记录",uniqueSessions:"独立会话",uniqueSubscriptions:"独立订阅",promotionCodesUsed:"使用的促销码",noExpiration:"无过期时间",usagePeriod:"使用时期",firstUsed:"首次使用",lastUsed:"最后使用",promotionCodeInfo:"促销码信息",directCouponUsage:"直接优惠券使用",usageLimit:"使用次数",discountInfo:"折扣信息",discountPeriod:"折扣有效期",couponExpires:"优惠券过期",totalSavings:"累计优惠",viewPromotionCode:"查看促销码"},discount:{totalSaved:"总共节省",timesUsed:"使用次数",appliedDiscounts:"应用的优惠"},promotionCode:{code:"代码",status:"状态",redemptions:"兑换次数",expires:"过期时间",created:"创建时间",actions:"操作",active:"生效中",inactive:"已停用",expired:"已过期",maxedOut:"已用尽",viewDetails:"查看详情",edit:"编辑促销码",delete:"删除促销码",archive:"存档促销码",archiveTip:"存档后,此促销码将不再允许新兑换。确定要存档此促销码吗?",deleteTip:"删除将永久删除此促销码。确定要删除此促销码吗?",title:"促销码",id:"ID",type:"类型",couponId:"优惠券ID",maxRedemptions:"最大兑换次数",timesRedeemed:"已兑换次数",verificationType:"验证类型",updated:"更新时间",activate:"激活",deactivate:"停用",inactiveTitle:"促销码已停用",inactiveTip:"此促销码目前已停用,无法使用。",deleteSuccess:"促销码删除成功",activateSuccess:"促销码激活成功",deactivateSuccess:"促销码停用成功",verificationConfig:"验证配置",nftAddresses:"NFT地址",nftTags:"NFT标签",minBalance:"最小余额",requiredRoles:"所需角色",trustedIssuers:"可信签发方",allowedUsers:"允许的用户",noNftConfig:"无NFT配置",noVcConfig:"无VC配置",noUsersSpecified:"未指定用户",codeVerificationOnly:"仅代码验证",unlimited:"无限制",never:"永不过期",yes:"是",no:"否",verificationTypeMap:{code:"仅代码",nft:"NFT验证",vc:"通行证验证",user_restricted:"限制特定用户"}},paymentLink:{view:"查看支付链接",info:"支付链接信息",add:"创建支付链接",save:"创建链接",openLink:"打开URL",copyLink:"复制URL",saved:"支付链接已成功保存",additional:"附加选项",beforePay:"支付页面",afterPay:"支付后",products:"产品",addProduct:"添加另一个产品",requireBillingAddress:"收集客户的账单地址",requirePhoneNumber:"收集客户的电话号码",allowPromotionCodes:"允许促销码",enablePromotionCodes:"启用促销码",disablePromotionCodes:"禁用促销码",enablePromotionCodesTip:"为此支付链接启用促销码功能。客户在结账时将能够使用折扣代码。",disablePromotionCodesTip:"为此支付链接禁用促销码功能。客户在结账时将无法使用折扣代码。",includeFreeTrial:"包含免费试用",noStakeRequired:"无需质押",showProductFeatures:"显示产品特性",allowSkipPaymentMethod:"允许 $0 结账时跳过绑定支付方式",enableSkipPaymentMethod:"允许跳过支付方式",disableSkipPaymentMethod:"要求绑定支付方式",enableSkipPaymentMethodTip:"当结账金额为 $0 时,允许客户跳过绑定支付方式。若未绑定,订阅将在当前周期结束时自动取消。",disableSkipPaymentMethodTip:"即使结账金额为 $0,也要求客户提供支付方式。",freeTrialDaysPositive:"免费试用天数必须是正数",includeCustomFields:"添加自定义字段",requireCrossSell:"用户必须选择交叉销售的商品(如果有的话)",confirmPage:"确认页面",showConfirmPage:"显示确认页面",customMessage:"用自定义消息替换默认消息",customMessageTip:"包括您认为合适的任何细节,如交付信息。",mintNft:"购买完成时铸造 NFT",mintNftFrom:"从下面的 NFT 集合铸造",noConfirmPage:"不显示确认页面",createInvoice:"为相关付款创建账单。",adjustable:"可调整数量",adjustableQuantity:"允许客户调整数量",noProducts:"支付链接必须至少有一个产品",noRedirectUrl:"支付链接必须有重定向URL",noSubscriptionTrialDays:"您必须为订阅指定试用期",recurringNotAligned:"所有行项目的价格必须具有相同的周期",currencyNotAligned:"所有行项目的价格必须具有相同的货币设置",edit:"编辑支付链接",rename:"更改名称",archive:"存档支付链接",archiveTip:"存档将隐藏此支付链接不再允许新购买。确定要存档此支付链接吗?",remove:"删除支付链接",removeTip:"删除将隐藏此支付链接不再允许新购买。确定要删除此支付链接吗?",name:{label:"名称",placeholder:"不向消费者展示"},adjustableQuantityError:"最小数量必须小于最大数量"},payout:{list:"对外支付",name:"对外支付",view:"查看对外支付",empty:"没有记录",attention:"失败的对外支付",requestRefund:"请求退款",confirmRefund:"确定要向供应商请求退款吗?",refundRequested:"退款请求已发送给供应商",refundReason:"退款原因",refundReasonPlaceholder:"请输入退款原因(至少 5 个字符)",refundReasonRequired:"退款原因为必填项",refundReasonMinLength:"退款原因至少需要 {min} 个字符",refundReasonHelper:"请输入至少 {min} 个字符",status:{active:"生效中",paid:"已支付",succeeded:"成功"}},pricingTable:{view:"查看定价表",add:"创建定价表",save:"创建",openLink:"打开URL",copyLink:"复制URL",saved:"定价表已成功保存",edit:"编辑定价表",rename:"更改名称",archive:"存档定价表",archiveTip:"存档将隐藏此定价表不再允许新购买。确定要存档此定价表吗?",remove:"删除定价表",removeTip:"删除将隐藏此定价表不再允许新购买。确定要删除此定价表吗?",name:{label:"名称",placeholder:"不向消费者展示"},display:"显示设置",highlight:"突出显示产品",customer:"客户门户"},paymentIntent:{list:"付款记录",name:"付款记录",view:"查看付款详情",empty:"没有付款记录",refund:"退款",status:{active:"生效中",paid:"已支付",succeeded:"成功"},received:"实收金额",attention:"失败的付款",refundError:"退款申请失败",refundSuccess:"退款申请已成功创建",cancelRefund:"取消退款",refundCanceled:"取消退款成功",refundCanceledError:"取消退款失败",refundCanceledTip:"您确定要取消退款申请吗?取消后,退款将不再进行。",refundForm:{reason:"退款原因",amount:"退款金额",description:"退款说明",duplicate:"订单因重复下单已被取消并退款",requestedByCustomer:"订单已被客户取消并退款",requestedByAdmin:"订单已被管理员取消并退款",fraudulent:"订单因涉嫌欺诈已被取消并退款",expiredUncapturedCharge:"订单因支付未完成已被取消并退款",amountRange:"退款金额必须在 {min} {symbol} 到 {max} {symbol} 之间",amountHelper:"目前最大退款金额为{max} {symbol}",required:"请完整填写退款信息",empty:"当前订单已全部退款完成"}},paymentMethod:{_name:"支付方式",type:"类型",add:"添加支付方式",edit:"编辑支付方式",save:"保存支付方式",saved:"支付方式已成功保存",settings:"设置",gasTip:"使用 {method} 支付需保证账户在 {chain} 链上有余额支付手续费",recharge:"扫码充值",props:{type:"类型",confirmation:"确认",recurring:"重复支持",refund:"退款支持",dispute:"纠纷支持",currencies:"货币支持",explorer_host:"区块浏览器",balance:"余额"},name:{label:"名称",tip:"面向消费者"},description:{label:"描述",tip:"不向消费者展示"},stripe:{dashboard:{label:"仪表板 URL",tip:"用于生成指向 Stripe 仪表板的链接"},publishable_key:{label:"可发布密钥",tip:"可发布密钥,请查看仪表板 > 开发人员 > API密钥"},secret_key:{label:"秘密密钥",tip:"秘密密钥,请查看仪表板 > 开发人员 > API密钥"},webhook_signing_secret:{label:"钩子签名密钥",tip:"钩子签名密钥,请查看仪表板 > 开发人员 > 钩子 > 签名密钥"},webhookHint:"若无法接收 Webhook 事件,可手动在环境变量配置 STRIPE_WEBHOOK_SECRET",configureEnv:"前往配置"},arcblock:{chain_id:{label:"链 ID",tip:"仅是名称"},api_host:{label:"API 地址",tip:"发送交易的 API 端点"},explorer_host:{label:"区块浏览器",tip:"查看交易详情的地址"}},ethereum:{chain_id:{label:"链 ID",tip:"必须是有效的EVM链ID,通常是一个整数,https://chainlist.org"},api_host:{label:"RPC 端点",tip:"发送交易的RPC端点"},explorer_host:{label:"区块浏览器",tip:"查看交易详情的区块浏览器"},native_symbol:{label:"货币符号",tip:"链上主货币符号"},confirmation:{label:"确认区块数",tip:"交易标记为确认需要的区块数"}},evm:{checking:"正在检查连接...",connected:"连接成功",connectionError:"连接失败",blockHeight:"区块高度",rpcStatus:"RPC 状态"},base:{chain_id:{label:"链 ID",tip:"必须是有效的EVM链ID,通常是一个整数,https://chainlist.org"},api_host:{label:"RPC 端点",tip:"发送交易的RPC端点"},explorer_host:{label:"区块浏览器",tip:"查看交易详情的区块浏览器"},native_symbol:{label:"货币符号",tip:"链上主货币符号"},confirmation:{label:"确认区块数",tip:"交易标记为确认需要的区块数"}},google_play:{package_name:{label:"应用包名",tip:"例如 com.example.app,在 Play Console 中配置"},service_account_json:{label:"服务账号 JSON",tip:"从 Google Cloud Console 下载的 service account credentials JSON,整段粘贴",invalidJson:"不是合法的 JSON",missingFields:"JSON 缺少 client_email 或 private_key 字段",detectedClient:"识别到客户端"},pubsub_topic_name:{label:"Pub/Sub 主题名(可选)",tip:"projects/<project-id>/topics/<topic-name>,用于接收 RTDN"}},app_store:{bundle_id:{label:"应用 Bundle ID",tip:"例如 com.example.app,在 App Store Connect 中配置"},environment:{label:"环境",tip:"StoreKit 2 JWS 中携带的 environment 必须与此匹配",production:"正式环境",sandbox:"沙盒环境"},shared_secret:{label:"Shared Secret(StoreKit 1 用)",tip:"App-Specific Shared Secret,用于 legacy receipt 校验。StoreKit 2 JWS 不需要。在 App Store Connect → App Information → App-Specific Shared Secret"},serverApi:{heading:"Server API 凭据(可选)",tip:"StoreKit 2 JWS 校验不需要凭据;只在调用 App Store Server API 查询订阅状态时使用。三项需同时填写。"},issuer_id:{label:"Issuer ID",tip:"App Store Connect API 的 Issuer ID"},key_id:{label:"Key ID",tip:"App Store Connect API 的 Key ID"},private_key_pem:{label:"私钥 (.p8 内容)",tip:"从 App Store Connect 下载的 .p8 文件内容,整段粘贴"}}},paymentCurrency:{name:"支付货币",add:"添加货币",edit:"编辑货币",save:"保存货币",saved:"货币已成功保存",delete:"删除货币",deleteConfirm:"确定要删除此货币吗?一旦删除,将无法恢复",deleted:"货币已成功删除",quickAdd:"快速添加已支持的货币",searchToken:"搜索货币",orManualInput:"或在下方手动填写货币信息",logo:{label:"Logo",tip:"在支付页面显示"},contract:{label:"合约地址",tip:"用于获取代币符号、小数位数和其他信息"}},event:{empty:"没有事件",view:"查看事件",data:"事件数据",webhooks:"钩子调用",type:"类型",pendingWebhooks:"待处理的钩子",noAttempts:"无调用记录",retry:"重试",retrying:"重试中...",retryOptions:{title:"重试 Webhook",confirmMessage:"确定要重试此 webhook 吗?这将向 webhook 端点发送另一个请求。",success:"Webhook 已安排重试",error:"重试 webhook 失败"},response:"响应",request:"请求",eventData:"事件数据",events:{dailyEventCount:"每日事件数量",dailyTotalValue:"每日总使用量",eventName:"事件名称",value:"值",customer:"客户",subscription:"订阅",reportTime:"上报时间",count:"共 {count} 个事件",empty:"暂无事件数据",emptyTip:"当有事件上报时,数据将显示在这里",filterByCustomer:"按客户筛选",eventCount:"事件数量",totalValue:"总使用量"}},invoice:{view:"查看账单",name:"账单",from:"账单来自",empty:"没有账单",status:{active:"生效中",paid:"已支付",succeeded:"成功"},number:"账单编号",description:"账单说明",dueDate:"截止日期",finalizedAt:"已完成时间",paidAt:"支付日期",summary:"摘要",billingContextNote:"本账单金额基于结算时的实时价格计算。",dynamicPricingNote:"本账单使用动态定价并锁定了汇率。",billTo:"开具给",billing:"计费方式",download:"下载PDF",edit:"编辑账单",duplicate:"复制账单",retryUncollectible:{title:"重新收款",tip:"确定要重新尝试收取该笔账单吗?系统将再次尝试向客户发起扣款。",success:"重新收款请求已提交"},attention:"未完成的账单",returnStake:{title:"退还质押",tip:"您确定要退还质押吗?此操作将立即退还质押给客户。",success:"质押退还申请已提交"},void:{title:"作废账单",tip:"您确定要作废此账单吗?此操作将立即作废账单。",success:"账单作废成功"}},vendor:{create:"创建供应商",edit:"编辑供应商",delete:"删除供应商",save:"保存供应商",saved:"供应商保存成功",test:"测试",testConnection:"测试连接",testConnectionTip:'确定要测试供应商 "{name}" 的连接吗?',testConnectionSuccess:"连接测试成功",testConnectionFailed:"连接测试失败",testSuccess:"连接测试成功",testAfterSave:"供应商保存成功。您可以测试连接以验证配置是否正确。",testToEnable:"供应商保存成功。请测试连接以启用供应商。",enabled:"已启用",disabled:"未启用",addressCheckFailed:"地址检测失败,启用状态下无法保存",updateSuccess:"供应商更新成功",testFailed:"连接测试失败 (状态码: {status})",testError:"连接测试失败 - 网络错误",vendorKeyInvalid:"供应商类型只能包含小写字母、数字和下划线",deleteTitle:"删除供应商",deleteContent:'确定要删除供应商 "{name}" 吗?此操作无法撤销。',deleteTip:'确定要删除供应商 "{name}" 吗?此操作无法撤销。',activate:"激活供应商",activateTip:'确定要激活供应商 "{name}" 吗?',deactivate:"停用供应商",deactivateTip:'确定要停用供应商 "{name}" 吗?',name:"供应商名称",nameRequired:"供应商名称是必填项",vendorType:"供应商类型",vendorTypeRequired:"供应商类型是必填项",didnames:"DID Names",launcher:"Launcher",vendorKey:"供应商标识",vendorKeyRequired:"供应商标识是必填项",vendorKeyHelp:"供应商的唯一标识符",description:"描述",displayNameRequired:"前台展示名称是必填项",displayNameHelp:"此数据会展示到付款成功后的安装界面",appUrl:"应用地址",appUrlRequired:"应用地址是必填项",appUrlInvalid:"请输入有效的 URL,以 http:// 或 https:// 开头",appUrlHelp:"供应商应用的基础 URL 地址",vendorDid:"供应商 DID",vendorDidInvalid:"请输入有效的 DID",vendorDidHelp:"供应商的可选 DID 地址",webhookPath:"Webhook路径",webhookPathInvalid:"请输入以/开头的有效路径",webhookPathHelp:"可选的webhook回调路径(如:/webhooks/status)",blockletMetaUrl:"Blocklet元数据URL",blockletMetaUrlRequired:"Blocklet元数据URL是必填项",blockletMetaUrlInvalid:"请输入有效的URL,以http://或https://开头",blockletMetaUrlHelp:"必填的blocklet元数据URL,用于获取应用信息",commission:"分成",commissionRate:"分成比例",commissionRateRequired:"分成比例是必填项",commissionRateMin:"分成比例必须大于或等于0",commissionRateMax:"分成比例过高",commissionType:"分成类型",commissionRateHelp:"分成比例,以百分比形式",commissionAmountHelp:"固定分成金额",percentage:"百分比",fixedAmount:"固定金额",active:"启用",inactive:"禁用",basicInfo:"基本信息",apiConfig:"API配置",commissionConfig:"分成配置",status:"状态",brokerDID:"平台 DID",brokerPublicKey:"平台公钥"},subscription:{view:"查看订阅",name:"订阅",empty:"没有订阅",status:{active:"生效中",paid:"已支付",succeeded:"成功"},viewAll:"查看历史订阅",noActiveEmpty:"您当前没有服务中的订阅,您可以选择查看历史订阅",includedServices:"包含的服务",serviceHome:"访问服务主页",serviceDashboard:"访问服务管理后台",product:"产品",attention:"将过期的订阅",collectionMethod:"计费",channel:"渠道",currentPeriod:"当前周期",iap:{googlePlayTitle:"Google Play 订阅详情",appStoreTitle:"App Store 订阅详情",purchaseToken:"购买令牌",orderId:"订单号",productId:"产品 ID",originalTransactionId:"原始交易 ID",transactionId:"本次交易 ID",expiryTime:"过期时间",environment:"环境"},trialingPeriod:"试用期",trialEnd:"试用期结束于 {date}",willEnd:"将于 {date} 结束",ended:"结束于 {date}",renew:"下次续费: {date}",discount:"折扣",activeDiscount:"当前优惠",startedAt:"开始于",nextInvoice:"下次账单时间",nextInvoiceAmount:"下次账单金额",nextInvoiceAmountTip:"下次账单金额为预估,最终金额会根据实际使用情况结算。",itemId:"订阅项目ID",update:"更新订阅",resume:"恢复付款",resumeTip:"您确定要继续收款吗?此订阅的未来账单将继续付款。",paymentAddress:"扣费地址",currentBalance:"扣款账户余额",insufficientBalance:"余额不足,立即充值",cancel:{schedule:"计划取消",title:"取消订阅",required:"必须指定自定义取消时间",will:"于 {date} 取消",done:"已取消",at:{title:"取消",now:"立即取消({date})",current_period_end:"本周期结束后({date})",custom:"自定义取消日期",timeError:"取消时间必须在当前周期内"},refund:{title:"退款",none:"仅取消不退款",last:"退款最近付款的全部 {total}{symbol}",proration:"退款最近付款的未使用部分 {unused}/{total}{symbol}"},staking:{title:"质押",none:"不退还 / 罚没质押",proration:"退还剩余部分 {unused}{symbol}",slash:"罚没剩余部分 {unused}{symbol}",slashReason:"罚没原因",slashTip:"该订阅剩余的质押部分 {unused}{symbol} 将被罚没, 请确认是否继续?",slashTitle:"罚没质押"},comment:{title:"原因",placeholder:"请填写取消订阅的原因"}},pause:{title:"暂停付款",required:"必须指定自定义恢复时间",type:{title:"持续时间",never:"无限期暂停",custom:"暂停到自定义日期"},behavior:{title:"账单行为",keep_as_draft:"保留账单为草稿",keep_as_draft_tip:"对于目前提供服务但等待收款的企业。",mark_uncollectible:"将账单标记为不可收款",mark_uncollectible_tip:"对于目前提供免费服务的企业。",void:"作废账单",voidTip:"对于目前不提供服务的企业。"},until:{never:"付款暂停",custom:"付款暂停直到{date}"}},usage:{title:"使用记录",current:"当前周期的使用记录",range:"周期使用记录({start} - {end})",view:"查看使用情况",vary:"随使用情况变化",used:"已使用单位",cycle:"统计周期"},batchPay:{button:"批量付款"},payerAddress:"扣费地址",noPaymentMethod:"未绑定",bindPaymentMethod:"立即绑定",bindPaymentMethodFirst:"请先绑定支付方式后再恢复订阅",noPaymentMethodWarning:"当前订阅未绑定支付方式,请尽快绑定,否则订阅将在当前周期结束时自动取消。",changePayer:{btn:"变更",stripe:{linkType:"Stripe Link",bankAccount:"银行账户"},connect:{title:"变更扣费地址",success:"扣费地址变更成功",error:"扣费地址变更失败"}}},customer:{view:"查看客户",edit:"编辑信息",spent:"花费金额",refund:"退款金额",stake:"质押金额",dispute:"争议金额",token:"链上余额",due:"欠款金额",name:"名称",email:"电子邮件",phone:"电话",invoicePrefix:"账单前缀",googlePlayUuid:"Google Play UUID",appStoreUuid:"App Store UUID",balance:"余额 ({currency})",summary:{refund:"退款金额",spent:"花费金额",due:"欠款金额",stake:"质押金额",stats:"统计",balance:"余额"},address:{label:"地址",country:"国家",state:"州或省份",city:"城市或城镇",line1:"地址",line2:"详细地址",postal_code:"邮政编码"},creditGrants:{tab:"信用额度",title:"信用额度",summary:"额度汇总",noGrants:"未找到信用额度",grantDetail:"信用额度详情",overview:"概览",overviewDescription:"监控所有货币的信用余额、使用情况和未偿债务。",availableBalance:"可用余额",usage:"使用情况",viewInvoice:"查看账单",viewGrants:"查看额度",viewUsage:"查看使用情况",recentActivity:"最近活动",quickStats:"快速统计",activeGrants:"活跃额度",totalCreditValue:"总信用价值",outstandingDebt:"未偿债务",buyCredits:"购买额度",viewAllActivity:"查看所有活动",creditBalance:"信用余额",totalAmount:"总额度",pendingAmount:"欠费额度",grantCount:"额度数量",noGrantsDescription:"您还没有任何信用额度",relatedGrants:"信用额度",category:"分类",status:{granted:"生效中",pending:"待生效",expired:"已过期",depleted:"已耗尽",voided:"已作废"},originalAmount:"原始金额",grantId:"额度ID",grants:"额度",addCredit:"添加额度",viewDetails:"查看详情"}},passport:{intro:"管理应用通行证的付款设置,必须同时设置商品和购买入口",payLink:"支付入口",payPreview:"支付预览",preview:"支付页面预览",assign:"分配给通行证",assignTip:"将此支付链接分配给所选通行证,以使其可供购买",unassign:"重置购买配置",unassignTip:"确认要将购买入口和关联商品配置清空?",assignError:"必须选择一个要分配的通行证"},webhookEndpoint:{hosted:"托管的钩子",add:"添加钩子",addTip:"设置钩子端点以接收来自",listen:"监听",version:"API版本",attempts:"钩子调用",url:{label:"URL",description:"端点URL"},description:{label:"描述",description:"此端点用于何种目的的可选描述。"},events:{label:"选择要监听的事件",description:""}},refund:{name:"退款",attention:"失败的退款",view:"查看退款详情",status:{active:"生效中",paid:"已支付",succeeded:"成功"}},usageRecord:{empty:"用量记录为空",add:{label:"添加用量记录",success:"添加用量记录成功",quantity:"数量"}},donate:{title:"打赏配置",mountLocation:"名称",component:"组件",description:"描述",status:{title:"启用状态",active:"启用",inactive:"关闭",inactiveTip:"关闭打赏后,打赏按钮将不再显示,用户无法使用打赏功能,请确认是否关闭?",inactiveTitle:"关闭打赏",activeSuccess:"打赏功能已启用",inactiveSuccess:"打赏功能已关闭"},editTitle:"编辑打赏配置",updateSuccess:"打赏配置已更新",amountSettings:"金额设置",presets:"预设金额",presetsHelper:"请输入预设金额,用英文逗号分隔(例如:1,5,10)",preset:"默认金额",presetHelper:"默认选中的金额(必须是预设金额之一)",custom:"允许自定义金额",minimum:"最小金额",maximum:"最大金额",amountRange:"金额范围:{min} - {max}",customAmount:"自定义金额",buttonSettings:"打赏按钮设置",btn:{text:"按钮文本",helper:"设置打赏按钮显示的文字",preview:"按钮预览"},dialog:{preview:"打赏弹窗预览",confirmButton:"确认打赏 {amount}"},previewTitle:"实时预览",validation:{invalidPreset:"默认金额必须是预设金额之一",invalidRange:"最小金额必须小于最大金额",invalidAmount:"金额必须在允许范围内"},historyType:{title:"打赏记录显示方式",avatar:"头像墙",list:"列表"},intro:"配置打赏按钮和打赏弹窗的展示效果,完成配置后打赏功能将自动生效。",usage:{viewExample:"查看使用示例",title:"打赏组件使用示例",description:"要使用打赏功能,您需要先在组件中正确配置 PaymentProvider 和 DonateProvider。以下是一个基本示例:",note:"注意:mountLocation 必须是唯一的,用于标识打赏实例。配置完成后,该实例将出现在列表中,您可以进行进一步的设置。"}},vaultConfig:{title:"冷钱包配置",description:"启用冷钱包后,系统会在热钱包余额超过阈值时,自动将多余资金转移至安全的离线存储。这种隔离机制将大部分资产与在线环境分离,有效抵御网络攻击,显著提升资金安全性。",learnMore:"了解更多",goToConfig:"前往系统配置",notConfigured:"冷钱包尚未配置",configureFirst:"请先#前往仪表盘#配置冷钱包地址,然后再设置各币种参数。",ownerOnly:"仅拥有所有者权限的管理员可修改冷钱包设置。",permissionRequired:"需要所有者权限",enabled:"状态",enabledYes:"已启用",enabledNo:"未启用",depositThreshold:"存入阈值",withdrawThreshold:"提取阈值",bufferThreshold:"差额阈值",bufferThresholdHelp:"只有当超出存入阈值的金额达到差额阈值时,才会触发归集操作.",bufferThresholdInvalid:"差额阈值不能小于0",edit:"配置",enable:"启用",editTitle:"配置 {currency} 冷钱包设置",enableTitle:"为 {currency} 启用冷钱包",enableVault:"启用冷钱包",enableVaultHelp:"启用冷钱包后,超额资金将自动转入冷钱包,提款超出阈值需管理员审核,确保资产安全与风控。",depositThresholdHelp:"当热钱包余额超过此金额时,多余资金将自动转入冷钱包。",withdrawThresholdHelp:"当单笔提款超过此金额时,需由冷钱包管理员审核并批准。",notConfig:"未配置",noLimit:"无限制",withdrawThresholdNoLimit:"0 表示无提款限制",depositThresholdRequired:"存入阈值必须大于0",withdrawThresholdInvalid:"提款阈值不能小于0",enableSuccess:"{currency} 冷钱包已启用",disableSuccess:"{currency} 冷钱包已关闭",updateSuccess:"{currency} 冷钱包设置已更新",depositConfirmTitle:"转入冷钱包",depositConfirmMessage:"{currency}余额已超过阈值,是否立即转入冷钱包?",depositQueued:"申请转入冷钱包成功,请稍后查看结果",depositFailed:"申请转入冷钱包失败",appBalance:"热钱包余额"},creditGrants:{tab:"信用额度",title:"额度",summary:"额度汇总",noGrants:"未找到信用额度",grantDetail:"信用额度详情",overview:"额度概览",overviewDescription:"监控所有货币的信用余额、使用情况和未偿债务。",availableBalance:"可用余额",usage:"使用情况",viewGrants:"查看额度",viewUsage:"查看使用情况",recentActivity:"最近活动",quickStats:"快速统计",activeGrants:"活跃额度",totalCreditValue:"总信用价值",outstandingDebt:"未偿债务",buyCredits:"购买额度",viewAllActivity:"查看所有活动",creditBalance:"信用余额",totalAmount:"总额度",pendingAmount:"欠费额度",grantCount:"额度数量",noGrantsDescription:"您还没有任何信用额度",status:{granted:"生效中",pending:"待生效",expired:"已过期",depleted:"已耗尽",voided:"已作废"},originalAmount:"原始金额",grantId:"额度ID",grants:"额度",addCredit:"添加额度",viewDetails:"查看详情"},creditTransactions:{tab:"账单",title:"额度账单",summary:"账单汇总",noTransactions:"未找到额度账单",totalTransactions:"总账单数",totalCreditUsed:"总使用额度",transactionDate:"交易时间"},exchangeRateProvider:{title:"汇率数据源",subtitle:"管理动态定价使用的汇率数据源",medianStrategyNote:"系统会自动从多个数据源计算汇率。只有当数据源长期异常或需要临时禁用时才需要在这里处理。",disableConfirmTitle:"确认停用该数据源?",disableConfirmMessage:"停用后可能影响动态计价支付流程,确定要停用吗?",table:{name:"名称",participation:"参与计算",health:"健康度",recentActivity:"最近活动",trustLevel:"可信度",trustLevelTip:"表示可信度与参与资格,不表示优先使用顺序",enabled:"启用",lastUpdate:"最近更新:{time}",failures24h:"24h 失败次数:{count}"},participation:{included:"已参与",excluded:"已排除"},health:{active:"健康",degraded:"不稳定",paused:"异常",inactive:"异常"},status:{active:"正常",degraded:"降级",paused:"已暂停",inactive:"停用"},create:{title:"新增数据源",primaryAction:"新增汇率数据源"},edit:{title:"编辑 {name}",name:"名称",nameHelp:"数据源的唯一标识",nameRequired:"名称必填",type:"数据源类型",typeHelp:"数据源类型。创建后不可修改。",baseUrl:"接口地址(可选)",baseUrlHelp:"自定义接口地址,用于代理或自建实例。默认:{defaultUrl}",apiKey:"API Key",apiKeyHelp:"访问数据源的 API 密钥。",apiKeyLinkText:"API Key 管理地址:",apiKeyLinkAction:"CoinMarketCap 账户",testConnection:"测试连接",testing:"测试中...",testSuccess:"连接成功({symbol}/USD:{rate},{time}ms)",testFailed:"连接失败:{error}",enabled:"启用",priority:"优先级",priorityHelp:"数字越小优先级越高。系统按优先级顺序使用数据源。",status:"状态",statusHelp:'设置为"已暂停"可临时禁用此数据源。',pausedReason:"暂停原因",pausedReasonHelp:"说明为何暂停此数据源(可选)。"}}},empty:{image:"无图片",refunds:"没有退款记录",invoices:"没有账单",invoiceItems:"没有账单明细",subscriptions:"没有订阅记录",customers:"没有客户",products:"没有产品",payouts:"没有出款记录",paymentLinks:"没有支付链接",paymentMethods:"没有支付方式",pricingTables:"没有定价表",paymentCurrencies:"没有货币",webhooks:"没有钩子",events:"没有事件",records:"没有找到匹配的记录",payments:"没有付款记录",prices:"没有价格",pricing:"您还没有设置定价,您可以添加它",summary:"没有摘要"},customer:{subscription:{manage:"管理订阅",cancel:"取消订阅",title:"订阅"},invoiceHistory:"历史账单",product:{empty:"没有订阅产品"},credit:{recharge:"购买额度",autoRecharge:"自动充值",unsupported:"暂不支持购买额度"},recharge:{title:"充值",amount:"金额",submit:"提交",unsupported:"暂不支持该货币充值,请选择其他货币",receiveAddress:"收款地址",view:"查看订阅",success:"充值成功",estimatedDuration:"预计可用 {duration} {unit}",custom:"自定义",intervals:"个周期",history:"充值记录",relatedSubscriptions:"关联订阅",rechargeTooltip:"点击充值余额"},delegation:{title:"检测到你未完成账户的授权,为了不影响订阅的扣费,请尽快完成授权",btn:"支付授权",success:"授权成功",error:"授权失败"},overdraftProtection:{title:"订阅守护",setting:"配置订阅守护",learnMore:"点击了解更多关于订阅守护",tip:"为避免因扣费失败中断服务,您可以通过质押开启订阅守护。按时付款不会收取额外费用,请及时付清账单,若可用质押不足或者超期未付,我们将从质押中扣除并收取服务费",enabled:"已启用",disabled:"未启用",returnRemaining:"退还剩余质押",returnRemainingTip:"退还剩余质押后,订阅守护服务将自动关闭,请确认操作。",applyRemainingSuccess:"质押退还申请成功",remaining:"您当前剩余可用质押:{amount} {symbol}, 每周期预计需质押:{estimateAmount} {symbol}。",noRemaining:"当前无质押,为确保订阅守护服务的正常使用,请至少质押 {estimateAmount} {symbol}。",remainingNotEnough:"当前存在未支付的账单,总计 {due} {symbol},如果不支付,您当前剩余质押将无法覆盖下期账单,剩余可用质押:{unused} {symbol},请质押至少 {min} {symbol}。",due:"请先支付欠款",insufficient:"额度不足,下期账单将无法使用订阅守护服务, 请添加额度",insufficientTip:"订阅守护服务额度不足,请尽快质押保证订阅守护服务的正常使用。",intervals:"个周期",estimatedDuration:"预计可用 {duration} {unit}",rule:"规则:N * ( P + Fee )",ruleTip:"N 为周期数, P 为订阅账单费用, Fee 为订阅守护服务费用,单次费用为 {gas} {symbol}",min:"质押金额不得小于 {min} {symbol}",settingSuccess:"配置更新成功",settingError:"配置更新失败",openSuccess:"订阅守护已开启",closeSuccess:"订阅守护已关闭",keepStake:"不退还质押",returnStake:"退还剩余质押",stake:"质押",address:"质押账户",total:"总质押:{total} {symbol},",disableConfirm:"您当前有未支付的账单,请先付清账单。",open:"开启订阅守护",payerAddress:"付款账户",stakingAddress:"质押地址"},unpaidInvoicesWarning:"您当前有未支付的账单,请先付清账单。",unpaidInvoicesWarningTip:"您当前有未支付的账单,请及时付清。",pendingAmountWarningTip:"您有 {amount} {symbol} 的使用费用因额度不足无法处理,请及时充值。",invoice:{relatedInvoice:"关联账单",donation:"打赏记录",creditsInfo:"总共包含 {amount}",appliedDiscounts:"已应用优惠",priceChanged:"汇率已变动 {percent}%。支付金额将会更新,是否继续?",paymentCancelled:"支付已取消",paymentMethodChanged:"支付方式已更换",priceChangeTitle:"价格已变动",priceChangeDescription:"汇率{direction}了 {percent}%,支付金额将会更新。",currentPaymentMethod:"当前支付方式",otherPaymentMethods:"或使用其他方式支付",confirmAndPay:"确认并支付",switchAndPay:"切换并支付",current:"当前"},payout:{empty:"没有收款记录",payer:"付款方",receiver:"收款方",payTxHash:"交易详情",viewReference:"查看打赏原文",title:"收款记录"},pastDue:{warning:"您有欠费账单,请及时付款以保持服务正常运行",invoices:"欠费账单",payNow:"立即付款",alert:"您有欠费账单需要处理,请及时付款以避免服务中断",title:"结清欠费账单"},quote:{title:"价格锁定记录",noQuotes:"此账单没有价格锁定记录",id:"报价 ID",pricingDetails:"定价详情",baseAmount:"基础金额",exchangeRate:"汇率",consensusMethod:"汇率算法",referenceRate:"参考汇率:1 {symbol} ≈ ${rate}",quotedAmount:"锁定金额",providerInfo:"汇率来源",provider:"数据源",rateTimestamp:"汇率时间",slippage:"滑点",lifecycle:"生命周期",expiresAt:"过期时间",riskInfo:"风险信息",deviation:"价格偏差",anomalyDetected:"检测到异常",degraded:"降级",status:{active:"活跃",used:"已使用",paid:"已支付",expired:"已过期",cancelled:"已取消",failed:"失败"}}},integrations:{description:"用于配置和管理 Payment Kit 与你应用之间的集成方式。",basicFeatures:"基础功能",advancedFeatures:"高级功能",features:{products:{title:"创建产品",intro:"创建和管理您的产品或服务"},paymentLinks:{title:"支付链接",intro:"创建可分享的支付链接,快速完成收款"},pricingTables:{title:"定价表",intro:"为您的产品创建美观的定价表"},metering:{title:"计量与额度",intro:"使用计量器跟踪用量,并通过额度套餐售卖 Credits",dialog:{title:"如何开启 Credit 计费",description:"Credit 计费模式让您可以跟踪用量并基于消费向客户收费。按照以下步骤开始配置:",steps:{step1:{title:"创建计量器用于跟踪用量事件",description:"设置计量器来监控 API 调用、数据使用量或应用中任何可测量的活动。"},step2:{title:"创建 Credits 购买套餐和定价",description:"定义客户可以购买的额度套餐,支持灵活的定价模式和有效期设置。"},step3:{title:"创建支付链接并分享给用户",description:"生成可分享的支付链接,让客户轻松购买额度套餐。"},step4:{title:"集成并上报 Credits 用量",description:"使用我们的 SDK 上报使用事件,自动从客户余额中扣除额度。"}},docText:"查看 Credit 计费指南"}},promotions:{title:"促销与优惠",intro:"创建优惠券与促销码,提升转化率"},donate:{title:"打赏功能",intro:"使用 <CheckoutDonate /> 组件为应用添加打赏按钮"},paymentMethods:{title:"支付方式",intro:"配置多种支付方式和货币支持"},api:{title:"API 集成",intro:"使用我们的 JavaScript SDK 实现自定义解决方案",link:"https://www.npmjs.com/package/@blocklet/payment-js"}},viewDocs:"查看文档"}}),kD=RE({zh:NE,en:ME},O0),BE=z0({fallbackLocale:"en"},kD),Ww=BE,ga=window.blocklet?.cloudflareWorker?kE:wE,UE=Ne.lazy(()=>Ht(()=>import("./home-ZNJREzbw.js"),[])),OE=Ne.lazy(()=>Ht(()=>import("./index-BdbLl6St.js"),[])),no=Ne.lazy(()=>Ht(()=>import("./index-Dju8k6mq.js"),[])),zE=Ne.lazy(()=>Ht(()=>import("./index-DY-g0BPU.js"),[])),PE=Ne.lazy(()=>Ht(()=>import("./detail-C--ATvwm.js"),[])),qE=Ne.lazy(()=>Ht(()=>import("./past-due-C3PtU8uo.js"),[])),LE=Ne.lazy(()=>Ht(()=>import("./detail-DOcm4Kqg.js"),[])),a0=Ne.lazy(()=>Ht(()=>import("./embed-ClYNqZbf.js"),[])),IE=Ne.lazy(()=>Ht(()=>import("./change-plan-CtXvsIDw.js"),[])),$E=Ne.lazy(()=>Ht(()=>import("./change-payment-j5UC8_h0.js"),[])),VE=Ne.lazy(()=>Ht(()=>import("./detail-DTXDMIR9.js"),[])),HE=Ne.lazy(()=>Ht(()=>import("./detail-BJ-hl5PK.js"),[])),YE=Ne.lazy(()=>Ht(()=>import("./subscription-BX00k6FU.js"),[])),GE=Ne.lazy(()=>Ht(()=>import("./detail-Dzt5tfyZ.js"),[])),Rl=Ne.lazy(()=>Ht(()=>import("./index-DNobX-Tr.js"),[])),KE=Ne.lazy(()=>Ht(()=>import("./account-DrsnH5wP.js"),[]));function QE(){const a=ds();V.useEffect(()=>{const r=o=>{if(o.button!==0||o.metaKey||o.ctrlKey||o.shiftKey||o.altKey)return;const s=o.target?.closest("a");if(!s)return;const f=s.getAttribute("href");if(!f||s.target&&s.target!==""&&s.target!=="_self"||s.hasAttribute("download")||/^[a-z]+:/i.test(f)&&!/^https?:/i.test(f)||f.startsWith("#"))return;let m;try{m=new URL(f,window.location.href)}catch{return}if(m.origin!==window.location.origin)return;o.preventDefault();const c=window?.blocklet?.prefix||"/";let h=m.pathname+m.search+m.hash;c!=="/"&&h.startsWith(c.replace(/\/$/,""))&&(h=h.slice(c.replace(/\/$/,"").length)||"/"),a(h)};return document.addEventListener("click",r),()=>document.removeEventListener("click",r)},[a])}function ZE(){return QE(),u.jsx(FE,{children:u.jsx(mC,{FallbackComponent:SE,onReset:()=>window.location.reload(),children:u.jsx(V.Suspense,{fallback:u.jsx(x0,{children:u.jsx(gr,{})}),children:u.jsxs(aC,{children:[u.jsx(jt,{path:"/",element:u.jsx(UE,{})}),u.jsx(jt,{path:"/checkout/:action/:id",element:u.jsx(OE,{})}),u.jsx(jt,{path:"/admin",element:u.jsx(no,{})},"admin-index"),",",u.jsx(jt,{path:"/admin/:group",element:u.jsx(no,{})},"admin-tabs"),",",u.jsx(jt,{path:"/admin/:group/:page",element:u.jsx(no,{})},"admin-sub"),",",u.jsx(jt,{path:"/admin/:group/:page/:id",element:u.jsx(no,{})},"admin-detail"),",",u.jsx(jt,{path:"/admin/:group/:page/:subpage/:id",element:u.jsx(no,{})},"admin-nested"),",",u.jsx(jt,{path:"/admin/*",element:u.jsx(no,{})},"admin-fallback"),",",u.jsx(jt,{path:"/integrations",element:u.jsx(Rl,{})},"integrations-index"),u.jsx(jt,{path:"/integrations/:group",element:u.jsx(Rl,{})},"integrations-tabs"),u.jsx(jt,{path:"/integrations/:group/:page",element:u.jsx(Rl,{})},"integrations-sub"),u.jsx(jt,{path:"/integrations/*",element:u.jsx(Rl,{})},"integrations-fallback"),u.jsx(jt,{path:"/customer",element:u.jsx(ga,{children:u.jsx(zE,{})})},"customer-home"),u.jsx(jt,{path:"/customer/subscription/:id",element:u.jsx(ga,{children:u.jsx(LE,{})})},"customer-subscription"),u.jsx(jt,{path:"/customer/subscription/:id/change-plan",element:u.jsx(ga,{children:u.jsx(IE,{})})},"customer-subscription-change-plan"),u.jsx(jt,{path:"/customer/subscription/:id/change-payment",element:u.jsx(ga,{children:u.jsx($E,{})})},"customer-subscription-change-payment"),u.jsx(jt,{path:"/customer/subscription/:id/recharge",element:u.jsx(ga,{children:u.jsx(YE,{})})},"customer-recharge"),u.jsx(jt,{path:"/customer/recharge/:currencyId",element:u.jsx(ga,{children:u.jsx(KE,{})})},"customer-balance-recharge"),u.jsx(jt,{path:"/customer/embed/subscription",element:u.jsx(a0,{})},"customer-embed"),u.jsx(jt,{path:"/embed/customer/subscription",element:u.jsx(a0,{})},"subscription-embed"),u.jsx(jt,{path:"/customer/invoice/past-due",element:u.jsx(ga,{children:u.jsx(qE,{})})},"customer-due"),u.jsx(jt,{path:"/customer/invoice/:id",element:u.jsx(ga,{children:u.jsx(PE,{})})},"customer-invoice"),u.jsx(jt,{path:"/customer/payout/:id",element:u.jsx(ga,{children:u.jsx(GE,{})})},"customer-payout"),u.jsx(jt,{path:"/customer/credit-grant/:id",element:u.jsx(ga,{children:u.jsx(VE,{})})},"customer-credit-grant"),u.jsx(jt,{path:"/customer/credit-transaction/:id",element:u.jsx(ga,{children:u.jsx(HE,{})})},"customer-credit-transaction"),u.jsx(jt,{path:"/customer/*",element:u.jsx(Zy,{to:"/customer"})},"customer-fallback"),",",u.jsx(jt,{path:"*",element:u.jsx(Zy,{to:"/"})})]})})})})}const XE=Jx(ZE);function WE(){const a=window?.blocklet?.prefix||"/";return DD(),u.jsx(dC,{translations:kD,fallbackLocale:"en",children:u.jsx(eC,{children:u.jsx(vA,{children:u.jsx(AE,{serviceHost:_E(a),useSocket:!window.blocklet?.cloudflareWorker,protectedRoutes:["/admin/*","/customer/*","/integrations/*"].map(r=>Dt(a,r)),children:u.jsx(nC,{basename:a,children:u.jsx(XE,{})})})})})})}const JE=uC.createRoot(document.getElementById("app"));JE.render(u.jsx(WE,{}));export{M_ as $,Mw as A,bD as B,Yl as C,Lf as D,hs as E,K0 as F,jg as G,mw as H,Ul as I,dw as J,aw as K,hr as L,CS as M,gw as N,Gg as O,sD as P,yA as Q,Vf as R,Zg as S,tm as T,tu as U,AS as V,RS as W,ba as X,au as Y,US as Z,N_ as _,_n as a,ns as a$,fD as a0,lD as a1,UA as a2,dr as a3,BS as a4,uA as a5,uw as a6,vw as a7,Ja as a8,I0 as a9,wf as aA,Lw as aB,xS as aC,e0 as aD,Qg as aE,Kg as aF,pw as aG,vA as aH,Gw as aI,Aw as aJ,_w as aK,tA as aL,kw as aM,iu as aN,nu as aO,Rn as aP,rw as aQ,un as aR,zi as aS,X_ as aT,dA as aU,Il as aV,Nn as aW,Xa as aX,ii as aY,fr as aZ,Rw as a_,Bi as aa,Wa as ab,Nl as ac,J1 as ad,Nw as ae,Bw as af,nE as ag,aE as ah,rE as ai,oE as aj,sE as ak,Uw as al,iE as am,Ow as an,zw as ao,Pw as ap,Iw as aq,AD as ar,qw as as,Yf as at,Vw as au,$w as av,Hw as aw,Yw as ax,kl as ay,dD as az,Xw as b,ow as b0,hw as b1,Ww as b2,jS as b3,cw as b4,yw as b5,If as b6,Cw as b7,aD as b8,iD as b9,rD as ba,xw as bb,Tw as bc,lw as bd,Hg as be,O_ as bf,U_ as bg,Tf as bh,RE as bi,lC as bj,bw as bk,Zw as c,qi as d,ot as e,kg as f,fw as g,nD as h,Ui as i,SS as j,Pt as k,Qn as l,jw as m,Oi as n,sw as o,Fw as p,ln as q,em as r,Vl as s,NS as t,wD as u,Ca as v,bA as w,Hf as x,iw as y,Dw as z};
|