@beamimpact/web-sdk 1.56.3 → 1.57.1

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 (398) hide show
  1. package/dist/chunks/_share-dialog-dependencies-BEUnzuWq.esm.js +2 -0
  2. package/dist/chunks/{_share-dialog-dependencies-Bk60ibnw.esm.js.map → _share-dialog-dependencies-BEUnzuWq.esm.js.map} +1 -1
  3. package/dist/chunks/{order-page-CSEjG6ma.esm.d.ts → cart-CKltrzQt.esm.d.ts} +22 -34
  4. package/dist/chunks/css-card-grid-CiqEjkwR.esm.js +21 -0
  5. package/dist/chunks/css-card-grid-CiqEjkwR.esm.js.map +1 -0
  6. package/dist/chunks/handlebars-B_i-to-h.esm.js +23 -0
  7. package/dist/chunks/handlebars-B_i-to-h.esm.js.map +1 -0
  8. package/dist/chunks/index-B4xKTDaF.esm.js +2 -0
  9. package/dist/chunks/index-B4xKTDaF.esm.js.map +1 -0
  10. package/dist/chunks/{index-C_u1FXtO.esm.d.ts → index-BAROgNYE.esm.d.ts} +7 -10
  11. package/dist/chunks/{index-BLlSL37B.esm.d.ts → index-BH3YaPLG.esm.d.ts} +1 -1
  12. package/dist/chunks/index-BHglsF5j.esm.js +2 -0
  13. package/dist/chunks/index-BHglsF5j.esm.js.map +1 -0
  14. package/dist/chunks/index-BgalrCS_.esm.js +32 -0
  15. package/dist/chunks/index-BgalrCS_.esm.js.map +1 -0
  16. package/dist/chunks/{index-hghrT7Z_.esm.d.ts → index-BoIHE1tC.esm.d.ts} +3 -0
  17. package/dist/chunks/index-C60Vejym.esm.js +32 -0
  18. package/dist/chunks/index-C60Vejym.esm.js.map +1 -0
  19. package/dist/chunks/{index-DDCtGN21.esm.d.ts → index-C6a13iqC.esm.d.ts} +3 -5
  20. package/dist/chunks/index-D6aFJ4cU.esm.js +2 -0
  21. package/dist/chunks/index-D6aFJ4cU.esm.js.map +1 -0
  22. package/dist/chunks/index-Dm-K2MLY.esm.js +31 -0
  23. package/dist/chunks/index-Dm-K2MLY.esm.js.map +1 -0
  24. package/dist/chunks/{index-BEEmYYxP.esm.js → index-DqhM4Yoj.esm.js} +11 -11
  25. package/dist/chunks/index-DqhM4Yoj.esm.js.map +1 -0
  26. package/dist/chunks/{index-UMeAzKTG.esm.js → index-HqfLVFOU.esm.js} +11 -11
  27. package/dist/chunks/index-HqfLVFOU.esm.js.map +1 -0
  28. package/dist/chunks/index-MAMeVd6l.esm.js +2 -0
  29. package/dist/chunks/index-MAMeVd6l.esm.js.map +1 -0
  30. package/dist/chunks/{index-DyUuvdr3.esm.d.ts → index-OYSJ-2mk.esm.d.ts} +1 -1
  31. package/dist/chunks/{index-BY5lSRmw.esm.d.ts → index-mBTWm4YP.esm.d.ts} +2 -2
  32. package/dist/chunks/{lit-JRlupCB5.esm.js → lit-BEag9MFp.esm.js} +2 -2
  33. package/dist/chunks/{lit-JRlupCB5.esm.js.map → lit-BEag9MFp.esm.js.map} +1 -1
  34. package/dist/chunks/{lodash-BSs6Il-c.esm.js → lodash-CrMU6wKg.esm.js} +2 -2
  35. package/dist/chunks/{lodash-BSs6Il-c.esm.js.map → lodash-CrMU6wKg.esm.js.map} +1 -1
  36. package/dist/chunks/{promo-pill-label-D_4zJ7uy.esm.js → promo-pill-label-5HmbDVmU.esm.js} +2 -2
  37. package/dist/chunks/{promo-pill-label-D_4zJ7uy.esm.js.map → promo-pill-label-5HmbDVmU.esm.js.map} +1 -1
  38. package/dist/chunks/{responsive-CIV4sFdH.esm.js → responsive-aN8P5PqD.esm.js} +2 -2
  39. package/dist/chunks/{responsive-CIV4sFdH.esm.js.map → responsive-aN8P5PqD.esm.js.map} +1 -1
  40. package/dist/chunks/{routes-OxC3Ah30.esm.d.ts → routes-D6Gtw6kZ.esm.d.ts} +1 -1
  41. package/dist/chunks/share-button-5gfPmeEh.esm.js +54 -0
  42. package/dist/chunks/share-button-5gfPmeEh.esm.js.map +1 -0
  43. package/dist/chunks/{share-button-Dzc7loia.esm.js → share-button-C4yPLL_t.esm.js} +2 -2
  44. package/dist/chunks/{share-button-DkTpGZk1.esm.js.map → share-button-C4yPLL_t.esm.js.map} +1 -1
  45. package/dist/chunks/{update-cart-DWgFuC7U.esm.d.ts → update-cart-DoJGAdoU.esm.d.ts} +2 -3
  46. package/dist/chunks/utils-C5hmbxa4.esm.js +2 -0
  47. package/dist/chunks/utils-C5hmbxa4.esm.js.map +1 -0
  48. package/dist/chunks/{openapi-spec-B4z4_CMq.esm.d.ts → utils-COGFpDER.esm.d.ts} +597 -11
  49. package/dist/chunks/{vendor-ckSdd6aH.esm.js → vendor-DUOg5fL-.esm.js} +2 -2
  50. package/dist/chunks/{vendor-ckSdd6aH.esm.js.map → vendor-DUOg5fL-.esm.js.map} +1 -1
  51. package/dist/components/beam-partner-logos.d.ts +3 -1
  52. package/dist/components/beam-partner-logos.esm.js +1 -1
  53. package/dist/components/beam-partner-logos.js +1 -1
  54. package/dist/components/community-impact.d.ts +3 -2
  55. package/dist/components/community-impact.esm.js +6 -6
  56. package/dist/components/community-impact.esm.js.map +1 -1
  57. package/dist/components/community-impact.js +6 -6
  58. package/dist/components/community-impact.js.map +1 -1
  59. package/dist/components/cumulative-impact.d.ts +3 -2
  60. package/dist/components/cumulative-impact.esm.js +11 -11
  61. package/dist/components/cumulative-impact.esm.js.map +1 -1
  62. package/dist/components/cumulative-impact.js +11 -11
  63. package/dist/components/cumulative-impact.js.map +1 -1
  64. package/dist/components/impact-overview.d.ts +3 -2
  65. package/dist/components/impact-overview.esm.js +5 -5
  66. package/dist/components/impact-overview.esm.js.map +1 -1
  67. package/dist/components/impact-overview.js +5 -5
  68. package/dist/components/impact-overview.js.map +1 -1
  69. package/dist/components/index.d.ts +5 -5
  70. package/dist/components/index.esm.js +1 -1
  71. package/dist/components/index.js +1 -1
  72. package/dist/components/post-purchase.d.ts +3 -4
  73. package/dist/components/post-purchase.esm.js +1 -31
  74. package/dist/components/post-purchase.esm.js.map +1 -1
  75. package/dist/components/post-purchase.js +1 -31
  76. package/dist/components/post-purchase.js.map +1 -1
  77. package/dist/components/product-details-page.d.ts +4 -2
  78. package/dist/components/product-details-page.esm.js +4 -4
  79. package/dist/components/product-details-page.esm.js.map +1 -1
  80. package/dist/components/product-details-page.js +4 -4
  81. package/dist/components/product-details-page.js.map +1 -1
  82. package/dist/components/redeem-transaction.d.ts +3 -4
  83. package/dist/components/redeem-transaction.esm.js +1 -1
  84. package/dist/components/redeem-transaction.js +1 -1
  85. package/dist/components/select-nonprofit.d.ts +3 -4
  86. package/dist/components/select-nonprofit.esm.js +12 -12
  87. package/dist/components/select-nonprofit.esm.js.map +1 -1
  88. package/dist/components/select-nonprofit.js +12 -12
  89. package/dist/components/select-nonprofit.js.map +1 -1
  90. package/dist/components/select-subscription-nonprofit.d.ts +3 -2
  91. package/dist/components/select-subscription-nonprofit.esm.js +11 -11
  92. package/dist/components/select-subscription-nonprofit.esm.js.map +1 -1
  93. package/dist/components/select-subscription-nonprofit.js +11 -11
  94. package/dist/components/select-subscription-nonprofit.js.map +1 -1
  95. package/dist/components/shopify.d.ts +9 -12
  96. package/dist/components/shopify.esm.js +1 -1
  97. package/dist/components/shopify.esm.js.map +1 -1
  98. package/dist/components/shopify.js +1 -1
  99. package/dist/components/shopify.js.map +1 -1
  100. package/dist/components/social-share.d.ts +3 -2
  101. package/dist/components/social-share.esm.js +2 -2
  102. package/dist/components/social-share.esm.js.map +1 -1
  103. package/dist/components/social-share.js +2 -2
  104. package/dist/components/social-share.js.map +1 -1
  105. package/dist/components/subscriber-select-nonprofit.d.ts +59 -0
  106. package/dist/components/subscriber-select-nonprofit.esm.js +137 -0
  107. package/dist/components/subscriber-select-nonprofit.esm.js.map +1 -0
  108. package/dist/components/subscriber-select-nonprofit.js +137 -0
  109. package/dist/components/subscriber-select-nonprofit.js.map +1 -0
  110. package/dist/components/subscription-impact.d.ts +3 -2
  111. package/dist/components/subscription-impact.esm.js +6 -6
  112. package/dist/components/subscription-impact.esm.js.map +1 -1
  113. package/dist/components/subscription-impact.js +6 -6
  114. package/dist/components/subscription-impact.js.map +1 -1
  115. package/dist/components/subscription-management.d.ts +4 -5
  116. package/dist/components/subscription-management.esm.js +3 -3
  117. package/dist/components/subscription-management.esm.js.map +1 -1
  118. package/dist/components/subscription-management.js +3 -3
  119. package/dist/components/subscription-management.js.map +1 -1
  120. package/dist/index.d.ts +39 -38
  121. package/dist/index.esm.js +1 -1
  122. package/dist/index.js +1 -1
  123. package/dist/integrations/beam.d.ts +3 -1
  124. package/dist/integrations/beam.esm.js +1 -1
  125. package/dist/integrations/beam.esm.js.map +1 -1
  126. package/dist/integrations/beam.js +1 -1
  127. package/dist/integrations/beam.js.map +1 -1
  128. package/dist/integrations/cart.d.ts +4 -4
  129. package/dist/integrations/cart.esm.js +1 -1
  130. package/dist/integrations/cart.js +1 -1
  131. package/dist/integrations/logs.d.ts +4 -2
  132. package/dist/integrations/logs.esm.js +1 -1
  133. package/dist/integrations/logs.js +1 -1
  134. package/dist/integrations/promoManager.d.ts +3 -1
  135. package/dist/integrations/promoManager.esm.js +1 -1
  136. package/dist/integrations/promoManager.esm.js.map +1 -1
  137. package/dist/integrations/promoManager.js +1 -1
  138. package/dist/integrations/promoManager.js.map +1 -1
  139. package/dist/integrations/session.d.ts +1 -1
  140. package/dist/integrations/session.esm.js +1 -1
  141. package/dist/integrations/session.js +1 -1
  142. package/dist/integrations/shopify-order.d.ts +38 -0
  143. package/dist/integrations/shopify-order.esm.js +2 -0
  144. package/dist/integrations/shopify-order.esm.js.map +1 -0
  145. package/dist/integrations/shopify-order.js +2 -0
  146. package/dist/integrations/shopify-order.js.map +1 -0
  147. package/dist/integrations/shopify.d.ts +5 -12
  148. package/dist/integrations/shopify.esm.js +1 -1
  149. package/dist/integrations/shopify.js +1 -1
  150. package/dist/integrations/statsig.d.ts +3 -1
  151. package/dist/integrations/statsig.esm.js +3 -3
  152. package/dist/integrations/statsig.esm.js.map +1 -1
  153. package/dist/integrations/statsig.js +3 -3
  154. package/dist/integrations/statsig.js.map +1 -1
  155. package/dist/integrations/utils.d.ts +1 -14
  156. package/dist/integrations/utils.esm.js +1 -1
  157. package/dist/integrations/utils.js +1 -1
  158. package/dist/react/beam-partner-logos.d.ts +3 -1
  159. package/dist/react/beam-partner-logos.esm.js +1 -1
  160. package/dist/react/beam-partner-logos.js +1 -1
  161. package/dist/react/community-impact.d.ts +3 -2
  162. package/dist/react/community-impact.esm.js +1 -1
  163. package/dist/react/community-impact.esm.js.map +1 -1
  164. package/dist/react/community-impact.js +1 -1
  165. package/dist/react/community-impact.js.map +1 -1
  166. package/dist/react/cumulative-impact.d.ts +3 -2
  167. package/dist/react/cumulative-impact.esm.js +1 -1
  168. package/dist/react/cumulative-impact.esm.js.map +1 -1
  169. package/dist/react/cumulative-impact.js +1 -1
  170. package/dist/react/cumulative-impact.js.map +1 -1
  171. package/dist/react/impact-overview.d.ts +3 -2
  172. package/dist/react/impact-overview.esm.js +1 -1
  173. package/dist/react/impact-overview.esm.js.map +1 -1
  174. package/dist/react/impact-overview.js +1 -1
  175. package/dist/react/impact-overview.js.map +1 -1
  176. package/dist/react/index.d.ts +6 -7
  177. package/dist/react/index.esm.js +1 -1
  178. package/dist/react/index.js +1 -1
  179. package/dist/react/post-purchase.d.ts +3 -4
  180. package/dist/react/post-purchase.esm.js +1 -1
  181. package/dist/react/post-purchase.esm.js.map +1 -1
  182. package/dist/react/post-purchase.js +1 -1
  183. package/dist/react/post-purchase.js.map +1 -1
  184. package/dist/react/product-details-page.d.ts +4 -2
  185. package/dist/react/product-details-page.esm.js +1 -1
  186. package/dist/react/product-details-page.esm.js.map +1 -1
  187. package/dist/react/product-details-page.js +1 -1
  188. package/dist/react/product-details-page.js.map +1 -1
  189. package/dist/react/redeem-transaction.d.ts +3 -6
  190. package/dist/react/redeem-transaction.esm.js +1 -1
  191. package/dist/react/redeem-transaction.esm.js.map +1 -1
  192. package/dist/react/redeem-transaction.js +1 -1
  193. package/dist/react/redeem-transaction.js.map +1 -1
  194. package/dist/react/select-nonprofit.d.ts +3 -6
  195. package/dist/react/select-nonprofit.esm.js +1 -1
  196. package/dist/react/select-nonprofit.esm.js.map +1 -1
  197. package/dist/react/select-nonprofit.js +1 -1
  198. package/dist/react/select-nonprofit.js.map +1 -1
  199. package/dist/react/select-subscription-nonprofit.d.ts +3 -6
  200. package/dist/react/select-subscription-nonprofit.esm.js +1 -1
  201. package/dist/react/select-subscription-nonprofit.esm.js.map +1 -1
  202. package/dist/react/select-subscription-nonprofit.js +1 -1
  203. package/dist/react/select-subscription-nonprofit.js.map +1 -1
  204. package/dist/react/shopify.d.ts +2 -2
  205. package/dist/react/shopify.esm.js +1 -1
  206. package/dist/react/shopify.esm.js.map +1 -1
  207. package/dist/react/shopify.js +1 -1
  208. package/dist/react/shopify.js.map +1 -1
  209. package/dist/react/social-share.d.ts +3 -2
  210. package/dist/react/social-share.esm.js +1 -1
  211. package/dist/react/social-share.esm.js.map +1 -1
  212. package/dist/react/social-share.js +1 -1
  213. package/dist/react/social-share.js.map +1 -1
  214. package/dist/react/subscriber-select-nonprofit.d.ts +14 -0
  215. package/dist/react/subscriber-select-nonprofit.esm.js +2 -0
  216. package/dist/react/subscriber-select-nonprofit.esm.js.map +1 -0
  217. package/dist/react/subscriber-select-nonprofit.js +2 -0
  218. package/dist/react/subscriber-select-nonprofit.js.map +1 -0
  219. package/dist/react/subscription-impact.d.ts +3 -2
  220. package/dist/react/subscription-impact.esm.js +1 -1
  221. package/dist/react/subscription-impact.esm.js.map +1 -1
  222. package/dist/react/subscription-impact.js +1 -1
  223. package/dist/react/subscription-impact.js.map +1 -1
  224. package/dist/react/subscription-management.d.ts +4 -5
  225. package/dist/react/subscription-management.esm.js +1 -1
  226. package/dist/react/subscription-management.esm.js.map +1 -1
  227. package/dist/react/subscription-management.js +1 -1
  228. package/dist/react/subscription-management.js.map +1 -1
  229. package/dist/utils/beam-errors.d.ts +3 -1
  230. package/dist/utils/beam-errors.esm.js +1 -1
  231. package/dist/utils/beam-errors.js +1 -1
  232. package/dist/utils/cart.d.ts +3 -18
  233. package/dist/utils/cart.esm.js +1 -1
  234. package/dist/utils/cart.esm.js.map +1 -1
  235. package/dist/utils/cart.js +1 -1
  236. package/dist/utils/cart.js.map +1 -1
  237. package/dist/utils/clear-beam-storage.d.ts +3 -0
  238. package/dist/utils/clear-beam-storage.esm.js +2 -0
  239. package/dist/utils/clear-beam-storage.esm.js.map +1 -0
  240. package/dist/utils/clear-beam-storage.js +2 -0
  241. package/dist/utils/clear-beam-storage.js.map +1 -0
  242. package/dist/utils/cookies.d.ts +3 -18
  243. package/dist/utils/cookies.esm.js +1 -1
  244. package/dist/utils/cookies.esm.js.map +1 -1
  245. package/dist/utils/cookies.js +1 -1
  246. package/dist/utils/cookies.js.map +1 -1
  247. package/dist/utils/debounce.esm.js +1 -1
  248. package/dist/utils/debounce.js +1 -1
  249. package/dist/utils/events.d.ts +3 -5
  250. package/dist/utils/events.esm.js +1 -1
  251. package/dist/utils/events.js +1 -1
  252. package/dist/utils/is-equal.esm.js +1 -1
  253. package/dist/utils/is-equal.js +1 -1
  254. package/dist/utils/local-storage.d.ts +3 -19
  255. package/dist/utils/local-storage.esm.js +1 -1
  256. package/dist/utils/local-storage.esm.js.map +1 -1
  257. package/dist/utils/local-storage.js +1 -1
  258. package/dist/utils/local-storage.js.map +1 -1
  259. package/dist/utils/logger.d.ts +3 -8
  260. package/dist/utils/logger.esm.js +1 -1
  261. package/dist/utils/logger.esm.js.map +1 -1
  262. package/dist/utils/logger.js +1 -1
  263. package/dist/utils/logger.js.map +1 -1
  264. package/dist/utils/makeApiKeyHeader.d.ts +3 -5
  265. package/dist/utils/makeApiKeyHeader.esm.js +1 -1
  266. package/dist/utils/makeApiKeyHeader.esm.js.map +1 -1
  267. package/dist/utils/makeApiKeyHeader.js +1 -1
  268. package/dist/utils/makeApiKeyHeader.js.map +1 -1
  269. package/dist/utils/memoize-last.d.ts +3 -17
  270. package/dist/utils/memoize-last.esm.js +1 -1
  271. package/dist/utils/memoize-last.esm.js.map +1 -1
  272. package/dist/utils/memoize-last.js +1 -1
  273. package/dist/utils/memoize-last.js.map +1 -1
  274. package/dist/utils/network-listeners.d.ts +3 -3
  275. package/dist/utils/network-listeners.esm.js +1 -1
  276. package/dist/utils/network-listeners.esm.js.map +1 -1
  277. package/dist/utils/network-listeners.js +1 -1
  278. package/dist/utils/network-listeners.js.map +1 -1
  279. package/dist/utils/promoManager.d.ts +3 -111
  280. package/dist/utils/promoManager.esm.js +1 -1
  281. package/dist/utils/promoManager.esm.js.map +1 -1
  282. package/dist/utils/promoManager.js +1 -1
  283. package/dist/utils/promoManager.js.map +1 -1
  284. package/dist/utils/remote-session.d.ts +3 -9
  285. package/dist/utils/remote-session.esm.js +1 -1
  286. package/dist/utils/remote-session.esm.js.map +1 -1
  287. package/dist/utils/remote-session.js +1 -1
  288. package/dist/utils/remote-session.js.map +1 -1
  289. package/dist/utils/wait-for-element.d.ts +3 -5
  290. package/dist/utils/wait-for-element.esm.js +1 -1
  291. package/dist/utils/wait-for-element.esm.js.map +1 -1
  292. package/dist/utils/wait-for-element.js +1 -1
  293. package/dist/utils/wait-for-element.js.map +1 -1
  294. package/package.json +9 -6
  295. package/dist/chunks/_share-dialog-dependencies-Bk60ibnw.esm.js +0 -2
  296. package/dist/chunks/_share-dialog-dependencies-D6vA_2f6.esm.js +0 -2
  297. package/dist/chunks/_share-dialog-dependencies-D6vA_2f6.esm.js.map +0 -1
  298. package/dist/chunks/beam-errors-Ci0d3926.esm.js +0 -2
  299. package/dist/chunks/beam-errors-Ci0d3926.esm.js.map +0 -1
  300. package/dist/chunks/beam-errors-DUQ9pK2V.esm.d.ts +0 -46
  301. package/dist/chunks/cart-contents-CEoSx3y4.esm.d.ts +0 -18
  302. package/dist/chunks/cart-contents-DkoytiZh.esm.js +0 -2
  303. package/dist/chunks/cart-contents-DkoytiZh.esm.js.map +0 -1
  304. package/dist/chunks/css-card-grid-DixMt6ek.esm.js +0 -20
  305. package/dist/chunks/css-card-grid-DixMt6ek.esm.js.map +0 -1
  306. package/dist/chunks/enforce-config-DHnpgqSK.esm.js +0 -3
  307. package/dist/chunks/enforce-config-DHnpgqSK.esm.js.map +0 -1
  308. package/dist/chunks/enforce-config-DUbQnaLO.esm.js +0 -3
  309. package/dist/chunks/enforce-config-DUbQnaLO.esm.js.map +0 -1
  310. package/dist/chunks/events-COWOQoLW.esm.js +0 -2
  311. package/dist/chunks/events-COWOQoLW.esm.js.map +0 -1
  312. package/dist/chunks/events-Dwqfqbij.esm.d.ts +0 -214
  313. package/dist/chunks/index-8rOpG9kf.esm.js +0 -2
  314. package/dist/chunks/index-8rOpG9kf.esm.js.map +0 -1
  315. package/dist/chunks/index-B1GmdVT3.esm.js +0 -2
  316. package/dist/chunks/index-B1GmdVT3.esm.js.map +0 -1
  317. package/dist/chunks/index-B2dxbh1d.esm.js +0 -2
  318. package/dist/chunks/index-B2dxbh1d.esm.js.map +0 -1
  319. package/dist/chunks/index-BEEmYYxP.esm.js.map +0 -1
  320. package/dist/chunks/index-BIEV1MH0.esm.js +0 -2
  321. package/dist/chunks/index-BIEV1MH0.esm.js.map +0 -1
  322. package/dist/chunks/index-BaWMWAyt.esm.js +0 -2
  323. package/dist/chunks/index-BaWMWAyt.esm.js.map +0 -1
  324. package/dist/chunks/index-BeX4QeUu.esm.js +0 -2
  325. package/dist/chunks/index-BeX4QeUu.esm.js.map +0 -1
  326. package/dist/chunks/index-C3hpHWh1.esm.js +0 -2
  327. package/dist/chunks/index-C3hpHWh1.esm.js.map +0 -1
  328. package/dist/chunks/index-C3v-y56g.esm.js +0 -2
  329. package/dist/chunks/index-C3v-y56g.esm.js.map +0 -1
  330. package/dist/chunks/index-CqqF1sQo.esm.js +0 -2
  331. package/dist/chunks/index-CqqF1sQo.esm.js.map +0 -1
  332. package/dist/chunks/index-Cs4Kp9X4.esm.js +0 -2
  333. package/dist/chunks/index-Cs4Kp9X4.esm.js.map +0 -1
  334. package/dist/chunks/index-D20ifskY.esm.d.ts +0 -21
  335. package/dist/chunks/index-D3hxLDQF.esm.js +0 -2
  336. package/dist/chunks/index-D3hxLDQF.esm.js.map +0 -1
  337. package/dist/chunks/index-D5TZB-zM.esm.js +0 -2
  338. package/dist/chunks/index-D5TZB-zM.esm.js.map +0 -1
  339. package/dist/chunks/index-D6qJfs7_.esm.js +0 -2
  340. package/dist/chunks/index-D6qJfs7_.esm.js.map +0 -1
  341. package/dist/chunks/index-DSJACB_p.esm.js +0 -2
  342. package/dist/chunks/index-DSJACB_p.esm.js.map +0 -1
  343. package/dist/chunks/index-DmjZnpod.esm.js +0 -2
  344. package/dist/chunks/index-DmjZnpod.esm.js.map +0 -1
  345. package/dist/chunks/index-EJRmgmQu.esm.d.ts +0 -74
  346. package/dist/chunks/index-UMeAzKTG.esm.js.map +0 -1
  347. package/dist/chunks/index-mppXVWCH.esm.js +0 -2
  348. package/dist/chunks/index-mppXVWCH.esm.js.map +0 -1
  349. package/dist/chunks/index-n62IxH5D.esm.js +0 -2
  350. package/dist/chunks/index-n62IxH5D.esm.js.map +0 -1
  351. package/dist/chunks/index-nAPzvUWE.esm.js +0 -2
  352. package/dist/chunks/index-nAPzvUWE.esm.js.map +0 -1
  353. package/dist/chunks/index-xcGPhpiO.esm.d.ts +0 -44
  354. package/dist/chunks/is-all-html-elements-fcB7UUA1.esm.js +0 -2
  355. package/dist/chunks/is-all-html-elements-fcB7UUA1.esm.js.map +0 -1
  356. package/dist/chunks/loading-template-BFvXaTlD.esm.js +0 -2
  357. package/dist/chunks/loading-template-BFvXaTlD.esm.js.map +0 -1
  358. package/dist/chunks/localize-Dg7NgKIP.esm.js +0 -31
  359. package/dist/chunks/localize-Dg7NgKIP.esm.js.map +0 -1
  360. package/dist/chunks/localize-DkAbsh05.esm.js +0 -31
  361. package/dist/chunks/localize-DkAbsh05.esm.js.map +0 -1
  362. package/dist/chunks/order-page-B0WbVrvh.esm.js +0 -2
  363. package/dist/chunks/order-page-B0WbVrvh.esm.js.map +0 -1
  364. package/dist/chunks/order-page-CT3hnhzf.esm.js +0 -2
  365. package/dist/chunks/order-page-CT3hnhzf.esm.js.map +0 -1
  366. package/dist/chunks/progress-bar-B82FOT8n.esm.js +0 -54
  367. package/dist/chunks/progress-bar-B82FOT8n.esm.js.map +0 -1
  368. package/dist/chunks/promo-pill-label-DcsiJS_N.esm.js +0 -16
  369. package/dist/chunks/promo-pill-label-DcsiJS_N.esm.js.map +0 -1
  370. package/dist/chunks/promo-types-CmZzhkpN.esm.d.ts +0 -15
  371. package/dist/chunks/promo-types-DKAOFHJr.esm.js +0 -2
  372. package/dist/chunks/promo-types-DKAOFHJr.esm.js.map +0 -1
  373. package/dist/chunks/routes-BIMwJ8u9.esm.js +0 -2
  374. package/dist/chunks/routes-BIMwJ8u9.esm.js.map +0 -1
  375. package/dist/chunks/routes-DSu5s3K7.esm.js +0 -2
  376. package/dist/chunks/routes-DSu5s3K7.esm.js.map +0 -1
  377. package/dist/chunks/share-button-CLMw49f5.esm.js +0 -2
  378. package/dist/chunks/share-button-CLMw49f5.esm.js.map +0 -1
  379. package/dist/chunks/share-button-DXS3zbJz.esm.js +0 -2
  380. package/dist/chunks/share-button-DXS3zbJz.esm.js.map +0 -1
  381. package/dist/chunks/share-button-DkTpGZk1.esm.js +0 -172
  382. package/dist/chunks/share-button-Dzc7loia.esm.js.map +0 -1
  383. package/dist/chunks/types-D_PLq1pj.esm.d.ts +0 -28
  384. package/dist/chunks/types-DfRc36jU.esm.d.ts +0 -15
  385. package/dist/chunks/update-cart-ByUvNLyZ.esm.js +0 -2
  386. package/dist/chunks/update-cart-ByUvNLyZ.esm.js.map +0 -1
  387. package/dist/chunks/update-cart-yj_9VGHp.esm.js +0 -2
  388. package/dist/chunks/update-cart-yj_9VGHp.esm.js.map +0 -1
  389. package/dist/integrations/index.d.ts +0 -31
  390. package/dist/integrations/index.esm.js +0 -2
  391. package/dist/integrations/index.esm.js.map +0 -1
  392. package/dist/integrations/index.js +0 -2
  393. package/dist/integrations/index.js.map +0 -1
  394. package/dist/utils/index.d.ts +0 -16
  395. package/dist/utils/index.esm.js +0 -2
  396. package/dist/utils/index.esm.js.map +0 -1
  397. package/dist/utils/index.js +0 -2
  398. package/dist/utils/index.js.map +0 -1
