@klappay/one 1.0.1 → 1.1.0

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.
@@ -1,4 +1,4 @@
1
- "use strict";var KlappayOne=(()=>{var y=Object.defineProperty;var M=Object.getOwnPropertyDescriptor;var B=Object.getOwnPropertyNames;var L=Object.prototype.hasOwnProperty;var z=(e,t)=>{for(var o in t)y(e,o,{get:t[o],enumerable:!0})},H=(e,t,o,a)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of B(t))!L.call(e,n)&&n!==o&&y(e,n,{get:()=>t[n],enumerable:!(a=M(t,n))||a.enumerable});return e};var $=e=>H(y({},"__esModule",{value:!0}),e);var re={};z(re,{configure:()=>P,createKlappayOne:()=>u});function q(e){return typeof e=="object"&&e!==null&&"type"in e&&typeof e.type=="string"&&e.type.startsWith("klappay:")&&"requestId"in e&&typeof e.requestId=="string"}function m(e,t,o){let a=!1,n=setTimeout(()=>{a||o.onTimeout?.()},1e4);function i(r){if(r.origin!==e||!q(r.data)||r.data.requestId!==t)return;let s=r.data;switch(s.type){case"klappay:ready":a=!0,clearTimeout(n),o.onReady?.();return;case"klappay:success":o.onSuccess?.(s.result);return;case"klappay:error":o.onError?.(s.error);return;case"klappay:cancel":o.onCancel?.();return;case"klappay:resize":o.onResize?.(s.height);return}}return window.addEventListener("message",i),()=>{clearTimeout(n),window.removeEventListener("message",i)}}function h(e){let t=new URL("/id/",e.klapOneOrigin);return t.searchParams.set("chargeId",e.chargeId),t.searchParams.set("requestId",e.requestId),t.searchParams.set("returnOrigin",window.location.origin),e.locale&&t.searchParams.set("locale",e.locale),t.toString()}var D=/Android|iPhone|iPad|iPod/i;function A(e){return D.test(e)}function N(){return`
1
+ "use strict";var KlappayOne=(()=>{var y=Object.defineProperty;var P=Object.getOwnPropertyDescriptor;var H=Object.getOwnPropertyNames;var V=Object.prototype.hasOwnProperty;var G=(e,t)=>{for(var o in t)y(e,o,{get:t[o],enumerable:!0})},L=(e,t,o,a)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of H(t))!V.call(e,n)&&n!==o&&y(e,n,{get:()=>t[n],enumerable:!(a=P(t,n))||a.enumerable});return e};var D=e=>L(y({},"__esModule",{value:!0}),e);var Ae={};G(Ae,{configure:()=>C,createKlappayOne:()=>u});function M(e){return typeof e=="object"&&e!==null&&"type"in e&&typeof e.type=="string"&&e.type.startsWith("klappay:")&&"requestId"in e&&typeof e.requestId=="string"}function f(e,t,o){let a=!1,n=setTimeout(()=>{a||o.onTimeout?.()},1e4);function i(r){if(r.origin!==e||!M(r.data)||r.data.requestId!==t)return;let s=r.data;switch(s.type){case"klappay:ready":a=!0,clearTimeout(n),o.onReady?.();return;case"klappay:success":o.onSuccess?.(s.result);return;case"klappay:error":o.onError?.(s.error);return;case"klappay:cancel":o.onCancel?.();return;case"klappay:resize":o.onResize?.(s.height);return}}return window.addEventListener("message",i),()=>{clearTimeout(n),window.removeEventListener("message",i)}}function h(e){let t=new URL("/id/",e.klapOneOrigin);return t.searchParams.set("chargeId",e.chargeId),t.searchParams.set("requestId",e.requestId),t.searchParams.set("returnOrigin",window.location.origin),e.locale&&t.searchParams.set("locale",e.locale),t.toString()}var F=/Android|iPhone|iPad|iPod/i;function E(e){return F.test(e)}function J(){return`
2
2
  .backdrop {
3
3
  position: fixed;
4
4
  inset: 0;
@@ -18,22 +18,27 @@
18
18
  background: #000;
19
19
  transition: height 0.15s ease;
20
20
  }
21
- `}function O(e,t){let o=document.createElement("div"),a=o.attachShadow({mode:"open"}),n=document.createElement("style");n.textContent=N();let i=document.createElement("div");i.className="backdrop",i.addEventListener("click",s=>{s.target===i&&t()});let r=document.createElement("iframe");return r.className="frame",r.src=e,i.append(r),a.append(n,i),document.body.append(o),{close:()=>o.remove(),resize:s=>{r.style.height=`${s}px`}}}var G="klappay-one";function k(e){let t=window.screenX+(window.outerWidth-420)/2,o=window.screenY+(window.outerHeight-720)/2;return window.open(e,G,`width=420,height=720,left=${t},top=${o}`)}function E(e){return e===null||e.closed}var W={code:"POPUP_BLOCKED",message:"The Klappay One popup was blocked."},V={code:"FRAME_TIMEOUT",message:"The Klappay One popup did not respond in time."},F=500,x={};function P(e){x=e}function l(){return x}function Y(e){return e.mode??(A(navigator.userAgent)?"popup":"iframe")}function u(e){function t(){Y(e)==="popup"?o():a()}function o(){let n=crypto.randomUUID(),i=h({klapOneOrigin:e.origin,chargeId:e.chargeId,requestId:n,locale:e.locale}),r=k(i);if(E(r)){e.onError?.(W);return}let s=m(e.origin,n,{onReady:e.onReady,onSuccess:d=>{p(),e.onSuccess?.(d)},onError:d=>{p(),e.onError?.(d)},onCancel:()=>{p(),e.onCancel?.()},onTimeout:()=>{p(),e.onError?.(V)}}),f=setInterval(()=>{E(r)&&(p(),e.onCancel?.())},F);function p(){clearInterval(f),s()}}function a(){let n=crypto.randomUUID(),i=h({klapOneOrigin:e.origin,chargeId:e.chargeId,requestId:n,locale:e.locale}),r=!1;function s(c){r||(r=!0,d(),c())}let f=O(i,()=>s(()=>e.onCancel?.())),p=m(e.origin,n,{onReady:e.onReady,onSuccess:c=>s(()=>e.onSuccess?.(c)),onError:c=>s(()=>e.onError?.(c)),onCancel:()=>s(()=>e.onCancel?.()),onResize:c=>f.resize(c),onTimeout:()=>s(o)});function d(){p(),f.close()}}return{open:t}}var g="data-klappay-one",w="data-klappay-one-origin",j="data-klappay-one-locale",Z="data-klappay-one-mode",_="data-klappay-one-wired",b="data-klappay-one-busy";function v(e){e.hasAttribute(_)||(e.setAttribute(_,""),e.addEventListener("click",()=>{if(e.hasAttribute(b))return;let t=e.getAttribute(g);if(!t)return;let o=e.getAttribute(w)??l().origin;if(!o){console.error(`[${g}] has no origin \u2014 set ${w} or call KlappayOne.configure({ origin }).`);return}let a=e.getAttribute(j)??l().locale,n=e.getAttribute(Z);e.setAttribute(b,"");let i=()=>{e.removeAttribute(b)};u({chargeId:t,origin:o,locale:a,mode:n==="iframe"||n==="popup"?n:void 0,onSuccess:r=>{i(),e.dispatchEvent(new CustomEvent("success",{detail:r}))},onError:r=>{i(),e.dispatchEvent(new CustomEvent("error",{detail:r}))},onCancel:()=>{i(),e.dispatchEvent(new CustomEvent("cancel"))}}).open()}))}function I(e=document){for(let t of e.querySelectorAll(`[${g}]`))v(t)}function R(e=document.body){let t=new MutationObserver(o=>{for(let a of o)for(let n of a.addedNodes)if(n instanceof Element){n.hasAttribute(g)&&v(n);for(let i of n.querySelectorAll(`[${g}]`))v(i)}});return t.observe(e,{childList:!0,subtree:!0}),()=>t.disconnect()}var C="klappay-button",S=["white","yellow","black"],K=["sm","md","lg"],X="black",J="md",Q={sm:{height:"32px",fontSize:"13px",padding:"0 14px"},md:{height:"40px",fontSize:"14px",padding:"0 18px"},lg:{height:"48px",fontSize:"16px",padding:"0 24px"}},ee={white:{background:"#ffffff",color:"#111111",border:"1px solid #e5e5e5"},yellow:{background:"#f2b90c",color:"#111111",border:"none"},black:{background:"#111111",color:"#ffffff",border:"none"}};function te(e){return S.includes(e)}function ne(e){return K.includes(e)}var oe=typeof HTMLElement<"u"?HTMLElement:class{},T=class e extends oe{static get observedAttributes(){return["variant","size"]}#e;constructor(){super();let t=this.attachShadow({mode:"open"}),o=document.createElement("style");o.textContent=e.#r(),this.#e=document.createElement("button"),this.#e.type="button",this.#e.textContent="Pay with Klappay",this.#e.addEventListener("click",()=>this.#o()),t.append(o,this.#e),this.#t(),this.#n()}attributeChangedCallback(t){t==="variant"&&this.#t(),t==="size"&&this.#n()}get variant(){let t=this.getAttribute("variant")??"";return te(t)?t:X}get size(){let t=this.getAttribute("size")??"";return ne(t)?t:J}#t(){this.#e.setAttribute("data-variant",this.variant)}#n(){this.#e.setAttribute("data-size",this.size)}#o(){if(this.#e.disabled)return;let t=this.getAttribute("charge-id");if(!t){console.error("<klappay-button> is missing a required charge-id attribute.");return}let o=this.getAttribute("origin")??l().origin;if(!o){console.error("<klappay-button> has no origin \u2014 set the origin attribute or call KlappayOne.configure({ origin }).");return}let a=this.getAttribute("locale")??l().locale,n=this.getAttribute("mode");this.#e.disabled=!0;let i=()=>{this.#e.disabled=!1};u({chargeId:t,origin:o,locale:a,mode:n==="iframe"||n==="popup"?n:void 0,onSuccess:r=>{i(),this.dispatchEvent(new CustomEvent("success",{detail:r}))},onError:r=>{i(),this.dispatchEvent(new CustomEvent("error",{detail:r}))},onCancel:()=>{i(),this.dispatchEvent(new CustomEvent("cancel"))}}).open()}static#r(){let t=S.map(a=>{let{background:n,color:i,border:r}=ee[a];return`button[data-variant="${a}"] { background: var(--klappay-background, ${n}); color: var(--klappay-color, ${i}); border: ${r}; }`}).join(`
22
- `),o=K.map(a=>{let{height:n,fontSize:i,padding:r}=Q[a];return`button[data-size="${a}"] { height: var(--klappay-button-height, ${n}); font-size: ${i}; padding: ${r}; }`}).join(`
21
+ `}function I(e,t){let o=document.createElement("div"),a=o.attachShadow({mode:"open"}),n=document.createElement("style");n.textContent=J();let i=document.createElement("div");i.className="backdrop",i.addEventListener("click",s=>{s.target===i&&t()});let r=document.createElement("iframe");return r.className="frame",r.src=e,i.append(r),a.append(n,i),document.body.append(o),{close:()=>o.remove(),resize:s=>{r.style.height=`${s}px`}}}var X="klappay-one";function R(e){let t=window.screenX+(window.outerWidth-420)/2,o=window.screenY+(window.outerHeight-720)/2;return window.open(e,X,`width=420,height=720,left=${t},top=${o}`)}function m(e){return e===null||e.closed}var j={code:"POPUP_BLOCKED",message:"The Klappay One popup was blocked."},N={code:"FRAME_TIMEOUT",message:"The Klappay One popup did not respond in time."},q=500,T={};function C(e){T=e}function c(){return T}function Y(e){return e.mode??(E(navigator.userAgent)?"popup":"iframe")}function u(e){function t(){Y(e)==="popup"?o():a()}function o(){let n=crypto.randomUUID(),i=h({klapOneOrigin:e.origin,chargeId:e.chargeId,requestId:n,locale:e.locale}),r=R(i);if(m(r)){e.onError?.(j);return}let s=f(e.origin,n,{onReady:e.onReady,onSuccess:l=>{A(),e.onSuccess?.(l)},onError:l=>{A(),e.onError?.(l)},onCancel:()=>{A(),e.onCancel?.()},onTimeout:()=>{A(),e.onError?.(N)}}),g=setInterval(()=>{m(r)&&(A(),e.onCancel?.())},q);function A(){clearInterval(g),s()}}function a(){let n=crypto.randomUUID(),i=h({klapOneOrigin:e.origin,chargeId:e.chargeId,requestId:n,locale:e.locale}),r=!1;function s(p){r||(r=!0,l(),p())}let g=I(i,()=>s(()=>e.onCancel?.())),A=f(e.origin,n,{onReady:e.onReady,onSuccess:p=>s(()=>e.onSuccess?.(p)),onError:p=>s(()=>e.onError?.(p)),onCancel:()=>s(()=>e.onCancel?.()),onResize:p=>g.resize(p),onTimeout:()=>s(o)});function l(){A(),g.close()}}return{open:t}}var d="data-klappay-one",U="data-klappay-one-origin",W="data-klappay-one-locale",Z="data-klappay-one-mode",z="data-klappay-one-wired",b="data-klappay-one-busy";function v(e){e.hasAttribute(z)||(e.setAttribute(z,""),e.addEventListener("click",()=>{if(e.hasAttribute(b))return;let t=e.getAttribute(d);if(!t)return;let o=e.getAttribute(U)??c().origin;if(!o){console.error(`[${d}] has no origin \u2014 set ${U} or call KlappayOne.configure({ origin }).`);return}let a=e.getAttribute(W)??c().locale,n=e.getAttribute(Z);e.setAttribute(b,"");let i=()=>{e.removeAttribute(b)};u({chargeId:t,origin:o,locale:a,mode:n==="iframe"||n==="popup"?n:void 0,onSuccess:r=>{i(),e.dispatchEvent(new CustomEvent("success",{detail:r}))},onError:r=>{i(),e.dispatchEvent(new CustomEvent("error",{detail:r}))},onCancel:()=>{i(),e.dispatchEvent(new CustomEvent("cancel"))}}).open()}))}function O(e=document){for(let t of e.querySelectorAll(`[${d}]`))v(t)}function K(e=document.body){let t=new MutationObserver(o=>{for(let a of o)for(let n of a.addedNodes)if(n instanceof Element){n.hasAttribute(d)&&v(n);for(let i of n.querySelectorAll(`[${d}]`))v(i)}});return t.observe(e,{childList:!0,subtree:!0}),()=>t.disconnect()}var x="klappay-button",w=["white","yellow","black"],S=["sm","md","lg"],Q="black",_="md",$={sm:{height:"32px",fontSize:"13px",padding:"0 14px",logoSize:"14px"},md:{height:"40px",fontSize:"14px",padding:"0 18px",logoSize:"16px"},lg:{height:"48px",fontSize:"16px",padding:"0 24px",logoSize:"18px"}},ee="data:image/png;base64,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",te="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAjCAYAAADmOUiuAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAARGVYSWZNTQAqAAAACAABh2kABAAAAAEAAAAaAAAAAAADoAEAAwAAAAEAAQAAoAIABAAAAAEAAAAooAMABAAAAAEAAAAjAAAAAA02V70AAAnKSURBVFgJzVgLjFXFGZ5/Huece5e7T1wooq6WCgiiBXbXRYFFsaCoaBoxaVP7iKm1YqyxaaOkak01sY3QhppCX7ZVSlyMpsFnlSyUVRShKJXY+sCID5Tnsnd3771z5tFvsBeX7brsYtJ0krNz7jkz/3zz/d//z3+W2GdoW1ZOU+NPp/EilVXdKv9K/Zwd3QOZa2tj4srRzZNsoqaZHrkxmbP+zfI4/2zzKJMTk0zK30zO7XiXiPnyu9DLvj8Gu29vZ7LRTq4rmJjv6Srun7Rohz7z836iSekxIUxtUsjc6dtbl9Kc9SbY8W2Top5aqinpYqG2qr4mJVqtJD/DyNJj3rOFAOJ8+9nVOhIrIhIXWe+25Nc1LWRs8/6+OHjfH4Pdz9AzJpDPPJrjbO0pldlZ/g7GC5pNzMT8RGtZhZBsSb54qLFso7sqOidR2TZFVbcUCrZRKhrntQNykVmzhhFAigLPXhtJfnlasrHgvjGXqNHl+eV+yAB7bHFhNuEtQvJpnrkV+ebpX4jiuCNfsO9gMSYFVRLxuw8+enZ1MG4tzeSKZknBfpg6q0yRbWSKHPfmgUWLmO39W8sUJelmY4BU8jC+Y/fB4ttlYOWeyjfH6rufbLxAKP+QsawugjBSyzbokr+aR7wlI/1vtWEjIkGsZNy9uZTd1pvQeOfY+khSJUBspihaBhav6/V0eRV3yjj+EOy1phAEQHTalC5Nsvo15qOGUintittffIvuYG7IDFbMb1hfSv39sWSYHxhjs1XsbyXf+0yh5J+Ei5i2jilB1+ZjPy87d8srzroNHvRyzppsqTTRePuDqvyHvb0pfYdL36q1Z5FAUHhasy+2W7WW13jOVgml7mEXXVATSDsmgx4RyKqmJGze9l72xMyRh6jQBgZbrYVrOLfO2e8XrO+oUOJRYBkLMAw4tyN4rvDcTcnG1BZwe8feS0t6VvaEqhru3VNg94SwOnm2u+j43IywpzLiq7HRHOwUO3tMc+3cF7cPymDYfD73xaZikrmq56mmKax74wHO/I/w/D0e8oF3gktxW1aoUamh30jJNFzPlGJTuHC3SuaeK2kGt4VnNJaU+p4ruiaueKV3PujWGu9/J1Xaaz3dDds56whG/HM11bl3AoMi/Pm0dlPjmdWeZFvE/TVEfkqXPGnHM90vvdigPudjRecZR0F2GUd+qmf0e5A6Aa4fa1LPkFIme853WO93RYrO18YT5zTBef8Ixo6RCT/ZpO51xvgt3LIl2MD8sDmM2Qfv3KhmbPhnwDUog0pWJyCqHmkE3mTnZZVbuqC2cWqJpyux4BMSvtJApQSbIMjfaI1t48Q6Gf6A3Qh/7pTEdmHsPugMoFmVtfYr3rCVYP59m/IV3tmZUtLXUkQz3qdG+z8ks55vL5M2KMBs1+g9kMlyuKILUYrd+Ray/uc5G53OuLodNv8lAaYIsQvB5gvBzypptwlgXYqUB+CngsGvO+cPYC6iKwQFn5+mpVG2J13KpX1LReJ2SAZLcIZof9kKtiyAC3k29McMkg/WXpodEb2/PJb8q4jeOFYIAkMbnXHXW06Tk5jug2ZqcC5A40yj+ysRXQCNZSC9QCaIZOD5YzlBAliUPjDkr4ozyYUq4kvSkhPYzAFt6RtxZ2FdWhdNRsaMZdq5bVAGww7GXLq2V+v4Np2yjUp4F1KMkH6miOgX6F8tFu2q4Bp/OGhYhLTyJYA7coQCcIiRI1pHHg1pZ4x09FNdNK9Bh/9QMaU6dX/au9s+q+uiBcTEHymiB7tZzfRjMhhAhtb5dNOpEdl7GdEVBnzAJwyufAXu/RmEfRmuReH5UBsChwHsJi7pAZXE45SWy41Kr+aC3YgMUWuJ7fHGXXlMBssLVs/b/LZOxd1g6AUkY6g5+I3OQvTcAJZ6kW2huqE3yAKRx1qc8bOU4SsKXH8ZYG8A3bWI4qIt2RUyrtsyZIBh6eoFm7cYzX4CFl/HOXoYpGO+GcFxMSJ9yN4obyMke8jmkkM93VMR91PhhZFBEXj8cJTEv6Lpa3uHBTAYrlxw2lM4b5chED4KbkYAgDtXj1fDBvixPmkEous6x2gDoj3FCdMBRd9DTes/DOsNGyDRGluRjd6Ahx+BVvICYRoWOt4WpILzvdkXTBGMPqKduyue8/yrZXvDBhgmOk8zVRwh5/qHoSPUomVzw++DB7DJxHk3y5O76yUbr+tr5QjAhoaGpKKiYlQURRMrKytr+w7qf4+UklUV4gqKo51wyTqA/EzNBBeQn3Ew37Nzzn8q8rJBmclkTtZaz921a9cY59wYvEAU2afR318eVO7fbWvJ5KrsaJSXO4nxrTg96jXxX0tydUL4RgTKcbUwD0yekrXJiTCA8/mTJtM0RWHpbsKjGMIvoP/ok9ef3HU/Pu1MEekF2OyEUtFnddEWuaCR+F2rLdsWS2q0ISUfRws1I1JX1jhzOqYfDdAY83c8XIwrfJH1hAsM7kN/pH0Uvry0+bPifFya+gQlP8PRimKGColgrU4wCpXx8bawrZC4reWBwaNaOJLCV9RGXJ+aaOsNT/OchTLotFDuI0hwCnjpLculxHLBYmDheFvIqajW31aKt/e3UZb3QOAC+BGHJ3RtOpRqsxjF5DcxcClKp61IMQbpIaBlyF/97Q75dwgwZIECNvjjTWLzzv4TB0wQIZLh+usxuBL6vBZ90Cbz7Q1Jb6muRjNXH5FsRgl1GcqpVsWpAgwMW4EBHOfcoKy+S/vOpXUXv9kV1unb+gNMhBBXAtR3saMzMPlx3H8LE4p9J4X7vX8Zn0uSulO815chmmcC/mxJlEFxOqTEjfIKBwgvGOvuxTfi8ty87Xv6rxF+HwUQgG4GoMWI5hDRK3G/GmPewDWgD317qyzK4nnc8NnIBhkcKpMw51wcgTVBkiG/hRKi7+TAWtCcc7TTW7ssX9JrRi18dcDM8V8Awd63wdz5APcAInkzBuwNgwZr/oXmymJRnkXCX45kW2G13U/OVyNqJjrLxnnyI8FCJpzb9rBWaTdOjsdT71elzG+rvXDrocHsH8UgBp6AqxLXu7g0rr4thw3gc9N24OHBvi/8lmlZnY9OJsVb8bwVRrMoRPdYbw8h0rP49C0Spx6wuR8fTdsFuTeSg1vfJ/yHoa+dge77AxxozOFnAHc1wC2RUi5GAD0z0MD8czPqR8RibKlgz4HGpuF7+CRE+zuuRL9UadduFnHN9r6cHwqwsv2hAszA7ZswaQwkMB39rrKBgXr/fEsG2qoQKomc601HfLjtwHBADWRz0Gdg7xIMSBFE96GHzP/PGoA9CEheKRXY+5+2I19bg60KgBou7oAGn8S4gU6dwaZ/pnf/Bs1gvY5Y5v1NAAAAAElFTkSuQmCC",oe="data:image/png;base64,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",ne={black:ee,yellow:oe,white:te},re={white:{background:"#ffffff",color:"#111111",border:"1px solid #e5e5e5"},yellow:{background:"#f2b90c",color:"#111111",border:"none"},black:{background:"#111111",color:"#ffffff",border:"none"}};function ie(e){return w.includes(e)}function ae(e){return S.includes(e)}var se=typeof HTMLElement<"u"?HTMLElement:class{},B=class e extends se{static get observedAttributes(){return["variant","size","charge-id","origin"]}#e;#t;#n=!1;constructor(){super();let t=this.attachShadow({mode:"open"}),o=document.createElement("style");o.textContent=e.#A(),this.#t=document.createElement("img"),this.#t.alt="",this.#t.setAttribute("aria-hidden","true");let a=document.createElement("span");a.textContent="Pay with Klappay",this.#e=document.createElement("button"),this.#e.type="button",this.#e.append(this.#t,a),this.#e.addEventListener("click",()=>this.#s()),t.append(o,this.#e),this.#r(),this.#i(),this.#o()}attributeChangedCallback(t){t==="variant"&&this.#r(),t==="size"&&this.#i(),(t==="charge-id"||t==="origin")&&this.#o()}get variant(){let t=this.getAttribute("variant")??"";return ie(t)?t:Q}set variant(t){this.setAttribute("variant",t)}get size(){let t=this.getAttribute("size")??"";return ae(t)?t:_}set size(t){this.setAttribute("size",t)}#r(){this.#e.setAttribute("data-variant",this.variant),this.#t.src=ne[this.variant]}#i(){this.#e.setAttribute("data-size",this.size)}#a(){let t=this.getAttribute("charge-id"),o=this.getAttribute("origin")??c().origin;return!!(t&&o)}#o(){this.#e.disabled=this.#n||!this.#a()}#s(){if(this.#e.disabled)return;let t=this.getAttribute("charge-id");if(!t){console.error("<klappay-button> is missing a required charge-id attribute.");return}let o=this.getAttribute("origin")??c().origin;if(!o){console.error("<klappay-button> has no origin \u2014 set the origin attribute or call KlappayOne.configure({ origin }).");return}let a=this.getAttribute("locale")??c().locale,n=this.getAttribute("mode");this.#n=!0,this.#o();let i=()=>{this.#n=!1,this.#o()};u({chargeId:t,origin:o,locale:a,mode:n==="iframe"||n==="popup"?n:void 0,onSuccess:r=>{i(),this.dispatchEvent(new CustomEvent("success",{detail:r}))},onError:r=>{i(),this.dispatchEvent(new CustomEvent("error",{detail:r}))},onCancel:()=>{i(),this.dispatchEvent(new CustomEvent("cancel"))}}).open()}static#A(){let t=w.map(a=>{let{background:n,color:i,border:r}=re[a];return`button[data-variant="${a}"] { background: var(--klappay-background, ${n}); color: var(--klappay-color, ${i}); border: ${r}; }`}).join(`
22
+ `),o=S.map(a=>{let{height:n,fontSize:i,padding:r,logoSize:s}=$[a];return`
23
+ button[data-size="${a}"] { height: var(--klappay-button-height, ${n}); font-size: ${i}; padding: ${r}; }
24
+ button[data-size="${a}"] img { width: ${s}; height: ${s}; }
25
+ `}).join(`
23
26
  `);return`
24
27
  button {
25
28
  display: inline-flex;
26
29
  align-items: center;
27
30
  justify-content: center;
31
+ gap: 8px;
28
32
  border-radius: var(--klappay-radius, 8px);
29
33
  font-family: var(--klappay-font-family, system-ui, sans-serif);
30
34
  font-weight: 600;
31
35
  cursor: pointer;
32
36
  transition: opacity 0.15s ease;
33
37
  }
38
+ button img { flex-shrink: 0; }
34
39
  button:hover { opacity: 0.9; }
35
40
  button:active { opacity: 0.8; }
36
41
  button:disabled { opacity: 0.6; cursor: not-allowed; }
37
42
  ${t}
38
43
  ${o}
39
- `}};function U(){typeof customElements>"u"||customElements.get(C)||customElements.define(C,T)}U();typeof document<"u"&&(document.readyState==="loading"?document.addEventListener("DOMContentLoaded",()=>I()):I(),R());return $(re);})();
44
+ `}};function k(){typeof customElements>"u"||customElements.get(x)||customElements.define(x,B)}k();typeof document<"u"&&(document.readyState==="loading"?document.addEventListener("DOMContentLoaded",()=>O()):O(),K());return D(Ae);})();
package/dist/index.js CHANGED
@@ -295,9 +295,17 @@ var SIZES = ["sm", "md", "lg"];
295
295
  var DEFAULT_VARIANT = "black";
