@vue-stripe/vue-stripe
Version:
Vue Stripe elements and composables for Stripe.js
2 lines (1 loc) • 35 kB
JavaScript
(function(m,k){typeof exports=="object"&&typeof module<"u"?k(exports,require("@stripe/stripe-js"),require("vue-demi")):typeof define=="function"&&define.amd?define(["exports","@stripe/stripe-js","vue-demi"],k):(m=typeof globalThis<"u"?globalThis:m||self,k(m.VueStripe={},m.Stripe,m.VueDemi))})(this,(function(m,k,e){"use strict";const S=Symbol("stripe"),v=Symbol("stripe-elements"),w=Symbol("vue-stripe-config");class h extends Error{constructor(f){super(f),this.name="VueStripeProviderError"}}class E extends Error{constructor(f){super(f),this.name="VueStripeElementsError"}}class C extends Error{constructor(f){super(f),this.name="VueStripeLoadError"}}function R(c,f){switch(c){case"provider":return new h(f);case"elements":return new E(f);case"load":return new C(f);default:return new Error(f)}}const $={name:"vue-stripe",version:"5.3.0",url:"https://vuestripe.com",partner_id:"pp_partner_IqtOXpBSuz0IE2"},U={key:0,class:"vue-stripe-error"},j={class:"vue-stripe-error-message"},A={key:1,class:"vue-stripe-loading"},L={key:2},F=e.defineComponent({__name:"VueStripeProvider",props:{publishableKey:{},stripeKey:{},stripeAccount:{},apiVersion:{},locale:{},options:{}},emits:["load","error"],setup(c,{emit:f}){const p=c,l=f,o=e.ref(null),s=e.ref(!0),t=e.ref(null),n=p.publishableKey||p.stripeKey;if(!n)throw new h("publishableKey or stripeKey is required");const a={publishableKey:n,stripeAccount:p.stripeAccount||p.options?.stripeAccount,apiVersion:p.apiVersion||p.options?.apiVersion,locale:p.locale||p.options?.locale},u=async()=>{try{s.value=!0,t.value=null;const i={},r=p.stripeAccount||p.options?.stripeAccount,d=p.apiVersion||p.options?.apiVersion,y=p.locale||p.options?.locale;if(r&&(i.stripeAccount=r),d&&(i.apiVersion=d),y&&(i.locale=y),o.value=await k.loadStripe(n,i),!o.value)throw new h("Failed to initialize Stripe");o.value.registerAppInfo($),l("load",o.value)}catch(i){const r=i instanceof Error?i.message:"Failed to load Stripe";t.value=r,console.error("[Vue Stripe] Initialization error:",r),l("error",i instanceof Error?i:new Error(r))}finally{s.value=!1}};return e.onMounted(()=>{u()}),e.provide(w,a),e.provide(S,{stripe:o,loading:s,error:t}),(i,r)=>e.unref(t)?(e.openBlock(),e.createElementBlock("div",U,[e.renderSlot(i.$slots,"error",{error:e.unref(t)},()=>[e.createElementVNode("div",j,e.toDisplayString(e.unref(t)),1)],!0)])):e.unref(s)?(e.openBlock(),e.createElementBlock("div",A,[e.renderSlot(i.$slots,"loading",{},()=>[r[0]||(r[0]=e.createElementVNode("div",{class:"vue-stripe-loading-message"}," Loading Stripe... ",-1))],!0)])):(e.openBlock(),e.createElementBlock("div",L,[e.renderSlot(i.$slots,"default",{},void 0,!0)]))}}),g=(c,f)=>{const p=c.__vccOpts||c;for(const[l,o]of f)p[l]=o;return p},z=g(F,[["__scopeId","data-v-573ddc51"]]),K={key:0,class:"vue-stripe-elements-error"},x={class:"vue-stripe-error-message"},q={key:1,class:"vue-stripe-elements-loading"},G={key:2},O=g(e.defineComponent({__name:"VueStripeElements",props:{clientSecret:{},mode:{},currency:{},amount:{},setupFutureUsage:{},captureMethod:{},paymentMethodTypes:{},options:{}},emits:["ready","error"],setup(c,{emit:f}){const p=f,l=c,o=e.inject(S);if(!o)throw new h("VueStripeElements must be used within VueStripeProvider");const s=e.ref(null),t=e.ref(!0),n=e.ref(null),a=()=>{if(!o.stripe.value){n.value="Stripe instance not available",t.value=!1;return}try{n.value=null,t.value=!0;const u={...l.options};l.clientSecret&&(u.clientSecret=l.clientSecret),l.mode&&(u.mode=l.mode),l.currency&&(u.currency=l.currency),l.amount!==void 0&&(u.amount=l.amount),l.setupFutureUsage&&(u.setupFutureUsage=l.setupFutureUsage),l.captureMethod&&(u.captureMethod=l.captureMethod),l.paymentMethodTypes&&(u.paymentMethodTypes=l.paymentMethodTypes),s.value=o.stripe.value.elements(u),t.value=!1,e.nextTick(()=>{p("ready",s.value)})}catch(u){const i=u instanceof Error?u.message:"Failed to create elements";n.value=i,t.value=!1,console.error("[Vue Stripe] Elements creation error:",i),p("error",i)}};return e.watch(()=>o.stripe.value,u=>{u&&!s.value&&a()},{immediate:!0}),e.watch(()=>l.clientSecret,()=>{o.stripe.value&&a()}),e.watch(()=>[l.mode,l.currency,l.amount,l.setupFutureUsage],()=>{o.stripe.value&&a()}),e.onMounted(()=>{o.stripe.value&&!s.value&&a()}),e.provide(v,{elements:s,loading:t,error:n}),(u,i)=>e.unref(n)?(e.openBlock(),e.createElementBlock("div",K,[e.renderSlot(u.$slots,"error",{error:e.unref(n)},()=>[e.createElementVNode("div",x,e.toDisplayString(e.unref(n)),1)],!0)])):e.unref(t)?(e.openBlock(),e.createElementBlock("div",q,[e.renderSlot(u.$slots,"loading",{},()=>[i[0]||(i[0]=e.createElementVNode("div",{class:"vue-stripe-loading-message"}," Initializing Elements... ",-1))],!0)])):(e.openBlock(),e.createElementBlock("div",G,[e.renderSlot(u.$slots,"default",{},void 0,!0)]))}}),[["__scopeId","data-v-c54b80f7"]]),W={class:"vue-stripe-payment-element"},X={key:0,class:"vue-stripe-payment-element-error"},H={class:"vue-stripe-error-message"},Q={key:1,class:"vue-stripe-payment-element-loader"},Y=g(e.defineComponent({__name:"VueStripePaymentElement",props:{options:{}},emits:["ready","change","focus","blur","escape","loaderstart","loaderstop"],setup(c,{expose:f,emit:p}){const l=c,o=p,s=e.ref(),t=e.ref(null),n=e.ref(!0),a=e.ref(null),u=e.inject(v);if(!u)throw new E("VueStripePaymentElement must be used within VueStripeElements");const i=()=>{if(!u.elements.value){a.value="Elements instance not available",n.value=!1;return}if(!s.value){a.value="Mount point not available",n.value=!1;return}try{a.value=null,n.value=!0,t.value=u.elements.value.create("payment",l.options),t.value.on("ready",()=>{n.value=!1,o("ready",t.value)}),t.value.on("change",d=>{o("change",d)}),t.value.on("focus",()=>{o("focus")}),t.value.on("blur",()=>{o("blur")}),t.value.on("escape",()=>{o("escape")});const r=t.value;r.on("loaderstart",()=>{o("loaderstart")}),r.on("loaderstop",()=>{o("loaderstop")}),t.value.mount(s.value)}catch(r){const d=r instanceof Error?r.message:"Failed to create payment element";a.value=d,n.value=!1,console.error("[Vue Stripe] Payment element creation error:",d)}};return e.watch(()=>l.options,r=>{t.value&&r&&t.value.update(r)},{deep:!0}),e.watch(()=>u.elements.value,r=>{r&&s.value&&!t.value&&i()},{immediate:!0}),e.onMounted(()=>{u.elements.value&&s.value&&!t.value&&i()}),e.onUnmounted(()=>{t.value&&t.value.destroy()}),f({element:t,loading:n,error:a}),(r,d)=>(e.openBlock(),e.createElementBlock("div",W,[e.unref(a)?(e.openBlock(),e.createElementBlock("div",X,[e.renderSlot(r.$slots,"error",{error:e.unref(a)},()=>[e.createElementVNode("div",H,e.toDisplayString(e.unref(a)),1)],!0)])):e.createCommentVNode("",!0),e.createElementVNode("div",{ref_key:"elementRef",ref:s,class:e.normalizeClass(["vue-stripe-payment-element-mount",{"vue-stripe-payment-element-loading":e.unref(n)}])},null,2),e.unref(n)?(e.openBlock(),e.createElementBlock("div",Q,[e.renderSlot(r.$slots,"loading",{},()=>[d[0]||(d[0]=e.createElementVNode("div",{class:"vue-stripe-loading-message"}," Loading payment form... ",-1))],!0)])):e.createCommentVNode("",!0)]))}}),[["__scopeId","data-v-2477e9df"]]),Z={class:"vue-stripe-express-checkout-element"},J={key:0,class:"vue-stripe-express-checkout-element-error"},D={class:"vue-stripe-error-message"},ee={key:1,class:"vue-stripe-express-checkout-element-loader"},te=g(e.defineComponent({__name:"VueStripeExpressCheckoutElement",props:{options:{}},emits:["ready","click","confirm","cancel","shippingaddresschange","shippingratechange"],setup(c,{expose:f,emit:p}){const l=c,o=p,s=e.ref(),t=e.ref(null),n=e.ref(!0),a=e.ref(null),u=e.inject(v);if(!u)throw new E("VueStripeExpressCheckoutElement must be used within VueStripeElements");const i=()=>{if(!u.elements.value){a.value="Elements instance not available",n.value=!1;return}if(!s.value){a.value="Mount point not available",n.value=!1;return}try{a.value=null,n.value=!0,t.value=u.elements.value.create("expressCheckout",l.options),t.value.on("ready",r=>{n.value=!1,o("ready",r)}),t.value.on("click",r=>{o("click",r)}),t.value.on("confirm",r=>{o("confirm",r)}),t.value.on("cancel",()=>{o("cancel")}),t.value.on("shippingaddresschange",r=>{o("shippingaddresschange",r)}),t.value.on("shippingratechange",r=>{o("shippingratechange",r)}),t.value.mount(s.value)}catch(r){const d=r instanceof Error?r.message:"Failed to create express checkout element";a.value=d,n.value=!1,console.error("[Vue Stripe] Express checkout element creation error:",d)}};return e.watch(()=>l.options,r=>{t.value&&r&&t.value.update(r)},{deep:!0}),e.watch(()=>u.elements.value,r=>{r&&s.value&&!t.value&&i()},{immediate:!0}),e.onMounted(()=>{u.elements.value&&s.value&&!t.value&&i()}),e.onUnmounted(()=>{t.value&&t.value.destroy()}),f({element:t,loading:n,error:a}),(r,d)=>(e.openBlock(),e.createElementBlock("div",Z,[e.unref(a)?(e.openBlock(),e.createElementBlock("div",J,[e.renderSlot(r.$slots,"error",{error:e.unref(a)},()=>[e.createElementVNode("div",D,e.toDisplayString(e.unref(a)),1)],!0)])):e.createCommentVNode("",!0),e.createElementVNode("div",{ref_key:"elementRef",ref:s,class:e.normalizeClass(["vue-stripe-express-checkout-element-mount",{"vue-stripe-express-checkout-element-loading":e.unref(n)}])},null,2),e.unref(n)?(e.openBlock(),e.createElementBlock("div",ee,[e.renderSlot(r.$slots,"loading",{},()=>[d[0]||(d[0]=e.createElementVNode("div",{class:"vue-stripe-loading-message"}," Loading express checkout... ",-1))],!0)])):e.createCommentVNode("",!0)]))}}),[["__scopeId","data-v-20294cda"]]),re={class:"vue-stripe-card-element"},ne={key:0,class:"vue-stripe-card-element-error"},ae={class:"vue-stripe-error-message"},oe={key:1,class:"vue-stripe-card-element-loader"},le=g(e.defineComponent({__name:"VueStripeCardElement",props:{options:{}},emits:["ready","change","focus","blur","escape"],setup(c,{expose:f,emit:p}){const l=c,o=p,s=e.ref(),t=e.ref(null),n=e.ref(!0),a=e.ref(null),u=e.inject(v);if(!u)throw new E("VueStripeCardElement must be used within VueStripeElements");const i=()=>{if(!u.elements.value){a.value="Elements instance not available",n.value=!1;return}if(!s.value){a.value="Mount point not available",n.value=!1;return}try{a.value=null,n.value=!0,t.value=u.elements.value.create("card",l.options),t.value.on("ready",()=>{n.value=!1,o("ready",t.value)}),t.value.on("change",r=>{r.error?a.value=r.error.message:a.value=null,o("change",r)}),t.value.on("focus",()=>{o("focus")}),t.value.on("blur",()=>{o("blur")}),t.value.on("escape",()=>{o("escape")}),t.value.mount(s.value)}catch(r){const d=r instanceof Error?r.message:"Failed to create card element";a.value=d,n.value=!1,console.error("[Vue Stripe] Card element creation error:",d)}};return e.watch(()=>l.options,r=>{t.value&&r&&t.value.update(r)},{deep:!0}),e.watch(()=>u.elements.value,r=>{r&&s.value&&!t.value&&i()},{immediate:!0}),e.onMounted(()=>{u.elements.value&&s.value&&!t.value&&i()}),e.onUnmounted(()=>{t.value&&t.value.destroy()}),f({element:t,loading:n,error:a,focus:()=>t.value?.focus(),blur:()=>t.value?.blur(),clear:()=>t.value?.clear()}),(r,d)=>(e.openBlock(),e.createElementBlock("div",re,[e.unref(a)?(e.openBlock(),e.createElementBlock("div",ne,[e.renderSlot(r.$slots,"error",{error:e.unref(a)},()=>[e.createElementVNode("div",ae,e.toDisplayString(e.unref(a)),1)],!0)])):e.createCommentVNode("",!0),e.createElementVNode("div",{ref_key:"elementRef",ref:s,class:e.normalizeClass(["vue-stripe-card-element-mount",{"vue-stripe-card-element-loading":e.unref(n)}])},null,2),e.unref(n)?(e.openBlock(),e.createElementBlock("div",oe,[e.renderSlot(r.$slots,"loading",{},()=>[d[0]||(d[0]=e.createElementVNode("div",{class:"vue-stripe-loading-message"}," Loading card form... ",-1))],!0)])):e.createCommentVNode("",!0)]))}}),[["__scopeId","data-v-a41a7ee5"]]);function b({elementType:c,componentName:f}){return e.defineComponent({name:f,props:{options:{type:Object,default:()=>({})}},emits:["ready","change","focus","blur","escape"],setup(p,{emit:l,expose:o}){const s=e.ref(),t=e.ref(null),n=e.ref(!0),a=e.ref(null),u=e.inject(v);if(!u)throw new E(`${f} must be used within VueStripeElements`);const i=()=>{if(!u.elements.value){a.value="Elements instance not available",n.value=!1;return}if(!s.value){a.value="Mount point not available",n.value=!1;return}try{a.value=null,n.value=!0;const r=u.elements.value.create(c,p.options);t.value=r,r.on("ready",()=>{n.value=!1,l("ready",t.value)}),r.on("change",d=>{const y=d;y.error?a.value=y.error.message:a.value=null,l("change",y)}),r.on("focus",()=>{l("focus")}),r.on("blur",()=>{l("blur")}),r.on("escape",()=>{l("escape")}),r.mount(s.value)}catch(r){const d=r instanceof Error?r.message:`Failed to create ${c} element`;a.value=d,n.value=!1,console.error(`[Vue Stripe] ${f} creation error:`,d)}};return e.watch(()=>p.options,r=>{t.value?.update&&r&&t.value.update(r)},{deep:!0}),e.watch(()=>u.elements.value,r=>{r&&s.value&&!t.value&&i()},{immediate:!0}),e.onMounted(()=>{u.elements.value&&s.value&&!t.value&&i()}),e.onUnmounted(()=>{t.value&&t.value.destroy()}),o({element:t,loading:n,error:a,focus:()=>{t.value?.focus?.()},blur:()=>{t.value?.blur?.()},clear:()=>{t.value?.clear?.()}}),()=>{const r=`vue-stripe-${c}-element`;return e.h("div",{class:r},[a.value&&e.h("div",{class:`${r}-error`},[e.h("div",{class:"vue-stripe-error-message"},a.value)]),e.h("div",{ref:s,class:{[`${r}-mount`]:!0,[`${r}-loading`]:n.value}}),n.value&&e.h("div",{class:`${r}-loader`},[e.h("div",{class:"vue-stripe-loading-message"},`Loading ${c}...`)])])}}})}const se=b({elementType:"cardNumber",componentName:"VueStripeCardNumberElement"}),ce=b({elementType:"cardExpiry",componentName:"VueStripeCardExpiryElement"}),ue=b({elementType:"cardCvc",componentName:"VueStripeCardCvcElement"}),ie=g(e.defineComponent({__name:"VueStripeLinkAuthenticationElement",props:{options:{}},emits:["ready","change"],setup(c,{expose:f,emit:p}){const l=c,o=p,s=e.inject(v);if(!s)throw new E("VueStripeLinkAuthenticationElement must be used within VueStripeElements");const t=e.ref(),n=e.ref(null),a=()=>{if(!(!s.elements?.value||!t.value))try{n.value=s.elements?.value.create("linkAuthentication",l.options),n.value.mount(t.value),n.value.on("ready",()=>{n.value&&o("ready",n.value)}),n.value.on("change",i=>{o("change",i)})}catch(i){console.error("[Vue Stripe] Link authentication element creation error:",i)}},u=()=>{n.value&&(n.value.unmount(),n.value.destroy(),n.value=null)};return e.watch(()=>s.elements?.value,i=>{i&&t.value&&!n.value&&a()},{immediate:!0}),e.watch(()=>l.options,i=>{n.value&&i&&typeof n.value.update=="function"&&n.value.update(i)},{deep:!0}),e.onMounted(()=>{s.elements?.value&&t.value&&a()}),e.onUnmounted(()=>{u()}),f({element:n,focus:()=>n.value?.focus(),blur:()=>n.value?.blur(),clear:()=>n.value?.clear()}),(i,r)=>(e.openBlock(),e.createElementBlock("div",{ref_key:"elementRef",ref:t,class:"vue-stripe-link-auth-element"},null,512))}}),[["__scopeId","data-v-b79076eb"]]),de=e.defineComponent({name:"VueStripeAddressElement",props:{options:{type:Object,default:()=>({mode:"shipping"})}},emits:["ready","change","blur","focus","escape","loadError"],setup(c,{emit:f,expose:p}){const l=e.ref(),o=e.ref(null),s=e.inject(v);if(!s)throw new E("VueStripeAddressElement must be used within VueStripeElements");const t=()=>{f("ready")},n=V=>{f("change",V)},a=()=>{f("blur")},u=()=>{f("focus")},i=()=>{f("escape")},r=V=>{f("loadError",V)},d=()=>{!s.elements.value||!l.value||(o.value=s.elements.value.create("address",c.options),o.value.mount(l.value),o.value.on("ready",t),o.value.on("change",n),o.value.on("blur",a),o.value.on("focus",u),o.value.on("escape",i),o.value.on("loaderror",r))},y=()=>{o.value&&o.value.update(c.options)},qe=()=>{o.value&&(o.value.off("ready",t),o.value.off("change",n),o.value.off("blur",a),o.value.off("focus",u),o.value.off("escape",i),o.value.off("loaderror",r),o.value.destroy(),o.value=null)},P=async()=>{if(!o.value)throw new E("Address element not mounted");return o.value.getValue()},T=()=>{o.value?.focus()},M=()=>{o.value?.clear()};return e.onMounted(()=>{d()}),e.onBeforeUnmount(()=>{qe()}),e.watch(()=>c.options,()=>{y()},{deep:!0}),p({element:o,getValue:P,focus:T,clear:M}),{addressRef:l,element:o,getValue:P,focus:T,clear:M}}}),pe={ref:"addressRef"};function fe(c,f,p,l,o,s){return e.openBlock(),e.createElementBlock("div",pe,null,512)}const me=g(de,[["render",fe]]),he={class:"vue-stripe-iban-element"},ve={key:0,class:"vue-stripe-iban-element-error"},Ee={class:"vue-stripe-error-message"},ge={key:1,class:"vue-stripe-iban-element-loader"},ye=g(e.defineComponent({__name:"VueStripeIbanElement",props:{options:{}},emits:["ready","change","focus","blur","escape"],setup(c,{expose:f,emit:p}){const l=c,o=p,s=e.ref(),t=e.ref(null),n=e.ref(!0),a=e.ref(null),u=e.inject(v);if(!u)throw new E("VueStripeIbanElement must be used within VueStripeElements");const i=()=>{if(!u.elements.value){a.value="Elements instance not available",n.value=!1;return}if(!s.value){a.value="Mount point not available",n.value=!1;return}try{a.value=null,n.value=!0;const r={supportedCountries:["SEPA"],...l.options};t.value=u.elements.value.create("iban",r),t.value.on("ready",()=>{n.value=!1,o("ready",t.value)}),t.value.on("change",d=>{d.error?a.value=d.error.message:a.value=null,o("change",d)}),t.value.on("focus",()=>{o("focus")}),t.value.on("blur",()=>{o("blur")}),t.value.on("escape",()=>{o("escape")}),t.value.mount(s.value)}catch(r){const d=r instanceof Error?r.message:"Failed to create IBAN element";a.value=d,n.value=!1,console.error("[Vue Stripe] IBAN element creation error:",d)}};return e.watch(()=>l.options,r=>{t.value&&r&&t.value.update(r)},{deep:!0}),e.watch(()=>u.elements.value,r=>{r&&s.value&&!t.value&&i()},{immediate:!0}),e.onMounted(()=>{u.elements.value&&s.value&&!t.value&&i()}),e.onUnmounted(()=>{t.value&&t.value.destroy()}),f({element:t,loading:n,error:a,focus:()=>t.value?.focus(),blur:()=>t.value?.blur(),clear:()=>t.value?.clear()}),(r,d)=>(e.openBlock(),e.createElementBlock("div",he,[e.unref(a)?(e.openBlock(),e.createElementBlock("div",ve,[e.renderSlot(r.$slots,"error",{error:e.unref(a)},()=>[e.createElementVNode("div",Ee,e.toDisplayString(e.unref(a)),1)],!0)])):e.createCommentVNode("",!0),e.createElementVNode("div",{ref_key:"elementRef",ref:s,class:e.normalizeClass(["vue-stripe-iban-element-mount",{"vue-stripe-iban-element-loading":e.unref(n)}])},null,2),e.unref(n)?(e.openBlock(),e.createElementBlock("div",ge,[e.renderSlot(r.$slots,"loading",{},()=>[d[0]||(d[0]=e.createElementVNode("div",{class:"vue-stripe-loading-message"}," Loading IBAN form... ",-1))],!0)])):e.createCommentVNode("",!0)]))}}),[["__scopeId","data-v-f8ffb457"]]),ke={class:"vue-stripe-ideal-bank-element"},Se={key:0,class:"vue-stripe-ideal-bank-element-error"},be={class:"vue-stripe-error-message"},_e={key:1,class:"vue-stripe-ideal-bank-element-loader"},Ve=g(e.defineComponent({__name:"VueStripeIdealBankElement",props:{options:{}},emits:["ready","change","focus","blur","escape"],setup(c,{expose:f,emit:p}){const l=c,o=p,s=e.ref(),t=e.ref(null),n=e.ref(!0),a=e.ref(null),u=e.inject(v);if(!u)throw new E("VueStripeIdealBankElement must be used within VueStripeElements");const i=()=>{if(!u.elements.value){a.value="Elements instance not available",n.value=!1;return}if(!s.value){a.value="Mount point not available",n.value=!1;return}try{a.value=null,n.value=!0,t.value=u.elements.value.create("idealBank",l.options),t.value.on("ready",()=>{n.value=!1,o("ready",t.value)}),t.value.on("change",r=>{r.error?a.value=r.error.message:a.value=null,o("change",r)}),t.value.on("focus",()=>{o("focus")}),t.value.on("blur",()=>{o("blur")}),t.value.on("escape",()=>{o("escape")}),t.value.mount(s.value)}catch(r){const d=r instanceof Error?r.message:"Failed to create iDEAL bank element";a.value=d,n.value=!1,console.error("[Vue Stripe] iDEAL bank element creation error:",d)}};return e.watch(()=>l.options,r=>{t.value&&r&&t.value.update(r)},{deep:!0}),e.watch(()=>u.elements.value,r=>{r&&s.value&&!t.value&&i()},{immediate:!0}),e.onMounted(()=>{u.elements.value&&s.value&&!t.value&&i()}),e.onUnmounted(()=>{t.value&&t.value.destroy()}),f({element:t,loading:n,error:a,focus:()=>t.value?.focus(),blur:()=>t.value?.blur(),clear:()=>t.value?.clear()}),(r,d)=>(e.openBlock(),e.createElementBlock("div",ke,[e.unref(a)?(e.openBlock(),e.createElementBlock("div",Se,[e.renderSlot(r.$slots,"error",{error:e.unref(a)},()=>[e.createElementVNode("div",be,e.toDisplayString(e.unref(a)),1)],!0)])):e.createCommentVNode("",!0),e.createElementVNode("div",{ref_key:"elementRef",ref:s,class:e.normalizeClass(["vue-stripe-ideal-bank-element-mount",{"vue-stripe-ideal-bank-element-loading":e.unref(n)}])},null,2),e.unref(n)?(e.openBlock(),e.createElementBlock("div",_e,[e.renderSlot(r.$slots,"loading",{},()=>[d[0]||(d[0]=e.createElementVNode("div",{class:"vue-stripe-loading-message"}," Loading iDEAL bank selector... ",-1))],!0)])):e.createCommentVNode("",!0)]))}}),[["__scopeId","data-v-3d7f7e08"]]),we={class:"vue-stripe-p24-bank-element"},Ce={key:0,class:"vue-stripe-p24-bank-element-error"},$e={class:"vue-stripe-error-message"},Be={key:1,class:"vue-stripe-p24-bank-element-loader"},Ie=g(e.defineComponent({__name:"VueStripeP24BankElement",props:{options:{}},emits:["ready","change","focus","blur","escape"],setup(c,{expose:f,emit:p}){const l=c,o=p,s=e.ref(),t=e.ref(null),n=e.ref(!0),a=e.ref(null),u=e.inject(v);if(!u)throw new E("VueStripeP24BankElement must be used within VueStripeElements");const i=()=>{if(!u.elements.value){a.value="Elements instance not available",n.value=!1;return}if(!s.value){a.value="Mount point not available",n.value=!1;return}try{a.value=null,n.value=!0,t.value=u.elements.value.create("p24Bank",l.options||{}),t.value.on("ready",()=>{n.value=!1,o("ready",t.value)}),t.value.on("change",r=>{r.error?a.value=r.error.message:a.value=null,o("change",r)}),t.value.on("focus",()=>{o("focus")}),t.value.on("blur",()=>{o("blur")}),t.value.on("escape",()=>{o("escape")}),t.value.mount(s.value)}catch(r){const d=r instanceof Error?r.message:"Failed to create P24 bank element";a.value=d,n.value=!1,console.error("[Vue Stripe] P24 bank element creation error:",d)}};return e.watch(()=>l.options,r=>{t.value&&r&&t.value.update(r)},{deep:!0}),e.watch(()=>u.elements.value,r=>{r&&s.value&&!t.value&&i()},{immediate:!0}),e.onMounted(()=>{u.elements.value&&s.value&&!t.value&&i()}),e.onUnmounted(()=>{t.value&&t.value.destroy()}),f({element:t,loading:n,error:a,focus:()=>t.value?.focus(),blur:()=>t.value?.blur(),clear:()=>t.value?.clear()}),(r,d)=>(e.openBlock(),e.createElementBlock("div",we,[e.unref(a)?(e.openBlock(),e.createElementBlock("div",Ce,[e.renderSlot(r.$slots,"error",{error:e.unref(a)},()=>[e.createElementVNode("div",$e,e.toDisplayString(e.unref(a)),1)],!0)])):e.createCommentVNode("",!0),e.createElementVNode("div",{ref_key:"elementRef",ref:s,class:e.normalizeClass(["vue-stripe-p24-bank-element-mount",{"vue-stripe-p24-bank-element-loading":e.unref(n)}])},null,2),e.unref(n)?(e.openBlock(),e.createElementBlock("div",Be,[e.renderSlot(r.$slots,"loading",{},()=>[d[0]||(d[0]=e.createElementVNode("div",{class:"vue-stripe-loading-message"}," Loading Przelewy24 bank selector... ",-1))],!0)])):e.createCommentVNode("",!0)]))}}),[["__scopeId","data-v-29dc009e"]]),Ne={class:"vue-stripe-eps-bank-element"},Pe={key:0,class:"vue-stripe-eps-bank-element-error"},Te={class:"vue-stripe-error-message"},Me={key:1,class:"vue-stripe-eps-bank-element-loader"},Re=g(e.defineComponent({__name:"VueStripeEpsBankElement",props:{options:{}},emits:["ready","change","focus","blur","escape"],setup(c,{expose:f,emit:p}){const l=c,o=p,s=e.ref(),t=e.ref(null),n=e.ref(!0),a=e.ref(null),u=e.inject(v);if(!u)throw new E("VueStripeEpsBankElement must be used within VueStripeElements");const i=()=>{if(!u.elements.value){a.value="Elements instance not available",n.value=!1;return}if(!s.value){a.value="Mount point not available",n.value=!1;return}try{a.value=null,n.value=!0,t.value=u.elements.value.create("epsBank",l.options||{}),t.value.on("ready",()=>{n.value=!1,o("ready",t.value)}),t.value.on("change",r=>{r.error?a.value=r.error.message:a.value=null,o("change",r)}),t.value.on("focus",()=>{o("focus")}),t.value.on("blur",()=>{o("blur")}),t.value.on("escape",()=>{o("escape")}),t.value.mount(s.value)}catch(r){const d=r instanceof Error?r.message:"Failed to create EPS bank element";a.value=d,n.value=!1,console.error("[Vue Stripe] EPS bank element creation error:",d)}};return e.watch(()=>l.options,r=>{t.value&&r&&t.value.update(r)},{deep:!0}),e.watch(()=>u.elements.value,r=>{r&&s.value&&!t.value&&i()},{immediate:!0}),e.onMounted(()=>{u.elements.value&&s.value&&!t.value&&i()}),e.onUnmounted(()=>{t.value&&t.value.destroy()}),f({element:t,loading:n,error:a,focus:()=>t.value?.focus(),blur:()=>t.value?.blur(),clear:()=>t.value?.clear()}),(r,d)=>(e.openBlock(),e.createElementBlock("div",Ne,[e.unref(a)?(e.openBlock(),e.createElementBlock("div",Pe,[e.renderSlot(r.$slots,"error",{error:e.unref(a)},()=>[e.createElementVNode("div",Te,e.toDisplayString(e.unref(a)),1)],!0)])):e.createCommentVNode("",!0),e.createElementVNode("div",{ref_key:"elementRef",ref:s,class:e.normalizeClass(["vue-stripe-eps-bank-element-mount",{"vue-stripe-eps-bank-element-loading":e.unref(n)}])},null,2),e.unref(n)?(e.openBlock(),e.createElementBlock("div",Me,[e.renderSlot(r.$slots,"loading",{},()=>[d[0]||(d[0]=e.createElementVNode("div",{class:"vue-stripe-loading-message"}," Loading EPS bank selector... ",-1))],!0)])):e.createCommentVNode("",!0)]))}}),[["__scopeId","data-v-27c62f72"]]);function _(){const c=e.inject(S);if(!c)throw new h("useStripe must be called within a VueStripeProvider component");return{stripe:e.readonly(c.stripe),loading:e.readonly(c.loading),error:e.readonly(c.error),initialize:async()=>{}}}const Ue=["disabled"],je=g(e.defineComponent({__name:"VueStripeCheckout",props:{sessionId:{},sessionUrl:{},priceId:{},mode:{default:"payment"},successUrl:{},cancelUrl:{},customerEmail:{},clientReferenceId:{},submitType:{},buttonText:{default:"Checkout"},loadingText:{default:"Redirecting..."},disabled:{type:Boolean,default:!1},buttonClass:{default:"vue-stripe-checkout-button"}},emits:["checkout","success","error","before-redirect"],setup(c,{expose:f,emit:p}){const l=c,o=p,{stripe:s}=_(),t=e.ref(!1),n=e.useSlots(),a=e.computed(()=>!!n.default),u=()=>s.value!==null&&typeof s.value.redirectToCheckout=="function",i=async()=>{t.value=!0,o("checkout");try{if(l.sessionUrl){o("before-redirect",{url:l.sessionUrl}),window.location.replace(l.sessionUrl),o("success");return}if(l.sessionId){if(!u())throw new h("redirectToCheckout is not available. This method was removed in @stripe/stripe-js v8.x. Use sessionUrl prop with the checkout session URL instead.");if(!s.value)throw new h("Stripe not initialized");const r=await s.value.redirectToCheckout({sessionId:l.sessionId});if(r.error)throw new h(r.error.message||"Redirect to checkout failed");o("success");return}if(l.priceId){if(!u())throw new h("Price-based checkout using redirectToCheckout is not available in @stripe/stripe-js v8.x. Create a Checkout Session on your server and use sessionUrl prop instead.");if(!s.value)throw new h("Stripe not initialized");console.warn("[Vue Stripe] Price-based checkout is deprecated in v8.x. Create a Checkout Session on your server and use sessionUrl prop instead.");const r=await s.value.redirectToCheckout({lineItems:[{price:l.priceId,quantity:1}],mode:l.mode,successUrl:l.successUrl||window.location.origin+"/success",cancelUrl:l.cancelUrl||window.location.origin+"/cancel",customerEmail:l.customerEmail,clientReferenceId:l.clientReferenceId,submitType:l.submitType});if(r.error)throw new h(r.error.message||"Redirect to checkout failed");o("success");return}throw new h("Either sessionUrl, sessionId, or priceId is required. For @stripe/stripe-js v8.x, use sessionUrl.")}catch(r){const d=r instanceof Error?r:new Error("Checkout failed");o("error",d),console.error("[Vue Stripe] Checkout error:",d)}finally{t.value=!1}};return f({checkout:i,loading:t}),(r,d)=>e.unref(a)?(e.openBlock(),e.createElementBlock("span",{key:0,onClick:i,class:"vue-stripe-checkout-wrapper"},[e.renderSlot(r.$slots,"default",{checkout:i,loading:e.unref(t),disabled:c.disabled},void 0,!0)])):(e.openBlock(),e.createElementBlock("button",{key:1,disabled:e.unref(t)||c.disabled,class:e.normalizeClass(c.buttonClass),onClick:i},[e.unref(t)?(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[d[0]||(d[0]=e.createElementVNode("span",{class:"vue-stripe-loading-spinner"},null,-1)),e.createTextVNode(" "+e.toDisplayString(c.loadingText),1)],64)):(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[e.createTextVNode(e.toDisplayString(c.buttonText),1)],64))],10,Ue))}}),[["__scopeId","data-v-8fe59422"]]),Ae={class:"vue-stripe-pricing-table"},Le={class:"vue-stripe-pricing-table-error"},B="https://js.stripe.com/v3/pricing-table.js",Fe=g(e.defineComponent({__name:"VueStripePricingTable",props:{pricingTableId:{},customerEmail:{},customerSessionClientSecret:{},clientReferenceId:{}},emits:["load","error"],setup(c,{expose:f,emit:p}){const l=c,o=p,s=e.inject(w);if(!s?.publishableKey)throw new h("VueStripePricingTable must be used within a VueStripeProvider component");const t=s.publishableKey,n=e.ref(!0),a=e.ref(null),u=()=>new Promise((i,r)=>{if(document.querySelector(`script[src="${B}"]`)){i();return}const d=document.createElement("script");d.src=B,d.async=!0,d.onload=()=>i(),d.onerror=()=>r(new Error("Failed to load Stripe pricing table script")),document.head.appendChild(d)});return e.onMounted(async()=>{try{n.value=!0,a.value=null,await u(),n.value=!1,o("load")}catch(i){const r=i instanceof Error?i.message:"Failed to load pricing table";a.value=r,n.value=!1,o("error",i instanceof Error?i:new Error(r)),console.error("[Vue Stripe] Pricing table error:",r)}}),f({loading:n,error:a}),(i,r)=>{const d=e.resolveComponent("stripe-pricing-table");return e.openBlock(),e.createElementBlock("div",Ae,[e.unref(n)?e.renderSlot(i.$slots,"loading",{key:0},()=>[r[0]||(r[0]=e.createElementVNode("div",{class:"vue-stripe-pricing-table-loading"}," Loading pricing table... ",-1))],!0):e.unref(a)?e.renderSlot(i.$slots,"error",{key:1,error:e.unref(a)},()=>[e.createElementVNode("div",Le,e.toDisplayString(e.unref(a)),1)],!0):e.createCommentVNode("",!0),e.withDirectives(e.createVNode(d,{"pricing-table-id":l.pricingTableId,"publishable-key":e.unref(t),"customer-email":l.customerEmail,"customer-session-client-secret":l.customerSessionClientSecret,"client-reference-id":l.clientReferenceId},null,8,["pricing-table-id","publishable-key","customer-email","customer-session-client-secret","client-reference-id"]),[[e.vShow,!e.unref(n)&&!e.unref(a)]])])}}}),[["__scopeId","data-v-2b89dbe1"]]);function ze(){const c=e.inject(S),f=e.inject(v);if(!c)throw new h("usePaymentIntent must be called within a VueStripeProvider component");const p=e.ref(!1),l=e.ref(null);return{confirmPayment:async s=>{if(!c.stripe.value)return l.value="Stripe not initialized",{error:{message:"Stripe not initialized"}};p.value=!0,l.value=null;try{const t=s.elements??f?.elements.value;if(t&&!s.skipSubmit){const{error:a}=await t.submit();if(a)return l.value=a.message||"Form validation failed",{error:a}}const n=await c.stripe.value.confirmPayment({elements:t??void 0,clientSecret:s.clientSecret,confirmParams:s.confirmParams??{},redirect:s.redirect??"if_required"});return n.error&&(l.value=n.error.message||"Payment confirmation failed"),n}catch(t){const n=t instanceof Error?t.message:"Payment confirmation failed";return l.value=n,{error:{message:n}}}finally{p.value=!1}},loading:e.readonly(p),error:e.readonly(l)}}function Ke(){const c=e.inject(S),f=e.inject(v);if(!c)throw new h("useSetupIntent must be called within a VueStripeProvider component");const p=e.ref(!1),l=e.ref(null);return{confirmSetup:async s=>{if(!c.stripe.value)return l.value="Stripe not initialized",{error:{message:"Stripe not initialized"}};p.value=!0,l.value=null;try{const t=s.elements??f?.elements.value;if(t&&!s.skipSubmit){const{error:a}=await t.submit();if(a)return l.value=a.message||"Form validation failed",{error:a}}const n=await c.stripe.value.confirmSetup({elements:t??void 0,clientSecret:s.clientSecret,confirmParams:s.confirmParams??{},redirect:s.redirect??"if_required"});return n.error&&(l.value=n.error.message||"Setup confirmation failed"),n}catch(t){const n=t instanceof Error?t.message:"Setup confirmation failed";return l.value=n,{error:{message:n}}}finally{p.value=!1}},loading:e.readonly(p),error:e.readonly(l)}}function I(){const{stripe:c}=_(),f=e.ref(!1),p=e.ref(null),l=()=>c.value!==null&&typeof c.value.redirectToCheckout=="function";return{redirectToCheckout:async t=>{f.value=!0,p.value=null;try{if("url"in t&&t.url){window.location.replace(t.url);return}const n=t;if(!l())throw new h("redirectToCheckout is not available. This method was removed in @stripe/stripe-js v8.x. Create a Checkout Session on your server and use redirectToUrl() or pass { url } instead.");if(!c.value)throw new h("Stripe not initialized");console.warn("[Vue Stripe] Legacy redirectToCheckout is deprecated in @stripe/stripe-js v8.x. Use redirectToUrl() with a session URL from your server instead.");const a=await c.value.redirectToCheckout(n);if(a.error){const u=a.error.message||"Checkout redirect failed";throw p.value=u,new h(u)}}catch(n){const a=n instanceof Error?n.message:"Checkout redirect failed";throw p.value=a,n}finally{f.value=!1}},redirectToUrl:t=>{f.value=!0,p.value=null,window.location.replace(t)},loading:e.readonly(f),error:e.readonly(p)}}function N(){const c=e.inject(v);if(!c)throw new E("Elements context not found. Make sure to wrap your component with VueStripeElements.");const f=async()=>c.elements.value?c.elements.value.submit():{error:{message:"Elements not initialized"}};return{elements:e.readonly(c.elements),submit:f,loading:e.readonly(c.loading),error:e.readonly(c.error)}}function xe(c){return{install(f){f.provide("vue-stripe-config",c);let p=null;f.provide("vue-stripe-global",{get stripe(){if(!p){const l={};c.stripeAccount&&(l.stripeAccount=c.stripeAccount),c.apiVersion&&(l.apiVersion=c.apiVersion),c.locale&&(l.locale=c.locale),p=k.loadStripe(c.publishableKey,l).then(o=>(o&&o.registerAppInfo($),o))}return p}})}}}Object.defineProperty(m,"loadStripe",{enumerable:!0,get:()=>k.loadStripe}),m.VueStripeAddressElement=me,m.VueStripeCardCvcElement=ue,m.VueStripeCardElement=le,m.VueStripeCardExpiryElement=ce,m.VueStripeCardNumberElement=se,m.VueStripeCheckout=je,m.VueStripeElements=O,m.VueStripeElementsError=E,m.VueStripeEpsBankElement=Re,m.VueStripeExpressCheckoutElement=te,m.VueStripeIbanElement=ye,m.VueStripeIdealBankElement=Ve,m.VueStripeLinkAuthenticationElement=ie,m.VueStripeLoadError=C,m.VueStripeP24BankElement=Ie,m.VueStripePaymentElement=Y,m.VueStripePricingTable=Fe,m.VueStripeProvider=z,m.VueStripeProviderError=h,m.createVueStripe=xe,m.createVueStripeError=R,m.useCheckout=I,m.useElements=N,m.usePaymentIntent=ze,m.useSetupIntent=Ke,m.useStripe=_,m.useStripeCheckout=I,m.useStripeElements=N,Object.defineProperty(m,Symbol.toStringTag,{value:"Module"})}));