@primer-io/primer-js 0.3.8 → 0.3.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +12 -0
- package/dist/custom-elements.json +176 -120
- package/dist/jsx/index.d.ts +14 -14
- package/dist/primer-loader.d.ts +7 -4
- package/dist/primer-loader.js +9 -9
- package/dist/vscode.html-custom-data.json +6 -6
- package/dist/web-types.json +18 -18
- package/package.json +1 -1
package/dist/primer-loader.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import{a as fo,b as d,c as I}from"./chunks/chunk.DV3REKZU.js";var sr=class{constructor(t){(this.host=t).addController(this)}hostConnected(){}setCardNetworksLoading(){let t={detectedCardNetwork:null,selectableCardNetworks:[],isLoading:!0};this.updateCardNetworksState(t)}updateCardNetworksState(t){this.host.primerEventsController.dispatchCardNetworkChange(t),this.host.sdkContextController.setCardNetworks(t)}processCardNetworkChangeEvent(t){let{detectedCardNetworks:e,selectableCardNetworks:r}=t,o=e.preferred??e.items[0],a=r?.items??[];this.updateCardNetworksState({detectedCardNetwork:o,selectableCardNetworks:a,isLoading:!1})}};var Pt=class{constructor(t){(this.host=t).addController(this)}hostConnected(){}dispatchEvent(t,e){this.host.dispatchEvent(new CustomEvent(t,{detail:e,bubbles:!0,composed:!0}))}dispatchSdkState(t){this.dispatchEvent("primer:state-change",t)}dispatchPaymentMethods(t){this.dispatchEvent("primer:methods-update",t)}dispatchCheckoutInitialized(t){this.dispatchEvent("primer:ready",t)}dispatchCardNetworkChange(t){this.dispatchEvent("primer:card-network-change",t)}dispatchCardSubmit(t){this.dispatchEvent("primer:card-submit",{source:t})}dispatchFormSubmitSuccess(t){this.dispatchEvent("primer:card-success",{result:t})}dispatchFormSubmitErrors(t){this.dispatchEvent("primer:card-error",{errors:t})}handleExternalCardSubmit(t){this.dispatchCardSubmit(t.source)}};var Xe=class extends Event{constructor(t,e,r,o){super("context-request",{bubbles:!0,composed:!0}),this.context=t,this.contextTarget=e,this.callback=r,this.subscribe=o??!1}};var Tt=class{constructor(t,e,r,o){if(this.subscribe=!1,this.provided=!1,this.value=void 0,this.t=(a,n)=>{this.unsubscribe&&(this.unsubscribe!==n&&(this.provided=!1,this.unsubscribe()),this.subscribe||this.unsubscribe()),this.value=a,this.host.requestUpdate(),this.provided&&!this.subscribe||(this.provided=!0,this.callback&&this.callback(a,n)),this.unsubscribe=n},this.host=t,e.context!==void 0){let a=e;this.context=a.context,this.callback=a.callback,this.subscribe=a.subscribe??!1}else this.context=e,this.callback=r,this.subscribe=o??!1;this.host.addController(this)}hostConnected(){this.dispatchRequest()}hostDisconnected(){this.unsubscribe&&(this.unsubscribe(),this.unsubscribe=void 0)}dispatchRequest(){this.host.dispatchEvent(new Xe(this.context,this.host,this.t,this.subscribe))}};var lr=class{get value(){return this.o}set value(t){this.setValue(t)}setValue(t,e=!1){let r=e||!Object.is(t,this.o);this.o=t,r&&this.updateObservers()}constructor(t){this.subscriptions=new Map,this.updateObservers=()=>{for(let[e,{disposer:r}]of this.subscriptions)e(this.o,r)},t!==void 0&&(this.value=t)}addCallback(t,e,r){if(!r)return void t(this.value);this.subscriptions.has(t)||this.subscriptions.set(t,{disposer:()=>{this.subscriptions.delete(t)},consumerHost:e});let{disposer:o}=this.subscriptions.get(t);t(this.value,o)}clearCallbacks(){this.subscriptions.clear()}};var ci=class extends Event{constructor(t,e){super("context-provider",{bubbles:!0,composed:!0}),this.context=t,this.contextTarget=e}},F=class extends lr{constructor(t,e,r){super(e.context!==void 0?e.initialValue:r),this.onContextRequest=o=>{if(o.context!==this.context)return;let a=o.contextTarget??o.composedPath()[0];a!==this.host&&(o.stopPropagation(),this.addCallback(o.callback,a,o.subscribe))},this.onProviderRequest=o=>{if(o.context!==this.context||(o.contextTarget??o.composedPath()[0])===this.host)return;let a=new Set;for(let[n,{consumerHost:l}]of this.subscriptions)a.has(n)||(a.add(n),l.dispatchEvent(new Xe(this.context,l,n,!0)));o.stopPropagation()},this.host=t,e.context!==void 0?this.context=e.context:this.context=e,this.attachListeners(),this.host.addController?.(this)}attachListeners(){this.host.addEventListener("context-request",this.onContextRequest),this.host.addEventListener("context-provider",this.onProviderRequest)}hostConnected(){this.host.dispatchEvent(new ci(this.context,this.host))}};function C({context:i,subscribe:t}){return(e,r)=>{typeof r=="object"?r.addInitializer(function(){new Tt(this,{context:i,callback:o=>{e.set.call(this,o)},subscribe:t})}):e.constructor.addInitializer(o=>{new Tt(o,{context:i,callback:a=>{o[r]=a},subscribe:t})})}}var Qe=Symbol("analytics-context");var wt=Symbol("events-context");var dr="cardNetworksContext";var ne="clientOptionsContext";var et="computedStylesContext";var B="headlessInstanceContext";var cr="klarnaCategoriesContext";var se="managerContext";var tt="paymentMethodsContext";var z="sdkStateContext";var le="vaultManagerContext";var Te="vaultManagerCvvContext";var U=class U{static log(t,...e){U.enabled}static info(t,...e){U.enabled}static warn(t,...e){U.enabled}static error(t,...e){U.enabled&&e.forEach(r=>{r instanceof Error&&r.toJSON})}static debug(t,...e){U.enabled}static table(t,e){U.enabled}static time(t){U.enabled}static timeEnd(t){U.enabled}};I(U,"enabled",!0),I(U,"defaultFont","font-family: Consolas, monospace; font-size: 12px;"),I(U,"brandTag","[PRIMER]"),I(U,"brandStyle",`background: #24292e; color: #ffffff; padding: 2px 6px; border-radius: 3px; font-weight: bold; margin-right: 4px; ${U.defaultFont}`),I(U,"styles",{log:`color: #4CAF50; ${U.defaultFont}`,info:`color: #2196F3; ${U.defaultFont}`,warn:`color: #FF9800; ${U.defaultFont}`,error:`color: #F44336; ${U.defaultFont}`,debug:`color: #9C27B0; ${U.defaultFont}`});var P=U;function ps(i,t,e,r){let o=i,a=e;return{dispatch:n=>{let l=t(o,n,a);o=l,r(l)},getState:()=>Object.freeze({...o}),setCallbacks:n=>{a={...a,...n}}}}function $t(i){return(t,e,r)=>{let o=i[e.type];if(!o)throw new Error(`No handler for action type: ${e.type}`);return o(t,e,r)}}var ut=class{constructor(t,e,r,o,a=()=>{this.host.requestUpdate()}){this.host=t;this.stateHandler=a;this.host.addController(this),this._dispatcher=ps(e,r,o,n=>{this.stateHandler(n)})}get currentState(){return this._dispatcher.getState()}dispatch(t){this._dispatcher.dispatch(t)}setCallbacks(t){this._dispatcher.setCallbacks(t)}hostConnected(){}hostDisconnected(){}},pr=class{constructor(t){this.host=t;this._controllers=[];"addController"in this.host&&this.host.addController(this)}addController(t){this._controllers.push(t)}hostConnected(){this._controllers.forEach(t=>{t.hostConnected&&t.hostConnected()})}hostDisconnected(){this._controllers.forEach(t=>{t.hostDisconnected&&t.hostDisconnected()})}};var ur={isSuccessful:!1,isProcessing:!1,isLoading:!1,error:null,failure:null},ms={START_LOADING:i=>({...i,isLoading:!0}),START_PROCESSING:i=>({...i,failure:null,isProcessing:!0}),STOP_PROCESSING:i=>({...i,isProcessing:!1}),COMPLETE_PROCESSING:i=>({...i,isProcessing:!1,isSuccessful:!0}),SET_ERROR:(i,t)=>(P.error(t.payload.message),{...i,isProcessing:!1,error:t.payload}),SET_FAILURE:(i,t)=>({...i,isProcessing:!1,failure:t.payload}),COMPLETE_LOADING:i=>({...i,isLoading:!1}),RESET:()=>ur,RESET_ERROR:i=>({...i,error:null,failure:null})},us=$t(ms),mr=class extends ut{constructor(t){super(t,ur,us,null,e=>{t.sdkContextController.setSdkState(e),t.primerEventsController.dispatchSdkState(e)})}startLoading(){this.dispatch({type:"START_LOADING"})}startProcessing(){this.dispatch({type:"START_PROCESSING"})}stopProcessing(){this.dispatch({type:"STOP_PROCESSING"})}completeProcessing(){this.dispatch({type:"COMPLETE_PROCESSING"})}completeLoading(){this.dispatch({type:"COMPLETE_LOADING"})}setError(t){this.dispatch({type:"SET_ERROR",payload:t})}setFailure(t,e,r){this.dispatch({type:"SET_FAILURE",payload:{code:t,message:e,details:r}})}reset(){this.dispatch({type:"RESET"})}resetError(){this.dispatch({type:"RESET_ERROR"})}forceCompleteLoading(){this.currentState.isLoading&&(P.warn("Force completing loading state"),this.completeLoading())}};var hr=class{constructor(t){this.sdkStateProvider=null;this.paymentMethodsProvider=null;this.paymentManagerProvider=null;this.cardNetworksContext=null;this.vaultManagerCvvProvider=null;this.clientOptionsContext=null;this.headlessUtilsProvider=null;this.klarnaCategoriesProvider=null;this.computedStylesProvider=null;this.analyticsProvider=null;this.eventsProvider=null;(this.host=t).addController(this),this.sdkStateProvider=new F(t,{context:z,initialValue:ur}),this.paymentMethodsProvider=new F(t,{context:tt,initialValue:null}),this.paymentManagerProvider=new F(t,{context:se,initialValue:new Map}),this.cardNetworksContext=new F(t,{context:dr,initialValue:null}),this.vaultManagerProvider=new F(t,{context:le,initialValue:null}),this.vaultManagerCvvProvider=new F(t,{context:Te,initialValue:null}),this.clientOptionsContext=new F(t,{context:ne,initialValue:null}),this.klarnaCategoriesProvider=new F(t,{context:cr,initialValue:{categories:[],isLoading:!0}}),this.headlessUtilsProvider=new F(t,{context:B,initialValue:null}),this.computedStylesProvider=new F(t,{context:et,initialValue:null}),this.analyticsProvider=new F(t,{context:Qe,initialValue:null}),this.eventsProvider=new F(t,{context:wt,initialValue:null})}hostConnected(){}setSdkState(t){this.sdkStateProvider?.setValue(t)}setPaymentMethods(t){this.paymentMethodsProvider?.setValue(t)}setPaymentManagers(t){this.paymentManagerProvider?.setValue(t)}setCardNetworks(t){this.cardNetworksContext?.setValue(t)}setVaultManager(t){this.vaultManagerProvider?.setValue(t)}setKlarnaCategories(t){this.klarnaCategoriesProvider?.setValue(t)}setClientOptions(t){this.clientOptionsContext?.setValue(t)}setHeadlessUtils(t){this.headlessUtilsProvider?.setValue(t)}setAnalyticsUtils(t){this.analyticsProvider?.setValue(t)}getAnalyticsUtils(){return this.analyticsProvider?.value}setComputedStyles(t){this.computedStylesProvider?.setValue(t)}setVaultManagerCvv(t){this.vaultManagerCvvProvider?.setValue(t)}setEventsController(t){this.eventsProvider?.setValue(t)}};var ht=class ht{constructor(t){(this.host=t).addController(this)}processCustomStyles(t){try{let e=JSON.parse(t);this.applyStyles(e)}catch(e){P.error("Error parsing customStyles property.",e instanceof Error?e:new Error(String(e)))}}isValidCssProperty(t){return/^[a-zA-Z][a-zA-Z0-9]*$/.test(t)}isValidCssValue(t){let r=/^[\w\s#.,%()\-+/!]+$/.test(t);return r||P.warn(`Rejected potentially unsafe CSS value: ${t}`),r}getCssVarName(t){let e=ht.cssVarCache.get(t);return e||(e=`--${t.replace(/([A-Z])/g,(r,o)=>`-${o.toLowerCase()}`)}`,ht.cssVarCache.set(t,e)),e}applyStyles(t){let e=[];for(let r of Object.keys(t)){let o=t[r];if(!o)continue;if(!this.isValidCssProperty(r)){P.warn(`Skipping invalid CSS property name: ${r}`);continue}if(!this.isValidCssValue(o))continue;let a=this.getCssVarName(r);e.push([a,o])}if(e.length>0)for(let[r,o]of e)this.host.style.setProperty(r,o)}removeStyle(t){let e=this.getCssVarName(t);this.host.style.removeProperty(e)}clearAllStyles(){for(let t of ht.cssVarCache.keys()){let e=ht.cssVarCache.get(t);e&&this.host.style.removeProperty(e)}}hostDisconnected(){}};ht.cssVarCache=new Map;var fr=ht;var yr=globalThis,vr=yr.ShadowRoot&&(yr.ShadyCSS===void 0||yr.ShadyCSS.nativeShadow)&&"adoptedStyleSheets"in Document.prototype&&"replace"in CSSStyleSheet.prototype,go=Symbol(),yo=new WeakMap,gr=class{constructor(t,e,r){if(this._$cssResult$=!0,r!==go)throw Error("CSSResult is not constructable. Use `unsafeCSS` or `css` instead.");this.cssText=t,this.t=e}get styleSheet(){let t=this.o,e=this.t;if(vr&&t===void 0){let r=e!==void 0&&e.length===1;r&&(t=yo.get(e)),t===void 0&&((this.o=t=new CSSStyleSheet).replaceSync(this.cssText),r&&yo.set(e,t))}return t}toString(){return this.cssText}},vo=i=>new gr(typeof i=="string"?i:i+"",void 0,go);var pi=(i,t)=>{if(vr)i.adoptedStyleSheets=t.map(e=>e instanceof CSSStyleSheet?e:e.styleSheet);else for(let e of t){let r=document.createElement("style"),o=yr.litNonce;o!==void 0&&r.setAttribute("nonce",o),r.textContent=e.cssText,i.appendChild(r)}},br=vr?i=>i:i=>i instanceof CSSStyleSheet?(t=>{let e="";for(let r of t.cssRules)e+=r.cssText;return vo(e)})(i):i;var{is:hs,defineProperty:fs,getOwnPropertyDescriptor:ys,getOwnPropertyNames:gs,getOwnPropertySymbols:vs,getPrototypeOf:bs}=Object,rt=globalThis,bo=rt.trustedTypes,Cs=bo?bo.emptyScript:"",Es=rt.reactiveElementPolyfillSupport,Vt=(i,t)=>i,mi={toAttribute(i,t){switch(t){case Boolean:i=i?Cs:null;break;case Object:case Array:i=i==null?i:JSON.stringify(i)}return i},fromAttribute(i,t){let e=i;switch(t){case Boolean:e=i!==null;break;case Number:e=i===null?null:Number(i);break;case Object:case Array:try{e=JSON.parse(i)}catch{e=null}}return e}},Cr=(i,t)=>!hs(i,t),Co={attribute:!0,type:String,converter:mi,reflect:!1,hasChanged:Cr};Symbol.metadata??(Symbol.metadata=Symbol("metadata")),rt.litPropertyMetadata??(rt.litPropertyMetadata=new WeakMap);var ft=class extends HTMLElement{static addInitializer(t){this._$Ei(),(this.l??(this.l=[])).push(t)}static get observedAttributes(){return this.finalize(),this._$Eh&&[...this._$Eh.keys()]}static createProperty(t,e=Co){if(e.state&&(e.attribute=!1),this._$Ei(),this.elementProperties.set(t,e),!e.noAccessor){let r=Symbol(),o=this.getPropertyDescriptor(t,r,e);o!==void 0&&fs(this.prototype,t,o)}}static getPropertyDescriptor(t,e,r){let{get:o,set:a}=ys(this.prototype,t)??{get(){return this[e]},set(n){this[e]=n}};return{get(){return o?.call(this)},set(n){let l=o?.call(this);a.call(this,n),this.requestUpdate(t,l,r)},configurable:!0,enumerable:!0}}static getPropertyOptions(t){return this.elementProperties.get(t)??Co}static _$Ei(){if(this.hasOwnProperty(Vt("elementProperties")))return;let t=bs(this);t.finalize(),t.l!==void 0&&(this.l=[...t.l]),this.elementProperties=new Map(t.elementProperties)}static finalize(){if(this.hasOwnProperty(Vt("finalized")))return;if(this.finalized=!0,this._$Ei(),this.hasOwnProperty(Vt("properties"))){let e=this.properties,r=[...gs(e),...vs(e)];for(let o of r)this.createProperty(o,e[o])}let t=this[Symbol.metadata];if(t!==null){let e=litPropertyMetadata.get(t);if(e!==void 0)for(let[r,o]of e)this.elementProperties.set(r,o)}this._$Eh=new Map;for(let[e,r]of this.elementProperties){let o=this._$Eu(e,r);o!==void 0&&this._$Eh.set(o,e)}this.elementStyles=this.finalizeStyles(this.styles)}static finalizeStyles(t){let e=[];if(Array.isArray(t)){let r=new Set(t.flat(1/0).reverse());for(let o of r)e.unshift(br(o))}else t!==void 0&&e.push(br(t));return e}static _$Eu(t,e){let r=e.attribute;return r===!1?void 0:typeof r=="string"?r:typeof t=="string"?t.toLowerCase():void 0}constructor(){super(),this._$Ep=void 0,this.isUpdatePending=!1,this.hasUpdated=!1,this._$Em=null,this._$Ev()}_$Ev(){this._$ES=new Promise(t=>this.enableUpdating=t),this._$AL=new Map,this._$E_(),this.requestUpdate(),this.constructor.l?.forEach(t=>t(this))}addController(t){(this._$EO??(this._$EO=new Set)).add(t),this.renderRoot!==void 0&&this.isConnected&&t.hostConnected?.()}removeController(t){this._$EO?.delete(t)}_$E_(){let t=new Map,e=this.constructor.elementProperties;for(let r of e.keys())this.hasOwnProperty(r)&&(t.set(r,this[r]),delete this[r]);t.size>0&&(this._$Ep=t)}createRenderRoot(){let t=this.shadowRoot??this.attachShadow(this.constructor.shadowRootOptions);return pi(t,this.constructor.elementStyles),t}connectedCallback(){this.renderRoot??(this.renderRoot=this.createRenderRoot()),this.enableUpdating(!0),this._$EO?.forEach(t=>t.hostConnected?.())}enableUpdating(t){}disconnectedCallback(){this._$EO?.forEach(t=>t.hostDisconnected?.())}attributeChangedCallback(t,e,r){this._$AK(t,r)}_$EC(t,e){let r=this.constructor.elementProperties.get(t),o=this.constructor._$Eu(t,r);if(o!==void 0&&r.reflect===!0){let a=(r.converter?.toAttribute!==void 0?r.converter:mi).toAttribute(e,r.type);this._$Em=t,a==null?this.removeAttribute(o):this.setAttribute(o,a),this._$Em=null}}_$AK(t,e){let r=this.constructor,o=r._$Eh.get(t);if(o!==void 0&&this._$Em!==o){let a=r.getPropertyOptions(o),n=typeof a.converter=="function"?{fromAttribute:a.converter}:a.converter?.fromAttribute!==void 0?a.converter:mi;this._$Em=o,this[o]=n.fromAttribute(e,a.type),this._$Em=null}}requestUpdate(t,e,r){if(t!==void 0){if(r??(r=this.constructor.getPropertyOptions(t)),!(r.hasChanged??Cr)(this[t],e))return;this.P(t,e,r)}this.isUpdatePending===!1&&(this._$ES=this._$ET())}P(t,e,r){this._$AL.has(t)||this._$AL.set(t,e),r.reflect===!0&&this._$Em!==t&&(this._$Ej??(this._$Ej=new Set)).add(t)}async _$ET(){this.isUpdatePending=!0;try{await this._$ES}catch(e){Promise.reject(e)}let t=this.scheduleUpdate();return t!=null&&await t,!this.isUpdatePending}scheduleUpdate(){return this.performUpdate()}performUpdate(){if(!this.isUpdatePending)return;if(!this.hasUpdated){if(this.renderRoot??(this.renderRoot=this.createRenderRoot()),this._$Ep){for(let[o,a]of this._$Ep)this[o]=a;this._$Ep=void 0}let r=this.constructor.elementProperties;if(r.size>0)for(let[o,a]of r)a.wrapped!==!0||this._$AL.has(o)||this[o]===void 0||this.P(o,this[o],a)}let t=!1,e=this._$AL;try{t=this.shouldUpdate(e),t?(this.willUpdate(e),this._$EO?.forEach(r=>r.hostUpdate?.()),this.update(e)):this._$EU()}catch(r){throw t=!1,this._$EU(),r}t&&this._$AE(e)}willUpdate(t){}_$AE(t){this._$EO?.forEach(e=>e.hostUpdated?.()),this.hasUpdated||(this.hasUpdated=!0,this.firstUpdated(t)),this.updated(t)}_$EU(){this._$AL=new Map,this.isUpdatePending=!1}get updateComplete(){return this.getUpdateComplete()}getUpdateComplete(){return this._$ES}shouldUpdate(t){return!0}update(t){this._$Ej&&(this._$Ej=this._$Ej.forEach(e=>this._$EC(e,this[e]))),this._$EU()}updated(t){}firstUpdated(t){}};ft.elementStyles=[],ft.shadowRootOptions={mode:"open"},ft[Vt("elementProperties")]=new Map,ft[Vt("finalized")]=new Map,Es?.({ReactiveElement:ft}),(rt.reactiveElementVersions??(rt.reactiveElementVersions=[])).push("2.0.4");var it={INITIAL:0,PENDING:1,COMPLETE:2,ERROR:3},L=Symbol(),D=class{get taskComplete(){return this.t||(this.i===1?this.t=new Promise((t,e)=>{this.o=t,this.h=e}):this.i===3?this.t=Promise.reject(this.l):this.t=Promise.resolve(this.u)),this.t}constructor(t,e,r){this.p=0,this.i=0,(this._=t).addController(this);let o=typeof e=="object"?e:{task:e,args:r};this.v=o.task,this.j=o.args,this.m=o.argsEqual??Eo,this.k=o.onComplete,this.A=o.onError,this.autoRun=o.autoRun??!0,"initialValue"in o&&(this.u=o.initialValue,this.i=2,this.O=this.T?.())}hostUpdate(){this.autoRun===!0&&this.S()}hostUpdated(){this.autoRun==="afterUpdate"&&this.S()}T(){if(this.j===void 0)return;let t=this.j();if(!Array.isArray(t))throw Error("The args function must return an array");return t}async S(){let t=this.T(),e=this.O;this.O=t,t===e||t===void 0||e!==void 0&&this.m(e,t)||await this.run(t)}async run(t){let e,r;t??(t=this.T()),this.O=t,this.i===1?this.q?.abort():(this.t=void 0,this.o=void 0,this.h=void 0),this.i=1,this.autoRun==="afterUpdate"?queueMicrotask(()=>this._.requestUpdate()):this._.requestUpdate();let o=++this.p;this.q=new AbortController;let a=!1;try{e=await this.v(t,{signal:this.q.signal})}catch(n){a=!0,r=n}if(this.p===o){if(e===L)this.i=0;else{if(a===!1){try{this.k?.(e)}catch{}this.i=2,this.o?.(e)}else{try{this.A?.(r)}catch{}this.i=3,this.h?.(r)}this.u=e,this.l=r}this._.requestUpdate()}}abort(t){this.i===1&&this.q?.abort(t)}get value(){return this.u}get error(){return this.l}get status(){return this.i}render(t){switch(this.i){case 0:return t.initial?.();case 1:return t.pending?.();case 2:return t.complete?.(this.value);case 3:return t.error?.(this.error);default:throw Error("Unexpected status: "+this.i)}}},Eo=(i,t)=>i===t||i.length===t.length&&i.every((e,r)=>!Cr(e,t[r]));var xs={SET_LOADING:(i,t)=>({...i,isLoading:t.payload}),SET_UPDATING:(i,t)=>({...i,isUpdating:t.payload}),INITIALIZE_VAULT_MANAGER:(i,t,e)=>({...i,enabled:t.vaultEnabled,cvvRecapture:t.cvvRecapture,showEmptyState:t.showEmptyState,deleteVaultedPaymentMethod:e.deleteVaultedPaymentMethod,startVaultedPaymentFlow:e.startVaultedPaymentFlow,createCvvInput:e.createCvvInput}),UPDATE_PAYMENT_METHODS:(i,t)=>({...i,vaultedPaymentMethods:t.payload,isLoading:!1,isUpdating:!1}),SET_ERROR:i=>({...i,isLoading:!1,isUpdating:!1}),DISABLE:i=>({...i,enabled:!1}),RESET:()=>xo},As={INITIALIZE_CVV:(i,t,e)=>({...i,setCvvInput:e.setCvvInput,setSelectedVaultedPaymentMethod:e.setSelectedVaultedPaymentMethod}),SET_FORM_DIRTY:(i,t)=>({...i,formIsDirty:t.payload}),SET_CVV_INPUT:(i,t)=>({...i,cvvInput:t.payload}),SET_SELECTED_VAULTED_PAYMENT_METHOD:(i,t)=>({...i,selectedVaultedPaymentMethod:t.payload}),RESET_CVV:()=>Ao},Ss=$t(xs),_s=$t(As),xo={enabled:!1,isLoading:!1,isUpdating:!1,cvvRecapture:!1,showEmptyState:!0,vaultedPaymentMethods:[],createCvvInput:null,deleteVaultedPaymentMethod:()=>Promise.resolve(),startVaultedPaymentFlow:()=>Promise.resolve()},Ao={cvvInput:null,formIsDirty:!1,setCvvInput:()=>{},selectedVaultedPaymentMethod:null,setSelectedVaultedPaymentMethod:()=>{}},ui=class extends ut{constructor(t,e){super(t,xo,Ss,e,r=>{t.sdkContextController.setVaultManager(r)})}setLoading(t){this.dispatch({type:"SET_LOADING",payload:t})}setUpdating(t){this.dispatch({type:"SET_UPDATING",payload:t})}initializeVaultManager(t,e,r,o){this.dispatch({type:"INITIALIZE_VAULT_MANAGER",payload:t,vaultEnabled:e,cvvRecapture:r,showEmptyState:o})}updatePaymentMethods(t){this.dispatch({type:"UPDATE_PAYMENT_METHODS",payload:t})}setError(t){this.dispatch({type:"SET_ERROR",payload:t})}disable(){this.dispatch({type:"DISABLE"})}reset(){this.dispatch({type:"RESET"})}},hi=class extends ut{constructor(t,e){super(t,Ao,_s,e,r=>{t.sdkContextController.setVaultManagerCvv(r)})}initializeCvv(t){this.dispatch({type:"INITIALIZE_CVV",createCvvInput:t})}setFormDirty(t){this.dispatch({type:"SET_FORM_DIRTY",payload:t})}setCvvInputState(t){this.dispatch({type:"SET_CVV_INPUT",payload:t})}setSelectedPaymentMethod(t){this.dispatch({type:"SET_SELECTED_VAULTED_PAYMENT_METHOD",payload:t})}resetCvv(){this.dispatch({type:"RESET_CVV"})}},Ut=class extends pr{constructor(e){super(e);this._vaultManager=null;this._options=null;this.createVaultManagerFn=null;this.createCvvInput=e=>{if(!this._vaultManager)throw new Error("Vault manager not initialized");return this._vaultManager.createCvvInput(e)};this.deleteVaultedPaymentMethod=async e=>{if(!this._vaultManager)throw new Error("Vault manager not initialized");try{this.coreController.updatePaymentMethods(this.vaultManagerState.vaultedPaymentMethods),await this._vaultManager.deleteVaultedPaymentMethod(e),await this.fetchVaultedPaymentMethods()}catch(r){throw this.coreController.setError(r instanceof Error?r:new Error("Failed to delete payment method")),r}};this.setCvvInput=e=>{this.itemController.setCvvInputState(e)};this.startVaultedPaymentFlow=async()=>{if(!this._vaultManager)throw new Error("Vault manager not initialized");let e=this.vaultItemState.selectedVaultedPaymentMethod,r=this.vaultManagerState.cvvRecapture,o=this.vaultItemState.cvvInput;if(!e||r&&(!o||o.metadata.error)){this.itemController.setFormDirty(!0);return}this.host.sdkStateController.startProcessing();try{await this._vaultManager.startPaymentFlow(e.id,r?{cvv:o.valueToken}:void 0)}catch(a){P.error("VaultManagerController: Error starting vaulted payment flow",a),this.coreController.setError(a instanceof Error?a:new Error("Failed to start vaulted payment flow")),this.host.sdkStateController.stopProcessing()}};this.setSelectedVaultedPaymentMethod=e=>{this.itemController.setSelectedPaymentMethod(e),this.itemController.setFormDirty(!1)};this.coreController=new ui(e,{deleteVaultedPaymentMethod:this.deleteVaultedPaymentMethod.bind(this),startVaultedPaymentFlow:this.startVaultedPaymentFlow.bind(this),createCvvInput:this.createCvvInput}),this.itemController=new hi(e,{setCvvInput:this.setCvvInput.bind(this),setSelectedVaultedPaymentMethod:this.setSelectedVaultedPaymentMethod.bind(this)}),this.addController(this.coreController),this.addController(this.itemController),new D(this.host,{task:async([r,o])=>{if(!r||!o?.vaultEnabled)return this.coreController.disable(),L;this.coreController.setLoading(!0);try{let a=r();this._vaultManager=a,this.coreController.initializeVaultManager(a,o.vaultEnabled,!!o.captureVaultedCardCvv,o.showEmptyState??!0),this.itemController.initializeCvv(a.createCvvInput),await this.fetchVaultedPaymentMethods(!0),P.log("VaultManagerController: Vault initialized successfully",{coreState:this.coreController.currentState,cvvState:this.itemController.currentState})}catch(a){P.error("VaultManagerController: Failed to initialize vault",a),this.coreController.setError(a instanceof Error?a:new Error("Unknown error"))}return this._vaultManager},args:()=>[this.createVaultManagerFn,this.options]})}initializeVaultManager(e,r){this.createVaultManagerFn=e,this.options=r??null}get vaultManager(){return this._vaultManager}set vaultManager(e){this._vaultManager=e,this.host.requestUpdate()}get options(){return this._options}set options(e){this._options=e,this.host.requestUpdate()}get vaultManagerState(){return this.coreController.currentState}get vaultItemState(){return this.itemController.currentState}hostDisconnected(){super.hostDisconnected(),this.vaultManager=null,this.coreController.reset()}async fetchVaultedPaymentMethods(e){if(!this._vaultManager)throw new Error("Vault manager not initialized");try{e||this.coreController.setUpdating(!0);let r=await this._vaultManager.fetchVaultedPaymentMethods();return P.log("VaultManagerController: Fetched payment methods",r),this.coreController.updatePaymentMethods(r),r}catch(r){throw this.coreController.setError(r instanceof Error?r:new Error("Failed to fetch payment methods")),r}}};var So=()=>_o.randomUUID?.()||Ps(),Ps=()=>("10000000-1000-4000-8000"+-1e11).replace(/[018]/g,i=>(i^Ts()>>i/4).toString(16)),Ts=()=>(_o.getRandomValues?.(new Uint8Array(1))[0]??Math.random()*16)&15,_o=typeof crypto<"u"?crypto:{};var ws={LOCAL:"",DEV:"https://analytics.dev.data.primer.io/v1/sdk-analytic-events",STAGING:"https://analytics.staging.data.primer.io/v1/sdk-analytic-events",SANDBOX:"https://analytics.sandbox.data.primer.io/v1/sdk-analytic-events",PRODUCTION:"https://analytics.production.data.primer.io/v1/sdk-analytic-events"},fi=class{constructor(){I(this,"sessionConfig",null)}initialize(t){this.sessionConfig=t}clear(){this.sessionConfig=null}getSessionConfig(){return this.sessionConfig}sendEvent(t){if(!this.sessionConfig){P.error("Analytics manager not initialized. Call initializeAnalytics() first.");return}let e={id:So(),timestamp:Math.floor(Date.now()/1e3),sdkType:"WEB",eventName:t.eventName,checkoutSessionId:this.sessionConfig.checkoutSessionId,clientSessionId:this.sessionConfig.clientSessionId,primerAccountId:this.sessionConfig.primerAccountId,sdkVersion:this.sessionConfig.sdkVersion,userAgent:typeof navigator<"u"?navigator.userAgent:"",eventType:t.eventType,userLocale:t.userLocale,paymentMethod:t.paymentMethod,paymentId:t.paymentId,redirectDestinationUrl:t.redirectDestinationUrl,threedsProvider:t.threedsProvider,threedsResponse:t.threedsResponse};Ms(e,this.sessionConfig)}},yi=new fi;function Po(i){yi.initialize(i)}function G(i){yi.sendEvent(i)}function To(){yi.clear()}async function Ms(i,{environment:t,clientSessionToken:e}){if(t==="LOCAL"){P.debug(`Analytics event ${i.eventName}:`,i);return}let r=ws[t];return fetch(r,{method:"POST",headers:{"Content-Type":"application/json",...e&&{Authorization:`Bearer ${e}`}},body:JSON.stringify(i)}).catch(o=>{P.error("Failed to send analytics event:",o)})}var Yt="lit-localize-status";var wo=i=>typeof i!="string"&&"strTag"in i,Er=(i,t,e)=>{let r=i[0];for(let o=1;o<i.length;o++)r+=t[e?e[o-1]:o-1],r+=i[o];return r};var Ht=i=>wo(i)?Er(i.strings,i.values):i;var S=Ht,Mo=!1;function gi(i){if(Mo)throw new Error("lit-localize can only be configured once");S=i,Mo=!0}var vi=class{constructor(t){this.__litLocalizeEventHandler=e=>{e.detail.status==="ready"&&this.host.requestUpdate()},this.host=t}hostConnected(){window.addEventListener(Yt,this.__litLocalizeEventHandler)}hostDisconnected(){window.removeEventListener(Yt,this.__litLocalizeEventHandler)}},Is=i=>i.addController(new vi(i)),Io=Is;var k=()=>(i,t)=>(i.addInitializer(Io),i);var Bt=class{constructor(){this.settled=!1,this.promise=new Promise((t,e)=>{this._resolve=t,this._reject=e})}resolve(t){this.settled=!0,this._resolve(t)}reject(t){this.settled=!0,this._reject(t)}};var Ue=[];for(let i=0;i<256;i++)Ue[i]=(i>>4&15).toString(16)+(i&15).toString(16);function ko(i){let t=0,e=8997,r=0,o=33826,a=0,n=40164,l=0,s=52210;for(let c=0;c<i.length;c++)e^=i.charCodeAt(c),t=e*435,r=o*435,a=n*435,l=s*435,a+=e<<8,l+=o<<8,r+=t>>>16,e=t&65535,a+=r>>>16,o=r&65535,s=l+(a>>>16)&65535,n=a&65535;return Ue[s>>8]+Ue[s&255]+Ue[n>>8]+Ue[n&255]+Ue[o>>8]+Ue[o&255]+Ue[e>>8]+Ue[e&255]}var ks="",Ns="h",Ls="s";function No(i,t){return(t?Ns:Ls)+ko(typeof i=="string"?i:i.join(ks))}var Lo=new WeakMap,Ro=new Map;function Oo(i,t,e){if(i){let r=e?.id??Rs(t),o=i[r];if(o){if(typeof o=="string")return o;if("strTag"in o)return Er(o.strings,t.values,o.values);{let a=Lo.get(o);return a===void 0&&(a=o.values,Lo.set(o,a)),{...o,values:a.map(n=>t.values[n])}}}}return Ht(t)}function Rs(i){let t=typeof i=="string"?i:i.strings,e=Ro.get(t);return e===void 0&&(e=No(t,typeof i!="string"&&!("strTag"in i)),Ro.set(t,e)),e}function bi(i){window.dispatchEvent(new CustomEvent(Yt,{detail:i}))}var Ar="",Ci,Do,Sr,Ei,$o,yt=new Bt;yt.resolve();var xr=0,Vo=i=>(gi((t,e)=>Oo($o,t,e)),Ar=Do=i.sourceLocale,Sr=new Set(i.targetLocales),Sr.add(i.sourceLocale),Ei=i.loadLocale,{getLocale:Os,setLocale:Ds}),Os=()=>Ar,Ds=i=>{if(i===(Ci??Ar))return yt.promise;if(!Sr||!Ei)throw new Error("Internal error");if(!Sr.has(i))throw new Error("Invalid locale code");xr++;let t=xr;return Ci=i,yt.settled&&(yt=new Bt),bi({status:"loading",loadingLocale:i}),(i===Do?Promise.resolve({templates:void 0}):Ei(i)).then(r=>{xr===t&&(Ar=i,Ci=void 0,$o=r.templates,bi({status:"ready",readyLocale:i}),yt.resolve())},r=>{xr===t&&(bi({status:"error",errorLocale:i,errorMessage:r.toString()}),yt.reject(r))}),yt.promise};var xi="en",Ai=["ar","bg","ca","cs","da","de","el","en-GB","es","es-AR","es-MX","et-EE","fi-FI","fr","he","hr","hu","id","it","ja","ko","lt","lt-LT","lv","lv-LV","ms","nb","nl","nl_NL","pl","pt","pt-BR","ro","ru","sk","sl","sr-RS","sv","th","tr","uk-UA","vi","zf","zh-CN","zh-HK","zh-TW"],Uo="You must call `loadLocale` first to set up the localized template.",Yo,_r,Ho=i=>{let t=Vo({sourceLocale:xi,targetLocales:Ai,loadLocale:i});Yo=t.getLocale,_r=t.setLocale};var Si=i=>{Ho(i)},_i=i=>{if(!_r)throw new Error(Uo);return _r(i)};var zt=new Set(Ai);zt.add(xi);var Pi=i=>{if(typeof i!="string")return!1;if(i==="en")return!0;let t=i.replace("_","-");if(zt.has(t))return!0;let e=t.split("-")[0];return!!zt.has(e)},Ti=i=>{if(i==="en")return"en-GB";let t=i.replace("_","-");if(zt.has(t))return t;let e=t.split("-")[0];return zt.has(e)?e:"en-GB"};var Pr=globalThis,Tr=Pr.ShadowRoot&&(Pr.ShadyCSS===void 0||Pr.ShadyCSS.nativeShadow)&&"adoptedStyleSheets"in Document.prototype&&"replace"in CSSStyleSheet.prototype,wi=Symbol(),Bo=new WeakMap,Ft=class{constructor(t,e,r){if(this._$cssResult$=!0,r!==wi)throw Error("CSSResult is not constructable. Use `unsafeCSS` or `css` instead.");this.cssText=t,this.t=e}get styleSheet(){let t=this.o,e=this.t;if(Tr&&t===void 0){let r=e!==void 0&&e.length===1;r&&(t=Bo.get(e)),t===void 0&&((this.o=t=new CSSStyleSheet).replaceSync(this.cssText),r&&Bo.set(e,t))}return t}toString(){return this.cssText}},we=i=>new Ft(typeof i=="string"?i:i+"",void 0,wi),y=(i,...t)=>{let e=i.length===1?i[0]:t.reduce((r,o,a)=>r+(n=>{if(n._$cssResult$===!0)return n.cssText;if(typeof n=="number")return n;throw Error("Value passed to 'css' function must be a 'css' function result: "+n+". Use 'unsafeCSS' to pass non-literal values, but take care to ensure page security.")})(o)+i[a+1],i[0]);return new Ft(e,i,wi)},zo=(i,t)=>{if(Tr)i.adoptedStyleSheets=t.map(e=>e instanceof CSSStyleSheet?e:e.styleSheet);else for(let e of t){let r=document.createElement("style"),o=Pr.litNonce;o!==void 0&&r.setAttribute("nonce",o),r.textContent=e.cssText,i.appendChild(r)}},Mi=Tr?i=>i:i=>i instanceof CSSStyleSheet?(t=>{let e="";for(let r of t.cssRules)e+=r.cssText;return we(e)})(i):i;var{is:$s,defineProperty:Vs,getOwnPropertyDescriptor:Us,getOwnPropertyNames:Ys,getOwnPropertySymbols:Hs,getPrototypeOf:Bs}=Object,ot=globalThis,Fo=ot.trustedTypes,zs=Fo?Fo.emptyScript:"",Fs=ot.reactiveElementPolyfillSupport,jt=(i,t)=>i,Kt={toAttribute(i,t){switch(t){case Boolean:i=i?zs:null;break;case Object:case Array:i=i==null?i:JSON.stringify(i)}return i},fromAttribute(i,t){let e=i;switch(t){case Boolean:e=i!==null;break;case Number:e=i===null?null:Number(i);break;case Object:case Array:try{e=JSON.parse(i)}catch{e=null}}return e}},wr=(i,t)=>!$s(i,t),jo={attribute:!0,type:String,converter:Kt,reflect:!1,useDefault:!1,hasChanged:wr};Symbol.metadata??(Symbol.metadata=Symbol("metadata")),ot.litPropertyMetadata??(ot.litPropertyMetadata=new WeakMap);var Ye=class extends HTMLElement{static addInitializer(t){this._$Ei(),(this.l??(this.l=[])).push(t)}static get observedAttributes(){return this.finalize(),this._$Eh&&[...this._$Eh.keys()]}static createProperty(t,e=jo){if(e.state&&(e.attribute=!1),this._$Ei(),this.prototype.hasOwnProperty(t)&&((e=Object.create(e)).wrapped=!0),this.elementProperties.set(t,e),!e.noAccessor){let r=Symbol(),o=this.getPropertyDescriptor(t,r,e);o!==void 0&&Vs(this.prototype,t,o)}}static getPropertyDescriptor(t,e,r){let{get:o,set:a}=Us(this.prototype,t)??{get(){return this[e]},set(n){this[e]=n}};return{get:o,set(n){let l=o?.call(this);a?.call(this,n),this.requestUpdate(t,l,r)},configurable:!0,enumerable:!0}}static getPropertyOptions(t){return this.elementProperties.get(t)??jo}static _$Ei(){if(this.hasOwnProperty(jt("elementProperties")))return;let t=Bs(this);t.finalize(),t.l!==void 0&&(this.l=[...t.l]),this.elementProperties=new Map(t.elementProperties)}static finalize(){if(this.hasOwnProperty(jt("finalized")))return;if(this.finalized=!0,this._$Ei(),this.hasOwnProperty(jt("properties"))){let e=this.properties,r=[...Ys(e),...Hs(e)];for(let o of r)this.createProperty(o,e[o])}let t=this[Symbol.metadata];if(t!==null){let e=litPropertyMetadata.get(t);if(e!==void 0)for(let[r,o]of e)this.elementProperties.set(r,o)}this._$Eh=new Map;for(let[e,r]of this.elementProperties){let o=this._$Eu(e,r);o!==void 0&&this._$Eh.set(o,e)}this.elementStyles=this.finalizeStyles(this.styles)}static finalizeStyles(t){let e=[];if(Array.isArray(t)){let r=new Set(t.flat(1/0).reverse());for(let o of r)e.unshift(Mi(o))}else t!==void 0&&e.push(Mi(t));return e}static _$Eu(t,e){let r=e.attribute;return r===!1?void 0:typeof r=="string"?r:typeof t=="string"?t.toLowerCase():void 0}constructor(){super(),this._$Ep=void 0,this.isUpdatePending=!1,this.hasUpdated=!1,this._$Em=null,this._$Ev()}_$Ev(){this._$ES=new Promise(t=>this.enableUpdating=t),this._$AL=new Map,this._$E_(),this.requestUpdate(),this.constructor.l?.forEach(t=>t(this))}addController(t){(this._$EO??(this._$EO=new Set)).add(t),this.renderRoot!==void 0&&this.isConnected&&t.hostConnected?.()}removeController(t){this._$EO?.delete(t)}_$E_(){let t=new Map,e=this.constructor.elementProperties;for(let r of e.keys())this.hasOwnProperty(r)&&(t.set(r,this[r]),delete this[r]);t.size>0&&(this._$Ep=t)}createRenderRoot(){let t=this.shadowRoot??this.attachShadow(this.constructor.shadowRootOptions);return zo(t,this.constructor.elementStyles),t}connectedCallback(){this.renderRoot??(this.renderRoot=this.createRenderRoot()),this.enableUpdating(!0),this._$EO?.forEach(t=>t.hostConnected?.())}enableUpdating(t){}disconnectedCallback(){this._$EO?.forEach(t=>t.hostDisconnected?.())}attributeChangedCallback(t,e,r){this._$AK(t,r)}_$ET(t,e){let r=this.constructor.elementProperties.get(t),o=this.constructor._$Eu(t,r);if(o!==void 0&&r.reflect===!0){let a=(r.converter?.toAttribute!==void 0?r.converter:Kt).toAttribute(e,r.type);this._$Em=t,a==null?this.removeAttribute(o):this.setAttribute(o,a),this._$Em=null}}_$AK(t,e){let r=this.constructor,o=r._$Eh.get(t);if(o!==void 0&&this._$Em!==o){let a=r.getPropertyOptions(o),n=typeof a.converter=="function"?{fromAttribute:a.converter}:a.converter?.fromAttribute!==void 0?a.converter:Kt;this._$Em=o,this[o]=n.fromAttribute(e,a.type)??this._$Ej?.get(o)??null,this._$Em=null}}requestUpdate(t,e,r){if(t!==void 0){let o=this.constructor,a=this[t];if(r??(r=o.getPropertyOptions(t)),!((r.hasChanged??wr)(a,e)||r.useDefault&&r.reflect&&a===this._$Ej?.get(t)&&!this.hasAttribute(o._$Eu(t,r))))return;this.C(t,e,r)}this.isUpdatePending===!1&&(this._$ES=this._$EP())}C(t,e,{useDefault:r,reflect:o,wrapped:a},n){r&&!(this._$Ej??(this._$Ej=new Map)).has(t)&&(this._$Ej.set(t,n??e??this[t]),a!==!0||n!==void 0)||(this._$AL.has(t)||(this.hasUpdated||r||(e=void 0),this._$AL.set(t,e)),o===!0&&this._$Em!==t&&(this._$Eq??(this._$Eq=new Set)).add(t))}async _$EP(){this.isUpdatePending=!0;try{await this._$ES}catch(e){Promise.reject(e)}let t=this.scheduleUpdate();return t!=null&&await t,!this.isUpdatePending}scheduleUpdate(){return this.performUpdate()}performUpdate(){if(!this.isUpdatePending)return;if(!this.hasUpdated){if(this.renderRoot??(this.renderRoot=this.createRenderRoot()),this._$Ep){for(let[o,a]of this._$Ep)this[o]=a;this._$Ep=void 0}let r=this.constructor.elementProperties;if(r.size>0)for(let[o,a]of r){let{wrapped:n}=a,l=this[o];n!==!0||this._$AL.has(o)||l===void 0||this.C(o,void 0,a,l)}}let t=!1,e=this._$AL;try{t=this.shouldUpdate(e),t?(this.willUpdate(e),this._$EO?.forEach(r=>r.hostUpdate?.()),this.update(e)):this._$EM()}catch(r){throw t=!1,this._$EM(),r}t&&this._$AE(e)}willUpdate(t){}_$AE(t){this._$EO?.forEach(e=>e.hostUpdated?.()),this.hasUpdated||(this.hasUpdated=!0,this.firstUpdated(t)),this.updated(t)}_$EM(){this._$AL=new Map,this.isUpdatePending=!1}get updateComplete(){return this.getUpdateComplete()}getUpdateComplete(){return this._$ES}shouldUpdate(t){return!0}update(t){this._$Eq&&(this._$Eq=this._$Eq.forEach(e=>this._$ET(e,this[e]))),this._$EM()}updated(t){}firstUpdated(t){}};Ye.elementStyles=[],Ye.shadowRootOptions={mode:"open"},Ye[jt("elementProperties")]=new Map,Ye[jt("finalized")]=new Map,Fs?.({ReactiveElement:Ye}),(ot.reactiveElementVersions??(ot.reactiveElementVersions=[])).push("2.1.0");var qt=globalThis,Mr=qt.trustedTypes,Ko=Mr?Mr.createPolicy("lit-html",{createHTML:i=>i}):void 0,ki="$lit$",He=`lit$${Math.random().toFixed(9).slice(2)}$`,Ni="?"+He,js=`<${Ni}>`,bt=document,Wt=()=>bt.createComment(""),Jt=i=>i===null||typeof i!="object"&&typeof i!="function",Li=Array.isArray,Xo=i=>Li(i)||typeof i?.[Symbol.iterator]=="function",Ii=`[
|
|
1
|
+
import{a as fo,b as d,c as I}from"./chunks/chunk.DV3REKZU.js";var sr=class{constructor(t){(this.host=t).addController(this)}hostConnected(){}setCardNetworksLoading(){let t={detectedCardNetwork:null,selectableCardNetworks:[],isLoading:!0};this.updateCardNetworksState(t)}updateCardNetworksState(t){this.host.primerEventsController.dispatchCardNetworkChange(t),this.host.sdkContextController.setCardNetworks(t)}processCardNetworkChangeEvent(t){let{detectedCardNetworks:e,selectableCardNetworks:r}=t,o=e.preferred??e.items[0],a=r?.items??[];this.updateCardNetworksState({detectedCardNetwork:o,selectableCardNetworks:a,isLoading:!1})}};var Pt=class{constructor(t){(this.host=t).addController(this)}hostConnected(){}dispatchEvent(t,e){this.host.dispatchEvent(new CustomEvent(t,{detail:e,bubbles:!0,composed:!0}))}dispatchSdkState(t){this.dispatchEvent("primer:state-change",t)}dispatchPaymentMethods(t){this.dispatchEvent("primer:methods-update",t)}dispatchCheckoutInitialized(t){this.dispatchEvent("primer:ready",t)}dispatchCardNetworkChange(t){this.dispatchEvent("primer:card-network-change",t)}dispatchCardSubmit(t){this.dispatchEvent("primer:card-submit",{source:t})}dispatchFormSubmitSuccess(t){this.dispatchEvent("primer:card-success",{result:t})}dispatchFormSubmitErrors(t){this.dispatchEvent("primer:card-error",{errors:t})}handleExternalCardSubmit(t){this.dispatchCardSubmit(t.source)}};var Ze=class extends Event{constructor(t,e,r,o){super("context-request",{bubbles:!0,composed:!0}),this.context=t,this.contextTarget=e,this.callback=r,this.subscribe=o??!1}};var Tt=class{constructor(t,e,r,o){if(this.subscribe=!1,this.provided=!1,this.value=void 0,this.t=(a,n)=>{this.unsubscribe&&(this.unsubscribe!==n&&(this.provided=!1,this.unsubscribe()),this.subscribe||this.unsubscribe()),this.value=a,this.host.requestUpdate(),this.provided&&!this.subscribe||(this.provided=!0,this.callback&&this.callback(a,n)),this.unsubscribe=n},this.host=t,e.context!==void 0){let a=e;this.context=a.context,this.callback=a.callback,this.subscribe=a.subscribe??!1}else this.context=e,this.callback=r,this.subscribe=o??!1;this.host.addController(this)}hostConnected(){this.dispatchRequest()}hostDisconnected(){this.unsubscribe&&(this.unsubscribe(),this.unsubscribe=void 0)}dispatchRequest(){this.host.dispatchEvent(new Ze(this.context,this.host,this.t,this.subscribe))}};var lr=class{get value(){return this.o}set value(t){this.setValue(t)}setValue(t,e=!1){let r=e||!Object.is(t,this.o);this.o=t,r&&this.updateObservers()}constructor(t){this.subscriptions=new Map,this.updateObservers=()=>{for(let[e,{disposer:r}]of this.subscriptions)e(this.o,r)},t!==void 0&&(this.value=t)}addCallback(t,e,r){if(!r)return void t(this.value);this.subscriptions.has(t)||this.subscriptions.set(t,{disposer:()=>{this.subscriptions.delete(t)},consumerHost:e});let{disposer:o}=this.subscriptions.get(t);t(this.value,o)}clearCallbacks(){this.subscriptions.clear()}};var ci=class extends Event{constructor(t,e){super("context-provider",{bubbles:!0,composed:!0}),this.context=t,this.contextTarget=e}},z=class extends lr{constructor(t,e,r){super(e.context!==void 0?e.initialValue:r),this.onContextRequest=o=>{if(o.context!==this.context)return;let a=o.contextTarget??o.composedPath()[0];a!==this.host&&(o.stopPropagation(),this.addCallback(o.callback,a,o.subscribe))},this.onProviderRequest=o=>{if(o.context!==this.context||(o.contextTarget??o.composedPath()[0])===this.host)return;let a=new Set;for(let[n,{consumerHost:l}]of this.subscriptions)a.has(n)||(a.add(n),l.dispatchEvent(new Ze(this.context,l,n,!0)));o.stopPropagation()},this.host=t,e.context!==void 0?this.context=e.context:this.context=e,this.attachListeners(),this.host.addController?.(this)}attachListeners(){this.host.addEventListener("context-request",this.onContextRequest),this.host.addEventListener("context-provider",this.onProviderRequest)}hostConnected(){this.host.dispatchEvent(new ci(this.context,this.host))}};function C({context:i,subscribe:t}){return(e,r)=>{typeof r=="object"?r.addInitializer(function(){new Tt(this,{context:i,callback:o=>{e.set.call(this,o)},subscribe:t})}):e.constructor.addInitializer(o=>{new Tt(o,{context:i,callback:a=>{o[r]=a},subscribe:t})})}}var Xe=Symbol("analytics-context");var wt=Symbol("events-context");var dr="cardNetworksContext";var ne="clientOptionsContext";var Qe="computedStylesContext";var B="headlessInstanceContext";var cr="klarnaCategoriesContext";var se="managerContext";var et="paymentMethodsContext";var F="sdkStateContext";var le="vaultManagerContext";var Te="vaultManagerCvvContext";var U=class U{static log(t,...e){U.enabled}static info(t,...e){U.enabled}static warn(t,...e){U.enabled}static error(t,...e){U.enabled&&e.forEach(r=>{r instanceof Error&&r.toJSON})}static debug(t,...e){U.enabled}static table(t,e){U.enabled}static time(t){U.enabled}static timeEnd(t){U.enabled}};I(U,"enabled",!0),I(U,"defaultFont","font-family: Consolas, monospace; font-size: 12px;"),I(U,"brandTag","[PRIMER]"),I(U,"brandStyle",`background: #24292e; color: #ffffff; padding: 2px 6px; border-radius: 3px; font-weight: bold; margin-right: 4px; ${U.defaultFont}`),I(U,"styles",{log:`color: #4CAF50; ${U.defaultFont}`,info:`color: #2196F3; ${U.defaultFont}`,warn:`color: #FF9800; ${U.defaultFont}`,error:`color: #F44336; ${U.defaultFont}`,debug:`color: #9C27B0; ${U.defaultFont}`});var _=U;function ps(i,t,e,r){let o=i,a=e;return{dispatch:n=>{let l=t(o,n,a);o=l,r(l)},getState:()=>Object.freeze({...o}),setCallbacks:n=>{a={...a,...n}}}}function $t(i){return(t,e,r)=>{let o=i[e.type];if(!o)throw new Error(`No handler for action type: ${e.type}`);return o(t,e,r)}}var ut=class{constructor(t,e,r,o,a=()=>{this.host.requestUpdate()}){this.host=t;this.stateHandler=a;this.host.addController(this),this._dispatcher=ps(e,r,o,n=>{this.stateHandler(n)})}get currentState(){return this._dispatcher.getState()}dispatch(t){this._dispatcher.dispatch(t)}setCallbacks(t){this._dispatcher.setCallbacks(t)}hostConnected(){}hostDisconnected(){}},pr=class{constructor(t){this.host=t;this._controllers=[];"addController"in this.host&&this.host.addController(this)}addController(t){this._controllers.push(t)}hostConnected(){this._controllers.forEach(t=>{t.hostConnected&&t.hostConnected()})}hostDisconnected(){this._controllers.forEach(t=>{t.hostDisconnected&&t.hostDisconnected()})}};var ur={isSuccessful:!1,isProcessing:!1,isLoading:!1,error:null,failure:null},ms={START_LOADING:i=>({...i,isLoading:!0}),START_PROCESSING:i=>({...i,failure:null,isProcessing:!0}),STOP_PROCESSING:i=>({...i,isProcessing:!1}),COMPLETE_PROCESSING:i=>({...i,isProcessing:!1,isSuccessful:!0}),SET_ERROR:(i,t)=>(_.error(t.payload.message),{...i,isProcessing:!1,error:t.payload}),SET_FAILURE:(i,t)=>({...i,isProcessing:!1,failure:t.payload}),COMPLETE_LOADING:i=>({...i,isLoading:!1}),RESET:()=>ur,RESET_ERROR:i=>({...i,error:null,failure:null})},us=$t(ms),mr=class extends ut{constructor(t){super(t,ur,us,null,e=>{t.sdkContextController.setSdkState(e),t.primerEventsController.dispatchSdkState(e)})}startLoading(){this.dispatch({type:"START_LOADING"})}startProcessing(){this.dispatch({type:"START_PROCESSING"})}stopProcessing(){this.dispatch({type:"STOP_PROCESSING"})}completeProcessing(){this.dispatch({type:"COMPLETE_PROCESSING"})}completeLoading(){this.dispatch({type:"COMPLETE_LOADING"})}setError(t){this.dispatch({type:"SET_ERROR",payload:t})}setFailure(t,e,r){this.dispatch({type:"SET_FAILURE",payload:{code:t,message:e,details:r}})}reset(){this.dispatch({type:"RESET"})}resetError(){this.dispatch({type:"RESET_ERROR"})}forceCompleteLoading(){this.currentState.isLoading&&(_.warn("Force completing loading state"),this.completeLoading())}};var hr=class{constructor(t){this.sdkStateProvider=null;this.paymentMethodsProvider=null;this.paymentManagerProvider=null;this.cardNetworksContext=null;this.vaultManagerCvvProvider=null;this.clientOptionsContext=null;this.headlessUtilsProvider=null;this.klarnaCategoriesProvider=null;this.computedStylesProvider=null;this.analyticsProvider=null;this.eventsProvider=null;(this.host=t).addController(this),this.sdkStateProvider=new z(t,{context:F,initialValue:ur}),this.paymentMethodsProvider=new z(t,{context:et,initialValue:null}),this.paymentManagerProvider=new z(t,{context:se,initialValue:new Map}),this.cardNetworksContext=new z(t,{context:dr,initialValue:null}),this.vaultManagerProvider=new z(t,{context:le,initialValue:null}),this.vaultManagerCvvProvider=new z(t,{context:Te,initialValue:null}),this.clientOptionsContext=new z(t,{context:ne,initialValue:null}),this.klarnaCategoriesProvider=new z(t,{context:cr,initialValue:{categories:[],isLoading:!0}}),this.headlessUtilsProvider=new z(t,{context:B,initialValue:null}),this.computedStylesProvider=new z(t,{context:Qe,initialValue:null}),this.analyticsProvider=new z(t,{context:Xe,initialValue:null}),this.eventsProvider=new z(t,{context:wt,initialValue:null})}hostConnected(){}setSdkState(t){this.sdkStateProvider?.setValue(t)}setPaymentMethods(t){this.paymentMethodsProvider?.setValue(t)}setPaymentManagers(t){this.paymentManagerProvider?.setValue(t)}setCardNetworks(t){this.cardNetworksContext?.setValue(t)}setVaultManager(t){this.vaultManagerProvider?.setValue(t)}setKlarnaCategories(t){this.klarnaCategoriesProvider?.setValue(t)}setClientOptions(t){this.clientOptionsContext?.setValue(t)}setHeadlessUtils(t){this.headlessUtilsProvider?.setValue(t)}setAnalyticsUtils(t){this.analyticsProvider?.setValue(t)}getAnalyticsUtils(){return this.analyticsProvider?.value}setComputedStyles(t){this.computedStylesProvider?.setValue(t)}setVaultManagerCvv(t){this.vaultManagerCvvProvider?.setValue(t)}setEventsController(t){this.eventsProvider?.setValue(t)}};var ht=class ht{constructor(t){(this.host=t).addController(this)}processCustomStyles(t){try{let e=JSON.parse(t);this.applyStyles(e)}catch(e){_.error("Error parsing customStyles property.",e instanceof Error?e:new Error(String(e)))}}isValidCssProperty(t){return/^[a-zA-Z][a-zA-Z0-9]*$/.test(t)}isValidCssValue(t){let r=/^[\w\s#.,%()\-+/!]+$/.test(t);return r||_.warn(`Rejected potentially unsafe CSS value: ${t}`),r}getCssVarName(t){let e=ht.cssVarCache.get(t);return e||(e=`--${t.replace(/([A-Z])/g,(r,o)=>`-${o.toLowerCase()}`)}`,ht.cssVarCache.set(t,e)),e}applyStyles(t){let e=[];for(let r of Object.keys(t)){let o=t[r];if(!o)continue;if(!this.isValidCssProperty(r)){_.warn(`Skipping invalid CSS property name: ${r}`);continue}if(!this.isValidCssValue(o))continue;let a=this.getCssVarName(r);e.push([a,o])}if(e.length>0)for(let[r,o]of e)this.host.style.setProperty(r,o)}removeStyle(t){let e=this.getCssVarName(t);this.host.style.removeProperty(e)}clearAllStyles(){for(let t of ht.cssVarCache.keys()){let e=ht.cssVarCache.get(t);e&&this.host.style.removeProperty(e)}}hostDisconnected(){}};ht.cssVarCache=new Map;var fr=ht;var yr=globalThis,vr=yr.ShadowRoot&&(yr.ShadyCSS===void 0||yr.ShadyCSS.nativeShadow)&&"adoptedStyleSheets"in Document.prototype&&"replace"in CSSStyleSheet.prototype,go=Symbol(),yo=new WeakMap,gr=class{constructor(t,e,r){if(this._$cssResult$=!0,r!==go)throw Error("CSSResult is not constructable. Use `unsafeCSS` or `css` instead.");this.cssText=t,this.t=e}get styleSheet(){let t=this.o,e=this.t;if(vr&&t===void 0){let r=e!==void 0&&e.length===1;r&&(t=yo.get(e)),t===void 0&&((this.o=t=new CSSStyleSheet).replaceSync(this.cssText),r&&yo.set(e,t))}return t}toString(){return this.cssText}},vo=i=>new gr(typeof i=="string"?i:i+"",void 0,go);var pi=(i,t)=>{if(vr)i.adoptedStyleSheets=t.map(e=>e instanceof CSSStyleSheet?e:e.styleSheet);else for(let e of t){let r=document.createElement("style"),o=yr.litNonce;o!==void 0&&r.setAttribute("nonce",o),r.textContent=e.cssText,i.appendChild(r)}},br=vr?i=>i:i=>i instanceof CSSStyleSheet?(t=>{let e="";for(let r of t.cssRules)e+=r.cssText;return vo(e)})(i):i;var{is:hs,defineProperty:fs,getOwnPropertyDescriptor:ys,getOwnPropertyNames:gs,getOwnPropertySymbols:vs,getPrototypeOf:bs}=Object,tt=globalThis,bo=tt.trustedTypes,Cs=bo?bo.emptyScript:"",Es=tt.reactiveElementPolyfillSupport,Vt=(i,t)=>i,mi={toAttribute(i,t){switch(t){case Boolean:i=i?Cs:null;break;case Object:case Array:i=i==null?i:JSON.stringify(i)}return i},fromAttribute(i,t){let e=i;switch(t){case Boolean:e=i!==null;break;case Number:e=i===null?null:Number(i);break;case Object:case Array:try{e=JSON.parse(i)}catch{e=null}}return e}},Cr=(i,t)=>!hs(i,t),Co={attribute:!0,type:String,converter:mi,reflect:!1,hasChanged:Cr};Symbol.metadata??(Symbol.metadata=Symbol("metadata")),tt.litPropertyMetadata??(tt.litPropertyMetadata=new WeakMap);var ft=class extends HTMLElement{static addInitializer(t){this._$Ei(),(this.l??(this.l=[])).push(t)}static get observedAttributes(){return this.finalize(),this._$Eh&&[...this._$Eh.keys()]}static createProperty(t,e=Co){if(e.state&&(e.attribute=!1),this._$Ei(),this.elementProperties.set(t,e),!e.noAccessor){let r=Symbol(),o=this.getPropertyDescriptor(t,r,e);o!==void 0&&fs(this.prototype,t,o)}}static getPropertyDescriptor(t,e,r){let{get:o,set:a}=ys(this.prototype,t)??{get(){return this[e]},set(n){this[e]=n}};return{get(){return o?.call(this)},set(n){let l=o?.call(this);a.call(this,n),this.requestUpdate(t,l,r)},configurable:!0,enumerable:!0}}static getPropertyOptions(t){return this.elementProperties.get(t)??Co}static _$Ei(){if(this.hasOwnProperty(Vt("elementProperties")))return;let t=bs(this);t.finalize(),t.l!==void 0&&(this.l=[...t.l]),this.elementProperties=new Map(t.elementProperties)}static finalize(){if(this.hasOwnProperty(Vt("finalized")))return;if(this.finalized=!0,this._$Ei(),this.hasOwnProperty(Vt("properties"))){let e=this.properties,r=[...gs(e),...vs(e)];for(let o of r)this.createProperty(o,e[o])}let t=this[Symbol.metadata];if(t!==null){let e=litPropertyMetadata.get(t);if(e!==void 0)for(let[r,o]of e)this.elementProperties.set(r,o)}this._$Eh=new Map;for(let[e,r]of this.elementProperties){let o=this._$Eu(e,r);o!==void 0&&this._$Eh.set(o,e)}this.elementStyles=this.finalizeStyles(this.styles)}static finalizeStyles(t){let e=[];if(Array.isArray(t)){let r=new Set(t.flat(1/0).reverse());for(let o of r)e.unshift(br(o))}else t!==void 0&&e.push(br(t));return e}static _$Eu(t,e){let r=e.attribute;return r===!1?void 0:typeof r=="string"?r:typeof t=="string"?t.toLowerCase():void 0}constructor(){super(),this._$Ep=void 0,this.isUpdatePending=!1,this.hasUpdated=!1,this._$Em=null,this._$Ev()}_$Ev(){this._$ES=new Promise(t=>this.enableUpdating=t),this._$AL=new Map,this._$E_(),this.requestUpdate(),this.constructor.l?.forEach(t=>t(this))}addController(t){(this._$EO??(this._$EO=new Set)).add(t),this.renderRoot!==void 0&&this.isConnected&&t.hostConnected?.()}removeController(t){this._$EO?.delete(t)}_$E_(){let t=new Map,e=this.constructor.elementProperties;for(let r of e.keys())this.hasOwnProperty(r)&&(t.set(r,this[r]),delete this[r]);t.size>0&&(this._$Ep=t)}createRenderRoot(){let t=this.shadowRoot??this.attachShadow(this.constructor.shadowRootOptions);return pi(t,this.constructor.elementStyles),t}connectedCallback(){this.renderRoot??(this.renderRoot=this.createRenderRoot()),this.enableUpdating(!0),this._$EO?.forEach(t=>t.hostConnected?.())}enableUpdating(t){}disconnectedCallback(){this._$EO?.forEach(t=>t.hostDisconnected?.())}attributeChangedCallback(t,e,r){this._$AK(t,r)}_$EC(t,e){let r=this.constructor.elementProperties.get(t),o=this.constructor._$Eu(t,r);if(o!==void 0&&r.reflect===!0){let a=(r.converter?.toAttribute!==void 0?r.converter:mi).toAttribute(e,r.type);this._$Em=t,a==null?this.removeAttribute(o):this.setAttribute(o,a),this._$Em=null}}_$AK(t,e){let r=this.constructor,o=r._$Eh.get(t);if(o!==void 0&&this._$Em!==o){let a=r.getPropertyOptions(o),n=typeof a.converter=="function"?{fromAttribute:a.converter}:a.converter?.fromAttribute!==void 0?a.converter:mi;this._$Em=o,this[o]=n.fromAttribute(e,a.type),this._$Em=null}}requestUpdate(t,e,r){if(t!==void 0){if(r??(r=this.constructor.getPropertyOptions(t)),!(r.hasChanged??Cr)(this[t],e))return;this.P(t,e,r)}this.isUpdatePending===!1&&(this._$ES=this._$ET())}P(t,e,r){this._$AL.has(t)||this._$AL.set(t,e),r.reflect===!0&&this._$Em!==t&&(this._$Ej??(this._$Ej=new Set)).add(t)}async _$ET(){this.isUpdatePending=!0;try{await this._$ES}catch(e){Promise.reject(e)}let t=this.scheduleUpdate();return t!=null&&await t,!this.isUpdatePending}scheduleUpdate(){return this.performUpdate()}performUpdate(){if(!this.isUpdatePending)return;if(!this.hasUpdated){if(this.renderRoot??(this.renderRoot=this.createRenderRoot()),this._$Ep){for(let[o,a]of this._$Ep)this[o]=a;this._$Ep=void 0}let r=this.constructor.elementProperties;if(r.size>0)for(let[o,a]of r)a.wrapped!==!0||this._$AL.has(o)||this[o]===void 0||this.P(o,this[o],a)}let t=!1,e=this._$AL;try{t=this.shouldUpdate(e),t?(this.willUpdate(e),this._$EO?.forEach(r=>r.hostUpdate?.()),this.update(e)):this._$EU()}catch(r){throw t=!1,this._$EU(),r}t&&this._$AE(e)}willUpdate(t){}_$AE(t){this._$EO?.forEach(e=>e.hostUpdated?.()),this.hasUpdated||(this.hasUpdated=!0,this.firstUpdated(t)),this.updated(t)}_$EU(){this._$AL=new Map,this.isUpdatePending=!1}get updateComplete(){return this.getUpdateComplete()}getUpdateComplete(){return this._$ES}shouldUpdate(t){return!0}update(t){this._$Ej&&(this._$Ej=this._$Ej.forEach(e=>this._$EC(e,this[e]))),this._$EU()}updated(t){}firstUpdated(t){}};ft.elementStyles=[],ft.shadowRootOptions={mode:"open"},ft[Vt("elementProperties")]=new Map,ft[Vt("finalized")]=new Map,Es?.({ReactiveElement:ft}),(tt.reactiveElementVersions??(tt.reactiveElementVersions=[])).push("2.0.4");var rt={INITIAL:0,PENDING:1,COMPLETE:2,ERROR:3},L=Symbol(),D=class{get taskComplete(){return this.t||(this.i===1?this.t=new Promise((t,e)=>{this.o=t,this.h=e}):this.i===3?this.t=Promise.reject(this.l):this.t=Promise.resolve(this.u)),this.t}constructor(t,e,r){this.p=0,this.i=0,(this._=t).addController(this);let o=typeof e=="object"?e:{task:e,args:r};this.v=o.task,this.j=o.args,this.m=o.argsEqual??Eo,this.k=o.onComplete,this.A=o.onError,this.autoRun=o.autoRun??!0,"initialValue"in o&&(this.u=o.initialValue,this.i=2,this.O=this.T?.())}hostUpdate(){this.autoRun===!0&&this.S()}hostUpdated(){this.autoRun==="afterUpdate"&&this.S()}T(){if(this.j===void 0)return;let t=this.j();if(!Array.isArray(t))throw Error("The args function must return an array");return t}async S(){let t=this.T(),e=this.O;this.O=t,t===e||t===void 0||e!==void 0&&this.m(e,t)||await this.run(t)}async run(t){let e,r;t??(t=this.T()),this.O=t,this.i===1?this.q?.abort():(this.t=void 0,this.o=void 0,this.h=void 0),this.i=1,this.autoRun==="afterUpdate"?queueMicrotask(()=>this._.requestUpdate()):this._.requestUpdate();let o=++this.p;this.q=new AbortController;let a=!1;try{e=await this.v(t,{signal:this.q.signal})}catch(n){a=!0,r=n}if(this.p===o){if(e===L)this.i=0;else{if(a===!1){try{this.k?.(e)}catch{}this.i=2,this.o?.(e)}else{try{this.A?.(r)}catch{}this.i=3,this.h?.(r)}this.u=e,this.l=r}this._.requestUpdate()}}abort(t){this.i===1&&this.q?.abort(t)}get value(){return this.u}get error(){return this.l}get status(){return this.i}render(t){switch(this.i){case 0:return t.initial?.();case 1:return t.pending?.();case 2:return t.complete?.(this.value);case 3:return t.error?.(this.error);default:throw Error("Unexpected status: "+this.i)}}},Eo=(i,t)=>i===t||i.length===t.length&&i.every((e,r)=>!Cr(e,t[r]));var As={SET_LOADING:(i,t)=>({...i,isLoading:t.payload}),SET_UPDATING:(i,t)=>({...i,isUpdating:t.payload}),INITIALIZE_VAULT_MANAGER:(i,t,e)=>({...i,enabled:t.vaultEnabled,cvvRecapture:t.cvvRecapture,showEmptyState:t.showEmptyState,deleteVaultedPaymentMethod:e.deleteVaultedPaymentMethod,startVaultedPaymentFlow:e.startVaultedPaymentFlow,createCvvInput:e.createCvvInput}),UPDATE_PAYMENT_METHODS:(i,t)=>({...i,vaultedPaymentMethods:t.payload,isLoading:!1,isUpdating:!1}),SET_ERROR:i=>({...i,isLoading:!1,isUpdating:!1}),DISABLE:i=>({...i,enabled:!1}),RESET:()=>Ao},xs={INITIALIZE_CVV:(i,t,e)=>({...i,setCvvInput:e.setCvvInput,setSelectedVaultedPaymentMethod:e.setSelectedVaultedPaymentMethod}),SET_FORM_DIRTY:(i,t)=>({...i,formIsDirty:t.payload}),SET_CVV_INPUT:(i,t)=>({...i,cvvInput:t.payload}),SET_SELECTED_VAULTED_PAYMENT_METHOD:(i,t)=>({...i,selectedVaultedPaymentMethod:t.payload}),RESET_CVV:()=>xo},Ss=$t(As),_s=$t(xs),Ao={enabled:!1,isLoading:!1,isUpdating:!1,cvvRecapture:!1,showEmptyState:!0,vaultedPaymentMethods:[],createCvvInput:null,deleteVaultedPaymentMethod:()=>Promise.resolve(),startVaultedPaymentFlow:()=>Promise.resolve()},xo={cvvInput:null,formIsDirty:!1,setCvvInput:()=>{},selectedVaultedPaymentMethod:null,setSelectedVaultedPaymentMethod:()=>{}},ui=class extends ut{constructor(t,e){super(t,Ao,Ss,e,r=>{t.sdkContextController.setVaultManager(r)})}setLoading(t){this.dispatch({type:"SET_LOADING",payload:t})}setUpdating(t){this.dispatch({type:"SET_UPDATING",payload:t})}initializeVaultManager(t,e,r,o){this.dispatch({type:"INITIALIZE_VAULT_MANAGER",payload:t,vaultEnabled:e,cvvRecapture:r,showEmptyState:o})}updatePaymentMethods(t){this.dispatch({type:"UPDATE_PAYMENT_METHODS",payload:t})}setError(t){this.dispatch({type:"SET_ERROR",payload:t})}disable(){this.dispatch({type:"DISABLE"})}reset(){this.dispatch({type:"RESET"})}},hi=class extends ut{constructor(t,e){super(t,xo,_s,e,r=>{t.sdkContextController.setVaultManagerCvv(r)})}initializeCvv(t){this.dispatch({type:"INITIALIZE_CVV",createCvvInput:t})}setFormDirty(t){this.dispatch({type:"SET_FORM_DIRTY",payload:t})}setCvvInputState(t){this.dispatch({type:"SET_CVV_INPUT",payload:t})}setSelectedPaymentMethod(t){this.dispatch({type:"SET_SELECTED_VAULTED_PAYMENT_METHOD",payload:t})}resetCvv(){this.dispatch({type:"RESET_CVV"})}},Ut=class extends pr{constructor(e){super(e);this._vaultManager=null;this._options=null;this.createVaultManagerFn=null;this.createCvvInput=e=>{if(!this._vaultManager)throw new Error("Vault manager not initialized");return this._vaultManager.createCvvInput(e)};this.deleteVaultedPaymentMethod=async e=>{if(!this._vaultManager)throw new Error("Vault manager not initialized");try{this.coreController.updatePaymentMethods(this.vaultManagerState.vaultedPaymentMethods),await this._vaultManager.deleteVaultedPaymentMethod(e),await this.fetchVaultedPaymentMethods()}catch(r){throw this.coreController.setError(r instanceof Error?r:new Error("Failed to delete payment method")),r}};this.setCvvInput=e=>{this.itemController.setCvvInputState(e)};this.startVaultedPaymentFlow=async()=>{if(!this._vaultManager)throw new Error("Vault manager not initialized");let e=this.vaultItemState.selectedVaultedPaymentMethod,r=this.vaultManagerState.cvvRecapture,o=this.vaultItemState.cvvInput;if(!e||r&&(!o||o.metadata.error)){this.itemController.setFormDirty(!0);return}this.host.sdkStateController.startProcessing();try{await this._vaultManager.startPaymentFlow(e.id,r?{cvv:o.valueToken}:void 0)}catch(a){_.error("VaultManagerController: Error starting vaulted payment flow",a),this.coreController.setError(a instanceof Error?a:new Error("Failed to start vaulted payment flow")),this.host.sdkStateController.stopProcessing()}};this.setSelectedVaultedPaymentMethod=e=>{this.itemController.setSelectedPaymentMethod(e),this.itemController.setFormDirty(!1)};this.coreController=new ui(e,{deleteVaultedPaymentMethod:this.deleteVaultedPaymentMethod.bind(this),startVaultedPaymentFlow:this.startVaultedPaymentFlow.bind(this),createCvvInput:this.createCvvInput}),this.itemController=new hi(e,{setCvvInput:this.setCvvInput.bind(this),setSelectedVaultedPaymentMethod:this.setSelectedVaultedPaymentMethod.bind(this)}),this.addController(this.coreController),this.addController(this.itemController),new D(this.host,{task:async([r,o])=>{if(!r||!o?.vaultEnabled)return this.coreController.disable(),L;this.coreController.setLoading(!0);try{let a=r();this._vaultManager=a,this.coreController.initializeVaultManager(a,o.vaultEnabled,!!o.captureVaultedCardCvv,o.showEmptyState??!0),this.itemController.initializeCvv(a.createCvvInput),await this.fetchVaultedPaymentMethods(!0),_.log("VaultManagerController: Vault initialized successfully",{coreState:this.coreController.currentState,cvvState:this.itemController.currentState})}catch(a){_.error("VaultManagerController: Failed to initialize vault",a),this.coreController.setError(a instanceof Error?a:new Error("Unknown error"))}return this._vaultManager},args:()=>[this.createVaultManagerFn,this.options]})}initializeVaultManager(e,r){this.createVaultManagerFn=e,this.options=r??null}get vaultManager(){return this._vaultManager}set vaultManager(e){this._vaultManager=e,this.host.requestUpdate()}get options(){return this._options}set options(e){this._options=e,this.host.requestUpdate()}get vaultManagerState(){return this.coreController.currentState}get vaultItemState(){return this.itemController.currentState}hostDisconnected(){super.hostDisconnected(),this.vaultManager=null,this.coreController.reset()}async fetchVaultedPaymentMethods(e){if(!this._vaultManager)throw new Error("Vault manager not initialized");try{e||this.coreController.setUpdating(!0);let r=await this._vaultManager.fetchVaultedPaymentMethods();return _.log("VaultManagerController: Fetched payment methods",r),this.coreController.updatePaymentMethods(r),r}catch(r){throw this.coreController.setError(r instanceof Error?r:new Error("Failed to fetch payment methods")),r}}};var So=()=>_o.randomUUID?.()||Ps(),Ps=()=>("10000000-1000-4000-8000"+-1e11).replace(/[018]/g,i=>(i^Ts()>>i/4).toString(16)),Ts=()=>(_o.getRandomValues?.(new Uint8Array(1))[0]??Math.random()*16)&15,_o=typeof crypto<"u"?crypto:{};var ws={LOCAL:"",DEV:"https://analytics.dev.data.primer.io/v1/sdk-analytic-events",STAGING:"https://analytics.staging.data.primer.io/v1/sdk-analytic-events",SANDBOX:"https://analytics.sandbox.data.primer.io/v1/sdk-analytic-events",PRODUCTION:"https://analytics.production.data.primer.io/v1/sdk-analytic-events"},fi=class{constructor(){I(this,"sessionConfig",null)}initialize(t){this.sessionConfig=t}clear(){this.sessionConfig=null}getSessionConfig(){return this.sessionConfig}sendEvent(t){if(!this.sessionConfig){_.error("Analytics manager not initialized. Call initializeAnalytics() first.");return}let e={id:So(),timestamp:Math.floor(Date.now()/1e3),sdkType:"WEB",eventName:t.eventName,checkoutSessionId:this.sessionConfig.checkoutSessionId,clientSessionId:this.sessionConfig.clientSessionId,primerAccountId:this.sessionConfig.primerAccountId,sdkVersion:this.sessionConfig.sdkVersion,userAgent:typeof navigator<"u"?navigator.userAgent:"",eventType:t.eventType,userLocale:t.userLocale,paymentMethod:t.paymentMethod,paymentId:t.paymentId,redirectDestinationUrl:t.redirectDestinationUrl,threedsProvider:t.threedsProvider,threedsResponse:t.threedsResponse};Ms(e,this.sessionConfig)}},yi=new fi;function Po(i){yi.initialize(i)}function G(i){yi.sendEvent(i)}function To(){yi.clear()}async function Ms(i,{environment:t,clientSessionToken:e}){if(t==="LOCAL"){_.debug(`Analytics event ${i.eventName}:`,i);return}let r=ws[t];return fetch(r,{method:"POST",headers:{"Content-Type":"application/json",...e&&{Authorization:`Bearer ${e}`}},body:JSON.stringify(i)}).catch(o=>{_.error("Failed to send analytics event:",o)})}var Yt="lit-localize-status";var wo=i=>typeof i!="string"&&"strTag"in i,Er=(i,t,e)=>{let r=i[0];for(let o=1;o<i.length;o++)r+=t[e?e[o-1]:o-1],r+=i[o];return r};var Ht=i=>wo(i)?Er(i.strings,i.values):i;var S=Ht,Mo=!1;function gi(i){if(Mo)throw new Error("lit-localize can only be configured once");S=i,Mo=!0}var vi=class{constructor(t){this.__litLocalizeEventHandler=e=>{e.detail.status==="ready"&&this.host.requestUpdate()},this.host=t}hostConnected(){window.addEventListener(Yt,this.__litLocalizeEventHandler)}hostDisconnected(){window.removeEventListener(Yt,this.__litLocalizeEventHandler)}},Is=i=>i.addController(new vi(i)),Io=Is;var k=()=>(i,t)=>(i.addInitializer(Io),i);var Bt=class{constructor(){this.settled=!1,this.promise=new Promise((t,e)=>{this._resolve=t,this._reject=e})}resolve(t){this.settled=!0,this._resolve(t)}reject(t){this.settled=!0,this._reject(t)}};var Ve=[];for(let i=0;i<256;i++)Ve[i]=(i>>4&15).toString(16)+(i&15).toString(16);function ko(i){let t=0,e=8997,r=0,o=33826,a=0,n=40164,l=0,s=52210;for(let c=0;c<i.length;c++)e^=i.charCodeAt(c),t=e*435,r=o*435,a=n*435,l=s*435,a+=e<<8,l+=o<<8,r+=t>>>16,e=t&65535,a+=r>>>16,o=r&65535,s=l+(a>>>16)&65535,n=a&65535;return Ve[s>>8]+Ve[s&255]+Ve[n>>8]+Ve[n&255]+Ve[o>>8]+Ve[o&255]+Ve[e>>8]+Ve[e&255]}var ks="",Ns="h",Ls="s";function No(i,t){return(t?Ns:Ls)+ko(typeof i=="string"?i:i.join(ks))}var Lo=new WeakMap,Ro=new Map;function Oo(i,t,e){if(i){let r=e?.id??Rs(t),o=i[r];if(o){if(typeof o=="string")return o;if("strTag"in o)return Er(o.strings,t.values,o.values);{let a=Lo.get(o);return a===void 0&&(a=o.values,Lo.set(o,a)),{...o,values:a.map(n=>t.values[n])}}}}return Ht(t)}function Rs(i){let t=typeof i=="string"?i:i.strings,e=Ro.get(t);return e===void 0&&(e=No(t,typeof i!="string"&&!("strTag"in i)),Ro.set(t,e)),e}function bi(i){window.dispatchEvent(new CustomEvent(Yt,{detail:i}))}var xr="",Ci,Do,Sr,Ei,$o,yt=new Bt;yt.resolve();var Ar=0,Vo=i=>(gi((t,e)=>Oo($o,t,e)),xr=Do=i.sourceLocale,Sr=new Set(i.targetLocales),Sr.add(i.sourceLocale),Ei=i.loadLocale,{getLocale:Os,setLocale:Ds}),Os=()=>xr,Ds=i=>{if(i===(Ci??xr))return yt.promise;if(!Sr||!Ei)throw new Error("Internal error");if(!Sr.has(i))throw new Error("Invalid locale code");Ar++;let t=Ar;return Ci=i,yt.settled&&(yt=new Bt),bi({status:"loading",loadingLocale:i}),(i===Do?Promise.resolve({templates:void 0}):Ei(i)).then(r=>{Ar===t&&(xr=i,Ci=void 0,$o=r.templates,bi({status:"ready",readyLocale:i}),yt.resolve())},r=>{Ar===t&&(bi({status:"error",errorLocale:i,errorMessage:r.toString()}),yt.reject(r))}),yt.promise};var Ai="en",xi=["ar","bg","ca","cs","da","de","el","en-GB","es","es-AR","es-MX","et-EE","fi-FI","fr","he","hr","hu","id","it","ja","ko","lt","lt-LT","lv","lv-LV","ms","nb","nl","nl_NL","pl","pt","pt-BR","ro","ru","sk","sl","sr-RS","sv","th","tr","uk-UA","vi","zf","zh-CN","zh-HK","zh-TW"],Uo="You must call `loadLocale` first to set up the localized template.",Yo,_r,Ho=i=>{let t=Vo({sourceLocale:Ai,targetLocales:xi,loadLocale:i});Yo=t.getLocale,_r=t.setLocale};var Si=i=>{Ho(i)},_i=i=>{if(!_r)throw new Error(Uo);return _r(i)};var Ft=new Set(xi);Ft.add(Ai);var Pi=i=>{if(typeof i!="string")return!1;if(i==="en")return!0;let t=i.replace("_","-");if(Ft.has(t))return!0;let e=t.split("-")[0];return!!Ft.has(e)},Ti=i=>{if(i==="en")return"en-GB";let t=i.replace("_","-");if(Ft.has(t))return t;let e=t.split("-")[0];return Ft.has(e)?e:"en-GB"};var Pr=globalThis,Tr=Pr.ShadowRoot&&(Pr.ShadyCSS===void 0||Pr.ShadyCSS.nativeShadow)&&"adoptedStyleSheets"in Document.prototype&&"replace"in CSSStyleSheet.prototype,wi=Symbol(),Bo=new WeakMap,zt=class{constructor(t,e,r){if(this._$cssResult$=!0,r!==wi)throw Error("CSSResult is not constructable. Use `unsafeCSS` or `css` instead.");this.cssText=t,this.t=e}get styleSheet(){let t=this.o,e=this.t;if(Tr&&t===void 0){let r=e!==void 0&&e.length===1;r&&(t=Bo.get(e)),t===void 0&&((this.o=t=new CSSStyleSheet).replaceSync(this.cssText),r&&Bo.set(e,t))}return t}toString(){return this.cssText}},we=i=>new zt(typeof i=="string"?i:i+"",void 0,wi),y=(i,...t)=>{let e=i.length===1?i[0]:t.reduce((r,o,a)=>r+(n=>{if(n._$cssResult$===!0)return n.cssText;if(typeof n=="number")return n;throw Error("Value passed to 'css' function must be a 'css' function result: "+n+". Use 'unsafeCSS' to pass non-literal values, but take care to ensure page security.")})(o)+i[a+1],i[0]);return new zt(e,i,wi)},Fo=(i,t)=>{if(Tr)i.adoptedStyleSheets=t.map(e=>e instanceof CSSStyleSheet?e:e.styleSheet);else for(let e of t){let r=document.createElement("style"),o=Pr.litNonce;o!==void 0&&r.setAttribute("nonce",o),r.textContent=e.cssText,i.appendChild(r)}},Mi=Tr?i=>i:i=>i instanceof CSSStyleSheet?(t=>{let e="";for(let r of t.cssRules)e+=r.cssText;return we(e)})(i):i;var{is:$s,defineProperty:Vs,getOwnPropertyDescriptor:Us,getOwnPropertyNames:Ys,getOwnPropertySymbols:Hs,getPrototypeOf:Bs}=Object,it=globalThis,zo=it.trustedTypes,Fs=zo?zo.emptyScript:"",zs=it.reactiveElementPolyfillSupport,jt=(i,t)=>i,Kt={toAttribute(i,t){switch(t){case Boolean:i=i?Fs:null;break;case Object:case Array:i=i==null?i:JSON.stringify(i)}return i},fromAttribute(i,t){let e=i;switch(t){case Boolean:e=i!==null;break;case Number:e=i===null?null:Number(i);break;case Object:case Array:try{e=JSON.parse(i)}catch{e=null}}return e}},wr=(i,t)=>!$s(i,t),jo={attribute:!0,type:String,converter:Kt,reflect:!1,useDefault:!1,hasChanged:wr};Symbol.metadata??(Symbol.metadata=Symbol("metadata")),it.litPropertyMetadata??(it.litPropertyMetadata=new WeakMap);var Ue=class extends HTMLElement{static addInitializer(t){this._$Ei(),(this.l??(this.l=[])).push(t)}static get observedAttributes(){return this.finalize(),this._$Eh&&[...this._$Eh.keys()]}static createProperty(t,e=jo){if(e.state&&(e.attribute=!1),this._$Ei(),this.prototype.hasOwnProperty(t)&&((e=Object.create(e)).wrapped=!0),this.elementProperties.set(t,e),!e.noAccessor){let r=Symbol(),o=this.getPropertyDescriptor(t,r,e);o!==void 0&&Vs(this.prototype,t,o)}}static getPropertyDescriptor(t,e,r){let{get:o,set:a}=Us(this.prototype,t)??{get(){return this[e]},set(n){this[e]=n}};return{get:o,set(n){let l=o?.call(this);a?.call(this,n),this.requestUpdate(t,l,r)},configurable:!0,enumerable:!0}}static getPropertyOptions(t){return this.elementProperties.get(t)??jo}static _$Ei(){if(this.hasOwnProperty(jt("elementProperties")))return;let t=Bs(this);t.finalize(),t.l!==void 0&&(this.l=[...t.l]),this.elementProperties=new Map(t.elementProperties)}static finalize(){if(this.hasOwnProperty(jt("finalized")))return;if(this.finalized=!0,this._$Ei(),this.hasOwnProperty(jt("properties"))){let e=this.properties,r=[...Ys(e),...Hs(e)];for(let o of r)this.createProperty(o,e[o])}let t=this[Symbol.metadata];if(t!==null){let e=litPropertyMetadata.get(t);if(e!==void 0)for(let[r,o]of e)this.elementProperties.set(r,o)}this._$Eh=new Map;for(let[e,r]of this.elementProperties){let o=this._$Eu(e,r);o!==void 0&&this._$Eh.set(o,e)}this.elementStyles=this.finalizeStyles(this.styles)}static finalizeStyles(t){let e=[];if(Array.isArray(t)){let r=new Set(t.flat(1/0).reverse());for(let o of r)e.unshift(Mi(o))}else t!==void 0&&e.push(Mi(t));return e}static _$Eu(t,e){let r=e.attribute;return r===!1?void 0:typeof r=="string"?r:typeof t=="string"?t.toLowerCase():void 0}constructor(){super(),this._$Ep=void 0,this.isUpdatePending=!1,this.hasUpdated=!1,this._$Em=null,this._$Ev()}_$Ev(){this._$ES=new Promise(t=>this.enableUpdating=t),this._$AL=new Map,this._$E_(),this.requestUpdate(),this.constructor.l?.forEach(t=>t(this))}addController(t){(this._$EO??(this._$EO=new Set)).add(t),this.renderRoot!==void 0&&this.isConnected&&t.hostConnected?.()}removeController(t){this._$EO?.delete(t)}_$E_(){let t=new Map,e=this.constructor.elementProperties;for(let r of e.keys())this.hasOwnProperty(r)&&(t.set(r,this[r]),delete this[r]);t.size>0&&(this._$Ep=t)}createRenderRoot(){let t=this.shadowRoot??this.attachShadow(this.constructor.shadowRootOptions);return Fo(t,this.constructor.elementStyles),t}connectedCallback(){this.renderRoot??(this.renderRoot=this.createRenderRoot()),this.enableUpdating(!0),this._$EO?.forEach(t=>t.hostConnected?.())}enableUpdating(t){}disconnectedCallback(){this._$EO?.forEach(t=>t.hostDisconnected?.())}attributeChangedCallback(t,e,r){this._$AK(t,r)}_$ET(t,e){let r=this.constructor.elementProperties.get(t),o=this.constructor._$Eu(t,r);if(o!==void 0&&r.reflect===!0){let a=(r.converter?.toAttribute!==void 0?r.converter:Kt).toAttribute(e,r.type);this._$Em=t,a==null?this.removeAttribute(o):this.setAttribute(o,a),this._$Em=null}}_$AK(t,e){let r=this.constructor,o=r._$Eh.get(t);if(o!==void 0&&this._$Em!==o){let a=r.getPropertyOptions(o),n=typeof a.converter=="function"?{fromAttribute:a.converter}:a.converter?.fromAttribute!==void 0?a.converter:Kt;this._$Em=o,this[o]=n.fromAttribute(e,a.type)??this._$Ej?.get(o)??null,this._$Em=null}}requestUpdate(t,e,r){if(t!==void 0){let o=this.constructor,a=this[t];if(r??(r=o.getPropertyOptions(t)),!((r.hasChanged??wr)(a,e)||r.useDefault&&r.reflect&&a===this._$Ej?.get(t)&&!this.hasAttribute(o._$Eu(t,r))))return;this.C(t,e,r)}this.isUpdatePending===!1&&(this._$ES=this._$EP())}C(t,e,{useDefault:r,reflect:o,wrapped:a},n){r&&!(this._$Ej??(this._$Ej=new Map)).has(t)&&(this._$Ej.set(t,n??e??this[t]),a!==!0||n!==void 0)||(this._$AL.has(t)||(this.hasUpdated||r||(e=void 0),this._$AL.set(t,e)),o===!0&&this._$Em!==t&&(this._$Eq??(this._$Eq=new Set)).add(t))}async _$EP(){this.isUpdatePending=!0;try{await this._$ES}catch(e){Promise.reject(e)}let t=this.scheduleUpdate();return t!=null&&await t,!this.isUpdatePending}scheduleUpdate(){return this.performUpdate()}performUpdate(){if(!this.isUpdatePending)return;if(!this.hasUpdated){if(this.renderRoot??(this.renderRoot=this.createRenderRoot()),this._$Ep){for(let[o,a]of this._$Ep)this[o]=a;this._$Ep=void 0}let r=this.constructor.elementProperties;if(r.size>0)for(let[o,a]of r){let{wrapped:n}=a,l=this[o];n!==!0||this._$AL.has(o)||l===void 0||this.C(o,void 0,a,l)}}let t=!1,e=this._$AL;try{t=this.shouldUpdate(e),t?(this.willUpdate(e),this._$EO?.forEach(r=>r.hostUpdate?.()),this.update(e)):this._$EM()}catch(r){throw t=!1,this._$EM(),r}t&&this._$AE(e)}willUpdate(t){}_$AE(t){this._$EO?.forEach(e=>e.hostUpdated?.()),this.hasUpdated||(this.hasUpdated=!0,this.firstUpdated(t)),this.updated(t)}_$EM(){this._$AL=new Map,this.isUpdatePending=!1}get updateComplete(){return this.getUpdateComplete()}getUpdateComplete(){return this._$ES}shouldUpdate(t){return!0}update(t){this._$Eq&&(this._$Eq=this._$Eq.forEach(e=>this._$ET(e,this[e]))),this._$EM()}updated(t){}firstUpdated(t){}};Ue.elementStyles=[],Ue.shadowRootOptions={mode:"open"},Ue[jt("elementProperties")]=new Map,Ue[jt("finalized")]=new Map,zs?.({ReactiveElement:Ue}),(it.reactiveElementVersions??(it.reactiveElementVersions=[])).push("2.1.0");var qt=globalThis,Mr=qt.trustedTypes,Ko=Mr?Mr.createPolicy("lit-html",{createHTML:i=>i}):void 0,ki="$lit$",Ye=`lit$${Math.random().toFixed(9).slice(2)}$`,Ni="?"+Ye,js=`<${Ni}>`,bt=document,Wt=()=>bt.createComment(""),Jt=i=>i===null||typeof i!="object"&&typeof i!="function",Li=Array.isArray,Xo=i=>Li(i)||typeof i?.[Symbol.iterator]=="function",Ii=`[
|
|
2
2
|
\f\r]`,Gt=/<(?:(!--|\/[^a-zA-Z])|(\/?[a-zA-Z][^>\s]*)|(\/?$))/g,Go=/-->/g,qo=/>/g,gt=RegExp(`>|${Ii}(?:([^\\s"'>=/]+)(${Ii}*=${Ii}*(?:[^
|
|
3
|
-
\f\r"'\`<>=]|("|')|))|$)`,"g"),Wo=/'/g,Jo=/"/g,Qo=/^(?:script|style|textarea|title)$/i,Ri=i=>(t,...e)=>({_$litType$:i,strings:t,values:e}),m=Ri(1),Me=Ri(2),Tm=Ri(3),Ee=Symbol.for("lit-noChange"),f=Symbol.for("lit-nothing"),Zo=new WeakMap,vt=bt.createTreeWalker(bt,129);function ea(i,t){if(!Li(i)||!i.hasOwnProperty("raw"))throw Error("invalid template strings array");return Ko!==void 0?Ko.createHTML(t):t}var ta=(i,t)=>{let e=i.length-1,r=[],o,a=t===2?"<svg>":t===3?"<math>":"",n=Gt;for(let l=0;l<e;l++){let s=i[l],c,u,h=-1,b=0;for(;b<s.length&&(n.lastIndex=b,u=n.exec(s),u!==null);)b=n.lastIndex,n===Gt?u[1]==="!--"?n=Go:u[1]!==void 0?n=qo:u[2]!==void 0?(Qo.test(u[2])&&(o=RegExp("</"+u[2],"g")),n=gt):u[3]!==void 0&&(n=gt):n===gt?u[0]===">"?(n=o??Gt,h=-1):u[1]===void 0?h=-2:(h=n.lastIndex-u[2].length,c=u[1],n=u[3]===void 0?gt:u[3]==='"'?Jo:Wo):n===Jo||n===Wo?n=gt:n===Go||n===qo?n=Gt:(n=gt,o=void 0);let E=n===gt&&i[l+1].startsWith("/>")?" ":"";a+=n===Gt?s+js:h>=0?(r.push(c),s.slice(0,h)+ki+s.slice(h)+He+E):s+He+(h===-2?l:E)}return[ea(i,a+(i[e]||"<?>")+(t===2?"</svg>":t===3?"</math>":"")),r]},Zt=class i{constructor({strings:t,_$litType$:e},r){let o;this.parts=[];let a=0,n=0,l=t.length-1,s=this.parts,[c,u]=ta(t,e);if(this.el=i.createElement(c,r),vt.currentNode=this.el.content,e===2||e===3){let h=this.el.content.firstChild;h.replaceWith(...h.childNodes)}for(;(o=vt.nextNode())!==null&&s.length<l;){if(o.nodeType===1){if(o.hasAttributes())for(let h of o.getAttributeNames())if(h.endsWith(ki)){let b=u[n++],E=o.getAttribute(h).split(He),A=/([.?@])?(.*)/.exec(b);s.push({type:1,index:a,name:A[2],strings:E,ctor:A[1]==="."?kr:A[1]==="?"?Nr:A[1]==="@"?Lr:Et}),o.removeAttribute(h)}else h.startsWith(He)&&(s.push({type:6,index:a}),o.removeAttribute(h));if(Qo.test(o.tagName)){let h=o.textContent.split(He),b=h.length-1;if(b>0){o.textContent=Mr?Mr.emptyScript:"";for(let E=0;E<b;E++)o.append(h[E],Wt()),vt.nextNode(),s.push({type:2,index:++a});o.append(h[b],Wt())}}}else if(o.nodeType===8)if(o.data===Ni)s.push({type:2,index:a});else{let h=-1;for(;(h=o.data.indexOf(He,h+1))!==-1;)s.push({type:7,index:a}),h+=He.length-1}a++}}static createElement(t,e){let r=bt.createElement("template");return r.innerHTML=t,r}};function Ct(i,t,e=i,r){if(t===Ee)return t;let o=r!==void 0?e._$Co?.[r]:e._$Cl,a=Jt(t)?void 0:t._$litDirective$;return o?.constructor!==a&&(o?._$AO?.(!1),a===void 0?o=void 0:(o=new a(i),o._$AT(i,e,r)),r!==void 0?(e._$Co??(e._$Co=[]))[r]=o:e._$Cl=o),o!==void 0&&(t=Ct(i,o._$AS(i,t.values),o,r)),t}var Ir=class{constructor(t,e){this._$AV=[],this._$AN=void 0,this._$AD=t,this._$AM=e}get parentNode(){return this._$AM.parentNode}get _$AU(){return this._$AM._$AU}u(t){let{el:{content:e},parts:r}=this._$AD,o=(t?.creationScope??bt).importNode(e,!0);vt.currentNode=o;let a=vt.nextNode(),n=0,l=0,s=r[0];for(;s!==void 0;){if(n===s.index){let c;s.type===2?c=new Mt(a,a.nextSibling,this,t):s.type===1?c=new s.ctor(a,s.name,s.strings,this,t):s.type===6&&(c=new Rr(a,this,t)),this._$AV.push(c),s=r[++l]}n!==s?.index&&(a=vt.nextNode(),n++)}return vt.currentNode=bt,o}p(t){let e=0;for(let r of this._$AV)r!==void 0&&(r.strings!==void 0?(r._$AI(t,r,e),e+=r.strings.length-2):r._$AI(t[e])),e++}},Mt=class i{get _$AU(){return this._$AM?._$AU??this._$Cv}constructor(t,e,r,o){this.type=2,this._$AH=f,this._$AN=void 0,this._$AA=t,this._$AB=e,this._$AM=r,this.options=o,this._$Cv=o?.isConnected??!0}get parentNode(){let t=this._$AA.parentNode,e=this._$AM;return e!==void 0&&t?.nodeType===11&&(t=e.parentNode),t}get startNode(){return this._$AA}get endNode(){return this._$AB}_$AI(t,e=this){t=Ct(this,t,e),Jt(t)?t===f||t==null||t===""?(this._$AH!==f&&this._$AR(),this._$AH=f):t!==this._$AH&&t!==Ee&&this._(t):t._$litType$!==void 0?this.$(t):t.nodeType!==void 0?this.T(t):Xo(t)?this.k(t):this._(t)}O(t){return this._$AA.parentNode.insertBefore(t,this._$AB)}T(t){this._$AH!==t&&(this._$AR(),this._$AH=this.O(t))}_(t){this._$AH!==f&&Jt(this._$AH)?this._$AA.nextSibling.data=t:this.T(bt.createTextNode(t)),this._$AH=t}$(t){let{values:e,_$litType$:r}=t,o=typeof r=="number"?this._$AC(t):(r.el===void 0&&(r.el=Zt.createElement(ea(r.h,r.h[0]),this.options)),r);if(this._$AH?._$AD===o)this._$AH.p(e);else{let a=new Ir(o,this),n=a.u(this.options);a.p(e),this.T(n),this._$AH=a}}_$AC(t){let e=Zo.get(t.strings);return e===void 0&&Zo.set(t.strings,e=new Zt(t)),e}k(t){Li(this._$AH)||(this._$AH=[],this._$AR());let e=this._$AH,r,o=0;for(let a of t)o===e.length?e.push(r=new i(this.O(Wt()),this.O(Wt()),this,this.options)):r=e[o],r._$AI(a),o++;o<e.length&&(this._$AR(r&&r._$AB.nextSibling,o),e.length=o)}_$AR(t=this._$AA.nextSibling,e){for(this._$AP?.(!1,!0,e);t&&t!==this._$AB;){let r=t.nextSibling;t.remove(),t=r}}setConnected(t){this._$AM===void 0&&(this._$Cv=t,this._$AP?.(t))}},Et=class{get tagName(){return this.element.tagName}get _$AU(){return this._$AM._$AU}constructor(t,e,r,o,a){this.type=1,this._$AH=f,this._$AN=void 0,this.element=t,this.name=e,this._$AM=o,this.options=a,r.length>2||r[0]!==""||r[1]!==""?(this._$AH=Array(r.length-1).fill(new String),this.strings=r):this._$AH=f}_$AI(t,e=this,r,o){let a=this.strings,n=!1;if(a===void 0)t=Ct(this,t,e,0),n=!Jt(t)||t!==this._$AH&&t!==Ee,n&&(this._$AH=t);else{let l=t,s,c;for(t=a[0],s=0;s<a.length-1;s++)c=Ct(this,l[r+s],e,s),c===Ee&&(c=this._$AH[s]),n||(n=!Jt(c)||c!==this._$AH[s]),c===f?t=f:t!==f&&(t+=(c??"")+a[s+1]),this._$AH[s]=c}n&&!o&&this.j(t)}j(t){t===f?this.element.removeAttribute(this.name):this.element.setAttribute(this.name,t??"")}},kr=class extends Et{constructor(){super(...arguments),this.type=3}j(t){this.element[this.name]=t===f?void 0:t}},Nr=class extends Et{constructor(){super(...arguments),this.type=4}j(t){this.element.toggleAttribute(this.name,!!t&&t!==f)}},Lr=class extends Et{constructor(t,e,r,o,a){super(t,e,r,o,a),this.type=5}_$AI(t,e=this){if((t=Ct(this,t,e,0)??f)===Ee)return;let r=this._$AH,o=t===f&&r!==f||t.capture!==r.capture||t.once!==r.once||t.passive!==r.passive,a=t!==f&&(r===f||o);o&&this.element.removeEventListener(this.name,this,r),a&&this.element.addEventListener(this.name,this,t),this._$AH=t}handleEvent(t){typeof this._$AH=="function"?this._$AH.call(this.options?.host??this.element,t):this._$AH.handleEvent(t)}},Rr=class{constructor(t,e,r){this.element=t,this.type=6,this._$AN=void 0,this._$AM=e,this.options=r}get _$AU(){return this._$AM._$AU}_$AI(t){Ct(this,t)}},ra={M:ki,P:He,A:Ni,C:1,L:ta,R:Ir,D:Xo,V:Ct,I:Mt,H:Et,N:Nr,U:Lr,B:kr,F:Rr},Ks=qt.litHtmlPolyfillSupport;Ks?.(Zt,Mt),(qt.litHtmlVersions??(qt.litHtmlVersions=[])).push("3.3.0");var ia=(i,t,e)=>{let r=e?.renderBefore??t,o=r._$litPart$;if(o===void 0){let a=e?.renderBefore??null;r._$litPart$=o=new Mt(t.insertBefore(Wt(),a),a,void 0,e??{})}return o._$AI(i),o};var Xt=globalThis,g=class extends Ye{constructor(){super(...arguments),this.renderOptions={host:this},this._$Do=void 0}createRenderRoot(){var e;let t=super.createRenderRoot();return(e=this.renderOptions).renderBefore??(e.renderBefore=t.firstChild),t}update(t){let e=this.render();this.hasUpdated||(this.renderOptions.isConnected=this.isConnected),super.update(t),this._$Do=ia(e,this.renderRoot,this.renderOptions)}connectedCallback(){super.connectedCallback(),this._$Do?.setConnected(!0)}disconnectedCallback(){super.disconnectedCallback(),this._$Do?.setConnected(!1)}render(){return Ee}};g._$litElement$=!0,g.finalized=!0,Xt.litElementHydrateSupport?.({LitElement:g});var Gs=Xt.litElementPolyfillSupport;Gs?.({LitElement:g});(Xt.litElementVersions??(Xt.litElementVersions=[])).push("4.2.0");var v=i=>(t,e)=>{e!==void 0?e.addInitializer(()=>{customElements.define(i,t)}):customElements.define(i,t)};var qs={attribute:!0,type:String,converter:Kt,reflect:!1,hasChanged:wr},Ws=(i=qs,t,e)=>{let{kind:r,metadata:o}=e,a=globalThis.litPropertyMetadata.get(o);if(a===void 0&&globalThis.litPropertyMetadata.set(o,a=new Map),r==="setter"&&((i=Object.create(i)).wrapped=!0),a.set(e.name,i),r==="accessor"){let{name:n}=e;return{set(l){let s=t.get.call(this);t.set.call(this,l),this.requestUpdate(n,s,i)},init(l){return l!==void 0&&this.C(n,void 0,i,l),l}}}if(r==="setter"){let{name:n}=e;return function(l){let s=this[n];t.call(this,l),this.requestUpdate(n,s,i)}}throw Error("Unsupported decorator location: "+r)};function p(i){return(t,e)=>typeof e=="object"?Ws(i,t,e):((r,o,a)=>{let n=o.hasOwnProperty(a);return o.constructor.createProperty(a,r),n?Object.getOwnPropertyDescriptor(o,a):void 0})(i,t,e)}function M(i){return p({...i,state:!0,attribute:!1})}var xt=(i,t,e)=>(e.configurable=!0,e.enumerable=!0,Reflect.decorate&&typeof t!="object"&&Object.defineProperty(i,t,e),e);function at(i,t){return(e,r,o)=>{let a=n=>n.renderRoot?.querySelector(i)??null;if(t){let{get:n,set:l}=typeof r=="object"?e:o??(()=>{let s=Symbol();return{get(){return this[s]},set(c){this[s]=c}}})();return xt(e,r,{get(){let s=n.call(this);return s===void 0&&(s=a(this),(s!==null||this.hasUpdated)&&l.call(this,s)),s}})}return xt(e,r,{get(){return a(this)}})}}function R(i,t,e){return i?t(i):e?.(i)}var _=y` * { box-sizing: border-box; } `,oa=y` :host { display: block; isolation: isolate; position: relative; width: 100%; //Keep the CSS loader in the same position - check css-loader-inline.ts min-height: 64px; } `;var aa="https://sdk.primer.io/web/v2-latest/Primer.min.js",Ie="20px";var Or=class{constructor(t){this._methods=t}get(t){return this._methods.get(t)}toArray(){return Array.from(this._methods.values())}size(){return this._methods.size}};var Dr=class{constructor(t){this.paymentMethods=null;this.headlessInstance=t}setPaymentMethods(t){this.paymentMethods=t}async refreshSession(){if(!this.headlessInstance){P.error("PrimerJS: Cannot refresh session: Headless instance not available");return}try{await this.headlessInstance.refreshClientSession()}catch(t){throw P.error("PrimerJS: Error refreshing client session:",t),t}}getPaymentMethods(){return this.paymentMethods?this.paymentMethods.toArray():(P.warn("PrimerJS: Payment methods not available"),[])}handlePaymentStart(){this.onPaymentStart&&this.onPaymentStart()}handleBeforePaymentCreate(t,e){if(this.onPaymentPrepare){let r={continuePaymentCreation:()=>{P.info("PrimerJS: Payment creation continuing"),e.continuePaymentCreation()},abortPaymentCreation:()=>{P.info("PrimerJS: Payment creation aborted"),e.abortPaymentCreation()}};this.onPaymentPrepare(t,r)}else P.info("PrimerJS: No payment prepare handler, continuing by default"),e.continuePaymentCreation()}handlePaymentComplete(t){this.onPaymentComplete&&this.onPaymentComplete({payment:t,status:"success"})}handlePaymentFailure(t,e){this.onPaymentComplete&&this.onPaymentComplete({payment:e||null,status:"error",error:t})}};var $r=typeof window<"u"&&typeof window.document<"u";function Js(i){return document.querySelector(`script[src^="${i}"]`)}function Zs(i,t){let e=document.createElement("script");return e.setAttribute("src",i),e.setAttribute("async",""),e.setAttribute("crossorigin","anonymous"),t&&e.setAttribute("type","module"),e}function na(i,t=!1){if(!$r)throw new Error("Cannot load script in server environment");let e=Js(i)??Zs(i,t);return new Promise((r,o)=>{e.onload=()=>{r()},e.onerror=()=>{o(new Error(`Failed to load script: ${i}`))},e.parentNode||document.head.appendChild(e)})}var Xs={"../../node_modules/card-validator/dist/card-number.js":function(i,t,e){Object.defineProperty(t,"__esModule",{value:!0}),t.cardNumber=void 0;var r=e("../../node_modules/card-validator/dist/luhn-10.js"),o=e("../../node_modules/credit-card-type/dist/index.js");function a(l,s,c){return{card:l,isPotentiallyValid:s,isValid:c}}function n(l,s){s===void 0&&(s={});var c,u,h;if(typeof l!="string"&&typeof l!="number")return a(null,!1,!1);var b=String(l).replace(/-|\s/g,"");if(!/^\d*$/.test(b))return a(null,!1,!1);var E=o(b);if(E.length===0)return a(null,!1,!1);if(E.length!==1)return a(null,!0,!1);var A=E[0];if(s.maxLength&&b.length>s.maxLength)return a(A,!1,!1);u=s.skipLuhnValidation===!0||A.type===o.types.UNIONPAY&&s.luhnValidateUnionPay!==!0?!0:r(b),h=Math.max.apply(null,A.lengths),s.maxLength&&(h=Math.min(s.maxLength,h));for(var x=0;x<A.lengths.length;x++)if(A.lengths[x]===b.length)return c=b.length<h||u,a(A,c,u);return a(A,b.length<h,!1)}t.cardNumber=n},"../../node_modules/card-validator/dist/cardholder-name.js":function(i,t){Object.defineProperty(t,"__esModule",{value:!0}),t.cardholderName=void 0;var e=/^[\d\s-]*$/,r=255;function o(n,l){return{isValid:n,isPotentiallyValid:l}}function a(n){return typeof n!="string"?o(!1,!1):n.length===0?o(!1,!0):n.length>r?o(!1,!1):e.test(n)?o(!1,!0):o(!0,!0)}t.cardholderName=a},"../../node_modules/card-validator/dist/cvv.js":function(i,t){Object.defineProperty(t,"__esModule",{value:!0}),t.cvv=void 0;var e=3;function r(l,s){for(var c=0;c<l.length;c++)if(s===l[c])return!0;return!1}function o(l){for(var s=e,c=0;c<l.length;c++)s=l[c]>s?l[c]:s;return s}function a(l,s){return{isValid:l,isPotentiallyValid:s}}function n(l,s){return s===void 0&&(s=e),s=s instanceof Array?s:[s],typeof l!="string"||!/^\d*$/.test(l)?a(!1,!1):r(s,l.length)?a(!0,!0):l.length<Math.min.apply(null,s)?a(!1,!0):l.length>o(s)?a(!1,!1):a(!0,!0)}t.cvv=n},"../../node_modules/card-validator/dist/expiration-date.js":function(i,t,e){var r=this&&this.__assign||function(){return r=Object.assign||function(c){for(var u,h=1,b=arguments.length;h<b;h++){u=arguments[h];for(var E in u)Object.prototype.hasOwnProperty.call(u,E)&&(c[E]=u[E])}return c},r.apply(this,arguments)};Object.defineProperty(t,"__esModule",{value:!0}),t.expirationDate=void 0;var o=e("../../node_modules/card-validator/dist/lib/parse-date.js"),a=e("../../node_modules/card-validator/dist/expiration-month.js"),n=e("../../node_modules/card-validator/dist/expiration-year.js");function l(c,u,h,b){return{isValid:c,isPotentiallyValid:u,month:h,year:b}}function s(c,u){var h;if(typeof c=="string")c=c.replace(/^(\d\d) (\d\d(\d\d)?)$/,"$1/$2"),h=(0,o.parseDate)(String(c));else{if(c===null||typeof c!="object")return l(!1,!1,null,null);var b=r({},c);h={month:String(b.month),year:String(b.year)}}var E=(0,a.expirationMonth)(h.month),A=(0,n.expirationYear)(h.year,u);if(E.isValid){if(A.isCurrentYear){var x=E.isValidForThisYear;return l(x,x,h.month,h.year)}if(A.isValid)return l(!0,!0,h.month,h.year)}return E.isPotentiallyValid&&A.isPotentiallyValid?l(!1,!0,null,null):l(!1,!1,null,null)}t.expirationDate=s},"../../node_modules/card-validator/dist/expiration-month.js":function(i,t){Object.defineProperty(t,"__esModule",{value:!0}),t.expirationMonth=void 0;function e(o,a,n){return{isValid:o,isPotentiallyValid:a,isValidForThisYear:n||!1}}function r(o){var a=new Date().getMonth()+1;if(typeof o!="string")return e(!1,!1);if(o.replace(/\s/g,"")===""||o==="0")return e(!1,!0);if(!/^\d*$/.test(o))return e(!1,!1);var n=parseInt(o,10);if(isNaN(Number(o)))return e(!1,!1);var l=n>0&&n<13;return e(l,l,l&&n>=a)}t.expirationMonth=r},"../../node_modules/card-validator/dist/expiration-year.js":function(i,t){Object.defineProperty(t,"__esModule",{value:!0}),t.expirationYear=void 0;var e=19;function r(a,n,l){return{isValid:a,isPotentiallyValid:n,isCurrentYear:l||!1}}function o(a,n){n===void 0&&(n=e);var l;if(typeof a!="string")return r(!1,!1);if(a.replace(/\s/g,"")==="")return r(!1,!0);if(!/^\d*$/.test(a))return r(!1,!1);var s=a.length;if(s<2)return r(!1,!0);var c=new Date().getFullYear();if(s===3){var u=a.slice(0,2),h=String(c).slice(0,2);return r(!1,u===h)}if(s>4)return r(!1,!1);var b=parseInt(a,10),E=Number(String(c).substr(2,2)),A=!1;if(s===2){if(String(c).substr(0,2)===a)return r(!1,!0);l=E===b,A=b>=E&&b<=E+n}else s===4&&(l=c===b,A=b>=c&&b<=c+n);return r(A,A,l)}t.expirationYear=o},"../../node_modules/card-validator/dist/index.js":function(i,t,e){var r=this&&this.__createBinding||(Object.create?function(x,T,w,N){N===void 0&&(N=w);var V=Object.getOwnPropertyDescriptor(T,w);(!V||("get"in V?!T.__esModule:V.writable||V.configurable))&&(V={enumerable:!0,get:function(){return T[w]}}),Object.defineProperty(x,N,V)}:function(x,T,w,N){N===void 0&&(N=w),x[N]=T[w]}),o=this&&this.__setModuleDefault||(Object.create?function(x,T){Object.defineProperty(x,"default",{enumerable:!0,value:T})}:function(x,T){x.default=T}),a=this&&this.__importStar||function(x){if(x&&x.__esModule)return x;var T={};if(x!=null)for(var w in x)w!=="default"&&Object.prototype.hasOwnProperty.call(x,w)&&r(T,x,w);return o(T,x),T},n=a(e("../../node_modules/credit-card-type/dist/index.js")),l=e("../../node_modules/card-validator/dist/cardholder-name.js"),s=e("../../node_modules/card-validator/dist/card-number.js"),c=e("../../node_modules/card-validator/dist/expiration-date.js"),u=e("../../node_modules/card-validator/dist/expiration-month.js"),h=e("../../node_modules/card-validator/dist/expiration-year.js"),b=e("../../node_modules/card-validator/dist/cvv.js"),E=e("../../node_modules/card-validator/dist/postal-code.js"),A={creditCardType:n,cardholderName:l.cardholderName,number:s.cardNumber,expirationDate:c.expirationDate,expirationMonth:u.expirationMonth,expirationYear:h.expirationYear,cvv:b.cvv,postalCode:E.postalCode};i.exports=A},"../../node_modules/card-validator/dist/lib/is-array.js":function(i,t){Object.defineProperty(t,"__esModule",{value:!0}),t.isArray=void 0,t.isArray=Array.isArray||function(e){return Object.prototype.toString.call(e)==="[object Array]"}},"../../node_modules/card-validator/dist/lib/parse-date.js":function(i,t,e){Object.defineProperty(t,"__esModule",{value:!0}),t.parseDate=void 0;var r=e("../../node_modules/card-validator/dist/expiration-year.js"),o=e("../../node_modules/card-validator/dist/lib/is-array.js");function a(l){var s=Number(l[0]),c;return s===0?2:s>1||s===1&&Number(l[1])>2?1:s===1?(c=l.substr(1),(0,r.expirationYear)(c).isPotentiallyValid?1:2):l.length===5?1:l.length>5?2:1}function n(l){var s;if(/^\d{4}-\d{1,2}$/.test(l)?s=l.split("-").reverse():/\//.test(l)?s=l.split(/\s*\/\s*/g):/\s/.test(l)&&(s=l.split(/ +/g)),(0,o.isArray)(s))return{month:s[0]||"",year:s.slice(1).join()};var c=a(l),u=l.substr(0,c);return{month:u,year:l.substr(u.length)}}t.parseDate=n},"../../node_modules/card-validator/dist/luhn-10.js":function(i){function t(e){for(var r=0,o=!1,a=e.length-1,n;a>=0;)n=parseInt(e.charAt(a),10),o&&(n*=2,n>9&&(n=n%10+1)),o=!o,r+=n,a--;return r%10===0}i.exports=t},"../../node_modules/card-validator/dist/postal-code.js":function(i,t){Object.defineProperty(t,"__esModule",{value:!0}),t.postalCode=void 0;var e=3,r=new RegExp(/^[a-z0-9]+$/i);function o(n,l){return{isValid:n,isPotentiallyValid:l}}function a(n,l){l===void 0&&(l={});var s=l.minLength||e;return typeof n!="string"?o(!1,!1):n.length<s||!r.test(n.trim().slice(0,s))?o(!1,!0):o(!0,!0)}t.postalCode=a},"../../node_modules/credit-card-type/dist/index.js":function(i,t,e){var r=this&&this.__assign||function(){return r=Object.assign||function(w){for(var N,V=1,Ze=arguments.length;V<Ze;V++){N=arguments[V];for(var Dt in N)Object.prototype.hasOwnProperty.call(N,Dt)&&(w[Dt]=N[Dt])}return w},r.apply(this,arguments)},o=e("../../node_modules/credit-card-type/dist/lib/card-types.js"),a=e("../../node_modules/credit-card-type/dist/lib/add-matching-cards-to-results.js"),n=e("../../node_modules/credit-card-type/dist/lib/is-valid-input-type.js"),l=e("../../node_modules/credit-card-type/dist/lib/find-best-match.js"),s=e("../../node_modules/credit-card-type/dist/lib/clone.js"),c={},u={VISA:"visa",MASTERCARD:"mastercard",AMERICAN_EXPRESS:"american-express",DINERS_CLUB:"diners-club",DISCOVER:"discover",JCB:"jcb",UNIONPAY:"unionpay",MAESTRO:"maestro",ELO:"elo",MIR:"mir",HIPER:"hiper",HIPERCARD:"hipercard"},h=[u.VISA,u.MASTERCARD,u.AMERICAN_EXPRESS,u.DINERS_CLUB,u.DISCOVER,u.JCB,u.UNIONPAY,u.MAESTRO,u.ELO,u.MIR,u.HIPER,u.HIPERCARD],b=(0,s.clone)(h);function E(w){return c[w]||o[w]}function A(){return b.map(function(w){return(0,s.clone)(E(w))})}function x(w,N){N===void 0&&(N=!1);var V=b.indexOf(w);if(!N&&V===-1)throw new Error('"'+w+'" is not a supported card type.');return V}function T(w){var N=[];if(!(0,n.isValidInputType)(w))return N;if(w.length===0)return A();b.forEach(function(Ze){var Dt=E(Ze);(0,a.addMatchingCardsToResults)(w,Dt,N)});var V=(0,l.findBestMatch)(N);return V?[V]:N}T.getTypeInfo=function(w){return(0,s.clone)(E(w))},T.removeCard=function(w){var N=x(w);b.splice(N,1)},T.addCard=function(w){var N=x(w.type,!0);c[w.type]=w,N===-1&&b.push(w.type)},T.updateCard=function(w,N){var V=c[w]||o[w];if(!V)throw new Error('"'.concat(w,"\" is not a recognized type. Use `addCard` instead.'"));if(N.type&&V.type!==N.type)throw new Error("Cannot overwrite type parameter.");var Ze=(0,s.clone)(V);Ze=r(r({},Ze),N),c[Ze.type]=Ze},T.changeOrder=function(w,N){var V=x(w);b.splice(V,1),b.splice(N,0,w)},T.resetModifications=function(){b=(0,s.clone)(h),c={}},T.types=u,i.exports=T},"../../node_modules/credit-card-type/dist/lib/add-matching-cards-to-results.js":function(i,t,e){Object.defineProperty(t,"__esModule",{value:!0}),t.addMatchingCardsToResults=void 0;var r=e("../../node_modules/credit-card-type/dist/lib/clone.js"),o=e("../../node_modules/credit-card-type/dist/lib/matches.js");function a(n,l,s){var c,u;for(c=0;c<l.patterns.length;c++){var h=l.patterns[c];if((0,o.matches)(n,h)){var b=(0,r.clone)(l);u=Array.isArray(h)?String(h[0]).length:String(h).length,n.length>=u&&(b.matchStrength=u),s.push(b);break}}}t.addMatchingCardsToResults=a},"../../node_modules/credit-card-type/dist/lib/card-types.js":function(i){var t={visa:{niceType:"Visa",type:"visa",patterns:[4],gaps:[4,8,12],lengths:[16,18,19],code:{name:"CVV",size:3}},mastercard:{niceType:"Mastercard",type:"mastercard",patterns:[[51,55],[2221,2229],[223,229],[23,26],[270,271],2720],gaps:[4,8,12],lengths:[16],code:{name:"CVC",size:3}},"american-express":{niceType:"American Express",type:"american-express",patterns:[34,37],gaps:[4,10],lengths:[15],code:{name:"CID",size:4}},"diners-club":{niceType:"Diners Club",type:"diners-club",patterns:[[300,305],36,38,39],gaps:[4,10],lengths:[14,16,19],code:{name:"CVV",size:3}},discover:{niceType:"Discover",type:"discover",patterns:[6011,[644,649],65],gaps:[4,8,12],lengths:[16,19],code:{name:"CID",size:3}},jcb:{niceType:"JCB",type:"jcb",patterns:[2131,1800,[3528,3589]],gaps:[4,8,12],lengths:[16,17,18,19],code:{name:"CVV",size:3}},unionpay:{niceType:"UnionPay",type:"unionpay",patterns:[620,[62100,62182],[62184,62187],[62185,62197],[62200,62205],[622010,622999],622018,[62207,62209],[623,626],6270,6272,6276,[627700,627779],[627781,627799],[6282,6289],6291,6292,810,[8110,8131],[8132,8151],[8152,8163],[8164,8171]],gaps:[4,8,12],lengths:[14,15,16,17,18,19],code:{name:"CVN",size:3}},maestro:{niceType:"Maestro",type:"maestro",patterns:[493698,[5e5,504174],[504176,506698],[506779,508999],[56,59],63,67,6],gaps:[4,8,12],lengths:[12,13,14,15,16,17,18,19],code:{name:"CVC",size:3}},elo:{niceType:"Elo",type:"elo",patterns:[401178,401179,438935,457631,457632,431274,451416,457393,504175,[506699,506778],[509e3,509999],627780,636297,636368,[650031,650033],[650035,650051],[650405,650439],[650485,650538],[650541,650598],[650700,650718],[650720,650727],[650901,650978],[651652,651679],[655e3,655019],[655021,655058]],gaps:[4,8,12],lengths:[16],code:{name:"CVE",size:3}},mir:{niceType:"Mir",type:"mir",patterns:[[2200,2204]],gaps:[4,8,12],lengths:[16,17,18,19],code:{name:"CVP2",size:3}},hiper:{niceType:"Hiper",type:"hiper",patterns:[637095,63737423,63743358,637568,637599,637609,637612],gaps:[4,8,12],lengths:[16],code:{name:"CVC",size:3}},hipercard:{niceType:"Hipercard",type:"hipercard",patterns:[606282],gaps:[4,8,12],lengths:[16],code:{name:"CVC",size:3}}};i.exports=t},"../../node_modules/credit-card-type/dist/lib/clone.js":function(i,t){Object.defineProperty(t,"__esModule",{value:!0}),t.clone=void 0;function e(r){return r?JSON.parse(JSON.stringify(r)):null}t.clone=e},"../../node_modules/credit-card-type/dist/lib/find-best-match.js":function(i,t){Object.defineProperty(t,"__esModule",{value:!0}),t.findBestMatch=void 0;function e(o){var a=o.filter(function(n){return n.matchStrength}).length;return a>0&&a===o.length}function r(o){return e(o)?o.reduce(function(a,n){return!a||Number(a.matchStrength)<Number(n.matchStrength)?n:a}):null}t.findBestMatch=r},"../../node_modules/credit-card-type/dist/lib/is-valid-input-type.js":function(i,t){Object.defineProperty(t,"__esModule",{value:!0}),t.isValidInputType=void 0;function e(r){return typeof r=="string"||r instanceof String}t.isValidInputType=e},"../../node_modules/credit-card-type/dist/lib/matches.js":function(i,t){Object.defineProperty(t,"__esModule",{value:!0}),t.matches=void 0;function e(a,n,l){var s=String(n).length,c=a.substr(0,s),u=parseInt(c,10);return n=parseInt(String(n).substr(0,c.length),10),l=parseInt(String(l).substr(0,c.length),10),u>=n&&u<=l}function r(a,n){return n=String(n),n.substring(0,a.length)===a.substring(0,n.length)}function o(a,n){return Array.isArray(n)?e(a,n[0],n[1]):r(a,n)}t.matches=o}},sa={};function Ji(i){var t=sa[i];if(t!==void 0)return t.exports;var e=sa[i]={exports:{}};return Xs[i].call(e.exports,e,e.exports,Ji),e.exports}var ge=()=>Pa.randomUUID?.()||Qs(),Qs=()=>"10000000-1000-4000-8000-100000000000".replace(/[018]/g,i=>(i^el()>>i/4).toString(16)),el=()=>(Pa.getRandomValues?.(new Uint8Array(1))[0]??16*Math.random())&15,Pa=typeof crypto<"u"?crypto:{},Y=class Y{static log(t,...e){Y.enabled}static info(t,...e){Y.enabled}static warn(t,...e){Y.enabled}static error(t,...e){Y.enabled&&e.forEach(r=>{r instanceof Error&&r.toJSON})}static debug(t,...e){Y.enabled}static table(t,e){Y.enabled}static time(t){Y.enabled}static timeEnd(t){Y.enabled}};I(Y,"enabled",!0),I(Y,"defaultFont","font-family: Consolas, monospace; font-size: 12px;"),I(Y,"brandTag","[PRIMER]"),I(Y,"brandStyle",`background: #24292e; color: #ffffff; padding: 2px 6px; border-radius: 3px; font-weight: bold; margin-right: 4px; ${Y.defaultFont}`),I(Y,"styles",{log:`color: #4CAF50; ${Y.defaultFont}`,info:`color: #2196F3; ${Y.defaultFont}`,warn:`color: #FF9800; ${Y.defaultFont}`,error:`color: #F44336; ${Y.defaultFont}`,debug:`color: #9C27B0; ${Y.defaultFont}`});var O=Y,tl={LOCAL:"",DEV:"https://analytics.dev.data.primer.io/v1/sdk-analytic-events",STAGING:"https://analytics.staging.data.primer.io/v1/sdk-analytic-events",SANDBOX:"https://analytics.sandbox.data.primer.io/v1/sdk-analytic-events",PRODUCTION:"https://analytics.production.data.primer.io/v1/sdk-analytic-events"},Vi=class{constructor(){I(this,"sessionConfig",null)}initialize(t){this.sessionConfig=t}clear(){this.sessionConfig=null}getSessionConfig(){return this.sessionConfig}sendEvent(t){if(!this.sessionConfig)return void O.error("Analytics manager not initialized. Call initializeAnalytics() first.");let e={id:ge(),timestamp:Math.floor(Date.now()/1e3),sdkType:"WEB",eventName:t.eventName,checkoutSessionId:this.sessionConfig.checkoutSessionId,clientSessionId:this.sessionConfig.clientSessionId,primerAccountId:this.sessionConfig.primerAccountId,sdkVersion:this.sessionConfig.sdkVersion,userAgent:typeof navigator<"u"?navigator.userAgent:"",eventType:t.eventType,userLocale:t.userLocale,paymentMethod:t.paymentMethod,paymentId:t.paymentId,redirectDestinationUrl:t.redirectDestinationUrl,threedsProvider:t.threedsProvider,threedsResponse:t.threedsResponse};il(e,this.sessionConfig)}},Ta=new Vi;function rl(i){Ta.initialize(i)}function Wr(i){Ta.sendEvent(i)}async function il(i,{environment:t,clientSessionToken:e}){if(t==="LOCAL")return void O.debug(`Analytics event ${i.eventName}:`,i);let r=tl[t];return fetch(r,{method:"POST",headers:{"Content-Type":"application/json",...e&&{Authorization:`Bearer ${e}`}},body:JSON.stringify(i)}).catch(o=>{O.error("Failed to send analytics event:",o)})}var Oi=function(i){return i.CARD="CARD",i.NATIVE="NATIVE",i.REDIRECT="REDIRECT",i.KLARNA="KLARNA",i.ACH="ACH",i}({}),la=Ji("../../node_modules/credit-card-type/dist/index.js");function Zi(i){return i.replace(/[-_]/g," ").replace(/[^\s\w]/g,"").replace(/([A-Z][a-z]+|[0-9]+)/g," $1").replace(/([A-Z]{2,})/g," $1").trim().split(/\s+/g)}function ol(i){return Zi(i).filter(Boolean).map(t=>t[0].toUpperCase()+t.slice(1).toLowerCase()).join(" ")}function da(i){return Zi(i).join("-").toLowerCase()}function ca(i){return Zi(i).join("_").toUpperCase()}var wa=[["AMEX","american-express"],["CARTES_BANCAIRES"],["DANKORT"],["DINERS_CLUB","diners-club"],["DISCOVER","discover"],["ENROUTE"],["ELO","elo"],["EFTPOS"],["HIPER","hiper","hiper-pay"],["HIPERCARD","hipercard"],["INTERAC"],["JCB","jcb"],["MAESTRO","maestro"],["MASTERCARD","mastercard"],["MIR","mir","mir-pay"],["OTHER",void 0,"payment-card"],["UNIONPAY","unionpay"],["VISA","visa"]],pa=new Map(wa.map(i=>[i[0],i])),al=new Map(wa.filter(i=>i[1]).map(i=>[i[1],i]));function Xi(i){let{niceType:t,type:e}=(0,la.getTypeInfo)(da(i))||(0,la.getTypeInfo)(pa.get(ca(i))?.[1]||"")||{},[r,o,a]=al.get(e)||pa.get(ca(i))||[];return{asset:a||da(o||i),backend:r,display:t||ol(i),library:o}}var J={WORLDPAY_IDEAL:"WORLDPAY_IDEAL",STRIPE_ACH:"STRIPE_ACH",STRIPE_IDEAL:"STRIPE_IDEAL",ADYEN_KLARNA:"ADYEN_KLARNA",ADYEN_BANCONTACT_CARD:"ADYEN_BANCONTACT_CARD",PAY_NL_KAARTDIRECT:"PAY_NL_KAARTDIRECT",ADYEN_EPS:"ADYEN_EPS",ADYEN_BANCONTACT_PAYCONIQ:"ADYEN_BANCONTACT_PAYCONIQ",OMISE_PROMPTPAY:"OMISE_PROMPTPAY",OMISE_TRUEMONEY:"OMISE_TRUEMONEY",ADYEN_MULTIBANCO:"ADYEN_MULTIBANCO",PACYPAY_WECHAT:"PACYPAY_WECHAT",PACYPAY_ALIPAY:"PACYPAY_ALIPAY",ADYEN_MBWAY:"ADYEN_MBWAY",XENDIT_DANA:"XENDIT_DANA",XENDIT_SHOPEEPAY:"XENDIT_SHOPEEPAY",ADYEN_PAYSHOP:"ADYEN_PAYSHOP",ADYEN_PAYTRAIL:"ADYEN_PAYTRAIL",CLEARPAY:"CLEARPAY",RAPYD_FAST:"RAPYD_FAST",RAPYD_PROMPTPAY:"RAPYD_PROMPTPAY",RAPYD_GCASH:"RAPYD_GCASH",RAPYD_POLI:"RAPYD_POLI",RAPYD_GRABPAY:"RAPYD_GRABPAY",PRIMER_PAYPAL:"PRIMER_PAYPAL",TWOC2P:"TWOC2P",NETS:"NETS",STRIPE_GIROPAY:"STRIPE_GIROPAY",MOLLIE_GIROPAY:"MOLLIE_GIROPAY",MOLLIE_EPS:"MOLLIE_EPS",PAY_NL_EPS:"PAY_NL_EPS",PAY_NL_P24:"PAY_NL_P24",MOLLIE_P24:"MOLLIE_P24",MOLLIE_SOFORT:"MOLLIE_SOFORT",COINBASE:"COINBASE",OPENNODE:"OPENNODE",MOLLIE_GIFT_CARD:"MOLLIE_GIFTCARD",XFERS_PAYNOW:"XFERS_PAYNOW",PAYMENT_CARD:"PAYMENT_CARD",APPLE_PAY:"APPLE_PAY",GOOGLE_PAY:"GOOGLE_PAY",PAYPAL:"PAYPAL",GO_CARDLESS:"GOCARDLESS",KLARNA:"KLARNA",PAY_NL_IDEAL:"PAY_NL_IDEAL",PAY_NL_SOFORT_BANKING:"PAY_NL_SOFORT_BANKING",PAY_NL_BANCONTACT:"PAY_NL_BANCONTACT",PAY_NL_PAYPAL:"PAY_NL_PAYPAL",PAY_NL_CREDIT_TRANSFER:"PAY_NL_CREDIT_TRANSFER",PAY_NL_DIRECT_DEBIT:"PAY_NL_DIRECT_DEBIT",PAY_NL_GIROPAY:"PAY_NL_GIROPAY",PAY_NL_PAYCONIQ:"PAY_NL_PAYCONIQ",PAY_NL_RIVERTY:"PAY_NL_RIVERTY",HOOLAH:"HOOLAH",ADYEN_BLIK:"ADYEN_BLIK",ADYEN_MOBILEPAY:"ADYEN_MOBILEPAY",ADYEN_VIPPS:"ADYEN_VIPPS",ADYEN_GIROPAY:"ADYEN_GIROPAY",ADYEN_SOFORT:"ADYEN_SOFORT",ADYEN_IDEAL:"ADYEN_IDEAL",ADYEN_TRUSTLY:"ADYEN_TRUSTLY",ADYEN_ALIPAY:"ADYEN_ALIPAY",ADYEN_TWINT:"ADYEN_TWINT",ADYEN_BANK_TRANSFER:"ADYEN_BANK_TRANSFER",MOLLIE_BANCONTACT:"MOLLIE_BANCONTACT",MOLLIE_IDEAL:"MOLLIE_IDEAL",BUCKAROO_GIROPAY:"BUCKAROO_GIROPAY",BUCKAROO_EPS:"BUCKAROO_EPS",BUCKAROO_SOFORT:"BUCKAROO_SOFORT",BUCKAROO_BANCONTACT:"BUCKAROO_BANCONTACT",BUCKAROO_IDEAL:"BUCKAROO_IDEAL",ATOME:"ATOME",DLOCAL_PIX:"DLOCAL_PIX",ALMA:"ALMA"},Ma="3.7.7",nl=Ma,Nt=typeof Buffer=="function",ma=typeof TextDecoder=="function"?new TextDecoder:void 0,ua=typeof TextEncoder=="function"?new TextEncoder:void 0,sl="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",Qt=Array.prototype.slice.call(sl),Vr=(i=>{let t={};return i.forEach((e,r)=>t[e]=r),t})(Qt),ll=/^(?:[A-Za-z\d+\/]{4})*?(?:[A-Za-z\d+\/]{2}(?:==)?|[A-Za-z\d+\/]{3}=?)?$/,q=String.fromCharCode.bind(String),ha=typeof Uint8Array.from=="function"?Uint8Array.from.bind(Uint8Array):i=>new Uint8Array(Array.prototype.slice.call(i,0)),Ia=i=>i.replace(/=/g,"").replace(/[+\/]/g,t=>t=="+"?"-":"_"),ka=i=>i.replace(/[^A-Za-z0-9\+\/]/g,""),Na=i=>{let t,e,r,o,a="",n=i.length%3;for(let l=0;l<i.length;){if((e=i.charCodeAt(l++))>255||(r=i.charCodeAt(l++))>255||(o=i.charCodeAt(l++))>255)throw new TypeError("invalid character found");t=e<<16|r<<8|o,a+=Qt[t>>18&63]+Qt[t>>12&63]+Qt[t>>6&63]+Qt[63&t]}return n?a.slice(0,n-3)+"===".substring(n):a},Qi=typeof btoa=="function"?i=>btoa(i):Nt?i=>Buffer.from(i,"binary").toString("base64"):Na,Ui=Nt?i=>Buffer.from(i).toString("base64"):i=>{let e=[];for(let r=0,o=i.length;r<o;r+=4096)e.push(q.apply(null,i.subarray(r,r+4096)));return Qi(e.join(""))},Hr=(i,t=!1)=>t?Ia(Ui(i)):Ui(i),dl=i=>{if(i.length<2){var t=i.charCodeAt(0);return t<128?i:t<2048?q(192|t>>>6)+q(128|63&t):q(224|t>>>12&15)+q(128|t>>>6&63)+q(128|63&t)}var t=65536+(i.charCodeAt(0)-55296)*1024+(i.charCodeAt(1)-56320);return q(240|t>>>18&7)+q(128|t>>>12&63)+q(128|t>>>6&63)+q(128|63&t)},cl=/[\uD800-\uDBFF][\uDC00-\uDFFFF]|[^\x00-\x7F]/g,La=i=>i.replace(cl,dl),fa=Nt?i=>Buffer.from(i,"utf8").toString("base64"):ua?i=>Ui(ua.encode(i)):i=>Qi(La(i)),It=(i,t=!1)=>t?Ia(fa(i)):fa(i),ya=i=>It(i,!0),pl=/[\xC0-\xDF][\x80-\xBF]|[\xE0-\xEF][\x80-\xBF]{2}|[\xF0-\xF7][\x80-\xBF]{3}/g,ml=i=>{switch(i.length){case 4:var t=(7&i.charCodeAt(0))<<18|(63&i.charCodeAt(1))<<12|(63&i.charCodeAt(2))<<6|63&i.charCodeAt(3),e=t-65536;return q((e>>>10)+55296)+q((1023&e)+56320);case 3:return q((15&i.charCodeAt(0))<<12|(63&i.charCodeAt(1))<<6|63&i.charCodeAt(2));default:return q((31&i.charCodeAt(0))<<6|63&i.charCodeAt(1))}},Ra=i=>i.replace(pl,ml),Oa=i=>{if(i=i.replace(/\s+/g,""),!ll.test(i))throw new TypeError("malformed base64.");i+="==".slice(2-(3&i.length));let t,e="",r,o;for(let a=0;a<i.length;)t=Vr[i.charAt(a++)]<<18|Vr[i.charAt(a++)]<<12|(r=Vr[i.charAt(a++)])<<6|(o=Vr[i.charAt(a++)]),e+=r===64?q(t>>16&255):o===64?q(t>>16&255,t>>8&255):q(t>>16&255,t>>8&255,255&t);return e},eo=typeof atob=="function"?i=>atob(ka(i)):Nt?i=>Buffer.from(i,"base64").toString("binary"):Oa,Da=Nt?i=>ha(Buffer.from(i,"base64")):i=>ha(eo(i).split("").map(t=>t.charCodeAt(0))),$a=i=>Da(Va(i)),ul=Nt?i=>Buffer.from(i,"base64").toString("utf8"):ma?i=>ma.decode(Da(i)):i=>Ra(eo(i)),Va=i=>ka(i.replace(/[-_]/g,t=>t=="-"?"+":"/")),Yi=i=>ul(Va(i)),hl=i=>{if(typeof i!="string")return!1;let t=i.replace(/\s+/g,"").replace(/={0,2}$/,"");return!/[^\s0-9a-zA-Z\+/]/.test(t)||!/[^\s0-9a-zA-Z\-_]/.test(t)},Ua=i=>({value:i,enumerable:!1,writable:!0,configurable:!0}),Ya=function(){let i=(t,e)=>Object.defineProperty(String.prototype,t,Ua(e));i("fromBase64",function(){return Yi(this)}),i("toBase64",function(t){return It(this,t)}),i("toBase64URI",function(){return It(this,!0)}),i("toBase64URL",function(){return It(this,!0)}),i("toUint8Array",function(){return $a(this)})},Ha=function(){let i=(t,e)=>Object.defineProperty(Uint8Array.prototype,t,Ua(e));i("toBase64",function(t){return Hr(this,t)}),i("toBase64URI",function(){return Hr(this,!0)}),i("toBase64URL",function(){return Hr(this,!0)})},fl=()=>{Ya(),Ha()},Ba={version:Ma,VERSION:nl,atob:eo,atobPolyfill:Oa,btoa:Qi,btoaPolyfill:Na,fromBase64:Yi,toBase64:It,encode:It,encodeURI:ya,encodeURL:ya,utob:La,btou:Ra,decode:Yi,isValid:hl,fromUint8Array:Hr,toUint8Array:$a,extendString:Ya,extendUint8Array:Ha,extendBuiltins:fl},Br={encode:yl,decode:Ba.decode};function yl(i,t={}){let{urlSafe:e=!1}=t;return Ba.encode(i,e)}function gl(i,t){return!(i.intent!==`${t}_REDIRECTION`||!("statusUrl"in i)||!("redirectUrl"in i)||!i.redirectUrl||!i.statusUrl)}function er(i){let t=Cl(i),e=1e3*t.exp;if(Date.now()>e)throw new Error(`${vl}. Expiration date: ${new Date(e).toISOString()}`);return t}var za="The provided `clientToken`",vl=`${za} has expired`,bl=`${za} is malformed`;function Cl(i){try{let[t,e]=i.split("."),r=e||t;return JSON.parse(Br.decode(r))}catch{throw new Error(bl)}}var zr=class{constructor(t,e){I(this,"context");I(this,"dialogProvider");this.context=t,this.dialogProvider=e}};function Fa(){return{javaEnabled:typeof window.navigator.javaEnabled=="function"?window.navigator.javaEnabled():!1,language:window.navigator.language,colorDepth:window.screen.colorDepth,screenHeight:window.screen.height,screenWidth:window.screen.width,timezoneOffset:new Date().getTimezoneOffset(),userAgent:window.navigator.userAgent}}function Jr(i){return i?new Promise(t=>{setTimeout(t,i)}):Promise.resolve()}var Hi=class extends zr{async handleRequiredAction(t){let e=t.requiredAction?.clientToken;if(!e)throw new Error("No client token provided");let r=er(e);if(!("intent"in r)||r.intent!=="3DS_AUTHENTICATION")throw new Error("Invalid client token");let{error:o,data:a}=await this.context.pciApi.post3dsAuth(r.tokenId,{device:Fa()});if(o||!a||!a.authentication)throw o??new Error("Unable to authenticate");let n=a.authentication,l=a;n.responseCode==="METHOD"&&(l=await this.handleMethod(r.tokenId,n),n=l.authentication),n.responseCode==="CHALLENGE"&&(l=await this.handleChallenge(r.tokenId,n));let s=await this.context.pciApi.postResumePayment(t.id,l.resumeToken);if(s.error||!s.data)throw s.error??new Error("Unable to resume payment");return s.data}async handleMethod(t,e){let r="primer-3ds-method-box",o="primer-3ds-method-iframe",a="primer-3ds-method-form",n="threeDSMethodData",l=document.createElement("div");l.id=r,l.style.position="absolute",l.style.width="2px",l.style.height="2px",l.style.left="-10000px";let s=document.createElement("iframe");s.style.display="none",s.id=o,s.name=o,l.appendChild(s);let c=document.createElement("form"),u=document.createElement("input");u.type="hidden",u.id=n,u.name=n,u.value=Br.encode(JSON.stringify({threeDSServerTransID:e.transactionId,threeDSMethodNotificationURL:e.notificationUrl}),{urlSafe:!0}).replace(/=+$/g,""),c.appendChild(u),c.id=a,c.name=a,c.action=e.acsMethodUrl,c.target=o,c.method="post",l.appendChild(c),document.body.appendChild(l),c.submit();let{data:h,error:b}=await this.pollStatus(e.statusUrl,"METHOD",1e3).promise;return l.remove(),b||!h?this.continueAuth(t):h}pollStatus(t,e="METHOD",r=1e3,o=66e4){let a=!0;return{promise:new Promise(async n=>{let l=setTimeout(()=>{a=!1,n({error:new Error("Operation timed out"),data:null})},o);try{for(;a;){let s=await this.context.pciApi.get3dsResumeStatus(t);if(s.error){clearTimeout(l),n(s);return}if(await Jr(r),s.data&&s.data.authentication.responseCode!==e){clearTimeout(l),n(s);return}}}catch(s){clearTimeout(l),n({error:s,data:null})}}),abort:()=>{a=!1}}}async continueAuth(t){let{data:e,error:r}=await this.context.pciApi.post3dsContinue(t);return r||!e?{resumeToken:ge(),authentication:{responseCode:"SKIPPED",skippedReasonCode:"NEGOTIATION_ERROR",skippedReasonText:"Failed to negotiate with 3DS server"}}:e}async handleChallenge(t,e){let{container:r,formId:o}=this.createChallengeElements(e),a=()=>{let l=document.getElementById(o);l?l.submit():requestAnimationFrame(()=>{let s=document.getElementById(o);s&&s.submit()})},n=this.pollStatus(e.statusUrl,"CHALLENGE",2500,66e4);try{let l=this.dialogProvider.show({htmlContent:r.outerHTML,onContentReady:a});Wr({eventName:"PAYMENT_THREEDS",threedsResponse:JSON.stringify(e)});let s=await Promise.race([n.promise,l.then(()=>null,c=>{throw n.abort(),c})]);return s&&s.data?(this.dialogProvider.close(),s.data):(this.dialogProvider.close(),this.continueAuth(t))}catch{return n.abort(),this.continueAuth(t)}}createChallengeElements(t){this.inject3DSChallengeCSS();let e=`3ds-challenge-iframe-${ge()}`,r=`3ds-challenge-form-${ge()}`,o=/^1/.test(t.protocolVersion),a=document.createElement("div");a.className="challenge-container";let n=document.createElement("form");if(n.id=r,n.className="challenge-form",n.action=t.acsChallengeUrl,n.target=e,n.method="post",o){let s=document.createElement("input");s.type="hidden",s.name="PaReq",s.id="PaReq",s.value=t.acsChallengeData||"",n.appendChild(s);let c=document.createElement("input");c.type="hidden",c.name="TermUrl",c.id="TermUrl",c.value=t.notificationUrl||"",n.appendChild(c)}else{let s=Br.encode(JSON.stringify({threeDSServerTransID:t.transactionId,acsTransID:t.acsTransactionId,messageVersion:t.protocolVersion,messageType:"CReq",challengeWindowSize:"05"}),{urlSafe:!0}),c=document.createElement("input");c.type="hidden",c.name="creq",c.id="creq",c.value=s,n.appendChild(c);let u=document.createElement("input");u.type="hidden",u.name="threeDSSessionData",u.id="threeDSSessionData",u.value="",n.appendChild(u)}let l=document.createElement("iframe");return l.id=e,l.name=e,l.className="challenge-iframe",l.setAttribute("frameborder","0"),l.title="3D Secure Challenge",a.appendChild(n),a.appendChild(l),{container:a,formId:r}}inject3DSChallengeCSS(){let t="primer-3ds-challenge-dialog-styles";if(document.getElementById(t))return;let e=`
|
|
3
|
+
\f\r"'\`<>=]|("|')|))|$)`,"g"),Wo=/'/g,Jo=/"/g,Qo=/^(?:script|style|textarea|title)$/i,Ri=i=>(t,...e)=>({_$litType$:i,strings:t,values:e}),m=Ri(1),Me=Ri(2),Tm=Ri(3),Ee=Symbol.for("lit-noChange"),f=Symbol.for("lit-nothing"),Zo=new WeakMap,vt=bt.createTreeWalker(bt,129);function ea(i,t){if(!Li(i)||!i.hasOwnProperty("raw"))throw Error("invalid template strings array");return Ko!==void 0?Ko.createHTML(t):t}var ta=(i,t)=>{let e=i.length-1,r=[],o,a=t===2?"<svg>":t===3?"<math>":"",n=Gt;for(let l=0;l<e;l++){let s=i[l],c,u,h=-1,b=0;for(;b<s.length&&(n.lastIndex=b,u=n.exec(s),u!==null);)b=n.lastIndex,n===Gt?u[1]==="!--"?n=Go:u[1]!==void 0?n=qo:u[2]!==void 0?(Qo.test(u[2])&&(o=RegExp("</"+u[2],"g")),n=gt):u[3]!==void 0&&(n=gt):n===gt?u[0]===">"?(n=o??Gt,h=-1):u[1]===void 0?h=-2:(h=n.lastIndex-u[2].length,c=u[1],n=u[3]===void 0?gt:u[3]==='"'?Jo:Wo):n===Jo||n===Wo?n=gt:n===Go||n===qo?n=Gt:(n=gt,o=void 0);let E=n===gt&&i[l+1].startsWith("/>")?" ":"";a+=n===Gt?s+js:h>=0?(r.push(c),s.slice(0,h)+ki+s.slice(h)+Ye+E):s+Ye+(h===-2?l:E)}return[ea(i,a+(i[e]||"<?>")+(t===2?"</svg>":t===3?"</math>":"")),r]},Zt=class i{constructor({strings:t,_$litType$:e},r){let o;this.parts=[];let a=0,n=0,l=t.length-1,s=this.parts,[c,u]=ta(t,e);if(this.el=i.createElement(c,r),vt.currentNode=this.el.content,e===2||e===3){let h=this.el.content.firstChild;h.replaceWith(...h.childNodes)}for(;(o=vt.nextNode())!==null&&s.length<l;){if(o.nodeType===1){if(o.hasAttributes())for(let h of o.getAttributeNames())if(h.endsWith(ki)){let b=u[n++],E=o.getAttribute(h).split(Ye),x=/([.?@])?(.*)/.exec(b);s.push({type:1,index:a,name:x[2],strings:E,ctor:x[1]==="."?kr:x[1]==="?"?Nr:x[1]==="@"?Lr:Et}),o.removeAttribute(h)}else h.startsWith(Ye)&&(s.push({type:6,index:a}),o.removeAttribute(h));if(Qo.test(o.tagName)){let h=o.textContent.split(Ye),b=h.length-1;if(b>0){o.textContent=Mr?Mr.emptyScript:"";for(let E=0;E<b;E++)o.append(h[E],Wt()),vt.nextNode(),s.push({type:2,index:++a});o.append(h[b],Wt())}}}else if(o.nodeType===8)if(o.data===Ni)s.push({type:2,index:a});else{let h=-1;for(;(h=o.data.indexOf(Ye,h+1))!==-1;)s.push({type:7,index:a}),h+=Ye.length-1}a++}}static createElement(t,e){let r=bt.createElement("template");return r.innerHTML=t,r}};function Ct(i,t,e=i,r){if(t===Ee)return t;let o=r!==void 0?e._$Co?.[r]:e._$Cl,a=Jt(t)?void 0:t._$litDirective$;return o?.constructor!==a&&(o?._$AO?.(!1),a===void 0?o=void 0:(o=new a(i),o._$AT(i,e,r)),r!==void 0?(e._$Co??(e._$Co=[]))[r]=o:e._$Cl=o),o!==void 0&&(t=Ct(i,o._$AS(i,t.values),o,r)),t}var Ir=class{constructor(t,e){this._$AV=[],this._$AN=void 0,this._$AD=t,this._$AM=e}get parentNode(){return this._$AM.parentNode}get _$AU(){return this._$AM._$AU}u(t){let{el:{content:e},parts:r}=this._$AD,o=(t?.creationScope??bt).importNode(e,!0);vt.currentNode=o;let a=vt.nextNode(),n=0,l=0,s=r[0];for(;s!==void 0;){if(n===s.index){let c;s.type===2?c=new Mt(a,a.nextSibling,this,t):s.type===1?c=new s.ctor(a,s.name,s.strings,this,t):s.type===6&&(c=new Rr(a,this,t)),this._$AV.push(c),s=r[++l]}n!==s?.index&&(a=vt.nextNode(),n++)}return vt.currentNode=bt,o}p(t){let e=0;for(let r of this._$AV)r!==void 0&&(r.strings!==void 0?(r._$AI(t,r,e),e+=r.strings.length-2):r._$AI(t[e])),e++}},Mt=class i{get _$AU(){return this._$AM?._$AU??this._$Cv}constructor(t,e,r,o){this.type=2,this._$AH=f,this._$AN=void 0,this._$AA=t,this._$AB=e,this._$AM=r,this.options=o,this._$Cv=o?.isConnected??!0}get parentNode(){let t=this._$AA.parentNode,e=this._$AM;return e!==void 0&&t?.nodeType===11&&(t=e.parentNode),t}get startNode(){return this._$AA}get endNode(){return this._$AB}_$AI(t,e=this){t=Ct(this,t,e),Jt(t)?t===f||t==null||t===""?(this._$AH!==f&&this._$AR(),this._$AH=f):t!==this._$AH&&t!==Ee&&this._(t):t._$litType$!==void 0?this.$(t):t.nodeType!==void 0?this.T(t):Xo(t)?this.k(t):this._(t)}O(t){return this._$AA.parentNode.insertBefore(t,this._$AB)}T(t){this._$AH!==t&&(this._$AR(),this._$AH=this.O(t))}_(t){this._$AH!==f&&Jt(this._$AH)?this._$AA.nextSibling.data=t:this.T(bt.createTextNode(t)),this._$AH=t}$(t){let{values:e,_$litType$:r}=t,o=typeof r=="number"?this._$AC(t):(r.el===void 0&&(r.el=Zt.createElement(ea(r.h,r.h[0]),this.options)),r);if(this._$AH?._$AD===o)this._$AH.p(e);else{let a=new Ir(o,this),n=a.u(this.options);a.p(e),this.T(n),this._$AH=a}}_$AC(t){let e=Zo.get(t.strings);return e===void 0&&Zo.set(t.strings,e=new Zt(t)),e}k(t){Li(this._$AH)||(this._$AH=[],this._$AR());let e=this._$AH,r,o=0;for(let a of t)o===e.length?e.push(r=new i(this.O(Wt()),this.O(Wt()),this,this.options)):r=e[o],r._$AI(a),o++;o<e.length&&(this._$AR(r&&r._$AB.nextSibling,o),e.length=o)}_$AR(t=this._$AA.nextSibling,e){for(this._$AP?.(!1,!0,e);t&&t!==this._$AB;){let r=t.nextSibling;t.remove(),t=r}}setConnected(t){this._$AM===void 0&&(this._$Cv=t,this._$AP?.(t))}},Et=class{get tagName(){return this.element.tagName}get _$AU(){return this._$AM._$AU}constructor(t,e,r,o,a){this.type=1,this._$AH=f,this._$AN=void 0,this.element=t,this.name=e,this._$AM=o,this.options=a,r.length>2||r[0]!==""||r[1]!==""?(this._$AH=Array(r.length-1).fill(new String),this.strings=r):this._$AH=f}_$AI(t,e=this,r,o){let a=this.strings,n=!1;if(a===void 0)t=Ct(this,t,e,0),n=!Jt(t)||t!==this._$AH&&t!==Ee,n&&(this._$AH=t);else{let l=t,s,c;for(t=a[0],s=0;s<a.length-1;s++)c=Ct(this,l[r+s],e,s),c===Ee&&(c=this._$AH[s]),n||(n=!Jt(c)||c!==this._$AH[s]),c===f?t=f:t!==f&&(t+=(c??"")+a[s+1]),this._$AH[s]=c}n&&!o&&this.j(t)}j(t){t===f?this.element.removeAttribute(this.name):this.element.setAttribute(this.name,t??"")}},kr=class extends Et{constructor(){super(...arguments),this.type=3}j(t){this.element[this.name]=t===f?void 0:t}},Nr=class extends Et{constructor(){super(...arguments),this.type=4}j(t){this.element.toggleAttribute(this.name,!!t&&t!==f)}},Lr=class extends Et{constructor(t,e,r,o,a){super(t,e,r,o,a),this.type=5}_$AI(t,e=this){if((t=Ct(this,t,e,0)??f)===Ee)return;let r=this._$AH,o=t===f&&r!==f||t.capture!==r.capture||t.once!==r.once||t.passive!==r.passive,a=t!==f&&(r===f||o);o&&this.element.removeEventListener(this.name,this,r),a&&this.element.addEventListener(this.name,this,t),this._$AH=t}handleEvent(t){typeof this._$AH=="function"?this._$AH.call(this.options?.host??this.element,t):this._$AH.handleEvent(t)}},Rr=class{constructor(t,e,r){this.element=t,this.type=6,this._$AN=void 0,this._$AM=e,this.options=r}get _$AU(){return this._$AM._$AU}_$AI(t){Ct(this,t)}},ra={M:ki,P:Ye,A:Ni,C:1,L:ta,R:Ir,D:Xo,V:Ct,I:Mt,H:Et,N:Nr,U:Lr,B:kr,F:Rr},Ks=qt.litHtmlPolyfillSupport;Ks?.(Zt,Mt),(qt.litHtmlVersions??(qt.litHtmlVersions=[])).push("3.3.0");var ia=(i,t,e)=>{let r=e?.renderBefore??t,o=r._$litPart$;if(o===void 0){let a=e?.renderBefore??null;r._$litPart$=o=new Mt(t.insertBefore(Wt(),a),a,void 0,e??{})}return o._$AI(i),o};var Xt=globalThis,g=class extends Ue{constructor(){super(...arguments),this.renderOptions={host:this},this._$Do=void 0}createRenderRoot(){var e;let t=super.createRenderRoot();return(e=this.renderOptions).renderBefore??(e.renderBefore=t.firstChild),t}update(t){let e=this.render();this.hasUpdated||(this.renderOptions.isConnected=this.isConnected),super.update(t),this._$Do=ia(e,this.renderRoot,this.renderOptions)}connectedCallback(){super.connectedCallback(),this._$Do?.setConnected(!0)}disconnectedCallback(){super.disconnectedCallback(),this._$Do?.setConnected(!1)}render(){return Ee}};g._$litElement$=!0,g.finalized=!0,Xt.litElementHydrateSupport?.({LitElement:g});var Gs=Xt.litElementPolyfillSupport;Gs?.({LitElement:g});(Xt.litElementVersions??(Xt.litElementVersions=[])).push("4.2.0");var v=i=>(t,e)=>{e!==void 0?e.addInitializer(()=>{customElements.define(i,t)}):customElements.define(i,t)};var qs={attribute:!0,type:String,converter:Kt,reflect:!1,hasChanged:wr},Ws=(i=qs,t,e)=>{let{kind:r,metadata:o}=e,a=globalThis.litPropertyMetadata.get(o);if(a===void 0&&globalThis.litPropertyMetadata.set(o,a=new Map),r==="setter"&&((i=Object.create(i)).wrapped=!0),a.set(e.name,i),r==="accessor"){let{name:n}=e;return{set(l){let s=t.get.call(this);t.set.call(this,l),this.requestUpdate(n,s,i)},init(l){return l!==void 0&&this.C(n,void 0,i,l),l}}}if(r==="setter"){let{name:n}=e;return function(l){let s=this[n];t.call(this,l),this.requestUpdate(n,s,i)}}throw Error("Unsupported decorator location: "+r)};function p(i){return(t,e)=>typeof e=="object"?Ws(i,t,e):((r,o,a)=>{let n=o.hasOwnProperty(a);return o.constructor.createProperty(a,r),n?Object.getOwnPropertyDescriptor(o,a):void 0})(i,t,e)}function M(i){return p({...i,state:!0,attribute:!1})}var At=(i,t,e)=>(e.configurable=!0,e.enumerable=!0,Reflect.decorate&&typeof t!="object"&&Object.defineProperty(i,t,e),e);function ot(i,t){return(e,r,o)=>{let a=n=>n.renderRoot?.querySelector(i)??null;if(t){let{get:n,set:l}=typeof r=="object"?e:o??(()=>{let s=Symbol();return{get(){return this[s]},set(c){this[s]=c}}})();return At(e,r,{get(){let s=n.call(this);return s===void 0&&(s=a(this),(s!==null||this.hasUpdated)&&l.call(this,s)),s}})}return At(e,r,{get(){return a(this)}})}}function R(i,t,e){return i?t(i):e?.(i)}var P=y` * { box-sizing: border-box; } `,oa=y` :host { display: block; isolation: isolate; position: relative; width: 100%; //Keep the CSS loader in the same position - check css-loader-inline.ts min-height: 64px; } `;var aa="https://sdk.primer.io/web/v2-latest/Primer.min.js",at="20px";var Or=class{constructor(t){this._methods=t}get(t){return this._methods.get(t)}toArray(){return Array.from(this._methods.values())}size(){return this._methods.size}};var Dr=class{constructor(t){this.paymentMethods=null;this.headlessInstance=t}setPaymentMethods(t){this.paymentMethods=t}async refreshSession(){if(!this.headlessInstance){_.error("PrimerJS: Cannot refresh session: Headless instance not available");return}try{await this.headlessInstance.refreshClientSession()}catch(t){throw _.error("PrimerJS: Error refreshing client session:",t),t}}getPaymentMethods(){return this.paymentMethods?this.paymentMethods.toArray():(_.warn("PrimerJS: Payment methods not available"),[])}handlePaymentStart(){this.onPaymentStart&&this.onPaymentStart()}handleBeforePaymentCreate(t,e){if(this.onPaymentPrepare){let r={continuePaymentCreation:()=>{_.info("PrimerJS: Payment creation continuing"),e.continuePaymentCreation()},abortPaymentCreation:()=>{_.info("PrimerJS: Payment creation aborted"),e.abortPaymentCreation()}};this.onPaymentPrepare(t,r)}else _.info("PrimerJS: No payment prepare handler, continuing by default"),e.continuePaymentCreation()}handlePaymentComplete(t){this.onPaymentComplete&&this.onPaymentComplete({payment:t,status:"success"})}handlePaymentFailure(t,e){this.onPaymentComplete&&this.onPaymentComplete({payment:e||null,status:"error",error:t})}};var $r=typeof window<"u"&&typeof window.document<"u";function Js(i){return document.querySelector(`script[src^="${i}"]`)}function Zs(i,t){let e=document.createElement("script");return e.setAttribute("src",i),e.setAttribute("async",""),e.setAttribute("crossorigin","anonymous"),t&&e.setAttribute("type","module"),e}function na(i,t=!1){if(!$r)throw new Error("Cannot load script in server environment");let e=Js(i)??Zs(i,t);return new Promise((r,o)=>{e.onload=()=>{r()},e.onerror=()=>{o(new Error(`Failed to load script: ${i}`))},e.parentNode||document.head.appendChild(e)})}var Xs={"../../node_modules/card-validator/dist/card-number.js":function(i,t,e){Object.defineProperty(t,"__esModule",{value:!0}),t.cardNumber=void 0;var r=e("../../node_modules/card-validator/dist/luhn-10.js"),o=e("../../node_modules/credit-card-type/dist/index.js");function a(l,s,c){return{card:l,isPotentiallyValid:s,isValid:c}}function n(l,s){s===void 0&&(s={});var c,u,h;if(typeof l!="string"&&typeof l!="number")return a(null,!1,!1);var b=String(l).replace(/-|\s/g,"");if(!/^\d*$/.test(b))return a(null,!1,!1);var E=o(b);if(E.length===0)return a(null,!1,!1);if(E.length!==1)return a(null,!0,!1);var x=E[0];if(s.maxLength&&b.length>s.maxLength)return a(x,!1,!1);u=s.skipLuhnValidation===!0||x.type===o.types.UNIONPAY&&s.luhnValidateUnionPay!==!0?!0:r(b),h=Math.max.apply(null,x.lengths),s.maxLength&&(h=Math.min(s.maxLength,h));for(var A=0;A<x.lengths.length;A++)if(x.lengths[A]===b.length)return c=b.length<h||u,a(x,c,u);return a(x,b.length<h,!1)}t.cardNumber=n},"../../node_modules/card-validator/dist/cardholder-name.js":function(i,t){Object.defineProperty(t,"__esModule",{value:!0}),t.cardholderName=void 0;var e=/^[\d\s-]*$/,r=255;function o(n,l){return{isValid:n,isPotentiallyValid:l}}function a(n){return typeof n!="string"?o(!1,!1):n.length===0?o(!1,!0):n.length>r?o(!1,!1):e.test(n)?o(!1,!0):o(!0,!0)}t.cardholderName=a},"../../node_modules/card-validator/dist/cvv.js":function(i,t){Object.defineProperty(t,"__esModule",{value:!0}),t.cvv=void 0;var e=3;function r(l,s){for(var c=0;c<l.length;c++)if(s===l[c])return!0;return!1}function o(l){for(var s=e,c=0;c<l.length;c++)s=l[c]>s?l[c]:s;return s}function a(l,s){return{isValid:l,isPotentiallyValid:s}}function n(l,s){return s===void 0&&(s=e),s=s instanceof Array?s:[s],typeof l!="string"||!/^\d*$/.test(l)?a(!1,!1):r(s,l.length)?a(!0,!0):l.length<Math.min.apply(null,s)?a(!1,!0):l.length>o(s)?a(!1,!1):a(!0,!0)}t.cvv=n},"../../node_modules/card-validator/dist/expiration-date.js":function(i,t,e){var r=this&&this.__assign||function(){return r=Object.assign||function(c){for(var u,h=1,b=arguments.length;h<b;h++){u=arguments[h];for(var E in u)Object.prototype.hasOwnProperty.call(u,E)&&(c[E]=u[E])}return c},r.apply(this,arguments)};Object.defineProperty(t,"__esModule",{value:!0}),t.expirationDate=void 0;var o=e("../../node_modules/card-validator/dist/lib/parse-date.js"),a=e("../../node_modules/card-validator/dist/expiration-month.js"),n=e("../../node_modules/card-validator/dist/expiration-year.js");function l(c,u,h,b){return{isValid:c,isPotentiallyValid:u,month:h,year:b}}function s(c,u){var h;if(typeof c=="string")c=c.replace(/^(\d\d) (\d\d(\d\d)?)$/,"$1/$2"),h=(0,o.parseDate)(String(c));else{if(c===null||typeof c!="object")return l(!1,!1,null,null);var b=r({},c);h={month:String(b.month),year:String(b.year)}}var E=(0,a.expirationMonth)(h.month),x=(0,n.expirationYear)(h.year,u);if(E.isValid){if(x.isCurrentYear){var A=E.isValidForThisYear;return l(A,A,h.month,h.year)}if(x.isValid)return l(!0,!0,h.month,h.year)}return E.isPotentiallyValid&&x.isPotentiallyValid?l(!1,!0,null,null):l(!1,!1,null,null)}t.expirationDate=s},"../../node_modules/card-validator/dist/expiration-month.js":function(i,t){Object.defineProperty(t,"__esModule",{value:!0}),t.expirationMonth=void 0;function e(o,a,n){return{isValid:o,isPotentiallyValid:a,isValidForThisYear:n||!1}}function r(o){var a=new Date().getMonth()+1;if(typeof o!="string")return e(!1,!1);if(o.replace(/\s/g,"")===""||o==="0")return e(!1,!0);if(!/^\d*$/.test(o))return e(!1,!1);var n=parseInt(o,10);if(isNaN(Number(o)))return e(!1,!1);var l=n>0&&n<13;return e(l,l,l&&n>=a)}t.expirationMonth=r},"../../node_modules/card-validator/dist/expiration-year.js":function(i,t){Object.defineProperty(t,"__esModule",{value:!0}),t.expirationYear=void 0;var e=19;function r(a,n,l){return{isValid:a,isPotentiallyValid:n,isCurrentYear:l||!1}}function o(a,n){n===void 0&&(n=e);var l;if(typeof a!="string")return r(!1,!1);if(a.replace(/\s/g,"")==="")return r(!1,!0);if(!/^\d*$/.test(a))return r(!1,!1);var s=a.length;if(s<2)return r(!1,!0);var c=new Date().getFullYear();if(s===3){var u=a.slice(0,2),h=String(c).slice(0,2);return r(!1,u===h)}if(s>4)return r(!1,!1);var b=parseInt(a,10),E=Number(String(c).substr(2,2)),x=!1;if(s===2){if(String(c).substr(0,2)===a)return r(!1,!0);l=E===b,x=b>=E&&b<=E+n}else s===4&&(l=c===b,x=b>=c&&b<=c+n);return r(x,x,l)}t.expirationYear=o},"../../node_modules/card-validator/dist/index.js":function(i,t,e){var r=this&&this.__createBinding||(Object.create?function(A,T,w,N){N===void 0&&(N=w);var V=Object.getOwnPropertyDescriptor(T,w);(!V||("get"in V?!T.__esModule:V.writable||V.configurable))&&(V={enumerable:!0,get:function(){return T[w]}}),Object.defineProperty(A,N,V)}:function(A,T,w,N){N===void 0&&(N=w),A[N]=T[w]}),o=this&&this.__setModuleDefault||(Object.create?function(A,T){Object.defineProperty(A,"default",{enumerable:!0,value:T})}:function(A,T){A.default=T}),a=this&&this.__importStar||function(A){if(A&&A.__esModule)return A;var T={};if(A!=null)for(var w in A)w!=="default"&&Object.prototype.hasOwnProperty.call(A,w)&&r(T,A,w);return o(T,A),T},n=a(e("../../node_modules/credit-card-type/dist/index.js")),l=e("../../node_modules/card-validator/dist/cardholder-name.js"),s=e("../../node_modules/card-validator/dist/card-number.js"),c=e("../../node_modules/card-validator/dist/expiration-date.js"),u=e("../../node_modules/card-validator/dist/expiration-month.js"),h=e("../../node_modules/card-validator/dist/expiration-year.js"),b=e("../../node_modules/card-validator/dist/cvv.js"),E=e("../../node_modules/card-validator/dist/postal-code.js"),x={creditCardType:n,cardholderName:l.cardholderName,number:s.cardNumber,expirationDate:c.expirationDate,expirationMonth:u.expirationMonth,expirationYear:h.expirationYear,cvv:b.cvv,postalCode:E.postalCode};i.exports=x},"../../node_modules/card-validator/dist/lib/is-array.js":function(i,t){Object.defineProperty(t,"__esModule",{value:!0}),t.isArray=void 0,t.isArray=Array.isArray||function(e){return Object.prototype.toString.call(e)==="[object Array]"}},"../../node_modules/card-validator/dist/lib/parse-date.js":function(i,t,e){Object.defineProperty(t,"__esModule",{value:!0}),t.parseDate=void 0;var r=e("../../node_modules/card-validator/dist/expiration-year.js"),o=e("../../node_modules/card-validator/dist/lib/is-array.js");function a(l){var s=Number(l[0]),c;return s===0?2:s>1||s===1&&Number(l[1])>2?1:s===1?(c=l.substr(1),(0,r.expirationYear)(c).isPotentiallyValid?1:2):l.length===5?1:l.length>5?2:1}function n(l){var s;if(/^\d{4}-\d{1,2}$/.test(l)?s=l.split("-").reverse():/\//.test(l)?s=l.split(/\s*\/\s*/g):/\s/.test(l)&&(s=l.split(/ +/g)),(0,o.isArray)(s))return{month:s[0]||"",year:s.slice(1).join()};var c=a(l),u=l.substr(0,c);return{month:u,year:l.substr(u.length)}}t.parseDate=n},"../../node_modules/card-validator/dist/luhn-10.js":function(i){function t(e){for(var r=0,o=!1,a=e.length-1,n;a>=0;)n=parseInt(e.charAt(a),10),o&&(n*=2,n>9&&(n=n%10+1)),o=!o,r+=n,a--;return r%10===0}i.exports=t},"../../node_modules/card-validator/dist/postal-code.js":function(i,t){Object.defineProperty(t,"__esModule",{value:!0}),t.postalCode=void 0;var e=3,r=new RegExp(/^[a-z0-9]+$/i);function o(n,l){return{isValid:n,isPotentiallyValid:l}}function a(n,l){l===void 0&&(l={});var s=l.minLength||e;return typeof n!="string"?o(!1,!1):n.length<s||!r.test(n.trim().slice(0,s))?o(!1,!0):o(!0,!0)}t.postalCode=a},"../../node_modules/credit-card-type/dist/index.js":function(i,t,e){var r=this&&this.__assign||function(){return r=Object.assign||function(w){for(var N,V=1,Je=arguments.length;V<Je;V++){N=arguments[V];for(var Dt in N)Object.prototype.hasOwnProperty.call(N,Dt)&&(w[Dt]=N[Dt])}return w},r.apply(this,arguments)},o=e("../../node_modules/credit-card-type/dist/lib/card-types.js"),a=e("../../node_modules/credit-card-type/dist/lib/add-matching-cards-to-results.js"),n=e("../../node_modules/credit-card-type/dist/lib/is-valid-input-type.js"),l=e("../../node_modules/credit-card-type/dist/lib/find-best-match.js"),s=e("../../node_modules/credit-card-type/dist/lib/clone.js"),c={},u={VISA:"visa",MASTERCARD:"mastercard",AMERICAN_EXPRESS:"american-express",DINERS_CLUB:"diners-club",DISCOVER:"discover",JCB:"jcb",UNIONPAY:"unionpay",MAESTRO:"maestro",ELO:"elo",MIR:"mir",HIPER:"hiper",HIPERCARD:"hipercard"},h=[u.VISA,u.MASTERCARD,u.AMERICAN_EXPRESS,u.DINERS_CLUB,u.DISCOVER,u.JCB,u.UNIONPAY,u.MAESTRO,u.ELO,u.MIR,u.HIPER,u.HIPERCARD],b=(0,s.clone)(h);function E(w){return c[w]||o[w]}function x(){return b.map(function(w){return(0,s.clone)(E(w))})}function A(w,N){N===void 0&&(N=!1);var V=b.indexOf(w);if(!N&&V===-1)throw new Error('"'+w+'" is not a supported card type.');return V}function T(w){var N=[];if(!(0,n.isValidInputType)(w))return N;if(w.length===0)return x();b.forEach(function(Je){var Dt=E(Je);(0,a.addMatchingCardsToResults)(w,Dt,N)});var V=(0,l.findBestMatch)(N);return V?[V]:N}T.getTypeInfo=function(w){return(0,s.clone)(E(w))},T.removeCard=function(w){var N=A(w);b.splice(N,1)},T.addCard=function(w){var N=A(w.type,!0);c[w.type]=w,N===-1&&b.push(w.type)},T.updateCard=function(w,N){var V=c[w]||o[w];if(!V)throw new Error('"'.concat(w,"\" is not a recognized type. Use `addCard` instead.'"));if(N.type&&V.type!==N.type)throw new Error("Cannot overwrite type parameter.");var Je=(0,s.clone)(V);Je=r(r({},Je),N),c[Je.type]=Je},T.changeOrder=function(w,N){var V=A(w);b.splice(V,1),b.splice(N,0,w)},T.resetModifications=function(){b=(0,s.clone)(h),c={}},T.types=u,i.exports=T},"../../node_modules/credit-card-type/dist/lib/add-matching-cards-to-results.js":function(i,t,e){Object.defineProperty(t,"__esModule",{value:!0}),t.addMatchingCardsToResults=void 0;var r=e("../../node_modules/credit-card-type/dist/lib/clone.js"),o=e("../../node_modules/credit-card-type/dist/lib/matches.js");function a(n,l,s){var c,u;for(c=0;c<l.patterns.length;c++){var h=l.patterns[c];if((0,o.matches)(n,h)){var b=(0,r.clone)(l);u=Array.isArray(h)?String(h[0]).length:String(h).length,n.length>=u&&(b.matchStrength=u),s.push(b);break}}}t.addMatchingCardsToResults=a},"../../node_modules/credit-card-type/dist/lib/card-types.js":function(i){var t={visa:{niceType:"Visa",type:"visa",patterns:[4],gaps:[4,8,12],lengths:[16,18,19],code:{name:"CVV",size:3}},mastercard:{niceType:"Mastercard",type:"mastercard",patterns:[[51,55],[2221,2229],[223,229],[23,26],[270,271],2720],gaps:[4,8,12],lengths:[16],code:{name:"CVC",size:3}},"american-express":{niceType:"American Express",type:"american-express",patterns:[34,37],gaps:[4,10],lengths:[15],code:{name:"CID",size:4}},"diners-club":{niceType:"Diners Club",type:"diners-club",patterns:[[300,305],36,38,39],gaps:[4,10],lengths:[14,16,19],code:{name:"CVV",size:3}},discover:{niceType:"Discover",type:"discover",patterns:[6011,[644,649],65],gaps:[4,8,12],lengths:[16,19],code:{name:"CID",size:3}},jcb:{niceType:"JCB",type:"jcb",patterns:[2131,1800,[3528,3589]],gaps:[4,8,12],lengths:[16,17,18,19],code:{name:"CVV",size:3}},unionpay:{niceType:"UnionPay",type:"unionpay",patterns:[620,[62100,62182],[62184,62187],[62185,62197],[62200,62205],[622010,622999],622018,[62207,62209],[623,626],6270,6272,6276,[627700,627779],[627781,627799],[6282,6289],6291,6292,810,[8110,8131],[8132,8151],[8152,8163],[8164,8171]],gaps:[4,8,12],lengths:[14,15,16,17,18,19],code:{name:"CVN",size:3}},maestro:{niceType:"Maestro",type:"maestro",patterns:[493698,[5e5,504174],[504176,506698],[506779,508999],[56,59],63,67,6],gaps:[4,8,12],lengths:[12,13,14,15,16,17,18,19],code:{name:"CVC",size:3}},elo:{niceType:"Elo",type:"elo",patterns:[401178,401179,438935,457631,457632,431274,451416,457393,504175,[506699,506778],[509e3,509999],627780,636297,636368,[650031,650033],[650035,650051],[650405,650439],[650485,650538],[650541,650598],[650700,650718],[650720,650727],[650901,650978],[651652,651679],[655e3,655019],[655021,655058]],gaps:[4,8,12],lengths:[16],code:{name:"CVE",size:3}},mir:{niceType:"Mir",type:"mir",patterns:[[2200,2204]],gaps:[4,8,12],lengths:[16,17,18,19],code:{name:"CVP2",size:3}},hiper:{niceType:"Hiper",type:"hiper",patterns:[637095,63737423,63743358,637568,637599,637609,637612],gaps:[4,8,12],lengths:[16],code:{name:"CVC",size:3}},hipercard:{niceType:"Hipercard",type:"hipercard",patterns:[606282],gaps:[4,8,12],lengths:[16],code:{name:"CVC",size:3}}};i.exports=t},"../../node_modules/credit-card-type/dist/lib/clone.js":function(i,t){Object.defineProperty(t,"__esModule",{value:!0}),t.clone=void 0;function e(r){return r?JSON.parse(JSON.stringify(r)):null}t.clone=e},"../../node_modules/credit-card-type/dist/lib/find-best-match.js":function(i,t){Object.defineProperty(t,"__esModule",{value:!0}),t.findBestMatch=void 0;function e(o){var a=o.filter(function(n){return n.matchStrength}).length;return a>0&&a===o.length}function r(o){return e(o)?o.reduce(function(a,n){return!a||Number(a.matchStrength)<Number(n.matchStrength)?n:a}):null}t.findBestMatch=r},"../../node_modules/credit-card-type/dist/lib/is-valid-input-type.js":function(i,t){Object.defineProperty(t,"__esModule",{value:!0}),t.isValidInputType=void 0;function e(r){return typeof r=="string"||r instanceof String}t.isValidInputType=e},"../../node_modules/credit-card-type/dist/lib/matches.js":function(i,t){Object.defineProperty(t,"__esModule",{value:!0}),t.matches=void 0;function e(a,n,l){var s=String(n).length,c=a.substr(0,s),u=parseInt(c,10);return n=parseInt(String(n).substr(0,c.length),10),l=parseInt(String(l).substr(0,c.length),10),u>=n&&u<=l}function r(a,n){return n=String(n),n.substring(0,a.length)===a.substring(0,n.length)}function o(a,n){return Array.isArray(n)?e(a,n[0],n[1]):r(a,n)}t.matches=o}},sa={};function Ji(i){var t=sa[i];if(t!==void 0)return t.exports;var e=sa[i]={exports:{}};return Xs[i].call(e.exports,e,e.exports,Ji),e.exports}var ge=()=>Pa.randomUUID?.()||Qs(),Qs=()=>"10000000-1000-4000-8000-100000000000".replace(/[018]/g,i=>(i^el()>>i/4).toString(16)),el=()=>(Pa.getRandomValues?.(new Uint8Array(1))[0]??16*Math.random())&15,Pa=typeof crypto<"u"?crypto:{},Y=class Y{static log(t,...e){Y.enabled}static info(t,...e){Y.enabled}static warn(t,...e){Y.enabled}static error(t,...e){Y.enabled&&e.forEach(r=>{r instanceof Error&&r.toJSON})}static debug(t,...e){Y.enabled}static table(t,e){Y.enabled}static time(t){Y.enabled}static timeEnd(t){Y.enabled}};I(Y,"enabled",!0),I(Y,"defaultFont","font-family: Consolas, monospace; font-size: 12px;"),I(Y,"brandTag","[PRIMER]"),I(Y,"brandStyle",`background: #24292e; color: #ffffff; padding: 2px 6px; border-radius: 3px; font-weight: bold; margin-right: 4px; ${Y.defaultFont}`),I(Y,"styles",{log:`color: #4CAF50; ${Y.defaultFont}`,info:`color: #2196F3; ${Y.defaultFont}`,warn:`color: #FF9800; ${Y.defaultFont}`,error:`color: #F44336; ${Y.defaultFont}`,debug:`color: #9C27B0; ${Y.defaultFont}`});var O=Y,tl={LOCAL:"",DEV:"https://analytics.dev.data.primer.io/v1/sdk-analytic-events",STAGING:"https://analytics.staging.data.primer.io/v1/sdk-analytic-events",SANDBOX:"https://analytics.sandbox.data.primer.io/v1/sdk-analytic-events",PRODUCTION:"https://analytics.production.data.primer.io/v1/sdk-analytic-events"},Vi=class{constructor(){I(this,"sessionConfig",null)}initialize(t){this.sessionConfig=t}clear(){this.sessionConfig=null}getSessionConfig(){return this.sessionConfig}sendEvent(t){if(!this.sessionConfig)return void O.error("Analytics manager not initialized. Call initializeAnalytics() first.");let e={id:ge(),timestamp:Math.floor(Date.now()/1e3),sdkType:"WEB",eventName:t.eventName,checkoutSessionId:this.sessionConfig.checkoutSessionId,clientSessionId:this.sessionConfig.clientSessionId,primerAccountId:this.sessionConfig.primerAccountId,sdkVersion:this.sessionConfig.sdkVersion,userAgent:typeof navigator<"u"?navigator.userAgent:"",eventType:t.eventType,userLocale:t.userLocale,paymentMethod:t.paymentMethod,paymentId:t.paymentId,redirectDestinationUrl:t.redirectDestinationUrl,threedsProvider:t.threedsProvider,threedsResponse:t.threedsResponse};il(e,this.sessionConfig)}},Ta=new Vi;function rl(i){Ta.initialize(i)}function Wr(i){Ta.sendEvent(i)}async function il(i,{environment:t,clientSessionToken:e}){if(t==="LOCAL")return void O.debug(`Analytics event ${i.eventName}:`,i);let r=tl[t];return fetch(r,{method:"POST",headers:{"Content-Type":"application/json",...e&&{Authorization:`Bearer ${e}`}},body:JSON.stringify(i)}).catch(o=>{O.error("Failed to send analytics event:",o)})}var Oi=function(i){return i.CARD="CARD",i.NATIVE="NATIVE",i.REDIRECT="REDIRECT",i.KLARNA="KLARNA",i.ACH="ACH",i}({}),la=Ji("../../node_modules/credit-card-type/dist/index.js");function Zi(i){return i.replace(/[-_]/g," ").replace(/[^\s\w]/g,"").replace(/([A-Z][a-z]+|[0-9]+)/g," $1").replace(/([A-Z]{2,})/g," $1").trim().split(/\s+/g)}function ol(i){return Zi(i).filter(Boolean).map(t=>t[0].toUpperCase()+t.slice(1).toLowerCase()).join(" ")}function da(i){return Zi(i).join("-").toLowerCase()}function ca(i){return Zi(i).join("_").toUpperCase()}var wa=[["AMEX","american-express"],["CARTES_BANCAIRES"],["DANKORT"],["DINERS_CLUB","diners-club"],["DISCOVER","discover"],["ENROUTE"],["ELO","elo"],["EFTPOS"],["HIPER","hiper","hiper-pay"],["HIPERCARD","hipercard"],["INTERAC"],["JCB","jcb"],["MAESTRO","maestro"],["MASTERCARD","mastercard"],["MIR","mir","mir-pay"],["OTHER",void 0,"payment-card"],["UNIONPAY","unionpay"],["VISA","visa"]],pa=new Map(wa.map(i=>[i[0],i])),al=new Map(wa.filter(i=>i[1]).map(i=>[i[1],i]));function Xi(i){let{niceType:t,type:e}=(0,la.getTypeInfo)(da(i))||(0,la.getTypeInfo)(pa.get(ca(i))?.[1]||"")||{},[r,o,a]=al.get(e)||pa.get(ca(i))||[];return{asset:a||da(o||i),backend:r,display:t||ol(i),library:o}}var J={WORLDPAY_IDEAL:"WORLDPAY_IDEAL",STRIPE_ACH:"STRIPE_ACH",STRIPE_IDEAL:"STRIPE_IDEAL",ADYEN_KLARNA:"ADYEN_KLARNA",ADYEN_BANCONTACT_CARD:"ADYEN_BANCONTACT_CARD",PAY_NL_KAARTDIRECT:"PAY_NL_KAARTDIRECT",ADYEN_EPS:"ADYEN_EPS",ADYEN_BANCONTACT_PAYCONIQ:"ADYEN_BANCONTACT_PAYCONIQ",OMISE_PROMPTPAY:"OMISE_PROMPTPAY",OMISE_TRUEMONEY:"OMISE_TRUEMONEY",ADYEN_MULTIBANCO:"ADYEN_MULTIBANCO",PACYPAY_WECHAT:"PACYPAY_WECHAT",PACYPAY_ALIPAY:"PACYPAY_ALIPAY",ADYEN_MBWAY:"ADYEN_MBWAY",XENDIT_DANA:"XENDIT_DANA",XENDIT_SHOPEEPAY:"XENDIT_SHOPEEPAY",ADYEN_PAYSHOP:"ADYEN_PAYSHOP",ADYEN_PAYTRAIL:"ADYEN_PAYTRAIL",CLEARPAY:"CLEARPAY",RAPYD_FAST:"RAPYD_FAST",RAPYD_PROMPTPAY:"RAPYD_PROMPTPAY",RAPYD_GCASH:"RAPYD_GCASH",RAPYD_POLI:"RAPYD_POLI",RAPYD_GRABPAY:"RAPYD_GRABPAY",PRIMER_PAYPAL:"PRIMER_PAYPAL",TWOC2P:"TWOC2P",NETS:"NETS",STRIPE_GIROPAY:"STRIPE_GIROPAY",MOLLIE_GIROPAY:"MOLLIE_GIROPAY",MOLLIE_EPS:"MOLLIE_EPS",PAY_NL_EPS:"PAY_NL_EPS",PAY_NL_P24:"PAY_NL_P24",MOLLIE_P24:"MOLLIE_P24",MOLLIE_SOFORT:"MOLLIE_SOFORT",COINBASE:"COINBASE",OPENNODE:"OPENNODE",MOLLIE_GIFT_CARD:"MOLLIE_GIFTCARD",XFERS_PAYNOW:"XFERS_PAYNOW",PAYMENT_CARD:"PAYMENT_CARD",APPLE_PAY:"APPLE_PAY",GOOGLE_PAY:"GOOGLE_PAY",PAYPAL:"PAYPAL",GO_CARDLESS:"GOCARDLESS",KLARNA:"KLARNA",PAY_NL_IDEAL:"PAY_NL_IDEAL",PAY_NL_SOFORT_BANKING:"PAY_NL_SOFORT_BANKING",PAY_NL_BANCONTACT:"PAY_NL_BANCONTACT",PAY_NL_PAYPAL:"PAY_NL_PAYPAL",PAY_NL_CREDIT_TRANSFER:"PAY_NL_CREDIT_TRANSFER",PAY_NL_DIRECT_DEBIT:"PAY_NL_DIRECT_DEBIT",PAY_NL_GIROPAY:"PAY_NL_GIROPAY",PAY_NL_PAYCONIQ:"PAY_NL_PAYCONIQ",PAY_NL_RIVERTY:"PAY_NL_RIVERTY",HOOLAH:"HOOLAH",ADYEN_BLIK:"ADYEN_BLIK",ADYEN_MOBILEPAY:"ADYEN_MOBILEPAY",ADYEN_VIPPS:"ADYEN_VIPPS",ADYEN_GIROPAY:"ADYEN_GIROPAY",ADYEN_SOFORT:"ADYEN_SOFORT",ADYEN_IDEAL:"ADYEN_IDEAL",ADYEN_TRUSTLY:"ADYEN_TRUSTLY",ADYEN_ALIPAY:"ADYEN_ALIPAY",ADYEN_TWINT:"ADYEN_TWINT",ADYEN_BANK_TRANSFER:"ADYEN_BANK_TRANSFER",MOLLIE_BANCONTACT:"MOLLIE_BANCONTACT",MOLLIE_IDEAL:"MOLLIE_IDEAL",BUCKAROO_GIROPAY:"BUCKAROO_GIROPAY",BUCKAROO_EPS:"BUCKAROO_EPS",BUCKAROO_SOFORT:"BUCKAROO_SOFORT",BUCKAROO_BANCONTACT:"BUCKAROO_BANCONTACT",BUCKAROO_IDEAL:"BUCKAROO_IDEAL",ATOME:"ATOME",DLOCAL_PIX:"DLOCAL_PIX",ALMA:"ALMA"},Ma="3.7.7",nl=Ma,Nt=typeof Buffer=="function",ma=typeof TextDecoder=="function"?new TextDecoder:void 0,ua=typeof TextEncoder=="function"?new TextEncoder:void 0,sl="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",Qt=Array.prototype.slice.call(sl),Vr=(i=>{let t={};return i.forEach((e,r)=>t[e]=r),t})(Qt),ll=/^(?:[A-Za-z\d+\/]{4})*?(?:[A-Za-z\d+\/]{2}(?:==)?|[A-Za-z\d+\/]{3}=?)?$/,q=String.fromCharCode.bind(String),ha=typeof Uint8Array.from=="function"?Uint8Array.from.bind(Uint8Array):i=>new Uint8Array(Array.prototype.slice.call(i,0)),Ia=i=>i.replace(/=/g,"").replace(/[+\/]/g,t=>t=="+"?"-":"_"),ka=i=>i.replace(/[^A-Za-z0-9\+\/]/g,""),Na=i=>{let t,e,r,o,a="",n=i.length%3;for(let l=0;l<i.length;){if((e=i.charCodeAt(l++))>255||(r=i.charCodeAt(l++))>255||(o=i.charCodeAt(l++))>255)throw new TypeError("invalid character found");t=e<<16|r<<8|o,a+=Qt[t>>18&63]+Qt[t>>12&63]+Qt[t>>6&63]+Qt[63&t]}return n?a.slice(0,n-3)+"===".substring(n):a},Qi=typeof btoa=="function"?i=>btoa(i):Nt?i=>Buffer.from(i,"binary").toString("base64"):Na,Ui=Nt?i=>Buffer.from(i).toString("base64"):i=>{let e=[];for(let r=0,o=i.length;r<o;r+=4096)e.push(q.apply(null,i.subarray(r,r+4096)));return Qi(e.join(""))},Hr=(i,t=!1)=>t?Ia(Ui(i)):Ui(i),dl=i=>{if(i.length<2){var t=i.charCodeAt(0);return t<128?i:t<2048?q(192|t>>>6)+q(128|63&t):q(224|t>>>12&15)+q(128|t>>>6&63)+q(128|63&t)}var t=65536+(i.charCodeAt(0)-55296)*1024+(i.charCodeAt(1)-56320);return q(240|t>>>18&7)+q(128|t>>>12&63)+q(128|t>>>6&63)+q(128|63&t)},cl=/[\uD800-\uDBFF][\uDC00-\uDFFFF]|[^\x00-\x7F]/g,La=i=>i.replace(cl,dl),fa=Nt?i=>Buffer.from(i,"utf8").toString("base64"):ua?i=>Ui(ua.encode(i)):i=>Qi(La(i)),It=(i,t=!1)=>t?Ia(fa(i)):fa(i),ya=i=>It(i,!0),pl=/[\xC0-\xDF][\x80-\xBF]|[\xE0-\xEF][\x80-\xBF]{2}|[\xF0-\xF7][\x80-\xBF]{3}/g,ml=i=>{switch(i.length){case 4:var t=(7&i.charCodeAt(0))<<18|(63&i.charCodeAt(1))<<12|(63&i.charCodeAt(2))<<6|63&i.charCodeAt(3),e=t-65536;return q((e>>>10)+55296)+q((1023&e)+56320);case 3:return q((15&i.charCodeAt(0))<<12|(63&i.charCodeAt(1))<<6|63&i.charCodeAt(2));default:return q((31&i.charCodeAt(0))<<6|63&i.charCodeAt(1))}},Ra=i=>i.replace(pl,ml),Oa=i=>{if(i=i.replace(/\s+/g,""),!ll.test(i))throw new TypeError("malformed base64.");i+="==".slice(2-(3&i.length));let t,e="",r,o;for(let a=0;a<i.length;)t=Vr[i.charAt(a++)]<<18|Vr[i.charAt(a++)]<<12|(r=Vr[i.charAt(a++)])<<6|(o=Vr[i.charAt(a++)]),e+=r===64?q(t>>16&255):o===64?q(t>>16&255,t>>8&255):q(t>>16&255,t>>8&255,255&t);return e},eo=typeof atob=="function"?i=>atob(ka(i)):Nt?i=>Buffer.from(i,"base64").toString("binary"):Oa,Da=Nt?i=>ha(Buffer.from(i,"base64")):i=>ha(eo(i).split("").map(t=>t.charCodeAt(0))),$a=i=>Da(Va(i)),ul=Nt?i=>Buffer.from(i,"base64").toString("utf8"):ma?i=>ma.decode(Da(i)):i=>Ra(eo(i)),Va=i=>ka(i.replace(/[-_]/g,t=>t=="-"?"+":"/")),Yi=i=>ul(Va(i)),hl=i=>{if(typeof i!="string")return!1;let t=i.replace(/\s+/g,"").replace(/={0,2}$/,"");return!/[^\s0-9a-zA-Z\+/]/.test(t)||!/[^\s0-9a-zA-Z\-_]/.test(t)},Ua=i=>({value:i,enumerable:!1,writable:!0,configurable:!0}),Ya=function(){let i=(t,e)=>Object.defineProperty(String.prototype,t,Ua(e));i("fromBase64",function(){return Yi(this)}),i("toBase64",function(t){return It(this,t)}),i("toBase64URI",function(){return It(this,!0)}),i("toBase64URL",function(){return It(this,!0)}),i("toUint8Array",function(){return $a(this)})},Ha=function(){let i=(t,e)=>Object.defineProperty(Uint8Array.prototype,t,Ua(e));i("toBase64",function(t){return Hr(this,t)}),i("toBase64URI",function(){return Hr(this,!0)}),i("toBase64URL",function(){return Hr(this,!0)})},fl=()=>{Ya(),Ha()},Ba={version:Ma,VERSION:nl,atob:eo,atobPolyfill:Oa,btoa:Qi,btoaPolyfill:Na,fromBase64:Yi,toBase64:It,encode:It,encodeURI:ya,encodeURL:ya,utob:La,btou:Ra,decode:Yi,isValid:hl,fromUint8Array:Hr,toUint8Array:$a,extendString:Ya,extendUint8Array:Ha,extendBuiltins:fl},Br={encode:yl,decode:Ba.decode};function yl(i,t={}){let{urlSafe:e=!1}=t;return Ba.encode(i,e)}function gl(i,t){return!(i.intent!==`${t}_REDIRECTION`||!("statusUrl"in i)||!("redirectUrl"in i)||!i.redirectUrl||!i.statusUrl)}function er(i){let t=Cl(i),e=1e3*t.exp;if(Date.now()>e)throw new Error(`${vl}. Expiration date: ${new Date(e).toISOString()}`);return t}var Fa="The provided `clientToken`",vl=`${Fa} has expired`,bl=`${Fa} is malformed`;function Cl(i){try{let[t,e]=i.split("."),r=e||t;return JSON.parse(Br.decode(r))}catch{throw new Error(bl)}}var Fr=class{constructor(t,e){I(this,"context");I(this,"dialogProvider");this.context=t,this.dialogProvider=e}};function za(){return{javaEnabled:typeof window.navigator.javaEnabled=="function"?window.navigator.javaEnabled():!1,language:window.navigator.language,colorDepth:window.screen.colorDepth,screenHeight:window.screen.height,screenWidth:window.screen.width,timezoneOffset:new Date().getTimezoneOffset(),userAgent:window.navigator.userAgent}}function Jr(i){return i?new Promise(t=>{setTimeout(t,i)}):Promise.resolve()}var Hi=class extends Fr{async handleRequiredAction(t){let e=t.requiredAction?.clientToken;if(!e)throw new Error("No client token provided");let r=er(e);if(!("intent"in r)||r.intent!=="3DS_AUTHENTICATION")throw new Error("Invalid client token");let{error:o,data:a}=await this.context.pciApi.post3dsAuth(r.tokenId,{device:za()});if(o||!a||!a.authentication)throw o??new Error("Unable to authenticate");let n=a.authentication,l=a;n.responseCode==="METHOD"&&(l=await this.handleMethod(r.tokenId,n),n=l.authentication),n.responseCode==="CHALLENGE"&&(l=await this.handleChallenge(r.tokenId,n));let s=await this.context.pciApi.postResumePayment(t.id,l.resumeToken);if(s.error||!s.data)throw s.error??new Error("Unable to resume payment");return s.data}async handleMethod(t,e){let r="primer-3ds-method-box",o="primer-3ds-method-iframe",a="primer-3ds-method-form",n="threeDSMethodData",l=document.createElement("div");l.id=r,l.style.position="absolute",l.style.width="2px",l.style.height="2px",l.style.left="-10000px";let s=document.createElement("iframe");s.style.display="none",s.id=o,s.name=o,l.appendChild(s);let c=document.createElement("form"),u=document.createElement("input");u.type="hidden",u.id=n,u.name=n,u.value=Br.encode(JSON.stringify({threeDSServerTransID:e.transactionId,threeDSMethodNotificationURL:e.notificationUrl}),{urlSafe:!0}).replace(/=+$/g,""),c.appendChild(u),c.id=a,c.name=a,c.action=e.acsMethodUrl,c.target=o,c.method="post",l.appendChild(c),document.body.appendChild(l),c.submit();let{data:h,error:b}=await this.pollStatus(e.statusUrl,"METHOD",1e3).promise;return l.remove(),b||!h?this.continueAuth(t):h}pollStatus(t,e="METHOD",r=1e3,o=66e4){let a=!0;return{promise:new Promise(async n=>{let l=setTimeout(()=>{a=!1,n({error:new Error("Operation timed out"),data:null})},o);try{for(;a;){let s=await this.context.pciApi.get3dsResumeStatus(t);if(s.error){clearTimeout(l),n(s);return}if(await Jr(r),s.data&&s.data.authentication.responseCode!==e){clearTimeout(l),n(s);return}}}catch(s){clearTimeout(l),n({error:s,data:null})}}),abort:()=>{a=!1}}}async continueAuth(t){let{data:e,error:r}=await this.context.pciApi.post3dsContinue(t);return r||!e?{resumeToken:ge(),authentication:{responseCode:"SKIPPED",skippedReasonCode:"NEGOTIATION_ERROR",skippedReasonText:"Failed to negotiate with 3DS server"}}:e}async handleChallenge(t,e){let{container:r,formId:o}=this.createChallengeElements(e),a=()=>{let l=document.getElementById(o);l?l.submit():requestAnimationFrame(()=>{let s=document.getElementById(o);s&&s.submit()})},n=this.pollStatus(e.statusUrl,"CHALLENGE",2500,66e4);try{let l=this.dialogProvider.show({htmlContent:r.outerHTML,onContentReady:a});Wr({eventName:"PAYMENT_THREEDS",threedsResponse:JSON.stringify(e)});let s=await Promise.race([n.promise,l.then(()=>null,c=>{throw n.abort(),c})]);return s&&s.data?(this.dialogProvider.close(),s.data):(this.dialogProvider.close(),this.continueAuth(t))}catch{return n.abort(),this.continueAuth(t)}}createChallengeElements(t){this.inject3DSChallengeCSS();let e=`3ds-challenge-iframe-${ge()}`,r=`3ds-challenge-form-${ge()}`,o=/^1/.test(t.protocolVersion),a=document.createElement("div");a.className="challenge-container";let n=document.createElement("form");if(n.id=r,n.className="challenge-form",n.action=t.acsChallengeUrl,n.target=e,n.method="post",o){let s=document.createElement("input");s.type="hidden",s.name="PaReq",s.id="PaReq",s.value=t.acsChallengeData||"",n.appendChild(s);let c=document.createElement("input");c.type="hidden",c.name="TermUrl",c.id="TermUrl",c.value=t.notificationUrl||"",n.appendChild(c)}else{let s=Br.encode(JSON.stringify({threeDSServerTransID:t.transactionId,acsTransID:t.acsTransactionId,messageVersion:t.protocolVersion,messageType:"CReq",challengeWindowSize:"05"}),{urlSafe:!0}),c=document.createElement("input");c.type="hidden",c.name="creq",c.id="creq",c.value=s,n.appendChild(c);let u=document.createElement("input");u.type="hidden",u.name="threeDSSessionData",u.id="threeDSSessionData",u.value="",n.appendChild(u)}let l=document.createElement("iframe");return l.id=e,l.name=e,l.className="challenge-iframe",l.setAttribute("frameborder","0"),l.title="3D Secure Challenge",a.appendChild(n),a.appendChild(l),{container:a,formId:r}}inject3DSChallengeCSS(){let t="primer-3ds-challenge-dialog-styles";if(document.getElementById(t))return;let e=`
|
|
4
4
|
primer-dialog[size="large"] .challenge-container {
|
|
5
5
|
margin-top: 24px;
|
|
6
6
|
width: 100%;
|
|
@@ -19,7 +19,7 @@ import{a as fo,b as d,c as I}from"./chunks/chunk.DV3REKZU.js";var sr=class{const
|
|
|
19
19
|
background-color: #ffffff;
|
|
20
20
|
flex: 1;
|
|
21
21
|
}
|
|
22
|
-
`,r=document.createElement("style");r.id=t,r.textContent=e,document.head.appendChild(r)}},Bi=class extends
|
|
22
|
+
`,r=document.createElement("style");r.id=t,r.textContent=e,document.head.appendChild(r)}},Bi=class extends Fr{async handleRequiredAction(t){let e=t.requiredAction?.clientToken;if(!e)throw new Error("No client token provided");let r=er(e);if(!("intent"in r)||r.intent!=="PROCESSOR_3DS")throw new Error("Invalid client token");let{statusUrl:o,redirectUrl:a}=r;if(!o||!a)throw new Error("Missing statusUrl or redirectUrl in client token");let n=await this.handleProcessor3DS(o,a);if(!n)throw new Error("Failed to get resume token from processor 3DS flow");let l=await this.context.pciApi.postResumePayment(t.id,n);if(l.error||!l.data)throw l.error??new Error("Unable to resume payment");return l.data}async handleProcessor3DS(t,e){let{container:r,setIframeSrc:o}=this.createIframeContainer(e),a=this.pollStatus(t);try{let n=this.dialogProvider.show({htmlContent:r.outerHTML,onContentReady:o}),l=await Promise.race([a.promise,n.then(()=>null,s=>{throw a.abort(),s})]);if(Wr({eventName:"PAYMENT_THREEDS",threedsResponse:JSON.stringify(l?.data)}),l&&l.data&&l.data.id)return this.dialogProvider.close(),l.data.id;throw this.dialogProvider.close(),new Error("Processor 3DS flow was cancelled or failed")}catch(n){throw a.abort(),this.dialogProvider.close(),n}}createIframeContainer(t){this.injectProcessor3DSCSS();let e=document.createElement("div");e.className="processor-3ds-container";let r=`processor-3ds-iframe-${ge()}`,o=document.createElement("iframe");return o.id=r,o.className="processor-3ds-iframe",o.setAttribute("frameborder","0"),o.setAttribute("allow","payment"),o.setAttribute("sandbox","allow-forms allow-scripts allow-same-origin allow-top-navigation"),o.title="Processor 3DS Authentication",e.appendChild(o),{container:e,setIframeSrc:()=>{let n=document.getElementById(r);n&&t&&(n.src=t)}}}pollStatus(t,e=100,r=72e5){let o=!0;return{promise:new Promise(async a=>{let n=setTimeout(()=>{o=!1,a({id:ge(),status:408,error:new Error("Processor 3DS operation timed out"),data:void 0,headers:{}})},r);try{for(;o;){let l=await this.context.pciApi.getResumeStatus(t);if(l.error){clearTimeout(n),a(l);return}if(l.data&&l.data.id){let s=l.data;if(s.status&&s.status!=="PENDING"){clearTimeout(n),a(l);return}}await Jr(e)}}catch(l){clearTimeout(n),a({id:ge(),status:500,error:l instanceof Error?l:new Error("Unknown error"),data:void 0,headers:{}})}}),abort:()=>{o=!1}}}injectProcessor3DSCSS(){let t="primer-processor-3ds-dialog-styles";if(document.getElementById(t))return;let e=`
|
|
23
23
|
primer-dialog[size="large"] .processor-3ds-container {
|
|
24
24
|
margin-top: 24px;
|
|
25
25
|
width: 100%;
|
|
@@ -38,10 +38,10 @@ import{a as fo,b as d,c as I}from"./chunks/chunk.DV3REKZU.js";var sr=class{const
|
|
|
38
38
|
background-color: #ffffff;
|
|
39
39
|
flex: 1;
|
|
40
40
|
}
|
|
41
|
-
`,r=document.createElement("style");r.id=t,r.textContent=e,document.head.appendChild(r)}},El={CONTAINER_NOT_FOUND:"CONTAINER_NOT_FOUND"},Fr={MISSING_PARAMETER:"MISSING_PARAMETER",INVALID_PARAMETER:"INVALID_PARAMETER",INVALID_USAGE:"INVALID_USAGE"},ye={UNAUTHORIZED:"UNAUTHORIZED",FORBIDDEN:"FORBIDDEN",NOT_FOUND:"NOT_FOUND",CONFLICT:"CONFLICT",REQUEST_TIMEOUT:"REQUEST_TIMEOUT",VALIDATION_ERROR:"REQUEST_VALIDATION_ERROR",SERVER_ERROR:"SERVER_ERROR",BAD_REQUEST:"BAD_REQUEST",REQUEST_ERROR:"REQUEST_ERROR",UNEXPECTED:"UNEXPECTED"},re={PAYMENT_CREATION_ABORTED:"PAYMENT_CREATION_ABORTED",PAYMENT_FAILED:"PAYMENT_FAILED",RESUME_FAILED:"RESUME_FAILED",TOKENIZATION_ERROR:"TOKENIZATION_ERROR"},ga={MISSING_CLIENT_TOKEN:"MISSING_CLIENT_TOKEN",INVALID_CLIENT_TOKEN:"INVALID_CLIENT_TOKEN"},Ur={VAULT_ERROR:"VAULT_ERROR",TOKENIZATION_ERROR:"TOKENIZATION_ERROR"},to=function(i){return i.REQUEST_ERROR="RequestError",i.TOKENIZATION_ERROR="TokenizationError",i.CLIENT_ERROR="ClientError",i.REQUEST_VALIDATION_ERROR="RequestValidationError",i.CONFIGURATION_ERROR="ConfigurationError",i.PCI_ERROR="PciError",i}({}),tr=class extends Error{constructor(e,r,o,a){super(r);I(this,"code");I(this,"error");this.name=e,this.code=o,this.error=a}toJSON(){return{name:this.name,message:this.message,code:this.code,stack:this.stack}}},rr=class extends tr{constructor({message:e,error:r,response:o,code:a=ye.REQUEST_ERROR}){let n=r??new Error(e);super(to.REQUEST_ERROR,e,a,n);I(this,"response");this.response=o}toJSON(){return{name:this.name,message:this.message,response:this.response,code:this.code,stack:this.stack}}},nt=class extends tr{constructor({message:e,error:r,code:o=ye.UNEXPECTED,suggestion:a,paymentMethod:n}){let l=r??new Error(e);super(to.TOKENIZATION_ERROR,e,o,l);I(this,"suggestion");I(this,"paymentMethod");this.suggestion=a,this.paymentMethod=n}toJSON(){return{name:this.name,message:this.message,code:this.code,paymentMethod:this.paymentMethod,suggestion:this.suggestion,stack:this.stack}}},H=class extends tr{constructor({message:e,error:r,code:o=ye.UNEXPECTED,suggestion:a,paymentMethod:n}){let l=r??new Error(e);super(to.CLIENT_ERROR,e,o,l);I(this,"suggestion");I(this,"paymentMethod");this.suggestion=a,this.paymentMethod=n}toJSON(){return{name:this.name,message:this.message,code:this.code,paymentMethod:this.paymentMethod,suggestion:this.suggestion,stack:this.stack}}},At=class{constructor(t,e){I(this,"config");I(this,"context");this.config=Object.freeze(t),this.context=e}async tokenizeVaulted(t){let{error:e,data:r}=await this.context.pciApi.postPaymentInstrumentsExchange(t);if(e||!r)throw e??new H({code:re.TOKENIZATION_ERROR,message:"Unable to tokenize vaulted payment method",paymentMethod:this.config.type});return r}async setup(){return!0}async start(){}async render(t){O.warn(`Render not implemented for ${this.config.type}`)}async handleRequiredAction(t,e){return t.requiredAction?.name==="3DS_AUTHENTICATION"?new Hi(this.context,e).handleRequiredAction(t):t.requiredAction?.name==="PROCESSOR_3DS"?new Bi(this.context,e).handleRequiredAction(t):t}async createPayment(t){let{error:e,data:r}=await this.context.pciApi.postCreatePayment(t);if(e||!r)throw e??new H({code:re.PAYMENT_FAILED,message:"Unable to create payment"});return r.requiredAction?.clientToken&&this.context.updateClientToken(r.requiredAction.clientToken),r}async resumePayment(t,e){let{error:r,data:o}=await this.context.pciApi.postResumePayment(t,e);if(r||!o)throw r??new H({code:re.RESUME_FAILED,message:"Unable to resume payment"});return o}};function xl(i){return i&&i.includes("_")?i.split("_").join("-"):i}var Al=JSON.parse('{"USD":{"b":2},"CAD":{"b":2},"EUR":{"b":2},"AED":{"b":2},"AFN":{"b":0},"ALL":{"b":0},"AMD":{"b":0},"ARS":{"b":2},"AUD":{"b":2},"AZN":{"b":2},"BAM":{"b":2},"BDT":{"b":2},"BGN":{"b":2},"BHD":{"b":3},"BIF":{"b":0},"BND":{"b":2},"BOB":{"b":2},"BRL":{"b":2},"BWP":{"b":2},"BYN":{"b":2},"BZD":{"b":2},"CDF":{"b":2},"CHF":{"b":2},"CLP":{"b":0},"CNY":{"b":2},"COP":{"b":2},"CRC":{"b":2},"CVE":{"b":2},"CZK":{"b":2},"DJF":{"b":0},"DKK":{"b":2},"DOP":{"b":2},"DZD":{"b":2},"EEK":{"b":2},"EGP":{"b":2},"ERN":{"b":2},"ETB":{"b":2},"GBP":{"b":2},"GEL":{"b":2},"GHS":{"b":2},"GNF":{"b":0},"GTQ":{"b":2},"HKD":{"b":2},"HNL":{"b":2},"HRK":{"b":2},"HUF":{"b":2},"IDR":{"b":0},"ILS":{"b":2},"INR":{"b":2},"IQD":{"b":0},"IRR":{"b":0},"ISK":{"b":0},"JMD":{"b":2},"JOD":{"b":3},"JPY":{"b":0},"KES":{"b":2},"KHR":{"b":2},"KMF":{"b":0},"KRW":{"b":0},"KWD":{"b":3},"KZT":{"b":2},"LBP":{"b":0},"LKR":{"b":2},"LTL":{"b":2},"LVL":{"b":2},"LYD":{"b":3},"MAD":{"b":2},"MDL":{"b":2},"MGA":{"b":0},"MKD":{"b":2},"MMK":{"b":0},"MOP":{"b":2},"MUR":{"b":0},"MXN":{"b":2},"MYR":{"b":2},"MZN":{"b":2},"NAD":{"b":2},"NGN":{"b":2},"NIO":{"b":2},"NOK":{"b":2},"NPR":{"b":2},"NZD":{"b":2},"OMR":{"b":3},"PAB":{"b":2},"PEN":{"b":2},"PHP":{"b":2},"PKR":{"b":0},"PLN":{"b":2},"PYG":{"b":0},"QAR":{"b":2},"RON":{"b":2},"RSD":{"b":0},"RUB":{"b":2},"RWF":{"b":0},"SAR":{"b":2},"SDG":{"b":2},"SEK":{"b":2},"SGD":{"b":2},"SOS":{"b":0},"SYP":{"b":0},"THB":{"b":2},"TND":{"b":3},"TOP":{"b":2},"TRY":{"b":2},"TTD":{"b":2},"TWD":{"b":2},"TZS":{"b":0},"UAH":{"b":2},"UGX":{"b":0},"UYU":{"b":2},"UZS":{"b":0},"VEF":{"b":2},"VND":{"b":0},"XAF":{"b":0},"XOF":{"b":0},"YER":{"b":0},"ZAR":{"b":2},"ZMK":{"b":0},"ZWL":{"b":0}}'),Sl=2,_l=Al;function Pl(i){if(!i)return null;let t=_l[i];return t?{decimalDigits:t.b}:null}function ja(i,t,e){let r=xl(i),o=Pl(e)?.decimalDigits??Sl;function a(n){return new Intl.NumberFormat(r,{style:"currency",currency:e,currencyDisplay:n}).format(t/10**o)}try{return a("narrowSymbol")}catch{return a("symbol")}}function zi(i,t){return ja("en",i,t).replace(/[^0-9.]/g,"").replace(/(\..*)\./g,"$1")}var va=5,jr=class extends At{constructor(){super(...arguments);I(this,"applePaySession",null);I(this,"callbacks",{onStart:()=>{},onError:()=>{},onSuccess:()=>{}})}setCallbacks(e){this.callbacks=e}async tokenize(){throw new Error("ApplePay does not support direct tokenization")}async setup(){try{if(!ApplePaySession)return O.error("Apple Pay is not available in this browser context"),!1;if(!ApplePaySession.supportsVersion(va))return O.error("Apple Pay version not supported by this device"),!1;if(!ApplePaySession.canMakePayments())return O.error("This device cannot make Apple Pay payments"),!1;let e=window.location.hostname;if(!(this.config.options.merchantDomains||[]).includes(e))return O.error(`Apple Pay has not been configured for domain "${e}"`),!1}catch(e){return O.error("Failed to initialize Apple Pay:",e),!1}return!0}async render(e){let r=document.createElement("button");r.setAttribute("style","display: inline-block;width: 100%;cursor: pointer;height: 40px;-webkit-appearance: -apple-pay-button;-apple-pay-button-type: plain;-apple-pay-button-style: black"),r.setAttribute("type","button"),r.classList.add("primer-apple-pay-button"),r.addEventListener("click",this.handleButtonClick.bind(this)),e.appendChild(r)}async handleButtonClick(){try{this.callbacks.onStart(),this.applePaySession=new ApplePaySession(va,this.createPaymentRequest()),this.applePaySession.onvalidatemerchant=this.handleValidateMerchant.bind(this),this.applePaySession.onpaymentauthorized=this.handlePaymentAuthorized.bind(this),this.applePaySession.onpaymentmethodselected=this.handlePaymentMethodSelected.bind(this),this.applePaySession.oncancel=this.handleCancel.bind(this),this.applePaySession.begin()}catch(e){O.error("Error initiating Apple Pay session:",e)}}async handleValidateMerchant({validationURL:e}){if(this.applePaySession)try{let{data:r,error:o}=await this.context.coreApi.createApplePaySession({validationUrl:e,paymentMethodConfigId:this.config.id,merchantDomain:window.location.hostname});if(o||!r||!this.applePaySession)throw o??new Error("Failed to validate merchant");this.applePaySession.completeMerchantValidation(r)}catch(r){O.error("Apple Pay merchant validation failed:",r),this.abort()}}async handlePaymentMethodSelected(){if(this.applePaySession)try{let{merchantAmount:e,totalOrderAmount:r,currencyCode:o}=this.context.configuration.clientSession.order;this.applePaySession.completePaymentMethodSelection({newTotal:{label:this.config.options.merchantName,amount:zi(e??r,o),type:"final"}})}catch(e){O.error("Error handling payment method selection:",e),this.abort()}}async handlePaymentAuthorized({payment:e}){if(this.applePaySession)try{let r={paymentMethodConfigId:this.config.id,token:e.token},o=await this.context.pciApi.postPaymentInstruments(r),a=await this.createPayment(o.data.token),n=await this.handleRequiredAction(a,this.context.dialogProvider);n.status==="SUCCESS"?(this.applePaySession.completePayment(ApplePaySession.STATUS_SUCCESS),this.callbacks.onSuccess(n)):(this.applePaySession.completePayment(ApplePaySession.STATUS_FAILURE),this.callbacks.onError()),this.applePaySession=null}catch(r){O.error("Error handling payment authorization:",r),this.applePaySession&&(this.applePaySession.completePayment(ApplePaySession.STATUS_FAILURE),this.applePaySession=null),this.callbacks.onError()}}handleCancel(){this.applePaySession=null,this.callbacks.onError()}abort(){this.applePaySession?.abort(),this.applePaySession=null,this.callbacks.onError()}createPaymentRequest(){let{countryCode:e,currencyCode:r,merchantAmount:o,totalOrderAmount:a}=this.context.configuration.clientSession.order;if(!e||!r)throw new Error("Country code and currency code are required");let n=["visa","masterCard","amex"],l=zi(o??a,r);return{countryCode:e,currencyCode:r,merchantCapabilities:["supports3DS"],supportedNetworks:n,total:{amount:l,label:this.config.options.merchantName,type:"pending"}}}},Ka="https://sdk.primer.io/web/hosted-pages/v0.0.8",ba=!1,Tl=`${Ka}/api-controller.html`,wl=`${Ka}/hosted-input.html`,Ml="https://goat-assets.production.core.primer.io";function Ga(i,t){return btoa(JSON.stringify({checkoutSessionId:i,name:t}))}Ji("../../node_modules/card-validator/dist/index.js");var te={cardNumber:"cardNumber",cardSecurityCode:"cardSecurityCode",cardExpiryDate:"cardExpiryDate",cardholderName:"cardholderName"};Object.values(te);function Il(i){return{cardNumber:Yr(i,te.cardNumber),cardSecurityCode:Yr(i,te.cardSecurityCode),cardExpiryDate:Yr(i,te.cardExpiryDate),cardholderName:Yr(i,te.cardholderName)}}function Yr(i,t){let e=document.createElement("iframe"),r=Ga(i,t);return e.src=`${wl}#${r}`,e.setAttribute("tabindex","0"),e.setAttribute("frameBorder","0"),e.style.border="none",e.style.boxSizing="border-box",e.style.height="20px",e.style.width="100%",e.style.colorScheme="auto",e}var Kr=class extends At{constructor(e,r){super(e,r);I(this,"iframes");this.iframes=Il(r.checkoutSessionId)}async tokenize(){let{error:e,data:r}=await this.context.pciApi.postPaymentInstruments("pci-card-form-data");if(e||!r)throw e??new nt({code:re.TOKENIZATION_ERROR,message:"Unable to tokenize payment method",paymentMethod:J.PAYMENT_CARD});return r}};function kl(i,t={}){return new Promise((e,r)=>{if(document.querySelector(`script[src="${i}"]`))return void e();let o=document.createElement("script");o.src=i,Object.entries(t).forEach(([a,n])=>{o.setAttribute(a,n)}),o.onload=()=>{e()},o.onerror=()=>{r(new Error(`Failed to load script: ${i}`))},document.head.appendChild(o)})}var Ca=2,Ea=0,Gr=class extends At{constructor(){super(...arguments);I(this,"client");I(this,"callbacks",{onStart:()=>{},onError:()=>{},onSuccess:()=>{}});I(this,"allowedPaymentMethod",{type:"CARD",parameters:{allowedAuthMethods:["PAN_ONLY"],allowedCardNetworks:["AMEX","DISCOVER","INTERAC","JCB","MASTERCARD","VISA"]}})}setCallbacks(e){this.callbacks=e}async tokenize(){throw new nt({code:re.TOKENIZATION_ERROR,message:"Google Pay does not support direct tokenization",paymentMethod:J.GOOGLE_PAY})}async setup(){try{await kl("https://pay.google.com/gp/p/js/pay.js")}catch{return!1}if(!window.google||!window.google.payments)return O.error("Google Pay is not available in this browser context"),!1;if(this.client=new google.payments.api.PaymentsClient({environment:"TEST"}),!this.client.isReadyToPay(this.buildIsReadyToPayRequest()))return!1;let{countryCode:e,currencyCode:r}=this.context.configuration.clientSession.order;if(!e)throw new H({code:Fr.MISSING_PARAMETER,message:"Cannot initialize Google Pay: missing country code",paymentMethod:J.GOOGLE_PAY});if(!r)throw new H({code:Fr.MISSING_PARAMETER,message:"Cannot initialize Google Pay: missing currency code",paymentMethod:J.GOOGLE_PAY});return!0}async render(e){let r=this.client.createButton({buttonType:"buy",buttonColor:"black",buttonSizeMode:"fill",buttonRootNode:e instanceof ShadowRoot?e:void 0,onClick:this.handleButtonClick.bind(this)});e.appendChild(r)}async handleButtonClick(){this.callbacks.onStart();try{let e=this.buildPaymentDataRequest(),r=await this.client.loadPaymentData(e),{data:o,error:a}=await this.context.pciApi.postPaymentInstruments({flow:"GATEWAY",network:r.paymentMethodData.info?.cardNetwork??"OTHER",merchant_id:this.config.options.merchantId,encrypted_payload:Br.encode(r.paymentMethodData.tokenizationData.token)});if(a||!o)throw a??new nt({code:re.TOKENIZATION_ERROR,message:"Failed to tokenize payment data",paymentMethod:J.GOOGLE_PAY});let n=await this.createPayment(o.token);n.status==="SUCCESS"?this.callbacks.onSuccess(n):this.callbacks.onError()}catch(e){throw this.callbacks.onError(),O.error("Google Pay error",e),e}}async handlePaymentDataChanged(e){return{}}buildIsReadyToPayRequest(){return{apiVersion:Ca,apiVersionMinor:Ea,allowedPaymentMethods:[this.allowedPaymentMethod]}}buildPaymentDataRequest(){let{countryCode:e,currencyCode:r,merchantAmount:o,totalOrderAmount:a}=this.context.configuration.clientSession.order;return{apiVersion:Ca,apiVersionMinor:Ea,transactionInfo:{countryCode:e,currencyCode:r,displayItems:[],totalPriceStatus:"FINAL",totalPrice:zi(o??a,r),totalPriceLabel:"Total"},merchantInfo:{merchantId:this.config.options.merchantId,merchantName:this.config.options.merchantName},allowedPaymentMethods:[{...this.allowedPaymentMethod,tokenizationSpecification:{type:"PAYMENT_GATEWAY",parameters:{gateway:"primer",gatewayMerchantId:this.config.options.merchantId}}}]}}};function Nl(i,t){var e={};for(var r in i)Object.prototype.hasOwnProperty.call(i,r)&&t.indexOf(r)<0&&(e[r]=i[r]);if(i!=null&&typeof Object.getOwnPropertySymbols=="function")for(var o=0,r=Object.getOwnPropertySymbols(i);o<r.length;o++)t.indexOf(r[o])<0&&Object.prototype.propertyIsEnumerable.call(i,r[o])&&(e[r[o]]=i[r[o]]);return e}function Ll(i,t){var e=document.querySelector('script[src="'.concat(i,'"]'));if(e===null)return null;var r=qa(i,t),o=e.cloneNode();if(delete o.dataset.uidAuto,Object.keys(o.dataset).length!==Object.keys(r.dataset).length)return null;var a=!0;return Object.keys(o.dataset).forEach(function(n){o.dataset[n]!==r.dataset[n]&&(a=!1)}),a?e:null}function Rl(i){var t=i.url,e=i.attributes,r=i.onSuccess,o=i.onError,a=qa(t,e);a.onerror=o,a.onload=r,document.head.insertBefore(a,document.head.firstElementChild)}function Ol(i){var t=i.sdkBaseUrl,e=i.environment,r=Nl(i,["sdkBaseUrl","environment"]),o=t||Vl(e),a=r,n=Object.keys(a).filter(function(c){return a[c]!==void 0&&a[c]!==null&&a[c]!==""}).reduce(function(c,u){var h=a[u].toString();return u=Dl(u),u.substring(0,4)==="data"||u==="crossorigin"?c.attributes[u]=h:c.queryParams[u]=h,c},{queryParams:{},attributes:{}}),l=n.queryParams,s=n.attributes;return l["merchant-id"]&&l["merchant-id"].indexOf(",")!==-1&&(s["data-merchant-id"]=l["merchant-id"],l["merchant-id"]="*"),{url:"".concat(o,"?").concat($l(l)),attributes:s}}function Dl(i){var t=function(e,r){return(r?"-":"")+e.toLowerCase()};return i.replace(/[A-Z]+(?![a-z])|[A-Z]/g,t)}function $l(i){var t="";return Object.keys(i).forEach(function(e){t.length!==0&&(t+="&"),t+=e+"="+i[e]}),t}function Vl(i){return i==="sandbox"?"https://www.sandbox.paypal.com/sdk/js":"https://www.paypal.com/sdk/js"}function qa(i,t){t===void 0&&(t={});var e=document.createElement("script");return e.src=i,Object.keys(t).forEach(function(r){e.setAttribute(r,t[r]),r==="data-csp-nonce"&&e.setAttribute("nonce",t["data-csp-nonce"])}),e}function Ul(i,t){if(t===void 0&&(t=Promise),Wa(i,t),typeof document>"u")return t.resolve(null);var e=Ol(i),r=e.url,o=e.attributes,a=o["data-namespace"]||"paypal",n=xa(a);return o["data-js-sdk-library"]||(o["data-js-sdk-library"]="paypal-js"),Ll(r,o)&&n?t.resolve(n):Yl({url:r,attributes:o},t).then(function(){var l=xa(a);if(l)return l;throw new Error("The window.".concat(a," global variable is not available."))})}function Yl(i,t){t===void 0&&(t=Promise),Wa(i,t);var e=i.url,r=i.attributes;if(typeof e!="string"||e.length===0)throw new Error("Invalid url.");if(r!==void 0&&typeof r!="object")throw new Error("Expected attributes to be an object.");return new t(function(o,a){if(typeof document>"u")return o();Rl({url:e,attributes:r,onSuccess:function(){return o()},onError:function(){var n=new Error('The script "'.concat(e,'" failed to load. Check the HTTP status code and response body in DevTools to learn more.'));return a(n)}})})}function xa(i){return window[i]}function Wa(i,t){if(typeof i!="object"||i===null)throw new Error("Expected an options object.");var e=i.environment;if(e&&e!=="production"&&e!=="sandbox")throw new Error('The `environment` option must be either "production" or "sandbox".');if(t!==void 0&&typeof t!="function")throw new Error("Expected PromisePonyfill to be a function.")}var qr=class extends At{constructor(){super(...arguments);I(this,"paypalInstance");I(this,"dataNamespace",ge());I(this,"callbacks",{onStart:()=>{},onError:()=>{},onSuccess:()=>{}})}setCallbacks(e){this.callbacks=e}async tokenize(){throw new nt({message:"PayPal does not support direct tokenization",code:re.TOKENIZATION_ERROR,paymentMethod:J.PAYPAL})}async setup(){let{clientId:e,intent:r}=this.config.options;if(!e||!r)return!1;try{let o=await Ul({dataNamespace:this.dataNamespace,clientId:e,currency:this.context.configuration.clientSession.order.currencyCode,components:["buttons","funding-eligibility"],disableFunding:["bancontact","card","credit"],intent:r??"authorize"});return o?(this.paypalInstance=o,!0):!1}catch{return!1}}async render(e){if(!this.paypalInstance.Buttons)return;let r=this.paypalInstance.Buttons({style:{color:"gold",shape:"rect",label:"paypal",tagline:!1},createOrder:this.handleCreateOrder.bind(this),onInit:this.handleInit.bind(this),onClick:this.handleClick.bind(this),onApprove:this.handleApprove.bind(this),onCancel:this.handleCancel.bind(this),onError:this.handleError.bind(this)});if(!r.isEligible())throw new H({message:"PayPal Buttons are not eligible for rendering",code:Fr.INVALID_USAGE,paymentMethod:J.PAYPAL});await r.render(e)}handleInit(e,r){}handleClick(e,r){return Wr({eventName:"PAYMENT_METHOD_SELECTION",paymentMethod:"PAYPAL"}),r.resolve()}async handleCreateOrder(){this.callbacks.onStart(),await this.context.clientSessionApi.selectPaymentMethod(this.config.type);let{data:e,error:r}=await this.context.coreApi.createPaypalOrder(this.buildCreateOrderRequestBody());if(r||!e)throw r??new H({message:"Unable to create PayPal order",code:re.PAYMENT_FAILED,paymentMethod:J.PAYPAL});return e.orderId}async handleApprove(e,r){let o=null;try{o=await r?.order?.get()??null}catch{}let{error:a,data:n}=await this.context.pciApi.postPaymentInstruments({external_payer_info:{email:o?.payment_source?.paypal?.email_address,external_payer_id:e.payerID??void 0},paypal_order_id:e.orderID,paypal_status:o?.status});if(a||!n)throw a??new nt({message:"Unable to create payment instrument",code:re.TOKENIZATION_ERROR,paymentMethod:J.PAYPAL});let l=await this.createPayment(n.token);this.callbacks.onSuccess(l)}handleCancel(){this.context.clientSessionApi.unselectPaymentMethod()}handleError(e){O.error("PayPal error:",e)}buildCreateOrderRequestBody(){let{order:{currencyCode:e,merchantAmount:r,totalOrderAmount:o,shipping:a,lineItems:n=[],fees:l=[]}}=this.context.configuration.clientSession;if(!e)throw new H({message:"Currency code is not provided",code:Fr.MISSING_PARAMETER,paymentMethod:J.PAYPAL});let s={amount:r??o,currencyCode:e,paymentMethodConfigId:this.config.id,amountBreakdown:{}},c=!n.some(({description:u})=>!u);if(c&&(s.items=n.map(({description:u,taxAmount:h,amount:b,quantity:E})=>{let A=h?Math.floor(h/E):0;return{name:u,unit_amount:{value:b,currency_code:e},quantity:E.toString(),tax:{value:A,currency_code:e}}})),c&&n.length){let u=n.reduce((A,{amount:x,quantity:T})=>A+x*T,0),h=l?.reduce?.((A,{amount:x})=>A+(x??0),0),b=n?.reduce((A,{discountAmount:x})=>A+(x??0),0),E=n?.reduce((A,{taxAmount:x,quantity:T})=>A+(x??0*T),0);s.amountBreakdown={item_total:{value:u,currency_code:e},tax_total:{value:E,currency_code:e},handling:{value:h??0,currency_code:e},shipping:{value:a?.amount??0,currency_code:e},discount:{value:b,currency_code:e}}}return s}};async function Hl(i,t,e){try{Wr({eventName:"PAYMENT_PROCESSING_STARTED",paymentMethod:i.config.type}),e||await i.start();let r=e?await i.tokenizeVaulted(e.id):await i.tokenize(),o=await i.createPayment(r.token);return await i.handleRequiredAction(o,t)}catch(r){throw r}}var Fi=(i,t,e)=>{let r=e;if(t?.status==="FAILED"&&(r=new H({code:re.PAYMENT_FAILED,message:`The payment "${t.id}" was created but failed to be processed. Check the payment id ${t.id} using the Payments API or search for the payment on your Dashboard for further explanations.`})),t?.checkoutOutcome==="CHECKOUT_FAILURE"&&(r=new H({code:re.PAYMENT_FAILED,message:`The payment "${t.id}" was created but failed to be processed. Check the payment id ${t.id} using the Payments API or search for the payment on your Dashboard for further explanations.`})),t?.status==="PENDING"&&!t.requiredAction?.clientToken&&(r=new H({code:re.PAYMENT_FAILED,message:`The payment "${t.id}" ended up in a "PENDING" state without any required action. The SDK does not know how to handle this state. Check the payment id ${t.id} using the Payments API or search for the payment on your Dashboard for further explanations.`})),t?.status==="SUCCESS"&&t.checkoutOutcome!=="CHECKOUT_FAILURE"||t?.status==="PENDING"&&t.showSuccessCheckoutOnPendingPayment||t?.checkoutOutcome==="CHECKOUT_COMPLETE")return void i.onCheckoutComplete?.({payment:t});i.onCheckoutFail?.(r||new H({code:re.PAYMENT_FAILED,message:`The payment${t?.id?` "${t.id}"`:""} is in an inconsistent state without any required action. The SDK does not know how to handle this state. Please contact Primer.`}),{payment:t??void 0})},Bl=async(i,t)=>{if(!i.onBeforePaymentCreate)return!0;let e=setTimeout(()=>{O.warn("onBeforePaymentCreate did not resolve within 10 seconds. Primer SDK will remain in a loading state until `continuePaymentCreation` or `abortPaymentCreation` is called.")},1e4);return new Promise(r=>{i.onBeforePaymentCreate({paymentMethodType:t},{continuePaymentCreation:()=>{clearTimeout(e),O.log(`Continuing payment creation for ${t}`),r(!0)},abortPaymentCreation:()=>{clearTimeout(e),O.log(`Aborting payment creation for ${t}`),r(!1)}})})};async function ro(i,t,e){if(!await Bl(i,t.config.type))return void i.onCheckoutFail?.(new H({message:"Payment creation aborted",code:re.PAYMENT_CREATION_ABORTED,paymentMethod:t.config.type}),{});i.onPaymentCreationStart?.();let o,a;try{a=await Hl(t,t.context.dialogProvider,e)}catch(n){o=n}finally{Fi(i,a,o)}}var Aa=Symbol("PROXY_MARKER");function Ja({namespace:i,onMessage:t,sendMessage:e}){function r(o,a){return new Proxy(o,{get(n,l,s){if(n[Aa])return Reflect.get(n,l,s);let c=()=>{};return c[Aa]=!0,r(c,[...a,l])},apply(n,l,s){return new Promise(async(c,u)=>{try{let h=[],b=s.map(T=>{if(typeof T!="function")return T;{let w=ge();return h.push(w),t(N=>{N.namespace===i&&N.sender===$i.PROVIDER&&N.type===Di.CALLBACK&&N.id===w&&T(...N.data)}),w}}),E=ge(),A=t(T=>{T.namespace===i&&T.sender===$i.PROVIDER&&T.type===Di.APPLY&&T.id===E&&(T.error?u(new Error(T.error)):c(T.data),A?.())}),x={type:Di.APPLY,sender:$i.INJECTOR,id:E,path:a,args:b,callbackIds:h,timeStamp:Date.now(),namespace:i};e(x)}catch(h){u(h)}})}})}return r({},[])}var Di={APPLY:"apply",CALLBACK:"callback"},$i={PROVIDER:"provider",INJECTOR:"injector"};function zl(i,t,e,r={}){let o=[],a="LOCAL",n={[te.cardNumber]:void 0,[te.cardExpiryDate]:void 0,[te.cardSecurityCode]:void 0,[te.cardholderName]:void 0},l={createHostedInputs:()=>{let s=c=>{let u=new Map;return{getOptions:()=>{},setOptions:h=>{n[c]?.setOptions(h)},render:(h,b)=>{let E=e.iframes[c];if(!E)return O.error(`No iframe found for ${c}`),Promise.resolve();let A;return A=typeof h=="string"?document.getElementById(h):h,A?(A.appendChild(E),E.onload=()=>{n[c]=Ja({namespace:`${t.checkoutSessionId}-${c}`,onMessage:x=>{let T=w=>x(w.data);return window.addEventListener("message",T),()=>window.removeEventListener("message",T)},sendMessage:x=>{E.contentWindow.postMessage(x,"*")}}),n[c].setOptions({...b,orderedAllowedCardNetworks:t.configuration.clientSession.paymentMethod.orderedAllowedCardNetworks,cardholderName:i.cardholderName??i.card?.cardholderName}),n[c].setOnBlur(()=>{try{u.get("blur")?.()}catch(x){O.error(`Blur listener error for ${c}: ${x instanceof Error?x.message:String(x)}`)}}),n[c].setOnFocus(()=>{try{u.get("focus")?.()}catch(x){O.error(`Focus listener error for ${c}: ${x instanceof Error?x.message:String(x)}`)}}),n[c].setOnInput(x=>{let T={...x,errorCode:x.error,active:x.focused};try{u.get("input")?.(T),u.get("change")?.(T)}catch(w){O.error(`Input listener error for ${c}:`,{inputType:c,error:w,data:T})}}),c===te.cardNumber&&(n[c].setBinDataApiConfig(t.configuration.binDataUrl,t.decodedClientToken.accessToken),n[c].setOnCardNetworksChange((x,T)=>{(T!==a||Fl(o,x))&&(o=x,a=T,r.onCardNetworksChange?.(jl({networks:o,source:a},t.configuration.clientSession.paymentMethod.orderedAllowedCardNetworks)))}))},Promise.resolve()):(O.error(`Container not found for ${c}:`,h),Promise.resolve())},addEventListener:(h,b)=>{u.set(h,b)},focus:()=>{let h=e.iframes[c];if(h&&h.contentWindow)try{n[c]?.focus()}catch(b){O.error(`Focus send error for ${c}:`,b)}else O.warn(`Focus failed for ${c} - iframe not available`)},blur:()=>{let h=e.iframes[c];if(h&&h.contentWindow)try{n[c]?.blur()}catch(b){O.error(`Blur send error for ${c}:`,b)}},setDisabled:h=>{n[c]?.setDisabled(h)},setCardholderName:h=>{n[c]?.setCardholderName(h)}}};return{cardNumberInput:s(te.cardNumber),cardholderNameInput:s(te.cardholderName),expiryInput:s(te.cardExpiryDate),cvvInput:s(te.cardSecurityCode)}},removeHostedInputs:()=>{e.iframes.cardNumber.remove(),e.iframes.cardSecurityCode.remove(),e.iframes.cardExpiryDate.remove(),e.iframes.cardholderName.remove()},submit:async s=>{if((await l.validate()).valid)return await t.apiController.setPreferredNetwork(s?.cardNetwork),ro(i,e)},validate:async()=>{let s=(await Promise.all(Object.entries(n).map(([u,h])=>h?.getFieldState().then(b=>[u,b])))).filter(u=>u!==void 0),c=[];for(let[u,h]of s)!h.valid&&h.error&&c.push({field:u,name:u,error:h.error,message:h.message});return{valid:c.length===0,validationErrors:c}},reset:()=>{Object.values(n).forEach(s=>{s?.reset()}),t.apiController.setPreferredNetwork(void 0)},setCardholderName:s=>{try{n[te.cardholderName]?.setCardholderName(s)}catch(c){O.error("SetCardholderName error:",c)}}};return l}function Fl(i,t){if(i.length!==t.length)return!0;let e=t.map(({network:r})=>r);return!i.every(({network:r})=>e.includes(r))}function jl({networks:i,source:t},e){let r=e,o=new Set(r.map(s=>Xi(s).backend)),a=i.map(s=>({...s,allowed:o.has(s.network)})).sort((s,c)=>s.allowed?r.indexOf(s.network)-r.indexOf(c.network):1),n=a.filter(s=>s.allowed),l=t==="REMOTE"&&n.length>1;return{detectedCardNetworks:{items:a,preferred:n[0]},...l&&{selectableCardNetworks:{items:n,preferred:n[0]}},source:t}}function Kl(i,t,e){return{createButton:()=>({render:async r=>{e.setCallbacks({onStart:()=>{i.onBeforePaymentCreate?.({paymentMethodType:e.config.type},{continuePaymentCreation:()=>{i.onPaymentCreationStart?.()},abortPaymentCreation:()=>{}})},onSuccess(a){Fi(i,a)},onError(){Fi(i)}});let o=typeof r=="string"?document.getElementById(r):r;if(!o)throw new H({code:El.CONTAINER_NOT_FOUND,message:`Container with id "${r}" not found in the DOM.`});await e.render(o)}})}}function Gl(i,t,e){return{start:()=>ro(i,e)}}function ql(i,t){return{"Content-Type":"application/json","primer-client-token":i,"primer-sdk-client":"WEB","primer-sdk-version":"0.0.0-local","primer-sdk-checkout-session-id":t,"x-api-version":"2.4"}}function Sa(i,t,e="POST",r=""){let o=i.error,a=new Error(o?.description||o?.message||"Unexpected error"),n=Wl(t),l=Jl({summary:"Request failed for",method:e,path:r,details:JSON.stringify(i,null,2),code:n});return new rr({message:l,code:n,error:a,response:i})}var Wl=i=>i>=500?ye.SERVER_ERROR:{400:ye.BAD_REQUEST,401:ye.UNAUTHORIZED,403:ye.FORBIDDEN,404:ye.NOT_FOUND,408:ye.REQUEST_TIMEOUT,409:ye.CONFLICT,422:ye.VALIDATION_ERROR}[i]??ye.REQUEST_ERROR,Jl=({summary:i,method:t,path:e,code:r,details:o})=>`${i} ${t} ${e} with code ${r}"
|
|
41
|
+
`,r=document.createElement("style");r.id=t,r.textContent=e,document.head.appendChild(r)}},El={CONTAINER_NOT_FOUND:"CONTAINER_NOT_FOUND"},zr={MISSING_PARAMETER:"MISSING_PARAMETER",INVALID_PARAMETER:"INVALID_PARAMETER",INVALID_USAGE:"INVALID_USAGE"},ye={UNAUTHORIZED:"UNAUTHORIZED",FORBIDDEN:"FORBIDDEN",NOT_FOUND:"NOT_FOUND",CONFLICT:"CONFLICT",REQUEST_TIMEOUT:"REQUEST_TIMEOUT",VALIDATION_ERROR:"REQUEST_VALIDATION_ERROR",SERVER_ERROR:"SERVER_ERROR",BAD_REQUEST:"BAD_REQUEST",REQUEST_ERROR:"REQUEST_ERROR",UNEXPECTED:"UNEXPECTED"},re={PAYMENT_CREATION_ABORTED:"PAYMENT_CREATION_ABORTED",PAYMENT_FAILED:"PAYMENT_FAILED",RESUME_FAILED:"RESUME_FAILED",TOKENIZATION_ERROR:"TOKENIZATION_ERROR"},ga={MISSING_CLIENT_TOKEN:"MISSING_CLIENT_TOKEN",INVALID_CLIENT_TOKEN:"INVALID_CLIENT_TOKEN"},Ur={VAULT_ERROR:"VAULT_ERROR",TOKENIZATION_ERROR:"TOKENIZATION_ERROR"},to=function(i){return i.REQUEST_ERROR="RequestError",i.TOKENIZATION_ERROR="TokenizationError",i.CLIENT_ERROR="ClientError",i.REQUEST_VALIDATION_ERROR="RequestValidationError",i.CONFIGURATION_ERROR="ConfigurationError",i.PCI_ERROR="PciError",i}({}),tr=class extends Error{constructor(e,r,o,a){super(r);I(this,"code");I(this,"error");this.name=e,this.code=o,this.error=a}toJSON(){return{name:this.name,message:this.message,code:this.code,stack:this.stack}}},rr=class extends tr{constructor({message:e,error:r,response:o,code:a=ye.REQUEST_ERROR}){let n=r??new Error(e);super(to.REQUEST_ERROR,e,a,n);I(this,"response");this.response=o}toJSON(){return{name:this.name,message:this.message,response:this.response,code:this.code,stack:this.stack}}},nt=class extends tr{constructor({message:e,error:r,code:o=ye.UNEXPECTED,suggestion:a,paymentMethod:n}){let l=r??new Error(e);super(to.TOKENIZATION_ERROR,e,o,l);I(this,"suggestion");I(this,"paymentMethod");this.suggestion=a,this.paymentMethod=n}toJSON(){return{name:this.name,message:this.message,code:this.code,paymentMethod:this.paymentMethod,suggestion:this.suggestion,stack:this.stack}}},H=class extends tr{constructor({message:e,error:r,code:o=ye.UNEXPECTED,suggestion:a,paymentMethod:n}){let l=r??new Error(e);super(to.CLIENT_ERROR,e,o,l);I(this,"suggestion");I(this,"paymentMethod");this.suggestion=a,this.paymentMethod=n}toJSON(){return{name:this.name,message:this.message,code:this.code,paymentMethod:this.paymentMethod,suggestion:this.suggestion,stack:this.stack}}},xt=class{constructor(t,e){I(this,"config");I(this,"context");this.config=Object.freeze(t),this.context=e}async tokenizeVaulted(t){let{error:e,data:r}=await this.context.pciApi.postPaymentInstrumentsExchange(t);if(e||!r)throw e??new H({code:re.TOKENIZATION_ERROR,message:"Unable to tokenize vaulted payment method",paymentMethod:this.config.type});return r}async setup(){return!0}async start(){}async render(t){O.warn(`Render not implemented for ${this.config.type}`)}async handleRequiredAction(t,e){return t.requiredAction?.name==="3DS_AUTHENTICATION"?new Hi(this.context,e).handleRequiredAction(t):t.requiredAction?.name==="PROCESSOR_3DS"?new Bi(this.context,e).handleRequiredAction(t):t}async createPayment(t){let{error:e,data:r}=await this.context.pciApi.postCreatePayment(t);if(e||!r)throw e??new H({code:re.PAYMENT_FAILED,message:"Unable to create payment"});return r.requiredAction?.clientToken&&this.context.updateClientToken(r.requiredAction.clientToken),r}async resumePayment(t,e){let{error:r,data:o}=await this.context.pciApi.postResumePayment(t,e);if(r||!o)throw r??new H({code:re.RESUME_FAILED,message:"Unable to resume payment"});return o}};function Al(i){return i&&i.includes("_")?i.split("_").join("-"):i}var xl=JSON.parse('{"USD":{"b":2},"CAD":{"b":2},"EUR":{"b":2},"AED":{"b":2},"AFN":{"b":0},"ALL":{"b":0},"AMD":{"b":0},"ARS":{"b":2},"AUD":{"b":2},"AZN":{"b":2},"BAM":{"b":2},"BDT":{"b":2},"BGN":{"b":2},"BHD":{"b":3},"BIF":{"b":0},"BND":{"b":2},"BOB":{"b":2},"BRL":{"b":2},"BWP":{"b":2},"BYN":{"b":2},"BZD":{"b":2},"CDF":{"b":2},"CHF":{"b":2},"CLP":{"b":0},"CNY":{"b":2},"COP":{"b":2},"CRC":{"b":2},"CVE":{"b":2},"CZK":{"b":2},"DJF":{"b":0},"DKK":{"b":2},"DOP":{"b":2},"DZD":{"b":2},"EEK":{"b":2},"EGP":{"b":2},"ERN":{"b":2},"ETB":{"b":2},"GBP":{"b":2},"GEL":{"b":2},"GHS":{"b":2},"GNF":{"b":0},"GTQ":{"b":2},"HKD":{"b":2},"HNL":{"b":2},"HRK":{"b":2},"HUF":{"b":2},"IDR":{"b":2},"ILS":{"b":2},"INR":{"b":2},"IQD":{"b":0},"IRR":{"b":0},"ISK":{"b":0},"JMD":{"b":2},"JOD":{"b":3},"JPY":{"b":0},"KES":{"b":2},"KHR":{"b":2},"KMF":{"b":0},"KRW":{"b":0},"KWD":{"b":3},"KZT":{"b":2},"LBP":{"b":0},"LKR":{"b":2},"LTL":{"b":2},"LVL":{"b":2},"LYD":{"b":3},"MAD":{"b":2},"MDL":{"b":2},"MGA":{"b":0},"MKD":{"b":2},"MMK":{"b":0},"MOP":{"b":2},"MUR":{"b":0},"MXN":{"b":2},"MYR":{"b":2},"MZN":{"b":2},"NAD":{"b":2},"NGN":{"b":2},"NIO":{"b":2},"NOK":{"b":2},"NPR":{"b":2},"NZD":{"b":2},"OMR":{"b":3},"PAB":{"b":2},"PEN":{"b":2},"PHP":{"b":2},"PKR":{"b":0},"PLN":{"b":2},"PYG":{"b":0},"QAR":{"b":2},"RON":{"b":2},"RSD":{"b":2},"RUB":{"b":2},"RWF":{"b":0},"SAR":{"b":2},"SDG":{"b":2},"SEK":{"b":2},"SGD":{"b":2},"SOS":{"b":0},"SYP":{"b":0},"THB":{"b":2},"TND":{"b":3},"TOP":{"b":2},"TRY":{"b":2},"TTD":{"b":2},"TWD":{"b":2},"TZS":{"b":0},"UAH":{"b":2},"UGX":{"b":0},"UYU":{"b":2},"UZS":{"b":0},"VEF":{"b":2},"VND":{"b":0},"XAF":{"b":0},"XOF":{"b":0},"YER":{"b":0},"ZAR":{"b":2},"ZMK":{"b":0},"ZWL":{"b":0}}'),Sl=2,_l=xl;function Pl(i){if(!i)return null;let t=_l[i];return t?{decimalDigits:t.b}:null}function ja(i,t,e){let r=Al(i),o=Pl(e)?.decimalDigits??Sl;function a(n){return new Intl.NumberFormat(r,{style:"currency",currency:e,currencyDisplay:n}).format(t/10**o)}try{return a("narrowSymbol")}catch{return a("symbol")}}function Fi(i,t){return ja("en",i,t).replace(/[^0-9.]/g,"").replace(/(\..*)\./g,"$1")}var va=5,jr=class extends xt{constructor(){super(...arguments);I(this,"applePaySession",null);I(this,"callbacks",{onStart:()=>{},onError:()=>{},onSuccess:()=>{}})}setCallbacks(e){this.callbacks=e}async tokenize(){throw new Error("ApplePay does not support direct tokenization")}async setup(){try{if(!ApplePaySession)return O.error("Apple Pay is not available in this browser context"),!1;if(!ApplePaySession.supportsVersion(va))return O.error("Apple Pay version not supported by this device"),!1;if(!ApplePaySession.canMakePayments())return O.error("This device cannot make Apple Pay payments"),!1;let e=window.location.hostname;if(!(this.config.options.merchantDomains||[]).includes(e))return O.error(`Apple Pay has not been configured for domain "${e}"`),!1}catch(e){return O.error("Failed to initialize Apple Pay:",e),!1}return!0}async render(e){let r=document.createElement("button");r.setAttribute("style","display: inline-block;width: 100%;cursor: pointer;height: 40px;-webkit-appearance: -apple-pay-button;-apple-pay-button-type: plain;-apple-pay-button-style: black"),r.setAttribute("type","button"),r.classList.add("primer-apple-pay-button"),r.addEventListener("click",this.handleButtonClick.bind(this)),e.appendChild(r)}async handleButtonClick(){try{this.callbacks.onStart(),this.applePaySession=new ApplePaySession(va,this.createPaymentRequest()),this.applePaySession.onvalidatemerchant=this.handleValidateMerchant.bind(this),this.applePaySession.onpaymentauthorized=this.handlePaymentAuthorized.bind(this),this.applePaySession.onpaymentmethodselected=this.handlePaymentMethodSelected.bind(this),this.applePaySession.oncancel=this.handleCancel.bind(this),this.applePaySession.begin()}catch(e){O.error("Error initiating Apple Pay session:",e)}}async handleValidateMerchant({validationURL:e}){if(this.applePaySession)try{let{data:r,error:o}=await this.context.coreApi.createApplePaySession({validationUrl:e,paymentMethodConfigId:this.config.id,merchantDomain:window.location.hostname});if(o||!r||!this.applePaySession)throw o??new Error("Failed to validate merchant");this.applePaySession.completeMerchantValidation(r)}catch(r){O.error("Apple Pay merchant validation failed:",r),this.abort()}}async handlePaymentMethodSelected(){if(this.applePaySession)try{let{merchantAmount:e,totalOrderAmount:r,currencyCode:o}=this.context.configuration.clientSession.order;this.applePaySession.completePaymentMethodSelection({newTotal:{label:this.config.options.merchantName,amount:Fi(e??r,o),type:"final"}})}catch(e){O.error("Error handling payment method selection:",e),this.abort()}}async handlePaymentAuthorized({payment:e}){if(this.applePaySession)try{let r={paymentMethodConfigId:this.config.id,token:e.token},o=await this.context.pciApi.postPaymentInstruments(r),a=await this.createPayment(o.data.token),n=await this.handleRequiredAction(a,this.context.dialogProvider);n.status==="SUCCESS"?(this.applePaySession.completePayment(ApplePaySession.STATUS_SUCCESS),this.callbacks.onSuccess(n)):(this.applePaySession.completePayment(ApplePaySession.STATUS_FAILURE),this.callbacks.onError()),this.applePaySession=null}catch(r){O.error("Error handling payment authorization:",r),this.applePaySession&&(this.applePaySession.completePayment(ApplePaySession.STATUS_FAILURE),this.applePaySession=null),this.callbacks.onError()}}handleCancel(){this.applePaySession=null,this.callbacks.onError()}abort(){this.applePaySession?.abort(),this.applePaySession=null,this.callbacks.onError()}createPaymentRequest(){let{countryCode:e,currencyCode:r,merchantAmount:o,totalOrderAmount:a}=this.context.configuration.clientSession.order;if(!e||!r)throw new Error("Country code and currency code are required");let n=["visa","masterCard","amex"],l=Fi(o??a,r);return{countryCode:e,currencyCode:r,merchantCapabilities:["supports3DS"],supportedNetworks:n,total:{amount:l,label:this.config.options.merchantName,type:"pending"}}}},Ka="https://sdk.primer.io/web/hosted-pages/v0.0.9",ba=!1,Tl=`${Ka}/api-controller.html`,wl=`${Ka}/hosted-input.html`,Ml="https://goat-assets.production.core.primer.io";function Ga(i,t){return btoa(JSON.stringify({checkoutSessionId:i,name:t}))}Ji("../../node_modules/card-validator/dist/index.js");var te={cardNumber:"cardNumber",cardSecurityCode:"cardSecurityCode",cardExpiryDate:"cardExpiryDate",cardholderName:"cardholderName"};Object.values(te);function Il(i){return{cardNumber:Yr(i,te.cardNumber),cardSecurityCode:Yr(i,te.cardSecurityCode),cardExpiryDate:Yr(i,te.cardExpiryDate),cardholderName:Yr(i,te.cardholderName)}}function Yr(i,t){let e=document.createElement("iframe"),r=Ga(i,t);return e.src=`${wl}#${r}`,e.setAttribute("tabindex","0"),e.setAttribute("frameBorder","0"),e.style.border="none",e.style.boxSizing="border-box",e.style.height="20px",e.style.width="100%",e.style.colorScheme="auto",e}var Kr=class extends xt{constructor(e,r){super(e,r);I(this,"iframes");this.iframes=Il(r.checkoutSessionId)}async tokenize(){let{error:e,data:r}=await this.context.pciApi.postPaymentInstruments("pci-card-form-data");if(e||!r)throw e??new nt({code:re.TOKENIZATION_ERROR,message:"Unable to tokenize payment method",paymentMethod:J.PAYMENT_CARD});return r}};function kl(i,t={}){return new Promise((e,r)=>{if(document.querySelector(`script[src="${i}"]`))return void e();let o=document.createElement("script");o.src=i,Object.entries(t).forEach(([a,n])=>{o.setAttribute(a,n)}),o.onload=()=>{e()},o.onerror=()=>{r(new Error(`Failed to load script: ${i}`))},document.head.appendChild(o)})}var Ca=2,Ea=0,Gr=class extends xt{constructor(){super(...arguments);I(this,"client");I(this,"callbacks",{onStart:()=>{},onError:()=>{},onSuccess:()=>{}});I(this,"allowedPaymentMethod",{type:"CARD",parameters:{allowedAuthMethods:["PAN_ONLY"],allowedCardNetworks:["AMEX","DISCOVER","INTERAC","JCB","MASTERCARD","VISA"]}})}setCallbacks(e){this.callbacks=e}async tokenize(){throw new nt({code:re.TOKENIZATION_ERROR,message:"Google Pay does not support direct tokenization",paymentMethod:J.GOOGLE_PAY})}async setup(){try{await kl("https://pay.google.com/gp/p/js/pay.js")}catch{return!1}if(!window.google||!window.google.payments)return O.error("Google Pay is not available in this browser context"),!1;if(this.client=new google.payments.api.PaymentsClient({environment:"TEST"}),!this.client.isReadyToPay(this.buildIsReadyToPayRequest()))return!1;let{countryCode:e,currencyCode:r}=this.context.configuration.clientSession.order;if(!e)throw new H({code:zr.MISSING_PARAMETER,message:"Cannot initialize Google Pay: missing country code",paymentMethod:J.GOOGLE_PAY});if(!r)throw new H({code:zr.MISSING_PARAMETER,message:"Cannot initialize Google Pay: missing currency code",paymentMethod:J.GOOGLE_PAY});return!0}async render(e){let r=this.client.createButton({buttonType:"buy",buttonColor:"black",buttonSizeMode:"fill",buttonRootNode:e instanceof ShadowRoot?e:void 0,onClick:this.handleButtonClick.bind(this)});e.appendChild(r)}async handleButtonClick(){this.callbacks.onStart();try{let e=this.buildPaymentDataRequest(),r=await this.client.loadPaymentData(e),{data:o,error:a}=await this.context.pciApi.postPaymentInstruments({flow:"GATEWAY",network:r.paymentMethodData.info?.cardNetwork??"OTHER",merchant_id:this.config.options.merchantId,encrypted_payload:Br.encode(r.paymentMethodData.tokenizationData.token)});if(a||!o)throw a??new nt({code:re.TOKENIZATION_ERROR,message:"Failed to tokenize payment data",paymentMethod:J.GOOGLE_PAY});let n=await this.createPayment(o.token);n.status==="SUCCESS"?this.callbacks.onSuccess(n):this.callbacks.onError()}catch(e){throw this.callbacks.onError(),O.error("Google Pay error",e),e}}async handlePaymentDataChanged(e){return{}}buildIsReadyToPayRequest(){return{apiVersion:Ca,apiVersionMinor:Ea,allowedPaymentMethods:[this.allowedPaymentMethod]}}buildPaymentDataRequest(){let{countryCode:e,currencyCode:r,merchantAmount:o,totalOrderAmount:a}=this.context.configuration.clientSession.order;return{apiVersion:Ca,apiVersionMinor:Ea,transactionInfo:{countryCode:e,currencyCode:r,displayItems:[],totalPriceStatus:"FINAL",totalPrice:Fi(o??a,r),totalPriceLabel:"Total"},merchantInfo:{merchantId:this.config.options.merchantId,merchantName:this.config.options.merchantName},allowedPaymentMethods:[{...this.allowedPaymentMethod,tokenizationSpecification:{type:"PAYMENT_GATEWAY",parameters:{gateway:"primer",gatewayMerchantId:this.config.options.merchantId}}}]}}};function Nl(i,t){var e={};for(var r in i)Object.prototype.hasOwnProperty.call(i,r)&&t.indexOf(r)<0&&(e[r]=i[r]);if(i!=null&&typeof Object.getOwnPropertySymbols=="function")for(var o=0,r=Object.getOwnPropertySymbols(i);o<r.length;o++)t.indexOf(r[o])<0&&Object.prototype.propertyIsEnumerable.call(i,r[o])&&(e[r[o]]=i[r[o]]);return e}function Ll(i,t){var e=document.querySelector('script[src="'.concat(i,'"]'));if(e===null)return null;var r=qa(i,t),o=e.cloneNode();if(delete o.dataset.uidAuto,Object.keys(o.dataset).length!==Object.keys(r.dataset).length)return null;var a=!0;return Object.keys(o.dataset).forEach(function(n){o.dataset[n]!==r.dataset[n]&&(a=!1)}),a?e:null}function Rl(i){var t=i.url,e=i.attributes,r=i.onSuccess,o=i.onError,a=qa(t,e);a.onerror=o,a.onload=r,document.head.insertBefore(a,document.head.firstElementChild)}function Ol(i){var t=i.sdkBaseUrl,e=i.environment,r=Nl(i,["sdkBaseUrl","environment"]),o=t||Vl(e),a=r,n=Object.keys(a).filter(function(c){return a[c]!==void 0&&a[c]!==null&&a[c]!==""}).reduce(function(c,u){var h=a[u].toString();return u=Dl(u),u.substring(0,4)==="data"||u==="crossorigin"?c.attributes[u]=h:c.queryParams[u]=h,c},{queryParams:{},attributes:{}}),l=n.queryParams,s=n.attributes;return l["merchant-id"]&&l["merchant-id"].indexOf(",")!==-1&&(s["data-merchant-id"]=l["merchant-id"],l["merchant-id"]="*"),{url:"".concat(o,"?").concat($l(l)),attributes:s}}function Dl(i){var t=function(e,r){return(r?"-":"")+e.toLowerCase()};return i.replace(/[A-Z]+(?![a-z])|[A-Z]/g,t)}function $l(i){var t="";return Object.keys(i).forEach(function(e){t.length!==0&&(t+="&"),t+=e+"="+i[e]}),t}function Vl(i){return i==="sandbox"?"https://www.sandbox.paypal.com/sdk/js":"https://www.paypal.com/sdk/js"}function qa(i,t){t===void 0&&(t={});var e=document.createElement("script");return e.src=i,Object.keys(t).forEach(function(r){e.setAttribute(r,t[r]),r==="data-csp-nonce"&&e.setAttribute("nonce",t["data-csp-nonce"])}),e}function Ul(i,t){if(t===void 0&&(t=Promise),Wa(i,t),typeof document>"u")return t.resolve(null);var e=Ol(i),r=e.url,o=e.attributes,a=o["data-namespace"]||"paypal",n=Aa(a);return o["data-js-sdk-library"]||(o["data-js-sdk-library"]="paypal-js"),Ll(r,o)&&n?t.resolve(n):Yl({url:r,attributes:o},t).then(function(){var l=Aa(a);if(l)return l;throw new Error("The window.".concat(a," global variable is not available."))})}function Yl(i,t){t===void 0&&(t=Promise),Wa(i,t);var e=i.url,r=i.attributes;if(typeof e!="string"||e.length===0)throw new Error("Invalid url.");if(r!==void 0&&typeof r!="object")throw new Error("Expected attributes to be an object.");return new t(function(o,a){if(typeof document>"u")return o();Rl({url:e,attributes:r,onSuccess:function(){return o()},onError:function(){var n=new Error('The script "'.concat(e,'" failed to load. Check the HTTP status code and response body in DevTools to learn more.'));return a(n)}})})}function Aa(i){return window[i]}function Wa(i,t){if(typeof i!="object"||i===null)throw new Error("Expected an options object.");var e=i.environment;if(e&&e!=="production"&&e!=="sandbox")throw new Error('The `environment` option must be either "production" or "sandbox".');if(t!==void 0&&typeof t!="function")throw new Error("Expected PromisePonyfill to be a function.")}var qr=class extends xt{constructor(){super(...arguments);I(this,"paypalInstance");I(this,"dataNamespace",ge());I(this,"callbacks",{onStart:()=>{},onError:()=>{},onSuccess:()=>{}})}setCallbacks(e){this.callbacks=e}async tokenize(){throw new nt({message:"PayPal does not support direct tokenization",code:re.TOKENIZATION_ERROR,paymentMethod:J.PAYPAL})}async setup(){let{clientId:e,intent:r}=this.config.options;if(!e||!r)return!1;try{let o=await Ul({dataNamespace:this.dataNamespace,clientId:e,currency:this.context.configuration.clientSession.order.currencyCode,components:["buttons","funding-eligibility"],disableFunding:["bancontact","card","credit"],intent:r??"authorize"});return o?(this.paypalInstance=o,!0):!1}catch{return!1}}async render(e){if(!this.paypalInstance.Buttons)return;let r=this.paypalInstance.Buttons({style:{color:"gold",shape:"rect",label:"paypal",tagline:!1},createOrder:this.handleCreateOrder.bind(this),onInit:this.handleInit.bind(this),onClick:this.handleClick.bind(this),onApprove:this.handleApprove.bind(this),onCancel:this.handleCancel.bind(this),onError:this.handleError.bind(this)});if(!r.isEligible())throw new H({message:"PayPal Buttons are not eligible for rendering",code:zr.INVALID_USAGE,paymentMethod:J.PAYPAL});await r.render(e)}handleInit(e,r){}handleClick(e,r){return Wr({eventName:"PAYMENT_METHOD_SELECTION",paymentMethod:"PAYPAL"}),r.resolve()}async handleCreateOrder(){this.callbacks.onStart(),await this.context.clientSessionApi.selectPaymentMethod(this.config.type);let{data:e,error:r}=await this.context.coreApi.createPaypalOrder(this.buildCreateOrderRequestBody());if(r||!e)throw r??new H({message:"Unable to create PayPal order",code:re.PAYMENT_FAILED,paymentMethod:J.PAYPAL});return e.orderId}async handleApprove(e,r){let o=null;try{o=await r?.order?.get()??null}catch{}let{error:a,data:n}=await this.context.pciApi.postPaymentInstruments({external_payer_info:{email:o?.payment_source?.paypal?.email_address,external_payer_id:e.payerID??void 0},paypal_order_id:e.orderID,paypal_status:o?.status});if(a||!n)throw a??new nt({message:"Unable to create payment instrument",code:re.TOKENIZATION_ERROR,paymentMethod:J.PAYPAL});let l=await this.createPayment(n.token);this.callbacks.onSuccess(l)}handleCancel(){this.context.clientSessionApi.unselectPaymentMethod()}handleError(e){O.error("PayPal error:",e)}buildCreateOrderRequestBody(){let{order:{currencyCode:e,merchantAmount:r,totalOrderAmount:o,shipping:a,lineItems:n=[],fees:l=[]}}=this.context.configuration.clientSession;if(!e)throw new H({message:"Currency code is not provided",code:zr.MISSING_PARAMETER,paymentMethod:J.PAYPAL});let s={amount:r??o,currencyCode:e,paymentMethodConfigId:this.config.id,amountBreakdown:{}},c=!n.some(({description:u})=>!u);if(c&&(s.items=n.map(({description:u,taxAmount:h,amount:b,quantity:E})=>{let x=h?Math.floor(h/E):0;return{name:u,unit_amount:{value:b,currency_code:e},quantity:E.toString(),tax:{value:x,currency_code:e}}})),c&&n.length){let u=n.reduce((x,{amount:A,quantity:T})=>x+A*T,0),h=l?.reduce?.((x,{amount:A})=>x+(A??0),0),b=n?.reduce((x,{discountAmount:A})=>x+(A??0),0),E=n?.reduce((x,{taxAmount:A,quantity:T})=>x+(A??0*T),0);s.amountBreakdown={item_total:{value:u,currency_code:e},tax_total:{value:E,currency_code:e},handling:{value:h??0,currency_code:e},shipping:{value:a?.amount??0,currency_code:e},discount:{value:b,currency_code:e}}}return s}};async function Hl(i,t,e){try{Wr({eventName:"PAYMENT_PROCESSING_STARTED",paymentMethod:i.config.type}),e||await i.start();let r=e?await i.tokenizeVaulted(e.id):await i.tokenize(),o=await i.createPayment(r.token);return await i.handleRequiredAction(o,t)}catch(r){throw r}}var zi=(i,t,e)=>{let r=e;if(t?.status==="FAILED"&&(r=new H({code:re.PAYMENT_FAILED,message:`The payment "${t.id}" was created but failed to be processed. Check the payment id ${t.id} using the Payments API or search for the payment on your Dashboard for further explanations.`})),t?.checkoutOutcome==="CHECKOUT_FAILURE"&&(r=new H({code:re.PAYMENT_FAILED,message:`The payment "${t.id}" was created but failed to be processed. Check the payment id ${t.id} using the Payments API or search for the payment on your Dashboard for further explanations.`})),t?.status==="PENDING"&&!t.requiredAction?.clientToken&&(r=new H({code:re.PAYMENT_FAILED,message:`The payment "${t.id}" ended up in a "PENDING" state without any required action. The SDK does not know how to handle this state. Check the payment id ${t.id} using the Payments API or search for the payment on your Dashboard for further explanations.`})),t?.status==="SUCCESS"&&t.checkoutOutcome!=="CHECKOUT_FAILURE"||t?.status==="PENDING"&&t.showSuccessCheckoutOnPendingPayment||t?.checkoutOutcome==="CHECKOUT_COMPLETE")return void i.onCheckoutComplete?.({payment:t});i.onCheckoutFail?.(r||new H({code:re.PAYMENT_FAILED,message:`The payment${t?.id?` "${t.id}"`:""} is in an inconsistent state without any required action. The SDK does not know how to handle this state. Please contact Primer.`}),{payment:t??void 0})},Bl=async(i,t)=>{if(!i.onBeforePaymentCreate)return!0;let e=setTimeout(()=>{O.warn("onBeforePaymentCreate did not resolve within 10 seconds. Primer SDK will remain in a loading state until `continuePaymentCreation` or `abortPaymentCreation` is called.")},1e4);return new Promise(r=>{i.onBeforePaymentCreate({paymentMethodType:t},{continuePaymentCreation:()=>{clearTimeout(e),O.log(`Continuing payment creation for ${t}`),r(!0)},abortPaymentCreation:()=>{clearTimeout(e),O.log(`Aborting payment creation for ${t}`),r(!1)}})})};async function ro(i,t,e){if(!await Bl(i,t.config.type))return void i.onCheckoutFail?.(new H({message:"Payment creation aborted",code:re.PAYMENT_CREATION_ABORTED,paymentMethod:t.config.type}),{});i.onPaymentCreationStart?.();let o,a;try{a=await Hl(t,t.context.dialogProvider,e)}catch(n){o=n}finally{zi(i,a,o)}}var xa=Symbol("PROXY_MARKER");function Ja({namespace:i,onMessage:t,sendMessage:e}){function r(o,a){return new Proxy(o,{get(n,l,s){if(n[xa])return Reflect.get(n,l,s);let c=()=>{};return c[xa]=!0,r(c,[...a,l])},apply(n,l,s){return new Promise(async(c,u)=>{try{let h=[],b=s.map(T=>{if(typeof T!="function")return T;{let w=ge();return h.push(w),t(N=>{N.namespace===i&&N.sender===$i.PROVIDER&&N.type===Di.CALLBACK&&N.id===w&&T(...N.data)}),w}}),E=ge(),x=t(T=>{T.namespace===i&&T.sender===$i.PROVIDER&&T.type===Di.APPLY&&T.id===E&&(T.error?u(new Error(T.error)):c(T.data),x?.())}),A={type:Di.APPLY,sender:$i.INJECTOR,id:E,path:a,args:b,callbackIds:h,timeStamp:Date.now(),namespace:i};e(A)}catch(h){u(h)}})}})}return r({},[])}var Di={APPLY:"apply",CALLBACK:"callback"},$i={PROVIDER:"provider",INJECTOR:"injector"};function Fl(i,t,e,r={}){let o=[],a="LOCAL",n={[te.cardNumber]:void 0,[te.cardExpiryDate]:void 0,[te.cardSecurityCode]:void 0,[te.cardholderName]:void 0},l={createHostedInputs:()=>{let s=c=>{let u=new Map;return{getOptions:()=>{},setOptions:h=>{n[c]?.setOptions(h)},render:(h,b)=>{let E=e.iframes[c];if(!E)return O.error(`No iframe found for ${c}`),Promise.resolve();let x;return x=typeof h=="string"?document.getElementById(h):h,x?(x.appendChild(E),E.onload=()=>{n[c]=Ja({namespace:`${t.checkoutSessionId}-${c}`,onMessage:A=>{let T=w=>A(w.data);return window.addEventListener("message",T),()=>window.removeEventListener("message",T)},sendMessage:A=>{E.contentWindow.postMessage(A,"*")}}),n[c].setOptions({...b,orderedAllowedCardNetworks:t.configuration.clientSession.paymentMethod.orderedAllowedCardNetworks,cardholderName:i.cardholderName??i.card?.cardholderName}),n[c].setOnBlur(()=>{try{u.get("blur")?.()}catch(A){O.error(`Blur listener error for ${c}: ${A instanceof Error?A.message:String(A)}`)}}),n[c].setOnFocus(()=>{try{u.get("focus")?.()}catch(A){O.error(`Focus listener error for ${c}: ${A instanceof Error?A.message:String(A)}`)}}),n[c].setOnInput(A=>{let T={...A,errorCode:A.error,active:A.focused};try{u.get("input")?.(T),u.get("change")?.(T)}catch(w){O.error(`Input listener error for ${c}:`,{inputType:c,error:w,data:T})}}),c===te.cardNumber&&(n[c].setBinDataApiConfig(t.configuration.binDataUrl,t.decodedClientToken.accessToken),n[c].setOnCardNetworksChange((A,T)=>{(T!==a||zl(o,A))&&(o=A,a=T,r.onCardNetworksChange?.(jl({networks:o,source:a},t.configuration.clientSession.paymentMethod.orderedAllowedCardNetworks)))}))},Promise.resolve()):(O.error(`Container not found for ${c}:`,h),Promise.resolve())},addEventListener:(h,b)=>{u.set(h,b)},focus:()=>{let h=e.iframes[c];if(h&&h.contentWindow)try{n[c]?.focus()}catch(b){O.error(`Focus send error for ${c}:`,b)}else O.warn(`Focus failed for ${c} - iframe not available`)},blur:()=>{let h=e.iframes[c];if(h&&h.contentWindow)try{n[c]?.blur()}catch(b){O.error(`Blur send error for ${c}:`,b)}},setDisabled:h=>{n[c]?.setDisabled(h)},setCardholderName:h=>{n[c]?.setCardholderName(h)}}};return{cardNumberInput:s(te.cardNumber),cardholderNameInput:s(te.cardholderName),expiryInput:s(te.cardExpiryDate),cvvInput:s(te.cardSecurityCode)}},removeHostedInputs:()=>{e.iframes.cardNumber.remove(),e.iframes.cardSecurityCode.remove(),e.iframes.cardExpiryDate.remove(),e.iframes.cardholderName.remove()},submit:async s=>{if((await l.validate()).valid)return await t.apiController.setPreferredNetwork(s?.cardNetwork),ro(i,e)},validate:async()=>{let s=(await Promise.all(Object.entries(n).map(([u,h])=>h?.getFieldState().then(b=>[u,b]).catch(()=>{})))).filter(u=>u!==void 0),c=[];for(let[u,h]of s)!h.valid&&h.error&&c.push({field:u,name:u,error:h.error,message:h.error});return{valid:c.length===0,validationErrors:c}},reset:()=>{Object.values(n).forEach(s=>{s?.reset()}),t.apiController.setPreferredNetwork(void 0)},setCardholderName:s=>{try{n[te.cardholderName]?.setCardholderName(s)}catch(c){O.error("SetCardholderName error:",c)}}};return l}function zl(i,t){if(i.length!==t.length)return!0;let e=t.map(({network:r})=>r);return!i.every(({network:r})=>e.includes(r))}function jl({networks:i,source:t},e){let r=e,o=new Set(r.map(s=>Xi(s).backend)),a=i.map(s=>({...s,allowed:o.has(s.network)})).sort((s,c)=>s.allowed?r.indexOf(s.network)-r.indexOf(c.network):1),n=a.filter(s=>s.allowed),l=t==="REMOTE"&&n.length>1;return{detectedCardNetworks:{items:a,preferred:n[0]},...l&&{selectableCardNetworks:{items:n,preferred:n[0]}},source:t}}function Kl(i,t,e){return{createButton:()=>({render:async r=>{e.setCallbacks({onStart:()=>{i.onBeforePaymentCreate?.({paymentMethodType:e.config.type},{continuePaymentCreation:()=>{i.onPaymentCreationStart?.()},abortPaymentCreation:()=>{}})},onSuccess(a){zi(i,a)},onError(){zi(i)}});let o=typeof r=="string"?document.getElementById(r):r;if(!o)throw new H({code:El.CONTAINER_NOT_FOUND,message:`Container with id "${r}" not found in the DOM.`});await e.render(o)}})}}function Gl(i,t,e){return{start:()=>ro(i,e)}}function ql(i,t){return{"Content-Type":"application/json","primer-client-token":i,"primer-sdk-client":"WEB","primer-sdk-version":"0.0.0-local","primer-sdk-checkout-session-id":t,"x-api-version":"2.4"}}function Sa(i,t,e="POST",r=""){let o=i.error,a=new Error(o?.description||o?.message||"Unexpected error"),n=Wl(t),l=Jl({summary:"Request failed for",method:e,path:r,details:JSON.stringify(i,null,2),code:n});return new rr({message:l,code:n,error:a,response:i})}var Wl=i=>i>=500?ye.SERVER_ERROR:{400:ye.BAD_REQUEST,401:ye.UNAUTHORIZED,403:ye.FORBIDDEN,404:ye.NOT_FOUND,408:ye.REQUEST_TIMEOUT,409:ye.CONFLICT,422:ye.VALIDATION_ERROR}[i]??ye.REQUEST_ERROR,Jl=({summary:i,method:t,path:e,code:r,details:o})=>`${i} ${t} ${e} with code ${r}"
|
|
42
42
|
|
|
43
43
|
Details:
|
|
44
|
-
${o}`;function Zl(i,t,e){if(e?.status&&e.status>=400&&e.status<500)return!1;if(e?.status&&e.status>=500)return!0;if(i instanceof Error){let r=i.message.toLowerCase();return r.includes("network")||r.includes("timeout")||r.includes("connection")}return!1}function Xl(i){let a=1e3*Math.pow(1.1,i),n=.1*a*(Math.random()-.5);return a=Math.max(0,a+n),Math.min(a,3e4)}var Ql={attempts:3,retryCondition:Zl,delayCalculator:Xl,totalTimeout:3e5};async function ed(i,t,e){let r={...Ql,...t.retry},o=[],a=Date.now();for(let s=0;s<=r.attempts;s++)try{let c=await i();if(!c.error)return{...c,retryHistory:o.length>0?o:void 0};if(s===r.attempts||!r.retryCondition(c.error,s,c))return{...c,retryHistory:o};let u=r.delayCalculator(s);if(o.push({attempt:s+1,delay:u,error:c.error,timestamp:Date.now()}),Date.now()-a+u>r.totalTimeout){let h=Sa({...c,error:new Error("Retry total timeout exceeded")},408,t.method,e||"");return{...c,error:{...h,name:h.name,message:h.message,stack:h.stack,__sdkErrorType:h.name,__needsReconstruction:!0},retryHistory:o}}await Jr(u)}catch(c){o.push({attempt:s+1,delay:0,error:c,timestamp:Date.now()})}let n=o[o.length-1]?.error,l;if(n){let s=Sa({id:t.id,error:n},500,t.method,e||"");l={...s,name:s.name,message:s.message,stack:s.stack,__sdkErrorType:s.name,__needsReconstruction:!0}}return{id:t.id,error:l,retryHistory:o}}var kt=class{constructor(t,e="",r={},o){I(this,"fetch");I(this,"baseUrl");I(this,"defaultHeaders");I(this,"checkoutSessionId");this.fetch=t,this.baseUrl=e,this.defaultHeaders=Object.freeze({...r}),this.checkoutSessionId=o}setDefaultHeader(t,e){this.defaultHeaders={...this.defaultHeaders,[t]:e}}async executeFetch(t,e){let r={...e,headers:{...this.defaultHeaders,...e?.headers},checkoutSessionId:this.checkoutSessionId,id:ge()};return e?.retry?ed(()=>this.fetch(t,{...r,retry:void 0}),r,t):this.fetch(t,r)}async get(t,e){return this.executeFetch(t,{...e,method:"GET"})}async post(t,e,r){return this.executeFetch(t,{...r,method:"POST",body:JSON.stringify(e)})}async delete(t,e){return this.executeFetch(t,{...e,method:"DELETE"})}},ji=class extends kt{constructor(){super(...arguments);I(this,"configurationSubscribers",new Set);I(this,"_configuration")}async getConfiguration(){let e=await this.get(this.baseUrl);return e.data&&(this._configuration=e.data),e}subscribe(e){return this.configurationSubscribers.add(e),()=>{this.configurationSubscribers.delete(e)}}get configuration(){return this._configuration}set configuration(e){this._configuration=e,this.configurationSubscribers.forEach(r=>r(this._configuration))}},Ki=class extends kt{async getPaymentInstruments(){return this.get(`${this.baseUrl}/payment-instruments`)}async postPaymentInstruments(t){return this.post(`${this.baseUrl}/payment-instruments`,t==="pci-card-form-data"?t:{paymentInstrument:t})}async postPaymentInstrumentsExchange(t){return this.post(`${this.baseUrl}/payment-instruments/${t}/exchange`,{})}async postCreatePayment(t){return this.post(`${this.baseUrl}/payments`,{paymentMethodToken:t})}async postResumePayment(t,e){return this.post(`${this.baseUrl}/payments/${t}/resume`,{resumeToken:e})}async post3dsAuth(t,e){return this.post(`${this.baseUrl}/3ds/${t}/auth`,e,{retry:{attempts:15}})}async post3dsContinue(t){return this.post(`${this.baseUrl}/3ds/${t}/continue`,{platform:"WEB",status:"FAILURE"})}async get3dsResumeStatus(t){return this.get(t)}async deletePaymentInstrument(t){return this.delete(`${this.baseUrl}/payment-instruments/${t}/vault`)}async postClientSessionActions(t){return this.post(`${this.baseUrl}/client-session/actions`,{actions:t})}async getResumeStatus(t){return this.get(t)}};async function td(i){return new Promise((t,e)=>{let r=Ga(i,"api"),o=`${Tl}#${r}`,a=document.querySelector(`iframe[src="${o}"]`)??document.createElement("iframe");a.parentElement?t(a):(a.style.display="none",a.onload=()=>t(a),a.onerror=n=>{e(new Error(`Failed to initialize Primer SDK: ${n}`))},a.src=o,document.body.appendChild(a))})}var Gi=class extends kt{constructor(){super(...arguments);I(this,"onClientSessionUpdate")}setOnClientSessionUpdate(e){this.onClientSessionUpdate=e}async postClientSessionActions(e){if(e.length===0)return Promise.resolve({data:void 0,headers:{},status:200,id:"",requestId:"",type:"http-response"});let r=await this.post(`${this.baseUrl}/client-session/actions`,{actions:e}),{data:o}=r;return o&&this.onClientSessionUpdate?.(o),r}async selectPaymentMethod(e,r={}){return this.postClientSessionActions([{type:"SELECT_PAYMENT_METHOD",params:{...r,paymentMethodType:e}}])}async unselectPaymentMethod(){return this.postClientSessionActions([{type:"UNSELECT_PAYMENT_METHOD"}])}async selectCardNetwork(e){return this.selectPaymentMethod(J.PAYMENT_CARD,{binData:this.buildCardBinData(e)})}async setBillingAddress(e){let r=this.removeEmptyStringFromObject(e);return this.postClientSessionActions([{type:"SET_BILLING_ADDRESS",params:{billingAddress:r}}])}async setShippingAddress(e,r,o){let a=[];return e&&Object.keys(e).some(l=>!!e[l])&&a.push({type:"SET_SHIPPING_ADDRESS",params:{shippingAddress:e}}),r&&a.push({type:"SET_MOBILE_NUMBER",params:{mobileNumber:r}}),o&&a.push({type:"SET_EMAIL_ADDRESS",params:{emailAddress:o}}),this.postClientSessionActions(a)}async selectShippingMethod(e){return this.postClientSessionActions([{type:"SELECT_SHIPPING_METHOD",params:{shippingMethodId:e}}])}async setCustomerDetails({emailAddress:e,firstName:r,lastName:o}){let a=[];return e&&a.push({type:"SET_EMAIL_ADDRESS",params:{emailAddress:e}}),r&&a.push({type:"SET_CUSTOMER_FIRST_NAME",params:{firstName:r}}),o&&a.push({type:"SET_CUSTOMER_LAST_NAME",params:{lastName:o}}),this.postClientSessionActions(a)}buildCardBinData(e){let{backend:r}=Xi(e);return{network:r,issuer_name:null,product_code:r,product_name:r,product_usage_type:"UNKNOWN",account_number_type:"UNKNOWN",issuer_country_code:null,account_funding_type:"UNKNOWN",issuer_currency_code:null,regional_restriction:"UNKNOWN",prepaid_reloadable_indicator:"NOT_APPLICABLE"}}removeEmptyStringFromObject(e){let r={...e};for(let o in r)r[o]===""?delete r[o]:typeof r[o]=="object"&&r[o]!==null&&!Array.isArray(r[o])&&(r[o]=this.removeEmptyStringFromObject(r[o]));return r}},qi=class extends kt{async createPaypalOrder(t){return this.post(`${this.baseUrl}/paypal/orders/create`,t)}async createApplePaySession(t){return this.post(`${this.baseUrl}/apple-pay/sessions`,t)}};async function rd(i,{locale:t,dialogProvider:e}){let r=ge(),o=er(i),a=await td(r),n=Ja({namespace:`api-controller-${r}`,onMessage:E=>{let A=x=>E(x.data);return window.addEventListener("message",A),()=>window.removeEventListener("message",A)},sendMessage:E=>{a.contentWindow.postMessage(E,"*")}}),l=ql(o.accessToken,r),s=new ji(n.fetch,o.configurationUrl,l,r),{error:c}=await s.getConfiguration();if(c||!s.configuration)throw new Error(`Failed to fetch configuration: ${c}`);let u=new Ki(n.fetch,s.configuration.pciUrl,l,r),h=new qi(n.fetch,s.configuration.coreUrl,l,r),b=new Gi(n.fetch,s.configuration.pciUrl,l,r);return b.setOnClientSessionUpdate(E=>{s.configuration=E}),{get configuration(){return s.configuration},onClientConfigurationUpdate(E){return s.subscribe(E)},checkoutSessionId:r,apiController:n,configurationApi:s,pciApi:u,coreApi:h,clientSessionApi:b,dialogProvider:e,decodedClientToken:o,locale:t||navigator.language||navigator.languages[0]||"en",updateClientToken(E){try{let A=er(E);s.setDefaultHeader("primer-client-token",A.accessToken),u.setDefaultHeader("primer-client-token",A.accessToken),h.setDefaultHeader("primer-client-token",A.accessToken),b.setDefaultHeader("primer-client-token",A.accessToken)}catch{}},async refreshClientConfiguration(){let{data:E,error:A}=await s.getConfiguration();return A||!E?(O.warn("Failed to refresh client configuration:",A),!1):(s.configuration=E,!0)}}}var id=100;function od({height:i,name:t,url:e="",width:r}){let o=new Set,a=window.open(e,t,nd({height:i,width:r}));if(!a)return;function n(){a?.close(),l()}function l(){o.forEach(s=>s()),o.clear(),window.removeEventListener("beforeunload",n)}return window.addEventListener("beforeunload",n),ad(a).then(l),{close:n,focus(){a.focus()},get isOpen(){return a?.closed===!1},onClose(s){return o.add(s),()=>{o.delete(s)}},setContent(s){a.document.write(s)},setUrl(s){a.location.replace(s)}}}var ad=i=>new Promise(t=>{let e=setInterval(()=>{i.closed&&(clearInterval(e),t())},id)});function nd(i){let t=sd({parent:{left:window.screenLeft,top:window.screenTop,height:window.outerHeight,width:window.outerWidth},popup:i});return ld(t)}var sd=({parent:i,popup:t})=>({left:i.left+(i.width-t.width)/2,top:i.top+(i.height-t.height)/2,height:t.height,width:t.width}),ld=i=>Object.entries(i).map(t=>t.join("=")).join(","),Wi=class extends At{constructor(){super(...arguments);I(this,"popup")}async start(){this.openPopup()}async tokenize(){let{error:e,data:r}=await this.context.pciApi.postPaymentInstruments({type:"OFF_SESSION_PAYMENT",paymentMethodType:this.config.type,paymentMethodConfigId:this.config.id,sessionInfo:{locale:"en",platform:"WEB",browserInfo:Fa()}});if(e||!r)throw e??new nt({message:"Unable to tokenize payment method",code:re.TOKENIZATION_ERROR});return r}async handleRequiredAction(e){let r=e.requiredAction?.clientToken;if(!r)throw new rr({message:"No client token provided",code:ga.MISSING_CLIENT_TOKEN,response:{id:e.id,data:e}});let o=er(r);if(!gl(o,this.config.type))throw new rr({message:"Invalid client token",code:ga.INVALID_CLIENT_TOKEN,response:{id:e.id,data:e}});this.popup?.setUrl(o.redirectUrl);let a=new Promise(u=>{this.popup?.onClose(()=>u({id:""}))}),{promise:n,abort:l}=this.pollStatus(o.statusUrl),s=await Promise.race([a,n]);if(l(),this.popup?.close(),"error"in s)throw s.error;let c=s.id;if(!c){let u=await this.context.pciApi.getResumeStatus(o.statusUrl);if(u.error||!u.data?.id)throw u.error??new Error("Unable to get resume token");c=u.data.id}return await this.resumePayment(e.id,c)}pollStatus(e){let r=!0;return{promise:new Promise(async o=>{for(;r;){let{data:a,error:n}=await this.context.pciApi.getResumeStatus(e);if(n)return void o({error:n});if(await Jr(1e3),a?.status==="COMPLETE")return void o({id:a.id})}}),abort:()=>{r=!1}}}openPopup(){let{name:e,displayMetadata:{button:r,overlay:o,popup:a}}=this.config;this.popup=od({name:e,height:a?.height??500,width:a?.width??1e3});let n=o?.logo.colored||r?.iconUrl.colored||o?.logo.light||r?.iconUrl.light||o?.logo.dark||r?.iconUrl.dark;this.popup?.setContent(dd({name:e,logoSrc:n,logoAlt:e,message:`Loading ${e}...`}))}},dd=({name:i,logoSrc:t,logoAlt:e,message:r})=>`<html>
|
|
44
|
+
${o}`;function Zl(i,t,e){if(e?.status&&e.status>=400&&e.status<500)return!1;if(e?.status&&e.status>=500)return!0;if(i instanceof Error){let r=i.message.toLowerCase();return r.includes("network")||r.includes("timeout")||r.includes("connection")}return!1}function Xl(i){let a=1e3*Math.pow(1.1,i),n=.1*a*(Math.random()-.5);return a=Math.max(0,a+n),Math.min(a,3e4)}var Ql={attempts:3,retryCondition:Zl,delayCalculator:Xl,totalTimeout:3e5};async function ed(i,t,e){let r={...Ql,...t.retry},o=[],a=Date.now();for(let s=0;s<=r.attempts;s++)try{let c=await i();if(!c.error)return{...c,retryHistory:o.length>0?o:void 0};if(s===r.attempts||!r.retryCondition(c.error,s,c))return{...c,retryHistory:o};let u=r.delayCalculator(s);if(o.push({attempt:s+1,delay:u,error:c.error,timestamp:Date.now()}),Date.now()-a+u>r.totalTimeout){let h=Sa({...c,error:new Error("Retry total timeout exceeded")},408,t.method,e||"");return{...c,error:{...h,name:h.name,message:h.message,stack:h.stack,__sdkErrorType:h.name,__needsReconstruction:!0},retryHistory:o}}await Jr(u)}catch(c){o.push({attempt:s+1,delay:0,error:c,timestamp:Date.now()})}let n=o[o.length-1]?.error,l;if(n){let s=Sa({id:t.id,error:n},500,t.method,e||"");l={...s,name:s.name,message:s.message,stack:s.stack,__sdkErrorType:s.name,__needsReconstruction:!0}}return{id:t.id,error:l,retryHistory:o}}var kt=class{constructor(t,e="",r={},o){I(this,"fetch");I(this,"baseUrl");I(this,"defaultHeaders");I(this,"checkoutSessionId");this.fetch=t,this.baseUrl=e,this.defaultHeaders=Object.freeze({...r}),this.checkoutSessionId=o}setDefaultHeader(t,e){this.defaultHeaders={...this.defaultHeaders,[t]:e}}async executeFetch(t,e){let r={...e,headers:{...this.defaultHeaders,...e?.headers},checkoutSessionId:this.checkoutSessionId,id:ge()};return e?.retry?ed(()=>this.fetch(t,{...r,retry:void 0}),r,t):this.fetch(t,r)}async get(t,e){return this.executeFetch(t,{...e,method:"GET"})}async post(t,e,r){return this.executeFetch(t,{...r,method:"POST",body:JSON.stringify(e)})}async delete(t,e){return this.executeFetch(t,{...e,method:"DELETE"})}},ji=class extends kt{constructor(){super(...arguments);I(this,"configurationSubscribers",new Set);I(this,"_configuration")}async getConfiguration(){let e=await this.get(this.baseUrl);return e.data&&(this._configuration=e.data),e}subscribe(e){return this.configurationSubscribers.add(e),()=>{this.configurationSubscribers.delete(e)}}get configuration(){return this._configuration}set configuration(e){this._configuration=e,this.configurationSubscribers.forEach(r=>r(this._configuration))}},Ki=class extends kt{async getPaymentInstruments(){return this.get(`${this.baseUrl}/payment-instruments`)}async postPaymentInstruments(t){return this.post(`${this.baseUrl}/payment-instruments`,t==="pci-card-form-data"?t:{paymentInstrument:t})}async postPaymentInstrumentsExchange(t){return this.post(`${this.baseUrl}/payment-instruments/${t}/exchange`,{})}async postCreatePayment(t){return this.post(`${this.baseUrl}/payments`,{paymentMethodToken:t})}async postResumePayment(t,e){return this.post(`${this.baseUrl}/payments/${t}/resume`,{resumeToken:e})}async post3dsAuth(t,e){return this.post(`${this.baseUrl}/3ds/${t}/auth`,e,{retry:{attempts:15}})}async post3dsContinue(t){return this.post(`${this.baseUrl}/3ds/${t}/continue`,{platform:"WEB",status:"FAILURE"})}async get3dsResumeStatus(t){return this.get(t)}async deletePaymentInstrument(t){return this.delete(`${this.baseUrl}/payment-instruments/${t}/vault`)}async postClientSessionActions(t){return this.post(`${this.baseUrl}/client-session/actions`,{actions:t})}async getResumeStatus(t){return this.get(t)}};async function td(i){return new Promise((t,e)=>{let r=Ga(i,"api"),o=`${Tl}#${r}`,a=document.querySelector(`iframe[src="${o}"]`)??document.createElement("iframe");a.parentElement?t(a):(a.style.display="none",a.onload=()=>t(a),a.onerror=n=>{e(new Error(`Failed to initialize Primer SDK: ${n}`))},a.src=o,document.body.appendChild(a))})}var Gi=class extends kt{constructor(){super(...arguments);I(this,"onClientSessionUpdate")}setOnClientSessionUpdate(e){this.onClientSessionUpdate=e}async postClientSessionActions(e){if(e.length===0)return Promise.resolve({data:void 0,headers:{},status:200,id:"",requestId:"",type:"http-response"});let r=await this.post(`${this.baseUrl}/client-session/actions`,{actions:e}),{data:o}=r;return o&&this.onClientSessionUpdate?.(o),r}async selectPaymentMethod(e,r={}){return this.postClientSessionActions([{type:"SELECT_PAYMENT_METHOD",params:{...r,paymentMethodType:e}}])}async unselectPaymentMethod(){return this.postClientSessionActions([{type:"UNSELECT_PAYMENT_METHOD"}])}async selectCardNetwork(e){return this.selectPaymentMethod(J.PAYMENT_CARD,{binData:this.buildCardBinData(e)})}async setBillingAddress(e){let r=this.removeEmptyStringFromObject(e);return this.postClientSessionActions([{type:"SET_BILLING_ADDRESS",params:{billingAddress:r}}])}async setShippingAddress(e,r,o){let a=[];return e&&Object.keys(e).some(l=>!!e[l])&&a.push({type:"SET_SHIPPING_ADDRESS",params:{shippingAddress:e}}),r&&a.push({type:"SET_MOBILE_NUMBER",params:{mobileNumber:r}}),o&&a.push({type:"SET_EMAIL_ADDRESS",params:{emailAddress:o}}),this.postClientSessionActions(a)}async selectShippingMethod(e){return this.postClientSessionActions([{type:"SELECT_SHIPPING_METHOD",params:{shippingMethodId:e}}])}async setCustomerDetails({emailAddress:e,firstName:r,lastName:o}){let a=[];return e&&a.push({type:"SET_EMAIL_ADDRESS",params:{emailAddress:e}}),r&&a.push({type:"SET_CUSTOMER_FIRST_NAME",params:{firstName:r}}),o&&a.push({type:"SET_CUSTOMER_LAST_NAME",params:{lastName:o}}),this.postClientSessionActions(a)}buildCardBinData(e){let{backend:r}=Xi(e);return{network:r,issuer_name:null,product_code:r,product_name:r,product_usage_type:"UNKNOWN",account_number_type:"UNKNOWN",issuer_country_code:null,account_funding_type:"UNKNOWN",issuer_currency_code:null,regional_restriction:"UNKNOWN",prepaid_reloadable_indicator:"NOT_APPLICABLE"}}removeEmptyStringFromObject(e){let r={...e};for(let o in r)r[o]===""?delete r[o]:typeof r[o]=="object"&&r[o]!==null&&!Array.isArray(r[o])&&(r[o]=this.removeEmptyStringFromObject(r[o]));return r}},qi=class extends kt{async createPaypalOrder(t){return this.post(`${this.baseUrl}/paypal/orders/create`,t)}async createApplePaySession(t){return this.post(`${this.baseUrl}/apple-pay/sessions`,t)}};async function rd(i,{locale:t,dialogProvider:e}){let r=ge(),o=er(i),a=await td(r),n=Ja({namespace:`api-controller-${r}`,onMessage:E=>{let x=A=>E(A.data);return window.addEventListener("message",x),()=>window.removeEventListener("message",x)},sendMessage:E=>{a.contentWindow.postMessage(E,"*")}}),l=ql(o.accessToken,r),s=new ji(n.fetch,o.configurationUrl,l,r),{error:c}=await s.getConfiguration();if(c||!s.configuration)throw new Error(`Failed to fetch configuration: ${c}`);let u=new Ki(n.fetch,s.configuration.pciUrl,l,r),h=new qi(n.fetch,s.configuration.coreUrl,l,r),b=new Gi(n.fetch,s.configuration.pciUrl,l,r);return b.setOnClientSessionUpdate(E=>{s.configuration=E}),{get configuration(){return s.configuration},onClientConfigurationUpdate(E){return s.subscribe(E)},checkoutSessionId:r,apiController:n,configurationApi:s,pciApi:u,coreApi:h,clientSessionApi:b,dialogProvider:e,decodedClientToken:o,locale:t||navigator.language||navigator.languages[0]||"en",updateClientToken(E){try{let x=er(E);s.setDefaultHeader("primer-client-token",x.accessToken),u.setDefaultHeader("primer-client-token",x.accessToken),h.setDefaultHeader("primer-client-token",x.accessToken),b.setDefaultHeader("primer-client-token",x.accessToken)}catch{}},async refreshClientConfiguration(){let{data:E,error:x}=await s.getConfiguration();return x||!E?(O.warn("Failed to refresh client configuration:",x),!1):(s.configuration=E,!0)}}}var id=100;function od({height:i,name:t,url:e="",width:r}){let o=new Set,a=window.open(e,t,nd({height:i,width:r}));if(!a)return;function n(){a?.close(),l()}function l(){o.forEach(s=>s()),o.clear(),window.removeEventListener("beforeunload",n)}return window.addEventListener("beforeunload",n),ad(a).then(l),{close:n,focus(){a.focus()},get isOpen(){return a?.closed===!1},onClose(s){return o.add(s),()=>{o.delete(s)}},setContent(s){a.document.write(s)},setUrl(s){a.location.replace(s)}}}var ad=i=>new Promise(t=>{let e=setInterval(()=>{i.closed&&(clearInterval(e),t())},id)});function nd(i){let t=sd({parent:{left:window.screenLeft,top:window.screenTop,height:window.outerHeight,width:window.outerWidth},popup:i});return ld(t)}var sd=({parent:i,popup:t})=>({left:i.left+(i.width-t.width)/2,top:i.top+(i.height-t.height)/2,height:t.height,width:t.width}),ld=i=>Object.entries(i).map(t=>t.join("=")).join(","),Wi=class extends xt{constructor(){super(...arguments);I(this,"popup")}async start(){this.openPopup()}async tokenize(){let{error:e,data:r}=await this.context.pciApi.postPaymentInstruments({type:"OFF_SESSION_PAYMENT",paymentMethodType:this.config.type,paymentMethodConfigId:this.config.id,sessionInfo:{locale:"en",platform:"WEB",browserInfo:za()}});if(e||!r)throw e??new nt({message:"Unable to tokenize payment method",code:re.TOKENIZATION_ERROR});return r}async handleRequiredAction(e){let r=e.requiredAction?.clientToken;if(!r)throw new rr({message:"No client token provided",code:ga.MISSING_CLIENT_TOKEN,response:{id:e.id,data:e}});let o=er(r);if(!gl(o,this.config.type))throw new rr({message:"Invalid client token",code:ga.INVALID_CLIENT_TOKEN,response:{id:e.id,data:e}});this.popup?.setUrl(o.redirectUrl);let a=new Promise(u=>{this.popup?.onClose(()=>u({id:""}))}),{promise:n,abort:l}=this.pollStatus(o.statusUrl),s=await Promise.race([a,n]);if(l(),this.popup?.close(),"error"in s)throw s.error;let c=s.id;if(!c){let u=await this.context.pciApi.getResumeStatus(o.statusUrl);if(u.error||!u.data?.id)throw u.error??new Error("Unable to get resume token");c=u.data.id}return await this.resumePayment(e.id,c)}pollStatus(e){let r=!0;return{promise:new Promise(async o=>{for(;r;){let{data:a,error:n}=await this.context.pciApi.getResumeStatus(e);if(n)return void o({error:n});if(await Jr(1e3),a?.status==="COMPLETE")return void o({id:a.id})}}),abort:()=>{r=!1}}}openPopup(){let{name:e,displayMetadata:{button:r,overlay:o,popup:a}}=this.config;this.popup=od({name:e,height:a?.height??500,width:a?.width??1e3});let n=o?.logo.colored||r?.iconUrl.colored||o?.logo.light||r?.iconUrl.light||o?.logo.dark||r?.iconUrl.dark;this.popup?.setContent(dd({name:e,logoSrc:n,logoAlt:e,message:`Loading ${e}...`}))}},dd=({name:i,logoSrc:t,logoAlt:e,message:r})=>`<html>
|
|
45
45
|
<head>
|
|
46
46
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
47
47
|
<style>
|
|
@@ -150,7 +150,7 @@ ${o}`;function Zl(i,t,e){if(e?.status&&e.status>=400&&e.status<500)return!1;if(e
|
|
|
150
150
|
</div>
|
|
151
151
|
</body>
|
|
152
152
|
</html>
|
|
153
|
-
`;async function cd(i){let t=i.configuration.paymentMethods.map(r=>{if(r.implementationType==="WEB_REDIRECT")return new Wi(r,i);if(r.type===J.PAYMENT_CARD)return new Kr(r,i);if(r.type===J.PAYPAL)return new qr(r,i);if(r.type===J.APPLE_PAY)return new jr(r,i);if(r.type===J.GOOGLE_PAY)return new Gr(r,i)}).map(async r=>{if(!r)return null;try{return await r.setup()?r:null}catch(o){return O.warn(`Failed to initialize payment method ${r.config.type}:`,o),null}});return(await Promise.all(t)).filter(r=>!!r)}function pd(i,t,e){if(!t.configuration.clientSession.customer?.customerId)throw new H({message:"You must provide a `customerId` in the client session to use the Vault Manager."});let r=[];return{async fetchVaultedPaymentMethods(){let{data:o,error:a}=await t.pciApi.getPaymentInstruments();if(a)throw a;if(!o)throw new H({code:Ur.VAULT_ERROR,message:"Missing vaulted payment methods data"});return r=o.data,r},async deleteVaultedPaymentMethod(o){if(!r.find(l=>l.id===o))throw new H({code:Ur.VAULT_ERROR,message:"deleteVaultedPaymentMethod: the id provided doesn't match any vaulted payment method"});let{error:n}=await t.pciApi.deletePaymentInstrument(o);if(n)throw n;r=r.filter(l=>l.id!==o)},async startPaymentFlow(o){let a=r.find(l=>l.id===o);if(!a)throw new H({code:Ur.VAULT_ERROR,message:"startPaymentFlow: the id provided doesn't match any vaulted payment method"});let n=e.find(l=>l.config.type===a.paymentMethodType);if(!n)throw new H({code:Ur.TOKENIZATION_ERROR,message:`Payment instrument type ${a.paymentInstrumentType} is not recognized or not supported.`});await ro(i,n,a)},async createCvvInput(o){return{}}}}async function Za(i,t){let e=await rd(i,{locale:t.locale,dialogProvider:t.dialogProvider}),r=await cd(e);t.onClientSessionUpdate?.(e.configuration.clientSession),e.onClientConfigurationUpdate(a=>{t.onClientSessionUpdate?.(a.clientSession)});let o={environment:ba?"LOCAL":e.decodedClientToken.env,primerAccountId:e.configuration.primerAccountId,checkoutSessionId:e.checkoutSessionId,clientSessionId:e.configuration.clientSession?.clientSessionId,clientSessionToken:i,sdkVersion:t.sdkVersion};return e.getAnalyticsUtils=()=>o,rl({environment:ba?"LOCAL":e.decodedClientToken.env,primerAccountId:o.primerAccountId||"",checkoutSessionId:o.checkoutSessionId,clientSessionId:o.clientSessionId||"",clientSessionToken:o.clientSessionToken,sdkVersion:o.sdkVersion||""}),t.onAvailablePaymentMethodsLoad?.(r.map(a=>({type:a.config.type,managerType:a.config.type===J.PAYMENT_CARD?Oi.CARD:a.config.implementationType==="NATIVE_SDK"?Oi.NATIVE:Oi.REDIRECT}))),{start:()=>Promise.resolve(),createPaymentMethodManager:async(a,n)=>{let l=r.find(({config:s})=>s.type===a);return l?l instanceof Kr?zl(t,e,l,n):l instanceof qr||l instanceof jr||l instanceof Gr?Kl(t,e,l):Gl(t,e,l):(O.warn(`Payment method ${a} not found`),null)},getSDKUtilities:()=>({getCardNetworkAsset:_a,getUIOrderAmount:()=>{let{merchantAmount:a,totalOrderAmount:n,currencyCode:l}=e.configuration.clientSession.order;return ja(e.locale,a??n,l)},getCDNAssets:async a=>{let n=r.find(({config:c})=>c.type===a);if(!n)return;let{backgroundColor:l,iconUrl:s}=n.config.displayMetadata?.button||{};return{assets:{icon:s?.colored||""},colors:{background:l?.colored||"",main:l?.colored||""},description:n.config.name||null,is_primer_app:!1,name:n.config.name,website:null,goatCdnUrl:""}},getPaymentMethodConfiguration:a=>r.find(({config:n})=>n.type===a)?.config}),getAnalyticsUtils:()=>o,createVaultManager(){return pd(t,e,r)},getAssetsManager:()=>({getCardNetworkAsset:_a,getPaymentMethodAsset:async a=>{let n=r.find(({config:u})=>u.type===a);if(!n)return null;let{backgroundColor:l,iconUrl:s,text:c}=n.config.displayMetadata?.button||{};return{backgroundColor:l,iconUrl:s,paymentMethodName:c,buttonText:c,displayName:n.config.name}}}),refreshClientSession:e.refreshClientConfiguration}}var _a=i=>{let{asset:t,display:e}=Xi(i);return{cardUrl:`${Ml}/brand/card/${t}.svg`,displayName:e}};var ke={ATTRIBUTE:1,CHILD:2,PROPERTY:3,BOOLEAN_ATTRIBUTE:4,EVENT:5,ELEMENT:6},xe=i=>(...t)=>({_$litDirective$:i,values:t}),st=class{constructor(t){}get _$AU(){return this._$AM._$AU}_$AT(t,e,r){this._$Ct=t,this._$AM=e,this._$Ci=r}_$AS(t,e){return this.update(t,e)}update(t,e){return this.render(...e)}};var ir=class extends st{constructor(t){if(super(t),this.it=f,t.type!==ke.CHILD)throw Error(this.constructor.directiveName+"() can only be used in child bindings")}render(t){if(t===f||t==null)return this._t=void 0,this.it=t;if(t===Ee)return t;if(typeof t!="string")throw Error(this.constructor.directiveName+"() called with a non-string value");if(t===this.it)return this._t;this.it=t;let e=[t];return e.raw=e,this._t={_$litType$:this.constructor.resultType,strings:e,values:[]}}};ir.directiveName="unsafeHTML",ir.resultType=1;var Xa=xe(ir);var Qa=Symbol.for("primer-sdk-core-dialog-access");function en(i){return{token:Qa,content:i}}function io(i){return i!==void 0&&i.token===Qa&&typeof i.content=="string"}var tn=y` :host { display: block; } .content-container { width: 100%; height: 100%; display: flex; flex-direction: column; background-color: var(--primer-color-background-outlined-default); } .error { display: flex; align-items: center; justify-content: center; padding: var(--primer-space-large); color: var(--primer-color-text-danger); font-family: var(--primer-typography-body-medium-font); font-size: var(--primer-typography-body-medium-size); } `;var ie=class extends g{constructor(){super(...arguments);this.size="large";this.showCloseButton=!1;this.open=!1}openDialog(){this.open=!0}closeDialog(){let e=document.querySelector("primer-dialog");if(e){e.startExitAnimation();let r=()=>{this.open=!1,this.removeEventListener("primer-dialog-close",r)};this.addEventListener("primer-dialog-close",r)}else this.open=!1}renderContent(){return m`<div class="content-container"><slot></slot>${this.renderSecureHtmlContent()}</div>`}renderSecureHtmlContent(){return this.secureHtmlContent?io(this.secureHtmlContent)?m`${Xa(this.secureHtmlContent.content)}`:(P.warn("PortalDialogComponent: Invalid access token provided for htmlContent. Content will not be rendered."),f):f}renderDialog(){return this.open?m`<primer-portal><primer-dialog .open=${this.open} size=${this.size} .showCloseButton=${!1} @primer-dialog-close="${()=>this.closeDialog()}" >${this.renderContent()}</primer-dialog></primer-portal>`:f}connectedCallback(){super.connectedCallback(),this.open||this.openDialog()}updated(e){if(super.updated(e),e.has("secureHtmlContent")){let r=this.secureHtmlContent;r&&!io(r)&&(P.error("PortalDialogComponent: Invalid access token provided for htmlContent. Content will not be rendered."),this.secureHtmlContent=void 0)}e.has("open")&&this.open&&this.onOpen&&this.onOpen(),e.has("open")&&this.open&&this.onContentRendered&&this.updateComplete.then(()=>{requestAnimationFrame(()=>{this.onContentRendered?.()})})}render(){return m`${this.renderDialog()}`}};ie.styles=[_,tn],d([p({type:String})],ie.prototype,"size",2),d([p({type:Boolean})],ie.prototype,"showCloseButton",2),d([p({type:Object})],ie.prototype,"onOpen",2),d([p({type:Object})],ie.prototype,"onContentRendered",2),d([p({type:Object,converter:{fromAttribute:()=>{},toAttribute:()=>null}})],ie.prototype,"secureHtmlContent",2),d([M()],ie.prototype,"open",2),ie=d([v("primer-portal-dialog"),k()],ie);var Zr=class{constructor(){this.currentDialog=null;this.currentResolver=null}async show(t){return new Promise(e=>{let r=en(t.htmlContent),o=new ie;o.secureHtmlContent=r,o.size="large",o.showCloseButton=!1,o.onContentRendered=t.onContentReady;let a=()=>{this.currentDialog=null,this.currentResolver=null,e({success:!1})};o.addEventListener("primer-dialog-close",a),this.currentDialog=o,this.currentResolver=e,document.body.appendChild(o)})}close(){this.currentDialog&&this.currentResolver&&(this.currentDialog.closeDialog(),this.currentResolver({success:!0}),this.currentDialog.remove(),this.currentDialog=null,this.currentResolver=null)}};var oo="0.3.8",Xr=class{constructor(t){this.createPaymentMethodManager=null;this._paymentsList=[];this.currentSdkInstance=null;this.primerJS=null;this.loadingTimeout=null;this.isDisconnected=!1;(this.host=t).addController(this),this.isDisconnected=!1,this.sdkInstanceTask=new D(t,{args:()=>[this.host.clientToken,this.host.options],task:this.initializeHeadless()}),new D(t,{args:()=>[this.sdkInstanceTask.value,this.paymentsList],task:this.initializeLitContext()})}set paymentsList(t){this._paymentsList=t,this.host.requestUpdate()}get paymentsList(){return this._paymentsList}hostConnected(){this.isDisconnected=!1,this.host.sdkStateController.startLoading(),this.setupLoadingTimeout()}hostDisconnected(){if(this.isDisconnected=!0,this.host.sdkContextController.getAnalyticsUtils()){let e=this.host.sdkStateController.currentState;(e.isProcessing||e.isLoading||this.currentSdkInstance)&&G({eventName:"PAYMENT_FLOW_EXITED"})}this.cleanupResources()}normalizeOptionsForLegacySdk(t){if(t.sdkCore)return t;let e={...t};if(e.card?.cardholderName){let r={...e.card.cardholderName};r.visible===!1&&(r.required=!1),e.card={...e.card,cardholderName:r}}return e}setupLoadingTimeout(){this.clearLoadingTimeout(),this.loadingTimeout=setTimeout(()=>{this.host.sdkStateController.currentState.isLoading&&(P.warn("Loading timeout reached, resetting SDK state"),G({eventName:"PAYMENT_FLOW_EXITED",eventType:"timeout"}),this.cleanupResources(),this.host.sdkStateController.completeLoading())},1e4)}clearLoadingTimeout(){this.loadingTimeout!==null&&(clearTimeout(this.loadingTimeout),this.loadingTimeout=null)}cleanupResources(){if(this.clearLoadingTimeout(),this.currentSdkInstance)try{this.paymentsList=[],this.createPaymentMethodManager=null,this.host.sdkStateController.reset(),P.info("SDK instance cleaned up")}catch(t){P.error("Error cleaning up SDK instance:",t)}To(),this.currentSdkInstance=null,this.primerJS=null}async _loadV2Sdk(t=aa){let e=window;if(e.Primer&&typeof e.Primer.preloadPrimer=="function"){P.info("SDK already loaded, skipping load script"),await e.Primer.preloadPrimer();return}await na(t),await e.Primer.preloadPrimer()}initializeHeadless(){return async([t,e])=>{if(this.isDisconnected)return P.warn("Component disconnected, aborting SDK initialization"),L;if(!t||!e)return L;this.cleanupResources();let r;try{let o;if(e.sdkCore){let s=new Zr;o={createHeadless:(u,h)=>Za(u,{...h,dialogProvider:s,sdkVersion:oo})}}else await this._loadV2Sdk(),o=window.Primer;this.primerJS=new Dr(null);let a=this.normalizeOptionsForLegacySdk(e),n=await o.createHeadless(t,{...a,onAvailablePaymentMethodsLoad:s=>{this.isDisconnected||(P.info("Configuration payment methods:",s),this.paymentsList=s)},onCheckoutComplete:({payment:s})=>{this.isDisconnected||(P.info("Payment completed:",s),this.host.sdkStateController.completeProcessing(),G({eventName:"PAYMENT_SUCCESS",paymentId:s?.id}),this.primerJS&&this.primerJS.handlePaymentComplete(s))},onCheckoutFail:(s,c)=>{this.isDisconnected||(P.error("Payment failed:",s),this.host.sdkStateController.setFailure(s.code||"UNKNOWN_ERROR",s.message||"Unknown error occurred",{error:s}),G({eventName:"PAYMENT_FAILURE",paymentId:c.payment?.id}),this.primerJS&&this.primerJS.handlePaymentFailure(s,c.payment))},onBeforePaymentCreate:(s,c)=>{if(this.isDisconnected)return;this.host.sdkStateController.currentState.failure!==null&&G({eventName:"PAYMENT_REATTEMPTED",paymentMethod:s.paymentMethodType}),this.host.sdkStateController.startProcessing(),this.primerJS?this.primerJS.handleBeforePaymentCreate(s,c):c?.continuePaymentCreation()},onPaymentMethodAction:(s,c)=>{this.isDisconnected||s==="PAYMENT_METHOD_UNSELECTED"&&this.host.sdkStateController.stopProcessing()},onPaymentCreationStart:()=>{this.isDisconnected||(this.host.sdkStateController.resetError(),this.primerJS&&this.primerJS.handlePaymentStart())}});if(this.createPaymentMethodManager=n.createPaymentMethodManager.bind(n),this.currentSdkInstance=n,this.primerJS&&Object.defineProperty(this.primerJS,"headlessInstance",{value:n,writable:!1}),await n.start(),this.isDisconnected)return this.cleanupResources(),L;this.host.sdkContextController.setClientOptions(e),this.primerJS&&this.host.primerEventsController.dispatchCheckoutInitialized(this.primerJS);let l=n.getSDKUtilities();return r=n.getAnalyticsUtils?.(),r&&(this.host.sdkContextController.setAnalyticsUtils({...r,sdkVersion:oo}),Po({environment:r.environment,checkoutSessionId:r.checkoutSessionId,clientSessionId:r.clientSessionId||"",primerAccountId:r.primerAccountId||"",sdkVersion:oo,clientSessionToken:r.clientSessionToken}),G({eventName:"SDK_INIT_START"})),this.host.sdkContextController.setHeadlessUtils(l),this.host.vaultManagerController.initializeVaultManager(n.createVaultManager.bind(n),{vaultEnabled:e.vault?.enabled,captureVaultedCardCvv:!!l.getPaymentMethodConfiguration("PAYMENT_CARD")?.options?.captureVaultedCardCvv,showEmptyState:e.vault?.showEmptyState}),n}catch(o){throw o instanceof Error&&(P.error("SDK initialization error:",o),this.host.sdkStateController.setError(o)),this.cleanupResources(),o}}}initializeLitContext(){return async([t,e])=>{if(this.isDisconnected)return L;if(!t||!e.length)return L;let r=new Map,o=new Map;try{for(let n of e){if(this.isDisconnected)break;let l=await this.initializePaymentMethodManager(n)();n&&l&&(r.set(n.type,n),o.set(n.type,l))}if(this.isDisconnected)return L;let a=new Or(r);return this.host.sdkContextController.setPaymentManagers(o),this.host.sdkContextController.setPaymentMethods(a),this.primerJS&&this.primerJS.setPaymentMethods(a),this.host.primerEventsController.dispatchPaymentMethods(a),P.info("Initialized payment methods:",a.toArray()),r}catch(a){if(a instanceof Error)throw this.host.sdkStateController.setError(a),a;return null}finally{this.clearLoadingTimeout(),this.isDisconnected||(this.host.sdkStateController.completeLoading(),G({eventName:"SDK_INIT_END"}))}}}initializePaymentMethodManager(t){let{type:e,managerType:r}=t;return async()=>{if(this.isDisconnected||!this.createPaymentMethodManager)return null;if(r==="KLARNA"){let o=await this.createPaymentMethodManager("KLARNA",{onPaymentMethodCategoriesChange:a=>{this.isDisconnected||this.host.sdkContextController.setKlarnaCategories({categories:a,isLoading:!1})}});return o?{type:e,manager:o}:null}try{if(r==="CARD"){let a=await this.createPaymentMethodManager(e,{onCardNetworksChange:n=>{this.isDisconnected||this.host.cardNetworkController.processCardNetworkChangeEvent(n)},onCardNetworksLoading:()=>{this.isDisconnected||this.host.cardNetworkController.setCardNetworksLoading()}});return a?{type:e,manager:a}:null}let o=await this.createPaymentMethodManager(e);return o?{type:e,manager:o}:null}catch(o){return P.error(`Failed to initialize manager for ${e}:`,o),null}}}};var Qr=class{constructor(t){this.host=t,t.addController(this)}_error(t){let{error:e}=t.detail;this.host.sdkStateController.setFailure("UNKNOWN_ERROR",e.message)}_mandateConfirmed(){this.host.sdkStateController.completeProcessing()}_mandateDeclined(){this.host.sdkStateController.setFailure("UNKNOWN_ERROR","Mandate declined")}hostConnected(){this.host.addEventListener("primer-ach-error",this._error.bind(this)),this.host.addEventListener("primer-ach-mandate-confirmed",this._mandateConfirmed.bind(this)),this.host.addEventListener("primer-ach-mandate-declined",this._mandateDeclined.bind(this))}hostDisconnected(){this.host.removeEventListener("primer-ach-error",this._error.bind(this)),this.host.removeEventListener("primer-ach-mandate-confirmed",this._mandateConfirmed.bind(this)),this.host.removeEventListener("primer-ach-mandate-declined",this._mandateDeclined.bind(this))}};var md=fo({"../../localization/lit-localize/locales/ar.ts":()=>import("./chunks/ar.KRXB3WQO.js"),"../../localization/lit-localize/locales/bg.ts":()=>import("./chunks/bg.6SKJRXIR.js"),"../../localization/lit-localize/locales/ca.ts":()=>import("./chunks/ca.SANDLFEK.js"),"../../localization/lit-localize/locales/cs.ts":()=>import("./chunks/cs.FC4I5M3C.js"),"../../localization/lit-localize/locales/da.ts":()=>import("./chunks/da.YI32NZ7B.js"),"../../localization/lit-localize/locales/de.ts":()=>import("./chunks/de.7M7UFQB7.js"),"../../localization/lit-localize/locales/el.ts":()=>import("./chunks/el.XSGTYDZR.js"),"../../localization/lit-localize/locales/en-GB.ts":()=>import("./chunks/en-GB.VO4GDE3X.js"),"../../localization/lit-localize/locales/en.ts":()=>import("./chunks/en.MNFLVOE3.js"),"../../localization/lit-localize/locales/es-AR.ts":()=>import("./chunks/es-AR.TBWVUZEF.js"),"../../localization/lit-localize/locales/es-MX.ts":()=>import("./chunks/es-MX.6EMWUABR.js"),"../../localization/lit-localize/locales/es.ts":()=>import("./chunks/es.XZLDFHYI.js"),"../../localization/lit-localize/locales/et-EE.ts":()=>import("./chunks/et-EE.JBSFMKZ2.js"),"../../localization/lit-localize/locales/fi-FI.ts":()=>import("./chunks/fi-FI.I75VK2ID.js"),"../../localization/lit-localize/locales/fr.ts":()=>import("./chunks/fr.JBNP6RXT.js"),"../../localization/lit-localize/locales/he.ts":()=>import("./chunks/he.PW253QAL.js"),"../../localization/lit-localize/locales/hr.ts":()=>import("./chunks/hr.LM4RITYJ.js"),"../../localization/lit-localize/locales/hu.ts":()=>import("./chunks/hu.JGCKQA6J.js"),"../../localization/lit-localize/locales/id.ts":()=>import("./chunks/id.VBXULDDY.js"),"../../localization/lit-localize/locales/it.ts":()=>import("./chunks/it.7Q6BFLDK.js"),"../../localization/lit-localize/locales/ja.ts":()=>import("./chunks/ja.QOC76SSC.js"),"../../localization/lit-localize/locales/ko.ts":()=>import("./chunks/ko.BANZIFNH.js"),"../../localization/lit-localize/locales/lt-LT.ts":()=>import("./chunks/lt-LT.Q2SRJOKH.js"),"../../localization/lit-localize/locales/lt.ts":()=>import("./chunks/lt.XMNFEN5T.js"),"../../localization/lit-localize/locales/lv-LV.ts":()=>import("./chunks/lv-LV.3AJDTMU5.js"),"../../localization/lit-localize/locales/lv.ts":()=>import("./chunks/lv.TFPDXNEV.js"),"../../localization/lit-localize/locales/ms.ts":()=>import("./chunks/ms.FPTX4NM4.js"),"../../localization/lit-localize/locales/nb.ts":()=>import("./chunks/nb.CAFSKRQ2.js"),"../../localization/lit-localize/locales/nl.ts":()=>import("./chunks/nl.7BPSDYTC.js"),"../../localization/lit-localize/locales/nl_NL.ts":()=>import("./chunks/nl_NL.6ZVCFPVW.js"),"../../localization/lit-localize/locales/pl.ts":()=>import("./chunks/pl.RF34QM23.js"),"../../localization/lit-localize/locales/pt-BR.ts":()=>import("./chunks/pt-BR.AKDHLRUA.js"),"../../localization/lit-localize/locales/pt.ts":()=>import("./chunks/pt.VBALOWHZ.js"),"../../localization/lit-localize/locales/ro.ts":()=>import("./chunks/ro.WN7VCF27.js"),"../../localization/lit-localize/locales/ru.ts":()=>import("./chunks/ru.ICXGVGRR.js"),"../../localization/lit-localize/locales/sk.ts":()=>import("./chunks/sk.SIP5JIOX.js"),"../../localization/lit-localize/locales/sl.ts":()=>import("./chunks/sl.R77UEKCA.js"),"../../localization/lit-localize/locales/sr-RS.ts":()=>import("./chunks/sr-RS.6M2YSTDX.js"),"../../localization/lit-localize/locales/sv.ts":()=>import("./chunks/sv.33ZY4CDS.js"),"../../localization/lit-localize/locales/th.ts":()=>import("./chunks/th.M27YUIZC.js"),"../../localization/lit-localize/locales/tr.ts":()=>import("./chunks/tr.Q2SIY6NA.js"),"../../localization/lit-localize/locales/uk-UA.ts":()=>import("./chunks/uk-UA.EJZOGSJR.js"),"../../localization/lit-localize/locales/vi.ts":()=>import("./chunks/vi.3RROGLXM.js"),"../../localization/lit-localize/locales/zf.ts":()=>import("./chunks/zf.GGWFQ3Y7.js"),"../../localization/lit-localize/locales/zh-CN.ts":()=>import("./chunks/zh-CN.MQHNRMN4.js"),"../../localization/lit-localize/locales/zh-HK.ts":()=>import("./chunks/zh-HK.WNR7XUSX.js"),"../../localization/lit-localize/locales/zh-TW.ts":()=>import("./chunks/zh-TW.GNCY2PNY.js")});Si(i=>md(`../../localization/lit-localize/locales/${i}.ts`));var ud={LOADER_DISABLED:"loader-disabled",CUSTOM_STYLES:"custom-styles",CLIENT_TOKEN:"client-token",JS_INIT:"js-initialized"},ue=class extends g{constructor(){super();this.customStyles="";this.clientToken="";this.options={};this.disableLoader=!1;this._jsInitialized=!1;this.previousLoadingState=!0;this.hasAssignedContent=!1;this._loadingTimeoutId=null;this._eventListenerController=null;this.locale="en-GB";this.onSlotChange=e=>{let o=e.target.assignedNodes({flatten:!0});this.hasAssignedContent=o.length>0,this.requestUpdate()};this.sdkContextController=new hr(this),this.sdkStateController=new mr(this),this.primerEventsController=new Pt(this),this.styleProcessingController=new fr(this),this.vaultManagerController=new Ut(this),this.cardNetworkController=new sr(this),this.achPaymentEventsController=new Qr(this),new Xr(this)}set jsInitialized(e){this.requestUpdate(),this._jsInitialized=e}get jsInitialized(){return this._jsInitialized}connectedCallback(){super.connectedCallback(),this.sdkContextController.setEventsController(this.primerEventsController),this._eventListenerController=new AbortController,document.addEventListener("primer:card-submit",this.handleExternalCardSubmit.bind(this),{signal:this._eventListenerController.signal})}attributeChangedCallback(e,r,o){e===ud.CUSTOM_STYLES?this.styleProcessingController.processCustomStyles(o):super.attributeChangedCallback(e,r,o)}disconnectedCallback(){this._loadingTimeoutId&&(window.clearTimeout(this._loadingTimeoutId),this._loadingTimeoutId=null),this.sdkStateController?.currentState.isLoading&&this.sdkStateController.forceCompleteLoading(),this._eventListenerController&&(this._eventListenerController.abort(),this._eventListenerController=null),super.disconnectedCallback()}willUpdate(e){e.has("options")&&(this.options?.locale&&(Pi(this.options?.locale)?this.locale=Ti(this.options?.locale):P.warn("\u{1F30E}\u2757 Unsupported locale provided:",this.options?.locale,"- Falling back to default locale `en-GB`")),_i(this.locale||"en-GB"))}updated(){let e=getComputedStyle(this);this.sdkContextController.setComputedStyles(e),this.checkLoadingStateChange()}handleExternalCardSubmit(e){this._eventListenerController?.signal.aborted||e.target!==this&&this.primerEventsController.dispatchEvent("primer:card-submit",e.detail)}checkLoadingStateChange(){let e=this.sdkStateController?.currentState.isLoading||!1;this.previousLoadingState&&!e&&(this.jsInitialized=!0,G({eventName:"CHECKOUT_FLOW_STARTED"})),this.previousLoadingState=e,e&&!this._loadingTimeoutId?this._loadingTimeoutId=window.setTimeout(()=>{this.sdkStateController?.currentState.isLoading&&(P.warn("Loading timeout in component, forcing completion"),this.sdkStateController.forceCompleteLoading(),this.jsInitialized=!0),this._loadingTimeoutId=null},1e4):!e&&this._loadingTimeoutId&&(window.clearTimeout(this._loadingTimeoutId),this._loadingTimeoutId=null)}render(){let e=this.sdkStateController.currentState,r=e.isLoading,o=e.error,a=!r&&!o;return m` ${R(r,()=>f)} ${R(o,()=>m`<primer-checkout-error></primer-checkout-error>`)} ${R(a,()=>m`<slot name="main" @slotchange=${this.onSlotChange}></slot>${R(this.hasAssignedContent,()=>f,()=>m`<primer-main></primer-main>`)} `,()=>f)} `}addEventListener(e,r,o){super.addEventListener(e,r,o)}removeEventListener(e,r,o){super.removeEventListener(e,r,o)}};ue.styles=[_,oa],d([p({type:String,attribute:"custom-styles"})],ue.prototype,"customStyles",2),d([p({type:String,attribute:"client-token"})],ue.prototype,"clientToken",2),d([p({type:Object})],ue.prototype,"options",2),d([p({type:Boolean,attribute:"loader-disabled"})],ue.prototype,"disableLoader",2),d([p({type:Boolean,reflect:!0,attribute:"js-initialized"})],ue.prototype,"_jsInitialized",2),d([at("slot")],ue.prototype,"defaultSlot",2),d([M()],ue.prototype,"previousLoadingState",2),ue=d([k(),v("primer-checkout")],ue);function hd(i){return document.querySelector(`#${i}`)}function fd(i,t){let e=document.createElement("style");return e.textContent=i,e.id=t,e}function or(i,t,e=!0){if(!$r||hd(t))return;let o=fd(i,t);e&&document.head.firstChild?document.head.insertBefore(o,document.head.firstChild):document.head.appendChild(o)}var rn=`
|
|
153
|
+
`;async function cd(i){let t=i.configuration.paymentMethods.map(r=>{if(r.implementationType==="WEB_REDIRECT")return new Wi(r,i);if(r.type===J.PAYMENT_CARD)return new Kr(r,i);if(r.type===J.PAYPAL)return new qr(r,i);if(r.type===J.APPLE_PAY)return new jr(r,i);if(r.type===J.GOOGLE_PAY)return new Gr(r,i)}).map(async r=>{if(!r)return null;try{return await r.setup()?r:null}catch(o){return O.warn(`Failed to initialize payment method ${r.config.type}:`,o),null}});return(await Promise.all(t)).filter(r=>!!r)}function pd(i,t,e){if(!t.configuration.clientSession.customer?.customerId)throw new H({message:"You must provide a `customerId` in the client session to use the Vault Manager."});let r=[];return{async fetchVaultedPaymentMethods(){let{data:o,error:a}=await t.pciApi.getPaymentInstruments();if(a)throw a;if(!o)throw new H({code:Ur.VAULT_ERROR,message:"Missing vaulted payment methods data"});return r=o.data,r},async deleteVaultedPaymentMethod(o){if(!r.find(l=>l.id===o))throw new H({code:Ur.VAULT_ERROR,message:"deleteVaultedPaymentMethod: the id provided doesn't match any vaulted payment method"});let{error:n}=await t.pciApi.deletePaymentInstrument(o);if(n)throw n;r=r.filter(l=>l.id!==o)},async startPaymentFlow(o){let a=r.find(l=>l.id===o);if(!a)throw new H({code:Ur.VAULT_ERROR,message:"startPaymentFlow: the id provided doesn't match any vaulted payment method"});let n=e.find(l=>l.config.type===a.paymentMethodType);if(!n)throw new H({code:Ur.TOKENIZATION_ERROR,message:`Payment instrument type ${a.paymentInstrumentType} is not recognized or not supported.`});await ro(i,n,a)},async createCvvInput(o){return{}}}}async function Za(i,t){let e=await rd(i,{locale:t.locale,dialogProvider:t.dialogProvider}),r=await cd(e);t.onClientSessionUpdate?.(e.configuration.clientSession),e.onClientConfigurationUpdate(a=>{t.onClientSessionUpdate?.(a.clientSession)});let o={environment:ba?"LOCAL":e.decodedClientToken.env,primerAccountId:e.configuration.primerAccountId,checkoutSessionId:e.checkoutSessionId,clientSessionId:e.configuration.clientSession?.clientSessionId,clientSessionToken:i,sdkVersion:t.sdkVersion};return e.getAnalyticsUtils=()=>o,rl({environment:ba?"LOCAL":e.decodedClientToken.env,primerAccountId:o.primerAccountId||"",checkoutSessionId:o.checkoutSessionId,clientSessionId:o.clientSessionId||"",clientSessionToken:o.clientSessionToken,sdkVersion:o.sdkVersion||""}),t.onAvailablePaymentMethodsLoad?.(r.map(a=>({type:a.config.type,managerType:a.config.type===J.PAYMENT_CARD?Oi.CARD:a.config.implementationType==="NATIVE_SDK"?Oi.NATIVE:Oi.REDIRECT}))),{start:()=>Promise.resolve(),createPaymentMethodManager:async(a,n)=>{let l=r.find(({config:s})=>s.type===a);return l?l instanceof Kr?Fl(t,e,l,n):l instanceof qr||l instanceof jr||l instanceof Gr?Kl(t,e,l):Gl(t,e,l):(O.warn(`Payment method ${a} not found`),null)},getSDKUtilities:()=>({getCardNetworkAsset:_a,getUIOrderAmount:()=>{let{merchantAmount:a,totalOrderAmount:n,currencyCode:l}=e.configuration.clientSession.order;return ja(e.locale,a??n,l)},getCDNAssets:async a=>{let n=r.find(({config:c})=>c.type===a);if(!n)return;let{backgroundColor:l,iconUrl:s}=n.config.displayMetadata?.button||{};return{assets:{icon:s?.colored||""},colors:{background:l?.colored||"",main:l?.colored||""},description:n.config.name||null,is_primer_app:!1,name:n.config.name,website:null,goatCdnUrl:""}},getPaymentMethodConfiguration:a=>r.find(({config:n})=>n.type===a)?.config}),getAnalyticsUtils:()=>o,createVaultManager(){return pd(t,e,r)},getAssetsManager:()=>({getCardNetworkAsset:_a,getPaymentMethodAsset:async a=>{let n=r.find(({config:u})=>u.type===a);if(!n)return null;let{backgroundColor:l,iconUrl:s,text:c}=n.config.displayMetadata?.button||{};return{backgroundColor:l,iconUrl:s,paymentMethodName:c,buttonText:c,displayName:n.config.name}}}),refreshClientSession:e.refreshClientConfiguration}}var _a=i=>{let{asset:t,display:e}=Xi(i);return{cardUrl:`${Ml}/brand/card/${t}.svg`,displayName:e}};var Ie={ATTRIBUTE:1,CHILD:2,PROPERTY:3,BOOLEAN_ATTRIBUTE:4,EVENT:5,ELEMENT:6},Ae=i=>(...t)=>({_$litDirective$:i,values:t}),st=class{constructor(t){}get _$AU(){return this._$AM._$AU}_$AT(t,e,r){this._$Ct=t,this._$AM=e,this._$Ci=r}_$AS(t,e){return this.update(t,e)}update(t,e){return this.render(...e)}};var ir=class extends st{constructor(t){if(super(t),this.it=f,t.type!==Ie.CHILD)throw Error(this.constructor.directiveName+"() can only be used in child bindings")}render(t){if(t===f||t==null)return this._t=void 0,this.it=t;if(t===Ee)return t;if(typeof t!="string")throw Error(this.constructor.directiveName+"() called with a non-string value");if(t===this.it)return this._t;this.it=t;let e=[t];return e.raw=e,this._t={_$litType$:this.constructor.resultType,strings:e,values:[]}}};ir.directiveName="unsafeHTML",ir.resultType=1;var Xa=Ae(ir);var Qa=Symbol.for("primer-sdk-core-dialog-access");function en(i){return{token:Qa,content:i}}function io(i){return i!==void 0&&i.token===Qa&&typeof i.content=="string"}var tn=y` :host { display: block; } .content-container { width: 100%; height: 100%; display: flex; flex-direction: column; background-color: var(--primer-color-background-outlined-default); } .error { display: flex; align-items: center; justify-content: center; padding: var(--primer-space-large); color: var(--primer-color-text-danger); font-family: var(--primer-typography-body-medium-font); font-size: var(--primer-typography-body-medium-size); } `;var ie=class extends g{constructor(){super(...arguments);this.size="large";this.showCloseButton=!1;this.open=!1}openDialog(){this.open=!0}closeDialog(){let e=document.querySelector("primer-dialog");if(e){e.startExitAnimation();let r=()=>{this.open=!1,this.removeEventListener("primer-dialog-close",r)};this.addEventListener("primer-dialog-close",r)}else this.open=!1}renderContent(){return m`<div class="content-container"><slot></slot>${this.renderSecureHtmlContent()}</div>`}renderSecureHtmlContent(){return this.secureHtmlContent?io(this.secureHtmlContent)?m`${Xa(this.secureHtmlContent.content)}`:(_.warn("PortalDialogComponent: Invalid access token provided for htmlContent. Content will not be rendered."),f):f}renderDialog(){return this.open?m`<primer-portal><primer-dialog .open=${this.open} size=${this.size} .showCloseButton=${!1} @primer-dialog-close="${()=>this.closeDialog()}" >${this.renderContent()}</primer-dialog></primer-portal>`:f}connectedCallback(){super.connectedCallback(),this.open||this.openDialog()}updated(e){if(super.updated(e),e.has("secureHtmlContent")){let r=this.secureHtmlContent;r&&!io(r)&&(_.error("PortalDialogComponent: Invalid access token provided for htmlContent. Content will not be rendered."),this.secureHtmlContent=void 0)}e.has("open")&&this.open&&this.onOpen&&this.onOpen(),e.has("open")&&this.open&&this.onContentRendered&&this.updateComplete.then(()=>{requestAnimationFrame(()=>{this.onContentRendered?.()})})}render(){return m`${this.renderDialog()}`}};ie.styles=[P,tn],d([p({type:String})],ie.prototype,"size",2),d([p({type:Boolean})],ie.prototype,"showCloseButton",2),d([p({type:Object})],ie.prototype,"onOpen",2),d([p({type:Object})],ie.prototype,"onContentRendered",2),d([p({type:Object,converter:{fromAttribute:()=>{},toAttribute:()=>null}})],ie.prototype,"secureHtmlContent",2),d([M()],ie.prototype,"open",2),ie=d([v("primer-portal-dialog"),k()],ie);var Zr=class{constructor(){this.currentDialog=null;this.currentResolver=null}async show(t){return new Promise(e=>{let r=en(t.htmlContent),o=new ie;o.secureHtmlContent=r,o.size="large",o.showCloseButton=!1,o.onContentRendered=t.onContentReady;let a=()=>{this.currentDialog=null,this.currentResolver=null,e({success:!1})};o.addEventListener("primer-dialog-close",a),this.currentDialog=o,this.currentResolver=e,document.body.appendChild(o)})}close(){this.currentDialog&&this.currentResolver&&(this.currentDialog.closeDialog(),this.currentResolver({success:!0}),this.currentDialog.remove(),this.currentDialog=null,this.currentResolver=null)}};var oo="0.3.10",Xr=class{constructor(t){this.createPaymentMethodManager=null;this._paymentsList=[];this.currentSdkInstance=null;this.primerJS=null;this.loadingTimeout=null;this.isDisconnected=!1;(this.host=t).addController(this),this.isDisconnected=!1,this.sdkInstanceTask=new D(t,{args:()=>[this.host.clientToken,this.host.options],task:this.initializeHeadless()}),new D(t,{args:()=>[this.sdkInstanceTask.value,this.paymentsList],task:this.initializeLitContext()})}set paymentsList(t){this._paymentsList=t,this.host.requestUpdate()}get paymentsList(){return this._paymentsList}hostConnected(){this.isDisconnected=!1,this.host.sdkStateController.startLoading(),this.setupLoadingTimeout()}hostDisconnected(){if(this.isDisconnected=!0,this.host.sdkContextController.getAnalyticsUtils()){let e=this.host.sdkStateController.currentState;(e.isProcessing||e.isLoading||this.currentSdkInstance)&&G({eventName:"PAYMENT_FLOW_EXITED"})}this.cleanupResources()}normalizeOptionsForLegacySdk(t){if(t.sdkCore)return t;let e={...t};if(e.card?.cardholderName){let r={...e.card.cardholderName};r.visible===!1&&(r.required=!1),e.card={...e.card,cardholderName:r}}return e}setupLoadingTimeout(){this.clearLoadingTimeout(),this.loadingTimeout=setTimeout(()=>{this.host.sdkStateController.currentState.isLoading&&(_.warn("Loading timeout reached, resetting SDK state"),G({eventName:"PAYMENT_FLOW_EXITED",eventType:"timeout"}),this.cleanupResources(),this.host.sdkStateController.completeLoading())},1e4)}clearLoadingTimeout(){this.loadingTimeout!==null&&(clearTimeout(this.loadingTimeout),this.loadingTimeout=null)}cleanupResources(){if(this.clearLoadingTimeout(),this.currentSdkInstance)try{this.paymentsList=[],this.createPaymentMethodManager=null,this.host.sdkStateController.reset(),_.info("SDK instance cleaned up")}catch(t){_.error("Error cleaning up SDK instance:",t)}To(),this.currentSdkInstance=null,this.primerJS=null}async _loadV2Sdk(t=aa){let e=window;if(e.Primer&&typeof e.Primer.preloadPrimer=="function"){_.info("SDK already loaded, skipping load script"),await e.Primer.preloadPrimer();return}await na(t),await e.Primer.preloadPrimer()}initializeHeadless(){return async([t,e])=>{if(this.isDisconnected)return _.warn("Component disconnected, aborting SDK initialization"),L;if(!t||!e)return L;this.cleanupResources();let r;try{let o;if(e.sdkCore){let s=new Zr;o={createHeadless:(u,h)=>Za(u,{...h,dialogProvider:s,sdkVersion:oo})}}else await this._loadV2Sdk(),o=window.Primer;this.primerJS=new Dr(null);let a=this.normalizeOptionsForLegacySdk(e),n=await o.createHeadless(t,{...a,onAvailablePaymentMethodsLoad:s=>{this.isDisconnected||(_.info("Configuration payment methods:",s),this.paymentsList=s)},onCheckoutComplete:({payment:s})=>{this.isDisconnected||(_.info("Payment completed:",s),this.host.sdkStateController.completeProcessing(),G({eventName:"PAYMENT_SUCCESS",paymentId:s?.id}),this.primerJS&&this.primerJS.handlePaymentComplete(s))},onCheckoutFail:(s,c)=>{this.isDisconnected||(_.error("Payment failed:",s),this.host.sdkStateController.setFailure(s.code||"UNKNOWN_ERROR",s.message||"Unknown error occurred",{error:s}),G({eventName:"PAYMENT_FAILURE",paymentId:c.payment?.id}),this.primerJS&&this.primerJS.handlePaymentFailure(s,c.payment))},onBeforePaymentCreate:(s,c)=>{if(this.isDisconnected)return;this.host.sdkStateController.currentState.failure!==null&&G({eventName:"PAYMENT_REATTEMPTED",paymentMethod:s.paymentMethodType}),this.host.sdkStateController.startProcessing(),this.primerJS?this.primerJS.handleBeforePaymentCreate(s,c):c?.continuePaymentCreation()},onPaymentMethodAction:(s,c)=>{this.isDisconnected||s==="PAYMENT_METHOD_UNSELECTED"&&this.host.sdkStateController.stopProcessing()},onPaymentCreationStart:()=>{this.isDisconnected||(this.host.sdkStateController.resetError(),this.primerJS&&this.primerJS.handlePaymentStart())}});if(this.createPaymentMethodManager=n.createPaymentMethodManager.bind(n),this.currentSdkInstance=n,this.primerJS&&Object.defineProperty(this.primerJS,"headlessInstance",{value:n,writable:!1}),await n.start(),this.isDisconnected)return this.cleanupResources(),L;this.host.sdkContextController.setClientOptions(e),this.primerJS&&this.host.primerEventsController.dispatchCheckoutInitialized(this.primerJS);let l=n.getSDKUtilities();return r=n.getAnalyticsUtils?.(),r&&(this.host.sdkContextController.setAnalyticsUtils({...r,sdkVersion:oo}),Po({environment:r.environment,checkoutSessionId:r.checkoutSessionId,clientSessionId:r.clientSessionId||"",primerAccountId:r.primerAccountId||"",sdkVersion:oo,clientSessionToken:r.clientSessionToken}),G({eventName:"SDK_INIT_START"})),this.host.sdkContextController.setHeadlessUtils(l),this.host.vaultManagerController.initializeVaultManager(n.createVaultManager.bind(n),{vaultEnabled:e.vault?.enabled,captureVaultedCardCvv:!!l.getPaymentMethodConfiguration("PAYMENT_CARD")?.options?.captureVaultedCardCvv,showEmptyState:e.vault?.showEmptyState}),n}catch(o){throw o instanceof Error&&(_.error("SDK initialization error:",o),this.host.sdkStateController.setError(o)),this.cleanupResources(),o}}}initializeLitContext(){return async([t,e])=>{if(this.isDisconnected)return L;if(!t||!e.length)return L;let r=new Map,o=new Map;try{for(let n of e){if(this.isDisconnected)break;let l=await this.initializePaymentMethodManager(n)();n&&l&&(r.set(n.type,n),o.set(n.type,l))}if(this.isDisconnected)return L;let a=new Or(r);return this.host.sdkContextController.setPaymentManagers(o),this.host.sdkContextController.setPaymentMethods(a),this.primerJS&&this.primerJS.setPaymentMethods(a),this.host.primerEventsController.dispatchPaymentMethods(a),_.info("Initialized payment methods:",a.toArray()),r}catch(a){if(a instanceof Error)throw this.host.sdkStateController.setError(a),a;return null}finally{this.clearLoadingTimeout(),this.isDisconnected||(this.host.sdkStateController.completeLoading(),G({eventName:"SDK_INIT_END"}))}}}initializePaymentMethodManager(t){let{type:e,managerType:r}=t;return async()=>{if(this.isDisconnected||!this.createPaymentMethodManager)return null;if(r==="KLARNA"){let o=await this.createPaymentMethodManager("KLARNA",{onPaymentMethodCategoriesChange:a=>{this.isDisconnected||this.host.sdkContextController.setKlarnaCategories({categories:a,isLoading:!1})}});return o?{type:e,manager:o}:null}try{if(r==="CARD"){let a=await this.createPaymentMethodManager(e,{onCardNetworksChange:n=>{this.isDisconnected||this.host.cardNetworkController.processCardNetworkChangeEvent(n)},onCardNetworksLoading:()=>{this.isDisconnected||this.host.cardNetworkController.setCardNetworksLoading()}});return a?{type:e,manager:a}:null}let o=await this.createPaymentMethodManager(e);return o?{type:e,manager:o}:null}catch(o){return _.error(`Failed to initialize manager for ${e}:`,o),null}}}};var Qr=class{constructor(t){this.host=t,t.addController(this)}_error(t){let{error:e}=t.detail;this.host.sdkStateController.setFailure("UNKNOWN_ERROR",e.message)}_mandateConfirmed(){this.host.sdkStateController.completeProcessing()}_mandateDeclined(){this.host.sdkStateController.setFailure("UNKNOWN_ERROR","Mandate declined")}hostConnected(){this.host.addEventListener("primer-ach-error",this._error.bind(this)),this.host.addEventListener("primer-ach-mandate-confirmed",this._mandateConfirmed.bind(this)),this.host.addEventListener("primer-ach-mandate-declined",this._mandateDeclined.bind(this))}hostDisconnected(){this.host.removeEventListener("primer-ach-error",this._error.bind(this)),this.host.removeEventListener("primer-ach-mandate-confirmed",this._mandateConfirmed.bind(this)),this.host.removeEventListener("primer-ach-mandate-declined",this._mandateDeclined.bind(this))}};var md=fo({"../../localization/lit-localize/locales/ar.ts":()=>import("./chunks/ar.KRXB3WQO.js"),"../../localization/lit-localize/locales/bg.ts":()=>import("./chunks/bg.6SKJRXIR.js"),"../../localization/lit-localize/locales/ca.ts":()=>import("./chunks/ca.SANDLFEK.js"),"../../localization/lit-localize/locales/cs.ts":()=>import("./chunks/cs.FC4I5M3C.js"),"../../localization/lit-localize/locales/da.ts":()=>import("./chunks/da.YI32NZ7B.js"),"../../localization/lit-localize/locales/de.ts":()=>import("./chunks/de.7M7UFQB7.js"),"../../localization/lit-localize/locales/el.ts":()=>import("./chunks/el.XSGTYDZR.js"),"../../localization/lit-localize/locales/en-GB.ts":()=>import("./chunks/en-GB.VO4GDE3X.js"),"../../localization/lit-localize/locales/en.ts":()=>import("./chunks/en.MNFLVOE3.js"),"../../localization/lit-localize/locales/es-AR.ts":()=>import("./chunks/es-AR.TBWVUZEF.js"),"../../localization/lit-localize/locales/es-MX.ts":()=>import("./chunks/es-MX.6EMWUABR.js"),"../../localization/lit-localize/locales/es.ts":()=>import("./chunks/es.XZLDFHYI.js"),"../../localization/lit-localize/locales/et-EE.ts":()=>import("./chunks/et-EE.JBSFMKZ2.js"),"../../localization/lit-localize/locales/fi-FI.ts":()=>import("./chunks/fi-FI.I75VK2ID.js"),"../../localization/lit-localize/locales/fr.ts":()=>import("./chunks/fr.JBNP6RXT.js"),"../../localization/lit-localize/locales/he.ts":()=>import("./chunks/he.PW253QAL.js"),"../../localization/lit-localize/locales/hr.ts":()=>import("./chunks/hr.LM4RITYJ.js"),"../../localization/lit-localize/locales/hu.ts":()=>import("./chunks/hu.JGCKQA6J.js"),"../../localization/lit-localize/locales/id.ts":()=>import("./chunks/id.VBXULDDY.js"),"../../localization/lit-localize/locales/it.ts":()=>import("./chunks/it.7Q6BFLDK.js"),"../../localization/lit-localize/locales/ja.ts":()=>import("./chunks/ja.QOC76SSC.js"),"../../localization/lit-localize/locales/ko.ts":()=>import("./chunks/ko.BANZIFNH.js"),"../../localization/lit-localize/locales/lt-LT.ts":()=>import("./chunks/lt-LT.Q2SRJOKH.js"),"../../localization/lit-localize/locales/lt.ts":()=>import("./chunks/lt.XMNFEN5T.js"),"../../localization/lit-localize/locales/lv-LV.ts":()=>import("./chunks/lv-LV.3AJDTMU5.js"),"../../localization/lit-localize/locales/lv.ts":()=>import("./chunks/lv.TFPDXNEV.js"),"../../localization/lit-localize/locales/ms.ts":()=>import("./chunks/ms.FPTX4NM4.js"),"../../localization/lit-localize/locales/nb.ts":()=>import("./chunks/nb.CAFSKRQ2.js"),"../../localization/lit-localize/locales/nl.ts":()=>import("./chunks/nl.7BPSDYTC.js"),"../../localization/lit-localize/locales/nl_NL.ts":()=>import("./chunks/nl_NL.6ZVCFPVW.js"),"../../localization/lit-localize/locales/pl.ts":()=>import("./chunks/pl.RF34QM23.js"),"../../localization/lit-localize/locales/pt-BR.ts":()=>import("./chunks/pt-BR.AKDHLRUA.js"),"../../localization/lit-localize/locales/pt.ts":()=>import("./chunks/pt.VBALOWHZ.js"),"../../localization/lit-localize/locales/ro.ts":()=>import("./chunks/ro.WN7VCF27.js"),"../../localization/lit-localize/locales/ru.ts":()=>import("./chunks/ru.ICXGVGRR.js"),"../../localization/lit-localize/locales/sk.ts":()=>import("./chunks/sk.SIP5JIOX.js"),"../../localization/lit-localize/locales/sl.ts":()=>import("./chunks/sl.R77UEKCA.js"),"../../localization/lit-localize/locales/sr-RS.ts":()=>import("./chunks/sr-RS.6M2YSTDX.js"),"../../localization/lit-localize/locales/sv.ts":()=>import("./chunks/sv.33ZY4CDS.js"),"../../localization/lit-localize/locales/th.ts":()=>import("./chunks/th.M27YUIZC.js"),"../../localization/lit-localize/locales/tr.ts":()=>import("./chunks/tr.Q2SIY6NA.js"),"../../localization/lit-localize/locales/uk-UA.ts":()=>import("./chunks/uk-UA.EJZOGSJR.js"),"../../localization/lit-localize/locales/vi.ts":()=>import("./chunks/vi.3RROGLXM.js"),"../../localization/lit-localize/locales/zf.ts":()=>import("./chunks/zf.GGWFQ3Y7.js"),"../../localization/lit-localize/locales/zh-CN.ts":()=>import("./chunks/zh-CN.MQHNRMN4.js"),"../../localization/lit-localize/locales/zh-HK.ts":()=>import("./chunks/zh-HK.WNR7XUSX.js"),"../../localization/lit-localize/locales/zh-TW.ts":()=>import("./chunks/zh-TW.GNCY2PNY.js")});Si(i=>md(`../../localization/lit-localize/locales/${i}.ts`));var ud={LOADER_DISABLED:"loader-disabled",CUSTOM_STYLES:"custom-styles",CLIENT_TOKEN:"client-token",JS_INIT:"js-initialized"},ue=class extends g{constructor(){super();this.customStyles="";this.clientToken="";this.options={};this.disableLoader=!1;this._jsInitialized=!1;this.previousLoadingState=!0;this.hasAssignedContent=!1;this._loadingTimeoutId=null;this._eventListenerController=null;this.locale="en-GB";this.onSlotChange=e=>{let o=e.target.assignedNodes({flatten:!0});this.hasAssignedContent=o.length>0,this.requestUpdate()};this.sdkContextController=new hr(this),this.sdkStateController=new mr(this),this.primerEventsController=new Pt(this),this.styleProcessingController=new fr(this),this.vaultManagerController=new Ut(this),this.cardNetworkController=new sr(this),this.achPaymentEventsController=new Qr(this),new Xr(this)}set jsInitialized(e){this.requestUpdate(),this._jsInitialized=e}get jsInitialized(){return this._jsInitialized}connectedCallback(){super.connectedCallback(),this.sdkContextController.setEventsController(this.primerEventsController),this._eventListenerController=new AbortController,document.addEventListener("primer:card-submit",this.handleExternalCardSubmit.bind(this),{signal:this._eventListenerController.signal})}attributeChangedCallback(e,r,o){e===ud.CUSTOM_STYLES?this.styleProcessingController.processCustomStyles(o):super.attributeChangedCallback(e,r,o)}disconnectedCallback(){this._loadingTimeoutId&&(window.clearTimeout(this._loadingTimeoutId),this._loadingTimeoutId=null),this.sdkStateController?.currentState.isLoading&&this.sdkStateController.forceCompleteLoading(),this._eventListenerController&&(this._eventListenerController.abort(),this._eventListenerController=null),super.disconnectedCallback()}willUpdate(e){e.has("options")&&(this.options?.locale&&(Pi(this.options?.locale)?this.locale=Ti(this.options?.locale):_.warn("\u{1F30E}\u2757 Unsupported locale provided:",this.options?.locale,"- Falling back to default locale `en-GB`")),_i(this.locale||"en-GB"))}updated(){let e=getComputedStyle(this);this.sdkContextController.setComputedStyles(e),this.checkLoadingStateChange()}handleExternalCardSubmit(e){this._eventListenerController?.signal.aborted||e.target!==this&&this.primerEventsController.dispatchEvent("primer:card-submit",e.detail)}checkLoadingStateChange(){let e=this.sdkStateController?.currentState.isLoading||!1;this.previousLoadingState&&!e&&(this.jsInitialized=!0,G({eventName:"CHECKOUT_FLOW_STARTED"})),this.previousLoadingState=e,e&&!this._loadingTimeoutId?this._loadingTimeoutId=window.setTimeout(()=>{this.sdkStateController?.currentState.isLoading&&(_.warn("Loading timeout in component, forcing completion"),this.sdkStateController.forceCompleteLoading(),this.jsInitialized=!0),this._loadingTimeoutId=null},1e4):!e&&this._loadingTimeoutId&&(window.clearTimeout(this._loadingTimeoutId),this._loadingTimeoutId=null)}render(){let e=this.sdkStateController.currentState,r=e.isLoading,o=e.error,a=!r&&!o;return m` ${R(r,()=>f)} ${R(o,()=>m`<primer-checkout-error></primer-checkout-error>`)} ${R(a,()=>m`<slot name="main" @slotchange=${this.onSlotChange}></slot>${R(this.hasAssignedContent,()=>f,()=>m`<primer-main></primer-main>`)} `,()=>f)} `}addEventListener(e,r,o){super.addEventListener(e,r,o)}removeEventListener(e,r,o){super.removeEventListener(e,r,o)}};ue.styles=[P,oa],d([p({type:String,attribute:"custom-styles"})],ue.prototype,"customStyles",2),d([p({type:String,attribute:"client-token"})],ue.prototype,"clientToken",2),d([p({type:Object})],ue.prototype,"options",2),d([p({type:Boolean,attribute:"loader-disabled"})],ue.prototype,"disableLoader",2),d([p({type:Boolean,reflect:!0,attribute:"js-initialized"})],ue.prototype,"_jsInitialized",2),d([ot("slot")],ue.prototype,"defaultSlot",2),d([M()],ue.prototype,"previousLoadingState",2),ue=d([k(),v("primer-checkout")],ue);function hd(i){return document.querySelector(`#${i}`)}function fd(i,t){let e=document.createElement("style");return e.textContent=i,e.id=t,e}function or(i,t,e=!0){if(!$r||hd(t))return;let o=fd(i,t);e&&document.head.firstChild?document.head.insertBefore(o,document.head.firstChild):document.head.appendChild(o)}var rn=`
|
|
154
154
|
@keyframes primer-css-spinner-rotate {
|
|
155
155
|
0% {
|
|
156
156
|
transform: rotate(0deg);
|
|
@@ -186,7 +186,7 @@ primer-checkout:not([js-initialized]):not([loader-disabled])::after {
|
|
|
186
186
|
animation: primer-css-spinner-rotate 1.2s linear infinite;
|
|
187
187
|
z-index: 9999;
|
|
188
188
|
}
|
|
189
|
-
`;var on=':root,primer-checkout{--primer-color-background-transparent-default:rgba(255,255,255,0);--primer-color-border-transparent-default:rgba(255,255,255,0);--primer-color-gray-100:#f5f5f5;--primer-color-gray-200:#eeeeee;--primer-color-gray-300:#e0e0e0;--primer-color-gray-400:#bdbdbd;--primer-color-gray-500:#9e9e9e;--primer-color-gray-600:#757575;--primer-color-gray-900:#212121;--primer-color-gray-000:#ffffff;--primer-color-brand:#2f98ff;--primer-color-red-100:#ffecec;--primer-color-red-500:#ff7279;--primer-color-red-900:#b4324b;--primer-color-blue-500:#399dff;--primer-color-blue-900:#2270f4;--primer-radius-base:4px;--primer-typography-brand:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;--primer-typography-title-xlarge-letter-spacing:-0.6px;--primer-typography-title-xlarge-weight:550;--primer-typography-title-xlarge-size:24px;--primer-typography-title-xlarge-line-height:32px;--primer-typography-title-large-letter-spacing:-0.2px;--primer-typography-title-large-weight:550;--primer-typography-title-large-size:16px;--primer-typography-title-large-line-height:20px;--primer-typography-body-large-letter-spacing:-0.2px;--primer-typography-body-large-weight:400;--primer-typography-body-large-size:16px;--primer-typography-body-large-line-height:20px;--primer-typography-body-medium-letter-spacing:0px;--primer-typography-body-medium-weight:400;--primer-typography-body-medium-size:14px;--primer-typography-body-medium-line-height:20px;--primer-typography-body-small-letter-spacing:0px;--primer-typography-body-small-weight:400;--primer-typography-body-small-size:12px;--primer-typography-body-small-line-height:16px;--primer-space-base:4px;--primer-size-base:4px;--primer-animation-duration:200ms;--primer-animation-easing:cubic-bezier(0.44,0,0.4,1);--primer-color-background-outlined-default:var(--primer-color-gray-000);--primer-color-background-outlined-disabled:var(--primer-color-gray-100);--primer-color-background-transparent-hover:var(--primer-color-gray-100);--primer-color-background-transparent-active:var(--primer-color-gray-200);--primer-color-background-transparent-loading:var(--primer-color-gray-100);--primer-color-background-transparent-focus:var(--primer-color-background-transparent-default);--primer-color-background-transparent-disabled:var(--primer-color-gray-100);--primer-color-background-transparent-selected:var(--primer-color-gray-100);--primer-color-text-primary:var(--primer-color-gray-900);--primer-color-text-placeholder:var(--primer-color-gray-500);--primer-color-text-disabled:var(--primer-color-gray-400);--primer-color-text-negative:var(--primer-color-red-900);--primer-color-text-link:var(--primer-color-blue-900);--primer-color-text-secondary:var(--primer-color-gray-600);--primer-color-border-outlined-default:var(--primer-color-gray-300);--primer-color-border-outlined-hover:var(--primer-color-gray-400);--primer-color-border-outlined-active:var(--primer-color-gray-500);--primer-color-border-outlined-disabled:var(--primer-color-gray-200);--primer-color-border-outlined-loading:var(--primer-color-gray-200);--primer-color-border-outlined-selected:var(--primer-color-brand);--primer-color-border-outlined-error:var(--primer-color-red-500);--primer-color-border-transparent-hover:var(--primer-color-border-transparent-default);--primer-color-border-transparent-active:var(--primer-color-border-transparent-default);--primer-color-border-transparent-disabled:var(--primer-color-border-transparent-default);--primer-color-border-transparent-selected:var(--primer-color-border-transparent-default);--primer-color-icon-primary:var(--primer-color-gray-900);--primer-color-icon-disabled:var(--primer-color-gray-400);--primer-color-icon-negative:var(--primer-color-red-500);--primer-color-focus:var(--primer-color-brand);--primer-color-loader:var(--primer-color-brand);--primer-radius-medium:8px;--primer-radius-small:4px;--primer-radius-large:12px;--primer-radius-xsmall:2px;--primer-typography-title-xlarge-font:var(--primer-typography-brand);--primer-typography-title-large-font:var(--primer-typography-brand);--primer-typography-body-large-font:var(--primer-typography-brand);--primer-typography-body-medium-font:var(--primer-typography-brand);--primer-typography-body-small-font:var(--primer-typography-brand);--primer-space-xxsmall:2px;--primer-space-xsmall:4px;--primer-space-small:8px;--primer-space-medium:12px;--primer-space-large:16px;--primer-space-xlarge:20px;--primer-size-small:16px;--primer-size-medium:20px;--primer-size-large:24px;--primer-size-xlarge:32px;--primer-size-xxlarge:40px;--primer-size-xxxlarge:56px;--primer-color-background-outlined-focus:var(--primer-color-background-outlined-default);--primer-color-background-outlined-loading:var(--primer-color-background-outlined-disabled);--primer-color-background-outlined-active:var(--primer-color-background-outlined-default);--primer-color-background-outlined-hover:var(--primer-color-background-outlined-default);--primer-color-background-outlined-selected:var(--primer-color-background-outlined-default);--primer-color-background-outlined-error:var(--primer-color-background-outlined-default);--primer-color-border-outlined-focus:var(--primer-color-focus);--primer-color-border-transparent-focus:var(--primer-color-focus);--primer-color-border-transparent-loading:var(--primer-color-border-transparent-disabled)}',an=":root,primer-checkout.primer-dark-theme{--primer-color-gray-100:#292929;--primer-color-gray-200:#424242;--primer-color-gray-300:#575757;--primer-color-gray-400:#858585;--primer-color-gray-500:#767577;--primer-color-gray-600:#c7c7c7;--primer-color-gray-900:#efefef;--primer-color-gray-000:#171619;--primer-color-brand:#2f98ff;--primer-color-red-100:#321c20;--primer-color-red-500:#e46d70;--primer-color-red-900:#f6bfbf;--primer-color-blue-500:#3f93e4;--primer-color-blue-900:#4aaeff}";var yd="primer-light-theme-css",gd="primer-dark-theme-css";function ao(){or(on,yd,!0)}function no(){or(an,gd,!0)}function nn(){ao(),no()}function sn(){or(rn,"primer-css-loader-styles",!1)}function ln(){nn()}function vd(){ao()}function bd(){no()}var dn=y` :host { display: inline-flex; align-items: center; justify-content: center; } .spinner-container { display: flex; align-items: center; justify-content: center; width: var(--spinner-size, var(--primer-size-medium)); height: var(--spinner-size, var(--primer-size-medium)); } .spinner-container:not(.compact) { margin: var(--primer-space-small) 0; } .spinner-container.compact { margin: 0; } .spinner { animation: spinner-rotate 1.2s linear infinite; width: 100%; height: 100%; color: var(--spinner-color, var(--primer-color-loader)); } .path { fill: currentColor; transform-origin: center; transition: fill var(--primer-animation-duration, 200ms) var(--primer-animation-easing, ease); } @keyframes spinner-rotate { 0% { transform: rotate(0deg); } 100% { transform: rotate(360deg); } } `;var so={small:16,medium:24,large:32},Ne=class extends g{constructor(){super(...arguments);this.color="var(--primer-color-loader)";this.size="medium";this.compact=!1}getSize(){if(this.size in so)return so[this.size];let e=parseInt(this.size,10);return isNaN(e)?so.medium:e}render(){let e=this.getSize(),r=20,o=`0 0 ${r} ${r}`;return this.style.setProperty("--spinner-color",this.color),this.style.setProperty("--spinner-size",`${e}px`),m`<div class="spinner-container ${this.compact?"compact":""}"><svg class="spinner" width="${e}" height="${e}" viewBox="${o}" fill="none" xmlns="http://www.w3.org/2000/svg" role="status" aria-label="Loading" ><path d="M4.27827 10.002C4.27827 6.84166 6.84019 4.27973 10.0005 4.27973C10.7676 4.27973 11.3894 3.6579 11.3894 2.89084C11.3894 2.12378 10.7676 1.50195 10.0005 1.50195C5.30607 1.50195 1.50049 5.30753 1.50049 10.002C1.50049 14.6964 5.30607 18.502 10.0005 18.502C14.6949 18.502 18.5005 14.6964 18.5005 10.002C18.5005 9.23489 17.8787 8.61306 17.1116 8.61306C16.3445 8.61306 15.7227 9.23489 15.7227 10.002C15.7227 13.1622 13.1608 15.7242 10.0005 15.7242C6.84019 15.7242 4.27827 13.1622 4.27827 10.002Z" fill="currentColor" class="path" /></svg></div>`}};Ne.styles=[dn],d([p({type:String})],Ne.prototype,"color",2),d([p({type:String})],Ne.prototype,"size",2),d([p({type:Boolean})],Ne.prototype,"compact",2),Ne=d([v("primer-spinner")],Ne);var Z=xe(class extends st{constructor(i){if(super(i),i.type!==ke.ATTRIBUTE||i.name!=="class"||i.strings?.length>2)throw Error("`classMap()` can only be used in the `class` attribute and must be the only part in the attribute.")}render(i){return" "+Object.keys(i).filter(t=>i[t]).join(" ")+" "}update(i,[t]){if(this.st===void 0){this.st=new Set,i.strings!==void 0&&(this.nt=new Set(i.strings.join(" ").split(/\s/).filter(r=>r!=="")));for(let r in t)t[r]&&!this.nt?.has(r)&&this.st.add(r);return this.render(t)}let e=i.element.classList;for(let r of this.st)r in t||(e.remove(r),this.st.delete(r));for(let r in t){let o=!!t[r];o===this.st.has(r)||this.nt?.has(r)||(o?(e.add(r),this.st.add(r)):(e.remove(r),this.st.delete(r)))}return Ee}});var cn=y` * { box-sizing: border-box; } :host { display: block; width: 100%; } .input-slot.focus-within { outline: 2px solid var(--primer-color-border-outlined-focus); outline-offset: -2px; } :host([has-error]) .input-slot.focus-within { outline: 2px solid var(--primer-color-border-outlined-error); background-color: var(--primer-color-background-outlined-error); } :host([has-error]) .input-slot { border-color: var(--primer-color-border-outlined-error); background-color: var(--primer-color-background-outlined-error); } .input-wrapper { display: flex; flex-direction: column; gap: var(--primer-space-xsmall); } .input-slot { padding: var(--primer-space-medium) var(--primer-space-medium); border: 1px solid var(--primer-color-border-outlined-default); border-radius: var(--primer-radius-small); background-color: var(--primer-color-background-outlined-default); height: calc( var(--primer-typography-body-large-line-height) + var(--primer-space-medium) + var(--primer-space-medium) + 2px ); display: flex; cursor: text; /* Indicate text input interactivity */ /* 2px is the border width */ } .input-slot ::slotted(*) { width: 100%; } .input-slot:hover { border-color: var(--primer-color-border-outlined-hover); background-color: var(--primer-color-background-outlined-hover); } .input-slot:active { border-color: var(--primer-color-border-outlined-active); background-color: var(--primer-color-background-outlined-active); } .input-slot:disabled { background-color: var(--primer-color-background-outlined-disabled); border-color: var(--primer-color-border-outlined-disabled); cursor: not-allowed; } `;var Le=class extends g{constructor(){super(...arguments);this.focusWithin=!1;this.hasError=!1;this.handleWrapperClick=e=>{if(e.target!==e.currentTarget)return;let r=this.findSlottedPrimerInput();r?r.focus():this.dispatchEvent(new CustomEvent("wrapper-click",{bubbles:!0,composed:!0}))}}findSlottedPrimerInput(){if(!this.inputSlot)return null;let e=this.inputSlot.assignedElements({flatten:!0}),r=e.find(o=>o.tagName.toLowerCase()==="primer-input");if(r)return r;for(let o of e){let a=o.querySelector("primer-input");if(a)return a}return null}render(){let e={"input-slot":!0,"focus-within":this.focusWithin};return m`<div class="input-wrapper"><slot name="label"></slot><div class="${Z(e)}" @click="${this.handleWrapperClick}"><slot name="input"></slot></div><slot name="error"></slot></div>`}};Le.styles=[cn],d([p({type:Boolean})],Le.prototype,"focusWithin",2),d([p({type:Boolean,reflect:!0,attribute:"has-error"})],Le.prototype,"hasError",2),d([at('slot[name="input"]')],Le.prototype,"inputSlot",2),Le=d([v("primer-input-wrapper")],Le);var pn=y` :host { display: inline-block; font-weight: var(--primer-typography-body-small-weight); font-size: var(--primer-typography-body-small-size); letter-spacing: var(--primer-typography-body-small-letter-spacing); line-height: var(--primer-typography-body-small-line-height); color: var(--primer-color-text-primary); font-family: var(--primer-typography-body-small-font); } :host([disabled]) { color: var(--primer-color-text-disabled); } `;var Be=class extends g{constructor(){super(...arguments);this.for="";this.disabled=!1}render(){return m`<label for=${this.for}><slot></slot></label>`}};Be.styles=[pn],d([p({type:String,reflect:!0})],Be.prototype,"for",2),d([p({type:Boolean,reflect:!0})],Be.prototype,"disabled",2),Be=d([v("primer-input-label")],Be);var mn=y` :host { display: contents; } button { align-items: center; border-radius: var(--primer-radius-medium); border: none; cursor: pointer; display: flex; font-family: var(--primer-typography-title-large-font); font-size: var(--primer-typography-title-large-size); font-weight: var(--primer-typography-title-large-weight); gap: var(--primer-space-small); justify-content: center; letter-spacing: var(--primer-typography-title-large-letter-spacing); line-height: var(--primer-typography-title-large-line-height); outline: none; padding: var(--primer-space-medium) var(--primer-space-medium); position: relative; } .button-content { display: flex; height: 100%; width: 100%; align-items: center; gap: var(--primer-space-small); justify-content: center; transition: opacity var(--primer-animation-duration) var(--primer-animation-easing); } .button-content-base { width: 100%; height: 100%; gap: var(--primer-space-small); transition: opacity var(--primer-animation-duration) var(--primer-animation-easing); } /* Reduce opacity of text during loading for better focus on the spinner */ .button-content.loading { opacity: 0.65; } :host([selectable]) button { justify-content: space-between; } /* Primary variant */ :host([variant='primary']) button { background-color: var(--primer-color-brand); /* This is correct (color-background for color) because Button is kind of a special component */ color: var(--primer-color-background-outlined-default); } :host([variant='primary']:not([disabled]):not([loading])) button:hover { filter: brightness(105%); } :host([variant='primary']:not([disabled]):not([loading])) button:active { filter: brightness(98%); } :host([variant='primary']) button:focus-visible { outline: 2px solid var(--primer-color-brand); outline-offset: 2px; } /* Disabled state for primary button */ :host([variant='primary'][disabled]:not([loading])) button, :host([variant='primary']:not([loading])) button:disabled { color: var(--primer-color-text-disabled); background-color: var(--primer-color-background-outlined-disabled); cursor: not-allowed; } /* Loading state for primary button - OVERRIDES disabled styles with higher specificity */ :host([variant='primary'][loading]) button { background-color: var(--primer-color-brand); opacity: 0.8; color: var(--primer-color-background-outlined-default); cursor: wait; } /* Secondary variant */ :host([variant='secondary']) button { background-color: var(--primer-color-background-outlined-default); color: var(--primer-color-text-primary); border: 1px solid var(--primer-color-border-outlined-default); } :host([variant='secondary']:not([disabled]):not([loading])) button:hover { background-color: var(--primer-color-background-outlined-hover); } :host([variant='secondary']:not([disabled]):not([loading])) button:active { background-color: var(--primer-color-background-outlined-active); } :host([variant='secondary']) button:focus-visible { outline: 2px solid var(--primer-color-border-outlined-focus); outline-offset: 2px; } /* Disabled state for secondary button */ :host([variant='secondary'][disabled]:not([loading])) button, :host([variant='secondary']:not([loading])) button:disabled { background-color: var(--primer-color-background-outlined-disabled); border-color: var(--primer-color-border-outlined-disabled); color: var(--primer-color-text-disabled); cursor: not-allowed; } /* Loading state for secondary button - OVERRIDES disabled styles */ :host([variant='secondary'][loading]) button { background-color: var(--primer-color-gray-100); border-color: var(--primer-color-gray-300); color: var(--primer-color-gray-600); cursor: wait; } /* Tertiary variant */ :host([variant='tertiary']) button { background-color: var(--primer-color-background-transparent-default); border: 1px solid var(--primer-color-border-transparent-default); color: var(--primer-color-text-primary); border-radius: var(--primer-radius-small); padding: var(--primer-space-xxsmall) var(--primer-space-xxsmall); } :host([variant='tertiary']:not([disabled]):not([loading])) button:hover { border-radius: var(--primer-radius-small); background-color: var(--primer-color-background-transparent-hover); border: 1px solid var(--primer-color-border-transparent-hover); color: var(--primer-color-text-primary); } :host([variant='tertiary']:not([disabled]):not([loading])) button:active { background-color: var(--primer-color-background-transparent-active); border-color: var(--primer-color-border-transparent-active); border-radius: var(--primer-radius-small); color: var(--primer-color-text-primary); } :host([variant='tertiary']) button:focus-visible { border-radius: var(--primer-radius-small); background-color: var(--primer-color-background-transparent-focus); outline: 2px solid var(--primer-color-border-transparent-focus); outline-offset: 2px; } /* Disabled state for tertiary button */ :host([variant='tertiary'][disabled]:not([loading])) button, :host([variant='tertiary']:not([loading])) button:disabled { background-color: var(--primer-color-border-transparent-disabled); color: var(--primer-color-text-disabled); cursor: not-allowed; } /* Loading state for tertiary button - OVERRIDES disabled styles */ :host([variant='tertiary'][loading]) button { background-color: var(--primer-color-gray-100); color: var(--primer-color-gray-600); cursor: wait; } /* Checked state styling */ :host([selectionState='checked']) button { border: 2px solid var(--primer-color-brand); background-color: var(--primer-color-gray-100); } /* Loading state - center spinner with content */ :host([loading]) primer-spinner { margin-right: var(--primer-space-xsmall); } /* Special case for tertiary variant loading state spinner size */ :host([variant='tertiary'][loading]) primer-spinner { transform: scale(0.85); } `;var de=class extends g{constructor(){super(...arguments);this.variant="primary";this.disabled=!1;this.loading=!1;this.buttonType="button";this.selectionState="default";this.selectable=!1;this.flex=!0;this.handleClick=()=>{!this.selectable||this.disabled||this.loading||(this.selectionState=this.selectionState==="default"?"checked":"default",this.dispatchEvent(new CustomEvent("selection-change",{bubbles:!0,composed:!0,detail:{state:this.selectionState}})))}}renderCheckmark(){return!this.selectable||this.selectionState!=="checked"||this.loading?f:m`<primer-icon name="checkmark" size="sm" color="var(--primer-color-brand)" ></primer-icon>`}renderSpinner(){if(!this.loading)return f;let e;return this.variant==="primary"?e="var(--primer-color-background-outlined-default)":(this.variant==="secondary"||this.variant==="tertiary")&&(e="var(--primer-color-gray-900)"),m`<primer-spinner size="small" color="${e}" compact ></primer-spinner>`}render(){return m`<button type=${this.buttonType} ?disabled=${this.disabled||this.loading} @click=${this.handleClick} part="button" aria-checked=${this.selectionState==="checked"} aria-busy=${this.loading} >${this.renderSpinner()} ${this.flex?m`<span class="button-content ${this.loading?"loading":""}"><slot></slot></span>`:m`<span class="button-content-base ${this.loading?"loading":""}" ><slot></slot></span>`} ${this.renderCheckmark()}</button>`}};de.styles=[_,mn],d([p({type:String,reflect:!0})],de.prototype,"variant",2),d([p({type:Boolean,reflect:!0})],de.prototype,"disabled",2),d([p({type:Boolean,reflect:!0})],de.prototype,"loading",2),d([p({type:String,attribute:"type"})],de.prototype,"buttonType",2),d([p({type:String,reflect:!0})],de.prototype,"selectionState",2),d([p({type:Boolean,reflect:!0})],de.prototype,"selectable",2),d([p({type:Boolean,reflect:!0})],de.prototype,"flex",2),de=d([v("primer-button")],de);var un=y` :host { display: contents; } :host(:not([active])) { display: none; } .error { color: var(--primer-color-text-negative); font-size: var(--primer-typography-body-small-size); line-height: var(--primer-typography-body-small-line-height); display: block; font-family: var(--primer-typography-body-small-font); } `;var ze=class extends g{constructor(){super(...arguments);this.for="";this.active=!0}render(){return m`<span class="error" role="alert" aria-live="polite" id="${this.for||""}" ><slot></slot></span>`}};ze.styles=[un],d([p({type:String,reflect:!0})],ze.prototype,"for",2),d([p({type:Boolean,reflect:!0})],ze.prototype,"active",2),ze=d([v("primer-input-error")],ze);var hn={trash:Me`<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M13.8333 2.99992H11.5V2.49992C11.5 2.05789 11.3244 1.63397 11.0118 1.32141C10.6993 1.00885 10.2754 0.833252 9.83333 0.833252H6.16667C5.72464 0.833252 5.30072 1.00885 4.98816 1.32141C4.67559 1.63397 4.5 2.05789 4.5 2.49992V2.99992H2.16667C1.98986 2.99992 1.82029 3.07015 1.69526 3.19518C1.57024 3.32021 1.5 3.48978 1.5 3.66659C1.5 3.8434 1.57024 4.01297 1.69526 4.138C1.82029 4.26302 1.98986 4.33326 2.16667 4.33326H2.83333V12.4999C2.83333 12.942 3.00893 13.3659 3.32149 13.6784C3.63405 13.991 4.05797 14.1666 4.5 14.1666H11.5C11.942 14.1666 12.3659 13.991 12.6785 13.6784C12.9911 13.3659 13.1667 12.942 13.1667 12.4999V4.33326H13.8333C14.0101 4.33326 14.1797 4.26302 14.3047 4.138C14.4298 4.01297 14.5 3.8434 14.5 3.66659C14.5 3.48978 14.4298 3.32021 14.3047 3.19518C14.1797 3.07015 14.0101 2.99992 13.8333 2.99992ZM5.83333 2.49992C5.83333 2.32311 5.90357 2.15354 6.0286 2.02851C6.15362 1.90349 6.32319 1.83325 6.5 1.83325H9.5C9.67681 1.83325 9.84638 1.90349 9.9714 2.02851C10.0964 2.15354 10.1667 2.32311 10.1667 2.49992V2.99992H5.83333V2.49992ZM11.8333 12.4999C11.8333 12.6767 11.7631 12.8463 11.6381 12.9713C11.513 13.0964 11.3435 13.1666 11.1667 13.1666H4.83333C4.65652 13.1666 4.48695 13.0964 4.36193 12.9713C4.2369 12.8463 4.16667 12.6767 4.16667 12.4999V4.33326H11.8333V12.4999Z" fill="currentColor"/><path d="M6.5 10.9999C6.67681 10.9999 6.84638 10.9297 6.9714 10.8047C7.09643 10.6796 7.16667 10.5101 7.16667 10.3333V7.33325C7.16667 7.15644 7.09643 6.98687 6.9714 6.86184C6.84638 6.73682 6.67681 6.66658 6.5 6.66658C6.32319 6.66658 6.15362 6.73682 6.0286 6.86184C5.90357 6.98687 5.83333 7.15644 5.83333 7.33325V10.3333C5.83333 10.5101 5.90357 10.6796 6.0286 10.8047C6.15362 10.9297 6.32319 10.9999 6.5 10.9999Z" fill="currentColor"/><path d="M9.5 10.9999C9.67681 10.9999 9.84638 10.9297 9.9714 10.8047C10.0964 10.6796 10.1667 10.5101 10.1667 10.3333V7.33325C10.1667 7.15644 10.0964 6.98687 9.9714 6.86184C9.84638 6.73682 9.67681 6.66658 9.5 6.66658C9.32319 6.66658 9.15362 6.73682 9.0286 6.86184C8.90357 6.98687 8.83333 7.15644 8.83333 7.33325V10.3333C8.83333 10.5101 8.90357 10.6796 9.0286 10.8047C9.15362 10.9297 9.32319 10.9999 9.5 10.9999Z" fill="currentColor"/></svg>`,"successful-check":Me`<svg viewBox="0 0 56 56" fill="none" xmlns="http://www.w3.org/2000/svg" ><g id="icon/check-circle-large"><path id="vector" fill-rule="evenodd" clip-rule="evenodd" d="M20.1762 29.5746L24.8429 34.2413C25.295 34.7007 26.0387 34.7007 26.4908 34.2413L35.8241 24.9079C36.2835 24.4559 36.2835 23.7121 35.8241 23.26C35.372 22.8007 34.6283 22.8007 34.1762 23.26L25.6668 31.7694L21.8241 27.9267C21.372 27.4673 20.6283 27.4673 20.1762 27.9267C19.7168 28.3788 19.7168 29.1225 20.1762 29.5746ZM28.0002 47.4173C38.3106 47.4173 46.6668 39.0611 46.6668 28.7507C46.6668 18.4402 38.3106 10.084 28.0002 10.084C17.6897 10.084 9.3335 18.4402 9.3335 28.7507C9.3335 39.0611 17.6897 47.4173 28.0002 47.4173Z" /></g></svg>`,"failure-icon":Me`<svg viewBox="0 0 40 40" fill="none" xmlns="http://www.w3.org/2000/svg" ><path fill-rule="evenodd" clip-rule="evenodd" d="M20.0008 23.3333C20.4614 23.3333 20.7873 22.9606 20.7873 22.5V15C20.7873 14.5394 20.4146 14.1666 20.0008 14.1666C19.587 14.1666 19.1675 14.5416 19.1675 15V22.5C19.1675 22.9583 19.5425 23.3333 20.0008 23.3333ZM32.9331 27.3594L22.5269 9.75935C22.0008 8.86821 21.0529 8.33488 20.0008 8.33331C18.9487 8.33331 18.006 8.8656 17.4748 9.75831L7.06331 27.3625C6.53987 28.2463 6.53206 29.3073 7.04134 30.201C7.568 31.1198 8.51904 31.6666 9.58935 31.6666H30.4175C31.4857 31.6666 32.4357 31.1182 32.9597 30.1995C33.4696 29.3073 33.4591 28.2448 32.9331 27.3594ZM18.7977 26.6666C18.7977 25.976 19.3107 25.4166 20.0008 25.4166C20.6935 25.4166 21.2508 25.9739 21.2039 26.6666C21.2039 27.3568 20.6909 27.9166 20.0008 27.9166C19.3576 27.9166 18.7977 27.3568 18.7977 26.6666Z" /></svg>`,"payment-card":Me`<svg width="28" height="21" viewBox="0 0 28 21" fill="none" xmlns="http://www.w3.org/2000/svg"><rect y="0.748047" width="28" height="20" rx="2" fill="#E0E0E0"/><rect y="6.74805" width="28" height="4" fill="#212121"/><rect x="19" y="13.748" width="6" height="4" rx="0.933333" fill="white"/></svg>`,"chevron-down":Me`<svg width="8" height="6" viewBox="0 0 8 6" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M4.41978 4.90118C4.32079 5.02361 4.16188 5.08353 4.00037 5.08353C3.83887 5.08353 3.67996 5.02361 3.55753 4.90118L0.63995 1.9836C0.395733 1.73939 0.395733 1.34382 0.63995 1.09947C0.884167 0.855124 1.27973 0.855254 1.52408 1.09947L4.00037 3.57524L6.47589 1.09973C6.72011 0.855515 7.11567 0.855515 7.36002 1.09973C7.60437 1.34395 7.60424 1.73952 7.36002 1.98386L4.41978 4.90118Z" fill="#212121"/></svg>`,checkmark:Me`<svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M15.6326 6.12193C15.8983 6.3668 15.8983 6.76276 15.6326 6.98418L8.75546 13.8613C8.53404 14.127 8.13808 14.127 7.89321 13.8613L4.35119 10.3186C4.10706 10.0971 4.10706 9.70118 4.35119 9.45631C4.59531 9.21404 4.99126 9.21404 5.23535 9.45631L8.33606 12.5588L14.7704 6.12193C15.0152 5.87863 15.4112 5.87863 15.6326 6.12193Z" /></svg>`,close:Me`<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20" fill="none"><path d="M14.7551 13.734C15.0479 14.0269 15.0479 14.502 14.7551 14.7949C14.4622 15.0879 13.987 15.0878 13.6941 14.7949L10.0005 11.0738L6.28054 14.7937C5.98767 15.0866 5.51249 15.0866 5.21959 14.7937C4.92668 14.5008 4.92671 14.0256 5.21959 13.7327L8.94075 10.0141L5.21856 6.26604C4.92568 5.97316 4.92568 5.49798 5.21856 5.20508C5.51143 4.91217 5.98661 4.91221 6.27951 5.20508L10.0005 8.95438L13.7204 5.23446C14.0132 4.94159 14.4884 4.94159 14.7813 5.23446C15.0742 5.52734 15.0742 6.00252 14.7813 6.29542L11.0602 10.0141L14.7551 13.734Z" fill="#212121" /></svg>`,edit:Me`<svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M10.9355 3.19972C11.7814 2.35335 13.1541 2.35335 13.9999 3.19972L14.3642 3.56456C15.21 4.41103 15.21 5.78338 14.3642 6.62925L8.42804 12.5684C8.16615 12.8272 7.84406 13.0169 7.48886 13.1192L4.47866 13.9802C4.2258 14.0524 3.95489 13.9802 3.76825 13.7694C3.58463 13.6099 3.51239 13.339 3.58463 13.0861L4.44555 10.0759C4.5479 9.72072 4.73754 9.39863 4.99642 9.13674L10.9355 3.19972ZM12.9524 4.22139C12.6965 3.93933 12.239 3.93933 11.956 4.22139L11.08 5.09705L12.4677 6.48476L13.3437 5.5817C13.6267 5.32583 13.6267 4.86828 13.3437 4.58622L12.9524 4.22139ZM5.83626 10.4733L5.33055 12.2342L7.09151 11.7285C7.21192 11.6954 7.31728 11.6322 7.40458 11.5449L11.4473 7.50521L10.0596 6.11751L6.01988 10.1602C5.93259 10.2475 5.86937 10.3529 5.83626 10.4733Z" fill="#212121"/><path d="M3.5 16.7126C3.5 16.3138 3.82335 15.9904 4.22222 15.9904H15.7778C16.1767 15.9904 16.5 16.3138 16.5 16.7126C16.5 17.1115 16.1767 17.4349 15.7778 17.4349H4.22222C3.82335 17.4349 3.5 17.1115 3.5 16.7126Z" fill="#212121"/></svg>`,lock:Me`<svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M7.91621 7.08223V8.33262H12.0842V7.08223C12.0842 5.93082 11.1516 4.99824 10.0002 4.99824C8.84879 4.99824 7.91621 5.93082 7.91621 7.08223ZM6.24902 8.33262V7.08223C6.24902 5.01127 7.92924 3.33105 10.0002 3.33105C12.0712 3.33105 13.7514 5.01127 13.7514 7.08223V8.33262H14.1682C15.0877 8.33262 15.8354 9.08025 15.8354 9.9998V15.0014C15.8354 15.9209 15.0877 16.6686 14.1682 16.6686H5.83223C4.91267 16.6686 4.16504 15.9209 4.16504 15.0014V9.9998C4.16504 9.08025 4.91267 8.33262 5.83223 8.33262H6.24902Z" fill="#212121" fill-opacity="0.62"/></svg>`};var fn=y` :host { display: inline-block; line-height: 0; /* so you don’t get extra space around the icon */ } /* Styling svgs rendered by passing *name* attribute - from our library file */ :host([size='sm']) svg { width: 20px; height: 20px; } :host([size='md']) svg { width: 42px; height: 42px; } :host([size='lg']) svg { width: 56px; height: 56px; } svg { /* --internal used for abstracting away the icon component */ fill: var(--internal-icon-color, currentColor); } /* For slotted icons */ :host([size='sm']) ::slotted(svg) { width: 20px; height: 20px; } :host([size='lg']) ::slotted(svg) { width: 56px; height: 56px; } ::slotted(svg) { /* --internal used for abstracting away the icon component */ fill: var(--internal-icon-color, currentColor); } `;var Re=class extends g{constructor(){super(...arguments);this.color="var(--primer-color-icon-primary)";this.size="lg"}render(){let e=this.name?hn[this.name]:null;return m`<div style="--internal-icon-color: ${this.color}">${e||m`<slot></slot>`}</div>`}};Re.styles=[fn],d([p({type:String,reflect:!0})],Re.prototype,"color",2),d([p({type:String,reflect:!0})],Re.prototype,"size",2),d([p({reflect:!0})],Re.prototype,"name",2),Re=d([v("primer-icon")],Re);var yn=y` :host { display: flex; flex-direction: column; align-items: center; gap: var(--primer-space-xsmall); } p { margin: 0; color: var(--primer-color-text-primary); text-align: center; font-size: var(--primer-typography-body-large-size); font-family: var(--primer-typography-body-large-font); font-weight: var(--primer-typography-body-large-weight); line-height: var(--primer-typography-body-large-line-height); letter-spacing: var(--primer-typography-body-large-letter-spacing); } p.secondary { color: var(--primer-color-text-secondary); text-align: center; font-family: var(--primer-typography-body-medium-font, Inter); font-size: var(--primer-typography-body-medium-size); font-weight: var(--primer-typography-body-medium-weight); line-height: var(--primer-typography-body-medium-line-height); letter-spacing: var(--primer-typography-body-medium-letter-spacing); } `;var Fe=class extends g{constructor(){super(...arguments);this.type="complete"}render(){return this.type==="complete"?m`<primer-icon size="lg" name="successful-check" color="var(--primer-color-icon-positive)" ></primer-icon><p>Checkout complete!</p><p class="secondary"> You'll be redirected to the order confirmation page soon. </p>`:m`<primer-icon size="lg" name="failure-icon" color="var(--primer-color-icon-negative)" ></primer-icon><p>Payment failed</p>${this.description?m`<p class="secondary">${this.description}</p>`:m`<p class="secondary">Something went wrong.</p>`} `}};Fe.styles=[yn],d([p({type:String,reflect:!0})],Fe.prototype,"type",2),d([p({type:String,reflect:!0})],Fe.prototype,"description",2),Fe=d([v("primer-checkout-state")],Fe);var gn=y` :host { display: contents; } input { width: 100%; padding: 0; border: none; height: var(--primer-typography-body-large-line-height); font-size: var(--primer-typography-body-large-size); font-family: var(--primer-typography-body-large-font); color: var(--primer-color-text-primary); background-color: transparent; outline: none; } input::placeholder { color: var(--primer-color-text-placeholder); font-size: var(--primer-typography-body-large-size); font-family: var(--primer-typography-body-large-font); } :host([disabled]) input { color: var(--primer-color-text-disabled); cursor: not-allowed; } :host([disabled]) input::placeholder { color: var(--primer-color-text-disabled); } `;var Cd=["text","password","email","number","tel","url","search","date","time","datetime-local","month","week","color"];function Ed(i){return Cd.includes(i)}var $=class extends g{constructor(){super(...arguments);this.value="";this.placeholder="";this.disabled=!1;this.name="";this.type="text";this.required=!1;this.readonly=!1;this.pattern="";this.min="";this.max="";this.step="";this.autocomplete="";this._id="";this.hasFocus=!1;this.hasError=!1;this.handleInput=e=>{e.stopPropagation();let r=e.target;this.value=r.value;let o=new CustomEvent("input",{detail:this.value,bubbles:!0,composed:!0});this.dispatchEvent(o)};this.handleChange=e=>{e.stopPropagation();let r=e.target;this.value=r.value;let o=new CustomEvent("change",{detail:this.value,bubbles:!0,composed:!0});this.dispatchEvent(o)};this.handleFocus=()=>{this.hasFocus=!0,this.dispatchEvent(new FocusEvent("focus",{bubbles:!0,composed:!0}))};this.handleBlur=()=>{this.hasFocus=!1,this.dispatchEvent(new FocusEvent("blur",{bubbles:!0,composed:!0}))};this.handleInvalid=e=>{e.stopPropagation(),this.hasError=!0,this.dispatchEvent(new Event("invalid",{bubbles:!0,composed:!0}))}}get id(){return this._id}set id(e){this._id=e,this.setAttribute("id",e)}focus(e){this.inputElement?.focus(e)}blur(){this.inputElement?.blur()}select(){this.inputElement?.select()}setSelectionRange(e,r,o){this.inputElement?.setSelectionRange(e,r,o)}get validity(){return this.inputElement?.validity||{}}get validationMessage(){return this.inputElement?.validationMessage||""}checkValidity(){return this.inputElement?.checkValidity()||!1}reportValidity(){return this.inputElement?.reportValidity()||!1}render(){let e={input:!0,"input--focused":this.hasFocus,"input--disabled":this.disabled,"input--error":this.hasError,"input--readonly":this.readonly},r=Object.entries(e).filter(([,o])=>o).map(([o])=>o).join(" ");return m`<input part="input" class=${r} .value=${this.value} .type=${this.type} ?disabled=${this.disabled} ?required=${this.required} ?readonly=${this.readonly} placeholder=${this.placeholder} pattern=${this.pattern} minlength=${this.minlength??""} maxlength=${this.maxlength??""} min=${this.min} max=${this.max} step=${this.step} autocomplete=${this.autocomplete} name=${this.name} id=${this.id} @input=${this.handleInput} @change=${this.handleChange} @focus=${this.handleFocus} @blur=${this.handleBlur} @invalid=${this.handleInvalid} />`}addEventListener(e,r,o){super.addEventListener(e,r,o)}removeEventListener(e,r,o){super.removeEventListener(e,r,o)}};$.styles=[gn],d([at("input")],$.prototype,"inputElement",2),d([p({type:String,reflect:!0})],$.prototype,"value",2),d([p({type:String,reflect:!0})],$.prototype,"placeholder",2),d([p({type:Boolean,reflect:!0})],$.prototype,"disabled",2),d([p({type:String,reflect:!0})],$.prototype,"name",2),d([p({type:String,reflect:!0,converter:{fromAttribute:e=>!e||!Ed(e)?(e&&e!=="text"&&P.warn(`Invalid input type: ${e}. Defaulting to 'text'.`),"text"):e}})],$.prototype,"type",2),d([p({type:Boolean,reflect:!0})],$.prototype,"required",2),d([p({type:Boolean,reflect:!0})],$.prototype,"readonly",2),d([p({type:String,reflect:!0})],$.prototype,"pattern",2),d([p({type:Number,reflect:!0})],$.prototype,"minlength",2),d([p({type:Number,reflect:!0})],$.prototype,"maxlength",2),d([p({type:String,reflect:!0})],$.prototype,"min",2),d([p({type:String,reflect:!0})],$.prototype,"max",2),d([p({type:String,reflect:!0})],$.prototype,"step",2),d([p({type:String,reflect:!0})],$.prototype,"autocomplete",2),d([M()],$.prototype,"hasFocus",2),d([M()],$.prototype,"hasError",2),$=d([v("primer-input")],$);var vn=y` :host { display: block; } .collapsable { width: 100%; } /* Make the button display with full width */ primer-button::part(button) { width: 100%; } .collapsable-wrapper { display: grid; grid-template-rows: 0fr; transition: grid-template-rows var(--primer-animation-duration) var(--primer-animation-easing); overflow: hidden; border-top: none; margin-top: -1px; } .collapsable-wrapper.expanded { grid-template-rows: 1fr; } .collapsable-content { min-height: 0; overflow: hidden; padding: var(--primer-space-medium, 12px) 0; } .icon-container { display: flex; align-items: center; justify-content: center; transition: transform var(--primer-animation-duration) var(--primer-animation-easing); font-size: 0.75em; } .icon-container.expanded { transform: rotate(180deg); } /* Disable animation for users who prefer reduced motion */ @media (prefers-reduced-motion: reduce) { .collapsable-wrapper, .icon-container { transition: none; } } `;var ce=class extends g{constructor(){super(...arguments);this.header="";this.expanded=!1;this.expandText="Expand";this.collapseText="Collapse";this.ariaLabel="";this.buttonVariant="primary";this.isExpanded=!1;this.toggleExpanded=()=>{this.isExpanded=!this.isExpanded,this.dispatchExpandedChangedEvent(this.isExpanded)}}connectedCallback(){super.connectedCallback(),this.isExpanded=this.expanded}dispatchExpandedChangedEvent(e){this.dispatchEvent(new CustomEvent("expanded-changed",{bubbles:!0,composed:!0,detail:{expanded:e}}))}expand(){this.isExpanded||(this.isExpanded=!0,this.dispatchExpandedChangedEvent(!0))}collapse(){this.isExpanded&&(this.isExpanded=!1,this.dispatchExpandedChangedEvent(!1))}render(){let e=this.isExpanded?this.collapseText:this.expandText,r=this.ariaLabel||this.header||e,o=this.header||e;return m`<div class="collapsable"><primer-button variant=${this.buttonVariant} buttonType="button" @click=${this.toggleExpanded} aria-expanded=${this.isExpanded} aria-controls="collapsable-content" aria-label=${r} ><span>${o}</span></primer-button><div class="collapsable-wrapper ${this.isExpanded?"expanded":""}" id="collapsable-content" role="region" aria-labelledby="collapsable-header" ><div class="collapsable-content"><slot></slot></div></div></div>`}};ce.styles=[vn],d([p({type:String})],ce.prototype,"header",2),d([p({type:Boolean})],ce.prototype,"expanded",2),d([p({type:String})],ce.prototype,"expandText",2),d([p({type:String})],ce.prototype,"collapseText",2),d([p({type:String})],ce.prototype,"ariaLabel",2),d([p({type:String})],ce.prototype,"buttonVariant",2),d([M()],ce.prototype,"isExpanded",2),ce=d([v("primer-collapsable")],ce);var bn=y` :host { display: block; width: 100%; box-sizing: border-box; } .error-message { display: flex; align-items: flex-start; padding: var(--primer-space-medium); background-color: var(--primer-color-red-100); border-radius: var(--primer-radius-medium); border: 1px solid var(--primer-color-border-outlined-error); margin-top: var(--primer-space-small); box-sizing: border-box; width: 100%; /* Add animation properties */ opacity: 1; transform: translateY(0); transition: opacity var(--primer-animation-duration) var(--primer-animation-easing), transform var(--primer-animation-duration) var(--primer-animation-easing); } .error-message.hidden { opacity: 0; transform: translateY(-var(--primer-space-medium)); pointer-events: none; } .error-icon { flex-shrink: 0; margin-right: var(--primer-space-medium); color: var(--primer-color-icon-negative); } .error-content { flex: 1; font-family: var(--primer-typography-body-medium-font); font-size: var(--primer-typography-body-medium-size); font-weight: var(--primer-typography-body-medium-weight); line-height: var(--primer-typography-body-medium-line-height); letter-spacing: var(--primer-typography-body-medium-letter-spacing); color: var(--primer-color-text-negative); } /* Respect user's preference for reduced motion */ @media (prefers-reduced-motion: reduce) { .error-message { transition: opacity var(--primer-animation-duration) var(--primer-animation-easing); transform: none; } .error-message.hidden { transform: none; } } `;var Oe=class extends g{constructor(){super();this.message="";this.visible=!1;this._role="alert";this.showMessage=!1;this.role="alert"}get role(){return this._role}set role(e){this._role=e,this.setAttribute("role",e)}updated(e){e.has("visible")&&this.handleVisibilityChange()}handleVisibilityChange(){this.visible?(this.showMessage=!0,this.setAttribute("aria-hidden","false")):setTimeout(()=>{this.showMessage=!1,this.setAttribute("aria-hidden","true")},200)}render(){if(!this.showMessage&&!this.visible)return f;let e={"error-message":!0,hidden:!this.visible};return m`<div part="error-message" class=${Z(e)} aria-live="assertive" aria-atomic="true" ><div part="error-icon" class="error-icon"><primer-icon name="failure-icon" size="sm" color="var(--primer-color-icon-negative)" ></primer-icon></div><div part="error-content" class="error-content">${this.message}</div></div>`}};Oe.styles=[bn],d([p({type:String})],Oe.prototype,"message",2),d([p({type:Boolean,reflect:!0})],Oe.prototype,"visible",2),d([M()],Oe.prototype,"showMessage",2),Oe=d([v("primer-error-message")],Oe);var Cn=y` :host { display: none; } `;var lt=class extends g{constructor(){super(...arguments);this._id=`d${Math.random().toString(36).substring(7)}`;this._handleSlotChange=e=>{let o=e.target.assignedNodes();if(!o.length)return;let a=this.getContainer();o.forEach(n=>a.appendChild(n))}}get id(){return this._id}getContainer(){let e=document.querySelector(`#${this._id}`);return e||(e=document.createElement("div"),e.id=this._id,document.body.appendChild(e),this._setupEventListeners(e)),e}_setupEventListeners(e){["primer-ach-error","primer-ach-bank-details-collected","primer-ach-mandate-confirmed","primer-ach-mandate-declined","primer-dialog-close"].forEach(r=>{e.addEventListener(r,o=>{o.stopPropagation(),this.dispatchEvent(new CustomEvent(r,{bubbles:!0,composed:!0,detail:o.detail}))})})}disconnectedCallback(){super.disconnectedCallback(),this.getContainer().remove()}render(){return m`<slot @slotchange=${this._handleSlotChange}></slot>`}};lt.styles=[Cn],d([M()],lt.prototype,"_id",2),lt=d([v("primer-portal")],lt);var En=y` :host { display: contents; } .backdrop { position: fixed; top: 0; left: 0; background-color: rgba(0, 0, 0, 0.2); z-index: 1000; display: flex; justify-content: center; align-items: center; width: 100vw; height: 100vh; /* Animation properties */ transition: all 500ms cubic-bezier(0.4, 0, 0.2, 1); opacity: 0; } .backdrop--entering { opacity: 0; } .backdrop--entered { opacity: 1; } .backdrop--exiting { opacity: 0; } .dialog { background-color: white; padding: var(--primer-space-medium); border-radius: var(--primer-radius-medium); max-width: 600px; box-shadow: 1px 1px 5px 3px rgba(0, 0, 0, 0.05); /* Animation properties */ transition: all 500ms cubic-bezier(0.4, 0, 0.2, 1); opacity: 0; transform: translateY(100vh); } .dialog--entering { opacity: 0; transform: translateY(100vh); } .dialog--entered { opacity: 1; transform: translateY(0); } .dialog--exiting { opacity: 0; transform: translateY(100vh); } .dialog.large { width: 500px; height: 640px; padding: 0; overflow: hidden; display: flex; flex-direction: column; } @media (max-width: 500px) { .dialog.large { width: calc(100vw - var(--primer-space-large, 32px)); height: calc(100vh - var(--primer-space-large, 32px)); max-width: none; max-height: none; } } .header { display: flex; justify-content: flex-end; flex-shrink: 0; } .content { flex: 1; overflow: auto; min-height: 0; } `;var Ae=class extends g{constructor(){super(...arguments);this.size="flex";this.showCloseButton=!0;this._animationState="entering";this._isVisible=!1;this._handleCloseClick=()=>{this._startExitAnimation()}}startExitAnimation(){this._startExitAnimation()}connectedCallback(){super.connectedCallback(),document.body.style.overflow="hidden",this._startEnterAnimation()}disconnectedCallback(){super.disconnectedCallback(),document.body.style.overflow="",this._animationTimeout&&clearTimeout(this._animationTimeout)}_startEnterAnimation(){this._animationState="entering",this._isVisible=!0,requestAnimationFrame(()=>{this._animationTimeout=window.setTimeout(()=>{this._animationState="entered"},500)})}_startExitAnimation(){this._animationTimeout&&clearTimeout(this._animationTimeout),this._animationState="exiting",this._animationTimeout=window.setTimeout(()=>{this._animationState="exited",this._isVisible=!1,this.dispatchEvent(new CustomEvent("primer-dialog-close",{bubbles:!0,composed:!0}))},500)}render(){return this._isVisible?m`<div class=${Z({backdrop:!0,"backdrop--entering":this._animationState==="entering","backdrop--entered":this._animationState==="entered","backdrop--exiting":this._animationState==="exiting"})} @click=${e=>{e.preventDefault()}} ><div class=${Z({dialog:!0,[this.size]:!0,"dialog--entering":this._animationState==="entering","dialog--entered":this._animationState==="entered","dialog--exiting":this._animationState==="exiting"})} ><div class="header">${this.showCloseButton?m`<primer-button variant="tertiary" @click=${this._handleCloseClick} ><primer-icon name="close"></primer-icon></primer-button>`:""}</div><div class="content"><slot></slot></div></div></div>`:m``}};Ae.styles=[En],d([p({type:String})],Ae.prototype,"size",2),d([p({type:Boolean})],Ae.prototype,"showCloseButton",2),d([M()],Ae.prototype,"_animationState",2),d([M()],Ae.prototype,"_isVisible",2),Ae=d([v("primer-dialog")],Ae);var xn=y` :host { display: contents; } .klarna-container { display: flex; flex-direction: column; width: 100%; transition: all var(--primer-animation-duration) var(--primer-animation-easing); } .klarna-container.expanded { border-radius: var(--primer-radius-medium); box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1); background-color: var(--primer-color-background-outlined-default); border: 1px solid var(--primer-color-border-outlined-default); padding: var(--primer-space-large); } .klarna-button-header { padding: 0; display: flex; align-items: center; justify-content: space-between; width: 100%; gap: var(--primer-space-small); } .klarna-accordion-icon { position: absolute; right: var(--primer-space-medium); font-size: var(--primer-typography-body-small-size); font-weight: var(--primer-typography-title-large-weight); color: var(--primer-color-text-secondary); transition: all var(--primer-animation-duration) var(--primer-animation-easing); display: inline-flex; align-items: center; justify-content: center; width: 24px; height: 24px; margin-left: var(--primer-space-small); } .klarna-accordion-icon.expanded { transform: rotate(180deg); } .klarna-expanded-content { width: 100%; display: grid; grid-template-rows: 0fr; transition: grid-template-rows var(--primer-animation-duration) var(--primer-animation-easing); } .klarna-expanded-content.visible { margin-top: var(--primer-space-large); border-top: 1px solid var(--primer-color-border-outlined-default); grid-template-rows: 1fr; } .klarna-accordion-content { overflow: hidden; } @keyframes fadeIn { from { opacity: 0; transform: translateY(-10px); } to { opacity: 1; transform: translateY(0); } } .category-selection { display: flex; flex-wrap: wrap; gap: var(--primer-space-small); margin: var(--primer-space-large) 0; } .category-button { padding: var(--primer-space-medium) var(--primer-space-large); border-radius: var(--primer-radius-base); background-color: var(--primer-color-background-outlined-loading); border: 1px solid var(--primer-color-border-outlined-default); font-size: var(--primer-typography-body-medium-size); cursor: pointer; transition: all var(--primer-animation-duration) var(--primer-animation-easing); flex: 1; min-width: 100px; text-align: center; } .category-button.selected { background-color: var(--primer-color-background-outlined-default); border-color: var(--primer-color-brand); color: var(--primer-color-brand); font-weight: var(--primer-typography-title-large-weight); } .category-button:hover:not(.selected):not(:disabled) { background-color: var(--primer-color-background-outlined-hover); } .category-button:disabled { background-color: var(--primer-color-background-outlined-disabled); border-color: var(--primer-color-border-outlined-disabled); color: var(--primer-color-text-disabled); cursor: not-allowed; } .klarna-category-container { min-height: 74px; width: 100%; border-radius: var(--primer-radius-small); border: 1px solid var(--primer-color-border-outlined-default); background-color: var(--primer-color-background-outlined-default); padding: var(--primer-space-medium); margin-bottom: var(--primer-space-large); transition: height var(--primer-animation-duration) var(--primer-animation-easing); overflow: hidden; } .klarna-button::part(button) { display: flex; flex: 1; gap: var(--primer-space-small); height: calc( ${we(Ie)} + calc(2 * var(--primer-space-medium)) ); width: 100%; } .klarna-button primer-icon { margin-right: var(--primer-space-medium); } .klarna-button:hover { background-color: var(--primer-color-background-outlined-hover); border-color: var(--primer-color-border-outlined-hover); } .klarna-pay-button { padding: var(--primer-space-medium) var(--primer-space-large); display: flex; align-items: center; justify-content: center; border-radius: var(--primer-radius-small); background-color: var(--primer-color-brand); color: var(--primer-color-background-outlined-default); border: none; font-size: var(--primer-typography-body-medium-size); font-weight: var(--primer-typography-body-medium-weight); width: 100%; cursor: pointer; transition: all var(--primer-animation-duration) var(--primer-animation-easing); } .klarna-pay-button:hover:not(.disabled) { filter: brightness(105%); } .klarna-pay-button.loading { opacity: 0.7; pointer-events: none; } .klarna-pay-button.disabled { background-color: var(--primer-color-background-outlined-disabled); border-color: var(--primer-color-border-outlined-disabled); color: var(--primer-color-text-disabled); cursor: not-allowed; } .loading { text-align: center; font-size: var(--primer-typography-body-medium-size); color: var(--primer-color-text-secondary); padding: var(--primer-space-medium); } .error { color: var(--primer-color-text-negative); font-size: var(--primer-typography-body-medium-size); padding: var(--primer-space-medium); text-align: center; border: 1px solid var(--primer-color-border-outlined-error); background-color: var(--primer-color-background-outlined-default); border-radius: var(--primer-radius-small); } /* Overall disabled state for entire Klarna component */ :host([disabled]) { cursor: not-allowed; } :host([disabled]) .klarna-button { pointer-events: none; cursor: not-allowed; } :host([disabled]) .category-button { pointer-events: none; cursor: not-allowed; } :host([disabled]) .klarna-pay-button { pointer-events: none; cursor: not-allowed; } /* Ensure disabled state is visible on container when expanded */ :host([disabled]) .klarna-container.expanded { background-color: var(--primer-color-background-outlined-disabled); border-color: var(--primer-color-border-outlined-disabled); opacity: 0.7; } `;var X=class extends g{constructor(){super(...arguments);this.paymentManagers=new Map;this.sdkState=null;this.headlessUtils=null;this.klarnaCategories=null;this.disabled=!1;this.selectedCategory=null;this.isExpanded=!1;this.headerAriaLabel=S("pay_with",{id:"pay_with"});this._paymentMethodManagerTask=new D(this,{task:async([e,r])=>{if(!e||!r)return L;let o=await r.getCDNAssets("KLARNA");return{manager:e.manager,klarnaIcon:o?.assets?.icon?`${o.goatCdnUrl}/${o.assets.icon}`:""}},args:()=>[this.paymentManagers.get("KLARNA"),this.headlessUtils]});this.toggleExpand=()=>{this.disabled||(this.isExpanded=!this.isExpanded,this.isExpanded||(this.selectedCategory=null))}}async startKlarnaPayment(){if(!(!this._paymentMethodManagerTask.value||!this.selectedCategory))try{await this._paymentMethodManagerTask.value.manager.start({paymentMethodCategoryId:this.selectedCategory})}catch(e){P.error("Failed to start Klarna payment",e)}}async renderSelectedCategory(){if(!(!this._paymentMethodManagerTask.value||!this.selectedCategory||!this.klarnaContainer))try{this.klarnaContainer.innerHTML="",await this._paymentMethodManagerTask.value.manager.renderCategory({containerId:this.klarnaContainer,paymentMethodCategoryId:this.selectedCategory,onHeightChange:e=>{e>0&&(this.klarnaContainer.style.height=`${e}px`)}})}catch(e){P.error("Failed to render Klarna category",e)}}selectCategory(e){this.disabled||(this.selectedCategory=e,this.renderSelectedCategory())}updated(e){e.has("selectedCategory")&&this.selectedCategory&&this.renderSelectedCategory()}renderCategorySelection(){let e=this.klarnaCategories?.categories||[];return this.klarnaCategories?.isLoading||!1?m`<div class="loading"><primer-spinner size="small"></primer-spinner></div>`:m`<div class="category-selection">${e.map(o=>m`<button class=${Z({"category-button":!0,selected:o.id===this.selectedCategory})} @click=${()=>{this.selectCategory(o.id)}} ?disabled=${this.disabled} >${o.name}</button>`)}</div>`}renderExpandedContent(){return m` ${this.renderCategorySelection()} ${this.selectedCategory?m`<div id="klarna-category-container" class="klarna-category-container" ></div>`:f}<button class=${Z({"klarna-pay-button":!0,loading:!!this.sdkState?.isProcessing,disabled:!this.selectedCategory||this.disabled})} ?disabled=${!this.selectedCategory||this.sdkState?.isProcessing||this.disabled} @click=${()=>this.startKlarnaPayment()} >${S("confirm",{id:"confirm"})}</button>`}render(){return this._paymentMethodManagerTask.render({error:e=>{let r=e instanceof Error?e.message:"Unknown error in Klarna";return m`<div class="error"> Error loading Klarna: ${r}</div>`},complete:({manager:e,klarnaIcon:r})=>e?m`<div class="klarna-container ${this.isExpanded?"expanded":""}"><div class="klarna-button-header"><primer-button buttonType="button" variant="secondary" class="klarna-button" @click=${this.toggleExpand} aria-expanded=${this.isExpanded} aria-controls="collapsable-content" aria-label=${this.headerAriaLabel} ?disabled=${this.disabled} ><img src=${r} alt="Klarna logo" /><span>${S("pay_with",{id:"pay_with"})} Klarna</span><span class="klarna-accordion-icon ${this.isExpanded?"expanded":""}" > ▼ </span></primer-button></div><div class="klarna-expanded-content ${this.isExpanded?"visible":""}" ><div class="klarna-accordion-content">${this.renderExpandedContent()}</div></div></div>`:f})}};X.styles=[_,xn],d([C({context:se,subscribe:!0}),p()],X.prototype,"paymentManagers",2),d([C({context:z,subscribe:!0}),p()],X.prototype,"sdkState",2),d([C({context:B,subscribe:!0}),p({type:Object})],X.prototype,"headlessUtils",2),d([C({context:cr,subscribe:!0}),p()],X.prototype,"klarnaCategories",2),d([p({type:Boolean,attribute:"disabled"})],X.prototype,"disabled",2),d([M()],X.prototype,"selectedCategory",2),d([M()],X.prototype,"isExpanded",2),d([M()],X.prototype,"headerAriaLabel",2),d([at("#klarna-category-container")],X.prototype,"klarnaContainer",2),X=d([v("primer-klarna"),k()],X);var An=y` :host { display: contents; } `;var Se=class extends g{constructor(){super(...arguments);this.type=void 0;this.disabled=!1;this.paymentMethods=null;this.analyticsUtils=null;this.handleClick=()=>{this.paymentMethods?.get(this.type)?.managerType!=="CARD"&&this.sendPaymentMethodSelectionEvent()}}sendPaymentMethodSelectionEvent(){this.type&&G({eventName:"PAYMENT_METHOD_SELECTION",paymentMethod:this.type})}render(){if(!this.type)return f;let e=this.paymentMethods?.get(this.type);if(!e)return f;let r;switch(e?.managerType){case"CARD":r=m`<primer-card-form ?disabled=${this.disabled} ></primer-card-form>`;break;case"NATIVE":r=m`<primer-native-payment .paymentMethod=${e} ?disabled=${this.disabled} ></primer-native-payment>`;break;case"REDIRECT":r=m`<primer-redirect-payment .paymentMethod=${e} ?disabled=${this.disabled} ></primer-redirect-payment>`;break;case"KLARNA":r=m`<primer-klarna ?disabled=${this.disabled} ></primer-klarna>`;break;case"ACH":r=m`<primer-dynamic-payment .paymentMethod=${e} ></primer-dynamic-payment>`;break;default:return f}return m`<div @click=${this.handleClick}>${r}</div>`}};Se.styles=[An],d([p({type:String})],Se.prototype,"type",2),d([p({type:Boolean,attribute:"disabled"})],Se.prototype,"disabled",2),d([C({context:tt,subscribe:!0}),p()],Se.prototype,"paymentMethods",2),d([C({context:Qe,subscribe:!0}),p({attribute:!1})],Se.prototype,"analyticsUtils",2),Se=d([v("primer-payment-method")],Se);var Sn=y` :host { display: block; width: 100%; } .payment-methods-container { display: flex; flex-direction: column; gap: var(--primer-space-small); } :host([disabled]) .payment-methods-container { opacity: 0.5; pointer-events: none; } `;var ve=class extends g{constructor(){super(...arguments);this.disabled=!1;this.paymentMethods=null;this.clientOptions=null}getFilteredMethods(){if(!this.paymentMethods)return[];let e=this.paymentMethods.toArray();if(this.include){let r=this.include.split(",").map(o=>o.trim());e=e.filter(o=>r.includes(o.type))}if(this.exclude){let r=this.exclude.split(",").map(o=>o.trim());e=e.filter(o=>!r.includes(o.type))}return e}render(){let e=this.getFilteredMethods();return e.length===0?f:m`<div class="payment-methods-container">${e.map(r=>m`<primer-payment-method type="${r.type}" ?disabled="${this.disabled||this.clientOptions?.disabledPayments===!0}" ></primer-payment-method>`)}</div>`}};ve.styles=[_,Sn],d([p({type:String})],ve.prototype,"include",2),d([p({type:String})],ve.prototype,"exclude",2),d([p({type:Boolean,attribute:"disabled"})],ve.prototype,"disabled",2),d([C({context:tt,subscribe:!0}),p()],ve.prototype,"paymentMethods",2),d([C({context:ne,subscribe:!0}),p()],ve.prototype,"clientOptions",2),ve=d([v("primer-payment-method-container")],ve);var _n=y` :host { display: flex; flex-direction: column; gap: var(--primer-space-medium); width: 100%; } h2 { margin: 0; padding: 0; border-radius: var(--primer-radius-medium); font-weight: var(--primer-typography-title-xlarge-weight); font-size: var(--primer-typography-title-xlarge-size); letter-spacing: var(--primer-typography-title-xlarge-letter-spacing); line-height: var(--primer-typography-title-xlarge-line-height); font-family: var(--primer-typography-title-xlarge-font); } p { margin: 0; padding: 0; border-radius: var(--primer-radius-medium); font-weight: var(--primer-typography-body-medium-weight); font-size: var(--primer-typography-body-medium-size); letter-spacing: var(--primer-typography-body-medium-letter-spacing); line-height: var(--primer-typography-body-medium-line-height); font-family: var(--primer-typography-body-medium-font); } form { display: flex; flex-direction: column; gap: var(--primer-space-medium); width: 100%; } .form-row { display: flex; gap: var(--primer-space-small); width: 100%; } .form-row primer-input-wrapper { flex: 1; } .error-message { color: var(--primer-color-text-negative); background-color: var(--primer-color-red-100); padding: var(--primer-space-small); border-radius: var(--primer-radius-small); font-weight: var(--primer-typography-body-medium-weight); font-size: var(--primer-typography-body-medium-size); letter-spacing: var(--primer-typography-body-medium-letter-spacing); line-height: var(--primer-typography-body-medium-line-height); font-family: var(--primer-typography-body-medium-font); } .loading-container { display: flex; flex-direction: column; align-items: center; justify-content: center; gap: var(--primer-space-medium); padding: var(--primer-space-large); } .button-group { display: flex; gap: var(--primer-space-small); margin-top: var(--primer-space-medium); } /* Apply responsive styles for small screens */ @media (max-width: 600px) { .form-row { flex-direction: column; gap: var(--primer-space-medium); } .button-group { flex-direction: column; } } `;function Pn(){return{firstName:{value:"",error:"",pristine:!0,touched:!1,dirty:!1,valid:!1},lastName:{value:"",error:"",pristine:!0,touched:!1,dirty:!1,valid:!1},emailAddress:{value:"",error:"",pristine:!0,touched:!1,dirty:!1,valid:!1}}}var ei=class{constructor(t,e){this.formState=Pn();this.host=t,this.validate=e,t.addController(this)}get hasError(){return{firstName:this.formState.firstName.dirty&&this.formState.firstName.touched&&!!this.formState.firstName.error,lastName:this.formState.lastName.dirty&&this.formState.lastName.touched&&!!this.formState.lastName.error,emailAddress:this.formState.emailAddress.dirty&&this.formState.emailAddress.touched&&!!this.formState.emailAddress.error}}get formData(){return{firstName:this.formState.firstName.value,lastName:this.formState.lastName.value,emailAddress:this.formState.emailAddress.value}}async setFieldValue(t,e){let r=this.formState[t];r.value=e,r.dirty=!0,r.error="",r.valid=!0;let o=await this.validate(this.formData);this.setValidation(o)}setValidation(t,e=!1){e&&(this.formState.firstName.touched=!0,this.formState.lastName.touched=!0,this.formState.emailAddress.touched=!0,this.formState.firstName.dirty=!0,this.formState.lastName.dirty=!0,this.formState.emailAddress.dirty=!0),t.validationErrors.forEach(r=>{this.isValidFieldName(r.field)&&(this.formState[r.field].error=r.message,this.formState[r.field].valid=r.message==="")}),this.host.dispatchEvent(new CustomEvent("primer-ach-validation",{bubbles:!0,composed:!0,detail:{validation:t}})),this.host.requestUpdate()}setFieldTouched(t){this.formState[t].touched||(this.formState[t].touched=!0,this.host.requestUpdate())}resetForm(){this.formState=Pn(),this.host.requestUpdate()}isValidFieldName(t){return!!t&&["firstName","lastName","emailAddress"].includes(t)}hostConnected(){}hostDisconnected(){}};var he=class extends g{constructor(){super(...arguments);this.formController=new ei(this,e=>this._paymentMethodManagerTask.value.setAndValidate(e));this.paymentManagers=new Map;this.sdkState=void 0;this.clientOptions=void 0;this.screen="form";this.isSubmitting=!1;this._paymentMethodManagerTask=new D(this,{task:([e])=>e!=="STRIPE_ACH"?L:this.paymentManagers.get(e)?.manager,args:()=>[this.paymentMethod?.type]})}_handleInput(e,r){let o=e.target;this.formController.setFieldValue(r,o.value)}_handleBlur(e){this.formController.setFieldTouched(e)}_handleError(e){this.dispatchEvent(new CustomEvent("primer-ach-error",{bubbles:!0,composed:!0,detail:{error:e instanceof Error?e:new Error(typeof e=="string"?e:"Unknown error occurred")}}))}async _handleSubmitButtonClick(e){if(!this.isSubmitting){this.isSubmitting=!0;try{let r=await e.start(this.formController.formData);if(!r||r.valid)return await this._handleCollectBankAccountDetails(e);r&&this.formController.setValidation(r,!0)}catch(r){this._handleError(r)}finally{this.isSubmitting=!1}}}async _handleCollectBankAccountDetails(e){try{await e.collectBankAccountDetails(),this.screen="mandate",this.dispatchEvent(new CustomEvent("primer-ach-bank-details-collected",{bubbles:!0,composed:!0}))}catch(r){this._handleError(r)}}async _handleConfirmMandate(){if(this._paymentMethodManagerTask.value){this.isSubmitting=!0;try{await this._paymentMethodManagerTask.value.confirmMandate(),this.dispatchEvent(new CustomEvent("primer-ach-mandate-confirmed",{bubbles:!0,composed:!0}))}catch(e){this._handleError(e)}finally{this.isSubmitting=!1}}}async _handleDeclineMandate(){if(this._paymentMethodManagerTask.value){this.isSubmitting=!0;try{await this._paymentMethodManagerTask.value.declineMandate(),this.dispatchEvent(new CustomEvent("primer-ach-mandate-declined",{bubbles:!0,composed:!0}))}catch(e){this._handleError(e)}finally{this.isSubmitting=!1}}}renderForm(e){return m`<h2>${S("payWithAch",{id:"payWithAch"})}</h2><p>${S("stripe_ach_user_details_collection_subtitle_label",{id:"stripe_ach_user_details_collection_subtitle_label"})}</p><form @submit=${r=>r.preventDefault()}><div class="form-row"><primer-input-wrapper .hasError=${this.formController.hasError.firstName} ><primer-input-label slot="label">${S("stripe_ach_user_details_collection_first_name_label",{id:"stripe_ach_user_details_collection_first_name_label"})}</primer-input-label><primer-input slot="input" .value=${this.formController.formState.firstName.value} @input=${r=>this._handleInput(r,"firstName")} @blur=${()=>this._handleBlur("firstName")} ?disabled=${this.isSubmitting} ></primer-input><primer-input-error slot="error">${this.formController.hasError.firstName?this.formController.formState.firstName.error:f}</primer-input-error></primer-input-wrapper><primer-input-wrapper .hasError=${this.formController.hasError.lastName} ><primer-input-label slot="label">${S("stripe_ach_user_details_collection_last_name_label",{id:"stripe_ach_user_details_collection_last_name_label"})}</primer-input-label><primer-input slot="input" .value=${this.formController.formState.lastName.value} @input=${r=>this._handleInput(r,"lastName")} @blur=${()=>this._handleBlur("lastName")} ?disabled=${this.isSubmitting} ></primer-input><primer-input-error slot="error">${this.formController.hasError.lastName?this.formController.formState.lastName.error:f}</primer-input-error></primer-input-wrapper></div><primer-input-wrapper .hasError=${this.formController.hasError.emailAddress} ><primer-input-label slot="label">${S("stripe_ach_user_details_collection_email_address_label",{id:"stripe_ach_user_details_collection_email_address_label"})}</primer-input-label><primer-input slot="input" type="email" .value=${this.formController.formState.emailAddress.value} @input=${r=>this._handleInput(r,"emailAddress")} @blur=${()=>this._handleBlur("emailAddress")} ?disabled=${this.isSubmitting} ></primer-input><primer-input-error slot="error">${this.formController.hasError.emailAddress?this.formController.formState.emailAddress.error:f}</primer-input-error></primer-input-wrapper><p>${S("stripe_ach_user_details_collection_data_usage_label",{id:"stripe_ach_user_details_collection_data_usage_label"})}</p><primer-button buttonType="submit" variant="primary" @click=${()=>this._handleSubmitButtonClick(e)} ?disabled=${this.isSubmitting} ?loading=${this.isSubmitting} >${S("stripe_ach_user_details_collection_continue_button",{id:"stripe_ach_user_details_collection_continue_button"})}</primer-button></form>`}renderMandate(){return m`<h2>${S("payWithAch",{id:"payWithAch"})}</h2><p>${this.clientOptions?.stripe?.mandateData.fullMandateText??S("stripe_ach_mandate_template_web",{id:"stripe_ach_mandate_template_web"}).replace(/\{merchantName\}/g,this.clientOptions?.stripe?.mandateData.merchantName??"Merchant")}</p><div class="button-group"><primer-button variant="primary" @click=${this._handleConfirmMandate.bind(this)} ?disabled=${this.isSubmitting} ?loading=${this.isSubmitting} >${S("stripe_ach_mandate_accept_button",{id:"stripe_ach_mandate_accept_button"})}</primer-button><primer-button variant="tertiary" @click=${this._handleDeclineMandate.bind(this)} ?disabled=${this.isSubmitting} >${S("stripe_ach_mandate_cancel_payment_button",{id:"stripe_ach_mandate_cancel_payment_button"})}</primer-button></div>`}render(){return this._paymentMethodManagerTask.render({complete:e=>e?this.screen==="form"?this.renderForm(e):this.renderMandate():f})}};he.styles=[_,_n],d([p({type:Object})],he.prototype,"paymentMethod",2),d([C({context:se,subscribe:!0}),p({attribute:!1})],he.prototype,"paymentManagers",2),d([C({context:z,subscribe:!0}),p({attribute:!1})],he.prototype,"sdkState",2),d([C({context:ne,subscribe:!0}),p({attribute:!1})],he.prototype,"clientOptions",2),d([M()],he.prototype,"screen",2),d([M()],he.prototype,"isSubmitting",2),he=d([v("primer-ach-payment"),k()],he);var Tn=y` :host { height: calc( ${we(Ie)} + calc(2 * var(--primer-space-medium)) ); display: flex; /* Default value for the background color CSS variable */ --dynamic-payment-button-bg-color: var( --primer-color-background-outlined-default ); } primer-button { width: 100%; height: 100%; } primer-button::part(button) { background-color: var(--dynamic-payment-button-bg-color); border: 1px solid var(--primer-color-border-outlined-default); color: var(--primer-color-text-primary); flex: 1; padding: 1px; } .image-container { display: flex; justify-content: center; height: 100%; } /* Target the img specifically inside our component */ img { height: 100%; } `;function ar(i){return i.toLowerCase().replace(/[^a-zA-Z0-9]+(.)/g,(t,e)=>e.toUpperCase())}var be=class extends g{constructor(){super(...arguments);this.paymentManagers=new Map;this.sdkState=null;this.headlessUtils=null;this.open=!1;this._paymentMethodManagerTask=new D(this,{task:([e,r])=>!e||!r?L:r.get(e)?.manager,args:()=>[this.paymentMethod?.type,this.paymentManagers]});this._getAssetsTask=new D(this,{task:([e,r])=>{if(!e||!r)return L;let o=r.getPaymentMethodConfiguration(e);return o?{backgroundColor:o.displayMetadata.button.backgroundColor.colored,name:o.name,displayName:this._legacyGetButtonLabel(o.displayMetadata.button.text),iconUrl:o.displayMetadata.button.iconUrl.colored||o.displayMetadata.button.iconUrl.light||o.displayMetadata.button.iconUrl.dark}:L},args:()=>[this.paymentMethod?.type,this.headlessUtils]});this._setupTasks=new D(this,{task:([e,r])=>!e||!r?L:{paymentMethodManager:e,assetsConfig:r},args:()=>[this._paymentMethodManagerTask.value,this._getAssetsTask.value]})}_legacyGetButtonLabel(e){if(!e)return;let r=e?ar(e):"";return r==="payWith"&&(r="pay_with"),S(r,{id:r})}start(){this._paymentMethodManagerTask.value&&(this.open=!0)}renderDialog(){return this.open?m`<primer-portal><primer-dialog @primer-dialog-close="${()=>this.open=!1}"><primer-ach-payment .paymentMethod=${this.paymentMethod} @primer-ach-error=${()=>this.open=!1} @primer-ach-mandate-confirmed=${()=>this.open=!1} @primer-ach-mandate-declined=${()=>this.open=!1} ></primer-ach-payment></primer-dialog></primer-portal>`:f}render(){return this._setupTasks.render({error:()=>f,complete:({assetsConfig:e})=>(this.style.setProperty("--dynamic-payment-button-bg-color",e.backgroundColor),m`<primer-button @click="${()=>this.start()}" class=${Z({loading:!!this.sdkState?.isProcessing,reverse:!0})} title="${S("pay_with",{id:"pay_with"})} ${e.name}" ><span class="image-container"><img src="${e.iconUrl}" alt="${e.name}" /></span>${e.displayName}</primer-button>${this.renderDialog()} `)})}};be.styles=[_,Tn],d([p({type:Object})],be.prototype,"paymentMethod",2),d([C({context:se,subscribe:!0})],be.prototype,"paymentManagers",2),d([C({context:z,subscribe:!0})],be.prototype,"sdkState",2),d([C({context:B,subscribe:!0})],be.prototype,"headlessUtils",2),d([M()],be.prototype,"open",2),be=d([v("primer-dynamic-payment"),k()],be);var wn=y` :host { height: calc( ${we(Ie)} + calc(2 * var(--primer-space-medium)) ); display: flex; /* Default value for the background color CSS variable */ --redirect-payment-button-bg-color: var( --primer-color-background-outlined-default ); } primer-button { width: 100%; height: 100%; } primer-button::part(button) { background-color: var(--redirect-payment-button-bg-color); border: 1px solid var(--primer-color-border-outlined-default); color: var(--primer-color-text-primary); flex: 1; padding: var(--primer-space-small); display: flex; align-items: center; justify-content: center; gap: var(--primer-space-small); } /* Default layout: icon on the left (START) */ primer-button { display: flex; flex-direction: row; } /* When icon position is END */ primer-button.icon-end { flex-direction: row-reverse; } .image-container { display: flex; justify-content: center; align-items: center; min-width: 100px; height: 100%; } .button-text { font-family: var(--primer-typography-font-family); font-size: var(--primer-typography-title-small-font-size); font-weight: var(--primer-typography-title-small-font-weight); line-height: var(--primer-typography-title-small-line-height); letter-spacing: var(--primer-typography-title-small-letter-spacing); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } /* Target the img specifically inside our component */ img { max-width: 100px; width: 100%; height: auto; object-fit: cover; max-height: 100%; } /* For image container sizing */ .image-container { flex-shrink: 0; flex-grow: 1; } /* Disabled state styling - subtle visual feedback */ :host([disabled]) { opacity: 0.6; cursor: not-allowed; } :host([disabled]) primer-button::part(button) { pointer-events: none; cursor: not-allowed; } :host([disabled]) img { filter: grayscale(100%); } `;var Ce=class extends g{constructor(){super(...arguments);this.disabled=!1;this.paymentManagers=new Map;this.sdkState=null;this.headlessUtils=null;this._paymentMethodManagerTask=new D(this,{task:([e,r])=>!e||!r?L:r.get(e)?.manager,args:()=>[this.paymentMethod?.type,this.paymentManagers]});this._getAssetsTask=new D(this,{task:([e,r])=>{if(!e||!r)return L;let o=r.getPaymentMethodConfiguration(e);if(!o)return L;let a=o.displayMetadata.button.backgroundColor.colored??o.displayMetadata.button.backgroundColor.light,n=o.displayMetadata.button.iconPositionRelativeToText||"START";return{backgroundColor:a,name:o.name,displayName:this._legacyGetButtonLabel(o.displayMetadata.button.text),iconUrl:o.displayMetadata.button.iconUrl.colored??o.displayMetadata.button.iconUrl.light,iconPosition:n}},args:()=>[this.paymentMethod?.type,this.headlessUtils]});this._setupTasks=new D(this,{task:([e,r])=>!e||!r?L:{paymentMethodManager:e,assetsConfig:r},args:()=>[this._paymentMethodManagerTask.value,this._getAssetsTask.value]})}_legacyGetButtonLabel(e){if(!e)return;let r=e?ar(e):"";return r==="payWith"&&(r="pay_with"),S(r,{id:r})}startRedirectPayment(){this.disabled||this._paymentMethodManagerTask.value&&this._paymentMethodManagerTask.value.start()}render(){return this._setupTasks.render({error:()=>f,complete:({assetsConfig:e})=>{this.style.setProperty("--redirect-payment-button-bg-color",e.backgroundColor);let r={loading:!!this.sdkState?.isProcessing,"icon-end":e.iconPosition==="END","image-only":!e.displayName},o=e.displayName?m`<span class="image-container"><img src="${e.iconUrl}" alt="${e.name}" /></span><span class="button-text">${e.displayName}</span>`:m`<span class="image-container"><img src="${e.iconUrl}" alt="${e.name}" /></span>`;return m`<primer-button @click="${()=>this.startRedirectPayment()}" class=${Z(r)} title="${S("pay_with",{id:"pay_with"})} ${e.name}" ?disabled=${this.disabled} >${o}</primer-button>`}})}};Ce.styles=[_,wn],d([p({type:Object})],Ce.prototype,"paymentMethod",2),d([p({type:Boolean,attribute:"disabled"})],Ce.prototype,"disabled",2),d([C({context:se,subscribe:!0})],Ce.prototype,"paymentManagers",2),d([C({context:z,subscribe:!0})],Ce.prototype,"sdkState",2),d([C({context:B,subscribe:!0})],Ce.prototype,"headlessUtils",2),Ce=d([v("primer-redirect-payment"),k()],Ce);var St={WORLDPAY_IDEAL:"WORLDPAY_IDEAL",AUTOMATED_CLEARING_HOUSE:"AUTOMATED_CLEARING_HOUSE",ADYEN_KLARNA:"ADYEN_KLARNA",ADYEN_BANCONTACT_CARD:"ADYEN_BANCONTACT_CARD",PAY_NL_KAARTDIRECT:"PAY_NL_KAARTDIRECT",ADYEN_EPS:"ADYEN_EPS",ADYEN_BANCONTACT_PAYCONIQ:"ADYEN_BANCONTACT_PAYCONIQ",OMISE_PROMPTPAY:"OMISE_PROMPTPAY",OMISE_TRUEMONEY:"OMISE_TRUEMONEY",ADYEN_MULTIBANCO:"ADYEN_MULTIBANCO",PACYPAY_WECHAT:"PACYPAY_WECHAT",PACYPAY_ALIPAY:"PACYPAY_ALIPAY",ADYEN_MBWAY:"ADYEN_MBWAY",XENDIT_DANA:"XENDIT_DANA",XENDIT_SHOPEEPAY:"XENDIT_SHOPEEPAY",ADYEN_PAYSHOP:"ADYEN_PAYSHOP",ADYEN_PAYTRAIL:"ADYEN_PAYTRAIL",CLEARPAY:"CLEARPAY",RAPYD_FAST:"RAPYD_FAST",RAPYD_PROMPTPAY:"RAPYD_PROMPTPAY",RAPYD_GCASH:"RAPYD_GCASH",RAPYD_POLI:"RAPYD_POLI",RAPYD_GRABPAY:"RAPYD_GRABPAY",PRIMER_PAYPAL:"PRIMER_PAYPAL",TWOC2P:"TWOC2P",NETS:"NETS",STRIPE_ACH:"STRIPE_ACH",STRIPE_GIROPAY:"STRIPE_GIROPAY",MOLLIE_GIROPAY:"MOLLIE_GIROPAY",MOLLIE_EPS:"MOLLIE_EPS",PAY_NL_EPS:"PAY_NL_EPS",PAY_NL_P24:"PAY_NL_P24",MOLLIE_P24:"MOLLIE_P24",MOLLIE_SOFORT:"MOLLIE_SOFORT",COINBASE:"COINBASE",OPENNODE:"OPENNODE",MOLLIE_GIFT_CARD:"MOLLIE_GIFTCARD",XFERS_PAYNOW:"XFERS_PAYNOW",CARD:"PAYMENT_CARD",APPLE_PAY:"APPLE_PAY",GOOGLE_PAY:"GOOGLE_PAY",PAYPAL:"PAYPAL_ORDER",PAYPAL_VAULTED:"PAYPAL_BILLING_AGREEMENT",GO_CARDLESS:"GOCARDLESS",PAY_NL_IDEAL:"PAY_NL_IDEAL",PAY_NL_SOFORT_BANKING:"PAY_NL_SOFORT_BANKING",PAY_NL_BANCONTACT:"PAY_NL_BANCONTACT",PAY_NL_PAYPAL:"PAY_NL_PAYPAL",PAY_NL_CREDIT_TRANSFER:"PAY_NL_CREDIT_TRANSFER",PAY_NL_DIRECT_DEBIT:"PAY_NL_DIRECT_DEBIT",PAY_NL_GIROPAY:"PAY_NL_GIROPAY",PAY_NL_PAYCONIQ:"PAY_NL_PAYCONIQ",PAY_NL_RIVERTY:"PAY_NL_RIVERTY",HOOLAH:"HOOLAH",ADYEN_BLIK:"ADYEN_BLIK",ADYEN_VIPPS:"ADYEN_VIPPS",ADYEN_GIROPAY:"ADYEN_GIROPAY",ADYEN_SOFORT:"ADYEN_SOFORT",ADYEN_IDEAL:"ADYEN_IDEAL",ADYEN_TRUSTLY:"ADYEN_TRUSTLY",ADYEN_ALIPAY:"ADYEN_ALIPAY",ADYEN_TWINT:"ADYEN_TWINT",ADYEN_MOBILEPAY:"ADYEN_MOBILEPAY",MOLLIE_BANCONTACT:"MOLLIE_BANCONTACT",MOLLIE_IDEAL:"MOLLIE_IDEAL",BUCKAROO_GIROPAY:"BUCKAROO_GIROPAY",BUCKAROO_EPS:"BUCKAROO_EPS",BUCKAROO_SOFORT:"BUCKAROO_SOFORT",BUCKAROO_BANCONTACT:"BUCKAROO_BANCONTACT",BUCKAROO_IDEAL:"BUCKAROO_IDEAL",ATOME:"ATOME",KLARNA_CUSTOMER_TOKEN:"KLARNA_CUSTOMER_TOKEN",DLOCAL_PIX:"DLOCAL_PIX",ALMA:"ALMA"};function Mn(i){return i.paymentInstrumentType===St.CARD}async function ti(i,t,e){if(!i||!t||!e)return{icon:"",shouldShowCVV:!1,type:"other",description:""};let r="";if(Mn(i))r=t.getCardNetworkAsset(i.paymentInstrumentData.network).cardUrl;else{let n=await t.getCDNAssets(i.paymentMethodType);n&&(r=n.assets?.icon?`${n.goatCdnUrl}/${n.assets.icon}`:"")}let o=e.cvvRecapture,a=lo(i);return{icon:r,shouldShowCVV:o,...a}}function In(i){return i.charAt(0).toUpperCase()+i.slice(1).toLowerCase()}function xd(i){return i?i===i.toUpperCase()?In(i):i:""}function kn(i,t){return[i,t].filter(Boolean).join(" ")}function Ad(i,t){return!i||!t?"":`Expires ${i}/${t.slice(-2)}`}function Nn(i){return i?`\u2022\u2022\u2022\u2022 ${i}`:""}function Sd(i){let t=i.paymentInstrumentData,e=t.cardholderName,r=t.last4Digits,o=Ad(t.expirationMonth,t.expirationYear),a=xd(t.network),n=`${i.paymentInstrumentData.cardholderName?i.paymentInstrumentData.cardholderName:""}${(r?` ${a} ${Nn(r)}`:a)||" Card"}`;return{type:"card",cardholderName:e,last4:r,expiresDate:o,network:a,description:n}}function _d(i){let t=i.paymentInstrumentData,e=t.externalPayerInfo?.email||"",r=t.externalPayerInfo?.firstName||"",o=t.externalPayerInfo?.lastName||"",a=i.userDescription||e||"PayPal Account";return{type:"other",fullName:kn(r,o),email:e,paymentMethodType:"PayPal",description:a}}function Pd(i){let t=i.paymentInstrumentData,e=t.sessionData?.billingAddress?.email||"",r=t.sessionData?.billingAddress?.firstName||"",o=t.sessionData?.billingAddress?.lastName||"",a=i.userDescription||(e?`Klarna - ${e}`:"Klarna Account");return{type:"other",fullName:kn(r,o),email:e,paymentMethodType:"Klarna",description:a}}function Td(i){let t=i.paymentInstrumentData,e=t.accountNumberLastFourDigits||"",r=t.bankName||"",o=t.accountType||"",a=i.userDescription;return a||(r&&e?a=`${r} ${Nn(e)}`:r?a=r:a="Bank Account"),{type:"other",fullName:"",bankName:r,last4:e,accountType:o,paymentMethodType:"ACH",description:a}}function wd(i){let t=i.paymentInstrumentType,e=In(t.replace(/_/g," "));return{type:"other",description:i.userDescription||e}}var Md={[St.CARD]:Sd,[St.PAYPAL_VAULTED]:_d,[St.KLARNA_CUSTOMER_TOKEN]:Pd,[St.AUTOMATED_CLEARING_HOUSE]:Td};function lo(i){try{let t=Md[i.paymentInstrumentType];return t?t(i):wd(i)}catch(t){return P.error("FormatUtils",`Error formatting payment method ${i.id}:`,t),{type:"other",description:i.userDescription||i.id||"Payment Method"}}}var Ln=y` :host { display: block; width: 100%; position: relative; } .vault-manager { display: flex; flex-direction: column; position: relative; } .vault-manager-content { display: flex; flex-direction: column; width: 100%; position: relative; } /* Content container using CSS Grid for height animation */ .content-container { display: grid; grid-template-rows: 1fr; transition: grid-template-rows var(--primer-animation-duration) var(--primer-animation-easing); width: 100%; position: relative; } /* Required to make grid animation work - ensures content can expand/collapse properly */ .content-container > * { min-height: 0; overflow: hidden; } /* Submit button container */ .submit-button-container { display: grid; grid-template-rows: 1fr; transition: grid-template-rows var(--primer-animation-duration) var(--primer-animation-easing); overflow: hidden; margin-top: var(--primer-space-small); width: 100%; } /* Ensure the submit button has full width */ .submit-button { width: 100%; } /* Make sure pay button inside the submit component is full width */ primer-vault-payment-submit::part(button), ::slotted(primer-button) { width: 100%; } /* Payment methods list */ .payment-methods-list { display: flex; flex-direction: column; gap: var(--primer-space-small); width: 100%; position: relative; } /* Delete confirmation container */ .delete-confirmation-container { width: 100%; position: relative; display: flex; flex-direction: column; gap: var(--primer-space-small); } /* Loading overlay styles */ .loading-overlay { position: absolute; top: 0; left: 0; width: 100%; height: 100%; display: flex; align-items: center; justify-content: center; background-color: rgba(255, 255, 255, 0.7); z-index: 10; border-radius: var(--primer-radius-medium); backdrop-filter: blur(2px); opacity: 0; /* Start invisible */ } /* Add styles for when updating is active */ .is-updating { pointer-events: none; /* Prevent interaction when updating */ } /* * Component-specific styles to ensure smooth animations * These components need display:block to work with the grid layout */ primer-vault-payment-method-item, primer-vault-empty-state, primer-vault-delete-confirmation { display: block; width: 100%; } /* Disable animations for reduced motion preference */ @media (prefers-reduced-motion: reduce) { .content-container, .submit-button-container, primer-vault-payment-method-item, primer-vault-payment-submit, primer-vault-empty-state, primer-vault-delete-confirmation { transition: none; } } primer-button::part(button) { align-items: center; width: 100%; justify-content: flex-start; display: flex; text-align: left; padding: var(--primer-space-medium); } `;var{I:Wb}=ra;var Rn=i=>i.strings===void 0;var nr=(i,t)=>{let e=i._$AN;if(e===void 0)return!1;for(let r of e)r._$AO?.(t,!1),nr(r,t);return!0},ri=i=>{let t,e;do{if((t=i._$AM)===void 0)break;e=t._$AN,e.delete(i),i=t}while(e?.size===0)},On=i=>{for(let t;t=i._$AM;i=t){let e=t._$AN;if(e===void 0)t._$AN=e=new Set;else if(e.has(i))break;e.add(i),Nd(t)}};function Id(i){this._$AN!==void 0?(ri(this),this._$AM=i,On(this)):this._$AM=i}function kd(i,t=!1,e=0){let r=this._$AH,o=this._$AN;if(o!==void 0&&o.size!==0)if(t)if(Array.isArray(r))for(let a=e;a<r.length;a++)nr(r[a],!1),ri(r[a]);else r!=null&&(nr(r,!1),ri(r));else nr(this,i)}var Nd=i=>{i.type==ke.CHILD&&(i._$AP??(i._$AP=kd),i._$AQ??(i._$AQ=Id))},dt=class extends st{constructor(){super(...arguments),this._$AN=void 0}_$AT(t,e,r){super._$AT(t,e,r),On(this),this.isConnected=t._$AU}_$AO(t,e=!0){t!==this.isConnected&&(this.isConnected=t,t?this.reconnected?.():this.disconnected?.()),e&&(nr(this,t),ri(this))}setValue(t){if(Rn(this._$Ct))this._$Ct._$AI(t,this);else{let e=[...this._$Ct._$AH];e[this._$Ci]=t,this._$Ct._$AI(e,this,0)}}disconnected(){}reconnected(){}};var ii=new WeakMap,Lt=class{constructor(t,e){this.startPaused=!1,this.disabled=!1,this.clients=new Set,this.pendingComplete=!1,this.host=t,this.defaultOptions=e.defaultOptions||{},this.startPaused=!!e.startPaused,this.disabled=!!e.disabled,this.onComplete=e.onComplete,ii.set(this.host,this)}async add(t){this.clients.add(t),this.startPaused&&t.webAnimation?.pause(),this.pendingComplete=!0,await t.finished,this.pendingComplete&&!this.isAnimating&&(this.pendingComplete=!1,this.onComplete?.())}remove(t){this.clients.delete(t)}pause(){this.clients.forEach(t=>t.webAnimation?.pause())}play(){this.clients.forEach(t=>t.webAnimation?.play())}cancel(){this.clients.forEach(t=>t.webAnimation?.cancel()),this.clients.clear()}finish(){this.clients.forEach(t=>t.webAnimation?.finish()),this.clients.clear()}togglePlay(){this.isPlaying?this.pause():this.play()}get isAnimating(){return this.clients.size>0}get isPlaying(){return Array.from(this.clients).some(t=>t.webAnimation?.playState==="running")}async finished(){await Promise.all(Array.from(this.clients).map(t=>t.finished))}};var Dn=0,co=new Map,$n=new WeakSet,po=()=>new Promise(i=>requestAnimationFrame(i));var Vn=(i,t)=>{let e=i-t;return e===0?void 0:e},Un=(i,t)=>{let e=i/t;return e===1?void 0:e},oi={left:(i,t)=>{let e=Vn(i,t);return{value:e,transform:e==null||isNaN(e)?void 0:`translateX(${e}px)`}},top:(i,t)=>{let e=Vn(i,t);return{value:e,transform:e==null||isNaN(e)?void 0:`translateY(${e}px)`}},width:(i,t)=>{let e;t===0&&(t=1,e={width:"1px"});let r=Un(i,t);return{value:r,overrideFrom:e,transform:r==null||isNaN(r)?void 0:`scaleX(${r})`}},height:(i,t)=>{let e;t===0&&(t=1,e={height:"1px"});let r=Un(i,t);return{value:r,overrideFrom:e,transform:r==null||isNaN(r)?void 0:`scaleY(${r})`}}},Hn={duration:333,easing:"ease-in-out"},Bn=["left","top","width","height","opacity","color","background"],Yn=new WeakMap,ai=class extends dt{constructor(t){if(super(t),this.t=!1,this.i=null,this.o=null,this.h=!0,this.shouldLog=!1,t.type===ke.CHILD)throw Error("The `animate` directive must be used in attribute position.");this.createFinished()}createFinished(){this.resolveFinished?.(),this.finished=new Promise(t=>{this.l=t})}async resolveFinished(){this.l?.(),this.l=void 0}render(t){return f}getController(){return ii.get(this.u)}isDisabled(){return this.options.disabled||this.getController()?.disabled}update(t,[e]){let r=this.u===void 0;return r&&(this.u=t.options?.host,this.u.addController(this),this.u.updateComplete.then(o=>this.t=!0),this.element=t.element,Yn.set(this.element,this)),this.optionsOrCallback=e,(r||typeof e!="function")&&this.p(e),this.render(e)}p(t){t=t??{};let e=this.getController();e!==void 0&&((t={...e.defaultOptions,...t}).keyframeOptions={...e.defaultOptions.keyframeOptions,...t.keyframeOptions}),t.properties??(t.properties=Bn),this.options=t}m(){let t={},e=this.element.getBoundingClientRect(),r=getComputedStyle(this.element);return this.options.properties.forEach(o=>{let a=e[o]??(oi[o]?void 0:r[o]),n=Number(a);t[o]=isNaN(n)?a+"":n}),t}v(){let t,e=!0;return this.options.guard&&(t=this.options.guard(),e=((r,o)=>{if(Array.isArray(r)){if(Array.isArray(o)&&o.length===r.length&&r.every((a,n)=>a===o[n]))return!1}else if(o===r)return!1;return!0})(t,this._)),this.h=this.t&&!this.isDisabled()&&!this.isAnimating()&&e&&this.element.isConnected,this.h&&(this._=Array.isArray(t)?Array.from(t):t),this.h}hostUpdate(){typeof this.optionsOrCallback=="function"&&this.p(this.optionsOrCallback()),this.v()&&(this.A=this.m(),this.i=this.i??this.element.parentNode,this.o=this.element.nextSibling)}async hostUpdated(){if(!this.h||!this.element.isConnected||this.options.skipInitial&&!this.isHostRendered)return;let t;this.prepare(),await po;let e=this.O(),r=this.j(this.options.keyframeOptions,e),o=this.m();if(this.A!==void 0){let{from:a,to:n}=this.N(this.A,o,e);this.log("measured",[this.A,o,a,n]),t=this.calculateKeyframes(a,n)}else{let a=co.get(this.options.inId);if(a){co.delete(this.options.inId);let{from:n,to:l}=this.N(a,o,e);t=this.calculateKeyframes(n,l),t=this.options.in?[{...this.options.in[0],...t[0]},...this.options.in.slice(1),t[1]]:t,Dn++,t.forEach(s=>s.zIndex=Dn)}else this.options.in&&(t=[...this.options.in,{}])}this.animate(t,r)}resetStyles(){this.P!==void 0&&(this.element.setAttribute("style",this.P??""),this.P=void 0)}commitStyles(){this.P=this.element.getAttribute("style"),this.webAnimation?.commitStyles(),this.webAnimation?.cancel()}reconnected(){}async disconnected(){if(!this.h||(this.options.id!==void 0&&co.set(this.options.id,this.A),this.options.out===void 0))return;if(this.prepare(),await po(),this.i?.isConnected){let e=this.o&&this.o.parentNode===this.i?this.o:null;if(this.i.insertBefore(this.element,e),this.options.stabilizeOut){let r=this.m();this.log("stabilizing out");let o=this.A.left-r.left,a=this.A.top-r.top;getComputedStyle(this.element).position!=="static"||o===0&&a===0||(this.element.style.position="relative"),o!==0&&(this.element.style.left=o+"px"),a!==0&&(this.element.style.top=a+"px")}}let t=this.j(this.options.keyframeOptions);await this.animate(this.options.out,t),this.element.remove()}prepare(){this.createFinished()}start(){this.options.onStart?.(this)}didFinish(t){t&&this.options.onComplete?.(this),this.A=void 0,this.animatingProperties=void 0,this.frames=void 0,this.resolveFinished()}O(){let t=[];for(let e=this.element.parentNode;e;e=e?.parentNode){let r=Yn.get(e);r&&!r.isDisabled()&&r&&t.push(r)}return t}get isHostRendered(){let t=$n.has(this.u);return t||this.u.updateComplete.then(()=>{$n.add(this.u)}),t}j(t,e=this.O()){let r={...Hn};return e.forEach(o=>Object.assign(r,o.options.keyframeOptions)),Object.assign(r,t),r}N(t,e,r){t={...t},e={...e};let o=r.map(l=>l.animatingProperties).filter(l=>l!==void 0),a=1,n=1;return o.length>0&&(o.forEach(l=>{l.width&&(a/=l.width),l.height&&(n/=l.height)}),t.left!==void 0&&e.left!==void 0&&(t.left=a*t.left,e.left=a*e.left),t.top!==void 0&&e.top!==void 0&&(t.top=n*t.top,e.top=n*e.top)),{from:t,to:e}}calculateKeyframes(t,e,r=!1){let o={},a={},n=!1,l={};for(let s in e){let c=t[s],u=e[s];if(s in oi){let h=oi[s];if(c===void 0||u===void 0)continue;let b=h(c,u);b.transform!==void 0&&(l[s]=b.value,n=!0,o.transform=`${o.transform??""} ${b.transform}`,b.overrideFrom!==void 0&&Object.assign(o,b.overrideFrom))}else c!==u&&c!==void 0&&u!==void 0&&(n=!0,o[s]=c,a[s]=u)}return o.transformOrigin=a.transformOrigin=r?"center center":"top left",this.animatingProperties=l,n?[o,a]:void 0}async animate(t,e=this.options.keyframeOptions){this.start(),this.frames=t;let r=!1;if(!this.isAnimating()&&!this.isDisabled()&&(this.options.onFrames&&(this.frames=t=this.options.onFrames(this),this.log("modified frames",t)),t!==void 0)){this.log("animate",[t,e]),r=!0,this.webAnimation=this.element.animate(t,e);let o=this.getController();o?.add(this);try{await this.webAnimation.finished}catch{}o?.remove(this)}return this.didFinish(r),r}isAnimating(){return this.webAnimation?.playState==="running"||this.webAnimation?.pending}log(t,e){this.shouldLog&&this.isDisabled()}},ct=xe(ai);var Ld=["top","right","bottom","left"],ni=class extends dt{constructor(t){if(super(t),t.type!==ke.ELEMENT)throw Error("The `position` directive must be used in attribute position.")}render(t,e){return f}update(t,[e,r]){return this.u===void 0&&(this.u=t.options?.host,this.u.addController(this)),this.S=t.element,this.C=e,this.F=r??["left","top","width","height"],this.render(e,r)}hostUpdated(){this.$()}$(){let t=typeof this.C=="function"?this.C():this.C?.value,e=t.offsetParent;if(t===void 0||!e)return;let r=t.getBoundingClientRect(),o=e.getBoundingClientRect();this.F?.forEach(a=>{let n=Ld.includes(a)?r[a]-o[a]:r[a];this.S.style[a]=n+"px"})}},Rd=xe(ni);var Q=class extends g{constructor(){super();this.vaultManagerContext=null;this.vaultItemContext=null;this.headlessUtils=null;this.isEditMode=!1;this.deletePaymentMethodId=null;this.isDeleting=!1;this.errorMessage="";this.animationDuration=300;this.deleteAssetConfig=null;this.handleToggleEditMode=e=>{this.isEditMode=e.detail,this.deletePaymentMethodId=null,this.isEditMode&&this.vaultItemContext&&this.vaultItemContext.setSelectedVaultedPaymentMethod(null)};this.handleDeletePaymentMethod=async e=>{if(this.deletePaymentMethodId=e.detail,this.deletePaymentMethodId&&this.vaultManagerContext&&this.headlessUtils){let r=this.vaultManagerContext.vaultedPaymentMethods.find(o=>o.id===this.deletePaymentMethodId);r&&(this.deleteAssetConfig=await ti(r,this.headlessUtils,this.vaultManagerContext))}};this.handleCancelDelete=()=>{this.deletePaymentMethodId=null,this.deleteAssetConfig=null};this.handleConfirmDelete=async()=>{if(!this.vaultManagerContext?.deleteVaultedPaymentMethod||!this.deletePaymentMethodId){this.errorMessage=S("something_went_wrong_error",{id:"something_went_wrong_error"});return}try{this.isDeleting=!0,await this.vaultManagerContext.deleteVaultedPaymentMethod(this.deletePaymentMethodId),this.deletePaymentMethodId=null,this.deleteAssetConfig=null}catch(e){this.errorMessage=e instanceof Error?e.message:S("something_went_wrong_error",{id:"something_went_wrong_error"})}finally{this.isDeleting=!1}};this.handlePaymentError=e=>{let r=e.detail?.error;this.errorMessage=r instanceof Error?r.message:S("payment_processing_error",{id:"payment_processing_error"})};this.handleCloseError=()=>{this.errorMessage=""};new Lt(this,{defaultOptions:{keyframeOptions:{duration:Number(getComputedStyle(document.documentElement).getPropertyValue("--primer-animation-duration").trim().replace("ms","")),easing:getComputedStyle(document.documentElement).getPropertyValue("--primer-animation-easing").trim()}}})}getAnimationConfig(){return{keyframeOptions:{duration:this.animationDuration,easing:getComputedStyle(document.documentElement).getPropertyValue("--primer-animation-easing").trim(),fill:"both"}}}getPaymentMethodName(e){if(!this.vaultManagerContext)return"";let r=this.vaultManagerContext.vaultedPaymentMethods.find(o=>o.id===e);if(!r)return"";try{return lo(r).description||""}catch{return""}}renderLoadingOverlay(){return m`<div class="loading-overlay" ${ct({...this.getAnimationConfig(),properties:["opacity"],in:[{opacity:0},{opacity:1}],out:[{opacity:1},{opacity:0}]})} ><primer-spinner size="medium" color="var(--primer-color-loader)" ></primer-spinner></div>`}renderDeleteConfirmation(){if(!this.deletePaymentMethodId||!this.deleteAssetConfig)return f;let e=this.getPaymentMethodName(this.deletePaymentMethodId);return m`<div class="delete-confirmation-container"><primer-button disabled variant="secondary"><primer-payment-method-content .assetConfig=${this.deleteAssetConfig} ></primer-payment-method-content></primer-button><primer-vault-delete-confirmation .isDeleting=${this.isDeleting} .paymentMethodId=${this.deletePaymentMethodId} .paymentMethodName=${e} @confirm-delete=${this.handleConfirmDelete} @cancel-delete=${this.handleCancelDelete} ${ct({...this.getAnimationConfig(),properties:["opacity"],in:[{opacity:0},{opacity:1}],out:[{opacity:1},{opacity:0}]})} ></primer-vault-delete-confirmation></div>`}renderPaymentMethodItem(e){return this.deletePaymentMethodId===e.id?f:m`<primer-vault-payment-method-item .paymentMethod=${e} .isEditMode=${this.isEditMode} @delete-payment-method=${this.handleDeletePaymentMethod} ${ct({...this.getAnimationConfig(),properties:["opacity"],in:[{opacity:0},{opacity:1}],out:[{opacity:1},{opacity:0}]})} ></primer-vault-payment-method-item>`}renderPaymentMethodList(){let e=this.vaultManagerContext?.vaultedPaymentMethods||[],r=!this.isEditMode&&e.length>0&&!this.deletePaymentMethodId;return m`<div class="payment-methods-list">${e.map(o=>this.renderPaymentMethodItem(o))} ${R(r,()=>m`<div class="submit-button-container"><primer-vault-payment-submit class="submit-button" @primer-vault-payment-error=${this.handlePaymentError} ${ct({...this.getAnimationConfig(),properties:["opacity"],in:[{opacity:0},{opacity:1}],out:[{opacity:1},{opacity:0}]})} ></primer-vault-payment-submit></div>`,()=>f)}</div>`}render(){if(!this.vaultManagerContext?.enabled)return f;let e=this.vaultManagerContext.vaultedPaymentMethods.length>0,r=this.vaultManagerContext.isLoading,o=this.vaultManagerContext.isUpdating;return m` ${R(!this.vaultManagerContext?.showEmptyState&&!e,()=>f,()=>m`<slot name="vault-empty-state"><div class="vault-manager ${o?"is-updating":""}"><primer-vault-manager-header .isEditMode=${this.isEditMode} .hasPaymentMethods=${e} @toggle-edit-mode=${this.handleToggleEditMode} ></primer-vault-manager-header>${R(this.errorMessage,()=>m`<primer-vault-error-message .errorMessage=${this.errorMessage} @close-error=${this.handleCloseError} ${ct({...this.getAnimationConfig(),properties:["opacity"],in:[{opacity:0},{opacity:1}],out:[{opacity:1},{opacity:0}]})} ></primer-vault-error-message>`,()=>f)}<div class="vault-manager-content">${R(!r&&!e,()=>m`<div class="content-container"><primer-vault-empty-state ${ct({...this.getAnimationConfig(),properties:["opacity"],in:[{opacity:0},{opacity:1}],out:[{opacity:1},{opacity:0}]})} ></primer-vault-empty-state></div>`,()=>f)} ${R(!r&&e,()=>m`<div class="content-container">${R(this.deletePaymentMethodId,()=>this.renderDeleteConfirmation(),()=>this.renderPaymentMethodList())}</div>`,()=>f)}</div>${R(o,()=>this.renderLoadingOverlay(),()=>f)}</div></slot>`)} `}};Q.styles=[_,Ln],d([C({context:le,subscribe:!0}),p({type:Object,attribute:!1})],Q.prototype,"vaultManagerContext",2),d([C({context:Te,subscribe:!0}),p({type:Object,attribute:!1})],Q.prototype,"vaultItemContext",2),d([C({context:B,subscribe:!0}),p({type:Object,attribute:!1})],Q.prototype,"headlessUtils",2),d([M()],Q.prototype,"isEditMode",2),d([M()],Q.prototype,"deletePaymentMethodId",2),d([M()],Q.prototype,"isDeleting",2),d([M()],Q.prototype,"errorMessage",2),d([p({type:Number})],Q.prototype,"animationDuration",2),d([M()],Q.prototype,"deleteAssetConfig",2),Q=d([v("primer-vault-manager"),k()],Q);var zn=y` :host { display: flex; width: 100%; flex-direction: column; } .payment-method-wrapper { display: flex; flex-direction: column; width: 100%; } .payment-method-container { display: flex; width: 100%; align-items: center; gap: var(--primer-space-small); } /* Target the button part from primer-button with 'with-cvv' class using ::part selector */ primer-button::part(button) { align-items: center; width: 100%; justify-content: flex-start; display: flex; text-align: left; padding: var(--primer-space-medium); } /* render checkmark icon on baseline (on the top) */ primer-button.with-cvv::part(button) { align-items: baseline; } /* Card icons */ .payment-method-icon { height: var(--primer-space-xlarge); object-fit: contain; flex-shrink: 0; transition: transform var(--primer-animation-duration) var(--primer-animation-easing); } .payment-method-icon-generic { display: flex; align-items: center; justify-content: center; color: var(--primer-color-gray-500); height: var(--primer-space-xlarge); flex-shrink: 0; } .payment-method-details { flex: 1; display: flex; gap: var(--primer-space-xsmall); align-items: flex-start; transition: transform var(--primer-animation-duration) var(--primer-animation-easing); margin-left: var(--primer-space-small); } .payment-method-card { flex: 1; width: 100%; display: flex; flex-direction: column; gap: var(--primer-space-xsmall); transition: transform var(--primer-animation-duration) var(--primer-animation-easing); } .payment-method-description { font-weight: var(--primer-typography-title-large-weight); color: var(--primer-color-text-primary); transition: color var(--primer-animation-duration) var(--primer-animation-easing); } .payment-method-secondary-description { font-size: var(--primer-typography-body-small-size); color: var(--primer-color-text-secondary); transition: color var(--primer-animation-duration) var(--primer-animation-easing); } .payment-method-row { display: grid; grid-template-columns: 200px 100px; justify-content: space-between; align-items: center; } .cell-2 { grid-column: 2; display: flex; justify-content: flex-end; align-items: center; } .mt-2 { margin-top: var(--primer-space-medium); } .payment-method-header { font-weight: var(--primer-typography-body-large-weight); font-size: var(--primer-typography-body-large-size); line-height: var(--primer-typography-body-large-line-height); color: var(--primer-color-text-primary); letter-spacing: var(--primer-typography-body-large-letter-spacing); } .payment-method-subtitle { color: var(--primer-color-text-secondary); font-size: var(--primer-typography-body-small-size); line-height: var(--primer-typography-body-small-line-height); font-weight: var(--primer-typography-body-small-weight); letter-spacing: var(--primer-typography-body-small-letter-spacing); } .payment-method-button { flex: 1; } .flex { display: flex; align-items: flex-end; gap: var(--primer-space-xsmall); } .flex-center { display: flex; align-items: center; justify-content: center; gap: var(--primer-space-small); } /* Delete button - for edit mode */ .delete-button { display: flex; align-items: center; justify-content: center; } .delete-button:active { transform: scale(0.95); } `;var pe=class extends g{constructor(){super(...arguments);this.vaultManagerContext=null;this.vaultItemContext=null;this.headlessUtils=null;this.paymentMethod=null;this.isEditMode=!1;this._getAssetsTask=new D(this,{task:async([e,r,o])=>await ti(e,r,o),args:()=>[this.paymentMethod,this.headlessUtils,this.vaultManagerContext]});this.handleClick=()=>{this.isEditMode||!this.vaultManagerContext||!this.paymentMethod||(this.isSelected()?this.vaultItemContext?.setSelectedVaultedPaymentMethod(null):this.vaultItemContext?.setSelectedVaultedPaymentMethod(this.paymentMethod))};this.handleDeleteClick=e=>{e.stopPropagation(),this.dispatchEvent(new CustomEvent("delete-payment-method",{detail:this.paymentMethod?.id,bubbles:!0,composed:!0}))}}isSelected(){if(!this.vaultManagerContext||!this.paymentMethod)return!1;let e=this.vaultItemContext?.selectedVaultedPaymentMethod;return!!e&&e.id===this.paymentMethod.id}render(){return this._getAssetsTask.render({error:()=>f,complete:e=>{let r=this.isSelected()?"checked":"default",o=!1,a=e?.description;return m`<div class="payment-method-wrapper"><div class="payment-method-container"><primer-button variant="secondary" class="payment-method-button ${e.shouldShowCVV?"with-cvv":""}" selectable ?disabled=${this.isEditMode} selectionState=${r} .flex=${o} @click=${this.handleClick} ><primer-payment-method-content .assetConfig=${e} ></primer-payment-method-content>${R(e.shouldShowCVV&&this.isSelected()&&!this.isEditMode,()=>m`<div class="payment-method-row mt-2"><span class="flex-center"><primer-icon name="lock" size="sm"></primer-icon><span class="payment-method-subtitle"> Input the card CVV for a secure payment</span ></span><span class="cell-2"><primer-vault-cvv-input .paymentMethod="${this.paymentMethod}" ><span slot="label"></span></primer-vault-cvv-input></span></div>`,()=>f)}</primer-button>${this.isEditMode?m`<primer-button variant="tertiary" class="delete-button" @click=${this.handleDeleteClick} aria-label=${`${S("delete",{id:"delete"})} ${a}`} ><primer-icon name="close" size="sm"></primer-icon></primer-button>`:f}</div></div>`}})}};pe.styles=[_,zn],d([C({context:le,subscribe:!0}),p({type:Object,attribute:!1,hasChanged(e,r){return e?.cvvRecapture!==r?.cvvRecapture}})],pe.prototype,"vaultManagerContext",2),d([C({context:Te,subscribe:!0}),p({type:Object,attribute:!1,hasChanged(e,r){return e?.selectedVaultedPaymentMethod?.id!==r?.selectedVaultedPaymentMethod?.id}})],pe.prototype,"vaultItemContext",2),d([C({context:B,subscribe:!0}),p({type:Object})],pe.prototype,"headlessUtils",2),d([p({type:Object,attribute:!1})],pe.prototype,"paymentMethod",2),d([p({type:Boolean,reflect:!0})],pe.prototype,"isEditMode",2),pe=d([v("primer-vault-payment-method-item"),k()],pe);var Fn=y` :host { display: block; width: 100%; } .vault-manager-header { display: flex; justify-content: space-between; align-items: center; margin-bottom: var(--primer-space-medium); } .vault-manager-header h3 { font-size: var(--primer-typography-title-large-size); font-weight: var(--primer-typography-title-large-weight); font-family: var(--primer-typography-title-large-font); color: var(--primer-color-text-primary); margin: 0; } .edit-button { display: flex; align-items: center; justify-content: center; } `;var _e=class extends g{constructor(){super(...arguments);this.isEditMode=!1;this.hasPaymentMethods=!1;this.toggleEditMode=()=>{this.dispatchEvent(new CustomEvent("toggle-edit-mode",{detail:!this.isEditMode,bubbles:!0,composed:!0}))}}render(){return m`<div class="vault-manager-header"><h3>${S("previouslyUsed",{id:"previouslyUsed"})}</h3>${this.hasPaymentMethods?m`<primer-button variant="tertiary" class="edit-button ${this.isEditMode?"active":""}" @click=${this.toggleEditMode} aria-label=${this.isEditMode?S("confirm",{id:"confirm"}):S("editPaymentMethods",{id:"editPaymentMethods"})} >${this.isEditMode?m`<primer-icon name="checkmark" size="sm"></primer-icon>`:m`<primer-icon name="edit" size="sm"></primer-icon>`}</primer-button>`:f}</div>`}};_e.styles=[_,Fn],d([p({type:Boolean})],_e.prototype,"isEditMode",2),d([p({type:Boolean})],_e.prototype,"hasPaymentMethods",2),_e=d([v("primer-vault-manager-header"),k()],_e);var jn=y` :host { display: block; width: 100%; } .delete-confirmation-text { color: var(--primer-color-text-secondary); font-size: var(--primer-typography-body-small-size); font-weight: var(--primer-typography-body-small-weight); line-height: var(--primer-typography-body-small-line-height); letter-spacing: var(--primer-typography-body-small-letter-spacing); } .delete-confirmation { margin-top: var(--primer-space-medium); background-color: var(--primer-color-gray-000); } .delete-message { margin-bottom: var(--primer-space-medium); } .delete-text { margin: 0; color: var(--primer-color-text-secondary); font-size: var(--primer-typography-body-medium-size); } .delete-actions { display: grid; grid-template-columns: 1fr 1fr; gap: var(--primer-space-small); } .delete-confirm { background-color: var(--primer-color-red-500); color: var(--primer-color-gray-000); border: none; padding: var(--primer-space-small) var(--primer-space-medium); border-radius: var(--primer-radius-small); font-weight: var(--primer-typography-body-medium-weight); cursor: pointer; transition: background-color var(--primer-animation-duration) var(--primer-animation-easing); } .delete-confirm:hover:not(:disabled) { background-color: var(--primer-color-red-900); } .delete-confirm:disabled { opacity: 0.7; cursor: not-allowed; } .delete-cancel { background-color: transparent; border: 1px solid var(--primer-color-border-outlined-default); padding: var(--primer-space-small) var(--primer-space-medium); border-radius: var(--primer-radius-small); color: var(--primer-color-text-primary); font-weight: var(--primer-typography-body-medium-weight); cursor: pointer; transition: background-color var(--primer-animation-duration) var(--primer-animation-easing); } .delete-cancel:hover:not(:disabled) { background-color: var(--primer-color-gray-100); } .delete-cancel:disabled { opacity: 0.7; cursor: not-allowed; } `;var fe=class extends g{constructor(){super(...arguments);this.isDeleting=!1;this.paymentMethodId="";this.paymentMethodName="";this.vaultManager=null;this.handleConfirmClick=()=>{this.dispatchEvent(new CustomEvent("confirm-delete",{bubbles:!0,composed:!0}))};this.handleCancelClick=()=>{this.dispatchEvent(new CustomEvent("cancel-delete",{bubbles:!0,composed:!0}))}}render(){return m`<div class="delete-confirmation"><p class="delete-confirmation-text"> Are you sure you want to delete this payment method? </p><div class="delete-actions"><primer-button variant="secondary" @click=${this.handleCancelClick} ?disabled=${this.isDeleting} >${S("cancel",{id:"cancel"})}</primer-button><primer-button @click=${this.handleConfirmClick} ?disabled=${this.isDeleting} >${this.isDeleting?S("deleting",{id:"deleting"}):S("confirmVaultedPaymentMethodDeletion",{id:"confirmVaultedPaymentMethodDeletion"})}</primer-button></div></div>`}};fe.styles=[_,jn],d([p({type:Boolean})],fe.prototype,"isDeleting",2),d([p({type:String})],fe.prototype,"paymentMethodId",2),d([p({type:String})],fe.prototype,"paymentMethodName",2),d([C({context:le,subscribe:!0})],fe.prototype,"vaultManager",2),fe=d([v("primer-vault-delete-confirmation"),k()],fe);var Kn=y` :host { display: block; width: 100%; } .empty-state { padding: var(--primer-space-xlarge) 0; text-align: center; color: var(--primer-color-text-secondary); } .empty-state p { margin: 0; } `;var je=class extends g{render(){return m`<div class="empty-state"><p>${S("savedPaymentMethodsEmpty",{id:"savedPaymentMethodsEmpty"})}</p></div>`}};je.styles=[_,Kn],je=d([v("primer-vault-empty-state"),k()],je);var Gn=y` :host { display: block; width: 100%; } .error-message { display: flex; background-color: var(--primer-color-red-100); padding: var(--primer-space-medium); border-radius: var(--primer-radius-small); margin-bottom: var(--primer-space-medium); justify-content: space-between; align-items: center; border: 1px solid var(--primer-color-red-500); } .error-content { display: flex; align-items: center; gap: var(--primer-space-small); } .error-message p { margin: 0; color: var(--primer-color-text-negative); font-size: var(--primer-typography-body-medium-size); } .error-message button { background: transparent; border: none; color: var(--primer-color-text-negative); cursor: pointer; padding: var(--primer-space-xsmall); display: flex; align-items: center; justify-content: center; border-radius: var(--primer-radius-small); transition: background-color var(--primer-animation-duration) var(--primer-animation-easing); } .error-message button:hover { background-color: rgba(0, 0, 0, 0.05); } `;var De=class extends g{constructor(){super(...arguments);this.errorMessage="";this.handleDismiss=()=>{this.dispatchEvent(new CustomEvent("close-error",{bubbles:!0,composed:!0}))}}render(){return m`<div class="error-message"><div class="error-content"><primer-icon name="warning" size="sm" color="var(--primer-color-red-500)" ></primer-icon><p>${this.errorMessage}</p></div><button @click=${this.handleDismiss} aria-label=${S("closeErrorMessage",{id:"closeErrorMessage"})} ><primer-icon name="close" size="sm"></primer-icon></button></div>`}};De.styles=[_,Gn],d([p({type:String})],De.prototype,"errorMessage",2),De=d([v("primer-vault-error-message"),k()],De);var qn=y` :host { display: contents; } `;var W=class extends g{constructor(){super(...arguments);this._userAssignedProps=new Set;this._internalButtonText="";this.headlessInstance=null;this.sdkState=null;this.vaultItemContext=null;this.vaultManager=null;this.clientOptions=null;this.variant="primary";this.disabled=!1;this.handleClick=async e=>{if(e.preventDefault(),!this.isButtonDisabled)try{await this.vaultManager?.startVaultedPaymentFlow()}catch(r){let o=new CustomEvent("primer-vault-payment-error",{bubbles:!0,composed:!0,detail:{error:r}});this.dispatchEvent(o)}}}get buttonText(){return this._userAssignedProps.has("buttonText")?this._internalButtonText:S("pay",{id:"pay"})}set buttonText(e){let r=this.buttonText;e!==""?(this._userAssignedProps.add("buttonText"),this._internalButtonText=e):(this._userAssignedProps.delete("buttonText"),this._internalButtonText=""),this.requestUpdate("buttonText",r)}get isButtonDisabled(){return!!(this.disabled||!this.vaultItemContext?.selectedVaultedPaymentMethod||this.vaultManager?.isLoading)}render(){let e=this.clientOptions?.submitButton?.amountVisible?this.headlessInstance?.getUIOrderAmount():null,r=e?` ${e}`:f;return m`<primer-button buttonType="submit" variant=${this.variant} @click=${this.handleClick} .disabled=${this.isButtonDisabled} .loading=${this.sdkState?.isProcessing} data-submit >${this.buttonText}${r}</primer-button>`}};W.styles=[_,qn],d([p({type:String})],W.prototype,"buttonText",1),d([C({context:B,subscribe:!0}),p({type:Object})],W.prototype,"headlessInstance",2),d([C({context:z,subscribe:!0}),p()],W.prototype,"sdkState",2),d([C({context:Te,subscribe:!0}),p({type:Object,attribute:!1,hasChanged(e,r){return e?.selectedVaultedPaymentMethod?.id!==r?.selectedVaultedPaymentMethod?.id}})],W.prototype,"vaultItemContext",2),d([C({context:le,subscribe:!0}),p({type:Object,attribute:!1})],W.prototype,"vaultManager",2),d([C({context:ne,subscribe:!0}),p({type:Object,attribute:!1,hasChanged(e,r){return e?.submitButton?.amountVisible!==r?.submitButton?.amountVisible}})],W.prototype,"clientOptions",2),d([p({type:String})],W.prototype,"variant",2),d([p({type:Boolean})],W.prototype,"disabled",2),W=d([v("primer-vault-payment-submit"),k()],W);function si(i){return i?{paddingHorizontal:0,placeholder:{color:i.getPropertyValue("--primer-color-text-placeholder").trim(),fontSize:i.getPropertyValue("--primer-typography-body-large-size").trim(),fontFamily:i.getPropertyValue("--primer-typography-body-large-font").trim()},height:i.getPropertyValue("--primer-typography-body-large-line-height").trim(),fontSize:i.getPropertyValue("--primer-typography-body-large-size").trim(),fontFamily:i.getPropertyValue("--primer-typography-body-large-font").trim(),color:i.getPropertyValue("--primer-color-text-primary").trim()}:null}var Wn=y` :host { display: block; margin-top: var(--primer-space-medium); } .cvv-input-container { margin-bottom: var(--primer-space-medium); } `;var j=class extends g{constructor(){super();this.vaultManagerFormContext=null;this.vaultManagerCvvContext=null;this.computedStyles=null;this.paymentMethod=null;this.cvvError=null;this.cvvInputIsDirty=!1;this.cvvInputIsBlurred=!1;this.cvvInput=null;this.isFocused=!1;this._setupCVVIframe=new D(this,{task:([e,r])=>!e||!r||e.paymentMethodType!=="PAYMENT_CARD"||!e.paymentInstrumentData?.network||r.createCvvInput===null?L:{network:e.paymentInstrumentData.network,createCvvInput:r.createCvvInput},args:()=>[this.paymentMethod,this.vaultManagerFormContext]});this.cvvContainerId=`cvv-container-${Math.random().toString(36).substring(2,9)}`,new D(this,{task:async([e])=>{if(!e)return L;await this.updateComplete;let r=this.renderRoot.querySelector(`#${this.cvvContainerId}`);if(!r)return;let o=si(this.computedStyles),a=o?{input:{base:o}}:void 0,n={cardNetwork:e.network,container:r,name:"cvv",placeholder:"123",style:a};this.cvvInput=await e.createCvvInput?.(n)??null,this.cvvInput&&(this.cvvInput.focus(),this.cvvError=this.cvvInput.metadata.error||null,this.vaultManagerCvvContext?.setCvvInput(this.cvvInput),this.cvvInput.addListener("change",()=>{this.onCvvInputChange()}),this.cvvInput.addListener("blur",()=>{this.onBlur()}),this.cvvInput.addListener("focus",()=>{this.onFocus()}))},args:()=>[this._setupCVVIframe.value]})}disconnectedCallback(){super.disconnectedCallback(),this.cvvInput&&(this.cvvInput.remove(),this.cvvInput=null,this.cvvError=null,this.vaultManagerCvvContext?.setCvvInput(null))}onCvvInputChange(){!this.cvvInput||!this.vaultManagerCvvContext||(this.cvvInputIsDirty=!0,this.cvvError=this.cvvInput.metadata.error||null)}onBlur(){this.cvvInput&&(this.cvvInputIsBlurred=!0,this.cvvError=this.cvvInput.metadata.error||null,this.isFocused=!1)}onFocus(){this.isFocused=!0}render(){return this._setupCVVIframe.render({error:()=>f,complete:()=>m`<div class="cvv-input-container"><primer-input-wrapper .focusWithin=${this.isFocused} .hasError=${!!this.cvvError&&(this.vaultManagerCvvContext?.formIsDirty||this.cvvInputIsDirty&&this.cvvInputIsBlurred)} ><slot name="label" slot="label"><primer-input-label>CVV</primer-input-label></slot><div slot="input" id="${this.cvvContainerId}"></div>${R(this.cvvError&&(this.vaultManagerCvvContext?.formIsDirty||this.cvvInputIsDirty&&this.cvvInputIsBlurred),()=>m`<primer-input-error slot="error">${this.cvvError}</primer-input-error>`)}</primer-input-wrapper></div>`})}};j.styles=[_,Wn],d([C({context:le,subscribe:!0}),p({type:Object,attribute:!1,hasChanged(e,r){return e?.createCvvInput!==r?.createCvvInput}})],j.prototype,"vaultManagerFormContext",2),d([C({context:Te,subscribe:!0}),p({type:Object,attribute:!1})],j.prototype,"vaultManagerCvvContext",2),d([C({context:et,subscribe:!0}),p()],j.prototype,"computedStyles",2),d([p({type:Object})],j.prototype,"paymentMethod",2),d([M()],j.prototype,"cvvError",2),d([M()],j.prototype,"cvvInputIsDirty",2),d([M()],j.prototype,"cvvInputIsBlurred",2),d([M()],j.prototype,"cvvInput",2),d([M()],j.prototype,"isFocused",2),j=d([v("primer-vault-cvv-input"),k()],j);var Jn=y` :host { display: flex; width: 100%; align-items: center; } /* Card icons */ .payment-method-icon { height: var(--primer-space-xlarge); object-fit: contain; flex-shrink: 0; transition: transform var(--primer-animation-duration) var(--primer-animation-easing); } .payment-method-icon-generic { display: flex; align-items: center; justify-content: center; color: var(--primer-color-gray-500); height: var(--primer-space-xlarge); flex-shrink: 0; } .payment-method-details { flex: 1; display: flex; flex-direction: column; gap: var(--primer-space-xsmall); align-items: flex-start; transition: transform var(--primer-animation-duration) var(--primer-animation-easing); margin-left: var(--primer-space-small); } .payment-method-card { flex: 1; width: 100%; display: flex; flex-direction: column; gap: var(--primer-space-xsmall); transition: transform var(--primer-animation-duration) var(--primer-animation-easing); } .payment-method-description { font-weight: var(--primer-typography-title-large-weight); color: var(--primer-color-text-primary); transition: color var(--primer-animation-duration) var(--primer-animation-easing); } .payment-method-secondary-description { font-size: var(--primer-typography-body-small-size); color: var(--primer-color-text-secondary); transition: color var(--primer-animation-duration) var(--primer-animation-easing); } .payment-method-row { display: grid; grid-template-columns: 200px 100px; justify-content: space-between; align-items: center; } .cell-2 { grid-column: 2; display: flex; justify-content: flex-end; align-items: center; } .payment-method-header { font-weight: var(--primer-typography-body-large-weight); font-size: var(--primer-typography-body-large-size); line-height: var(--primer-typography-body-large-line-height); color: var(--primer-color-text-primary); letter-spacing: var(--primer-typography-body-large-letter-spacing); } .payment-method-subtitle { color: var(--primer-color-text-secondary); font-size: var(--primer-typography-body-small-size); line-height: var(--primer-typography-body-small-line-height); font-weight: var(--primer-typography-body-small-weight); letter-spacing: var(--primer-typography-body-small-letter-spacing); } .flex { display: flex; align-items: flex-end; gap: var(--primer-space-xsmall); } .payment-method-card-other { width: 100%; display: grid; grid-template-columns: 1fr auto; gap: var(--primer-space-medium); align-items: center; justify-content: space-between; } .payment-method-right-column-text { font-size: var(--primer-typography-body-medium-size); font-weight: var(--primer-typography-body-medium-weight); line-height: var(--primer-typography-body-medium-line-height); letter-spacing: var(--primer-typography-body-medium-letter-spacing); } `;var $e=class extends g{constructor(){super(...arguments);this.assetConfig=null}render(){if(!this.assetConfig)return f;let e=this.assetConfig.description,r=this.assetConfig.icon,o=R(this.assetConfig.icon,()=>m`<img class="payment-method-icon" src=${r} alt=${e} />`,()=>m`<div class="payment-method-icon payment-method-icon-generic"><primer-icon name="payment-card" size="sm"></primer-icon></div>`);return this.assetConfig.type==="other"&&this.assetConfig.paymentMethodType!=="ACH"?m`<div class="payment-method-card-other"><div class="left-column"><div class="payment-method-header">${this.assetConfig.fullName}</div><div class="flex">${o}<span class="payment-method-subtitle" >${this.assetConfig.paymentMethodType}</span ></div></div><div class="payment-method-right-column-text">${this.assetConfig.email||`\u2022\u2022\u2022\u2022 ${this.assetConfig.last4}`}</div></div>`:this.assetConfig.type==="other"&&this.assetConfig.paymentMethodType==="ACH"?m`<span class="payment-method-card"><div class="payment-method-row"><span class="payment-method-header" >${this.assetConfig.fullName}</span ><span class="payment-method-header cell-2" >•••• ${this.assetConfig.last4}</span ></div><div class="payment-method-row"><span class="flex">${o}<span class="payment-method-subtitle" >${this.assetConfig.bankName}</span ></span><span class="payment-method-subtitle cell-2" >${this.assetConfig.accountType}</span ></div></span>`:this.assetConfig.type==="card"?m`<span class="payment-method-card"><div class="payment-method-row"><span class="payment-method-header" >${this.assetConfig.cardholderName}</span ><span class="payment-method-header cell-2" >•••• ${this.assetConfig.last4}</span ></div><div class="payment-method-row"><span class="flex">${o}<span class="payment-method-subtitle" >${this.assetConfig.network}</span ></span><span class="payment-method-subtitle cell-2" >${this.assetConfig.expiresDate}</span ></div></span>`:f}};$e.styles=[_,Jn],d([p({type:Object,attribute:!1})],$e.prototype,"assetConfig",2),$e=d([v("primer-payment-method-content")],$e);var Rt="card-form-context";function Zn(i,t){if(i.style.cssText="width: 100%; flex:1; padding: 0; border: none; height: var(--primer-typography-body-large-line-height); font-size: var(--primer-typography-body-large-size); font-family: var(--primer-typography-body-large-font); color: var(--primer-color-text-primary); background-color: transparent; outline: none;",i.setAttribute("data-custom-input",""),!t.shadowRoot?.querySelector("style[data-custom-input-style]")){let e=document.createElement("style");e.setAttribute("data-custom-input-style",""),e.textContent=`
|
|
189
|
+
`;var on=':root,primer-checkout{--primer-color-background-transparent-default:rgba(255,255,255,0);--primer-color-border-transparent-default:rgba(255,255,255,0);--primer-color-gray-100:#f5f5f5;--primer-color-gray-200:#eeeeee;--primer-color-gray-300:#e0e0e0;--primer-color-gray-400:#bdbdbd;--primer-color-gray-500:#9e9e9e;--primer-color-gray-600:#757575;--primer-color-gray-900:#212121;--primer-color-gray-000:#ffffff;--primer-color-brand:#2f98ff;--primer-color-red-100:#ffecec;--primer-color-red-500:#ff7279;--primer-color-red-900:#b4324b;--primer-color-blue-500:#399dff;--primer-color-blue-900:#2270f4;--primer-radius-base:4px;--primer-typography-brand:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;--primer-typography-title-xlarge-letter-spacing:-0.6px;--primer-typography-title-xlarge-weight:550;--primer-typography-title-xlarge-size:24px;--primer-typography-title-xlarge-line-height:32px;--primer-typography-title-large-letter-spacing:-0.2px;--primer-typography-title-large-weight:550;--primer-typography-title-large-size:16px;--primer-typography-title-large-line-height:20px;--primer-typography-body-large-letter-spacing:-0.2px;--primer-typography-body-large-weight:400;--primer-typography-body-large-size:16px;--primer-typography-body-large-line-height:20px;--primer-typography-body-medium-letter-spacing:0px;--primer-typography-body-medium-weight:400;--primer-typography-body-medium-size:14px;--primer-typography-body-medium-line-height:20px;--primer-typography-body-small-letter-spacing:0px;--primer-typography-body-small-weight:400;--primer-typography-body-small-size:12px;--primer-typography-body-small-line-height:16px;--primer-space-base:4px;--primer-size-base:4px;--primer-animation-duration:200ms;--primer-animation-easing:cubic-bezier(0.44,0,0.4,1);--primer-color-background-outlined-default:var(--primer-color-gray-000);--primer-color-background-outlined-disabled:var(--primer-color-gray-100);--primer-color-background-transparent-hover:var(--primer-color-gray-100);--primer-color-background-transparent-active:var(--primer-color-gray-200);--primer-color-background-transparent-loading:var(--primer-color-gray-100);--primer-color-background-transparent-focus:var(--primer-color-background-transparent-default);--primer-color-background-transparent-disabled:var(--primer-color-gray-100);--primer-color-background-transparent-selected:var(--primer-color-gray-100);--primer-color-text-primary:var(--primer-color-gray-900);--primer-color-text-placeholder:var(--primer-color-gray-500);--primer-color-text-disabled:var(--primer-color-gray-400);--primer-color-text-negative:var(--primer-color-red-900);--primer-color-text-link:var(--primer-color-blue-900);--primer-color-text-secondary:var(--primer-color-gray-600);--primer-color-border-outlined-default:var(--primer-color-gray-300);--primer-color-border-outlined-hover:var(--primer-color-gray-400);--primer-color-border-outlined-active:var(--primer-color-gray-500);--primer-color-border-outlined-disabled:var(--primer-color-gray-200);--primer-color-border-outlined-loading:var(--primer-color-gray-200);--primer-color-border-outlined-selected:var(--primer-color-brand);--primer-color-border-outlined-error:var(--primer-color-red-500);--primer-color-border-transparent-hover:var(--primer-color-border-transparent-default);--primer-color-border-transparent-active:var(--primer-color-border-transparent-default);--primer-color-border-transparent-disabled:var(--primer-color-border-transparent-default);--primer-color-border-transparent-selected:var(--primer-color-border-transparent-default);--primer-color-icon-primary:var(--primer-color-gray-900);--primer-color-icon-disabled:var(--primer-color-gray-400);--primer-color-icon-negative:var(--primer-color-red-500);--primer-color-focus:var(--primer-color-brand);--primer-color-loader:var(--primer-color-brand);--primer-radius-medium:8px;--primer-radius-small:4px;--primer-radius-large:12px;--primer-radius-xsmall:2px;--primer-typography-title-xlarge-font:var(--primer-typography-brand);--primer-typography-title-large-font:var(--primer-typography-brand);--primer-typography-body-large-font:var(--primer-typography-brand);--primer-typography-body-medium-font:var(--primer-typography-brand);--primer-typography-body-small-font:var(--primer-typography-brand);--primer-space-xxsmall:2px;--primer-space-xsmall:4px;--primer-space-small:8px;--primer-space-medium:12px;--primer-space-large:16px;--primer-space-xlarge:20px;--primer-size-small:16px;--primer-size-medium:20px;--primer-size-large:24px;--primer-size-xlarge:32px;--primer-size-xxlarge:40px;--primer-size-xxxlarge:56px;--primer-color-background-outlined-focus:var(--primer-color-background-outlined-default);--primer-color-background-outlined-loading:var(--primer-color-background-outlined-disabled);--primer-color-background-outlined-active:var(--primer-color-background-outlined-default);--primer-color-background-outlined-hover:var(--primer-color-background-outlined-default);--primer-color-background-outlined-selected:var(--primer-color-background-outlined-default);--primer-color-background-outlined-error:var(--primer-color-background-outlined-default);--primer-color-border-outlined-focus:var(--primer-color-focus);--primer-color-border-transparent-focus:var(--primer-color-focus);--primer-color-border-transparent-loading:var(--primer-color-border-transparent-disabled)}',an=":root,primer-checkout.primer-dark-theme{--primer-color-gray-100:#292929;--primer-color-gray-200:#424242;--primer-color-gray-300:#575757;--primer-color-gray-400:#858585;--primer-color-gray-500:#767577;--primer-color-gray-600:#c7c7c7;--primer-color-gray-900:#efefef;--primer-color-gray-000:#171619;--primer-color-brand:#2f98ff;--primer-color-red-100:#321c20;--primer-color-red-500:#e46d70;--primer-color-red-900:#f6bfbf;--primer-color-blue-500:#3f93e4;--primer-color-blue-900:#4aaeff}";var yd="primer-light-theme-css",gd="primer-dark-theme-css";function ao(){or(on,yd,!0)}function no(){or(an,gd,!0)}function nn(){ao(),no()}function sn(){or(rn,"primer-css-loader-styles",!1)}function ln(){nn()}function vd(){ao()}function bd(){no()}var dn=y` :host { display: inline-flex; align-items: center; justify-content: center; } .spinner-container { display: flex; align-items: center; justify-content: center; width: var(--spinner-size, var(--primer-size-medium)); height: var(--spinner-size, var(--primer-size-medium)); } .spinner-container:not(.compact) { margin: var(--primer-space-small) 0; } .spinner-container.compact { margin: 0; } .spinner { animation: spinner-rotate 1.2s linear infinite; width: 100%; height: 100%; color: var(--spinner-color, var(--primer-color-loader)); } .path { fill: currentColor; transform-origin: center; transition: fill var(--primer-animation-duration, 200ms) var(--primer-animation-easing, ease); } @keyframes spinner-rotate { 0% { transform: rotate(0deg); } 100% { transform: rotate(360deg); } } `;var so={small:16,medium:24,large:32},ke=class extends g{constructor(){super(...arguments);this.color="var(--primer-color-loader)";this.size="medium";this.compact=!1}getSize(){if(this.size in so)return so[this.size];let e=parseInt(this.size,10);return isNaN(e)?so.medium:e}render(){let e=this.getSize(),r=20,o=`0 0 ${r} ${r}`;return this.style.setProperty("--spinner-color",this.color),this.style.setProperty("--spinner-size",`${e}px`),m`<div class="spinner-container ${this.compact?"compact":""}"><svg class="spinner" width="${e}" height="${e}" viewBox="${o}" fill="none" xmlns="http://www.w3.org/2000/svg" role="status" aria-label="Loading" ><path d="M4.27827 10.002C4.27827 6.84166 6.84019 4.27973 10.0005 4.27973C10.7676 4.27973 11.3894 3.6579 11.3894 2.89084C11.3894 2.12378 10.7676 1.50195 10.0005 1.50195C5.30607 1.50195 1.50049 5.30753 1.50049 10.002C1.50049 14.6964 5.30607 18.502 10.0005 18.502C14.6949 18.502 18.5005 14.6964 18.5005 10.002C18.5005 9.23489 17.8787 8.61306 17.1116 8.61306C16.3445 8.61306 15.7227 9.23489 15.7227 10.002C15.7227 13.1622 13.1608 15.7242 10.0005 15.7242C6.84019 15.7242 4.27827 13.1622 4.27827 10.002Z" fill="currentColor" class="path" /></svg></div>`}};ke.styles=[dn],d([p({type:String})],ke.prototype,"color",2),d([p({type:String})],ke.prototype,"size",2),d([p({type:Boolean})],ke.prototype,"compact",2),ke=d([v("primer-spinner")],ke);var Z=Ae(class extends st{constructor(i){if(super(i),i.type!==Ie.ATTRIBUTE||i.name!=="class"||i.strings?.length>2)throw Error("`classMap()` can only be used in the `class` attribute and must be the only part in the attribute.")}render(i){return" "+Object.keys(i).filter(t=>i[t]).join(" ")+" "}update(i,[t]){if(this.st===void 0){this.st=new Set,i.strings!==void 0&&(this.nt=new Set(i.strings.join(" ").split(/\s/).filter(r=>r!=="")));for(let r in t)t[r]&&!this.nt?.has(r)&&this.st.add(r);return this.render(t)}let e=i.element.classList;for(let r of this.st)r in t||(e.remove(r),this.st.delete(r));for(let r in t){let o=!!t[r];o===this.st.has(r)||this.nt?.has(r)||(o?(e.add(r),this.st.add(r)):(e.remove(r),this.st.delete(r)))}return Ee}});var cn=y` * { box-sizing: border-box; } :host { display: block; width: 100%; } .input-slot.focus-within { outline: 2px solid var(--primer-color-border-outlined-focus); outline-offset: -2px; } :host([has-error]) .input-slot.focus-within { outline: 2px solid var(--primer-color-border-outlined-error); background-color: var(--primer-color-background-outlined-error); } :host([has-error]) .input-slot { border-color: var(--primer-color-border-outlined-error); background-color: var(--primer-color-background-outlined-error); } .input-wrapper { display: flex; flex-direction: column; gap: var(--primer-space-xsmall); } .input-slot { padding: var(--primer-space-medium) var(--primer-space-medium); border: 1px solid var(--primer-color-border-outlined-default); border-radius: var(--primer-radius-small); background-color: var(--primer-color-background-outlined-default); height: calc( var(--primer-typography-body-large-line-height) + var(--primer-space-medium) + var(--primer-space-medium) + 2px ); display: flex; cursor: text; /* Indicate text input interactivity */ /* 2px is the border width */ } .input-slot ::slotted(*) { width: 100%; } .input-slot:hover { border-color: var(--primer-color-border-outlined-hover); background-color: var(--primer-color-background-outlined-hover); } .input-slot:active { border-color: var(--primer-color-border-outlined-active); background-color: var(--primer-color-background-outlined-active); } .input-slot:disabled { background-color: var(--primer-color-background-outlined-disabled); border-color: var(--primer-color-border-outlined-disabled); cursor: not-allowed; } `;var Ne=class extends g{constructor(){super(...arguments);this.focusWithin=!1;this.hasError=!1;this.handleWrapperClick=e=>{if(e.target!==e.currentTarget)return;let r=this.findSlottedPrimerInput();r?r.focus():this.dispatchEvent(new CustomEvent("wrapper-click",{bubbles:!0,composed:!0}))}}findSlottedPrimerInput(){if(!this.inputSlot)return null;let e=this.inputSlot.assignedElements({flatten:!0}),r=e.find(o=>o.tagName.toLowerCase()==="primer-input");if(r)return r;for(let o of e){let a=o.querySelector("primer-input");if(a)return a}return null}render(){let e={"input-slot":!0,"focus-within":this.focusWithin};return m`<div class="input-wrapper"><slot name="label"></slot><div class="${Z(e)}" @click="${this.handleWrapperClick}"><slot name="input"></slot></div><slot name="error"></slot></div>`}};Ne.styles=[cn],d([p({type:Boolean})],Ne.prototype,"focusWithin",2),d([p({type:Boolean,reflect:!0,attribute:"has-error"})],Ne.prototype,"hasError",2),d([ot('slot[name="input"]')],Ne.prototype,"inputSlot",2),Ne=d([v("primer-input-wrapper")],Ne);var pn=y` :host { display: inline-block; font-weight: var(--primer-typography-body-small-weight); font-size: var(--primer-typography-body-small-size); letter-spacing: var(--primer-typography-body-small-letter-spacing); line-height: var(--primer-typography-body-small-line-height); color: var(--primer-color-text-primary); font-family: var(--primer-typography-body-small-font); } :host([disabled]) { color: var(--primer-color-text-disabled); } `;var He=class extends g{constructor(){super(...arguments);this.for="";this.disabled=!1}render(){return m`<label for=${this.for}><slot></slot></label>`}};He.styles=[pn],d([p({type:String,reflect:!0})],He.prototype,"for",2),d([p({type:Boolean,reflect:!0})],He.prototype,"disabled",2),He=d([v("primer-input-label")],He);var mn=y` :host { display: contents; } button { align-items: center; border-radius: var(--primer-radius-medium); border: none; cursor: pointer; display: flex; font-family: var(--primer-typography-title-large-font); font-size: var(--primer-typography-title-large-size); font-weight: var(--primer-typography-title-large-weight); gap: var(--primer-space-small); justify-content: center; letter-spacing: var(--primer-typography-title-large-letter-spacing); line-height: var(--primer-typography-title-large-line-height); outline: none; padding: var(--primer-space-medium) var(--primer-space-medium); position: relative; } .button-content { display: flex; height: 100%; width: 100%; align-items: center; gap: var(--primer-space-small); justify-content: center; transition: opacity var(--primer-animation-duration) var(--primer-animation-easing); } .button-content-base { width: 100%; height: 100%; gap: var(--primer-space-small); transition: opacity var(--primer-animation-duration) var(--primer-animation-easing); } /* Reduce opacity of text during loading for better focus on the spinner */ .button-content.loading { opacity: 0.65; } :host([selectable]) button { justify-content: space-between; } /* Primary variant */ :host([variant='primary']) button { background-color: var(--primer-color-brand); /* This is correct (color-background for color) because Button is kind of a special component */ color: var(--primer-color-background-outlined-default); } :host([variant='primary']:not([disabled]):not([loading])) button:hover { filter: brightness(105%); } :host([variant='primary']:not([disabled]):not([loading])) button:active { filter: brightness(98%); } :host([variant='primary']) button:focus-visible { outline: 2px solid var(--primer-color-brand); outline-offset: 2px; } /* Disabled state for primary button */ :host([variant='primary'][disabled]:not([loading])) button, :host([variant='primary']:not([loading])) button:disabled { color: var(--primer-color-text-disabled); background-color: var(--primer-color-background-outlined-disabled); cursor: not-allowed; } /* Loading state for primary button - OVERRIDES disabled styles with higher specificity */ :host([variant='primary'][loading]) button { background-color: var(--primer-color-brand); opacity: 0.8; color: var(--primer-color-background-outlined-default); cursor: wait; } /* Secondary variant */ :host([variant='secondary']) button { background-color: var(--primer-color-background-outlined-default); color: var(--primer-color-text-primary); border: 1px solid var(--primer-color-border-outlined-default); } :host([variant='secondary']:not([disabled]):not([loading])) button:hover { background-color: var(--primer-color-background-outlined-hover); } :host([variant='secondary']:not([disabled]):not([loading])) button:active { background-color: var(--primer-color-background-outlined-active); } :host([variant='secondary']) button:focus-visible { outline: 2px solid var(--primer-color-border-outlined-focus); outline-offset: 2px; } /* Disabled state for secondary button */ :host([variant='secondary'][disabled]:not([loading])) button, :host([variant='secondary']:not([loading])) button:disabled { background-color: var(--primer-color-background-outlined-disabled); border-color: var(--primer-color-border-outlined-disabled); color: var(--primer-color-text-disabled); cursor: not-allowed; } /* Loading state for secondary button - OVERRIDES disabled styles */ :host([variant='secondary'][loading]) button { background-color: var(--primer-color-gray-100); border-color: var(--primer-color-gray-300); color: var(--primer-color-gray-600); cursor: wait; } /* Tertiary variant */ :host([variant='tertiary']) button { background-color: var(--primer-color-background-transparent-default); border: 1px solid var(--primer-color-border-transparent-default); color: var(--primer-color-text-primary); border-radius: var(--primer-radius-small); padding: var(--primer-space-xxsmall) var(--primer-space-xxsmall); } :host([variant='tertiary']:not([disabled]):not([loading])) button:hover { border-radius: var(--primer-radius-small); background-color: var(--primer-color-background-transparent-hover); border: 1px solid var(--primer-color-border-transparent-hover); color: var(--primer-color-text-primary); } :host([variant='tertiary']:not([disabled]):not([loading])) button:active { background-color: var(--primer-color-background-transparent-active); border-color: var(--primer-color-border-transparent-active); border-radius: var(--primer-radius-small); color: var(--primer-color-text-primary); } :host([variant='tertiary']) button:focus-visible { border-radius: var(--primer-radius-small); background-color: var(--primer-color-background-transparent-focus); outline: 2px solid var(--primer-color-border-transparent-focus); outline-offset: 2px; } /* Disabled state for tertiary button */ :host([variant='tertiary'][disabled]:not([loading])) button, :host([variant='tertiary']:not([loading])) button:disabled { background-color: var(--primer-color-border-transparent-disabled); color: var(--primer-color-text-disabled); cursor: not-allowed; } /* Loading state for tertiary button - OVERRIDES disabled styles */ :host([variant='tertiary'][loading]) button { background-color: var(--primer-color-gray-100); color: var(--primer-color-gray-600); cursor: wait; } /* Checked state styling */ :host([selectionState='checked']) button { border: 2px solid var(--primer-color-brand); background-color: var(--primer-color-gray-100); } /* Loading state - center spinner with content */ :host([loading]) primer-spinner { margin-right: var(--primer-space-xsmall); } /* Special case for tertiary variant loading state spinner size */ :host([variant='tertiary'][loading]) primer-spinner { transform: scale(0.85); } `;var de=class extends g{constructor(){super(...arguments);this.variant="primary";this.disabled=!1;this.loading=!1;this.buttonType="button";this.selectionState="default";this.selectable=!1;this.flex=!0;this.handleClick=()=>{!this.selectable||this.disabled||this.loading||(this.selectionState=this.selectionState==="default"?"checked":"default",this.dispatchEvent(new CustomEvent("selection-change",{bubbles:!0,composed:!0,detail:{state:this.selectionState}})))}}renderCheckmark(){return!this.selectable||this.selectionState!=="checked"||this.loading?f:m`<primer-icon name="checkmark" size="sm" color="var(--primer-color-brand)" ></primer-icon>`}renderSpinner(){if(!this.loading)return f;let e;return this.variant==="primary"?e="var(--primer-color-background-outlined-default)":(this.variant==="secondary"||this.variant==="tertiary")&&(e="var(--primer-color-gray-900)"),m`<primer-spinner size="small" color="${e}" compact ></primer-spinner>`}render(){return m`<button type=${this.buttonType} ?disabled=${this.disabled||this.loading} @click=${this.handleClick} part="button" aria-checked=${this.selectionState==="checked"} aria-busy=${this.loading} >${this.renderSpinner()} ${this.flex?m`<span class="button-content ${this.loading?"loading":""}"><slot></slot></span>`:m`<span class="button-content-base ${this.loading?"loading":""}" ><slot></slot></span>`} ${this.renderCheckmark()}</button>`}};de.styles=[P,mn],d([p({type:String,reflect:!0})],de.prototype,"variant",2),d([p({type:Boolean,reflect:!0})],de.prototype,"disabled",2),d([p({type:Boolean,reflect:!0})],de.prototype,"loading",2),d([p({type:String,attribute:"type"})],de.prototype,"buttonType",2),d([p({type:String,reflect:!0})],de.prototype,"selectionState",2),d([p({type:Boolean,reflect:!0})],de.prototype,"selectable",2),d([p({type:Boolean,reflect:!0})],de.prototype,"flex",2),de=d([v("primer-button")],de);var un=y` :host { display: contents; } :host(:not([active])) { display: none; } .error { color: var(--primer-color-text-negative); font-size: var(--primer-typography-body-small-size); line-height: var(--primer-typography-body-small-line-height); display: block; font-family: var(--primer-typography-body-small-font); } `;var Be=class extends g{constructor(){super(...arguments);this.for="";this.active=!0}render(){return m`<span class="error" role="alert" aria-live="polite" id="${this.for||""}" ><slot></slot></span>`}};Be.styles=[un],d([p({type:String,reflect:!0})],Be.prototype,"for",2),d([p({type:Boolean,reflect:!0})],Be.prototype,"active",2),Be=d([v("primer-input-error")],Be);var hn={trash:Me`<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M13.8333 2.99992H11.5V2.49992C11.5 2.05789 11.3244 1.63397 11.0118 1.32141C10.6993 1.00885 10.2754 0.833252 9.83333 0.833252H6.16667C5.72464 0.833252 5.30072 1.00885 4.98816 1.32141C4.67559 1.63397 4.5 2.05789 4.5 2.49992V2.99992H2.16667C1.98986 2.99992 1.82029 3.07015 1.69526 3.19518C1.57024 3.32021 1.5 3.48978 1.5 3.66659C1.5 3.8434 1.57024 4.01297 1.69526 4.138C1.82029 4.26302 1.98986 4.33326 2.16667 4.33326H2.83333V12.4999C2.83333 12.942 3.00893 13.3659 3.32149 13.6784C3.63405 13.991 4.05797 14.1666 4.5 14.1666H11.5C11.942 14.1666 12.3659 13.991 12.6785 13.6784C12.9911 13.3659 13.1667 12.942 13.1667 12.4999V4.33326H13.8333C14.0101 4.33326 14.1797 4.26302 14.3047 4.138C14.4298 4.01297 14.5 3.8434 14.5 3.66659C14.5 3.48978 14.4298 3.32021 14.3047 3.19518C14.1797 3.07015 14.0101 2.99992 13.8333 2.99992ZM5.83333 2.49992C5.83333 2.32311 5.90357 2.15354 6.0286 2.02851C6.15362 1.90349 6.32319 1.83325 6.5 1.83325H9.5C9.67681 1.83325 9.84638 1.90349 9.9714 2.02851C10.0964 2.15354 10.1667 2.32311 10.1667 2.49992V2.99992H5.83333V2.49992ZM11.8333 12.4999C11.8333 12.6767 11.7631 12.8463 11.6381 12.9713C11.513 13.0964 11.3435 13.1666 11.1667 13.1666H4.83333C4.65652 13.1666 4.48695 13.0964 4.36193 12.9713C4.2369 12.8463 4.16667 12.6767 4.16667 12.4999V4.33326H11.8333V12.4999Z" fill="currentColor"/><path d="M6.5 10.9999C6.67681 10.9999 6.84638 10.9297 6.9714 10.8047C7.09643 10.6796 7.16667 10.5101 7.16667 10.3333V7.33325C7.16667 7.15644 7.09643 6.98687 6.9714 6.86184C6.84638 6.73682 6.67681 6.66658 6.5 6.66658C6.32319 6.66658 6.15362 6.73682 6.0286 6.86184C5.90357 6.98687 5.83333 7.15644 5.83333 7.33325V10.3333C5.83333 10.5101 5.90357 10.6796 6.0286 10.8047C6.15362 10.9297 6.32319 10.9999 6.5 10.9999Z" fill="currentColor"/><path d="M9.5 10.9999C9.67681 10.9999 9.84638 10.9297 9.9714 10.8047C10.0964 10.6796 10.1667 10.5101 10.1667 10.3333V7.33325C10.1667 7.15644 10.0964 6.98687 9.9714 6.86184C9.84638 6.73682 9.67681 6.66658 9.5 6.66658C9.32319 6.66658 9.15362 6.73682 9.0286 6.86184C8.90357 6.98687 8.83333 7.15644 8.83333 7.33325V10.3333C8.83333 10.5101 8.90357 10.6796 9.0286 10.8047C9.15362 10.9297 9.32319 10.9999 9.5 10.9999Z" fill="currentColor"/></svg>`,"successful-check":Me`<svg viewBox="0 0 56 56" fill="none" xmlns="http://www.w3.org/2000/svg" ><g id="icon/check-circle-large"><path id="vector" fill-rule="evenodd" clip-rule="evenodd" d="M20.1762 29.5746L24.8429 34.2413C25.295 34.7007 26.0387 34.7007 26.4908 34.2413L35.8241 24.9079C36.2835 24.4559 36.2835 23.7121 35.8241 23.26C35.372 22.8007 34.6283 22.8007 34.1762 23.26L25.6668 31.7694L21.8241 27.9267C21.372 27.4673 20.6283 27.4673 20.1762 27.9267C19.7168 28.3788 19.7168 29.1225 20.1762 29.5746ZM28.0002 47.4173C38.3106 47.4173 46.6668 39.0611 46.6668 28.7507C46.6668 18.4402 38.3106 10.084 28.0002 10.084C17.6897 10.084 9.3335 18.4402 9.3335 28.7507C9.3335 39.0611 17.6897 47.4173 28.0002 47.4173Z" /></g></svg>`,"failure-icon":Me`<svg viewBox="0 0 40 40" fill="none" xmlns="http://www.w3.org/2000/svg" ><path fill-rule="evenodd" clip-rule="evenodd" d="M20.0008 23.3333C20.4614 23.3333 20.7873 22.9606 20.7873 22.5V15C20.7873 14.5394 20.4146 14.1666 20.0008 14.1666C19.587 14.1666 19.1675 14.5416 19.1675 15V22.5C19.1675 22.9583 19.5425 23.3333 20.0008 23.3333ZM32.9331 27.3594L22.5269 9.75935C22.0008 8.86821 21.0529 8.33488 20.0008 8.33331C18.9487 8.33331 18.006 8.8656 17.4748 9.75831L7.06331 27.3625C6.53987 28.2463 6.53206 29.3073 7.04134 30.201C7.568 31.1198 8.51904 31.6666 9.58935 31.6666H30.4175C31.4857 31.6666 32.4357 31.1182 32.9597 30.1995C33.4696 29.3073 33.4591 28.2448 32.9331 27.3594ZM18.7977 26.6666C18.7977 25.976 19.3107 25.4166 20.0008 25.4166C20.6935 25.4166 21.2508 25.9739 21.2039 26.6666C21.2039 27.3568 20.6909 27.9166 20.0008 27.9166C19.3576 27.9166 18.7977 27.3568 18.7977 26.6666Z" /></svg>`,"payment-card":Me`<svg width="28" height="21" viewBox="0 0 28 21" fill="none" xmlns="http://www.w3.org/2000/svg"><rect y="0.748047" width="28" height="20" rx="2" fill="#E0E0E0"/><rect y="6.74805" width="28" height="4" fill="#212121"/><rect x="19" y="13.748" width="6" height="4" rx="0.933333" fill="white"/></svg>`,"chevron-down":Me`<svg width="8" height="6" viewBox="0 0 8 6" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M4.41978 4.90118C4.32079 5.02361 4.16188 5.08353 4.00037 5.08353C3.83887 5.08353 3.67996 5.02361 3.55753 4.90118L0.63995 1.9836C0.395733 1.73939 0.395733 1.34382 0.63995 1.09947C0.884167 0.855124 1.27973 0.855254 1.52408 1.09947L4.00037 3.57524L6.47589 1.09973C6.72011 0.855515 7.11567 0.855515 7.36002 1.09973C7.60437 1.34395 7.60424 1.73952 7.36002 1.98386L4.41978 4.90118Z" fill="#212121"/></svg>`,checkmark:Me`<svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M15.6326 6.12193C15.8983 6.3668 15.8983 6.76276 15.6326 6.98418L8.75546 13.8613C8.53404 14.127 8.13808 14.127 7.89321 13.8613L4.35119 10.3186C4.10706 10.0971 4.10706 9.70118 4.35119 9.45631C4.59531 9.21404 4.99126 9.21404 5.23535 9.45631L8.33606 12.5588L14.7704 6.12193C15.0152 5.87863 15.4112 5.87863 15.6326 6.12193Z" /></svg>`,close:Me`<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20" fill="none"><path d="M14.7551 13.734C15.0479 14.0269 15.0479 14.502 14.7551 14.7949C14.4622 15.0879 13.987 15.0878 13.6941 14.7949L10.0005 11.0738L6.28054 14.7937C5.98767 15.0866 5.51249 15.0866 5.21959 14.7937C4.92668 14.5008 4.92671 14.0256 5.21959 13.7327L8.94075 10.0141L5.21856 6.26604C4.92568 5.97316 4.92568 5.49798 5.21856 5.20508C5.51143 4.91217 5.98661 4.91221 6.27951 5.20508L10.0005 8.95438L13.7204 5.23446C14.0132 4.94159 14.4884 4.94159 14.7813 5.23446C15.0742 5.52734 15.0742 6.00252 14.7813 6.29542L11.0602 10.0141L14.7551 13.734Z" fill="#212121" /></svg>`,edit:Me`<svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M10.9355 3.19972C11.7814 2.35335 13.1541 2.35335 13.9999 3.19972L14.3642 3.56456C15.21 4.41103 15.21 5.78338 14.3642 6.62925L8.42804 12.5684C8.16615 12.8272 7.84406 13.0169 7.48886 13.1192L4.47866 13.9802C4.2258 14.0524 3.95489 13.9802 3.76825 13.7694C3.58463 13.6099 3.51239 13.339 3.58463 13.0861L4.44555 10.0759C4.5479 9.72072 4.73754 9.39863 4.99642 9.13674L10.9355 3.19972ZM12.9524 4.22139C12.6965 3.93933 12.239 3.93933 11.956 4.22139L11.08 5.09705L12.4677 6.48476L13.3437 5.5817C13.6267 5.32583 13.6267 4.86828 13.3437 4.58622L12.9524 4.22139ZM5.83626 10.4733L5.33055 12.2342L7.09151 11.7285C7.21192 11.6954 7.31728 11.6322 7.40458 11.5449L11.4473 7.50521L10.0596 6.11751L6.01988 10.1602C5.93259 10.2475 5.86937 10.3529 5.83626 10.4733Z" fill="#212121"/><path d="M3.5 16.7126C3.5 16.3138 3.82335 15.9904 4.22222 15.9904H15.7778C16.1767 15.9904 16.5 16.3138 16.5 16.7126C16.5 17.1115 16.1767 17.4349 15.7778 17.4349H4.22222C3.82335 17.4349 3.5 17.1115 3.5 16.7126Z" fill="#212121"/></svg>`,lock:Me`<svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M7.91621 7.08223V8.33262H12.0842V7.08223C12.0842 5.93082 11.1516 4.99824 10.0002 4.99824C8.84879 4.99824 7.91621 5.93082 7.91621 7.08223ZM6.24902 8.33262V7.08223C6.24902 5.01127 7.92924 3.33105 10.0002 3.33105C12.0712 3.33105 13.7514 5.01127 13.7514 7.08223V8.33262H14.1682C15.0877 8.33262 15.8354 9.08025 15.8354 9.9998V15.0014C15.8354 15.9209 15.0877 16.6686 14.1682 16.6686H5.83223C4.91267 16.6686 4.16504 15.9209 4.16504 15.0014V9.9998C4.16504 9.08025 4.91267 8.33262 5.83223 8.33262H6.24902Z" fill="#212121" fill-opacity="0.62"/></svg>`};var fn=y` :host { display: inline-block; line-height: 0; /* so you don’t get extra space around the icon */ } /* Styling svgs rendered by passing *name* attribute - from our library file */ :host([size='sm']) svg { width: 20px; height: 20px; } :host([size='md']) svg { width: 42px; height: 42px; } :host([size='lg']) svg { width: 56px; height: 56px; } svg { /* --internal used for abstracting away the icon component */ fill: var(--internal-icon-color, currentColor); } /* For slotted icons */ :host([size='sm']) ::slotted(svg) { width: 20px; height: 20px; } :host([size='lg']) ::slotted(svg) { width: 56px; height: 56px; } ::slotted(svg) { /* --internal used for abstracting away the icon component */ fill: var(--internal-icon-color, currentColor); } `;var Le=class extends g{constructor(){super(...arguments);this.color="var(--primer-color-icon-primary)";this.size="lg"}render(){let e=this.name?hn[this.name]:null;return m`<div style="--internal-icon-color: ${this.color}">${e||m`<slot></slot>`}</div>`}};Le.styles=[fn],d([p({type:String,reflect:!0})],Le.prototype,"color",2),d([p({type:String,reflect:!0})],Le.prototype,"size",2),d([p({reflect:!0})],Le.prototype,"name",2),Le=d([v("primer-icon")],Le);var yn=y` :host { display: flex; flex-direction: column; align-items: center; gap: var(--primer-space-xsmall); } p { margin: 0; color: var(--primer-color-text-primary); text-align: center; font-size: var(--primer-typography-body-large-size); font-family: var(--primer-typography-body-large-font); font-weight: var(--primer-typography-body-large-weight); line-height: var(--primer-typography-body-large-line-height); letter-spacing: var(--primer-typography-body-large-letter-spacing); } p.secondary { color: var(--primer-color-text-secondary); text-align: center; font-family: var(--primer-typography-body-medium-font, Inter); font-size: var(--primer-typography-body-medium-size); font-weight: var(--primer-typography-body-medium-weight); line-height: var(--primer-typography-body-medium-line-height); letter-spacing: var(--primer-typography-body-medium-letter-spacing); } `;var Fe=class extends g{constructor(){super(...arguments);this.type="complete"}render(){return this.type==="complete"?m`<primer-icon size="lg" name="successful-check" color="var(--primer-color-icon-positive)" ></primer-icon><p>Checkout complete!</p><p class="secondary"> You'll be redirected to the order confirmation page soon. </p>`:m`<primer-icon size="lg" name="failure-icon" color="var(--primer-color-icon-negative)" ></primer-icon><p>Payment failed</p>${this.description?m`<p class="secondary">${this.description}</p>`:m`<p class="secondary">Something went wrong.</p>`} `}};Fe.styles=[yn],d([p({type:String,reflect:!0})],Fe.prototype,"type",2),d([p({type:String,reflect:!0})],Fe.prototype,"description",2),Fe=d([v("primer-checkout-state")],Fe);var gn=y` :host { display: contents; } input { width: 100%; padding: 0; border: none; height: var(--primer-typography-body-large-line-height); font-size: var(--primer-typography-body-large-size); font-family: var(--primer-typography-body-large-font); color: var(--primer-color-text-primary); background-color: transparent; outline: none; } input::placeholder { color: var(--primer-color-text-placeholder); font-size: var(--primer-typography-body-large-size); font-family: var(--primer-typography-body-large-font); } :host([disabled]) input { color: var(--primer-color-text-disabled); cursor: not-allowed; } :host([disabled]) input::placeholder { color: var(--primer-color-text-disabled); } `;var Cd=["text","password","email","number","tel","url","search","date","time","datetime-local","month","week","color"];function Ed(i){return Cd.includes(i)}var $=class extends g{constructor(){super(...arguments);this.value="";this.placeholder="";this.disabled=!1;this.name="";this.type="text";this.required=!1;this.readonly=!1;this.pattern="";this.min="";this.max="";this.step="";this.autocomplete="";this._id="";this.hasFocus=!1;this.hasError=!1;this.handleInput=e=>{e.stopPropagation();let r=e.target;this.value=r.value;let o=new CustomEvent("input",{detail:this.value,bubbles:!0,composed:!0});this.dispatchEvent(o)};this.handleChange=e=>{e.stopPropagation();let r=e.target;this.value=r.value;let o=new CustomEvent("change",{detail:this.value,bubbles:!0,composed:!0});this.dispatchEvent(o)};this.handleFocus=()=>{this.hasFocus=!0,this.dispatchEvent(new FocusEvent("focus",{bubbles:!0,composed:!0}))};this.handleBlur=()=>{this.hasFocus=!1,this.dispatchEvent(new FocusEvent("blur",{bubbles:!0,composed:!0}))};this.handleInvalid=e=>{e.stopPropagation(),this.hasError=!0,this.dispatchEvent(new Event("invalid",{bubbles:!0,composed:!0}))}}get id(){return this._id}set id(e){this._id=e,this.setAttribute("id",e)}focus(e){this.inputElement?.focus(e)}blur(){this.inputElement?.blur()}select(){this.inputElement?.select()}setSelectionRange(e,r,o){this.inputElement?.setSelectionRange(e,r,o)}get validity(){return this.inputElement?.validity||{}}get validationMessage(){return this.inputElement?.validationMessage||""}checkValidity(){return this.inputElement?.checkValidity()||!1}reportValidity(){return this.inputElement?.reportValidity()||!1}render(){let e={input:!0,"input--focused":this.hasFocus,"input--disabled":this.disabled,"input--error":this.hasError,"input--readonly":this.readonly},r=Object.entries(e).filter(([,o])=>o).map(([o])=>o).join(" ");return m`<input part="input" class=${r} .value=${this.value} .type=${this.type} ?disabled=${this.disabled} ?required=${this.required} ?readonly=${this.readonly} placeholder=${this.placeholder} pattern=${this.pattern} minlength=${this.minlength??""} maxlength=${this.maxlength??""} min=${this.min} max=${this.max} step=${this.step} autocomplete=${this.autocomplete} name=${this.name} id=${this.id} @input=${this.handleInput} @change=${this.handleChange} @focus=${this.handleFocus} @blur=${this.handleBlur} @invalid=${this.handleInvalid} />`}addEventListener(e,r,o){super.addEventListener(e,r,o)}removeEventListener(e,r,o){super.removeEventListener(e,r,o)}};$.styles=[gn],d([ot("input")],$.prototype,"inputElement",2),d([p({type:String,reflect:!0})],$.prototype,"value",2),d([p({type:String,reflect:!0})],$.prototype,"placeholder",2),d([p({type:Boolean,reflect:!0})],$.prototype,"disabled",2),d([p({type:String,reflect:!0})],$.prototype,"name",2),d([p({type:String,reflect:!0,converter:{fromAttribute:e=>!e||!Ed(e)?(e&&e!=="text"&&_.warn(`Invalid input type: ${e}. Defaulting to 'text'.`),"text"):e}})],$.prototype,"type",2),d([p({type:Boolean,reflect:!0})],$.prototype,"required",2),d([p({type:Boolean,reflect:!0})],$.prototype,"readonly",2),d([p({type:String,reflect:!0})],$.prototype,"pattern",2),d([p({type:Number,reflect:!0})],$.prototype,"minlength",2),d([p({type:Number,reflect:!0})],$.prototype,"maxlength",2),d([p({type:String,reflect:!0})],$.prototype,"min",2),d([p({type:String,reflect:!0})],$.prototype,"max",2),d([p({type:String,reflect:!0})],$.prototype,"step",2),d([p({type:String,reflect:!0})],$.prototype,"autocomplete",2),d([M()],$.prototype,"hasFocus",2),d([M()],$.prototype,"hasError",2),$=d([v("primer-input")],$);var vn=y` :host { display: block; } .collapsable { width: 100%; } /* Make the button display with full width */ primer-button::part(button) { width: 100%; } .collapsable-wrapper { display: grid; grid-template-rows: 0fr; transition: grid-template-rows var(--primer-animation-duration) var(--primer-animation-easing); overflow: hidden; border-top: none; margin-top: -1px; } .collapsable-wrapper.expanded { grid-template-rows: 1fr; } .collapsable-content { min-height: 0; overflow: hidden; padding: var(--primer-space-medium, 12px) 0; } .icon-container { display: flex; align-items: center; justify-content: center; transition: transform var(--primer-animation-duration) var(--primer-animation-easing); font-size: 0.75em; } .icon-container.expanded { transform: rotate(180deg); } /* Disable animation for users who prefer reduced motion */ @media (prefers-reduced-motion: reduce) { .collapsable-wrapper, .icon-container { transition: none; } } `;var ce=class extends g{constructor(){super(...arguments);this.header="";this.expanded=!1;this.expandText="Expand";this.collapseText="Collapse";this.ariaLabel="";this.buttonVariant="primary";this.isExpanded=!1;this.toggleExpanded=()=>{this.isExpanded=!this.isExpanded,this.dispatchExpandedChangedEvent(this.isExpanded)}}connectedCallback(){super.connectedCallback(),this.isExpanded=this.expanded}dispatchExpandedChangedEvent(e){this.dispatchEvent(new CustomEvent("expanded-changed",{bubbles:!0,composed:!0,detail:{expanded:e}}))}expand(){this.isExpanded||(this.isExpanded=!0,this.dispatchExpandedChangedEvent(!0))}collapse(){this.isExpanded&&(this.isExpanded=!1,this.dispatchExpandedChangedEvent(!1))}render(){let e=this.isExpanded?this.collapseText:this.expandText,r=this.ariaLabel||this.header||e,o=this.header||e;return m`<div class="collapsable"><primer-button variant=${this.buttonVariant} buttonType="button" @click=${this.toggleExpanded} aria-expanded=${this.isExpanded} aria-controls="collapsable-content" aria-label=${r} ><span>${o}</span></primer-button><div class="collapsable-wrapper ${this.isExpanded?"expanded":""}" id="collapsable-content" role="region" aria-labelledby="collapsable-header" ><div class="collapsable-content"><slot></slot></div></div></div>`}};ce.styles=[vn],d([p({type:String})],ce.prototype,"header",2),d([p({type:Boolean})],ce.prototype,"expanded",2),d([p({type:String})],ce.prototype,"expandText",2),d([p({type:String})],ce.prototype,"collapseText",2),d([p({type:String})],ce.prototype,"ariaLabel",2),d([p({type:String})],ce.prototype,"buttonVariant",2),d([M()],ce.prototype,"isExpanded",2),ce=d([v("primer-collapsable")],ce);var bn=y` :host { display: block; width: 100%; box-sizing: border-box; } .error-message { display: flex; align-items: flex-start; padding: var(--primer-space-medium); background-color: var(--primer-color-red-100); border-radius: var(--primer-radius-medium); border: 1px solid var(--primer-color-border-outlined-error); margin-top: var(--primer-space-small); box-sizing: border-box; width: 100%; /* Add animation properties */ opacity: 1; transform: translateY(0); transition: opacity var(--primer-animation-duration) var(--primer-animation-easing), transform var(--primer-animation-duration) var(--primer-animation-easing); } .error-message.hidden { opacity: 0; transform: translateY(-var(--primer-space-medium)); pointer-events: none; } .error-icon { flex-shrink: 0; margin-right: var(--primer-space-medium); color: var(--primer-color-icon-negative); } .error-content { flex: 1; font-family: var(--primer-typography-body-medium-font); font-size: var(--primer-typography-body-medium-size); font-weight: var(--primer-typography-body-medium-weight); line-height: var(--primer-typography-body-medium-line-height); letter-spacing: var(--primer-typography-body-medium-letter-spacing); color: var(--primer-color-text-negative); } /* Respect user's preference for reduced motion */ @media (prefers-reduced-motion: reduce) { .error-message { transition: opacity var(--primer-animation-duration) var(--primer-animation-easing); transform: none; } .error-message.hidden { transform: none; } } `;var Re=class extends g{constructor(){super();this.message="";this.visible=!1;this._role="alert";this.showMessage=!1;this.role="alert"}get role(){return this._role}set role(e){this._role=e,this.setAttribute("role",e)}updated(e){e.has("visible")&&this.handleVisibilityChange()}handleVisibilityChange(){this.visible?(this.showMessage=!0,this.setAttribute("aria-hidden","false")):setTimeout(()=>{this.showMessage=!1,this.setAttribute("aria-hidden","true")},200)}render(){if(!this.showMessage&&!this.visible)return f;let e={"error-message":!0,hidden:!this.visible};return m`<div part="error-message" class=${Z(e)} aria-live="assertive" aria-atomic="true" ><div part="error-icon" class="error-icon"><primer-icon name="failure-icon" size="sm" color="var(--primer-color-icon-negative)" ></primer-icon></div><div part="error-content" class="error-content">${this.message}</div></div>`}};Re.styles=[bn],d([p({type:String})],Re.prototype,"message",2),d([p({type:Boolean,reflect:!0})],Re.prototype,"visible",2),d([M()],Re.prototype,"showMessage",2),Re=d([v("primer-error-message")],Re);var Cn=y` :host { display: none; } `;var lt=class extends g{constructor(){super(...arguments);this._id=`d${Math.random().toString(36).substring(7)}`;this._handleSlotChange=e=>{let o=e.target.assignedNodes();if(!o.length)return;let a=this.getContainer();o.forEach(n=>a.appendChild(n))}}get id(){return this._id}getContainer(){let e=document.querySelector(`#${this._id}`);return e||(e=document.createElement("div"),e.id=this._id,document.body.appendChild(e),this._setupEventListeners(e)),e}_setupEventListeners(e){["primer-ach-error","primer-ach-bank-details-collected","primer-ach-mandate-confirmed","primer-ach-mandate-declined","primer-dialog-close"].forEach(r=>{e.addEventListener(r,o=>{o.stopPropagation(),this.dispatchEvent(new CustomEvent(r,{bubbles:!0,composed:!0,detail:o.detail}))})})}disconnectedCallback(){super.disconnectedCallback(),this.getContainer().remove()}render(){return m`<slot @slotchange=${this._handleSlotChange}></slot>`}};lt.styles=[Cn],d([M()],lt.prototype,"_id",2),lt=d([v("primer-portal")],lt);var En=y` :host { display: contents; } .backdrop { position: fixed; top: 0; left: 0; background-color: rgba(0, 0, 0, 0.2); z-index: 1000; display: flex; justify-content: center; align-items: center; width: 100vw; height: 100vh; /* Animation properties */ transition: all 500ms cubic-bezier(0.4, 0, 0.2, 1); opacity: 0; } .backdrop--entering { opacity: 0; } .backdrop--entered { opacity: 1; } .backdrop--exiting { opacity: 0; } .dialog { background-color: white; padding: var(--primer-space-medium); border-radius: var(--primer-radius-medium); max-width: 600px; box-shadow: 1px 1px 5px 3px rgba(0, 0, 0, 0.05); /* Animation properties */ transition: all 500ms cubic-bezier(0.4, 0, 0.2, 1); opacity: 0; transform: translateY(100vh); } .dialog--entering { opacity: 0; transform: translateY(100vh); } .dialog--entered { opacity: 1; transform: translateY(0); } .dialog--exiting { opacity: 0; transform: translateY(100vh); } .dialog.large { width: 500px; height: 640px; padding: 0; overflow: hidden; display: flex; flex-direction: column; } @media (max-width: 500px) { .dialog.large { width: calc(100vw - var(--primer-space-large, 32px)); height: calc(100vh - var(--primer-space-large, 32px)); max-width: none; max-height: none; } } .header { display: flex; justify-content: flex-end; flex-shrink: 0; } .content { flex: 1; overflow: auto; min-height: 0; } `;var xe=class extends g{constructor(){super(...arguments);this.size="flex";this.showCloseButton=!0;this._animationState="entering";this._isVisible=!1;this._handleCloseClick=()=>{this._startExitAnimation()}}startExitAnimation(){this._startExitAnimation()}connectedCallback(){super.connectedCallback(),document.body.style.overflow="hidden",this._startEnterAnimation()}disconnectedCallback(){super.disconnectedCallback(),document.body.style.overflow="",this._animationTimeout&&clearTimeout(this._animationTimeout)}_startEnterAnimation(){this._animationState="entering",this._isVisible=!0,requestAnimationFrame(()=>{this._animationTimeout=window.setTimeout(()=>{this._animationState="entered"},500)})}_startExitAnimation(){this._animationTimeout&&clearTimeout(this._animationTimeout),this._animationState="exiting",this._animationTimeout=window.setTimeout(()=>{this._animationState="exited",this._isVisible=!1,this.dispatchEvent(new CustomEvent("primer-dialog-close",{bubbles:!0,composed:!0}))},500)}render(){return this._isVisible?m`<div class=${Z({backdrop:!0,"backdrop--entering":this._animationState==="entering","backdrop--entered":this._animationState==="entered","backdrop--exiting":this._animationState==="exiting"})} @click=${e=>{e.preventDefault()}} ><div class=${Z({dialog:!0,[this.size]:!0,"dialog--entering":this._animationState==="entering","dialog--entered":this._animationState==="entered","dialog--exiting":this._animationState==="exiting"})} ><div class="header">${this.showCloseButton?m`<primer-button variant="tertiary" @click=${this._handleCloseClick} ><primer-icon name="close"></primer-icon></primer-button>`:""}</div><div class="content"><slot></slot></div></div></div>`:m``}};xe.styles=[En],d([p({type:String})],xe.prototype,"size",2),d([p({type:Boolean})],xe.prototype,"showCloseButton",2),d([M()],xe.prototype,"_animationState",2),d([M()],xe.prototype,"_isVisible",2),xe=d([v("primer-dialog")],xe);var An=y` :host { display: contents; } .klarna-container { display: flex; flex-direction: column; width: 100%; transition: all var(--primer-animation-duration) var(--primer-animation-easing); } .klarna-container.expanded { border-radius: var(--primer-radius-medium); box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1); background-color: var(--primer-color-background-outlined-default); border: 1px solid var(--primer-color-border-outlined-default); padding: var(--primer-space-large); } .klarna-button-header { padding: 0; display: flex; align-items: center; justify-content: space-between; width: 100%; gap: var(--primer-space-small); } .klarna-accordion-icon { position: absolute; right: var(--primer-space-medium); font-size: var(--primer-typography-body-small-size); font-weight: var(--primer-typography-title-large-weight); color: var(--primer-color-text-secondary); transition: all var(--primer-animation-duration) var(--primer-animation-easing); display: inline-flex; align-items: center; justify-content: center; width: 24px; height: 24px; margin-left: var(--primer-space-small); } .klarna-accordion-icon.expanded { transform: rotate(180deg); } .klarna-expanded-content { width: 100%; display: grid; grid-template-rows: 0fr; transition: grid-template-rows var(--primer-animation-duration) var(--primer-animation-easing); } .klarna-expanded-content.visible { margin-top: var(--primer-space-large); border-top: 1px solid var(--primer-color-border-outlined-default); grid-template-rows: 1fr; } .klarna-accordion-content { overflow: hidden; } @keyframes fadeIn { from { opacity: 0; transform: translateY(-10px); } to { opacity: 1; transform: translateY(0); } } .category-selection { display: flex; flex-wrap: wrap; gap: var(--primer-space-small); margin: var(--primer-space-large) 0; } .category-button { padding: var(--primer-space-medium) var(--primer-space-large); border-radius: var(--primer-radius-base); background-color: var(--primer-color-background-outlined-loading); border: 1px solid var(--primer-color-border-outlined-default); font-size: var(--primer-typography-body-medium-size); cursor: pointer; transition: all var(--primer-animation-duration) var(--primer-animation-easing); flex: 1; min-width: 100px; text-align: center; } .category-button.selected { background-color: var(--primer-color-background-outlined-default); border-color: var(--primer-color-brand); color: var(--primer-color-brand); font-weight: var(--primer-typography-title-large-weight); } .category-button:hover:not(.selected):not(:disabled) { background-color: var(--primer-color-background-outlined-hover); } .category-button:disabled { background-color: var(--primer-color-background-outlined-disabled); border-color: var(--primer-color-border-outlined-disabled); color: var(--primer-color-text-disabled); cursor: not-allowed; } .klarna-category-container { min-height: 74px; width: 100%; border-radius: var(--primer-radius-small); border: 1px solid var(--primer-color-border-outlined-default); background-color: var(--primer-color-background-outlined-default); padding: var(--primer-space-medium); margin-bottom: var(--primer-space-large); transition: height var(--primer-animation-duration) var(--primer-animation-easing); overflow: hidden; } .klarna-button::part(button) { display: flex; flex: 1; gap: var(--primer-space-small); height: calc( ${we(at)} + calc(2 * var(--primer-space-medium)) ); width: 100%; } .klarna-button primer-icon { margin-right: var(--primer-space-medium); } .klarna-button:hover { background-color: var(--primer-color-background-outlined-hover); border-color: var(--primer-color-border-outlined-hover); } .klarna-pay-button { padding: var(--primer-space-medium) var(--primer-space-large); display: flex; align-items: center; justify-content: center; border-radius: var(--primer-radius-small); background-color: var(--primer-color-brand); color: var(--primer-color-background-outlined-default); border: none; font-size: var(--primer-typography-body-medium-size); font-weight: var(--primer-typography-body-medium-weight); width: 100%; cursor: pointer; transition: all var(--primer-animation-duration) var(--primer-animation-easing); } .klarna-pay-button:hover:not(.disabled) { filter: brightness(105%); } .klarna-pay-button.loading { opacity: 0.7; pointer-events: none; } .klarna-pay-button.disabled { background-color: var(--primer-color-background-outlined-disabled); border-color: var(--primer-color-border-outlined-disabled); color: var(--primer-color-text-disabled); cursor: not-allowed; } .loading { text-align: center; font-size: var(--primer-typography-body-medium-size); color: var(--primer-color-text-secondary); padding: var(--primer-space-medium); } .error { color: var(--primer-color-text-negative); font-size: var(--primer-typography-body-medium-size); padding: var(--primer-space-medium); text-align: center; border: 1px solid var(--primer-color-border-outlined-error); background-color: var(--primer-color-background-outlined-default); border-radius: var(--primer-radius-small); } /* Overall disabled state for entire Klarna component */ :host([disabled]) { cursor: not-allowed; } :host([disabled]) .klarna-button { pointer-events: none; cursor: not-allowed; } :host([disabled]) .category-button { pointer-events: none; cursor: not-allowed; } :host([disabled]) .klarna-pay-button { pointer-events: none; cursor: not-allowed; } /* Ensure disabled state is visible on container when expanded */ :host([disabled]) .klarna-container.expanded { background-color: var(--primer-color-background-outlined-disabled); border-color: var(--primer-color-border-outlined-disabled); opacity: 0.7; } `;var X=class extends g{constructor(){super(...arguments);this.paymentManagers=new Map;this.sdkState=null;this.headlessUtils=null;this.klarnaCategories=null;this.disabled=!1;this.selectedCategory=null;this.isExpanded=!1;this.headerAriaLabel=S("pay_with",{id:"pay_with"});this._paymentMethodManagerTask=new D(this,{task:async([e,r])=>{if(!e||!r)return L;let o=await r.getCDNAssets("KLARNA");return{manager:e.manager,klarnaIcon:o?.assets?.icon?`${o.goatCdnUrl}/${o.assets.icon}`:""}},args:()=>[this.paymentManagers.get("KLARNA"),this.headlessUtils]});this.toggleExpand=()=>{this.disabled||(this.isExpanded=!this.isExpanded,this.isExpanded||(this.selectedCategory=null))}}async startKlarnaPayment(){if(!(!this._paymentMethodManagerTask.value||!this.selectedCategory))try{await this._paymentMethodManagerTask.value.manager.start({paymentMethodCategoryId:this.selectedCategory})}catch(e){_.error("Failed to start Klarna payment",e)}}async renderSelectedCategory(){if(!(!this._paymentMethodManagerTask.value||!this.selectedCategory||!this.klarnaContainer))try{this.klarnaContainer.innerHTML="",await this._paymentMethodManagerTask.value.manager.renderCategory({containerId:this.klarnaContainer,paymentMethodCategoryId:this.selectedCategory,onHeightChange:e=>{e>0&&(this.klarnaContainer.style.height=`${e}px`)}})}catch(e){_.error("Failed to render Klarna category",e)}}selectCategory(e){this.disabled||(this.selectedCategory=e,this.renderSelectedCategory())}updated(e){e.has("selectedCategory")&&this.selectedCategory&&this.renderSelectedCategory()}renderCategorySelection(){let e=this.klarnaCategories?.categories||[];return this.klarnaCategories?.isLoading||!1?m`<div class="loading"><primer-spinner size="small"></primer-spinner></div>`:m`<div class="category-selection">${e.map(o=>m`<button class=${Z({"category-button":!0,selected:o.id===this.selectedCategory})} @click=${()=>{this.selectCategory(o.id)}} ?disabled=${this.disabled} >${o.name}</button>`)}</div>`}renderExpandedContent(){return m` ${this.renderCategorySelection()} ${this.selectedCategory?m`<div id="klarna-category-container" class="klarna-category-container" ></div>`:f}<button class=${Z({"klarna-pay-button":!0,loading:!!this.sdkState?.isProcessing,disabled:!this.selectedCategory||this.disabled})} ?disabled=${!this.selectedCategory||this.sdkState?.isProcessing||this.disabled} @click=${()=>this.startKlarnaPayment()} >${S("confirm",{id:"confirm"})}</button>`}render(){return this._paymentMethodManagerTask.render({error:e=>{let r=e instanceof Error?e.message:"Unknown error in Klarna";return m`<div class="error"> Error loading Klarna: ${r}</div>`},complete:({manager:e,klarnaIcon:r})=>e?m`<div class="klarna-container ${this.isExpanded?"expanded":""}"><div class="klarna-button-header"><primer-button buttonType="button" variant="secondary" class="klarna-button" @click=${this.toggleExpand} aria-expanded=${this.isExpanded} aria-controls="collapsable-content" aria-label=${this.headerAriaLabel} ?disabled=${this.disabled} ><img src=${r} alt="Klarna logo" /><span>${S("pay_with",{id:"pay_with"})} Klarna</span><span class="klarna-accordion-icon ${this.isExpanded?"expanded":""}" > ▼ </span></primer-button></div><div class="klarna-expanded-content ${this.isExpanded?"visible":""}" ><div class="klarna-accordion-content">${this.renderExpandedContent()}</div></div></div>`:f})}};X.styles=[P,An],d([C({context:se,subscribe:!0}),p()],X.prototype,"paymentManagers",2),d([C({context:F,subscribe:!0}),p()],X.prototype,"sdkState",2),d([C({context:B,subscribe:!0}),p({type:Object})],X.prototype,"headlessUtils",2),d([C({context:cr,subscribe:!0}),p()],X.prototype,"klarnaCategories",2),d([p({type:Boolean,attribute:"disabled"})],X.prototype,"disabled",2),d([M()],X.prototype,"selectedCategory",2),d([M()],X.prototype,"isExpanded",2),d([M()],X.prototype,"headerAriaLabel",2),d([ot("#klarna-category-container")],X.prototype,"klarnaContainer",2),X=d([v("primer-klarna"),k()],X);var xn=y` :host { display: contents; } `;var Se=class extends g{constructor(){super(...arguments);this.type=void 0;this.disabled=!1;this.paymentMethods=null;this.analyticsUtils=null;this.handleClick=()=>{this.paymentMethods?.get(this.type)?.managerType!=="CARD"&&this.sendPaymentMethodSelectionEvent()}}sendPaymentMethodSelectionEvent(){this.type&&G({eventName:"PAYMENT_METHOD_SELECTION",paymentMethod:this.type})}render(){if(!this.type)return f;let e=this.paymentMethods?.get(this.type);if(!e)return f;let r;switch(e?.managerType){case"CARD":r=m`<primer-card-form ?disabled=${this.disabled} ></primer-card-form>`;break;case"NATIVE":r=m`<primer-native-payment .paymentMethod=${e} ?disabled=${this.disabled} ></primer-native-payment>`;break;case"REDIRECT":r=m`<primer-redirect-payment .paymentMethod=${e} ?disabled=${this.disabled} ></primer-redirect-payment>`;break;case"KLARNA":r=m`<primer-klarna ?disabled=${this.disabled} ></primer-klarna>`;break;case"ACH":r=m`<primer-dynamic-payment .paymentMethod=${e} ></primer-dynamic-payment>`;break;default:return f}return m`<div @click=${this.handleClick}>${r}</div>`}};Se.styles=[xn],d([p({type:String})],Se.prototype,"type",2),d([p({type:Boolean,attribute:"disabled"})],Se.prototype,"disabled",2),d([C({context:et,subscribe:!0}),p()],Se.prototype,"paymentMethods",2),d([C({context:Xe,subscribe:!0}),p({attribute:!1})],Se.prototype,"analyticsUtils",2),Se=d([v("primer-payment-method")],Se);var Sn=y` :host { display: block; width: 100%; } .payment-methods-container { display: flex; flex-direction: column; gap: var(--primer-space-small); } :host([disabled]) .payment-methods-container { opacity: 0.5; pointer-events: none; } `;var ve=class extends g{constructor(){super(...arguments);this.disabled=!1;this.paymentMethods=null;this.clientOptions=null}getFilteredMethods(){if(!this.paymentMethods)return[];let e=this.paymentMethods.toArray();if(this.include){let r=this.include.split(",").map(o=>o.trim());e=e.filter(o=>r.includes(o.type))}if(this.exclude){let r=this.exclude.split(",").map(o=>o.trim());e=e.filter(o=>!r.includes(o.type))}return e}render(){let e=this.getFilteredMethods();return e.length===0?f:m`<div class="payment-methods-container">${e.map(r=>m`<primer-payment-method type="${r.type}" ?disabled="${this.disabled||this.clientOptions?.disabledPayments===!0}" ></primer-payment-method>`)}</div>`}};ve.styles=[P,Sn],d([p({type:String})],ve.prototype,"include",2),d([p({type:String})],ve.prototype,"exclude",2),d([p({type:Boolean,attribute:"disabled"})],ve.prototype,"disabled",2),d([C({context:et,subscribe:!0}),p()],ve.prototype,"paymentMethods",2),d([C({context:ne,subscribe:!0}),p()],ve.prototype,"clientOptions",2),ve=d([v("primer-payment-method-container")],ve);var _n=y` :host { display: flex; flex-direction: column; gap: var(--primer-space-medium); width: 100%; } h2 { margin: 0; padding: 0; border-radius: var(--primer-radius-medium); font-weight: var(--primer-typography-title-xlarge-weight); font-size: var(--primer-typography-title-xlarge-size); letter-spacing: var(--primer-typography-title-xlarge-letter-spacing); line-height: var(--primer-typography-title-xlarge-line-height); font-family: var(--primer-typography-title-xlarge-font); } p { margin: 0; padding: 0; border-radius: var(--primer-radius-medium); font-weight: var(--primer-typography-body-medium-weight); font-size: var(--primer-typography-body-medium-size); letter-spacing: var(--primer-typography-body-medium-letter-spacing); line-height: var(--primer-typography-body-medium-line-height); font-family: var(--primer-typography-body-medium-font); } form { display: flex; flex-direction: column; gap: var(--primer-space-medium); width: 100%; } .form-row { display: flex; gap: var(--primer-space-small); width: 100%; } .form-row primer-input-wrapper { flex: 1; } .error-message { color: var(--primer-color-text-negative); background-color: var(--primer-color-red-100); padding: var(--primer-space-small); border-radius: var(--primer-radius-small); font-weight: var(--primer-typography-body-medium-weight); font-size: var(--primer-typography-body-medium-size); letter-spacing: var(--primer-typography-body-medium-letter-spacing); line-height: var(--primer-typography-body-medium-line-height); font-family: var(--primer-typography-body-medium-font); } .loading-container { display: flex; flex-direction: column; align-items: center; justify-content: center; gap: var(--primer-space-medium); padding: var(--primer-space-large); } .button-group { display: flex; gap: var(--primer-space-small); margin-top: var(--primer-space-medium); } /* Apply responsive styles for small screens */ @media (max-width: 600px) { .form-row { flex-direction: column; gap: var(--primer-space-medium); } .button-group { flex-direction: column; } } `;function Pn(){return{firstName:{value:"",error:"",pristine:!0,touched:!1,dirty:!1,valid:!1},lastName:{value:"",error:"",pristine:!0,touched:!1,dirty:!1,valid:!1},emailAddress:{value:"",error:"",pristine:!0,touched:!1,dirty:!1,valid:!1}}}var ei=class{constructor(t,e){this.formState=Pn();this.host=t,this.validate=e,t.addController(this)}get hasError(){return{firstName:this.formState.firstName.dirty&&this.formState.firstName.touched&&!!this.formState.firstName.error,lastName:this.formState.lastName.dirty&&this.formState.lastName.touched&&!!this.formState.lastName.error,emailAddress:this.formState.emailAddress.dirty&&this.formState.emailAddress.touched&&!!this.formState.emailAddress.error}}get formData(){return{firstName:this.formState.firstName.value,lastName:this.formState.lastName.value,emailAddress:this.formState.emailAddress.value}}async setFieldValue(t,e){let r=this.formState[t];r.value=e,r.dirty=!0,r.error="",r.valid=!0;let o=await this.validate(this.formData);this.setValidation(o)}setValidation(t,e=!1){e&&(this.formState.firstName.touched=!0,this.formState.lastName.touched=!0,this.formState.emailAddress.touched=!0,this.formState.firstName.dirty=!0,this.formState.lastName.dirty=!0,this.formState.emailAddress.dirty=!0),t.validationErrors.forEach(r=>{this.isValidFieldName(r.field)&&(this.formState[r.field].error=r.message,this.formState[r.field].valid=r.message==="")}),this.host.dispatchEvent(new CustomEvent("primer-ach-validation",{bubbles:!0,composed:!0,detail:{validation:t}})),this.host.requestUpdate()}setFieldTouched(t){this.formState[t].touched||(this.formState[t].touched=!0,this.host.requestUpdate())}resetForm(){this.formState=Pn(),this.host.requestUpdate()}isValidFieldName(t){return!!t&&["firstName","lastName","emailAddress"].includes(t)}hostConnected(){}hostDisconnected(){}};var he=class extends g{constructor(){super(...arguments);this.formController=new ei(this,e=>this._paymentMethodManagerTask.value.setAndValidate(e));this.paymentManagers=new Map;this.sdkState=void 0;this.clientOptions=void 0;this.screen="form";this.isSubmitting=!1;this._paymentMethodManagerTask=new D(this,{task:([e])=>e!=="STRIPE_ACH"?L:this.paymentManagers.get(e)?.manager,args:()=>[this.paymentMethod?.type]})}_handleInput(e,r){let o=e.target;this.formController.setFieldValue(r,o.value)}_handleBlur(e){this.formController.setFieldTouched(e)}_handleError(e){this.dispatchEvent(new CustomEvent("primer-ach-error",{bubbles:!0,composed:!0,detail:{error:e instanceof Error?e:new Error(typeof e=="string"?e:"Unknown error occurred")}}))}async _handleSubmitButtonClick(e){if(!this.isSubmitting){this.isSubmitting=!0;try{let r=await e.start(this.formController.formData);if(!r||r.valid)return await this._handleCollectBankAccountDetails(e);r&&this.formController.setValidation(r,!0)}catch(r){this._handleError(r)}finally{this.isSubmitting=!1}}}async _handleCollectBankAccountDetails(e){try{await e.collectBankAccountDetails(),this.screen="mandate",this.dispatchEvent(new CustomEvent("primer-ach-bank-details-collected",{bubbles:!0,composed:!0}))}catch(r){this._handleError(r)}}async _handleConfirmMandate(){if(this._paymentMethodManagerTask.value){this.isSubmitting=!0;try{await this._paymentMethodManagerTask.value.confirmMandate(),this.dispatchEvent(new CustomEvent("primer-ach-mandate-confirmed",{bubbles:!0,composed:!0}))}catch(e){this._handleError(e)}finally{this.isSubmitting=!1}}}async _handleDeclineMandate(){if(this._paymentMethodManagerTask.value){this.isSubmitting=!0;try{await this._paymentMethodManagerTask.value.declineMandate(),this.dispatchEvent(new CustomEvent("primer-ach-mandate-declined",{bubbles:!0,composed:!0}))}catch(e){this._handleError(e)}finally{this.isSubmitting=!1}}}renderForm(e){return m`<h2>${S("payWithAch",{id:"payWithAch"})}</h2><p>${S("stripe_ach_user_details_collection_subtitle_label",{id:"stripe_ach_user_details_collection_subtitle_label"})}</p><form @submit=${r=>r.preventDefault()}><div class="form-row"><primer-input-wrapper .hasError=${this.formController.hasError.firstName} ><primer-input-label slot="label">${S("stripe_ach_user_details_collection_first_name_label",{id:"stripe_ach_user_details_collection_first_name_label"})}</primer-input-label><primer-input slot="input" .value=${this.formController.formState.firstName.value} @input=${r=>this._handleInput(r,"firstName")} @blur=${()=>this._handleBlur("firstName")} ?disabled=${this.isSubmitting} ></primer-input><primer-input-error slot="error">${this.formController.hasError.firstName?this.formController.formState.firstName.error:f}</primer-input-error></primer-input-wrapper><primer-input-wrapper .hasError=${this.formController.hasError.lastName} ><primer-input-label slot="label">${S("stripe_ach_user_details_collection_last_name_label",{id:"stripe_ach_user_details_collection_last_name_label"})}</primer-input-label><primer-input slot="input" .value=${this.formController.formState.lastName.value} @input=${r=>this._handleInput(r,"lastName")} @blur=${()=>this._handleBlur("lastName")} ?disabled=${this.isSubmitting} ></primer-input><primer-input-error slot="error">${this.formController.hasError.lastName?this.formController.formState.lastName.error:f}</primer-input-error></primer-input-wrapper></div><primer-input-wrapper .hasError=${this.formController.hasError.emailAddress} ><primer-input-label slot="label">${S("stripe_ach_user_details_collection_email_address_label",{id:"stripe_ach_user_details_collection_email_address_label"})}</primer-input-label><primer-input slot="input" type="email" .value=${this.formController.formState.emailAddress.value} @input=${r=>this._handleInput(r,"emailAddress")} @blur=${()=>this._handleBlur("emailAddress")} ?disabled=${this.isSubmitting} ></primer-input><primer-input-error slot="error">${this.formController.hasError.emailAddress?this.formController.formState.emailAddress.error:f}</primer-input-error></primer-input-wrapper><p>${S("stripe_ach_user_details_collection_data_usage_label",{id:"stripe_ach_user_details_collection_data_usage_label"})}</p><primer-button buttonType="submit" variant="primary" @click=${()=>this._handleSubmitButtonClick(e)} ?disabled=${this.isSubmitting} ?loading=${this.isSubmitting} >${S("stripe_ach_user_details_collection_continue_button",{id:"stripe_ach_user_details_collection_continue_button"})}</primer-button></form>`}renderMandate(){return m`<h2>${S("payWithAch",{id:"payWithAch"})}</h2><p>${this.clientOptions?.stripe?.mandateData.fullMandateText??S("stripe_ach_mandate_template_web",{id:"stripe_ach_mandate_template_web"}).replace(/\{merchantName\}/g,this.clientOptions?.stripe?.mandateData.merchantName??"Merchant")}</p><div class="button-group"><primer-button variant="primary" @click=${this._handleConfirmMandate.bind(this)} ?disabled=${this.isSubmitting} ?loading=${this.isSubmitting} >${S("stripe_ach_mandate_accept_button",{id:"stripe_ach_mandate_accept_button"})}</primer-button><primer-button variant="tertiary" @click=${this._handleDeclineMandate.bind(this)} ?disabled=${this.isSubmitting} >${S("stripe_ach_mandate_cancel_payment_button",{id:"stripe_ach_mandate_cancel_payment_button"})}</primer-button></div>`}render(){return this._paymentMethodManagerTask.render({complete:e=>e?this.screen==="form"?this.renderForm(e):this.renderMandate():f})}};he.styles=[P,_n],d([p({type:Object})],he.prototype,"paymentMethod",2),d([C({context:se,subscribe:!0}),p({attribute:!1})],he.prototype,"paymentManagers",2),d([C({context:F,subscribe:!0}),p({attribute:!1})],he.prototype,"sdkState",2),d([C({context:ne,subscribe:!0}),p({attribute:!1})],he.prototype,"clientOptions",2),d([M()],he.prototype,"screen",2),d([M()],he.prototype,"isSubmitting",2),he=d([v("primer-ach-payment"),k()],he);var Tn=y` :host { height: calc( ${we(at)} + calc(2 * var(--primer-space-medium)) ); display: flex; /* Default value for the background color CSS variable */ --dynamic-payment-button-bg-color: var( --primer-color-background-outlined-default ); } primer-button { width: 100%; height: 100%; } primer-button::part(button) { background-color: var(--dynamic-payment-button-bg-color); border: 1px solid var(--primer-color-border-outlined-default); color: var(--primer-color-text-primary); flex: 1; padding: 1px; } .image-container { display: flex; justify-content: center; height: 100%; } /* Target the img specifically inside our component */ img { height: 100%; } `;function ar(i){return i.toLowerCase().replace(/[^a-zA-Z0-9]+(.)/g,(t,e)=>e.toUpperCase())}var be=class extends g{constructor(){super(...arguments);this.paymentManagers=new Map;this.sdkState=null;this.headlessUtils=null;this.open=!1;this._paymentMethodManagerTask=new D(this,{task:([e,r])=>!e||!r?L:r.get(e)?.manager,args:()=>[this.paymentMethod?.type,this.paymentManagers]});this._getAssetsTask=new D(this,{task:([e,r])=>{if(!e||!r)return L;let o=r.getPaymentMethodConfiguration(e);return o?{backgroundColor:o.displayMetadata.button.backgroundColor.colored,name:o.name,displayName:this._legacyGetButtonLabel(o.displayMetadata.button.text),iconUrl:o.displayMetadata.button.iconUrl.colored||o.displayMetadata.button.iconUrl.light||o.displayMetadata.button.iconUrl.dark}:L},args:()=>[this.paymentMethod?.type,this.headlessUtils]});this._setupTasks=new D(this,{task:([e,r])=>!e||!r?L:{paymentMethodManager:e,assetsConfig:r},args:()=>[this._paymentMethodManagerTask.value,this._getAssetsTask.value]})}_legacyGetButtonLabel(e){if(!e)return;let r=e?ar(e):"";return r==="payWith"&&(r="pay_with"),S(r,{id:r})}start(){this._paymentMethodManagerTask.value&&(this.open=!0)}renderDialog(){return this.open?m`<primer-portal><primer-dialog @primer-dialog-close="${()=>this.open=!1}"><primer-ach-payment .paymentMethod=${this.paymentMethod} @primer-ach-error=${()=>this.open=!1} @primer-ach-mandate-confirmed=${()=>this.open=!1} @primer-ach-mandate-declined=${()=>this.open=!1} ></primer-ach-payment></primer-dialog></primer-portal>`:f}render(){return this._setupTasks.render({error:()=>f,complete:({assetsConfig:e})=>(this.style.setProperty("--dynamic-payment-button-bg-color",e.backgroundColor),m`<primer-button @click="${()=>this.start()}" class=${Z({loading:!!this.sdkState?.isProcessing,reverse:!0})} title="${S("pay_with",{id:"pay_with"})} ${e.name}" ><span class="image-container"><img src="${e.iconUrl}" alt="${e.name}" /></span>${e.displayName}</primer-button>${this.renderDialog()} `)})}};be.styles=[P,Tn],d([p({type:Object})],be.prototype,"paymentMethod",2),d([C({context:se,subscribe:!0})],be.prototype,"paymentManagers",2),d([C({context:F,subscribe:!0})],be.prototype,"sdkState",2),d([C({context:B,subscribe:!0})],be.prototype,"headlessUtils",2),d([M()],be.prototype,"open",2),be=d([v("primer-dynamic-payment"),k()],be);var wn=y` :host { height: calc( ${we(at)} + calc(2 * var(--primer-space-medium)) ); display: flex; /* Default value for the background color CSS variable */ --redirect-payment-button-bg-color: var( --primer-color-background-outlined-default ); } primer-button { width: 100%; height: 100%; } primer-button::part(button) { background-color: var(--redirect-payment-button-bg-color); border: 1px solid var(--primer-color-border-outlined-default); color: var(--primer-color-text-primary); flex: 1; padding: var(--primer-space-small); display: flex; align-items: center; justify-content: center; gap: var(--primer-space-small); } /* Default layout: icon on the left (START) */ primer-button { display: flex; flex-direction: row; } /* When icon position is END */ primer-button.icon-end { flex-direction: row-reverse; } .image-container { display: flex; justify-content: center; align-items: center; min-width: 100px; height: 100%; } .button-text { font-family: var(--primer-typography-font-family); font-size: var(--primer-typography-title-small-font-size); font-weight: var(--primer-typography-title-small-font-weight); line-height: var(--primer-typography-title-small-line-height); letter-spacing: var(--primer-typography-title-small-letter-spacing); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } /* Target the img specifically inside our component */ img { max-width: 100px; width: 100%; height: auto; object-fit: cover; max-height: 100%; } /* For image container sizing */ .image-container { flex-shrink: 0; flex-grow: 1; } /* Disabled state styling - subtle visual feedback */ :host([disabled]) { opacity: 0.6; cursor: not-allowed; } :host([disabled]) primer-button::part(button) { pointer-events: none; cursor: not-allowed; } :host([disabled]) img { filter: grayscale(100%); } `;var Ce=class extends g{constructor(){super(...arguments);this.disabled=!1;this.paymentManagers=new Map;this.sdkState=null;this.headlessUtils=null;this._paymentMethodManagerTask=new D(this,{task:([e,r])=>!e||!r?L:r.get(e)?.manager,args:()=>[this.paymentMethod?.type,this.paymentManagers]});this._getAssetsTask=new D(this,{task:([e,r])=>{if(!e||!r)return L;let o=r.getPaymentMethodConfiguration(e);if(!o)return L;let a=o.displayMetadata.button.backgroundColor.colored??o.displayMetadata.button.backgroundColor.light,n=o.displayMetadata.button.iconPositionRelativeToText||"START";return{backgroundColor:a,name:o.name,displayName:this._legacyGetButtonLabel(o.displayMetadata.button.text),iconUrl:o.displayMetadata.button.iconUrl.colored??o.displayMetadata.button.iconUrl.light,iconPosition:n}},args:()=>[this.paymentMethod?.type,this.headlessUtils]});this._setupTasks=new D(this,{task:([e,r])=>!e||!r?L:{paymentMethodManager:e,assetsConfig:r},args:()=>[this._paymentMethodManagerTask.value,this._getAssetsTask.value]})}_legacyGetButtonLabel(e){if(!e)return;let r=e?ar(e):"";return r==="payWith"&&(r="pay_with"),S(r,{id:r})}startRedirectPayment(){this.disabled||this._paymentMethodManagerTask.value&&this._paymentMethodManagerTask.value.start()}render(){return this._setupTasks.render({error:()=>f,complete:({assetsConfig:e})=>{this.style.setProperty("--redirect-payment-button-bg-color",e.backgroundColor);let r={loading:!!this.sdkState?.isProcessing,"icon-end":e.iconPosition==="END","image-only":!e.displayName},o=e.displayName?m`<span class="image-container"><img src="${e.iconUrl}" alt="${e.name}" /></span><span class="button-text">${e.displayName}</span>`:m`<span class="image-container"><img src="${e.iconUrl}" alt="${e.name}" /></span>`;return m`<primer-button @click="${()=>this.startRedirectPayment()}" class=${Z(r)} title="${S("pay_with",{id:"pay_with"})} ${e.name}" ?disabled=${this.disabled} >${o}</primer-button>`}})}};Ce.styles=[P,wn],d([p({type:Object})],Ce.prototype,"paymentMethod",2),d([p({type:Boolean,attribute:"disabled"})],Ce.prototype,"disabled",2),d([C({context:se,subscribe:!0})],Ce.prototype,"paymentManagers",2),d([C({context:F,subscribe:!0})],Ce.prototype,"sdkState",2),d([C({context:B,subscribe:!0})],Ce.prototype,"headlessUtils",2),Ce=d([v("primer-redirect-payment"),k()],Ce);var St={WORLDPAY_IDEAL:"WORLDPAY_IDEAL",AUTOMATED_CLEARING_HOUSE:"AUTOMATED_CLEARING_HOUSE",ADYEN_KLARNA:"ADYEN_KLARNA",ADYEN_BANCONTACT_CARD:"ADYEN_BANCONTACT_CARD",PAY_NL_KAARTDIRECT:"PAY_NL_KAARTDIRECT",ADYEN_EPS:"ADYEN_EPS",ADYEN_BANCONTACT_PAYCONIQ:"ADYEN_BANCONTACT_PAYCONIQ",OMISE_PROMPTPAY:"OMISE_PROMPTPAY",OMISE_TRUEMONEY:"OMISE_TRUEMONEY",ADYEN_MULTIBANCO:"ADYEN_MULTIBANCO",PACYPAY_WECHAT:"PACYPAY_WECHAT",PACYPAY_ALIPAY:"PACYPAY_ALIPAY",ADYEN_MBWAY:"ADYEN_MBWAY",XENDIT_DANA:"XENDIT_DANA",XENDIT_SHOPEEPAY:"XENDIT_SHOPEEPAY",ADYEN_PAYSHOP:"ADYEN_PAYSHOP",ADYEN_PAYTRAIL:"ADYEN_PAYTRAIL",CLEARPAY:"CLEARPAY",RAPYD_FAST:"RAPYD_FAST",RAPYD_PROMPTPAY:"RAPYD_PROMPTPAY",RAPYD_GCASH:"RAPYD_GCASH",RAPYD_POLI:"RAPYD_POLI",RAPYD_GRABPAY:"RAPYD_GRABPAY",PRIMER_PAYPAL:"PRIMER_PAYPAL",TWOC2P:"TWOC2P",NETS:"NETS",STRIPE_ACH:"STRIPE_ACH",STRIPE_GIROPAY:"STRIPE_GIROPAY",MOLLIE_GIROPAY:"MOLLIE_GIROPAY",MOLLIE_EPS:"MOLLIE_EPS",PAY_NL_EPS:"PAY_NL_EPS",PAY_NL_P24:"PAY_NL_P24",MOLLIE_P24:"MOLLIE_P24",MOLLIE_SOFORT:"MOLLIE_SOFORT",COINBASE:"COINBASE",OPENNODE:"OPENNODE",MOLLIE_GIFT_CARD:"MOLLIE_GIFTCARD",XFERS_PAYNOW:"XFERS_PAYNOW",CARD:"PAYMENT_CARD",APPLE_PAY:"APPLE_PAY",GOOGLE_PAY:"GOOGLE_PAY",PAYPAL:"PAYPAL_ORDER",PAYPAL_VAULTED:"PAYPAL_BILLING_AGREEMENT",GO_CARDLESS:"GOCARDLESS",PAY_NL_IDEAL:"PAY_NL_IDEAL",PAY_NL_SOFORT_BANKING:"PAY_NL_SOFORT_BANKING",PAY_NL_BANCONTACT:"PAY_NL_BANCONTACT",PAY_NL_PAYPAL:"PAY_NL_PAYPAL",PAY_NL_CREDIT_TRANSFER:"PAY_NL_CREDIT_TRANSFER",PAY_NL_DIRECT_DEBIT:"PAY_NL_DIRECT_DEBIT",PAY_NL_GIROPAY:"PAY_NL_GIROPAY",PAY_NL_PAYCONIQ:"PAY_NL_PAYCONIQ",PAY_NL_RIVERTY:"PAY_NL_RIVERTY",HOOLAH:"HOOLAH",ADYEN_BLIK:"ADYEN_BLIK",ADYEN_VIPPS:"ADYEN_VIPPS",ADYEN_GIROPAY:"ADYEN_GIROPAY",ADYEN_SOFORT:"ADYEN_SOFORT",ADYEN_IDEAL:"ADYEN_IDEAL",ADYEN_TRUSTLY:"ADYEN_TRUSTLY",ADYEN_ALIPAY:"ADYEN_ALIPAY",ADYEN_TWINT:"ADYEN_TWINT",ADYEN_MOBILEPAY:"ADYEN_MOBILEPAY",MOLLIE_BANCONTACT:"MOLLIE_BANCONTACT",MOLLIE_IDEAL:"MOLLIE_IDEAL",BUCKAROO_GIROPAY:"BUCKAROO_GIROPAY",BUCKAROO_EPS:"BUCKAROO_EPS",BUCKAROO_SOFORT:"BUCKAROO_SOFORT",BUCKAROO_BANCONTACT:"BUCKAROO_BANCONTACT",BUCKAROO_IDEAL:"BUCKAROO_IDEAL",ATOME:"ATOME",KLARNA_CUSTOMER_TOKEN:"KLARNA_CUSTOMER_TOKEN",DLOCAL_PIX:"DLOCAL_PIX",ALMA:"ALMA"};function Mn(i){return i.paymentInstrumentType===St.CARD}async function ti(i,t,e){if(!i||!t||!e)return{icon:"",shouldShowCVV:!1,type:"other",description:""};let r="";if(Mn(i))r=t.getCardNetworkAsset(i.paymentInstrumentData.network).cardUrl;else{let n=await t.getCDNAssets(i.paymentMethodType);n&&(r=n.assets?.icon?`${n.goatCdnUrl}/${n.assets.icon}`:"")}let o=e.cvvRecapture,a=lo(i);return{icon:r,shouldShowCVV:o,...a}}function In(i){return i.charAt(0).toUpperCase()+i.slice(1).toLowerCase()}function Ad(i){return i?i===i.toUpperCase()?In(i):i:""}function kn(i,t){return[i,t].filter(Boolean).join(" ")}function xd(i,t){return!i||!t?"":`Expires ${i}/${t.slice(-2)}`}function Nn(i){return i?`\u2022\u2022\u2022\u2022 ${i}`:""}function Sd(i){let t=i.paymentInstrumentData,e=t.cardholderName,r=t.last4Digits,o=xd(t.expirationMonth,t.expirationYear),a=Ad(t.network),n=`${i.paymentInstrumentData.cardholderName?i.paymentInstrumentData.cardholderName:""}${(r?` ${a} ${Nn(r)}`:a)||" Card"}`;return{type:"card",cardholderName:e,last4:r,expiresDate:o,network:a,description:n}}function _d(i){let t=i.paymentInstrumentData,e=t.externalPayerInfo?.email||"",r=t.externalPayerInfo?.firstName||"",o=t.externalPayerInfo?.lastName||"",a=i.userDescription||e||"PayPal Account";return{type:"other",fullName:kn(r,o),email:e,paymentMethodType:"PayPal",description:a}}function Pd(i){let t=i.paymentInstrumentData,e=t.sessionData?.billingAddress?.email||"",r=t.sessionData?.billingAddress?.firstName||"",o=t.sessionData?.billingAddress?.lastName||"",a=i.userDescription||(e?`Klarna - ${e}`:"Klarna Account");return{type:"other",fullName:kn(r,o),email:e,paymentMethodType:"Klarna",description:a}}function Td(i){let t=i.paymentInstrumentData,e=t.accountNumberLastFourDigits||"",r=t.bankName||"",o=t.accountType||"",a=i.userDescription;return a||(r&&e?a=`${r} ${Nn(e)}`:r?a=r:a="Bank Account"),{type:"other",fullName:"",bankName:r,last4:e,accountType:o,paymentMethodType:"ACH",description:a}}function wd(i){let t=i.paymentInstrumentType,e=In(t.replace(/_/g," "));return{type:"other",description:i.userDescription||e}}var Md={[St.CARD]:Sd,[St.PAYPAL_VAULTED]:_d,[St.KLARNA_CUSTOMER_TOKEN]:Pd,[St.AUTOMATED_CLEARING_HOUSE]:Td};function lo(i){try{let t=Md[i.paymentInstrumentType];return t?t(i):wd(i)}catch(t){return _.error("FormatUtils",`Error formatting payment method ${i.id}:`,t),{type:"other",description:i.userDescription||i.id||"Payment Method"}}}var Ln=y` :host { display: block; width: 100%; position: relative; } .vault-manager { display: flex; flex-direction: column; position: relative; } .vault-manager-content { display: flex; flex-direction: column; width: 100%; position: relative; } /* Content container using CSS Grid for height animation */ .content-container { display: grid; grid-template-rows: 1fr; transition: grid-template-rows var(--primer-animation-duration) var(--primer-animation-easing); width: 100%; position: relative; } /* Required to make grid animation work - ensures content can expand/collapse properly */ .content-container > * { min-height: 0; overflow: hidden; } /* Submit button container */ .submit-button-container { display: grid; grid-template-rows: 1fr; transition: grid-template-rows var(--primer-animation-duration) var(--primer-animation-easing); overflow: hidden; margin-top: var(--primer-space-small); width: 100%; } /* Ensure the submit button has full width */ .submit-button { width: 100%; } /* Make sure pay button inside the submit component is full width */ primer-vault-payment-submit::part(button), ::slotted(primer-button) { width: 100%; } /* Payment methods list */ .payment-methods-list { display: flex; flex-direction: column; gap: var(--primer-space-small); width: 100%; position: relative; } /* Delete confirmation container */ .delete-confirmation-container { width: 100%; position: relative; display: flex; flex-direction: column; gap: var(--primer-space-small); } /* Loading overlay styles */ .loading-overlay { position: absolute; top: 0; left: 0; width: 100%; height: 100%; display: flex; align-items: center; justify-content: center; background-color: rgba(255, 255, 255, 0.7); z-index: 10; border-radius: var(--primer-radius-medium); backdrop-filter: blur(2px); opacity: 0; /* Start invisible */ } /* Add styles for when updating is active */ .is-updating { pointer-events: none; /* Prevent interaction when updating */ } /* * Component-specific styles to ensure smooth animations * These components need display:block to work with the grid layout */ primer-vault-payment-method-item, primer-vault-empty-state, primer-vault-delete-confirmation { display: block; width: 100%; } /* Disable animations for reduced motion preference */ @media (prefers-reduced-motion: reduce) { .content-container, .submit-button-container, primer-vault-payment-method-item, primer-vault-payment-submit, primer-vault-empty-state, primer-vault-delete-confirmation { transition: none; } } primer-button::part(button) { align-items: center; width: 100%; justify-content: flex-start; display: flex; text-align: left; padding: var(--primer-space-medium); } `;var{I:Wb}=ra;var Rn=i=>i.strings===void 0;var nr=(i,t)=>{let e=i._$AN;if(e===void 0)return!1;for(let r of e)r._$AO?.(t,!1),nr(r,t);return!0},ri=i=>{let t,e;do{if((t=i._$AM)===void 0)break;e=t._$AN,e.delete(i),i=t}while(e?.size===0)},On=i=>{for(let t;t=i._$AM;i=t){let e=t._$AN;if(e===void 0)t._$AN=e=new Set;else if(e.has(i))break;e.add(i),Nd(t)}};function Id(i){this._$AN!==void 0?(ri(this),this._$AM=i,On(this)):this._$AM=i}function kd(i,t=!1,e=0){let r=this._$AH,o=this._$AN;if(o!==void 0&&o.size!==0)if(t)if(Array.isArray(r))for(let a=e;a<r.length;a++)nr(r[a],!1),ri(r[a]);else r!=null&&(nr(r,!1),ri(r));else nr(this,i)}var Nd=i=>{i.type==Ie.CHILD&&(i._$AP??(i._$AP=kd),i._$AQ??(i._$AQ=Id))},dt=class extends st{constructor(){super(...arguments),this._$AN=void 0}_$AT(t,e,r){super._$AT(t,e,r),On(this),this.isConnected=t._$AU}_$AO(t,e=!0){t!==this.isConnected&&(this.isConnected=t,t?this.reconnected?.():this.disconnected?.()),e&&(nr(this,t),ri(this))}setValue(t){if(Rn(this._$Ct))this._$Ct._$AI(t,this);else{let e=[...this._$Ct._$AH];e[this._$Ci]=t,this._$Ct._$AI(e,this,0)}}disconnected(){}reconnected(){}};var ii=new WeakMap,Lt=class{constructor(t,e){this.startPaused=!1,this.disabled=!1,this.clients=new Set,this.pendingComplete=!1,this.host=t,this.defaultOptions=e.defaultOptions||{},this.startPaused=!!e.startPaused,this.disabled=!!e.disabled,this.onComplete=e.onComplete,ii.set(this.host,this)}async add(t){this.clients.add(t),this.startPaused&&t.webAnimation?.pause(),this.pendingComplete=!0,await t.finished,this.pendingComplete&&!this.isAnimating&&(this.pendingComplete=!1,this.onComplete?.())}remove(t){this.clients.delete(t)}pause(){this.clients.forEach(t=>t.webAnimation?.pause())}play(){this.clients.forEach(t=>t.webAnimation?.play())}cancel(){this.clients.forEach(t=>t.webAnimation?.cancel()),this.clients.clear()}finish(){this.clients.forEach(t=>t.webAnimation?.finish()),this.clients.clear()}togglePlay(){this.isPlaying?this.pause():this.play()}get isAnimating(){return this.clients.size>0}get isPlaying(){return Array.from(this.clients).some(t=>t.webAnimation?.playState==="running")}async finished(){await Promise.all(Array.from(this.clients).map(t=>t.finished))}};var Dn=0,co=new Map,$n=new WeakSet,po=()=>new Promise(i=>requestAnimationFrame(i));var Vn=(i,t)=>{let e=i-t;return e===0?void 0:e},Un=(i,t)=>{let e=i/t;return e===1?void 0:e},oi={left:(i,t)=>{let e=Vn(i,t);return{value:e,transform:e==null||isNaN(e)?void 0:`translateX(${e}px)`}},top:(i,t)=>{let e=Vn(i,t);return{value:e,transform:e==null||isNaN(e)?void 0:`translateY(${e}px)`}},width:(i,t)=>{let e;t===0&&(t=1,e={width:"1px"});let r=Un(i,t);return{value:r,overrideFrom:e,transform:r==null||isNaN(r)?void 0:`scaleX(${r})`}},height:(i,t)=>{let e;t===0&&(t=1,e={height:"1px"});let r=Un(i,t);return{value:r,overrideFrom:e,transform:r==null||isNaN(r)?void 0:`scaleY(${r})`}}},Hn={duration:333,easing:"ease-in-out"},Bn=["left","top","width","height","opacity","color","background"],Yn=new WeakMap,ai=class extends dt{constructor(t){if(super(t),this.t=!1,this.i=null,this.o=null,this.h=!0,this.shouldLog=!1,t.type===Ie.CHILD)throw Error("The `animate` directive must be used in attribute position.");this.createFinished()}createFinished(){this.resolveFinished?.(),this.finished=new Promise(t=>{this.l=t})}async resolveFinished(){this.l?.(),this.l=void 0}render(t){return f}getController(){return ii.get(this.u)}isDisabled(){return this.options.disabled||this.getController()?.disabled}update(t,[e]){let r=this.u===void 0;return r&&(this.u=t.options?.host,this.u.addController(this),this.u.updateComplete.then(o=>this.t=!0),this.element=t.element,Yn.set(this.element,this)),this.optionsOrCallback=e,(r||typeof e!="function")&&this.p(e),this.render(e)}p(t){t=t??{};let e=this.getController();e!==void 0&&((t={...e.defaultOptions,...t}).keyframeOptions={...e.defaultOptions.keyframeOptions,...t.keyframeOptions}),t.properties??(t.properties=Bn),this.options=t}m(){let t={},e=this.element.getBoundingClientRect(),r=getComputedStyle(this.element);return this.options.properties.forEach(o=>{let a=e[o]??(oi[o]?void 0:r[o]),n=Number(a);t[o]=isNaN(n)?a+"":n}),t}v(){let t,e=!0;return this.options.guard&&(t=this.options.guard(),e=((r,o)=>{if(Array.isArray(r)){if(Array.isArray(o)&&o.length===r.length&&r.every((a,n)=>a===o[n]))return!1}else if(o===r)return!1;return!0})(t,this._)),this.h=this.t&&!this.isDisabled()&&!this.isAnimating()&&e&&this.element.isConnected,this.h&&(this._=Array.isArray(t)?Array.from(t):t),this.h}hostUpdate(){typeof this.optionsOrCallback=="function"&&this.p(this.optionsOrCallback()),this.v()&&(this.A=this.m(),this.i=this.i??this.element.parentNode,this.o=this.element.nextSibling)}async hostUpdated(){if(!this.h||!this.element.isConnected||this.options.skipInitial&&!this.isHostRendered)return;let t;this.prepare(),await po;let e=this.O(),r=this.j(this.options.keyframeOptions,e),o=this.m();if(this.A!==void 0){let{from:a,to:n}=this.N(this.A,o,e);this.log("measured",[this.A,o,a,n]),t=this.calculateKeyframes(a,n)}else{let a=co.get(this.options.inId);if(a){co.delete(this.options.inId);let{from:n,to:l}=this.N(a,o,e);t=this.calculateKeyframes(n,l),t=this.options.in?[{...this.options.in[0],...t[0]},...this.options.in.slice(1),t[1]]:t,Dn++,t.forEach(s=>s.zIndex=Dn)}else this.options.in&&(t=[...this.options.in,{}])}this.animate(t,r)}resetStyles(){this.P!==void 0&&(this.element.setAttribute("style",this.P??""),this.P=void 0)}commitStyles(){this.P=this.element.getAttribute("style"),this.webAnimation?.commitStyles(),this.webAnimation?.cancel()}reconnected(){}async disconnected(){if(!this.h||(this.options.id!==void 0&&co.set(this.options.id,this.A),this.options.out===void 0))return;if(this.prepare(),await po(),this.i?.isConnected){let e=this.o&&this.o.parentNode===this.i?this.o:null;if(this.i.insertBefore(this.element,e),this.options.stabilizeOut){let r=this.m();this.log("stabilizing out");let o=this.A.left-r.left,a=this.A.top-r.top;getComputedStyle(this.element).position!=="static"||o===0&&a===0||(this.element.style.position="relative"),o!==0&&(this.element.style.left=o+"px"),a!==0&&(this.element.style.top=a+"px")}}let t=this.j(this.options.keyframeOptions);await this.animate(this.options.out,t),this.element.remove()}prepare(){this.createFinished()}start(){this.options.onStart?.(this)}didFinish(t){t&&this.options.onComplete?.(this),this.A=void 0,this.animatingProperties=void 0,this.frames=void 0,this.resolveFinished()}O(){let t=[];for(let e=this.element.parentNode;e;e=e?.parentNode){let r=Yn.get(e);r&&!r.isDisabled()&&r&&t.push(r)}return t}get isHostRendered(){let t=$n.has(this.u);return t||this.u.updateComplete.then(()=>{$n.add(this.u)}),t}j(t,e=this.O()){let r={...Hn};return e.forEach(o=>Object.assign(r,o.options.keyframeOptions)),Object.assign(r,t),r}N(t,e,r){t={...t},e={...e};let o=r.map(l=>l.animatingProperties).filter(l=>l!==void 0),a=1,n=1;return o.length>0&&(o.forEach(l=>{l.width&&(a/=l.width),l.height&&(n/=l.height)}),t.left!==void 0&&e.left!==void 0&&(t.left=a*t.left,e.left=a*e.left),t.top!==void 0&&e.top!==void 0&&(t.top=n*t.top,e.top=n*e.top)),{from:t,to:e}}calculateKeyframes(t,e,r=!1){let o={},a={},n=!1,l={};for(let s in e){let c=t[s],u=e[s];if(s in oi){let h=oi[s];if(c===void 0||u===void 0)continue;let b=h(c,u);b.transform!==void 0&&(l[s]=b.value,n=!0,o.transform=`${o.transform??""} ${b.transform}`,b.overrideFrom!==void 0&&Object.assign(o,b.overrideFrom))}else c!==u&&c!==void 0&&u!==void 0&&(n=!0,o[s]=c,a[s]=u)}return o.transformOrigin=a.transformOrigin=r?"center center":"top left",this.animatingProperties=l,n?[o,a]:void 0}async animate(t,e=this.options.keyframeOptions){this.start(),this.frames=t;let r=!1;if(!this.isAnimating()&&!this.isDisabled()&&(this.options.onFrames&&(this.frames=t=this.options.onFrames(this),this.log("modified frames",t)),t!==void 0)){this.log("animate",[t,e]),r=!0,this.webAnimation=this.element.animate(t,e);let o=this.getController();o?.add(this);try{await this.webAnimation.finished}catch{}o?.remove(this)}return this.didFinish(r),r}isAnimating(){return this.webAnimation?.playState==="running"||this.webAnimation?.pending}log(t,e){this.shouldLog&&this.isDisabled()}},ct=Ae(ai);var Ld=["top","right","bottom","left"],ni=class extends dt{constructor(t){if(super(t),t.type!==Ie.ELEMENT)throw Error("The `position` directive must be used in attribute position.")}render(t,e){return f}update(t,[e,r]){return this.u===void 0&&(this.u=t.options?.host,this.u.addController(this)),this.S=t.element,this.C=e,this.F=r??["left","top","width","height"],this.render(e,r)}hostUpdated(){this.$()}$(){let t=typeof this.C=="function"?this.C():this.C?.value,e=t.offsetParent;if(t===void 0||!e)return;let r=t.getBoundingClientRect(),o=e.getBoundingClientRect();this.F?.forEach(a=>{let n=Ld.includes(a)?r[a]-o[a]:r[a];this.S.style[a]=n+"px"})}},Rd=Ae(ni);var Q=class extends g{constructor(){super();this.vaultManagerContext=null;this.vaultItemContext=null;this.headlessUtils=null;this.isEditMode=!1;this.deletePaymentMethodId=null;this.isDeleting=!1;this.errorMessage="";this.animationDuration=300;this.deleteAssetConfig=null;this.handleToggleEditMode=e=>{this.isEditMode=e.detail,this.deletePaymentMethodId=null,this.isEditMode&&this.vaultItemContext&&this.vaultItemContext.setSelectedVaultedPaymentMethod(null)};this.handleDeletePaymentMethod=async e=>{if(this.deletePaymentMethodId=e.detail,this.deletePaymentMethodId&&this.vaultManagerContext&&this.headlessUtils){let r=this.vaultManagerContext.vaultedPaymentMethods.find(o=>o.id===this.deletePaymentMethodId);r&&(this.deleteAssetConfig=await ti(r,this.headlessUtils,this.vaultManagerContext))}};this.handleCancelDelete=()=>{this.deletePaymentMethodId=null,this.deleteAssetConfig=null};this.handleConfirmDelete=async()=>{if(!this.vaultManagerContext?.deleteVaultedPaymentMethod||!this.deletePaymentMethodId){this.errorMessage=S("something_went_wrong_error",{id:"something_went_wrong_error"});return}try{this.isDeleting=!0,await this.vaultManagerContext.deleteVaultedPaymentMethod(this.deletePaymentMethodId),this.deletePaymentMethodId=null,this.deleteAssetConfig=null}catch(e){this.errorMessage=e instanceof Error?e.message:S("something_went_wrong_error",{id:"something_went_wrong_error"})}finally{this.isDeleting=!1}};this.handlePaymentError=e=>{let r=e.detail?.error;this.errorMessage=r instanceof Error?r.message:S("payment_processing_error",{id:"payment_processing_error"})};this.handleCloseError=()=>{this.errorMessage=""};new Lt(this,{defaultOptions:{keyframeOptions:{duration:Number(getComputedStyle(document.documentElement).getPropertyValue("--primer-animation-duration").trim().replace("ms","")),easing:getComputedStyle(document.documentElement).getPropertyValue("--primer-animation-easing").trim()}}})}getAnimationConfig(){return{keyframeOptions:{duration:this.animationDuration,easing:getComputedStyle(document.documentElement).getPropertyValue("--primer-animation-easing").trim(),fill:"both"}}}getPaymentMethodName(e){if(!this.vaultManagerContext)return"";let r=this.vaultManagerContext.vaultedPaymentMethods.find(o=>o.id===e);if(!r)return"";try{return lo(r).description||""}catch{return""}}renderLoadingOverlay(){return m`<div class="loading-overlay" ${ct({...this.getAnimationConfig(),properties:["opacity"],in:[{opacity:0},{opacity:1}],out:[{opacity:1},{opacity:0}]})} ><primer-spinner size="medium" color="var(--primer-color-loader)" ></primer-spinner></div>`}renderDeleteConfirmation(){if(!this.deletePaymentMethodId||!this.deleteAssetConfig)return f;let e=this.getPaymentMethodName(this.deletePaymentMethodId);return m`<div class="delete-confirmation-container"><primer-button disabled variant="secondary"><primer-payment-method-content .assetConfig=${this.deleteAssetConfig} ></primer-payment-method-content></primer-button><primer-vault-delete-confirmation .isDeleting=${this.isDeleting} .paymentMethodId=${this.deletePaymentMethodId} .paymentMethodName=${e} @confirm-delete=${this.handleConfirmDelete} @cancel-delete=${this.handleCancelDelete} ${ct({...this.getAnimationConfig(),properties:["opacity"],in:[{opacity:0},{opacity:1}],out:[{opacity:1},{opacity:0}]})} ></primer-vault-delete-confirmation></div>`}renderPaymentMethodItem(e){return this.deletePaymentMethodId===e.id?f:m`<primer-vault-payment-method-item .paymentMethod=${e} .isEditMode=${this.isEditMode} @delete-payment-method=${this.handleDeletePaymentMethod} ${ct({...this.getAnimationConfig(),properties:["opacity"],in:[{opacity:0},{opacity:1}],out:[{opacity:1},{opacity:0}]})} ></primer-vault-payment-method-item>`}renderPaymentMethodList(){let e=this.vaultManagerContext?.vaultedPaymentMethods||[],r=!this.isEditMode&&e.length>0&&!this.deletePaymentMethodId;return m`<div class="payment-methods-list">${e.map(o=>this.renderPaymentMethodItem(o))} ${R(r,()=>m`<div class="submit-button-container"><primer-vault-payment-submit class="submit-button" @primer-vault-payment-error=${this.handlePaymentError} ${ct({...this.getAnimationConfig(),properties:["opacity"],in:[{opacity:0},{opacity:1}],out:[{opacity:1},{opacity:0}]})} ></primer-vault-payment-submit></div>`,()=>f)}</div>`}render(){if(!this.vaultManagerContext?.enabled)return f;let e=this.vaultManagerContext.vaultedPaymentMethods.length>0,r=this.vaultManagerContext.isLoading,o=this.vaultManagerContext.isUpdating;return m` ${R(!this.vaultManagerContext?.showEmptyState&&!e,()=>f,()=>m`<slot name="vault-empty-state"><div class="vault-manager ${o?"is-updating":""}"><primer-vault-manager-header .isEditMode=${this.isEditMode} .hasPaymentMethods=${e} @toggle-edit-mode=${this.handleToggleEditMode} ></primer-vault-manager-header>${R(this.errorMessage,()=>m`<primer-vault-error-message .errorMessage=${this.errorMessage} @close-error=${this.handleCloseError} ${ct({...this.getAnimationConfig(),properties:["opacity"],in:[{opacity:0},{opacity:1}],out:[{opacity:1},{opacity:0}]})} ></primer-vault-error-message>`,()=>f)}<div class="vault-manager-content">${R(!r&&!e,()=>m`<div class="content-container"><primer-vault-empty-state ${ct({...this.getAnimationConfig(),properties:["opacity"],in:[{opacity:0},{opacity:1}],out:[{opacity:1},{opacity:0}]})} ></primer-vault-empty-state></div>`,()=>f)} ${R(!r&&e,()=>m`<div class="content-container">${R(this.deletePaymentMethodId,()=>this.renderDeleteConfirmation(),()=>this.renderPaymentMethodList())}</div>`,()=>f)}</div>${R(o,()=>this.renderLoadingOverlay(),()=>f)}</div></slot>`)} `}};Q.styles=[P,Ln],d([C({context:le,subscribe:!0}),p({type:Object,attribute:!1})],Q.prototype,"vaultManagerContext",2),d([C({context:Te,subscribe:!0}),p({type:Object,attribute:!1})],Q.prototype,"vaultItemContext",2),d([C({context:B,subscribe:!0}),p({type:Object,attribute:!1})],Q.prototype,"headlessUtils",2),d([M()],Q.prototype,"isEditMode",2),d([M()],Q.prototype,"deletePaymentMethodId",2),d([M()],Q.prototype,"isDeleting",2),d([M()],Q.prototype,"errorMessage",2),d([p({type:Number})],Q.prototype,"animationDuration",2),d([M()],Q.prototype,"deleteAssetConfig",2),Q=d([v("primer-vault-manager"),k()],Q);var Fn=y` :host { display: flex; width: 100%; flex-direction: column; } .payment-method-wrapper { display: flex; flex-direction: column; width: 100%; } .payment-method-container { display: flex; width: 100%; align-items: center; gap: var(--primer-space-small); } /* Target the button part from primer-button with 'with-cvv' class using ::part selector */ primer-button::part(button) { align-items: center; width: 100%; justify-content: flex-start; display: flex; text-align: left; padding: var(--primer-space-medium); } /* render checkmark icon on baseline (on the top) */ primer-button.with-cvv::part(button) { align-items: baseline; } /* Card icons */ .payment-method-icon { height: var(--primer-space-xlarge); object-fit: contain; flex-shrink: 0; transition: transform var(--primer-animation-duration) var(--primer-animation-easing); } .payment-method-icon-generic { display: flex; align-items: center; justify-content: center; color: var(--primer-color-gray-500); height: var(--primer-space-xlarge); flex-shrink: 0; } .payment-method-details { flex: 1; display: flex; gap: var(--primer-space-xsmall); align-items: flex-start; transition: transform var(--primer-animation-duration) var(--primer-animation-easing); margin-left: var(--primer-space-small); } .payment-method-card { flex: 1; width: 100%; display: flex; flex-direction: column; gap: var(--primer-space-xsmall); transition: transform var(--primer-animation-duration) var(--primer-animation-easing); } .payment-method-description { font-weight: var(--primer-typography-title-large-weight); color: var(--primer-color-text-primary); transition: color var(--primer-animation-duration) var(--primer-animation-easing); } .payment-method-secondary-description { font-size: var(--primer-typography-body-small-size); color: var(--primer-color-text-secondary); transition: color var(--primer-animation-duration) var(--primer-animation-easing); } .payment-method-row { display: grid; grid-template-columns: 200px 100px; justify-content: space-between; align-items: center; } .cell-2 { grid-column: 2; display: flex; justify-content: flex-end; align-items: center; } .mt-2 { margin-top: var(--primer-space-medium); } .payment-method-header { font-weight: var(--primer-typography-body-large-weight); font-size: var(--primer-typography-body-large-size); line-height: var(--primer-typography-body-large-line-height); color: var(--primer-color-text-primary); letter-spacing: var(--primer-typography-body-large-letter-spacing); } .payment-method-subtitle { color: var(--primer-color-text-secondary); font-size: var(--primer-typography-body-small-size); line-height: var(--primer-typography-body-small-line-height); font-weight: var(--primer-typography-body-small-weight); letter-spacing: var(--primer-typography-body-small-letter-spacing); } .payment-method-button { flex: 1; } .flex { display: flex; align-items: flex-end; gap: var(--primer-space-xsmall); } .flex-center { display: flex; align-items: center; justify-content: center; gap: var(--primer-space-small); } /* Delete button - for edit mode */ .delete-button { display: flex; align-items: center; justify-content: center; } .delete-button:active { transform: scale(0.95); } `;var pe=class extends g{constructor(){super(...arguments);this.vaultManagerContext=null;this.vaultItemContext=null;this.headlessUtils=null;this.paymentMethod=null;this.isEditMode=!1;this._getAssetsTask=new D(this,{task:async([e,r,o])=>await ti(e,r,o),args:()=>[this.paymentMethod,this.headlessUtils,this.vaultManagerContext]});this.handleClick=()=>{this.isEditMode||!this.vaultManagerContext||!this.paymentMethod||(this.isSelected()?this.vaultItemContext?.setSelectedVaultedPaymentMethod(null):this.vaultItemContext?.setSelectedVaultedPaymentMethod(this.paymentMethod))};this.handleDeleteClick=e=>{e.stopPropagation(),this.dispatchEvent(new CustomEvent("delete-payment-method",{detail:this.paymentMethod?.id,bubbles:!0,composed:!0}))}}isSelected(){if(!this.vaultManagerContext||!this.paymentMethod)return!1;let e=this.vaultItemContext?.selectedVaultedPaymentMethod;return!!e&&e.id===this.paymentMethod.id}render(){return this._getAssetsTask.render({error:()=>f,complete:e=>{let r=this.isSelected()?"checked":"default",o=!1,a=e?.description;return m`<div class="payment-method-wrapper"><div class="payment-method-container"><primer-button variant="secondary" class="payment-method-button ${e.shouldShowCVV?"with-cvv":""}" selectable ?disabled=${this.isEditMode} selectionState=${r} .flex=${o} @click=${this.handleClick} ><primer-payment-method-content .assetConfig=${e} ></primer-payment-method-content>${R(e.shouldShowCVV&&this.isSelected()&&!this.isEditMode,()=>m`<div class="payment-method-row mt-2"><span class="flex-center"><primer-icon name="lock" size="sm"></primer-icon><span class="payment-method-subtitle"> Input the card CVV for a secure payment</span ></span><span class="cell-2"><primer-vault-cvv-input .paymentMethod="${this.paymentMethod}" ><span slot="label"></span></primer-vault-cvv-input></span></div>`,()=>f)}</primer-button>${this.isEditMode?m`<primer-button variant="tertiary" class="delete-button" @click=${this.handleDeleteClick} aria-label=${`${S("delete",{id:"delete"})} ${a}`} ><primer-icon name="close" size="sm"></primer-icon></primer-button>`:f}</div></div>`}})}};pe.styles=[P,Fn],d([C({context:le,subscribe:!0}),p({type:Object,attribute:!1,hasChanged(e,r){return e?.cvvRecapture!==r?.cvvRecapture}})],pe.prototype,"vaultManagerContext",2),d([C({context:Te,subscribe:!0}),p({type:Object,attribute:!1,hasChanged(e,r){return e?.selectedVaultedPaymentMethod?.id!==r?.selectedVaultedPaymentMethod?.id}})],pe.prototype,"vaultItemContext",2),d([C({context:B,subscribe:!0}),p({type:Object})],pe.prototype,"headlessUtils",2),d([p({type:Object,attribute:!1})],pe.prototype,"paymentMethod",2),d([p({type:Boolean,reflect:!0})],pe.prototype,"isEditMode",2),pe=d([v("primer-vault-payment-method-item"),k()],pe);var zn=y` :host { display: block; width: 100%; } .vault-manager-header { display: flex; justify-content: space-between; align-items: center; margin-bottom: var(--primer-space-medium); } .vault-manager-header h3 { font-size: var(--primer-typography-title-large-size); font-weight: var(--primer-typography-title-large-weight); font-family: var(--primer-typography-title-large-font); color: var(--primer-color-text-primary); margin: 0; } .edit-button { display: flex; align-items: center; justify-content: center; } `;var _e=class extends g{constructor(){super(...arguments);this.isEditMode=!1;this.hasPaymentMethods=!1;this.toggleEditMode=()=>{this.dispatchEvent(new CustomEvent("toggle-edit-mode",{detail:!this.isEditMode,bubbles:!0,composed:!0}))}}render(){return m`<div class="vault-manager-header"><h3>${S("previouslyUsed",{id:"previouslyUsed"})}</h3>${this.hasPaymentMethods?m`<primer-button variant="tertiary" class="edit-button ${this.isEditMode?"active":""}" @click=${this.toggleEditMode} aria-label=${this.isEditMode?S("confirm",{id:"confirm"}):S("editPaymentMethods",{id:"editPaymentMethods"})} >${this.isEditMode?m`<primer-icon name="checkmark" size="sm"></primer-icon>`:m`<primer-icon name="edit" size="sm"></primer-icon>`}</primer-button>`:f}</div>`}};_e.styles=[P,zn],d([p({type:Boolean})],_e.prototype,"isEditMode",2),d([p({type:Boolean})],_e.prototype,"hasPaymentMethods",2),_e=d([v("primer-vault-manager-header"),k()],_e);var jn=y` :host { display: block; width: 100%; } .delete-confirmation-text { color: var(--primer-color-text-secondary); font-size: var(--primer-typography-body-small-size); font-weight: var(--primer-typography-body-small-weight); line-height: var(--primer-typography-body-small-line-height); letter-spacing: var(--primer-typography-body-small-letter-spacing); } .delete-confirmation { margin-top: var(--primer-space-medium); background-color: var(--primer-color-gray-000); } .delete-message { margin-bottom: var(--primer-space-medium); } .delete-text { margin: 0; color: var(--primer-color-text-secondary); font-size: var(--primer-typography-body-medium-size); } .delete-actions { display: grid; grid-template-columns: 1fr 1fr; gap: var(--primer-space-small); } .delete-confirm { background-color: var(--primer-color-red-500); color: var(--primer-color-gray-000); border: none; padding: var(--primer-space-small) var(--primer-space-medium); border-radius: var(--primer-radius-small); font-weight: var(--primer-typography-body-medium-weight); cursor: pointer; transition: background-color var(--primer-animation-duration) var(--primer-animation-easing); } .delete-confirm:hover:not(:disabled) { background-color: var(--primer-color-red-900); } .delete-confirm:disabled { opacity: 0.7; cursor: not-allowed; } .delete-cancel { background-color: transparent; border: 1px solid var(--primer-color-border-outlined-default); padding: var(--primer-space-small) var(--primer-space-medium); border-radius: var(--primer-radius-small); color: var(--primer-color-text-primary); font-weight: var(--primer-typography-body-medium-weight); cursor: pointer; transition: background-color var(--primer-animation-duration) var(--primer-animation-easing); } .delete-cancel:hover:not(:disabled) { background-color: var(--primer-color-gray-100); } .delete-cancel:disabled { opacity: 0.7; cursor: not-allowed; } `;var fe=class extends g{constructor(){super(...arguments);this.isDeleting=!1;this.paymentMethodId="";this.paymentMethodName="";this.vaultManager=null;this.handleConfirmClick=()=>{this.dispatchEvent(new CustomEvent("confirm-delete",{bubbles:!0,composed:!0}))};this.handleCancelClick=()=>{this.dispatchEvent(new CustomEvent("cancel-delete",{bubbles:!0,composed:!0}))}}render(){return m`<div class="delete-confirmation"><p class="delete-confirmation-text"> Are you sure you want to delete this payment method? </p><div class="delete-actions"><primer-button variant="secondary" @click=${this.handleCancelClick} ?disabled=${this.isDeleting} >${S("cancel",{id:"cancel"})}</primer-button><primer-button @click=${this.handleConfirmClick} ?disabled=${this.isDeleting} >${this.isDeleting?S("deleting",{id:"deleting"}):S("confirmVaultedPaymentMethodDeletion",{id:"confirmVaultedPaymentMethodDeletion"})}</primer-button></div></div>`}};fe.styles=[P,jn],d([p({type:Boolean})],fe.prototype,"isDeleting",2),d([p({type:String})],fe.prototype,"paymentMethodId",2),d([p({type:String})],fe.prototype,"paymentMethodName",2),d([C({context:le,subscribe:!0})],fe.prototype,"vaultManager",2),fe=d([v("primer-vault-delete-confirmation"),k()],fe);var Kn=y` :host { display: block; width: 100%; } .empty-state { padding: var(--primer-space-xlarge) 0; text-align: center; color: var(--primer-color-text-secondary); } .empty-state p { margin: 0; } `;var ze=class extends g{render(){return m`<div class="empty-state"><p>${S("savedPaymentMethodsEmpty",{id:"savedPaymentMethodsEmpty"})}</p></div>`}};ze.styles=[P,Kn],ze=d([v("primer-vault-empty-state"),k()],ze);var Gn=y` :host { display: block; width: 100%; } .error-message { display: flex; background-color: var(--primer-color-red-100); padding: var(--primer-space-medium); border-radius: var(--primer-radius-small); margin-bottom: var(--primer-space-medium); justify-content: space-between; align-items: center; border: 1px solid var(--primer-color-red-500); } .error-content { display: flex; align-items: center; gap: var(--primer-space-small); } .error-message p { margin: 0; color: var(--primer-color-text-negative); font-size: var(--primer-typography-body-medium-size); } .error-message button { background: transparent; border: none; color: var(--primer-color-text-negative); cursor: pointer; padding: var(--primer-space-xsmall); display: flex; align-items: center; justify-content: center; border-radius: var(--primer-radius-small); transition: background-color var(--primer-animation-duration) var(--primer-animation-easing); } .error-message button:hover { background-color: rgba(0, 0, 0, 0.05); } `;var Oe=class extends g{constructor(){super(...arguments);this.errorMessage="";this.handleDismiss=()=>{this.dispatchEvent(new CustomEvent("close-error",{bubbles:!0,composed:!0}))}}render(){return m`<div class="error-message"><div class="error-content"><primer-icon name="warning" size="sm" color="var(--primer-color-red-500)" ></primer-icon><p>${this.errorMessage}</p></div><button @click=${this.handleDismiss} aria-label=${S("closeErrorMessage",{id:"closeErrorMessage"})} ><primer-icon name="close" size="sm"></primer-icon></button></div>`}};Oe.styles=[P,Gn],d([p({type:String})],Oe.prototype,"errorMessage",2),Oe=d([v("primer-vault-error-message"),k()],Oe);var qn=y` :host { display: contents; } `;var W=class extends g{constructor(){super(...arguments);this._userAssignedProps=new Set;this._internalButtonText="";this.headlessInstance=null;this.sdkState=null;this.vaultItemContext=null;this.vaultManager=null;this.clientOptions=null;this.variant="primary";this.disabled=!1;this.handleClick=async e=>{if(e.preventDefault(),!this.isButtonDisabled)try{await this.vaultManager?.startVaultedPaymentFlow()}catch(r){let o=new CustomEvent("primer-vault-payment-error",{bubbles:!0,composed:!0,detail:{error:r}});this.dispatchEvent(o)}}}get buttonText(){return this._userAssignedProps.has("buttonText")?this._internalButtonText:S("pay",{id:"pay"})}set buttonText(e){let r=this.buttonText;e!==""?(this._userAssignedProps.add("buttonText"),this._internalButtonText=e):(this._userAssignedProps.delete("buttonText"),this._internalButtonText=""),this.requestUpdate("buttonText",r)}get isButtonDisabled(){return!!(this.disabled||!this.vaultItemContext?.selectedVaultedPaymentMethod||this.vaultManager?.isLoading)}render(){let e=this.clientOptions?.submitButton?.amountVisible?this.headlessInstance?.getUIOrderAmount():null,r=e?` ${e}`:f;return m`<primer-button buttonType="submit" variant=${this.variant} @click=${this.handleClick} .disabled=${this.isButtonDisabled} .loading=${this.sdkState?.isProcessing} data-submit >${this.buttonText}${r}</primer-button>`}};W.styles=[P,qn],d([p({type:String})],W.prototype,"buttonText",1),d([C({context:B,subscribe:!0}),p({type:Object})],W.prototype,"headlessInstance",2),d([C({context:F,subscribe:!0}),p()],W.prototype,"sdkState",2),d([C({context:Te,subscribe:!0}),p({type:Object,attribute:!1,hasChanged(e,r){return e?.selectedVaultedPaymentMethod?.id!==r?.selectedVaultedPaymentMethod?.id}})],W.prototype,"vaultItemContext",2),d([C({context:le,subscribe:!0}),p({type:Object,attribute:!1})],W.prototype,"vaultManager",2),d([C({context:ne,subscribe:!0}),p({type:Object,attribute:!1,hasChanged(e,r){return e?.submitButton?.amountVisible!==r?.submitButton?.amountVisible}})],W.prototype,"clientOptions",2),d([p({type:String})],W.prototype,"variant",2),d([p({type:Boolean})],W.prototype,"disabled",2),W=d([v("primer-vault-payment-submit"),k()],W);function si(i){return i?{paddingHorizontal:0,placeholder:{color:i.getPropertyValue("--primer-color-text-placeholder").trim(),fontSize:i.getPropertyValue("--primer-typography-body-large-size").trim(),fontFamily:i.getPropertyValue("--primer-typography-body-large-font").trim()},height:i.getPropertyValue("--primer-typography-body-large-line-height").trim(),fontSize:i.getPropertyValue("--primer-typography-body-large-size").trim(),fontFamily:i.getPropertyValue("--primer-typography-body-large-font").trim(),color:i.getPropertyValue("--primer-color-text-primary").trim()}:null}var Wn=y` :host { display: block; margin-top: var(--primer-space-medium); } .cvv-input-container { margin-bottom: var(--primer-space-medium); } `;var j=class extends g{constructor(){super();this.vaultManagerFormContext=null;this.vaultManagerCvvContext=null;this.computedStyles=null;this.paymentMethod=null;this.cvvError=null;this.cvvInputIsDirty=!1;this.cvvInputIsBlurred=!1;this.cvvInput=null;this.isFocused=!1;this._setupCVVIframe=new D(this,{task:([e,r])=>!e||!r||e.paymentMethodType!=="PAYMENT_CARD"||!e.paymentInstrumentData?.network||r.createCvvInput===null?L:{network:e.paymentInstrumentData.network,createCvvInput:r.createCvvInput},args:()=>[this.paymentMethod,this.vaultManagerFormContext]});this.cvvContainerId=`cvv-container-${Math.random().toString(36).substring(2,9)}`,new D(this,{task:async([e])=>{if(!e)return L;await this.updateComplete;let r=this.renderRoot.querySelector(`#${this.cvvContainerId}`);if(!r)return;let o=si(this.computedStyles),a=o?{input:{base:o}}:void 0,n={cardNetwork:e.network,container:r,name:"cvv",placeholder:"123",style:a};this.cvvInput=await e.createCvvInput?.(n)??null,this.cvvInput&&(this.cvvInput.focus(),this.cvvError=this.cvvInput.metadata.error||null,this.vaultManagerCvvContext?.setCvvInput(this.cvvInput),this.cvvInput.addListener("change",()=>{this.onCvvInputChange()}),this.cvvInput.addListener("blur",()=>{this.onBlur()}),this.cvvInput.addListener("focus",()=>{this.onFocus()}))},args:()=>[this._setupCVVIframe.value]})}disconnectedCallback(){super.disconnectedCallback(),this.cvvInput&&(this.cvvInput.remove(),this.cvvInput=null,this.cvvError=null,this.vaultManagerCvvContext?.setCvvInput(null))}onCvvInputChange(){!this.cvvInput||!this.vaultManagerCvvContext||(this.cvvInputIsDirty=!0,this.cvvError=this.cvvInput.metadata.error||null)}onBlur(){this.cvvInput&&(this.cvvInputIsBlurred=!0,this.cvvError=this.cvvInput.metadata.error||null,this.isFocused=!1)}onFocus(){this.isFocused=!0}render(){return this._setupCVVIframe.render({error:()=>f,complete:()=>m`<div class="cvv-input-container"><primer-input-wrapper .focusWithin=${this.isFocused} .hasError=${!!this.cvvError&&(this.vaultManagerCvvContext?.formIsDirty||this.cvvInputIsDirty&&this.cvvInputIsBlurred)} ><slot name="label" slot="label"><primer-input-label>CVV</primer-input-label></slot><div slot="input" id="${this.cvvContainerId}"></div>${R(this.cvvError&&(this.vaultManagerCvvContext?.formIsDirty||this.cvvInputIsDirty&&this.cvvInputIsBlurred),()=>m`<primer-input-error slot="error">${this.cvvError}</primer-input-error>`)}</primer-input-wrapper></div>`})}};j.styles=[P,Wn],d([C({context:le,subscribe:!0}),p({type:Object,attribute:!1,hasChanged(e,r){return e?.createCvvInput!==r?.createCvvInput}})],j.prototype,"vaultManagerFormContext",2),d([C({context:Te,subscribe:!0}),p({type:Object,attribute:!1})],j.prototype,"vaultManagerCvvContext",2),d([C({context:Qe,subscribe:!0}),p()],j.prototype,"computedStyles",2),d([p({type:Object})],j.prototype,"paymentMethod",2),d([M()],j.prototype,"cvvError",2),d([M()],j.prototype,"cvvInputIsDirty",2),d([M()],j.prototype,"cvvInputIsBlurred",2),d([M()],j.prototype,"cvvInput",2),d([M()],j.prototype,"isFocused",2),j=d([v("primer-vault-cvv-input"),k()],j);var Jn=y` :host { display: flex; width: 100%; align-items: center; } /* Card icons */ .payment-method-icon { height: var(--primer-space-xlarge); object-fit: contain; flex-shrink: 0; transition: transform var(--primer-animation-duration) var(--primer-animation-easing); } .payment-method-icon-generic { display: flex; align-items: center; justify-content: center; color: var(--primer-color-gray-500); height: var(--primer-space-xlarge); flex-shrink: 0; } .payment-method-details { flex: 1; display: flex; flex-direction: column; gap: var(--primer-space-xsmall); align-items: flex-start; transition: transform var(--primer-animation-duration) var(--primer-animation-easing); margin-left: var(--primer-space-small); } .payment-method-card { flex: 1; width: 100%; display: flex; flex-direction: column; gap: var(--primer-space-xsmall); transition: transform var(--primer-animation-duration) var(--primer-animation-easing); } .payment-method-description { font-weight: var(--primer-typography-title-large-weight); color: var(--primer-color-text-primary); transition: color var(--primer-animation-duration) var(--primer-animation-easing); } .payment-method-secondary-description { font-size: var(--primer-typography-body-small-size); color: var(--primer-color-text-secondary); transition: color var(--primer-animation-duration) var(--primer-animation-easing); } .payment-method-row { display: grid; grid-template-columns: 200px 100px; justify-content: space-between; align-items: center; } .cell-2 { grid-column: 2; display: flex; justify-content: flex-end; align-items: center; } .payment-method-header { font-weight: var(--primer-typography-body-large-weight); font-size: var(--primer-typography-body-large-size); line-height: var(--primer-typography-body-large-line-height); color: var(--primer-color-text-primary); letter-spacing: var(--primer-typography-body-large-letter-spacing); } .payment-method-subtitle { color: var(--primer-color-text-secondary); font-size: var(--primer-typography-body-small-size); line-height: var(--primer-typography-body-small-line-height); font-weight: var(--primer-typography-body-small-weight); letter-spacing: var(--primer-typography-body-small-letter-spacing); } .flex { display: flex; align-items: flex-end; gap: var(--primer-space-xsmall); } .payment-method-card-other { width: 100%; display: grid; grid-template-columns: 1fr auto; gap: var(--primer-space-medium); align-items: center; justify-content: space-between; } .payment-method-right-column-text { font-size: var(--primer-typography-body-medium-size); font-weight: var(--primer-typography-body-medium-weight); line-height: var(--primer-typography-body-medium-line-height); letter-spacing: var(--primer-typography-body-medium-letter-spacing); } `;var De=class extends g{constructor(){super(...arguments);this.assetConfig=null}render(){if(!this.assetConfig)return f;let e=this.assetConfig.description,r=this.assetConfig.icon,o=R(this.assetConfig.icon,()=>m`<img class="payment-method-icon" src=${r} alt=${e} />`,()=>m`<div class="payment-method-icon payment-method-icon-generic"><primer-icon name="payment-card" size="sm"></primer-icon></div>`);return this.assetConfig.type==="other"&&this.assetConfig.paymentMethodType!=="ACH"?m`<div class="payment-method-card-other"><div class="left-column"><div class="payment-method-header">${this.assetConfig.fullName}</div><div class="flex">${o}<span class="payment-method-subtitle" >${this.assetConfig.paymentMethodType}</span ></div></div><div class="payment-method-right-column-text">${this.assetConfig.email||`\u2022\u2022\u2022\u2022 ${this.assetConfig.last4}`}</div></div>`:this.assetConfig.type==="other"&&this.assetConfig.paymentMethodType==="ACH"?m`<span class="payment-method-card"><div class="payment-method-row"><span class="payment-method-header" >${this.assetConfig.fullName}</span ><span class="payment-method-header cell-2" >•••• ${this.assetConfig.last4}</span ></div><div class="payment-method-row"><span class="flex">${o}<span class="payment-method-subtitle" >${this.assetConfig.bankName}</span ></span><span class="payment-method-subtitle cell-2" >${this.assetConfig.accountType}</span ></div></span>`:this.assetConfig.type==="card"?m`<span class="payment-method-card"><div class="payment-method-row"><span class="payment-method-header" >${this.assetConfig.cardholderName}</span ><span class="payment-method-header cell-2" >•••• ${this.assetConfig.last4}</span ></div><div class="payment-method-row"><span class="flex">${o}<span class="payment-method-subtitle" >${this.assetConfig.network}</span ></span><span class="payment-method-subtitle cell-2" >${this.assetConfig.expiresDate}</span ></div></span>`:f}};De.styles=[P,Jn],d([p({type:Object,attribute:!1})],De.prototype,"assetConfig",2),De=d([v("primer-payment-method-content")],De);var Rt="card-form-context";function Zn(i,t){if(i.style.cssText="width: 100%; flex:1; padding: 0; border: none; height: var(--primer-typography-body-large-line-height); font-size: var(--primer-typography-body-large-size); font-family: var(--primer-typography-body-large-font); color: var(--primer-color-text-primary); background-color: transparent; outline: none;",i.setAttribute("data-custom-input",""),!t.shadowRoot?.querySelector("style[data-custom-input-style]")){let e=document.createElement("style");e.setAttribute("data-custom-input-style",""),e.textContent=`
|
|
190
190
|
input[data-custom-input]::placeholder {
|
|
191
191
|
color: var(--primer-color-text-placeholder);
|
|
192
192
|
font-size: var(--primer-typography-body-large-size);
|
|
@@ -195,7 +195,7 @@ primer-checkout:not([js-initialized]):not([loader-disabled])::after {
|
|
|
195
195
|
input[data-custom-input]:focus {
|
|
196
196
|
outline: none;
|
|
197
197
|
}
|
|
198
|
-
`,t.shadowRoot?t.shadowRoot.appendChild(e):t.appendChild(e)}}function Xn(i,t){return i.active!==t.active||i.dirty!==t.dirty||i.error!==t.error||i.errorCode!==t.errorCode||i.submitted!==t.submitted||i.touched!==t.touched||i.valid!==t.valid}var li=class{constructor(t,e){this._meta={active:!1,dirty:!1,error:null,errorCode:null,submitted:!1,touched:!1,valid:!1};this._hostedInput=null;this._standardInput=null;this.host=t,this.config=e,this.host.addController(this),this.setupTask=new D(this.host,{args:()=>[this.getHostedInput()],task:this.setupHostedInput.bind(this)}),this.host.addEventListener("wrapper-click",()=>{this.focusInput()})}focusInput(){this._hostedInput?this._hostedInput.focus():this._standardInput&&this._standardInput.focus()}notifyUserInteraction(){let t=this.host.cardFormContext;t?.onUserInteraction&&t.onUserInteraction()}getHostedInput(){let{type:t}=this.config,e=this.host.cardFormContext;return e?{cardNumber:e.cardNumberInput,cvv:e.cvvInput,expire:e.expiryInput,cardholderName:e.cardholderNameInput??"cardholderName"}[t]:void 0}async setupHostedInput([t]){if(!t)return L;await this.host.updateComplete;let e=this.getTargetContainer();return e?t==="cardholderName"?this.setupStandardInput(e):this.setupHostedIframeInput(t,e):L}getTargetContainer(){return this.host.renderRoot.querySelector(this.config.containerSelector)}setupStandardInput(t){let e=document.createElement("input");return e.type="text",e.placeholder=this.host.placeholder,Zn(e,this.host),(this.host.ariaLabel||this.host.label)&&e.setAttribute("aria-label",this.host.ariaLabel??this.host.label),this.setupInputEventListeners(e),t.innerHTML="",t.appendChild(e),this._standardInput=e,!0}setupInputEventListeners(t){t.addEventListener("input",e=>{let r=e.target,a=!!r.value.trim();this.notifyUserInteraction(),this._meta={...this._meta,dirty:a},this.config.onInput?.(r.value),this.host.requestUpdate()}),t.addEventListener("focus",()=>{this.notifyUserInteraction(),this._meta.active=!0,this.host.requestUpdate()}),t.addEventListener("blur",()=>{this._meta.active=!1,this._meta.touched=!1,this.host.requestUpdate()})}async setupHostedIframeInput(t,e){await new Promise(a=>requestAnimationFrame(()=>a())),this._hostedInput=t;let r=si(this.host.computedStyles),o=r?{style:{input:{base:r}}}:void 0;return t.addEventListener("focus",()=>{this.notifyUserInteraction(),this._meta.active=!0,this.host.requestUpdate()}),t.addEventListener("blur",()=>{this._meta.active=!1,this.host.requestUpdate()}),t.addEventListener("change",a=>{this.notifyUserInteraction();let n=a;Xn(this._meta,n)&&(this._meta={...this._meta,...n},this.host.requestUpdate())}),await t.render(e,{placeholder:this.host.placeholder,ariaLabel:this.host.ariaLabel,...o}),!0}get meta(){return this._meta}updateMetaFromValidation(t){this._meta={...this._meta,valid:!!t.valid,error:t.error||null,errorCode:t.errorCode||null},this.host.requestUpdate()}setSubmitted(t){this._meta={...this._meta,submitted:t,...t&&{touched:!0}},this.host.requestUpdate()}hostConnected(){this.registerWithContext()}hostDisconnected(){this.unregisterFromContext(),this._hostedInput=null,this._standardInput=null}registerWithContext(){let t=this.host.cardFormContext;t?.registerInputController&&t.registerInputController(this.config.type,this)}unregisterFromContext(){let t=this.host.cardFormContext;t?.unregisterInputController&&t.unregisterInputController(this.config.type)}};var Qn=y` :host { display: contents; } form { display: flex; flex-direction: column; gap: var(--primer-space-medium); width: 100%; } .card-form { display: flex; flex-direction: column; gap: var(--primer-space-medium); margin-bottom: var(--primer-space-medium); } .card-form-row { display: flex; gap: var(--primer-space-small); } `;var es={cardholderName:"cardholderName",cardNumber:"cardNumber",cardExpiryDate:"expire",expiryDate:"expire",cardSecurityCode:"cvv",cvv:"cvv"},ee=class extends g{constructor(){super(...arguments);this.hideLabels=!1;this.disabled=!1;this.hasAssignedContent=!1;this.selectedCardNetwork=null;this.paymentMethodSelectionSent=!1;this.paymentManagers=new Map;this.clientOptions=null;this.headlessUtils=null;this.analyticsUtils=null;this.contextEventsController=null;this.cardFormProvider=new F(this,{context:Rt,initialValue:null});this.eventsController=new Pt(this);this._contextCardSubmitListener=null;this._isHandlingContextEvent=!1;this.inputControllers=new Map;this.setupCardFormTask=new D(this,{task:([e])=>{if(!e?.manager)return L;let{manager:r}=e,o=r.createHostedInputs(),{cardNumberInput:a,expiryInput:n,cvvInput:l}=o;return this.cardFormProvider.setValue({cardholderNameInput:o.cardholderNameInput,cardNumberInput:a,expiryInput:n,cvvInput:l,setCardholderName:s=>{r.setCardholderName(s),this.shouldRequireCardholderName&&r.validate?.().then(c=>{let h=c?.validationErrors?.find(E=>E.name===es.cardholderName),b=this.inputControllers.get("cardholderName");b&&b.updateMetaFromValidation({valid:!1,error:h?.message||h?.error||null,errorCode:h?.message||h?.error||null})})},setCardNetwork:s=>{this.selectedCardNetwork=s},validate:()=>r.validate(),submit:s=>r.submit(s),hideLabels:this.hideLabels,disabled:this.disabled,setSubmissionState:s=>{this.inputControllers.forEach(c=>{c.setSubmitted(s)})},propagateValidationErrors:s=>{s&&s.forEach(c=>{let u=c.field||c.name,h=c.message||c.error,b=es[u];if(b){let E=this.inputControllers.get(b);if(E){let A={valid:!1,error:h,errorCode:h};E.updateMetaFromValidation(A)}}})},registerInputController:(s,c)=>{this.inputControllers.set(s,c)},unregisterInputController:s=>{this.inputControllers.delete(s)},onUserInteraction:()=>{this.sendPaymentMethodSelectionEvent(),this.checkAndSendPaymentDetailsEnteredEvent()}}),!0},args:()=>[this.paymentManagers.get("PAYMENT_CARD")]});this.paymentDetailsEnteredSent=!1;this.handleSlotButtonClick=e=>{let o=e.target.closest("button, primer-button");if(!o)return;let a=o;this.isSubmitButton(a)&&(e.preventDefault(),this.submitCardPayment())};this.handleDirectSubmit=e=>{e.stopPropagation(),this.submitCardPayment()};this.handleContextCardSubmit=e=>{if(!this._isHandlingContextEvent){this._isHandlingContextEvent=!0;try{e.target!==this&&(e.stopPropagation(),this.submitCardPayment())}finally{this._isHandlingContextEvent=!1}}};this.onSlotChange=e=>{let o=e.target.assignedNodes({flatten:!0});this.hasAssignedContent=o.length>0};this.handleFormSubmit=e=>{e.preventDefault(),e.stopPropagation(),this.submitCardPayment()}}updated(e){if(super.updated(e),(e.has("hideLabels")||e.has("disabled"))&&this.cardFormProvider.value&&this.cardFormProvider.setValue({...this.cardFormProvider.value,hideLabels:this.hideLabels,disabled:this.disabled}),e.has("contextEventsController")){let r=e.get("contextEventsController");r?.host&&this._contextCardSubmitListener&&r.host.removeEventListener("primer:card-submit",this._contextCardSubmitListener),this.setupContextEventListeners()}}get shouldShowCardholderName(){let e=this.clientOptions?.card?.cardholderName;return typeof e?.visible=="boolean"?e.visible:!0}get shouldRequireCardholderName(){if(!this.shouldShowCardholderName)return!1;let e=this.clientOptions?.card?.cardholderName;return typeof e?.required=="boolean"?e.required:!0}sendPaymentMethodSelectionEvent(){this.paymentMethodSelectionSent||(this.paymentMethodSelectionSent=!0,G({eventName:"PAYMENT_METHOD_SELECTION",paymentMethod:"PAYMENT_CARD"}))}checkAndSendPaymentDetailsEnteredEvent(){if(this.paymentDetailsEnteredSent)return;let e=this.inputControllers.get("cardNumber"),r=this.inputControllers.get("expire"),o=this.inputControllers.get("cvv"),a=e?.meta?.dirty===!0,n=r?.meta?.dirty===!0,l=o?.meta?.dirty===!0,s=!0;this.shouldRequireCardholderName&&(s=this.inputControllers.get("cardholderName")?.meta?.dirty===!0),a&&n&&l&&s&&(this.sendPaymentDetailsEnteredEvent(),this.paymentDetailsEnteredSent=!0)}sendPaymentDetailsEnteredEvent(){G({eventName:"PAYMENT_DETAILS_ENTERED",paymentMethod:"PAYMENT_CARD"})}connectedCallback(){super.connectedCallback(),this.addEventListener("click",this.handleSlotButtonClick),this.addEventListener("primer:card-submit",this.handleDirectSubmit),this._contextCardSubmitListener=e=>{this.handleContextCardSubmit(e)},this.setupContextEventListeners()}disconnectedCallback(){this.removeEventListener("click",this.handleSlotButtonClick),this.removeEventListener("primer:card-submit",this.handleDirectSubmit),this.cleanupContextEventListeners(),super.disconnectedCallback()}setupContextEventListeners(){this.contextEventsController?.host&&this._contextCardSubmitListener&&this.contextEventsController.host.addEventListener("primer:card-submit",this._contextCardSubmitListener)}cleanupContextEventListeners(){this.contextEventsController?.host&&this._contextCardSubmitListener&&this.contextEventsController.host.removeEventListener("primer:card-submit",this._contextCardSubmitListener)}isSubmitButton(e){let r=e.tagName.toLowerCase(),o=r==="button",a=r==="primer-button";return o&&(e.getAttribute("type")==="submit"||e.hasAttribute("data-submit"))||a&&(e.getAttribute("type")==="submit"||e.hasAttribute("data-submit"))}async submitCardPayment(){let e=this.cardFormProvider.value;if(!e||this.disabled)return;e.setSubmissionState?.(!0);let r=await e.validate?.();if(r?.valid){let o=this.selectedCardNetwork?{cardNetwork:this.selectedCardNetwork}:void 0;await e.submit?.(o);let a={success:!0};this.eventsController.dispatchFormSubmitSuccess(a)}else{let o=r?.validationErrors;e.propagateValidationErrors?.(o||[]),this.cardFormProvider.setValue({...e,errors:o}),this.eventsController.dispatchFormSubmitErrors(o)}}render(){return this.setupCardFormTask.status===it.ERROR||this.setupCardFormTask.status===it.INITIAL?f:m`<form @submit=${this.handleFormSubmit}><slot name="card-form-content" @slotchange=${this.onSlotChange}></slot>${this.setupCardFormTask.render({complete:()=>R(this.hasAssignedContent,()=>f,()=>m`<div class="card-form"><primer-input-card-number></primer-input-card-number><div class="card-form-row"><primer-input-card-expiry></primer-input-card-expiry><primer-input-cvv></primer-input-cvv></div>${R(this.shouldShowCardholderName,()=>m`<primer-input-card-holder-name></primer-input-card-holder-name>`,()=>f)}</div><primer-card-form-submit></primer-card-form-submit>`)})}</form>`}};ee.styles=[_,Qn],d([p({type:Boolean,attribute:"hide-labels",reflect:!0})],ee.prototype,"hideLabels",2),d([p({type:Boolean,attribute:"disabled"})],ee.prototype,"disabled",2),d([M()],ee.prototype,"hasAssignedContent",2),d([M()],ee.prototype,"selectedCardNetwork",2),d([C({context:se,subscribe:!0}),p({type:Object})],ee.prototype,"paymentManagers",2),d([C({context:ne}),p({attribute:!1})],ee.prototype,"clientOptions",2),d([C({context:B}),p({attribute:!1})],ee.prototype,"headlessUtils",2),d([C({context:Qe,subscribe:!0}),p({attribute:!1})],ee.prototype,"analyticsUtils",2),d([C({context:wt,subscribe:!0}),p({attribute:!1})],ee.prototype,"contextEventsController",2),ee=d([v("primer-card-form"),k()],ee);var oe=class extends g{constructor(){super();this.cardFormContext=null;this.computedStyles=null;this._userAssignedProps=new Set;this._internalLabel="";this._internalPlaceholder="";this._internalAriaLabel="";this.handleWrapperClick=()=>{this.hostedInputController.focusInput()};this.hostedInputController={}}getTranslatedValue(e){return e?typeof e=="string"?e:S(e.id,{id:e.id}):""}get label(){return this._userAssignedProps.has("label")?this._internalLabel:this.getTranslatedValue(this.config.translations.label)}set label(e){let r=this.label;e!==""?(this._userAssignedProps.add("label"),this._internalLabel=e):(this._userAssignedProps.delete("label"),this._internalLabel=""),this.requestUpdate("label",r)}get placeholder(){return this._userAssignedProps.has("placeholder")?this._internalPlaceholder:this.getTranslatedValue(this.config.translations.placeholder)}set placeholder(e){let r=this.placeholder;this._userAssignedProps.add("placeholder"),this._internalPlaceholder=e,this.requestUpdate("placeholder",r)}get ariaLabel(){return this._userAssignedProps.has("ariaLabel")?this._internalAriaLabel:this.getTranslatedValue(this.config.translations.ariaLabel)||this.getTranslatedValue(this.config.translations.label)}set ariaLabel(e){let r=this.ariaLabel;e!==""?(this._userAssignedProps.add("ariaLabel"),this._internalAriaLabel=e):(this._userAssignedProps.delete("ariaLabel"),this._internalAriaLabel=""),this.requestUpdate("ariaLabel",r)}childUpdated(){Object.defineProperty(this,"hostedInputController",{value:new li(this,{type:this.config.inputType,containerSelector:this.config.containerSelector,onInput:this.config.onInput}),writable:!1,configurable:!1})}getError(){let e=this.hostedInputController.meta;return e.submitted||e.dirty&&e.touched?e.errorCode:null}renderInput(){if(this.hostedInputController.setupTask.status===it.ERROR)return f;let e=this.getError();return m`<primer-input-wrapper .focusWithin="${this.hostedInputController.meta.active}" .hasError=${!!e} @wrapper-click="${this.handleWrapperClick}" >${R(!this.cardFormContext?.hideLabels,()=>m`<primer-input-label slot="label" >${this.label}</primer-input-label >`,()=>f)}<div slot="input" class="card-input-slot" id="${this.config.containerSelector.substring(1)}" aria-label="${this.ariaLabel}" ></div>${R(e,()=>m`<primer-input-error slot="error">${S(e,{id:e})}</primer-input-error>`,()=>f)}</primer-input-wrapper>`}};d([C({context:Rt,subscribe:!0})],oe.prototype,"cardFormContext",2),d([C({context:et,subscribe:!0}),p()],oe.prototype,"computedStyles",2),d([p({type:String})],oe.prototype,"label",1),d([p({type:String})],oe.prototype,"placeholder",1),d([p({type:String,attribute:"aria-label"})],oe.prototype,"ariaLabel",1);var ts=y` :host { display: contents; } .card-number-container { display: flex; align-items: center; width: 100%; position: relative; gap: var(--primer-space-small); } #cardNumber { flex: 1; display: flex; width: 100%; } .network-selector-container { display: flex; align-items: center; z-index: 2; } `;var pt=y` .card-input-slot { display: flex; } `;var Ke=class extends oe{constructor(){super();this.config={inputType:"cardNumber",containerSelector:"#cardNumber",errorName:"cardNumber-card",translations:{label:{id:"cardNumber",defaultMessage:"Card Number"},placeholder:"4111 1111 1111 1111",ariaLabel:{id:"cardNumber",defaultMessage:"Card Number"}}};this.handleNetworkSelected=e=>{let{network:r}=e.detail;this.cardFormContext&&this.cardFormContext.setCardNetwork(r)};this.childUpdated()}renderInput(){if(this.hostedInputController.setupTask.status===it.ERROR)return f;let e=this.getError();return m`<primer-input-wrapper .focusWithin="${this.hostedInputController.meta.active}" .hasError=${!!e} >${R(!this.cardFormContext?.hideLabels,()=>m`<primer-input-label slot="label" >${this.label}</primer-input-label >`,()=>f)}<div slot="input" class="card-number-container" aria-label="${this.ariaLabel}" ><div id="${this.config.containerSelector.substring(1)}"></div><div class="network-selector-container"><primer-card-network-selector @network-selected=${this.handleNetworkSelected} ></primer-card-network-selector></div></div>${R(e,r=>m`<primer-input-error slot="error">${S(r,{id:r})}</primer-input-error>`,()=>f)}</primer-input-wrapper>`}render(){return this.renderInput()}};Ke.styles=[_,pt,ts],Ke=d([v("primer-input-card-number"),k()],Ke);var rs=y` :host { display: contents; } `;var Ge=class extends oe{constructor(){super();this.config={inputType:"cvv",containerSelector:"#cvv",errorName:"cvv-card",translations:{label:"CVV",placeholder:"123"}};this.childUpdated()}render(){return this.renderInput()}};Ge.styles=[_,pt,rs],Ge=d([v("primer-input-cvv"),k()],Ge);var is=y` :host { display: contents; } `;var qe=class extends oe{constructor(){super();this.config={inputType:"expire",containerSelector:"#expiry",errorName:"expiryDate-card",translations:{label:{id:"cardExpiry",defaultMessage:"Expiry Date"},placeholder:{id:"cardExpiryPlaceholder",defaultMessage:"MM/YY"},ariaLabel:{id:"cardExpiry",defaultMessage:"Expiry Date"}}};this.childUpdated()}render(){return this.renderInput()}};qe.styles=[_,pt,is],qe=d([v("primer-input-card-expiry"),k()],qe);var os=y` :host { display: contents; } `;var We=class extends oe{constructor(){super();this.config={inputType:"cardholderName",containerSelector:"#cardFormName",errorName:"cardholderName",translations:{label:{id:"cardholderNameLabel",defaultMessage:"Cardholder Name"},placeholder:{id:"cardholderNamePlaceholder",defaultMessage:"Name on card"},ariaLabel:{id:"cardholderNameLabel",defaultMessage:"Cardholder Name"}},onInput:e=>this.handleInput(e)};this.childUpdated()}handleInput(e){this.cardFormContext?.setCardholderName?.(e)}render(){return this.renderInput()}};We.styles=[_,pt,os],We=d([v("primer-input-card-holder-name"),k()],We);var as=y` :host { display: contents; } `;var K=class extends g{constructor(){super(...arguments);this._userAssignedProps=new Set;this._internalButtonText="";this.headlessInstance=null;this.clientOptions=null;this.sdkState=null;this.cardFormContext=null;this.analyticsUtils=null;this.contextEventsController=null;this.variant="primary";this.disabled=!1;this.handleClick=e=>{if(e.preventDefault(),this.disabled)return;G({eventName:"PAYMENT_SUBMITTED",paymentMethod:"PAYMENT_CARD"});let r=new CustomEvent("primer:card-submit",{bubbles:!0,composed:!0,detail:{source:"primer-card-form-submit"}});this.dispatchEvent(r)}}get buttonText(){return this._userAssignedProps.has("buttonText")?this._internalButtonText:S("pay",{id:"pay"})}set buttonText(e){let r=this.buttonText;e!==""?(this._userAssignedProps.add("buttonText"),this._internalButtonText=e):(this._userAssignedProps.delete("buttonText"),this._internalButtonText=""),this.requestUpdate("buttonText",r)}get submitButtonConfig(){return this.clientOptions?.submitButton??null}get shouldShowBuiltInButton(){return this.submitButtonConfig?.useBuiltInButton??!0}render(){if(!this.shouldShowBuiltInButton)return f;let e=this.submitButtonConfig?.amountVisible?this.headlessInstance?.getUIOrderAmount():null,r=e?` ${e}`:f,o=this.disabled||this.cardFormContext?.disabled||!1;return m`<primer-button type="submit" variant=${this.variant} ?disabled=${o} @click=${this.handleClick} .loading=${!!this.sdkState?.isProcessing} data-submit >${this.buttonText}${r}</primer-button>`}};K.styles=[_,as],d([p({type:String})],K.prototype,"buttonText",1),d([C({context:B,subscribe:!0}),p({type:Object})],K.prototype,"headlessInstance",2),d([C({context:ne,subscribe:!0}),p({type:Object})],K.prototype,"clientOptions",2),d([C({context:z,subscribe:!0}),p()],K.prototype,"sdkState",2),d([C({context:Rt,subscribe:!0}),p()],K.prototype,"cardFormContext",2),d([C({context:Qe,subscribe:!0}),p({attribute:!1})],K.prototype,"analyticsUtils",2),d([C({context:wt,subscribe:!0}),p({attribute:!1})],K.prototype,"contextEventsController",2),d([p({type:String})],K.prototype,"variant",2),d([p({type:Boolean})],K.prototype,"disabled",2),K=d([v("primer-card-form-submit"),k()],K);var ho=()=>new uo,uo=class{},mo=new WeakMap,di=xe(class extends dt{render(i){return f}update(i,[t]){let e=t!==this.G;return e&&this.G!==void 0&&this.rt(void 0),(e||this.lt!==this.ct)&&(this.G=t,this.ht=i.options?.host,this.rt(this.ct=i.element)),f}rt(i){if(this.isConnected||(i=void 0),typeof this.G=="function"){let t=this.ht??globalThis,e=mo.get(t);e===void 0&&(e=new WeakMap,mo.set(t,e)),e.get(this.G)!==void 0&&this.G.call(this.ht,void 0),e.set(this.G,i),i!==void 0&&this.G.call(this.ht,i)}else this.G.value=i}get lt(){return typeof this.G=="function"?mo.get(this.ht??globalThis)?.get(this.G):this.G?.value}disconnected(){this.lt===this.ct&&this.rt(void 0)}reconnected(){this.rt(this.ct)}});var ns=y` :host { display: flex; align-items: center; position: relative; } .network-selector { display: flex; align-items: center; cursor: pointer; background: none; padding: unset; border: none; transition: opacity var(--primer-animation-duration) var(--primer-animation-easing); outline: none; gap: var(--primer-space-xsmall); } .network-selector:hover { opacity: 0.8; } .network-selector:focus-visible { outline: 2px solid var(--primer-color-focus); border-radius: var(--primer-radius-xsmall); } .network-icon { width: var(--primer-size-large); height: var( --primer-size-medium ); /* Added explicit height to maintain aspect ratio */ object-fit: contain; } .caret { margin-left: var(--primer-space-xsmall); transition: transform var(--primer-animation-duration) var(--primer-animation-easing); color: var(--primer-color-icon-primary); } .caret.open { transform: rotate(180deg); } .dropdown { position: absolute; top: 100%; right: 0; width: max-content; min-width: calc(var(--primer-size-xxxlarge) * 3); background: var(--primer-color-gray-000); border-radius: var(--primer-radius-small); box-shadow: 0 var(--primer-space-xxsmall) var(--primer-space-large) rgba(0, 0, 0, 0.15); z-index: 10; overflow: hidden; border: 1px solid var(--primer-color-border-outlined-default); } .dropdown:not(.open) { display: none; } .dropdown.open { display: block; max-height: calc(var(--primer-size-xxxlarge) * 4); overflow-y: auto; } .network-option { display: flex; align-items: center; padding: var(--primer-space-small) var(--primer-space-medium); cursor: pointer; transition: background-color var(--primer-animation-duration) var(--primer-animation-easing); position: relative; outline: none; background-color: transparent; } /* Only apply hover effect when not in keyboard navigation mode */ .network-option:hover { background-color: var(--primer-color-gray-100); } /* Apply focused style only when the focused class is present (keyboard navigation) */ .network-option.focused { background-color: var(--primer-color-gray-100); } .network-option:focus-visible { outline: 2px solid var(--primer-color-focus); outline-offset: -2px; } .network-option-icon { width: var(--primer-size-medium); height: var(--primer-size-small); margin-right: var(--primer-space-small); object-fit: contain; } .network-name { font-size: var(--primer-typography-body-medium-size); font-family: var(--primer-typography-body-medium-font); line-height: var(--primer-typography-body-medium-line-height); letter-spacing: var(--primer-typography-body-medium-letter-spacing); white-space: nowrap; color: var(--primer-color-text-primary); flex: 1; } .checkmark { margin-left: var(--primer-space-small); color: var(--primer-color-brand); width: var(--primer-size-small); height: var(--primer-size-small); } `;var ae=class extends g{constructor(){super(...arguments);this.cardNetworks=null;this.headlessUtils=null;this.selectedCardNetwork=null;this.isDropdownOpen=!1;this.focusedNetworkIndex=0;this.isKeyboardNavigation=!1;this.buttonRef=ho();this.dropdownRef=ho();this.networkOptionRefs=[];this.toggleDropdown=e=>{this.isKeyboardNavigation=!1,e.stopPropagation(),this.getSelectableNetworks().length>1&&(this.isDropdownOpen=!this.isDropdownOpen,this.isDropdownOpen&&(this.focusedNetworkIndex=this.getSelectedNetworkIndex()))};this.handleClickOutside=e=>{this.isDropdownOpen&&(this.contains(e.target)||(this.isDropdownOpen=!1,this.isKeyboardNavigation=!1))};this.handleMouseMove=()=>{this.isKeyboardNavigation&&(this.isKeyboardNavigation=!1)};this.handleKeyDown=e=>{if(!(!(this.getSelectableNetworks().length>1)||!(this.contains(e.target)||this===e.target||this.isDropdownOpen&&e.target===document.body)))switch(this.isKeyboardNavigation=!0,e.key){case"ArrowDown":e.preventDefault(),this.isDropdownOpen?(this.focusedNetworkIndex=(this.focusedNetworkIndex+1)%this.getSelectableNetworks().length,this.focusNetworkOption()):(this.isDropdownOpen=!0,this.focusedNetworkIndex=this.getSelectedNetworkIndex());break;case"ArrowUp":e.preventDefault(),this.isDropdownOpen?(this.focusedNetworkIndex=(this.focusedNetworkIndex-1+this.getSelectableNetworks().length)%this.getSelectableNetworks().length,this.focusNetworkOption()):(this.isDropdownOpen=!0,this.focusedNetworkIndex=this.getSelectedNetworkIndex());break;case"Enter":case" ":this.isDropdownOpen&&this.focusedNetworkIndex>=0?(e.preventDefault(),this.selectNetwork(e,this.getSelectableNetworks()[this.focusedNetworkIndex])):!this.isDropdownOpen&&this.buttonRef.value===document.activeElement&&(e.preventDefault(),this.isDropdownOpen=!0,this.focusedNetworkIndex=this.getSelectedNetworkIndex());break;case"Escape":this.isDropdownOpen&&(e.preventDefault(),this.isDropdownOpen=!1,this.buttonRef.value?.focus());break;case"Tab":this.isDropdownOpen&&(this.isDropdownOpen=!1);break}};this.handleDocumentKeyDown=e=>{this.isDropdownOpen&&this.handleKeyDown(e)}}getNetworkIconUrl(e){return this.headlessUtils?.getCardNetworkAsset(e.network)?.cardUrl}getSelectableNetworks(){return this.cardNetworks?.selectableCardNetworks||[]}getDetectedNetwork(){return this.selectedCardNetwork??(this.cardNetworks?.detectedCardNetwork||null)}getSelectedNetworkIndex(){let e=this.getDetectedNetwork();if(!e)return 0;let r=this.getSelectableNetworks().findIndex(o=>o.network===e.network);return r>=0?r:0}selectNetwork(e,r){e.stopPropagation(),this.selectedCardNetwork=r,this.isDropdownOpen=!1,this.buttonRef.value?.focus(),this.cardNetworks&&this.dispatchEvent(new CustomEvent("network-selected",{detail:{network:r.network},bubbles:!0,composed:!0}))}focusNetworkOption(){requestAnimationFrame(()=>{this.networkOptionRefs[this.focusedNetworkIndex]&&this.networkOptionRefs[this.focusedNetworkIndex].focus()})}setNetworkOptionRef(e,r){this.networkOptionRefs[r]=e}connectedCallback(){super.connectedCallback(),setTimeout(()=>{document.addEventListener("click",this.handleClickOutside),document.addEventListener("mousemove",this.handleMouseMove),this.addEventListener("keydown",this.handleKeyDown),document.addEventListener("keydown",this.handleDocumentKeyDown)},0)}disconnectedCallback(){document.removeEventListener("click",this.handleClickOutside),document.removeEventListener("keydown",this.handleDocumentKeyDown),document.removeEventListener("mousemove",this.handleMouseMove),this.removeEventListener("keydown",this.handleKeyDown),super.disconnectedCallback()}render(){if(this.cardNetworks?.isLoading)return m`<primer-spinner size="small" compact></primer-spinner>`;let e=this.getSelectableNetworks();if(!this.getDetectedNetwork()&&e.length===0)return m`<primer-icon name="payment-card" size="sm"></primer-icon>`;let r=this.getDetectedNetwork()||(e.length>0?e[0]:null);if(!r)return m`<primer-icon name="payment-card" size="sm"></primer-icon>`;let o=e.length>1;return m`<button ${di(this.buttonRef)} class="network-selector" @click=${this.toggleDropdown} @keydown=${a=>{(a.key===" "||a.key==="Enter")&&o&&(a.preventDefault(),this.isDropdownOpen=!this.isDropdownOpen,this.isDropdownOpen&&(this.focusedNetworkIndex=this.getSelectedNetworkIndex()))}} aria-label=${o?`Selected card network: ${r.displayName}. Click to change.`:`Card network: ${r.displayName}`} aria-expanded=${o?this.isDropdownOpen:f} aria-haspopup=${o?"true":f} aria-controls=${o?"network-dropdown":f} ><img class="network-icon" src=${this.getNetworkIconUrl(r)} alt=${r.displayName} />${R(o,()=>m`<primer-icon class="caret ${this.isDropdownOpen?"open":""}" size="sm" name="chevron-down" ></primer-icon>`,()=>f)}</button>${R(this.isDropdownOpen,()=>m`<div ${di(this.dropdownRef)} id="network-dropdown" class="dropdown open" role="listbox" aria-label="Select card network" >${e.map((a,n)=>m`<div ${di(l=>this.setNetworkOptionRef(l,n))} class="network-option ${this.isKeyboardNavigation&&n===this.focusedNetworkIndex?"focused":""}" @click=${l=>this.selectNetwork(l,a)} @keydown=${l=>{(l.key==="Enter"||l.key===" ")&&this.selectNetwork(l,a)}} role="option" aria-selected=${a.network===r.network} tabindex="${n===this.focusedNetworkIndex?"0":"-1"}" ><img class="network-option-icon" src=${this.getNetworkIconUrl(a)} alt=${a.displayName} /><span class="network-name">${a.displayName}</span>${R(a.network===r.network,()=>m`<primer-icon class="checkmark" name="checkmark" size="sm" ></primer-icon>`,()=>f)}</div>`)}</div>`,()=>f)} `}};ae.styles=[_,ns],d([C({context:dr,subscribe:!0})],ae.prototype,"cardNetworks",2),d([C({context:B,subscribe:!0})],ae.prototype,"headlessUtils",2),d([M()],ae.prototype,"selectedCardNetwork",2),d([M()],ae.prototype,"isDropdownOpen",2),d([M()],ae.prototype,"focusedNetworkIndex",2),d([M()],ae.prototype,"isKeyboardNavigation",2),ae=d([v("primer-card-network-selector")],ae);var ss=y` :host { display: block; margin-top: var(--primer-space-medium); margin-bottom: var(--primer-space-medium); } .other-payment-methods-container { width: 100%; } .other-payment-methods-content { padding: var(--primer-space-medium) 0; } .primer-loader { display: flex; justify-content: center; align-items: center; } `;var mt=class extends g{constructor(){super(...arguments);this.vaultManager=null}render(){if(this.vaultManager?.isLoading)return f;let e=this.vaultManager?.showEmptyState&&this.vaultManager?.vaultedPaymentMethods.length;return!this.vaultManager||!this.vaultManager.enabled||!e?m`<slot name="other-payments"></slot>`:m`<div class="other-payment-methods-container"><primer-collapsable buttonVariant="secondary" .expanded="${this.vaultManager?.vaultedPaymentMethods.length===0}" .header="${S("navigateToPaymentMethods",{id:"navigateToPaymentMethods"})}" ><div class="other-payment-methods-content"><slot name="other-payments"></slot></div></primer-collapsable></div>`}};mt.styles=[ss],d([C({context:le,subscribe:!0}),p({type:Object,attribute:!1})],mt.prototype,"vaultManager",2),mt=d([v("primer-show-other-payments")],mt);var ls=y` :host { height: calc( ${we(Ie)} + calc(2 * var(--primer-space-medium)) ); display: flex; } .native-button-container { width: 100%; height: 100%; flex: 1; position: relative; } /* Disabled state styling - handled via JavaScript overlay for iframe compatibility */ :host([disabled]) { cursor: not-allowed; } `;var Pe=class extends g{constructor(){super();this.paymentManagers=new Map;this.computedStyles=null;this.disabled=!1;this._buttonId="button-container";this.loadManagerTask=new D(this,{args:()=>[this.paymentMethod?.type],task:([e])=>{if(!e)return L;let r=this.paymentManagers.get(e)?.manager;if(!r)throw new Error(`No manager found for payment method type ${e}`);return r}}),this.nativeButtonTask=new D(this,{args:()=>[this.loadManagerTask.value],task:async([e])=>{if(!e)return L;await this.updateComplete;let r=this.shadowRoot?.getElementById(this._buttonId);if(!r)return;let o=this.calculateButtonHeight(),a=e.createButton(),n=this.createRenderOptions(o);return await a.render(this.paymentMethod?.type==="GOOGLE_PAY"?this.shadowRoot?.getRootNode():r,n),this.disabled&&await a.setDisabled(this.disabled),this.disabled&&(await this.updateComplete,this.updateDisabledOverlay()),a}})}attributeChangedCallback(e,r,o){if(super.attributeChangedCallback(e,r,o),e==="disabled"&&r!==o){let a=o!==null,n=this.nativeButtonTask.value;n&&n.setDisabled(a)}}calculateButtonHeight(){if(typeof window>"u"||!this.isConnected||!this.computedStyles)return 0;let e=parseFloat(Ie),r=parseFloat(this.computedStyles.getPropertyValue("--primer-space-medium"));return e+2*r}createRenderOptions(e){let r=this.paymentMethod?.type;return r==="GOOGLE_PAY"?{style:{shadowRoot:!0}}:r==="APPLE_PAY"?{style:{buttonHeight:e}}:r==="PAYPAL"?{style:{buttonHeight:e}}:{style:{buttonHeight:e}}}updated(e){e.has("paymentMethod")&&this.paymentMethod&&(this._buttonId=`button-container-${this.paymentMethod.type}`),e.has("disabled")&&this.updateDisabledOverlay()}updateDisabledOverlay(){this.paymentMethod?.type==="GOOGLE_PAY"?this.updateGooglePayOverlay():this.updateRegularOverlay()}updateGooglePayOverlay(){let e=null;if(e=this.shadowRoot?.getRootNode()?.querySelector(".gpay-card-info-container-fill"),e||(e=document.querySelector(".gpay-card-info-container-fill")),e||(e=this.shadowRoot?.querySelector(".gpay-card-info-container-fill")),!e){setTimeout(()=>this.updateGooglePayOverlay(),100);return}let o=e.querySelector(".disabled-overlay");if(o&&o.remove(),this.disabled){let a=document.createElement("div");a.className="disabled-overlay",a.style.cssText=`
|
|
198
|
+
`,t.shadowRoot?t.shadowRoot.appendChild(e):t.appendChild(e)}}function Xn(i,t){return i.active!==t.active||i.dirty!==t.dirty||i.error!==t.error||i.errorCode!==t.errorCode||i.submitted!==t.submitted||i.touched!==t.touched||i.valid!==t.valid}var li=class{constructor(t,e){this._meta={active:!1,dirty:!1,error:null,errorCode:null,submitted:!1,touched:!1,valid:!1};this._hostedInput=null;this._standardInput=null;this.host=t,this.config=e,this.host.addController(this),this.setupTask=new D(this.host,{args:()=>[this.getHostedInput()],task:this.setupHostedInput.bind(this)}),this.host.addEventListener("wrapper-click",()=>{this.focusInput()})}focusInput(){this._hostedInput?this._hostedInput.focus():this._standardInput&&this._standardInput.focus()}notifyUserInteraction(){let t=this.host.cardFormContext;t?.onUserInteraction&&t.onUserInteraction()}getHostedInput(){let{type:t}=this.config,e=this.host.cardFormContext;return e?{cardNumber:e.cardNumberInput,cvv:e.cvvInput,expire:e.expiryInput,cardholderName:e.cardholderNameInput??"cardholderName"}[t]:void 0}async setupHostedInput([t]){if(!t)return L;await this.host.updateComplete;let e=this.getTargetContainer();return e?t==="cardholderName"?this.setupStandardInput(e):this.setupHostedIframeInput(t,e):L}getTargetContainer(){return this.host.renderRoot.querySelector(this.config.containerSelector)}setupStandardInput(t){let e=document.createElement("input");return e.type="text",e.placeholder=this.host.placeholder,Zn(e,this.host),(this.host.ariaLabel||this.host.label)&&e.setAttribute("aria-label",this.host.ariaLabel??this.host.label),this.setupInputEventListeners(e),t.innerHTML="",t.appendChild(e),this._standardInput=e,!0}setupInputEventListeners(t){t.addEventListener("input",e=>{let r=e.target,a=!!r.value.trim();this.notifyUserInteraction(),this._meta={...this._meta,dirty:a},this.config.onInput?.(r.value),this.host.requestUpdate()}),t.addEventListener("focus",()=>{this.notifyUserInteraction(),this._meta.active=!0,this.host.requestUpdate()}),t.addEventListener("blur",()=>{this._meta.active=!1,this._meta.touched=!1,this.host.requestUpdate()})}async setupHostedIframeInput(t,e){await new Promise(a=>requestAnimationFrame(()=>a())),this._hostedInput=t;let r=si(this.host.computedStyles),o=r?{style:{input:{base:r}}}:void 0;return t.addEventListener("focus",()=>{this.notifyUserInteraction(),this._meta.active=!0,this.host.requestUpdate()}),t.addEventListener("blur",()=>{this._meta.active=!1,this.host.requestUpdate()}),t.addEventListener("change",a=>{let n=a;this.notifyUserInteraction(),Xn(this._meta,n)&&(this._meta={...this._meta,...n},this.host.requestUpdate())}),await t.render(e,{placeholder:this.host.placeholder,ariaLabel:this.host.ariaLabel,...o}),!0}get meta(){return this._meta}updateMetaFromValidation(t){this._meta={...this._meta,valid:!!t.valid,error:t.error||null,errorCode:t.errorCode||null},this.host.requestUpdate()}setSubmitted(t){this._meta={...this._meta,submitted:t,...t&&{touched:!0}},this.host.requestUpdate()}hostConnected(){this.registerWithContext()}hostDisconnected(){this.unregisterFromContext(),this._hostedInput=null,this._standardInput=null}registerWithContext(){let t=this.host.cardFormContext;t?.registerInputController&&t.registerInputController(this.config.type,this)}unregisterFromContext(){let t=this.host.cardFormContext;t?.unregisterInputController&&t.unregisterInputController(this.config.type)}};var Qn=y` :host { display: contents; } form { display: flex; flex-direction: column; gap: var(--primer-space-medium); width: 100%; } .card-form { display: flex; flex-direction: column; gap: var(--primer-space-medium); margin-bottom: var(--primer-space-medium); } .card-form-row { display: flex; gap: var(--primer-space-small); } `;var es={cardholderName:"cardholderName",cardNumber:"cardNumber",cardExpiryDate:"expire",expiryDate:"expire",cardSecurityCode:"cvv",cvv:"cvv"},ee=class extends g{constructor(){super(...arguments);this.hideLabels=!1;this.disabled=!1;this.hasAssignedContent=!1;this.selectedCardNetwork=null;this.paymentMethodSelectionSent=!1;this.paymentManagers=new Map;this.clientOptions=null;this.headlessUtils=null;this.analyticsUtils=null;this.contextEventsController=null;this.cardFormProvider=new z(this,{context:Rt,initialValue:null});this.eventsController=new Pt(this);this._contextCardSubmitListener=null;this._isHandlingContextEvent=!1;this.inputControllers=new Map;this.setupCardFormTask=new D(this,{task:([e])=>{if(!e?.manager)return L;let{manager:r}=e,o=r.createHostedInputs(),{cardNumberInput:a,expiryInput:n,cvvInput:l}=o;return this.cardFormProvider.setValue({cardholderNameInput:o.cardholderNameInput,cardNumberInput:a,expiryInput:n,cvvInput:l,setCardholderName:s=>{r.setCardholderName(s),this.shouldRequireCardholderName&&r.validate?.().then(c=>{let h=c?.validationErrors?.find(E=>E.name===es.cardholderName),b=this.inputControllers.get("cardholderName");b&&b.updateMetaFromValidation({valid:!1,error:h?.message||h?.error||null,errorCode:h?.message||h?.error||null})})},setCardNetwork:s=>{this.selectedCardNetwork=s},validate:()=>r.validate(),submit:s=>r.submit(s),hideLabels:this.hideLabels,disabled:this.disabled,setSubmissionState:s=>{this.inputControllers.forEach(c=>{c.setSubmitted(s)})},propagateValidationErrors:s=>{s&&s.forEach(c=>{let u=c.field||c.name,h=c.message||c.error,b=es[u];if(b){let E=this.inputControllers.get(b);if(E){let x={valid:!1,error:h,errorCode:h};E.updateMetaFromValidation(x)}}})},registerInputController:(s,c)=>{this.inputControllers.set(s,c)},unregisterInputController:s=>{this.inputControllers.delete(s)},onUserInteraction:()=>{this.sendPaymentMethodSelectionEvent(),this.checkAndSendPaymentDetailsEnteredEvent()}}),!0},args:()=>[this.paymentManagers.get("PAYMENT_CARD")]});this.paymentDetailsEnteredSent=!1;this.handleSlotButtonClick=e=>{let o=e.target.closest("button, primer-button");if(!o)return;let a=o;this.isSubmitButton(a)&&(e.preventDefault(),this.submitCardPayment())};this.handleDirectSubmit=e=>{e.stopPropagation(),this.submitCardPayment()};this.handleContextCardSubmit=e=>{if(!this._isHandlingContextEvent){this._isHandlingContextEvent=!0;try{e.target!==this&&(e.stopPropagation(),this.submitCardPayment())}finally{this._isHandlingContextEvent=!1}}};this.onSlotChange=e=>{let o=e.target.assignedNodes({flatten:!0});this.hasAssignedContent=o.length>0};this.handleFormSubmit=e=>{e.preventDefault(),e.stopPropagation(),this.submitCardPayment()}}updated(e){if(super.updated(e),(e.has("hideLabels")||e.has("disabled"))&&this.cardFormProvider.value&&this.cardFormProvider.setValue({...this.cardFormProvider.value,hideLabels:this.hideLabels,disabled:this.disabled}),e.has("contextEventsController")){let r=e.get("contextEventsController");r?.host&&this._contextCardSubmitListener&&r.host.removeEventListener("primer:card-submit",this._contextCardSubmitListener),this.setupContextEventListeners()}}get shouldShowCardholderName(){let e=this.clientOptions?.card?.cardholderName;return typeof e?.visible=="boolean"?e.visible:!0}get shouldRequireCardholderName(){if(!this.shouldShowCardholderName)return!1;let e=this.clientOptions?.card?.cardholderName;return typeof e?.required=="boolean"?e.required:!0}sendPaymentMethodSelectionEvent(){this.paymentMethodSelectionSent||(this.paymentMethodSelectionSent=!0,G({eventName:"PAYMENT_METHOD_SELECTION",paymentMethod:"PAYMENT_CARD"}))}checkAndSendPaymentDetailsEnteredEvent(){if(this.paymentDetailsEnteredSent)return;let e=this.inputControllers.get("cardNumber"),r=this.inputControllers.get("expire"),o=this.inputControllers.get("cvv"),a=e?.meta?.dirty===!0,n=r?.meta?.dirty===!0,l=o?.meta?.dirty===!0,s=!0;this.shouldRequireCardholderName&&(s=this.inputControllers.get("cardholderName")?.meta?.dirty===!0),a&&n&&l&&s&&(this.sendPaymentDetailsEnteredEvent(),this.paymentDetailsEnteredSent=!0)}sendPaymentDetailsEnteredEvent(){G({eventName:"PAYMENT_DETAILS_ENTERED",paymentMethod:"PAYMENT_CARD"})}connectedCallback(){super.connectedCallback(),this.addEventListener("click",this.handleSlotButtonClick),this.addEventListener("primer:card-submit",this.handleDirectSubmit),this._contextCardSubmitListener=e=>{this.handleContextCardSubmit(e)},this.setupContextEventListeners()}disconnectedCallback(){this.removeEventListener("click",this.handleSlotButtonClick),this.removeEventListener("primer:card-submit",this.handleDirectSubmit),this.cleanupContextEventListeners(),super.disconnectedCallback()}setupContextEventListeners(){this.contextEventsController?.host&&this._contextCardSubmitListener&&this.contextEventsController.host.addEventListener("primer:card-submit",this._contextCardSubmitListener)}cleanupContextEventListeners(){this.contextEventsController?.host&&this._contextCardSubmitListener&&this.contextEventsController.host.removeEventListener("primer:card-submit",this._contextCardSubmitListener)}isSubmitButton(e){let r=e.tagName.toLowerCase(),o=r==="button",a=r==="primer-button";return o&&(e.getAttribute("type")==="submit"||e.hasAttribute("data-submit"))||a&&(e.getAttribute("type")==="submit"||e.hasAttribute("data-submit"))}async submitCardPayment(){let e=this.cardFormProvider.value;if(!e||this.disabled)return;e.setSubmissionState?.(!0);let r=await e.validate?.();if(r?.valid){let o=this.selectedCardNetwork?{cardNetwork:this.selectedCardNetwork}:void 0;await e.submit?.(o);let a={success:!0};this.eventsController.dispatchFormSubmitSuccess(a)}else{let o=r?.validationErrors;e.propagateValidationErrors?.(o||[]),this.cardFormProvider.setValue({...e,errors:o}),this.eventsController.dispatchFormSubmitErrors(o)}}render(){return this.setupCardFormTask.status===rt.ERROR||this.setupCardFormTask.status===rt.INITIAL?f:m`<form @submit=${this.handleFormSubmit}><slot name="card-form-content" @slotchange=${this.onSlotChange}></slot>${this.setupCardFormTask.render({complete:()=>R(this.hasAssignedContent,()=>f,()=>m`<div class="card-form"><primer-input-card-number></primer-input-card-number><div class="card-form-row"><primer-input-card-expiry></primer-input-card-expiry><primer-input-cvv></primer-input-cvv></div>${R(this.shouldShowCardholderName,()=>m`<primer-input-card-holder-name></primer-input-card-holder-name>`,()=>f)}</div><primer-card-form-submit></primer-card-form-submit>`)})}</form>`}};ee.styles=[P,Qn],d([p({type:Boolean,attribute:"hide-labels",reflect:!0})],ee.prototype,"hideLabels",2),d([p({type:Boolean,attribute:"disabled"})],ee.prototype,"disabled",2),d([M()],ee.prototype,"hasAssignedContent",2),d([M()],ee.prototype,"selectedCardNetwork",2),d([C({context:se,subscribe:!0}),p({type:Object})],ee.prototype,"paymentManagers",2),d([C({context:ne}),p({attribute:!1})],ee.prototype,"clientOptions",2),d([C({context:B}),p({attribute:!1})],ee.prototype,"headlessUtils",2),d([C({context:Xe,subscribe:!0}),p({attribute:!1})],ee.prototype,"analyticsUtils",2),d([C({context:wt,subscribe:!0}),p({attribute:!1})],ee.prototype,"contextEventsController",2),ee=d([v("primer-card-form"),k()],ee);var oe=class extends g{constructor(){super();this._cardFormContext=null;this.computedStyles=null;this._userAssignedProps=new Set;this._internalLabel="";this._internalPlaceholder="";this._internalAriaLabel="";this.handleWrapperClick=()=>{this.hostedInputController.focusInput()};this.hostedInputController={}}get cardFormContext(){return this._cardFormContext}set cardFormContext(e){let r=this._cardFormContext;this._cardFormContext=e,!r&&e&&this.updateComplete.then(()=>{this.hostedInputController?.registerWithContext?.()}),this.requestUpdate("cardFormContext",r)}getTranslatedValue(e){return e?typeof e=="string"?e:S(e.id,{id:e.id}):""}get label(){return this._userAssignedProps.has("label")?this._internalLabel:this.getTranslatedValue(this.config.translations.label)}set label(e){let r=this.label;e!==""?(this._userAssignedProps.add("label"),this._internalLabel=e):(this._userAssignedProps.delete("label"),this._internalLabel=""),this.requestUpdate("label",r)}get placeholder(){return this._userAssignedProps.has("placeholder")?this._internalPlaceholder:this.getTranslatedValue(this.config.translations.placeholder)}set placeholder(e){let r=this.placeholder;this._userAssignedProps.add("placeholder"),this._internalPlaceholder=e,this.requestUpdate("placeholder",r)}get ariaLabel(){return this._userAssignedProps.has("ariaLabel")?this._internalAriaLabel:this.getTranslatedValue(this.config.translations.ariaLabel)||this.getTranslatedValue(this.config.translations.label)}set ariaLabel(e){let r=this.ariaLabel;e!==""?(this._userAssignedProps.add("ariaLabel"),this._internalAriaLabel=e):(this._userAssignedProps.delete("ariaLabel"),this._internalAriaLabel=""),this.requestUpdate("ariaLabel",r)}childUpdated(){Object.defineProperty(this,"hostedInputController",{value:new li(this,{type:this.config.inputType,containerSelector:this.config.containerSelector,onInput:this.config.onInput}),writable:!1,configurable:!1})}getError(){let e=this.hostedInputController.meta;return e.submitted||e.dirty&&e.touched?e.errorCode:null}renderInput(){if(this.hostedInputController.setupTask.status===rt.ERROR)return f;let e=this.getError();return m`<primer-input-wrapper .focusWithin="${this.hostedInputController.meta.active}" .hasError=${!!e} @wrapper-click="${this.handleWrapperClick}" >${R(!this.cardFormContext?.hideLabels,()=>m`<primer-input-label slot="label" >${this.label}</primer-input-label >`,()=>f)}<div slot="input" class="card-input-slot" id="${this.config.containerSelector.substring(1)}" aria-label="${this.ariaLabel}" ></div>${R(e,()=>m`<primer-input-error slot="error">${S(e,{id:e})}</primer-input-error>`,()=>f)}</primer-input-wrapper>`}};d([C({context:Rt,subscribe:!0})],oe.prototype,"cardFormContext",1),d([C({context:Qe,subscribe:!0}),p()],oe.prototype,"computedStyles",2),d([p({type:String})],oe.prototype,"label",1),d([p({type:String})],oe.prototype,"placeholder",1),d([p({type:String,attribute:"aria-label"})],oe.prototype,"ariaLabel",1);var ts=y` :host { display: contents; } .card-number-container { display: flex; align-items: center; width: 100%; position: relative; gap: var(--primer-space-small); } #cardNumber { flex: 1; display: flex; width: 100%; } .network-selector-container { display: flex; align-items: center; z-index: 2; } `;var pt=y` .card-input-slot { display: flex; } `;var je=class extends oe{constructor(){super();this.config={inputType:"cardNumber",containerSelector:"#cardNumber",errorName:"cardNumber-card",translations:{label:{id:"cardNumber",defaultMessage:"Card Number"},placeholder:"4111 1111 1111 1111",ariaLabel:{id:"cardNumber",defaultMessage:"Card Number"}}};this.handleNetworkSelected=e=>{let{network:r}=e.detail;this.cardFormContext&&this.cardFormContext.setCardNetwork(r)};this.childUpdated()}renderInput(){if(this.hostedInputController.setupTask.status===rt.ERROR)return f;let e=this.getError();return m`<primer-input-wrapper .focusWithin="${this.hostedInputController.meta.active}" .hasError=${!!e} >${R(!this.cardFormContext?.hideLabels,()=>m`<primer-input-label slot="label" >${this.label}</primer-input-label >`,()=>f)}<div slot="input" class="card-number-container" aria-label="${this.ariaLabel}" ><div id="${this.config.containerSelector.substring(1)}"></div><div class="network-selector-container"><primer-card-network-selector @network-selected=${this.handleNetworkSelected} ></primer-card-network-selector></div></div>${R(e,r=>m`<primer-input-error slot="error">${S(r,{id:r})}</primer-input-error>`,()=>f)}</primer-input-wrapper>`}render(){return this.renderInput()}};je.styles=[P,pt,ts],je=d([v("primer-input-card-number"),k()],je);var rs=y` :host { display: contents; } `;var Ke=class extends oe{constructor(){super();this.config={inputType:"cvv",containerSelector:"#cvv",errorName:"cvv-card",translations:{label:"CVV",placeholder:"123"}};this.childUpdated()}render(){return this.renderInput()}};Ke.styles=[P,pt,rs],Ke=d([v("primer-input-cvv"),k()],Ke);var is=y` :host { display: contents; } `;var Ge=class extends oe{constructor(){super();this.config={inputType:"expire",containerSelector:"#expiry",errorName:"expiryDate-card",translations:{label:{id:"cardExpiry",defaultMessage:"Expiry Date"},placeholder:{id:"cardExpiryPlaceholder",defaultMessage:"MM/YY"},ariaLabel:{id:"cardExpiry",defaultMessage:"Expiry Date"}}};this.childUpdated()}render(){return this.renderInput()}};Ge.styles=[P,pt,is],Ge=d([v("primer-input-card-expiry"),k()],Ge);var os=y` :host { display: contents; } `;var qe=class extends oe{constructor(){super();this.config={inputType:"cardholderName",containerSelector:"#cardFormName",errorName:"cardholderName",translations:{label:{id:"cardholderNameLabel",defaultMessage:"Cardholder Name"},placeholder:{id:"cardholderNamePlaceholder",defaultMessage:"Name on card"},ariaLabel:{id:"cardholderNameLabel",defaultMessage:"Cardholder Name"}},onInput:e=>this.handleInput(e)};this.childUpdated()}handleInput(e){this.cardFormContext?.setCardholderName?.(e)}render(){return this.renderInput()}};qe.styles=[P,pt,os],qe=d([v("primer-input-card-holder-name"),k()],qe);var as=y` :host { display: contents; } `;var K=class extends g{constructor(){super(...arguments);this._userAssignedProps=new Set;this._internalButtonText="";this.headlessInstance=null;this.clientOptions=null;this.sdkState=null;this.cardFormContext=null;this.analyticsUtils=null;this.contextEventsController=null;this.variant="primary";this.disabled=!1;this.handleClick=e=>{if(e.preventDefault(),this.disabled)return;G({eventName:"PAYMENT_SUBMITTED",paymentMethod:"PAYMENT_CARD"});let r=new CustomEvent("primer:card-submit",{bubbles:!0,composed:!0,detail:{source:"primer-card-form-submit"}});this.dispatchEvent(r)}}get buttonText(){return this._userAssignedProps.has("buttonText")?this._internalButtonText:S("pay",{id:"pay"})}set buttonText(e){let r=this.buttonText;e!==""?(this._userAssignedProps.add("buttonText"),this._internalButtonText=e):(this._userAssignedProps.delete("buttonText"),this._internalButtonText=""),this.requestUpdate("buttonText",r)}get submitButtonConfig(){return this.clientOptions?.submitButton??null}get shouldShowBuiltInButton(){return this.submitButtonConfig?.useBuiltInButton??!0}render(){if(!this.shouldShowBuiltInButton)return f;let e=this.submitButtonConfig?.amountVisible?this.headlessInstance?.getUIOrderAmount():null,r=e?` ${e}`:f,o=this.disabled||this.cardFormContext?.disabled||!1;return m`<primer-button type="submit" variant=${this.variant} ?disabled=${o} @click=${this.handleClick} .loading=${!!this.sdkState?.isProcessing} data-submit >${this.buttonText}${r}</primer-button>`}};K.styles=[P,as],d([p({type:String})],K.prototype,"buttonText",1),d([C({context:B,subscribe:!0}),p({type:Object})],K.prototype,"headlessInstance",2),d([C({context:ne,subscribe:!0}),p({type:Object})],K.prototype,"clientOptions",2),d([C({context:F,subscribe:!0}),p()],K.prototype,"sdkState",2),d([C({context:Rt,subscribe:!0}),p()],K.prototype,"cardFormContext",2),d([C({context:Xe,subscribe:!0}),p({attribute:!1})],K.prototype,"analyticsUtils",2),d([C({context:wt,subscribe:!0}),p({attribute:!1})],K.prototype,"contextEventsController",2),d([p({type:String})],K.prototype,"variant",2),d([p({type:Boolean})],K.prototype,"disabled",2),K=d([v("primer-card-form-submit"),k()],K);var ho=()=>new uo,uo=class{},mo=new WeakMap,di=Ae(class extends dt{render(i){return f}update(i,[t]){let e=t!==this.G;return e&&this.G!==void 0&&this.rt(void 0),(e||this.lt!==this.ct)&&(this.G=t,this.ht=i.options?.host,this.rt(this.ct=i.element)),f}rt(i){if(this.isConnected||(i=void 0),typeof this.G=="function"){let t=this.ht??globalThis,e=mo.get(t);e===void 0&&(e=new WeakMap,mo.set(t,e)),e.get(this.G)!==void 0&&this.G.call(this.ht,void 0),e.set(this.G,i),i!==void 0&&this.G.call(this.ht,i)}else this.G.value=i}get lt(){return typeof this.G=="function"?mo.get(this.ht??globalThis)?.get(this.G):this.G?.value}disconnected(){this.lt===this.ct&&this.rt(void 0)}reconnected(){this.rt(this.ct)}});var ns=y` :host { display: flex; align-items: center; position: relative; } .network-selector { display: flex; align-items: center; cursor: pointer; background: none; padding: unset; border: none; transition: opacity var(--primer-animation-duration) var(--primer-animation-easing); outline: none; gap: var(--primer-space-xsmall); } .network-selector:hover { opacity: 0.8; } .network-selector:focus-visible { outline: 2px solid var(--primer-color-focus); border-radius: var(--primer-radius-xsmall); } .network-icon { width: var(--primer-size-large); height: var( --primer-size-medium ); /* Added explicit height to maintain aspect ratio */ object-fit: contain; } .caret { margin-left: var(--primer-space-xsmall); transition: transform var(--primer-animation-duration) var(--primer-animation-easing); color: var(--primer-color-icon-primary); } .caret.open { transform: rotate(180deg); } .dropdown { position: absolute; top: 100%; right: 0; width: max-content; min-width: calc(var(--primer-size-xxxlarge) * 3); background: var(--primer-color-gray-000); border-radius: var(--primer-radius-small); box-shadow: 0 var(--primer-space-xxsmall) var(--primer-space-large) rgba(0, 0, 0, 0.15); z-index: 10; overflow: hidden; border: 1px solid var(--primer-color-border-outlined-default); } .dropdown:not(.open) { display: none; } .dropdown.open { display: block; max-height: calc(var(--primer-size-xxxlarge) * 4); overflow-y: auto; } .network-option { display: flex; align-items: center; padding: var(--primer-space-small) var(--primer-space-medium); cursor: pointer; transition: background-color var(--primer-animation-duration) var(--primer-animation-easing); position: relative; outline: none; background-color: transparent; } /* Only apply hover effect when not in keyboard navigation mode */ .network-option:hover { background-color: var(--primer-color-gray-100); } /* Apply focused style only when the focused class is present (keyboard navigation) */ .network-option.focused { background-color: var(--primer-color-gray-100); } .network-option:focus-visible { outline: 2px solid var(--primer-color-focus); outline-offset: -2px; } .network-option-icon { width: var(--primer-size-medium); height: var(--primer-size-small); margin-right: var(--primer-space-small); object-fit: contain; } .network-name { font-size: var(--primer-typography-body-medium-size); font-family: var(--primer-typography-body-medium-font); line-height: var(--primer-typography-body-medium-line-height); letter-spacing: var(--primer-typography-body-medium-letter-spacing); white-space: nowrap; color: var(--primer-color-text-primary); flex: 1; } .checkmark { margin-left: var(--primer-space-small); color: var(--primer-color-brand); width: var(--primer-size-small); height: var(--primer-size-small); } `;var ae=class extends g{constructor(){super(...arguments);this.cardNetworks=null;this.headlessUtils=null;this.selectedCardNetwork=null;this.isDropdownOpen=!1;this.focusedNetworkIndex=0;this.isKeyboardNavigation=!1;this.buttonRef=ho();this.dropdownRef=ho();this.networkOptionRefs=[];this.toggleDropdown=e=>{this.isKeyboardNavigation=!1,e.stopPropagation(),this.getSelectableNetworks().length>1&&(this.isDropdownOpen=!this.isDropdownOpen,this.isDropdownOpen&&(this.focusedNetworkIndex=this.getSelectedNetworkIndex()))};this.handleClickOutside=e=>{this.isDropdownOpen&&(this.contains(e.target)||(this.isDropdownOpen=!1,this.isKeyboardNavigation=!1))};this.handleMouseMove=()=>{this.isKeyboardNavigation&&(this.isKeyboardNavigation=!1)};this.handleKeyDown=e=>{if(!(!(this.getSelectableNetworks().length>1)||!(this.contains(e.target)||this===e.target||this.isDropdownOpen&&e.target===document.body)))switch(this.isKeyboardNavigation=!0,e.key){case"ArrowDown":e.preventDefault(),this.isDropdownOpen?(this.focusedNetworkIndex=(this.focusedNetworkIndex+1)%this.getSelectableNetworks().length,this.focusNetworkOption()):(this.isDropdownOpen=!0,this.focusedNetworkIndex=this.getSelectedNetworkIndex());break;case"ArrowUp":e.preventDefault(),this.isDropdownOpen?(this.focusedNetworkIndex=(this.focusedNetworkIndex-1+this.getSelectableNetworks().length)%this.getSelectableNetworks().length,this.focusNetworkOption()):(this.isDropdownOpen=!0,this.focusedNetworkIndex=this.getSelectedNetworkIndex());break;case"Enter":case" ":this.isDropdownOpen&&this.focusedNetworkIndex>=0?(e.preventDefault(),this.selectNetwork(e,this.getSelectableNetworks()[this.focusedNetworkIndex])):!this.isDropdownOpen&&this.buttonRef.value===document.activeElement&&(e.preventDefault(),this.isDropdownOpen=!0,this.focusedNetworkIndex=this.getSelectedNetworkIndex());break;case"Escape":this.isDropdownOpen&&(e.preventDefault(),this.isDropdownOpen=!1,this.buttonRef.value?.focus());break;case"Tab":this.isDropdownOpen&&(this.isDropdownOpen=!1);break}};this.handleDocumentKeyDown=e=>{this.isDropdownOpen&&this.handleKeyDown(e)}}getNetworkIconUrl(e){return this.headlessUtils?.getCardNetworkAsset(e.network)?.cardUrl}getSelectableNetworks(){return this.cardNetworks?.selectableCardNetworks||[]}getDetectedNetwork(){return this.selectedCardNetwork??(this.cardNetworks?.detectedCardNetwork||null)}getSelectedNetworkIndex(){let e=this.getDetectedNetwork();if(!e)return 0;let r=this.getSelectableNetworks().findIndex(o=>o.network===e.network);return r>=0?r:0}selectNetwork(e,r){e.stopPropagation(),this.selectedCardNetwork=r,this.isDropdownOpen=!1,this.buttonRef.value?.focus(),this.cardNetworks&&this.dispatchEvent(new CustomEvent("network-selected",{detail:{network:r.network},bubbles:!0,composed:!0}))}focusNetworkOption(){requestAnimationFrame(()=>{this.networkOptionRefs[this.focusedNetworkIndex]&&this.networkOptionRefs[this.focusedNetworkIndex].focus()})}setNetworkOptionRef(e,r){this.networkOptionRefs[r]=e}connectedCallback(){super.connectedCallback(),setTimeout(()=>{document.addEventListener("click",this.handleClickOutside),document.addEventListener("mousemove",this.handleMouseMove),this.addEventListener("keydown",this.handleKeyDown),document.addEventListener("keydown",this.handleDocumentKeyDown)},0)}disconnectedCallback(){document.removeEventListener("click",this.handleClickOutside),document.removeEventListener("keydown",this.handleDocumentKeyDown),document.removeEventListener("mousemove",this.handleMouseMove),this.removeEventListener("keydown",this.handleKeyDown),super.disconnectedCallback()}render(){if(this.cardNetworks?.isLoading)return m`<primer-spinner size="small" compact></primer-spinner>`;let e=this.getSelectableNetworks();if(!this.getDetectedNetwork()&&e.length===0)return m`<primer-icon name="payment-card" size="sm"></primer-icon>`;let r=this.getDetectedNetwork()||(e.length>0?e[0]:null);if(!r)return m`<primer-icon name="payment-card" size="sm"></primer-icon>`;let o=e.length>1;return m`<button ${di(this.buttonRef)} class="network-selector" @click=${this.toggleDropdown} @keydown=${a=>{(a.key===" "||a.key==="Enter")&&o&&(a.preventDefault(),this.isDropdownOpen=!this.isDropdownOpen,this.isDropdownOpen&&(this.focusedNetworkIndex=this.getSelectedNetworkIndex()))}} aria-label=${o?`Selected card network: ${r.displayName}. Click to change.`:`Card network: ${r.displayName}`} aria-expanded=${o?this.isDropdownOpen:f} aria-haspopup=${o?"true":f} aria-controls=${o?"network-dropdown":f} ><img class="network-icon" src=${this.getNetworkIconUrl(r)} alt=${r.displayName} />${R(o,()=>m`<primer-icon class="caret ${this.isDropdownOpen?"open":""}" size="sm" name="chevron-down" ></primer-icon>`,()=>f)}</button>${R(this.isDropdownOpen,()=>m`<div ${di(this.dropdownRef)} id="network-dropdown" class="dropdown open" role="listbox" aria-label="Select card network" >${e.map((a,n)=>m`<div ${di(l=>this.setNetworkOptionRef(l,n))} class="network-option ${this.isKeyboardNavigation&&n===this.focusedNetworkIndex?"focused":""}" @click=${l=>this.selectNetwork(l,a)} @keydown=${l=>{(l.key==="Enter"||l.key===" ")&&this.selectNetwork(l,a)}} role="option" aria-selected=${a.network===r.network} tabindex="${n===this.focusedNetworkIndex?"0":"-1"}" ><img class="network-option-icon" src=${this.getNetworkIconUrl(a)} alt=${a.displayName} /><span class="network-name">${a.displayName}</span>${R(a.network===r.network,()=>m`<primer-icon class="checkmark" name="checkmark" size="sm" ></primer-icon>`,()=>f)}</div>`)}</div>`,()=>f)} `}};ae.styles=[P,ns],d([C({context:dr,subscribe:!0})],ae.prototype,"cardNetworks",2),d([C({context:B,subscribe:!0})],ae.prototype,"headlessUtils",2),d([M()],ae.prototype,"selectedCardNetwork",2),d([M()],ae.prototype,"isDropdownOpen",2),d([M()],ae.prototype,"focusedNetworkIndex",2),d([M()],ae.prototype,"isKeyboardNavigation",2),ae=d([v("primer-card-network-selector")],ae);var ss=y` :host { display: block; margin-top: var(--primer-space-medium); margin-bottom: var(--primer-space-medium); } .other-payment-methods-container { width: 100%; } .other-payment-methods-content { padding: var(--primer-space-medium) 0; } .primer-loader { display: flex; justify-content: center; align-items: center; } `;var mt=class extends g{constructor(){super(...arguments);this.vaultManager=null}render(){if(this.vaultManager?.isLoading)return f;let e=this.vaultManager?.showEmptyState&&this.vaultManager?.vaultedPaymentMethods.length;return!this.vaultManager||!this.vaultManager.enabled||!e?m`<slot name="other-payments"></slot>`:m`<div class="other-payment-methods-container"><primer-collapsable buttonVariant="secondary" .expanded="${this.vaultManager?.vaultedPaymentMethods.length===0}" .header="${S("navigateToPaymentMethods",{id:"navigateToPaymentMethods"})}" ><div class="other-payment-methods-content"><slot name="other-payments"></slot></div></primer-collapsable></div>`}};mt.styles=[ss],d([C({context:le,subscribe:!0}),p({type:Object,attribute:!1})],mt.prototype,"vaultManager",2),mt=d([v("primer-show-other-payments")],mt);var ls=y` :host { height: calc( ${we(at)} + calc(2 * var(--primer-space-medium)) ); display: flex; } .native-button-container { width: 100%; height: 100%; position: relative; } /* Disabled state styling - handled via JavaScript overlay for iframe compatibility */ :host([disabled]) { cursor: not-allowed; } `;var Pe=class extends g{constructor(){super();this.paymentManagers=new Map;this.computedStyles=null;this.disabled=!1;this._buttonId="button-container";this.loadManagerTask=new D(this,{args:()=>[this.paymentMethod?.type],task:([e])=>{if(!e)return L;let r=this.paymentManagers.get(e)?.manager;if(!r)throw new Error(`No manager found for payment method type ${e}`);return r}}),this.nativeButtonTask=new D(this,{args:()=>[this.loadManagerTask.value],task:async([e])=>{if(!e)return L;await this.updateComplete;let r=this.shadowRoot?.getElementById(this._buttonId);if(!r)return;let o=this.calculateButtonHeight(),a=e.createButton(),n=this.createRenderOptions(o);return await a.render(this.paymentMethod?.type==="GOOGLE_PAY"?this.shadowRoot?.getRootNode():r,n),this.disabled&&await a.setDisabled(this.disabled),this.disabled&&(await this.updateComplete,this.updateDisabledOverlay()),a}})}attributeChangedCallback(e,r,o){if(super.attributeChangedCallback(e,r,o),e==="disabled"&&r!==o){let a=o!==null,n=this.nativeButtonTask.value;n&&n.setDisabled(a)}}calculateButtonHeight(){return typeof window>"u"||!this.isConnected?0:parseFloat(getComputedStyle(this).height)}createRenderOptions(e){let r=this.paymentMethod?.type;if(r==="GOOGLE_PAY")return{style:{shadowRoot:!0}};if(r==="APPLE_PAY")return{style:{buttonHeight:e}};if(r==="PAYPAL"){let n=Math.max(25,Math.min(55,e));return e>55&&_.warn(`PayPal button height (${e}px) exceeds maximum allowed height of 55px. Button will be capped at 55px. This is a PayPal SDK limitation.`),{style:{buttonHeight:n}}}return{style:{buttonHeight:e}}}updated(e){e.has("paymentMethod")&&this.paymentMethod&&(this._buttonId=`button-container-${this.paymentMethod.type}`),e.has("disabled")&&this.updateDisabledOverlay()}updateDisabledOverlay(){this.paymentMethod?.type==="GOOGLE_PAY"?this.updateGooglePayOverlay():this.updateRegularOverlay()}updateGooglePayOverlay(){let e=null;if(e=this.shadowRoot?.getRootNode()?.querySelector(".gpay-card-info-container-fill"),e||(e=document.querySelector(".gpay-card-info-container-fill")),e||(e=this.shadowRoot?.querySelector(".gpay-card-info-container-fill")),!e){setTimeout(()=>this.updateGooglePayOverlay(),100);return}let o=e.querySelector(".disabled-overlay");if(o&&o.remove(),this.disabled){let a=document.createElement("div");a.className="disabled-overlay",a.style.cssText=`
|
|
199
199
|
position: absolute;
|
|
200
200
|
top: 0;
|
|
201
201
|
left: 0;
|
|
@@ -219,4 +219,4 @@ primer-checkout:not([js-initialized]):not([loader-disabled])::after {
|
|
|
219
219
|
z-index: 1000;
|
|
220
220
|
pointer-events: all;
|
|
221
221
|
backdrop-filter: grayscale(100%);
|
|
222
|
-
`,e.appendChild(o)}}render(){return this.loadManagerTask.render({error:()=>f,complete:()=>m`<div class="native-button-container" id="${this._buttonId}"></div>`,pending:()=>f})}};Pe.styles=[
|
|
222
|
+
`,e.appendChild(o)}}render(){return this.loadManagerTask.render({error:()=>f,complete:()=>m`<div class="native-button-container" id="${this._buttonId}"></div>`,pending:()=>f})}};Pe.styles=[P,ls],d([p({type:Object})],Pe.prototype,"paymentMethod",2),d([C({context:se,subscribe:!0}),p()],Pe.prototype,"paymentManagers",2),d([C({context:Qe,subscribe:!0}),p()],Pe.prototype,"computedStyles",2),d([p({type:Boolean,attribute:"disabled"})],Pe.prototype,"disabled",2),Pe=d([v("primer-native-payment")],Pe);var Ot=class extends g{render(){return m`<primer-checkout-state type="complete"></primer-checkout-state>`}};Ot=d([v("primer-checkout-complete")],Ot);var _t=class extends g{constructor(){super(...arguments);this.sdkState=null}render(){return m`<primer-checkout-state type="failure" description=${this.sdkState?.error?.message||""} ></primer-checkout-state>`}};d([C({context:F,subscribe:!0}),p()],_t.prototype,"sdkState",2),_t=d([v("primer-checkout-error")],_t);var ds=y` :host { display: block; width: 100%; } `;var We=class extends g{constructor(){super(...arguments);this.showProcessingErrors=!0}get shouldShowError(){return!this.sdkState||this.sdkState.isProcessing?!1:!!(this.sdkState.failure&&this.showProcessingErrors)}render(){return this.sdkState?m`<primer-error-message message="${S(this.sdkState.failure?.message??"",{id:"tokenizationError"})}" ?visible="${this.shouldShowError}" ></primer-error-message>`:f}};We.styles=[ds],d([C({context:F,subscribe:!0}),M()],We.prototype,"sdkState",2),d([p({type:Boolean,attribute:"show-processing-errors"})],We.prototype,"showProcessingErrors",2),We=d([v("primer-error-message-container")],We);var cs=y` :host { display: contents; } .primer-main-list { display: flex; flex-direction: column; gap: var(--primer-space-small); } .primer-is-processing { opacity: 0.5; pointer-events: none; } primer-vault-manager { margin-bottom: var(--primer-space-xlarge); } `;var $e=class extends g{constructor(){super(...arguments);this.hasAssignedContent=!1;this.onSlotChange=e=>{let o=e.target.assignedNodes({flatten:!0});this.hasAssignedContent=o.length>0,this.requestUpdate()};this.paymentMethods=null;this.sdkState=null;this.clientOptions=null}render(){return this.sdkState?.isSuccessful?m`<slot name="checkout-complete"><primer-checkout-complete></primer-checkout-complete></slot>`:m`<slot name="payments" @slotchange=${this.onSlotChange}></slot>${R(this.hasAssignedContent,()=>f,()=>m`<div class=${Z({"primer-is-processing":!!this.sdkState?.isProcessing})} ><primer-vault-manager></primer-vault-manager><primer-show-other-payments><div slot="other-payments" class="primer-main-list">${this.paymentMethods?.toArray().map(e=>m`<primer-payment-method type=${e.type} ?disabled=${this.clientOptions?.disabledPayments===!0} ></primer-payment-method>`)}</div></primer-show-other-payments><primer-error-message-container></primer-error-message-container></div>`)} `}};$e.styles=[P,cs],d([C({context:et,subscribe:!0}),p()],$e.prototype,"paymentMethods",2),d([C({context:F,subscribe:!0}),p()],$e.prototype,"sdkState",2),d([C({context:ne,subscribe:!0}),p()],$e.prototype,"clientOptions",2),$e=d([v("primer-main")],$e);function iT(){sn(),ln()}export{he as AchPayment,de as Button,ee as CardForm,Ke as CardFormCVV,ae as CardFormCardNetworkSelector,je as CardFormCardNumber,Be as CardFormError,Ge as CardFormExpiry,qe as CardFormName,K as CardFormSubmit,ce as Collapsable,xe as Dialog,be as DynamicPayment,Re as ErrorMessage,We as ErrorMessageContainer,Or as InitializedPayments,$ as Input,He as InputLabel,Ne as InputWrapper,Pe as NativePayment,Se as PaymentMethod,ve as PaymentMethodContainer,De as PaymentMethodContentComponent,lt as Portal,ie as PortalDialogComponent,Ot as PrimerCheckoutComplete,ue as PrimerCheckoutComponent,_t as PrimerCheckoutFailure,Fe as PrimerCheckoutState,Le as PrimerIcon,X as PrimerKlarna,$e as PrimerMain,Ce as RedirectPayment,mt as ShowOtherPayments,ke as Spinner,j as VaultCvvInput,fe as VaultDeleteConfirmation,ze as VaultEmptyState,Oe as VaultErrorMessage,Q as VaultManager,_e as VaultManagerHeader,pe as VaultPaymentMethodItem,W as VaultPaymentSubmit,bd as injectDarkTheme,vd as injectLightTheme,sn as injectLoaderStyles,ln as injectThemeStyles,iT as loadPrimer};
|