@@ -1,4 +1,4 @@
1
- import{a as n,i as s,b as m,n as b}from"./lit-JRlupCB5.esm.js";import"./_share-dialog-dependencies-Bk60ibnw.esm.js";import"./vendor-ckSdd6aH.esm.js";var d=Object.defineProperty,p=(e,r,t,P)=>{for(var o=void 0,l=e.length-1,i;l>=0;l--)(i=e[l])&&(o=i(r,t,o)||o);return o&&d(r,t,o),o};class a extends n{constructor(){super(...arguments),this.promo=null,this.shortVersion=!1}static get styles(){return s`
1
+ import{a as n,i as s,b as m,n as b}from"./lit-BEag9MFp.esm.js";import"./_share-dialog-dependencies-BEUnzuWq.esm.js";import"./vendor-DUOg5fL-.esm.js";var d=Object.defineProperty,p=(e,r,t,P)=>{for(var o=void 0,l=e.length-1,i;l>=0;l--)(i=e[l])&&(o=i(r,t,o)||o);return o&&d(r,t,o),o};class a extends n{constructor(){super(...arguments),this.promo=null,this.shortVersion=!1}static get styles(){return s`
2
2
  sl-badge::part(base) {
3
3
  background-color: var(--beam-promoPillLabel-color-background, #000);
4
4
  color: var(--beam-promoPillLabel-color, #fff);
@@ -13,4 +13,4 @@ import{a as n,i as s,b as m,n as b}from"./lit-JRlupCB5.esm.js";import"./_share-d
13
13
  margin: var(--beam-promoPillLabel-border-margin);
14
14
  }
15
15
  `}render(){if(this.promo){const r=this.shortVersion?this.promo["promo-text-short"]:this.promo["promo-text-long"];return m`<sl-badge pill aria-label="${r}">${r}</sl-badge>`}else return m``}}p([b({type:Object})],a.prototype,"promo"),p([b({type:Boolean})],a.prototype,"shortVersion"),customElements.get("beam-promo-info-pill")||customElements.define("beam-promo-info-pill",a);const f={"--beam-promoPillLabel-color-background":"#000","--beam-promoPillLabel-color":"#fff","--beam-promoPillLabel-border":"#000","--beam-promoPillLabel-border-width":"0px","--beam-promoPillLabel-font-size":"11px","--beam-promoPillLabel-font":"inherit","--beam-promoPillLabel-font-weight":"bold","--beam-promoPillLabel-text-transform":"none","--beam-promoPillLabel-text-wrap":"wrap","--beam-promoPillLabel-text-padding":"4px 15px","--beam-promoPillLabel-border-margin":"0px"};export{f as p};
16
- //# sourceMappingURL=promo-pill-label-D_4zJ7uy.esm.js.map
16
+ //# sourceMappingURL=promo-pill-label-5HmbDVmU.esm.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"promo-pill-label-D_4zJ7uy.esm.js","sources":["../../src/shared/components/promo-pill-label.ts"],"sourcesContent":["import { css, html, LitElement } from \"lit\";\nimport { property } from \"lit/decorators/property.js\";\nimport \"../shoelace-components\";\nimport \"@shoelace-style/shoelace/dist/components/badge/badge.js\";\n\ntype Promo = {\n \"promo-text-long\": string;\n \"promo-text-short\": string;\n};\n\nexport class BeamPromoInfoPill extends LitElement {\n @property({ type: Object }) promo: Promo | null = null;\n @property({ type: Boolean }) shortVersion = false;\n\n static get styles() {\n return css`\n sl-badge::part(base) {\n background-color: var(--beam-promoPillLabel-color-background, #000);\n color: var(--beam-promoPillLabel-color, #fff);\n border: var(--beam-promoPillLabel-border-width, 0px) solid var(--beam-promoPillLabel-border, #000);\n border-radius: 18.37px;\n font-family: var(--beam-promoPillLabel-font, inherit);\n font-size: var(--beam-promoPillLabel-font-size, 12px);\n font-weight: var(--beam-promoPillLabel-font-weight, bold);\n text-transform: var(--beam-promoPillLabel-text-transform, none);\n text-wrap: var(--beam-promoPillLabel-text-wrap, wrap);\n padding: var(--beam-promoPillLabel-text-padding);\n margin: var(--beam-promoPillLabel-border-margin);\n }\n `;\n }\n\n render() {\n if (this.promo) {\n const promoText = this.shortVersion ? this.promo[\"promo-text-short\"] : this.promo[\"promo-text-long\"];\n return html`<sl-badge pill aria-label=\"${promoText}\">${promoText}</sl-badge>`;\n } else {\n return html``;\n }\n }\n}\n\ncustomElements.get(\"beam-promo-info-pill\") || customElements.define(\"beam-promo-info-pill\", BeamPromoInfoPill);\n\nexport const promoPillLabelConfigDefaults = {\n \"--beam-promoPillLabel-color-background\": \"#000\",\n \"--beam-promoPillLabel-color\": \"#fff\",\n \"--beam-promoPillLabel-border\": \"#000\",\n \"--beam-promoPillLabel-border-width\": \"0px\",\n \"--beam-promoPillLabel-font-size\": \"11px\",\n \"--beam-promoPillLabel-font\": \"inherit\",\n \"--beam-promoPillLabel-font-weight\": \"bold\",\n \"--beam-promoPillLabel-text-transform\": \"none\",\n \"--beam-promoPillLabel-text-wrap\": \"wrap\",\n \"--beam-promoPillLabel-text-padding\": \"4px 15px\",\n \"--beam-promoPillLabel-border-margin\": \"0px\",\n} as const;\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"beam-promo-info-pill\": BeamPromoInfoPill;\n }\n}\n"],"names":["BeamPromoInfoPill","LitElement","css","promoText","html","__decorateClass","property","promoPillLabelConfigDefaults"],"mappings":"wRAUO,MAAMA,UAA0BC,CAAW,CAA3C,aAAA,CAAA,MAAA,GAAA,SAAA,EACuB,KAAA,MAAsB,KACrB,KAAA,aAAe,EAAA,CAE5C,WAAW,QAAS,CAClB,OAAOC;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA,KAeT,CAEA,QAAS,CACP,GAAI,KAAK,MAAO,CACd,MAAMC,EAAY,KAAK,aAAe,KAAK,MAAM,kBAAkB,EAAI,KAAK,MAAM,iBAAiB,EACnG,OAAOC,+BAAkCD,CAAS,KAAKA,CAAS,aAClE,KACE,QAAOC,GAEX,CACF,CA7B8BC,EAAA,CAA3BC,EAAS,CAAE,KAAM,MAAO,CAAC,CAAA,EADfN,EACiB,UAAA,OAAA,EACCK,EAAA,CAA5BC,EAAS,CAAE,KAAM,OAAQ,CAAC,CAAA,EAFhBN,EAEkB,0BA8B/B,eAAe,IAAI,sBAAsB,GAAK,eAAe,OAAO,uBAAwBA,CAAiB,EAEtG,MAAMO,EAA+B,CAC1C,yCAA0C,OAC1C,8BAA+B,OAC/B,+BAAgC,OAChC,qCAAsC,MACtC,kCAAmC,OACnC,6BAA8B,UAC9B,oCAAqC,OACrC,uCAAwC,OACxC,kCAAmC,OACnC,qCAAsC,WACtC,sCAAuC,KACzC"}
1
+ {"version":3,"file":"promo-pill-label-5HmbDVmU.esm.js","sources":["../../src/shared/components/promo-pill-label.ts"],"sourcesContent":["import { css, html, LitElement } from \"lit\";\nimport { property } from \"lit/decorators/property.js\";\nimport \"../shoelace-components\";\nimport \"@shoelace-style/shoelace/dist/components/badge/badge.js\";\n\ntype Promo = {\n \"promo-text-long\": string;\n \"promo-text-short\": string;\n};\n\nexport class BeamPromoInfoPill extends LitElement {\n @property({ type: Object }) promo: Promo | null = null;\n @property({ type: Boolean }) shortVersion = false;\n\n static get styles() {\n return css`\n sl-badge::part(base) {\n background-color: var(--beam-promoPillLabel-color-background, #000);\n color: var(--beam-promoPillLabel-color, #fff);\n border: var(--beam-promoPillLabel-border-width, 0px) solid var(--beam-promoPillLabel-border, #000);\n border-radius: 18.37px;\n font-family: var(--beam-promoPillLabel-font, inherit);\n font-size: var(--beam-promoPillLabel-font-size, 12px);\n font-weight: var(--beam-promoPillLabel-font-weight, bold);\n text-transform: var(--beam-promoPillLabel-text-transform, none);\n text-wrap: var(--beam-promoPillLabel-text-wrap, wrap);\n padding: var(--beam-promoPillLabel-text-padding);\n margin: var(--beam-promoPillLabel-border-margin);\n }\n `;\n }\n\n render() {\n if (this.promo) {\n const promoText = this.shortVersion ? this.promo[\"promo-text-short\"] : this.promo[\"promo-text-long\"];\n return html`<sl-badge pill aria-label=\"${promoText}\">${promoText}</sl-badge>`;\n } else {\n return html``;\n }\n }\n}\n\ncustomElements.get(\"beam-promo-info-pill\") || customElements.define(\"beam-promo-info-pill\", BeamPromoInfoPill);\n\nexport const promoPillLabelConfigDefaults = {\n \"--beam-promoPillLabel-color-background\": \"#000\",\n \"--beam-promoPillLabel-color\": \"#fff\",\n \"--beam-promoPillLabel-border\": \"#000\",\n \"--beam-promoPillLabel-border-width\": \"0px\",\n \"--beam-promoPillLabel-font-size\": \"11px\",\n \"--beam-promoPillLabel-font\": \"inherit\",\n \"--beam-promoPillLabel-font-weight\": \"bold\",\n \"--beam-promoPillLabel-text-transform\": \"none\",\n \"--beam-promoPillLabel-text-wrap\": \"wrap\",\n \"--beam-promoPillLabel-text-padding\": \"4px 15px\",\n \"--beam-promoPillLabel-border-margin\": \"0px\",\n} as const;\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"beam-promo-info-pill\": BeamPromoInfoPill;\n }\n}\n"],"names":["BeamPromoInfoPill","LitElement","css","promoText","html","__decorateClass","property","promoPillLabelConfigDefaults"],"mappings":"wRAUO,MAAMA,UAA0BC,CAAW,CAA3C,aAAA,CAAA,MAAA,GAAA,SAAA,EACuB,KAAA,MAAsB,KACrB,KAAA,aAAe,EAAA,CAE5C,WAAW,QAAS,CAClB,OAAOC;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA,KAeT,CAEA,QAAS,CACP,GAAI,KAAK,MAAO,CACd,MAAMC,EAAY,KAAK,aAAe,KAAK,MAAM,kBAAkB,EAAI,KAAK,MAAM,iBAAiB,EACnG,OAAOC,+BAAkCD,CAAS,KAAKA,CAAS,aAClE,KACE,QAAOC,GAEX,CACF,CA7B8BC,EAAA,CAA3BC,EAAS,CAAE,KAAM,MAAO,CAAC,CAAA,EADfN,EACiB,UAAA,OAAA,EACCK,EAAA,CAA5BC,EAAS,CAAE,KAAM,OAAQ,CAAC,CAAA,EAFhBN,EAEkB,0BA8B/B,eAAe,IAAI,sBAAsB,GAAK,eAAe,OAAO,uBAAwBA,CAAiB,EAEtG,MAAMO,EAA+B,CAC1C,yCAA0C,OAC1C,8BAA+B,OAC/B,+BAAgC,OAChC,qCAAsC,MACtC,kCAAmC,OACnC,6BAA8B,UAC9B,oCAAqC,OACrC,uCAAwC,OACxC,kCAAmC,OACnC,qCAAsC,WACtC,sCAAuC,KACzC"}
@@ -1,4 +1,4 @@
1
- import{i}from"./lit-JRlupCB5.esm.js";const n=501,l=i`
1
+ import{i}from"./lit-BEag9MFp.esm.js";const n=501,l=i`
2
2
  .d-none {
3
3
  display: none;
4
4
  }
@@ -20,4 +20,4 @@ import{i}from"./lit-JRlupCB5.esm.js";const n=501,l=i`
20
20
  }
21
21
  }
22
22
  `;export{l as c};
23
- //# sourceMappingURL=responsive-CIV4sFdH.esm.js.map
23
+ //# sourceMappingURL=responsive-aN8P5PqD.esm.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"responsive-CIV4sFdH.esm.js","sources":["../../src/shared/responsive.ts"],"sourcesContent":["/**\n * Module containing constants for breakpoints and other responsive design considerations\n */\nimport { css } from \"lit\";\n\nexport const SCREEN_SIZE_SMALL = 501; // px\n\n/**\n * Reusable CSS stylesheet for responsive display\n * Implements a subset of Bootstrap's CSS, but with only two sizes (sm [default] and lg)\n * https://getbootstrap.com/docs/4.0/utilities/display/\n */\nexport const cssResponsiveUtils = css`\n .d-none {\n display: none;\n }\n .d-block {\n display: block;\n }\n .d-inline {\n display: inline;\n }\n @media screen and (min-width: ${SCREEN_SIZE_SMALL}px) {\n .d-lg-none {\n display: none;\n }\n .d-lg-block {\n display: block;\n }\n .d-lg-inline {\n display: inline;\n }\n }\n`;\n"],"names":["SCREEN_SIZE_SMALL","cssResponsiveUtils","css"],"mappings":"qCAKO,MAAMA,EAAoB,IAOpBC,EAAqBC;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA,kCAUAF,CAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;"}
1
+ {"version":3,"file":"responsive-aN8P5PqD.esm.js","sources":["../../src/shared/responsive.ts"],"sourcesContent":["/**\n * Module containing constants for breakpoints and other responsive design considerations\n */\nimport { css } from \"lit\";\n\nexport const SCREEN_SIZE_SMALL = 501; // px\n\n/**\n * Reusable CSS stylesheet for responsive display\n * Implements a subset of Bootstrap's CSS, but with only two sizes (sm [default] and lg)\n * https://getbootstrap.com/docs/4.0/utilities/display/\n */\nexport const cssResponsiveUtils = css`\n .d-none {\n display: none;\n }\n .d-block {\n display: block;\n }\n .d-inline {\n display: inline;\n }\n @media screen and (min-width: ${SCREEN_SIZE_SMALL}px) {\n .d-lg-none {\n display: none;\n }\n .d-lg-block {\n display: block;\n }\n .d-lg-inline {\n display: inline;\n }\n }\n`;\n"],"names":["SCREEN_SIZE_SMALL","cssResponsiveUtils","css"],"mappings":"qCAKO,MAAMA,EAAoB,IAOpBC,EAAqBC;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA,kCAUAF,CAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;"}
@@ -540,7 +540,7 @@ declare const postProductDetailsPage: ({ headers, baseUrl, apiRoot, pathParams,
540
540
  version: string;
541
541
  storeId: number;
542
542
  draftConfig?: boolean;
543
- widgetName?: "community-impact" | "impact-overview" | "select-nonprofit" | "redeem-transaction" | "cumulative-impact" | "mobile-full-screen-nonprofit-selection" | "mobile-impact-list" | "mobile-minimal-nonprofit-selection" | "mobile-personal-impact" | "mobile-selected-nonprofit" | "mobile-progress-bar" | "select-nonprofit-cta" | "mobile-share-button" | "subscription-management" | "product-details-page" | "select-subscription-nonprofit" | "subscription-impact";
543
+ widgetName?: "community-impact" | "impact-overview" | "select-nonprofit" | "redeem-transaction" | "cumulative-impact" | "mobile-full-screen-nonprofit-selection" | "mobile-impact-list" | "mobile-minimal-nonprofit-selection" | "mobile-personal-impact" | "mobile-selected-nonprofit" | "mobile-progress-bar" | "select-nonprofit-cta" | "mobile-share-button" | "subscription-management" | "product-details-page" | "select-subscription-nonprofit" | "subscription-impact" | "subscriber-select-nonprofit";
544
544
  remoteProductIdentifier?: string;
545
545
  } | undefined;
546
546
  requestBody?: {
@@ -0,0 +1,54 @@
1
+ import{i as m,n as u,a as p,b as l}from"./lit-BEag9MFp.esm.js";import{r as d}from"./index-Dm-K2MLY.esm.js";var h=Object.defineProperty,c=(a,o,i,e)=>{for(var r=void 0,s=a.length-1,n;s>=0;s--)(n=a[s])&&(r=n(o,i,r)||r);return r&&h(o,i,r),r};class t extends p{constructor(){super(...arguments),this.value=0,this.animateProgress=!0}render(){return l`<div class="progress-bar-container">
2
+ <style>
3
+ :host {
4
+ --beam-ProgressBar-value: ${this.value};
5
+ }
6
+ </style>
7
+ <div class="progress-bar"></div>
8
+ </div>`}}t.styles=m`
9
+ :host {
10
+ display: inline-block;
11
+ min-width: 20px;
12
+ }
13
+
14
+ .progress-bar-container {
15
+ border-radius: var(--beam-ProgressBar-border-radius, 8px);
16
+ height: var(--beam-ProgressBar-height, 8px);
17
+ padding: 0;
18
+ width: 100%;
19
+ background: var(--beam-ProgressBar-color-background, lightgray);
20
+ position: relative;
21
+ border: var(--beam-ProgressBar-border-width, 1px) solid var(--beam-ProgressBar-color-border, currentColor);
22
+ overflow: hidden;
23
+ }
24
+
25
+ @keyframes animate-bar {
26
+ 0% {
27
+ width: 0;
28
+ }
29
+
30
+ 100% {
31
+ width: calc(var(--beam-ProgressBar-value) * 1%);
32
+ }
33
+ }
34
+
35
+ .progress-bar {
36
+ width: calc(var(--beam-ProgressBar-value, 0) * 1%);
37
+ height: 100%;
38
+ position: absolute;
39
+ background: var(--beam-ProgressBar-color-bar, linear-gradient(to right, currentColor, currentColor));
40
+ left: 0;
41
+ bottom: 0;
42
+ top: 0;
43
+ background-clip: padding-box;
44
+ animation-duration: calc(
45
+ var(--beam-ProgressBar-animation-duration-base, 0s) + var(--beam-ProgressBar-animation-duration-variable, 0s) *
46
+ var(--beam-ProgressBar-value) / 100
47
+ );
48
+ animation-iteration-count: 1;
49
+ animation-name: animate-bar;
50
+ animation-timing-function: linear;
51
+ border-radius: var(--beam-ProgressBar-progress-border-radius, 8px);
52
+ }
53
+ `,c([u({type:Number})],t.prototype,"value"),c([u({type:Boolean})],t.prototype,"animateProgress"),customElements.get("beam-progress-bar")||customElements.define("beam-progress-bar",t);const b={"--beam-ProgressBar-border-radius":"8px","--beam-ProgressBar-progress-border-radius":"8px","--beam-ProgressBar-height":"8px","--beam-ProgressBar-color-background":"transparent","--beam-ProgressBar-border-width":"1px","--beam-ProgressBar-color-border":"currentColor","--beam-ProgressBar-color-bar":"currentColor","--beam-ProgressBar-animation-duration-base":"0s","--beam-ProgressBar-animation-duration-variable":"0s"};async function g({baseUrl:a,apiKey:o,requestBody:i}){try{const e=a+"/api/v4/events/socialShare",r=JSON.stringify(i);await d(e,{method:"POST",body:r,headers:{authorization:`Api-Key ${o}`}})}catch(e){console.error(e)}}const S=async a=>fetch(a).then(async o=>{const i=new URL(a),e=await o.blob();return new File([e],i.pathname,{type:e.type})}),B={en:{impactShareButton:()=>"Share to Grow Your Impact",impactShareText:({brandName:a=""})=>`Help ${a} reach their giving goal by sharing this cause on social media`,impactShareTitle:()=>"Share on Social Media",impactShareCopy:()=>"Copy",impactShareDownload:()=>"Download",impactShareClose:()=>"Close"},fr:{impactShareButton:()=>"Partagez pour augmentez votre cause",impactShareText:({brandName:a=""})=>`Aidez ${a} a atteindre leur objectif en partageant cette cause sur votre r\xE9seaux sociaux`,impactShareTitle:()=>"Partager sur votre r\xE9seaux sociaux",impactShareCopy:()=>"Copier",impactShareDownload:()=>"T\xE9l\xE9charger",impactShareClose:()=>"Fermer"},de:{impactShareButton:()=>"Teil, um unserem Beitrag zu erh\xF6hen",impactShareText:({brandName:a=""})=>`Hilf ${a} ihre Spendenziel zu erreichen`,impactShareTitle:()=>"In den sozialen Medien teilen",impactShareCopy:()=>"Kopieren",impactShareDownload:()=>"Herunterladen",impactShareClose:()=>"Schlie\xDFen"},es:{impactShareButton:()=>"Comparte para aumentar nuestro impacto",impactShareText:({brandName:a=""})=>`Comparte en las redes sociales para ayudar a ${a} a alcanzar su objetivo.`,impactShareTitle:()=>"Compartir en redes sociales",impactShareCopy:()=>"Copiar",impactShareDownload:()=>"Descargar",impactShareClose:()=>"Cerrar"},it:{impactShareButton:()=>"Condividi, aiutaci a fare la differenza",impactShareText:({brandName:a=""})=>`Aiuta ${a} a raggiungere il suo obiettivo di donazione condividendo questa causa sui social media.`,impactShareTitle:()=>"Condividi, aiutaci a fare la differenza",impactShareCopy:()=>"Copia",impactShareDownload:()=>"Scarica",impactShareClose:()=>"Chiudi"},pl:{impactShareButton:()=>"Udost\u0119pnij, by szerzy\u0107 nasz\u0105 misj\u0119",impactShareText:({brandName:a=""})=>`Pom\xF3\u017C ${a} osi\u0105gn\u0105\u0107 cel i podziel si\u0119 t\u0105 inicjatyw\u0105 na swoim profilu`,impactShareTitle:()=>"Udost\u0119pnij na swoim profilu",impactShareCopy:()=>"Kopiuj",impactShareDownload:()=>"Pobierz",impactShareClose:()=>"Zamknij"},ja:{impactShareButton:()=>"\u6D3B\u52D5\u306E\u8F2A\u3092\u5E83\u3052\u3088\u3046",impactShareText:({brandName:a=""})=>`${a}\u306E\u5BC4\u4ED8\u76EE\u6A19\u9054\u6210\u306B\u5411\u3051\u3066\u3001SNS\u3067\u3053\u306E\u6D3B\u52D5\u3092\u662F\u975E\u30B7\u30A7\u30A2\u3057\u3066\u304F\u3060\u3055\u3044\u3002`,impactShareTitle:()=>"SNS\u3067\u30B7\u30A7\u30A2\u3059\u308B",impactShareCopy:()=>"\u30B3\u30D4\u30FC",impactShareDownload:()=>"\u30C0\u30A6\u30F3\u30ED\u30FC\u30C9",impactShareClose:()=>"\u9589\u3058\u308B"}};export{b as a,g as p,B as s,S as u};
54
+ //# sourceMappingURL=share-button-5gfPmeEh.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"share-button-5gfPmeEh.esm.js","sources":["../../src/shared/components/progress-bar.ts","../../src/api-sdk/v2/users/events.ts","../../src/shared/files.ts","../../src/shared/components/strings/share-button.ts"],"sourcesContent":["import { css, html, LitElement } from \"lit\";\nimport { property } from \"lit/decorators/property.js\";\n\nexport class BeamProgressBar extends LitElement {\n @property({ type: Number }) value = 0;\n @property({ type: Boolean }) animateProgress = true;\n\n render() {\n return html`<div class=\"progress-bar-container\">\n <style>\n :host {\n --beam-ProgressBar-value: ${this.value};\n }\n </style>\n <div class=\"progress-bar\"></div>\n </div>`;\n }\n\n static styles = css`\n :host {\n display: inline-block;\n min-width: 20px;\n }\n\n .progress-bar-container {\n border-radius: var(--beam-ProgressBar-border-radius, 8px);\n height: var(--beam-ProgressBar-height, 8px);\n padding: 0;\n width: 100%;\n background: var(--beam-ProgressBar-color-background, lightgray);\n position: relative;\n border: var(--beam-ProgressBar-border-width, 1px) solid var(--beam-ProgressBar-color-border, currentColor);\n overflow: hidden;\n }\n\n @keyframes animate-bar {\n 0% {\n width: 0;\n }\n\n 100% {\n width: calc(var(--beam-ProgressBar-value) * 1%);\n }\n }\n\n .progress-bar {\n width: calc(var(--beam-ProgressBar-value, 0) * 1%);\n height: 100%;\n position: absolute;\n background: var(--beam-ProgressBar-color-bar, linear-gradient(to right, currentColor, currentColor));\n left: 0;\n bottom: 0;\n top: 0;\n background-clip: padding-box;\n animation-duration: calc(\n var(--beam-ProgressBar-animation-duration-base, 0s) + var(--beam-ProgressBar-animation-duration-variable, 0s) *\n var(--beam-ProgressBar-value) / 100\n );\n animation-iteration-count: 1;\n animation-name: animate-bar;\n animation-timing-function: linear;\n border-radius: var(--beam-ProgressBar-progress-border-radius, 8px);\n }\n `;\n}\n\ncustomElements.get(\"beam-progress-bar\") || customElements.define(\"beam-progress-bar\", BeamProgressBar);\n\nexport const progressBarConfigDefaults = {\n \"--beam-ProgressBar-border-radius\": \"8px\",\n \"--beam-ProgressBar-progress-border-radius\": \"8px\",\n \"--beam-ProgressBar-height\": \"8px\",\n \"--beam-ProgressBar-color-background\": \"transparent\",\n \"--beam-ProgressBar-border-width\": \"1px\",\n \"--beam-ProgressBar-color-border\": \"currentColor\",\n \"--beam-ProgressBar-color-bar\": \"currentColor\",\n \"--beam-ProgressBar-animation-duration-base\": \"0s\",\n \"--beam-ProgressBar-animation-duration-variable\": \"0s\",\n} as const;\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"beam-progress-bar\": BeamProgressBar;\n }\n}\n","import { TUrl } from \"../../types\";\nimport { fetchJson } from \"../../fetch-json\";\n\nexport interface SocialShareAnalyticsEventPayload {\n eventName?: string | null;\n nonprofitId?: number | null;\n storeId?: number | null;\n transactionId?: number | null;\n timestamp?: number | null;\n}\n\nexport async function postSocialShareAnalyticsEvent({\n baseUrl,\n apiKey,\n requestBody,\n}: {\n baseUrl: TUrl;\n apiKey: string;\n requestBody: SocialShareAnalyticsEventPayload;\n}): Promise<void> {\n try {\n const url = baseUrl + \"/api/v4/events/socialShare\";\n const body = JSON.stringify(requestBody);\n await fetchJson(url, {\n method: \"POST\",\n body,\n headers: { authorization: `Api-Key ${apiKey}` },\n });\n } catch (error: any) {\n console.error(error);\n }\n}\n","export const urlToFile = async (url: string) => {\n return fetch(url).then(async (r) => {\n const u = new URL(url);\n const blob = await r.blob();\n return new File([blob], u.pathname, { type: blob.type });\n });\n};\n","export const strings = {\n en: {\n impactShareButton: () => `Share to Grow Your Impact`,\n impactShareText: ({ brandName = \"\" }) =>\n `Help ${brandName} reach their giving goal by sharing this cause on social media`,\n impactShareTitle: () => `Share on Social Media`,\n impactShareCopy: () => `Copy`,\n impactShareDownload: () => `Download`,\n impactShareClose: () => `Close`,\n },\n fr: {\n impactShareButton: () => `Partagez pour augmentez votre cause`,\n impactShareText: ({ brandName = \"\" }) =>\n `Aidez ${brandName} a atteindre leur objectif en partageant cette cause sur votre réseaux sociaux`,\n impactShareTitle: () => `Partager sur votre réseaux sociaux`,\n impactShareCopy: () => `Copier`,\n impactShareDownload: () => `Télécharger`,\n impactShareClose: () => `Fermer`,\n },\n de: {\n impactShareButton: () => `Teil, um unserem Beitrag zu erhöhen`, // TODO: Update translation copy SDK-2210\n impactShareText: ({ brandName = \"\" }) => `Hilf ${brandName} ihre Spendenziel zu erreichen`,\n impactShareTitle: () => `In den sozialen Medien teilen`,\n impactShareCopy: () => `Kopieren`,\n impactShareDownload: () => `Herunterladen`,\n impactShareClose: () => `Schließen`,\n },\n es: {\n impactShareButton: () => \"Comparte para aumentar nuestro impacto\", // TODO: Update translation copy SDK-2210\n impactShareText: ({ brandName = \"\" }) =>\n `Comparte en las redes sociales para ayudar a ${brandName} a alcanzar su objetivo.`,\n impactShareTitle: () => \"Compartir en redes sociales\",\n impactShareCopy: () => \"Copiar\",\n impactShareDownload: () => \"Descargar\",\n impactShareClose: () => \"Cerrar\",\n },\n it: {\n impactShareButton: () => \"Condividi, aiutaci a fare la differenza\", // TODO: Update translation copy SDK-2210\n impactShareText: ({ brandName = \"\" }) =>\n `Aiuta ${brandName} a raggiungere il suo obiettivo di donazione condividendo questa causa sui social media.`,\n impactShareTitle: () => \"Condividi, aiutaci a fare la differenza\",\n impactShareCopy: () => \"Copia\",\n impactShareDownload: () => \"Scarica\",\n impactShareClose: () => \"Chiudi\",\n },\n pl: {\n impactShareButton: () => `Udostępnij, by szerzyć naszą misję`, // TODO: Update translation copy SDK-2210\n impactShareText: ({ brandName = \"\" }) =>\n `Pomóż ${brandName} osiągnąć cel i podziel się tą inicjatywą na swoim profilu`,\n impactShareTitle: () => `Udostępnij na swoim profilu`,\n impactShareCopy: () => `Kopiuj`,\n impactShareDownload: () => `Pobierz`,\n impactShareClose: () => `Zamknij`,\n },\n ja: {\n impactShareButton: () => `活動の輪を広げよう`,\n impactShareText: ({ brandName = \"\" }) =>\n `${brandName}の寄付目標達成に向けて、SNSでこの活動を是非シェアしてください。`,\n impactShareTitle: () => `SNSでシェアする`,\n impactShareCopy: () => `コピー`,\n impactShareDownload: () => `ダウンロード`,\n impactShareClose: () => `閉じる`,\n },\n};\n"],"names":["BeamProgressBar","LitElement","html","css","__decorateClass","property","progressBarConfigDefaults","postSocialShareAnalyticsEvent","baseUrl","apiKey","requestBody","url","body","fetchJson","error","urlToFile","r","u","blob","strings","brandName"],"mappings":"oPAGaA,UAAwBC,CAAW,CAAzC,aAAA,CAAA,MAAA,GAAA,SAAA,EACuB,KAAA,MAAQ,EACP,KAAA,gBAAkB,EAAA,CAE/C,QAAS,CACP,OAAOC;AAAAA;AAAAA;AAAAA,sCAG2B,KAAK,KAAK;AAAA;AAAA;AAAA;AAAA,WAK9C,CAgDF,CA7DaF,EAeJ,OAASG;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,IAdYC,EAAA,CAA3BC,EAAS,CAAE,KAAM,MAAO,CAAC,CAAA,EADfL,EACiB,UAAA,OAAA,EACCI,EAAA,CAA5BC,EAAS,CAAE,KAAM,OAAQ,CAAC,GAFhBL,EAEkB,UAAA,iBAAA,EA6D/B,eAAe,IAAI,mBAAmB,GAAK,eAAe,OAAO,oBAAqBA,CAAe,EAE9F,MAAMM,EAA4B,CACvC,mCAAoC,MACpC,4CAA6C,MAC7C,4BAA6B,MAC7B,sCAAuC,cACvC,kCAAmC,MACnC,kCAAmC,eACnC,+BAAgC,eAChC,6CAA8C,KAC9C,iDAAkD,IACpD,ECnEA,eAAsBC,EAA8B,CAClD,QAAAC,EACA,OAAAC,EACA,YAAAC,CACF,EAIkB,CAChB,GAAI,CACF,MAAMC,EAAMH,EAAU,6BAChBI,EAAO,KAAK,UAAUF,CAAW,EACvC,MAAMG,EAAUF,EAAK,CACnB,OAAQ,OACR,KAAAC,EACA,QAAS,CAAE,cAAe,WAAWH,CAAM,EAAG,CAChD,CAAC,CACH,OAASK,EAAY,CACnB,QAAQ,MAAMA,CAAK,CACrB,CACF,CC/BO,MAAMC,EAAY,MAAOJ,GACvB,MAAMA,CAAG,EAAE,KAAK,MAAOK,GAAM,CAClC,MAAMC,EAAI,IAAI,IAAIN,CAAG,EACfO,EAAO,MAAMF,EAAE,OACrB,OAAO,IAAI,KAAK,CAACE,CAAI,EAAGD,EAAE,SAAU,CAAE,KAAMC,EAAK,IAAK,CAAC,CACzD,CAAC,ECLUC,EAAU,CACrB,GAAI,CACF,kBAAmB,IAAM,4BACzB,gBAAiB,CAAC,CAAE,UAAAC,EAAY,EAAG,IACjC,QAAQA,CAAS,iEACnB,iBAAkB,IAAM,wBACxB,gBAAiB,IAAM,OACvB,oBAAqB,IAAM,WAC3B,iBAAkB,IAAM,OAC1B,EACA,GAAI,CACF,kBAAmB,IAAM,sCACzB,gBAAiB,CAAC,CAAE,UAAAA,EAAY,EAAG,IACjC,SAASA,CAAS,oFACpB,iBAAkB,IAAM,wCACxB,gBAAiB,IAAM,SACvB,oBAAqB,IAAM,oBAC3B,iBAAkB,IAAM,QAC1B,EACA,GAAI,CACF,kBAAmB,IAAM,yCACzB,gBAAiB,CAAC,CAAE,UAAAA,EAAY,EAAG,IAAM,QAAQA,CAAS,iCAC1D,iBAAkB,IAAM,gCACxB,gBAAiB,IAAM,WACvB,oBAAqB,IAAM,gBAC3B,iBAAkB,IAAM,cAC1B,EACA,GAAI,CACF,kBAAmB,IAAM,yCACzB,gBAAiB,CAAC,CAAE,UAAAA,EAAY,EAAG,IACjC,gDAAgDA,CAAS,2BAC3D,iBAAkB,IAAM,8BACxB,gBAAiB,IAAM,SACvB,oBAAqB,IAAM,YAC3B,iBAAkB,IAAM,QAC1B,EACA,GAAI,CACF,kBAAmB,IAAM,0CACzB,gBAAiB,CAAC,CAAE,UAAAA,EAAY,EAAG,IACjC,SAASA,CAAS,2FACpB,iBAAkB,IAAM,0CACxB,gBAAiB,IAAM,QACvB,oBAAqB,IAAM,UAC3B,iBAAkB,IAAM,QAC1B,EACA,GAAI,CACF,kBAAmB,IAAM,yDACzB,gBAAiB,CAAC,CAAE,UAAAA,EAAY,EAAG,IACjC,iBAASA,CAAS,2FACpB,iBAAkB,IAAM,mCACxB,gBAAiB,IAAM,SACvB,oBAAqB,IAAM,UAC3B,iBAAkB,IAAM,SAC1B,EACA,GAAI,CACF,kBAAmB,IAAM,yDACzB,gBAAiB,CAAC,CAAE,UAAAA,EAAY,EAAG,IACjC,GAAGA,CAAS,0LACd,iBAAkB,IAAM,0CACxB,gBAAiB,IAAM,qBACvB,oBAAqB,IAAM,uCAC3B,iBAAkB,IAAM,oBAC1B,CACF"}
@@ -1,4 +1,4 @@
1
- import{i as x}from"./is-all-html-elements-fcB7UUA1.esm.js";import{a as y,b as d,D as v,n as s}from"./lit-JRlupCB5.esm.js";import{p as m,u as p,s as r}from"./share-button-DXS3zbJz.esm.js";import{D as S}from"./routes-DSu5s3K7.esm.js";import"./vendor-ckSdd6aH.esm.js";const I=(l,{source:e="contentLength"}={})=>{const a=l instanceof NodeList?Array.from(l):l;if(a.length===0||!x(a))return;const i=(e==="contentLength"?a.sort((t,o)=>o.innerText.length-t.innerText.length)[0]:a.sort((t,o)=>o.clientHeight-t.clientHeight)[0])?.clientHeight||0;for(const t of a)t.clientHeight!==i&&(t.style.height=i+"px")};function w(){return/Android|iPhone/i.test(navigator.userAgent)}var C=Object.defineProperty,h=(l,e,a,i)=>{for(var t=void 0,o=l.length-1,c;o>=0;o--)(c=l[o])&&(t=c(e,a,t)||t);return t&&C(e,a,t),t};class n extends y{constructor(){super(...arguments),this.shareIcon=null,this.imageUrl=null,this.brandName=null,this.buttonText=null,this.configLang="en",this.baseUrl=S,this.nonprofitId=null,this.storeId=null,this.transactionId=null}connectedCallback(){super.connectedCallback()}async handleShareClick(){try{if(!this.imageUrl||!this.brandName||!this.configLang)return;await import("./_share-dialog-dependencies-Bk60ibnw.esm.js");const{nonprofitId:e,storeId:a,transactionId:i,baseUrl:t,apiKey:o}=this;m({baseUrl:t,apiKey:o,requestBody:{eventName:"shareImageButtonClick",nonprofitId:e,storeId:a,timestamp:Date.now(),transactionId:i}}).catch(()=>null),w()?this.openSystemShareSheet(this.imageUrl):this.handleShareDialog(this.imageUrl,this.brandName)}catch(e){console.error("Error sharing impact:",e)}}async handleShareDialog(e,a){if(!e)return;const i=this.shadowRoot?.querySelector("sl-dialog");if(i){i.show();return}await import("./_share-dialog-dependencies-Bk60ibnw.esm.js");const t=this.shadowRoot?.querySelector("#modal-root"),o=await p(e),c=URL.createObjectURL(o),b=()=>{this.shadowRoot?.querySelector("sl-dialog")?.hide()},g=async()=>{m({baseUrl:this.baseUrl,apiKey:this.apiKey,requestBody:{eventName:"copyImageButtonClick",nonprofitId:this.nonprofitId,storeId:this.storeId,timestamp:Date.now(),transactionId:this.transactionId}}).catch(()=>null),await navigator.clipboard.write([new ClipboardItem({"image/png":o})]),setTimeout(b,250)},u=()=>{m({baseUrl:this.baseUrl,apiKey:this.apiKey,requestBody:{eventName:"downloadImageButtonClick",nonprofitId:this.nonprofitId,storeId:this.storeId,timestamp:Date.now(),transactionId:this.transactionId}}).catch(()=>null),setTimeout(b,250)},f=d`
1
+ import{a as x}from"./index-Dm-K2MLY.esm.js";import{a as y,b as d,D as v,n as s}from"./lit-BEag9MFp.esm.js";import{p as m,u as p,s as r}from"./share-button-5gfPmeEh.esm.js";import{D as S}from"./utils-C5hmbxa4.esm.js";import"./vendor-DUOg5fL-.esm.js";const I=(l,{source:e="contentLength"}={})=>{const a=l instanceof NodeList?Array.from(l):l;if(a.length===0||!x(a))return;const i=(e==="contentLength"?a.sort((t,o)=>o.innerText.length-t.innerText.length)[0]:a.sort((t,o)=>o.clientHeight-t.clientHeight)[0])?.clientHeight||0;for(const t of a)t.clientHeight!==i&&(t.style.height=i+"px")};function w(){return/Android|iPhone/i.test(navigator.userAgent)}var C=Object.defineProperty,h=(l,e,a,i)=>{for(var t=void 0,o=l.length-1,c;o>=0;o--)(c=l[o])&&(t=c(e,a,t)||t);return t&&C(e,a,t),t};class n extends y{constructor(){super(...arguments),this.shareIcon=null,this.imageUrl=null,this.brandName=null,this.buttonText=null,this.configLang="en",this.baseUrl=S,this.nonprofitId=null,this.storeId=null,this.transactionId=null}connectedCallback(){super.connectedCallback()}async handleShareClick(){try{if(!this.imageUrl||!this.brandName||!this.configLang)return;await import("./_share-dialog-dependencies-BEUnzuWq.esm.js");const{nonprofitId:e,storeId:a,transactionId:i,baseUrl:t,apiKey:o}=this;m({baseUrl:t,apiKey:o,requestBody:{eventName:"shareImageButtonClick",nonprofitId:e,storeId:a,timestamp:Date.now(),transactionId:i}}).catch(()=>null),w()?this.openSystemShareSheet(this.imageUrl):this.handleShareDialog(this.imageUrl,this.brandName)}catch(e){console.error("Error sharing impact:",e)}}async handleShareDialog(e,a){if(!e)return;const i=this.shadowRoot?.querySelector("sl-dialog");if(i){i.show();return}await import("./_share-dialog-dependencies-BEUnzuWq.esm.js");const t=this.shadowRoot?.querySelector("#modal-root"),o=await p(e),c=URL.createObjectURL(o),b=()=>{this.shadowRoot?.querySelector("sl-dialog")?.hide()},g=async()=>{m({baseUrl:this.baseUrl,apiKey:this.apiKey,requestBody:{eventName:"copyImageButtonClick",nonprofitId:this.nonprofitId,storeId:this.storeId,timestamp:Date.now(),transactionId:this.transactionId}}).catch(()=>null),await navigator.clipboard.write([new ClipboardItem({"image/png":o})]),setTimeout(b,250)},u=()=>{m({baseUrl:this.baseUrl,apiKey:this.apiKey,requestBody:{eventName:"downloadImageButtonClick",nonprofitId:this.nonprofitId,storeId:this.storeId,timestamp:Date.now(),transactionId:this.transactionId}}).catch(()=>null),setTimeout(b,250)},f=d`
2
2
  <style>
3
3
  .plain-button {
4
4
  border: none;
@@ -169,4 +169,4 @@ import{i as x}from"./is-all-html-elements-fcB7UUA1.esm.js";import{a as y,b as d,
169
169
  </button>
170
170
  <div id="modal-root"></div>
171
171
  `}}h([s({type:String})],n.prototype,"shareIcon"),h([s({type:String})],n.prototype,"imageUrl"),h([s({type:String})],n.prototype,"brandName"),h([s({type:String})],n.prototype,"buttonText"),h([s({type:String})],n.prototype,"configLang"),h([s({type:String})],n.prototype,"baseUrl"),h([s({type:String})],n.prototype,"nonprofitId"),h([s({type:String})],n.prototype,"storeId"),h([s({type:String})],n.prototype,"transactionId"),h([s({type:String})],n.prototype,"apiKey"),customElements.get("beam-share-button")||customElements.define("beam-share-button",n);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,I as s};
172
- //# sourceMappingURL=share-button-Dzc7loia.esm.js.map
172
+ //# sourceMappingURL=share-button-C4yPLL_t.esm.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"share-button-DkTpGZk1.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 { postSocialShareAnalyticsEvent } from \"../../api-sdk/v2/users/events\";\nimport { DEFAULT_BASE_URL } from \"../../api-sdk/constants\";\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 @property({ type: String }) baseUrl: string = DEFAULT_BASE_URL;\n @property({ type: String }) nonprofitId?: number | null = null;\n @property({ type: String }) storeId?: number | null = null;\n @property({ type: String }) transactionId?: number | null = null;\n @property({ type: String }) apiKey!: string;\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\n const { nonprofitId, storeId, transactionId, baseUrl, apiKey } = this;\n void postSocialShareAnalyticsEvent({\n baseUrl,\n apiKey,\n requestBody: { eventName: \"shareImageButtonClick\", nonprofitId, storeId, timestamp: Date.now(), transactionId },\n }).catch(() => null);\n\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 void postSocialShareAnalyticsEvent({\n baseUrl: this.baseUrl,\n apiKey: this.apiKey,\n requestBody: {\n eventName: \"copyImageButtonClick\",\n nonprofitId: this.nonprofitId,\n storeId: this.storeId,\n timestamp: Date.now(),\n transactionId: this.transactionId,\n },\n }).catch(() => null);\n await navigator.clipboard.write([new ClipboardItem({ \"image/png\": file })]);\n setTimeout(handleClickClose, 250);\n };\n\n const handleClickDownload = () => {\n void postSocialShareAnalyticsEvent({\n baseUrl: this.baseUrl,\n apiKey: this.apiKey,\n requestBody: {\n eventName: \"downloadImageButtonClick\",\n nonprofitId: this.nonprofitId,\n storeId: this.storeId,\n timestamp: Date.now(),\n transactionId: this.transactionId,\n },\n }).catch(() => null);\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\n data-speedsize-ignore=\"true\"\n src=\"${imageUrl}\"\n alt=\"${strings[this.configLang].impactShareTitle()}\"\n class=\"share-image\"\n />\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\n .share({\n files: [file],\n })\n .then(() => {\n const { nonprofitId, storeId, transactionId, baseUrl, apiKey } = this;\n void postSocialShareAnalyticsEvent({\n baseUrl,\n apiKey,\n requestBody: { eventName: \"shareSheetShare\", nonprofitId, storeId, timestamp: Date.now(), transactionId },\n }).catch(() => null);\n })\n .catch(() => null);\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\n @click=\"${this.handleShareClick}\"\n baseUrl=\"${this.baseUrl}\"\n class=\"share-button share-button-inline button icon-button\"\n >\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","v","o","l","e","n","r","i","BeamShareButton","LitElement","DEFAULT_BASE_URL","nonprofitId","storeId","transactionId","baseUrl","apiKey","postSocialShareAnalyticsEvent","err","imageUrl","brandName","existingDialog","modalRoot","file","urlToFile","dataUrl","handleClickClose","handleClickCopy","handleClickDownload","dialogTemplate","html","strings","render","__decorateClass","property","shareButtonConfigDefaults"],"mappings":"yQAaO,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,CAAAJ,EAAAK,EAAAC,EAAAC,IAAA,CAAA,QAAA,EAAA,OAAAC,EAAAR,EAAA,OAAA,EAAAS,EAAAD,GAAA,EAAAA,KAAAC,EAAAT,EAAAQ,CAAA,KAAA,EAAAC,EAAAJ,EAAAC,EAAA,CAAA,GAAA,GAAA,OAAA,GAAAH,EAAAE,EAAAC,EAAA,CAAA,EAAA,CAAA,EAeO,MAAMI,UAAwBC,CAAW,CAAzC,aAAA,CAAA,MAAA,GAAA,SAAA,EACuB,KAAA,UAA2B,KAC3B,KAAA,SAA2B,KAC3B,KAAA,UAA2B,KAC3B,KAAA,WAA6B,KAC7B,gBAAwB,KACxB,KAAA,QAAkBC,EAClB,KAAA,YAA8B,KAC9B,KAAA,QAA0B,KAC1B,KAAA,cAAgC,IAAA,CAG5D,mBAAoB,CAClB,MAAM,kBAAA,CACR,CAEA,MAAM,kBAAmB,CACvB,GAAI,CACF,GAAI,CAAC,KAAK,UAAY,CAAC,KAAK,WAAa,CAAC,KAAK,WAAY,OAC3D,aAAa,8CAAiC,EAE9C,KAAM,CAAE,YAAAC,EAAa,QAAAC,EAAS,cAAAC,EAAe,QAAAC,EAAS,OAAAC,CAAO,EAAI,KAC5DC,EAA8B,CACjC,QAAAF,EACA,OAAAC,EACA,YAAa,CAAE,UAAW,wBAAyB,YAAAJ,EAAa,QAAAC,EAAS,UAAW,KAAK,IAAA,EAAO,cAAAC,CAAc,CAChH,CAAC,EAAE,MAAM,IAAM,IAAI,EAEfb,EAAAA,EACF,KAAK,qBAAqB,KAAK,QAAQ,EAEvC,KAAK,kBAAkB,KAAK,SAAU,KAAK,SAAS,CAExD,OAASiB,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,KAAA,EACf,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,KAAA,CACpE,EAEMC,EAAkB,SAAY,CAC7BV,EAA8B,CACjC,QAAS,KAAK,QACd,OAAQ,KAAK,OACb,YAAa,CACX,UAAW,uBACX,YAAa,KAAK,YAClB,QAAS,KAAK,QACd,UAAW,KAAK,IAAA,EAChB,cAAe,KAAK,aACtB,CACF,CAAC,EAAE,MAAM,IAAM,IAAI,EACnB,MAAM,UAAU,UAAU,MAAM,CAAC,IAAI,cAAc,CAAE,YAAaM,CAAK,CAAC,CAAC,CAAC,EAC1E,WAAWG,EAAkB,GAAG,CAClC,EAEME,EAAsB,IAAM,CAC3BX,EAA8B,CACjC,QAAS,KAAK,QACd,OAAQ,KAAK,OACb,YAAa,CACX,UAAW,2BACX,YAAa,KAAK,YAClB,QAAS,KAAK,QACd,UAAW,KAAK,IAAA,EAChB,cAAe,KAAK,aACtB,CACF,CAAC,EAAE,MAAM,IAAM,IAAI,EACnB,WAAWS,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;AAAA;AAAA,iBAGtED,CAAQ;AAAA,iBACRY,EAAQ,KAAK,UAAU,EAAE,kBAAkB;AAAA;AAAA;AAAA;AAAA;AAAA,8EAKkBJ,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,UACH,MAAM,CACL,MAAO,CAACI,CAAI,CACd,CAAC,EACA,KAAK,IAAM,CACV,KAAM,CAAE,YAAAX,EAAa,QAAAC,EAAS,cAAAC,EAAe,QAAAC,EAAS,OAAAC,CAAO,EAAI,KAC5DC,EAA8B,CACjC,QAAAF,EACA,OAAAC,EACA,YAAa,CAAE,UAAW,kBAAmB,YAAAJ,EAAa,QAAAC,EAAS,UAAW,KAAK,MAAO,cAAAC,CAAc,CAC1G,CAAC,EAAE,MAAM,IAAM,IAAI,CACrB,CAAC,EACA,MAAM,IAAM,IAAI,CAEvB,CAEA,sBAAuB,CACrB,MAAM,sBACR,CACA,QAAS,CACP,MAAI,CAAC,KAAK,UAAY,CAAC,KAAK,WAAa,CAAC,KAAK,WAAmBgB,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,kBA0CO,KAAK,gBAAgB;AAAA,mBACpB,KAAK,OAAO;AAAA;AAAA;AAAA;AAAA,kBAIb,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,CAvS8BE,EAAA,CAA3BC,EAAS,CAAE,KAAM,MAAO,CAAC,CAAA,EADfzB,EACiB,UAAA,WAAA,EACAwB,EAAA,CAA3BC,EAAS,CAAE,KAAM,MAAO,CAAC,GAFfzB,EAEiB,UAAA,UAAA,EACAwB,EAAA,CAA3BC,EAAS,CAAE,KAAM,MAAO,CAAC,CAAA,EAHfzB,EAGiB,uBACAwB,EAAA,CAA3BC,EAAS,CAAE,KAAM,MAAO,CAAC,CAAA,EAJfzB,EAIiB,UAAA,YAAA,EACAwB,EAAA,CAA3BC,EAAS,CAAE,KAAM,MAAO,CAAC,CAAA,EALfzB,EAKiB,UAAA,YAAA,EACAwB,EAAA,CAA3BC,EAAS,CAAE,KAAM,MAAO,CAAC,GANfzB,EAMiB,UAAA,SAAA,EACAwB,EAAA,CAA3BC,EAAS,CAAE,KAAM,MAAO,CAAC,CAAA,EAPfzB,EAOiB,yBACAwB,EAAA,CAA3BC,EAAS,CAAE,KAAM,MAAO,CAAC,CAAA,EARfzB,EAQiB,UAAA,SAAA,EACAwB,EAAA,CAA3BC,EAAS,CAAE,KAAM,MAAO,CAAC,GATfzB,EASiB,UAAA,eAAA,EACAwB,EAAA,CAA3BC,EAAS,CAAE,KAAM,MAAO,CAAC,GAVfzB,EAUiB,UAAA,QAAA,EAgS9B,eAAe,IAAI,mBAAmB,GAAK,eAAe,OAAO,oBAAqBA,CAAe,QAExF0B,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-C4yPLL_t.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 { postSocialShareAnalyticsEvent } from \"../../api-sdk/v2/users/events\";\nimport { DEFAULT_BASE_URL } from \"../../api-sdk/constants\";\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 @property({ type: String }) baseUrl: string = DEFAULT_BASE_URL;\n @property({ type: String }) nonprofitId?: number | null = null;\n @property({ type: String }) storeId?: number | null = null;\n @property({ type: String }) transactionId?: number | null = null;\n @property({ type: String }) apiKey!: string;\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\n const { nonprofitId, storeId, transactionId, baseUrl, apiKey } = this;\n void postSocialShareAnalyticsEvent({\n baseUrl,\n apiKey,\n requestBody: { eventName: \"shareImageButtonClick\", nonprofitId, storeId, timestamp: Date.now(), transactionId },\n }).catch(() => null);\n\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 void postSocialShareAnalyticsEvent({\n baseUrl: this.baseUrl,\n apiKey: this.apiKey,\n requestBody: {\n eventName: \"copyImageButtonClick\",\n nonprofitId: this.nonprofitId,\n storeId: this.storeId,\n timestamp: Date.now(),\n transactionId: this.transactionId,\n },\n }).catch(() => null);\n await navigator.clipboard.write([new ClipboardItem({ \"image/png\": file })]);\n setTimeout(handleClickClose, 250);\n };\n\n const handleClickDownload = () => {\n void postSocialShareAnalyticsEvent({\n baseUrl: this.baseUrl,\n apiKey: this.apiKey,\n requestBody: {\n eventName: \"downloadImageButtonClick\",\n nonprofitId: this.nonprofitId,\n storeId: this.storeId,\n timestamp: Date.now(),\n transactionId: this.transactionId,\n },\n }).catch(() => null);\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\n data-speedsize-ignore=\"true\"\n src=\"${imageUrl}\"\n alt=\"${strings[this.configLang].impactShareTitle()}\"\n class=\"share-image\"\n />\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\n .share({\n files: [file],\n })\n .then(() => {\n const { nonprofitId, storeId, transactionId, baseUrl, apiKey } = this;\n void postSocialShareAnalyticsEvent({\n baseUrl,\n apiKey,\n requestBody: { eventName: \"shareSheetShare\", nonprofitId, storeId, timestamp: Date.now(), transactionId },\n }).catch(() => null);\n })\n .catch(() => null);\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\n @click=\"${this.handleShareClick}\"\n baseUrl=\"${this.baseUrl}\"\n class=\"share-button share-button-inline button icon-button\"\n >\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","v","o","l","e","n","r","i","BeamShareButton","LitElement","DEFAULT_BASE_URL","nonprofitId","storeId","transactionId","baseUrl","apiKey","postSocialShareAnalyticsEvent","err","imageUrl","brandName","existingDialog","modalRoot","file","urlToFile","dataUrl","handleClickClose","handleClickCopy","handleClickDownload","dialogTemplate","html","strings","render","__decorateClass","property","shareButtonConfigDefaults"],"mappings":"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"}
@@ -1,6 +1,5 @@
1
1
  import * as lodash from 'lodash';
2
- import { B as BeamBaseAPIConfig } from './types-DfRc36jU.esm.js';
3
- import { a as TCartApi } from './cart-contents-CEoSx3y4.esm.js';
2
+ import { g as BeamBaseAPIConfig, h as TCartApi, M as MemoizedLast } from './utils-COGFpDER.esm.js';
4
3
 
5
4
  type BeamCartAPIConfig = BeamBaseAPIConfig & {
6
5
  storeId: number;
@@ -21,7 +20,7 @@ type BeamCartValues = {
21
20
  * const BeamConfig = { apiKey: 'abc-123' }
22
21
  * const { beamCartId } = await updateCart(BeamConfig, { beamCartId, itemCount, subtotal, currencyCode })
23
22
  * */
24
- declare const updateCart: lodash.DebouncedFuncLeading<(config: BeamCartAPIConfig, cartValues: BeamCartValues, isFirstCartUpdateOnPageLoad?: any) => Promise<void>>;
23
+ declare const updateCart: lodash.DebouncedFuncLeading<MemoizedLast<(config: BeamCartAPIConfig, cartValues: BeamCartValues, isFirstCartUpdateOnPageLoad?: any) => Promise<void>>>;
25
24
 
26
25
  export { updateCart as u };
27
26
  export type { BeamCartAPIConfig as B, BeamCartValues as a };
@@ -0,0 +1,2 @@
1
+ import{i as L,d as Me}from"./lodash-CrMU6wKg.esm.js";const Ke="https://api.beamimpact.com",Fe="https://production.beamimpactlogs.com",Ue={en:"en",fr:"fr",de:"de",es:"es",it:"it",pl:"pl",ja:"ja"},Je={select_nonprofit:"select-nonprofit",redeem_transaction:"redeem-transaction",impact_overview:"impact-overview",community_impact:"community-impact",cumulative_impact:"cumulative-impact",product_details_page:"product-details-page",subscription_management:"subscription-management",subscription_impact:"subscription-impact",select_subscription_nonprofit:"select-subscription-nonprofit",social_share:"social-share",subscriber_select_nonprofit:"subscriber-select-nonprofit"},De={subscription_management_widget:"subscription_management_widget",subscriber_select_nonprofit_widget:"subscriber_select_nonprofit_widget"},$e={cart_update:"cart_update"},C={TRANSACTION:"transaction",CART:"cart",PROMO:"promos",NONPROFIT:"nonprofit",NONPROFIT_SELECTED_AT:"nonprofit_selected_at",CHAIN_NONPROFITS:"chainNonprofits",REMOTE_SESSION_ID:"remote_session_id"},f={CART:"beam_cart",PROMO_CODES:"beam_promo_codes",SESSION:"beam_session",STATSIG_STABLE_ID:"beam_statsig_session_id"};class l extends Error{constructor(e,{cause:o,name:a="BeamError"}={}){super(e,{cause:o}),this.name=a,this.supportUrl="https://beamimpact.com"}}class R extends l{constructor(e,o,a){super(a,{name:"BeamNetworkError"}),this.response=e,this.body=o}}class x extends l{constructor(e=[],o){super(o,{name:"BeamMissingConfig"}),this.missingConfigKeyNames=e}}class v extends l{constructor(e){super(e,{name:"BeamLocalStorageError"})}}class k extends l{constructor(e){super(e,{name:"BeamSetupError"})}}var T=Object.freeze({__proto__:null,BeamError:l,LocalStorageError:v,MissingConfig:x,NetworkError:R,SetupError:k});const g="\u{1F308} Beam:",d={error:(...t)=>console.error(g,...t),log:(...t)=>console.log(g,...t),warn:(...t)=>console.warn(g,...t),debug:(...t)=>console.debug(g,...t)},M=class he extends CustomEvent{constructor(e){super(he.eventName,{detail:e,bubbles:!0,composed:!0})}};M.eventName="beamnetworkcall";let E=M;const K=class ye extends CustomEvent{constructor(e){super(ye.eventName,{detail:e,bubbles:!0,composed:!0})}};K.eventName="beamnonprofitselect";let F=K;const U=class we extends CustomEvent{constructor(e){super(we.eventName,{detail:e,bubbles:!0,composed:!0})}};U.eventName="beamcartchange";let J=U;const D=class Oe extends CustomEvent{constructor(e){super(Oe.eventName,{detail:e,bubbles:!0,composed:!0})}};D.eventName="beamcartcreated";let $=D;const j=class Ie extends CustomEvent{constructor(e){super(Ie.eventName,{detail:e,bubbles:!0,composed:!0})}};j.eventName="beamordercreated";let q=j;const z=class Ae extends CustomEvent{constructor(e){super(Ae.eventName,{detail:e,bubbles:!0,composed:!0})}};z.eventName="beamstatuschange";let W=z;const G=class Be extends CustomEvent{constructor(e){super(Be.eventName,{detail:e,bubbles:!0,composed:!0})}};G.eventName="beamnonprofitselectionremoved";let H=G;const V=class Le extends CustomEvent{constructor(e){super(Le.eventName,{detail:e,bubbles:!0,composed:!0})}};V.eventName="beampromocodesstored";let X=V;const Y=class Re extends CustomEvent{constructor(e){super(Re.eventName,{detail:e,bubbles:!0,composed:!0})}};Y.eventName="beamwidgetstoredpromocodes";let Q=Y;const Z=class xe extends CustomEvent{constructor(e){super(xe.eventName,{detail:e,bubbles:!0,composed:!0})}};Z.eventName="beamwidgetinitialnonprofitsync";let ee=Z;const te=class ke extends CustomEvent{constructor(e){super(ke.eventName,{detail:e,bubbles:!0,composed:!0})}};te.eventName="beamwidgetinitialnonprofitsynccancel";let oe=te;const re=class Te extends CustomEvent{constructor(e){super(Te.eventName,{detail:e,bubbles:!0,composed:!0})}};re.eventName="beamstatsiginitialized";let ae=re;var se=Object.freeze({__proto__:null,BeamCartChangeEvent:J,BeamCartCreatedEvent:$,BeamNetworkCallEvent:E,BeamNonprofitSelectEvent:F,BeamNonprofitSelectionRemovedEvent:H,BeamOrderCreatedEvent:q,BeamPromoCodesStoredEvent:X,BeamStatsigInitializedEvent:ae,BeamStatusChangeEvent:W,BeamWidgetInitialNonprofitSyncCancelEvent:oe,BeamWidgetInitialNonprofitSyncEvent:ee,BeamWidgetStoredPromoCodesEvent:Q});const je={apply:function(t,e,o){return t(...o).then(a=>{if(a.ok&&S){const r=a.clone();window.dispatchEvent(new E({url:o[0].toString(),method:(o[1]?.method||"get").toLowerCase(),type:"fetch",response:r}))}return a})}},qe={construct(t,e){const o=new t(...e),a=o.open;let r,s;return o.open=function(n,i){r=n,s=i,a.apply(this,arguments)},o.addEventListener("load",()=>{S&&window.dispatchEvent(new E({url:(s||"").toString(),method:(r||"get").toLowerCase(),type:"xhr",xhr:o}))}),o}};let ne=!1,S=!1;const ie=()=>{S=!0,!ne&&(window.fetch=new Proxy(window.fetch,je),XMLHttpRequest=new Proxy(XMLHttpRequest,qe),ne=!0)},me=()=>{S=!1},c=t=>({get prefix(){return"beam_"},get postfix(){return`_key_${t.apiKey}`},getItem(e){return localStorage.getItem(this.prefix+e+this.postfix)},setItem(e,o){return localStorage.setItem(this.prefix+e+this.postfix,`${o}`)},removeItem(e){return localStorage.removeItem(this.prefix+e+this.postfix)},getItemJson(e){try{const o=this.getItem(e);if(o)return JSON.parse(o)}catch{d.error(new v(`Could not parse JSON: ${e}`))}return null},setItemJson(e,o){return this.setItem(e,JSON.stringify(o))}});function ce(t,{timeout:e=1e4}={}){return new Promise((o,a)=>{let r=document.querySelector(t);if(r){o(r);return}let s;const n=setTimeout(()=>{r||(s?.disconnect(),a(new l(`Timed out waiting for '${t}'`)))},e);new MutationObserver((i,m)=>{s=m,Array.from(document.querySelectorAll(t)).forEach(u=>{r=u,o(u),m.disconnect(),clearTimeout(n)})}).observe(document.documentElement,{childList:!0,subtree:!0})})}const P=(t=document.cookie)=>t.split(";").reduce((e,o)=>{const a=o.trim(),[r,...s]=a.split("="),n=decodeURIComponent(s.join("="));return e.set(r,n)},new Map),p=t=>P().get(t),b=t=>{const{name:e,value:o,expires:a,...r}=t,s=encodeURIComponent(o),n=`${e}=${s}`,i=a!=null?` ;expires=${new Date(a).toUTCString()}`:"",m=Object.entries(r).map(([u,B])=>B!=null?` ;${u}=${B}`:"").join("");document.cookie=n+m+i},_=t=>{const{name:e,domain:o,path:a}=t,r={name:e,value:"",expires:0};return a!==void 0&&(r.path=a),o!==void 0&&(r.domain=o),b(r)},de=C.REMOTE_SESSION_ID;function le({remoteSessionId:t,apiKey:e=""}){c({apiKey:e}).setItem(de,t)}function ue({apiKey:t=""}){return c({apiKey:t}).getItem(de)}function pe(t,{isEqual:e=L}={}){let o=null,a=null,r=!1,s=0;const n=(...i)=>{if(r&&e(o,i))return a;const m=t(...i);if(m instanceof Promise){s++;const u=s;m.catch(()=>{u===s&&(r=!1)})}return o=i,a=m,r=!0,m};return n.reset=()=>{s++,o=null,a=null,r=!1},n}var N=(t=>(t.Manual="manual",t.Url="url",t))(N||{});const h=C.PROMO,y=f.PROMO_CODES,ze=100,We="utm_",Ge="discount_code",ve=()=>{const t=p(y);if(t)try{return JSON.parse(t)}catch(e){d.error("Failed to parse beam_promo_codes cookie:",e);return}},Ce=({validatedPromoCodes:t,domain:e})=>{const o={validatedPromoCodes:t},a=Date.now()+1e3*60*60*24*90;b({name:y,value:JSON.stringify(o),path:"/",domain:e,expires:a})},w=({apiKey:t})=>t?c({apiKey:t}).getItemJson(h)??{unvalidatedPromoCodes:[],validatedPromoCodes:[]}:(d.error(new v("API key is required to get promo codes")),null),O=({apiKey:t,promoCodes:e})=>{if(!t){d.error(new v("API key is required to set promo codes"));return}const o=c({apiKey:t}),a={unvalidatedPromoCodes:e?.unvalidatedPromoCodes||[],validatedPromoCodes:e?.validatedPromoCodes||[]};o.setItemJson(h,a)},I=({newPromos:t,apiKey:e})=>{const o=w({apiKey:e})??{unvalidatedPromoCodes:[],validatedPromoCodes:[]},a=(t?.unvalidatedPromoCodes||[]).filter(s=>!o.unvalidatedPromoCodes.some(n=>JSON.stringify(n)===JSON.stringify(s))),r={unvalidatedPromoCodes:[...o.unvalidatedPromoCodes,...a],validatedPromoCodes:[...o.validatedPromoCodes,...t?.validatedPromoCodes||[]]};return(r.unvalidatedPromoCodes.length>0||r.validatedPromoCodes.length>0)&&O({apiKey:e,promoCodes:r}),{...r}},A=t=>t.reduce((e,o)=>{const a=e||[];return o.url?a.push({type:N.Url,attributes:{url:o.url}}):o.value?a.push({type:N.Manual,attributes:{value:o.value}}):d.error("Invalid PromoAttribute - must contain either 'url' or 'value'",{attr:o}),a},[]),ge=(t,e)=>{const o=A(t);return I({newPromos:{unvalidatedPromoCodes:o},apiKey:e})},Ee=t=>{if(!t?.content)return[];const e=t.content.discounts?.filter(r=>r.applicable)?.map(r=>r.code)||[],o=t.content.items?.flatMap(r=>r.discounts?.filter(s=>s.applicable)?.map(s=>s.code)||[])||[],a=[...e,...o];return[...new Set(a)]},Se=()=>p(Ge)??null,be=t=>{if(!t)return[];try{const e=JSON.parse(t);return Array.isArray(e)&&e.every(o=>typeof o=="string")?e:[]}catch(e){return d.error("Failed to parse JSON:",e),[]}},fe=()=>{try{const t=new URL(window.location.href);if(!t.search)return;const e=new URL(t.origin+t.pathname);let o=!1;t.searchParams.forEach((r,s)=>{const n=s.startsWith(We),i=r.length<=ze;n&&i&&(e.searchParams.append(s,r),o=!0)});const a=e.toString();return o?{url:a}:void 0}catch{return}},Pe=(t,e)=>{const o=a=>(Array.isArray(a)?a:[]).map(r=>r.type==="manual"?r.attributes?.value:r.type==="url"?r.attributes?.url:"").filter(Boolean).sort().join(",");return o(t?.unvalidatedPromoCodes)===o(e?.unvalidatedPromoCodes)},_e=t=>(!t.unvalidatedPromoCodes||t.unvalidatedPromoCodes.length===0)&&(!t.validatedPromoCodes||t.validatedPromoCodes.length===0);function Ne(t){const e=c(t);Object.values(C).forEach(o=>e.removeItem(o)),Object.values(f).forEach(o=>_({name:o,domain:t.domain,path:"/"}))}var He=Object.freeze({__proto__:null,clearBeamStorage:Ne,createScopedLocalStorage:c,debounce:Me,deleteCookieValue:_,errors:T,events:se,formatStoreAndReturnPromoCodes:ge,getAllPromoCodesFromCookie:ve,getCookieMap:P,getCookieValue:p,getPromoCodeFromShopifyCookie:Se,getPromoCodesFromCart:Ee,getPromoCodesLocalStorage:w,getRemoteSession:ue,getSanitizedUrlForStorage:fe,initNetworkListeners:ie,isEmptyPromoData:_e,isEqual:L,logger:d,mapToUnvalidatedPromoCodes:A,memoizeLast:pe,mergeStoreAndReturnPromos:I,parseJsonStringArray:be,promoCodesAreEqual:Pe,saveRemoteSession:le,setCookieValue:b,setPromoCodeInCookie:Ce,setPromoCodesInLocalStorage:O,teardownNetworkListeners:me,waitForElement:ce});const Ve=(t,e)=>c(e).getItemJson("cart")?.beamCartId??p(t)??null,Xe=(t,e)=>c(e).getItemJson("cart")?.cartId??p(t)??null;function Ye(t){return{authorization:`Api-Key ${t}`}}export{A as $,Ve as A,F as B,_e as C,Ke as D,Q as E,be as F,Ee as G,O as H,Ce as I,Xe as J,H as K,C as L,ee as M,oe as N,J as O,x as P,pe as Q,ue as R,k as S,$e as T,E as U,Ne as V,Je as W,me as X,_ as Y,T as Z,ve as _,P as a,I as a0,h as a1,y as a2,R as a3,v as a4,ie as b,W as c,Fe as d,se as e,w as f,p as g,ge as h,He as i,fe as j,Se as k,d as l,X as m,l as n,b as o,Pe as p,f as q,ae as r,le as s,$ as t,q as u,Ue as v,ce as w,Ye as x,De as y,c as z};
2
+ //# sourceMappingURL=utils-C5hmbxa4.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils-C5hmbxa4.esm.js","sources":["../../src/api-sdk/constants.ts","../../src/utils/beam-errors.ts","../../src/utils/logger.ts","../../src/utils/events.ts","../../src/utils/network-listeners.ts","../../src/utils/local-storage.ts","../../src/utils/wait-for-element.ts","../../src/utils/cookies.ts","../../src/utils/remote-session.ts","../../src/utils/memoize-last.ts","../../src/shared/promo-types.ts","../../src/utils/promoManager.ts","../../src/utils/clear-beam-storage.ts","../../src/utils/cart.ts","../../src/utils/makeApiKeyHeader.ts"],"sourcesContent":["import { LANGUAGES, TUrl } from \"./types\";\n\nexport const DEFAULT_BASE_URL: TUrl = \"https://api.beamimpact.com\";\n\nexport const DEFAULT_LOG_URL = \"https://production.beamimpactlogs.com\";\n\nexport const SUPPORTED_LANGUAGES: Record<string, LANGUAGES> = {\n en: \"en\",\n fr: \"fr\",\n de: \"de\",\n es: \"es\",\n it: \"it\",\n pl: \"pl\",\n ja: \"ja\",\n};\n\nexport const WIDGET_NAMES = {\n select_nonprofit: \"select-nonprofit\",\n redeem_transaction: \"redeem-transaction\",\n impact_overview: \"impact-overview\",\n community_impact: \"community-impact\",\n cumulative_impact: \"cumulative-impact\",\n product_details_page: \"product-details-page\",\n subscription_management: \"subscription-management\",\n subscription_impact: \"subscription-impact\",\n select_subscription_nonprofit: \"select-subscription-nonprofit\",\n social_share: \"social-share\",\n subscriber_select_nonprofit: \"subscriber-select-nonprofit\",\n} as const;\n\nexport const SELECTION_METHODS = {\n dashboard: \"dashboard\",\n remote_order: \"remote_order\",\n checkout: \"checkout\",\n subscription_management_widget: \"subscription_management_widget\",\n subscriber_select_nonprofit_widget: \"subscriber_select_nonprofit_widget\",\n} as const;\n\nexport const HELPER_NAMES = {\n cart_update: \"cart_update\",\n};\n\n/**\n * Every localStorage key this SDK writes.\n */\nexport const LOCAL_STORAGE_KEYS = {\n // Last selection id\n TRANSACTION: \"transaction\",\n // Cached cart snapshot used to detect changes across page loads/tabs\n CART: \"cart\",\n // Stored promo codes captured for the current cart\n PROMO: \"promos\",\n // Last-selected nonprofit id\n NONPROFIT: \"nonprofit\",\n // Timestamp of that nonprofit selection\n NONPROFIT_SELECTED_AT: \"nonprofit_selected_at\",\n // Cached chain nonprofit list\n CHAIN_NONPROFITS: \"chainNonprofits\",\n // Statsig stable id, mirrored into localStorage for cart-linking\n REMOTE_SESSION_ID: \"remote_session_id\",\n} as const;\n\n/**\n * Every cookie this SDK sets, across the cart integration and its sibling integrations.\n */\nexport const BEAM_COOKIE_NAMES = {\n // Beam's own cart id, used to identify the cart across subdomains\n CART: \"beam_cart\",\n // Promo codes captured for the current cart\n PROMO_CODES: \"beam_promo_codes\",\n // Cross-subdomain session id set by the separate Session integration\n SESSION: \"beam_session\",\n // Statsig A/B stable id, cached in a cookie to persist across subdomains\n STATSIG_STABLE_ID: \"beam_statsig_session_id\",\n} as const;\n","export class BeamError extends Error {\n supportUrl: string;\n constructor(msg?: string, { cause, name = \"BeamError\" }: { cause?: any; name?: string } = {}) {\n super(msg, { cause });\n this.name = name;\n this.supportUrl = \"https://beamimpact.com\";\n }\n}\n\nexport class NetworkError extends BeamError {\n /** Fetch Response object with .ok, .status, etc.*/\n response: Response;\n /** If network response included JSON payload, it is parsed and available here */\n body?: Record<string, string>;\n constructor(response: Response, body?: Record<string, string>, msg?: string) {\n super(msg, { name: \"BeamNetworkError\" });\n this.response = response;\n this.body = body;\n }\n}\n\nexport class MissingConfig extends BeamError {\n missingConfigKeyNames: string[];\n constructor(missingConfigKeyNames: string[] = [], msg?: string) {\n super(msg, { name: \"BeamMissingConfig\" });\n this.missingConfigKeyNames = missingConfigKeyNames;\n }\n}\n\nexport class LocalStorageError extends BeamError {\n constructor(msg?: string) {\n super(msg, { name: \"BeamLocalStorageError\" });\n }\n}\n\nexport class SetupError extends BeamError {\n constructor(msg?: string) {\n super(msg, { name: \"BeamSetupError\" });\n }\n}\n","const LOG_PREFIX = \"🌈 Beam:\";\n\n// This may eventually log output to Beam servers, control log verbosity, etc.\n// For now it is an alias of the default JS console\nexport const logger = {\n error: (...args: any[]) => console.error(LOG_PREFIX, ...args),\n log: (...args: any[]) => console.log(LOG_PREFIX, ...args),\n warn: (...args: any[]) => console.warn(LOG_PREFIX, ...args),\n debug: (...args: any[]) => console.debug(LOG_PREFIX, ...args),\n};\n","import { TCartApi } from \"../shared/cart-contents\";\nimport { TPromoCodeRequest } from \"../shared/promo-types\";\nimport { HelperName, TId, WidgetName } from \"../shared/types\";\n\n/* ------------------------------------------------------------------------------------------------------------------ */\n\ntype NetworkEventDetail =\n | { url: string; method: string; type: \"fetch\"; response: Response }\n | { url: string; method: string; type: \"xhr\"; xhr: XMLHttpRequest };\n\n/**\n * beamnetworkcall\n * Emitted by the Beam network listener whenever any API calls are made on the page\n */\nexport class BeamNetworkCallEvent extends CustomEvent<NetworkEventDetail> {\n static eventName = \"beamnetworkcall\" as const;\n constructor(detail: NetworkEventDetail) {\n super(BeamNetworkCallEvent.eventName, { detail, bubbles: true, composed: true });\n }\n}\n\n/* ------------------------------------------------------------------------------------------------------------------ */\n\ntype NonprofitSelectDetail = {\n selectionId?: string;\n selectedNonprofitId?: number | null;\n nonprofitName?: string | null;\n source?: WidgetName | null;\n timestamp?: Date;\n};\n\n/**\n * beamnonprofitselect\n * Emitted when the end user selects a nonprofit in the Beam widget, and when the previous selection was restored\n * automatically\n */\nexport class BeamNonprofitSelectEvent extends CustomEvent<NonprofitSelectDetail> {\n static eventName = \"beamnonprofitselect\" as const;\n constructor(detail: NonprofitSelectDetail) {\n super(BeamNonprofitSelectEvent.eventName, { detail, bubbles: true, composed: true });\n }\n}\n\n/* ------------------------------------------------------------------------------------------------------------------ */\n\ntype CartChangeDetail = TCartApi & {\n cartId?: string;\n subtotal?: number;\n itemCount?: number;\n currencyCode?: string;\n};\n\n/**\n * beamcartchange\n * Emitted when Beam detects that cart contents have changed, and when items are added to the cart for the first time\n */\nexport class BeamCartChangeEvent extends CustomEvent<CartChangeDetail> {\n static eventName = \"beamcartchange\" as const;\n constructor(detail: CartChangeDetail) {\n super(BeamCartChangeEvent.eventName, { detail, bubbles: true, composed: true });\n }\n}\n\n/* ------------------------------------------------------------------------------------------------------------------ */\n\ntype CartCreatedDetail = CartChangeDetail;\n\n/**\n * beamcartcreated\n * Emitted when a cart is created in Beam for the first time, but NOT when the cart is updated\n * Beam's cart expiration rules are used to determine when a returning visit counts as the same cart\n */\nexport class BeamCartCreatedEvent extends CustomEvent<CartCreatedDetail> {\n static eventName = \"beamcartcreated\" as const;\n constructor(detail: CartCreatedDetail) {\n super(BeamCartCreatedEvent.eventName, { detail, bubbles: true, composed: true });\n }\n}\n\n/* ------------------------------------------------------------------------------------------------------------------ */\n\ntype OrderCreatedDetail = {\n orderId: TId;\n transactionId: TId;\n cartTotal: number;\n currencyCode: string;\n};\n\n/**\n * beamordercreated\n * Emitted when an order is registered with Beam for the first time, but NOT on repeat visits, page refreshes, etc.\n */\nexport class BeamOrderCreatedEvent extends CustomEvent<OrderCreatedDetail> {\n static eventName = \"beamordercreated\" as const;\n\n constructor(detail: OrderCreatedDetail) {\n super(BeamOrderCreatedEvent.eventName, { detail, bubbles: true, composed: true });\n }\n}\n\n/* ------------------------------------------------------------------------------------------------------------------ */\n\n/**\n * beamstatuschange\n * Emitted when the Beam config object has finished initializing along with all plugins\n */\ntype BeamStatusChangeEventDetail = { status: \"pending\" } | { status: \"error\"; error: Error } | { status: \"ready\" };\nexport class BeamStatusChangeEvent extends CustomEvent<BeamStatusChangeEventDetail> {\n static eventName = \"beamstatuschange\" as const;\n\n constructor(detail: BeamStatusChangeEventDetail) {\n super(BeamStatusChangeEvent.eventName, { detail, bubbles: true, composed: true });\n }\n}\n\n/* ------------------------------------------------------------------------------------------------------------------ */\ntype NonprofitSelectionRemovedDetail = {\n previousNonprofitId?: number | null;\n newNonprofitId?: number | null;\n selectionId?: string;\n timestamp?: Date;\n};\n\n/**\n * beamnonprofitselectionremoved\n * Emitted when the nonprofit selection is removed from deselection or due to nonprofit cohort change\n */\nexport class BeamNonprofitSelectionRemovedEvent extends CustomEvent<NonprofitSelectionRemovedDetail> {\n static eventName = \"beamnonprofitselectionremoved\" as const;\n constructor(detail: NonprofitSelectionRemovedDetail) {\n super(BeamNonprofitSelectionRemovedEvent.eventName, { detail, bubbles: true, composed: true });\n }\n}\n\n/* ------------------------------------------------------------------------------------------------------------------ */\ntype PromoStoredDetail = {\n promoCodes: TPromoCodeRequest;\n};\n/**\n * Emitted when a URL with query parameters is sanitized and stored in localStorage\n *\n * @event beampromocodesstored\n */\nexport class BeamPromoCodesStoredEvent extends CustomEvent<PromoStoredDetail> {\n static eventName = \"beampromocodesstored\";\n\n constructor(detail: PromoStoredDetail) {\n super(BeamPromoCodesStoredEvent.eventName, { detail, bubbles: true, composed: true });\n }\n}\n\n/* ------------------------------------------------------------------------------------------------------------------ */\n\ntype WidgetStoredPromosDetail = {\n source?: WidgetName | HelperName | null;\n};\n/**\n * Emitted when a widget stores the url or manual promoCodes in local storage\n *\n * @event beamwidgetstoredpromocodes\n */\nexport class BeamWidgetStoredPromoCodesEvent extends CustomEvent<WidgetStoredPromosDetail> {\n static eventName = \"beamwidgetstoredpromocodes\" as const;\n\n constructor(detail: WidgetStoredPromosDetail) {\n super(BeamWidgetStoredPromoCodesEvent.eventName, { detail, bubbles: true, composed: true });\n }\n}\n\n/* ------------------------------------------------------------------------------------------------------------------ */\ntype WidgetInitialNonprofitSyncDetail = {\n nonprofitId?: number | null;\n nonprofitIdChanged?: boolean;\n selectionId?: string;\n selectionIdChanged?: boolean;\n};\n\n/**\n * [Shopify Specific] - Emitted the first time a widget restores nonprofit selection from custom attributes\n *\n * @event beamwidgetinitialnonprofitsync\n */\nexport class BeamWidgetInitialNonprofitSyncEvent extends CustomEvent<WidgetInitialNonprofitSyncDetail> {\n static eventName = \"beamwidgetinitialnonprofitsync\" as const;\n\n constructor(detail: WidgetInitialNonprofitSyncDetail) {\n super(BeamWidgetInitialNonprofitSyncEvent.eventName, { detail, bubbles: true, composed: true });\n }\n}\n\n/* ------------------------------------------------------------------------------------------------------------------ */\ntype BeamWidgetInitialNonprofitSyncCancelDetail = {\n cancelled?: boolean;\n};\n\n/**\n * [Shopify Specific] - Allows WidgetInitialNonprofitSyncDetail to be cancelled asynchronously\n *\n * @event beamwidgetinitialnonprofitsynccancel\n */\nexport class BeamWidgetInitialNonprofitSyncCancelEvent extends CustomEvent<BeamWidgetInitialNonprofitSyncCancelDetail> {\n static eventName = \"beamwidgetinitialnonprofitsynccancel\" as const;\n\n constructor(detail: BeamWidgetInitialNonprofitSyncCancelDetail) {\n super(BeamWidgetInitialNonprofitSyncCancelEvent.eventName, { detail, bubbles: true, composed: true });\n }\n}\n\n/* ------------------------------------------------------------------------------------------------------------------ */\ntype BeamStatsigInitializedDetail = {\n showBeam: boolean;\n stableId?: string;\n};\n\n/**\n * Fired when Statsig experiment assignments for Beam are initialized\n *\n * @event beamstatsiginitialized\n */\nexport class BeamStatsigInitializedEvent extends CustomEvent<BeamStatsigInitializedDetail> {\n static eventName = \"beamstatsiginitialized\" as const;\n\n constructor(detail: BeamStatsigInitializedDetail) {\n super(BeamStatsigInitializedEvent.eventName, { detail, bubbles: true, composed: true });\n }\n}\n","import { BeamNetworkCallEvent } from \"./events\";\n\n/**\n * Fetch Listener\n */\n\nconst fetchHandler = {\n apply: function (target: any, _thisArg: any, args: any[]) {\n return target(...args).then((response: Response) => {\n if (response.ok && networkListenersEnabled) {\n const responseCopy = response.clone();\n window.dispatchEvent(\n new BeamNetworkCallEvent({\n url: args[0].toString(),\n method: (args[1]?.method || \"get\").toLowerCase(),\n type: \"fetch\",\n response: responseCopy,\n }),\n );\n }\n return response;\n });\n },\n};\n\n/**\n * XMLHTTPRequest Listener\n */\nconst xhrHandler = {\n construct(TargetConstructor: any, args: any[]) {\n const xhr: XMLHttpRequest = new TargetConstructor(...args);\n const _open: (method: string, url: string | URL) => void = xhr.open;\n let _method: string;\n let _url: string | URL;\n\n xhr.open = function (method: string, url: string | URL) {\n _method = method;\n _url = url;\n // @ts-expect-error arguments is untyped since xhr.open is an overloaded method\n // eslint-disable-next-line prefer-rest-params\n _open.apply(this, arguments);\n };\n\n // The enabled flag is checked at dispatch time (inside the load callback),\n // so XHRs constructed before an opt-out also go quiet once torn down.\n xhr.addEventListener(\"load\", () => {\n if (!networkListenersEnabled) return;\n window.dispatchEvent(\n new BeamNetworkCallEvent({\n url: (_url || \"\").toString(),\n method: (_method || \"get\").toLowerCase(),\n type: \"xhr\",\n xhr,\n }),\n );\n });\n\n return xhr;\n },\n};\n\n/**\n * Side-Effects Setup (initialize listeners)\n */\n\nlet initializedListeners = false; // Proxies installed once, ever (never un-patched)\nlet networkListenersEnabled = false; // whether the Proxies currently dispatch Beam events\n\nexport const initNetworkListeners = () => {\n networkListenersEnabled = true;\n\n if (initializedListeners) return; // Proxies already installed; dispatching just re-enabled\n window.fetch = new Proxy(window.fetch, fetchHandler);\n XMLHttpRequest = new Proxy(XMLHttpRequest, xhrHandler);\n initializedListeners = true;\n};\n\n/**\n * Disables Beam event dispatching from the fetch/XHR Proxies without\n * un-patching them (un-patching is unsafe if another script wrapped\n * fetch/XHR after us — restoring our saved reference would remove\n * their wrapper too).\n */\nexport const teardownNetworkListeners = () => {\n networkListenersEnabled = false;\n};\n","import { LocalStorageError } from \"./beam-errors\";\nimport { logger } from \"./logger\";\n\n/**\n * Creates an object that has the same API as normal localStorage, but adds a beam_ prefix and apiKey postfix to keys\n * Also adds helper methods for JSON (de-)serialization\n */\nexport const createScopedLocalStorage = (config: { apiKey: string }) => {\n return {\n get prefix() {\n return `beam_`;\n },\n get postfix() {\n return `_key_${config.apiKey}`;\n },\n getItem(key: string): string | null {\n return localStorage.getItem(this.prefix + key + this.postfix);\n },\n setItem(key: string, value: unknown) {\n return localStorage.setItem(this.prefix + key + this.postfix, `${value}`);\n },\n removeItem(key: string) {\n return localStorage.removeItem(this.prefix + key + this.postfix);\n },\n /** Safely parses value as JSON and return JS object */\n getItemJson<T = Record<string, unknown>>(key: string) {\n try {\n const json = this.getItem(key);\n if (json) {\n return JSON.parse(json) as T;\n }\n } catch (err) {\n logger.error(new LocalStorageError(`Could not parse JSON: ${key}`));\n }\n return null;\n },\n /** Safely stringifies value as JSON */\n setItemJson(key: string, value: object) {\n return this.setItem(key, JSON.stringify(value));\n },\n };\n};\n","// Based on https://gist.github.com/jwilson8767/db379026efcbd932f64382db4b02853e (MIT License, JWilson)\n\nimport { BeamError } from \"./beam-errors\";\n\nexport function waitForElement(selector: string, { timeout = 10000 } = {}): Promise<Element> {\n return new Promise((resolve, reject) => {\n let el = document.querySelector(selector);\n if (el) {\n resolve(el);\n return;\n }\n\n let mutationObserver: MutationObserver;\n\n const timer = setTimeout(() => {\n if (el) return; // no need to reject\n mutationObserver?.disconnect();\n reject(new BeamError(`Timed out waiting for '${selector}'`));\n }, timeout);\n\n new MutationObserver((_mutationRecords, observer) => {\n mutationObserver = observer;\n // Query for elements matching the specified selector\n Array.from(document.querySelectorAll(selector)).forEach((element) => {\n el = element;\n resolve(element);\n // Once we have resolved we don't need the observer anymore.\n observer.disconnect();\n clearTimeout(timer);\n });\n }).observe(document.documentElement, {\n childList: true,\n subtree: true,\n });\n });\n}\n","/*\n * Wrapper functions for CookieStore using document.cookie as a fallback if not supported\n */\n\nexport const getCookieMap = (cookieString = document.cookie) => {\n // document.cookie has the format: \"key1=value1; key2=value2; key3=value3\"\n return cookieString.split(\";\").reduce((result: Map<string, string>, next: string) => {\n const cookieKeyValuePair = next.trim(); // \" key=value \" => \"key=value\"\n const [key, ...restOfString] = cookieKeyValuePair.split(\"=\"); // [\"key\", [\"value\"]]\n const value = decodeURIComponent(restOfString.join(\"=\")); // .join() handles if value contained \"=\"\n return result.set(key, value);\n }, new Map<string, string>());\n};\n\nexport const getCookieValue = (name: string): string | undefined => {\n // New Async API, not supported in FF/Safari:\n // if (window.cookieStore) {\n // return (await window.cookieStore.get(name))?.value;\n // }\n return getCookieMap().get(name);\n};\n\nexport const setCookieValue = (options: CookieInit): undefined => {\n // New Async API, not supported in FF/Safari:\n // if (window.cookieStore) {\n // const { domain, ...rest } = options;\n // const validatedDomain = domain === \"localhost\" ? undefined : domain;\n // return await window.cookieStore.set({ ...rest, domain: validatedDomain });\n // }\n // https://developer.mozilla.org/en-US/docs/Web/API/Document/cookie#write_a_new_cookie\n const { name, value, expires, ...rest } = options;\n const encodedValue = encodeURIComponent(value);\n const base = `${name}=${encodedValue}`;\n const expiration = expires != null ? ` ;expires=${new Date(expires).toUTCString()}` : \"\";\n const modifiers = Object.entries(rest)\n .map(([key, val]) => (val != null ? ` ;${key}=${val}` : \"\"))\n .join(\"\");\n document.cookie = base + modifiers + expiration;\n return;\n};\n\nexport const deleteCookieValue = (options: { name: string; domain?: string; path?: string }): undefined => {\n const { name, domain, path } = options;\n const cookieOptions: any = {\n name: name,\n value: \"\",\n expires: 0,\n };\n if (path !== undefined) {\n cookieOptions.path = path;\n }\n if (domain !== undefined) {\n cookieOptions.domain = domain;\n }\n return setCookieValue(cookieOptions);\n};\n\ninterface CookieInit {\n name: string;\n value: string;\n path?: string;\n domain?: string;\n expires?: number; // timestamp, unix time in ms\n sameSite?: \"strict\" | \"lax\" | \"none\";\n}\n","import { LOCAL_STORAGE_KEYS } from \"../api-sdk/constants\";\nimport { createScopedLocalStorage } from \"./local-storage\";\n\nconst REMOTE_SESSION_ID_KEY = LOCAL_STORAGE_KEYS.REMOTE_SESSION_ID;\n\nexport function saveRemoteSession({ remoteSessionId, apiKey = \"\" }: { remoteSessionId: string; apiKey?: string }) {\n const beamLocalStorage = createScopedLocalStorage({\n apiKey,\n });\n beamLocalStorage.setItem(REMOTE_SESSION_ID_KEY, remoteSessionId);\n}\n\nexport function getRemoteSession({ apiKey = \"\" }: { apiKey?: string }) {\n const beamLocalStorage = createScopedLocalStorage({\n apiKey,\n });\n return beamLocalStorage.getItem(REMOTE_SESSION_ID_KEY);\n}\n","import { isEqual as defaultIsEqual } from \"./is-equal\";\n\ntype Func<T extends any[], R> = (...args: T) => R;\n\n/**\n * Takes a function and returns a new memoized function.\n * If the same arguments are passed to the memoized function, it will return the previously computed result.\n * This is a \"memoize once\" function meaning it only compares the previous and current arguments, not historic values.\n * Results that throw errors or return rejected Promises are not cached.\n *\n * @param {Function} fn - The function to be memoized.\n * @param {(value: any) => boolean} [isEqual]- The equality function used to compare arguments.\n * @returns {Function} - The memoized function.\n * @param func\n */\nexport function memoizeLast<T extends any[], R>(\n func: Func<T, R>,\n { isEqual = defaultIsEqual } = {},\n): MemoizedLast<Func<T, R>> {\n let lastArgs: T | null = null;\n let lastResult: R | null = null;\n let hasResult = false; // Separate variable to track whether lastResult exists because lastResult could be falsy\n let promiseCounter = 0; // Used to keep track of result order in async invocation so we know to replace cache or not\n\n const memoized = (...args: T): R => {\n if (hasResult && isEqual(lastArgs, args)) {\n return lastResult as R;\n }\n\n const result = func(...args); // Errors here are not caught, so result will not cache if there is an error\n\n if (result instanceof Promise) {\n promiseCounter++;\n const promiseCounterAtStart = promiseCounter;\n result.catch(() => {\n // Don't return cached result next time if the Promise rejects, unless a new Promise has already replaced\n // the one that rejected\n if (promiseCounterAtStart === promiseCounter) {\n hasResult = false;\n }\n });\n }\n\n // Cache the latest args and result.\n lastArgs = args;\n lastResult = result;\n hasResult = true;\n\n return result;\n };\n\n memoized.reset = () => {\n // Bump the counter so a rejection from a still-in-flight call can't clear a fresher cache entry\n promiseCounter++;\n lastArgs = null;\n lastResult = null;\n hasResult = false;\n };\n\n return memoized;\n}\n\nexport type MemoizedLast<T extends (...args: any[]) => any> = T & {\n /** Clears the cached args/result so the next call always executes. */\n reset: () => void;\n};\n","import { paths } from \"../api-sdk/openapi-spec\";\nimport { LOCAL_STORAGE_KEYS, BEAM_COOKIE_NAMES } from \"../api-sdk/constants\";\nexport type TPromoCodeRequest =\n paths[\"/productDetailsPage\"][\"post\"][\"requestBody\"][\"content\"][\"application/json\"][\"promos\"];\nexport type TUnvalidatedPromoRequest = NonNullable<TPromoCodeRequest>[\"unvalidatedPromoCodes\"];\n\nexport type TPromoCodeAttribute = { value: string; url?: never } | { url: string; value?: never };\n\nexport type TPromoCodeResponse =\n paths[\"/productDetailsPage\"][\"post\"][\"responses\"][\"200\"][\"content\"][\"application/json\"][\"promos\"];\nexport type TValidatedPromoResponse = NonNullable<TPromoCodeResponse>[\"validatedPromoCodes\"];\n\nexport enum PromoCodeSource {\n Manual = \"manual\",\n Url = \"url\",\n}\n\ntype TManualPromoCode = {\n type: \"manual\";\n attributes: { value: string };\n};\n\ntype TUrlPromoCode = {\n type: \"url\";\n attributes: { url: string };\n};\n\nexport type TUnvalidatedPromoCode = TManualPromoCode | TUrlPromoCode;\n\nexport const PROMO_LOCAL_STORAGE_KEY = LOCAL_STORAGE_KEYS.PROMO;\nexport const PROMO_CODES_COOKIE_NAME = BEAM_COOKIE_NAMES.PROMO_CODES;\n","import { Discount, TBeamCartLocalStorage } from \"../shared/cart-contents\";\nimport {\n TPromoCodeAttribute,\n PromoCodeSource,\n TPromoCodeRequest,\n TPromoCodeResponse,\n TValidatedPromoResponse,\n TUnvalidatedPromoRequest,\n PROMO_LOCAL_STORAGE_KEY,\n PROMO_CODES_COOKIE_NAME,\n TUnvalidatedPromoCode,\n} from \"../shared/promo-types\";\nimport { LocalStorageError } from \"./beam-errors\";\nimport { getCookieValue, setCookieValue } from \"./cookies\";\nimport { createScopedLocalStorage } from \"./local-storage\";\nimport { logger } from \"./logger\";\n\nconst URL_QUERY_PARAM_CHAR_LIMIT = 100;\nconst ALLOWED_URL_PREFIX = \"utm_\";\n// Standard name for Shopify's discount tracking cookie\nconst DISCOUNT_CODE_COOKIE_NAME = \"discount_code\";\n// < --------- Cookie ------- >\n\n/**\n * Retrieves all validated promo codes stored in the \"beam_promo_codes\" cookie and parses it\n *\n * @returns {TPromoCodeResponse | undefined} An array of `ValidatedPromoCode` objects if found and parsed successfully, otherwise `undefined`\n */\nexport const getAllPromoCodesFromCookie = (): TPromoCodeResponse | undefined => {\n const promoCodesString = getCookieValue(PROMO_CODES_COOKIE_NAME);\n\n if (!promoCodesString) return undefined;\n\n try {\n const promoCodes: TPromoCodeResponse = JSON.parse(promoCodesString);\n return promoCodes;\n } catch (error) {\n logger.error(\"Failed to parse beam_promo_codes cookie:\", error);\n return undefined;\n }\n};\n\n/**\n * Stores the validated promo codes in the \"beam_promo_codes\" cookie, replaces and does not merge\n *\n * @param {TValidatedPromoResponse} validatedPromoCodes\n * @param {string} domain\n */\nexport const setPromoCodeInCookie = ({\n validatedPromoCodes,\n domain,\n}: {\n validatedPromoCodes: TValidatedPromoResponse;\n domain?: string;\n}) => {\n const promoCodeData = {\n validatedPromoCodes: validatedPromoCodes,\n };\n const threeMonthsFromNow = Date.now() + 1000 * 60 * 60 * 24 * 90;\n\n setCookieValue({\n name: PROMO_CODES_COOKIE_NAME,\n value: JSON.stringify(promoCodeData),\n path: \"/\",\n domain,\n // If we don't set an expiration, the cookie will be cleared when the tab is closed\n expires: threeMonthsFromNow,\n });\n};\n\n// < --------- Local Storage ------- >\n/**\n * Retrieves promo codes from localStorage, scoped by API key\n * @param {string} apiKey API key used for storage scoping\n * @returns {TPromoCodeRequest | null} - Returns stored promo codes object containing both\n * validated and unvalidated codes\n * - If no codes exist, returns a fresh object with empty arrays\n *\n */\nexport const getPromoCodesLocalStorage = ({ apiKey }: { apiKey: string }): TPromoCodeRequest | null => {\n if (!apiKey) {\n logger.error(new LocalStorageError(\"API key is required to get promo codes\"));\n return null;\n }\n\n const storage = createScopedLocalStorage({ apiKey });\n const allPromos = storage.getItemJson<TPromoCodeRequest>(PROMO_LOCAL_STORAGE_KEY) ?? {\n unvalidatedPromoCodes: [],\n validatedPromoCodes: [],\n };\n\n return allPromos;\n};\n\n/**\n * Sets promo codes in localStorage\n * @param {TPromoCodeRequest} promoCodes New promo codes to add\n * @param {string} apiKey API key for storage scoping\n */\nexport const setPromoCodesInLocalStorage = ({\n apiKey,\n promoCodes,\n}: {\n apiKey?: string;\n promoCodes: Partial<TPromoCodeRequest>;\n}): void => {\n if (!apiKey) {\n logger.error(new LocalStorageError(\"API key is required to set promo codes\"));\n return;\n }\n const storage = createScopedLocalStorage({ apiKey });\n const completePromoCodes: TPromoCodeRequest = {\n unvalidatedPromoCodes: promoCodes?.unvalidatedPromoCodes || [],\n validatedPromoCodes: promoCodes?.validatedPromoCodes || [],\n };\n storage.setItemJson(PROMO_LOCAL_STORAGE_KEY, completePromoCodes);\n};\n\n/**\n * Merges new promo codes with existing ones and returns the combined result\n * @param {Partial<TPromoCodeRequest>} newPromos New promo codes to add\n * @param {string} apiKey API key for storage scoping\n * @returns {TPromoCodeRequest} An object containing both validated and unvalidated promo codes\n * @example\n * const result = mergePromoCodes({\n * apiKey: 'beam_123',\n * newPromos: {\n * unvalidatedPromoCodes: [\n * { type: 'manual', attributes: { value: 'WINTER20' } },\n * { type: 'url', attributes: { url: 'www.example.com/?promo=HOLIDAY25' } }\n * ]\n * }\n * });\n */\nexport const mergeStoreAndReturnPromos = ({\n newPromos,\n apiKey,\n}: {\n newPromos: Partial<TPromoCodeRequest>;\n apiKey: string;\n}): TPromoCodeRequest => {\n const existing = getPromoCodesLocalStorage({ apiKey }) ?? {\n unvalidatedPromoCodes: [],\n validatedPromoCodes: [],\n };\n\n const uniqueNewUnvalidatedPromos = (newPromos?.unvalidatedPromoCodes || []).filter((newPromo) => {\n const isDuplicate = existing.unvalidatedPromoCodes.some((existingPromo) => {\n return JSON.stringify(existingPromo) === JSON.stringify(newPromo);\n });\n return !isDuplicate;\n });\n\n const mergedCodes: TPromoCodeRequest = {\n unvalidatedPromoCodes: [...existing.unvalidatedPromoCodes, ...uniqueNewUnvalidatedPromos],\n validatedPromoCodes: [...existing.validatedPromoCodes, ...(newPromos?.validatedPromoCodes || [])],\n };\n\n const shouldStore = mergedCodes.unvalidatedPromoCodes.length > 0 || mergedCodes.validatedPromoCodes.length > 0;\n\n if (shouldStore) {\n setPromoCodesInLocalStorage({ apiKey, promoCodes: mergedCodes });\n }\n return {\n ...mergedCodes,\n };\n};\n\n/**\n * Formats unvalidated promo codes by determining their source and attributes\n * The function will assign `QueryParam` as the source if a `url` exists,\n * otherwise, it will assign `Manual` as the source\n *\n * @param {TPromoCodeAttribute[]} promoAttributes An array of promo attributes to be formatted\n * @returns {TUnvalidatedPromoRequest} - An array of UnvalidatedPromoCode objects,\n * each with a source and attributes object\n */\nexport const mapToUnvalidatedPromoCodes = (promoAttributes: TPromoCodeAttribute[]): TUnvalidatedPromoRequest => {\n return promoAttributes.reduce<TUnvalidatedPromoRequest>((acc, attr) => {\n const result: TUnvalidatedPromoRequest = acc || [];\n if (attr.url) {\n result.push({\n type: PromoCodeSource.Url,\n attributes: { url: attr.url },\n });\n } else if (attr.value) {\n result.push({\n type: PromoCodeSource.Manual,\n attributes: { value: attr.value },\n });\n } else {\n logger.error(\"Invalid PromoAttribute - must contain either 'url' or 'value'\", { attr });\n }\n return result;\n }, []);\n};\n\n/**\n * @param {TPromoCodeAttribute[]} promoAttributes An array of promo attributes to be formatted\n * @param {string} apiKey API key for storage scoping\n * @returns {TPromoCodeRequest} An object containing both validated and unvalidated promo codes\n */\nexport const formatStoreAndReturnPromoCodes = (\n promoAttributes: TPromoCodeAttribute[],\n apiKey: string,\n): TPromoCodeRequest => {\n const unvalidatedPromoCodes = mapToUnvalidatedPromoCodes(promoAttributes);\n return mergeStoreAndReturnPromos({ newPromos: { unvalidatedPromoCodes }, apiKey });\n};\n\n/**\n * Extracts applicable promo codes from the cart object\n * This function retrieves discounts stored in the cart's `content.discounts` array,\n * filters out only the applicable promo codes, and returns them as an array of strings\n *\n * @param {TBeamCartLocalStorage} cart The cart object retrieved from local storage\n * @returns {string[]} An array of applicable promo codes\n */\nexport const getPromoCodesFromCart = (cart: TBeamCartLocalStorage): string[] => {\n if (!cart?.content) return [];\n\n const cartLevelCodes = cart.content.discounts?.filter((d) => d.applicable)?.map((d) => d.code) || [];\n\n const itemLevelCodes =\n cart.content.items?.flatMap(\n (item) => item.discounts?.filter((d: Discount) => d.applicable)?.map((d: Discount) => d.code) || [],\n ) || [];\n\n const allCodes = [...cartLevelCodes, ...itemLevelCodes];\n\n return [...new Set(allCodes)];\n};\n\n/**\n * Gets promo code exclusively from Shopify discount cookie\n * @returns {string | null} Single discount code or null if not found\n */\nexport const getPromoCodeFromShopifyCookie = (): string | null => {\n return getCookieValue(DISCOUNT_CODE_COOKIE_NAME) ?? null;\n};\n\n/**\n * Safely parses a JSON string into an array of strings\n * If parsing fails or the input is not a valid JSON array, it returns an empty array\n *\n * @param {string | undefined | null} jsonString The JSON string to parse\n * @returns {string[]} The parsed array of strings or an empty array if parsing fails\n */\nexport const parseJsonStringArray = (jsonString: string | undefined | null): string[] => {\n if (!jsonString) return [];\n try {\n const parsed = JSON.parse(jsonString);\n if (Array.isArray(parsed) && parsed.every((item) => typeof item === \"string\")) {\n return parsed;\n }\n return [];\n } catch (error) {\n logger.error(\"Failed to parse JSON:\", error);\n return [];\n }\n};\n\n/**\n * Retrieves and sanitizes the current URL for storage, preserving only safe query parameters\n *\n * @returns {TPromoCodeAttribute} Returns an object with only the `url` property set\n */\nexport const getSanitizedUrlForStorage = (): TPromoCodeAttribute | undefined => {\n try {\n const url = new URL(window.location.href);\n\n if (!url.search) return undefined;\n\n // Create NEW URL instead of modifying existing one\n const cleanUrl = new URL(url.origin + url.pathname);\n let hasValidParams = false;\n\n // Process all parameters\n url.searchParams.forEach((value, key) => {\n const isAllowed = key.startsWith(ALLOWED_URL_PREFIX);\n const isValidLength = value.length <= URL_QUERY_PARAM_CHAR_LIMIT;\n\n if (isAllowed && isValidLength) {\n cleanUrl.searchParams.append(key, value);\n hasValidParams = true;\n }\n });\n\n const finalUrl = cleanUrl.toString();\n return hasValidParams ? { url: finalUrl } : undefined;\n } catch (error) {\n return undefined;\n }\n};\n\nexport const promoCodesAreEqual = (a: TPromoCodeRequest, b: TPromoCodeRequest): boolean => {\n const extract = (codes: unknown): string => {\n const validCodes = (Array.isArray(codes) ? codes : []) as TUnvalidatedPromoCode[];\n\n const flattened = validCodes\n .map((c) => {\n if (c.type === \"manual\") {\n return c.attributes?.value;\n }\n if (c.type === \"url\") {\n return c.attributes?.url;\n }\n return \"\";\n })\n .filter(Boolean)\n .sort()\n .join(\",\");\n return flattened;\n };\n\n return extract(a?.unvalidatedPromoCodes) === extract(b?.unvalidatedPromoCodes);\n};\n\nexport const isEmptyPromoData = (promos: {\n unvalidatedPromoCodes?: unknown[];\n validatedPromoCodes?: unknown[];\n}): boolean => {\n return (\n (!promos.unvalidatedPromoCodes || promos.unvalidatedPromoCodes.length === 0) &&\n (!promos.validatedPromoCodes || promos.validatedPromoCodes.length === 0)\n );\n};\n","import { LOCAL_STORAGE_KEYS, BEAM_COOKIE_NAMES } from \"../api-sdk/constants\";\nimport { createScopedLocalStorage } from \"./local-storage\";\nimport { deleteCookieValue } from \"./cookies\";\n\n/**\n * Clears every piece of Beam-related browser state this SDK writes, by iterating the\n * LOCAL_STORAGE_KEYS/BEAM_COOKIE_NAMES registries (src/api-sdk/constants.ts) directly —\n * anything added to those objects is cleared automatically, with nothing to update here.\n *\n * Not tied to any one integration's lifecycle (e.g. registerCartIntegration/\n * unregisterCartIntegration) — safe to call on its own, from any integration or directly,\n * whenever a full reset of Beam's local footprint is needed.\n */\nexport function clearBeamStorage(config: { apiKey: string; domain?: string }) {\n const localStorage = createScopedLocalStorage(config);\n Object.values(LOCAL_STORAGE_KEYS).forEach((key) => localStorage.removeItem(key));\n Object.values(BEAM_COOKIE_NAMES).forEach((name) => deleteCookieValue({ name, domain: config.domain, path: \"/\" }));\n}\n","import { TBeamCartLocalStorage } from \"../shared/cart-contents\";\nimport { getCookieValue } from \"./cookies\";\nimport { createScopedLocalStorage } from \"./local-storage\";\n\n/**\n * Retrieves the Beam cart ID from cookies\n * @param CART_COOKIE_NAME - The name of the cookie that stores the Beam cart ID\n * @returns The Beam cart ID if present in cookies or local storage, otherwise null\n */\nexport const getBeamCartId = (CART_COOKIE_NAME: string, config: { apiKey: string }): string | null => {\n const localStorage = createScopedLocalStorage(config);\n\n // The cart cache is used to detect changes after page refreshes / across tabs\n const cachedCart: TBeamCartLocalStorage | null = localStorage.getItemJson(\"cart\");\n\n // Get the Beam cart cookie\n const beamCartId: string | null = cachedCart?.beamCartId ?? getCookieValue(CART_COOKIE_NAME) ?? null;\n return beamCartId;\n};\n\n/**\n * Retrieves the external cart ID\n * @param CART_COOKIE_NAME - The name of the cookie that stores the external cart ID\n * @returns The external cart ID if available or null if neither is available\n */\nexport const getExternalCartId = (CART_COOKIE_NAME: string, config: { apiKey: string }): string | null => {\n const localStorage = createScopedLocalStorage(config);\n\n // The cart cache is used to detect changes after page refreshes / across tabs\n const cachedCart: TBeamCartLocalStorage | null = localStorage.getItemJson(\"cart\");\n\n // Get external cart cookie\n const externalCartId: string | null = cachedCart?.cartId ?? getCookieValue(CART_COOKIE_NAME) ?? null;\n return externalCartId;\n};\n","export function makeApiKeyHeader(apiKey: string) {\n return {\n authorization: `Api-Key ${apiKey}`,\n };\n}\n"],"names":["DEFAULT_BASE_URL","DEFAULT_LOG_URL","SUPPORTED_LANGUAGES","WIDGET_NAMES","SELECTION_METHODS","HELPER_NAMES","LOCAL_STORAGE_KEYS","BEAM_COOKIE_NAMES","BeamError","msg","cause","name","NetworkError","response","body","MissingConfig","missingConfigKeyNames","LocalStorageError","SetupError","LOG_PREFIX","logger","args","_BeamNetworkCallEvent","detail","BeamNetworkCallEvent","_BeamNonprofitSelectEvent","BeamNonprofitSelectEvent","_BeamCartChangeEvent","BeamCartChangeEvent","_BeamCartCreatedEvent","BeamCartCreatedEvent","_BeamOrderCreatedEvent","BeamOrderCreatedEvent","_BeamStatusChangeEvent","BeamStatusChangeEvent","_BeamNonprofitSelectionRemovedEvent","BeamNonprofitSelectionRemovedEvent","_BeamPromoCodesStoredEvent","BeamPromoCodesStoredEvent","_BeamWidgetStoredPromoCodesEvent","BeamWidgetStoredPromoCodesEvent","_BeamWidgetInitialNonprofitSyncEvent","BeamWidgetInitialNonprofitSyncEvent","_BeamWidgetInitialNonprofitSyncCancelEvent","BeamWidgetInitialNonprofitSyncCancelEvent","_BeamStatsigInitializedEvent","BeamStatsigInitializedEvent","fetchHandler","target","_thisArg","networkListenersEnabled","responseCopy","xhrHandler","TargetConstructor","xhr","_open","_method","_url","method","url","initializedListeners","initNetworkListeners","teardownNetworkListeners","createScopedLocalStorage","config","key","value","json","waitForElement","selector","timeout","resolve","reject","el","mutationObserver","timer","_mutationRecords","observer","element","getCookieMap","cookieString","result","next","cookieKeyValuePair","restOfString","getCookieValue","setCookieValue","options","expires","rest","encodedValue","base","expiration","modifiers","val","deleteCookieValue","domain","path","cookieOptions","REMOTE_SESSION_ID_KEY","saveRemoteSession","remoteSessionId","apiKey","getRemoteSession","memoizeLast","func","isEqual","defaultIsEqual","lastArgs","lastResult","hasResult","promiseCounter","memoized","promiseCounterAtStart","PromoCodeSource","PROMO_LOCAL_STORAGE_KEY","PROMO_CODES_COOKIE_NAME","URL_QUERY_PARAM_CHAR_LIMIT","ALLOWED_URL_PREFIX","DISCOUNT_CODE_COOKIE_NAME","getAllPromoCodesFromCookie","promoCodesString","error","setPromoCodeInCookie","validatedPromoCodes","promoCodeData","threeMonthsFromNow","getPromoCodesLocalStorage","setPromoCodesInLocalStorage","promoCodes","storage","completePromoCodes","mergeStoreAndReturnPromos","newPromos","existing","uniqueNewUnvalidatedPromos","newPromo","existingPromo","mergedCodes","mapToUnvalidatedPromoCodes","promoAttributes","acc","attr","formatStoreAndReturnPromoCodes","unvalidatedPromoCodes","getPromoCodesFromCart","cart","cartLevelCodes","d","itemLevelCodes","item","allCodes","getPromoCodeFromShopifyCookie","parseJsonStringArray","jsonString","parsed","getSanitizedUrlForStorage","cleanUrl","hasValidParams","isAllowed","isValidLength","finalUrl","promoCodesAreEqual","a","b","extract","codes","c","isEmptyPromoData","promos","clearBeamStorage","localStorage","getBeamCartId","CART_COOKIE_NAME","getExternalCartId","makeApiKeyHeader"],"mappings":"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"}