@beamimpact/web-sdk 1.45.2 → 1.46.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.
Files changed (185) hide show
  1. package/dist/chunks/_share-dialog-dependencies--DwhY4w7.esm.js +2 -0
  2. package/dist/chunks/_share-dialog-dependencies--DwhY4w7.esm.js.map +1 -0
  3. package/dist/chunks/_share-dialog-dependencies-XEpMl5XM.esm.js +2 -0
  4. package/dist/chunks/_share-dialog-dependencies-XEpMl5XM.esm.js.map +1 -0
  5. package/dist/chunks/{cart-contents-HAPzwbeL.esm.d.ts → cart-contents-MrYQNVDx.esm.d.ts} +1 -1
  6. package/dist/chunks/{events-fqRWfo7p.esm.d.ts → events--Qgk7Mel.esm.d.ts} +1 -1
  7. package/dist/chunks/{index--JacA4R2.esm.js → index-2sMT9J8K.esm.js} +2 -2
  8. package/dist/chunks/{index--JacA4R2.esm.js.map → index-2sMT9J8K.esm.js.map} +1 -1
  9. package/dist/chunks/index-4kINfIHU.esm.js +2 -0
  10. package/dist/chunks/index-4kINfIHU.esm.js.map +1 -0
  11. package/dist/chunks/{index-MSoONvC5.esm.d.ts → index-8gDNc2to.esm.d.ts} +1 -1
  12. package/dist/chunks/index-COmf0U0P.esm.js +2 -0
  13. package/dist/chunks/index-COmf0U0P.esm.js.map +1 -0
  14. package/dist/chunks/{index-qs-xQCeM.esm.js → index-Fmt8u1QB.esm.js} +2 -2
  15. package/dist/chunks/{index-qs-xQCeM.esm.js.map → index-Fmt8u1QB.esm.js.map} +1 -1
  16. package/dist/chunks/index-H8fABpZF.esm.js +2 -0
  17. package/dist/chunks/index-H8fABpZF.esm.js.map +1 -0
  18. package/dist/chunks/index-HzqAV0Ls.esm.js +2 -0
  19. package/dist/chunks/index-HzqAV0Ls.esm.js.map +1 -0
  20. package/dist/chunks/{index-qt5iD9Ok.esm.d.ts → index-Ie9en2n6.esm.d.ts} +1 -1
  21. package/dist/chunks/{index-SExnliMs.esm.d.ts → index-S_lCvtkH.esm.d.ts} +1 -1
  22. package/dist/chunks/{index-JG4nmG9U.esm.d.ts → index-gQHtJWVP.esm.d.ts} +1 -1
  23. package/dist/chunks/{index-tdUx2WLc.esm.d.ts → index-ikzViFqS.esm.d.ts} +4 -4
  24. package/dist/chunks/{index-7mukhxz_.esm.d.ts → index-wqLh9Pnq.esm.d.ts} +1 -1
  25. package/dist/chunks/index-y4dGW0m2.esm.js +2 -0
  26. package/dist/chunks/index-y4dGW0m2.esm.js.map +1 -0
  27. package/dist/chunks/index-yhi0tTdC.esm.js +2 -0
  28. package/dist/chunks/index-yhi0tTdC.esm.js.map +1 -0
  29. package/dist/chunks/localize-m-_ESmpk.esm.js.map +1 -1
  30. package/dist/chunks/localize-o-cYvHQf.esm.js.map +1 -1
  31. package/dist/chunks/{openapi-spec-RlP2IT1i.esm.d.ts → openapi-spec--os_utEo.esm.d.ts} +55 -1
  32. package/dist/chunks/order-page--Xn2Rb6J.esm.js +2 -0
  33. package/dist/chunks/{order-page-KZ7xLkRW.esm.js.map → order-page--Xn2Rb6J.esm.js.map} +1 -1
  34. package/dist/chunks/{order-page-FLhpaZg2.esm.d.ts → order-page-GwRa273v.esm.d.ts} +3 -3
  35. package/dist/chunks/order-page-uEOo5EPy.esm.js +2 -0
  36. package/dist/chunks/{order-page-mlWRT5YL.esm.js.map → order-page-uEOo5EPy.esm.js.map} +1 -1
  37. package/dist/chunks/{promo-pill-label-58PJRvSl.esm.js → promo-pill-label-P1X4xeAx.esm.js} +4 -3
  38. package/dist/chunks/promo-pill-label-P1X4xeAx.esm.js.map +1 -0
  39. package/dist/chunks/{routes-FBB1GA4-.esm.js → routes-F1ZIumMP.esm.js} +2 -2
  40. package/dist/chunks/{routes-FBB1GA4-.esm.js.map → routes-F1ZIumMP.esm.js.map} +1 -1
  41. package/dist/chunks/{routes-NIuAzAOC.esm.d.ts → routes-iurI6dvR.esm.d.ts} +71 -1
  42. package/dist/chunks/{routes-jmFlXAbv.esm.js → routes-sQWfbAoi.esm.js} +2 -2
  43. package/dist/chunks/{routes-jmFlXAbv.esm.js.map → routes-sQWfbAoi.esm.js.map} +1 -1
  44. package/dist/chunks/{share-button-bQ8brpBZ.esm.js → share-button-2RaDSzSs.esm.js} +3 -4
  45. package/dist/chunks/{share-button-hLOsYlSA.esm.js.map → share-button-2RaDSzSs.esm.js.map} +1 -1
  46. package/dist/chunks/{share-button-hLOsYlSA.esm.js → share-button-_QWVlCcB.esm.js} +3 -4
  47. package/dist/chunks/{share-button-bQ8brpBZ.esm.js.map → share-button-_QWVlCcB.esm.js.map} +1 -1
  48. package/dist/chunks/{shoelace-components-leDI-Yop.esm.js → shoelace-components-9s7uTeO6.esm.js} +2 -2
  49. package/dist/chunks/{shoelace-components-leDI-Yop.esm.js.map → shoelace-components-9s7uTeO6.esm.js.map} +1 -1
  50. package/dist/chunks/{shoelace-components-qjNlvvPx.esm.js → shoelace-components-tjFhbEiI.esm.js} +2 -2
  51. package/dist/chunks/{shoelace-components-qjNlvvPx.esm.js.map → shoelace-components-tjFhbEiI.esm.js.map} +1 -1
  52. package/dist/chunks/{update-cart-Hebtxhto.esm.d.ts → update-cart-KjKc8Cls.esm.d.ts} +1 -1
  53. package/dist/chunks/{update-cart-aKQ3Cjc8.esm.js → update-cart-T7h4g2nt.esm.js} +2 -2
  54. package/dist/chunks/{update-cart-aKQ3Cjc8.esm.js.map → update-cart-T7h4g2nt.esm.js.map} +1 -1
  55. package/dist/chunks/{update-cart-j9LPS5By.esm.js → update-cart-WyIeEybK.esm.js} +2 -2
  56. package/dist/chunks/{update-cart-j9LPS5By.esm.js.map → update-cart-WyIeEybK.esm.js.map} +1 -1
  57. package/dist/components/community-impact.esm.js +1 -1
  58. package/dist/components/community-impact.js +1 -1
  59. package/dist/components/cumulative-impact.esm.js +1 -1
  60. package/dist/components/cumulative-impact.esm.js.map +1 -1
  61. package/dist/components/cumulative-impact.js +1 -1
  62. package/dist/components/cumulative-impact.js.map +1 -1
  63. package/dist/components/impact-overview.d.ts +5 -1
  64. package/dist/components/impact-overview.esm.js +31 -25
  65. package/dist/components/impact-overview.esm.js.map +1 -1
  66. package/dist/components/impact-overview.js +31 -25
  67. package/dist/components/impact-overview.js.map +1 -1
  68. package/dist/components/index.d.ts +3 -3
  69. package/dist/components/index.esm.js +1 -1
  70. package/dist/components/index.js +1 -1
  71. package/dist/components/post-purchase.d.ts +4 -2
  72. package/dist/components/post-purchase.esm.js +1 -1
  73. package/dist/components/post-purchase.js +1 -1
  74. package/dist/components/product-details-page.d.ts +6 -1
  75. package/dist/components/product-details-page.esm.js +106 -33
  76. package/dist/components/product-details-page.esm.js.map +1 -1
  77. package/dist/components/product-details-page.js +106 -33
  78. package/dist/components/product-details-page.js.map +1 -1
  79. package/dist/components/redeem-transaction.d.ts +2 -2
  80. package/dist/components/redeem-transaction.esm.js +2 -2
  81. package/dist/components/redeem-transaction.esm.js.map +1 -1
  82. package/dist/components/redeem-transaction.js +2 -2
  83. package/dist/components/redeem-transaction.js.map +1 -1
  84. package/dist/components/select-nonprofit.d.ts +2 -2
  85. package/dist/components/select-nonprofit.esm.js +4 -4
  86. package/dist/components/select-nonprofit.esm.js.map +1 -1
  87. package/dist/components/select-nonprofit.js +4 -4
  88. package/dist/components/select-nonprofit.js.map +1 -1
  89. package/dist/components/select-subscription-nonprofit.esm.js +6 -4
  90. package/dist/components/select-subscription-nonprofit.esm.js.map +1 -1
  91. package/dist/components/select-subscription-nonprofit.js +6 -4
  92. package/dist/components/select-subscription-nonprofit.js.map +1 -1
  93. package/dist/components/shopify.d.ts +6 -6
  94. package/dist/components/shopify.esm.js +1 -1
  95. package/dist/components/shopify.js +1 -1
  96. package/dist/components/social-share.esm.js +1 -1
  97. package/dist/components/social-share.js +1 -1
  98. package/dist/components/subscription-impact.d.ts +2 -0
  99. package/dist/components/subscription-impact.esm.js +1 -1
  100. package/dist/components/subscription-impact.js +1 -1
  101. package/dist/components/subscription-management.d.ts +6 -3
  102. package/dist/components/subscription-management.esm.js +10 -10
  103. package/dist/components/subscription-management.esm.js.map +1 -1
  104. package/dist/components/subscription-management.js +10 -10
  105. package/dist/components/subscription-management.js.map +1 -1
  106. package/dist/index.d.ts +12 -12
  107. package/dist/index.esm.js +1 -1
  108. package/dist/index.js +1 -1
  109. package/dist/integrations/beam.esm.js +1 -1
  110. package/dist/integrations/beam.js +1 -1
  111. package/dist/integrations/cart.d.ts +3 -3
  112. package/dist/integrations/cart.esm.js +1 -1
  113. package/dist/integrations/cart.js +1 -1
  114. package/dist/integrations/index.d.ts +10 -10
  115. package/dist/integrations/index.esm.js +1 -1
  116. package/dist/integrations/index.js +1 -1
  117. package/dist/integrations/logs.d.ts +2 -2
  118. package/dist/integrations/logs.esm.js +1 -1
  119. package/dist/integrations/logs.js +1 -1
  120. package/dist/integrations/shopify.d.ts +5 -5
  121. package/dist/integrations/shopify.esm.js +1 -1
  122. package/dist/integrations/shopify.js +1 -1
  123. package/dist/integrations/statsig.d.ts +3 -0
  124. package/dist/integrations/statsig.esm.js +3 -3
  125. package/dist/integrations/statsig.esm.js.map +1 -1
  126. package/dist/integrations/statsig.js +3 -3
  127. package/dist/integrations/statsig.js.map +1 -1
  128. package/dist/integrations/utils.d.ts +3 -3
  129. package/dist/react/community-impact.esm.js +1 -1
  130. package/dist/react/community-impact.js +1 -1
  131. package/dist/react/cumulative-impact.esm.js +1 -1
  132. package/dist/react/cumulative-impact.js +1 -1
  133. package/dist/react/impact-overview.esm.js +1 -1
  134. package/dist/react/impact-overview.js +1 -1
  135. package/dist/react/index.d.ts +4 -4
  136. package/dist/react/index.esm.js +1 -1
  137. package/dist/react/index.js +1 -1
  138. package/dist/react/post-purchase.d.ts +2 -2
  139. package/dist/react/post-purchase.esm.js +1 -1
  140. package/dist/react/post-purchase.js +1 -1
  141. package/dist/react/product-details-page.d.ts +2 -0
  142. package/dist/react/product-details-page.esm.js +1 -1
  143. package/dist/react/product-details-page.esm.js.map +1 -1
  144. package/dist/react/product-details-page.js +1 -1
  145. package/dist/react/product-details-page.js.map +1 -1
  146. package/dist/react/redeem-transaction.d.ts +3 -3
  147. package/dist/react/redeem-transaction.esm.js +1 -1
  148. package/dist/react/redeem-transaction.js +1 -1
  149. package/dist/react/select-nonprofit.d.ts +3 -3
  150. package/dist/react/select-nonprofit.esm.js +1 -1
  151. package/dist/react/select-nonprofit.js +1 -1
  152. package/dist/react/select-subscription-nonprofit.d.ts +3 -3
  153. package/dist/react/select-subscription-nonprofit.esm.js +1 -1
  154. package/dist/react/select-subscription-nonprofit.js +1 -1
  155. package/dist/react/social-share.esm.js +1 -1
  156. package/dist/react/social-share.js +1 -1
  157. package/dist/react/subscription-impact.esm.js +1 -1
  158. package/dist/react/subscription-impact.js +1 -1
  159. package/dist/react/subscription-management.d.ts +3 -3
  160. package/dist/react/subscription-management.esm.js +1 -1
  161. package/dist/react/subscription-management.js +1 -1
  162. package/dist/utils/events.d.ts +3 -3
  163. package/dist/utils/index.d.ts +3 -3
  164. package/dist/utils/local-storage.esm.js.map +1 -1
  165. package/dist/utils/local-storage.js.map +1 -1
  166. package/package.json +1 -1
  167. package/dist/chunks/_share-dialog-dependencies-R9RsuSGx.esm.js +0 -2
  168. package/dist/chunks/_share-dialog-dependencies-R9RsuSGx.esm.js.map +0 -1
  169. package/dist/chunks/_share-dialog-dependencies-o5GBtNTA.esm.js +0 -2
  170. package/dist/chunks/_share-dialog-dependencies-o5GBtNTA.esm.js.map +0 -1
  171. package/dist/chunks/index-1WxwWfcp.esm.js +0 -2
  172. package/dist/chunks/index-1WxwWfcp.esm.js.map +0 -1
  173. package/dist/chunks/index-4fdLArZg.esm.js +0 -2
  174. package/dist/chunks/index-4fdLArZg.esm.js.map +0 -1
  175. package/dist/chunks/index-Hd_2hpsA.esm.js +0 -2
  176. package/dist/chunks/index-Hd_2hpsA.esm.js.map +0 -1
  177. package/dist/chunks/index-MJNFm2RK.esm.js +0 -2
  178. package/dist/chunks/index-MJNFm2RK.esm.js.map +0 -1
  179. package/dist/chunks/index-gBAASIWa.esm.js +0 -2
  180. package/dist/chunks/index-gBAASIWa.esm.js.map +0 -1
  181. package/dist/chunks/index-lyf1T2wZ.esm.js +0 -2
  182. package/dist/chunks/index-lyf1T2wZ.esm.js.map +0 -1
  183. package/dist/chunks/order-page-KZ7xLkRW.esm.js +0 -2
  184. package/dist/chunks/order-page-mlWRT5YL.esm.js +0 -2
  185. package/dist/chunks/promo-pill-label-58PJRvSl.esm.js.map +0 -1
