@ic-pay/icpay-widget 0.1.80 → 0.1.81

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/index.js CHANGED
@@ -57,9 +57,9 @@ var Ne=Object.defineProperty;var Ue=Object.getOwnPropertyDescriptor;var s=(o,a,e
57
57
  0%, 100% { opacity: 1; }
58
58
  50% { opacity: 0.7; }
59
59
  }
60
- `;function ee(o,a){if(!o||!a)return;let e=a.primaryColor||void 0,t=a.secondaryColor||void 0,i=(K,E)=>{E&&o.style.setProperty(K,E)};i("--icpay-primary",e),i("--icpay-secondary",t);let r=K=>{if(!K)return null;let E=K.replace("#",""),ce=E.length===3?E.split("").map(Le=>Le+Le).join(""):E,de=parseInt(ce,16),pe=de>>16&255,Oe=de>>8&255,Ie=de&255;return{r:pe,g:Oe,b:Ie}},g=(K=>{let E=r(K);if(!E)return 0;let ce=de=>{let pe=de/255;return pe<=.03928?pe/12.92:Math.pow((pe+.055)/1.055,2.4)};return .2126*ce(E.r)+.7152*ce(E.g)+.0722*ce(E.b)})(e||t)>.6,x=a.surfaceColor||(g?"#f3f4f6":"#1f2937"),Z=a.surfaceAltColor||(g?"#e5e7eb":"#374151"),ae=a.borderColor||(g?"#d1d5db":"#4b5563"),U=a.textColor||(g?"#111827":"#f9fafb"),J=a.accentColor||t||e||(g?"#6b7280":"#9ca3af"),le=a.mutedTextColor||(g?"#6b7280":"#9ca3af");i("--icpay-accent",J),i("--icpay-text",U),i("--icpay-muted",le),i("--icpay-surface",x),i("--icpay-surface-alt",Z),i("--icpay-border",ae)}import{Icpay as Ce}from"@ic-pay/icpay-sdk";var Ae=typeof window<"u";function fe(o,a,e){o&&(e!==void 0?console.log(`[ICPay Widget] ${a}`,e):console.log(`[ICPay Widget] ${a}`))}function c(o){if(!Ae)return{client:{},quoteUsd:async()=>({tokenAmountDecimals:"0"}),sendUsd:async()=>({transactionId:"0",status:"pending"})};fe(o.debug||!1,"Creating SDK with config:",o);let a={publishableKey:o.publishableKey};o.enableEvents!==void 0?a.enableEvents=o.enableEvents:a.enableEvents=!0,o.apiUrl&&(a.apiUrl=o.apiUrl),o.icHost&&(a.icHost=o.icHost),o.actorProvider&&(a.actorProvider=o.actorProvider),o.connectedWallet&&(a.connectedWallet=o.connectedWallet),o.debug!==void 0&&(a.debug=o.debug),fe(o.debug||!1,"Filtered SDK config:",a);try{fe(o.debug||!1,"typeof Icpay:",typeof Ce);let e=new Ce(a);if(Ae){let r=e,n=l=>{r.addEventListener(l,g=>{window.dispatchEvent(new CustomEvent(l,{detail:g?.detail??g}))})};["icpay-sdk-error","icpay-sdk-transaction-created","icpay-sdk-transaction-updated","icpay-sdk-transaction-completed","icpay-sdk-transaction-failed","icpay-sdk-method-start","icpay-sdk-method-success","icpay-sdk-method-error"].forEach(n)}async function t(r,n){return e.calculateTokenAmountFromUSD({usdAmount:r,ledgerCanisterId:n})}async function i(r,n,l){return e.sendFundsUsd({usdAmount:r,ledgerCanisterId:n,metadata:l})}return{client:e,quoteUsd:t,sendUsd:i}}catch(e){throw fe(o.debug||!1,"Error creating SDK:",e),e}}import{LitElement as Ve,html as _,css as He}from"lit";import{customElement as qe,property as Ge,state as I}from"lit/decorators.js";import{IcpayError as Me}from"@ic-pay/icpay-sdk";var w={WALLET_NOT_CONNECTED:"WALLET_NOT_CONNECTED",WALLET_USER_CANCELLED:"WALLET_USER_CANCELLED",WALLET_SIGNATURE_REJECTED:"WALLET_SIGNATURE_REJECTED",INSUFFICIENT_BALANCE:"INSUFFICIENT_BALANCE",NETWORK_ERROR:"NETWORK_ERROR",API_ERROR:"API_ERROR",LEDGER_NOT_FOUND:"LEDGER_NOT_FOUND",TRANSACTION_FAILED:"TRANSACTION_FAILED",TRANSACTION_TIMEOUT:"TRANSACTION_TIMEOUT",UNKNOWN_ERROR:"UNKNOWN_ERROR"},Re={onError:o=>{console.error("[ICPay Widget] Error:",o)},onUserCancelled:()=>{console.log("[ICPay Widget] User cancelled the action")},onInsufficientBalance:o=>{console.warn("[ICPay Widget] Insufficient balance:",o.message)},onWalletError:o=>{console.warn("[ICPay Widget] Wallet error:",o.message)},onNetworkError:o=>{console.error("[ICPay Widget] Network error:",o.message)}};function k(o,a=Re){o instanceof Me?(a.onError(o),o.isUserCancelled()?a.onUserCancelled?.():o.isBalanceError()?a.onInsufficientBalance?.(o):o.isWalletError()?a.onWalletError?.(o):o.isNetworkError()&&a.onNetworkError?.(o)):(console.error("[ICPay Widget] Unknown error:",o),a.onError(new Me({code:w.UNKNOWN_ERROR,message:o instanceof Error?o.message:"An unknown error occurred",details:o})))}var Pe={[w.WALLET_NOT_CONNECTED]:"Please connect your wallet to continue",[w.WALLET_USER_CANCELLED]:"User have rejected the transfer",[w.WALLET_SIGNATURE_REJECTED]:"User have rejected the transfer",[w.INSUFFICIENT_BALANCE]:"Insufficient balance for this transaction",[w.NETWORK_ERROR]:"Network error. Please try again",[w.API_ERROR]:"Service temporarily unavailable",[w.LEDGER_NOT_FOUND]:"Selected token is not supported",[w.TRANSACTION_FAILED]:"Transaction failed. Please try again",[w.TRANSACTION_TIMEOUT]:"Transaction timed out. Please try again",[w.UNKNOWN_ERROR]:"Something went wrong. Please try again"};function W(o){return Pe[o.code]||o.message||"An error occurred"}function $(o){return!o.isUserCancelled()}function L(o){if(o.userAction)return o.userAction;switch(o.code){case w.WALLET_NOT_CONNECTED:return"Connect Wallet";case w.INSUFFICIENT_BALANCE:return"Add Funds";case w.NETWORK_ERROR:case w.API_ERROR:return"Try Again";default:return null}}function C(o){return o.isUserCancelled()?"info":o.isBalanceError()||o.isWalletError()?"warning":"error"}import{LitElement as je,html as b,css as De}from"lit";import{customElement as Fe,property as te,state as T}from"lit/decorators.js";var Ke=[{key:"wallet",label:"Connect Wallet",tooltip:"Awaiting wallet connection",status:"pending"},{key:"init",label:"Initialising ICPay",tooltip:"Initializing payment",status:"pending"},{key:"await",label:"Awaiting payment confirmation",tooltip:"Preparing payment",status:"pending"},{key:"transfer",label:"Transferring funds",tooltip:"Submitting payment",status:"pending"},{key:"verify",label:"Verifying payment",tooltip:"Confirming payment",status:"pending"},{key:"confirm",label:"Payment confirmed",tooltip:"Payment completed",status:"pending"}],d=class extends je{constructor(){super(...arguments);this.open=!1;this.steps=Ke;this.amount=0;this.currency="";this.ledgerSymbol="";this.activeIndex=0;this.completed=!1;this.failed=!1;this.errorMessage=null;this.showSuccess=!1;this.showConfetti=!1;this.currentSteps=[];this.currentAmount=0;this.currentCurrency="";this.currentLedgerSymbol="";this.progressionTimer=null;this.onMethodStart=e=>{let t=e?.detail?.name||"",i=e?.detail?.type||"";console.log("ICPay Progress: Method start event received:",e.detail),(t==="sendFunds"||t==="sendFundsUsd"||t==="sendUsd"||t==="pay"||t==="unlock"||t==="tip"||t==="donate"||t==="order")&&(this.open=!0,this.activeIndex=0,this.completed=!1,this.failed=!1,this.errorMessage=null,this.showSuccess=!1,this.showConfetti=!1,this.currentSteps=this.currentSteps.map(r=>({...r,status:"pending"})),this.setLoadingByKey("wallet"),e?.detail?.amount!==void 0&&(this.currentAmount=e.detail.amount,this.amount=e.detail.amount,console.log("ICPay Progress: Amount updated to:",e.detail.amount)),e?.detail?.currency&&(this.currentCurrency=e.detail.currency,this.currency=e.detail.currency,console.log("ICPay Progress: Currency updated to:",e.detail.currency)),e?.detail?.ledgerSymbol&&(this.currentLedgerSymbol=e.detail.ledgerSymbol,this.ledgerSymbol=e.detail.ledgerSymbol,console.log("ICPay Progress: Current state after method start:",{activeIndex:this.activeIndex,currentAmount:this.currentAmount,currentCurrency:this.currentCurrency,currentLedgerSymbol:this.currentLedgerSymbol})),console.log("ICPay Progress: Waiting for wallet confirmation before starting progression"),this.requestUpdate())};this.onMethodSuccess=e=>{let t=e?.detail?.name||"";(t==="sendFunds"||t==="sendFundsUsd"||t==="sendUsd"||t==="pay"||t==="unlock"||t==="tip"||t==="donate"||t==="order")&&(this.dispatchEvent(new CustomEvent("icpay-progress-method-success",{detail:{methodName:t,step:this.activeIndex},bubbles:!0})),!this.failed&&!this.completed&&(t==="getLedgerBalance"?(this.completeByKey("init"),this.setLoadingByKey("await")):t==="sendFundsToLedger"?this.setLoadingByKey("transfer"):t==="notifyLedgerTransaction"&&(this.completeByKey("verify"),this.setLoadingByKey("confirm"))))};this.onTransactionCreated=e=>{let t=e?.detail?.transactionId||e?.detail?.id;console.log("ICPay Progress: Transaction created event received:",e.detail),!this.failed&&!this.completed&&(this.completeByKey("await"),this.setLoadingByKey("transfer")),this.dispatchEvent(new CustomEvent("icpay-progress-transaction-created",{detail:{transactionId:t,step:this.activeIndex},bubbles:!0}))};this.onTransactionUpdated=e=>{let t=e?.detail?.status||"pending",i=e?.detail?.transactionId||e?.detail?.id;console.log("ICPay Progress: Transaction updated event received:",e.detail),!this.failed&&this.completed,this.dispatchEvent(new CustomEvent("icpay-progress-transaction-updated",{detail:{status:t,transactionId:i,step:this.activeIndex},bubbles:!0}))};this.onTransactionCompleted=e=>{let t=e?.detail?.transactionId||e?.detail?.id,i=e?.detail?.status||"completed";console.log("ICPay Progress: Transaction completed event received:",e.detail),console.log("ICPay Progress: Current state when transaction completed:",{activeIndex:this.activeIndex,completed:this.completed,failed:this.failed,showSuccess:this.showSuccess}),this.completeByKey("transfer"),this.setLoadingByKey("verify"),this.completeByKey("verify"),this.setLoadingByKey("confirm"),this.completeByKey("confirm"),this.completed=!0,this.showSuccess=!0,this.showConfetti=!0,this.dispatchEvent(new CustomEvent("icpay-progress-completed",{detail:{transactionId:t,status:i,amount:this.currentAmount||this.amount,currency:this.currentCurrency||this.currency,ledgerSymbol:this.currentLedgerSymbol||this.ledgerSymbol},bubbles:!0})),setTimeout(()=>{this.open&&this.showSuccess&&!this.failed&&(this.open=!1)},2e3),setTimeout(()=>{this.showConfetti=!1},3e3)};this.onTransactionFailed=e=>{let t=e?.detail?.message||e?.detail?.error?.message||"Transaction failed",i=e?.detail?.error?.code||e?.detail?.code||"UNKNOWN_ERROR",r=e?.detail?.transactionId||e?.detail?.id;console.log("ICPay Progress: Transaction failed event received:",e.detail),this.failed=!0,this.errorMessage=this.transformErrorMessage(t),this.showSuccess=!1,this.updateStepStatus(this.activeIndex,"error",t),this.stopAutomaticProgression(),this.open=!0,this.dispatchEvent(new CustomEvent("icpay-progress-failed",{detail:{errorMessage:t,errorCode:i,transactionId:r,step:this.activeIndex},bubbles:!0}))};this.onMethodError=e=>{let t=e?.detail?.name||"",i=e?.detail?.error?.message||e?.detail?.message||"An error occurred",r=e?.detail?.error?.code||e?.detail?.code||"METHOD_ERROR";console.log("ICPay Progress: Method error event received:",e.detail),(t?.startsWith("sendFunds")||t==="sendUsd"||t==="pay"||t==="unlock"||t==="tip"||t==="donate"||t==="order")&&(this.failed=!0,this.errorMessage=this.transformErrorMessage(i),this.showSuccess=!1,this.updateStepStatus(this.activeIndex,"error",i),this.stopAutomaticProgression(),this.open=!0,this.dispatchEvent(new CustomEvent("icpay-progress-error",{detail:{methodName:t,errorMessage:i,errorCode:r,step:this.activeIndex},bubbles:!0})))};this.onSDKError=e=>{let t=e?.detail?.message||"SDK error occurred",i=e?.detail?.code||"SDK_ERROR";console.log("ICPay Progress: SDK error event received:",e.detail),this.failed=!0,this.errorMessage=this.transformErrorMessage(t),this.showSuccess=!1,this.updateStepStatus(this.activeIndex,"error",t),this.stopAutomaticProgression(),this.open=!0,this.dispatchEvent(new CustomEvent("icpay-progress-sdk-error",{detail:{errorMessage:t,errorCode:i,step:this.activeIndex},bubbles:!0}))};this.onWalletConnected=e=>{let t=e?.detail?.walletType||"unknown";console.log("ICPay Progress: Wallet connected event received:",e.detail),this.completeByKey("wallet"),this.setLoadingByKey("init"),this.dispatchEvent(new CustomEvent("icpay-progress-wallet-connected",{detail:{walletType:t,step:this.activeIndex},bubbles:!0}))};this.onWalletDisconnected=e=>{let t=e?.detail?.walletType||"unknown";console.log("ICPay Progress: Wallet disconnected event received:",e.detail),this.dispatchEvent(new CustomEvent("icpay-progress-wallet-disconnected",{detail:{walletType:t,step:this.activeIndex},bubbles:!0}))};this.onBalanceCheck=e=>{let t=e?.detail?.hasBalance||!1,i=e?.detail?.balance||0;console.log("ICPay Progress: Balance check event received:",e.detail),t||(this.failed=!0,this.errorMessage="Insufficient balance for transaction",this.updateStepStatus(this.activeIndex,"error","Insufficient balance for transaction"),this.stopAutomaticProgression(),this.dispatchEvent(new CustomEvent("icpay-progress-insufficient-balance",{detail:{balance:i,required:this.currentAmount||this.amount,step:this.activeIndex},bubbles:!0})))};this.onLedgerVerified=e=>{let t=e?.detail?.ledgerId||e?.detail?.canisterId,i=e?.detail?.symbol||"unknown";console.log("ICPay Progress: Ledger verified event received:",e.detail),i&&i!=="unknown"&&(this.currentLedgerSymbol=i,this.ledgerSymbol=i),this.dispatchEvent(new CustomEvent("icpay-progress-ledger-verified",{detail:{ledgerId:t,symbol:i,step:this.activeIndex},bubbles:!0}))};this.onWidgetPayment=e=>{let t=e?.detail?.amount,i=e?.detail?.currency,r=e?.detail?.ledgerSymbol;if(console.log("ICPay Progress: Widget payment event received:",e.detail),t!==void 0&&(this.currentAmount=t,this.amount=t),i&&(this.currentCurrency=i,this.currency=i),r&&(this.currentLedgerSymbol=r,this.ledgerSymbol=r),!this.failed){for(let n=this.activeIndex;n<this.currentSteps.length;n++)this.updateStepStatus(n,"completed");this.activeIndex=this.currentSteps.length-1,this.completed=!0,this.showSuccess=!0,this.showConfetti=!0}this.dispatchEvent(new CustomEvent("icpay-progress-widget-payment",{detail:{amount:t,currency:i,ledgerSymbol:r,step:this.activeIndex},bubbles:!0}))};this.onWidgetError=e=>{let t=e?.detail?.message||"Widget error occurred",i=e?.detail?.code||"WIDGET_ERROR";console.log("ICPay Progress: Widget error event received:",e.detail),this.failed=!0,this.errorMessage=this.transformErrorMessage(t),this.showSuccess=!1,this.updateStepStatus(this.activeIndex,"error",t),this.stopAutomaticProgression(),this.open=!0,this.dispatchEvent(new CustomEvent("icpay-progress-widget-error",{detail:{errorMessage:t,errorCode:i,step:this.activeIndex},bubbles:!0}))};this.onWidgetUnlock=e=>{let t=e?.detail?.amount,i=e?.detail?.currency;if(console.log("ICPay Progress: Widget unlock event received:",e.detail),!this.failed){for(let r=this.activeIndex;r<this.currentSteps.length;r++)this.updateStepStatus(r,"completed");this.activeIndex=this.currentSteps.length-1,this.completed=!0,this.showSuccess=!0,this.showConfetti=!0}this.dispatchEvent(new CustomEvent("icpay-progress-widget-unlock",{detail:{amount:t,currency:i,step:this.activeIndex},bubbles:!0}))};this.onWidgetTip=e=>{let t=e?.detail?.amount,i=e?.detail?.currency;if(console.log("ICPay Progress: Widget tip event received:",e.detail),!this.failed){for(let r=this.activeIndex;r<this.currentSteps.length;r++)this.updateStepStatus(r,"completed");this.activeIndex=this.currentSteps.length-1,this.completed=!0,this.showSuccess=!0,this.showConfetti=!0}this.dispatchEvent(new CustomEvent("icpay-progress-widget-tip",{detail:{amount:t,currency:i,step:this.activeIndex},bubbles:!0}))};this.onWidgetDonation=e=>{let t=e?.detail?.amount,i=e?.detail?.currency;if(console.log("ICPay Progress: Widget donation event received:",e.detail),!this.failed){for(let r=this.activeIndex;r<this.currentSteps.length;r++)this.updateStepStatus(r,"completed");this.activeIndex=this.currentSteps.length-1,this.completed=!0,this.showSuccess=!0,this.showConfetti=!0}this.dispatchEvent(new CustomEvent("icpay-progress-widget-donation",{detail:{amount:t,currency:i,step:this.activeIndex},bubbles:!0}))};this.onWidgetCoffee=e=>{let t=e?.detail?.amount,i=e?.detail?.currency;if(console.log("ICPay Progress: Widget coffee event received:",e.detail),!this.failed){for(let r=this.activeIndex;r<this.currentSteps.length;r++)this.updateStepStatus(r,"completed");this.activeIndex=this.currentSteps.length-1,this.completed=!0,this.showSuccess=!0,this.showConfetti=!0}this.dispatchEvent(new CustomEvent("icpay-progress-widget-coffee",{detail:{amount:t,currency:i,step:this.activeIndex},bubbles:!0}))}}connectedCallback(){super.connectedCallback();try{ee(this,this.theme)}catch{}this.currentSteps=[...this.steps],this.currentAmount=this.amount,this.currentCurrency=this.currency,this.currentLedgerSymbol=this.ledgerSymbol,this.attachSDKEventListeners()}disconnectedCallback(){super.disconnectedCallback(),this.detachSDKEventListeners(),this.stopAutomaticProgression()}updated(e){if(e.has("theme"))try{ee(this,this.theme)}catch{}}attachSDKEventListeners(){window.addEventListener("icpay-sdk-method-start",this.onMethodStart),window.addEventListener("icpay-sdk-method-success",this.onMethodSuccess),window.addEventListener("icpay-sdk-method-error",this.onMethodError),window.addEventListener("icpay-sdk-transaction-created",this.onTransactionCreated),window.addEventListener("icpay-sdk-transaction-updated",this.onTransactionUpdated),window.addEventListener("icpay-sdk-transaction-completed",this.onTransactionCompleted),window.addEventListener("icpay-sdk-transaction-failed",this.onTransactionFailed),window.addEventListener("icpay-sdk-error",this.onSDKError),window.addEventListener("icpay-sdk-wallet-connected",this.onWalletConnected),window.addEventListener("icpay-sdk-wallet-disconnected",this.onWalletDisconnected),window.addEventListener("icpay-sdk-balance-check",this.onBalanceCheck),window.addEventListener("icpay-sdk-ledger-verified",this.onLedgerVerified),window.addEventListener("icpay-pay",this.onWidgetPayment),window.addEventListener("icpay-error",this.onWidgetError),window.addEventListener("icpay-unlock",this.onWidgetUnlock),window.addEventListener("icpay-tip",this.onWidgetTip),window.addEventListener("icpay-donation",this.onWidgetDonation),window.addEventListener("icpay-coffee",this.onWidgetCoffee)}detachSDKEventListeners(){window.removeEventListener("icpay-sdk-method-start",this.onMethodStart),window.removeEventListener("icpay-sdk-method-success",this.onMethodSuccess),window.removeEventListener("icpay-sdk-method-error",this.onMethodError),window.removeEventListener("icpay-sdk-transaction-created",this.onTransactionCreated),window.removeEventListener("icpay-sdk-transaction-updated",this.onTransactionUpdated),window.removeEventListener("icpay-sdk-transaction-completed",this.onTransactionCompleted),window.removeEventListener("icpay-sdk-transaction-failed",this.onTransactionFailed),window.removeEventListener("icpay-sdk-error",this.onSDKError),window.removeEventListener("icpay-sdk-wallet-connected",this.onWalletConnected),window.removeEventListener("icpay-sdk-wallet-disconnected",this.onWalletDisconnected),window.removeEventListener("icpay-sdk-balance-check",this.onBalanceCheck),window.removeEventListener("icpay-sdk-ledger-verified",this.onLedgerVerified),window.removeEventListener("icpay-pay",this.onWidgetPayment),window.removeEventListener("icpay-error",this.onWidgetError),window.removeEventListener("icpay-unlock",this.onWidgetUnlock),window.removeEventListener("icpay-tip",this.onWidgetTip),window.removeEventListener("icpay-donation",this.onWidgetDonation),window.removeEventListener("icpay-coffee",this.onWidgetCoffee)}startAutomaticProgression(){this.progressionTimer&&clearInterval(this.progressionTimer),this.activeIndex=1,this.updateStepStatus(this.activeIndex,"loading"),console.log("ICPay Progress: Starting automatic progression from step:",this.activeIndex),this.progressionTimer=setInterval(()=>{if(this.failed||this.completed){this.stopAutomaticProgression();return}console.log("ICPay Progress: Processing step:",this.activeIndex),this.updateStepStatus(this.activeIndex,"completed"),this.activeIndex<this.currentSteps.length-1?(this.activeIndex++,this.updateStepStatus(this.activeIndex,"loading"),console.log("ICPay Progress: Auto-progressed to step:",this.activeIndex)):(this.stopAutomaticProgression(),console.log("ICPay Progress: All steps completed, waiting for transaction completion")),this.requestUpdate()},3e3)}stopAutomaticProgression(){this.progressionTimer&&(clearInterval(this.progressionTimer),this.progressionTimer=null)}updateStepStatus(e,t,i){if(e>=0&&e<this.currentSteps.length){let r=this.currentSteps[e],n=r.status;r.status=t,t==="completed"&&(r.timestamp=this.getCurrentTime()),t==="error"&&i&&(r.errorMessage=this.transformErrorMessage(i)),console.log(`ICPay Progress: Step ${e} (${r.label}) status changed from ${n} to ${t}`),this.requestUpdate()}}getCurrentTime(){return new Date().toLocaleTimeString("en-US",{hour12:!1,hour:"2-digit",minute:"2-digit",second:"2-digit"})}progressPercent(){if(this.failed)return 0;if(this.showSuccess)return 100;let t=this.currentSteps.filter(i=>i.status==="completed").length/this.currentSteps.length*100;return Math.max(0,Math.min(100,t))}verticalPercent(){if(this.failed)return 0;if(this.showSuccess)return 100;let t=this.currentSteps.filter(i=>i.status==="completed").length/this.currentSteps.length*100;return Math.max(0,Math.min(100,t))}getStepIcon(e){switch(e.status){case"loading":return b`<div class="spinner"></div>`;case"completed":return"\u2713";case"error":return"\u2717";default:return"\u25CB"}}getStepIndexByKey(e){return this.currentSteps.findIndex(t=>t.key===e)}setLoadingByKey(e){let t=this.getStepIndexByKey(e);t>=0&&(this.activeIndex=t,this.updateStepStatus(t,"loading"))}completeByKey(e){let t=this.getStepIndexByKey(e);t>=0&&(this.updateStepStatus(t,"completed"),this.activeIndex=t)}transformErrorMessage(e){let t=String(e||"").toLowerCase();return t.includes("user rejected")||t.includes("user cancelled")||t.includes("user canceled")||t.includes("signature rejected")?"User have rejected the transfer":e}renderConfetti(){if(!this.showConfetti)return"";let e=Array.from({length:50},(i,r)=>r),t=["#0066FF","#ef4444","#10b981","#f59e0b","#8b5cf6"];return b`
60
+ `;function te(o,a){if(!o||!a)return;let e=a.primaryColor||void 0,t=a.secondaryColor||void 0,i=(_,E)=>{E&&o.style.setProperty(_,E)};i("--icpay-primary",e),i("--icpay-secondary",t);let r=_=>{if(!_)return null;let E=_.replace("#",""),ce=E.length===3?E.split("").map(Le=>Le+Le).join(""):E,de=parseInt(ce,16),pe=de>>16&255,Oe=de>>8&255,Ie=de&255;return{r:pe,g:Oe,b:Ie}},c=(_=>{let E=r(_);if(!E)return 0;let ce=de=>{let pe=de/255;return pe<=.03928?pe/12.92:Math.pow((pe+.055)/1.055,2.4)};return .2126*ce(E.r)+.7152*ce(E.g)+.0722*ce(E.b)})(e||t)>.6,h=a.surfaceColor||(c?"#f3f4f6":"#1f2937"),F=a.surfaceAltColor||(c?"#e5e7eb":"#374151"),q=a.borderColor||(c?"#d1d5db":"#4b5563"),A=a.textColor||(c?"#111827":"#f9fafb"),ee=a.accentColor||t||e||(c?"#6b7280":"#9ca3af"),le=a.mutedTextColor||(c?"#6b7280":"#9ca3af");i("--icpay-accent",ee),i("--icpay-text",A),i("--icpay-muted",le),i("--icpay-surface",h),i("--icpay-surface-alt",F),i("--icpay-border",q)}import{Icpay as Ce}from"@ic-pay/icpay-sdk";var Ae=typeof window<"u";function fe(o,a,e){o&&(e!==void 0?console.log(`[ICPay Widget] ${a}`,e):console.log(`[ICPay Widget] ${a}`))}function d(o){if(!Ae)return{client:{},quoteUsd:async()=>({tokenAmountDecimals:"0"}),sendUsd:async()=>({transactionId:"0",status:"pending"})};fe(o.debug||!1,"Creating SDK with config:",o);let a={publishableKey:o.publishableKey};o.enableEvents!==void 0?a.enableEvents=o.enableEvents:a.enableEvents=!0,o.apiUrl&&(a.apiUrl=o.apiUrl),o.icHost&&(a.icHost=o.icHost),o.actorProvider&&(a.actorProvider=o.actorProvider),o.connectedWallet&&(a.connectedWallet=o.connectedWallet),o.debug!==void 0&&(a.debug=o.debug),fe(o.debug||!1,"Filtered SDK config:",a);try{fe(o.debug||!1,"typeof Icpay:",typeof Ce);let e=new Ce(a);if(Ae){let r=e,n=l=>{r.addEventListener(l,c=>{window.dispatchEvent(new CustomEvent(l,{detail:c?.detail??c}))})};["icpay-sdk-error","icpay-sdk-transaction-created","icpay-sdk-transaction-updated","icpay-sdk-transaction-completed","icpay-sdk-transaction-failed","icpay-sdk-method-start","icpay-sdk-method-success","icpay-sdk-method-error"].forEach(n)}async function t(r,n){return e.calculateTokenAmountFromUSD({usdAmount:r,ledgerCanisterId:n})}async function i(r,n,l){return e.sendFundsUsd({usdAmount:r,ledgerCanisterId:n,metadata:l})}return{client:e,quoteUsd:t,sendUsd:i}}catch(e){throw fe(o.debug||!1,"Error creating SDK:",e),e}}import{LitElement as Ve,html as B,css as He}from"lit";import{customElement as qe,property as Ge,state as N}from"lit/decorators.js";import{IcpayError as Me}from"@ic-pay/icpay-sdk";var x={WALLET_NOT_CONNECTED:"WALLET_NOT_CONNECTED",WALLET_USER_CANCELLED:"WALLET_USER_CANCELLED",WALLET_SIGNATURE_REJECTED:"WALLET_SIGNATURE_REJECTED",INSUFFICIENT_BALANCE:"INSUFFICIENT_BALANCE",NETWORK_ERROR:"NETWORK_ERROR",API_ERROR:"API_ERROR",LEDGER_NOT_FOUND:"LEDGER_NOT_FOUND",TRANSACTION_FAILED:"TRANSACTION_FAILED",TRANSACTION_TIMEOUT:"TRANSACTION_TIMEOUT",UNKNOWN_ERROR:"UNKNOWN_ERROR"},Re={onError:o=>{console.error("[ICPay Widget] Error:",o)},onUserCancelled:()=>{console.log("[ICPay Widget] User cancelled the action")},onInsufficientBalance:o=>{console.warn("[ICPay Widget] Insufficient balance:",o.message)},onWalletError:o=>{console.warn("[ICPay Widget] Wallet error:",o.message)},onNetworkError:o=>{console.error("[ICPay Widget] Network error:",o.message)}};function k(o,a=Re){o instanceof Me?(a.onError(o),o.isUserCancelled()?a.onUserCancelled?.():o.isBalanceError()?a.onInsufficientBalance?.(o):o.isWalletError()?a.onWalletError?.(o):o.isNetworkError()&&a.onNetworkError?.(o)):(console.error("[ICPay Widget] Unknown error:",o),a.onError(new Me({code:x.UNKNOWN_ERROR,message:o instanceof Error?o.message:"An unknown error occurred",details:o})))}var Pe={[x.WALLET_NOT_CONNECTED]:"Please connect your wallet to continue",[x.WALLET_USER_CANCELLED]:"User have rejected the transfer",[x.WALLET_SIGNATURE_REJECTED]:"User have rejected the transfer",[x.INSUFFICIENT_BALANCE]:"Insufficient balance for this transaction",[x.NETWORK_ERROR]:"Network error. Please try again",[x.API_ERROR]:"Service temporarily unavailable",[x.LEDGER_NOT_FOUND]:"Selected token is not supported",[x.TRANSACTION_FAILED]:"Transaction failed. Please try again",[x.TRANSACTION_TIMEOUT]:"Transaction timed out. Please try again",[x.UNKNOWN_ERROR]:"Something went wrong. Please try again"};function W(o){return Pe[o.code]||o.message||"An error occurred"}function $(o){return!o.isUserCancelled()}function L(o){if(o.userAction)return o.userAction;switch(o.code){case x.WALLET_NOT_CONNECTED:return"Connect Wallet";case x.INSUFFICIENT_BALANCE:return"Add Funds";case x.NETWORK_ERROR:case x.API_ERROR:return"Try Again";default:return null}}function C(o){return o.isUserCancelled()?"info":o.isBalanceError()||o.isWalletError()?"warning":"error"}import{LitElement as je,html as m,css as De}from"lit";import{customElement as Ke,property as ie,state as T}from"lit/decorators.js";var Fe=[{key:"wallet",label:"Connect Wallet",tooltip:"Awaiting wallet connection",status:"pending"},{key:"init",label:"Initialising ICPay",tooltip:"Initializing payment",status:"pending"},{key:"await",label:"Awaiting payment confirmation",tooltip:"Preparing payment",status:"pending"},{key:"transfer",label:"Transferring funds",tooltip:"Submitting payment",status:"pending"},{key:"verify",label:"Verifying payment",tooltip:"Confirming payment",status:"pending"},{key:"confirm",label:"Payment confirmed",tooltip:"Payment completed",status:"pending"}],p=class extends je{constructor(){super(...arguments);this.open=!1;this.steps=Fe;this.amount=0;this.currency="";this.ledgerSymbol="";this.activeIndex=0;this.completed=!1;this.failed=!1;this.errorMessage=null;this.showSuccess=!1;this.showConfetti=!1;this.currentSteps=[];this.currentAmount=0;this.currentCurrency="";this.currentLedgerSymbol="";this.progressionTimer=null;this.onMethodStart=e=>{let t=e?.detail?.name||"",i=e?.detail?.type||"";console.log("ICPay Progress: Method start event received:",e.detail),(t==="sendFunds"||t==="sendFundsUsd"||t==="sendUsd"||t==="pay"||t==="unlock"||t==="tip"||t==="donate"||t==="order")&&(this.open=!0,this.activeIndex=0,this.completed=!1,this.failed=!1,this.errorMessage=null,this.showSuccess=!1,this.showConfetti=!1,this.currentSteps=this.currentSteps.map(r=>({...r,status:"pending"})),this.setLoadingByKey("wallet"),e?.detail?.amount!==void 0&&(this.currentAmount=e.detail.amount,this.amount=e.detail.amount,console.log("ICPay Progress: Amount updated to:",e.detail.amount)),e?.detail?.currency&&(this.currentCurrency=e.detail.currency,this.currency=e.detail.currency,console.log("ICPay Progress: Currency updated to:",e.detail.currency)),e?.detail?.ledgerSymbol&&(this.currentLedgerSymbol=e.detail.ledgerSymbol,this.ledgerSymbol=e.detail.ledgerSymbol,console.log("ICPay Progress: Current state after method start:",{activeIndex:this.activeIndex,currentAmount:this.currentAmount,currentCurrency:this.currentCurrency,currentLedgerSymbol:this.currentLedgerSymbol})),console.log("ICPay Progress: Waiting for wallet confirmation before starting progression"),this.requestUpdate()),!this.failed&&!this.completed&&(t==="sendFundsToLedger"?this.setLoadingByKey("transfer"):t==="notifyLedgerTransaction"&&this.setLoadingByKey("verify"))};this.onMethodSuccess=e=>{let t=e?.detail?.name||"";(t==="sendFunds"||t==="sendFundsUsd"||t==="sendUsd"||t==="pay"||t==="unlock"||t==="tip"||t==="donate"||t==="order")&&(this.dispatchEvent(new CustomEvent("icpay-progress-method-success",{detail:{methodName:t,step:this.activeIndex},bubbles:!0})),!this.failed&&!this.completed&&(t==="getLedgerBalance"?(this.completeByKey("init"),this.setLoadingByKey("await")):t==="sendFundsToLedger"?(this.completeByKey("transfer"),this.setLoadingByKey("verify")):t==="notifyLedgerTransaction"&&(this.completeByKey("verify"),this.setLoadingByKey("confirm"))))};this.onTransactionCreated=e=>{let t=e?.detail?.transactionId||e?.detail?.id;console.log("ICPay Progress: Transaction created event received:",e.detail),!this.failed&&!this.completed&&(this.completeByKey("await"),this.setLoadingByKey("transfer")),this.dispatchEvent(new CustomEvent("icpay-progress-transaction-created",{detail:{transactionId:t,step:this.activeIndex},bubbles:!0}))};this.onTransactionUpdated=e=>{let t=e?.detail?.status||"pending",i=e?.detail?.transactionId||e?.detail?.id;console.log("ICPay Progress: Transaction updated event received:",e.detail),!this.failed&&this.completed,this.dispatchEvent(new CustomEvent("icpay-progress-transaction-updated",{detail:{status:t,transactionId:i,step:this.activeIndex},bubbles:!0}))};this.onTransactionCompleted=e=>{let t=e?.detail?.transactionId||e?.detail?.id,i=e?.detail?.status||"completed";console.log("ICPay Progress: Transaction completed event received:",e.detail),console.log("ICPay Progress: Current state when transaction completed:",{activeIndex:this.activeIndex,completed:this.completed,failed:this.failed,showSuccess:this.showSuccess}),this.completeByKey("transfer"),this.completeByKey("await"),this.completeByKey("init"),this.completeByKey("verify"),this.completeByKey("confirm"),this.completed=!0,this.showSuccess=!0,this.showConfetti=!0,this.dispatchEvent(new CustomEvent("icpay-progress-completed",{detail:{transactionId:t,status:i,amount:this.currentAmount||this.amount,currency:this.currentCurrency||this.currency,ledgerSymbol:this.currentLedgerSymbol||this.ledgerSymbol},bubbles:!0})),setTimeout(()=>{this.open&&this.showSuccess&&!this.failed&&(this.open=!1)},2e3),setTimeout(()=>{this.showConfetti=!1},3e3)};this.onTransactionFailed=e=>{let t=e?.detail?.message||e?.detail?.error?.message||"Transaction failed",i=e?.detail?.error?.code||e?.detail?.code||"UNKNOWN_ERROR",r=e?.detail?.transactionId||e?.detail?.id;console.log("ICPay Progress: Transaction failed event received:",e.detail),this.failed=!0,this.errorMessage=this.transformErrorMessage(t),this.showSuccess=!1,this.updateStepStatus(this.activeIndex,"error",t),this.stopAutomaticProgression(),this.open=!0,this.dispatchEvent(new CustomEvent("icpay-progress-failed",{detail:{errorMessage:t,errorCode:i,transactionId:r,step:this.activeIndex},bubbles:!0}))};this.onMethodError=e=>{let t=e?.detail?.name||"",i=e?.detail?.error?.message||e?.detail?.message||"An error occurred",r=e?.detail?.error?.code||e?.detail?.code||"METHOD_ERROR";console.log("ICPay Progress: Method error event received:",e.detail),(t?.startsWith("sendFunds")||t==="sendUsd"||t==="pay"||t==="unlock"||t==="tip"||t==="donate"||t==="order")&&(this.failed=!0,this.errorMessage=this.transformErrorMessage(i),this.showSuccess=!1,this.updateStepStatus(this.activeIndex,"error",i),this.stopAutomaticProgression(),this.open=!0,this.dispatchEvent(new CustomEvent("icpay-progress-error",{detail:{methodName:t,errorMessage:i,errorCode:r,step:this.activeIndex},bubbles:!0})))};this.onSDKError=e=>{let t=e?.detail?.message||"SDK error occurred",i=e?.detail?.code||"SDK_ERROR";console.log("ICPay Progress: SDK error event received:",e.detail),this.failed=!0,this.errorMessage=this.transformErrorMessage(t),this.showSuccess=!1,this.updateStepStatus(this.activeIndex,"error",t),this.stopAutomaticProgression(),this.open=!0,this.dispatchEvent(new CustomEvent("icpay-progress-sdk-error",{detail:{errorMessage:t,errorCode:i,step:this.activeIndex},bubbles:!0}))};this.onWalletConnected=e=>{let t=e?.detail?.walletType||"unknown";console.log("ICPay Progress: Wallet connected event received:",e.detail),this.completeByKey("wallet"),this.setLoadingByKey("init"),this.dispatchEvent(new CustomEvent("icpay-progress-wallet-connected",{detail:{walletType:t,step:this.activeIndex},bubbles:!0}))};this.onWalletDisconnected=e=>{let t=e?.detail?.walletType||"unknown";console.log("ICPay Progress: Wallet disconnected event received:",e.detail),this.dispatchEvent(new CustomEvent("icpay-progress-wallet-disconnected",{detail:{walletType:t,step:this.activeIndex},bubbles:!0}))};this.onBalanceCheck=e=>{let t=e?.detail?.hasBalance||!1,i=e?.detail?.balance||0;console.log("ICPay Progress: Balance check event received:",e.detail),t||(this.failed=!0,this.errorMessage="Insufficient balance for transaction",this.updateStepStatus(this.activeIndex,"error","Insufficient balance for transaction"),this.stopAutomaticProgression(),this.dispatchEvent(new CustomEvent("icpay-progress-insufficient-balance",{detail:{balance:i,required:this.currentAmount||this.amount,step:this.activeIndex},bubbles:!0})))};this.onLedgerVerified=e=>{let t=e?.detail?.ledgerId||e?.detail?.canisterId,i=e?.detail?.symbol||"unknown";console.log("ICPay Progress: Ledger verified event received:",e.detail),i&&i!=="unknown"&&(this.currentLedgerSymbol=i,this.ledgerSymbol=i),this.dispatchEvent(new CustomEvent("icpay-progress-ledger-verified",{detail:{ledgerId:t,symbol:i,step:this.activeIndex},bubbles:!0}))};this.onWidgetPayment=e=>{let t=e?.detail?.amount,i=e?.detail?.currency,r=e?.detail?.ledgerSymbol;if(console.log("ICPay Progress: Widget payment event received:",e.detail),t!==void 0&&(this.currentAmount=t,this.amount=t),i&&(this.currentCurrency=i,this.currency=i),r&&(this.currentLedgerSymbol=r,this.ledgerSymbol=r),!this.failed){for(let n=this.activeIndex;n<this.currentSteps.length;n++)this.updateStepStatus(n,"completed");this.activeIndex=this.currentSteps.length-1,this.completed=!0,this.showSuccess=!0,this.showConfetti=!0}this.dispatchEvent(new CustomEvent("icpay-progress-widget-payment",{detail:{amount:t,currency:i,ledgerSymbol:r,step:this.activeIndex},bubbles:!0}))};this.onWidgetError=e=>{let t=e?.detail?.message||"Widget error occurred",i=e?.detail?.code||"WIDGET_ERROR";console.log("ICPay Progress: Widget error event received:",e.detail),this.failed=!0,this.errorMessage=this.transformErrorMessage(t),this.showSuccess=!1,this.updateStepStatus(this.activeIndex,"error",t),this.stopAutomaticProgression(),this.open=!0,this.dispatchEvent(new CustomEvent("icpay-progress-widget-error",{detail:{errorMessage:t,errorCode:i,step:this.activeIndex},bubbles:!0}))};this.onWidgetUnlock=e=>{let t=e?.detail?.amount,i=e?.detail?.currency;if(console.log("ICPay Progress: Widget unlock event received:",e.detail),!this.failed){for(let r=this.activeIndex;r<this.currentSteps.length;r++)this.updateStepStatus(r,"completed");this.activeIndex=this.currentSteps.length-1,this.completed=!0,this.showSuccess=!0,this.showConfetti=!0}this.dispatchEvent(new CustomEvent("icpay-progress-widget-unlock",{detail:{amount:t,currency:i,step:this.activeIndex},bubbles:!0}))};this.onWidgetTip=e=>{let t=e?.detail?.amount,i=e?.detail?.currency;if(console.log("ICPay Progress: Widget tip event received:",e.detail),!this.failed){for(let r=this.activeIndex;r<this.currentSteps.length;r++)this.updateStepStatus(r,"completed");this.activeIndex=this.currentSteps.length-1,this.completed=!0,this.showSuccess=!0,this.showConfetti=!0}this.dispatchEvent(new CustomEvent("icpay-progress-widget-tip",{detail:{amount:t,currency:i,step:this.activeIndex},bubbles:!0}))};this.onWidgetDonation=e=>{let t=e?.detail?.amount,i=e?.detail?.currency;if(console.log("ICPay Progress: Widget donation event received:",e.detail),!this.failed){for(let r=this.activeIndex;r<this.currentSteps.length;r++)this.updateStepStatus(r,"completed");this.activeIndex=this.currentSteps.length-1,this.completed=!0,this.showSuccess=!0,this.showConfetti=!0}this.dispatchEvent(new CustomEvent("icpay-progress-widget-donation",{detail:{amount:t,currency:i,step:this.activeIndex},bubbles:!0}))};this.onWidgetCoffee=e=>{let t=e?.detail?.amount,i=e?.detail?.currency;if(console.log("ICPay Progress: Widget coffee event received:",e.detail),!this.failed){for(let r=this.activeIndex;r<this.currentSteps.length;r++)this.updateStepStatus(r,"completed");this.activeIndex=this.currentSteps.length-1,this.completed=!0,this.showSuccess=!0,this.showConfetti=!0}this.dispatchEvent(new CustomEvent("icpay-progress-widget-coffee",{detail:{amount:t,currency:i,step:this.activeIndex},bubbles:!0}))}}connectedCallback(){super.connectedCallback();try{te(this,this.theme)}catch{}this.currentSteps=[...this.steps],this.currentAmount=this.amount,this.currentCurrency=this.currency,this.currentLedgerSymbol=this.ledgerSymbol,this.attachSDKEventListeners()}disconnectedCallback(){super.disconnectedCallback(),this.detachSDKEventListeners(),this.stopAutomaticProgression()}updated(e){if(e.has("theme"))try{te(this,this.theme)}catch{}}attachSDKEventListeners(){window.addEventListener("icpay-sdk-method-start",this.onMethodStart),window.addEventListener("icpay-sdk-method-success",this.onMethodSuccess),window.addEventListener("icpay-sdk-method-error",this.onMethodError),window.addEventListener("icpay-sdk-transaction-created",this.onTransactionCreated),window.addEventListener("icpay-sdk-transaction-updated",this.onTransactionUpdated),window.addEventListener("icpay-sdk-transaction-completed",this.onTransactionCompleted),window.addEventListener("icpay-sdk-transaction-failed",this.onTransactionFailed),window.addEventListener("icpay-sdk-error",this.onSDKError),window.addEventListener("icpay-sdk-wallet-connected",this.onWalletConnected),window.addEventListener("icpay-sdk-wallet-disconnected",this.onWalletDisconnected),window.addEventListener("icpay-sdk-balance-check",this.onBalanceCheck),window.addEventListener("icpay-sdk-ledger-verified",this.onLedgerVerified),window.addEventListener("icpay-pay",this.onWidgetPayment),window.addEventListener("icpay-error",this.onWidgetError),window.addEventListener("icpay-unlock",this.onWidgetUnlock),window.addEventListener("icpay-tip",this.onWidgetTip),window.addEventListener("icpay-donation",this.onWidgetDonation),window.addEventListener("icpay-coffee",this.onWidgetCoffee)}detachSDKEventListeners(){window.removeEventListener("icpay-sdk-method-start",this.onMethodStart),window.removeEventListener("icpay-sdk-method-success",this.onMethodSuccess),window.removeEventListener("icpay-sdk-method-error",this.onMethodError),window.removeEventListener("icpay-sdk-transaction-created",this.onTransactionCreated),window.removeEventListener("icpay-sdk-transaction-updated",this.onTransactionUpdated),window.removeEventListener("icpay-sdk-transaction-completed",this.onTransactionCompleted),window.removeEventListener("icpay-sdk-transaction-failed",this.onTransactionFailed),window.removeEventListener("icpay-sdk-error",this.onSDKError),window.removeEventListener("icpay-sdk-wallet-connected",this.onWalletConnected),window.removeEventListener("icpay-sdk-wallet-disconnected",this.onWalletDisconnected),window.removeEventListener("icpay-sdk-balance-check",this.onBalanceCheck),window.removeEventListener("icpay-sdk-ledger-verified",this.onLedgerVerified),window.removeEventListener("icpay-pay",this.onWidgetPayment),window.removeEventListener("icpay-error",this.onWidgetError),window.removeEventListener("icpay-unlock",this.onWidgetUnlock),window.removeEventListener("icpay-tip",this.onWidgetTip),window.removeEventListener("icpay-donation",this.onWidgetDonation),window.removeEventListener("icpay-coffee",this.onWidgetCoffee)}startAutomaticProgression(){this.progressionTimer&&clearInterval(this.progressionTimer),this.activeIndex=1,this.updateStepStatus(this.activeIndex,"loading"),console.log("ICPay Progress: Starting automatic progression from step:",this.activeIndex),this.progressionTimer=setInterval(()=>{if(this.failed||this.completed){this.stopAutomaticProgression();return}console.log("ICPay Progress: Processing step:",this.activeIndex),this.updateStepStatus(this.activeIndex,"completed"),this.activeIndex<this.currentSteps.length-1?(this.activeIndex++,this.updateStepStatus(this.activeIndex,"loading"),console.log("ICPay Progress: Auto-progressed to step:",this.activeIndex)):(this.stopAutomaticProgression(),console.log("ICPay Progress: All steps completed, waiting for transaction completion")),this.requestUpdate()},3e3)}stopAutomaticProgression(){this.progressionTimer&&(clearInterval(this.progressionTimer),this.progressionTimer=null)}updateStepStatus(e,t,i){if(e>=0&&e<this.currentSteps.length){let r=this.currentSteps[e],n=r.status;r.status=t,t==="completed"&&(r.timestamp=this.getCurrentTime()),t==="error"&&i&&(r.errorMessage=this.transformErrorMessage(i)),console.log(`ICPay Progress: Step ${e} (${r.label}) status changed from ${n} to ${t}`),this.requestUpdate()}}getCurrentTime(){return new Date().toLocaleTimeString("en-US",{hour12:!1,hour:"2-digit",minute:"2-digit",second:"2-digit"})}progressPercent(){if(this.failed)return 0;if(this.showSuccess)return 100;let t=this.currentSteps.filter(i=>i.status==="completed").length/this.currentSteps.length*100;return Math.max(0,Math.min(100,t))}verticalPercent(){if(this.failed)return 0;if(this.showSuccess)return 100;let t=this.currentSteps.filter(i=>i.status==="completed").length/this.currentSteps.length*100;return Math.max(0,Math.min(100,t))}getStepIcon(e){switch(e.status){case"loading":return m`<div class="spinner"></div>`;case"completed":return"\u2713";case"error":return"\u2717";default:return"\u25CB"}}getStepIndexByKey(e){return this.currentSteps.findIndex(t=>t.key===e)}setLoadingByKey(e){let t=this.getStepIndexByKey(e);t>=0&&(this.activeIndex=t,this.updateStepStatus(t,"loading"))}completeByKey(e){let t=this.getStepIndexByKey(e);t>=0&&(this.updateStepStatus(t,"completed"),this.activeIndex=t)}transformErrorMessage(e){let t=String(e||"").toLowerCase();return t.includes("user rejected")||t.includes("user cancelled")||t.includes("user canceled")||t.includes("signature rejected")?"User have rejected the transfer":e}renderConfetti(){if(!this.showConfetti)return"";let e=Array.from({length:50},(i,r)=>r),t=["#0066FF","#ef4444","#10b981","#f59e0b","#8b5cf6"];return m`
61
61
  <div class="confetti">