296
296
  var DEFAULT_SIZE = "md";
297
297
  var SIZE_STYLES = {
298
- sm: { height: "32px", fontSize: "13px", padding: "0 14px" },
299
- md: { height: "40px", fontSize: "14px", padding: "0 18px" },
300
- lg: { height: "48px", fontSize: "16px", padding: "0 24px" }
298
+ sm: { height: "32px", fontSize: "13px", padding: "0 14px", logoSize: "14px" },
299
+ md: { height: "40px", fontSize: "14px", padding: "0 18px", logoSize: "16px" },
300
+ lg: { height: "48px", fontSize: "16px", padding: "0 24px", logoSize: "18px" }
301
+ };
302
+ var LOGO_NO_BLACK_INK_DATA_URI = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAjCAYAAADmOUiuAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAARGVYSWZNTQAqAAAACAABh2kABAAAAAEAAAAaAAAAAAADoAEAAwAAAAEAAQAAoAIABAAAAAEAAAAooAMABAAAAAEAAAAjAAAAAA02V70AAAmjSURBVFgJzVgLjFbFFZ4zj3vv/y//PnGhiIqWCgiiBXbXRcFFsaCoaBoxaVP7iKm1aqyxaaOkak01sY3QhppCX7ZVa12MpsFnlSwUEEUoQiW2PjA+UZ7L/rv/4947c/oN8tNdXJddbBpPcv65j5kz35zznTNzfxKfQjYum2rGnUzjVKJruk1+S+Osbd39mWtvF+qykS0TbWSmpj16TTRr1euVfvxsy4g0pyamiXw9OnPtO0SCK+98q3vfDHTd0SF0k53UUExDubOrtGfigm3xqZ/nCWlCjymV1kfFzO3c0baIZq1KvR1unxj01FNdOS4V62sa6xKiB42Wp6S6/BizmA8gjjtOr40DtTQgdb5ltzG/snm+EBv29MYhe98MdD09nj6eOPNoTooVJ1RnZ/JtQhZjMSETymOtFVVKi4X50v6mio3umuCMyGTbDdXcVCzaJm1oLMcOyFVm+XJBAKmKMntVoOUlSdmGSnJTLjIjK+Mr7aAB9tjS/GwkW5WWU1m4pfmWaV8IwnBtvmjfwmRCK6omknfue/T0Wm/cWpohDc3USvwwcdakJbFGGHKS0/sWLBC28PfWyUbTjWkKpFr6/mt37Cu9WQFWaalycaS2+8mmc5Xhh1IrGgIQI7FidVzmK2QgWzOafxunYligSJRTd3cuEbcUIhrnnFgVaKoGiA0UBIvhxasLTJfUSGdSJx+CvbYEhACITpvQRVE2fkVwMKZcTrrCjhfeoNuEG7QHq+aOWVVO+N5QC4z3HhNnm5BvJi48UyzzkwiRiK0TRtFV+ZDnZGdv3OKsW81wr5Si2ZbLE1K2P6jJf1AoJPQdqbktjlkECknBtHx3aDfFsb6SpXhAGXOXOP/cOu+0I3qQkYGiZnIk5mwtiCdmDN9PxXZ4sM1ahEZK65z9ftHy2iqjHgWW0QAjgHMrkudSlm5yNqR2j5udeDcpxzOzx9TUSXZPwbvH+NmJxY6Sk7Mzyp4oSD6IheZgp9TZk7bUz35h64Ae9IvP577YXIoyl/c81TxZdK/ZKwX/CM/flb4esFNSq1uyyoxIUvqN1iJG6IUxYrJU7mYt3LpyLBA2/4xGkzHfcyXXLI2sZseetzZl/p02ScEy3QnbOesIRnhdXW3uLe9B5X8+SW5oOrWWSbcHkq8k4sld+rhtz3S/+MIY8zkODZ2VOvK0yzjiKSzo93DqeIR+dJqwQEmZxFJus8xvB4bOiVMmKWm8Y34EfUfpSB6fJu5VIeRN0oqFWMBcvzj02Y3oXG+mr/6XxzWgB42ujeCoRpQRRFOclTVu0bz6pillmSzDhE9oxCoGKqPEeEV8vU1tuyTRKfAD7wb4uV2TeBt9d4NnAC1qrLVf4VQsg+ffs4lcys7O0Jq+liCb8T5JY/5DNPO5jorTBgSY7Rq5EzRZglB0IUuxOm4lyz/P2eBkIc2tsPlvDTAlkF0pMVcpeVo5dusB1iUoeQB+Ijz4ded4L8Yiu3xSyLlJUh5he5JFUts3TKBuBWUwhRTI9pesEos9OF9nfXvEJHl/xUXZYcF7S0Itv4rsDUODJEhpjUvdNVbSpCike8CZOuwL4LiI0fyNiM4FxzKgnncmHCng54/oBApgUno/Jb48zETnmUAuTMpOYTF7Y0vfCDuLK5OGYBIqZqiTzs0DetCvYNRFKwpxHN4SJ2KNUex8iVGaZ6iAfoH25VLJPuBDwweSRgQoK18CuENbKAD7HDnEddRRX3ZGaUc/jUvpK+DhP01ISZy4P+3aYZ+NG4J5JNQfKaD7u0XdtCN60IP00vl084kB2bsF0aUp/IGYCIRyC8L7MxD7YugC/3ywgsQRALtearrPROFYE+slqUmukEpcjwpRb0ns5NRddkQPViasnbPhzThRd8JDz6MYg80+bnQasuc6eKmAagvWDV5AC2SeaHUpzzSpXFqU8ZcB9jq4ux5ZXLJlu1SHDRsHDdBPXTtvw8Y0Fj+BF1/FPnoApBPcguS4AJk+6GhUluGLPWhz4f6e7inI+ymIwnDPCDx+OIjCX9G0FYUhAfSGq+ed9BT228VIhA99mJEA8J1rxKshA/yInzQM2XW1E7Qa2Z5gh1kLRt9Fzas+8PMNGSDRcluVDV5DhB8BV/IKaeonOlrxVMH+3sLFtASPPhI7d0c467mXK/aGDNAPdEwzTBig5vLD4BHOohVzQ299BLDIyLGbyeTueNGGK3tbOQQQ5I+gI6AToPW9Ox1+jZKSNVXqUgqD7QjJSoD8VJL6EBBP35fv2T7r4Im8YlADzPG4mQ0ddVA9uKeh90L7yDvtrZlcjR2J4+V2EnITdo/GmOSvNbkGpbgJiXJU4sfBkydkbXQsDGB//q/4gjoOegM0hBahH0I/Jt2PTz1VBfE8LHZ8ucTZuGRLUtFw3NfHVmwONTVZX5KPQuAkf47Mpi49GcM/BvAfeHgt1H+R9RzU3WgPyYf+yytO/2ykHJskoIJwAlsrDjNUjJRoc0qQPxkfrfhl+cJtrfQe7CMa5WIPVrAG7ScW2sZUJnkp/DHoJH/cR5JgF2DNVuQSEjlv0XvhaMXXVJzW3zRGdhxu4wC9+wOHCT0/hx0Y0LV+fxKn1+Iw+U2sYhGOTptQYlKUB49WoH4dbnfQ9z7BUAWKmOvH69WG7YcP7LdAoPMEdLwGWg29Cgvw3BTcMSYqlBvqYuEaA9ItOEJdjONUm5FUBQ8MmYEenJQyxbH6jpg7FzVc8HqXn6e39AEIYBFeXgb9LvQU6OPQbwFgCW0f2fXXcbkoajiBOb4Y2TwD8M8GXzI4nA6qcON4hQ1EFlPr7sY34pLcnK07+0xw8OZwgDfiuU8Yn9HLoA9CXwPAfmPIHW26pEtnyVSenSRJBpvKROfcmdgC6zwlfX3zR4jeg73XPOeco+1s7eJ8OV4+Yv7L/VYOzN13/4QHv41n50Dvg24AsF1oBxR+vqW6VNKnkeJLUGyrbGz3kONaZM0EZ8VYJh4OL2T8vm0PcJV2YOd4PGF+IBG8uf68TfsHmuBwDx6Dzp53+BOH4t4DAd5naxt0Ld7t6/Nu49RsnA+OJyP9+zYYzeIgutOy3Y9Mz+LTt0SSeuDNPfho2qrIvRbt2/Qe4R+G3nb6u+4DsL8OlWcAeAWuF0KvBcBnKs97t/l10xuHhWp0uWjPAMem4nv4OGT7W65MvzRJ1w4RyFjseik/GGAVu4MCCHAZDFgP9dvhNAB8u2Kgv5afa82AW1XKRIFzhWTYB5v3DgVUfzYHfAaAF0JBG74HCpp/xgSg7od6mfb/hub3gsHIX9BpHXTLYDr/L/v8B/XIvtxLODozAAAAAElFTkSuQmCC";
303
+ var LOGO_BLACK_INK_DATA_URI = "data:image/png;base64,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";
304
+ var LOGO_BLACK_WHITE_DATA_URI = "data:image/png;base64,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";
305
+ var VARIANT_LOGO_DATA_URI = {
306
+ black: LOGO_NO_BLACK_INK_DATA_URI,
307
+ yellow: LOGO_BLACK_WHITE_DATA_URI,
308
+ white: LOGO_BLACK_INK_DATA_URI
301
309
  };
