@beamimpact/web-sdk 1.57.1 → 1.57.3

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 (163) hide show
  1. package/README.md +66 -42
  2. package/dist/chunks/{_share-dialog-dependencies-BEUnzuWq.esm.js → _share-dialog-dependencies-BonvNllt.esm.js} +2 -2
  3. package/dist/chunks/{_share-dialog-dependencies-BEUnzuWq.esm.js.map → _share-dialog-dependencies-BonvNllt.esm.js.map} +1 -1
  4. package/dist/chunks/{cart-CKltrzQt.esm.d.ts → cart-DCezceUX.esm.d.ts} +2 -2
  5. package/dist/chunks/{index-DqhM4Yoj.esm.js → index-BXivnoQL.esm.js} +6 -6
  6. package/dist/chunks/index-BXivnoQL.esm.js.map +1 -0
  7. package/dist/chunks/{index-OYSJ-2mk.esm.d.ts → index-Bi9LFICg.esm.d.ts} +1 -1
  8. package/dist/chunks/{index-D6aFJ4cU.esm.js → index-BnbtpTg-.esm.js} +2 -2
  9. package/dist/chunks/{index-D6aFJ4cU.esm.js.map → index-BnbtpTg-.esm.js.map} +1 -1
  10. package/dist/chunks/{index-Dm-K2MLY.esm.js → index-BpR0FMss.esm.js} +2 -2
  11. package/dist/chunks/{index-Dm-K2MLY.esm.js.map → index-BpR0FMss.esm.js.map} +1 -1
  12. package/dist/chunks/index-C03QP2W-.esm.js +32 -0
  13. package/dist/chunks/index-C03QP2W-.esm.js.map +1 -0
  14. package/dist/chunks/{index-C6a13iqC.esm.d.ts → index-C6gns2ul.esm.d.ts} +1 -1
  15. package/dist/chunks/index-CQEhF7Dy.esm.js +32 -0
  16. package/dist/chunks/index-CQEhF7Dy.esm.js.map +1 -0
  17. package/dist/chunks/{index-HqfLVFOU.esm.js → index-DJ5OwAaV.esm.js} +6 -6
  18. package/dist/chunks/index-DJ5OwAaV.esm.js.map +1 -0
  19. package/dist/chunks/{index-BH3YaPLG.esm.d.ts → index-DQ89VjpD.esm.d.ts} +1 -1
  20. package/dist/chunks/{index-MAMeVd6l.esm.js → index-Ghl9JrXJ.esm.js} +2 -2
  21. package/dist/chunks/{index-MAMeVd6l.esm.js.map → index-Ghl9JrXJ.esm.js.map} +1 -1
  22. package/dist/chunks/{index-BAROgNYE.esm.d.ts → index-h_-rDiMR.esm.d.ts} +1 -1
  23. package/dist/chunks/{promo-pill-label-5HmbDVmU.esm.js → promo-pill-label-F6oSUeZ_.esm.js} +2 -2
  24. package/dist/chunks/{promo-pill-label-5HmbDVmU.esm.js.map → promo-pill-label-F6oSUeZ_.esm.js.map} +1 -1
  25. package/dist/chunks/{share-button-C4yPLL_t.esm.js → share-button-C_qDR7Rw.esm.js} +2 -2
  26. package/dist/chunks/{share-button-C4yPLL_t.esm.js.map → share-button-C_qDR7Rw.esm.js.map} +1 -1
  27. package/dist/chunks/{share-button-5gfPmeEh.esm.js → share-button-Cle5Uexn.esm.js} +2 -2
  28. package/dist/chunks/{share-button-5gfPmeEh.esm.js.map → share-button-Cle5Uexn.esm.js.map} +1 -1
  29. package/dist/chunks/{update-cart-DoJGAdoU.esm.d.ts → update-cart-B5Tr9N3V.esm.d.ts} +1 -1
  30. package/dist/chunks/{utils-COGFpDER.esm.d.ts → utils-BPcZ5h8J.esm.d.ts} +75 -0
  31. package/dist/chunks/utils-C5hmbxa4.esm.js.map +1 -1
  32. package/dist/components/beam-partner-logos.d.ts +1 -1
  33. package/dist/components/community-impact.d.ts +1 -1
  34. package/dist/components/community-impact.esm.js +1 -1
  35. package/dist/components/community-impact.js +1 -1
  36. package/dist/components/cumulative-impact.d.ts +1 -1
  37. package/dist/components/cumulative-impact.esm.js +1 -1
  38. package/dist/components/cumulative-impact.js +1 -1
  39. package/dist/components/impact-overview.d.ts +1 -1
  40. package/dist/components/impact-overview.esm.js +1 -1
  41. package/dist/components/impact-overview.js +1 -1
  42. package/dist/components/index.d.ts +1 -1
  43. package/dist/components/index.esm.js +1 -1
  44. package/dist/components/index.js +1 -1
  45. package/dist/components/post-purchase.d.ts +2 -1
  46. package/dist/components/post-purchase.esm.js +1 -1
  47. package/dist/components/post-purchase.js +1 -1
  48. package/dist/components/product-details-page.d.ts +1 -1
  49. package/dist/components/product-details-page.esm.js +2 -2
  50. package/dist/components/product-details-page.esm.js.map +1 -1
  51. package/dist/components/product-details-page.js +2 -2
  52. package/dist/components/product-details-page.js.map +1 -1
  53. package/dist/components/redeem-transaction.d.ts +1 -1
  54. package/dist/components/redeem-transaction.esm.js +1 -1
  55. package/dist/components/redeem-transaction.js +1 -1
  56. package/dist/components/select-nonprofit.d.ts +1 -1
  57. package/dist/components/select-nonprofit.esm.js +2 -2
  58. package/dist/components/select-nonprofit.esm.js.map +1 -1
  59. package/dist/components/select-nonprofit.js +2 -2
  60. package/dist/components/select-nonprofit.js.map +1 -1
  61. package/dist/components/select-subscription-nonprofit.d.ts +1 -1
  62. package/dist/components/select-subscription-nonprofit.esm.js +1 -1
  63. package/dist/components/select-subscription-nonprofit.js +1 -1
  64. package/dist/components/shopify.d.ts +4 -4
  65. package/dist/components/shopify.esm.js +1 -1
  66. package/dist/components/shopify.js +1 -1
  67. package/dist/components/social-share.d.ts +1 -1
  68. package/dist/components/social-share.esm.js +1 -1
  69. package/dist/components/social-share.js +1 -1
  70. package/dist/components/subscriber-select-nonprofit.d.ts +1 -1
  71. package/dist/components/subscriber-select-nonprofit.esm.js +1 -1
  72. package/dist/components/subscriber-select-nonprofit.js +1 -1
  73. package/dist/components/subscription-impact.d.ts +1 -1
  74. package/dist/components/subscription-impact.esm.js +1 -1
  75. package/dist/components/subscription-impact.js +1 -1
  76. package/dist/components/subscription-management.d.ts +1 -1
  77. package/dist/components/subscription-management.esm.js +1 -1
  78. package/dist/components/subscription-management.js +1 -1
  79. package/dist/index.d.ts +7 -7
  80. package/dist/index.esm.js +1 -1
  81. package/dist/index.js +1 -1
  82. package/dist/integrations/beam.d.ts +1 -1
  83. package/dist/integrations/beam.esm.js +1 -1
  84. package/dist/integrations/beam.js +1 -1
  85. package/dist/integrations/cart.d.ts +2 -2
  86. package/dist/integrations/cart.esm.js +1 -1
  87. package/dist/integrations/cart.js +1 -1
  88. package/dist/integrations/logs.d.ts +2 -2
  89. package/dist/integrations/logs.esm.js +1 -1
  90. package/dist/integrations/logs.js +1 -1
  91. package/dist/integrations/promoManager.d.ts +1 -1
  92. package/dist/integrations/shopify-order.d.ts +1 -1
  93. package/dist/integrations/shopify-order.esm.js +1 -1
  94. package/dist/integrations/shopify-order.js +1 -1
  95. package/dist/integrations/shopify.d.ts +3 -3
  96. package/dist/integrations/shopify.esm.js +1 -1
  97. package/dist/integrations/shopify.js +1 -1
  98. package/dist/integrations/statsig.d.ts +1 -1
  99. package/dist/integrations/statsig.esm.js +3 -3
  100. package/dist/integrations/statsig.esm.js.map +1 -1
  101. package/dist/integrations/statsig.js +3 -3
  102. package/dist/integrations/statsig.js.map +1 -1
  103. package/dist/integrations/utils.d.ts +1 -1
  104. package/dist/react/beam-partner-logos.d.ts +1 -1
  105. package/dist/react/community-impact.d.ts +1 -1
  106. package/dist/react/community-impact.esm.js +1 -1
  107. package/dist/react/community-impact.js +1 -1
  108. package/dist/react/cumulative-impact.d.ts +1 -1
  109. package/dist/react/cumulative-impact.esm.js +1 -1
  110. package/dist/react/cumulative-impact.js +1 -1
  111. package/dist/react/impact-overview.d.ts +1 -1
  112. package/dist/react/impact-overview.esm.js +1 -1
  113. package/dist/react/impact-overview.js +1 -1
  114. package/dist/react/index.d.ts +1 -1
  115. package/dist/react/index.esm.js +1 -1
  116. package/dist/react/index.js +1 -1
  117. package/dist/react/post-purchase.d.ts +1 -1
  118. package/dist/react/post-purchase.esm.js +1 -1
  119. package/dist/react/post-purchase.js +1 -1
  120. package/dist/react/product-details-page.d.ts +1 -1
  121. package/dist/react/product-details-page.esm.js +1 -1
  122. package/dist/react/product-details-page.js +1 -1
  123. package/dist/react/redeem-transaction.d.ts +1 -1
  124. package/dist/react/redeem-transaction.esm.js +1 -1
  125. package/dist/react/redeem-transaction.js +1 -1
  126. package/dist/react/select-nonprofit.d.ts +1 -1
  127. package/dist/react/select-nonprofit.esm.js +1 -1
  128. package/dist/react/select-nonprofit.js +1 -1
  129. package/dist/react/select-subscription-nonprofit.d.ts +1 -1
  130. package/dist/react/select-subscription-nonprofit.esm.js +1 -1
  131. package/dist/react/select-subscription-nonprofit.js +1 -1
  132. package/dist/react/social-share.d.ts +1 -1
  133. package/dist/react/social-share.esm.js +1 -1
  134. package/dist/react/social-share.js +1 -1
  135. package/dist/react/subscriber-select-nonprofit.d.ts +1 -1
  136. package/dist/react/subscriber-select-nonprofit.esm.js +1 -1
  137. package/dist/react/subscriber-select-nonprofit.js +1 -1
  138. package/dist/react/subscription-impact.d.ts +1 -1
  139. package/dist/react/subscription-impact.esm.js +1 -1
  140. package/dist/react/subscription-impact.js +1 -1
  141. package/dist/react/subscription-management.d.ts +1 -1
  142. package/dist/react/subscription-management.esm.js +1 -1
  143. package/dist/react/subscription-management.js +1 -1
  144. package/dist/utils/beam-errors.d.ts +1 -1
  145. package/dist/utils/cart.d.ts +1 -1
  146. package/dist/utils/clear-beam-storage.d.ts +1 -1
  147. package/dist/utils/cookies.d.ts +1 -1
  148. package/dist/utils/events.d.ts +1 -1
  149. package/dist/utils/local-storage.d.ts +1 -1
  150. package/dist/utils/logger.d.ts +1 -1
  151. package/dist/utils/makeApiKeyHeader.d.ts +1 -1
  152. package/dist/utils/memoize-last.d.ts +1 -1
  153. package/dist/utils/network-listeners.d.ts +1 -1
  154. package/dist/utils/promoManager.d.ts +1 -1
  155. package/dist/utils/remote-session.d.ts +1 -1
  156. package/dist/utils/wait-for-element.d.ts +1 -1
  157. package/package.json +1 -1
  158. package/dist/chunks/index-BgalrCS_.esm.js +0 -32
  159. package/dist/chunks/index-BgalrCS_.esm.js.map +0 -1
  160. package/dist/chunks/index-C60Vejym.esm.js +0 -32
  161. package/dist/chunks/index-C60Vejym.esm.js.map +0 -1
  162. package/dist/chunks/index-DqhM4Yoj.esm.js.map +0 -1
  163. package/dist/chunks/index-HqfLVFOU.esm.js.map +0 -1
package/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # @beamimpact/web-sdk
2
2
 
3
- The Beam SDK enables brands to connect with their customers over shared values, not transactional discounts, to build stronger loyalty. Our integration achieves this by allowing customers to (a) choose a nonprofit where the brand will donate part of their purchase from a set of curated options and (b) track their cumulative impact with every order towards quantifiable goals.
3
+ The Beam SDK enables brands to connect with their users over shared values, not transactional discounts, to build stronger loyalty. Our integration achieves this by allowing users to (a) choose a nonprofit where the brand will donate part of their purchase from a set of curated options and (b) track their cumulative impact with every order towards quantifiable goals.
4
4
 
5
5
  Beam takes care of all the nonprofit management and compliance, impact tracking, UI styling and dynamic campaignization.
6
6
 