62
- ${e.map(i=>b`
62
+ ${e.map(i=>m`
63
63
  <div
64
64
  class="confetti-piece"
65
65
  style="
@@ -72,7 +72,7 @@ var Ne=Object.defineProperty;var Ue=Object.getOwnPropertyDescriptor;var s=(o,a,e
72
72
  ></div>
73
73
  `)}
74
74
  </div>
75
- `}renderSuccessState(){let e=this.currentAmount||this.amount,t=this.currentLedgerSymbol||this.currentCurrency||this.currency;return console.log("ICPay Progress: Rendering success state with:",{displayAmount:e,displayCurrency:t,currentAmount:this.currentAmount,amount:this.amount,currentCurrency:this.currentCurrency,currency:this.currency,currentLedgerSymbol:this.currentLedgerSymbol,ledgerSymbol:this.ledgerSymbol}),b`
75
+ `}renderSuccessState(){let e=this.currentAmount||this.amount,t=this.currentLedgerSymbol||this.currentCurrency||this.currency;return console.log("ICPay Progress: Rendering success state with:",{displayAmount:e,displayCurrency:t,currentAmount:this.currentAmount,amount:this.amount,currentCurrency:this.currentCurrency,currency:this.currency,currentLedgerSymbol:this.currentLedgerSymbol,ledgerSymbol:this.ledgerSymbol}),m`
76
76
  <div class="success-container">
77
77
  <div class="success-icon">
78
78
  <svg fill="none" viewBox="0 0 24 24" stroke="currentColor">
@@ -85,7 +85,7 @@ var Ne=Object.defineProperty;var Ue=Object.getOwnPropertyDescriptor;var s=(o,a,e
85
85
  <button class="btn btn-primary" @click=${()=>{this.open=!1}}>Close</button>
86
86
  </div>
87
87
  </div>
88
- `}renderErrorState(){return b`
88
+ `}renderErrorState(){return m`
89
89
  <div class="error-message">
90
90
  <div class="error-icon">⚠</div>
91
91
  <div class="error-content">
@@ -96,22 +96,22 @@ var Ne=Object.defineProperty;var Ue=Object.getOwnPropertyDescriptor;var s=(o,a,e
96
96
  </div>
97
97
  </div>
98
98
  </div>
99
- `}renderProgressContent(){return this.showSuccess?this.renderSuccessState():this.failed?this.renderErrorState():b`
99
+ `}renderProgressContent(){return this.showSuccess?this.renderSuccessState():this.failed?this.renderErrorState():m`
100
100
  <div class="progress-container">
101
101
  <div class="progress-header">
102
102
  <h2 class="progress-title">Processing Payment</h2>
103
103
  <p class="progress-subtitle">Please wait while we process your transaction</p>
104
104
  </div>
105
105
  <div class="progress-steps">
106
- ${this.currentSteps.map((e,t)=>b`
106
+ ${this.currentSteps.map((e,t)=>m`
107
107
  <div class="step ${t===this.activeIndex?"active":""} ${e.status==="completed"?"completed":""}">
108
108
  <div class="step-icon">
109
- ${e.status==="loading"?b`<div class="loading-spinner"></div>`:""}
110
- ${e.status==="completed"?b`
109
+ ${e.status==="loading"?m`<div class="loading-spinner"></div>`:""}
110
+ ${e.status==="completed"?m`
111
111
  <svg fill="none" viewBox="0 0 24 24" stroke="currentColor">
112
112
  <path stroke-linecap="round" stroke-linejoin="round" d="M5 13l4 4L19 7" />
113
113
  </svg>
114
- `:b`
114
+ `:m`
115
115
  <svg fill="none" viewBox="0 0 24 24" stroke="currentColor">
116
116
  <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9 3v2m6-2v2M9 19v2m6-2v2M5 9H3m2 6H3m18-6h-2m2 6h-2M7 19h10a2 2 0 002-2V7a2 2 0 00-2-2H7a2 2 0 00-2 2v10a2 2 0 002 2zM9 9h6v6H9V9z" />
117
117
  </svg>
@@ -125,7 +125,7 @@ var Ne=Object.defineProperty;var Ue=Object.getOwnPropertyDescriptor;var s=(o,a,e
125
125
  `)}
126
126
  </div>
127
127
  </div>
128
- `}retryTransaction(){this.activeIndex=0,this.completed=!1,this.failed=!1,this.errorMessage=null,this.showSuccess=!1,this.showConfetti=!1,this.currentSteps=this.currentSteps.map(e=>({...e,status:"pending"})),this.updateStepStatus(0,"loading"),this.startAutomaticProgression(),this.requestUpdate()}closeProgress(){this.open=!1}renderStep(e,t){return b`
128
+ `}retryTransaction(){this.activeIndex=0,this.completed=!1,this.failed=!1,this.errorMessage=null,this.showSuccess=!1,this.showConfetti=!1,this.currentSteps=this.currentSteps.map(e=>({...e,status:"pending"})),this.updateStepStatus(0,"loading"),this.startAutomaticProgression(),this.requestUpdate()}closeProgress(){this.open=!1}renderStep(e,t){return m`
129
129
  <div class="step-item ${e.status}">
130
130
  <div class="step-icon">
131
131
  ${this.getStepIcon(e)}
@@ -134,19 +134,19 @@ var Ne=Object.defineProperty;var Ue=Object.getOwnPropertyDescriptor;var s=(o,a,e
134
134
  <div class="step-title">
135
135
  ${e.status==="completed"?"COMPLETED":e.label}
136
136
  </div>
137
- ${e.status==="completed"?b`
137
+ ${e.status==="completed"?m`
138
138
  <div class="step-subtitle">
139
139
  ${e.timestamp} - ${e.tooltip}
140
140
  </div>
141
- `:e.status==="error"&&e.errorMessage?b`
141
+ `:e.status==="error"&&e.errorMessage?m`
142
142
  <div class="step-error">${e.errorMessage}</div>
143
- `:b`
143
+ `:m`
144
144
  <div class="step-subtitle">${e.tooltip}</div>
145
145
  `}
146
146
  </div>
147
147
  </div>
148
- `}render(){return b`
149
- ${this.open?b`
148
+ `}render(){return m`
149
+ ${this.open?m`
150
150
  ${this.renderConfetti()}
151
151
  <div class="modal-overlay active">
152
152
  <div class="modal-container">
@@ -154,7 +154,7 @@ var Ne=Object.defineProperty;var Ue=Object.getOwnPropertyDescriptor;var s=(o,a,e
154
154
  </div>
155
155
  </div>
156
156
  `:null}
157
- `}};d.styles=De`
157
+ `}};p.styles=De`
158
158
  :host {
159
159
  display: block;
160
160
  font-family: var(--icpay-font, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif);
@@ -340,7 +340,7 @@ var Ne=Object.defineProperty;var Ue=Object.getOwnPropertyDescriptor;var s=(o,a,e
340
340
  opacity: 0;
341
341
  }
342
342
  }
343
- `,s([te({type:Boolean})],d.prototype,"open",2),s([te({type:Array})],d.prototype,"steps",2),s([te({type:Number})],d.prototype,"amount",2),s([te({type:String})],d.prototype,"currency",2),s([te({type:String})],d.prototype,"ledgerSymbol",2),s([T()],d.prototype,"activeIndex",2),s([T()],d.prototype,"completed",2),s([T()],d.prototype,"failed",2),s([T()],d.prototype,"errorMessage",2),s([T()],d.prototype,"showSuccess",2),s([T()],d.prototype,"showConfetti",2),s([T()],d.prototype,"currentSteps",2),s([T()],d.prototype,"currentAmount",2),s([T()],d.prototype,"currentCurrency",2),s([T()],d.prototype,"currentLedgerSymbol",2),s([te({type:Object})],d.prototype,"theme",2),d=s([Fe("icpay-progress-bar")],d);import{LitElement as _e,html as ge,css as ze}from"lit";import{customElement as Be,property as he}from"lit/decorators.js";var R=class extends _e{constructor(){super(...arguments);this.options=[];this.value=null;this.defaultSymbol="ICP";this.mode="buttons"}connectedCallback(){super.connectedCallback();try{ee(this,this.theme)}catch{}}updated(e){if(e.has("theme"))try{ee(this,this.theme)}catch{}}get effectiveSymbol(){if(this.value)return this.value;let e=this.options?.[0]?.symbol;return this.defaultSymbol||e||"ICP"}onSelect(e){this.value=e,this.dispatchEvent(new CustomEvent("icpay-token-change",{detail:{symbol:e},bubbles:!0,composed:!0}))}render(){let e=this.options||[];if(this.mode==="none"||e.length<=1){let i=e.length===1?e[0].symbol:this.effectiveSymbol;return this.value!==i&&queueMicrotask(()=>this.onSelect(i)),ge``}if(this.mode==="dropdown"){let i=this.effectiveSymbol;return ge`
343
+ `,s([ie({type:Boolean})],p.prototype,"open",2),s([ie({type:Array})],p.prototype,"steps",2),s([ie({type:Number})],p.prototype,"amount",2),s([ie({type:String})],p.prototype,"currency",2),s([ie({type:String})],p.prototype,"ledgerSymbol",2),s([T()],p.prototype,"activeIndex",2),s([T()],p.prototype,"completed",2),s([T()],p.prototype,"failed",2),s([T()],p.prototype,"errorMessage",2),s([T()],p.prototype,"showSuccess",2),s([T()],p.prototype,"showConfetti",2),s([T()],p.prototype,"currentSteps",2),s([T()],p.prototype,"currentAmount",2),s([T()],p.prototype,"currentCurrency",2),s([T()],p.prototype,"currentLedgerSymbol",2),s([ie({type:Object})],p.prototype,"theme",2),p=s([Ke("icpay-progress-bar")],p);import{LitElement as _e,html as ge,css as Be}from"lit";import{customElement as ze,property as he}from"lit/decorators.js";var R=class extends _e{constructor(){super(...arguments);this.options=[];this.value=null;this.defaultSymbol="ICP";this.mode="buttons"}connectedCallback(){super.connectedCallback();try{te(this,this.theme)}catch{}}updated(e){if(e.has("theme"))try{te(this,this.theme)}catch{}}get effectiveSymbol(){if(this.value)return this.value;let e=this.options?.[0]?.symbol;return this.defaultSymbol||e||"ICP"}onSelect(e){this.value=e,this.dispatchEvent(new CustomEvent("icpay-token-change",{detail:{symbol:e},bubbles:!0,composed:!0}))}render(){let e=this.options||[];if(this.mode==="none"||e.length<=1){let i=e.length===1?e[0].symbol:this.effectiveSymbol;return this.value!==i&&queueMicrotask(()=>this.onSelect(i)),ge``}if(this.mode==="dropdown"){let i=this.effectiveSymbol;return ge`
344
344
  <select @change=${r=>this.onSelect(r.target.value)}>
345
345
  ${e.map(r=>ge`<option value="${r.symbol}" ?selected=${i===r.symbol}>${r.label}<span class="icpay-token-selector-symbol"> (${r.symbol})</span></option>`)}
346
346
  </select>
@@ -353,18 +353,18 @@ var Ne=Object.defineProperty;var Ue=Object.getOwnPropertyDescriptor;var s=(o,a,e
353
353
  `)}
354
354
  </div>
355
355
  </div>
356
- `}};R.styles=ze`
356
+ `}};R.styles=Be`
357
357
  :host { display: block; }
358
358
  .crypto-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 8px; margin: 12px 0 16px; }
359
359
  .crypto-option { background: var(--icpay-surface-alt); border: 2px solid var(--icpay-border); border-radius: 12px; padding: 12px 8px; text-align: center; cursor: pointer; color: var(--icpay-text); font-weight: 600; font-size: 12px; }
360
360
  .crypto-option.selected { background: var(--icpay-primary); color: #111827; border-color: var(--icpay-primary); }
361
361
  select { background: var(--icpay-surface-alt); border: 1px solid var(--icpay-border); color: var(--icpay-text); border-radius: 8px; padding: 10px; font-weight: 600; }
362
- `,s([he({type:Array})],R.prototype,"options",2),s([he({type:String})],R.prototype,"value",2),s([he({type:String})],R.prototype,"defaultSymbol",2),s([he({type:String})],R.prototype,"mode",2),s([he({type:Object})],R.prototype,"theme",2),R=s([Be("icpay-token-selector")],R);var be=typeof window<"u",ie=null;function H(o,a,e){o&&(e!==void 0?console.log(`[ICPay Widget] ${a}`,e):console.log(`[ICPay Widget] ${a}`))}var y=class extends Ve{constructor(){super(...arguments);this.selectedSymbol="ICP";this.unlocked=!1;this.succeeded=!1;this.processing=!1;this.availableLedgers=[];this.errorMessage=null;this.errorSeverity=null;this.errorAction=null;this.walletConnected=!1;this.pendingAction=null;this.showWalletModal=!1;this.pnp=null}async tryAutoConnectPNP(){try{if(!this.config||this.config?.useOwnWallet)return;let e=localStorage.getItem("icpay:pnp");if(!e)return;let t=JSON.parse(e);if(!t?.provider||!t?.principal)return;ie||(ie=(await import("@windoge98/plug-n-play")).PNP);let i=new ie(this.config?.plugNPlay||{});this.walletConnected=!1,this.config={...this.config,connectedWallet:{owner:t.principal,principal:t.principal,connected:!1}}}catch{}}get cryptoOptions(){return this.config.cryptoOptions?this.config.cryptoOptions:this.availableLedgers}connectedCallback(){super.connectedCallback(),be&&(H(this.config?.debug||!1,"Premium content connected",{config:this.config}),this.tryAutoConnectPNP(),this.config?.cryptoOptions&&this.config.cryptoOptions.length>0||this.loadVerifiedLedgers())}updated(e){if(e.has("config")&&this.pendingAction&&this.config?.actorProvider){let t=this.pendingAction;this.pendingAction=null;try{window.dispatchEvent(new CustomEvent("icpay-sdk-wallet-connected",{detail:{walletType:"external"}}))}catch{}setTimeout(()=>{t==="pay"&&this.onPay()},0)}}async loadVerifiedLedgers(){if(!(!be||!this.config?.publishableKey))try{let t=await c(this.config).client.getVerifiedLedgers();this.availableLedgers=t.map(i=>({symbol:i.symbol,label:i.name,canisterId:i.canisterId})),this.selectedSymbol||(this.selectedSymbol=this.config?.defaultSymbol||this.availableLedgers[0]?.symbol||"ICP")}catch(e){console.warn("Failed to load verified ledgers:",e),this.availableLedgers=[{symbol:"ICP",label:"ICP",canisterId:"ryjl3-tyaaa-aaaaa-aaaba-cai"}],this.selectedSymbol||(this.selectedSymbol="ICP")}}async onPay(){if(be&&!(this.processing||this.unlocked)){H(this.config?.debug||!1,"Premium content payment started",{priceUsd:this.config.priceUsd,selectedSymbol:this.selectedSymbol,useOwnWallet:this.config.useOwnWallet}),this.errorMessage=null,this.errorSeverity=null,this.errorAction=null;try{window.dispatchEvent(new CustomEvent("icpay-sdk-method-start",{detail:{name:"pay",type:"sendUsd",amount:this.config.priceUsd,currency:this.selectedSymbol}}))}catch{}this.processing=!0;try{if(this.config.useOwnWallet){if(!this.config.actorProvider){this.pendingAction="pay",this.dispatchEvent(new CustomEvent("icpay-connect-wallet",{bubbles:!0}));return}}else if(!this.walletConnected){H(this.config?.debug||!1,"Connecting to wallet via Plug N Play");try{ie||(ie=(await import("@windoge98/plug-n-play")).PNP),this.pnp=new ie(this.config?.plugNPlay||{});let n=this.pnp.getEnabledWallets();if(H(this.config?.debug||!1,"Available wallets",n),!n?.length)throw new Error("No wallets available");this.pendingAction="pay",this.showWalletModal=!0;return}catch(n){H(this.config?.debug||!1,"Wallet connection error:",n),this.errorMessage=n instanceof Error?n.message:"Wallet connection failed",this.errorSeverity="error";return}}H(this.config?.debug||!1,"Creating SDK for payment");let e=c(this.config),i=this.cryptoOptions.find(n=>n.symbol===this.selectedSymbol).canisterId||await e.client.getLedgerCanisterIdBySymbol(this.selectedSymbol);H(this.config?.debug||!1,"Payment details",{priceUsd:this.config.priceUsd,selectedSymbol:this.selectedSymbol,canisterId:i});let r=await e.sendUsd(this.config.priceUsd,i,{context:"premium-content"});H(this.config?.debug||!1,"Payment completed",{resp:r}),this.unlocked=!0,this.succeeded=!0,this.config.onSuccess&&this.config.onSuccess({id:r.transactionId,status:r.status}),this.dispatchEvent(new CustomEvent("icpay-unlock",{detail:{amount:this.config.priceUsd,tx:r},bubbles:!0}))}catch(e){k(e,{onError:t=>{this.dispatchEvent(new CustomEvent("icpay-error",{detail:t,bubbles:!0})),$(t)&&(this.errorMessage=W(t),this.errorSeverity=C(t),this.errorAction=L(t))}})}finally{this.processing=!1}}}select(e){this.selectedSymbol=e}getWalletId(e){return e&&(e.id||e.provider||e.key)||""}getWalletLabel(e){return e&&(e.label||e.name||e.title||e.id)||"Wallet"}getWalletIcon(e){return e&&(e.icon||e.logo||e.image)||null}async connectWithWallet(e){if(this.pnp)try{if(!e)throw new Error("No wallet ID provided");let t=await this.pnp.connect(e);if(!!!(t&&(t.connected===!0||t.principal||t.owner||this.pnp?.account)))throw new Error("Wallet connection was rejected");this.walletConnected=!0;try{window.dispatchEvent(new CustomEvent("icpay-sdk-wallet-connected",{detail:{walletType:e}}))}catch{}this.config={...this.config,connectedWallet:t,actorProvider:(n,l)=>this.pnp.getActor({canisterId:n,idl:l,requiresSigning:!0,anon:!1})},this.showWalletModal=!1;let r=this.pendingAction;this.pendingAction=null,r==="pay"&&setTimeout(()=>this.onPay(),0)}catch(t){this.errorMessage=t instanceof Error?t.message:"Wallet connection failed",this.errorSeverity="error",this.showWalletModal=!1}}render(){return this.config?_`
362
+ `,s([he({type:Array})],R.prototype,"options",2),s([he({type:String})],R.prototype,"value",2),s([he({type:String})],R.prototype,"defaultSymbol",2),s([he({type:String})],R.prototype,"mode",2),s([he({type:Object})],R.prototype,"theme",2),R=s([ze("icpay-token-selector")],R);var be=typeof window<"u",se=null;function G(o,a,e){o&&(e!==void 0?console.log(`[ICPay Widget] ${a}`,e):console.log(`[ICPay Widget] ${a}`))}var b=class extends Ve{constructor(){super(...arguments);this.selectedSymbol="ICP";this.unlocked=!1;this.succeeded=!1;this.processing=!1;this.availableLedgers=[];this.errorMessage=null;this.errorSeverity=null;this.errorAction=null;this.walletConnected=!1;this.pendingAction=null;this.showWalletModal=!1;this.pnp=null}async tryAutoConnectPNP(){try{if(!this.config||this.config?.useOwnWallet)return;let e=localStorage.getItem("icpay:pnp");if(!e)return;let t=JSON.parse(e);if(!t?.provider||!t?.principal)return;se||(se=(await import("@windoge98/plug-n-play")).PNP);let i=new se(this.config?.plugNPlay||{});this.walletConnected=!1,this.config={...this.config,connectedWallet:{owner:t.principal,principal:t.principal,connected:!1}}}catch{}}get cryptoOptions(){return this.config.cryptoOptions?this.config.cryptoOptions:this.availableLedgers}connectedCallback(){super.connectedCallback(),be&&(G(this.config?.debug||!1,"Premium content connected",{config:this.config}),this.tryAutoConnectPNP(),this.config?.cryptoOptions&&this.config.cryptoOptions.length>0||this.loadVerifiedLedgers())}updated(e){if(e.has("config")&&this.pendingAction&&this.config?.actorProvider){let t=this.pendingAction;this.pendingAction=null;try{window.dispatchEvent(new CustomEvent("icpay-sdk-wallet-connected",{detail:{walletType:"external"}}))}catch{}setTimeout(()=>{t==="pay"&&this.onPay()},0)}}async loadVerifiedLedgers(){if(!(!be||!this.config?.publishableKey))try{let t=await d(this.config).client.getVerifiedLedgers();this.availableLedgers=t.map(i=>({symbol:i.symbol,label:i.name,canisterId:i.canisterId})),this.selectedSymbol||(this.selectedSymbol=this.config?.defaultSymbol||this.availableLedgers[0]?.symbol||"ICP")}catch(e){console.warn("Failed to load verified ledgers:",e),this.availableLedgers=[{symbol:"ICP",label:"ICP",canisterId:"ryjl3-tyaaa-aaaaa-aaaba-cai"}],this.selectedSymbol||(this.selectedSymbol="ICP")}}async onPay(){if(be&&!(this.processing||this.unlocked)){G(this.config?.debug||!1,"Premium content payment started",{priceUsd:this.config.priceUsd,selectedSymbol:this.selectedSymbol,useOwnWallet:this.config.useOwnWallet}),this.errorMessage=null,this.errorSeverity=null,this.errorAction=null;try{window.dispatchEvent(new CustomEvent("icpay-sdk-method-start",{detail:{name:"pay",type:"sendUsd",amount:this.config.priceUsd,currency:this.selectedSymbol}}))}catch{}this.processing=!0;try{if(this.config.useOwnWallet){if(!this.config.actorProvider){this.pendingAction="pay",this.dispatchEvent(new CustomEvent("icpay-connect-wallet",{bubbles:!0}));return}}else if(!this.walletConnected){G(this.config?.debug||!1,"Connecting to wallet via Plug N Play");try{se||(se=(await import("@windoge98/plug-n-play")).PNP),this.pnp=new se(this.config?.plugNPlay||{});let n=this.pnp.getEnabledWallets();if(G(this.config?.debug||!1,"Available wallets",n),!n?.length)throw new Error("No wallets available");this.pendingAction="pay",this.showWalletModal=!0;return}catch(n){G(this.config?.debug||!1,"Wallet connection error:",n),this.errorMessage=n instanceof Error?n.message:"Wallet connection failed",this.errorSeverity="error";return}}G(this.config?.debug||!1,"Creating SDK for payment");let e=d(this.config),i=this.cryptoOptions.find(n=>n.symbol===this.selectedSymbol).canisterId||await e.client.getLedgerCanisterIdBySymbol(this.selectedSymbol);G(this.config?.debug||!1,"Payment details",{priceUsd:this.config.priceUsd,selectedSymbol:this.selectedSymbol,canisterId:i});let r=await e.sendUsd(this.config.priceUsd,i,{context:"premium-content"});G(this.config?.debug||!1,"Payment completed",{resp:r}),this.unlocked=!0,this.succeeded=!0,this.config.onSuccess&&this.config.onSuccess({id:r.transactionId,status:r.status}),this.dispatchEvent(new CustomEvent("icpay-unlock",{detail:{amount:this.config.priceUsd,tx:r},bubbles:!0}))}catch(e){k(e,{onError:t=>{this.dispatchEvent(new CustomEvent("icpay-error",{detail:t,bubbles:!0})),$(t)&&(this.errorMessage=W(t),this.errorSeverity=C(t),this.errorAction=L(t))}})}finally{this.processing=!1}}}select(e){this.selectedSymbol=e}getWalletId(e){return e&&(e.id||e.provider||e.key)||""}getWalletLabel(e){return e&&(e.label||e.name||e.title||e.id)||"Wallet"}getWalletIcon(e){return e&&(e.icon||e.logo||e.image)||null}async connectWithWallet(e){if(this.pnp)try{if(!e)throw new Error("No wallet ID provided");let t=await this.pnp.connect(e);if(!!!(t&&(t.connected===!0||t.principal||t.owner||this.pnp?.account)))throw new Error("Wallet connection was rejected");this.walletConnected=!0;try{window.dispatchEvent(new CustomEvent("icpay-sdk-wallet-connected",{detail:{walletType:e}}))}catch{}this.config={...this.config,connectedWallet:t,actorProvider:(n,l)=>this.pnp.getActor({canisterId:n,idl:l,requiresSigning:!0,anon:!1})},this.showWalletModal=!1;let r=this.pendingAction;this.pendingAction=null,r==="pay"&&setTimeout(()=>this.onPay(),0)}catch(t){this.errorMessage=t instanceof Error?t.message:"Wallet connection failed",this.errorSeverity="error",this.showWalletModal=!1}}render(){return this.config?B`
363
363
  <div class="card section">
364
- ${this.config?.progressBar?.enabled!==!1?_`<icpay-progress-bar mode="${this.config?.progressBar?.mode||"modal"}"></icpay-progress-bar>`:null}
364
+ ${this.config?.progressBar?.enabled!==!1?B`<icpay-progress-bar mode="${this.config?.progressBar?.mode||"modal"}"></icpay-progress-bar>`:null}
365
365
  <div class="image-container">
366
366
  <div class="locked-image ${this.unlocked?"unlocked":""}" style="background-image:url('${this.config.imageUrl||""}')"></div>
367
- ${this.unlocked?null:_`<div class="lock-overlay">🔒</div>`}
367
+ ${this.unlocked?null:B`<div class="lock-overlay">🔒</div>`}
368
368
  </div>
369
369
 
370
370
  <div class="pricing">
@@ -386,24 +386,24 @@ var Ne=Object.defineProperty;var Ue=Object.getOwnPropertyDescriptor;var s=(o,a,e
386
386
  ${this.unlocked?"Unlocked":this.processing?"Processing\u2026":(this.config?.buttonLabel||"Pay ${amount} with {symbol}").replace("{amount}",`${Number(this.config?.priceUsd??0).toFixed(2)}`).replace("{symbol}",this.selectedSymbol)}
387
387
  </button>
388
388
 
389
- ${this.errorMessage?_`
389
+ ${this.errorMessage?B`
390
390
  <div class="error-message ${this.errorSeverity}" style="margin-top: 12px; padding: 8px 12px; border-radius: 6px; font-size: 14px; text-align: center;">
391
391
  ${this.errorMessage}
392
- ${this.errorAction?_`
392
+ ${this.errorAction?B`
393
393
  <button style="margin-left: 8px; padding: 4px 8px; background: transparent; border: 1px solid currentColor; border-radius: 4px; font-size: 12px; cursor: pointer;">
394
394
  ${this.errorAction}
395
395
  </button>
396
396
  `:""}
397
397
  </div>
398
398
  `:""}
399
- ${(()=>{let e=this.pnp?.getEnabledWallets?.()||[];return this.showWalletModal&&this.pnp?_`
399
+ ${(()=>{let e=this.pnp?.getEnabledWallets?.()||[];return this.showWalletModal&&this.pnp?B`
400
400
  <div style="position:fixed;inset:0;display:flex;align-items:center;justify-content:center;background:rgba(0,0,0,0.55);z-index:9999">
401
401
  <div class="card section" style="width:380px;border-radius:12px">
402
402
  <div class="label" style="font-weight:700;margin-bottom:12px;text-align:center">Choose Wallet</div>
403
403
  <div style="display:grid;grid-template-columns:1fr;gap:10px;margin-bottom:12px">
404
- ${e.map(t=>{let i=this.getWalletId(t),r=this.getWalletLabel(t),n=this.getWalletIcon(t);return _`
404
+ ${e.map(t=>{let i=this.getWalletId(t),r=this.getWalletLabel(t),n=this.getWalletIcon(t);return B`
405
405
  <button class="pay-button" style="display:flex;align-items:center;gap:10px;justify-content:center;padding:12px" @click=${()=>this.connectWithWallet(i)}>
406
- ${n?_`<img src="${n}" alt="${r}" style="width:20px;height:20px;border-radius:4px;object-fit:contain;background:transparent" />`:""}
406
+ ${n?B`<img src="${n}" alt="${r}" style="width:20px;height:20px;border-radius:4px;object-fit:contain;background:transparent" />`:""}
407
407
  <span>${r}</span>
408
408
  </button>`})}
409
409
  </div>
@@ -414,7 +414,7 @@ var Ne=Object.defineProperty;var Ue=Object.getOwnPropertyDescriptor;var s=(o,a,e
414
414
  </div>
415
415
  `:null})()}
416
416
  </div>
417
- `:_`<div class="card section">Loading...</div>`}};y.styles=[S,He`
417
+ `:B`<div class="card section">Loading...</div>`}};b.styles=[S,He`
418
418
  .image-container {
419
419
  position: relative;
420
420
  border-radius: 16px;
@@ -465,24 +465,24 @@ var Ne=Object.defineProperty;var Ue=Object.getOwnPropertyDescriptor;var s=(o,a,e
465
465
  border-color: rgba(239, 68, 68, 0.3);
466
466
  color: #ef4444;
467
467
  }
468
- `],s([Ge({type:Object})],y.prototype,"config",2),s([I()],y.prototype,"selectedSymbol",2),s([I()],y.prototype,"unlocked",2),s([I()],y.prototype,"succeeded",2),s([I()],y.prototype,"processing",2),s([I()],y.prototype,"availableLedgers",2),s([I()],y.prototype,"errorMessage",2),s([I()],y.prototype,"errorSeverity",2),s([I()],y.prototype,"errorAction",2),s([I()],y.prototype,"walletConnected",2),s([I()],y.prototype,"pendingAction",2),s([I()],y.prototype,"showWalletModal",2),y=s([qe("icpay-premium-content")],y);import{LitElement as Ye,html as P,css as Qe}from"lit";import{customElement as Xe,property as Ze,state as A}from"lit/decorators.js";var me=typeof window<"u",re=null;function q(o,a,e){o&&(e!==void 0?console.log(`[ICPay Widget] ${a}`,e):console.log(`[ICPay Widget] ${a}`))}var h=class extends Ye{constructor(){super(...arguments);this.selectedAmount=1;this.selectedSymbol="ICP";this.total=0;this.processing=!1;this.succeeded=!1;this.availableLedgers=[];this.errorMessage=null;this.errorSeverity=null;this.errorAction=null;this.walletConnected=!1;this.pendingAction=null;this.showWalletModal=!1;this.pnp=null}async tryAutoConnectPNP(){try{if(!this.config||this.config?.useOwnWallet)return;let e=localStorage.getItem("icpay:pnp");if(!e)return;let t=JSON.parse(e);if(!t?.provider||!t?.principal)return;re||(re=(await import("@windoge98/plug-n-play")).PNP);let i=new re(this.config?.plugNPlay||{});this.walletConnected=!1,this.config={...this.config,connectedWallet:{owner:t.principal,principal:t.principal,connected:!1}}}catch{}}get amounts(){return this.config?.amountsUsd||[1,5,10]}get cryptoOptions(){return this.config.cryptoOptions?this.config.cryptoOptions:this.availableLedgers}connectedCallback(){super.connectedCallback(),me&&(q(this.config?.debug||!1,"Tip jar connected",{config:this.config}),this.config&&this.config.defaultAmountUsd&&(this.selectedAmount=this.config.defaultAmountUsd),this.tryAutoConnectPNP(),this.config?.cryptoOptions&&this.config.cryptoOptions.length>0||this.loadVerifiedLedgers(),this.config?.defaultSymbol&&(this.selectedSymbol=this.config.defaultSymbol))}updated(e){if(e.has("config")&&this.pendingAction&&this.config?.actorProvider){let t=this.pendingAction;this.pendingAction=null;try{window.dispatchEvent(new CustomEvent("icpay-sdk-wallet-connected",{detail:{walletType:"external"}}))}catch{}setTimeout(()=>{t==="tip"&&this.tip()},0)}}async loadVerifiedLedgers(){if(!(!me||!this.config?.publishableKey))try{let t=await c(this.config).client.getVerifiedLedgers();this.availableLedgers=t.map(i=>({symbol:i.symbol,label:i.name,canisterId:i.canisterId})),this.config?.cryptoOptions&&this.config.cryptoOptions.length===1&&(this.selectedSymbol=this.config.cryptoOptions[0].symbol),!this.selectedSymbol&&this.availableLedgers.length>0&&(this.selectedSymbol=this.config?.defaultSymbol||this.availableLedgers[0].symbol)}catch(e){console.warn("Failed to load verified ledgers:",e),this.availableLedgers=[{symbol:"ICP",label:"ICP",canisterId:"ryjl3-tyaaa-aaaaa-aaaba-cai"}],this.selectedSymbol||(this.selectedSymbol="ICP")}}selectAmount(e){this.selectedAmount=e}selectSymbol(e){this.selectedSymbol=e}get fillPercentage(){return Math.min(this.total/50*100,100)}async tip(){if(me&&(q(this.config?.debug||!1,"Tip button clicked!",{config:this.config,processing:this.processing}),!this.processing)){this.errorMessage=null,this.errorSeverity=null,this.errorAction=null;try{window.dispatchEvent(new CustomEvent("icpay-sdk-method-start",{detail:{name:"tip",type:"sendUsd",amount:this.selectedAmount,currency:this.selectedSymbol}}))}catch{}this.processing=!0;try{if(this.config.useOwnWallet){if(!this.config.actorProvider){this.pendingAction="tip",this.dispatchEvent(new CustomEvent("icpay-connect-wallet",{bubbles:!0}));return}}else if(!this.walletConnected){q(this.config?.debug||!1,"Connecting to wallet via Plug N Play");try{re||(re=(await import("@windoge98/plug-n-play")).PNP),this.pnp=new re(this.config?.plugNPlay||{});let n=this.pnp.getEnabledWallets();if(q(this.config?.debug||!1,"Available wallets",n),!n?.length)throw new Error("No wallets available");this.pendingAction="tip",this.showWalletModal=!0;return}catch(n){q(this.config?.debug||!1,"Wallet connection error:",n),this.errorMessage=n instanceof Error?n.message:"Wallet connection failed",this.errorSeverity="error";return}}q(this.config?.debug||!1,"Creating SDK for payment");let e=c(this.config),i=this.cryptoOptions.find(n=>n.symbol===this.selectedSymbol).canisterId||await e.client.getLedgerCanisterIdBySymbol(this.selectedSymbol);q(this.config?.debug||!1,"Tip payment details",{amount:this.selectedAmount,selectedSymbol:this.selectedSymbol,canisterId:i});let r=await e.sendUsd(this.selectedAmount,i,{context:"tip-jar"});q(this.config?.debug||!1,"Tip payment completed",{resp:r}),this.total+=this.selectedAmount,this.succeeded=!0,this.config.onSuccess&&this.config.onSuccess({id:r.transactionId,status:r.status,total:this.total}),this.dispatchEvent(new CustomEvent("icpay-tip",{detail:{amount:this.selectedAmount,tx:r},bubbles:!0}))}catch(e){k(e,{onError:t=>{this.dispatchEvent(new CustomEvent("icpay-error",{detail:t,bubbles:!0})),$(t)&&(this.errorMessage=W(t),this.errorSeverity=C(t),this.errorAction=L(t))}})}finally{this.processing=!1}}}getWalletId(e){return e&&(e.id||e.provider||e.key)||""}getWalletLabel(e){return e&&(e.label||e.name||e.title||e.id)||"Wallet"}getWalletIcon(e){return e&&(e.icon||e.logo||e.image)||null}async connectWithWallet(e){if(this.pnp)try{if(!e)throw new Error("No wallet ID provided");let t=await this.pnp.connect(e);if(!!!(t&&(t.connected===!0||t.principal||t.owner||this.pnp?.account)))throw new Error("Wallet connection was rejected");this.walletConnected=!0;try{window.dispatchEvent(new CustomEvent("icpay-sdk-wallet-connected",{detail:{walletType:e}}))}catch{}this.config={...this.config,connectedWallet:t,actorProvider:(n,l)=>this.pnp.getActor({canisterId:n,idl:l,requiresSigning:!0,anon:!1})},this.showWalletModal=!1;let r=this.pendingAction;this.pendingAction=null,r==="tip"&&setTimeout(()=>this.tip(),0)}catch(t){this.errorMessage=t instanceof Error?t.message:"Wallet connection failed",this.errorSeverity="error",this.showWalletModal=!1}}render(){return this.config?P`
468
+ `],s([Ge({type:Object})],b.prototype,"config",2),s([N()],b.prototype,"selectedSymbol",2),s([N()],b.prototype,"unlocked",2),s([N()],b.prototype,"succeeded",2),s([N()],b.prototype,"processing",2),s([N()],b.prototype,"availableLedgers",2),s([N()],b.prototype,"errorMessage",2),s([N()],b.prototype,"errorSeverity",2),s([N()],b.prototype,"errorAction",2),s([N()],b.prototype,"walletConnected",2),s([N()],b.prototype,"pendingAction",2),s([N()],b.prototype,"showWalletModal",2),b=s([qe("icpay-premium-content")],b);import{LitElement as Ye,html as P,css as Qe}from"lit";import{customElement as Xe,property as Ze,state as M}from"lit/decorators.js";var me=typeof window<"u",ne=null;function Y(o,a,e){o&&(e!==void 0?console.log(`[ICPay Widget] ${a}`,e):console.log(`[ICPay Widget] ${a}`))}var u=class extends Ye{constructor(){super(...arguments);this.selectedAmount=1;this.selectedSymbol="ICP";this.total=0;this.processing=!1;this.succeeded=!1;this.availableLedgers=[];this.errorMessage=null;this.errorSeverity=null;this.errorAction=null;this.walletConnected=!1;this.pendingAction=null;this.showWalletModal=!1;this.pnp=null}async tryAutoConnectPNP(){try{if(!this.config||this.config?.useOwnWallet)return;let e=localStorage.getItem("icpay:pnp");if(!e)return;let t=JSON.parse(e);if(!t?.provider||!t?.principal)return;ne||(ne=(await import("@windoge98/plug-n-play")).PNP);let i=new ne(this.config?.plugNPlay||{});this.walletConnected=!1,this.config={...this.config,connectedWallet:{owner:t.principal,principal:t.principal,connected:!1}}}catch{}}get amounts(){return this.config?.amountsUsd||[1,5,10]}get cryptoOptions(){return this.config.cryptoOptions?this.config.cryptoOptions:this.availableLedgers}connectedCallback(){super.connectedCallback(),me&&(Y(this.config?.debug||!1,"Tip jar connected",{config:this.config}),this.config&&this.config.defaultAmountUsd&&(this.selectedAmount=this.config.defaultAmountUsd),this.tryAutoConnectPNP(),this.config?.cryptoOptions&&this.config.cryptoOptions.length>0||this.loadVerifiedLedgers(),this.config?.defaultSymbol&&(this.selectedSymbol=this.config.defaultSymbol))}updated(e){if(e.has("config")&&this.pendingAction&&this.config?.actorProvider){let t=this.pendingAction;this.pendingAction=null;try{window.dispatchEvent(new CustomEvent("icpay-sdk-wallet-connected",{detail:{walletType:"external"}}))}catch{}setTimeout(()=>{t==="tip"&&this.tip()},0)}}async loadVerifiedLedgers(){if(!(!me||!this.config?.publishableKey))try{let t=await d(this.config).client.getVerifiedLedgers();this.availableLedgers=t.map(i=>({symbol:i.symbol,label:i.name,canisterId:i.canisterId})),this.config?.cryptoOptions&&this.config.cryptoOptions.length===1&&(this.selectedSymbol=this.config.cryptoOptions[0].symbol),!this.selectedSymbol&&this.availableLedgers.length>0&&(this.selectedSymbol=this.config?.defaultSymbol||this.availableLedgers[0].symbol)}catch(e){console.warn("Failed to load verified ledgers:",e),this.availableLedgers=[{symbol:"ICP",label:"ICP",canisterId:"ryjl3-tyaaa-aaaaa-aaaba-cai"}],this.selectedSymbol||(this.selectedSymbol="ICP")}}selectAmount(e){this.selectedAmount=e}selectSymbol(e){this.selectedSymbol=e}get fillPercentage(){return Math.min(this.total/50*100,100)}async tip(){if(me&&(Y(this.config?.debug||!1,"Tip button clicked!",{config:this.config,processing:this.processing}),!this.processing)){this.errorMessage=null,this.errorSeverity=null,this.errorAction=null;try{window.dispatchEvent(new CustomEvent("icpay-sdk-method-start",{detail:{name:"tip",type:"sendUsd",amount:this.selectedAmount,currency:this.selectedSymbol}}))}catch{}this.processing=!0;try{if(this.config.useOwnWallet){if(!this.config.actorProvider){this.pendingAction="tip",this.dispatchEvent(new CustomEvent("icpay-connect-wallet",{bubbles:!0}));return}}else if(!this.walletConnected){Y(this.config?.debug||!1,"Connecting to wallet via Plug N Play");try{ne||(ne=(await import("@windoge98/plug-n-play")).PNP),this.pnp=new ne(this.config?.plugNPlay||{});let n=this.pnp.getEnabledWallets();if(Y(this.config?.debug||!1,"Available wallets",n),!n?.length)throw new Error("No wallets available");this.pendingAction="tip",this.showWalletModal=!0;return}catch(n){Y(this.config?.debug||!1,"Wallet connection error:",n),this.errorMessage=n instanceof Error?n.message:"Wallet connection failed",this.errorSeverity="error";return}}Y(this.config?.debug||!1,"Creating SDK for payment");let e=d(this.config),i=this.cryptoOptions.find(n=>n.symbol===this.selectedSymbol).canisterId||await e.client.getLedgerCanisterIdBySymbol(this.selectedSymbol);Y(this.config?.debug||!1,"Tip payment details",{amount:this.selectedAmount,selectedSymbol:this.selectedSymbol,canisterId:i});let r=await e.sendUsd(this.selectedAmount,i,{context:"tip-jar"});Y(this.config?.debug||!1,"Tip payment completed",{resp:r}),this.total+=this.selectedAmount,this.succeeded=!0,this.config.onSuccess&&this.config.onSuccess({id:r.transactionId,status:r.status,total:this.total}),this.dispatchEvent(new CustomEvent("icpay-tip",{detail:{amount:this.selectedAmount,tx:r},bubbles:!0}))}catch(e){k(e,{onError:t=>{this.dispatchEvent(new CustomEvent("icpay-error",{detail:t,bubbles:!0})),$(t)&&(this.errorMessage=W(t),this.errorSeverity=C(t),this.errorAction=L(t))}})}finally{this.processing=!1}}}getWalletId(e){return e&&(e.id||e.provider||e.key)||""}getWalletLabel(e){return e&&(e.label||e.name||e.title||e.id)||"Wallet"}getWalletIcon(e){return e&&(e.icon||e.logo||e.image)||null}async connectWithWallet(e){if(this.pnp)try{if(!e)throw new Error("No wallet ID provided");let t=await this.pnp.connect(e);if(!!!(t&&(t.connected===!0||t.principal||t.owner||this.pnp?.account)))throw new Error("Wallet connection was rejected");this.walletConnected=!0;try{window.dispatchEvent(new CustomEvent("icpay-sdk-wallet-connected",{detail:{walletType:e}}))}catch{}this.config={...this.config,connectedWallet:t,actorProvider:(n,l)=>this.pnp.getActor({canisterId:n,idl:l,requiresSigning:!0,anon:!1})},this.showWalletModal=!1;let r=this.pendingAction;this.pendingAction=null,r==="tip"&&setTimeout(()=>this.tip(),0)}catch(t){this.errorMessage=t instanceof Error?t.message:"Wallet connection failed",this.errorSeverity="error",this.showWalletModal=!1}}render(){if(!this.config)return P`<div class="card section">Loading...</div>`;let t=(this.cryptoOptions?.length||0)>1,i=this.config?.showLedgerDropdown,r=i==="dropdown"?"dropdown":i==="none"?"none":"buttons",n=r!=="none"&&(t||r==="dropdown"),l=r==="dropdown"?"dropdown":t?"buttons":"none";return P`
469
469
  <div class="card section" style="text-align:center;">
470
- ${this.config?.progressBar?.enabled!==!1?P`<icpay-progress-bar mode="${this.config?.progressBar?.mode||"modal"}"></icpay-progress-bar>`:null}
470
+ ${this.config?.progressBar?.enabled!==!1?P`<icpay-progress-bar></icpay-progress-bar>`:null}
471
471
  <div class="jar"><div class="fill" style="height:${this.fillPercentage}%"></div></div>
472
472
  <div class="label">Total Tips: $${this.total}</div>
473
473
 
474
474
  <div class="amounts">
475
- ${this.amounts.map(e=>P`<div class="chip ${this.selectedAmount===e?"selected":""}" @click=${()=>this.selectAmount(e)}>$${e}</div>`)}
475
+ ${this.amounts.map(c=>P`<div class="chip ${this.selectedAmount===c?"selected":""}" @click=${()=>this.selectAmount(c)}>$${c}</div>`)}
476
476
  </div>
477
477
 
478
- ${this.config?.showLedgerDropdown===!0?P`
478
+ ${n?P`
479
479
  <div>
480
480
  <icpay-token-selector
481
481
  .options=${this.cryptoOptions}
482
482
  .value=${this.selectedSymbol||""}
483
483
  .defaultSymbol=${this.config?.defaultSymbol||"ICP"}
484
- mode=${this.config?.showLedgerDropdown||"buttons"}
485
- @icpay-token-change=${e=>this.selectSymbol(e.detail.symbol)}
484
+ mode=${l}
485
+ @icpay-token-change=${c=>this.selectSymbol(c.detail.symbol)}
486
486
  ></icpay-token-selector>
487
487
  </div>
488
488
  `:null}
@@ -503,15 +503,15 @@ var Ne=Object.defineProperty;var Ue=Object.getOwnPropertyDescriptor;var s=(o,a,e
503
503
  `:""}
504
504
  </div>
505
505
  `:""}
506
- ${(()=>{let e=this.pnp?.getEnabledWallets?.()||[];return this.showWalletModal&&this.pnp?P`
506
+ ${(()=>{let c=this.pnp?.getEnabledWallets?.()||[];return this.showWalletModal&&this.pnp?P`
507
507
  <div style="position:fixed;inset:0;display:flex;align-items:center;justify-content:center;background:rgba(0,0,0,0.55);z-index:9999">
508
508
  <div class="card section" style="width:380px;border-radius:12px">
509
509
  <div class="label" style="font-weight:700;margin-bottom:12px;text-align:center">Choose Wallet</div>
510
510
  <div style="display:grid;grid-template-columns:1fr;gap:10px;margin-bottom:12px">
511
- ${e.map(t=>{let i=this.getWalletId(t),r=this.getWalletLabel(t),n=this.getWalletIcon(t);return P`
512
- <button class="pay-button" style="display:flex;align-items:center;gap:10px;justify-content:center;padding:12px" @click=${()=>this.connectWithWallet(i)}>
513
- ${n?P`<img src="${n}" alt="${r}" style="width:20px;height:20px;border-radius:4px;object-fit:contain;background:transparent" />`:""}
514
- <span>${r}</span>
511
+ ${c.map(h=>{let F=this.getWalletId(h),q=this.getWalletLabel(h),A=this.getWalletIcon(h);return P`
512
+ <button class="pay-button" style="display:flex;align-items:center;gap:10px;justify-content:center;padding:12px" @click=${()=>this.connectWithWallet(F)}>
513
+ ${A?P`<img src="${A}" alt="${q}" style="width:20px;height:20px;border-radius:4px;object-fit:contain;background:transparent" />`:""}
514
+ <span>${q}</span>
515
515
  </button>`})}
516
516
  </div>
517
517
  <button class="pay-button" style="background:#6b7280;color:#f9fafb" @click=${()=>{this.showWalletModal=!1}}>
@@ -521,7 +521,7 @@ var Ne=Object.defineProperty;var Ue=Object.getOwnPropertyDescriptor;var s=(o,a,e
521
521
  </div>
522
522
  `:null})()}
523
523
  </div>
524
- `:P`<div class="card section">Loading...</div>`}};h.styles=[S,Qe`
524
+ `}};u.styles=[S,Qe`
525
525
  .jar { width: 120px; height: 160px; margin: 0 auto 12px; position: relative; background: linear-gradient(135deg, #374151 0%, #4b5563 100%); border-radius: 0 0 60px 60px; border: 3px solid #6b7280; border-top: 8px solid #6b7280; overflow: hidden; }
526
526
  .fill { position: absolute; bottom: 0; left: 0; right: 0; background: linear-gradient(135deg, #d1d5db 0%, #9ca3af 100%); transition: height 0.8s ease; height: 0%; }
527
527
  .amounts { display: grid; grid-template-columns: repeat(3,1fr); gap: 8px; margin: 12px 0; }
@@ -553,9 +553,9 @@ var Ne=Object.defineProperty;var Ue=Object.getOwnPropertyDescriptor;var s=(o,a,e
553
553
  border-color: rgba(239, 68, 68, 0.3);
554
554
  color: #ef4444;
555
555
  }
556
- `],s([Ze({type:Object})],h.prototype,"config",2),s([A()],h.prototype,"selectedAmount",2),s([A()],h.prototype,"selectedSymbol",2),s([A()],h.prototype,"total",2),s([A()],h.prototype,"processing",2),s([A()],h.prototype,"succeeded",2),s([A()],h.prototype,"availableLedgers",2),s([A()],h.prototype,"errorMessage",2),s([A()],h.prototype,"errorSeverity",2),s([A()],h.prototype,"errorAction",2),s([A()],h.prototype,"walletConnected",2),s([A()],h.prototype,"pendingAction",2),s([A()],h.prototype,"showWalletModal",2),h=s([Xe("icpay-tip-jar")],h);import{LitElement as Je,html as G,css as et}from"lit";import{customElement as tt,property as ye,state as N}from"lit/decorators.js";var ve=typeof window<"u",ne=null;function Y(o,a,e){o&&(e!==void 0?console.log(`[ICPay Widget] ${a}`,e):console.log(`[ICPay Widget] ${a}`))}var p=class extends Je{constructor(){super(...arguments);this.title="Article Title";this.preview="";this.lockedContent="";this.selectedSymbol="ICP";this.unlocked=!1;this.succeeded=!1;this.processing=!1;this.availableLedgers=[];this.errorMessage=null;this.errorSeverity=null;this.errorAction=null;this.walletConnected=!1;this.pendingAction=null;this.showWalletModal=!1;this.pnp=null}async tryAutoConnectPNP(){try{if(!this.config||this.config?.useOwnWallet)return;let e=localStorage.getItem("icpay:pnp");if(!e)return;let t=JSON.parse(e);if(!t?.provider||!t?.principal)return;ne||(ne=(await import("@windoge98/plug-n-play")).PNP);let i=new ne(this.config?.plugNPlay||{});this.walletConnected=!1,this.config={...this.config,connectedWallet:{owner:t.principal,principal:t.principal,connected:!1}}}catch{}}get cryptoOptions(){return this.config.cryptoOptions?this.config.cryptoOptions:this.availableLedgers}connectedCallback(){super.connectedCallback(),ve&&(Y(this.config?.debug||!1,"Article paywall connected",{config:this.config}),this.config&&(typeof this.config.title=="string"&&(this.title=this.config.title),typeof this.config.preview=="string"&&(this.preview=this.config.preview),typeof this.config.lockedContent=="string"&&(this.lockedContent=this.config.lockedContent)),this.tryAutoConnectPNP(),this.config?.cryptoOptions&&this.config.cryptoOptions.length>0||this.loadVerifiedLedgers())}updated(e){if(e.has("config")&&this.config&&(typeof this.config.title=="string"&&(this.title=this.config.title),typeof this.config.preview=="string"&&(this.preview=this.config.preview),typeof this.config.lockedContent=="string"&&(this.lockedContent=this.config.lockedContent)),e.has("config")&&this.pendingAction&&this.config?.actorProvider){let t=this.pendingAction;this.pendingAction=null;try{window.dispatchEvent(new CustomEvent("icpay-sdk-wallet-connected",{detail:{walletType:"external"}}))}catch{}setTimeout(()=>{t==="unlock"&&this.unlock()},0)}}async loadVerifiedLedgers(){if(!(!ve||!this.config?.publishableKey))try{let t=await c(this.config).client.getVerifiedLedgers();this.availableLedgers=t.map(i=>({symbol:i.symbol,label:i.name,canisterId:i.canisterId})),this.selectedSymbol||(this.selectedSymbol=this.config?.defaultSymbol||this.availableLedgers[0]?.symbol||"ICP")}catch(e){console.warn("Failed to load verified ledgers:",e),this.availableLedgers=[{symbol:"ICP",label:"ICP",canisterId:"ryjl3-tyaaa-aaaaa-aaaba-cai"}],this.selectedSymbol||(this.selectedSymbol="ICP")}}selectSymbol(e){this.selectedSymbol=e}async unlock(){if(ve&&!(this.processing||this.unlocked)){Y(this.config?.debug||!1,"Article paywall unlock started",{priceUsd:this.config.priceUsd,selectedSymbol:this.selectedSymbol,useOwnWallet:this.config.useOwnWallet}),this.errorMessage=null,this.errorSeverity=null,this.errorAction=null;try{window.dispatchEvent(new CustomEvent("icpay-sdk-method-start",{detail:{name:"unlock",type:"sendUsd",amount:this.config.priceUsd,currency:this.selectedSymbol}}))}catch{}this.processing=!0;try{if(this.config.useOwnWallet){if(!this.config.actorProvider){this.pendingAction="unlock",this.dispatchEvent(new CustomEvent("icpay-connect-wallet",{bubbles:!0}));return}}else if(!this.walletConnected){Y(this.config?.debug||!1,"Connecting to wallet via Plug N Play");try{ne||(ne=(await import("@windoge98/plug-n-play")).PNP),this.pnp=new ne(this.config?.plugNPlay||{});let n=this.pnp.getEnabledWallets();if(Y(this.config?.debug||!1,"Available wallets",n),!n?.length)throw new Error("No wallets available");this.pendingAction="unlock",this.showWalletModal=!0;return}catch(n){Y(this.config?.debug||!1,"Wallet connection error:",n),this.errorMessage=n instanceof Error?n.message:"Wallet connection failed",this.errorSeverity="error";return}}Y(this.config?.debug||!1,"Creating SDK for payment");let e=c(this.config),i=this.cryptoOptions.find(n=>n.symbol===this.selectedSymbol).canisterId||await e.client.getLedgerCanisterIdBySymbol(this.selectedSymbol);Y(this.config?.debug||!1,"Article payment details",{priceUsd:this.config.priceUsd,selectedSymbol:this.selectedSymbol,canisterId:i});let r=await e.sendUsd(this.config.priceUsd,i,{context:"article"});Y(this.config?.debug||!1,"Article payment completed",{resp:r}),this.unlocked=!0,this.succeeded=!0,this.config.onSuccess&&this.config.onSuccess({id:r.transactionId,status:r.status}),this.dispatchEvent(new CustomEvent("icpay-unlock",{detail:{amount:this.config.priceUsd,tx:r},bubbles:!0}))}catch(e){k(e,{onError:t=>{this.dispatchEvent(new CustomEvent("icpay-error",{detail:t,bubbles:!0})),$(t)&&(this.errorMessage=W(t),this.errorSeverity=C(t),this.errorAction=L(t))}})}finally{this.processing=!1}}}getWalletId(e){return e&&(e.id||e.provider||e.key)||""}getWalletLabel(e){return e&&(e.label||e.name||e.title||e.id)||"Wallet"}getWalletIcon(e){return e&&(e.icon||e.logo||e.image)||null}async connectWithWallet(e){if(this.pnp)try{if(!e)throw new Error("No wallet ID provided");let t=await this.pnp.connect(e);if(!!!(t&&(t.connected===!0||t.principal||t.owner||this.pnp?.account)))throw new Error("Wallet connection was rejected");this.walletConnected=!0;try{window.dispatchEvent(new CustomEvent("icpay-sdk-wallet-connected",{detail:{walletType:e}}))}catch{}this.config={...this.config,connectedWallet:t,actorProvider:(n,l)=>this.pnp.getActor({canisterId:n,idl:l,requiresSigning:!0,anon:!1})},this.showWalletModal=!1;let r=this.pendingAction;this.pendingAction=null,r==="unlock"&&setTimeout(()=>this.unlock(),0)}catch(t){this.errorMessage=t instanceof Error?t.message:"Wallet connection failed",this.errorSeverity="error",this.showWalletModal=!1}}render(){return this.config?G`
556
+ `],s([Ze({type:Object})],u.prototype,"config",2),s([M()],u.prototype,"selectedAmount",2),s([M()],u.prototype,"selectedSymbol",2),s([M()],u.prototype,"total",2),s([M()],u.prototype,"processing",2),s([M()],u.prototype,"succeeded",2),s([M()],u.prototype,"availableLedgers",2),s([M()],u.prototype,"errorMessage",2),s([M()],u.prototype,"errorSeverity",2),s([M()],u.prototype,"errorAction",2),s([M()],u.prototype,"walletConnected",2),s([M()],u.prototype,"pendingAction",2),s([M()],u.prototype,"showWalletModal",2),u=s([Xe("icpay-tip-jar")],u);import{LitElement as Je,html as Q,css as et}from"lit";import{customElement as tt,property as ye,state as U}from"lit/decorators.js";var ve=typeof window<"u",oe=null;function X(o,a,e){o&&(e!==void 0?console.log(`[ICPay Widget] ${a}`,e):console.log(`[ICPay Widget] ${a}`))}var g=class extends Je{constructor(){super(...arguments);this.title="Article Title";this.preview="";this.lockedContent="";this.selectedSymbol="ICP";this.unlocked=!1;this.succeeded=!1;this.processing=!1;this.availableLedgers=[];this.errorMessage=null;this.errorSeverity=null;this.errorAction=null;this.walletConnected=!1;this.pendingAction=null;this.showWalletModal=!1;this.pnp=null}async tryAutoConnectPNP(){try{if(!this.config||this.config?.useOwnWallet)return;let e=localStorage.getItem("icpay:pnp");if(!e)return;let t=JSON.parse(e);if(!t?.provider||!t?.principal)return;oe||(oe=(await import("@windoge98/plug-n-play")).PNP);let i=new oe(this.config?.plugNPlay||{});this.walletConnected=!1,this.config={...this.config,connectedWallet:{owner:t.principal,principal:t.principal,connected:!1}}}catch{}}get cryptoOptions(){return this.config.cryptoOptions?this.config.cryptoOptions:this.availableLedgers}connectedCallback(){super.connectedCallback(),ve&&(X(this.config?.debug||!1,"Article paywall connected",{config:this.config}),this.config&&(typeof this.config.title=="string"&&(this.title=this.config.title),typeof this.config.preview=="string"&&(this.preview=this.config.preview),typeof this.config.lockedContent=="string"&&(this.lockedContent=this.config.lockedContent)),this.tryAutoConnectPNP(),this.config?.cryptoOptions&&this.config.cryptoOptions.length>0||this.loadVerifiedLedgers())}updated(e){if(e.has("config")&&this.config&&(typeof this.config.title=="string"&&(this.title=this.config.title),typeof this.config.preview=="string"&&(this.preview=this.config.preview),typeof this.config.lockedContent=="string"&&(this.lockedContent=this.config.lockedContent)),e.has("config")&&this.pendingAction&&this.config?.actorProvider){let t=this.pendingAction;this.pendingAction=null;try{window.dispatchEvent(new CustomEvent("icpay-sdk-wallet-connected",{detail:{walletType:"external"}}))}catch{}setTimeout(()=>{t==="unlock"&&this.unlock()},0)}}async loadVerifiedLedgers(){if(!(!ve||!this.config?.publishableKey))try{let t=await d(this.config).client.getVerifiedLedgers();this.availableLedgers=t.map(i=>({symbol:i.symbol,label:i.name,canisterId:i.canisterId})),this.selectedSymbol||(this.selectedSymbol=this.config?.defaultSymbol||this.availableLedgers[0]?.symbol||"ICP")}catch(e){console.warn("Failed to load verified ledgers:",e),this.availableLedgers=[{symbol:"ICP",label:"ICP",canisterId:"ryjl3-tyaaa-aaaaa-aaaba-cai"}],this.selectedSymbol||(this.selectedSymbol="ICP")}}selectSymbol(e){this.selectedSymbol=e}async unlock(){if(ve&&!(this.processing||this.unlocked)){X(this.config?.debug||!1,"Article paywall unlock started",{priceUsd:this.config.priceUsd,selectedSymbol:this.selectedSymbol,useOwnWallet:this.config.useOwnWallet}),this.errorMessage=null,this.errorSeverity=null,this.errorAction=null;try{window.dispatchEvent(new CustomEvent("icpay-sdk-method-start",{detail:{name:"unlock",type:"sendUsd",amount:this.config.priceUsd,currency:this.selectedSymbol}}))}catch{}this.processing=!0;try{if(this.config.useOwnWallet){if(!this.config.actorProvider){this.pendingAction="unlock",this.dispatchEvent(new CustomEvent("icpay-connect-wallet",{bubbles:!0}));return}}else if(!this.walletConnected){X(this.config?.debug||!1,"Connecting to wallet via Plug N Play");try{oe||(oe=(await import("@windoge98/plug-n-play")).PNP),this.pnp=new oe(this.config?.plugNPlay||{});let n=this.pnp.getEnabledWallets();if(X(this.config?.debug||!1,"Available wallets",n),!n?.length)throw new Error("No wallets available");this.pendingAction="unlock",this.showWalletModal=!0;return}catch(n){X(this.config?.debug||!1,"Wallet connection error:",n),this.errorMessage=n instanceof Error?n.message:"Wallet connection failed",this.errorSeverity="error";return}}X(this.config?.debug||!1,"Creating SDK for payment");let e=d(this.config),i=this.cryptoOptions.find(n=>n.symbol===this.selectedSymbol).canisterId||await e.client.getLedgerCanisterIdBySymbol(this.selectedSymbol);X(this.config?.debug||!1,"Article payment details",{priceUsd:this.config.priceUsd,selectedSymbol:this.selectedSymbol,canisterId:i});let r=await e.sendUsd(this.config.priceUsd,i,{context:"article"});X(this.config?.debug||!1,"Article payment completed",{resp:r}),this.unlocked=!0,this.succeeded=!0,this.config.onSuccess&&this.config.onSuccess({id:r.transactionId,status:r.status}),this.dispatchEvent(new CustomEvent("icpay-unlock",{detail:{amount:this.config.priceUsd,tx:r},bubbles:!0}))}catch(e){k(e,{onError:t=>{this.dispatchEvent(new CustomEvent("icpay-error",{detail:t,bubbles:!0})),$(t)&&(this.errorMessage=W(t),this.errorSeverity=C(t),this.errorAction=L(t))}})}finally{this.processing=!1}}}getWalletId(e){return e&&(e.id||e.provider||e.key)||""}getWalletLabel(e){return e&&(e.label||e.name||e.title||e.id)||"Wallet"}getWalletIcon(e){return e&&(e.icon||e.logo||e.image)||null}async connectWithWallet(e){if(this.pnp)try{if(!e)throw new Error("No wallet ID provided");let t=await this.pnp.connect(e);if(!!!(t&&(t.connected===!0||t.principal||t.owner||this.pnp?.account)))throw new Error("Wallet connection was rejected");this.walletConnected=!0;try{window.dispatchEvent(new CustomEvent("icpay-sdk-wallet-connected",{detail:{walletType:e}}))}catch{}this.config={...this.config,connectedWallet:t,actorProvider:(n,l)=>this.pnp.getActor({canisterId:n,idl:l,requiresSigning:!0,anon:!1})},this.showWalletModal=!1;let r=this.pendingAction;this.pendingAction=null,r==="unlock"&&setTimeout(()=>this.unlock(),0)}catch(t){this.errorMessage=t instanceof Error?t.message:"Wallet connection failed",this.errorSeverity="error",this.showWalletModal=!1}}render(){return this.config?Q`
557
557
  <div class="card section">
558
- ${this.config?.progressBar?.enabled!==!1?G`<icpay-progress-bar mode="${this.config?.progressBar?.mode||"modal"}"></icpay-progress-bar>`:null}
558
+ ${this.config?.progressBar?.enabled!==!1?Q`<icpay-progress-bar mode="${this.config?.progressBar?.mode||"modal"}"></icpay-progress-bar>`:null}
559
559
  <div class="container">
560
560
  <div class="title">${this.title}</div>
561
561
  <div class="preview">${this.preview}</div>
@@ -578,24 +578,24 @@ var Ne=Object.defineProperty;var Ue=Object.getOwnPropertyDescriptor;var s=(o,a,e
578
578
  ${this.unlocked?"Unlocked":this.processing?"Processing\u2026":(this.config?.buttonLabel||"Pay ${amount} with {symbol}").replace("{amount}",`${Number(this.config?.priceUsd??0).toFixed(2)}`).replace("{symbol}",this.selectedSymbol)}
579
579
  </button>
580
580
 
581
- ${this.errorMessage?G`
581
+ ${this.errorMessage?Q`
582
582
  <div class="error-message ${this.errorSeverity}" style="margin-top: 12px; padding: 8px 12px; border-radius: 6px; font-size: 14px; text-align: center;">
583
583
  ${this.errorMessage}
584
- ${this.errorAction?G`
584
+ ${this.errorAction?Q`
585
585
  <button style="margin-left: 8px; padding: 4px 8px; background: transparent; border: 1px solid currentColor; border-radius: 4px; font-size: 12px; cursor: pointer;">
586
586
  ${this.errorAction}
587
587
  </button>
588
588
  `:""}
589
589
  </div>
590
590
  `:""}
591
- ${(()=>{let e=this.pnp?.getEnabledWallets?.()||[];return this.showWalletModal&&this.pnp?G`
591
+ ${(()=>{let e=this.pnp?.getEnabledWallets?.()||[];return this.showWalletModal&&this.pnp?Q`
592
592
  <div style="position:fixed;inset:0;display:flex;align-items:center;justify-content:center;background:rgba(0,0,0,0.55);z-index:9999">
593
593
  <div class="card section" style="width:380px;border-radius:12px">
594
594
  <div class="label" style="font-weight:700;margin-bottom:12px;text-align:center">Choose Wallet</div>
595
595
  <div style="display:grid;grid-template-columns:1fr;gap:10px;margin-bottom:12px">
596
- ${e.map(t=>{let i=this.getWalletId(t),r=this.getWalletLabel(t),n=this.getWalletIcon(t);return G`
596
+ ${e.map(t=>{let i=this.getWalletId(t),r=this.getWalletLabel(t),n=this.getWalletIcon(t);return Q`
597
597
  <button class="pay-button" style="display:flex;align-items:center;gap:10px;justify-content:center;padding:12px" @click=${()=>this.connectWithWallet(i)}>
598
- ${n?G`<img src="${n}" alt="${r}" style="width:20px;height:20px;border-radius:4px;object-fit:contain;background:transparent" />`:""}
598
+ ${n?Q`<img src="${n}" alt="${r}" style="width:20px;height:20px;border-radius:4px;object-fit:contain;background:transparent" />`:""}
599
599
  <span>${r}</span>
600
600
  </button>`})}
601
601
  </div>
@@ -606,7 +606,7 @@ var Ne=Object.defineProperty;var Ue=Object.getOwnPropertyDescriptor;var s=(o,a,e
606
606
  </div>
607
607
  `:null})()}
608
608
  </div>
609
- `:G`<div class="card section">Loading...</div>`}};p.styles=[S,et`
609
+ `:Q`<div class="card section">Loading...</div>`}};g.styles=[S,et`
610
610
  .container { background: var(--icpay-surface-alt); border: 1px solid var(--icpay-border); border-radius: 16px; padding: 16px; margin-bottom: 16px; }
611
611
  .title { color: var(--icpay-text); font-weight: 700; margin-bottom: 8px; }
612
612
  .preview { color: var(--icpay-muted); margin-bottom: 12px; line-height: 1.6; }
@@ -638,7 +638,7 @@ var Ne=Object.defineProperty;var Ue=Object.getOwnPropertyDescriptor;var s=(o,a,e
638
638
  border-color: rgba(239, 68, 68, 0.3);
639
639
  color: #ef4444;
640
640
  }
641
- `],s([ye({type:Object})],p.prototype,"config",2),s([ye({type:String})],p.prototype,"title",2),s([ye({type:String})],p.prototype,"preview",2),s([ye({type:String})],p.prototype,"lockedContent",2),s([N()],p.prototype,"selectedSymbol",2),s([N()],p.prototype,"unlocked",2),s([N()],p.prototype,"succeeded",2),s([N()],p.prototype,"processing",2),s([N()],p.prototype,"availableLedgers",2),s([N()],p.prototype,"errorMessage",2),s([N()],p.prototype,"errorSeverity",2),s([N()],p.prototype,"errorAction",2),s([N()],p.prototype,"walletConnected",2),s([N()],p.prototype,"pendingAction",2),s([N()],p.prototype,"showWalletModal",2),p=s([tt("icpay-article-paywall")],p);import{LitElement as it,html as z,css as st}from"lit";import{customElement as rt,property as nt,state as j}from"lit/decorators.js";var we=typeof window<"u",xe=null;function Q(o,a,e){o&&(e!==void 0?console.log(`[ICPay Widget] ${a}`,e):console.log(`[ICPay Widget] ${a}`))}var m=class extends it{constructor(){super(...arguments);this.selectedIndex=0;this.selectedSymbol="ICP";this.processing=!1;this.availableLedgers=[];this.errorMessage=null;this.errorSeverity=null;this.errorAction=null;this.walletConnected=!1;this.pendingAction=null;this.showWalletModal=!1;this.pnp=null}get cryptoOptions(){return this.config.cryptoOptions?this.config.cryptoOptions:this.availableLedgers}connectedCallback(){super.connectedCallback(),we&&(Q(this.config?.debug||!1,"Coffee shop connected",{config:this.config}),this.config&&typeof this.config.defaultItemIndex=="number"&&(this.selectedIndex=this.config.defaultItemIndex),this.config?.cryptoOptions&&this.config.cryptoOptions.length>0||this.loadVerifiedLedgers())}updated(e){if(e.has("config")&&this.pendingAction&&this.config?.actorProvider){let t=this.pendingAction;this.pendingAction=null;try{window.dispatchEvent(new CustomEvent("icpay-sdk-wallet-connected",{detail:{walletType:"external"}}))}catch{}setTimeout(()=>{t==="order"&&this.order()},0)}}async loadVerifiedLedgers(){if(!(!we||!this.config?.publishableKey))try{let t=await c(this.config).client.getVerifiedLedgers();this.availableLedgers=t.map(i=>({symbol:i.symbol,label:i.name,canisterId:i.canisterId})),this.availableLedgers.length>0&&!this.selectedSymbol&&(this.selectedSymbol=this.availableLedgers[0].symbol)}catch(e){console.warn("Failed to load verified ledgers:",e),this.availableLedgers=[{symbol:"ICP",label:"ICP",canisterId:"ryjl3-tyaaa-aaaaa-aaaba-cai"}],this.selectedSymbol||(this.selectedSymbol="ICP")}}selectItem(e){this.selectedIndex=e}selectSymbol(e){this.selectedSymbol=e}get selectedItem(){return this.config?.items?.[this.selectedIndex]||{name:"Loading...",priceUsd:0}}async order(){if(we&&!this.processing){Q(this.config?.debug||!1,"Coffee order started",{selectedItem:this.selectedItem,selectedSymbol:this.selectedSymbol,useOwnWallet:this.config.useOwnWallet}),this.errorMessage=null,this.errorSeverity=null,this.errorAction=null;try{window.dispatchEvent(new CustomEvent("icpay-sdk-method-start",{detail:{name:"order",type:"sendUsd",amount:this.selectedItem.priceUsd,currency:this.selectedSymbol}}))}catch{}this.processing=!0;try{if(this.config.useOwnWallet){if(!this.config.actorProvider){this.pendingAction="order",this.dispatchEvent(new CustomEvent("icpay-connect-wallet",{bubbles:!0}));return}}else if(!this.walletConnected){Q(this.config?.debug||!1,"Connecting to wallet via Plug N Play");try{xe||(xe=(await import("@windoge98/plug-n-play")).PNP),this.pnp=new xe(this.config?.plugNPlay||{});let n=this.pnp.getEnabledWallets();if(Q(this.config?.debug||!1,"Available wallets",n),!n?.length)throw new Error("No wallets available");this.pendingAction="order",this.showWalletModal=!0;return}catch(n){Q(this.config?.debug||!1,"Wallet connection error:",n),this.errorMessage=n instanceof Error?n.message:"Wallet connection failed",this.errorSeverity="error";return}}Q(this.config?.debug||!1,"Creating SDK for payment");let e=c(this.config),i=this.cryptoOptions.find(n=>n.symbol===this.selectedSymbol).canisterId||await e.client.getLedgerCanisterIdBySymbol(this.selectedSymbol);Q(this.config?.debug||!1,"Coffee order payment details",{item:this.selectedItem.name,priceUsd:this.selectedItem.priceUsd,selectedSymbol:this.selectedSymbol,canisterId:i});let r=await e.sendUsd(this.selectedItem.priceUsd,i,{context:"coffee",item:this.selectedItem.name});Q(this.config?.debug||!1,"Coffee order payment completed",{resp:r}),this.config.onSuccess&&this.config.onSuccess({id:r.transactionId,status:r.status,item:this.selectedItem.name}),this.dispatchEvent(new CustomEvent("icpay-coffee",{detail:{item:this.selectedItem,tx:r},bubbles:!0}))}catch(e){k(e,{onError:t=>{this.dispatchEvent(new CustomEvent("icpay-error",{detail:t,bubbles:!0})),$(t)&&(this.errorMessage=W(t),this.errorSeverity=C(t),this.errorAction=L(t))}})}finally{this.processing=!1}}}getWalletId(e){return e&&(e.id||e.provider||e.key)||""}getWalletLabel(e){return e&&(e.label||e.name||e.title||e.id)||"Wallet"}getWalletIcon(e){return e&&(e.icon||e.logo||e.image)||null}async connectWithWallet(e){if(this.pnp)try{if(!e)throw new Error("No wallet ID provided");let t=await this.pnp.connect(e);if(!!!(t&&(t.connected===!0||t.principal||t.owner||this.pnp?.account)))throw new Error("Wallet connection was rejected");this.walletConnected=!0;try{window.dispatchEvent(new CustomEvent("icpay-sdk-wallet-connected",{detail:{walletType:e}}))}catch{}this.config={...this.config,connectedWallet:t,actorProvider:(n,l)=>this.pnp.getActor({canisterId:n,idl:l,requiresSigning:!0,anon:!1})},this.showWalletModal=!1;let r=this.pendingAction;this.pendingAction=null,r==="order"&&setTimeout(()=>this.order(),0)}catch(t){this.errorMessage=t instanceof Error?t.message:"Wallet connection failed",this.errorSeverity="error",this.showWalletModal=!1}}render(){return this.config?z`
641
+ `],s([ye({type:Object})],g.prototype,"config",2),s([ye({type:String})],g.prototype,"title",2),s([ye({type:String})],g.prototype,"preview",2),s([ye({type:String})],g.prototype,"lockedContent",2),s([U()],g.prototype,"selectedSymbol",2),s([U()],g.prototype,"unlocked",2),s([U()],g.prototype,"succeeded",2),s([U()],g.prototype,"processing",2),s([U()],g.prototype,"availableLedgers",2),s([U()],g.prototype,"errorMessage",2),s([U()],g.prototype,"errorSeverity",2),s([U()],g.prototype,"errorAction",2),s([U()],g.prototype,"walletConnected",2),s([U()],g.prototype,"pendingAction",2),s([U()],g.prototype,"showWalletModal",2),g=s([tt("icpay-article-paywall")],g);import{LitElement as it,html as z,css as st}from"lit";import{customElement as rt,property as nt,state as j}from"lit/decorators.js";var we=typeof window<"u",xe=null;function Z(o,a,e){o&&(e!==void 0?console.log(`[ICPay Widget] ${a}`,e):console.log(`[ICPay Widget] ${a}`))}var v=class extends it{constructor(){super(...arguments);this.selectedIndex=0;this.selectedSymbol="ICP";this.processing=!1;this.availableLedgers=[];this.errorMessage=null;this.errorSeverity=null;this.errorAction=null;this.walletConnected=!1;this.pendingAction=null;this.showWalletModal=!1;this.pnp=null}get cryptoOptions(){return this.config.cryptoOptions?this.config.cryptoOptions:this.availableLedgers}connectedCallback(){super.connectedCallback(),we&&(Z(this.config?.debug||!1,"Coffee shop connected",{config:this.config}),this.config&&typeof this.config.defaultItemIndex=="number"&&(this.selectedIndex=this.config.defaultItemIndex),this.config?.cryptoOptions&&this.config.cryptoOptions.length>0||this.loadVerifiedLedgers())}updated(e){if(e.has("config")&&this.pendingAction&&this.config?.actorProvider){let t=this.pendingAction;this.pendingAction=null;try{window.dispatchEvent(new CustomEvent("icpay-sdk-wallet-connected",{detail:{walletType:"external"}}))}catch{}setTimeout(()=>{t==="order"&&this.order()},0)}}async loadVerifiedLedgers(){if(!(!we||!this.config?.publishableKey))try{let t=await d(this.config).client.getVerifiedLedgers();this.availableLedgers=t.map(i=>({symbol:i.symbol,label:i.name,canisterId:i.canisterId})),this.availableLedgers.length>0&&!this.selectedSymbol&&(this.selectedSymbol=this.availableLedgers[0].symbol)}catch(e){console.warn("Failed to load verified ledgers:",e),this.availableLedgers=[{symbol:"ICP",label:"ICP",canisterId:"ryjl3-tyaaa-aaaaa-aaaba-cai"}],this.selectedSymbol||(this.selectedSymbol="ICP")}}selectItem(e){this.selectedIndex=e}selectSymbol(e){this.selectedSymbol=e}get selectedItem(){return this.config?.items?.[this.selectedIndex]||{name:"Loading...",priceUsd:0}}async order(){if(we&&!this.processing){Z(this.config?.debug||!1,"Coffee order started",{selectedItem:this.selectedItem,selectedSymbol:this.selectedSymbol,useOwnWallet:this.config.useOwnWallet}),this.errorMessage=null,this.errorSeverity=null,this.errorAction=null;try{window.dispatchEvent(new CustomEvent("icpay-sdk-method-start",{detail:{name:"order",type:"sendUsd",amount:this.selectedItem.priceUsd,currency:this.selectedSymbol}}))}catch{}this.processing=!0;try{if(this.config.useOwnWallet){if(!this.config.actorProvider){this.pendingAction="order",this.dispatchEvent(new CustomEvent("icpay-connect-wallet",{bubbles:!0}));return}}else if(!this.walletConnected){Z(this.config?.debug||!1,"Connecting to wallet via Plug N Play");try{xe||(xe=(await import("@windoge98/plug-n-play")).PNP),this.pnp=new xe(this.config?.plugNPlay||{});let n=this.pnp.getEnabledWallets();if(Z(this.config?.debug||!1,"Available wallets",n),!n?.length)throw new Error("No wallets available");this.pendingAction="order",this.showWalletModal=!0;return}catch(n){Z(this.config?.debug||!1,"Wallet connection error:",n),this.errorMessage=n instanceof Error?n.message:"Wallet connection failed",this.errorSeverity="error";return}}Z(this.config?.debug||!1,"Creating SDK for payment");let e=d(this.config),i=this.cryptoOptions.find(n=>n.symbol===this.selectedSymbol).canisterId||await e.client.getLedgerCanisterIdBySymbol(this.selectedSymbol);Z(this.config?.debug||!1,"Coffee order payment details",{item:this.selectedItem.name,priceUsd:this.selectedItem.priceUsd,selectedSymbol:this.selectedSymbol,canisterId:i});let r=await e.sendUsd(this.selectedItem.priceUsd,i,{context:"coffee",item:this.selectedItem.name});Z(this.config?.debug||!1,"Coffee order payment completed",{resp:r}),this.config.onSuccess&&this.config.onSuccess({id:r.transactionId,status:r.status,item:this.selectedItem.name}),this.dispatchEvent(new CustomEvent("icpay-coffee",{detail:{item:this.selectedItem,tx:r},bubbles:!0}))}catch(e){k(e,{onError:t=>{this.dispatchEvent(new CustomEvent("icpay-error",{detail:t,bubbles:!0})),$(t)&&(this.errorMessage=W(t),this.errorSeverity=C(t),this.errorAction=L(t))}})}finally{this.processing=!1}}}getWalletId(e){return e&&(e.id||e.provider||e.key)||""}getWalletLabel(e){return e&&(e.label||e.name||e.title||e.id)||"Wallet"}getWalletIcon(e){return e&&(e.icon||e.logo||e.image)||null}async connectWithWallet(e){if(this.pnp)try{if(!e)throw new Error("No wallet ID provided");let t=await this.pnp.connect(e);if(!!!(t&&(t.connected===!0||t.principal||t.owner||this.pnp?.account)))throw new Error("Wallet connection was rejected");this.walletConnected=!0;try{window.dispatchEvent(new CustomEvent("icpay-sdk-wallet-connected",{detail:{walletType:e}}))}catch{}this.config={...this.config,connectedWallet:t,actorProvider:(n,l)=>this.pnp.getActor({canisterId:n,idl:l,requiresSigning:!0,anon:!1})},this.showWalletModal=!1;let r=this.pendingAction;this.pendingAction=null,r==="order"&&setTimeout(()=>this.order(),0)}catch(t){this.errorMessage=t instanceof Error?t.message:"Wallet connection failed",this.errorSeverity="error",this.showWalletModal=!1}}render(){return this.config?z`
642
642
  <div class="card section">
643
643
  ${this.config?.progressBar?.enabled!==!1?z`<icpay-progress-bar mode="${this.config?.progressBar?.mode||"modal"}"></icpay-progress-bar>`:null}
644
644
  <div class="menu">
@@ -694,7 +694,7 @@ var Ne=Object.defineProperty;var Ue=Object.getOwnPropertyDescriptor;var s=(o,a,e
694
694
  </div>
695
695
  `:null})()}
696
696
  </div>
697
- `:z`<div class="card section">Loading...</div>`}};m.styles=[S,st`
697
+ `:z`<div class="card section">Loading...</div>`}};v.styles=[S,st`
698
698
  .menu { display: grid; gap: 8px; margin-bottom: 12px; }
699
699
  .item { background: var(--icpay-surface-alt); border: 2px solid var(--icpay-border); border-radius: 12px; padding: 16px; display:flex; justify-content: space-between; align-items:center; cursor: pointer; color: var(--icpay-text); font-weight: 600; }
700
700
  .item.selected { background: var(--icpay-primary); color: #111827; border-color: var(--icpay-primary); }
@@ -725,14 +725,14 @@ var Ne=Object.defineProperty;var Ue=Object.getOwnPropertyDescriptor;var s=(o,a,e
725
725
  border-color: rgba(239, 68, 68, 0.3);
726
726
  color: #ef4444;
727
727
  }
728
- `],s([nt({type:Object})],m.prototype,"config",2),s([j()],m.prototype,"selectedIndex",2),s([j()],m.prototype,"selectedSymbol",2),s([j()],m.prototype,"processing",2),s([j()],m.prototype,"availableLedgers",2),s([j()],m.prototype,"errorMessage",2),s([j()],m.prototype,"errorSeverity",2),s([j()],m.prototype,"errorAction",2),s([j()],m.prototype,"walletConnected",2),s([j()],m.prototype,"pendingAction",2),s([j()],m.prototype,"showWalletModal",2),m=s([rt("icpay-coffee-shop")],m);import{LitElement as ot,html as B,css as at}from"lit";import{customElement as lt,property as ct,state as M}from"lit/decorators.js";var Ee=typeof window<"u",oe=null;function X(o,a,e){o&&(e!==void 0?console.log(`[ICPay Widget] ${a}`,e):console.log(`[ICPay Widget] ${a}`))}var u=class extends ot{constructor(){super(...arguments);this.selectedAmount=10;this.selectedSymbol="ICP";this.raised=0;this.processing=!1;this.succeeded=!1;this.availableLedgers=[];this.errorMessage=null;this.errorSeverity=null;this.errorAction=null;this.walletConnected=!1;this.pendingAction=null;this.showWalletModal=!1;this.pnp=null}async tryAutoConnectPNP(){try{if(!this.config||this.config?.useOwnWallet)return;let e=localStorage.getItem("icpay:pnp");if(!e)return;let t=JSON.parse(e);if(!t?.provider||!t?.principal)return;oe||(oe=(await import("@windoge98/plug-n-play")).PNP);let i=new oe(this.config?.plugNPlay||{});this.walletConnected=!1,this.config={...this.config,connectedWallet:{owner:t.principal,principal:t.principal,connected:!1}}}catch{}}get amounts(){return this.config?.amountsUsd||[10,25,50,100,250,500]}get cryptoOptions(){return this.config.cryptoOptions?this.config.cryptoOptions:this.availableLedgers}connectedCallback(){super.connectedCallback(),Ee&&(X(this.config?.debug||!1,"Donation thermometer connected",{config:this.config}),this.config&&typeof this.config.defaultAmountUsd=="number"&&(this.selectedAmount=this.config.defaultAmountUsd),this.tryAutoConnectPNP(),this.config?.cryptoOptions&&this.config.cryptoOptions.length>0||this.loadVerifiedLedgers())}updated(e){if(e.has("config")&&this.pendingAction&&this.config?.actorProvider){let t=this.pendingAction;this.pendingAction=null;try{window.dispatchEvent(new CustomEvent("icpay-sdk-wallet-connected",{detail:{walletType:"external"}}))}catch{}setTimeout(()=>{t==="donate"&&this.donate()},0)}}async loadVerifiedLedgers(){if(!(!Ee||!this.config?.publishableKey))try{let t=await c(this.config).client.getVerifiedLedgers();this.availableLedgers=t.map(i=>({symbol:i.symbol,label:i.name,canisterId:i.canisterId})),this.availableLedgers.length>0&&!this.selectedSymbol&&(this.selectedSymbol=this.availableLedgers[0].symbol)}catch(e){console.warn("Failed to load verified ledgers:",e),this.availableLedgers=[{symbol:"ICP",label:"ICP",canisterId:"ryjl3-tyaaa-aaaaa-aaaba-cai"}],this.selectedSymbol||(this.selectedSymbol="ICP")}}selectAmount(e){this.selectedAmount=e}selectSymbol(e){this.selectedSymbol=e}get fillPercentage(){let e=Number(this.config?.goalUsd??1e3),t=e>0?e:1e3;return Math.min(this.raised/t*100,100)}async donate(){if(Ee&&!this.processing){X(this.config?.debug||!1,"Donation started",{amount:this.selectedAmount,selectedSymbol:this.selectedSymbol,useOwnWallet:this.config.useOwnWallet}),this.errorMessage=null,this.errorSeverity=null,this.errorAction=null;try{window.dispatchEvent(new CustomEvent("icpay-sdk-method-start",{detail:{name:"donate",type:"sendUsd",amount:this.selectedAmount,currency:this.selectedSymbol}}))}catch{}this.processing=!0;try{if(this.config.useOwnWallet){if(!this.config.actorProvider){this.pendingAction="donate",this.dispatchEvent(new CustomEvent("icpay-connect-wallet",{bubbles:!0}));return}}else if(!this.walletConnected){X(this.config?.debug||!1,"Connecting to wallet via Plug N Play");try{oe||(oe=(await import("@windoge98/plug-n-play")).PNP),this.pnp=new oe(this.config?.plugNPlay||{});let n=this.pnp.getEnabledWallets();if(X(this.config?.debug||!1,"Available wallets",n),!n?.length)throw new Error("No wallets available");this.pendingAction="donate",this.showWalletModal=!0;return}catch(n){X(this.config?.debug||!1,"Wallet connection error:",n),this.errorMessage=n instanceof Error?n.message:"Wallet connection failed",this.errorSeverity="error";return}}X(this.config?.debug||!1,"Creating SDK for payment");let e=c(this.config),i=this.cryptoOptions.find(n=>n.symbol===this.selectedSymbol).canisterId||await e.client.getLedgerCanisterIdBySymbol(this.selectedSymbol);X(this.config?.debug||!1,"Donation payment details",{amount:this.selectedAmount,selectedSymbol:this.selectedSymbol,canisterId:i});let r=await e.sendUsd(this.selectedAmount,i,{context:"donation"});X(this.config?.debug||!1,"Donation payment completed",{resp:r}),this.raised+=this.selectedAmount,this.succeeded=!0,this.config.onSuccess&&this.config.onSuccess({id:r.transactionId,status:r.status,raised:this.raised}),this.dispatchEvent(new CustomEvent("icpay-donation",{detail:{amount:this.selectedAmount,tx:r},bubbles:!0}))}catch(e){k(e,{onError:t=>{this.dispatchEvent(new CustomEvent("icpay-error",{detail:t,bubbles:!0})),$(t)&&(this.errorMessage=W(t),this.errorSeverity=C(t),this.errorAction=L(t))}})}finally{this.processing=!1}}}getWalletId(e){return e&&(e.id||e.provider||e.key)||""}getWalletLabel(e){return e&&(e.label||e.name||e.title||e.id)||"Wallet"}getWalletIcon(e){return e&&(e.icon||e.logo||e.image)||null}async connectWithWallet(e){if(this.pnp)try{if(!e)throw new Error("No wallet ID provided");let t=await this.pnp.connect(e);if(!!!(t&&(t.connected===!0||t.principal||t.owner||this.pnp?.account)))throw new Error("Wallet connection was rejected");this.walletConnected=!0;try{window.dispatchEvent(new CustomEvent("icpay-sdk-wallet-connected",{detail:{walletType:e}}))}catch{}this.config={...this.config,connectedWallet:t,actorProvider:(n,l)=>this.pnp.getActor({canisterId:n,idl:l,requiresSigning:!0,anon:!1})},this.showWalletModal=!1;let r=this.pendingAction;this.pendingAction=null,r==="donate"&&setTimeout(()=>this.donate(),0)}catch(t){this.errorMessage=t instanceof Error?t.message:"Wallet connection failed",this.errorSeverity="error",this.showWalletModal=!1}}render(){return this.config?B`
728
+ `],s([nt({type:Object})],v.prototype,"config",2),s([j()],v.prototype,"selectedIndex",2),s([j()],v.prototype,"selectedSymbol",2),s([j()],v.prototype,"processing",2),s([j()],v.prototype,"availableLedgers",2),s([j()],v.prototype,"errorMessage",2),s([j()],v.prototype,"errorSeverity",2),s([j()],v.prototype,"errorAction",2),s([j()],v.prototype,"walletConnected",2),s([j()],v.prototype,"pendingAction",2),s([j()],v.prototype,"showWalletModal",2),v=s([rt("icpay-coffee-shop")],v);import{LitElement as ot,html as V,css as at}from"lit";import{customElement as lt,property as ct,state as O}from"lit/decorators.js";var Ee=typeof window<"u",ae=null;function J(o,a,e){o&&(e!==void 0?console.log(`[ICPay Widget] ${a}`,e):console.log(`[ICPay Widget] ${a}`))}var f=class extends ot{constructor(){super(...arguments);this.selectedAmount=10;this.selectedSymbol="ICP";this.raised=0;this.processing=!1;this.succeeded=!1;this.availableLedgers=[];this.errorMessage=null;this.errorSeverity=null;this.errorAction=null;this.walletConnected=!1;this.pendingAction=null;this.showWalletModal=!1;this.pnp=null}async tryAutoConnectPNP(){try{if(!this.config||this.config?.useOwnWallet)return;let e=localStorage.getItem("icpay:pnp");if(!e)return;let t=JSON.parse(e);if(!t?.provider||!t?.principal)return;ae||(ae=(await import("@windoge98/plug-n-play")).PNP);let i=new ae(this.config?.plugNPlay||{});this.walletConnected=!1,this.config={...this.config,connectedWallet:{owner:t.principal,principal:t.principal,connected:!1}}}catch{}}get amounts(){return this.config?.amountsUsd||[10,25,50,100,250,500]}get cryptoOptions(){return this.config.cryptoOptions?this.config.cryptoOptions:this.availableLedgers}connectedCallback(){super.connectedCallback(),Ee&&(J(this.config?.debug||!1,"Donation thermometer connected",{config:this.config}),this.config&&typeof this.config.defaultAmountUsd=="number"&&(this.selectedAmount=this.config.defaultAmountUsd),this.tryAutoConnectPNP(),this.config?.cryptoOptions&&this.config.cryptoOptions.length>0||this.loadVerifiedLedgers())}updated(e){if(e.has("config")&&this.pendingAction&&this.config?.actorProvider){let t=this.pendingAction;this.pendingAction=null;try{window.dispatchEvent(new CustomEvent("icpay-sdk-wallet-connected",{detail:{walletType:"external"}}))}catch{}setTimeout(()=>{t==="donate"&&this.donate()},0)}}async loadVerifiedLedgers(){if(!(!Ee||!this.config?.publishableKey))try{let t=await d(this.config).client.getVerifiedLedgers();this.availableLedgers=t.map(i=>({symbol:i.symbol,label:i.name,canisterId:i.canisterId})),this.availableLedgers.length>0&&!this.selectedSymbol&&(this.selectedSymbol=this.availableLedgers[0].symbol)}catch(e){console.warn("Failed to load verified ledgers:",e),this.availableLedgers=[{symbol:"ICP",label:"ICP",canisterId:"ryjl3-tyaaa-aaaaa-aaaba-cai"}],this.selectedSymbol||(this.selectedSymbol="ICP")}}selectAmount(e){this.selectedAmount=e}selectSymbol(e){this.selectedSymbol=e}get fillPercentage(){let e=Number(this.config?.goalUsd??1e3),t=e>0?e:1e3;return Math.min(this.raised/t*100,100)}async donate(){if(Ee&&!this.processing){J(this.config?.debug||!1,"Donation started",{amount:this.selectedAmount,selectedSymbol:this.selectedSymbol,useOwnWallet:this.config.useOwnWallet}),this.errorMessage=null,this.errorSeverity=null,this.errorAction=null;try{window.dispatchEvent(new CustomEvent("icpay-sdk-method-start",{detail:{name:"donate",type:"sendUsd",amount:this.selectedAmount,currency:this.selectedSymbol}}))}catch{}this.processing=!0;try{if(this.config.useOwnWallet){if(!this.config.actorProvider){this.pendingAction="donate",this.dispatchEvent(new CustomEvent("icpay-connect-wallet",{bubbles:!0}));return}}else if(!this.walletConnected){J(this.config?.debug||!1,"Connecting to wallet via Plug N Play");try{ae||(ae=(await import("@windoge98/plug-n-play")).PNP),this.pnp=new ae(this.config?.plugNPlay||{});let n=this.pnp.getEnabledWallets();if(J(this.config?.debug||!1,"Available wallets",n),!n?.length)throw new Error("No wallets available");this.pendingAction="donate",this.showWalletModal=!0;return}catch(n){J(this.config?.debug||!1,"Wallet connection error:",n),this.errorMessage=n instanceof Error?n.message:"Wallet connection failed",this.errorSeverity="error";return}}J(this.config?.debug||!1,"Creating SDK for payment");let e=d(this.config),i=this.cryptoOptions.find(n=>n.symbol===this.selectedSymbol).canisterId||await e.client.getLedgerCanisterIdBySymbol(this.selectedSymbol);J(this.config?.debug||!1,"Donation payment details",{amount:this.selectedAmount,selectedSymbol:this.selectedSymbol,canisterId:i});let r=await e.sendUsd(this.selectedAmount,i,{context:"donation"});J(this.config?.debug||!1,"Donation payment completed",{resp:r}),this.raised+=this.selectedAmount,this.succeeded=!0,this.config.onSuccess&&this.config.onSuccess({id:r.transactionId,status:r.status,raised:this.raised}),this.dispatchEvent(new CustomEvent("icpay-donation",{detail:{amount:this.selectedAmount,tx:r},bubbles:!0}))}catch(e){k(e,{onError:t=>{this.dispatchEvent(new CustomEvent("icpay-error",{detail:t,bubbles:!0})),$(t)&&(this.errorMessage=W(t),this.errorSeverity=C(t),this.errorAction=L(t))}})}finally{this.processing=!1}}}getWalletId(e){return e&&(e.id||e.provider||e.key)||""}getWalletLabel(e){return e&&(e.label||e.name||e.title||e.id)||"Wallet"}getWalletIcon(e){return e&&(e.icon||e.logo||e.image)||null}async connectWithWallet(e){if(this.pnp)try{if(!e)throw new Error("No wallet ID provided");let t=await this.pnp.connect(e);if(!!!(t&&(t.connected===!0||t.principal||t.owner||this.pnp?.account)))throw new Error("Wallet connection was rejected");this.walletConnected=!0;try{window.dispatchEvent(new CustomEvent("icpay-sdk-wallet-connected",{detail:{walletType:e}}))}catch{}this.config={...this.config,connectedWallet:t,actorProvider:(n,l)=>this.pnp.getActor({canisterId:n,idl:l,requiresSigning:!0,anon:!1})},this.showWalletModal=!1;let r=this.pendingAction;this.pendingAction=null,r==="donate"&&setTimeout(()=>this.donate(),0)}catch(t){this.errorMessage=t instanceof Error?t.message:"Wallet connection failed",this.errorSeverity="error",this.showWalletModal=!1}}render(){return this.config?V`
729
729
  <div class="card section" style="text-align:center;">
730
- ${this.config?.progressBar?.enabled!==!1?B`<icpay-progress-bar mode="${this.config?.progressBar?.mode||"modal"}"></icpay-progress-bar>`:null}
730
+ ${this.config?.progressBar?.enabled!==!1?V`<icpay-progress-bar mode="${this.config?.progressBar?.mode||"modal"}"></icpay-progress-bar>`:null}
731
731
  <div class="thermo"><div class="fill" style="height:${this.fillPercentage}%"></div></div>
732
732
  <div class="total">$${Number(this.raised).toFixed(0)} / $${Number(this.config?.goalUsd??0).toFixed(2)}</div>
733
733
 
734
734
  <div class="amounts">
735
- ${this.amounts.map(e=>B`<div class="chip ${this.selectedAmount===e?"selected":""}" @click=${()=>this.selectAmount(e)}>$${e}</div>`)}
735
+ ${this.amounts.map(e=>V`<div class="chip ${this.selectedAmount===e?"selected":""}" @click=${()=>this.selectAmount(e)}>$${e}</div>`)}
736
736
  </div>
737
737
 
738
738
  <div>
@@ -751,24 +751,24 @@ var Ne=Object.defineProperty;var Ue=Object.getOwnPropertyDescriptor;var s=(o,a,e
751
751
  ${this.succeeded&&this.config?.disableAfterSuccess?"Donated":this.processing?"Processing\u2026":(this.config?.buttonLabel||"Donate {amount} with {symbol}").replace("{amount}",`${this.selectedAmount}`).replace("{symbol}",this.selectedSymbol)}
752
752
  </button>
753
753
 
754
- ${this.errorMessage?B`
754
+ ${this.errorMessage?V`
755
755
  <div class="error-message ${this.errorSeverity}" style="margin-top: 12px; padding: 8px 12px; border-radius: 6px; font-size: 14px; text-align: center;">
756
756
  ${this.errorMessage}
757
- ${this.errorAction?B`
757
+ ${this.errorAction?V`
758
758
  <button style="margin-left: 8px; padding: 4px 8px; background: transparent; border: 1px solid currentColor; border-radius: 4px; font-size: 12px; cursor: pointer;">
759
759
  ${this.errorAction}
760
760
  </button>
761
761
  `:""}
762
762
  </div>
763
763
  `:""}
764
- ${(()=>{let e=this.pnp?.getEnabledWallets?.()||[];return this.showWalletModal&&this.pnp?B`
764
+ ${(()=>{let e=this.pnp?.getEnabledWallets?.()||[];return this.showWalletModal&&this.pnp?V`
765
765
  <div style="position:fixed;inset:0;display:flex;align-items:center;justify-content:center;background:rgba(0,0,0,0.55);z-index:9999">
766
766
  <div class="card section" style="width:380px;border-radius:12px">
767
767
  <div class="label" style="font-weight:700;margin-bottom:12px;text-align:center">Choose Wallet</div>
768
768
  <div style="display:grid;grid-template-columns:1fr;gap:10px;margin-bottom:12px">
769
- ${e.map(t=>{let i=this.getWalletId(t),r=this.getWalletLabel(t),n=this.getWalletIcon(t);return B`
769
+ ${e.map(t=>{let i=this.getWalletId(t),r=this.getWalletLabel(t),n=this.getWalletIcon(t);return V`
770
770
  <button class="pay-button" style="display:flex;align-items:center;gap:10px;justify-content:center;padding:12px" @click=${()=>this.connectWithWallet(i)}>
771
- ${n?B`<img src="${n}" alt="${r}" style="width:20px;height:20px;border-radius:4px;object-fit:contain;background:transparent" />`:""}
771
+ ${n?V`<img src="${n}" alt="${r}" style="width:20px;height:20px;border-radius:4px;object-fit:contain;background:transparent" />`:""}
772
772
  <span>${r}</span>
773
773
  </button>`})}
774
774
  </div>
@@ -779,7 +779,7 @@ var Ne=Object.defineProperty;var Ue=Object.getOwnPropertyDescriptor;var s=(o,a,e
779
779
  </div>
780
780
  `:null})()}
781
781
  </div>
782
- `:B`<div class="card section">Loading...</div>`}};u.styles=[S,at`
782
+ `:V`<div class="card section">Loading...</div>`}};f.styles=[S,at`
783
783
  .thermo { width: 60px; height: 200px; background: var(--icpay-surface-alt); border: 3px solid #6b7280; border-radius: 30px; margin: 0 auto 12px; position: relative; overflow: hidden; }
784
784
  .fill { position: absolute; bottom: 0; left: 0; right: 0; background: linear-gradient(135deg, #d1d5db 0%, #9ca3af 100%); transition: height 0.8s ease; height: 0%; border-radius: 0 0 27px 27px; }
785
785
  .amounts { display: grid; grid-template-columns: repeat(3,1fr); gap: 8px; margin: 12px 0; }
@@ -811,14 +811,14 @@ var Ne=Object.defineProperty;var Ue=Object.getOwnPropertyDescriptor;var s=(o,a,e
811
811
  border-color: rgba(239, 68, 68, 0.3);
812
812
  color: #ef4444;
813
813
  }
814
- `],s([ct({type:Object})],u.prototype,"config",2),s([M()],u.prototype,"selectedAmount",2),s([M()],u.prototype,"selectedSymbol",2),s([M()],u.prototype,"raised",2),s([M()],u.prototype,"processing",2),s([M()],u.prototype,"succeeded",2),s([M()],u.prototype,"availableLedgers",2),s([M()],u.prototype,"errorMessage",2),s([M()],u.prototype,"errorSeverity",2),s([M()],u.prototype,"errorAction",2),s([M()],u.prototype,"walletConnected",2),s([M()],u.prototype,"pendingAction",2),s([M()],u.prototype,"showWalletModal",2),u=s([lt("icpay-donation-thermometer")],u);import{LitElement as dt,html as V,css as pt}from"lit";import{customElement as gt,property as ht,state as D}from"lit/decorators.js";var Se=typeof window<"u",ke=null;function ue(o,a,e){o&&(e!==void 0?console.log(`[ICPay Widget] ${a}`,e):console.log(`[ICPay Widget] ${a}`))}var v=class extends dt{constructor(){super(...arguments);this.selectedSymbol=null;this.processing=!1;this.succeeded=!1;this.availableLedgers=[];this.errorMessage=null;this.errorSeverity=null;this.errorAction=null;this.walletConnected=!1;this.pendingAction=null;this.showWalletModal=!1;this.pnp=null}get cryptoOptions(){return this.config?.cryptoOptions?.length?this.config.cryptoOptions:this.availableLedgers}connectedCallback(){super.connectedCallback(),Se&&(ue(this.config?.debug||!1,"Pay button connected",{config:this.config}),this.config?.cryptoOptions&&this.config.cryptoOptions.length>0||this.loadVerifiedLedgers(),this.config?.defaultSymbol&&(this.selectedSymbol=this.config.defaultSymbol))}updated(e){if(e.has("config")&&this.pendingAction&&this.config?.actorProvider){let t=this.pendingAction;this.pendingAction=null;try{window.dispatchEvent(new CustomEvent("icpay-sdk-wallet-connected",{detail:{walletType:"external"}}))}catch{}setTimeout(()=>{t==="pay"&&this.pay()},0)}}async loadVerifiedLedgers(){if(!(!Se||!this.config?.publishableKey))try{let t=await c(this.config).client.getVerifiedLedgers();this.availableLedgers=t.map(i=>({symbol:i.symbol,label:i.name,canisterId:i.canisterId})),this.selectedSymbol||(this.selectedSymbol=this.config?.defaultSymbol||(this.availableLedgers[0]?.symbol??"ICP"))}catch(e){this.dispatchEvent(new CustomEvent("icpay-error",{detail:{message:"Failed to load verified ledgers",cause:e},bubbles:!0})),this.availableLedgers=[{symbol:"ICP",label:"ICP",canisterId:"ryjl3-tyaaa-aaaaa-aaaba-cai"}],this.selectedSymbol||(this.selectedSymbol=this.config?.defaultSymbol||"ICP")}}selectSymbol(e){this.selectedSymbol=e}async ensureWallet(){if(this.config.useOwnWallet)return this.config.actorProvider?!0:(this.pendingAction="pay",this.dispatchEvent(new CustomEvent("icpay-connect-wallet",{bubbles:!0})),!1);if(this.walletConnected)return!0;try{ke||(ke=(await import("@windoge98/plug-n-play")).PNP),this.pnp=new ke(this.config?.plugNPlay||{});let e=this.pnp.getEnabledWallets();if(ue(this.config?.debug||!1,"Available wallets",e),!e?.length)throw new Error("No wallets available");return this.pendingAction="pay",this.showWalletModal=!0,!1}catch(e){return this.errorMessage=e instanceof Error?e.message:"Wallet connection failed",this.errorSeverity="error",!1}}getWalletId(e){return e&&(e.id||e.provider||e.key)||""}getWalletLabel(e){return e&&(e.label||e.name||e.title||e.id)||"Wallet"}getWalletIcon(e){return e&&(e.icon||e.logo||e.image)||null}async connectWithWallet(e){if(this.pnp)try{if(ue(this.config?.debug||!1,"Connecting to wallet",{walletId:e}),!e)throw new Error("No wallet ID provided");let t=await this.pnp.connect(e);if(ue(this.config?.debug||!1,"Wallet connect result",t),!!!(t&&(t.connected===!0||t.principal||t.owner||this.pnp?.account)))throw new Error("Wallet connection was rejected");this.walletConnected=!0;try{window.dispatchEvent(new CustomEvent("icpay-sdk-wallet-connected",{detail:{walletType:e}}))}catch{}this.config={...this.config,connectedWallet:t,actorProvider:(n,l)=>this.pnp.getActor({canisterId:n,idl:l,requiresSigning:!0,anon:!1})},this.showWalletModal=!1;let r=this.pendingAction;this.pendingAction=null,r==="pay"&&setTimeout(()=>this.pay(),0)}catch(t){ue(this.config?.debug||!1,"Wallet connection error",t),this.errorMessage=t instanceof Error?t.message:"Wallet connection failed",this.errorSeverity="error",this.showWalletModal=!1}}renderWalletModal(){if(!this.showWalletModal||!this.pnp)return null;let e=this.pnp.getEnabledWallets()||[];return V`
814
+ `],s([ct({type:Object})],f.prototype,"config",2),s([O()],f.prototype,"selectedAmount",2),s([O()],f.prototype,"selectedSymbol",2),s([O()],f.prototype,"raised",2),s([O()],f.prototype,"processing",2),s([O()],f.prototype,"succeeded",2),s([O()],f.prototype,"availableLedgers",2),s([O()],f.prototype,"errorMessage",2),s([O()],f.prototype,"errorSeverity",2),s([O()],f.prototype,"errorAction",2),s([O()],f.prototype,"walletConnected",2),s([O()],f.prototype,"pendingAction",2),s([O()],f.prototype,"showWalletModal",2),f=s([lt("icpay-donation-thermometer")],f);import{LitElement as dt,html as H,css as pt}from"lit";import{customElement as gt,property as ht,state as D}from"lit/decorators.js";var Se=typeof window<"u",ke=null;function ue(o,a,e){o&&(e!==void 0?console.log(`[ICPay Widget] ${a}`,e):console.log(`[ICPay Widget] ${a}`))}var w=class extends dt{constructor(){super(...arguments);this.selectedSymbol=null;this.processing=!1;this.succeeded=!1;this.availableLedgers=[];this.errorMessage=null;this.errorSeverity=null;this.errorAction=null;this.walletConnected=!1;this.pendingAction=null;this.showWalletModal=!1;this.pnp=null}get cryptoOptions(){return this.config?.cryptoOptions?.length?this.config.cryptoOptions:this.availableLedgers}connectedCallback(){super.connectedCallback(),Se&&(ue(this.config?.debug||!1,"Pay button connected",{config:this.config}),this.config?.cryptoOptions&&this.config.cryptoOptions.length>0||this.loadVerifiedLedgers(),this.config?.defaultSymbol&&(this.selectedSymbol=this.config.defaultSymbol))}updated(e){if(e.has("config")&&this.pendingAction&&this.config?.actorProvider){let t=this.pendingAction;this.pendingAction=null;try{window.dispatchEvent(new CustomEvent("icpay-sdk-wallet-connected",{detail:{walletType:"external"}}))}catch{}setTimeout(()=>{t==="pay"&&this.pay()},0)}}async loadVerifiedLedgers(){if(!(!Se||!this.config?.publishableKey))try{let t=await d(this.config).client.getVerifiedLedgers();this.availableLedgers=t.map(i=>({symbol:i.symbol,label:i.name,canisterId:i.canisterId})),this.selectedSymbol||(this.selectedSymbol=this.config?.defaultSymbol||(this.availableLedgers[0]?.symbol??"ICP"))}catch(e){this.dispatchEvent(new CustomEvent("icpay-error",{detail:{message:"Failed to load verified ledgers",cause:e},bubbles:!0})),this.availableLedgers=[{symbol:"ICP",label:"ICP",canisterId:"ryjl3-tyaaa-aaaaa-aaaba-cai"}],this.selectedSymbol||(this.selectedSymbol=this.config?.defaultSymbol||"ICP")}}selectSymbol(e){this.selectedSymbol=e}async ensureWallet(){if(this.config.useOwnWallet)return this.config.actorProvider?!0:(this.pendingAction="pay",this.dispatchEvent(new CustomEvent("icpay-connect-wallet",{bubbles:!0})),!1);if(this.walletConnected)return!0;try{ke||(ke=(await import("@windoge98/plug-n-play")).PNP),this.pnp=new ke(this.config?.plugNPlay||{});let e=this.pnp.getEnabledWallets();if(ue(this.config?.debug||!1,"Available wallets",e),!e?.length)throw new Error("No wallets available");return this.pendingAction="pay",this.showWalletModal=!0,!1}catch(e){return this.errorMessage=e instanceof Error?e.message:"Wallet connection failed",this.errorSeverity="error",!1}}getWalletId(e){return e&&(e.id||e.provider||e.key)||""}getWalletLabel(e){return e&&(e.label||e.name||e.title||e.id)||"Wallet"}getWalletIcon(e){return e&&(e.icon||e.logo||e.image)||null}async connectWithWallet(e){if(this.pnp)try{if(ue(this.config?.debug||!1,"Connecting to wallet",{walletId:e}),!e)throw new Error("No wallet ID provided");let t=await this.pnp.connect(e);if(ue(this.config?.debug||!1,"Wallet connect result",t),!!!(t&&(t.connected===!0||t.principal||t.owner||this.pnp?.account)))throw new Error("Wallet connection was rejected");this.walletConnected=!0;try{window.dispatchEvent(new CustomEvent("icpay-sdk-wallet-connected",{detail:{walletType:e}}))}catch{}this.config={...this.config,connectedWallet:t,actorProvider:(n,l)=>this.pnp.getActor({canisterId:n,idl:l,requiresSigning:!0,anon:!1})},this.showWalletModal=!1;let r=this.pendingAction;this.pendingAction=null,r==="pay"&&setTimeout(()=>this.pay(),0)}catch(t){ue(this.config?.debug||!1,"Wallet connection error",t),this.errorMessage=t instanceof Error?t.message:"Wallet connection failed",this.errorSeverity="error",this.showWalletModal=!1}}renderWalletModal(){if(!this.showWalletModal||!this.pnp)return null;let e=this.pnp.getEnabledWallets()||[];return H`
815
815
  <div style="position:fixed;inset:0;display:flex;align-items:center;justify-content:center;background:rgba(0,0,0,0.55);z-index:9999">
816
816
  <div class="card" style="width:380px;padding:16px;border-radius:12px">
817
817
  <div class="label" style="font-weight:700;margin-bottom:12px;text-align:center">Choose Wallet</div>
818
818
  <div style="display:grid;grid-template-columns:1fr;gap:10px;margin-bottom:12px">
819
- ${e.map(t=>{let i=this.getWalletId(t),r=this.getWalletLabel(t),n=this.getWalletIcon(t);return V`
819
+ ${e.map(t=>{let i=this.getWalletId(t),r=this.getWalletLabel(t),n=this.getWalletIcon(t);return H`
820
820
  <button class="pay-button" style="display:flex;align-items:center;gap:10px;justify-content:center;padding:12px" @click=${()=>this.connectWithWallet(i)}>
821
- ${n?V`<img src="${n}" alt="${r}" style="width:20px;height:20px;border-radius:4px;object-fit:contain;background:transparent" />`:""}
821
+ ${n?H`<img src="${n}" alt="${r}" style="width:20px;height:20px;border-radius:4px;object-fit:contain;background:transparent" />`:""}
822
822
  <span>${r}</span>
823
823
  </button>`})}
824
824
  </div>
@@ -827,14 +827,14 @@ var Ne=Object.defineProperty;var Ue=Object.getOwnPropertyDescriptor;var s=(o,a,e
827
827
  </button>
828
828
  </div>
829
829
  </div>
830
- `}async pay(){if(!(!Se||this.processing)){this.errorMessage=null,this.errorSeverity=null,this.errorAction=null;try{window.dispatchEvent(new CustomEvent("icpay-sdk-method-start",{detail:{name:"pay",type:"sendUsd",amount:this.config?.amountUsd,currency:this.selectedSymbol||this.config?.defaultSymbol}}))}catch{}this.processing=!0;try{if(!await this.ensureWallet())return;let t=c(this.config),i=this.selectedSymbol||"ICP",n=this.cryptoOptions.find(Z=>Z.symbol===i)?.canisterId||await t.client.getLedgerCanisterIdBySymbol(i),l=Number(this.config?.amountUsd??0),g={context:"pay-button"},x=await t.sendUsd(l,n,g);this.config.onSuccess&&this.config.onSuccess({id:x.transactionId,status:x.status}),this.succeeded=!0,this.dispatchEvent(new CustomEvent("icpay-pay",{detail:{amount:l,tx:x},bubbles:!0}))}catch(e){k(e,{onError:t=>{this.dispatchEvent(new CustomEvent("icpay-error",{detail:t,bubbles:!0})),$(t)&&(this.errorMessage=W(t),this.errorSeverity=C(t),this.errorAction=L(t))}})}finally{this.processing=!1}}}render(){if(!this.config)return V`<div class="card section">Loading...</div>`;let t=(this.cryptoOptions?.length||0)>1,i=this.config?.showLedgerDropdown,r=i==="dropdown"?"dropdown":i==="none"?"none":"buttons",n=r!=="none"&&(t||r==="dropdown"),l=r==="dropdown"?"dropdown":t?"buttons":"none",g=this.selectedSymbol||this.config?.defaultSymbol||"ICP",x=typeof this.config?.amountUsd=="number"?`${Number(this.config.amountUsd).toFixed(2)}`:"",ae=(this.config?.buttonLabel||(typeof this.config?.amountUsd=="number"?"Pay ${amount} with {symbol}":"Pay with {symbol}")).replace("{amount}",x||"$0.00").replace("{symbol}",g),J=this.config?.progressBar?.enabled!==!1;return V`
830
+ `}async pay(){if(!(!Se||this.processing)){this.errorMessage=null,this.errorSeverity=null,this.errorAction=null;try{window.dispatchEvent(new CustomEvent("icpay-sdk-method-start",{detail:{name:"pay",type:"sendUsd",amount:this.config?.amountUsd,currency:this.selectedSymbol||this.config?.defaultSymbol}}))}catch{}this.processing=!0;try{if(!await this.ensureWallet())return;let t=d(this.config),i=this.selectedSymbol||"ICP",n=this.cryptoOptions.find(F=>F.symbol===i)?.canisterId||await t.client.getLedgerCanisterIdBySymbol(i),l=Number(this.config?.amountUsd??0),c={context:"pay-button"},h=await t.sendUsd(l,n,c);this.config.onSuccess&&this.config.onSuccess({id:h.transactionId,status:h.status}),this.succeeded=!0,this.dispatchEvent(new CustomEvent("icpay-pay",{detail:{amount:l,tx:h},bubbles:!0}))}catch(e){k(e,{onError:t=>{this.dispatchEvent(new CustomEvent("icpay-error",{detail:t,bubbles:!0})),$(t)&&(this.errorMessage=W(t),this.errorSeverity=C(t),this.errorAction=L(t))}})}finally{this.processing=!1}}}render(){if(!this.config)return H`<div class="card section">Loading...</div>`;let t=(this.cryptoOptions?.length||0)>1,i=this.config?.showLedgerDropdown,r=i==="dropdown"?"dropdown":i==="none"?"none":"buttons",n=r!=="none"&&(t||r==="dropdown"),l=r==="dropdown"?"dropdown":t?"buttons":"none",c=this.selectedSymbol||this.config?.defaultSymbol||"ICP",h=typeof this.config?.amountUsd=="number"?`${Number(this.config.amountUsd).toFixed(2)}`:"",q=(this.config?.buttonLabel||(typeof this.config?.amountUsd=="number"?"Pay ${amount} with {symbol}":"Pay with {symbol}")).replace("{amount}",h||"$0.00").replace("{symbol}",c),ee=this.config?.progressBar?.enabled!==!1;return H`
831
831
  <div class="card section">
832
- ${J?V`
832
+ ${ee?H`
833
833
  <icpay-progress-bar></icpay-progress-bar>
834
834
  `:null}
835
835
 
836
836
  <div class="row ${n?"":"single"}">
837
- ${n?V`
837
+ ${n?H`
838
838
  <icpay-token-selector
839
839
  .options=${this.cryptoOptions}
840
840
  .value=${this.selectedSymbol||""}
@@ -846,19 +846,19 @@ var Ne=Object.defineProperty;var Ue=Object.getOwnPropertyDescriptor;var s=(o,a,e
846
846
  <button class="pay-button ${this.processing?"processing":""}"
847
847
  ?disabled=${this.processing||this.config?.disablePaymentButton===!0||this.succeeded&&this.config?.disableAfterSuccess===!0}
848
848
  @click=${()=>this.pay()}>
849
- ${this.succeeded&&this.config?.disableAfterSuccess?"Paid":this.processing?"Processing\u2026":ae}
849
+ ${this.succeeded&&this.config?.disableAfterSuccess?"Paid":this.processing?"Processing\u2026":q}
850
850
  </button>
851
851
  </div>
852
852
 
853
- ${this.errorMessage?V`
853
+ ${this.errorMessage?H`
854
854
  <div class="error-message ${this.errorSeverity}" style="margin-top: 12px; padding: 8px 12px; border-radius: 6px; font-size: 14px; text-align: center;">
855
855
  ${this.errorMessage}
856
- ${this.errorAction?V`<button style="margin-left: 8px; padding: 4px 8px; background: transparent; border: 1px solid currentColor; border-radius: 4px; font-size: 12px; cursor: pointer;">${this.errorAction}</button>`:""}
856
+ ${this.errorAction?H`<button style="margin-left: 8px; padding: 4px 8px; background: transparent; border: 1px solid currentColor; border-radius: 4px; font-size: 12px; cursor: pointer;">${this.errorAction}</button>`:""}
857
857
  </div>
858
858
  `:""}
859
859
  ${this.renderWalletModal()}
860
860
  </div>
861
- `}};v.styles=[S,pt`
861
+ `}};w.styles=[S,pt`
862
862
  .row { display: grid; grid-template-columns: 1fr auto; gap: 8px; align-items: center; }
863
863
  .row.single { grid-template-columns: 1fr; }
864
864
  select { background: var(--icpay-surface-alt); border: 1px solid var(--icpay-border); color: var(--icpay-text); border-radius: 8px; padding: 10px; font-weight: 600; }
@@ -866,21 +866,21 @@ var Ne=Object.defineProperty;var Ue=Object.getOwnPropertyDescriptor;var s=(o,a,e
866
866
  .error-message.info { background: rgba(59,130,246,0.1); border-color: rgba(59,130,246,0.3); color: #3b82f6; }
867
867
  .error-message.warning { background: rgba(245,158,11,0.1); border-color: rgba(245,158,11,0.3); color: #f59e0b; }
868
868
  .error-message.error { background: rgba(239,68,68,0.1); border-color: rgba(239,68,68,0.3); color: #ef4444; }
869
- `],s([ht({type:Object})],v.prototype,"config",2),s([D()],v.prototype,"selectedSymbol",2),s([D()],v.prototype,"processing",2),s([D()],v.prototype,"succeeded",2),s([D()],v.prototype,"availableLedgers",2),s([D()],v.prototype,"errorMessage",2),s([D()],v.prototype,"errorSeverity",2),s([D()],v.prototype,"errorAction",2),s([D()],v.prototype,"walletConnected",2),s([D()],v.prototype,"pendingAction",2),s([D()],v.prototype,"showWalletModal",2),v=s([gt("icpay-pay-button")],v);import{LitElement as ut,html as F,css as ft}from"lit";import{customElement as yt,property as bt,state as O}from"lit/decorators.js";var We=typeof window<"u",$e=null;function mt(o,a,e){o&&(e!==void 0?console.log(`[ICPay Widget] ${a}`,e):console.log(`[ICPay Widget] ${a}`))}var f=class extends ut{constructor(){super(...arguments);this.amountUsd=0;this.hasUserAmount=!1;this.selectedSymbol=null;this.processing=!1;this.succeeded=!1;this.availableLedgers=[];this.errorMessage=null;this.errorSeverity=null;this.errorAction=null;this.walletConnected=!1;this.pendingAction=null;this.showWalletModal=!1;this.pnp=null}get cryptoOptions(){return this.config?.cryptoOptions?.length?this.config.cryptoOptions:this.availableLedgers}connectedCallback(){super.connectedCallback(),We&&(mt(this.config?.debug||!1,"Amount input connected",{config:this.config}),this.amountUsd=Number(this.config?.defaultAmountUsd??0),this.hasUserAmount=!1,this.config?.cryptoOptions&&this.config.cryptoOptions.length>0||this.loadVerifiedLedgers(),this.config?.defaultSymbol&&(this.selectedSymbol=this.config.defaultSymbol))}updated(e){if(e.has("config")&&(!this.hasUserAmount&&typeof this.config?.defaultAmountUsd=="number"&&(this.amountUsd===0||this.amountUsd==null||Number.isNaN(this.amountUsd))&&(this.amountUsd=Number(this.config.defaultAmountUsd)),!this.selectedSymbol&&this.config?.defaultSymbol&&(this.selectedSymbol=this.config.defaultSymbol),!(this.config?.cryptoOptions&&this.config.cryptoOptions.length>0)&&this.availableLedgers.length===0&&this.loadVerifiedLedgers(),this.pendingAction&&this.config?.actorProvider)){let t=this.pendingAction;this.pendingAction=null;try{window.dispatchEvent(new CustomEvent("icpay-sdk-wallet-connected",{detail:{walletType:"external"}}))}catch{}setTimeout(()=>{t==="pay"&&this.pay()},0)}}async loadVerifiedLedgers(){if(!(!We||!this.config?.publishableKey))try{let t=await c(this.config).client.getVerifiedLedgers();this.availableLedgers=t.map(i=>({symbol:i.symbol,label:i.name,canisterId:i.canisterId})),this.selectedSymbol||(this.selectedSymbol=this.config?.defaultSymbol||(this.availableLedgers[0]?.symbol??"ICP"))}catch(e){this.dispatchEvent(new CustomEvent("icpay-error",{detail:{message:"Failed to load verified ledgers",cause:e},bubbles:!0})),this.availableLedgers=[{symbol:"ICP",label:"ICP",canisterId:"ryjl3-tyaaa-aaaaa-aaaba-cai"}],this.selectedSymbol||(this.selectedSymbol=this.config?.defaultSymbol||"ICP")}}onInputChange(e){let t=Number(this.config?.stepUsd??.5),i=Math.max(0,Number(e.target.value||0)),r=Math.round(i/t)*t;this.amountUsd=Number(r.toFixed(2)),this.hasUserAmount=!0}selectSymbol(e){this.selectedSymbol=e}isValidAmount(){let e=Number(this.config?.minUsd??.5),t=this.config?.maxUsd!==void 0?Number(this.config.maxUsd):1/0;return this.amountUsd>=e&&this.amountUsd<=t}async ensureWallet(){if(this.config.useOwnWallet)return this.config.actorProvider?!0:(this.pendingAction="pay",this.dispatchEvent(new CustomEvent("icpay-connect-wallet",{bubbles:!0})),!1);if(this.walletConnected)return!0;try{if($e||($e=(await import("@windoge98/plug-n-play")).PNP),this.pnp=new $e(this.config?.plugNPlay||{}),!this.pnp.getEnabledWallets()?.length)throw new Error("No wallets available");return this.pendingAction="pay",this.showWalletModal=!0,!1}catch(e){return this.errorMessage=e instanceof Error?e.message:"Wallet connection failed",this.errorSeverity="error",!1}}getWalletId(e){return e&&(e.id||e.provider||e.key)||""}getWalletLabel(e){return e&&(e.label||e.name||e.title||e.id)||"Wallet"}getWalletIcon(e){return e&&(e.icon||e.logo||e.image)||null}async connectWithWallet(e){if(this.pnp)try{if(!e)throw new Error("No wallet ID provided");let t=await this.pnp.connect(e);if(!!!(t&&(t.connected===!0||t.principal||t.owner||this.pnp?.account)))throw new Error("Wallet connection was rejected");this.walletConnected=!0;try{window.dispatchEvent(new CustomEvent("icpay-sdk-wallet-connected",{detail:{walletType:e}}))}catch{}this.config={...this.config,connectedWallet:t,actorProvider:(n,l)=>this.pnp.getActor({canisterId:n,idl:l,requiresSigning:!0,anon:!1})},this.showWalletModal=!1;let r=this.pendingAction;this.pendingAction=null,r==="pay"&&setTimeout(()=>this.pay(),0)}catch(t){this.errorMessage=t instanceof Error?t.message:"Wallet connection failed",this.errorSeverity="error",this.showWalletModal=!1}}async pay(){if(!(!We||this.processing)){if(this.errorMessage=null,this.errorSeverity=null,this.errorAction=null,!this.isValidAmount()){this.errorMessage="Please enter a valid amount",this.errorSeverity="warning";return}try{window.dispatchEvent(new CustomEvent("icpay-sdk-method-start",{detail:{name:"pay",type:"sendUsd",amount:this.amountUsd,currency:this.selectedSymbol||this.config?.defaultSymbol}}))}catch{}this.processing=!0;try{if(!await this.ensureWallet())return;let t=c(this.config),i=this.selectedSymbol||"ICP",n=this.cryptoOptions.find(Z=>Z.symbol===i)?.canisterId||await t.client.getLedgerCanisterIdBySymbol(i),l=Number(this.amountUsd),g={context:"amount-input"},x=await t.sendUsd(l,n,g);this.config.onSuccess&&this.config.onSuccess({id:x.transactionId,status:x.status,amountUsd:l}),this.succeeded=!0,this.dispatchEvent(new CustomEvent("icpay-amount-pay",{detail:{amount:l,tx:x},bubbles:!0}))}catch(e){k(e,{onError:t=>{this.dispatchEvent(new CustomEvent("icpay-error",{detail:t,bubbles:!0})),$(t)&&(this.errorMessage=W(t),this.errorSeverity=C(t),this.errorAction=L(t))}})}finally{this.processing=!1}}}render(){if(!this.config)return F`<div class="card section">Loading...</div>`;let e=this.config?.placeholder||"Enter amount in USD",i=(this.config?.buttonLabel||"Pay ${amount} with {symbol}").replace("{amount}",this.amountUsd?`${Number(this.amountUsd).toFixed(2)}`:"$0.00").replace("{symbol}",this.selectedSymbol||this.config?.defaultSymbol||"ICP"),r=this.config?.showLedgerDropdown===!0,n=this.cryptoOptions.find(U=>U.symbol===(this.selectedSymbol||""))?.label||this.cryptoOptions[0]?.label||this.config?.defaultSymbol||"ICP",l=this.config?.progressBar?.mode||"modal",g=this.config?.showLedgerDropdown,x=g==="buttons"?"buttons":g==="none"?"none":"dropdown",ae=this.config?.progressBar?.enabled!==!1&&(l==="modal"?!0:this.processing);return F`
869
+ `],s([ht({type:Object})],w.prototype,"config",2),s([D()],w.prototype,"selectedSymbol",2),s([D()],w.prototype,"processing",2),s([D()],w.prototype,"succeeded",2),s([D()],w.prototype,"availableLedgers",2),s([D()],w.prototype,"errorMessage",2),s([D()],w.prototype,"errorSeverity",2),s([D()],w.prototype,"errorAction",2),s([D()],w.prototype,"walletConnected",2),s([D()],w.prototype,"pendingAction",2),s([D()],w.prototype,"showWalletModal",2),w=s([gt("icpay-pay-button")],w);import{LitElement as ut,html as K,css as ft}from"lit";import{customElement as yt,property as bt,state as I}from"lit/decorators.js";var We=typeof window<"u",$e=null;function mt(o,a,e){o&&(e!==void 0?console.log(`[ICPay Widget] ${a}`,e):console.log(`[ICPay Widget] ${a}`))}var y=class extends ut{constructor(){super(...arguments);this.amountUsd=0;this.hasUserAmount=!1;this.selectedSymbol=null;this.processing=!1;this.succeeded=!1;this.availableLedgers=[];this.errorMessage=null;this.errorSeverity=null;this.errorAction=null;this.walletConnected=!1;this.pendingAction=null;this.showWalletModal=!1;this.pnp=null}get cryptoOptions(){return this.config?.cryptoOptions?.length?this.config.cryptoOptions:this.availableLedgers}connectedCallback(){super.connectedCallback(),We&&(mt(this.config?.debug||!1,"Amount input connected",{config:this.config}),this.amountUsd=Number(this.config?.defaultAmountUsd??0),this.hasUserAmount=!1,this.config?.cryptoOptions&&this.config.cryptoOptions.length>0||this.loadVerifiedLedgers(),this.config?.defaultSymbol&&(this.selectedSymbol=this.config.defaultSymbol))}updated(e){if(e.has("config")&&(!this.hasUserAmount&&typeof this.config?.defaultAmountUsd=="number"&&(this.amountUsd===0||this.amountUsd==null||Number.isNaN(this.amountUsd))&&(this.amountUsd=Number(this.config.defaultAmountUsd)),!this.selectedSymbol&&this.config?.defaultSymbol&&(this.selectedSymbol=this.config.defaultSymbol),!(this.config?.cryptoOptions&&this.config.cryptoOptions.length>0)&&this.availableLedgers.length===0&&this.loadVerifiedLedgers(),this.pendingAction&&this.config?.actorProvider)){let t=this.pendingAction;this.pendingAction=null;try{window.dispatchEvent(new CustomEvent("icpay-sdk-wallet-connected",{detail:{walletType:"external"}}))}catch{}setTimeout(()=>{t==="pay"&&this.pay()},0)}}async loadVerifiedLedgers(){if(!(!We||!this.config?.publishableKey))try{let t=await d(this.config).client.getVerifiedLedgers();this.availableLedgers=t.map(i=>({symbol:i.symbol,label:i.name,canisterId:i.canisterId})),this.selectedSymbol||(this.selectedSymbol=this.config?.defaultSymbol||(this.availableLedgers[0]?.symbol??"ICP"))}catch(e){this.dispatchEvent(new CustomEvent("icpay-error",{detail:{message:"Failed to load verified ledgers",cause:e},bubbles:!0})),this.availableLedgers=[{symbol:"ICP",label:"ICP",canisterId:"ryjl3-tyaaa-aaaaa-aaaba-cai"}],this.selectedSymbol||(this.selectedSymbol=this.config?.defaultSymbol||"ICP")}}onInputChange(e){let t=Number(this.config?.stepUsd??.5),i=Math.max(0,Number(e.target.value||0)),r=Math.round(i/t)*t;this.amountUsd=Number(r.toFixed(2)),this.hasUserAmount=!0}selectSymbol(e){this.selectedSymbol=e}isValidAmount(){let e=Number(this.config?.minUsd??.5),t=this.config?.maxUsd!==void 0?Number(this.config.maxUsd):1/0;return this.amountUsd>=e&&this.amountUsd<=t}async ensureWallet(){if(this.config.useOwnWallet)return this.config.actorProvider?!0:(this.pendingAction="pay",this.dispatchEvent(new CustomEvent("icpay-connect-wallet",{bubbles:!0})),!1);if(this.walletConnected)return!0;try{if($e||($e=(await import("@windoge98/plug-n-play")).PNP),this.pnp=new $e(this.config?.plugNPlay||{}),!this.pnp.getEnabledWallets()?.length)throw new Error("No wallets available");return this.pendingAction="pay",this.showWalletModal=!0,!1}catch(e){return this.errorMessage=e instanceof Error?e.message:"Wallet connection failed",this.errorSeverity="error",!1}}getWalletId(e){return e&&(e.id||e.provider||e.key)||""}getWalletLabel(e){return e&&(e.label||e.name||e.title||e.id)||"Wallet"}getWalletIcon(e){return e&&(e.icon||e.logo||e.image)||null}async connectWithWallet(e){if(this.pnp)try{if(!e)throw new Error("No wallet ID provided");let t=await this.pnp.connect(e);if(!!!(t&&(t.connected===!0||t.principal||t.owner||this.pnp?.account)))throw new Error("Wallet connection was rejected");this.walletConnected=!0;try{window.dispatchEvent(new CustomEvent("icpay-sdk-wallet-connected",{detail:{walletType:e}}))}catch{}this.config={...this.config,connectedWallet:t,actorProvider:(n,l)=>this.pnp.getActor({canisterId:n,idl:l,requiresSigning:!0,anon:!1})},this.showWalletModal=!1;let r=this.pendingAction;this.pendingAction=null,r==="pay"&&setTimeout(()=>this.pay(),0)}catch(t){this.errorMessage=t instanceof Error?t.message:"Wallet connection failed",this.errorSeverity="error",this.showWalletModal=!1}}async pay(){if(!(!We||this.processing)){if(this.errorMessage=null,this.errorSeverity=null,this.errorAction=null,!this.isValidAmount()){this.errorMessage="Please enter a valid amount",this.errorSeverity="warning";return}try{window.dispatchEvent(new CustomEvent("icpay-sdk-method-start",{detail:{name:"pay",type:"sendUsd",amount:this.amountUsd,currency:this.selectedSymbol||this.config?.defaultSymbol}}))}catch{}this.processing=!0;try{if(!await this.ensureWallet())return;let t=d(this.config),i=this.selectedSymbol||"ICP",n=this.cryptoOptions.find(F=>F.symbol===i)?.canisterId||await t.client.getLedgerCanisterIdBySymbol(i),l=Number(this.amountUsd),c={context:"amount-input"},h=await t.sendUsd(l,n,c);this.config.onSuccess&&this.config.onSuccess({id:h.transactionId,status:h.status,amountUsd:l}),this.succeeded=!0,this.dispatchEvent(new CustomEvent("icpay-amount-pay",{detail:{amount:l,tx:h},bubbles:!0}))}catch(e){k(e,{onError:t=>{this.dispatchEvent(new CustomEvent("icpay-error",{detail:t,bubbles:!0})),$(t)&&(this.errorMessage=W(t),this.errorSeverity=C(t),this.errorAction=L(t))}})}finally{this.processing=!1}}}render(){if(!this.config)return K`<div class="card section">Loading...</div>`;let e=this.config?.placeholder||"Enter amount in USD",i=(this.config?.buttonLabel||"Pay ${amount} with {symbol}").replace("{amount}",this.amountUsd?`${Number(this.amountUsd).toFixed(2)}`:"$0.00").replace("{symbol}",this.selectedSymbol||this.config?.defaultSymbol||"ICP"),r=this.config?.showLedgerDropdown===!0,n=this.cryptoOptions.find(A=>A.symbol===(this.selectedSymbol||""))?.label||this.cryptoOptions[0]?.label||this.config?.defaultSymbol||"ICP",l=this.config?.progressBar?.mode||"modal",c=this.config?.showLedgerDropdown,h=c==="buttons"?"buttons":c==="none"?"none":"dropdown",q=this.config?.progressBar?.enabled!==!1&&(l==="modal"?!0:this.processing);return K`
870
870
  <div class="card section">
871
- ${ae?F`<icpay-progress-bar mode="${l}"></icpay-progress-bar>`:null}
871
+ ${q?K`<icpay-progress-bar mode="${l}"></icpay-progress-bar>`:null}
872
872
 
873
873
  <div class="row">
874
- <input type="number" min="0" step="${Number(this.config?.stepUsd??.5)}" .value=${String(this.amountUsd||"")} placeholder="${e}" @input=${U=>this.onInputChange(U)} />
875
- ${x!=="none"?F`
874
+ <input type="number" min="0" step="${Number(this.config?.stepUsd??.5)}" .value=${String(this.amountUsd||"")} placeholder="${e}" @input=${A=>this.onInputChange(A)} />
875
+ ${h!=="none"?K`
876
876
  <icpay-token-selector
877
877
  .options=${this.cryptoOptions}
878
878
  .value=${this.selectedSymbol||""}
879
879
  .defaultSymbol=${this.config?.defaultSymbol||"ICP"}
880
- mode=${x}
881
- @icpay-token-change=${U=>this.selectSymbol(U.detail.symbol)}
880
+ mode=${h}
881
+ @icpay-token-change=${A=>this.selectSymbol(A.detail.symbol)}
882
882
  ></icpay-token-selector>
883
- `:F`
883
+ `:K`
884
884
  <div class="label" style="padding: 10px;">${n}</div>
885
885
  `}
886
886
  <button class="pay-button ${this.processing?"processing":""}"
@@ -891,21 +891,21 @@ var Ne=Object.defineProperty;var Ue=Object.getOwnPropertyDescriptor;var s=(o,a,e
891
891
  </div>
892
892
  <div class="hint">Default: ${this.config?.defaultSymbol||"ICP"}. Min: $${Number(this.config?.minUsd??.5).toFixed(2)}${this.config?.maxUsd?`, Max: $${Number(this.config.maxUsd).toFixed(2)}`:""}</div>
893
893
 
894
- ${this.errorMessage?F`
894
+ ${this.errorMessage?K`
895
895
  <div class="error-message ${this.errorSeverity}" style="margin-top: 12px; padding: 8px 12px; border-radius: 6px; font-size: 14px; text-align: center;">
896
896
  ${this.errorMessage}
897
- ${this.errorAction?F`<button style="margin-left: 8px; padding: 4px 8px; background: transparent; border: 1px solid currentColor; border-radius: 4px; font-size: 12px; cursor: pointer;">${this.errorAction}</button>`:""}
897
+ ${this.errorAction?K`<button style="margin-left: 8px; padding: 4px 8px; background: transparent; border: 1px solid currentColor; border-radius: 4px; font-size: 12px; cursor: pointer;">${this.errorAction}</button>`:""}
898
898
  </div>
899
899
  `:""}
900
- ${(()=>{let U=this.pnp?.getEnabledWallets?.()||[];return this.showWalletModal&&this.pnp?F`
900
+ ${(()=>{let A=this.pnp?.getEnabledWallets?.()||[];return this.showWalletModal&&this.pnp?K`
901
901
  <div style="position:fixed;inset:0;display:flex;align-items:center;justify-content:center;background:rgba(0,0,0,0.55);z-index:9999">
902
902
  <div class="card" style="width:380px;padding:16px;border-radius:12px">
903
903
  <div class="label" style="font-weight:700;margin-bottom:12px;text-align:center">Choose Wallet</div>
904
904
  <div style="display:grid;grid-template-columns:1fr;gap:10px;margin-bottom:12px">
905
- ${U.map(J=>{let le=this.getWalletId(J),K=this.getWalletLabel(J),E=this.getWalletIcon(J);return F`
905
+ ${A.map(ee=>{let le=this.getWalletId(ee),_=this.getWalletLabel(ee),E=this.getWalletIcon(ee);return K`
906
906
  <button class="pay-button" style="display:flex;align-items:center;gap:10px;justify-content:center;padding:12px" @click=${()=>this.connectWithWallet(le)}>
907
- ${E?F`<img src="${E}" alt="${K}" style="width:20px;height:20px;border-radius:4px;object-fit:contain;background:transparent" />`:""}
908
- <span>${K}</span>
907
+ ${E?K`<img src="${E}" alt="${_}" style="width:20px;height:20px;border-radius:4px;object-fit:contain;background:transparent" />`:""}
908
+ <span>${_}</span>
909
909
  </button>`})}
910
910
  </div>
911
911
  <button class="pay-button" style="background:#6b7280;color:#f9fafb" @click=${()=>{this.showWalletModal=!1}}>
@@ -915,7 +915,7 @@ var Ne=Object.defineProperty;var Ue=Object.getOwnPropertyDescriptor;var s=(o,a,e
915
915
  </div>
916
916
  `:null})()}
917
917
  </div>
918
- `}};f.styles=[S,ft`
918
+ `}};y.styles=[S,ft`
919
919
  .row { display: grid; grid-template-columns: 1fr auto auto; gap: 8px; align-items: center; }
920
920
  input[type="number"] { background: var(--icpay-surface-alt); border: 1px solid var(--icpay-border); color: var(--icpay-text); border-radius: 8px; padding: 10px; font-weight: 600; }
921
921
  select { background: var(--icpay-surface-alt); border: 1px solid var(--icpay-border); color: var(--icpay-text); border-radius: 8px; padding: 10px; font-weight: 600; }
@@ -924,5 +924,5 @@ var Ne=Object.defineProperty;var Ue=Object.getOwnPropertyDescriptor;var s=(o,a,e
924
924
  .error-message.warning { background: rgba(245,158,11,0.1); border-color: rgba(245,158,11,0.3); color: #f59e0b; }
925
925
  .error-message.error { background: rgba(239,68,68,0.1); border-color: rgba(239,68,68,0.3); color: #ef4444; }
926
926
  .hint { font-size: 12px; color: var(--icpay-muted); margin-top: 6px; }
927
- `],s([bt({type:Object})],f.prototype,"config",2),s([O()],f.prototype,"amountUsd",2),s([O()],f.prototype,"hasUserAmount",2),s([O()],f.prototype,"selectedSymbol",2),s([O()],f.prototype,"processing",2),s([O()],f.prototype,"succeeded",2),s([O()],f.prototype,"availableLedgers",2),s([O()],f.prototype,"errorMessage",2),s([O()],f.prototype,"errorSeverity",2),s([O()],f.prototype,"errorAction",2),s([O()],f.prototype,"walletConnected",2),s([O()],f.prototype,"pendingAction",2),s([O()],f.prototype,"showWalletModal",2),f=s([yt("icpay-amount-input")],f);export{f as ICPayAmountInput,p as ICPayArticlePaywall,m as ICPayCoffeeShop,u as ICPayDonationThermometer,v as ICPayPayButton,y as ICPayPremiumContent,h as ICPayTipJar,ee as applyThemeVars,S as baseStyles,c as createSdk};
927
+ `],s([bt({type:Object})],y.prototype,"config",2),s([I()],y.prototype,"amountUsd",2),s([I()],y.prototype,"hasUserAmount",2),s([I()],y.prototype,"selectedSymbol",2),s([I()],y.prototype,"processing",2),s([I()],y.prototype,"succeeded",2),s([I()],y.prototype,"availableLedgers",2),s([I()],y.prototype,"errorMessage",2),s([I()],y.prototype,"errorSeverity",2),s([I()],y.prototype,"errorAction",2),s([I()],y.prototype,"walletConnected",2),s([I()],y.prototype,"pendingAction",2),s([I()],y.prototype,"showWalletModal",2),y=s([yt("icpay-amount-input")],y);export{y as ICPayAmountInput,g as ICPayArticlePaywall,v as ICPayCoffeeShop,f as ICPayDonationThermometer,w as ICPayPayButton,b as ICPayPremiumContent,u as ICPayTipJar,te as applyThemeVars,S as baseStyles,d as createSdk};
928
928
  //# sourceMappingURL=index.js.map