302
310
  var VARIANT_STYLES = {
303
311
  white: { background: "#ffffff", color: "#111111", border: "1px solid #e5e5e5" },
@@ -314,40 +322,68 @@ var KlappayButtonBase = typeof HTMLElement !== "undefined" ? HTMLElement : class
314
322
  };
315
323
  var KlappayButtonElement = class _KlappayButtonElement extends KlappayButtonBase {
316
324
  static get observedAttributes() {
317
- return ["variant", "size"];
325
+ return ["variant", "size", "charge-id", "origin"];
318
326
  }
319
327
  #button;
328
+ #logo;
329
+ #busy = false;
320
330
  constructor() {
321
331
  super();
322
332
  const shadow = this.attachShadow({ mode: "open" });
323
333
  const style = document.createElement("style");
324
334
  style.textContent = _KlappayButtonElement.#css();
335
+ this.#logo = document.createElement("img");
336
+ this.#logo.alt = "";
337
+ this.#logo.setAttribute("aria-hidden", "true");
338
+ const label = document.createElement("span");
339
+ label.textContent = "Pay with Klappay";
325
340
  this.#button = document.createElement("button");
326
341
  this.#button.type = "button";
327
- this.#button.textContent = "Pay with Klappay";
342
+ this.#button.append(this.#logo, label);
328
343
  this.#button.addEventListener("click", () => this.#handleClick());
329
344
  shadow.append(style, this.#button);
330
345
  this.#applyVariant();
331
346
  this.#applySize();
347
+ this.#applyDisabled();
332
348
  }
333
349
  attributeChangedCallback(name) {
334
350
  if (name === "variant") this.#applyVariant();
335
351
  if (name === "size") this.#applySize();
352
+ if (name === "charge-id" || name === "origin") this.#applyDisabled();
336
353
  }
337
354
  get variant() {
338
355
  const value = this.getAttribute("variant") ?? "";
339
356
  return isVariant(value) ? value : DEFAULT_VARIANT;
340
357
  }
358
+ set variant(value) {
359
+ this.setAttribute("variant", value);
360
+ }
341
361
  get size() {
342
362
  const value = this.getAttribute("size") ?? "";
343
363
  return isSize(value) ? value : DEFAULT_SIZE;
344
364
  }
365
+ set size(value) {
366
+ this.setAttribute("size", value);
367
+ }
345
368
  #applyVariant() {
346
369
  this.#button.setAttribute("data-variant", this.variant);
370
+ this.#logo.src = VARIANT_LOGO_DATA_URI[this.variant];
347
371
  }
348
372
  #applySize() {
349
373
  this.#button.setAttribute("data-size", this.size);
350
374
  }