@@ -22,14 +22,15 @@ Beam takes care of all the nonprofit management and compliance, impact tracking,
22
22
  - [React](#react)
23
23
  - [Serverside-Rendering](#serverside-rendering)
24
24
  - [Debug Mode](#debug-mode)
25
- - [Widget Options](#widget-options)
25
+ - [Component Options](#component-options)
26
26
  - [beam-community impact](#beam-community-impact)
27
27
  - [beam-cumulative-impact](#beam-cumulative-impact)
28
28
  - [beam-select-nonprofit](#beam-select-nonprofit)
29
29
  - [Events](#events)
30
+ - [**Event Types**](#event-types)
30
31
  - [beam-post-purchase](#beam-post-purchase)
31
32
  - [Events](#events-1)
32
- - [Customizing inner widgets](#customizing-inner-widgets)
33
+ - [Customizing inner components](#customizing-inner-components)
33
34
  - [Integrations](#integrations)
34
35
  - [Cart Integration](#cart-integration)
35
36
  - [Shopify](#shopify)
@@ -43,10 +44,10 @@ Beam takes care of all the nonprofit management and compliance, impact tracking,
43
44
  <br />
44
45
 
45
46
  <img src="https://sdk.beamimpact.com/assets/img/screenshots/beam-select-nonprofit.png"
46
- alt="Screenshot of Beam widget" />
47
+ alt="Screenshot of Beam component" />
47
48
 
48
49
  The Beam Web SDK provides a set of web components and framework-specific wrappers for
49
- integrating Beam widgets into an e-commerce website.
50
+ integrating Beam components into an e-commerce website.
50
51
 
51
52
  ## Installation
52
53
 
@@ -56,7 +57,7 @@ integrating Beam widgets into an e-commerce website.
56
57
 
57
58
  Most e-commerce applications will load Beam over the CDN.
58
59
 
59
- Include the script for the widget you want to use at the top of the page:
60
+ Include the script for the component you want to use at the top of the page:
60
61
 
61
62
  ```html
62
63
  <script
@@ -97,16 +98,16 @@ Beam web components are custom elements, so they can be used in HTML:
97
98
  <beam-impact-overview chainId="1000"></beam-impact-overview>
98
99
  ```
99
100
 
100
- Because they are standard HTML elements, Beam widgets can have attributes like `class`, `style`, and `data-attributes`.
101
+ Because they are standard HTML elements, Beam components can have attributes like `class`, `style`, and `data-attributes`.
101
102
 
102
103
  Components can also be created using Javascript:
103
104
 
104
105
  ```js
105
- const widget = document.createElement("beam-select-nonprofit");
106
- widget.chainId = 1000;
107
- widget.apiKey = "abc123";
106
+ const component = document.createElement("beam-select-nonprofit");
107
+ component.chainId = 1000;
108
+ component.apiKey = "abc123";
108
109
  const parent = document.querySelector("#sidebar-cart .footer");
109
- parent.appendChild(widget);
110
+ parent.appendChild(component);
110
111
  ```
111
112
 
112
113
  The elements can also have children which show up before the script loads or if it fails to parse:
@@ -140,7 +141,7 @@ import { events } from "@beamimpact/web-sdk/dist/integrations/utils";
140
141
 
141
142
  **(ie, NextJS)**
142
143
 
143
- The Beam Widgets run clientside and save data (such as the user's nonprofit selection) in localStorage and cookies.
144
+ The Beam components run clientside and save data (such as the user's nonprofit selection) in localStorage and cookies.
144
145
 
145
146
  Use [next/dynamic](https://nextjs.org/docs/pages/building-your-application/optimizing/lazy-loading) to lazy-load
146
147
  components async on the client instead of the server.
@@ -164,9 +165,9 @@ console logs.
164
165
  <beam-impact-overview chainId="1000" debug></beam-impact-overview>
165
166
  ```
166
167
 
167
- ## Widget Options
168
+ ## Component Options
168
169
 
169
- Required props for all widgets:
170
+ Required props for all components:
170
171
 
171
172
  - `apiKey` - Beam API Key
172
173
 
@@ -198,13 +199,13 @@ Shows total impact in terms of nonprofit funding goals - e.g., "9,000 lbs of oce
198
199
 
199
200
  ### beam-select-nonprofit
200
201
 
201
- Widget that integrates into a cart to allow customers to support a nonprofit as they check out.
202
+ Component that integrates into a cart to allow users to support a nonprofit as they check out.
202
203
 
203
204
  ```html
204
205
  <beam-select-nonprofit apiKey="abc-123" storeId="1"> Select a nonprofit </beam-select-nonprofit>
205
206
  ```
206
207
 
207
- - `storeId` = Beam ID for site, i.e., EU or US online store (optional) - used to show relevant nonprofits to customers
208
+ - `storeId` = Beam ID for site, i.e., EU or US online store (optional) - used to show relevant nonprofits to users
208
209
  - `countryCode` & `postalCode` = If `storeId` is not provided, location information can be provided instead (optional)
209
210
  - `cart` = Usually set automatically by the cart integration (see below), the cart property allows customizing the
210
211
  nonprofits shown based on the items in the cart
@@ -220,12 +221,12 @@ document.addEventListener("beamnonprofitselect", (evt) => {
220
221
 
221
222
  #### **Event Types**
222
223
 
223
- **Select Nonprofit Widget & Post Purchase Widget**
224
+ **Select Nonprofit Component & Post Purchase Component**
224
225
 
225
226
  - **Event:** `beamnonprofitselect`
226
- - **Description:** Emitted when the end user selects a nonprofit in the Beam widget, and when the previous selection was restored automatically
227
+ - **Description:** Emitted when the end user selects a nonprofit in the Beam component, and when the previous selection was restored automatically
227
228
 
228
- **Select Nonprofit Widget**
229
+ **Select Nonprofit Component**
229
230
 
230
231
  - **Event:** `beamcartchange`
231
232
  - **Description:** Emitted when Beam detects that cart contents have changed, and when items are added to the cart for the first time
@@ -236,9 +237,9 @@ document.addEventListener("beamnonprofitselect", (evt) => {
236
237
  **Statsig / A/B Experiment**
237
238
 
238
239
  - **Event:** `beamstatsiginitialized`
239
- - **Description:** Emitted when Statsig has completed assigning experiment variants for the current session. Contains `showBeam` (whether widgets should be shown) and `stableId` (the Statsig session Id).
240
+ - **Description:** Emitted when Statsig has completed assigning experiment variants for the current session. Contains `showBeam` (whether components should be shown) and `stableId` (the Statsig session Id).
240
241
 
241
- **Post Purchase Widget**
242
+ **Post Purchase Component**
242
243
 
243
244
  - **Event:** `beamordercreated`
244
245
  - **Description:** Emitted when an order is registered with Beam for the first time, but NOT on repeat visits, page refreshes, etc.
@@ -246,7 +247,7 @@ document.addEventListener("beamnonprofitselect", (evt) => {
246
247
  ### beam-post-purchase
247
248
 
248
249
  A wrapper component that registers transactions and renders either the `beam-impact-overview` or
249
- `beam-redeem-transaction` widget, depending on if the user made a selection before purchase or not.
250
+ `beam-redeem-transaction` component, depending on if the user made a selection before purchase or not.
250
251
 
251
252
  ```html
252
253
  <script src="https://sdk.beamimpact.com/web-sdk/v1.36.1/dist/components/post-purchase.js"></script>
@@ -255,18 +256,18 @@ A wrapper component that registers transactions and renders either the `beam-imp
255
256
  ```
256
257
 
257
258
  ```js
258
- const widget = document.createElement("beam-post-purchase");
259
+ const component = document.createElement("beam-post-purchase");
259
260
 
260
261
  // Config values:
261
- widget.apiKey = "abc123"; // Required
262
- widget.storeId = 100; // Beam Store ID
263
- widget.countryCode = "GB"; // 2-letter country code for order
264
- widget.postalCode = "11111"; // String - postalCode in country-specific format
265
- widget.orderId = String(10101); // partner provides ID
266
- widget.email = "test@beamimpact.com"; // customer email
267
- widget.cartTotal = 100.01; // Cart total before tax
268
- widget.currencyCode = "USD"; // "CAD" etc.
269
- widget.cart = {
262
+ component.apiKey = "abc123"; // Required
263
+ component.storeId = 100; // Beam Store ID
264
+ component.countryCode = "GB"; // 2-letter country code for order
265
+ component.postalCode = "11111"; // String - postalCode in country-specific format
266
+ component.orderId = String(10101); // partner provides ID
267
+ component.email = "test@beamimpact.com"; // user email
268
+ component.cartTotal = 100.01; // Cart total before tax
269
+ component.currencyCode = "USD"; // "CAD" etc.
270
+ component.cart = {
270
271
  schema: {
271
272
  source: "shopify",
272
273
  },
@@ -274,10 +275,10 @@ widget.cart = {
274
275
  items: [{ sku: "PRODUCT-100" }],
275
276
  },
276
277
  }; // see OpenAPI spec for cart formats
277
- widget.discountCodes = ["PROMO10", "CLEARANCE_50"]; // discount / promo codes
278
- widget.lang = "en"; // en | fr Language
279
- widget.domain = "example.com"; // [Optional] Base domain of the store, if subdomains for store and checkout differ
280
- widget.debug = false; // boolean
278
+ component.discountCodes = ["PROMO10", "CLEARANCE_50"]; // discount / promo codes
279
+ component.lang = "en"; // en | fr Language
280
+ component.domain = "example.com"; // [Optional] Base domain of the store, if subdomains for store and checkout differ
281
+ component.debug = false; // boolean
281
282
  ```
282
283
 
283
284
  #### Events
@@ -289,7 +290,7 @@ document.addEventListener("beamnonprofitselect", (evt) => {
289
290
  });
290
291
  ```
291
292
 
292
- #### Customizing inner widgets
293
+ #### Customizing inner components
293
294
 
294
295
  Use `beam-post-purchase::part(impact-overview)` or `beam-post-purchase::part(redeem-transaction)` to apply CSS.
295
296
 
@@ -328,8 +329,8 @@ await updateCart(beamConfig, cart);
328
329
 
329
330
  ### Shopify
330
331
 
331
- The `registerCartIntegration()` function integrates the Beam Nonprofit Select widget with the Shopify cart, which
332
- allows Beam metadata for the nonprofitId and selectionId to be added to the order as the customer goes through the
332
+ The `registerCartIntegration()` function integrates the Beam Nonprofit Select component with the Shopify cart, which
333
+ allows Beam metadata for the nonprofitId and selectionId to be added to the order as the user goes through the
333
334
  checkout flow, and to track the cart token and cart value for the Beam ROI calculation.
334
335
 
335
336
  **Add event tracking script to main layout:**
@@ -349,7 +350,7 @@ checkout flow, and to track the cart token and cart value for the Beam ROI calcu
349
350
  Post-purchase script:
350
351
 
351
352
  ```ts
352
- import { showOrderPageWidgets } from "https://sdk.beamimpact.com/web-sdk/v1.36.0/dist/integrations/shopify.esm.js";
353
+ import { showBeamOrderPageWidgets } from "https://sdk.beamimpact.com/web-sdk/v1.36.0/dist/integrations/shopify.esm.js";
353
354
 
354
355
  await showBeamOrderPageWidgets({
355
356
  apiKey: beam.apiKey,
@@ -369,6 +370,21 @@ await showBeamOrderPageWidgets({
369
370
  });
370
371
  ```
371
372
 
373
+ **Consent-driven teardown:**
374
+
375
+ If a user withdraws tracking consent, `unregisterCartIntegration()` stops the listeners set up by
376
+ `registerCartIntegration()` and can optionally wipe Beam's local storage/cookies in the same call. It's opt-in — the
377
+ SDK doesn't watch for a consent signal itself, so this must be wired into your own consent banner/flow.
378
+
379
+ ```ts
380
+ import { unregisterCartIntegration } from "https://sdk.beamimpact.com/web-sdk/v1.36.0/dist/integrations/shopify.esm.js";
381
+
382
+ await unregisterCartIntegration(
383
+ { apiKey: "abc123", storeId: 100, chainId: 10 },
384
+ { clearStorage: true }, // also clear Beam's localStorage/cookies; defaults to false
385
+ );
386
+ ```
387
+
372
388
  ### Utils
373
389
 
374
390
  Several utilities are exposed which making integrating with existing applications easier.
@@ -376,13 +392,21 @@ Several utilities are exposed which making integrating with existing application
376
392
  1. `waitForElement` returns a Promise which resolves when the selector appears.
377
393
  2. `errors` contains Beam custom error classes.
378
394
  3. `events` contains Beam custom events classes / event names.
395
+ 4. `clearBeamStorage` clears all Beam-related localStorage keys and cookies for a given config; useful for a
396
+ standalone consent-driven reset that isn't tied to `unregisterCartIntegration`.
397
+
398
+ ```js
399
+ import { clearBeamStorage } from "https://sdk.beamimpact.com/web-sdk/v1.36.1/dist/integrations/utils.js";
400
+
401
+ clearBeamStorage({ apiKey: "abc123", domain: "my-store.com" });
402
+ ```
379
403
 
380
404
  ```js
381
405
  import { waitForElement, errors, events } from "https://sdk.beamimpact.com/web-sdk/v1.36.1/dist/integrations/utils.js";
382
406
 
383
407
  try {
384
408
  const parentElement = await waitForElement("#my-selector", { timeout: 1000 });
385
- parentElement.appendChild(widget);
409
+ parentElement.appendChild(component);
386
410
  } catch (err) {
387
411
  if (err instanceof errors.BeamError) {
388
412
  /* do something */
@@ -437,7 +461,7 @@ if (beam.status !== "ready") {
437
461
 
438
462
  ##### Visibility
439
463
 
440
- Once initialized, all Beam widgets have `display: none` unless user is assigned to A/B test group that shows Beam.
464
+ Once initialized, all Beam components have `display: none` unless user is assigned to A/B test group that shows Beam.
441
465
 
442
466
  To hide additional elements, add the CSS className `beam-sync-visibility` to them. Elements with this class will
443
467
  automatically have `display: none` if the user can't see Beam.
@@ -1,2 +1,2 @@
1
- import{r as c,s as i}from"./vendor-DUOg5fL-.esm.js";import{q as t}from"./index-Dm-K2MLY.esm.js";import"./lit-BEag9MFp.esm.js";import"./utils-C5hmbxa4.esm.js";import"./lodash-CrMU6wKg.esm.js";const s="https://sdk.beamimpact.com",a=`${s}/lib/shoelace/v${t["@shoelace-style/shoelace"]}`,o=`${s}/lib/lucide-static/v${t["lucide-static"]}`;if(c("lucide",{resolver:e=>`${o}/icons/${e}.svg`}),i(a),document&&!document.querySelector("link[data-beam-impact]")){const e=document.createElement("link");e.href=`${a}/themes/light.css`,e.rel="stylesheet",e.setAttribute("data-beam-impact","true"),document.head.appendChild(e)}
2
- //# sourceMappingURL=_share-dialog-dependencies-BEUnzuWq.esm.js.map
1
+ import{r as c,s as i}from"./vendor-DUOg5fL-.esm.js";import{q as t}from"./index-BpR0FMss.esm.js";import"./lit-BEag9MFp.esm.js";import"./utils-C5hmbxa4.esm.js";import"./lodash-CrMU6wKg.esm.js";const s="https://sdk.beamimpact.com",a=`${s}/lib/shoelace/v${t["@shoelace-style/shoelace"]}`,o=`${s}/lib/lucide-static/v${t["lucide-static"]}`;if(c("lucide",{resolver:e=>`${o}/icons/${e}.svg`}),i(a),document&&!document.querySelector("link[data-beam-impact]")){const e=document.createElement("link");e.href=`${a}/themes/light.css`,e.rel="stylesheet",e.setAttribute("data-beam-impact","true"),document.head.appendChild(e)}
2
+ //# sourceMappingURL=_share-dialog-dependencies-BonvNllt.esm.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"_share-dialog-dependencies-BEUnzuWq.esm.js","sources":["../../src/shared/shoelace-components.ts"],"sourcesContent":["/**\n * Shoelace is a utility library for web components like icons, dialogs, buttons, etc.\n * https://shoelace.style/\n */\n\nimport { setBasePath } from \"@shoelace-style/shoelace/dist/utilities/base-path.js\";\nimport { registerIconLibrary } from \"@shoelace-style/shoelace/dist/utilities/icon-library.js\";\nimport { dependencies } from \"../../package.json\";\n\nconst CDN_BASE = \"https://sdk.beamimpact.com\";\nconst SHOELACE_BASE = `${CDN_BASE}/lib/shoelace/v${dependencies[\"@shoelace-style/shoelace\"]}`;\nconst ICON_BASE = `${CDN_BASE}/lib/lucide-static/v${dependencies[\"lucide-static\"]}`;\n\nregisterIconLibrary(\"lucide\", {\n resolver: (name: string) => `${ICON_BASE}/icons/${name}.svg`,\n});\n\nsetBasePath(SHOELACE_BASE);\n\nif (document && !document.querySelector(\"link[data-beam-impact]\")) {\n const stylesheet = document.createElement(\"link\");\n stylesheet.href = `${SHOELACE_BASE}/themes/light.css`;\n stylesheet.rel = \"stylesheet\";\n stylesheet.setAttribute(\"data-beam-impact\", \"true\");\n document.head.appendChild(stylesheet);\n}\n"],"names":["CDN_BASE","SHOELACE_BASE","dependencies","ICON_BASE","registerIconLibrary","name","setBasePath","stylesheet"],"mappings":"+LASA,MAAMA,EAAW,6BACXC,EAAgB,GAAGD,CAAQ,kBAAkBE,EAAa,0BAA0B,CAAC,GACrFC,EAAY,GAAGH,CAAQ,uBAAuBE,EAAa,eAAe,CAAC,GAQjF,GANAE,EAAoB,SAAU,CAC5B,SAAWC,GAAiB,GAAGF,CAAS,UAAUE,CAAI,MACxD,CAAC,EAEDC,EAAYL,CAAa,EAErB,UAAY,CAAC,SAAS,cAAc,wBAAwB,EAAG,CACjE,MAAMM,EAAa,SAAS,cAAc,MAAM,EAChDA,EAAW,KAAO,GAAGN,CAAa,oBAClCM,EAAW,IAAM,aACjBA,EAAW,aAAa,mBAAoB,MAAM,EAClD,SAAS,KAAK,YAAYA,CAAU,CACtC"}
1
+ {"version":3,"file":"_share-dialog-dependencies-BonvNllt.esm.js","sources":["../../src/shared/shoelace-components.ts"],"sourcesContent":["/**\n * Shoelace is a utility library for web components like icons, dialogs, buttons, etc.\n * https://shoelace.style/\n */\n\nimport { setBasePath } from \"@shoelace-style/shoelace/dist/utilities/base-path.js\";\nimport { registerIconLibrary } from \"@shoelace-style/shoelace/dist/utilities/icon-library.js\";\nimport { dependencies } from \"../../package.json\";\n\nconst CDN_BASE = \"https://sdk.beamimpact.com\";\nconst SHOELACE_BASE = `${CDN_BASE}/lib/shoelace/v${dependencies[\"@shoelace-style/shoelace\"]}`;\nconst ICON_BASE = `${CDN_BASE}/lib/lucide-static/v${dependencies[\"lucide-static\"]}`;\n\nregisterIconLibrary(\"lucide\", {\n resolver: (name: string) => `${ICON_BASE}/icons/${name}.svg`,\n});\n\nsetBasePath(SHOELACE_BASE);\n\nif (document && !document.querySelector(\"link[data-beam-impact]\")) {\n const stylesheet = document.createElement(\"link\");\n stylesheet.href = `${SHOELACE_BASE}/themes/light.css`;\n stylesheet.rel = \"stylesheet\";\n stylesheet.setAttribute(\"data-beam-impact\", \"true\");\n document.head.appendChild(stylesheet);\n}\n"],"names":["CDN_BASE","SHOELACE_BASE","dependencies","ICON_BASE","registerIconLibrary","name","setBasePath","stylesheet"],"mappings":"+LASA,MAAMA,EAAW,6BACXC,EAAgB,GAAGD,CAAQ,kBAAkBE,EAAa,0BAA0B,CAAC,GACrFC,EAAY,GAAGH,CAAQ,uBAAuBE,EAAa,eAAe,CAAC,GAQjF,GANAE,EAAoB,SAAU,CAC5B,SAAWC,GAAiB,GAAGF,CAAS,UAAUE,CAAI,MACxD,CAAC,EAEDC,EAAYL,CAAa,EAErB,UAAY,CAAC,SAAS,cAAc,wBAAwB,EAAG,CACjE,MAAMM,EAAa,SAAS,cAAc,MAAM,EAChDA,EAAW,KAAO,GAAGN,CAAa,oBAClCM,EAAW,IAAM,aACjBA,EAAW,aAAa,mBAAoB,MAAM,EAClD,SAAS,KAAK,YAAYA,CAAU,CACtC"}
@@ -1,6 +1,6 @@
1
1
  import * as lodash from 'lodash';
2
- import { M as MemoizedLast, d as TCart } from './utils-COGFpDER.esm.js';
3
- import { B as BeamCartAPIConfig, a as BeamCartValues } from './update-cart-DoJGAdoU.esm.js';
2
+ import { M as MemoizedLast, d as TCart } from './utils-BPcZ5h8J.esm.js';
3
+ import { B as BeamCartAPIConfig, a as BeamCartValues } from './update-cart-B5Tr9N3V.esm.js';
4
4
 
5
5
  type BeamShopifyCartIntegrationConfig = BeamCartAPIConfig & {
6
6
  storeId: number;
@@ -1,4 +1,4 @@
1
- import{j as P,b as i,i as D,n as c,r as v,a as z,e as C,h as E,k as I}from"./lit-BEag9MFp.esm.js";import{d as N}from"./lodash-CrMU6wKg.esm.js";import{n as B,u as g,h as L,A as R,e as h,f as A,d as m,_ as F,c as x}from"./index-Dm-K2MLY.esm.js";import{D as M,P as U,W as y,L as w,z as W,B as O,v as j,n as _}from"./utils-C5hmbxa4.esm.js";import{c as K,a as H,d as V,e as S,b as G}from"./css-card-grid-CiqEjkwR.esm.js";import{a as q}from"./share-button-5gfPmeEh.esm.js";import{partnerLogosConfigDefaults as J}from"../components/beam-partner-logos.js";import{p as Y}from"./promo-pill-label-5HmbDVmU.esm.js";const Q=B("/v4/transaction","post"),X=B("/v4/transaction/redeem/{transactionId}","put"),Z=({height:t="1em",width:e="1em"}={})=>i`
1
+ import{j as P,b as i,i as D,n as c,r as v,a as z,e as C,h as E,k as I}from"./lit-BEag9MFp.esm.js";import{d as N}from"./lodash-CrMU6wKg.esm.js";import{n as x,u as g,h as L,A as R,e as h,f as A,d as m,_ as F,c as B}from"./index-BpR0FMss.esm.js";import{D as M,P as U,W as y,L as w,z as W,B as O,v as j,n as _}from"./utils-C5hmbxa4.esm.js";import{c as K,a as H,d as V,e as S,b as G}from"./css-card-grid-CiqEjkwR.esm.js";import{a as q}from"./share-button-Cle5Uexn.esm.js";import{partnerLogosConfigDefaults as J}from"../components/beam-partner-logos.js";import{p as Y}from"./promo-pill-label-F6oSUeZ_.esm.js";const Q=x("/v4/transaction","post"),X=x("/v4/transaction/redeem/{transactionId}","put"),Z=x("/v4/transaction/{transactionId}/update","post"),ee=({height:t="1em",width:e="1em"}={})=>i`
2
2
  <svg
3
3
  style="${P({height:t,width:e,position:"relative",bottom:"0"})}"
4
4
  xmlns="http://www.w3.org/2000/svg"
@@ -7,7 +7,7 @@ import{j as P,b as i,i as D,n as c,r as v,a as z,e as C,h as E,k as I}from"./lit
7
7
  <!-- Filled Circle -->
8
8
  <circle cx="12" cy="12" r="10" fill="currentColor" />
9
9
  </svg>
10
- `,b={en:{beamAttribution:()=>"Powered by Beam",ctaTitle:()=>"Choose your impact",ctaPromoPrefixMessage:()=>"At no extra cost,",ctaPromoMessage:({donationPercentage:t="1"}={})=>`select a nonprofit and ${t}% will be donated there for you.`,ctaMessage:({donationPercentage:t="1"}={})=>`At no extra cost, select a nonprofit and ${t}% will be donated there for you.`,submitButtonText:()=>"Confirm",submitButtonTextCompleted:()=>"Confirmed!",chooseButtonText:()=>"Choose a nonprofit"},fr:{beamAttribution:()=>"Optimis\xE9 par Beam",ctaTitle:()=>"Choisissez votre cause",ctaPromoPrefixMessage:()=>"Sans frais suppl\xE9mentaires,",ctaPromoMessage:({donationPercentage:t="1"}={})=>`s\xE9lectionnez une association et ${t} % sera revers\xE9 en votre nom.`,ctaMessage:({donationPercentage:t="1"}={})=>`Sans frais suppl\xE9mentaires, choisissez une association et ${t} % de votre commande lui sera revers\xE9 en votre nom.`,submitButtonText:()=>"Confirmer",submitButtonTextCompleted:()=>"Confirm\xE9 !",chooseButtonText:()=>"Choisir une association"},de:{beamAttribution:()=>"Unterst\xFCtzt von Beam",ctaTitle:()=>"W\xE4hle deine Wirkung",ctaPromoPrefixMessage:()=>"Ohne zus\xE4tzliche Kosten,",ctaPromoMessage:({donationPercentage:t="1"}={})=>`w\xE4hle eine gemeinn\xFCtzige Organisation und ${t}% werden in deinem Namen gespendet.`,ctaMessage:({donationPercentage:t="1"}={})=>`Ohne zus\xE4tzliche Kosten kannst du eine Organisation ausw\xE4hlen, und ${t}% deiner Bestellung werden gespendet.`,submitButtonText:()=>"Best\xE4tigen",submitButtonTextCompleted:()=>"Best\xE4tigt!",chooseButtonText:()=>"W\xE4hle eine Organisation"},es:{beamAttribution:()=>"Ofrecido por Beam",ctaTitle:()=>"Elige tu impacto",ctaPromoPrefixMessage:()=>"Sin coste adicional,",ctaPromoMessage:({donationPercentage:t="1"}={})=>`elige una organizaci\xF3n y donaremos el ${t}% en tu nombre.`,ctaMessage:({donationPercentage:t="1"}={})=>`Sin coste adicional, elige una organizaci\xF3n sin \xE1nimo de lucro y donaremos el ${t}% de tu compra en tu nombre.`,submitButtonText:()=>"Confirmar",submitButtonTextCompleted:()=>"\xA1Confirmado!",chooseButtonText:()=>"Elige una organizaci\xF3n"},it:{beamAttribution:()=>"Promosso da Beam",ctaTitle:()=>"Scegli il tuo impatto",ctaPromoPrefixMessage:()=>"Senza costi aggiuntivi,",ctaPromoMessage:({donationPercentage:t="1"}={})=>`scegli un'organizzazione e doneremo l\u2019${t}% per te.`,ctaMessage:({donationPercentage:t="1"}={})=>`Senza costi aggiuntivi, scegli un'organizzazione no profit e doneremo l\u2019${t}% del tuo acquisto a suo favore.`,submitButtonText:()=>"Conferma",submitButtonTextCompleted:()=>"Confermato!",chooseButtonText:()=>"Scegli un'organizzazione"},pl:{beamAttribution:()=>"Obs\u0142ugiwane przez Beam",ctaTitle:()=>"Wybierz sw\xF3j wp\u0142yw",ctaPromoPrefixMessage:()=>"Bez dodatkowych koszt\xF3w,",ctaPromoMessage:({donationPercentage:t="1"}={})=>`wybierz organizacj\u0119, a ${t}% zostanie przekazane w Twoim imieniu.`,ctaMessage:({donationPercentage:t="1"}={})=>`Bez dodatkowych koszt\xF3w mo\u017Cesz wybra\u0107 organizacj\u0119, kt\xF3rej przeka\u017Cemy ${t}% warto\u015Bci Twojego zam\xF3wienia w Twoim imieniu.`,submitButtonText:()=>"Potwierd\u017A",submitButtonTextCompleted:()=>"Potwierdzono!",chooseButtonText:()=>"Wybierz organizacj\u0119"},ja:{beamAttribution:()=>"Powered by Beam",ctaTitle:()=>"\u5BC4\u4ED8\u5148\u3092\u304A\u9078\u3073\u304F\u3060\u3055\u3044\u3002",ctaPromoPrefixMessage:()=>"\u8FFD\u52A0\u8CBB\u7528\u306A\u3057\u3067\u3001",ctaPromoMessage:({donationPercentage:t="1"}={})=>`\u975E\u55B6\u5229\u56E3\u4F53\u3092\u9078\u3076\u3068\u3001${t}%\u304C\u305D\u306E\u56E3\u4F53\u306B\u5BC4\u4ED8\u3055\u308C\u307E\u3059\u3002`,ctaMessage:({donationPercentage:t="1"}={})=>`\u8FFD\u52A0\u8CBB\u7528\u306A\u3057\u3067\u975E\u55B6\u5229\u56E3\u4F53\u3092\u304A\u9078\u3073\u3044\u305F\u3060\u304F\u3068\u3001\u3054\u8CFC\u5165\u91D1\u984D\u306E${t}%\u304C\u5BC4\u4ED8\u3055\u308C\u307E\u3059\u3002`,submitButtonText:()=>"\u78BA\u8A8D\u3059\u308B",submitButtonTextCompleted:()=>"\u78BA\u8A8D\u6E08\u307F",chooseButtonText:()=>"\u975E\u55B6\u5229\u56E3\u4F53\u3092\u9078\u629E\u3057\u3066\u304F\u3060\u3055\u3044"}};var ee=Object.defineProperty,d=(t,e,o,a)=>{for(var n=void 0,u=t.length-1,l;u>=0;u--)(l=t[u])&&(n=l(e,o,n)||n);return n&&ee(e,o,n),n};class r extends z{constructor(){super(...arguments),this.baseUrl=M,this.lang="en",this.debug=!1,this.draftConfig=!1,this.isMobile=window.innerWidth<768,this.didUserExpandNonprofits=!1,this.shouldUsePromoUI=!1,this.getChainNonprofits=async()=>{if(!this.hasCorrectTransactionConfig)throw new U;const e=await L({baseUrl:this.baseUrl,headers:{authorization:`Api-Key ${this.apiKey}`},requestBody:{storeId:this.storeId,postalCode:this.postalCode,countryCode:this.countryCode,transactionId:String(this.transactionId),cart:this.cart??void 0,widgetName:y.redeem_transaction,options:{config:{draftConfig:this.draftConfig}},version:"2.0.0",lang:this.configLang}});return e.store?.id&&e.store.id!==this.storeId&&(this.storeId=e.store.id),this.localStorage.setItemJson(w.CHAIN_NONPROFITS,{createdAt:new Date,data:e}),e},this.updateNonprofitIdForRecord=async({selectedNonprofitId:e})=>this.transactionId?this.putTransaction({selectedNonprofitId:e}):null,this.putTransaction=async({selectedNonprofitId:e})=>(S(["apiKey","transactionId"],this),X({baseUrl:this.baseUrl,apiRoot:"/api",headers:{authorization:`Api-Key ${this.apiKey}`},pathParams:{transactionId:this.transactionId},requestBody:{nonprofitId:e}})),this.nonprofitListDataController=new R(this,this.getChainNonprofits),this.selectionDataController=new R(this,this.updateNonprofitIdForRecord),this.localStorage=W(this),this.makeHandleSelect=(e,o,a)=>async n=>{if(!this.allowChange)return;const u=this.selectedNonprofitId;if(n instanceof KeyboardEvent){let l=null;switch(n.key){case"ArrowUp":case"ArrowLeft":o===0?l=a[a.length-1]:l=a[o-1],n.preventDefault();break;case"ArrowRight":case"ArrowDown":o===a.length-1?l=a[0]:l=a[o+1],n.preventDefault();break;case"Enter":case" ":n.preventDefault();break;default:return}if(l){const p=this.renderRoot.querySelector(`[data-value="${l.nonprofit.id}"]`);p!==null&&(p.tabIndex=0,p.focus());return}}if(n.currentTarget instanceof HTMLElement){if(u===e)return;this.selectedNonprofitId=e}},this.handleSubmit=async()=>{const{selectedNonprofitId:e}=this;if(!this.allowSubmit||e==null)return;await this.selectionDataController.exec({selectedNonprofitId:e}),this.localStorage.setItem("nonprofit",e),this.localStorage.setItem("nonprofit_selected_at",new Date().toISOString());const o=this.nonprofitListDataController?.data?.nonprofits.find(a=>a.nonprofit.id===e);this.dispatchEvent(new O({selectedNonprofitId:e,nonprofitName:o?.nonprofit.name,source:y.redeem_transaction,timestamp:new Date}))},this.evaluateBreakPoints=N(()=>{this.isMobile=window.innerWidth<768},50,{maxWait:50,leading:!0})}get configLang(){return j[this.lang]||"en"}get hasCorrectTransactionConfig(){return G(["apiKey","transactionId"],this)}connectedCallback(){super.connectedCallback(),window.addEventListener("resize",this.evaluateBreakPoints)}async firstUpdated(e){await this.restoreStateFromCache()}async updated(e){const o=["baseUrl","storeId","apiKey","countryCode","postalCode","lang"];for(const a of o)if(e.has(a)){await this.nonprofitListDataController.exec();break}}disconnectedCallback(){super.disconnectedCallback()}restoreStateFromCache(){S(["apiKey"],this),this.selectedNonprofitId=parseInt(this.localStorage.getItem("nonprofit")||"")||void 0;try{const{createdAt:e=0,data:o}=this.localStorage.getItemJson(w.CHAIN_NONPROFITS)||{},a=7200*1e3;new Date(e).valueOf()+a>new Date().valueOf()&&(this.nonprofitListDataController.data=o,this.nonprofitListDataController.loading=!1)}catch{}}get allowChange(){return this.selectionDataController.data==null&&!this.selectionDataController.loading}get allowSubmit(){return!!(this.selectedNonprofitId&&this.allowChange)}get cssVariables(){const e={"--beam-fontFamily":"inherit","--beam-fontStyle":"inherit","--beam-fontSize":"inherit","--beam-textColor":"inherit","--beam-backgroundColor":"inherit",...h("--beam-RedeemTransaction-title",{fontSize:"1.25em",fontWeight:"bold"}),...h("--beam-RedeemTransaction-description",{marginTop:"0.5em",lineHeight:"normal"}),...J,...q,"--beam-RedeemTransaction-maxWidth":"1000px","--beam-RedeemTransaction-submitButton-fontSize":"14px","--beam-RedeemTransaction-submitButton-fontWeight":"inherit","--beam-RedeemTransaction-submitButton-fontFamily":"inherit","--beam-RedeemTransaction-submitButton-textTransform":"uppercase","--beam-RedeemTransaction-submitButton-color":"#fff","--beam-RedeemTransaction-submitButton-backgroundColor":"#000000","--beam-RedeemTransaction-submitButton-borderRadius":"0px","--beam-RedeemTransaction-submitButton-borderColor":"#000000","--beam-RedeemTransaction-submitButton-padding":"16px 0px","--beam-RedeemTransaction-submitButton-width":"100%","--beam-RedeemTransaction-submitButton-marginTop":"10px","--beam-RedeemTransaction-submitButton-marginBottom":"10px","--beam-RedeemTransaction-submitButtonContainer-display":"flex","--beam-RedeemTransaction-submitButtonContainer-backgroundColor":"#fff","--beam-RedeemTransaction-submitButton-hover-backgroundColor":"#000000","--beam-RedeemTransaction-submitButton-hover-borderColor":"#000000","--beam-RedeemTransaction-submitButton-hover-color":"#fff","--beam-RedeemTransaction-submitButton-disabled-borderColor":"#767676","--beam-RedeemTransaction-submitButton-disabled-backgroundColor":"#767676","--beam-RedeemTransaction-submitButton-disabled-color":"#fff","--beam-RedeemTransaction-radioButton-color":"transparent","--beam-RedeemTransaction-radioButton-borderColor":"#707070","--beam-RedeemTransaction-radioButton-backgroundColor":"#fff","--beam-RedeemTransaction-radioButton-hover-color":"#fff","--beam-RedeemTransaction-radioButton-hover-backgroundColor":"#000","--beam-RedeemTransaction-radioButton-hover-borderColor":"#000","--beam-RedeemTransaction-radioButton-selected-borderColor":"#000","--beam-RedeemTransaction-radioButton-selected-backgroundColor":"#000","--beam-RedeemTransaction-radioButton-selected-color":"#fff","--beam-RedeemTransaction-options-minWidth":"0px","--beam-RedeemTransaction-options-columnCount":"1","--beam-RedeemTransaction-options-borderWidth":"1px","--beam-RedeemTransaction-options-image-borderRadius":"8px","--beam-RedeemTransaction-options-image-height":"70px","--beam-RedeemTransaction-options-image-height-mobile":"75px","--beam-RedeemTransaction-options-borderColor":"#d9d9d9","--beam-RedeemTransaction-options-backgroundColor":"transparent","--beam-RedeemTransaction-options-marginTop":"15px","--beam-RedeemTransaction-options-hover-backgroundColor":"#f1f1f1","--beam-RedeemTransaction-options-hover-borderWidth":".5px","--beam-RedeemTransaction-options-hover-borderColor":"#000000","--beam-RedeemTransaction-options-selected-borderColor":"#000000","--beam-RedeemTransaction-options-selected-borderWidth":".5px","--beam-RedeemTransaction-options-selected-backgroundColor":"#eee",...h("--beam-RedeemTransaction-options-details",{fontSize:"0.85em",marginTop:"0px",lineHeight:"normal",letterSpacing:"-0.45px"}),...h("--beam-RedeemTransaction-options-details-cause",{fontSize:"1em",fontWeight:"bold"}),"--beam-RedeemTransaction-options-details-nonprofitName-fontWeight":"normal","--beam-RedeemTransaction-options-details-nonprofitName-fontStyle":"inherit","--beam-RedeemTransaction-options-details-fundingProgress-marginTop":"3px",...h("--beam-RedeemTransaction-options-details-fundingProgressLabel",{fontSize:"0.85em",textTransform:"capitalize"}),"--beam-RedeemTransaction-cardStyle":"'image'","--beam-RedeemTransaction-options-icon-padding":"0px","--beam-RedeemTransaction-options-icon-backgroundColor":"#F3F3F3","--beam-RedeemTransaction-options-collapseNonprofits-mobile":"false","--beam-RedeemTransaction-options-collapseNonprofits-desktop":"false","--beam-RedeemTransaction-image-width":"13%","--beam-RedeemTransaction-image-height":"50%","--beam-RedeemTransaction-image-width-mobile":"16%",...Y},o=this.nonprofitListDataController?.data?.config?.web?.theme||{},a={...e,...o};return Object.assign(Object.create({toCSS(){return A(this)}}),a)}handleChooseClick(){this.didUserExpandNonprofits=!0}get shouldCollapse(){const e=this.cssVariables["--beam-RedeemTransaction-options-collapseNonprofits-mobile"],o=this.cssVariables["--beam-RedeemTransaction-options-collapseNonprofits-desktop"],a=e?.toLowerCase()==="true",n=o?.toLowerCase()==="true";return this.isMobile&&a||!this.isMobile&&n}renderSubmitButton(e){return i`
10
+ `,b={en:{beamAttribution:()=>"Powered by Beam",ctaTitle:()=>"Choose your impact",ctaPromoPrefixMessage:()=>"At no extra cost,",ctaPromoMessage:({donationPercentage:t="1"}={})=>`select a nonprofit and ${t}% will be donated there for you.`,ctaMessage:({donationPercentage:t="1"}={})=>`At no extra cost, select a nonprofit and ${t}% will be donated there for you.`,submitButtonText:()=>"Confirm",submitButtonTextCompleted:()=>"Confirmed!",chooseButtonText:()=>"Choose a nonprofit"},fr:{beamAttribution:()=>"Optimis\xE9 par Beam",ctaTitle:()=>"Choisissez votre cause",ctaPromoPrefixMessage:()=>"Sans frais suppl\xE9mentaires,",ctaPromoMessage:({donationPercentage:t="1"}={})=>`s\xE9lectionnez une association et ${t} % sera revers\xE9 en votre nom.`,ctaMessage:({donationPercentage:t="1"}={})=>`Sans frais suppl\xE9mentaires, choisissez une association et ${t} % de votre commande lui sera revers\xE9 en votre nom.`,submitButtonText:()=>"Confirmer",submitButtonTextCompleted:()=>"Confirm\xE9 !",chooseButtonText:()=>"Choisir une association"},de:{beamAttribution:()=>"Unterst\xFCtzt von Beam",ctaTitle:()=>"W\xE4hle deine Wirkung",ctaPromoPrefixMessage:()=>"Ohne zus\xE4tzliche Kosten,",ctaPromoMessage:({donationPercentage:t="1"}={})=>`w\xE4hle eine gemeinn\xFCtzige Organisation und ${t}% werden in deinem Namen gespendet.`,ctaMessage:({donationPercentage:t="1"}={})=>`Ohne zus\xE4tzliche Kosten kannst du eine Organisation ausw\xE4hlen, und ${t}% deiner Bestellung werden gespendet.`,submitButtonText:()=>"Best\xE4tigen",submitButtonTextCompleted:()=>"Best\xE4tigt!",chooseButtonText:()=>"W\xE4hle eine Organisation"},es:{beamAttribution:()=>"Ofrecido por Beam",ctaTitle:()=>"Elige tu impacto",ctaPromoPrefixMessage:()=>"Sin coste adicional,",ctaPromoMessage:({donationPercentage:t="1"}={})=>`elige una organizaci\xF3n y donaremos el ${t}% en tu nombre.`,ctaMessage:({donationPercentage:t="1"}={})=>`Sin coste adicional, elige una organizaci\xF3n sin \xE1nimo de lucro y donaremos el ${t}% de tu compra en tu nombre.`,submitButtonText:()=>"Confirmar",submitButtonTextCompleted:()=>"\xA1Confirmado!",chooseButtonText:()=>"Elige una organizaci\xF3n"},it:{beamAttribution:()=>"Promosso da Beam",ctaTitle:()=>"Scegli il tuo impatto",ctaPromoPrefixMessage:()=>"Senza costi aggiuntivi,",ctaPromoMessage:({donationPercentage:t="1"}={})=>`scegli un'organizzazione e doneremo l\u2019${t}% per te.`,ctaMessage:({donationPercentage:t="1"}={})=>`Senza costi aggiuntivi, scegli un'organizzazione no profit e doneremo l\u2019${t}% del tuo acquisto a suo favore.`,submitButtonText:()=>"Conferma",submitButtonTextCompleted:()=>"Confermato!",chooseButtonText:()=>"Scegli un'organizzazione"},pl:{beamAttribution:()=>"Obs\u0142ugiwane przez Beam",ctaTitle:()=>"Wybierz sw\xF3j wp\u0142yw",ctaPromoPrefixMessage:()=>"Bez dodatkowych koszt\xF3w,",ctaPromoMessage:({donationPercentage:t="1"}={})=>`wybierz organizacj\u0119, a ${t}% zostanie przekazane w Twoim imieniu.`,ctaMessage:({donationPercentage:t="1"}={})=>`Bez dodatkowych koszt\xF3w mo\u017Cesz wybra\u0107 organizacj\u0119, kt\xF3rej przeka\u017Cemy ${t}% warto\u015Bci Twojego zam\xF3wienia w Twoim imieniu.`,submitButtonText:()=>"Potwierd\u017A",submitButtonTextCompleted:()=>"Potwierdzono!",chooseButtonText:()=>"Wybierz organizacj\u0119"},ja:{beamAttribution:()=>"Powered by Beam",ctaTitle:()=>"\u5BC4\u4ED8\u5148\u3092\u304A\u9078\u3073\u304F\u3060\u3055\u3044\u3002",ctaPromoPrefixMessage:()=>"\u8FFD\u52A0\u8CBB\u7528\u306A\u3057\u3067\u3001",ctaPromoMessage:({donationPercentage:t="1"}={})=>`\u975E\u55B6\u5229\u56E3\u4F53\u3092\u9078\u3076\u3068\u3001${t}%\u304C\u305D\u306E\u56E3\u4F53\u306B\u5BC4\u4ED8\u3055\u308C\u307E\u3059\u3002`,ctaMessage:({donationPercentage:t="1"}={})=>`\u8FFD\u52A0\u8CBB\u7528\u306A\u3057\u3067\u975E\u55B6\u5229\u56E3\u4F53\u3092\u304A\u9078\u3073\u3044\u305F\u3060\u304F\u3068\u3001\u3054\u8CFC\u5165\u91D1\u984D\u306E${t}%\u304C\u5BC4\u4ED8\u3055\u308C\u307E\u3059\u3002`,submitButtonText:()=>"\u78BA\u8A8D\u3059\u308B",submitButtonTextCompleted:()=>"\u78BA\u8A8D\u6E08\u307F",chooseButtonText:()=>"\u975E\u55B6\u5229\u56E3\u4F53\u3092\u9078\u629E\u3057\u3066\u304F\u3060\u3055\u3044"}};var oe=Object.defineProperty,d=(t,e,o,a)=>{for(var n=void 0,u=t.length-1,l;u>=0;u--)(l=t[u])&&(n=l(e,o,n)||n);return n&&oe(e,o,n),n};class r extends z{constructor(){super(...arguments),this.baseUrl=M,this.lang="en",this.debug=!1,this.draftConfig=!1,this.isMobile=window.innerWidth<768,this.didUserExpandNonprofits=!1,this.shouldUsePromoUI=!1,this.getChainNonprofits=async()=>{if(!this.hasCorrectTransactionConfig)throw new U;const e=await L({baseUrl:this.baseUrl,headers:{authorization:`Api-Key ${this.apiKey}`},requestBody:{storeId:this.storeId,postalCode:this.postalCode,countryCode:this.countryCode,transactionId:String(this.transactionId),cart:this.cart??void 0,widgetName:y.redeem_transaction,options:{config:{draftConfig:this.draftConfig}},version:"2.0.0",lang:this.configLang}});return e.store?.id&&e.store.id!==this.storeId&&(this.storeId=e.store.id),this.localStorage.setItemJson(w.CHAIN_NONPROFITS,{createdAt:new Date,data:e}),e},this.updateNonprofitIdForRecord=async({selectedNonprofitId:e})=>this.transactionId?this.putTransaction({selectedNonprofitId:e}):null,this.putTransaction=async({selectedNonprofitId:e})=>(S(["apiKey","transactionId"],this),X({baseUrl:this.baseUrl,apiRoot:"/api",headers:{authorization:`Api-Key ${this.apiKey}`},pathParams:{transactionId:this.transactionId},requestBody:{nonprofitId:e}})),this.nonprofitListDataController=new R(this,this.getChainNonprofits),this.selectionDataController=new R(this,this.updateNonprofitIdForRecord),this.localStorage=W(this),this.makeHandleSelect=(e,o,a)=>async n=>{if(!this.allowChange)return;const u=this.selectedNonprofitId;if(n instanceof KeyboardEvent){let l=null;switch(n.key){case"ArrowUp":case"ArrowLeft":o===0?l=a[a.length-1]:l=a[o-1],n.preventDefault();break;case"ArrowRight":case"ArrowDown":o===a.length-1?l=a[0]:l=a[o+1],n.preventDefault();break;case"Enter":case" ":n.preventDefault();break;default:return}if(l){const p=this.renderRoot.querySelector(`[data-value="${l.nonprofit.id}"]`);p!==null&&(p.tabIndex=0,p.focus());return}}if(n.currentTarget instanceof HTMLElement){if(u===e)return;this.selectedNonprofitId=e}},this.handleSubmit=async()=>{const{selectedNonprofitId:e}=this;if(!this.allowSubmit||e==null)return;await this.selectionDataController.exec({selectedNonprofitId:e}),this.localStorage.setItem("nonprofit",e),this.localStorage.setItem("nonprofit_selected_at",new Date().toISOString());const o=this.nonprofitListDataController?.data?.nonprofits.find(a=>a.nonprofit.id===e);this.dispatchEvent(new O({selectedNonprofitId:e,nonprofitName:o?.nonprofit.name,source:y.redeem_transaction,timestamp:new Date}))},this.evaluateBreakPoints=N(()=>{this.isMobile=window.innerWidth<768},50,{maxWait:50,leading:!0})}get configLang(){return j[this.lang]||"en"}get hasCorrectTransactionConfig(){return G(["apiKey","transactionId"],this)}connectedCallback(){super.connectedCallback(),window.addEventListener("resize",this.evaluateBreakPoints)}async firstUpdated(e){await this.restoreStateFromCache()}async updated(e){const o=["baseUrl","storeId","apiKey","countryCode","postalCode","lang"];for(const a of o)if(e.has(a)){await this.nonprofitListDataController.exec();break}}disconnectedCallback(){super.disconnectedCallback()}restoreStateFromCache(){S(["apiKey"],this),this.selectedNonprofitId=parseInt(this.localStorage.getItem("nonprofit")||"")||void 0;try{const{createdAt:e=0,data:o}=this.localStorage.getItemJson(w.CHAIN_NONPROFITS)||{},a=7200*1e3;new Date(e).valueOf()+a>new Date().valueOf()&&(this.nonprofitListDataController.data=o,this.nonprofitListDataController.loading=!1)}catch{}}get allowChange(){return this.selectionDataController.data==null&&!this.selectionDataController.loading}get allowSubmit(){return!!(this.selectedNonprofitId&&this.allowChange)}get cssVariables(){const e={"--beam-fontFamily":"inherit","--beam-fontStyle":"inherit","--beam-fontSize":"inherit","--beam-textColor":"inherit","--beam-backgroundColor":"inherit",...h("--beam-RedeemTransaction-title",{fontSize:"1.25em",fontWeight:"bold"}),...h("--beam-RedeemTransaction-description",{marginTop:"0.5em",lineHeight:"normal"}),...J,...q,"--beam-RedeemTransaction-maxWidth":"1000px","--beam-RedeemTransaction-submitButton-fontSize":"14px","--beam-RedeemTransaction-submitButton-fontWeight":"inherit","--beam-RedeemTransaction-submitButton-fontFamily":"inherit","--beam-RedeemTransaction-submitButton-textTransform":"uppercase","--beam-RedeemTransaction-submitButton-color":"#fff","--beam-RedeemTransaction-submitButton-backgroundColor":"#000000","--beam-RedeemTransaction-submitButton-borderRadius":"0px","--beam-RedeemTransaction-submitButton-borderColor":"#000000","--beam-RedeemTransaction-submitButton-padding":"16px 0px","--beam-RedeemTransaction-submitButton-width":"100%","--beam-RedeemTransaction-submitButton-marginTop":"10px","--beam-RedeemTransaction-submitButton-marginBottom":"10px","--beam-RedeemTransaction-submitButtonContainer-display":"flex","--beam-RedeemTransaction-submitButtonContainer-backgroundColor":"#fff","--beam-RedeemTransaction-submitButton-hover-backgroundColor":"#000000","--beam-RedeemTransaction-submitButton-hover-borderColor":"#000000","--beam-RedeemTransaction-submitButton-hover-color":"#fff","--beam-RedeemTransaction-submitButton-disabled-borderColor":"#767676","--beam-RedeemTransaction-submitButton-disabled-backgroundColor":"#767676","--beam-RedeemTransaction-submitButton-disabled-color":"#fff","--beam-RedeemTransaction-radioButton-color":"transparent","--beam-RedeemTransaction-radioButton-borderColor":"#707070","--beam-RedeemTransaction-radioButton-backgroundColor":"#fff","--beam-RedeemTransaction-radioButton-hover-color":"#fff","--beam-RedeemTransaction-radioButton-hover-backgroundColor":"#000","--beam-RedeemTransaction-radioButton-hover-borderColor":"#000","--beam-RedeemTransaction-radioButton-selected-borderColor":"#000","--beam-RedeemTransaction-radioButton-selected-backgroundColor":"#000","--beam-RedeemTransaction-radioButton-selected-color":"#fff","--beam-RedeemTransaction-options-minWidth":"0px","--beam-RedeemTransaction-options-columnCount":"1","--beam-RedeemTransaction-options-borderWidth":"1px","--beam-RedeemTransaction-options-image-borderRadius":"8px","--beam-RedeemTransaction-options-image-height":"70px","--beam-RedeemTransaction-options-image-height-mobile":"75px","--beam-RedeemTransaction-options-borderColor":"#d9d9d9","--beam-RedeemTransaction-options-backgroundColor":"transparent","--beam-RedeemTransaction-options-marginTop":"15px","--beam-RedeemTransaction-options-hover-backgroundColor":"#f1f1f1","--beam-RedeemTransaction-options-hover-borderWidth":".5px","--beam-RedeemTransaction-options-hover-borderColor":"#000000","--beam-RedeemTransaction-options-selected-borderColor":"#000000","--beam-RedeemTransaction-options-selected-borderWidth":".5px","--beam-RedeemTransaction-options-selected-backgroundColor":"#eee",...h("--beam-RedeemTransaction-options-details",{fontSize:"0.85em",marginTop:"0px",lineHeight:"normal",letterSpacing:"-0.45px"}),...h("--beam-RedeemTransaction-options-details-cause",{fontSize:"1em",fontWeight:"bold"}),"--beam-RedeemTransaction-options-details-nonprofitName-fontWeight":"normal","--beam-RedeemTransaction-options-details-nonprofitName-fontStyle":"inherit","--beam-RedeemTransaction-options-details-fundingProgress-marginTop":"3px",...h("--beam-RedeemTransaction-options-details-fundingProgressLabel",{fontSize:"0.85em",textTransform:"capitalize"}),"--beam-RedeemTransaction-cardStyle":"'image'","--beam-RedeemTransaction-options-icon-padding":"0px","--beam-RedeemTransaction-options-icon-backgroundColor":"#F3F3F3","--beam-RedeemTransaction-options-collapseNonprofits-mobile":"false","--beam-RedeemTransaction-options-collapseNonprofits-desktop":"false","--beam-RedeemTransaction-image-width":"13%","--beam-RedeemTransaction-image-height":"50%","--beam-RedeemTransaction-image-width-mobile":"16%",...Y},o=this.nonprofitListDataController?.data?.config?.web?.theme||{},a={...e,...o};return Object.assign(Object.create({toCSS(){return A(this)}}),a)}handleChooseClick(){this.didUserExpandNonprofits=!0}get shouldCollapse(){const e=this.cssVariables["--beam-RedeemTransaction-options-collapseNonprofits-mobile"],o=this.cssVariables["--beam-RedeemTransaction-options-collapseNonprofits-desktop"],a=e?.toLowerCase()==="true",n=o?.toLowerCase()==="true";return this.isMobile&&a||!this.isMobile&&n}renderSubmitButton(e){return i`
11
11
  ${this.didUserExpandNonprofits||!this.shouldCollapse?i` <button
12
12
  type="button"
13
13
  ?aria-disabled=${!this.allowSubmit}
@@ -24,7 +24,7 @@ import{j as P,b as i,i as D,n as c,r as v,a as z,e as C,h as E,k as I}from"./lit
24
24
  `}renderRadioButton(){return i`
25
25
  <div class="radioButtonContainer">
26
26
  <span part="radioButton" class="radioButton">
27
- <span style="line-height: 0;"> ${Z({height:"7px",width:"7px"})} </span>
27
+ <span style="line-height: 0;"> ${ee({height:"7px",width:"7px"})} </span>
28
28
  </span>
29
29
  </div>
30
30
  `}renderNonprofitImage(e,o){const a=this.cssVariables["--beam-RedeemTransaction-cardStyle"],n=o?a==="'icon'"?e.nonprofit.causeIconUrl:a==="'selected_icon'"?e.nonprofit.causeIconSelectedUrl:e.imageUrl:e.imageUrl;return i`
@@ -68,7 +68,7 @@ import{j as P,b as i,i as D,n as c,r as v,a as z,e as C,h as E,k as I}from"./lit
68
68
  </div>
69
69
  `}renderPromoPill(e,o,a){return i`
70
70
  ${e.promo?.isActive&&this.shouldUsePromoUI&&o?i`<beam-promo-info-pill .promo=${a?.config?.web?.promo} shortVersion></beam-promo-info-pill>`:i``}
71
- `}render(){const{selectedNonprofitId:e}=this,{data:o,loading:a}=this.nonprofitListDataController;if(a&&!o)return F();if(this.nonprofitListDataController.error)return this.debug?x({error:this.nonprofitListDataController.error}):"";if(this.selectionDataController.error&&this.debug)return x({error:this.selectionDataController.error});if(o==null)return this.debug?x({error:new _("No data")}):"";const n=o?.nonprofits||[],u=n.find(s=>s.nonprofit.id===e)||null,l=this.cssVariables["--beam-RedeemTransaction-cardStyle"]==="'icon'"||this.cssVariables["--beam-RedeemTransaction-cardStyle"]==="'selected_icon'",p=o?.config?.web?.promo;this.shouldUsePromoUI=!!p;const k=n.some(s=>!s.promo||!s.promo.isActive);return i`
71
+ `}render(){const{selectedNonprofitId:e}=this,{data:o,loading:a}=this.nonprofitListDataController;if(a&&!o)return F();if(this.nonprofitListDataController.error)return this.debug?B({error:this.nonprofitListDataController.error}):"";if(this.selectionDataController.error&&this.debug)return B({error:this.selectionDataController.error});if(o==null)return this.debug?B({error:new _("No data")}):"";const n=o?.nonprofits||[],u=n.find(s=>s.nonprofit.id===e)||null,l=this.cssVariables["--beam-RedeemTransaction-cardStyle"]==="'icon'"||this.cssVariables["--beam-RedeemTransaction-cardStyle"]==="'selected_icon'",p=o?.config?.web?.promo;this.shouldUsePromoUI=!!p;const k=n.some(s=>!s.promo||!s.promo.isActive);return i`
72
72
  <style>
73
73
  :host {
74
74
  ${this.cssVariables.toCSS()}
@@ -395,5 +395,5 @@ import{j as P,b as i,i as D,n as c,r as v,a as z,e as C,h as E,k as I}from"./lit
395
395
  justify-content: center;
396
396
  align-items: center;
397
397
  }
398
- `,H({gap:"0px",itemMinWidth:"var(--beam-RedeemTransaction-options-minWidth, 0px)",columnCount:"var(--beam-RedeemTransaction-options-columnCount, 1)"})],d([c({type:String})],r.prototype,"baseUrl"),d([c({type:String})],r.prototype,"apiKey"),d([c({type:Number})],r.prototype,"transactionId"),d([c({type:Number})],r.prototype,"storeId"),d([c({type:String})],r.prototype,"countryCode"),d([c({type:String})],r.prototype,"postalCode"),d([c({type:Object})],r.prototype,"cart"),d([c({type:Number,reflect:!0})],r.prototype,"selectedNonprofitId"),d([c({type:String})],r.prototype,"lang"),d([c({type:Boolean})],r.prototype,"debug"),d([c({type:Boolean})],r.prototype,"draftConfig"),d([v()],r.prototype,"isMobile"),d([v()],r.prototype,"didUserExpandNonprofits"),d([v()],r.prototype,"shouldUsePromoUI"),V(r);export{r as B,Q as p};
399
- //# sourceMappingURL=index-DqhM4Yoj.esm.js.map
398
+ `,H({gap:"0px",itemMinWidth:"var(--beam-RedeemTransaction-options-minWidth, 0px)",columnCount:"var(--beam-RedeemTransaction-options-columnCount, 1)"})],d([c({type:String})],r.prototype,"baseUrl"),d([c({type:String})],r.prototype,"apiKey"),d([c({type:Number})],r.prototype,"transactionId"),d([c({type:Number})],r.prototype,"storeId"),d([c({type:String})],r.prototype,"countryCode"),d([c({type:String})],r.prototype,"postalCode"),d([c({type:Object})],r.prototype,"cart"),d([c({type:Number,reflect:!0})],r.prototype,"selectedNonprofitId"),d([c({type:String})],r.prototype,"lang"),d([c({type:Boolean})],r.prototype,"debug"),d([c({type:Boolean})],r.prototype,"draftConfig"),d([v()],r.prototype,"isMobile"),d([v()],r.prototype,"didUserExpandNonprofits"),d([v()],r.prototype,"shouldUsePromoUI"),V(r);export{r as B,Q as p,Z as u};
399
+ //# sourceMappingURL=index-BXivnoQL.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index-BXivnoQL.esm.js","sources":["../../src/api-sdk/v4/routes.ts","../../src/shared/fragments/radioButton.ts","../../src/components/redeem-transaction/strings.ts","../../src/components/redeem-transaction/index.ts"],"sourcesContent":["import { makeOpenApiMethod } from \"../make-openapi-method\";\n\nexport const postTransaction = makeOpenApiMethod(\"/v4/transaction\", \"post\", 201);\n\nexport const putTransaction = makeOpenApiMethod(\"/v4/transaction/redeem/{transactionId}\", \"put\", 200);\n\nexport const updateTransaction = makeOpenApiMethod(\"/v4/transaction/{transactionId}/update\", \"post\", 200);\n","import { html } from \"lit\";\nimport { styleMap } from \"lit/directives/style-map.js\";\n\nexport const _radioButton = ({ height = \"1em\", width = \"1em\" } = {}) => html`\n <svg\n style=\"${styleMap({ height, width, position: \"relative\", bottom: \"0\" })}\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n >\n <!-- Filled Circle -->\n <circle cx=\"12\" cy=\"12\" r=\"10\" fill=\"currentColor\" />\n </svg>\n`;\n","export const strings = {\n en: {\n beamAttribution: () => `Powered by Beam`,\n ctaTitle: () => `Choose your impact`,\n ctaPromoPrefixMessage: () => `At no extra cost,`,\n ctaPromoMessage: ({ donationPercentage = \"1\" } = {}) =>\n `select a nonprofit and ${donationPercentage}% will be donated there for you.`,\n ctaMessage: ({ donationPercentage = \"1\" } = {}) =>\n `At no extra cost, select a nonprofit and ${donationPercentage}% will be donated there for you.`,\n submitButtonText: () => `Confirm`,\n submitButtonTextCompleted: () => `Confirmed!`,\n chooseButtonText: () => `Choose a nonprofit`,\n },\n fr: {\n beamAttribution: () => `Optimisé par Beam`,\n ctaTitle: () => `Choisissez votre cause`,\n ctaPromoPrefixMessage: () => `Sans frais supplémentaires,`,\n ctaPromoMessage: ({ donationPercentage = \"1\" } = {}) =>\n `sélectionnez une association et ${donationPercentage} % sera reversé en votre nom.`,\n ctaMessage: ({ donationPercentage = \"1\" } = {}) =>\n `Sans frais supplémentaires, choisissez une association et ${donationPercentage} % de votre commande lui sera reversé en votre nom.`,\n submitButtonText: () => `Confirmer`,\n submitButtonTextCompleted: () => `Confirmé !`,\n chooseButtonText: () => `Choisir une association`,\n },\n de: {\n beamAttribution: () => `Unterstützt von Beam`,\n ctaTitle: () => `Wähle deine Wirkung`,\n ctaPromoPrefixMessage: () => `Ohne zusätzliche Kosten,`,\n ctaPromoMessage: ({ donationPercentage = \"1\" } = {}) =>\n `wähle eine gemeinnützige Organisation und ${donationPercentage}% werden in deinem Namen gespendet.`,\n ctaMessage: ({ donationPercentage = \"1\" } = {}) =>\n `Ohne zusätzliche Kosten kannst du eine Organisation auswählen, und ${donationPercentage}% deiner Bestellung werden gespendet.`,\n submitButtonText: () => `Bestätigen`,\n submitButtonTextCompleted: () => `Bestätigt!`,\n chooseButtonText: () => `Wähle eine Organisation`,\n },\n es: {\n beamAttribution: () => `Ofrecido por Beam`,\n ctaTitle: () => `Elige tu impacto`,\n ctaPromoPrefixMessage: () => `Sin coste adicional,`,\n ctaPromoMessage: ({ donationPercentage = \"1\" } = {}) =>\n `elige una organización y donaremos el ${donationPercentage}% en tu nombre.`,\n ctaMessage: ({ donationPercentage = \"1\" } = {}) =>\n `Sin coste adicional, elige una organización sin ánimo de lucro y donaremos el ${donationPercentage}% de tu compra en tu nombre.`,\n submitButtonText: () => `Confirmar`,\n submitButtonTextCompleted: () => `¡Confirmado!`,\n chooseButtonText: () => `Elige una organización`,\n },\n it: {\n beamAttribution: () => `Promosso da Beam`,\n ctaTitle: () => `Scegli il tuo impatto`,\n ctaPromoPrefixMessage: () => `Senza costi aggiuntivi,`,\n ctaPromoMessage: ({ donationPercentage = \"1\" } = {}) =>\n `scegli un'organizzazione e doneremo l’${donationPercentage}% per te.`,\n ctaMessage: ({ donationPercentage = \"1\" } = {}) =>\n `Senza costi aggiuntivi, scegli un'organizzazione no profit e doneremo l’${donationPercentage}% del tuo acquisto a suo favore.`,\n submitButtonText: () => `Conferma`,\n submitButtonTextCompleted: () => `Confermato!`,\n chooseButtonText: () => `Scegli un'organizzazione`,\n },\n pl: {\n beamAttribution: () => `Obsługiwane przez Beam`,\n ctaTitle: () => `Wybierz swój wpływ`,\n ctaPromoPrefixMessage: () => `Bez dodatkowych kosztów,`,\n ctaPromoMessage: ({ donationPercentage = \"1\" } = {}) =>\n `wybierz organizację, a ${donationPercentage}% zostanie przekazane w Twoim imieniu.`,\n ctaMessage: ({ donationPercentage = \"1\" } = {}) =>\n `Bez dodatkowych kosztów możesz wybrać organizację, której przekażemy ${donationPercentage}% wartości Twojego zamówienia w Twoim imieniu.`,\n submitButtonText: () => `Potwierdź`,\n submitButtonTextCompleted: () => `Potwierdzono!`,\n chooseButtonText: () => `Wybierz organizację`,\n },\n ja: {\n beamAttribution: () => `Powered by Beam`,\n ctaTitle: () => `寄付先をお選びください。`,\n ctaPromoPrefixMessage: () => `追加費用なしで、`,\n ctaPromoMessage: ({ donationPercentage = \"1\" } = {}) =>\n `非営利団体を選ぶと、${donationPercentage}%がその団体に寄付されます。`,\n ctaMessage: ({ donationPercentage = \"1\" } = {}) =>\n `追加費用なしで非営利団体をお選びいただくと、ご購入金額の${donationPercentage}%が寄付されます。`,\n submitButtonText: () => `確認する`,\n submitButtonTextCompleted: () => `確認済み`,\n chooseButtonText: () => `非営利団体を選択してください`,\n },\n};\n","import { css, html, LitElement, PropertyValues } from \"lit\";\nimport { repeat } from \"lit/directives/repeat.js\";\nimport { property } from \"lit/decorators/property.js\";\nimport { classMap } from \"lit/directives/class-map.js\";\nimport { unsafeHTML } from \"lit/directives/unsafe-html.js\";\nimport { state } from \"lit/decorators/state.js\";\nimport debounce from \"lodash-es/debounce\";\nimport { AsyncController } from \"../../shared/controllers/async-controller\";\nimport { DEFAULT_BASE_URL, LOCAL_STORAGE_KEYS, SUPPORTED_LANGUAGES, WIDGET_NAMES } from \"../../api-sdk/constants\";\nimport { defineCustomElement } from \"../../shared/defineCustomElement\";\nimport { _loading } from \"../../shared/fragments/loading-template\";\nimport { _errorMessage } from \"../../shared/fragments/error-message-template\";\nimport { defineCustomText, useCustomText } from \"../../shared/fragments/custom-text\";\nimport { cssReset } from \"../../shared/css-reset\";\nimport { _cssVariableMap } from \"../../shared/fragments/css-variable-map\";\nimport { enforceConfig, areRequiredKeysDefined } from \"../../shared/enforce-config\";\nimport { BeamError, MissingConfig } from \"../../utils/beam-errors\";\nimport { TId, TNumericId } from \"../../shared/types\";\nimport { TCart } from \"../../shared/cart-contents\";\nimport { createScopedLocalStorage } from \"../../utils/local-storage\";\nimport { cssCardGrid } from \"../../shared/fragments/css-card-grid\";\nimport { postChainEligibleNonprofitsForCart } from \"../../api-sdk/v3/routes\";\nimport { putTransaction } from \"../../api-sdk/v4/routes\";\nimport { LANGUAGES } from \"../../api-sdk/types\";\nimport { BeamNonprofitSelectEvent } from \"../../utils/events\";\nimport { localizeUserString } from \"../../shared/localize\";\nimport { progressBarConfigDefaults } from \"../../shared/components/progress-bar\";\nimport { partnerLogosConfigDefaults } from \"../beam-partner-logos\";\nimport { promoPillLabelConfigDefaults } from \"../../shared/components/promo-pill-label\";\nimport { _radioButton } from \"../../shared/fragments/radioButton\";\nimport { strings } from \"./strings\";\n\ninterface TRequiredConfig {\n apiKey: string;\n transactionId: TId;\n}\n\ntype TIAPIV3GetChainNonprofits = Awaited<ReturnType<typeof import(\"../../api-sdk/v3/routes\").getChainNonprofits>>;\ntype TIAPIV3EligibleNonprofits = Awaited<\n ReturnType<typeof import(\"../../api-sdk/v3/routes\").getChainNonprofits>\n>[\"nonprofits\"];\ntype TIAPIV3Nonprofit = TIAPIV3EligibleNonprofits[number];\nexport class BeamRedeemTransaction extends LitElement {\n static tagName = \"beam-redeem-transaction\";\n\n @property({ type: String }) public baseUrl: string = DEFAULT_BASE_URL;\n\n @property({ type: String }) public apiKey?: TRequiredConfig[\"apiKey\"];\n\n @property({ type: Number }) public transactionId?: TRequiredConfig[\"transactionId\"];\n\n @property({ type: Number }) public storeId?: TNumericId;\n\n @property({ type: String }) public countryCode?: string;\n\n @property({ type: String }) public postalCode?: string;\n\n @property({ type: Object }) public cart?: TCart;\n\n @property({ type: Number, reflect: true })\n public selectedNonprofitId?: TNumericId;\n\n @property({ type: String }) public lang: LANGUAGES = \"en\";\n\n @property({ type: Boolean }) public debug = false;\n\n @property({ type: Boolean }) public draftConfig = false;\n\n @state() private isMobile = window.innerWidth < 768;\n\n @state() private didUserExpandNonprofits = false;\n\n @state() private shouldUsePromoUI = false;\n\n get configLang() {\n return SUPPORTED_LANGUAGES[this.lang] || \"en\";\n }\n\n private get hasCorrectTransactionConfig(): boolean {\n const requiredKeys: (keyof TRequiredConfig)[] = [\"apiKey\", \"transactionId\"];\n const isTransactionConfigCorrect = areRequiredKeysDefined(requiredKeys, this);\n return isTransactionConfigCorrect;\n }\n\n private getChainNonprofits = async () => {\n if (!this.hasCorrectTransactionConfig) {\n throw new MissingConfig();\n }\n\n const res = await postChainEligibleNonprofitsForCart({\n baseUrl: this.baseUrl,\n headers: { authorization: `Api-Key ${this.apiKey}` },\n requestBody: {\n storeId: this.storeId,\n postalCode: this.postalCode,\n countryCode: this.countryCode,\n transactionId: String(this.transactionId),\n cart: this.cart ?? undefined,\n widgetName: WIDGET_NAMES.redeem_transaction,\n options: {\n config: {\n draftConfig: this.draftConfig,\n },\n },\n version: \"2.0.0\",\n lang: this.configLang,\n },\n });\n\n // If store ID was not provided, get the store ID from response here\n if (res.store?.id && res.store.id !== this.storeId) {\n this.storeId = res.store.id;\n }\n\n this.localStorage.setItemJson(LOCAL_STORAGE_KEYS.CHAIN_NONPROFITS, {\n createdAt: new Date(),\n data: res,\n });\n\n return res;\n };\n\n private updateNonprofitIdForRecord = async ({ selectedNonprofitId }: { selectedNonprofitId: TNumericId }) => {\n if (this.transactionId) {\n return this.putTransaction({ selectedNonprofitId });\n }\n return null;\n };\n private putTransaction = async ({ selectedNonprofitId }: { selectedNonprofitId: TNumericId }) => {\n if (!enforceConfig<TRequiredConfig>([\"apiKey\", \"transactionId\"], this)) {\n throw new MissingConfig();\n }\n return putTransaction({\n baseUrl: this.baseUrl,\n apiRoot: \"/api\",\n headers: {\n authorization: `Api-Key ${this.apiKey}`,\n },\n pathParams: {\n transactionId: this.transactionId,\n },\n requestBody: {\n nonprofitId: selectedNonprofitId,\n },\n });\n };\n\n private nonprofitListDataController = new AsyncController<typeof this.getChainNonprofits>(\n this,\n this.getChainNonprofits,\n );\n\n private selectionDataController = new AsyncController<typeof this.updateNonprofitIdForRecord>(\n this,\n this.updateNonprofitIdForRecord,\n );\n\n private localStorage = createScopedLocalStorage(this as LitElement & TRequiredConfig);\n\n connectedCallback() {\n super.connectedCallback();\n window.addEventListener(\"resize\", this.evaluateBreakPoints);\n }\n\n async firstUpdated(_changedProperties: PropertyValues) {\n await this.restoreStateFromCache();\n }\n\n async updated(previousPropertyValues: PropertyValues) {\n // Reload nonprofit list on change of any of these props:\n // Also fires on first load as props go from undefined => value\n const requireNewDataProps = [\"baseUrl\", \"storeId\", \"apiKey\", \"countryCode\", \"postalCode\", \"lang\"];\n for (const prop of requireNewDataProps) {\n if (previousPropertyValues.has(prop)) {\n await this.nonprofitListDataController.exec();\n break;\n }\n }\n }\n\n disconnectedCallback() {\n super.disconnectedCallback();\n }\n\n private restoreStateFromCache() {\n if (!enforceConfig<TRequiredConfig>([\"apiKey\"], this)) throw new MissingConfig();\n\n this.selectedNonprofitId = parseInt(this.localStorage.getItem(\"nonprofit\") || \"\") || undefined;\n try {\n // try to restore nonprofit list if we have data and it's not too old\n // list will continue to refresh async and replace this data when ready\n const { createdAt = 0, data } =\n this.localStorage.getItemJson<{ createdAt: string; data: any }>(LOCAL_STORAGE_KEYS.CHAIN_NONPROFITS) || {};\n const cacheTtl = 2 * 60 * 60 * 1000;\n if (new Date(createdAt).valueOf() + cacheTtl > new Date().valueOf()) {\n this.nonprofitListDataController.data = data;\n this.nonprofitListDataController.loading = false;\n }\n } catch (err) {\n // ignore cache retrieval error and continue to fetch data\n }\n }\n\n /**\n * Factory for selection event handler\n *\n * Nonprofit selector implements radio-button semantics:\n * * If nothing is selected, tabbing into selector selects first card\n * * Arrow keys changes focus between cards, but doesn't select\n * * Enter/Space sets selection\n * * If a nonprofit is selected, arrow keys change focus AND selection\n * * Click sets selection\n * @param {number} id\n * @param {number} index\n * @param {{id: number}[]} nonprofits\n * @returns {(evt: Event) => void}\n */\n private makeHandleSelect =\n (id: number, index: number, nonprofits: { nonprofit: { id: number } }[]): ((event: Event) => void) =>\n async (event: Event) => {\n if (!this.allowChange) return;\n const currentId = this.selectedNonprofitId;\n if (event instanceof KeyboardEvent) {\n let nextFocus = null;\n switch (event.key) {\n case \"ArrowUp\":\n case \"ArrowLeft\":\n if (index === 0) {\n nextFocus = nonprofits[nonprofits.length - 1];\n } else {\n nextFocus = nonprofits[index - 1];\n }\n event.preventDefault();\n break;\n case \"ArrowRight\":\n case \"ArrowDown\":\n if (index === nonprofits.length - 1) {\n nextFocus = nonprofits[0];\n } else {\n nextFocus = nonprofits[index + 1];\n }\n event.preventDefault();\n break;\n case \"Enter\":\n case \" \":\n event.preventDefault();\n break; // continue to toggle-selection block below\n default:\n return;\n }\n if (nextFocus) {\n const focusTarget = this.renderRoot.querySelector(`[data-value=\"${nextFocus.nonprofit.id}\"]`) as HTMLElement;\n if (focusTarget !== null) {\n focusTarget.tabIndex = 0;\n focusTarget.focus();\n }\n return;\n }\n }\n // Handle selection with click or Enter/Space key\n const targetEl = event.currentTarget;\n if (targetEl instanceof HTMLElement) {\n if (currentId === id) {\n // this[\"selected-nonprofit-id\"] = undefined; // unset (not supported)\n return; // no API call or localStorage change needed\n } else {\n this.selectedNonprofitId = id;\n }\n }\n };\n\n get allowChange() {\n // Disallow change if already submitted\n return this.selectionDataController.data == null && !this.selectionDataController.loading;\n }\n\n get allowSubmit() {\n // Disabled if no nonprofit has been selected yet or if submission was already received\n return Boolean(this.selectedNonprofitId && this.allowChange);\n }\n\n handleSubmit = async () => {\n const { selectedNonprofitId } = this;\n if (!this.allowSubmit || selectedNonprofitId == null) return;\n await this.selectionDataController.exec({ selectedNonprofitId });\n\n this.localStorage.setItem(\"nonprofit\", selectedNonprofitId);\n this.localStorage.setItem(\"nonprofit_selected_at\", new Date().toISOString());\n\n const selectedNonprofit = this.nonprofitListDataController?.data?.nonprofits.find(\n (np) => np.nonprofit.id === selectedNonprofitId,\n );\n\n this.dispatchEvent(\n new BeamNonprofitSelectEvent({\n selectedNonprofitId,\n nonprofitName: selectedNonprofit?.nonprofit.name,\n source: WIDGET_NAMES.redeem_transaction,\n timestamp: new Date(),\n }),\n );\n };\n\n evaluateBreakPoints = debounce(\n () => {\n this.isMobile = window.innerWidth < 768;\n },\n 50,\n { maxWait: 50, leading: true },\n );\n\n public get cssVariables() {\n const defaults = {\n \"--beam-fontFamily\": \"inherit\",\n \"--beam-fontStyle\": \"inherit\",\n \"--beam-fontSize\": \"inherit\",\n \"--beam-textColor\": \"inherit\",\n \"--beam-backgroundColor\": \"inherit\",\n ...defineCustomText(\"--beam-RedeemTransaction-title\", {\n fontSize: \"1.25em\",\n fontWeight: \"bold\",\n }),\n ...defineCustomText(\"--beam-RedeemTransaction-description\", {\n marginTop: \"0.5em\",\n lineHeight: \"normal\",\n }),\n ...partnerLogosConfigDefaults,\n ...progressBarConfigDefaults,\n \"--beam-RedeemTransaction-maxWidth\": \"1000px\",\n \"--beam-RedeemTransaction-submitButton-fontSize\": \"14px\",\n \"--beam-RedeemTransaction-submitButton-fontWeight\": \"inherit\",\n \"--beam-RedeemTransaction-submitButton-fontFamily\": \"inherit\",\n \"--beam-RedeemTransaction-submitButton-textTransform\": \"uppercase\",\n \"--beam-RedeemTransaction-submitButton-color\": \"#fff\",\n \"--beam-RedeemTransaction-submitButton-backgroundColor\": \"#000000\",\n \"--beam-RedeemTransaction-submitButton-borderRadius\": \"0px\",\n \"--beam-RedeemTransaction-submitButton-borderColor\": \"#000000\",\n \"--beam-RedeemTransaction-submitButton-padding\": \"16px 0px\",\n \"--beam-RedeemTransaction-submitButton-width\": \"100%\",\n \"--beam-RedeemTransaction-submitButton-marginTop\": \"10px\",\n \"--beam-RedeemTransaction-submitButton-marginBottom\": \"10px\",\n \"--beam-RedeemTransaction-submitButtonContainer-display\": \"flex\",\n \"--beam-RedeemTransaction-submitButtonContainer-backgroundColor\": \"#fff\",\n \"--beam-RedeemTransaction-submitButton-hover-backgroundColor\": \"#000000\",\n \"--beam-RedeemTransaction-submitButton-hover-borderColor\": \"#000000\",\n \"--beam-RedeemTransaction-submitButton-hover-color\": \"#fff\",\n \"--beam-RedeemTransaction-submitButton-disabled-borderColor\": \"#767676\",\n \"--beam-RedeemTransaction-submitButton-disabled-backgroundColor\": \"#767676\",\n \"--beam-RedeemTransaction-submitButton-disabled-color\": \"#fff\",\n \"--beam-RedeemTransaction-radioButton-color\": \"transparent\",\n \"--beam-RedeemTransaction-radioButton-borderColor\": \"#707070\",\n \"--beam-RedeemTransaction-radioButton-backgroundColor\": \"#fff\",\n \"--beam-RedeemTransaction-radioButton-hover-color\": \"#fff\",\n \"--beam-RedeemTransaction-radioButton-hover-backgroundColor\": \"#000\",\n \"--beam-RedeemTransaction-radioButton-hover-borderColor\": \"#000\",\n \"--beam-RedeemTransaction-radioButton-selected-borderColor\": \"#000\",\n \"--beam-RedeemTransaction-radioButton-selected-backgroundColor\": \"#000\",\n \"--beam-RedeemTransaction-radioButton-selected-color\": \"#fff\",\n \"--beam-RedeemTransaction-options-minWidth\": \"0px\",\n \"--beam-RedeemTransaction-options-columnCount\": \"1\",\n \"--beam-RedeemTransaction-options-borderWidth\": \"1px\",\n \"--beam-RedeemTransaction-options-image-borderRadius\": \"8px\",\n \"--beam-RedeemTransaction-options-image-height\": \"70px\",\n \"--beam-RedeemTransaction-options-image-height-mobile\": \"75px\",\n \"--beam-RedeemTransaction-options-borderColor\": \"#d9d9d9\",\n \"--beam-RedeemTransaction-options-backgroundColor\": \"transparent\",\n \"--beam-RedeemTransaction-options-marginTop\": \"15px\",\n \"--beam-RedeemTransaction-options-hover-backgroundColor\": \"#f1f1f1\",\n \"--beam-RedeemTransaction-options-hover-borderWidth\": \".5px\",\n \"--beam-RedeemTransaction-options-hover-borderColor\": \"#000000\",\n \"--beam-RedeemTransaction-options-selected-borderColor\": \"#000000\",\n \"--beam-RedeemTransaction-options-selected-borderWidth\": \".5px\",\n \"--beam-RedeemTransaction-options-selected-backgroundColor\": \"#eee\",\n ...defineCustomText(\"--beam-RedeemTransaction-options-details\", {\n fontSize: \"0.85em\",\n marginTop: \"0px\",\n lineHeight: \"normal\",\n letterSpacing: \"-0.45px\",\n }),\n ...defineCustomText(\"--beam-RedeemTransaction-options-details-cause\", {\n fontSize: \"1em\",\n fontWeight: \"bold\",\n }),\n \"--beam-RedeemTransaction-options-details-nonprofitName-fontWeight\": \"normal\",\n \"--beam-RedeemTransaction-options-details-nonprofitName-fontStyle\": \"inherit\",\n \"--beam-RedeemTransaction-options-details-fundingProgress-marginTop\": \"3px\", // update after class name addition\n ...defineCustomText(\"--beam-RedeemTransaction-options-details-fundingProgressLabel\", {\n fontSize: \"0.85em\",\n textTransform: \"capitalize\",\n }),\n \"--beam-RedeemTransaction-cardStyle\": \"'image'\", // icon, selected_icon, image\n \"--beam-RedeemTransaction-options-icon-padding\": \"0px\",\n \"--beam-RedeemTransaction-options-icon-backgroundColor\": \"#F3F3F3\",\n \"--beam-RedeemTransaction-options-collapseNonprofits-mobile\": \"false\",\n \"--beam-RedeemTransaction-options-collapseNonprofits-desktop\": \"false\",\n \"--beam-RedeemTransaction-image-width\": \"13%\",\n \"--beam-RedeemTransaction-image-height\": \"50%\",\n \"--beam-RedeemTransaction-image-width-mobile\": \"16%\",\n ...promoPillLabelConfigDefaults,\n };\n\n const remoteConfig = this.nonprofitListDataController?.data?.config?.web?.theme || {};\n\n const config = { ...defaults, ...remoteConfig };\n\n const serializable = Object.create({\n toCSS() {\n return _cssVariableMap(this as Record<string, string>);\n },\n });\n\n return Object.assign(serializable, config);\n }\n\n static styles = [\n cssReset,\n css`\n :host {\n display: block;\n max-width: var(--beam-RedeemTransaction-maxWidth);\n font-family: var(--beam-fontFamily);\n font-style: var(--beam-fontStyle);\n font-size: var(--beam-fontSize);\n background-color: var(--beam-backgroundColor);\n color: var(--beam-textColor);\n word-break: normal;\n }\n\n .headerContainer {\n align-items: flex-start;\n justify-content: space-between;\n display: flex;\n order: 2;\n }\n\n .submitButtonContainer {\n margin-top: var(--beam-RedeemTransaction-submitButton-marginTop);\n margin-bottom: var(--beam-RedeemTransaction-submitButton-marginBottom);\n background-color: var(--beam-RedeemTransaction-submitButtonContainer-backgroundColor);\n display: var(--beam-RedeemTransaction-submitButtonContainer-display);\n }\n\n .submitButton {\n color: var(--beam-RedeemTransaction-submitButton-color);\n background-color: var(--beam-RedeemTransaction-submitButton-backgroundColor);\n border: 1px solid var(--beam-RedeemTransaction-submitButton-borderColor);\n font-size: var(--beam-RedeemTransaction-submitButton-fontSize);\n font-weight: var(--beam-RedeemTransaction-submitButton-fontWeight);\n font-family: var(--beam-RedeemTransaction-submitButton-fontFamily);\n text-transform: var(--beam-RedeemTransaction-submitButton-textTransform);\n border-radius: var(--beam-RedeemTransaction-submitButton-borderRadius);\n padding: var(--beam-RedeemTransaction-submitButton-padding);\n width: var(--beam-RedeemTransaction-submitButton-width);\n transition:\n background-color 0.2s,\n border-color 0.2s,\n color 0.2s;\n cursor: pointer;\n }\n\n .submitButton:not(.isDisabled):focus-visible,\n .submitButton:not(.isDisabled):hover {\n background-color: var(--beam-RedeemTransaction-submitButton-hover-backgroundColor);\n border-color: var(--beam-RedeemTransaction-submitButton-hover-borderColor);\n color: var(--beam-RedeemTransaction-submitButton-hover-color);\n }\n\n .submitButton.isDisabled {\n color: var(--beam-RedeemTransaction-submitButton-disabled-color);\n background-color: var(--beam-RedeemTransaction-submitButton-disabled-backgroundColor);\n border-color: var(--beam-RedeemTransaction-submitButton-disabled-borderColor);\n cursor: not-allowed;\n }\n\n .options {\n margin-top: var(--beam-RedeemTransaction-options-marginTop);\n order: 3;\n flex-grow: 1;\n }\n\n .options.isHidden {\n display: none;\n }\n\n .option {\n border: var(--beam-RedeemTransaction-options-borderWidth) solid\n var(--beam-RedeemTransaction-options-borderColor);\n border-bottom: none;\n background-color: var(--beam-RedeemTransaction-options-backgroundColor);\n cursor: pointer;\n transition:\n border-color 0.2s,\n background-color 0.2s,\n outline 0.2s;\n }\n\n .option:first-child {\n border-radius: 8px 8px 0 0; /* Top corners rounded */\n }\n\n .option:last-child {\n border-bottom: var(--beam-RedeemTransaction-options-borderWidth) solid\n var(--beam-RedeemTransaction-options-borderColor);\n border-radius: 0 0 8px 8px; /* Bottom corners rounded */\n }\n\n .option:not(.isDisabled):not(:last-child):focus-visible,\n .option:not(.isDisabled):not(:last-child):hover,\n .option:not(.isSelected):not(:last-child):focus-visible,\n .option:not(.isSelected):not(:last-child):hover {\n background-color: var(--beam-RedeemTransaction-options-hover-backgroundColor);\n outline: var(--beam-RedeemTransaction-options-hover-borderWidth) solid\n var(--beam-RedeemTransaction-options-hover-borderColor);\n border-bottom: var(--beam-RedeemTransaction-options-hover-borderWidth) solid\n var(--beam-RedeemTransaction-options-hover-borderColor);\n }\n\n .option:not(.isDisabled):focus-visible,\n .option:not(.isDisabled):hover,\n .option:not(.isSelected):focus-visible,\n .option:not(.isSelected):hover {\n background-color: var(--beam-RedeemTransaction-options-hover-backgroundColor);\n outline: var(--beam-RedeemTransaction-options-hover-borderWidth) solid\n var(--beam-RedeemTransaction-options-hover-borderColor);\n }\n\n .option.isDisabled {\n cursor: not-allowed;\n }\n\n .option.isSelected {\n outline: var(--beam-RedeemTransaction-options-selected-borderWidth) solid\n var(--beam-RedeemTransaction-options-selected-borderColor);\n background-color: var(--beam-RedeemTransaction-options-selected-backgroundColor);\n border-bottom: var(--beam-RedeemTransaction-options-selected-borderWidth) solid\n var(--beam-RedeemTransaction-options-selected-borderColor);\n }\n\n .option.isSelected:focus-visible,\n .option.isSelected:hover {\n outline: var(--beam-RedeemTransaction-options-selected-borderWidth) solid\n var(--beam-RedeemTransaction-options-selected-borderColor);\n border-bottom: var(--beam-RedeemTransaction-options-selected-borderWidth) solid\n var(--beam-RedeemTransaction-options-selected-borderColor);\n }\n\n .option .radioButton {\n border-width: 1px;\n border-style: solid;\n transition:\n background-color 0.2s,\n color 0.2s,\n border-color 0.2s;\n color: var(--beam-RedeemTransaction-radioButton-color);\n background-color: var(--beam-RedeemTransaction-radioButton-backgroundColor);\n border-color: var(--beam-RedeemTransaction-radioButton-borderColor);\n }\n\n .option.isSelected .radioButton,\n .option.isSelected:focus-visible .radioButton,\n .option.isSelected:hover .radioButton {\n color: var(--beam-RedeemTransaction-radioButton-selected-color);\n background-color: var(--beam-RedeemTransaction-radioButton-selected-backgroundColor);\n border-color: var(--beam-RedeemTransaction-radioButton-selected-borderColor);\n }\n\n .option:not(.isSelected):focus-visible .radioButton,\n .option:not(.isSelected):hover .radioButton {\n color: var(--beam-RedeemTransaction-radioButton-hover-color);\n background-color: var(--beam-RedeemTransaction-radioButton-hover-backgroundColor);\n border-color: var(--beam-RedeemTransaction-radioButton-hover-borderColor);\n }\n\n .detailsDescription {\n ${useCustomText(\"--beam-RedeemTransaction-options-details\")}\n }\n\n .detailsDescription .nonprofitName {\n font-weight: var(--beam-RedeemTransaction-options-details-nonprofitName-fontWeight);\n font-style: var(--beam-RedeemTransaction-options-details-nonprofitName-fontStyle);\n }\n\n .radioButtonContainer {\n height: 100%;\n display: flex;\n align-items: center;\n justify-content: center;\n flex: 0 0 auto;\n }\n\n .radioButton {\n padding: 5px;\n border-radius: 100%;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n }\n\n .imageContainer {\n flex: 1 0 var(--beam-RedeemTransaction-image-width);\n display: flex;\n flex-direction: column;\n }\n\n .progressBarContainer {\n display: flex;\n align-items: center;\n }\n\n .details-progressBarLabel {\n ${useCustomText(\"--beam-RedeemTransaction-options-details-fundingProgressLabel\")}\n white-space: nowrap;\n text-align: right;\n margin-left: 15px;\n }\n\n .details {\n flex: 1 1 100%;\n display: flex;\n flex-direction: column;\n gap: 5px;\n }\n\n .root {\n display: flex;\n flex-direction: column;\n }\n\n .submitButtonContainer {\n order: 4;\n position: sticky;\n bottom: 0;\n z-index: 999;\n }\n\n .icon-background {\n width: 50px;\n height: 50px;\n border-radius: 50%;\n overflow: hidden;\n background: var(--beam-RedeemTransaction-options-icon-backgroundColor);\n display: flex;\n justify-content: center;\n align-items: center;\n }\n\n .icon {\n height: var(--beam-RedeemTransaction-image-height);\n }\n\n .icon-container {\n display: flex;\n justify-content: center;\n align-items: center;\n }\n `,\n cssCardGrid({\n gap: \"0px\",\n itemMinWidth: \"var(--beam-RedeemTransaction-options-minWidth, 0px)\",\n columnCount: \"var(--beam-RedeemTransaction-options-columnCount, 1)\",\n }),\n ];\n\n private handleChooseClick() {\n this.didUserExpandNonprofits = true;\n }\n\n get shouldCollapse() {\n const enableMobileCollapse = this.cssVariables[\"--beam-RedeemTransaction-options-collapseNonprofits-mobile\"];\n const enableDesktopCollapse = this.cssVariables[\"--beam-RedeemTransaction-options-collapseNonprofits-desktop\"];\n const isMobileCollapseEnabled = enableMobileCollapse?.toLowerCase() === \"true\";\n const isDesktopCollapseEnabled = enableDesktopCollapse?.toLowerCase() === \"true\";\n\n return (this.isMobile && isMobileCollapseEnabled) || (!this.isMobile && isDesktopCollapseEnabled);\n }\n\n private renderSubmitButton(data: TIAPIV3GetChainNonprofits) {\n return html`\n ${this.didUserExpandNonprofits || !this.shouldCollapse\n ? html` <button\n type=\"button\"\n ?aria-disabled=${!this.allowSubmit}\n @click=\"${this.handleSubmit}\"\n class=\"${classMap({\n isDisabled: !this.allowSubmit,\n submitButton: true,\n })}\"\n part=\"submitButton\"\n >\n ${this.selectionDataController.data !== null\n ? localizeUserString(\n this.configLang,\n data?.config?.web?.confirmedButton || strings[this.configLang].submitButtonTextCompleted(),\n )\n : localizeUserString(\n this.configLang,\n data?.config?.web?.confirmButton || strings[this.configLang].submitButtonText(),\n )}\n </button>`\n : html`\n <button type=\"button\" @click=\"${this.handleChooseClick}\" class=\"submitButton\" part=\"submitButton\">\n ${localizeUserString(\n this.configLang,\n data?.config?.web?.collapsedButton || strings[this.configLang].chooseButtonText(),\n )}\n </button>\n `}\n `;\n }\n\n private renderRadioButton() {\n return html`\n <div class=\"radioButtonContainer\">\n <span part=\"radioButton\" class=\"radioButton\">\n <span style=\"line-height: 0;\"> ${_radioButton({ height: \"7px\", width: \"7px\" })} </span>\n </span>\n </div>\n `;\n }\n\n private renderNonprofitImage(np: TIAPIV3Nonprofit, displayIcon: boolean) {\n const cardStyle = this.cssVariables[\"--beam-RedeemTransaction-cardStyle\"];\n\n const imageUrl = displayIcon\n ? cardStyle === \"'icon'\"\n ? np.nonprofit.causeIconUrl\n : cardStyle === \"'selected_icon'\"\n ? np.nonprofit.causeIconSelectedUrl\n : np.imageUrl\n : np.imageUrl;\n\n return html`\n ${displayIcon\n ? html` <div class=\"icon-container\">\n <div class=\"icon-background\">\n <img src=\"${imageUrl}\" alt=\"\" data-speedsize-ignore=\"true\" role=\"presentation\" class=\"icon\" />\n </div>\n </div>`\n : html` <div\n class=\"image-container\"\n style=\"${this.isMobile\n ? \"flex: 1 0 var(--beam-RedeemTransaction-image-width-mobile)\"\n : \"flex: 1 0 var(--beam-RedeemTransaction-image-width)\"}\"\n >\n <img\n src=\"${imageUrl}\"\n alt=\"\"\n role=\"presentation\"\n data-speedsize-ignore=\"true\"\n class=\"image\"\n style=\"\n width: 100%;\n height: ${this.isMobile\n ? \"var(--beam-RedeemTransaction-options-image-height-mobile)\"\n : \"var(--beam-RedeemTransaction-options-image-height)\"};\n object-fit: cover;\n border-radius: var(--beam-RedeemTransaction-options-image-borderRadius);}\n \"\n />\n </div>`}\n `;\n }\n\n private renderOptionDetail(np: TIAPIV3Nonprofit) {\n return html`\n <div class=\"detailsCause\" style=\"${useCustomText(\"--beam-RedeemTransaction-options-details-cause\")}\">\n ${localizeUserString(this.configLang, np.nonprofit.cause || \"\")}\n </div>\n <p class=\"detailsDescription\">${unsafeHTML(localizeUserString(this.configLang, np.impact.description || \"\"))}</p>\n `;\n }\n\n private renderProgressBar(np: TIAPIV3Nonprofit) {\n return html`\n <div class=\"progressBarContainer\">\n <beam-progress-bar value=\"${np.impact.goalProgressPercentage}\" style=\"flex: 1;\"></beam-progress-bar>\n <span class=\"details-progressBarLabel\">\n ${localizeUserString(this.configLang, np.impact.goalProgressText)}\n </span>\n </div>\n `;\n }\n\n private renderNonprofitDetails(\n np: TIAPIV3Nonprofit,\n hasNonprofitWithInactivePromo: boolean,\n data: TIAPIV3GetChainNonprofits,\n ) {\n return html`\n <div class=\"details\" part=\"details\">\n ${this.renderOptionDetail(np)} ${this.renderPromoPill(np, hasNonprofitWithInactivePromo, data)}\n </div>\n `;\n }\n\n private renderPromoPill(\n np: TIAPIV3Nonprofit,\n hasNonprofitWithInactivePromo: boolean,\n data: TIAPIV3GetChainNonprofits,\n ) {\n return html`\n ${np.promo?.isActive && this.shouldUsePromoUI && hasNonprofitWithInactivePromo\n ? html`<beam-promo-info-pill .promo=${data?.config?.web?.promo} shortVersion></beam-promo-info-pill>`\n : html``}\n `;\n }\n\n protected render() {\n const { selectedNonprofitId } = this;\n const { data, loading } = this.nonprofitListDataController;\n\n if (loading && !data) {\n return _loading();\n }\n if (this.nonprofitListDataController.error) {\n if (this.debug) {\n return _errorMessage({ error: this.nonprofitListDataController.error });\n }\n return \"\";\n }\n if (this.selectionDataController.error) {\n if (this.debug) {\n return _errorMessage({ error: this.selectionDataController.error });\n }\n // do not show error screen for interactive errors by default\n }\n if (data == null) {\n if (this.debug) {\n return _errorMessage({ error: new BeamError(\"No data\") });\n }\n return \"\";\n }\n const nonprofits = data?.nonprofits || [];\n const selectedNonprofit = nonprofits.find((np) => np.nonprofit.id === selectedNonprofitId) || null;\n // changes images in widget to icons\n const displayIcon =\n this.cssVariables[\"--beam-RedeemTransaction-cardStyle\"] === \"'icon'\" ||\n this.cssVariables[\"--beam-RedeemTransaction-cardStyle\"] === \"'selected_icon'\";\n const livePromo = data?.config?.web?.promo;\n this.shouldUsePromoUI = livePromo ? true : false; // new promo UI\n const hasNonprofitWithInactivePromo = nonprofits.some((nonprofit) => !nonprofit.promo || !nonprofit.promo.isActive);\n\n return html`\n <style>\n :host {\n ${this.cssVariables.toCSS()}\n }\n </style>\n <!-- Custom flex order fixes tab cycling so submit button is after content -->\n <div style=\"display: flex; flex-direction: column;\" class=\"root\">\n <div\n style=\"order: 3;\"\n tabindex=\"-1\"\n class=\"options cardGrid ${classMap({ isHidden: !this.didUserExpandNonprofits && this.shouldCollapse })}\"\n part=\"options\"\n role=\"radiogroup\"\n aria-labelledby=\"beam-RedeemTransaction-title\"\n ?aria-disabled=${!this.allowChange}\n >\n ${repeat(\n nonprofits,\n (i) => i.nonprofit.id,\n (np, index) => {\n const isSelected = selectedNonprofitId === np.nonprofit.id;\n const isFocusable = isSelected || (selectedNonprofit == null && index === 0);\n return html`\n <div\n class=\"option ${classMap({\n isSelected: isSelected,\n isDisabled: !this.allowChange,\n })}\"\n part=\"option\"\n role=\"radio\"\n tabindex=\"${isFocusable ? 0 : -1}\"\n data-value=${np.nonprofit.id}\n ?aria-checked=${isSelected}\n @click=${this.makeHandleSelect(np.nonprofit.id, index, nonprofits)}\n @keydown=${this.makeHandleSelect(np.nonprofit.id, index, nonprofits)}\n aria-label=\"${localizeUserString(this.configLang, np.nonprofit.cause || \"\")}\"\n style=\"display: flex; flex-direction: column; padding: 11px; justify-content:center;\"\n >\n <div class=\"optionContainer\" style=\"display: flex; align-items: flex-start; gap: 8px;\">\n ${this.renderRadioButton()}\n <div\n class=\"nonprofitInfoContainer\"\n style=\"flex: 1; display: flex; flex-direction: column; gap: 5px;\"\n >\n <div class=\"imageDetailContainer\" style=\"display: flex; gap: 8px;\">\n ${this.renderNonprofitImage(np, displayIcon)}\n ${this.renderNonprofitDetails(np, hasNonprofitWithInactivePromo, data)}\n </div>\n ${this.renderProgressBar(np)}\n </div>\n </div>\n </div>\n `;\n },\n )}\n </div>\n\n <div class=\"submitButtonContainer\" part=\"submit-button-container\">${this.renderSubmitButton(data)}</div>\n\n <div class=\"headerContainer\" part=\"header-container\">\n <div>\n <div\n class=\"header-promo-pill-container\"\n style=\"display: flex; ${this.isMobile && \"flex-direction: column; align-items: flex-start;\"}\"\n >\n <h3\n class=\"title\"\n part=\"title\"\n id=\"beam-RedeemTransaction-title\"\n style=\"${useCustomText(\"--beam-RedeemTransaction-title\")}; margin-right: 8px;\"\n >\n ${localizeUserString(this.configLang, data?.config?.web?.title) || strings[this.configLang].ctaTitle()}\n </h3>\n ${this.shouldUsePromoUI\n ? html`<beam-promo-info-pill\n .promo=${livePromo}\n style=\"${this.isMobile && \"order: -1; margin-bottom:10px;\"}\"\n ></beam-promo-info-pill>`\n : html``}\n </div>\n <p class=\"description\" part=\"description\" style=\"${useCustomText(\"--beam-RedeemTransaction-description\")}\">\n ${this.shouldUsePromoUI\n ? html`<span style=\"font-weight:bold\">\n ${localizeUserString(this.configLang, data?.config?.web?.promoDescriptionPrefix || \"\") ||\n strings[this.configLang].ctaPromoPrefixMessage()}\n </span>\n <span>\n ${localizeUserString(this.configLang, data?.config?.web?.promoDescription || \"\") ||\n strings[this.configLang].ctaPromoMessage()}\n </span>`\n : html`<span\n >${localizeUserString(this.configLang, data?.config?.web?.description || \"\") ||\n strings[this.configLang].ctaMessage()}\n </span>`}\n </p>\n </div>\n </div>\n\n <beam-partner-logos\n partnerName=\"${data.chain.name}\"\n partnerLogoUrl=\"${data.chain.logoUrl}\"\n style=\"order: 1\"\n part=\"logos\"\n ></beam-partner-logos>\n </div>\n `;\n }\n}\n\ndefineCustomElement(BeamRedeemTransaction);\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"beam-redeem-transaction\": BeamRedeemTransaction;\n }\n}\n"],"names":["postTransaction","makeOpenApiMethod","putTransaction","updateTransaction","_radioButton","height","width","html","styleMap","strings","donationPercentage","BeamRedeemTransaction","LitElement","DEFAULT_BASE_URL","MissingConfig","res","postChainEligibleNonprofitsForCart","WIDGET_NAMES","LOCAL_STORAGE_KEYS","selectedNonprofitId","enforceConfig","AsyncController","createScopedLocalStorage","id","index","nonprofits","event","currentId","nextFocus","focusTarget","selectedNonprofit","np","BeamNonprofitSelectEvent","debounce","SUPPORTED_LANGUAGES","areRequiredKeysDefined","_changedProperties","previousPropertyValues","requireNewDataProps","prop","createdAt","data","cacheTtl","defaults","defineCustomText","partnerLogosConfigDefaults","progressBarConfigDefaults","promoPillLabelConfigDefaults","remoteConfig","config","_cssVariableMap","enableMobileCollapse","enableDesktopCollapse","isMobileCollapseEnabled","isDesktopCollapseEnabled","classMap","localizeUserString","displayIcon","cardStyle","imageUrl","useCustomText","unsafeHTML","hasNonprofitWithInactivePromo","loading","_loading","_errorMessage","BeamError","livePromo","nonprofit","repeat","i","isSelected","isFocusable","cssReset","css","cssCardGrid","__decorateClass","property","state","defineCustomElement"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { B as BeamCartAPIConfig, a as BeamCartValues, u as updateCart } from './update-cart-DoJGAdoU.esm.js';
1
+ import { B as BeamCartAPIConfig, a as BeamCartValues, u as updateCart } from './update-cart-B5Tr9N3V.esm.js';
2
2
 
3
3
  declare const index_BeamCartAPIConfig: typeof BeamCartAPIConfig;
4
4
  declare const index_BeamCartValues: typeof BeamCartValues;
@@ -1,2 +1,2 @@
1
- import{o as j,i as k,b as x}from"./lodash-CrMU6wKg.esm.js";import{Q as D,l as u,J as q,A as M,M as F,b as Q,N as V,U as X,B as H,W as Y,K as Z,t as $,O as tt,V as et,z as at,X as nt}from"./utils-C5hmbxa4.esm.js";import{B as R}from"./index-Dm-K2MLY.esm.js";import{O as B}from"./index-MAMeVd6l.esm.js";const L=window.Shopify?.routes?.root||"/";let g=null,O=!0,A=!1;const it="cart";async function U(t,c=!0){if(g)return!1;const s=new AbortController;g=s;const{signal:n}=s;Q(),window.addEventListener(V.eventName,async()=>{A=!0},{signal:n}),window.addEventListener(X.eventName,async i=>{const a=i,o=/cart\/(add|change|update|clear)/,r=a.detail.type==="xhr"?a.detail.xhr.responseURL:a.detail.response.url,e=new URL(r);if(!o.test(e.pathname))return;const p=await S(t,n);n.aborted||!p.changed||B(t,p.cart)},{signal:n});let d,l;window.addEventListener(H.eventName,async i=>{const a=i;u.debug("[cart-page][BeamNonprofitSelectEvent]",a.detail);const{source:o,selectedNonprofitId:r,selectionId:e}=a.detail;if(o===Y.select_nonprofit){if(d===r&&l===e)return;const p=await _(t);await f({...p,selectedNonprofitId:r,selectionId:e}),l=e,d=r}},{signal:n}),window.addEventListener(Z.eventName,async i=>{const a=i;u.debug("[cart-page][BeamNonprofitSelectionRemovedEvent]",a.detail);const{newNonprofitId:o,selectionId:r}=a.detail;if(d===o&&l===r)return;const e=await _(t);await f({...e,selectedNonprofitId:null,selectionId:r}),l=r,d=o},{signal:n}),window.addEventListener($.eventName,async i=>{const a=i;if(u.debug("[cart-page][BeamCartCreatedEvent]",a.detail),window.statsig||c){const o=await _(t);await f(o)}},{signal:n}),window.addEventListener(tt.eventName,async i=>{const a=i;if(u.debug("[cart-page][BeamCartChangeEvent]",a.detail),window.statsig||c){const o=await _(t);await f(o)}},{signal:n});try{if(n.aborted)return!1;const i=await S(t,n);return!(n.aborted||(await B(t,i.cart,!0),n.aborted))}catch(i){throw g===s&&(s.abort(),g=null),i}}async function W(t,{clearStorage:c=!1}={}){const s=!!g;return s&&(g?.abort(),g=null,nt(),f.reset(),J.reset(),O=!0,A=!1),c&&et(t),s}async function T(t){const c=await _(t);await f(c)}async function _(t){let c,s;if(window.statsig)try{const a=window.statsig;typeof a?.getLayer("beam_trial_layer")?.get("show_beam")=="boolean"&&(c=a.getLayer("beam_trial_layer").get("show_beam",!1),s=a.getStableID())}catch{}const n=q(it,t),d=M(R,t),{chainId:l,storeId:i}=t;return{showBeam:c??void 0,remoteSessionId:s??void 0,beamCartId:d&&d!=="null"?d:void 0,cartId:n&&n!=="null"?n:void 0,chainId:l,storeId:i}}const z=T;async function S(t,c){const{token:s,total_price:n,item_count:d,currency:l,items:i,cart_level_discount_applications:a,attributes:o}=await v();let r=!1;const e=at(t),p=e.getItemJson("cart"),I=M(R,t),C={cartId:s,beamCartId:I,subtotal:n/100,itemCount:d,currencyCode:l,schema:{source:"generic"},content:{items:i.map(({sku:m,final_line_price:b,product_id:N,line_level_discount_allocations:E})=>{const y=m||String(N),h=b/100,G=E?.map(({discount_application:K})=>({code:K?.title,applicable:!0}));return{remoteProductIdentifier:y,localAmount:h,discounts:G}}),discounts:a.map(({title:m})=>({code:m,applicable:!0}))}};let w=null;try{o?.beam&&(w=JSON.parse(o.beam))}catch(m){u.error(m)}if(w&&O&&!A&&!c?.aborted){O=!1;const{nonprofit_id:m,selection_id:b}=w,N=e.getItem("nonprofit"),E=e.getItem("transaction"),y=m!==void 0&&String(m)!==N,h=b!=null&&String(b)!==E;(y||h)&&(y&&(e.setItem("nonprofit",String(m)),e.setItem("nonprofit_selected_at",new Date().toISOString())),h&&(e.setItem("transaction",String(b)),e.setItem("nonprofit_selected_at",new Date().toISOString())),window.dispatchEvent(new F({nonprofitId:m,nonprofitIdChanged:y,selectionId:b,selectionIdChanged:h})))}return k(C,{...p,beamCartId:p?.beamCartId})||(r=!0),{changed:r,cart:C}}const P=B,v=async function(){return await window.fetch(L+"cart.js",{method:"GET",headers:{"Content-Type":"application/json"}}).then(t=>t.json())},f=D(async function({selectedNonprofitId:t,selectionId:c,beamCartId:s,cartId:n,chainId:d,storeId:l,showBeam:i,remoteSessionId:a}){const{attributes:o}=await v(),r=o?.beam;let e={};try{r&&(e=JSON.parse(r))}catch(w){u.error(w)}const p=j({nonprofit_id:t,selection_id:c,beam_cart_id:s,shopify_cart_id:n,chain_id:d,store_id:l,show_beam:i,remote_session_id:a},x),I={...e,...p};t===null&&(I.nonprofit_id=void 0);const C={beam:JSON.stringify(I)};if(!k(I,e))try{await window.fetch(L+"cart/update.js",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({attributes:C})})}catch(w){u.error(w)}}),J=D(async function({selectedNonprofitId:t,selectionId:c,beamCartId:s,cartId:n,chainId:d,storeId:l}){let i,a;if(window.statsig)try{const e=window.statsig;typeof e?.getLayer("beam_trial_layer")?.get("show_beam")=="boolean"&&(i=e.getLayer("beam_trial_layer").get("show_beam",!1),a=e.getStableID())}catch{}const o=j({nonprofit_id:t,selection_id:c,beam_cart_id:s,shopify_cart_id:n,chain_id:d,store_id:l,show_beam:i,remote_session_id:a},x);t===null&&(o.nonprofit_id=void 0);const r={beam:JSON.stringify(o)};try{await window.fetch(L+"cart/update.js",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({attributes:r})})}catch(e){u.error(e)}});var ot=Object.freeze({__proto__:null,addBeamAttributesToCart:J,appendBeamAttributesToCart:f,appendStatsigToShopifyCartAttributes:z,appendToShopifyCartBeamAttribute:T,getBeamAttributesForCart:_,getCurrentCart:S,getShopifyCart:v,registerCartIntegration:U,trackCart:P,unregisterCartIntegration:W});export{J,S as L,v as T,W as a,U as e,f as g,ot as i,z as n,P as r,T as x,_ as y};
2
- //# sourceMappingURL=index-D6aFJ4cU.esm.js.map
1
+ import{o as j,i as k,b as x}from"./lodash-CrMU6wKg.esm.js";import{Q as D,l as u,J as q,A as M,M as F,b as Q,N as V,U as X,B as H,W as Y,K as Z,t as $,O as tt,V as et,z as at,X as nt}from"./utils-C5hmbxa4.esm.js";import{B as R}from"./index-BpR0FMss.esm.js";import{O as B}from"./index-Ghl9JrXJ.esm.js";const L=window.Shopify?.routes?.root||"/";let g=null,O=!0,A=!1;const it="cart";async function U(t,c=!0){if(g)return!1;const s=new AbortController;g=s;const{signal:n}=s;Q(),window.addEventListener(V.eventName,async()=>{A=!0},{signal:n}),window.addEventListener(X.eventName,async i=>{const a=i,o=/cart\/(add|change|update|clear)/,r=a.detail.type==="xhr"?a.detail.xhr.responseURL:a.detail.response.url,e=new URL(r);if(!o.test(e.pathname))return;const p=await S(t,n);n.aborted||!p.changed||B(t,p.cart)},{signal:n});let d,l;window.addEventListener(H.eventName,async i=>{const a=i;u.debug("[cart-page][BeamNonprofitSelectEvent]",a.detail);const{source:o,selectedNonprofitId:r,selectionId:e}=a.detail;if(o===Y.select_nonprofit){if(d===r&&l===e)return;const p=await _(t);await f({...p,selectedNonprofitId:r,selectionId:e}),l=e,d=r}},{signal:n}),window.addEventListener(Z.eventName,async i=>{const a=i;u.debug("[cart-page][BeamNonprofitSelectionRemovedEvent]",a.detail);const{newNonprofitId:o,selectionId:r}=a.detail;if(d===o&&l===r)return;const e=await _(t);await f({...e,selectedNonprofitId:null,selectionId:r}),l=r,d=o},{signal:n}),window.addEventListener($.eventName,async i=>{const a=i;if(u.debug("[cart-page][BeamCartCreatedEvent]",a.detail),window.statsig||c){const o=await _(t);await f(o)}},{signal:n}),window.addEventListener(tt.eventName,async i=>{const a=i;if(u.debug("[cart-page][BeamCartChangeEvent]",a.detail),window.statsig||c){const o=await _(t);await f(o)}},{signal:n});try{if(n.aborted)return!1;const i=await S(t,n);return!(n.aborted||(await B(t,i.cart,!0),n.aborted))}catch(i){throw g===s&&(s.abort(),g=null),i}}async function W(t,{clearStorage:c=!1}={}){const s=!!g;return s&&(g?.abort(),g=null,nt(),f.reset(),J.reset(),O=!0,A=!1),c&&et(t),s}async function T(t){const c=await _(t);await f(c)}async function _(t){let c,s;if(window.statsig)try{const a=window.statsig;typeof a?.getLayer("beam_trial_layer")?.get("show_beam")=="boolean"&&(c=a.getLayer("beam_trial_layer").get("show_beam",!1),s=a.getStableID())}catch{}const n=q(it,t),d=M(R,t),{chainId:l,storeId:i}=t;return{showBeam:c??void 0,remoteSessionId:s??void 0,beamCartId:d&&d!=="null"?d:void 0,cartId:n&&n!=="null"?n:void 0,chainId:l,storeId:i}}const z=T;async function S(t,c){const{token:s,total_price:n,item_count:d,currency:l,items:i,cart_level_discount_applications:a,attributes:o}=await v();let r=!1;const e=at(t),p=e.getItemJson("cart"),I=M(R,t),C={cartId:s,beamCartId:I,subtotal:n/100,itemCount:d,currencyCode:l,schema:{source:"generic"},content:{items:i.map(({sku:m,final_line_price:b,product_id:N,line_level_discount_allocations:E})=>{const y=m||String(N),h=b/100,G=E?.map(({discount_application:K})=>({code:K?.title,applicable:!0}));return{remoteProductIdentifier:y,localAmount:h,discounts:G}}),discounts:a.map(({title:m})=>({code:m,applicable:!0}))}};let w=null;try{o?.beam&&(w=JSON.parse(o.beam))}catch(m){u.error(m)}if(w&&O&&!A&&!c?.aborted){O=!1;const{nonprofit_id:m,selection_id:b}=w,N=e.getItem("nonprofit"),E=e.getItem("transaction"),y=m!==void 0&&String(m)!==N,h=b!=null&&String(b)!==E;(y||h)&&(y&&(e.setItem("nonprofit",String(m)),e.setItem("nonprofit_selected_at",new Date().toISOString())),h&&(e.setItem("transaction",String(b)),e.setItem("nonprofit_selected_at",new Date().toISOString())),window.dispatchEvent(new F({nonprofitId:m,nonprofitIdChanged:y,selectionId:b,selectionIdChanged:h})))}return k(C,{...p,beamCartId:p?.beamCartId})||(r=!0),{changed:r,cart:C}}const P=B,v=async function(){return await window.fetch(L+"cart.js",{method:"GET",headers:{"Content-Type":"application/json"}}).then(t=>t.json())},f=D(async function({selectedNonprofitId:t,selectionId:c,beamCartId:s,cartId:n,chainId:d,storeId:l,showBeam:i,remoteSessionId:a}){const{attributes:o}=await v(),r=o?.beam;let e={};try{r&&(e=JSON.parse(r))}catch(w){u.error(w)}const p=j({nonprofit_id:t,selection_id:c,beam_cart_id:s,shopify_cart_id:n,chain_id:d,store_id:l,show_beam:i,remote_session_id:a},x),I={...e,...p};t===null&&(I.nonprofit_id=void 0);const C={beam:JSON.stringify(I)};if(!k(I,e))try{await window.fetch(L+"cart/update.js",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({attributes:C})})}catch(w){u.error(w)}}),J=D(async function({selectedNonprofitId:t,selectionId:c,beamCartId:s,cartId:n,chainId:d,storeId:l}){let i,a;if(window.statsig)try{const e=window.statsig;typeof e?.getLayer("beam_trial_layer")?.get("show_beam")=="boolean"&&(i=e.getLayer("beam_trial_layer").get("show_beam",!1),a=e.getStableID())}catch{}const o=j({nonprofit_id:t,selection_id:c,beam_cart_id:s,shopify_cart_id:n,chain_id:d,store_id:l,show_beam:i,remote_session_id:a},x);t===null&&(o.nonprofit_id=void 0);const r={beam:JSON.stringify(o)};try{await window.fetch(L+"cart/update.js",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({attributes:r})})}catch(e){u.error(e)}});var ot=Object.freeze({__proto__:null,addBeamAttributesToCart:J,appendBeamAttributesToCart:f,appendStatsigToShopifyCartAttributes:z,appendToShopifyCartBeamAttribute:T,getBeamAttributesForCart:_,getCurrentCart:S,getShopifyCart:v,registerCartIntegration:U,trackCart:P,unregisterCartIntegration:W});export{J,S as L,v as T,W as a,U as e,f as g,ot as i,z as n,P as r,T as x,_ as y};
2
+ //# sourceMappingURL=index-BnbtpTg-.esm.js.map