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