375
+ // Only checks the origin *attribute*, not a `configure()` call made after
376
+ // this element was already upgraded — there's no subscription mechanism
377
+ // for global config changes. Set `origin` before this element is parsed,
378
+ // or as its own attribute, if the disabled state needs to react live.
379
+ #hasRequiredConfig() {
380
+ const chargeId = this.getAttribute("charge-id");
381
+ const origin = this.getAttribute("origin") ?? getGlobalConfig().origin;
382
+ return Boolean(chargeId && origin);
383
+ }
384
+ #applyDisabled() {
385
+ this.#button.disabled = this.#busy || !this.#hasRequiredConfig();
386
+ }
351
387
  #handleClick() {
352
388
  if (this.#button.disabled) return;
353
389
  const chargeId = this.getAttribute("charge-id");
@@ -364,9 +400,11 @@ var KlappayButtonElement = class _KlappayButtonElement extends KlappayButtonBase
364
400
  }
365
401
  const locale = this.getAttribute("locale") ?? getGlobalConfig().locale;
366
402
  const mode = this.getAttribute("mode");
367
- this.#button.disabled = true;
403
+ this.#busy = true;
404
+ this.#applyDisabled();
368
405
  const reenable = () => {
369
- this.#button.disabled = false;
406
+ this.#busy = false;
407
+ this.#applyDisabled();
370
408
  };