@@ -1,4 +1,4 @@
1
- import{i as f}from"./is-all-html-elements-SdSkxirh.esm.js";import{h as x,y as m,Z as v,g as l}from"./lit-iNN5L_Qk.esm.js";import"./vendor-GKiOHg2N.esm.js";import{u as d,s as o}from"./share-button-SNvuFDC9.esm.js";const y=(i,{source:t="contentLength"}={})=>{const a=i instanceof NodeList?Array.from(i):i;if(a.length===0||!f(a))return;const r=(t==="contentLength"?a.sort((e,n)=>n.innerText.length-e.innerText.length)[0]:a.sort((e,n)=>n.clientHeight-e.clientHeight)[0])?.clientHeight||0;for(const e of a)e.clientHeight!==r&&(e.style.height=r+"px")};function S(){return/Android|iPhone/i.test(navigator.userAgent)}var w=Object.defineProperty,k=Object.getOwnPropertyDescriptor,c=(i,t,a,r)=>{for(var e=r>1?void 0:r?k(t,a):t,n=i.length-1,h;n>=0;n--)(h=i[n])&&(e=(r?h(t,a,e):h(e))||e);return r&&e&&w(t,a,e),e};class s extends x{constructor(){super(...arguments),this.shareIcon=null,this.imageUrl=null,this.brandName=null,this.buttonText=null,this.configLang="en"}connectedCallback(){super.connectedCallback()}async handleShareClick(){try{if(!this.imageUrl||!this.brandName||!this.configLang)return;await import("./_share-dialog-dependencies-R9RsuSGx.esm.js"),S()?this.openSystemShareSheet(this.imageUrl):this.handleShareDialog(this.imageUrl,this.brandName)}catch(t){console.error("Error sharing impact:",t)}}async handleShareDialog(t,a){if(!t)return;const r=this.shadowRoot?.querySelector("sl-dialog");if(r){r.show();return}await import("./_share-dialog-dependencies-R9RsuSGx.esm.js");const e=this.shadowRoot?.querySelector("#modal-root"),n=await d(t),h=URL.createObjectURL(n),b=()=>{this.shadowRoot?.querySelector("sl-dialog")?.hide()},g=async()=>{await navigator.clipboard.write([new ClipboardItem({"image/png":n})]),setTimeout(b,250)},u=()=>{setTimeout(b,250)},p=m`
1
+ import{i as f}from"./is-all-html-elements-SdSkxirh.esm.js";import{h as x,y as m,Z as v,g as l}from"./lit-iNN5L_Qk.esm.js";import"./vendor-GKiOHg2N.esm.js";import{u as d,s as o}from"./share-button-SNvuFDC9.esm.js";const y=(i,{source:t="contentLength"}={})=>{const a=i instanceof NodeList?Array.from(i):i;if(a.length===0||!f(a))return;const r=(t==="contentLength"?a.sort((e,n)=>n.innerText.length-e.innerText.length)[0]:a.sort((e,n)=>n.clientHeight-e.clientHeight)[0])?.clientHeight||0;for(const e of a)e.clientHeight!==r&&(e.style.height=r+"px")};function S(){return/Android|iPhone/i.test(navigator.userAgent)}var w=Object.defineProperty,C=Object.getOwnPropertyDescriptor,c=(i,t,a,r)=>{for(var e=r>1?void 0:r?C(t,a):t,n=i.length-1,h;n>=0;n--)(h=i[n])&&(e=(r?h(t,a,e):h(e))||e);return r&&e&&w(t,a,e),e};class s extends x{constructor(){super(...arguments),this.shareIcon=null,this.imageUrl=null,this.brandName=null,this.buttonText=null,this.configLang="en"}connectedCallback(){super.connectedCallback()}async handleShareClick(){try{if(!this.imageUrl||!this.brandName||!this.configLang)return;await import("./_share-dialog-dependencies--DwhY4w7.esm.js"),S()?this.openSystemShareSheet(this.imageUrl):this.handleShareDialog(this.imageUrl,this.brandName)}catch(t){console.error("Error sharing impact:",t)}}async handleShareDialog(t,a){if(!t)return;const r=this.shadowRoot?.querySelector("sl-dialog");if(r){r.show();return}await import("./_share-dialog-dependencies--DwhY4w7.esm.js");const e=this.shadowRoot?.querySelector("#modal-root"),n=await d(t),h=URL.createObjectURL(n),b=()=>{this.shadowRoot?.querySelector("sl-dialog")?.hide()},g=async()=>{await navigator.clipboard.write([new ClipboardItem({"image/png":n})]),setTimeout(b,250)},u=()=>{setTimeout(b,250)},p=m`
2
2
  <style>
3
3
  .plain-button {
4
4
  border: none;
@@ -118,7 +118,6 @@ import{i as f}from"./is-all-html-elements-SdSkxirh.esm.js";import{h as x,y as m,
118
118
  margin-bottom: var(--beam-share-button-marginBottom);
119
119
  text-transform: var(--beam-share-button-textTransform);
120
120
  line-height: var(--beam-share-button-lineHeight);
121
- /* TODO: extract palette variable - sky-100 color */
122
121
  background-color: var(--beam-share-button-backgroundColor);
123
122
  color: var(--beam-share-button-color, inherit);
124
123
  border-radius: var(--beam-share-button-borderRadius);
@@ -160,5 +159,5 @@ import{i as f}from"./is-all-html-elements-SdSkxirh.esm.js";import{h as x,y as m,
160
159
  <span class="share-button-text">${this.buttonText||o[this.configLang].impactShareButton()}</span>
161
160
  </button>
162
161
  <div id="modal-root"></div>
163
- `}}c([l({type:String})],s.prototype,"shareIcon",2),c([l({type:String})],s.prototype,"imageUrl",2),c([l({type:String})],s.prototype,"brandName",2),c([l({type:String})],s.prototype,"buttonText",2),c([l({type:String})],s.prototype,"configLang",2),customElements.get("beam-share-button")||customElements.define("beam-share-button",s);const C={"--beam-share-button-fontFamily":"inherit","--beam-share-button-fontSize":"14px","--beam-share-button-fontWeight":"600","--beam-share-button-textTransform":"none","--beam-share-button-marginTop":"10px","--beam-share-button-marginBottom":"10px","--beam-share-button-padding":"8px 18px 8px 16px","--beam-share-button-lineHeight":"inherit","--beam-share-button-color":"#0A323C","--beam-share-button-backgroundColor":"#fff","--beam-share-button-borderRadius":"30px","--beam-share-button-borderColor":"#0A323C","--beam-share-button-borderWidth":"1px","--beam-share-button-width":"auto","--beam-share-button-hover-borderColor":"transparent","--beam-share-button-hover-backgroundColor":"#0A323C","--beam-share-button-hover-color":"#fff","--beam-share-button-icon-size":"16px","--beam-share-button-text-textDecoration":"none","--beam-share-dialog-padding":"30px 30px","--beam-share-title-fontSize":"30px","--beam-share-title-fontWeight":"bold","--beam-share-text-fontSize":"16px","--beam-share-text-lineHeight":"1.3","--beam-share-text-marginTop":"10px","--beam-share-image-borderRadius":"4px","--beam-share-image-width":"200px","--beam-share-image-margin":"20px","--beam-share-actions-margin":"30px 60px","--beam-share-action-icon-size":"32px","--beam-share-action-text-fontSize":"16px","--beam-share-action-text-lineHeight":"1.3","--beam-share-text-action-marginTop":"10px","--beam-share-close-backgroundColor":"#ffd522","--beam-share-close-text-color":"#000","--beam-share-close-padding":"12px","--beam-share-close-borderRadius":"4px","--beam-share-close-fontSize":"16px","--beam-share-close-fontWeight":"bold","--beam-share-close-focus-borderColor":"#c2dcff"};export{C as a,y as s};
164
- //# sourceMappingURL=share-button-hLOsYlSA.esm.js.map
162
+ `}}c([l({type:String})],s.prototype,"shareIcon",2),c([l({type:String})],s.prototype,"imageUrl",2),c([l({type:String})],s.prototype,"brandName",2),c([l({type:String})],s.prototype,"buttonText",2),c([l({type:String})],s.prototype,"configLang",2),customElements.get("beam-share-button")||customElements.define("beam-share-button",s);const k={"--beam-share-button-fontFamily":"inherit","--beam-share-button-fontSize":"14px","--beam-share-button-fontWeight":"600","--beam-share-button-textTransform":"none","--beam-share-button-marginTop":"10px","--beam-share-button-marginBottom":"10px","--beam-share-button-padding":"8px 18px 8px 16px","--beam-share-button-lineHeight":"inherit","--beam-share-button-color":"#0A323C","--beam-share-button-backgroundColor":"#fff","--beam-share-button-borderRadius":"30px","--beam-share-button-borderColor":"#0A323C","--beam-share-button-borderWidth":"1px","--beam-share-button-width":"auto","--beam-share-button-hover-borderColor":"transparent","--beam-share-button-hover-backgroundColor":"#0A323C","--beam-share-button-hover-color":"#fff","--beam-share-button-icon-size":"16px","--beam-share-button-text-textDecoration":"none","--beam-share-dialog-padding":"30px 30px","--beam-share-title-fontSize":"30px","--beam-share-title-fontWeight":"bold","--beam-share-text-fontSize":"16px","--beam-share-text-lineHeight":"1.3","--beam-share-text-marginTop":"10px","--beam-share-image-borderRadius":"4px","--beam-share-image-width":"200px","--beam-share-image-margin":"20px","--beam-share-actions-margin":"30px 60px","--beam-share-action-icon-size":"32px","--beam-share-action-text-fontSize":"16px","--beam-share-action-text-lineHeight":"1.3","--beam-share-text-action-marginTop":"10px","--beam-share-close-backgroundColor":"#ffd522","--beam-share-close-text-color":"#000","--beam-share-close-padding":"12px","--beam-share-close-borderRadius":"4px","--beam-share-close-fontSize":"16px","--beam-share-close-fontWeight":"bold","--beam-share-close-focus-borderColor":"#c2dcff"};export{k as a,y as s};
163
+ //# sourceMappingURL=share-button-_QWVlCcB.esm.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"share-button-bQ8brpBZ.esm.js","sources":["../../src/shared/sync-element-heights.ts","../../src/shared/feature-detection.ts","../../src/shared/components/share-button.ts"],"sourcesContent":["import { isAllHtmlElements } from \"./is-all-html-elements\";\n\n/**\n * Synchronize heights of elements\n * @param {Array<HTMLElement|null>} elements - Elements to synchronize\n * @param {'contentLength' | 'currentHeight'} [options.source='contentLength'] -\n * Method used to get the height value to sync across elements. `contentLength`\n * (innerText.length) is reliable for pure text content when responding to\n * window resizing. Otherwise, currentHeight can be used to sync the tallest\n * element's height to all the other elements. Note that this works poorly\n * unless content is allowed to reflow with explicit height attributes removed\n * between synchronization calls.\n */\nexport const syncElementHeights = (\n elements: Array<HTMLElement | null> | NodeList,\n {\n source = \"contentLength\",\n }: {\n source?: \"contentLength\" | \"currentHeight\";\n } = {}\n) => {\n const els = elements instanceof NodeList ? Array.from(elements) : elements;\n\n if (els.length === 0 || !isAllHtmlElements(els)) {\n return;\n }\n\n const heightSource =\n source === \"contentLength\"\n ? els.sort((a, b) => {\n return b.innerText.length - a.innerText.length;\n })[0]\n : els.sort((a, b) => {\n return b.clientHeight - a.clientHeight;\n })[0];\n\n const syncedHeight = heightSource?.clientHeight || 0;\n\n for (const el of els) {\n if (el.clientHeight !== syncedHeight) {\n el.style[\"height\"] = syncedHeight + \"px\";\n }\n }\n};\n","export function isMobile() {\n return /Android|iPhone/i.test(navigator.userAgent);\n}\n\nexport function hasSystemShare() {\n return !!navigator.share;\n}\n","import { LitElement, html, render } from \"lit\";\nimport { property } from \"lit/decorators/property.js\";\nimport \"@shoelace-style/shoelace/dist/components/icon/icon.js\";\nimport { LANGUAGES } from \"../../api-sdk/types\";\nimport { urlToFile } from \"../files\";\nimport { isMobile } from \"../feature-detection\";\nimport { strings } from \"./strings/share-button\";\n\ninterface SlDialogElement extends HTMLElement {\n show: () => void;\n hide: () => void;\n}\n\nexport class BeamShareButton extends LitElement {\n @property({ type: String }) shareIcon: string | null = null;\n @property({ type: String }) imageUrl?: string | null = null;\n @property({ type: String }) brandName: string | null = null;\n @property({ type: String }) buttonText?: string | null = null;\n @property({ type: String }) configLang: LANGUAGES = \"en\";\n\n connectedCallback() {\n super.connectedCallback();\n }\n\n async handleShareClick() {\n try {\n if (!this.imageUrl || !this.brandName || !this.configLang) return;\n await import(\"./_share-dialog-dependencies.js\");\n if (isMobile()) {\n this.openSystemShareSheet(this.imageUrl);\n } else {\n this.handleShareDialog(this.imageUrl, this.brandName);\n }\n } catch (err) {\n console.error(\"Error sharing impact:\", err);\n }\n }\n\n async handleShareDialog(imageUrl: string, brandName: string) {\n if (!imageUrl) return;\n\n const existingDialog = this.shadowRoot?.querySelector(\"sl-dialog\") as SlDialogElement;\n\n if (existingDialog) {\n existingDialog.show();\n return;\n }\n\n await import(\"./_share-dialog-dependencies.js\"); // Import libraries async to reduce bundle size if share feature is unused\n\n const modalRoot = this.shadowRoot?.querySelector(\"#modal-root\") as HTMLElement;\n\n const file = await urlToFile(imageUrl);\n\n const dataUrl = URL.createObjectURL(file);\n\n const handleClickClose = () => {\n (this.shadowRoot?.querySelector(\"sl-dialog\") as SlDialogElement)?.hide();\n };\n\n const handleClickCopy = async () => {\n await navigator.clipboard.write([new ClipboardItem({ \"image/png\": file })]);\n setTimeout(handleClickClose, 250);\n };\n\n const handleClickDownload = () => {\n setTimeout(handleClickClose, 250);\n };\n\n const dialogTemplate = html`\n <style>\n .plain-button {\n border: none;\n background: none;\n font-size: inherit;\n font-family: inherit;\n }\n .share-dialog::part(panel) {\n padding: var(--beam-share-dialog-padding);\n text-align: center;\n }\n .share-title {\n font-size: var(--beam-share-title-fontSize);\n font-weight: var(--beam-share-title-fontWeight);\n }\n .share-text {\n font-size: var(--beam-share-text-fontSize);\n line-height: var(--beam-share-text-lineHeight);\n margin-top: var(--beam-share-text-marginTop);\n }\n .share-image {\n border-radius: var(--beam-share-image-borderRadius);\n width: var(--beam-share-image-width);\n display: block;\n margin: var(--beam-share-image-margin) auto;\n }\n .share-actions {\n margin: var(--beam-share-actions-margin);\n }\n .share-action-button {\n display: inline-flex;\n justify-content: center;\n align-items: center;\n flex-direction: column;\n padding: 5px;\n }\n .share-action-icon {\n font-size: var(--beam-share-action-icon-size);\n }\n .share-action-button:hover .share-action-icon {\n scale: 1.1;\n }\n .share-action-text {\n font-size: var(--beam-share-action-text-fontSize);\n line-height: var(--beam-share-action-text-lineHeight);\n margin-top: var(--beam-share-text-action-marginTop);\n }\n .plain-button {\n border: none;\n background: none;\n font-size: inherit;\n font-family: inherit;\n }\n .plain-link {\n text-decoration: none;\n color: inherit;\n }\n .share-close {\n display: block;\n background-color: var(--beam-share-close-backgroundColor);\n color: var(--beam-share-close-text-color);\n justify-content: center;\n padding: var(--beam-share-close-padding);\n border-radius: var(--beam-share-close-borderRadius);\n width: 100%;\n font-size: var(--beam-share-close-fontSize);\n font-weight: var(--beam-share-close-fontWeight);\n }\n .share-close:hover {\n outline: 2px solid var(--beam-share-close-focus-borderColor);\n }\n </style>\n <sl-dialog open label=\"${strings[this.configLang].impactShareTitle()}\" no-header class=\"share-dialog\">\n <h2 class=\"share-title\">${strings[this.configLang].impactShareTitle()}</h2>\n <p class=\"share-text\">${strings[this.configLang].impactShareText({ brandName })}</p>\n <img src=\"${imageUrl}\" alt=\"${strings[this.configLang].impactShareTitle()}\" class=\"share-image\" />\n <div class=\"share-actions\" style=\"display: flex; justify-content: space-evenly\">\n <div style=\"flex: 1; text-align: center\">\n <button class=\"plain-button button share-action-button\" @click=\"${handleClickCopy}\">\n <sl-icon\n library=\"lucide\"\n name=\"copy\"\n label=\"${strings[this.configLang].impactShareCopy()}\"\n class=\"share-action-icon\"\n ></sl-icon>\n <div class=\"share-action-text\">${strings[this.configLang].impactShareCopy()}</div>\n </button>\n </div>\n <div style=\"flex: 1; text-align: center\">\n <a\n class=\"plain-button button share-action-button plain-link\"\n download=\"${strings[this.configLang].impactShareTitle()}\"\n href=\"${dataUrl}\"\n @click=\"${handleClickDownload}\"\n >\n <sl-icon\n library=\"lucide\"\n name=\"download\"\n label=\"${strings[this.configLang].impactShareDownload()}\"\n class=\"share-action-icon\"\n ></sl-icon>\n <div class=\"share-action-text\">${strings[this.configLang].impactShareDownload()}</div>\n </a>\n </div>\n </div>\n <button class=\"plain-button button share-close\" @click=\"${handleClickClose}\">\n ${strings[this.configLang].impactShareClose()}\n </button>\n </sl-dialog>\n `;\n if (modalRoot) {\n render(dialogTemplate, modalRoot);\n }\n }\n\n async openSystemShareSheet(imageUrl: string) {\n if (!imageUrl) return;\n\n const file = await urlToFile(imageUrl);\n\n if (navigator.share) {\n await navigator.share({\n files: [file],\n });\n }\n }\n\n disconnectedCallback() {\n super.disconnectedCallback();\n }\n render() {\n if (!this.imageUrl || !this.brandName || !this.configLang) return html``;\n return html`\n <style>\n .share-button {\n font-family: var(--beam-share-button-fontFamily);\n font-size: var(--beam-share-button-fontSize);\n font-weight: var(--beam-share-button-fontWeight);\n margin-top: var(--beam-share-button-marginTop);\n margin-bottom: var(--beam-share-button-marginBottom);\n text-transform: var(--beam-share-button-textTransform);\n line-height: var(--beam-share-button-lineHeight);\n /* TODO: extract palette variable - sky-100 color */\n background-color: var(--beam-share-button-backgroundColor);\n color: var(--beam-share-button-color, inherit);\n border-radius: var(--beam-share-button-borderRadius);\n border-color: var(--beam-share-button-borderColor);\n border-width: var(--beam-share-button-borderWidth);\n /* add extra padding on side without icon for optical alignment */\n padding: var(--beam-share-button-padding);\n width: var(--beam-share-button-width);\n transition: 0.15s;\n }\n .share-button:hover {\n background-color: var(--beam-share-button-hover-backgroundColor);\n color: var(--beam-share-button-hover-color);\n border-color: var(--beam-share-button-hover-borderColor);\n }\n .share-button-text {\n text-decoration: var(--beam-share-button-text-textDecoration);\n margin-left: 0.33em;\n }\n .share-button-icon {\n font-size: var(--beam-share-button-icon-size);\n }\n .button {\n cursor: pointer;\n }\n .icon-button {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n }\n </style>\n <button @click=\"${this.handleShareClick}\" class=\"share-button share-button-inline button icon-button\">\n <sl-icon\n name=\"${this.shareIcon}\"\n library=\"lucide\"\n label=\"${strings[this.configLang].impactShareButton()}\"\n class=\"share-button-icon\"\n ></sl-icon>\n <span class=\"share-button-text\">${this.buttonText || strings[this.configLang].impactShareButton()}</span>\n </button>\n <div id=\"modal-root\"></div>\n `;\n }\n}\n\ncustomElements.get(\"beam-share-button\") || customElements.define(\"beam-share-button\", BeamShareButton);\n\nexport const shareButtonConfigDefaults = {\n \"--beam-share-button-fontFamily\": \"inherit\",\n \"--beam-share-button-fontSize\": \"14px\",\n \"--beam-share-button-fontWeight\": \"600\",\n \"--beam-share-button-textTransform\": \"none\",\n \"--beam-share-button-marginTop\": \"10px\",\n \"--beam-share-button-marginBottom\": \"10px\",\n \"--beam-share-button-padding\": \"8px 18px 8px 16px\",\n \"--beam-share-button-lineHeight\": \"inherit\",\n \"--beam-share-button-color\": \"#0A323C\",\n \"--beam-share-button-backgroundColor\": \"#fff\",\n \"--beam-share-button-borderRadius\": \"30px\",\n \"--beam-share-button-borderColor\": \"#0A323C\",\n \"--beam-share-button-borderWidth\": \"1px\",\n\n \"--beam-share-button-width\": \"auto\",\n\n \"--beam-share-button-hover-borderColor\": \"transparent\",\n \"--beam-share-button-hover-backgroundColor\": \"#0A323C\",\n \"--beam-share-button-hover-color\": \"#fff\",\n\n \"--beam-share-button-icon-size\": \"16px\",\n\n \"--beam-share-button-text-textDecoration\": \"none\",\n\n \"--beam-share-dialog-padding\": \"30px 30px\",\n\n \"--beam-share-title-fontSize\": \"30px\",\n \"--beam-share-title-fontWeight\": \"bold\",\n\n \"--beam-share-text-fontSize\": \"16px\",\n \"--beam-share-text-lineHeight\": \"1.3\",\n \"--beam-share-text-marginTop\": \"10px\",\n\n \"--beam-share-image-borderRadius\": \"4px\",\n \"--beam-share-image-width\": \"200px\",\n \"--beam-share-image-margin\": \"20px\",\n\n \"--beam-share-actions-margin\": \"30px 60px\",\n \"--beam-share-action-icon-size\": \"32px\",\n\n \"--beam-share-action-text-fontSize\": \"16px\",\n \"--beam-share-action-text-lineHeight\": \"1.3\",\n \"--beam-share-text-action-marginTop\": \"10px\",\n\n \"--beam-share-close-backgroundColor\": \"#ffd522\",\n \"--beam-share-close-text-color\": \"#000\",\n \"--beam-share-close-padding\": \"12px\",\n \"--beam-share-close-borderRadius\": \"4px\",\n \"--beam-share-close-fontSize\": \"16px\",\n \"--beam-share-close-fontWeight\": \"bold\",\n\n \"--beam-share-close-focus-borderColor\": \"#c2dcff\",\n} as const;\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"beam-share-button\": BeamShareButton;\n }\n}\n"],"names":["syncElementHeights","elements","source","els","isAllHtmlElements","syncedHeight","a","b","el","isMobile","f","x","i","h","s","e","o","t","r","n","BeamShareButton","LitElement","err","imageUrl","brandName","existingDialog","modalRoot","file","urlToFile","dataUrl","handleClickClose","handleClickCopy","handleClickDownload","dialogTemplate","html","strings","render","__decorateClass","property","shareButtonConfigDefaults"],"mappings":"qNAaO,MAAMA,EAAqB,CAChCC,EACA,CACE,OAAAC,EAAS,eACX,EAEI,CAAA,IACD,CACH,MAAMC,EAAMF,aAAoB,SAAW,MAAM,KAAKA,CAAQ,EAAIA,EAElE,GAAIE,EAAI,SAAW,GAAK,CAACC,EAAkBD,CAAG,EAC5C,OAYF,MAAME,GARJH,IAAW,gBACPC,EAAI,KAAK,CAACG,EAAGC,IACJA,EAAE,UAAU,OAASD,EAAE,UAAU,MACzC,EAAE,CAAC,EACJH,EAAI,KAAK,CAACG,EAAGC,IACJA,EAAE,aAAeD,EAAE,YAC3B,EAAE,CAAC,IAEyB,cAAgB,EAEnD,UAAWE,KAAML,EACXK,EAAG,eAAiBH,IACtBG,EAAG,MAAM,OAAYH,EAAe,KAG1C,EC3CO,SAASI,GAAW,CACzB,MAAO,kBAAkB,KAAK,UAAU,SAAS,CACnD,CCFA,IAAAC,EAAA,OAAA,eAAAC,EAAA,OAAA,yBAAAC,EAAA,CAAAC,EAAAC,EAAAC,EAAAC,IAAA,CAAA,QAAAC,EAAAD,EAAA,EAAA,OAAAA,EAAAL,EAAAG,EAAAC,CAAA,EAAAD,EAAAI,EAAAL,EAAA,OAAA,EAAAM,EAAAD,GAAA,EAAAA,KAAAC,EAAAN,EAAAK,CAAA,KAAAD,GAAAD,EAAAG,EAAAL,EAAAC,EAAAE,CAAA,EAAAE,EAAAF,CAAA,IAAAA,GAAA,OAAAD,GAAAC,GAAAP,EAAAI,EAAAC,EAAAE,CAAA,EAAAA,CAAA,QAaaG,UAAwBC,CAAW,CAAzC,aACuB,CAAA,MAAA,GAAA,SAAA,EAAA,KAAA,UAA2B,KAC3B,KAA2B,SAAA,KAC3B,eAA2B,KAC3B,KAAA,WAA6B,KAC7B,KAAwB,WAAA,IAAA,CAEpD,mBAAoB,CAClB,MAAM,kBACR,CAAA,CAEA,MAAM,kBAAmB,CACvB,GAAI,CACF,GAAI,CAAC,KAAK,UAAY,CAAC,KAAK,WAAa,CAAC,KAAK,WAAY,OAC3D,KAAa,QAAA,8CAAiC,EAC1CZ,IACF,KAAK,qBAAqB,KAAK,QAAQ,EAEvC,KAAK,kBAAkB,KAAK,SAAU,KAAK,SAAS,CAExD,OAASa,EAAK,CACZ,QAAQ,MAAM,wBAAyBA,CAAG,CAC5C,CACF,CAEA,MAAM,kBAAkBC,EAAkBC,EAAmB,CAC3D,GAAI,CAACD,EAAU,OAEf,MAAME,EAAiB,KAAK,YAAY,cAAc,WAAW,EAEjE,GAAIA,EAAgB,CAClBA,EAAe,KAAK,EACpB,MACF,CAEA,aAAa,8CAAiC,EAE9C,MAAMC,EAAY,KAAK,YAAY,cAAc,aAAa,EAExDC,EAAO,MAAMC,EAAUL,CAAQ,EAE/BM,EAAU,IAAI,gBAAgBF,CAAI,EAElCG,EAAmB,IAAM,CAC5B,KAAK,YAAY,cAAc,WAAW,GAAuB,KACpE,CAAA,EAEMC,EAAkB,SAAY,CAClC,MAAM,UAAU,UAAU,MAAM,CAAC,IAAI,cAAc,CAAE,YAAaJ,CAAK,CAAC,CAAC,CAAC,EAC1E,WAAWG,EAAkB,GAAG,CAClC,EAEME,EAAsB,IAAM,CAChC,WAAWF,EAAkB,GAAG,CAClC,EAEMG,EAAiBC;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA,+BAyEIC,EAAQ,KAAK,UAAU,EAAE,kBAAkB;AAAA,kCACxCA,EAAQ,KAAK,UAAU,EAAE,kBAAkB;AAAA,gCAC7CA,EAAQ,KAAK,UAAU,EAAE,gBAAgB,CAAE,UAAAX,CAAU,CAAC,CAAC;AAAA,oBACnED,CAAQ,UAAUY,EAAQ,KAAK,UAAU,EAAE,kBAAkB;AAAA;AAAA;AAAA,8EAGHJ,CAAe;AAAA;AAAA;AAAA;AAAA,yBAIpEI,EAAQ,KAAK,UAAU,EAAE,iBAAiB;AAAA;AAAA;AAAA,+CAGpBA,EAAQ,KAAK,UAAU,EAAE,iBAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,0BAM/DA,EAAQ,KAAK,UAAU,EAAE,kBAAkB;AAAA,sBAC/CN,CAAO;AAAA,wBACLG,CAAmB;AAAA;AAAA;AAAA;AAAA;AAAA,yBAKlBG,EAAQ,KAAK,UAAU,EAAE,qBAAqB;AAAA;AAAA;AAAA,+CAGxBA,EAAQ,KAAK,UAAU,EAAE,qBAAqB;AAAA;AAAA;AAAA;AAAA,kEAI3BL,CAAgB;AAAA,YACtEK,EAAQ,KAAK,UAAU,EAAE,kBAAkB;AAAA;AAAA;AAAA,MAI/CT,GACFU,EAAOH,EAAgBP,CAAS,CAEpC,CAEA,MAAM,qBAAqBH,EAAkB,CAC3C,GAAI,CAACA,EAAU,OAEf,MAAMI,EAAO,MAAMC,EAAUL,CAAQ,EAEjC,UAAU,OACZ,MAAM,UAAU,MAAM,CACpB,MAAO,CAACI,CAAI,CACd,CAAC,CAEL,CAEA,sBAAuB,CACrB,MAAM,sBACR,CACA,QAAS,CACP,MAAI,CAAC,KAAK,UAAY,CAAC,KAAK,WAAa,CAAC,KAAK,WAAmBO,IAC3DA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA,wBA0Ca,KAAK,gBAAgB;AAAA;AAAA,kBAE3B,KAAK,SAAS;AAAA;AAAA,mBAEbC,EAAQ,KAAK,UAAU,EAAE,mBAAmB;AAAA;AAAA;AAAA,0CAGrB,KAAK,YAAcA,EAAQ,KAAK,UAAU,EAAE,mBAAmB;AAAA;AAAA;AAAA,KAIvG,CACF,CAlP8BE,EAAA,CAA3BC,EAAS,CAAE,KAAM,MAAO,CAAC,CADf,EAAAlB,EACiB,UACAiB,YAAAA,CAAAA,EAAAA,EAAA,CAA3BC,EAAS,CAAE,KAAM,MAAO,CAAC,CAAA,EAFflB,EAEiB,UAAA,WAAA,CAAA,EACAiB,EAAA,CAA3BC,EAAS,CAAE,KAAM,MAAO,CAAC,CAHf,EAAAlB,EAGiB,yBACAiB,EAAA,CAA3BC,EAAS,CAAE,KAAM,MAAO,CAAC,CAAA,EAJflB,EAIiB,UACAiB,aAAAA,CAAAA,EAAAA,EAAA,CAA3BC,EAAS,CAAE,KAAM,MAAO,CAAC,GALflB,EAKiB,UAAA,aAAA,CAAA,EAgP9B,eAAe,IAAI,mBAAmB,GAAK,eAAe,OAAO,oBAAqBA,CAAe,EAExF,MAAAmB,EAA4B,CACvC,iCAAkC,UAClC,+BAAgC,OAChC,iCAAkC,MAClC,oCAAqC,OACrC,gCAAiC,OACjC,mCAAoC,OACpC,8BAA+B,oBAC/B,iCAAkC,UAClC,4BAA6B,UAC7B,sCAAuC,OACvC,mCAAoC,OACpC,kCAAmC,UACnC,kCAAmC,MAEnC,4BAA6B,OAE7B,wCAAyC,cACzC,4CAA6C,UAC7C,kCAAmC,OAEnC,gCAAiC,OAEjC,0CAA2C,OAE3C,8BAA+B,YAE/B,8BAA+B,OAC/B,gCAAiC,OAEjC,6BAA8B,OAC9B,+BAAgC,MAChC,8BAA+B,OAE/B,kCAAmC,MACnC,2BAA4B,QAC5B,4BAA6B,OAE7B,8BAA+B,YAC/B,gCAAiC,OAEjC,oCAAqC,OACrC,sCAAuC,MACvC,qCAAsC,OAEtC,qCAAsC,UACtC,gCAAiC,OACjC,6BAA8B,OAC9B,kCAAmC,MACnC,8BAA+B,OAC/B,gCAAiC,OAEjC,uCAAwC,SAC1C"}
1
+ {"version":3,"file":"share-button-_QWVlCcB.esm.js","sources":["../../src/shared/sync-element-heights.ts","../../src/shared/feature-detection.ts","../../src/shared/components/share-button.ts"],"sourcesContent":["import { isAllHtmlElements } from \"./is-all-html-elements\";\n\n/**\n * Synchronize heights of elements\n * @param {Array<HTMLElement|null>} elements - Elements to synchronize\n * @param {'contentLength' | 'currentHeight'} [options.source='contentLength'] -\n * Method used to get the height value to sync across elements. `contentLength`\n * (innerText.length) is reliable for pure text content when responding to\n * window resizing. Otherwise, currentHeight can be used to sync the tallest\n * element's height to all the other elements. Note that this works poorly\n * unless content is allowed to reflow with explicit height attributes removed\n * between synchronization calls.\n */\nexport const syncElementHeights = (\n elements: Array<HTMLElement | null> | NodeList,\n {\n source = \"contentLength\",\n }: {\n source?: \"contentLength\" | \"currentHeight\";\n } = {}\n) => {\n const els = elements instanceof NodeList ? Array.from(elements) : elements;\n\n if (els.length === 0 || !isAllHtmlElements(els)) {\n return;\n }\n\n const heightSource =\n source === \"contentLength\"\n ? els.sort((a, b) => {\n return b.innerText.length - a.innerText.length;\n })[0]\n : els.sort((a, b) => {\n return b.clientHeight - a.clientHeight;\n })[0];\n\n const syncedHeight = heightSource?.clientHeight || 0;\n\n for (const el of els) {\n if (el.clientHeight !== syncedHeight) {\n el.style[\"height\"] = syncedHeight + \"px\";\n }\n }\n};\n","export function isMobile() {\n return /Android|iPhone/i.test(navigator.userAgent);\n}\n\nexport function hasSystemShare() {\n return !!navigator.share;\n}\n","import { LitElement, html, render } from \"lit\";\nimport { property } from \"lit/decorators/property.js\";\nimport \"@shoelace-style/shoelace/dist/components/icon/icon.js\";\nimport { LANGUAGES } from \"../../api-sdk/types\";\nimport { urlToFile } from \"../files\";\nimport { isMobile } from \"../feature-detection\";\nimport { strings } from \"./strings/share-button\";\n\ninterface SlDialogElement extends HTMLElement {\n show: () => void;\n hide: () => void;\n}\n\nexport class BeamShareButton extends LitElement {\n @property({ type: String }) shareIcon: string | null = null;\n @property({ type: String }) imageUrl?: string | null = null;\n @property({ type: String }) brandName: string | null = null;\n @property({ type: String }) buttonText?: string | null = null;\n @property({ type: String }) configLang: LANGUAGES = \"en\";\n\n connectedCallback() {\n super.connectedCallback();\n }\n\n async handleShareClick() {\n try {\n if (!this.imageUrl || !this.brandName || !this.configLang) return;\n await import(\"./_share-dialog-dependencies.js\");\n if (isMobile()) {\n this.openSystemShareSheet(this.imageUrl);\n } else {\n this.handleShareDialog(this.imageUrl, this.brandName);\n }\n } catch (err) {\n console.error(\"Error sharing impact:\", err);\n }\n }\n\n async handleShareDialog(imageUrl: string, brandName: string) {\n if (!imageUrl) return;\n\n const existingDialog = this.shadowRoot?.querySelector(\"sl-dialog\") as SlDialogElement;\n\n if (existingDialog) {\n existingDialog.show();\n return;\n }\n\n await import(\"./_share-dialog-dependencies.js\"); // Import libraries async to reduce bundle size if share feature is unused\n\n const modalRoot = this.shadowRoot?.querySelector(\"#modal-root\") as HTMLElement;\n\n const file = await urlToFile(imageUrl);\n\n const dataUrl = URL.createObjectURL(file);\n\n const handleClickClose = () => {\n (this.shadowRoot?.querySelector(\"sl-dialog\") as SlDialogElement)?.hide();\n };\n\n const handleClickCopy = async () => {\n await navigator.clipboard.write([new ClipboardItem({ \"image/png\": file })]);\n setTimeout(handleClickClose, 250);\n };\n\n const handleClickDownload = () => {\n setTimeout(handleClickClose, 250);\n };\n\n const dialogTemplate = html`\n <style>\n .plain-button {\n border: none;\n background: none;\n font-size: inherit;\n font-family: inherit;\n }\n .share-dialog::part(panel) {\n padding: var(--beam-share-dialog-padding);\n text-align: center;\n }\n .share-title {\n font-size: var(--beam-share-title-fontSize);\n font-weight: var(--beam-share-title-fontWeight);\n }\n .share-text {\n font-size: var(--beam-share-text-fontSize);\n line-height: var(--beam-share-text-lineHeight);\n margin-top: var(--beam-share-text-marginTop);\n }\n .share-image {\n border-radius: var(--beam-share-image-borderRadius);\n width: var(--beam-share-image-width);\n display: block;\n margin: var(--beam-share-image-margin) auto;\n }\n .share-actions {\n margin: var(--beam-share-actions-margin);\n }\n .share-action-button {\n display: inline-flex;\n justify-content: center;\n align-items: center;\n flex-direction: column;\n padding: 5px;\n }\n .share-action-icon {\n font-size: var(--beam-share-action-icon-size);\n }\n .share-action-button:hover .share-action-icon {\n scale: 1.1;\n }\n .share-action-text {\n font-size: var(--beam-share-action-text-fontSize);\n line-height: var(--beam-share-action-text-lineHeight);\n margin-top: var(--beam-share-text-action-marginTop);\n }\n .plain-button {\n border: none;\n background: none;\n font-size: inherit;\n font-family: inherit;\n }\n .plain-link {\n text-decoration: none;\n color: inherit;\n }\n .share-close {\n display: block;\n background-color: var(--beam-share-close-backgroundColor);\n color: var(--beam-share-close-text-color);\n justify-content: center;\n padding: var(--beam-share-close-padding);\n border-radius: var(--beam-share-close-borderRadius);\n width: 100%;\n font-size: var(--beam-share-close-fontSize);\n font-weight: var(--beam-share-close-fontWeight);\n }\n .share-close:hover {\n outline: 2px solid var(--beam-share-close-focus-borderColor);\n }\n </style>\n <sl-dialog open label=\"${strings[this.configLang].impactShareTitle()}\" no-header class=\"share-dialog\">\n <h2 class=\"share-title\">${strings[this.configLang].impactShareTitle()}</h2>\n <p class=\"share-text\">${strings[this.configLang].impactShareText({ brandName })}</p>\n <img src=\"${imageUrl}\" alt=\"${strings[this.configLang].impactShareTitle()}\" class=\"share-image\" />\n <div class=\"share-actions\" style=\"display: flex; justify-content: space-evenly\">\n <div style=\"flex: 1; text-align: center\">\n <button class=\"plain-button button share-action-button\" @click=\"${handleClickCopy}\">\n <sl-icon\n library=\"lucide\"\n name=\"copy\"\n label=\"${strings[this.configLang].impactShareCopy()}\"\n class=\"share-action-icon\"\n ></sl-icon>\n <div class=\"share-action-text\">${strings[this.configLang].impactShareCopy()}</div>\n </button>\n </div>\n <div style=\"flex: 1; text-align: center\">\n <a\n class=\"plain-button button share-action-button plain-link\"\n download=\"${strings[this.configLang].impactShareTitle()}\"\n href=\"${dataUrl}\"\n @click=\"${handleClickDownload}\"\n >\n <sl-icon\n library=\"lucide\"\n name=\"download\"\n label=\"${strings[this.configLang].impactShareDownload()}\"\n class=\"share-action-icon\"\n ></sl-icon>\n <div class=\"share-action-text\">${strings[this.configLang].impactShareDownload()}</div>\n </a>\n </div>\n </div>\n <button class=\"plain-button button share-close\" @click=\"${handleClickClose}\">\n ${strings[this.configLang].impactShareClose()}\n </button>\n </sl-dialog>\n `;\n if (modalRoot) {\n render(dialogTemplate, modalRoot);\n }\n }\n\n async openSystemShareSheet(imageUrl: string) {\n if (!imageUrl) return;\n\n const file = await urlToFile(imageUrl);\n\n if (navigator.share) {\n await navigator.share({\n files: [file],\n });\n }\n }\n\n disconnectedCallback() {\n super.disconnectedCallback();\n }\n render() {\n if (!this.imageUrl || !this.brandName || !this.configLang) return html``;\n return html`\n <style>\n .share-button {\n font-family: var(--beam-share-button-fontFamily);\n font-size: var(--beam-share-button-fontSize);\n font-weight: var(--beam-share-button-fontWeight);\n margin-top: var(--beam-share-button-marginTop);\n margin-bottom: var(--beam-share-button-marginBottom);\n text-transform: var(--beam-share-button-textTransform);\n line-height: var(--beam-share-button-lineHeight);\n background-color: var(--beam-share-button-backgroundColor);\n color: var(--beam-share-button-color, inherit);\n border-radius: var(--beam-share-button-borderRadius);\n border-color: var(--beam-share-button-borderColor);\n border-width: var(--beam-share-button-borderWidth);\n /* add extra padding on side without icon for optical alignment */\n padding: var(--beam-share-button-padding);\n width: var(--beam-share-button-width);\n transition: 0.15s;\n }\n .share-button:hover {\n background-color: var(--beam-share-button-hover-backgroundColor);\n color: var(--beam-share-button-hover-color);\n border-color: var(--beam-share-button-hover-borderColor);\n }\n .share-button-text {\n text-decoration: var(--beam-share-button-text-textDecoration);\n margin-left: 0.33em;\n }\n .share-button-icon {\n font-size: var(--beam-share-button-icon-size);\n }\n .button {\n cursor: pointer;\n }\n .icon-button {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n }\n </style>\n <button @click=\"${this.handleShareClick}\" class=\"share-button share-button-inline button icon-button\">\n <sl-icon\n name=\"${this.shareIcon}\"\n library=\"lucide\"\n label=\"${strings[this.configLang].impactShareButton()}\"\n class=\"share-button-icon\"\n ></sl-icon>\n <span class=\"share-button-text\">${this.buttonText || strings[this.configLang].impactShareButton()}</span>\n </button>\n <div id=\"modal-root\"></div>\n `;\n }\n}\n\ncustomElements.get(\"beam-share-button\") || customElements.define(\"beam-share-button\", BeamShareButton);\n\nexport const shareButtonConfigDefaults = {\n \"--beam-share-button-fontFamily\": \"inherit\",\n \"--beam-share-button-fontSize\": \"14px\",\n \"--beam-share-button-fontWeight\": \"600\",\n \"--beam-share-button-textTransform\": \"none\",\n \"--beam-share-button-marginTop\": \"10px\",\n \"--beam-share-button-marginBottom\": \"10px\",\n \"--beam-share-button-padding\": \"8px 18px 8px 16px\",\n \"--beam-share-button-lineHeight\": \"inherit\",\n \"--beam-share-button-color\": \"#0A323C\",\n \"--beam-share-button-backgroundColor\": \"#fff\",\n \"--beam-share-button-borderRadius\": \"30px\",\n \"--beam-share-button-borderColor\": \"#0A323C\",\n \"--beam-share-button-borderWidth\": \"1px\",\n\n \"--beam-share-button-width\": \"auto\",\n\n \"--beam-share-button-hover-borderColor\": \"transparent\",\n \"--beam-share-button-hover-backgroundColor\": \"#0A323C\",\n \"--beam-share-button-hover-color\": \"#fff\",\n\n \"--beam-share-button-icon-size\": \"16px\",\n\n \"--beam-share-button-text-textDecoration\": \"none\",\n\n \"--beam-share-dialog-padding\": \"30px 30px\",\n\n \"--beam-share-title-fontSize\": \"30px\",\n \"--beam-share-title-fontWeight\": \"bold\",\n\n \"--beam-share-text-fontSize\": \"16px\",\n \"--beam-share-text-lineHeight\": \"1.3\",\n \"--beam-share-text-marginTop\": \"10px\",\n\n \"--beam-share-image-borderRadius\": \"4px\",\n \"--beam-share-image-width\": \"200px\",\n \"--beam-share-image-margin\": \"20px\",\n\n \"--beam-share-actions-margin\": \"30px 60px\",\n \"--beam-share-action-icon-size\": \"32px\",\n\n \"--beam-share-action-text-fontSize\": \"16px\",\n \"--beam-share-action-text-lineHeight\": \"1.3\",\n \"--beam-share-text-action-marginTop\": \"10px\",\n\n \"--beam-share-close-backgroundColor\": \"#ffd522\",\n \"--beam-share-close-text-color\": \"#000\",\n \"--beam-share-close-padding\": \"12px\",\n \"--beam-share-close-borderRadius\": \"4px\",\n \"--beam-share-close-fontSize\": \"16px\",\n \"--beam-share-close-fontWeight\": \"bold\",\n\n \"--beam-share-close-focus-borderColor\": \"#c2dcff\",\n} as const;\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"beam-share-button\": BeamShareButton;\n }\n}\n"],"names":["syncElementHeights","elements","source","els","isAllHtmlElements","syncedHeight","a","b","el","isMobile","f","x","i","h","s","e","o","t","r","n","BeamShareButton","LitElement","err","imageUrl","brandName","existingDialog","modalRoot","file","urlToFile","dataUrl","handleClickClose","handleClickCopy","handleClickDownload","dialogTemplate","html","strings","render","__decorateClass","property","shareButtonConfigDefaults"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- import{r as c,s as i}from"./vendor-GKiOHg2N.esm.js";import{d as t}from"./routes-FBB1GA4-.esm.js";const s="https://sdk.beamimpact.com",a=`${s}/lib/shoelace/v${t["@shoelace-style/shoelace"]}`,l=`${s}/lib/lucide-static/v${t["lucide-static"]}`;if(c("lucide",{resolver:e=>`${l}/icons/${e}.svg`}),i(a),document&&!document.querySelector("link[data-beam-impact]")){const e=document.createElement("link");e.href=`${a}/themes/light.css`,e.rel="stylesheet",e.setAttribute("data-beam-impact","true"),document.head.appendChild(e)}
2
- //# sourceMappingURL=shoelace-components-leDI-Yop.esm.js.map
1
+ import{r as c,s as i}from"./vendor-GKiOHg2N.esm.js";import{d as t}from"./routes-sQWfbAoi.esm.js";const s="https://sdk.beamimpact.com",a=`${s}/lib/shoelace/v${t["@shoelace-style/shoelace"]}`,l=`${s}/lib/lucide-static/v${t["lucide-static"]}`;if(c("lucide",{resolver:e=>`${l}/icons/${e}.svg`}),i(a),document&&!document.querySelector("link[data-beam-impact]")){const e=document.createElement("link");e.href=`${a}/themes/light.css`,e.rel="stylesheet",e.setAttribute("data-beam-impact","true"),document.head.appendChild(e)}
2
+ //# sourceMappingURL=shoelace-components-9s7uTeO6.esm.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"shoelace-components-leDI-Yop.esm.js","sources":["../../src/shared/shoelace-components.ts"],"sourcesContent":["/**\n * Shoelace is a utility library for web components like icons, dialogs, buttons, etc.\n * https://shoelace.style/\n */\n\nimport { setBasePath } from \"@shoelace-style/shoelace/dist/utilities/base-path.js\";\nimport { registerIconLibrary } from \"@shoelace-style/shoelace/dist/utilities/icon-library.js\";\nimport { dependencies } from \"../../package.json\";\n\nconst CDN_BASE = \"https://sdk.beamimpact.com\";\nconst SHOELACE_BASE = `${CDN_BASE}/lib/shoelace/v${dependencies[\"@shoelace-style/shoelace\"]}`;\nconst ICON_BASE = `${CDN_BASE}/lib/lucide-static/v${dependencies[\"lucide-static\"]}`;\n\nregisterIconLibrary(\"lucide\", {\n resolver: (name: string) => `${ICON_BASE}/icons/${name}.svg`,\n});\n\nsetBasePath(SHOELACE_BASE);\n\nif (document && !document.querySelector(\"link[data-beam-impact]\")) {\n const stylesheet = document.createElement(\"link\");\n stylesheet.href = `${SHOELACE_BASE}/themes/light.css`;\n stylesheet.rel = \"stylesheet\";\n stylesheet.setAttribute(\"data-beam-impact\", \"true\");\n document.head.appendChild(stylesheet);\n}\n"],"names":["CDN_BASE","SHOELACE_BASE","dependencies","ICON_BASE","registerIconLibrary","name","setBasePath","stylesheet"],"mappings":"iGASA,MAAMA,EAAW,6BACXC,EAAgB,GAAGD,CAAQ,kBAAkBE,EAAa,0BAA0B,CAAC,GACrFC,EAAY,GAAGH,CAAQ,uBAAuBE,EAAa,eAAe,CAAC,GAQjF,GANAE,EAAoB,SAAU,CAC5B,SAAWC,GAAiB,GAAGF,CAAS,UAAUE,CAAI,MACxD,CAAC,EAEDC,EAAYL,CAAa,EAErB,UAAY,CAAC,SAAS,cAAc,wBAAwB,EAAG,CACjE,MAAMM,EAAa,SAAS,cAAc,MAAM,EAChDA,EAAW,KAAO,GAAGN,CAAa,oBAClCM,EAAW,IAAM,aACjBA,EAAW,aAAa,mBAAoB,MAAM,EAClD,SAAS,KAAK,YAAYA,CAAU,CACtC"}
1
+ {"version":3,"file":"shoelace-components-9s7uTeO6.esm.js","sources":["../../src/shared/shoelace-components.ts"],"sourcesContent":["/**\n * Shoelace is a utility library for web components like icons, dialogs, buttons, etc.\n * https://shoelace.style/\n */\n\nimport { setBasePath } from \"@shoelace-style/shoelace/dist/utilities/base-path.js\";\nimport { registerIconLibrary } from \"@shoelace-style/shoelace/dist/utilities/icon-library.js\";\nimport { dependencies } from \"../../package.json\";\n\nconst CDN_BASE = \"https://sdk.beamimpact.com\";\nconst SHOELACE_BASE = `${CDN_BASE}/lib/shoelace/v${dependencies[\"@shoelace-style/shoelace\"]}`;\nconst ICON_BASE = `${CDN_BASE}/lib/lucide-static/v${dependencies[\"lucide-static\"]}`;\n\nregisterIconLibrary(\"lucide\", {\n resolver: (name: string) => `${ICON_BASE}/icons/${name}.svg`,\n});\n\nsetBasePath(SHOELACE_BASE);\n\nif (document && !document.querySelector(\"link[data-beam-impact]\")) {\n const stylesheet = document.createElement(\"link\");\n stylesheet.href = `${SHOELACE_BASE}/themes/light.css`;\n stylesheet.rel = \"stylesheet\";\n stylesheet.setAttribute(\"data-beam-impact\", \"true\");\n document.head.appendChild(stylesheet);\n}\n"],"names":["CDN_BASE","SHOELACE_BASE","dependencies","ICON_BASE","registerIconLibrary","name","setBasePath","stylesheet"],"mappings":"iGASA,MAAMA,EAAW,6BACXC,EAAgB,GAAGD,CAAQ,kBAAkBE,EAAa,0BAA0B,CAAC,GACrFC,EAAY,GAAGH,CAAQ,uBAAuBE,EAAa,eAAe,CAAC,GAQjF,GANAE,EAAoB,SAAU,CAC5B,SAAWC,GAAiB,GAAGF,CAAS,UAAUE,CAAI,MACxD,CAAC,EAEDC,EAAYL,CAAa,EAErB,UAAY,CAAC,SAAS,cAAc,wBAAwB,EAAG,CACjE,MAAMM,EAAa,SAAS,cAAc,MAAM,EAChDA,EAAW,KAAO,GAAGN,CAAa,oBAClCM,EAAW,IAAM,aACjBA,EAAW,aAAa,mBAAoB,MAAM,EAClD,SAAS,KAAK,YAAYA,CAAU,CACtC"}
@@ -1,2 +1,2 @@
1
- import{r as c,s as i}from"./vendor-GKiOHg2N.esm.js";import{d as t}from"./routes-jmFlXAbv.esm.js";const s="https://sdk.beamimpact.com",a=`${s}/lib/shoelace/v${t["@shoelace-style/shoelace"]}`,l=`${s}/lib/lucide-static/v${t["lucide-static"]}`;if(c("lucide",{resolver:e=>`${l}/icons/${e}.svg`}),i(a),document&&!document.querySelector("link[data-beam-impact]")){const e=document.createElement("link");e.href=`${a}/themes/light.css`,e.rel="stylesheet",e.setAttribute("data-beam-impact","true"),document.head.appendChild(e)}
2
- //# sourceMappingURL=shoelace-components-qjNlvvPx.esm.js.map
1
+ import{r as c,s as i}from"./vendor-GKiOHg2N.esm.js";import{d as t}from"./routes-F1ZIumMP.esm.js";const s="https://sdk.beamimpact.com",a=`${s}/lib/shoelace/v${t["@shoelace-style/shoelace"]}`,l=`${s}/lib/lucide-static/v${t["lucide-static"]}`;if(c("lucide",{resolver:e=>`${l}/icons/${e}.svg`}),i(a),document&&!document.querySelector("link[data-beam-impact]")){const e=document.createElement("link");e.href=`${a}/themes/light.css`,e.rel="stylesheet",e.setAttribute("data-beam-impact","true"),document.head.appendChild(e)}
2
+ //# sourceMappingURL=shoelace-components-tjFhbEiI.esm.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"shoelace-components-qjNlvvPx.esm.js","sources":["../../src/shared/shoelace-components.ts"],"sourcesContent":["/**\n * Shoelace is a utility library for web components like icons, dialogs, buttons, etc.\n * https://shoelace.style/\n */\n\nimport { setBasePath } from \"@shoelace-style/shoelace/dist/utilities/base-path.js\";\nimport { registerIconLibrary } from \"@shoelace-style/shoelace/dist/utilities/icon-library.js\";\nimport { dependencies } from \"../../package.json\";\n\nconst CDN_BASE = \"https://sdk.beamimpact.com\";\nconst SHOELACE_BASE = `${CDN_BASE}/lib/shoelace/v${dependencies[\"@shoelace-style/shoelace\"]}`;\nconst ICON_BASE = `${CDN_BASE}/lib/lucide-static/v${dependencies[\"lucide-static\"]}`;\n\nregisterIconLibrary(\"lucide\", {\n resolver: (name: string) => `${ICON_BASE}/icons/${name}.svg`,\n});\n\nsetBasePath(SHOELACE_BASE);\n\nif (document && !document.querySelector(\"link[data-beam-impact]\")) {\n const stylesheet = document.createElement(\"link\");\n stylesheet.href = `${SHOELACE_BASE}/themes/light.css`;\n stylesheet.rel = \"stylesheet\";\n stylesheet.setAttribute(\"data-beam-impact\", \"true\");\n document.head.appendChild(stylesheet);\n}\n"],"names":["CDN_BASE","SHOELACE_BASE","dependencies","ICON_BASE","registerIconLibrary","name","setBasePath","stylesheet"],"mappings":"iGASA,MAAMA,EAAW,6BACXC,EAAgB,GAAGD,CAAQ,kBAAkBE,EAAa,0BAA0B,CAAC,GACrFC,EAAY,GAAGH,CAAQ,uBAAuBE,EAAa,eAAe,CAAC,GAQjF,GANAE,EAAoB,SAAU,CAC5B,SAAWC,GAAiB,GAAGF,CAAS,UAAUE,CAAI,MACxD,CAAC,EAEDC,EAAYL,CAAa,EAErB,UAAY,CAAC,SAAS,cAAc,wBAAwB,EAAG,CACjE,MAAMM,EAAa,SAAS,cAAc,MAAM,EAChDA,EAAW,KAAO,GAAGN,CAAa,oBAClCM,EAAW,IAAM,aACjBA,EAAW,aAAa,mBAAoB,MAAM,EAClD,SAAS,KAAK,YAAYA,CAAU,CACtC"}
1
+ {"version":3,"file":"shoelace-components-tjFhbEiI.esm.js","sources":["../../src/shared/shoelace-components.ts"],"sourcesContent":["/**\n * Shoelace is a utility library for web components like icons, dialogs, buttons, etc.\n * https://shoelace.style/\n */\n\nimport { setBasePath } from \"@shoelace-style/shoelace/dist/utilities/base-path.js\";\nimport { registerIconLibrary } from \"@shoelace-style/shoelace/dist/utilities/icon-library.js\";\nimport { dependencies } from \"../../package.json\";\n\nconst CDN_BASE = \"https://sdk.beamimpact.com\";\nconst SHOELACE_BASE = `${CDN_BASE}/lib/shoelace/v${dependencies[\"@shoelace-style/shoelace\"]}`;\nconst ICON_BASE = `${CDN_BASE}/lib/lucide-static/v${dependencies[\"lucide-static\"]}`;\n\nregisterIconLibrary(\"lucide\", {\n resolver: (name: string) => `${ICON_BASE}/icons/${name}.svg`,\n});\n\nsetBasePath(SHOELACE_BASE);\n\nif (document && !document.querySelector(\"link[data-beam-impact]\")) {\n const stylesheet = document.createElement(\"link\");\n stylesheet.href = `${SHOELACE_BASE}/themes/light.css`;\n stylesheet.rel = \"stylesheet\";\n stylesheet.setAttribute(\"data-beam-impact\", \"true\");\n document.head.appendChild(stylesheet);\n}\n"],"names":["CDN_BASE","SHOELACE_BASE","dependencies","ICON_BASE","registerIconLibrary","name","setBasePath","stylesheet"],"mappings":"iGASA,MAAMA,EAAW,6BACXC,EAAgB,GAAGD,CAAQ,kBAAkBE,EAAa,0BAA0B,CAAC,GACrFC,EAAY,GAAGH,CAAQ,uBAAuBE,EAAa,eAAe,CAAC,GAQjF,GANAE,EAAoB,SAAU,CAC5B,SAAWC,GAAiB,GAAGF,CAAS,UAAUE,CAAI,MACxD,CAAC,EAEDC,EAAYL,CAAa,EAErB,UAAY,CAAC,SAAS,cAAc,wBAAwB,EAAG,CACjE,MAAMM,EAAa,SAAS,cAAc,MAAM,EAChDA,EAAW,KAAO,GAAGN,CAAa,oBAClCM,EAAW,IAAM,aACjBA,EAAW,aAAa,mBAAoB,MAAM,EAClD,SAAS,KAAK,YAAYA,CAAU,CACtC"}
@@ -1,6 +1,6 @@
1
1
  import * as lodash from 'lodash';
2
2
  import { B as BeamBaseAPIConfig } from './types-aju0qrRe.esm.js';
3
- import { a as TCartApi } from './cart-contents-HAPzwbeL.esm.js';
3
+ import { a as TCartApi } from './cart-contents-MrYQNVDx.esm.js';
4
4
 
5
5
  type BeamCartAPIConfig = BeamBaseAPIConfig & {
6
6
  storeId: number;
@@ -1,2 +1,2 @@
1
- import{d as y,i as B}from"./lodash-P8OIs-at.esm.js";import{D as g,b as A}from"./routes-jmFlXAbv.esm.js";import{B as v}from"./beam-errors-P-Lu07Ce.esm.js";import{d as K,f as S}from"./events-_4nImo3u.esm.js";import"../utils/network-listeners.esm.js";import{createScopedLocalStorage as U}from"../utils/local-storage.esm.js";import{setCookieValue as _}from"../utils/cookies.esm.js";import{getRemoteSession as L}from"../utils/remote-session.esm.js";import{memoizeLast as x}from"../utils/memoize-last.esm.js";import{B as f}from"./cart-contents-h60geKWa.esm.js";import{getBeamCartId as D}from"../utils/cart.esm.js";const R=50,T=y(x(async function(e,c){try{const t=U({apiKey:e.apiKey}),l=e.baseUrl??g,o=t.getItemJson("cart"),a=D(f,e),E=L(e)??void 0,{cartId:r,subtotal:m,itemCount:i,currencyCode:s,content:{items:d=[],discounts:u=[]}={},schema:C={source:"generic"}}=c,p={cartId:r,subtotal:m,itemCount:i,currencyCode:s,content:{items:d,discounts:u},schema:C,beamCartId:a};if(B(p,{...o,cartId:o?.cartId})||c.itemCount===0&&(!a||o?.itemCount===0))return;const h=await A({baseUrl:l,headers:{authorization:`Api-Key ${e.apiKey}`},requestBody:{beamCartId:a,storeId:e.storeId,remoteSessionId:E,cartId:r,subtotal:m,itemCount:i,currencyCode:s}}),{beamCartId:n,expiresAt:I,beamCartCreated:w}=h;n&&I&&await _({name:f,domain:e.domain,value:n,path:"/",expires:new Date(I).getTime()}),t.setItemJson("cart",{...p,beamCartId:n});const b={schema:C,content:{items:d,discounts:u},subtotal:m,itemCount:i,currencyCode:s,cartId:r,beamCartId:a};window.dispatchEvent(new K(b)),w&&window.dispatchEvent(new S(b))}catch(t){throw new v("Could not update cart in Beam",{cause:t})}}),R,{leading:!0});export{T as K};
2
- //# sourceMappingURL=update-cart-aKQ3Cjc8.esm.js.map
1
+ import{d as y,i as B}from"./lodash-P8OIs-at.esm.js";import{D as g,b as A}from"./routes-sQWfbAoi.esm.js";import{B as v}from"./beam-errors-P-Lu07Ce.esm.js";import{d as K,f as S}from"./events-_4nImo3u.esm.js";import"../utils/network-listeners.esm.js";import{createScopedLocalStorage as U}from"../utils/local-storage.esm.js";import{setCookieValue as _}from"../utils/cookies.esm.js";import{getRemoteSession as L}from"../utils/remote-session.esm.js";import{memoizeLast as x}from"../utils/memoize-last.esm.js";import{B as f}from"./cart-contents-h60geKWa.esm.js";import{getBeamCartId as D}from"../utils/cart.esm.js";const R=50,T=y(x(async function(e,c){try{const t=U({apiKey:e.apiKey}),l=e.baseUrl??g,o=t.getItemJson("cart"),a=D(f,e),E=L(e)??void 0,{cartId:r,subtotal:m,itemCount:i,currencyCode:s,content:{items:d=[],discounts:u=[]}={},schema:C={source:"generic"}}=c,p={cartId:r,subtotal:m,itemCount:i,currencyCode:s,content:{items:d,discounts:u},schema:C,beamCartId:a};if(B(p,{...o,cartId:o?.cartId})||c.itemCount===0&&(!a||o?.itemCount===0))return;const h=await A({baseUrl:l,headers:{authorization:`Api-Key ${e.apiKey}`},requestBody:{beamCartId:a,storeId:e.storeId,remoteSessionId:E,cartId:r,subtotal:m,itemCount:i,currencyCode:s}}),{beamCartId:n,expiresAt:I,beamCartCreated:w}=h;n&&I&&await _({name:f,domain:e.domain,value:n,path:"/",expires:new Date(I).getTime()}),t.setItemJson("cart",{...p,beamCartId:n});const b={schema:C,content:{items:d,discounts:u},subtotal:m,itemCount:i,currencyCode:s,cartId:r,beamCartId:a};window.dispatchEvent(new K(b)),w&&window.dispatchEvent(new S(b))}catch(t){throw new v("Could not update cart in Beam",{cause:t})}}),R,{leading:!0});export{T as K};
2
+ //# sourceMappingURL=update-cart-T7h4g2nt.esm.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"update-cart-aKQ3Cjc8.esm.js","sources":["../../src/integrations/cart/update-cart.ts"],"sourcesContent":["import isEqual from \"lodash-es/isEqual\";\nimport { DEFAULT_BASE_URL } from \"../../api-sdk/constants\";\nimport { BeamBaseAPIConfig } from \"../../api-sdk/types\";\nimport { postCart } from \"../../api-sdk/v3/routes\";\nimport { debounce, memoizeLast } from \"../../utils\";\nimport { BeamError } from \"../../utils/beam-errors\";\nimport { BEAM_CART_COOKIE_NAME, TBeamCartLocalStorage, TCartApi } from \"../../shared/cart-contents\";\nimport { setCookieValue } from \"../../utils/cookies\";\nimport { BeamCartChangeEvent, BeamCartCreatedEvent } from \"../../utils/events\";\nimport { createScopedLocalStorage } from \"../../utils/local-storage\";\nimport { getRemoteSession } from \"../../utils/remote-session\";\nimport { getBeamCartId } from \"../../utils/cart\";\n\nexport type BeamCartAPIConfig = BeamBaseAPIConfig & {\n storeId: number;\n domain?: string; // Domain to set cookies on\n statsigExperiment?: string;\n};\n\nexport type BeamCartValues = {\n cartId?: string; // External (partner) cart ID\n itemCount?: number;\n subtotal?: number;\n currencyCode?: string;\n} & Partial<TCartApi>;\n\n/**\n * The debounce time in milliseconds for updating the cart - updateCart will delay until it hasn't been called for\n * this long before handling the last call.\n */\nconst UPDATE_CART_DEBOUNCE_MS = 50;\n\n/**\n * Sends cart information to Beam\n * Memoized based on previous arguments - if the objects are deep-equal, no update is made.\n * @side-effects Sets beam_cart cookie, set cart data in localstorage\n * @example\n * const BeamConfig = { apiKey: 'abc-123' }\n * const { beamCartId } = await updateCart(BeamConfig, { beamCartId, itemCount, subtotal, currencyCode })\n * */\nconst updateCart = debounce(\n memoizeLast(async function updateCart(config: BeamCartAPIConfig, cartValues: BeamCartValues) {\n try {\n const localStorage = createScopedLocalStorage({ apiKey: config.apiKey });\n const baseUrl = config.baseUrl ?? DEFAULT_BASE_URL;\n\n // The cart cache is used to detect changes after page refreshes / across tabs\n const cachedCart: TBeamCartLocalStorage | null = localStorage.getItemJson(\"cart\");\n // The Beam cart cookie is used to identify the cart across subdomains\n // Use explicit null if empty because API requires it\n const beamCartId: string | null = getBeamCartId(BEAM_CART_COOKIE_NAME, config);\n // Remote session ID (ie, device ID from an A/B testing tool) will be linked to the cart\n const remoteSessionId: string | undefined = getRemoteSession(config) ?? undefined;\n\n const {\n cartId,\n subtotal,\n itemCount,\n currencyCode,\n content: { items = [], discounts = [] } = {},\n schema = { source: \"generic\" },\n } = cartValues;\n\n const cartWithDefaults = {\n cartId,\n subtotal,\n itemCount,\n currencyCode,\n content: { items, discounts },\n schema,\n beamCartId,\n };\n // Early return conditions. Skip sending cart to Beam if any apply:\n // 1. The cart has not changed\n // 2. Cart is empty, unless the cart was not empty before\n if (\n isEqual(cartWithDefaults, {\n ...cachedCart,\n cartId: cachedCart?.cartId /* make sure optional key is defined even if empty */,\n }) || // cart has not\n // changed, OR\n (cartValues.itemCount === 0 && // nothing in current cart, AND\n (!beamCartId || cachedCart?.itemCount === 0)) // no/expired prev cart or prev cart was empty\n ) {\n return;\n }\n\n const response = await postCart({\n baseUrl,\n headers: {\n authorization: `Api-Key ${config.apiKey}`,\n },\n requestBody: {\n beamCartId, // backwards compat: explicitly sending null here is required to get initial beamCartId\n storeId: config.storeId,\n remoteSessionId,\n cartId,\n subtotal,\n itemCount,\n currencyCode,\n },\n });\n\n // Response will contain a new beamCartId if one was not provided, or old one expired\n const { beamCartId: newBeamCartId, expiresAt, beamCartCreated } = response;\n\n if (newBeamCartId && expiresAt) {\n await setCookieValue({\n name: BEAM_CART_COOKIE_NAME,\n domain: config.domain,\n value: newBeamCartId,\n path: \"/\",\n // If we don't set an expiration, the cookie will be cleared when the tab is closed\n expires: new Date(expiresAt).getTime(),\n });\n }\n\n localStorage.setItemJson(\"cart\", {\n ...cartWithDefaults,\n beamCartId: newBeamCartId,\n });\n\n const eventDetail = {\n schema: schema as any, // TS union type can't figure out what variant applies here\n content: {\n items: items as any,\n discounts: discounts as any,\n },\n subtotal,\n itemCount,\n currencyCode,\n cartId,\n beamCartId,\n };\n\n // emit change event on any create/update/delete of cart items\n window.dispatchEvent(new BeamCartChangeEvent(eventDetail));\n\n // emit created event only when the cart is new according to Beam\n if (beamCartCreated) {\n window.dispatchEvent(new BeamCartCreatedEvent(eventDetail));\n }\n } catch (err) {\n throw new BeamError(\"Could not update cart in Beam\", { cause: err });\n }\n }),\n UPDATE_CART_DEBOUNCE_MS,\n { leading: true } // handle first call immediately but delay for more calls within debounce window\n);\n\nexport { updateCart };\n"],"names":["UPDATE_CART_DEBOUNCE_MS","updateCart","debounce","memoizeLast","config","cartValues","localStorage","createScopedLocalStorage","baseUrl","DEFAULT_BASE_URL","cachedCart","beamCartId","getBeamCartId","BEAM_CART_COOKIE_NAME","remoteSessionId","getRemoteSession","cartId","subtotal","itemCount","currencyCode","items","discounts","schema","cartWithDefaults","isEqual","response","postCart","newBeamCartId","expiresAt","beamCartCreated","setCookieValue","eventDetail","BeamCartChangeEvent","BeamCartCreatedEvent","err","BeamError"],"mappings":"gmBA8BMA,MAAAA,EAA0B,GAU1BC,EAAaC,EACjBC,EAAY,eAA0BC,EAA2BC,EAA4B,CAC3F,GAAI,CACF,MAAMC,EAAeC,EAAyB,CAAE,OAAQH,EAAO,MAAO,CAAC,EACjEI,EAAUJ,EAAO,SAAWK,EAG5BC,EAA2CJ,EAAa,YAAY,MAAM,EAG1EK,EAA4BC,EAAcC,EAAuBT,CAAM,EAEvEU,EAAsCC,EAAiBX,CAAM,GAAK,OAElE,CACJ,OAAAY,EACA,SAAAC,EACA,UAAAC,EACA,aAAAC,EACA,QAAS,CAAE,MAAAC,EAAQ,GAAI,UAAAC,EAAY,CAAG,CAAA,EAAI,CAAA,EAC1C,OAAAC,EAAS,CAAE,OAAQ,SAAU,CAC/B,EAAIjB,EAEEkB,EAAmB,CACvB,OAAAP,EACA,SAAAC,EACA,UAAAC,EACA,aAAAC,EACA,QAAS,CAAE,MAAAC,EAAO,UAAAC,CAAU,EAC5B,OAAAC,EACA,WAAAX,CACF,EAIA,GACEa,EAAQD,EAAkB,CACxB,GAAGb,EACH,OAAQA,GAAY,MACtB,CAAC,GAEAL,EAAW,YAAc,IACvB,CAACM,GAAcD,GAAY,YAAc,GAE5C,OAGF,MAAMe,EAAW,MAAMC,EAAS,CAC9B,QAAAlB,EACA,QAAS,CACP,cAAe,WAAWJ,EAAO,MAAM,EACzC,EACA,YAAa,CACX,WAAAO,EACA,QAASP,EAAO,QAChB,gBAAAU,EACA,OAAAE,EACA,SAAAC,EACA,UAAAC,EACA,aAAAC,CACF,CACF,CAAC,EAGK,CAAE,WAAYQ,EAAe,UAAAC,EAAW,gBAAAC,CAAgB,EAAIJ,EAE9DE,GAAiBC,GACnB,MAAME,EAAe,CACnB,KAAMjB,EACN,OAAQT,EAAO,OACf,MAAOuB,EACP,KAAM,IAEN,QAAS,IAAI,KAAKC,CAAS,EAAE,QAC/B,CAAA,CAAC,EAGHtB,EAAa,YAAY,OAAQ,CAC/B,GAAGiB,EACH,WAAYI,CACd,CAAC,EAED,MAAMI,EAAc,CAClB,OAAQT,EACR,QAAS,CACP,MAAOF,EACP,UAAWC,CACb,EACA,SAAAJ,EACA,UAAAC,EACA,aAAAC,EACA,OAAAH,EACA,WAAAL,CACF,EAGA,OAAO,cAAc,IAAIqB,EAAoBD,CAAW,CAAC,EAGrDF,GACF,OAAO,cAAc,IAAII,EAAqBF,CAAW,CAAC,CAE9D,OAASG,EAAK,CACZ,MAAM,IAAIC,EAAU,gCAAiC,CAAE,MAAOD,CAAI,CAAC,CACrE,CACF,CAAC,EACDlC,EACA,CAAE,QAAS,EAAK,CAClB"}
1
+ {"version":3,"file":"update-cart-T7h4g2nt.esm.js","sources":["../../src/integrations/cart/update-cart.ts"],"sourcesContent":["import isEqual from \"lodash-es/isEqual\";\nimport { DEFAULT_BASE_URL } from \"../../api-sdk/constants\";\nimport { BeamBaseAPIConfig } from \"../../api-sdk/types\";\nimport { postCart } from \"../../api-sdk/v3/routes\";\nimport { debounce, memoizeLast } from \"../../utils\";\nimport { BeamError } from \"../../utils/beam-errors\";\nimport { BEAM_CART_COOKIE_NAME, TBeamCartLocalStorage, TCartApi } from \"../../shared/cart-contents\";\nimport { setCookieValue } from \"../../utils/cookies\";\nimport { BeamCartChangeEvent, BeamCartCreatedEvent } from \"../../utils/events\";\nimport { createScopedLocalStorage } from \"../../utils/local-storage\";\nimport { getRemoteSession } from \"../../utils/remote-session\";\nimport { getBeamCartId } from \"../../utils/cart\";\n\nexport type BeamCartAPIConfig = BeamBaseAPIConfig & {\n storeId: number;\n domain?: string; // Domain to set cookies on\n statsigExperiment?: string;\n};\n\nexport type BeamCartValues = {\n cartId?: string; // External (partner) cart ID\n itemCount?: number;\n subtotal?: number;\n currencyCode?: string;\n} & Partial<TCartApi>;\n\n/**\n * The debounce time in milliseconds for updating the cart - updateCart will delay until it hasn't been called for\n * this long before handling the last call.\n */\nconst UPDATE_CART_DEBOUNCE_MS = 50;\n\n/**\n * Sends cart information to Beam\n * Memoized based on previous arguments - if the objects are deep-equal, no update is made.\n * @side-effects Sets beam_cart cookie, set cart data in localstorage\n * @example\n * const BeamConfig = { apiKey: 'abc-123' }\n * const { beamCartId } = await updateCart(BeamConfig, { beamCartId, itemCount, subtotal, currencyCode })\n * */\nconst updateCart = debounce(\n memoizeLast(async function updateCart(config: BeamCartAPIConfig, cartValues: BeamCartValues) {\n try {\n const localStorage = createScopedLocalStorage({ apiKey: config.apiKey });\n const baseUrl = config.baseUrl ?? DEFAULT_BASE_URL;\n\n // The cart cache is used to detect changes after page refreshes / across tabs\n const cachedCart: TBeamCartLocalStorage | null = localStorage.getItemJson(\"cart\");\n // The Beam cart cookie is used to identify the cart across subdomains\n // Use explicit null if empty because API requires it\n const beamCartId: string | null = getBeamCartId(BEAM_CART_COOKIE_NAME, config);\n // Remote session ID (ie, device ID from an A/B testing tool) will be linked to the cart\n const remoteSessionId: string | undefined = getRemoteSession(config) ?? undefined;\n\n const {\n cartId,\n subtotal,\n itemCount,\n currencyCode,\n content: { items = [], discounts = [] } = {},\n schema = { source: \"generic\" },\n } = cartValues;\n\n const cartWithDefaults = {\n cartId,\n subtotal,\n itemCount,\n currencyCode,\n content: { items, discounts },\n schema,\n beamCartId,\n };\n // Early return conditions. Skip sending cart to Beam if any apply:\n // 1. The cart has not changed\n // 2. Cart is empty, unless the cart was not empty before\n if (\n isEqual(cartWithDefaults, {\n ...cachedCart,\n cartId: cachedCart?.cartId /* make sure optional key is defined even if empty */,\n }) || // cart has not\n // changed, OR\n (cartValues.itemCount === 0 && // nothing in current cart, AND\n (!beamCartId || cachedCart?.itemCount === 0)) // no/expired prev cart or prev cart was empty\n ) {\n return;\n }\n\n const response = await postCart({\n baseUrl,\n headers: {\n authorization: `Api-Key ${config.apiKey}`,\n },\n requestBody: {\n beamCartId, // backwards compat: explicitly sending null here is required to get initial beamCartId\n storeId: config.storeId,\n remoteSessionId,\n cartId,\n subtotal,\n itemCount,\n currencyCode,\n },\n });\n\n // Response will contain a new beamCartId if one was not provided, or old one expired\n const { beamCartId: newBeamCartId, expiresAt, beamCartCreated } = response;\n\n if (newBeamCartId && expiresAt) {\n await setCookieValue({\n name: BEAM_CART_COOKIE_NAME,\n domain: config.domain,\n value: newBeamCartId,\n path: \"/\",\n // If we don't set an expiration, the cookie will be cleared when the tab is closed\n expires: new Date(expiresAt).getTime(),\n });\n }\n\n localStorage.setItemJson(\"cart\", {\n ...cartWithDefaults,\n beamCartId: newBeamCartId,\n });\n\n const eventDetail = {\n schema: schema as any, // TS union type can't figure out what variant applies here\n content: {\n items: items as any,\n discounts: discounts as any,\n },\n subtotal,\n itemCount,\n currencyCode,\n cartId,\n beamCartId,\n };\n\n // emit change event on any create/update/delete of cart items\n window.dispatchEvent(new BeamCartChangeEvent(eventDetail));\n\n // emit created event only when the cart is new according to Beam\n if (beamCartCreated) {\n window.dispatchEvent(new BeamCartCreatedEvent(eventDetail));\n }\n } catch (err) {\n throw new BeamError(\"Could not update cart in Beam\", { cause: err });\n }\n }),\n UPDATE_CART_DEBOUNCE_MS,\n { leading: true } // handle first call immediately but delay for more calls within debounce window\n);\n\nexport { updateCart };\n"],"names":["UPDATE_CART_DEBOUNCE_MS","updateCart","debounce","memoizeLast","config","cartValues","localStorage","createScopedLocalStorage","baseUrl","DEFAULT_BASE_URL","cachedCart","beamCartId","getBeamCartId","BEAM_CART_COOKIE_NAME","remoteSessionId","getRemoteSession","cartId","subtotal","itemCount","currencyCode","items","discounts","schema","cartWithDefaults","isEqual","response","postCart","newBeamCartId","expiresAt","beamCartCreated","setCookieValue","eventDetail","BeamCartChangeEvent","BeamCartCreatedEvent","err","BeamError"],"mappings":"gmBA8BMA,MAAAA,EAA0B,GAU1BC,EAAaC,EACjBC,EAAY,eAA0BC,EAA2BC,EAA4B,CAC3F,GAAI,CACF,MAAMC,EAAeC,EAAyB,CAAE,OAAQH,EAAO,MAAO,CAAC,EACjEI,EAAUJ,EAAO,SAAWK,EAG5BC,EAA2CJ,EAAa,YAAY,MAAM,EAG1EK,EAA4BC,EAAcC,EAAuBT,CAAM,EAEvEU,EAAsCC,EAAiBX,CAAM,GAAK,OAElE,CACJ,OAAAY,EACA,SAAAC,EACA,UAAAC,EACA,aAAAC,EACA,QAAS,CAAE,MAAAC,EAAQ,GAAI,UAAAC,EAAY,CAAG,CAAA,EAAI,CAAA,EAC1C,OAAAC,EAAS,CAAE,OAAQ,SAAU,CAC/B,EAAIjB,EAEEkB,EAAmB,CACvB,OAAAP,EACA,SAAAC,EACA,UAAAC,EACA,aAAAC,EACA,QAAS,CAAE,MAAAC,EAAO,UAAAC,CAAU,EAC5B,OAAAC,EACA,WAAAX,CACF,EAIA,GACEa,EAAQD,EAAkB,CACxB,GAAGb,EACH,OAAQA,GAAY,MACtB,CAAC,GAEAL,EAAW,YAAc,IACvB,CAACM,GAAcD,GAAY,YAAc,GAE5C,OAGF,MAAMe,EAAW,MAAMC,EAAS,CAC9B,QAAAlB,EACA,QAAS,CACP,cAAe,WAAWJ,EAAO,MAAM,EACzC,EACA,YAAa,CACX,WAAAO,EACA,QAASP,EAAO,QAChB,gBAAAU,EACA,OAAAE,EACA,SAAAC,EACA,UAAAC,EACA,aAAAC,CACF,CACF,CAAC,EAGK,CAAE,WAAYQ,EAAe,UAAAC,EAAW,gBAAAC,CAAgB,EAAIJ,EAE9DE,GAAiBC,GACnB,MAAME,EAAe,CACnB,KAAMjB,EACN,OAAQT,EAAO,OACf,MAAOuB,EACP,KAAM,IAEN,QAAS,IAAI,KAAKC,CAAS,EAAE,QAC/B,CAAA,CAAC,EAGHtB,EAAa,YAAY,OAAQ,CAC/B,GAAGiB,EACH,WAAYI,CACd,CAAC,EAED,MAAMI,EAAc,CAClB,OAAQT,EACR,QAAS,CACP,MAAOF,EACP,UAAWC,CACb,EACA,SAAAJ,EACA,UAAAC,EACA,aAAAC,EACA,OAAAH,EACA,WAAAL,CACF,EAGA,OAAO,cAAc,IAAIqB,EAAoBD,CAAW,CAAC,EAGrDF,GACF,OAAO,cAAc,IAAII,EAAqBF,CAAW,CAAC,CAE9D,OAASG,EAAK,CACZ,MAAM,IAAIC,EAAU,gCAAiC,CAAE,MAAOD,CAAI,CAAC,CACrE,CACF,CAAC,EACDlC,EACA,CAAE,QAAS,EAAK,CAClB"}
@@ -1,2 +1,2 @@
1
- import{d as y,i as B}from"./lodash-P8OIs-at.esm.js";import{D as g,b as A}from"./routes-FBB1GA4-.esm.js";import{B as v}from"./beam-errors-P-Lu07Ce.esm.js";import{d as K,f as S}from"./events-_4nImo3u.esm.js";import"../utils/network-listeners.js";import{createScopedLocalStorage as U}from"../utils/local-storage.js";import{setCookieValue as _}from"../utils/cookies.js";import{getRemoteSession as L}from"../utils/remote-session.js";import{memoizeLast as x}from"../utils/memoize-last.js";import{B as f}from"./cart-contents-h60geKWa.esm.js";import{getBeamCartId as D}from"../utils/cart.js";const R=50,T=y(x(async function(e,c){try{const t=U({apiKey:e.apiKey}),l=e.baseUrl??g,o=t.getItemJson("cart"),a=D(f,e),E=L(e)??void 0,{cartId:r,subtotal:m,itemCount:i,currencyCode:s,content:{items:d=[],discounts:u=[]}={},schema:C={source:"generic"}}=c,p={cartId:r,subtotal:m,itemCount:i,currencyCode:s,content:{items:d,discounts:u},schema:C,beamCartId:a};if(B(p,{...o,cartId:o?.cartId})||c.itemCount===0&&(!a||o?.itemCount===0))return;const h=await A({baseUrl:l,headers:{authorization:`Api-Key ${e.apiKey}`},requestBody:{beamCartId:a,storeId:e.storeId,remoteSessionId:E,cartId:r,subtotal:m,itemCount:i,currencyCode:s}}),{beamCartId:n,expiresAt:I,beamCartCreated:w}=h;n&&I&&await _({name:f,domain:e.domain,value:n,path:"/",expires:new Date(I).getTime()}),t.setItemJson("cart",{...p,beamCartId:n});const b={schema:C,content:{items:d,discounts:u},subtotal:m,itemCount:i,currencyCode:s,cartId:r,beamCartId:a};window.dispatchEvent(new K(b)),w&&window.dispatchEvent(new S(b))}catch(t){throw new v("Could not update cart in Beam",{cause:t})}}),R,{leading:!0});export{T as K};
2
- //# sourceMappingURL=update-cart-j9LPS5By.esm.js.map
1
+ import{d as y,i as B}from"./lodash-P8OIs-at.esm.js";import{D as g,b as A}from"./routes-F1ZIumMP.esm.js";import{B as v}from"./beam-errors-P-Lu07Ce.esm.js";import{d as K,f as S}from"./events-_4nImo3u.esm.js";import"../utils/network-listeners.js";import{createScopedLocalStorage as U}from"../utils/local-storage.js";import{setCookieValue as _}from"../utils/cookies.js";import{getRemoteSession as L}from"../utils/remote-session.js";import{memoizeLast as x}from"../utils/memoize-last.js";import{B as f}from"./cart-contents-h60geKWa.esm.js";import{getBeamCartId as D}from"../utils/cart.js";const R=50,T=y(x(async function(e,c){try{const t=U({apiKey:e.apiKey}),l=e.baseUrl??g,o=t.getItemJson("cart"),a=D(f,e),E=L(e)??void 0,{cartId:r,subtotal:m,itemCount:i,currencyCode:s,content:{items:d=[],discounts:u=[]}={},schema:C={source:"generic"}}=c,p={cartId:r,subtotal:m,itemCount:i,currencyCode:s,content:{items:d,discounts:u},schema:C,beamCartId:a};if(B(p,{...o,cartId:o?.cartId})||c.itemCount===0&&(!a||o?.itemCount===0))return;const h=await A({baseUrl:l,headers:{authorization:`Api-Key ${e.apiKey}`},requestBody:{beamCartId:a,storeId:e.storeId,remoteSessionId:E,cartId:r,subtotal:m,itemCount:i,currencyCode:s}}),{beamCartId:n,expiresAt:I,beamCartCreated:w}=h;n&&I&&await _({name:f,domain:e.domain,value:n,path:"/",expires:new Date(I).getTime()}),t.setItemJson("cart",{...p,beamCartId:n});const b={schema:C,content:{items:d,discounts:u},subtotal:m,itemCount:i,currencyCode:s,cartId:r,beamCartId:a};window.dispatchEvent(new K(b)),w&&window.dispatchEvent(new S(b))}catch(t){throw new v("Could not update cart in Beam",{cause:t})}}),R,{leading:!0});export{T as K};
2
+ //# sourceMappingURL=update-cart-WyIeEybK.esm.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"update-cart-j9LPS5By.esm.js","sources":["../../src/integrations/cart/update-cart.ts"],"sourcesContent":["import isEqual from \"lodash-es/isEqual\";\nimport { DEFAULT_BASE_URL } from \"../../api-sdk/constants\";\nimport { BeamBaseAPIConfig } from \"../../api-sdk/types\";\nimport { postCart } from \"../../api-sdk/v3/routes\";\nimport { debounce, memoizeLast } from \"../../utils\";\nimport { BeamError } from \"../../utils/beam-errors\";\nimport { BEAM_CART_COOKIE_NAME, TBeamCartLocalStorage, TCartApi } from \"../../shared/cart-contents\";\nimport { setCookieValue } from \"../../utils/cookies\";\nimport { BeamCartChangeEvent, BeamCartCreatedEvent } from \"../../utils/events\";\nimport { createScopedLocalStorage } from \"../../utils/local-storage\";\nimport { getRemoteSession } from \"../../utils/remote-session\";\nimport { getBeamCartId } from \"../../utils/cart\";\n\nexport type BeamCartAPIConfig = BeamBaseAPIConfig & {\n storeId: number;\n domain?: string; // Domain to set cookies on\n statsigExperiment?: string;\n};\n\nexport type BeamCartValues = {\n cartId?: string; // External (partner) cart ID\n itemCount?: number;\n subtotal?: number;\n currencyCode?: string;\n} & Partial<TCartApi>;\n\n/**\n * The debounce time in milliseconds for updating the cart - updateCart will delay until it hasn't been called for\n * this long before handling the last call.\n */\nconst UPDATE_CART_DEBOUNCE_MS = 50;\n\n/**\n * Sends cart information to Beam\n * Memoized based on previous arguments - if the objects are deep-equal, no update is made.\n * @side-effects Sets beam_cart cookie, set cart data in localstorage\n * @example\n * const BeamConfig = { apiKey: 'abc-123' }\n * const { beamCartId } = await updateCart(BeamConfig, { beamCartId, itemCount, subtotal, currencyCode })\n * */\nconst updateCart = debounce(\n memoizeLast(async function updateCart(config: BeamCartAPIConfig, cartValues: BeamCartValues) {\n try {\n const localStorage = createScopedLocalStorage({ apiKey: config.apiKey });\n const baseUrl = config.baseUrl ?? DEFAULT_BASE_URL;\n\n // The cart cache is used to detect changes after page refreshes / across tabs\n const cachedCart: TBeamCartLocalStorage | null = localStorage.getItemJson(\"cart\");\n // The Beam cart cookie is used to identify the cart across subdomains\n // Use explicit null if empty because API requires it\n const beamCartId: string | null = getBeamCartId(BEAM_CART_COOKIE_NAME, config);\n // Remote session ID (ie, device ID from an A/B testing tool) will be linked to the cart\n const remoteSessionId: string | undefined = getRemoteSession(config) ?? undefined;\n\n const {\n cartId,\n subtotal,\n itemCount,\n currencyCode,\n content: { items = [], discounts = [] } = {},\n schema = { source: \"generic\" },\n } = cartValues;\n\n const cartWithDefaults = {\n cartId,\n subtotal,\n itemCount,\n currencyCode,\n content: { items, discounts },\n schema,\n beamCartId,\n };\n // Early return conditions. Skip sending cart to Beam if any apply:\n // 1. The cart has not changed\n // 2. Cart is empty, unless the cart was not empty before\n if (\n isEqual(cartWithDefaults, {\n ...cachedCart,\n cartId: cachedCart?.cartId /* make sure optional key is defined even if empty */,\n }) || // cart has not\n // changed, OR\n (cartValues.itemCount === 0 && // nothing in current cart, AND\n (!beamCartId || cachedCart?.itemCount === 0)) // no/expired prev cart or prev cart was empty\n ) {\n return;\n }\n\n const response = await postCart({\n baseUrl,\n headers: {\n authorization: `Api-Key ${config.apiKey}`,\n },\n requestBody: {\n beamCartId, // backwards compat: explicitly sending null here is required to get initial beamCartId\n storeId: config.storeId,\n remoteSessionId,\n cartId,\n subtotal,\n itemCount,\n currencyCode,\n },\n });\n\n // Response will contain a new beamCartId if one was not provided, or old one expired\n const { beamCartId: newBeamCartId, expiresAt, beamCartCreated } = response;\n\n if (newBeamCartId && expiresAt) {\n await setCookieValue({\n name: BEAM_CART_COOKIE_NAME,\n domain: config.domain,\n value: newBeamCartId,\n path: \"/\",\n // If we don't set an expiration, the cookie will be cleared when the tab is closed\n expires: new Date(expiresAt).getTime(),\n });\n }\n\n localStorage.setItemJson(\"cart\", {\n ...cartWithDefaults,\n beamCartId: newBeamCartId,\n });\n\n const eventDetail = {\n schema: schema as any, // TS union type can't figure out what variant applies here\n content: {\n items: items as any,\n discounts: discounts as any,\n },\n subtotal,\n itemCount,\n currencyCode,\n cartId,\n beamCartId,\n };\n\n // emit change event on any create/update/delete of cart items\n window.dispatchEvent(new BeamCartChangeEvent(eventDetail));\n\n // emit created event only when the cart is new according to Beam\n if (beamCartCreated) {\n window.dispatchEvent(new BeamCartCreatedEvent(eventDetail));\n }\n } catch (err) {\n throw new BeamError(\"Could not update cart in Beam\", { cause: err });\n }\n }),\n UPDATE_CART_DEBOUNCE_MS,\n { leading: true } // handle first call immediately but delay for more calls within debounce window\n);\n\nexport { updateCart };\n"],"names":["UPDATE_CART_DEBOUNCE_MS","updateCart","debounce","memoizeLast","config","cartValues","localStorage","createScopedLocalStorage","baseUrl","DEFAULT_BASE_URL","cachedCart","beamCartId","getBeamCartId","BEAM_CART_COOKIE_NAME","remoteSessionId","getRemoteSession","cartId","subtotal","itemCount","currencyCode","items","discounts","schema","cartWithDefaults","isEqual","response","postCart","newBeamCartId","expiresAt","beamCartCreated","setCookieValue","eventDetail","BeamCartChangeEvent","BeamCartCreatedEvent","err","BeamError"],"mappings":"wkBA8BMA,MAAAA,EAA0B,GAU1BC,EAAaC,EACjBC,EAAY,eAA0BC,EAA2BC,EAA4B,CAC3F,GAAI,CACF,MAAMC,EAAeC,EAAyB,CAAE,OAAQH,EAAO,MAAO,CAAC,EACjEI,EAAUJ,EAAO,SAAWK,EAG5BC,EAA2CJ,EAAa,YAAY,MAAM,EAG1EK,EAA4BC,EAAcC,EAAuBT,CAAM,EAEvEU,EAAsCC,EAAiBX,CAAM,GAAK,OAElE,CACJ,OAAAY,EACA,SAAAC,EACA,UAAAC,EACA,aAAAC,EACA,QAAS,CAAE,MAAAC,EAAQ,GAAI,UAAAC,EAAY,CAAG,CAAA,EAAI,CAAA,EAC1C,OAAAC,EAAS,CAAE,OAAQ,SAAU,CAC/B,EAAIjB,EAEEkB,EAAmB,CACvB,OAAAP,EACA,SAAAC,EACA,UAAAC,EACA,aAAAC,EACA,QAAS,CAAE,MAAAC,EAAO,UAAAC,CAAU,EAC5B,OAAAC,EACA,WAAAX,CACF,EAIA,GACEa,EAAQD,EAAkB,CACxB,GAAGb,EACH,OAAQA,GAAY,MACtB,CAAC,GAEAL,EAAW,YAAc,IACvB,CAACM,GAAcD,GAAY,YAAc,GAE5C,OAGF,MAAMe,EAAW,MAAMC,EAAS,CAC9B,QAAAlB,EACA,QAAS,CACP,cAAe,WAAWJ,EAAO,MAAM,EACzC,EACA,YAAa,CACX,WAAAO,EACA,QAASP,EAAO,QAChB,gBAAAU,EACA,OAAAE,EACA,SAAAC,EACA,UAAAC,EACA,aAAAC,CACF,CACF,CAAC,EAGK,CAAE,WAAYQ,EAAe,UAAAC,EAAW,gBAAAC,CAAgB,EAAIJ,EAE9DE,GAAiBC,GACnB,MAAME,EAAe,CACnB,KAAMjB,EACN,OAAQT,EAAO,OACf,MAAOuB,EACP,KAAM,IAEN,QAAS,IAAI,KAAKC,CAAS,EAAE,QAC/B,CAAA,CAAC,EAGHtB,EAAa,YAAY,OAAQ,CAC/B,GAAGiB,EACH,WAAYI,CACd,CAAC,EAED,MAAMI,EAAc,CAClB,OAAQT,EACR,QAAS,CACP,MAAOF,EACP,UAAWC,CACb,EACA,SAAAJ,EACA,UAAAC,EACA,aAAAC,EACA,OAAAH,EACA,WAAAL,CACF,EAGA,OAAO,cAAc,IAAIqB,EAAoBD,CAAW,CAAC,EAGrDF,GACF,OAAO,cAAc,IAAII,EAAqBF,CAAW,CAAC,CAE9D,OAASG,EAAK,CACZ,MAAM,IAAIC,EAAU,gCAAiC,CAAE,MAAOD,CAAI,CAAC,CACrE,CACF,CAAC,EACDlC,EACA,CAAE,QAAS,EAAK,CAClB"}
1
+ {"version":3,"file":"update-cart-WyIeEybK.esm.js","sources":["../../src/integrations/cart/update-cart.ts"],"sourcesContent":["import isEqual from \"lodash-es/isEqual\";\nimport { DEFAULT_BASE_URL } from \"../../api-sdk/constants\";\nimport { BeamBaseAPIConfig } from \"../../api-sdk/types\";\nimport { postCart } from \"../../api-sdk/v3/routes\";\nimport { debounce, memoizeLast } from \"../../utils\";\nimport { BeamError } from \"../../utils/beam-errors\";\nimport { BEAM_CART_COOKIE_NAME, TBeamCartLocalStorage, TCartApi } from \"../../shared/cart-contents\";\nimport { setCookieValue } from \"../../utils/cookies\";\nimport { BeamCartChangeEvent, BeamCartCreatedEvent } from \"../../utils/events\";\nimport { createScopedLocalStorage } from \"../../utils/local-storage\";\nimport { getRemoteSession } from \"../../utils/remote-session\";\nimport { getBeamCartId } from \"../../utils/cart\";\n\nexport type BeamCartAPIConfig = BeamBaseAPIConfig & {\n storeId: number;\n domain?: string; // Domain to set cookies on\n statsigExperiment?: string;\n};\n\nexport type BeamCartValues = {\n cartId?: string; // External (partner) cart ID\n itemCount?: number;\n subtotal?: number;\n currencyCode?: string;\n} & Partial<TCartApi>;\n\n/**\n * The debounce time in milliseconds for updating the cart - updateCart will delay until it hasn't been called for\n * this long before handling the last call.\n */\nconst UPDATE_CART_DEBOUNCE_MS = 50;\n\n/**\n * Sends cart information to Beam\n * Memoized based on previous arguments - if the objects are deep-equal, no update is made.\n * @side-effects Sets beam_cart cookie, set cart data in localstorage\n * @example\n * const BeamConfig = { apiKey: 'abc-123' }\n * const { beamCartId } = await updateCart(BeamConfig, { beamCartId, itemCount, subtotal, currencyCode })\n * */\nconst updateCart = debounce(\n memoizeLast(async function updateCart(config: BeamCartAPIConfig, cartValues: BeamCartValues) {\n try {\n const localStorage = createScopedLocalStorage({ apiKey: config.apiKey });\n const baseUrl = config.baseUrl ?? DEFAULT_BASE_URL;\n\n // The cart cache is used to detect changes after page refreshes / across tabs\n const cachedCart: TBeamCartLocalStorage | null = localStorage.getItemJson(\"cart\");\n // The Beam cart cookie is used to identify the cart across subdomains\n // Use explicit null if empty because API requires it\n const beamCartId: string | null = getBeamCartId(BEAM_CART_COOKIE_NAME, config);\n // Remote session ID (ie, device ID from an A/B testing tool) will be linked to the cart\n const remoteSessionId: string | undefined = getRemoteSession(config) ?? undefined;\n\n const {\n cartId,\n subtotal,\n itemCount,\n currencyCode,\n content: { items = [], discounts = [] } = {},\n schema = { source: \"generic\" },\n } = cartValues;\n\n const cartWithDefaults = {\n cartId,\n subtotal,\n itemCount,\n currencyCode,\n content: { items, discounts },\n schema,\n beamCartId,\n };\n // Early return conditions. Skip sending cart to Beam if any apply:\n // 1. The cart has not changed\n // 2. Cart is empty, unless the cart was not empty before\n if (\n isEqual(cartWithDefaults, {\n ...cachedCart,\n cartId: cachedCart?.cartId /* make sure optional key is defined even if empty */,\n }) || // cart has not\n // changed, OR\n (cartValues.itemCount === 0 && // nothing in current cart, AND\n (!beamCartId || cachedCart?.itemCount === 0)) // no/expired prev cart or prev cart was empty\n ) {\n return;\n }\n\n const response = await postCart({\n baseUrl,\n headers: {\n authorization: `Api-Key ${config.apiKey}`,\n },\n requestBody: {\n beamCartId, // backwards compat: explicitly sending null here is required to get initial beamCartId\n storeId: config.storeId,\n remoteSessionId,\n cartId,\n subtotal,\n itemCount,\n currencyCode,\n },\n });\n\n // Response will contain a new beamCartId if one was not provided, or old one expired\n const { beamCartId: newBeamCartId, expiresAt, beamCartCreated } = response;\n\n if (newBeamCartId && expiresAt) {\n await setCookieValue({\n name: BEAM_CART_COOKIE_NAME,\n domain: config.domain,\n value: newBeamCartId,\n path: \"/\",\n // If we don't set an expiration, the cookie will be cleared when the tab is closed\n expires: new Date(expiresAt).getTime(),\n });\n }\n\n localStorage.setItemJson(\"cart\", {\n ...cartWithDefaults,\n beamCartId: newBeamCartId,\n });\n\n const eventDetail = {\n schema: schema as any, // TS union type can't figure out what variant applies here\n content: {\n items: items as any,\n discounts: discounts as any,\n },\n subtotal,\n itemCount,\n currencyCode,\n cartId,\n beamCartId,\n };\n\n // emit change event on any create/update/delete of cart items\n window.dispatchEvent(new BeamCartChangeEvent(eventDetail));\n\n // emit created event only when the cart is new according to Beam\n if (beamCartCreated) {\n window.dispatchEvent(new BeamCartCreatedEvent(eventDetail));\n }\n } catch (err) {\n throw new BeamError(\"Could not update cart in Beam\", { cause: err });\n }\n }),\n UPDATE_CART_DEBOUNCE_MS,\n { leading: true } // handle first call immediately but delay for more calls within debounce window\n);\n\nexport { updateCart };\n"],"names":["UPDATE_CART_DEBOUNCE_MS","updateCart","debounce","memoizeLast","config","cartValues","localStorage","createScopedLocalStorage","baseUrl","DEFAULT_BASE_URL","cachedCart","beamCartId","getBeamCartId","BEAM_CART_COOKIE_NAME","remoteSessionId","getRemoteSession","cartId","subtotal","itemCount","currencyCode","items","discounts","schema","cartWithDefaults","isEqual","response","postCart","newBeamCartId","expiresAt","beamCartCreated","setCookieValue","eventDetail","BeamCartChangeEvent","BeamCartCreatedEvent","err","BeamError"],"mappings":"wkBA8BMA,MAAAA,EAA0B,GAU1BC,EAAaC,EACjBC,EAAY,eAA0BC,EAA2BC,EAA4B,CAC3F,GAAI,CACF,MAAMC,EAAeC,EAAyB,CAAE,OAAQH,EAAO,MAAO,CAAC,EACjEI,EAAUJ,EAAO,SAAWK,EAG5BC,EAA2CJ,EAAa,YAAY,MAAM,EAG1EK,EAA4BC,EAAcC,EAAuBT,CAAM,EAEvEU,EAAsCC,EAAiBX,CAAM,GAAK,OAElE,CACJ,OAAAY,EACA,SAAAC,EACA,UAAAC,EACA,aAAAC,EACA,QAAS,CAAE,MAAAC,EAAQ,GAAI,UAAAC,EAAY,CAAG,CAAA,EAAI,CAAA,EAC1C,OAAAC,EAAS,CAAE,OAAQ,SAAU,CAC/B,EAAIjB,EAEEkB,EAAmB,CACvB,OAAAP,EACA,SAAAC,EACA,UAAAC,EACA,aAAAC,EACA,QAAS,CAAE,MAAAC,EAAO,UAAAC,CAAU,EAC5B,OAAAC,EACA,WAAAX,CACF,EAIA,GACEa,EAAQD,EAAkB,CACxB,GAAGb,EACH,OAAQA,GAAY,MACtB,CAAC,GAEAL,EAAW,YAAc,IACvB,CAACM,GAAcD,GAAY,YAAc,GAE5C,OAGF,MAAMe,EAAW,MAAMC,EAAS,CAC9B,QAAAlB,EACA,QAAS,CACP,cAAe,WAAWJ,EAAO,MAAM,EACzC,EACA,YAAa,CACX,WAAAO,EACA,QAASP,EAAO,QAChB,gBAAAU,EACA,OAAAE,EACA,SAAAC,EACA,UAAAC,EACA,aAAAC,CACF,CACF,CAAC,EAGK,CAAE,WAAYQ,EAAe,UAAAC,EAAW,gBAAAC,CAAgB,EAAIJ,EAE9DE,GAAiBC,GACnB,MAAME,EAAe,CACnB,KAAMjB,EACN,OAAQT,EAAO,OACf,MAAOuB,EACP,KAAM,IAEN,QAAS,IAAI,KAAKC,CAAS,EAAE,QAC/B,CAAA,CAAC,EAGHtB,EAAa,YAAY,OAAQ,CAC/B,GAAGiB,EACH,WAAYI,CACd,CAAC,EAED,MAAMI,EAAc,CAClB,OAAQT,EACR,QAAS,CACP,MAAOF,EACP,UAAWC,CACb,EACA,SAAAJ,EACA,UAAAC,EACA,aAAAC,EACA,OAAAH,EACA,WAAAL,CACF,EAGA,OAAO,cAAc,IAAIqB,EAAoBD,CAAW,CAAC,EAGrDF,GACF,OAAO,cAAc,IAAII,EAAqBF,CAAW,CAAC,CAE9D,OAASG,EAAK,CACZ,MAAM,IAAIC,EAAU,gCAAiC,CAAE,MAAOD,CAAI,CAAC,CACrE,CACF,CAAC,EACDlC,EACA,CAAE,QAAS,EAAK,CAClB"}
@@ -1,4 +1,4 @@
1
- import{f as x,g as d,t as I,h as v,y as g,k as b,m as u}from"../chunks/lit-iNN5L_Qk.esm.js";import{p as $}from"../chunks/progress-bar-PMU_xI3L.esm.js";import{partnerLogosConfigDefaults as T}from"./beam-partner-logos.esm.js";import{c as k,d as w,e as S}from"../chunks/enforce-config-ZAI7WYAd.esm.js";import{u as n,A as L,i as c,_ as f,d as m,a as A}from"../chunks/localize-o-cYvHQf.esm.js";import{D as z,g as F,W as D,S as M}from"../chunks/routes-jmFlXAbv.esm.js";import{_ as U}from"../chunks/loading-template-t4fFsYtr.esm.js";import{B as E}from"../chunks/beam-errors-P-Lu07Ce.esm.js";import{c as C}from"../chunks/css-card-grid-nEc--M5M.esm.js";import"../utils/logger.esm.js";const y={en:{fundedTimes:({times:t=0})=>`Funded <b>${t}</b> ${t>1?"times":"time"} so far`,learnMore:()=>"Learn more",seeAll:()=>"See All"},fr:{fundedTimes:({times:t=0})=>`Financ\xE9 <b>${t}</b> fois pour l'instant`,learnMore:()=>"En savoir plus",seeAll:()=>"Voir tout"},de:{fundedTimes:({times:t=0})=>`<b>${t}</b> Mal finanziert`,learnMore:()=>"Mehr erfahren",seeAll:()=>"Alle anzeigen"},es:{fundedTimes:({times:t=0})=>`Financiado <b>${t}</b> ${t>1?"vez":"veces"}`,learnMore:()=>"Saber m\xE1s",seeAll:()=>"Ver Todo"},it:{fundedTimes:({times:t=0})=>`Finanziato <b>${t}</b> ${t>1?"volta":"volte"}`,learnMore:()=>"Scopri di pi\xF9",seeAll:()=>"Vedi Tutto"},pl:{fundedTimes:({times:t=0})=>`Udzielono wsparcia <b>${t}</b> ${t>1?"razy":"raz"}`,learnMore:()=>"Dowiedz si\u0119 wi\u0119cej",seeAll:()=>"Zobacz wszystko"}};var _=Object.defineProperty,P=Object.getOwnPropertyDescriptor,p=(t,a,i,r)=>{for(var o=r>1?void 0:r?P(a,i):a,e=t.length-1,l;e>=0;e--)(l=t[e])&&(o=(r?l(a,i,o):l(o))||o);return r&&o&&_(a,i,o),o};class s extends v{constructor(){super(...arguments),this.baseUrl=z,this.cardStyle="image",this.lang="en",this.debug=!1,this.draftConfig=!1,this.selectedFilter=null,this.getImpactData=async()=>(S(["apiKey","chainId"],this),F({baseUrl:this.baseUrl,headers:{authorization:`Api-Key ${this.apiKey}`},queryParams:{chainId:this.chainId,personalImpactLimit:0,widgetName:D.community_impact,version:"1.0.0",lang:this.configLang,draftConfig:this.draftConfig}})),this.impactDataController=new L(this,this.getImpactData),this.renderImageCard=a=>{const i=`${a.nonprofit?.name} image`,r=`Learn more about ${a.nonprofit?.name}`;return g`
1
+ import{f as x,g as d,t as I,h as v,y as g,k as b,m as u}from"../chunks/lit-iNN5L_Qk.esm.js";import{p as $}from"../chunks/progress-bar-PMU_xI3L.esm.js";import{partnerLogosConfigDefaults as T}from"./beam-partner-logos.esm.js";import{c as k,d as w,e as S}from"../chunks/enforce-config-ZAI7WYAd.esm.js";import{u as n,A as L,i as c,_ as f,d as m,a as A}from"../chunks/localize-o-cYvHQf.esm.js";import{D as z,g as F,W as D,S as M}from"../chunks/routes-sQWfbAoi.esm.js";import{_ as U}from"../chunks/loading-template-t4fFsYtr.esm.js";import{B as E}from"../chunks/beam-errors-P-Lu07Ce.esm.js";import{c as C}from"../chunks/css-card-grid-nEc--M5M.esm.js";import"../utils/logger.esm.js";const y={en:{fundedTimes:({times:t=0})=>`Funded <b>${t}</b> ${t>1?"times":"time"} so far`,learnMore:()=>"Learn more",seeAll:()=>"See All"},fr:{fundedTimes:({times:t=0})=>`Financ\xE9 <b>${t}</b> fois pour l'instant`,learnMore:()=>"En savoir plus",seeAll:()=>"Voir tout"},de:{fundedTimes:({times:t=0})=>`<b>${t}</b> Mal finanziert`,learnMore:()=>"Mehr erfahren",seeAll:()=>"Alle anzeigen"},es:{fundedTimes:({times:t=0})=>`Financiado <b>${t}</b> ${t>1?"vez":"veces"}`,learnMore:()=>"Saber m\xE1s",seeAll:()=>"Ver Todo"},it:{fundedTimes:({times:t=0})=>`Finanziato <b>${t}</b> ${t>1?"volta":"volte"}`,learnMore:()=>"Scopri di pi\xF9",seeAll:()=>"Vedi Tutto"},pl:{fundedTimes:({times:t=0})=>`Udzielono wsparcia <b>${t}</b> ${t>1?"razy":"raz"}`,learnMore:()=>"Dowiedz si\u0119 wi\u0119cej",seeAll:()=>"Zobacz wszystko"}};var _=Object.defineProperty,P=Object.getOwnPropertyDescriptor,p=(t,a,i,r)=>{for(var o=r>1?void 0:r?P(a,i):a,e=t.length-1,l;e>=0;e--)(l=t[e])&&(o=(r?l(a,i,o):l(o))||o);return r&&o&&_(a,i,o),o};class s extends v{constructor(){super(...arguments),this.baseUrl=z,this.cardStyle="image",this.lang="en",this.debug=!1,this.draftConfig=!1,this.selectedFilter=null,this.getImpactData=async()=>(S(["apiKey","chainId"],this),F({baseUrl:this.baseUrl,headers:{authorization:`Api-Key ${this.apiKey}`},queryParams:{chainId:this.chainId,personalImpactLimit:0,widgetName:D.community_impact,version:"1.0.0",lang:this.configLang,draftConfig:this.draftConfig}})),this.impactDataController=new L(this,this.getImpactData),this.renderImageCard=a=>{const i=`${a.nonprofit?.name} image`,r=`Learn more about ${a.nonprofit?.name}`;return g`
2
2
  <div class="image-card" part="nonprofit-card" style="display: flex; flex-direction: column;">
3
3
  <div
4
4
  class="image-card-image-box"
@@ -1,4 +1,4 @@
1
- import{f as x,g as d,t as I,h as v,y as g,k as b,m as u}from"../chunks/lit-iNN5L_Qk.esm.js";import{p as $}from"../chunks/progress-bar-PMU_xI3L.esm.js";import{partnerLogosConfigDefaults as T}from"./beam-partner-logos.js";import{c as k,d as w,e as S}from"../chunks/enforce-config-ZyPq_4CF.esm.js";import{u as n,A as L,i as c,_ as f,d as m,a as A}from"../chunks/localize-m-_ESmpk.esm.js";import{D as z,g as F,W as D,S as M}from"../chunks/routes-FBB1GA4-.esm.js";import{_ as U}from"../chunks/loading-template-t4fFsYtr.esm.js";import{B as E}from"../chunks/beam-errors-P-Lu07Ce.esm.js";import{c as C}from"../chunks/css-card-grid-nEc--M5M.esm.js";import"../utils/logger.js";const y={en:{fundedTimes:({times:t=0})=>`Funded <b>${t}</b> ${t>1?"times":"time"} so far`,learnMore:()=>"Learn more",seeAll:()=>"See All"},fr:{fundedTimes:({times:t=0})=>`Financ\xE9 <b>${t}</b> fois pour l'instant`,learnMore:()=>"En savoir plus",seeAll:()=>"Voir tout"},de:{fundedTimes:({times:t=0})=>`<b>${t}</b> Mal finanziert`,learnMore:()=>"Mehr erfahren",seeAll:()=>"Alle anzeigen"},es:{fundedTimes:({times:t=0})=>`Financiado <b>${t}</b> ${t>1?"vez":"veces"}`,learnMore:()=>"Saber m\xE1s",seeAll:()=>"Ver Todo"},it:{fundedTimes:({times:t=0})=>`Finanziato <b>${t}</b> ${t>1?"volta":"volte"}`,learnMore:()=>"Scopri di pi\xF9",seeAll:()=>"Vedi Tutto"},pl:{fundedTimes:({times:t=0})=>`Udzielono wsparcia <b>${t}</b> ${t>1?"razy":"raz"}`,learnMore:()=>"Dowiedz si\u0119 wi\u0119cej",seeAll:()=>"Zobacz wszystko"}};var _=Object.defineProperty,P=Object.getOwnPropertyDescriptor,p=(t,a,i,r)=>{for(var o=r>1?void 0:r?P(a,i):a,e=t.length-1,l;e>=0;e--)(l=t[e])&&(o=(r?l(a,i,o):l(o))||o);return r&&o&&_(a,i,o),o};class s extends v{constructor(){super(...arguments),this.baseUrl=z,this.cardStyle="image",this.lang="en",this.debug=!1,this.draftConfig=!1,this.selectedFilter=null,this.getImpactData=async()=>(S(["apiKey","chainId"],this),F({baseUrl:this.baseUrl,headers:{authorization:`Api-Key ${this.apiKey}`},queryParams:{chainId:this.chainId,personalImpactLimit:0,widgetName:D.community_impact,version:"1.0.0",lang:this.configLang,draftConfig:this.draftConfig}})),this.impactDataController=new L(this,this.getImpactData),this.renderImageCard=a=>{const i=`${a.nonprofit?.name} image`,r=`Learn more about ${a.nonprofit?.name}`;return g`
1
+ import{f as x,g as d,t as I,h as v,y as g,k as b,m as u}from"../chunks/lit-iNN5L_Qk.esm.js";import{p as $}from"../chunks/progress-bar-PMU_xI3L.esm.js";import{partnerLogosConfigDefaults as T}from"./beam-partner-logos.js";import{c as k,d as w,e as S}from"../chunks/enforce-config-ZyPq_4CF.esm.js";import{u as n,A as L,i as c,_ as f,d as m,a as A}from"../chunks/localize-m-_ESmpk.esm.js";import{D as z,g as F,W as D,S as M}from"../chunks/routes-F1ZIumMP.esm.js";import{_ as U}from"../chunks/loading-template-t4fFsYtr.esm.js";import{B as E}from"../chunks/beam-errors-P-Lu07Ce.esm.js";import{c as C}from"../chunks/css-card-grid-nEc--M5M.esm.js";import"../utils/logger.js";const y={en:{fundedTimes:({times:t=0})=>`Funded <b>${t}</b> ${t>1?"times":"time"} so far`,learnMore:()=>"Learn more",seeAll:()=>"See All"},fr:{fundedTimes:({times:t=0})=>`Financ\xE9 <b>${t}</b> fois pour l'instant`,learnMore:()=>"En savoir plus",seeAll:()=>"Voir tout"},de:{fundedTimes:({times:t=0})=>`<b>${t}</b> Mal finanziert`,learnMore:()=>"Mehr erfahren",seeAll:()=>"Alle anzeigen"},es:{fundedTimes:({times:t=0})=>`Financiado <b>${t}</b> ${t>1?"vez":"veces"}`,learnMore:()=>"Saber m\xE1s",seeAll:()=>"Ver Todo"},it:{fundedTimes:({times:t=0})=>`Finanziato <b>${t}</b> ${t>1?"volta":"volte"}`,learnMore:()=>"Scopri di pi\xF9",seeAll:()=>"Vedi Tutto"},pl:{fundedTimes:({times:t=0})=>`Udzielono wsparcia <b>${t}</b> ${t>1?"razy":"raz"}`,learnMore:()=>"Dowiedz si\u0119 wi\u0119cej",seeAll:()=>"Zobacz wszystko"}};var _=Object.defineProperty,P=Object.getOwnPropertyDescriptor,p=(t,a,i,r)=>{for(var o=r>1?void 0:r?P(a,i):a,e=t.length-1,l;e>=0;e--)(l=t[e])&&(o=(r?l(a,i,o):l(o))||o);return r&&o&&_(a,i,o),o};class s extends v{constructor(){super(...arguments),this.baseUrl=z,this.cardStyle="image",this.lang="en",this.debug=!1,this.draftConfig=!1,this.selectedFilter=null,this.getImpactData=async()=>(S(["apiKey","chainId"],this),F({baseUrl:this.baseUrl,headers:{authorization:`Api-Key ${this.apiKey}`},queryParams:{chainId:this.chainId,personalImpactLimit:0,widgetName:D.community_impact,version:"1.0.0",lang:this.configLang,draftConfig:this.draftConfig}})),this.impactDataController=new L(this,this.getImpactData),this.renderImageCard=a=>{const i=`${a.nonprofit?.name} image`,r=`Learn more about ${a.nonprofit?.name}`;return g`
2
2
  <div class="image-card" part="nonprofit-card" style="display: flex; flex-direction: column;">
3
3
  <div
4
4
  class="image-card-image-box"
@@ -1,4 +1,4 @@
1
- import{t as C,h as b,y as u,g as c,f as y,p as I}from"../chunks/lit-iNN5L_Qk.esm.js";import{d as x}from"../chunks/lodash-P8OIs-at.esm.js";import{c as T,d as S,e as E}from"../chunks/enforce-config-ZAI7WYAd.esm.js";import{u as p,A as z,_ as f,i as d,d as v,a as B}from"../chunks/localize-o-cYvHQf.esm.js";import{D,l as k,S as L}from"../chunks/routes-jmFlXAbv.esm.js";import{B as $}from"../chunks/beam-errors-P-Lu07Ce.esm.js";import{_ as V}from"../chunks/loading-template-t4fFsYtr.esm.js";import{i as A}from"../chunks/is-all-html-elements-SdSkxirh.esm.js";import"../utils/logger.esm.js";var j=Object.defineProperty,R=Object.getOwnPropertyDescriptor,h=(s,e,t,a)=>{for(var i=a>1?void 0:a?R(e,t):e,o=s.length-1,r;o>=0;o--)(r=s[o])&&(i=(a?r(e,t,i):r(i))||i);return a&&i&&j(e,t,i),i};class m extends b{constructor(){super(...arguments),this.finalValue=0,this.duration=1500,this.counter=0,this.intervalId=0,this.handleCounterAnimateIfInView=e=>{e.some(t=>t.isIntersecting)&&(this.animateCounter(),this.unobserveScrollTarget())},this.animateCounter=()=>{const e=41.666666666666664,t=e/this.duration*this.finalValue;this.intervalId=setInterval(()=>{const a=this.counter+t;if(a>=this.finalValue){this.counter=this.finalValue,clearInterval(this.intervalId);return}else this.counter=a},e)},this.observer=new IntersectionObserver(this.handleCounterAnimateIfInView,{threshold:.1}),this.observeScrollTarget=()=>{const e=this.scrollTargetElement;e&&this.observer.observe(e)},this.unobserveScrollTarget=()=>{const e=this.scrollTargetElement;e&&this.observer.unobserve(e)}}connectedCallback(){super.connectedCallback();const e=window.matchMedia("(prefers-reduced-motion: reduce)").matches;this.duration===0||e?this.counter=this.finalValue:this.observeScrollTarget()}disconnectedCallback(){super.disconnectedCallback(),this.unobserveScrollTarget(),clearInterval(this.intervalId)}get scrollTargetElement(){return this.scrollTarget?document.querySelector(this.scrollTarget):this}render(){return u`${Math.ceil(this.counter).toLocaleString()}`}}h([c({type:Number})],m.prototype,"finalValue",2),h([c({type:Number})],m.prototype,"duration",2),h([c({type:String})],m.prototype,"scrollTarget",2),h([C()],m.prototype,"counter",2),customElements.get("animated-counter")||customElements.define("animated-counter",m);const O=s=>{const e=s instanceof NodeList?Array.from(s):s;if(e.length===0||!A(e))return;const t=e.sort((i,o)=>{const r=getComputedStyle(i).getPropertyValue("width").replace("px",""),g=getComputedStyle(o).getPropertyValue("width").replace("px","");return parseInt(g)-parseInt(r)})[0],a=getComputedStyle(t).getPropertyValue("width");for(const i of e)getComputedStyle(i).getPropertyValue("width")!==a&&(i.style.width=a)},w={en:{cumulativeImpactTitle:()=>"What we've funded",cumulativeImpactDescription:()=>"Here's the impact that our community has made so far in partnership with Beam. Our impact is growing every day\u2014 scroll to check out the goals we're working toward together right now."},fr:{cumulativeImpactTitle:()=>"Ce que nous avons financ\xE9",cumulativeImpactDescription:()=>"Voici l'impact que notre communaut\xE9 a eu jusqu'\xE0 pr\xE9sent en partenariat avec Beam. Notre impact grandit chaque jour : faites d\xE9filer pour d\xE9couvrir les objectifs vers lesquels nous travaillons ensemble en ce moment."},de:{cumulativeImpactTitle:()=>"Was wir finanziert haben",cumulativeImpactDescription:()=>"Hier ist die Wirkung, die unsere Community bisher in Zusammenarbeit mit Beam erzielt hat. Unsere Wirkung w\xE4chst von Tag zu Tag - scrollen Sie, um einen Blick auf die Ziele zu werfen, auf die wir derzeit gemeinsam hinarbeiten."},es:{cumulativeImpactTitle:()=>"Lo que hemos financiado",cumulativeImpactDescription:()=>"Este es el impacto que nuestra comunidad ha tenido hasta ahora en asociaci\xF3n con Beam. Nuestro impacto crece cada d\xEDa; despl\xE1cese para ver los objetivos por los que estamos trabajando juntos en este momento."},it:{cumulativeImpactTitle:()=>"Cosa abbiamo finanziato",cumulativeImpactDescription:()=>"Ecco l'impatto che la nostra comunit\xE0 ha avuto finora in collaborazione con Beam. Il nostro impatto cresce ogni giorno: scorri per scoprire gli obiettivi a cui stiamo lavorando insieme in questo momento."},pl:{cumulativeImpactTitle:()=>"Co sfinansowali\u015Bmy",cumulativeImpactDescription:()=>"Oto wp\u0142yw, jaki nasza spo\u0142eczno\u015B\u0107 wywar\u0142a dotychczas we wsp\xF3\u0142pracy z Beam. Nasz wp\u0142yw ro\u015Bnie z ka\u017Cdym dniem \u2014 przewi\u0144, aby sprawdzi\u0107 cele, nad kt\xF3rymi obecnie wsp\xF3lnie pracujemy."}};var P=Object.defineProperty,q=Object.getOwnPropertyDescriptor,l=(s,e,t,a)=>{for(var i=a>1?void 0:a?q(e,t):e,o=s.length-1,r;o>=0;o--)(r=s[o])&&(i=(a?r(e,t,i):r(i))||i);return a&&i&&P(e,t,i),i};const U=1.5*1e3;class n extends b{constructor(){super(...arguments),this.baseUrl=D,this.lang="en",this.disableAnimation=!1,this.debug=!1,this.draftConfig=!1,this.getCumulativeImpactData=async()=>(E(["apiKey","chainId"],this),await k({baseUrl:this.baseUrl,pathParams:{chainId:this.chainId},headers:{authorization:`Api-Key ${this.apiKey}`},queryParams:{version:"1.0.0",lang:this.configLang,draftConfig:this.draftConfig}})),this.cumulativeImpactDataController=new z(this,this.getCumulativeImpactData),this.resizeElements=x(()=>{O(this.impactRowRefs)},50,{maxWait:50,leading:!0})}get configLang(){return L[this.lang]||"en"}connectedCallback(){super.connectedCallback(),window.addEventListener("resize",this.resizeElements)}async updated(e){const t=["chainId","baseUrl","lang"];for(const a of t)if(e.has(a)){await this.cumulativeImpactDataController.exec();break}this.resizeElements()}render(){const{data:e,error:t,loading:a}=this.cumulativeImpactDataController;return a?V():t?this.debug?f({error:t}):"":e==null?this.debug?f({error:new $("Missing data")}):"":u`
1
+ import{t as C,h as b,y as u,g as c,f as y,p as I}from"../chunks/lit-iNN5L_Qk.esm.js";import{d as x}from"../chunks/lodash-P8OIs-at.esm.js";import{c as T,d as S,e as E}from"../chunks/enforce-config-ZAI7WYAd.esm.js";import{u as p,A as z,_ as f,i as d,d as v,a as B}from"../chunks/localize-o-cYvHQf.esm.js";import{D,k,S as L}from"../chunks/routes-sQWfbAoi.esm.js";import{B as $}from"../chunks/beam-errors-P-Lu07Ce.esm.js";import{_ as V}from"../chunks/loading-template-t4fFsYtr.esm.js";import{i as A}from"../chunks/is-all-html-elements-SdSkxirh.esm.js";import"../utils/logger.esm.js";var j=Object.defineProperty,R=Object.getOwnPropertyDescriptor,h=(s,e,t,a)=>{for(var i=a>1?void 0:a?R(e,t):e,o=s.length-1,r;o>=0;o--)(r=s[o])&&(i=(a?r(e,t,i):r(i))||i);return a&&i&&j(e,t,i),i};class m extends b{constructor(){super(...arguments),this.finalValue=0,this.duration=1500,this.counter=0,this.intervalId=0,this.handleCounterAnimateIfInView=e=>{e.some(t=>t.isIntersecting)&&(this.animateCounter(),this.unobserveScrollTarget())},this.animateCounter=()=>{const e=41.666666666666664,t=e/this.duration*this.finalValue;this.intervalId=setInterval(()=>{const a=this.counter+t;if(a>=this.finalValue){this.counter=this.finalValue,clearInterval(this.intervalId);return}else this.counter=a},e)},this.observer=new IntersectionObserver(this.handleCounterAnimateIfInView,{threshold:.1}),this.observeScrollTarget=()=>{const e=this.scrollTargetElement;e&&this.observer.observe(e)},this.unobserveScrollTarget=()=>{const e=this.scrollTargetElement;e&&this.observer.unobserve(e)}}connectedCallback(){super.connectedCallback();const e=window.matchMedia("(prefers-reduced-motion: reduce)").matches;this.duration===0||e?this.counter=this.finalValue:this.observeScrollTarget()}disconnectedCallback(){super.disconnectedCallback(),this.unobserveScrollTarget(),clearInterval(this.intervalId)}get scrollTargetElement(){return this.scrollTarget?document.querySelector(this.scrollTarget):this}render(){return u`${Math.ceil(this.counter).toLocaleString()}`}}h([c({type:Number})],m.prototype,"finalValue",2),h([c({type:Number})],m.prototype,"duration",2),h([c({type:String})],m.prototype,"scrollTarget",2),h([C()],m.prototype,"counter",2),customElements.get("animated-counter")||customElements.define("animated-counter",m);const O=s=>{const e=s instanceof NodeList?Array.from(s):s;if(e.length===0||!A(e))return;const t=e.sort((i,o)=>{const r=getComputedStyle(i).getPropertyValue("width").replace("px",""),g=getComputedStyle(o).getPropertyValue("width").replace("px","");return parseInt(g)-parseInt(r)})[0],a=getComputedStyle(t).getPropertyValue("width");for(const i of e)getComputedStyle(i).getPropertyValue("width")!==a&&(i.style.width=a)},w={en:{cumulativeImpactTitle:()=>"What we've funded",cumulativeImpactDescription:()=>"Here's the impact that our community has made so far in partnership with Beam. Our impact is growing every day\u2014 scroll to check out the goals we're working toward together right now."},fr:{cumulativeImpactTitle:()=>"Ce que nous avons financ\xE9",cumulativeImpactDescription:()=>"Voici l'impact que notre communaut\xE9 a eu jusqu'\xE0 pr\xE9sent en partenariat avec Beam. Notre impact grandit chaque jour : faites d\xE9filer pour d\xE9couvrir les objectifs vers lesquels nous travaillons ensemble en ce moment."},de:{cumulativeImpactTitle:()=>"Was wir finanziert haben",cumulativeImpactDescription:()=>"Hier ist die Wirkung, die unsere Community bisher in Zusammenarbeit mit Beam erzielt hat. Unsere Wirkung w\xE4chst von Tag zu Tag - scrollen Sie, um einen Blick auf die Ziele zu werfen, auf die wir derzeit gemeinsam hinarbeiten."},es:{cumulativeImpactTitle:()=>"Lo que hemos financiado",cumulativeImpactDescription:()=>"Este es el impacto que nuestra comunidad ha tenido hasta ahora en asociaci\xF3n con Beam. Nuestro impacto crece cada d\xEDa; despl\xE1cese para ver los objetivos por los que estamos trabajando juntos en este momento."},it:{cumulativeImpactTitle:()=>"Cosa abbiamo finanziato",cumulativeImpactDescription:()=>"Ecco l'impatto che la nostra comunit\xE0 ha avuto finora in collaborazione con Beam. Il nostro impatto cresce ogni giorno: scorri per scoprire gli obiettivi a cui stiamo lavorando insieme in questo momento."},pl:{cumulativeImpactTitle:()=>"Co sfinansowali\u015Bmy",cumulativeImpactDescription:()=>"Oto wp\u0142yw, jaki nasza spo\u0142eczno\u015B\u0107 wywar\u0142a dotychczas we wsp\xF3\u0142pracy z Beam. Nasz wp\u0142yw ro\u015Bnie z ka\u017Cdym dniem \u2014 przewi\u0144, aby sprawdzi\u0107 cele, nad kt\xF3rymi obecnie wsp\xF3lnie pracujemy."}};var P=Object.defineProperty,q=Object.getOwnPropertyDescriptor,l=(s,e,t,a)=>{for(var i=a>1?void 0:a?q(e,t):e,o=s.length-1,r;o>=0;o--)(r=s[o])&&(i=(a?r(e,t,i):r(i))||i);return a&&i&&P(e,t,i),i};const U=1.5*1e3;class n extends b{constructor(){super(...arguments),this.baseUrl=D,this.lang="en",this.disableAnimation=!1,this.debug=!1,this.draftConfig=!1,this.getCumulativeImpactData=async()=>(E(["apiKey","chainId"],this),await k({baseUrl:this.baseUrl,pathParams:{chainId:this.chainId},headers:{authorization:`Api-Key ${this.apiKey}`},queryParams:{version:"1.0.0",lang:this.configLang,draftConfig:this.draftConfig}})),this.cumulativeImpactDataController=new z(this,this.getCumulativeImpactData),this.resizeElements=x(()=>{O(this.impactRowRefs)},50,{maxWait:50,leading:!0})}get configLang(){return L[this.lang]||"en"}connectedCallback(){super.connectedCallback(),window.addEventListener("resize",this.resizeElements)}async updated(e){const t=["chainId","baseUrl","lang"];for(const a of t)if(e.has(a)){await this.cumulativeImpactDataController.exec();break}this.resizeElements()}render(){const{data:e,error:t,loading:a}=this.cumulativeImpactDataController;return a?V():t?this.debug?f({error:t}):"":e==null?this.debug?f({error:new $("Missing data")}):"":u`
2
2
  <style>
3
3
  :host {
4
4
  ${this.cssVariables.toCSS()}
@@ -1 +1 @@
1
- {"version":3,"file":"cumulative-impact.esm.js","sources":["../../src/shared/components/animated-counter/index.ts","../../src/shared/sync-element-widths.ts","../../src/components/cumulative-impact/strings.ts","../../src/components/cumulative-impact/index.ts"],"sourcesContent":["import { html, LitElement } from \"lit\";\nimport { property } from \"lit/decorators/property.js\";\nimport { state } from \"lit/decorators.js\";\n\nexport class AnimatedCounter extends LitElement {\n @property({ type: Number }) finalValue = 0;\n @property({ type: Number }) duration = 1500;\n @property({ type: String }) scrollTarget?: string;\n\n @state() protected counter = 0;\n private intervalId = 0;\n\n connectedCallback() {\n super.connectedCallback();\n const userPrefersReducedMotion = window.matchMedia(\"(prefers-reduced-motion: reduce)\").matches;\n if (this.duration === 0 || userPrefersReducedMotion) {\n this.counter = this.finalValue;\n } else {\n this.observeScrollTarget();\n }\n }\n\n disconnectedCallback() {\n super.disconnectedCallback();\n this.unobserveScrollTarget();\n clearInterval(this.intervalId);\n }\n\n private handleCounterAnimateIfInView: IntersectionObserverCallback = (entries) => {\n if (entries.some((entry) => entry.isIntersecting)) {\n this.animateCounter();\n this.unobserveScrollTarget();\n }\n };\n\n private animateCounter = () => {\n const ANIMATION_FRAME_RATE = 24;\n const MS_PER_FRAME = 1000 / ANIMATION_FRAME_RATE;\n const INCREMENT_RATE_PER_FRAME = MS_PER_FRAME / this.duration;\n const COUNTER_INCREMENT_PER_FRAME = INCREMENT_RATE_PER_FRAME * this.finalValue;\n\n this.intervalId = setInterval(() => {\n const result = this.counter + COUNTER_INCREMENT_PER_FRAME;\n if (result >= this.finalValue) {\n this.counter = this.finalValue;\n clearInterval(this.intervalId);\n return;\n } else {\n this.counter = result;\n }\n }, MS_PER_FRAME);\n };\n\n private observer = new IntersectionObserver(this.handleCounterAnimateIfInView, {\n threshold: 0.1,\n });\n\n private observeScrollTarget = () => {\n const target = this.scrollTargetElement;\n target && this.observer.observe(target);\n };\n\n private unobserveScrollTarget = () => {\n const target = this.scrollTargetElement;\n target && this.observer.unobserve(target);\n };\n\n get scrollTargetElement(): this | Element | null {\n if (this.scrollTarget) {\n return document.querySelector(this.scrollTarget);\n } else {\n return this;\n }\n }\n\n render() {\n return html`${Math.ceil(this.counter).toLocaleString()}`;\n }\n}\n\ncustomElements.get(\"animated-counter\") || customElements.define(\"animated-counter\", AnimatedCounter);\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"animated-counter\": AnimatedCounter;\n }\n}\n","import { isAllHtmlElements } from \"./is-all-html-elements\";\n\n/**\n * Synchronize widths of elements\n * @param {Array<HTMLElement|null>} elements - Elements to synchronize\n */\nexport const syncElementWidths = (elements: Array<HTMLElement | null> | NodeList) => {\n const els = elements instanceof NodeList ? Array.from(elements) : elements;\n\n if (els.length === 0 || !isAllHtmlElements(els)) {\n return;\n }\n\n const widthSource = els.sort((a, b) => {\n const widthA = getComputedStyle(a).getPropertyValue(\"width\").replace(\"px\", \"\");\n const widthB = getComputedStyle(b).getPropertyValue(\"width\").replace(\"px\", \"\");\n return parseInt(widthB) - parseInt(widthA);\n })[0];\n\n const syncedWidth = getComputedStyle(widthSource).getPropertyValue(\"width\");\n\n for (const el of els) {\n if (getComputedStyle(el).getPropertyValue(\"width\") !== syncedWidth) {\n el.style[\"width\"] = syncedWidth;\n }\n }\n};\n","export const strings = {\n en: {\n cumulativeImpactTitle: () => `What we've funded`,\n cumulativeImpactDescription: () =>\n \"Here's the impact that our community has made so far in partnership with Beam. Our impact is growing every day— scroll to check out the goals we're working toward together right now.\",\n },\n fr: {\n cumulativeImpactTitle: () => `Ce que nous avons financé`,\n cumulativeImpactDescription: () =>\n \"Voici l'impact que notre communauté a eu jusqu'à présent en partenariat avec Beam. Notre impact grandit chaque jour : faites défiler pour découvrir les objectifs vers lesquels nous travaillons ensemble en ce moment.\",\n },\n de: {\n cumulativeImpactTitle: () => `Was wir finanziert haben`,\n cumulativeImpactDescription: () =>\n \"Hier ist die Wirkung, die unsere Community bisher in Zusammenarbeit mit Beam erzielt hat. Unsere Wirkung wächst von Tag zu Tag - scrollen Sie, um einen Blick auf die Ziele zu werfen, auf die wir derzeit gemeinsam hinarbeiten.\",\n },\n es: {\n cumulativeImpactTitle: () => `Lo que hemos financiado`,\n cumulativeImpactDescription: () =>\n \"Este es el impacto que nuestra comunidad ha tenido hasta ahora en asociación con Beam. Nuestro impacto crece cada día; desplácese para ver los objetivos por los que estamos trabajando juntos en este momento.\",\n },\n it: {\n cumulativeImpactTitle: () => `Cosa abbiamo finanziato`,\n cumulativeImpactDescription: () =>\n \"Ecco l'impatto che la nostra comunità ha avuto finora in collaborazione con Beam. Il nostro impatto cresce ogni giorno: scorri per scoprire gli obiettivi a cui stiamo lavorando insieme in questo momento.\",\n },\n pl: {\n cumulativeImpactTitle: () => `Co sfinansowaliśmy`,\n cumulativeImpactDescription: () =>\n \"Oto wpływ, jaki nasza społeczność wywarła dotychczas we współpracy z Beam. Nasz wpływ rośnie z każdym dniem — przewiń, aby sprawdzić cele, nad którymi obecnie wspólnie pracujemy.\",\n },\n};\n","import { css, html, LitElement } from \"lit\";\nimport { property } from \"lit/decorators/property.js\";\nimport { queryAll } from \"lit/decorators/query-all.js\";\nimport debounce from \"lodash-es/debounce\";\nimport \"../../shared/components/animated-counter\";\nimport { cssReset } from \"../../shared/css-reset\";\nimport { defineCustomElement } from \"../../shared/defineCustomElement\";\nimport { _cssVariableMap } from \"../../shared/fragments/css-variable-map\";\nimport { DEFAULT_BASE_URL, SUPPORTED_LANGUAGES } from \"../../api-sdk/constants\";\nimport { TNumericId } from \"../../shared/types\";\nimport { LANGUAGES } from \"../../api-sdk/types\";\nimport { getCumulativeImpact } from \"../../api-sdk/v3/routes\";\nimport { enforceConfig } from \"../../shared/enforce-config\";\nimport { BeamError, MissingConfig } from \"../../utils/beam-errors\";\nimport { AsyncController } from \"../../shared/controllers/async-controller\";\nimport { _errorMessage } from \"../../shared/fragments/error-message-template\";\nimport { _loading } from \"../../shared/fragments/loading-template\";\nimport { syncElementWidths } from \"../../shared/sync-element-widths\";\nimport { localizeUserString } from \"../../shared/localize\";\nimport { defineCustomText, useCustomText } from \"../../shared/fragments/custom-text\";\nimport { strings } from \"./strings\";\n\ntype RequiredConfig = {\n apiKey: string;\n chainId: TNumericId;\n};\n\ntype IAPIV3CumulativeImpact = Awaited<ReturnType<typeof getCumulativeImpact>>;\n\nconst MAX_COUNTER_ANIMATION_DURATION = 1.5 * 1000;\n\nexport class BeamCumulativeImpact extends LitElement {\n static tagName = \"beam-cumulative-impact\";\n\n @property({ type: String }) public apiKey?: RequiredConfig[\"apiKey\"];\n\n @property({ type: Number }) public chainId?: RequiredConfig[\"chainId\"];\n\n @property({ type: String }) public baseUrl = DEFAULT_BASE_URL;\n\n @property({ type: String }) public lang: LANGUAGES = \"en\";\n\n @property({ type: Boolean }) public disableAnimation = false;\n\n @property({ type: Boolean }) public debug = false;\n\n @property({ type: Boolean }) public draftConfig = false;\n\n get configLang() {\n return SUPPORTED_LANGUAGES[this.lang] || \"en\";\n }\n\n private getCumulativeImpactData = async () => {\n if (!enforceConfig<RequiredConfig>([\"apiKey\", \"chainId\"], this)) {\n throw new MissingConfig();\n }\n const res = await getCumulativeImpact({\n baseUrl: this.baseUrl,\n pathParams: {\n chainId: this.chainId,\n },\n headers: {\n authorization: `Api-Key ${this.apiKey}`,\n },\n queryParams: {\n version: \"1.0.0\",\n lang: this.configLang,\n draftConfig: this.draftConfig,\n },\n });\n\n return res;\n };\n\n private cumulativeImpactDataController = new AsyncController<typeof this.getCumulativeImpactData>(\n this,\n this.getCumulativeImpactData\n );\n\n @queryAll(\".impact-row-value-container\")\n impactRowRefs!: HTMLElement[];\n resizeElements = debounce(\n () => {\n syncElementWidths(this.impactRowRefs);\n },\n 50,\n { maxWait: 50, leading: true }\n );\n\n connectedCallback() {\n super.connectedCallback();\n window.addEventListener(\"resize\", this.resizeElements);\n }\n\n async updated(changedProperties: Map<string, unknown>) {\n // Reload nonprofit list on change of any of these props:\n // Also fires on first load as props go from undefined => value\n const requireNewDataProps = [\"chainId\", \"baseUrl\", \"lang\"];\n for (const prop of requireNewDataProps) {\n if (changedProperties.has(prop)) {\n await this.cumulativeImpactDataController.exec();\n break;\n }\n }\n\n this.resizeElements();\n }\n\n render() {\n const { data, error, loading } = this.cumulativeImpactDataController;\n if (loading) {\n return _loading();\n }\n if (error) {\n if (this.debug) {\n return _errorMessage({ error });\n }\n return \"\";\n }\n if (data == null) {\n if (this.debug) {\n return _errorMessage({ error: new BeamError(\"Missing data\") });\n }\n return \"\";\n }\n\n return html`\n <style>\n :host {\n ${this.cssVariables.toCSS()}\n }\n </style>\n <div style=\"display: flex; flex-direction: column;\" class=\"root\">\n <div\n style=\"margin: 10px 0 0 0;\"\n tabindex=\"-1\"\n class=\"options\"\n part=\"options\"\n aria-labelledby=\"beam-RedeemTransaction-title\"\n >\n ${this.renderCumulativeImpact(data)}\n </div>\n </div>\n `;\n }\n\n private renderCumulativeImpact(data: IAPIV3CumulativeImpact) {\n const rawValues = data.impacts ? data.impacts?.map((impact) => impact.value || 0) : [];\n const maxRawValue = Math.max(...rawValues);\n const durations = rawValues.map(\n (val) => (MAX_COUNTER_ANIMATION_DURATION * Math.log(Math.max(val, 1))) / Math.log(maxRawValue)\n );\n return html`\n <div class=\"main\">\n <div class=\"title\" role=\"heading\">\n ${localizeUserString(this.configLang, data?.config?.web?.title || \"\") ||\n strings[this.configLang].cumulativeImpactTitle()}\n </div>\n <p class=\"description\">\n ${localizeUserString(this.configLang, data?.config?.web?.description || \"\") ||\n strings[this.configLang].cumulativeImpactDescription()}\n </p>\n <div class=\"impact-list\">\n ${data.impacts?.map((impact: any, idx: number) => {\n return this.renderCumulativeImpactRow({ impact, animationDuration: durations[idx] });\n })}\n </div>\n </div>\n `;\n }\n\n private renderCumulativeImpactRow({ impact, animationDuration }: { impact: any; animationDuration: number }) {\n const disableAnimation = this.cumulativeImpactDataController.data?.config?.web.disableAnimation;\n const floatingCounterClass = \"impact-row-value-counter impact-row-value-floating-counter\";\n const duration = disableAnimation ? 0 : animationDuration;\n\n const unitDisplay = localizeUserString(this.configLang, impact.unit || \"\");\n const summaryDisplay = localizeUserString(this.configLang, impact.summary || \"\");\n\n /**\n * because we set the width using JavaScript by forcing all impact-row-value-container elements\n * to match the width of the widest sibling, we use a hidden span with the total preloaded to\n * ensure that impact-row-value-container widths do not change as the animation runs.\n */\n return html`\n <div class=\"impact-row\">\n <div class=\"impact-row-value-container\">\n <span class=\"impact-row-value-counter\" style=\"visibility: hidden;\" aria-hidden=\"true\">\n ${impact.value.toLocaleString()}\n </span>\n <animated-counter\n class=\"${floatingCounterClass}\"\n finalValue=${impact.value}\n duration=${duration}\n ></animated-counter>\n </span>\n </div>\n <div class=\"impact-row-description\">${unitDisplay} ${summaryDisplay}</div>\n </div>\n `;\n }\n\n public get cssVariables() {\n const defaults: Record<string, string> = {\n \"--beam-fontFamily\": \"inherit\",\n \"--beam-fontStyle\": \"inherit\",\n \"--beam-fontSize\": \"16px\",\n \"--beam-lineHeight\": \"1\",\n \"--beam-textColor\": \"inherit\",\n // main\n ...defineCustomText(\"--beam-CumulativeImpact-title\", {\n fontSize: \"32px\",\n }),\n ...defineCustomText(\"--beam-CumulativeImpact-description\", {\n marginTop: \"16px\",\n lineHeight: \"1.3\",\n }),\n \"--beam-CumulativeImpact-impact-list-marginTop\": \"24px\",\n \"--beam-CumulativeImpact-row-marginTop\": \"24px\",\n // row value container\n \"--beam-CumulativeImpact-row-value-container-borderBottomWidth\": \"4px\",\n \"--beam-CumulativeImpact-row-value-container-borderBottomColor\": \"currentColor\",\n \"--beam-CumulativeImpact-row-value-container-paddingTop\": \"0\",\n \"--beam-CumulativeImpact-row-value-container-paddingRight\": \"20px\",\n \"--beam-CumulativeImpact-row-value-container-paddingBottom\": \"4px\",\n \"--beam-CumulativeImpact-row-value-container-paddingLeft\": \"20px\",\n // row value counter\n ...defineCustomText(\"--beam-CumulativeImpact-row-value-counter\", {\n color: \"currentColor\",\n fontSize: \"24px\",\n fontWeight: \"normal\",\n }),\n // row description\n ...defineCustomText(\"--beam-CumulativeImpact-row-description\", {\n color: \"currentColor\",\n fontSize: \"16px\",\n fontWeight: \"normal\",\n lineHeight: \"1.3\",\n }),\n \"--beam-CumulativeImpact-row-description-paddingLeft\": \"24px\",\n \"--beam-CumulativeImpact-row-description-paddingRight\": \"24px\",\n \"--beam-CumulativeImpact-row-description-mobile-marginTop\": \"12px\",\n };\n\n const remoteConfig = this.cumulativeImpactDataController.data?.config?.web?.theme || {};\n\n const config = { ...defaults, ...remoteConfig };\n\n const serializable = Object.create({\n toCSS() {\n return _cssVariableMap(this as Record<string, string>);\n },\n });\n\n return Object.assign(serializable, config);\n }\n\n static styles = [\n cssReset,\n css`\n :host {\n display: block;\n font-family: var(--beam-fontFamily, inherit);\n font-style: var(--beam-fontStyle, inherit);\n font-size: var(--beam-fontSize, inherit);\n color: var(--beam-textColor, inherit);\n background-color: var(--beam-backgroundColor, inherit);\n line-height: var(--beam-lineHeight, 1);\n word-break: normal;\n }\n .main {\n text-align: left;\n }\n .title {\n ${useCustomText(\"--beam-CumulativeImpact-title\")}\n text-align: inherit;\n }\n .description {\n ${useCustomText(\"--beam-CumulativeImpact-description\")}\n text-align: inherit;\n }\n .impact-list {\n display: flex;\n flex-direction: column;\n margin-top: var(--beam-CumulativeImpact-impact-list-marginTop);\n }\n .impact-row {\n display: flex;\n align-items: center;\n margin-top: var(--beam-CumulativeImpact-row-marginTop);\n }\n .impact-row-value-container {\n position: relative;\n border-bottom-width: var(--beam-CumulativeImpact-row-value-container-borderBottomWidth);\n border-bottom-color: var(--beam-CumulativeImpact-row-value-container-borderBottomColor);\n border-bottom-style: solid;\n padding-top: var(--beam-CumulativeImpact-row-value-container-paddingTop);\n padding-right: var(--beam-CumulativeImpact-row-value-container-paddingRight);\n padding-bottom: var(--beam-CumulativeImpact-row-value-container-paddingBottom);\n padding-left: var(--beam-CumulativeImpact-row-value-container-paddingLeft);\n text-align: center;\n flex-shrink: 0;\n }\n .impact-row-value-counter {\n ${useCustomText(\"--beam-CumulativeImpact-row-value-counter\")}\n }\n .impact-row-value-floating-counter {\n position: absolute;\n left: 0;\n right: 0;\n top: 0;\n bottom: 0;\n }\n .impact-row-description {\n ${useCustomText(\"--beam-CumulativeImpact-row-description\")}\n padding-left: var(--beam-CumulativeImpact-row-description-paddingLeft);\n padding-right: var(--beam-CumulativeImpact-row-description-paddingRight);\n /* match padding of value of counter for proper centering */\n padding-bottom: var(--beam-CumulativeImpact-row-value-paddingBottom);\n text-align: inherit;\n flex-grow: 1;\n }\n @media (max-width: 500px) {\n .main {\n text-align: center;\n }\n .impact-row {\n flex-direction: column;\n }\n .impact-row-description {\n margin-top: var(--beam-CumulativeImpact-row-description-mobile-marginTop);\n padding-bottom: 0;\n }\n }\n `,\n ];\n}\n\ndefineCustomElement(BeamCumulativeImpact);\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"beam-cumulative-impact\": BeamCumulativeImpact;\n }\n}\n"],"names":["AnimatedCounter","LitElement","entries","entry","MS_PER_FRAME","COUNTER_INCREMENT_PER_FRAME","result","target","userPrefersReducedMotion","html","__decorateClass","property","state","syncElementWidths","elements","els","isAllHtmlElements","widthSource","a","b","widthA","widthB","syncedWidth","el","strings","f","h","r","m","i","e","MAX_COUNTER_ANIMATION_DURATION","BeamCumulativeImpact","DEFAULT_BASE_URL","enforceConfig","getCumulativeImpact","AsyncController","debounce","SUPPORTED_LANGUAGES","changedProperties","requireNewDataProps","prop","data","error","loading","_loading","_errorMessage","BeamError","rawValues","impact","maxRawValue","durations","val","localizeUserString","idx","animationDuration","disableAnimation","floatingCounterClass","duration","unitDisplay","summaryDisplay","defaults","defineCustomText","remoteConfig","config","_cssVariableMap","cssReset","css","useCustomText","queryAll","defineCustomElement"],"mappings":"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"}
1
+ {"version":3,"file":"cumulative-impact.esm.js","sources":["../../src/shared/components/animated-counter/index.ts","../../src/shared/sync-element-widths.ts","../../src/components/cumulative-impact/strings.ts","../../src/components/cumulative-impact/index.ts"],"sourcesContent":["import { html, LitElement } from \"lit\";\nimport { property } from \"lit/decorators/property.js\";\nimport { state } from \"lit/decorators.js\";\n\nexport class AnimatedCounter extends LitElement {\n @property({ type: Number }) finalValue = 0;\n @property({ type: Number }) duration = 1500;\n @property({ type: String }) scrollTarget?: string;\n\n @state() protected counter = 0;\n private intervalId = 0;\n\n connectedCallback() {\n super.connectedCallback();\n const userPrefersReducedMotion = window.matchMedia(\"(prefers-reduced-motion: reduce)\").matches;\n if (this.duration === 0 || userPrefersReducedMotion) {\n this.counter = this.finalValue;\n } else {\n this.observeScrollTarget();\n }\n }\n\n disconnectedCallback() {\n super.disconnectedCallback();\n this.unobserveScrollTarget();\n clearInterval(this.intervalId);\n }\n\n private handleCounterAnimateIfInView: IntersectionObserverCallback = (entries) => {\n if (entries.some((entry) => entry.isIntersecting)) {\n this.animateCounter();\n this.unobserveScrollTarget();\n }\n };\n\n private animateCounter = () => {\n const ANIMATION_FRAME_RATE = 24;\n const MS_PER_FRAME = 1000 / ANIMATION_FRAME_RATE;\n const INCREMENT_RATE_PER_FRAME = MS_PER_FRAME / this.duration;\n const COUNTER_INCREMENT_PER_FRAME = INCREMENT_RATE_PER_FRAME * this.finalValue;\n\n this.intervalId = setInterval(() => {\n const result = this.counter + COUNTER_INCREMENT_PER_FRAME;\n if (result >= this.finalValue) {\n this.counter = this.finalValue;\n clearInterval(this.intervalId);\n return;\n } else {\n this.counter = result;\n }\n }, MS_PER_FRAME);\n };\n\n private observer = new IntersectionObserver(this.handleCounterAnimateIfInView, {\n threshold: 0.1,\n });\n\n private observeScrollTarget = () => {\n const target = this.scrollTargetElement;\n target && this.observer.observe(target);\n };\n\n private unobserveScrollTarget = () => {\n const target = this.scrollTargetElement;\n target && this.observer.unobserve(target);\n };\n\n get scrollTargetElement(): this | Element | null {\n if (this.scrollTarget) {\n return document.querySelector(this.scrollTarget);\n } else {\n return this;\n }\n }\n\n render() {\n return html`${Math.ceil(this.counter).toLocaleString()}`;\n }\n}\n\ncustomElements.get(\"animated-counter\") || customElements.define(\"animated-counter\", AnimatedCounter);\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"animated-counter\": AnimatedCounter;\n }\n}\n","import { isAllHtmlElements } from \"./is-all-html-elements\";\n\n/**\n * Synchronize widths of elements\n * @param {Array<HTMLElement|null>} elements - Elements to synchronize\n */\nexport const syncElementWidths = (elements: Array<HTMLElement | null> | NodeList) => {\n const els = elements instanceof NodeList ? Array.from(elements) : elements;\n\n if (els.length === 0 || !isAllHtmlElements(els)) {\n return;\n }\n\n const widthSource = els.sort((a, b) => {\n const widthA = getComputedStyle(a).getPropertyValue(\"width\").replace(\"px\", \"\");\n const widthB = getComputedStyle(b).getPropertyValue(\"width\").replace(\"px\", \"\");\n return parseInt(widthB) - parseInt(widthA);\n })[0];\n\n const syncedWidth = getComputedStyle(widthSource).getPropertyValue(\"width\");\n\n for (const el of els) {\n if (getComputedStyle(el).getPropertyValue(\"width\") !== syncedWidth) {\n el.style[\"width\"] = syncedWidth;\n }\n }\n};\n","export const strings = {\n en: {\n cumulativeImpactTitle: () => `What we've funded`,\n cumulativeImpactDescription: () =>\n \"Here's the impact that our community has made so far in partnership with Beam. Our impact is growing every day— scroll to check out the goals we're working toward together right now.\",\n },\n fr: {\n cumulativeImpactTitle: () => `Ce que nous avons financé`,\n cumulativeImpactDescription: () =>\n \"Voici l'impact que notre communauté a eu jusqu'à présent en partenariat avec Beam. Notre impact grandit chaque jour : faites défiler pour découvrir les objectifs vers lesquels nous travaillons ensemble en ce moment.\",\n },\n de: {\n cumulativeImpactTitle: () => `Was wir finanziert haben`,\n cumulativeImpactDescription: () =>\n \"Hier ist die Wirkung, die unsere Community bisher in Zusammenarbeit mit Beam erzielt hat. Unsere Wirkung wächst von Tag zu Tag - scrollen Sie, um einen Blick auf die Ziele zu werfen, auf die wir derzeit gemeinsam hinarbeiten.\",\n },\n es: {\n cumulativeImpactTitle: () => `Lo que hemos financiado`,\n cumulativeImpactDescription: () =>\n \"Este es el impacto que nuestra comunidad ha tenido hasta ahora en asociación con Beam. Nuestro impacto crece cada día; desplácese para ver los objetivos por los que estamos trabajando juntos en este momento.\",\n },\n it: {\n cumulativeImpactTitle: () => `Cosa abbiamo finanziato`,\n cumulativeImpactDescription: () =>\n \"Ecco l'impatto che la nostra comunità ha avuto finora in collaborazione con Beam. Il nostro impatto cresce ogni giorno: scorri per scoprire gli obiettivi a cui stiamo lavorando insieme in questo momento.\",\n },\n pl: {\n cumulativeImpactTitle: () => `Co sfinansowaliśmy`,\n cumulativeImpactDescription: () =>\n \"Oto wpływ, jaki nasza społeczność wywarła dotychczas we współpracy z Beam. Nasz wpływ rośnie z każdym dniem — przewiń, aby sprawdzić cele, nad którymi obecnie wspólnie pracujemy.\",\n },\n};\n","import { css, html, LitElement } from \"lit\";\nimport { property } from \"lit/decorators/property.js\";\nimport { queryAll } from \"lit/decorators/query-all.js\";\nimport debounce from \"lodash-es/debounce\";\nimport \"../../shared/components/animated-counter\";\nimport { cssReset } from \"../../shared/css-reset\";\nimport { defineCustomElement } from \"../../shared/defineCustomElement\";\nimport { _cssVariableMap } from \"../../shared/fragments/css-variable-map\";\nimport { DEFAULT_BASE_URL, SUPPORTED_LANGUAGES } from \"../../api-sdk/constants\";\nimport { TNumericId } from \"../../shared/types\";\nimport { LANGUAGES } from \"../../api-sdk/types\";\nimport { getCumulativeImpact } from \"../../api-sdk/v3/routes\";\nimport { enforceConfig } from \"../../shared/enforce-config\";\nimport { BeamError, MissingConfig } from \"../../utils/beam-errors\";\nimport { AsyncController } from \"../../shared/controllers/async-controller\";\nimport { _errorMessage } from \"../../shared/fragments/error-message-template\";\nimport { _loading } from \"../../shared/fragments/loading-template\";\nimport { syncElementWidths } from \"../../shared/sync-element-widths\";\nimport { localizeUserString } from \"../../shared/localize\";\nimport { defineCustomText, useCustomText } from \"../../shared/fragments/custom-text\";\nimport { strings } from \"./strings\";\n\ntype RequiredConfig = {\n apiKey: string;\n chainId: TNumericId;\n};\n\ntype IAPIV3CumulativeImpact = Awaited<ReturnType<typeof getCumulativeImpact>>;\n\nconst MAX_COUNTER_ANIMATION_DURATION = 1.5 * 1000;\n\nexport class BeamCumulativeImpact extends LitElement {\n static tagName = \"beam-cumulative-impact\";\n\n @property({ type: String }) public apiKey?: RequiredConfig[\"apiKey\"];\n\n @property({ type: Number }) public chainId?: RequiredConfig[\"chainId\"];\n\n @property({ type: String }) public baseUrl = DEFAULT_BASE_URL;\n\n @property({ type: String }) public lang: LANGUAGES = \"en\";\n\n @property({ type: Boolean }) public disableAnimation = false;\n\n @property({ type: Boolean }) public debug = false;\n\n @property({ type: Boolean }) public draftConfig = false;\n\n get configLang() {\n return SUPPORTED_LANGUAGES[this.lang] || \"en\";\n }\n\n private getCumulativeImpactData = async () => {\n if (!enforceConfig<RequiredConfig>([\"apiKey\", \"chainId\"], this)) {\n throw new MissingConfig();\n }\n const res = await getCumulativeImpact({\n baseUrl: this.baseUrl,\n pathParams: {\n chainId: this.chainId,\n },\n headers: {\n authorization: `Api-Key ${this.apiKey}`,\n },\n queryParams: {\n version: \"1.0.0\",\n lang: this.configLang,\n draftConfig: this.draftConfig,\n },\n });\n\n return res;\n };\n\n private cumulativeImpactDataController = new AsyncController<typeof this.getCumulativeImpactData>(\n this,\n this.getCumulativeImpactData\n );\n\n @queryAll(\".impact-row-value-container\")\n impactRowRefs!: HTMLElement[];\n resizeElements = debounce(\n () => {\n syncElementWidths(this.impactRowRefs);\n },\n 50,\n { maxWait: 50, leading: true }\n );\n\n connectedCallback() {\n super.connectedCallback();\n window.addEventListener(\"resize\", this.resizeElements);\n }\n\n async updated(changedProperties: Map<string, unknown>) {\n // Reload nonprofit list on change of any of these props:\n // Also fires on first load as props go from undefined => value\n const requireNewDataProps = [\"chainId\", \"baseUrl\", \"lang\"];\n for (const prop of requireNewDataProps) {\n if (changedProperties.has(prop)) {\n await this.cumulativeImpactDataController.exec();\n break;\n }\n }\n\n this.resizeElements();\n }\n\n render() {\n const { data, error, loading } = this.cumulativeImpactDataController;\n if (loading) {\n return _loading();\n }\n if (error) {\n if (this.debug) {\n return _errorMessage({ error });\n }\n return \"\";\n }\n if (data == null) {\n if (this.debug) {\n return _errorMessage({ error: new BeamError(\"Missing data\") });\n }\n return \"\";\n }\n\n return html`\n <style>\n :host {\n ${this.cssVariables.toCSS()}\n }\n </style>\n <div style=\"display: flex; flex-direction: column;\" class=\"root\">\n <div\n style=\"margin: 10px 0 0 0;\"\n tabindex=\"-1\"\n class=\"options\"\n part=\"options\"\n aria-labelledby=\"beam-RedeemTransaction-title\"\n >\n ${this.renderCumulativeImpact(data)}\n </div>\n </div>\n `;\n }\n\n private renderCumulativeImpact(data: IAPIV3CumulativeImpact) {\n const rawValues = data.impacts ? data.impacts?.map((impact) => impact.value || 0) : [];\n const maxRawValue = Math.max(...rawValues);\n const durations = rawValues.map(\n (val) => (MAX_COUNTER_ANIMATION_DURATION * Math.log(Math.max(val, 1))) / Math.log(maxRawValue)\n );\n return html`\n <div class=\"main\">\n <div class=\"title\" role=\"heading\">\n ${localizeUserString(this.configLang, data?.config?.web?.title || \"\") ||\n strings[this.configLang].cumulativeImpactTitle()}\n </div>\n <p class=\"description\">\n ${localizeUserString(this.configLang, data?.config?.web?.description || \"\") ||\n strings[this.configLang].cumulativeImpactDescription()}\n </p>\n <div class=\"impact-list\">\n ${data.impacts?.map((impact: any, idx: number) => {\n return this.renderCumulativeImpactRow({ impact, animationDuration: durations[idx] });\n })}\n </div>\n </div>\n `;\n }\n\n private renderCumulativeImpactRow({ impact, animationDuration }: { impact: any; animationDuration: number }) {\n const disableAnimation = this.cumulativeImpactDataController.data?.config?.web.disableAnimation;\n const floatingCounterClass = \"impact-row-value-counter impact-row-value-floating-counter\";\n const duration = disableAnimation ? 0 : animationDuration;\n\n const unitDisplay = localizeUserString(this.configLang, impact.unit || \"\");\n const summaryDisplay = localizeUserString(this.configLang, impact.summary || \"\");\n\n /**\n * because we set the width using JavaScript by forcing all impact-row-value-container elements\n * to match the width of the widest sibling, we use a hidden span with the total preloaded to\n * ensure that impact-row-value-container widths do not change as the animation runs.\n */\n return html`\n <div class=\"impact-row\">\n <div class=\"impact-row-value-container\">\n <span class=\"impact-row-value-counter\" style=\"visibility: hidden;\" aria-hidden=\"true\">\n ${impact.value.toLocaleString()}\n </span>\n <animated-counter\n class=\"${floatingCounterClass}\"\n finalValue=${impact.value}\n duration=${duration}\n ></animated-counter>\n </span>\n </div>\n <div class=\"impact-row-description\">${unitDisplay} ${summaryDisplay}</div>\n </div>\n `;\n }\n\n public get cssVariables() {\n const defaults: Record<string, string> = {\n \"--beam-fontFamily\": \"inherit\",\n \"--beam-fontStyle\": \"inherit\",\n \"--beam-fontSize\": \"16px\",\n \"--beam-lineHeight\": \"1\",\n \"--beam-textColor\": \"inherit\",\n // main\n ...defineCustomText(\"--beam-CumulativeImpact-title\", {\n fontSize: \"32px\",\n }),\n ...defineCustomText(\"--beam-CumulativeImpact-description\", {\n marginTop: \"16px\",\n lineHeight: \"1.3\",\n }),\n \"--beam-CumulativeImpact-impact-list-marginTop\": \"24px\",\n \"--beam-CumulativeImpact-row-marginTop\": \"24px\",\n // row value container\n \"--beam-CumulativeImpact-row-value-container-borderBottomWidth\": \"4px\",\n \"--beam-CumulativeImpact-row-value-container-borderBottomColor\": \"currentColor\",\n \"--beam-CumulativeImpact-row-value-container-paddingTop\": \"0\",\n \"--beam-CumulativeImpact-row-value-container-paddingRight\": \"20px\",\n \"--beam-CumulativeImpact-row-value-container-paddingBottom\": \"4px\",\n \"--beam-CumulativeImpact-row-value-container-paddingLeft\": \"20px\",\n // row value counter\n ...defineCustomText(\"--beam-CumulativeImpact-row-value-counter\", {\n color: \"currentColor\",\n fontSize: \"24px\",\n fontWeight: \"normal\",\n }),\n // row description\n ...defineCustomText(\"--beam-CumulativeImpact-row-description\", {\n color: \"currentColor\",\n fontSize: \"16px\",\n fontWeight: \"normal\",\n lineHeight: \"1.3\",\n }),\n \"--beam-CumulativeImpact-row-description-paddingLeft\": \"24px\",\n \"--beam-CumulativeImpact-row-description-paddingRight\": \"24px\",\n \"--beam-CumulativeImpact-row-description-mobile-marginTop\": \"12px\",\n };\n\n const remoteConfig = this.cumulativeImpactDataController.data?.config?.web?.theme || {};\n\n const config = { ...defaults, ...remoteConfig };\n\n const serializable = Object.create({\n toCSS() {\n return _cssVariableMap(this as Record<string, string>);\n },\n });\n\n return Object.assign(serializable, config);\n }\n\n static styles = [\n cssReset,\n css`\n :host {\n display: block;\n font-family: var(--beam-fontFamily, inherit);\n font-style: var(--beam-fontStyle, inherit);\n font-size: var(--beam-fontSize, inherit);\n color: var(--beam-textColor, inherit);\n background-color: var(--beam-backgroundColor, inherit);\n line-height: var(--beam-lineHeight, 1);\n word-break: normal;\n }\n .main {\n text-align: left;\n }\n .title {\n ${useCustomText(\"--beam-CumulativeImpact-title\")}\n text-align: inherit;\n }\n .description {\n ${useCustomText(\"--beam-CumulativeImpact-description\")}\n text-align: inherit;\n }\n .impact-list {\n display: flex;\n flex-direction: column;\n margin-top: var(--beam-CumulativeImpact-impact-list-marginTop);\n }\n .impact-row {\n display: flex;\n align-items: center;\n margin-top: var(--beam-CumulativeImpact-row-marginTop);\n }\n .impact-row-value-container {\n position: relative;\n border-bottom-width: var(--beam-CumulativeImpact-row-value-container-borderBottomWidth);\n border-bottom-color: var(--beam-CumulativeImpact-row-value-container-borderBottomColor);\n border-bottom-style: solid;\n padding-top: var(--beam-CumulativeImpact-row-value-container-paddingTop);\n padding-right: var(--beam-CumulativeImpact-row-value-container-paddingRight);\n padding-bottom: var(--beam-CumulativeImpact-row-value-container-paddingBottom);\n padding-left: var(--beam-CumulativeImpact-row-value-container-paddingLeft);\n text-align: center;\n flex-shrink: 0;\n }\n .impact-row-value-counter {\n ${useCustomText(\"--beam-CumulativeImpact-row-value-counter\")}\n }\n .impact-row-value-floating-counter {\n position: absolute;\n left: 0;\n right: 0;\n top: 0;\n bottom: 0;\n }\n .impact-row-description {\n ${useCustomText(\"--beam-CumulativeImpact-row-description\")}\n padding-left: var(--beam-CumulativeImpact-row-description-paddingLeft);\n padding-right: var(--beam-CumulativeImpact-row-description-paddingRight);\n /* match padding of value of counter for proper centering */\n padding-bottom: var(--beam-CumulativeImpact-row-value-paddingBottom);\n text-align: inherit;\n flex-grow: 1;\n }\n @media (max-width: 500px) {\n .main {\n text-align: center;\n }\n .impact-row {\n flex-direction: column;\n }\n .impact-row-description {\n margin-top: var(--beam-CumulativeImpact-row-description-mobile-marginTop);\n padding-bottom: 0;\n }\n }\n `,\n ];\n}\n\ndefineCustomElement(BeamCumulativeImpact);\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"beam-cumulative-impact\": BeamCumulativeImpact;\n }\n}\n"],"names":["AnimatedCounter","LitElement","entries","entry","MS_PER_FRAME","COUNTER_INCREMENT_PER_FRAME","result","target","userPrefersReducedMotion","html","__decorateClass","property","state","syncElementWidths","elements","els","isAllHtmlElements","widthSource","a","b","widthA","widthB","syncedWidth","el","strings","f","h","r","m","i","e","MAX_COUNTER_ANIMATION_DURATION","BeamCumulativeImpact","DEFAULT_BASE_URL","enforceConfig","getCumulativeImpact","AsyncController","debounce","SUPPORTED_LANGUAGES","changedProperties","requireNewDataProps","prop","data","error","loading","_loading","_errorMessage","BeamError","rawValues","impact","maxRawValue","durations","val","localizeUserString","idx","animationDuration","disableAnimation","floatingCounterClass","duration","unitDisplay","summaryDisplay","defaults","defineCustomText","remoteConfig","config","_cssVariableMap","cssReset","css","useCustomText","queryAll","defineCustomElement"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import{t as C,h as b,y as u,g as c,f as y,p as I}from"../chunks/lit-iNN5L_Qk.esm.js";import{d as x}from"../chunks/lodash-P8OIs-at.esm.js";import{c as T,d as S,e as E}from"../chunks/enforce-config-ZyPq_4CF.esm.js";import{u as p,A as z,_ as f,i as d,d as v,a as B}from"../chunks/localize-m-_ESmpk.esm.js";import{D,l as k,S as L}from"../chunks/routes-FBB1GA4-.esm.js";import{B as $}from"../chunks/beam-errors-P-Lu07Ce.esm.js";import{_ as V}from"../chunks/loading-template-t4fFsYtr.esm.js";import{i as A}from"../chunks/is-all-html-elements-SdSkxirh.esm.js";import"../utils/logger.js";var j=Object.defineProperty,R=Object.getOwnPropertyDescriptor,h=(s,e,t,a)=>{for(var i=a>1?void 0:a?R(e,t):e,o=s.length-1,r;o>=0;o--)(r=s[o])&&(i=(a?r(e,t,i):r(i))||i);return a&&i&&j(e,t,i),i};class m extends b{constructor(){super(...arguments),this.finalValue=0,this.duration=1500,this.counter=0,this.intervalId=0,this.handleCounterAnimateIfInView=e=>{e.some(t=>t.isIntersecting)&&(this.animateCounter(),this.unobserveScrollTarget())},this.animateCounter=()=>{const e=41.666666666666664,t=e/this.duration*this.finalValue;this.intervalId=setInterval(()=>{const a=this.counter+t;if(a>=this.finalValue){this.counter=this.finalValue,clearInterval(this.intervalId);return}else this.counter=a},e)},this.observer=new IntersectionObserver(this.handleCounterAnimateIfInView,{threshold:.1}),this.observeScrollTarget=()=>{const e=this.scrollTargetElement;e&&this.observer.observe(e)},this.unobserveScrollTarget=()=>{const e=this.scrollTargetElement;e&&this.observer.unobserve(e)}}connectedCallback(){super.connectedCallback();const e=window.matchMedia("(prefers-reduced-motion: reduce)").matches;this.duration===0||e?this.counter=this.finalValue:this.observeScrollTarget()}disconnectedCallback(){super.disconnectedCallback(),this.unobserveScrollTarget(),clearInterval(this.intervalId)}get scrollTargetElement(){return this.scrollTarget?document.querySelector(this.scrollTarget):this}render(){return u`${Math.ceil(this.counter).toLocaleString()}`}}h([c({type:Number})],m.prototype,"finalValue",2),h([c({type:Number})],m.prototype,"duration",2),h([c({type:String})],m.prototype,"scrollTarget",2),h([C()],m.prototype,"counter",2),customElements.get("animated-counter")||customElements.define("animated-counter",m);const O=s=>{const e=s instanceof NodeList?Array.from(s):s;if(e.length===0||!A(e))return;const t=e.sort((i,o)=>{const r=getComputedStyle(i).getPropertyValue("width").replace("px",""),g=getComputedStyle(o).getPropertyValue("width").replace("px","");return parseInt(g)-parseInt(r)})[0],a=getComputedStyle(t).getPropertyValue("width");for(const i of e)getComputedStyle(i).getPropertyValue("width")!==a&&(i.style.width=a)},w={en:{cumulativeImpactTitle:()=>"What we've funded",cumulativeImpactDescription:()=>"Here's the impact that our community has made so far in partnership with Beam. Our impact is growing every day\u2014 scroll to check out the goals we're working toward together right now."},fr:{cumulativeImpactTitle:()=>"Ce que nous avons financ\xE9",cumulativeImpactDescription:()=>"Voici l'impact que notre communaut\xE9 a eu jusqu'\xE0 pr\xE9sent en partenariat avec Beam. Notre impact grandit chaque jour : faites d\xE9filer pour d\xE9couvrir les objectifs vers lesquels nous travaillons ensemble en ce moment."},de:{cumulativeImpactTitle:()=>"Was wir finanziert haben",cumulativeImpactDescription:()=>"Hier ist die Wirkung, die unsere Community bisher in Zusammenarbeit mit Beam erzielt hat. Unsere Wirkung w\xE4chst von Tag zu Tag - scrollen Sie, um einen Blick auf die Ziele zu werfen, auf die wir derzeit gemeinsam hinarbeiten."},es:{cumulativeImpactTitle:()=>"Lo que hemos financiado",cumulativeImpactDescription:()=>"Este es el impacto que nuestra comunidad ha tenido hasta ahora en asociaci\xF3n con Beam. Nuestro impacto crece cada d\xEDa; despl\xE1cese para ver los objetivos por los que estamos trabajando juntos en este momento."},it:{cumulativeImpactTitle:()=>"Cosa abbiamo finanziato",cumulativeImpactDescription:()=>"Ecco l'impatto che la nostra comunit\xE0 ha avuto finora in collaborazione con Beam. Il nostro impatto cresce ogni giorno: scorri per scoprire gli obiettivi a cui stiamo lavorando insieme in questo momento."},pl:{cumulativeImpactTitle:()=>"Co sfinansowali\u015Bmy",cumulativeImpactDescription:()=>"Oto wp\u0142yw, jaki nasza spo\u0142eczno\u015B\u0107 wywar\u0142a dotychczas we wsp\xF3\u0142pracy z Beam. Nasz wp\u0142yw ro\u015Bnie z ka\u017Cdym dniem \u2014 przewi\u0144, aby sprawdzi\u0107 cele, nad kt\xF3rymi obecnie wsp\xF3lnie pracujemy."}};var P=Object.defineProperty,q=Object.getOwnPropertyDescriptor,l=(s,e,t,a)=>{for(var i=a>1?void 0:a?q(e,t):e,o=s.length-1,r;o>=0;o--)(r=s[o])&&(i=(a?r(e,t,i):r(i))||i);return a&&i&&P(e,t,i),i};const U=1.5*1e3;class n extends b{constructor(){super(...arguments),this.baseUrl=D,this.lang="en",this.disableAnimation=!1,this.debug=!1,this.draftConfig=!1,this.getCumulativeImpactData=async()=>(E(["apiKey","chainId"],this),await k({baseUrl:this.baseUrl,pathParams:{chainId:this.chainId},headers:{authorization:`Api-Key ${this.apiKey}`},queryParams:{version:"1.0.0",lang:this.configLang,draftConfig:this.draftConfig}})),this.cumulativeImpactDataController=new z(this,this.getCumulativeImpactData),this.resizeElements=x(()=>{O(this.impactRowRefs)},50,{maxWait:50,leading:!0})}get configLang(){return L[this.lang]||"en"}connectedCallback(){super.connectedCallback(),window.addEventListener("resize",this.resizeElements)}async updated(e){const t=["chainId","baseUrl","lang"];for(const a of t)if(e.has(a)){await this.cumulativeImpactDataController.exec();break}this.resizeElements()}render(){const{data:e,error:t,loading:a}=this.cumulativeImpactDataController;return a?V():t?this.debug?f({error:t}):"":e==null?this.debug?f({error:new $("Missing data")}):"":u`
1
+ import{t as C,h as b,y as u,g as c,f as y,p as I}from"../chunks/lit-iNN5L_Qk.esm.js";import{d as x}from"../chunks/lodash-P8OIs-at.esm.js";import{c as T,d as S,e as E}from"../chunks/enforce-config-ZyPq_4CF.esm.js";import{u as p,A as z,_ as f,i as d,d as v,a as B}from"../chunks/localize-m-_ESmpk.esm.js";import{D,k,S as L}from"../chunks/routes-F1ZIumMP.esm.js";import{B as $}from"../chunks/beam-errors-P-Lu07Ce.esm.js";import{_ as V}from"../chunks/loading-template-t4fFsYtr.esm.js";import{i as A}from"../chunks/is-all-html-elements-SdSkxirh.esm.js";import"../utils/logger.js";var j=Object.defineProperty,R=Object.getOwnPropertyDescriptor,h=(s,e,t,a)=>{for(var i=a>1?void 0:a?R(e,t):e,o=s.length-1,r;o>=0;o--)(r=s[o])&&(i=(a?r(e,t,i):r(i))||i);return a&&i&&j(e,t,i),i};class m extends b{constructor(){super(...arguments),this.finalValue=0,this.duration=1500,this.counter=0,this.intervalId=0,this.handleCounterAnimateIfInView=e=>{e.some(t=>t.isIntersecting)&&(this.animateCounter(),this.unobserveScrollTarget())},this.animateCounter=()=>{const e=41.666666666666664,t=e/this.duration*this.finalValue;this.intervalId=setInterval(()=>{const a=this.counter+t;if(a>=this.finalValue){this.counter=this.finalValue,clearInterval(this.intervalId);return}else this.counter=a},e)},this.observer=new IntersectionObserver(this.handleCounterAnimateIfInView,{threshold:.1}),this.observeScrollTarget=()=>{const e=this.scrollTargetElement;e&&this.observer.observe(e)},this.unobserveScrollTarget=()=>{const e=this.scrollTargetElement;e&&this.observer.unobserve(e)}}connectedCallback(){super.connectedCallback();const e=window.matchMedia("(prefers-reduced-motion: reduce)").matches;this.duration===0||e?this.counter=this.finalValue:this.observeScrollTarget()}disconnectedCallback(){super.disconnectedCallback(),this.unobserveScrollTarget(),clearInterval(this.intervalId)}get scrollTargetElement(){return this.scrollTarget?document.querySelector(this.scrollTarget):this}render(){return u`${Math.ceil(this.counter).toLocaleString()}`}}h([c({type:Number})],m.prototype,"finalValue",2),h([c({type:Number})],m.prototype,"duration",2),h([c({type:String})],m.prototype,"scrollTarget",2),h([C()],m.prototype,"counter",2),customElements.get("animated-counter")||customElements.define("animated-counter",m);const O=s=>{const e=s instanceof NodeList?Array.from(s):s;if(e.length===0||!A(e))return;const t=e.sort((i,o)=>{const r=getComputedStyle(i).getPropertyValue("width").replace("px",""),g=getComputedStyle(o).getPropertyValue("width").replace("px","");return parseInt(g)-parseInt(r)})[0],a=getComputedStyle(t).getPropertyValue("width");for(const i of e)getComputedStyle(i).getPropertyValue("width")!==a&&(i.style.width=a)},w={en:{cumulativeImpactTitle:()=>"What we've funded",cumulativeImpactDescription:()=>"Here's the impact that our community has made so far in partnership with Beam. Our impact is growing every day\u2014 scroll to check out the goals we're working toward together right now."},fr:{cumulativeImpactTitle:()=>"Ce que nous avons financ\xE9",cumulativeImpactDescription:()=>"Voici l'impact que notre communaut\xE9 a eu jusqu'\xE0 pr\xE9sent en partenariat avec Beam. Notre impact grandit chaque jour : faites d\xE9filer pour d\xE9couvrir les objectifs vers lesquels nous travaillons ensemble en ce moment."},de:{cumulativeImpactTitle:()=>"Was wir finanziert haben",cumulativeImpactDescription:()=>"Hier ist die Wirkung, die unsere Community bisher in Zusammenarbeit mit Beam erzielt hat. Unsere Wirkung w\xE4chst von Tag zu Tag - scrollen Sie, um einen Blick auf die Ziele zu werfen, auf die wir derzeit gemeinsam hinarbeiten."},es:{cumulativeImpactTitle:()=>"Lo que hemos financiado",cumulativeImpactDescription:()=>"Este es el impacto que nuestra comunidad ha tenido hasta ahora en asociaci\xF3n con Beam. Nuestro impacto crece cada d\xEDa; despl\xE1cese para ver los objetivos por los que estamos trabajando juntos en este momento."},it:{cumulativeImpactTitle:()=>"Cosa abbiamo finanziato",cumulativeImpactDescription:()=>"Ecco l'impatto che la nostra comunit\xE0 ha avuto finora in collaborazione con Beam. Il nostro impatto cresce ogni giorno: scorri per scoprire gli obiettivi a cui stiamo lavorando insieme in questo momento."},pl:{cumulativeImpactTitle:()=>"Co sfinansowali\u015Bmy",cumulativeImpactDescription:()=>"Oto wp\u0142yw, jaki nasza spo\u0142eczno\u015B\u0107 wywar\u0142a dotychczas we wsp\xF3\u0142pracy z Beam. Nasz wp\u0142yw ro\u015Bnie z ka\u017Cdym dniem \u2014 przewi\u0144, aby sprawdzi\u0107 cele, nad kt\xF3rymi obecnie wsp\xF3lnie pracujemy."}};var P=Object.defineProperty,q=Object.getOwnPropertyDescriptor,l=(s,e,t,a)=>{for(var i=a>1?void 0:a?q(e,t):e,o=s.length-1,r;o>=0;o--)(r=s[o])&&(i=(a?r(e,t,i):r(i))||i);return a&&i&&P(e,t,i),i};const U=1.5*1e3;class n extends b{constructor(){super(...arguments),this.baseUrl=D,this.lang="en",this.disableAnimation=!1,this.debug=!1,this.draftConfig=!1,this.getCumulativeImpactData=async()=>(E(["apiKey","chainId"],this),await k({baseUrl:this.baseUrl,pathParams:{chainId:this.chainId},headers:{authorization:`Api-Key ${this.apiKey}`},queryParams:{version:"1.0.0",lang:this.configLang,draftConfig:this.draftConfig}})),this.cumulativeImpactDataController=new z(this,this.getCumulativeImpactData),this.resizeElements=x(()=>{O(this.impactRowRefs)},50,{maxWait:50,leading:!0})}get configLang(){return L[this.lang]||"en"}connectedCallback(){super.connectedCallback(),window.addEventListener("resize",this.resizeElements)}async updated(e){const t=["chainId","baseUrl","lang"];for(const a of t)if(e.has(a)){await this.cumulativeImpactDataController.exec();break}this.resizeElements()}render(){const{data:e,error:t,loading:a}=this.cumulativeImpactDataController;return a?V():t?this.debug?f({error:t}):"":e==null?this.debug?f({error:new $("Missing data")}):"":u`
2
2
  <style>
3
3
  :host {
4
4
  ${this.cssVariables.toCSS()}