371
409
  createKlappayOne({
372
410
  chargeId,
@@ -393,20 +431,25 @@ var KlappayButtonElement = class _KlappayButtonElement extends KlappayButtonBase
393
431
  return `button[data-variant="${variant}"] { background: var(--klappay-background, ${background}); color: var(--klappay-color, ${color}); border: ${border}; }`;
394
432
  }).join("\n");
395
433
  const sizeRules = SIZES.map((size) => {
396
- const { height, fontSize, padding } = SIZE_STYLES[size];
397
- return `button[data-size="${size}"] { height: var(--klappay-button-height, ${height}); font-size: ${fontSize}; padding: ${padding}; }`;
434
+ const { height, fontSize, padding, logoSize } = SIZE_STYLES[size];
435
+ return `
436
+ button[data-size="${size}"] { height: var(--klappay-button-height, ${height}); font-size: ${fontSize}; padding: ${padding}; }
437
+ button[data-size="${size}"] img { width: ${logoSize}; height: ${logoSize}; }
438
+ `;
398
439
  }).join("\n");
399
440
  return `
400
441
  button {
401
442
  display: inline-flex;
402
443
  align-items: center;
403
444
  justify-content: center;
445
+ gap: 8px;
404
446
  border-radius: var(--klappay-radius, 8px);
405
447
  font-family: var(--klappay-font-family, system-ui, sans-serif);
406
448
  font-weight: 600;
407
449
  cursor: pointer;
408
450
  transition: opacity 0.15s ease;
409
451
  }
452
+ button img { flex-shrink: 0; }
410
453
  button:hover { opacity: 0.9; }
411
454
  button:active { opacity: 0.8; }
412
455
  button:disabled { opacity: 0.6; cursor: not-allowed; }
@@ -231,9 +231,17 @@ var SIZES = ["sm", "md", "lg"];
231
231
  var DEFAULT_VARIANT = "black";
232
232
  var DEFAULT_SIZE = "md";
233
233
  var SIZE_STYLES = {
234
- sm: { height: "32px", fontSize: "13px", padding: "0 14px" },
235
- md: { height: "40px", fontSize: "14px", padding: "0 18px" },
236
- lg: { height: "48px", fontSize: "16px", padding: "0 24px" }
234
+ sm: { height: "32px", fontSize: "13px", padding: "0 14px", logoSize: "14px" },
235
+ md: { height: "40px", fontSize: "14px", padding: "0 18px", logoSize: "16px" },
236
+ lg: { height: "48px", fontSize: "16px", padding: "0 24px", logoSize: "18px" }
237
+ };
238
+ var LOGO_NO_BLACK_INK_DATA_URI = "data:image/png;base64,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";
239
+ var LOGO_BLACK_INK_DATA_URI = "data:image/png;base64,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";
240
+ var LOGO_BLACK_WHITE_DATA_URI = "data:image/png;base64,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";
241
+ var VARIANT_LOGO_DATA_URI = {
242
+ black: LOGO_NO_BLACK_INK_DATA_URI,
243
+ yellow: LOGO_BLACK_WHITE_DATA_URI,
244
+ white: LOGO_BLACK_INK_DATA_URI
237
245
  };
238
246
  var VARIANT_STYLES = {
239
247
  white: { background: "#ffffff", color: "#111111", border: "1px solid #e5e5e5" },
@@ -250,40 +258,68 @@ var KlappayButtonBase = typeof HTMLElement !== "undefined" ? HTMLElement : class
250
258
  };
251
259
  var KlappayButtonElement = class _KlappayButtonElement extends KlappayButtonBase {
252
260
  static get observedAttributes() {
253
- return ["variant", "size"];
261
+ return ["variant", "size", "charge-id", "origin"];
254
262
  }
255
263
  #button;
264
+ #logo;
265
+ #busy = false;
256
266
  constructor() {
257
267
  super();
258
268
  const shadow = this.attachShadow({ mode: "open" });
259
269
  const style = document.createElement("style");
260
270
  style.textContent = _KlappayButtonElement.#css();
271
+ this.#logo = document.createElement("img");
272
+ this.#logo.alt = "";
273
+ this.#logo.setAttribute("aria-hidden", "true");
274
+ const label = document.createElement("span");
275
+ label.textContent = "Pay with Klappay";
261
276
  this.#button = document.createElement("button");
262
277
  this.#button.type = "button";
263
- this.#button.textContent = "Pay with Klappay";
278
+ this.#button.append(this.#logo, label);
264
279
  this.#button.addEventListener("click", () => this.#handleClick());
265
280
  shadow.append(style, this.#button);
266
281
  this.#applyVariant();
267
282
  this.#applySize();
283
+ this.#applyDisabled();
268
284
  }
269
285
  attributeChangedCallback(name) {
270
286
  if (name === "variant") this.#applyVariant();
271
287
  if (name === "size") this.#applySize();
288
+ if (name === "charge-id" || name === "origin") this.#applyDisabled();
272
289
  }
273
290
  get variant() {
274
291
  const value = this.getAttribute("variant") ?? "";
275
292
  return isVariant(value) ? value : DEFAULT_VARIANT;
276
293
  }
294
+ set variant(value) {
295
+ this.setAttribute("variant", value);
296
+ }
277
297
  get size() {
278
298
  const value = this.getAttribute("size") ?? "";
279
299
  return isSize(value) ? value : DEFAULT_SIZE;
280
300
  }
301
+ set size(value) {
302
+ this.setAttribute("size", value);
303
+ }
281
304
  #applyVariant() {
282
305
  this.#button.setAttribute("data-variant", this.variant);
306
+ this.#logo.src = VARIANT_LOGO_DATA_URI[this.variant];
283
307
  }
284
308
  #applySize() {
285
309
  this.#button.setAttribute("data-size", this.size);
286
310
  }
311
+ // Only checks the origin *attribute*, not a `configure()` call made after
312
+ // this element was already upgraded — there's no subscription mechanism
313
+ // for global config changes. Set `origin` before this element is parsed,
314
+ // or as its own attribute, if the disabled state needs to react live.
315
+ #hasRequiredConfig() {
316
+ const chargeId = this.getAttribute("charge-id");
317
+ const origin = this.getAttribute("origin") ?? getGlobalConfig().origin;
318
+ return Boolean(chargeId && origin);
319
+ }
320
+ #applyDisabled() {
321
+ this.#button.disabled = this.#busy || !this.#hasRequiredConfig();
322
+ }
287
323
  #handleClick() {
288
324
  if (this.#button.disabled) return;
289
325
  const chargeId = this.getAttribute("charge-id");
@@ -300,9 +336,11 @@ var KlappayButtonElement = class _KlappayButtonElement extends KlappayButtonBase
300
336
  }
301
337
  const locale = this.getAttribute("locale") ?? getGlobalConfig().locale;
302
338
  const mode = this.getAttribute("mode");
303
- this.#button.disabled = true;
339
+ this.#busy = true;
340
+ this.#applyDisabled();
304
341
  const reenable = () => {
305
- this.#button.disabled = false;
342
+ this.#busy = false;
343
+ this.#applyDisabled();
306
344
  };
307
345
  createKlappayOne({
308
346
  chargeId,
@@ -329,20 +367,25 @@ var KlappayButtonElement = class _KlappayButtonElement extends KlappayButtonBase
329
367
  return `button[data-variant="${variant}"] { background: var(--klappay-background, ${background}); color: var(--klappay-color, ${color}); border: ${border}; }`;
330
368
  }).join("\n");
331
369
  const sizeRules = SIZES.map((size) => {
332
- const { height, fontSize, padding } = SIZE_STYLES[size];
333
- return `button[data-size="${size}"] { height: var(--klappay-button-height, ${height}); font-size: ${fontSize}; padding: ${padding}; }`;
370
+ const { height, fontSize, padding, logoSize } = SIZE_STYLES[size];
371
+ return `
372
+ button[data-size="${size}"] { height: var(--klappay-button-height, ${height}); font-size: ${fontSize}; padding: ${padding}; }
373
+ button[data-size="${size}"] img { width: ${logoSize}; height: ${logoSize}; }
374
+ `;
334
375
  }).join("\n");
335
376
  return `
336
377
  button {
337
378
  display: inline-flex;
338
379
  align-items: center;
339
380
  justify-content: center;
381
+ gap: 8px;
340
382
  border-radius: var(--klappay-radius, 8px);
341
383
  font-family: var(--klappay-font-family, system-ui, sans-serif);
342
384
  font-weight: 600;
343
385
  cursor: pointer;
344
386
  transition: opacity 0.15s ease;
345
387
  }
388
+ button img { flex-shrink: 0; }
346
389
  button:hover { opacity: 0.9; }
347
390
  button:active { opacity: 0.8; }
348
391
  button:disabled { opacity: 0.6; cursor: not-allowed; }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@klappay/one",
3
- "version": "1.0.1",
3
+ "version": "1.1.0",
4
4
  "license": "MIT",
5
5
  "description": "Klappay One's embeddable payment button — opens the hosted identity/wallet popup (one-id) and relays the result via postMessage. Never touches a private key or a session token; framework-agnostic core with a thin React wrapper.",
6
6
  "keywords": [
package/logo.png DELETED
Binary file